From 748e96d85279da147d2b86d300a702d95a142a18 Mon Sep 17 00:00:00 2001 From: amammad Date: Mon, 19 Jun 2023 00:00:12 +1000 Subject: [PATCH 001/378] V1 Bombs --- .../Security/CWE-409/DecompressionBombs.qhelp | 34 + .../Security/CWE-409/DecompressionBombs.ql | 602 ++++++++++++++++++ .../Security/CWE-409/example_bad.py | 5 + .../Security/CWE-409/example_good.py | 21 + .../CWE-409/DecompressionBombs.expected | 258 ++++++++ .../Security/CWE-409/DecompressionBombs.qlref | 1 + .../CWE-409/Other_compresstion_modules.py | 54 ++ .../Security/CWE-409/tarfile_module.py | 31 + .../Security/CWE-409/zipfile_module.py | 128 ++++ .../Security/CWE-522/LDAPInsecureAuth.qlref | 1 - 10 files changed, 1134 insertions(+), 1 deletion(-) create mode 100644 python/ql/src/experimental/Security/CWE-409/DecompressionBombs.qhelp create mode 100644 python/ql/src/experimental/Security/CWE-409/DecompressionBombs.ql create mode 100644 python/ql/src/experimental/Security/CWE-409/example_bad.py create mode 100644 python/ql/src/experimental/Security/CWE-409/example_good.py create mode 100644 python/ql/test/experimental/query-tests/Security/CWE-409/DecompressionBombs.expected create mode 100644 python/ql/test/experimental/query-tests/Security/CWE-409/DecompressionBombs.qlref create mode 100644 python/ql/test/experimental/query-tests/Security/CWE-409/Other_compresstion_modules.py create mode 100644 python/ql/test/experimental/query-tests/Security/CWE-409/tarfile_module.py create mode 100644 python/ql/test/experimental/query-tests/Security/CWE-409/zipfile_module.py delete mode 100644 python/ql/test/experimental/query-tests/Security/CWE-522/LDAPInsecureAuth.qlref diff --git a/python/ql/src/experimental/Security/CWE-409/DecompressionBombs.qhelp b/python/ql/src/experimental/Security/CWE-409/DecompressionBombs.qhelp new file mode 100644 index 00000000000..309b4e7b34c --- /dev/null +++ b/python/ql/src/experimental/Security/CWE-409/DecompressionBombs.qhelp @@ -0,0 +1,34 @@ + + + +

Extracting Compressed files with any compression algorithm like gzip can cause to denial of service attacks.

+

Attackers can compress a huge file which created by repeated similiar byte and convert it to a small compressed file.

+ +
+ + +

When you want to decompress a user-provided compressed file you must be careful about the decompression ratio or read these files within a loop byte by byte to be able to manage the decompressed size in each cycle of the loop.

+ +
+ +

python ZipFile library is vulnerable by default

+ + +

By checking the decompressed size from input zipped file you can check the decompression ratio. attackers can forge this decompressed size header too. +So can't rely on file_size attribute of ZipInfo class. this is recommended to use "ZipFile.open" method to be able to manage decompressed size.

+

Reading decompressed file byte by byte and verifying the total current size in each loop cycle in recommended to use in any decompression library.

+ +
+ + +
  • +CVE-2023-22898 +
  • +
  • +A great research to gain more impact by this kind of attack +
  • + +
    +
    diff --git a/python/ql/src/experimental/Security/CWE-409/DecompressionBombs.ql b/python/ql/src/experimental/Security/CWE-409/DecompressionBombs.ql new file mode 100644 index 00000000000..7f8f493decf --- /dev/null +++ b/python/ql/src/experimental/Security/CWE-409/DecompressionBombs.ql @@ -0,0 +1,602 @@ +/** + * @name User-controlled file decompression + * @description User-controlled data that flows into decompression library APIs without checking the compression rate is dangerous + * @kind path-problem + * @problem.severity error + * @security-severity 7.8 + * @precision medium + * @id py/user-controlled-file-decompression + * @tags security + * experimental + * external/cwe/cwe-409 + */ + +import python +import semmle.python.dataflow.new.DataFlow +import semmle.python.dataflow.new.TaintTracking +import semmle.python.ApiGraphs +import semmle.python.dataflow.new.RemoteFlowSources +import semmle.python.dataflow.new.internal.DataFlowPublic + +module pyZipFile { + /** + * ```python + * zipfile.PyZipFile() + */ + private API::Node pyZipFileClass() { + result = API::moduleImport("zipfile").getMember("PyZipFile") + } + + /** + * same as zipfileSinks + */ + DataFlow::Node isSink() { result = sink(pyZipFileClass()).getACall() } + + private API::Node sink(API::Node pyZipFileClass) { + result = pyZipFileClass.getReturn().getMember(["extractall", "read", "extract", "testzip"]) + or + result = pyZipFileClass.getReturn().getMember("open") and + // only read mode is sink + // mode can be set in open() argument or in PyZipFile instantiation argument + ( + not exists( + result + .getACall() + .getParameter(1, "mode") + .getAValueReachingSink() + .asExpr() + .(StrConst) + .getText() + ) or + result + .getACall() + .getParameter(1, "mode") + .getAValueReachingSink() + .asExpr() + .(StrConst) + .getText() = "r" + ) and + ( + not exists( + pyZipFileClass + .getACall() + .getParameter(1, "mode") + .getAValueReachingSink() + .asExpr() + .(StrConst) + .getText() + ) or + pyZipFileClass + .getACall() + .getParameter(1, "mode") + .getAValueReachingSink() + .asExpr() + .(StrConst) + .getText() = "r" + ) + } + + /** + * Same as ZipFile + * I made PyZipFile seperated from ZipFile as in future this will be compatible + * if anyone want to add new methods an sink to each object. + */ + predicate isAdditionalTaintStep(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) { + exists(API::Node pyZipFileClass | pyZipFileClass = pyZipFileClass() | + nodeFrom = pyZipFileClass.getACall().getParameter(0, "file").asSink() and + nodeTo = + [ + sink(pyZipFileClass).getACall(), + pyZipFileClass + .getACall() + .getReturn() + .getMember(["extractall", "read", "extract", "testzip"]) + .getACall() + ] + ) + } +} + +module Lzma { + private API::Node lzmaClass() { + result = API::moduleImport("lzma").getMember(["LZMAFile", "open"]) + } + + /** + * `lzma.open(sink)` + * `lzma.LZMAFile(sink)` + * only read mode is sink + */ + DataFlow::Node isSink() { + exists(API::Node lzmaClass | lzmaClass = lzmaClass() | + result = lzmaClass.getACall().getParameter(0, "filename").asSink() and + ( + not exists( + lzmaClass + .getACall() + .getParameter(1, "mode") + .getAValueReachingSink() + .asExpr() + .(StrConst) + .getText() + ) or + lzmaClass + .getACall() + .getParameter(1, "mode") + .getAValueReachingSink() + .asExpr() + .(StrConst) + .getText() + .matches("%r%") + ) + ) + } +} + +module Bz2 { + private API::Node bz2Class() { result = API::moduleImport("bz2").getMember(["BZ2File", "open"]) } + + /** + * `bz2.open(sink)` + * `bz2.BZ2File(sink)` + * only read mode is sink + */ + DataFlow::Node isSink() { + exists(API::Node bz2Class | bz2Class = bz2Class() | + result = bz2Class.getACall().getParameter(0, "filename").asSink() and + ( + not exists( + bz2Class + .getACall() + .getParameter(1, "mode") + .getAValueReachingSink() + .asExpr() + .(StrConst) + .getText() + ) or + bz2Class + .getACall() + .getParameter(1, "mode") + .getAValueReachingSink() + .asExpr() + .(StrConst) + .getText() + .matches("%r%") + ) + ) + } +} + +module Gzip { + private API::Node gzipClass() { + result = API::moduleImport("gzip").getMember(["GzipFile", "open"]) + } + + /** + * `gzip.open(sink)` + * `gzip.GzipFile(sink)` + * only read mode is sink + */ + DataFlow::Node isSink() { + exists(API::Node gzipClass | gzipClass = gzipClass() | + result = gzipClass.getACall().getParameter(0, "filename").asSink() and + ( + not exists( + gzipClass + .getACall() + .getParameter(1, "mode") + .getAValueReachingSink() + .asExpr() + .(StrConst) + .getText() + ) or + gzipClass + .getACall() + .getParameter(1, "mode") + .getAValueReachingSink() + .asExpr() + .(StrConst) + .getText() + .matches("%r%") + ) + ) + } +} + +module ZipFile { + // more sinks file:///home/am/CodeQL-home/codeql-repo/python/ql/src/experimental/semmle/python/security/ZipSlip.qll + /** + * ```python + * zipfile.ZipFile() + * ``` + */ + private API::Node zipFileClass() { result = API::moduleImport("zipfile").getMember("ZipFile") } + + /** + * ```python + * zipfile.ZipFile("zipfileName.zip") + * # read() or one of ["read", "readline", "readlines", "seek", "tell", "__iter__", "__next__"] + * myzip.open('eggs.txt',"r").read() + * # I decided to choice open method with "r" mode as sink + * # because opening zipfile with "r" mode mostly is for reading content of that file + * # so we have a very few of FP here + * next(myzip.open('eggs.txt')) + * myzip.extractall() + * myzip.read() + * myzip.extract() + * # testzip not a RAM consumer but it uses as much CPU as possible + * myzip.testzip() + * + * ``` + */ + private API::Node sink(API::Node zipFileInstance) { + // we can go forward one more step and check whether we call the required methods for read + // or just opening zipfile for reading is enough ( mode = "r") + // result = + // zipfileReturnIOFile() + // .getReturn() + // .getMember(["read", "readline", "readlines", "seek", "tell", "__iter__", "__next__"]) + // or + ( + result = zipFileInstance.getReturn().getMember(["extractall", "read", "extract", "testzip"]) + or + result = zipFileInstance.getReturn().getMember("open") and + ( + not exists( + result + .getACall() + .getParameter(1, "mode") + .getAValueReachingSink() + .asExpr() + .(StrConst) + .getText() + ) or + result + .getACall() + .getParameter(1, "mode") + .getAValueReachingSink() + .asExpr() + .(StrConst) + .getText() = "r" + ) and + ( + not exists( + zipFileInstance + .getACall() + .getParameter(1, "mode") + .getAValueReachingSink() + .asExpr() + .(StrConst) + .getText() + ) or + zipFileInstance + .getACall() + .getParameter(1, "mode") + .getAValueReachingSink() + .asExpr() + .(StrConst) + .getText() = "r" + ) and + zipFileSanitizer(result) + ) and + exists(result.getACall().getLocation().getFile().getRelativePath()) + } + + /** + * a sanitizers which check if there is a managed read + * ```python + * with zipfile.ZipFile(zipFileName) as myzip: + * with myzip.open(fileinfo.filename, mode="r") as myfile: + * while chunk: + * chunk = myfile.read(buffer_size) + * total_size += buffer_size + * if total_size > SIZE_THRESHOLD: + * ... + * ``` + */ + predicate zipFileSanitizer(API::Node n) { + not TaintTracking::localExprTaint(n.getReturn() + .getMember("read") + .getParameter(0) + .asSink() + .asExpr(), any(Compare i).getASubExpression*()) + } + + DataFlow::Node isSink() { result = sink(zipFileClass()).getACall() } + + /** + * ```python + * nodeFrom = "zipFileName.zip" + * myZip = zipfile.ZipFile(nodeFrom) + * nodeTo2 = myZip.open('eggs.txt',"r") + * + * nodeTo = myZip.extractall() + * nodeTo = myZip.read() + * nodeTo = myZip.extract() + * # testzip not a RAM consumer but it uses as much CPU as possible + * nodeTo = myZip.testzip() + * + * ``` + */ + predicate isAdditionalTaintStep(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) { + exists(API::Node zipFileInstance | zipFileInstance = zipFileClass() | + nodeFrom = zipFileInstance.getACall().getParameter(0, "file").asSink() and + nodeTo = + [ + sink(zipFileInstance).getACall(), + zipFileInstance + .getACall() + .getReturn() + .getMember(["extractall", "read", "extract", "testzip"]) + .getACall() + ] + ) and + exists(nodeTo.getLocation().getFile().getRelativePath()) + } +} + +module TarFile { + /** + * tarfile.open + * + * tarfile.Tarfile.open/xzopen/gzopen/bz2open + * and not mode="r:" which means no compression accepted + */ + API::Node tarfileInstance() { + result = + [ + API::moduleImport("tarfile").getMember("open"), + API::moduleImport("tarfile") + .getMember("TarFile") + .getMember(["xzopen", "gzopen", "bz2open", "open"]) + ] and + ( + not exists( + result + .getACall() + .getParameter(1, "mode") + .getAValueReachingSink() + .asExpr() + .(StrConst) + .getText() + ) or + not result + .getACall() + .getParameter(1, "mode") + .getAValueReachingSink() + .asExpr() + .(StrConst) + .getText() + .matches("r:%") + ) + } + + /** + * a Call of + * `tarfile.open(filepath).extractall()/extract()/extractfile()` + * or + * `tarfile.Tarfile.xzopen()/gzopen()/bz2open()` + */ + DataFlow::Node isSink() { + result = + tarfileInstance().getReturn().getMember(["extractall", "extract", "extractfile"]).getACall() + } + + predicate isAdditionalTaintStep(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) { + exists(API::Node tarfileInstance | tarfileInstance = tarfileInstance() | + nodeFrom = tarfileInstance.getACall().getParameter(0, "name").asSink() and + nodeTo = + tarfileInstance.getReturn().getMember(["extractall", "extract", "extractfile"]).getACall() + ) + } +} + +module Shutil { + DataFlow::Node isSink() { + result = + [ + API::moduleImport("shutil") + .getMember("unpack_archive") + .getACall() + .getParameter(0, "filename") + .asSink() + ] + } +} + +module Pandas { + DataFlow::Node isSink() { + exists(API::CallNode calltoPandasMethods | + ( + calltoPandasMethods = + API::moduleImport("pandas") + .getMember([ + "read_csv", "read_json", "read_sas", "read_stata", "read_table", "read_xml" + ]) + .getACall() and + result = calltoPandasMethods.getArg(0) + or + calltoPandasMethods = + API::moduleImport("pandas") + .getMember(["read_csv", "read_sas", "read_stata", "read_table"]) + .getACall() and + result = calltoPandasMethods.getArgByName("filepath_or_buffer") + or + calltoPandasMethods = API::moduleImport("pandas").getMember("read_json").getACall() and + result = calltoPandasMethods.getArgByName("path_or_buf") + or + calltoPandasMethods = API::moduleImport("pandas").getMember("read_xml").getACall() and + result = calltoPandasMethods.getArgByName("path_or_buffer") + ) and + ( + not exists(calltoPandasMethods.getArgByName("compression")) + or + not calltoPandasMethods + .getKeywordParameter("compression") + .getAValueReachingSink() + .asExpr() + .(StrConst) + .getText() = "tar" + ) + ) + } +} + +module FileAndFormRemoteFlowSource { + class FastAPI extends DataFlow::Node { + FastAPI() { + exists(API::Node fastAPIParam | + fastAPIParam = + API::moduleImport("fastapi") + .getMember("FastAPI") + .getReturn() + .getMember("post") + .getReturn() + .getParameter(0) + .getKeywordParameter(_) and + API::moduleImport("fastapi") + .getMember("UploadFile") + .getASubclass*() + .getAValueReachableFromSource() + .asExpr() = + fastAPIParam.asSource().asExpr().(Parameter).getAnnotation().getASubExpression*() + | + // in the case of List of files + exists(For f, Attribute attr, DataFlow::Node a, DataFlow::Node b | + fastAPIParam.getAValueReachableFromSource().asExpr() = f.getIter().getASubExpression*() + | + // file.file in following + // def upload(files: List[UploadFile] = File(...)): + // for file in files: + // **file.file** + // thanks Arthur Baars for helping me in following + TaintTracking::localTaint(a, b) and + a.asExpr() = f.getIter() and + b.asExpr() = attr.getObject() and + attr.getName() = ["filename", "content_type", "headers", "file", "read"] and + this.asExpr() = attr + ) + or + // exclude cases like type-annotated with `Response` + // and not not any(Response::RequestHandlerParam src).asExpr() = result + this = + [ + fastAPIParam.asSource(), + fastAPIParam.getMember(["filename", "content_type", "headers", "file"]).asSource(), + fastAPIParam.getMember(["read"]).getReturn().asSource(), + // file-like object, I'm trying to not do additional work here by using already existing file-like objs if it is possible + // fastAPIParam.getMember("file").getAMember().asSource(), + ] + ) + or + exists(API::Node fastAPIParam | + fastAPIParam = + API::moduleImport("fastapi") + .getMember("FastAPI") + .getReturn() + .getMember("post") + .getReturn() + .getParameter(0) + .getKeywordParameter(_) and + API::moduleImport("fastapi") + .getMember("File") + .getASubclass*() + .getAValueReachableFromSource() + .asExpr() = + fastAPIParam.asSource().asExpr().(Parameter).getAnnotation().getASubExpression*() + | + // in the case of List of files + exists(For f, Attribute attr, DataFlow::Node a, DataFlow::Node b | + fastAPIParam.getAValueReachableFromSource().asExpr() = f.getIter().getASubExpression*() + | + // file.file in following + // def upload(files: List[UploadFile] = File(...)): + // for file in files: + // **file.file** + // thanks Arthur Baars for helping me in following + TaintTracking::localTaint(a, b) and + a.asExpr() = f.getIter() and + b.asExpr() = attr.getObject() and + attr.getName() = "file" and + this.asExpr() = attr + ) + or + // exclude cases like type-annotated with `Response` + // and not not any(Response::RequestHandlerParam src).asExpr() = result + this = fastAPIParam.asSource() + ) and + exists(this.getLocation().getFile().getRelativePath()) + } + } +} + +/** + * `io.TextIOWrapper(ip, encoding='utf-8')` like following: + * ```python + * with gzip.open(bomb_input, 'rb') as ip: + * with io.TextIOWrapper(ip, encoding='utf-8') as decoder: + * content = decoder.read() + * print(content) + * ``` + * I saw this builtin method many places so I added it as a AdditionalTaintStep. + * it would be nice if it is added as a global AdditionalTaintStep + */ +predicate isAdditionalTaintStepTextIOWrapper(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) { + exists(API::CallNode textIOWrapper | + textIOWrapper = API::moduleImport("io").getMember("TextIOWrapper").getACall() + | + nodeFrom = textIOWrapper.getParameter(0, "input").asSink() and + nodeTo = textIOWrapper + ) and + exists(nodeTo.getLocation().getFile().getRelativePath()) +} + +module BombsConfig implements DataFlow::ConfigSig { + // borrowed from UnsafeUnpackQuery.qll + predicate isSource(DataFlow::Node source) { + source instanceof RemoteFlowSource + or + exists(MethodCallNode args | + args = source.(AttrRead).getObject().getALocalSource() and + args = + [ + API::moduleImport("argparse") + .getMember("ArgumentParser") + .getReturn() + .getMember("parse_args") + .getACall(), API::moduleImport("os").getMember("getenv").getACall(), + API::moduleImport("os").getMember("environ").getMember("get").getACall() + ] + ) + or + source instanceof FileAndFormRemoteFlowSource::FastAPI + } + + predicate isSink(DataFlow::Node sink) { + sink = + [ + pyZipFile::isSink(), ZipFile::isSink(), Gzip::isSink(), Lzma::isSink(), Bz2::isSink(), + TarFile::isSink(), Lzma::isSink(), Shutil::isSink(), Pandas::isSink() + ] and + exists(sink.getLocation().getFile().getRelativePath()) + } + + predicate isAdditionalFlowStep(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) { + ( + isAdditionalTaintStepTextIOWrapper(nodeFrom, nodeTo) or + ZipFile::isAdditionalTaintStep(nodeFrom, nodeTo) or + pyZipFile::isAdditionalTaintStep(nodeFrom, nodeTo) or + TarFile::isAdditionalTaintStep(nodeFrom, nodeTo) + ) and + exists(nodeTo.getLocation().getFile().getRelativePath()) + } +} + +module Bombs = TaintTracking::Global; + +import Bombs::PathGraph + +from Bombs::PathNode source, Bombs::PathNode sink +where Bombs::flowPath(source, sink) +select sink.getNode(), source, sink, "This file extraction depends on a $@.", source.getNode(), + "potentially untrusted source" diff --git a/python/ql/src/experimental/Security/CWE-409/example_bad.py b/python/ql/src/experimental/Security/CWE-409/example_bad.py new file mode 100644 index 00000000000..32442366458 --- /dev/null +++ b/python/ql/src/experimental/Security/CWE-409/example_bad.py @@ -0,0 +1,5 @@ +import zipfile + + +def Bad(zip_path): + zipfile.ZipFile(zip_path, "r").extract("filename", "./tmp/") diff --git a/python/ql/src/experimental/Security/CWE-409/example_good.py b/python/ql/src/experimental/Security/CWE-409/example_good.py new file mode 100644 index 00000000000..f11c7bba097 --- /dev/null +++ b/python/ql/src/experimental/Security/CWE-409/example_good.py @@ -0,0 +1,21 @@ +import zipfile + + +def safeUnzip(zipFileName): + buffer_size = 2 ** 10 * 8 + total_size = 0 + SIZE_THRESHOLD = 2 ** 10 * 100 + with zipfile.ZipFile(zipFileName) as myzip: + for fileinfo in myzip.infolist(): + content = b'' + with myzip.open(fileinfo.filename, mode="r") as myfile: + chunk = myfile.read(buffer_size) + while chunk: + chunk = myfile.read(buffer_size) + total_size += buffer_size + if total_size > SIZE_THRESHOLD: + print("Bomb detected") + return + content += chunk + print(bytes.decode(content, 'utf-8')) + return "No Bombs!" diff --git a/python/ql/test/experimental/query-tests/Security/CWE-409/DecompressionBombs.expected b/python/ql/test/experimental/query-tests/Security/CWE-409/DecompressionBombs.expected new file mode 100644 index 00000000000..94839132e56 --- /dev/null +++ b/python/ql/test/experimental/query-tests/Security/CWE-409/DecompressionBombs.expected @@ -0,0 +1,258 @@ +edges +| Other_compresstion_modules.py:7:10:7:19 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:9:27:9:36 | ControlFlowNode for bomb_input | +| Other_compresstion_modules.py:7:10:7:19 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:11:15:11:24 | ControlFlowNode for bomb_input | +| Other_compresstion_modules.py:7:10:7:19 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:12:19:12:28 | ControlFlowNode for bomb_input | +| Other_compresstion_modules.py:7:10:7:19 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:14:15:14:24 | ControlFlowNode for bomb_input | +| Other_compresstion_modules.py:7:10:7:19 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:15:19:15:28 | ControlFlowNode for bomb_input | +| Other_compresstion_modules.py:7:10:7:19 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:17:20:17:29 | ControlFlowNode for bomb_input | +| Other_compresstion_modules.py:7:10:7:19 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:23:14:23:23 | ControlFlowNode for bomb_input | +| Other_compresstion_modules.py:7:10:7:19 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:24:17:24:26 | ControlFlowNode for bomb_input | +| Other_compresstion_modules.py:7:10:7:19 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:27:40:27:49 | ControlFlowNode for bomb_input | +| Other_compresstion_modules.py:7:10:7:19 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:29:23:29:32 | ControlFlowNode for bomb_input | +| Other_compresstion_modules.py:7:10:7:19 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:30:21:30:30 | ControlFlowNode for bomb_input | +| Other_compresstion_modules.py:7:10:7:19 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:32:40:32:49 | ControlFlowNode for bomb_input | +| Other_compresstion_modules.py:7:10:7:19 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:33:22:33:31 | ControlFlowNode for bomb_input | +| Other_compresstion_modules.py:7:10:7:19 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:34:21:34:30 | ControlFlowNode for bomb_input | +| Other_compresstion_modules.py:7:10:7:19 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:35:42:35:51 | ControlFlowNode for bomb_input | +| Other_compresstion_modules.py:7:10:7:19 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:36:23:36:32 | ControlFlowNode for bomb_input | +| Other_compresstion_modules.py:7:10:7:19 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:37:36:37:45 | ControlFlowNode for bomb_input | +| Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:53:10:53:19 | ControlFlowNode for bomb_input | +| Other_compresstion_modules.py:53:10:53:19 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:7:10:7:19 | ControlFlowNode for bomb_input | +| file:///usr/lib/python3.10/zipfile.py:344:24:344:31 | ControlFlowNode for filename | file:///usr/lib/python3.10/zipfile.py:351:24:351:44 | ControlFlowNode for Subscript | +| file:///usr/lib/python3.10/zipfile.py:344:24:344:31 | ControlFlowNode for filename | file:///usr/lib/python3.10/zipfile.py:358:25:358:32 | ControlFlowNode for filename | +| file:///usr/lib/python3.10/zipfile.py:351:24:351:44 | ControlFlowNode for Subscript | file:///usr/lib/python3.10/zipfile.py:358:25:358:32 | ControlFlowNode for filename | +| file:///usr/lib/python3.10/zipfile.py:358:25:358:32 | ControlFlowNode for filename | file:///usr/lib/python3.10/zipfile.py:358:9:358:12 | [post] ControlFlowNode for self [Attribute filename] | +| file:///usr/lib/python3.10/zipfile.py:1216:24:1216:27 | ControlFlowNode for file | file:///usr/lib/python3.10/zipfile.py:1258:23:1258:26 | ControlFlowNode for file | +| file:///usr/lib/python3.10/zipfile.py:1258:13:1258:16 | [post] ControlFlowNode for self [Attribute fp] | file:///usr/lib/python3.10/zipfile.py:1259:13:1259:16 | ControlFlowNode for self [Attribute fp] | +| file:///usr/lib/python3.10/zipfile.py:1258:23:1258:26 | ControlFlowNode for file | file:///usr/lib/python3.10/zipfile.py:1258:13:1258:16 | [post] ControlFlowNode for self [Attribute fp] | +| file:///usr/lib/python3.10/zipfile.py:1259:13:1259:16 | ControlFlowNode for self [Attribute fp] | file:///usr/lib/python3.10/zipfile.py:1260:9:1260:12 | ControlFlowNode for self [Attribute fp] | +| file:///usr/lib/python3.10/zipfile.py:1260:9:1260:12 | ControlFlowNode for self [Attribute fp] | file:///usr/lib/python3.10/zipfile.py:1261:9:1261:12 | ControlFlowNode for self [Attribute fp] | +| file:///usr/lib/python3.10/zipfile.py:1261:9:1261:12 | ControlFlowNode for self [Attribute fp] | file:///usr/lib/python3.10/zipfile.py:1262:9:1262:12 | ControlFlowNode for self [Attribute fp] | +| file:///usr/lib/python3.10/zipfile.py:1262:9:1262:12 | ControlFlowNode for self [Attribute fp] | file:///usr/lib/python3.10/zipfile.py:1263:9:1263:12 | ControlFlowNode for self [Attribute fp] | +| file:///usr/lib/python3.10/zipfile.py:1263:9:1263:12 | ControlFlowNode for self [Attribute fp] | file:///usr/lib/python3.10/zipfile.py:1267:17:1267:20 | ControlFlowNode for self [Attribute fp] | +| file:///usr/lib/python3.10/zipfile.py:1263:9:1263:12 | ControlFlowNode for self [Attribute fp] | file:///usr/lib/python3.10/zipfile.py:1287:21:1287:24 | ControlFlowNode for self [Attribute fp] | +| file:///usr/lib/python3.10/zipfile.py:1267:17:1267:20 | ControlFlowNode for self [Attribute fp] | file:///usr/lib/python3.10/zipfile.py:1267:17:1267:20 | [post] ControlFlowNode for self [Attribute filelist, List element, Attribute filename] | +| file:///usr/lib/python3.10/zipfile.py:1267:17:1267:20 | ControlFlowNode for self [Attribute fp] | file:///usr/lib/python3.10/zipfile.py:1326:26:1326:29 | ControlFlowNode for self [Attribute fp] | +| file:///usr/lib/python3.10/zipfile.py:1287:21:1287:24 | ControlFlowNode for self [Attribute fp] | file:///usr/lib/python3.10/zipfile.py:1287:21:1287:24 | [post] ControlFlowNode for self [Attribute filelist, List element, Attribute filename] | +| file:///usr/lib/python3.10/zipfile.py:1287:21:1287:24 | ControlFlowNode for self [Attribute fp] | file:///usr/lib/python3.10/zipfile.py:1326:26:1326:29 | ControlFlowNode for self [Attribute fp] | +| file:///usr/lib/python3.10/zipfile.py:1326:26:1326:29 | ControlFlowNode for self [Attribute fp] | file:///usr/lib/python3.10/zipfile.py:1328:14:1328:17 | ControlFlowNode for self [Attribute fp] | +| file:///usr/lib/python3.10/zipfile.py:1328:14:1328:17 | ControlFlowNode for self [Attribute fp] | file:///usr/lib/python3.10/zipfile.py:1328:14:1328:20 | ControlFlowNode for Attribute | +| file:///usr/lib/python3.10/zipfile.py:1328:14:1328:20 | ControlFlowNode for Attribute | file:///usr/lib/python3.10/zipfile.py:1376:25:1376:32 | ControlFlowNode for filename | +| file:///usr/lib/python3.10/zipfile.py:1376:17:1376:33 | ControlFlowNode for ZipInfo() [Attribute filename] | file:///usr/lib/python3.10/zipfile.py:1377:13:1377:13 | ControlFlowNode for x [Attribute filename] | +| file:///usr/lib/python3.10/zipfile.py:1376:25:1376:32 | ControlFlowNode for filename | file:///usr/lib/python3.10/zipfile.py:344:24:344:31 | ControlFlowNode for filename | +| file:///usr/lib/python3.10/zipfile.py:1376:25:1376:32 | ControlFlowNode for filename | file:///usr/lib/python3.10/zipfile.py:1376:17:1376:33 | ControlFlowNode for ZipInfo() [Attribute filename] | +| file:///usr/lib/python3.10/zipfile.py:1377:13:1377:13 | ControlFlowNode for x [Attribute filename] | file:///usr/lib/python3.10/zipfile.py:1378:13:1378:13 | ControlFlowNode for x [Attribute filename] | +| file:///usr/lib/python3.10/zipfile.py:1378:13:1378:13 | ControlFlowNode for x [Attribute filename] | file:///usr/lib/python3.10/zipfile.py:1379:13:1379:13 | ControlFlowNode for x [Attribute filename] | +| file:///usr/lib/python3.10/zipfile.py:1379:13:1379:13 | ControlFlowNode for x [Attribute filename] | file:///usr/lib/python3.10/zipfile.py:1388:13:1388:13 | ControlFlowNode for x [Attribute filename] | +| file:///usr/lib/python3.10/zipfile.py:1388:13:1388:13 | ControlFlowNode for x [Attribute filename] | file:///usr/lib/python3.10/zipfile.py:1389:13:1389:13 | ControlFlowNode for x [Attribute filename] | +| file:///usr/lib/python3.10/zipfile.py:1389:13:1389:13 | ControlFlowNode for x [Attribute filename] | file:///usr/lib/python3.10/zipfile.py:1393:13:1393:13 | ControlFlowNode for x [Attribute filename] | +| file:///usr/lib/python3.10/zipfile.py:1393:13:1393:13 | ControlFlowNode for x [Attribute filename] | file:///usr/lib/python3.10/zipfile.py:1394:34:1394:34 | ControlFlowNode for x [Attribute filename] | +| file:///usr/lib/python3.10/zipfile.py:1394:13:1394:25 | [post] ControlFlowNode for Attribute [List element, Attribute filename] | file:///usr/lib/python3.10/zipfile.py:1394:13:1394:16 | [post] ControlFlowNode for self [Attribute filelist, List element, Attribute filename] | +| file:///usr/lib/python3.10/zipfile.py:1394:34:1394:34 | ControlFlowNode for x [Attribute filename] | file:///usr/lib/python3.10/zipfile.py:1394:13:1394:25 | [post] ControlFlowNode for Attribute [List element, Attribute filename] | +| file:///usr/lib/python3.10/zipfile.py:1410:18:1410:21 | ControlFlowNode for self [Attribute filelist, List element, Attribute filename] | file:///usr/lib/python3.10/zipfile.py:1413:16:1413:19 | ControlFlowNode for self [Attribute filelist, List element, Attribute filename] | +| file:///usr/lib/python3.10/zipfile.py:1413:16:1413:19 | ControlFlowNode for self [Attribute filelist, List element, Attribute filename] | file:///usr/lib/python3.10/zipfile.py:1413:16:1413:28 | ControlFlowNode for Attribute [List element, Attribute filename] | +| file:///usr/lib/python3.10/zipfile.py:1617:23:1617:28 | ControlFlowNode for member [Attribute filename] | file:///usr/lib/python3.10/zipfile.py:1628:37:1628:42 | ControlFlowNode for member [Attribute filename] | +| file:///usr/lib/python3.10/zipfile.py:1628:37:1628:42 | ControlFlowNode for member [Attribute filename] | file:///usr/lib/python3.10/zipfile.py:1628:16:1628:54 | ControlFlowNode for Attribute() | +| file:///usr/lib/python3.10/zipfile.py:1628:37:1628:42 | ControlFlowNode for member [Attribute filename] | file:///usr/lib/python3.10/zipfile.py:1662:31:1662:36 | ControlFlowNode for member [Attribute filename] | +| file:///usr/lib/python3.10/zipfile.py:1662:31:1662:36 | ControlFlowNode for member [Attribute filename] | file:///usr/lib/python3.10/zipfile.py:1671:19:1671:24 | ControlFlowNode for member [Attribute filename] | +| file:///usr/lib/python3.10/zipfile.py:1671:19:1671:24 | ControlFlowNode for member [Attribute filename] | file:///usr/lib/python3.10/zipfile.py:1671:19:1671:33 | ControlFlowNode for Attribute | +| file:///usr/lib/python3.10/zipfile.py:1671:19:1671:33 | ControlFlowNode for Attribute | file:///usr/lib/python3.10/zipfile.py:1677:19:1677:48 | ControlFlowNode for Subscript | +| file:///usr/lib/python3.10/zipfile.py:1677:19:1677:48 | ControlFlowNode for Subscript | file:///usr/lib/python3.10/zipfile.py:1679:42:1679:42 | SSA variable x | +| file:///usr/lib/python3.10/zipfile.py:1679:36:1680:65 | ControlFlowNode for GeneratorExp | file:///usr/lib/python3.10/zipfile.py:1696:20:1696:29 | ControlFlowNode for targetpath | +| file:///usr/lib/python3.10/zipfile.py:1679:36:1680:65 | ControlFlowNode for GeneratorExp | file:///usr/lib/python3.10/zipfile.py:1702:16:1702:25 | ControlFlowNode for targetpath | +| file:///usr/lib/python3.10/zipfile.py:1679:42:1679:42 | SSA variable x | file:///usr/lib/python3.10/zipfile.py:1679:36:1680:65 | ControlFlowNode for GeneratorExp | +| tarfile_module.py:5:17:5:24 | ControlFlowNode for tar_path | tarfile_module.py:8:5:8:54 | ControlFlowNode for Attribute() | +| tarfile_module.py:5:17:5:24 | ControlFlowNode for tar_path | tarfile_module.py:9:5:9:54 | ControlFlowNode for Attribute() | +| tarfile_module.py:5:17:5:24 | ControlFlowNode for tar_path | tarfile_module.py:10:5:10:56 | ControlFlowNode for Attribute() | +| tarfile_module.py:5:17:5:24 | ControlFlowNode for tar_path | tarfile_module.py:11:5:11:49 | ControlFlowNode for Attribute() | +| tarfile_module.py:5:17:5:24 | ControlFlowNode for tar_path | tarfile_module.py:12:5:12:59 | ControlFlowNode for Attribute() | +| tarfile_module.py:5:17:5:24 | ControlFlowNode for tar_path | tarfile_module.py:13:5:13:51 | ControlFlowNode for Attribute() | +| tarfile_module.py:29:19:29:24 | ControlFlowNode for bar_id | tarfile_module.py:30:17:30:22 | ControlFlowNode for bar_id | +| tarfile_module.py:30:17:30:22 | ControlFlowNode for bar_id | tarfile_module.py:5:17:5:24 | ControlFlowNode for tar_path | +| zipfile_module.py:9:17:9:24 | ControlFlowNode for zip_path | zipfile_module.py:11:5:11:57 | ControlFlowNode for Attribute() | +| zipfile_module.py:9:17:9:24 | ControlFlowNode for zip_path | zipfile_module.py:12:34:12:41 | ControlFlowNode for zip_path | +| zipfile_module.py:9:17:9:24 | ControlFlowNode for zip_path | zipfile_module.py:15:5:15:38 | ControlFlowNode for Attribute() | +| zipfile_module.py:9:17:9:24 | ControlFlowNode for zip_path | zipfile_module.py:17:5:17:58 | ControlFlowNode for Attribute() | +| zipfile_module.py:12:18:12:47 | ControlFlowNode for Attribute() [Attribute filelist, List element, Attribute filename] | zipfile_module.py:17:24:17:33 | ControlFlowNode for zipFileObj [Attribute filelist, List element, Attribute filename] | +| zipfile_module.py:12:34:12:41 | ControlFlowNode for zip_path | file:///usr/lib/python3.10/zipfile.py:1216:24:1216:27 | ControlFlowNode for file | +| zipfile_module.py:12:34:12:41 | ControlFlowNode for zip_path | zipfile_module.py:12:18:12:47 | ControlFlowNode for Attribute() [Attribute filelist, List element, Attribute filename] | +| zipfile_module.py:17:24:17:33 | ControlFlowNode for zipFileObj [Attribute filelist, List element, Attribute filename] | file:///usr/lib/python3.10/zipfile.py:1410:18:1410:21 | ControlFlowNode for self [Attribute filelist, List element, Attribute filename] | +| zipfile_module.py:17:24:17:33 | ControlFlowNode for zipFileObj [Attribute filelist, List element, Attribute filename] | zipfile_module.py:17:24:17:44 | ControlFlowNode for Attribute() [List element, Attribute filename] | +| zipfile_module.py:17:24:17:44 | ControlFlowNode for Attribute() [List element, Attribute filename] | zipfile_module.py:17:24:17:47 | ControlFlowNode for Subscript [Attribute filename] | +| zipfile_module.py:17:24:17:47 | ControlFlowNode for Subscript [Attribute filename] | file:///usr/lib/python3.10/zipfile.py:1617:23:1617:28 | ControlFlowNode for member [Attribute filename] | +| zipfile_module.py:17:24:17:47 | ControlFlowNode for Subscript [Attribute filename] | zipfile_module.py:17:5:17:58 | ControlFlowNode for Attribute() | +| zipfile_module.py:20:20:20:27 | ControlFlowNode for zip_path | zipfile_module.py:30:5:30:35 | ControlFlowNode for Attribute() | +| zipfile_module.py:34:18:34:25 | ControlFlowNode for zip_path | zipfile_module.py:37:14:37:29 | ControlFlowNode for Attribute() | +| zipfile_module.py:34:18:34:25 | ControlFlowNode for zip_path | zipfile_module.py:42:29:42:36 | ControlFlowNode for Attribute | +| zipfile_module.py:34:18:34:25 | ControlFlowNode for zip_path | zipfile_module.py:45:14:45:39 | ControlFlowNode for Attribute() | +| zipfile_module.py:34:18:34:25 | ControlFlowNode for zip_path | zipfile_module.py:53:5:53:35 | ControlFlowNode for Attribute() | +| zipfile_module.py:34:18:34:25 | ControlFlowNode for zip_path | zipfile_module.py:62:44:62:61 | ControlFlowNode for Attribute() | +| zipfile_module.py:42:21:42:37 | ControlFlowNode for BytesIO() | file:///usr/lib/python3.10/zipfile.py:1216:24:1216:27 | ControlFlowNode for file | +| zipfile_module.py:42:21:42:37 | ControlFlowNode for BytesIO() | zipfile_module.py:42:5:42:54 | ControlFlowNode for Attribute() | +| zipfile_module.py:42:29:42:36 | ControlFlowNode for Attribute | zipfile_module.py:42:5:42:54 | ControlFlowNode for Attribute() | +| zipfile_module.py:42:29:42:36 | ControlFlowNode for Attribute | zipfile_module.py:42:21:42:37 | ControlFlowNode for BytesIO() | +| zipfile_module.py:89:19:89:24 | ControlFlowNode for bar_id | zipfile_module.py:90:20:90:25 | ControlFlowNode for bar_id | +| zipfile_module.py:89:19:89:24 | ControlFlowNode for bar_id | zipfile_module.py:91:17:91:22 | ControlFlowNode for bar_id | +| zipfile_module.py:89:19:89:24 | ControlFlowNode for bar_id | zipfile_module.py:92:18:92:23 | ControlFlowNode for bar_id | +| zipfile_module.py:90:20:90:25 | ControlFlowNode for bar_id | zipfile_module.py:20:20:20:27 | ControlFlowNode for zip_path | +| zipfile_module.py:91:17:91:22 | ControlFlowNode for bar_id | zipfile_module.py:9:17:9:24 | ControlFlowNode for zip_path | +| zipfile_module.py:92:18:92:23 | ControlFlowNode for bar_id | zipfile_module.py:34:18:34:25 | ControlFlowNode for zip_path | +| zipfile_module.py:99:26:99:34 | ControlFlowNode for Attribute | file:///usr/lib/python3.10/zipfile.py:1216:24:1216:27 | ControlFlowNode for file | +| zipfile_module.py:99:26:99:34 | ControlFlowNode for Attribute | zipfile_module.py:100:14:100:29 | ControlFlowNode for Attribute() | +| zipfile_module.py:106:23:106:26 | ControlFlowNode for file | zipfile_module.py:108:14:108:29 | ControlFlowNode for Attribute() | +| zipfile_module.py:116:30:116:38 | ControlFlowNode for Attribute | file:///usr/lib/python3.10/zipfile.py:1216:24:1216:27 | ControlFlowNode for file | +| zipfile_module.py:116:30:116:38 | ControlFlowNode for Attribute | zipfile_module.py:117:18:117:33 | ControlFlowNode for Attribute() | +| zipfile_module.py:125:30:125:38 | ControlFlowNode for Attribute | file:///usr/lib/python3.10/zipfile.py:1216:24:1216:27 | ControlFlowNode for file | +| zipfile_module.py:125:30:125:38 | ControlFlowNode for Attribute | zipfile_module.py:126:18:126:33 | ControlFlowNode for Attribute() | +nodes +| Other_compresstion_modules.py:7:10:7:19 | ControlFlowNode for bomb_input | semmle.label | ControlFlowNode for bomb_input | +| Other_compresstion_modules.py:9:27:9:36 | ControlFlowNode for bomb_input | semmle.label | ControlFlowNode for bomb_input | +| Other_compresstion_modules.py:11:15:11:24 | ControlFlowNode for bomb_input | semmle.label | ControlFlowNode for bomb_input | +| Other_compresstion_modules.py:12:19:12:28 | ControlFlowNode for bomb_input | semmle.label | ControlFlowNode for bomb_input | +| Other_compresstion_modules.py:14:15:14:24 | ControlFlowNode for bomb_input | semmle.label | ControlFlowNode for bomb_input | +| Other_compresstion_modules.py:15:19:15:28 | ControlFlowNode for bomb_input | semmle.label | ControlFlowNode for bomb_input | +| Other_compresstion_modules.py:17:20:17:29 | ControlFlowNode for bomb_input | semmle.label | ControlFlowNode for bomb_input | +| Other_compresstion_modules.py:23:14:23:23 | ControlFlowNode for bomb_input | semmle.label | ControlFlowNode for bomb_input | +| Other_compresstion_modules.py:24:17:24:26 | ControlFlowNode for bomb_input | semmle.label | ControlFlowNode for bomb_input | +| Other_compresstion_modules.py:27:40:27:49 | ControlFlowNode for bomb_input | semmle.label | ControlFlowNode for bomb_input | +| Other_compresstion_modules.py:29:23:29:32 | ControlFlowNode for bomb_input | semmle.label | ControlFlowNode for bomb_input | +| Other_compresstion_modules.py:30:21:30:30 | ControlFlowNode for bomb_input | semmle.label | ControlFlowNode for bomb_input | +| Other_compresstion_modules.py:32:40:32:49 | ControlFlowNode for bomb_input | semmle.label | ControlFlowNode for bomb_input | +| Other_compresstion_modules.py:33:22:33:31 | ControlFlowNode for bomb_input | semmle.label | ControlFlowNode for bomb_input | +| Other_compresstion_modules.py:34:21:34:30 | ControlFlowNode for bomb_input | semmle.label | ControlFlowNode for bomb_input | +| Other_compresstion_modules.py:35:42:35:51 | ControlFlowNode for bomb_input | semmle.label | ControlFlowNode for bomb_input | +| Other_compresstion_modules.py:36:23:36:32 | ControlFlowNode for bomb_input | semmle.label | ControlFlowNode for bomb_input | +| Other_compresstion_modules.py:37:36:37:45 | ControlFlowNode for bomb_input | semmle.label | ControlFlowNode for bomb_input | +| Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | semmle.label | ControlFlowNode for bomb_input | +| Other_compresstion_modules.py:53:10:53:19 | ControlFlowNode for bomb_input | semmle.label | ControlFlowNode for bomb_input | +| file:///usr/lib/python3.10/zipfile.py:344:24:344:31 | ControlFlowNode for filename | semmle.label | ControlFlowNode for filename | +| file:///usr/lib/python3.10/zipfile.py:351:24:351:44 | ControlFlowNode for Subscript | semmle.label | ControlFlowNode for Subscript | +| file:///usr/lib/python3.10/zipfile.py:358:9:358:12 | [post] ControlFlowNode for self [Attribute filename] | semmle.label | [post] ControlFlowNode for self [Attribute filename] | +| file:///usr/lib/python3.10/zipfile.py:358:25:358:32 | ControlFlowNode for filename | semmle.label | ControlFlowNode for filename | +| file:///usr/lib/python3.10/zipfile.py:1216:24:1216:27 | ControlFlowNode for file | semmle.label | ControlFlowNode for file | +| file:///usr/lib/python3.10/zipfile.py:1258:13:1258:16 | [post] ControlFlowNode for self [Attribute fp] | semmle.label | [post] ControlFlowNode for self [Attribute fp] | +| file:///usr/lib/python3.10/zipfile.py:1258:23:1258:26 | ControlFlowNode for file | semmle.label | ControlFlowNode for file | +| file:///usr/lib/python3.10/zipfile.py:1259:13:1259:16 | ControlFlowNode for self [Attribute fp] | semmle.label | ControlFlowNode for self [Attribute fp] | +| file:///usr/lib/python3.10/zipfile.py:1260:9:1260:12 | ControlFlowNode for self [Attribute fp] | semmle.label | ControlFlowNode for self [Attribute fp] | +| file:///usr/lib/python3.10/zipfile.py:1261:9:1261:12 | ControlFlowNode for self [Attribute fp] | semmle.label | ControlFlowNode for self [Attribute fp] | +| file:///usr/lib/python3.10/zipfile.py:1262:9:1262:12 | ControlFlowNode for self [Attribute fp] | semmle.label | ControlFlowNode for self [Attribute fp] | +| file:///usr/lib/python3.10/zipfile.py:1263:9:1263:12 | ControlFlowNode for self [Attribute fp] | semmle.label | ControlFlowNode for self [Attribute fp] | +| file:///usr/lib/python3.10/zipfile.py:1267:17:1267:20 | ControlFlowNode for self [Attribute fp] | semmle.label | ControlFlowNode for self [Attribute fp] | +| file:///usr/lib/python3.10/zipfile.py:1267:17:1267:20 | [post] ControlFlowNode for self [Attribute filelist, List element, Attribute filename] | semmle.label | [post] ControlFlowNode for self [Attribute filelist, List element, Attribute filename] | +| file:///usr/lib/python3.10/zipfile.py:1287:21:1287:24 | ControlFlowNode for self [Attribute fp] | semmle.label | ControlFlowNode for self [Attribute fp] | +| file:///usr/lib/python3.10/zipfile.py:1287:21:1287:24 | [post] ControlFlowNode for self [Attribute filelist, List element, Attribute filename] | semmle.label | [post] ControlFlowNode for self [Attribute filelist, List element, Attribute filename] | +| file:///usr/lib/python3.10/zipfile.py:1326:26:1326:29 | ControlFlowNode for self [Attribute fp] | semmle.label | ControlFlowNode for self [Attribute fp] | +| file:///usr/lib/python3.10/zipfile.py:1328:14:1328:17 | ControlFlowNode for self [Attribute fp] | semmle.label | ControlFlowNode for self [Attribute fp] | +| file:///usr/lib/python3.10/zipfile.py:1328:14:1328:20 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| file:///usr/lib/python3.10/zipfile.py:1376:17:1376:33 | ControlFlowNode for ZipInfo() [Attribute filename] | semmle.label | ControlFlowNode for ZipInfo() [Attribute filename] | +| file:///usr/lib/python3.10/zipfile.py:1376:25:1376:32 | ControlFlowNode for filename | semmle.label | ControlFlowNode for filename | +| file:///usr/lib/python3.10/zipfile.py:1377:13:1377:13 | ControlFlowNode for x [Attribute filename] | semmle.label | ControlFlowNode for x [Attribute filename] | +| file:///usr/lib/python3.10/zipfile.py:1378:13:1378:13 | ControlFlowNode for x [Attribute filename] | semmle.label | ControlFlowNode for x [Attribute filename] | +| file:///usr/lib/python3.10/zipfile.py:1379:13:1379:13 | ControlFlowNode for x [Attribute filename] | semmle.label | ControlFlowNode for x [Attribute filename] | +| file:///usr/lib/python3.10/zipfile.py:1388:13:1388:13 | ControlFlowNode for x [Attribute filename] | semmle.label | ControlFlowNode for x [Attribute filename] | +| file:///usr/lib/python3.10/zipfile.py:1389:13:1389:13 | ControlFlowNode for x [Attribute filename] | semmle.label | ControlFlowNode for x [Attribute filename] | +| file:///usr/lib/python3.10/zipfile.py:1393:13:1393:13 | ControlFlowNode for x [Attribute filename] | semmle.label | ControlFlowNode for x [Attribute filename] | +| file:///usr/lib/python3.10/zipfile.py:1394:13:1394:16 | [post] ControlFlowNode for self [Attribute filelist, List element, Attribute filename] | semmle.label | [post] ControlFlowNode for self [Attribute filelist, List element, Attribute filename] | +| file:///usr/lib/python3.10/zipfile.py:1394:13:1394:25 | [post] ControlFlowNode for Attribute [List element, Attribute filename] | semmle.label | [post] ControlFlowNode for Attribute [List element, Attribute filename] | +| file:///usr/lib/python3.10/zipfile.py:1394:34:1394:34 | ControlFlowNode for x [Attribute filename] | semmle.label | ControlFlowNode for x [Attribute filename] | +| file:///usr/lib/python3.10/zipfile.py:1410:18:1410:21 | ControlFlowNode for self [Attribute filelist, List element, Attribute filename] | semmle.label | ControlFlowNode for self [Attribute filelist, List element, Attribute filename] | +| file:///usr/lib/python3.10/zipfile.py:1413:16:1413:19 | ControlFlowNode for self [Attribute filelist, List element, Attribute filename] | semmle.label | ControlFlowNode for self [Attribute filelist, List element, Attribute filename] | +| file:///usr/lib/python3.10/zipfile.py:1413:16:1413:28 | ControlFlowNode for Attribute [List element, Attribute filename] | semmle.label | ControlFlowNode for Attribute [List element, Attribute filename] | +| file:///usr/lib/python3.10/zipfile.py:1617:23:1617:28 | ControlFlowNode for member [Attribute filename] | semmle.label | ControlFlowNode for member [Attribute filename] | +| file:///usr/lib/python3.10/zipfile.py:1628:16:1628:54 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| file:///usr/lib/python3.10/zipfile.py:1628:37:1628:42 | ControlFlowNode for member [Attribute filename] | semmle.label | ControlFlowNode for member [Attribute filename] | +| file:///usr/lib/python3.10/zipfile.py:1662:31:1662:36 | ControlFlowNode for member [Attribute filename] | semmle.label | ControlFlowNode for member [Attribute filename] | +| file:///usr/lib/python3.10/zipfile.py:1671:19:1671:24 | ControlFlowNode for member [Attribute filename] | semmle.label | ControlFlowNode for member [Attribute filename] | +| file:///usr/lib/python3.10/zipfile.py:1671:19:1671:33 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| file:///usr/lib/python3.10/zipfile.py:1677:19:1677:48 | ControlFlowNode for Subscript | semmle.label | ControlFlowNode for Subscript | +| file:///usr/lib/python3.10/zipfile.py:1679:36:1680:65 | ControlFlowNode for GeneratorExp | semmle.label | ControlFlowNode for GeneratorExp | +| file:///usr/lib/python3.10/zipfile.py:1679:42:1679:42 | SSA variable x | semmle.label | SSA variable x | +| file:///usr/lib/python3.10/zipfile.py:1696:20:1696:29 | ControlFlowNode for targetpath | semmle.label | ControlFlowNode for targetpath | +| file:///usr/lib/python3.10/zipfile.py:1702:16:1702:25 | ControlFlowNode for targetpath | semmle.label | ControlFlowNode for targetpath | +| tarfile_module.py:5:17:5:24 | ControlFlowNode for tar_path | semmle.label | ControlFlowNode for tar_path | +| tarfile_module.py:8:5:8:54 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| tarfile_module.py:9:5:9:54 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| tarfile_module.py:10:5:10:56 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| tarfile_module.py:11:5:11:49 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| tarfile_module.py:12:5:12:59 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| tarfile_module.py:13:5:13:51 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| tarfile_module.py:29:19:29:24 | ControlFlowNode for bar_id | semmle.label | ControlFlowNode for bar_id | +| tarfile_module.py:30:17:30:22 | ControlFlowNode for bar_id | semmle.label | ControlFlowNode for bar_id | +| zipfile_module.py:9:17:9:24 | ControlFlowNode for zip_path | semmle.label | ControlFlowNode for zip_path | +| zipfile_module.py:11:5:11:57 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| zipfile_module.py:12:18:12:47 | ControlFlowNode for Attribute() [Attribute filelist, List element, Attribute filename] | semmle.label | ControlFlowNode for Attribute() [Attribute filelist, List element, Attribute filename] | +| zipfile_module.py:12:34:12:41 | ControlFlowNode for zip_path | semmle.label | ControlFlowNode for zip_path | +| zipfile_module.py:15:5:15:38 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| zipfile_module.py:17:5:17:58 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| zipfile_module.py:17:24:17:33 | ControlFlowNode for zipFileObj [Attribute filelist, List element, Attribute filename] | semmle.label | ControlFlowNode for zipFileObj [Attribute filelist, List element, Attribute filename] | +| zipfile_module.py:17:24:17:44 | ControlFlowNode for Attribute() [List element, Attribute filename] | semmle.label | ControlFlowNode for Attribute() [List element, Attribute filename] | +| zipfile_module.py:17:24:17:47 | ControlFlowNode for Subscript [Attribute filename] | semmle.label | ControlFlowNode for Subscript [Attribute filename] | +| zipfile_module.py:20:20:20:27 | ControlFlowNode for zip_path | semmle.label | ControlFlowNode for zip_path | +| zipfile_module.py:30:5:30:35 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| zipfile_module.py:34:18:34:25 | ControlFlowNode for zip_path | semmle.label | ControlFlowNode for zip_path | +| zipfile_module.py:37:14:37:29 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| zipfile_module.py:42:5:42:54 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| zipfile_module.py:42:21:42:37 | ControlFlowNode for BytesIO() | semmle.label | ControlFlowNode for BytesIO() | +| zipfile_module.py:42:29:42:36 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| zipfile_module.py:45:14:45:39 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| zipfile_module.py:53:5:53:35 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| zipfile_module.py:62:44:62:61 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| zipfile_module.py:89:19:89:24 | ControlFlowNode for bar_id | semmle.label | ControlFlowNode for bar_id | +| zipfile_module.py:90:20:90:25 | ControlFlowNode for bar_id | semmle.label | ControlFlowNode for bar_id | +| zipfile_module.py:91:17:91:22 | ControlFlowNode for bar_id | semmle.label | ControlFlowNode for bar_id | +| zipfile_module.py:92:18:92:23 | ControlFlowNode for bar_id | semmle.label | ControlFlowNode for bar_id | +| zipfile_module.py:99:26:99:34 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| zipfile_module.py:100:14:100:29 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| zipfile_module.py:106:23:106:26 | ControlFlowNode for file | semmle.label | ControlFlowNode for file | +| zipfile_module.py:108:14:108:29 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| zipfile_module.py:116:30:116:38 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| zipfile_module.py:117:18:117:33 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| zipfile_module.py:125:30:125:38 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| zipfile_module.py:126:18:126:33 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +subpaths +| file:///usr/lib/python3.10/zipfile.py:1267:17:1267:20 | ControlFlowNode for self [Attribute fp] | file:///usr/lib/python3.10/zipfile.py:1326:26:1326:29 | ControlFlowNode for self [Attribute fp] | file:///usr/lib/python3.10/zipfile.py:1394:13:1394:16 | [post] ControlFlowNode for self [Attribute filelist, List element, Attribute filename] | file:///usr/lib/python3.10/zipfile.py:1267:17:1267:20 | [post] ControlFlowNode for self [Attribute filelist, List element, Attribute filename] | +| file:///usr/lib/python3.10/zipfile.py:1287:21:1287:24 | ControlFlowNode for self [Attribute fp] | file:///usr/lib/python3.10/zipfile.py:1326:26:1326:29 | ControlFlowNode for self [Attribute fp] | file:///usr/lib/python3.10/zipfile.py:1394:13:1394:16 | [post] ControlFlowNode for self [Attribute filelist, List element, Attribute filename] | file:///usr/lib/python3.10/zipfile.py:1287:21:1287:24 | [post] ControlFlowNode for self [Attribute filelist, List element, Attribute filename] | +| file:///usr/lib/python3.10/zipfile.py:1376:25:1376:32 | ControlFlowNode for filename | file:///usr/lib/python3.10/zipfile.py:344:24:344:31 | ControlFlowNode for filename | file:///usr/lib/python3.10/zipfile.py:358:9:358:12 | [post] ControlFlowNode for self [Attribute filename] | file:///usr/lib/python3.10/zipfile.py:1376:17:1376:33 | ControlFlowNode for ZipInfo() [Attribute filename] | +| file:///usr/lib/python3.10/zipfile.py:1628:37:1628:42 | ControlFlowNode for member [Attribute filename] | file:///usr/lib/python3.10/zipfile.py:1662:31:1662:36 | ControlFlowNode for member [Attribute filename] | file:///usr/lib/python3.10/zipfile.py:1696:20:1696:29 | ControlFlowNode for targetpath | file:///usr/lib/python3.10/zipfile.py:1628:16:1628:54 | ControlFlowNode for Attribute() | +| file:///usr/lib/python3.10/zipfile.py:1628:37:1628:42 | ControlFlowNode for member [Attribute filename] | file:///usr/lib/python3.10/zipfile.py:1662:31:1662:36 | ControlFlowNode for member [Attribute filename] | file:///usr/lib/python3.10/zipfile.py:1702:16:1702:25 | ControlFlowNode for targetpath | file:///usr/lib/python3.10/zipfile.py:1628:16:1628:54 | ControlFlowNode for Attribute() | +| zipfile_module.py:12:34:12:41 | ControlFlowNode for zip_path | file:///usr/lib/python3.10/zipfile.py:1216:24:1216:27 | ControlFlowNode for file | file:///usr/lib/python3.10/zipfile.py:1267:17:1267:20 | [post] ControlFlowNode for self [Attribute filelist, List element, Attribute filename] | zipfile_module.py:12:18:12:47 | ControlFlowNode for Attribute() [Attribute filelist, List element, Attribute filename] | +| zipfile_module.py:12:34:12:41 | ControlFlowNode for zip_path | file:///usr/lib/python3.10/zipfile.py:1216:24:1216:27 | ControlFlowNode for file | file:///usr/lib/python3.10/zipfile.py:1287:21:1287:24 | [post] ControlFlowNode for self [Attribute filelist, List element, Attribute filename] | zipfile_module.py:12:18:12:47 | ControlFlowNode for Attribute() [Attribute filelist, List element, Attribute filename] | +| zipfile_module.py:17:24:17:33 | ControlFlowNode for zipFileObj [Attribute filelist, List element, Attribute filename] | file:///usr/lib/python3.10/zipfile.py:1410:18:1410:21 | ControlFlowNode for self [Attribute filelist, List element, Attribute filename] | file:///usr/lib/python3.10/zipfile.py:1413:16:1413:28 | ControlFlowNode for Attribute [List element, Attribute filename] | zipfile_module.py:17:24:17:44 | ControlFlowNode for Attribute() [List element, Attribute filename] | +| zipfile_module.py:17:24:17:47 | ControlFlowNode for Subscript [Attribute filename] | file:///usr/lib/python3.10/zipfile.py:1617:23:1617:28 | ControlFlowNode for member [Attribute filename] | file:///usr/lib/python3.10/zipfile.py:1628:16:1628:54 | ControlFlowNode for Attribute() | zipfile_module.py:17:5:17:58 | ControlFlowNode for Attribute() | +#select +| Other_compresstion_modules.py:9:27:9:36 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:9:27:9:36 | ControlFlowNode for bomb_input | This file extraction depends on a $@. | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | potentially untrusted source | +| Other_compresstion_modules.py:11:15:11:24 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:11:15:11:24 | ControlFlowNode for bomb_input | This file extraction depends on a $@. | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | potentially untrusted source | +| Other_compresstion_modules.py:12:19:12:28 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:12:19:12:28 | ControlFlowNode for bomb_input | This file extraction depends on a $@. | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | potentially untrusted source | +| Other_compresstion_modules.py:14:15:14:24 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:14:15:14:24 | ControlFlowNode for bomb_input | This file extraction depends on a $@. | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | potentially untrusted source | +| Other_compresstion_modules.py:15:19:15:28 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:15:19:15:28 | ControlFlowNode for bomb_input | This file extraction depends on a $@. | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | potentially untrusted source | +| Other_compresstion_modules.py:17:20:17:29 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:17:20:17:29 | ControlFlowNode for bomb_input | This file extraction depends on a $@. | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | potentially untrusted source | +| Other_compresstion_modules.py:23:14:23:23 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:23:14:23:23 | ControlFlowNode for bomb_input | This file extraction depends on a $@. | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | potentially untrusted source | +| Other_compresstion_modules.py:24:17:24:26 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:24:17:24:26 | ControlFlowNode for bomb_input | This file extraction depends on a $@. | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | potentially untrusted source | +| Other_compresstion_modules.py:27:40:27:49 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:27:40:27:49 | ControlFlowNode for bomb_input | This file extraction depends on a $@. | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | potentially untrusted source | +| Other_compresstion_modules.py:29:23:29:32 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:29:23:29:32 | ControlFlowNode for bomb_input | This file extraction depends on a $@. | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | potentially untrusted source | +| Other_compresstion_modules.py:30:21:30:30 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:30:21:30:30 | ControlFlowNode for bomb_input | This file extraction depends on a $@. | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | potentially untrusted source | +| Other_compresstion_modules.py:32:40:32:49 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:32:40:32:49 | ControlFlowNode for bomb_input | This file extraction depends on a $@. | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | potentially untrusted source | +| Other_compresstion_modules.py:33:22:33:31 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:33:22:33:31 | ControlFlowNode for bomb_input | This file extraction depends on a $@. | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | potentially untrusted source | +| Other_compresstion_modules.py:34:21:34:30 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:34:21:34:30 | ControlFlowNode for bomb_input | This file extraction depends on a $@. | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | potentially untrusted source | +| Other_compresstion_modules.py:35:42:35:51 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:35:42:35:51 | ControlFlowNode for bomb_input | This file extraction depends on a $@. | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | potentially untrusted source | +| Other_compresstion_modules.py:36:23:36:32 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:36:23:36:32 | ControlFlowNode for bomb_input | This file extraction depends on a $@. | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | potentially untrusted source | +| Other_compresstion_modules.py:37:36:37:45 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:37:36:37:45 | ControlFlowNode for bomb_input | This file extraction depends on a $@. | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | potentially untrusted source | +| tarfile_module.py:8:5:8:54 | ControlFlowNode for Attribute() | tarfile_module.py:29:19:29:24 | ControlFlowNode for bar_id | tarfile_module.py:8:5:8:54 | ControlFlowNode for Attribute() | This file extraction depends on a $@. | tarfile_module.py:29:19:29:24 | ControlFlowNode for bar_id | potentially untrusted source | +| tarfile_module.py:9:5:9:54 | ControlFlowNode for Attribute() | tarfile_module.py:29:19:29:24 | ControlFlowNode for bar_id | tarfile_module.py:9:5:9:54 | ControlFlowNode for Attribute() | This file extraction depends on a $@. | tarfile_module.py:29:19:29:24 | ControlFlowNode for bar_id | potentially untrusted source | +| tarfile_module.py:10:5:10:56 | ControlFlowNode for Attribute() | tarfile_module.py:29:19:29:24 | ControlFlowNode for bar_id | tarfile_module.py:10:5:10:56 | ControlFlowNode for Attribute() | This file extraction depends on a $@. | tarfile_module.py:29:19:29:24 | ControlFlowNode for bar_id | potentially untrusted source | +| tarfile_module.py:11:5:11:49 | ControlFlowNode for Attribute() | tarfile_module.py:29:19:29:24 | ControlFlowNode for bar_id | tarfile_module.py:11:5:11:49 | ControlFlowNode for Attribute() | This file extraction depends on a $@. | tarfile_module.py:29:19:29:24 | ControlFlowNode for bar_id | potentially untrusted source | +| tarfile_module.py:12:5:12:59 | ControlFlowNode for Attribute() | tarfile_module.py:29:19:29:24 | ControlFlowNode for bar_id | tarfile_module.py:12:5:12:59 | ControlFlowNode for Attribute() | This file extraction depends on a $@. | tarfile_module.py:29:19:29:24 | ControlFlowNode for bar_id | potentially untrusted source | +| tarfile_module.py:13:5:13:51 | ControlFlowNode for Attribute() | tarfile_module.py:29:19:29:24 | ControlFlowNode for bar_id | tarfile_module.py:13:5:13:51 | ControlFlowNode for Attribute() | This file extraction depends on a $@. | tarfile_module.py:29:19:29:24 | ControlFlowNode for bar_id | potentially untrusted source | +| zipfile_module.py:11:5:11:57 | ControlFlowNode for Attribute() | zipfile_module.py:89:19:89:24 | ControlFlowNode for bar_id | zipfile_module.py:11:5:11:57 | ControlFlowNode for Attribute() | This file extraction depends on a $@. | zipfile_module.py:89:19:89:24 | ControlFlowNode for bar_id | potentially untrusted source | +| zipfile_module.py:15:5:15:38 | ControlFlowNode for Attribute() | zipfile_module.py:89:19:89:24 | ControlFlowNode for bar_id | zipfile_module.py:15:5:15:38 | ControlFlowNode for Attribute() | This file extraction depends on a $@. | zipfile_module.py:89:19:89:24 | ControlFlowNode for bar_id | potentially untrusted source | +| zipfile_module.py:17:5:17:58 | ControlFlowNode for Attribute() | zipfile_module.py:89:19:89:24 | ControlFlowNode for bar_id | zipfile_module.py:17:5:17:58 | ControlFlowNode for Attribute() | This file extraction depends on a $@. | zipfile_module.py:89:19:89:24 | ControlFlowNode for bar_id | potentially untrusted source | +| zipfile_module.py:30:5:30:35 | ControlFlowNode for Attribute() | zipfile_module.py:89:19:89:24 | ControlFlowNode for bar_id | zipfile_module.py:30:5:30:35 | ControlFlowNode for Attribute() | This file extraction depends on a $@. | zipfile_module.py:89:19:89:24 | ControlFlowNode for bar_id | potentially untrusted source | +| zipfile_module.py:37:14:37:29 | ControlFlowNode for Attribute() | zipfile_module.py:89:19:89:24 | ControlFlowNode for bar_id | zipfile_module.py:37:14:37:29 | ControlFlowNode for Attribute() | This file extraction depends on a $@. | zipfile_module.py:89:19:89:24 | ControlFlowNode for bar_id | potentially untrusted source | +| zipfile_module.py:42:5:42:54 | ControlFlowNode for Attribute() | zipfile_module.py:89:19:89:24 | ControlFlowNode for bar_id | zipfile_module.py:42:5:42:54 | ControlFlowNode for Attribute() | This file extraction depends on a $@. | zipfile_module.py:89:19:89:24 | ControlFlowNode for bar_id | potentially untrusted source | +| zipfile_module.py:45:14:45:39 | ControlFlowNode for Attribute() | zipfile_module.py:89:19:89:24 | ControlFlowNode for bar_id | zipfile_module.py:45:14:45:39 | ControlFlowNode for Attribute() | This file extraction depends on a $@. | zipfile_module.py:89:19:89:24 | ControlFlowNode for bar_id | potentially untrusted source | +| zipfile_module.py:53:5:53:35 | ControlFlowNode for Attribute() | zipfile_module.py:89:19:89:24 | ControlFlowNode for bar_id | zipfile_module.py:53:5:53:35 | ControlFlowNode for Attribute() | This file extraction depends on a $@. | zipfile_module.py:89:19:89:24 | ControlFlowNode for bar_id | potentially untrusted source | +| zipfile_module.py:62:44:62:61 | ControlFlowNode for Attribute() | zipfile_module.py:89:19:89:24 | ControlFlowNode for bar_id | zipfile_module.py:62:44:62:61 | ControlFlowNode for Attribute() | This file extraction depends on a $@. | zipfile_module.py:89:19:89:24 | ControlFlowNode for bar_id | potentially untrusted source | +| zipfile_module.py:100:14:100:29 | ControlFlowNode for Attribute() | zipfile_module.py:99:26:99:34 | ControlFlowNode for Attribute | zipfile_module.py:100:14:100:29 | ControlFlowNode for Attribute() | This file extraction depends on a $@. | zipfile_module.py:99:26:99:34 | ControlFlowNode for Attribute | potentially untrusted source | +| zipfile_module.py:108:14:108:29 | ControlFlowNode for Attribute() | zipfile_module.py:106:23:106:26 | ControlFlowNode for file | zipfile_module.py:108:14:108:29 | ControlFlowNode for Attribute() | This file extraction depends on a $@. | zipfile_module.py:106:23:106:26 | ControlFlowNode for file | potentially untrusted source | +| zipfile_module.py:117:18:117:33 | ControlFlowNode for Attribute() | zipfile_module.py:116:30:116:38 | ControlFlowNode for Attribute | zipfile_module.py:117:18:117:33 | ControlFlowNode for Attribute() | This file extraction depends on a $@. | zipfile_module.py:116:30:116:38 | ControlFlowNode for Attribute | potentially untrusted source | +| zipfile_module.py:126:18:126:33 | ControlFlowNode for Attribute() | zipfile_module.py:125:30:125:38 | ControlFlowNode for Attribute | zipfile_module.py:126:18:126:33 | ControlFlowNode for Attribute() | This file extraction depends on a $@. | zipfile_module.py:125:30:125:38 | ControlFlowNode for Attribute | potentially untrusted source | diff --git a/python/ql/test/experimental/query-tests/Security/CWE-409/DecompressionBombs.qlref b/python/ql/test/experimental/query-tests/Security/CWE-409/DecompressionBombs.qlref new file mode 100644 index 00000000000..5d425772f9a --- /dev/null +++ b/python/ql/test/experimental/query-tests/Security/CWE-409/DecompressionBombs.qlref @@ -0,0 +1 @@ +experimental/Security/CWE-409/DecompressionBombs.ql \ No newline at end of file diff --git a/python/ql/test/experimental/query-tests/Security/CWE-409/Other_compresstion_modules.py b/python/ql/test/experimental/query-tests/Security/CWE-409/Other_compresstion_modules.py new file mode 100644 index 00000000000..0c5e51d24ca --- /dev/null +++ b/python/ql/test/experimental/query-tests/Security/CWE-409/Other_compresstion_modules.py @@ -0,0 +1,54 @@ +import io +from fastapi import FastAPI + +app = FastAPI() + + +def bomb(bomb_input): + import shutil + shutil.unpack_archive(bomb_input) + import lzma + lzma.open(bomb_input) + lzma.LZMAFile(bomb_input).read() + import gzip + gzip.open(bomb_input) + gzip.GzipFile(bomb_input).read() + + with gzip.open(bomb_input, 'rb') as ip: + with io.TextIOWrapper(ip, encoding='utf-8') as decoder: + content = decoder.read() + print(content) + + import bz2 + bz2.open(bomb_input) + bz2.BZ2File(bomb_input).read() + + import pandas + pandas.read_csv(filepath_or_buffer=bomb_input) + + pandas.read_table(bomb_input, compression='gzip') + pandas.read_xml(bomb_input, compression='gzip') + + pandas.read_csv(filepath_or_buffer=bomb_input, compression='gzip') + pandas.read_json(bomb_input, compression='gzip') + pandas.read_sas(bomb_input, compression='gzip') + pandas.read_stata(filepath_or_buffer=bomb_input, compression='gzip') + pandas.read_table(bomb_input, compression='gzip') + pandas.read_xml(path_or_buffer=bomb_input, compression='gzip') + + # no compression no DOS + pandas.read_table(bomb_input, compression='tar') + pandas.read_xml(bomb_input, compression='tar') + + pandas.read_csv(filepath_or_buffer=bomb_input, compression='tar') + pandas.read_json(bomb_input, compression='tar') + pandas.read_sas(bomb_input, compression='tar') + pandas.read_stata(filepath_or_buffer=bomb_input, compression='tar') + pandas.read_table(bomb_input, compression='tar') + pandas.read_xml(path_or_buffer=bomb_input, compression='tar') + + +@app.post("/bomb") +async def bombs(bomb_input): + bomb(bomb_input) + return {"message": "non-async"} diff --git a/python/ql/test/experimental/query-tests/Security/CWE-409/tarfile_module.py b/python/ql/test/experimental/query-tests/Security/CWE-409/tarfile_module.py new file mode 100644 index 00000000000..cecfb8ee4d3 --- /dev/null +++ b/python/ql/test/experimental/query-tests/Security/CWE-409/tarfile_module.py @@ -0,0 +1,31 @@ +import tarfile +from fastapi import FastAPI + + +def tar_extract(tar_path): + tarfile.open(tar_path) + tarfile.open(tar_path) + tarfile.TarFile.open(tar_path).extract("somefile") + tarfile.TarFile.open(tar_path).extract("somefile") + tarfile.TarFile.xzopen(tar_path).extract("somefile") + tarfile.TarFile.gzopen(tar_path).extractall() + tarfile.TarFile.open(tar_path).extractfile("file1.txt") + tarfile.open(tar_path).extractfile("file1.txt") + # not working + tarInstance2 = tarfile.TarFile(tar_path) + tarInstance2.extractfile("file1.txt") + tarInstance2.extract("file1.txt") + tarfile.TarFile().open(tar_path) + # good + tarfile.open(tar_path, mode="w") + tarfile.TarFile.gzopen(tar_path, mode="w") + tarfile.TarFile.open(tar_path, mode="r:") + + +app = FastAPI() + + +@app.post("/zipbomb") +async def zipbomb(bar_id): + tar_extract(bar_id) + return {"message": "non-async"} diff --git a/python/ql/test/experimental/query-tests/Security/CWE-409/zipfile_module.py b/python/ql/test/experimental/query-tests/Security/CWE-409/zipfile_module.py new file mode 100644 index 00000000000..ef235ba82fb --- /dev/null +++ b/python/ql/test/experimental/query-tests/Security/CWE-409/zipfile_module.py @@ -0,0 +1,128 @@ +import zipfile +from io import BytesIO +from urllib import request +import requests +from fastapi import FastAPI, File, UploadFile +from typing import List, Annotated + + +def zip_extract(zip_path): + # we can have PyZipFile instead of ZipFile too + zipfile.ZipFile(zip_path, "r").extract("0", "./tmp/") + zipFileObj = zipfile.ZipFile(zip_path, "r") + zipFileObj2 = zipFileObj + # zipfile.ZipFile("user_input").extract(member="file_name") Consume a lot of CPU,Storage + zipFileObj2.extract("0", "./tmp/") + # zipfile.ZipFile("user_input").extract(member=ZipInfo_object) Consume a lot of CPU,Storage + zipFileObj.extract(zipFileObj.infolist()[0], "./tmp/") + + +def zip_extractall(zip_path): + import httpx + filex = httpx.get(zip_path).read() + zipfile.ZipFile(BytesIO(filex), "r").extractall() + zipFileObj = zipfile.ZipFile(zip_path, "r") + for infolist in zipFileObj.infolist(): + Decompression_ratio = infolist.file_size / infolist.compress_size + if Decompression_ratio > 10: + return + # zipfile.ZipFile("user_input").extractall() Consume a lot of CPU,Storage + zipFileObj.extractall("./tmp/") # Sensitive + zipFileObj.close() + + +def zip_read_obj(zip_path): + # zipfile.ZipFile("user_input").open("file_name").read() Consume a lot of CPU,RAM,Storage + with zipfile.ZipFile(zip_path) as myzip: + with myzip.open('ZZ') as myfile: + a = myfile.readline() + + file = requests.get(zip_path) + zipfile.ZipFile(BytesIO(file.raw), "w").open("aa") + zipfile.ZipFile(BytesIO(file.raw), "r").open("aa") + + with zipfile.ZipFile(zip_path) as myzip: + with myzip.open('ZZ', mode="r") as myfile: + a = next(myfile) + + with zipfile.ZipFile(zip_path) as myzip: + with myzip.open('ZZ', mode="w") as myfile: + a = myfile.write(b"tmpppp") + + myzip = zipfile.PyZipFile(zip_path) + myzip.read(myzip.infolist()[0]) + + zipfile.ZipFile(BytesIO(request.urlopen(zip_path).read()) + ).read("aFileNameInTheZipFile") + + with zipfile.ZipFile(zip_path, 'w') as dst_zip: + with zipfile.ZipFile(zip_path) as src_zip: + for info in src_zip.infolist(): + if info.filename.startswith('classes'): + dst_zip.writestr(info, src_zip.read(info)) + + +def safeUnzip(zipFileName): + buffer_size = 2 ** 10 * 8 + total_size = 0 + SIZE_THRESHOLD = 2 ** 10 * 100 + with zipfile.ZipFile(zipFileName) as myzip: + for fileinfo in myzip.infolist(): + content = b'' + with myzip.open(fileinfo.filename, mode="r") as myfile: + chunk = myfile.read(buffer_size) + while chunk: + chunk = myfile.read(buffer_size) + total_size += buffer_size + if total_size > SIZE_THRESHOLD: + print("Bomb detected") + return + content += chunk + print(bytes.decode(content, 'utf-8')) + return "No Bombs!" + + +app = FastAPI() + + +@app.post("/zipbomb") +async def zipbomb(bar_id): + zip_extractall(bar_id) + zip_extract(bar_id) + zip_read_obj(bar_id) + safeUnzip(bar_id) + return {"message": "non-async"} + + +@app.post("/zipbomb2") +async def zipbomb2(file: UploadFile): + with zipfile.ZipFile(file.file) as myzip: + with myzip.open('ZZ') as myfile: + a = myfile.readline() + return {"message": "non-async"} + + +@app.post("/zipbomb2") +async def create_file(file: Annotated[bytes | None, File()] = None): + with zipfile.ZipFile(file) as myzip: + with myzip.open('ZZ') as myfile: + a = myfile.readline() + return {"message": "non-async"} + + +@app.post("/uploadMultipleFiles") +def upload(files: List[UploadFile] = File(...)): + for file in files: + with zipfile.ZipFile(file.file) as myzip: + with myzip.open('ZZ') as myfile: + a = myfile.readline() + return {"message": "non-async"} + + +@app.post("/files/") +async def create_files(files: Annotated[list[bytes], File()]): + for file in files: + with zipfile.ZipFile(file.file) as myzip: + with myzip.open('ZZ') as myfile: + a = myfile.readline() + return {"file_sizes": [len(file) for file in files]} diff --git a/python/ql/test/experimental/query-tests/Security/CWE-522/LDAPInsecureAuth.qlref b/python/ql/test/experimental/query-tests/Security/CWE-522/LDAPInsecureAuth.qlref deleted file mode 100644 index 8bb2c1e9b52..00000000000 --- a/python/ql/test/experimental/query-tests/Security/CWE-522/LDAPInsecureAuth.qlref +++ /dev/null @@ -1 +0,0 @@ -experimental/Security/CWE-522/LDAPInsecureAuth.ql \ No newline at end of file From a38405e490b60366e696405d01f3ff9ce3a26b7c Mon Sep 17 00:00:00 2001 From: amammad Date: Mon, 26 Jun 2023 16:43:18 +1000 Subject: [PATCH 002/378] fix formatting error/warnings --- .../Security/CWE-409/DecompressionBombs.ql | 54 +++++++++---------- 1 file changed, 24 insertions(+), 30 deletions(-) diff --git a/python/ql/src/experimental/Security/CWE-409/DecompressionBombs.ql b/python/ql/src/experimental/Security/CWE-409/DecompressionBombs.ql index 7f8f493decf..5aa3e90cae3 100644 --- a/python/ql/src/experimental/Security/CWE-409/DecompressionBombs.ql +++ b/python/ql/src/experimental/Security/CWE-409/DecompressionBombs.ql @@ -18,7 +18,7 @@ import semmle.python.ApiGraphs import semmle.python.dataflow.new.RemoteFlowSources import semmle.python.dataflow.new.internal.DataFlowPublic -module pyZipFile { +module PyZipFile { /** * ```python * zipfile.PyZipFile() @@ -78,7 +78,7 @@ module pyZipFile { /** * Same as ZipFile - * I made PyZipFile seperated from ZipFile as in future this will be compatible + * I made PyZipFile separated from ZipFile as in future this will be compatible * if anyone want to add new methods an sink to each object. */ predicate isAdditionalTaintStep(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) { @@ -283,7 +283,7 @@ module ZipFile { } /** - * a sanitizers which check if there is a managed read + * a sanitizers which check if there is a managed read * ```python * with zipfile.ZipFile(zipFileName) as myzip: * with myzip.open(fileinfo.filename, mode="r") as myfile: @@ -394,13 +394,11 @@ module TarFile { module Shutil { DataFlow::Node isSink() { result = - [ - API::moduleImport("shutil") - .getMember("unpack_archive") - .getACall() - .getParameter(0, "filename") - .asSink() - ] + API::moduleImport("shutil") + .getMember("unpack_archive") + .getACall() + .getParameter(0, "filename") + .asSink() } } @@ -445,8 +443,8 @@ module Pandas { module FileAndFormRemoteFlowSource { class FastAPI extends DataFlow::Node { FastAPI() { - exists(API::Node fastAPIParam | - fastAPIParam = + exists(API::Node fastApiParam | + fastApiParam = API::moduleImport("fastapi") .getMember("FastAPI") .getReturn() @@ -459,11 +457,11 @@ module FileAndFormRemoteFlowSource { .getASubclass*() .getAValueReachableFromSource() .asExpr() = - fastAPIParam.asSource().asExpr().(Parameter).getAnnotation().getASubExpression*() + fastApiParam.asSource().asExpr().(Parameter).getAnnotation().getASubExpression*() | // in the case of List of files exists(For f, Attribute attr, DataFlow::Node a, DataFlow::Node b | - fastAPIParam.getAValueReachableFromSource().asExpr() = f.getIter().getASubExpression*() + fastApiParam.getAValueReachableFromSource().asExpr() = f.getIter().getASubExpression*() | // file.file in following // def upload(files: List[UploadFile] = File(...)): @@ -477,20 +475,18 @@ module FileAndFormRemoteFlowSource { this.asExpr() = attr ) or - // exclude cases like type-annotated with `Response` - // and not not any(Response::RequestHandlerParam src).asExpr() = result this = [ - fastAPIParam.asSource(), - fastAPIParam.getMember(["filename", "content_type", "headers", "file"]).asSource(), - fastAPIParam.getMember(["read"]).getReturn().asSource(), + fastApiParam.asSource(), + fastApiParam.getMember(["filename", "content_type", "headers", "file"]).asSource(), + fastApiParam.getMember("read").getReturn().asSource(), // file-like object, I'm trying to not do additional work here by using already existing file-like objs if it is possible - // fastAPIParam.getMember("file").getAMember().asSource(), + // fastApiParam.getMember("file").getAMember().asSource(), ] ) or - exists(API::Node fastAPIParam | - fastAPIParam = + exists(API::Node fastApiParam | + fastApiParam = API::moduleImport("fastapi") .getMember("FastAPI") .getReturn() @@ -503,11 +499,11 @@ module FileAndFormRemoteFlowSource { .getASubclass*() .getAValueReachableFromSource() .asExpr() = - fastAPIParam.asSource().asExpr().(Parameter).getAnnotation().getASubExpression*() + fastApiParam.asSource().asExpr().(Parameter).getAnnotation().getASubExpression*() | // in the case of List of files exists(For f, Attribute attr, DataFlow::Node a, DataFlow::Node b | - fastAPIParam.getAValueReachableFromSource().asExpr() = f.getIter().getASubExpression*() + fastApiParam.getAValueReachableFromSource().asExpr() = f.getIter().getASubExpression*() | // file.file in following // def upload(files: List[UploadFile] = File(...)): @@ -521,9 +517,7 @@ module FileAndFormRemoteFlowSource { this.asExpr() = attr ) or - // exclude cases like type-annotated with `Response` - // and not not any(Response::RequestHandlerParam src).asExpr() = result - this = fastAPIParam.asSource() + this = fastApiParam.asSource() ) and exists(this.getLocation().getFile().getRelativePath()) } @@ -575,8 +569,8 @@ module BombsConfig implements DataFlow::ConfigSig { predicate isSink(DataFlow::Node sink) { sink = [ - pyZipFile::isSink(), ZipFile::isSink(), Gzip::isSink(), Lzma::isSink(), Bz2::isSink(), - TarFile::isSink(), Lzma::isSink(), Shutil::isSink(), Pandas::isSink() + PyZipFile::isSink(), ZipFile::isSink(), Gzip::isSink(), Lzma::isSink(), Bz2::isSink(), + TarFile::isSink(), Shutil::isSink(), Pandas::isSink() ] and exists(sink.getLocation().getFile().getRelativePath()) } @@ -585,7 +579,7 @@ module BombsConfig implements DataFlow::ConfigSig { ( isAdditionalTaintStepTextIOWrapper(nodeFrom, nodeTo) or ZipFile::isAdditionalTaintStep(nodeFrom, nodeTo) or - pyZipFile::isAdditionalTaintStep(nodeFrom, nodeTo) or + PyZipFile::isAdditionalTaintStep(nodeFrom, nodeTo) or TarFile::isAdditionalTaintStep(nodeFrom, nodeTo) ) and exists(nodeTo.getLocation().getFile().getRelativePath()) From b506b7d2985361791a302fb1c944b2bda206a7a9 Mon Sep 17 00:00:00 2001 From: amammad Date: Mon, 26 Jun 2023 16:50:33 +1000 Subject: [PATCH 003/378] better documents, remove separate PyZipFile --- .../Security/CWE-409/DecompressionBombs.ql | 97 +++---------------- 1 file changed, 15 insertions(+), 82 deletions(-) diff --git a/python/ql/src/experimental/Security/CWE-409/DecompressionBombs.ql b/python/ql/src/experimental/Security/CWE-409/DecompressionBombs.ql index 5aa3e90cae3..2e1c87482ca 100644 --- a/python/ql/src/experimental/Security/CWE-409/DecompressionBombs.ql +++ b/python/ql/src/experimental/Security/CWE-409/DecompressionBombs.ql @@ -4,7 +4,7 @@ * @kind path-problem * @problem.severity error * @security-severity 7.8 - * @precision medium + * @precision high * @id py/user-controlled-file-decompression * @tags security * experimental @@ -18,85 +18,13 @@ import semmle.python.ApiGraphs import semmle.python.dataflow.new.RemoteFlowSources import semmle.python.dataflow.new.internal.DataFlowPublic -module PyZipFile { - /** - * ```python - * zipfile.PyZipFile() - */ - private API::Node pyZipFileClass() { - result = API::moduleImport("zipfile").getMember("PyZipFile") - } - - /** - * same as zipfileSinks - */ - DataFlow::Node isSink() { result = sink(pyZipFileClass()).getACall() } - - private API::Node sink(API::Node pyZipFileClass) { - result = pyZipFileClass.getReturn().getMember(["extractall", "read", "extract", "testzip"]) - or - result = pyZipFileClass.getReturn().getMember("open") and - // only read mode is sink - // mode can be set in open() argument or in PyZipFile instantiation argument - ( - not exists( - result - .getACall() - .getParameter(1, "mode") - .getAValueReachingSink() - .asExpr() - .(StrConst) - .getText() - ) or - result - .getACall() - .getParameter(1, "mode") - .getAValueReachingSink() - .asExpr() - .(StrConst) - .getText() = "r" - ) and - ( - not exists( - pyZipFileClass - .getACall() - .getParameter(1, "mode") - .getAValueReachingSink() - .asExpr() - .(StrConst) - .getText() - ) or - pyZipFileClass - .getACall() - .getParameter(1, "mode") - .getAValueReachingSink() - .asExpr() - .(StrConst) - .getText() = "r" - ) - } - - /** - * Same as ZipFile - * I made PyZipFile separated from ZipFile as in future this will be compatible - * if anyone want to add new methods an sink to each object. - */ - predicate isAdditionalTaintStep(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) { - exists(API::Node pyZipFileClass | pyZipFileClass = pyZipFileClass() | - nodeFrom = pyZipFileClass.getACall().getParameter(0, "file").asSink() and - nodeTo = - [ - sink(pyZipFileClass).getACall(), - pyZipFileClass - .getACall() - .getReturn() - .getMember(["extractall", "read", "extract", "testzip"]) - .getACall() - ] - ) - } -} - +// /** +// * Same as ZipFile +// * I can made PyZipFile separated from ZipFile +// * as in future this will be more compatible if it has more differences from ZipFile +// * and we can add new changes easier. +// */ +// module PyZipFile { } module Lzma { private API::Node lzmaClass() { result = API::moduleImport("lzma").getMember(["LZMAFile", "open"]) @@ -204,13 +132,18 @@ module Gzip { } module ZipFile { - // more sinks file:///home/am/CodeQL-home/codeql-repo/python/ql/src/experimental/semmle/python/security/ZipSlip.qll /** * ```python * zipfile.ZipFile() * ``` */ - private API::Node zipFileClass() { result = API::moduleImport("zipfile").getMember("ZipFile") } + private API::Node zipFileClass() { + result = + [ + API::moduleImport("zipfile").getMember("ZipFile"), + API::moduleImport("zipfile").getMember("PyZipFile") + ] + } /** * ```python From 8fccd65d34a2120769b5e90e83dbcc5dde31483f Mon Sep 17 00:00:00 2001 From: amammad Date: Mon, 26 Jun 2023 16:51:14 +1000 Subject: [PATCH 004/378] fix a mistake :( --- .../src/experimental/Security/CWE-409/DecompressionBombs.ql | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/python/ql/src/experimental/Security/CWE-409/DecompressionBombs.ql b/python/ql/src/experimental/Security/CWE-409/DecompressionBombs.ql index 2e1c87482ca..86fd1a9e74b 100644 --- a/python/ql/src/experimental/Security/CWE-409/DecompressionBombs.ql +++ b/python/ql/src/experimental/Security/CWE-409/DecompressionBombs.ql @@ -502,8 +502,8 @@ module BombsConfig implements DataFlow::ConfigSig { predicate isSink(DataFlow::Node sink) { sink = [ - PyZipFile::isSink(), ZipFile::isSink(), Gzip::isSink(), Lzma::isSink(), Bz2::isSink(), - TarFile::isSink(), Shutil::isSink(), Pandas::isSink() + ZipFile::isSink(), Gzip::isSink(), Lzma::isSink(), Bz2::isSink(), TarFile::isSink(), + Shutil::isSink(), Pandas::isSink() ] and exists(sink.getLocation().getFile().getRelativePath()) } @@ -512,7 +512,6 @@ module BombsConfig implements DataFlow::ConfigSig { ( isAdditionalTaintStepTextIOWrapper(nodeFrom, nodeTo) or ZipFile::isAdditionalTaintStep(nodeFrom, nodeTo) or - PyZipFile::isAdditionalTaintStep(nodeFrom, nodeTo) or TarFile::isAdditionalTaintStep(nodeFrom, nodeTo) ) and exists(nodeTo.getLocation().getFile().getRelativePath()) From 7aa002fa2a502f2400f9ddb40e5955310046238d Mon Sep 17 00:00:00 2001 From: amammad Date: Thu, 29 Jun 2023 22:20:46 +1000 Subject: [PATCH 005/378] fix an accident :) --- .../query-tests/Security/CWE-522/LDAPInsecureAuth.qlref | 1 + 1 file changed, 1 insertion(+) create mode 100644 python/ql/test/experimental/query-tests/Security/CWE-522/LDAPInsecureAuth.qlref diff --git a/python/ql/test/experimental/query-tests/Security/CWE-522/LDAPInsecureAuth.qlref b/python/ql/test/experimental/query-tests/Security/CWE-522/LDAPInsecureAuth.qlref new file mode 100644 index 00000000000..8bb2c1e9b52 --- /dev/null +++ b/python/ql/test/experimental/query-tests/Security/CWE-522/LDAPInsecureAuth.qlref @@ -0,0 +1 @@ +experimental/Security/CWE-522/LDAPInsecureAuth.ql \ No newline at end of file From bcfc28aae0313ba7af6fbfa3d926112e36421131 Mon Sep 17 00:00:00 2001 From: amammad Date: Thu, 7 Sep 2023 02:02:32 +1000 Subject: [PATCH 006/378] add sources to detect CVE completely --- .../Security/CWE-409/DecompressionBombs.ql | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/python/ql/src/experimental/Security/CWE-409/DecompressionBombs.ql b/python/ql/src/experimental/Security/CWE-409/DecompressionBombs.ql index 86fd1a9e74b..46b32c6880c 100644 --- a/python/ql/src/experimental/Security/CWE-409/DecompressionBombs.ql +++ b/python/ql/src/experimental/Security/CWE-409/DecompressionBombs.ql @@ -137,7 +137,7 @@ module ZipFile { * zipfile.ZipFile() * ``` */ - private API::Node zipFileClass() { + API::Node zipFileClass() { result = [ API::moduleImport("zipfile").getMember("ZipFile"), @@ -253,7 +253,8 @@ module ZipFile { */ predicate isAdditionalTaintStep(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) { exists(API::Node zipFileInstance | zipFileInstance = zipFileClass() | - nodeFrom = zipFileInstance.getACall().getParameter(0, "file").asSink() and + nodeFrom = + [zipFileInstance.getACall().getParameter(0, "file").asSink(), zipFileInstance.getACall()] and nodeTo = [ sink(zipFileInstance).getACall(), @@ -317,7 +318,8 @@ module TarFile { predicate isAdditionalTaintStep(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) { exists(API::Node tarfileInstance | tarfileInstance = tarfileInstance() | - nodeFrom = tarfileInstance.getACall().getParameter(0, "name").asSink() and + nodeFrom = + [tarfileInstance.getACall().getParameter(0, "name").asSink(), tarfileInstance.getACall()] and nodeTo = tarfileInstance.getReturn().getMember(["extractall", "extract", "extractfile"]).getACall() ) @@ -497,6 +499,10 @@ module BombsConfig implements DataFlow::ConfigSig { ) or source instanceof FileAndFormRemoteFlowSource::FastAPI + or + source = TarFile::tarfileInstance().getACall() + or + source = ZipFile::zipFileClass().getACall() } predicate isSink(DataFlow::Node sink) { From 6ee58657890e0588a176c2e3fea6449e50242536 Mon Sep 17 00:00:00 2001 From: amammad Date: Thu, 7 Sep 2023 18:27:40 +1000 Subject: [PATCH 007/378] add sources to detect CVE completely --- .../experimental/Security/CWE-409/DecompressionBombs.ql | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/python/ql/src/experimental/Security/CWE-409/DecompressionBombs.ql b/python/ql/src/experimental/Security/CWE-409/DecompressionBombs.ql index 46b32c6880c..fd23eb1f278 100644 --- a/python/ql/src/experimental/Security/CWE-409/DecompressionBombs.ql +++ b/python/ql/src/experimental/Security/CWE-409/DecompressionBombs.ql @@ -1,11 +1,11 @@ /** - * @name User-controlled file decompression - * @description User-controlled data that flows into decompression library APIs without checking the compression rate is dangerous + * @name Uncontrolled file decompression + * @description Uncontrolled data that flows into decompression library APIs without checking the compression rate is dangerous * @kind path-problem * @problem.severity error * @security-severity 7.8 * @precision high - * @id py/user-controlled-file-decompression + * @id py/uncontrolled-file-decompression * @tags security * experimental * external/cwe/cwe-409 @@ -530,5 +530,4 @@ import Bombs::PathGraph from Bombs::PathNode source, Bombs::PathNode sink where Bombs::flowPath(source, sink) -select sink.getNode(), source, sink, "This file extraction depends on a $@.", source.getNode(), - "potentially untrusted source" +select sink.getNode(), source, sink, "This file extraction is $@.", source.getNode(), "uncontrolled" From 3175db226e21a9b5217621887479f7f632281135 Mon Sep 17 00:00:00 2001 From: amammad <77095239+amammad@users.noreply.github.com> Date: Mon, 9 Oct 2023 20:51:19 +0200 Subject: [PATCH 008/378] upgrade fastAPI remote sources --- .../Security/CWE-409/DecompressionBombs.ql | 155 ++++++------------ 1 file changed, 54 insertions(+), 101 deletions(-) diff --git a/python/ql/src/experimental/Security/CWE-409/DecompressionBombs.ql b/python/ql/src/experimental/Security/CWE-409/DecompressionBombs.ql index fd23eb1f278..6d0258f5b65 100644 --- a/python/ql/src/experimental/Security/CWE-409/DecompressionBombs.ql +++ b/python/ql/src/experimental/Security/CWE-409/DecompressionBombs.ql @@ -376,9 +376,9 @@ module Pandas { } module FileAndFormRemoteFlowSource { - class FastAPI extends DataFlow::Node { + class FastAPI extends RemoteFlowSource::Range { FastAPI() { - exists(API::Node fastApiParam | + exists(API::Node fastApiParam, Expr fastApiUploadFile | fastApiParam = API::moduleImport("fastapi") .getMember("FastAPI") @@ -387,75 +387,72 @@ module FileAndFormRemoteFlowSource { .getReturn() .getParameter(0) .getKeywordParameter(_) and - API::moduleImport("fastapi") - .getMember("UploadFile") - .getASubclass*() - .getAValueReachableFromSource() - .asExpr() = - fastApiParam.asSource().asExpr().(Parameter).getAnnotation().getASubExpression*() + fastApiUploadFile = + API::moduleImport("fastapi") + .getMember("UploadFile") + .getASubclass*() + .getAValueReachableFromSource() + .asExpr() | - // in the case of List of files + fastApiUploadFile = + fastApiParam.asSource().asExpr().(Parameter).getAnnotation().getASubExpression*() and + // Multiple Uploaded files as list of fastapi.UploadFile exists(For f, Attribute attr, DataFlow::Node a, DataFlow::Node b | fastApiParam.getAValueReachableFromSource().asExpr() = f.getIter().getASubExpression*() | - // file.file in following - // def upload(files: List[UploadFile] = File(...)): - // for file in files: - // **file.file** - // thanks Arthur Baars for helping me in following - TaintTracking::localTaint(a, b) and - a.asExpr() = f.getIter() and - b.asExpr() = attr.getObject() and + TaintTracking::localExprTaint(f.getIter(), attr.getObject()) and attr.getName() = ["filename", "content_type", "headers", "file", "read"] and this.asExpr() = attr ) or + // one Uploaded file as fastapi.UploadFile this = [ - fastApiParam.asSource(), - fastApiParam.getMember(["filename", "content_type", "headers", "file"]).asSource(), - fastApiParam.getMember("read").getReturn().asSource(), - // file-like object, I'm trying to not do additional work here by using already existing file-like objs if it is possible - // fastApiParam.getMember("file").getAMember().asSource(), + fastApiParam.getMember(["filename", "content_type", "headers"]).asSource(), + fastApiParam + .getMember("file") + .getMember(["readlines", "readline", "read"]) + .getReturn() + .asSource(), fastApiParam.getMember("read").getReturn().asSource() ] - ) - or - exists(API::Node fastApiParam | - fastApiParam = - API::moduleImport("fastapi") - .getMember("FastAPI") - .getReturn() - .getMember("post") - .getReturn() - .getParameter(0) - .getKeywordParameter(_) and - API::moduleImport("fastapi") - .getMember("File") - .getASubclass*() - .getAValueReachableFromSource() - .asExpr() = - fastApiParam.asSource().asExpr().(Parameter).getAnnotation().getASubExpression*() - | - // in the case of List of files - exists(For f, Attribute attr, DataFlow::Node a, DataFlow::Node b | - fastApiParam.getAValueReachableFromSource().asExpr() = f.getIter().getASubExpression*() - | - // file.file in following - // def upload(files: List[UploadFile] = File(...)): - // for file in files: - // **file.file** - // thanks Arthur Baars for helping me in following - TaintTracking::localTaint(a, b) and - a.asExpr() = f.getIter() and - b.asExpr() = attr.getObject() and - attr.getName() = "file" and - this.asExpr() = attr - ) - or - this = fastApiParam.asSource() ) and exists(this.getLocation().getFile().getRelativePath()) } + + override string getSourceType() { result = "HTTP FORM" } + } +} + +module BombsConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { + source instanceof RemoteFlowSource and + // or + // source instanceof FileAndFormRemoteFlowSource::FastAPI + exists(source.getLocation().getFile().getRelativePath()) and + not source.getLocation().getFile().getRelativePath().matches("venv") + } + + predicate isSink(DataFlow::Node sink) { + ( + sink = + [ + ZipFile::isSink(), Gzip::isSink(), Lzma::isSink(), Bz2::isSink(), TarFile::isSink(), + Shutil::isSink(), Pandas::isSink() + ] or + any() + ) and + exists(sink.getLocation().getFile().getRelativePath()) and + not sink.getLocation().getFile().getRelativePath().matches("venv") + } + + predicate isAdditionalFlowStep(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) { + ( + isAdditionalTaintStepTextIOWrapper(nodeFrom, nodeTo) or + ZipFile::isAdditionalTaintStep(nodeFrom, nodeTo) or + TarFile::isAdditionalTaintStep(nodeFrom, nodeTo) + ) and + exists(nodeTo.getLocation().getFile().getRelativePath()) and + not nodeTo.getLocation().getFile().getRelativePath().matches("venv") } } @@ -480,50 +477,6 @@ predicate isAdditionalTaintStepTextIOWrapper(DataFlow::Node nodeFrom, DataFlow:: exists(nodeTo.getLocation().getFile().getRelativePath()) } -module BombsConfig implements DataFlow::ConfigSig { - // borrowed from UnsafeUnpackQuery.qll - predicate isSource(DataFlow::Node source) { - source instanceof RemoteFlowSource - or - exists(MethodCallNode args | - args = source.(AttrRead).getObject().getALocalSource() and - args = - [ - API::moduleImport("argparse") - .getMember("ArgumentParser") - .getReturn() - .getMember("parse_args") - .getACall(), API::moduleImport("os").getMember("getenv").getACall(), - API::moduleImport("os").getMember("environ").getMember("get").getACall() - ] - ) - or - source instanceof FileAndFormRemoteFlowSource::FastAPI - or - source = TarFile::tarfileInstance().getACall() - or - source = ZipFile::zipFileClass().getACall() - } - - predicate isSink(DataFlow::Node sink) { - sink = - [ - ZipFile::isSink(), Gzip::isSink(), Lzma::isSink(), Bz2::isSink(), TarFile::isSink(), - Shutil::isSink(), Pandas::isSink() - ] and - exists(sink.getLocation().getFile().getRelativePath()) - } - - predicate isAdditionalFlowStep(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) { - ( - isAdditionalTaintStepTextIOWrapper(nodeFrom, nodeTo) or - ZipFile::isAdditionalTaintStep(nodeFrom, nodeTo) or - TarFile::isAdditionalTaintStep(nodeFrom, nodeTo) - ) and - exists(nodeTo.getLocation().getFile().getRelativePath()) - } -} - module Bombs = TaintTracking::Global; import Bombs::PathGraph From 1318afdb279c983ddf47e45ef605946a0e006fa2 Mon Sep 17 00:00:00 2001 From: amammad <77095239+amammad@users.noreply.github.com> Date: Mon, 9 Oct 2023 23:07:52 +0200 Subject: [PATCH 009/378] modularize --- .../Security/CWE-409/DecompressionBomb.qll | 430 ++++++++++++++++++ .../Security/CWE-409/DecompressionBombs.ql | 423 ++--------------- .../Security/CWE-409/example_bad.py | 2 +- 3 files changed, 461 insertions(+), 394 deletions(-) create mode 100644 python/ql/src/experimental/Security/CWE-409/DecompressionBomb.qll diff --git a/python/ql/src/experimental/Security/CWE-409/DecompressionBomb.qll b/python/ql/src/experimental/Security/CWE-409/DecompressionBomb.qll new file mode 100644 index 00000000000..6659cb189b6 --- /dev/null +++ b/python/ql/src/experimental/Security/CWE-409/DecompressionBomb.qll @@ -0,0 +1,430 @@ +import python +import semmle.python.dataflow.new.DataFlow +import semmle.python.dataflow.new.TaintTracking +import semmle.python.ApiGraphs +import semmle.python.dataflow.new.RemoteFlowSources +import semmle.python.dataflow.new.internal.DataFlowPublic + +module DecompressionBomb { + /** + * The Sinks of uncontrolled data decompression, use this class in your queries + */ + class Sink extends DataFlow::Node { + Sink() { this = any(Range r).sink() } + } + + /** + * The additional taint steps that need for creating taint tracking or dataflow. + */ + abstract class AdditionalTaintStep extends string { + AdditionalTaintStep() { this = "AdditionalTaintStep" } + + /** + * Holds if there is a additional taint step between pred and succ. + */ + abstract predicate isAdditionalTaintStep(DataFlow::Node pred, DataFlow::Node succ); + } + + /** + * A abstract class responsible for extending new decompression sinks + */ + abstract class Range extends API::Node { + /** + * Gets the sink of responsible for decompression node + * + * it can be a path, stream of compressed data, + * or a call to function that use pipe + */ + abstract DataFlow::Node sink(); + } +} + +module ZipFile { + /** + * A `zipfile` Instance + * + * ```python + * zipfile.ZipFile() + * ``` + */ + API::Node zipFileClass() { + result = + [ + API::moduleImport("zipfile").getMember("ZipFile"), + API::moduleImport("zipfile").getMember("PyZipFile") + ] + } + + /** + * The Decompression Sinks of `zipfile` library + * + * ```python + * myzip = zipfile.ZipFile("zipfileName.zip") + * myzip.open('eggs.txt',"r").read() + * myzip.extractall() + * ``` + */ + class DecompressionSink extends DecompressionBomb::Range { + override string toString() { result = "DecompressionSink" } + + DecompressionSink() { this = zipFileClass() } + + /** + * An function call of tarfile for extracting compressed data + * + * `tarfile.open(filepath).extractall()` or `tarfile.open(filepath).extract()`or `tarfile.open(filepath).extractfile()` + * or `tarfile.Tarfile.xzopen()` or `tarfile.Tarfile.gzopen()` or `tarfile.Tarfile.bz2open()` + */ + override DataFlow::Node sink() { + ( + result = this.getReturn().getMember(["extractall", "read", "extract", "testzip"]).getACall() + or + exists(API::Node openInstance | + openInstance = this.getReturn().getMember("open") and + ( + not exists( + openInstance + .getACall() + .getParameter(1, "mode") + .getAValueReachingSink() + .asExpr() + .(StrConst) + .getText() + ) or + openInstance + .getACall() + .getParameter(1, "mode") + .getAValueReachingSink() + .asExpr() + .(StrConst) + .getText() = "r" + ) and + ( + not exists( + this.getACall() + .getParameter(1, "mode") + .getAValueReachingSink() + .asExpr() + .(StrConst) + .getText() + ) or + this.getACall() + .getParameter(1, "mode") + .getAValueReachingSink() + .asExpr() + .(StrConst) + .getText() = "r" + ) and + not zipFileDecompressionBombSanitizer(this) and + result = openInstance.getACall() + ) + ) + } + } + + /** + * Gets a `zipfile.ZipFile` and checks if there is a size controlled read or not + * ```python + * with zipfile.ZipFile(zipFileName) as myzip: + * with myzip.open(fileinfo.filename, mode="r") as myfile: + * while chunk: + * chunk = myfile.read(buffer_size) + * total_size += buffer_size + * if total_size > SIZE_THRESHOLD: + * ... + * ``` + */ + predicate zipFileDecompressionBombSanitizer(API::Node n) { + TaintTracking::localExprTaint(n.getReturn().getMember("read").getParameter(0).asSink().asExpr(), + any(Compare i).getASubExpression*()) + } + + /** + * The Additional taint steps that are necessary for data flow query + * + * ```python + * nodeFrom = "zipFileName.zip" + * myZip = zipfile.ZipFile(nodeFrom) + * nodeTo = myZip.open('eggs.txt',"r") + * nodeTo = myZip.extractall() + * nodeTo = myZip.read() + * nodeTo = myZip.extract() + * # testzip not a RAM consumer but it uses as much CPU as possible + * nodeTo = myZip.testzip() + * ``` + */ + class DecompressionAdditionalTaintStep extends DecompressionBomb::AdditionalTaintStep { + DecompressionAdditionalTaintStep() { this = "AdditionalTaintStep" } + + override predicate isAdditionalTaintStep(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) { + exists(DecompressionSink zipFileInstance | + nodeFrom = + [zipFileInstance.getACall().getParameter(0, "file").asSink(), zipFileInstance.getACall()] and + nodeTo = + [ + zipFileInstance.sink(), + zipFileInstance + .getACall() + .getReturn() + .getMember(["extractall", "read", "extract", "testzip"]) + .getACall() + ] + ) + } + } +} + +/** + * Provides Sinks and additional taint steps related to `tarfile` library + */ +module TarFile { + /** + * The Decompression Sinks of `tarfile` library + */ + class DecompressionSink extends DecompressionBomb::Range { + override string toString() { result = "DecompressionSink" } + + DecompressionSink() { this = tarfileExtractMember() } + + /** + * An function call of tarfile for extracting compressed data + * `tarfile.open(filepath).extractall()` or `tarfile.open(filepath).extract()`or `tarfile.open(filepath).extractfile()` + * or `tarfile.Tarfile.xzopen()` or `tarfile.Tarfile.gzopen()` or `tarfile.Tarfile.bz2open()` + */ + override DataFlow::Node sink() { + result = this.getReturn().getMember(["extractall", "extract", "extractfile"]).getACall() + } + } + + /** + * A tarfile instance for extracting compressed data + */ + API::Node tarfileExtractMember() { + result = + [ + API::moduleImport("tarfile").getMember("open"), + API::moduleImport("tarfile") + .getMember("TarFile") + .getMember(["xzopen", "gzopen", "bz2open", "open"]) + ] and + ( + not exists( + result + .getACall() + .getParameter(1, "mode") + .getAValueReachingSink() + .asExpr() + .(StrConst) + .getText() + ) or + not result + .getACall() + .getParameter(1, "mode") + .getAValueReachingSink() + .asExpr() + .(StrConst) + .getText() + .matches("r:%") + ) + } + + /** + * The Additional taint steps that are necessary for data flow query + */ + class DecompressionAdditionalTaintStep extends DecompressionBomb::AdditionalTaintStep { + DecompressionAdditionalTaintStep() { this = "AdditionalTaintStep" } + + override predicate isAdditionalTaintStep(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) { + exists(API::Node tarfileInstance | tarfileInstance = tarfileExtractMember() | + nodeFrom = tarfileInstance.getACall().getParameter(0, "name").asSink() and + nodeTo = + tarfileInstance.getReturn().getMember(["extractall", "extract", "extractfile"]).getACall() + ) + } + } +} + +/** + * Provides Sinks and additional taint steps related to `pandas` library + */ +module Pandas { + /** + * The Decompression Sinks of `pandas` library + */ + class DecompressionSink extends DecompressionBomb::Range { + override string toString() { result = "DecompressionSink" } + + DecompressionSink() { this = API::moduleImport("pandas") } + + override DataFlow::Node sink() { + exists(API::CallNode calltoPandasMethods | + ( + calltoPandasMethods = + this.getMember([ + "read_csv", "read_json", "read_sas", "read_stata", "read_table", "read_xml" + ]).getACall() and + result = calltoPandasMethods.getArg(0) + or + calltoPandasMethods = + this.getMember(["read_csv", "read_sas", "read_stata", "read_table"]).getACall() and + result = calltoPandasMethods.getArgByName("filepath_or_buffer") + or + calltoPandasMethods = this.getMember("read_json").getACall() and + result = calltoPandasMethods.getArgByName("path_or_buf") + or + calltoPandasMethods = this.getMember("read_xml").getACall() and + result = calltoPandasMethods.getArgByName("path_or_buffer") + ) and + ( + not exists(calltoPandasMethods.getArgByName("compression")) + or + not calltoPandasMethods + .getKeywordParameter("compression") + .getAValueReachingSink() + .asExpr() + .(StrConst) + .getText() = "tar" + ) + ) + } + } +} + +/** + * Provides Sinks and additional taint steps related to `shutil` library + */ +module Shutil { + /** + * The Decompression Sinks of `shutil` library + */ + class DecompressionSink extends DecompressionBomb::Range { + override string toString() { result = "DecompressionSink" } + + DecompressionSink() { this = API::moduleImport("shutil").getMember("unpack_archive") } + + override DataFlow::Node sink() { result = this.getACall().getParameter(0, "filename").asSink() } + } +} + +/** + * Provides Sinks and additional taint steps related to `gzip` library + */ +module Gzip { + private API::Node gzipInstance() { + result = API::moduleImport("gzip").getMember(["GzipFile", "open"]) + } + + /** + * The Decompression Sinks of `gzip` library + * + * `gzip.open(sink)` + * `gzip.GzipFile(sink)` + * + * only read mode is sink + */ + class DecompressionSink extends DecompressionBomb::Range { + override string toString() { result = "DecompressionSink" } + + DecompressionSink() { this = gzipInstance() } + + override DataFlow::Node sink() { + exists(API::CallNode gzipCall | gzipCall = this.getACall() | + result = gzipCall.getParameter(0, "filename").asSink() and + ( + not exists( + gzipCall.getParameter(1, "mode").getAValueReachingSink().asExpr().(StrConst).getText() + ) or + gzipCall + .getParameter(1, "mode") + .getAValueReachingSink() + .asExpr() + .(StrConst) + .getText() + .matches("%r%") + ) + ) + } + } +} + +/** + * Provides Sinks and additional taint steps related to `bz2` library + */ +module Bz2 { + private API::Node bz2Instance() { + result = API::moduleImport("bz2").getMember(["BZ2File", "open"]) + } + + /** + * The Decompression Sinks of `bz2` library + * + * `bz2.open(sink)` + * `bz2.BZ2File(sink)` + * + * only read mode is sink + */ + class DecompressionSink extends DecompressionBomb::Range { + override string toString() { result = "DecompressionSink" } + + DecompressionSink() { this = bz2Instance() } + + override DataFlow::Node sink() { + exists(API::CallNode bz2Call | bz2Call = this.getACall() | + result = bz2Call.getParameter(0, "filename").asSink() and + ( + not exists( + bz2Call.getParameter(1, "mode").getAValueReachingSink().asExpr().(StrConst).getText() + ) or + bz2Call + .getParameter(1, "mode") + .getAValueReachingSink() + .asExpr() + .(StrConst) + .getText() + .matches("%r%") + ) + ) + } + } +} + +/** + * Provides Sinks and additional taint steps related to `lzma` library + */ +module Lzma { + private API::Node lzmaInstance() { + result = API::moduleImport("lzma").getMember(["LZMAFile", "open"]) + } + + /** + * The Decompression Sinks of `bz2` library + * + * `lzma.open(sink)` + * `lzma.LZMAFile(sink)` + * + * only read mode is sink + */ + class DecompressionSink extends DecompressionBomb::Range { + override string toString() { result = "DecompressionSink" } + + DecompressionSink() { this = lzmaInstance() } + + override DataFlow::Node sink() { + exists(API::CallNode lzmaCall | lzmaCall = this.getACall() | + result = lzmaCall.getParameter(0, "filename").asSink() and + ( + not exists( + lzmaCall.getParameter(1, "mode").getAValueReachingSink().asExpr().(StrConst).getText() + ) or + lzmaCall + .getParameter(1, "mode") + .getAValueReachingSink() + .asExpr() + .(StrConst) + .getText() + .matches("%r%") + ) + ) + } + } +} diff --git a/python/ql/src/experimental/Security/CWE-409/DecompressionBombs.ql b/python/ql/src/experimental/Security/CWE-409/DecompressionBombs.ql index 6d0258f5b65..c568e783305 100644 --- a/python/ql/src/experimental/Security/CWE-409/DecompressionBombs.ql +++ b/python/ql/src/experimental/Security/CWE-409/DecompressionBombs.ql @@ -17,362 +17,27 @@ import semmle.python.dataflow.new.TaintTracking import semmle.python.ApiGraphs import semmle.python.dataflow.new.RemoteFlowSources import semmle.python.dataflow.new.internal.DataFlowPublic +import DecompressionBomb -// /** -// * Same as ZipFile -// * I can made PyZipFile separated from ZipFile -// * as in future this will be more compatible if it has more differences from ZipFile -// * and we can add new changes easier. -// */ -// module PyZipFile { } -module Lzma { - private API::Node lzmaClass() { - result = API::moduleImport("lzma").getMember(["LZMAFile", "open"]) - } - - /** - * `lzma.open(sink)` - * `lzma.LZMAFile(sink)` - * only read mode is sink - */ - DataFlow::Node isSink() { - exists(API::Node lzmaClass | lzmaClass = lzmaClass() | - result = lzmaClass.getACall().getParameter(0, "filename").asSink() and - ( - not exists( - lzmaClass - .getACall() - .getParameter(1, "mode") - .getAValueReachingSink() - .asExpr() - .(StrConst) - .getText() - ) or - lzmaClass - .getACall() - .getParameter(1, "mode") - .getAValueReachingSink() - .asExpr() - .(StrConst) - .getText() - .matches("%r%") - ) - ) - } -} - -module Bz2 { - private API::Node bz2Class() { result = API::moduleImport("bz2").getMember(["BZ2File", "open"]) } - - /** - * `bz2.open(sink)` - * `bz2.BZ2File(sink)` - * only read mode is sink - */ - DataFlow::Node isSink() { - exists(API::Node bz2Class | bz2Class = bz2Class() | - result = bz2Class.getACall().getParameter(0, "filename").asSink() and - ( - not exists( - bz2Class - .getACall() - .getParameter(1, "mode") - .getAValueReachingSink() - .asExpr() - .(StrConst) - .getText() - ) or - bz2Class - .getACall() - .getParameter(1, "mode") - .getAValueReachingSink() - .asExpr() - .(StrConst) - .getText() - .matches("%r%") - ) - ) - } -} - -module Gzip { - private API::Node gzipClass() { - result = API::moduleImport("gzip").getMember(["GzipFile", "open"]) - } - - /** - * `gzip.open(sink)` - * `gzip.GzipFile(sink)` - * only read mode is sink - */ - DataFlow::Node isSink() { - exists(API::Node gzipClass | gzipClass = gzipClass() | - result = gzipClass.getACall().getParameter(0, "filename").asSink() and - ( - not exists( - gzipClass - .getACall() - .getParameter(1, "mode") - .getAValueReachingSink() - .asExpr() - .(StrConst) - .getText() - ) or - gzipClass - .getACall() - .getParameter(1, "mode") - .getAValueReachingSink() - .asExpr() - .(StrConst) - .getText() - .matches("%r%") - ) - ) - } -} - -module ZipFile { - /** - * ```python - * zipfile.ZipFile() - * ``` - */ - API::Node zipFileClass() { - result = - [ - API::moduleImport("zipfile").getMember("ZipFile"), - API::moduleImport("zipfile").getMember("PyZipFile") - ] - } - - /** - * ```python - * zipfile.ZipFile("zipfileName.zip") - * # read() or one of ["read", "readline", "readlines", "seek", "tell", "__iter__", "__next__"] - * myzip.open('eggs.txt',"r").read() - * # I decided to choice open method with "r" mode as sink - * # because opening zipfile with "r" mode mostly is for reading content of that file - * # so we have a very few of FP here - * next(myzip.open('eggs.txt')) - * myzip.extractall() - * myzip.read() - * myzip.extract() - * # testzip not a RAM consumer but it uses as much CPU as possible - * myzip.testzip() - * - * ``` - */ - private API::Node sink(API::Node zipFileInstance) { - // we can go forward one more step and check whether we call the required methods for read - // or just opening zipfile for reading is enough ( mode = "r") - // result = - // zipfileReturnIOFile() - // .getReturn() - // .getMember(["read", "readline", "readlines", "seek", "tell", "__iter__", "__next__"]) - // or - ( - result = zipFileInstance.getReturn().getMember(["extractall", "read", "extract", "testzip"]) - or - result = zipFileInstance.getReturn().getMember("open") and - ( - not exists( - result - .getACall() - .getParameter(1, "mode") - .getAValueReachingSink() - .asExpr() - .(StrConst) - .getText() - ) or - result - .getACall() - .getParameter(1, "mode") - .getAValueReachingSink() - .asExpr() - .(StrConst) - .getText() = "r" - ) and - ( - not exists( - zipFileInstance - .getACall() - .getParameter(1, "mode") - .getAValueReachingSink() - .asExpr() - .(StrConst) - .getText() - ) or - zipFileInstance - .getACall() - .getParameter(1, "mode") - .getAValueReachingSink() - .asExpr() - .(StrConst) - .getText() = "r" - ) and - zipFileSanitizer(result) - ) and - exists(result.getACall().getLocation().getFile().getRelativePath()) - } - - /** - * a sanitizers which check if there is a managed read - * ```python - * with zipfile.ZipFile(zipFileName) as myzip: - * with myzip.open(fileinfo.filename, mode="r") as myfile: - * while chunk: - * chunk = myfile.read(buffer_size) - * total_size += buffer_size - * if total_size > SIZE_THRESHOLD: - * ... - * ``` - */ - predicate zipFileSanitizer(API::Node n) { - not TaintTracking::localExprTaint(n.getReturn() - .getMember("read") - .getParameter(0) - .asSink() - .asExpr(), any(Compare i).getASubExpression*()) - } - - DataFlow::Node isSink() { result = sink(zipFileClass()).getACall() } - - /** - * ```python - * nodeFrom = "zipFileName.zip" - * myZip = zipfile.ZipFile(nodeFrom) - * nodeTo2 = myZip.open('eggs.txt',"r") - * - * nodeTo = myZip.extractall() - * nodeTo = myZip.read() - * nodeTo = myZip.extract() - * # testzip not a RAM consumer but it uses as much CPU as possible - * nodeTo = myZip.testzip() - * - * ``` - */ - predicate isAdditionalTaintStep(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) { - exists(API::Node zipFileInstance | zipFileInstance = zipFileClass() | - nodeFrom = - [zipFileInstance.getACall().getParameter(0, "file").asSink(), zipFileInstance.getACall()] and - nodeTo = - [ - sink(zipFileInstance).getACall(), - zipFileInstance - .getACall() - .getReturn() - .getMember(["extractall", "read", "extract", "testzip"]) - .getACall() - ] - ) and - exists(nodeTo.getLocation().getFile().getRelativePath()) - } -} - -module TarFile { - /** - * tarfile.open - * - * tarfile.Tarfile.open/xzopen/gzopen/bz2open - * and not mode="r:" which means no compression accepted - */ - API::Node tarfileInstance() { - result = - [ - API::moduleImport("tarfile").getMember("open"), - API::moduleImport("tarfile") - .getMember("TarFile") - .getMember(["xzopen", "gzopen", "bz2open", "open"]) - ] and - ( - not exists( - result - .getACall() - .getParameter(1, "mode") - .getAValueReachingSink() - .asExpr() - .(StrConst) - .getText() - ) or - not result - .getACall() - .getParameter(1, "mode") - .getAValueReachingSink() - .asExpr() - .(StrConst) - .getText() - .matches("r:%") - ) - } - - /** - * a Call of - * `tarfile.open(filepath).extractall()/extract()/extractfile()` - * or - * `tarfile.Tarfile.xzopen()/gzopen()/bz2open()` - */ - DataFlow::Node isSink() { - result = - tarfileInstance().getReturn().getMember(["extractall", "extract", "extractfile"]).getACall() - } - - predicate isAdditionalTaintStep(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) { - exists(API::Node tarfileInstance | tarfileInstance = tarfileInstance() | - nodeFrom = - [tarfileInstance.getACall().getParameter(0, "name").asSink(), tarfileInstance.getACall()] and - nodeTo = - tarfileInstance.getReturn().getMember(["extractall", "extract", "extractfile"]).getACall() - ) - } -} - -module Shutil { - DataFlow::Node isSink() { - result = - API::moduleImport("shutil") - .getMember("unpack_archive") - .getACall() - .getParameter(0, "filename") - .asSink() - } -} - -module Pandas { - DataFlow::Node isSink() { - exists(API::CallNode calltoPandasMethods | - ( - calltoPandasMethods = - API::moduleImport("pandas") - .getMember([ - "read_csv", "read_json", "read_sas", "read_stata", "read_table", "read_xml" - ]) - .getACall() and - result = calltoPandasMethods.getArg(0) - or - calltoPandasMethods = - API::moduleImport("pandas") - .getMember(["read_csv", "read_sas", "read_stata", "read_table"]) - .getACall() and - result = calltoPandasMethods.getArgByName("filepath_or_buffer") - or - calltoPandasMethods = API::moduleImport("pandas").getMember("read_json").getACall() and - result = calltoPandasMethods.getArgByName("path_or_buf") - or - calltoPandasMethods = API::moduleImport("pandas").getMember("read_xml").getACall() and - result = calltoPandasMethods.getArgByName("path_or_buffer") - ) and - ( - not exists(calltoPandasMethods.getArgByName("compression")) - or - not calltoPandasMethods - .getKeywordParameter("compression") - .getAValueReachingSink() - .asExpr() - .(StrConst) - .getText() = "tar" - ) - ) - } +/** + * `io.TextIOWrapper(ip, encoding='utf-8')` like following: + * ```python + * with gzip.open(bomb_input, 'rb') as ip: + * with io.TextIOWrapper(ip, encoding='utf-8') as decoder: + * content = decoder.read() + * print(content) + * ``` + * I saw this builtin method many places so I added it as a AdditionalTaintStep. + * it would be nice if it is added as a global AdditionalTaintStep + */ +predicate isAdditionalTaintStepTextIOWrapper(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) { + exists(API::CallNode textIOWrapper | + textIOWrapper = API::moduleImport("io").getMember("TextIOWrapper").getACall() + | + nodeFrom = textIOWrapper.getParameter(0, "input").asSink() and + nodeTo = textIOWrapper + ) and + exists(nodeTo.getLocation().getFile().getRelativePath()) } module FileAndFormRemoteFlowSource { @@ -429,58 +94,30 @@ module BombsConfig implements DataFlow::ConfigSig { // or // source instanceof FileAndFormRemoteFlowSource::FastAPI exists(source.getLocation().getFile().getRelativePath()) and - not source.getLocation().getFile().getRelativePath().matches("venv") + not source.getLocation().getFile().getRelativePath().matches("%venv%") } predicate isSink(DataFlow::Node sink) { - ( - sink = - [ - ZipFile::isSink(), Gzip::isSink(), Lzma::isSink(), Bz2::isSink(), TarFile::isSink(), - Shutil::isSink(), Pandas::isSink() - ] or - any() - ) and + sink instanceof DecompressionBomb::Sink and exists(sink.getLocation().getFile().getRelativePath()) and - not sink.getLocation().getFile().getRelativePath().matches("venv") + not sink.getLocation().getFile().getRelativePath().matches("%venv%") } - predicate isAdditionalFlowStep(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) { + predicate isAdditionalFlowStep(DataFlow::Node pred, DataFlow::Node succ) { ( - isAdditionalTaintStepTextIOWrapper(nodeFrom, nodeTo) or - ZipFile::isAdditionalTaintStep(nodeFrom, nodeTo) or - TarFile::isAdditionalTaintStep(nodeFrom, nodeTo) + any(DecompressionBomb::AdditionalTaintStep a).isAdditionalTaintStep(pred, succ) or + isAdditionalTaintStepTextIOWrapper(pred, succ) ) and - exists(nodeTo.getLocation().getFile().getRelativePath()) and - not nodeTo.getLocation().getFile().getRelativePath().matches("venv") + not succ.getLocation().getFile().inStdlib() and + not succ.getLocation().getFile().getRelativePath().matches("%venv%") } } -/** - * `io.TextIOWrapper(ip, encoding='utf-8')` like following: - * ```python - * with gzip.open(bomb_input, 'rb') as ip: - * with io.TextIOWrapper(ip, encoding='utf-8') as decoder: - * content = decoder.read() - * print(content) - * ``` - * I saw this builtin method many places so I added it as a AdditionalTaintStep. - * it would be nice if it is added as a global AdditionalTaintStep - */ -predicate isAdditionalTaintStepTextIOWrapper(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) { - exists(API::CallNode textIOWrapper | - textIOWrapper = API::moduleImport("io").getMember("TextIOWrapper").getACall() - | - nodeFrom = textIOWrapper.getParameter(0, "input").asSink() and - nodeTo = textIOWrapper - ) and - exists(nodeTo.getLocation().getFile().getRelativePath()) -} - module Bombs = TaintTracking::Global; import Bombs::PathGraph from Bombs::PathNode source, Bombs::PathNode sink where Bombs::flowPath(source, sink) -select sink.getNode(), source, sink, "This file extraction is $@.", source.getNode(), "uncontrolled" +select sink.getNode(), source, sink, "This uncontrolled file extraction is $@.", source.getNode(), + "depends on this user controlled data" diff --git a/python/ql/src/experimental/Security/CWE-409/example_bad.py b/python/ql/src/experimental/Security/CWE-409/example_bad.py index 32442366458..ae636511db5 100644 --- a/python/ql/src/experimental/Security/CWE-409/example_bad.py +++ b/python/ql/src/experimental/Security/CWE-409/example_bad.py @@ -2,4 +2,4 @@ import zipfile def Bad(zip_path): - zipfile.ZipFile(zip_path, "r").extract("filename", "./tmp/") + zipfile.ZipFile(zip_path, "r").extractall() From 9d86e7946c7bf8bb2f1916510003fd167833d8d8 Mon Sep 17 00:00:00 2001 From: amammad <77095239+amammad@users.noreply.github.com> Date: Mon, 9 Oct 2023 23:10:30 +0200 Subject: [PATCH 010/378] move library file to experimental lib directory --- .../Security/CWE-409/DecompressionBombs.ql | 14 ++++++++------ .../python/security}/DecompressionBomb.qll | 0 2 files changed, 8 insertions(+), 6 deletions(-) rename python/ql/src/experimental/{Security/CWE-409 => semmle/python/security}/DecompressionBomb.qll (100%) diff --git a/python/ql/src/experimental/Security/CWE-409/DecompressionBombs.ql b/python/ql/src/experimental/Security/CWE-409/DecompressionBombs.ql index c568e783305..a0332c86d4d 100644 --- a/python/ql/src/experimental/Security/CWE-409/DecompressionBombs.ql +++ b/python/ql/src/experimental/Security/CWE-409/DecompressionBombs.ql @@ -17,7 +17,7 @@ import semmle.python.dataflow.new.TaintTracking import semmle.python.ApiGraphs import semmle.python.dataflow.new.RemoteFlowSources import semmle.python.dataflow.new.internal.DataFlowPublic -import DecompressionBomb +import experimental.semmle.python.security.DecompressionBomb /** * `io.TextIOWrapper(ip, encoding='utf-8')` like following: @@ -90,16 +90,18 @@ module FileAndFormRemoteFlowSource { module BombsConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { - source instanceof RemoteFlowSource and - // or - // source instanceof FileAndFormRemoteFlowSource::FastAPI - exists(source.getLocation().getFile().getRelativePath()) and + ( + source instanceof RemoteFlowSource + or + source instanceof FileAndFormRemoteFlowSource::FastAPI + ) and + not source.getLocation().getFile().inStdlib() and not source.getLocation().getFile().getRelativePath().matches("%venv%") } predicate isSink(DataFlow::Node sink) { sink instanceof DecompressionBomb::Sink and - exists(sink.getLocation().getFile().getRelativePath()) and + not sink.getLocation().getFile().inStdlib() and not sink.getLocation().getFile().getRelativePath().matches("%venv%") } diff --git a/python/ql/src/experimental/Security/CWE-409/DecompressionBomb.qll b/python/ql/src/experimental/semmle/python/security/DecompressionBomb.qll similarity index 100% rename from python/ql/src/experimental/Security/CWE-409/DecompressionBomb.qll rename to python/ql/src/experimental/semmle/python/security/DecompressionBomb.qll From 4283bb7d483da1d66cc7a9e8b315b4622985dece Mon Sep 17 00:00:00 2001 From: amammad <77095239+amammad@users.noreply.github.com> Date: Mon, 9 Oct 2023 23:15:58 +0200 Subject: [PATCH 011/378] clean up unused vars,fix tests --- .../Security/CWE-409/DecompressionBombs.ql | 10 +- .../CWE-409/DecompressionBombs.expected | 375 ++++++------------ .../CWE-409/Other_compresstion_modules.py | 54 --- .../Security/CWE-409/tarfile_module.py | 31 -- .../query-tests/Security/CWE-409/test.py | 76 ++++ .../Security/CWE-409/zipfile_module.py | 128 ------ 6 files changed, 201 insertions(+), 473 deletions(-) delete mode 100644 python/ql/test/experimental/query-tests/Security/CWE-409/Other_compresstion_modules.py delete mode 100644 python/ql/test/experimental/query-tests/Security/CWE-409/tarfile_module.py create mode 100644 python/ql/test/experimental/query-tests/Security/CWE-409/test.py delete mode 100644 python/ql/test/experimental/query-tests/Security/CWE-409/zipfile_module.py diff --git a/python/ql/src/experimental/Security/CWE-409/DecompressionBombs.ql b/python/ql/src/experimental/Security/CWE-409/DecompressionBombs.ql index a0332c86d4d..8cc1e45f34a 100644 --- a/python/ql/src/experimental/Security/CWE-409/DecompressionBombs.ql +++ b/python/ql/src/experimental/Security/CWE-409/DecompressionBombs.ql @@ -36,8 +36,7 @@ predicate isAdditionalTaintStepTextIOWrapper(DataFlow::Node nodeFrom, DataFlow:: | nodeFrom = textIOWrapper.getParameter(0, "input").asSink() and nodeTo = textIOWrapper - ) and - exists(nodeTo.getLocation().getFile().getRelativePath()) + ) } module FileAndFormRemoteFlowSource { @@ -62,7 +61,7 @@ module FileAndFormRemoteFlowSource { fastApiUploadFile = fastApiParam.asSource().asExpr().(Parameter).getAnnotation().getASubExpression*() and // Multiple Uploaded files as list of fastapi.UploadFile - exists(For f, Attribute attr, DataFlow::Node a, DataFlow::Node b | + exists(For f, Attribute attr | fastApiParam.getAValueReachableFromSource().asExpr() = f.getIter().getASubExpression*() | TaintTracking::localExprTaint(f.getIter(), attr.getObject()) and @@ -80,11 +79,10 @@ module FileAndFormRemoteFlowSource { .getReturn() .asSource(), fastApiParam.getMember("read").getReturn().asSource() ] - ) and - exists(this.getLocation().getFile().getRelativePath()) + ) } - override string getSourceType() { result = "HTTP FORM" } + override string getSourceType() { result = "fastapi HTTP FORM files" } } } diff --git a/python/ql/test/experimental/query-tests/Security/CWE-409/DecompressionBombs.expected b/python/ql/test/experimental/query-tests/Security/CWE-409/DecompressionBombs.expected index 94839132e56..e8e2f0776ee 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-409/DecompressionBombs.expected +++ b/python/ql/test/experimental/query-tests/Security/CWE-409/DecompressionBombs.expected @@ -1,258 +1,125 @@ edges -| Other_compresstion_modules.py:7:10:7:19 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:9:27:9:36 | ControlFlowNode for bomb_input | -| Other_compresstion_modules.py:7:10:7:19 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:11:15:11:24 | ControlFlowNode for bomb_input | -| Other_compresstion_modules.py:7:10:7:19 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:12:19:12:28 | ControlFlowNode for bomb_input | -| Other_compresstion_modules.py:7:10:7:19 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:14:15:14:24 | ControlFlowNode for bomb_input | -| Other_compresstion_modules.py:7:10:7:19 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:15:19:15:28 | ControlFlowNode for bomb_input | -| Other_compresstion_modules.py:7:10:7:19 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:17:20:17:29 | ControlFlowNode for bomb_input | -| Other_compresstion_modules.py:7:10:7:19 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:23:14:23:23 | ControlFlowNode for bomb_input | -| Other_compresstion_modules.py:7:10:7:19 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:24:17:24:26 | ControlFlowNode for bomb_input | -| Other_compresstion_modules.py:7:10:7:19 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:27:40:27:49 | ControlFlowNode for bomb_input | -| Other_compresstion_modules.py:7:10:7:19 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:29:23:29:32 | ControlFlowNode for bomb_input | -| Other_compresstion_modules.py:7:10:7:19 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:30:21:30:30 | ControlFlowNode for bomb_input | -| Other_compresstion_modules.py:7:10:7:19 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:32:40:32:49 | ControlFlowNode for bomb_input | -| Other_compresstion_modules.py:7:10:7:19 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:33:22:33:31 | ControlFlowNode for bomb_input | -| Other_compresstion_modules.py:7:10:7:19 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:34:21:34:30 | ControlFlowNode for bomb_input | -| Other_compresstion_modules.py:7:10:7:19 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:35:42:35:51 | ControlFlowNode for bomb_input | -| Other_compresstion_modules.py:7:10:7:19 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:36:23:36:32 | ControlFlowNode for bomb_input | -| Other_compresstion_modules.py:7:10:7:19 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:37:36:37:45 | ControlFlowNode for bomb_input | -| Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:53:10:53:19 | ControlFlowNode for bomb_input | -| Other_compresstion_modules.py:53:10:53:19 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:7:10:7:19 | ControlFlowNode for bomb_input | -| file:///usr/lib/python3.10/zipfile.py:344:24:344:31 | ControlFlowNode for filename | file:///usr/lib/python3.10/zipfile.py:351:24:351:44 | ControlFlowNode for Subscript | -| file:///usr/lib/python3.10/zipfile.py:344:24:344:31 | ControlFlowNode for filename | file:///usr/lib/python3.10/zipfile.py:358:25:358:32 | ControlFlowNode for filename | -| file:///usr/lib/python3.10/zipfile.py:351:24:351:44 | ControlFlowNode for Subscript | file:///usr/lib/python3.10/zipfile.py:358:25:358:32 | ControlFlowNode for filename | -| file:///usr/lib/python3.10/zipfile.py:358:25:358:32 | ControlFlowNode for filename | file:///usr/lib/python3.10/zipfile.py:358:9:358:12 | [post] ControlFlowNode for self [Attribute filename] | -| file:///usr/lib/python3.10/zipfile.py:1216:24:1216:27 | ControlFlowNode for file | file:///usr/lib/python3.10/zipfile.py:1258:23:1258:26 | ControlFlowNode for file | -| file:///usr/lib/python3.10/zipfile.py:1258:13:1258:16 | [post] ControlFlowNode for self [Attribute fp] | file:///usr/lib/python3.10/zipfile.py:1259:13:1259:16 | ControlFlowNode for self [Attribute fp] | -| file:///usr/lib/python3.10/zipfile.py:1258:23:1258:26 | ControlFlowNode for file | file:///usr/lib/python3.10/zipfile.py:1258:13:1258:16 | [post] ControlFlowNode for self [Attribute fp] | -| file:///usr/lib/python3.10/zipfile.py:1259:13:1259:16 | ControlFlowNode for self [Attribute fp] | file:///usr/lib/python3.10/zipfile.py:1260:9:1260:12 | ControlFlowNode for self [Attribute fp] | -| file:///usr/lib/python3.10/zipfile.py:1260:9:1260:12 | ControlFlowNode for self [Attribute fp] | file:///usr/lib/python3.10/zipfile.py:1261:9:1261:12 | ControlFlowNode for self [Attribute fp] | -| file:///usr/lib/python3.10/zipfile.py:1261:9:1261:12 | ControlFlowNode for self [Attribute fp] | file:///usr/lib/python3.10/zipfile.py:1262:9:1262:12 | ControlFlowNode for self [Attribute fp] | -| file:///usr/lib/python3.10/zipfile.py:1262:9:1262:12 | ControlFlowNode for self [Attribute fp] | file:///usr/lib/python3.10/zipfile.py:1263:9:1263:12 | ControlFlowNode for self [Attribute fp] | -| file:///usr/lib/python3.10/zipfile.py:1263:9:1263:12 | ControlFlowNode for self [Attribute fp] | file:///usr/lib/python3.10/zipfile.py:1267:17:1267:20 | ControlFlowNode for self [Attribute fp] | -| file:///usr/lib/python3.10/zipfile.py:1263:9:1263:12 | ControlFlowNode for self [Attribute fp] | file:///usr/lib/python3.10/zipfile.py:1287:21:1287:24 | ControlFlowNode for self [Attribute fp] | -| file:///usr/lib/python3.10/zipfile.py:1267:17:1267:20 | ControlFlowNode for self [Attribute fp] | file:///usr/lib/python3.10/zipfile.py:1267:17:1267:20 | [post] ControlFlowNode for self [Attribute filelist, List element, Attribute filename] | -| file:///usr/lib/python3.10/zipfile.py:1267:17:1267:20 | ControlFlowNode for self [Attribute fp] | file:///usr/lib/python3.10/zipfile.py:1326:26:1326:29 | ControlFlowNode for self [Attribute fp] | -| file:///usr/lib/python3.10/zipfile.py:1287:21:1287:24 | ControlFlowNode for self [Attribute fp] | file:///usr/lib/python3.10/zipfile.py:1287:21:1287:24 | [post] ControlFlowNode for self [Attribute filelist, List element, Attribute filename] | -| file:///usr/lib/python3.10/zipfile.py:1287:21:1287:24 | ControlFlowNode for self [Attribute fp] | file:///usr/lib/python3.10/zipfile.py:1326:26:1326:29 | ControlFlowNode for self [Attribute fp] | -| file:///usr/lib/python3.10/zipfile.py:1326:26:1326:29 | ControlFlowNode for self [Attribute fp] | file:///usr/lib/python3.10/zipfile.py:1328:14:1328:17 | ControlFlowNode for self [Attribute fp] | -| file:///usr/lib/python3.10/zipfile.py:1328:14:1328:17 | ControlFlowNode for self [Attribute fp] | file:///usr/lib/python3.10/zipfile.py:1328:14:1328:20 | ControlFlowNode for Attribute | -| file:///usr/lib/python3.10/zipfile.py:1328:14:1328:20 | ControlFlowNode for Attribute | file:///usr/lib/python3.10/zipfile.py:1376:25:1376:32 | ControlFlowNode for filename | -| file:///usr/lib/python3.10/zipfile.py:1376:17:1376:33 | ControlFlowNode for ZipInfo() [Attribute filename] | file:///usr/lib/python3.10/zipfile.py:1377:13:1377:13 | ControlFlowNode for x [Attribute filename] | -| file:///usr/lib/python3.10/zipfile.py:1376:25:1376:32 | ControlFlowNode for filename | file:///usr/lib/python3.10/zipfile.py:344:24:344:31 | ControlFlowNode for filename | -| file:///usr/lib/python3.10/zipfile.py:1376:25:1376:32 | ControlFlowNode for filename | file:///usr/lib/python3.10/zipfile.py:1376:17:1376:33 | ControlFlowNode for ZipInfo() [Attribute filename] | -| file:///usr/lib/python3.10/zipfile.py:1377:13:1377:13 | ControlFlowNode for x [Attribute filename] | file:///usr/lib/python3.10/zipfile.py:1378:13:1378:13 | ControlFlowNode for x [Attribute filename] | -| file:///usr/lib/python3.10/zipfile.py:1378:13:1378:13 | ControlFlowNode for x [Attribute filename] | file:///usr/lib/python3.10/zipfile.py:1379:13:1379:13 | ControlFlowNode for x [Attribute filename] | -| file:///usr/lib/python3.10/zipfile.py:1379:13:1379:13 | ControlFlowNode for x [Attribute filename] | file:///usr/lib/python3.10/zipfile.py:1388:13:1388:13 | ControlFlowNode for x [Attribute filename] | -| file:///usr/lib/python3.10/zipfile.py:1388:13:1388:13 | ControlFlowNode for x [Attribute filename] | file:///usr/lib/python3.10/zipfile.py:1389:13:1389:13 | ControlFlowNode for x [Attribute filename] | -| file:///usr/lib/python3.10/zipfile.py:1389:13:1389:13 | ControlFlowNode for x [Attribute filename] | file:///usr/lib/python3.10/zipfile.py:1393:13:1393:13 | ControlFlowNode for x [Attribute filename] | -| file:///usr/lib/python3.10/zipfile.py:1393:13:1393:13 | ControlFlowNode for x [Attribute filename] | file:///usr/lib/python3.10/zipfile.py:1394:34:1394:34 | ControlFlowNode for x [Attribute filename] | -| file:///usr/lib/python3.10/zipfile.py:1394:13:1394:25 | [post] ControlFlowNode for Attribute [List element, Attribute filename] | file:///usr/lib/python3.10/zipfile.py:1394:13:1394:16 | [post] ControlFlowNode for self [Attribute filelist, List element, Attribute filename] | -| file:///usr/lib/python3.10/zipfile.py:1394:34:1394:34 | ControlFlowNode for x [Attribute filename] | file:///usr/lib/python3.10/zipfile.py:1394:13:1394:25 | [post] ControlFlowNode for Attribute [List element, Attribute filename] | -| file:///usr/lib/python3.10/zipfile.py:1410:18:1410:21 | ControlFlowNode for self [Attribute filelist, List element, Attribute filename] | file:///usr/lib/python3.10/zipfile.py:1413:16:1413:19 | ControlFlowNode for self [Attribute filelist, List element, Attribute filename] | -| file:///usr/lib/python3.10/zipfile.py:1413:16:1413:19 | ControlFlowNode for self [Attribute filelist, List element, Attribute filename] | file:///usr/lib/python3.10/zipfile.py:1413:16:1413:28 | ControlFlowNode for Attribute [List element, Attribute filename] | -| file:///usr/lib/python3.10/zipfile.py:1617:23:1617:28 | ControlFlowNode for member [Attribute filename] | file:///usr/lib/python3.10/zipfile.py:1628:37:1628:42 | ControlFlowNode for member [Attribute filename] | -| file:///usr/lib/python3.10/zipfile.py:1628:37:1628:42 | ControlFlowNode for member [Attribute filename] | file:///usr/lib/python3.10/zipfile.py:1628:16:1628:54 | ControlFlowNode for Attribute() | -| file:///usr/lib/python3.10/zipfile.py:1628:37:1628:42 | ControlFlowNode for member [Attribute filename] | file:///usr/lib/python3.10/zipfile.py:1662:31:1662:36 | ControlFlowNode for member [Attribute filename] | -| file:///usr/lib/python3.10/zipfile.py:1662:31:1662:36 | ControlFlowNode for member [Attribute filename] | file:///usr/lib/python3.10/zipfile.py:1671:19:1671:24 | ControlFlowNode for member [Attribute filename] | -| file:///usr/lib/python3.10/zipfile.py:1671:19:1671:24 | ControlFlowNode for member [Attribute filename] | file:///usr/lib/python3.10/zipfile.py:1671:19:1671:33 | ControlFlowNode for Attribute | -| file:///usr/lib/python3.10/zipfile.py:1671:19:1671:33 | ControlFlowNode for Attribute | file:///usr/lib/python3.10/zipfile.py:1677:19:1677:48 | ControlFlowNode for Subscript | -| file:///usr/lib/python3.10/zipfile.py:1677:19:1677:48 | ControlFlowNode for Subscript | file:///usr/lib/python3.10/zipfile.py:1679:42:1679:42 | SSA variable x | -| file:///usr/lib/python3.10/zipfile.py:1679:36:1680:65 | ControlFlowNode for GeneratorExp | file:///usr/lib/python3.10/zipfile.py:1696:20:1696:29 | ControlFlowNode for targetpath | -| file:///usr/lib/python3.10/zipfile.py:1679:36:1680:65 | ControlFlowNode for GeneratorExp | file:///usr/lib/python3.10/zipfile.py:1702:16:1702:25 | ControlFlowNode for targetpath | -| file:///usr/lib/python3.10/zipfile.py:1679:42:1679:42 | SSA variable x | file:///usr/lib/python3.10/zipfile.py:1679:36:1680:65 | ControlFlowNode for GeneratorExp | -| tarfile_module.py:5:17:5:24 | ControlFlowNode for tar_path | tarfile_module.py:8:5:8:54 | ControlFlowNode for Attribute() | -| tarfile_module.py:5:17:5:24 | ControlFlowNode for tar_path | tarfile_module.py:9:5:9:54 | ControlFlowNode for Attribute() | -| tarfile_module.py:5:17:5:24 | ControlFlowNode for tar_path | tarfile_module.py:10:5:10:56 | ControlFlowNode for Attribute() | -| tarfile_module.py:5:17:5:24 | ControlFlowNode for tar_path | tarfile_module.py:11:5:11:49 | ControlFlowNode for Attribute() | -| tarfile_module.py:5:17:5:24 | ControlFlowNode for tar_path | tarfile_module.py:12:5:12:59 | ControlFlowNode for Attribute() | -| tarfile_module.py:5:17:5:24 | ControlFlowNode for tar_path | tarfile_module.py:13:5:13:51 | ControlFlowNode for Attribute() | -| tarfile_module.py:29:19:29:24 | ControlFlowNode for bar_id | tarfile_module.py:30:17:30:22 | ControlFlowNode for bar_id | -| tarfile_module.py:30:17:30:22 | ControlFlowNode for bar_id | tarfile_module.py:5:17:5:24 | ControlFlowNode for tar_path | -| zipfile_module.py:9:17:9:24 | ControlFlowNode for zip_path | zipfile_module.py:11:5:11:57 | ControlFlowNode for Attribute() | -| zipfile_module.py:9:17:9:24 | ControlFlowNode for zip_path | zipfile_module.py:12:34:12:41 | ControlFlowNode for zip_path | -| zipfile_module.py:9:17:9:24 | ControlFlowNode for zip_path | zipfile_module.py:15:5:15:38 | ControlFlowNode for Attribute() | -| zipfile_module.py:9:17:9:24 | ControlFlowNode for zip_path | zipfile_module.py:17:5:17:58 | ControlFlowNode for Attribute() | -| zipfile_module.py:12:18:12:47 | ControlFlowNode for Attribute() [Attribute filelist, List element, Attribute filename] | zipfile_module.py:17:24:17:33 | ControlFlowNode for zipFileObj [Attribute filelist, List element, Attribute filename] | -| zipfile_module.py:12:34:12:41 | ControlFlowNode for zip_path | file:///usr/lib/python3.10/zipfile.py:1216:24:1216:27 | ControlFlowNode for file | -| zipfile_module.py:12:34:12:41 | ControlFlowNode for zip_path | zipfile_module.py:12:18:12:47 | ControlFlowNode for Attribute() [Attribute filelist, List element, Attribute filename] | -| zipfile_module.py:17:24:17:33 | ControlFlowNode for zipFileObj [Attribute filelist, List element, Attribute filename] | file:///usr/lib/python3.10/zipfile.py:1410:18:1410:21 | ControlFlowNode for self [Attribute filelist, List element, Attribute filename] | -| zipfile_module.py:17:24:17:33 | ControlFlowNode for zipFileObj [Attribute filelist, List element, Attribute filename] | zipfile_module.py:17:24:17:44 | ControlFlowNode for Attribute() [List element, Attribute filename] | -| zipfile_module.py:17:24:17:44 | ControlFlowNode for Attribute() [List element, Attribute filename] | zipfile_module.py:17:24:17:47 | ControlFlowNode for Subscript [Attribute filename] | -| zipfile_module.py:17:24:17:47 | ControlFlowNode for Subscript [Attribute filename] | file:///usr/lib/python3.10/zipfile.py:1617:23:1617:28 | ControlFlowNode for member [Attribute filename] | -| zipfile_module.py:17:24:17:47 | ControlFlowNode for Subscript [Attribute filename] | zipfile_module.py:17:5:17:58 | ControlFlowNode for Attribute() | -| zipfile_module.py:20:20:20:27 | ControlFlowNode for zip_path | zipfile_module.py:30:5:30:35 | ControlFlowNode for Attribute() | -| zipfile_module.py:34:18:34:25 | ControlFlowNode for zip_path | zipfile_module.py:37:14:37:29 | ControlFlowNode for Attribute() | -| zipfile_module.py:34:18:34:25 | ControlFlowNode for zip_path | zipfile_module.py:42:29:42:36 | ControlFlowNode for Attribute | -| zipfile_module.py:34:18:34:25 | ControlFlowNode for zip_path | zipfile_module.py:45:14:45:39 | ControlFlowNode for Attribute() | -| zipfile_module.py:34:18:34:25 | ControlFlowNode for zip_path | zipfile_module.py:53:5:53:35 | ControlFlowNode for Attribute() | -| zipfile_module.py:34:18:34:25 | ControlFlowNode for zip_path | zipfile_module.py:62:44:62:61 | ControlFlowNode for Attribute() | -| zipfile_module.py:42:21:42:37 | ControlFlowNode for BytesIO() | file:///usr/lib/python3.10/zipfile.py:1216:24:1216:27 | ControlFlowNode for file | -| zipfile_module.py:42:21:42:37 | ControlFlowNode for BytesIO() | zipfile_module.py:42:5:42:54 | ControlFlowNode for Attribute() | -| zipfile_module.py:42:29:42:36 | ControlFlowNode for Attribute | zipfile_module.py:42:5:42:54 | ControlFlowNode for Attribute() | -| zipfile_module.py:42:29:42:36 | ControlFlowNode for Attribute | zipfile_module.py:42:21:42:37 | ControlFlowNode for BytesIO() | -| zipfile_module.py:89:19:89:24 | ControlFlowNode for bar_id | zipfile_module.py:90:20:90:25 | ControlFlowNode for bar_id | -| zipfile_module.py:89:19:89:24 | ControlFlowNode for bar_id | zipfile_module.py:91:17:91:22 | ControlFlowNode for bar_id | -| zipfile_module.py:89:19:89:24 | ControlFlowNode for bar_id | zipfile_module.py:92:18:92:23 | ControlFlowNode for bar_id | -| zipfile_module.py:90:20:90:25 | ControlFlowNode for bar_id | zipfile_module.py:20:20:20:27 | ControlFlowNode for zip_path | -| zipfile_module.py:91:17:91:22 | ControlFlowNode for bar_id | zipfile_module.py:9:17:9:24 | ControlFlowNode for zip_path | -| zipfile_module.py:92:18:92:23 | ControlFlowNode for bar_id | zipfile_module.py:34:18:34:25 | ControlFlowNode for zip_path | -| zipfile_module.py:99:26:99:34 | ControlFlowNode for Attribute | file:///usr/lib/python3.10/zipfile.py:1216:24:1216:27 | ControlFlowNode for file | -| zipfile_module.py:99:26:99:34 | ControlFlowNode for Attribute | zipfile_module.py:100:14:100:29 | ControlFlowNode for Attribute() | -| zipfile_module.py:106:23:106:26 | ControlFlowNode for file | zipfile_module.py:108:14:108:29 | ControlFlowNode for Attribute() | -| zipfile_module.py:116:30:116:38 | ControlFlowNode for Attribute | file:///usr/lib/python3.10/zipfile.py:1216:24:1216:27 | ControlFlowNode for file | -| zipfile_module.py:116:30:116:38 | ControlFlowNode for Attribute | zipfile_module.py:117:18:117:33 | ControlFlowNode for Attribute() | -| zipfile_module.py:125:30:125:38 | ControlFlowNode for Attribute | file:///usr/lib/python3.10/zipfile.py:1216:24:1216:27 | ControlFlowNode for file | -| zipfile_module.py:125:30:125:38 | ControlFlowNode for Attribute | zipfile_module.py:126:18:126:33 | ControlFlowNode for Attribute() | +| file:///usr/lib/python3.10/tarfile.py:1850:21:1850:24 | ControlFlowNode for name | file:///usr/lib/python3.10/tarfile.py:1863:32:1863:35 | ControlFlowNode for name | +| file:///usr/lib/python3.10/tarfile.py:1911:21:1911:24 | ControlFlowNode for name | file:///usr/lib/python3.10/tarfile.py:1923:28:1923:42 | ControlFlowNode for BoolExpr | +| file:///usr/lib/python3.10/tarfile.py:2373:24:2373:72 | ControlFlowNode for Attribute() | file:///usr/lib/python3.10/tarfile.py:2373:24:2373:72 | ControlFlowNode for Attribute() | +| file:///usr/lib/python3.10/tarfile.py:2373:24:2373:72 | ControlFlowNode for Attribute() | file:///usr/lib/python3.10/tarfile.py:2373:24:2373:72 | ControlFlowNode for Attribute() | +| file:///usr/lib/python3.10/tarfile.py:2373:24:2373:72 | ControlFlowNode for Attribute() | test.py:23:5:23:52 | ControlFlowNode for Attribute() | +| file:///usr/lib/python3.10/tarfile.py:2373:24:2373:72 | ControlFlowNode for Attribute() | test.py:27:5:27:60 | ControlFlowNode for Attribute() | +| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:10:5:10:52 | ControlFlowNode for Attribute() | +| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:10:21:10:29 | ControlFlowNode for file_path | +| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:11:5:11:48 | ControlFlowNode for Attribute() | +| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:11:21:11:29 | ControlFlowNode for file_path | +| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:14:14:14:29 | ControlFlowNode for Attribute() | +| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:21:5:21:60 | ControlFlowNode for Attribute() | +| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:21:21:21:29 | ControlFlowNode for file_path | +| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:23:5:23:52 | ControlFlowNode for Attribute() | +| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:23:18:23:26 | ControlFlowNode for file_path | +| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:24:5:24:55 | ControlFlowNode for Attribute() | +| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:25:5:25:57 | ControlFlowNode for Attribute() | +| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:25:28:25:36 | ControlFlowNode for file_path | +| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:26:5:26:50 | ControlFlowNode for Attribute() | +| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:26:28:26:36 | ControlFlowNode for file_path | +| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:27:5:27:60 | ControlFlowNode for Attribute() | +| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:27:26:27:34 | ControlFlowNode for file_path | +| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:30:28:30:36 | ControlFlowNode for file_path | +| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:34:27:34:35 | ControlFlowNode for file_path | +| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:38:15:38:23 | ControlFlowNode for file_path | +| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:39:19:39:27 | ControlFlowNode for file_path | +| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:43:14:43:22 | ControlFlowNode for file_path | +| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:44:17:44:25 | ControlFlowNode for file_path | +| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:48:15:48:23 | ControlFlowNode for file_path | +| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:49:19:49:27 | ControlFlowNode for file_path | +| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:53:40:53:48 | ControlFlowNode for file_path | +| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:55:23:55:31 | ControlFlowNode for file_path | +| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:56:21:56:29 | ControlFlowNode for file_path | +| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:58:40:58:48 | ControlFlowNode for file_path | +| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:59:22:59:30 | ControlFlowNode for file_path | +| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:60:21:60:29 | ControlFlowNode for file_path | +| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:61:42:61:50 | ControlFlowNode for file_path | +| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:62:23:62:31 | ControlFlowNode for file_path | +| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:63:36:63:44 | ControlFlowNode for file_path | +| test.py:10:21:10:29 | ControlFlowNode for file_path | file:///usr/lib/python3.10/zipfile.py:1700:14:1700:39 | ControlFlowNode for Attribute() | +| test.py:11:21:11:29 | ControlFlowNode for file_path | file:///usr/lib/python3.10/zipfile.py:1700:14:1700:39 | ControlFlowNode for Attribute() | +| test.py:21:21:21:29 | ControlFlowNode for file_path | file:///usr/lib/python3.10/zipfile.py:1477:14:1477:38 | ControlFlowNode for Attribute() | +| test.py:23:18:23:26 | ControlFlowNode for file_path | file:///usr/lib/python3.10/tarfile.py:2373:24:2373:72 | ControlFlowNode for Attribute() | +| test.py:23:18:23:26 | ControlFlowNode for file_path | file:///usr/lib/python3.10/tarfile.py:2373:24:2373:72 | ControlFlowNode for Attribute() | +| test.py:25:28:25:36 | ControlFlowNode for file_path | file:///usr/lib/python3.10/tarfile.py:1911:21:1911:24 | ControlFlowNode for name | +| test.py:26:28:26:36 | ControlFlowNode for file_path | file:///usr/lib/python3.10/tarfile.py:1850:21:1850:24 | ControlFlowNode for name | +| test.py:27:26:27:34 | ControlFlowNode for file_path | file:///usr/lib/python3.10/tarfile.py:2373:24:2373:72 | ControlFlowNode for Attribute() | +| test.py:27:26:27:34 | ControlFlowNode for file_path | file:///usr/lib/python3.10/tarfile.py:2373:24:2373:72 | ControlFlowNode for Attribute() | +| test.py:30:28:30:36 | ControlFlowNode for file_path | file:///usr/lib/python3.10/tarfile.py:1850:21:1850:24 | ControlFlowNode for name | nodes -| Other_compresstion_modules.py:7:10:7:19 | ControlFlowNode for bomb_input | semmle.label | ControlFlowNode for bomb_input | -| Other_compresstion_modules.py:9:27:9:36 | ControlFlowNode for bomb_input | semmle.label | ControlFlowNode for bomb_input | -| Other_compresstion_modules.py:11:15:11:24 | ControlFlowNode for bomb_input | semmle.label | ControlFlowNode for bomb_input | -| Other_compresstion_modules.py:12:19:12:28 | ControlFlowNode for bomb_input | semmle.label | ControlFlowNode for bomb_input | -| Other_compresstion_modules.py:14:15:14:24 | ControlFlowNode for bomb_input | semmle.label | ControlFlowNode for bomb_input | -| Other_compresstion_modules.py:15:19:15:28 | ControlFlowNode for bomb_input | semmle.label | ControlFlowNode for bomb_input | -| Other_compresstion_modules.py:17:20:17:29 | ControlFlowNode for bomb_input | semmle.label | ControlFlowNode for bomb_input | -| Other_compresstion_modules.py:23:14:23:23 | ControlFlowNode for bomb_input | semmle.label | ControlFlowNode for bomb_input | -| Other_compresstion_modules.py:24:17:24:26 | ControlFlowNode for bomb_input | semmle.label | ControlFlowNode for bomb_input | -| Other_compresstion_modules.py:27:40:27:49 | ControlFlowNode for bomb_input | semmle.label | ControlFlowNode for bomb_input | -| Other_compresstion_modules.py:29:23:29:32 | ControlFlowNode for bomb_input | semmle.label | ControlFlowNode for bomb_input | -| Other_compresstion_modules.py:30:21:30:30 | ControlFlowNode for bomb_input | semmle.label | ControlFlowNode for bomb_input | -| Other_compresstion_modules.py:32:40:32:49 | ControlFlowNode for bomb_input | semmle.label | ControlFlowNode for bomb_input | -| Other_compresstion_modules.py:33:22:33:31 | ControlFlowNode for bomb_input | semmle.label | ControlFlowNode for bomb_input | -| Other_compresstion_modules.py:34:21:34:30 | ControlFlowNode for bomb_input | semmle.label | ControlFlowNode for bomb_input | -| Other_compresstion_modules.py:35:42:35:51 | ControlFlowNode for bomb_input | semmle.label | ControlFlowNode for bomb_input | -| Other_compresstion_modules.py:36:23:36:32 | ControlFlowNode for bomb_input | semmle.label | ControlFlowNode for bomb_input | -| Other_compresstion_modules.py:37:36:37:45 | ControlFlowNode for bomb_input | semmle.label | ControlFlowNode for bomb_input | -| Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | semmle.label | ControlFlowNode for bomb_input | -| Other_compresstion_modules.py:53:10:53:19 | ControlFlowNode for bomb_input | semmle.label | ControlFlowNode for bomb_input | -| file:///usr/lib/python3.10/zipfile.py:344:24:344:31 | ControlFlowNode for filename | semmle.label | ControlFlowNode for filename | -| file:///usr/lib/python3.10/zipfile.py:351:24:351:44 | ControlFlowNode for Subscript | semmle.label | ControlFlowNode for Subscript | -| file:///usr/lib/python3.10/zipfile.py:358:9:358:12 | [post] ControlFlowNode for self [Attribute filename] | semmle.label | [post] ControlFlowNode for self [Attribute filename] | -| file:///usr/lib/python3.10/zipfile.py:358:25:358:32 | ControlFlowNode for filename | semmle.label | ControlFlowNode for filename | -| file:///usr/lib/python3.10/zipfile.py:1216:24:1216:27 | ControlFlowNode for file | semmle.label | ControlFlowNode for file | -| file:///usr/lib/python3.10/zipfile.py:1258:13:1258:16 | [post] ControlFlowNode for self [Attribute fp] | semmle.label | [post] ControlFlowNode for self [Attribute fp] | -| file:///usr/lib/python3.10/zipfile.py:1258:23:1258:26 | ControlFlowNode for file | semmle.label | ControlFlowNode for file | -| file:///usr/lib/python3.10/zipfile.py:1259:13:1259:16 | ControlFlowNode for self [Attribute fp] | semmle.label | ControlFlowNode for self [Attribute fp] | -| file:///usr/lib/python3.10/zipfile.py:1260:9:1260:12 | ControlFlowNode for self [Attribute fp] | semmle.label | ControlFlowNode for self [Attribute fp] | -| file:///usr/lib/python3.10/zipfile.py:1261:9:1261:12 | ControlFlowNode for self [Attribute fp] | semmle.label | ControlFlowNode for self [Attribute fp] | -| file:///usr/lib/python3.10/zipfile.py:1262:9:1262:12 | ControlFlowNode for self [Attribute fp] | semmle.label | ControlFlowNode for self [Attribute fp] | -| file:///usr/lib/python3.10/zipfile.py:1263:9:1263:12 | ControlFlowNode for self [Attribute fp] | semmle.label | ControlFlowNode for self [Attribute fp] | -| file:///usr/lib/python3.10/zipfile.py:1267:17:1267:20 | ControlFlowNode for self [Attribute fp] | semmle.label | ControlFlowNode for self [Attribute fp] | -| file:///usr/lib/python3.10/zipfile.py:1267:17:1267:20 | [post] ControlFlowNode for self [Attribute filelist, List element, Attribute filename] | semmle.label | [post] ControlFlowNode for self [Attribute filelist, List element, Attribute filename] | -| file:///usr/lib/python3.10/zipfile.py:1287:21:1287:24 | ControlFlowNode for self [Attribute fp] | semmle.label | ControlFlowNode for self [Attribute fp] | -| file:///usr/lib/python3.10/zipfile.py:1287:21:1287:24 | [post] ControlFlowNode for self [Attribute filelist, List element, Attribute filename] | semmle.label | [post] ControlFlowNode for self [Attribute filelist, List element, Attribute filename] | -| file:///usr/lib/python3.10/zipfile.py:1326:26:1326:29 | ControlFlowNode for self [Attribute fp] | semmle.label | ControlFlowNode for self [Attribute fp] | -| file:///usr/lib/python3.10/zipfile.py:1328:14:1328:17 | ControlFlowNode for self [Attribute fp] | semmle.label | ControlFlowNode for self [Attribute fp] | -| file:///usr/lib/python3.10/zipfile.py:1328:14:1328:20 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | -| file:///usr/lib/python3.10/zipfile.py:1376:17:1376:33 | ControlFlowNode for ZipInfo() [Attribute filename] | semmle.label | ControlFlowNode for ZipInfo() [Attribute filename] | -| file:///usr/lib/python3.10/zipfile.py:1376:25:1376:32 | ControlFlowNode for filename | semmle.label | ControlFlowNode for filename | -| file:///usr/lib/python3.10/zipfile.py:1377:13:1377:13 | ControlFlowNode for x [Attribute filename] | semmle.label | ControlFlowNode for x [Attribute filename] | -| file:///usr/lib/python3.10/zipfile.py:1378:13:1378:13 | ControlFlowNode for x [Attribute filename] | semmle.label | ControlFlowNode for x [Attribute filename] | -| file:///usr/lib/python3.10/zipfile.py:1379:13:1379:13 | ControlFlowNode for x [Attribute filename] | semmle.label | ControlFlowNode for x [Attribute filename] | -| file:///usr/lib/python3.10/zipfile.py:1388:13:1388:13 | ControlFlowNode for x [Attribute filename] | semmle.label | ControlFlowNode for x [Attribute filename] | -| file:///usr/lib/python3.10/zipfile.py:1389:13:1389:13 | ControlFlowNode for x [Attribute filename] | semmle.label | ControlFlowNode for x [Attribute filename] | -| file:///usr/lib/python3.10/zipfile.py:1393:13:1393:13 | ControlFlowNode for x [Attribute filename] | semmle.label | ControlFlowNode for x [Attribute filename] | -| file:///usr/lib/python3.10/zipfile.py:1394:13:1394:16 | [post] ControlFlowNode for self [Attribute filelist, List element, Attribute filename] | semmle.label | [post] ControlFlowNode for self [Attribute filelist, List element, Attribute filename] | -| file:///usr/lib/python3.10/zipfile.py:1394:13:1394:25 | [post] ControlFlowNode for Attribute [List element, Attribute filename] | semmle.label | [post] ControlFlowNode for Attribute [List element, Attribute filename] | -| file:///usr/lib/python3.10/zipfile.py:1394:34:1394:34 | ControlFlowNode for x [Attribute filename] | semmle.label | ControlFlowNode for x [Attribute filename] | -| file:///usr/lib/python3.10/zipfile.py:1410:18:1410:21 | ControlFlowNode for self [Attribute filelist, List element, Attribute filename] | semmle.label | ControlFlowNode for self [Attribute filelist, List element, Attribute filename] | -| file:///usr/lib/python3.10/zipfile.py:1413:16:1413:19 | ControlFlowNode for self [Attribute filelist, List element, Attribute filename] | semmle.label | ControlFlowNode for self [Attribute filelist, List element, Attribute filename] | -| file:///usr/lib/python3.10/zipfile.py:1413:16:1413:28 | ControlFlowNode for Attribute [List element, Attribute filename] | semmle.label | ControlFlowNode for Attribute [List element, Attribute filename] | -| file:///usr/lib/python3.10/zipfile.py:1617:23:1617:28 | ControlFlowNode for member [Attribute filename] | semmle.label | ControlFlowNode for member [Attribute filename] | -| file:///usr/lib/python3.10/zipfile.py:1628:16:1628:54 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | -| file:///usr/lib/python3.10/zipfile.py:1628:37:1628:42 | ControlFlowNode for member [Attribute filename] | semmle.label | ControlFlowNode for member [Attribute filename] | -| file:///usr/lib/python3.10/zipfile.py:1662:31:1662:36 | ControlFlowNode for member [Attribute filename] | semmle.label | ControlFlowNode for member [Attribute filename] | -| file:///usr/lib/python3.10/zipfile.py:1671:19:1671:24 | ControlFlowNode for member [Attribute filename] | semmle.label | ControlFlowNode for member [Attribute filename] | -| file:///usr/lib/python3.10/zipfile.py:1671:19:1671:33 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | -| file:///usr/lib/python3.10/zipfile.py:1677:19:1677:48 | ControlFlowNode for Subscript | semmle.label | ControlFlowNode for Subscript | -| file:///usr/lib/python3.10/zipfile.py:1679:36:1680:65 | ControlFlowNode for GeneratorExp | semmle.label | ControlFlowNode for GeneratorExp | -| file:///usr/lib/python3.10/zipfile.py:1679:42:1679:42 | SSA variable x | semmle.label | SSA variable x | -| file:///usr/lib/python3.10/zipfile.py:1696:20:1696:29 | ControlFlowNode for targetpath | semmle.label | ControlFlowNode for targetpath | -| file:///usr/lib/python3.10/zipfile.py:1702:16:1702:25 | ControlFlowNode for targetpath | semmle.label | ControlFlowNode for targetpath | -| tarfile_module.py:5:17:5:24 | ControlFlowNode for tar_path | semmle.label | ControlFlowNode for tar_path | -| tarfile_module.py:8:5:8:54 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | -| tarfile_module.py:9:5:9:54 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | -| tarfile_module.py:10:5:10:56 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | -| tarfile_module.py:11:5:11:49 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | -| tarfile_module.py:12:5:12:59 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | -| tarfile_module.py:13:5:13:51 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | -| tarfile_module.py:29:19:29:24 | ControlFlowNode for bar_id | semmle.label | ControlFlowNode for bar_id | -| tarfile_module.py:30:17:30:22 | ControlFlowNode for bar_id | semmle.label | ControlFlowNode for bar_id | -| zipfile_module.py:9:17:9:24 | ControlFlowNode for zip_path | semmle.label | ControlFlowNode for zip_path | -| zipfile_module.py:11:5:11:57 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | -| zipfile_module.py:12:18:12:47 | ControlFlowNode for Attribute() [Attribute filelist, List element, Attribute filename] | semmle.label | ControlFlowNode for Attribute() [Attribute filelist, List element, Attribute filename] | -| zipfile_module.py:12:34:12:41 | ControlFlowNode for zip_path | semmle.label | ControlFlowNode for zip_path | -| zipfile_module.py:15:5:15:38 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | -| zipfile_module.py:17:5:17:58 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | -| zipfile_module.py:17:24:17:33 | ControlFlowNode for zipFileObj [Attribute filelist, List element, Attribute filename] | semmle.label | ControlFlowNode for zipFileObj [Attribute filelist, List element, Attribute filename] | -| zipfile_module.py:17:24:17:44 | ControlFlowNode for Attribute() [List element, Attribute filename] | semmle.label | ControlFlowNode for Attribute() [List element, Attribute filename] | -| zipfile_module.py:17:24:17:47 | ControlFlowNode for Subscript [Attribute filename] | semmle.label | ControlFlowNode for Subscript [Attribute filename] | -| zipfile_module.py:20:20:20:27 | ControlFlowNode for zip_path | semmle.label | ControlFlowNode for zip_path | -| zipfile_module.py:30:5:30:35 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | -| zipfile_module.py:34:18:34:25 | ControlFlowNode for zip_path | semmle.label | ControlFlowNode for zip_path | -| zipfile_module.py:37:14:37:29 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | -| zipfile_module.py:42:5:42:54 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | -| zipfile_module.py:42:21:42:37 | ControlFlowNode for BytesIO() | semmle.label | ControlFlowNode for BytesIO() | -| zipfile_module.py:42:29:42:36 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | -| zipfile_module.py:45:14:45:39 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | -| zipfile_module.py:53:5:53:35 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | -| zipfile_module.py:62:44:62:61 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | -| zipfile_module.py:89:19:89:24 | ControlFlowNode for bar_id | semmle.label | ControlFlowNode for bar_id | -| zipfile_module.py:90:20:90:25 | ControlFlowNode for bar_id | semmle.label | ControlFlowNode for bar_id | -| zipfile_module.py:91:17:91:22 | ControlFlowNode for bar_id | semmle.label | ControlFlowNode for bar_id | -| zipfile_module.py:92:18:92:23 | ControlFlowNode for bar_id | semmle.label | ControlFlowNode for bar_id | -| zipfile_module.py:99:26:99:34 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | -| zipfile_module.py:100:14:100:29 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | -| zipfile_module.py:106:23:106:26 | ControlFlowNode for file | semmle.label | ControlFlowNode for file | -| zipfile_module.py:108:14:108:29 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | -| zipfile_module.py:116:30:116:38 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | -| zipfile_module.py:117:18:117:33 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | -| zipfile_module.py:125:30:125:38 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | -| zipfile_module.py:126:18:126:33 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| file:///usr/lib/python3.10/tarfile.py:1850:21:1850:24 | ControlFlowNode for name | semmle.label | ControlFlowNode for name | +| file:///usr/lib/python3.10/tarfile.py:1863:32:1863:35 | ControlFlowNode for name | semmle.label | ControlFlowNode for name | +| file:///usr/lib/python3.10/tarfile.py:1911:21:1911:24 | ControlFlowNode for name | semmle.label | ControlFlowNode for name | +| file:///usr/lib/python3.10/tarfile.py:1923:28:1923:42 | ControlFlowNode for BoolExpr | semmle.label | ControlFlowNode for BoolExpr | +| file:///usr/lib/python3.10/tarfile.py:2373:24:2373:72 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| file:///usr/lib/python3.10/tarfile.py:2373:24:2373:72 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| file:///usr/lib/python3.10/zipfile.py:1477:14:1477:38 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| file:///usr/lib/python3.10/zipfile.py:1700:14:1700:39 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| test.py:9:16:9:24 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| test.py:10:5:10:52 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| test.py:10:21:10:29 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| test.py:11:5:11:48 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| test.py:11:21:11:29 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| test.py:14:14:14:29 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| test.py:21:5:21:60 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| test.py:21:21:21:29 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| test.py:23:5:23:52 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| test.py:23:18:23:26 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| test.py:24:5:24:55 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| test.py:25:5:25:57 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| test.py:25:28:25:36 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| test.py:26:5:26:50 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| test.py:26:28:26:36 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| test.py:27:5:27:60 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| test.py:27:26:27:34 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| test.py:30:28:30:36 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| test.py:34:27:34:35 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| test.py:38:15:38:23 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| test.py:39:19:39:27 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| test.py:43:14:43:22 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| test.py:44:17:44:25 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| test.py:48:15:48:23 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| test.py:49:19:49:27 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| test.py:53:40:53:48 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| test.py:55:23:55:31 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| test.py:56:21:56:29 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| test.py:58:40:58:48 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| test.py:59:22:59:30 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| test.py:60:21:60:29 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| test.py:61:42:61:50 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| test.py:62:23:62:31 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| test.py:63:36:63:44 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | subpaths -| file:///usr/lib/python3.10/zipfile.py:1267:17:1267:20 | ControlFlowNode for self [Attribute fp] | file:///usr/lib/python3.10/zipfile.py:1326:26:1326:29 | ControlFlowNode for self [Attribute fp] | file:///usr/lib/python3.10/zipfile.py:1394:13:1394:16 | [post] ControlFlowNode for self [Attribute filelist, List element, Attribute filename] | file:///usr/lib/python3.10/zipfile.py:1267:17:1267:20 | [post] ControlFlowNode for self [Attribute filelist, List element, Attribute filename] | -| file:///usr/lib/python3.10/zipfile.py:1287:21:1287:24 | ControlFlowNode for self [Attribute fp] | file:///usr/lib/python3.10/zipfile.py:1326:26:1326:29 | ControlFlowNode for self [Attribute fp] | file:///usr/lib/python3.10/zipfile.py:1394:13:1394:16 | [post] ControlFlowNode for self [Attribute filelist, List element, Attribute filename] | file:///usr/lib/python3.10/zipfile.py:1287:21:1287:24 | [post] ControlFlowNode for self [Attribute filelist, List element, Attribute filename] | -| file:///usr/lib/python3.10/zipfile.py:1376:25:1376:32 | ControlFlowNode for filename | file:///usr/lib/python3.10/zipfile.py:344:24:344:31 | ControlFlowNode for filename | file:///usr/lib/python3.10/zipfile.py:358:9:358:12 | [post] ControlFlowNode for self [Attribute filename] | file:///usr/lib/python3.10/zipfile.py:1376:17:1376:33 | ControlFlowNode for ZipInfo() [Attribute filename] | -| file:///usr/lib/python3.10/zipfile.py:1628:37:1628:42 | ControlFlowNode for member [Attribute filename] | file:///usr/lib/python3.10/zipfile.py:1662:31:1662:36 | ControlFlowNode for member [Attribute filename] | file:///usr/lib/python3.10/zipfile.py:1696:20:1696:29 | ControlFlowNode for targetpath | file:///usr/lib/python3.10/zipfile.py:1628:16:1628:54 | ControlFlowNode for Attribute() | -| file:///usr/lib/python3.10/zipfile.py:1628:37:1628:42 | ControlFlowNode for member [Attribute filename] | file:///usr/lib/python3.10/zipfile.py:1662:31:1662:36 | ControlFlowNode for member [Attribute filename] | file:///usr/lib/python3.10/zipfile.py:1702:16:1702:25 | ControlFlowNode for targetpath | file:///usr/lib/python3.10/zipfile.py:1628:16:1628:54 | ControlFlowNode for Attribute() | -| zipfile_module.py:12:34:12:41 | ControlFlowNode for zip_path | file:///usr/lib/python3.10/zipfile.py:1216:24:1216:27 | ControlFlowNode for file | file:///usr/lib/python3.10/zipfile.py:1267:17:1267:20 | [post] ControlFlowNode for self [Attribute filelist, List element, Attribute filename] | zipfile_module.py:12:18:12:47 | ControlFlowNode for Attribute() [Attribute filelist, List element, Attribute filename] | -| zipfile_module.py:12:34:12:41 | ControlFlowNode for zip_path | file:///usr/lib/python3.10/zipfile.py:1216:24:1216:27 | ControlFlowNode for file | file:///usr/lib/python3.10/zipfile.py:1287:21:1287:24 | [post] ControlFlowNode for self [Attribute filelist, List element, Attribute filename] | zipfile_module.py:12:18:12:47 | ControlFlowNode for Attribute() [Attribute filelist, List element, Attribute filename] | -| zipfile_module.py:17:24:17:33 | ControlFlowNode for zipFileObj [Attribute filelist, List element, Attribute filename] | file:///usr/lib/python3.10/zipfile.py:1410:18:1410:21 | ControlFlowNode for self [Attribute filelist, List element, Attribute filename] | file:///usr/lib/python3.10/zipfile.py:1413:16:1413:28 | ControlFlowNode for Attribute [List element, Attribute filename] | zipfile_module.py:17:24:17:44 | ControlFlowNode for Attribute() [List element, Attribute filename] | -| zipfile_module.py:17:24:17:47 | ControlFlowNode for Subscript [Attribute filename] | file:///usr/lib/python3.10/zipfile.py:1617:23:1617:28 | ControlFlowNode for member [Attribute filename] | file:///usr/lib/python3.10/zipfile.py:1628:16:1628:54 | ControlFlowNode for Attribute() | zipfile_module.py:17:5:17:58 | ControlFlowNode for Attribute() | #select -| Other_compresstion_modules.py:9:27:9:36 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:9:27:9:36 | ControlFlowNode for bomb_input | This file extraction depends on a $@. | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | potentially untrusted source | -| Other_compresstion_modules.py:11:15:11:24 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:11:15:11:24 | ControlFlowNode for bomb_input | This file extraction depends on a $@. | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | potentially untrusted source | -| Other_compresstion_modules.py:12:19:12:28 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:12:19:12:28 | ControlFlowNode for bomb_input | This file extraction depends on a $@. | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | potentially untrusted source | -| Other_compresstion_modules.py:14:15:14:24 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:14:15:14:24 | ControlFlowNode for bomb_input | This file extraction depends on a $@. | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | potentially untrusted source | -| Other_compresstion_modules.py:15:19:15:28 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:15:19:15:28 | ControlFlowNode for bomb_input | This file extraction depends on a $@. | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | potentially untrusted source | -| Other_compresstion_modules.py:17:20:17:29 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:17:20:17:29 | ControlFlowNode for bomb_input | This file extraction depends on a $@. | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | potentially untrusted source | -| Other_compresstion_modules.py:23:14:23:23 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:23:14:23:23 | ControlFlowNode for bomb_input | This file extraction depends on a $@. | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | potentially untrusted source | -| Other_compresstion_modules.py:24:17:24:26 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:24:17:24:26 | ControlFlowNode for bomb_input | This file extraction depends on a $@. | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | potentially untrusted source | -| Other_compresstion_modules.py:27:40:27:49 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:27:40:27:49 | ControlFlowNode for bomb_input | This file extraction depends on a $@. | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | potentially untrusted source | -| Other_compresstion_modules.py:29:23:29:32 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:29:23:29:32 | ControlFlowNode for bomb_input | This file extraction depends on a $@. | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | potentially untrusted source | -| Other_compresstion_modules.py:30:21:30:30 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:30:21:30:30 | ControlFlowNode for bomb_input | This file extraction depends on a $@. | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | potentially untrusted source | -| Other_compresstion_modules.py:32:40:32:49 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:32:40:32:49 | ControlFlowNode for bomb_input | This file extraction depends on a $@. | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | potentially untrusted source | -| Other_compresstion_modules.py:33:22:33:31 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:33:22:33:31 | ControlFlowNode for bomb_input | This file extraction depends on a $@. | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | potentially untrusted source | -| Other_compresstion_modules.py:34:21:34:30 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:34:21:34:30 | ControlFlowNode for bomb_input | This file extraction depends on a $@. | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | potentially untrusted source | -| Other_compresstion_modules.py:35:42:35:51 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:35:42:35:51 | ControlFlowNode for bomb_input | This file extraction depends on a $@. | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | potentially untrusted source | -| Other_compresstion_modules.py:36:23:36:32 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:36:23:36:32 | ControlFlowNode for bomb_input | This file extraction depends on a $@. | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | potentially untrusted source | -| Other_compresstion_modules.py:37:36:37:45 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | Other_compresstion_modules.py:37:36:37:45 | ControlFlowNode for bomb_input | This file extraction depends on a $@. | Other_compresstion_modules.py:52:17:52:26 | ControlFlowNode for bomb_input | potentially untrusted source | -| tarfile_module.py:8:5:8:54 | ControlFlowNode for Attribute() | tarfile_module.py:29:19:29:24 | ControlFlowNode for bar_id | tarfile_module.py:8:5:8:54 | ControlFlowNode for Attribute() | This file extraction depends on a $@. | tarfile_module.py:29:19:29:24 | ControlFlowNode for bar_id | potentially untrusted source | -| tarfile_module.py:9:5:9:54 | ControlFlowNode for Attribute() | tarfile_module.py:29:19:29:24 | ControlFlowNode for bar_id | tarfile_module.py:9:5:9:54 | ControlFlowNode for Attribute() | This file extraction depends on a $@. | tarfile_module.py:29:19:29:24 | ControlFlowNode for bar_id | potentially untrusted source | -| tarfile_module.py:10:5:10:56 | ControlFlowNode for Attribute() | tarfile_module.py:29:19:29:24 | ControlFlowNode for bar_id | tarfile_module.py:10:5:10:56 | ControlFlowNode for Attribute() | This file extraction depends on a $@. | tarfile_module.py:29:19:29:24 | ControlFlowNode for bar_id | potentially untrusted source | -| tarfile_module.py:11:5:11:49 | ControlFlowNode for Attribute() | tarfile_module.py:29:19:29:24 | ControlFlowNode for bar_id | tarfile_module.py:11:5:11:49 | ControlFlowNode for Attribute() | This file extraction depends on a $@. | tarfile_module.py:29:19:29:24 | ControlFlowNode for bar_id | potentially untrusted source | -| tarfile_module.py:12:5:12:59 | ControlFlowNode for Attribute() | tarfile_module.py:29:19:29:24 | ControlFlowNode for bar_id | tarfile_module.py:12:5:12:59 | ControlFlowNode for Attribute() | This file extraction depends on a $@. | tarfile_module.py:29:19:29:24 | ControlFlowNode for bar_id | potentially untrusted source | -| tarfile_module.py:13:5:13:51 | ControlFlowNode for Attribute() | tarfile_module.py:29:19:29:24 | ControlFlowNode for bar_id | tarfile_module.py:13:5:13:51 | ControlFlowNode for Attribute() | This file extraction depends on a $@. | tarfile_module.py:29:19:29:24 | ControlFlowNode for bar_id | potentially untrusted source | -| zipfile_module.py:11:5:11:57 | ControlFlowNode for Attribute() | zipfile_module.py:89:19:89:24 | ControlFlowNode for bar_id | zipfile_module.py:11:5:11:57 | ControlFlowNode for Attribute() | This file extraction depends on a $@. | zipfile_module.py:89:19:89:24 | ControlFlowNode for bar_id | potentially untrusted source | -| zipfile_module.py:15:5:15:38 | ControlFlowNode for Attribute() | zipfile_module.py:89:19:89:24 | ControlFlowNode for bar_id | zipfile_module.py:15:5:15:38 | ControlFlowNode for Attribute() | This file extraction depends on a $@. | zipfile_module.py:89:19:89:24 | ControlFlowNode for bar_id | potentially untrusted source | -| zipfile_module.py:17:5:17:58 | ControlFlowNode for Attribute() | zipfile_module.py:89:19:89:24 | ControlFlowNode for bar_id | zipfile_module.py:17:5:17:58 | ControlFlowNode for Attribute() | This file extraction depends on a $@. | zipfile_module.py:89:19:89:24 | ControlFlowNode for bar_id | potentially untrusted source | -| zipfile_module.py:30:5:30:35 | ControlFlowNode for Attribute() | zipfile_module.py:89:19:89:24 | ControlFlowNode for bar_id | zipfile_module.py:30:5:30:35 | ControlFlowNode for Attribute() | This file extraction depends on a $@. | zipfile_module.py:89:19:89:24 | ControlFlowNode for bar_id | potentially untrusted source | -| zipfile_module.py:37:14:37:29 | ControlFlowNode for Attribute() | zipfile_module.py:89:19:89:24 | ControlFlowNode for bar_id | zipfile_module.py:37:14:37:29 | ControlFlowNode for Attribute() | This file extraction depends on a $@. | zipfile_module.py:89:19:89:24 | ControlFlowNode for bar_id | potentially untrusted source | -| zipfile_module.py:42:5:42:54 | ControlFlowNode for Attribute() | zipfile_module.py:89:19:89:24 | ControlFlowNode for bar_id | zipfile_module.py:42:5:42:54 | ControlFlowNode for Attribute() | This file extraction depends on a $@. | zipfile_module.py:89:19:89:24 | ControlFlowNode for bar_id | potentially untrusted source | -| zipfile_module.py:45:14:45:39 | ControlFlowNode for Attribute() | zipfile_module.py:89:19:89:24 | ControlFlowNode for bar_id | zipfile_module.py:45:14:45:39 | ControlFlowNode for Attribute() | This file extraction depends on a $@. | zipfile_module.py:89:19:89:24 | ControlFlowNode for bar_id | potentially untrusted source | -| zipfile_module.py:53:5:53:35 | ControlFlowNode for Attribute() | zipfile_module.py:89:19:89:24 | ControlFlowNode for bar_id | zipfile_module.py:53:5:53:35 | ControlFlowNode for Attribute() | This file extraction depends on a $@. | zipfile_module.py:89:19:89:24 | ControlFlowNode for bar_id | potentially untrusted source | -| zipfile_module.py:62:44:62:61 | ControlFlowNode for Attribute() | zipfile_module.py:89:19:89:24 | ControlFlowNode for bar_id | zipfile_module.py:62:44:62:61 | ControlFlowNode for Attribute() | This file extraction depends on a $@. | zipfile_module.py:89:19:89:24 | ControlFlowNode for bar_id | potentially untrusted source | -| zipfile_module.py:100:14:100:29 | ControlFlowNode for Attribute() | zipfile_module.py:99:26:99:34 | ControlFlowNode for Attribute | zipfile_module.py:100:14:100:29 | ControlFlowNode for Attribute() | This file extraction depends on a $@. | zipfile_module.py:99:26:99:34 | ControlFlowNode for Attribute | potentially untrusted source | -| zipfile_module.py:108:14:108:29 | ControlFlowNode for Attribute() | zipfile_module.py:106:23:106:26 | ControlFlowNode for file | zipfile_module.py:108:14:108:29 | ControlFlowNode for Attribute() | This file extraction depends on a $@. | zipfile_module.py:106:23:106:26 | ControlFlowNode for file | potentially untrusted source | -| zipfile_module.py:117:18:117:33 | ControlFlowNode for Attribute() | zipfile_module.py:116:30:116:38 | ControlFlowNode for Attribute | zipfile_module.py:117:18:117:33 | ControlFlowNode for Attribute() | This file extraction depends on a $@. | zipfile_module.py:116:30:116:38 | ControlFlowNode for Attribute | potentially untrusted source | -| zipfile_module.py:126:18:126:33 | ControlFlowNode for Attribute() | zipfile_module.py:125:30:125:38 | ControlFlowNode for Attribute | zipfile_module.py:126:18:126:33 | ControlFlowNode for Attribute() | This file extraction depends on a $@. | zipfile_module.py:125:30:125:38 | ControlFlowNode for Attribute | potentially untrusted source | +| file:///usr/lib/python3.10/tarfile.py:1863:32:1863:35 | ControlFlowNode for name | test.py:9:16:9:24 | ControlFlowNode for file_path | file:///usr/lib/python3.10/tarfile.py:1863:32:1863:35 | ControlFlowNode for name | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | +| file:///usr/lib/python3.10/tarfile.py:1923:28:1923:42 | ControlFlowNode for BoolExpr | test.py:9:16:9:24 | ControlFlowNode for file_path | file:///usr/lib/python3.10/tarfile.py:1923:28:1923:42 | ControlFlowNode for BoolExpr | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | +| file:///usr/lib/python3.10/tarfile.py:2373:24:2373:72 | ControlFlowNode for Attribute() | test.py:9:16:9:24 | ControlFlowNode for file_path | file:///usr/lib/python3.10/tarfile.py:2373:24:2373:72 | ControlFlowNode for Attribute() | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | +| file:///usr/lib/python3.10/zipfile.py:1477:14:1477:38 | ControlFlowNode for Attribute() | test.py:9:16:9:24 | ControlFlowNode for file_path | file:///usr/lib/python3.10/zipfile.py:1477:14:1477:38 | ControlFlowNode for Attribute() | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | +| file:///usr/lib/python3.10/zipfile.py:1700:14:1700:39 | ControlFlowNode for Attribute() | test.py:9:16:9:24 | ControlFlowNode for file_path | file:///usr/lib/python3.10/zipfile.py:1700:14:1700:39 | ControlFlowNode for Attribute() | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | +| test.py:10:5:10:52 | ControlFlowNode for Attribute() | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:10:5:10:52 | ControlFlowNode for Attribute() | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | +| test.py:11:5:11:48 | ControlFlowNode for Attribute() | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:11:5:11:48 | ControlFlowNode for Attribute() | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | +| test.py:14:14:14:29 | ControlFlowNode for Attribute() | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:14:14:14:29 | ControlFlowNode for Attribute() | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | +| test.py:21:5:21:60 | ControlFlowNode for Attribute() | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:21:5:21:60 | ControlFlowNode for Attribute() | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | +| test.py:23:5:23:52 | ControlFlowNode for Attribute() | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:23:5:23:52 | ControlFlowNode for Attribute() | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | +| test.py:24:5:24:55 | ControlFlowNode for Attribute() | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:24:5:24:55 | ControlFlowNode for Attribute() | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | +| test.py:25:5:25:57 | ControlFlowNode for Attribute() | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:25:5:25:57 | ControlFlowNode for Attribute() | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | +| test.py:26:5:26:50 | ControlFlowNode for Attribute() | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:26:5:26:50 | ControlFlowNode for Attribute() | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | +| test.py:27:5:27:60 | ControlFlowNode for Attribute() | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:27:5:27:60 | ControlFlowNode for Attribute() | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | +| test.py:34:27:34:35 | ControlFlowNode for file_path | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:34:27:34:35 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | +| test.py:38:15:38:23 | ControlFlowNode for file_path | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:38:15:38:23 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | +| test.py:39:19:39:27 | ControlFlowNode for file_path | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:39:19:39:27 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | +| test.py:43:14:43:22 | ControlFlowNode for file_path | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:43:14:43:22 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | +| test.py:44:17:44:25 | ControlFlowNode for file_path | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:44:17:44:25 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | +| test.py:48:15:48:23 | ControlFlowNode for file_path | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:48:15:48:23 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | +| test.py:49:19:49:27 | ControlFlowNode for file_path | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:49:19:49:27 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | +| test.py:53:40:53:48 | ControlFlowNode for file_path | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:53:40:53:48 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | +| test.py:55:23:55:31 | ControlFlowNode for file_path | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:55:23:55:31 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | +| test.py:56:21:56:29 | ControlFlowNode for file_path | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:56:21:56:29 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | +| test.py:58:40:58:48 | ControlFlowNode for file_path | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:58:40:58:48 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | +| test.py:59:22:59:30 | ControlFlowNode for file_path | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:59:22:59:30 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | +| test.py:60:21:60:29 | ControlFlowNode for file_path | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:60:21:60:29 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | +| test.py:61:42:61:50 | ControlFlowNode for file_path | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:61:42:61:50 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | +| test.py:62:23:62:31 | ControlFlowNode for file_path | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:62:23:62:31 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | +| test.py:63:36:63:44 | ControlFlowNode for file_path | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:63:36:63:44 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | diff --git a/python/ql/test/experimental/query-tests/Security/CWE-409/Other_compresstion_modules.py b/python/ql/test/experimental/query-tests/Security/CWE-409/Other_compresstion_modules.py deleted file mode 100644 index 0c5e51d24ca..00000000000 --- a/python/ql/test/experimental/query-tests/Security/CWE-409/Other_compresstion_modules.py +++ /dev/null @@ -1,54 +0,0 @@ -import io -from fastapi import FastAPI - -app = FastAPI() - - -def bomb(bomb_input): - import shutil - shutil.unpack_archive(bomb_input) - import lzma - lzma.open(bomb_input) - lzma.LZMAFile(bomb_input).read() - import gzip - gzip.open(bomb_input) - gzip.GzipFile(bomb_input).read() - - with gzip.open(bomb_input, 'rb') as ip: - with io.TextIOWrapper(ip, encoding='utf-8') as decoder: - content = decoder.read() - print(content) - - import bz2 - bz2.open(bomb_input) - bz2.BZ2File(bomb_input).read() - - import pandas - pandas.read_csv(filepath_or_buffer=bomb_input) - - pandas.read_table(bomb_input, compression='gzip') - pandas.read_xml(bomb_input, compression='gzip') - - pandas.read_csv(filepath_or_buffer=bomb_input, compression='gzip') - pandas.read_json(bomb_input, compression='gzip') - pandas.read_sas(bomb_input, compression='gzip') - pandas.read_stata(filepath_or_buffer=bomb_input, compression='gzip') - pandas.read_table(bomb_input, compression='gzip') - pandas.read_xml(path_or_buffer=bomb_input, compression='gzip') - - # no compression no DOS - pandas.read_table(bomb_input, compression='tar') - pandas.read_xml(bomb_input, compression='tar') - - pandas.read_csv(filepath_or_buffer=bomb_input, compression='tar') - pandas.read_json(bomb_input, compression='tar') - pandas.read_sas(bomb_input, compression='tar') - pandas.read_stata(filepath_or_buffer=bomb_input, compression='tar') - pandas.read_table(bomb_input, compression='tar') - pandas.read_xml(path_or_buffer=bomb_input, compression='tar') - - -@app.post("/bomb") -async def bombs(bomb_input): - bomb(bomb_input) - return {"message": "non-async"} diff --git a/python/ql/test/experimental/query-tests/Security/CWE-409/tarfile_module.py b/python/ql/test/experimental/query-tests/Security/CWE-409/tarfile_module.py deleted file mode 100644 index cecfb8ee4d3..00000000000 --- a/python/ql/test/experimental/query-tests/Security/CWE-409/tarfile_module.py +++ /dev/null @@ -1,31 +0,0 @@ -import tarfile -from fastapi import FastAPI - - -def tar_extract(tar_path): - tarfile.open(tar_path) - tarfile.open(tar_path) - tarfile.TarFile.open(tar_path).extract("somefile") - tarfile.TarFile.open(tar_path).extract("somefile") - tarfile.TarFile.xzopen(tar_path).extract("somefile") - tarfile.TarFile.gzopen(tar_path).extractall() - tarfile.TarFile.open(tar_path).extractfile("file1.txt") - tarfile.open(tar_path).extractfile("file1.txt") - # not working - tarInstance2 = tarfile.TarFile(tar_path) - tarInstance2.extractfile("file1.txt") - tarInstance2.extract("file1.txt") - tarfile.TarFile().open(tar_path) - # good - tarfile.open(tar_path, mode="w") - tarfile.TarFile.gzopen(tar_path, mode="w") - tarfile.TarFile.open(tar_path, mode="r:") - - -app = FastAPI() - - -@app.post("/zipbomb") -async def zipbomb(bar_id): - tar_extract(bar_id) - return {"message": "non-async"} diff --git a/python/ql/test/experimental/query-tests/Security/CWE-409/test.py b/python/ql/test/experimental/query-tests/Security/CWE-409/test.py new file mode 100644 index 00000000000..848c2123db8 --- /dev/null +++ b/python/ql/test/experimental/query-tests/Security/CWE-409/test.py @@ -0,0 +1,76 @@ +import tarfile +import zipfile +from fastapi import FastAPI + +app = FastAPI() + + +@app.post("/bomb") +async def bomb(file_path): + zipfile.ZipFile(file_path, "r").extract("file1") + zipfile.ZipFile(file_path, "r").extractall() + + with zipfile.ZipFile(file_path) as myzip: + with myzip.open('ZZ') as myfile: + a = myfile.readline() + + with zipfile.ZipFile(file_path) as myzip: + with myzip.open('ZZ', mode="w") as myfile: + myfile.write(b"tmpppp") + + zipfile.ZipFile(file_path).read("aFileNameInTheZipFile") + + tarfile.open(file_path).extractfile("file1.txt") + tarfile.TarFile.open(file_path).extract("somefile") + tarfile.TarFile.xzopen(file_path).extract("somefile") + tarfile.TarFile.gzopen(file_path).extractall() + tarfile.TarFile.open(file_path).extractfile("file1.txt") + + tarfile.open(file_path, mode="w") + tarfile.TarFile.gzopen(file_path, mode="w") + tarfile.TarFile.open(file_path, mode="r:") + import shutil + + shutil.unpack_archive(file_path) + + import lzma + + lzma.open(file_path) + lzma.LZMAFile(file_path).read() + + import bz2 + + bz2.open(file_path) + bz2.BZ2File(file_path).read() + + import gzip + + gzip.open(file_path) + gzip.GzipFile(file_path) + + import pandas + + pandas.read_csv(filepath_or_buffer=file_path) + + pandas.read_table(file_path, compression='gzip') + pandas.read_xml(file_path, compression='gzip') + + pandas.read_csv(filepath_or_buffer=file_path, compression='gzip') + pandas.read_json(file_path, compression='gzip') + pandas.read_sas(file_path, compression='gzip') + pandas.read_stata(filepath_or_buffer=file_path, compression='gzip') + pandas.read_table(file_path, compression='gzip') + pandas.read_xml(path_or_buffer=file_path, compression='gzip') + + # no compression no DOS + pandas.read_table(file_path, compression='tar') + pandas.read_xml(file_path, compression='tar') + + pandas.read_csv(filepath_or_buffer=file_path, compression='tar') + pandas.read_json(file_path, compression='tar') + pandas.read_sas(file_path, compression='tar') + pandas.read_stata(filepath_or_buffer=file_path, compression='tar') + pandas.read_table(file_path, compression='tar') + pandas.read_xml(path_or_buffer=file_path, compression='tar') + + return {"message": "bomb"} diff --git a/python/ql/test/experimental/query-tests/Security/CWE-409/zipfile_module.py b/python/ql/test/experimental/query-tests/Security/CWE-409/zipfile_module.py deleted file mode 100644 index ef235ba82fb..00000000000 --- a/python/ql/test/experimental/query-tests/Security/CWE-409/zipfile_module.py +++ /dev/null @@ -1,128 +0,0 @@ -import zipfile -from io import BytesIO -from urllib import request -import requests -from fastapi import FastAPI, File, UploadFile -from typing import List, Annotated - - -def zip_extract(zip_path): - # we can have PyZipFile instead of ZipFile too - zipfile.ZipFile(zip_path, "r").extract("0", "./tmp/") - zipFileObj = zipfile.ZipFile(zip_path, "r") - zipFileObj2 = zipFileObj - # zipfile.ZipFile("user_input").extract(member="file_name") Consume a lot of CPU,Storage - zipFileObj2.extract("0", "./tmp/") - # zipfile.ZipFile("user_input").extract(member=ZipInfo_object) Consume a lot of CPU,Storage - zipFileObj.extract(zipFileObj.infolist()[0], "./tmp/") - - -def zip_extractall(zip_path): - import httpx - filex = httpx.get(zip_path).read() - zipfile.ZipFile(BytesIO(filex), "r").extractall() - zipFileObj = zipfile.ZipFile(zip_path, "r") - for infolist in zipFileObj.infolist(): - Decompression_ratio = infolist.file_size / infolist.compress_size - if Decompression_ratio > 10: - return - # zipfile.ZipFile("user_input").extractall() Consume a lot of CPU,Storage - zipFileObj.extractall("./tmp/") # Sensitive - zipFileObj.close() - - -def zip_read_obj(zip_path): - # zipfile.ZipFile("user_input").open("file_name").read() Consume a lot of CPU,RAM,Storage - with zipfile.ZipFile(zip_path) as myzip: - with myzip.open('ZZ') as myfile: - a = myfile.readline() - - file = requests.get(zip_path) - zipfile.ZipFile(BytesIO(file.raw), "w").open("aa") - zipfile.ZipFile(BytesIO(file.raw), "r").open("aa") - - with zipfile.ZipFile(zip_path) as myzip: - with myzip.open('ZZ', mode="r") as myfile: - a = next(myfile) - - with zipfile.ZipFile(zip_path) as myzip: - with myzip.open('ZZ', mode="w") as myfile: - a = myfile.write(b"tmpppp") - - myzip = zipfile.PyZipFile(zip_path) - myzip.read(myzip.infolist()[0]) - - zipfile.ZipFile(BytesIO(request.urlopen(zip_path).read()) - ).read("aFileNameInTheZipFile") - - with zipfile.ZipFile(zip_path, 'w') as dst_zip: - with zipfile.ZipFile(zip_path) as src_zip: - for info in src_zip.infolist(): - if info.filename.startswith('classes'): - dst_zip.writestr(info, src_zip.read(info)) - - -def safeUnzip(zipFileName): - buffer_size = 2 ** 10 * 8 - total_size = 0 - SIZE_THRESHOLD = 2 ** 10 * 100 - with zipfile.ZipFile(zipFileName) as myzip: - for fileinfo in myzip.infolist(): - content = b'' - with myzip.open(fileinfo.filename, mode="r") as myfile: - chunk = myfile.read(buffer_size) - while chunk: - chunk = myfile.read(buffer_size) - total_size += buffer_size - if total_size > SIZE_THRESHOLD: - print("Bomb detected") - return - content += chunk - print(bytes.decode(content, 'utf-8')) - return "No Bombs!" - - -app = FastAPI() - - -@app.post("/zipbomb") -async def zipbomb(bar_id): - zip_extractall(bar_id) - zip_extract(bar_id) - zip_read_obj(bar_id) - safeUnzip(bar_id) - return {"message": "non-async"} - - -@app.post("/zipbomb2") -async def zipbomb2(file: UploadFile): - with zipfile.ZipFile(file.file) as myzip: - with myzip.open('ZZ') as myfile: - a = myfile.readline() - return {"message": "non-async"} - - -@app.post("/zipbomb2") -async def create_file(file: Annotated[bytes | None, File()] = None): - with zipfile.ZipFile(file) as myzip: - with myzip.open('ZZ') as myfile: - a = myfile.readline() - return {"message": "non-async"} - - -@app.post("/uploadMultipleFiles") -def upload(files: List[UploadFile] = File(...)): - for file in files: - with zipfile.ZipFile(file.file) as myzip: - with myzip.open('ZZ') as myfile: - a = myfile.readline() - return {"message": "non-async"} - - -@app.post("/files/") -async def create_files(files: Annotated[list[bytes], File()]): - for file in files: - with zipfile.ZipFile(file.file) as myzip: - with myzip.open('ZZ') as myfile: - a = myfile.readline() - return {"file_sizes": [len(file) for file in files]} From 6739750d2abd0b6d0f51546e668d1ecbc89c653d Mon Sep 17 00:00:00 2001 From: Maiky <76447395+maikypedia@users.noreply.github.com> Date: Thu, 23 Nov 2023 12:48:33 +0100 Subject: [PATCH 012/378] Add Unsafe Unpacking Query (CWE-022) --- .../swift/security/UnsafeUnpackExtensions.qll | 78 +++++++++++++++++++ .../swift/security/UnsafeUnpackQuery.qll | 33 ++++++++ .../Security/CWE-022/UnsafeUnpack.qhelp | 43 ++++++++++ .../Security/CWE-022/UnsafeUnpack.ql | 24 ++++++ .../Security/CWE-022/ZIPFoundationBad.swift | 28 +++++++ .../Security/CWE-022/ZipArchiveGood.swift | 25 ++++++ .../Security/CWE-022/ZipBad.swift | 28 +++++++ .../UnsafeUnpack.expected | 13 ++++ .../CWE-022-Unsafe-Unpack/UnsafeUnpack.qlref | 1 + .../CWE-022-Unsafe-Unpack/UnsafeUnpack.swift | 71 +++++++++++++++++ 10 files changed, 344 insertions(+) create mode 100644 swift/ql/lib/codeql/swift/security/UnsafeUnpackExtensions.qll create mode 100644 swift/ql/lib/codeql/swift/security/UnsafeUnpackQuery.qll create mode 100644 swift/ql/src/experimental/Security/CWE-022/UnsafeUnpack.qhelp create mode 100644 swift/ql/src/experimental/Security/CWE-022/UnsafeUnpack.ql create mode 100644 swift/ql/src/experimental/Security/CWE-022/ZIPFoundationBad.swift create mode 100644 swift/ql/src/experimental/Security/CWE-022/ZipArchiveGood.swift create mode 100644 swift/ql/src/experimental/Security/CWE-022/ZipBad.swift create mode 100644 swift/ql/test/query-tests/Security/CWE-022-Unsafe-Unpack/UnsafeUnpack.expected create mode 100644 swift/ql/test/query-tests/Security/CWE-022-Unsafe-Unpack/UnsafeUnpack.qlref create mode 100644 swift/ql/test/query-tests/Security/CWE-022-Unsafe-Unpack/UnsafeUnpack.swift diff --git a/swift/ql/lib/codeql/swift/security/UnsafeUnpackExtensions.qll b/swift/ql/lib/codeql/swift/security/UnsafeUnpackExtensions.qll new file mode 100644 index 00000000000..c102aa40a1e --- /dev/null +++ b/swift/ql/lib/codeql/swift/security/UnsafeUnpackExtensions.qll @@ -0,0 +1,78 @@ +/** + * Provides default sources, sinks and sanitizers for reasoning about + * unsafe unpack vulnerabilities, as well as extension points for + * adding your own. + */ + +import swift +import codeql.swift.dataflow.DataFlow +import codeql.swift.dataflow.ExternalFlow + +/** + * A dataflow source for unsafe unpack vulnerabilities. + */ +abstract class UnsafeUnpackSource extends DataFlow::Node { } + +/** + * A dataflow sink for unsafe unpack vulnerabilities. + */ +abstract class UnsafeUnpackSink extends DataFlow::Node { } + +/** + * A barrier for unsafe unpack vulnerabilities. + */ +abstract class UnsafeUnpackBarrier extends DataFlow::Node { } + +/** + * A unit class for adding additional flow steps. + */ +class UnsafeUnpackAdditionalFlowStep extends Unit { + /** + * Holds if the step from `node1` to `node2` should be considered a flow + * step for paths related to unsafe unpack vulnerabilities. + */ + abstract predicate step(DataFlow::Node nodeFrom, DataFlow::Node nodeTo); +} + +/** + * A sink defined in a CSV model. + */ +private class DefaultUnsafeUnpackSink extends UnsafeUnpackSink { + DefaultUnsafeUnpackSink() { sinkNode(this, "unsafe-unpack") } +} + +private class UnsafeUnpackSinks extends SinkModelCsv { + override predicate row(string row) { + row = + [ + ";Zip;true;unzipFile(_:destination:overwrite:password:progress:fileOutputHandler:);;;Argument[0];unsafe-unpack", + ";FileManager;true;unzipItem(at:to:skipCRC32:progress:pathEncoding:);;;Argument[0];unsafe-unpack", + ] + } +} + +/** + * An additional taint step for unsafe unpack vulnerabilities. + */ +private class UnsafeUnpackAdditionalDataFlowStep extends UnsafeUnpackAdditionalFlowStep { + override predicate step(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) { + exists(CallExpr initCall, CallExpr call | + // If a zip file is remotely downloaded the destination path is tainted + call.getStaticTarget().(Method).hasQualifiedName("Data", "write(to:options:)") and + call.getQualifier() = initCall and + initCall.getStaticTarget().(Initializer).getEnclosingDecl().(TypeDecl).getName() = "Data" and + nodeFrom.asExpr() = initCall and + nodeTo.asExpr() = call.getAnArgument().getExpr() + ) + } +} + +/** + * A barrier for unsafe unpack vulnerabilities. + */ +private class UnsafeUnpackDefaultBarrier extends UnsafeUnpackBarrier { + UnsafeUnpackDefaultBarrier() { + // any numeric type + this.asExpr().getType().getUnderlyingType().getABaseType*().getName() = "Numeric" + } +} diff --git a/swift/ql/lib/codeql/swift/security/UnsafeUnpackQuery.qll b/swift/ql/lib/codeql/swift/security/UnsafeUnpackQuery.qll new file mode 100644 index 00000000000..dbc0f733b52 --- /dev/null +++ b/swift/ql/lib/codeql/swift/security/UnsafeUnpackQuery.qll @@ -0,0 +1,33 @@ +/** + * Provides default sources, sinks and sanitizers for reasoning about + * unsafe unpack vulnerabilities, as well as extension points for + * adding your own. + */ + +import swift +import codeql.swift.dataflow.DataFlow +import codeql.swift.dataflow.TaintTracking +import codeql.swift.dataflow.FlowSources +import codeql.swift.security.UnsafeUnpackExtensions + +/** + * A taint configuration for tainted data that reaches a unsafe unpack sink. + */ +module UnsafeUnpackConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node node) { + node instanceof FlowSource or node instanceof RemoteFlowSource + } + + predicate isSink(DataFlow::Node node) { node instanceof UnsafeUnpackSink } + + predicate isBarrier(DataFlow::Node barrier) { barrier instanceof UnsafeUnpackBarrier } + + predicate isAdditionalFlowStep(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) { + any(UnsafeUnpackAdditionalFlowStep s).step(nodeFrom, nodeTo) + } +} + +/** + * Detect taint flow of tainted data that reaches a unsafe unpack sink. + */ +module UnsafeUnpackFlow = TaintTracking::Global; diff --git a/swift/ql/src/experimental/Security/CWE-022/UnsafeUnpack.qhelp b/swift/ql/src/experimental/Security/CWE-022/UnsafeUnpack.qhelp new file mode 100644 index 00000000000..df162180c53 --- /dev/null +++ b/swift/ql/src/experimental/Security/CWE-022/UnsafeUnpack.qhelp @@ -0,0 +1,43 @@ + + + + +

    + +Unpacking files from a malicious zip without properly validating that the destination file path +is within the destination directory, or allowing symlinks to point to files outside the extraction directory, +allows an attacker to extract files to arbitrary locations outside the extraction directory. This helps +overwrite sensitive user data and, in some cases, can lead to code execution if an +attacker overwrites an application's shared object file. +

    +
    + + +

    Consider using a safer module, such as: ZIPArchive

    +
    + + +

    +The following examples unpacks a remote zip using `Zip.unzipFile()` which is vulnerable to path traversal. +

    + + +

    +The following examples unpacks a remote zip using `fileManager.unzipItem()` which is vulnerable to symlink path traversal. +

    + + + +

    Consider using a safer module, such as: ZIPArchive

    + +
    + + +
  • +Ostorlab: +Zip Packages Exploitation. +
  • +
    +
    \ No newline at end of file diff --git a/swift/ql/src/experimental/Security/CWE-022/UnsafeUnpack.ql b/swift/ql/src/experimental/Security/CWE-022/UnsafeUnpack.ql new file mode 100644 index 00000000000..c50cc6c3b4f --- /dev/null +++ b/swift/ql/src/experimental/Security/CWE-022/UnsafeUnpack.ql @@ -0,0 +1,24 @@ +/** + * @name Arbitrary file write during a zip extraction from a user controlled source + * @description Unpacking user controlled zips without validating if destination path file + * is within the destination directory can cause files outside + * the destination directory to be overwritten. + * @kind path-problem + * @problem.severity error + * @security-severity 9.8 + * @precision high + * @id swift/unsafe-unpacking + * @tags security + * experimental + * external/cwe/cwe-022 + */ + +import swift +import codeql.swift.dataflow.DataFlow +import codeql.swift.security.UnsafeUnpackQuery +import UnsafeUnpackFlow::PathGraph + +from UnsafeUnpackFlow::PathNode sourceNode, UnsafeUnpackFlow::PathNode sinkNode +where UnsafeUnpackFlow::flowPath(sourceNode, sinkNode) +select sinkNode.getNode(), sourceNode, sinkNode, + "Unsafe unpacking from a malicious zip retrieved from a remote location." diff --git a/swift/ql/src/experimental/Security/CWE-022/ZIPFoundationBad.swift b/swift/ql/src/experimental/Security/CWE-022/ZIPFoundationBad.swift new file mode 100644 index 00000000000..7dfd86feffd --- /dev/null +++ b/swift/ql/src/experimental/Security/CWE-022/ZIPFoundationBad.swift @@ -0,0 +1,28 @@ +import Foundation +import ZIPFoundation + + +func unzipFile(at sourcePath: String, to destinationPath: String) { + do { + let remoteURL = URL(string: "https://example.com/")! + + let source = URL(fileURLWithPath: sourcePath) + let destination = URL(fileURLWithPath: destinationPath) + + // Malicious zip is downloaded + try Data(contentsOf: remoteURL).write(to: source) + + let fileManager = FileManager() + // Malicious zip is unpacked + try fileManager.unzipItem(at:source, to: destination) + } catch { + } +} + +func main() { + let sourcePath = "/sourcePath" + let destinationPath = "/destinationPath" + unzipFile(at: sourcePath, to: destinationPath) +} + +main() \ No newline at end of file diff --git a/swift/ql/src/experimental/Security/CWE-022/ZipArchiveGood.swift b/swift/ql/src/experimental/Security/CWE-022/ZipArchiveGood.swift new file mode 100644 index 00000000000..e30f17c1692 --- /dev/null +++ b/swift/ql/src/experimental/Security/CWE-022/ZipArchiveGood.swift @@ -0,0 +1,25 @@ +import Foundation +import ZipArchive + +func unzipFile(at sourcePath: String, to destinationPath: String) { + do { + let remoteURL = URL(string: "https://example.com/")! + + let source = URL(fileURLWithPath: sourcePath) + + // Malicious zip is downloaded + try Data(contentsOf: remoteURL).write(to: source) + + // ZipArchive is safe + try SSZipArchive.unzipFile(atPath: sourcePath, toDestination: destinationPath, delegate: self) + } catch { + } +} + +func main() { + let sourcePath = "/sourcePath" + let destinationPath = "/destinationPath" + unzipFile(at: sourcePath, to: destinationPath) +} + +main() \ No newline at end of file diff --git a/swift/ql/src/experimental/Security/CWE-022/ZipBad.swift b/swift/ql/src/experimental/Security/CWE-022/ZipBad.swift new file mode 100644 index 00000000000..4a90e6b3ea8 --- /dev/null +++ b/swift/ql/src/experimental/Security/CWE-022/ZipBad.swift @@ -0,0 +1,28 @@ +import Foundation +import Zip + + +func unzipFile(at sourcePath: String, to destinationPath: String) { + do { + let remoteURL = URL(string: "https://example.com/")! + + let source = URL(fileURLWithPath: sourcePath) + let destination = URL(fileURLWithPath: destinationPath) + + // Malicious zip is downloaded + try Data(contentsOf: remoteURL).write(to: source) + + let fileManager = FileManager() + // Malicious zip is unpacked + try Zip.unzipFile(source, destination: destination, overwrite: true, password: nil) + } catch { + } +} + +func main() { + let sourcePath = "/sourcePath" + let destinationPath = "/destinationPath" + unzipFile(at: sourcePath, to: destinationPath) +} + +main() \ No newline at end of file diff --git a/swift/ql/test/query-tests/Security/CWE-022-Unsafe-Unpack/UnsafeUnpack.expected b/swift/ql/test/query-tests/Security/CWE-022-Unsafe-Unpack/UnsafeUnpack.expected new file mode 100644 index 00000000000..4e79ee8b503 --- /dev/null +++ b/swift/ql/test/query-tests/Security/CWE-022-Unsafe-Unpack/UnsafeUnpack.expected @@ -0,0 +1,13 @@ +edges +| UnsafeUnpack.swift:60:9:60:48 | call to Data.init(contentsOf:options:) | UnsafeUnpack.swift:60:60:60:60 | source | +| UnsafeUnpack.swift:60:60:60:60 | source | UnsafeUnpack.swift:62:27:62:27 | source | +| UnsafeUnpack.swift:60:60:60:60 | source | UnsafeUnpack.swift:65:39:65:39 | source | +nodes +| UnsafeUnpack.swift:60:9:60:48 | call to Data.init(contentsOf:options:) | semmle.label | call to Data.init(contentsOf:options:) | +| UnsafeUnpack.swift:60:60:60:60 | source | semmle.label | source | +| UnsafeUnpack.swift:62:27:62:27 | source | semmle.label | source | +| UnsafeUnpack.swift:65:39:65:39 | source | semmle.label | source | +subpaths +#select +| UnsafeUnpack.swift:62:27:62:27 | source | UnsafeUnpack.swift:60:9:60:48 | call to Data.init(contentsOf:options:) | UnsafeUnpack.swift:62:27:62:27 | source | Unsafe unpacking from a malicious zip retrieved from a remote location. | +| UnsafeUnpack.swift:65:39:65:39 | source | UnsafeUnpack.swift:60:9:60:48 | call to Data.init(contentsOf:options:) | UnsafeUnpack.swift:65:39:65:39 | source | Unsafe unpacking from a malicious zip retrieved from a remote location. | diff --git a/swift/ql/test/query-tests/Security/CWE-022-Unsafe-Unpack/UnsafeUnpack.qlref b/swift/ql/test/query-tests/Security/CWE-022-Unsafe-Unpack/UnsafeUnpack.qlref new file mode 100644 index 00000000000..1d1a5a3a84c --- /dev/null +++ b/swift/ql/test/query-tests/Security/CWE-022-Unsafe-Unpack/UnsafeUnpack.qlref @@ -0,0 +1 @@ +experimental/Security/CWE-022/UnsafeUnpack.ql \ No newline at end of file diff --git a/swift/ql/test/query-tests/Security/CWE-022-Unsafe-Unpack/UnsafeUnpack.swift b/swift/ql/test/query-tests/Security/CWE-022-Unsafe-Unpack/UnsafeUnpack.swift new file mode 100644 index 00000000000..2f599b89150 --- /dev/null +++ b/swift/ql/test/query-tests/Security/CWE-022-Unsafe-Unpack/UnsafeUnpack.swift @@ -0,0 +1,71 @@ + +// --- stubs --- +struct URL +{ + init?(string: String) {} + init(fileURLWithPath: String) {} +} + +class Zip { + class func unzipFile(_ zipFilePath: URL, destination: URL, overwrite: Bool, password: String?, progress: ((_ progress: Double) -> ())? = nil, fileOutputHandler: ((_ unzippedFile: URL) -> Void)? = nil) throws {} +} + + +class NSObject { +} + +class Progress : NSObject { + +} + +class FileManager : NSObject { + func unzipItem(at sourceURL: URL, to destinationURL: URL, skipCRC32: Bool = false, + progress: Progress? = nil, pathEncoding: String.Encoding? = nil) throws {} +} + +protocol DataProtocol { } +class Data : DataProtocol { + struct ReadingOptions : OptionSet { let rawValue: Int } + struct WritingOptions : OptionSet { let rawValue: Int } + + init(_ elements: S) { count = 0 } + init(contentsOf: URL, options: ReadingOptions) { count = 0 } + func write(to: URL, options: Data.WritingOptions = []) {} + + var count: Int +} + +extension String { + + struct Encoding { + var rawValue: UInt + + init(rawValue: UInt) { self.rawValue = rawValue } + + static let ascii = Encoding(rawValue: 1) + } + init(contentsOf url: URL) throws { + self.init("") + } +} + +// --- tests --- + +func testCommandInjectionQhelpExamples() { + guard let remoteURL = URL(string: "https://example.com/") else { + return + } + + let source = URL(fileURLWithPath: "/sourcePath") + let destination = URL(fileURLWithPath: "/destination") + + try Data(contentsOf: remoteURL, options: []).write(to: source) + do { + try Zip.unzipFile(source, destination: destination, overwrite: true, password: nil) // BAD + + let fileManager = FileManager() + try fileManager.unzipItem(at: source, to: destination) // BAD + } catch { + print("Error: \(error)") + } +} \ No newline at end of file From 2d0067d6183b7964770d7e48757706d2d5b71e67 Mon Sep 17 00:00:00 2001 From: amammad <77095239+amammad@users.noreply.github.com> Date: Thu, 7 Dec 2023 13:45:28 +0100 Subject: [PATCH 013/378] fix some qldocs, change Sink extenstion model, deduct some not necessarily checks :) --- .../Security/CWE-409/DecompressionBombs.ql | 58 +---- .../CWE-409/FileAndFormRemoteFlowSource.qll | 63 +++++ .../Security/CWE-409/example_good.py | 23 +- .../python/security/DecompressionBomb.qll | 218 ++++++------------ 4 files changed, 161 insertions(+), 201 deletions(-) create mode 100644 python/ql/src/experimental/Security/CWE-409/FileAndFormRemoteFlowSource.qll diff --git a/python/ql/src/experimental/Security/CWE-409/DecompressionBombs.ql b/python/ql/src/experimental/Security/CWE-409/DecompressionBombs.ql index 8cc1e45f34a..044afff97b4 100644 --- a/python/ql/src/experimental/Security/CWE-409/DecompressionBombs.ql +++ b/python/ql/src/experimental/Security/CWE-409/DecompressionBombs.ql @@ -18,6 +18,7 @@ import semmle.python.ApiGraphs import semmle.python.dataflow.new.RemoteFlowSources import semmle.python.dataflow.new.internal.DataFlowPublic import experimental.semmle.python.security.DecompressionBomb +import FileAndFormRemoteFlowSource::FileAndFormRemoteFlowSource /** * `io.TextIOWrapper(ip, encoding='utf-8')` like following: @@ -39,59 +40,12 @@ predicate isAdditionalTaintStepTextIOWrapper(DataFlow::Node nodeFrom, DataFlow:: ) } -module FileAndFormRemoteFlowSource { - class FastAPI extends RemoteFlowSource::Range { - FastAPI() { - exists(API::Node fastApiParam, Expr fastApiUploadFile | - fastApiParam = - API::moduleImport("fastapi") - .getMember("FastAPI") - .getReturn() - .getMember("post") - .getReturn() - .getParameter(0) - .getKeywordParameter(_) and - fastApiUploadFile = - API::moduleImport("fastapi") - .getMember("UploadFile") - .getASubclass*() - .getAValueReachableFromSource() - .asExpr() - | - fastApiUploadFile = - fastApiParam.asSource().asExpr().(Parameter).getAnnotation().getASubExpression*() and - // Multiple Uploaded files as list of fastapi.UploadFile - exists(For f, Attribute attr | - fastApiParam.getAValueReachableFromSource().asExpr() = f.getIter().getASubExpression*() - | - TaintTracking::localExprTaint(f.getIter(), attr.getObject()) and - attr.getName() = ["filename", "content_type", "headers", "file", "read"] and - this.asExpr() = attr - ) - or - // one Uploaded file as fastapi.UploadFile - this = - [ - fastApiParam.getMember(["filename", "content_type", "headers"]).asSource(), - fastApiParam - .getMember("file") - .getMember(["readlines", "readline", "read"]) - .getReturn() - .asSource(), fastApiParam.getMember("read").getReturn().asSource() - ] - ) - } - - override string getSourceType() { result = "fastapi HTTP FORM files" } - } -} - module BombsConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { ( source instanceof RemoteFlowSource or - source instanceof FileAndFormRemoteFlowSource::FastAPI + source instanceof FastAPI ) and not source.getLocation().getFile().inStdlib() and not source.getLocation().getFile().getRelativePath().matches("%venv%") @@ -113,11 +67,11 @@ module BombsConfig implements DataFlow::ConfigSig { } } -module Bombs = TaintTracking::Global; +module BombsFlow = TaintTracking::Global; -import Bombs::PathGraph +import BombsFlow::PathGraph -from Bombs::PathNode source, Bombs::PathNode sink -where Bombs::flowPath(source, sink) +from BombsFlow::PathNode source, BombsFlow::PathNode sink +where BombsFlow::flowPath(source, sink) select sink.getNode(), source, sink, "This uncontrolled file extraction is $@.", source.getNode(), "depends on this user controlled data" diff --git a/python/ql/src/experimental/Security/CWE-409/FileAndFormRemoteFlowSource.qll b/python/ql/src/experimental/Security/CWE-409/FileAndFormRemoteFlowSource.qll new file mode 100644 index 00000000000..ae9691d77e1 --- /dev/null +++ b/python/ql/src/experimental/Security/CWE-409/FileAndFormRemoteFlowSource.qll @@ -0,0 +1,63 @@ +import python +import semmle.python.dataflow.new.DataFlow +import semmle.python.dataflow.new.TaintTracking +import semmle.python.ApiGraphs + +/** + * Provides user-controllable Remote sources for file(s) upload and Multipart-Form + */ +module FileAndFormRemoteFlowSource { + /** + * A + */ + class FastAPI extends DataFlow::Node { + FastAPI() { + exists(API::Node fastApiParam, Expr fastApiUploadFile | + fastApiParam = + API::moduleImport("fastapi") + .getMember("FastAPI") + .getReturn() + .getMember("post") + .getReturn() + .getParameter(0) + .getKeywordParameter(_) and + fastApiUploadFile = + API::moduleImport("fastapi") + .getMember("UploadFile") + .getASubclass*() + .getAValueReachableFromSource() + .asExpr() + | + // Multiple uploaded files as list of fastapi.UploadFile + // @app.post("/") + // def upload(files: List[UploadFile] = File(...)): + // for file in files: + fastApiUploadFile = + fastApiParam.asSource().asExpr().(Parameter).getAnnotation().getASubExpression*() and + exists(For f, Attribute attr | + fastApiParam.getAValueReachableFromSource().asExpr() = f.getIter().getASubExpression*() + | + TaintTracking::localExprTaint(f.getIter(), attr.getObject()) and + attr.getName() = ["filename", "content_type", "headers", "file", "read"] and + this.asExpr() = attr + ) + or + // One uploaded file as fastapi.UploadFile + // @app.post("/zipbomb2") + // async def zipbomb2(file: UploadFile): + // print(file.filename) + this = + [ + fastApiParam.getMember(["filename", "content_type", "headers"]).asSource(), + fastApiParam + .getMember("file") + .getMember(["readlines", "readline", "read"]) + .getReturn() + .asSource(), fastApiParam.getMember("read").getReturn().asSource() + ] + ) + } + + string getSourceType() { result = "fastapi HTTP FORM files" } + } +} diff --git a/python/ql/src/experimental/Security/CWE-409/example_good.py b/python/ql/src/experimental/Security/CWE-409/example_good.py index f11c7bba097..f0dcd2efcc0 100644 --- a/python/ql/src/experimental/Security/CWE-409/example_good.py +++ b/python/ql/src/experimental/Security/CWE-409/example_good.py @@ -2,20 +2,33 @@ import zipfile def safeUnzip(zipFileName): - buffer_size = 2 ** 10 * 8 + ''' + safeUnzip reads each file inside the zipfile 1 MB by 1 MB + and during extraction or reading of these files it checks the total decompressed size + doesn't exceed the SIZE_THRESHOLD + ''' + buffer_size = 1024 * 1024 * 1 # 1 MB total_size = 0 - SIZE_THRESHOLD = 2 ** 10 * 100 + SIZE_THRESHOLD = 1024 * 1024 * 10 # 10 MB with zipfile.ZipFile(zipFileName) as myzip: for fileinfo in myzip.infolist(): - content = b'' with myzip.open(fileinfo.filename, mode="r") as myfile: + content = b'' chunk = myfile.read(buffer_size) + total_size += buffer_size + if total_size > SIZE_THRESHOLD: + print("Bomb detected") + return False # it isn't a successful extract or read + content += chunk + # reading next bytes of uncompressed data while chunk: chunk = myfile.read(buffer_size) total_size += buffer_size if total_size > SIZE_THRESHOLD: print("Bomb detected") - return + return False # it isn't a successful extract or read content += chunk + + # An example of extracting or reading each decompressed file here print(bytes.decode(content, 'utf-8')) - return "No Bombs!" + return True # it is a successful extract or read diff --git a/python/ql/src/experimental/semmle/python/security/DecompressionBomb.qll b/python/ql/src/experimental/semmle/python/security/DecompressionBomb.qll index 6659cb189b6..129e92554ef 100644 --- a/python/ql/src/experimental/semmle/python/security/DecompressionBomb.qll +++ b/python/ql/src/experimental/semmle/python/security/DecompressionBomb.qll @@ -6,13 +6,6 @@ import semmle.python.dataflow.new.RemoteFlowSources import semmle.python.dataflow.new.internal.DataFlowPublic module DecompressionBomb { - /** - * The Sinks of uncontrolled data decompression, use this class in your queries - */ - class Sink extends DataFlow::Node { - Sink() { this = any(Range r).sink() } - } - /** * The additional taint steps that need for creating taint tracking or dataflow. */ @@ -28,15 +21,7 @@ module DecompressionBomb { /** * A abstract class responsible for extending new decompression sinks */ - abstract class Range extends API::Node { - /** - * Gets the sink of responsible for decompression node - * - * it can be a path, stream of compressed data, - * or a call to function that use pipe - */ - abstract DataFlow::Node sink(); - } + abstract class Sink extends DataFlow::Node { } } module ZipFile { @@ -56,68 +41,26 @@ module ZipFile { } /** - * The Decompression Sinks of `zipfile` library - * - * ```python - * myzip = zipfile.ZipFile("zipfileName.zip") - * myzip.open('eggs.txt',"r").read() - * myzip.extractall() - * ``` + * A Call to `extractall`, `extract()`, or `extractfile()` on an open ZipFile. */ - class DecompressionSink extends DecompressionBomb::Range { - override string toString() { result = "DecompressionSink" } - - DecompressionSink() { this = zipFileClass() } - - /** - * An function call of tarfile for extracting compressed data - * - * `tarfile.open(filepath).extractall()` or `tarfile.open(filepath).extract()`or `tarfile.open(filepath).extractfile()` - * or `tarfile.Tarfile.xzopen()` or `tarfile.Tarfile.gzopen()` or `tarfile.Tarfile.bz2open()` - */ - override DataFlow::Node sink() { - ( - result = this.getReturn().getMember(["extractall", "read", "extract", "testzip"]).getACall() - or - exists(API::Node openInstance | - openInstance = this.getReturn().getMember("open") and - ( - not exists( - openInstance - .getACall() - .getParameter(1, "mode") - .getAValueReachingSink() - .asExpr() - .(StrConst) - .getText() - ) or - openInstance - .getACall() - .getParameter(1, "mode") - .getAValueReachingSink() - .asExpr() - .(StrConst) - .getText() = "r" - ) and - ( - not exists( - this.getACall() - .getParameter(1, "mode") - .getAValueReachingSink() - .asExpr() - .(StrConst) - .getText() - ) or - this.getACall() - .getParameter(1, "mode") - .getAValueReachingSink() - .asExpr() - .(StrConst) - .getText() = "r" - ) and - not zipFileDecompressionBombSanitizer(this) and - result = openInstance.getACall() - ) + class DecompressionSink extends DecompressionBomb::Sink { + DecompressionSink() { + this = + zipFileClass() + .getReturn() + .getMember(["extractall", "read", "extract", "testzip"]) + .getACall() + or + exists(API::Node zipOpen | zipOpen = zipFileClass().getReturn().getMember("open") | + // this open function must reads uncompressed data with buffer + // and checks the accumulated size at the end of each read to be called safe + not TaintTracking::localExprTaint(zipOpen + .getReturn() + .getMember("read") + .getParameter(0) + .asSink() + .asExpr(), any(Compare i).getASubExpression*()) and + this = zipOpen.getACall() ) } } @@ -157,17 +100,16 @@ module ZipFile { DecompressionAdditionalTaintStep() { this = "AdditionalTaintStep" } override predicate isAdditionalTaintStep(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) { - exists(DecompressionSink zipFileInstance | + exists(API::Node zipFileInstance | zipFileInstance = zipFileClass() | nodeFrom = [zipFileInstance.getACall().getParameter(0, "file").asSink(), zipFileInstance.getACall()] and nodeTo = [ - zipFileInstance.sink(), zipFileInstance .getACall() .getReturn() .getMember(["extractall", "read", "extract", "testzip"]) - .getACall() + .getACall(), zipFileInstance.getReturn().getMember("open").getACall() ] ) } @@ -179,20 +121,17 @@ module ZipFile { */ module TarFile { /** - * The Decompression Sinks of `tarfile` library + * A Call to `extractall`, `extract()`, or `extractfile()` on an open tarfile, + * or + * A Call to `gzopen`, `xzopen()`, or `bz2open()` on a tarfile.Tarfile. */ - class DecompressionSink extends DecompressionBomb::Range { - override string toString() { result = "DecompressionSink" } - - DecompressionSink() { this = tarfileExtractMember() } - - /** - * An function call of tarfile for extracting compressed data - * `tarfile.open(filepath).extractall()` or `tarfile.open(filepath).extract()`or `tarfile.open(filepath).extractfile()` - * or `tarfile.Tarfile.xzopen()` or `tarfile.Tarfile.gzopen()` or `tarfile.Tarfile.bz2open()` - */ - override DataFlow::Node sink() { - result = this.getReturn().getMember(["extractall", "extract", "extractfile"]).getACall() + class DecompressionSink extends DecompressionBomb::Sink { + DecompressionSink() { + this = + tarfileExtractMember() + .getReturn() + .getMember(["extractall", "extract", "extractfile"]) + .getACall() } } @@ -251,34 +190,34 @@ module Pandas { /** * The Decompression Sinks of `pandas` library */ - class DecompressionSink extends DecompressionBomb::Range { - override string toString() { result = "DecompressionSink" } - - DecompressionSink() { this = API::moduleImport("pandas") } - - override DataFlow::Node sink() { - exists(API::CallNode calltoPandasMethods | + class DecompressionSink extends DecompressionBomb::Sink { + DecompressionSink() { + exists(API::CallNode callToPandasMethods | ( - calltoPandasMethods = - this.getMember([ - "read_csv", "read_json", "read_sas", "read_stata", "read_table", "read_xml" - ]).getACall() and - result = calltoPandasMethods.getArg(0) + callToPandasMethods = + API::moduleImport("pandas") + .getMember([ + "read_csv", "read_json", "read_sas", "read_stata", "read_table", "read_xml" + ]) + .getACall() and + this = callToPandasMethods.getArg(0) or - calltoPandasMethods = - this.getMember(["read_csv", "read_sas", "read_stata", "read_table"]).getACall() and - result = calltoPandasMethods.getArgByName("filepath_or_buffer") + callToPandasMethods = + API::moduleImport("pandas") + .getMember(["read_csv", "read_sas", "read_stata", "read_table"]) + .getACall() and + this = callToPandasMethods.getArgByName("filepath_or_buffer") or - calltoPandasMethods = this.getMember("read_json").getACall() and - result = calltoPandasMethods.getArgByName("path_or_buf") + callToPandasMethods = API::moduleImport("pandas").getMember("read_json").getACall() and + this = callToPandasMethods.getArgByName("path_or_buf") or - calltoPandasMethods = this.getMember("read_xml").getACall() and - result = calltoPandasMethods.getArgByName("path_or_buffer") + callToPandasMethods = API::moduleImport("pandas").getMember("read_xml").getACall() and + this = callToPandasMethods.getArgByName("path_or_buffer") ) and ( - not exists(calltoPandasMethods.getArgByName("compression")) + not exists(callToPandasMethods.getArgByName("compression")) or - not calltoPandasMethods + not callToPandasMethods .getKeywordParameter("compression") .getAValueReachingSink() .asExpr() @@ -297,12 +236,15 @@ module Shutil { /** * The Decompression Sinks of `shutil` library */ - class DecompressionSink extends DecompressionBomb::Range { - override string toString() { result = "DecompressionSink" } - - DecompressionSink() { this = API::moduleImport("shutil").getMember("unpack_archive") } - - override DataFlow::Node sink() { result = this.getACall().getParameter(0, "filename").asSink() } + class DecompressionSink extends DecompressionBomb::Sink { + DecompressionSink() { + this = + API::moduleImport("shutil") + .getMember("unpack_archive") + .getACall() + .getParameter(0, "filename") + .asSink() + } } } @@ -322,14 +264,10 @@ module Gzip { * * only read mode is sink */ - class DecompressionSink extends DecompressionBomb::Range { - override string toString() { result = "DecompressionSink" } - - DecompressionSink() { this = gzipInstance() } - - override DataFlow::Node sink() { - exists(API::CallNode gzipCall | gzipCall = this.getACall() | - result = gzipCall.getParameter(0, "filename").asSink() and + class DecompressionSink extends DecompressionBomb::Sink { + DecompressionSink() { + exists(API::CallNode gzipCall | gzipCall = gzipInstance().getACall() | + this = gzipCall.getParameter(0, "filename").asSink() and ( not exists( gzipCall.getParameter(1, "mode").getAValueReachingSink().asExpr().(StrConst).getText() @@ -363,14 +301,10 @@ module Bz2 { * * only read mode is sink */ - class DecompressionSink extends DecompressionBomb::Range { - override string toString() { result = "DecompressionSink" } - - DecompressionSink() { this = bz2Instance() } - - override DataFlow::Node sink() { - exists(API::CallNode bz2Call | bz2Call = this.getACall() | - result = bz2Call.getParameter(0, "filename").asSink() and + class DecompressionSink extends DecompressionBomb::Sink { + DecompressionSink() { + exists(API::CallNode bz2Call | bz2Call = bz2Instance().getACall() | + this = bz2Call.getParameter(0, "filename").asSink() and ( not exists( bz2Call.getParameter(1, "mode").getAValueReachingSink().asExpr().(StrConst).getText() @@ -404,14 +338,10 @@ module Lzma { * * only read mode is sink */ - class DecompressionSink extends DecompressionBomb::Range { - override string toString() { result = "DecompressionSink" } - - DecompressionSink() { this = lzmaInstance() } - - override DataFlow::Node sink() { - exists(API::CallNode lzmaCall | lzmaCall = this.getACall() | - result = lzmaCall.getParameter(0, "filename").asSink() and + class DecompressionSink extends DecompressionBomb::Sink { + DecompressionSink() { + exists(API::CallNode lzmaCall | lzmaCall = lzmaInstance().getACall() | + this = lzmaCall.getParameter(0, "filename").asSink() and ( not exists( lzmaCall.getParameter(1, "mode").getAValueReachingSink().asExpr().(StrConst).getText() From 5795c72a9942e0a8b7666251a8bc64dad4e876b1 Mon Sep 17 00:00:00 2001 From: amammad <77095239+amammad@users.noreply.github.com> Date: Thu, 7 Dec 2023 14:04:33 +0100 Subject: [PATCH 014/378] added inline tests --- .../Security/CWE-409/DecompressionBombs.ql | 51 ------------ .../python/security/DecompressionBomb.qll | 40 ++++++++++ .../security/FileAndFormRemoteFlowSource.qll | 63 +++++++++++++++ .../Security/CWE-409/DataflowQueryTest.ql | 4 + .../query-tests/Security/CWE-409/test.py | 79 ++++++++++--------- 5 files changed, 149 insertions(+), 88 deletions(-) create mode 100644 python/ql/src/experimental/semmle/python/security/FileAndFormRemoteFlowSource.qll create mode 100644 python/ql/test/experimental/query-tests/Security/CWE-409/DataflowQueryTest.ql diff --git a/python/ql/src/experimental/Security/CWE-409/DecompressionBombs.ql b/python/ql/src/experimental/Security/CWE-409/DecompressionBombs.ql index 044afff97b4..0670f92e81c 100644 --- a/python/ql/src/experimental/Security/CWE-409/DecompressionBombs.ql +++ b/python/ql/src/experimental/Security/CWE-409/DecompressionBombs.ql @@ -18,57 +18,6 @@ import semmle.python.ApiGraphs import semmle.python.dataflow.new.RemoteFlowSources import semmle.python.dataflow.new.internal.DataFlowPublic import experimental.semmle.python.security.DecompressionBomb -import FileAndFormRemoteFlowSource::FileAndFormRemoteFlowSource - -/** - * `io.TextIOWrapper(ip, encoding='utf-8')` like following: - * ```python - * with gzip.open(bomb_input, 'rb') as ip: - * with io.TextIOWrapper(ip, encoding='utf-8') as decoder: - * content = decoder.read() - * print(content) - * ``` - * I saw this builtin method many places so I added it as a AdditionalTaintStep. - * it would be nice if it is added as a global AdditionalTaintStep - */ -predicate isAdditionalTaintStepTextIOWrapper(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) { - exists(API::CallNode textIOWrapper | - textIOWrapper = API::moduleImport("io").getMember("TextIOWrapper").getACall() - | - nodeFrom = textIOWrapper.getParameter(0, "input").asSink() and - nodeTo = textIOWrapper - ) -} - -module BombsConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node source) { - ( - source instanceof RemoteFlowSource - or - source instanceof FastAPI - ) and - not source.getLocation().getFile().inStdlib() and - not source.getLocation().getFile().getRelativePath().matches("%venv%") - } - - predicate isSink(DataFlow::Node sink) { - sink instanceof DecompressionBomb::Sink and - not sink.getLocation().getFile().inStdlib() and - not sink.getLocation().getFile().getRelativePath().matches("%venv%") - } - - predicate isAdditionalFlowStep(DataFlow::Node pred, DataFlow::Node succ) { - ( - any(DecompressionBomb::AdditionalTaintStep a).isAdditionalTaintStep(pred, succ) or - isAdditionalTaintStepTextIOWrapper(pred, succ) - ) and - not succ.getLocation().getFile().inStdlib() and - not succ.getLocation().getFile().getRelativePath().matches("%venv%") - } -} - -module BombsFlow = TaintTracking::Global; - import BombsFlow::PathGraph from BombsFlow::PathNode source, BombsFlow::PathNode sink diff --git a/python/ql/src/experimental/semmle/python/security/DecompressionBomb.qll b/python/ql/src/experimental/semmle/python/security/DecompressionBomb.qll index 129e92554ef..c1a29241273 100644 --- a/python/ql/src/experimental/semmle/python/security/DecompressionBomb.qll +++ b/python/ql/src/experimental/semmle/python/security/DecompressionBomb.qll @@ -4,6 +4,7 @@ import semmle.python.dataflow.new.TaintTracking import semmle.python.ApiGraphs import semmle.python.dataflow.new.RemoteFlowSources import semmle.python.dataflow.new.internal.DataFlowPublic +import FileAndFormRemoteFlowSource::FileAndFormRemoteFlowSource module DecompressionBomb { /** @@ -358,3 +359,42 @@ module Lzma { } } } + +/** + * `io.TextIOWrapper(ip, encoding='utf-8')` like following: + * ```python + * with gzip.open(bomb_input, 'rb') as ip: + * with io.TextIOWrapper(ip, encoding='utf-8') as decoder: + * content = decoder.read() + * print(content) + * ``` + * I saw this builtin method many places so I added it as a AdditionalTaintStep. + * it would be nice if it is added as a global AdditionalTaintStep + */ +predicate isAdditionalTaintStepTextIOWrapper(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) { + exists(API::CallNode textIOWrapper | + textIOWrapper = API::moduleImport("io").getMember("TextIOWrapper").getACall() + | + nodeFrom = textIOWrapper.getParameter(0, "input").asSink() and + nodeTo = textIOWrapper + ) +} + +module BombsConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { + source instanceof RemoteFlowSource + or + source instanceof FastAPI + } + + predicate isSink(DataFlow::Node sink) { sink instanceof DecompressionBomb::Sink } + + predicate isAdditionalFlowStep(DataFlow::Node pred, DataFlow::Node succ) { + ( + any(DecompressionBomb::AdditionalTaintStep a).isAdditionalTaintStep(pred, succ) or + isAdditionalTaintStepTextIOWrapper(pred, succ) + ) + } +} + +module BombsFlow = TaintTracking::Global; diff --git a/python/ql/src/experimental/semmle/python/security/FileAndFormRemoteFlowSource.qll b/python/ql/src/experimental/semmle/python/security/FileAndFormRemoteFlowSource.qll new file mode 100644 index 00000000000..ae9691d77e1 --- /dev/null +++ b/python/ql/src/experimental/semmle/python/security/FileAndFormRemoteFlowSource.qll @@ -0,0 +1,63 @@ +import python +import semmle.python.dataflow.new.DataFlow +import semmle.python.dataflow.new.TaintTracking +import semmle.python.ApiGraphs + +/** + * Provides user-controllable Remote sources for file(s) upload and Multipart-Form + */ +module FileAndFormRemoteFlowSource { + /** + * A + */ + class FastAPI extends DataFlow::Node { + FastAPI() { + exists(API::Node fastApiParam, Expr fastApiUploadFile | + fastApiParam = + API::moduleImport("fastapi") + .getMember("FastAPI") + .getReturn() + .getMember("post") + .getReturn() + .getParameter(0) + .getKeywordParameter(_) and + fastApiUploadFile = + API::moduleImport("fastapi") + .getMember("UploadFile") + .getASubclass*() + .getAValueReachableFromSource() + .asExpr() + | + // Multiple uploaded files as list of fastapi.UploadFile + // @app.post("/") + // def upload(files: List[UploadFile] = File(...)): + // for file in files: + fastApiUploadFile = + fastApiParam.asSource().asExpr().(Parameter).getAnnotation().getASubExpression*() and + exists(For f, Attribute attr | + fastApiParam.getAValueReachableFromSource().asExpr() = f.getIter().getASubExpression*() + | + TaintTracking::localExprTaint(f.getIter(), attr.getObject()) and + attr.getName() = ["filename", "content_type", "headers", "file", "read"] and + this.asExpr() = attr + ) + or + // One uploaded file as fastapi.UploadFile + // @app.post("/zipbomb2") + // async def zipbomb2(file: UploadFile): + // print(file.filename) + this = + [ + fastApiParam.getMember(["filename", "content_type", "headers"]).asSource(), + fastApiParam + .getMember("file") + .getMember(["readlines", "readline", "read"]) + .getReturn() + .asSource(), fastApiParam.getMember("read").getReturn().asSource() + ] + ) + } + + string getSourceType() { result = "fastapi HTTP FORM files" } + } +} diff --git a/python/ql/test/experimental/query-tests/Security/CWE-409/DataflowQueryTest.ql b/python/ql/test/experimental/query-tests/Security/CWE-409/DataflowQueryTest.ql new file mode 100644 index 00000000000..24a2c302b98 --- /dev/null +++ b/python/ql/test/experimental/query-tests/Security/CWE-409/DataflowQueryTest.ql @@ -0,0 +1,4 @@ +import python +import experimental.dataflow.TestUtil.DataflowQueryTest +import experimental.semmle.python.security.DecompressionBomb +import FromTaintTrackingConfig diff --git a/python/ql/test/experimental/query-tests/Security/CWE-409/test.py b/python/ql/test/experimental/query-tests/Security/CWE-409/test.py index 848c2123db8..9a9425fa535 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-409/test.py +++ b/python/ql/test/experimental/query-tests/Security/CWE-409/test.py @@ -7,70 +7,75 @@ app = FastAPI() @app.post("/bomb") async def bomb(file_path): - zipfile.ZipFile(file_path, "r").extract("file1") - zipfile.ZipFile(file_path, "r").extractall() + zipfile.ZipFile(file_path, "r").extract("file1") # $ result=BAD + zipfile.ZipFile(file_path, "r").extractall() # $ result=BAD with zipfile.ZipFile(file_path) as myzip: - with myzip.open('ZZ') as myfile: + with myzip.open('ZZ') as myfile: # $ result=BAD a = myfile.readline() with zipfile.ZipFile(file_path) as myzip: - with myzip.open('ZZ', mode="w") as myfile: + with myzip.open('ZZ', mode="w") as myfile: # $result=OK myfile.write(b"tmpppp") - zipfile.ZipFile(file_path).read("aFileNameInTheZipFile") + zipfile.ZipFile(file_path).read("aFileNameInTheZipFile") # $ result=BAD - tarfile.open(file_path).extractfile("file1.txt") - tarfile.TarFile.open(file_path).extract("somefile") - tarfile.TarFile.xzopen(file_path).extract("somefile") - tarfile.TarFile.gzopen(file_path).extractall() - tarfile.TarFile.open(file_path).extractfile("file1.txt") + tarfile.open(file_path).extractfile("file1.txt") # $ result=BAD + tarfile.TarFile.open(file_path).extract("somefile") # $ result=BAD + tarfile.TarFile.xzopen(file_path).extract("somefile") # $ result=BAD + tarfile.TarFile.gzopen(file_path).extractall() # $ result=BAD + tarfile.TarFile.open(file_path).extractfile("file1.txt") # $ result=BAD - tarfile.open(file_path, mode="w") - tarfile.TarFile.gzopen(file_path, mode="w") - tarfile.TarFile.open(file_path, mode="r:") + tarfile.open(file_path, mode="w") # $result=OK + tarfile.TarFile.gzopen(file_path, mode="w") # $result=OK + tarfile.TarFile.open(file_path, mode="r:") # $ result=BAD import shutil - shutil.unpack_archive(file_path) + shutil.unpack_archive(file_path) # $ result=BAD import lzma - lzma.open(file_path) - lzma.LZMAFile(file_path).read() + lzma.open(file_path) # $ result=BAD + lzma.LZMAFile(file_path).read() # $ result=BAD import bz2 - bz2.open(file_path) - bz2.BZ2File(file_path).read() + bz2.open(file_path) # $ result=BAD + bz2.BZ2File(file_path).read() # $ result=BAD import gzip - gzip.open(file_path) - gzip.GzipFile(file_path) + gzip.open(file_path) # $ result=BAD + gzip.GzipFile(file_path) # $ result=BAD import pandas - pandas.read_csv(filepath_or_buffer=file_path) + pandas.read_csv(filepath_or_buffer=file_path) # $ result=BAD - pandas.read_table(file_path, compression='gzip') - pandas.read_xml(file_path, compression='gzip') + pandas.read_table(file_path, compression='gzip') # $ result=BAD + pandas.read_xml(file_path, compression='gzip') # $ result=BAD - pandas.read_csv(filepath_or_buffer=file_path, compression='gzip') - pandas.read_json(file_path, compression='gzip') - pandas.read_sas(file_path, compression='gzip') - pandas.read_stata(filepath_or_buffer=file_path, compression='gzip') - pandas.read_table(file_path, compression='gzip') - pandas.read_xml(path_or_buffer=file_path, compression='gzip') + pandas.read_csv(filepath_or_buffer=file_path, + compression='gzip') # $ result=BAD + pandas.read_json(file_path, compression='gzip') # $ result=BAD + pandas.read_sas(file_path, compression='gzip') # $ result=BAD + pandas.read_stata(filepath_or_buffer=file_path, + compression='gzip') # $ result=BAD + pandas.read_table(file_path, compression='gzip') # $ result=BAD + pandas.read_xml(path_or_buffer=file_path, + compression='gzip') # $ result=BAD # no compression no DOS - pandas.read_table(file_path, compression='tar') - pandas.read_xml(file_path, compression='tar') + pandas.read_table(file_path, compression='tar') # $result=OK + pandas.read_xml(file_path, compression='tar') # $result=OK - pandas.read_csv(filepath_or_buffer=file_path, compression='tar') - pandas.read_json(file_path, compression='tar') - pandas.read_sas(file_path, compression='tar') - pandas.read_stata(filepath_or_buffer=file_path, compression='tar') - pandas.read_table(file_path, compression='tar') - pandas.read_xml(path_or_buffer=file_path, compression='tar') + pandas.read_csv(filepath_or_buffer=file_path, + compression='tar') # $result=OK + pandas.read_json(file_path, compression='tar') # $result=OK + pandas.read_sas(file_path, compression='tar') # $result=OK + pandas.read_stata(filepath_or_buffer=file_path, + compression='tar') # $result=OK + pandas.read_table(file_path, compression='tar') # $result=OK + pandas.read_xml(path_or_buffer=file_path, compression='tar') # $result=OK return {"message": "bomb"} From 96f8a02a7280f105bbf6ea12f7698dd43aecd716 Mon Sep 17 00:00:00 2001 From: Asger F Date: Mon, 15 Jan 2024 13:00:39 +0100 Subject: [PATCH 015/378] JS: Treat private-field methods as private --- .../ql/lib/semmle/javascript/Classes.qll | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/javascript/ql/lib/semmle/javascript/Classes.qll b/javascript/ql/lib/semmle/javascript/Classes.qll index c7ad74561bb..f5877a78371 100644 --- a/javascript/ql/lib/semmle/javascript/Classes.qll +++ b/javascript/ql/lib/semmle/javascript/Classes.qll @@ -516,16 +516,37 @@ class MemberDeclaration extends @property, Documentable { */ predicate hasPublicKeyword() { has_public_keyword(this) } + /** + * Holds if this member is considered private. + * + * This may occur in two cases: + * - it is a TypeScript member annotated with the `private` keyword, or + * - the member has a private name, such as `#foo`, referring to a private field in the class + */ + predicate isPrivate() { this.hasPrivateKeyword() or this.hasPrivateFieldName() } + /** * Holds if this is a TypeScript member annotated with the `private` keyword. */ - predicate isPrivate() { has_private_keyword(this) } + predicate hasPrivateKeyword() { has_private_keyword(this) } /** * Holds if this is a TypeScript member annotated with the `protected` keyword. */ predicate isProtected() { has_protected_keyword(this) } + /** + * Holds if the member has a private name, such as `#foo`, referring to a private field in the class. + * + * For example: + * ```js + * class Foo { + * #method() {} + * } + * ``` + */ + predicate hasPrivateFieldName() { this.getNameExpr().(Label).getName().charAt(0) = "#" } + /** * Gets the expression specifying the name of this member, * or nothing if this is a call signature. From ddbacc3d4a4d589765668f74778737766637f313 Mon Sep 17 00:00:00 2001 From: Asger F Date: Fri, 26 Jan 2024 11:11:01 +0100 Subject: [PATCH 016/378] Shared: add test case for stateful outBarrier bug --- .../library-tests/dataflow/inoutbarriers/A.java | 11 +++++++++++ .../dataflow/inoutbarriers/test.expected | 14 +++++++++----- .../library-tests/dataflow/inoutbarriers/test.ql | 5 +++++ 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/java/ql/test/library-tests/dataflow/inoutbarriers/A.java b/java/ql/test/library-tests/dataflow/inoutbarriers/A.java index 51604991371..69207701837 100644 --- a/java/ql/test/library-tests/dataflow/inoutbarriers/A.java +++ b/java/ql/test/library-tests/dataflow/inoutbarriers/A.java @@ -1,10 +1,17 @@ class A { static String fsrc = ""; + String fsink = ""; String src(String s) { return s; } void sink(String s) { } + static String flowThroughSink(String s) { + A obj = new A(); + obj.fsink = s; + return obj.fsink; + } + void foo() { String s = fsrc; sink(fsrc); @@ -13,5 +20,9 @@ class A { sink(s); sink(s); + + s = fsrc; + s = flowThroughSink(s); + sink(s); } } diff --git a/java/ql/test/library-tests/dataflow/inoutbarriers/test.expected b/java/ql/test/library-tests/dataflow/inoutbarriers/test.expected index de785df0a1d..8d5a58661ab 100644 --- a/java/ql/test/library-tests/dataflow/inoutbarriers/test.expected +++ b/java/ql/test/library-tests/dataflow/inoutbarriers/test.expected @@ -1,7 +1,11 @@ inconsistentFlow +| A.java:24:9:24:12 | fsrc | A.java:26:10:26:10 | s | spurious state-flow in configuration both | +| A.java:24:9:24:12 | fsrc | A.java:26:10:26:10 | s | spurious state-flow in configuration sinkbarrier | #select -| A.java:9:16:9:19 | fsrc | A.java:13:10:13:10 | s | nobarrier, sinkbarrier | -| A.java:9:16:9:19 | fsrc | A.java:15:10:15:10 | s | nobarrier | -| A.java:10:10:10:13 | fsrc | A.java:10:10:10:13 | fsrc | both, nobarrier, sinkbarrier, srcbarrier | -| A.java:12:9:12:14 | src(...) | A.java:13:10:13:10 | s | both, nobarrier, sinkbarrier, srcbarrier | -| A.java:12:9:12:14 | src(...) | A.java:15:10:15:10 | s | nobarrier, srcbarrier | +| A.java:16:16:16:19 | fsrc | A.java:20:10:20:10 | s | nobarrier, sinkbarrier | +| A.java:16:16:16:19 | fsrc | A.java:22:10:22:10 | s | nobarrier | +| A.java:17:10:17:13 | fsrc | A.java:17:10:17:13 | fsrc | both, nobarrier, sinkbarrier, srcbarrier | +| A.java:19:9:19:14 | src(...) | A.java:20:10:20:10 | s | both, nobarrier, sinkbarrier, srcbarrier | +| A.java:19:9:19:14 | src(...) | A.java:22:10:22:10 | s | nobarrier, srcbarrier | +| A.java:24:9:24:12 | fsrc | A.java:11:17:11:17 | s | both, nobarrier, sinkbarrier, srcbarrier | +| A.java:24:9:24:12 | fsrc | A.java:26:10:26:10 | s | nobarrier, srcbarrier | diff --git a/java/ql/test/library-tests/dataflow/inoutbarriers/test.ql b/java/ql/test/library-tests/dataflow/inoutbarriers/test.ql index 82d35f0483c..7972386a2dc 100644 --- a/java/ql/test/library-tests/dataflow/inoutbarriers/test.ql +++ b/java/ql/test/library-tests/dataflow/inoutbarriers/test.ql @@ -12,6 +12,11 @@ predicate sink0(Node n) { sink.getMethod().hasName("sink") and sink.getAnArgument() = n.asExpr() ) + or + exists(AssignExpr assign | + assign.getDest().(FieldAccess).getField().hasName("fsink") and + n.asExpr() = assign.getSource() + ) } module Conf1 implements ConfigSig { From d1310c74fcb33f1ad789796c2176e383d372338a Mon Sep 17 00:00:00 2001 From: Asger F Date: Thu, 25 Jan 2024 14:27:54 +0100 Subject: [PATCH 017/378] Shared: remove old stateful outBarrier check --- .../codeql/dataflow/internal/DataFlowImpl.qll | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll index 27aa1d38e6e..7a5f76715e5 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll @@ -3773,14 +3773,11 @@ module MakeImpl { } override PathNodeImpl getASuccessorImpl() { - not outBarrier(node, state) and - ( - // an intermediate step to another intermediate node - result = this.getSuccMid() - or - // a final step to a sink - result = this.getSuccMid().projectToSink() - ) + // an intermediate step to another intermediate node + result = this.getSuccMid() + or + // a final step to a sink + result = this.getSuccMid().projectToSink() } override predicate isSource() { From f15ead613023ff9ee42a3cce43f74592a6d5c1e5 Mon Sep 17 00:00:00 2001 From: Asger F Date: Thu, 25 Jan 2024 14:28:06 +0100 Subject: [PATCH 018/378] Shared: check stateful outBarrier as part of pathStep SCC --- .../codeql/dataflow/internal/DataFlowImpl.qll | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll index 7a5f76715e5..0708bf301af 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll @@ -2682,6 +2682,7 @@ module MakeImpl { ) { not isUnreachableInCall1(node2, cc) and not inBarrier(node2, state) and + not outBarrier(node1, state) and ( localFlowEntry(node1, pragma[only_bind_into](state)) and ( @@ -3757,6 +3758,9 @@ module MakeImpl { override NodeEx getNodeEx() { result = node } + pragma[inline] + final NodeEx getNodeExOutgoing() { result = node and not outBarrier(node, state) } + override FlowState getState() { result = state } CallContext getCallContext() { result = cc } @@ -3928,14 +3932,14 @@ module MakeImpl { ap instanceof AccessPathNil ) or - jumpStepEx(mid.getNodeEx(), node) and + jumpStepEx(mid.getNodeExOutgoing(), node) and state = mid.getState() and cc instanceof CallContextAny and sc instanceof SummaryCtxNone and t = mid.getType() and ap = mid.getAp() or - additionalJumpStep(mid.getNodeEx(), node) and + additionalJumpStep(mid.getNodeExOutgoing(), node) and state = mid.getState() and cc instanceof CallContextAny and sc instanceof SummaryCtxNone and @@ -3943,7 +3947,7 @@ module MakeImpl { t = node.getDataFlowType() and ap = TAccessPathNil() or - additionalJumpStateStep(mid.getNodeEx(), mid.getState(), node, state) and + additionalJumpStateStep(mid.getNodeExOutgoing(), mid.getState(), node, state) and cc instanceof CallContextAny and sc instanceof SummaryCtxNone and mid.getAp() instanceof AccessPathNil and @@ -3978,7 +3982,7 @@ module MakeImpl { ) { ap0 = mid.getAp() and c = ap0.getHead() and - Stage5::readStepCand(mid.getNodeEx(), c, node) and + Stage5::readStepCand(mid.getNodeExOutgoing(), c, node) and state = mid.getState() and cc = mid.getCallContext() } @@ -3991,7 +3995,7 @@ module MakeImpl { exists(DataFlowType contentType | t0 = mid.getType() and ap0 = mid.getAp() and - Stage5::storeStepCand(mid.getNodeEx(), _, c, node, contentType, t) and + Stage5::storeStepCand(mid.getNodeExOutgoing(), _, c, node, contentType, t) and state = mid.getState() and cc = mid.getCallContext() and compatibleTypes(t0, contentType) @@ -4009,7 +4013,8 @@ module MakeImpl { not outBarrier(retNode, state) and innercc = mid.getCallContext() and innercc instanceof CallContextNoCall and - apa = mid.getAp().getApprox() + apa = mid.getAp().getApprox() and + not outBarrier(retNode, state) ) } @@ -4130,7 +4135,8 @@ module MakeImpl { pathNode(_, ret, state, cc, sc, t, ap, _) and kind = ret.getKind() and apa = ap.getApprox() and - parameterFlowThroughAllowed(sc.getParamNode(), kind) + parameterFlowThroughAllowed(sc.getParamNode(), kind) and + not outBarrier(ret, state) ) } From ee8e9a4e66b976aa98e28464bfe3a61fb84f9e0d Mon Sep 17 00:00:00 2001 From: Asger F Date: Fri, 26 Jan 2024 11:13:44 +0100 Subject: [PATCH 019/378] Shared: update test output --- java/ql/test/library-tests/dataflow/inoutbarriers/test.expected | 2 -- 1 file changed, 2 deletions(-) diff --git a/java/ql/test/library-tests/dataflow/inoutbarriers/test.expected b/java/ql/test/library-tests/dataflow/inoutbarriers/test.expected index 8d5a58661ab..90f99161585 100644 --- a/java/ql/test/library-tests/dataflow/inoutbarriers/test.expected +++ b/java/ql/test/library-tests/dataflow/inoutbarriers/test.expected @@ -1,6 +1,4 @@ inconsistentFlow -| A.java:24:9:24:12 | fsrc | A.java:26:10:26:10 | s | spurious state-flow in configuration both | -| A.java:24:9:24:12 | fsrc | A.java:26:10:26:10 | s | spurious state-flow in configuration sinkbarrier | #select | A.java:16:16:16:19 | fsrc | A.java:20:10:20:10 | s | nobarrier, sinkbarrier | | A.java:16:16:16:19 | fsrc | A.java:22:10:22:10 | s | nobarrier | From 19cb7adb6db17a3131b7db93482abc6a0d93ceff Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Thu, 20 Apr 2023 11:42:11 +0200 Subject: [PATCH 020/378] Migrate path injection sinks to MaD Deprecate and stop using PathCreation Path creation sinks are now summaries --- .../2023-04-20-deprecated-path-creation.md | 4 + java/ql/lib/ext/java.io.model.yml | 7 +- java/ql/lib/ext/java.nio.file.model.yml | 12 +- .../code/java/security/PathCreation.qll | 26 +- .../code/java/security/TaintedPathQuery.qll | 11 +- .../src/Security/CWE/CWE-022/TaintedPath.ql | 18 +- .../Security/CWE/CWE-022/TaintedPathLocal.ql | 18 +- ...04-20-path-injection-precision-improved.md | 4 + .../Security/CWE/CWE-073/FilePathInjection.ql | 8 + .../pathcreation/PathCreation.expected | 1 + .../CWE-022/semmle/tests/TaintedPath.ql | 11 + .../CWE-022/semmle/tests/TaintedPath.qlref | 1 - .../security/CWE-022/semmle/tests/Test.java | 254 +++++++++++------- .../CWE-022/semmle/tests/mad/Test.java | 228 ---------------- 14 files changed, 216 insertions(+), 387 deletions(-) create mode 100644 java/ql/lib/change-notes/2023-04-20-deprecated-path-creation.md create mode 100644 java/ql/src/change-notes/2023-04-20-path-injection-precision-improved.md create mode 100644 java/ql/test/query-tests/security/CWE-022/semmle/tests/TaintedPath.ql delete mode 100644 java/ql/test/query-tests/security/CWE-022/semmle/tests/TaintedPath.qlref delete mode 100644 java/ql/test/query-tests/security/CWE-022/semmle/tests/mad/Test.java diff --git a/java/ql/lib/change-notes/2023-04-20-deprecated-path-creation.md b/java/ql/lib/change-notes/2023-04-20-deprecated-path-creation.md new file mode 100644 index 00000000000..c955a459ca0 --- /dev/null +++ b/java/ql/lib/change-notes/2023-04-20-deprecated-path-creation.md @@ -0,0 +1,4 @@ +--- +category: deprecated +--- +* The `PathCreation` class in `PathCreation.qll` has been deprecated. diff --git a/java/ql/lib/ext/java.io.model.yml b/java/ql/lib/ext/java.io.model.yml index 1bd9251c29d..17dbc1464dc 100644 --- a/java/ql/lib/ext/java.io.model.yml +++ b/java/ql/lib/ext/java.io.model.yml @@ -3,18 +3,17 @@ extensions: pack: codeql/java-all extensible: sinkModel data: - - ["java.io", "File", False, "File", "(File,String)", "", "Argument[1]", "path-injection", "manual"] # old PathCreation - - ["java.io", "File", False, "File", "(String)", "", "Argument[0]", "path-injection", "manual"] # old PathCreation - - ["java.io", "File", False, "File", "(String,String)", "", "Argument[0..1]", "path-injection", "manual"] # old PathCreation - - ["java.io", "File", False, "File", "(URI)", "", "Argument[0]", "path-injection", "manual"] # old PathCreation - ["java.io", "File", True, "createNewFile", "()", "", "Argument[this]", "path-injection", "ai-manual"] - ["java.io", "File", True, "createTempFile", "(String,String,File)", "", "Argument[2]", "path-injection", "ai-manual"] - ["java.io", "File", True, "renameTo", "(File)", "", "Argument[0]", "path-injection", "ai-manual"] - ["java.io", "FileInputStream", True, "FileInputStream", "(File)", "", "Argument[0]", "path-injection", "ai-manual"] + - ["java.io", "FileInputStream", True, "FileInputStream", "(FileDescriptor)", "", "Argument[0]", "path-injection", "manual"] - ["java.io", "FileInputStream", True, "FileInputStream", "(String)", "", "Argument[0]", "path-injection", "ai-manual"] - ["java.io", "FileOutputStream", False, "FileOutputStream", "", "", "Argument[0]", "path-injection", "manual"] - ["java.io", "FileOutputStream", False, "write", "", "", "Argument[0]", "file-content-store", "manual"] - ["java.io", "FileReader", True, "FileReader", "(File)", "", "Argument[0]", "path-injection", "ai-manual"] + - ["java.io", "FileReader", True, "FileReader", "(FileDescriptor)", "", "Argument[0]", "path-injection", "manual"] + - ["java.io", "FileReader", True, "FileReader", "(File,Charset)", "", "Argument[0]", "path-injection", "manual"] - ["java.io", "FileReader", True, "FileReader", "(String)", "", "Argument[0]", "path-injection", "ai-manual"] - ["java.io", "FileReader", True, "FileReader", "(String,Charset)", "", "Argument[0]", "path-injection", "manual"] - ["java.io", "FileSystem", True, "createDirectory", "(File)", "", "Argument[0]", "path-injection", "ai-manual"] diff --git a/java/ql/lib/ext/java.nio.file.model.yml b/java/ql/lib/ext/java.nio.file.model.yml index 3c77c876eee..a35c575e9cb 100644 --- a/java/ql/lib/ext/java.nio.file.model.yml +++ b/java/ql/lib/ext/java.nio.file.model.yml @@ -37,15 +37,8 @@ extensions: - ["java.nio.file", "Files", False, "write", "", "", "Argument[1]", "file-content-store", "manual"] - ["java.nio.file", "Files", False, "writeString", "", "", "Argument[0]", "path-injection", "manual"] - ["java.nio.file", "Files", False, "writeString", "", "", "Argument[1]", "file-content-store", "manual"] - - ["java.nio.file", "FileSystem", False, "getPath", "", "", "Argument[0..1]", "path-injection", "manual"] # old PathCreation - ["java.nio.file", "FileSystems", False, "newFileSystem", "(URI,Map)", "", "Argument[0]", "path-injection", "ai-manual"] - ["java.nio.file", "FileSystems", False, "newFileSystem", "(URI,Map)", "", "Argument[0]", "request-forgery", "ai-manual"] - - ["java.nio.file", "Path", False, "of", "(String,String[])", "", "Argument[0..1]", "path-injection", "manual"] # old PathCreation - - ["java.nio.file", "Path", False, "of", "(URI)", "", "Argument[0]", "path-injection", "manual"] # old PathCreation - - ["java.nio.file", "Path", False, "resolve", "(String)", "", "Argument[0]", "path-injection", "manual"] # old PathCreation - - ["java.nio.file", "Path", False, "resolveSibling", "(String)", "", "Argument[0]", "path-injection", "manual"] # old PathCreation - - ["java.nio.file", "Paths", False, "get", "(String,String[])", "", "Argument[0..1]", "path-injection", "manual"] # old PathCreation - - ["java.nio.file", "Paths", False, "get", "(URI)", "", "Argument[0]", "path-injection", "manual"] # old PathCreation - ["java.nio.file", "SecureDirectoryStream", True, "deleteDirectory", "(Path)", "", "Argument[0]", "path-injection", "ai-manual"] - ["java.nio.file", "SecureDirectoryStream", True, "deleteFile", "(Path)", "", "Argument[0]", "path-injection", "ai-manual"] - addsTo: @@ -63,7 +56,7 @@ extensions: - ["java.nio.file", "Files", True, "newDirectoryStream", "(Path,DirectoryStream$Filter)", "", "Argument[0]", "ReturnValue", "taint", "ai-manual"] - ["java.nio.file", "Files", True, "newDirectoryStream", "(Path)", "", "Argument[0]", "ReturnValue", "taint", "ai-manual"] - ["java.nio.file", "Files", True, "walk", "(Path,FileVisitOption[])", "", "Argument[0]", "ReturnValue", "taint", "ai-manual"] - - ["java.nio.file", "FileSystem", True, "getPath", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["java.nio.file", "FileSystem", True, "getPath", "(String,String[])", "", "Argument[0]", "ReturnValue", "taint", "manual"] - ["java.nio.file", "FileSystem", True, "getPath", "(String,String[])", "", "Argument[1]", "ReturnValue", "taint", "ai-manual"] - ["java.nio.file", "FileSystem", True, "getPathMatcher", "(String)", "", "Argument[0]", "ReturnValue", "taint", "ai-manual"] - ["java.nio.file", "FileSystem", True, "getRootDirectories", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] @@ -76,7 +69,8 @@ extensions: - ["java.nio.file", "Path", True, "relativize", "(Path)", "", "Argument[0]", "ReturnValue", "taint", "ai-manual"] - ["java.nio.file", "Path", True, "resolve", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] - ["java.nio.file", "Path", True, "resolve", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - - ["java.nio.file", "Path", True, "resolveSibling", "(String)", "", "Argument[0]", "ReturnValue", "taint", "ai-manual"] + - ["java.nio.file", "Path", True, "resolveSibling", "", "", "Argument[0]", "ReturnValue", "taint", "ai-manual"] + - ["java.nio.file", "Path", True, "resolveSibling", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.nio.file", "Path", True, "toAbsolutePath", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.nio.file", "Path", False, "toFile", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.nio.file", "Path", True, "toString", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] diff --git a/java/ql/lib/semmle/code/java/security/PathCreation.qll b/java/ql/lib/semmle/code/java/security/PathCreation.qll index 924d42674fb..3d40a1d4fdb 100644 --- a/java/ql/lib/semmle/code/java/security/PathCreation.qll +++ b/java/ql/lib/semmle/code/java/security/PathCreation.qll @@ -1,11 +1,13 @@ /** + * DEPRECATED. + * * Models the different ways to create paths. Either by using `java.io.File`-related APIs or `java.nio.file.Path`-related APIs. */ import java -/** Models the creation of a path. */ -abstract class PathCreation extends Expr { +/** DEPRECATED: Models the creation of a path. */ +abstract deprecated class PathCreation extends Expr { /** * Gets an input that is used in the creation of this path. * This excludes inputs of type `File` and `Path`. @@ -14,7 +16,7 @@ abstract class PathCreation extends Expr { } /** Models the `java.nio.file.Paths.get` method. */ -private class PathsGet extends PathCreation, MethodCall { +deprecated private class PathsGet extends PathCreation, MethodCall { PathsGet() { exists(Method m | m = this.getMethod() | m.getDeclaringType() instanceof TypePaths and @@ -26,7 +28,7 @@ private class PathsGet extends PathCreation, MethodCall { } /** Models the `java.nio.file.FileSystem.getPath` method. */ -private class FileSystemGetPath extends PathCreation, MethodCall { +deprecated private class FileSystemGetPath extends PathCreation, MethodCall { FileSystemGetPath() { exists(Method m | m = this.getMethod() | m.getDeclaringType() instanceof TypeFileSystem and @@ -38,7 +40,7 @@ private class FileSystemGetPath extends PathCreation, MethodCall { } /** Models the `new java.io.File(...)` constructor. */ -private class FileCreation extends PathCreation, ClassInstanceExpr { +deprecated private class FileCreation extends PathCreation, ClassInstanceExpr { FileCreation() { this.getConstructedType() instanceof TypeFile } override Expr getAnInput() { @@ -49,7 +51,7 @@ private class FileCreation extends PathCreation, ClassInstanceExpr { } /** Models the `java.nio.file.Path.resolveSibling` method. */ -private class PathResolveSiblingCreation extends PathCreation, MethodCall { +deprecated private class PathResolveSiblingCreation extends PathCreation, MethodCall { PathResolveSiblingCreation() { exists(Method m | m = this.getMethod() | m.getDeclaringType() instanceof TypePath and @@ -65,7 +67,7 @@ private class PathResolveSiblingCreation extends PathCreation, MethodCall { } /** Models the `java.nio.file.Path.resolve` method. */ -private class PathResolveCreation extends PathCreation, MethodCall { +deprecated private class PathResolveCreation extends PathCreation, MethodCall { PathResolveCreation() { exists(Method m | m = this.getMethod() | m.getDeclaringType() instanceof TypePath and @@ -81,7 +83,7 @@ private class PathResolveCreation extends PathCreation, MethodCall { } /** Models the `java.nio.file.Path.of` method. */ -private class PathOfCreation extends PathCreation, MethodCall { +deprecated private class PathOfCreation extends PathCreation, MethodCall { PathOfCreation() { exists(Method m | m = this.getMethod() | m.getDeclaringType() instanceof TypePath and @@ -93,7 +95,7 @@ private class PathOfCreation extends PathCreation, MethodCall { } /** Models the `new java.io.FileWriter(...)` constructor. */ -private class FileWriterCreation extends PathCreation, ClassInstanceExpr { +deprecated private class FileWriterCreation extends PathCreation, ClassInstanceExpr { FileWriterCreation() { this.getConstructedType().hasQualifiedName("java.io", "FileWriter") } override Expr getAnInput() { @@ -104,7 +106,7 @@ private class FileWriterCreation extends PathCreation, ClassInstanceExpr { } /** Models the `new java.io.FileReader(...)` constructor. */ -private class FileReaderCreation extends PathCreation, ClassInstanceExpr { +deprecated private class FileReaderCreation extends PathCreation, ClassInstanceExpr { FileReaderCreation() { this.getConstructedType().hasQualifiedName("java.io", "FileReader") } override Expr getAnInput() { @@ -115,7 +117,7 @@ private class FileReaderCreation extends PathCreation, ClassInstanceExpr { } /** Models the `new java.io.FileInputStream(...)` constructor. */ -private class FileInputStreamCreation extends PathCreation, ClassInstanceExpr { +deprecated private class FileInputStreamCreation extends PathCreation, ClassInstanceExpr { FileInputStreamCreation() { this.getConstructedType().hasQualifiedName("java.io", "FileInputStream") } @@ -128,7 +130,7 @@ private class FileInputStreamCreation extends PathCreation, ClassInstanceExpr { } /** Models the `new java.io.FileOutputStream(...)` constructor. */ -private class FileOutputStreamCreation extends PathCreation, ClassInstanceExpr { +deprecated private class FileOutputStreamCreation extends PathCreation, ClassInstanceExpr { FileOutputStreamCreation() { this.getConstructedType().hasQualifiedName("java.io", "FileOutputStream") } diff --git a/java/ql/lib/semmle/code/java/security/TaintedPathQuery.qll b/java/ql/lib/semmle/code/java/security/TaintedPathQuery.qll index 85265f6b169..63bd4949699 100644 --- a/java/ql/lib/semmle/code/java/security/TaintedPathQuery.qll +++ b/java/ql/lib/semmle/code/java/security/TaintedPathQuery.qll @@ -8,6 +8,13 @@ private import semmle.code.java.dataflow.ExternalFlow import semmle.code.java.security.PathSanitizer private import semmle.code.java.security.Sanitizers +/** A sink for tainted path flow configurations. */ +abstract class TaintedPathSink extends DataFlow::Node { } + +private class DefaultTaintedPathSink extends TaintedPathSink { + DefaultTaintedPathSink() { sinkNode(this, "path-injection") } +} + /** * A unit class for adding additional taint steps. * @@ -55,7 +62,7 @@ private class TaintPreservingUriCtorParam extends Parameter { module TaintedPathConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { source instanceof ThreatModelFlowSource } - predicate isSink(DataFlow::Node sink) { sinkNode(sink, "path-injection") } + predicate isSink(DataFlow::Node sink) { sink instanceof TaintedPathSink } predicate isBarrier(DataFlow::Node sanitizer) { sanitizer instanceof SimpleTypeSanitizer or @@ -76,7 +83,7 @@ module TaintedPathFlow = TaintTracking::Global; module TaintedPathLocalConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { source instanceof LocalUserInput } - predicate isSink(DataFlow::Node sink) { sinkNode(sink, "path-injection") } + predicate isSink(DataFlow::Node sink) { sink instanceof TaintedPathSink } predicate isBarrier(DataFlow::Node sanitizer) { sanitizer instanceof SimpleTypeSanitizer or diff --git a/java/ql/src/Security/CWE/CWE-022/TaintedPath.ql b/java/ql/src/Security/CWE/CWE-022/TaintedPath.ql index 96e8e66c7cd..3963442d648 100644 --- a/java/ql/src/Security/CWE/CWE-022/TaintedPath.ql +++ b/java/ql/src/Security/CWE/CWE-022/TaintedPath.ql @@ -18,21 +18,7 @@ import semmle.code.java.security.PathCreation import semmle.code.java.security.TaintedPathQuery import TaintedPathFlow::PathGraph -/** - * Gets the data-flow node at which to report a path ending at `sink`. - * - * Previously this query flagged alerts exclusively at `PathCreation` sites, - * so to avoid perturbing existing alerts, where a `PathCreation` exists we - * continue to report there; otherwise we report directly at `sink`. - */ -DataFlow::Node getReportingNode(DataFlow::Node sink) { - TaintedPathFlow::flowTo(sink) and - if exists(PathCreation pc | pc.getAnInput() = sink.asExpr()) - then result.asExpr() = any(PathCreation pc | pc.getAnInput() = sink.asExpr()) - else result = sink -} - from TaintedPathFlow::PathNode source, TaintedPathFlow::PathNode sink where TaintedPathFlow::flowPath(source, sink) -select getReportingNode(sink.getNode()), source, sink, "This path depends on a $@.", - source.getNode(), "user-provided value" +select sink.getNode(), source, sink, "This path depends on a $@.", source.getNode(), + "user-provided value" diff --git a/java/ql/src/Security/CWE/CWE-022/TaintedPathLocal.ql b/java/ql/src/Security/CWE/CWE-022/TaintedPathLocal.ql index 8e56121883f..60dc6b54be8 100644 --- a/java/ql/src/Security/CWE/CWE-022/TaintedPathLocal.ql +++ b/java/ql/src/Security/CWE/CWE-022/TaintedPathLocal.ql @@ -18,21 +18,7 @@ import semmle.code.java.security.PathCreation import semmle.code.java.security.TaintedPathQuery import TaintedPathLocalFlow::PathGraph -/** - * Gets the data-flow node at which to report a path ending at `sink`. - * - * Previously this query flagged alerts exclusively at `PathCreation` sites, - * so to avoid perturbing existing alerts, where a `PathCreation` exists we - * continue to report there; otherwise we report directly at `sink`. - */ -DataFlow::Node getReportingNode(DataFlow::Node sink) { - TaintedPathLocalFlow::flowTo(sink) and - if exists(PathCreation pc | pc.getAnInput() = sink.asExpr()) - then result.asExpr() = any(PathCreation pc | pc.getAnInput() = sink.asExpr()) - else result = sink -} - from TaintedPathLocalFlow::PathNode source, TaintedPathLocalFlow::PathNode sink where TaintedPathLocalFlow::flowPath(source, sink) -select getReportingNode(sink.getNode()), source, sink, "This path depends on a $@.", - source.getNode(), "user-provided value" +select sink.getNode(), source, sink, "This path depends on a $@.", source.getNode(), + "user-provided value" diff --git a/java/ql/src/change-notes/2023-04-20-path-injection-precision-improved.md b/java/ql/src/change-notes/2023-04-20-path-injection-precision-improved.md new file mode 100644 index 00000000000..763cedea45d --- /dev/null +++ b/java/ql/src/change-notes/2023-04-20-path-injection-precision-improved.md @@ -0,0 +1,4 @@ +--- +category: majorAnalysis +--- +* The sinks of the queries `java/path-injection` and `java/path-injection-local` have been reworked. Path creation sinks have been converted to summaries instead, while sinks now are actual file read/write operations only. This has reduced the false positive ratio of both queries. diff --git a/java/ql/src/experimental/Security/CWE/CWE-073/FilePathInjection.ql b/java/ql/src/experimental/Security/CWE/CWE-073/FilePathInjection.ql index d0b59bf1136..7f6528a6670 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-073/FilePathInjection.ql +++ b/java/ql/src/experimental/Security/CWE/CWE-073/FilePathInjection.ql @@ -16,6 +16,10 @@ import java import semmle.code.java.dataflow.TaintTracking import semmle.code.java.dataflow.ExternalFlow import semmle.code.java.dataflow.FlowSources +<<<<<<< HEAD +======= +import semmle.code.java.security.TaintedPathQuery +>>>>>>> 9e469c9c32 (Migrate path injection sinks to MaD) import JFinalController import semmle.code.java.security.PathSanitizer private import semmle.code.java.security.Sanitizers @@ -52,7 +56,11 @@ module InjectFilePathConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { source instanceof ThreatModelFlowSource } predicate isSink(DataFlow::Node sink) { +<<<<<<< HEAD sinkNode(sink, "path-injection") and +======= + sink instanceof TaintedPathSink and +>>>>>>> 9e469c9c32 (Migrate path injection sinks to MaD) not sink instanceof NormalizedPathNode } diff --git a/java/ql/test/library-tests/pathcreation/PathCreation.expected b/java/ql/test/library-tests/pathcreation/PathCreation.expected index c0ac69c7da4..41e10fb6aaf 100644 --- a/java/ql/test/library-tests/pathcreation/PathCreation.expected +++ b/java/ql/test/library-tests/pathcreation/PathCreation.expected @@ -1,3 +1,4 @@ +WARNING: Type PathCreation has been deprecated and may be removed in future (PathCreation.ql:4,6-18) | PathCreation.java:13:18:13:32 | new File(...) | PathCreation.java:13:27:13:31 | "dir" | | PathCreation.java:14:19:14:40 | new File(...) | PathCreation.java:14:28:14:32 | "dir" | | PathCreation.java:14:19:14:40 | new File(...) | PathCreation.java:14:35:14:39 | "sub" | diff --git a/java/ql/test/query-tests/security/CWE-022/semmle/tests/TaintedPath.ql b/java/ql/test/query-tests/security/CWE-022/semmle/tests/TaintedPath.ql new file mode 100644 index 00000000000..e17123ce781 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-022/semmle/tests/TaintedPath.ql @@ -0,0 +1,11 @@ +import java +import TestUtilities.InlineFlowTest +import semmle.code.java.security.TaintedPathQuery + +class HasFlowTest extends InlineFlowTest { + override predicate hasTaintFlow(DataFlow::Node src, DataFlow::Node sink) { + TaintedPathFlow::flow(src, sink) + } + + override predicate hasValueFlow(DataFlow::Node src, DataFlow::Node sink) { none() } +} diff --git a/java/ql/test/query-tests/security/CWE-022/semmle/tests/TaintedPath.qlref b/java/ql/test/query-tests/security/CWE-022/semmle/tests/TaintedPath.qlref deleted file mode 100644 index 1677939387d..00000000000 --- a/java/ql/test/query-tests/security/CWE-022/semmle/tests/TaintedPath.qlref +++ /dev/null @@ -1 +0,0 @@ -Security/CWE/CWE-022/TaintedPath.ql \ No newline at end of file diff --git a/java/ql/test/query-tests/security/CWE-022/semmle/tests/Test.java b/java/ql/test/query-tests/security/CWE-022/semmle/tests/Test.java index 080cc263f08..872f2a01b65 100644 --- a/java/ql/test/query-tests/security/CWE-022/semmle/tests/Test.java +++ b/java/ql/test/query-tests/security/CWE-022/semmle/tests/Test.java @@ -1,112 +1,168 @@ -// Semmle test case for CWE-22: Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal') -// http://cwe.mitre.org/data/definitions/22.html -package test.cwe22.semmle.tests; - -import javax.servlet.http.*; -import javax.servlet.ServletException; - -import java.io.*; -import java.net.*; +import java.io.File; +import java.io.FileDescriptor; +import java.io.FileInputStream; +import java.io.FileReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.InetAddress; +import java.net.URL; +import java.nio.charset.Charset; +import java.nio.file.Files; import java.nio.file.Path; -import java.nio.file.Paths; -import java.nio.file.FileSystems; +import javax.xml.transform.stream.StreamResult; +import org.apache.commons.io.FileUtils; +import org.apache.tools.ant.AntClassLoader; +import org.apache.tools.ant.DirectoryScanner; +import org.apache.tools.ant.taskdefs.Copy; +import org.apache.tools.ant.taskdefs.Expand; +import org.apache.tools.ant.types.FileSet; +import org.codehaus.cargo.container.installer.ZipURLInstaller; +import org.kohsuke.stapler.framework.io.LargeText; +import org.openjdk.jmh.runner.options.ChainedOptionsBuilder; +import org.springframework.util.FileCopyUtils; -import org.apache.commons.io.output.LockableFileWriter; +public class Test { -class Test { - void doGet1(InetAddress address) - throws IOException { - String temp = address.getHostName(); - File file; - Path path; + private InetAddress address; - // BAD: construct a file path with user input - file = new File(temp); + public Object source() { + return address.getHostName(); + } - // BAD: construct a path with user input - path = Paths.get(temp); + void test() throws IOException { + // "java.lang;Module;true;getResourceAsStream;(String);;Argument[0];read-file;ai-generated" + getClass().getModule().getResourceAsStream((String) source()); // $ hasTaintFlow + // "java.lang;Class;false;getResource;(String);;Argument[0];read-file;ai-generated" + getClass().getResource((String) source()); // $ hasTaintFlow + // "java.lang;ClassLoader;true;getSystemResourceAsStream;(String);;Argument[0];read-file;ai-generated" + ClassLoader.getSystemResourceAsStream((String) source()); // $ hasTaintFlow + // "java.io;File;true;createTempFile;(String,String,File);;Argument[2];create-file;ai-generated" + File.createTempFile(";", ";", (File) source()); // $ hasTaintFlow + // "java.io;File;true;renameTo;(File);;Argument[0];create-file;ai-generated" + new File("").renameTo((File) source()); // $ hasTaintFlow + // "java.io;FileInputStream;true;FileInputStream;(File);;Argument[0];read-file;ai-generated" + new FileInputStream((File) source()); // $ hasTaintFlow + // "java.io;FileInputStream;true;FileInputStream;(FileDescriptor);;Argument[0];read-file;manual" + new FileInputStream((FileDescriptor) source()); // $ hasTaintFlow + // "java.io;FileInputStream;true;FileInputStream;(Strrirng);;Argument[0];read-file;manual" + new FileInputStream((String) source()); // $ hasTaintFlow + // "java.io;FileReader;true;FileReader;(File);;Argument[0];read-file;ai-generated" + new FileReader((File) source()); // $ hasTaintFlow + // "java.io;FileReader;true;FileReader;(FileDescriptor);;Argument[0];read-file;manual" + new FileReader((FileDescriptor) source()); // $ hasTaintFlow + // "java.io;FileReader;true;FileReader;(File,Charset);;Argument[0];read-file;manual" + new FileReader((File) source(), null); // $ hasTaintFlow + // "java.io;FileReader;true;FileReader;(String);;Argument[0];read-file;ai-generated" + new FileReader((String) source()); // $ hasTaintFlow + // "java.io;FileReader;true;FileReader;(String,Charset);;Argument[0];read-file;manual" + new FileReader((String) source(), null); // $ hasTaintFlow + // "java.nio.file;Files;false;copy;;;Argument[0];read-file;manual" + Files.copy((Path) source(), (Path) null); // $ hasTaintFlow + Files.copy((Path) source(), (OutputStream) null); // $ hasTaintFlow + Files.copy((InputStream) source(), null); // $ hasTaintFlow + // "java.nio.file;Files;false;copy;;;Argument[1];create-file;manual" + Files.copy((Path) null, (Path) source()); // $ hasTaintFlow + Files.copy((Path) null, (OutputStream) source()); // $ hasTaintFlow + Files.copy((InputStream) null, (Path) source()); // $ hasTaintFlow + // "java.nio.file;Files;false;createDirectories;;;Argument[0];create-file;manual" + Files.createDirectories((Path) source()); // $ hasTaintFlow + // "java.nio.file;Files;false;createDirectory;;;Argument[0];create-file;manual" + Files.createDirectory((Path) source()); // $ hasTaintFlow + // "java.nio.file;Files;false;createFile;;;Argument[0];create-file;manual" + Files.createFile((Path) source()); // $ hasTaintFlow + // "java.nio.file;Files;false;createLink;;;Argument[0];create-file;manual" + Files.createLink((Path) source(), null); // $ hasTaintFlow + // "java.nio.file;Files;false;createSymbolicLink;;;Argument[0];create-file;manual" + Files.createSymbolicLink((Path) source(), null); // $ hasTaintFlow + // "java.nio.file;Files;false;createTempDirectory;(Path,String,FileAttribute[]);;Argument[0];create-file;manual" + Files.createTempDirectory((Path) source(), null); // $ hasTaintFlow + // "java.nio.file;Files;false;createTempFile;(Path,String,String,FileAttribute[]);;Argument[0];create-file;manual" + Files.createTempFile((Path) source(), null, null); // $ hasTaintFlow + // "java.nio.file;Files;false;delete;(Path);;Argument[0];delete-file;ai-generated" + Files.delete((Path) source()); // $ hasTaintFlow + // "java.nio.file;Files;false;deleteIfExists;(Path);;Argument[0];delete-file;ai-generated" + Files.deleteIfExists((Path) source()); // $ hasTaintFlow + // "java.nio.file;Files;false;lines;(Path,Charset);;Argument[0];read-file;ai-generated" + Files.lines((Path) source(), null); // $ hasTaintFlow + // "java.nio.file;Files;false;move;;;Argument[1];create-file;manual" + Files.move(null, (Path) source()); // $ hasTaintFlow + // "java.nio.file;Files;false;newBufferedReader;(Path,Charset);;Argument[0];read-file;ai-generated" + Files.newBufferedReader((Path) source(), null); // $ hasTaintFlow + // "java.nio.file;Files;false;newBufferedWriter;;;Argument[0];create-file;manual" + Files.newBufferedWriter((Path) source()); // $ hasTaintFlow + Files.newBufferedWriter((Path) source(), (Charset) null); // $ hasTaintFlow + // "java.nio.file;Files;false;newOutputStream;;;Argument[0];create-file;manual" + Files.newOutputStream((Path) source()); // $ hasTaintFlow + // "java.nio.file;Files;false;write;;;Argument[0];create-file;manual" + Files.write((Path) source(), (byte[]) null); // $ hasTaintFlow + Files.write((Path) source(), (Iterable) null); // $ hasTaintFlow + Files.write((Path) source(), (Iterable) null, (Charset) null); // $ hasTaintFlow + // "java.nio.file;Files;false;writeString;;;Argument[0];create-file;manual" + Files.writeString((Path) source(), (CharSequence) null); // $ hasTaintFlow + Files.writeString((Path) source(), (CharSequence) null, (Charset) null); // $ hasTaintFlow + // "javax.xml.transform.stream;StreamResult";true;"StreamResult;(File);;Argument[0];create-file;ai-generated" + new StreamResult((File) source()); // $ hasTaintFlow + // "org.apache.commons.io;FileUtils;true;openInputStream;(File);;Argument[0];read-file;ai-generated" + FileUtils.openInputStream((File) source()); // $ hasTaintFlow + // "org.codehaus.cargo.container.installer;ZipURLInstaller;true;ZipURLInstaller;(URL,String,String);;Argument[1];create-file;ai-generated" + new ZipURLInstaller((URL) null, (String) source(), ""); // $ hasTaintFlow + // "org.codehaus.cargo.container.installer;ZipURLInstaller;true;ZipURLInstaller;(URL,String,String);;Argument[2];create-file;ai-generated" + new ZipURLInstaller((URL) null, "", (String) source()); // $ hasTaintFlow + // "org.springframework.util;FileCopyUtils;false;copy;(byte[],File);;Argument[1];create-file;manual" + FileCopyUtils.copy((byte[]) null, (File) source()); // $ hasTaintFlow + // "org.springframework.util;FileCopyUtils;false;copy;(File,File);;Argument[0];create-file;manual" + FileCopyUtils.copy((File) source(), null); // $ hasTaintFlow + // "org.springframework.util;FileCopyUtils;false;copy;(File,File);;Argument[1];create-file;manual" + FileCopyUtils.copy((File) null, (File) source()); // $ hasTaintFlow + } - // BAD: construct a path with user input - path = FileSystems.getDefault().getPath(temp); + void test(AntClassLoader acl) { + // "org.apache.tools.ant;AntClassLoader;true;addPathComponent;(File);;Argument[0];read-file;ai-generated" + acl.addPathComponent((File) source()); // $ hasTaintFlow + // "org.apache.tools.ant;AntClassLoader;true;AntClassLoader;(ClassLoader,Project,Path,boolean);;Argument[2];read-file;ai-generated" + new AntClassLoader(null, null, (org.apache.tools.ant.types.Path) source(), false); // $ hasTaintFlow + // "org.apache.tools.ant;AntClassLoader;true;AntClassLoader;(Project,Path,boolean);;Argument[1];read-file;ai-generated" + new AntClassLoader(null, (org.apache.tools.ant.types.Path) source(), false); // $ hasTaintFlow + // "org.apache.tools.ant;AntClassLoader;true;AntClassLoader;(Project,Path);;Argument[1];read-file;ai-generated" + new AntClassLoader(null, (org.apache.tools.ant.types.Path) source()); // $ hasTaintFlow + // "org.kohsuke.stapler.framework.io;LargeText;true;LargeText;(File,Charset,boolean,boolean);;Argument[0];read-file;ai-generated" + new LargeText((File) source(), null, false, false); // $ hasTaintFlow + } - // BAD: insufficient check - if (temp.startsWith("/some_safe_dir/")) { - file = new File(temp); - } - } - - void doGet2(InetAddress address) - throws IOException { - String temp = address.getHostName(); - File file; - - // GOOD: check string is safe - if(isSafe(temp)) - file = new File(temp); - } - - void doGet3(InetAddress address) - throws IOException { - String temp = address.getHostName(); - File file; - - // FALSE NEGATIVE: inadequate check - fails to account - // for '.'s - if(isSortOfSafe(temp)) - file = new File(temp); - } - - boolean isSafe(String pathSpec) { - // no file separators - if (pathSpec.contains(File.separator)) - return false; - // at most one dot - int indexOfDot = pathSpec.indexOf('.'); - if (indexOfDot != -1 && pathSpec.indexOf('.', indexOfDot + 1) != -1) - return false; - return true; - } - - boolean isSortOfSafe(String pathSpec) { - // no file separators - if (pathSpec.contains(File.separator)) - return false; - return true; - } - - public class MyServlet extends HttpServlet { - public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream())); - String filename = br.readLine(); - // BAD: construct a file path with user input - BufferedWriter bw = new BufferedWriter(new FileWriter("dir/"+filename, true)); + void doGet6(String root, InetAddress address) throws IOException { + String temp = address.getHostName(); + // GOOD: Use `contains` and `startsWith` to check if the path is safe + if (!temp.contains("..") && temp.startsWith(root + "/")) { + File file = new File(temp); } } - void doGet4(InetAddress address) - throws IOException { - String temp = address.getHostName(); - // BAD: open a file based on user input, using a MaD-documented API - new LockableFileWriter(temp); - } + void test(DirectoryScanner ds) { + // "org.apache.tools.ant;DirectoryScanner;true;setBasedir;(File);;Argument[0];read-file;ai-generated" + ds.setBasedir((File) source()); // $ hasTaintFlow + } - void doGet5(InetAddress address) - throws URISyntaxException { - String t = address.getHostName(); - // BAD: construct a file path with user input - new File(new URI(null, t, null)); - new File(new URI(t, t, null, t)); - new File(new URI(t, null, t, t)); - new File(new URI(null, null, t, null, null)); - new File(new URI(null, null, null, 0, t, null, null)); - } + void test(Copy cp) { + // "org.apache.tools.ant.taskdefs;Copy;true;addFileset;(FileSet);;Argument[0];read-file;ai-generated" + cp.addFileset((FileSet) source()); // $ hasTaintFlow + // "org.apache.tools.ant.taskdefs;Copy;true;setFile;(File);;Argument[0];read-file;ai-generated" + cp.setFile((File) source()); // $ hasTaintFlow + // "org.apache.tools.ant.taskdefs;Copy;true;setTodir;(File);;Argument[0];create-file;ai-generated" + cp.setTodir((File) source()); // $ hasTaintFlow + // "org.apache.tools.ant.taskdefs;Copy;true;setTofile;(File);;Argument[0];create-file;ai-generated" + cp.setTofile((File) source()); // $ hasTaintFlow + } - void doGet6(String root, InetAddress address) - throws IOException{ - String temp = address.getHostName(); - // GOOD: Use `contains` and `startsWith` to check if the path is safe - if (!temp.contains("..") && temp.startsWith(root + "/")) { - File file = new File(temp); - } - } + void test(Expand ex) { + // "org.apache.tools.ant.taskdefs;Expand;true;setDest;(File);;Argument[0];create-file;ai-generated" + ex.setDest((File) source()); // $ hasTaintFlow + // "org.apache.tools.ant.taskdefs;Expand;true;setSrc;(File);;Argument[0];read-file;ai-generated" + ex.setSrc((File) source()); // $ hasTaintFlow + } + + void test(ChainedOptionsBuilder cob) { + // "org.openjdk.jmh.runner.options;ChainedOptionsBuilder;true;result;(String);;Argument[0];create-file;ai-generated" + cob.result((String) source()); // $ hasTaintFlow + } } diff --git a/java/ql/test/query-tests/security/CWE-022/semmle/tests/mad/Test.java b/java/ql/test/query-tests/security/CWE-022/semmle/tests/mad/Test.java deleted file mode 100644 index 169f3535c6b..00000000000 --- a/java/ql/test/query-tests/security/CWE-022/semmle/tests/mad/Test.java +++ /dev/null @@ -1,228 +0,0 @@ -import java.io.File; -import java.io.FileInputStream; -import java.io.FileReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.net.InetAddress; -import java.net.URL; -import java.nio.charset.Charset; -import java.nio.file.Files; -import java.nio.file.Path; -import javax.activation.FileDataSource; -import javax.xml.transform.stream.StreamResult; -import org.apache.cxf.common.classloader.ClassLoaderUtils; -import org.apache.cxf.common.jaxb.JAXBUtils; -import org.apache.cxf.configuration.jsse.SSLUtils; -import org.apache.cxf.resource.ExtendedURIResolver; -import org.apache.cxf.resource.URIResolver; -import org.apache.cxf.staxutils.StaxUtils; -import org.apache.cxf.tools.corba.utils.FileOutputStreamFactory; -import org.apache.cxf.tools.corba.utils.OutputStreamFactory; -import org.apache.cxf.tools.util.FileWriterUtil; -import org.apache.cxf.tools.util.OutputStreamCreator; -import org.apache.commons.io.FileUtils; -import org.apache.tools.ant.AntClassLoader; -import org.apache.tools.ant.DirectoryScanner; -import org.apache.tools.ant.taskdefs.Copy; -import org.apache.tools.ant.taskdefs.Expand; -import org.apache.tools.ant.types.FileSet; -import org.codehaus.cargo.container.installer.ZipURLInstaller; -import org.kohsuke.stapler.framework.io.LargeText; -import org.openjdk.jmh.runner.options.ChainedOptionsBuilder; -import org.springframework.util.FileCopyUtils; - -public class Test { - - private InetAddress address; - - public Object source() { - return address.getHostName(); - } - - void test() throws IOException { - // "java.lang;Module;true;getResourceAsStream;(String);;Argument[0];read-file;ai-generated" - getClass().getModule().getResourceAsStream((String) source()); - // "java.lang;Class;false;getResource;(String);;Argument[0];read-file;ai-generated" - getClass().getResource((String) source()); - // "java.lang;ClassLoader;true;getSystemResourceAsStream;(String);;Argument[0];read-file;ai-generated" - ClassLoader.getSystemResourceAsStream((String) source()); - // "java.io;File;true;createTempFile;(String,String,File);;Argument[2];create-file;ai-generated" - File.createTempFile(";", ";", (File) source()); - // "java.io;File;true;renameTo;(File);;Argument[0];create-file;ai-generated" - new File("").renameTo((File) source()); - // "java.io;FileInputStream;true;FileInputStream;(File);;Argument[0];read-file;ai-generated" - new FileInputStream((File) source()); - // "java.io;FileReader;true;FileReader;(File);;Argument[0];read-file;ai-generated" - new FileReader((File) source()); - // "java.io;FileReader;true;FileReader;(String);;Argument[0];read-file;ai-generated" - new FileReader((String) source()); - // "java.nio.file;Files;false;copy;(Path,OutputStream);;Argument[0];read-file;manual" - Files.copy((Path) source(), (OutputStream) null); - // "java.nio.file;Files;false;copy;(Path,Path,CopyOption[]);;Argument[0];read-file;manual" - Files.copy((Path) source(), (Path) null); - // "java.nio.file;Files;false;copy;(Path,Path,CopyOption[]);;Argument[1];create-file;manual" - Files.copy((Path) null, (Path) source()); - // "java.nio.file;Files;false;copy;(InputStream,Path,CopyOption[]);;Argument[1];create-file;manual" - Files.copy((InputStream) null, (Path) source()); - // "java.nio.file;Files;false;createDirectories;;;Argument[0];create-file;manual" - Files.createDirectories((Path) source()); - // "java.nio.file;Files;false;createDirectory;;;Argument[0];create-file;manual" - Files.createDirectory((Path) source()); - // "java.nio.file;Files;false;createFile;;;Argument[0];create-file;manual" - Files.createFile((Path) source()); - // "java.nio.file;Files;false;createLink;;;Argument[0];create-file;manual" - Files.createLink((Path) source(), null); - // "java.nio.file;Files;false;createSymbolicLink;;;Argument[0];create-file;manual" - Files.createSymbolicLink((Path) source(), null); - // "java.nio.file;Files;false;createTempDirectory;(Path,String,FileAttribute[]);;Argument[0];create-file;manual" - Files.createTempDirectory((Path) source(), null); - // "java.nio.file;Files;false;createTempFile;(Path,String,String,FileAttribute[]);;Argument[0];create-file;manual" - Files.createTempFile((Path) source(), null, null); - // "java.nio.file;Files;false;delete;(Path);;Argument[0];delete-file;ai-generated" - Files.delete((Path) source()); - // "java.nio.file;Files;false;deleteIfExists;(Path);;Argument[0];delete-file;ai-generated" - Files.deleteIfExists((Path) source()); - // "java.nio.file;Files;false;lines;(Path,Charset);;Argument[0];read-file;ai-generated" - Files.lines((Path) source(), null); - // "java.nio.file;Files;false;move;;;Argument[1];create-file;manual" - Files.move(null, (Path) source()); - // "java.nio.file;Files;false;newBufferedReader;(Path,Charset);;Argument[0];read-file;ai-generated" - Files.newBufferedReader((Path) source(), null); - // "java.nio.file;Files;false;newBufferedWriter;;;Argument[0];create-file;manual" - Files.newBufferedWriter((Path) source()); - Files.newBufferedWriter((Path) source(), (Charset) null); - // "java.nio.file;Files;false;newOutputStream;;;Argument[0];create-file;manual" - Files.newOutputStream((Path) source()); - // "java.nio.file;Files;false;write;;;Argument[0];create-file;manual" - Files.write((Path) source(), (byte[]) null); - Files.write((Path) source(), (Iterable) null); - Files.write((Path) source(), (Iterable) null, (Charset) null); - // "java.nio.file;Files;false;writeString;;;Argument[0];create-file;manual" - Files.writeString((Path) source(), (CharSequence) null); - Files.writeString((Path) source(), (CharSequence) null, (Charset) null); - // "javax.xml.transform.stream;StreamResult";true;"StreamResult;(File);;Argument[0];create-file;ai-generated" - new StreamResult((File) source()); - // "org.apache.commons.io;FileUtils;true;openInputStream;(File);;Argument[0];read-file;ai-generated" - FileUtils.openInputStream((File) source()); - // "org.codehaus.cargo.container.installer;ZipURLInstaller;true;ZipURLInstaller;(URL,String,String);;Argument[1];create-file;ai-generated" - new ZipURLInstaller((URL) null, (String) source(), ""); - // "org.codehaus.cargo.container.installer;ZipURLInstaller;true;ZipURLInstaller;(URL,String,String);;Argument[2];create-file;ai-generated" - new ZipURLInstaller((URL) null, "", (String) source()); - // "org.springframework.util;FileCopyUtils;false;copy;(byte[],File);;Argument[1];create-file;manual" - FileCopyUtils.copy((byte[]) null, (File) source()); - // "org.springframework.util;FileCopyUtils;false;copy;(File,File);;Argument[0];create-file;manual" - FileCopyUtils.copy((File) source(), null); - // "org.springframework.util;FileCopyUtils;false;copy;(File,File);;Argument[1];create-file;manual" - FileCopyUtils.copy((File) null, (File) source()); - // "javax.activation;FileDataSource;true;FileDataSource;(String);;Argument[0];path-injection;manual" - new FileDataSource((String) source()); - // "javax.activation;FileDataSource;true;FileDataSource;(File);;Argument[0];path-injection;manual" - new FileDataSource((File) source()); - // "org.apache.cxf.common.classloader;ClassLoaderUtils;true;getResourceAsStream;(String,Class);;Argument[0];path-injection;manual" - ClassLoaderUtils.getResourceAsStream((String) source(), null); - // "org.apache.cxf.common.jaxb;JAXBUtils;true;createFileCodeWriter;(File);;Argument[0];path-injection;manual" - JAXBUtils.createFileCodeWriter((File) source()); - // "org.apache.cxf.common.jaxb;JAXBUtils;true;createFileCodeWriter;(File,String);;Argument[0];path-injection;manual" - JAXBUtils.createFileCodeWriter((File) source(), null); - // "org.apache.cxf.configuration.jsse:SSLUtils;true;loadFile;(String);;Argument[0];path-injection;manual" - new SSLUtils() { - public void test() { - loadFile((String) source()); - } - }; - // "org.apache.cxf.helpers;FileUtils;true;delete;(File);;Argument[0];path-injection;manual" - org.apache.cxf.helpers.FileUtils.delete((File) source()); - // "org.apache.cxf.helpers;FileUtils;true;delete;(File,boolean);;Argument[0];path-injection;manual" - org.apache.cxf.helpers.FileUtils.delete((File) source(), false); - // "org.apache.cxf.helpers;FileUtils;true;mkdir;(File);;Argument[0];path-injection;manual" - org.apache.cxf.helpers.FileUtils.mkDir((File) source()); - // "org.apache.cxf.helpers;FileUtils;true;readLines;(File);;Argument[0];path-injection;manual" - org.apache.cxf.helpers.FileUtils.readLines((File) source()); - // "org.apache.cxf.helpers;FileUtils;true;removeDir;(File);;Argument[0];path-injection;manual" - org.apache.cxf.helpers.FileUtils.removeDir((File) source()); - // "org.apache.cxf.resource;ExtendedURIResolver;true;resolve;(String,String);;Argument[1];path-injection;manual" - new ExtendedURIResolver().resolve(null, (String) source()); // $ SSRF - // "org.apache.cxf.resource;URIResolver;true;URIResolver;(String,String);;Argument[0];path-injection;manual" - new URIResolver((String) source(), null); // $ SSRF - // "org.apache.cxf.resource;URIResolver;true;URIResolver;(String,String,Class);;Argument[0];path-injection;manual" - new URIResolver((String) source(), null, null); // $ SSRF - // "org.apache.cxf.resource;URIResolver;true;resolve;(String,String,Class);;Argument[0];path-injection;manual" - new URIResolver().resolve((String) source(), null, null); // $ SSRF - // "org.apache.cxf.staxutils;StaxUtils;true;read;(File);;Argument[0];path-injection;manual" - StaxUtils.read((File) source()); // $ SSRF - // "org.apache.cxf.tools.corba.utils;FileOutputStreamFactory;true;FileOutputStreamFactory;(String);;Argument[0];path-injection;manual" - new FileOutputStreamFactory((String) source()); // $ SSRF - // "org.apache.cxf.tools.corba.utils;FileOutputStreamFactory;true;FileOutputStreamFactory;(String,FileOutputStreamFactory);;Argument[0];path-injection;manual" - new FileOutputStreamFactory((String) source(), null); // $ SSRF - // "org.apache.cxf.tools.corba.utils;OutputStreamFactory;true;createOutputStream;(String);;Argument[0];path-injection;manual" - new FileOutputStreamFactory().createOutputStream((String) source()); // $ SSRF - // "org.apache.cxf.tools.corba.utils;OutputStreamFactory;true;createOutputStream;(String,String);;Argument[0];path-injection;manual" - new FileOutputStreamFactory().createOutputStream((String) source(), null); // $ SSRF - // "org.apache.cxf.tools.corba.utils;OutputStreamFactory;true;createOutputStream;(String,String);;Argument[1];path-injection;manual" - new FileOutputStreamFactory().createOutputStream(null, (String) source()); // $ SSRF - // @formatter:off - // "org.apache.cxf.tools.util;FileWriterUtil;true;FileWriterUtil;(String,OutputStreamCreator);;Argument[0];path-injection;manual" - new FileWriterUtil((String) source(), null); // $ SSRF - // "org.apache.cxf.tools.util;FileWriterUtil;true;buildDir;(String);;Argument[0];path-injection;manual" - new FileWriterUtil().buildDir((String) source()); // $ SSRF - // "org.apache.cxf.tools.util;FileWriterUtil;true;getFileToWrite;(String,String);;Argument[0];path-injection;manual" - new FileWriterUtil().getFileToWrite((String) source(), (String) null); // $ SSRF - // "org.apache.cxf.tools.util;FileWriterUtil;true;getFileToWrite;(String,String);;Argument[1];path-injection;manual" - new FileWriterUtil().getFileToWrite((String) null, (String) source()); // $ SSRF - // "org.apache.cxf.tools.util;FileWriterUtil;true;getWriter;(File,String);;Argument[0];path-injection;manual" - new FileWriterUtil().getWriter((File) source(), (String) null); // $ SSRF - // "org.apache.cxf.tools.util;FileWriterUtil;true;getWriter;(String,String);;Argument[0];path-injection;manual" - new FileWriterUtil().getWriter((String) source(), null); // $ SSRF - // "org.apache.cxf.tools.util;FileWriterUtil;true;getWriter;(String,String);;Argument[1];path-injection;manual" - new FileWriterUtil().getWriter((String) null, (String) source()); // $ SSRF - // "org.apache.cxf.tools.util;FileWriterUtil;true;getWriter;(String,String,String);;Argument[0];path-injection;manual" - new FileWriterUtil().getWriter((String) source(), null, null); // $ SSRF - // "org.apache.cxf.tools.util;FileWriterUtil;true;getWriter;(String,String,String);;Argument[1];path-injection;manual" - new FileWriterUtil().getWriter((String) null, (String) source(), null); // $ SSRF - // "org.apache.cxf.tools.util;OutputStreamCreator;true;createOutputStream;(File);;Argument[0];path-injection;manual" - new OutputStreamCreator().createOutputStream((File) source()); // $ SSRF - // @formatter:on - } - - void test(AntClassLoader acl) { - // "org.apache.tools.ant;AntClassLoader;true;addPathComponent;(File);;Argument[0];read-file;ai-generated" - acl.addPathComponent((File) source()); - // "org.apache.tools.ant;AntClassLoader;true;AntClassLoader;(ClassLoader,Project,Path,boolean);;Argument[2];read-file;ai-generated" - new AntClassLoader(null, null, (org.apache.tools.ant.types.Path) source(), false); - // "org.apache.tools.ant;AntClassLoader;true;AntClassLoader;(Project,Path,boolean);;Argument[1];read-file;ai-generated" - new AntClassLoader(null, (org.apache.tools.ant.types.Path) source(), false); - // "org.apache.tools.ant;AntClassLoader;true;AntClassLoader;(Project,Path);;Argument[1];read-file;ai-generated" - new AntClassLoader(null, (org.apache.tools.ant.types.Path) source()); - // "org.kohsuke.stapler.framework.io;LargeText;true;LargeText;(File,Charset,boolean,boolean);;Argument[0];read-file;ai-generated" - new LargeText((File) source(), null, false, false); - } - - void test(DirectoryScanner ds) { - // "org.apache.tools.ant;DirectoryScanner;true;setBasedir;(File);;Argument[0];read-file;ai-generated" - ds.setBasedir((File) source()); - } - - void test(Copy cp) { - // "org.apache.tools.ant.taskdefs;Copy;true;addFileset;(FileSet);;Argument[0];read-file;ai-generated" - cp.addFileset((FileSet) source()); - // "org.apache.tools.ant.taskdefs;Copy;true;setFile;(File);;Argument[0];read-file;ai-generated" - cp.setFile((File) source()); - // "org.apache.tools.ant.taskdefs;Copy;true;setTodir;(File);;Argument[0];create-file;ai-generated" - cp.setTodir((File) source()); - // "org.apache.tools.ant.taskdefs;Copy;true;setTofile;(File);;Argument[0];create-file;ai-generated" - cp.setTofile((File) source()); - } - - void test(Expand ex) { - // "org.apache.tools.ant.taskdefs;Expand;true;setDest;(File);;Argument[0];create-file;ai-generated" - ex.setDest((File) source()); - // "org.apache.tools.ant.taskdefs;Expand;true;setSrc;(File);;Argument[0];read-file;ai-generated" - ex.setSrc((File) source()); - } - - void test(ChainedOptionsBuilder cob) { - // "org.openjdk.jmh.runner.options;ChainedOptionsBuilder;true;result;(String);;Argument[0];create-file;ai-generated" - cob.result((String) source()); - } -} From 1d2a51c522c1357ec94c91585be310dacd3b1bf2 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Fri, 26 Jan 2024 12:20:47 +0100 Subject: [PATCH 021/378] Rename change note --- ...mproved.md => 2024-01-26-path-injection-precision-improved.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename java/ql/src/change-notes/{2023-04-20-path-injection-precision-improved.md => 2024-01-26-path-injection-precision-improved.md} (100%) diff --git a/java/ql/src/change-notes/2023-04-20-path-injection-precision-improved.md b/java/ql/src/change-notes/2024-01-26-path-injection-precision-improved.md similarity index 100% rename from java/ql/src/change-notes/2023-04-20-path-injection-precision-improved.md rename to java/ql/src/change-notes/2024-01-26-path-injection-precision-improved.md From 2a146405ac32f2c2372764a4c379104797b1a648 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Fri, 26 Jan 2024 12:31:48 +0100 Subject: [PATCH 022/378] Adjust tests --- .../Security/CWE/CWE-073/FilePathInjection.ql | 7 - .../CWE-073/FilePathInjection.expected | 3 - .../CWE-022/semmle/tests/TaintedPath.expected | 494 ------------------ .../CWE-022/semmle/tests/TaintedPath.java | 40 +- .../CWE-022/semmle/tests/TaintedPath.ql | 9 +- .../security/CWE-022/semmle/tests/Test.java | 2 - 6 files changed, 22 insertions(+), 533 deletions(-) diff --git a/java/ql/src/experimental/Security/CWE/CWE-073/FilePathInjection.ql b/java/ql/src/experimental/Security/CWE/CWE-073/FilePathInjection.ql index 7f6528a6670..6fab554ac67 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-073/FilePathInjection.ql +++ b/java/ql/src/experimental/Security/CWE/CWE-073/FilePathInjection.ql @@ -16,10 +16,7 @@ import java import semmle.code.java.dataflow.TaintTracking import semmle.code.java.dataflow.ExternalFlow import semmle.code.java.dataflow.FlowSources -<<<<<<< HEAD -======= import semmle.code.java.security.TaintedPathQuery ->>>>>>> 9e469c9c32 (Migrate path injection sinks to MaD) import JFinalController import semmle.code.java.security.PathSanitizer private import semmle.code.java.security.Sanitizers @@ -56,11 +53,7 @@ module InjectFilePathConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { source instanceof ThreatModelFlowSource } predicate isSink(DataFlow::Node sink) { -<<<<<<< HEAD - sinkNode(sink, "path-injection") and -======= sink instanceof TaintedPathSink and ->>>>>>> 9e469c9c32 (Migrate path injection sinks to MaD) not sink instanceof NormalizedPathNode } diff --git a/java/ql/test/experimental/query-tests/security/CWE-073/FilePathInjection.expected b/java/ql/test/experimental/query-tests/security/CWE-073/FilePathInjection.expected index cd2b49f28c1..07be573dbf8 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-073/FilePathInjection.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-073/FilePathInjection.expected @@ -3,7 +3,6 @@ edges | FilePathInjection.java:64:21:64:34 | getPara(...) : String | FilePathInjection.java:72:47:72:59 | finalFilePath | | FilePathInjection.java:87:21:87:34 | getPara(...) : String | FilePathInjection.java:95:47:95:59 | finalFilePath | | FilePathInjection.java:177:50:177:58 | file : File | FilePathInjection.java:182:30:182:33 | file | -| FilePathInjection.java:205:17:205:44 | getParameter(...) : String | FilePathInjection.java:209:24:209:31 | filePath | | FilePathInjection.java:205:17:205:44 | getParameter(...) : String | FilePathInjection.java:209:24:209:31 | filePath : String | | FilePathInjection.java:209:15:209:32 | new File(...) : File | FilePathInjection.java:217:19:217:22 | file : File | | FilePathInjection.java:209:24:209:31 | filePath : String | FilePathInjection.java:209:15:209:32 | new File(...) : File | @@ -19,7 +18,6 @@ nodes | FilePathInjection.java:182:30:182:33 | file | semmle.label | file | | FilePathInjection.java:205:17:205:44 | getParameter(...) : String | semmle.label | getParameter(...) : String | | FilePathInjection.java:209:15:209:32 | new File(...) : File | semmle.label | new File(...) : File | -| FilePathInjection.java:209:24:209:31 | filePath | semmle.label | filePath | | FilePathInjection.java:209:24:209:31 | filePath : String | semmle.label | filePath : String | | FilePathInjection.java:217:19:217:22 | file : File | semmle.label | file : File | subpaths @@ -28,4 +26,3 @@ subpaths | FilePathInjection.java:72:47:72:59 | finalFilePath | FilePathInjection.java:64:21:64:34 | getPara(...) : String | FilePathInjection.java:72:47:72:59 | finalFilePath | External control of file name or path due to $@. | FilePathInjection.java:64:21:64:34 | getPara(...) | user-provided value | | FilePathInjection.java:95:47:95:59 | finalFilePath | FilePathInjection.java:87:21:87:34 | getPara(...) : String | FilePathInjection.java:95:47:95:59 | finalFilePath | External control of file name or path due to $@. | FilePathInjection.java:87:21:87:34 | getPara(...) | user-provided value | | FilePathInjection.java:182:30:182:33 | file | FilePathInjection.java:205:17:205:44 | getParameter(...) : String | FilePathInjection.java:182:30:182:33 | file | External control of file name or path due to $@. | FilePathInjection.java:205:17:205:44 | getParameter(...) | user-provided value | -| FilePathInjection.java:209:24:209:31 | filePath | FilePathInjection.java:205:17:205:44 | getParameter(...) : String | FilePathInjection.java:209:24:209:31 | filePath | External control of file name or path due to $@. | FilePathInjection.java:205:17:205:44 | getParameter(...) | user-provided value | diff --git a/java/ql/test/query-tests/security/CWE-022/semmle/tests/TaintedPath.expected b/java/ql/test/query-tests/security/CWE-022/semmle/tests/TaintedPath.expected index 0e2d90c3709..e69de29bb2d 100644 --- a/java/ql/test/query-tests/security/CWE-022/semmle/tests/TaintedPath.expected +++ b/java/ql/test/query-tests/security/CWE-022/semmle/tests/TaintedPath.expected @@ -1,494 +0,0 @@ -edges -| TaintedPath.java:12:38:12:110 | new BufferedReader(...) : BufferedReader | TaintedPath.java:13:24:13:37 | filenameReader : BufferedReader | -| TaintedPath.java:12:57:12:109 | new InputStreamReader(...) : InputStreamReader | TaintedPath.java:12:38:12:110 | new BufferedReader(...) : BufferedReader | -| TaintedPath.java:12:79:12:99 | getInputStream(...) : InputStream | TaintedPath.java:12:57:12:109 | new InputStreamReader(...) : InputStreamReader | -| TaintedPath.java:13:24:13:37 | filenameReader : BufferedReader | TaintedPath.java:13:24:13:48 | readLine(...) : String | -| TaintedPath.java:13:24:13:48 | readLine(...) : String | TaintedPath.java:15:68:15:75 | filename | -| TaintedPath.java:38:41:39:70 | new BufferedReader(...) : BufferedReader | TaintedPath.java:40:27:40:40 | filenameReader : BufferedReader | -| TaintedPath.java:39:17:39:69 | new InputStreamReader(...) : InputStreamReader | TaintedPath.java:38:41:39:70 | new BufferedReader(...) : BufferedReader | -| TaintedPath.java:39:39:39:59 | getInputStream(...) : InputStream | TaintedPath.java:39:17:39:69 | new InputStreamReader(...) : InputStreamReader | -| TaintedPath.java:40:27:40:40 | filenameReader : BufferedReader | TaintedPath.java:40:27:40:51 | readLine(...) : String | -| TaintedPath.java:40:27:40:51 | readLine(...) : String | TaintedPath.java:43:46:43:53 | filename | -| Test.java:19:18:19:38 | getHostName(...) : String | Test.java:24:20:24:23 | temp | -| Test.java:19:18:19:38 | getHostName(...) : String | Test.java:27:21:27:24 | temp | -| Test.java:19:18:19:38 | getHostName(...) : String | Test.java:30:44:30:47 | temp | -| Test.java:19:18:19:38 | getHostName(...) : String | Test.java:34:21:34:24 | temp | -| Test.java:79:33:79:99 | new BufferedReader(...) : BufferedReader | Test.java:80:31:80:32 | br : BufferedReader | -| Test.java:79:52:79:98 | new InputStreamReader(...) : InputStreamReader | Test.java:79:33:79:99 | new BufferedReader(...) : BufferedReader | -| Test.java:79:74:79:97 | getInputStream(...) : ServletInputStream | Test.java:79:52:79:98 | new InputStreamReader(...) : InputStreamReader | -| Test.java:80:31:80:32 | br : BufferedReader | Test.java:80:31:80:43 | readLine(...) : String | -| Test.java:80:31:80:43 | readLine(...) : String | Test.java:82:67:82:81 | ... + ... | -| Test.java:88:17:88:37 | getHostName(...) : String | Test.java:90:26:90:29 | temp | -| Test.java:95:14:95:34 | getHostName(...) : String | Test.java:97:26:97:26 | t : String | -| Test.java:97:26:97:26 | t : String | Test.java:97:12:97:33 | new URI(...) | -| Test.java:97:26:97:26 | t : String | Test.java:98:23:98:23 | t : String | -| Test.java:98:23:98:23 | t : String | Test.java:98:12:98:33 | new URI(...) | -| Test.java:98:23:98:23 | t : String | Test.java:99:29:99:29 | t : String | -| Test.java:99:29:99:29 | t : String | Test.java:99:12:99:33 | new URI(...) | -| Test.java:99:29:99:29 | t : String | Test.java:100:32:100:32 | t : String | -| Test.java:100:32:100:32 | t : String | Test.java:100:12:100:45 | new URI(...) | -| Test.java:100:32:100:32 | t : String | Test.java:101:41:101:41 | t : String | -| Test.java:101:41:101:41 | t : String | Test.java:101:12:101:54 | new URI(...) | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:45:61:45:68 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:47:41:47:48 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:49:56:49:63 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:51:46:51:53 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:53:38:53:45 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:55:36:55:43 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:57:31:57:38 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:59:33:59:40 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:61:27:61:34 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:63:27:63:34 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:65:40:65:47 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:67:47:67:54 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:69:40:69:47 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:71:38:71:45 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:73:33:73:40 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:75:33:75:40 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:77:41:77:48 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:79:42:79:49 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:81:37:81:44 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:83:29:83:36 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:85:37:85:44 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:87:28:87:35 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:89:33:89:40 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:91:40:91:47 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:93:40:93:47 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:94:40:94:47 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:96:38:96:45 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:98:28:98:35 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:99:28:99:35 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:100:28:100:35 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:102:34:102:41 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:103:34:103:41 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:105:33:105:40 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:107:42:107:49 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:109:50:109:57 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:111:54:111:61 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:113:50:113:57 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:115:35:115:42 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:117:48:117:55 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:119:37:119:44 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:121:35:121:42 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:123:55:123:62 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:125:47:125:54 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:127:47:127:54 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:131:35:131:42 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:135:56:135:63 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:137:56:137:63 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:141:59:141:66 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:143:59:143:66 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:145:58:145:65 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:147:34:147:41 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:149:34:149:41 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:151:44:151:51 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:153:31:153:38 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:155:46:155:53 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:157:46:157:53 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:159:67:159:74 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:161:67:161:74 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:163:73:163:80 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:166:37:166:44 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:168:48:168:55 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:170:54:170:61 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:172:69:172:76 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:174:47:174:54 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:176:49:176:56 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:178:64:178:71 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:180:49:180:56 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:182:64:182:71 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:184:61:184:68 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:190:37:190:44 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:192:74:192:81 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:194:68:194:75 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:196:68:196:75 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:198:30:198:37 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:203:30:203:37 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:208:33:208:40 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:210:27:210:34 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:212:28:212:35 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:214:29:214:36 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:219:27:219:34 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:221:26:221:33 | source(...) : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:226:29:226:36 | source(...) : String | -| mad/Test.java:45:61:45:68 | source(...) : String | mad/Test.java:45:52:45:68 | (...)... | -| mad/Test.java:47:41:47:48 | source(...) : String | mad/Test.java:47:32:47:48 | (...)... | -| mad/Test.java:49:56:49:63 | source(...) : String | mad/Test.java:49:47:49:63 | (...)... | -| mad/Test.java:51:46:51:53 | source(...) : String | mad/Test.java:51:39:51:53 | (...)... | -| mad/Test.java:53:38:53:45 | source(...) : String | mad/Test.java:53:31:53:45 | (...)... | -| mad/Test.java:55:36:55:43 | source(...) : String | mad/Test.java:55:29:55:43 | (...)... | -| mad/Test.java:57:31:57:38 | source(...) : String | mad/Test.java:57:24:57:38 | (...)... | -| mad/Test.java:59:33:59:40 | source(...) : String | mad/Test.java:59:24:59:40 | (...)... | -| mad/Test.java:61:27:61:34 | source(...) : String | mad/Test.java:61:20:61:34 | (...)... | -| mad/Test.java:63:27:63:34 | source(...) : String | mad/Test.java:63:20:63:34 | (...)... | -| mad/Test.java:65:40:65:47 | source(...) : String | mad/Test.java:65:33:65:47 | (...)... | -| mad/Test.java:67:47:67:54 | source(...) : String | mad/Test.java:67:40:67:54 | (...)... | -| mad/Test.java:69:40:69:47 | source(...) : String | mad/Test.java:69:33:69:47 | (...)... | -| mad/Test.java:71:38:71:45 | source(...) : String | mad/Test.java:71:31:71:45 | (...)... | -| mad/Test.java:73:33:73:40 | source(...) : String | mad/Test.java:73:26:73:40 | (...)... | -| mad/Test.java:75:33:75:40 | source(...) : String | mad/Test.java:75:26:75:40 | (...)... | -| mad/Test.java:77:41:77:48 | source(...) : String | mad/Test.java:77:34:77:48 | (...)... | -| mad/Test.java:79:42:79:49 | source(...) : String | mad/Test.java:79:35:79:49 | (...)... | -| mad/Test.java:81:37:81:44 | source(...) : String | mad/Test.java:81:30:81:44 | (...)... | -| mad/Test.java:83:29:83:36 | source(...) : String | mad/Test.java:83:22:83:36 | (...)... | -| mad/Test.java:85:37:85:44 | source(...) : String | mad/Test.java:85:30:85:44 | (...)... | -| mad/Test.java:87:28:87:35 | source(...) : String | mad/Test.java:87:21:87:35 | (...)... | -| mad/Test.java:89:33:89:40 | source(...) : String | mad/Test.java:89:26:89:40 | (...)... | -| mad/Test.java:91:40:91:47 | source(...) : String | mad/Test.java:91:33:91:47 | (...)... | -| mad/Test.java:93:40:93:47 | source(...) : String | mad/Test.java:93:33:93:47 | (...)... | -| mad/Test.java:94:40:94:47 | source(...) : String | mad/Test.java:94:33:94:47 | (...)... | -| mad/Test.java:96:38:96:45 | source(...) : String | mad/Test.java:96:31:96:45 | (...)... | -| mad/Test.java:98:28:98:35 | source(...) : String | mad/Test.java:98:21:98:35 | (...)... | -| mad/Test.java:99:28:99:35 | source(...) : String | mad/Test.java:99:21:99:35 | (...)... | -| mad/Test.java:100:28:100:35 | source(...) : String | mad/Test.java:100:21:100:35 | (...)... | -| mad/Test.java:102:34:102:41 | source(...) : String | mad/Test.java:102:27:102:41 | (...)... | -| mad/Test.java:103:34:103:41 | source(...) : String | mad/Test.java:103:27:103:41 | (...)... | -| mad/Test.java:105:33:105:40 | source(...) : String | mad/Test.java:105:26:105:40 | (...)... | -| mad/Test.java:107:42:107:49 | source(...) : String | mad/Test.java:107:35:107:49 | (...)... | -| mad/Test.java:109:50:109:57 | source(...) : String | mad/Test.java:109:41:109:57 | (...)... | -| mad/Test.java:111:54:111:61 | source(...) : String | mad/Test.java:111:45:111:61 | (...)... | -| mad/Test.java:113:50:113:57 | source(...) : String | mad/Test.java:113:43:113:57 | (...)... | -| mad/Test.java:115:35:115:42 | source(...) : String | mad/Test.java:115:28:115:42 | (...)... | -| mad/Test.java:117:48:117:55 | source(...) : String | mad/Test.java:117:41:117:55 | (...)... | -| mad/Test.java:119:37:119:44 | source(...) : String | mad/Test.java:119:28:119:44 | (...)... | -| mad/Test.java:121:35:121:42 | source(...) : String | mad/Test.java:121:28:121:42 | (...)... | -| mad/Test.java:123:55:123:62 | source(...) : String | mad/Test.java:123:46:123:62 | (...)... | -| mad/Test.java:125:47:125:54 | source(...) : String | mad/Test.java:125:40:125:54 | (...)... | -| mad/Test.java:127:47:127:54 | source(...) : String | mad/Test.java:127:40:127:54 | (...)... | -| mad/Test.java:131:35:131:42 | source(...) : String | mad/Test.java:131:26:131:42 | (...)... | -| mad/Test.java:135:56:135:63 | source(...) : String | mad/Test.java:135:49:135:63 | (...)... | -| mad/Test.java:137:56:137:63 | source(...) : String | mad/Test.java:137:49:137:63 | (...)... | -| mad/Test.java:141:59:141:66 | source(...) : String | mad/Test.java:141:52:141:66 | (...)... | -| mad/Test.java:143:59:143:66 | source(...) : String | mad/Test.java:143:52:143:66 | (...)... | -| mad/Test.java:145:58:145:65 | source(...) : String | mad/Test.java:145:49:145:65 | (...)... | -| mad/Test.java:147:34:147:41 | source(...) : String | mad/Test.java:147:25:147:41 | (...)... | -| mad/Test.java:149:34:149:41 | source(...) : String | mad/Test.java:149:25:149:41 | (...)... | -| mad/Test.java:151:44:151:51 | source(...) : String | mad/Test.java:151:35:151:51 | (...)... | -| mad/Test.java:153:31:153:38 | source(...) : String | mad/Test.java:153:24:153:38 | (...)... | -| mad/Test.java:155:46:155:53 | source(...) : String | mad/Test.java:155:37:155:53 | (...)... | -| mad/Test.java:157:46:157:53 | source(...) : String | mad/Test.java:157:37:157:53 | (...)... | -| mad/Test.java:159:67:159:74 | source(...) : String | mad/Test.java:159:58:159:74 | (...)... | -| mad/Test.java:161:67:161:74 | source(...) : String | mad/Test.java:161:58:161:74 | (...)... | -| mad/Test.java:163:73:163:80 | source(...) : String | mad/Test.java:163:64:163:80 | (...)... | -| mad/Test.java:166:37:166:44 | source(...) : String | mad/Test.java:166:28:166:44 | (...)... | -| mad/Test.java:168:48:168:55 | source(...) : String | mad/Test.java:168:39:168:55 | (...)... | -| mad/Test.java:170:54:170:61 | source(...) : String | mad/Test.java:170:45:170:61 | (...)... | -| mad/Test.java:172:69:172:76 | source(...) : String | mad/Test.java:172:60:172:76 | (...)... | -| mad/Test.java:174:47:174:54 | source(...) : String | mad/Test.java:174:40:174:54 | (...)... | -| mad/Test.java:176:49:176:56 | source(...) : String | mad/Test.java:176:40:176:56 | (...)... | -| mad/Test.java:178:64:178:71 | source(...) : String | mad/Test.java:178:55:178:71 | (...)... | -| mad/Test.java:180:49:180:56 | source(...) : String | mad/Test.java:180:40:180:56 | (...)... | -| mad/Test.java:182:64:182:71 | source(...) : String | mad/Test.java:182:55:182:71 | (...)... | -| mad/Test.java:184:61:184:68 | source(...) : String | mad/Test.java:184:54:184:68 | (...)... | -| mad/Test.java:190:37:190:44 | source(...) : String | mad/Test.java:190:30:190:44 | (...)... | -| mad/Test.java:192:74:192:81 | source(...) : String | mad/Test.java:192:40:192:81 | (...)... | -| mad/Test.java:194:68:194:75 | source(...) : String | mad/Test.java:194:34:194:75 | (...)... | -| mad/Test.java:196:68:196:75 | source(...) : String | mad/Test.java:196:34:196:75 | (...)... | -| mad/Test.java:198:30:198:37 | source(...) : String | mad/Test.java:198:23:198:37 | (...)... | -| mad/Test.java:203:30:203:37 | source(...) : String | mad/Test.java:203:23:203:37 | (...)... | -| mad/Test.java:208:33:208:40 | source(...) : String | mad/Test.java:208:23:208:40 | (...)... | -| mad/Test.java:210:27:210:34 | source(...) : String | mad/Test.java:210:20:210:34 | (...)... | -| mad/Test.java:212:28:212:35 | source(...) : String | mad/Test.java:212:21:212:35 | (...)... | -| mad/Test.java:214:29:214:36 | source(...) : String | mad/Test.java:214:22:214:36 | (...)... | -| mad/Test.java:219:27:219:34 | source(...) : String | mad/Test.java:219:20:219:34 | (...)... | -| mad/Test.java:221:26:221:33 | source(...) : String | mad/Test.java:221:19:221:33 | (...)... | -| mad/Test.java:226:29:226:36 | source(...) : String | mad/Test.java:226:20:226:36 | (...)... | -nodes -| TaintedPath.java:12:38:12:110 | new BufferedReader(...) : BufferedReader | semmle.label | new BufferedReader(...) : BufferedReader | -| TaintedPath.java:12:57:12:109 | new InputStreamReader(...) : InputStreamReader | semmle.label | new InputStreamReader(...) : InputStreamReader | -| TaintedPath.java:12:79:12:99 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| TaintedPath.java:13:24:13:37 | filenameReader : BufferedReader | semmle.label | filenameReader : BufferedReader | -| TaintedPath.java:13:24:13:48 | readLine(...) : String | semmle.label | readLine(...) : String | -| TaintedPath.java:15:68:15:75 | filename | semmle.label | filename | -| TaintedPath.java:38:41:39:70 | new BufferedReader(...) : BufferedReader | semmle.label | new BufferedReader(...) : BufferedReader | -| TaintedPath.java:39:17:39:69 | new InputStreamReader(...) : InputStreamReader | semmle.label | new InputStreamReader(...) : InputStreamReader | -| TaintedPath.java:39:39:39:59 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| TaintedPath.java:40:27:40:40 | filenameReader : BufferedReader | semmle.label | filenameReader : BufferedReader | -| TaintedPath.java:40:27:40:51 | readLine(...) : String | semmle.label | readLine(...) : String | -| TaintedPath.java:43:46:43:53 | filename | semmle.label | filename | -| Test.java:19:18:19:38 | getHostName(...) : String | semmle.label | getHostName(...) : String | -| Test.java:24:20:24:23 | temp | semmle.label | temp | -| Test.java:27:21:27:24 | temp | semmle.label | temp | -| Test.java:30:44:30:47 | temp | semmle.label | temp | -| Test.java:34:21:34:24 | temp | semmle.label | temp | -| Test.java:79:33:79:99 | new BufferedReader(...) : BufferedReader | semmle.label | new BufferedReader(...) : BufferedReader | -| Test.java:79:52:79:98 | new InputStreamReader(...) : InputStreamReader | semmle.label | new InputStreamReader(...) : InputStreamReader | -| Test.java:79:74:79:97 | getInputStream(...) : ServletInputStream | semmle.label | getInputStream(...) : ServletInputStream | -| Test.java:80:31:80:32 | br : BufferedReader | semmle.label | br : BufferedReader | -| Test.java:80:31:80:43 | readLine(...) : String | semmle.label | readLine(...) : String | -| Test.java:82:67:82:81 | ... + ... | semmle.label | ... + ... | -| Test.java:88:17:88:37 | getHostName(...) : String | semmle.label | getHostName(...) : String | -| Test.java:90:26:90:29 | temp | semmle.label | temp | -| Test.java:95:14:95:34 | getHostName(...) : String | semmle.label | getHostName(...) : String | -| Test.java:97:12:97:33 | new URI(...) | semmle.label | new URI(...) | -| Test.java:97:26:97:26 | t : String | semmle.label | t : String | -| Test.java:98:12:98:33 | new URI(...) | semmle.label | new URI(...) | -| Test.java:98:23:98:23 | t : String | semmle.label | t : String | -| Test.java:99:12:99:33 | new URI(...) | semmle.label | new URI(...) | -| Test.java:99:29:99:29 | t : String | semmle.label | t : String | -| Test.java:100:12:100:45 | new URI(...) | semmle.label | new URI(...) | -| Test.java:100:32:100:32 | t : String | semmle.label | t : String | -| Test.java:101:12:101:54 | new URI(...) | semmle.label | new URI(...) | -| Test.java:101:41:101:41 | t : String | semmle.label | t : String | -| mad/Test.java:40:16:40:36 | getHostName(...) : String | semmle.label | getHostName(...) : String | -| mad/Test.java:45:52:45:68 | (...)... | semmle.label | (...)... | -| mad/Test.java:45:61:45:68 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:47:32:47:48 | (...)... | semmle.label | (...)... | -| mad/Test.java:47:41:47:48 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:49:47:49:63 | (...)... | semmle.label | (...)... | -| mad/Test.java:49:56:49:63 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:51:39:51:53 | (...)... | semmle.label | (...)... | -| mad/Test.java:51:46:51:53 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:53:31:53:45 | (...)... | semmle.label | (...)... | -| mad/Test.java:53:38:53:45 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:55:29:55:43 | (...)... | semmle.label | (...)... | -| mad/Test.java:55:36:55:43 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:57:24:57:38 | (...)... | semmle.label | (...)... | -| mad/Test.java:57:31:57:38 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:59:24:59:40 | (...)... | semmle.label | (...)... | -| mad/Test.java:59:33:59:40 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:61:20:61:34 | (...)... | semmle.label | (...)... | -| mad/Test.java:61:27:61:34 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:63:20:63:34 | (...)... | semmle.label | (...)... | -| mad/Test.java:63:27:63:34 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:65:33:65:47 | (...)... | semmle.label | (...)... | -| mad/Test.java:65:40:65:47 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:67:40:67:54 | (...)... | semmle.label | (...)... | -| mad/Test.java:67:47:67:54 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:69:33:69:47 | (...)... | semmle.label | (...)... | -| mad/Test.java:69:40:69:47 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:71:31:71:45 | (...)... | semmle.label | (...)... | -| mad/Test.java:71:38:71:45 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:73:26:73:40 | (...)... | semmle.label | (...)... | -| mad/Test.java:73:33:73:40 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:75:26:75:40 | (...)... | semmle.label | (...)... | -| mad/Test.java:75:33:75:40 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:77:34:77:48 | (...)... | semmle.label | (...)... | -| mad/Test.java:77:41:77:48 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:79:35:79:49 | (...)... | semmle.label | (...)... | -| mad/Test.java:79:42:79:49 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:81:30:81:44 | (...)... | semmle.label | (...)... | -| mad/Test.java:81:37:81:44 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:83:22:83:36 | (...)... | semmle.label | (...)... | -| mad/Test.java:83:29:83:36 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:85:30:85:44 | (...)... | semmle.label | (...)... | -| mad/Test.java:85:37:85:44 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:87:21:87:35 | (...)... | semmle.label | (...)... | -| mad/Test.java:87:28:87:35 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:89:26:89:40 | (...)... | semmle.label | (...)... | -| mad/Test.java:89:33:89:40 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:91:33:91:47 | (...)... | semmle.label | (...)... | -| mad/Test.java:91:40:91:47 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:93:33:93:47 | (...)... | semmle.label | (...)... | -| mad/Test.java:93:40:93:47 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:94:33:94:47 | (...)... | semmle.label | (...)... | -| mad/Test.java:94:40:94:47 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:96:31:96:45 | (...)... | semmle.label | (...)... | -| mad/Test.java:96:38:96:45 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:98:21:98:35 | (...)... | semmle.label | (...)... | -| mad/Test.java:98:28:98:35 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:99:21:99:35 | (...)... | semmle.label | (...)... | -| mad/Test.java:99:28:99:35 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:100:21:100:35 | (...)... | semmle.label | (...)... | -| mad/Test.java:100:28:100:35 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:102:27:102:41 | (...)... | semmle.label | (...)... | -| mad/Test.java:102:34:102:41 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:103:27:103:41 | (...)... | semmle.label | (...)... | -| mad/Test.java:103:34:103:41 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:105:26:105:40 | (...)... | semmle.label | (...)... | -| mad/Test.java:105:33:105:40 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:107:35:107:49 | (...)... | semmle.label | (...)... | -| mad/Test.java:107:42:107:49 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:109:41:109:57 | (...)... | semmle.label | (...)... | -| mad/Test.java:109:50:109:57 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:111:45:111:61 | (...)... | semmle.label | (...)... | -| mad/Test.java:111:54:111:61 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:113:43:113:57 | (...)... | semmle.label | (...)... | -| mad/Test.java:113:50:113:57 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:115:28:115:42 | (...)... | semmle.label | (...)... | -| mad/Test.java:115:35:115:42 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:117:41:117:55 | (...)... | semmle.label | (...)... | -| mad/Test.java:117:48:117:55 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:119:28:119:44 | (...)... | semmle.label | (...)... | -| mad/Test.java:119:37:119:44 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:121:28:121:42 | (...)... | semmle.label | (...)... | -| mad/Test.java:121:35:121:42 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:123:46:123:62 | (...)... | semmle.label | (...)... | -| mad/Test.java:123:55:123:62 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:125:40:125:54 | (...)... | semmle.label | (...)... | -| mad/Test.java:125:47:125:54 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:127:40:127:54 | (...)... | semmle.label | (...)... | -| mad/Test.java:127:47:127:54 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:131:26:131:42 | (...)... | semmle.label | (...)... | -| mad/Test.java:131:35:131:42 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:135:49:135:63 | (...)... | semmle.label | (...)... | -| mad/Test.java:135:56:135:63 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:137:49:137:63 | (...)... | semmle.label | (...)... | -| mad/Test.java:137:56:137:63 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:141:52:141:66 | (...)... | semmle.label | (...)... | -| mad/Test.java:141:59:141:66 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:143:52:143:66 | (...)... | semmle.label | (...)... | -| mad/Test.java:143:59:143:66 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:145:49:145:65 | (...)... | semmle.label | (...)... | -| mad/Test.java:145:58:145:65 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:147:25:147:41 | (...)... | semmle.label | (...)... | -| mad/Test.java:147:34:147:41 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:149:25:149:41 | (...)... | semmle.label | (...)... | -| mad/Test.java:149:34:149:41 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:151:35:151:51 | (...)... | semmle.label | (...)... | -| mad/Test.java:151:44:151:51 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:153:24:153:38 | (...)... | semmle.label | (...)... | -| mad/Test.java:153:31:153:38 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:155:37:155:53 | (...)... | semmle.label | (...)... | -| mad/Test.java:155:46:155:53 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:157:37:157:53 | (...)... | semmle.label | (...)... | -| mad/Test.java:157:46:157:53 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:159:58:159:74 | (...)... | semmle.label | (...)... | -| mad/Test.java:159:67:159:74 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:161:58:161:74 | (...)... | semmle.label | (...)... | -| mad/Test.java:161:67:161:74 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:163:64:163:80 | (...)... | semmle.label | (...)... | -| mad/Test.java:163:73:163:80 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:166:28:166:44 | (...)... | semmle.label | (...)... | -| mad/Test.java:166:37:166:44 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:168:39:168:55 | (...)... | semmle.label | (...)... | -| mad/Test.java:168:48:168:55 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:170:45:170:61 | (...)... | semmle.label | (...)... | -| mad/Test.java:170:54:170:61 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:172:60:172:76 | (...)... | semmle.label | (...)... | -| mad/Test.java:172:69:172:76 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:174:40:174:54 | (...)... | semmle.label | (...)... | -| mad/Test.java:174:47:174:54 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:176:40:176:56 | (...)... | semmle.label | (...)... | -| mad/Test.java:176:49:176:56 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:178:55:178:71 | (...)... | semmle.label | (...)... | -| mad/Test.java:178:64:178:71 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:180:40:180:56 | (...)... | semmle.label | (...)... | -| mad/Test.java:180:49:180:56 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:182:55:182:71 | (...)... | semmle.label | (...)... | -| mad/Test.java:182:64:182:71 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:184:54:184:68 | (...)... | semmle.label | (...)... | -| mad/Test.java:184:61:184:68 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:190:30:190:44 | (...)... | semmle.label | (...)... | -| mad/Test.java:190:37:190:44 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:192:40:192:81 | (...)... | semmle.label | (...)... | -| mad/Test.java:192:74:192:81 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:194:34:194:75 | (...)... | semmle.label | (...)... | -| mad/Test.java:194:68:194:75 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:196:34:196:75 | (...)... | semmle.label | (...)... | -| mad/Test.java:196:68:196:75 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:198:23:198:37 | (...)... | semmle.label | (...)... | -| mad/Test.java:198:30:198:37 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:203:23:203:37 | (...)... | semmle.label | (...)... | -| mad/Test.java:203:30:203:37 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:208:23:208:40 | (...)... | semmle.label | (...)... | -| mad/Test.java:208:33:208:40 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:210:20:210:34 | (...)... | semmle.label | (...)... | -| mad/Test.java:210:27:210:34 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:212:21:212:35 | (...)... | semmle.label | (...)... | -| mad/Test.java:212:28:212:35 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:214:22:214:36 | (...)... | semmle.label | (...)... | -| mad/Test.java:214:29:214:36 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:219:20:219:34 | (...)... | semmle.label | (...)... | -| mad/Test.java:219:27:219:34 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:221:19:221:33 | (...)... | semmle.label | (...)... | -| mad/Test.java:221:26:221:33 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:226:20:226:36 | (...)... | semmle.label | (...)... | -| mad/Test.java:226:29:226:36 | source(...) : String | semmle.label | source(...) : String | -subpaths -#select -| TaintedPath.java:15:53:15:76 | new FileReader(...) | TaintedPath.java:12:79:12:99 | getInputStream(...) : InputStream | TaintedPath.java:15:68:15:75 | filename | This path depends on a $@. | TaintedPath.java:12:79:12:99 | getInputStream(...) | user-provided value | -| TaintedPath.java:43:25:43:54 | resolve(...) | TaintedPath.java:39:39:39:59 | getInputStream(...) : InputStream | TaintedPath.java:43:46:43:53 | filename | This path depends on a $@. | TaintedPath.java:39:39:39:59 | getInputStream(...) | user-provided value | -| Test.java:24:11:24:24 | new File(...) | Test.java:19:18:19:38 | getHostName(...) : String | Test.java:24:20:24:23 | temp | This path depends on a $@. | Test.java:19:18:19:38 | getHostName(...) | user-provided value | -| Test.java:27:11:27:25 | get(...) | Test.java:19:18:19:38 | getHostName(...) : String | Test.java:27:21:27:24 | temp | This path depends on a $@. | Test.java:19:18:19:38 | getHostName(...) | user-provided value | -| Test.java:30:11:30:48 | getPath(...) | Test.java:19:18:19:38 | getHostName(...) : String | Test.java:30:44:30:47 | temp | This path depends on a $@. | Test.java:19:18:19:38 | getHostName(...) | user-provided value | -| Test.java:34:12:34:25 | new File(...) | Test.java:19:18:19:38 | getHostName(...) : String | Test.java:34:21:34:24 | temp | This path depends on a $@. | Test.java:19:18:19:38 | getHostName(...) | user-provided value | -| Test.java:82:52:82:88 | new FileWriter(...) | Test.java:79:74:79:97 | getInputStream(...) : ServletInputStream | Test.java:82:67:82:81 | ... + ... | This path depends on a $@. | Test.java:79:74:79:97 | getInputStream(...) | user-provided value | -| Test.java:90:26:90:29 | temp | Test.java:88:17:88:37 | getHostName(...) : String | Test.java:90:26:90:29 | temp | This path depends on a $@. | Test.java:88:17:88:37 | getHostName(...) | user-provided value | -| Test.java:97:3:97:34 | new File(...) | Test.java:95:14:95:34 | getHostName(...) : String | Test.java:97:12:97:33 | new URI(...) | This path depends on a $@. | Test.java:95:14:95:34 | getHostName(...) | user-provided value | -| Test.java:98:3:98:34 | new File(...) | Test.java:95:14:95:34 | getHostName(...) : String | Test.java:98:12:98:33 | new URI(...) | This path depends on a $@. | Test.java:95:14:95:34 | getHostName(...) | user-provided value | -| Test.java:99:3:99:34 | new File(...) | Test.java:95:14:95:34 | getHostName(...) : String | Test.java:99:12:99:33 | new URI(...) | This path depends on a $@. | Test.java:95:14:95:34 | getHostName(...) | user-provided value | -| Test.java:100:3:100:46 | new File(...) | Test.java:95:14:95:34 | getHostName(...) : String | Test.java:100:12:100:45 | new URI(...) | This path depends on a $@. | Test.java:95:14:95:34 | getHostName(...) | user-provided value | -| Test.java:101:3:101:55 | new File(...) | Test.java:95:14:95:34 | getHostName(...) : String | Test.java:101:12:101:54 | new URI(...) | This path depends on a $@. | Test.java:95:14:95:34 | getHostName(...) | user-provided value | -| mad/Test.java:45:52:45:68 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:45:52:45:68 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:47:32:47:48 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:47:32:47:48 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:49:47:49:63 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:49:47:49:63 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:51:39:51:53 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:51:39:51:53 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:53:31:53:45 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:53:31:53:45 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:55:29:55:43 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:55:29:55:43 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:57:24:57:38 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:57:24:57:38 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:59:9:59:41 | new FileReader(...) | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:59:24:59:40 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:61:20:61:34 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:61:20:61:34 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:63:20:63:34 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:63:20:63:34 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:65:33:65:47 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:65:33:65:47 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:67:40:67:54 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:67:40:67:54 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:69:33:69:47 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:69:33:69:47 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:71:31:71:45 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:71:31:71:45 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:73:26:73:40 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:73:26:73:40 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:75:26:75:40 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:75:26:75:40 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:77:34:77:48 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:77:34:77:48 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:79:35:79:49 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:79:35:79:49 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:81:30:81:44 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:81:30:81:44 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:83:22:83:36 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:83:22:83:36 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:85:30:85:44 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:85:30:85:44 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:87:21:87:35 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:87:21:87:35 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:89:26:89:40 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:89:26:89:40 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:91:33:91:47 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:91:33:91:47 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:93:33:93:47 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:93:33:93:47 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:94:33:94:47 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:94:33:94:47 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:96:31:96:45 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:96:31:96:45 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:98:21:98:35 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:98:21:98:35 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:99:21:99:35 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:99:21:99:35 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:100:21:100:35 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:100:21:100:35 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:102:27:102:41 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:102:27:102:41 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:103:27:103:41 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:103:27:103:41 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:105:26:105:40 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:105:26:105:40 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:107:35:107:49 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:107:35:107:49 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:109:41:109:57 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:109:41:109:57 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:111:45:111:61 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:111:45:111:61 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:113:43:113:57 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:113:43:113:57 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:115:28:115:42 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:115:28:115:42 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:117:41:117:55 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:117:41:117:55 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:119:28:119:44 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:119:28:119:44 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:121:28:121:42 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:121:28:121:42 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:123:46:123:62 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:123:46:123:62 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:125:40:125:54 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:125:40:125:54 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:127:40:127:54 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:127:40:127:54 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:131:26:131:42 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:131:26:131:42 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:135:49:135:63 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:135:49:135:63 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:137:49:137:63 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:137:49:137:63 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:141:52:141:66 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:141:52:141:66 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:143:52:143:66 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:143:52:143:66 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:145:49:145:65 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:145:49:145:65 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:147:25:147:41 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:147:25:147:41 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:149:25:149:41 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:149:25:149:41 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:151:35:151:51 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:151:35:151:51 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:153:24:153:38 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:153:24:153:38 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:155:37:155:53 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:155:37:155:53 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:157:37:157:53 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:157:37:157:53 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:159:58:159:74 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:159:58:159:74 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:161:58:161:74 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:161:58:161:74 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:163:64:163:80 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:163:64:163:80 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:166:28:166:44 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:166:28:166:44 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:168:39:168:55 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:168:39:168:55 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:170:45:170:61 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:170:45:170:61 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:172:60:172:76 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:172:60:172:76 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:174:40:174:54 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:174:40:174:54 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:176:40:176:56 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:176:40:176:56 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:178:55:178:71 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:178:55:178:71 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:180:40:180:56 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:180:40:180:56 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:182:55:182:71 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:182:55:182:71 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:184:54:184:68 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:184:54:184:68 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:190:30:190:44 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:190:30:190:44 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:192:40:192:81 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:192:40:192:81 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:194:34:194:75 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:194:34:194:75 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:196:34:196:75 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:196:34:196:75 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:198:23:198:37 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:198:23:198:37 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:203:23:203:37 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:203:23:203:37 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:208:23:208:40 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:208:23:208:40 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:210:20:210:34 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:210:20:210:34 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:212:21:212:35 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:212:21:212:35 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:214:22:214:36 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:214:22:214:36 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:219:20:219:34 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:219:20:219:34 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:221:19:221:33 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:221:19:221:33 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | -| mad/Test.java:226:20:226:36 | (...)... | mad/Test.java:40:16:40:36 | getHostName(...) : String | mad/Test.java:226:20:226:36 | (...)... | This path depends on a $@. | mad/Test.java:40:16:40:36 | getHostName(...) | user-provided value | diff --git a/java/ql/test/query-tests/security/CWE-022/semmle/tests/TaintedPath.java b/java/ql/test/query-tests/security/CWE-022/semmle/tests/TaintedPath.java index a2ae561be58..8bfc35c1d96 100644 --- a/java/ql/test/query-tests/security/CWE-022/semmle/tests/TaintedPath.java +++ b/java/ql/test/query-tests/security/CWE-022/semmle/tests/TaintedPath.java @@ -9,25 +9,27 @@ import java.nio.file.Paths; public class TaintedPath { public void sendUserFile(Socket sock, String user) throws IOException { - BufferedReader filenameReader = new BufferedReader(new InputStreamReader(sock.getInputStream(), "UTF-8")); - String filename = filenameReader.readLine(); - // BAD: read from a file without checking its path - BufferedReader fileReader = new BufferedReader(new FileReader(filename)); + BufferedReader filenameReader = + new BufferedReader(new InputStreamReader(sock.getInputStream(), "UTF-8")); + String filename = filenameReader.readLine(); + // BAD: read from a file without checking its path + BufferedReader fileReader = new BufferedReader(new FileReader(filename)); // $ hasTaintFlow String fileLine = fileReader.readLine(); - while(fileLine != null) { - sock.getOutputStream().write(fileLine.getBytes()); - fileLine = fileReader.readLine(); + while (fileLine != null) { + sock.getOutputStream().write(fileLine.getBytes()); + fileLine = fileReader.readLine(); } } public void sendUserFileGood(Socket sock, String user) throws IOException { - BufferedReader filenameReader = new BufferedReader(new InputStreamReader(sock.getInputStream(), "UTF-8")); + BufferedReader filenameReader = + new BufferedReader(new InputStreamReader(sock.getInputStream(), "UTF-8")); String filename = filenameReader.readLine(); // GOOD: ensure that the file is in a designated folder in the user's home directory if (!filename.contains("..") && filename.startsWith("/home/" + user + "/public/")) { BufferedReader fileReader = new BufferedReader(new FileReader(filename)); String fileLine = fileReader.readLine(); - while(fileLine != null) { + while (fileLine != null) { sock.getOutputStream().write(fileLine.getBytes()); fileLine = fileReader.readLine(); } @@ -35,28 +37,28 @@ public class TaintedPath { } public void sendUserFileGood2(Socket sock, String user) throws Exception { - BufferedReader filenameReader = new BufferedReader( - new InputStreamReader(sock.getInputStream(), "UTF-8")); + BufferedReader filenameReader = + new BufferedReader(new InputStreamReader(sock.getInputStream(), "UTF-8")); String filename = filenameReader.readLine(); - + Path publicFolder = Paths.get("/home/" + user + "/public").normalize().toAbsolutePath(); - Path filePath = publicFolder.resolve(filename).normalize().toAbsolutePath(); // FP until the path-injection sinks are reworked - + Path filePath = publicFolder.resolve(filename).normalize().toAbsolutePath(); + // GOOD: ensure that the path stays within the public folder if (!filePath.startsWith(publicFolder + File.separator)) { throw new IllegalArgumentException("Invalid filename"); } BufferedReader fileReader = new BufferedReader(new FileReader(filePath.toString())); String fileLine = fileReader.readLine(); - while(fileLine != null) { + while (fileLine != null) { sock.getOutputStream().write(fileLine.getBytes()); fileLine = fileReader.readLine(); } } public void sendUserFileGood3(Socket sock, String user) throws Exception { - BufferedReader filenameReader = new BufferedReader( - new InputStreamReader(sock.getInputStream(), "UTF-8")); + BufferedReader filenameReader = + new BufferedReader(new InputStreamReader(sock.getInputStream(), "UTF-8")); String filename = filenameReader.readLine(); // GOOD: ensure that the filename has no path separators or parent directory references if (filename.contains("..") || filename.contains("/") || filename.contains("\\")) { @@ -64,9 +66,9 @@ public class TaintedPath { } BufferedReader fileReader = new BufferedReader(new FileReader(filename)); String fileLine = fileReader.readLine(); - while(fileLine != null) { + while (fileLine != null) { sock.getOutputStream().write(fileLine.getBytes()); fileLine = fileReader.readLine(); - } + } } } diff --git a/java/ql/test/query-tests/security/CWE-022/semmle/tests/TaintedPath.ql b/java/ql/test/query-tests/security/CWE-022/semmle/tests/TaintedPath.ql index e17123ce781..25e5bf1df87 100644 --- a/java/ql/test/query-tests/security/CWE-022/semmle/tests/TaintedPath.ql +++ b/java/ql/test/query-tests/security/CWE-022/semmle/tests/TaintedPath.ql @@ -1,11 +1,4 @@ import java import TestUtilities.InlineFlowTest import semmle.code.java.security.TaintedPathQuery - -class HasFlowTest extends InlineFlowTest { - override predicate hasTaintFlow(DataFlow::Node src, DataFlow::Node sink) { - TaintedPathFlow::flow(src, sink) - } - - override predicate hasValueFlow(DataFlow::Node src, DataFlow::Node sink) { none() } -} +import TaintFlowTest diff --git a/java/ql/test/query-tests/security/CWE-022/semmle/tests/Test.java b/java/ql/test/query-tests/security/CWE-022/semmle/tests/Test.java index 872f2a01b65..a29cf1f620e 100644 --- a/java/ql/test/query-tests/security/CWE-022/semmle/tests/Test.java +++ b/java/ql/test/query-tests/security/CWE-022/semmle/tests/Test.java @@ -60,10 +60,8 @@ public class Test { // "java.nio.file;Files;false;copy;;;Argument[0];read-file;manual" Files.copy((Path) source(), (Path) null); // $ hasTaintFlow Files.copy((Path) source(), (OutputStream) null); // $ hasTaintFlow - Files.copy((InputStream) source(), null); // $ hasTaintFlow // "java.nio.file;Files;false;copy;;;Argument[1];create-file;manual" Files.copy((Path) null, (Path) source()); // $ hasTaintFlow - Files.copy((Path) null, (OutputStream) source()); // $ hasTaintFlow Files.copy((InputStream) null, (Path) source()); // $ hasTaintFlow // "java.nio.file;Files;false;createDirectories;;;Argument[0];create-file;manual" Files.createDirectories((Path) source()); // $ hasTaintFlow From 19a6b7858b12c112056420f0af40cc3dca0a488f Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Fri, 26 Jan 2024 12:45:00 +0100 Subject: [PATCH 023/378] Remove reference to PathCreation ZipSlip no longer needs to make this exclusion, since PathCreation arguments are no longer path-injection sinks --- .../code/java/security/ZipSlipQuery.qll | 25 +------------------ 1 file changed, 1 insertion(+), 24 deletions(-) diff --git a/java/ql/lib/semmle/code/java/security/ZipSlipQuery.qll b/java/ql/lib/semmle/code/java/security/ZipSlipQuery.qll index 10db2997bef..7ba99a31e26 100644 --- a/java/ql/lib/semmle/code/java/security/ZipSlipQuery.qll +++ b/java/ql/lib/semmle/code/java/security/ZipSlipQuery.qll @@ -41,28 +41,5 @@ module ZipSlipFlow = TaintTracking::Global; * A sink that represents a file creation, such as a file write, copy or move operation. */ private class FileCreationSink extends DataFlow::Node { - FileCreationSink() { - sinkNode(this, "path-injection") and - not isPathCreation(this) - } -} - -/** - * Holds if `sink` is a path creation node that doesn't imply a read/write filesystem operation. - * This is to avoid creating new spurious alerts, since `PathCreation` sinks weren't - * previously part of this query. - */ -private predicate isPathCreation(DataFlow::Node sink) { - exists(PathCreation pc | - pc.getAnInput() = sink.asExpr() - or - pc.getAnInput().(Argument).isVararg() and sink.(DataFlow::ImplicitVarargsArray).getCall() = pc - | - // exclude actual read/write operations included in `PathCreation` - not pc.(Call) - .getCallee() - .getDeclaringType() - .hasQualifiedName("java.io", - ["FileInputStream", "FileOutputStream", "FileReader", "FileWriter"]) - ) + FileCreationSink() { sinkNode(this, "path-injection") } } From b8cb514dc45b29b471ec8b321507a10cc97c464d Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Fri, 26 Jan 2024 12:46:51 +0100 Subject: [PATCH 024/378] Rename the other change note --- ...ed-path-creation.md => 2024-01-26-deprecated-path-creation.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename java/ql/lib/change-notes/{2023-04-20-deprecated-path-creation.md => 2024-01-26-deprecated-path-creation.md} (100%) diff --git a/java/ql/lib/change-notes/2023-04-20-deprecated-path-creation.md b/java/ql/lib/change-notes/2024-01-26-deprecated-path-creation.md similarity index 100% rename from java/ql/lib/change-notes/2023-04-20-deprecated-path-creation.md rename to java/ql/lib/change-notes/2024-01-26-deprecated-path-creation.md From 6e550d28af7e425d0727d7077316fb676f56a1e6 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Fri, 26 Jan 2024 13:33:25 +0100 Subject: [PATCH 025/378] Update more test expectations --- .../SupportedExternalSinks/SupportedExternalSinks.expected | 1 - .../ql/test/utils/modeleditor/ApplicationModeEndpoints.expected | 2 -- 2 files changed, 3 deletions(-) diff --git a/java/ql/test/query-tests/Telemetry/SupportedExternalSinks/SupportedExternalSinks.expected b/java/ql/test/query-tests/Telemetry/SupportedExternalSinks/SupportedExternalSinks.expected index 5f0ed7d05df..6cb849601d5 100644 --- a/java/ql/test/query-tests/Telemetry/SupportedExternalSinks/SupportedExternalSinks.expected +++ b/java/ql/test/query-tests/Telemetry/SupportedExternalSinks/SupportedExternalSinks.expected @@ -1,3 +1,2 @@ -| java.io.File#File(String) | 1 | | java.io.FileWriter#FileWriter(File) | 1 | | java.net.URL#openStream() | 1 | diff --git a/java/ql/test/utils/modeleditor/ApplicationModeEndpoints.expected b/java/ql/test/utils/modeleditor/ApplicationModeEndpoints.expected index 919fc09b261..4d32cb7e922 100644 --- a/java/ql/test/utils/modeleditor/ApplicationModeEndpoints.expected +++ b/java/ql/test/utils/modeleditor/ApplicationModeEndpoints.expected @@ -2,11 +2,9 @@ | com/github/codeql/test/PublicClass.java:8:5:8:27 | println(...) | java.io | PrintStream | println | (String) | true | rt.jar | | sink | source | | com/github/codeql/test/PublicClass.java:12:5:12:27 | println(...) | java.io | PrintStream | println | (String) | true | rt.jar | | sink | source | | com/github/codeql/test/PublicClass.java:16:5:16:45 | println(...) | java.io | PrintStream | println | (Object) | true | rt.jar | | sink | source | -| com/github/codeql/test/PublicClass.java:16:24:16:44 | get(...) | java.nio.file | Paths | get | (String,String[]) | true | rt.jar | | sink | source | | com/github/codeql/test/PublicClass.java:16:24:16:44 | get(...) | java.nio.file | Paths | get | (String,String[]) | true | rt.jar | | summary | source | | com/github/codeql/test/PublicClass.java:20:5:20:68 | println(...) | java.io | PrintStream | println | (Object) | true | rt.jar | | sink | source | | com/github/codeql/test/PublicClass.java:20:24:20:47 | getDefault(...) | java.nio.file | FileSystems | getDefault | () | false | rt.jar | | | source | -| com/github/codeql/test/PublicClass.java:20:24:20:67 | getPath(...) | java.nio.file | FileSystem | getPath | (String,String[]) | true | rt.jar | | sink | source | | com/github/codeql/test/PublicClass.java:20:24:20:67 | getPath(...) | java.nio.file | FileSystem | getPath | (String,String[]) | true | rt.jar | | summary | source | | com/github/codeql/test/PublicClass.java:24:5:24:27 | println(...) | java.io | PrintStream | println | (String) | true | rt.jar | | sink | source | | com/github/codeql/test/PublicGenericClass.java:7:5:7:27 | println(...) | java.io | PrintStream | println | (Object) | true | rt.jar | | sink | source | From d8fe0f5bb83ac713dca767043aff9fc7c2223584 Mon Sep 17 00:00:00 2001 From: Marcono1234 Date: Sun, 28 Jan 2024 18:46:18 +0100 Subject: [PATCH 026/378] Java: Document which assignment type is covered by which class --- java/ql/lib/semmle/code/java/Expr.qll | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/java/ql/lib/semmle/code/java/Expr.qll b/java/ql/lib/semmle/code/java/Expr.qll index be3976b8458..74f37a4a451 100644 --- a/java/ql/lib/semmle/code/java/Expr.qll +++ b/java/ql/lib/semmle/code/java/Expr.qll @@ -378,7 +378,17 @@ class ArrayInit extends Expr, @arrayinit { override string getAPrimaryQlClass() { result = "ArrayInit" } } -/** A common super-class that represents all varieties of assignments. */ +/** + * A common super-class that represents many varieties of assignments. + * + * This does not cover unary assignments such as `i++`, and initialization of + * local variables at their declaration such as `int i = 0;`. + * + * To cover more cases of variable updates, see the classes `VariableAssign`, + * `VariableUpdate` and `VarWrite`. But consider that they don't cover array + * element assignments since there the assignment destination is not directly + * the array variable but instead an `ArrayAccess`. + */ class Assignment extends Expr, @assignment { /** Gets the destination (left-hand side) of the assignment. */ Expr getDest() { result.isNthChildOf(this, 0) } @@ -1781,6 +1791,9 @@ class VariableUpdate extends Expr { /** * An assignment to a variable or an initialization of the variable. + * + * This does not cover compound assignments such as `i += 1`, or unary + * assignments such as `i++`; use the class `VariableUpdate` for that. */ class VariableAssign extends VariableUpdate { VariableAssign() { @@ -1979,6 +1992,9 @@ class ExtensionReceiverAccess extends VarAccess { /** * A write access to a variable, which occurs as the destination of an assignment. + * + * This does not cover the initialization of local variables at their declaration, + * use the class `VariableUpdate` if you want to cover that as well. */ class VarWrite extends VarAccess { VarWrite() { this.isVarWrite() } From 3f0dc2b0228782093efe2efebe1e3dda3e5d4897 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Mon, 29 Jan 2024 12:10:46 +0100 Subject: [PATCH 027/378] Python: Model the `psycopg` package --- python/ql/lib/semmle/python/Frameworks.qll | 1 + .../lib/semmle/python/frameworks/Psycopg.qll | 32 +++++++++++++++++++ .../frameworks/psycopg/ConceptsTest.expected | 2 ++ .../frameworks/psycopg/ConceptsTest.ql | 2 ++ .../frameworks/psycopg/pep249.py | 14 ++++++++ 5 files changed, 51 insertions(+) create mode 100644 python/ql/lib/semmle/python/frameworks/Psycopg.qll create mode 100644 python/ql/test/library-tests/frameworks/psycopg/ConceptsTest.expected create mode 100644 python/ql/test/library-tests/frameworks/psycopg/ConceptsTest.ql create mode 100644 python/ql/test/library-tests/frameworks/psycopg/pep249.py diff --git a/python/ql/lib/semmle/python/Frameworks.qll b/python/ql/lib/semmle/python/Frameworks.qll index 801a51008ec..a6288dadc11 100644 --- a/python/ql/lib/semmle/python/Frameworks.qll +++ b/python/ql/lib/semmle/python/Frameworks.qll @@ -48,6 +48,7 @@ private import semmle.python.frameworks.Oracledb private import semmle.python.frameworks.Pandas private import semmle.python.frameworks.Peewee private import semmle.python.frameworks.Phoenixdb +private import semmle.python.frameworks.Psycopg private import semmle.python.frameworks.Psycopg2 private import semmle.python.frameworks.Pycurl private import semmle.python.frameworks.Pydantic diff --git a/python/ql/lib/semmle/python/frameworks/Psycopg.qll b/python/ql/lib/semmle/python/frameworks/Psycopg.qll new file mode 100644 index 00000000000..10d4609aaaf --- /dev/null +++ b/python/ql/lib/semmle/python/frameworks/Psycopg.qll @@ -0,0 +1,32 @@ +/** + * Provides classes modeling security-relevant aspects of the `psycopg` PyPI package. + * See + * - https://www.psycopg.org/psycopg3/docs/ + * - https://pypi.org/project/psycopg/ + */ + +private import python +private import semmle.python.dataflow.new.DataFlow +private import semmle.python.dataflow.new.RemoteFlowSources +private import semmle.python.Concepts +private import semmle.python.ApiGraphs +private import semmle.python.frameworks.PEP249 + +/** + * Provides models for the `psycopg` PyPI package. + * See + * - https://www.psycopg.org/psycopg3/docs/ + * - https://pypi.org/project/psycopg/ + */ +private module Psycopg { + // --------------------------------------------------------------------------- + // Psycopg + // --------------------------------------------------------------------------- + /** + * A model of `psycopg` as a module that implements PEP 249, providing ways to execute SQL statements + * against a database. + */ + class Psycopg extends PEP249::PEP249ModuleApiNode { + Psycopg() { this = API::moduleImport("psycopg") } + } +} diff --git a/python/ql/test/library-tests/frameworks/psycopg/ConceptsTest.expected b/python/ql/test/library-tests/frameworks/psycopg/ConceptsTest.expected new file mode 100644 index 00000000000..8ec8033d086 --- /dev/null +++ b/python/ql/test/library-tests/frameworks/psycopg/ConceptsTest.expected @@ -0,0 +1,2 @@ +testFailures +failures diff --git a/python/ql/test/library-tests/frameworks/psycopg/ConceptsTest.ql b/python/ql/test/library-tests/frameworks/psycopg/ConceptsTest.ql new file mode 100644 index 00000000000..b557a0bccb6 --- /dev/null +++ b/python/ql/test/library-tests/frameworks/psycopg/ConceptsTest.ql @@ -0,0 +1,2 @@ +import python +import experimental.meta.ConceptsTest diff --git a/python/ql/test/library-tests/frameworks/psycopg/pep249.py b/python/ql/test/library-tests/frameworks/psycopg/pep249.py new file mode 100644 index 00000000000..0336facb079 --- /dev/null +++ b/python/ql/test/library-tests/frameworks/psycopg/pep249.py @@ -0,0 +1,14 @@ +import psycopg + +conn = psycopg.connect(...) +conn.execute("some sql", (42,)) # $ getSql="some sql" +cursor = conn.cursor() +cursor.execute("some sql", (42,)) # $ getSql="some sql" +cursor.executemany("some sql", [(42,)]) # $ getSql="some sql" + +# as in their examples: +with psycopg.connect(...) as conn: + conn.execute("some sql", (42,)) # $ getSql="some sql" + with conn.cursor() as cursor: + cursor.execute("some sql", (42,)) # $ getSql="some sql" + cursor.executemany("some sql", [(42,)]) # $ getSql="some sql" From 5867fb3d2925aa25ebe633d7921a1e716a8b217e Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Mon, 29 Jan 2024 12:12:07 +0100 Subject: [PATCH 028/378] Python: Add change-note --- python/ql/lib/change-notes/2024-01-29-psycopg-modeling.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 python/ql/lib/change-notes/2024-01-29-psycopg-modeling.md diff --git a/python/ql/lib/change-notes/2024-01-29-psycopg-modeling.md b/python/ql/lib/change-notes/2024-01-29-psycopg-modeling.md new file mode 100644 index 00000000000..007cde7fb34 --- /dev/null +++ b/python/ql/lib/change-notes/2024-01-29-psycopg-modeling.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Added modeling of the `psycopg` PyPI package as a SQL database library. From e441dd472befacec1b47f9df5b42403783408e7f Mon Sep 17 00:00:00 2001 From: Asger F Date: Tue, 16 Jan 2024 12:34:48 +0100 Subject: [PATCH 029/378] JS: Expose hasBothNamedAndDefaultExports() --- .../lib/semmle/javascript/ES2015Modules.qll | 27 ++++++++++--------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/ES2015Modules.qll b/javascript/ql/lib/semmle/javascript/ES2015Modules.qll index d32278371c6..1bdfec7ffe9 100644 --- a/javascript/ql/lib/semmle/javascript/ES2015Modules.qll +++ b/javascript/ql/lib/semmle/javascript/ES2015Modules.qll @@ -39,6 +39,20 @@ class ES2015Module extends Module { // modules are implicitly strict any() } + + /** + * Holds if this module contains both named and `default` exports. + * + * This is used to determine whether a default-import of the module should be reinterpreted + * as a namespace-import, to accommodate the non-standard behavior implemented by some compilers. + * + * When a module has both named and `default` exports, the non-standard interpretation can lead to + * ambiguities, so we only allow the standard interpretation in that case. + */ + predicate hasBothNamedAndDefaultExports() { + hasNamedExports(this) and + hasDefaultExport(this) + } } /** @@ -64,17 +78,6 @@ private predicate hasDefaultExport(ES2015Module mod) { mod.getAnExport().(ExportNamedDeclaration).getASpecifier().getExportedName() = "default" } -/** - * Holds if `mod` contains both named and `default` exports. - * - * This is used to determine whether a default-import of the module should be reinterpreted - * as a namespace-import, to accommodate the non-standard behavior implemented by some compilers. - */ -private predicate hasBothNamedAndDefaultExports(ES2015Module mod) { - hasNamedExports(mod) and - hasDefaultExport(mod) -} - /** * An import declaration. * @@ -131,7 +134,7 @@ class ImportDeclaration extends Stmt, Import, @import_declaration { // For compatibility with the non-standard implementation of default imports, // treat default imports as namespace imports in cases where it can't cause ambiguity // between named exports and the properties of a default-exported object. - not hasBothNamedAndDefaultExports(this.getImportedModule()) and + not this.getImportedModule().(ES2015Module).hasBothNamedAndDefaultExports() and is.getImportedName() = "default" ) or From 0e0fb0e52dcc7d6dde1f4dae54df825c70052e5c Mon Sep 17 00:00:00 2001 From: Asger F Date: Tue, 16 Jan 2024 14:29:09 +0100 Subject: [PATCH 030/378] JS: Remove API graph edge causing ambiguity --- javascript/ql/lib/semmle/javascript/ApiGraphs.qll | 1 + 1 file changed, 1 insertion(+) diff --git a/javascript/ql/lib/semmle/javascript/ApiGraphs.qll b/javascript/ql/lib/semmle/javascript/ApiGraphs.qll index dc9844bf8bd..2e4e96aa46a 100644 --- a/javascript/ql/lib/semmle/javascript/ApiGraphs.qll +++ b/javascript/ql/lib/semmle/javascript/ApiGraphs.qll @@ -1621,6 +1621,7 @@ private predicate exports(string m, DataFlow::Node rhs) { exists(Module mod | mod = importableModule(m) | rhs = mod.(AmdModule).getDefine().getModuleExpr().flow() or + not mod.(ES2015Module).hasBothNamedAndDefaultExports() and exports(m, "default", rhs) or exists(ExportAssignDeclaration assgn | assgn.getTopLevel() = mod | From 2d8d11fa7840a62dfd3b4e4f6b3380ea22bf1afb Mon Sep 17 00:00:00 2001 From: Asger F Date: Wed, 17 Jan 2024 15:35:33 +0100 Subject: [PATCH 031/378] JS: Restrict type-only exports in API graphs --- javascript/ql/lib/semmle/javascript/ApiGraphs.qll | 1 + 1 file changed, 1 insertion(+) diff --git a/javascript/ql/lib/semmle/javascript/ApiGraphs.qll b/javascript/ql/lib/semmle/javascript/ApiGraphs.qll index 2e4e96aa46a..c7d911eac63 100644 --- a/javascript/ql/lib/semmle/javascript/ApiGraphs.qll +++ b/javascript/ql/lib/semmle/javascript/ApiGraphs.qll @@ -1635,6 +1635,7 @@ private predicate exports(string m, DataFlow::Node rhs) { /** Holds if module `m` exports `rhs` under the name `prop`. */ private predicate exports(string m, string prop, DataFlow::Node rhs) { exists(ExportDeclaration exp | exp.getEnclosingModule() = importableModule(m) | + not exp.isTypeOnly() and rhs = exp.getSourceNode(prop) or exists(Variable v | From 8930ce74afa573cc3c3e3b056c57b9c3aaa754b3 Mon Sep 17 00:00:00 2001 From: Asger F Date: Tue, 16 Jan 2024 12:13:14 +0100 Subject: [PATCH 032/378] JS: Do not view packages as nested in a private package --- javascript/ql/lib/semmle/javascript/NPM.qll | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/javascript/ql/lib/semmle/javascript/NPM.qll b/javascript/ql/lib/semmle/javascript/NPM.qll index 0bf92c5d29a..137641e119a 100644 --- a/javascript/ql/lib/semmle/javascript/NPM.qll +++ b/javascript/ql/lib/semmle/javascript/NPM.qll @@ -29,7 +29,8 @@ class PackageJson extends JsonObject { parentDir.getAChildContainer+() = currentDir and pkgNameDiff = currentDir.getAbsolutePath().suffix(parentDir.getAbsolutePath().length()) and not exists(pkgNameDiff.indexOf("/node_modules/")) and - result = parentPkgName + pkgNameDiff + result = parentPkgName + pkgNameDiff and + not parentPkg.isPrivate() ) } From 6cfdd7aec463ac4d0a9ef566e53cbcf0a1aa4df5 Mon Sep 17 00:00:00 2001 From: Asger F Date: Mon, 15 Jan 2024 13:53:16 +0100 Subject: [PATCH 033/378] JS: Add InlineExpectationsTest --- javascript/ql/test/qlpack.yml | 1 + .../ql/test/testUtilities/InlineExpectationsTest.qll | 8 ++++++++ .../internal/InlineExpectationsTestImpl.qll | 12 ++++++++++++ 3 files changed, 21 insertions(+) create mode 100644 javascript/ql/test/testUtilities/InlineExpectationsTest.qll create mode 100644 javascript/ql/test/testUtilities/internal/InlineExpectationsTestImpl.qll diff --git a/javascript/ql/test/qlpack.yml b/javascript/ql/test/qlpack.yml index 8976782483a..df7e46f5df7 100644 --- a/javascript/ql/test/qlpack.yml +++ b/javascript/ql/test/qlpack.yml @@ -3,6 +3,7 @@ groups: [javascript, test] dependencies: codeql/javascript-all: ${workspace} codeql/javascript-queries: ${workspace} + codeql/util: ${workspace} extractor: javascript tests: . warnOnImplicitThis: true diff --git a/javascript/ql/test/testUtilities/InlineExpectationsTest.qll b/javascript/ql/test/testUtilities/InlineExpectationsTest.qll new file mode 100644 index 00000000000..b1953314078 --- /dev/null +++ b/javascript/ql/test/testUtilities/InlineExpectationsTest.qll @@ -0,0 +1,8 @@ +/** + * Inline expectation tests for JS. + * See `shared/util/codeql/util/test/InlineExpectationsTest.qll` + */ + +private import codeql.util.test.InlineExpectationsTest +private import internal.InlineExpectationsTestImpl +import Make diff --git a/javascript/ql/test/testUtilities/internal/InlineExpectationsTestImpl.qll b/javascript/ql/test/testUtilities/internal/InlineExpectationsTestImpl.qll new file mode 100644 index 00000000000..d1de2866b10 --- /dev/null +++ b/javascript/ql/test/testUtilities/internal/InlineExpectationsTestImpl.qll @@ -0,0 +1,12 @@ +private import javascript as JS +private import codeql.util.test.InlineExpectationsTest + +module Impl implements InlineExpectationsTestSig { + private import javascript + + class ExpectationComment extends LineComment { + string getContents() { result = this.getText() } + } + + class Location = JS::Location; +} From e2bf9ea2eba40753dd99bd298f97ddf1afce1cb1 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Tue, 30 Jan 2024 10:43:56 +0100 Subject: [PATCH 034/378] Consider File.exists() et al a path-injection sink --- java/ql/lib/ext/java.io.model.yml | 2 +- java/ql/lib/ext/java.nio.file.model.yml | 4 ++-- .../query-tests/security/CWE-073/FilePathInjection.expected | 3 +++ java/ql/test/library-tests/neutrals/neutralsinks/Test.java | 3 --- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/java/ql/lib/ext/java.io.model.yml b/java/ql/lib/ext/java.io.model.yml index 17dbc1464dc..1ba027dbbb0 100644 --- a/java/ql/lib/ext/java.io.model.yml +++ b/java/ql/lib/ext/java.io.model.yml @@ -5,6 +5,7 @@ extensions: data: - ["java.io", "File", True, "createNewFile", "()", "", "Argument[this]", "path-injection", "ai-manual"] - ["java.io", "File", True, "createTempFile", "(String,String,File)", "", "Argument[2]", "path-injection", "ai-manual"] + - ["java.io", "File", True, "exists", "()", "", "Argument[this]", "path-injection", "manual"] - ["java.io", "File", True, "renameTo", "(File)", "", "Argument[0]", "path-injection", "ai-manual"] - ["java.io", "FileInputStream", True, "FileInputStream", "(File)", "", "Argument[0]", "path-injection", "ai-manual"] - ["java.io", "FileInputStream", True, "FileInputStream", "(FileDescriptor)", "", "Argument[0]", "path-injection", "manual"] @@ -126,7 +127,6 @@ extensions: - ["java.io", "DataOutput", "writeLong", "(long)", "summary", "manual"] # taint-numeric # sink neutrals - ["java.io", "File", "compareTo", "", "sink", "hq-manual"] - - ["java.io", "File", "exists", "()", "sink", "hq-manual"] - addsTo: pack: codeql/java-all extensible: sourceModel diff --git a/java/ql/lib/ext/java.nio.file.model.yml b/java/ql/lib/ext/java.nio.file.model.yml index a35c575e9cb..946f5653db6 100644 --- a/java/ql/lib/ext/java.nio.file.model.yml +++ b/java/ql/lib/ext/java.nio.file.model.yml @@ -18,6 +18,7 @@ extensions: - ["java.nio.file", "Files", False, "delete", "(Path)", "", "Argument[0]", "path-injection", "ai-manual"] - ["java.nio.file", "Files", False, "deleteIfExists", "(Path)", "", "Argument[0]", "path-injection", "ai-manual"] - ["java.nio.file", "Files", False, "getFileStore", "(Path)", "", "Argument[0]", "path-injection", "ai-manual"] # the FileStore class is unlikely to be used for later sanitization + - ["java.nio.file", "Files", False, "exists", "(Path,LinkOption[])", "", "Argument[0]", "path-injection", "manual"] - ["java.nio.file", "Files", False, "lines", "(Path,Charset)", "", "Argument[0]", "path-injection", "ai-manual"] - ["java.nio.file", "Files", False, "lines", "(Path)", "", "Argument[0]", "path-injection", "ai-manual"] - ["java.nio.file", "Files", False, "move", "", "", "Argument[1]", "path-injection", "manual"] @@ -27,6 +28,7 @@ extensions: - ["java.nio.file", "Files", False, "newBufferedWriter", "", "", "Argument[0]", "path-injection", "manual"] - ["java.nio.file", "Files", False, "newInputStream", "(Path,OpenOption[])", "", "Argument[0]", "path-injection", "ai-manual"] - ["java.nio.file", "Files", False, "newOutputStream", "", "", "Argument[0]", "path-injection", "manual"] + - ["java.nio.file", "Files", False, "notExists", "(Path,LinkOption[])", "", "Argument[0]", "path-injection", "manual"] - ["java.nio.file", "Files", False, "probeContentType", "(Path)", "", "Argument[0]", "path-injection", "ai-manual"] # accesses the file based on user input, but only reads its content type from it - ["java.nio.file", "Files", False, "readAllBytes", "(Path)", "", "Argument[0]", "path-injection", "ai-manual"] - ["java.nio.file", "Files", False, "readAllLines", "(Path,Charset)", "", "Argument[0]", "path-injection", "ai-manual"] @@ -89,7 +91,6 @@ extensions: # summary neutrals - ["java.nio.file", "Files", "exists", "(Path,LinkOption[])", "summary", "manual"] # sink neutrals - - ["java.nio.file", "Files", "exists", "", "sink", "hq-manual"] - ["java.nio.file", "Files", "getLastModifiedTime", "", "sink", "hq-manual"] - ["java.nio.file", "Files", "getOwner", "", "sink", "hq-manual"] - ["java.nio.file", "Files", "getPosixFilePermissions", "", "sink", "hq-manual"] @@ -101,6 +102,5 @@ extensions: - ["java.nio.file", "Files", "isSameFile", "", "sink", "hq-manual"] - ["java.nio.file", "Files", "isSymbolicLink", "", "sink", "hq-manual"] - ["java.nio.file", "Files", "isWritable", "", "sink", "hq-manual"] - - ["java.nio.file", "Files", "notExists", "", "sink", "hq-manual"] - ["java.nio.file", "Files", "setLastModifiedTime", "", "sink", "hq-manual"] - ["java.nio.file", "Files", "size", "", "sink", "hq-manual"] diff --git a/java/ql/test/experimental/query-tests/security/CWE-073/FilePathInjection.expected b/java/ql/test/experimental/query-tests/security/CWE-073/FilePathInjection.expected index 07be573dbf8..c7a79c6328d 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-073/FilePathInjection.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-073/FilePathInjection.expected @@ -4,6 +4,7 @@ edges | FilePathInjection.java:87:21:87:34 | getPara(...) : String | FilePathInjection.java:95:47:95:59 | finalFilePath | | FilePathInjection.java:177:50:177:58 | file : File | FilePathInjection.java:182:30:182:33 | file | | FilePathInjection.java:205:17:205:44 | getParameter(...) : String | FilePathInjection.java:209:24:209:31 | filePath : String | +| FilePathInjection.java:209:15:209:32 | new File(...) : File | FilePathInjection.java:210:23:210:26 | file | | FilePathInjection.java:209:15:209:32 | new File(...) : File | FilePathInjection.java:217:19:217:22 | file : File | | FilePathInjection.java:209:24:209:31 | filePath : String | FilePathInjection.java:209:15:209:32 | new File(...) : File | | FilePathInjection.java:217:19:217:22 | file : File | FilePathInjection.java:177:50:177:58 | file : File | @@ -19,6 +20,7 @@ nodes | FilePathInjection.java:205:17:205:44 | getParameter(...) : String | semmle.label | getParameter(...) : String | | FilePathInjection.java:209:15:209:32 | new File(...) : File | semmle.label | new File(...) : File | | FilePathInjection.java:209:24:209:31 | filePath : String | semmle.label | filePath : String | +| FilePathInjection.java:210:23:210:26 | file | semmle.label | file | | FilePathInjection.java:217:19:217:22 | file : File | semmle.label | file : File | subpaths #select @@ -26,3 +28,4 @@ subpaths | FilePathInjection.java:72:47:72:59 | finalFilePath | FilePathInjection.java:64:21:64:34 | getPara(...) : String | FilePathInjection.java:72:47:72:59 | finalFilePath | External control of file name or path due to $@. | FilePathInjection.java:64:21:64:34 | getPara(...) | user-provided value | | FilePathInjection.java:95:47:95:59 | finalFilePath | FilePathInjection.java:87:21:87:34 | getPara(...) : String | FilePathInjection.java:95:47:95:59 | finalFilePath | External control of file name or path due to $@. | FilePathInjection.java:87:21:87:34 | getPara(...) | user-provided value | | FilePathInjection.java:182:30:182:33 | file | FilePathInjection.java:205:17:205:44 | getParameter(...) : String | FilePathInjection.java:182:30:182:33 | file | External control of file name or path due to $@. | FilePathInjection.java:205:17:205:44 | getParameter(...) | user-provided value | +| FilePathInjection.java:210:23:210:26 | file | FilePathInjection.java:205:17:205:44 | getParameter(...) : String | FilePathInjection.java:210:23:210:26 | file | External control of file name or path due to $@. | FilePathInjection.java:205:17:205:44 | getParameter(...) | user-provided value | diff --git a/java/ql/test/library-tests/neutrals/neutralsinks/Test.java b/java/ql/test/library-tests/neutrals/neutralsinks/Test.java index a234132226f..a563cb78de7 100644 --- a/java/ql/test/library-tests/neutrals/neutralsinks/Test.java +++ b/java/ql/test/library-tests/neutrals/neutralsinks/Test.java @@ -14,11 +14,9 @@ public class Test { // java.io File file = null; - file.exists(); // $ isNeutralSink file.compareTo(null); // $ isNeutralSink // java.nio.file - Files.exists(null, (LinkOption[])null); // $ isNeutralSink Files.getLastModifiedTime(null, (LinkOption[])null); // $ isNeutralSink Files.getOwner(null, (LinkOption[])null); // $ isNeutralSink Files.getPosixFilePermissions(null, (LinkOption[])null); // $ isNeutralSink @@ -30,7 +28,6 @@ public class Test { Files.isSameFile(null, null); // $ isNeutralSink Files.isSymbolicLink(null); // $ isNeutralSink Files.isWritable(null); // $ isNeutralSink - Files.notExists(null, (LinkOption[])null); // $ isNeutralSink Files.setLastModifiedTime(null, null); // $ isNeutralSink Files.size(null); // $ isNeutralSink From 1737ba1a6bfe1e7dac921c47ca916a062beb351a Mon Sep 17 00:00:00 2001 From: Asger F Date: Mon, 15 Jan 2024 13:54:41 +0100 Subject: [PATCH 035/378] JS: Add library for naming endpoints --- .../ql/lib/semmle/javascript/ApiGraphs.qll | 3 + .../javascript/endpoints/EndpointNaming.qll | 459 ++++++++++++++++++ .../EndpointNaming/EndpointNaming.expected | 7 + .../EndpointNaming/EndpointNaming.ql | 41 ++ .../EndpointNaming/pack1/main.js | 13 + .../EndpointNaming/pack1/package.json | 4 + .../EndpointNaming/pack10/foo.js | 1 + .../EndpointNaming/pack10/index.js | 3 + .../EndpointNaming/pack10/package.json | 4 + .../library-tests/EndpointNaming/pack2/lib.js | 6 + .../EndpointNaming/pack2/main.js | 9 + .../EndpointNaming/pack2/package.json | 4 + .../library-tests/EndpointNaming/pack3/lib.js | 1 + .../EndpointNaming/pack3/main.js | 7 + .../EndpointNaming/pack3/package.json | 4 + .../EndpointNaming/pack4/index.js | 1 + .../EndpointNaming/pack4/package.json | 4 + .../EndpointNaming/pack5/package.json | 4 + .../EndpointNaming/pack5/src/index.js | 1 + .../EndpointNaming/pack6/index.js | 6 + .../EndpointNaming/pack6/package.json | 4 + .../EndpointNaming/pack7/index.js | 6 + .../EndpointNaming/pack7/package.json | 4 + .../library-tests/EndpointNaming/pack8/foo.js | 5 + .../EndpointNaming/pack8/index.js | 5 + .../EndpointNaming/pack8/package.json | 4 + .../library-tests/EndpointNaming/pack9/foo.js | 1 + .../EndpointNaming/pack9/index.ts | 9 + .../EndpointNaming/pack9/package.json | 4 + 29 files changed, 624 insertions(+) create mode 100644 javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll create mode 100644 javascript/ql/test/library-tests/EndpointNaming/EndpointNaming.expected create mode 100644 javascript/ql/test/library-tests/EndpointNaming/EndpointNaming.ql create mode 100644 javascript/ql/test/library-tests/EndpointNaming/pack1/main.js create mode 100644 javascript/ql/test/library-tests/EndpointNaming/pack1/package.json create mode 100644 javascript/ql/test/library-tests/EndpointNaming/pack10/foo.js create mode 100644 javascript/ql/test/library-tests/EndpointNaming/pack10/index.js create mode 100644 javascript/ql/test/library-tests/EndpointNaming/pack10/package.json create mode 100644 javascript/ql/test/library-tests/EndpointNaming/pack2/lib.js create mode 100644 javascript/ql/test/library-tests/EndpointNaming/pack2/main.js create mode 100644 javascript/ql/test/library-tests/EndpointNaming/pack2/package.json create mode 100644 javascript/ql/test/library-tests/EndpointNaming/pack3/lib.js create mode 100644 javascript/ql/test/library-tests/EndpointNaming/pack3/main.js create mode 100644 javascript/ql/test/library-tests/EndpointNaming/pack3/package.json create mode 100644 javascript/ql/test/library-tests/EndpointNaming/pack4/index.js create mode 100644 javascript/ql/test/library-tests/EndpointNaming/pack4/package.json create mode 100644 javascript/ql/test/library-tests/EndpointNaming/pack5/package.json create mode 100644 javascript/ql/test/library-tests/EndpointNaming/pack5/src/index.js create mode 100644 javascript/ql/test/library-tests/EndpointNaming/pack6/index.js create mode 100644 javascript/ql/test/library-tests/EndpointNaming/pack6/package.json create mode 100644 javascript/ql/test/library-tests/EndpointNaming/pack7/index.js create mode 100644 javascript/ql/test/library-tests/EndpointNaming/pack7/package.json create mode 100644 javascript/ql/test/library-tests/EndpointNaming/pack8/foo.js create mode 100644 javascript/ql/test/library-tests/EndpointNaming/pack8/index.js create mode 100644 javascript/ql/test/library-tests/EndpointNaming/pack8/package.json create mode 100644 javascript/ql/test/library-tests/EndpointNaming/pack9/foo.js create mode 100644 javascript/ql/test/library-tests/EndpointNaming/pack9/index.ts create mode 100644 javascript/ql/test/library-tests/EndpointNaming/pack9/package.json diff --git a/javascript/ql/lib/semmle/javascript/ApiGraphs.qll b/javascript/ql/lib/semmle/javascript/ApiGraphs.qll index c7d911eac63..0bd79dd2029 100644 --- a/javascript/ql/lib/semmle/javascript/ApiGraphs.qll +++ b/javascript/ql/lib/semmle/javascript/ApiGraphs.qll @@ -594,6 +594,9 @@ module API { exportedName = "" and result = getAModuleImportRaw(moduleName) } + + /** Gets a sink node that represents instances of `cls`. */ + Node getClassInstance(DataFlow::ClassNode cls) { result = Impl::MkClassInstance(cls) } } /** diff --git a/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll b/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll new file mode 100644 index 00000000000..5d4a067874c --- /dev/null +++ b/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll @@ -0,0 +1,459 @@ +/** + * Provides predicates for generating names for classes and functions that are part + * of the public API of a library. + * + * When possible, we try to use the qualified name by which a class/function can be accessed + * from client code. + * + * However, there are cases where classes and functions can be exposed to client + * code without being accessible as a qualified name. For example; + * ```js + * // 'Foo' is internal, but clients can reach its methods via `getFoo().m()` + * class Foo { + * m() {} + * } + * export function getFoo() { + * return new Foo(); + * } + * + * // Clients can reach m() via getObj().m() + * export function getObj() { + * return { + * m() {} + * } + * } + * ``` + * + * In these cases, we try to make up human-readable names for the endpoints. + * We make an effort to make these unambiguous in practice, though this is not always guaranteed. + */ + +private import javascript + +/** Concatenates two access paths. */ +bindingset[x, y] +private string join(string x, string y) { + if x = "" or y = "" then result = x + y else result = x + "." + y +} + +private predicate isPackageExport(API::Node node) { node = API::moduleExport(_) } + +private predicate memberEdge(API::Node pred, API::Node succ) { succ = pred.getAMember() } + +/** Gets the shortest distance from a packaeg export to `nd` in the API graph. */ +private int distanceFromPackageExport(API::Node nd) = + shortestDistances(isPackageExport/1, memberEdge/2)(_, nd, result) + +private predicate isExported(API::Node node) { + isPackageExport(node) + or + exists(API::Node pred | + isExported(pred) and + memberEdge(pred, node) + ) +} + +/** + * Holds if `node` is a default export that can be reinterpreted as a namespace export, + * because the enclosing module has no named exports. + */ +private predicate defaultExportCanBeInterpretedAsNamespaceExport(API::Node node) { + exists(ES2015Module mod | + node.asSink() = mod.getAnExportedValue("default") and + not mod.hasBothNamedAndDefaultExports() + ) +} + +private predicate isPrivateAssignment(DataFlow::Node node) { + exists(MemberDeclaration decl | + node = decl.getInit().flow() and + decl.isPrivate() + ) + or + exists(DataFlow::PropWrite write | + write.isPrivateField() and + node = write.getRhs() + ) +} + +private predicate isPrivateLike(API::Node node) { isPrivateAssignment(node.asSink()) } + +private API::Node getASuccessor(API::Node node, string name, int badness) { + isExported(node) and + exists(string member | + result = node.getMember(member) and + not isPrivateLike(node) and + if member = "default" + then + if defaultExportCanBeInterpretedAsNamespaceExport(node) + then ( + badness = 5 and name = "" + ) else ( + badness = 10 and name = "default" + ) + else ( + name = member and badness = 0 + ) + ) +} + +private API::Node getAPredecessor(API::Node node, string name, int badness) { + node = getASuccessor(result, name, badness) +} + +/** + * Gets the predecessor of `node` to use when constructing a qualified name for it, + * and binds `name` and `badness` corresponding to the label on that edge. + */ +private API::Node getPreferredPredecessor(API::Node node, string name, int badness) { + // For root nodes, we prefer not having a predecessor, as we use the package name. + not isPackageExport(node) and + // Rank predecessors by name-badness, export-distance, and name. + // Since min() can only return a single value, we need a separate min() call per column. + badness = min(int b | exists(getAPredecessor(node, _, b)) | b) and + result = + min(API::Node pred, string name1 | + pred = getAPredecessor(node, name1, badness) + | + pred order by distanceFromPackageExport(pred), name1 + ) and + name = min(string n | result = getAPredecessor(node, n, badness) | n) +} + +/** + * Holds if values escpin + */ +private predicate sinkHasNameCandidate(API::Node sink, string package, string name, int badness) { + sink = API::moduleExport(package) and + name = "" and + badness = 0 + or + exists(API::Node baseNode, string baseName, int baseBadness, string step, int stepBadness | + sinkHasNameCandidate(baseNode, package, baseName, baseBadness) and + baseNode = getPreferredPredecessor(sink, step, stepBadness) and + badness = (baseBadness + stepBadness).minimum(20) and + name = join(baseName, step) + ) +} + +/** + * Holds if `(package, name)` is the primary name to associate with `node`. + * + * `badness` is bound to the associated badness of the name. + */ +private predicate sinkHasPrimaryName(API::Node sink, string package, string name, int badness) { + badness = min(int b | sinkHasNameCandidate(sink, _, _, b) | b) and + package = min(string p | sinkHasNameCandidate(sink, p, _, badness) | p) and + name = min(string n | sinkHasNameCandidate(sink, package, n, badness) | n order by n.length(), n) +} + +/** + * Holds if `(package, name)` is the primary name to associate with `node`. + */ +private predicate sinkHasPrimaryName(API::Node sink, string package, string name) { + sinkHasPrimaryName(sink, package, name, _) +} + +/** + * Holds if `(package, name)` is an alias for `node`. + * + * This means it is a valid name for it, but was not chosen as the primary name. + */ +predicate sinkHasAlias(API::Node sink, string package, string name) { + not sinkHasPrimaryName(sink, package, name) and + ( + exists(string baseName, string step | + sinkHasPrimaryName(getAPredecessor(sink, step, _), package, baseName) and + name = join(baseName, step) + ) + or + sink = API::moduleExport(package) and + name = "" + ) +} + +/** Gets a sink node reachable from `node`. */ +bindingset[node] +private API::Node getASinkNode(DataFlow::SourceNode node) { result.getAValueReachingSink() = node } + +bindingset[qualifiedName] +private int getBadnessOfClassName(string qualifiedName) { + if qualifiedName.matches("%.constructor") + then result = 10 + else + if qualifiedName = "" + then result = 5 + else result = 0 +} + +/** Holds if `(package, name)` is a potential name for `cls`, with the given `badness`. */ +private predicate classObjectHasNameCandidate( + DataFlow::ClassNode cls, string package, string name, int badness +) { + // There can be multiple API nodes associated with `cls`. + // For example: + /// + // class C {} + // module.exports.A = C; // first sink + // module.exports.B = C; // second sink + // + exists(int baseBadness | + sinkHasPrimaryName(getASinkNode(cls), package, name, baseBadness) and + badness = baseBadness + getBadnessOfClassName(name) + ) +} + +private predicate classObjectHasPrimaryName( + DataFlow::ClassNode cls, string package, string name, int badness +) { + badness = min(int b | classObjectHasNameCandidate(cls, _, _, b) | b) and + package = min(string p | classObjectHasNameCandidate(cls, p, _, badness) | p) and + name = min(string n | classObjectHasNameCandidate(cls, package, n, badness) | n) +} + +/** Holds if `(package, name)` is the primary name for the class object of `cls`. */ +predicate classObjectHasPrimaryName(DataFlow::ClassNode cls, string package, string name) { + classObjectHasPrimaryName(cls, package, name, _) +} + +/** Holds if `(package, name)` is an alias for the class object of `cls`. */ +predicate classObjectHasAlias(DataFlow::ClassNode cls, string package, string name) { + not classObjectHasPrimaryName(cls, package, name) and + exists(int badness | + classObjectHasNameCandidate(cls, package, name, badness) and + badness < 100 + ) +} + +/** Holds if an instance of `cls` can be exposed to client code. */ +private predicate hasEscapingInstance(DataFlow::ClassNode cls) { + cls.getAnInstanceReference().flowsTo(any(API::Node n).asSink()) +} + +/** + * Holds if `(package, name)` is a potential name to use for instances of `cls`, with the given `badness`. + */ +private predicate classInstanceHasNameCandidate( + DataFlow::ClassNode cls, string package, string name, int badness +) { + exists(string baseName | + classObjectHasPrimaryName(cls, package, baseName, badness) and + name = join(baseName, "prototype") + ) + or + // In case the class itself is unaccessible, but an instance is exposed via an access path, + // consider using that access path. For example: + // + // class InternalClass {} + // module.exports.foo = new InternalClass(); + // + exists(int baseBadness | + sinkHasPrimaryName(getASinkNode(cls.getAnInstanceReference()), package, name, baseBadness) and + badness = baseBadness + 30 // add penalty, as we prefer to base this on the class name + ) + or + // If neither the class nor its instances are accessible via an access path, but instances of the + // class can still escape via more complex access patterns, resort to a synthesized name. + // For example: + // + // class InternalClass {} + // function foo() { + // return new InternalClass(); + // } + // + hasEscapingInstance(cls) and + exists(string baseName | + InternalModuleNaming::fallbackModuleName(cls.getTopLevel(), package, baseName, badness - 100) and + name = join(baseName, cls.getName()) + ".prototype" + ) +} + +private predicate classInstanceHasPrimaryName( + DataFlow::ClassNode cls, string package, string name, int badness +) { + badness = min(int b | classInstanceHasNameCandidate(cls, _, _, b) | b) and + package = min(string p | classInstanceHasNameCandidate(cls, p, _, badness) | p) and + name = + min(string n | + classInstanceHasNameCandidate(cls, package, n, badness) + | + n order by n.length(), n + ) +} + +/** Holds if `(package, name)` is the primary name to use for instances of `cls`. */ +predicate classInstanceHasPrimaryName(DataFlow::ClassNode cls, string package, string name) { + classInstanceHasPrimaryName(cls, package, name, _) +} + +/** Holds if `(package, name)` is an alias referring to some instance of `cls`. */ +predicate classInstanceHasAlias(DataFlow::ClassNode cls, string package, string name) { + not classInstanceHasPrimaryName(cls, package, name) and + exists(int badness | + classInstanceHasNameCandidate(cls, package, name, badness) and + badness < 100 // Badness 100 is when we start to synthesize names. Do not suggest these as aliases. + ) +} + +private predicate functionHasNameCandidate( + DataFlow::FunctionNode function, string package, string name, int badness +) { + sinkHasPrimaryName(getASinkNode(function), package, name, badness) + or + exists(DataFlow::ClassNode cls | + function = cls.getConstructor() and + classObjectHasPrimaryName(cls, package, name, badness) + or + exists(string baseName, string memberName | + function = cls.getInstanceMethod(memberName) and + classInstanceHasPrimaryName(cls, package, baseName, badness) and + name = join(baseName, memberName) + or + function = cls.getStaticMethod(memberName) and + classObjectHasPrimaryName(cls, package, baseName, badness) and + name = join(baseName, memberName) + ) + ) +} + +private predicate functionHasPrimaryName( + DataFlow::FunctionNode function, string package, string name, int badness +) { + badness = min(int b | functionHasNameCandidate(function, _, _, b) | b) and + package = min(string p | functionHasNameCandidate(function, p, _, badness) | p) and + name = + min(string n | + functionHasNameCandidate(function, package, n, badness) + | + n order by n.length(), n + ) +} + +/** + * Holds if `(package, name)` is the primary name for the given `function`. + */ +predicate functionHasPrimaryName(DataFlow::FunctionNode function, string package, string name) { + functionHasPrimaryName(function, package, name, _) +} + +/** + * Holds if `(package, name)` is an alias for the given `function`. + */ +predicate functionHasAlias(DataFlow::FunctionNode function, string package, string name) { + not functionHasPrimaryName(function, package, name) and + exists(int badness | + functionHasNameCandidate(function, package, name, badness) and + badness < 100 + ) +} + +/** + * Converts a `(package, name)` pair to a string of form `(package).name`. + */ +bindingset[package, name] +string renderName(string package, string name) { result = join("(" + package + ")", name) } + +/** + * Contains predicates for naming individual modules (i.e. files) inside of a package. + * + * These names are not necessarily part of a package's public API, and so we only used them + * as a fallback when a publicly-accessible access path cannot be found. + */ +private module InternalModuleNaming { + /** Gets the path to `folder` relative to its enclosing non-private `package.json` file. */ + private string getPackageRelativePathFromFolder(Folder folder) { + exists(PackageJson json | + json.getFile() = folder.getFile("package.json") and + not json.isPrivate() and + result = json.getPackageName() + ) + or + not exists(folder.getFile("package.json")) and + result = + getPackageRelativePathFromFolder(folder.getParentContainer()) + "/" + folder.getBaseName() + } + + private string getPackageRelativePath(Module mod) { + exists(PackageJson json, string relativePath | + not json.isPrivate() and + json.getExportedModule(relativePath) = mod and + if relativePath = "." + then result = json.getPackageName() + else result = json.getPackageName() + "/" + relativePath.regexpReplaceAll("^\\./", "") + ) + or + not mod = any(PackageJson json | not json.isPrivate()).getExportedModule(_) and + not mod.isAmbient() and + exists(string folderPath | + folderPath = getPackageRelativePathFromFolder(mod.getFile().getParentContainer()) and + if mod.getName() = "index" + then result = folderPath + else result = folderPath + "/" + mod.getName() + ) + } + + /** Holds if `(package, name)` should be used to refer to code inside `mod`. */ + predicate fallbackModuleName(Module mod, string package, string name, int badness) { + sinkHasPrimaryName(getASinkNode(mod.getDefaultOrBulkExport()), package, name, badness) + or + badness = 50 and + package = getPackageRelativePath(mod) and + name = "" + } +} + +/** + * Contains query predicates for emitting debugging information about endpoint naming. + */ +module Debug { + /** Holds if `node` has multiple preferred predecessors. */ + query predicate ambiguousPreferredPredecessor(API::Node node) { + strictcount(API::Node pred, string name, int badness | + pred = getPreferredPredecessor(node, name, badness) + ) > 1 + } + + /** Holds if the given `node` has multiple primary names. */ + query string ambiguousSinkName(API::Node node) { + strictcount(string package, string name | sinkHasPrimaryName(node, package, name)) > 1 and + result = + concat(string package, string name | + sinkHasPrimaryName(node, package, name) + | + renderName(package, name), ", " + ) + } + + /** Holds if the given `node` has multiple primary names. */ + query string ambiguousClassObjectName(DataFlow::ClassNode node) { + strictcount(string package, string name | classObjectHasPrimaryName(node, package, name)) > 1 and + result = + concat(string package, string name | + classObjectHasPrimaryName(node, package, name) + | + renderName(package, name), ", " + ) + } + + /** Holds if the given `node` has multiple primary names. */ + query string ambiguousClassInstanceName(DataFlow::ClassNode node) { + strictcount(string package, string name | classInstanceHasPrimaryName(node, package, name)) > 1 and + result = + concat(string package, string name | + classInstanceHasPrimaryName(node, package, name) + | + renderName(package, name), ", " + ) + } + + /** Holds if the given `node` has multiple primary names. */ + query string ambiguousFunctionName(DataFlow::FunctionNode node) { + strictcount(string package, string name | functionHasPrimaryName(node, package, name)) > 1 and + result = + concat(string package, string name | + functionHasPrimaryName(node, package, name) + | + renderName(package, name), ", " + ) + } +} diff --git a/javascript/ql/test/library-tests/EndpointNaming/EndpointNaming.expected b/javascript/ql/test/library-tests/EndpointNaming/EndpointNaming.expected new file mode 100644 index 00000000000..e0cc251f903 --- /dev/null +++ b/javascript/ql/test/library-tests/EndpointNaming/EndpointNaming.expected @@ -0,0 +1,7 @@ +testFailures +ambiguousPreferredPredecessor +ambiguousSinkName +ambiguousClassObjectName +ambiguousClassInstanceName +ambiguousFunctionName +failures diff --git a/javascript/ql/test/library-tests/EndpointNaming/EndpointNaming.ql b/javascript/ql/test/library-tests/EndpointNaming/EndpointNaming.ql new file mode 100644 index 00000000000..102ebb721a8 --- /dev/null +++ b/javascript/ql/test/library-tests/EndpointNaming/EndpointNaming.ql @@ -0,0 +1,41 @@ +import javascript +import semmle.javascript.RestrictedLocations +import semmle.javascript.Lines +import semmle.javascript.endpoints.EndpointNaming as EndpointNaming +import testUtilities.InlineExpectationsTest +import EndpointNaming::Debug + +module TestConfig implements TestSig { + string getARelevantTag() { + result = "instance" + or + result = "class" + or + result = "method" + } + + predicate hasActualResult(Location location, string element, string tag, string value) { + exists(string package, string name | + element = "" and + value = EndpointNaming::renderName(package, name) + | + exists(DataFlow::ClassNode cls | location = cls.getAstNode().getLocation() | + tag = "class" and + EndpointNaming::classObjectHasPrimaryName(cls, package, name) + or + tag = "instance" and + EndpointNaming::classInstanceHasPrimaryName(cls, package, name) + ) + or + element = "" and + exists(DataFlow::FunctionNode function | + not function.getFunction() = any(ConstructorDeclaration decl | decl.isSynthetic()).getBody() and + location = function.getFunction().getLocation() and + tag = "method" and + EndpointNaming::functionHasPrimaryName(function, package, name) + ) + ) + } +} + +import MakeTest diff --git a/javascript/ql/test/library-tests/EndpointNaming/pack1/main.js b/javascript/ql/test/library-tests/EndpointNaming/pack1/main.js new file mode 100644 index 00000000000..ead8000ff14 --- /dev/null +++ b/javascript/ql/test/library-tests/EndpointNaming/pack1/main.js @@ -0,0 +1,13 @@ +export class PublicClass {} // $ class=(pack1).PublicClass instance=(pack1).PublicClass.prototype + +class PrivateClass {} + +export const ExportedConst = class ExportedConstClass {} // $ class=(pack1).ExportedConst instance=(pack1).ExportedConst.prototype + +class ClassWithEscapingInstance {} // $ instance=(pack1).ClassWithEscapingInstance.prototype + +export function getEscapingInstance() { + return new ClassWithEscapingInstance(); +} // $ method=(pack1).getEscapingInstance + +export function publicFunction() {} // $ method=(pack1).publicFunction diff --git a/javascript/ql/test/library-tests/EndpointNaming/pack1/package.json b/javascript/ql/test/library-tests/EndpointNaming/pack1/package.json new file mode 100644 index 00000000000..da2dbb94dd1 --- /dev/null +++ b/javascript/ql/test/library-tests/EndpointNaming/pack1/package.json @@ -0,0 +1,4 @@ +{ + "name": "pack1", + "main": "./main.js" +} diff --git a/javascript/ql/test/library-tests/EndpointNaming/pack10/foo.js b/javascript/ql/test/library-tests/EndpointNaming/pack10/foo.js new file mode 100644 index 00000000000..3495843defe --- /dev/null +++ b/javascript/ql/test/library-tests/EndpointNaming/pack10/foo.js @@ -0,0 +1 @@ +export default class FooClass {} // $ class=(pack10).Foo instance=(pack10).Foo.prototype diff --git a/javascript/ql/test/library-tests/EndpointNaming/pack10/index.js b/javascript/ql/test/library-tests/EndpointNaming/pack10/index.js new file mode 100644 index 00000000000..59bad5c3ecb --- /dev/null +++ b/javascript/ql/test/library-tests/EndpointNaming/pack10/index.js @@ -0,0 +1,3 @@ +import { default as Foo } from "./foo"; + +export { Foo } diff --git a/javascript/ql/test/library-tests/EndpointNaming/pack10/package.json b/javascript/ql/test/library-tests/EndpointNaming/pack10/package.json new file mode 100644 index 00000000000..977ffaf282b --- /dev/null +++ b/javascript/ql/test/library-tests/EndpointNaming/pack10/package.json @@ -0,0 +1,4 @@ +{ + "name": "pack10", + "main": "./index.js" +} diff --git a/javascript/ql/test/library-tests/EndpointNaming/pack2/lib.js b/javascript/ql/test/library-tests/EndpointNaming/pack2/lib.js new file mode 100644 index 00000000000..ed996a3350e --- /dev/null +++ b/javascript/ql/test/library-tests/EndpointNaming/pack2/lib.js @@ -0,0 +1,6 @@ +class AmbiguousClass { + instanceMethod(foo) {} // $ method=(pack2).lib.LibClass.prototype.instanceMethod +} // $ class=(pack2).lib.LibClass instance=(pack2).lib.LibClass.prototype + +export default AmbiguousClass; +export { AmbiguousClass as LibClass } diff --git a/javascript/ql/test/library-tests/EndpointNaming/pack2/main.js b/javascript/ql/test/library-tests/EndpointNaming/pack2/main.js new file mode 100644 index 00000000000..e40015de73f --- /dev/null +++ b/javascript/ql/test/library-tests/EndpointNaming/pack2/main.js @@ -0,0 +1,9 @@ +class AmbiguousClass { + instanceMethod() {} // $ method=(pack2).MainClass.prototype.instanceMethod +} // $ class=(pack2).MainClass instance=(pack2).MainClass.prototype + +export default AmbiguousClass; +export { AmbiguousClass as MainClass } + +import * as lib from "./lib"; +export { lib } diff --git a/javascript/ql/test/library-tests/EndpointNaming/pack2/package.json b/javascript/ql/test/library-tests/EndpointNaming/pack2/package.json new file mode 100644 index 00000000000..b359913f639 --- /dev/null +++ b/javascript/ql/test/library-tests/EndpointNaming/pack2/package.json @@ -0,0 +1,4 @@ +{ + "name": "pack2", + "main": "./main.js" +} diff --git a/javascript/ql/test/library-tests/EndpointNaming/pack3/lib.js b/javascript/ql/test/library-tests/EndpointNaming/pack3/lib.js new file mode 100644 index 00000000000..9ef8c57437d --- /dev/null +++ b/javascript/ql/test/library-tests/EndpointNaming/pack3/lib.js @@ -0,0 +1 @@ +export default function(x,y,z) {} // $ method=(pack3).libFunction diff --git a/javascript/ql/test/library-tests/EndpointNaming/pack3/main.js b/javascript/ql/test/library-tests/EndpointNaming/pack3/main.js new file mode 100644 index 00000000000..3f49675b492 --- /dev/null +++ b/javascript/ql/test/library-tests/EndpointNaming/pack3/main.js @@ -0,0 +1,7 @@ +function ambiguousFunction(x, y, z) {} // $ method=(pack3).namedFunction + +export default ambiguousFunction; +export { ambiguousFunction as namedFunction }; + +import libFunction from "./lib"; +export { libFunction }; diff --git a/javascript/ql/test/library-tests/EndpointNaming/pack3/package.json b/javascript/ql/test/library-tests/EndpointNaming/pack3/package.json new file mode 100644 index 00000000000..0ca9a608332 --- /dev/null +++ b/javascript/ql/test/library-tests/EndpointNaming/pack3/package.json @@ -0,0 +1,4 @@ +{ + "name": "pack3", + "main": "./main.js" +} diff --git a/javascript/ql/test/library-tests/EndpointNaming/pack4/index.js b/javascript/ql/test/library-tests/EndpointNaming/pack4/index.js new file mode 100644 index 00000000000..15143e30bf6 --- /dev/null +++ b/javascript/ql/test/library-tests/EndpointNaming/pack4/index.js @@ -0,0 +1 @@ +export default class C {} // $ class=(pack4) instance=(pack4).prototype diff --git a/javascript/ql/test/library-tests/EndpointNaming/pack4/package.json b/javascript/ql/test/library-tests/EndpointNaming/pack4/package.json new file mode 100644 index 00000000000..fb63d98f8ab --- /dev/null +++ b/javascript/ql/test/library-tests/EndpointNaming/pack4/package.json @@ -0,0 +1,4 @@ +{ + "name": "pack4", + "main": "./index.js" +} diff --git a/javascript/ql/test/library-tests/EndpointNaming/pack5/package.json b/javascript/ql/test/library-tests/EndpointNaming/pack5/package.json new file mode 100644 index 00000000000..d6f924e72ca --- /dev/null +++ b/javascript/ql/test/library-tests/EndpointNaming/pack5/package.json @@ -0,0 +1,4 @@ +{ + "name": "pack5", + "main": "./dist/index.js" +} diff --git a/javascript/ql/test/library-tests/EndpointNaming/pack5/src/index.js b/javascript/ql/test/library-tests/EndpointNaming/pack5/src/index.js new file mode 100644 index 00000000000..d9653840786 --- /dev/null +++ b/javascript/ql/test/library-tests/EndpointNaming/pack5/src/index.js @@ -0,0 +1 @@ +export default class C {} // $ class=(pack5) instance=(pack5).prototype diff --git a/javascript/ql/test/library-tests/EndpointNaming/pack6/index.js b/javascript/ql/test/library-tests/EndpointNaming/pack6/index.js new file mode 100644 index 00000000000..e15b5319858 --- /dev/null +++ b/javascript/ql/test/library-tests/EndpointNaming/pack6/index.js @@ -0,0 +1,6 @@ +class C { + instanceMethod() {} // $ method=(pack6).instanceMethod + static staticMethod() {} // not accessible +} // $ instance=(pack6) + +export default new C(); diff --git a/javascript/ql/test/library-tests/EndpointNaming/pack6/package.json b/javascript/ql/test/library-tests/EndpointNaming/pack6/package.json new file mode 100644 index 00000000000..c4daea408e3 --- /dev/null +++ b/javascript/ql/test/library-tests/EndpointNaming/pack6/package.json @@ -0,0 +1,4 @@ +{ + "name": "pack6", + "main": "./index.js" +} diff --git a/javascript/ql/test/library-tests/EndpointNaming/pack7/index.js b/javascript/ql/test/library-tests/EndpointNaming/pack7/index.js new file mode 100644 index 00000000000..b56b32095d4 --- /dev/null +++ b/javascript/ql/test/library-tests/EndpointNaming/pack7/index.js @@ -0,0 +1,6 @@ +export class D {} // $ class=(pack7).D instance=(pack7).D.prototype + +// In this case we are forced to include ".default" to avoid ambiguity with class D above. +export default { + D: class {} // $ class=(pack7).default.D instance=(pack7).default.D.prototype +}; diff --git a/javascript/ql/test/library-tests/EndpointNaming/pack7/package.json b/javascript/ql/test/library-tests/EndpointNaming/pack7/package.json new file mode 100644 index 00000000000..a43ae4f5903 --- /dev/null +++ b/javascript/ql/test/library-tests/EndpointNaming/pack7/package.json @@ -0,0 +1,4 @@ +{ + "name": "pack7", + "main": "./index.js" +} diff --git a/javascript/ql/test/library-tests/EndpointNaming/pack8/foo.js b/javascript/ql/test/library-tests/EndpointNaming/pack8/foo.js new file mode 100644 index 00000000000..b141c3c81e7 --- /dev/null +++ b/javascript/ql/test/library-tests/EndpointNaming/pack8/foo.js @@ -0,0 +1,5 @@ +class Foo {} // $ class=(pack8).Foo instance=(pack8).Foo.prototype + +module.exports = Foo; +module.exports.default = Foo; +module.exports.Foo = Foo; diff --git a/javascript/ql/test/library-tests/EndpointNaming/pack8/index.js b/javascript/ql/test/library-tests/EndpointNaming/pack8/index.js new file mode 100644 index 00000000000..3cf0920f4bf --- /dev/null +++ b/javascript/ql/test/library-tests/EndpointNaming/pack8/index.js @@ -0,0 +1,5 @@ +class Main {} // $ class=(pack8) instance=(pack8).prototype + +Main.Foo = require('./foo'); + +module.exports = Main; diff --git a/javascript/ql/test/library-tests/EndpointNaming/pack8/package.json b/javascript/ql/test/library-tests/EndpointNaming/pack8/package.json new file mode 100644 index 00000000000..09d57a3348e --- /dev/null +++ b/javascript/ql/test/library-tests/EndpointNaming/pack8/package.json @@ -0,0 +1,4 @@ +{ + "name": "pack8", + "main": "./index.js" +} diff --git a/javascript/ql/test/library-tests/EndpointNaming/pack9/foo.js b/javascript/ql/test/library-tests/EndpointNaming/pack9/foo.js new file mode 100644 index 00000000000..55d14ad5b52 --- /dev/null +++ b/javascript/ql/test/library-tests/EndpointNaming/pack9/foo.js @@ -0,0 +1 @@ +export class Foo {} // $ instance=(pack9/foo).Foo.prototype diff --git a/javascript/ql/test/library-tests/EndpointNaming/pack9/index.ts b/javascript/ql/test/library-tests/EndpointNaming/pack9/index.ts new file mode 100644 index 00000000000..65c783aa499 --- /dev/null +++ b/javascript/ql/test/library-tests/EndpointNaming/pack9/index.ts @@ -0,0 +1,9 @@ +// Only the type is exposed. For the time being we do not consider type-only declarations or .d.ts files +// when naming classes. +export type { Foo } from "./foo"; + +import * as foo from "./foo"; + +export function expose() { + return new foo.Foo(); // expose an instance of Foo but not the class +} // $ method=(pack9).expose diff --git a/javascript/ql/test/library-tests/EndpointNaming/pack9/package.json b/javascript/ql/test/library-tests/EndpointNaming/pack9/package.json new file mode 100644 index 00000000000..4e69ff9e365 --- /dev/null +++ b/javascript/ql/test/library-tests/EndpointNaming/pack9/package.json @@ -0,0 +1,4 @@ +{ + "name": "pack9", + "main": "./index.js" +} From 19ba9fed9970ef015e151ac48430b5a549d4e780 Mon Sep 17 00:00:00 2001 From: Asger F Date: Tue, 30 Jan 2024 17:13:02 +0100 Subject: [PATCH 036/378] Handle externs --- .../javascript/endpoints/EndpointNaming.qll | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll b/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll index 5d4a067874c..95d3d191a70 100644 --- a/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll +++ b/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll @@ -176,6 +176,18 @@ predicate sinkHasAlias(API::Node sink, string package, string name) { bindingset[node] private API::Node getASinkNode(DataFlow::SourceNode node) { result.getAValueReachingSink() = node } +/** + * Holds if `node` is a declaration in an externs file. + * + * This is to ensure that functions/classes in externs are not named after a re-export in a package. + */ +private predicate nameFromExterns(DataFlow::Node node, string package, string name, int badness) { + node.getTopLevel().isExterns() and + package = "global" and + node = AccessPath::getAnAssignmentTo(name) and + badness = -10 +} + bindingset[qualifiedName] private int getBadnessOfClassName(string qualifiedName) { if qualifiedName.matches("%.constructor") @@ -201,6 +213,8 @@ private predicate classObjectHasNameCandidate( sinkHasPrimaryName(getASinkNode(cls), package, name, baseBadness) and badness = baseBadness + getBadnessOfClassName(name) ) + or + nameFromExterns(cls, package, name, badness) } private predicate classObjectHasPrimaryName( @@ -314,6 +328,8 @@ private predicate functionHasNameCandidate( name = join(baseName, memberName) ) ) + or + nameFromExterns(function, package, name, badness) } private predicate functionHasPrimaryName( From 8bd79908a61cefeb9e129a85b1ba1d7d9f51ec53 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Tue, 30 Jan 2024 16:49:55 +0000 Subject: [PATCH 037/378] Implement local auth query --- .../java/security/AndroidLocalAuthQuery.qll | 40 +++++++++++++++++++ .../AndroidInsecureLocalAuthentication.ql | 18 +++++++++ 2 files changed, 58 insertions(+) create mode 100644 java/ql/lib/semmle/code/java/security/AndroidLocalAuthQuery.qll create mode 100644 java/ql/src/Security/CWE/CWE-287/AndroidInsecureLocalAuthentication.ql diff --git a/java/ql/lib/semmle/code/java/security/AndroidLocalAuthQuery.qll b/java/ql/lib/semmle/code/java/security/AndroidLocalAuthQuery.qll new file mode 100644 index 00000000000..8c052fc58ee --- /dev/null +++ b/java/ql/lib/semmle/code/java/security/AndroidLocalAuthQuery.qll @@ -0,0 +1,40 @@ +/** Definitions for the insecure local authentication query. */ + +import java + +/** A base class that is used as a callback for biometric authentication. */ +private class AuthenticationCallbackClass extends Class { + AuthenticationCallbackClass() { + this.hasQualifiedName("android.hardware.fingerprint", + "FingerprintManager$AuthenticationCallback") + or + this.hasQualifiedName("android.hardware.biometrics", "BiometricPrompt$AuthenticationCallback") + } +} + +/** An implementation of the `onAuthenticationSucceeded` method for an authentication callback. */ +class AuthenticationSuccessCallback extends Method { + AuthenticationSuccessCallback() { + this.getDeclaringType().getASupertype+() instanceof AuthenticationCallbackClass and + this.hasName("onAuthenticationSucceeded") + } + + /** Gets the parameter containing the `authenticationResult` */ + Parameter getResultParameter() { result = this.getParameter(0) } + + /** Gets a use of the result parameter that's used in a `super` call to the base `AuthenticationCallback` class. */ + private VarAccess getASuperResultUse() { + exists(SuperMethodCall sup | + sup.getEnclosingCallable() = this and + result = sup.getArgument(0) and + result = this.getResultParameter().getAnAccess() and + this.getDeclaringType().getASupertype() instanceof AuthenticationCallbackClass + ) + } + + /** Gets a use of the result parameter, other than one used in a `super` call. */ + VarAccess getAResultUse() { + result = this.getResultParameter().getAnAccess() and + not result = this.getASuperResultUse() + } +} diff --git a/java/ql/src/Security/CWE/CWE-287/AndroidInsecureLocalAuthentication.ql b/java/ql/src/Security/CWE/CWE-287/AndroidInsecureLocalAuthentication.ql new file mode 100644 index 00000000000..22f4582fec3 --- /dev/null +++ b/java/ql/src/Security/CWE/CWE-287/AndroidInsecureLocalAuthentication.ql @@ -0,0 +1,18 @@ +/** + * @name Insecure local authentication + * @description Local authentication that does not make use of a `CryptoObject` can be bypassed. + * @kind problem + * @problem.severity warning + * @security-severity ...TODO + * @precision high + * @id java/android/insecure-local-authentication + * @tags security + * external/cwe/cwe-287 + */ + +import java +import semmle.code.java.security.AndroidLocalAuthQuery + +from AuthenticationSuccessCallback c +where not exists(c.getAResultUse()) +select c, "This authentication callback does not use its result for a cryptographic operation." From ad8038bade1c6bd78c44edb9b8af7bb86c5b9d42 Mon Sep 17 00:00:00 2001 From: Max Schaefer Date: Wed, 31 Jan 2024 11:16:49 +0000 Subject: [PATCH 038/378] Update MaD Declarations after Triage --- .../lib/change-notes/2024-01-31-new-models.md | 21 +++++++++++++++++++ java/ql/lib/ext/android.app.model.yml | 1 + java/ql/lib/ext/java.io.model.yml | 3 ++- java/ql/lib/ext/java.lang.model.yml | 5 +++++ java/ql/lib/ext/java.net.http.model.yml | 1 + java/ql/lib/ext/java.net.model.yml | 3 +++ java/ql/lib/ext/java.nio.file.model.yml | 2 ++ java/ql/lib/ext/java.util.zip.model.yml | 1 + java/ql/lib/ext/javax.servlet.model.yml | 6 +++++- java/ql/lib/ext/javax.xml.parsers.model.yml | 6 ++++++ java/ql/lib/ext/kotlin.io.model.yml | 1 + .../lib/ext/org.apache.commons.io.model.yml | 1 + .../ql/lib/ext/org.apache.hadoop.fs.model.yml | 7 +++++++ .../ext/org.apache.hadoop.fs.s3a.model.yml | 6 ++++++ .../ext/org.apache.http.impl.client.model.yml | 1 + .../ext/org.eclipse.jetty.client.model.yml | 1 + java/ql/lib/ext/org.gradle.api.file.model.yml | 1 + 17 files changed, 65 insertions(+), 2 deletions(-) create mode 100644 java/ql/lib/change-notes/2024-01-31-new-models.md create mode 100644 java/ql/lib/ext/javax.xml.parsers.model.yml create mode 100644 java/ql/lib/ext/org.apache.hadoop.fs.s3a.model.yml diff --git a/java/ql/lib/change-notes/2024-01-31-new-models.md b/java/ql/lib/change-notes/2024-01-31-new-models.md new file mode 100644 index 00000000000..195c1dd9954 --- /dev/null +++ b/java/ql/lib/change-notes/2024-01-31-new-models.md @@ -0,0 +1,21 @@ +--- +category: minorAnalysis +--- +* Added models for the following packages: + + * android.app + * java.io + * java.lang + * java.net + * java.net.http + * java.nio.file + * java.util.zip + * javax.servlet + * javax.xml.parsers + * kotlin.io + * org.apache.commons.io + * org.apache.hadoop.fs + * org.apache.hadoop.fs.s3a + * org.apache.http.impl.client + * org.eclipse.jetty.client + * org.gradle.api.file diff --git a/java/ql/lib/ext/android.app.model.yml b/java/ql/lib/ext/android.app.model.yml index d7a236871a7..bf82aa4cec5 100644 --- a/java/ql/lib/ext/android.app.model.yml +++ b/java/ql/lib/ext/android.app.model.yml @@ -6,6 +6,7 @@ extensions: - ["android.app", "Activity", True, "bindService", "", "", "Argument[0]", "intent-redirection", "manual"] - ["android.app", "Activity", True, "bindServiceAsUser", "", "", "Argument[0]", "intent-redirection", "manual"] - ["android.app", "Activity", True, "setResult", "(int,Intent)", "", "Argument[1]", "pending-intents", "manual"] + - ["android.app", "Activity", True, "startActivity", "(Intent)", "", "Argument[0]", "intent-redirection", "ai-manual"] - ["android.app", "Activity", True, "startActivityAsCaller", "", "", "Argument[0]", "intent-redirection", "manual"] - ["android.app", "Activity", True, "startActivityForResult", "(Intent,int)", "", "Argument[0]", "intent-redirection", "manual"] - ["android.app", "Activity", True, "startActivityForResult", "(Intent,int,Bundle)", "", "Argument[0]", "intent-redirection", "manual"] diff --git a/java/ql/lib/ext/java.io.model.yml b/java/ql/lib/ext/java.io.model.yml index 1bd9251c29d..0fe99bba86c 100644 --- a/java/ql/lib/ext/java.io.model.yml +++ b/java/ql/lib/ext/java.io.model.yml @@ -10,6 +10,7 @@ extensions: - ["java.io", "File", True, "createNewFile", "()", "", "Argument[this]", "path-injection", "ai-manual"] - ["java.io", "File", True, "createTempFile", "(String,String,File)", "", "Argument[2]", "path-injection", "ai-manual"] - ["java.io", "File", True, "renameTo", "(File)", "", "Argument[0]", "path-injection", "ai-manual"] + - ["java.io", "File", True, "renameTo", "(File)", "", "Argument[this]", "path-injection", "ai-manual"] - ["java.io", "FileInputStream", True, "FileInputStream", "(File)", "", "Argument[0]", "path-injection", "ai-manual"] - ["java.io", "FileInputStream", True, "FileInputStream", "(String)", "", "Argument[0]", "path-injection", "ai-manual"] - ["java.io", "FileOutputStream", False, "FileOutputStream", "", "", "Argument[0]", "path-injection", "manual"] @@ -132,4 +133,4 @@ extensions: pack: codeql/java-all extensible: sourceModel data: - - ["java.io", "FileInputStream", True, "FileInputStream", "", "", "Argument[this]", "file", "manual"] \ No newline at end of file + - ["java.io", "FileInputStream", True, "FileInputStream", "", "", "Argument[this]", "file", "manual"] diff --git a/java/ql/lib/ext/java.lang.model.yml b/java/ql/lib/ext/java.lang.model.yml index e5ee383c522..8a257e51048 100644 --- a/java/ql/lib/ext/java.lang.model.yml +++ b/java/ql/lib/ext/java.lang.model.yml @@ -5,6 +5,10 @@ extensions: data: - ["java.lang", "Class", False, "getResource", "(String)", "", "Argument[0]", "path-injection", "ai-manual"] - ["java.lang", "Class", False, "getResourceAsStream", "(String)", "", "Argument[0]", "path-injection", "ai-manual"] + - ["java.lang", "ClassLoader", False, "getSystemResources", "(String)", "", "Argument[0]", "path-injection", "ai-manual"] + - ["java.lang", "ClassLoader", True, "getResource", "(String)", "", "Argument[0]", "path-injection", "ai-manual"] + - ["java.lang", "ClassLoader", True, "getResourceAsStream", "(String)", "", "Argument[0]", "path-injection", "ai-manual"] + - ["java.lang", "ClassLoader", True, "getResources", "(String)", "", "Argument[0]", "path-injection", "ai-manual"] - ["java.lang", "ClassLoader", True, "getSystemResource", "(String)", "", "Argument[0]", "path-injection", "ai-manual"] - ["java.lang", "ClassLoader", True, "getSystemResourceAsStream", "(String)", "", "Argument[0]", "path-injection", "ai-manual"] - ["java.lang", "Module", True, "getResourceAsStream", "(String)", "", "Argument[0]", "path-injection", "ai-manual"] @@ -14,6 +18,7 @@ extensions: - ["java.lang", "ProcessBuilder", False, "ProcessBuilder", "(List)", "", "Argument[0]", "command-injection", "ai-manual"] - ["java.lang", "ProcessBuilder", False, "ProcessBuilder", "(String[])", "", "Argument[0]", "command-injection", "ai-manual"] - ["java.lang", "ProcessBuilder", False, "redirectError", "(File)", "", "Argument[0]", "path-injection", "ai-manual"] + - ["java.lang", "ProcessBuilder", False, "redirectOutput", "(File)", "", "Argument[0]", "path-injection", "ai-manual"] - ["java.lang", "Runtime", True, "exec", "(String)", "", "Argument[0]", "command-injection", "ai-manual"] - ["java.lang", "Runtime", True, "exec", "(String[])", "", "Argument[0]", "command-injection", "ai-manual"] - ["java.lang", "Runtime", True, "exec", "(String[],String[])", "", "Argument[0]", "command-injection", "ai-manual"] diff --git a/java/ql/lib/ext/java.net.http.model.yml b/java/ql/lib/ext/java.net.http.model.yml index 9fc18d2eaab..b920eb3da08 100644 --- a/java/ql/lib/ext/java.net.http.model.yml +++ b/java/ql/lib/ext/java.net.http.model.yml @@ -8,5 +8,6 @@ extensions: pack: codeql/java-all extensible: sinkModel data: + - ["java.net.http", "HttpClient", True, "send", "(HttpRequest,HttpResponse$BodyHandler)", "", "Argument[0]", "request-forgery", "ai-manual"] - ["java.net.http", "HttpRequest", False, "newBuilder", "", "", "Argument[0]", "request-forgery", "manual"] - ["java.net.http", "HttpRequest$Builder", False, "uri", "", "", "Argument[0]", "request-forgery", "manual"] diff --git a/java/ql/lib/ext/java.net.model.yml b/java/ql/lib/ext/java.net.model.yml index bdc40590fde..c33cd0e83a5 100644 --- a/java/ql/lib/ext/java.net.model.yml +++ b/java/ql/lib/ext/java.net.model.yml @@ -10,6 +10,7 @@ extensions: extensible: sinkModel data: - ["java.net", "DatagramPacket", False, "DatagramPacket", "(byte[],int,InetAddress,int)", "", "Argument[2]", "request-forgery", "ai-manual"] + - ["java.net", "DatagramPacket", False, "DatagramPacket", "(byte[],int,int,InetAddress,int)", "", "Argument[3]", "request-forgery", "ai-manual"] - ["java.net", "DatagramSocket", True, "connect", "(SocketAddress)", "", "Argument[0]", "request-forgery", "ai-manual"] - ["java.net", "PasswordAuthentication", False, "PasswordAuthentication", "(String,char[])", "", "Argument[1]", "credentials-password", "hq-generated"] - ["java.net", "Socket", True, "Socket", "(String,int)", "", "Argument[0]", "request-forgery", "ai-manual"] @@ -39,6 +40,8 @@ extensions: - ["java.net", "InetSocketAddress", True, "InetSocketAddress", "(String,int)", "", "Argument[0]", "Argument[this]", "taint", "ai-manual"] - ["java.net", "URI", False, "resolve", "(URI)", "", "Argument[this]", "ReturnValue", "taint", "ai-manual"] - ["java.net", "URI", False, "URI", "(String,String,String,int,String,String,String)", "", "Argument[5]", "Argument[this].SyntheticField[java.net.URI.query]", "taint", "ai-manual"] + - ["java.net", "URI", False, "URI", "(String,String,String,int,String,String,String)", "", Argument[4], "ReturnValue", "taint", "ai-manual"] + - ["java.net", "URI", False, "URI", "(String,String,String)", "", Argument[1], "ReturnValue", "taint", "ai-manual"] - ["java.net", "URI", False, "URI", "(String)", "", "Argument[0]", "Argument[this]", "taint", "manual"] - ["java.net", "URI", False, "create", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] - ["java.net", "URI", False, "resolve", "(String)", "", "Argument[0]", "ReturnValue", "taint", "ai-manual"] diff --git a/java/ql/lib/ext/java.nio.file.model.yml b/java/ql/lib/ext/java.nio.file.model.yml index 3c77c876eee..567859f47ae 100644 --- a/java/ql/lib/ext/java.nio.file.model.yml +++ b/java/ql/lib/ext/java.nio.file.model.yml @@ -67,6 +67,7 @@ extensions: - ["java.nio.file", "FileSystem", True, "getPath", "(String,String[])", "", "Argument[1]", "ReturnValue", "taint", "ai-manual"] - ["java.nio.file", "FileSystem", True, "getPathMatcher", "(String)", "", "Argument[0]", "ReturnValue", "taint", "ai-manual"] - ["java.nio.file", "FileSystem", True, "getRootDirectories", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["java.nio.file", "FileSystems", False, "getFileSystem", "(URI)", "", Argument[0], "ReturnValue", "taint", "ai-manual"] - ["java.nio.file", "Path", True, "getFileName", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.nio.file", "Path", True, "getParent", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.nio.file", "Path", True, "normalize", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] @@ -81,6 +82,7 @@ extensions: - ["java.nio.file", "Path", False, "toFile", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.nio.file", "Path", True, "toString", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.nio.file", "Path", True, "toUri", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] + - ["java.nio.file", "Paths", False, "get", "(String,String[])", "", Argument[1], "ReturnValue", "taint", "ai-manual"] - ["java.nio.file", "Paths", True, "get", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] - ["java.nio.file", "Paths", True, "get", "", "", "Argument[1].ArrayElement", "ReturnValue", "taint", "manual"] # Not supported by current lambda flow diff --git a/java/ql/lib/ext/java.util.zip.model.yml b/java/ql/lib/ext/java.util.zip.model.yml index 577e6b35723..29c51d5def7 100644 --- a/java/ql/lib/ext/java.util.zip.model.yml +++ b/java/ql/lib/ext/java.util.zip.model.yml @@ -5,6 +5,7 @@ extensions: data: - ["java.util.zip", "GZIPInputStream", False, "GZIPInputStream", "", "", "Argument[0]", "Argument[this]", "taint", "manual"] - ["java.util.zip", "ZipEntry", True, "ZipEntry", "(String)", "", "Argument[0]", "ReturnValue", "taint", "ai-manual"] + - ["java.util.zip", "ZipFile", True, "getInputStream", "(ZipEntry)", "", Argument[0], "ReturnValue", "taint", "ai-manual"] - ["java.util.zip", "ZipInputStream", False, "ZipInputStream", "", "", "Argument[0]", "Argument[this]", "taint", "manual"] - addsTo: pack: codeql/java-all diff --git a/java/ql/lib/ext/javax.servlet.model.yml b/java/ql/lib/ext/javax.servlet.model.yml index 7d7f432d2bd..acd9bb6a6d4 100644 --- a/java/ql/lib/ext/javax.servlet.model.yml +++ b/java/ql/lib/ext/javax.servlet.model.yml @@ -9,9 +9,13 @@ extensions: - ["javax.servlet", "ServletRequest", False, "getParameterNames", "()", "", "ReturnValue", "remote", "manual"] - ["javax.servlet", "ServletRequest", False, "getParameterValues", "(String)", "", "ReturnValue", "remote", "manual"] - ["javax.servlet", "ServletRequest", False, "getReader", "()", "", "ReturnValue", "remote", "manual"] - - addsTo: pack: codeql/java-all extensible: sinkModel data: - ["javax.servlet", "ServletContext", True, "getResourceAsStream", "(String)", "", "Argument[0]", "path-injection", "ai-manual"] + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.servlet", "ServletRequest", True, "getParameter", "(String)", "", Argument[0], "ReturnValue", "taint", "ai-manual"] diff --git a/java/ql/lib/ext/javax.xml.parsers.model.yml b/java/ql/lib/ext/javax.xml.parsers.model.yml new file mode 100644 index 00000000000..d39a28f5942 --- /dev/null +++ b/java/ql/lib/ext/javax.xml.parsers.model.yml @@ -0,0 +1,6 @@ +extensions: + - addsTo: + pack: codeql/java-all + extensible: sinkModel + data: + - ["javax.xml.parsers", "DocumentBuilder", True, "parse", "(InputSource)", "", "Argument[0]", "xxe", "ai-manual"] diff --git a/java/ql/lib/ext/kotlin.io.model.yml b/java/ql/lib/ext/kotlin.io.model.yml index b748e04a292..c65862f6eac 100644 --- a/java/ql/lib/ext/kotlin.io.model.yml +++ b/java/ql/lib/ext/kotlin.io.model.yml @@ -3,6 +3,7 @@ extensions: pack: codeql/java-all extensible: sinkModel data: + - ["kotlin.io", "FilesKt", False, "appendText$default", "(File,String,Charset,int,Object)", "", "Argument[0]", "path-injection", "ai-manual"] - ["kotlin.io", "FilesKt", False, "deleteRecursively", "(File)", "", "Argument[0]", "path-injection", "ai-manual"] - ["kotlin.io", "FilesKt", False, "inputStream", "(File)", "", "Argument[0]", "path-injection", "ai-manual"] - ["kotlin.io", "FilesKt", False, "readBytes", "(File)", "", "Argument[0]", "path-injection", "ai-manual"] diff --git a/java/ql/lib/ext/org.apache.commons.io.model.yml b/java/ql/lib/ext/org.apache.commons.io.model.yml index 20de13c5366..fccecd72912 100644 --- a/java/ql/lib/ext/org.apache.commons.io.model.yml +++ b/java/ql/lib/ext/org.apache.commons.io.model.yml @@ -21,6 +21,7 @@ extensions: - ["org.apache.commons.io", "FileUtils", False, "forceMkdir", "(File)", "", "Argument[0]", "path-injection", "ai-manual"] - ["org.apache.commons.io", "FileUtils", False, "moveDirectory", "(File,File)", "", "Argument[0]", "path-injection", "ai-manual"] - ["org.apache.commons.io", "FileUtils", False, "readFileToByteArray", "(File)", "", "Argument[0]", "path-injection", "ai-manual"] + - ["org.apache.commons.io", "FileUtils", False, "readFileToString", "(File,Charset)", "", "Argument[0]", "path-injection", "ai-manual"] - ["org.apache.commons.io", "FileUtils", False, "writeLines", "(File,String,Collection,String)", "", "Argument[3]", "file-content-store", "ai-manual"] - ["org.apache.commons.io", "FileUtils", False, "writeStringToFile", "(File,String,Charset,boolean)", "", "Argument[1]", "file-content-store", "ai-manual"] - ["org.apache.commons.io", "FileUtils", True, "copyInputStreamToFile", "(InputStream,File)", "", "Argument[0]", "file-content-store", "ai-manual"] diff --git a/java/ql/lib/ext/org.apache.hadoop.fs.model.yml b/java/ql/lib/ext/org.apache.hadoop.fs.model.yml index ba819b73776..79dab1de37b 100644 --- a/java/ql/lib/ext/org.apache.hadoop.fs.model.yml +++ b/java/ql/lib/ext/org.apache.hadoop.fs.model.yml @@ -13,3 +13,10 @@ extensions: - ["org.apache.hadoop.fs", "Path", True, "Path", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "ai-manual"] - ["org.apache.hadoop.fs", "Path", True, "Path", "(String)", "", "Argument[0]", "Argument[this]", "taint", "ai-manual"] - ["org.apache.hadoop.fs", "Path", True, "Path", "(URI)", "", "Argument[0]", "Argument[this]", "taint", "ai-manual"] + - addsTo: + pack: codeql/java-all + extensible: sinkModel + data: + - ["org.apache.hadoop.fs", "FileSystem", True, "makeQualified", "(Path)", "", "Argument[0]", "path-injection", "ai-manual"] + - ["org.apache.hadoop.fs", "FileSystem", True, "rename", "(Path,Path)", "", "Argument[0]", "path-injection", "ai-manual"] + - ["org.apache.hadoop.fs", "FileSystem", True, "rename", "(Path,Path)", "", "Argument[1]", "path-injection", "ai-manual"] diff --git a/java/ql/lib/ext/org.apache.hadoop.fs.s3a.model.yml b/java/ql/lib/ext/org.apache.hadoop.fs.s3a.model.yml new file mode 100644 index 00000000000..4d5d9484335 --- /dev/null +++ b/java/ql/lib/ext/org.apache.hadoop.fs.s3a.model.yml @@ -0,0 +1,6 @@ +extensions: + - addsTo: + pack: codeql/java-all + extensible: sinkModel + data: + - ["org.apache.hadoop.fs.s3a", "WriteOperationHelper", True, "createPutObjectRequest", "(String,File)", "", "Argument[1]", "path-injection", "ai-manual"] diff --git a/java/ql/lib/ext/org.apache.http.impl.client.model.yml b/java/ql/lib/ext/org.apache.http.impl.client.model.yml index be517e5344f..6f407ac3682 100644 --- a/java/ql/lib/ext/org.apache.http.impl.client.model.yml +++ b/java/ql/lib/ext/org.apache.http.impl.client.model.yml @@ -3,4 +3,5 @@ extensions: pack: codeql/java-all extensible: sinkModel data: + - ["org.apache.http.impl.client", "CloseableHttpClient", True, "execute", "(HttpUriRequest)", "", "Argument[0]", "request-forgery", "ai-manual"] - ["org.apache.http.impl.client", "RequestWrapper", True, "setURI", "(URI)", "", "Argument[0]", "request-forgery", "hq-manual"] diff --git a/java/ql/lib/ext/org.eclipse.jetty.client.model.yml b/java/ql/lib/ext/org.eclipse.jetty.client.model.yml index 28c3430e818..bd3b4f58e72 100644 --- a/java/ql/lib/ext/org.eclipse.jetty.client.model.yml +++ b/java/ql/lib/ext/org.eclipse.jetty.client.model.yml @@ -3,4 +3,5 @@ extensions: pack: codeql/java-all extensible: sinkModel data: + - ["org.eclipse.jetty.client", "HttpClient", True, "GET", "(String)", "", "Argument[0]", "request-forgery", "ai-manual"] - ["org.eclipse.jetty.client", "HttpClient", True, "newRequest", "(String)", "", "Argument[0]", "request-forgery", "ai-manual"] diff --git a/java/ql/lib/ext/org.gradle.api.file.model.yml b/java/ql/lib/ext/org.gradle.api.file.model.yml index 4f492cdbcbc..7123cd0d0ca 100644 --- a/java/ql/lib/ext/org.gradle.api.file.model.yml +++ b/java/ql/lib/ext/org.gradle.api.file.model.yml @@ -4,4 +4,5 @@ extensions: extensible: summaryModel data: - ["org.gradle.api.file", "Directory", True, "getAsFile", "()", "", "Argument[this]", "ReturnValue", "taint", "ai-manual"] + - ["org.gradle.api.file", "DirectoryProperty", True, "dir", "(String)", "", Argument[0], "ReturnValue", "taint", "ai-manual"] - ["org.gradle.api.file", "DirectoryProperty", True, "file", "(String)", "", "Argument[this]", "ReturnValue", "taint", "ai-manual"] From ab6cea14c878c2c4b0b2fae5e6ffe58310e4873e Mon Sep 17 00:00:00 2001 From: Max Schaefer Date: Wed, 31 Jan 2024 11:49:25 +0000 Subject: [PATCH 039/378] Fix missing quotes. --- java/ql/lib/ext/java.net.model.yml | 4 ++-- java/ql/lib/ext/java.nio.file.model.yml | 4 ++-- java/ql/lib/ext/java.util.zip.model.yml | 2 +- java/ql/lib/ext/org.gradle.api.file.model.yml | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/java/ql/lib/ext/java.net.model.yml b/java/ql/lib/ext/java.net.model.yml index 92f1ad7eb05..a6dd7fc5ce8 100644 --- a/java/ql/lib/ext/java.net.model.yml +++ b/java/ql/lib/ext/java.net.model.yml @@ -44,8 +44,8 @@ extensions: - ["java.net", "InetSocketAddress", True, "InetSocketAddress", "(String,int)", "", "Argument[0]", "Argument[this]", "taint", "ai-manual"] - ["java.net", "URI", False, "resolve", "(URI)", "", "Argument[this]", "ReturnValue", "taint", "ai-manual"] - ["java.net", "URI", False, "URI", "(String,String,String,int,String,String,String)", "", "Argument[5]", "Argument[this].SyntheticField[java.net.URI.query]", "taint", "ai-manual"] - - ["java.net", "URI", False, "URI", "(String,String,String,int,String,String,String)", "", Argument[4], "ReturnValue", "taint", "ai-manual"] - - ["java.net", "URI", False, "URI", "(String,String,String)", "", Argument[1], "ReturnValue", "taint", "ai-manual"] + - ["java.net", "URI", False, "URI", "(String,String,String,int,String,String,String)", "", "Argument[4]", "ReturnValue", "taint", "ai-manual"] + - ["java.net", "URI", False, "URI", "(String,String,String)", "", "Argument[1]", "ReturnValue", "taint", "ai-manual"] - ["java.net", "URI", False, "URI", "(String)", "", "Argument[0]", "Argument[this]", "taint", "manual"] - ["java.net", "URI", False, "create", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] - ["java.net", "URI", False, "resolve", "(String)", "", "Argument[0]", "ReturnValue", "taint", "ai-manual"] diff --git a/java/ql/lib/ext/java.nio.file.model.yml b/java/ql/lib/ext/java.nio.file.model.yml index 567859f47ae..ea32fa75fe3 100644 --- a/java/ql/lib/ext/java.nio.file.model.yml +++ b/java/ql/lib/ext/java.nio.file.model.yml @@ -67,7 +67,7 @@ extensions: - ["java.nio.file", "FileSystem", True, "getPath", "(String,String[])", "", "Argument[1]", "ReturnValue", "taint", "ai-manual"] - ["java.nio.file", "FileSystem", True, "getPathMatcher", "(String)", "", "Argument[0]", "ReturnValue", "taint", "ai-manual"] - ["java.nio.file", "FileSystem", True, "getRootDirectories", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] - - ["java.nio.file", "FileSystems", False, "getFileSystem", "(URI)", "", Argument[0], "ReturnValue", "taint", "ai-manual"] + - ["java.nio.file", "FileSystems", False, "getFileSystem", "(URI)", "", "Argument[0]", "ReturnValue", "taint", "ai-manual"] - ["java.nio.file", "Path", True, "getFileName", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.nio.file", "Path", True, "getParent", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.nio.file", "Path", True, "normalize", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] @@ -82,7 +82,7 @@ extensions: - ["java.nio.file", "Path", False, "toFile", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.nio.file", "Path", True, "toString", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.nio.file", "Path", True, "toUri", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - - ["java.nio.file", "Paths", False, "get", "(String,String[])", "", Argument[1], "ReturnValue", "taint", "ai-manual"] + - ["java.nio.file", "Paths", False, "get", "(String,String[])", "", "Argument[1]", "ReturnValue", "taint", "ai-manual"] - ["java.nio.file", "Paths", True, "get", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] - ["java.nio.file", "Paths", True, "get", "", "", "Argument[1].ArrayElement", "ReturnValue", "taint", "manual"] # Not supported by current lambda flow diff --git a/java/ql/lib/ext/java.util.zip.model.yml b/java/ql/lib/ext/java.util.zip.model.yml index 29c51d5def7..611fc7804ef 100644 --- a/java/ql/lib/ext/java.util.zip.model.yml +++ b/java/ql/lib/ext/java.util.zip.model.yml @@ -5,7 +5,7 @@ extensions: data: - ["java.util.zip", "GZIPInputStream", False, "GZIPInputStream", "", "", "Argument[0]", "Argument[this]", "taint", "manual"] - ["java.util.zip", "ZipEntry", True, "ZipEntry", "(String)", "", "Argument[0]", "ReturnValue", "taint", "ai-manual"] - - ["java.util.zip", "ZipFile", True, "getInputStream", "(ZipEntry)", "", Argument[0], "ReturnValue", "taint", "ai-manual"] + - ["java.util.zip", "ZipFile", True, "getInputStream", "(ZipEntry)", "", "Argument[0]", "ReturnValue", "taint", "ai-manual"] - ["java.util.zip", "ZipInputStream", False, "ZipInputStream", "", "", "Argument[0]", "Argument[this]", "taint", "manual"] - addsTo: pack: codeql/java-all diff --git a/java/ql/lib/ext/org.gradle.api.file.model.yml b/java/ql/lib/ext/org.gradle.api.file.model.yml index 7123cd0d0ca..c3d202aab39 100644 --- a/java/ql/lib/ext/org.gradle.api.file.model.yml +++ b/java/ql/lib/ext/org.gradle.api.file.model.yml @@ -4,5 +4,5 @@ extensions: extensible: summaryModel data: - ["org.gradle.api.file", "Directory", True, "getAsFile", "()", "", "Argument[this]", "ReturnValue", "taint", "ai-manual"] - - ["org.gradle.api.file", "DirectoryProperty", True, "dir", "(String)", "", Argument[0], "ReturnValue", "taint", "ai-manual"] + - ["org.gradle.api.file", "DirectoryProperty", True, "dir", "(String)", "", "Argument[0]", "ReturnValue", "taint", "ai-manual"] - ["org.gradle.api.file", "DirectoryProperty", True, "file", "(String)", "", "Argument[this]", "ReturnValue", "taint", "ai-manual"] From aa5cccdddd4eaf0989f98af12bd6e1f5d9496e91 Mon Sep 17 00:00:00 2001 From: Asger F Date: Wed, 31 Jan 2024 20:39:25 +0100 Subject: [PATCH 040/378] JS: Make sinkHasPrimaryName public --- .../ql/lib/semmle/javascript/endpoints/EndpointNaming.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll b/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll index 95d3d191a70..791545fe3ce 100644 --- a/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll +++ b/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll @@ -150,7 +150,7 @@ private predicate sinkHasPrimaryName(API::Node sink, string package, string name /** * Holds if `(package, name)` is the primary name to associate with `node`. */ -private predicate sinkHasPrimaryName(API::Node sink, string package, string name) { +predicate sinkHasPrimaryName(API::Node sink, string package, string name) { sinkHasPrimaryName(sink, package, name, _) } From 817d04c0874ac0fe06ac7fdd8ca7d29aa27c1b5d Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 30 Jan 2024 14:27:13 +0100 Subject: [PATCH 041/378] C#: Add more delegate flow tests --- .../dataflow/delegates/DelegateFlow.cs | 26 +++++++++++++++++-- .../dataflow/delegates/DelegateFlow.expected | 8 +++--- 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/csharp/ql/test/library-tests/dataflow/delegates/DelegateFlow.cs b/csharp/ql/test/library-tests/dataflow/delegates/DelegateFlow.cs index 15d628aea9a..1f9c48445dd 100644 --- a/csharp/ql/test/library-tests/dataflow/delegates/DelegateFlow.cs +++ b/csharp/ql/test/library-tests/dataflow/delegates/DelegateFlow.cs @@ -128,9 +128,31 @@ class DelegateFlow void M19(Action a, bool b) { if (b) - a = () => {}; + a = () => { }; a(); } - void M20(bool b) => M19(() => {}, b); + void M20(bool b) => M19(() => { }, b); + + Action Field; + Action Prop2 { get; set; } + + DelegateFlow(Action a, Action b) + { + Field = a; + Prop2 = b; + } + + void M20() + { + new DelegateFlow( + _ => { }, + _ => { } + ); + + this.Field(0); + this.Prop2(0); + Field(0); + Prop2(0); + } } diff --git a/csharp/ql/test/library-tests/dataflow/delegates/DelegateFlow.expected b/csharp/ql/test/library-tests/dataflow/delegates/DelegateFlow.expected index 610ff1f06d9..3197db2cfe7 100644 --- a/csharp/ql/test/library-tests/dataflow/delegates/DelegateFlow.expected +++ b/csharp/ql/test/library-tests/dataflow/delegates/DelegateFlow.expected @@ -22,8 +22,8 @@ delegateCall | DelegateFlow.cs:89:35:89:37 | delegate call | DelegateFlow.cs:93:13:93:21 | (...) => ... | | DelegateFlow.cs:114:9:114:16 | function pointer call | DelegateFlow.cs:7:17:7:18 | M2 | | DelegateFlow.cs:125:9:125:25 | function pointer call | DelegateFlow.cs:7:17:7:18 | M2 | -| DelegateFlow.cs:132:9:132:11 | delegate call | DelegateFlow.cs:131:17:131:24 | (...) => ... | -| DelegateFlow.cs:132:9:132:11 | delegate call | DelegateFlow.cs:135:29:135:36 | (...) => ... | +| DelegateFlow.cs:132:9:132:11 | delegate call | DelegateFlow.cs:131:17:131:25 | (...) => ... | +| DelegateFlow.cs:132:9:132:11 | delegate call | DelegateFlow.cs:135:29:135:37 | (...) => ... | viableLambda | DelegateFlow.cs:9:9:9:12 | delegate call | DelegateFlow.cs:16:9:16:20 | call to method M2 | DelegateFlow.cs:16:12:16:19 | (...) => ... | | DelegateFlow.cs:9:9:9:12 | delegate call | DelegateFlow.cs:17:9:17:14 | call to method M2 | DelegateFlow.cs:5:10:5:11 | M1 | @@ -49,7 +49,7 @@ viableLambda | DelegateFlow.cs:89:35:89:37 | delegate call | DelegateFlow.cs:93:9:93:22 | call to local function M14 | DelegateFlow.cs:93:13:93:21 | (...) => ... | | DelegateFlow.cs:114:9:114:16 | function pointer call | DelegateFlow.cs:119:9:119:28 | call to method M16 | DelegateFlow.cs:7:17:7:18 | M2 | | DelegateFlow.cs:125:9:125:25 | function pointer call | file://:0:0:0:0 | (none) | DelegateFlow.cs:7:17:7:18 | M2 | -| DelegateFlow.cs:132:9:132:11 | delegate call | DelegateFlow.cs:135:25:135:40 | call to method M19 | DelegateFlow.cs:135:29:135:36 | (...) => ... | -| DelegateFlow.cs:132:9:132:11 | delegate call | file://:0:0:0:0 | (none) | DelegateFlow.cs:131:17:131:24 | (...) => ... | +| DelegateFlow.cs:132:9:132:11 | delegate call | DelegateFlow.cs:135:25:135:41 | call to method M19 | DelegateFlow.cs:135:29:135:37 | (...) => ... | +| DelegateFlow.cs:132:9:132:11 | delegate call | file://:0:0:0:0 | (none) | DelegateFlow.cs:131:17:131:25 | (...) => ... | | file://:0:0:0:0 | [summary] call to [summary param] position 0 in Lazy in Lazy | DelegateFlow.cs:105:9:105:24 | object creation of type Lazy | DelegateFlow.cs:104:23:104:30 | (...) => ... | | file://:0:0:0:0 | [summary] call to [summary param] position 0 in Lazy in Lazy | DelegateFlow.cs:107:9:107:24 | object creation of type Lazy | DelegateFlow.cs:106:13:106:20 | (...) => ... | From bfe4a4bf0b4017e094505130bda0183741e4e0d0 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Wed, 31 Jan 2024 11:29:54 +0100 Subject: [PATCH 042/378] C#: Additional tracking of lambdas through fields and properties --- .../DataFlowConsistency.ql | 11 +-- .../dataflow/internal/DataFlowDispatch.qll | 24 ++++-- .../dataflow/internal/DataFlowPrivate.qll | 85 +++++++++++++++++-- .../dataflow/delegates/DelegateFlow.expected | 8 ++ 4 files changed, 105 insertions(+), 23 deletions(-) diff --git a/csharp/ql/consistency-queries/DataFlowConsistency.ql b/csharp/ql/consistency-queries/DataFlowConsistency.ql index e1eb8b15a56..0f9dead6b77 100644 --- a/csharp/ql/consistency-queries/DataFlowConsistency.ql +++ b/csharp/ql/consistency-queries/DataFlowConsistency.ql @@ -7,15 +7,6 @@ private import codeql.dataflow.internal.DataFlowImplConsistency private module Input implements InputSig { private import CsharpDataFlow - predicate uniqueEnclosingCallableExclude(Node n) { - // TODO: Remove once static initializers are folded into the - // static constructors - exists(ControlFlow::Node cfn | - cfn.getAstNode() = any(FieldOrProperty f | f.isStatic()).getAChild+() and - cfn = n.getControlFlowNode() - ) - } - predicate uniqueCallEnclosingCallableExclude(DataFlowCall call) { // TODO: Remove once static initializers are folded into the // static constructors @@ -30,6 +21,8 @@ private module Input implements InputSig { n instanceof ParameterNode or missingLocationExclude(n) + or + n instanceof FlowInsensitiveFieldNode } predicate missingLocationExclude(Node n) { diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowDispatch.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowDispatch.qll index e9782315711..55ad89e03d2 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowDispatch.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowDispatch.qll @@ -98,7 +98,8 @@ private module Cached { cached newtype TDataFlowCallable = TDotNetCallable(DotNet::Callable c) { c.isUnboundDeclaration() } or - TSummarizedCallable(DataFlowSummarizedCallable sc) + TSummarizedCallable(DataFlowSummarizedCallable sc) or + TFieldOrProperty(FieldOrProperty f) cached newtype TDataFlowCall = @@ -247,22 +248,33 @@ class ImplicitCapturedReturnKind extends ReturnKind, TImplicitCapturedReturnKind /** A callable used for data flow. */ class DataFlowCallable extends TDataFlowCallable { - /** Get the underlying source code callable, if any. */ + /** Gets the underlying source code callable, if any. */ DotNet::Callable asCallable() { this = TDotNetCallable(result) } - /** Get the underlying summarized callable, if any. */ + /** Gets the underlying summarized callable, if any. */ FlowSummary::SummarizedCallable asSummarizedCallable() { this = TSummarizedCallable(result) } - /** Get the underlying callable. */ + /** Gets the underlying field or property, if any. */ + FieldOrProperty asFieldOrProperty() { this = TFieldOrProperty(result) } + + /** Gets the underlying callable. */ DotNet::Callable getUnderlyingCallable() { result = this.asCallable() or result = this.asSummarizedCallable() } /** Gets a textual representation of this dataflow callable. */ - string toString() { result = this.getUnderlyingCallable().toString() } + string toString() { + result = this.getUnderlyingCallable().toString() + or + result = this.asFieldOrProperty().toString() + } /** Get the location of this dataflow callable. */ - Location getLocation() { result = this.getUnderlyingCallable().getLocation() } + Location getLocation() { + result = this.getUnderlyingCallable().getLocation() + or + result = this.asFieldOrProperty().getLocation() + } } /** A call relevant for data flow. */ diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll index 6a1c3c589d3..282465a0a9d 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll @@ -69,6 +69,17 @@ abstract class NodeImpl extends Node { abstract string toStringImpl(); } +// TODO: Remove once static initializers are folded into the +// static constructors +private DataFlowCallable getEnclosingStaticFieldOrProperty(Expr e) { + result.asFieldOrProperty() = + any(FieldOrProperty f | + f.isStatic() and + e = f.getAChild+() and + not exists(e.getEnclosingCallable()) + ) +} + private class ExprNodeImpl extends ExprNode, NodeImpl { override DataFlowCallable getEnclosingCallableImpl() { result.asCallable() = @@ -76,6 +87,8 @@ private class ExprNodeImpl extends ExprNode, NodeImpl { this.getExpr().(CIL::Expr).getEnclosingCallable().(DotNet::Callable), this.getControlFlowNodeImpl().getEnclosingCallable() ] + or + result = getEnclosingStaticFieldOrProperty(this.asExpr()) } override DotNet::Type getTypeImpl() { @@ -909,7 +922,8 @@ private module Cached { TFlowSummaryNode(FlowSummaryImpl::Private::SummaryNode sn) or TParamsArgumentNode(ControlFlow::Node callCfn) { callCfn = any(Call c | isParamsArg(c, _, _)).getAControlFlowNode() - } + } or + TFlowInsensitiveFieldNode(FieldOrProperty f) { f.isFieldLike() } /** * Holds if data flows from `nodeFrom` to `nodeTo` in exactly one local @@ -1019,6 +1033,8 @@ predicate nodeIsHidden(Node n) { n instanceof ParamsArgumentNode or n.asExpr() = any(WithExpr we).getInitializer() + or + n instanceof FlowInsensitiveFieldNode } /** A CIL SSA definition, viewed as a node in a data flow graph. */ @@ -1344,6 +1360,8 @@ private module ArgumentNodes { override DataFlowCallable getEnclosingCallableImpl() { result.asCallable() = cfn.getEnclosingCallable() + or + result = getEnclosingStaticFieldOrProperty(cfn.getAstNode()) } override Type getTypeImpl() { result = cfn.getAstNode().(Expr).getType() } @@ -1383,6 +1401,8 @@ private module ArgumentNodes { override DataFlowCallable getEnclosingCallableImpl() { result.asCallable() = callCfn.getEnclosingCallable() + or + result = getEnclosingStaticFieldOrProperty(callCfn.getAstNode()) } override Type getTypeImpl() { result = this.getParameter().getType() } @@ -1782,6 +1802,30 @@ private class FieldOrPropertyRead extends FieldOrPropertyAccess, AssignableRead } } +/** + * A data flow node used for control-flow insensitive flow through fields + * and properties. + * + * In global data flow this is used to model flow through static fields and + * properties, while for lambda flow we additionally use it to track assignments + * in constructors to uses within the same class. + */ +class FlowInsensitiveFieldNode extends NodeImpl, TFlowInsensitiveFieldNode { + private FieldOrProperty f; + + FlowInsensitiveFieldNode() { this = TFlowInsensitiveFieldNode(f) } + + override DataFlowCallable getEnclosingCallableImpl() { result.asFieldOrProperty() = f } + + override Type getTypeImpl() { result = f.getType() } + + override ControlFlow::Node getControlFlowNodeImpl() { none() } + + override Location getLocationImpl() { result = f.getLocation() } + + override string toStringImpl() { result = "[flow-insensitive] " + f } +} + /** * Holds if `pred` can flow to `succ`, by jumping from one callable to * another. Additional steps specified by the configuration are *not* @@ -1790,13 +1834,16 @@ private class FieldOrPropertyRead extends FieldOrPropertyAccess, AssignableRead predicate jumpStep(Node pred, Node succ) { pred.(NonLocalJumpNode).getAJumpSuccessor(true) = succ or - exists(FieldOrProperty fl, FieldOrPropertyRead flr | - fl.isStatic() and - fl.isFieldLike() and - fl.getAnAssignedValue() = pred.asExpr() and - fl.getAnAccess() = flr and - flr = succ.asExpr() and - flr.hasNonlocalValue() + exists(FieldOrProperty f | f.isStatic() | + f.getAnAssignedValue() = pred.asExpr() and + succ = TFlowInsensitiveFieldNode(f) + or + exists(FieldOrPropertyRead fr | + pred = TFlowInsensitiveFieldNode(f) and + f.getAnAccess() = fr and + fr = succ.asExpr() and + fr.hasNonlocalValue() + ) ) or FlowSummaryImpl::Private::Steps::summaryJumpStep(pred.(FlowSummaryNode).getSummaryNode(), @@ -2248,6 +2295,8 @@ module PostUpdateNodes { override DataFlowCallable getEnclosingCallableImpl() { result.asCallable() = cfn.getEnclosingCallable() + or + result = getEnclosingStaticFieldOrProperty(oc) } override DotNet::Type getTypeImpl() { result = oc.getType() } @@ -2279,6 +2328,8 @@ module PostUpdateNodes { override DataFlowCallable getEnclosingCallableImpl() { result.asCallable() = cfn.getEnclosingCallable() + or + result = getEnclosingStaticFieldOrProperty(cfn.getAstNode()) } override Type getTypeImpl() { result = cfn.getAstNode().(Expr).getType() } @@ -2427,6 +2478,24 @@ predicate additionalLambdaFlowStep(Node nodeFrom, Node nodeTo, boolean preserves nodeTo.asExpr().(EventRead).getTarget() = aee.getTarget() and preservesValue = false ) + or + preservesValue = true and + exists(FieldOrProperty f, FieldOrPropertyAccess fa | + fa = f.getAnAccess() and + fa.targetIsLocalInstance() + | + exists(AssignableDefinition def | + def.getTargetAccess() = fa and + nodeFrom.asExpr() = def.getSource() and + nodeTo = TFlowInsensitiveFieldNode(f) and + nodeFrom.getEnclosingCallable() instanceof Constructor + ) + or + nodeFrom = TFlowInsensitiveFieldNode(f) and + f.getAnAccess() = fa and + fa = nodeTo.asExpr() and + fa.(FieldOrPropertyRead).hasNonlocalValue() + ) } /** diff --git a/csharp/ql/test/library-tests/dataflow/delegates/DelegateFlow.expected b/csharp/ql/test/library-tests/dataflow/delegates/DelegateFlow.expected index 3197db2cfe7..c16036e751c 100644 --- a/csharp/ql/test/library-tests/dataflow/delegates/DelegateFlow.expected +++ b/csharp/ql/test/library-tests/dataflow/delegates/DelegateFlow.expected @@ -24,6 +24,10 @@ delegateCall | DelegateFlow.cs:125:9:125:25 | function pointer call | DelegateFlow.cs:7:17:7:18 | M2 | | DelegateFlow.cs:132:9:132:11 | delegate call | DelegateFlow.cs:131:17:131:25 | (...) => ... | | DelegateFlow.cs:132:9:132:11 | delegate call | DelegateFlow.cs:135:29:135:37 | (...) => ... | +| DelegateFlow.cs:153:9:153:21 | delegate call | DelegateFlow.cs:149:13:149:20 | (...) => ... | +| DelegateFlow.cs:154:9:154:21 | delegate call | DelegateFlow.cs:150:13:150:20 | (...) => ... | +| DelegateFlow.cs:155:9:155:16 | delegate call | DelegateFlow.cs:149:13:149:20 | (...) => ... | +| DelegateFlow.cs:156:9:156:16 | delegate call | DelegateFlow.cs:150:13:150:20 | (...) => ... | viableLambda | DelegateFlow.cs:9:9:9:12 | delegate call | DelegateFlow.cs:16:9:16:20 | call to method M2 | DelegateFlow.cs:16:12:16:19 | (...) => ... | | DelegateFlow.cs:9:9:9:12 | delegate call | DelegateFlow.cs:17:9:17:14 | call to method M2 | DelegateFlow.cs:5:10:5:11 | M1 | @@ -51,5 +55,9 @@ viableLambda | DelegateFlow.cs:125:9:125:25 | function pointer call | file://:0:0:0:0 | (none) | DelegateFlow.cs:7:17:7:18 | M2 | | DelegateFlow.cs:132:9:132:11 | delegate call | DelegateFlow.cs:135:25:135:41 | call to method M19 | DelegateFlow.cs:135:29:135:37 | (...) => ... | | DelegateFlow.cs:132:9:132:11 | delegate call | file://:0:0:0:0 | (none) | DelegateFlow.cs:131:17:131:25 | (...) => ... | +| DelegateFlow.cs:153:9:153:21 | delegate call | file://:0:0:0:0 | (none) | DelegateFlow.cs:149:13:149:20 | (...) => ... | +| DelegateFlow.cs:154:9:154:21 | delegate call | file://:0:0:0:0 | (none) | DelegateFlow.cs:150:13:150:20 | (...) => ... | +| DelegateFlow.cs:155:9:155:16 | delegate call | file://:0:0:0:0 | (none) | DelegateFlow.cs:149:13:149:20 | (...) => ... | +| DelegateFlow.cs:156:9:156:16 | delegate call | file://:0:0:0:0 | (none) | DelegateFlow.cs:150:13:150:20 | (...) => ... | | file://:0:0:0:0 | [summary] call to [summary param] position 0 in Lazy in Lazy | DelegateFlow.cs:105:9:105:24 | object creation of type Lazy | DelegateFlow.cs:104:23:104:30 | (...) => ... | | file://:0:0:0:0 | [summary] call to [summary param] position 0 in Lazy in Lazy | DelegateFlow.cs:107:9:107:24 | object creation of type Lazy | DelegateFlow.cs:106:13:106:20 | (...) => ... | From 9098428c2ac5cf83eb0e8e4a7ba13698bbd187aa Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Thu, 1 Feb 2024 14:28:14 +0000 Subject: [PATCH 043/378] Add security severity --- .../Security/CWE/CWE-287/AndroidInsecureLocalAuthentication.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/ql/src/Security/CWE/CWE-287/AndroidInsecureLocalAuthentication.ql b/java/ql/src/Security/CWE/CWE-287/AndroidInsecureLocalAuthentication.ql index 22f4582fec3..57f256bb40d 100644 --- a/java/ql/src/Security/CWE/CWE-287/AndroidInsecureLocalAuthentication.ql +++ b/java/ql/src/Security/CWE/CWE-287/AndroidInsecureLocalAuthentication.ql @@ -3,7 +3,7 @@ * @description Local authentication that does not make use of a `CryptoObject` can be bypassed. * @kind problem * @problem.severity warning - * @security-severity ...TODO + * @security-severity 9.3 * @precision high * @id java/android/insecure-local-authentication * @tags security From 5d1edd45c5191086dd3c6190ae28a3518dd0ea90 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Thu, 1 Feb 2024 16:56:20 +0000 Subject: [PATCH 044/378] Add unit tests --- .../CWE-287/InsecureLocalAuth.expected | 2 + .../security/CWE-287/InsecureLocalAuth.ql | 19 ++++ .../query-tests/security/CWE-287/Test.java | 94 +++++++++++++++++++ .../test/query-tests/security/CWE-287/options | 1 + 4 files changed, 116 insertions(+) create mode 100644 java/ql/test/query-tests/security/CWE-287/InsecureLocalAuth.expected create mode 100644 java/ql/test/query-tests/security/CWE-287/InsecureLocalAuth.ql create mode 100644 java/ql/test/query-tests/security/CWE-287/Test.java create mode 100644 java/ql/test/query-tests/security/CWE-287/options diff --git a/java/ql/test/query-tests/security/CWE-287/InsecureLocalAuth.expected b/java/ql/test/query-tests/security/CWE-287/InsecureLocalAuth.expected new file mode 100644 index 00000000000..8ec8033d086 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-287/InsecureLocalAuth.expected @@ -0,0 +1,2 @@ +testFailures +failures diff --git a/java/ql/test/query-tests/security/CWE-287/InsecureLocalAuth.ql b/java/ql/test/query-tests/security/CWE-287/InsecureLocalAuth.ql new file mode 100644 index 00000000000..36becaff755 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-287/InsecureLocalAuth.ql @@ -0,0 +1,19 @@ +import java +import TestUtilities.InlineExpectationsTest +import semmle.code.java.dataflow.DataFlow +import semmle.code.java.security.AndroidLocalAuthQuery + +module InsecureAuthTest implements TestSig { + string getARelevantTag() { result = "insecure-auth" } + + predicate hasActualResult(Location location, string element, string tag, string value) { + tag = "insecure-auth" and + exists(AuthenticationSuccessCallback cb | not exists(cb.getAResultUse()) | + cb.getLocation() = location and + element = cb.toString() and + value = "" + ) + } +} + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-287/Test.java b/java/ql/test/query-tests/security/CWE-287/Test.java new file mode 100644 index 00000000000..e4317efd615 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-287/Test.java @@ -0,0 +1,94 @@ +import android.hardware.biometrics.BiometricPrompt; +import android.hardware.fingerprint.FingerprintManager; + +class TestA { + public static void useKey(BiometricPrompt.CryptoObject key) {} + + + // GOOD: result is used + class Test1 extends BiometricPrompt.AuthenticationCallback { + @Override + public void onAuthenticationSucceeded(BiometricPrompt.AuthenticationResult result) { + TestA.useKey(result.getCryptoObject()); + } + } + + // BAD: result is not used + class Test2 extends BiometricPrompt.AuthenticationCallback { + @Override + public void onAuthenticationSucceeded(BiometricPrompt.AuthenticationResult result) { // $insecure-auth + + } + } + + // BAD: result is only used in a super call + class Test3 extends BiometricPrompt.AuthenticationCallback { + @Override + public void onAuthenticationSucceeded(BiometricPrompt.AuthenticationResult result) { // $insecure-auth + super.onAuthenticationSucceeded(result); + } + } + + // GOOD: result is used + class Test4 extends BiometricPrompt.AuthenticationCallback { + @Override + public void onAuthenticationSucceeded(BiometricPrompt.AuthenticationResult result) { + super.onAuthenticationSucceeded(result); + TestA.useKey(result.getCryptoObject()); + } + } + + // GOOD: result is used in a super call to a class other than the base class + class Test5 extends Test1 { + @Override + public void onAuthenticationSucceeded(BiometricPrompt.AuthenticationResult result) { + super.onAuthenticationSucceeded(result); + } + } +} + +class TestB { + public static void useKey(FingerprintManager.CryptoObject key) {} + + + // GOOD: result is used + class Test1 extends FingerprintManager.AuthenticationCallback { + @Override + public void onAuthenticationSucceeded(FingerprintManager.AuthenticationResult result) { + TestB.useKey(result.getCryptoObject()); + } + } + + // BAD: result is not used + class Test2 extends FingerprintManager.AuthenticationCallback { + @Override + public void onAuthenticationSucceeded(FingerprintManager.AuthenticationResult result) { // $insecure-auth + + } + } + + // BAD: result is only used in a super call + class Test3 extends FingerprintManager.AuthenticationCallback { + @Override + public void onAuthenticationSucceeded(FingerprintManager.AuthenticationResult result) { // $insecure-auth + super.onAuthenticationSucceeded(result); + } + } + + // GOOD: result is used + class Test4 extends FingerprintManager.AuthenticationCallback { + @Override + public void onAuthenticationSucceeded(FingerprintManager.AuthenticationResult result) { + super.onAuthenticationSucceeded(result); + TestB.useKey(result.getCryptoObject()); + } + } + + // GOOD: result is used in a super call to a class other than the base class + class Test5 extends Test1 { + @Override + public void onAuthenticationSucceeded(FingerprintManager.AuthenticationResult result) { + super.onAuthenticationSucceeded(result); + } + } +} \ No newline at end of file diff --git a/java/ql/test/query-tests/security/CWE-287/options b/java/ql/test/query-tests/security/CWE-287/options new file mode 100644 index 00000000000..dacd3cb21df --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-287/options @@ -0,0 +1 @@ +//semmle-extractor-options: --javac-args -cp ${testdir}/../../../stubs/google-android-9.0.0 From 88c2ccbecf3371fa1ff04bb9b747e514f40cc21b Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Thu, 1 Feb 2024 16:59:50 +0000 Subject: [PATCH 045/378] Generate stubs --- .../hardware/biometrics/BiometricPrompt.java | 69 +++++++++++++++++++ .../fingerprint/FingerprintManager.java | 55 +++++++++++++++ .../android/os/Bundle.java | 4 +- .../android/os/Parcel.java | 22 +++--- .../security/identity/IdentityCredential.java | 32 +++++++++ .../identity/PersonalizationData.java | 9 +++ .../android/security/identity/ResultData.java | 24 +++++++ .../android/util/ArrayMap.java | 10 +-- 8 files changed, 207 insertions(+), 18 deletions(-) create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/hardware/biometrics/BiometricPrompt.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/hardware/fingerprint/FingerprintManager.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/security/identity/IdentityCredential.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/security/identity/PersonalizationData.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/security/identity/ResultData.java diff --git a/java/ql/test/stubs/google-android-9.0.0/android/hardware/biometrics/BiometricPrompt.java b/java/ql/test/stubs/google-android-9.0.0/android/hardware/biometrics/BiometricPrompt.java new file mode 100644 index 00000000000..7bc467401bd --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/hardware/biometrics/BiometricPrompt.java @@ -0,0 +1,69 @@ +// Generated automatically from android.hardware.biometrics.BiometricPrompt for testing purposes + +package android.hardware.biometrics; + +import android.os.CancellationSignal; +import android.security.identity.IdentityCredential; +import java.security.Signature; +import java.util.concurrent.Executor; +import javax.crypto.Cipher; +import javax.crypto.Mac; + +public class BiometricPrompt +{ + protected BiometricPrompt() {} + abstract static public class AuthenticationCallback + { + public AuthenticationCallback(){} + public void onAuthenticationError(int p0, CharSequence p1){} + public void onAuthenticationFailed(){} + public void onAuthenticationHelp(int p0, CharSequence p1){} + public void onAuthenticationSucceeded(BiometricPrompt.AuthenticationResult p0){} + } + public CharSequence getDescription(){ return null; } + public CharSequence getNegativeButtonText(){ return null; } + public CharSequence getSubtitle(){ return null; } + public CharSequence getTitle(){ return null; } + public boolean isConfirmationRequired(){ return false; } + public int getAllowedAuthenticators(){ return 0; } + public static int AUTHENTICATION_RESULT_TYPE_BIOMETRIC = 0; + public static int AUTHENTICATION_RESULT_TYPE_DEVICE_CREDENTIAL = 0; + public static int BIOMETRIC_ACQUIRED_GOOD = 0; + public static int BIOMETRIC_ACQUIRED_IMAGER_DIRTY = 0; + public static int BIOMETRIC_ACQUIRED_INSUFFICIENT = 0; + public static int BIOMETRIC_ACQUIRED_PARTIAL = 0; + public static int BIOMETRIC_ACQUIRED_TOO_FAST = 0; + public static int BIOMETRIC_ACQUIRED_TOO_SLOW = 0; + public static int BIOMETRIC_ERROR_CANCELED = 0; + public static int BIOMETRIC_ERROR_HW_NOT_PRESENT = 0; + public static int BIOMETRIC_ERROR_HW_UNAVAILABLE = 0; + public static int BIOMETRIC_ERROR_LOCKOUT = 0; + public static int BIOMETRIC_ERROR_LOCKOUT_PERMANENT = 0; + public static int BIOMETRIC_ERROR_NO_BIOMETRICS = 0; + public static int BIOMETRIC_ERROR_NO_DEVICE_CREDENTIAL = 0; + public static int BIOMETRIC_ERROR_NO_SPACE = 0; + public static int BIOMETRIC_ERROR_SECURITY_UPDATE_REQUIRED = 0; + public static int BIOMETRIC_ERROR_TIMEOUT = 0; + public static int BIOMETRIC_ERROR_UNABLE_TO_PROCESS = 0; + public static int BIOMETRIC_ERROR_USER_CANCELED = 0; + public static int BIOMETRIC_ERROR_VENDOR = 0; + public void authenticate(BiometricPrompt.CryptoObject p0, CancellationSignal p1, Executor p2, BiometricPrompt.AuthenticationCallback p3){} + public void authenticate(CancellationSignal p0, Executor p1, BiometricPrompt.AuthenticationCallback p2){} + static public class AuthenticationResult + { + public BiometricPrompt.CryptoObject getCryptoObject(){ return null; } + public int getAuthenticationType(){ return 0; } + } + static public class CryptoObject + { + protected CryptoObject() {} + public Cipher getCipher(){ return null; } + public CryptoObject(Cipher p0){} + public CryptoObject(IdentityCredential p0){} + public CryptoObject(Mac p0){} + public CryptoObject(Signature p0){} + public IdentityCredential getIdentityCredential(){ return null; } + public Mac getMac(){ return null; } + public Signature getSignature(){ return null; } + } +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/hardware/fingerprint/FingerprintManager.java b/java/ql/test/stubs/google-android-9.0.0/android/hardware/fingerprint/FingerprintManager.java new file mode 100644 index 00000000000..235941fb9f4 --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/hardware/fingerprint/FingerprintManager.java @@ -0,0 +1,55 @@ +// Generated automatically from android.hardware.fingerprint.FingerprintManager for testing purposes + +package android.hardware.fingerprint; + +import android.os.CancellationSignal; +import android.os.Handler; +import java.security.Signature; +import javax.crypto.Cipher; +import javax.crypto.Mac; + +public class FingerprintManager +{ + abstract static public class AuthenticationCallback + { + public AuthenticationCallback(){} + public void onAuthenticationError(int p0, CharSequence p1){} + public void onAuthenticationFailed(){} + public void onAuthenticationHelp(int p0, CharSequence p1){} + public void onAuthenticationSucceeded(FingerprintManager.AuthenticationResult p0){} + } + public boolean hasEnrolledFingerprints(){ return false; } + public boolean isHardwareDetected(){ return false; } + public static int FINGERPRINT_ACQUIRED_GOOD = 0; + public static int FINGERPRINT_ACQUIRED_IMAGER_DIRTY = 0; + public static int FINGERPRINT_ACQUIRED_INSUFFICIENT = 0; + public static int FINGERPRINT_ACQUIRED_PARTIAL = 0; + public static int FINGERPRINT_ACQUIRED_TOO_FAST = 0; + public static int FINGERPRINT_ACQUIRED_TOO_SLOW = 0; + public static int FINGERPRINT_ERROR_CANCELED = 0; + public static int FINGERPRINT_ERROR_HW_NOT_PRESENT = 0; + public static int FINGERPRINT_ERROR_HW_UNAVAILABLE = 0; + public static int FINGERPRINT_ERROR_LOCKOUT = 0; + public static int FINGERPRINT_ERROR_LOCKOUT_PERMANENT = 0; + public static int FINGERPRINT_ERROR_NO_FINGERPRINTS = 0; + public static int FINGERPRINT_ERROR_NO_SPACE = 0; + public static int FINGERPRINT_ERROR_TIMEOUT = 0; + public static int FINGERPRINT_ERROR_UNABLE_TO_PROCESS = 0; + public static int FINGERPRINT_ERROR_USER_CANCELED = 0; + public static int FINGERPRINT_ERROR_VENDOR = 0; + public void authenticate(FingerprintManager.CryptoObject p0, CancellationSignal p1, int p2, FingerprintManager.AuthenticationCallback p3, Handler p4){} + static public class AuthenticationResult + { + public FingerprintManager.CryptoObject getCryptoObject(){ return null; } + } + static public class CryptoObject + { + protected CryptoObject() {} + public Cipher getCipher(){ return null; } + public CryptoObject(Cipher p0){} + public CryptoObject(Mac p0){} + public CryptoObject(Signature p0){} + public Mac getMac(){ return null; } + public Signature getSignature(){ return null; } + } +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/os/Bundle.java b/java/ql/test/stubs/google-android-9.0.0/android/os/Bundle.java index 4beb1cf5dee..d1154c915ce 100644 --- a/java/ql/test/stubs/google-android-9.0.0/android/os/Bundle.java +++ b/java/ql/test/stubs/google-android-9.0.0/android/os/Bundle.java @@ -15,9 +15,9 @@ import java.util.ArrayList; public class Bundle extends BaseBundle implements Cloneable, Parcelable { - public ArrayList getParcelableArrayList(String p0){ return null; } - public SparseArray getSparseParcelableArray(String p0){ return null; } public T getParcelable(String p0){ return null; } + public android.util.SparseArray getSparseParcelableArray(String p0){ return null; } + public java.util.ArrayList getParcelableArrayList(String p0){ return null; } public ArrayList getCharSequenceArrayList(String p0){ return null; } public ArrayList getIntegerArrayList(String p0){ return null; } public ArrayList getStringArrayList(String p0){ return null; } diff --git a/java/ql/test/stubs/google-android-9.0.0/android/os/Parcel.java b/java/ql/test/stubs/google-android-9.0.0/android/os/Parcel.java index ef6dcdeb085..9bf19e32269 100644 --- a/java/ql/test/stubs/google-android-9.0.0/android/os/Parcel.java +++ b/java/ql/test/stubs/google-android-9.0.0/android/os/Parcel.java @@ -24,24 +24,24 @@ public class Parcel { protected Parcel() {} protected void finalize(){} - public ArrayMap createTypedArrayMap(Parcelable.Creator p0){ return null; } - public List readParcelableList(List p0, ClassLoader p1){ return null; } - public SparseArray createTypedSparseArray(Parcelable.Creator p0){ return null; } public T readParcelable(ClassLoader p0){ return null; } + public android.util.ArrayMap createTypedArrayMap(Parcelable.Creator p0){ return null; } + public android.util.SparseArray createTypedSparseArray(Parcelable.Creator p0){ return null; } + public java.util.List readParcelableList(java.util.List p0, ClassLoader p1){ return null; } public void writeParcelableArray(T[] p0, int p1){} - public void writeParcelableList(List p0, int p1){} + public void writeParcelableList(java.util.List p0, int p1){} public void writeTypedArray(T[] p0, int p1){} - public void writeTypedArrayMap(ArrayMap p0, int p1){} - public void writeTypedList(List p0){} + public void writeTypedArrayMap(android.util.ArrayMap p0, int p1){} + public void writeTypedList(java.util.List p0){} public void writeTypedObject(T p0, int p1){} - public void writeTypedSparseArray(SparseArray p0, int p1){} - public ArrayList createTypedArrayList(Parcelable.Creator p0){ return null; } - public SparseArray readSparseArray(ClassLoader p0){ return null; } + public void writeTypedSparseArray(android.util.SparseArray p0, int p1){} public T readTypedObject(Parcelable.Creator p0){ return null; } public T[] createTypedArray(Parcelable.Creator p0){ return null; } + public android.util.SparseArray readSparseArray(ClassLoader p0){ return null; } + public java.util.ArrayList createTypedArrayList(Parcelable.Creator p0){ return null; } public void readTypedArray(T[] p0, Parcelable.Creator p1){} - public void readTypedList(List p0, Parcelable.Creator p1){} - public void writeSparseArray(SparseArray p0){} + public void readTypedList(java.util.List p0, Parcelable.Creator p1){} + public void writeSparseArray(android.util.SparseArray p0){} public ArrayList readArrayList(ClassLoader p0){ return null; } public ArrayList createBinderArrayList(){ return null; } public ArrayList createStringArrayList(){ return null; } diff --git a/java/ql/test/stubs/google-android-9.0.0/android/security/identity/IdentityCredential.java b/java/ql/test/stubs/google-android-9.0.0/android/security/identity/IdentityCredential.java new file mode 100644 index 00000000000..12dee91453c --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/security/identity/IdentityCredential.java @@ -0,0 +1,32 @@ +// Generated automatically from android.security.identity.IdentityCredential for testing purposes + +package android.security.identity; + +import android.security.identity.PersonalizationData; +import android.security.identity.ResultData; +import java.security.KeyPair; +import java.security.PublicKey; +import java.security.cert.X509Certificate; +import java.time.Instant; +import java.util.Collection; +import java.util.Map; + +abstract public class IdentityCredential +{ + public abstract Collection getAuthKeysNeedingCertification(); + public abstract Collection getCredentialKeyCertificateChain(); + public abstract KeyPair createEphemeralKeyPair(); + public abstract ResultData getEntries(byte[] p0, Map> p1, byte[] p2, byte[] p3); + public abstract byte[] decryptMessageFromReader(byte[] p0); + public abstract byte[] encryptMessageToReader(byte[] p0); + public abstract int[] getAuthenticationDataUsageCount(); + public abstract void setAllowUsingExhaustedKeys(boolean p0); + public abstract void setAvailableAuthenticationKeys(int p0, int p1); + public abstract void setReaderEphemeralPublicKey(PublicKey p0); + public abstract void storeStaticAuthenticationData(X509Certificate p0, byte[] p1); + public byte[] delete(byte[] p0){ return null; } + public byte[] proveOwnership(byte[] p0){ return null; } + public byte[] update(PersonalizationData p0){ return null; } + public void setAllowUsingExpiredKeys(boolean p0){} + public void storeStaticAuthenticationData(X509Certificate p0, Instant p1, byte[] p2){} +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/security/identity/PersonalizationData.java b/java/ql/test/stubs/google-android-9.0.0/android/security/identity/PersonalizationData.java new file mode 100644 index 00000000000..eecfc828c56 --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/security/identity/PersonalizationData.java @@ -0,0 +1,9 @@ +// Generated automatically from android.security.identity.PersonalizationData for testing purposes + +package android.security.identity; + + +public class PersonalizationData +{ + protected PersonalizationData() {} +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/security/identity/ResultData.java b/java/ql/test/stubs/google-android-9.0.0/android/security/identity/ResultData.java new file mode 100644 index 00000000000..e8ed2f13012 --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/security/identity/ResultData.java @@ -0,0 +1,24 @@ +// Generated automatically from android.security.identity.ResultData for testing purposes + +package android.security.identity; + +import java.util.Collection; + +abstract public class ResultData +{ + public abstract Collection getEntryNames(String p0); + public abstract Collection getNamespaces(); + public abstract Collection getRetrievedEntryNames(String p0); + public abstract byte[] getAuthenticatedData(); + public abstract byte[] getEntry(String p0, String p1); + public abstract byte[] getMessageAuthenticationCode(); + public abstract byte[] getStaticAuthenticationData(); + public abstract int getStatus(String p0, String p1); + public static int STATUS_NOT_IN_REQUEST_MESSAGE = 0; + public static int STATUS_NOT_REQUESTED = 0; + public static int STATUS_NO_ACCESS_CONTROL_PROFILES = 0; + public static int STATUS_NO_SUCH_ENTRY = 0; + public static int STATUS_OK = 0; + public static int STATUS_READER_AUTHENTICATION_FAILED = 0; + public static int STATUS_USER_AUTHENTICATION_FAILED = 0; +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/util/ArrayMap.java b/java/ql/test/stubs/google-android-9.0.0/android/util/ArrayMap.java index 55c7adebea7..c0b6016c764 100644 --- a/java/ql/test/stubs/google-android-9.0.0/android/util/ArrayMap.java +++ b/java/ql/test/stubs/google-android-9.0.0/android/util/ArrayMap.java @@ -6,15 +6,12 @@ import java.util.Collection; import java.util.Map; import java.util.Set; -public class ArrayMap implements Map +public class ArrayMap implements java.util.Map { public ArrayMap(){} public ArrayMap(ArrayMap p0){} public ArrayMap(int p0){} - public Collection values(){ return null; } public K keyAt(int p0){ return null; } - public Set keySet(){ return null; } - public Set> entrySet(){ return null; } public String toString(){ return null; } public V get(Object p0){ return null; } public V put(K p0, V p1){ return null; } @@ -33,8 +30,11 @@ public class ArrayMap implements Map public int indexOfKey(Object p0){ return 0; } public int indexOfValue(Object p0){ return 0; } public int size(){ return 0; } + public java.util.Collection values(){ return null; } + public java.util.Set keySet(){ return null; } + public java.util.Set> entrySet(){ return null; } public void clear(){} public void ensureCapacity(int p0){} public void putAll(ArrayMap p0){} - public void putAll(Map p0){} + public void putAll(java.util.Map p0){} } From 8a2485a22f7000ca7842547a7b769a3c4782ee34 Mon Sep 17 00:00:00 2001 From: Asger F Date: Thu, 1 Feb 2024 20:54:27 +0100 Subject: [PATCH 046/378] JS: Address some comments --- .../ql/lib/semmle/javascript/endpoints/EndpointNaming.qll | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll b/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll index 791545fe3ce..c01683535cf 100644 --- a/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll +++ b/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll @@ -8,7 +8,7 @@ * However, there are cases where classes and functions can be exposed to client * code without being accessible as a qualified name. For example; * ```js - * // 'Foo' is internal, but clients can reach its methods via `getFoo().m()` + * // 'Foo' is internal, but clients can call its methods, e.g. `getFoo().m()` * class Foo { * m() {} * } @@ -16,7 +16,7 @@ * return new Foo(); * } * - * // Clients can reach m() via getObj().m() + * // Clients can call m() via getObj().m() * export function getObj() { * return { * m() {} From 2a00375bb7fdc980b82cb6a03a7273f0998949a3 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Fri, 2 Feb 2024 14:34:43 +0000 Subject: [PATCH 047/378] Add documentation --- .../AndroidInsecureLocalAuthentication.qhelp | 42 ++++++++++++++++ ...AndroidInsecureLocalAuthenticationBad.java | 11 +++++ ...ndroidInsecureLocalAuthenticationGood.java | 48 +++++++++++++++++++ 3 files changed, 101 insertions(+) create mode 100644 java/ql/src/Security/CWE/CWE-287/AndroidInsecureLocalAuthentication.qhelp create mode 100644 java/ql/src/Security/CWE/CWE-287/AndroidInsecureLocalAuthenticationBad.java create mode 100644 java/ql/src/Security/CWE/CWE-287/AndroidInsecureLocalAuthenticationGood.java diff --git a/java/ql/src/Security/CWE/CWE-287/AndroidInsecureLocalAuthentication.qhelp b/java/ql/src/Security/CWE/CWE-287/AndroidInsecureLocalAuthentication.qhelp new file mode 100644 index 00000000000..15e6783d2dc --- /dev/null +++ b/java/ql/src/Security/CWE/CWE-287/AndroidInsecureLocalAuthentication.qhelp @@ -0,0 +1,42 @@ + + + + +

    +Biometric local authentication such as fingerprint recognistion can be used to protect sensitive data or actions within an application. +However, if this authentication does not make use of a KeyStore-backed key, it is able to be bypassed by a privileged malicious application or an attacker with physical access. +

    +
    + + +

    +Generate a secure key in the Android KeyStore and ensure that the onAuthenticaionSuccess callback for a biometric prompt uses it +in a way that is required for the sensitive parts of the application to function, such as by using it to decrypt sensitive data or credentials. +

    +
    + + +

    In the following (bad) case, no CryptoObject is required for the biometric prompt to grant access, so it can be bypassed.

    + +

    In he following (good) case, a secret key is generated in the Android KeyStore that is required for the application to grant access.

    + +
    + + +
  • +OWASP Mobile Application Security: Android Local Authentication +
  • +
  • +OWASP Mobile Application Security: Testing Biometric Authentication +
  • +
  • +WithSecure: How Secure is your Android Keystore Authentication? +
  • +
  • +Android Developers: Biometric Authentication +
  • + +
    +
    diff --git a/java/ql/src/Security/CWE/CWE-287/AndroidInsecureLocalAuthenticationBad.java b/java/ql/src/Security/CWE/CWE-287/AndroidInsecureLocalAuthenticationBad.java new file mode 100644 index 00000000000..464153ccbee --- /dev/null +++ b/java/ql/src/Security/CWE/CWE-287/AndroidInsecureLocalAuthenticationBad.java @@ -0,0 +1,11 @@ +biometricPrompt.authenticate( + cancellationSignal, + executor, + new BiometricPrompt.AuthenticationCallback { + @Override + // BAD: This authentication callback does not make use of a `CryptoObject` from the `result`. + public void onAuthenticationSucceeded(BiometricPrompt.AuthenticationResult result) { + grantAccess() + } + } +) \ No newline at end of file diff --git a/java/ql/src/Security/CWE/CWE-287/AndroidInsecureLocalAuthenticationGood.java b/java/ql/src/Security/CWE/CWE-287/AndroidInsecureLocalAuthenticationGood.java new file mode 100644 index 00000000000..0f41b31a292 --- /dev/null +++ b/java/ql/src/Security/CWE/CWE-287/AndroidInsecureLocalAuthenticationGood.java @@ -0,0 +1,48 @@ +private void generateSecretKey() { + KeyGenParameterSpec keyGenParameterSpec = new KeyGenParameterSpec.Builder( + "MySecretKey", + KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT) + .setBlockModes(KeyProperties.BLOCK_MODE_CBC) + .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_PKCS7) + .setUserAuthenticationRequired(true) + .setInvalidatedByBiometricEnrollment(true) + .build(); + KeyGenerator keyGenerator = KeyGenerator.getInstance( + KeyProperties.KEY_ALGORITHM_AES, "AndroidKeyStore"); + keyGenerator.init(keyGenParameterSpec); + keyGenerator.generateKey(); +} + + +private SecretKey getSecretKey() { + KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore"); + keyStore.load(null); + return ((SecretKey)keyStore.getKey("MySecretKey", null)); +} + +private Cipher getCipher() { + return Cipher.getInstance(KeyProperties.KEY_ALGORITHM_AES + "/" + + KeyProperties.BLOCK_MODE_CBC + "/" + + KeyProperties.ENCRYPTION_PADDING_PKCS7); +} + +public prompt() { + Cipher cipher = getCipher(); + SecretKey secretKey = getSecretKey(); + cipher.init(Cipher.DECRYPT_MODE, secretKey); + + biometricPrompt.authenticate( + new BiometricPrompt.CryptoObject(cipher); + cancellationSignal, + executor, + new BiometricPrompt.AuthenticationCallback { + @Override + // GOOD: This authentication callback uses the result to decrypt some data. + public void onAuthenticationSucceeded(BiometricPrompt.AuthenticationResult result) { + Cipher cipher = result.getCryptoObject().getCipher(); + byte[] decryptedData = cipher.doFinal(encryptedData); + grantAccessWithData(decryptedData); + } + } + ); +} \ No newline at end of file From 514a92d5bd1e24e4b7367d64430762ffd1ffbe7f Mon Sep 17 00:00:00 2001 From: Nick Rolfe Date: Wed, 1 Nov 2023 22:33:21 +0000 Subject: [PATCH 048/378] Tree-sitter extractors: use fresh IDs for locations Since locations for any given source file are never referenced in any TRAP files besides the one for that particular source file, it's not necessary to use global IDs. Using fresh IDs will reduce the size of the ID pool (both on disk and in memory) and the speed of multi-threaded TRAP import. The one exception is the empty location, which still uses a global ID. --- .../src/extractor/mod.rs | 128 ++++++++++++------ shared/tree-sitter-extractor/src/trap.rs | 22 +++ 2 files changed, 105 insertions(+), 45 deletions(-) diff --git a/shared/tree-sitter-extractor/src/extractor/mod.rs b/shared/tree-sitter-extractor/src/extractor/mod.rs index 913e637d92b..0d493ebd9e1 100644 --- a/shared/tree-sitter-extractor/src/extractor/mod.rs +++ b/shared/tree-sitter-extractor/src/extractor/mod.rs @@ -43,7 +43,16 @@ fn populate_empty_file(writer: &mut trap::Writer) -> trap::Label { pub fn populate_empty_location(writer: &mut trap::Writer) { let file_label = populate_empty_file(writer); - location(writer, file_label, 0, 0, 0, 0); + global_location( + writer, + file_label, + trap::Location { + start_line: 0, + start_column: 0, + end_line: 0, + end_column: 0, + }, + ); } pub fn populate_parent_folders( @@ -85,17 +94,19 @@ pub fn populate_parent_folders( } } -fn location( +/** Get the label for the given location, defining it a global ID if it doesn't exist yet. */ +fn global_location( writer: &mut trap::Writer, file_label: trap::Label, - start_line: usize, - start_column: usize, - end_line: usize, - end_column: usize, + location: trap::Location, ) -> trap::Label { let (loc_label, fresh) = writer.global_id(&format!( "loc,{{{}}},{},{},{},{}", - file_label, start_line, start_column, end_line, end_column + file_label, + location.start_line, + location.start_column, + location.end_line, + location.end_column )); if fresh { writer.add_tuple( @@ -103,10 +114,34 @@ fn location( vec![ trap::Arg::Label(loc_label), trap::Arg::Label(file_label), - trap::Arg::Int(start_line), - trap::Arg::Int(start_column), - trap::Arg::Int(end_line), - trap::Arg::Int(end_column), + trap::Arg::Int(location.start_line), + trap::Arg::Int(location.start_column), + trap::Arg::Int(location.end_line), + trap::Arg::Int(location.end_column), + ], + ); + } + loc_label +} + +/** Get the label for the given location, creating it as a fresh ID if we haven't seen the location + * yet for this file. */ +fn location_label( + writer: &mut trap::Writer, + file_label: trap::Label, + location: trap::Location, +) -> trap::Label { + let (loc_label, fresh) = writer.location_label(location); + if fresh { + writer.add_tuple( + "locations_default", + vec![ + trap::Arg::Label(loc_label), + trap::Arg::Label(file_label), + trap::Arg::Int(location.start_line), + trap::Arg::Int(location.start_column), + trap::Arg::Int(location.end_line), + trap::Arg::Int(location.end_column), ], ); } @@ -245,26 +280,25 @@ impl<'a> Visitor<'a> { node: Node, status_page: bool, ) { - let (start_line, start_column, end_line, end_column) = location_for(self, node); - let loc = location( - self.trap_writer, - self.file_label, - start_line, - start_column, - end_line, - end_column, - ); + let loc = location_for(self, node); + let loc_label = location_label(self.trap_writer, self.file_label, loc); let mut mesg = self.diagnostics_writer.new_entry( "parse-error", "Could not process some files due to syntax errors", ); mesg.severity(diagnostics::Severity::Warning) - .location(self.path, start_line, start_column, end_line, end_column) + .location( + self.path, + loc.start_line, + loc.start_column, + loc.end_line, + loc.end_column, + ) .message(message, args); if status_page { mesg.status_page(); } - self.record_parse_error(loc, &mesg); + self.record_parse_error(loc_label, &mesg); } fn enter_node(&mut self, node: Node) -> bool { @@ -298,15 +332,8 @@ impl<'a> Visitor<'a> { return; } let (id, _, child_nodes) = self.stack.pop().expect("Vistor: empty stack"); - let (start_line, start_column, end_line, end_column) = location_for(self, node); - let loc = location( - self.trap_writer, - self.file_label, - start_line, - start_column, - end_line, - end_column, - ); + let loc = location_for(self, node); + let loc_label = location_label(self.trap_writer, self.file_label, loc); let table = self .schema .get(&TypeName { @@ -333,7 +360,7 @@ impl<'a> Visitor<'a> { trap::Arg::Label(id), trap::Arg::Label(parent_id), trap::Arg::Int(parent_index), - trap::Arg::Label(loc), + trap::Arg::Label(loc_label), ], ); self.trap_writer.add_tuple( @@ -356,7 +383,7 @@ impl<'a> Visitor<'a> { trap::Arg::Label(id), trap::Arg::Label(parent_id), trap::Arg::Int(parent_index), - trap::Arg::Label(loc), + trap::Arg::Label(loc_label), ], ); let mut all_args = vec![trap::Arg::Label(id)]; @@ -366,14 +393,20 @@ impl<'a> Visitor<'a> { } _ => { self.record_parse_error( - loc, + loc_label, self.diagnostics_writer .new_entry( "parse-error", "Could not process some files due to syntax errors", ) .severity(diagnostics::Severity::Warning) - .location(self.path, start_line, start_column, end_line, end_column) + .location( + self.path, + loc.start_line, + loc.start_column, + loc.end_line, + loc.end_column, + ) .message( "Unknown table type: {}", &[diagnostics::MessageArg::Code(node.kind())], @@ -555,7 +588,7 @@ fn sliced_source_arg(source: &[u8], n: Node) -> trap::Arg { // Emit a pair of `TrapEntry`s for the provided node, appropriately calibrated. // The first is the location and label definition, and the second is the // 'Located' entry. -fn location_for(visitor: &mut Visitor, n: Node) -> (usize, usize, usize, usize) { +fn location_for(visitor: &mut Visitor, n: Node) -> trap::Location { // Tree-sitter row, column values are 0-based while CodeQL starts // counting at 1. In addition Tree-sitter's row and column for the // end position are exclusive while CodeQL's end positions are inclusive. @@ -565,16 +598,16 @@ fn location_for(visitor: &mut Visitor, n: Node) -> (usize, usize, usize, usize) // the end column is 0 (start of a line). In such cases the end position must be // set to the end of the previous line. let start_line = n.start_position().row + 1; - let start_col = n.start_position().column + 1; + let start_column = n.start_position().column + 1; let mut end_line = n.end_position().row + 1; - let mut end_col = n.end_position().column; - if start_line > end_line || start_line == end_line && start_col > end_col { + let mut end_column = n.end_position().column; + if start_line > end_line || start_line == end_line && start_column > end_column { // the range is empty, clip it to sensible values end_line = start_line; - end_col = start_col - 1; - } else if end_col == 0 { + end_column = start_column - 1; + } else if end_column == 0 { let source = visitor.source; - // end_col = 0 means that we are at the start of a line + // end_column = 0 means that we are at the start of a line // unfortunately 0 is invalid as column number, therefore // we should update the end location to be the end of the // previous line @@ -591,10 +624,10 @@ fn location_for(visitor: &mut Visitor, n: Node) -> (usize, usize, usize, usize) ); } end_line -= 1; - end_col = 1; + end_column = 1; while index > 0 && source[index - 1] != b'\n' { index -= 1; - end_col += 1; + end_column += 1; } } else { visitor.diagnostics_writer.write( @@ -612,7 +645,12 @@ fn location_for(visitor: &mut Visitor, n: Node) -> (usize, usize, usize, usize) ); } } - (start_line, start_col, end_line, end_col) + trap::Location { + start_line, + start_column, + end_line, + end_column, + } } fn traverse(tree: &Tree, visitor: &mut Visitor) { diff --git a/shared/tree-sitter-extractor/src/trap.rs b/shared/tree-sitter-extractor/src/trap.rs index 135e336338f..64c06539ecb 100644 --- a/shared/tree-sitter-extractor/src/trap.rs +++ b/shared/tree-sitter-extractor/src/trap.rs @@ -5,6 +5,14 @@ use std::path::Path; use flate2::write::GzEncoder; +#[derive(Clone, Copy, Eq, PartialEq, PartialOrd, Ord, Hash)] +pub struct Location { + pub start_line: usize, + pub start_column: usize, + pub end_line: usize, + pub end_column: usize, +} + pub struct Writer { /// The accumulated trap entries trap_output: Vec, @@ -12,6 +20,8 @@ pub struct Writer { counter: u32, /// cache of global keys global_keys: std::collections::HashMap, + /// Labels for locations, which don't use global keys + location_labels: std::collections::HashMap, } impl Writer { @@ -20,6 +30,7 @@ impl Writer { counter: 0, trap_output: Vec::new(), global_keys: std::collections::HashMap::new(), + location_labels: std::collections::HashMap::new(), } } @@ -50,6 +61,17 @@ impl Writer { (label, true) } + /// Gets the label for the given location. The first call for a given location will define it as + /// a fresh (star) ID. + pub fn location_label(&mut self, loc: Location) -> (Label, bool) { + if let Some(label) = self.location_labels.get(&loc) { + return (*label, false); + } + let label = self.fresh_id(); + self.location_labels.insert(loc, label); + (label, true) + } + pub fn add_tuple(&mut self, table_name: &str, args: Vec) { self.trap_output .push(Entry::GenericTuple(table_name.to_owned(), args)) From 71852868acda81fb9e321924a0d7d7a2880b4304 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Fri, 2 Feb 2024 17:19:20 +0000 Subject: [PATCH 049/378] Add case for androidx.biometric api --- .../java/security/AndroidLocalAuthQuery.qll | 2 + .../query-tests/security/CWE-287/Test2.java | 47 +++++++++++ .../identity/PresentationSession.java | 9 +++ .../androidx/biometric/BiometricPrompt.java | 79 +++++++++++++++++++ 4 files changed, 137 insertions(+) create mode 100644 java/ql/test/query-tests/security/CWE-287/Test2.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/security/identity/PresentationSession.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/androidx/biometric/BiometricPrompt.java diff --git a/java/ql/lib/semmle/code/java/security/AndroidLocalAuthQuery.qll b/java/ql/lib/semmle/code/java/security/AndroidLocalAuthQuery.qll index 8c052fc58ee..46b391559f1 100644 --- a/java/ql/lib/semmle/code/java/security/AndroidLocalAuthQuery.qll +++ b/java/ql/lib/semmle/code/java/security/AndroidLocalAuthQuery.qll @@ -9,6 +9,8 @@ private class AuthenticationCallbackClass extends Class { "FingerprintManager$AuthenticationCallback") or this.hasQualifiedName("android.hardware.biometrics", "BiometricPrompt$AuthenticationCallback") + or + this.hasQualifiedName("androidx.biometric", "BiometricPrompt$AuthenticationCallback") } } diff --git a/java/ql/test/query-tests/security/CWE-287/Test2.java b/java/ql/test/query-tests/security/CWE-287/Test2.java new file mode 100644 index 00000000000..10308a2f2d3 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-287/Test2.java @@ -0,0 +1,47 @@ +import androidx.biometric.BiometricPrompt; + +class TestC { + public static void useKey(BiometricPrompt.CryptoObject key) {} + + + // GOOD: result is used + class Test1 extends BiometricPrompt.AuthenticationCallback { + @Override + public void onAuthenticationSucceeded(BiometricPrompt.AuthenticationResult result) { + TestC.useKey(result.getCryptoObject()); + } + } + + // BAD: result is not used + class Test2 extends BiometricPrompt.AuthenticationCallback { + @Override + public void onAuthenticationSucceeded(BiometricPrompt.AuthenticationResult result) { // $insecure-auth + + } + } + + // BAD: result is only used in a super call + class Test3 extends BiometricPrompt.AuthenticationCallback { + @Override + public void onAuthenticationSucceeded(BiometricPrompt.AuthenticationResult result) { // $insecure-auth + super.onAuthenticationSucceeded(result); + } + } + + // GOOD: result is used + class Test4 extends BiometricPrompt.AuthenticationCallback { + @Override + public void onAuthenticationSucceeded(BiometricPrompt.AuthenticationResult result) { + super.onAuthenticationSucceeded(result); + TestC.useKey(result.getCryptoObject()); + } + } + + // GOOD: result is used in a super call to a class other than the base class + class Test5 extends Test1 { + @Override + public void onAuthenticationSucceeded(BiometricPrompt.AuthenticationResult result) { + super.onAuthenticationSucceeded(result); + } + } +} \ No newline at end of file diff --git a/java/ql/test/stubs/google-android-9.0.0/android/security/identity/PresentationSession.java b/java/ql/test/stubs/google-android-9.0.0/android/security/identity/PresentationSession.java new file mode 100644 index 00000000000..9227f8fe5d3 --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/security/identity/PresentationSession.java @@ -0,0 +1,9 @@ +// Generated automatically from android.security.identity.PresentationSession for testing purposes + +package android.security.identity; + + +public class PresentationSession +{ + protected PresentationSession() {} +} diff --git a/java/ql/test/stubs/google-android-9.0.0/androidx/biometric/BiometricPrompt.java b/java/ql/test/stubs/google-android-9.0.0/androidx/biometric/BiometricPrompt.java new file mode 100644 index 00000000000..16bf2e661ee --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/androidx/biometric/BiometricPrompt.java @@ -0,0 +1,79 @@ +// Generated automatically from androidx.biometric.BiometricPrompt for testing purposes + +package androidx.biometric; + +import android.security.identity.IdentityCredential; +import android.security.identity.PresentationSession; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentActivity; +import java.security.Signature; +import java.util.concurrent.Executor; +import javax.crypto.Cipher; +import javax.crypto.Mac; + +public class BiometricPrompt +{ + protected BiometricPrompt() {} + abstract static public class AuthenticationCallback + { + public AuthenticationCallback(){} + public void onAuthenticationError(int p0, CharSequence p1){} + public void onAuthenticationFailed(){} + public void onAuthenticationSucceeded(BiometricPrompt.AuthenticationResult p0){} + } + public BiometricPrompt(Fragment p0, BiometricPrompt.AuthenticationCallback p1){} + public BiometricPrompt(Fragment p0, Executor p1, BiometricPrompt.AuthenticationCallback p2){} + public BiometricPrompt(FragmentActivity p0, BiometricPrompt.AuthenticationCallback p1){} + public BiometricPrompt(FragmentActivity p0, Executor p1, BiometricPrompt.AuthenticationCallback p2){} + public static int AUTHENTICATION_RESULT_TYPE_BIOMETRIC = 0; + public static int AUTHENTICATION_RESULT_TYPE_DEVICE_CREDENTIAL = 0; + public static int AUTHENTICATION_RESULT_TYPE_UNKNOWN = 0; + public static int ERROR_CANCELED = 0; + public static int ERROR_HW_NOT_PRESENT = 0; + public static int ERROR_HW_UNAVAILABLE = 0; + public static int ERROR_LOCKOUT = 0; + public static int ERROR_LOCKOUT_PERMANENT = 0; + public static int ERROR_NEGATIVE_BUTTON = 0; + public static int ERROR_NO_BIOMETRICS = 0; + public static int ERROR_NO_DEVICE_CREDENTIAL = 0; + public static int ERROR_NO_SPACE = 0; + public static int ERROR_SECURITY_UPDATE_REQUIRED = 0; + public static int ERROR_TIMEOUT = 0; + public static int ERROR_UNABLE_TO_PROCESS = 0; + public static int ERROR_USER_CANCELED = 0; + public static int ERROR_VENDOR = 0; + public void authenticate(BiometricPrompt.PromptInfo p0){} + public void authenticate(BiometricPrompt.PromptInfo p0, BiometricPrompt.CryptoObject p1){} + public void cancelAuthentication(){} + static public class AuthenticationResult + { + protected AuthenticationResult() {} + public BiometricPrompt.CryptoObject getCryptoObject(){ return null; } + public int getAuthenticationType(){ return 0; } + } + static public class CryptoObject + { + protected CryptoObject() {} + public Cipher getCipher(){ return null; } + public CryptoObject(Cipher p0){} + public CryptoObject(IdentityCredential p0){} + public CryptoObject(Mac p0){} + public CryptoObject(PresentationSession p0){} + public CryptoObject(Signature p0){} + public IdentityCredential getIdentityCredential(){ return null; } + public Mac getMac(){ return null; } + public PresentationSession getPresentationSession(){ return null; } + public Signature getSignature(){ return null; } + } + static public class PromptInfo + { + protected PromptInfo() {} + public CharSequence getDescription(){ return null; } + public CharSequence getNegativeButtonText(){ return null; } + public CharSequence getSubtitle(){ return null; } + public CharSequence getTitle(){ return null; } + public boolean isConfirmationRequired(){ return false; } + public boolean isDeviceCredentialAllowed(){ return false; } + public int getAllowedAuthenticators(){ return 0; } + } +} From 5022adba562db5543b5d8de8fea512e7d2020029 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Fri, 2 Feb 2024 17:26:00 +0000 Subject: [PATCH 050/378] Fixes to qhelp example --- .../CWE/CWE-287/AndroidInsecureLocalAuthenticationGood.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/java/ql/src/Security/CWE/CWE-287/AndroidInsecureLocalAuthenticationGood.java b/java/ql/src/Security/CWE/CWE-287/AndroidInsecureLocalAuthenticationGood.java index 0f41b31a292..2ffcbbb6e26 100644 --- a/java/ql/src/Security/CWE/CWE-287/AndroidInsecureLocalAuthenticationGood.java +++ b/java/ql/src/Security/CWE/CWE-287/AndroidInsecureLocalAuthenticationGood.java @@ -26,16 +26,16 @@ private Cipher getCipher() { + KeyProperties.ENCRYPTION_PADDING_PKCS7); } -public prompt() { +public prompt(byte[] encryptedData) { Cipher cipher = getCipher(); SecretKey secretKey = getSecretKey(); cipher.init(Cipher.DECRYPT_MODE, secretKey); biometricPrompt.authenticate( - new BiometricPrompt.CryptoObject(cipher); + new BiometricPrompt.CryptoObject(cipher), cancellationSignal, executor, - new BiometricPrompt.AuthenticationCallback { + new BiometricPrompt.AuthenticationCallback() { @Override // GOOD: This authentication callback uses the result to decrypt some data. public void onAuthenticationSucceeded(BiometricPrompt.AuthenticationResult result) { From 596f48ca951f54c5e3eda6b7793450e04dc2cf98 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Fri, 2 Feb 2024 17:35:07 +0000 Subject: [PATCH 051/378] Add change note --- .../change-notes/2024-02-02-android-insecure-local-auth.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 java/ql/src/change-notes/2024-02-02-android-insecure-local-auth.md diff --git a/java/ql/src/change-notes/2024-02-02-android-insecure-local-auth.md b/java/ql/src/change-notes/2024-02-02-android-insecure-local-auth.md new file mode 100644 index 00000000000..dc7ebcaade3 --- /dev/null +++ b/java/ql/src/change-notes/2024-02-02-android-insecure-local-auth.md @@ -0,0 +1,5 @@ + +--- +category: newQuery +--- +* Added a new query `java/android/insecure-local-authentication` for finding uses of biometric authentication APIs that do not make use of a `KeyStore`-backed key and thus may be bypassed. \ No newline at end of file From b8dc6338646935c32f6a69aeb573ccce0acb8b9b Mon Sep 17 00:00:00 2001 From: erik-krogh Date: Mon, 5 Feb 2024 11:16:16 +0100 Subject: [PATCH 052/378] add cs/path-injection as markdown to make nicer diffs --- .../Security Features/CWE-022/TaintedPath.md | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 csharp/ql/src/Security Features/CWE-022/TaintedPath.md diff --git a/csharp/ql/src/Security Features/CWE-022/TaintedPath.md b/csharp/ql/src/Security Features/CWE-022/TaintedPath.md new file mode 100644 index 00000000000..ddd80d92051 --- /dev/null +++ b/csharp/ql/src/Security Features/CWE-022/TaintedPath.md @@ -0,0 +1,50 @@ +# Uncontrolled data used in path expression +Accessing paths controlled by users can allow an attacker to access unexpected resources. This can result in sensitive information being revealed or deleted, or an attacker being able to influence behavior by modifying unexpected files. + +Paths that are naively constructed from data controlled by a user may contain unexpected special characters, such as "..". Such a path may potentially point to any directory on the file system. + + +## Recommendation +Validate user input before using it to construct a file path. Ideally, follow these rules: + +* Do not allow more than a single "." character. +* Do not allow directory separators such as "/" or "\\" (depending on the file system). +* Do not rely on simply replacing problematic sequences such as "../". For example, after applying this filter to ".../...//" the resulting string would still be "../". +* Use a whitelist of known good patterns. +* Sanitize potentially tainted paths using `HttpRequest.MapPath`. + +## Example +In the first example, a file name is read from a `HttpRequest` and then used to access a file. However, a malicious user could enter a file name which is an absolute path - for example, "/etc/passwd". In the second example, it appears that the user is restricted to opening a file within the "user" home directory. However, a malicious user could enter a filename which contains special characters. For example, the string "../../etc/passwd" will result in the code reading the file located at "/home/\[user\]/../../etc/passwd", which is the system's password file. This file would then be sent back to the user, giving them access to all the system's passwords. + + +```csharp +using System; +using System.IO; +using System.Web; + +public class TaintedPathHandler : IHttpHandler +{ + public void ProcessRequest(HttpContext ctx) + { + String path = ctx.Request.QueryString["path"]; + // BAD: This could read any file on the filesystem. + ctx.Response.Write(File.ReadAllText(path)); + + // BAD: This could still read any file on the filesystem. + ctx.Response.Write(File.ReadAllText("/home/user/" + path)); + + // GOOD: MapPath ensures the path is safe to read from. + string safePath = ctx.Request.MapPath(path, ctx.Request.ApplicationPath, false); + ctx.Response.Write(File.ReadAllText(safePath)); + } +} + +``` + +## References +* OWASP: [Path Traversal](https://owasp.org/www-community/attacks/Path_Traversal). +* Common Weakness Enumeration: [CWE-22](https://cwe.mitre.org/data/definitions/22.html). +* Common Weakness Enumeration: [CWE-23](https://cwe.mitre.org/data/definitions/23.html). +* Common Weakness Enumeration: [CWE-36](https://cwe.mitre.org/data/definitions/36.html). +* Common Weakness Enumeration: [CWE-73](https://cwe.mitre.org/data/definitions/73.html). +* Common Weakness Enumeration: [CWE-99](https://cwe.mitre.org/data/definitions/99.html). From 9dfac3a4ccf14fb304ca8b13243a9dc8dec07174 Mon Sep 17 00:00:00 2001 From: erik-krogh Date: Mon, 5 Feb 2024 11:20:24 +0100 Subject: [PATCH 053/378] move qhelp samples to an `examples` folder --- csharp/ql/src/Security Features/CWE-022/TaintedPath.qhelp | 2 +- csharp/ql/src/Security Features/CWE-022/ZipSlip.qhelp | 4 ++-- .../Security Features/CWE-022/{ => examples}/TaintedPath.cs | 0 .../Security Features/CWE-022/{ => examples}/ZipSlipBad.cs | 0 .../Security Features/CWE-022/{ => examples}/ZipSlipGood.cs | 0 5 files changed, 3 insertions(+), 3 deletions(-) rename csharp/ql/src/Security Features/CWE-022/{ => examples}/TaintedPath.cs (100%) rename csharp/ql/src/Security Features/CWE-022/{ => examples}/ZipSlipBad.cs (100%) rename csharp/ql/src/Security Features/CWE-022/{ => examples}/ZipSlipGood.cs (100%) diff --git a/csharp/ql/src/Security Features/CWE-022/TaintedPath.qhelp b/csharp/ql/src/Security Features/CWE-022/TaintedPath.qhelp index e838d8c56a4..3ff4e5447cd 100644 --- a/csharp/ql/src/Security Features/CWE-022/TaintedPath.qhelp +++ b/csharp/ql/src/Security Features/CWE-022/TaintedPath.qhelp @@ -34,7 +34,7 @@ enter a filename which contains special characters. For example, the string "../ reading the file located at "/home/[user]/../../etc/passwd", which is the system's password file. This file would then be sent back to the user, giving them access to all the system's passwords.

    - + diff --git a/csharp/ql/src/Security Features/CWE-022/ZipSlip.qhelp b/csharp/ql/src/Security Features/CWE-022/ZipSlip.qhelp index a1f39d27b8c..d75ababa6a8 100644 --- a/csharp/ql/src/Security Features/CWE-022/ZipSlip.qhelp +++ b/csharp/ql/src/Security Features/CWE-022/ZipSlip.qhelp @@ -50,7 +50,7 @@ the result is within the destination directory. If provided with a zip file cont path like ..\sneaky-file, then this file would be written outside the destination directory.

    - +

    To fix this vulnerability, we need to make three changes. Firstly, we need to resolve any directory traversal or other special characters in the path by using Path.GetFullPath. @@ -59,7 +59,7 @@ Secondly, we need to identify the destination output directory, again using the resolved output starts with the resolved destination directory, and throw an exception if this is not the case.

    - + diff --git a/csharp/ql/src/Security Features/CWE-022/TaintedPath.cs b/csharp/ql/src/Security Features/CWE-022/examples/TaintedPath.cs similarity index 100% rename from csharp/ql/src/Security Features/CWE-022/TaintedPath.cs rename to csharp/ql/src/Security Features/CWE-022/examples/TaintedPath.cs diff --git a/csharp/ql/src/Security Features/CWE-022/ZipSlipBad.cs b/csharp/ql/src/Security Features/CWE-022/examples/ZipSlipBad.cs similarity index 100% rename from csharp/ql/src/Security Features/CWE-022/ZipSlipBad.cs rename to csharp/ql/src/Security Features/CWE-022/examples/ZipSlipBad.cs diff --git a/csharp/ql/src/Security Features/CWE-022/ZipSlipGood.cs b/csharp/ql/src/Security Features/CWE-022/examples/ZipSlipGood.cs similarity index 100% rename from csharp/ql/src/Security Features/CWE-022/ZipSlipGood.cs rename to csharp/ql/src/Security Features/CWE-022/examples/ZipSlipGood.cs From 6748f6e5c7d85d9610573d53fb46a56109eb7acc Mon Sep 17 00:00:00 2001 From: Harry Maclean Date: Thu, 18 Jan 2024 09:44:23 +0000 Subject: [PATCH 054/378] Ruby: Add docs for MaD --- .../customizing-library-models-for-ruby.rst | 406 ++++++++++++++++++ 1 file changed, 406 insertions(+) create mode 100644 docs/codeql/codeql-language-guides/customizing-library-models-for-ruby.rst diff --git a/docs/codeql/codeql-language-guides/customizing-library-models-for-ruby.rst b/docs/codeql/codeql-language-guides/customizing-library-models-for-ruby.rst new file mode 100644 index 00000000000..d073eaa4d88 --- /dev/null +++ b/docs/codeql/codeql-language-guides/customizing-library-models-for-ruby.rst @@ -0,0 +1,406 @@ +.. _customizing-library-models-for-ruby: + +:orphan: +:nosearch: + +Customizing Library Models for Ruby +=================================== + +.. include:: ../reusables/beta-note-customizing-library-models.rst + +Ruby analysis can be customized by adding library models in data extension files. + +A data extension for Ruby is a YAML file of the form: + +.. code-block:: yaml + + extensions: + - addsTo: + pack: codeql/ruby-all + extensible: + data: + - + - + - ... + +The CodeQL library for JavaScript exposes the following extensible predicates: + +- **sourceModel**\(type, path, kind) +- **sinkModel**\(type, path, kind) +- **typeModel**\(type1, type2, path) +- **summaryModel**\(type, path, input, output, kind) + +See the `CLI documentation for how to load and use data extensions in a CodeQL evaluation run `__ (internal access required). + +We'll explain how to use these using a few examples, and provide some reference material at the end of this article. + +Example: Taint sink in the 'tty-command' gem +------------------------------------------ + +In this example, we'll show how to add the following argument, passed to **tty-command**, as a command-line injection sink: + +.. code-block:: ruby + + tty = TTY::Command.new + tty.run(cmd) # <-- add 'cmd' as a taint sink + +For this example, you can use the following data extension: + +.. code-block:: yaml + + extensions: + - addsTo: + pack: codeql/ruby-all + extensible: sinkModel + data: + - ["TTY::Command", "Method[run].Argument[0]", "command-injection"] + + +- Since we're adding a new sink, we add a tuple to the **sinkModel** extensible predicate. +- The first column, **"TTY::Command"**, identifies a set of values from which to begin the search for the sink. + The string **"TTY::Command""** means we start at the places where the codebase constructs instances of the class **TTY::Command**. +- The second column is an access path that is evaluated from left to right, starting at the values that were identified by the first column. + + - **Method[run]** selects calls to the **run** method of the **TTY::Command** class. + - **Argument[0]** selects the first argument to calls to that member. + +- **command-injection** indicates that this is considered a sink for the command injection query. + +Example: Taint sources from `sinatra` block parameters +------------------------------------------------------ + +In this example, we'll show how the `x` parameter below could be marked as a remote flow source: + +.. code-block:: ruby + + class MyApp < Sinatra::Base + get '/' do |x| # <-- add 'x' as a taint source + # ... + end + end + +For this example you could use the following data extension: + +.. code-block:: yaml + + extensions: + - addsTo: + pack: codeql/ruby-all + extensible: sourceModel + data: + - [ + "Sinatra::Base!", + "Method[get].Argument[block].Parameter[0]", + "remote", + ] + +- Since we're adding a new taint source, we add a tuple to the **sourceModel** extensible predicate. +- The first column, **"Sinatra::Base!"**, begins the search at references to the **Sinatra::Base** class. + The **!** suffix indicates that we want to search for references to the class itself, rather than instances of the class. +- **Method[get]** selects calls to the **get** method of the **Sinatra::Base** class. +- **Argument[block]** selects the block argument to the **get** method call. +- **Parameter[0]** selects the first parameter of the block argument (the parameter named **x**). +- Finally, the kind **remote** indicates that this is considered a source of remote flow. + +Example: Using types to add MySQL injection sinks +------------------------------------------------- + +In this example, we'll show how to add the following SQL injection sink: + +.. code-block:: ruby + + def submit(q) + client = Mysql2::Client.new + client.query(q) # <-- add 'q' as a SQL injection sink + end + +We can recognize this using the following extension: + +.. code-block:: yaml + + extensions: + - addsTo: + pack: codeql/ruby-all + extensible: sinkModel + data: + - ["Mysql2::Client", "Method[query].Argument[0]", "sql-injection"] + +- The first column, **"Mysql2::Client"**, begins the search at any instance of the **Mysql2::Client** class. +- **Method[query]** selects any call to the **query** method on that instance. +- **Argument[0]** selects the first argument to the method call. +- **sql-injection** indicates that this is considered a sink for the SQL injection query. + +Continued example: Using type models +------------------------------------ + +Consider this variation on the previous example, the mysql2 EventMachine API is used. +The client is obtained via a call to **Mysql2::EM::Client.new**. + +.. code-block:: ruby + + def submit(client, q) + client = Mysql2::EM::Client.new + client.query(q) + end + +So far we have only one model for **Mysql2::Client**, but in the real world we +may have many models for the various methods available. Because **Mysql2::EM::Client** is a subclass of **Mysql2::Client**, it inherits all of the same methods. +Instead of updating all our models to include both classes, we can add a type +model to indicate that **Mysql2::EM::Client** is a subclass of **Mysql2::Client**: + +.. code-block:: yaml + + extensions: + - addsTo: + pack: codeql/ruby-all + extensible: typeModel + data: + - ["Mysql2::Client", "Mysql2::EM::Client", ""] + +Example: Adding flow through 'URI.decode_uri_component' +------------------------------------------------------- + +In this example, we'll show how to add flow through calls to `URI.decode_uri_component`: + +.. code-block:: ruby + + y = URI.decode_uri_component(x); # add taint flow from 'x' to 'y' + +We can model this using the following data extension: + +.. code-block:: yaml + + extensions: + - addsTo: + pack: codeql/ruby-all + extensible: summaryModel + data: + - [ + "URI", + "Method[decode_uri_component]", + "Argument[0]", + "ReturnValue", + "taint", + ] + + +- Since we're adding flow through a method call, we add a tuple to the **summaryModel** extensible predicate. +- The first column, **"URI!"**, begins the search for relevant calls at references to the **URI** class. +- The **!** suffix indicates that we are looking for the class itself, rather than instances of the class. +- The second column, **Member[decode_uri_component]**, is a path leading to the method calls we wish to model. + In this case, we select references to the **decode_uri_component** method from the **URI** class. +- The third column, **Argument[0]**, indicates the input of the flow. In this case, the first argument to the method call. +- The fourth column, **ReturnValue**, indicates the output of the flow. In this case, the return value of the method call. +- The last column, **taint**, indicates the kind of flow to add. The value **taint** means the output is not necessarily equal + to the input, but was derived from the input in a taint-preserving way. + +Example: Adding flow through 'File#each' +---------------------------------------- + +In this example, we'll show how to add flow through calls to **File#each** from the standard library, which iterates over the lines of a file: + +.. code-block:: ruby + + f = File.new("example.txt") + f.each { |line| ... } # add taint flow from `f` to `line` + +We can model this using the following data extension: + +.. code-block:: yaml + + extensions: + - addsTo: + pack: codeql/ruby-all + extensible: summaryModel + data: + - [ + "File", + "Method[each]", + "Argument[self]", + "Argument[block].Parameter[0]", + "taint", + ] + + +- Since we're adding flow through a method call, we add a tuple to the **summaryModel** extensible predicate. +- The first column, **"File"**, begins the search for relevant calls at places where the **File** class is used. +- The second column, **Method[each]**, selects references to the **each** method on the **File** class. +- The third column specifies the input of the flow. **Argument[self]** selects the **self** argument of **each**, which is the **File** instance being iterated over. + +- The fourth column specifies the output of the flow: + + - **Argument[block]** selects the block argument of **each** (the block which is executed for each line in the file). + - **Parameter[0]** selects the first parameter of the block (the parameter named **line**). + +- The last column, **taint**, indicates the kind of flow to add. + +Reference material +------------------ + +The following sections provide reference material for extensible predicates, access paths, types, and kinds. + +Extensible predicates +--------------------- + +sourceModel(type, path, kind) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Adds a new taint source. Most taint-tracking queries will use the new source. + +- **type**: Name of a type from which to evaluate **path**. +- **path**: Access path leading to the source. +- **kind**: Kind of source to add. Currently only **remote** is used. + +Example: + +.. code-block:: yaml + + extensions: + - addsTo: + pack: codeql/ruby-all + extensible: sourceModel + data: + - ["User", "Method[name]", "remote"] + +sinkModel(type, path, kind) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Adds a new taint sink. Sinks are query-specific and will typically affect one or two queries. + +- **type**: Name of a type from which to evaluate **path**. +- **path**: Access path leading to the sink. +- **kind**: Kind of sink to add. See the section on sink kinds for a list of supported kinds. + +Example: + +.. code-block:: yaml + + extensions: + - addsTo: + pack: codeql/ruby-all + extensible: sinkModel + data: + - ["ExecuteShell", "Method[run].Argument[0]", "command-injection"] + +summaryModel(type, path, input, output, kind) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Adds flow through a method call. + +- **type**: Name of a type from which to evaluate **path**. +- **path**: Access path leading to a method call. +- **input**: Path relative to the method call that leads to input of the flow. +- **output**: Path relative to the method call leading to the output of the flow. +- **kind**: Kind of summary to add. Can be **taint** for taint-propagating flow, or **value** for value-preserving flow. + +Example: + +.. code-block:: yaml + + extensions: + - addsTo: + pack: codeql/ruby-all + extensible: summaryModel + data: + - [ + "URI", + "Method[decode_uri_component]", + "Argument[0]", + "ReturnValue", + "taint", + ] + +typeModel(type1, type2, path) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Adds a new definition of a type. + +- **type1**: Name of the type to define. +- **type2**: Name of the type from which to evaluate **path**. +- **path**: Access path leading from **type2** to **type1**. + +Example: + +.. code-block:: yaml + + extensions: + - addsTo: + pack: codeql/ruby-all + extensible: typeModel + data: + - [ + "Mysql2::Client", + "MyDbWrapper", + "Method[getConnection].ReturnValue", + ] + +Types +----- + +A type is a string that identifies a set of values. +In each of the extensible predicates mentioned in previous section, the first column is always the name of a type. +A type can be defined by adding **typeModel** tuples for that type. + +Access paths +------------ + +The **path**, **input**, and **output** columns consist of a **.**-separated list of components, which is evaluated from left to right, +with each step selecting a new set of values derived from the previous set of values. + +The following components are supported: + +- **Argument[**\ `number`\ **]** selects the argument at the given index. +- **Argument[**\ `string`:\ **]** selects the keyword argument with the given name. +- **Argument[self]** selects the receiver of a method call. +- **Argument[block]** selects the block argument. +- **Argument[any]** selects any argument, except self or block arguments. +- **Argument[any-named]** selects any keyword argument. +- **Argument[hash-splat]** selects a special argument representing all keyword arguments passed in the method call. +- **Parameter[**\ `number`\ **]** selects the argument at the given index. +- **Parameter[**\ `string`:\ **]** selects the keyword argument with the given name. +- **Parameter[self]** selects the **self** parameter of a method. +- **Parameter[block]** selects the block parameter. +- **Parameter[any]** selects any parameter, except self or block parameters. +- **Parameter[any-named]** selects any keyword parameter. +- **Parameter[hash-splat]** selects the hash splat parameter, often written as **\*\*kwargs**. +- **ReturnValue** selects the return value of a call. +- **Method[**\ `name`\ **]** selects a call to the method with the given name. +- **Element[any]** selects any element of an array or hash. +- **Element[**\ `number`\ **]** selects an array element at the given index. +- **Element[**\ `string`\ **]** selects a hash element at the given key. +- **Field[@**\ `string`\ **]** selects an instance variable with the given name. +- **Fuzzy** selects all values that are derived from the current value through a combination of the other operations described in this list. + For example, this can be used to find all values that appear to originate from a particular class. This can be useful for finding method calls + from a known class, but where the receiver type is not known or is difficult to model. + +Additional notes about the syntax of operands: + +- Multiple operands may be given to a single component, as a shorthand for the union of the operands. For example, **Method[foo,bar]** matches the union of **Method[foo]** and **Method[bar]**. +- Numeric operands to **Argument**, **Parameter**, and **Element** may be given as a lower bound. For example, **Argument[1..]** matches all arguments except 0. + +Kinds +----- + +Source kinds +~~~~~~~~~~~~ + +- **remote**: A generic source of remote flow. Most taint-tracking queries will use such a source. Currently this is the only supported source kind. + +Sink kinds +~~~~~~~~~~ + +Unlike sources, sinks tend to be highly query-specific, rarely affecting more than one or two queries. +Not every query supports customizable sinks. If the following sinks are not suitable for your use case, you should add a new query. + +- **code-injection**: A sink that can be used to inject code, such as in calls to **eval**. +- **command-injection**: A sink that can be used to inject shell commands, such as in calls to **child_process.spawn**. +- **path-injection**: A sink that can be used for path injection in a file system access, such as in calls to **fs.readFile**. +- **sql-injection**: A sink that can be used for SQL injection, such as in a MySQL **query** call. +- **url-redirection**: A sink that can be used to redirect the user to a malicious URL. +- **log-injection**: A sink that can be used for log injection, such as in a **console.log** call. + +Summary kinds +~~~~~~~~~~~~~ + +- **taint**: A summary that propagates taint. This means the output is not necessarily equal to the input, but it was derived from the input in an unrestrictive way. An attacker who controls the input will have significant control over the output as well. +- **value**: A summary that preserves the value of the input or creates a copy of the input such that all of its object properties are preserved. From 03ab3c1a5d8e533cd0288eb28cdbe85b24e4293e Mon Sep 17 00:00:00 2001 From: Harry Maclean Date: Mon, 5 Feb 2024 11:15:53 +0000 Subject: [PATCH 055/378] Ruby: Fix title underline --- .../customizing-library-models-for-ruby.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/codeql/codeql-language-guides/customizing-library-models-for-ruby.rst b/docs/codeql/codeql-language-guides/customizing-library-models-for-ruby.rst index d073eaa4d88..6bc80472596 100644 --- a/docs/codeql/codeql-language-guides/customizing-library-models-for-ruby.rst +++ b/docs/codeql/codeql-language-guides/customizing-library-models-for-ruby.rst @@ -35,7 +35,7 @@ See the `CLI documentation for how to load and use data extensions in a CodeQL e We'll explain how to use these using a few examples, and provide some reference material at the end of this article. Example: Taint sink in the 'tty-command' gem ------------------------------------------- +-------------------------------------------- In this example, we'll show how to add the following argument, passed to **tty-command**, as a command-line injection sink: From 8160291be1e4ca30795b1a61f3e22e3b49cbe370 Mon Sep 17 00:00:00 2001 From: erik-krogh Date: Mon, 5 Feb 2024 13:08:21 +0100 Subject: [PATCH 056/378] copy (and adjust) the path-injection QHelp from Java to C# --- .../CWE-022/TaintedPath.qhelp | 53 +++++++++++++------ .../CWE-022/examples/TaintedPath.cs | 11 +--- .../CWE-022/examples/TaintedPathGoodFolder.cs | 24 +++++++++ .../examples/TaintedPathGoodNormalize.cs | 20 +++++++ 4 files changed, 82 insertions(+), 26 deletions(-) create mode 100644 csharp/ql/src/Security Features/CWE-022/examples/TaintedPathGoodFolder.cs create mode 100644 csharp/ql/src/Security Features/CWE-022/examples/TaintedPathGoodNormalize.cs diff --git a/csharp/ql/src/Security Features/CWE-022/TaintedPath.qhelp b/csharp/ql/src/Security Features/CWE-022/TaintedPath.qhelp index 3ff4e5447cd..bf3132a9719 100644 --- a/csharp/ql/src/Security Features/CWE-022/TaintedPath.qhelp +++ b/csharp/ql/src/Security Features/CWE-022/TaintedPath.qhelp @@ -7,35 +7,54 @@ can result in sensitive information being revealed or deleted, or an attacker being able to influence behavior by modifying unexpected files.

    -

    Paths that are naively constructed from data controlled by a user may contain unexpected special characters, -such as "..". Such a path may potentially point to any directory on the file system.

    +

    Paths that are naively constructed from data controlled by a user may be absolute paths, or may contain +unexpected special characters such as "..". Such a path could point anywhere on the file system.

    -

    Validate user input before using it to construct a file path. Ideally, follow these rules:

    +

    Validate user input before using it to construct a file path.

    -
      -
    • Do not allow more than a single "." character.
    • -
    • Do not allow directory separators such as "/" or "\" (depending on the file system).
    • -
    • Do not rely on simply replacing problematic sequences such as "../". For example, after applying this filter to -".../...//" the resulting string would still be "../".
    • -
    • Use a whitelist of known good patterns.
    • -
    • Sanitize potentially tainted paths using HttpRequest.MapPath.
    • -
    +

    Common validation methods include checking that the normalized path is relative and does not contain +any ".." components, or checking that the path is contained within a safe folder. The method you should use depends +on how the path is used in the application, and whether the path should be a single path component. +

    + +

    If the path should be a single path component (such as a file name), you can check for the existence +of any path separators ("/" or "\"), or ".." sequences in the input, and reject the input if any are found. +

    + +

    +Note that removing "../" sequences is not sufficient, since the input could still contain a path separator +followed by "..". For example, the input ".../...//" would still result in the string "../" if only "../" sequences +are removed. +

    + +

    Finally, the simplest (but most restrictive) option is to use an allow list of safe patterns and make sure that +the user input matches one of these patterns.

    -

    In the first example, a file name is read from a HttpRequest and then used to access a file. However, a -malicious user could enter a file name which is an absolute path - for example, "/etc/passwd". In the second example, it -appears that the user is restricted to opening a file within the "user" home directory. However, a malicious user could -enter a filename which contains special characters. For example, the string "../../etc/passwd" will result in the code -reading the file located at "/home/[user]/../../etc/passwd", which is the system's password file. This file would then be -sent back to the user, giving them access to all the system's passwords.

    +

    In this example, a user-provided file name is read from a HTTP request and then used to access a file +and send it back to the user. However, a malicious user could enter a file name anywhere on the file system, +such as "/etc/passwd" or "../../../etc/passwd".

    +

    +If the input should only be a file name, you can check that it doesn't contain any path separators or ".." sequences. +

    + + + +

    +If the input should be within a specific directory, you can check that the resolved path +is still contained within that directory. +

    + + +
    diff --git a/csharp/ql/src/Security Features/CWE-022/examples/TaintedPath.cs b/csharp/ql/src/Security Features/CWE-022/examples/TaintedPath.cs index ac2add1b9b0..c185267a038 100644 --- a/csharp/ql/src/Security Features/CWE-022/examples/TaintedPath.cs +++ b/csharp/ql/src/Security Features/CWE-022/examples/TaintedPath.cs @@ -6,15 +6,8 @@ public class TaintedPathHandler : IHttpHandler { public void ProcessRequest(HttpContext ctx) { - String path = ctx.Request.QueryString["path"]; + String filename = ctx.Request.QueryString["path"]; // BAD: This could read any file on the filesystem. - ctx.Response.Write(File.ReadAllText(path)); - - // BAD: This could still read any file on the filesystem. - ctx.Response.Write(File.ReadAllText("/home/user/" + path)); - - // GOOD: MapPath ensures the path is safe to read from. - string safePath = ctx.Request.MapPath(path, ctx.Request.ApplicationPath, false); - ctx.Response.Write(File.ReadAllText(safePath)); + ctx.Response.Write(File.ReadAllText(filename)); } } diff --git a/csharp/ql/src/Security Features/CWE-022/examples/TaintedPathGoodFolder.cs b/csharp/ql/src/Security Features/CWE-022/examples/TaintedPathGoodFolder.cs new file mode 100644 index 00000000000..33443abb717 --- /dev/null +++ b/csharp/ql/src/Security Features/CWE-022/examples/TaintedPathGoodFolder.cs @@ -0,0 +1,24 @@ +using System; +using System.IO; +using System.Web; + +public class TaintedPathHandler : IHttpHandler +{ + public void ProcessRequest(HttpContext ctx) + { + String filename = ctx.Request.QueryString["path"]; + + string publicFolder = Path.GetFullPath("/home/" + user + "/public"); + string filePath = Path.GetFullPath(Path.Combine(publicFolder, filename)); + + // GOOD: ensure that the path stays within the public folder + if (!filePath.StartsWith(publicFolder + Path.DirectorySeparatorChar)) + { + ctx.Response.StatusCode = 400; + ctx.Response.StatusDescription = "Bad Request"; + ctx.Response.Write("Invalid path"); + return; + } + ctx.Response.Write(File.ReadAllText(filename)); + } +} diff --git a/csharp/ql/src/Security Features/CWE-022/examples/TaintedPathGoodNormalize.cs b/csharp/ql/src/Security Features/CWE-022/examples/TaintedPathGoodNormalize.cs new file mode 100644 index 00000000000..939ceffff23 --- /dev/null +++ b/csharp/ql/src/Security Features/CWE-022/examples/TaintedPathGoodNormalize.cs @@ -0,0 +1,20 @@ +using System; +using System.IO; +using System.Web; + +public class TaintedPathHandler : IHttpHandler +{ + public void ProcessRequest(HttpContext ctx) + { + String filename = ctx.Request.QueryString["path"]; + // GOOD: ensure that the filename has no path separators or parent directory references + if (filename.Contains("..") || filename.Contains("/") || filename.Contains("\\")) + { + ctx.Response.StatusCode = 400; + ctx.Response.StatusDescription = "Bad Request"; + ctx.Response.Write("Invalid path"); + return; + } + ctx.Response.Write(File.ReadAllText(filename)); + } +} From a240618ae490a88225b190f1f728ff476a614603 Mon Sep 17 00:00:00 2001 From: erik-krogh Date: Mon, 5 Feb 2024 13:09:02 +0100 Subject: [PATCH 057/378] generate the new rendered markdown --- .../Security Features/CWE-022/TaintedPath.md | 82 +++++++++++++++---- 1 file changed, 67 insertions(+), 15 deletions(-) diff --git a/csharp/ql/src/Security Features/CWE-022/TaintedPath.md b/csharp/ql/src/Security Features/CWE-022/TaintedPath.md index ddd80d92051..c6204c2914e 100644 --- a/csharp/ql/src/Security Features/CWE-022/TaintedPath.md +++ b/csharp/ql/src/Security Features/CWE-022/TaintedPath.md @@ -1,20 +1,23 @@ # Uncontrolled data used in path expression Accessing paths controlled by users can allow an attacker to access unexpected resources. This can result in sensitive information being revealed or deleted, or an attacker being able to influence behavior by modifying unexpected files. -Paths that are naively constructed from data controlled by a user may contain unexpected special characters, such as "..". Such a path may potentially point to any directory on the file system. +Paths that are naively constructed from data controlled by a user may be absolute paths, or may contain unexpected special characters such as "..". Such a path could point anywhere on the file system. ## Recommendation -Validate user input before using it to construct a file path. Ideally, follow these rules: +Validate user input before using it to construct a file path. + +Common validation methods include checking that the normalized path is relative and does not contain any ".." components, or checking that the path is contained within a safe folder. The method you should use depends on how the path is used in the application, and whether the path should be a single path component. + +If the path should be a single path component (such as a file name), you can check for the existence of any path separators ("/" or "\\"), or ".." sequences in the input, and reject the input if any are found. + +Note that removing "../" sequences is *not* sufficient, since the input could still contain a path separator followed by "..". For example, the input ".../...//" would still result in the string "../" if only "../" sequences are removed. + +Finally, the simplest (but most restrictive) option is to use an allow list of safe patterns and make sure that the user input matches one of these patterns. -* Do not allow more than a single "." character. -* Do not allow directory separators such as "/" or "\\" (depending on the file system). -* Do not rely on simply replacing problematic sequences such as "../". For example, after applying this filter to ".../...//" the resulting string would still be "../". -* Use a whitelist of known good patterns. -* Sanitize potentially tainted paths using `HttpRequest.MapPath`. ## Example -In the first example, a file name is read from a `HttpRequest` and then used to access a file. However, a malicious user could enter a file name which is an absolute path - for example, "/etc/passwd". In the second example, it appears that the user is restricted to opening a file within the "user" home directory. However, a malicious user could enter a filename which contains special characters. For example, the string "../../etc/passwd" will result in the code reading the file located at "/home/\[user\]/../../etc/passwd", which is the system's password file. This file would then be sent back to the user, giving them access to all the system's passwords. +In this example, a user-provided file name is read from a HTTP request and then used to access a file and send it back to the user. However, a malicious user could enter a file name anywhere on the file system, such as "/etc/passwd" or "../../../etc/passwd". ```csharp @@ -26,16 +29,65 @@ public class TaintedPathHandler : IHttpHandler { public void ProcessRequest(HttpContext ctx) { - String path = ctx.Request.QueryString["path"]; + String filename = ctx.Request.QueryString["path"]; // BAD: This could read any file on the filesystem. - ctx.Response.Write(File.ReadAllText(path)); + ctx.Response.Write(File.ReadAllText(filename)); + } +} - // BAD: This could still read any file on the filesystem. - ctx.Response.Write(File.ReadAllText("/home/user/" + path)); +``` +If the input should only be a file name, you can check that it doesn't contain any path separators or ".." sequences. - // GOOD: MapPath ensures the path is safe to read from. - string safePath = ctx.Request.MapPath(path, ctx.Request.ApplicationPath, false); - ctx.Response.Write(File.ReadAllText(safePath)); + +```csharp +using System; +using System.IO; +using System.Web; + +public class TaintedPathHandler : IHttpHandler +{ + public void ProcessRequest(HttpContext ctx) + { + String filename = ctx.Request.QueryString["path"]; + // GOOD: ensure that the filename has no path separators or parent directory references + if (filename.Contains("..") || filename.Contains("/") || filename.Contains("\\")) + { + ctx.Response.StatusCode = 400; + ctx.Response.StatusDescription = "Bad Request"; + ctx.Response.Write("Invalid path"); + return; + } + ctx.Response.Write(File.ReadAllText(filename)); + } +} + +``` +If the input should be within a specific directory, you can check that the resolved path is still contained within that directory. + + +```csharp +using System; +using System.IO; +using System.Web; + +public class TaintedPathHandler : IHttpHandler +{ + public void ProcessRequest(HttpContext ctx) + { + String filename = ctx.Request.QueryString["path"]; + + string publicFolder = Path.GetFullPath("/home/" + user + "/public"); + string filePath = Path.GetFullPath(Path.Combine(publicFolder, filename)); + + // GOOD: ensure that the path stays within the public folder + if (!filePath.StartsWith(publicFolder + Path.DirectorySeparatorChar)) + { + ctx.Response.StatusCode = 400; + ctx.Response.StatusDescription = "Bad Request"; + ctx.Response.Write("Invalid path"); + return; + } + ctx.Response.Write(File.ReadAllText(filename)); } } From a6b094cf533075e48aed6107ef7c26600751826e Mon Sep 17 00:00:00 2001 From: erik-krogh Date: Mon, 5 Feb 2024 13:54:13 +0100 Subject: [PATCH 058/378] delete the rendered markdown again --- .../Security Features/CWE-022/TaintedPath.md | 102 ------------------ 1 file changed, 102 deletions(-) delete mode 100644 csharp/ql/src/Security Features/CWE-022/TaintedPath.md diff --git a/csharp/ql/src/Security Features/CWE-022/TaintedPath.md b/csharp/ql/src/Security Features/CWE-022/TaintedPath.md deleted file mode 100644 index c6204c2914e..00000000000 --- a/csharp/ql/src/Security Features/CWE-022/TaintedPath.md +++ /dev/null @@ -1,102 +0,0 @@ -# Uncontrolled data used in path expression -Accessing paths controlled by users can allow an attacker to access unexpected resources. This can result in sensitive information being revealed or deleted, or an attacker being able to influence behavior by modifying unexpected files. - -Paths that are naively constructed from data controlled by a user may be absolute paths, or may contain unexpected special characters such as "..". Such a path could point anywhere on the file system. - - -## Recommendation -Validate user input before using it to construct a file path. - -Common validation methods include checking that the normalized path is relative and does not contain any ".." components, or checking that the path is contained within a safe folder. The method you should use depends on how the path is used in the application, and whether the path should be a single path component. - -If the path should be a single path component (such as a file name), you can check for the existence of any path separators ("/" or "\\"), or ".." sequences in the input, and reject the input if any are found. - -Note that removing "../" sequences is *not* sufficient, since the input could still contain a path separator followed by "..". For example, the input ".../...//" would still result in the string "../" if only "../" sequences are removed. - -Finally, the simplest (but most restrictive) option is to use an allow list of safe patterns and make sure that the user input matches one of these patterns. - - -## Example -In this example, a user-provided file name is read from a HTTP request and then used to access a file and send it back to the user. However, a malicious user could enter a file name anywhere on the file system, such as "/etc/passwd" or "../../../etc/passwd". - - -```csharp -using System; -using System.IO; -using System.Web; - -public class TaintedPathHandler : IHttpHandler -{ - public void ProcessRequest(HttpContext ctx) - { - String filename = ctx.Request.QueryString["path"]; - // BAD: This could read any file on the filesystem. - ctx.Response.Write(File.ReadAllText(filename)); - } -} - -``` -If the input should only be a file name, you can check that it doesn't contain any path separators or ".." sequences. - - -```csharp -using System; -using System.IO; -using System.Web; - -public class TaintedPathHandler : IHttpHandler -{ - public void ProcessRequest(HttpContext ctx) - { - String filename = ctx.Request.QueryString["path"]; - // GOOD: ensure that the filename has no path separators or parent directory references - if (filename.Contains("..") || filename.Contains("/") || filename.Contains("\\")) - { - ctx.Response.StatusCode = 400; - ctx.Response.StatusDescription = "Bad Request"; - ctx.Response.Write("Invalid path"); - return; - } - ctx.Response.Write(File.ReadAllText(filename)); - } -} - -``` -If the input should be within a specific directory, you can check that the resolved path is still contained within that directory. - - -```csharp -using System; -using System.IO; -using System.Web; - -public class TaintedPathHandler : IHttpHandler -{ - public void ProcessRequest(HttpContext ctx) - { - String filename = ctx.Request.QueryString["path"]; - - string publicFolder = Path.GetFullPath("/home/" + user + "/public"); - string filePath = Path.GetFullPath(Path.Combine(publicFolder, filename)); - - // GOOD: ensure that the path stays within the public folder - if (!filePath.StartsWith(publicFolder + Path.DirectorySeparatorChar)) - { - ctx.Response.StatusCode = 400; - ctx.Response.StatusDescription = "Bad Request"; - ctx.Response.Write("Invalid path"); - return; - } - ctx.Response.Write(File.ReadAllText(filename)); - } -} - -``` - -## References -* OWASP: [Path Traversal](https://owasp.org/www-community/attacks/Path_Traversal). -* Common Weakness Enumeration: [CWE-22](https://cwe.mitre.org/data/definitions/22.html). -* Common Weakness Enumeration: [CWE-23](https://cwe.mitre.org/data/definitions/23.html). -* Common Weakness Enumeration: [CWE-36](https://cwe.mitre.org/data/definitions/36.html). -* Common Weakness Enumeration: [CWE-73](https://cwe.mitre.org/data/definitions/73.html). -* Common Weakness Enumeration: [CWE-99](https://cwe.mitre.org/data/definitions/99.html). From f792b5842125560303ecc0019017262e0b3e3400 Mon Sep 17 00:00:00 2001 From: Harry Maclean Date: Mon, 5 Feb 2024 16:45:59 +0000 Subject: [PATCH 059/378] Ruby: Recognise more ActiveRecord connections --- .../codeql/ruby/frameworks/ActiveRecord.qll | 6 +- .../active_record/ActiveRecord.expected | 227 +++++++++--------- .../frameworks/active_record/ActiveRecord.rb | 4 + 3 files changed, 125 insertions(+), 112 deletions(-) diff --git a/ruby/ql/lib/codeql/ruby/frameworks/ActiveRecord.qll b/ruby/ql/lib/codeql/ruby/frameworks/ActiveRecord.qll index 843eb4f8d6e..4596c432070 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/ActiveRecord.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/ActiveRecord.qll @@ -77,7 +77,11 @@ private predicate isUnlikelyExternalCall(API::MethodAccessNode node) { } private API::Node activeRecordConnectionInstance() { - result = activeRecordBaseClass().getReturn("connection") + result = + [ + activeRecordBaseClass().getReturn("connection"), + activeRecordBaseClass().getInstance().getReturn("connection") + ] } /** diff --git a/ruby/ql/test/library-tests/frameworks/active_record/ActiveRecord.expected b/ruby/ql/test/library-tests/frameworks/active_record/ActiveRecord.expected index d7195d11ad7..b273bddbee6 100644 --- a/ruby/ql/test/library-tests/frameworks/active_record/ActiveRecord.expected +++ b/ruby/ql/test/library-tests/frameworks/active_record/ActiveRecord.expected @@ -1,7 +1,7 @@ activeRecordModelClasses | ActiveRecord.rb:1:1:3:3 | UserGroup | -| ActiveRecord.rb:5:1:15:3 | User | -| ActiveRecord.rb:17:1:21:3 | Admin | +| ActiveRecord.rb:5:1:19:3 | User | +| ActiveRecord.rb:21:1:25:3 | Admin | | associations.rb:1:1:3:3 | Author | | associations.rb:5:1:9:3 | Post | | associations.rb:11:1:13:3 | Tag | @@ -10,17 +10,20 @@ activeRecordInstances | ActiveRecord.rb:9:5:9:68 | call to find | | ActiveRecord.rb:13:5:13:40 | call to find_by | | ActiveRecord.rb:13:5:13:46 | call to users | -| ActiveRecord.rb:35:5:35:51 | call to authenticate | -| ActiveRecord.rb:36:5:36:30 | call to find_by_name | -| ActiveRecord.rb:55:5:57:7 | if ... | -| ActiveRecord.rb:55:43:56:40 | then ... | -| ActiveRecord.rb:56:7:56:40 | call to find_by | -| ActiveRecord.rb:60:5:60:33 | call to find_by | -| ActiveRecord.rb:62:5:62:34 | call to find | -| ActiveRecord.rb:72:5:72:24 | call to create | -| ActiveRecord.rb:76:5:76:66 | call to create | -| ActiveRecord.rb:80:5:80:68 | call to create | -| ActiveRecord.rb:84:5:84:16 | call to create | +| ActiveRecord.rb:16:3:18:5 | self (exec) | +| ActiveRecord.rb:16:3:18:5 | self in exec | +| ActiveRecord.rb:17:5:17:14 | self | +| ActiveRecord.rb:39:5:39:51 | call to authenticate | +| ActiveRecord.rb:40:5:40:30 | call to find_by_name | +| ActiveRecord.rb:59:5:61:7 | if ... | +| ActiveRecord.rb:59:43:60:40 | then ... | +| ActiveRecord.rb:60:7:60:40 | call to find_by | +| ActiveRecord.rb:64:5:64:33 | call to find_by | +| ActiveRecord.rb:66:5:66:34 | call to find | +| ActiveRecord.rb:76:5:76:24 | call to create | +| ActiveRecord.rb:80:5:80:66 | call to create | +| ActiveRecord.rb:84:5:84:68 | call to create | +| ActiveRecord.rb:88:5:88:16 | call to create | | associations.rb:19:1:19:7 | author1 | | associations.rb:19:1:19:20 | ... = ... | | associations.rb:19:11:19:20 | call to new | @@ -105,46 +108,47 @@ activeRecordInstances | associations.rb:53:1:53:34 | call to find | activeRecordSqlExecutionRanges | ActiveRecord.rb:9:33:9:67 | "name='#{...}' and pass='#{...}'" | -| ActiveRecord.rb:19:16:19:24 | condition | -| ActiveRecord.rb:28:30:28:44 | ...[...] | -| ActiveRecord.rb:29:20:29:42 | "id = '#{...}'" | -| ActiveRecord.rb:30:21:30:45 | call to [] | -| ActiveRecord.rb:31:16:31:21 | <<-SQL | -| ActiveRecord.rb:34:20:34:47 | "user.id = '#{...}'" | -| ActiveRecord.rb:46:20:46:32 | ... + ... | -| ActiveRecord.rb:52:16:52:28 | "name #{...}" | -| ActiveRecord.rb:56:20:56:39 | "username = #{...}" | -| ActiveRecord.rb:68:21:68:44 | ...[...] | -| ActiveRecord.rb:106:27:106:76 | "this is an unsafe annotation:..." | +| ActiveRecord.rb:17:24:17:24 | q | +| ActiveRecord.rb:23:16:23:24 | condition | +| ActiveRecord.rb:32:30:32:44 | ...[...] | +| ActiveRecord.rb:33:20:33:42 | "id = '#{...}'" | +| ActiveRecord.rb:34:21:34:45 | call to [] | +| ActiveRecord.rb:35:16:35:21 | <<-SQL | +| ActiveRecord.rb:38:20:38:47 | "user.id = '#{...}'" | +| ActiveRecord.rb:50:20:50:32 | ... + ... | +| ActiveRecord.rb:56:16:56:28 | "name #{...}" | +| ActiveRecord.rb:60:20:60:39 | "username = #{...}" | +| ActiveRecord.rb:72:21:72:44 | ...[...] | +| ActiveRecord.rb:110:27:110:76 | "this is an unsafe annotation:..." | activeRecordModelClassMethodCalls | ActiveRecord.rb:2:3:2:17 | call to has_many | | ActiveRecord.rb:6:3:6:24 | call to belongs_to | | ActiveRecord.rb:9:5:9:68 | call to find | | ActiveRecord.rb:13:5:13:40 | call to find_by | | ActiveRecord.rb:13:5:13:46 | call to users | -| ActiveRecord.rb:19:5:19:25 | call to destroy_by | -| ActiveRecord.rb:28:5:28:45 | call to calculate | -| ActiveRecord.rb:29:5:29:43 | call to delete_by | -| ActiveRecord.rb:30:5:30:46 | call to destroy_by | -| ActiveRecord.rb:31:5:31:35 | call to where | -| ActiveRecord.rb:34:5:34:14 | call to where | -| ActiveRecord.rb:34:5:34:48 | call to not | -| ActiveRecord.rb:36:5:36:30 | call to find_by_name | -| ActiveRecord.rb:37:5:37:36 | call to not_a_find_by_method | -| ActiveRecord.rb:46:5:46:33 | call to delete_by | -| ActiveRecord.rb:52:5:52:29 | call to order | -| ActiveRecord.rb:56:7:56:40 | call to find_by | -| ActiveRecord.rb:60:5:60:33 | call to find_by | -| ActiveRecord.rb:62:5:62:34 | call to find | -| ActiveRecord.rb:72:5:72:24 | call to create | -| ActiveRecord.rb:76:5:76:66 | call to create | -| ActiveRecord.rb:80:5:80:68 | call to create | -| ActiveRecord.rb:84:5:84:16 | call to create | -| ActiveRecord.rb:88:5:88:27 | call to update | -| ActiveRecord.rb:92:5:92:69 | call to update | -| ActiveRecord.rb:96:5:96:71 | call to update | -| ActiveRecord.rb:102:13:102:54 | call to annotate | -| ActiveRecord.rb:106:13:106:77 | call to annotate | +| ActiveRecord.rb:23:5:23:25 | call to destroy_by | +| ActiveRecord.rb:32:5:32:45 | call to calculate | +| ActiveRecord.rb:33:5:33:43 | call to delete_by | +| ActiveRecord.rb:34:5:34:46 | call to destroy_by | +| ActiveRecord.rb:35:5:35:35 | call to where | +| ActiveRecord.rb:38:5:38:14 | call to where | +| ActiveRecord.rb:38:5:38:48 | call to not | +| ActiveRecord.rb:40:5:40:30 | call to find_by_name | +| ActiveRecord.rb:41:5:41:36 | call to not_a_find_by_method | +| ActiveRecord.rb:50:5:50:33 | call to delete_by | +| ActiveRecord.rb:56:5:56:29 | call to order | +| ActiveRecord.rb:60:7:60:40 | call to find_by | +| ActiveRecord.rb:64:5:64:33 | call to find_by | +| ActiveRecord.rb:66:5:66:34 | call to find | +| ActiveRecord.rb:76:5:76:24 | call to create | +| ActiveRecord.rb:80:5:80:66 | call to create | +| ActiveRecord.rb:84:5:84:68 | call to create | +| ActiveRecord.rb:88:5:88:16 | call to create | +| ActiveRecord.rb:92:5:92:27 | call to update | +| ActiveRecord.rb:96:5:96:69 | call to update | +| ActiveRecord.rb:100:5:100:71 | call to update | +| ActiveRecord.rb:106:13:106:54 | call to annotate | +| ActiveRecord.rb:110:13:110:77 | call to annotate | | associations.rb:2:3:2:17 | call to has_many | | associations.rb:6:3:6:20 | call to belongs_to | | associations.rb:7:3:7:20 | call to has_many | @@ -200,41 +204,41 @@ activeRecordModelClassMethodCalls activeRecordModelClassMethodCallsReplacement | ActiveRecord.rb:1:1:3:3 | UserGroup | ActiveRecord.rb:2:3:2:17 | call to has_many | | ActiveRecord.rb:1:1:3:3 | UserGroup | ActiveRecord.rb:13:5:13:40 | call to find_by | -| ActiveRecord.rb:5:1:15:3 | User | ActiveRecord.rb:6:3:6:24 | call to belongs_to | -| ActiveRecord.rb:5:1:15:3 | User | ActiveRecord.rb:9:5:9:68 | call to find | -| ActiveRecord.rb:5:1:15:3 | User | ActiveRecord.rb:19:5:19:25 | call to destroy_by | -| ActiveRecord.rb:5:1:15:3 | User | ActiveRecord.rb:28:5:28:45 | call to calculate | -| ActiveRecord.rb:5:1:15:3 | User | ActiveRecord.rb:29:5:29:43 | call to delete_by | -| ActiveRecord.rb:5:1:15:3 | User | ActiveRecord.rb:30:5:30:46 | call to destroy_by | -| ActiveRecord.rb:5:1:15:3 | User | ActiveRecord.rb:31:5:31:35 | call to where | -| ActiveRecord.rb:5:1:15:3 | User | ActiveRecord.rb:34:5:34:14 | call to where | -| ActiveRecord.rb:5:1:15:3 | User | ActiveRecord.rb:35:5:35:51 | call to authenticate | -| ActiveRecord.rb:5:1:15:3 | User | ActiveRecord.rb:36:5:36:30 | call to find_by_name | -| ActiveRecord.rb:5:1:15:3 | User | ActiveRecord.rb:37:5:37:36 | call to not_a_find_by_method | -| ActiveRecord.rb:5:1:15:3 | User | ActiveRecord.rb:46:5:46:33 | call to delete_by | -| ActiveRecord.rb:5:1:15:3 | User | ActiveRecord.rb:52:5:52:29 | call to order | -| ActiveRecord.rb:5:1:15:3 | User | ActiveRecord.rb:56:7:56:40 | call to find_by | -| ActiveRecord.rb:5:1:15:3 | User | ActiveRecord.rb:60:5:60:33 | call to find_by | -| ActiveRecord.rb:5:1:15:3 | User | ActiveRecord.rb:62:5:62:34 | call to find | -| ActiveRecord.rb:5:1:15:3 | User | ActiveRecord.rb:68:5:68:45 | call to delete_by | -| ActiveRecord.rb:5:1:15:3 | User | ActiveRecord.rb:72:5:72:24 | call to create | -| ActiveRecord.rb:5:1:15:3 | User | ActiveRecord.rb:76:5:76:66 | call to create | -| ActiveRecord.rb:5:1:15:3 | User | ActiveRecord.rb:80:5:80:68 | call to create | -| ActiveRecord.rb:5:1:15:3 | User | ActiveRecord.rb:84:5:84:16 | call to create | -| ActiveRecord.rb:5:1:15:3 | User | ActiveRecord.rb:88:5:88:27 | call to update | -| ActiveRecord.rb:5:1:15:3 | User | ActiveRecord.rb:92:5:92:69 | call to update | -| ActiveRecord.rb:5:1:15:3 | User | ActiveRecord.rb:96:5:96:71 | call to update | -| ActiveRecord.rb:5:1:15:3 | User | ActiveRecord.rb:102:13:102:54 | call to annotate | -| ActiveRecord.rb:5:1:15:3 | User | ActiveRecord.rb:106:13:106:77 | call to annotate | -| ActiveRecord.rb:17:1:21:3 | Admin | ActiveRecord.rb:19:5:19:25 | call to destroy_by | -| ActiveRecord.rb:17:1:21:3 | Admin | ActiveRecord.rb:68:5:68:45 | call to delete_by | -| ActiveRecord.rb:17:1:21:3 | Admin | ActiveRecord.rb:72:5:72:24 | call to create | -| ActiveRecord.rb:17:1:21:3 | Admin | ActiveRecord.rb:76:5:76:66 | call to create | -| ActiveRecord.rb:17:1:21:3 | Admin | ActiveRecord.rb:80:5:80:68 | call to create | -| ActiveRecord.rb:17:1:21:3 | Admin | ActiveRecord.rb:84:5:84:16 | call to create | -| ActiveRecord.rb:17:1:21:3 | Admin | ActiveRecord.rb:88:5:88:27 | call to update | -| ActiveRecord.rb:17:1:21:3 | Admin | ActiveRecord.rb:92:5:92:69 | call to update | -| ActiveRecord.rb:17:1:21:3 | Admin | ActiveRecord.rb:96:5:96:71 | call to update | +| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:6:3:6:24 | call to belongs_to | +| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:9:5:9:68 | call to find | +| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:23:5:23:25 | call to destroy_by | +| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:32:5:32:45 | call to calculate | +| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:33:5:33:43 | call to delete_by | +| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:34:5:34:46 | call to destroy_by | +| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:35:5:35:35 | call to where | +| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:38:5:38:14 | call to where | +| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:39:5:39:51 | call to authenticate | +| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:40:5:40:30 | call to find_by_name | +| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:41:5:41:36 | call to not_a_find_by_method | +| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:50:5:50:33 | call to delete_by | +| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:56:5:56:29 | call to order | +| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:60:7:60:40 | call to find_by | +| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:64:5:64:33 | call to find_by | +| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:66:5:66:34 | call to find | +| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:72:5:72:45 | call to delete_by | +| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:76:5:76:24 | call to create | +| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:80:5:80:66 | call to create | +| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:84:5:84:68 | call to create | +| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:88:5:88:16 | call to create | +| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:92:5:92:27 | call to update | +| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:96:5:96:69 | call to update | +| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:100:5:100:71 | call to update | +| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:106:13:106:54 | call to annotate | +| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:110:13:110:77 | call to annotate | +| ActiveRecord.rb:21:1:25:3 | Admin | ActiveRecord.rb:23:5:23:25 | call to destroy_by | +| ActiveRecord.rb:21:1:25:3 | Admin | ActiveRecord.rb:72:5:72:45 | call to delete_by | +| ActiveRecord.rb:21:1:25:3 | Admin | ActiveRecord.rb:76:5:76:24 | call to create | +| ActiveRecord.rb:21:1:25:3 | Admin | ActiveRecord.rb:80:5:80:66 | call to create | +| ActiveRecord.rb:21:1:25:3 | Admin | ActiveRecord.rb:84:5:84:68 | call to create | +| ActiveRecord.rb:21:1:25:3 | Admin | ActiveRecord.rb:88:5:88:16 | call to create | +| ActiveRecord.rb:21:1:25:3 | Admin | ActiveRecord.rb:92:5:92:27 | call to update | +| ActiveRecord.rb:21:1:25:3 | Admin | ActiveRecord.rb:96:5:96:69 | call to update | +| ActiveRecord.rb:21:1:25:3 | Admin | ActiveRecord.rb:100:5:100:71 | call to update | | associations.rb:1:1:3:3 | Author | associations.rb:2:3:2:17 | call to has_many | | associations.rb:1:1:3:3 | Author | associations.rb:19:11:19:20 | call to new | | associations.rb:5:1:9:3 | Post | associations.rb:6:3:6:20 | call to belongs_to | @@ -244,28 +248,29 @@ activeRecordModelClassMethodCallsReplacement | associations.rb:15:1:17:3 | Comment | associations.rb:16:3:16:18 | call to belongs_to | potentiallyUnsafeSqlExecutingMethodCall | ActiveRecord.rb:9:5:9:68 | call to find | -| ActiveRecord.rb:19:5:19:25 | call to destroy_by | -| ActiveRecord.rb:28:5:28:45 | call to calculate | -| ActiveRecord.rb:29:5:29:43 | call to delete_by | -| ActiveRecord.rb:30:5:30:46 | call to destroy_by | -| ActiveRecord.rb:31:5:31:35 | call to where | -| ActiveRecord.rb:34:5:34:48 | call to not | -| ActiveRecord.rb:46:5:46:33 | call to delete_by | -| ActiveRecord.rb:52:5:52:29 | call to order | -| ActiveRecord.rb:56:7:56:40 | call to find_by | -| ActiveRecord.rb:106:13:106:77 | call to annotate | +| ActiveRecord.rb:23:5:23:25 | call to destroy_by | +| ActiveRecord.rb:32:5:32:45 | call to calculate | +| ActiveRecord.rb:33:5:33:43 | call to delete_by | +| ActiveRecord.rb:34:5:34:46 | call to destroy_by | +| ActiveRecord.rb:35:5:35:35 | call to where | +| ActiveRecord.rb:38:5:38:48 | call to not | +| ActiveRecord.rb:50:5:50:33 | call to delete_by | +| ActiveRecord.rb:56:5:56:29 | call to order | +| ActiveRecord.rb:60:7:60:40 | call to find_by | +| ActiveRecord.rb:110:13:110:77 | call to annotate | activeRecordModelInstantiations -| ActiveRecord.rb:9:5:9:68 | call to find | ActiveRecord.rb:5:1:15:3 | User | +| ActiveRecord.rb:9:5:9:68 | call to find | ActiveRecord.rb:5:1:19:3 | User | | ActiveRecord.rb:13:5:13:40 | call to find_by | ActiveRecord.rb:1:1:3:3 | UserGroup | -| ActiveRecord.rb:13:5:13:46 | call to users | ActiveRecord.rb:5:1:15:3 | User | -| ActiveRecord.rb:36:5:36:30 | call to find_by_name | ActiveRecord.rb:5:1:15:3 | User | -| ActiveRecord.rb:56:7:56:40 | call to find_by | ActiveRecord.rb:5:1:15:3 | User | -| ActiveRecord.rb:60:5:60:33 | call to find_by | ActiveRecord.rb:5:1:15:3 | User | -| ActiveRecord.rb:62:5:62:34 | call to find | ActiveRecord.rb:5:1:15:3 | User | -| ActiveRecord.rb:72:5:72:24 | call to create | ActiveRecord.rb:17:1:21:3 | Admin | -| ActiveRecord.rb:76:5:76:66 | call to create | ActiveRecord.rb:17:1:21:3 | Admin | -| ActiveRecord.rb:80:5:80:68 | call to create | ActiveRecord.rb:17:1:21:3 | Admin | -| ActiveRecord.rb:84:5:84:16 | call to create | ActiveRecord.rb:17:1:21:3 | Admin | +| ActiveRecord.rb:13:5:13:46 | call to users | ActiveRecord.rb:5:1:19:3 | User | +| ActiveRecord.rb:16:3:18:5 | self in exec | ActiveRecord.rb:5:1:19:3 | User | +| ActiveRecord.rb:40:5:40:30 | call to find_by_name | ActiveRecord.rb:5:1:19:3 | User | +| ActiveRecord.rb:60:7:60:40 | call to find_by | ActiveRecord.rb:5:1:19:3 | User | +| ActiveRecord.rb:64:5:64:33 | call to find_by | ActiveRecord.rb:5:1:19:3 | User | +| ActiveRecord.rb:66:5:66:34 | call to find | ActiveRecord.rb:5:1:19:3 | User | +| ActiveRecord.rb:76:5:76:24 | call to create | ActiveRecord.rb:21:1:25:3 | Admin | +| ActiveRecord.rb:80:5:80:66 | call to create | ActiveRecord.rb:21:1:25:3 | Admin | +| ActiveRecord.rb:84:5:84:68 | call to create | ActiveRecord.rb:21:1:25:3 | Admin | +| ActiveRecord.rb:88:5:88:16 | call to create | ActiveRecord.rb:21:1:25:3 | Admin | | associations.rb:19:11:19:20 | call to new | associations.rb:1:1:3:3 | Author | | associations.rb:21:9:21:21 | call to posts | associations.rb:5:1:9:3 | Post | | associations.rb:21:9:21:28 | call to create | associations.rb:5:1:9:3 | Post | @@ -307,13 +312,13 @@ activeRecordModelInstantiations | associations.rb:53:1:53:13 | call to posts | associations.rb:5:1:9:3 | Post | | associations.rb:53:1:53:20 | call to reload | associations.rb:5:1:9:3 | Post | persistentWriteAccesses -| ActiveRecord.rb:72:5:72:24 | call to create | ActiveRecord.rb:72:18:72:23 | call to params | -| ActiveRecord.rb:76:5:76:66 | call to create | ActiveRecord.rb:76:24:76:36 | ...[...] | -| ActiveRecord.rb:76:5:76:66 | call to create | ActiveRecord.rb:76:49:76:65 | ...[...] | -| ActiveRecord.rb:80:5:80:68 | call to create | ActiveRecord.rb:80:25:80:37 | ...[...] | -| ActiveRecord.rb:80:5:80:68 | call to create | ActiveRecord.rb:80:50:80:66 | ...[...] | -| ActiveRecord.rb:88:5:88:27 | call to update | ActiveRecord.rb:88:21:88:26 | call to params | -| ActiveRecord.rb:92:5:92:69 | call to update | ActiveRecord.rb:92:27:92:39 | ...[...] | -| ActiveRecord.rb:92:5:92:69 | call to update | ActiveRecord.rb:92:52:92:68 | ...[...] | -| ActiveRecord.rb:96:5:96:71 | call to update | ActiveRecord.rb:96:21:96:70 | call to [] | +| ActiveRecord.rb:76:5:76:24 | call to create | ActiveRecord.rb:76:18:76:23 | call to params | +| ActiveRecord.rb:80:5:80:66 | call to create | ActiveRecord.rb:80:24:80:36 | ...[...] | +| ActiveRecord.rb:80:5:80:66 | call to create | ActiveRecord.rb:80:49:80:65 | ...[...] | +| ActiveRecord.rb:84:5:84:68 | call to create | ActiveRecord.rb:84:25:84:37 | ...[...] | +| ActiveRecord.rb:84:5:84:68 | call to create | ActiveRecord.rb:84:50:84:66 | ...[...] | +| ActiveRecord.rb:92:5:92:27 | call to update | ActiveRecord.rb:92:21:92:26 | call to params | +| ActiveRecord.rb:96:5:96:69 | call to update | ActiveRecord.rb:96:27:96:39 | ...[...] | +| ActiveRecord.rb:96:5:96:69 | call to update | ActiveRecord.rb:96:52:96:68 | ...[...] | +| ActiveRecord.rb:100:5:100:71 | call to update | ActiveRecord.rb:100:21:100:70 | call to [] | | associations.rb:31:16:31:22 | ... = ... | associations.rb:31:16:31:22 | author2 | diff --git a/ruby/ql/test/library-tests/frameworks/active_record/ActiveRecord.rb b/ruby/ql/test/library-tests/frameworks/active_record/ActiveRecord.rb index 8e5961c8771..dca8f3c43d3 100644 --- a/ruby/ql/test/library-tests/frameworks/active_record/ActiveRecord.rb +++ b/ruby/ql/test/library-tests/frameworks/active_record/ActiveRecord.rb @@ -12,6 +12,10 @@ class User < ApplicationRecord def self.from(user_group_id) UserGroup.find_by(id: user_group_id).users end + + def exec(q) + connection.execute(q) + end end class Admin < User From c1b35fbf475dbb89785ca6041492cf6eb1339981 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 5 Feb 2024 17:58:57 +0000 Subject: [PATCH 060/378] Release preparation for version 2.16.2 --- cpp/ql/lib/CHANGELOG.md | 7 +++++++ .../lib/change-notes/2024-01-30-throwing-model.md | 4 ---- .../0.12.5.md} | 8 +++++--- cpp/ql/lib/codeql-pack.release.yml | 2 +- cpp/ql/lib/qlpack.yml | 2 +- cpp/ql/src/CHANGELOG.md | 11 +++++++++++ .../change-notes/2024-01-19-extracted-files.md | 4 ---- ...e_positive_incorrect_string_type_conversion.md | 4 ---- .../2024-01-29-incorrectly-checked-scanf-2.md | 4 ---- .../2024-01-29-incorrectly-checked-scanf.md | 4 ---- ...24-01-29-uninitialized-local-false-positive.md | 5 ----- cpp/ql/src/change-notes/released/0.9.4.md | 10 ++++++++++ cpp/ql/src/codeql-pack.release.yml | 2 +- cpp/ql/src/qlpack.yml | 2 +- csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md | 4 ++++ .../Solorigate/lib/change-notes/released/1.7.8.md | 3 +++ .../Solorigate/lib/codeql-pack.release.yml | 2 +- csharp/ql/campaigns/Solorigate/lib/qlpack.yml | 2 +- csharp/ql/campaigns/Solorigate/src/CHANGELOG.md | 4 ++++ .../Solorigate/src/change-notes/released/1.7.8.md | 3 +++ .../Solorigate/src/codeql-pack.release.yml | 2 +- csharp/ql/campaigns/Solorigate/src/qlpack.yml | 2 +- csharp/ql/lib/CHANGELOG.md | 11 +++++++++++ .../2024-01-25-extractor-option-logging.md | 6 ------ .../2024-01-26-collection-expression.md | 4 ---- .../2024-01-31-compilation-expanded-args.md | 5 ----- csharp/ql/lib/change-notes/released/0.8.8.md | 10 ++++++++++ csharp/ql/lib/codeql-pack.release.yml | 2 +- csharp/ql/lib/qlpack.yml | 2 +- csharp/ql/src/CHANGELOG.md | 6 ++++++ .../0.8.8.md} | 7 ++++--- csharp/ql/src/codeql-pack.release.yml | 2 +- csharp/ql/src/qlpack.yml | 2 +- go/ql/consistency-queries/CHANGELOG.md | 4 ++++ .../change-notes/released/0.0.7.md | 3 +++ go/ql/consistency-queries/codeql-pack.release.yml | 2 +- go/ql/consistency-queries/qlpack.yml | 2 +- go/ql/lib/CHANGELOG.md | 4 ++++ go/ql/lib/change-notes/released/0.7.8.md | 3 +++ go/ql/lib/codeql-pack.release.yml | 2 +- go/ql/lib/qlpack.yml | 2 +- go/ql/src/CHANGELOG.md | 4 ++++ go/ql/src/change-notes/released/0.7.8.md | 3 +++ go/ql/src/codeql-pack.release.yml | 2 +- go/ql/src/qlpack.yml | 2 +- java/ql/automodel/src/CHANGELOG.md | 4 ++++ .../automodel/src/change-notes/released/0.0.14.md | 3 +++ java/ql/automodel/src/codeql-pack.release.yml | 2 +- java/ql/automodel/src/qlpack.yml | 2 +- java/ql/lib/CHANGELOG.md | 10 ++++++++++ java/ql/lib/change-notes/2024-01-24-new-models.md | 7 ------- .../0.8.8.md} | 11 ++++++++--- java/ql/lib/codeql-pack.release.yml | 2 +- java/ql/lib/qlpack.yml | 2 +- java/ql/src/CHANGELOG.md | 15 +++++++++++---- ...-01-15-android-sensitive-notification-query.md | 4 ---- ...24-01-29-android-sensitive-text-field-query.md | 4 ---- java/ql/src/change-notes/released/0.8.8.md | 6 ++++++ java/ql/src/codeql-pack.release.yml | 2 +- java/ql/src/qlpack.yml | 2 +- javascript/ql/lib/CHANGELOG.md | 4 ++++ javascript/ql/lib/change-notes/released/0.8.8.md | 3 +++ javascript/ql/lib/codeql-pack.release.yml | 2 +- javascript/ql/lib/qlpack.yml | 2 +- javascript/ql/src/CHANGELOG.md | 4 ++++ javascript/ql/src/change-notes/released/0.8.8.md | 3 +++ javascript/ql/src/codeql-pack.release.yml | 2 +- javascript/ql/src/qlpack.yml | 2 +- misc/suite-helpers/CHANGELOG.md | 4 ++++ misc/suite-helpers/change-notes/released/0.7.8.md | 3 +++ misc/suite-helpers/codeql-pack.release.yml | 2 +- misc/suite-helpers/qlpack.yml | 2 +- python/ql/lib/CHANGELOG.md | 10 ++++++++++ .../change-notes/2024-01-21-regex-ascii-flag.md | 4 ---- .../ql/lib/change-notes/2024-01-22-html-escape.md | 4 ---- python/ql/lib/change-notes/released/0.11.8.md | 9 +++++++++ python/ql/lib/codeql-pack.release.yml | 2 +- python/ql/lib/qlpack.yml | 2 +- python/ql/src/CHANGELOG.md | 4 ++++ python/ql/src/change-notes/released/0.9.8.md | 3 +++ python/ql/src/codeql-pack.release.yml | 2 +- python/ql/src/qlpack.yml | 2 +- ruby/ql/lib/CHANGELOG.md | 6 ++++++ .../0.8.8.md} | 7 ++++--- ruby/ql/lib/codeql-pack.release.yml | 2 +- ruby/ql/lib/qlpack.yml | 2 +- ruby/ql/src/CHANGELOG.md | 11 +++++++++++ .../2023-12-18-insecure-randomness-query.md | 4 ---- .../2024-01-30-unsafe-deserialization-sinks.md | 5 ----- ruby/ql/src/change-notes/released/0.8.8.md | 10 ++++++++++ ruby/ql/src/codeql-pack.release.yml | 2 +- ruby/ql/src/qlpack.yml | 2 +- shared/controlflow/CHANGELOG.md | 4 ++++ shared/controlflow/change-notes/released/0.1.8.md | 3 +++ shared/controlflow/codeql-pack.release.yml | 2 +- shared/controlflow/qlpack.yml | 2 +- shared/dataflow/CHANGELOG.md | 4 ++++ shared/dataflow/change-notes/released/0.1.8.md | 3 +++ shared/dataflow/codeql-pack.release.yml | 2 +- shared/dataflow/qlpack.yml | 2 +- shared/mad/CHANGELOG.md | 4 ++++ shared/mad/change-notes/released/0.2.8.md | 3 +++ shared/mad/codeql-pack.release.yml | 2 +- shared/mad/qlpack.yml | 2 +- shared/rangeanalysis/CHANGELOG.md | 4 ++++ .../rangeanalysis/change-notes/released/0.0.7.md | 3 +++ shared/rangeanalysis/codeql-pack.release.yml | 2 +- shared/rangeanalysis/qlpack.yml | 2 +- shared/regex/CHANGELOG.md | 4 ++++ shared/regex/change-notes/released/0.2.8.md | 3 +++ shared/regex/codeql-pack.release.yml | 2 +- shared/regex/qlpack.yml | 2 +- shared/ssa/CHANGELOG.md | 4 ++++ shared/ssa/change-notes/released/0.2.8.md | 3 +++ shared/ssa/codeql-pack.release.yml | 2 +- shared/ssa/qlpack.yml | 2 +- shared/threat-models/CHANGELOG.md | 4 ++++ .../threat-models/change-notes/released/0.0.7.md | 3 +++ shared/threat-models/codeql-pack.release.yml | 2 +- shared/threat-models/qlpack.yml | 2 +- shared/tutorial/CHANGELOG.md | 4 ++++ shared/tutorial/change-notes/released/0.2.8.md | 3 +++ shared/tutorial/codeql-pack.release.yml | 2 +- shared/tutorial/qlpack.yml | 2 +- shared/typetracking/CHANGELOG.md | 4 ++++ .../typetracking/change-notes/released/0.2.8.md | 3 +++ shared/typetracking/codeql-pack.release.yml | 2 +- shared/typetracking/qlpack.yml | 2 +- shared/typos/CHANGELOG.md | 4 ++++ shared/typos/change-notes/released/0.2.8.md | 3 +++ shared/typos/codeql-pack.release.yml | 2 +- shared/typos/qlpack.yml | 2 +- shared/util/CHANGELOG.md | 4 ++++ shared/util/change-notes/released/0.2.8.md | 3 +++ shared/util/codeql-pack.release.yml | 2 +- shared/util/qlpack.yml | 2 +- shared/yaml/CHANGELOG.md | 4 ++++ shared/yaml/change-notes/released/0.2.8.md | 3 +++ shared/yaml/codeql-pack.release.yml | 2 +- shared/yaml/qlpack.yml | 2 +- swift/ql/lib/CHANGELOG.md | 4 ++++ swift/ql/lib/change-notes/released/0.3.8.md | 3 +++ swift/ql/lib/codeql-pack.release.yml | 2 +- swift/ql/lib/qlpack.yml | 2 +- swift/ql/src/CHANGELOG.md | 4 ++++ swift/ql/src/change-notes/released/0.3.8.md | 3 +++ swift/ql/src/codeql-pack.release.yml | 2 +- swift/ql/src/qlpack.yml | 2 +- 148 files changed, 383 insertions(+), 154 deletions(-) delete mode 100644 cpp/ql/lib/change-notes/2024-01-30-throwing-model.md rename cpp/ql/lib/change-notes/{2024-01-30-preproc-block.md => released/0.12.5.md} (55%) delete mode 100644 cpp/ql/src/change-notes/2024-01-19-extracted-files.md delete mode 100644 cpp/ql/src/change-notes/2024-01-29-false_positive_incorrect_string_type_conversion.md delete mode 100644 cpp/ql/src/change-notes/2024-01-29-incorrectly-checked-scanf-2.md delete mode 100644 cpp/ql/src/change-notes/2024-01-29-incorrectly-checked-scanf.md delete mode 100644 cpp/ql/src/change-notes/2024-01-29-uninitialized-local-false-positive.md create mode 100644 cpp/ql/src/change-notes/released/0.9.4.md create mode 100644 csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.8.md create mode 100644 csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.8.md delete mode 100644 csharp/ql/lib/change-notes/2024-01-25-extractor-option-logging.md delete mode 100644 csharp/ql/lib/change-notes/2024-01-26-collection-expression.md delete mode 100644 csharp/ql/lib/change-notes/2024-01-31-compilation-expanded-args.md create mode 100644 csharp/ql/lib/change-notes/released/0.8.8.md rename csharp/ql/src/change-notes/{2024-01-22-url-redirect-sanitizer.md => released/0.8.8.md} (75%) create mode 100644 go/ql/consistency-queries/change-notes/released/0.0.7.md create mode 100644 go/ql/lib/change-notes/released/0.7.8.md create mode 100644 go/ql/src/change-notes/released/0.7.8.md create mode 100644 java/ql/automodel/src/change-notes/released/0.0.14.md delete mode 100644 java/ql/lib/change-notes/2024-01-24-new-models.md rename java/ql/lib/change-notes/{2024-01-23-add-uuid-and-date-to-simpletypesanitizer.md => released/0.8.8.md} (52%) delete mode 100644 java/ql/src/change-notes/2024-01-15-android-sensitive-notification-query.md delete mode 100644 java/ql/src/change-notes/2024-01-29-android-sensitive-text-field-query.md create mode 100644 java/ql/src/change-notes/released/0.8.8.md create mode 100644 javascript/ql/lib/change-notes/released/0.8.8.md create mode 100644 javascript/ql/src/change-notes/released/0.8.8.md create mode 100644 misc/suite-helpers/change-notes/released/0.7.8.md delete mode 100644 python/ql/lib/change-notes/2024-01-21-regex-ascii-flag.md delete mode 100644 python/ql/lib/change-notes/2024-01-22-html-escape.md create mode 100644 python/ql/lib/change-notes/released/0.11.8.md create mode 100644 python/ql/src/change-notes/released/0.9.8.md rename ruby/ql/lib/change-notes/{2024-01-22-erb-render-flow.md => released/0.8.8.md} (79%) delete mode 100644 ruby/ql/src/change-notes/2023-12-18-insecure-randomness-query.md delete mode 100644 ruby/ql/src/change-notes/2024-01-30-unsafe-deserialization-sinks.md create mode 100644 ruby/ql/src/change-notes/released/0.8.8.md create mode 100644 shared/controlflow/change-notes/released/0.1.8.md create mode 100644 shared/dataflow/change-notes/released/0.1.8.md create mode 100644 shared/mad/change-notes/released/0.2.8.md create mode 100644 shared/rangeanalysis/change-notes/released/0.0.7.md create mode 100644 shared/regex/change-notes/released/0.2.8.md create mode 100644 shared/ssa/change-notes/released/0.2.8.md create mode 100644 shared/threat-models/change-notes/released/0.0.7.md create mode 100644 shared/tutorial/change-notes/released/0.2.8.md create mode 100644 shared/typetracking/change-notes/released/0.2.8.md create mode 100644 shared/typos/change-notes/released/0.2.8.md create mode 100644 shared/util/change-notes/released/0.2.8.md create mode 100644 shared/yaml/change-notes/released/0.2.8.md create mode 100644 swift/ql/lib/change-notes/released/0.3.8.md create mode 100644 swift/ql/src/change-notes/released/0.3.8.md diff --git a/cpp/ql/lib/CHANGELOG.md b/cpp/ql/lib/CHANGELOG.md index dc092f2ed35..b552a329250 100644 --- a/cpp/ql/lib/CHANGELOG.md +++ b/cpp/ql/lib/CHANGELOG.md @@ -1,3 +1,10 @@ +## 0.12.5 + +### New Features + +* Added the `PreprocBlock.qll` library to this repository. This library offers a view of `#if`, `#elif`, `#else` and similar directives as a tree with navigable parent-child relationships. +* Added a new `ThrowingFunction` abstract class that can be used to model an external function that may throw an exception. + ## 0.12.4 ### Minor Analysis Improvements diff --git a/cpp/ql/lib/change-notes/2024-01-30-throwing-model.md b/cpp/ql/lib/change-notes/2024-01-30-throwing-model.md deleted file mode 100644 index 591cc8cc771..00000000000 --- a/cpp/ql/lib/change-notes/2024-01-30-throwing-model.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: feature ---- -* Added a new `ThrowingFunction` abstract class that can be used to model an external function that may throw an exception. \ No newline at end of file diff --git a/cpp/ql/lib/change-notes/2024-01-30-preproc-block.md b/cpp/ql/lib/change-notes/released/0.12.5.md similarity index 55% rename from cpp/ql/lib/change-notes/2024-01-30-preproc-block.md rename to cpp/ql/lib/change-notes/released/0.12.5.md index 6995ec954ff..1ae4668a5c9 100644 --- a/cpp/ql/lib/change-notes/2024-01-30-preproc-block.md +++ b/cpp/ql/lib/change-notes/released/0.12.5.md @@ -1,4 +1,6 @@ ---- -category: feature ---- +## 0.12.5 + +### New Features + * Added the `PreprocBlock.qll` library to this repository. This library offers a view of `#if`, `#elif`, `#else` and similar directives as a tree with navigable parent-child relationships. +* Added a new `ThrowingFunction` abstract class that can be used to model an external function that may throw an exception. diff --git a/cpp/ql/lib/codeql-pack.release.yml b/cpp/ql/lib/codeql-pack.release.yml index b458bb47c53..79f80ae516c 100644 --- a/cpp/ql/lib/codeql-pack.release.yml +++ b/cpp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.12.4 +lastReleaseVersion: 0.12.5 diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml index f0479b167c6..b1b4172e977 100644 --- a/cpp/ql/lib/qlpack.yml +++ b/cpp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-all -version: 0.12.5-dev +version: 0.12.5 groups: cpp dbscheme: semmlecode.cpp.dbscheme extractor: cpp diff --git a/cpp/ql/src/CHANGELOG.md b/cpp/ql/src/CHANGELOG.md index 0e67defb949..68bcdbc5b07 100644 --- a/cpp/ql/src/CHANGELOG.md +++ b/cpp/ql/src/CHANGELOG.md @@ -1,3 +1,14 @@ +## 0.9.4 + +### Minor Analysis Improvements + +* Corrected 2 false positive with `cpp/incorrect-string-type-conversion`: conversion of byte arrays to wchar and new array allocations converted to wchar. +* The "Incorrect return-value check for a 'scanf'-like function" query (`cpp/incorrectly-checked-scanf`) no longer reports an alert when an explicit check for EOF is added. +* The "Incorrect return-value check for a 'scanf'-like function" query (`cpp/incorrectly-checked-scanf`) now recognizes more EOF checks. +* The "Potentially uninitialized local variable" query (`cpp/uninitialized-local`) no longer reports an alert when the local variable is used as a qualifier to a static member function call. +* ``` +* The diagnostic query `cpp/diagnostics/successfully-extracted-files` now considers any C/C++ file seen during extraction, even one with some errors, to be extracted / scanned. This affects the Code Scanning UI measure of scanned C/C++ files. + ## 0.9.3 ### Minor Analysis Improvements diff --git a/cpp/ql/src/change-notes/2024-01-19-extracted-files.md b/cpp/ql/src/change-notes/2024-01-19-extracted-files.md deleted file mode 100644 index df6de1576ac..00000000000 --- a/cpp/ql/src/change-notes/2024-01-19-extracted-files.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The diagnostic query `cpp/diagnostics/successfully-extracted-files` now considers any C/C++ file seen during extraction, even one with some errors, to be extracted / scanned. This affects the Code Scanning UI measure of scanned C/C++ files. diff --git a/cpp/ql/src/change-notes/2024-01-29-false_positive_incorrect_string_type_conversion.md b/cpp/ql/src/change-notes/2024-01-29-false_positive_incorrect_string_type_conversion.md deleted file mode 100644 index 8f081c746f1..00000000000 --- a/cpp/ql/src/change-notes/2024-01-29-false_positive_incorrect_string_type_conversion.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Corrected 2 false positive with `cpp/incorrect-string-type-conversion`: conversion of byte arrays to wchar and new array allocations converted to wchar. \ No newline at end of file diff --git a/cpp/ql/src/change-notes/2024-01-29-incorrectly-checked-scanf-2.md b/cpp/ql/src/change-notes/2024-01-29-incorrectly-checked-scanf-2.md deleted file mode 100644 index cc361145db9..00000000000 --- a/cpp/ql/src/change-notes/2024-01-29-incorrectly-checked-scanf-2.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The "Incorrect return-value check for a 'scanf'-like function" query (`cpp/incorrectly-checked-scanf`) now recognizes more EOF checks. diff --git a/cpp/ql/src/change-notes/2024-01-29-incorrectly-checked-scanf.md b/cpp/ql/src/change-notes/2024-01-29-incorrectly-checked-scanf.md deleted file mode 100644 index 7085b9ce0a8..00000000000 --- a/cpp/ql/src/change-notes/2024-01-29-incorrectly-checked-scanf.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The "Incorrect return-value check for a 'scanf'-like function" query (`cpp/incorrectly-checked-scanf`) no longer reports an alert when an explicit check for EOF is added. diff --git a/cpp/ql/src/change-notes/2024-01-29-uninitialized-local-false-positive.md b/cpp/ql/src/change-notes/2024-01-29-uninitialized-local-false-positive.md deleted file mode 100644 index 0d07482b755..00000000000 --- a/cpp/ql/src/change-notes/2024-01-29-uninitialized-local-false-positive.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -category: minorAnalysis ---- -* The "Potentially uninitialized local variable" query (`cpp/uninitialized-local`) no longer reports an alert when the local variable is used as a qualifier to a static member function call. -* ``` \ No newline at end of file diff --git a/cpp/ql/src/change-notes/released/0.9.4.md b/cpp/ql/src/change-notes/released/0.9.4.md new file mode 100644 index 00000000000..6525a90f9bb --- /dev/null +++ b/cpp/ql/src/change-notes/released/0.9.4.md @@ -0,0 +1,10 @@ +## 0.9.4 + +### Minor Analysis Improvements + +* Corrected 2 false positive with `cpp/incorrect-string-type-conversion`: conversion of byte arrays to wchar and new array allocations converted to wchar. +* The "Incorrect return-value check for a 'scanf'-like function" query (`cpp/incorrectly-checked-scanf`) no longer reports an alert when an explicit check for EOF is added. +* The "Incorrect return-value check for a 'scanf'-like function" query (`cpp/incorrectly-checked-scanf`) now recognizes more EOF checks. +* The "Potentially uninitialized local variable" query (`cpp/uninitialized-local`) no longer reports an alert when the local variable is used as a qualifier to a static member function call. +* ``` +* The diagnostic query `cpp/diagnostics/successfully-extracted-files` now considers any C/C++ file seen during extraction, even one with some errors, to be extracted / scanned. This affects the Code Scanning UI measure of scanned C/C++ files. diff --git a/cpp/ql/src/codeql-pack.release.yml b/cpp/ql/src/codeql-pack.release.yml index 7af7247cbb0..694907ca221 100644 --- a/cpp/ql/src/codeql-pack.release.yml +++ b/cpp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.9.3 +lastReleaseVersion: 0.9.4 diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml index a04a6468617..0da41987b3e 100644 --- a/cpp/ql/src/qlpack.yml +++ b/cpp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-queries -version: 0.9.4-dev +version: 0.9.4 groups: - cpp - queries diff --git a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md index 8afcdeb67f3..1e9fa50c21f 100644 --- a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.7.8 + +No user-facing changes. + ## 1.7.7 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.8.md b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.8.md new file mode 100644 index 00000000000..89c236d93c5 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.8.md @@ -0,0 +1,3 @@ +## 1.7.8 + +No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml b/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml index df4010bd267..e003efd5127 100644 --- a/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml +++ b/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.7.7 +lastReleaseVersion: 1.7.8 diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml index 56cadaf8534..77b1c8b5154 100644 --- a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-all -version: 1.7.8-dev +version: 1.7.8 groups: - csharp - solorigate diff --git a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md index 8afcdeb67f3..1e9fa50c21f 100644 --- a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.7.8 + +No user-facing changes. + ## 1.7.7 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.8.md b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.8.md new file mode 100644 index 00000000000..89c236d93c5 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.8.md @@ -0,0 +1,3 @@ +## 1.7.8 + +No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml b/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml index df4010bd267..e003efd5127 100644 --- a/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml +++ b/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.7.7 +lastReleaseVersion: 1.7.8 diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml index 0b783c75d5a..9851e27c691 100644 --- a/csharp/ql/campaigns/Solorigate/src/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-queries -version: 1.7.8-dev +version: 1.7.8 groups: - csharp - solorigate diff --git a/csharp/ql/lib/CHANGELOG.md b/csharp/ql/lib/CHANGELOG.md index 0b168b22df6..196cd5ecc92 100644 --- a/csharp/ql/lib/CHANGELOG.md +++ b/csharp/ql/lib/CHANGELOG.md @@ -1,3 +1,14 @@ +## 0.8.8 + +### Minor Analysis Improvements + +* Added a new database relation to store compiler arguments specified inside `@[...].rsp` file arguments. The arguments +are returned by `Compilation::getExpandedArgument/1` and `Compilation::getExpandedArguments/0`. +* C# 12: Added extractor, QL library and data flow support for collection expressions like `[1, y, 4, .. x]`. +* The C# extractor now accepts an extractor option `logging.verbosity` that specifies the verbosity of the logs. The +option is added via `codeql database create --language=csharp -Ologging.verbosity=debug ...` or by setting the +corresponding environment variable `CODEQL_EXTRACTOR_CSHARP_OPTION_LOGGING_VERBOSITY`. + ## 0.8.7 ### Minor Analysis Improvements diff --git a/csharp/ql/lib/change-notes/2024-01-25-extractor-option-logging.md b/csharp/ql/lib/change-notes/2024-01-25-extractor-option-logging.md deleted file mode 100644 index 71cb3202675..00000000000 --- a/csharp/ql/lib/change-notes/2024-01-25-extractor-option-logging.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: minorAnalysis ---- -* The C# extractor now accepts an extractor option `logging.verbosity` that specifies the verbosity of the logs. The -option is added via `codeql database create --language=csharp -Ologging.verbosity=debug ...` or by setting the -corresponding environment variable `CODEQL_EXTRACTOR_CSHARP_OPTION_LOGGING_VERBOSITY`. \ No newline at end of file diff --git a/csharp/ql/lib/change-notes/2024-01-26-collection-expression.md b/csharp/ql/lib/change-notes/2024-01-26-collection-expression.md deleted file mode 100644 index 10a958dcf47..00000000000 --- a/csharp/ql/lib/change-notes/2024-01-26-collection-expression.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* C# 12: Added extractor, QL library and data flow support for collection expressions like `[1, y, 4, .. x]`. diff --git a/csharp/ql/lib/change-notes/2024-01-31-compilation-expanded-args.md b/csharp/ql/lib/change-notes/2024-01-31-compilation-expanded-args.md deleted file mode 100644 index 8767c0d1d65..00000000000 --- a/csharp/ql/lib/change-notes/2024-01-31-compilation-expanded-args.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -category: minorAnalysis ---- -* Added a new database relation to store compiler arguments specified inside `@[...].rsp` file arguments. The arguments -are returned by `Compilation::getExpandedArgument/1` and `Compilation::getExpandedArguments/0`. diff --git a/csharp/ql/lib/change-notes/released/0.8.8.md b/csharp/ql/lib/change-notes/released/0.8.8.md new file mode 100644 index 00000000000..96b317ecd06 --- /dev/null +++ b/csharp/ql/lib/change-notes/released/0.8.8.md @@ -0,0 +1,10 @@ +## 0.8.8 + +### Minor Analysis Improvements + +* Added a new database relation to store compiler arguments specified inside `@[...].rsp` file arguments. The arguments +are returned by `Compilation::getExpandedArgument/1` and `Compilation::getExpandedArguments/0`. +* C# 12: Added extractor, QL library and data flow support for collection expressions like `[1, y, 4, .. x]`. +* The C# extractor now accepts an extractor option `logging.verbosity` that specifies the verbosity of the logs. The +option is added via `codeql database create --language=csharp -Ologging.verbosity=debug ...` or by setting the +corresponding environment variable `CODEQL_EXTRACTOR_CSHARP_OPTION_LOGGING_VERBOSITY`. diff --git a/csharp/ql/lib/codeql-pack.release.yml b/csharp/ql/lib/codeql-pack.release.yml index 2ef6dc421f3..da0a61b4048 100644 --- a/csharp/ql/lib/codeql-pack.release.yml +++ b/csharp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.7 +lastReleaseVersion: 0.8.8 diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index 9d8db7347cb..2b137281da6 100644 --- a/csharp/ql/lib/qlpack.yml +++ b/csharp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-all -version: 0.8.8-dev +version: 0.8.8 groups: csharp dbscheme: semmlecode.csharp.dbscheme extractor: csharp diff --git a/csharp/ql/src/CHANGELOG.md b/csharp/ql/src/CHANGELOG.md index 6572f664b0e..ac2fbfce855 100644 --- a/csharp/ql/src/CHANGELOG.md +++ b/csharp/ql/src/CHANGELOG.md @@ -1,3 +1,9 @@ +## 0.8.8 + +### Minor Analysis Improvements + +* Added string interpolation expressions and `string.Format` as possible sanitizers for the `cs/web/unvalidated-url-redirection` query. + ## 0.8.7 ### Minor Analysis Improvements diff --git a/csharp/ql/src/change-notes/2024-01-22-url-redirect-sanitizer.md b/csharp/ql/src/change-notes/released/0.8.8.md similarity index 75% rename from csharp/ql/src/change-notes/2024-01-22-url-redirect-sanitizer.md rename to csharp/ql/src/change-notes/released/0.8.8.md index 92a65075a65..d6f017bcf41 100644 --- a/csharp/ql/src/change-notes/2024-01-22-url-redirect-sanitizer.md +++ b/csharp/ql/src/change-notes/released/0.8.8.md @@ -1,4 +1,5 @@ ---- -category: minorAnalysis ---- +## 0.8.8 + +### Minor Analysis Improvements + * Added string interpolation expressions and `string.Format` as possible sanitizers for the `cs/web/unvalidated-url-redirection` query. diff --git a/csharp/ql/src/codeql-pack.release.yml b/csharp/ql/src/codeql-pack.release.yml index 2ef6dc421f3..da0a61b4048 100644 --- a/csharp/ql/src/codeql-pack.release.yml +++ b/csharp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.7 +lastReleaseVersion: 0.8.8 diff --git a/csharp/ql/src/qlpack.yml b/csharp/ql/src/qlpack.yml index c3973948993..a16c72edd72 100644 --- a/csharp/ql/src/qlpack.yml +++ b/csharp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-queries -version: 0.8.8-dev +version: 0.8.8 groups: - csharp - queries diff --git a/go/ql/consistency-queries/CHANGELOG.md b/go/ql/consistency-queries/CHANGELOG.md index ad2e63eb470..8f58f5145db 100644 --- a/go/ql/consistency-queries/CHANGELOG.md +++ b/go/ql/consistency-queries/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.7 + +No user-facing changes. + ## 0.0.6 No user-facing changes. diff --git a/go/ql/consistency-queries/change-notes/released/0.0.7.md b/go/ql/consistency-queries/change-notes/released/0.0.7.md new file mode 100644 index 00000000000..84da6f18c42 --- /dev/null +++ b/go/ql/consistency-queries/change-notes/released/0.0.7.md @@ -0,0 +1,3 @@ +## 0.0.7 + +No user-facing changes. diff --git a/go/ql/consistency-queries/codeql-pack.release.yml b/go/ql/consistency-queries/codeql-pack.release.yml index cf398ce02aa..a2a5484910b 100644 --- a/go/ql/consistency-queries/codeql-pack.release.yml +++ b/go/ql/consistency-queries/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.6 +lastReleaseVersion: 0.0.7 diff --git a/go/ql/consistency-queries/qlpack.yml b/go/ql/consistency-queries/qlpack.yml index 88886034408..c7522dd8e35 100644 --- a/go/ql/consistency-queries/qlpack.yml +++ b/go/ql/consistency-queries/qlpack.yml @@ -1,5 +1,5 @@ name: codeql-go-consistency-queries -version: 0.0.7-dev +version: 0.0.7 groups: - go - queries diff --git a/go/ql/lib/CHANGELOG.md b/go/ql/lib/CHANGELOG.md index b9ff6e4e0e2..475352f1df2 100644 --- a/go/ql/lib/CHANGELOG.md +++ b/go/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.7.8 + +No user-facing changes. + ## 0.7.7 ### Deprecated APIs diff --git a/go/ql/lib/change-notes/released/0.7.8.md b/go/ql/lib/change-notes/released/0.7.8.md new file mode 100644 index 00000000000..5627ed51a17 --- /dev/null +++ b/go/ql/lib/change-notes/released/0.7.8.md @@ -0,0 +1,3 @@ +## 0.7.8 + +No user-facing changes. diff --git a/go/ql/lib/codeql-pack.release.yml b/go/ql/lib/codeql-pack.release.yml index 89cc2330c10..b6b12196b26 100644 --- a/go/ql/lib/codeql-pack.release.yml +++ b/go/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.7.7 +lastReleaseVersion: 0.7.8 diff --git a/go/ql/lib/qlpack.yml b/go/ql/lib/qlpack.yml index 67c991934e0..5f317377d45 100644 --- a/go/ql/lib/qlpack.yml +++ b/go/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-all -version: 0.7.8-dev +version: 0.7.8 groups: go dbscheme: go.dbscheme extractor: go diff --git a/go/ql/src/CHANGELOG.md b/go/ql/src/CHANGELOG.md index dafcd7aa695..66533a629f2 100644 --- a/go/ql/src/CHANGELOG.md +++ b/go/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.7.8 + +No user-facing changes. + ## 0.7.7 ### Minor Analysis Improvements diff --git a/go/ql/src/change-notes/released/0.7.8.md b/go/ql/src/change-notes/released/0.7.8.md new file mode 100644 index 00000000000..5627ed51a17 --- /dev/null +++ b/go/ql/src/change-notes/released/0.7.8.md @@ -0,0 +1,3 @@ +## 0.7.8 + +No user-facing changes. diff --git a/go/ql/src/codeql-pack.release.yml b/go/ql/src/codeql-pack.release.yml index 89cc2330c10..b6b12196b26 100644 --- a/go/ql/src/codeql-pack.release.yml +++ b/go/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.7.7 +lastReleaseVersion: 0.7.8 diff --git a/go/ql/src/qlpack.yml b/go/ql/src/qlpack.yml index a760c342970..81654540219 100644 --- a/go/ql/src/qlpack.yml +++ b/go/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-queries -version: 0.7.8-dev +version: 0.7.8 groups: - go - queries diff --git a/java/ql/automodel/src/CHANGELOG.md b/java/ql/automodel/src/CHANGELOG.md index eb9aae31d41..fa718635e0c 100644 --- a/java/ql/automodel/src/CHANGELOG.md +++ b/java/ql/automodel/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.14 + +No user-facing changes. + ## 0.0.13 No user-facing changes. diff --git a/java/ql/automodel/src/change-notes/released/0.0.14.md b/java/ql/automodel/src/change-notes/released/0.0.14.md new file mode 100644 index 00000000000..63b4d50ca45 --- /dev/null +++ b/java/ql/automodel/src/change-notes/released/0.0.14.md @@ -0,0 +1,3 @@ +## 0.0.14 + +No user-facing changes. diff --git a/java/ql/automodel/src/codeql-pack.release.yml b/java/ql/automodel/src/codeql-pack.release.yml index 044e54e4f7e..ca29e45d0a6 100644 --- a/java/ql/automodel/src/codeql-pack.release.yml +++ b/java/ql/automodel/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.13 +lastReleaseVersion: 0.0.14 diff --git a/java/ql/automodel/src/qlpack.yml b/java/ql/automodel/src/qlpack.yml index 0845b6f1761..3334223e9e4 100644 --- a/java/ql/automodel/src/qlpack.yml +++ b/java/ql/automodel/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-automodel-queries -version: 0.0.14-dev +version: 0.0.14 groups: - java - automodel diff --git a/java/ql/lib/CHANGELOG.md b/java/ql/lib/CHANGELOG.md index 3621a766e8a..4b34106dc09 100644 --- a/java/ql/lib/CHANGELOG.md +++ b/java/ql/lib/CHANGELOG.md @@ -1,3 +1,13 @@ +## 0.8.8 + +### Minor Analysis Improvements + +* Added models for the following packages: + + * com.fasterxml.jackson.databind + * javax.servlet +* Added the `java.util.Date` and `java.util.UUID` classes to the list of types in the `SimpleTypeSanitizer` class in `semmle.code.java.security.Sanitizers`. + ## 0.8.7 ### New Features diff --git a/java/ql/lib/change-notes/2024-01-24-new-models.md b/java/ql/lib/change-notes/2024-01-24-new-models.md deleted file mode 100644 index 8646ac1f0cb..00000000000 --- a/java/ql/lib/change-notes/2024-01-24-new-models.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -category: minorAnalysis ---- -* Added models for the following packages: - - * com.fasterxml.jackson.databind - * javax.servlet diff --git a/java/ql/lib/change-notes/2024-01-23-add-uuid-and-date-to-simpletypesanitizer.md b/java/ql/lib/change-notes/released/0.8.8.md similarity index 52% rename from java/ql/lib/change-notes/2024-01-23-add-uuid-and-date-to-simpletypesanitizer.md rename to java/ql/lib/change-notes/released/0.8.8.md index 96d6b9e0334..62186579014 100644 --- a/java/ql/lib/change-notes/2024-01-23-add-uuid-and-date-to-simpletypesanitizer.md +++ b/java/ql/lib/change-notes/released/0.8.8.md @@ -1,4 +1,9 @@ ---- -category: minorAnalysis ---- +## 0.8.8 + +### Minor Analysis Improvements + +* Added models for the following packages: + + * com.fasterxml.jackson.databind + * javax.servlet * Added the `java.util.Date` and `java.util.UUID` classes to the list of types in the `SimpleTypeSanitizer` class in `semmle.code.java.security.Sanitizers`. diff --git a/java/ql/lib/codeql-pack.release.yml b/java/ql/lib/codeql-pack.release.yml index 2ef6dc421f3..da0a61b4048 100644 --- a/java/ql/lib/codeql-pack.release.yml +++ b/java/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.7 +lastReleaseVersion: 0.8.8 diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index 62f4a0d7e96..6e4e1269d9c 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-all -version: 0.8.8-dev +version: 0.8.8 groups: java dbscheme: config/semmlecode.dbscheme extractor: java diff --git a/java/ql/src/CHANGELOG.md b/java/ql/src/CHANGELOG.md index 84096230dd1..466b98fea11 100644 --- a/java/ql/src/CHANGELOG.md +++ b/java/ql/src/CHANGELOG.md @@ -1,3 +1,10 @@ +## 0.8.8 + +### New Queries + +* Added a new query `java/android/sensitive-text` to detect instances of sensitive data being exposed through text fields without being properly masked. +* Added a new query `java/android/sensitive-notification` to detect instances of sensitive data being exposed through Android notifications. + ## 0.8.7 ### New Queries @@ -10,10 +17,6 @@ ## 0.8.6 -### Deprecated Queries - -* The three queries `java/insufficient-key-size`, `java/server-side-template-injection`, and `java/android/implicit-pendingintents` had accidentally general extension points allowing arbitrary string-based flow state. This has been fixed and the old extension points have been deprecated where possible, and otherwise updated. - ### New Queries * Added the `java/insecure-randomness` query to detect uses of weakly random values which an attacker may be able to predict. Also added the `crypto-parameter` sink kind for sinks which represent the parameters and keys of cryptographic operations. @@ -24,6 +27,10 @@ * The query `java/android/missing-certificate-pinning` should no longer alert about requests pointing to the local filesystem. * Removed some spurious sinks related to `com.opensymphony.xwork2.TextProvider.getText` from the query `java/ognl-injection`. +### Bug Fixes + +* The three queries `java/insufficient-key-size`, `java/server-side-template-injection`, and `java/android/implicit-pendingintents` had accidentally general extension points allowing arbitrary string-based flow state. This has been fixed and the old extension points have been deprecated where possible, and otherwise updated. + ## 0.8.5 No user-facing changes. diff --git a/java/ql/src/change-notes/2024-01-15-android-sensitive-notification-query.md b/java/ql/src/change-notes/2024-01-15-android-sensitive-notification-query.md deleted file mode 100644 index 427ebbe94ff..00000000000 --- a/java/ql/src/change-notes/2024-01-15-android-sensitive-notification-query.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: newQuery ---- -* Added a new query `java/android/sensitive-notification` to detect instances of sensitive data being exposed through Android notifications. \ No newline at end of file diff --git a/java/ql/src/change-notes/2024-01-29-android-sensitive-text-field-query.md b/java/ql/src/change-notes/2024-01-29-android-sensitive-text-field-query.md deleted file mode 100644 index 5e5156944a7..00000000000 --- a/java/ql/src/change-notes/2024-01-29-android-sensitive-text-field-query.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: newQuery ---- -* Added a new query `java/android/sensitive-text` to detect instances of sensitive data being exposed through text fields without being properly masked. \ No newline at end of file diff --git a/java/ql/src/change-notes/released/0.8.8.md b/java/ql/src/change-notes/released/0.8.8.md new file mode 100644 index 00000000000..94f005fdca8 --- /dev/null +++ b/java/ql/src/change-notes/released/0.8.8.md @@ -0,0 +1,6 @@ +## 0.8.8 + +### New Queries + +* Added a new query `java/android/sensitive-text` to detect instances of sensitive data being exposed through text fields without being properly masked. +* Added a new query `java/android/sensitive-notification` to detect instances of sensitive data being exposed through Android notifications. diff --git a/java/ql/src/codeql-pack.release.yml b/java/ql/src/codeql-pack.release.yml index 2ef6dc421f3..da0a61b4048 100644 --- a/java/ql/src/codeql-pack.release.yml +++ b/java/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.7 +lastReleaseVersion: 0.8.8 diff --git a/java/ql/src/qlpack.yml b/java/ql/src/qlpack.yml index 4d0d39baca3..73e8a062ffe 100644 --- a/java/ql/src/qlpack.yml +++ b/java/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-queries -version: 0.8.8-dev +version: 0.8.8 groups: - java - queries diff --git a/javascript/ql/lib/CHANGELOG.md b/javascript/ql/lib/CHANGELOG.md index 29005b5ce87..06e40ac7bd5 100644 --- a/javascript/ql/lib/CHANGELOG.md +++ b/javascript/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.8.8 + +No user-facing changes. + ## 0.8.7 ### Minor Analysis Improvements diff --git a/javascript/ql/lib/change-notes/released/0.8.8.md b/javascript/ql/lib/change-notes/released/0.8.8.md new file mode 100644 index 00000000000..14d202dac00 --- /dev/null +++ b/javascript/ql/lib/change-notes/released/0.8.8.md @@ -0,0 +1,3 @@ +## 0.8.8 + +No user-facing changes. diff --git a/javascript/ql/lib/codeql-pack.release.yml b/javascript/ql/lib/codeql-pack.release.yml index 2ef6dc421f3..da0a61b4048 100644 --- a/javascript/ql/lib/codeql-pack.release.yml +++ b/javascript/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.7 +lastReleaseVersion: 0.8.8 diff --git a/javascript/ql/lib/qlpack.yml b/javascript/ql/lib/qlpack.yml index bd0c1a815f3..fa544548ea7 100644 --- a/javascript/ql/lib/qlpack.yml +++ b/javascript/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-all -version: 0.8.8-dev +version: 0.8.8 groups: javascript dbscheme: semmlecode.javascript.dbscheme extractor: javascript diff --git a/javascript/ql/src/CHANGELOG.md b/javascript/ql/src/CHANGELOG.md index ba868a7d629..300da5225f9 100644 --- a/javascript/ql/src/CHANGELOG.md +++ b/javascript/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.8.8 + +No user-facing changes. + ## 0.8.7 ### Minor Analysis Improvements diff --git a/javascript/ql/src/change-notes/released/0.8.8.md b/javascript/ql/src/change-notes/released/0.8.8.md new file mode 100644 index 00000000000..14d202dac00 --- /dev/null +++ b/javascript/ql/src/change-notes/released/0.8.8.md @@ -0,0 +1,3 @@ +## 0.8.8 + +No user-facing changes. diff --git a/javascript/ql/src/codeql-pack.release.yml b/javascript/ql/src/codeql-pack.release.yml index 2ef6dc421f3..da0a61b4048 100644 --- a/javascript/ql/src/codeql-pack.release.yml +++ b/javascript/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.7 +lastReleaseVersion: 0.8.8 diff --git a/javascript/ql/src/qlpack.yml b/javascript/ql/src/qlpack.yml index 51a22b542e0..1ebbfc58787 100644 --- a/javascript/ql/src/qlpack.yml +++ b/javascript/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-queries -version: 0.8.8-dev +version: 0.8.8 groups: - javascript - queries diff --git a/misc/suite-helpers/CHANGELOG.md b/misc/suite-helpers/CHANGELOG.md index 1c10493c9e7..61d4b001d25 100644 --- a/misc/suite-helpers/CHANGELOG.md +++ b/misc/suite-helpers/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.7.8 + +No user-facing changes. + ## 0.7.7 No user-facing changes. diff --git a/misc/suite-helpers/change-notes/released/0.7.8.md b/misc/suite-helpers/change-notes/released/0.7.8.md new file mode 100644 index 00000000000..5627ed51a17 --- /dev/null +++ b/misc/suite-helpers/change-notes/released/0.7.8.md @@ -0,0 +1,3 @@ +## 0.7.8 + +No user-facing changes. diff --git a/misc/suite-helpers/codeql-pack.release.yml b/misc/suite-helpers/codeql-pack.release.yml index 89cc2330c10..b6b12196b26 100644 --- a/misc/suite-helpers/codeql-pack.release.yml +++ b/misc/suite-helpers/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.7.7 +lastReleaseVersion: 0.7.8 diff --git a/misc/suite-helpers/qlpack.yml b/misc/suite-helpers/qlpack.yml index 82d40178d7e..4db5dfcf454 100644 --- a/misc/suite-helpers/qlpack.yml +++ b/misc/suite-helpers/qlpack.yml @@ -1,4 +1,4 @@ name: codeql/suite-helpers -version: 0.7.8-dev +version: 0.7.8 groups: shared warnOnImplicitThis: true diff --git a/python/ql/lib/CHANGELOG.md b/python/ql/lib/CHANGELOG.md index ca684c59320..01692622749 100644 --- a/python/ql/lib/CHANGELOG.md +++ b/python/ql/lib/CHANGELOG.md @@ -1,3 +1,13 @@ +## 0.11.8 + +### Minor Analysis Improvements + +* Added `html.escape` as a sanitizer for HTML. + +### Bug Fixes + +* Fixed the `a` (ASCII) inline flag not being recognized by the regular expression library. + ## 0.11.7 ### Minor Analysis Improvements diff --git a/python/ql/lib/change-notes/2024-01-21-regex-ascii-flag.md b/python/ql/lib/change-notes/2024-01-21-regex-ascii-flag.md deleted file mode 100644 index 5d8741b1bd3..00000000000 --- a/python/ql/lib/change-notes/2024-01-21-regex-ascii-flag.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: fix ---- -* Fixed the `a` (ASCII) inline flag not being recognized by the regular expression library. diff --git a/python/ql/lib/change-notes/2024-01-22-html-escape.md b/python/ql/lib/change-notes/2024-01-22-html-escape.md deleted file mode 100644 index 0ae31aee545..00000000000 --- a/python/ql/lib/change-notes/2024-01-22-html-escape.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added `html.escape` as a sanitizer for HTML. diff --git a/python/ql/lib/change-notes/released/0.11.8.md b/python/ql/lib/change-notes/released/0.11.8.md new file mode 100644 index 00000000000..d61a4451868 --- /dev/null +++ b/python/ql/lib/change-notes/released/0.11.8.md @@ -0,0 +1,9 @@ +## 0.11.8 + +### Minor Analysis Improvements + +* Added `html.escape` as a sanitizer for HTML. + +### Bug Fixes + +* Fixed the `a` (ASCII) inline flag not being recognized by the regular expression library. diff --git a/python/ql/lib/codeql-pack.release.yml b/python/ql/lib/codeql-pack.release.yml index 59fa16251b6..345c308d402 100644 --- a/python/ql/lib/codeql-pack.release.yml +++ b/python/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.11.7 +lastReleaseVersion: 0.11.8 diff --git a/python/ql/lib/qlpack.yml b/python/ql/lib/qlpack.yml index 23bff260f7a..a2c343cca3f 100644 --- a/python/ql/lib/qlpack.yml +++ b/python/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-all -version: 0.11.8-dev +version: 0.11.8 groups: python dbscheme: semmlecode.python.dbscheme extractor: python diff --git a/python/ql/src/CHANGELOG.md b/python/ql/src/CHANGELOG.md index b42dcfd8b31..17931ead8b1 100644 --- a/python/ql/src/CHANGELOG.md +++ b/python/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.9.8 + +No user-facing changes. + ## 0.9.7 ### Minor Analysis Improvements diff --git a/python/ql/src/change-notes/released/0.9.8.md b/python/ql/src/change-notes/released/0.9.8.md new file mode 100644 index 00000000000..d1ca1c4d647 --- /dev/null +++ b/python/ql/src/change-notes/released/0.9.8.md @@ -0,0 +1,3 @@ +## 0.9.8 + +No user-facing changes. diff --git a/python/ql/src/codeql-pack.release.yml b/python/ql/src/codeql-pack.release.yml index 0921a438254..9ca6c6f2678 100644 --- a/python/ql/src/codeql-pack.release.yml +++ b/python/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.9.7 +lastReleaseVersion: 0.9.8 diff --git a/python/ql/src/qlpack.yml b/python/ql/src/qlpack.yml index 5de71eb6e3a..538e5ad799c 100644 --- a/python/ql/src/qlpack.yml +++ b/python/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-queries -version: 0.9.8-dev +version: 0.9.8 groups: - python - queries diff --git a/ruby/ql/lib/CHANGELOG.md b/ruby/ql/lib/CHANGELOG.md index e9e4507d8df..8a9e4e6c8b7 100644 --- a/ruby/ql/lib/CHANGELOG.md +++ b/ruby/ql/lib/CHANGELOG.md @@ -1,3 +1,9 @@ +## 0.8.8 + +### Minor Analysis Improvements + +* Flow is now tracked through Rails `render` calls, when the argument is a `ViewComponent`. In this case, data flow is tracked into the accompanying `.html.erb` file. + ## 0.8.7 ### Minor Analysis Improvements diff --git a/ruby/ql/lib/change-notes/2024-01-22-erb-render-flow.md b/ruby/ql/lib/change-notes/released/0.8.8.md similarity index 79% rename from ruby/ql/lib/change-notes/2024-01-22-erb-render-flow.md rename to ruby/ql/lib/change-notes/released/0.8.8.md index f9e68ef580e..dc4b3dd43e3 100644 --- a/ruby/ql/lib/change-notes/2024-01-22-erb-render-flow.md +++ b/ruby/ql/lib/change-notes/released/0.8.8.md @@ -1,4 +1,5 @@ ---- -category: minorAnalysis ---- +## 0.8.8 + +### Minor Analysis Improvements + * Flow is now tracked through Rails `render` calls, when the argument is a `ViewComponent`. In this case, data flow is tracked into the accompanying `.html.erb` file. diff --git a/ruby/ql/lib/codeql-pack.release.yml b/ruby/ql/lib/codeql-pack.release.yml index 2ef6dc421f3..da0a61b4048 100644 --- a/ruby/ql/lib/codeql-pack.release.yml +++ b/ruby/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.7 +lastReleaseVersion: 0.8.8 diff --git a/ruby/ql/lib/qlpack.yml b/ruby/ql/lib/qlpack.yml index 8179ac53996..7eb6222e101 100644 --- a/ruby/ql/lib/qlpack.yml +++ b/ruby/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-all -version: 0.8.8-dev +version: 0.8.8 groups: ruby extractor: ruby dbscheme: ruby.dbscheme diff --git a/ruby/ql/src/CHANGELOG.md b/ruby/ql/src/CHANGELOG.md index 05a89118b05..9eff67dab9e 100644 --- a/ruby/ql/src/CHANGELOG.md +++ b/ruby/ql/src/CHANGELOG.md @@ -1,3 +1,14 @@ +## 0.8.8 + +### New Queries + +* Added a new experimental query, `rb/insecure-randomness`, to detect when application uses random values that are not cryptographically secure. + +### Minor Analysis Improvements + +* Added new unsafe deserialization sinks for the ox gem. +* Added an additional unsafe deserialization sink for the oj gem. + ## 0.8.7 No user-facing changes. diff --git a/ruby/ql/src/change-notes/2023-12-18-insecure-randomness-query.md b/ruby/ql/src/change-notes/2023-12-18-insecure-randomness-query.md deleted file mode 100644 index a4b3cd5a1f5..00000000000 --- a/ruby/ql/src/change-notes/2023-12-18-insecure-randomness-query.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: newQuery ---- -* Added a new experimental query, `rb/insecure-randomness`, to detect when application uses random values that are not cryptographically secure. \ No newline at end of file diff --git a/ruby/ql/src/change-notes/2024-01-30-unsafe-deserialization-sinks.md b/ruby/ql/src/change-notes/2024-01-30-unsafe-deserialization-sinks.md deleted file mode 100644 index 3ba080e91ab..00000000000 --- a/ruby/ql/src/change-notes/2024-01-30-unsafe-deserialization-sinks.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -category: minorAnalysis ---- -* Added new unsafe deserialization sinks for the ox gem. -* Added an additional unsafe deserialization sink for the oj gem. diff --git a/ruby/ql/src/change-notes/released/0.8.8.md b/ruby/ql/src/change-notes/released/0.8.8.md new file mode 100644 index 00000000000..b8aaed87425 --- /dev/null +++ b/ruby/ql/src/change-notes/released/0.8.8.md @@ -0,0 +1,10 @@ +## 0.8.8 + +### New Queries + +* Added a new experimental query, `rb/insecure-randomness`, to detect when application uses random values that are not cryptographically secure. + +### Minor Analysis Improvements + +* Added new unsafe deserialization sinks for the ox gem. +* Added an additional unsafe deserialization sink for the oj gem. diff --git a/ruby/ql/src/codeql-pack.release.yml b/ruby/ql/src/codeql-pack.release.yml index 2ef6dc421f3..da0a61b4048 100644 --- a/ruby/ql/src/codeql-pack.release.yml +++ b/ruby/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.7 +lastReleaseVersion: 0.8.8 diff --git a/ruby/ql/src/qlpack.yml b/ruby/ql/src/qlpack.yml index 6891e0227d3..7c1995c00e5 100644 --- a/ruby/ql/src/qlpack.yml +++ b/ruby/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-queries -version: 0.8.8-dev +version: 0.8.8 groups: - ruby - queries diff --git a/shared/controlflow/CHANGELOG.md b/shared/controlflow/CHANGELOG.md index 6635db28abc..d72921d34c1 100644 --- a/shared/controlflow/CHANGELOG.md +++ b/shared/controlflow/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.1.8 + +No user-facing changes. + ## 0.1.7 No user-facing changes. diff --git a/shared/controlflow/change-notes/released/0.1.8.md b/shared/controlflow/change-notes/released/0.1.8.md new file mode 100644 index 00000000000..5b20b52baf1 --- /dev/null +++ b/shared/controlflow/change-notes/released/0.1.8.md @@ -0,0 +1,3 @@ +## 0.1.8 + +No user-facing changes. diff --git a/shared/controlflow/codeql-pack.release.yml b/shared/controlflow/codeql-pack.release.yml index 949d4c64c66..3136ea4a1cc 100644 --- a/shared/controlflow/codeql-pack.release.yml +++ b/shared/controlflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.1.7 +lastReleaseVersion: 0.1.8 diff --git a/shared/controlflow/qlpack.yml b/shared/controlflow/qlpack.yml index c6c4fb5f728..79d4a386cf1 100644 --- a/shared/controlflow/qlpack.yml +++ b/shared/controlflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/controlflow -version: 0.1.8-dev +version: 0.1.8 groups: shared library: true dependencies: diff --git a/shared/dataflow/CHANGELOG.md b/shared/dataflow/CHANGELOG.md index c537cb3bb8e..e9b6c3bc904 100644 --- a/shared/dataflow/CHANGELOG.md +++ b/shared/dataflow/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.1.8 + +No user-facing changes. + ## 0.1.7 No user-facing changes. diff --git a/shared/dataflow/change-notes/released/0.1.8.md b/shared/dataflow/change-notes/released/0.1.8.md new file mode 100644 index 00000000000..5b20b52baf1 --- /dev/null +++ b/shared/dataflow/change-notes/released/0.1.8.md @@ -0,0 +1,3 @@ +## 0.1.8 + +No user-facing changes. diff --git a/shared/dataflow/codeql-pack.release.yml b/shared/dataflow/codeql-pack.release.yml index 949d4c64c66..3136ea4a1cc 100644 --- a/shared/dataflow/codeql-pack.release.yml +++ b/shared/dataflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.1.7 +lastReleaseVersion: 0.1.8 diff --git a/shared/dataflow/qlpack.yml b/shared/dataflow/qlpack.yml index 91d1454351c..ffb4d0754be 100644 --- a/shared/dataflow/qlpack.yml +++ b/shared/dataflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/dataflow -version: 0.1.8-dev +version: 0.1.8 groups: shared library: true dependencies: diff --git a/shared/mad/CHANGELOG.md b/shared/mad/CHANGELOG.md index 438ce8241a6..35042f79b69 100644 --- a/shared/mad/CHANGELOG.md +++ b/shared/mad/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.8 + +No user-facing changes. + ## 0.2.7 No user-facing changes. diff --git a/shared/mad/change-notes/released/0.2.8.md b/shared/mad/change-notes/released/0.2.8.md new file mode 100644 index 00000000000..2f8aa0dd21e --- /dev/null +++ b/shared/mad/change-notes/released/0.2.8.md @@ -0,0 +1,3 @@ +## 0.2.8 + +No user-facing changes. diff --git a/shared/mad/codeql-pack.release.yml b/shared/mad/codeql-pack.release.yml index 6d3c0021858..66ad7f587f8 100644 --- a/shared/mad/codeql-pack.release.yml +++ b/shared/mad/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.7 +lastReleaseVersion: 0.2.8 diff --git a/shared/mad/qlpack.yml b/shared/mad/qlpack.yml index 31a8e8b7534..c4eade3b256 100644 --- a/shared/mad/qlpack.yml +++ b/shared/mad/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/mad -version: 0.2.8-dev +version: 0.2.8 groups: shared library: true dependencies: null diff --git a/shared/rangeanalysis/CHANGELOG.md b/shared/rangeanalysis/CHANGELOG.md index 6f334d57356..9ad1339683f 100644 --- a/shared/rangeanalysis/CHANGELOG.md +++ b/shared/rangeanalysis/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.7 + +No user-facing changes. + ## 0.0.6 No user-facing changes. diff --git a/shared/rangeanalysis/change-notes/released/0.0.7.md b/shared/rangeanalysis/change-notes/released/0.0.7.md new file mode 100644 index 00000000000..84da6f18c42 --- /dev/null +++ b/shared/rangeanalysis/change-notes/released/0.0.7.md @@ -0,0 +1,3 @@ +## 0.0.7 + +No user-facing changes. diff --git a/shared/rangeanalysis/codeql-pack.release.yml b/shared/rangeanalysis/codeql-pack.release.yml index cf398ce02aa..a2a5484910b 100644 --- a/shared/rangeanalysis/codeql-pack.release.yml +++ b/shared/rangeanalysis/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.6 +lastReleaseVersion: 0.0.7 diff --git a/shared/rangeanalysis/qlpack.yml b/shared/rangeanalysis/qlpack.yml index 6317ae4cac4..faa059f069a 100644 --- a/shared/rangeanalysis/qlpack.yml +++ b/shared/rangeanalysis/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rangeanalysis -version: 0.0.7-dev +version: 0.0.7 groups: shared library: true dependencies: diff --git a/shared/regex/CHANGELOG.md b/shared/regex/CHANGELOG.md index 267288c38df..bf0aa553157 100644 --- a/shared/regex/CHANGELOG.md +++ b/shared/regex/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.8 + +No user-facing changes. + ## 0.2.7 No user-facing changes. diff --git a/shared/regex/change-notes/released/0.2.8.md b/shared/regex/change-notes/released/0.2.8.md new file mode 100644 index 00000000000..2f8aa0dd21e --- /dev/null +++ b/shared/regex/change-notes/released/0.2.8.md @@ -0,0 +1,3 @@ +## 0.2.8 + +No user-facing changes. diff --git a/shared/regex/codeql-pack.release.yml b/shared/regex/codeql-pack.release.yml index 6d3c0021858..66ad7f587f8 100644 --- a/shared/regex/codeql-pack.release.yml +++ b/shared/regex/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.7 +lastReleaseVersion: 0.2.8 diff --git a/shared/regex/qlpack.yml b/shared/regex/qlpack.yml index c75c3ca7b2d..57aa69e9629 100644 --- a/shared/regex/qlpack.yml +++ b/shared/regex/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/regex -version: 0.2.8-dev +version: 0.2.8 groups: shared library: true dependencies: diff --git a/shared/ssa/CHANGELOG.md b/shared/ssa/CHANGELOG.md index 8a920eb7bed..7c9b57d2b8e 100644 --- a/shared/ssa/CHANGELOG.md +++ b/shared/ssa/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.8 + +No user-facing changes. + ## 0.2.7 ### Minor Analysis Improvements diff --git a/shared/ssa/change-notes/released/0.2.8.md b/shared/ssa/change-notes/released/0.2.8.md new file mode 100644 index 00000000000..2f8aa0dd21e --- /dev/null +++ b/shared/ssa/change-notes/released/0.2.8.md @@ -0,0 +1,3 @@ +## 0.2.8 + +No user-facing changes. diff --git a/shared/ssa/codeql-pack.release.yml b/shared/ssa/codeql-pack.release.yml index 6d3c0021858..66ad7f587f8 100644 --- a/shared/ssa/codeql-pack.release.yml +++ b/shared/ssa/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.7 +lastReleaseVersion: 0.2.8 diff --git a/shared/ssa/qlpack.yml b/shared/ssa/qlpack.yml index 92717e37ccb..f47e195b548 100644 --- a/shared/ssa/qlpack.yml +++ b/shared/ssa/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ssa -version: 0.2.8-dev +version: 0.2.8 groups: shared library: true dependencies: diff --git a/shared/threat-models/CHANGELOG.md b/shared/threat-models/CHANGELOG.md index ad2e63eb470..8f58f5145db 100644 --- a/shared/threat-models/CHANGELOG.md +++ b/shared/threat-models/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.7 + +No user-facing changes. + ## 0.0.6 No user-facing changes. diff --git a/shared/threat-models/change-notes/released/0.0.7.md b/shared/threat-models/change-notes/released/0.0.7.md new file mode 100644 index 00000000000..84da6f18c42 --- /dev/null +++ b/shared/threat-models/change-notes/released/0.0.7.md @@ -0,0 +1,3 @@ +## 0.0.7 + +No user-facing changes. diff --git a/shared/threat-models/codeql-pack.release.yml b/shared/threat-models/codeql-pack.release.yml index cf398ce02aa..a2a5484910b 100644 --- a/shared/threat-models/codeql-pack.release.yml +++ b/shared/threat-models/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.6 +lastReleaseVersion: 0.0.7 diff --git a/shared/threat-models/qlpack.yml b/shared/threat-models/qlpack.yml index 4fd423016e2..b056dd0d720 100644 --- a/shared/threat-models/qlpack.yml +++ b/shared/threat-models/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/threat-models -version: 0.0.7-dev +version: 0.0.7 library: true groups: shared dataExtensions: diff --git a/shared/tutorial/CHANGELOG.md b/shared/tutorial/CHANGELOG.md index d89b3171dc6..bc33883a950 100644 --- a/shared/tutorial/CHANGELOG.md +++ b/shared/tutorial/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.8 + +No user-facing changes. + ## 0.2.7 No user-facing changes. diff --git a/shared/tutorial/change-notes/released/0.2.8.md b/shared/tutorial/change-notes/released/0.2.8.md new file mode 100644 index 00000000000..2f8aa0dd21e --- /dev/null +++ b/shared/tutorial/change-notes/released/0.2.8.md @@ -0,0 +1,3 @@ +## 0.2.8 + +No user-facing changes. diff --git a/shared/tutorial/codeql-pack.release.yml b/shared/tutorial/codeql-pack.release.yml index 6d3c0021858..66ad7f587f8 100644 --- a/shared/tutorial/codeql-pack.release.yml +++ b/shared/tutorial/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.7 +lastReleaseVersion: 0.2.8 diff --git a/shared/tutorial/qlpack.yml b/shared/tutorial/qlpack.yml index 573d2d5e5bd..23525cbfc60 100644 --- a/shared/tutorial/qlpack.yml +++ b/shared/tutorial/qlpack.yml @@ -1,7 +1,7 @@ name: codeql/tutorial description: Library for the CodeQL detective tutorials, helping new users learn to write CodeQL queries. -version: 0.2.8-dev +version: 0.2.8 groups: shared library: true warnOnImplicitThis: true diff --git a/shared/typetracking/CHANGELOG.md b/shared/typetracking/CHANGELOG.md index b47b17710e8..4c21bc408be 100644 --- a/shared/typetracking/CHANGELOG.md +++ b/shared/typetracking/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.8 + +No user-facing changes. + ## 0.2.7 No user-facing changes. diff --git a/shared/typetracking/change-notes/released/0.2.8.md b/shared/typetracking/change-notes/released/0.2.8.md new file mode 100644 index 00000000000..2f8aa0dd21e --- /dev/null +++ b/shared/typetracking/change-notes/released/0.2.8.md @@ -0,0 +1,3 @@ +## 0.2.8 + +No user-facing changes. diff --git a/shared/typetracking/codeql-pack.release.yml b/shared/typetracking/codeql-pack.release.yml index 6d3c0021858..66ad7f587f8 100644 --- a/shared/typetracking/codeql-pack.release.yml +++ b/shared/typetracking/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.7 +lastReleaseVersion: 0.2.8 diff --git a/shared/typetracking/qlpack.yml b/shared/typetracking/qlpack.yml index a35e17dee12..09757c9de82 100644 --- a/shared/typetracking/qlpack.yml +++ b/shared/typetracking/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typetracking -version: 0.2.8-dev +version: 0.2.8 groups: shared library: true dependencies: diff --git a/shared/typos/CHANGELOG.md b/shared/typos/CHANGELOG.md index 101d57dbad8..2b0bb7d2f75 100644 --- a/shared/typos/CHANGELOG.md +++ b/shared/typos/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.8 + +No user-facing changes. + ## 0.2.7 No user-facing changes. diff --git a/shared/typos/change-notes/released/0.2.8.md b/shared/typos/change-notes/released/0.2.8.md new file mode 100644 index 00000000000..2f8aa0dd21e --- /dev/null +++ b/shared/typos/change-notes/released/0.2.8.md @@ -0,0 +1,3 @@ +## 0.2.8 + +No user-facing changes. diff --git a/shared/typos/codeql-pack.release.yml b/shared/typos/codeql-pack.release.yml index 6d3c0021858..66ad7f587f8 100644 --- a/shared/typos/codeql-pack.release.yml +++ b/shared/typos/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.7 +lastReleaseVersion: 0.2.8 diff --git a/shared/typos/qlpack.yml b/shared/typos/qlpack.yml index bc2565304e4..4466e61ee0b 100644 --- a/shared/typos/qlpack.yml +++ b/shared/typos/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typos -version: 0.2.8-dev +version: 0.2.8 groups: shared library: true warnOnImplicitThis: true diff --git a/shared/util/CHANGELOG.md b/shared/util/CHANGELOG.md index edfa06a5da2..273afd4129b 100644 --- a/shared/util/CHANGELOG.md +++ b/shared/util/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.8 + +No user-facing changes. + ## 0.2.7 No user-facing changes. diff --git a/shared/util/change-notes/released/0.2.8.md b/shared/util/change-notes/released/0.2.8.md new file mode 100644 index 00000000000..2f8aa0dd21e --- /dev/null +++ b/shared/util/change-notes/released/0.2.8.md @@ -0,0 +1,3 @@ +## 0.2.8 + +No user-facing changes. diff --git a/shared/util/codeql-pack.release.yml b/shared/util/codeql-pack.release.yml index 6d3c0021858..66ad7f587f8 100644 --- a/shared/util/codeql-pack.release.yml +++ b/shared/util/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.7 +lastReleaseVersion: 0.2.8 diff --git a/shared/util/qlpack.yml b/shared/util/qlpack.yml index cddb6cc42f1..ae11a5bf58b 100644 --- a/shared/util/qlpack.yml +++ b/shared/util/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/util -version: 0.2.8-dev +version: 0.2.8 groups: shared library: true dependencies: null diff --git a/shared/yaml/CHANGELOG.md b/shared/yaml/CHANGELOG.md index c5b3ec6b30e..e2991032640 100644 --- a/shared/yaml/CHANGELOG.md +++ b/shared/yaml/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.8 + +No user-facing changes. + ## 0.2.7 No user-facing changes. diff --git a/shared/yaml/change-notes/released/0.2.8.md b/shared/yaml/change-notes/released/0.2.8.md new file mode 100644 index 00000000000..2f8aa0dd21e --- /dev/null +++ b/shared/yaml/change-notes/released/0.2.8.md @@ -0,0 +1,3 @@ +## 0.2.8 + +No user-facing changes. diff --git a/shared/yaml/codeql-pack.release.yml b/shared/yaml/codeql-pack.release.yml index 6d3c0021858..66ad7f587f8 100644 --- a/shared/yaml/codeql-pack.release.yml +++ b/shared/yaml/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.7 +lastReleaseVersion: 0.2.8 diff --git a/shared/yaml/qlpack.yml b/shared/yaml/qlpack.yml index 2680ca9cbb9..4d656f79862 100644 --- a/shared/yaml/qlpack.yml +++ b/shared/yaml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/yaml -version: 0.2.8-dev +version: 0.2.8 groups: shared library: true warnOnImplicitThis: true diff --git a/swift/ql/lib/CHANGELOG.md b/swift/ql/lib/CHANGELOG.md index f06c4195a35..b69d9b9e9a3 100644 --- a/swift/ql/lib/CHANGELOG.md +++ b/swift/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.3.8 + +No user-facing changes. + ## 0.3.7 ### Minor Analysis Improvements diff --git a/swift/ql/lib/change-notes/released/0.3.8.md b/swift/ql/lib/change-notes/released/0.3.8.md new file mode 100644 index 00000000000..7e9035d11c1 --- /dev/null +++ b/swift/ql/lib/change-notes/released/0.3.8.md @@ -0,0 +1,3 @@ +## 0.3.8 + +No user-facing changes. diff --git a/swift/ql/lib/codeql-pack.release.yml b/swift/ql/lib/codeql-pack.release.yml index 939934ffd00..4aa0b63b207 100644 --- a/swift/ql/lib/codeql-pack.release.yml +++ b/swift/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.3.7 +lastReleaseVersion: 0.3.8 diff --git a/swift/ql/lib/qlpack.yml b/swift/ql/lib/qlpack.yml index bb5078ca42b..8916abe3bec 100644 --- a/swift/ql/lib/qlpack.yml +++ b/swift/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-all -version: 0.3.8-dev +version: 0.3.8 groups: swift extractor: swift dbscheme: swift.dbscheme diff --git a/swift/ql/src/CHANGELOG.md b/swift/ql/src/CHANGELOG.md index ff380eb0b97..7fe6e54b241 100644 --- a/swift/ql/src/CHANGELOG.md +++ b/swift/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.3.8 + +No user-facing changes. + ## 0.3.7 ### New Queries diff --git a/swift/ql/src/change-notes/released/0.3.8.md b/swift/ql/src/change-notes/released/0.3.8.md new file mode 100644 index 00000000000..7e9035d11c1 --- /dev/null +++ b/swift/ql/src/change-notes/released/0.3.8.md @@ -0,0 +1,3 @@ +## 0.3.8 + +No user-facing changes. diff --git a/swift/ql/src/codeql-pack.release.yml b/swift/ql/src/codeql-pack.release.yml index 939934ffd00..4aa0b63b207 100644 --- a/swift/ql/src/codeql-pack.release.yml +++ b/swift/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.3.7 +lastReleaseVersion: 0.3.8 diff --git a/swift/ql/src/qlpack.yml b/swift/ql/src/qlpack.yml index e61def6dd27..4a8d3d68e74 100644 --- a/swift/ql/src/qlpack.yml +++ b/swift/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-queries -version: 0.3.8-dev +version: 0.3.8 groups: - swift - queries From 44fe34a37d32c1eb9403cb09c151bb9bcd3aec1b Mon Sep 17 00:00:00 2001 From: erik-krogh Date: Tue, 6 Feb 2024 09:20:27 +0100 Subject: [PATCH 061/378] use the correct string type in the tainted-path examples --- csharp/ql/src/Security Features/CWE-022/examples/TaintedPath.cs | 2 +- .../Security Features/CWE-022/examples/TaintedPathGoodFolder.cs | 2 +- .../CWE-022/examples/TaintedPathGoodNormalize.cs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/csharp/ql/src/Security Features/CWE-022/examples/TaintedPath.cs b/csharp/ql/src/Security Features/CWE-022/examples/TaintedPath.cs index c185267a038..4539aed8b88 100644 --- a/csharp/ql/src/Security Features/CWE-022/examples/TaintedPath.cs +++ b/csharp/ql/src/Security Features/CWE-022/examples/TaintedPath.cs @@ -6,7 +6,7 @@ public class TaintedPathHandler : IHttpHandler { public void ProcessRequest(HttpContext ctx) { - String filename = ctx.Request.QueryString["path"]; + string filename = ctx.Request.QueryString["path"]; // BAD: This could read any file on the filesystem. ctx.Response.Write(File.ReadAllText(filename)); } diff --git a/csharp/ql/src/Security Features/CWE-022/examples/TaintedPathGoodFolder.cs b/csharp/ql/src/Security Features/CWE-022/examples/TaintedPathGoodFolder.cs index 33443abb717..6a3991ac7ad 100644 --- a/csharp/ql/src/Security Features/CWE-022/examples/TaintedPathGoodFolder.cs +++ b/csharp/ql/src/Security Features/CWE-022/examples/TaintedPathGoodFolder.cs @@ -6,7 +6,7 @@ public class TaintedPathHandler : IHttpHandler { public void ProcessRequest(HttpContext ctx) { - String filename = ctx.Request.QueryString["path"]; + string filename = ctx.Request.QueryString["path"]; string publicFolder = Path.GetFullPath("/home/" + user + "/public"); string filePath = Path.GetFullPath(Path.Combine(publicFolder, filename)); diff --git a/csharp/ql/src/Security Features/CWE-022/examples/TaintedPathGoodNormalize.cs b/csharp/ql/src/Security Features/CWE-022/examples/TaintedPathGoodNormalize.cs index 939ceffff23..0e31e8b68c9 100644 --- a/csharp/ql/src/Security Features/CWE-022/examples/TaintedPathGoodNormalize.cs +++ b/csharp/ql/src/Security Features/CWE-022/examples/TaintedPathGoodNormalize.cs @@ -6,7 +6,7 @@ public class TaintedPathHandler : IHttpHandler { public void ProcessRequest(HttpContext ctx) { - String filename = ctx.Request.QueryString["path"]; + string filename = ctx.Request.QueryString["path"]; // GOOD: ensure that the filename has no path separators or parent directory references if (filename.Contains("..") || filename.Contains("/") || filename.Contains("\\")) { From 4e176236e77b1fa4fd19d742cde7567e3bb2037e Mon Sep 17 00:00:00 2001 From: erik-krogh Date: Tue, 6 Feb 2024 09:21:35 +0100 Subject: [PATCH 062/378] add a definition of user --- .../Security Features/CWE-022/examples/TaintedPathGoodFolder.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/csharp/ql/src/Security Features/CWE-022/examples/TaintedPathGoodFolder.cs b/csharp/ql/src/Security Features/CWE-022/examples/TaintedPathGoodFolder.cs index 6a3991ac7ad..19af394b1c7 100644 --- a/csharp/ql/src/Security Features/CWE-022/examples/TaintedPathGoodFolder.cs +++ b/csharp/ql/src/Security Features/CWE-022/examples/TaintedPathGoodFolder.cs @@ -8,6 +8,7 @@ public class TaintedPathHandler : IHttpHandler { string filename = ctx.Request.QueryString["path"]; + string user = ctx.User.Identity.Name; string publicFolder = Path.GetFullPath("/home/" + user + "/public"); string filePath = Path.GetFullPath(Path.Combine(publicFolder, filename)); From 94b7bda3dcbec3beec45d8dc7ef4eb7834fbb50d Mon Sep 17 00:00:00 2001 From: erik-krogh Date: Tue, 6 Feb 2024 09:36:30 +0100 Subject: [PATCH 063/378] exclude tagged template literals from `js/superfluous-trailing-arguments` --- .../ql/src/LanguageFeatures/SpuriousArguments.ql | 3 ++- .../LanguageFeatures/SpuriousArguments/tst.js | 11 ++++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/javascript/ql/src/LanguageFeatures/SpuriousArguments.ql b/javascript/ql/src/LanguageFeatures/SpuriousArguments.ql index de8f248d2d4..fd3914c9023 100644 --- a/javascript/ql/src/LanguageFeatures/SpuriousArguments.ql +++ b/javascript/ql/src/LanguageFeatures/SpuriousArguments.ql @@ -46,7 +46,8 @@ class SpuriousArguments extends Expr { SpuriousArguments() { this = invk.getArgument(maxArity(invk)).asExpr() and - not invk.isIncomplete() + not invk.isIncomplete() and + not invk.getAstNode() instanceof TaggedTemplateExpr } /** diff --git a/javascript/ql/test/query-tests/LanguageFeatures/SpuriousArguments/tst.js b/javascript/ql/test/query-tests/LanguageFeatures/SpuriousArguments/tst.js index 13877ff1dda..1caa88564a1 100644 --- a/javascript/ql/test/query-tests/LanguageFeatures/SpuriousArguments/tst.js +++ b/javascript/ql/test/query-tests/LanguageFeatures/SpuriousArguments/tst.js @@ -129,4 +129,13 @@ function sum2() { } // OK -sum2(1, 2, 3); \ No newline at end of file +sum2(1, 2, 3); + +const $ = function (x, arr) { + console.log(x, arr); +}; + +// OK +async function tagThing(repoUrl, directory) { + await $`git clone ${repoUrl} ${directory}`; +} From 6c1e3b1ba60aef87f7fdabc2b1e1586989d0a4e8 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 6 Feb 2024 11:02:15 +0000 Subject: [PATCH 064/378] Update cpp/ql/src/change-notes/released/0.9.4.md --- cpp/ql/src/change-notes/released/0.9.4.md | 1 - 1 file changed, 1 deletion(-) diff --git a/cpp/ql/src/change-notes/released/0.9.4.md b/cpp/ql/src/change-notes/released/0.9.4.md index 6525a90f9bb..bc6e71d7054 100644 --- a/cpp/ql/src/change-notes/released/0.9.4.md +++ b/cpp/ql/src/change-notes/released/0.9.4.md @@ -6,5 +6,4 @@ * The "Incorrect return-value check for a 'scanf'-like function" query (`cpp/incorrectly-checked-scanf`) no longer reports an alert when an explicit check for EOF is added. * The "Incorrect return-value check for a 'scanf'-like function" query (`cpp/incorrectly-checked-scanf`) now recognizes more EOF checks. * The "Potentially uninitialized local variable" query (`cpp/uninitialized-local`) no longer reports an alert when the local variable is used as a qualifier to a static member function call. -* ``` * The diagnostic query `cpp/diagnostics/successfully-extracted-files` now considers any C/C++ file seen during extraction, even one with some errors, to be extracted / scanned. This affects the Code Scanning UI measure of scanned C/C++ files. From 33cefabe2771d9b28b42a757698a1f18665d140b Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 6 Feb 2024 11:05:22 +0000 Subject: [PATCH 065/378] Update cpp/ql/src/CHANGELOG.md --- cpp/ql/src/CHANGELOG.md | 1 - 1 file changed, 1 deletion(-) diff --git a/cpp/ql/src/CHANGELOG.md b/cpp/ql/src/CHANGELOG.md index 68bcdbc5b07..44d00c1d8e4 100644 --- a/cpp/ql/src/CHANGELOG.md +++ b/cpp/ql/src/CHANGELOG.md @@ -6,7 +6,6 @@ * The "Incorrect return-value check for a 'scanf'-like function" query (`cpp/incorrectly-checked-scanf`) no longer reports an alert when an explicit check for EOF is added. * The "Incorrect return-value check for a 'scanf'-like function" query (`cpp/incorrectly-checked-scanf`) now recognizes more EOF checks. * The "Potentially uninitialized local variable" query (`cpp/uninitialized-local`) no longer reports an alert when the local variable is used as a qualifier to a static member function call. -* ``` * The diagnostic query `cpp/diagnostics/successfully-extracted-files` now considers any C/C++ file seen during extraction, even one with some errors, to be extracted / scanned. This affects the Code Scanning UI measure of scanned C/C++ files. ## 0.9.3 From 705a37706019c2ba531aa613d34ce42757eacd55 Mon Sep 17 00:00:00 2001 From: Max Schaefer Date: Mon, 5 Feb 2024 19:52:30 +0000 Subject: [PATCH 066/378] Address review comments. --- java/ql/lib/change-notes/2024-01-31-new-models.md | 3 --- java/ql/lib/ext/android.app.model.yml | 1 - java/ql/lib/ext/java.net.model.yml | 1 - java/ql/lib/ext/java.nio.file.model.yml | 1 - java/ql/lib/ext/javax.xml.parsers.model.yml | 6 ------ java/ql/lib/ext/org.apache.http.impl.client.model.yml | 1 - 6 files changed, 13 deletions(-) delete mode 100644 java/ql/lib/ext/javax.xml.parsers.model.yml diff --git a/java/ql/lib/change-notes/2024-01-31-new-models.md b/java/ql/lib/change-notes/2024-01-31-new-models.md index 195c1dd9954..4fbc1b59571 100644 --- a/java/ql/lib/change-notes/2024-01-31-new-models.md +++ b/java/ql/lib/change-notes/2024-01-31-new-models.md @@ -3,7 +3,6 @@ category: minorAnalysis --- * Added models for the following packages: - * android.app * java.io * java.lang * java.net @@ -11,11 +10,9 @@ category: minorAnalysis * java.nio.file * java.util.zip * javax.servlet - * javax.xml.parsers * kotlin.io * org.apache.commons.io * org.apache.hadoop.fs * org.apache.hadoop.fs.s3a - * org.apache.http.impl.client * org.eclipse.jetty.client * org.gradle.api.file diff --git a/java/ql/lib/ext/android.app.model.yml b/java/ql/lib/ext/android.app.model.yml index f70ea2d238c..28b5171c0d7 100644 --- a/java/ql/lib/ext/android.app.model.yml +++ b/java/ql/lib/ext/android.app.model.yml @@ -6,7 +6,6 @@ extensions: - ["android.app", "Activity", True, "bindService", "", "", "Argument[0]", "intent-redirection", "manual"] - ["android.app", "Activity", True, "bindServiceAsUser", "", "", "Argument[0]", "intent-redirection", "manual"] - ["android.app", "Activity", True, "setResult", "(int,Intent)", "", "Argument[1]", "pending-intents", "manual"] - - ["android.app", "Activity", True, "startActivity", "(Intent)", "", "Argument[0]", "intent-redirection", "ai-manual"] - ["android.app", "Activity", True, "startActivityAsCaller", "", "", "Argument[0]", "intent-redirection", "manual"] - ["android.app", "Activity", True, "startActivityForResult", "(Intent,int)", "", "Argument[0]", "intent-redirection", "manual"] - ["android.app", "Activity", True, "startActivityForResult", "(Intent,int,Bundle)", "", "Argument[0]", "intent-redirection", "manual"] diff --git a/java/ql/lib/ext/java.net.model.yml b/java/ql/lib/ext/java.net.model.yml index a6dd7fc5ce8..afdf3320b08 100644 --- a/java/ql/lib/ext/java.net.model.yml +++ b/java/ql/lib/ext/java.net.model.yml @@ -44,7 +44,6 @@ extensions: - ["java.net", "InetSocketAddress", True, "InetSocketAddress", "(String,int)", "", "Argument[0]", "Argument[this]", "taint", "ai-manual"] - ["java.net", "URI", False, "resolve", "(URI)", "", "Argument[this]", "ReturnValue", "taint", "ai-manual"] - ["java.net", "URI", False, "URI", "(String,String,String,int,String,String,String)", "", "Argument[5]", "Argument[this].SyntheticField[java.net.URI.query]", "taint", "ai-manual"] - - ["java.net", "URI", False, "URI", "(String,String,String,int,String,String,String)", "", "Argument[4]", "ReturnValue", "taint", "ai-manual"] - ["java.net", "URI", False, "URI", "(String,String,String)", "", "Argument[1]", "ReturnValue", "taint", "ai-manual"] - ["java.net", "URI", False, "URI", "(String)", "", "Argument[0]", "Argument[this]", "taint", "manual"] - ["java.net", "URI", False, "create", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] diff --git a/java/ql/lib/ext/java.nio.file.model.yml b/java/ql/lib/ext/java.nio.file.model.yml index ea32fa75fe3..f41cbf3a3e9 100644 --- a/java/ql/lib/ext/java.nio.file.model.yml +++ b/java/ql/lib/ext/java.nio.file.model.yml @@ -82,7 +82,6 @@ extensions: - ["java.nio.file", "Path", False, "toFile", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.nio.file", "Path", True, "toString", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.nio.file", "Path", True, "toUri", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - - ["java.nio.file", "Paths", False, "get", "(String,String[])", "", "Argument[1]", "ReturnValue", "taint", "ai-manual"] - ["java.nio.file", "Paths", True, "get", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] - ["java.nio.file", "Paths", True, "get", "", "", "Argument[1].ArrayElement", "ReturnValue", "taint", "manual"] # Not supported by current lambda flow diff --git a/java/ql/lib/ext/javax.xml.parsers.model.yml b/java/ql/lib/ext/javax.xml.parsers.model.yml deleted file mode 100644 index d39a28f5942..00000000000 --- a/java/ql/lib/ext/javax.xml.parsers.model.yml +++ /dev/null @@ -1,6 +0,0 @@ -extensions: - - addsTo: - pack: codeql/java-all - extensible: sinkModel - data: - - ["javax.xml.parsers", "DocumentBuilder", True, "parse", "(InputSource)", "", "Argument[0]", "xxe", "ai-manual"] diff --git a/java/ql/lib/ext/org.apache.http.impl.client.model.yml b/java/ql/lib/ext/org.apache.http.impl.client.model.yml index 6f407ac3682..be517e5344f 100644 --- a/java/ql/lib/ext/org.apache.http.impl.client.model.yml +++ b/java/ql/lib/ext/org.apache.http.impl.client.model.yml @@ -3,5 +3,4 @@ extensions: pack: codeql/java-all extensible: sinkModel data: - - ["org.apache.http.impl.client", "CloseableHttpClient", True, "execute", "(HttpUriRequest)", "", "Argument[0]", "request-forgery", "ai-manual"] - ["org.apache.http.impl.client", "RequestWrapper", True, "setURI", "(URI)", "", "Argument[0]", "request-forgery", "hq-manual"] From b5139078d0befed44d9147f01862bb7d8a454ab9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 6 Feb 2024 19:22:35 +0000 Subject: [PATCH 067/378] Post-release preparation for codeql-cli-2.16.2 --- cpp/ql/lib/qlpack.yml | 2 +- cpp/ql/src/qlpack.yml | 2 +- csharp/ql/campaigns/Solorigate/lib/qlpack.yml | 2 +- csharp/ql/campaigns/Solorigate/src/qlpack.yml | 2 +- csharp/ql/lib/qlpack.yml | 2 +- csharp/ql/src/qlpack.yml | 2 +- go/ql/consistency-queries/qlpack.yml | 2 +- go/ql/lib/qlpack.yml | 2 +- go/ql/src/qlpack.yml | 2 +- java/ql/automodel/src/qlpack.yml | 2 +- java/ql/lib/qlpack.yml | 2 +- java/ql/src/qlpack.yml | 2 +- javascript/ql/lib/qlpack.yml | 2 +- javascript/ql/src/qlpack.yml | 2 +- misc/suite-helpers/qlpack.yml | 2 +- python/ql/lib/qlpack.yml | 2 +- python/ql/src/qlpack.yml | 2 +- ruby/ql/lib/qlpack.yml | 2 +- ruby/ql/src/qlpack.yml | 2 +- shared/controlflow/qlpack.yml | 2 +- shared/dataflow/qlpack.yml | 2 +- shared/mad/qlpack.yml | 2 +- shared/rangeanalysis/qlpack.yml | 2 +- shared/regex/qlpack.yml | 2 +- shared/ssa/qlpack.yml | 2 +- shared/threat-models/qlpack.yml | 2 +- shared/tutorial/qlpack.yml | 2 +- shared/typetracking/qlpack.yml | 2 +- shared/typos/qlpack.yml | 2 +- shared/util/qlpack.yml | 2 +- shared/yaml/qlpack.yml | 2 +- swift/ql/lib/qlpack.yml | 2 +- swift/ql/src/qlpack.yml | 2 +- 33 files changed, 33 insertions(+), 33 deletions(-) diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml index b1b4172e977..7615b6bac2f 100644 --- a/cpp/ql/lib/qlpack.yml +++ b/cpp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-all -version: 0.12.5 +version: 0.12.6-dev groups: cpp dbscheme: semmlecode.cpp.dbscheme extractor: cpp diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml index 0da41987b3e..9151201a137 100644 --- a/cpp/ql/src/qlpack.yml +++ b/cpp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-queries -version: 0.9.4 +version: 0.9.5-dev groups: - cpp - queries diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml index 77b1c8b5154..8466748a25b 100644 --- a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-all -version: 1.7.8 +version: 1.7.9-dev groups: - csharp - solorigate diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml index 9851e27c691..ff72db938e0 100644 --- a/csharp/ql/campaigns/Solorigate/src/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-queries -version: 1.7.8 +version: 1.7.9-dev groups: - csharp - solorigate diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index 2b137281da6..2e576e11b11 100644 --- a/csharp/ql/lib/qlpack.yml +++ b/csharp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-all -version: 0.8.8 +version: 0.8.9-dev groups: csharp dbscheme: semmlecode.csharp.dbscheme extractor: csharp diff --git a/csharp/ql/src/qlpack.yml b/csharp/ql/src/qlpack.yml index a16c72edd72..018c3e09ae3 100644 --- a/csharp/ql/src/qlpack.yml +++ b/csharp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-queries -version: 0.8.8 +version: 0.8.9-dev groups: - csharp - queries diff --git a/go/ql/consistency-queries/qlpack.yml b/go/ql/consistency-queries/qlpack.yml index c7522dd8e35..651e694d964 100644 --- a/go/ql/consistency-queries/qlpack.yml +++ b/go/ql/consistency-queries/qlpack.yml @@ -1,5 +1,5 @@ name: codeql-go-consistency-queries -version: 0.0.7 +version: 0.0.8-dev groups: - go - queries diff --git a/go/ql/lib/qlpack.yml b/go/ql/lib/qlpack.yml index 5f317377d45..920594fe6ec 100644 --- a/go/ql/lib/qlpack.yml +++ b/go/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-all -version: 0.7.8 +version: 0.7.9-dev groups: go dbscheme: go.dbscheme extractor: go diff --git a/go/ql/src/qlpack.yml b/go/ql/src/qlpack.yml index 81654540219..fb73fa0eb96 100644 --- a/go/ql/src/qlpack.yml +++ b/go/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-queries -version: 0.7.8 +version: 0.7.9-dev groups: - go - queries diff --git a/java/ql/automodel/src/qlpack.yml b/java/ql/automodel/src/qlpack.yml index 3334223e9e4..1f68ac3f6ba 100644 --- a/java/ql/automodel/src/qlpack.yml +++ b/java/ql/automodel/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-automodel-queries -version: 0.0.14 +version: 0.0.15-dev groups: - java - automodel diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index 6e4e1269d9c..cadcc1c9be6 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-all -version: 0.8.8 +version: 0.8.9-dev groups: java dbscheme: config/semmlecode.dbscheme extractor: java diff --git a/java/ql/src/qlpack.yml b/java/ql/src/qlpack.yml index 73e8a062ffe..cad99f4d9c4 100644 --- a/java/ql/src/qlpack.yml +++ b/java/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-queries -version: 0.8.8 +version: 0.8.9-dev groups: - java - queries diff --git a/javascript/ql/lib/qlpack.yml b/javascript/ql/lib/qlpack.yml index fa544548ea7..2be9a1ed2bd 100644 --- a/javascript/ql/lib/qlpack.yml +++ b/javascript/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-all -version: 0.8.8 +version: 0.8.9-dev groups: javascript dbscheme: semmlecode.javascript.dbscheme extractor: javascript diff --git a/javascript/ql/src/qlpack.yml b/javascript/ql/src/qlpack.yml index 1ebbfc58787..545be6f2c61 100644 --- a/javascript/ql/src/qlpack.yml +++ b/javascript/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-queries -version: 0.8.8 +version: 0.8.9-dev groups: - javascript - queries diff --git a/misc/suite-helpers/qlpack.yml b/misc/suite-helpers/qlpack.yml index 4db5dfcf454..6b20374ae33 100644 --- a/misc/suite-helpers/qlpack.yml +++ b/misc/suite-helpers/qlpack.yml @@ -1,4 +1,4 @@ name: codeql/suite-helpers -version: 0.7.8 +version: 0.7.9-dev groups: shared warnOnImplicitThis: true diff --git a/python/ql/lib/qlpack.yml b/python/ql/lib/qlpack.yml index a2c343cca3f..94f82195d5b 100644 --- a/python/ql/lib/qlpack.yml +++ b/python/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-all -version: 0.11.8 +version: 0.11.9-dev groups: python dbscheme: semmlecode.python.dbscheme extractor: python diff --git a/python/ql/src/qlpack.yml b/python/ql/src/qlpack.yml index 538e5ad799c..c5335da22f3 100644 --- a/python/ql/src/qlpack.yml +++ b/python/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-queries -version: 0.9.8 +version: 0.9.9-dev groups: - python - queries diff --git a/ruby/ql/lib/qlpack.yml b/ruby/ql/lib/qlpack.yml index 7eb6222e101..6c55331de90 100644 --- a/ruby/ql/lib/qlpack.yml +++ b/ruby/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-all -version: 0.8.8 +version: 0.8.9-dev groups: ruby extractor: ruby dbscheme: ruby.dbscheme diff --git a/ruby/ql/src/qlpack.yml b/ruby/ql/src/qlpack.yml index 7c1995c00e5..3637a80df7f 100644 --- a/ruby/ql/src/qlpack.yml +++ b/ruby/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-queries -version: 0.8.8 +version: 0.8.9-dev groups: - ruby - queries diff --git a/shared/controlflow/qlpack.yml b/shared/controlflow/qlpack.yml index 79d4a386cf1..c7a88e50611 100644 --- a/shared/controlflow/qlpack.yml +++ b/shared/controlflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/controlflow -version: 0.1.8 +version: 0.1.9-dev groups: shared library: true dependencies: diff --git a/shared/dataflow/qlpack.yml b/shared/dataflow/qlpack.yml index ffb4d0754be..c14ef815d58 100644 --- a/shared/dataflow/qlpack.yml +++ b/shared/dataflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/dataflow -version: 0.1.8 +version: 0.1.9-dev groups: shared library: true dependencies: diff --git a/shared/mad/qlpack.yml b/shared/mad/qlpack.yml index c4eade3b256..0b3830f888d 100644 --- a/shared/mad/qlpack.yml +++ b/shared/mad/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/mad -version: 0.2.8 +version: 0.2.9-dev groups: shared library: true dependencies: null diff --git a/shared/rangeanalysis/qlpack.yml b/shared/rangeanalysis/qlpack.yml index faa059f069a..0f5272dd8cf 100644 --- a/shared/rangeanalysis/qlpack.yml +++ b/shared/rangeanalysis/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rangeanalysis -version: 0.0.7 +version: 0.0.8-dev groups: shared library: true dependencies: diff --git a/shared/regex/qlpack.yml b/shared/regex/qlpack.yml index 57aa69e9629..eca67311c9c 100644 --- a/shared/regex/qlpack.yml +++ b/shared/regex/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/regex -version: 0.2.8 +version: 0.2.9-dev groups: shared library: true dependencies: diff --git a/shared/ssa/qlpack.yml b/shared/ssa/qlpack.yml index f47e195b548..b5d30380815 100644 --- a/shared/ssa/qlpack.yml +++ b/shared/ssa/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ssa -version: 0.2.8 +version: 0.2.9-dev groups: shared library: true dependencies: diff --git a/shared/threat-models/qlpack.yml b/shared/threat-models/qlpack.yml index b056dd0d720..eb345ecca9a 100644 --- a/shared/threat-models/qlpack.yml +++ b/shared/threat-models/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/threat-models -version: 0.0.7 +version: 0.0.8-dev library: true groups: shared dataExtensions: diff --git a/shared/tutorial/qlpack.yml b/shared/tutorial/qlpack.yml index 23525cbfc60..e3080bb33b5 100644 --- a/shared/tutorial/qlpack.yml +++ b/shared/tutorial/qlpack.yml @@ -1,7 +1,7 @@ name: codeql/tutorial description: Library for the CodeQL detective tutorials, helping new users learn to write CodeQL queries. -version: 0.2.8 +version: 0.2.9-dev groups: shared library: true warnOnImplicitThis: true diff --git a/shared/typetracking/qlpack.yml b/shared/typetracking/qlpack.yml index 09757c9de82..adf375fd0c3 100644 --- a/shared/typetracking/qlpack.yml +++ b/shared/typetracking/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typetracking -version: 0.2.8 +version: 0.2.9-dev groups: shared library: true dependencies: diff --git a/shared/typos/qlpack.yml b/shared/typos/qlpack.yml index 4466e61ee0b..927514b2fe4 100644 --- a/shared/typos/qlpack.yml +++ b/shared/typos/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typos -version: 0.2.8 +version: 0.2.9-dev groups: shared library: true warnOnImplicitThis: true diff --git a/shared/util/qlpack.yml b/shared/util/qlpack.yml index ae11a5bf58b..72537a48107 100644 --- a/shared/util/qlpack.yml +++ b/shared/util/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/util -version: 0.2.8 +version: 0.2.9-dev groups: shared library: true dependencies: null diff --git a/shared/yaml/qlpack.yml b/shared/yaml/qlpack.yml index 4d656f79862..fae3aad1324 100644 --- a/shared/yaml/qlpack.yml +++ b/shared/yaml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/yaml -version: 0.2.8 +version: 0.2.9-dev groups: shared library: true warnOnImplicitThis: true diff --git a/swift/ql/lib/qlpack.yml b/swift/ql/lib/qlpack.yml index 8916abe3bec..2c58adec21e 100644 --- a/swift/ql/lib/qlpack.yml +++ b/swift/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-all -version: 0.3.8 +version: 0.3.9-dev groups: swift extractor: swift dbscheme: swift.dbscheme diff --git a/swift/ql/src/qlpack.yml b/swift/ql/src/qlpack.yml index 4a8d3d68e74..00ff9a6f163 100644 --- a/swift/ql/src/qlpack.yml +++ b/swift/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-queries -version: 0.3.8 +version: 0.3.9-dev groups: - swift - queries From 1484a169d743bec1bf3d08b390ddc5c1efad16c5 Mon Sep 17 00:00:00 2001 From: Jonathan Leitschuh Date: Tue, 6 Feb 2024 15:43:19 -0500 Subject: [PATCH 068/378] Reduce severity of `java/relative-path-command` Significantly reduces the severity of `java/relative-path-command` from 9.8 to 5.4 https://www.first.org/cvss/calculator/4.0#CVSS:4.0/AV:L/AC:L/AT:P/PR:H/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N --- java/ql/src/Security/CWE/CWE-078/ExecRelative.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/ql/src/Security/CWE/CWE-078/ExecRelative.ql b/java/ql/src/Security/CWE/CWE-078/ExecRelative.ql index 501826c6426..533980a3f0a 100644 --- a/java/ql/src/Security/CWE/CWE-078/ExecRelative.ql +++ b/java/ql/src/Security/CWE/CWE-078/ExecRelative.ql @@ -4,7 +4,7 @@ * malicious changes in the PATH environment variable. * @kind problem * @problem.severity warning - * @security-severity 9.8 + * @security-severity 5.4 * @precision medium * @id java/relative-path-command * @tags security From b8dbb8c866a7f468681ccb6f14e6d02b0842f8ce Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Wed, 7 Feb 2024 10:26:09 +0100 Subject: [PATCH 069/378] C# Add missing Windows Forms implicit usings --- .../DependencyManager.cs | 13 +++++++ .../FileContent.cs | 30 ++++++++++++++++ .../Semmle.Extraction.Tests/FileContent.cs | 36 +++++++++++++++---- 3 files changed, 73 insertions(+), 6 deletions(-) diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs index 13f8cc4e2a5..cd071c307bf 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs @@ -116,8 +116,16 @@ namespace Semmle.Extraction.CSharp.DependencyFetching bool.TryParse(webViewExtractionOption, out var shouldExtractWebViews) && shouldExtractWebViews) { + CompilationInfos.Add(("WebView extraction enabled", "1")); GenerateSourceFilesFromWebViews(allNonBinaryFiles); } + else + { + CompilationInfos.Add(("WebView extraction enabled", "0")); + } + + CompilationInfos.Add(("UseWPF set", fileContent.UseWpf ? "1" : "0")); + CompilationInfos.Add(("UseWindowsForms set", fileContent.UseWindowsForms ? "1" : "0")); GenerateSourceFileFromImplicitUsings(); @@ -434,6 +442,11 @@ namespace Semmle.Extraction.CSharp.DependencyFetching "Microsoft.Extensions.DependencyInjection", "Microsoft.Extensions.Hosting", "Microsoft.Extensions.Logging" }); } + if (fileContent.UseWindowsForms) + { + usings.UnionWith(new[] { "System.Drawing", "System.Windows.Forms" }); + } + usings.UnionWith(fileContent.CustomImplicitUsings); logger.LogInfo($"Generating source file for implicit usings. Namespaces: {string.Join(", ", usings.OrderBy(u => u))}"); diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/FileContent.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/FileContent.cs index c06eaec270f..03f448e7330 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/FileContent.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/FileContent.cs @@ -61,6 +61,28 @@ namespace Semmle.Extraction.CSharp.DependencyFetching } } + private bool useWpf = false; + + public bool UseWpf + { + get + { + initialize.Run(); + return useWpf; + } + } + + private bool useWindowsForms = false; + + public bool UseWindowsForms + { + get + { + initialize.Run(); + return useWindowsForms; + } + } + private bool isLegacyProjectStructureUsed = false; public bool IsLegacyProjectStructureUsed @@ -173,6 +195,14 @@ namespace Semmle.Extraction.CSharp.DependencyFetching || line.Contains("enable".AsSpan(), StringComparison.Ordinal) || line.Contains("true".AsSpan(), StringComparison.Ordinal); + // Determine if WPF is used. + useWpf = useWpf + || line.Contains("true".AsSpan(), StringComparison.Ordinal); + + // Determine if Windows Forms is used. + useWindowsForms = useWindowsForms + || line.Contains("true".AsSpan(), StringComparison.Ordinal); + // Find all custom implicit usings. foreach (var valueMatch in CustomImplicitUsingDeclarations().EnumerateMatches(line)) { diff --git a/csharp/extractor/Semmle.Extraction.Tests/FileContent.cs b/csharp/extractor/Semmle.Extraction.Tests/FileContent.cs index ba934120c45..6dcee31024a 100644 --- a/csharp/extractor/Semmle.Extraction.Tests/FileContent.cs +++ b/csharp/extractor/Semmle.Extraction.Tests/FileContent.cs @@ -84,7 +84,7 @@ namespace Semmle.Extraction.Tests Assert.Contains("StyleCop.Analyzers".ToLowerInvariant(), allPackages); } - private static void ImplicitUsingsTest(string line, bool expected) + private static void CsProjSettingsTest(string line, bool expected, Func func) { // Setup var lines = new List() @@ -94,28 +94,52 @@ namespace Semmle.Extraction.Tests var fileContent = new TestFileContent(lines); // Execute - var useImplicitUsings = fileContent.UseImplicitUsings; + var actual = func(fileContent); // Verify - Assert.Equal(expected, useImplicitUsings); + Assert.Equal(expected, actual); } [Fact] public void TestFileContent_ImplicitUsings0() { - ImplicitUsingsTest("false", false); + CsProjSettingsTest("false", false, fc => fc.UseImplicitUsings); } [Fact] public void TestFileContent_ImplicitUsings1() { - ImplicitUsingsTest("true", true); + CsProjSettingsTest("true", true, fc => fc.UseImplicitUsings); } [Fact] public void TestFileContent_ImplicitUsings2() { - ImplicitUsingsTest("enable", true); + CsProjSettingsTest("enable", true, fc => fc.UseImplicitUsings); + } + + [Fact] + public void TestFileContent_UseWpf0() + { + CsProjSettingsTest("false", false, fc => fc.UseWpf); + } + + [Fact] + public void TestFileContent_UseWpf1() + { + CsProjSettingsTest("true", true, fc => fc.UseWpf); + } + + [Fact] + public void TestFileContent_UseWindowsForms0() + { + CsProjSettingsTest("false", false, fc => fc.UseWindowsForms); + } + + [Fact] + public void TestFileContent_UseWindowsForms1() + { + CsProjSettingsTest("true", true, fc => fc.UseWindowsForms); } [Fact] From 082754a3d8dd3a3a8d550bc5e1b150ea83f51717 Mon Sep 17 00:00:00 2001 From: Max Schaefer Date: Wed, 7 Feb 2024 13:21:59 +0000 Subject: [PATCH 070/378] Remove problematic Kotlin model. --- java/ql/lib/change-notes/2024-01-31-new-models.md | 1 - java/ql/lib/ext/kotlin.io.model.yml | 1 - 2 files changed, 2 deletions(-) diff --git a/java/ql/lib/change-notes/2024-01-31-new-models.md b/java/ql/lib/change-notes/2024-01-31-new-models.md index 4fbc1b59571..bdb588f3bc3 100644 --- a/java/ql/lib/change-notes/2024-01-31-new-models.md +++ b/java/ql/lib/change-notes/2024-01-31-new-models.md @@ -10,7 +10,6 @@ category: minorAnalysis * java.nio.file * java.util.zip * javax.servlet - * kotlin.io * org.apache.commons.io * org.apache.hadoop.fs * org.apache.hadoop.fs.s3a diff --git a/java/ql/lib/ext/kotlin.io.model.yml b/java/ql/lib/ext/kotlin.io.model.yml index c65862f6eac..b748e04a292 100644 --- a/java/ql/lib/ext/kotlin.io.model.yml +++ b/java/ql/lib/ext/kotlin.io.model.yml @@ -3,7 +3,6 @@ extensions: pack: codeql/java-all extensible: sinkModel data: - - ["kotlin.io", "FilesKt", False, "appendText$default", "(File,String,Charset,int,Object)", "", "Argument[0]", "path-injection", "ai-manual"] - ["kotlin.io", "FilesKt", False, "deleteRecursively", "(File)", "", "Argument[0]", "path-injection", "ai-manual"] - ["kotlin.io", "FilesKt", False, "inputStream", "(File)", "", "Argument[0]", "path-injection", "ai-manual"] - ["kotlin.io", "FilesKt", False, "readBytes", "(File)", "", "Argument[0]", "path-injection", "ai-manual"] From 9ce75dac0e540545d61dbb9c1af9bf1dab9d5971 Mon Sep 17 00:00:00 2001 From: Maiky <76447395+maikypedia@users.noreply.github.com> Date: Wed, 7 Feb 2024 14:26:56 +0100 Subject: [PATCH 071/378] Update UnsafeUnpackQuery.qll --- swift/ql/lib/codeql/swift/security/UnsafeUnpackQuery.qll | 1 - 1 file changed, 1 deletion(-) diff --git a/swift/ql/lib/codeql/swift/security/UnsafeUnpackQuery.qll b/swift/ql/lib/codeql/swift/security/UnsafeUnpackQuery.qll index dbc0f733b52..59be3a7eb31 100644 --- a/swift/ql/lib/codeql/swift/security/UnsafeUnpackQuery.qll +++ b/swift/ql/lib/codeql/swift/security/UnsafeUnpackQuery.qll @@ -5,7 +5,6 @@ */ import swift -import codeql.swift.dataflow.DataFlow import codeql.swift.dataflow.TaintTracking import codeql.swift.dataflow.FlowSources import codeql.swift.security.UnsafeUnpackExtensions From c6fb303d63fa6ba3fef9efcc1a312e0d86ecbe4b Mon Sep 17 00:00:00 2001 From: Maiky <76447395+maikypedia@users.noreply.github.com> Date: Wed, 7 Feb 2024 14:27:40 +0100 Subject: [PATCH 072/378] Suggested changes Co-authored-by: Geoffrey White <40627776+geoffw0@users.noreply.github.com> --- .../src/experimental/Security/CWE-022/UnsafeUnpack.qhelp | 2 +- .../ql/src/experimental/Security/CWE-022/UnsafeUnpack.ql | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/swift/ql/src/experimental/Security/CWE-022/UnsafeUnpack.qhelp b/swift/ql/src/experimental/Security/CWE-022/UnsafeUnpack.qhelp index df162180c53..2f65296b9a8 100644 --- a/swift/ql/src/experimental/Security/CWE-022/UnsafeUnpack.qhelp +++ b/swift/ql/src/experimental/Security/CWE-022/UnsafeUnpack.qhelp @@ -31,7 +31,7 @@ The following examples unpacks a remote zip using `fileManager.unzipItem()` whic

    Consider using a safer module, such as: ZIPArchive

    - + diff --git a/swift/ql/src/experimental/Security/CWE-022/UnsafeUnpack.ql b/swift/ql/src/experimental/Security/CWE-022/UnsafeUnpack.ql index c50cc6c3b4f..e455a1b2d16 100644 --- a/swift/ql/src/experimental/Security/CWE-022/UnsafeUnpack.ql +++ b/swift/ql/src/experimental/Security/CWE-022/UnsafeUnpack.ql @@ -1,11 +1,11 @@ /** * @name Arbitrary file write during a zip extraction from a user controlled source - * @description Unpacking user controlled zips without validating if destination path file - * is within the destination directory can cause files outside - * the destination directory to be overwritten. + * @description Unpacking user controlled zips without validating whether the + * destination file path is within the destination directory can cause files + * outside the destination directory to be overwritten. * @kind path-problem * @problem.severity error - * @security-severity 9.8 + * @security-severity 7.5 * @precision high * @id swift/unsafe-unpacking * @tags security From 7fb72ea81f4397063530b519f6f99e2844719703 Mon Sep 17 00:00:00 2001 From: Maiky <76447395+maikypedia@users.noreply.github.com> Date: Wed, 7 Feb 2024 14:30:16 +0100 Subject: [PATCH 073/378] Redundant import --- swift/ql/src/experimental/Security/CWE-022/UnsafeUnpack.ql | 1 - 1 file changed, 1 deletion(-) diff --git a/swift/ql/src/experimental/Security/CWE-022/UnsafeUnpack.ql b/swift/ql/src/experimental/Security/CWE-022/UnsafeUnpack.ql index e455a1b2d16..be7f4cfd084 100644 --- a/swift/ql/src/experimental/Security/CWE-022/UnsafeUnpack.ql +++ b/swift/ql/src/experimental/Security/CWE-022/UnsafeUnpack.ql @@ -14,7 +14,6 @@ */ import swift -import codeql.swift.dataflow.DataFlow import codeql.swift.security.UnsafeUnpackQuery import UnsafeUnpackFlow::PathGraph From 7c0f80ff7d4d01908c3a20d30154a61a46cd898b Mon Sep 17 00:00:00 2001 From: Maiky <76447395+maikypedia@users.noreply.github.com> Date: Wed, 7 Feb 2024 14:32:42 +0100 Subject: [PATCH 074/378] Apply suggestions from code review Co-authored-by: Geoffrey White <40627776+geoffw0@users.noreply.github.com> --- .../Security/CWE-022-Unsafe-Unpack/UnsafeUnpack.swift | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/swift/ql/test/query-tests/Security/CWE-022-Unsafe-Unpack/UnsafeUnpack.swift b/swift/ql/test/query-tests/Security/CWE-022-Unsafe-Unpack/UnsafeUnpack.swift index 2f599b89150..5d7dc6c58b4 100644 --- a/swift/ql/test/query-tests/Security/CWE-022-Unsafe-Unpack/UnsafeUnpack.swift +++ b/swift/ql/test/query-tests/Security/CWE-022-Unsafe-Unpack/UnsafeUnpack.swift @@ -52,15 +52,15 @@ extension String { // --- tests --- func testCommandInjectionQhelpExamples() { - guard let remoteURL = URL(string: "https://example.com/") else { - return - } + guard let remoteURL = URL(string: "https://example.com/") else { + return + } let source = URL(fileURLWithPath: "/sourcePath") let destination = URL(fileURLWithPath: "/destination") try Data(contentsOf: remoteURL, options: []).write(to: source) - do { + do { try Zip.unzipFile(source, destination: destination, overwrite: true, password: nil) // BAD let fileManager = FileManager() From 8646bffaea94302d4b42050919d18aaab385fa78 Mon Sep 17 00:00:00 2001 From: Koen Vlaswinkel Date: Wed, 7 Feb 2024 14:35:19 +0100 Subject: [PATCH 075/378] Ruby: Remove `ReturnValue` as access path for constructors --- .../utils/modeleditor/FrameworkModeAccessPaths.ql | 4 +++- ruby/ql/src/utils/modeleditor/ModelEditor.qll | 13 +++++++++---- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/ruby/ql/src/utils/modeleditor/FrameworkModeAccessPaths.ql b/ruby/ql/src/utils/modeleditor/FrameworkModeAccessPaths.ql index d992f1c46f8..87559350048 100644 --- a/ruby/ql/src/utils/modeleditor/FrameworkModeAccessPaths.ql +++ b/ruby/ql/src/utils/modeleditor/FrameworkModeAccessPaths.ql @@ -10,6 +10,7 @@ private import ruby private import codeql.ruby.AST private import codeql.ruby.ApiGraphs private import queries.modeling.internal.Util as Util +private import ModelEditor predicate simpleParameters(string type, string path, string value, DataFlow::Node node) { exists(DataFlow::MethodNode methodNode, DataFlow::ParameterNode paramNode | @@ -58,7 +59,8 @@ predicate blockArguments(string type, string path, string value, DataFlow::Node predicate returnValue(string type, string path, string value, DataFlow::Node node) { exists(DataFlow::MethodNode methodNode, DataFlow::Node returnNode | methodNode.getLocation().getFile() instanceof Util::RelevantFile and - returnNode = methodNode.getAReturnNode() + returnNode = methodNode.getAReturnNode() and + not isConstructor(methodNode) // A constructor doesn't have a return value | Util::pathToMethod(methodNode, type, path) and value = "ReturnValue" and diff --git a/ruby/ql/src/utils/modeleditor/ModelEditor.qll b/ruby/ql/src/utils/modeleditor/ModelEditor.qll index 625d40fd501..020a5f6177c 100644 --- a/ruby/ql/src/utils/modeleditor/ModelEditor.qll +++ b/ruby/ql/src/utils/modeleditor/ModelEditor.qll @@ -32,6 +32,14 @@ string getNamespace(File file) { ) } +/** + * Holds if this method is a constructor for a module. + */ +predicate isConstructor(DataFlow::MethodNode method) { + method.getMethodName() = "initialize" and + exists(DataFlow::ModuleNode m | m.getOwnInstanceMethod(method.getMethodName()) = method) +} + abstract class Endpoint instanceof DataFlow::Node { string getNamespace() { result = getNamespace(super.getLocation().getFile()) } @@ -153,10 +161,7 @@ class MethodEndpoint extends Endpoint instanceof DataFlow::MethodNode { /** * Holds if this method is a constructor for a module. */ - private predicate isConstructor() { - super.getMethodName() = "initialize" and - exists(DataFlow::ModuleNode m | m.getOwnInstanceMethod(super.getMethodName()) = this) - } + private predicate isConstructor() { isConstructor(this) } } string methodClassification(Call method) { From 1a499cf388d695cd70a93eb4dfa4da0c129903a0 Mon Sep 17 00:00:00 2001 From: maikypedia Date: Wed, 7 Feb 2024 14:38:21 +0100 Subject: [PATCH 076/378] Update `expected` --- .../UnsafeUnpack.expected | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/swift/ql/test/query-tests/Security/CWE-022-Unsafe-Unpack/UnsafeUnpack.expected b/swift/ql/test/query-tests/Security/CWE-022-Unsafe-Unpack/UnsafeUnpack.expected index 4e79ee8b503..09fc20545b0 100644 --- a/swift/ql/test/query-tests/Security/CWE-022-Unsafe-Unpack/UnsafeUnpack.expected +++ b/swift/ql/test/query-tests/Security/CWE-022-Unsafe-Unpack/UnsafeUnpack.expected @@ -1,13 +1,13 @@ edges -| UnsafeUnpack.swift:60:9:60:48 | call to Data.init(contentsOf:options:) | UnsafeUnpack.swift:60:60:60:60 | source | -| UnsafeUnpack.swift:60:60:60:60 | source | UnsafeUnpack.swift:62:27:62:27 | source | -| UnsafeUnpack.swift:60:60:60:60 | source | UnsafeUnpack.swift:65:39:65:39 | source | +| UnsafeUnpack.swift:62:9:62:48 | call to Data.init(contentsOf:options:) | UnsafeUnpack.swift:62:60:62:60 | source | +| UnsafeUnpack.swift:62:60:62:60 | source | UnsafeUnpack.swift:64:27:64:27 | source | +| UnsafeUnpack.swift:62:60:62:60 | source | UnsafeUnpack.swift:67:39:67:39 | source | nodes -| UnsafeUnpack.swift:60:9:60:48 | call to Data.init(contentsOf:options:) | semmle.label | call to Data.init(contentsOf:options:) | -| UnsafeUnpack.swift:60:60:60:60 | source | semmle.label | source | -| UnsafeUnpack.swift:62:27:62:27 | source | semmle.label | source | -| UnsafeUnpack.swift:65:39:65:39 | source | semmle.label | source | +| UnsafeUnpack.swift:62:9:62:48 | call to Data.init(contentsOf:options:) | semmle.label | call to Data.init(contentsOf:options:) | +| UnsafeUnpack.swift:62:60:62:60 | source | semmle.label | source | +| UnsafeUnpack.swift:64:27:64:27 | source | semmle.label | source | +| UnsafeUnpack.swift:67:39:67:39 | source | semmle.label | source | subpaths #select -| UnsafeUnpack.swift:62:27:62:27 | source | UnsafeUnpack.swift:60:9:60:48 | call to Data.init(contentsOf:options:) | UnsafeUnpack.swift:62:27:62:27 | source | Unsafe unpacking from a malicious zip retrieved from a remote location. | -| UnsafeUnpack.swift:65:39:65:39 | source | UnsafeUnpack.swift:60:9:60:48 | call to Data.init(contentsOf:options:) | UnsafeUnpack.swift:65:39:65:39 | source | Unsafe unpacking from a malicious zip retrieved from a remote location. | +| UnsafeUnpack.swift:64:27:64:27 | source | UnsafeUnpack.swift:62:9:62:48 | call to Data.init(contentsOf:options:) | UnsafeUnpack.swift:64:27:64:27 | source | Unsafe unpacking from a malicious zip retrieved from a remote location. | +| UnsafeUnpack.swift:67:39:67:39 | source | UnsafeUnpack.swift:62:9:62:48 | call to Data.init(contentsOf:options:) | UnsafeUnpack.swift:67:39:67:39 | source | Unsafe unpacking from a malicious zip retrieved from a remote location. | From 4eeca02da64ce2ccb3bfe39e21d51088b633600d Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Wed, 7 Feb 2024 14:58:19 +0100 Subject: [PATCH 077/378] Change file content string comparisons to be case invariant --- .../FileContent.cs | 29 +++++++------------ 1 file changed, 10 insertions(+), 19 deletions(-) diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/FileContent.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/FileContent.cs index 03f448e7330..08639561d87 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/FileContent.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/FileContent.cs @@ -127,10 +127,10 @@ namespace Semmle.Extraction.CSharp.DependencyFetching public FileContent(ILogger logger, IEnumerable files) : this(logger, files, new UnsafeFileReader()) { } - private static string GetGroup(ReadOnlySpan input, ValueMatch valueMatch, string groupPrefix, bool toLower) + private static string GetGroup(ReadOnlySpan input, ValueMatch valueMatch, string groupPrefix) { var match = input.Slice(valueMatch.Index, valueMatch.Length); - var includeIndex = match.IndexOf(groupPrefix, StringComparison.InvariantCultureIgnoreCase); + var includeIndex = match.IndexOf(groupPrefix, StringComparison.OrdinalIgnoreCase); if (includeIndex == -1) { return string.Empty; @@ -141,14 +141,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching var quoteIndex1 = match.IndexOf("\""); var quoteIndex2 = match.Slice(quoteIndex1 + 1).IndexOf("\""); - var result = match.Slice(quoteIndex1 + 1, quoteIndex2).ToString(); - - if (toLower) - { - result = result.ToLowerInvariant(); - } - - return result; + return match.Slice(quoteIndex1 + 1, quoteIndex2).ToString(); } private static bool IsGroupMatch(ReadOnlySpan line, Regex regex, string groupPrefix, string value) @@ -156,7 +149,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching foreach (var valueMatch in regex.EnumerateMatches(line)) { // We can't get the group from the ValueMatch, so doing it manually: - if (GetGroup(line, valueMatch, groupPrefix, toLower: true) == value.ToLowerInvariant()) + if (string.Equals(GetGroup(line, valueMatch, groupPrefix), value, StringComparison.OrdinalIgnoreCase)) { return true; } @@ -172,12 +165,11 @@ namespace Semmle.Extraction.CSharp.DependencyFetching { foreach (ReadOnlySpan line in unsafeFileReader.ReadLines(file)) { - // Find all the packages. foreach (var valueMatch in PackageReference().EnumerateMatches(line)) { // We can't get the group from the ValueMatch, so doing it manually: - var packageName = GetGroup(line, valueMatch, "Include", toLower: true); + var packageName = GetGroup(line, valueMatch, "Include").ToLowerInvariant(); if (!string.IsNullOrEmpty(packageName)) { allPackages.Add(packageName); @@ -189,24 +181,23 @@ namespace Semmle.Extraction.CSharp.DependencyFetching || IsGroupMatch(line, ProjectSdk(), "Sdk", "Microsoft.NET.Sdk.Web") || IsGroupMatch(line, FrameworkReference(), "Include", "Microsoft.AspNetCore.App"); - // Determine if implicit usings are used. useImplicitUsings = useImplicitUsings - || line.Contains("enable".AsSpan(), StringComparison.Ordinal) - || line.Contains("true".AsSpan(), StringComparison.Ordinal); + || line.Contains("enable".AsSpan(), StringComparison.OrdinalIgnoreCase) + || line.Contains("true".AsSpan(), StringComparison.OrdinalIgnoreCase); // Determine if WPF is used. useWpf = useWpf - || line.Contains("true".AsSpan(), StringComparison.Ordinal); + || line.Contains("true".AsSpan(), StringComparison.OrdinalIgnoreCase); // Determine if Windows Forms is used. useWindowsForms = useWindowsForms - || line.Contains("true".AsSpan(), StringComparison.Ordinal); + || line.Contains("true".AsSpan(), StringComparison.OrdinalIgnoreCase); // Find all custom implicit usings. foreach (var valueMatch in CustomImplicitUsingDeclarations().EnumerateMatches(line)) { - var ns = GetGroup(line, valueMatch, "Include", toLower: false); + var ns = GetGroup(line, valueMatch, "Include"); if (!string.IsNullOrEmpty(ns)) { implicitUsingNamespaces.Add(ns); From ed052ccc2607607a352f29540a316e71dfa45b71 Mon Sep 17 00:00:00 2001 From: maikypedia Date: Wed, 7 Feb 2024 15:58:10 +0100 Subject: [PATCH 078/378] Change note --- swift/ql/src/change-notes/2024-02-07-unsafe-unpacking.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 swift/ql/src/change-notes/2024-02-07-unsafe-unpacking.md diff --git a/swift/ql/src/change-notes/2024-02-07-unsafe-unpacking.md b/swift/ql/src/change-notes/2024-02-07-unsafe-unpacking.md new file mode 100644 index 00000000000..e3c6f79bc48 --- /dev/null +++ b/swift/ql/src/change-notes/2024-02-07-unsafe-unpacking.md @@ -0,0 +1,4 @@ +--- +category: newQuery +--- +* Added a new query, `swift/unsafe-unpacking`, that detects unpacking user controlled zips without validating the destination file path is within the destination directory. \ No newline at end of file From 1c6108028b024da4ce2d5200e7e3ef4fffda1a55 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 7 Feb 2024 15:12:17 +0000 Subject: [PATCH 079/378] Kotlin 2: Accept some location changes for arrays --- .../library-tests/arrays/arrayAccesses.expected | 8 ++++---- .../library-tests/arrays/assignExprs.expected | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/java/ql/test-kotlin2/library-tests/arrays/arrayAccesses.expected b/java/ql/test-kotlin2/library-tests/arrays/arrayAccesses.expected index 986bdeed21f..3dd2feaf353 100644 --- a/java/ql/test-kotlin2/library-tests/arrays/arrayAccesses.expected +++ b/java/ql/test-kotlin2/library-tests/arrays/arrayAccesses.expected @@ -16,7 +16,7 @@ | arrayGetsSets.kt:19:11:19:15 | ...[...] | arrayGetsSets.kt:19:3:19:7 | ...=... | char | arrayGetsSets.kt:19:11:19:12 | a8 | arrayGetsSets.kt:19:14:19:14 | 0 | | arrayGetsSets.kt:20:3:20:7 | ...[...] | arrayGetsSets.kt:20:3:20:7 | ...=... | Object[] | arrayGetsSets.kt:20:3:20:4 | a9 | arrayGetsSets.kt:20:6:20:6 | 0 | | arrayGetsSets.kt:20:11:20:15 | ...[...] | arrayGetsSets.kt:20:3:20:7 | ...=... | Object | arrayGetsSets.kt:20:11:20:12 | a9 | arrayGetsSets.kt:20:14:20:14 | 0 | -| arrayGetsSets.kt:32:3:32:7 | ...[...] | arrayGetsSets.kt:32:3:32:7 | ...+=... | int | arrayGetsSets.kt:32:3:32:4 | a1 | arrayGetsSets.kt:32:6:32:6 | 0 | -| arrayGetsSets.kt:38:3:38:7 | ...[...] | arrayGetsSets.kt:38:3:38:7 | .../=... | long | arrayGetsSets.kt:38:3:38:4 | a4 | arrayGetsSets.kt:38:6:38:6 | 0 | -| arrayGetsSets.kt:39:3:39:7 | ...[...] | arrayGetsSets.kt:39:3:39:7 | ...-=... | float | arrayGetsSets.kt:39:3:39:4 | a5 | arrayGetsSets.kt:39:6:39:6 | 0 | -| arrayGetsSets.kt:40:3:40:7 | ...[...] | arrayGetsSets.kt:40:3:40:7 | ...*=... | double | arrayGetsSets.kt:40:3:40:4 | a6 | arrayGetsSets.kt:40:6:40:6 | 0 | +| arrayGetsSets.kt:32:3:32:12 | ...[...] | arrayGetsSets.kt:32:3:32:12 | ...+=... | int | arrayGetsSets.kt:32:3:32:4 | a1 | arrayGetsSets.kt:32:6:32:6 | 0 | +| arrayGetsSets.kt:38:3:38:13 | ...[...] | arrayGetsSets.kt:38:3:38:13 | .../=... | long | arrayGetsSets.kt:38:3:38:4 | a4 | arrayGetsSets.kt:38:6:38:6 | 0 | +| arrayGetsSets.kt:39:3:39:13 | ...[...] | arrayGetsSets.kt:39:3:39:13 | ...-=... | float | arrayGetsSets.kt:39:3:39:4 | a5 | arrayGetsSets.kt:39:6:39:6 | 0 | +| arrayGetsSets.kt:40:3:40:14 | ...[...] | arrayGetsSets.kt:40:3:40:14 | ...*=... | double | arrayGetsSets.kt:40:3:40:4 | a6 | arrayGetsSets.kt:40:6:40:6 | 0 | diff --git a/java/ql/test-kotlin2/library-tests/arrays/assignExprs.expected b/java/ql/test-kotlin2/library-tests/arrays/assignExprs.expected index da09855b1e0..5f8fda311e2 100644 --- a/java/ql/test-kotlin2/library-tests/arrays/assignExprs.expected +++ b/java/ql/test-kotlin2/library-tests/arrays/assignExprs.expected @@ -1,4 +1,4 @@ -| arrayGetsSets.kt:32:3:32:7 | ...+=... | += | int[] | arrayGetsSets.kt:32:3:32:7 | ...[...] | int | arrayGetsSets.kt:32:12:32:12 | 1 | int | -| arrayGetsSets.kt:38:3:38:7 | .../=... | /= | long[] | arrayGetsSets.kt:38:3:38:7 | ...[...] | long | arrayGetsSets.kt:38:12:38:13 | 1 | long | -| arrayGetsSets.kt:39:3:39:7 | ...-=... | -= | float[] | arrayGetsSets.kt:39:3:39:7 | ...[...] | float | arrayGetsSets.kt:39:12:39:13 | 1.0 | float | -| arrayGetsSets.kt:40:3:40:7 | ...*=... | *= | double[] | arrayGetsSets.kt:40:3:40:7 | ...[...] | double | arrayGetsSets.kt:40:12:40:14 | 1.0 | double | +| arrayGetsSets.kt:32:3:32:12 | ...+=... | += | int[] | arrayGetsSets.kt:32:3:32:12 | ...[...] | int | arrayGetsSets.kt:32:12:32:12 | 1 | int | +| arrayGetsSets.kt:38:3:38:13 | .../=... | /= | long[] | arrayGetsSets.kt:38:3:38:13 | ...[...] | long | arrayGetsSets.kt:38:12:38:13 | 1 | long | +| arrayGetsSets.kt:39:3:39:13 | ...-=... | -= | float[] | arrayGetsSets.kt:39:3:39:13 | ...[...] | float | arrayGetsSets.kt:39:12:39:13 | 1.0 | float | +| arrayGetsSets.kt:40:3:40:14 | ...*=... | *= | double[] | arrayGetsSets.kt:40:3:40:14 | ...[...] | double | arrayGetsSets.kt:40:12:40:14 | 1.0 | double | From 3d1f9a79fb6d0859b519b58dde7ca9914409abf0 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 7 Feb 2024 15:17:40 +0000 Subject: [PATCH 080/378] Kotlin 2: Accept location changes in test-kotlin2/library-tests/data-classes --- .../library-tests/data-classes/PrintAst.expected | 10 +++++----- .../library-tests/data-classes/callees.expected | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/java/ql/test-kotlin2/library-tests/data-classes/PrintAst.expected b/java/ql/test-kotlin2/library-tests/data-classes/PrintAst.expected index f884671c094..e601e1378a6 100644 --- a/java/ql/test-kotlin2/library-tests/data-classes/PrintAst.expected +++ b/java/ql/test-kotlin2/library-tests/data-classes/PrintAst.expected @@ -17,11 +17,11 @@ dc.kt: # 0| 3: [Method] copy # 0| 3: [TypeAccess] ProtoMapValue #-----| 4: (Parameters) -# 1| 0: [Parameter] bytes -# 1| 0: [TypeAccess] byte[] -# 1| 1: [Parameter] strs -# 1| 0: [TypeAccess] String[] -# 1| 0: [TypeAccess] String +# 0| 0: [Parameter] bytes +# 0| 0: [TypeAccess] byte[] +# 0| 1: [Parameter] strs +# 0| 0: [TypeAccess] String[] +# 0| 0: [TypeAccess] String # 0| 5: [BlockStmt] { ... } # 0| 0: [ReturnStmt] return ... # 0| 0: [ClassInstanceExpr] new ProtoMapValue(...) diff --git a/java/ql/test-kotlin2/library-tests/data-classes/callees.expected b/java/ql/test-kotlin2/library-tests/data-classes/callees.expected index f16c4ffb435..a0352c3ac72 100644 --- a/java/ql/test-kotlin2/library-tests/data-classes/callees.expected +++ b/java/ql/test-kotlin2/library-tests/data-classes/callees.expected @@ -4,4 +4,4 @@ | dc.kt:0:0:0:0 | new ProtoMapValue(...) | ProtoMapValue.ProtoMapValue | | dc.kt:0:0:0:0 | toString(...) | java.util.Arrays.toString | | dc.kt:0:0:0:0 | toString(...) | java.util.Arrays.toString | -| dc.kt:1:1:1:71 | super(...) | java.lang.Object.Object | +| dc.kt:1:25:1:71 | super(...) | java.lang.Object.Object | From c731251e61a607024f580519612841ff7fb5f797 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 7 Feb 2024 15:32:04 +0000 Subject: [PATCH 081/378] Kotlin 2: Remove an unused diagnostic matcher in library-tests/dataflow/func --- .../library-tests/dataflow/func/kotlinx_coroutines_stubs.kt | 2 -- 1 file changed, 2 deletions(-) diff --git a/java/ql/test-kotlin2/library-tests/dataflow/func/kotlinx_coroutines_stubs.kt b/java/ql/test-kotlin2/library-tests/dataflow/func/kotlinx_coroutines_stubs.kt index 3ef2c70d363..8cb4c31fb25 100644 --- a/java/ql/test-kotlin2/library-tests/dataflow/func/kotlinx_coroutines_stubs.kt +++ b/java/ql/test-kotlin2/library-tests/dataflow/func/kotlinx_coroutines_stubs.kt @@ -31,5 +31,3 @@ public fun CoroutineScope.async( ): Deferred { return null!! } - -// Diagnostic Matches: % Couldn't get owner of KDoc. The comment is extracted without an owner. ...while extracting a file (kotlinx_coroutines_stubs.kt) at %kotlinx_coroutines_stubs.kt:1:1:36:0% From c314cc8b68a2438701a60593fc8030d487791bab Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 7 Feb 2024 15:56:10 +0000 Subject: [PATCH 082/378] Kotlin 2: Accept some location changes in library-tests/exprs/binop.expected --- java/ql/test-kotlin2/library-tests/exprs/binop.expected | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/java/ql/test-kotlin2/library-tests/exprs/binop.expected b/java/ql/test-kotlin2/library-tests/exprs/binop.expected index f69701028d5..83dad7f94b5 100644 --- a/java/ql/test-kotlin2/library-tests/exprs/binop.expected +++ b/java/ql/test-kotlin2/library-tests/exprs/binop.expected @@ -96,8 +96,8 @@ | exprs.kt:141:12:141:20 | ... + ... | exprs.kt:141:12:141:14 | 123 | exprs.kt:141:18:141:20 | 456 | | exprs.kt:167:8:167:16 | ... (value not-equals) ... | exprs.kt:167:8:167:8 | r | exprs.kt:167:13:167:16 | null | | exprs.kt:196:31:196:37 | ... + ... | exprs.kt:196:31:196:32 | getA1(...) | exprs.kt:196:36:196:37 | a2 | -| exprs.kt:211:20:211:29 | ... + ... | exprs.kt:211:20:211:21 | ...!! | exprs.kt:211:28:211:28 | 5 | -| exprs.kt:212:19:212:25 | ... + ... | exprs.kt:212:20:212:21 | ...!! | exprs.kt:212:25:212:25 | 5 | +| exprs.kt:211:19:211:29 | ... + ... | exprs.kt:211:19:211:21 | ...!! | exprs.kt:211:28:211:28 | 5 | +| exprs.kt:212:19:212:25 | ... + ... | exprs.kt:212:19:212:21 | ...!! | exprs.kt:212:25:212:25 | 5 | | exprs.kt:230:12:230:47 | ... (value equals) ... | exprs.kt:230:12:230:27 | notNullPrimitive | exprs.kt:230:32:230:47 | notNullPrimitive | | exprs.kt:231:12:231:48 | ... (value equals) ... | exprs.kt:231:12:231:27 | notNullPrimitive | exprs.kt:231:32:231:48 | nullablePrimitive | | exprs.kt:232:12:232:49 | ... (value equals) ... | exprs.kt:232:12:232:28 | nullablePrimitive | exprs.kt:232:33:232:49 | nullablePrimitive | From 8a93133b81dfb5bc2d9ea583573376aa3de84606 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 7 Feb 2024 16:21:49 +0000 Subject: [PATCH 083/378] Kotlin 2: Accept loc changes in library-tests/exprs/unaryOp.expected --- java/ql/test-kotlin2/library-tests/exprs/unaryOp.expected | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/java/ql/test-kotlin2/library-tests/exprs/unaryOp.expected b/java/ql/test-kotlin2/library-tests/exprs/unaryOp.expected index 03b5d64a7f4..487226320cc 100644 --- a/java/ql/test-kotlin2/library-tests/exprs/unaryOp.expected +++ b/java/ql/test-kotlin2/library-tests/exprs/unaryOp.expected @@ -2,9 +2,9 @@ | exprs.kt:32:15:32:26 | !... | exprs.kt:32:15:32:26 | contains(...) | | exprs.kt:79:15:79:22 | ~... | exprs.kt:79:15:79:16 | lx | | exprs.kt:121:14:121:16 | !... | exprs.kt:121:15:121:16 | b1 | -| exprs.kt:202:19:202:20 | ...!! | exprs.kt:202:18:202:18 | x | -| exprs.kt:211:20:211:21 | ...!! | exprs.kt:211:19:211:19 | s | -| exprs.kt:212:20:212:21 | ...!! | exprs.kt:212:19:212:19 | s | +| exprs.kt:202:18:202:20 | ...!! | exprs.kt:202:18:202:18 | x | +| exprs.kt:211:19:211:21 | ...!! | exprs.kt:211:19:211:19 | s | +| exprs.kt:212:19:212:21 | ...!! | exprs.kt:212:19:212:19 | s | | exprs.kt:286:5:286:6 | -... | exprs.kt:286:6:286:6 | i | | exprs.kt:287:5:287:6 | +... | exprs.kt:287:6:287:6 | i | | exprs.kt:288:5:288:6 | -... | exprs.kt:288:6:288:6 | d | From ef8e6c8805d0fbf3f52e4b24ae1f9c052724840a Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 7 Feb 2024 16:40:40 +0000 Subject: [PATCH 084/378] Kotlin 2: Accept loc changes in library-tests/exprs/funcExprs.expected --- .../library-tests/exprs/funcExprs.expected | 160 +++++++++--------- 1 file changed, 80 insertions(+), 80 deletions(-) diff --git a/java/ql/test-kotlin2/library-tests/exprs/funcExprs.expected b/java/ql/test-kotlin2/library-tests/exprs/funcExprs.expected index b79725a80e3..1328047196c 100644 --- a/java/ql/test-kotlin2/library-tests/exprs/funcExprs.expected +++ b/java/ql/test-kotlin2/library-tests/exprs/funcExprs.expected @@ -75,118 +75,118 @@ lambda_modifiers | samConversion.kt:46:32:46:44 | ...->... | samConversion.kt:46:32:46:44 | invoke | final, override, public | | samConversion.kt:58:30:58:45 | ...->... | samConversion.kt:58:30:58:45 | invoke | final, override, public, suspend | anon_class_member_modifiers -| delegatedProperties.kt:6:24:9:9 | new KProperty0(...) { ... } | delegatedProperties.kt:6:24:9:9 | get | override, public | -| delegatedProperties.kt:6:24:9:9 | new KProperty0(...) { ... } | delegatedProperties.kt:6:24:9:9 | invoke | override, public | +| delegatedProperties.kt:6:27:9:9 | new KProperty0(...) { ... } | delegatedProperties.kt:6:27:9:9 | get | override, public | +| delegatedProperties.kt:6:27:9:9 | new KProperty0(...) { ... } | delegatedProperties.kt:6:27:9:9 | invoke | override, public | | delegatedProperties.kt:6:32:9:9 | new Function0(...) { ... } | delegatedProperties.kt:6:32:9:9 | invoke | final, override, public | -| delegatedProperties.kt:19:31:19:51 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:19:31:19:51 | get | override, public | -| delegatedProperties.kt:19:31:19:51 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:19:31:19:51 | get | override, public | -| delegatedProperties.kt:19:31:19:51 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:19:31:19:51 | invoke | override, public | -| delegatedProperties.kt:19:31:19:51 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:19:31:19:51 | invoke | override, public | -| delegatedProperties.kt:19:31:19:51 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:19:31:19:51 | set | override, public | -| delegatedProperties.kt:19:31:19:51 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:19:31:19:51 | set | override, public | -| delegatedProperties.kt:23:26:23:31 | new KProperty0(...) { ... } | delegatedProperties.kt:23:26:23:31 | get | override, public | -| delegatedProperties.kt:23:26:23:31 | new KProperty0(...) { ... } | delegatedProperties.kt:23:26:23:31 | invoke | override, public | +| delegatedProperties.kt:19:34:19:51 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:19:34:19:51 | get | override, public | +| delegatedProperties.kt:19:34:19:51 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:19:34:19:51 | get | override, public | +| delegatedProperties.kt:19:34:19:51 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:19:34:19:51 | invoke | override, public | +| delegatedProperties.kt:19:34:19:51 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:19:34:19:51 | invoke | override, public | +| delegatedProperties.kt:19:34:19:51 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:19:34:19:51 | set | override, public | +| delegatedProperties.kt:19:34:19:51 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:19:34:19:51 | set | override, public | +| delegatedProperties.kt:23:29:23:31 | new KProperty0(...) { ... } | delegatedProperties.kt:23:29:23:31 | get | override, public | +| delegatedProperties.kt:23:29:23:31 | new KProperty0(...) { ... } | delegatedProperties.kt:23:29:23:31 | invoke | override, public | | delegatedProperties.kt:25:64:31:9 | new ReadWriteProperty(...) { ... } | delegatedProperties.kt:26:13:26:28 | getCurValue | final, public | | delegatedProperties.kt:25:64:31:9 | new ReadWriteProperty(...) { ... } | delegatedProperties.kt:26:13:26:28 | setCurValue | final, public | -| delegatedProperties.kt:25:64:31:9 | new ReadWriteProperty(...) { ... } | delegatedProperties.kt:27:22:27:88 | getValue | override, public | -| delegatedProperties.kt:25:64:31:9 | new ReadWriteProperty(...) { ... } | delegatedProperties.kt:28:22:30:13 | setValue | override, public | -| delegatedProperties.kt:33:27:33:47 | new KProperty0(...) { ... } | delegatedProperties.kt:33:27:33:47 | get | override, public | -| delegatedProperties.kt:33:27:33:47 | new KProperty0(...) { ... } | delegatedProperties.kt:33:27:33:47 | invoke | override, public | -| delegatedProperties.kt:34:28:34:48 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:34:28:34:48 | get | override, public | -| delegatedProperties.kt:34:28:34:48 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:34:28:34:48 | get | override, public | -| delegatedProperties.kt:34:28:34:48 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:34:28:34:48 | invoke | override, public | -| delegatedProperties.kt:34:28:34:48 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:34:28:34:48 | invoke | override, public | -| delegatedProperties.kt:34:28:34:48 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:34:28:34:48 | set | override, public | -| delegatedProperties.kt:34:28:34:48 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:34:28:34:48 | set | override, public | -| delegatedProperties.kt:39:31:39:51 | new KProperty0(...) { ... } | delegatedProperties.kt:39:31:39:51 | get | override, public | -| delegatedProperties.kt:39:31:39:51 | new KProperty0(...) { ... } | delegatedProperties.kt:39:31:39:51 | get | override, public | -| delegatedProperties.kt:39:31:39:51 | new KProperty0(...) { ... } | delegatedProperties.kt:39:31:39:51 | invoke | override, public | -| delegatedProperties.kt:39:31:39:51 | new KProperty0(...) { ... } | delegatedProperties.kt:39:31:39:51 | invoke | override, public | -| delegatedProperties.kt:42:27:42:47 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:42:27:42:47 | get | override, public | -| delegatedProperties.kt:42:27:42:47 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:42:27:42:47 | get | override, public | -| delegatedProperties.kt:42:27:42:47 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:42:27:42:47 | invoke | override, public | -| delegatedProperties.kt:42:27:42:47 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:42:27:42:47 | invoke | override, public | -| delegatedProperties.kt:42:27:42:47 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:42:27:42:47 | set | override, public | -| delegatedProperties.kt:42:27:42:47 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:42:27:42:47 | set | override, public | -| delegatedProperties.kt:66:33:66:50 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:66:33:66:50 | get | override, public | -| delegatedProperties.kt:66:33:66:50 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:66:33:66:50 | get | override, public | -| delegatedProperties.kt:66:33:66:50 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:66:33:66:50 | invoke | override, public | -| delegatedProperties.kt:66:33:66:50 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:66:33:66:50 | invoke | override, public | -| delegatedProperties.kt:66:33:66:50 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:66:33:66:50 | set | override, public | -| delegatedProperties.kt:66:33:66:50 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:66:33:66:50 | set | override, public | +| delegatedProperties.kt:25:64:31:9 | new ReadWriteProperty(...) { ... } | delegatedProperties.kt:27:13:27:88 | getValue | override, public | +| delegatedProperties.kt:25:64:31:9 | new ReadWriteProperty(...) { ... } | delegatedProperties.kt:28:13:30:13 | setValue | override, public | +| delegatedProperties.kt:33:30:33:47 | new KProperty0(...) { ... } | delegatedProperties.kt:33:30:33:47 | get | override, public | +| delegatedProperties.kt:33:30:33:47 | new KProperty0(...) { ... } | delegatedProperties.kt:33:30:33:47 | invoke | override, public | +| delegatedProperties.kt:34:31:34:48 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:34:31:34:48 | get | override, public | +| delegatedProperties.kt:34:31:34:48 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:34:31:34:48 | get | override, public | +| delegatedProperties.kt:34:31:34:48 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:34:31:34:48 | invoke | override, public | +| delegatedProperties.kt:34:31:34:48 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:34:31:34:48 | invoke | override, public | +| delegatedProperties.kt:34:31:34:48 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:34:31:34:48 | set | override, public | +| delegatedProperties.kt:34:31:34:48 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:34:31:34:48 | set | override, public | +| delegatedProperties.kt:39:34:39:51 | new KProperty0(...) { ... } | delegatedProperties.kt:39:34:39:51 | get | override, public | +| delegatedProperties.kt:39:34:39:51 | new KProperty0(...) { ... } | delegatedProperties.kt:39:34:39:51 | get | override, public | +| delegatedProperties.kt:39:34:39:51 | new KProperty0(...) { ... } | delegatedProperties.kt:39:34:39:51 | invoke | override, public | +| delegatedProperties.kt:39:34:39:51 | new KProperty0(...) { ... } | delegatedProperties.kt:39:34:39:51 | invoke | override, public | +| delegatedProperties.kt:42:30:42:47 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:42:30:42:47 | get | override, public | +| delegatedProperties.kt:42:30:42:47 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:42:30:42:47 | get | override, public | +| delegatedProperties.kt:42:30:42:47 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:42:30:42:47 | invoke | override, public | +| delegatedProperties.kt:42:30:42:47 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:42:30:42:47 | invoke | override, public | +| delegatedProperties.kt:42:30:42:47 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:42:30:42:47 | set | override, public | +| delegatedProperties.kt:42:30:42:47 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:42:30:42:47 | set | override, public | | delegatedProperties.kt:66:36:66:50 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:66:36:66:50 | get | override, public | | delegatedProperties.kt:66:36:66:50 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:66:36:66:50 | invoke | override, public | | delegatedProperties.kt:66:36:66:50 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:66:36:66:50 | set | override, public | -| delegatedProperties.kt:67:33:67:53 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:67:33:67:53 | get | override, public | -| delegatedProperties.kt:67:33:67:53 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:67:33:67:53 | get | override, public | -| delegatedProperties.kt:67:33:67:53 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:67:33:67:53 | invoke | override, public | -| delegatedProperties.kt:67:33:67:53 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:67:33:67:53 | invoke | override, public | -| delegatedProperties.kt:67:33:67:53 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:67:33:67:53 | set | override, public | -| delegatedProperties.kt:67:33:67:53 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:67:33:67:53 | set | override, public | +| delegatedProperties.kt:66:36:66:50 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:66:36:66:50 | get | override, public | +| delegatedProperties.kt:66:36:66:50 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:66:36:66:50 | get | override, public | +| delegatedProperties.kt:66:36:66:50 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:66:36:66:50 | invoke | override, public | +| delegatedProperties.kt:66:36:66:50 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:66:36:66:50 | invoke | override, public | +| delegatedProperties.kt:66:36:66:50 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:66:36:66:50 | set | override, public | +| delegatedProperties.kt:66:36:66:50 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:66:36:66:50 | set | override, public | +| delegatedProperties.kt:67:36:67:53 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:67:36:67:53 | get | override, public | +| delegatedProperties.kt:67:36:67:53 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:67:36:67:53 | get | override, public | | delegatedProperties.kt:67:36:67:53 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:67:36:67:53 | get | override, public | | delegatedProperties.kt:67:36:67:53 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:67:36:67:53 | invoke | override, public | +| delegatedProperties.kt:67:36:67:53 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:67:36:67:53 | invoke | override, public | +| delegatedProperties.kt:67:36:67:53 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:67:36:67:53 | invoke | override, public | +| delegatedProperties.kt:67:36:67:53 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:67:36:67:53 | set | override, public | +| delegatedProperties.kt:67:36:67:53 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:67:36:67:53 | set | override, public | | delegatedProperties.kt:67:36:67:53 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:67:36:67:53 | set | override, public | -| delegatedProperties.kt:69:36:69:56 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:69:36:69:56 | get | override, public | -| delegatedProperties.kt:69:36:69:56 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:69:36:69:56 | get | override, public | -| delegatedProperties.kt:69:36:69:56 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:69:36:69:56 | invoke | override, public | -| delegatedProperties.kt:69:36:69:56 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:69:36:69:56 | invoke | override, public | -| delegatedProperties.kt:69:36:69:56 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:69:36:69:56 | set | override, public | -| delegatedProperties.kt:69:36:69:56 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:69:36:69:56 | set | override, public | | delegatedProperties.kt:69:39:69:56 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:69:39:69:56 | get | override, public | | delegatedProperties.kt:69:39:69:56 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:69:39:69:56 | invoke | override, public | | delegatedProperties.kt:69:39:69:56 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:69:39:69:56 | set | override, public | -| delegatedProperties.kt:70:36:70:59 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:70:36:70:59 | get | override, public | -| delegatedProperties.kt:70:36:70:59 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:70:36:70:59 | get | override, public | -| delegatedProperties.kt:70:36:70:59 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:70:36:70:59 | invoke | override, public | -| delegatedProperties.kt:70:36:70:59 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:70:36:70:59 | invoke | override, public | -| delegatedProperties.kt:70:36:70:59 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:70:36:70:59 | set | override, public | -| delegatedProperties.kt:70:36:70:59 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:70:36:70:59 | set | override, public | +| delegatedProperties.kt:69:39:69:56 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:69:39:69:56 | get | override, public | +| delegatedProperties.kt:69:39:69:56 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:69:39:69:56 | get | override, public | +| delegatedProperties.kt:69:39:69:56 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:69:39:69:56 | invoke | override, public | +| delegatedProperties.kt:69:39:69:56 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:69:39:69:56 | invoke | override, public | +| delegatedProperties.kt:69:39:69:56 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:69:39:69:56 | set | override, public | +| delegatedProperties.kt:69:39:69:56 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:69:39:69:56 | set | override, public | +| delegatedProperties.kt:70:39:70:59 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:70:39:70:59 | get | override, public | +| delegatedProperties.kt:70:39:70:59 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:70:39:70:59 | get | override, public | | delegatedProperties.kt:70:39:70:59 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:70:39:70:59 | get | override, public | | delegatedProperties.kt:70:39:70:59 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:70:39:70:59 | invoke | override, public | +| delegatedProperties.kt:70:39:70:59 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:70:39:70:59 | invoke | override, public | +| delegatedProperties.kt:70:39:70:59 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:70:39:70:59 | invoke | override, public | +| delegatedProperties.kt:70:39:70:59 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:70:39:70:59 | set | override, public | +| delegatedProperties.kt:70:39:70:59 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:70:39:70:59 | set | override, public | | delegatedProperties.kt:70:39:70:59 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:70:39:70:59 | set | override, public | -| delegatedProperties.kt:72:36:72:56 | new KProperty1(...) { ... } | delegatedProperties.kt:72:36:72:56 | get | override, public | -| delegatedProperties.kt:72:36:72:56 | new KProperty1(...) { ... } | delegatedProperties.kt:72:36:72:56 | invoke | override, public | | delegatedProperties.kt:72:39:72:56 | new KProperty0(...) { ... } | delegatedProperties.kt:72:39:72:56 | get | override, public | | delegatedProperties.kt:72:39:72:56 | new KProperty0(...) { ... } | delegatedProperties.kt:72:39:72:56 | invoke | override, public | -| delegatedProperties.kt:73:36:73:56 | new KProperty1(...) { ... } | delegatedProperties.kt:73:36:73:56 | get | override, public | -| delegatedProperties.kt:73:36:73:56 | new KProperty1(...) { ... } | delegatedProperties.kt:73:36:73:56 | invoke | override, public | +| delegatedProperties.kt:72:39:72:56 | new KProperty1(...) { ... } | delegatedProperties.kt:72:39:72:56 | get | override, public | +| delegatedProperties.kt:72:39:72:56 | new KProperty1(...) { ... } | delegatedProperties.kt:72:39:72:56 | invoke | override, public | | delegatedProperties.kt:73:39:73:56 | new KProperty1(...) { ... } | delegatedProperties.kt:73:39:73:56 | get | override, public | | delegatedProperties.kt:73:39:73:56 | new KProperty1(...) { ... } | delegatedProperties.kt:73:39:73:56 | invoke | override, public | -| delegatedProperties.kt:75:39:75:78 | new KProperty1(...) { ... } | delegatedProperties.kt:75:39:75:78 | get | override, public | -| delegatedProperties.kt:75:39:75:78 | new KProperty1(...) { ... } | delegatedProperties.kt:75:39:75:78 | invoke | override, public | +| delegatedProperties.kt:73:39:73:56 | new KProperty1(...) { ... } | delegatedProperties.kt:73:39:73:56 | get | override, public | +| delegatedProperties.kt:73:39:73:56 | new KProperty1(...) { ... } | delegatedProperties.kt:73:39:73:56 | invoke | override, public | | delegatedProperties.kt:75:42:75:78 | new KProperty0(...) { ... } | delegatedProperties.kt:75:42:75:78 | get | override, public | | delegatedProperties.kt:75:42:75:78 | new KProperty0(...) { ... } | delegatedProperties.kt:75:42:75:78 | invoke | override, public | -| delegatedProperties.kt:77:34:77:49 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:77:34:77:49 | get | override, public | -| delegatedProperties.kt:77:34:77:49 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:77:34:77:49 | get | override, public | -| delegatedProperties.kt:77:34:77:49 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:77:34:77:49 | invoke | override, public | -| delegatedProperties.kt:77:34:77:49 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:77:34:77:49 | invoke | override, public | -| delegatedProperties.kt:77:34:77:49 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:77:34:77:49 | set | override, public | -| delegatedProperties.kt:77:34:77:49 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:77:34:77:49 | set | override, public | +| delegatedProperties.kt:75:42:75:78 | new KProperty1(...) { ... } | delegatedProperties.kt:75:42:75:78 | get | override, public | +| delegatedProperties.kt:75:42:75:78 | new KProperty1(...) { ... } | delegatedProperties.kt:75:42:75:78 | invoke | override, public | | delegatedProperties.kt:77:37:77:49 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:77:37:77:49 | get | override, public | | delegatedProperties.kt:77:37:77:49 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:77:37:77:49 | invoke | override, public | | delegatedProperties.kt:77:37:77:49 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:77:37:77:49 | set | override, public | -| delegatedProperties.kt:79:18:79:38 | new KProperty1(...) { ... } | delegatedProperties.kt:79:18:79:38 | get | override, public | -| delegatedProperties.kt:79:18:79:38 | new KProperty1(...) { ... } | delegatedProperties.kt:79:18:79:38 | invoke | override, public | +| delegatedProperties.kt:77:37:77:49 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:77:37:77:49 | get | override, public | +| delegatedProperties.kt:77:37:77:49 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:77:37:77:49 | get | override, public | +| delegatedProperties.kt:77:37:77:49 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:77:37:77:49 | invoke | override, public | +| delegatedProperties.kt:77:37:77:49 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:77:37:77:49 | invoke | override, public | +| delegatedProperties.kt:77:37:77:49 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:77:37:77:49 | set | override, public | +| delegatedProperties.kt:77:37:77:49 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:77:37:77:49 | set | override, public | | delegatedProperties.kt:79:21:79:38 | new KProperty0(...) { ... } | delegatedProperties.kt:79:21:79:38 | get | override, public | | delegatedProperties.kt:79:21:79:38 | new KProperty0(...) { ... } | delegatedProperties.kt:79:21:79:38 | invoke | override, public | -| delegatedProperties.kt:82:37:82:54 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:82:37:82:54 | get | override, public | -| delegatedProperties.kt:82:37:82:54 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:82:37:82:54 | get | override, public | -| delegatedProperties.kt:82:37:82:54 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:82:37:82:54 | invoke | override, public | -| delegatedProperties.kt:82:37:82:54 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:82:37:82:54 | invoke | override, public | -| delegatedProperties.kt:82:37:82:54 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:82:37:82:54 | set | override, public | -| delegatedProperties.kt:82:37:82:54 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:82:37:82:54 | set | override, public | +| delegatedProperties.kt:79:21:79:38 | new KProperty1(...) { ... } | delegatedProperties.kt:79:21:79:38 | get | override, public | +| delegatedProperties.kt:79:21:79:38 | new KProperty1(...) { ... } | delegatedProperties.kt:79:21:79:38 | invoke | override, public | +| delegatedProperties.kt:82:40:82:54 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:82:40:82:54 | get | override, public | +| delegatedProperties.kt:82:40:82:54 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:82:40:82:54 | get | override, public | | delegatedProperties.kt:82:40:82:54 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:82:40:82:54 | get | override, public | | delegatedProperties.kt:82:40:82:54 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:82:40:82:54 | invoke | override, public | +| delegatedProperties.kt:82:40:82:54 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:82:40:82:54 | invoke | override, public | +| delegatedProperties.kt:82:40:82:54 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:82:40:82:54 | invoke | override, public | +| delegatedProperties.kt:82:40:82:54 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:82:40:82:54 | set | override, public | +| delegatedProperties.kt:82:40:82:54 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:82:40:82:54 | set | override, public | | delegatedProperties.kt:82:40:82:54 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:82:40:82:54 | set | override, public | -| delegatedProperties.kt:87:31:87:46 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:87:31:87:46 | get | override, public | -| delegatedProperties.kt:87:31:87:46 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:87:31:87:46 | get | override, public | -| delegatedProperties.kt:87:31:87:46 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:87:31:87:46 | invoke | override, public | -| delegatedProperties.kt:87:31:87:46 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:87:31:87:46 | invoke | override, public | -| delegatedProperties.kt:87:31:87:46 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:87:31:87:46 | set | override, public | -| delegatedProperties.kt:87:31:87:46 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:87:31:87:46 | set | override, public | | delegatedProperties.kt:87:34:87:46 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:87:34:87:46 | get | override, public | | delegatedProperties.kt:87:34:87:46 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:87:34:87:46 | invoke | override, public | | delegatedProperties.kt:87:34:87:46 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:87:34:87:46 | set | override, public | +| delegatedProperties.kt:87:34:87:46 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:87:34:87:46 | get | override, public | +| delegatedProperties.kt:87:34:87:46 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:87:34:87:46 | get | override, public | +| delegatedProperties.kt:87:34:87:46 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:87:34:87:46 | invoke | override, public | +| delegatedProperties.kt:87:34:87:46 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:87:34:87:46 | invoke | override, public | +| delegatedProperties.kt:87:34:87:46 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:87:34:87:46 | set | override, public | +| delegatedProperties.kt:87:34:87:46 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:87:34:87:46 | set | override, public | | exprs.kt:195:16:197:9 | new Interface1(...) { ... } | exprs.kt:196:13:196:49 | getA3 | final, public | | funcExprs.kt:22:26:22:33 | new Function0(...) { ... } | funcExprs.kt:22:26:22:33 | invoke | final, override, public | | funcExprs.kt:23:26:23:33 | new Function0(...) { ... } | funcExprs.kt:23:26:23:33 | invoke | final, override, public | From 1c7e6e769beb0b7ecb160853d11f3256a3a43e87 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Wed, 7 Feb 2024 15:51:11 +0100 Subject: [PATCH 085/378] C#: Try resolve relative paths in line mappings --- .../Entities/NonGeneratedSourceLocation.cs | 25 ++++++++++++++++++- .../LineOrSpanDirective.cs | 6 +++-- .../PragmaChecksumDirective.cs | 3 ++- ...s_TestArea_Views_Shared_Test18.cshtml.g.cs | 6 ++--- ...as_TestArea_Views_Test4_Test17.cshtml.g.cs | 6 ++--- .../MyAreas_Test4_Test22.cshtml.g.cs | 6 ++--- .../Generated/Pages_Shared_Test21.cshtml.g.cs | 6 ++--- .../XSSRazorPages/Generated/Template.g | 6 ++--- .../Views_Custom2_Test16.cshtml.g.cs | 6 ++--- .../Views_Custom_Test3_Test15.cshtml.g.cs | 6 ++--- .../Generated/Views_Other_Test13.cshtml.g.cs | 6 ++--- .../Generated/Views_Other_Test5.cshtml.g.cs | 6 ++--- .../Generated/Views_Other_Test6.cshtml.g.cs | 6 ++--- .../Generated/Views_Other_Test8.cshtml.g.cs | 6 ++--- .../Generated/Views_Other_Test9.cshtml.g.cs | 6 ++--- .../Generated/Views_Shared_Test12.cshtml.g.cs | 6 ++--- .../Generated/Views_Shared_Test14.cshtml.g.cs | 6 ++--- .../Generated/Views_Shared_Test19.cshtml.g.cs | 6 ++--- .../Generated/Views_Shared_Test2.cshtml.g.cs | 6 ++--- .../Generated/Views_Shared_Test23.cshtml.g.cs | 6 ++--- .../Generated/Views_Shared_Test3.cshtml.g.cs | 6 ++--- .../Generated/Views_Test2_Test1.cshtml.g.cs | 6 ++--- .../Generated/Views_Test2_Test10.cshtml.g.cs | 6 ++--- .../Generated/Views_Test2_Test11.cshtml.g.cs | 6 ++--- .../Generated/Views_Test2_Test12.cshtml.g.cs | 6 ++--- .../Generated/Views_Test2_Test14.cshtml.g.cs | 6 ++--- .../Generated/Views_Test2_Test2.cshtml.g.cs | 6 ++--- .../Generated/Views_Test2_Test3.cshtml.g.cs | 6 ++--- .../Generated/Views_Test4_Test20.cshtml.g.cs | 6 ++--- .../Generated/Views_Test_Test1.cshtml.g.cs | 6 ++--- .../Generated/Views_Test_Test3.cshtml.g.cs | 6 ++--- .../Generated/Views_Test_Test4.cshtml.g.cs | 6 ++--- .../Generated/Views_Test_Test7.cshtml.g.cs | 6 ++--- 33 files changed, 120 insertions(+), 94 deletions(-) diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/NonGeneratedSourceLocation.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/NonGeneratedSourceLocation.cs index e3e3c0c6ae4..a3b7877af4e 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/NonGeneratedSourceLocation.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/NonGeneratedSourceLocation.cs @@ -1,5 +1,7 @@ +using System; using System.IO; using Microsoft.CodeAnalysis; +using Semmle.Util.Logging; namespace Semmle.Extraction.CSharp.Entities { @@ -25,7 +27,8 @@ namespace Semmle.Extraction.CSharp.Entities var mapped = Symbol.GetMappedLineSpan(); if (mapped.HasMappedPath && mapped.IsValid) { - var mappedLoc = Create(Context, Location.Create(mapped.Path, default, mapped.Span)); + var path = TryAdjustRelativeMappedFilePath(mapped.Path, Position.Path, Context.Extractor.Logger); + var mappedLoc = Create(Context, Location.Create(path, default, mapped.Span)); trapFile.locations_mapped(this, mappedLoc); } @@ -61,5 +64,25 @@ namespace Semmle.Extraction.CSharp.Entities public override NonGeneratedSourceLocation Create(Context cx, Location init) => new NonGeneratedSourceLocation(cx, init); } + + public static string TryAdjustRelativeMappedFilePath(string mappedToPath, string mappedFromPath, ILogger logger) + { + if (!Path.IsPathRooted(mappedToPath)) + { + try + { + var fullPath = Path.GetFullPath(Path.Combine(Path.GetDirectoryName(mappedFromPath)!, mappedToPath)); + logger.LogDebug($"Found relative path in line mapping: '{mappedToPath}', interpreting it as '{fullPath}'"); + + mappedToPath = fullPath; + } + catch (Exception e) + { + logger.LogDebug($"Failed to compute absolute path for relative path in line mapping: '{mappedToPath}': {e}"); + } + } + + return mappedToPath; + } } } diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/PreprocessorDirectives/LineOrSpanDirective.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/PreprocessorDirectives/LineOrSpanDirective.cs index 9e8c4c557dc..6d236220331 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/PreprocessorDirectives/LineOrSpanDirective.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/PreprocessorDirectives/LineOrSpanDirective.cs @@ -25,9 +25,11 @@ namespace Semmle.Extraction.CSharp.Entities { trapFile.directive_lines(this, kind); - if (!string.IsNullOrWhiteSpace(Symbol.File.ValueText)) + var path = Symbol.File.ValueText; + if (!string.IsNullOrWhiteSpace(path)) { - var file = File.Create(Context, Symbol.File.ValueText); + path = NonGeneratedSourceLocation.TryAdjustRelativeMappedFilePath(path, Symbol.SyntaxTree.FilePath, Context.Extractor.Logger); + var file = File.Create(Context, path); trapFile.directive_line_file(this, file); } } diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/PreprocessorDirectives/PragmaChecksumDirective.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/PreprocessorDirectives/PragmaChecksumDirective.cs index 7706118cb6f..3e0c468d85b 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/PreprocessorDirectives/PragmaChecksumDirective.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/PreprocessorDirectives/PragmaChecksumDirective.cs @@ -12,7 +12,8 @@ namespace Semmle.Extraction.CSharp.Entities protected override void PopulatePreprocessor(TextWriter trapFile) { - var file = File.Create(Context, Symbol.File.ValueText); + var path = NonGeneratedSourceLocation.TryAdjustRelativeMappedFilePath(Symbol.File.ValueText, Symbol.SyntaxTree.FilePath, Context.Extractor.Logger); + var file = File.Create(Context, path); trapFile.pragma_checksums(this, file, Symbol.Guid.ToString(), Symbol.Bytes.ToString()); } diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Areas_TestArea_Views_Shared_Test18.cshtml.g.cs b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Areas_TestArea_Views_Shared_Test18.cshtml.g.cs index eecb00361d6..52b0510994e 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Areas_TestArea_Views_Shared_Test18.cshtml.g.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Areas_TestArea_Views_Shared_Test18.cshtml.g.cs @@ -24,7 +24,7 @@ using test; #pragma warning disable 1998 public async override global::System.Threading.Tasks.Task ExecuteAsync() { -#line 6 "Areas/TestArea/Views/Shared/Test18.cshtml" +#line 6 "../Areas/TestArea/Views/Shared/Test18.cshtml" if (Model != null) { @@ -33,7 +33,7 @@ using test; #nullable disable WriteLiteral("

    Hello \""); #nullable restore -#line 8 "Areas/TestArea/Views/Shared/Test18.cshtml" +#line 8 "../Areas/TestArea/Views/Shared/Test18.cshtml" Write(Html.Raw(Model.Name)); #line default @@ -41,7 +41,7 @@ Write(Html.Raw(Model.Name)); #nullable disable WriteLiteral("\"

    \n"); #nullable restore -#line 9 "Areas/TestArea/Views/Shared/Test18.cshtml" +#line 9 "../Areas/TestArea/Views/Shared/Test18.cshtml" } #line default diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Areas_TestArea_Views_Test4_Test17.cshtml.g.cs b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Areas_TestArea_Views_Test4_Test17.cshtml.g.cs index ee7ee811920..5d33dbbed54 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Areas_TestArea_Views_Test4_Test17.cshtml.g.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Areas_TestArea_Views_Test4_Test17.cshtml.g.cs @@ -24,7 +24,7 @@ using test; #pragma warning disable 1998 public async override global::System.Threading.Tasks.Task ExecuteAsync() { -#line 6 "Areas/TestArea/Views/Test4/Test17.cshtml" +#line 6 "../Areas/TestArea/Views/Test4/Test17.cshtml" if (Model != null) { @@ -33,7 +33,7 @@ using test; #nullable disable WriteLiteral("

    Hello \""); #nullable restore -#line 8 "Areas/TestArea/Views/Test4/Test17.cshtml" +#line 8 "../Areas/TestArea/Views/Test4/Test17.cshtml" Write(Html.Raw(Model.Name)); #line default @@ -41,7 +41,7 @@ Write(Html.Raw(Model.Name)); #nullable disable WriteLiteral("\"

    \n"); #nullable restore -#line 9 "Areas/TestArea/Views/Test4/Test17.cshtml" +#line 9 "../Areas/TestArea/Views/Test4/Test17.cshtml" } #line default diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/MyAreas_Test4_Test22.cshtml.g.cs b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/MyAreas_Test4_Test22.cshtml.g.cs index f8b2ecde53a..6624ae0ebf3 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/MyAreas_Test4_Test22.cshtml.g.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/MyAreas_Test4_Test22.cshtml.g.cs @@ -24,7 +24,7 @@ using test; #pragma warning disable 1998 public async override global::System.Threading.Tasks.Task ExecuteAsync() { -#line 6 "MyAreas/Test4/Test22.cshtml" +#line 6 "../MyAreas/Test4/Test22.cshtml" if (Model != null) { @@ -33,7 +33,7 @@ using test; #nullable disable WriteLiteral("

    Hello \""); #nullable restore -#line 8 "MyAreas/Test4/Test22.cshtml" +#line 8 "../MyAreas/Test4/Test22.cshtml" Write(Html.Raw(Model.Name)); #line default @@ -41,7 +41,7 @@ Write(Html.Raw(Model.Name)); #nullable disable WriteLiteral("\"

    \n"); #nullable restore -#line 9 "MyAreas/Test4/Test22.cshtml" +#line 9 "../MyAreas/Test4/Test22.cshtml" } #line default diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Pages_Shared_Test21.cshtml.g.cs b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Pages_Shared_Test21.cshtml.g.cs index 483df5af705..c75acc2aaa9 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Pages_Shared_Test21.cshtml.g.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Pages_Shared_Test21.cshtml.g.cs @@ -24,7 +24,7 @@ using test; #pragma warning disable 1998 public async override global::System.Threading.Tasks.Task ExecuteAsync() { -#line 6 "Pages/Shared/Test21.cshtml" +#line 6 "../Pages/Shared/Test21.cshtml" if (Model != null) { @@ -33,7 +33,7 @@ using test; #nullable disable WriteLiteral("

    Hello \""); #nullable restore -#line 8 "Pages/Shared/Test21.cshtml" +#line 8 "../Pages/Shared/Test21.cshtml" Write(Html.Raw(Model.Name)); #line default @@ -41,7 +41,7 @@ Write(Html.Raw(Model.Name)); #nullable disable WriteLiteral("\"

    \n"); #nullable restore -#line 9 "Pages/Shared/Test21.cshtml" +#line 9 "../Pages/Shared/Test21.cshtml" } #line default diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Template.g b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Template.g index 1f283c9e3a0..0fa1767db71 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Template.g +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Template.g @@ -24,7 +24,7 @@ using test; #pragma warning disable 1998 public async override global::System.Threading.Tasks.Task ExecuteAsync() { -#line 6 "$PATHSLASH" +#line 6 "../$PATHSLASH" if (Model != null) { @@ -33,7 +33,7 @@ using test; #nullable disable WriteLiteral("

    Hello \""); #nullable restore -#line 8 "$PATHSLASH" +#line 8 "../$PATHSLASH" Write(Html.Raw(Model.Name)); #line default @@ -41,7 +41,7 @@ Write(Html.Raw(Model.Name)); #nullable disable WriteLiteral("\"

    \n"); #nullable restore -#line 9 "$PATHSLASH" +#line 9 "../$PATHSLASH" } #line default diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Custom2_Test16.cshtml.g.cs b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Custom2_Test16.cshtml.g.cs index c6048503384..82ed6254956 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Custom2_Test16.cshtml.g.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Custom2_Test16.cshtml.g.cs @@ -24,7 +24,7 @@ using test; #pragma warning disable 1998 public async override global::System.Threading.Tasks.Task ExecuteAsync() { -#line 6 "Views/Custom2/Test16.cshtml" +#line 6 "../Views/Custom2/Test16.cshtml" if (Model != null) { @@ -33,7 +33,7 @@ using test; #nullable disable WriteLiteral("

    Hello \""); #nullable restore -#line 8 "Views/Custom2/Test16.cshtml" +#line 8 "../Views/Custom2/Test16.cshtml" Write(Html.Raw(Model.Name)); #line default @@ -41,7 +41,7 @@ Write(Html.Raw(Model.Name)); #nullable disable WriteLiteral("\"

    \n"); #nullable restore -#line 9 "Views/Custom2/Test16.cshtml" +#line 9 "../Views/Custom2/Test16.cshtml" } #line default diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Custom_Test3_Test15.cshtml.g.cs b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Custom_Test3_Test15.cshtml.g.cs index 00edb1f4b8c..eb366a727b6 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Custom_Test3_Test15.cshtml.g.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Custom_Test3_Test15.cshtml.g.cs @@ -24,7 +24,7 @@ using test; #pragma warning disable 1998 public async override global::System.Threading.Tasks.Task ExecuteAsync() { -#line 6 "Views/Custom/Test3/Test15.cshtml" +#line 6 "../Views/Custom/Test3/Test15.cshtml" if (Model != null) { @@ -33,7 +33,7 @@ using test; #nullable disable WriteLiteral("

    Hello \""); #nullable restore -#line 8 "Views/Custom/Test3/Test15.cshtml" +#line 8 "../Views/Custom/Test3/Test15.cshtml" Write(Html.Raw(Model.Name)); #line default @@ -41,7 +41,7 @@ Write(Html.Raw(Model.Name)); #nullable disable WriteLiteral("\"

    \n"); #nullable restore -#line 9 "Views/Custom/Test3/Test15.cshtml" +#line 9 "../Views/Custom/Test3/Test15.cshtml" } #line default diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Other_Test13.cshtml.g.cs b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Other_Test13.cshtml.g.cs index ad153243a9d..240733439bc 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Other_Test13.cshtml.g.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Other_Test13.cshtml.g.cs @@ -24,7 +24,7 @@ using test; #pragma warning disable 1998 public async override global::System.Threading.Tasks.Task ExecuteAsync() { -#line 6 "Views/Other/Test13.cshtml" +#line 6 "../Views/Other/Test13.cshtml" if (Model != null) { @@ -33,7 +33,7 @@ using test; #nullable disable WriteLiteral("

    Hello \""); #nullable restore -#line 8 "Views/Other/Test13.cshtml" +#line 8 "../Views/Other/Test13.cshtml" Write(Html.Raw(Model.Name)); #line default @@ -41,7 +41,7 @@ Write(Html.Raw(Model.Name)); #nullable disable WriteLiteral("\"

    \n"); #nullable restore -#line 9 "Views/Other/Test13.cshtml" +#line 9 "../Views/Other/Test13.cshtml" } #line default diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Other_Test5.cshtml.g.cs b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Other_Test5.cshtml.g.cs index 8b6dcfa243b..f51631b536a 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Other_Test5.cshtml.g.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Other_Test5.cshtml.g.cs @@ -24,7 +24,7 @@ using test; #pragma warning disable 1998 public async override global::System.Threading.Tasks.Task ExecuteAsync() { -#line 6 "Views/Other/Test5.cshtml" +#line 6 "../Views/Other/Test5.cshtml" if (Model != null) { @@ -33,7 +33,7 @@ using test; #nullable disable WriteLiteral("

    Hello \""); #nullable restore -#line 8 "Views/Other/Test5.cshtml" +#line 8 "../Views/Other/Test5.cshtml" Write(Html.Raw(Model.Name)); #line default @@ -41,7 +41,7 @@ Write(Html.Raw(Model.Name)); #nullable disable WriteLiteral("\"

    \n"); #nullable restore -#line 9 "Views/Other/Test5.cshtml" +#line 9 "../Views/Other/Test5.cshtml" } #line default diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Other_Test6.cshtml.g.cs b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Other_Test6.cshtml.g.cs index 58aa308379b..fbbd4e99798 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Other_Test6.cshtml.g.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Other_Test6.cshtml.g.cs @@ -24,7 +24,7 @@ using test; #pragma warning disable 1998 public async override global::System.Threading.Tasks.Task ExecuteAsync() { -#line 6 "Views/Other/Test6.cshtml" +#line 6 "../Views/Other/Test6.cshtml" if (Model != null) { @@ -33,7 +33,7 @@ using test; #nullable disable WriteLiteral("

    Hello \""); #nullable restore -#line 8 "Views/Other/Test6.cshtml" +#line 8 "../Views/Other/Test6.cshtml" Write(Html.Raw(Model.Name)); #line default @@ -41,7 +41,7 @@ Write(Html.Raw(Model.Name)); #nullable disable WriteLiteral("\"

    \n"); #nullable restore -#line 9 "Views/Other/Test6.cshtml" +#line 9 "../Views/Other/Test6.cshtml" } #line default diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Other_Test8.cshtml.g.cs b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Other_Test8.cshtml.g.cs index 799e7a84768..c3643f4dd2f 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Other_Test8.cshtml.g.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Other_Test8.cshtml.g.cs @@ -24,7 +24,7 @@ using test; #pragma warning disable 1998 public async override global::System.Threading.Tasks.Task ExecuteAsync() { -#line 6 "Views/Other/Test8.cshtml" +#line 6 "../Views/Other/Test8.cshtml" if (Model != null) { @@ -33,7 +33,7 @@ using test; #nullable disable WriteLiteral("

    Hello \""); #nullable restore -#line 8 "Views/Other/Test8.cshtml" +#line 8 "../Views/Other/Test8.cshtml" Write(Html.Raw(Model.Name)); #line default @@ -41,7 +41,7 @@ Write(Html.Raw(Model.Name)); #nullable disable WriteLiteral("\"

    \n"); #nullable restore -#line 9 "Views/Other/Test8.cshtml" +#line 9 "../Views/Other/Test8.cshtml" } #line default diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Other_Test9.cshtml.g.cs b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Other_Test9.cshtml.g.cs index 9c1199c2ee3..0a839142450 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Other_Test9.cshtml.g.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Other_Test9.cshtml.g.cs @@ -24,7 +24,7 @@ using test; #pragma warning disable 1998 public async override global::System.Threading.Tasks.Task ExecuteAsync() { -#line 6 "Views/Other/Test9.cshtml" +#line 6 "../Views/Other/Test9.cshtml" if (Model != null) { @@ -33,7 +33,7 @@ using test; #nullable disable WriteLiteral("

    Hello \""); #nullable restore -#line 8 "Views/Other/Test9.cshtml" +#line 8 "../Views/Other/Test9.cshtml" Write(Html.Raw(Model.Name)); #line default @@ -41,7 +41,7 @@ Write(Html.Raw(Model.Name)); #nullable disable WriteLiteral("\"

    \n"); #nullable restore -#line 9 "Views/Other/Test9.cshtml" +#line 9 "../Views/Other/Test9.cshtml" } #line default diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Shared_Test12.cshtml.g.cs b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Shared_Test12.cshtml.g.cs index 6292047ecec..d68e6cfb707 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Shared_Test12.cshtml.g.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Shared_Test12.cshtml.g.cs @@ -24,7 +24,7 @@ using test; #pragma warning disable 1998 public async override global::System.Threading.Tasks.Task ExecuteAsync() { -#line 6 "Views/Shared/Test12.cshtml" +#line 6 "../Views/Shared/Test12.cshtml" if (Model != null) { @@ -33,7 +33,7 @@ using test; #nullable disable WriteLiteral("

    Hello \""); #nullable restore -#line 8 "Views/Shared/Test12.cshtml" +#line 8 "../Views/Shared/Test12.cshtml" Write(Html.Raw(Model.Name)); #line default @@ -41,7 +41,7 @@ Write(Html.Raw(Model.Name)); #nullable disable WriteLiteral("\"

    \n"); #nullable restore -#line 9 "Views/Shared/Test12.cshtml" +#line 9 "../Views/Shared/Test12.cshtml" } #line default diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Shared_Test14.cshtml.g.cs b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Shared_Test14.cshtml.g.cs index 93cb009780f..d42efb18be2 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Shared_Test14.cshtml.g.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Shared_Test14.cshtml.g.cs @@ -24,7 +24,7 @@ using test; #pragma warning disable 1998 public async override global::System.Threading.Tasks.Task ExecuteAsync() { -#line 6 "Views/Shared/Test14.cshtml" +#line 6 "../Views/Shared/Test14.cshtml" if (Model != null) { @@ -33,7 +33,7 @@ using test; #nullable disable WriteLiteral("

    Hello \""); #nullable restore -#line 8 "Views/Shared/Test14.cshtml" +#line 8 "../Views/Shared/Test14.cshtml" Write(Html.Raw(Model.Name)); #line default @@ -41,7 +41,7 @@ Write(Html.Raw(Model.Name)); #nullable disable WriteLiteral("\"

    \n"); #nullable restore -#line 9 "Views/Shared/Test14.cshtml" +#line 9 "../Views/Shared/Test14.cshtml" } #line default diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Shared_Test19.cshtml.g.cs b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Shared_Test19.cshtml.g.cs index daacf56a1f1..cd20980fb4d 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Shared_Test19.cshtml.g.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Shared_Test19.cshtml.g.cs @@ -24,7 +24,7 @@ using test; #pragma warning disable 1998 public async override global::System.Threading.Tasks.Task ExecuteAsync() { -#line 6 "Views/Shared/Test19.cshtml" +#line 6 "../Views/Shared/Test19.cshtml" if (Model != null) { @@ -33,7 +33,7 @@ using test; #nullable disable WriteLiteral("

    Hello \""); #nullable restore -#line 8 "Views/Shared/Test19.cshtml" +#line 8 "../Views/Shared/Test19.cshtml" Write(Html.Raw(Model.Name)); #line default @@ -41,7 +41,7 @@ Write(Html.Raw(Model.Name)); #nullable disable WriteLiteral("\"

    \n"); #nullable restore -#line 9 "Views/Shared/Test19.cshtml" +#line 9 "../Views/Shared/Test19.cshtml" } #line default diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Shared_Test2.cshtml.g.cs b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Shared_Test2.cshtml.g.cs index c20f1456c06..0fbdbfd2f0f 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Shared_Test2.cshtml.g.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Shared_Test2.cshtml.g.cs @@ -24,7 +24,7 @@ using test; #pragma warning disable 1998 public async override global::System.Threading.Tasks.Task ExecuteAsync() { -#line 6 "Views/Shared/Test2.cshtml" +#line 6 "../Views/Shared/Test2.cshtml" if (Model != null) { @@ -33,7 +33,7 @@ using test; #nullable disable WriteLiteral("

    Hello \""); #nullable restore -#line 8 "Views/Shared/Test2.cshtml" +#line 8 "../Views/Shared/Test2.cshtml" Write(Html.Raw(Model.Name)); #line default @@ -41,7 +41,7 @@ Write(Html.Raw(Model.Name)); #nullable disable WriteLiteral("\"

    \n"); #nullable restore -#line 9 "Views/Shared/Test2.cshtml" +#line 9 "../Views/Shared/Test2.cshtml" } #line default diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Shared_Test23.cshtml.g.cs b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Shared_Test23.cshtml.g.cs index 919c874680b..218968593b9 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Shared_Test23.cshtml.g.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Shared_Test23.cshtml.g.cs @@ -24,7 +24,7 @@ using test; #pragma warning disable 1998 public async override global::System.Threading.Tasks.Task ExecuteAsync() { -#line 6 "Views/Shared/Test23.cshtml" +#line 6 "../Views/Shared/Test23.cshtml" if (Model != null) { @@ -33,7 +33,7 @@ using test; #nullable disable WriteLiteral("

    Hello \""); #nullable restore -#line 8 "Views/Shared/Test23.cshtml" +#line 8 "../Views/Shared/Test23.cshtml" Write(Html.Raw(Model.Name)); #line default @@ -41,7 +41,7 @@ Write(Html.Raw(Model.Name)); #nullable disable WriteLiteral("\"

    \n"); #nullable restore -#line 9 "Views/Shared/Test23.cshtml" +#line 9 "../Views/Shared/Test23.cshtml" } #line default diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Shared_Test3.cshtml.g.cs b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Shared_Test3.cshtml.g.cs index 7bd08d8665b..ea4626788bb 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Shared_Test3.cshtml.g.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Shared_Test3.cshtml.g.cs @@ -24,7 +24,7 @@ using test; #pragma warning disable 1998 public async override global::System.Threading.Tasks.Task ExecuteAsync() { -#line 6 "Views/Shared/Test3.cshtml" +#line 6 "../Views/Shared/Test3.cshtml" if (Model != null) { @@ -33,7 +33,7 @@ using test; #nullable disable WriteLiteral("

    Hello \""); #nullable restore -#line 8 "Views/Shared/Test3.cshtml" +#line 8 "../Views/Shared/Test3.cshtml" Write(Html.Raw(Model.Name)); #line default @@ -41,7 +41,7 @@ Write(Html.Raw(Model.Name)); #nullable disable WriteLiteral("\"

    \n"); #nullable restore -#line 9 "Views/Shared/Test3.cshtml" +#line 9 "../Views/Shared/Test3.cshtml" } #line default diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test2_Test1.cshtml.g.cs b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test2_Test1.cshtml.g.cs index a4dec53b632..bb27bae1320 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test2_Test1.cshtml.g.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test2_Test1.cshtml.g.cs @@ -24,7 +24,7 @@ using test; #pragma warning disable 1998 public async override global::System.Threading.Tasks.Task ExecuteAsync() { -#line 6 "Views/Test2/Test1.cshtml" +#line 6 "../Views/Test2/Test1.cshtml" if (Model != null) { @@ -33,7 +33,7 @@ using test; #nullable disable WriteLiteral("

    Hello \""); #nullable restore -#line 8 "Views/Test2/Test1.cshtml" +#line 8 "../Views/Test2/Test1.cshtml" Write(Html.Raw(Model.Name)); #line default @@ -41,7 +41,7 @@ Write(Html.Raw(Model.Name)); #nullable disable WriteLiteral("\"

    \n"); #nullable restore -#line 9 "Views/Test2/Test1.cshtml" +#line 9 "../Views/Test2/Test1.cshtml" } #line default diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test2_Test10.cshtml.g.cs b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test2_Test10.cshtml.g.cs index 33a4d27e254..dbb7f68a284 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test2_Test10.cshtml.g.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test2_Test10.cshtml.g.cs @@ -24,7 +24,7 @@ using test; #pragma warning disable 1998 public async override global::System.Threading.Tasks.Task ExecuteAsync() { -#line 6 "Views/Test2/Test10.cshtml" +#line 6 "../Views/Test2/Test10.cshtml" if (Model != null) { @@ -33,7 +33,7 @@ using test; #nullable disable WriteLiteral("

    Hello \""); #nullable restore -#line 8 "Views/Test2/Test10.cshtml" +#line 8 "../Views/Test2/Test10.cshtml" Write(Html.Raw(Model.Name)); #line default @@ -41,7 +41,7 @@ Write(Html.Raw(Model.Name)); #nullable disable WriteLiteral("\"

    \n"); #nullable restore -#line 9 "Views/Test2/Test10.cshtml" +#line 9 "../Views/Test2/Test10.cshtml" } #line default diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test2_Test11.cshtml.g.cs b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test2_Test11.cshtml.g.cs index da0b0a9c162..069bbd688f9 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test2_Test11.cshtml.g.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test2_Test11.cshtml.g.cs @@ -24,7 +24,7 @@ using test; #pragma warning disable 1998 public async override global::System.Threading.Tasks.Task ExecuteAsync() { -#line 6 "Views/Test2/Test11.cshtml" +#line 6 "../Views/Test2/Test11.cshtml" if (Model != null) { @@ -33,7 +33,7 @@ using test; #nullable disable WriteLiteral("

    Hello \""); #nullable restore -#line 8 "Views/Test2/Test11.cshtml" +#line 8 "../Views/Test2/Test11.cshtml" Write(Html.Raw(Model.Name)); #line default @@ -41,7 +41,7 @@ Write(Html.Raw(Model.Name)); #nullable disable WriteLiteral("\"

    \n"); #nullable restore -#line 9 "Views/Test2/Test11.cshtml" +#line 9 "../Views/Test2/Test11.cshtml" } #line default diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test2_Test12.cshtml.g.cs b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test2_Test12.cshtml.g.cs index 023daa7b03e..410f9d8a0d6 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test2_Test12.cshtml.g.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test2_Test12.cshtml.g.cs @@ -24,7 +24,7 @@ using test; #pragma warning disable 1998 public async override global::System.Threading.Tasks.Task ExecuteAsync() { -#line 6 "Views/Test2/Test12.cshtml" +#line 6 "../Views/Test2/Test12.cshtml" if (Model != null) { @@ -33,7 +33,7 @@ using test; #nullable disable WriteLiteral("

    Hello \""); #nullable restore -#line 8 "Views/Test2/Test12.cshtml" +#line 8 "../Views/Test2/Test12.cshtml" Write(Html.Raw(Model.Name)); #line default @@ -41,7 +41,7 @@ Write(Html.Raw(Model.Name)); #nullable disable WriteLiteral("\"

    \n"); #nullable restore -#line 9 "Views/Test2/Test12.cshtml" +#line 9 "../Views/Test2/Test12.cshtml" } #line default diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test2_Test14.cshtml.g.cs b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test2_Test14.cshtml.g.cs index 28b0ab8ee3f..c5c4253384e 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test2_Test14.cshtml.g.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test2_Test14.cshtml.g.cs @@ -24,7 +24,7 @@ using test; #pragma warning disable 1998 public async override global::System.Threading.Tasks.Task ExecuteAsync() { -#line 6 "Views/Test2/Test14.cshtml" +#line 6 "../Views/Test2/Test14.cshtml" if (Model != null) { @@ -33,7 +33,7 @@ using test; #nullable disable WriteLiteral("

    Hello \""); #nullable restore -#line 8 "Views/Test2/Test14.cshtml" +#line 8 "../Views/Test2/Test14.cshtml" Write(Html.Raw(Model.Name)); #line default @@ -41,7 +41,7 @@ Write(Html.Raw(Model.Name)); #nullable disable WriteLiteral("\"

    \n"); #nullable restore -#line 9 "Views/Test2/Test14.cshtml" +#line 9 "../Views/Test2/Test14.cshtml" } #line default diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test2_Test2.cshtml.g.cs b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test2_Test2.cshtml.g.cs index 53c7e6eed47..6d57bfd899c 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test2_Test2.cshtml.g.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test2_Test2.cshtml.g.cs @@ -24,7 +24,7 @@ using test; #pragma warning disable 1998 public async override global::System.Threading.Tasks.Task ExecuteAsync() { -#line 6 "Views/Test2/Test2.cshtml" +#line 6 "../Views/Test2/Test2.cshtml" if (Model != null) { @@ -33,7 +33,7 @@ using test; #nullable disable WriteLiteral("

    Hello \""); #nullable restore -#line 8 "Views/Test2/Test2.cshtml" +#line 8 "../Views/Test2/Test2.cshtml" Write(Html.Raw(Model.Name)); #line default @@ -41,7 +41,7 @@ Write(Html.Raw(Model.Name)); #nullable disable WriteLiteral("\"

    \n"); #nullable restore -#line 9 "Views/Test2/Test2.cshtml" +#line 9 "../Views/Test2/Test2.cshtml" } #line default diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test2_Test3.cshtml.g.cs b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test2_Test3.cshtml.g.cs index 299f6f89a16..a3d046fe038 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test2_Test3.cshtml.g.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test2_Test3.cshtml.g.cs @@ -24,7 +24,7 @@ using test; #pragma warning disable 1998 public async override global::System.Threading.Tasks.Task ExecuteAsync() { -#line 6 "Views/Test2/Test3.cshtml" +#line 6 "../Views/Test2/Test3.cshtml" if (Model != null) { @@ -33,7 +33,7 @@ using test; #nullable disable WriteLiteral("

    Hello \""); #nullable restore -#line 8 "Views/Test2/Test3.cshtml" +#line 8 "../Views/Test2/Test3.cshtml" Write(Html.Raw(Model.Name)); #line default @@ -41,7 +41,7 @@ Write(Html.Raw(Model.Name)); #nullable disable WriteLiteral("\"

    \n"); #nullable restore -#line 9 "Views/Test2/Test3.cshtml" +#line 9 "../Views/Test2/Test3.cshtml" } #line default diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test4_Test20.cshtml.g.cs b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test4_Test20.cshtml.g.cs index 814a81a5b5d..26ebc94e101 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test4_Test20.cshtml.g.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test4_Test20.cshtml.g.cs @@ -24,7 +24,7 @@ using test; #pragma warning disable 1998 public async override global::System.Threading.Tasks.Task ExecuteAsync() { -#line 6 "Views/Test4/Test20.cshtml" +#line 6 "../Views/Test4/Test20.cshtml" if (Model != null) { @@ -33,7 +33,7 @@ using test; #nullable disable WriteLiteral("

    Hello \""); #nullable restore -#line 8 "Views/Test4/Test20.cshtml" +#line 8 "../Views/Test4/Test20.cshtml" Write(Html.Raw(Model.Name)); #line default @@ -41,7 +41,7 @@ Write(Html.Raw(Model.Name)); #nullable disable WriteLiteral("\"

    \n"); #nullable restore -#line 9 "Views/Test4/Test20.cshtml" +#line 9 "../Views/Test4/Test20.cshtml" } #line default diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test_Test1.cshtml.g.cs b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test_Test1.cshtml.g.cs index 2ad66b7a032..30123d04467 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test_Test1.cshtml.g.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test_Test1.cshtml.g.cs @@ -24,7 +24,7 @@ using test; #pragma warning disable 1998 public async override global::System.Threading.Tasks.Task ExecuteAsync() { -#line 6 "Views/Test/Test1.cshtml" +#line 6 "../Views/Test/Test1.cshtml" if (Model != null) { @@ -33,7 +33,7 @@ using test; #nullable disable WriteLiteral("

    Hello \""); #nullable restore -#line 8 "Views/Test/Test1.cshtml" +#line 8 "../Views/Test/Test1.cshtml" Write(Html.Raw(Model.Name)); #line default @@ -41,7 +41,7 @@ Write(Html.Raw(Model.Name)); #nullable disable WriteLiteral("\"

    \n"); #nullable restore -#line 9 "Views/Test/Test1.cshtml" +#line 9 "../Views/Test/Test1.cshtml" } #line default diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test_Test3.cshtml.g.cs b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test_Test3.cshtml.g.cs index 95ef158286b..ade57ee3476 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test_Test3.cshtml.g.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test_Test3.cshtml.g.cs @@ -24,7 +24,7 @@ using test; #pragma warning disable 1998 public async override global::System.Threading.Tasks.Task ExecuteAsync() { -#line 6 "Views/Test/Test3.cshtml" +#line 6 "../Views/Test/Test3.cshtml" if (Model != null) { @@ -33,7 +33,7 @@ using test; #nullable disable WriteLiteral("

    Hello \""); #nullable restore -#line 8 "Views/Test/Test3.cshtml" +#line 8 "../Views/Test/Test3.cshtml" Write(Html.Raw(Model.Name)); #line default @@ -41,7 +41,7 @@ Write(Html.Raw(Model.Name)); #nullable disable WriteLiteral("\"

    \n"); #nullable restore -#line 9 "Views/Test/Test3.cshtml" +#line 9 "../Views/Test/Test3.cshtml" } #line default diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test_Test4.cshtml.g.cs b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test_Test4.cshtml.g.cs index 7a8cea221f7..583c0a35b1a 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test_Test4.cshtml.g.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test_Test4.cshtml.g.cs @@ -24,7 +24,7 @@ using test; #pragma warning disable 1998 public async override global::System.Threading.Tasks.Task ExecuteAsync() { -#line 6 "Views/Test/Test4.cshtml" +#line 6 "../Views/Test/Test4.cshtml" if (Model != null) { @@ -33,7 +33,7 @@ using test; #nullable disable WriteLiteral("

    Hello \""); #nullable restore -#line 8 "Views/Test/Test4.cshtml" +#line 8 "../Views/Test/Test4.cshtml" Write(Html.Raw(Model.Name)); #line default @@ -41,7 +41,7 @@ Write(Html.Raw(Model.Name)); #nullable disable WriteLiteral("\"

    \n"); #nullable restore -#line 9 "Views/Test/Test4.cshtml" +#line 9 "../Views/Test/Test4.cshtml" } #line default diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test_Test7.cshtml.g.cs b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test_Test7.cshtml.g.cs index 1eef0024c7a..710cc34bd07 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test_Test7.cshtml.g.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test_Test7.cshtml.g.cs @@ -24,7 +24,7 @@ using test; #pragma warning disable 1998 public async override global::System.Threading.Tasks.Task ExecuteAsync() { -#line 6 "Views/Test/Test7.cshtml" +#line 6 "../Views/Test/Test7.cshtml" if (Model != null) { @@ -33,7 +33,7 @@ using test; #nullable disable WriteLiteral("

    Hello \""); #nullable restore -#line 8 "Views/Test/Test7.cshtml" +#line 8 "../Views/Test/Test7.cshtml" Write(Html.Raw(Model.Name)); #line default @@ -41,7 +41,7 @@ Write(Html.Raw(Model.Name)); #nullable disable WriteLiteral("\"

    \n"); #nullable restore -#line 9 "Views/Test/Test7.cshtml" +#line 9 "../Views/Test/Test7.cshtml" } #line default From 070402d3ae9de91a3993684befaaa75cdf35329b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 8 Feb 2024 00:15:53 +0000 Subject: [PATCH 086/378] Add changed framework coverage reports --- csharp/documentation/library-coverage/coverage.csv | 2 +- csharp/documentation/library-coverage/coverage.rst | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/csharp/documentation/library-coverage/coverage.csv b/csharp/documentation/library-coverage/coverage.csv index b7b301fd2de..43681e0a264 100644 --- a/csharp/documentation/library-coverage/coverage.csv +++ b/csharp/documentation/library-coverage/coverage.csv @@ -40,5 +40,5 @@ MySql.Data.MySqlClient,48,,,,,,,,,,,,48,,,,,, Newtonsoft.Json,,,91,,,,,,,,,,,,,,,73,18 ServiceStack,194,,7,27,,,,,75,,,,92,,,,,7, SourceGenerators,,,4,,,,,,,,,,,,,,,4, -System,67,25,11835,,8,8,9,,,4,5,,33,1,17,3,4,9896,1939 +System,67,25,11862,,8,8,9,,,4,5,,33,1,17,3,4,9896,1966 Windows.Security.Cryptography.Core,1,,,,,,,1,,,,,,,,,,, diff --git a/csharp/documentation/library-coverage/coverage.rst b/csharp/documentation/library-coverage/coverage.rst index 0b898c67bda..9219a2a663f 100644 --- a/csharp/documentation/library-coverage/coverage.rst +++ b/csharp/documentation/library-coverage/coverage.rst @@ -8,7 +8,7 @@ C# framework & library support Framework / library,Package,Flow sources,Taint & value steps,Sinks (total),`CWE-079` :sub:`Cross-site scripting` `ServiceStack `_,"``ServiceStack.*``, ``ServiceStack``",,7,194, - System,"``System.*``, ``System``",25,11835,67,9 + System,"``System.*``, ``System``",25,11862,67,9 Others,"``Amazon.Lambda.APIGatewayEvents``, ``Amazon.Lambda.Core``, ``Dapper``, ``ILCompiler``, ``ILLink.RoslynAnalyzer``, ``ILLink.Shared``, ``ILLink.Tasks``, ``Internal.IL``, ``Internal.Pgo``, ``Internal.TypeSystem``, ``JsonToItemsTaskFactory``, ``Microsoft.Android.Build``, ``Microsoft.Apple.Build``, ``Microsoft.ApplicationBlocks.Data``, ``Microsoft.CSharp``, ``Microsoft.Diagnostics.Tools.Pgo``, ``Microsoft.EntityFrameworkCore``, ``Microsoft.Extensions.Caching.Distributed``, ``Microsoft.Extensions.Caching.Memory``, ``Microsoft.Extensions.Configuration``, ``Microsoft.Extensions.DependencyInjection``, ``Microsoft.Extensions.DependencyModel``, ``Microsoft.Extensions.Diagnostics.Metrics``, ``Microsoft.Extensions.FileProviders``, ``Microsoft.Extensions.FileSystemGlobbing``, ``Microsoft.Extensions.Hosting``, ``Microsoft.Extensions.Http``, ``Microsoft.Extensions.Logging``, ``Microsoft.Extensions.Options``, ``Microsoft.Extensions.Primitives``, ``Microsoft.Interop``, ``Microsoft.NET.Build.Tasks``, ``Microsoft.NET.WebAssembly.Webcil``, ``Microsoft.VisualBasic``, ``Microsoft.WebAssembly.Build.Tasks``, ``Microsoft.Win32.SafeHandles``, ``Mono.Linker``, ``MySql.Data.MySqlClient``, ``Newtonsoft.Json``, ``SourceGenerators``, ``Windows.Security.Cryptography.Core``",6,1541,148, - Totals,,31,13383,409,9 + Totals,,31,13410,409,9 From dfc9c4d07963987d949f514bca780b278716b929 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Thu, 8 Feb 2024 10:36:55 +0100 Subject: [PATCH 087/378] C#: Simplify, getASuccessor is pruned now. --- .../dataflow/internal/ContentDataFlow.qll | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/ContentDataFlow.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/ContentDataFlow.qll index fc937b88fa9..e9cd7373975 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/ContentDataFlow.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/ContentDataFlow.qll @@ -277,10 +277,6 @@ module Global { } } - // important to use `edges` and not `PathNode::getASuccessor()`, as the latter - // is not pruned for reachability - private predicate pathSucc = Flow::PathGraph::edges/2; - /** * Provides a big-step flow relation, where flow stops at read/store steps that * must be recorded, and flow via `subpaths` such that reads/stores inside @@ -290,10 +286,7 @@ module Global { private predicate reachesSink(Flow::PathNode node) { FlowConfig::isSink(node.getNode(), node.getState()) or - exists(Flow::PathNode mid | - pathSucc(node, mid) and - reachesSink(mid) - ) + reachesSink(node.getASuccessor()) } /** @@ -302,7 +295,7 @@ module Global { */ pragma[nomagic] private predicate excludeStep(Flow::PathNode pred, Flow::PathNode succ) { - pathSucc(pred, succ) and + pred.getASuccessor() = succ and ( // we need to record reads/stores inside summarized callables Flow::PathGraph::subpaths(pred, _, _, succ) @@ -356,7 +349,7 @@ module Global { pragma[nomagic] private predicate step(Flow::PathNode pred, Flow::PathNode succ) { - pathSucc(pred, succ) and + pred.getASuccessor() = succ and not excludeStep(pred, succ) } @@ -471,7 +464,7 @@ module Global { exists(Flow::PathNode mid | nodeReaches(source, scReads, scStores, mid, reads, stores) and storeStep(mid.getNode(), mid.getState(), c, node.getNode(), node.getState()) and - pathSucc(mid, node) + mid.getASuccessor() = node ) } @@ -483,7 +476,7 @@ module Global { exists(Flow::PathNode mid | nodeReaches(source, scReads, scStores, mid, reads, stores) and readStep(mid.getNode(), mid.getState(), c, node.getNode(), node.getState()) and - pathSucc(mid, node) + mid.getASuccessor() = node ) } From 5cb71ce7e51175894c0a945ddf63da55ab9d88a3 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Thu, 8 Feb 2024 12:17:11 +0100 Subject: [PATCH 088/378] python: remove a use of points-to This is used by `Scope::isPublic` which in turn is called by the framework model for `setuptools`. On my current quesry, this had a dramatic effect on the most expensive predicates: Before ``` Most expensive predicates for completed query FindUses.ql: time | evals | max @ iter | predicate ------|-------|--------------|---------- 1m9s | 2933 | 123ms @ 422 | PointsTo::Expressions::equalityEvaluatesTo/4#ebe72212@cab7d3xr 43.1s | | | FlowSummaryImpl::Private::Steps::summaryLocalStep/3#900fb25e#ffb@8aa78a38 41.3s | 2936 | 2.1s @ 409 | PointsTo::InterProceduralPointsTo::scope_entry_value_transfer_from_earlier/4#acb2199d@cab7ddxr 30.2s | 2946 | 67ms @ 847 | PointsTo::PointsToInternal::multi_assignment_points_to/4#28782e93@cab7d0yr 29.7s | 2930 | 1.9s @ 30 | Extensions::ReModulePointToExtension.pointsTo_helper/1#a84effde@cab7dn4w 24.9s | 2933 | 84ms @ 414 | PointsTo::Expressions::inequalityEvaluatesTo/4#f0ecfab4@cab7d2xr 17.9s | 2582 | 306ms @ 31 | MRO::ClassListList.getItem/1#b6c27115#reorder_2_0_1@cab7dw6r 9.4s | 661 | 991ms @ 1 | SsaCompute::AdjacentUses::varBlockReaches/3#1824ad86@2b6af692 9.2s | 2738 | 26ms @ 664 | MRO::ClassList.containsSpecial/0#c967dabb#fb@cab7dg4w 8.9s | 2946 | 12ms @ 917 | PointsTo::Types::getBase/2#0ab04984@cab7du1w 7.4s | 2946 | 287ms @ 3 | PointsTo::PointsToInternal::points_to_candidate/4#0a587a42@cab7d80w 7.1s | 2934 | 14ms @ 2 | Constants::ConstantObjectInternal.attribute/3#6d9e12fc@cab7d6zr 6.8s | 2946 | 9ms @ 48 | PointsTo::InterProceduralPointsTo::callsite_points_to/4#72419c70@cab7dqxr 6.6s | 234 | 341ms @ 17 | ApiGraphs::API::Impl::rhs/3#2255afc6@a41b31w3 6.6s | 2946 | 86ms @ 5 | PointsTo::Types::six_add_metaclass/4#f926a4cb@cab7da0w 6.2s | 2930 | 341ms @ 30 | Extensions::RangeIterationVariableFact.pointsTo/3#662720c9#cpe#124@cab7di2w 5.9s | 287 | 61ms @ 4 | DataFlowDispatch::TrackAttrReadInput::start/2#67f26627@cc7b56yn 5.8s | | | DataFlowImplCommon::LambdaFlow::viableParamNonLambda/3#3123cc52_201#join_rhs@415f35h0 5.6s | | | FlowSummaryImpl::Private::Steps::viableParam/4#49c13ab8@2c1fcdq1 5.3s | | | FlowSummaryImpl::Private::Steps::viableParam/4#49c13ab8@22590ca9 5.2s | 233 | 276ms @ 21 | ApiGraphs::API::Impl::use/3#e6c88b66@a41b30w3 5.1s | 2945 | 177ms @ 4 | PointsTo::PointsToInternal::pointsTo/4#d99f16c6@cab7dj0w 4.7s | | | Flow::ControlFlowNode.toString/0#dispred#e1af144b@410c23a7 4.6s | 277 | 2.2s @ 6 | DataFlowDispatch::getCallArg/5#21589076@cc7b5vxn 4.5s | | | DataFlowImplCommon::Cached::viableParam/3#61239ead@cc05a1fv 4.3s | | | DataFlowImplCommon::LambdaFlow::viableParamNonLambda/3#3123cc52@cb992b2h 4.1s | | | _AstExtended::AstNode.getLocation/0#dispred#6b4dcb62_10#join_rhs_DataFlowPublic::Node.getLocation/0#__#shared@6ae639js 4s | | | Files::Location.toString/0#dispred#7e7e0516@b72abbo2 3.7s | | | locations_ast_234501#join_rhs@0859685o 3.7s | 10 | 1.7s @ 1 | ObjectInternal::ObjectInternal.toString/0#dispred#0b2e9429@6e8a4yh7 3.6s | 2942 | 63ms @ 94 | PointsTo::InterProceduralPointsTo::call_points_to_from_callee/4#394022a8@cab7d90w 3.6s | 232 | 213ms @ 18 | ApiGraphs::API::Impl::trackDefNode/2#8e3c4e6d@a41b33w3 3.6s | 2933 | 7ms @ 884 | PointsTo::Types::getInheritedMetaclass/2#097d39df#bff@cab7dr1w 3.6s | 2946 | 1.3s @ 13 | PointsTo::PointsToInternal::ssa_node_refinement_points_to/4#8ea6486b@cab7dnxr 3.5s | 1319 | 387ms @ 3 | SsaCompute::SsaDefinitions::reachesEndOfBlock/4#214bd902@fce54web 3.5s | 1320 | 385ms @ 2 | SsaCompute::SsaDefinitions::reachesEndOfBlockRec/4#63bb2cd4@fce54xeb 3.4s | 4861 | 478ms @ 2 | SsaCompute::SsaComputeImpl::ssaDefReachesRank/4#f19c6fee@cc8515rd 3.3s | | | _AstExtended::AstNode.getLocation/0#dispred#6b4dcb62_10#join_rhs_DataFlowPublic::Node.getLocation/0#__#higher_order_body@47ba63n6 3.3s | | | DataFlowPublic::Node.toString/0#dispred#af9c307a@4d16e7m6 3.3s | 2946 | 28ms @ 3 | PointsTo::PointsToInternal::reachableEdge/3#d3f53c12@cab7do7w 2.9s | 233 | 110ms @ 19 | ApiGraphs::API::Impl::trackUseNode/2#a0b4384d@a41b32w3 2.8s | 31 | 2.2s @ 9 | _Class::Class.getAMethod/0#dispred#66416e47_DataFlowDispatch::findFunctionAccordingToMroKnownStartin__#antijoin_rhs@L6#cc7b5 2.8s | 2737 | 21ms @ 444 | MRO::ClassListList.removedClassParts/4#de59b06f#reorder_2_3_4_0_1@cab7d06w 2.8s | 1322 | 462ms @ 4 | SsaCompute::Liveness::liveAtExit/2#b6aa63f4@6fd4cx73 2.8s | 2946 | 187ms @ 5 | PointsTo::Expressions::builtinCallPointsTo/5#3aa7f48b@cab7dwwr 2.8s | 2939 | 41ms @ 7 | PointsTo::PointsToInternal::use_points_to/4#ff1d0edd@cab7df0w 2.7s | 2946 | 20ms @ 92 | PointsTo::Conditionals::evaluates/5#736734b2#fbffff#reorder_5_0_2_1_3_4@cab7dp5w 2.6s | 2946 | 152ms @ 5 | Constants::callToBool/2#0b9b1e8d@cab7dn7w 2.5s | 287 | 24ms @ 4 | DataFlowDispatch::resolveClassInstanceCall/3#6e09c292@cc7b53xn 2.4s | 2946 | 31ms @ 5 | PointsTo::AttributePointsTo::variableAttributePointsTo/5#60adcc49@cab7dpwr [2024-02-08 10:44:37] Total evaluation times for this run: * Wall-clock duration of evaluation run: 1231.1 seconds * Total time spent evaluating predicates: 1167.1 seconds ``` After ``` Most expensive predicates for completed query FindUses.ql: time | evals | max @ iter | predicate ------|-------|--------------|---------- 41.6s | | | FlowSummaryImpl::Private::Steps::summaryLocalStep/3#900fb25e#ffb@85aaaac1 9.2s | 661 | 905ms @ 1 | SsaCompute::AdjacentUses::varBlockReaches/3#1824ad86@2b6af692 7.6s | 234 | 502ms @ 19 | ApiGraphs::API::Impl::rhs/3#2255afc6@ce6d11wc 6.7s | | | DataFlowImplCommon::LambdaFlow::viableParamNonLambda/3#3123cc52_201#join_rhs@fd1dc5mi 6s | 287 | 80ms @ 113 | DataFlowDispatch::TrackAttrReadInput::start/2#67f26627@925826yr 5.7s | | | FlowSummaryImpl::Private::Steps::viableParam/4#49c13ab8@851052bl 5.6s | 233 | 289ms @ 21 | ApiGraphs::API::Impl::use/3#e6c88b66@ce6d10wc 5.4s | | | FlowSummaryImpl::Private::Steps::viableParam/4#49c13ab8@f2c42d17 4.8s | 277 | 2.4s @ 6 | DataFlowDispatch::getCallArg/5#21589076@92582vxr 4.7s | | | DataFlowImplCommon::Cached::viableParam/3#61239ead@ac08e0nf 4.7s | | | DataFlowImplCommon::LambdaFlow::viableParamNonLambda/3#3123cc52@82ff50ql 4.6s | | | Files::Location.toString/0#dispred#7e7e0516@b72abbo2 4.3s | | | Flow::ControlFlowNode.toString/0#dispred#e1af144b@410c23a7 4.2s | 232 | 249ms @ 19 | ApiGraphs::API::Impl::trackDefNode/2#8e3c4e6d@ce6d13wc 3.8s | | | _AstExtended::AstNode.getLocation/0#dispred#6b4dcb62_10#join_rhs_DataFlowPublic::Node.getLocation/0#__#shared@0ac73425 3.6s | 1319 | 354ms @ 1 | SsaCompute::SsaDefinitions::reachesEndOfBlock/4#214bd902@fce54web 3.6s | 1320 | 381ms @ 2 | SsaCompute::SsaDefinitions::reachesEndOfBlockRec/4#63bb2cd4@fce54xeb 3.4s | | | _AstExtended::AstNode.getLocation/0#dispred#6b4dcb62_10#join_rhs_DataFlowPublic::Node.getLocation/0#__#higher_order_body@9e946ea8 3.4s | 4861 | 474ms @ 2 | SsaCompute::SsaComputeImpl::ssaDefReachesRank/4#f19c6fee@cc8515rd 3.1s | 31 | 2.5s @ 9 | _Class::Class.getAMethod/0#dispred#66416e47_DataFlowDispatch::findFunctionAccordingToMroKnownStartin__#antijoin_rhs@L6#92582 3s | 53 | 114ms @ 48 | DataFlowDispatch::TrackAttrReadInput::start/2#67f26627@9ab38jw0 3s | 233 | 126ms @ 20 | ApiGraphs::API::Impl::trackUseNode/2#a0b4384d@ce6d12wc 3s | | | locations_ast_234501#join_rhs@0859685o 3s | | | DataFlowPublic::Node.toString/0#dispred#af9c307a@a2145cqf 2.8s | 234 | 206ms @ 21 | _ApiGraphs::API::Impl::MkDef#51c2f877#prev_ApiGraphs::API::Impl::trackDefNode/1#7e78e336#prev_delta___#antijoin_rhs#1@L9#ce6d1 2.8s | 1322 | 447ms @ 4 | SsaCompute::Liveness::liveAtExit/2#b6aa63f4@6fd4cx73 2.7s | 230 | 176ms @ 28 | ApiGraphs::API::Impl::MkDef#51c2f877@ce6d1w9c 2.5s | 287 | 50ms @ 112 | DataFlowDispatch::resolveClassInstanceCall/3#6e09c292@925823xr 2.4s | 234 | 246ms @ 19 | _ApiGraphs::API::Impl::MkDef#51c2f877#prev_ApiGraphs::API::Impl::trackDefNode/1#7e78e336#prev_delta___#antijoin_rhs@L4#ce6d1 2.3s | | | TaintTrackingPrivate::localAdditionalTaintStep/2#a2ec8c9d@e31201hd 2.2s | 53 | 72ms @ 15 | DataFlowDispatch::TrackAttrReadInput::start/2#67f26627@96b28jwo 2.2s | | | SensitiveDataSources::SensitiveDataModeling::sensitiveString/1#fdc3ad40@41f6ee2g 2s | | | DataFlowImplCommon::Cached::viableParamArg/3#4c55eddb@8f7f25oq 2s | | | Flow::ControlFlowNode.getExprChild/1#e757d179#bbf@db51e8ed 1.9s | | | project#FlowSummaryImpl::Private::Steps::viableParam/4#49c13ab8#2@e36c2dr8 1.9s | | | DataFlowPublic::Node.hasLocationInfo/5#dispred#b79d995f@6e929dfv 1.7s | 15 | 433ms @ 1 | PoorMansFunctionResolution::poorMansFunctionTracker/2#75430e01@e5202dnv 1.7s | | | #ImportResolution::ImportResolution::allowedEssaImportStep/2#f4117c61Plus#swapped@60d9daea 1.7s | 29 | 633ms @ 6 | _Class::Class.getAMethod/0#dispred#66416e47_Function::Function.getName/0#dispred#033700ef_10#join_rh__#antijoin_rhs@L4#92582 1.5s | 233 | 79ms @ 24 | ApiGraphs::API::Impl::trackUseNode/1#1af3a9ea@ce6d16wc 1.5s | | | ApiGraphs::API::Impl::edge/3#8453bf65@1bd8a6ja 1.5s | | | ApiGraphs::API::Node.getAValueReachableFromSource/0#dispred#9a406fb1@5dbb806u 1.3s | 1323 | 178ms @ 13 | SsaCompute::Liveness::liveAtEntry/2#bab3ea7c@6fd4cw73 1.3s | | | SsaCompute::SsaComputeImpl::defUseRank/4#782a2f48@0f27919s 1.3s | | | DataFlowDispatch::LibraryCallable.getACall/0#dispred#66a01171#fb@96b65frd 1.3s | | | ApiGraphs::API::Node.getAValueReachableFromSource/0#dispred#9a406fb1_10#join_rhs@c1dd43nv 1.3s | | | FlowSummaryImpl::Private::SummaryNode.toString/0#dispred#d499e234@63bd684g 1.2s | | | DataFlowDispatch::LibraryCallable.getACall/0#dispred#66a01171#fb@eaebb27g 1.2s | | | _DataFlowPublic::Node#da3b6093_DataFlowPublic::Node.asExpr/0#dispred#2845197a_py_exprs#antijoin_rhs@fcd8c3kj 1.2s | | | #ImportResolution::ImportResolution::allowedEssaImportStep/2#f4117c61Plus#swapped@c3f634us [2024-02-08 11:43:50] Total evaluation times for this run: * Wall-clock duration of evaluation run: 636.9 seconds * Total time spent evaluating predicates: 562.4 seconds ``` --- python/ql/lib/semmle/python/Module.qll | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/python/ql/lib/semmle/python/Module.qll b/python/ql/lib/semmle/python/Module.qll index 0a083eec9a8..2daac9e9b93 100644 --- a/python/ql/lib/semmle/python/Module.qll +++ b/python/ql/lib/semmle/python/Module.qll @@ -1,6 +1,7 @@ import python private import semmle.python.objects.Modules private import semmle.python.internal.CachedStages +private import semmle.python.dataflow.new.internal.ImportResolution /** * A module. This is the top level element in an AST, corresponding to a source file. @@ -70,9 +71,7 @@ class Module extends Module_, Scope, AstNode { string getAnExport() { py_exports(this, result) or - exists(ModuleObjectInternal mod | mod.getSource() = this.getEntryNode() | - mod.(ModuleValue).exports(result) - ) + ImportResolution::module_export(this, result, _) } /** Gets the source file for this module */ From 87eb1ab103272efab51f36e5438b75a83522a979 Mon Sep 17 00:00:00 2001 From: Koen Vlaswinkel Date: Thu, 8 Feb 2024 13:40:10 +0100 Subject: [PATCH 089/378] Ruby: Include ReturnValue and exclude self for constructors --- .../modeleditor/FrameworkModeAccessPaths.ql | 18 +++- .../FrameworkModeAccessPaths.expected | 89 +++++++++---------- .../FrameworkModeEndpoints.expected | 14 +-- .../utils/modeleditor/GenerateModel.expected | 1 + .../utils/modeleditor/lib/mylib.rb | 1 + 5 files changed, 69 insertions(+), 54 deletions(-) diff --git a/ruby/ql/src/utils/modeleditor/FrameworkModeAccessPaths.ql b/ruby/ql/src/utils/modeleditor/FrameworkModeAccessPaths.ql index 87559350048..039fcfbf1c9 100644 --- a/ruby/ql/src/utils/modeleditor/FrameworkModeAccessPaths.ql +++ b/ruby/ql/src/utils/modeleditor/FrameworkModeAccessPaths.ql @@ -20,7 +20,9 @@ predicate simpleParameters(string type, string path, string value, DataFlow::Nod // Block parameter explicitly excluded because it's already included // as part of the blockArguments predicate paramNode = Util::getAnyParameter(methodNode) and - paramNode != methodNode.getBlockParameter() + paramNode != methodNode.getBlockParameter() and + // The self parameter of a constructor is not a parameter that can be used in any models + (not isConstructor(methodNode) or paramNode != methodNode.getSelfParameter()) ) | Util::pathToMethod(methodNode, type, path) and @@ -60,12 +62,24 @@ predicate returnValue(string type, string path, string value, DataFlow::Node nod exists(DataFlow::MethodNode methodNode, DataFlow::Node returnNode | methodNode.getLocation().getFile() instanceof Util::RelevantFile and returnNode = methodNode.getAReturnNode() and - not isConstructor(methodNode) // A constructor doesn't have a return value + not isConstructor(methodNode) | Util::pathToMethod(methodNode, type, path) and value = "ReturnValue" and node = returnNode ) + or + // A constructor has a return node for every statement, but we always want + // to return 1 node for the ReturnValue, so we return the self parameter + // instead. + exists(DataFlow::MethodNode methodNode | + methodNode.getLocation().getFile() instanceof Util::RelevantFile and + isConstructor(methodNode) + | + Util::pathToMethod(methodNode, type, path) and + value = "ReturnValue" and + node = methodNode.getSelfParameter() + ) } predicate inputAccessPaths( diff --git a/ruby/ql/test/query-tests/utils/modeleditor/FrameworkModeAccessPaths.expected b/ruby/ql/test/query-tests/utils/modeleditor/FrameworkModeAccessPaths.expected index 6951f1a2322..d190d1ba524 100644 --- a/ruby/ql/test/query-tests/utils/modeleditor/FrameworkModeAccessPaths.expected +++ b/ruby/ql/test/query-tests/utils/modeleditor/FrameworkModeAccessPaths.expected @@ -1,28 +1,27 @@ input -| A | Method[bar] | Argument[0] | lib/mylib.rb:13:11:13:11 | x | parameter | -| A | Method[bar] | Argument[self] | lib/mylib.rb:13:3:14:5 | self in bar | parameter | -| A | Method[foo] | Argument[0] | lib/mylib.rb:7:11:7:11 | x | parameter | -| A | Method[foo] | Argument[1] | lib/mylib.rb:7:14:7:14 | y | parameter | -| A | Method[foo] | Argument[2] | lib/mylib.rb:7:17:7:20 | key1 | parameter | -| A | Method[foo] | Argument[block] | lib/mylib.rb:8:5:8:32 | call to call | parameter | -| A | Method[foo] | Argument[block] | lib/mylib.rb:10:5:10:26 | yield ... | parameter | -| A | Method[foo] | Argument[block].Parameter[0] | lib/mylib.rb:8:16:8:16 | x | parameter | -| A | Method[foo] | Argument[block].Parameter[0] | lib/mylib.rb:10:11:10:11 | x | parameter | -| A | Method[foo] | Argument[block].Parameter[1] | lib/mylib.rb:8:19:8:19 | y | parameter | -| A | Method[foo] | Argument[block].Parameter[1] | lib/mylib.rb:10:14:10:14 | y | parameter | -| A | Method[foo] | Argument[block].Parameter[key2:] | lib/mylib.rb:8:28:8:31 | key1 | parameter | -| A | Method[foo] | Argument[block].Parameter[key2:] | lib/mylib.rb:10:23:10:26 | key1 | parameter | -| A | Method[foo] | Argument[key1:] | lib/mylib.rb:7:17:7:20 | key1 | parameter | -| A | Method[foo] | Argument[self] | lib/mylib.rb:7:3:11:5 | self in foo | parameter | +| A | Method[bar] | Argument[0] | lib/mylib.rb:14:11:14:11 | x | parameter | +| A | Method[bar] | Argument[self] | lib/mylib.rb:14:3:15:5 | self in bar | parameter | +| A | Method[foo] | Argument[0] | lib/mylib.rb:8:11:8:11 | x | parameter | +| A | Method[foo] | Argument[1] | lib/mylib.rb:8:14:8:14 | y | parameter | +| A | Method[foo] | Argument[2] | lib/mylib.rb:8:17:8:20 | key1 | parameter | +| A | Method[foo] | Argument[block] | lib/mylib.rb:9:5:9:32 | call to call | parameter | +| A | Method[foo] | Argument[block] | lib/mylib.rb:11:5:11:26 | yield ... | parameter | +| A | Method[foo] | Argument[block].Parameter[0] | lib/mylib.rb:9:16:9:16 | x | parameter | +| A | Method[foo] | Argument[block].Parameter[0] | lib/mylib.rb:11:11:11:11 | x | parameter | +| A | Method[foo] | Argument[block].Parameter[1] | lib/mylib.rb:9:19:9:19 | y | parameter | +| A | Method[foo] | Argument[block].Parameter[1] | lib/mylib.rb:11:14:11:14 | y | parameter | +| A | Method[foo] | Argument[block].Parameter[key2:] | lib/mylib.rb:9:28:9:31 | key1 | parameter | +| A | Method[foo] | Argument[block].Parameter[key2:] | lib/mylib.rb:11:23:11:26 | key1 | parameter | +| A | Method[foo] | Argument[key1:] | lib/mylib.rb:8:17:8:20 | key1 | parameter | +| A | Method[foo] | Argument[self] | lib/mylib.rb:8:3:12:5 | self in foo | parameter | | A! | Method[new] | Argument[0] | lib/mylib.rb:4:18:4:18 | x | parameter | | A! | Method[new] | Argument[1] | lib/mylib.rb:4:21:4:21 | y | parameter | -| A! | Method[new] | Argument[self] | lib/mylib.rb:4:3:5:5 | self in initialize | parameter | -| A! | Method[self_foo] | Argument[0] | lib/mylib.rb:16:21:16:21 | x | parameter | -| A! | Method[self_foo] | Argument[1] | lib/mylib.rb:16:24:16:24 | y | parameter | -| A! | Method[self_foo] | Argument[self] | lib/mylib.rb:16:3:17:5 | self in self_foo | parameter | -| A::ANested | Method[foo] | Argument[0] | lib/mylib.rb:25:13:25:13 | x | parameter | -| A::ANested | Method[foo] | Argument[1] | lib/mylib.rb:25:16:25:16 | y | parameter | -| A::ANested | Method[foo] | Argument[self] | lib/mylib.rb:25:5:26:7 | self in foo | parameter | +| A! | Method[self_foo] | Argument[0] | lib/mylib.rb:17:21:17:21 | x | parameter | +| A! | Method[self_foo] | Argument[1] | lib/mylib.rb:17:24:17:24 | y | parameter | +| A! | Method[self_foo] | Argument[self] | lib/mylib.rb:17:3:18:5 | self in self_foo | parameter | +| A::ANested | Method[foo] | Argument[0] | lib/mylib.rb:26:13:26:13 | x | parameter | +| A::ANested | Method[foo] | Argument[1] | lib/mylib.rb:26:16:26:16 | y | parameter | +| A::ANested | Method[foo] | Argument[self] | lib/mylib.rb:26:5:27:7 | self in foo | parameter | | B | Method[foo] | Argument[0] | lib/other.rb:6:11:6:11 | x | parameter | | B | Method[foo] | Argument[1] | lib/other.rb:6:14:6:14 | y | parameter | | B | Method[foo] | Argument[self] | lib/other.rb:6:3:7:5 | self in foo | parameter | @@ -36,31 +35,31 @@ input | OtherLib::A | Method[foo] | Argument[1] | other_lib/lib/other_gem.rb:3:20:3:20 | y | parameter | | OtherLib::A | Method[foo] | Argument[self] | other_lib/lib/other_gem.rb:3:9:4:11 | self in foo | parameter | output -| A | Method[bar] | Argument[0] | lib/mylib.rb:13:11:13:11 | x | parameter | -| A | Method[bar] | Argument[self] | lib/mylib.rb:13:3:14:5 | self in bar | parameter | -| A | Method[foo] | Argument[0] | lib/mylib.rb:7:11:7:11 | x | parameter | -| A | Method[foo] | Argument[1] | lib/mylib.rb:7:14:7:14 | y | parameter | -| A | Method[foo] | Argument[2] | lib/mylib.rb:7:17:7:20 | key1 | parameter | -| A | Method[foo] | Argument[block] | lib/mylib.rb:8:5:8:32 | call to call | parameter | -| A | Method[foo] | Argument[block] | lib/mylib.rb:10:5:10:26 | yield ... | parameter | -| A | Method[foo] | Argument[block].Parameter[0] | lib/mylib.rb:8:16:8:16 | x | parameter | -| A | Method[foo] | Argument[block].Parameter[0] | lib/mylib.rb:10:11:10:11 | x | parameter | -| A | Method[foo] | Argument[block].Parameter[1] | lib/mylib.rb:8:19:8:19 | y | parameter | -| A | Method[foo] | Argument[block].Parameter[1] | lib/mylib.rb:10:14:10:14 | y | parameter | -| A | Method[foo] | Argument[block].Parameter[key2:] | lib/mylib.rb:8:28:8:31 | key1 | parameter | -| A | Method[foo] | Argument[block].Parameter[key2:] | lib/mylib.rb:10:23:10:26 | key1 | parameter | -| A | Method[foo] | Argument[key1:] | lib/mylib.rb:7:17:7:20 | key1 | parameter | -| A | Method[foo] | Argument[self] | lib/mylib.rb:7:3:11:5 | self in foo | parameter | -| A | Method[foo] | ReturnValue | lib/mylib.rb:10:5:10:26 | yield ... | return | +| A | Method[bar] | Argument[0] | lib/mylib.rb:14:11:14:11 | x | parameter | +| A | Method[bar] | Argument[self] | lib/mylib.rb:14:3:15:5 | self in bar | parameter | +| A | Method[foo] | Argument[0] | lib/mylib.rb:8:11:8:11 | x | parameter | +| A | Method[foo] | Argument[1] | lib/mylib.rb:8:14:8:14 | y | parameter | +| A | Method[foo] | Argument[2] | lib/mylib.rb:8:17:8:20 | key1 | parameter | +| A | Method[foo] | Argument[block] | lib/mylib.rb:9:5:9:32 | call to call | parameter | +| A | Method[foo] | Argument[block] | lib/mylib.rb:11:5:11:26 | yield ... | parameter | +| A | Method[foo] | Argument[block].Parameter[0] | lib/mylib.rb:9:16:9:16 | x | parameter | +| A | Method[foo] | Argument[block].Parameter[0] | lib/mylib.rb:11:11:11:11 | x | parameter | +| A | Method[foo] | Argument[block].Parameter[1] | lib/mylib.rb:9:19:9:19 | y | parameter | +| A | Method[foo] | Argument[block].Parameter[1] | lib/mylib.rb:11:14:11:14 | y | parameter | +| A | Method[foo] | Argument[block].Parameter[key2:] | lib/mylib.rb:9:28:9:31 | key1 | parameter | +| A | Method[foo] | Argument[block].Parameter[key2:] | lib/mylib.rb:11:23:11:26 | key1 | parameter | +| A | Method[foo] | Argument[key1:] | lib/mylib.rb:8:17:8:20 | key1 | parameter | +| A | Method[foo] | Argument[self] | lib/mylib.rb:8:3:12:5 | self in foo | parameter | +| A | Method[foo] | ReturnValue | lib/mylib.rb:11:5:11:26 | yield ... | return | | A! | Method[new] | Argument[0] | lib/mylib.rb:4:18:4:18 | x | parameter | | A! | Method[new] | Argument[1] | lib/mylib.rb:4:21:4:21 | y | parameter | -| A! | Method[new] | Argument[self] | lib/mylib.rb:4:3:5:5 | self in initialize | parameter | -| A! | Method[self_foo] | Argument[0] | lib/mylib.rb:16:21:16:21 | x | parameter | -| A! | Method[self_foo] | Argument[1] | lib/mylib.rb:16:24:16:24 | y | parameter | -| A! | Method[self_foo] | Argument[self] | lib/mylib.rb:16:3:17:5 | self in self_foo | parameter | -| A::ANested | Method[foo] | Argument[0] | lib/mylib.rb:25:13:25:13 | x | parameter | -| A::ANested | Method[foo] | Argument[1] | lib/mylib.rb:25:16:25:16 | y | parameter | -| A::ANested | Method[foo] | Argument[self] | lib/mylib.rb:25:5:26:7 | self in foo | parameter | +| A! | Method[new] | ReturnValue | lib/mylib.rb:4:3:6:5 | self in initialize | return | +| A! | Method[self_foo] | Argument[0] | lib/mylib.rb:17:21:17:21 | x | parameter | +| A! | Method[self_foo] | Argument[1] | lib/mylib.rb:17:24:17:24 | y | parameter | +| A! | Method[self_foo] | Argument[self] | lib/mylib.rb:17:3:18:5 | self in self_foo | parameter | +| A::ANested | Method[foo] | Argument[0] | lib/mylib.rb:26:13:26:13 | x | parameter | +| A::ANested | Method[foo] | Argument[1] | lib/mylib.rb:26:16:26:16 | y | parameter | +| A::ANested | Method[foo] | Argument[self] | lib/mylib.rb:26:5:27:7 | self in foo | parameter | | B | Method[foo] | Argument[0] | lib/other.rb:6:11:6:11 | x | parameter | | B | Method[foo] | Argument[1] | lib/other.rb:6:14:6:14 | y | parameter | | B | Method[foo] | Argument[self] | lib/other.rb:6:3:7:5 | self in foo | parameter | diff --git a/ruby/ql/test/query-tests/utils/modeleditor/FrameworkModeEndpoints.expected b/ruby/ql/test/query-tests/utils/modeleditor/FrameworkModeEndpoints.expected index a42da32525d..34c43e331fe 100644 --- a/ruby/ql/test/query-tests/utils/modeleditor/FrameworkModeEndpoints.expected +++ b/ruby/ql/test/query-tests/utils/modeleditor/FrameworkModeEndpoints.expected @@ -1,13 +1,13 @@ | lib/module.rb:1:1:7:3 | M1 | mylib | M1 | | | false | module.rb | | | lib/module.rb:2:3:3:5 | foo | mylib | M1 | foo | (x,y) | false | module.rb | | | lib/module.rb:5:3:6:5 | self_foo | mylib | M1! | self_foo | (x,y) | false | module.rb | | -| lib/mylib.rb:3:1:33:3 | A | mylib | A | | | false | mylib.rb | | -| lib/mylib.rb:4:3:5:5 | initialize | mylib | A! | new | (x,y) | false | mylib.rb | | -| lib/mylib.rb:7:3:11:5 | foo | mylib | A | foo | (x,y,key1:) | false | mylib.rb | | -| lib/mylib.rb:13:3:14:5 | bar | mylib | A | bar | (x) | false | mylib.rb | | -| lib/mylib.rb:16:3:17:5 | self_foo | mylib | A! | self_foo | (x,y) | false | mylib.rb | | -| lib/mylib.rb:24:3:32:5 | ANested | mylib | A::ANested | | | false | mylib.rb | | -| lib/mylib.rb:25:5:26:7 | foo | mylib | A::ANested | foo | (x,y) | false | mylib.rb | | +| lib/mylib.rb:3:1:34:3 | A | mylib | A | | | false | mylib.rb | | +| lib/mylib.rb:4:3:6:5 | initialize | mylib | A! | new | (x,y) | false | mylib.rb | | +| lib/mylib.rb:8:3:12:5 | foo | mylib | A | foo | (x,y,key1:) | false | mylib.rb | | +| lib/mylib.rb:14:3:15:5 | bar | mylib | A | bar | (x) | false | mylib.rb | | +| lib/mylib.rb:17:3:18:5 | self_foo | mylib | A! | self_foo | (x,y) | false | mylib.rb | | +| lib/mylib.rb:25:3:33:5 | ANested | mylib | A::ANested | | | false | mylib.rb | | +| lib/mylib.rb:26:5:27:7 | foo | mylib | A::ANested | foo | (x,y) | false | mylib.rb | | | lib/other.rb:3:1:8:3 | B | mylib | B | | | false | other.rb | | | lib/other.rb:6:3:7:5 | foo | mylib | B | foo | (x,y) | false | other.rb | | | lib/other.rb:10:1:12:3 | C | mylib | C | | | false | other.rb | | diff --git a/ruby/ql/test/query-tests/utils/modeleditor/GenerateModel.expected b/ruby/ql/test/query-tests/utils/modeleditor/GenerateModel.expected index 67e192dbf99..284c7ed17d5 100644 --- a/ruby/ql/test/query-tests/utils/modeleditor/GenerateModel.expected +++ b/ruby/ql/test/query-tests/utils/modeleditor/GenerateModel.expected @@ -4,3 +4,4 @@ typeVariableModel typeModel | M1 | B | | summaryModel +| A! | Method[new] | Argument[0] | ReturnValue | value | diff --git a/ruby/ql/test/query-tests/utils/modeleditor/lib/mylib.rb b/ruby/ql/test/query-tests/utils/modeleditor/lib/mylib.rb index 66c0d35ac23..fcd3af4e2cc 100644 --- a/ruby/ql/test/query-tests/utils/modeleditor/lib/mylib.rb +++ b/ruby/ql/test/query-tests/utils/modeleditor/lib/mylib.rb @@ -2,6 +2,7 @@ require_relative "./other" class A def initialize(x, y) + @x = x end def foo(x, y, key1:, **kwargs, &block) From 02547d38398d93fe746d3ebea7a7e3e6aa116e16 Mon Sep 17 00:00:00 2001 From: Max Schaefer Date: Tue, 6 Feb 2024 14:42:16 +0000 Subject: [PATCH 090/378] Improve representation of implicit varargs arrays to more reliably filter out known flow steps. --- .../src/AutomodelApplicationModeCharacteristics.qll | 10 +++------- .../test/AutomodelApplicationModeExtraction/Test.java | 7 ++++--- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/java/ql/automodel/src/AutomodelApplicationModeCharacteristics.qll b/java/ql/automodel/src/AutomodelApplicationModeCharacteristics.qll index d203e6ca5d0..5da47bc4737 100644 --- a/java/ql/automodel/src/AutomodelApplicationModeCharacteristics.qll +++ b/java/ql/automodel/src/AutomodelApplicationModeCharacteristics.qll @@ -35,14 +35,10 @@ newtype TApplicationModeEndpoint = arg = DataFlow::getInstanceArgument(call) and not call instanceof ConstructorCall } or - TImplicitVarargsArray(Call call, DataFlow::Node arg, int idx) { + TImplicitVarargsArray(Call call, DataFlow::ImplicitVarargsArray arg, int idx) { AutomodelJavaUtil::isFromSource(call) and - exists(Argument argExpr | - arg.asExpr() = argExpr and - call.getArgument(idx) = argExpr and - argExpr.isVararg() and - not exists(int i | i < idx and call.getArgument(i).(Argument).isVararg()) - ) + call = arg.getCall() and + idx = call.getCallee().getVaragsParameterIndex() } or TMethodReturnValue(Call call) { AutomodelJavaUtil::isFromSource(call) and diff --git a/java/ql/automodel/test/AutomodelApplicationModeExtraction/Test.java b/java/ql/automodel/test/AutomodelApplicationModeExtraction/Test.java index ee8f798f9b9..4d6aff63fd0 100644 --- a/java/ql/automodel/test/AutomodelApplicationModeExtraction/Test.java +++ b/java/ql/automodel/test/AutomodelApplicationModeExtraction/Test.java @@ -40,11 +40,12 @@ class Test { ); // $ sourceModelCandidate=newInputStream(Path,OpenOption[]):ReturnValue } - public static InputStream getInputStream(String openPath) throws Exception { + public static InputStream getInputStream(String openPath, String otherPath) throws Exception { return Test.getInputStream( // the call is not a source candidate (argument to local call) Paths.get( - openPath // $ negativeSinkExample=get(String,String[]):Argument[0] // modeled as a flow step - ) // $ sourceModelCandidate=get(String,String[]):ReturnValue + openPath, // $ negativeSinkExample=get(String,String[]):Argument[0] // modeled as a flow step + otherPath + ) // $ sourceModelCandidate=get(String,String[]):ReturnValue negativeSinkExample=get(String,String[]):Argument[1] ); } From a9c0fed4f519312f14991400c60912bb40435c61 Mon Sep 17 00:00:00 2001 From: Max Schaefer Date: Tue, 6 Feb 2024 16:03:10 +0000 Subject: [PATCH 091/378] Add test showing spurious sink candidate from method overriding a method for which we have a model. --- .../com/github/codeql/test/MyWriter.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 java/ql/automodel/test/AutomodelFrameworkModeExtraction/com/github/codeql/test/MyWriter.java diff --git a/java/ql/automodel/test/AutomodelFrameworkModeExtraction/com/github/codeql/test/MyWriter.java b/java/ql/automodel/test/AutomodelFrameworkModeExtraction/com/github/codeql/test/MyWriter.java new file mode 100644 index 00000000000..c70fd3cdb26 --- /dev/null +++ b/java/ql/automodel/test/AutomodelFrameworkModeExtraction/com/github/codeql/test/MyWriter.java @@ -0,0 +1,15 @@ +package com.github.codeql.test; + +public class MyWriter extends java.io.Writer { + @Override + public void write(char[] cbuf, int off, int len) { // $ sinkModelCandidate=write(char[],int,int):Argument[this] sourceModelCandidate=write(char[],int,int):Parameter[this] sourceModelCandidate=write(char[],int,int):Parameter[0] SPURIOUS: sinkModelCandidate=write(char[],int,int):Argument[0] + } + + @Override + public void close() { // $ sinkModelCandidate=close():Argument[this] sourceModelCandidate=close():Parameter[this] + } + + @Override + public void flush() { // $ sinkModelCandidate=flush():Argument[this] sourceModelCandidate=flush():Parameter[this] + } +} From 4b9443eb152715ec91adc7d065612e99e766b83d Mon Sep 17 00:00:00 2001 From: Max Schaefer Date: Tue, 6 Feb 2024 16:16:58 +0000 Subject: [PATCH 092/378] Properly recognise existing models involving subtypes. If an existing source/sink model specifies `subtypes=True` we should apply it to endpoints on overriding methods. --- ...utomodelApplicationModeCharacteristics.qll | 53 ++++++++++++----- .../AutomodelFrameworkModeCharacteristics.qll | 59 +++++++++++++------ .../com/github/codeql/test/MyWriter.java | 2 +- 3 files changed, 80 insertions(+), 34 deletions(-) diff --git a/java/ql/automodel/src/AutomodelApplicationModeCharacteristics.qll b/java/ql/automodel/src/AutomodelApplicationModeCharacteristics.qll index 5da47bc4737..ddbf91f31e9 100644 --- a/java/ql/automodel/src/AutomodelApplicationModeCharacteristics.qll +++ b/java/ql/automodel/src/AutomodelApplicationModeCharacteristics.qll @@ -251,8 +251,11 @@ module ApplicationCandidatesImpl implements SharedCharacteristics::CandidateSig predicate isKnownKind = AutomodelJavaUtil::isKnownKind/2; predicate isSink(Endpoint e, string kind, string provenance) { - exists(string package, string type, string name, string signature, string ext, string input | - sinkSpec(e, package, type, name, signature, ext, input) and + exists( + string package, string type, boolean subtypes, string name, string signature, string ext, + string input + | + sinkSpec(e, package, type, subtypes, name, signature, ext, input) and ExternalFlow::sinkModel(package, type, _, name, [signature, ""], ext, input, kind, provenance) ) or @@ -260,36 +263,56 @@ module ApplicationCandidatesImpl implements SharedCharacteristics::CandidateSig } predicate isSource(Endpoint e, string kind, string provenance) { - exists(string package, string type, string name, string signature, string ext, string output | - sourceSpec(e, package, type, name, signature, ext, output) and - ExternalFlow::sourceModel(package, type, _, name, [signature, ""], ext, output, kind, + exists( + string package, string type, boolean subtypes, string name, string signature, string ext, + string output + | + sourceSpec(e, package, type, subtypes, name, signature, ext, output) and + ExternalFlow::sourceModel(package, type, subtypes, name, [signature, ""], ext, output, kind, provenance) ) } predicate isNeutral(Endpoint e) { exists(string package, string type, string name, string signature | - sinkSpec(e, package, type, name, signature, _, _) and + sinkSpec(e, package, type, _, name, signature, _, _) and ExternalFlow::neutralModel(package, type, name, [signature, ""], "sink", _) ) } - // XXX how to extend to support sources? - additional predicate sinkSpec( - Endpoint e, string package, string type, string name, string signature, string ext, string input + /** + * Holds if the endpoint concerns a callable with the given package, type, name and signature. + * + * If `subtypes` is `false`, only the exact callable is considered. If `true`, the callable and + * all its overrides are considered. + */ + additional predicate endpointCallable( + Endpoint e, string package, string type, boolean subtypes, string name, string signature ) { - e.getCallable().hasQualifiedName(package, type, name) and - signature = ExternalFlow::paramsString(e.getCallable()) and + exists(Callable c | + c = e.getCallable() and subtypes in [true, false] + or + e.getCallable().(Method).getSourceDeclaration().overrides+(c) and subtypes = true + | + c.hasQualifiedName(package, type, name) and + signature = ExternalFlow::paramsString(c) + ) + } + + additional predicate sinkSpec( + Endpoint e, string package, string type, boolean subtypes, string name, string signature, + string ext, string input + ) { + endpointCallable(e, package, type, subtypes, name, signature) and ext = "" and input = e.getMaDInput() } additional predicate sourceSpec( - Endpoint e, string package, string type, string name, string signature, string ext, - string output + Endpoint e, string package, string type, boolean subtypes, string name, string signature, + string ext, string output ) { - e.getCallable().hasQualifiedName(package, type, name) and - signature = ExternalFlow::paramsString(e.getCallable()) and + endpointCallable(e, package, type, subtypes, name, signature) and ext = "" and output = e.getMaDOutput() } diff --git a/java/ql/automodel/src/AutomodelFrameworkModeCharacteristics.qll b/java/ql/automodel/src/AutomodelFrameworkModeCharacteristics.qll index 6981e0369b5..a07666b9684 100644 --- a/java/ql/automodel/src/AutomodelFrameworkModeCharacteristics.qll +++ b/java/ql/automodel/src/AutomodelFrameworkModeCharacteristics.qll @@ -209,46 +209,69 @@ module FrameworkCandidatesImpl implements SharedCharacteristics::CandidateSig { predicate isKnownKind = AutomodelJavaUtil::isKnownKind/2; predicate isSink(Endpoint e, string kind, string provenance) { - exists(string package, string type, string name, string signature, string ext, string input | - sinkSpec(e, package, type, name, signature, ext, input) and + exists( + string package, string type, boolean subtypes, string name, string signature, string ext, + string input + | + sinkSpec(e, package, type, subtypes, name, signature, ext, input) and ExternalFlow::sinkModel(package, type, _, name, [signature, ""], ext, input, kind, provenance) ) } predicate isSource(Endpoint e, string kind, string provenance) { - exists(string package, string type, string name, string signature, string ext, string output | - sourceSpec(e, package, type, name, signature, ext, output) and - ExternalFlow::sourceModel(package, type, _, name, [signature, ""], ext, output, kind, + exists( + string package, string type, boolean subtypes, string name, string signature, string ext, + string output + | + sourceSpec(e, package, type, subtypes, name, signature, ext, output) and + ExternalFlow::sourceModel(package, type, subtypes, name, [signature, ""], ext, output, kind, provenance) ) } predicate isNeutral(Endpoint e) { exists(string package, string type, string name, string signature | - ( - sinkSpec(e, package, type, name, signature, _, _) - or - sourceSpec(e, package, type, name, signature, _, _) - ) and + sinkSpec(e, package, type, _, name, signature, _, _) + or + sourceSpec(e, package, type, _, name, signature, _, _) + | ExternalFlow::neutralModel(package, type, name, [signature, ""], "sink", _) ) } - additional predicate sinkSpec( - Endpoint e, string package, string type, string name, string signature, string ext, string input + /** + * Holds if the endpoint concerns a callable with the given package, type, name and signature. + * + * If `subtypes` is `false`, only the exact callable is considered. If `true`, the callable and + * all its overrides are considered. + */ + additional predicate endpointCallable( + Endpoint e, string package, string type, boolean subtypes, string name, string signature ) { - e.getCallable().hasQualifiedName(package, type, name) and - signature = ExternalFlow::paramsString(e.getCallable()) and + exists(Callable c | + c = e.getCallable() and subtypes in [true, false] + or + e.getCallable().(Method).getSourceDeclaration().overrides+(c) and subtypes = true + | + c.hasQualifiedName(package, type, name) and + signature = ExternalFlow::paramsString(c) + ) + } + + additional predicate sinkSpec( + Endpoint e, string package, string type, boolean subtypes, string name, string signature, + string ext, string input + ) { + endpointCallable(e, package, type, subtypes, name, signature) and ext = "" and input = e.getMaDInput() } additional predicate sourceSpec( - Endpoint e, string package, string type, string name, string signature, string ext, - string output + Endpoint e, string package, string type, boolean subtypes, string name, string signature, + string ext, string output ) { - e.getCallable().hasQualifiedName(package, type, name) and - signature = ExternalFlow::paramsString(e.getCallable()) and + endpointCallable(e, package, type, subtypes, name, signature) and ext = "" and output = e.getMaDOutput() } diff --git a/java/ql/automodel/test/AutomodelFrameworkModeExtraction/com/github/codeql/test/MyWriter.java b/java/ql/automodel/test/AutomodelFrameworkModeExtraction/com/github/codeql/test/MyWriter.java index c70fd3cdb26..b31ace21b4d 100644 --- a/java/ql/automodel/test/AutomodelFrameworkModeExtraction/com/github/codeql/test/MyWriter.java +++ b/java/ql/automodel/test/AutomodelFrameworkModeExtraction/com/github/codeql/test/MyWriter.java @@ -2,7 +2,7 @@ package com.github.codeql.test; public class MyWriter extends java.io.Writer { @Override - public void write(char[] cbuf, int off, int len) { // $ sinkModelCandidate=write(char[],int,int):Argument[this] sourceModelCandidate=write(char[],int,int):Parameter[this] sourceModelCandidate=write(char[],int,int):Parameter[0] SPURIOUS: sinkModelCandidate=write(char[],int,int):Argument[0] + public void write(char[] cbuf, int off, int len) { // $ sinkModelCandidate=write(char[],int,int):Argument[this] sourceModelCandidate=write(char[],int,int):Parameter[this] sourceModelCandidate=write(char[],int,int):Parameter[0] } @Override From 48105db5b0ab133be8d49472770c4a5934528d3a Mon Sep 17 00:00:00 2001 From: Max Schaefer Date: Tue, 6 Feb 2024 16:24:33 +0000 Subject: [PATCH 093/378] Fix `isNeutral` predicates. --- .../src/AutomodelApplicationModeCharacteristics.qll | 9 +++++++-- .../src/AutomodelFrameworkModeCharacteristics.qll | 10 ++++++---- .../AutomodelFrameworkModeExtraction/java/io/File.java | 4 ++-- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/java/ql/automodel/src/AutomodelApplicationModeCharacteristics.qll b/java/ql/automodel/src/AutomodelApplicationModeCharacteristics.qll index ddbf91f31e9..938a3a52528 100644 --- a/java/ql/automodel/src/AutomodelApplicationModeCharacteristics.qll +++ b/java/ql/automodel/src/AutomodelApplicationModeCharacteristics.qll @@ -274,9 +274,14 @@ module ApplicationCandidatesImpl implements SharedCharacteristics::CandidateSig } predicate isNeutral(Endpoint e) { - exists(string package, string type, string name, string signature | + exists(string package, string type, string name, string signature, string endpointType | sinkSpec(e, package, type, _, name, signature, _, _) and - ExternalFlow::neutralModel(package, type, name, [signature, ""], "sink", _) + endpointType = "sink" + or + sourceSpec(e, package, type, _, name, signature, _, _) and + endpointType = "source" + | + ExternalFlow::neutralModel(package, type, name, [signature, ""], endpointType, _) ) } diff --git a/java/ql/automodel/src/AutomodelFrameworkModeCharacteristics.qll b/java/ql/automodel/src/AutomodelFrameworkModeCharacteristics.qll index a07666b9684..dd581aa0eeb 100644 --- a/java/ql/automodel/src/AutomodelFrameworkModeCharacteristics.qll +++ b/java/ql/automodel/src/AutomodelFrameworkModeCharacteristics.qll @@ -230,12 +230,14 @@ module FrameworkCandidatesImpl implements SharedCharacteristics::CandidateSig { } predicate isNeutral(Endpoint e) { - exists(string package, string type, string name, string signature | - sinkSpec(e, package, type, _, name, signature, _, _) + exists(string package, string type, string name, string signature, string endpointType | + sinkSpec(e, package, type, _, name, signature, _, _) and + endpointType = "sink" or - sourceSpec(e, package, type, _, name, signature, _, _) + sourceSpec(e, package, type, _, name, signature, _, _) and + endpointType = "source" | - ExternalFlow::neutralModel(package, type, name, [signature, ""], "sink", _) + ExternalFlow::neutralModel(package, type, name, [signature, ""], endpointType, _) ) } diff --git a/java/ql/automodel/test/AutomodelFrameworkModeExtraction/java/io/File.java b/java/ql/automodel/test/AutomodelFrameworkModeExtraction/java/io/File.java index c23b6165c64..8bfe83e2339 100644 --- a/java/ql/automodel/test/AutomodelFrameworkModeExtraction/java/io/File.java +++ b/java/ql/automodel/test/AutomodelFrameworkModeExtraction/java/io/File.java @@ -1,8 +1,8 @@ package java.io; public class File { - public int compareTo( // $ negativeSinkExample=compareTo(File):Argument[this] negativeSourceExample=compareTo(File):Parameter[this] // modeled as neutral - File pathname // $ negativeSinkExample=compareTo(File):Argument[0] negativeSourceExample=compareTo(File):Parameter[0] // modeled as neutral + public int compareTo( // $ negativeSinkExample=compareTo(File):Argument[this] sourceModelCandidate=compareTo(File):Parameter[this] // modeled as neutral for sinks + File pathname // $ negativeSinkExample=compareTo(File):Argument[0] sourceModelCandidate=compareTo(File):Parameter[0] // modeled as neutral for sinks ) { return 0; } From a58dd45d0b663c7adad020f89055ee72e32f42a0 Mon Sep 17 00:00:00 2001 From: Dave Bartolomeo Date: Thu, 8 Feb 2024 09:28:34 -0500 Subject: [PATCH 094/378] Revert "Merge pull request #15522 from github/release-prep/2.16.2" This reverts commit c4c8cd6b348d41fc4471564a7487e0e8f0295925, reversing changes made to 525f27173df633b291c4a77a1ba6e723f4190a55. --- cpp/ql/lib/CHANGELOG.md | 7 ------- .../0.12.5.md => 2024-01-30-preproc-block.md} | 8 +++----- .../lib/change-notes/2024-01-30-throwing-model.md | 4 ++++ cpp/ql/lib/codeql-pack.release.yml | 2 +- cpp/ql/lib/qlpack.yml | 2 +- cpp/ql/src/CHANGELOG.md | 10 ---------- .../change-notes/2024-01-19-extracted-files.md | 4 ++++ ...e_positive_incorrect_string_type_conversion.md | 4 ++++ .../2024-01-29-incorrectly-checked-scanf-2.md | 4 ++++ .../2024-01-29-incorrectly-checked-scanf.md | 4 ++++ ...24-01-29-uninitialized-local-false-positive.md | 5 +++++ cpp/ql/src/change-notes/released/0.9.4.md | 9 --------- cpp/ql/src/codeql-pack.release.yml | 2 +- cpp/ql/src/qlpack.yml | 2 +- csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md | 4 ---- .../Solorigate/lib/change-notes/released/1.7.8.md | 3 --- .../Solorigate/lib/codeql-pack.release.yml | 2 +- csharp/ql/campaigns/Solorigate/lib/qlpack.yml | 2 +- csharp/ql/campaigns/Solorigate/src/CHANGELOG.md | 4 ---- .../Solorigate/src/change-notes/released/1.7.8.md | 3 --- .../Solorigate/src/codeql-pack.release.yml | 2 +- csharp/ql/campaigns/Solorigate/src/qlpack.yml | 2 +- csharp/ql/lib/CHANGELOG.md | 11 ----------- .../2024-01-25-extractor-option-logging.md | 6 ++++++ .../2024-01-26-collection-expression.md | 4 ++++ .../2024-01-31-compilation-expanded-args.md | 5 +++++ csharp/ql/lib/change-notes/released/0.8.8.md | 10 ---------- csharp/ql/lib/codeql-pack.release.yml | 2 +- csharp/ql/lib/qlpack.yml | 2 +- csharp/ql/src/CHANGELOG.md | 6 ------ ....8.md => 2024-01-22-url-redirect-sanitizer.md} | 7 +++---- csharp/ql/src/codeql-pack.release.yml | 2 +- csharp/ql/src/qlpack.yml | 2 +- go/ql/consistency-queries/CHANGELOG.md | 4 ---- .../change-notes/released/0.0.7.md | 3 --- go/ql/consistency-queries/codeql-pack.release.yml | 2 +- go/ql/consistency-queries/qlpack.yml | 2 +- go/ql/lib/CHANGELOG.md | 4 ---- go/ql/lib/change-notes/released/0.7.8.md | 3 --- go/ql/lib/codeql-pack.release.yml | 2 +- go/ql/lib/qlpack.yml | 2 +- go/ql/src/CHANGELOG.md | 4 ---- go/ql/src/change-notes/released/0.7.8.md | 3 --- go/ql/src/codeql-pack.release.yml | 2 +- go/ql/src/qlpack.yml | 2 +- java/ql/automodel/src/CHANGELOG.md | 4 ---- .../automodel/src/change-notes/released/0.0.14.md | 3 --- java/ql/automodel/src/codeql-pack.release.yml | 2 +- java/ql/automodel/src/qlpack.yml | 2 +- java/ql/lib/CHANGELOG.md | 10 ---------- ...3-add-uuid-and-date-to-simpletypesanitizer.md} | 11 +++-------- java/ql/lib/change-notes/2024-01-24-new-models.md | 7 +++++++ java/ql/lib/codeql-pack.release.yml | 2 +- java/ql/lib/qlpack.yml | 2 +- java/ql/src/CHANGELOG.md | 15 ++++----------- ...-01-15-android-sensitive-notification-query.md | 4 ++++ ...24-01-29-android-sensitive-text-field-query.md | 4 ++++ java/ql/src/change-notes/released/0.8.8.md | 6 ------ java/ql/src/codeql-pack.release.yml | 2 +- java/ql/src/qlpack.yml | 2 +- javascript/ql/lib/CHANGELOG.md | 4 ---- javascript/ql/lib/change-notes/released/0.8.8.md | 3 --- javascript/ql/lib/codeql-pack.release.yml | 2 +- javascript/ql/lib/qlpack.yml | 2 +- javascript/ql/src/CHANGELOG.md | 4 ---- javascript/ql/src/change-notes/released/0.8.8.md | 3 --- javascript/ql/src/codeql-pack.release.yml | 2 +- javascript/ql/src/qlpack.yml | 2 +- misc/suite-helpers/CHANGELOG.md | 4 ---- misc/suite-helpers/change-notes/released/0.7.8.md | 3 --- misc/suite-helpers/codeql-pack.release.yml | 2 +- misc/suite-helpers/qlpack.yml | 2 +- python/ql/lib/CHANGELOG.md | 10 ---------- .../change-notes/2024-01-21-regex-ascii-flag.md | 4 ++++ .../ql/lib/change-notes/2024-01-22-html-escape.md | 4 ++++ python/ql/lib/change-notes/released/0.11.8.md | 9 --------- python/ql/lib/codeql-pack.release.yml | 2 +- python/ql/lib/qlpack.yml | 2 +- python/ql/src/CHANGELOG.md | 4 ---- python/ql/src/change-notes/released/0.9.8.md | 3 --- python/ql/src/codeql-pack.release.yml | 2 +- python/ql/src/qlpack.yml | 2 +- ruby/ql/lib/CHANGELOG.md | 6 ------ .../0.8.8.md => 2024-01-22-erb-render-flow.md} | 7 +++---- ruby/ql/lib/codeql-pack.release.yml | 2 +- ruby/ql/lib/qlpack.yml | 2 +- ruby/ql/src/CHANGELOG.md | 11 ----------- .../2023-12-18-insecure-randomness-query.md | 4 ++++ .../2024-01-30-unsafe-deserialization-sinks.md | 5 +++++ ruby/ql/src/change-notes/released/0.8.8.md | 10 ---------- ruby/ql/src/codeql-pack.release.yml | 2 +- ruby/ql/src/qlpack.yml | 2 +- shared/controlflow/CHANGELOG.md | 4 ---- shared/controlflow/change-notes/released/0.1.8.md | 3 --- shared/controlflow/codeql-pack.release.yml | 2 +- shared/controlflow/qlpack.yml | 2 +- shared/dataflow/CHANGELOG.md | 4 ---- shared/dataflow/change-notes/released/0.1.8.md | 3 --- shared/dataflow/codeql-pack.release.yml | 2 +- shared/dataflow/qlpack.yml | 2 +- shared/mad/CHANGELOG.md | 4 ---- shared/mad/change-notes/released/0.2.8.md | 3 --- shared/mad/codeql-pack.release.yml | 2 +- shared/mad/qlpack.yml | 2 +- shared/rangeanalysis/CHANGELOG.md | 4 ---- .../rangeanalysis/change-notes/released/0.0.7.md | 3 --- shared/rangeanalysis/codeql-pack.release.yml | 2 +- shared/rangeanalysis/qlpack.yml | 2 +- shared/regex/CHANGELOG.md | 4 ---- shared/regex/change-notes/released/0.2.8.md | 3 --- shared/regex/codeql-pack.release.yml | 2 +- shared/regex/qlpack.yml | 2 +- shared/ssa/CHANGELOG.md | 4 ---- shared/ssa/change-notes/released/0.2.8.md | 3 --- shared/ssa/codeql-pack.release.yml | 2 +- shared/ssa/qlpack.yml | 2 +- shared/threat-models/CHANGELOG.md | 4 ---- .../threat-models/change-notes/released/0.0.7.md | 3 --- shared/threat-models/codeql-pack.release.yml | 2 +- shared/threat-models/qlpack.yml | 2 +- shared/tutorial/CHANGELOG.md | 4 ---- shared/tutorial/change-notes/released/0.2.8.md | 3 --- shared/tutorial/codeql-pack.release.yml | 2 +- shared/tutorial/qlpack.yml | 2 +- shared/typetracking/CHANGELOG.md | 4 ---- .../typetracking/change-notes/released/0.2.8.md | 3 --- shared/typetracking/codeql-pack.release.yml | 2 +- shared/typetracking/qlpack.yml | 2 +- shared/typos/CHANGELOG.md | 4 ---- shared/typos/change-notes/released/0.2.8.md | 3 --- shared/typos/codeql-pack.release.yml | 2 +- shared/typos/qlpack.yml | 2 +- shared/util/CHANGELOG.md | 4 ---- shared/util/change-notes/released/0.2.8.md | 3 --- shared/util/codeql-pack.release.yml | 2 +- shared/util/qlpack.yml | 2 +- shared/yaml/CHANGELOG.md | 4 ---- shared/yaml/change-notes/released/0.2.8.md | 3 --- shared/yaml/codeql-pack.release.yml | 2 +- shared/yaml/qlpack.yml | 2 +- swift/ql/lib/CHANGELOG.md | 4 ---- swift/ql/lib/change-notes/released/0.3.8.md | 3 --- swift/ql/lib/codeql-pack.release.yml | 2 +- swift/ql/lib/qlpack.yml | 2 +- swift/ql/src/CHANGELOG.md | 4 ---- swift/ql/src/change-notes/released/0.3.8.md | 3 --- swift/ql/src/codeql-pack.release.yml | 2 +- swift/ql/src/qlpack.yml | 2 +- 148 files changed, 154 insertions(+), 381 deletions(-) rename cpp/ql/lib/change-notes/{released/0.12.5.md => 2024-01-30-preproc-block.md} (55%) create mode 100644 cpp/ql/lib/change-notes/2024-01-30-throwing-model.md create mode 100644 cpp/ql/src/change-notes/2024-01-19-extracted-files.md create mode 100644 cpp/ql/src/change-notes/2024-01-29-false_positive_incorrect_string_type_conversion.md create mode 100644 cpp/ql/src/change-notes/2024-01-29-incorrectly-checked-scanf-2.md create mode 100644 cpp/ql/src/change-notes/2024-01-29-incorrectly-checked-scanf.md create mode 100644 cpp/ql/src/change-notes/2024-01-29-uninitialized-local-false-positive.md delete mode 100644 cpp/ql/src/change-notes/released/0.9.4.md delete mode 100644 csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.8.md delete mode 100644 csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.8.md create mode 100644 csharp/ql/lib/change-notes/2024-01-25-extractor-option-logging.md create mode 100644 csharp/ql/lib/change-notes/2024-01-26-collection-expression.md create mode 100644 csharp/ql/lib/change-notes/2024-01-31-compilation-expanded-args.md delete mode 100644 csharp/ql/lib/change-notes/released/0.8.8.md rename csharp/ql/src/change-notes/{released/0.8.8.md => 2024-01-22-url-redirect-sanitizer.md} (75%) delete mode 100644 go/ql/consistency-queries/change-notes/released/0.0.7.md delete mode 100644 go/ql/lib/change-notes/released/0.7.8.md delete mode 100644 go/ql/src/change-notes/released/0.7.8.md delete mode 100644 java/ql/automodel/src/change-notes/released/0.0.14.md rename java/ql/lib/change-notes/{released/0.8.8.md => 2024-01-23-add-uuid-and-date-to-simpletypesanitizer.md} (52%) create mode 100644 java/ql/lib/change-notes/2024-01-24-new-models.md create mode 100644 java/ql/src/change-notes/2024-01-15-android-sensitive-notification-query.md create mode 100644 java/ql/src/change-notes/2024-01-29-android-sensitive-text-field-query.md delete mode 100644 java/ql/src/change-notes/released/0.8.8.md delete mode 100644 javascript/ql/lib/change-notes/released/0.8.8.md delete mode 100644 javascript/ql/src/change-notes/released/0.8.8.md delete mode 100644 misc/suite-helpers/change-notes/released/0.7.8.md create mode 100644 python/ql/lib/change-notes/2024-01-21-regex-ascii-flag.md create mode 100644 python/ql/lib/change-notes/2024-01-22-html-escape.md delete mode 100644 python/ql/lib/change-notes/released/0.11.8.md delete mode 100644 python/ql/src/change-notes/released/0.9.8.md rename ruby/ql/lib/change-notes/{released/0.8.8.md => 2024-01-22-erb-render-flow.md} (79%) create mode 100644 ruby/ql/src/change-notes/2023-12-18-insecure-randomness-query.md create mode 100644 ruby/ql/src/change-notes/2024-01-30-unsafe-deserialization-sinks.md delete mode 100644 ruby/ql/src/change-notes/released/0.8.8.md delete mode 100644 shared/controlflow/change-notes/released/0.1.8.md delete mode 100644 shared/dataflow/change-notes/released/0.1.8.md delete mode 100644 shared/mad/change-notes/released/0.2.8.md delete mode 100644 shared/rangeanalysis/change-notes/released/0.0.7.md delete mode 100644 shared/regex/change-notes/released/0.2.8.md delete mode 100644 shared/ssa/change-notes/released/0.2.8.md delete mode 100644 shared/threat-models/change-notes/released/0.0.7.md delete mode 100644 shared/tutorial/change-notes/released/0.2.8.md delete mode 100644 shared/typetracking/change-notes/released/0.2.8.md delete mode 100644 shared/typos/change-notes/released/0.2.8.md delete mode 100644 shared/util/change-notes/released/0.2.8.md delete mode 100644 shared/yaml/change-notes/released/0.2.8.md delete mode 100644 swift/ql/lib/change-notes/released/0.3.8.md delete mode 100644 swift/ql/src/change-notes/released/0.3.8.md diff --git a/cpp/ql/lib/CHANGELOG.md b/cpp/ql/lib/CHANGELOG.md index b552a329250..dc092f2ed35 100644 --- a/cpp/ql/lib/CHANGELOG.md +++ b/cpp/ql/lib/CHANGELOG.md @@ -1,10 +1,3 @@ -## 0.12.5 - -### New Features - -* Added the `PreprocBlock.qll` library to this repository. This library offers a view of `#if`, `#elif`, `#else` and similar directives as a tree with navigable parent-child relationships. -* Added a new `ThrowingFunction` abstract class that can be used to model an external function that may throw an exception. - ## 0.12.4 ### Minor Analysis Improvements diff --git a/cpp/ql/lib/change-notes/released/0.12.5.md b/cpp/ql/lib/change-notes/2024-01-30-preproc-block.md similarity index 55% rename from cpp/ql/lib/change-notes/released/0.12.5.md rename to cpp/ql/lib/change-notes/2024-01-30-preproc-block.md index 1ae4668a5c9..6995ec954ff 100644 --- a/cpp/ql/lib/change-notes/released/0.12.5.md +++ b/cpp/ql/lib/change-notes/2024-01-30-preproc-block.md @@ -1,6 +1,4 @@ -## 0.12.5 - -### New Features - +--- +category: feature +--- * Added the `PreprocBlock.qll` library to this repository. This library offers a view of `#if`, `#elif`, `#else` and similar directives as a tree with navigable parent-child relationships. -* Added a new `ThrowingFunction` abstract class that can be used to model an external function that may throw an exception. diff --git a/cpp/ql/lib/change-notes/2024-01-30-throwing-model.md b/cpp/ql/lib/change-notes/2024-01-30-throwing-model.md new file mode 100644 index 00000000000..591cc8cc771 --- /dev/null +++ b/cpp/ql/lib/change-notes/2024-01-30-throwing-model.md @@ -0,0 +1,4 @@ +--- +category: feature +--- +* Added a new `ThrowingFunction` abstract class that can be used to model an external function that may throw an exception. \ No newline at end of file diff --git a/cpp/ql/lib/codeql-pack.release.yml b/cpp/ql/lib/codeql-pack.release.yml index 79f80ae516c..b458bb47c53 100644 --- a/cpp/ql/lib/codeql-pack.release.yml +++ b/cpp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.12.5 +lastReleaseVersion: 0.12.4 diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml index b1b4172e977..f0479b167c6 100644 --- a/cpp/ql/lib/qlpack.yml +++ b/cpp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-all -version: 0.12.5 +version: 0.12.5-dev groups: cpp dbscheme: semmlecode.cpp.dbscheme extractor: cpp diff --git a/cpp/ql/src/CHANGELOG.md b/cpp/ql/src/CHANGELOG.md index 44d00c1d8e4..0e67defb949 100644 --- a/cpp/ql/src/CHANGELOG.md +++ b/cpp/ql/src/CHANGELOG.md @@ -1,13 +1,3 @@ -## 0.9.4 - -### Minor Analysis Improvements - -* Corrected 2 false positive with `cpp/incorrect-string-type-conversion`: conversion of byte arrays to wchar and new array allocations converted to wchar. -* The "Incorrect return-value check for a 'scanf'-like function" query (`cpp/incorrectly-checked-scanf`) no longer reports an alert when an explicit check for EOF is added. -* The "Incorrect return-value check for a 'scanf'-like function" query (`cpp/incorrectly-checked-scanf`) now recognizes more EOF checks. -* The "Potentially uninitialized local variable" query (`cpp/uninitialized-local`) no longer reports an alert when the local variable is used as a qualifier to a static member function call. -* The diagnostic query `cpp/diagnostics/successfully-extracted-files` now considers any C/C++ file seen during extraction, even one with some errors, to be extracted / scanned. This affects the Code Scanning UI measure of scanned C/C++ files. - ## 0.9.3 ### Minor Analysis Improvements diff --git a/cpp/ql/src/change-notes/2024-01-19-extracted-files.md b/cpp/ql/src/change-notes/2024-01-19-extracted-files.md new file mode 100644 index 00000000000..df6de1576ac --- /dev/null +++ b/cpp/ql/src/change-notes/2024-01-19-extracted-files.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* The diagnostic query `cpp/diagnostics/successfully-extracted-files` now considers any C/C++ file seen during extraction, even one with some errors, to be extracted / scanned. This affects the Code Scanning UI measure of scanned C/C++ files. diff --git a/cpp/ql/src/change-notes/2024-01-29-false_positive_incorrect_string_type_conversion.md b/cpp/ql/src/change-notes/2024-01-29-false_positive_incorrect_string_type_conversion.md new file mode 100644 index 00000000000..8f081c746f1 --- /dev/null +++ b/cpp/ql/src/change-notes/2024-01-29-false_positive_incorrect_string_type_conversion.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Corrected 2 false positive with `cpp/incorrect-string-type-conversion`: conversion of byte arrays to wchar and new array allocations converted to wchar. \ No newline at end of file diff --git a/cpp/ql/src/change-notes/2024-01-29-incorrectly-checked-scanf-2.md b/cpp/ql/src/change-notes/2024-01-29-incorrectly-checked-scanf-2.md new file mode 100644 index 00000000000..cc361145db9 --- /dev/null +++ b/cpp/ql/src/change-notes/2024-01-29-incorrectly-checked-scanf-2.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* The "Incorrect return-value check for a 'scanf'-like function" query (`cpp/incorrectly-checked-scanf`) now recognizes more EOF checks. diff --git a/cpp/ql/src/change-notes/2024-01-29-incorrectly-checked-scanf.md b/cpp/ql/src/change-notes/2024-01-29-incorrectly-checked-scanf.md new file mode 100644 index 00000000000..7085b9ce0a8 --- /dev/null +++ b/cpp/ql/src/change-notes/2024-01-29-incorrectly-checked-scanf.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* The "Incorrect return-value check for a 'scanf'-like function" query (`cpp/incorrectly-checked-scanf`) no longer reports an alert when an explicit check for EOF is added. diff --git a/cpp/ql/src/change-notes/2024-01-29-uninitialized-local-false-positive.md b/cpp/ql/src/change-notes/2024-01-29-uninitialized-local-false-positive.md new file mode 100644 index 00000000000..0d07482b755 --- /dev/null +++ b/cpp/ql/src/change-notes/2024-01-29-uninitialized-local-false-positive.md @@ -0,0 +1,5 @@ +--- +category: minorAnalysis +--- +* The "Potentially uninitialized local variable" query (`cpp/uninitialized-local`) no longer reports an alert when the local variable is used as a qualifier to a static member function call. +* ``` \ No newline at end of file diff --git a/cpp/ql/src/change-notes/released/0.9.4.md b/cpp/ql/src/change-notes/released/0.9.4.md deleted file mode 100644 index bc6e71d7054..00000000000 --- a/cpp/ql/src/change-notes/released/0.9.4.md +++ /dev/null @@ -1,9 +0,0 @@ -## 0.9.4 - -### Minor Analysis Improvements - -* Corrected 2 false positive with `cpp/incorrect-string-type-conversion`: conversion of byte arrays to wchar and new array allocations converted to wchar. -* The "Incorrect return-value check for a 'scanf'-like function" query (`cpp/incorrectly-checked-scanf`) no longer reports an alert when an explicit check for EOF is added. -* The "Incorrect return-value check for a 'scanf'-like function" query (`cpp/incorrectly-checked-scanf`) now recognizes more EOF checks. -* The "Potentially uninitialized local variable" query (`cpp/uninitialized-local`) no longer reports an alert when the local variable is used as a qualifier to a static member function call. -* The diagnostic query `cpp/diagnostics/successfully-extracted-files` now considers any C/C++ file seen during extraction, even one with some errors, to be extracted / scanned. This affects the Code Scanning UI measure of scanned C/C++ files. diff --git a/cpp/ql/src/codeql-pack.release.yml b/cpp/ql/src/codeql-pack.release.yml index 694907ca221..7af7247cbb0 100644 --- a/cpp/ql/src/codeql-pack.release.yml +++ b/cpp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.9.4 +lastReleaseVersion: 0.9.3 diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml index 0da41987b3e..a04a6468617 100644 --- a/cpp/ql/src/qlpack.yml +++ b/cpp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-queries -version: 0.9.4 +version: 0.9.4-dev groups: - cpp - queries diff --git a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md index 1e9fa50c21f..8afcdeb67f3 100644 --- a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md @@ -1,7 +1,3 @@ -## 1.7.8 - -No user-facing changes. - ## 1.7.7 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.8.md b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.8.md deleted file mode 100644 index 89c236d93c5..00000000000 --- a/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.8.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.7.8 - -No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml b/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml index e003efd5127..df4010bd267 100644 --- a/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml +++ b/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.7.8 +lastReleaseVersion: 1.7.7 diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml index 77b1c8b5154..56cadaf8534 100644 --- a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-all -version: 1.7.8 +version: 1.7.8-dev groups: - csharp - solorigate diff --git a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md index 1e9fa50c21f..8afcdeb67f3 100644 --- a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md @@ -1,7 +1,3 @@ -## 1.7.8 - -No user-facing changes. - ## 1.7.7 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.8.md b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.8.md deleted file mode 100644 index 89c236d93c5..00000000000 --- a/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.8.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.7.8 - -No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml b/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml index e003efd5127..df4010bd267 100644 --- a/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml +++ b/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.7.8 +lastReleaseVersion: 1.7.7 diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml index 9851e27c691..0b783c75d5a 100644 --- a/csharp/ql/campaigns/Solorigate/src/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-queries -version: 1.7.8 +version: 1.7.8-dev groups: - csharp - solorigate diff --git a/csharp/ql/lib/CHANGELOG.md b/csharp/ql/lib/CHANGELOG.md index 196cd5ecc92..0b168b22df6 100644 --- a/csharp/ql/lib/CHANGELOG.md +++ b/csharp/ql/lib/CHANGELOG.md @@ -1,14 +1,3 @@ -## 0.8.8 - -### Minor Analysis Improvements - -* Added a new database relation to store compiler arguments specified inside `@[...].rsp` file arguments. The arguments -are returned by `Compilation::getExpandedArgument/1` and `Compilation::getExpandedArguments/0`. -* C# 12: Added extractor, QL library and data flow support for collection expressions like `[1, y, 4, .. x]`. -* The C# extractor now accepts an extractor option `logging.verbosity` that specifies the verbosity of the logs. The -option is added via `codeql database create --language=csharp -Ologging.verbosity=debug ...` or by setting the -corresponding environment variable `CODEQL_EXTRACTOR_CSHARP_OPTION_LOGGING_VERBOSITY`. - ## 0.8.7 ### Minor Analysis Improvements diff --git a/csharp/ql/lib/change-notes/2024-01-25-extractor-option-logging.md b/csharp/ql/lib/change-notes/2024-01-25-extractor-option-logging.md new file mode 100644 index 00000000000..71cb3202675 --- /dev/null +++ b/csharp/ql/lib/change-notes/2024-01-25-extractor-option-logging.md @@ -0,0 +1,6 @@ +--- +category: minorAnalysis +--- +* The C# extractor now accepts an extractor option `logging.verbosity` that specifies the verbosity of the logs. The +option is added via `codeql database create --language=csharp -Ologging.verbosity=debug ...` or by setting the +corresponding environment variable `CODEQL_EXTRACTOR_CSHARP_OPTION_LOGGING_VERBOSITY`. \ No newline at end of file diff --git a/csharp/ql/lib/change-notes/2024-01-26-collection-expression.md b/csharp/ql/lib/change-notes/2024-01-26-collection-expression.md new file mode 100644 index 00000000000..10a958dcf47 --- /dev/null +++ b/csharp/ql/lib/change-notes/2024-01-26-collection-expression.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* C# 12: Added extractor, QL library and data flow support for collection expressions like `[1, y, 4, .. x]`. diff --git a/csharp/ql/lib/change-notes/2024-01-31-compilation-expanded-args.md b/csharp/ql/lib/change-notes/2024-01-31-compilation-expanded-args.md new file mode 100644 index 00000000000..8767c0d1d65 --- /dev/null +++ b/csharp/ql/lib/change-notes/2024-01-31-compilation-expanded-args.md @@ -0,0 +1,5 @@ +--- +category: minorAnalysis +--- +* Added a new database relation to store compiler arguments specified inside `@[...].rsp` file arguments. The arguments +are returned by `Compilation::getExpandedArgument/1` and `Compilation::getExpandedArguments/0`. diff --git a/csharp/ql/lib/change-notes/released/0.8.8.md b/csharp/ql/lib/change-notes/released/0.8.8.md deleted file mode 100644 index 96b317ecd06..00000000000 --- a/csharp/ql/lib/change-notes/released/0.8.8.md +++ /dev/null @@ -1,10 +0,0 @@ -## 0.8.8 - -### Minor Analysis Improvements - -* Added a new database relation to store compiler arguments specified inside `@[...].rsp` file arguments. The arguments -are returned by `Compilation::getExpandedArgument/1` and `Compilation::getExpandedArguments/0`. -* C# 12: Added extractor, QL library and data flow support for collection expressions like `[1, y, 4, .. x]`. -* The C# extractor now accepts an extractor option `logging.verbosity` that specifies the verbosity of the logs. The -option is added via `codeql database create --language=csharp -Ologging.verbosity=debug ...` or by setting the -corresponding environment variable `CODEQL_EXTRACTOR_CSHARP_OPTION_LOGGING_VERBOSITY`. diff --git a/csharp/ql/lib/codeql-pack.release.yml b/csharp/ql/lib/codeql-pack.release.yml index da0a61b4048..2ef6dc421f3 100644 --- a/csharp/ql/lib/codeql-pack.release.yml +++ b/csharp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.8 +lastReleaseVersion: 0.8.7 diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index 2b137281da6..9d8db7347cb 100644 --- a/csharp/ql/lib/qlpack.yml +++ b/csharp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-all -version: 0.8.8 +version: 0.8.8-dev groups: csharp dbscheme: semmlecode.csharp.dbscheme extractor: csharp diff --git a/csharp/ql/src/CHANGELOG.md b/csharp/ql/src/CHANGELOG.md index ac2fbfce855..6572f664b0e 100644 --- a/csharp/ql/src/CHANGELOG.md +++ b/csharp/ql/src/CHANGELOG.md @@ -1,9 +1,3 @@ -## 0.8.8 - -### Minor Analysis Improvements - -* Added string interpolation expressions and `string.Format` as possible sanitizers for the `cs/web/unvalidated-url-redirection` query. - ## 0.8.7 ### Minor Analysis Improvements diff --git a/csharp/ql/src/change-notes/released/0.8.8.md b/csharp/ql/src/change-notes/2024-01-22-url-redirect-sanitizer.md similarity index 75% rename from csharp/ql/src/change-notes/released/0.8.8.md rename to csharp/ql/src/change-notes/2024-01-22-url-redirect-sanitizer.md index d6f017bcf41..92a65075a65 100644 --- a/csharp/ql/src/change-notes/released/0.8.8.md +++ b/csharp/ql/src/change-notes/2024-01-22-url-redirect-sanitizer.md @@ -1,5 +1,4 @@ -## 0.8.8 - -### Minor Analysis Improvements - +--- +category: minorAnalysis +--- * Added string interpolation expressions and `string.Format` as possible sanitizers for the `cs/web/unvalidated-url-redirection` query. diff --git a/csharp/ql/src/codeql-pack.release.yml b/csharp/ql/src/codeql-pack.release.yml index da0a61b4048..2ef6dc421f3 100644 --- a/csharp/ql/src/codeql-pack.release.yml +++ b/csharp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.8 +lastReleaseVersion: 0.8.7 diff --git a/csharp/ql/src/qlpack.yml b/csharp/ql/src/qlpack.yml index a16c72edd72..c3973948993 100644 --- a/csharp/ql/src/qlpack.yml +++ b/csharp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-queries -version: 0.8.8 +version: 0.8.8-dev groups: - csharp - queries diff --git a/go/ql/consistency-queries/CHANGELOG.md b/go/ql/consistency-queries/CHANGELOG.md index 8f58f5145db..ad2e63eb470 100644 --- a/go/ql/consistency-queries/CHANGELOG.md +++ b/go/ql/consistency-queries/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.0.7 - -No user-facing changes. - ## 0.0.6 No user-facing changes. diff --git a/go/ql/consistency-queries/change-notes/released/0.0.7.md b/go/ql/consistency-queries/change-notes/released/0.0.7.md deleted file mode 100644 index 84da6f18c42..00000000000 --- a/go/ql/consistency-queries/change-notes/released/0.0.7.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.0.7 - -No user-facing changes. diff --git a/go/ql/consistency-queries/codeql-pack.release.yml b/go/ql/consistency-queries/codeql-pack.release.yml index a2a5484910b..cf398ce02aa 100644 --- a/go/ql/consistency-queries/codeql-pack.release.yml +++ b/go/ql/consistency-queries/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.7 +lastReleaseVersion: 0.0.6 diff --git a/go/ql/consistency-queries/qlpack.yml b/go/ql/consistency-queries/qlpack.yml index c7522dd8e35..88886034408 100644 --- a/go/ql/consistency-queries/qlpack.yml +++ b/go/ql/consistency-queries/qlpack.yml @@ -1,5 +1,5 @@ name: codeql-go-consistency-queries -version: 0.0.7 +version: 0.0.7-dev groups: - go - queries diff --git a/go/ql/lib/CHANGELOG.md b/go/ql/lib/CHANGELOG.md index 475352f1df2..b9ff6e4e0e2 100644 --- a/go/ql/lib/CHANGELOG.md +++ b/go/ql/lib/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.7.8 - -No user-facing changes. - ## 0.7.7 ### Deprecated APIs diff --git a/go/ql/lib/change-notes/released/0.7.8.md b/go/ql/lib/change-notes/released/0.7.8.md deleted file mode 100644 index 5627ed51a17..00000000000 --- a/go/ql/lib/change-notes/released/0.7.8.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.7.8 - -No user-facing changes. diff --git a/go/ql/lib/codeql-pack.release.yml b/go/ql/lib/codeql-pack.release.yml index b6b12196b26..89cc2330c10 100644 --- a/go/ql/lib/codeql-pack.release.yml +++ b/go/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.7.8 +lastReleaseVersion: 0.7.7 diff --git a/go/ql/lib/qlpack.yml b/go/ql/lib/qlpack.yml index 5f317377d45..67c991934e0 100644 --- a/go/ql/lib/qlpack.yml +++ b/go/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-all -version: 0.7.8 +version: 0.7.8-dev groups: go dbscheme: go.dbscheme extractor: go diff --git a/go/ql/src/CHANGELOG.md b/go/ql/src/CHANGELOG.md index 66533a629f2..dafcd7aa695 100644 --- a/go/ql/src/CHANGELOG.md +++ b/go/ql/src/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.7.8 - -No user-facing changes. - ## 0.7.7 ### Minor Analysis Improvements diff --git a/go/ql/src/change-notes/released/0.7.8.md b/go/ql/src/change-notes/released/0.7.8.md deleted file mode 100644 index 5627ed51a17..00000000000 --- a/go/ql/src/change-notes/released/0.7.8.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.7.8 - -No user-facing changes. diff --git a/go/ql/src/codeql-pack.release.yml b/go/ql/src/codeql-pack.release.yml index b6b12196b26..89cc2330c10 100644 --- a/go/ql/src/codeql-pack.release.yml +++ b/go/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.7.8 +lastReleaseVersion: 0.7.7 diff --git a/go/ql/src/qlpack.yml b/go/ql/src/qlpack.yml index 81654540219..a760c342970 100644 --- a/go/ql/src/qlpack.yml +++ b/go/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-queries -version: 0.7.8 +version: 0.7.8-dev groups: - go - queries diff --git a/java/ql/automodel/src/CHANGELOG.md b/java/ql/automodel/src/CHANGELOG.md index fa718635e0c..eb9aae31d41 100644 --- a/java/ql/automodel/src/CHANGELOG.md +++ b/java/ql/automodel/src/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.0.14 - -No user-facing changes. - ## 0.0.13 No user-facing changes. diff --git a/java/ql/automodel/src/change-notes/released/0.0.14.md b/java/ql/automodel/src/change-notes/released/0.0.14.md deleted file mode 100644 index 63b4d50ca45..00000000000 --- a/java/ql/automodel/src/change-notes/released/0.0.14.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.0.14 - -No user-facing changes. diff --git a/java/ql/automodel/src/codeql-pack.release.yml b/java/ql/automodel/src/codeql-pack.release.yml index ca29e45d0a6..044e54e4f7e 100644 --- a/java/ql/automodel/src/codeql-pack.release.yml +++ b/java/ql/automodel/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.14 +lastReleaseVersion: 0.0.13 diff --git a/java/ql/automodel/src/qlpack.yml b/java/ql/automodel/src/qlpack.yml index 3334223e9e4..0845b6f1761 100644 --- a/java/ql/automodel/src/qlpack.yml +++ b/java/ql/automodel/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-automodel-queries -version: 0.0.14 +version: 0.0.14-dev groups: - java - automodel diff --git a/java/ql/lib/CHANGELOG.md b/java/ql/lib/CHANGELOG.md index 4b34106dc09..3621a766e8a 100644 --- a/java/ql/lib/CHANGELOG.md +++ b/java/ql/lib/CHANGELOG.md @@ -1,13 +1,3 @@ -## 0.8.8 - -### Minor Analysis Improvements - -* Added models for the following packages: - - * com.fasterxml.jackson.databind - * javax.servlet -* Added the `java.util.Date` and `java.util.UUID` classes to the list of types in the `SimpleTypeSanitizer` class in `semmle.code.java.security.Sanitizers`. - ## 0.8.7 ### New Features diff --git a/java/ql/lib/change-notes/released/0.8.8.md b/java/ql/lib/change-notes/2024-01-23-add-uuid-and-date-to-simpletypesanitizer.md similarity index 52% rename from java/ql/lib/change-notes/released/0.8.8.md rename to java/ql/lib/change-notes/2024-01-23-add-uuid-and-date-to-simpletypesanitizer.md index 62186579014..96d6b9e0334 100644 --- a/java/ql/lib/change-notes/released/0.8.8.md +++ b/java/ql/lib/change-notes/2024-01-23-add-uuid-and-date-to-simpletypesanitizer.md @@ -1,9 +1,4 @@ -## 0.8.8 - -### Minor Analysis Improvements - -* Added models for the following packages: - - * com.fasterxml.jackson.databind - * javax.servlet +--- +category: minorAnalysis +--- * Added the `java.util.Date` and `java.util.UUID` classes to the list of types in the `SimpleTypeSanitizer` class in `semmle.code.java.security.Sanitizers`. diff --git a/java/ql/lib/change-notes/2024-01-24-new-models.md b/java/ql/lib/change-notes/2024-01-24-new-models.md new file mode 100644 index 00000000000..8646ac1f0cb --- /dev/null +++ b/java/ql/lib/change-notes/2024-01-24-new-models.md @@ -0,0 +1,7 @@ +--- +category: minorAnalysis +--- +* Added models for the following packages: + + * com.fasterxml.jackson.databind + * javax.servlet diff --git a/java/ql/lib/codeql-pack.release.yml b/java/ql/lib/codeql-pack.release.yml index da0a61b4048..2ef6dc421f3 100644 --- a/java/ql/lib/codeql-pack.release.yml +++ b/java/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.8 +lastReleaseVersion: 0.8.7 diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index 6e4e1269d9c..62f4a0d7e96 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-all -version: 0.8.8 +version: 0.8.8-dev groups: java dbscheme: config/semmlecode.dbscheme extractor: java diff --git a/java/ql/src/CHANGELOG.md b/java/ql/src/CHANGELOG.md index 466b98fea11..84096230dd1 100644 --- a/java/ql/src/CHANGELOG.md +++ b/java/ql/src/CHANGELOG.md @@ -1,10 +1,3 @@ -## 0.8.8 - -### New Queries - -* Added a new query `java/android/sensitive-text` to detect instances of sensitive data being exposed through text fields without being properly masked. -* Added a new query `java/android/sensitive-notification` to detect instances of sensitive data being exposed through Android notifications. - ## 0.8.7 ### New Queries @@ -17,6 +10,10 @@ ## 0.8.6 +### Deprecated Queries + +* The three queries `java/insufficient-key-size`, `java/server-side-template-injection`, and `java/android/implicit-pendingintents` had accidentally general extension points allowing arbitrary string-based flow state. This has been fixed and the old extension points have been deprecated where possible, and otherwise updated. + ### New Queries * Added the `java/insecure-randomness` query to detect uses of weakly random values which an attacker may be able to predict. Also added the `crypto-parameter` sink kind for sinks which represent the parameters and keys of cryptographic operations. @@ -27,10 +24,6 @@ * The query `java/android/missing-certificate-pinning` should no longer alert about requests pointing to the local filesystem. * Removed some spurious sinks related to `com.opensymphony.xwork2.TextProvider.getText` from the query `java/ognl-injection`. -### Bug Fixes - -* The three queries `java/insufficient-key-size`, `java/server-side-template-injection`, and `java/android/implicit-pendingintents` had accidentally general extension points allowing arbitrary string-based flow state. This has been fixed and the old extension points have been deprecated where possible, and otherwise updated. - ## 0.8.5 No user-facing changes. diff --git a/java/ql/src/change-notes/2024-01-15-android-sensitive-notification-query.md b/java/ql/src/change-notes/2024-01-15-android-sensitive-notification-query.md new file mode 100644 index 00000000000..427ebbe94ff --- /dev/null +++ b/java/ql/src/change-notes/2024-01-15-android-sensitive-notification-query.md @@ -0,0 +1,4 @@ +--- +category: newQuery +--- +* Added a new query `java/android/sensitive-notification` to detect instances of sensitive data being exposed through Android notifications. \ No newline at end of file diff --git a/java/ql/src/change-notes/2024-01-29-android-sensitive-text-field-query.md b/java/ql/src/change-notes/2024-01-29-android-sensitive-text-field-query.md new file mode 100644 index 00000000000..5e5156944a7 --- /dev/null +++ b/java/ql/src/change-notes/2024-01-29-android-sensitive-text-field-query.md @@ -0,0 +1,4 @@ +--- +category: newQuery +--- +* Added a new query `java/android/sensitive-text` to detect instances of sensitive data being exposed through text fields without being properly masked. \ No newline at end of file diff --git a/java/ql/src/change-notes/released/0.8.8.md b/java/ql/src/change-notes/released/0.8.8.md deleted file mode 100644 index 94f005fdca8..00000000000 --- a/java/ql/src/change-notes/released/0.8.8.md +++ /dev/null @@ -1,6 +0,0 @@ -## 0.8.8 - -### New Queries - -* Added a new query `java/android/sensitive-text` to detect instances of sensitive data being exposed through text fields without being properly masked. -* Added a new query `java/android/sensitive-notification` to detect instances of sensitive data being exposed through Android notifications. diff --git a/java/ql/src/codeql-pack.release.yml b/java/ql/src/codeql-pack.release.yml index da0a61b4048..2ef6dc421f3 100644 --- a/java/ql/src/codeql-pack.release.yml +++ b/java/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.8 +lastReleaseVersion: 0.8.7 diff --git a/java/ql/src/qlpack.yml b/java/ql/src/qlpack.yml index 73e8a062ffe..4d0d39baca3 100644 --- a/java/ql/src/qlpack.yml +++ b/java/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-queries -version: 0.8.8 +version: 0.8.8-dev groups: - java - queries diff --git a/javascript/ql/lib/CHANGELOG.md b/javascript/ql/lib/CHANGELOG.md index 06e40ac7bd5..29005b5ce87 100644 --- a/javascript/ql/lib/CHANGELOG.md +++ b/javascript/ql/lib/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.8.8 - -No user-facing changes. - ## 0.8.7 ### Minor Analysis Improvements diff --git a/javascript/ql/lib/change-notes/released/0.8.8.md b/javascript/ql/lib/change-notes/released/0.8.8.md deleted file mode 100644 index 14d202dac00..00000000000 --- a/javascript/ql/lib/change-notes/released/0.8.8.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.8.8 - -No user-facing changes. diff --git a/javascript/ql/lib/codeql-pack.release.yml b/javascript/ql/lib/codeql-pack.release.yml index da0a61b4048..2ef6dc421f3 100644 --- a/javascript/ql/lib/codeql-pack.release.yml +++ b/javascript/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.8 +lastReleaseVersion: 0.8.7 diff --git a/javascript/ql/lib/qlpack.yml b/javascript/ql/lib/qlpack.yml index fa544548ea7..bd0c1a815f3 100644 --- a/javascript/ql/lib/qlpack.yml +++ b/javascript/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-all -version: 0.8.8 +version: 0.8.8-dev groups: javascript dbscheme: semmlecode.javascript.dbscheme extractor: javascript diff --git a/javascript/ql/src/CHANGELOG.md b/javascript/ql/src/CHANGELOG.md index 300da5225f9..ba868a7d629 100644 --- a/javascript/ql/src/CHANGELOG.md +++ b/javascript/ql/src/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.8.8 - -No user-facing changes. - ## 0.8.7 ### Minor Analysis Improvements diff --git a/javascript/ql/src/change-notes/released/0.8.8.md b/javascript/ql/src/change-notes/released/0.8.8.md deleted file mode 100644 index 14d202dac00..00000000000 --- a/javascript/ql/src/change-notes/released/0.8.8.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.8.8 - -No user-facing changes. diff --git a/javascript/ql/src/codeql-pack.release.yml b/javascript/ql/src/codeql-pack.release.yml index da0a61b4048..2ef6dc421f3 100644 --- a/javascript/ql/src/codeql-pack.release.yml +++ b/javascript/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.8 +lastReleaseVersion: 0.8.7 diff --git a/javascript/ql/src/qlpack.yml b/javascript/ql/src/qlpack.yml index 1ebbfc58787..51a22b542e0 100644 --- a/javascript/ql/src/qlpack.yml +++ b/javascript/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-queries -version: 0.8.8 +version: 0.8.8-dev groups: - javascript - queries diff --git a/misc/suite-helpers/CHANGELOG.md b/misc/suite-helpers/CHANGELOG.md index 61d4b001d25..1c10493c9e7 100644 --- a/misc/suite-helpers/CHANGELOG.md +++ b/misc/suite-helpers/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.7.8 - -No user-facing changes. - ## 0.7.7 No user-facing changes. diff --git a/misc/suite-helpers/change-notes/released/0.7.8.md b/misc/suite-helpers/change-notes/released/0.7.8.md deleted file mode 100644 index 5627ed51a17..00000000000 --- a/misc/suite-helpers/change-notes/released/0.7.8.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.7.8 - -No user-facing changes. diff --git a/misc/suite-helpers/codeql-pack.release.yml b/misc/suite-helpers/codeql-pack.release.yml index b6b12196b26..89cc2330c10 100644 --- a/misc/suite-helpers/codeql-pack.release.yml +++ b/misc/suite-helpers/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.7.8 +lastReleaseVersion: 0.7.7 diff --git a/misc/suite-helpers/qlpack.yml b/misc/suite-helpers/qlpack.yml index 4db5dfcf454..82d40178d7e 100644 --- a/misc/suite-helpers/qlpack.yml +++ b/misc/suite-helpers/qlpack.yml @@ -1,4 +1,4 @@ name: codeql/suite-helpers -version: 0.7.8 +version: 0.7.8-dev groups: shared warnOnImplicitThis: true diff --git a/python/ql/lib/CHANGELOG.md b/python/ql/lib/CHANGELOG.md index 01692622749..ca684c59320 100644 --- a/python/ql/lib/CHANGELOG.md +++ b/python/ql/lib/CHANGELOG.md @@ -1,13 +1,3 @@ -## 0.11.8 - -### Minor Analysis Improvements - -* Added `html.escape` as a sanitizer for HTML. - -### Bug Fixes - -* Fixed the `a` (ASCII) inline flag not being recognized by the regular expression library. - ## 0.11.7 ### Minor Analysis Improvements diff --git a/python/ql/lib/change-notes/2024-01-21-regex-ascii-flag.md b/python/ql/lib/change-notes/2024-01-21-regex-ascii-flag.md new file mode 100644 index 00000000000..5d8741b1bd3 --- /dev/null +++ b/python/ql/lib/change-notes/2024-01-21-regex-ascii-flag.md @@ -0,0 +1,4 @@ +--- +category: fix +--- +* Fixed the `a` (ASCII) inline flag not being recognized by the regular expression library. diff --git a/python/ql/lib/change-notes/2024-01-22-html-escape.md b/python/ql/lib/change-notes/2024-01-22-html-escape.md new file mode 100644 index 00000000000..0ae31aee545 --- /dev/null +++ b/python/ql/lib/change-notes/2024-01-22-html-escape.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Added `html.escape` as a sanitizer for HTML. diff --git a/python/ql/lib/change-notes/released/0.11.8.md b/python/ql/lib/change-notes/released/0.11.8.md deleted file mode 100644 index d61a4451868..00000000000 --- a/python/ql/lib/change-notes/released/0.11.8.md +++ /dev/null @@ -1,9 +0,0 @@ -## 0.11.8 - -### Minor Analysis Improvements - -* Added `html.escape` as a sanitizer for HTML. - -### Bug Fixes - -* Fixed the `a` (ASCII) inline flag not being recognized by the regular expression library. diff --git a/python/ql/lib/codeql-pack.release.yml b/python/ql/lib/codeql-pack.release.yml index 345c308d402..59fa16251b6 100644 --- a/python/ql/lib/codeql-pack.release.yml +++ b/python/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.11.8 +lastReleaseVersion: 0.11.7 diff --git a/python/ql/lib/qlpack.yml b/python/ql/lib/qlpack.yml index a2c343cca3f..23bff260f7a 100644 --- a/python/ql/lib/qlpack.yml +++ b/python/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-all -version: 0.11.8 +version: 0.11.8-dev groups: python dbscheme: semmlecode.python.dbscheme extractor: python diff --git a/python/ql/src/CHANGELOG.md b/python/ql/src/CHANGELOG.md index 17931ead8b1..b42dcfd8b31 100644 --- a/python/ql/src/CHANGELOG.md +++ b/python/ql/src/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.9.8 - -No user-facing changes. - ## 0.9.7 ### Minor Analysis Improvements diff --git a/python/ql/src/change-notes/released/0.9.8.md b/python/ql/src/change-notes/released/0.9.8.md deleted file mode 100644 index d1ca1c4d647..00000000000 --- a/python/ql/src/change-notes/released/0.9.8.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.9.8 - -No user-facing changes. diff --git a/python/ql/src/codeql-pack.release.yml b/python/ql/src/codeql-pack.release.yml index 9ca6c6f2678..0921a438254 100644 --- a/python/ql/src/codeql-pack.release.yml +++ b/python/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.9.8 +lastReleaseVersion: 0.9.7 diff --git a/python/ql/src/qlpack.yml b/python/ql/src/qlpack.yml index 538e5ad799c..5de71eb6e3a 100644 --- a/python/ql/src/qlpack.yml +++ b/python/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-queries -version: 0.9.8 +version: 0.9.8-dev groups: - python - queries diff --git a/ruby/ql/lib/CHANGELOG.md b/ruby/ql/lib/CHANGELOG.md index 8a9e4e6c8b7..e9e4507d8df 100644 --- a/ruby/ql/lib/CHANGELOG.md +++ b/ruby/ql/lib/CHANGELOG.md @@ -1,9 +1,3 @@ -## 0.8.8 - -### Minor Analysis Improvements - -* Flow is now tracked through Rails `render` calls, when the argument is a `ViewComponent`. In this case, data flow is tracked into the accompanying `.html.erb` file. - ## 0.8.7 ### Minor Analysis Improvements diff --git a/ruby/ql/lib/change-notes/released/0.8.8.md b/ruby/ql/lib/change-notes/2024-01-22-erb-render-flow.md similarity index 79% rename from ruby/ql/lib/change-notes/released/0.8.8.md rename to ruby/ql/lib/change-notes/2024-01-22-erb-render-flow.md index dc4b3dd43e3..f9e68ef580e 100644 --- a/ruby/ql/lib/change-notes/released/0.8.8.md +++ b/ruby/ql/lib/change-notes/2024-01-22-erb-render-flow.md @@ -1,5 +1,4 @@ -## 0.8.8 - -### Minor Analysis Improvements - +--- +category: minorAnalysis +--- * Flow is now tracked through Rails `render` calls, when the argument is a `ViewComponent`. In this case, data flow is tracked into the accompanying `.html.erb` file. diff --git a/ruby/ql/lib/codeql-pack.release.yml b/ruby/ql/lib/codeql-pack.release.yml index da0a61b4048..2ef6dc421f3 100644 --- a/ruby/ql/lib/codeql-pack.release.yml +++ b/ruby/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.8 +lastReleaseVersion: 0.8.7 diff --git a/ruby/ql/lib/qlpack.yml b/ruby/ql/lib/qlpack.yml index 7eb6222e101..8179ac53996 100644 --- a/ruby/ql/lib/qlpack.yml +++ b/ruby/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-all -version: 0.8.8 +version: 0.8.8-dev groups: ruby extractor: ruby dbscheme: ruby.dbscheme diff --git a/ruby/ql/src/CHANGELOG.md b/ruby/ql/src/CHANGELOG.md index 9eff67dab9e..05a89118b05 100644 --- a/ruby/ql/src/CHANGELOG.md +++ b/ruby/ql/src/CHANGELOG.md @@ -1,14 +1,3 @@ -## 0.8.8 - -### New Queries - -* Added a new experimental query, `rb/insecure-randomness`, to detect when application uses random values that are not cryptographically secure. - -### Minor Analysis Improvements - -* Added new unsafe deserialization sinks for the ox gem. -* Added an additional unsafe deserialization sink for the oj gem. - ## 0.8.7 No user-facing changes. diff --git a/ruby/ql/src/change-notes/2023-12-18-insecure-randomness-query.md b/ruby/ql/src/change-notes/2023-12-18-insecure-randomness-query.md new file mode 100644 index 00000000000..a4b3cd5a1f5 --- /dev/null +++ b/ruby/ql/src/change-notes/2023-12-18-insecure-randomness-query.md @@ -0,0 +1,4 @@ +--- +category: newQuery +--- +* Added a new experimental query, `rb/insecure-randomness`, to detect when application uses random values that are not cryptographically secure. \ No newline at end of file diff --git a/ruby/ql/src/change-notes/2024-01-30-unsafe-deserialization-sinks.md b/ruby/ql/src/change-notes/2024-01-30-unsafe-deserialization-sinks.md new file mode 100644 index 00000000000..3ba080e91ab --- /dev/null +++ b/ruby/ql/src/change-notes/2024-01-30-unsafe-deserialization-sinks.md @@ -0,0 +1,5 @@ +--- +category: minorAnalysis +--- +* Added new unsafe deserialization sinks for the ox gem. +* Added an additional unsafe deserialization sink for the oj gem. diff --git a/ruby/ql/src/change-notes/released/0.8.8.md b/ruby/ql/src/change-notes/released/0.8.8.md deleted file mode 100644 index b8aaed87425..00000000000 --- a/ruby/ql/src/change-notes/released/0.8.8.md +++ /dev/null @@ -1,10 +0,0 @@ -## 0.8.8 - -### New Queries - -* Added a new experimental query, `rb/insecure-randomness`, to detect when application uses random values that are not cryptographically secure. - -### Minor Analysis Improvements - -* Added new unsafe deserialization sinks for the ox gem. -* Added an additional unsafe deserialization sink for the oj gem. diff --git a/ruby/ql/src/codeql-pack.release.yml b/ruby/ql/src/codeql-pack.release.yml index da0a61b4048..2ef6dc421f3 100644 --- a/ruby/ql/src/codeql-pack.release.yml +++ b/ruby/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.8 +lastReleaseVersion: 0.8.7 diff --git a/ruby/ql/src/qlpack.yml b/ruby/ql/src/qlpack.yml index 7c1995c00e5..6891e0227d3 100644 --- a/ruby/ql/src/qlpack.yml +++ b/ruby/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-queries -version: 0.8.8 +version: 0.8.8-dev groups: - ruby - queries diff --git a/shared/controlflow/CHANGELOG.md b/shared/controlflow/CHANGELOG.md index d72921d34c1..6635db28abc 100644 --- a/shared/controlflow/CHANGELOG.md +++ b/shared/controlflow/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.1.8 - -No user-facing changes. - ## 0.1.7 No user-facing changes. diff --git a/shared/controlflow/change-notes/released/0.1.8.md b/shared/controlflow/change-notes/released/0.1.8.md deleted file mode 100644 index 5b20b52baf1..00000000000 --- a/shared/controlflow/change-notes/released/0.1.8.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.1.8 - -No user-facing changes. diff --git a/shared/controlflow/codeql-pack.release.yml b/shared/controlflow/codeql-pack.release.yml index 3136ea4a1cc..949d4c64c66 100644 --- a/shared/controlflow/codeql-pack.release.yml +++ b/shared/controlflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.1.8 +lastReleaseVersion: 0.1.7 diff --git a/shared/controlflow/qlpack.yml b/shared/controlflow/qlpack.yml index 79d4a386cf1..c6c4fb5f728 100644 --- a/shared/controlflow/qlpack.yml +++ b/shared/controlflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/controlflow -version: 0.1.8 +version: 0.1.8-dev groups: shared library: true dependencies: diff --git a/shared/dataflow/CHANGELOG.md b/shared/dataflow/CHANGELOG.md index e9b6c3bc904..c537cb3bb8e 100644 --- a/shared/dataflow/CHANGELOG.md +++ b/shared/dataflow/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.1.8 - -No user-facing changes. - ## 0.1.7 No user-facing changes. diff --git a/shared/dataflow/change-notes/released/0.1.8.md b/shared/dataflow/change-notes/released/0.1.8.md deleted file mode 100644 index 5b20b52baf1..00000000000 --- a/shared/dataflow/change-notes/released/0.1.8.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.1.8 - -No user-facing changes. diff --git a/shared/dataflow/codeql-pack.release.yml b/shared/dataflow/codeql-pack.release.yml index 3136ea4a1cc..949d4c64c66 100644 --- a/shared/dataflow/codeql-pack.release.yml +++ b/shared/dataflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.1.8 +lastReleaseVersion: 0.1.7 diff --git a/shared/dataflow/qlpack.yml b/shared/dataflow/qlpack.yml index ffb4d0754be..91d1454351c 100644 --- a/shared/dataflow/qlpack.yml +++ b/shared/dataflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/dataflow -version: 0.1.8 +version: 0.1.8-dev groups: shared library: true dependencies: diff --git a/shared/mad/CHANGELOG.md b/shared/mad/CHANGELOG.md index 35042f79b69..438ce8241a6 100644 --- a/shared/mad/CHANGELOG.md +++ b/shared/mad/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.2.8 - -No user-facing changes. - ## 0.2.7 No user-facing changes. diff --git a/shared/mad/change-notes/released/0.2.8.md b/shared/mad/change-notes/released/0.2.8.md deleted file mode 100644 index 2f8aa0dd21e..00000000000 --- a/shared/mad/change-notes/released/0.2.8.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.2.8 - -No user-facing changes. diff --git a/shared/mad/codeql-pack.release.yml b/shared/mad/codeql-pack.release.yml index 66ad7f587f8..6d3c0021858 100644 --- a/shared/mad/codeql-pack.release.yml +++ b/shared/mad/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.8 +lastReleaseVersion: 0.2.7 diff --git a/shared/mad/qlpack.yml b/shared/mad/qlpack.yml index c4eade3b256..31a8e8b7534 100644 --- a/shared/mad/qlpack.yml +++ b/shared/mad/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/mad -version: 0.2.8 +version: 0.2.8-dev groups: shared library: true dependencies: null diff --git a/shared/rangeanalysis/CHANGELOG.md b/shared/rangeanalysis/CHANGELOG.md index 9ad1339683f..6f334d57356 100644 --- a/shared/rangeanalysis/CHANGELOG.md +++ b/shared/rangeanalysis/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.0.7 - -No user-facing changes. - ## 0.0.6 No user-facing changes. diff --git a/shared/rangeanalysis/change-notes/released/0.0.7.md b/shared/rangeanalysis/change-notes/released/0.0.7.md deleted file mode 100644 index 84da6f18c42..00000000000 --- a/shared/rangeanalysis/change-notes/released/0.0.7.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.0.7 - -No user-facing changes. diff --git a/shared/rangeanalysis/codeql-pack.release.yml b/shared/rangeanalysis/codeql-pack.release.yml index a2a5484910b..cf398ce02aa 100644 --- a/shared/rangeanalysis/codeql-pack.release.yml +++ b/shared/rangeanalysis/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.7 +lastReleaseVersion: 0.0.6 diff --git a/shared/rangeanalysis/qlpack.yml b/shared/rangeanalysis/qlpack.yml index faa059f069a..6317ae4cac4 100644 --- a/shared/rangeanalysis/qlpack.yml +++ b/shared/rangeanalysis/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rangeanalysis -version: 0.0.7 +version: 0.0.7-dev groups: shared library: true dependencies: diff --git a/shared/regex/CHANGELOG.md b/shared/regex/CHANGELOG.md index bf0aa553157..267288c38df 100644 --- a/shared/regex/CHANGELOG.md +++ b/shared/regex/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.2.8 - -No user-facing changes. - ## 0.2.7 No user-facing changes. diff --git a/shared/regex/change-notes/released/0.2.8.md b/shared/regex/change-notes/released/0.2.8.md deleted file mode 100644 index 2f8aa0dd21e..00000000000 --- a/shared/regex/change-notes/released/0.2.8.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.2.8 - -No user-facing changes. diff --git a/shared/regex/codeql-pack.release.yml b/shared/regex/codeql-pack.release.yml index 66ad7f587f8..6d3c0021858 100644 --- a/shared/regex/codeql-pack.release.yml +++ b/shared/regex/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.8 +lastReleaseVersion: 0.2.7 diff --git a/shared/regex/qlpack.yml b/shared/regex/qlpack.yml index 57aa69e9629..c75c3ca7b2d 100644 --- a/shared/regex/qlpack.yml +++ b/shared/regex/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/regex -version: 0.2.8 +version: 0.2.8-dev groups: shared library: true dependencies: diff --git a/shared/ssa/CHANGELOG.md b/shared/ssa/CHANGELOG.md index 7c9b57d2b8e..8a920eb7bed 100644 --- a/shared/ssa/CHANGELOG.md +++ b/shared/ssa/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.2.8 - -No user-facing changes. - ## 0.2.7 ### Minor Analysis Improvements diff --git a/shared/ssa/change-notes/released/0.2.8.md b/shared/ssa/change-notes/released/0.2.8.md deleted file mode 100644 index 2f8aa0dd21e..00000000000 --- a/shared/ssa/change-notes/released/0.2.8.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.2.8 - -No user-facing changes. diff --git a/shared/ssa/codeql-pack.release.yml b/shared/ssa/codeql-pack.release.yml index 66ad7f587f8..6d3c0021858 100644 --- a/shared/ssa/codeql-pack.release.yml +++ b/shared/ssa/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.8 +lastReleaseVersion: 0.2.7 diff --git a/shared/ssa/qlpack.yml b/shared/ssa/qlpack.yml index f47e195b548..92717e37ccb 100644 --- a/shared/ssa/qlpack.yml +++ b/shared/ssa/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ssa -version: 0.2.8 +version: 0.2.8-dev groups: shared library: true dependencies: diff --git a/shared/threat-models/CHANGELOG.md b/shared/threat-models/CHANGELOG.md index 8f58f5145db..ad2e63eb470 100644 --- a/shared/threat-models/CHANGELOG.md +++ b/shared/threat-models/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.0.7 - -No user-facing changes. - ## 0.0.6 No user-facing changes. diff --git a/shared/threat-models/change-notes/released/0.0.7.md b/shared/threat-models/change-notes/released/0.0.7.md deleted file mode 100644 index 84da6f18c42..00000000000 --- a/shared/threat-models/change-notes/released/0.0.7.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.0.7 - -No user-facing changes. diff --git a/shared/threat-models/codeql-pack.release.yml b/shared/threat-models/codeql-pack.release.yml index a2a5484910b..cf398ce02aa 100644 --- a/shared/threat-models/codeql-pack.release.yml +++ b/shared/threat-models/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.7 +lastReleaseVersion: 0.0.6 diff --git a/shared/threat-models/qlpack.yml b/shared/threat-models/qlpack.yml index b056dd0d720..4fd423016e2 100644 --- a/shared/threat-models/qlpack.yml +++ b/shared/threat-models/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/threat-models -version: 0.0.7 +version: 0.0.7-dev library: true groups: shared dataExtensions: diff --git a/shared/tutorial/CHANGELOG.md b/shared/tutorial/CHANGELOG.md index bc33883a950..d89b3171dc6 100644 --- a/shared/tutorial/CHANGELOG.md +++ b/shared/tutorial/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.2.8 - -No user-facing changes. - ## 0.2.7 No user-facing changes. diff --git a/shared/tutorial/change-notes/released/0.2.8.md b/shared/tutorial/change-notes/released/0.2.8.md deleted file mode 100644 index 2f8aa0dd21e..00000000000 --- a/shared/tutorial/change-notes/released/0.2.8.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.2.8 - -No user-facing changes. diff --git a/shared/tutorial/codeql-pack.release.yml b/shared/tutorial/codeql-pack.release.yml index 66ad7f587f8..6d3c0021858 100644 --- a/shared/tutorial/codeql-pack.release.yml +++ b/shared/tutorial/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.8 +lastReleaseVersion: 0.2.7 diff --git a/shared/tutorial/qlpack.yml b/shared/tutorial/qlpack.yml index 23525cbfc60..573d2d5e5bd 100644 --- a/shared/tutorial/qlpack.yml +++ b/shared/tutorial/qlpack.yml @@ -1,7 +1,7 @@ name: codeql/tutorial description: Library for the CodeQL detective tutorials, helping new users learn to write CodeQL queries. -version: 0.2.8 +version: 0.2.8-dev groups: shared library: true warnOnImplicitThis: true diff --git a/shared/typetracking/CHANGELOG.md b/shared/typetracking/CHANGELOG.md index 4c21bc408be..b47b17710e8 100644 --- a/shared/typetracking/CHANGELOG.md +++ b/shared/typetracking/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.2.8 - -No user-facing changes. - ## 0.2.7 No user-facing changes. diff --git a/shared/typetracking/change-notes/released/0.2.8.md b/shared/typetracking/change-notes/released/0.2.8.md deleted file mode 100644 index 2f8aa0dd21e..00000000000 --- a/shared/typetracking/change-notes/released/0.2.8.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.2.8 - -No user-facing changes. diff --git a/shared/typetracking/codeql-pack.release.yml b/shared/typetracking/codeql-pack.release.yml index 66ad7f587f8..6d3c0021858 100644 --- a/shared/typetracking/codeql-pack.release.yml +++ b/shared/typetracking/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.8 +lastReleaseVersion: 0.2.7 diff --git a/shared/typetracking/qlpack.yml b/shared/typetracking/qlpack.yml index 09757c9de82..a35e17dee12 100644 --- a/shared/typetracking/qlpack.yml +++ b/shared/typetracking/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typetracking -version: 0.2.8 +version: 0.2.8-dev groups: shared library: true dependencies: diff --git a/shared/typos/CHANGELOG.md b/shared/typos/CHANGELOG.md index 2b0bb7d2f75..101d57dbad8 100644 --- a/shared/typos/CHANGELOG.md +++ b/shared/typos/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.2.8 - -No user-facing changes. - ## 0.2.7 No user-facing changes. diff --git a/shared/typos/change-notes/released/0.2.8.md b/shared/typos/change-notes/released/0.2.8.md deleted file mode 100644 index 2f8aa0dd21e..00000000000 --- a/shared/typos/change-notes/released/0.2.8.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.2.8 - -No user-facing changes. diff --git a/shared/typos/codeql-pack.release.yml b/shared/typos/codeql-pack.release.yml index 66ad7f587f8..6d3c0021858 100644 --- a/shared/typos/codeql-pack.release.yml +++ b/shared/typos/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.8 +lastReleaseVersion: 0.2.7 diff --git a/shared/typos/qlpack.yml b/shared/typos/qlpack.yml index 4466e61ee0b..bc2565304e4 100644 --- a/shared/typos/qlpack.yml +++ b/shared/typos/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typos -version: 0.2.8 +version: 0.2.8-dev groups: shared library: true warnOnImplicitThis: true diff --git a/shared/util/CHANGELOG.md b/shared/util/CHANGELOG.md index 273afd4129b..edfa06a5da2 100644 --- a/shared/util/CHANGELOG.md +++ b/shared/util/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.2.8 - -No user-facing changes. - ## 0.2.7 No user-facing changes. diff --git a/shared/util/change-notes/released/0.2.8.md b/shared/util/change-notes/released/0.2.8.md deleted file mode 100644 index 2f8aa0dd21e..00000000000 --- a/shared/util/change-notes/released/0.2.8.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.2.8 - -No user-facing changes. diff --git a/shared/util/codeql-pack.release.yml b/shared/util/codeql-pack.release.yml index 66ad7f587f8..6d3c0021858 100644 --- a/shared/util/codeql-pack.release.yml +++ b/shared/util/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.8 +lastReleaseVersion: 0.2.7 diff --git a/shared/util/qlpack.yml b/shared/util/qlpack.yml index ae11a5bf58b..cddb6cc42f1 100644 --- a/shared/util/qlpack.yml +++ b/shared/util/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/util -version: 0.2.8 +version: 0.2.8-dev groups: shared library: true dependencies: null diff --git a/shared/yaml/CHANGELOG.md b/shared/yaml/CHANGELOG.md index e2991032640..c5b3ec6b30e 100644 --- a/shared/yaml/CHANGELOG.md +++ b/shared/yaml/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.2.8 - -No user-facing changes. - ## 0.2.7 No user-facing changes. diff --git a/shared/yaml/change-notes/released/0.2.8.md b/shared/yaml/change-notes/released/0.2.8.md deleted file mode 100644 index 2f8aa0dd21e..00000000000 --- a/shared/yaml/change-notes/released/0.2.8.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.2.8 - -No user-facing changes. diff --git a/shared/yaml/codeql-pack.release.yml b/shared/yaml/codeql-pack.release.yml index 66ad7f587f8..6d3c0021858 100644 --- a/shared/yaml/codeql-pack.release.yml +++ b/shared/yaml/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.8 +lastReleaseVersion: 0.2.7 diff --git a/shared/yaml/qlpack.yml b/shared/yaml/qlpack.yml index 4d656f79862..2680ca9cbb9 100644 --- a/shared/yaml/qlpack.yml +++ b/shared/yaml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/yaml -version: 0.2.8 +version: 0.2.8-dev groups: shared library: true warnOnImplicitThis: true diff --git a/swift/ql/lib/CHANGELOG.md b/swift/ql/lib/CHANGELOG.md index b69d9b9e9a3..f06c4195a35 100644 --- a/swift/ql/lib/CHANGELOG.md +++ b/swift/ql/lib/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.3.8 - -No user-facing changes. - ## 0.3.7 ### Minor Analysis Improvements diff --git a/swift/ql/lib/change-notes/released/0.3.8.md b/swift/ql/lib/change-notes/released/0.3.8.md deleted file mode 100644 index 7e9035d11c1..00000000000 --- a/swift/ql/lib/change-notes/released/0.3.8.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.3.8 - -No user-facing changes. diff --git a/swift/ql/lib/codeql-pack.release.yml b/swift/ql/lib/codeql-pack.release.yml index 4aa0b63b207..939934ffd00 100644 --- a/swift/ql/lib/codeql-pack.release.yml +++ b/swift/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.3.8 +lastReleaseVersion: 0.3.7 diff --git a/swift/ql/lib/qlpack.yml b/swift/ql/lib/qlpack.yml index 8916abe3bec..bb5078ca42b 100644 --- a/swift/ql/lib/qlpack.yml +++ b/swift/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-all -version: 0.3.8 +version: 0.3.8-dev groups: swift extractor: swift dbscheme: swift.dbscheme diff --git a/swift/ql/src/CHANGELOG.md b/swift/ql/src/CHANGELOG.md index 7fe6e54b241..ff380eb0b97 100644 --- a/swift/ql/src/CHANGELOG.md +++ b/swift/ql/src/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.3.8 - -No user-facing changes. - ## 0.3.7 ### New Queries diff --git a/swift/ql/src/change-notes/released/0.3.8.md b/swift/ql/src/change-notes/released/0.3.8.md deleted file mode 100644 index 7e9035d11c1..00000000000 --- a/swift/ql/src/change-notes/released/0.3.8.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.3.8 - -No user-facing changes. diff --git a/swift/ql/src/codeql-pack.release.yml b/swift/ql/src/codeql-pack.release.yml index 4aa0b63b207..939934ffd00 100644 --- a/swift/ql/src/codeql-pack.release.yml +++ b/swift/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.3.8 +lastReleaseVersion: 0.3.7 diff --git a/swift/ql/src/qlpack.yml b/swift/ql/src/qlpack.yml index 4a8d3d68e74..e61def6dd27 100644 --- a/swift/ql/src/qlpack.yml +++ b/swift/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-queries -version: 0.3.8 +version: 0.3.8-dev groups: - swift - queries From f50dab3d934ddcd3924d45ab4e65acd8882d598b Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 8 Feb 2024 14:45:47 +0000 Subject: [PATCH 095/378] Kotlin 2: Accept loc changes in library-tests/interface-delegate --- .../test-kotlin2/library-tests/interface-delegate/test.expected | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/ql/test-kotlin2/library-tests/interface-delegate/test.expected b/java/ql/test-kotlin2/library-tests/interface-delegate/test.expected index a5576a6c083..8fef9ecf8ff 100644 --- a/java/ql/test-kotlin2/library-tests/interface-delegate/test.expected +++ b/java/ql/test-kotlin2/library-tests/interface-delegate/test.expected @@ -1,8 +1,8 @@ fields | intfDelegate.kt:7:18:9:1 | $$delegate_0 | intfDelegate.kt:7:26:9:1 | | #select -| intfDelegate.kt:0:0:0:0 | f | intfDelegate.kt:7:1:10:1 | Concrete | | intfDelegate.kt:3:3:3:15 | f | intfDelegate.kt:1:1:5:1 | Intf | | intfDelegate.kt:7:1:10:1 | Concrete | intfDelegate.kt:7:1:10:1 | Concrete | +| intfDelegate.kt:7:1:10:1 | f | intfDelegate.kt:7:1:10:1 | Concrete | | intfDelegate.kt:7:26:9:1 | | intfDelegate.kt:7:26:9:1 | new Intf(...) { ... } | | intfDelegate.kt:8:3:8:28 | f | intfDelegate.kt:7:26:9:1 | new Intf(...) { ... } | From 36f01ff31a154511011d7391c53c64492997c495 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 8 Feb 2024 15:25:24 +0000 Subject: [PATCH 096/378] Release preparation for version 2.16.2 --- cpp/ql/lib/CHANGELOG.md | 7 +++++++ .../lib/change-notes/2024-01-30-throwing-model.md | 4 ---- .../0.12.5.md} | 8 +++++--- cpp/ql/lib/codeql-pack.release.yml | 2 +- cpp/ql/lib/qlpack.yml | 2 +- cpp/ql/src/CHANGELOG.md | 11 +++++++++++ .../change-notes/2024-01-19-extracted-files.md | 4 ---- ...e_positive_incorrect_string_type_conversion.md | 4 ---- .../2024-01-29-incorrectly-checked-scanf-2.md | 4 ---- .../2024-01-29-incorrectly-checked-scanf.md | 4 ---- ...24-01-29-uninitialized-local-false-positive.md | 5 ----- cpp/ql/src/change-notes/released/0.9.4.md | 10 ++++++++++ cpp/ql/src/codeql-pack.release.yml | 2 +- cpp/ql/src/qlpack.yml | 2 +- csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md | 4 ++++ .../Solorigate/lib/change-notes/released/1.7.8.md | 3 +++ .../Solorigate/lib/codeql-pack.release.yml | 2 +- csharp/ql/campaigns/Solorigate/lib/qlpack.yml | 2 +- csharp/ql/campaigns/Solorigate/src/CHANGELOG.md | 4 ++++ .../Solorigate/src/change-notes/released/1.7.8.md | 3 +++ .../Solorigate/src/codeql-pack.release.yml | 2 +- csharp/ql/campaigns/Solorigate/src/qlpack.yml | 2 +- csharp/ql/lib/CHANGELOG.md | 11 +++++++++++ .../2024-01-25-extractor-option-logging.md | 6 ------ .../2024-01-26-collection-expression.md | 4 ---- .../2024-01-31-compilation-expanded-args.md | 5 ----- csharp/ql/lib/change-notes/released/0.8.8.md | 10 ++++++++++ csharp/ql/lib/codeql-pack.release.yml | 2 +- csharp/ql/lib/qlpack.yml | 2 +- csharp/ql/src/CHANGELOG.md | 6 ++++++ .../0.8.8.md} | 7 ++++--- csharp/ql/src/codeql-pack.release.yml | 2 +- csharp/ql/src/qlpack.yml | 2 +- go/ql/consistency-queries/CHANGELOG.md | 4 ++++ .../change-notes/released/0.0.7.md | 3 +++ go/ql/consistency-queries/codeql-pack.release.yml | 2 +- go/ql/consistency-queries/qlpack.yml | 2 +- go/ql/lib/CHANGELOG.md | 4 ++++ go/ql/lib/change-notes/released/0.7.8.md | 3 +++ go/ql/lib/codeql-pack.release.yml | 2 +- go/ql/lib/qlpack.yml | 2 +- go/ql/src/CHANGELOG.md | 4 ++++ go/ql/src/change-notes/released/0.7.8.md | 3 +++ go/ql/src/codeql-pack.release.yml | 2 +- go/ql/src/qlpack.yml | 2 +- java/ql/automodel/src/CHANGELOG.md | 4 ++++ .../automodel/src/change-notes/released/0.0.14.md | 3 +++ java/ql/automodel/src/codeql-pack.release.yml | 2 +- java/ql/automodel/src/qlpack.yml | 2 +- java/ql/lib/CHANGELOG.md | 10 ++++++++++ java/ql/lib/change-notes/2024-01-24-new-models.md | 7 ------- .../0.8.8.md} | 11 ++++++++--- java/ql/lib/codeql-pack.release.yml | 2 +- java/ql/lib/qlpack.yml | 2 +- java/ql/src/CHANGELOG.md | 15 +++++++++++---- ...-01-15-android-sensitive-notification-query.md | 4 ---- ...24-01-29-android-sensitive-text-field-query.md | 4 ---- java/ql/src/change-notes/released/0.8.8.md | 6 ++++++ java/ql/src/codeql-pack.release.yml | 2 +- java/ql/src/qlpack.yml | 2 +- javascript/ql/lib/CHANGELOG.md | 4 ++++ javascript/ql/lib/change-notes/released/0.8.8.md | 3 +++ javascript/ql/lib/codeql-pack.release.yml | 2 +- javascript/ql/lib/qlpack.yml | 2 +- javascript/ql/src/CHANGELOG.md | 4 ++++ javascript/ql/src/change-notes/released/0.8.8.md | 3 +++ javascript/ql/src/codeql-pack.release.yml | 2 +- javascript/ql/src/qlpack.yml | 2 +- misc/suite-helpers/CHANGELOG.md | 4 ++++ misc/suite-helpers/change-notes/released/0.7.8.md | 3 +++ misc/suite-helpers/codeql-pack.release.yml | 2 +- misc/suite-helpers/qlpack.yml | 2 +- python/ql/lib/CHANGELOG.md | 10 ++++++++++ .../change-notes/2024-01-21-regex-ascii-flag.md | 4 ---- .../ql/lib/change-notes/2024-01-22-html-escape.md | 4 ---- python/ql/lib/change-notes/released/0.11.8.md | 9 +++++++++ python/ql/lib/codeql-pack.release.yml | 2 +- python/ql/lib/qlpack.yml | 2 +- python/ql/src/CHANGELOG.md | 4 ++++ python/ql/src/change-notes/released/0.9.8.md | 3 +++ python/ql/src/codeql-pack.release.yml | 2 +- python/ql/src/qlpack.yml | 2 +- ruby/ql/lib/CHANGELOG.md | 6 ++++++ .../0.8.8.md} | 7 ++++--- ruby/ql/lib/codeql-pack.release.yml | 2 +- ruby/ql/lib/qlpack.yml | 2 +- ruby/ql/src/CHANGELOG.md | 11 +++++++++++ .../2023-12-18-insecure-randomness-query.md | 4 ---- .../2024-01-30-unsafe-deserialization-sinks.md | 5 ----- ruby/ql/src/change-notes/released/0.8.8.md | 10 ++++++++++ ruby/ql/src/codeql-pack.release.yml | 2 +- ruby/ql/src/qlpack.yml | 2 +- shared/controlflow/CHANGELOG.md | 4 ++++ shared/controlflow/change-notes/released/0.1.8.md | 3 +++ shared/controlflow/codeql-pack.release.yml | 2 +- shared/controlflow/qlpack.yml | 2 +- shared/dataflow/CHANGELOG.md | 4 ++++ shared/dataflow/change-notes/released/0.1.8.md | 3 +++ shared/dataflow/codeql-pack.release.yml | 2 +- shared/dataflow/qlpack.yml | 2 +- shared/mad/CHANGELOG.md | 4 ++++ shared/mad/change-notes/released/0.2.8.md | 3 +++ shared/mad/codeql-pack.release.yml | 2 +- shared/mad/qlpack.yml | 2 +- shared/rangeanalysis/CHANGELOG.md | 4 ++++ .../rangeanalysis/change-notes/released/0.0.7.md | 3 +++ shared/rangeanalysis/codeql-pack.release.yml | 2 +- shared/rangeanalysis/qlpack.yml | 2 +- shared/regex/CHANGELOG.md | 4 ++++ shared/regex/change-notes/released/0.2.8.md | 3 +++ shared/regex/codeql-pack.release.yml | 2 +- shared/regex/qlpack.yml | 2 +- shared/ssa/CHANGELOG.md | 4 ++++ shared/ssa/change-notes/released/0.2.8.md | 3 +++ shared/ssa/codeql-pack.release.yml | 2 +- shared/ssa/qlpack.yml | 2 +- shared/threat-models/CHANGELOG.md | 4 ++++ .../threat-models/change-notes/released/0.0.7.md | 3 +++ shared/threat-models/codeql-pack.release.yml | 2 +- shared/threat-models/qlpack.yml | 2 +- shared/tutorial/CHANGELOG.md | 4 ++++ shared/tutorial/change-notes/released/0.2.8.md | 3 +++ shared/tutorial/codeql-pack.release.yml | 2 +- shared/tutorial/qlpack.yml | 2 +- shared/typetracking/CHANGELOG.md | 4 ++++ .../typetracking/change-notes/released/0.2.8.md | 3 +++ shared/typetracking/codeql-pack.release.yml | 2 +- shared/typetracking/qlpack.yml | 2 +- shared/typos/CHANGELOG.md | 4 ++++ shared/typos/change-notes/released/0.2.8.md | 3 +++ shared/typos/codeql-pack.release.yml | 2 +- shared/typos/qlpack.yml | 2 +- shared/util/CHANGELOG.md | 4 ++++ shared/util/change-notes/released/0.2.8.md | 3 +++ shared/util/codeql-pack.release.yml | 2 +- shared/util/qlpack.yml | 2 +- shared/yaml/CHANGELOG.md | 4 ++++ shared/yaml/change-notes/released/0.2.8.md | 3 +++ shared/yaml/codeql-pack.release.yml | 2 +- shared/yaml/qlpack.yml | 2 +- swift/ql/lib/CHANGELOG.md | 4 ++++ swift/ql/lib/change-notes/released/0.3.8.md | 3 +++ swift/ql/lib/codeql-pack.release.yml | 2 +- swift/ql/lib/qlpack.yml | 2 +- swift/ql/src/CHANGELOG.md | 4 ++++ swift/ql/src/change-notes/released/0.3.8.md | 3 +++ swift/ql/src/codeql-pack.release.yml | 2 +- swift/ql/src/qlpack.yml | 2 +- 148 files changed, 383 insertions(+), 154 deletions(-) delete mode 100644 cpp/ql/lib/change-notes/2024-01-30-throwing-model.md rename cpp/ql/lib/change-notes/{2024-01-30-preproc-block.md => released/0.12.5.md} (55%) delete mode 100644 cpp/ql/src/change-notes/2024-01-19-extracted-files.md delete mode 100644 cpp/ql/src/change-notes/2024-01-29-false_positive_incorrect_string_type_conversion.md delete mode 100644 cpp/ql/src/change-notes/2024-01-29-incorrectly-checked-scanf-2.md delete mode 100644 cpp/ql/src/change-notes/2024-01-29-incorrectly-checked-scanf.md delete mode 100644 cpp/ql/src/change-notes/2024-01-29-uninitialized-local-false-positive.md create mode 100644 cpp/ql/src/change-notes/released/0.9.4.md create mode 100644 csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.8.md create mode 100644 csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.8.md delete mode 100644 csharp/ql/lib/change-notes/2024-01-25-extractor-option-logging.md delete mode 100644 csharp/ql/lib/change-notes/2024-01-26-collection-expression.md delete mode 100644 csharp/ql/lib/change-notes/2024-01-31-compilation-expanded-args.md create mode 100644 csharp/ql/lib/change-notes/released/0.8.8.md rename csharp/ql/src/change-notes/{2024-01-22-url-redirect-sanitizer.md => released/0.8.8.md} (75%) create mode 100644 go/ql/consistency-queries/change-notes/released/0.0.7.md create mode 100644 go/ql/lib/change-notes/released/0.7.8.md create mode 100644 go/ql/src/change-notes/released/0.7.8.md create mode 100644 java/ql/automodel/src/change-notes/released/0.0.14.md delete mode 100644 java/ql/lib/change-notes/2024-01-24-new-models.md rename java/ql/lib/change-notes/{2024-01-23-add-uuid-and-date-to-simpletypesanitizer.md => released/0.8.8.md} (52%) delete mode 100644 java/ql/src/change-notes/2024-01-15-android-sensitive-notification-query.md delete mode 100644 java/ql/src/change-notes/2024-01-29-android-sensitive-text-field-query.md create mode 100644 java/ql/src/change-notes/released/0.8.8.md create mode 100644 javascript/ql/lib/change-notes/released/0.8.8.md create mode 100644 javascript/ql/src/change-notes/released/0.8.8.md create mode 100644 misc/suite-helpers/change-notes/released/0.7.8.md delete mode 100644 python/ql/lib/change-notes/2024-01-21-regex-ascii-flag.md delete mode 100644 python/ql/lib/change-notes/2024-01-22-html-escape.md create mode 100644 python/ql/lib/change-notes/released/0.11.8.md create mode 100644 python/ql/src/change-notes/released/0.9.8.md rename ruby/ql/lib/change-notes/{2024-01-22-erb-render-flow.md => released/0.8.8.md} (79%) delete mode 100644 ruby/ql/src/change-notes/2023-12-18-insecure-randomness-query.md delete mode 100644 ruby/ql/src/change-notes/2024-01-30-unsafe-deserialization-sinks.md create mode 100644 ruby/ql/src/change-notes/released/0.8.8.md create mode 100644 shared/controlflow/change-notes/released/0.1.8.md create mode 100644 shared/dataflow/change-notes/released/0.1.8.md create mode 100644 shared/mad/change-notes/released/0.2.8.md create mode 100644 shared/rangeanalysis/change-notes/released/0.0.7.md create mode 100644 shared/regex/change-notes/released/0.2.8.md create mode 100644 shared/ssa/change-notes/released/0.2.8.md create mode 100644 shared/threat-models/change-notes/released/0.0.7.md create mode 100644 shared/tutorial/change-notes/released/0.2.8.md create mode 100644 shared/typetracking/change-notes/released/0.2.8.md create mode 100644 shared/typos/change-notes/released/0.2.8.md create mode 100644 shared/util/change-notes/released/0.2.8.md create mode 100644 shared/yaml/change-notes/released/0.2.8.md create mode 100644 swift/ql/lib/change-notes/released/0.3.8.md create mode 100644 swift/ql/src/change-notes/released/0.3.8.md diff --git a/cpp/ql/lib/CHANGELOG.md b/cpp/ql/lib/CHANGELOG.md index dc092f2ed35..b552a329250 100644 --- a/cpp/ql/lib/CHANGELOG.md +++ b/cpp/ql/lib/CHANGELOG.md @@ -1,3 +1,10 @@ +## 0.12.5 + +### New Features + +* Added the `PreprocBlock.qll` library to this repository. This library offers a view of `#if`, `#elif`, `#else` and similar directives as a tree with navigable parent-child relationships. +* Added a new `ThrowingFunction` abstract class that can be used to model an external function that may throw an exception. + ## 0.12.4 ### Minor Analysis Improvements diff --git a/cpp/ql/lib/change-notes/2024-01-30-throwing-model.md b/cpp/ql/lib/change-notes/2024-01-30-throwing-model.md deleted file mode 100644 index 591cc8cc771..00000000000 --- a/cpp/ql/lib/change-notes/2024-01-30-throwing-model.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: feature ---- -* Added a new `ThrowingFunction` abstract class that can be used to model an external function that may throw an exception. \ No newline at end of file diff --git a/cpp/ql/lib/change-notes/2024-01-30-preproc-block.md b/cpp/ql/lib/change-notes/released/0.12.5.md similarity index 55% rename from cpp/ql/lib/change-notes/2024-01-30-preproc-block.md rename to cpp/ql/lib/change-notes/released/0.12.5.md index 6995ec954ff..1ae4668a5c9 100644 --- a/cpp/ql/lib/change-notes/2024-01-30-preproc-block.md +++ b/cpp/ql/lib/change-notes/released/0.12.5.md @@ -1,4 +1,6 @@ ---- -category: feature ---- +## 0.12.5 + +### New Features + * Added the `PreprocBlock.qll` library to this repository. This library offers a view of `#if`, `#elif`, `#else` and similar directives as a tree with navigable parent-child relationships. +* Added a new `ThrowingFunction` abstract class that can be used to model an external function that may throw an exception. diff --git a/cpp/ql/lib/codeql-pack.release.yml b/cpp/ql/lib/codeql-pack.release.yml index b458bb47c53..79f80ae516c 100644 --- a/cpp/ql/lib/codeql-pack.release.yml +++ b/cpp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.12.4 +lastReleaseVersion: 0.12.5 diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml index f0479b167c6..b1b4172e977 100644 --- a/cpp/ql/lib/qlpack.yml +++ b/cpp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-all -version: 0.12.5-dev +version: 0.12.5 groups: cpp dbscheme: semmlecode.cpp.dbscheme extractor: cpp diff --git a/cpp/ql/src/CHANGELOG.md b/cpp/ql/src/CHANGELOG.md index 0e67defb949..68bcdbc5b07 100644 --- a/cpp/ql/src/CHANGELOG.md +++ b/cpp/ql/src/CHANGELOG.md @@ -1,3 +1,14 @@ +## 0.9.4 + +### Minor Analysis Improvements + +* Corrected 2 false positive with `cpp/incorrect-string-type-conversion`: conversion of byte arrays to wchar and new array allocations converted to wchar. +* The "Incorrect return-value check for a 'scanf'-like function" query (`cpp/incorrectly-checked-scanf`) no longer reports an alert when an explicit check for EOF is added. +* The "Incorrect return-value check for a 'scanf'-like function" query (`cpp/incorrectly-checked-scanf`) now recognizes more EOF checks. +* The "Potentially uninitialized local variable" query (`cpp/uninitialized-local`) no longer reports an alert when the local variable is used as a qualifier to a static member function call. +* ``` +* The diagnostic query `cpp/diagnostics/successfully-extracted-files` now considers any C/C++ file seen during extraction, even one with some errors, to be extracted / scanned. This affects the Code Scanning UI measure of scanned C/C++ files. + ## 0.9.3 ### Minor Analysis Improvements diff --git a/cpp/ql/src/change-notes/2024-01-19-extracted-files.md b/cpp/ql/src/change-notes/2024-01-19-extracted-files.md deleted file mode 100644 index df6de1576ac..00000000000 --- a/cpp/ql/src/change-notes/2024-01-19-extracted-files.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The diagnostic query `cpp/diagnostics/successfully-extracted-files` now considers any C/C++ file seen during extraction, even one with some errors, to be extracted / scanned. This affects the Code Scanning UI measure of scanned C/C++ files. diff --git a/cpp/ql/src/change-notes/2024-01-29-false_positive_incorrect_string_type_conversion.md b/cpp/ql/src/change-notes/2024-01-29-false_positive_incorrect_string_type_conversion.md deleted file mode 100644 index 8f081c746f1..00000000000 --- a/cpp/ql/src/change-notes/2024-01-29-false_positive_incorrect_string_type_conversion.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Corrected 2 false positive with `cpp/incorrect-string-type-conversion`: conversion of byte arrays to wchar and new array allocations converted to wchar. \ No newline at end of file diff --git a/cpp/ql/src/change-notes/2024-01-29-incorrectly-checked-scanf-2.md b/cpp/ql/src/change-notes/2024-01-29-incorrectly-checked-scanf-2.md deleted file mode 100644 index cc361145db9..00000000000 --- a/cpp/ql/src/change-notes/2024-01-29-incorrectly-checked-scanf-2.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The "Incorrect return-value check for a 'scanf'-like function" query (`cpp/incorrectly-checked-scanf`) now recognizes more EOF checks. diff --git a/cpp/ql/src/change-notes/2024-01-29-incorrectly-checked-scanf.md b/cpp/ql/src/change-notes/2024-01-29-incorrectly-checked-scanf.md deleted file mode 100644 index 7085b9ce0a8..00000000000 --- a/cpp/ql/src/change-notes/2024-01-29-incorrectly-checked-scanf.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The "Incorrect return-value check for a 'scanf'-like function" query (`cpp/incorrectly-checked-scanf`) no longer reports an alert when an explicit check for EOF is added. diff --git a/cpp/ql/src/change-notes/2024-01-29-uninitialized-local-false-positive.md b/cpp/ql/src/change-notes/2024-01-29-uninitialized-local-false-positive.md deleted file mode 100644 index 0d07482b755..00000000000 --- a/cpp/ql/src/change-notes/2024-01-29-uninitialized-local-false-positive.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -category: minorAnalysis ---- -* The "Potentially uninitialized local variable" query (`cpp/uninitialized-local`) no longer reports an alert when the local variable is used as a qualifier to a static member function call. -* ``` \ No newline at end of file diff --git a/cpp/ql/src/change-notes/released/0.9.4.md b/cpp/ql/src/change-notes/released/0.9.4.md new file mode 100644 index 00000000000..6525a90f9bb --- /dev/null +++ b/cpp/ql/src/change-notes/released/0.9.4.md @@ -0,0 +1,10 @@ +## 0.9.4 + +### Minor Analysis Improvements + +* Corrected 2 false positive with `cpp/incorrect-string-type-conversion`: conversion of byte arrays to wchar and new array allocations converted to wchar. +* The "Incorrect return-value check for a 'scanf'-like function" query (`cpp/incorrectly-checked-scanf`) no longer reports an alert when an explicit check for EOF is added. +* The "Incorrect return-value check for a 'scanf'-like function" query (`cpp/incorrectly-checked-scanf`) now recognizes more EOF checks. +* The "Potentially uninitialized local variable" query (`cpp/uninitialized-local`) no longer reports an alert when the local variable is used as a qualifier to a static member function call. +* ``` +* The diagnostic query `cpp/diagnostics/successfully-extracted-files` now considers any C/C++ file seen during extraction, even one with some errors, to be extracted / scanned. This affects the Code Scanning UI measure of scanned C/C++ files. diff --git a/cpp/ql/src/codeql-pack.release.yml b/cpp/ql/src/codeql-pack.release.yml index 7af7247cbb0..694907ca221 100644 --- a/cpp/ql/src/codeql-pack.release.yml +++ b/cpp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.9.3 +lastReleaseVersion: 0.9.4 diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml index a04a6468617..0da41987b3e 100644 --- a/cpp/ql/src/qlpack.yml +++ b/cpp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-queries -version: 0.9.4-dev +version: 0.9.4 groups: - cpp - queries diff --git a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md index 8afcdeb67f3..1e9fa50c21f 100644 --- a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.7.8 + +No user-facing changes. + ## 1.7.7 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.8.md b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.8.md new file mode 100644 index 00000000000..89c236d93c5 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.8.md @@ -0,0 +1,3 @@ +## 1.7.8 + +No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml b/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml index df4010bd267..e003efd5127 100644 --- a/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml +++ b/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.7.7 +lastReleaseVersion: 1.7.8 diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml index 56cadaf8534..77b1c8b5154 100644 --- a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-all -version: 1.7.8-dev +version: 1.7.8 groups: - csharp - solorigate diff --git a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md index 8afcdeb67f3..1e9fa50c21f 100644 --- a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.7.8 + +No user-facing changes. + ## 1.7.7 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.8.md b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.8.md new file mode 100644 index 00000000000..89c236d93c5 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.8.md @@ -0,0 +1,3 @@ +## 1.7.8 + +No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml b/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml index df4010bd267..e003efd5127 100644 --- a/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml +++ b/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.7.7 +lastReleaseVersion: 1.7.8 diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml index 0b783c75d5a..9851e27c691 100644 --- a/csharp/ql/campaigns/Solorigate/src/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-queries -version: 1.7.8-dev +version: 1.7.8 groups: - csharp - solorigate diff --git a/csharp/ql/lib/CHANGELOG.md b/csharp/ql/lib/CHANGELOG.md index 0b168b22df6..196cd5ecc92 100644 --- a/csharp/ql/lib/CHANGELOG.md +++ b/csharp/ql/lib/CHANGELOG.md @@ -1,3 +1,14 @@ +## 0.8.8 + +### Minor Analysis Improvements + +* Added a new database relation to store compiler arguments specified inside `@[...].rsp` file arguments. The arguments +are returned by `Compilation::getExpandedArgument/1` and `Compilation::getExpandedArguments/0`. +* C# 12: Added extractor, QL library and data flow support for collection expressions like `[1, y, 4, .. x]`. +* The C# extractor now accepts an extractor option `logging.verbosity` that specifies the verbosity of the logs. The +option is added via `codeql database create --language=csharp -Ologging.verbosity=debug ...` or by setting the +corresponding environment variable `CODEQL_EXTRACTOR_CSHARP_OPTION_LOGGING_VERBOSITY`. + ## 0.8.7 ### Minor Analysis Improvements diff --git a/csharp/ql/lib/change-notes/2024-01-25-extractor-option-logging.md b/csharp/ql/lib/change-notes/2024-01-25-extractor-option-logging.md deleted file mode 100644 index 71cb3202675..00000000000 --- a/csharp/ql/lib/change-notes/2024-01-25-extractor-option-logging.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: minorAnalysis ---- -* The C# extractor now accepts an extractor option `logging.verbosity` that specifies the verbosity of the logs. The -option is added via `codeql database create --language=csharp -Ologging.verbosity=debug ...` or by setting the -corresponding environment variable `CODEQL_EXTRACTOR_CSHARP_OPTION_LOGGING_VERBOSITY`. \ No newline at end of file diff --git a/csharp/ql/lib/change-notes/2024-01-26-collection-expression.md b/csharp/ql/lib/change-notes/2024-01-26-collection-expression.md deleted file mode 100644 index 10a958dcf47..00000000000 --- a/csharp/ql/lib/change-notes/2024-01-26-collection-expression.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* C# 12: Added extractor, QL library and data flow support for collection expressions like `[1, y, 4, .. x]`. diff --git a/csharp/ql/lib/change-notes/2024-01-31-compilation-expanded-args.md b/csharp/ql/lib/change-notes/2024-01-31-compilation-expanded-args.md deleted file mode 100644 index 8767c0d1d65..00000000000 --- a/csharp/ql/lib/change-notes/2024-01-31-compilation-expanded-args.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -category: minorAnalysis ---- -* Added a new database relation to store compiler arguments specified inside `@[...].rsp` file arguments. The arguments -are returned by `Compilation::getExpandedArgument/1` and `Compilation::getExpandedArguments/0`. diff --git a/csharp/ql/lib/change-notes/released/0.8.8.md b/csharp/ql/lib/change-notes/released/0.8.8.md new file mode 100644 index 00000000000..96b317ecd06 --- /dev/null +++ b/csharp/ql/lib/change-notes/released/0.8.8.md @@ -0,0 +1,10 @@ +## 0.8.8 + +### Minor Analysis Improvements + +* Added a new database relation to store compiler arguments specified inside `@[...].rsp` file arguments. The arguments +are returned by `Compilation::getExpandedArgument/1` and `Compilation::getExpandedArguments/0`. +* C# 12: Added extractor, QL library and data flow support for collection expressions like `[1, y, 4, .. x]`. +* The C# extractor now accepts an extractor option `logging.verbosity` that specifies the verbosity of the logs. The +option is added via `codeql database create --language=csharp -Ologging.verbosity=debug ...` or by setting the +corresponding environment variable `CODEQL_EXTRACTOR_CSHARP_OPTION_LOGGING_VERBOSITY`. diff --git a/csharp/ql/lib/codeql-pack.release.yml b/csharp/ql/lib/codeql-pack.release.yml index 2ef6dc421f3..da0a61b4048 100644 --- a/csharp/ql/lib/codeql-pack.release.yml +++ b/csharp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.7 +lastReleaseVersion: 0.8.8 diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index 9d8db7347cb..2b137281da6 100644 --- a/csharp/ql/lib/qlpack.yml +++ b/csharp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-all -version: 0.8.8-dev +version: 0.8.8 groups: csharp dbscheme: semmlecode.csharp.dbscheme extractor: csharp diff --git a/csharp/ql/src/CHANGELOG.md b/csharp/ql/src/CHANGELOG.md index 6572f664b0e..ac2fbfce855 100644 --- a/csharp/ql/src/CHANGELOG.md +++ b/csharp/ql/src/CHANGELOG.md @@ -1,3 +1,9 @@ +## 0.8.8 + +### Minor Analysis Improvements + +* Added string interpolation expressions and `string.Format` as possible sanitizers for the `cs/web/unvalidated-url-redirection` query. + ## 0.8.7 ### Minor Analysis Improvements diff --git a/csharp/ql/src/change-notes/2024-01-22-url-redirect-sanitizer.md b/csharp/ql/src/change-notes/released/0.8.8.md similarity index 75% rename from csharp/ql/src/change-notes/2024-01-22-url-redirect-sanitizer.md rename to csharp/ql/src/change-notes/released/0.8.8.md index 92a65075a65..d6f017bcf41 100644 --- a/csharp/ql/src/change-notes/2024-01-22-url-redirect-sanitizer.md +++ b/csharp/ql/src/change-notes/released/0.8.8.md @@ -1,4 +1,5 @@ ---- -category: minorAnalysis ---- +## 0.8.8 + +### Minor Analysis Improvements + * Added string interpolation expressions and `string.Format` as possible sanitizers for the `cs/web/unvalidated-url-redirection` query. diff --git a/csharp/ql/src/codeql-pack.release.yml b/csharp/ql/src/codeql-pack.release.yml index 2ef6dc421f3..da0a61b4048 100644 --- a/csharp/ql/src/codeql-pack.release.yml +++ b/csharp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.7 +lastReleaseVersion: 0.8.8 diff --git a/csharp/ql/src/qlpack.yml b/csharp/ql/src/qlpack.yml index c3973948993..a16c72edd72 100644 --- a/csharp/ql/src/qlpack.yml +++ b/csharp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-queries -version: 0.8.8-dev +version: 0.8.8 groups: - csharp - queries diff --git a/go/ql/consistency-queries/CHANGELOG.md b/go/ql/consistency-queries/CHANGELOG.md index ad2e63eb470..8f58f5145db 100644 --- a/go/ql/consistency-queries/CHANGELOG.md +++ b/go/ql/consistency-queries/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.7 + +No user-facing changes. + ## 0.0.6 No user-facing changes. diff --git a/go/ql/consistency-queries/change-notes/released/0.0.7.md b/go/ql/consistency-queries/change-notes/released/0.0.7.md new file mode 100644 index 00000000000..84da6f18c42 --- /dev/null +++ b/go/ql/consistency-queries/change-notes/released/0.0.7.md @@ -0,0 +1,3 @@ +## 0.0.7 + +No user-facing changes. diff --git a/go/ql/consistency-queries/codeql-pack.release.yml b/go/ql/consistency-queries/codeql-pack.release.yml index cf398ce02aa..a2a5484910b 100644 --- a/go/ql/consistency-queries/codeql-pack.release.yml +++ b/go/ql/consistency-queries/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.6 +lastReleaseVersion: 0.0.7 diff --git a/go/ql/consistency-queries/qlpack.yml b/go/ql/consistency-queries/qlpack.yml index 88886034408..c7522dd8e35 100644 --- a/go/ql/consistency-queries/qlpack.yml +++ b/go/ql/consistency-queries/qlpack.yml @@ -1,5 +1,5 @@ name: codeql-go-consistency-queries -version: 0.0.7-dev +version: 0.0.7 groups: - go - queries diff --git a/go/ql/lib/CHANGELOG.md b/go/ql/lib/CHANGELOG.md index b9ff6e4e0e2..475352f1df2 100644 --- a/go/ql/lib/CHANGELOG.md +++ b/go/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.7.8 + +No user-facing changes. + ## 0.7.7 ### Deprecated APIs diff --git a/go/ql/lib/change-notes/released/0.7.8.md b/go/ql/lib/change-notes/released/0.7.8.md new file mode 100644 index 00000000000..5627ed51a17 --- /dev/null +++ b/go/ql/lib/change-notes/released/0.7.8.md @@ -0,0 +1,3 @@ +## 0.7.8 + +No user-facing changes. diff --git a/go/ql/lib/codeql-pack.release.yml b/go/ql/lib/codeql-pack.release.yml index 89cc2330c10..b6b12196b26 100644 --- a/go/ql/lib/codeql-pack.release.yml +++ b/go/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.7.7 +lastReleaseVersion: 0.7.8 diff --git a/go/ql/lib/qlpack.yml b/go/ql/lib/qlpack.yml index 67c991934e0..5f317377d45 100644 --- a/go/ql/lib/qlpack.yml +++ b/go/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-all -version: 0.7.8-dev +version: 0.7.8 groups: go dbscheme: go.dbscheme extractor: go diff --git a/go/ql/src/CHANGELOG.md b/go/ql/src/CHANGELOG.md index dafcd7aa695..66533a629f2 100644 --- a/go/ql/src/CHANGELOG.md +++ b/go/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.7.8 + +No user-facing changes. + ## 0.7.7 ### Minor Analysis Improvements diff --git a/go/ql/src/change-notes/released/0.7.8.md b/go/ql/src/change-notes/released/0.7.8.md new file mode 100644 index 00000000000..5627ed51a17 --- /dev/null +++ b/go/ql/src/change-notes/released/0.7.8.md @@ -0,0 +1,3 @@ +## 0.7.8 + +No user-facing changes. diff --git a/go/ql/src/codeql-pack.release.yml b/go/ql/src/codeql-pack.release.yml index 89cc2330c10..b6b12196b26 100644 --- a/go/ql/src/codeql-pack.release.yml +++ b/go/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.7.7 +lastReleaseVersion: 0.7.8 diff --git a/go/ql/src/qlpack.yml b/go/ql/src/qlpack.yml index a760c342970..81654540219 100644 --- a/go/ql/src/qlpack.yml +++ b/go/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-queries -version: 0.7.8-dev +version: 0.7.8 groups: - go - queries diff --git a/java/ql/automodel/src/CHANGELOG.md b/java/ql/automodel/src/CHANGELOG.md index eb9aae31d41..fa718635e0c 100644 --- a/java/ql/automodel/src/CHANGELOG.md +++ b/java/ql/automodel/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.14 + +No user-facing changes. + ## 0.0.13 No user-facing changes. diff --git a/java/ql/automodel/src/change-notes/released/0.0.14.md b/java/ql/automodel/src/change-notes/released/0.0.14.md new file mode 100644 index 00000000000..63b4d50ca45 --- /dev/null +++ b/java/ql/automodel/src/change-notes/released/0.0.14.md @@ -0,0 +1,3 @@ +## 0.0.14 + +No user-facing changes. diff --git a/java/ql/automodel/src/codeql-pack.release.yml b/java/ql/automodel/src/codeql-pack.release.yml index 044e54e4f7e..ca29e45d0a6 100644 --- a/java/ql/automodel/src/codeql-pack.release.yml +++ b/java/ql/automodel/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.13 +lastReleaseVersion: 0.0.14 diff --git a/java/ql/automodel/src/qlpack.yml b/java/ql/automodel/src/qlpack.yml index 0845b6f1761..3334223e9e4 100644 --- a/java/ql/automodel/src/qlpack.yml +++ b/java/ql/automodel/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-automodel-queries -version: 0.0.14-dev +version: 0.0.14 groups: - java - automodel diff --git a/java/ql/lib/CHANGELOG.md b/java/ql/lib/CHANGELOG.md index 3621a766e8a..4b34106dc09 100644 --- a/java/ql/lib/CHANGELOG.md +++ b/java/ql/lib/CHANGELOG.md @@ -1,3 +1,13 @@ +## 0.8.8 + +### Minor Analysis Improvements + +* Added models for the following packages: + + * com.fasterxml.jackson.databind + * javax.servlet +* Added the `java.util.Date` and `java.util.UUID` classes to the list of types in the `SimpleTypeSanitizer` class in `semmle.code.java.security.Sanitizers`. + ## 0.8.7 ### New Features diff --git a/java/ql/lib/change-notes/2024-01-24-new-models.md b/java/ql/lib/change-notes/2024-01-24-new-models.md deleted file mode 100644 index 8646ac1f0cb..00000000000 --- a/java/ql/lib/change-notes/2024-01-24-new-models.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -category: minorAnalysis ---- -* Added models for the following packages: - - * com.fasterxml.jackson.databind - * javax.servlet diff --git a/java/ql/lib/change-notes/2024-01-23-add-uuid-and-date-to-simpletypesanitizer.md b/java/ql/lib/change-notes/released/0.8.8.md similarity index 52% rename from java/ql/lib/change-notes/2024-01-23-add-uuid-and-date-to-simpletypesanitizer.md rename to java/ql/lib/change-notes/released/0.8.8.md index 96d6b9e0334..62186579014 100644 --- a/java/ql/lib/change-notes/2024-01-23-add-uuid-and-date-to-simpletypesanitizer.md +++ b/java/ql/lib/change-notes/released/0.8.8.md @@ -1,4 +1,9 @@ ---- -category: minorAnalysis ---- +## 0.8.8 + +### Minor Analysis Improvements + +* Added models for the following packages: + + * com.fasterxml.jackson.databind + * javax.servlet * Added the `java.util.Date` and `java.util.UUID` classes to the list of types in the `SimpleTypeSanitizer` class in `semmle.code.java.security.Sanitizers`. diff --git a/java/ql/lib/codeql-pack.release.yml b/java/ql/lib/codeql-pack.release.yml index 2ef6dc421f3..da0a61b4048 100644 --- a/java/ql/lib/codeql-pack.release.yml +++ b/java/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.7 +lastReleaseVersion: 0.8.8 diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index 62f4a0d7e96..6e4e1269d9c 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-all -version: 0.8.8-dev +version: 0.8.8 groups: java dbscheme: config/semmlecode.dbscheme extractor: java diff --git a/java/ql/src/CHANGELOG.md b/java/ql/src/CHANGELOG.md index 84096230dd1..466b98fea11 100644 --- a/java/ql/src/CHANGELOG.md +++ b/java/ql/src/CHANGELOG.md @@ -1,3 +1,10 @@ +## 0.8.8 + +### New Queries + +* Added a new query `java/android/sensitive-text` to detect instances of sensitive data being exposed through text fields without being properly masked. +* Added a new query `java/android/sensitive-notification` to detect instances of sensitive data being exposed through Android notifications. + ## 0.8.7 ### New Queries @@ -10,10 +17,6 @@ ## 0.8.6 -### Deprecated Queries - -* The three queries `java/insufficient-key-size`, `java/server-side-template-injection`, and `java/android/implicit-pendingintents` had accidentally general extension points allowing arbitrary string-based flow state. This has been fixed and the old extension points have been deprecated where possible, and otherwise updated. - ### New Queries * Added the `java/insecure-randomness` query to detect uses of weakly random values which an attacker may be able to predict. Also added the `crypto-parameter` sink kind for sinks which represent the parameters and keys of cryptographic operations. @@ -24,6 +27,10 @@ * The query `java/android/missing-certificate-pinning` should no longer alert about requests pointing to the local filesystem. * Removed some spurious sinks related to `com.opensymphony.xwork2.TextProvider.getText` from the query `java/ognl-injection`. +### Bug Fixes + +* The three queries `java/insufficient-key-size`, `java/server-side-template-injection`, and `java/android/implicit-pendingintents` had accidentally general extension points allowing arbitrary string-based flow state. This has been fixed and the old extension points have been deprecated where possible, and otherwise updated. + ## 0.8.5 No user-facing changes. diff --git a/java/ql/src/change-notes/2024-01-15-android-sensitive-notification-query.md b/java/ql/src/change-notes/2024-01-15-android-sensitive-notification-query.md deleted file mode 100644 index 427ebbe94ff..00000000000 --- a/java/ql/src/change-notes/2024-01-15-android-sensitive-notification-query.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: newQuery ---- -* Added a new query `java/android/sensitive-notification` to detect instances of sensitive data being exposed through Android notifications. \ No newline at end of file diff --git a/java/ql/src/change-notes/2024-01-29-android-sensitive-text-field-query.md b/java/ql/src/change-notes/2024-01-29-android-sensitive-text-field-query.md deleted file mode 100644 index 5e5156944a7..00000000000 --- a/java/ql/src/change-notes/2024-01-29-android-sensitive-text-field-query.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: newQuery ---- -* Added a new query `java/android/sensitive-text` to detect instances of sensitive data being exposed through text fields without being properly masked. \ No newline at end of file diff --git a/java/ql/src/change-notes/released/0.8.8.md b/java/ql/src/change-notes/released/0.8.8.md new file mode 100644 index 00000000000..94f005fdca8 --- /dev/null +++ b/java/ql/src/change-notes/released/0.8.8.md @@ -0,0 +1,6 @@ +## 0.8.8 + +### New Queries + +* Added a new query `java/android/sensitive-text` to detect instances of sensitive data being exposed through text fields without being properly masked. +* Added a new query `java/android/sensitive-notification` to detect instances of sensitive data being exposed through Android notifications. diff --git a/java/ql/src/codeql-pack.release.yml b/java/ql/src/codeql-pack.release.yml index 2ef6dc421f3..da0a61b4048 100644 --- a/java/ql/src/codeql-pack.release.yml +++ b/java/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.7 +lastReleaseVersion: 0.8.8 diff --git a/java/ql/src/qlpack.yml b/java/ql/src/qlpack.yml index 4d0d39baca3..73e8a062ffe 100644 --- a/java/ql/src/qlpack.yml +++ b/java/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-queries -version: 0.8.8-dev +version: 0.8.8 groups: - java - queries diff --git a/javascript/ql/lib/CHANGELOG.md b/javascript/ql/lib/CHANGELOG.md index 29005b5ce87..06e40ac7bd5 100644 --- a/javascript/ql/lib/CHANGELOG.md +++ b/javascript/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.8.8 + +No user-facing changes. + ## 0.8.7 ### Minor Analysis Improvements diff --git a/javascript/ql/lib/change-notes/released/0.8.8.md b/javascript/ql/lib/change-notes/released/0.8.8.md new file mode 100644 index 00000000000..14d202dac00 --- /dev/null +++ b/javascript/ql/lib/change-notes/released/0.8.8.md @@ -0,0 +1,3 @@ +## 0.8.8 + +No user-facing changes. diff --git a/javascript/ql/lib/codeql-pack.release.yml b/javascript/ql/lib/codeql-pack.release.yml index 2ef6dc421f3..da0a61b4048 100644 --- a/javascript/ql/lib/codeql-pack.release.yml +++ b/javascript/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.7 +lastReleaseVersion: 0.8.8 diff --git a/javascript/ql/lib/qlpack.yml b/javascript/ql/lib/qlpack.yml index bd0c1a815f3..fa544548ea7 100644 --- a/javascript/ql/lib/qlpack.yml +++ b/javascript/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-all -version: 0.8.8-dev +version: 0.8.8 groups: javascript dbscheme: semmlecode.javascript.dbscheme extractor: javascript diff --git a/javascript/ql/src/CHANGELOG.md b/javascript/ql/src/CHANGELOG.md index ba868a7d629..300da5225f9 100644 --- a/javascript/ql/src/CHANGELOG.md +++ b/javascript/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.8.8 + +No user-facing changes. + ## 0.8.7 ### Minor Analysis Improvements diff --git a/javascript/ql/src/change-notes/released/0.8.8.md b/javascript/ql/src/change-notes/released/0.8.8.md new file mode 100644 index 00000000000..14d202dac00 --- /dev/null +++ b/javascript/ql/src/change-notes/released/0.8.8.md @@ -0,0 +1,3 @@ +## 0.8.8 + +No user-facing changes. diff --git a/javascript/ql/src/codeql-pack.release.yml b/javascript/ql/src/codeql-pack.release.yml index 2ef6dc421f3..da0a61b4048 100644 --- a/javascript/ql/src/codeql-pack.release.yml +++ b/javascript/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.7 +lastReleaseVersion: 0.8.8 diff --git a/javascript/ql/src/qlpack.yml b/javascript/ql/src/qlpack.yml index 51a22b542e0..1ebbfc58787 100644 --- a/javascript/ql/src/qlpack.yml +++ b/javascript/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-queries -version: 0.8.8-dev +version: 0.8.8 groups: - javascript - queries diff --git a/misc/suite-helpers/CHANGELOG.md b/misc/suite-helpers/CHANGELOG.md index 1c10493c9e7..61d4b001d25 100644 --- a/misc/suite-helpers/CHANGELOG.md +++ b/misc/suite-helpers/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.7.8 + +No user-facing changes. + ## 0.7.7 No user-facing changes. diff --git a/misc/suite-helpers/change-notes/released/0.7.8.md b/misc/suite-helpers/change-notes/released/0.7.8.md new file mode 100644 index 00000000000..5627ed51a17 --- /dev/null +++ b/misc/suite-helpers/change-notes/released/0.7.8.md @@ -0,0 +1,3 @@ +## 0.7.8 + +No user-facing changes. diff --git a/misc/suite-helpers/codeql-pack.release.yml b/misc/suite-helpers/codeql-pack.release.yml index 89cc2330c10..b6b12196b26 100644 --- a/misc/suite-helpers/codeql-pack.release.yml +++ b/misc/suite-helpers/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.7.7 +lastReleaseVersion: 0.7.8 diff --git a/misc/suite-helpers/qlpack.yml b/misc/suite-helpers/qlpack.yml index 82d40178d7e..4db5dfcf454 100644 --- a/misc/suite-helpers/qlpack.yml +++ b/misc/suite-helpers/qlpack.yml @@ -1,4 +1,4 @@ name: codeql/suite-helpers -version: 0.7.8-dev +version: 0.7.8 groups: shared warnOnImplicitThis: true diff --git a/python/ql/lib/CHANGELOG.md b/python/ql/lib/CHANGELOG.md index ca684c59320..01692622749 100644 --- a/python/ql/lib/CHANGELOG.md +++ b/python/ql/lib/CHANGELOG.md @@ -1,3 +1,13 @@ +## 0.11.8 + +### Minor Analysis Improvements + +* Added `html.escape` as a sanitizer for HTML. + +### Bug Fixes + +* Fixed the `a` (ASCII) inline flag not being recognized by the regular expression library. + ## 0.11.7 ### Minor Analysis Improvements diff --git a/python/ql/lib/change-notes/2024-01-21-regex-ascii-flag.md b/python/ql/lib/change-notes/2024-01-21-regex-ascii-flag.md deleted file mode 100644 index 5d8741b1bd3..00000000000 --- a/python/ql/lib/change-notes/2024-01-21-regex-ascii-flag.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: fix ---- -* Fixed the `a` (ASCII) inline flag not being recognized by the regular expression library. diff --git a/python/ql/lib/change-notes/2024-01-22-html-escape.md b/python/ql/lib/change-notes/2024-01-22-html-escape.md deleted file mode 100644 index 0ae31aee545..00000000000 --- a/python/ql/lib/change-notes/2024-01-22-html-escape.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added `html.escape` as a sanitizer for HTML. diff --git a/python/ql/lib/change-notes/released/0.11.8.md b/python/ql/lib/change-notes/released/0.11.8.md new file mode 100644 index 00000000000..d61a4451868 --- /dev/null +++ b/python/ql/lib/change-notes/released/0.11.8.md @@ -0,0 +1,9 @@ +## 0.11.8 + +### Minor Analysis Improvements + +* Added `html.escape` as a sanitizer for HTML. + +### Bug Fixes + +* Fixed the `a` (ASCII) inline flag not being recognized by the regular expression library. diff --git a/python/ql/lib/codeql-pack.release.yml b/python/ql/lib/codeql-pack.release.yml index 59fa16251b6..345c308d402 100644 --- a/python/ql/lib/codeql-pack.release.yml +++ b/python/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.11.7 +lastReleaseVersion: 0.11.8 diff --git a/python/ql/lib/qlpack.yml b/python/ql/lib/qlpack.yml index 23bff260f7a..a2c343cca3f 100644 --- a/python/ql/lib/qlpack.yml +++ b/python/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-all -version: 0.11.8-dev +version: 0.11.8 groups: python dbscheme: semmlecode.python.dbscheme extractor: python diff --git a/python/ql/src/CHANGELOG.md b/python/ql/src/CHANGELOG.md index b42dcfd8b31..17931ead8b1 100644 --- a/python/ql/src/CHANGELOG.md +++ b/python/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.9.8 + +No user-facing changes. + ## 0.9.7 ### Minor Analysis Improvements diff --git a/python/ql/src/change-notes/released/0.9.8.md b/python/ql/src/change-notes/released/0.9.8.md new file mode 100644 index 00000000000..d1ca1c4d647 --- /dev/null +++ b/python/ql/src/change-notes/released/0.9.8.md @@ -0,0 +1,3 @@ +## 0.9.8 + +No user-facing changes. diff --git a/python/ql/src/codeql-pack.release.yml b/python/ql/src/codeql-pack.release.yml index 0921a438254..9ca6c6f2678 100644 --- a/python/ql/src/codeql-pack.release.yml +++ b/python/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.9.7 +lastReleaseVersion: 0.9.8 diff --git a/python/ql/src/qlpack.yml b/python/ql/src/qlpack.yml index 5de71eb6e3a..538e5ad799c 100644 --- a/python/ql/src/qlpack.yml +++ b/python/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-queries -version: 0.9.8-dev +version: 0.9.8 groups: - python - queries diff --git a/ruby/ql/lib/CHANGELOG.md b/ruby/ql/lib/CHANGELOG.md index e9e4507d8df..8a9e4e6c8b7 100644 --- a/ruby/ql/lib/CHANGELOG.md +++ b/ruby/ql/lib/CHANGELOG.md @@ -1,3 +1,9 @@ +## 0.8.8 + +### Minor Analysis Improvements + +* Flow is now tracked through Rails `render` calls, when the argument is a `ViewComponent`. In this case, data flow is tracked into the accompanying `.html.erb` file. + ## 0.8.7 ### Minor Analysis Improvements diff --git a/ruby/ql/lib/change-notes/2024-01-22-erb-render-flow.md b/ruby/ql/lib/change-notes/released/0.8.8.md similarity index 79% rename from ruby/ql/lib/change-notes/2024-01-22-erb-render-flow.md rename to ruby/ql/lib/change-notes/released/0.8.8.md index f9e68ef580e..dc4b3dd43e3 100644 --- a/ruby/ql/lib/change-notes/2024-01-22-erb-render-flow.md +++ b/ruby/ql/lib/change-notes/released/0.8.8.md @@ -1,4 +1,5 @@ ---- -category: minorAnalysis ---- +## 0.8.8 + +### Minor Analysis Improvements + * Flow is now tracked through Rails `render` calls, when the argument is a `ViewComponent`. In this case, data flow is tracked into the accompanying `.html.erb` file. diff --git a/ruby/ql/lib/codeql-pack.release.yml b/ruby/ql/lib/codeql-pack.release.yml index 2ef6dc421f3..da0a61b4048 100644 --- a/ruby/ql/lib/codeql-pack.release.yml +++ b/ruby/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.7 +lastReleaseVersion: 0.8.8 diff --git a/ruby/ql/lib/qlpack.yml b/ruby/ql/lib/qlpack.yml index 8179ac53996..7eb6222e101 100644 --- a/ruby/ql/lib/qlpack.yml +++ b/ruby/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-all -version: 0.8.8-dev +version: 0.8.8 groups: ruby extractor: ruby dbscheme: ruby.dbscheme diff --git a/ruby/ql/src/CHANGELOG.md b/ruby/ql/src/CHANGELOG.md index 05a89118b05..9eff67dab9e 100644 --- a/ruby/ql/src/CHANGELOG.md +++ b/ruby/ql/src/CHANGELOG.md @@ -1,3 +1,14 @@ +## 0.8.8 + +### New Queries + +* Added a new experimental query, `rb/insecure-randomness`, to detect when application uses random values that are not cryptographically secure. + +### Minor Analysis Improvements + +* Added new unsafe deserialization sinks for the ox gem. +* Added an additional unsafe deserialization sink for the oj gem. + ## 0.8.7 No user-facing changes. diff --git a/ruby/ql/src/change-notes/2023-12-18-insecure-randomness-query.md b/ruby/ql/src/change-notes/2023-12-18-insecure-randomness-query.md deleted file mode 100644 index a4b3cd5a1f5..00000000000 --- a/ruby/ql/src/change-notes/2023-12-18-insecure-randomness-query.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: newQuery ---- -* Added a new experimental query, `rb/insecure-randomness`, to detect when application uses random values that are not cryptographically secure. \ No newline at end of file diff --git a/ruby/ql/src/change-notes/2024-01-30-unsafe-deserialization-sinks.md b/ruby/ql/src/change-notes/2024-01-30-unsafe-deserialization-sinks.md deleted file mode 100644 index 3ba080e91ab..00000000000 --- a/ruby/ql/src/change-notes/2024-01-30-unsafe-deserialization-sinks.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -category: minorAnalysis ---- -* Added new unsafe deserialization sinks for the ox gem. -* Added an additional unsafe deserialization sink for the oj gem. diff --git a/ruby/ql/src/change-notes/released/0.8.8.md b/ruby/ql/src/change-notes/released/0.8.8.md new file mode 100644 index 00000000000..b8aaed87425 --- /dev/null +++ b/ruby/ql/src/change-notes/released/0.8.8.md @@ -0,0 +1,10 @@ +## 0.8.8 + +### New Queries + +* Added a new experimental query, `rb/insecure-randomness`, to detect when application uses random values that are not cryptographically secure. + +### Minor Analysis Improvements + +* Added new unsafe deserialization sinks for the ox gem. +* Added an additional unsafe deserialization sink for the oj gem. diff --git a/ruby/ql/src/codeql-pack.release.yml b/ruby/ql/src/codeql-pack.release.yml index 2ef6dc421f3..da0a61b4048 100644 --- a/ruby/ql/src/codeql-pack.release.yml +++ b/ruby/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.7 +lastReleaseVersion: 0.8.8 diff --git a/ruby/ql/src/qlpack.yml b/ruby/ql/src/qlpack.yml index 6891e0227d3..7c1995c00e5 100644 --- a/ruby/ql/src/qlpack.yml +++ b/ruby/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-queries -version: 0.8.8-dev +version: 0.8.8 groups: - ruby - queries diff --git a/shared/controlflow/CHANGELOG.md b/shared/controlflow/CHANGELOG.md index 6635db28abc..d72921d34c1 100644 --- a/shared/controlflow/CHANGELOG.md +++ b/shared/controlflow/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.1.8 + +No user-facing changes. + ## 0.1.7 No user-facing changes. diff --git a/shared/controlflow/change-notes/released/0.1.8.md b/shared/controlflow/change-notes/released/0.1.8.md new file mode 100644 index 00000000000..5b20b52baf1 --- /dev/null +++ b/shared/controlflow/change-notes/released/0.1.8.md @@ -0,0 +1,3 @@ +## 0.1.8 + +No user-facing changes. diff --git a/shared/controlflow/codeql-pack.release.yml b/shared/controlflow/codeql-pack.release.yml index 949d4c64c66..3136ea4a1cc 100644 --- a/shared/controlflow/codeql-pack.release.yml +++ b/shared/controlflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.1.7 +lastReleaseVersion: 0.1.8 diff --git a/shared/controlflow/qlpack.yml b/shared/controlflow/qlpack.yml index c6c4fb5f728..79d4a386cf1 100644 --- a/shared/controlflow/qlpack.yml +++ b/shared/controlflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/controlflow -version: 0.1.8-dev +version: 0.1.8 groups: shared library: true dependencies: diff --git a/shared/dataflow/CHANGELOG.md b/shared/dataflow/CHANGELOG.md index c537cb3bb8e..e9b6c3bc904 100644 --- a/shared/dataflow/CHANGELOG.md +++ b/shared/dataflow/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.1.8 + +No user-facing changes. + ## 0.1.7 No user-facing changes. diff --git a/shared/dataflow/change-notes/released/0.1.8.md b/shared/dataflow/change-notes/released/0.1.8.md new file mode 100644 index 00000000000..5b20b52baf1 --- /dev/null +++ b/shared/dataflow/change-notes/released/0.1.8.md @@ -0,0 +1,3 @@ +## 0.1.8 + +No user-facing changes. diff --git a/shared/dataflow/codeql-pack.release.yml b/shared/dataflow/codeql-pack.release.yml index 949d4c64c66..3136ea4a1cc 100644 --- a/shared/dataflow/codeql-pack.release.yml +++ b/shared/dataflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.1.7 +lastReleaseVersion: 0.1.8 diff --git a/shared/dataflow/qlpack.yml b/shared/dataflow/qlpack.yml index 91d1454351c..ffb4d0754be 100644 --- a/shared/dataflow/qlpack.yml +++ b/shared/dataflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/dataflow -version: 0.1.8-dev +version: 0.1.8 groups: shared library: true dependencies: diff --git a/shared/mad/CHANGELOG.md b/shared/mad/CHANGELOG.md index 438ce8241a6..35042f79b69 100644 --- a/shared/mad/CHANGELOG.md +++ b/shared/mad/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.8 + +No user-facing changes. + ## 0.2.7 No user-facing changes. diff --git a/shared/mad/change-notes/released/0.2.8.md b/shared/mad/change-notes/released/0.2.8.md new file mode 100644 index 00000000000..2f8aa0dd21e --- /dev/null +++ b/shared/mad/change-notes/released/0.2.8.md @@ -0,0 +1,3 @@ +## 0.2.8 + +No user-facing changes. diff --git a/shared/mad/codeql-pack.release.yml b/shared/mad/codeql-pack.release.yml index 6d3c0021858..66ad7f587f8 100644 --- a/shared/mad/codeql-pack.release.yml +++ b/shared/mad/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.7 +lastReleaseVersion: 0.2.8 diff --git a/shared/mad/qlpack.yml b/shared/mad/qlpack.yml index 31a8e8b7534..c4eade3b256 100644 --- a/shared/mad/qlpack.yml +++ b/shared/mad/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/mad -version: 0.2.8-dev +version: 0.2.8 groups: shared library: true dependencies: null diff --git a/shared/rangeanalysis/CHANGELOG.md b/shared/rangeanalysis/CHANGELOG.md index 6f334d57356..9ad1339683f 100644 --- a/shared/rangeanalysis/CHANGELOG.md +++ b/shared/rangeanalysis/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.7 + +No user-facing changes. + ## 0.0.6 No user-facing changes. diff --git a/shared/rangeanalysis/change-notes/released/0.0.7.md b/shared/rangeanalysis/change-notes/released/0.0.7.md new file mode 100644 index 00000000000..84da6f18c42 --- /dev/null +++ b/shared/rangeanalysis/change-notes/released/0.0.7.md @@ -0,0 +1,3 @@ +## 0.0.7 + +No user-facing changes. diff --git a/shared/rangeanalysis/codeql-pack.release.yml b/shared/rangeanalysis/codeql-pack.release.yml index cf398ce02aa..a2a5484910b 100644 --- a/shared/rangeanalysis/codeql-pack.release.yml +++ b/shared/rangeanalysis/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.6 +lastReleaseVersion: 0.0.7 diff --git a/shared/rangeanalysis/qlpack.yml b/shared/rangeanalysis/qlpack.yml index 6317ae4cac4..faa059f069a 100644 --- a/shared/rangeanalysis/qlpack.yml +++ b/shared/rangeanalysis/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rangeanalysis -version: 0.0.7-dev +version: 0.0.7 groups: shared library: true dependencies: diff --git a/shared/regex/CHANGELOG.md b/shared/regex/CHANGELOG.md index 267288c38df..bf0aa553157 100644 --- a/shared/regex/CHANGELOG.md +++ b/shared/regex/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.8 + +No user-facing changes. + ## 0.2.7 No user-facing changes. diff --git a/shared/regex/change-notes/released/0.2.8.md b/shared/regex/change-notes/released/0.2.8.md new file mode 100644 index 00000000000..2f8aa0dd21e --- /dev/null +++ b/shared/regex/change-notes/released/0.2.8.md @@ -0,0 +1,3 @@ +## 0.2.8 + +No user-facing changes. diff --git a/shared/regex/codeql-pack.release.yml b/shared/regex/codeql-pack.release.yml index 6d3c0021858..66ad7f587f8 100644 --- a/shared/regex/codeql-pack.release.yml +++ b/shared/regex/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.7 +lastReleaseVersion: 0.2.8 diff --git a/shared/regex/qlpack.yml b/shared/regex/qlpack.yml index c75c3ca7b2d..57aa69e9629 100644 --- a/shared/regex/qlpack.yml +++ b/shared/regex/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/regex -version: 0.2.8-dev +version: 0.2.8 groups: shared library: true dependencies: diff --git a/shared/ssa/CHANGELOG.md b/shared/ssa/CHANGELOG.md index 8a920eb7bed..7c9b57d2b8e 100644 --- a/shared/ssa/CHANGELOG.md +++ b/shared/ssa/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.8 + +No user-facing changes. + ## 0.2.7 ### Minor Analysis Improvements diff --git a/shared/ssa/change-notes/released/0.2.8.md b/shared/ssa/change-notes/released/0.2.8.md new file mode 100644 index 00000000000..2f8aa0dd21e --- /dev/null +++ b/shared/ssa/change-notes/released/0.2.8.md @@ -0,0 +1,3 @@ +## 0.2.8 + +No user-facing changes. diff --git a/shared/ssa/codeql-pack.release.yml b/shared/ssa/codeql-pack.release.yml index 6d3c0021858..66ad7f587f8 100644 --- a/shared/ssa/codeql-pack.release.yml +++ b/shared/ssa/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.7 +lastReleaseVersion: 0.2.8 diff --git a/shared/ssa/qlpack.yml b/shared/ssa/qlpack.yml index 92717e37ccb..f47e195b548 100644 --- a/shared/ssa/qlpack.yml +++ b/shared/ssa/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ssa -version: 0.2.8-dev +version: 0.2.8 groups: shared library: true dependencies: diff --git a/shared/threat-models/CHANGELOG.md b/shared/threat-models/CHANGELOG.md index ad2e63eb470..8f58f5145db 100644 --- a/shared/threat-models/CHANGELOG.md +++ b/shared/threat-models/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.7 + +No user-facing changes. + ## 0.0.6 No user-facing changes. diff --git a/shared/threat-models/change-notes/released/0.0.7.md b/shared/threat-models/change-notes/released/0.0.7.md new file mode 100644 index 00000000000..84da6f18c42 --- /dev/null +++ b/shared/threat-models/change-notes/released/0.0.7.md @@ -0,0 +1,3 @@ +## 0.0.7 + +No user-facing changes. diff --git a/shared/threat-models/codeql-pack.release.yml b/shared/threat-models/codeql-pack.release.yml index cf398ce02aa..a2a5484910b 100644 --- a/shared/threat-models/codeql-pack.release.yml +++ b/shared/threat-models/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.6 +lastReleaseVersion: 0.0.7 diff --git a/shared/threat-models/qlpack.yml b/shared/threat-models/qlpack.yml index 4fd423016e2..b056dd0d720 100644 --- a/shared/threat-models/qlpack.yml +++ b/shared/threat-models/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/threat-models -version: 0.0.7-dev +version: 0.0.7 library: true groups: shared dataExtensions: diff --git a/shared/tutorial/CHANGELOG.md b/shared/tutorial/CHANGELOG.md index d89b3171dc6..bc33883a950 100644 --- a/shared/tutorial/CHANGELOG.md +++ b/shared/tutorial/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.8 + +No user-facing changes. + ## 0.2.7 No user-facing changes. diff --git a/shared/tutorial/change-notes/released/0.2.8.md b/shared/tutorial/change-notes/released/0.2.8.md new file mode 100644 index 00000000000..2f8aa0dd21e --- /dev/null +++ b/shared/tutorial/change-notes/released/0.2.8.md @@ -0,0 +1,3 @@ +## 0.2.8 + +No user-facing changes. diff --git a/shared/tutorial/codeql-pack.release.yml b/shared/tutorial/codeql-pack.release.yml index 6d3c0021858..66ad7f587f8 100644 --- a/shared/tutorial/codeql-pack.release.yml +++ b/shared/tutorial/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.7 +lastReleaseVersion: 0.2.8 diff --git a/shared/tutorial/qlpack.yml b/shared/tutorial/qlpack.yml index 573d2d5e5bd..23525cbfc60 100644 --- a/shared/tutorial/qlpack.yml +++ b/shared/tutorial/qlpack.yml @@ -1,7 +1,7 @@ name: codeql/tutorial description: Library for the CodeQL detective tutorials, helping new users learn to write CodeQL queries. -version: 0.2.8-dev +version: 0.2.8 groups: shared library: true warnOnImplicitThis: true diff --git a/shared/typetracking/CHANGELOG.md b/shared/typetracking/CHANGELOG.md index b47b17710e8..4c21bc408be 100644 --- a/shared/typetracking/CHANGELOG.md +++ b/shared/typetracking/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.8 + +No user-facing changes. + ## 0.2.7 No user-facing changes. diff --git a/shared/typetracking/change-notes/released/0.2.8.md b/shared/typetracking/change-notes/released/0.2.8.md new file mode 100644 index 00000000000..2f8aa0dd21e --- /dev/null +++ b/shared/typetracking/change-notes/released/0.2.8.md @@ -0,0 +1,3 @@ +## 0.2.8 + +No user-facing changes. diff --git a/shared/typetracking/codeql-pack.release.yml b/shared/typetracking/codeql-pack.release.yml index 6d3c0021858..66ad7f587f8 100644 --- a/shared/typetracking/codeql-pack.release.yml +++ b/shared/typetracking/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.7 +lastReleaseVersion: 0.2.8 diff --git a/shared/typetracking/qlpack.yml b/shared/typetracking/qlpack.yml index a35e17dee12..09757c9de82 100644 --- a/shared/typetracking/qlpack.yml +++ b/shared/typetracking/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typetracking -version: 0.2.8-dev +version: 0.2.8 groups: shared library: true dependencies: diff --git a/shared/typos/CHANGELOG.md b/shared/typos/CHANGELOG.md index 101d57dbad8..2b0bb7d2f75 100644 --- a/shared/typos/CHANGELOG.md +++ b/shared/typos/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.8 + +No user-facing changes. + ## 0.2.7 No user-facing changes. diff --git a/shared/typos/change-notes/released/0.2.8.md b/shared/typos/change-notes/released/0.2.8.md new file mode 100644 index 00000000000..2f8aa0dd21e --- /dev/null +++ b/shared/typos/change-notes/released/0.2.8.md @@ -0,0 +1,3 @@ +## 0.2.8 + +No user-facing changes. diff --git a/shared/typos/codeql-pack.release.yml b/shared/typos/codeql-pack.release.yml index 6d3c0021858..66ad7f587f8 100644 --- a/shared/typos/codeql-pack.release.yml +++ b/shared/typos/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.7 +lastReleaseVersion: 0.2.8 diff --git a/shared/typos/qlpack.yml b/shared/typos/qlpack.yml index bc2565304e4..4466e61ee0b 100644 --- a/shared/typos/qlpack.yml +++ b/shared/typos/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typos -version: 0.2.8-dev +version: 0.2.8 groups: shared library: true warnOnImplicitThis: true diff --git a/shared/util/CHANGELOG.md b/shared/util/CHANGELOG.md index edfa06a5da2..273afd4129b 100644 --- a/shared/util/CHANGELOG.md +++ b/shared/util/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.8 + +No user-facing changes. + ## 0.2.7 No user-facing changes. diff --git a/shared/util/change-notes/released/0.2.8.md b/shared/util/change-notes/released/0.2.8.md new file mode 100644 index 00000000000..2f8aa0dd21e --- /dev/null +++ b/shared/util/change-notes/released/0.2.8.md @@ -0,0 +1,3 @@ +## 0.2.8 + +No user-facing changes. diff --git a/shared/util/codeql-pack.release.yml b/shared/util/codeql-pack.release.yml index 6d3c0021858..66ad7f587f8 100644 --- a/shared/util/codeql-pack.release.yml +++ b/shared/util/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.7 +lastReleaseVersion: 0.2.8 diff --git a/shared/util/qlpack.yml b/shared/util/qlpack.yml index cddb6cc42f1..ae11a5bf58b 100644 --- a/shared/util/qlpack.yml +++ b/shared/util/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/util -version: 0.2.8-dev +version: 0.2.8 groups: shared library: true dependencies: null diff --git a/shared/yaml/CHANGELOG.md b/shared/yaml/CHANGELOG.md index c5b3ec6b30e..e2991032640 100644 --- a/shared/yaml/CHANGELOG.md +++ b/shared/yaml/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.8 + +No user-facing changes. + ## 0.2.7 No user-facing changes. diff --git a/shared/yaml/change-notes/released/0.2.8.md b/shared/yaml/change-notes/released/0.2.8.md new file mode 100644 index 00000000000..2f8aa0dd21e --- /dev/null +++ b/shared/yaml/change-notes/released/0.2.8.md @@ -0,0 +1,3 @@ +## 0.2.8 + +No user-facing changes. diff --git a/shared/yaml/codeql-pack.release.yml b/shared/yaml/codeql-pack.release.yml index 6d3c0021858..66ad7f587f8 100644 --- a/shared/yaml/codeql-pack.release.yml +++ b/shared/yaml/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.7 +lastReleaseVersion: 0.2.8 diff --git a/shared/yaml/qlpack.yml b/shared/yaml/qlpack.yml index 2680ca9cbb9..4d656f79862 100644 --- a/shared/yaml/qlpack.yml +++ b/shared/yaml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/yaml -version: 0.2.8-dev +version: 0.2.8 groups: shared library: true warnOnImplicitThis: true diff --git a/swift/ql/lib/CHANGELOG.md b/swift/ql/lib/CHANGELOG.md index f06c4195a35..b69d9b9e9a3 100644 --- a/swift/ql/lib/CHANGELOG.md +++ b/swift/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.3.8 + +No user-facing changes. + ## 0.3.7 ### Minor Analysis Improvements diff --git a/swift/ql/lib/change-notes/released/0.3.8.md b/swift/ql/lib/change-notes/released/0.3.8.md new file mode 100644 index 00000000000..7e9035d11c1 --- /dev/null +++ b/swift/ql/lib/change-notes/released/0.3.8.md @@ -0,0 +1,3 @@ +## 0.3.8 + +No user-facing changes. diff --git a/swift/ql/lib/codeql-pack.release.yml b/swift/ql/lib/codeql-pack.release.yml index 939934ffd00..4aa0b63b207 100644 --- a/swift/ql/lib/codeql-pack.release.yml +++ b/swift/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.3.7 +lastReleaseVersion: 0.3.8 diff --git a/swift/ql/lib/qlpack.yml b/swift/ql/lib/qlpack.yml index bb5078ca42b..8916abe3bec 100644 --- a/swift/ql/lib/qlpack.yml +++ b/swift/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-all -version: 0.3.8-dev +version: 0.3.8 groups: swift extractor: swift dbscheme: swift.dbscheme diff --git a/swift/ql/src/CHANGELOG.md b/swift/ql/src/CHANGELOG.md index ff380eb0b97..7fe6e54b241 100644 --- a/swift/ql/src/CHANGELOG.md +++ b/swift/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.3.8 + +No user-facing changes. + ## 0.3.7 ### New Queries diff --git a/swift/ql/src/change-notes/released/0.3.8.md b/swift/ql/src/change-notes/released/0.3.8.md new file mode 100644 index 00000000000..7e9035d11c1 --- /dev/null +++ b/swift/ql/src/change-notes/released/0.3.8.md @@ -0,0 +1,3 @@ +## 0.3.8 + +No user-facing changes. diff --git a/swift/ql/src/codeql-pack.release.yml b/swift/ql/src/codeql-pack.release.yml index 939934ffd00..4aa0b63b207 100644 --- a/swift/ql/src/codeql-pack.release.yml +++ b/swift/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.3.7 +lastReleaseVersion: 0.3.8 diff --git a/swift/ql/src/qlpack.yml b/swift/ql/src/qlpack.yml index e61def6dd27..4a8d3d68e74 100644 --- a/swift/ql/src/qlpack.yml +++ b/swift/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-queries -version: 0.3.8-dev +version: 0.3.8 groups: - swift - queries From 78ce857ef2e22d64a37ebf5431b576ac0b2cb53a Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Thu, 8 Feb 2024 15:27:53 +0000 Subject: [PATCH 097/378] C++: Add consistency test and accept consistency failures. --- .../dataflow-tests/type-bugs.expected | 119 ++++++++++++++++++ .../dataflow/dataflow-tests/type-bugs.ql | 11 ++ 2 files changed, 130 insertions(+) diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/type-bugs.expected b/cpp/ql/test/library-tests/dataflow/dataflow-tests/type-bugs.expected index c63c723118b..99e74b0a06b 100644 --- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/type-bugs.expected +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/type-bugs.expected @@ -1,3 +1,122 @@ astTypeBugs irTypeBugs +incorrectBaseType +| BarrierGuard.cpp:75:15:75:17 | *buf | Expected 'Node.getType()' to be const int, but it was int | +| clang.cpp:18:8:18:19 | *sourceArray1 | Expected 'Node.getType()' to be const int, but it was int | +| clang.cpp:22:8:22:20 | *& ... | Expected 'Node.getType()' to be int, but it was int * | +| clang.cpp:23:17:23:29 | *& ... | Expected 'Node.getType()' to be int, but it was int * | +| clang.cpp:52:8:52:17 | *stackArray | Expected 'Node.getType()' to be const int, but it was int | +| dispatch.cpp:60:3:60:14 | *globalBottom | Expected 'Node.getType()' to be Top, but it was Top * | +| dispatch.cpp:61:3:61:14 | *globalMiddle | Expected 'Node.getType()' to be Top, but it was Top * | +| example.c:19:6:19:6 | *b | Expected 'Node.getType()' to be MyBool, but it was (unnamed class/struct/union) | +| example.c:26:18:26:24 | *& ... | Expected 'Node.getType()' to be MyCoords, but it was (unnamed class/struct/union) | +| file://:0:0:0:0 | *this | Expected 'Node.getType()' to be const lambda [] type at line 13, col. 11, but it was decltype([...](...){...}) | +| flowOut.cpp:50:14:50:15 | *& ... | Expected 'Node.getType()' to be int, but it was int * | +| flowOut.cpp:67:21:67:21 | *p | Expected 'Node.getType()' to be const char, but it was char | +| flowOut.cpp:84:9:84:10 | *& ... | Expected 'Node.getType()' to be int, but it was int * | +| flowOut.cpp:101:13:101:14 | *& ... | Expected 'Node.getType()' to be int, but it was int * | +| flowOut.cpp:111:34:111:34 | *p | Expected 'Node.getType()' to be const void, but it was void | +| flowOut.cpp:139:30:139:30 | *p | Expected 'Node.getType()' to be const char *, but it was char * | +| flowOut.cpp:154:30:154:30 | *p | Expected 'Node.getType()' to be const char *, but it was char * | +| flowOut.cpp:168:3:168:10 | ** ... | Expected 'Node.getType()' to be char, but it was char * | +| flowOut.cpp:176:30:176:30 | *p | Expected 'Node.getType()' to be const char *, but it was char * | +| flowOut.cpp:193:30:193:30 | *p | Expected 'Node.getType()' to be const char *, but it was char * | +| lambdas.cpp:14:3:14:6 | *this | Expected 'Node.getType()' to be const lambda [] type at line 13, col. 11, but it was decltype([...](...){...}) | +| lambdas.cpp:15:3:15:6 | *this | Expected 'Node.getType()' to be const lambda [] type at line 13, col. 11, but it was decltype([...](...){...}) | +| lambdas.cpp:21:3:21:6 | *this | Expected 'Node.getType()' to be const lambda [] type at line 20, col. 11, but it was decltype([...](...){...}) | +| lambdas.cpp:22:3:22:6 | *this | Expected 'Node.getType()' to be const lambda [] type at line 20, col. 11, but it was decltype([...](...){...}) | +| lambdas.cpp:23:3:23:14 | *this | Expected 'Node.getType()' to be const lambda [] type at line 20, col. 11, but it was decltype([...](...){...}) | +| lambdas.cpp:29:3:29:6 | *this | Expected 'Node.getType()' to be const lambda [] type at line 28, col. 11, but it was decltype([...](...){...}) | +| lambdas.cpp:30:3:30:6 | *this | Expected 'Node.getType()' to be const lambda [] type at line 28, col. 11, but it was decltype([...](...){...}) | +| self_parameter_flow.cpp:8:8:8:9 | *& ... | Expected 'Node.getType()' to be unsigned char, but it was unsigned char * | +| test.cpp:67:28:67:37 | (reference dereference) | Expected 'Node.getType()' to be const int, but it was int * | +| test.cpp:67:28:67:37 | *call to move | Expected 'Node.getType()' to be const int, but it was int | +| test.cpp:70:19:70:33 | *x3 | Expected 'Node.getType()' to be const int, but it was int | +| test.cpp:71:8:71:9 | *x4 | Expected 'Node.getType()' to be const int, but it was int | +| test.cpp:384:16:384:23 | *& ... | Expected 'Node.getType()' to be const void, but it was void | +| test.cpp:391:16:391:23 | *& ... | Expected 'Node.getType()' to be const void, but it was void | +| test.cpp:400:16:400:22 | *& ... | Expected 'Node.getType()' to be const void, but it was void | +| test.cpp:407:16:407:22 | *& ... | Expected 'Node.getType()' to be const void, but it was void | +| test.cpp:526:3:526:4 | ** ... | Expected 'Node.getType()' to be const int *, but it was int * | +| test.cpp:526:3:526:4 | ** ... | Expected 'Node.getType()' to be const int, but it was int * | +| test.cpp:526:8:526:9 | *& ... | Expected 'Node.getType()' to be const int, but it was int | +| test.cpp:531:39:531:40 | *& ... | Expected 'Node.getType()' to be const int *, but it was int * | +| test.cpp:531:39:531:40 | *& ... | Expected 'Node.getType()' to be int, but it was int * | +| test.cpp:562:5:562:13 | *globalInt | Expected 'Node.getType()' to be int, but it was int * | +| test.cpp:576:5:576:13 | *globalInt | Expected 'Node.getType()' to be int, but it was int * | +| test.cpp:584:3:584:3 | *x | Expected 'Node.getType()' to be int, but it was int * | +| test.cpp:596:3:596:7 | *access to array | Expected 'Node.getType()' to be int, but it was int * | +| test.cpp:615:13:615:21 | *& ... | Expected 'Node.getType()' to be int, but it was void | +| test.cpp:704:22:704:25 | *& ... | Expected 'Node.getType()' to be int, but it was int * | +| test.cpp:715:24:715:25 | *& ... | Expected 'Node.getType()' to be unsigned char, but it was unsigned char * | +| test.cpp:727:3:727:3 | *p | Expected 'Node.getType()' to be int, but it was int * | +| test.cpp:797:31:797:39 | *content | Expected 'Node.getType()' to be const int, but it was int | +| test.cpp:808:5:808:21 | ** ... | Expected 'Node.getType()' to be int, but it was int * | +| test.cpp:832:5:832:17 | *global_direct | Expected 'Node.getType()' to be int *, but it was int ** | +| test.cpp:848:23:848:25 | (reference dereference) | Expected 'Node.getType()' to be int, but it was int * | +| test.cpp:854:10:854:36 | * ... | Expected 'Node.getType()' to be const int, but it was int | +| test.cpp:860:54:860:59 | *call to source | Expected 'Node.getType()' to be const int, but it was int | +| test.cpp:861:10:861:37 | *static_local_pointer_dynamic | Expected 'Node.getType()' to be const int, but it was int | +| test.cpp:867:10:867:30 | * ... | Expected 'Node.getType()' to be const int, but it was int | +| test.cpp:872:46:872:51 | *call to source | Expected 'Node.getType()' to be const int, but it was int | +| test.cpp:875:10:875:31 | *global_pointer_dynamic | Expected 'Node.getType()' to be const int, but it was int | +| test.cpp:882:10:882:34 | *static_local_array_static | Expected 'Node.getType()' to be const char, but it was char | +| test.cpp:883:10:883:45 | *static_local_array_static_indirect_1 | Expected 'Node.getType()' to be const char, but it was char | +| test.cpp:884:19:884:54 | *static_local_array_static_indirect_1 | Expected 'Node.getType()' to be const char, but it was char | +| test.cpp:885:10:885:45 | *static_local_array_static_indirect_2 | Expected 'Node.getType()' to be const char, but it was char | +| test.cpp:886:19:886:54 | *static_local_array_static_indirect_2 | Expected 'Node.getType()' to be const char, but it was char | +| test.cpp:890:54:890:61 | *source | Expected 'Node.getType()' to be const char, but it was char | +| test.cpp:891:65:891:84 | *indirect_source(1) | Expected 'Node.getType()' to be const char, but it was char | +| test.cpp:892:65:892:84 | *indirect_source(2) | Expected 'Node.getType()' to be const char, but it was char | +| test.cpp:893:10:893:36 | *static_local_pointer_static | Expected 'Node.getType()' to be const char, but it was char | +| test.cpp:894:10:894:47 | *static_local_pointer_static_indirect_1 | Expected 'Node.getType()' to be const char, but it was char | +| test.cpp:895:19:895:56 | *static_local_pointer_static_indirect_1 | Expected 'Node.getType()' to be const char, but it was char | +| test.cpp:896:10:896:47 | *static_local_pointer_static_indirect_2 | Expected 'Node.getType()' to be const char, but it was char | +| test.cpp:897:19:897:56 | *static_local_pointer_static_indirect_2 | Expected 'Node.getType()' to be const char, but it was char | +| test.cpp:905:10:905:28 | *global_array_static | Expected 'Node.getType()' to be const char, but it was char | +| test.cpp:907:10:907:39 | *global_array_static_indirect_1 | Expected 'Node.getType()' to be const char, but it was char | +| test.cpp:909:19:909:37 | *global_array_static | Expected 'Node.getType()' to be const char, but it was char | +| test.cpp:910:19:910:48 | *global_array_static_indirect_1 | Expected 'Node.getType()' to be const char, but it was char | +| test.cpp:911:19:911:48 | *global_array_static_indirect_2 | Expected 'Node.getType()' to be const char, but it was char | +| test.cpp:914:46:914:53 | *source | Expected 'Node.getType()' to be const char, but it was char | +| test.cpp:915:57:915:76 | *indirect_source(1) | Expected 'Node.getType()' to be const char, but it was char | +| test.cpp:916:57:916:76 | *indirect_source(2) | Expected 'Node.getType()' to be const char, but it was char | +| test.cpp:919:10:919:30 | *global_pointer_static | Expected 'Node.getType()' to be const char, but it was char | +| test.cpp:920:10:920:41 | *global_pointer_static_indirect_1 | Expected 'Node.getType()' to be const char, but it was char | +| test.cpp:921:19:921:50 | *global_pointer_static_indirect_1 | Expected 'Node.getType()' to be const char, but it was char | +| test.cpp:922:10:922:41 | *global_pointer_static_indirect_2 | Expected 'Node.getType()' to be const char, but it was char | +| test.cpp:923:19:923:50 | *global_pointer_static_indirect_2 | Expected 'Node.getType()' to be const char, but it was char | +| test.cpp:931:5:931:18 | *global_pointer | Expected 'Node.getType()' to be int, but it was int * | +| test.cpp:952:32:952:35 | *data | Expected 'Node.getType()' to be const char, but it was char | +| test.cpp:959:32:959:35 | *data | Expected 'Node.getType()' to be const char, but it was char | +| test.cpp:967:33:967:38 | *domain | Expected 'Node.getType()' to be const char, but it was char | +| test.cpp:967:41:967:44 | *data | Expected 'Node.getType()' to be const char, but it was char | +| test.cpp:975:33:975:38 | *domain | Expected 'Node.getType()' to be const char, but it was char | +| test.cpp:975:41:975:44 | *data | Expected 'Node.getType()' to be const char, but it was char | +| test.cpp:984:33:984:36 | *data | Expected 'Node.getType()' to be const char, but it was char | +| test.cpp:984:39:984:40 | *np | Expected 'Node.getType()' to be const char, but it was char | +| test.cpp:988:5:988:14 | *translated | Expected 'Node.getType()' to be char, but it was char * | +| test.cpp:988:27:988:28 | *np | Expected 'Node.getType()' to be const char, but it was char | +| test.cpp:988:31:988:34 | *data | Expected 'Node.getType()' to be const char, but it was char | +| test.cpp:997:33:997:36 | *data | Expected 'Node.getType()' to be const char, but it was char | +| test.cpp:997:39:997:40 | *np | Expected 'Node.getType()' to be const char, but it was char | +| test.cpp:1001:5:1001:14 | *translated | Expected 'Node.getType()' to be char, but it was char * | +| test.cpp:1001:27:1001:28 | *np | Expected 'Node.getType()' to be const char, but it was char | +| test.cpp:1001:31:1001:34 | *data | Expected 'Node.getType()' to be const char, but it was char | +| test.cpp:1011:34:1011:39 | *domain | Expected 'Node.getType()' to be const char, but it was char | +| test.cpp:1011:42:1011:45 | *data | Expected 'Node.getType()' to be const char, but it was char | +| test.cpp:1011:48:1011:49 | *np | Expected 'Node.getType()' to be const char, but it was char | +| test.cpp:1015:5:1015:14 | *translated | Expected 'Node.getType()' to be char, but it was char * | +| test.cpp:1015:28:1015:33 | *domain | Expected 'Node.getType()' to be const char, but it was char | +| test.cpp:1015:36:1015:37 | *np | Expected 'Node.getType()' to be const char, but it was char | +| test.cpp:1015:40:1015:43 | *data | Expected 'Node.getType()' to be const char, but it was char | +| test.cpp:1025:34:1025:39 | *domain | Expected 'Node.getType()' to be const char, but it was char | +| test.cpp:1025:42:1025:45 | *data | Expected 'Node.getType()' to be const char, but it was char | +| test.cpp:1025:48:1025:49 | *np | Expected 'Node.getType()' to be const char, but it was char | +| test.cpp:1029:5:1029:14 | *translated | Expected 'Node.getType()' to be char, but it was char * | +| test.cpp:1029:28:1029:33 | *domain | Expected 'Node.getType()' to be const char, but it was char | +| test.cpp:1029:36:1029:37 | *np | Expected 'Node.getType()' to be const char, but it was char | +| test.cpp:1029:40:1029:43 | *data | Expected 'Node.getType()' to be const char, but it was char | +| test.cpp:1036:33:1036:38 | *domain | Expected 'Node.getType()' to be const char, but it was char | +| test.cpp:1036:41:1036:47 | *0 | Expected 'Node.getType()' to be const char, but it was char | failures diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/type-bugs.ql b/cpp/ql/test/library-tests/dataflow/dataflow-tests/type-bugs.ql index 5ff9204f305..b246f392a8d 100644 --- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/type-bugs.ql +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/type-bugs.ql @@ -25,6 +25,17 @@ module IrTest { n != 1 ) } + + query predicate incorrectBaseType(Node n, string msg) { + exists(PointerType pointerType, Type nodeType, Type baseType | + not n.isGLValue() and + pointerType = n.asIndirectExpr(1).getActualType() and + baseType = pointerType.getBaseType() and + nodeType = n.getType() and + nodeType != baseType and + msg = "Expected 'Node.getType()' to be " + baseType + ", but it was " + nodeType + ) + } } import IrTest From 4d01a931079911ccb7763f8aa0b2b252b4ed86bf Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Thu, 8 Feb 2024 16:49:15 +0000 Subject: [PATCH 098/378] C++: Use 'getUnderlyingType' instead of 'getUnspecifiedType'. --- .../cpp/ir/dataflow/internal/DataFlowUtil.qll | 25 ++--- .../cpp/ir/dataflow/internal/SsaInternals.qll | 19 +++- .../dataflow-tests/type-bugs.expected | 92 +------------------ 3 files changed, 33 insertions(+), 103 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll index 1af95d1bd69..003155fd451 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll @@ -709,7 +709,7 @@ class FinalGlobalValue extends Node, TFinalGlobalValue { override DataFlowType getType() { exists(int indirectionIndex | indirectionIndex = globalUse.getIndirectionIndex() and - result = getTypeImpl(globalUse.getUnspecifiedType(), indirectionIndex - 1) + result = getTypeImpl(globalUse.getUnderlyingType(), indirectionIndex - 1) ) } @@ -740,7 +740,7 @@ class InitialGlobalValue extends Node, TInitialGlobalValue { override DataFlowType getType() { exists(DataFlowType type | - type = globalDef.getUnspecifiedType() and + type = globalDef.getUnderlyingType() and if this.isGLValue() then result = type else result = getTypeImpl(type, globalDef.getIndirectionIndex() - 1) @@ -942,11 +942,14 @@ private Type getTypeImpl0(Type t, int indirectionIndex) { or indirectionIndex > 0 and exists(Type stripped | - stripped = stripPointer(t.stripTopLevelSpecifiers()) and - // We need to avoid the case where `stripPointer(t) = t` (which can happen on - // iterators that specify a `value_type` that is the iterator itself). Such a type - // would create an infinite loop otherwise. For these cases we simply don't produce - // a result for `getTypeImpl`. + stripped = stripPointer(t) and + // We need to avoid the case where `stripPointer(t) = t` (which can happen + // on iterators that specify a `value_type` that is the iterator itself). + // Such a type would create an infinite loop otherwise. For these cases we + // simply don't produce a result for `getTypeImpl`. + // To be on the safe side, we check whether the _unspecified_ type has + // changed since this also prevents an infinite loop for occuring when + // `stripped` and `t` only differ by const'ness or volatile'ness. stripped.getUnspecifiedType() != t.getUnspecifiedType() and result = getTypeImpl0(stripped, indirectionIndex - 1) ) @@ -1001,7 +1004,7 @@ private module RawIndirectNodes { type = getOperandType(this.getOperand(), isGLValue) and if isGLValue = true then sub = 1 else sub = 0 | - result = getTypeImpl(type.getUnspecifiedType(), indirectionIndex - sub) + result = getTypeImpl(type.getUnderlyingType(), indirectionIndex - sub) ) } @@ -1043,7 +1046,7 @@ private module RawIndirectNodes { type = getInstructionType(this.getInstruction(), isGLValue) and if isGLValue = true then sub = 1 else sub = 0 | - result = getTypeImpl(type.getUnspecifiedType(), indirectionIndex - sub) + result = getTypeImpl(type.getUnderlyingType(), indirectionIndex - sub) ) } @@ -1136,7 +1139,7 @@ class FinalParameterNode extends Node, TFinalParameterNode { override Declaration getEnclosingCallable() { result = this.getFunction() } - override DataFlowType getType() { result = getTypeImpl(p.getUnspecifiedType(), indirectionIndex) } + override DataFlowType getType() { result = getTypeImpl(p.getUnderlyingType(), indirectionIndex) } final override Location getLocationImpl() { // Parameters can have multiple locations. When there's a unique location we use @@ -1789,7 +1792,7 @@ class VariableNode extends Node, TVariableNode { } override DataFlowType getType() { - result = getTypeImpl(v.getUnspecifiedType(), indirectionIndex - 1) + result = getTypeImpl(v.getUnderlyingType(), indirectionIndex - 1) } final override Location getLocationImpl() { diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternals.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternals.qll index 3e7cfbe9e11..7c2d92fee99 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternals.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternals.qll @@ -548,6 +548,11 @@ class GlobalUse extends UseImpl, TGlobalUse { */ Type getUnspecifiedType() { result = global.getUnspecifiedType() } + /** + * Gets the type of this use, after typedefs have been resolved. + */ + Type getUnderlyingType() { result = global.getUnderlyingType() } + override predicate isCertain() { any() } override BaseSourceVariableInstruction getBase() { none() } @@ -591,11 +596,16 @@ class GlobalDefImpl extends DefOrUseImpl, TGlobalDefImpl { int getIndirection() { result = indirectionIndex } /** - * Gets the type of this use after specifiers have been deeply stripped - * and typedefs have been resolved. + * Gets the type of this definition after specifiers have been deeply + * stripped and typedefs have been resolved. */ Type getUnspecifiedType() { result = global.getUnspecifiedType() } + /** + * Gets the type of this definition, after typedefs have been resolved. + */ + Type getUnderlyingType() { result = global.getUnderlyingType() } + override string toString() { result = "Def of " + this.getSourceVariable() } override Location getLocation() { result = f.getLocation() } @@ -1115,6 +1125,11 @@ class GlobalDef extends TGlobalDef, SsaDefOrUse { */ DataFlowType getUnspecifiedType() { result = global.getUnspecifiedType() } + /** + * Gets the type of this definition, after typedefs have been resolved. + */ + DataFlowType getUnderlyingType() { result = global.getUnderlyingType() } + /** Gets the `IRFunction` whose body is evaluated after this definition. */ IRFunction getIRFunction() { result = global.getIRFunction() } diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/type-bugs.expected b/cpp/ql/test/library-tests/dataflow/dataflow-tests/type-bugs.expected index 99e74b0a06b..29457971989 100644 --- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/type-bugs.expected +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/type-bugs.expected @@ -1,47 +1,18 @@ astTypeBugs irTypeBugs incorrectBaseType -| BarrierGuard.cpp:75:15:75:17 | *buf | Expected 'Node.getType()' to be const int, but it was int | -| clang.cpp:18:8:18:19 | *sourceArray1 | Expected 'Node.getType()' to be const int, but it was int | | clang.cpp:22:8:22:20 | *& ... | Expected 'Node.getType()' to be int, but it was int * | | clang.cpp:23:17:23:29 | *& ... | Expected 'Node.getType()' to be int, but it was int * | -| clang.cpp:52:8:52:17 | *stackArray | Expected 'Node.getType()' to be const int, but it was int | | dispatch.cpp:60:3:60:14 | *globalBottom | Expected 'Node.getType()' to be Top, but it was Top * | | dispatch.cpp:61:3:61:14 | *globalMiddle | Expected 'Node.getType()' to be Top, but it was Top * | -| example.c:19:6:19:6 | *b | Expected 'Node.getType()' to be MyBool, but it was (unnamed class/struct/union) | -| example.c:26:18:26:24 | *& ... | Expected 'Node.getType()' to be MyCoords, but it was (unnamed class/struct/union) | -| file://:0:0:0:0 | *this | Expected 'Node.getType()' to be const lambda [] type at line 13, col. 11, but it was decltype([...](...){...}) | | flowOut.cpp:50:14:50:15 | *& ... | Expected 'Node.getType()' to be int, but it was int * | -| flowOut.cpp:67:21:67:21 | *p | Expected 'Node.getType()' to be const char, but it was char | | flowOut.cpp:84:9:84:10 | *& ... | Expected 'Node.getType()' to be int, but it was int * | | flowOut.cpp:101:13:101:14 | *& ... | Expected 'Node.getType()' to be int, but it was int * | -| flowOut.cpp:111:34:111:34 | *p | Expected 'Node.getType()' to be const void, but it was void | -| flowOut.cpp:139:30:139:30 | *p | Expected 'Node.getType()' to be const char *, but it was char * | -| flowOut.cpp:154:30:154:30 | *p | Expected 'Node.getType()' to be const char *, but it was char * | | flowOut.cpp:168:3:168:10 | ** ... | Expected 'Node.getType()' to be char, but it was char * | -| flowOut.cpp:176:30:176:30 | *p | Expected 'Node.getType()' to be const char *, but it was char * | -| flowOut.cpp:193:30:193:30 | *p | Expected 'Node.getType()' to be const char *, but it was char * | -| lambdas.cpp:14:3:14:6 | *this | Expected 'Node.getType()' to be const lambda [] type at line 13, col. 11, but it was decltype([...](...){...}) | -| lambdas.cpp:15:3:15:6 | *this | Expected 'Node.getType()' to be const lambda [] type at line 13, col. 11, but it was decltype([...](...){...}) | -| lambdas.cpp:21:3:21:6 | *this | Expected 'Node.getType()' to be const lambda [] type at line 20, col. 11, but it was decltype([...](...){...}) | -| lambdas.cpp:22:3:22:6 | *this | Expected 'Node.getType()' to be const lambda [] type at line 20, col. 11, but it was decltype([...](...){...}) | -| lambdas.cpp:23:3:23:14 | *this | Expected 'Node.getType()' to be const lambda [] type at line 20, col. 11, but it was decltype([...](...){...}) | -| lambdas.cpp:29:3:29:6 | *this | Expected 'Node.getType()' to be const lambda [] type at line 28, col. 11, but it was decltype([...](...){...}) | -| lambdas.cpp:30:3:30:6 | *this | Expected 'Node.getType()' to be const lambda [] type at line 28, col. 11, but it was decltype([...](...){...}) | | self_parameter_flow.cpp:8:8:8:9 | *& ... | Expected 'Node.getType()' to be unsigned char, but it was unsigned char * | | test.cpp:67:28:67:37 | (reference dereference) | Expected 'Node.getType()' to be const int, but it was int * | -| test.cpp:67:28:67:37 | *call to move | Expected 'Node.getType()' to be const int, but it was int | -| test.cpp:70:19:70:33 | *x3 | Expected 'Node.getType()' to be const int, but it was int | -| test.cpp:71:8:71:9 | *x4 | Expected 'Node.getType()' to be const int, but it was int | -| test.cpp:384:16:384:23 | *& ... | Expected 'Node.getType()' to be const void, but it was void | -| test.cpp:391:16:391:23 | *& ... | Expected 'Node.getType()' to be const void, but it was void | -| test.cpp:400:16:400:22 | *& ... | Expected 'Node.getType()' to be const void, but it was void | -| test.cpp:407:16:407:22 | *& ... | Expected 'Node.getType()' to be const void, but it was void | -| test.cpp:526:3:526:4 | ** ... | Expected 'Node.getType()' to be const int *, but it was int * | -| test.cpp:526:3:526:4 | ** ... | Expected 'Node.getType()' to be const int, but it was int * | -| test.cpp:526:8:526:9 | *& ... | Expected 'Node.getType()' to be const int, but it was int | -| test.cpp:531:39:531:40 | *& ... | Expected 'Node.getType()' to be const int *, but it was int * | -| test.cpp:531:39:531:40 | *& ... | Expected 'Node.getType()' to be int, but it was int * | +| test.cpp:526:3:526:4 | ** ... | Expected 'Node.getType()' to be const int, but it was const int * | +| test.cpp:531:39:531:40 | *& ... | Expected 'Node.getType()' to be int, but it was const int * | | test.cpp:562:5:562:13 | *globalInt | Expected 'Node.getType()' to be int, but it was int * | | test.cpp:576:5:576:13 | *globalInt | Expected 'Node.getType()' to be int, but it was int * | | test.cpp:584:3:584:3 | *x | Expected 'Node.getType()' to be int, but it was int * | @@ -50,73 +21,14 @@ incorrectBaseType | test.cpp:704:22:704:25 | *& ... | Expected 'Node.getType()' to be int, but it was int * | | test.cpp:715:24:715:25 | *& ... | Expected 'Node.getType()' to be unsigned char, but it was unsigned char * | | test.cpp:727:3:727:3 | *p | Expected 'Node.getType()' to be int, but it was int * | -| test.cpp:797:31:797:39 | *content | Expected 'Node.getType()' to be const int, but it was int | | test.cpp:808:5:808:21 | ** ... | Expected 'Node.getType()' to be int, but it was int * | | test.cpp:832:5:832:17 | *global_direct | Expected 'Node.getType()' to be int *, but it was int ** | | test.cpp:848:23:848:25 | (reference dereference) | Expected 'Node.getType()' to be int, but it was int * | | test.cpp:854:10:854:36 | * ... | Expected 'Node.getType()' to be const int, but it was int | -| test.cpp:860:54:860:59 | *call to source | Expected 'Node.getType()' to be const int, but it was int | -| test.cpp:861:10:861:37 | *static_local_pointer_dynamic | Expected 'Node.getType()' to be const int, but it was int | | test.cpp:867:10:867:30 | * ... | Expected 'Node.getType()' to be const int, but it was int | -| test.cpp:872:46:872:51 | *call to source | Expected 'Node.getType()' to be const int, but it was int | -| test.cpp:875:10:875:31 | *global_pointer_dynamic | Expected 'Node.getType()' to be const int, but it was int | -| test.cpp:882:10:882:34 | *static_local_array_static | Expected 'Node.getType()' to be const char, but it was char | -| test.cpp:883:10:883:45 | *static_local_array_static_indirect_1 | Expected 'Node.getType()' to be const char, but it was char | -| test.cpp:884:19:884:54 | *static_local_array_static_indirect_1 | Expected 'Node.getType()' to be const char, but it was char | -| test.cpp:885:10:885:45 | *static_local_array_static_indirect_2 | Expected 'Node.getType()' to be const char, but it was char | -| test.cpp:886:19:886:54 | *static_local_array_static_indirect_2 | Expected 'Node.getType()' to be const char, but it was char | -| test.cpp:890:54:890:61 | *source | Expected 'Node.getType()' to be const char, but it was char | -| test.cpp:891:65:891:84 | *indirect_source(1) | Expected 'Node.getType()' to be const char, but it was char | -| test.cpp:892:65:892:84 | *indirect_source(2) | Expected 'Node.getType()' to be const char, but it was char | -| test.cpp:893:10:893:36 | *static_local_pointer_static | Expected 'Node.getType()' to be const char, but it was char | -| test.cpp:894:10:894:47 | *static_local_pointer_static_indirect_1 | Expected 'Node.getType()' to be const char, but it was char | -| test.cpp:895:19:895:56 | *static_local_pointer_static_indirect_1 | Expected 'Node.getType()' to be const char, but it was char | -| test.cpp:896:10:896:47 | *static_local_pointer_static_indirect_2 | Expected 'Node.getType()' to be const char, but it was char | -| test.cpp:897:19:897:56 | *static_local_pointer_static_indirect_2 | Expected 'Node.getType()' to be const char, but it was char | -| test.cpp:905:10:905:28 | *global_array_static | Expected 'Node.getType()' to be const char, but it was char | -| test.cpp:907:10:907:39 | *global_array_static_indirect_1 | Expected 'Node.getType()' to be const char, but it was char | -| test.cpp:909:19:909:37 | *global_array_static | Expected 'Node.getType()' to be const char, but it was char | -| test.cpp:910:19:910:48 | *global_array_static_indirect_1 | Expected 'Node.getType()' to be const char, but it was char | -| test.cpp:911:19:911:48 | *global_array_static_indirect_2 | Expected 'Node.getType()' to be const char, but it was char | -| test.cpp:914:46:914:53 | *source | Expected 'Node.getType()' to be const char, but it was char | -| test.cpp:915:57:915:76 | *indirect_source(1) | Expected 'Node.getType()' to be const char, but it was char | -| test.cpp:916:57:916:76 | *indirect_source(2) | Expected 'Node.getType()' to be const char, but it was char | -| test.cpp:919:10:919:30 | *global_pointer_static | Expected 'Node.getType()' to be const char, but it was char | -| test.cpp:920:10:920:41 | *global_pointer_static_indirect_1 | Expected 'Node.getType()' to be const char, but it was char | -| test.cpp:921:19:921:50 | *global_pointer_static_indirect_1 | Expected 'Node.getType()' to be const char, but it was char | -| test.cpp:922:10:922:41 | *global_pointer_static_indirect_2 | Expected 'Node.getType()' to be const char, but it was char | -| test.cpp:923:19:923:50 | *global_pointer_static_indirect_2 | Expected 'Node.getType()' to be const char, but it was char | | test.cpp:931:5:931:18 | *global_pointer | Expected 'Node.getType()' to be int, but it was int * | -| test.cpp:952:32:952:35 | *data | Expected 'Node.getType()' to be const char, but it was char | -| test.cpp:959:32:959:35 | *data | Expected 'Node.getType()' to be const char, but it was char | -| test.cpp:967:33:967:38 | *domain | Expected 'Node.getType()' to be const char, but it was char | -| test.cpp:967:41:967:44 | *data | Expected 'Node.getType()' to be const char, but it was char | -| test.cpp:975:33:975:38 | *domain | Expected 'Node.getType()' to be const char, but it was char | -| test.cpp:975:41:975:44 | *data | Expected 'Node.getType()' to be const char, but it was char | -| test.cpp:984:33:984:36 | *data | Expected 'Node.getType()' to be const char, but it was char | -| test.cpp:984:39:984:40 | *np | Expected 'Node.getType()' to be const char, but it was char | | test.cpp:988:5:988:14 | *translated | Expected 'Node.getType()' to be char, but it was char * | -| test.cpp:988:27:988:28 | *np | Expected 'Node.getType()' to be const char, but it was char | -| test.cpp:988:31:988:34 | *data | Expected 'Node.getType()' to be const char, but it was char | -| test.cpp:997:33:997:36 | *data | Expected 'Node.getType()' to be const char, but it was char | -| test.cpp:997:39:997:40 | *np | Expected 'Node.getType()' to be const char, but it was char | | test.cpp:1001:5:1001:14 | *translated | Expected 'Node.getType()' to be char, but it was char * | -| test.cpp:1001:27:1001:28 | *np | Expected 'Node.getType()' to be const char, but it was char | -| test.cpp:1001:31:1001:34 | *data | Expected 'Node.getType()' to be const char, but it was char | -| test.cpp:1011:34:1011:39 | *domain | Expected 'Node.getType()' to be const char, but it was char | -| test.cpp:1011:42:1011:45 | *data | Expected 'Node.getType()' to be const char, but it was char | -| test.cpp:1011:48:1011:49 | *np | Expected 'Node.getType()' to be const char, but it was char | | test.cpp:1015:5:1015:14 | *translated | Expected 'Node.getType()' to be char, but it was char * | -| test.cpp:1015:28:1015:33 | *domain | Expected 'Node.getType()' to be const char, but it was char | -| test.cpp:1015:36:1015:37 | *np | Expected 'Node.getType()' to be const char, but it was char | -| test.cpp:1015:40:1015:43 | *data | Expected 'Node.getType()' to be const char, but it was char | -| test.cpp:1025:34:1025:39 | *domain | Expected 'Node.getType()' to be const char, but it was char | -| test.cpp:1025:42:1025:45 | *data | Expected 'Node.getType()' to be const char, but it was char | -| test.cpp:1025:48:1025:49 | *np | Expected 'Node.getType()' to be const char, but it was char | | test.cpp:1029:5:1029:14 | *translated | Expected 'Node.getType()' to be char, but it was char * | -| test.cpp:1029:28:1029:33 | *domain | Expected 'Node.getType()' to be const char, but it was char | -| test.cpp:1029:36:1029:37 | *np | Expected 'Node.getType()' to be const char, but it was char | -| test.cpp:1029:40:1029:43 | *data | Expected 'Node.getType()' to be const char, but it was char | -| test.cpp:1036:33:1036:38 | *domain | Expected 'Node.getType()' to be const char, but it was char | -| test.cpp:1036:41:1036:47 | *0 | Expected 'Node.getType()' to be const char, but it was char | failures From 1dfddaf9ab8370e9df28db554034b2d62586151a Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Thu, 8 Feb 2024 16:52:09 +0000 Subject: [PATCH 099/378] C++: Also mark indirections of glvalue instructions as glvalue nodes. --- .../cpp/ir/dataflow/internal/DataFlowUtil.qll | 4 ++++ .../dataflow/dataflow-tests/type-bugs.expected | 16 ---------------- 2 files changed, 4 insertions(+), 16 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll index 003155fd451..32998d2e9be 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll @@ -999,6 +999,8 @@ private module RawIndirectNodes { override Declaration getEnclosingCallable() { result = this.getFunction() } + override predicate isGLValue() { this.getOperand().isGLValue() } + override DataFlowType getType() { exists(int sub, DataFlowType type, boolean isGLValue | type = getOperandType(this.getOperand(), isGLValue) and @@ -1041,6 +1043,8 @@ private module RawIndirectNodes { override Declaration getEnclosingCallable() { result = this.getFunction() } + override predicate isGLValue() { this.getInstruction().isGLValue() } + override DataFlowType getType() { exists(int sub, DataFlowType type, boolean isGLValue | type = getInstructionType(this.getInstruction(), isGLValue) and diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/type-bugs.expected b/cpp/ql/test/library-tests/dataflow/dataflow-tests/type-bugs.expected index 29457971989..6706d79e902 100644 --- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/type-bugs.expected +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/type-bugs.expected @@ -3,32 +3,16 @@ irTypeBugs incorrectBaseType | clang.cpp:22:8:22:20 | *& ... | Expected 'Node.getType()' to be int, but it was int * | | clang.cpp:23:17:23:29 | *& ... | Expected 'Node.getType()' to be int, but it was int * | -| dispatch.cpp:60:3:60:14 | *globalBottom | Expected 'Node.getType()' to be Top, but it was Top * | -| dispatch.cpp:61:3:61:14 | *globalMiddle | Expected 'Node.getType()' to be Top, but it was Top * | | flowOut.cpp:50:14:50:15 | *& ... | Expected 'Node.getType()' to be int, but it was int * | | flowOut.cpp:84:9:84:10 | *& ... | Expected 'Node.getType()' to be int, but it was int * | | flowOut.cpp:101:13:101:14 | *& ... | Expected 'Node.getType()' to be int, but it was int * | -| flowOut.cpp:168:3:168:10 | ** ... | Expected 'Node.getType()' to be char, but it was char * | | self_parameter_flow.cpp:8:8:8:9 | *& ... | Expected 'Node.getType()' to be unsigned char, but it was unsigned char * | | test.cpp:67:28:67:37 | (reference dereference) | Expected 'Node.getType()' to be const int, but it was int * | -| test.cpp:526:3:526:4 | ** ... | Expected 'Node.getType()' to be const int, but it was const int * | | test.cpp:531:39:531:40 | *& ... | Expected 'Node.getType()' to be int, but it was const int * | -| test.cpp:562:5:562:13 | *globalInt | Expected 'Node.getType()' to be int, but it was int * | -| test.cpp:576:5:576:13 | *globalInt | Expected 'Node.getType()' to be int, but it was int * | -| test.cpp:584:3:584:3 | *x | Expected 'Node.getType()' to be int, but it was int * | -| test.cpp:596:3:596:7 | *access to array | Expected 'Node.getType()' to be int, but it was int * | | test.cpp:615:13:615:21 | *& ... | Expected 'Node.getType()' to be int, but it was void | | test.cpp:704:22:704:25 | *& ... | Expected 'Node.getType()' to be int, but it was int * | | test.cpp:715:24:715:25 | *& ... | Expected 'Node.getType()' to be unsigned char, but it was unsigned char * | -| test.cpp:727:3:727:3 | *p | Expected 'Node.getType()' to be int, but it was int * | -| test.cpp:808:5:808:21 | ** ... | Expected 'Node.getType()' to be int, but it was int * | -| test.cpp:832:5:832:17 | *global_direct | Expected 'Node.getType()' to be int *, but it was int ** | | test.cpp:848:23:848:25 | (reference dereference) | Expected 'Node.getType()' to be int, but it was int * | | test.cpp:854:10:854:36 | * ... | Expected 'Node.getType()' to be const int, but it was int | | test.cpp:867:10:867:30 | * ... | Expected 'Node.getType()' to be const int, but it was int | -| test.cpp:931:5:931:18 | *global_pointer | Expected 'Node.getType()' to be int, but it was int * | -| test.cpp:988:5:988:14 | *translated | Expected 'Node.getType()' to be char, but it was char * | -| test.cpp:1001:5:1001:14 | *translated | Expected 'Node.getType()' to be char, but it was char * | -| test.cpp:1015:5:1015:14 | *translated | Expected 'Node.getType()' to be char, but it was char * | -| test.cpp:1029:5:1029:14 | *translated | Expected 'Node.getType()' to be char, but it was char * | failures From f7d1544ccff78cfb7dfb5c6b57435b3b95f4bda9 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Thu, 8 Feb 2024 17:01:07 +0000 Subject: [PATCH 100/378] C++: Fix Code Scanning errors. --- .../lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll index 32998d2e9be..e49d519061f 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll @@ -948,8 +948,8 @@ private Type getTypeImpl0(Type t, int indirectionIndex) { // Such a type would create an infinite loop otherwise. For these cases we // simply don't produce a result for `getTypeImpl`. // To be on the safe side, we check whether the _unspecified_ type has - // changed since this also prevents an infinite loop for occuring when - // `stripped` and `t` only differ by const'ness or volatile'ness. + // changed since this also prevents an infinite loop when `stripped` and + // `t` only differ by const'ness or volatile'ness. stripped.getUnspecifiedType() != t.getUnspecifiedType() and result = getTypeImpl0(stripped, indirectionIndex - 1) ) From 7a2332c1ff83b426a57dcd48a90315db26d985f5 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 8 Feb 2024 17:17:43 +0000 Subject: [PATCH 101/378] Post-release preparation for codeql-cli-2.16.2 --- cpp/ql/lib/qlpack.yml | 2 +- cpp/ql/src/qlpack.yml | 2 +- csharp/ql/campaigns/Solorigate/lib/qlpack.yml | 2 +- csharp/ql/campaigns/Solorigate/src/qlpack.yml | 2 +- csharp/ql/lib/qlpack.yml | 2 +- csharp/ql/src/qlpack.yml | 2 +- go/ql/consistency-queries/qlpack.yml | 2 +- go/ql/lib/qlpack.yml | 2 +- go/ql/src/qlpack.yml | 2 +- java/ql/automodel/src/qlpack.yml | 2 +- java/ql/lib/qlpack.yml | 2 +- java/ql/src/qlpack.yml | 2 +- javascript/ql/lib/qlpack.yml | 2 +- javascript/ql/src/qlpack.yml | 2 +- misc/suite-helpers/qlpack.yml | 2 +- python/ql/lib/qlpack.yml | 2 +- python/ql/src/qlpack.yml | 2 +- ruby/ql/lib/qlpack.yml | 2 +- ruby/ql/src/qlpack.yml | 2 +- shared/controlflow/qlpack.yml | 2 +- shared/dataflow/qlpack.yml | 2 +- shared/mad/qlpack.yml | 2 +- shared/rangeanalysis/qlpack.yml | 2 +- shared/regex/qlpack.yml | 2 +- shared/ssa/qlpack.yml | 2 +- shared/threat-models/qlpack.yml | 2 +- shared/tutorial/qlpack.yml | 2 +- shared/typetracking/qlpack.yml | 2 +- shared/typos/qlpack.yml | 2 +- shared/util/qlpack.yml | 2 +- shared/yaml/qlpack.yml | 2 +- swift/ql/lib/qlpack.yml | 2 +- swift/ql/src/qlpack.yml | 2 +- 33 files changed, 33 insertions(+), 33 deletions(-) diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml index b1b4172e977..7615b6bac2f 100644 --- a/cpp/ql/lib/qlpack.yml +++ b/cpp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-all -version: 0.12.5 +version: 0.12.6-dev groups: cpp dbscheme: semmlecode.cpp.dbscheme extractor: cpp diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml index 0da41987b3e..9151201a137 100644 --- a/cpp/ql/src/qlpack.yml +++ b/cpp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-queries -version: 0.9.4 +version: 0.9.5-dev groups: - cpp - queries diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml index 77b1c8b5154..8466748a25b 100644 --- a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-all -version: 1.7.8 +version: 1.7.9-dev groups: - csharp - solorigate diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml index 9851e27c691..ff72db938e0 100644 --- a/csharp/ql/campaigns/Solorigate/src/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-queries -version: 1.7.8 +version: 1.7.9-dev groups: - csharp - solorigate diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index 2b137281da6..2e576e11b11 100644 --- a/csharp/ql/lib/qlpack.yml +++ b/csharp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-all -version: 0.8.8 +version: 0.8.9-dev groups: csharp dbscheme: semmlecode.csharp.dbscheme extractor: csharp diff --git a/csharp/ql/src/qlpack.yml b/csharp/ql/src/qlpack.yml index a16c72edd72..018c3e09ae3 100644 --- a/csharp/ql/src/qlpack.yml +++ b/csharp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-queries -version: 0.8.8 +version: 0.8.9-dev groups: - csharp - queries diff --git a/go/ql/consistency-queries/qlpack.yml b/go/ql/consistency-queries/qlpack.yml index c7522dd8e35..651e694d964 100644 --- a/go/ql/consistency-queries/qlpack.yml +++ b/go/ql/consistency-queries/qlpack.yml @@ -1,5 +1,5 @@ name: codeql-go-consistency-queries -version: 0.0.7 +version: 0.0.8-dev groups: - go - queries diff --git a/go/ql/lib/qlpack.yml b/go/ql/lib/qlpack.yml index 5f317377d45..920594fe6ec 100644 --- a/go/ql/lib/qlpack.yml +++ b/go/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-all -version: 0.7.8 +version: 0.7.9-dev groups: go dbscheme: go.dbscheme extractor: go diff --git a/go/ql/src/qlpack.yml b/go/ql/src/qlpack.yml index 81654540219..fb73fa0eb96 100644 --- a/go/ql/src/qlpack.yml +++ b/go/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-queries -version: 0.7.8 +version: 0.7.9-dev groups: - go - queries diff --git a/java/ql/automodel/src/qlpack.yml b/java/ql/automodel/src/qlpack.yml index 3334223e9e4..1f68ac3f6ba 100644 --- a/java/ql/automodel/src/qlpack.yml +++ b/java/ql/automodel/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-automodel-queries -version: 0.0.14 +version: 0.0.15-dev groups: - java - automodel diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index 6e4e1269d9c..cadcc1c9be6 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-all -version: 0.8.8 +version: 0.8.9-dev groups: java dbscheme: config/semmlecode.dbscheme extractor: java diff --git a/java/ql/src/qlpack.yml b/java/ql/src/qlpack.yml index 73e8a062ffe..cad99f4d9c4 100644 --- a/java/ql/src/qlpack.yml +++ b/java/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-queries -version: 0.8.8 +version: 0.8.9-dev groups: - java - queries diff --git a/javascript/ql/lib/qlpack.yml b/javascript/ql/lib/qlpack.yml index fa544548ea7..2be9a1ed2bd 100644 --- a/javascript/ql/lib/qlpack.yml +++ b/javascript/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-all -version: 0.8.8 +version: 0.8.9-dev groups: javascript dbscheme: semmlecode.javascript.dbscheme extractor: javascript diff --git a/javascript/ql/src/qlpack.yml b/javascript/ql/src/qlpack.yml index 1ebbfc58787..545be6f2c61 100644 --- a/javascript/ql/src/qlpack.yml +++ b/javascript/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-queries -version: 0.8.8 +version: 0.8.9-dev groups: - javascript - queries diff --git a/misc/suite-helpers/qlpack.yml b/misc/suite-helpers/qlpack.yml index 4db5dfcf454..6b20374ae33 100644 --- a/misc/suite-helpers/qlpack.yml +++ b/misc/suite-helpers/qlpack.yml @@ -1,4 +1,4 @@ name: codeql/suite-helpers -version: 0.7.8 +version: 0.7.9-dev groups: shared warnOnImplicitThis: true diff --git a/python/ql/lib/qlpack.yml b/python/ql/lib/qlpack.yml index a2c343cca3f..94f82195d5b 100644 --- a/python/ql/lib/qlpack.yml +++ b/python/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-all -version: 0.11.8 +version: 0.11.9-dev groups: python dbscheme: semmlecode.python.dbscheme extractor: python diff --git a/python/ql/src/qlpack.yml b/python/ql/src/qlpack.yml index 538e5ad799c..c5335da22f3 100644 --- a/python/ql/src/qlpack.yml +++ b/python/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-queries -version: 0.9.8 +version: 0.9.9-dev groups: - python - queries diff --git a/ruby/ql/lib/qlpack.yml b/ruby/ql/lib/qlpack.yml index 7eb6222e101..6c55331de90 100644 --- a/ruby/ql/lib/qlpack.yml +++ b/ruby/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-all -version: 0.8.8 +version: 0.8.9-dev groups: ruby extractor: ruby dbscheme: ruby.dbscheme diff --git a/ruby/ql/src/qlpack.yml b/ruby/ql/src/qlpack.yml index 7c1995c00e5..3637a80df7f 100644 --- a/ruby/ql/src/qlpack.yml +++ b/ruby/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-queries -version: 0.8.8 +version: 0.8.9-dev groups: - ruby - queries diff --git a/shared/controlflow/qlpack.yml b/shared/controlflow/qlpack.yml index 79d4a386cf1..c7a88e50611 100644 --- a/shared/controlflow/qlpack.yml +++ b/shared/controlflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/controlflow -version: 0.1.8 +version: 0.1.9-dev groups: shared library: true dependencies: diff --git a/shared/dataflow/qlpack.yml b/shared/dataflow/qlpack.yml index ffb4d0754be..c14ef815d58 100644 --- a/shared/dataflow/qlpack.yml +++ b/shared/dataflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/dataflow -version: 0.1.8 +version: 0.1.9-dev groups: shared library: true dependencies: diff --git a/shared/mad/qlpack.yml b/shared/mad/qlpack.yml index c4eade3b256..0b3830f888d 100644 --- a/shared/mad/qlpack.yml +++ b/shared/mad/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/mad -version: 0.2.8 +version: 0.2.9-dev groups: shared library: true dependencies: null diff --git a/shared/rangeanalysis/qlpack.yml b/shared/rangeanalysis/qlpack.yml index faa059f069a..0f5272dd8cf 100644 --- a/shared/rangeanalysis/qlpack.yml +++ b/shared/rangeanalysis/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rangeanalysis -version: 0.0.7 +version: 0.0.8-dev groups: shared library: true dependencies: diff --git a/shared/regex/qlpack.yml b/shared/regex/qlpack.yml index 57aa69e9629..eca67311c9c 100644 --- a/shared/regex/qlpack.yml +++ b/shared/regex/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/regex -version: 0.2.8 +version: 0.2.9-dev groups: shared library: true dependencies: diff --git a/shared/ssa/qlpack.yml b/shared/ssa/qlpack.yml index f47e195b548..b5d30380815 100644 --- a/shared/ssa/qlpack.yml +++ b/shared/ssa/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ssa -version: 0.2.8 +version: 0.2.9-dev groups: shared library: true dependencies: diff --git a/shared/threat-models/qlpack.yml b/shared/threat-models/qlpack.yml index b056dd0d720..eb345ecca9a 100644 --- a/shared/threat-models/qlpack.yml +++ b/shared/threat-models/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/threat-models -version: 0.0.7 +version: 0.0.8-dev library: true groups: shared dataExtensions: diff --git a/shared/tutorial/qlpack.yml b/shared/tutorial/qlpack.yml index 23525cbfc60..e3080bb33b5 100644 --- a/shared/tutorial/qlpack.yml +++ b/shared/tutorial/qlpack.yml @@ -1,7 +1,7 @@ name: codeql/tutorial description: Library for the CodeQL detective tutorials, helping new users learn to write CodeQL queries. -version: 0.2.8 +version: 0.2.9-dev groups: shared library: true warnOnImplicitThis: true diff --git a/shared/typetracking/qlpack.yml b/shared/typetracking/qlpack.yml index 09757c9de82..adf375fd0c3 100644 --- a/shared/typetracking/qlpack.yml +++ b/shared/typetracking/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typetracking -version: 0.2.8 +version: 0.2.9-dev groups: shared library: true dependencies: diff --git a/shared/typos/qlpack.yml b/shared/typos/qlpack.yml index 4466e61ee0b..927514b2fe4 100644 --- a/shared/typos/qlpack.yml +++ b/shared/typos/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typos -version: 0.2.8 +version: 0.2.9-dev groups: shared library: true warnOnImplicitThis: true diff --git a/shared/util/qlpack.yml b/shared/util/qlpack.yml index ae11a5bf58b..72537a48107 100644 --- a/shared/util/qlpack.yml +++ b/shared/util/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/util -version: 0.2.8 +version: 0.2.9-dev groups: shared library: true dependencies: null diff --git a/shared/yaml/qlpack.yml b/shared/yaml/qlpack.yml index 4d656f79862..fae3aad1324 100644 --- a/shared/yaml/qlpack.yml +++ b/shared/yaml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/yaml -version: 0.2.8 +version: 0.2.9-dev groups: shared library: true warnOnImplicitThis: true diff --git a/swift/ql/lib/qlpack.yml b/swift/ql/lib/qlpack.yml index 8916abe3bec..2c58adec21e 100644 --- a/swift/ql/lib/qlpack.yml +++ b/swift/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-all -version: 0.3.8 +version: 0.3.9-dev groups: swift extractor: swift dbscheme: swift.dbscheme diff --git a/swift/ql/src/qlpack.yml b/swift/ql/src/qlpack.yml index 4a8d3d68e74..00ff9a6f163 100644 --- a/swift/ql/src/qlpack.yml +++ b/swift/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-queries -version: 0.3.8 +version: 0.3.9-dev groups: - swift - queries From ea004c44f2050eedcda317107f6ae904bb380f19 Mon Sep 17 00:00:00 2001 From: Dave Bartolomeo Date: Thu, 8 Feb 2024 12:26:21 -0500 Subject: [PATCH 102/378] Update CHANGELOG.md Fix accidental blank line --- cpp/ql/src/CHANGELOG.md | 1 - 1 file changed, 1 deletion(-) diff --git a/cpp/ql/src/CHANGELOG.md b/cpp/ql/src/CHANGELOG.md index 68bcdbc5b07..44d00c1d8e4 100644 --- a/cpp/ql/src/CHANGELOG.md +++ b/cpp/ql/src/CHANGELOG.md @@ -6,7 +6,6 @@ * The "Incorrect return-value check for a 'scanf'-like function" query (`cpp/incorrectly-checked-scanf`) no longer reports an alert when an explicit check for EOF is added. * The "Incorrect return-value check for a 'scanf'-like function" query (`cpp/incorrectly-checked-scanf`) now recognizes more EOF checks. * The "Potentially uninitialized local variable" query (`cpp/uninitialized-local`) no longer reports an alert when the local variable is used as a qualifier to a static member function call. -* ``` * The diagnostic query `cpp/diagnostics/successfully-extracted-files` now considers any C/C++ file seen during extraction, even one with some errors, to be extracted / scanned. This affects the Code Scanning UI measure of scanned C/C++ files. ## 0.9.3 From 331355d23f29b2efe7a933a90a754ee317581705 Mon Sep 17 00:00:00 2001 From: Dave Bartolomeo Date: Thu, 8 Feb 2024 12:26:46 -0500 Subject: [PATCH 103/378] Fix accidental blank line --- cpp/ql/src/change-notes/released/0.9.4.md | 1 - 1 file changed, 1 deletion(-) diff --git a/cpp/ql/src/change-notes/released/0.9.4.md b/cpp/ql/src/change-notes/released/0.9.4.md index 6525a90f9bb..bc6e71d7054 100644 --- a/cpp/ql/src/change-notes/released/0.9.4.md +++ b/cpp/ql/src/change-notes/released/0.9.4.md @@ -6,5 +6,4 @@ * The "Incorrect return-value check for a 'scanf'-like function" query (`cpp/incorrectly-checked-scanf`) no longer reports an alert when an explicit check for EOF is added. * The "Incorrect return-value check for a 'scanf'-like function" query (`cpp/incorrectly-checked-scanf`) now recognizes more EOF checks. * The "Potentially uninitialized local variable" query (`cpp/uninitialized-local`) no longer reports an alert when the local variable is used as a qualifier to a static member function call. -* ``` * The diagnostic query `cpp/diagnostics/successfully-extracted-files` now considers any C/C++ file seen during extraction, even one with some errors, to be extracted / scanned. This affects the Code Scanning UI measure of scanned C/C++ files. From 2852f09a1acb0e1bcbb29ce4204ea219f4e77b5e Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 8 Feb 2024 17:44:38 +0000 Subject: [PATCH 104/378] Kotlin: Accept test changes in library-tests/java-kotlin-collection-type-generic-methods I'm not sure exactly what's going on here in general, but I've made a ticket to remind us to come back and look at this whole area. --- .../test.expected | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/java/ql/test-kotlin2/library-tests/java-kotlin-collection-type-generic-methods/test.expected b/java/ql/test-kotlin2/library-tests/java-kotlin-collection-type-generic-methods/test.expected index 4ccb82a3d0d..0fe94ff8a25 100644 --- a/java/ql/test-kotlin2/library-tests/java-kotlin-collection-type-generic-methods/test.expected +++ b/java/ql/test-kotlin2/library-tests/java-kotlin-collection-type-generic-methods/test.expected @@ -54,7 +54,7 @@ methodWithDuplicate | AbstractList | set | int | | AbstractList | subList | int | | AbstractList | subListRangeCheck | int | -| AbstractMap | containsEntry$kotlin_stdlib | Entry | +| AbstractMap | containsEntry$main | Entry | | AbstractMap | containsKey | Object | | AbstractMap | containsValue | Object | | AbstractMap | equals | Object | @@ -79,7 +79,7 @@ methodWithDuplicate | AbstractMap | put | V | | AbstractMap | putAll | Map | | AbstractMap | remove | Object | -| AbstractMap | containsEntry$kotlin_stdlib | Entry | +| AbstractMap | containsEntry$main | Entry | | AbstractMap | containsKey | Object | | AbstractMap | containsValue | Object | | AbstractMap | equals | Object | @@ -121,7 +121,6 @@ methodWithDuplicate | Collection> | addAll | Collection> | | Collection> | contains | Object | | Collection> | containsAll | Collection | -| Collection> | equals | Object | | Collection> | remove | Object | | Collection> | removeAll | Collection | | Collection> | removeIf | Predicate> | @@ -132,7 +131,6 @@ methodWithDuplicate | Collection | addAll | Collection | | Collection | contains | Object | | Collection | containsAll | Collection | -| Collection | equals | Object | | Collection | remove | Object | | Collection | removeAll | Collection | | Collection | removeIf | Predicate | @@ -154,7 +152,6 @@ methodWithDuplicate | Collection | addAll | Collection | | Collection | contains | Object | | Collection | containsAll | Collection | -| Collection | equals | Object | | Collection | remove | Object | | Collection | removeAll | Collection | | Collection | removeIf | Predicate | @@ -194,7 +191,6 @@ methodWithDuplicate | List | contains | Object | | List | containsAll | Collection | | List | copyOf | Collection | -| List | equals | Object | | List | get | int | | List | indexOf | Object | | List | lastIndexOf | Object | @@ -279,7 +275,6 @@ methodWithDuplicate | Map> | copyOf | Map | | Map> | entry | K | | Map> | entry | V | -| Map> | equals | Object | | Map> | forEach | BiConsumer> | | Map> | get | Object | | Map> | getOrDefault | Entry | @@ -310,7 +305,6 @@ methodWithDuplicate | Map | copyOf | Map | | Map | entry | K | | Map | entry | V | -| Map | equals | Object | | Map | forEach | BiConsumer | | Map | get | Object | | Map | getOrDefault | Object | @@ -341,7 +335,6 @@ methodWithDuplicate | Map | copyOf | Map | | Map | entry | K | | Map | entry | V | -| Map | equals | Object | | Map | forEach | BiConsumer | | Map | get | Object | | Map | getOrDefault | Object | From 34f74869c893d4958897f9f7a5ac7971f76c159d Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Fri, 9 Feb 2024 09:10:20 +0100 Subject: [PATCH 105/378] Java: Add extension point and default sanitizer to Open Redirect query --- .../lib/change-notes/2024-02-09-url-redirect-sanitizer.md | 4 ++++ java/ql/lib/semmle/code/java/security/UrlRedirect.qll | 7 +++++++ java/ql/lib/semmle/code/java/security/UrlRedirectQuery.qll | 2 ++ .../src/change-notes/2024-02-09-url-redirect-sanitizer.md | 4 ++++ .../security/CWE-601/semmle/tests/UrlRedirect.expected | 4 ---- .../security/CWE-601/semmle/tests/UrlRedirect.java | 2 +- 6 files changed, 18 insertions(+), 5 deletions(-) create mode 100644 java/ql/lib/change-notes/2024-02-09-url-redirect-sanitizer.md create mode 100644 java/ql/src/change-notes/2024-02-09-url-redirect-sanitizer.md diff --git a/java/ql/lib/change-notes/2024-02-09-url-redirect-sanitizer.md b/java/ql/lib/change-notes/2024-02-09-url-redirect-sanitizer.md new file mode 100644 index 00000000000..a4a81de3a02 --- /dev/null +++ b/java/ql/lib/change-notes/2024-02-09-url-redirect-sanitizer.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* An extension point for sanitizers of the query `java/unvalidated-url-redirection` has been added. diff --git a/java/ql/lib/semmle/code/java/security/UrlRedirect.qll b/java/ql/lib/semmle/code/java/security/UrlRedirect.qll index 5877358eaf0..e806905c167 100644 --- a/java/ql/lib/semmle/code/java/security/UrlRedirect.qll +++ b/java/ql/lib/semmle/code/java/security/UrlRedirect.qll @@ -6,10 +6,14 @@ private import semmle.code.java.dataflow.ExternalFlow import semmle.code.java.frameworks.Servlets import semmle.code.java.frameworks.ApacheHttp private import semmle.code.java.frameworks.JaxWS +private import semmle.code.java.security.RequestForgery /** A URL redirection sink. */ abstract class UrlRedirectSink extends DataFlow::Node { } +/** A URL redirection sanitizer. */ +abstract class UrlRedirectSanitizer extends DataFlow::Node { } + /** A default sink represeting methods susceptible to URL redirection attacks. */ private class DefaultUrlRedirectSink extends UrlRedirectSink { DefaultUrlRedirectSink() { sinkNode(this, "url-redirection") } @@ -42,3 +46,6 @@ private class ApacheUrlRedirectSink extends UrlRedirectSink { ) } } + +private class DefaultUrlRedirectSanitizer extends UrlRedirectSanitizer instanceof RequestForgerySanitizer +{ } diff --git a/java/ql/lib/semmle/code/java/security/UrlRedirectQuery.qll b/java/ql/lib/semmle/code/java/security/UrlRedirectQuery.qll index cdae7839366..675937985c4 100644 --- a/java/ql/lib/semmle/code/java/security/UrlRedirectQuery.qll +++ b/java/ql/lib/semmle/code/java/security/UrlRedirectQuery.qll @@ -11,6 +11,8 @@ module UrlRedirectConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { source instanceof ThreatModelFlowSource } predicate isSink(DataFlow::Node sink) { sink instanceof UrlRedirectSink } + + predicate isBarrier(DataFlow::Node node) { node instanceof UrlRedirectSanitizer } } /** diff --git a/java/ql/src/change-notes/2024-02-09-url-redirect-sanitizer.md b/java/ql/src/change-notes/2024-02-09-url-redirect-sanitizer.md new file mode 100644 index 00000000000..f06978c8211 --- /dev/null +++ b/java/ql/src/change-notes/2024-02-09-url-redirect-sanitizer.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* The query `java/unvalidated-url-redirection` now sanitizes results following the same logic as the query `java/ssrf`. URLs the destination of which cannot be externally controlled will not be reported anymore. diff --git a/java/ql/test/query-tests/security/CWE-601/semmle/tests/UrlRedirect.expected b/java/ql/test/query-tests/security/CWE-601/semmle/tests/UrlRedirect.expected index 974005e801b..f36dee3a55f 100644 --- a/java/ql/test/query-tests/security/CWE-601/semmle/tests/UrlRedirect.expected +++ b/java/ql/test/query-tests/security/CWE-601/semmle/tests/UrlRedirect.expected @@ -1,7 +1,6 @@ edges | UrlRedirect.java:32:37:32:66 | getParameter(...) : String | UrlRedirect.java:32:25:32:67 | weakCleanup(...) | | UrlRedirect.java:32:37:32:66 | getParameter(...) : String | UrlRedirect.java:45:28:45:39 | input : String | -| UrlRedirect.java:36:58:36:89 | getParameter(...) : String | UrlRedirect.java:36:25:36:89 | ... + ... | | UrlRedirect.java:45:28:45:39 | input : String | UrlRedirect.java:46:10:46:14 | input : String | | UrlRedirect.java:46:10:46:14 | input : String | UrlRedirect.java:46:10:46:40 | replaceAll(...) : String | | mad/Test.java:9:16:9:41 | getParameter(...) : String | mad/Test.java:14:31:14:38 | source(...) : String | @@ -10,8 +9,6 @@ nodes | UrlRedirect.java:23:25:23:54 | getParameter(...) | semmle.label | getParameter(...) | | UrlRedirect.java:32:25:32:67 | weakCleanup(...) | semmle.label | weakCleanup(...) | | UrlRedirect.java:32:37:32:66 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| UrlRedirect.java:36:25:36:89 | ... + ... | semmle.label | ... + ... | -| UrlRedirect.java:36:58:36:89 | getParameter(...) : String | semmle.label | getParameter(...) : String | | UrlRedirect.java:39:34:39:63 | getParameter(...) | semmle.label | getParameter(...) | | UrlRedirect.java:42:43:42:72 | getParameter(...) | semmle.label | getParameter(...) | | UrlRedirect.java:45:28:45:39 | input : String | semmle.label | input : String | @@ -25,7 +22,6 @@ subpaths #select | UrlRedirect.java:23:25:23:54 | getParameter(...) | UrlRedirect.java:23:25:23:54 | getParameter(...) | UrlRedirect.java:23:25:23:54 | getParameter(...) | Untrusted URL redirection depends on a $@. | UrlRedirect.java:23:25:23:54 | getParameter(...) | user-provided value | | UrlRedirect.java:32:25:32:67 | weakCleanup(...) | UrlRedirect.java:32:37:32:66 | getParameter(...) : String | UrlRedirect.java:32:25:32:67 | weakCleanup(...) | Untrusted URL redirection depends on a $@. | UrlRedirect.java:32:37:32:66 | getParameter(...) | user-provided value | -| UrlRedirect.java:36:25:36:89 | ... + ... | UrlRedirect.java:36:58:36:89 | getParameter(...) : String | UrlRedirect.java:36:25:36:89 | ... + ... | Untrusted URL redirection depends on a $@. | UrlRedirect.java:36:58:36:89 | getParameter(...) | user-provided value | | UrlRedirect.java:39:34:39:63 | getParameter(...) | UrlRedirect.java:39:34:39:63 | getParameter(...) | UrlRedirect.java:39:34:39:63 | getParameter(...) | Untrusted URL redirection depends on a $@. | UrlRedirect.java:39:34:39:63 | getParameter(...) | user-provided value | | UrlRedirect.java:42:43:42:72 | getParameter(...) | UrlRedirect.java:42:43:42:72 | getParameter(...) | UrlRedirect.java:42:43:42:72 | getParameter(...) | Untrusted URL redirection depends on a $@. | UrlRedirect.java:42:43:42:72 | getParameter(...) | user-provided value | | mad/Test.java:14:22:14:38 | (...)... | mad/Test.java:9:16:9:41 | getParameter(...) : String | mad/Test.java:14:22:14:38 | (...)... | Untrusted URL redirection depends on a $@. | mad/Test.java:9:16:9:41 | getParameter(...) | user-provided value | diff --git a/java/ql/test/query-tests/security/CWE-601/semmle/tests/UrlRedirect.java b/java/ql/test/query-tests/security/CWE-601/semmle/tests/UrlRedirect.java index 318fdec9182..01cee2d59f2 100644 --- a/java/ql/test/query-tests/security/CWE-601/semmle/tests/UrlRedirect.java +++ b/java/ql/test/query-tests/security/CWE-601/semmle/tests/UrlRedirect.java @@ -31,7 +31,7 @@ public class UrlRedirect extends HttpServlet { // if the argument is "hthttp://tp://malicious.com" response.sendRedirect(weakCleanup(request.getParameter("target"))); - // FALSE POSITIVE: the user input is not used in a position that allows it to dictate + // GOOD: the user input is not used in a position that allows it to dictate // the target of the redirect response.sendRedirect("http://example.com?username=" + request.getParameter("username")); From fb109672b35b6f3e9602cf211156475298f87323 Mon Sep 17 00:00:00 2001 From: Max Schaefer Date: Fri, 9 Feb 2024 09:21:30 +0000 Subject: [PATCH 106/378] Address more review feedback. --- java/ql/lib/ext/org.apache.hadoop.fs.model.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/ql/lib/ext/org.apache.hadoop.fs.model.yml b/java/ql/lib/ext/org.apache.hadoop.fs.model.yml index 79dab1de37b..d8b6febd1f8 100644 --- a/java/ql/lib/ext/org.apache.hadoop.fs.model.yml +++ b/java/ql/lib/ext/org.apache.hadoop.fs.model.yml @@ -3,6 +3,7 @@ extensions: pack: codeql/java-all extensible: summaryModel data: + - ["org.apache.hadoop.fs", "FileSystem", True, "makeQualified", "(Path)", "", "Argument[0]", "ReturnValue", "taint", "ai-manual"] - ["org.apache.hadoop.fs", "Path", True, "Path", "(Path,Path)", "", "Argument[0]", "Argument[this]", "taint", "ai-manual"] - ["org.apache.hadoop.fs", "Path", True, "Path", "(Path,Path)", "", "Argument[1]", "Argument[this]", "taint", "ai-manual"] - ["org.apache.hadoop.fs", "Path", True, "Path", "(Path,String)", "", "Argument[0]", "Argument[this]", "taint", "ai-manual"] @@ -17,6 +18,5 @@ extensions: pack: codeql/java-all extensible: sinkModel data: - - ["org.apache.hadoop.fs", "FileSystem", True, "makeQualified", "(Path)", "", "Argument[0]", "path-injection", "ai-manual"] - ["org.apache.hadoop.fs", "FileSystem", True, "rename", "(Path,Path)", "", "Argument[0]", "path-injection", "ai-manual"] - ["org.apache.hadoop.fs", "FileSystem", True, "rename", "(Path,Path)", "", "Argument[1]", "path-injection", "ai-manual"] From 48890b446d25e51c216eeffd6609b6f9e33d4837 Mon Sep 17 00:00:00 2001 From: Harry Maclean Date: Fri, 9 Feb 2024 09:23:09 +0000 Subject: [PATCH 107/378] Ruby: Add more actioncontroller tests --- .../ActionController.expected | 184 +++++------ .../action_controller/Filters.expected | 288 +++++++++--------- .../controllers/application_controller.rb | 0 .../controllers/comments_controller.rb | 0 .../controllers/foo/bars_controller.rb | 0 .../controllers/photos_controller.rb | 0 .../{ => app}/controllers/posts_controller.rb | 0 .../{ => app}/controllers/tags_controller.rb | 0 .../users/notifications_controller.rb | 0 .../app/views/comments/create.html.erb | 0 .../app/views/comments/destroy.html.erb | 0 .../app/views/comments/index.html.erb | 0 .../app/views/comments/show.html.erb | 0 .../views/notifications/mark_as_read.html.erb | 0 .../app/views/photos/foo.html.erb | 0 .../app/views/photos/show.html.erb | 0 .../app/views/posts/index.html.erb | 0 .../app/views/posts/show.html.erb | 0 .../app/views/posts/upvote.html.erb | 0 19 files changed, 236 insertions(+), 236 deletions(-) rename ruby/ql/test/library-tests/frameworks/action_controller/{ => app}/controllers/application_controller.rb (100%) rename ruby/ql/test/library-tests/frameworks/action_controller/{ => app}/controllers/comments_controller.rb (100%) rename ruby/ql/test/library-tests/frameworks/action_controller/{ => app}/controllers/foo/bars_controller.rb (100%) rename ruby/ql/test/library-tests/frameworks/action_controller/{ => app}/controllers/photos_controller.rb (100%) rename ruby/ql/test/library-tests/frameworks/action_controller/{ => app}/controllers/posts_controller.rb (100%) rename ruby/ql/test/library-tests/frameworks/action_controller/{ => app}/controllers/tags_controller.rb (100%) rename ruby/ql/test/library-tests/frameworks/action_controller/{ => app}/controllers/users/notifications_controller.rb (100%) create mode 100644 ruby/ql/test/library-tests/frameworks/action_controller/app/views/comments/create.html.erb create mode 100644 ruby/ql/test/library-tests/frameworks/action_controller/app/views/comments/destroy.html.erb create mode 100644 ruby/ql/test/library-tests/frameworks/action_controller/app/views/comments/index.html.erb create mode 100644 ruby/ql/test/library-tests/frameworks/action_controller/app/views/comments/show.html.erb create mode 100644 ruby/ql/test/library-tests/frameworks/action_controller/app/views/notifications/mark_as_read.html.erb create mode 100644 ruby/ql/test/library-tests/frameworks/action_controller/app/views/photos/foo.html.erb create mode 100644 ruby/ql/test/library-tests/frameworks/action_controller/app/views/photos/show.html.erb create mode 100644 ruby/ql/test/library-tests/frameworks/action_controller/app/views/posts/index.html.erb create mode 100644 ruby/ql/test/library-tests/frameworks/action_controller/app/views/posts/show.html.erb create mode 100644 ruby/ql/test/library-tests/frameworks/action_controller/app/views/posts/upvote.html.erb diff --git a/ruby/ql/test/library-tests/frameworks/action_controller/ActionController.expected b/ruby/ql/test/library-tests/frameworks/action_controller/ActionController.expected index 21262631d7b..f488eb70145 100644 --- a/ruby/ql/test/library-tests/frameworks/action_controller/ActionController.expected +++ b/ruby/ql/test/library-tests/frameworks/action_controller/ActionController.expected @@ -1,11 +1,11 @@ actionControllerControllerClasses -| controllers/application_controller.rb:1:1:13:3 | ApplicationController | -| controllers/comments_controller.rb:1:1:104:3 | CommentsController | -| controllers/foo/bars_controller.rb:3:1:46:3 | BarsController | -| controllers/photos_controller.rb:1:1:10:3 | PhotosController | -| controllers/posts_controller.rb:1:1:32:3 | PostsController | -| controllers/tags_controller.rb:1:1:2:3 | TagsController | -| controllers/users/notifications_controller.rb:2:3:5:5 | Users::NotificationsController | +| app/controllers/application_controller.rb:1:1:13:3 | ApplicationController | +| app/controllers/comments_controller.rb:1:1:104:3 | CommentsController | +| app/controllers/foo/bars_controller.rb:3:1:46:3 | BarsController | +| app/controllers/photos_controller.rb:1:1:10:3 | PhotosController | +| app/controllers/posts_controller.rb:1:1:32:3 | PostsController | +| app/controllers/tags_controller.rb:1:1:2:3 | TagsController | +| app/controllers/users/notifications_controller.rb:2:3:5:5 | Users::NotificationsController | | filter_flow.rb:9:1:23:3 | OneController | | filter_flow.rb:25:1:40:3 | TwoController | | filter_flow.rb:42:1:57:3 | ThreeController | @@ -15,23 +15,23 @@ actionControllerControllerClasses | params_flow.rb:1:1:162:3 | MyController | | params_flow.rb:170:1:178:3 | Subclass | actionControllerActionMethods -| controllers/comments_controller.rb:17:3:51:5 | index | -| controllers/comments_controller.rb:53:3:54:5 | create | -| controllers/comments_controller.rb:56:3:62:5 | show | -| controllers/comments_controller.rb:64:3:66:5 | photo | -| controllers/comments_controller.rb:68:3:70:5 | destroy | -| controllers/foo/bars_controller.rb:5:3:7:5 | index | -| controllers/foo/bars_controller.rb:9:3:18:5 | show_debug | -| controllers/foo/bars_controller.rb:20:3:24:5 | show | -| controllers/foo/bars_controller.rb:26:3:28:5 | go_back | -| controllers/foo/bars_controller.rb:30:3:32:5 | go_back_2 | -| controllers/foo/bars_controller.rb:34:3:39:5 | show_2 | -| controllers/photos_controller.rb:3:3:6:5 | show | -| controllers/photos_controller.rb:8:3:9:5 | foo | -| controllers/posts_controller.rb:12:3:15:5 | index | -| controllers/posts_controller.rb:17:3:18:5 | show | -| controllers/posts_controller.rb:20:3:21:5 | upvote | -| controllers/users/notifications_controller.rb:3:5:4:7 | mark_as_read | +| app/controllers/comments_controller.rb:17:3:51:5 | index | +| app/controllers/comments_controller.rb:53:3:54:5 | create | +| app/controllers/comments_controller.rb:56:3:62:5 | show | +| app/controllers/comments_controller.rb:64:3:66:5 | photo | +| app/controllers/comments_controller.rb:68:3:70:5 | destroy | +| app/controllers/foo/bars_controller.rb:5:3:7:5 | index | +| app/controllers/foo/bars_controller.rb:9:3:18:5 | show_debug | +| app/controllers/foo/bars_controller.rb:20:3:24:5 | show | +| app/controllers/foo/bars_controller.rb:26:3:28:5 | go_back | +| app/controllers/foo/bars_controller.rb:30:3:32:5 | go_back_2 | +| app/controllers/foo/bars_controller.rb:34:3:39:5 | show_2 | +| app/controllers/photos_controller.rb:3:3:6:5 | show | +| app/controllers/photos_controller.rb:8:3:9:5 | foo | +| app/controllers/posts_controller.rb:12:3:15:5 | index | +| app/controllers/posts_controller.rb:17:3:18:5 | show | +| app/controllers/posts_controller.rb:20:3:21:5 | upvote | +| app/controllers/users/notifications_controller.rb:3:5:4:7 | mark_as_read | | filter_flow.rb:13:3:15:5 | a | | filter_flow.rb:17:3:18:5 | b | | filter_flow.rb:20:3:22:5 | c | @@ -87,12 +87,12 @@ actionControllerActionMethods | params_flow.rb:165:3:167:5 | m34 | | params_flow.rb:171:3:173:5 | m35 | paramsCalls -| controllers/comments_controller.rb:80:36:80:41 | call to params | -| controllers/foo/bars_controller.rb:13:21:13:26 | call to params | -| controllers/foo/bars_controller.rb:14:10:14:15 | call to params | -| controllers/foo/bars_controller.rb:21:21:21:26 | call to params | -| controllers/foo/bars_controller.rb:22:10:22:15 | call to params | -| controllers/posts_controller.rb:26:23:26:28 | call to params | +| app/controllers/comments_controller.rb:80:36:80:41 | call to params | +| app/controllers/foo/bars_controller.rb:13:21:13:26 | call to params | +| app/controllers/foo/bars_controller.rb:14:10:14:15 | call to params | +| app/controllers/foo/bars_controller.rb:21:21:21:26 | call to params | +| app/controllers/foo/bars_controller.rb:22:10:22:15 | call to params | +| app/controllers/posts_controller.rb:26:23:26:28 | call to params | | filter_flow.rb:14:12:14:17 | call to params | | filter_flow.rb:30:12:30:17 | call to params | | filter_flow.rb:47:12:47:17 | call to params | @@ -147,12 +147,12 @@ paramsCalls | params_flow.rb:172:10:172:15 | call to params | | params_flow.rb:176:10:176:15 | call to params | paramsSources -| controllers/comments_controller.rb:80:36:80:41 | call to params | -| controllers/foo/bars_controller.rb:13:21:13:26 | call to params | -| controllers/foo/bars_controller.rb:14:10:14:15 | call to params | -| controllers/foo/bars_controller.rb:21:21:21:26 | call to params | -| controllers/foo/bars_controller.rb:22:10:22:15 | call to params | -| controllers/posts_controller.rb:26:23:26:28 | call to params | +| app/controllers/comments_controller.rb:80:36:80:41 | call to params | +| app/controllers/foo/bars_controller.rb:13:21:13:26 | call to params | +| app/controllers/foo/bars_controller.rb:14:10:14:15 | call to params | +| app/controllers/foo/bars_controller.rb:21:21:21:26 | call to params | +| app/controllers/foo/bars_controller.rb:22:10:22:15 | call to params | +| app/controllers/posts_controller.rb:26:23:26:28 | call to params | | filter_flow.rb:14:12:14:17 | call to params | | filter_flow.rb:30:12:30:17 | call to params | | filter_flow.rb:47:12:47:17 | call to params | @@ -207,22 +207,22 @@ paramsSources | params_flow.rb:172:10:172:15 | call to params | | params_flow.rb:176:10:176:15 | call to params | httpInputAccesses -| controllers/application_controller.rb:11:53:11:64 | call to path | ActionDispatch::Request#path | -| controllers/comments_controller.rb:18:5:18:18 | call to params | ActionDispatch::Request#params | -| controllers/comments_controller.rb:19:5:19:22 | call to parameters | ActionDispatch::Request#parameters | -| controllers/comments_controller.rb:20:5:20:15 | call to GET | ActionDispatch::Request#GET | -| controllers/comments_controller.rb:21:5:21:16 | call to POST | ActionDispatch::Request#POST | -| controllers/comments_controller.rb:22:5:22:28 | call to query_parameters | ActionDispatch::Request#query_parameters | -| controllers/comments_controller.rb:23:5:23:30 | call to request_parameters | ActionDispatch::Request#request_parameters | -| controllers/comments_controller.rb:24:5:24:31 | call to filtered_parameters | ActionDispatch::Request#filtered_parameters | -| controllers/comments_controller.rb:69:12:69:30 | call to body_stream | ActionDispatch::Request#body_stream | -| controllers/comments_controller.rb:80:36:80:41 | call to params | ActionController::Metal#params | -| controllers/foo/bars_controller.rb:10:27:10:33 | call to cookies | ActionController::Metal#cookies | -| controllers/foo/bars_controller.rb:13:21:13:26 | call to params | ActionController::Metal#params | -| controllers/foo/bars_controller.rb:14:10:14:15 | call to params | ActionController::Metal#params | -| controllers/foo/bars_controller.rb:21:21:21:26 | call to params | ActionController::Metal#params | -| controllers/foo/bars_controller.rb:22:10:22:15 | call to params | ActionController::Metal#params | -| controllers/posts_controller.rb:26:23:26:28 | call to params | ActionController::Metal#params | +| app/controllers/application_controller.rb:11:53:11:64 | call to path | ActionDispatch::Request#path | +| app/controllers/comments_controller.rb:18:5:18:18 | call to params | ActionDispatch::Request#params | +| app/controllers/comments_controller.rb:19:5:19:22 | call to parameters | ActionDispatch::Request#parameters | +| app/controllers/comments_controller.rb:20:5:20:15 | call to GET | ActionDispatch::Request#GET | +| app/controllers/comments_controller.rb:21:5:21:16 | call to POST | ActionDispatch::Request#POST | +| app/controllers/comments_controller.rb:22:5:22:28 | call to query_parameters | ActionDispatch::Request#query_parameters | +| app/controllers/comments_controller.rb:23:5:23:30 | call to request_parameters | ActionDispatch::Request#request_parameters | +| app/controllers/comments_controller.rb:24:5:24:31 | call to filtered_parameters | ActionDispatch::Request#filtered_parameters | +| app/controllers/comments_controller.rb:69:12:69:30 | call to body_stream | ActionDispatch::Request#body_stream | +| app/controllers/comments_controller.rb:80:36:80:41 | call to params | ActionController::Metal#params | +| app/controllers/foo/bars_controller.rb:10:27:10:33 | call to cookies | ActionController::Metal#cookies | +| app/controllers/foo/bars_controller.rb:13:21:13:26 | call to params | ActionController::Metal#params | +| app/controllers/foo/bars_controller.rb:14:10:14:15 | call to params | ActionController::Metal#params | +| app/controllers/foo/bars_controller.rb:21:21:21:26 | call to params | ActionController::Metal#params | +| app/controllers/foo/bars_controller.rb:22:10:22:15 | call to params | ActionController::Metal#params | +| app/controllers/posts_controller.rb:26:23:26:28 | call to params | ActionController::Metal#params | | filter_flow.rb:14:12:14:17 | call to params | ActionController::Metal#params | | filter_flow.rb:30:12:30:17 | call to params | ActionController::Metal#params | | filter_flow.rb:47:12:47:17 | call to params | ActionController::Metal#params | @@ -317,54 +317,54 @@ httpInputAccesses | params_flow.rb:172:10:172:15 | call to params | ActionController::Metal#params | | params_flow.rb:176:10:176:15 | call to params | ActionController::Metal#params | cookiesCalls -| controllers/foo/bars_controller.rb:10:27:10:33 | call to cookies | +| app/controllers/foo/bars_controller.rb:10:27:10:33 | call to cookies | cookiesSources -| controllers/foo/bars_controller.rb:10:27:10:33 | call to cookies | +| app/controllers/foo/bars_controller.rb:10:27:10:33 | call to cookies | redirectToCalls -| controllers/comments_controller.rb:58:21:58:49 | call to redirect_to | -| controllers/foo/bars_controller.rb:17:5:17:30 | call to redirect_to | -| controllers/foo/bars_controller.rb:27:5:27:39 | call to redirect_back_or_to | -| controllers/foo/bars_controller.rb:31:5:31:56 | call to redirect_back | +| app/controllers/comments_controller.rb:58:21:58:49 | call to redirect_to | +| app/controllers/foo/bars_controller.rb:17:5:17:30 | call to redirect_to | +| app/controllers/foo/bars_controller.rb:27:5:27:39 | call to redirect_back_or_to | +| app/controllers/foo/bars_controller.rb:31:5:31:56 | call to redirect_back | renderCalls -| controllers/comments_controller.rb:60:21:60:64 | call to render | -| controllers/comments_controller.rb:76:5:76:68 | call to render | -| controllers/foo/bars_controller.rb:6:5:6:37 | call to render | -| controllers/foo/bars_controller.rb:23:5:23:76 | call to render | -| controllers/foo/bars_controller.rb:35:5:35:33 | call to render | -| controllers/foo/bars_controller.rb:38:5:38:50 | call to render | -| controllers/foo/bars_controller.rb:44:5:44:17 | call to render | -| controllers/posts_controller.rb:13:5:13:51 | call to render | -| controllers/posts_controller.rb:14:5:14:127 | call to render | -| controllers/posts_controller.rb:36:5:36:51 | call to render | +| app/controllers/comments_controller.rb:60:21:60:64 | call to render | +| app/controllers/comments_controller.rb:76:5:76:68 | call to render | +| app/controllers/foo/bars_controller.rb:6:5:6:37 | call to render | +| app/controllers/foo/bars_controller.rb:23:5:23:76 | call to render | +| app/controllers/foo/bars_controller.rb:35:5:35:33 | call to render | +| app/controllers/foo/bars_controller.rb:38:5:38:50 | call to render | +| app/controllers/foo/bars_controller.rb:44:5:44:17 | call to render | +| app/controllers/posts_controller.rb:13:5:13:51 | call to render | +| app/controllers/posts_controller.rb:14:5:14:127 | call to render | +| app/controllers/posts_controller.rb:36:5:36:51 | call to render | httpResponses -| controllers/comments_controller.rb:26:5:26:17 | call to body= | controllers/comments_controller.rb:26:21:26:34 | ... = ... | -| controllers/comments_controller.rb:36:5:36:37 | call to send_file | controllers/comments_controller.rb:36:24:36:36 | "my-file.ext" | -| controllers/comments_controller.rb:65:5:65:20 | call to send_data | controllers/comments_controller.rb:65:15:65:20 | @photo | -| controllers/foo/bars_controller.rb:15:16:15:97 | call to render_to_string | controllers/foo/bars_controller.rb:15:33:15:47 | "foo/bars/show" | -| controllers/foo/bars_controller.rb:23:5:23:76 | call to render | controllers/foo/bars_controller.rb:23:12:23:26 | "foo/bars/show" | -| controllers/foo/bars_controller.rb:35:5:35:33 | call to render | controllers/foo/bars_controller.rb:35:18:35:33 | call to [] | -| controllers/foo/bars_controller.rb:36:12:36:67 | call to render_to_string | controllers/foo/bars_controller.rb:36:29:36:33 | @user | -| controllers/foo/bars_controller.rb:38:5:38:50 | call to render | controllers/foo/bars_controller.rb:38:12:38:22 | call to backtrace | -| controllers/foo/bars_controller.rb:44:5:44:17 | call to render | controllers/foo/bars_controller.rb:44:12:44:17 | "show" | +| app/controllers/comments_controller.rb:26:5:26:17 | call to body= | app/controllers/comments_controller.rb:26:21:26:34 | ... = ... | +| app/controllers/comments_controller.rb:36:5:36:37 | call to send_file | app/controllers/comments_controller.rb:36:24:36:36 | "my-file.ext" | +| app/controllers/comments_controller.rb:65:5:65:20 | call to send_data | app/controllers/comments_controller.rb:65:15:65:20 | @photo | +| app/controllers/foo/bars_controller.rb:15:16:15:97 | call to render_to_string | app/controllers/foo/bars_controller.rb:15:33:15:47 | "foo/bars/show" | +| app/controllers/foo/bars_controller.rb:23:5:23:76 | call to render | app/controllers/foo/bars_controller.rb:23:12:23:26 | "foo/bars/show" | +| app/controllers/foo/bars_controller.rb:35:5:35:33 | call to render | app/controllers/foo/bars_controller.rb:35:18:35:33 | call to [] | +| app/controllers/foo/bars_controller.rb:36:12:36:67 | call to render_to_string | app/controllers/foo/bars_controller.rb:36:29:36:33 | @user | +| app/controllers/foo/bars_controller.rb:38:5:38:50 | call to render | app/controllers/foo/bars_controller.rb:38:12:38:22 | call to backtrace | +| app/controllers/foo/bars_controller.rb:44:5:44:17 | call to render | app/controllers/foo/bars_controller.rb:44:12:44:17 | "show" | actionControllerHelperMethods getAssociatedControllerClasses controllerTemplateFiles headerWriteAccesses -| controllers/comments_controller.rb:30:5:30:35 | call to []= | content-type | controllers/comments_controller.rb:30:39:30:49 | ... = ... | -| controllers/comments_controller.rb:31:5:31:46 | call to set_header | content-length | controllers/comments_controller.rb:31:43:31:45 | 100 | -| controllers/comments_controller.rb:32:5:32:39 | call to []= | x-custom-header | controllers/comments_controller.rb:32:43:32:46 | ... = ... | -| controllers/comments_controller.rb:33:5:33:39 | call to []= | x-another-custom-header | controllers/comments_controller.rb:33:43:33:47 | ... = ... | -| controllers/comments_controller.rb:34:5:34:49 | call to add_header | x-yet-another | controllers/comments_controller.rb:34:42:34:49 | "indeed" | -| controllers/comments_controller.rb:40:5:40:21 | call to location= | location | controllers/comments_controller.rb:40:25:40:36 | ... = ... | -| controllers/comments_controller.rb:41:5:41:26 | call to cache_control= | cache-control | controllers/comments_controller.rb:41:30:41:36 | ... = ... | -| controllers/comments_controller.rb:42:5:42:27 | call to _cache_control= | cache-control | controllers/comments_controller.rb:42:31:42:37 | ... = ... | -| controllers/comments_controller.rb:43:5:43:17 | call to etag= | etag | controllers/comments_controller.rb:43:21:43:27 | ... = ... | -| controllers/comments_controller.rb:44:5:44:20 | call to charset= | content-type | controllers/comments_controller.rb:44:24:44:30 | ... = ... | -| controllers/comments_controller.rb:45:5:45:25 | call to content_type= | content-type | controllers/comments_controller.rb:45:29:45:35 | ... = ... | -| controllers/comments_controller.rb:47:5:47:17 | call to date= | date | controllers/comments_controller.rb:47:21:47:30 | ... = ... | -| controllers/comments_controller.rb:48:5:48:26 | call to last_modified= | last-modified | controllers/comments_controller.rb:48:30:48:43 | ... = ... | -| controllers/comments_controller.rb:49:5:49:22 | call to weak_etag= | etag | controllers/comments_controller.rb:49:26:49:32 | ... = ... | -| controllers/comments_controller.rb:50:5:50:24 | call to strong_etag= | etag | controllers/comments_controller.rb:50:28:50:34 | ... = ... | +| app/controllers/comments_controller.rb:30:5:30:35 | call to []= | content-type | app/controllers/comments_controller.rb:30:39:30:49 | ... = ... | +| app/controllers/comments_controller.rb:31:5:31:46 | call to set_header | content-length | app/controllers/comments_controller.rb:31:43:31:45 | 100 | +| app/controllers/comments_controller.rb:32:5:32:39 | call to []= | x-custom-header | app/controllers/comments_controller.rb:32:43:32:46 | ... = ... | +| app/controllers/comments_controller.rb:33:5:33:39 | call to []= | x-another-custom-header | app/controllers/comments_controller.rb:33:43:33:47 | ... = ... | +| app/controllers/comments_controller.rb:34:5:34:49 | call to add_header | x-yet-another | app/controllers/comments_controller.rb:34:42:34:49 | "indeed" | +| app/controllers/comments_controller.rb:40:5:40:21 | call to location= | location | app/controllers/comments_controller.rb:40:25:40:36 | ... = ... | +| app/controllers/comments_controller.rb:41:5:41:26 | call to cache_control= | cache-control | app/controllers/comments_controller.rb:41:30:41:36 | ... = ... | +| app/controllers/comments_controller.rb:42:5:42:27 | call to _cache_control= | cache-control | app/controllers/comments_controller.rb:42:31:42:37 | ... = ... | +| app/controllers/comments_controller.rb:43:5:43:17 | call to etag= | etag | app/controllers/comments_controller.rb:43:21:43:27 | ... = ... | +| app/controllers/comments_controller.rb:44:5:44:20 | call to charset= | content-type | app/controllers/comments_controller.rb:44:24:44:30 | ... = ... | +| app/controllers/comments_controller.rb:45:5:45:25 | call to content_type= | content-type | app/controllers/comments_controller.rb:45:29:45:35 | ... = ... | +| app/controllers/comments_controller.rb:47:5:47:17 | call to date= | date | app/controllers/comments_controller.rb:47:21:47:30 | ... = ... | +| app/controllers/comments_controller.rb:48:5:48:26 | call to last_modified= | last-modified | app/controllers/comments_controller.rb:48:30:48:43 | ... = ... | +| app/controllers/comments_controller.rb:49:5:49:22 | call to weak_etag= | etag | app/controllers/comments_controller.rb:49:26:49:32 | ... = ... | +| app/controllers/comments_controller.rb:50:5:50:24 | call to strong_etag= | etag | app/controllers/comments_controller.rb:50:28:50:34 | ... = ... | loggingCalls | logging.rb:3:9:3:31 | call to info | logging.rb:3:21:3:31 | "some info" | | logging.rb:4:9:4:31 | call to warn | logging.rb:4:21:4:31 | "a warning" | diff --git a/ruby/ql/test/library-tests/frameworks/action_controller/Filters.expected b/ruby/ql/test/library-tests/frameworks/action_controller/Filters.expected index 6bbab525a17..e25a8d9c66e 100644 --- a/ruby/ql/test/library-tests/frameworks/action_controller/Filters.expected +++ b/ruby/ql/test/library-tests/frameworks/action_controller/Filters.expected @@ -1,95 +1,95 @@ additionalFlowSteps -| controllers/application_controller.rb:6:3:8:5 | self in set_user | controllers/comments_controller.rb:74:3:77:5 | self in ensure_user_can_edit_comments | -| controllers/application_controller.rb:6:3:8:5 | self in set_user | controllers/comments_controller.rb:79:3:81:5 | self in set_comment | -| controllers/application_controller.rb:6:3:8:5 | self in set_user | controllers/comments_controller.rb:99:3:100:5 | self in foo | -| controllers/application_controller.rb:6:3:8:5 | self in set_user | controllers/posts_controller.rb:12:3:15:5 | self in index | -| controllers/application_controller.rb:6:3:8:5 | self in set_user | controllers/posts_controller.rb:17:3:18:5 | self in show | -| controllers/application_controller.rb:6:3:8:5 | self in set_user | controllers/posts_controller.rb:20:3:21:5 | self in upvote | -| controllers/application_controller.rb:7:5:7:9 | [post] self | controllers/comments_controller.rb:74:3:77:5 | self in ensure_user_can_edit_comments | -| controllers/application_controller.rb:7:5:7:9 | [post] self | controllers/comments_controller.rb:79:3:81:5 | self in set_comment | -| controllers/application_controller.rb:7:5:7:9 | [post] self | controllers/comments_controller.rb:99:3:100:5 | self in foo | -| controllers/application_controller.rb:7:5:7:9 | [post] self | controllers/posts_controller.rb:12:3:15:5 | self in index | -| controllers/application_controller.rb:7:5:7:9 | [post] self | controllers/posts_controller.rb:17:3:18:5 | self in show | -| controllers/application_controller.rb:7:5:7:9 | [post] self | controllers/posts_controller.rb:20:3:21:5 | self in upvote | -| controllers/application_controller.rb:7:23:7:29 | [post] self | controllers/comments_controller.rb:74:3:77:5 | self in ensure_user_can_edit_comments | -| controllers/application_controller.rb:7:23:7:29 | [post] self | controllers/comments_controller.rb:79:3:81:5 | self in set_comment | -| controllers/application_controller.rb:7:23:7:29 | [post] self | controllers/comments_controller.rb:99:3:100:5 | self in foo | -| controllers/application_controller.rb:7:23:7:29 | [post] self | controllers/posts_controller.rb:12:3:15:5 | self in index | -| controllers/application_controller.rb:7:23:7:29 | [post] self | controllers/posts_controller.rb:17:3:18:5 | self in show | -| controllers/application_controller.rb:7:23:7:29 | [post] self | controllers/posts_controller.rb:20:3:21:5 | self in upvote | -| controllers/application_controller.rb:10:3:12:5 | self in log_request | controllers/application_controller.rb:6:3:8:5 | self in set_user | -| controllers/application_controller.rb:10:3:12:5 | self in log_request | controllers/photos_controller.rb:3:3:6:5 | self in show | -| controllers/application_controller.rb:10:3:12:5 | self in log_request | controllers/posts_controller.rb:25:3:27:5 | self in set_post | -| controllers/application_controller.rb:11:35:11:41 | [post] self | controllers/application_controller.rb:6:3:8:5 | self in set_user | -| controllers/application_controller.rb:11:35:11:41 | [post] self | controllers/photos_controller.rb:3:3:6:5 | self in show | -| controllers/application_controller.rb:11:35:11:41 | [post] self | controllers/posts_controller.rb:25:3:27:5 | self in set_post | -| controllers/application_controller.rb:11:53:11:59 | [post] self | controllers/application_controller.rb:6:3:8:5 | self in set_user | -| controllers/application_controller.rb:11:53:11:59 | [post] self | controllers/photos_controller.rb:3:3:6:5 | self in show | -| controllers/application_controller.rb:11:53:11:59 | [post] self | controllers/posts_controller.rb:25:3:27:5 | self in set_post | -| controllers/comments_controller.rb:17:3:51:5 | self in index | controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | -| controllers/comments_controller.rb:18:5:18:11 | [post] self | controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | -| controllers/comments_controller.rb:19:5:19:11 | [post] self | controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | -| controllers/comments_controller.rb:20:5:20:11 | [post] self | controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | -| controllers/comments_controller.rb:21:5:21:11 | [post] self | controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | -| controllers/comments_controller.rb:22:5:22:11 | [post] self | controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | -| controllers/comments_controller.rb:23:5:23:11 | [post] self | controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | -| controllers/comments_controller.rb:24:5:24:11 | [post] self | controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | -| controllers/comments_controller.rb:26:5:26:12 | [post] self | controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | -| controllers/comments_controller.rb:28:5:28:12 | [post] self | controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | -| controllers/comments_controller.rb:30:5:30:12 | [post] self | controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | -| controllers/comments_controller.rb:31:5:31:12 | [post] self | controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | -| controllers/comments_controller.rb:32:5:32:12 | [post] self | controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | -| controllers/comments_controller.rb:33:5:33:12 | [post] self | controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | -| controllers/comments_controller.rb:34:5:34:12 | [post] self | controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | -| controllers/comments_controller.rb:36:5:36:12 | [post] self | controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | -| controllers/comments_controller.rb:38:5:38:12 | [post] self | controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | -| controllers/comments_controller.rb:40:5:40:12 | [post] self | controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | -| controllers/comments_controller.rb:41:5:41:12 | [post] self | controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | -| controllers/comments_controller.rb:42:5:42:12 | [post] self | controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | -| controllers/comments_controller.rb:43:5:43:12 | [post] self | controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | -| controllers/comments_controller.rb:44:5:44:12 | [post] self | controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | -| controllers/comments_controller.rb:45:5:45:12 | [post] self | controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | -| controllers/comments_controller.rb:47:5:47:12 | [post] self | controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | -| controllers/comments_controller.rb:48:5:48:12 | [post] self | controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | -| controllers/comments_controller.rb:49:5:49:12 | [post] self | controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | -| controllers/comments_controller.rb:50:5:50:12 | [post] self | controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | -| controllers/comments_controller.rb:53:3:54:5 | self in create | controllers/comments_controller.rb:83:3:85:5 | self in log_comment_change | -| controllers/comments_controller.rb:56:3:62:5 | self in show | controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | -| controllers/comments_controller.rb:57:5:61:7 | [post] self | controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | -| controllers/comments_controller.rb:64:3:66:5 | self in photo | controllers/comments_controller.rb:83:3:85:5 | self in log_comment_change | -| controllers/comments_controller.rb:65:5:65:20 | [post] self | controllers/comments_controller.rb:83:3:85:5 | self in log_comment_change | -| controllers/comments_controller.rb:65:15:65:20 | [post] self | controllers/comments_controller.rb:83:3:85:5 | self in log_comment_change | -| controllers/comments_controller.rb:68:3:70:5 | self in destroy | controllers/comments_controller.rb:83:3:85:5 | self in log_comment_change | -| controllers/comments_controller.rb:69:12:69:18 | [post] self | controllers/comments_controller.rb:83:3:85:5 | self in log_comment_change | -| controllers/comments_controller.rb:74:3:77:5 | self in ensure_user_can_edit_comments | controllers/comments_controller.rb:79:3:81:5 | self in set_comment | -| controllers/comments_controller.rb:74:3:77:5 | self in ensure_user_can_edit_comments | controllers/comments_controller.rb:99:3:100:5 | self in foo | -| controllers/comments_controller.rb:75:15:75:19 | [post] self | controllers/comments_controller.rb:79:3:81:5 | self in set_comment | -| controllers/comments_controller.rb:75:15:75:19 | [post] self | controllers/comments_controller.rb:99:3:100:5 | self in foo | -| controllers/comments_controller.rb:76:5:76:68 | [post] self | controllers/comments_controller.rb:79:3:81:5 | self in set_comment | -| controllers/comments_controller.rb:76:5:76:68 | [post] self | controllers/comments_controller.rb:99:3:100:5 | self in foo | -| controllers/comments_controller.rb:79:3:81:5 | self in set_comment | controllers/comments_controller.rb:99:3:100:5 | self in foo | -| controllers/comments_controller.rb:80:5:80:12 | [post] self | controllers/comments_controller.rb:99:3:100:5 | self in foo | -| controllers/comments_controller.rb:80:16:80:20 | [post] self | controllers/comments_controller.rb:99:3:100:5 | self in foo | -| controllers/comments_controller.rb:80:36:80:41 | [post] self | controllers/comments_controller.rb:99:3:100:5 | self in foo | -| controllers/comments_controller.rb:83:3:85:5 | self in log_comment_change | controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | -| controllers/comments_controller.rb:84:45:84:49 | [post] self | controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | -| controllers/comments_controller.rb:84:61:84:68 | [post] self | controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | -| controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | controllers/comments_controller.rb:95:3:97:5 | self in this_must_run_last | -| controllers/comments_controller.rb:88:5:88:28 | [post] self | controllers/comments_controller.rb:95:3:97:5 | self in this_must_run_last | -| controllers/comments_controller.rb:91:3:93:5 | self in this_must_run_first | controllers/application_controller.rb:10:3:12:5 | self in log_request | -| controllers/comments_controller.rb:99:3:100:5 | self in foo | controllers/comments_controller.rb:102:3:103:5 | self in bar | -| controllers/comments_controller.rb:102:3:103:5 | self in bar | controllers/comments_controller.rb:17:3:51:5 | self in index | -| controllers/comments_controller.rb:102:3:103:5 | self in bar | controllers/comments_controller.rb:53:3:54:5 | self in create | -| controllers/comments_controller.rb:102:3:103:5 | self in bar | controllers/comments_controller.rb:56:3:62:5 | self in show | -| controllers/comments_controller.rb:102:3:103:5 | self in bar | controllers/comments_controller.rb:64:3:66:5 | self in photo | -| controllers/comments_controller.rb:102:3:103:5 | self in bar | controllers/comments_controller.rb:68:3:70:5 | self in destroy | -| controllers/photos_controller.rb:3:3:6:5 | self in show | controllers/photos_controller.rb:8:3:9:5 | self in foo | -| controllers/photos_controller.rb:4:5:4:6 | [post] self | controllers/photos_controller.rb:8:3:9:5 | self in foo | -| controllers/photos_controller.rb:5:5:5:6 | [post] self | controllers/photos_controller.rb:8:3:9:5 | self in foo | -| controllers/posts_controller.rb:20:3:21:5 | self in upvote | controllers/posts_controller.rb:29:3:31:5 | self in log_upvote | -| controllers/posts_controller.rb:25:3:27:5 | self in set_post | controllers/application_controller.rb:6:3:8:5 | self in set_user | -| controllers/posts_controller.rb:26:5:26:9 | [post] self | controllers/application_controller.rb:6:3:8:5 | self in set_user | -| controllers/posts_controller.rb:26:23:26:28 | [post] self | controllers/application_controller.rb:6:3:8:5 | self in set_user | +| app/controllers/application_controller.rb:6:3:8:5 | self in set_user | app/controllers/comments_controller.rb:74:3:77:5 | self in ensure_user_can_edit_comments | +| app/controllers/application_controller.rb:6:3:8:5 | self in set_user | app/controllers/comments_controller.rb:79:3:81:5 | self in set_comment | +| app/controllers/application_controller.rb:6:3:8:5 | self in set_user | app/controllers/comments_controller.rb:99:3:100:5 | self in foo | +| app/controllers/application_controller.rb:6:3:8:5 | self in set_user | app/controllers/posts_controller.rb:12:3:15:5 | self in index | +| app/controllers/application_controller.rb:6:3:8:5 | self in set_user | app/controllers/posts_controller.rb:17:3:18:5 | self in show | +| app/controllers/application_controller.rb:6:3:8:5 | self in set_user | app/controllers/posts_controller.rb:20:3:21:5 | self in upvote | +| app/controllers/application_controller.rb:7:5:7:9 | [post] self | app/controllers/comments_controller.rb:74:3:77:5 | self in ensure_user_can_edit_comments | +| app/controllers/application_controller.rb:7:5:7:9 | [post] self | app/controllers/comments_controller.rb:79:3:81:5 | self in set_comment | +| app/controllers/application_controller.rb:7:5:7:9 | [post] self | app/controllers/comments_controller.rb:99:3:100:5 | self in foo | +| app/controllers/application_controller.rb:7:5:7:9 | [post] self | app/controllers/posts_controller.rb:12:3:15:5 | self in index | +| app/controllers/application_controller.rb:7:5:7:9 | [post] self | app/controllers/posts_controller.rb:17:3:18:5 | self in show | +| app/controllers/application_controller.rb:7:5:7:9 | [post] self | app/controllers/posts_controller.rb:20:3:21:5 | self in upvote | +| app/controllers/application_controller.rb:7:23:7:29 | [post] self | app/controllers/comments_controller.rb:74:3:77:5 | self in ensure_user_can_edit_comments | +| app/controllers/application_controller.rb:7:23:7:29 | [post] self | app/controllers/comments_controller.rb:79:3:81:5 | self in set_comment | +| app/controllers/application_controller.rb:7:23:7:29 | [post] self | app/controllers/comments_controller.rb:99:3:100:5 | self in foo | +| app/controllers/application_controller.rb:7:23:7:29 | [post] self | app/controllers/posts_controller.rb:12:3:15:5 | self in index | +| app/controllers/application_controller.rb:7:23:7:29 | [post] self | app/controllers/posts_controller.rb:17:3:18:5 | self in show | +| app/controllers/application_controller.rb:7:23:7:29 | [post] self | app/controllers/posts_controller.rb:20:3:21:5 | self in upvote | +| app/controllers/application_controller.rb:10:3:12:5 | self in log_request | app/controllers/application_controller.rb:6:3:8:5 | self in set_user | +| app/controllers/application_controller.rb:10:3:12:5 | self in log_request | app/controllers/photos_controller.rb:3:3:6:5 | self in show | +| app/controllers/application_controller.rb:10:3:12:5 | self in log_request | app/controllers/posts_controller.rb:25:3:27:5 | self in set_post | +| app/controllers/application_controller.rb:11:35:11:41 | [post] self | app/controllers/application_controller.rb:6:3:8:5 | self in set_user | +| app/controllers/application_controller.rb:11:35:11:41 | [post] self | app/controllers/photos_controller.rb:3:3:6:5 | self in show | +| app/controllers/application_controller.rb:11:35:11:41 | [post] self | app/controllers/posts_controller.rb:25:3:27:5 | self in set_post | +| app/controllers/application_controller.rb:11:53:11:59 | [post] self | app/controllers/application_controller.rb:6:3:8:5 | self in set_user | +| app/controllers/application_controller.rb:11:53:11:59 | [post] self | app/controllers/photos_controller.rb:3:3:6:5 | self in show | +| app/controllers/application_controller.rb:11:53:11:59 | [post] self | app/controllers/posts_controller.rb:25:3:27:5 | self in set_post | +| app/controllers/comments_controller.rb:17:3:51:5 | self in index | app/controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | +| app/controllers/comments_controller.rb:18:5:18:11 | [post] self | app/controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | +| app/controllers/comments_controller.rb:19:5:19:11 | [post] self | app/controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | +| app/controllers/comments_controller.rb:20:5:20:11 | [post] self | app/controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | +| app/controllers/comments_controller.rb:21:5:21:11 | [post] self | app/controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | +| app/controllers/comments_controller.rb:22:5:22:11 | [post] self | app/controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | +| app/controllers/comments_controller.rb:23:5:23:11 | [post] self | app/controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | +| app/controllers/comments_controller.rb:24:5:24:11 | [post] self | app/controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | +| app/controllers/comments_controller.rb:26:5:26:12 | [post] self | app/controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | +| app/controllers/comments_controller.rb:28:5:28:12 | [post] self | app/controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | +| app/controllers/comments_controller.rb:30:5:30:12 | [post] self | app/controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | +| app/controllers/comments_controller.rb:31:5:31:12 | [post] self | app/controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | +| app/controllers/comments_controller.rb:32:5:32:12 | [post] self | app/controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | +| app/controllers/comments_controller.rb:33:5:33:12 | [post] self | app/controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | +| app/controllers/comments_controller.rb:34:5:34:12 | [post] self | app/controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | +| app/controllers/comments_controller.rb:36:5:36:12 | [post] self | app/controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | +| app/controllers/comments_controller.rb:38:5:38:12 | [post] self | app/controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | +| app/controllers/comments_controller.rb:40:5:40:12 | [post] self | app/controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | +| app/controllers/comments_controller.rb:41:5:41:12 | [post] self | app/controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | +| app/controllers/comments_controller.rb:42:5:42:12 | [post] self | app/controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | +| app/controllers/comments_controller.rb:43:5:43:12 | [post] self | app/controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | +| app/controllers/comments_controller.rb:44:5:44:12 | [post] self | app/controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | +| app/controllers/comments_controller.rb:45:5:45:12 | [post] self | app/controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | +| app/controllers/comments_controller.rb:47:5:47:12 | [post] self | app/controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | +| app/controllers/comments_controller.rb:48:5:48:12 | [post] self | app/controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | +| app/controllers/comments_controller.rb:49:5:49:12 | [post] self | app/controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | +| app/controllers/comments_controller.rb:50:5:50:12 | [post] self | app/controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | +| app/controllers/comments_controller.rb:53:3:54:5 | self in create | app/controllers/comments_controller.rb:83:3:85:5 | self in log_comment_change | +| app/controllers/comments_controller.rb:56:3:62:5 | self in show | app/controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | +| app/controllers/comments_controller.rb:57:5:61:7 | [post] self | app/controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | +| app/controllers/comments_controller.rb:64:3:66:5 | self in photo | app/controllers/comments_controller.rb:83:3:85:5 | self in log_comment_change | +| app/controllers/comments_controller.rb:65:5:65:20 | [post] self | app/controllers/comments_controller.rb:83:3:85:5 | self in log_comment_change | +| app/controllers/comments_controller.rb:65:15:65:20 | [post] self | app/controllers/comments_controller.rb:83:3:85:5 | self in log_comment_change | +| app/controllers/comments_controller.rb:68:3:70:5 | self in destroy | app/controllers/comments_controller.rb:83:3:85:5 | self in log_comment_change | +| app/controllers/comments_controller.rb:69:12:69:18 | [post] self | app/controllers/comments_controller.rb:83:3:85:5 | self in log_comment_change | +| app/controllers/comments_controller.rb:74:3:77:5 | self in ensure_user_can_edit_comments | app/controllers/comments_controller.rb:79:3:81:5 | self in set_comment | +| app/controllers/comments_controller.rb:74:3:77:5 | self in ensure_user_can_edit_comments | app/controllers/comments_controller.rb:99:3:100:5 | self in foo | +| app/controllers/comments_controller.rb:75:15:75:19 | [post] self | app/controllers/comments_controller.rb:79:3:81:5 | self in set_comment | +| app/controllers/comments_controller.rb:75:15:75:19 | [post] self | app/controllers/comments_controller.rb:99:3:100:5 | self in foo | +| app/controllers/comments_controller.rb:76:5:76:68 | [post] self | app/controllers/comments_controller.rb:79:3:81:5 | self in set_comment | +| app/controllers/comments_controller.rb:76:5:76:68 | [post] self | app/controllers/comments_controller.rb:99:3:100:5 | self in foo | +| app/controllers/comments_controller.rb:79:3:81:5 | self in set_comment | app/controllers/comments_controller.rb:99:3:100:5 | self in foo | +| app/controllers/comments_controller.rb:80:5:80:12 | [post] self | app/controllers/comments_controller.rb:99:3:100:5 | self in foo | +| app/controllers/comments_controller.rb:80:16:80:20 | [post] self | app/controllers/comments_controller.rb:99:3:100:5 | self in foo | +| app/controllers/comments_controller.rb:80:36:80:41 | [post] self | app/controllers/comments_controller.rb:99:3:100:5 | self in foo | +| app/controllers/comments_controller.rb:83:3:85:5 | self in log_comment_change | app/controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | +| app/controllers/comments_controller.rb:84:45:84:49 | [post] self | app/controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | +| app/controllers/comments_controller.rb:84:61:84:68 | [post] self | app/controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | +| app/controllers/comments_controller.rb:87:3:89:5 | self in check_feature_flags | app/controllers/comments_controller.rb:95:3:97:5 | self in this_must_run_last | +| app/controllers/comments_controller.rb:88:5:88:28 | [post] self | app/controllers/comments_controller.rb:95:3:97:5 | self in this_must_run_last | +| app/controllers/comments_controller.rb:91:3:93:5 | self in this_must_run_first | app/controllers/application_controller.rb:10:3:12:5 | self in log_request | +| app/controllers/comments_controller.rb:99:3:100:5 | self in foo | app/controllers/comments_controller.rb:102:3:103:5 | self in bar | +| app/controllers/comments_controller.rb:102:3:103:5 | self in bar | app/controllers/comments_controller.rb:17:3:51:5 | self in index | +| app/controllers/comments_controller.rb:102:3:103:5 | self in bar | app/controllers/comments_controller.rb:53:3:54:5 | self in create | +| app/controllers/comments_controller.rb:102:3:103:5 | self in bar | app/controllers/comments_controller.rb:56:3:62:5 | self in show | +| app/controllers/comments_controller.rb:102:3:103:5 | self in bar | app/controllers/comments_controller.rb:64:3:66:5 | self in photo | +| app/controllers/comments_controller.rb:102:3:103:5 | self in bar | app/controllers/comments_controller.rb:68:3:70:5 | self in destroy | +| app/controllers/photos_controller.rb:3:3:6:5 | self in show | app/controllers/photos_controller.rb:8:3:9:5 | self in foo | +| app/controllers/photos_controller.rb:4:5:4:6 | [post] self | app/controllers/photos_controller.rb:8:3:9:5 | self in foo | +| app/controllers/photos_controller.rb:5:5:5:6 | [post] self | app/controllers/photos_controller.rb:8:3:9:5 | self in foo | +| app/controllers/posts_controller.rb:20:3:21:5 | self in upvote | app/controllers/posts_controller.rb:29:3:31:5 | self in log_upvote | +| app/controllers/posts_controller.rb:25:3:27:5 | self in set_post | app/controllers/application_controller.rb:6:3:8:5 | self in set_user | +| app/controllers/posts_controller.rb:26:5:26:9 | [post] self | app/controllers/application_controller.rb:6:3:8:5 | self in set_user | +| app/controllers/posts_controller.rb:26:23:26:28 | [post] self | app/controllers/application_controller.rb:6:3:8:5 | self in set_user | | filter_flow.rb:13:3:15:5 | self in a | filter_flow.rb:17:3:18:5 | self in b | | filter_flow.rb:14:5:14:8 | [post] self | filter_flow.rb:17:3:18:5 | self in b | | filter_flow.rb:14:12:14:17 | [post] self | filter_flow.rb:17:3:18:5 | self in b | @@ -112,59 +112,59 @@ additionalFlowSteps | filter_flow.rb:80:5:80:8 | [post] self | filter_flow.rb:83:3:84:5 | self in b | | filter_flow.rb:83:3:84:5 | self in b | filter_flow.rb:86:3:88:5 | self in c | filterChain -| controllers/comments_controller.rb:17:3:51:5 | index | controllers/application_controller.rb:6:3:8:5 | set_user | controllers/comments_controller.rb:99:3:100:5 | foo | -| controllers/comments_controller.rb:17:3:51:5 | index | controllers/application_controller.rb:10:3:12:5 | log_request | controllers/application_controller.rb:6:3:8:5 | set_user | -| controllers/comments_controller.rb:17:3:51:5 | index | controllers/comments_controller.rb:17:3:51:5 | index | controllers/comments_controller.rb:87:3:89:5 | check_feature_flags | -| controllers/comments_controller.rb:17:3:51:5 | index | controllers/comments_controller.rb:87:3:89:5 | check_feature_flags | controllers/comments_controller.rb:95:3:97:5 | this_must_run_last | -| controllers/comments_controller.rb:17:3:51:5 | index | controllers/comments_controller.rb:91:3:93:5 | this_must_run_first | controllers/application_controller.rb:10:3:12:5 | log_request | -| controllers/comments_controller.rb:17:3:51:5 | index | controllers/comments_controller.rb:99:3:100:5 | foo | controllers/comments_controller.rb:102:3:103:5 | bar | -| controllers/comments_controller.rb:17:3:51:5 | index | controllers/comments_controller.rb:102:3:103:5 | bar | controllers/comments_controller.rb:17:3:51:5 | index | -| controllers/comments_controller.rb:53:3:54:5 | create | controllers/application_controller.rb:6:3:8:5 | set_user | controllers/comments_controller.rb:74:3:77:5 | ensure_user_can_edit_comments | -| controllers/comments_controller.rb:53:3:54:5 | create | controllers/application_controller.rb:10:3:12:5 | log_request | controllers/application_controller.rb:6:3:8:5 | set_user | -| controllers/comments_controller.rb:53:3:54:5 | create | controllers/comments_controller.rb:53:3:54:5 | create | controllers/comments_controller.rb:83:3:85:5 | log_comment_change | -| controllers/comments_controller.rb:53:3:54:5 | create | controllers/comments_controller.rb:74:3:77:5 | ensure_user_can_edit_comments | controllers/comments_controller.rb:99:3:100:5 | foo | -| controllers/comments_controller.rb:53:3:54:5 | create | controllers/comments_controller.rb:83:3:85:5 | log_comment_change | controllers/comments_controller.rb:87:3:89:5 | check_feature_flags | -| controllers/comments_controller.rb:53:3:54:5 | create | controllers/comments_controller.rb:87:3:89:5 | check_feature_flags | controllers/comments_controller.rb:95:3:97:5 | this_must_run_last | -| controllers/comments_controller.rb:53:3:54:5 | create | controllers/comments_controller.rb:91:3:93:5 | this_must_run_first | controllers/application_controller.rb:10:3:12:5 | log_request | -| controllers/comments_controller.rb:53:3:54:5 | create | controllers/comments_controller.rb:99:3:100:5 | foo | controllers/comments_controller.rb:102:3:103:5 | bar | -| controllers/comments_controller.rb:53:3:54:5 | create | controllers/comments_controller.rb:102:3:103:5 | bar | controllers/comments_controller.rb:53:3:54:5 | create | -| controllers/comments_controller.rb:56:3:62:5 | show | controllers/application_controller.rb:6:3:8:5 | set_user | controllers/comments_controller.rb:79:3:81:5 | set_comment | -| controllers/comments_controller.rb:56:3:62:5 | show | controllers/application_controller.rb:10:3:12:5 | log_request | controllers/application_controller.rb:6:3:8:5 | set_user | -| controllers/comments_controller.rb:56:3:62:5 | show | controllers/comments_controller.rb:56:3:62:5 | show | controllers/comments_controller.rb:87:3:89:5 | check_feature_flags | -| controllers/comments_controller.rb:56:3:62:5 | show | controllers/comments_controller.rb:79:3:81:5 | set_comment | controllers/comments_controller.rb:99:3:100:5 | foo | -| controllers/comments_controller.rb:56:3:62:5 | show | controllers/comments_controller.rb:87:3:89:5 | check_feature_flags | controllers/comments_controller.rb:95:3:97:5 | this_must_run_last | -| controllers/comments_controller.rb:56:3:62:5 | show | controllers/comments_controller.rb:91:3:93:5 | this_must_run_first | controllers/application_controller.rb:10:3:12:5 | log_request | -| controllers/comments_controller.rb:56:3:62:5 | show | controllers/comments_controller.rb:99:3:100:5 | foo | controllers/comments_controller.rb:102:3:103:5 | bar | -| controllers/comments_controller.rb:56:3:62:5 | show | controllers/comments_controller.rb:102:3:103:5 | bar | controllers/comments_controller.rb:56:3:62:5 | show | -| controllers/comments_controller.rb:64:3:66:5 | photo | controllers/application_controller.rb:6:3:8:5 | set_user | controllers/comments_controller.rb:99:3:100:5 | foo | -| controllers/comments_controller.rb:64:3:66:5 | photo | controllers/application_controller.rb:10:3:12:5 | log_request | controllers/application_controller.rb:6:3:8:5 | set_user | -| controllers/comments_controller.rb:64:3:66:5 | photo | controllers/comments_controller.rb:64:3:66:5 | photo | controllers/comments_controller.rb:83:3:85:5 | log_comment_change | -| controllers/comments_controller.rb:64:3:66:5 | photo | controllers/comments_controller.rb:83:3:85:5 | log_comment_change | controllers/comments_controller.rb:87:3:89:5 | check_feature_flags | -| controllers/comments_controller.rb:64:3:66:5 | photo | controllers/comments_controller.rb:87:3:89:5 | check_feature_flags | controllers/comments_controller.rb:95:3:97:5 | this_must_run_last | -| controllers/comments_controller.rb:64:3:66:5 | photo | controllers/comments_controller.rb:91:3:93:5 | this_must_run_first | controllers/application_controller.rb:10:3:12:5 | log_request | -| controllers/comments_controller.rb:64:3:66:5 | photo | controllers/comments_controller.rb:99:3:100:5 | foo | controllers/comments_controller.rb:102:3:103:5 | bar | -| controllers/comments_controller.rb:64:3:66:5 | photo | controllers/comments_controller.rb:102:3:103:5 | bar | controllers/comments_controller.rb:64:3:66:5 | photo | -| controllers/comments_controller.rb:68:3:70:5 | destroy | controllers/application_controller.rb:6:3:8:5 | set_user | controllers/comments_controller.rb:74:3:77:5 | ensure_user_can_edit_comments | -| controllers/comments_controller.rb:68:3:70:5 | destroy | controllers/application_controller.rb:10:3:12:5 | log_request | controllers/application_controller.rb:6:3:8:5 | set_user | -| controllers/comments_controller.rb:68:3:70:5 | destroy | controllers/comments_controller.rb:68:3:70:5 | destroy | controllers/comments_controller.rb:83:3:85:5 | log_comment_change | -| controllers/comments_controller.rb:68:3:70:5 | destroy | controllers/comments_controller.rb:74:3:77:5 | ensure_user_can_edit_comments | controllers/comments_controller.rb:79:3:81:5 | set_comment | -| controllers/comments_controller.rb:68:3:70:5 | destroy | controllers/comments_controller.rb:79:3:81:5 | set_comment | controllers/comments_controller.rb:99:3:100:5 | foo | -| controllers/comments_controller.rb:68:3:70:5 | destroy | controllers/comments_controller.rb:83:3:85:5 | log_comment_change | controllers/comments_controller.rb:87:3:89:5 | check_feature_flags | -| controllers/comments_controller.rb:68:3:70:5 | destroy | controllers/comments_controller.rb:87:3:89:5 | check_feature_flags | controllers/comments_controller.rb:95:3:97:5 | this_must_run_last | -| controllers/comments_controller.rb:68:3:70:5 | destroy | controllers/comments_controller.rb:91:3:93:5 | this_must_run_first | controllers/application_controller.rb:10:3:12:5 | log_request | -| controllers/comments_controller.rb:68:3:70:5 | destroy | controllers/comments_controller.rb:99:3:100:5 | foo | controllers/comments_controller.rb:102:3:103:5 | bar | -| controllers/comments_controller.rb:68:3:70:5 | destroy | controllers/comments_controller.rb:102:3:103:5 | bar | controllers/comments_controller.rb:68:3:70:5 | destroy | -| controllers/photos_controller.rb:3:3:6:5 | show | controllers/application_controller.rb:10:3:12:5 | log_request | controllers/photos_controller.rb:3:3:6:5 | show | -| controllers/photos_controller.rb:3:3:6:5 | show | controllers/photos_controller.rb:3:3:6:5 | show | controllers/photos_controller.rb:8:3:9:5 | foo | -| controllers/posts_controller.rb:12:3:15:5 | index | controllers/application_controller.rb:6:3:8:5 | set_user | controllers/posts_controller.rb:12:3:15:5 | index | -| controllers/posts_controller.rb:12:3:15:5 | index | controllers/application_controller.rb:10:3:12:5 | log_request | controllers/application_controller.rb:6:3:8:5 | set_user | -| controllers/posts_controller.rb:17:3:18:5 | show | controllers/application_controller.rb:6:3:8:5 | set_user | controllers/posts_controller.rb:17:3:18:5 | show | -| controllers/posts_controller.rb:17:3:18:5 | show | controllers/application_controller.rb:10:3:12:5 | log_request | controllers/posts_controller.rb:25:3:27:5 | set_post | -| controllers/posts_controller.rb:17:3:18:5 | show | controllers/posts_controller.rb:25:3:27:5 | set_post | controllers/application_controller.rb:6:3:8:5 | set_user | -| controllers/posts_controller.rb:20:3:21:5 | upvote | controllers/application_controller.rb:6:3:8:5 | set_user | controllers/posts_controller.rb:20:3:21:5 | upvote | -| controllers/posts_controller.rb:20:3:21:5 | upvote | controllers/application_controller.rb:10:3:12:5 | log_request | controllers/posts_controller.rb:25:3:27:5 | set_post | -| controllers/posts_controller.rb:20:3:21:5 | upvote | controllers/posts_controller.rb:20:3:21:5 | upvote | controllers/posts_controller.rb:29:3:31:5 | log_upvote | -| controllers/posts_controller.rb:20:3:21:5 | upvote | controllers/posts_controller.rb:25:3:27:5 | set_post | controllers/application_controller.rb:6:3:8:5 | set_user | +| app/controllers/comments_controller.rb:17:3:51:5 | index | app/controllers/application_controller.rb:6:3:8:5 | set_user | app/controllers/comments_controller.rb:99:3:100:5 | foo | +| app/controllers/comments_controller.rb:17:3:51:5 | index | app/controllers/application_controller.rb:10:3:12:5 | log_request | app/controllers/application_controller.rb:6:3:8:5 | set_user | +| app/controllers/comments_controller.rb:17:3:51:5 | index | app/controllers/comments_controller.rb:17:3:51:5 | index | app/controllers/comments_controller.rb:87:3:89:5 | check_feature_flags | +| app/controllers/comments_controller.rb:17:3:51:5 | index | app/controllers/comments_controller.rb:87:3:89:5 | check_feature_flags | app/controllers/comments_controller.rb:95:3:97:5 | this_must_run_last | +| app/controllers/comments_controller.rb:17:3:51:5 | index | app/controllers/comments_controller.rb:91:3:93:5 | this_must_run_first | app/controllers/application_controller.rb:10:3:12:5 | log_request | +| app/controllers/comments_controller.rb:17:3:51:5 | index | app/controllers/comments_controller.rb:99:3:100:5 | foo | app/controllers/comments_controller.rb:102:3:103:5 | bar | +| app/controllers/comments_controller.rb:17:3:51:5 | index | app/controllers/comments_controller.rb:102:3:103:5 | bar | app/controllers/comments_controller.rb:17:3:51:5 | index | +| app/controllers/comments_controller.rb:53:3:54:5 | create | app/controllers/application_controller.rb:6:3:8:5 | set_user | app/controllers/comments_controller.rb:74:3:77:5 | ensure_user_can_edit_comments | +| app/controllers/comments_controller.rb:53:3:54:5 | create | app/controllers/application_controller.rb:10:3:12:5 | log_request | app/controllers/application_controller.rb:6:3:8:5 | set_user | +| app/controllers/comments_controller.rb:53:3:54:5 | create | app/controllers/comments_controller.rb:53:3:54:5 | create | app/controllers/comments_controller.rb:83:3:85:5 | log_comment_change | +| app/controllers/comments_controller.rb:53:3:54:5 | create | app/controllers/comments_controller.rb:74:3:77:5 | ensure_user_can_edit_comments | app/controllers/comments_controller.rb:99:3:100:5 | foo | +| app/controllers/comments_controller.rb:53:3:54:5 | create | app/controllers/comments_controller.rb:83:3:85:5 | log_comment_change | app/controllers/comments_controller.rb:87:3:89:5 | check_feature_flags | +| app/controllers/comments_controller.rb:53:3:54:5 | create | app/controllers/comments_controller.rb:87:3:89:5 | check_feature_flags | app/controllers/comments_controller.rb:95:3:97:5 | this_must_run_last | +| app/controllers/comments_controller.rb:53:3:54:5 | create | app/controllers/comments_controller.rb:91:3:93:5 | this_must_run_first | app/controllers/application_controller.rb:10:3:12:5 | log_request | +| app/controllers/comments_controller.rb:53:3:54:5 | create | app/controllers/comments_controller.rb:99:3:100:5 | foo | app/controllers/comments_controller.rb:102:3:103:5 | bar | +| app/controllers/comments_controller.rb:53:3:54:5 | create | app/controllers/comments_controller.rb:102:3:103:5 | bar | app/controllers/comments_controller.rb:53:3:54:5 | create | +| app/controllers/comments_controller.rb:56:3:62:5 | show | app/controllers/application_controller.rb:6:3:8:5 | set_user | app/controllers/comments_controller.rb:79:3:81:5 | set_comment | +| app/controllers/comments_controller.rb:56:3:62:5 | show | app/controllers/application_controller.rb:10:3:12:5 | log_request | app/controllers/application_controller.rb:6:3:8:5 | set_user | +| app/controllers/comments_controller.rb:56:3:62:5 | show | app/controllers/comments_controller.rb:56:3:62:5 | show | app/controllers/comments_controller.rb:87:3:89:5 | check_feature_flags | +| app/controllers/comments_controller.rb:56:3:62:5 | show | app/controllers/comments_controller.rb:79:3:81:5 | set_comment | app/controllers/comments_controller.rb:99:3:100:5 | foo | +| app/controllers/comments_controller.rb:56:3:62:5 | show | app/controllers/comments_controller.rb:87:3:89:5 | check_feature_flags | app/controllers/comments_controller.rb:95:3:97:5 | this_must_run_last | +| app/controllers/comments_controller.rb:56:3:62:5 | show | app/controllers/comments_controller.rb:91:3:93:5 | this_must_run_first | app/controllers/application_controller.rb:10:3:12:5 | log_request | +| app/controllers/comments_controller.rb:56:3:62:5 | show | app/controllers/comments_controller.rb:99:3:100:5 | foo | app/controllers/comments_controller.rb:102:3:103:5 | bar | +| app/controllers/comments_controller.rb:56:3:62:5 | show | app/controllers/comments_controller.rb:102:3:103:5 | bar | app/controllers/comments_controller.rb:56:3:62:5 | show | +| app/controllers/comments_controller.rb:64:3:66:5 | photo | app/controllers/application_controller.rb:6:3:8:5 | set_user | app/controllers/comments_controller.rb:99:3:100:5 | foo | +| app/controllers/comments_controller.rb:64:3:66:5 | photo | app/controllers/application_controller.rb:10:3:12:5 | log_request | app/controllers/application_controller.rb:6:3:8:5 | set_user | +| app/controllers/comments_controller.rb:64:3:66:5 | photo | app/controllers/comments_controller.rb:64:3:66:5 | photo | app/controllers/comments_controller.rb:83:3:85:5 | log_comment_change | +| app/controllers/comments_controller.rb:64:3:66:5 | photo | app/controllers/comments_controller.rb:83:3:85:5 | log_comment_change | app/controllers/comments_controller.rb:87:3:89:5 | check_feature_flags | +| app/controllers/comments_controller.rb:64:3:66:5 | photo | app/controllers/comments_controller.rb:87:3:89:5 | check_feature_flags | app/controllers/comments_controller.rb:95:3:97:5 | this_must_run_last | +| app/controllers/comments_controller.rb:64:3:66:5 | photo | app/controllers/comments_controller.rb:91:3:93:5 | this_must_run_first | app/controllers/application_controller.rb:10:3:12:5 | log_request | +| app/controllers/comments_controller.rb:64:3:66:5 | photo | app/controllers/comments_controller.rb:99:3:100:5 | foo | app/controllers/comments_controller.rb:102:3:103:5 | bar | +| app/controllers/comments_controller.rb:64:3:66:5 | photo | app/controllers/comments_controller.rb:102:3:103:5 | bar | app/controllers/comments_controller.rb:64:3:66:5 | photo | +| app/controllers/comments_controller.rb:68:3:70:5 | destroy | app/controllers/application_controller.rb:6:3:8:5 | set_user | app/controllers/comments_controller.rb:74:3:77:5 | ensure_user_can_edit_comments | +| app/controllers/comments_controller.rb:68:3:70:5 | destroy | app/controllers/application_controller.rb:10:3:12:5 | log_request | app/controllers/application_controller.rb:6:3:8:5 | set_user | +| app/controllers/comments_controller.rb:68:3:70:5 | destroy | app/controllers/comments_controller.rb:68:3:70:5 | destroy | app/controllers/comments_controller.rb:83:3:85:5 | log_comment_change | +| app/controllers/comments_controller.rb:68:3:70:5 | destroy | app/controllers/comments_controller.rb:74:3:77:5 | ensure_user_can_edit_comments | app/controllers/comments_controller.rb:79:3:81:5 | set_comment | +| app/controllers/comments_controller.rb:68:3:70:5 | destroy | app/controllers/comments_controller.rb:79:3:81:5 | set_comment | app/controllers/comments_controller.rb:99:3:100:5 | foo | +| app/controllers/comments_controller.rb:68:3:70:5 | destroy | app/controllers/comments_controller.rb:83:3:85:5 | log_comment_change | app/controllers/comments_controller.rb:87:3:89:5 | check_feature_flags | +| app/controllers/comments_controller.rb:68:3:70:5 | destroy | app/controllers/comments_controller.rb:87:3:89:5 | check_feature_flags | app/controllers/comments_controller.rb:95:3:97:5 | this_must_run_last | +| app/controllers/comments_controller.rb:68:3:70:5 | destroy | app/controllers/comments_controller.rb:91:3:93:5 | this_must_run_first | app/controllers/application_controller.rb:10:3:12:5 | log_request | +| app/controllers/comments_controller.rb:68:3:70:5 | destroy | app/controllers/comments_controller.rb:99:3:100:5 | foo | app/controllers/comments_controller.rb:102:3:103:5 | bar | +| app/controllers/comments_controller.rb:68:3:70:5 | destroy | app/controllers/comments_controller.rb:102:3:103:5 | bar | app/controllers/comments_controller.rb:68:3:70:5 | destroy | +| app/controllers/photos_controller.rb:3:3:6:5 | show | app/controllers/application_controller.rb:10:3:12:5 | log_request | app/controllers/photos_controller.rb:3:3:6:5 | show | +| app/controllers/photos_controller.rb:3:3:6:5 | show | app/controllers/photos_controller.rb:3:3:6:5 | show | app/controllers/photos_controller.rb:8:3:9:5 | foo | +| app/controllers/posts_controller.rb:12:3:15:5 | index | app/controllers/application_controller.rb:6:3:8:5 | set_user | app/controllers/posts_controller.rb:12:3:15:5 | index | +| app/controllers/posts_controller.rb:12:3:15:5 | index | app/controllers/application_controller.rb:10:3:12:5 | log_request | app/controllers/application_controller.rb:6:3:8:5 | set_user | +| app/controllers/posts_controller.rb:17:3:18:5 | show | app/controllers/application_controller.rb:6:3:8:5 | set_user | app/controllers/posts_controller.rb:17:3:18:5 | show | +| app/controllers/posts_controller.rb:17:3:18:5 | show | app/controllers/application_controller.rb:10:3:12:5 | log_request | app/controllers/posts_controller.rb:25:3:27:5 | set_post | +| app/controllers/posts_controller.rb:17:3:18:5 | show | app/controllers/posts_controller.rb:25:3:27:5 | set_post | app/controllers/application_controller.rb:6:3:8:5 | set_user | +| app/controllers/posts_controller.rb:20:3:21:5 | upvote | app/controllers/application_controller.rb:6:3:8:5 | set_user | app/controllers/posts_controller.rb:20:3:21:5 | upvote | +| app/controllers/posts_controller.rb:20:3:21:5 | upvote | app/controllers/application_controller.rb:10:3:12:5 | log_request | app/controllers/posts_controller.rb:25:3:27:5 | set_post | +| app/controllers/posts_controller.rb:20:3:21:5 | upvote | app/controllers/posts_controller.rb:20:3:21:5 | upvote | app/controllers/posts_controller.rb:29:3:31:5 | log_upvote | +| app/controllers/posts_controller.rb:20:3:21:5 | upvote | app/controllers/posts_controller.rb:25:3:27:5 | set_post | app/controllers/application_controller.rb:6:3:8:5 | set_user | | filter_flow.rb:17:3:18:5 | b | filter_flow.rb:13:3:15:5 | a | filter_flow.rb:17:3:18:5 | b | | filter_flow.rb:17:3:18:5 | b | filter_flow.rb:17:3:18:5 | b | filter_flow.rb:20:3:22:5 | c | | filter_flow.rb:33:3:35:5 | b | filter_flow.rb:29:3:31:5 | a | filter_flow.rb:33:3:35:5 | b | diff --git a/ruby/ql/test/library-tests/frameworks/action_controller/controllers/application_controller.rb b/ruby/ql/test/library-tests/frameworks/action_controller/app/controllers/application_controller.rb similarity index 100% rename from ruby/ql/test/library-tests/frameworks/action_controller/controllers/application_controller.rb rename to ruby/ql/test/library-tests/frameworks/action_controller/app/controllers/application_controller.rb diff --git a/ruby/ql/test/library-tests/frameworks/action_controller/controllers/comments_controller.rb b/ruby/ql/test/library-tests/frameworks/action_controller/app/controllers/comments_controller.rb similarity index 100% rename from ruby/ql/test/library-tests/frameworks/action_controller/controllers/comments_controller.rb rename to ruby/ql/test/library-tests/frameworks/action_controller/app/controllers/comments_controller.rb diff --git a/ruby/ql/test/library-tests/frameworks/action_controller/controllers/foo/bars_controller.rb b/ruby/ql/test/library-tests/frameworks/action_controller/app/controllers/foo/bars_controller.rb similarity index 100% rename from ruby/ql/test/library-tests/frameworks/action_controller/controllers/foo/bars_controller.rb rename to ruby/ql/test/library-tests/frameworks/action_controller/app/controllers/foo/bars_controller.rb diff --git a/ruby/ql/test/library-tests/frameworks/action_controller/controllers/photos_controller.rb b/ruby/ql/test/library-tests/frameworks/action_controller/app/controllers/photos_controller.rb similarity index 100% rename from ruby/ql/test/library-tests/frameworks/action_controller/controllers/photos_controller.rb rename to ruby/ql/test/library-tests/frameworks/action_controller/app/controllers/photos_controller.rb diff --git a/ruby/ql/test/library-tests/frameworks/action_controller/controllers/posts_controller.rb b/ruby/ql/test/library-tests/frameworks/action_controller/app/controllers/posts_controller.rb similarity index 100% rename from ruby/ql/test/library-tests/frameworks/action_controller/controllers/posts_controller.rb rename to ruby/ql/test/library-tests/frameworks/action_controller/app/controllers/posts_controller.rb diff --git a/ruby/ql/test/library-tests/frameworks/action_controller/controllers/tags_controller.rb b/ruby/ql/test/library-tests/frameworks/action_controller/app/controllers/tags_controller.rb similarity index 100% rename from ruby/ql/test/library-tests/frameworks/action_controller/controllers/tags_controller.rb rename to ruby/ql/test/library-tests/frameworks/action_controller/app/controllers/tags_controller.rb diff --git a/ruby/ql/test/library-tests/frameworks/action_controller/controllers/users/notifications_controller.rb b/ruby/ql/test/library-tests/frameworks/action_controller/app/controllers/users/notifications_controller.rb similarity index 100% rename from ruby/ql/test/library-tests/frameworks/action_controller/controllers/users/notifications_controller.rb rename to ruby/ql/test/library-tests/frameworks/action_controller/app/controllers/users/notifications_controller.rb diff --git a/ruby/ql/test/library-tests/frameworks/action_controller/app/views/comments/create.html.erb b/ruby/ql/test/library-tests/frameworks/action_controller/app/views/comments/create.html.erb new file mode 100644 index 00000000000..e69de29bb2d diff --git a/ruby/ql/test/library-tests/frameworks/action_controller/app/views/comments/destroy.html.erb b/ruby/ql/test/library-tests/frameworks/action_controller/app/views/comments/destroy.html.erb new file mode 100644 index 00000000000..e69de29bb2d diff --git a/ruby/ql/test/library-tests/frameworks/action_controller/app/views/comments/index.html.erb b/ruby/ql/test/library-tests/frameworks/action_controller/app/views/comments/index.html.erb new file mode 100644 index 00000000000..e69de29bb2d diff --git a/ruby/ql/test/library-tests/frameworks/action_controller/app/views/comments/show.html.erb b/ruby/ql/test/library-tests/frameworks/action_controller/app/views/comments/show.html.erb new file mode 100644 index 00000000000..e69de29bb2d diff --git a/ruby/ql/test/library-tests/frameworks/action_controller/app/views/notifications/mark_as_read.html.erb b/ruby/ql/test/library-tests/frameworks/action_controller/app/views/notifications/mark_as_read.html.erb new file mode 100644 index 00000000000..e69de29bb2d diff --git a/ruby/ql/test/library-tests/frameworks/action_controller/app/views/photos/foo.html.erb b/ruby/ql/test/library-tests/frameworks/action_controller/app/views/photos/foo.html.erb new file mode 100644 index 00000000000..e69de29bb2d diff --git a/ruby/ql/test/library-tests/frameworks/action_controller/app/views/photos/show.html.erb b/ruby/ql/test/library-tests/frameworks/action_controller/app/views/photos/show.html.erb new file mode 100644 index 00000000000..e69de29bb2d diff --git a/ruby/ql/test/library-tests/frameworks/action_controller/app/views/posts/index.html.erb b/ruby/ql/test/library-tests/frameworks/action_controller/app/views/posts/index.html.erb new file mode 100644 index 00000000000..e69de29bb2d diff --git a/ruby/ql/test/library-tests/frameworks/action_controller/app/views/posts/show.html.erb b/ruby/ql/test/library-tests/frameworks/action_controller/app/views/posts/show.html.erb new file mode 100644 index 00000000000..e69de29bb2d diff --git a/ruby/ql/test/library-tests/frameworks/action_controller/app/views/posts/upvote.html.erb b/ruby/ql/test/library-tests/frameworks/action_controller/app/views/posts/upvote.html.erb new file mode 100644 index 00000000000..e69de29bb2d From 3a90d78c361a833498c50936aa5e3a50793ff038 Mon Sep 17 00:00:00 2001 From: Harry Maclean Date: Thu, 8 Feb 2024 11:17:11 +0000 Subject: [PATCH 108/378] Ruby: Fix Rails view file regex This picks up non-nested template files correctly. --- .../ruby/frameworks/ActionController.qll | 3 ++- .../ActionController.expected | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/ruby/ql/lib/codeql/ruby/frameworks/ActionController.qll b/ruby/ql/lib/codeql/ruby/frameworks/ActionController.qll index 7ac82dae1b3..be1df5066e1 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/ActionController.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/ActionController.qll @@ -374,7 +374,8 @@ predicate controllerTemplateFile(ActionControllerClass cls, ErbFile templateFile controllerPath = getActionControllerClassRelativePath(cls) and // `sourcePrefix` is either a prefix path ending in a slash, or empty if // the rails app is at the source root - sourcePrefix = [controllerPath.regexpCapture("^(.*/)app/controllers/(?:.*?)/(?:[^/]*)$", 1), ""] and + sourcePrefix = + [controllerPath.regexpCapture("^(.*/)app/controllers/(?:[^/]+/)?(?:[^/]*)$", 1), ""] and controllerPath = sourcePrefix + "app/controllers/" + subPath + "_controller.rb" | sourcePrefix + "app/views/" + subPath = templateFile.getParentContainer().getRelativePath() diff --git a/ruby/ql/test/library-tests/frameworks/action_controller/ActionController.expected b/ruby/ql/test/library-tests/frameworks/action_controller/ActionController.expected index f488eb70145..6f2810e13d7 100644 --- a/ruby/ql/test/library-tests/frameworks/action_controller/ActionController.expected +++ b/ruby/ql/test/library-tests/frameworks/action_controller/ActionController.expected @@ -348,7 +348,25 @@ httpResponses | app/controllers/foo/bars_controller.rb:44:5:44:17 | call to render | app/controllers/foo/bars_controller.rb:44:12:44:17 | "show" | actionControllerHelperMethods getAssociatedControllerClasses +| app/controllers/comments_controller.rb:1:1:104:3 | CommentsController | app/views/comments/create.html.erb:0:0:0:0 | app/views/comments/create.html.erb | +| app/controllers/comments_controller.rb:1:1:104:3 | CommentsController | app/views/comments/destroy.html.erb:0:0:0:0 | app/views/comments/destroy.html.erb | +| app/controllers/comments_controller.rb:1:1:104:3 | CommentsController | app/views/comments/index.html.erb:0:0:0:0 | app/views/comments/index.html.erb | +| app/controllers/comments_controller.rb:1:1:104:3 | CommentsController | app/views/comments/show.html.erb:0:0:0:0 | app/views/comments/show.html.erb | +| app/controllers/photos_controller.rb:1:1:10:3 | PhotosController | app/views/photos/foo.html.erb:0:0:0:0 | app/views/photos/foo.html.erb | +| app/controllers/photos_controller.rb:1:1:10:3 | PhotosController | app/views/photos/show.html.erb:0:0:0:0 | app/views/photos/show.html.erb | +| app/controllers/posts_controller.rb:1:1:32:3 | PostsController | app/views/posts/index.html.erb:0:0:0:0 | app/views/posts/index.html.erb | +| app/controllers/posts_controller.rb:1:1:32:3 | PostsController | app/views/posts/show.html.erb:0:0:0:0 | app/views/posts/show.html.erb | +| app/controllers/posts_controller.rb:1:1:32:3 | PostsController | app/views/posts/upvote.html.erb:0:0:0:0 | app/views/posts/upvote.html.erb | controllerTemplateFiles +| app/controllers/comments_controller.rb:1:1:104:3 | CommentsController | app/views/comments/create.html.erb:0:0:0:0 | app/views/comments/create.html.erb | +| app/controllers/comments_controller.rb:1:1:104:3 | CommentsController | app/views/comments/destroy.html.erb:0:0:0:0 | app/views/comments/destroy.html.erb | +| app/controllers/comments_controller.rb:1:1:104:3 | CommentsController | app/views/comments/index.html.erb:0:0:0:0 | app/views/comments/index.html.erb | +| app/controllers/comments_controller.rb:1:1:104:3 | CommentsController | app/views/comments/show.html.erb:0:0:0:0 | app/views/comments/show.html.erb | +| app/controllers/photos_controller.rb:1:1:10:3 | PhotosController | app/views/photos/foo.html.erb:0:0:0:0 | app/views/photos/foo.html.erb | +| app/controllers/photos_controller.rb:1:1:10:3 | PhotosController | app/views/photos/show.html.erb:0:0:0:0 | app/views/photos/show.html.erb | +| app/controllers/posts_controller.rb:1:1:32:3 | PostsController | app/views/posts/index.html.erb:0:0:0:0 | app/views/posts/index.html.erb | +| app/controllers/posts_controller.rb:1:1:32:3 | PostsController | app/views/posts/show.html.erb:0:0:0:0 | app/views/posts/show.html.erb | +| app/controllers/posts_controller.rb:1:1:32:3 | PostsController | app/views/posts/upvote.html.erb:0:0:0:0 | app/views/posts/upvote.html.erb | headerWriteAccesses | app/controllers/comments_controller.rb:30:5:30:35 | call to []= | content-type | app/controllers/comments_controller.rb:30:39:30:49 | ... = ... | | app/controllers/comments_controller.rb:31:5:31:46 | call to set_header | content-length | app/controllers/comments_controller.rb:31:43:31:45 | 100 | From f4b6a85a48193fb3eb211c609dfd1f96d57f3e2b Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Fri, 9 Feb 2024 10:09:24 +0000 Subject: [PATCH 109/378] Fix typo in qldoc --- .../CWE/CWE-287/AndroidInsecureLocalAuthentication.qhelp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/ql/src/Security/CWE/CWE-287/AndroidInsecureLocalAuthentication.qhelp b/java/ql/src/Security/CWE/CWE-287/AndroidInsecureLocalAuthentication.qhelp index 15e6783d2dc..b54a2add853 100644 --- a/java/ql/src/Security/CWE/CWE-287/AndroidInsecureLocalAuthentication.qhelp +++ b/java/ql/src/Security/CWE/CWE-287/AndroidInsecureLocalAuthentication.qhelp @@ -5,7 +5,7 @@

    -Biometric local authentication such as fingerprint recognistion can be used to protect sensitive data or actions within an application. +Biometric local authentication such as fingerprint recognition can be used to protect sensitive data or actions within an application. However, if this authentication does not make use of a KeyStore-backed key, it is able to be bypassed by a privileged malicious application or an attacker with physical access.

    From b7d4a6926f41cfe3df391f59ef2f514a2f643efd Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Thu, 8 Feb 2024 11:10:46 +0100 Subject: [PATCH 110/378] Dataflow: Add empty provenance column to PathGraph. --- .../cpp/ir/dataflow/internal/ProductFlow.qll | 16 ++++++++-------- .../code/csharp/security/dataflow/XSSQuery.qll | 10 +++++++--- .../backdoor/PotentialTimeBomb.ql | 12 ++++++++---- .../test/library-tests/cil/dataflow/DataFlow.ql | 4 ++-- .../CWE-200/TempDirLocalInformationDisclosure.ql | 6 +++++- shared/dataflow/codeql/dataflow/DataFlow.qll | 12 +++++++----- .../codeql/dataflow/internal/DataFlowImpl.qll | 6 +++++- 7 files changed, 42 insertions(+), 24 deletions(-) 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 bc511d6f340..e64f2285821 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 @@ -507,13 +507,13 @@ module ProductFlow { private predicate pathSuccPlus(TNodePair n1, TNodePair n2) = fastTC(pathSucc/2)(n1, n2) private predicate localPathStep1(Flow1::PathNode pred, Flow1::PathNode succ) { - Flow1::PathGraph::edges(pred, succ) and + Flow1::PathGraph::edges(pred, succ, _, _) and pragma[only_bind_out](pred.getNode().getEnclosingCallable()) = pragma[only_bind_out](succ.getNode().getEnclosingCallable()) } private predicate localPathStep2(Flow2::PathNode pred, Flow2::PathNode succ) { - Flow2::PathGraph::edges(pred, succ) and + Flow2::PathGraph::edges(pred, succ, _, _) and pragma[only_bind_out](pred.getNode().getEnclosingCallable()) = pragma[only_bind_out](succ.getNode().getEnclosingCallable()) } @@ -530,7 +530,7 @@ module ProductFlow { TJump() private predicate intoImpl1(Flow1::PathNode pred1, Flow1::PathNode succ1, DataFlowCall call) { - Flow1::PathGraph::edges(pred1, succ1) and + Flow1::PathGraph::edges(pred1, succ1, _, _) and pred1.getNode().(ArgumentNode).getCall() = call and succ1.getNode() instanceof ParameterNode } @@ -543,7 +543,7 @@ module ProductFlow { } private predicate outImpl1(Flow1::PathNode pred1, Flow1::PathNode succ1, DataFlowCall call) { - Flow1::PathGraph::edges(pred1, succ1) and + Flow1::PathGraph::edges(pred1, succ1, _, _) and exists(ReturnKindExt returnKind | succ1.getNode() = returnKind.getAnOutNode(call) and pred1.getNode().(ReturnNodeExt).getKind() = returnKind @@ -558,7 +558,7 @@ module ProductFlow { } private predicate intoImpl2(Flow2::PathNode pred2, Flow2::PathNode succ2, DataFlowCall call) { - Flow2::PathGraph::edges(pred2, succ2) and + Flow2::PathGraph::edges(pred2, succ2, _, _) and pred2.getNode().(ArgumentNode).getCall() = call and succ2.getNode() instanceof ParameterNode } @@ -571,7 +571,7 @@ module ProductFlow { } private predicate outImpl2(Flow2::PathNode pred2, Flow2::PathNode succ2, DataFlowCall call) { - Flow2::PathGraph::edges(pred2, succ2) and + Flow2::PathGraph::edges(pred2, succ2, _, _) and exists(ReturnKindExt returnKind | succ2.getNode() = returnKind.getAnOutNode(call) and pred2.getNode().(ReturnNodeExt).getKind() = returnKind @@ -590,7 +590,7 @@ module ProductFlow { Declaration predDecl, Declaration succDecl, Flow1::PathNode pred1, Flow1::PathNode succ1, TKind kind ) { - Flow1::PathGraph::edges(pred1, succ1) and + Flow1::PathGraph::edges(pred1, succ1, _, _) and predDecl != succDecl and pred1.getNode().getEnclosingCallable() = predDecl and succ1.getNode().getEnclosingCallable() = succDecl and @@ -610,7 +610,7 @@ module ProductFlow { Declaration predDecl, Declaration succDecl, Flow2::PathNode pred2, Flow2::PathNode succ2, TKind kind ) { - Flow2::PathGraph::edges(pred2, succ2) and + Flow2::PathGraph::edges(pred2, succ2, _, _) and predDecl != succDecl and pred2.getNode().getEnclosingCallable() = predDecl and succ2.getNode().getEnclosingCallable() = succDecl and diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/XSSQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/XSSQuery.qll index 5ad2b6bc675..1dea41c8a7c 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/XSSQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/XSSQuery.qll @@ -42,14 +42,18 @@ predicate xssFlow(XssNode source, XssNode sink, string message) { */ module PathGraph { /** Holds if `(pred,succ)` is an edge in the graph of data flow path explanations. */ - query predicate edges(XssNode pred, XssNode succ) { - exists(XssTracking::PathNode a, XssTracking::PathNode b | XssTracking::PathGraph::edges(a, b) | + query predicate edges(XssNode pred, XssNode succ, string key, string val) { + exists(XssTracking::PathNode a, XssTracking::PathNode b | + XssTracking::PathGraph::edges(a, b, key, val) + | pred.asDataFlowNode() = a and succ.asDataFlowNode() = b ) or xssFlow(pred, succ, _) and - pred instanceof XssAspNode + pred instanceof XssAspNode and + key = "provenance" and + val = "" } /** Holds if `n` is a node in the graph of data flow path explanations. */ diff --git a/csharp/ql/src/experimental/Security Features/backdoor/PotentialTimeBomb.ql b/csharp/ql/src/experimental/Security Features/backdoor/PotentialTimeBomb.ql index 1713607607c..47b69d3e975 100644 --- a/csharp/ql/src/experimental/Security Features/backdoor/PotentialTimeBomb.ql +++ b/csharp/ql/src/experimental/Security Features/backdoor/PotentialTimeBomb.ql @@ -13,14 +13,18 @@ import csharp import Flow::PathGraph -query predicate edges(Flow::PathNode a, Flow::PathNode b) { - Flow::PathGraph::edges(a, b) +query predicate edges(Flow::PathNode a, Flow::PathNode b, string key, string val) { + Flow::PathGraph::edges(a, b, key, val) or FlowsFromGetLastWriteTimeConfigToTimeSpanArithmeticCallableConfig::isSink(a.getNode()) and - FlowsFromTimeSpanArithmeticToTimeComparisonCallableConfig::isSource(b.getNode()) + FlowsFromTimeSpanArithmeticToTimeComparisonCallableConfig::isSource(b.getNode()) and + key = "provenance" and + val = "" or FlowsFromTimeSpanArithmeticToTimeComparisonCallableConfig::isSink(a.getNode()) and - FlowsFromTimeComparisonCallableToSelectionStatementConditionConfig::isSource(b.getNode()) + FlowsFromTimeComparisonCallableToSelectionStatementConditionConfig::isSource(b.getNode()) and + key = "provenance" and + val = "" } /** diff --git a/csharp/ql/test/library-tests/cil/dataflow/DataFlow.ql b/csharp/ql/test/library-tests/cil/dataflow/DataFlow.ql index 55d53d0600e..609717b8340 100644 --- a/csharp/ql/test/library-tests/cil/dataflow/DataFlow.ql +++ b/csharp/ql/test/library-tests/cil/dataflow/DataFlow.ql @@ -13,8 +13,8 @@ private predicate relevantPathNode(Flow::PathNode n) { ) } -query predicate edges(Flow::PathNode a, Flow::PathNode b) { - Flow::PathGraph::edges(a, b) and +query predicate edges(Flow::PathNode a, Flow::PathNode b, string key, string val) { + Flow::PathGraph::edges(a, b, key, val) and relevantPathNode(a) and relevantPathNode(b) } diff --git a/java/ql/src/Security/CWE/CWE-200/TempDirLocalInformationDisclosure.ql b/java/ql/src/Security/CWE/CWE-200/TempDirLocalInformationDisclosure.ql index 6efb7e9104c..6e0aa9e9cd9 100644 --- a/java/ql/src/Security/CWE/CWE-200/TempDirLocalInformationDisclosure.ql +++ b/java/ql/src/Security/CWE/CWE-200/TempDirLocalInformationDisclosure.ql @@ -25,7 +25,11 @@ import semmle.code.java.security.TempDirLocalInformationDisclosureQuery * resulting in a zero-length paths. */ module InsecureMethodPathGraph implements DataFlow::PathGraphSig { - predicate edges(MethodCallInsecureFileCreation n1, MethodCallInsecureFileCreation n2) { none() } + predicate edges( + MethodCallInsecureFileCreation n1, MethodCallInsecureFileCreation n2, string key, string value + ) { + none() + } predicate nodes(MethodCallInsecureFileCreation n, string key, string val) { key = "semmle.label" and val = n.toString() diff --git a/shared/dataflow/codeql/dataflow/DataFlow.qll b/shared/dataflow/codeql/dataflow/DataFlow.qll index 856b68d249c..1c9c900530f 100644 --- a/shared/dataflow/codeql/dataflow/DataFlow.qll +++ b/shared/dataflow/codeql/dataflow/DataFlow.qll @@ -584,7 +584,7 @@ module DataFlowMake { signature module PathGraphSig { /** Holds if `(a,b)` is an edge in the graph of data flow path explanations. */ - predicate edges(PathNode a, PathNode b); + predicate edges(PathNode a, PathNode b, string key, string val); /** Holds if `n` is a node in the graph of data flow path explanations. */ predicate nodes(PathNode n, string key, string val); @@ -648,9 +648,9 @@ module DataFlowMake { */ module PathGraph implements PathGraphSig { /** Holds if `(a,b)` is an edge in the graph of data flow path explanations. */ - query predicate edges(PathNode a, PathNode b) { - Graph1::edges(a.asPathNode1(), b.asPathNode1()) or - Graph2::edges(a.asPathNode2(), b.asPathNode2()) + query predicate edges(PathNode a, PathNode b, string key, string val) { + Graph1::edges(a.asPathNode1(), b.asPathNode1(), key, val) or + Graph2::edges(a.asPathNode2(), b.asPathNode2(), key, val) } /** Holds if `n` is a node in the graph of data flow path explanations. */ @@ -719,7 +719,9 @@ module DataFlowMake { */ module PathGraph implements PathGraphSig { /** Holds if `(a,b)` is an edge in the graph of data flow path explanations. */ - query predicate edges(PathNode a, PathNode b) { Merged::PathGraph::edges(a, b) } + query predicate edges(PathNode a, PathNode b, string key, string val) { + Merged::PathGraph::edges(a, b, key, val) + } /** Holds if `n` is a node in the graph of data flow path explanations. */ query predicate nodes(PathNode n, string key, string val) { diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll index eb45fe5fd2e..ecaa75bdfff 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll @@ -3724,7 +3724,11 @@ module MakeImpl { */ module PathGraph implements PathGraphSig { /** Holds if `(a,b)` is an edge in the graph of data flow path explanations. */ - query predicate edges(PathNode a, PathNode b) { a.getASuccessor() = b } + query predicate edges(PathNode a, PathNode b, string key, string val) { + a.getASuccessor() = b and + key = "provenance" and + val = "" + } /** Holds if `n` is a node in the graph of data flow path explanations. */ query predicate nodes(PathNode n, string key, string val) { From dd3d70134cbd069c9fa9daa7474d55d359daa487 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Fri, 9 Feb 2024 10:28:24 +0000 Subject: [PATCH 111/378] C++: Undo a change that wasn't actually necessary. --- .../lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll index e49d519061f..7d4bb6f5866 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll @@ -942,7 +942,7 @@ private Type getTypeImpl0(Type t, int indirectionIndex) { or indirectionIndex > 0 and exists(Type stripped | - stripped = stripPointer(t) and + stripped = stripPointer(t.stripTopLevelSpecifiers()) and // We need to avoid the case where `stripPointer(t) = t` (which can happen // on iterators that specify a `value_type` that is the iterator itself). // Such a type would create an infinite loop otherwise. For these cases we From e9e445b2ba7669111e7d13a0893829ce58be13ae Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Fri, 2 Feb 2024 11:22:29 +0100 Subject: [PATCH 112/378] Java: Add empty provenance column to expected files. --- .../CWE-020/Log4jInjectionTest.expected | 4198 ++++++++--------- .../CWE-073/FilePathInjection.expected | 18 +- .../CommandInjectionRuntimeExecLocal.expected | 32 +- .../security/CWE-078/ExecTainted.expected | 4 +- .../MyBatisAnnotationSqlInjection.expected | 34 +- .../MyBatisMapperXmlSqlInjection.expected | 48 +- .../CWE-094/BeanShellInjection.expected | 12 +- .../security/CWE-094/JShellInjection.expected | 20 +- .../JakartaExpressionInjection.expected | 60 +- .../security/CWE-094/JythonInjection.expected | 10 +- .../security/CWE-094/ScriptInjection.expected | 44 +- .../SensitiveCookieNotHttpOnly.expected | 38 +- .../InsecureWebResourceResponse.expected | 226 +- .../CWE-200/SensitiveAndroidFileLeak.expected | 38 +- .../Test.expected | 6 +- .../Test.expected | 22 +- .../DisabledRevocationChecking.expected | 12 +- .../CWE-327/UnsafeTlsVersion.expected | 110 +- .../security/CWE-346/UnvalidatedCors.expected | 2 +- ...ientSuppliedIpUsedInSecurityCheck.expected | 14 +- .../security/CWE-352/JsonpInjection.expected | 14 +- .../CWE-400/LocalThreadResourceAbuse.expected | 16 +- .../CWE-400/ThreadResourceAbuse.expected | 64 +- .../LoadClassNoSignatureCheck.expected | 6 +- .../CWE-470/UnsafeReflection.expected | 70 +- .../CWE-502/UnsafeDeserializationRmi.expected | 2 +- .../CWE-552/UnsafeUrlForward.expected | 80 +- .../CWE-598/SensitiveGetQuery.expected | 30 +- .../CWE-600/UncaughtServletException.expected | 8 +- .../CWE-601/SpringUrlRedirect.expected | 72 +- .../CWE-625/PermissiveDotRegex.expected | 36 +- .../security/CWE-652/XQueryInjection.expected | 54 +- .../security/CWE-755/NFEAndroidDoS.expected | 18 +- .../security/CWE-759/HashWithoutSalt.expected | 12 +- .../dataflow/call-sensitivity/flow.expected | 66 +- .../threat-models-flowtest1.expected | 20 +- .../threat-models-flowtest2.expected | 24 +- .../threat-models-flowtest3.expected | 44 +- .../threat-models-flowtest4.expected | 48 +- .../threat-models-flowtest5.expected | 40 +- .../threat-models-flowtest6.expected | 40 +- .../frameworks/JaxWs/UrlRedirect.expected | 8 +- .../CWE-022/semmle/tests/ZipSlip.expected | 10 +- .../CWE-078/ExecTaintedLocal.expected | 38 +- .../semmle/examples/SqlTaintedLocal.expected | 42 +- .../security/CWE-090/LdapInjection.expected | 278 +- .../CWE-094/InsecureBeanValidation.expected | 2 +- .../semmle/tests/ResponseSplitting.expected | 8 +- ...nOfArrayConstructionCodeSpecified.expected | 2 +- ...alidationOfArrayConstructionLocal.expected | 8 +- ...lidationOfArrayIndexCodeSpecified.expected | 16 +- ...properValidationOfArrayIndexLocal.expected | 6 +- .../ExternallyControlledFormatString.expected | 6 +- ...rnallyControlledFormatStringLocal.expected | 10 +- .../tests/ArithmeticTaintedLocal.expected | 82 +- .../tests/ArithmeticUncontrolled.expected | 8 +- .../ArithmeticWithExtremeValues.expected | 14 +- ...TempDirLocalInformationDisclosure.expected | 110 +- .../UnsafeHostnameVerification.expected | 8 +- .../CWE-311/CWE-319/HttpsUrls.expected | 24 +- .../tests/BrokenCryptoAlgorithm.expected | 2 +- .../CWE-601/semmle/tests/UrlRedirect.expected | 14 +- .../tests/NumericCastTaintedLocal.expected | 14 +- .../tests/TaintedPermissionsCheck.expected | 2 +- 64 files changed, 3212 insertions(+), 3212 deletions(-) diff --git a/java/ql/test/experimental/query-tests/security/CWE-020/Log4jInjectionTest.expected b/java/ql/test/experimental/query-tests/security/CWE-020/Log4jInjectionTest.expected index 93b2b060685..c88d2e2284c 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-020/Log4jInjectionTest.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-020/Log4jInjectionTest.expected @@ -1,2103 +1,2103 @@ edges -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:31:41:31:48 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:32:41:32:48 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:33:56:33:63 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:34:56:34:63 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:35:51:35:58 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:36:59:36:66 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:37:59:37:66 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:38:41:38:48 | source(...) | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:39:50:39:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:40:50:40:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:41:70:41:77 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:42:65:42:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:43:50:43:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:44:80:44:87 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:45:65:45:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:46:50:46:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:47:95:47:102 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:48:80:48:87 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:49:65:49:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:50:50:50:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:51:110:51:117 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:52:95:52:102 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:53:80:53:87 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:54:65:54:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:55:50:55:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:56:125:56:132 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:57:110:57:117 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:58:95:58:102 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:59:80:59:87 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:60:65:60:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:61:50:61:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:62:140:62:147 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:63:125:63:132 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:64:110:64:117 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:65:95:65:102 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:66:80:66:87 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:67:65:67:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:68:50:68:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:69:155:69:162 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:70:140:70:147 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:71:125:71:132 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:72:110:72:117 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:73:95:73:102 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:74:80:74:87 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:75:65:75:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:76:50:76:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:77:170:77:177 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:78:155:78:162 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:79:140:79:147 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:80:125:80:132 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:81:110:81:117 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:82:95:82:102 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:83:80:83:87 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:84:65:84:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:85:50:85:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:86:185:86:192 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:87:170:87:177 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:88:155:88:162 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:89:140:89:147 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:90:125:90:132 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:91:110:91:117 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:92:95:92:102 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:93:80:93:87 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:94:65:94:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:95:50:95:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:96:50:96:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:97:70:97:77 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:98:50:98:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:99:55:99:62 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:100:55:100:62 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:101:44:101:51 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:102:44:102:51 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:103:36:103:43 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:104:36:104:43 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:105:26:105:33 | source(...) | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:106:26:106:33 | source(...) | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:107:35:107:42 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:108:35:108:42 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:109:55:109:62 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:110:50:110:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:111:35:111:42 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:112:65:112:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:113:50:113:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:114:35:114:42 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:115:80:115:87 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:116:65:116:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:117:50:117:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:118:35:118:42 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:119:95:119:102 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:120:80:120:87 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:121:65:121:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:122:50:122:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:123:35:123:42 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:124:110:124:117 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:125:95:125:102 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:126:80:126:87 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:127:65:127:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:128:50:128:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:129:35:129:42 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:130:125:130:132 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:131:110:131:117 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:132:95:132:102 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:133:80:133:87 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:134:65:134:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:135:50:135:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:136:35:136:42 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:137:140:137:147 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:138:125:138:132 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:139:110:139:117 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:140:95:140:102 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:141:80:141:87 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:142:65:142:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:143:50:143:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:144:35:144:42 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:145:155:145:162 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:146:140:146:147 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:147:125:147:132 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:148:110:148:117 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:149:95:149:102 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:150:80:150:87 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:151:65:151:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:152:50:152:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:153:35:153:42 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:154:170:154:177 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:155:155:155:162 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:156:140:156:147 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:157:125:157:132 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:158:110:158:117 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:159:95:159:102 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:160:80:160:87 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:161:65:161:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:162:50:162:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:163:35:163:42 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:164:35:164:42 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:165:55:165:62 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:166:35:166:42 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:167:40:167:47 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:168:40:168:47 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:169:41:169:48 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:170:41:170:48 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:171:56:171:63 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:172:56:172:63 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:173:51:173:58 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:174:59:174:66 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:175:59:175:66 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:176:41:176:48 | source(...) | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:177:50:177:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:178:50:178:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:179:70:179:77 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:180:65:180:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:181:50:181:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:182:80:182:87 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:183:65:183:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:184:50:184:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:185:95:185:102 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:186:80:186:87 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:187:65:187:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:188:50:188:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:189:110:189:117 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:190:95:190:102 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:191:80:191:87 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:192:65:192:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:193:50:193:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:194:125:194:132 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:195:110:195:117 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:196:95:196:102 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:197:80:197:87 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:198:65:198:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:199:50:199:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:200:140:200:147 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:201:125:201:132 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:202:110:202:117 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:203:95:203:102 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:204:80:204:87 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:205:65:205:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:206:50:206:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:207:155:207:162 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:208:140:208:147 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:209:125:209:132 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:210:110:210:117 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:211:95:211:102 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:212:80:212:87 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:213:65:213:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:214:50:214:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:215:170:215:177 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:216:155:216:162 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:217:140:217:147 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:218:125:218:132 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:219:110:219:117 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:220:95:220:102 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:221:80:221:87 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:222:65:222:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:223:50:223:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:224:185:224:192 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:225:170:225:177 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:226:155:226:162 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:227:140:227:147 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:228:125:228:132 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:229:110:229:117 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:230:95:230:102 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:231:80:231:87 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:232:65:232:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:233:50:233:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:234:50:234:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:235:70:235:77 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:236:50:236:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:237:55:237:62 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:238:55:238:62 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:239:44:239:51 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:240:44:240:51 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:241:36:241:43 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:242:36:242:43 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:243:26:243:33 | source(...) | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:244:26:244:33 | source(...) | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:245:35:245:42 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:246:35:246:42 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:247:55:247:62 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:248:50:248:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:249:35:249:42 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:250:65:250:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:251:50:251:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:252:35:252:42 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:253:80:253:87 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:254:65:254:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:255:50:255:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:256:35:256:42 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:257:95:257:102 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:258:80:258:87 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:259:65:259:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:260:50:260:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:261:35:261:42 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:262:110:262:117 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:263:95:263:102 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:264:80:264:87 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:265:65:265:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:266:50:266:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:267:35:267:42 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:268:125:268:132 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:269:110:269:117 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:270:95:270:102 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:271:80:271:87 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:272:65:272:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:273:50:273:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:274:35:274:42 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:275:140:275:147 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:276:125:276:132 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:277:110:277:117 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:278:95:278:102 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:279:80:279:87 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:280:65:280:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:281:50:281:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:282:35:282:42 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:283:155:283:162 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:284:140:284:147 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:285:125:285:132 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:286:110:286:117 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:287:95:287:102 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:288:80:288:87 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:289:65:289:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:290:50:290:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:291:35:291:42 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:292:170:292:177 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:293:155:293:162 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:294:140:294:147 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:295:125:295:132 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:296:110:296:117 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:297:95:297:102 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:298:80:298:87 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:299:65:299:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:300:50:300:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:301:35:301:42 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:302:35:302:42 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:303:55:303:62 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:304:35:304:42 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:305:40:305:47 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:306:40:306:47 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:307:41:307:48 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:308:41:308:48 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:309:56:309:63 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:310:56:310:63 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:311:51:311:58 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:312:59:312:66 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:313:59:313:66 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:314:41:314:48 | source(...) | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:315:50:315:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:316:50:316:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:317:70:317:77 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:318:65:318:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:319:50:319:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:320:80:320:87 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:321:65:321:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:322:50:322:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:323:95:323:102 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:324:80:324:87 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:325:65:325:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:326:50:326:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:327:110:327:117 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:328:95:328:102 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:329:80:329:87 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:330:65:330:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:331:50:331:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:332:125:332:132 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:333:110:333:117 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:334:95:334:102 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:335:80:335:87 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:336:65:336:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:337:50:337:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:338:140:338:147 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:339:125:339:132 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:340:110:340:117 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:341:95:341:102 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:342:80:342:87 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:343:65:343:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:344:50:344:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:345:155:345:162 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:346:140:346:147 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:347:125:347:132 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:348:110:348:117 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:349:95:349:102 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:350:80:350:87 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:351:65:351:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:352:50:352:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:353:170:353:177 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:354:155:354:162 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:355:140:355:147 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:356:125:356:132 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:357:110:357:117 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:358:95:358:102 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:359:80:359:87 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:360:65:360:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:361:50:361:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:362:185:362:192 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:363:170:363:177 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:364:155:364:162 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:365:140:365:147 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:366:125:366:132 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:367:110:367:117 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:368:95:368:102 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:369:80:369:87 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:370:65:370:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:371:50:371:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:372:50:372:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:373:70:373:77 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:374:50:374:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:375:55:375:62 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:376:55:376:62 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:377:44:377:51 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:378:44:378:51 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:379:36:379:43 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:380:36:380:43 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:381:26:381:33 | source(...) | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:382:26:382:33 | source(...) | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:383:35:383:42 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:384:35:384:42 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:385:55:385:62 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:386:50:386:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:387:35:387:42 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:388:65:388:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:389:50:389:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:390:35:390:42 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:391:80:391:87 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:392:65:392:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:393:50:393:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:394:35:394:42 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:395:95:395:102 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:396:80:396:87 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:397:65:397:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:398:50:398:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:399:35:399:42 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:400:110:400:117 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:401:95:401:102 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:402:80:402:87 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:403:65:403:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:404:50:404:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:405:35:405:42 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:406:125:406:132 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:407:110:407:117 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:408:95:408:102 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:409:80:409:87 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:410:65:410:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:411:50:411:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:412:35:412:42 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:413:140:413:147 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:414:125:414:132 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:415:110:415:117 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:416:95:416:102 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:417:80:417:87 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:418:65:418:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:419:50:419:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:420:35:420:42 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:421:155:421:162 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:422:140:422:147 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:423:125:423:132 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:424:110:424:117 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:425:95:425:102 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:426:80:426:87 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:427:65:427:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:428:50:428:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:429:35:429:42 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:430:170:430:177 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:431:155:431:162 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:432:140:432:147 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:433:125:433:132 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:434:110:434:117 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:435:95:435:102 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:436:80:436:87 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:437:65:437:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:438:50:438:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:439:35:439:42 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:440:35:440:42 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:441:55:441:62 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:442:35:442:42 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:443:40:443:47 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:444:40:444:47 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:445:40:445:47 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:446:40:446:47 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:447:55:447:62 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:448:55:448:62 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:449:50:449:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:450:58:450:65 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:451:58:451:65 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:452:40:452:47 | source(...) | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:453:49:453:56 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:454:49:454:56 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:455:69:455:76 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:456:64:456:71 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:457:49:457:56 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:458:79:458:86 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:459:64:459:71 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:460:49:460:56 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:461:94:461:101 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:462:79:462:86 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:463:64:463:71 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:464:49:464:56 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:465:109:465:116 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:466:94:466:101 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:467:79:467:86 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:468:64:468:71 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:469:49:469:56 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:470:124:470:131 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:471:109:471:116 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:472:94:472:101 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:473:79:473:86 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:474:64:474:71 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:475:49:475:56 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:476:139:476:146 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:477:124:477:131 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:478:109:478:116 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:479:94:479:101 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:480:79:480:86 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:481:64:481:71 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:482:49:482:56 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:483:154:483:161 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:484:139:484:146 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:485:124:485:131 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:486:109:486:116 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:487:94:487:101 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:488:79:488:86 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:489:64:489:71 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:490:49:490:56 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:491:169:491:176 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:492:154:492:161 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:493:139:493:146 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:494:124:494:131 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:495:109:495:116 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:496:94:496:101 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:497:79:497:86 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:498:64:498:71 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:499:49:499:56 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:500:184:500:191 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:501:169:501:176 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:502:154:502:161 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:503:139:503:146 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:504:124:504:131 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:505:109:505:116 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:506:94:506:101 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:507:79:507:86 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:508:64:508:71 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:509:49:509:56 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:510:49:510:56 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:511:69:511:76 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:512:49:512:56 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:513:54:513:61 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:514:54:514:61 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:515:43:515:50 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:516:43:516:50 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:517:35:517:42 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:518:35:518:42 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:519:25:519:32 | source(...) | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:520:25:520:32 | source(...) | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:521:34:521:41 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:522:34:522:41 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:523:54:523:61 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:524:49:524:56 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:525:34:525:41 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:526:64:526:71 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:527:49:527:56 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:528:34:528:41 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:529:79:529:86 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:530:64:530:71 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:531:49:531:56 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:532:34:532:41 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:533:94:533:101 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:534:79:534:86 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:535:64:535:71 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:536:49:536:56 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:537:34:537:41 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:538:109:538:116 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:539:94:539:101 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:540:79:540:86 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:541:64:541:71 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:542:49:542:56 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:543:34:543:41 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:544:124:544:131 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:545:109:545:116 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:546:94:546:101 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:547:79:547:86 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:548:64:548:71 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:549:49:549:56 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:550:34:550:41 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:551:139:551:146 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:552:124:552:131 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:553:109:553:116 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:554:94:554:101 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:555:79:555:86 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:556:64:556:71 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:557:49:557:56 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:558:34:558:41 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:559:154:559:161 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:560:139:560:146 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:561:124:561:131 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:562:109:562:116 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:563:94:563:101 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:564:79:564:86 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:565:64:565:71 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:566:49:566:56 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:567:34:567:41 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:568:169:568:176 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:569:154:569:161 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:570:139:570:146 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:571:124:571:131 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:572:109:572:116 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:573:94:573:101 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:574:79:574:86 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:575:64:575:71 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:576:49:576:56 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:577:34:577:41 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:578:34:578:41 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:579:54:579:61 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:580:34:580:41 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:581:39:581:46 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:582:39:582:46 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:583:53:583:60 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:584:53:584:60 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:585:68:585:75 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:586:68:586:75 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:587:63:587:70 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:588:71:588:78 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:589:71:589:78 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:590:53:590:60 | source(...) | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:591:62:591:69 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:592:62:592:69 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:593:82:593:89 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:594:77:594:84 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:595:62:595:69 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:596:92:596:99 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:597:77:597:84 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:598:62:598:69 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:599:107:599:114 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:600:92:600:99 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:601:77:601:84 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:602:62:602:69 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:603:122:603:129 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:604:107:604:114 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:605:92:605:99 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:606:77:606:84 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:607:62:607:69 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:608:137:608:144 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:609:122:609:129 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:610:107:610:114 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:611:92:611:99 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:612:77:612:84 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:613:62:613:69 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:614:152:614:159 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:615:137:615:144 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:616:122:616:129 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:617:107:617:114 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:618:92:618:99 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:619:77:619:84 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:620:62:620:69 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:621:167:621:174 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:622:152:622:159 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:623:137:623:144 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:624:122:624:129 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:625:107:625:114 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:626:92:626:99 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:627:77:627:84 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:628:62:628:69 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:629:182:629:189 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:630:167:630:174 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:631:152:631:159 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:632:137:632:144 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:633:122:633:129 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:634:107:634:114 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:635:92:635:99 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:636:77:636:84 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:637:62:637:69 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:638:197:638:204 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:639:182:639:189 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:640:167:640:174 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:641:152:641:159 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:642:137:642:144 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:643:122:643:129 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:644:107:644:114 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:645:92:645:99 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:646:77:646:84 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:647:62:647:69 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:648:62:648:69 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:649:82:649:89 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:650:62:650:69 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:651:67:651:74 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:652:67:652:74 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:653:56:653:63 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:654:56:654:63 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:655:48:655:55 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:656:48:656:55 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:657:38:657:45 | source(...) | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:658:38:658:45 | source(...) | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:659:47:659:54 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:660:47:660:54 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:661:67:661:74 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:662:62:662:69 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:663:47:663:54 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:664:77:664:84 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:665:62:665:69 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:666:47:666:54 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:667:92:667:99 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:668:77:668:84 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:669:62:669:69 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:670:47:670:54 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:671:107:671:114 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:672:92:672:99 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:673:77:673:84 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:674:62:674:69 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:675:47:675:54 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:676:122:676:129 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:677:107:677:114 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:678:92:678:99 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:679:77:679:84 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:680:62:680:69 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:681:47:681:54 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:682:137:682:144 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:683:122:683:129 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:684:107:684:114 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:685:92:685:99 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:686:77:686:84 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:687:62:687:69 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:688:47:688:54 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:689:152:689:159 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:690:137:690:144 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:691:122:691:129 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:692:107:692:114 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:693:92:693:99 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:694:77:694:84 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:695:62:695:69 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:696:47:696:54 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:697:167:697:174 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:698:152:698:159 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:699:137:699:144 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:700:122:700:129 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:701:107:701:114 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:702:92:702:99 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:703:77:703:84 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:704:62:704:69 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:705:47:705:54 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:706:182:706:189 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:707:167:707:174 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:708:152:708:159 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:709:137:709:144 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:710:122:710:129 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:711:107:711:114 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:712:92:712:99 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:713:77:713:84 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:714:62:714:69 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:715:47:715:54 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:716:47:716:54 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:717:67:717:74 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:718:47:718:54 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:719:52:719:59 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:720:52:720:59 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:721:41:721:48 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:722:41:722:48 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:723:56:723:63 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:724:56:724:63 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:725:51:725:58 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:726:59:726:66 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:727:59:727:66 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:728:41:728:48 | source(...) | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:729:50:729:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:730:50:730:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:731:70:731:77 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:732:65:732:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:733:50:733:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:734:80:734:87 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:735:65:735:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:736:50:736:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:737:95:737:102 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:738:80:738:87 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:739:65:739:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:740:50:740:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:741:110:741:117 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:742:95:742:102 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:743:80:743:87 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:744:65:744:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:745:50:745:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:746:125:746:132 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:747:110:747:117 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:748:95:748:102 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:749:80:749:87 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:750:65:750:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:751:50:751:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:752:140:752:147 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:753:125:753:132 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:754:110:754:117 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:755:95:755:102 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:756:80:756:87 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:757:65:757:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:758:50:758:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:759:155:759:162 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:760:140:760:147 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:761:125:761:132 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:762:110:762:117 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:763:95:763:102 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:764:80:764:87 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:765:65:765:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:766:50:766:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:767:170:767:177 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:768:155:768:162 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:769:140:769:147 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:770:125:770:132 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:771:110:771:117 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:772:95:772:102 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:773:80:773:87 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:774:65:774:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:775:50:775:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:776:185:776:192 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:777:170:777:177 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:778:155:778:162 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:779:140:779:147 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:780:125:780:132 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:781:110:781:117 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:782:95:782:102 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:783:80:783:87 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:784:65:784:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:785:50:785:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:786:50:786:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:787:70:787:77 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:788:50:788:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:789:55:789:62 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:790:55:790:62 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:791:44:791:51 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:792:44:792:51 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:793:36:793:43 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:794:36:794:43 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:795:26:795:33 | source(...) | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:796:26:796:33 | source(...) | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:797:35:797:42 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:798:35:798:42 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:799:55:799:62 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:800:50:800:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:801:35:801:42 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:802:65:802:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:803:50:803:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:804:35:804:42 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:805:80:805:87 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:806:65:806:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:807:50:807:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:808:35:808:42 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:809:95:809:102 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:810:80:810:87 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:811:65:811:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:812:50:812:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:813:35:813:42 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:814:110:814:117 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:815:95:815:102 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:816:80:816:87 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:817:65:817:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:818:50:818:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:819:35:819:42 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:820:125:820:132 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:821:110:821:117 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:822:95:822:102 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:823:80:823:87 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:824:65:824:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:825:50:825:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:826:35:826:42 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:827:140:827:147 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:828:125:828:132 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:829:110:829:117 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:830:95:830:102 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:831:80:831:87 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:832:65:832:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:833:50:833:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:834:35:834:42 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:835:155:835:162 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:836:140:836:147 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:837:125:837:132 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:838:110:838:117 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:839:95:839:102 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:840:80:840:87 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:841:65:841:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:842:50:842:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:843:35:843:42 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:844:170:844:177 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:845:155:845:162 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:846:140:846:147 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:847:125:847:132 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:848:110:848:117 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:849:95:849:102 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:850:80:850:87 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:851:65:851:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:852:50:852:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:853:35:853:42 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:854:35:854:42 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:855:55:855:62 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:856:35:856:42 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:857:40:857:47 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:858:40:858:47 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:859:40:859:47 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:860:40:860:47 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:861:55:861:62 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:862:55:862:62 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:863:50:863:57 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:864:58:864:65 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:865:58:865:65 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:866:40:866:47 | source(...) | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:867:49:867:56 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:868:49:868:56 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:869:69:869:76 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:870:64:870:71 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:871:49:871:56 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:872:79:872:86 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:873:64:873:71 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:874:49:874:56 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:875:94:875:101 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:876:79:876:86 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:877:64:877:71 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:878:49:878:56 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:879:109:879:116 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:880:94:880:101 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:881:79:881:86 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:882:64:882:71 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:883:49:883:56 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:884:124:884:131 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:885:109:885:116 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:886:94:886:101 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:887:79:887:86 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:888:64:888:71 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:889:49:889:56 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:890:139:890:146 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:891:124:891:131 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:892:109:892:116 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:893:94:893:101 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:894:79:894:86 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:895:64:895:71 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:896:49:896:56 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:897:154:897:161 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:898:139:898:146 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:899:124:899:131 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:900:109:900:116 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:901:94:901:101 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:902:79:902:86 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:903:64:903:71 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:904:49:904:56 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:905:169:905:176 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:906:154:906:161 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:907:139:907:146 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:908:124:908:131 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:909:109:909:116 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:910:94:910:101 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:911:79:911:86 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:912:64:912:71 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:913:49:913:56 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:914:184:914:191 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:915:169:915:176 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:916:154:916:161 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:917:139:917:146 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:918:124:918:131 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:919:109:919:116 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:920:94:920:101 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:921:79:921:86 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:922:64:922:71 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:923:49:923:56 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:924:49:924:56 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:925:69:925:76 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:926:49:926:56 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:927:54:927:61 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:928:54:928:61 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:929:43:929:50 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:930:43:930:50 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:931:35:931:42 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:932:35:932:42 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:933:25:933:32 | source(...) | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:934:25:934:32 | source(...) | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:935:34:935:41 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:936:34:936:41 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:937:54:937:61 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:938:49:938:56 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:939:34:939:41 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:940:64:940:71 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:941:49:941:56 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:942:34:942:41 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:943:79:943:86 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:944:64:944:71 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:945:49:945:56 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:946:34:946:41 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:947:94:947:101 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:948:79:948:86 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:949:64:949:71 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:950:49:950:56 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:951:34:951:41 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:952:109:952:116 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:953:94:953:101 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:954:79:954:86 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:955:64:955:71 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:956:49:956:56 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:957:34:957:41 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:958:124:958:131 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:959:109:959:116 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:960:94:960:101 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:961:79:961:86 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:962:64:962:71 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:963:49:963:56 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:964:34:964:41 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:965:139:965:146 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:966:124:966:131 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:967:109:967:116 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:968:94:968:101 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:969:79:969:86 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:970:64:970:71 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:971:49:971:56 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:972:34:972:41 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:973:154:973:161 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:974:139:974:146 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:975:124:975:131 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:976:109:976:116 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:977:94:977:101 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:978:79:978:86 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:979:64:979:71 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:980:49:980:56 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:981:34:981:41 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:982:169:982:176 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:983:154:983:161 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:984:139:984:146 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:985:124:985:131 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:986:109:986:116 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:987:94:987:101 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:988:79:988:86 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:989:64:989:71 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:990:49:990:56 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:991:34:991:41 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:992:34:992:41 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:993:54:993:61 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:994:34:994:41 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:995:39:995:46 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:996:39:996:46 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:998:65:998:72 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:999:48:999:55 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1000:59:1000:66 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1001:42:1001:49 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1002:53:1002:60 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1020:40:1020:47 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1021:35:1021:42 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1022:25:1022:32 | source(...) | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1023:34:1023:41 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1024:34:1024:41 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1025:54:1025:61 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1026:40:1026:47 | source(...) | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1028:49:1028:56 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1029:34:1029:41 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1030:64:1030:71 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1031:49:1031:56 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1032:34:1032:41 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1033:79:1033:86 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1034:64:1034:71 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1035:49:1035:56 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1036:34:1036:41 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1037:94:1037:101 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1038:79:1038:86 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1039:64:1039:71 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1040:49:1040:56 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1041:34:1041:41 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1042:109:1042:116 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1043:94:1043:101 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1044:79:1044:86 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1045:64:1045:71 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1046:49:1046:56 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1047:34:1047:41 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1048:124:1048:131 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1049:109:1049:116 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1050:94:1050:101 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1051:79:1051:86 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1052:64:1052:71 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1053:49:1053:56 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1054:34:1054:41 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1055:139:1055:146 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1056:124:1056:131 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1057:109:1057:116 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1058:94:1058:101 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1059:79:1059:86 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1060:64:1060:71 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1061:49:1061:56 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1062:34:1062:41 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1063:154:1063:161 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1064:139:1064:146 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1065:124:1065:131 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1066:109:1066:116 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1067:94:1067:101 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1068:79:1068:86 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1069:64:1069:71 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1070:49:1070:56 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1071:34:1071:41 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1072:169:1072:176 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1073:154:1073:161 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1074:139:1074:146 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1075:124:1075:131 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1076:109:1076:116 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1077:94:1077:101 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1078:79:1078:86 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1079:64:1079:71 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1080:49:1080:56 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1081:34:1081:41 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1083:34:1083:41 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1084:54:1084:61 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1085:39:1085:46 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1088:47:1088:54 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1089:53:1089:60 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1091:37:1091:44 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1095:80:1095:87 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1100:44:1100:51 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1105:43:1105:50 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1111:42:1111:49 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1116:61:1116:68 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1117:81:1117:88 | source(...) : String | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1119:42:1119:49 | source(...) : String | -| Log4jJndiInjectionTest.java:31:41:31:48 | source(...) : String | Log4jJndiInjectionTest.java:31:26:31:48 | (...)... | -| Log4jJndiInjectionTest.java:32:41:32:48 | source(...) : String | Log4jJndiInjectionTest.java:32:26:32:48 | (...)... | -| Log4jJndiInjectionTest.java:33:56:33:63 | source(...) : String | Log4jJndiInjectionTest.java:33:41:33:63 | (...)... | -| Log4jJndiInjectionTest.java:34:56:34:63 | source(...) : String | Log4jJndiInjectionTest.java:34:41:34:63 | (...)... | -| Log4jJndiInjectionTest.java:35:51:35:58 | source(...) : String | Log4jJndiInjectionTest.java:35:41:35:58 | (...)... | -| Log4jJndiInjectionTest.java:36:59:36:66 | source(...) : String | Log4jJndiInjectionTest.java:36:41:36:66 | (...)... | -| Log4jJndiInjectionTest.java:37:59:37:66 | source(...) : String | Log4jJndiInjectionTest.java:37:41:37:66 | (...)... | -| Log4jJndiInjectionTest.java:39:50:39:57 | source(...) : String | Log4jJndiInjectionTest.java:39:41:39:57 | (...)... | -| Log4jJndiInjectionTest.java:40:50:40:57 | source(...) : String | Log4jJndiInjectionTest.java:40:41:40:57 | (...)... | -| Log4jJndiInjectionTest.java:41:56:41:78 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:41:56:41:78 | new Object[] | -| Log4jJndiInjectionTest.java:41:70:41:77 | source(...) : String | Log4jJndiInjectionTest.java:41:56:41:78 | {...} : Object[] [[]] : String | -| Log4jJndiInjectionTest.java:42:65:42:72 | source(...) : String | Log4jJndiInjectionTest.java:42:56:42:72 | (...)... | -| Log4jJndiInjectionTest.java:43:50:43:57 | source(...) : String | Log4jJndiInjectionTest.java:43:41:43:57 | (...)... | -| Log4jJndiInjectionTest.java:44:80:44:87 | source(...) : String | Log4jJndiInjectionTest.java:44:71:44:87 | (...)... | -| Log4jJndiInjectionTest.java:45:65:45:72 | source(...) : String | Log4jJndiInjectionTest.java:45:56:45:72 | (...)... | -| Log4jJndiInjectionTest.java:46:50:46:57 | source(...) : String | Log4jJndiInjectionTest.java:46:41:46:57 | (...)... | -| Log4jJndiInjectionTest.java:47:95:47:102 | source(...) : String | Log4jJndiInjectionTest.java:47:86:47:102 | (...)... | -| Log4jJndiInjectionTest.java:48:80:48:87 | source(...) : String | Log4jJndiInjectionTest.java:48:71:48:87 | (...)... | -| Log4jJndiInjectionTest.java:49:65:49:72 | source(...) : String | Log4jJndiInjectionTest.java:49:56:49:72 | (...)... | -| Log4jJndiInjectionTest.java:50:50:50:57 | source(...) : String | Log4jJndiInjectionTest.java:50:41:50:57 | (...)... | -| Log4jJndiInjectionTest.java:51:110:51:117 | source(...) : String | Log4jJndiInjectionTest.java:51:101:51:117 | (...)... | -| Log4jJndiInjectionTest.java:52:95:52:102 | source(...) : String | Log4jJndiInjectionTest.java:52:86:52:102 | (...)... | -| Log4jJndiInjectionTest.java:53:80:53:87 | source(...) : String | Log4jJndiInjectionTest.java:53:71:53:87 | (...)... | -| Log4jJndiInjectionTest.java:54:65:54:72 | source(...) : String | Log4jJndiInjectionTest.java:54:56:54:72 | (...)... | -| Log4jJndiInjectionTest.java:55:50:55:57 | source(...) : String | Log4jJndiInjectionTest.java:55:41:55:57 | (...)... | -| Log4jJndiInjectionTest.java:56:125:56:132 | source(...) : String | Log4jJndiInjectionTest.java:56:116:56:132 | (...)... | -| Log4jJndiInjectionTest.java:57:110:57:117 | source(...) : String | Log4jJndiInjectionTest.java:57:101:57:117 | (...)... | -| Log4jJndiInjectionTest.java:58:95:58:102 | source(...) : String | Log4jJndiInjectionTest.java:58:86:58:102 | (...)... | -| Log4jJndiInjectionTest.java:59:80:59:87 | source(...) : String | Log4jJndiInjectionTest.java:59:71:59:87 | (...)... | -| Log4jJndiInjectionTest.java:60:65:60:72 | source(...) : String | Log4jJndiInjectionTest.java:60:56:60:72 | (...)... | -| Log4jJndiInjectionTest.java:61:50:61:57 | source(...) : String | Log4jJndiInjectionTest.java:61:41:61:57 | (...)... | -| Log4jJndiInjectionTest.java:62:140:62:147 | source(...) : String | Log4jJndiInjectionTest.java:62:131:62:147 | (...)... | -| Log4jJndiInjectionTest.java:63:125:63:132 | source(...) : String | Log4jJndiInjectionTest.java:63:116:63:132 | (...)... | -| Log4jJndiInjectionTest.java:64:110:64:117 | source(...) : String | Log4jJndiInjectionTest.java:64:101:64:117 | (...)... | -| Log4jJndiInjectionTest.java:65:95:65:102 | source(...) : String | Log4jJndiInjectionTest.java:65:86:65:102 | (...)... | -| Log4jJndiInjectionTest.java:66:80:66:87 | source(...) : String | Log4jJndiInjectionTest.java:66:71:66:87 | (...)... | -| Log4jJndiInjectionTest.java:67:65:67:72 | source(...) : String | Log4jJndiInjectionTest.java:67:56:67:72 | (...)... | -| Log4jJndiInjectionTest.java:68:50:68:57 | source(...) : String | Log4jJndiInjectionTest.java:68:41:68:57 | (...)... | -| Log4jJndiInjectionTest.java:69:155:69:162 | source(...) : String | Log4jJndiInjectionTest.java:69:146:69:162 | (...)... | -| Log4jJndiInjectionTest.java:70:140:70:147 | source(...) : String | Log4jJndiInjectionTest.java:70:131:70:147 | (...)... | -| Log4jJndiInjectionTest.java:71:125:71:132 | source(...) : String | Log4jJndiInjectionTest.java:71:116:71:132 | (...)... | -| Log4jJndiInjectionTest.java:72:110:72:117 | source(...) : String | Log4jJndiInjectionTest.java:72:101:72:117 | (...)... | -| Log4jJndiInjectionTest.java:73:95:73:102 | source(...) : String | Log4jJndiInjectionTest.java:73:86:73:102 | (...)... | -| Log4jJndiInjectionTest.java:74:80:74:87 | source(...) : String | Log4jJndiInjectionTest.java:74:71:74:87 | (...)... | -| Log4jJndiInjectionTest.java:75:65:75:72 | source(...) : String | Log4jJndiInjectionTest.java:75:56:75:72 | (...)... | -| Log4jJndiInjectionTest.java:76:50:76:57 | source(...) : String | Log4jJndiInjectionTest.java:76:41:76:57 | (...)... | -| Log4jJndiInjectionTest.java:77:170:77:177 | source(...) : String | Log4jJndiInjectionTest.java:77:161:77:177 | (...)... | -| Log4jJndiInjectionTest.java:78:155:78:162 | source(...) : String | Log4jJndiInjectionTest.java:78:146:78:162 | (...)... | -| Log4jJndiInjectionTest.java:79:140:79:147 | source(...) : String | Log4jJndiInjectionTest.java:79:131:79:147 | (...)... | -| Log4jJndiInjectionTest.java:80:125:80:132 | source(...) : String | Log4jJndiInjectionTest.java:80:116:80:132 | (...)... | -| Log4jJndiInjectionTest.java:81:110:81:117 | source(...) : String | Log4jJndiInjectionTest.java:81:101:81:117 | (...)... | -| Log4jJndiInjectionTest.java:82:95:82:102 | source(...) : String | Log4jJndiInjectionTest.java:82:86:82:102 | (...)... | -| Log4jJndiInjectionTest.java:83:80:83:87 | source(...) : String | Log4jJndiInjectionTest.java:83:71:83:87 | (...)... | -| Log4jJndiInjectionTest.java:84:65:84:72 | source(...) : String | Log4jJndiInjectionTest.java:84:56:84:72 | (...)... | -| Log4jJndiInjectionTest.java:85:50:85:57 | source(...) : String | Log4jJndiInjectionTest.java:85:41:85:57 | (...)... | -| Log4jJndiInjectionTest.java:86:185:86:192 | source(...) : String | Log4jJndiInjectionTest.java:86:176:86:192 | (...)... | -| Log4jJndiInjectionTest.java:87:170:87:177 | source(...) : String | Log4jJndiInjectionTest.java:87:161:87:177 | (...)... | -| Log4jJndiInjectionTest.java:88:155:88:162 | source(...) : String | Log4jJndiInjectionTest.java:88:146:88:162 | (...)... | -| Log4jJndiInjectionTest.java:89:140:89:147 | source(...) : String | Log4jJndiInjectionTest.java:89:131:89:147 | (...)... | -| Log4jJndiInjectionTest.java:90:125:90:132 | source(...) : String | Log4jJndiInjectionTest.java:90:116:90:132 | (...)... | -| Log4jJndiInjectionTest.java:91:110:91:117 | source(...) : String | Log4jJndiInjectionTest.java:91:101:91:117 | (...)... | -| Log4jJndiInjectionTest.java:92:95:92:102 | source(...) : String | Log4jJndiInjectionTest.java:92:86:92:102 | (...)... | -| Log4jJndiInjectionTest.java:93:80:93:87 | source(...) : String | Log4jJndiInjectionTest.java:93:71:93:87 | (...)... | -| Log4jJndiInjectionTest.java:94:65:94:72 | source(...) : String | Log4jJndiInjectionTest.java:94:56:94:72 | (...)... | -| Log4jJndiInjectionTest.java:95:50:95:57 | source(...) : String | Log4jJndiInjectionTest.java:95:41:95:57 | (...)... | -| Log4jJndiInjectionTest.java:96:50:96:57 | source(...) : String | Log4jJndiInjectionTest.java:96:41:96:57 | (...)... | -| Log4jJndiInjectionTest.java:97:70:97:77 | source(...) : String | Log4jJndiInjectionTest.java:97:56:97:77 | (...)... | -| Log4jJndiInjectionTest.java:98:50:98:57 | source(...) : String | Log4jJndiInjectionTest.java:98:41:98:57 | (...)... | -| Log4jJndiInjectionTest.java:99:55:99:62 | source(...) : String | Log4jJndiInjectionTest.java:99:41:99:62 | (...)... | -| Log4jJndiInjectionTest.java:100:55:100:62 | source(...) : String | Log4jJndiInjectionTest.java:100:41:100:62 | (...)... | -| Log4jJndiInjectionTest.java:101:44:101:51 | source(...) : String | Log4jJndiInjectionTest.java:101:26:101:51 | (...)... | -| Log4jJndiInjectionTest.java:102:44:102:51 | source(...) : String | Log4jJndiInjectionTest.java:102:26:102:51 | (...)... | -| Log4jJndiInjectionTest.java:103:36:103:43 | source(...) : String | Log4jJndiInjectionTest.java:103:26:103:43 | (...)... | -| Log4jJndiInjectionTest.java:104:36:104:43 | source(...) : String | Log4jJndiInjectionTest.java:104:26:104:43 | (...)... | -| Log4jJndiInjectionTest.java:107:35:107:42 | source(...) : String | Log4jJndiInjectionTest.java:107:26:107:42 | (...)... | -| Log4jJndiInjectionTest.java:108:35:108:42 | source(...) : String | Log4jJndiInjectionTest.java:108:26:108:42 | (...)... | -| Log4jJndiInjectionTest.java:109:41:109:63 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:109:41:109:63 | new Object[] | -| Log4jJndiInjectionTest.java:109:55:109:62 | source(...) : String | Log4jJndiInjectionTest.java:109:41:109:63 | {...} : Object[] [[]] : String | -| Log4jJndiInjectionTest.java:110:50:110:57 | source(...) : String | Log4jJndiInjectionTest.java:110:41:110:57 | (...)... | -| Log4jJndiInjectionTest.java:111:35:111:42 | source(...) : String | Log4jJndiInjectionTest.java:111:26:111:42 | (...)... | -| Log4jJndiInjectionTest.java:112:65:112:72 | source(...) : String | Log4jJndiInjectionTest.java:112:56:112:72 | (...)... | -| Log4jJndiInjectionTest.java:113:50:113:57 | source(...) : String | Log4jJndiInjectionTest.java:113:41:113:57 | (...)... | -| Log4jJndiInjectionTest.java:114:35:114:42 | source(...) : String | Log4jJndiInjectionTest.java:114:26:114:42 | (...)... | -| Log4jJndiInjectionTest.java:115:80:115:87 | source(...) : String | Log4jJndiInjectionTest.java:115:71:115:87 | (...)... | -| Log4jJndiInjectionTest.java:116:65:116:72 | source(...) : String | Log4jJndiInjectionTest.java:116:56:116:72 | (...)... | -| Log4jJndiInjectionTest.java:117:50:117:57 | source(...) : String | Log4jJndiInjectionTest.java:117:41:117:57 | (...)... | -| Log4jJndiInjectionTest.java:118:35:118:42 | source(...) : String | Log4jJndiInjectionTest.java:118:26:118:42 | (...)... | -| Log4jJndiInjectionTest.java:119:95:119:102 | source(...) : String | Log4jJndiInjectionTest.java:119:86:119:102 | (...)... | -| Log4jJndiInjectionTest.java:120:80:120:87 | source(...) : String | Log4jJndiInjectionTest.java:120:71:120:87 | (...)... | -| Log4jJndiInjectionTest.java:121:65:121:72 | source(...) : String | Log4jJndiInjectionTest.java:121:56:121:72 | (...)... | -| Log4jJndiInjectionTest.java:122:50:122:57 | source(...) : String | Log4jJndiInjectionTest.java:122:41:122:57 | (...)... | -| Log4jJndiInjectionTest.java:123:35:123:42 | source(...) : String | Log4jJndiInjectionTest.java:123:26:123:42 | (...)... | -| Log4jJndiInjectionTest.java:124:110:124:117 | source(...) : String | Log4jJndiInjectionTest.java:124:101:124:117 | (...)... | -| Log4jJndiInjectionTest.java:125:95:125:102 | source(...) : String | Log4jJndiInjectionTest.java:125:86:125:102 | (...)... | -| Log4jJndiInjectionTest.java:126:80:126:87 | source(...) : String | Log4jJndiInjectionTest.java:126:71:126:87 | (...)... | -| Log4jJndiInjectionTest.java:127:65:127:72 | source(...) : String | Log4jJndiInjectionTest.java:127:56:127:72 | (...)... | -| Log4jJndiInjectionTest.java:128:50:128:57 | source(...) : String | Log4jJndiInjectionTest.java:128:41:128:57 | (...)... | -| Log4jJndiInjectionTest.java:129:35:129:42 | source(...) : String | Log4jJndiInjectionTest.java:129:26:129:42 | (...)... | -| Log4jJndiInjectionTest.java:130:125:130:132 | source(...) : String | Log4jJndiInjectionTest.java:130:116:130:132 | (...)... | -| Log4jJndiInjectionTest.java:131:110:131:117 | source(...) : String | Log4jJndiInjectionTest.java:131:101:131:117 | (...)... | -| Log4jJndiInjectionTest.java:132:95:132:102 | source(...) : String | Log4jJndiInjectionTest.java:132:86:132:102 | (...)... | -| Log4jJndiInjectionTest.java:133:80:133:87 | source(...) : String | Log4jJndiInjectionTest.java:133:71:133:87 | (...)... | -| Log4jJndiInjectionTest.java:134:65:134:72 | source(...) : String | Log4jJndiInjectionTest.java:134:56:134:72 | (...)... | -| Log4jJndiInjectionTest.java:135:50:135:57 | source(...) : String | Log4jJndiInjectionTest.java:135:41:135:57 | (...)... | -| Log4jJndiInjectionTest.java:136:35:136:42 | source(...) : String | Log4jJndiInjectionTest.java:136:26:136:42 | (...)... | -| Log4jJndiInjectionTest.java:137:140:137:147 | source(...) : String | Log4jJndiInjectionTest.java:137:131:137:147 | (...)... | -| Log4jJndiInjectionTest.java:138:125:138:132 | source(...) : String | Log4jJndiInjectionTest.java:138:116:138:132 | (...)... | -| Log4jJndiInjectionTest.java:139:110:139:117 | source(...) : String | Log4jJndiInjectionTest.java:139:101:139:117 | (...)... | -| Log4jJndiInjectionTest.java:140:95:140:102 | source(...) : String | Log4jJndiInjectionTest.java:140:86:140:102 | (...)... | -| Log4jJndiInjectionTest.java:141:80:141:87 | source(...) : String | Log4jJndiInjectionTest.java:141:71:141:87 | (...)... | -| Log4jJndiInjectionTest.java:142:65:142:72 | source(...) : String | Log4jJndiInjectionTest.java:142:56:142:72 | (...)... | -| Log4jJndiInjectionTest.java:143:50:143:57 | source(...) : String | Log4jJndiInjectionTest.java:143:41:143:57 | (...)... | -| Log4jJndiInjectionTest.java:144:35:144:42 | source(...) : String | Log4jJndiInjectionTest.java:144:26:144:42 | (...)... | -| Log4jJndiInjectionTest.java:145:155:145:162 | source(...) : String | Log4jJndiInjectionTest.java:145:146:145:162 | (...)... | -| Log4jJndiInjectionTest.java:146:140:146:147 | source(...) : String | Log4jJndiInjectionTest.java:146:131:146:147 | (...)... | -| Log4jJndiInjectionTest.java:147:125:147:132 | source(...) : String | Log4jJndiInjectionTest.java:147:116:147:132 | (...)... | -| Log4jJndiInjectionTest.java:148:110:148:117 | source(...) : String | Log4jJndiInjectionTest.java:148:101:148:117 | (...)... | -| Log4jJndiInjectionTest.java:149:95:149:102 | source(...) : String | Log4jJndiInjectionTest.java:149:86:149:102 | (...)... | -| Log4jJndiInjectionTest.java:150:80:150:87 | source(...) : String | Log4jJndiInjectionTest.java:150:71:150:87 | (...)... | -| Log4jJndiInjectionTest.java:151:65:151:72 | source(...) : String | Log4jJndiInjectionTest.java:151:56:151:72 | (...)... | -| Log4jJndiInjectionTest.java:152:50:152:57 | source(...) : String | Log4jJndiInjectionTest.java:152:41:152:57 | (...)... | -| Log4jJndiInjectionTest.java:153:35:153:42 | source(...) : String | Log4jJndiInjectionTest.java:153:26:153:42 | (...)... | -| Log4jJndiInjectionTest.java:154:170:154:177 | source(...) : String | Log4jJndiInjectionTest.java:154:161:154:177 | (...)... | -| Log4jJndiInjectionTest.java:155:155:155:162 | source(...) : String | Log4jJndiInjectionTest.java:155:146:155:162 | (...)... | -| Log4jJndiInjectionTest.java:156:140:156:147 | source(...) : String | Log4jJndiInjectionTest.java:156:131:156:147 | (...)... | -| Log4jJndiInjectionTest.java:157:125:157:132 | source(...) : String | Log4jJndiInjectionTest.java:157:116:157:132 | (...)... | -| Log4jJndiInjectionTest.java:158:110:158:117 | source(...) : String | Log4jJndiInjectionTest.java:158:101:158:117 | (...)... | -| Log4jJndiInjectionTest.java:159:95:159:102 | source(...) : String | Log4jJndiInjectionTest.java:159:86:159:102 | (...)... | -| Log4jJndiInjectionTest.java:160:80:160:87 | source(...) : String | Log4jJndiInjectionTest.java:160:71:160:87 | (...)... | -| Log4jJndiInjectionTest.java:161:65:161:72 | source(...) : String | Log4jJndiInjectionTest.java:161:56:161:72 | (...)... | -| Log4jJndiInjectionTest.java:162:50:162:57 | source(...) : String | Log4jJndiInjectionTest.java:162:41:162:57 | (...)... | -| Log4jJndiInjectionTest.java:163:35:163:42 | source(...) : String | Log4jJndiInjectionTest.java:163:26:163:42 | (...)... | -| Log4jJndiInjectionTest.java:164:35:164:42 | source(...) : String | Log4jJndiInjectionTest.java:164:26:164:42 | (...)... | -| Log4jJndiInjectionTest.java:165:55:165:62 | source(...) : String | Log4jJndiInjectionTest.java:165:41:165:62 | (...)... | -| Log4jJndiInjectionTest.java:166:35:166:42 | source(...) : String | Log4jJndiInjectionTest.java:166:26:166:42 | (...)... | -| Log4jJndiInjectionTest.java:167:40:167:47 | source(...) : String | Log4jJndiInjectionTest.java:167:26:167:47 | (...)... | -| Log4jJndiInjectionTest.java:168:40:168:47 | source(...) : String | Log4jJndiInjectionTest.java:168:26:168:47 | (...)... | -| Log4jJndiInjectionTest.java:169:41:169:48 | source(...) : String | Log4jJndiInjectionTest.java:169:26:169:48 | (...)... | -| Log4jJndiInjectionTest.java:170:41:170:48 | source(...) : String | Log4jJndiInjectionTest.java:170:26:170:48 | (...)... | -| Log4jJndiInjectionTest.java:171:56:171:63 | source(...) : String | Log4jJndiInjectionTest.java:171:41:171:63 | (...)... | -| Log4jJndiInjectionTest.java:172:56:172:63 | source(...) : String | Log4jJndiInjectionTest.java:172:41:172:63 | (...)... | -| Log4jJndiInjectionTest.java:173:51:173:58 | source(...) : String | Log4jJndiInjectionTest.java:173:41:173:58 | (...)... | -| Log4jJndiInjectionTest.java:174:59:174:66 | source(...) : String | Log4jJndiInjectionTest.java:174:41:174:66 | (...)... | -| Log4jJndiInjectionTest.java:175:59:175:66 | source(...) : String | Log4jJndiInjectionTest.java:175:41:175:66 | (...)... | -| Log4jJndiInjectionTest.java:177:50:177:57 | source(...) : String | Log4jJndiInjectionTest.java:177:41:177:57 | (...)... | -| Log4jJndiInjectionTest.java:178:50:178:57 | source(...) : String | Log4jJndiInjectionTest.java:178:41:178:57 | (...)... | -| Log4jJndiInjectionTest.java:179:56:179:78 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:179:56:179:78 | new Object[] | -| Log4jJndiInjectionTest.java:179:70:179:77 | source(...) : String | Log4jJndiInjectionTest.java:179:56:179:78 | {...} : Object[] [[]] : String | -| Log4jJndiInjectionTest.java:180:65:180:72 | source(...) : String | Log4jJndiInjectionTest.java:180:56:180:72 | (...)... | -| Log4jJndiInjectionTest.java:181:50:181:57 | source(...) : String | Log4jJndiInjectionTest.java:181:41:181:57 | (...)... | -| Log4jJndiInjectionTest.java:182:80:182:87 | source(...) : String | Log4jJndiInjectionTest.java:182:71:182:87 | (...)... | -| Log4jJndiInjectionTest.java:183:65:183:72 | source(...) : String | Log4jJndiInjectionTest.java:183:56:183:72 | (...)... | -| Log4jJndiInjectionTest.java:184:50:184:57 | source(...) : String | Log4jJndiInjectionTest.java:184:41:184:57 | (...)... | -| Log4jJndiInjectionTest.java:185:95:185:102 | source(...) : String | Log4jJndiInjectionTest.java:185:86:185:102 | (...)... | -| Log4jJndiInjectionTest.java:186:80:186:87 | source(...) : String | Log4jJndiInjectionTest.java:186:71:186:87 | (...)... | -| Log4jJndiInjectionTest.java:187:65:187:72 | source(...) : String | Log4jJndiInjectionTest.java:187:56:187:72 | (...)... | -| Log4jJndiInjectionTest.java:188:50:188:57 | source(...) : String | Log4jJndiInjectionTest.java:188:41:188:57 | (...)... | -| Log4jJndiInjectionTest.java:189:110:189:117 | source(...) : String | Log4jJndiInjectionTest.java:189:101:189:117 | (...)... | -| Log4jJndiInjectionTest.java:190:95:190:102 | source(...) : String | Log4jJndiInjectionTest.java:190:86:190:102 | (...)... | -| Log4jJndiInjectionTest.java:191:80:191:87 | source(...) : String | Log4jJndiInjectionTest.java:191:71:191:87 | (...)... | -| Log4jJndiInjectionTest.java:192:65:192:72 | source(...) : String | Log4jJndiInjectionTest.java:192:56:192:72 | (...)... | -| Log4jJndiInjectionTest.java:193:50:193:57 | source(...) : String | Log4jJndiInjectionTest.java:193:41:193:57 | (...)... | -| Log4jJndiInjectionTest.java:194:125:194:132 | source(...) : String | Log4jJndiInjectionTest.java:194:116:194:132 | (...)... | -| Log4jJndiInjectionTest.java:195:110:195:117 | source(...) : String | Log4jJndiInjectionTest.java:195:101:195:117 | (...)... | -| Log4jJndiInjectionTest.java:196:95:196:102 | source(...) : String | Log4jJndiInjectionTest.java:196:86:196:102 | (...)... | -| Log4jJndiInjectionTest.java:197:80:197:87 | source(...) : String | Log4jJndiInjectionTest.java:197:71:197:87 | (...)... | -| Log4jJndiInjectionTest.java:198:65:198:72 | source(...) : String | Log4jJndiInjectionTest.java:198:56:198:72 | (...)... | -| Log4jJndiInjectionTest.java:199:50:199:57 | source(...) : String | Log4jJndiInjectionTest.java:199:41:199:57 | (...)... | -| Log4jJndiInjectionTest.java:200:140:200:147 | source(...) : String | Log4jJndiInjectionTest.java:200:131:200:147 | (...)... | -| Log4jJndiInjectionTest.java:201:125:201:132 | source(...) : String | Log4jJndiInjectionTest.java:201:116:201:132 | (...)... | -| Log4jJndiInjectionTest.java:202:110:202:117 | source(...) : String | Log4jJndiInjectionTest.java:202:101:202:117 | (...)... | -| Log4jJndiInjectionTest.java:203:95:203:102 | source(...) : String | Log4jJndiInjectionTest.java:203:86:203:102 | (...)... | -| Log4jJndiInjectionTest.java:204:80:204:87 | source(...) : String | Log4jJndiInjectionTest.java:204:71:204:87 | (...)... | -| Log4jJndiInjectionTest.java:205:65:205:72 | source(...) : String | Log4jJndiInjectionTest.java:205:56:205:72 | (...)... | -| Log4jJndiInjectionTest.java:206:50:206:57 | source(...) : String | Log4jJndiInjectionTest.java:206:41:206:57 | (...)... | -| Log4jJndiInjectionTest.java:207:155:207:162 | source(...) : String | Log4jJndiInjectionTest.java:207:146:207:162 | (...)... | -| Log4jJndiInjectionTest.java:208:140:208:147 | source(...) : String | Log4jJndiInjectionTest.java:208:131:208:147 | (...)... | -| Log4jJndiInjectionTest.java:209:125:209:132 | source(...) : String | Log4jJndiInjectionTest.java:209:116:209:132 | (...)... | -| Log4jJndiInjectionTest.java:210:110:210:117 | source(...) : String | Log4jJndiInjectionTest.java:210:101:210:117 | (...)... | -| Log4jJndiInjectionTest.java:211:95:211:102 | source(...) : String | Log4jJndiInjectionTest.java:211:86:211:102 | (...)... | -| Log4jJndiInjectionTest.java:212:80:212:87 | source(...) : String | Log4jJndiInjectionTest.java:212:71:212:87 | (...)... | -| Log4jJndiInjectionTest.java:213:65:213:72 | source(...) : String | Log4jJndiInjectionTest.java:213:56:213:72 | (...)... | -| Log4jJndiInjectionTest.java:214:50:214:57 | source(...) : String | Log4jJndiInjectionTest.java:214:41:214:57 | (...)... | -| Log4jJndiInjectionTest.java:215:170:215:177 | source(...) : String | Log4jJndiInjectionTest.java:215:161:215:177 | (...)... | -| Log4jJndiInjectionTest.java:216:155:216:162 | source(...) : String | Log4jJndiInjectionTest.java:216:146:216:162 | (...)... | -| Log4jJndiInjectionTest.java:217:140:217:147 | source(...) : String | Log4jJndiInjectionTest.java:217:131:217:147 | (...)... | -| Log4jJndiInjectionTest.java:218:125:218:132 | source(...) : String | Log4jJndiInjectionTest.java:218:116:218:132 | (...)... | -| Log4jJndiInjectionTest.java:219:110:219:117 | source(...) : String | Log4jJndiInjectionTest.java:219:101:219:117 | (...)... | -| Log4jJndiInjectionTest.java:220:95:220:102 | source(...) : String | Log4jJndiInjectionTest.java:220:86:220:102 | (...)... | -| Log4jJndiInjectionTest.java:221:80:221:87 | source(...) : String | Log4jJndiInjectionTest.java:221:71:221:87 | (...)... | -| Log4jJndiInjectionTest.java:222:65:222:72 | source(...) : String | Log4jJndiInjectionTest.java:222:56:222:72 | (...)... | -| Log4jJndiInjectionTest.java:223:50:223:57 | source(...) : String | Log4jJndiInjectionTest.java:223:41:223:57 | (...)... | -| Log4jJndiInjectionTest.java:224:185:224:192 | source(...) : String | Log4jJndiInjectionTest.java:224:176:224:192 | (...)... | -| Log4jJndiInjectionTest.java:225:170:225:177 | source(...) : String | Log4jJndiInjectionTest.java:225:161:225:177 | (...)... | -| Log4jJndiInjectionTest.java:226:155:226:162 | source(...) : String | Log4jJndiInjectionTest.java:226:146:226:162 | (...)... | -| Log4jJndiInjectionTest.java:227:140:227:147 | source(...) : String | Log4jJndiInjectionTest.java:227:131:227:147 | (...)... | -| Log4jJndiInjectionTest.java:228:125:228:132 | source(...) : String | Log4jJndiInjectionTest.java:228:116:228:132 | (...)... | -| Log4jJndiInjectionTest.java:229:110:229:117 | source(...) : String | Log4jJndiInjectionTest.java:229:101:229:117 | (...)... | -| Log4jJndiInjectionTest.java:230:95:230:102 | source(...) : String | Log4jJndiInjectionTest.java:230:86:230:102 | (...)... | -| Log4jJndiInjectionTest.java:231:80:231:87 | source(...) : String | Log4jJndiInjectionTest.java:231:71:231:87 | (...)... | -| Log4jJndiInjectionTest.java:232:65:232:72 | source(...) : String | Log4jJndiInjectionTest.java:232:56:232:72 | (...)... | -| Log4jJndiInjectionTest.java:233:50:233:57 | source(...) : String | Log4jJndiInjectionTest.java:233:41:233:57 | (...)... | -| Log4jJndiInjectionTest.java:234:50:234:57 | source(...) : String | Log4jJndiInjectionTest.java:234:41:234:57 | (...)... | -| Log4jJndiInjectionTest.java:235:70:235:77 | source(...) : String | Log4jJndiInjectionTest.java:235:56:235:77 | (...)... | -| Log4jJndiInjectionTest.java:236:50:236:57 | source(...) : String | Log4jJndiInjectionTest.java:236:41:236:57 | (...)... | -| Log4jJndiInjectionTest.java:237:55:237:62 | source(...) : String | Log4jJndiInjectionTest.java:237:41:237:62 | (...)... | -| Log4jJndiInjectionTest.java:238:55:238:62 | source(...) : String | Log4jJndiInjectionTest.java:238:41:238:62 | (...)... | -| Log4jJndiInjectionTest.java:239:44:239:51 | source(...) : String | Log4jJndiInjectionTest.java:239:26:239:51 | (...)... | -| Log4jJndiInjectionTest.java:240:44:240:51 | source(...) : String | Log4jJndiInjectionTest.java:240:26:240:51 | (...)... | -| Log4jJndiInjectionTest.java:241:36:241:43 | source(...) : String | Log4jJndiInjectionTest.java:241:26:241:43 | (...)... | -| Log4jJndiInjectionTest.java:242:36:242:43 | source(...) : String | Log4jJndiInjectionTest.java:242:26:242:43 | (...)... | -| Log4jJndiInjectionTest.java:245:35:245:42 | source(...) : String | Log4jJndiInjectionTest.java:245:26:245:42 | (...)... | -| Log4jJndiInjectionTest.java:246:35:246:42 | source(...) : String | Log4jJndiInjectionTest.java:246:26:246:42 | (...)... | -| Log4jJndiInjectionTest.java:247:41:247:63 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:247:41:247:63 | new Object[] | -| Log4jJndiInjectionTest.java:247:55:247:62 | source(...) : String | Log4jJndiInjectionTest.java:247:41:247:63 | {...} : Object[] [[]] : String | -| Log4jJndiInjectionTest.java:248:50:248:57 | source(...) : String | Log4jJndiInjectionTest.java:248:41:248:57 | (...)... | -| Log4jJndiInjectionTest.java:249:35:249:42 | source(...) : String | Log4jJndiInjectionTest.java:249:26:249:42 | (...)... | -| Log4jJndiInjectionTest.java:250:65:250:72 | source(...) : String | Log4jJndiInjectionTest.java:250:56:250:72 | (...)... | -| Log4jJndiInjectionTest.java:251:50:251:57 | source(...) : String | Log4jJndiInjectionTest.java:251:41:251:57 | (...)... | -| Log4jJndiInjectionTest.java:252:35:252:42 | source(...) : String | Log4jJndiInjectionTest.java:252:26:252:42 | (...)... | -| Log4jJndiInjectionTest.java:253:80:253:87 | source(...) : String | Log4jJndiInjectionTest.java:253:71:253:87 | (...)... | -| Log4jJndiInjectionTest.java:254:65:254:72 | source(...) : String | Log4jJndiInjectionTest.java:254:56:254:72 | (...)... | -| Log4jJndiInjectionTest.java:255:50:255:57 | source(...) : String | Log4jJndiInjectionTest.java:255:41:255:57 | (...)... | -| Log4jJndiInjectionTest.java:256:35:256:42 | source(...) : String | Log4jJndiInjectionTest.java:256:26:256:42 | (...)... | -| Log4jJndiInjectionTest.java:257:95:257:102 | source(...) : String | Log4jJndiInjectionTest.java:257:86:257:102 | (...)... | -| Log4jJndiInjectionTest.java:258:80:258:87 | source(...) : String | Log4jJndiInjectionTest.java:258:71:258:87 | (...)... | -| Log4jJndiInjectionTest.java:259:65:259:72 | source(...) : String | Log4jJndiInjectionTest.java:259:56:259:72 | (...)... | -| Log4jJndiInjectionTest.java:260:50:260:57 | source(...) : String | Log4jJndiInjectionTest.java:260:41:260:57 | (...)... | -| Log4jJndiInjectionTest.java:261:35:261:42 | source(...) : String | Log4jJndiInjectionTest.java:261:26:261:42 | (...)... | -| Log4jJndiInjectionTest.java:262:110:262:117 | source(...) : String | Log4jJndiInjectionTest.java:262:101:262:117 | (...)... | -| Log4jJndiInjectionTest.java:263:95:263:102 | source(...) : String | Log4jJndiInjectionTest.java:263:86:263:102 | (...)... | -| Log4jJndiInjectionTest.java:264:80:264:87 | source(...) : String | Log4jJndiInjectionTest.java:264:71:264:87 | (...)... | -| Log4jJndiInjectionTest.java:265:65:265:72 | source(...) : String | Log4jJndiInjectionTest.java:265:56:265:72 | (...)... | -| Log4jJndiInjectionTest.java:266:50:266:57 | source(...) : String | Log4jJndiInjectionTest.java:266:41:266:57 | (...)... | -| Log4jJndiInjectionTest.java:267:35:267:42 | source(...) : String | Log4jJndiInjectionTest.java:267:26:267:42 | (...)... | -| Log4jJndiInjectionTest.java:268:125:268:132 | source(...) : String | Log4jJndiInjectionTest.java:268:116:268:132 | (...)... | -| Log4jJndiInjectionTest.java:269:110:269:117 | source(...) : String | Log4jJndiInjectionTest.java:269:101:269:117 | (...)... | -| Log4jJndiInjectionTest.java:270:95:270:102 | source(...) : String | Log4jJndiInjectionTest.java:270:86:270:102 | (...)... | -| Log4jJndiInjectionTest.java:271:80:271:87 | source(...) : String | Log4jJndiInjectionTest.java:271:71:271:87 | (...)... | -| Log4jJndiInjectionTest.java:272:65:272:72 | source(...) : String | Log4jJndiInjectionTest.java:272:56:272:72 | (...)... | -| Log4jJndiInjectionTest.java:273:50:273:57 | source(...) : String | Log4jJndiInjectionTest.java:273:41:273:57 | (...)... | -| Log4jJndiInjectionTest.java:274:35:274:42 | source(...) : String | Log4jJndiInjectionTest.java:274:26:274:42 | (...)... | -| Log4jJndiInjectionTest.java:275:140:275:147 | source(...) : String | Log4jJndiInjectionTest.java:275:131:275:147 | (...)... | -| Log4jJndiInjectionTest.java:276:125:276:132 | source(...) : String | Log4jJndiInjectionTest.java:276:116:276:132 | (...)... | -| Log4jJndiInjectionTest.java:277:110:277:117 | source(...) : String | Log4jJndiInjectionTest.java:277:101:277:117 | (...)... | -| Log4jJndiInjectionTest.java:278:95:278:102 | source(...) : String | Log4jJndiInjectionTest.java:278:86:278:102 | (...)... | -| Log4jJndiInjectionTest.java:279:80:279:87 | source(...) : String | Log4jJndiInjectionTest.java:279:71:279:87 | (...)... | -| Log4jJndiInjectionTest.java:280:65:280:72 | source(...) : String | Log4jJndiInjectionTest.java:280:56:280:72 | (...)... | -| Log4jJndiInjectionTest.java:281:50:281:57 | source(...) : String | Log4jJndiInjectionTest.java:281:41:281:57 | (...)... | -| Log4jJndiInjectionTest.java:282:35:282:42 | source(...) : String | Log4jJndiInjectionTest.java:282:26:282:42 | (...)... | -| Log4jJndiInjectionTest.java:283:155:283:162 | source(...) : String | Log4jJndiInjectionTest.java:283:146:283:162 | (...)... | -| Log4jJndiInjectionTest.java:284:140:284:147 | source(...) : String | Log4jJndiInjectionTest.java:284:131:284:147 | (...)... | -| Log4jJndiInjectionTest.java:285:125:285:132 | source(...) : String | Log4jJndiInjectionTest.java:285:116:285:132 | (...)... | -| Log4jJndiInjectionTest.java:286:110:286:117 | source(...) : String | Log4jJndiInjectionTest.java:286:101:286:117 | (...)... | -| Log4jJndiInjectionTest.java:287:95:287:102 | source(...) : String | Log4jJndiInjectionTest.java:287:86:287:102 | (...)... | -| Log4jJndiInjectionTest.java:288:80:288:87 | source(...) : String | Log4jJndiInjectionTest.java:288:71:288:87 | (...)... | -| Log4jJndiInjectionTest.java:289:65:289:72 | source(...) : String | Log4jJndiInjectionTest.java:289:56:289:72 | (...)... | -| Log4jJndiInjectionTest.java:290:50:290:57 | source(...) : String | Log4jJndiInjectionTest.java:290:41:290:57 | (...)... | -| Log4jJndiInjectionTest.java:291:35:291:42 | source(...) : String | Log4jJndiInjectionTest.java:291:26:291:42 | (...)... | -| Log4jJndiInjectionTest.java:292:170:292:177 | source(...) : String | Log4jJndiInjectionTest.java:292:161:292:177 | (...)... | -| Log4jJndiInjectionTest.java:293:155:293:162 | source(...) : String | Log4jJndiInjectionTest.java:293:146:293:162 | (...)... | -| Log4jJndiInjectionTest.java:294:140:294:147 | source(...) : String | Log4jJndiInjectionTest.java:294:131:294:147 | (...)... | -| Log4jJndiInjectionTest.java:295:125:295:132 | source(...) : String | Log4jJndiInjectionTest.java:295:116:295:132 | (...)... | -| Log4jJndiInjectionTest.java:296:110:296:117 | source(...) : String | Log4jJndiInjectionTest.java:296:101:296:117 | (...)... | -| Log4jJndiInjectionTest.java:297:95:297:102 | source(...) : String | Log4jJndiInjectionTest.java:297:86:297:102 | (...)... | -| Log4jJndiInjectionTest.java:298:80:298:87 | source(...) : String | Log4jJndiInjectionTest.java:298:71:298:87 | (...)... | -| Log4jJndiInjectionTest.java:299:65:299:72 | source(...) : String | Log4jJndiInjectionTest.java:299:56:299:72 | (...)... | -| Log4jJndiInjectionTest.java:300:50:300:57 | source(...) : String | Log4jJndiInjectionTest.java:300:41:300:57 | (...)... | -| Log4jJndiInjectionTest.java:301:35:301:42 | source(...) : String | Log4jJndiInjectionTest.java:301:26:301:42 | (...)... | -| Log4jJndiInjectionTest.java:302:35:302:42 | source(...) : String | Log4jJndiInjectionTest.java:302:26:302:42 | (...)... | -| Log4jJndiInjectionTest.java:303:55:303:62 | source(...) : String | Log4jJndiInjectionTest.java:303:41:303:62 | (...)... | -| Log4jJndiInjectionTest.java:304:35:304:42 | source(...) : String | Log4jJndiInjectionTest.java:304:26:304:42 | (...)... | -| Log4jJndiInjectionTest.java:305:40:305:47 | source(...) : String | Log4jJndiInjectionTest.java:305:26:305:47 | (...)... | -| Log4jJndiInjectionTest.java:306:40:306:47 | source(...) : String | Log4jJndiInjectionTest.java:306:26:306:47 | (...)... | -| Log4jJndiInjectionTest.java:307:41:307:48 | source(...) : String | Log4jJndiInjectionTest.java:307:26:307:48 | (...)... | -| Log4jJndiInjectionTest.java:308:41:308:48 | source(...) : String | Log4jJndiInjectionTest.java:308:26:308:48 | (...)... | -| Log4jJndiInjectionTest.java:309:56:309:63 | source(...) : String | Log4jJndiInjectionTest.java:309:41:309:63 | (...)... | -| Log4jJndiInjectionTest.java:310:56:310:63 | source(...) : String | Log4jJndiInjectionTest.java:310:41:310:63 | (...)... | -| Log4jJndiInjectionTest.java:311:51:311:58 | source(...) : String | Log4jJndiInjectionTest.java:311:41:311:58 | (...)... | -| Log4jJndiInjectionTest.java:312:59:312:66 | source(...) : String | Log4jJndiInjectionTest.java:312:41:312:66 | (...)... | -| Log4jJndiInjectionTest.java:313:59:313:66 | source(...) : String | Log4jJndiInjectionTest.java:313:41:313:66 | (...)... | -| Log4jJndiInjectionTest.java:315:50:315:57 | source(...) : String | Log4jJndiInjectionTest.java:315:41:315:57 | (...)... | -| Log4jJndiInjectionTest.java:316:50:316:57 | source(...) : String | Log4jJndiInjectionTest.java:316:41:316:57 | (...)... | -| Log4jJndiInjectionTest.java:317:56:317:78 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:317:56:317:78 | new Object[] | -| Log4jJndiInjectionTest.java:317:70:317:77 | source(...) : String | Log4jJndiInjectionTest.java:317:56:317:78 | {...} : Object[] [[]] : String | -| Log4jJndiInjectionTest.java:318:65:318:72 | source(...) : String | Log4jJndiInjectionTest.java:318:56:318:72 | (...)... | -| Log4jJndiInjectionTest.java:319:50:319:57 | source(...) : String | Log4jJndiInjectionTest.java:319:41:319:57 | (...)... | -| Log4jJndiInjectionTest.java:320:80:320:87 | source(...) : String | Log4jJndiInjectionTest.java:320:71:320:87 | (...)... | -| Log4jJndiInjectionTest.java:321:65:321:72 | source(...) : String | Log4jJndiInjectionTest.java:321:56:321:72 | (...)... | -| Log4jJndiInjectionTest.java:322:50:322:57 | source(...) : String | Log4jJndiInjectionTest.java:322:41:322:57 | (...)... | -| Log4jJndiInjectionTest.java:323:95:323:102 | source(...) : String | Log4jJndiInjectionTest.java:323:86:323:102 | (...)... | -| Log4jJndiInjectionTest.java:324:80:324:87 | source(...) : String | Log4jJndiInjectionTest.java:324:71:324:87 | (...)... | -| Log4jJndiInjectionTest.java:325:65:325:72 | source(...) : String | Log4jJndiInjectionTest.java:325:56:325:72 | (...)... | -| Log4jJndiInjectionTest.java:326:50:326:57 | source(...) : String | Log4jJndiInjectionTest.java:326:41:326:57 | (...)... | -| Log4jJndiInjectionTest.java:327:110:327:117 | source(...) : String | Log4jJndiInjectionTest.java:327:101:327:117 | (...)... | -| Log4jJndiInjectionTest.java:328:95:328:102 | source(...) : String | Log4jJndiInjectionTest.java:328:86:328:102 | (...)... | -| Log4jJndiInjectionTest.java:329:80:329:87 | source(...) : String | Log4jJndiInjectionTest.java:329:71:329:87 | (...)... | -| Log4jJndiInjectionTest.java:330:65:330:72 | source(...) : String | Log4jJndiInjectionTest.java:330:56:330:72 | (...)... | -| Log4jJndiInjectionTest.java:331:50:331:57 | source(...) : String | Log4jJndiInjectionTest.java:331:41:331:57 | (...)... | -| Log4jJndiInjectionTest.java:332:125:332:132 | source(...) : String | Log4jJndiInjectionTest.java:332:116:332:132 | (...)... | -| Log4jJndiInjectionTest.java:333:110:333:117 | source(...) : String | Log4jJndiInjectionTest.java:333:101:333:117 | (...)... | -| Log4jJndiInjectionTest.java:334:95:334:102 | source(...) : String | Log4jJndiInjectionTest.java:334:86:334:102 | (...)... | -| Log4jJndiInjectionTest.java:335:80:335:87 | source(...) : String | Log4jJndiInjectionTest.java:335:71:335:87 | (...)... | -| Log4jJndiInjectionTest.java:336:65:336:72 | source(...) : String | Log4jJndiInjectionTest.java:336:56:336:72 | (...)... | -| Log4jJndiInjectionTest.java:337:50:337:57 | source(...) : String | Log4jJndiInjectionTest.java:337:41:337:57 | (...)... | -| Log4jJndiInjectionTest.java:338:140:338:147 | source(...) : String | Log4jJndiInjectionTest.java:338:131:338:147 | (...)... | -| Log4jJndiInjectionTest.java:339:125:339:132 | source(...) : String | Log4jJndiInjectionTest.java:339:116:339:132 | (...)... | -| Log4jJndiInjectionTest.java:340:110:340:117 | source(...) : String | Log4jJndiInjectionTest.java:340:101:340:117 | (...)... | -| Log4jJndiInjectionTest.java:341:95:341:102 | source(...) : String | Log4jJndiInjectionTest.java:341:86:341:102 | (...)... | -| Log4jJndiInjectionTest.java:342:80:342:87 | source(...) : String | Log4jJndiInjectionTest.java:342:71:342:87 | (...)... | -| Log4jJndiInjectionTest.java:343:65:343:72 | source(...) : String | Log4jJndiInjectionTest.java:343:56:343:72 | (...)... | -| Log4jJndiInjectionTest.java:344:50:344:57 | source(...) : String | Log4jJndiInjectionTest.java:344:41:344:57 | (...)... | -| Log4jJndiInjectionTest.java:345:155:345:162 | source(...) : String | Log4jJndiInjectionTest.java:345:146:345:162 | (...)... | -| Log4jJndiInjectionTest.java:346:140:346:147 | source(...) : String | Log4jJndiInjectionTest.java:346:131:346:147 | (...)... | -| Log4jJndiInjectionTest.java:347:125:347:132 | source(...) : String | Log4jJndiInjectionTest.java:347:116:347:132 | (...)... | -| Log4jJndiInjectionTest.java:348:110:348:117 | source(...) : String | Log4jJndiInjectionTest.java:348:101:348:117 | (...)... | -| Log4jJndiInjectionTest.java:349:95:349:102 | source(...) : String | Log4jJndiInjectionTest.java:349:86:349:102 | (...)... | -| Log4jJndiInjectionTest.java:350:80:350:87 | source(...) : String | Log4jJndiInjectionTest.java:350:71:350:87 | (...)... | -| Log4jJndiInjectionTest.java:351:65:351:72 | source(...) : String | Log4jJndiInjectionTest.java:351:56:351:72 | (...)... | -| Log4jJndiInjectionTest.java:352:50:352:57 | source(...) : String | Log4jJndiInjectionTest.java:352:41:352:57 | (...)... | -| Log4jJndiInjectionTest.java:353:170:353:177 | source(...) : String | Log4jJndiInjectionTest.java:353:161:353:177 | (...)... | -| Log4jJndiInjectionTest.java:354:155:354:162 | source(...) : String | Log4jJndiInjectionTest.java:354:146:354:162 | (...)... | -| Log4jJndiInjectionTest.java:355:140:355:147 | source(...) : String | Log4jJndiInjectionTest.java:355:131:355:147 | (...)... | -| Log4jJndiInjectionTest.java:356:125:356:132 | source(...) : String | Log4jJndiInjectionTest.java:356:116:356:132 | (...)... | -| Log4jJndiInjectionTest.java:357:110:357:117 | source(...) : String | Log4jJndiInjectionTest.java:357:101:357:117 | (...)... | -| Log4jJndiInjectionTest.java:358:95:358:102 | source(...) : String | Log4jJndiInjectionTest.java:358:86:358:102 | (...)... | -| Log4jJndiInjectionTest.java:359:80:359:87 | source(...) : String | Log4jJndiInjectionTest.java:359:71:359:87 | (...)... | -| Log4jJndiInjectionTest.java:360:65:360:72 | source(...) : String | Log4jJndiInjectionTest.java:360:56:360:72 | (...)... | -| Log4jJndiInjectionTest.java:361:50:361:57 | source(...) : String | Log4jJndiInjectionTest.java:361:41:361:57 | (...)... | -| Log4jJndiInjectionTest.java:362:185:362:192 | source(...) : String | Log4jJndiInjectionTest.java:362:176:362:192 | (...)... | -| Log4jJndiInjectionTest.java:363:170:363:177 | source(...) : String | Log4jJndiInjectionTest.java:363:161:363:177 | (...)... | -| Log4jJndiInjectionTest.java:364:155:364:162 | source(...) : String | Log4jJndiInjectionTest.java:364:146:364:162 | (...)... | -| Log4jJndiInjectionTest.java:365:140:365:147 | source(...) : String | Log4jJndiInjectionTest.java:365:131:365:147 | (...)... | -| Log4jJndiInjectionTest.java:366:125:366:132 | source(...) : String | Log4jJndiInjectionTest.java:366:116:366:132 | (...)... | -| Log4jJndiInjectionTest.java:367:110:367:117 | source(...) : String | Log4jJndiInjectionTest.java:367:101:367:117 | (...)... | -| Log4jJndiInjectionTest.java:368:95:368:102 | source(...) : String | Log4jJndiInjectionTest.java:368:86:368:102 | (...)... | -| Log4jJndiInjectionTest.java:369:80:369:87 | source(...) : String | Log4jJndiInjectionTest.java:369:71:369:87 | (...)... | -| Log4jJndiInjectionTest.java:370:65:370:72 | source(...) : String | Log4jJndiInjectionTest.java:370:56:370:72 | (...)... | -| Log4jJndiInjectionTest.java:371:50:371:57 | source(...) : String | Log4jJndiInjectionTest.java:371:41:371:57 | (...)... | -| Log4jJndiInjectionTest.java:372:50:372:57 | source(...) : String | Log4jJndiInjectionTest.java:372:41:372:57 | (...)... | -| Log4jJndiInjectionTest.java:373:70:373:77 | source(...) : String | Log4jJndiInjectionTest.java:373:56:373:77 | (...)... | -| Log4jJndiInjectionTest.java:374:50:374:57 | source(...) : String | Log4jJndiInjectionTest.java:374:41:374:57 | (...)... | -| Log4jJndiInjectionTest.java:375:55:375:62 | source(...) : String | Log4jJndiInjectionTest.java:375:41:375:62 | (...)... | -| Log4jJndiInjectionTest.java:376:55:376:62 | source(...) : String | Log4jJndiInjectionTest.java:376:41:376:62 | (...)... | -| Log4jJndiInjectionTest.java:377:44:377:51 | source(...) : String | Log4jJndiInjectionTest.java:377:26:377:51 | (...)... | -| Log4jJndiInjectionTest.java:378:44:378:51 | source(...) : String | Log4jJndiInjectionTest.java:378:26:378:51 | (...)... | -| Log4jJndiInjectionTest.java:379:36:379:43 | source(...) : String | Log4jJndiInjectionTest.java:379:26:379:43 | (...)... | -| Log4jJndiInjectionTest.java:380:36:380:43 | source(...) : String | Log4jJndiInjectionTest.java:380:26:380:43 | (...)... | -| Log4jJndiInjectionTest.java:383:35:383:42 | source(...) : String | Log4jJndiInjectionTest.java:383:26:383:42 | (...)... | -| Log4jJndiInjectionTest.java:384:35:384:42 | source(...) : String | Log4jJndiInjectionTest.java:384:26:384:42 | (...)... | -| Log4jJndiInjectionTest.java:385:41:385:63 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:385:41:385:63 | new Object[] | -| Log4jJndiInjectionTest.java:385:55:385:62 | source(...) : String | Log4jJndiInjectionTest.java:385:41:385:63 | {...} : Object[] [[]] : String | -| Log4jJndiInjectionTest.java:386:50:386:57 | source(...) : String | Log4jJndiInjectionTest.java:386:41:386:57 | (...)... | -| Log4jJndiInjectionTest.java:387:35:387:42 | source(...) : String | Log4jJndiInjectionTest.java:387:26:387:42 | (...)... | -| Log4jJndiInjectionTest.java:388:65:388:72 | source(...) : String | Log4jJndiInjectionTest.java:388:56:388:72 | (...)... | -| Log4jJndiInjectionTest.java:389:50:389:57 | source(...) : String | Log4jJndiInjectionTest.java:389:41:389:57 | (...)... | -| Log4jJndiInjectionTest.java:390:35:390:42 | source(...) : String | Log4jJndiInjectionTest.java:390:26:390:42 | (...)... | -| Log4jJndiInjectionTest.java:391:80:391:87 | source(...) : String | Log4jJndiInjectionTest.java:391:71:391:87 | (...)... | -| Log4jJndiInjectionTest.java:392:65:392:72 | source(...) : String | Log4jJndiInjectionTest.java:392:56:392:72 | (...)... | -| Log4jJndiInjectionTest.java:393:50:393:57 | source(...) : String | Log4jJndiInjectionTest.java:393:41:393:57 | (...)... | -| Log4jJndiInjectionTest.java:394:35:394:42 | source(...) : String | Log4jJndiInjectionTest.java:394:26:394:42 | (...)... | -| Log4jJndiInjectionTest.java:395:95:395:102 | source(...) : String | Log4jJndiInjectionTest.java:395:86:395:102 | (...)... | -| Log4jJndiInjectionTest.java:396:80:396:87 | source(...) : String | Log4jJndiInjectionTest.java:396:71:396:87 | (...)... | -| Log4jJndiInjectionTest.java:397:65:397:72 | source(...) : String | Log4jJndiInjectionTest.java:397:56:397:72 | (...)... | -| Log4jJndiInjectionTest.java:398:50:398:57 | source(...) : String | Log4jJndiInjectionTest.java:398:41:398:57 | (...)... | -| Log4jJndiInjectionTest.java:399:35:399:42 | source(...) : String | Log4jJndiInjectionTest.java:399:26:399:42 | (...)... | -| Log4jJndiInjectionTest.java:400:110:400:117 | source(...) : String | Log4jJndiInjectionTest.java:400:101:400:117 | (...)... | -| Log4jJndiInjectionTest.java:401:95:401:102 | source(...) : String | Log4jJndiInjectionTest.java:401:86:401:102 | (...)... | -| Log4jJndiInjectionTest.java:402:80:402:87 | source(...) : String | Log4jJndiInjectionTest.java:402:71:402:87 | (...)... | -| Log4jJndiInjectionTest.java:403:65:403:72 | source(...) : String | Log4jJndiInjectionTest.java:403:56:403:72 | (...)... | -| Log4jJndiInjectionTest.java:404:50:404:57 | source(...) : String | Log4jJndiInjectionTest.java:404:41:404:57 | (...)... | -| Log4jJndiInjectionTest.java:405:35:405:42 | source(...) : String | Log4jJndiInjectionTest.java:405:26:405:42 | (...)... | -| Log4jJndiInjectionTest.java:406:125:406:132 | source(...) : String | Log4jJndiInjectionTest.java:406:116:406:132 | (...)... | -| Log4jJndiInjectionTest.java:407:110:407:117 | source(...) : String | Log4jJndiInjectionTest.java:407:101:407:117 | (...)... | -| Log4jJndiInjectionTest.java:408:95:408:102 | source(...) : String | Log4jJndiInjectionTest.java:408:86:408:102 | (...)... | -| Log4jJndiInjectionTest.java:409:80:409:87 | source(...) : String | Log4jJndiInjectionTest.java:409:71:409:87 | (...)... | -| Log4jJndiInjectionTest.java:410:65:410:72 | source(...) : String | Log4jJndiInjectionTest.java:410:56:410:72 | (...)... | -| Log4jJndiInjectionTest.java:411:50:411:57 | source(...) : String | Log4jJndiInjectionTest.java:411:41:411:57 | (...)... | -| Log4jJndiInjectionTest.java:412:35:412:42 | source(...) : String | Log4jJndiInjectionTest.java:412:26:412:42 | (...)... | -| Log4jJndiInjectionTest.java:413:140:413:147 | source(...) : String | Log4jJndiInjectionTest.java:413:131:413:147 | (...)... | -| Log4jJndiInjectionTest.java:414:125:414:132 | source(...) : String | Log4jJndiInjectionTest.java:414:116:414:132 | (...)... | -| Log4jJndiInjectionTest.java:415:110:415:117 | source(...) : String | Log4jJndiInjectionTest.java:415:101:415:117 | (...)... | -| Log4jJndiInjectionTest.java:416:95:416:102 | source(...) : String | Log4jJndiInjectionTest.java:416:86:416:102 | (...)... | -| Log4jJndiInjectionTest.java:417:80:417:87 | source(...) : String | Log4jJndiInjectionTest.java:417:71:417:87 | (...)... | -| Log4jJndiInjectionTest.java:418:65:418:72 | source(...) : String | Log4jJndiInjectionTest.java:418:56:418:72 | (...)... | -| Log4jJndiInjectionTest.java:419:50:419:57 | source(...) : String | Log4jJndiInjectionTest.java:419:41:419:57 | (...)... | -| Log4jJndiInjectionTest.java:420:35:420:42 | source(...) : String | Log4jJndiInjectionTest.java:420:26:420:42 | (...)... | -| Log4jJndiInjectionTest.java:421:155:421:162 | source(...) : String | Log4jJndiInjectionTest.java:421:146:421:162 | (...)... | -| Log4jJndiInjectionTest.java:422:140:422:147 | source(...) : String | Log4jJndiInjectionTest.java:422:131:422:147 | (...)... | -| Log4jJndiInjectionTest.java:423:125:423:132 | source(...) : String | Log4jJndiInjectionTest.java:423:116:423:132 | (...)... | -| Log4jJndiInjectionTest.java:424:110:424:117 | source(...) : String | Log4jJndiInjectionTest.java:424:101:424:117 | (...)... | -| Log4jJndiInjectionTest.java:425:95:425:102 | source(...) : String | Log4jJndiInjectionTest.java:425:86:425:102 | (...)... | -| Log4jJndiInjectionTest.java:426:80:426:87 | source(...) : String | Log4jJndiInjectionTest.java:426:71:426:87 | (...)... | -| Log4jJndiInjectionTest.java:427:65:427:72 | source(...) : String | Log4jJndiInjectionTest.java:427:56:427:72 | (...)... | -| Log4jJndiInjectionTest.java:428:50:428:57 | source(...) : String | Log4jJndiInjectionTest.java:428:41:428:57 | (...)... | -| Log4jJndiInjectionTest.java:429:35:429:42 | source(...) : String | Log4jJndiInjectionTest.java:429:26:429:42 | (...)... | -| Log4jJndiInjectionTest.java:430:170:430:177 | source(...) : String | Log4jJndiInjectionTest.java:430:161:430:177 | (...)... | -| Log4jJndiInjectionTest.java:431:155:431:162 | source(...) : String | Log4jJndiInjectionTest.java:431:146:431:162 | (...)... | -| Log4jJndiInjectionTest.java:432:140:432:147 | source(...) : String | Log4jJndiInjectionTest.java:432:131:432:147 | (...)... | -| Log4jJndiInjectionTest.java:433:125:433:132 | source(...) : String | Log4jJndiInjectionTest.java:433:116:433:132 | (...)... | -| Log4jJndiInjectionTest.java:434:110:434:117 | source(...) : String | Log4jJndiInjectionTest.java:434:101:434:117 | (...)... | -| Log4jJndiInjectionTest.java:435:95:435:102 | source(...) : String | Log4jJndiInjectionTest.java:435:86:435:102 | (...)... | -| Log4jJndiInjectionTest.java:436:80:436:87 | source(...) : String | Log4jJndiInjectionTest.java:436:71:436:87 | (...)... | -| Log4jJndiInjectionTest.java:437:65:437:72 | source(...) : String | Log4jJndiInjectionTest.java:437:56:437:72 | (...)... | -| Log4jJndiInjectionTest.java:438:50:438:57 | source(...) : String | Log4jJndiInjectionTest.java:438:41:438:57 | (...)... | -| Log4jJndiInjectionTest.java:439:35:439:42 | source(...) : String | Log4jJndiInjectionTest.java:439:26:439:42 | (...)... | -| Log4jJndiInjectionTest.java:440:35:440:42 | source(...) : String | Log4jJndiInjectionTest.java:440:26:440:42 | (...)... | -| Log4jJndiInjectionTest.java:441:55:441:62 | source(...) : String | Log4jJndiInjectionTest.java:441:41:441:62 | (...)... | -| Log4jJndiInjectionTest.java:442:35:442:42 | source(...) : String | Log4jJndiInjectionTest.java:442:26:442:42 | (...)... | -| Log4jJndiInjectionTest.java:443:40:443:47 | source(...) : String | Log4jJndiInjectionTest.java:443:26:443:47 | (...)... | -| Log4jJndiInjectionTest.java:444:40:444:47 | source(...) : String | Log4jJndiInjectionTest.java:444:26:444:47 | (...)... | -| Log4jJndiInjectionTest.java:445:40:445:47 | source(...) : String | Log4jJndiInjectionTest.java:445:25:445:47 | (...)... | -| Log4jJndiInjectionTest.java:446:40:446:47 | source(...) : String | Log4jJndiInjectionTest.java:446:25:446:47 | (...)... | -| Log4jJndiInjectionTest.java:447:55:447:62 | source(...) : String | Log4jJndiInjectionTest.java:447:40:447:62 | (...)... | -| Log4jJndiInjectionTest.java:448:55:448:62 | source(...) : String | Log4jJndiInjectionTest.java:448:40:448:62 | (...)... | -| Log4jJndiInjectionTest.java:449:50:449:57 | source(...) : String | Log4jJndiInjectionTest.java:449:40:449:57 | (...)... | -| Log4jJndiInjectionTest.java:450:58:450:65 | source(...) : String | Log4jJndiInjectionTest.java:450:40:450:65 | (...)... | -| Log4jJndiInjectionTest.java:451:58:451:65 | source(...) : String | Log4jJndiInjectionTest.java:451:40:451:65 | (...)... | -| Log4jJndiInjectionTest.java:453:49:453:56 | source(...) : String | Log4jJndiInjectionTest.java:453:40:453:56 | (...)... | -| Log4jJndiInjectionTest.java:454:49:454:56 | source(...) : String | Log4jJndiInjectionTest.java:454:40:454:56 | (...)... | -| Log4jJndiInjectionTest.java:455:55:455:77 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:455:55:455:77 | new Object[] | -| Log4jJndiInjectionTest.java:455:69:455:76 | source(...) : String | Log4jJndiInjectionTest.java:455:55:455:77 | {...} : Object[] [[]] : String | -| Log4jJndiInjectionTest.java:456:64:456:71 | source(...) : String | Log4jJndiInjectionTest.java:456:55:456:71 | (...)... | -| Log4jJndiInjectionTest.java:457:49:457:56 | source(...) : String | Log4jJndiInjectionTest.java:457:40:457:56 | (...)... | -| Log4jJndiInjectionTest.java:458:79:458:86 | source(...) : String | Log4jJndiInjectionTest.java:458:70:458:86 | (...)... | -| Log4jJndiInjectionTest.java:459:64:459:71 | source(...) : String | Log4jJndiInjectionTest.java:459:55:459:71 | (...)... | -| Log4jJndiInjectionTest.java:460:49:460:56 | source(...) : String | Log4jJndiInjectionTest.java:460:40:460:56 | (...)... | -| Log4jJndiInjectionTest.java:461:94:461:101 | source(...) : String | Log4jJndiInjectionTest.java:461:85:461:101 | (...)... | -| Log4jJndiInjectionTest.java:462:79:462:86 | source(...) : String | Log4jJndiInjectionTest.java:462:70:462:86 | (...)... | -| Log4jJndiInjectionTest.java:463:64:463:71 | source(...) : String | Log4jJndiInjectionTest.java:463:55:463:71 | (...)... | -| Log4jJndiInjectionTest.java:464:49:464:56 | source(...) : String | Log4jJndiInjectionTest.java:464:40:464:56 | (...)... | -| Log4jJndiInjectionTest.java:465:109:465:116 | source(...) : String | Log4jJndiInjectionTest.java:465:100:465:116 | (...)... | -| Log4jJndiInjectionTest.java:466:94:466:101 | source(...) : String | Log4jJndiInjectionTest.java:466:85:466:101 | (...)... | -| Log4jJndiInjectionTest.java:467:79:467:86 | source(...) : String | Log4jJndiInjectionTest.java:467:70:467:86 | (...)... | -| Log4jJndiInjectionTest.java:468:64:468:71 | source(...) : String | Log4jJndiInjectionTest.java:468:55:468:71 | (...)... | -| Log4jJndiInjectionTest.java:469:49:469:56 | source(...) : String | Log4jJndiInjectionTest.java:469:40:469:56 | (...)... | -| Log4jJndiInjectionTest.java:470:124:470:131 | source(...) : String | Log4jJndiInjectionTest.java:470:115:470:131 | (...)... | -| Log4jJndiInjectionTest.java:471:109:471:116 | source(...) : String | Log4jJndiInjectionTest.java:471:100:471:116 | (...)... | -| Log4jJndiInjectionTest.java:472:94:472:101 | source(...) : String | Log4jJndiInjectionTest.java:472:85:472:101 | (...)... | -| Log4jJndiInjectionTest.java:473:79:473:86 | source(...) : String | Log4jJndiInjectionTest.java:473:70:473:86 | (...)... | -| Log4jJndiInjectionTest.java:474:64:474:71 | source(...) : String | Log4jJndiInjectionTest.java:474:55:474:71 | (...)... | -| Log4jJndiInjectionTest.java:475:49:475:56 | source(...) : String | Log4jJndiInjectionTest.java:475:40:475:56 | (...)... | -| Log4jJndiInjectionTest.java:476:139:476:146 | source(...) : String | Log4jJndiInjectionTest.java:476:130:476:146 | (...)... | -| Log4jJndiInjectionTest.java:477:124:477:131 | source(...) : String | Log4jJndiInjectionTest.java:477:115:477:131 | (...)... | -| Log4jJndiInjectionTest.java:478:109:478:116 | source(...) : String | Log4jJndiInjectionTest.java:478:100:478:116 | (...)... | -| Log4jJndiInjectionTest.java:479:94:479:101 | source(...) : String | Log4jJndiInjectionTest.java:479:85:479:101 | (...)... | -| Log4jJndiInjectionTest.java:480:79:480:86 | source(...) : String | Log4jJndiInjectionTest.java:480:70:480:86 | (...)... | -| Log4jJndiInjectionTest.java:481:64:481:71 | source(...) : String | Log4jJndiInjectionTest.java:481:55:481:71 | (...)... | -| Log4jJndiInjectionTest.java:482:49:482:56 | source(...) : String | Log4jJndiInjectionTest.java:482:40:482:56 | (...)... | -| Log4jJndiInjectionTest.java:483:154:483:161 | source(...) : String | Log4jJndiInjectionTest.java:483:145:483:161 | (...)... | -| Log4jJndiInjectionTest.java:484:139:484:146 | source(...) : String | Log4jJndiInjectionTest.java:484:130:484:146 | (...)... | -| Log4jJndiInjectionTest.java:485:124:485:131 | source(...) : String | Log4jJndiInjectionTest.java:485:115:485:131 | (...)... | -| Log4jJndiInjectionTest.java:486:109:486:116 | source(...) : String | Log4jJndiInjectionTest.java:486:100:486:116 | (...)... | -| Log4jJndiInjectionTest.java:487:94:487:101 | source(...) : String | Log4jJndiInjectionTest.java:487:85:487:101 | (...)... | -| Log4jJndiInjectionTest.java:488:79:488:86 | source(...) : String | Log4jJndiInjectionTest.java:488:70:488:86 | (...)... | -| Log4jJndiInjectionTest.java:489:64:489:71 | source(...) : String | Log4jJndiInjectionTest.java:489:55:489:71 | (...)... | -| Log4jJndiInjectionTest.java:490:49:490:56 | source(...) : String | Log4jJndiInjectionTest.java:490:40:490:56 | (...)... | -| Log4jJndiInjectionTest.java:491:169:491:176 | source(...) : String | Log4jJndiInjectionTest.java:491:160:491:176 | (...)... | -| Log4jJndiInjectionTest.java:492:154:492:161 | source(...) : String | Log4jJndiInjectionTest.java:492:145:492:161 | (...)... | -| Log4jJndiInjectionTest.java:493:139:493:146 | source(...) : String | Log4jJndiInjectionTest.java:493:130:493:146 | (...)... | -| Log4jJndiInjectionTest.java:494:124:494:131 | source(...) : String | Log4jJndiInjectionTest.java:494:115:494:131 | (...)... | -| Log4jJndiInjectionTest.java:495:109:495:116 | source(...) : String | Log4jJndiInjectionTest.java:495:100:495:116 | (...)... | -| Log4jJndiInjectionTest.java:496:94:496:101 | source(...) : String | Log4jJndiInjectionTest.java:496:85:496:101 | (...)... | -| Log4jJndiInjectionTest.java:497:79:497:86 | source(...) : String | Log4jJndiInjectionTest.java:497:70:497:86 | (...)... | -| Log4jJndiInjectionTest.java:498:64:498:71 | source(...) : String | Log4jJndiInjectionTest.java:498:55:498:71 | (...)... | -| Log4jJndiInjectionTest.java:499:49:499:56 | source(...) : String | Log4jJndiInjectionTest.java:499:40:499:56 | (...)... | -| Log4jJndiInjectionTest.java:500:184:500:191 | source(...) : String | Log4jJndiInjectionTest.java:500:175:500:191 | (...)... | -| Log4jJndiInjectionTest.java:501:169:501:176 | source(...) : String | Log4jJndiInjectionTest.java:501:160:501:176 | (...)... | -| Log4jJndiInjectionTest.java:502:154:502:161 | source(...) : String | Log4jJndiInjectionTest.java:502:145:502:161 | (...)... | -| Log4jJndiInjectionTest.java:503:139:503:146 | source(...) : String | Log4jJndiInjectionTest.java:503:130:503:146 | (...)... | -| Log4jJndiInjectionTest.java:504:124:504:131 | source(...) : String | Log4jJndiInjectionTest.java:504:115:504:131 | (...)... | -| Log4jJndiInjectionTest.java:505:109:505:116 | source(...) : String | Log4jJndiInjectionTest.java:505:100:505:116 | (...)... | -| Log4jJndiInjectionTest.java:506:94:506:101 | source(...) : String | Log4jJndiInjectionTest.java:506:85:506:101 | (...)... | -| Log4jJndiInjectionTest.java:507:79:507:86 | source(...) : String | Log4jJndiInjectionTest.java:507:70:507:86 | (...)... | -| Log4jJndiInjectionTest.java:508:64:508:71 | source(...) : String | Log4jJndiInjectionTest.java:508:55:508:71 | (...)... | -| Log4jJndiInjectionTest.java:509:49:509:56 | source(...) : String | Log4jJndiInjectionTest.java:509:40:509:56 | (...)... | -| Log4jJndiInjectionTest.java:510:49:510:56 | source(...) : String | Log4jJndiInjectionTest.java:510:40:510:56 | (...)... | -| Log4jJndiInjectionTest.java:511:69:511:76 | source(...) : String | Log4jJndiInjectionTest.java:511:55:511:76 | (...)... | -| Log4jJndiInjectionTest.java:512:49:512:56 | source(...) : String | Log4jJndiInjectionTest.java:512:40:512:56 | (...)... | -| Log4jJndiInjectionTest.java:513:54:513:61 | source(...) : String | Log4jJndiInjectionTest.java:513:40:513:61 | (...)... | -| Log4jJndiInjectionTest.java:514:54:514:61 | source(...) : String | Log4jJndiInjectionTest.java:514:40:514:61 | (...)... | -| Log4jJndiInjectionTest.java:515:43:515:50 | source(...) : String | Log4jJndiInjectionTest.java:515:25:515:50 | (...)... | -| Log4jJndiInjectionTest.java:516:43:516:50 | source(...) : String | Log4jJndiInjectionTest.java:516:25:516:50 | (...)... | -| Log4jJndiInjectionTest.java:517:35:517:42 | source(...) : String | Log4jJndiInjectionTest.java:517:25:517:42 | (...)... | -| Log4jJndiInjectionTest.java:518:35:518:42 | source(...) : String | Log4jJndiInjectionTest.java:518:25:518:42 | (...)... | -| Log4jJndiInjectionTest.java:521:34:521:41 | source(...) : String | Log4jJndiInjectionTest.java:521:25:521:41 | (...)... | -| Log4jJndiInjectionTest.java:522:34:522:41 | source(...) : String | Log4jJndiInjectionTest.java:522:25:522:41 | (...)... | -| Log4jJndiInjectionTest.java:523:40:523:62 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:523:40:523:62 | new Object[] | -| Log4jJndiInjectionTest.java:523:54:523:61 | source(...) : String | Log4jJndiInjectionTest.java:523:40:523:62 | {...} : Object[] [[]] : String | -| Log4jJndiInjectionTest.java:524:49:524:56 | source(...) : String | Log4jJndiInjectionTest.java:524:40:524:56 | (...)... | -| Log4jJndiInjectionTest.java:525:34:525:41 | source(...) : String | Log4jJndiInjectionTest.java:525:25:525:41 | (...)... | -| Log4jJndiInjectionTest.java:526:64:526:71 | source(...) : String | Log4jJndiInjectionTest.java:526:55:526:71 | (...)... | -| Log4jJndiInjectionTest.java:527:49:527:56 | source(...) : String | Log4jJndiInjectionTest.java:527:40:527:56 | (...)... | -| Log4jJndiInjectionTest.java:528:34:528:41 | source(...) : String | Log4jJndiInjectionTest.java:528:25:528:41 | (...)... | -| Log4jJndiInjectionTest.java:529:79:529:86 | source(...) : String | Log4jJndiInjectionTest.java:529:70:529:86 | (...)... | -| Log4jJndiInjectionTest.java:530:64:530:71 | source(...) : String | Log4jJndiInjectionTest.java:530:55:530:71 | (...)... | -| Log4jJndiInjectionTest.java:531:49:531:56 | source(...) : String | Log4jJndiInjectionTest.java:531:40:531:56 | (...)... | -| Log4jJndiInjectionTest.java:532:34:532:41 | source(...) : String | Log4jJndiInjectionTest.java:532:25:532:41 | (...)... | -| Log4jJndiInjectionTest.java:533:94:533:101 | source(...) : String | Log4jJndiInjectionTest.java:533:85:533:101 | (...)... | -| Log4jJndiInjectionTest.java:534:79:534:86 | source(...) : String | Log4jJndiInjectionTest.java:534:70:534:86 | (...)... | -| Log4jJndiInjectionTest.java:535:64:535:71 | source(...) : String | Log4jJndiInjectionTest.java:535:55:535:71 | (...)... | -| Log4jJndiInjectionTest.java:536:49:536:56 | source(...) : String | Log4jJndiInjectionTest.java:536:40:536:56 | (...)... | -| Log4jJndiInjectionTest.java:537:34:537:41 | source(...) : String | Log4jJndiInjectionTest.java:537:25:537:41 | (...)... | -| Log4jJndiInjectionTest.java:538:109:538:116 | source(...) : String | Log4jJndiInjectionTest.java:538:100:538:116 | (...)... | -| Log4jJndiInjectionTest.java:539:94:539:101 | source(...) : String | Log4jJndiInjectionTest.java:539:85:539:101 | (...)... | -| Log4jJndiInjectionTest.java:540:79:540:86 | source(...) : String | Log4jJndiInjectionTest.java:540:70:540:86 | (...)... | -| Log4jJndiInjectionTest.java:541:64:541:71 | source(...) : String | Log4jJndiInjectionTest.java:541:55:541:71 | (...)... | -| Log4jJndiInjectionTest.java:542:49:542:56 | source(...) : String | Log4jJndiInjectionTest.java:542:40:542:56 | (...)... | -| Log4jJndiInjectionTest.java:543:34:543:41 | source(...) : String | Log4jJndiInjectionTest.java:543:25:543:41 | (...)... | -| Log4jJndiInjectionTest.java:544:124:544:131 | source(...) : String | Log4jJndiInjectionTest.java:544:115:544:131 | (...)... | -| Log4jJndiInjectionTest.java:545:109:545:116 | source(...) : String | Log4jJndiInjectionTest.java:545:100:545:116 | (...)... | -| Log4jJndiInjectionTest.java:546:94:546:101 | source(...) : String | Log4jJndiInjectionTest.java:546:85:546:101 | (...)... | -| Log4jJndiInjectionTest.java:547:79:547:86 | source(...) : String | Log4jJndiInjectionTest.java:547:70:547:86 | (...)... | -| Log4jJndiInjectionTest.java:548:64:548:71 | source(...) : String | Log4jJndiInjectionTest.java:548:55:548:71 | (...)... | -| Log4jJndiInjectionTest.java:549:49:549:56 | source(...) : String | Log4jJndiInjectionTest.java:549:40:549:56 | (...)... | -| Log4jJndiInjectionTest.java:550:34:550:41 | source(...) : String | Log4jJndiInjectionTest.java:550:25:550:41 | (...)... | -| Log4jJndiInjectionTest.java:551:139:551:146 | source(...) : String | Log4jJndiInjectionTest.java:551:130:551:146 | (...)... | -| Log4jJndiInjectionTest.java:552:124:552:131 | source(...) : String | Log4jJndiInjectionTest.java:552:115:552:131 | (...)... | -| Log4jJndiInjectionTest.java:553:109:553:116 | source(...) : String | Log4jJndiInjectionTest.java:553:100:553:116 | (...)... | -| Log4jJndiInjectionTest.java:554:94:554:101 | source(...) : String | Log4jJndiInjectionTest.java:554:85:554:101 | (...)... | -| Log4jJndiInjectionTest.java:555:79:555:86 | source(...) : String | Log4jJndiInjectionTest.java:555:70:555:86 | (...)... | -| Log4jJndiInjectionTest.java:556:64:556:71 | source(...) : String | Log4jJndiInjectionTest.java:556:55:556:71 | (...)... | -| Log4jJndiInjectionTest.java:557:49:557:56 | source(...) : String | Log4jJndiInjectionTest.java:557:40:557:56 | (...)... | -| Log4jJndiInjectionTest.java:558:34:558:41 | source(...) : String | Log4jJndiInjectionTest.java:558:25:558:41 | (...)... | -| Log4jJndiInjectionTest.java:559:154:559:161 | source(...) : String | Log4jJndiInjectionTest.java:559:145:559:161 | (...)... | -| Log4jJndiInjectionTest.java:560:139:560:146 | source(...) : String | Log4jJndiInjectionTest.java:560:130:560:146 | (...)... | -| Log4jJndiInjectionTest.java:561:124:561:131 | source(...) : String | Log4jJndiInjectionTest.java:561:115:561:131 | (...)... | -| Log4jJndiInjectionTest.java:562:109:562:116 | source(...) : String | Log4jJndiInjectionTest.java:562:100:562:116 | (...)... | -| Log4jJndiInjectionTest.java:563:94:563:101 | source(...) : String | Log4jJndiInjectionTest.java:563:85:563:101 | (...)... | -| Log4jJndiInjectionTest.java:564:79:564:86 | source(...) : String | Log4jJndiInjectionTest.java:564:70:564:86 | (...)... | -| Log4jJndiInjectionTest.java:565:64:565:71 | source(...) : String | Log4jJndiInjectionTest.java:565:55:565:71 | (...)... | -| Log4jJndiInjectionTest.java:566:49:566:56 | source(...) : String | Log4jJndiInjectionTest.java:566:40:566:56 | (...)... | -| Log4jJndiInjectionTest.java:567:34:567:41 | source(...) : String | Log4jJndiInjectionTest.java:567:25:567:41 | (...)... | -| Log4jJndiInjectionTest.java:568:169:568:176 | source(...) : String | Log4jJndiInjectionTest.java:568:160:568:176 | (...)... | -| Log4jJndiInjectionTest.java:569:154:569:161 | source(...) : String | Log4jJndiInjectionTest.java:569:145:569:161 | (...)... | -| Log4jJndiInjectionTest.java:570:139:570:146 | source(...) : String | Log4jJndiInjectionTest.java:570:130:570:146 | (...)... | -| Log4jJndiInjectionTest.java:571:124:571:131 | source(...) : String | Log4jJndiInjectionTest.java:571:115:571:131 | (...)... | -| Log4jJndiInjectionTest.java:572:109:572:116 | source(...) : String | Log4jJndiInjectionTest.java:572:100:572:116 | (...)... | -| Log4jJndiInjectionTest.java:573:94:573:101 | source(...) : String | Log4jJndiInjectionTest.java:573:85:573:101 | (...)... | -| Log4jJndiInjectionTest.java:574:79:574:86 | source(...) : String | Log4jJndiInjectionTest.java:574:70:574:86 | (...)... | -| Log4jJndiInjectionTest.java:575:64:575:71 | source(...) : String | Log4jJndiInjectionTest.java:575:55:575:71 | (...)... | -| Log4jJndiInjectionTest.java:576:49:576:56 | source(...) : String | Log4jJndiInjectionTest.java:576:40:576:56 | (...)... | -| Log4jJndiInjectionTest.java:577:34:577:41 | source(...) : String | Log4jJndiInjectionTest.java:577:25:577:41 | (...)... | -| Log4jJndiInjectionTest.java:578:34:578:41 | source(...) : String | Log4jJndiInjectionTest.java:578:25:578:41 | (...)... | -| Log4jJndiInjectionTest.java:579:54:579:61 | source(...) : String | Log4jJndiInjectionTest.java:579:40:579:61 | (...)... | -| Log4jJndiInjectionTest.java:580:34:580:41 | source(...) : String | Log4jJndiInjectionTest.java:580:25:580:41 | (...)... | -| Log4jJndiInjectionTest.java:581:39:581:46 | source(...) : String | Log4jJndiInjectionTest.java:581:25:581:46 | (...)... | -| Log4jJndiInjectionTest.java:582:39:582:46 | source(...) : String | Log4jJndiInjectionTest.java:582:25:582:46 | (...)... | -| Log4jJndiInjectionTest.java:583:53:583:60 | source(...) : String | Log4jJndiInjectionTest.java:583:38:583:60 | (...)... | -| Log4jJndiInjectionTest.java:584:53:584:60 | source(...) : String | Log4jJndiInjectionTest.java:584:38:584:60 | (...)... | -| Log4jJndiInjectionTest.java:585:68:585:75 | source(...) : String | Log4jJndiInjectionTest.java:585:53:585:75 | (...)... | -| Log4jJndiInjectionTest.java:586:68:586:75 | source(...) : String | Log4jJndiInjectionTest.java:586:53:586:75 | (...)... | -| Log4jJndiInjectionTest.java:587:63:587:70 | source(...) : String | Log4jJndiInjectionTest.java:587:53:587:70 | (...)... | -| Log4jJndiInjectionTest.java:588:71:588:78 | source(...) : String | Log4jJndiInjectionTest.java:588:53:588:78 | (...)... | -| Log4jJndiInjectionTest.java:589:71:589:78 | source(...) : String | Log4jJndiInjectionTest.java:589:53:589:78 | (...)... | -| Log4jJndiInjectionTest.java:591:62:591:69 | source(...) : String | Log4jJndiInjectionTest.java:591:53:591:69 | (...)... | -| Log4jJndiInjectionTest.java:592:62:592:69 | source(...) : String | Log4jJndiInjectionTest.java:592:53:592:69 | (...)... | -| Log4jJndiInjectionTest.java:593:68:593:90 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:593:68:593:90 | new Object[] | -| Log4jJndiInjectionTest.java:593:82:593:89 | source(...) : String | Log4jJndiInjectionTest.java:593:68:593:90 | {...} : Object[] [[]] : String | -| Log4jJndiInjectionTest.java:594:77:594:84 | source(...) : String | Log4jJndiInjectionTest.java:594:68:594:84 | (...)... | -| Log4jJndiInjectionTest.java:595:62:595:69 | source(...) : String | Log4jJndiInjectionTest.java:595:53:595:69 | (...)... | -| Log4jJndiInjectionTest.java:596:92:596:99 | source(...) : String | Log4jJndiInjectionTest.java:596:83:596:99 | (...)... | -| Log4jJndiInjectionTest.java:597:77:597:84 | source(...) : String | Log4jJndiInjectionTest.java:597:68:597:84 | (...)... | -| Log4jJndiInjectionTest.java:598:62:598:69 | source(...) : String | Log4jJndiInjectionTest.java:598:53:598:69 | (...)... | -| Log4jJndiInjectionTest.java:599:107:599:114 | source(...) : String | Log4jJndiInjectionTest.java:599:98:599:114 | (...)... | -| Log4jJndiInjectionTest.java:600:92:600:99 | source(...) : String | Log4jJndiInjectionTest.java:600:83:600:99 | (...)... | -| Log4jJndiInjectionTest.java:601:77:601:84 | source(...) : String | Log4jJndiInjectionTest.java:601:68:601:84 | (...)... | -| Log4jJndiInjectionTest.java:602:62:602:69 | source(...) : String | Log4jJndiInjectionTest.java:602:53:602:69 | (...)... | -| Log4jJndiInjectionTest.java:603:122:603:129 | source(...) : String | Log4jJndiInjectionTest.java:603:113:603:129 | (...)... | -| Log4jJndiInjectionTest.java:604:107:604:114 | source(...) : String | Log4jJndiInjectionTest.java:604:98:604:114 | (...)... | -| Log4jJndiInjectionTest.java:605:92:605:99 | source(...) : String | Log4jJndiInjectionTest.java:605:83:605:99 | (...)... | -| Log4jJndiInjectionTest.java:606:77:606:84 | source(...) : String | Log4jJndiInjectionTest.java:606:68:606:84 | (...)... | -| Log4jJndiInjectionTest.java:607:62:607:69 | source(...) : String | Log4jJndiInjectionTest.java:607:53:607:69 | (...)... | -| Log4jJndiInjectionTest.java:608:137:608:144 | source(...) : String | Log4jJndiInjectionTest.java:608:128:608:144 | (...)... | -| Log4jJndiInjectionTest.java:609:122:609:129 | source(...) : String | Log4jJndiInjectionTest.java:609:113:609:129 | (...)... | -| Log4jJndiInjectionTest.java:610:107:610:114 | source(...) : String | Log4jJndiInjectionTest.java:610:98:610:114 | (...)... | -| Log4jJndiInjectionTest.java:611:92:611:99 | source(...) : String | Log4jJndiInjectionTest.java:611:83:611:99 | (...)... | -| Log4jJndiInjectionTest.java:612:77:612:84 | source(...) : String | Log4jJndiInjectionTest.java:612:68:612:84 | (...)... | -| Log4jJndiInjectionTest.java:613:62:613:69 | source(...) : String | Log4jJndiInjectionTest.java:613:53:613:69 | (...)... | -| Log4jJndiInjectionTest.java:614:152:614:159 | source(...) : String | Log4jJndiInjectionTest.java:614:143:614:159 | (...)... | -| Log4jJndiInjectionTest.java:615:137:615:144 | source(...) : String | Log4jJndiInjectionTest.java:615:128:615:144 | (...)... | -| Log4jJndiInjectionTest.java:616:122:616:129 | source(...) : String | Log4jJndiInjectionTest.java:616:113:616:129 | (...)... | -| Log4jJndiInjectionTest.java:617:107:617:114 | source(...) : String | Log4jJndiInjectionTest.java:617:98:617:114 | (...)... | -| Log4jJndiInjectionTest.java:618:92:618:99 | source(...) : String | Log4jJndiInjectionTest.java:618:83:618:99 | (...)... | -| Log4jJndiInjectionTest.java:619:77:619:84 | source(...) : String | Log4jJndiInjectionTest.java:619:68:619:84 | (...)... | -| Log4jJndiInjectionTest.java:620:62:620:69 | source(...) : String | Log4jJndiInjectionTest.java:620:53:620:69 | (...)... | -| Log4jJndiInjectionTest.java:621:167:621:174 | source(...) : String | Log4jJndiInjectionTest.java:621:158:621:174 | (...)... | -| Log4jJndiInjectionTest.java:622:152:622:159 | source(...) : String | Log4jJndiInjectionTest.java:622:143:622:159 | (...)... | -| Log4jJndiInjectionTest.java:623:137:623:144 | source(...) : String | Log4jJndiInjectionTest.java:623:128:623:144 | (...)... | -| Log4jJndiInjectionTest.java:624:122:624:129 | source(...) : String | Log4jJndiInjectionTest.java:624:113:624:129 | (...)... | -| Log4jJndiInjectionTest.java:625:107:625:114 | source(...) : String | Log4jJndiInjectionTest.java:625:98:625:114 | (...)... | -| Log4jJndiInjectionTest.java:626:92:626:99 | source(...) : String | Log4jJndiInjectionTest.java:626:83:626:99 | (...)... | -| Log4jJndiInjectionTest.java:627:77:627:84 | source(...) : String | Log4jJndiInjectionTest.java:627:68:627:84 | (...)... | -| Log4jJndiInjectionTest.java:628:62:628:69 | source(...) : String | Log4jJndiInjectionTest.java:628:53:628:69 | (...)... | -| Log4jJndiInjectionTest.java:629:182:629:189 | source(...) : String | Log4jJndiInjectionTest.java:629:173:629:189 | (...)... | -| Log4jJndiInjectionTest.java:630:167:630:174 | source(...) : String | Log4jJndiInjectionTest.java:630:158:630:174 | (...)... | -| Log4jJndiInjectionTest.java:631:152:631:159 | source(...) : String | Log4jJndiInjectionTest.java:631:143:631:159 | (...)... | -| Log4jJndiInjectionTest.java:632:137:632:144 | source(...) : String | Log4jJndiInjectionTest.java:632:128:632:144 | (...)... | -| Log4jJndiInjectionTest.java:633:122:633:129 | source(...) : String | Log4jJndiInjectionTest.java:633:113:633:129 | (...)... | -| Log4jJndiInjectionTest.java:634:107:634:114 | source(...) : String | Log4jJndiInjectionTest.java:634:98:634:114 | (...)... | -| Log4jJndiInjectionTest.java:635:92:635:99 | source(...) : String | Log4jJndiInjectionTest.java:635:83:635:99 | (...)... | -| Log4jJndiInjectionTest.java:636:77:636:84 | source(...) : String | Log4jJndiInjectionTest.java:636:68:636:84 | (...)... | -| Log4jJndiInjectionTest.java:637:62:637:69 | source(...) : String | Log4jJndiInjectionTest.java:637:53:637:69 | (...)... | -| Log4jJndiInjectionTest.java:638:197:638:204 | source(...) : String | Log4jJndiInjectionTest.java:638:188:638:204 | (...)... | -| Log4jJndiInjectionTest.java:639:182:639:189 | source(...) : String | Log4jJndiInjectionTest.java:639:173:639:189 | (...)... | -| Log4jJndiInjectionTest.java:640:167:640:174 | source(...) : String | Log4jJndiInjectionTest.java:640:158:640:174 | (...)... | -| Log4jJndiInjectionTest.java:641:152:641:159 | source(...) : String | Log4jJndiInjectionTest.java:641:143:641:159 | (...)... | -| Log4jJndiInjectionTest.java:642:137:642:144 | source(...) : String | Log4jJndiInjectionTest.java:642:128:642:144 | (...)... | -| Log4jJndiInjectionTest.java:643:122:643:129 | source(...) : String | Log4jJndiInjectionTest.java:643:113:643:129 | (...)... | -| Log4jJndiInjectionTest.java:644:107:644:114 | source(...) : String | Log4jJndiInjectionTest.java:644:98:644:114 | (...)... | -| Log4jJndiInjectionTest.java:645:92:645:99 | source(...) : String | Log4jJndiInjectionTest.java:645:83:645:99 | (...)... | -| Log4jJndiInjectionTest.java:646:77:646:84 | source(...) : String | Log4jJndiInjectionTest.java:646:68:646:84 | (...)... | -| Log4jJndiInjectionTest.java:647:62:647:69 | source(...) : String | Log4jJndiInjectionTest.java:647:53:647:69 | (...)... | -| Log4jJndiInjectionTest.java:648:62:648:69 | source(...) : String | Log4jJndiInjectionTest.java:648:53:648:69 | (...)... | -| Log4jJndiInjectionTest.java:649:82:649:89 | source(...) : String | Log4jJndiInjectionTest.java:649:68:649:89 | (...)... | -| Log4jJndiInjectionTest.java:650:62:650:69 | source(...) : String | Log4jJndiInjectionTest.java:650:53:650:69 | (...)... | -| Log4jJndiInjectionTest.java:651:67:651:74 | source(...) : String | Log4jJndiInjectionTest.java:651:53:651:74 | (...)... | -| Log4jJndiInjectionTest.java:652:67:652:74 | source(...) : String | Log4jJndiInjectionTest.java:652:53:652:74 | (...)... | -| Log4jJndiInjectionTest.java:653:56:653:63 | source(...) : String | Log4jJndiInjectionTest.java:653:38:653:63 | (...)... | -| Log4jJndiInjectionTest.java:654:56:654:63 | source(...) : String | Log4jJndiInjectionTest.java:654:38:654:63 | (...)... | -| Log4jJndiInjectionTest.java:655:48:655:55 | source(...) : String | Log4jJndiInjectionTest.java:655:38:655:55 | (...)... | -| Log4jJndiInjectionTest.java:656:48:656:55 | source(...) : String | Log4jJndiInjectionTest.java:656:38:656:55 | (...)... | -| Log4jJndiInjectionTest.java:659:47:659:54 | source(...) : String | Log4jJndiInjectionTest.java:659:38:659:54 | (...)... | -| Log4jJndiInjectionTest.java:660:47:660:54 | source(...) : String | Log4jJndiInjectionTest.java:660:38:660:54 | (...)... | -| Log4jJndiInjectionTest.java:661:53:661:75 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:661:53:661:75 | new Object[] | -| Log4jJndiInjectionTest.java:661:67:661:74 | source(...) : String | Log4jJndiInjectionTest.java:661:53:661:75 | {...} : Object[] [[]] : String | -| Log4jJndiInjectionTest.java:662:62:662:69 | source(...) : String | Log4jJndiInjectionTest.java:662:53:662:69 | (...)... | -| Log4jJndiInjectionTest.java:663:47:663:54 | source(...) : String | Log4jJndiInjectionTest.java:663:38:663:54 | (...)... | -| Log4jJndiInjectionTest.java:664:77:664:84 | source(...) : String | Log4jJndiInjectionTest.java:664:68:664:84 | (...)... | -| Log4jJndiInjectionTest.java:665:62:665:69 | source(...) : String | Log4jJndiInjectionTest.java:665:53:665:69 | (...)... | -| Log4jJndiInjectionTest.java:666:47:666:54 | source(...) : String | Log4jJndiInjectionTest.java:666:38:666:54 | (...)... | -| Log4jJndiInjectionTest.java:667:92:667:99 | source(...) : String | Log4jJndiInjectionTest.java:667:83:667:99 | (...)... | -| Log4jJndiInjectionTest.java:668:77:668:84 | source(...) : String | Log4jJndiInjectionTest.java:668:68:668:84 | (...)... | -| Log4jJndiInjectionTest.java:669:62:669:69 | source(...) : String | Log4jJndiInjectionTest.java:669:53:669:69 | (...)... | -| Log4jJndiInjectionTest.java:670:47:670:54 | source(...) : String | Log4jJndiInjectionTest.java:670:38:670:54 | (...)... | -| Log4jJndiInjectionTest.java:671:107:671:114 | source(...) : String | Log4jJndiInjectionTest.java:671:98:671:114 | (...)... | -| Log4jJndiInjectionTest.java:672:92:672:99 | source(...) : String | Log4jJndiInjectionTest.java:672:83:672:99 | (...)... | -| Log4jJndiInjectionTest.java:673:77:673:84 | source(...) : String | Log4jJndiInjectionTest.java:673:68:673:84 | (...)... | -| Log4jJndiInjectionTest.java:674:62:674:69 | source(...) : String | Log4jJndiInjectionTest.java:674:53:674:69 | (...)... | -| Log4jJndiInjectionTest.java:675:47:675:54 | source(...) : String | Log4jJndiInjectionTest.java:675:38:675:54 | (...)... | -| Log4jJndiInjectionTest.java:676:122:676:129 | source(...) : String | Log4jJndiInjectionTest.java:676:113:676:129 | (...)... | -| Log4jJndiInjectionTest.java:677:107:677:114 | source(...) : String | Log4jJndiInjectionTest.java:677:98:677:114 | (...)... | -| Log4jJndiInjectionTest.java:678:92:678:99 | source(...) : String | Log4jJndiInjectionTest.java:678:83:678:99 | (...)... | -| Log4jJndiInjectionTest.java:679:77:679:84 | source(...) : String | Log4jJndiInjectionTest.java:679:68:679:84 | (...)... | -| Log4jJndiInjectionTest.java:680:62:680:69 | source(...) : String | Log4jJndiInjectionTest.java:680:53:680:69 | (...)... | -| Log4jJndiInjectionTest.java:681:47:681:54 | source(...) : String | Log4jJndiInjectionTest.java:681:38:681:54 | (...)... | -| Log4jJndiInjectionTest.java:682:137:682:144 | source(...) : String | Log4jJndiInjectionTest.java:682:128:682:144 | (...)... | -| Log4jJndiInjectionTest.java:683:122:683:129 | source(...) : String | Log4jJndiInjectionTest.java:683:113:683:129 | (...)... | -| Log4jJndiInjectionTest.java:684:107:684:114 | source(...) : String | Log4jJndiInjectionTest.java:684:98:684:114 | (...)... | -| Log4jJndiInjectionTest.java:685:92:685:99 | source(...) : String | Log4jJndiInjectionTest.java:685:83:685:99 | (...)... | -| Log4jJndiInjectionTest.java:686:77:686:84 | source(...) : String | Log4jJndiInjectionTest.java:686:68:686:84 | (...)... | -| Log4jJndiInjectionTest.java:687:62:687:69 | source(...) : String | Log4jJndiInjectionTest.java:687:53:687:69 | (...)... | -| Log4jJndiInjectionTest.java:688:47:688:54 | source(...) : String | Log4jJndiInjectionTest.java:688:38:688:54 | (...)... | -| Log4jJndiInjectionTest.java:689:152:689:159 | source(...) : String | Log4jJndiInjectionTest.java:689:143:689:159 | (...)... | -| Log4jJndiInjectionTest.java:690:137:690:144 | source(...) : String | Log4jJndiInjectionTest.java:690:128:690:144 | (...)... | -| Log4jJndiInjectionTest.java:691:122:691:129 | source(...) : String | Log4jJndiInjectionTest.java:691:113:691:129 | (...)... | -| Log4jJndiInjectionTest.java:692:107:692:114 | source(...) : String | Log4jJndiInjectionTest.java:692:98:692:114 | (...)... | -| Log4jJndiInjectionTest.java:693:92:693:99 | source(...) : String | Log4jJndiInjectionTest.java:693:83:693:99 | (...)... | -| Log4jJndiInjectionTest.java:694:77:694:84 | source(...) : String | Log4jJndiInjectionTest.java:694:68:694:84 | (...)... | -| Log4jJndiInjectionTest.java:695:62:695:69 | source(...) : String | Log4jJndiInjectionTest.java:695:53:695:69 | (...)... | -| Log4jJndiInjectionTest.java:696:47:696:54 | source(...) : String | Log4jJndiInjectionTest.java:696:38:696:54 | (...)... | -| Log4jJndiInjectionTest.java:697:167:697:174 | source(...) : String | Log4jJndiInjectionTest.java:697:158:697:174 | (...)... | -| Log4jJndiInjectionTest.java:698:152:698:159 | source(...) : String | Log4jJndiInjectionTest.java:698:143:698:159 | (...)... | -| Log4jJndiInjectionTest.java:699:137:699:144 | source(...) : String | Log4jJndiInjectionTest.java:699:128:699:144 | (...)... | -| Log4jJndiInjectionTest.java:700:122:700:129 | source(...) : String | Log4jJndiInjectionTest.java:700:113:700:129 | (...)... | -| Log4jJndiInjectionTest.java:701:107:701:114 | source(...) : String | Log4jJndiInjectionTest.java:701:98:701:114 | (...)... | -| Log4jJndiInjectionTest.java:702:92:702:99 | source(...) : String | Log4jJndiInjectionTest.java:702:83:702:99 | (...)... | -| Log4jJndiInjectionTest.java:703:77:703:84 | source(...) : String | Log4jJndiInjectionTest.java:703:68:703:84 | (...)... | -| Log4jJndiInjectionTest.java:704:62:704:69 | source(...) : String | Log4jJndiInjectionTest.java:704:53:704:69 | (...)... | -| Log4jJndiInjectionTest.java:705:47:705:54 | source(...) : String | Log4jJndiInjectionTest.java:705:38:705:54 | (...)... | -| Log4jJndiInjectionTest.java:706:182:706:189 | source(...) : String | Log4jJndiInjectionTest.java:706:173:706:189 | (...)... | -| Log4jJndiInjectionTest.java:707:167:707:174 | source(...) : String | Log4jJndiInjectionTest.java:707:158:707:174 | (...)... | -| Log4jJndiInjectionTest.java:708:152:708:159 | source(...) : String | Log4jJndiInjectionTest.java:708:143:708:159 | (...)... | -| Log4jJndiInjectionTest.java:709:137:709:144 | source(...) : String | Log4jJndiInjectionTest.java:709:128:709:144 | (...)... | -| Log4jJndiInjectionTest.java:710:122:710:129 | source(...) : String | Log4jJndiInjectionTest.java:710:113:710:129 | (...)... | -| Log4jJndiInjectionTest.java:711:107:711:114 | source(...) : String | Log4jJndiInjectionTest.java:711:98:711:114 | (...)... | -| Log4jJndiInjectionTest.java:712:92:712:99 | source(...) : String | Log4jJndiInjectionTest.java:712:83:712:99 | (...)... | -| Log4jJndiInjectionTest.java:713:77:713:84 | source(...) : String | Log4jJndiInjectionTest.java:713:68:713:84 | (...)... | -| Log4jJndiInjectionTest.java:714:62:714:69 | source(...) : String | Log4jJndiInjectionTest.java:714:53:714:69 | (...)... | -| Log4jJndiInjectionTest.java:715:47:715:54 | source(...) : String | Log4jJndiInjectionTest.java:715:38:715:54 | (...)... | -| Log4jJndiInjectionTest.java:716:47:716:54 | source(...) : String | Log4jJndiInjectionTest.java:716:38:716:54 | (...)... | -| Log4jJndiInjectionTest.java:717:67:717:74 | source(...) : String | Log4jJndiInjectionTest.java:717:53:717:74 | (...)... | -| Log4jJndiInjectionTest.java:718:47:718:54 | source(...) : String | Log4jJndiInjectionTest.java:718:38:718:54 | (...)... | -| Log4jJndiInjectionTest.java:719:52:719:59 | source(...) : String | Log4jJndiInjectionTest.java:719:38:719:59 | (...)... | -| Log4jJndiInjectionTest.java:720:52:720:59 | source(...) : String | Log4jJndiInjectionTest.java:720:38:720:59 | (...)... | -| Log4jJndiInjectionTest.java:721:41:721:48 | source(...) : String | Log4jJndiInjectionTest.java:721:26:721:48 | (...)... | -| Log4jJndiInjectionTest.java:722:41:722:48 | source(...) : String | Log4jJndiInjectionTest.java:722:26:722:48 | (...)... | -| Log4jJndiInjectionTest.java:723:56:723:63 | source(...) : String | Log4jJndiInjectionTest.java:723:41:723:63 | (...)... | -| Log4jJndiInjectionTest.java:724:56:724:63 | source(...) : String | Log4jJndiInjectionTest.java:724:41:724:63 | (...)... | -| Log4jJndiInjectionTest.java:725:51:725:58 | source(...) : String | Log4jJndiInjectionTest.java:725:41:725:58 | (...)... | -| Log4jJndiInjectionTest.java:726:59:726:66 | source(...) : String | Log4jJndiInjectionTest.java:726:41:726:66 | (...)... | -| Log4jJndiInjectionTest.java:727:59:727:66 | source(...) : String | Log4jJndiInjectionTest.java:727:41:727:66 | (...)... | -| Log4jJndiInjectionTest.java:729:50:729:57 | source(...) : String | Log4jJndiInjectionTest.java:729:41:729:57 | (...)... | -| Log4jJndiInjectionTest.java:730:50:730:57 | source(...) : String | Log4jJndiInjectionTest.java:730:41:730:57 | (...)... | -| Log4jJndiInjectionTest.java:731:56:731:78 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:731:56:731:78 | new Object[] | -| Log4jJndiInjectionTest.java:731:70:731:77 | source(...) : String | Log4jJndiInjectionTest.java:731:56:731:78 | {...} : Object[] [[]] : String | -| Log4jJndiInjectionTest.java:732:65:732:72 | source(...) : String | Log4jJndiInjectionTest.java:732:56:732:72 | (...)... | -| Log4jJndiInjectionTest.java:733:50:733:57 | source(...) : String | Log4jJndiInjectionTest.java:733:41:733:57 | (...)... | -| Log4jJndiInjectionTest.java:734:80:734:87 | source(...) : String | Log4jJndiInjectionTest.java:734:71:734:87 | (...)... | -| Log4jJndiInjectionTest.java:735:65:735:72 | source(...) : String | Log4jJndiInjectionTest.java:735:56:735:72 | (...)... | -| Log4jJndiInjectionTest.java:736:50:736:57 | source(...) : String | Log4jJndiInjectionTest.java:736:41:736:57 | (...)... | -| Log4jJndiInjectionTest.java:737:95:737:102 | source(...) : String | Log4jJndiInjectionTest.java:737:86:737:102 | (...)... | -| Log4jJndiInjectionTest.java:738:80:738:87 | source(...) : String | Log4jJndiInjectionTest.java:738:71:738:87 | (...)... | -| Log4jJndiInjectionTest.java:739:65:739:72 | source(...) : String | Log4jJndiInjectionTest.java:739:56:739:72 | (...)... | -| Log4jJndiInjectionTest.java:740:50:740:57 | source(...) : String | Log4jJndiInjectionTest.java:740:41:740:57 | (...)... | -| Log4jJndiInjectionTest.java:741:110:741:117 | source(...) : String | Log4jJndiInjectionTest.java:741:101:741:117 | (...)... | -| Log4jJndiInjectionTest.java:742:95:742:102 | source(...) : String | Log4jJndiInjectionTest.java:742:86:742:102 | (...)... | -| Log4jJndiInjectionTest.java:743:80:743:87 | source(...) : String | Log4jJndiInjectionTest.java:743:71:743:87 | (...)... | -| Log4jJndiInjectionTest.java:744:65:744:72 | source(...) : String | Log4jJndiInjectionTest.java:744:56:744:72 | (...)... | -| Log4jJndiInjectionTest.java:745:50:745:57 | source(...) : String | Log4jJndiInjectionTest.java:745:41:745:57 | (...)... | -| Log4jJndiInjectionTest.java:746:125:746:132 | source(...) : String | Log4jJndiInjectionTest.java:746:116:746:132 | (...)... | -| Log4jJndiInjectionTest.java:747:110:747:117 | source(...) : String | Log4jJndiInjectionTest.java:747:101:747:117 | (...)... | -| Log4jJndiInjectionTest.java:748:95:748:102 | source(...) : String | Log4jJndiInjectionTest.java:748:86:748:102 | (...)... | -| Log4jJndiInjectionTest.java:749:80:749:87 | source(...) : String | Log4jJndiInjectionTest.java:749:71:749:87 | (...)... | -| Log4jJndiInjectionTest.java:750:65:750:72 | source(...) : String | Log4jJndiInjectionTest.java:750:56:750:72 | (...)... | -| Log4jJndiInjectionTest.java:751:50:751:57 | source(...) : String | Log4jJndiInjectionTest.java:751:41:751:57 | (...)... | -| Log4jJndiInjectionTest.java:752:140:752:147 | source(...) : String | Log4jJndiInjectionTest.java:752:131:752:147 | (...)... | -| Log4jJndiInjectionTest.java:753:125:753:132 | source(...) : String | Log4jJndiInjectionTest.java:753:116:753:132 | (...)... | -| Log4jJndiInjectionTest.java:754:110:754:117 | source(...) : String | Log4jJndiInjectionTest.java:754:101:754:117 | (...)... | -| Log4jJndiInjectionTest.java:755:95:755:102 | source(...) : String | Log4jJndiInjectionTest.java:755:86:755:102 | (...)... | -| Log4jJndiInjectionTest.java:756:80:756:87 | source(...) : String | Log4jJndiInjectionTest.java:756:71:756:87 | (...)... | -| Log4jJndiInjectionTest.java:757:65:757:72 | source(...) : String | Log4jJndiInjectionTest.java:757:56:757:72 | (...)... | -| Log4jJndiInjectionTest.java:758:50:758:57 | source(...) : String | Log4jJndiInjectionTest.java:758:41:758:57 | (...)... | -| Log4jJndiInjectionTest.java:759:155:759:162 | source(...) : String | Log4jJndiInjectionTest.java:759:146:759:162 | (...)... | -| Log4jJndiInjectionTest.java:760:140:760:147 | source(...) : String | Log4jJndiInjectionTest.java:760:131:760:147 | (...)... | -| Log4jJndiInjectionTest.java:761:125:761:132 | source(...) : String | Log4jJndiInjectionTest.java:761:116:761:132 | (...)... | -| Log4jJndiInjectionTest.java:762:110:762:117 | source(...) : String | Log4jJndiInjectionTest.java:762:101:762:117 | (...)... | -| Log4jJndiInjectionTest.java:763:95:763:102 | source(...) : String | Log4jJndiInjectionTest.java:763:86:763:102 | (...)... | -| Log4jJndiInjectionTest.java:764:80:764:87 | source(...) : String | Log4jJndiInjectionTest.java:764:71:764:87 | (...)... | -| Log4jJndiInjectionTest.java:765:65:765:72 | source(...) : String | Log4jJndiInjectionTest.java:765:56:765:72 | (...)... | -| Log4jJndiInjectionTest.java:766:50:766:57 | source(...) : String | Log4jJndiInjectionTest.java:766:41:766:57 | (...)... | -| Log4jJndiInjectionTest.java:767:170:767:177 | source(...) : String | Log4jJndiInjectionTest.java:767:161:767:177 | (...)... | -| Log4jJndiInjectionTest.java:768:155:768:162 | source(...) : String | Log4jJndiInjectionTest.java:768:146:768:162 | (...)... | -| Log4jJndiInjectionTest.java:769:140:769:147 | source(...) : String | Log4jJndiInjectionTest.java:769:131:769:147 | (...)... | -| Log4jJndiInjectionTest.java:770:125:770:132 | source(...) : String | Log4jJndiInjectionTest.java:770:116:770:132 | (...)... | -| Log4jJndiInjectionTest.java:771:110:771:117 | source(...) : String | Log4jJndiInjectionTest.java:771:101:771:117 | (...)... | -| Log4jJndiInjectionTest.java:772:95:772:102 | source(...) : String | Log4jJndiInjectionTest.java:772:86:772:102 | (...)... | -| Log4jJndiInjectionTest.java:773:80:773:87 | source(...) : String | Log4jJndiInjectionTest.java:773:71:773:87 | (...)... | -| Log4jJndiInjectionTest.java:774:65:774:72 | source(...) : String | Log4jJndiInjectionTest.java:774:56:774:72 | (...)... | -| Log4jJndiInjectionTest.java:775:50:775:57 | source(...) : String | Log4jJndiInjectionTest.java:775:41:775:57 | (...)... | -| Log4jJndiInjectionTest.java:776:185:776:192 | source(...) : String | Log4jJndiInjectionTest.java:776:176:776:192 | (...)... | -| Log4jJndiInjectionTest.java:777:170:777:177 | source(...) : String | Log4jJndiInjectionTest.java:777:161:777:177 | (...)... | -| Log4jJndiInjectionTest.java:778:155:778:162 | source(...) : String | Log4jJndiInjectionTest.java:778:146:778:162 | (...)... | -| Log4jJndiInjectionTest.java:779:140:779:147 | source(...) : String | Log4jJndiInjectionTest.java:779:131:779:147 | (...)... | -| Log4jJndiInjectionTest.java:780:125:780:132 | source(...) : String | Log4jJndiInjectionTest.java:780:116:780:132 | (...)... | -| Log4jJndiInjectionTest.java:781:110:781:117 | source(...) : String | Log4jJndiInjectionTest.java:781:101:781:117 | (...)... | -| Log4jJndiInjectionTest.java:782:95:782:102 | source(...) : String | Log4jJndiInjectionTest.java:782:86:782:102 | (...)... | -| Log4jJndiInjectionTest.java:783:80:783:87 | source(...) : String | Log4jJndiInjectionTest.java:783:71:783:87 | (...)... | -| Log4jJndiInjectionTest.java:784:65:784:72 | source(...) : String | Log4jJndiInjectionTest.java:784:56:784:72 | (...)... | -| Log4jJndiInjectionTest.java:785:50:785:57 | source(...) : String | Log4jJndiInjectionTest.java:785:41:785:57 | (...)... | -| Log4jJndiInjectionTest.java:786:50:786:57 | source(...) : String | Log4jJndiInjectionTest.java:786:41:786:57 | (...)... | -| Log4jJndiInjectionTest.java:787:70:787:77 | source(...) : String | Log4jJndiInjectionTest.java:787:56:787:77 | (...)... | -| Log4jJndiInjectionTest.java:788:50:788:57 | source(...) : String | Log4jJndiInjectionTest.java:788:41:788:57 | (...)... | -| Log4jJndiInjectionTest.java:789:55:789:62 | source(...) : String | Log4jJndiInjectionTest.java:789:41:789:62 | (...)... | -| Log4jJndiInjectionTest.java:790:55:790:62 | source(...) : String | Log4jJndiInjectionTest.java:790:41:790:62 | (...)... | -| Log4jJndiInjectionTest.java:791:44:791:51 | source(...) : String | Log4jJndiInjectionTest.java:791:26:791:51 | (...)... | -| Log4jJndiInjectionTest.java:792:44:792:51 | source(...) : String | Log4jJndiInjectionTest.java:792:26:792:51 | (...)... | -| Log4jJndiInjectionTest.java:793:36:793:43 | source(...) : String | Log4jJndiInjectionTest.java:793:26:793:43 | (...)... | -| Log4jJndiInjectionTest.java:794:36:794:43 | source(...) : String | Log4jJndiInjectionTest.java:794:26:794:43 | (...)... | -| Log4jJndiInjectionTest.java:797:35:797:42 | source(...) : String | Log4jJndiInjectionTest.java:797:26:797:42 | (...)... | -| Log4jJndiInjectionTest.java:798:35:798:42 | source(...) : String | Log4jJndiInjectionTest.java:798:26:798:42 | (...)... | -| Log4jJndiInjectionTest.java:799:41:799:63 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:799:41:799:63 | new Object[] | -| Log4jJndiInjectionTest.java:799:55:799:62 | source(...) : String | Log4jJndiInjectionTest.java:799:41:799:63 | {...} : Object[] [[]] : String | -| Log4jJndiInjectionTest.java:800:50:800:57 | source(...) : String | Log4jJndiInjectionTest.java:800:41:800:57 | (...)... | -| Log4jJndiInjectionTest.java:801:35:801:42 | source(...) : String | Log4jJndiInjectionTest.java:801:26:801:42 | (...)... | -| Log4jJndiInjectionTest.java:802:65:802:72 | source(...) : String | Log4jJndiInjectionTest.java:802:56:802:72 | (...)... | -| Log4jJndiInjectionTest.java:803:50:803:57 | source(...) : String | Log4jJndiInjectionTest.java:803:41:803:57 | (...)... | -| Log4jJndiInjectionTest.java:804:35:804:42 | source(...) : String | Log4jJndiInjectionTest.java:804:26:804:42 | (...)... | -| Log4jJndiInjectionTest.java:805:80:805:87 | source(...) : String | Log4jJndiInjectionTest.java:805:71:805:87 | (...)... | -| Log4jJndiInjectionTest.java:806:65:806:72 | source(...) : String | Log4jJndiInjectionTest.java:806:56:806:72 | (...)... | -| Log4jJndiInjectionTest.java:807:50:807:57 | source(...) : String | Log4jJndiInjectionTest.java:807:41:807:57 | (...)... | -| Log4jJndiInjectionTest.java:808:35:808:42 | source(...) : String | Log4jJndiInjectionTest.java:808:26:808:42 | (...)... | -| Log4jJndiInjectionTest.java:809:95:809:102 | source(...) : String | Log4jJndiInjectionTest.java:809:86:809:102 | (...)... | -| Log4jJndiInjectionTest.java:810:80:810:87 | source(...) : String | Log4jJndiInjectionTest.java:810:71:810:87 | (...)... | -| Log4jJndiInjectionTest.java:811:65:811:72 | source(...) : String | Log4jJndiInjectionTest.java:811:56:811:72 | (...)... | -| Log4jJndiInjectionTest.java:812:50:812:57 | source(...) : String | Log4jJndiInjectionTest.java:812:41:812:57 | (...)... | -| Log4jJndiInjectionTest.java:813:35:813:42 | source(...) : String | Log4jJndiInjectionTest.java:813:26:813:42 | (...)... | -| Log4jJndiInjectionTest.java:814:110:814:117 | source(...) : String | Log4jJndiInjectionTest.java:814:101:814:117 | (...)... | -| Log4jJndiInjectionTest.java:815:95:815:102 | source(...) : String | Log4jJndiInjectionTest.java:815:86:815:102 | (...)... | -| Log4jJndiInjectionTest.java:816:80:816:87 | source(...) : String | Log4jJndiInjectionTest.java:816:71:816:87 | (...)... | -| Log4jJndiInjectionTest.java:817:65:817:72 | source(...) : String | Log4jJndiInjectionTest.java:817:56:817:72 | (...)... | -| Log4jJndiInjectionTest.java:818:50:818:57 | source(...) : String | Log4jJndiInjectionTest.java:818:41:818:57 | (...)... | -| Log4jJndiInjectionTest.java:819:35:819:42 | source(...) : String | Log4jJndiInjectionTest.java:819:26:819:42 | (...)... | -| Log4jJndiInjectionTest.java:820:125:820:132 | source(...) : String | Log4jJndiInjectionTest.java:820:116:820:132 | (...)... | -| Log4jJndiInjectionTest.java:821:110:821:117 | source(...) : String | Log4jJndiInjectionTest.java:821:101:821:117 | (...)... | -| Log4jJndiInjectionTest.java:822:95:822:102 | source(...) : String | Log4jJndiInjectionTest.java:822:86:822:102 | (...)... | -| Log4jJndiInjectionTest.java:823:80:823:87 | source(...) : String | Log4jJndiInjectionTest.java:823:71:823:87 | (...)... | -| Log4jJndiInjectionTest.java:824:65:824:72 | source(...) : String | Log4jJndiInjectionTest.java:824:56:824:72 | (...)... | -| Log4jJndiInjectionTest.java:825:50:825:57 | source(...) : String | Log4jJndiInjectionTest.java:825:41:825:57 | (...)... | -| Log4jJndiInjectionTest.java:826:35:826:42 | source(...) : String | Log4jJndiInjectionTest.java:826:26:826:42 | (...)... | -| Log4jJndiInjectionTest.java:827:140:827:147 | source(...) : String | Log4jJndiInjectionTest.java:827:131:827:147 | (...)... | -| Log4jJndiInjectionTest.java:828:125:828:132 | source(...) : String | Log4jJndiInjectionTest.java:828:116:828:132 | (...)... | -| Log4jJndiInjectionTest.java:829:110:829:117 | source(...) : String | Log4jJndiInjectionTest.java:829:101:829:117 | (...)... | -| Log4jJndiInjectionTest.java:830:95:830:102 | source(...) : String | Log4jJndiInjectionTest.java:830:86:830:102 | (...)... | -| Log4jJndiInjectionTest.java:831:80:831:87 | source(...) : String | Log4jJndiInjectionTest.java:831:71:831:87 | (...)... | -| Log4jJndiInjectionTest.java:832:65:832:72 | source(...) : String | Log4jJndiInjectionTest.java:832:56:832:72 | (...)... | -| Log4jJndiInjectionTest.java:833:50:833:57 | source(...) : String | Log4jJndiInjectionTest.java:833:41:833:57 | (...)... | -| Log4jJndiInjectionTest.java:834:35:834:42 | source(...) : String | Log4jJndiInjectionTest.java:834:26:834:42 | (...)... | -| Log4jJndiInjectionTest.java:835:155:835:162 | source(...) : String | Log4jJndiInjectionTest.java:835:146:835:162 | (...)... | -| Log4jJndiInjectionTest.java:836:140:836:147 | source(...) : String | Log4jJndiInjectionTest.java:836:131:836:147 | (...)... | -| Log4jJndiInjectionTest.java:837:125:837:132 | source(...) : String | Log4jJndiInjectionTest.java:837:116:837:132 | (...)... | -| Log4jJndiInjectionTest.java:838:110:838:117 | source(...) : String | Log4jJndiInjectionTest.java:838:101:838:117 | (...)... | -| Log4jJndiInjectionTest.java:839:95:839:102 | source(...) : String | Log4jJndiInjectionTest.java:839:86:839:102 | (...)... | -| Log4jJndiInjectionTest.java:840:80:840:87 | source(...) : String | Log4jJndiInjectionTest.java:840:71:840:87 | (...)... | -| Log4jJndiInjectionTest.java:841:65:841:72 | source(...) : String | Log4jJndiInjectionTest.java:841:56:841:72 | (...)... | -| Log4jJndiInjectionTest.java:842:50:842:57 | source(...) : String | Log4jJndiInjectionTest.java:842:41:842:57 | (...)... | -| Log4jJndiInjectionTest.java:843:35:843:42 | source(...) : String | Log4jJndiInjectionTest.java:843:26:843:42 | (...)... | -| Log4jJndiInjectionTest.java:844:170:844:177 | source(...) : String | Log4jJndiInjectionTest.java:844:161:844:177 | (...)... | -| Log4jJndiInjectionTest.java:845:155:845:162 | source(...) : String | Log4jJndiInjectionTest.java:845:146:845:162 | (...)... | -| Log4jJndiInjectionTest.java:846:140:846:147 | source(...) : String | Log4jJndiInjectionTest.java:846:131:846:147 | (...)... | -| Log4jJndiInjectionTest.java:847:125:847:132 | source(...) : String | Log4jJndiInjectionTest.java:847:116:847:132 | (...)... | -| Log4jJndiInjectionTest.java:848:110:848:117 | source(...) : String | Log4jJndiInjectionTest.java:848:101:848:117 | (...)... | -| Log4jJndiInjectionTest.java:849:95:849:102 | source(...) : String | Log4jJndiInjectionTest.java:849:86:849:102 | (...)... | -| Log4jJndiInjectionTest.java:850:80:850:87 | source(...) : String | Log4jJndiInjectionTest.java:850:71:850:87 | (...)... | -| Log4jJndiInjectionTest.java:851:65:851:72 | source(...) : String | Log4jJndiInjectionTest.java:851:56:851:72 | (...)... | -| Log4jJndiInjectionTest.java:852:50:852:57 | source(...) : String | Log4jJndiInjectionTest.java:852:41:852:57 | (...)... | -| Log4jJndiInjectionTest.java:853:35:853:42 | source(...) : String | Log4jJndiInjectionTest.java:853:26:853:42 | (...)... | -| Log4jJndiInjectionTest.java:854:35:854:42 | source(...) : String | Log4jJndiInjectionTest.java:854:26:854:42 | (...)... | -| Log4jJndiInjectionTest.java:855:55:855:62 | source(...) : String | Log4jJndiInjectionTest.java:855:41:855:62 | (...)... | -| Log4jJndiInjectionTest.java:856:35:856:42 | source(...) : String | Log4jJndiInjectionTest.java:856:26:856:42 | (...)... | -| Log4jJndiInjectionTest.java:857:40:857:47 | source(...) : String | Log4jJndiInjectionTest.java:857:26:857:47 | (...)... | -| Log4jJndiInjectionTest.java:858:40:858:47 | source(...) : String | Log4jJndiInjectionTest.java:858:26:858:47 | (...)... | -| Log4jJndiInjectionTest.java:859:40:859:47 | source(...) : String | Log4jJndiInjectionTest.java:859:25:859:47 | (...)... | -| Log4jJndiInjectionTest.java:860:40:860:47 | source(...) : String | Log4jJndiInjectionTest.java:860:25:860:47 | (...)... | -| Log4jJndiInjectionTest.java:861:55:861:62 | source(...) : String | Log4jJndiInjectionTest.java:861:40:861:62 | (...)... | -| Log4jJndiInjectionTest.java:862:55:862:62 | source(...) : String | Log4jJndiInjectionTest.java:862:40:862:62 | (...)... | -| Log4jJndiInjectionTest.java:863:50:863:57 | source(...) : String | Log4jJndiInjectionTest.java:863:40:863:57 | (...)... | -| Log4jJndiInjectionTest.java:864:58:864:65 | source(...) : String | Log4jJndiInjectionTest.java:864:40:864:65 | (...)... | -| Log4jJndiInjectionTest.java:865:58:865:65 | source(...) : String | Log4jJndiInjectionTest.java:865:40:865:65 | (...)... | -| Log4jJndiInjectionTest.java:867:49:867:56 | source(...) : String | Log4jJndiInjectionTest.java:867:40:867:56 | (...)... | -| Log4jJndiInjectionTest.java:868:49:868:56 | source(...) : String | Log4jJndiInjectionTest.java:868:40:868:56 | (...)... | -| Log4jJndiInjectionTest.java:869:55:869:77 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:869:55:869:77 | new Object[] | -| Log4jJndiInjectionTest.java:869:69:869:76 | source(...) : String | Log4jJndiInjectionTest.java:869:55:869:77 | {...} : Object[] [[]] : String | -| Log4jJndiInjectionTest.java:870:64:870:71 | source(...) : String | Log4jJndiInjectionTest.java:870:55:870:71 | (...)... | -| Log4jJndiInjectionTest.java:871:49:871:56 | source(...) : String | Log4jJndiInjectionTest.java:871:40:871:56 | (...)... | -| Log4jJndiInjectionTest.java:872:79:872:86 | source(...) : String | Log4jJndiInjectionTest.java:872:70:872:86 | (...)... | -| Log4jJndiInjectionTest.java:873:64:873:71 | source(...) : String | Log4jJndiInjectionTest.java:873:55:873:71 | (...)... | -| Log4jJndiInjectionTest.java:874:49:874:56 | source(...) : String | Log4jJndiInjectionTest.java:874:40:874:56 | (...)... | -| Log4jJndiInjectionTest.java:875:94:875:101 | source(...) : String | Log4jJndiInjectionTest.java:875:85:875:101 | (...)... | -| Log4jJndiInjectionTest.java:876:79:876:86 | source(...) : String | Log4jJndiInjectionTest.java:876:70:876:86 | (...)... | -| Log4jJndiInjectionTest.java:877:64:877:71 | source(...) : String | Log4jJndiInjectionTest.java:877:55:877:71 | (...)... | -| Log4jJndiInjectionTest.java:878:49:878:56 | source(...) : String | Log4jJndiInjectionTest.java:878:40:878:56 | (...)... | -| Log4jJndiInjectionTest.java:879:109:879:116 | source(...) : String | Log4jJndiInjectionTest.java:879:100:879:116 | (...)... | -| Log4jJndiInjectionTest.java:880:94:880:101 | source(...) : String | Log4jJndiInjectionTest.java:880:85:880:101 | (...)... | -| Log4jJndiInjectionTest.java:881:79:881:86 | source(...) : String | Log4jJndiInjectionTest.java:881:70:881:86 | (...)... | -| Log4jJndiInjectionTest.java:882:64:882:71 | source(...) : String | Log4jJndiInjectionTest.java:882:55:882:71 | (...)... | -| Log4jJndiInjectionTest.java:883:49:883:56 | source(...) : String | Log4jJndiInjectionTest.java:883:40:883:56 | (...)... | -| Log4jJndiInjectionTest.java:884:124:884:131 | source(...) : String | Log4jJndiInjectionTest.java:884:115:884:131 | (...)... | -| Log4jJndiInjectionTest.java:885:109:885:116 | source(...) : String | Log4jJndiInjectionTest.java:885:100:885:116 | (...)... | -| Log4jJndiInjectionTest.java:886:94:886:101 | source(...) : String | Log4jJndiInjectionTest.java:886:85:886:101 | (...)... | -| Log4jJndiInjectionTest.java:887:79:887:86 | source(...) : String | Log4jJndiInjectionTest.java:887:70:887:86 | (...)... | -| Log4jJndiInjectionTest.java:888:64:888:71 | source(...) : String | Log4jJndiInjectionTest.java:888:55:888:71 | (...)... | -| Log4jJndiInjectionTest.java:889:49:889:56 | source(...) : String | Log4jJndiInjectionTest.java:889:40:889:56 | (...)... | -| Log4jJndiInjectionTest.java:890:139:890:146 | source(...) : String | Log4jJndiInjectionTest.java:890:130:890:146 | (...)... | -| Log4jJndiInjectionTest.java:891:124:891:131 | source(...) : String | Log4jJndiInjectionTest.java:891:115:891:131 | (...)... | -| Log4jJndiInjectionTest.java:892:109:892:116 | source(...) : String | Log4jJndiInjectionTest.java:892:100:892:116 | (...)... | -| Log4jJndiInjectionTest.java:893:94:893:101 | source(...) : String | Log4jJndiInjectionTest.java:893:85:893:101 | (...)... | -| Log4jJndiInjectionTest.java:894:79:894:86 | source(...) : String | Log4jJndiInjectionTest.java:894:70:894:86 | (...)... | -| Log4jJndiInjectionTest.java:895:64:895:71 | source(...) : String | Log4jJndiInjectionTest.java:895:55:895:71 | (...)... | -| Log4jJndiInjectionTest.java:896:49:896:56 | source(...) : String | Log4jJndiInjectionTest.java:896:40:896:56 | (...)... | -| Log4jJndiInjectionTest.java:897:154:897:161 | source(...) : String | Log4jJndiInjectionTest.java:897:145:897:161 | (...)... | -| Log4jJndiInjectionTest.java:898:139:898:146 | source(...) : String | Log4jJndiInjectionTest.java:898:130:898:146 | (...)... | -| Log4jJndiInjectionTest.java:899:124:899:131 | source(...) : String | Log4jJndiInjectionTest.java:899:115:899:131 | (...)... | -| Log4jJndiInjectionTest.java:900:109:900:116 | source(...) : String | Log4jJndiInjectionTest.java:900:100:900:116 | (...)... | -| Log4jJndiInjectionTest.java:901:94:901:101 | source(...) : String | Log4jJndiInjectionTest.java:901:85:901:101 | (...)... | -| Log4jJndiInjectionTest.java:902:79:902:86 | source(...) : String | Log4jJndiInjectionTest.java:902:70:902:86 | (...)... | -| Log4jJndiInjectionTest.java:903:64:903:71 | source(...) : String | Log4jJndiInjectionTest.java:903:55:903:71 | (...)... | -| Log4jJndiInjectionTest.java:904:49:904:56 | source(...) : String | Log4jJndiInjectionTest.java:904:40:904:56 | (...)... | -| Log4jJndiInjectionTest.java:905:169:905:176 | source(...) : String | Log4jJndiInjectionTest.java:905:160:905:176 | (...)... | -| Log4jJndiInjectionTest.java:906:154:906:161 | source(...) : String | Log4jJndiInjectionTest.java:906:145:906:161 | (...)... | -| Log4jJndiInjectionTest.java:907:139:907:146 | source(...) : String | Log4jJndiInjectionTest.java:907:130:907:146 | (...)... | -| Log4jJndiInjectionTest.java:908:124:908:131 | source(...) : String | Log4jJndiInjectionTest.java:908:115:908:131 | (...)... | -| Log4jJndiInjectionTest.java:909:109:909:116 | source(...) : String | Log4jJndiInjectionTest.java:909:100:909:116 | (...)... | -| Log4jJndiInjectionTest.java:910:94:910:101 | source(...) : String | Log4jJndiInjectionTest.java:910:85:910:101 | (...)... | -| Log4jJndiInjectionTest.java:911:79:911:86 | source(...) : String | Log4jJndiInjectionTest.java:911:70:911:86 | (...)... | -| Log4jJndiInjectionTest.java:912:64:912:71 | source(...) : String | Log4jJndiInjectionTest.java:912:55:912:71 | (...)... | -| Log4jJndiInjectionTest.java:913:49:913:56 | source(...) : String | Log4jJndiInjectionTest.java:913:40:913:56 | (...)... | -| Log4jJndiInjectionTest.java:914:184:914:191 | source(...) : String | Log4jJndiInjectionTest.java:914:175:914:191 | (...)... | -| Log4jJndiInjectionTest.java:915:169:915:176 | source(...) : String | Log4jJndiInjectionTest.java:915:160:915:176 | (...)... | -| Log4jJndiInjectionTest.java:916:154:916:161 | source(...) : String | Log4jJndiInjectionTest.java:916:145:916:161 | (...)... | -| Log4jJndiInjectionTest.java:917:139:917:146 | source(...) : String | Log4jJndiInjectionTest.java:917:130:917:146 | (...)... | -| Log4jJndiInjectionTest.java:918:124:918:131 | source(...) : String | Log4jJndiInjectionTest.java:918:115:918:131 | (...)... | -| Log4jJndiInjectionTest.java:919:109:919:116 | source(...) : String | Log4jJndiInjectionTest.java:919:100:919:116 | (...)... | -| Log4jJndiInjectionTest.java:920:94:920:101 | source(...) : String | Log4jJndiInjectionTest.java:920:85:920:101 | (...)... | -| Log4jJndiInjectionTest.java:921:79:921:86 | source(...) : String | Log4jJndiInjectionTest.java:921:70:921:86 | (...)... | -| Log4jJndiInjectionTest.java:922:64:922:71 | source(...) : String | Log4jJndiInjectionTest.java:922:55:922:71 | (...)... | -| Log4jJndiInjectionTest.java:923:49:923:56 | source(...) : String | Log4jJndiInjectionTest.java:923:40:923:56 | (...)... | -| Log4jJndiInjectionTest.java:924:49:924:56 | source(...) : String | Log4jJndiInjectionTest.java:924:40:924:56 | (...)... | -| Log4jJndiInjectionTest.java:925:69:925:76 | source(...) : String | Log4jJndiInjectionTest.java:925:55:925:76 | (...)... | -| Log4jJndiInjectionTest.java:926:49:926:56 | source(...) : String | Log4jJndiInjectionTest.java:926:40:926:56 | (...)... | -| Log4jJndiInjectionTest.java:927:54:927:61 | source(...) : String | Log4jJndiInjectionTest.java:927:40:927:61 | (...)... | -| Log4jJndiInjectionTest.java:928:54:928:61 | source(...) : String | Log4jJndiInjectionTest.java:928:40:928:61 | (...)... | -| Log4jJndiInjectionTest.java:929:43:929:50 | source(...) : String | Log4jJndiInjectionTest.java:929:25:929:50 | (...)... | -| Log4jJndiInjectionTest.java:930:43:930:50 | source(...) : String | Log4jJndiInjectionTest.java:930:25:930:50 | (...)... | -| Log4jJndiInjectionTest.java:931:35:931:42 | source(...) : String | Log4jJndiInjectionTest.java:931:25:931:42 | (...)... | -| Log4jJndiInjectionTest.java:932:35:932:42 | source(...) : String | Log4jJndiInjectionTest.java:932:25:932:42 | (...)... | -| Log4jJndiInjectionTest.java:935:34:935:41 | source(...) : String | Log4jJndiInjectionTest.java:935:25:935:41 | (...)... | -| Log4jJndiInjectionTest.java:936:34:936:41 | source(...) : String | Log4jJndiInjectionTest.java:936:25:936:41 | (...)... | -| Log4jJndiInjectionTest.java:937:40:937:62 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:937:40:937:62 | new Object[] | -| Log4jJndiInjectionTest.java:937:54:937:61 | source(...) : String | Log4jJndiInjectionTest.java:937:40:937:62 | {...} : Object[] [[]] : String | -| Log4jJndiInjectionTest.java:938:49:938:56 | source(...) : String | Log4jJndiInjectionTest.java:938:40:938:56 | (...)... | -| Log4jJndiInjectionTest.java:939:34:939:41 | source(...) : String | Log4jJndiInjectionTest.java:939:25:939:41 | (...)... | -| Log4jJndiInjectionTest.java:940:64:940:71 | source(...) : String | Log4jJndiInjectionTest.java:940:55:940:71 | (...)... | -| Log4jJndiInjectionTest.java:941:49:941:56 | source(...) : String | Log4jJndiInjectionTest.java:941:40:941:56 | (...)... | -| Log4jJndiInjectionTest.java:942:34:942:41 | source(...) : String | Log4jJndiInjectionTest.java:942:25:942:41 | (...)... | -| Log4jJndiInjectionTest.java:943:79:943:86 | source(...) : String | Log4jJndiInjectionTest.java:943:70:943:86 | (...)... | -| Log4jJndiInjectionTest.java:944:64:944:71 | source(...) : String | Log4jJndiInjectionTest.java:944:55:944:71 | (...)... | -| Log4jJndiInjectionTest.java:945:49:945:56 | source(...) : String | Log4jJndiInjectionTest.java:945:40:945:56 | (...)... | -| Log4jJndiInjectionTest.java:946:34:946:41 | source(...) : String | Log4jJndiInjectionTest.java:946:25:946:41 | (...)... | -| Log4jJndiInjectionTest.java:947:94:947:101 | source(...) : String | Log4jJndiInjectionTest.java:947:85:947:101 | (...)... | -| Log4jJndiInjectionTest.java:948:79:948:86 | source(...) : String | Log4jJndiInjectionTest.java:948:70:948:86 | (...)... | -| Log4jJndiInjectionTest.java:949:64:949:71 | source(...) : String | Log4jJndiInjectionTest.java:949:55:949:71 | (...)... | -| Log4jJndiInjectionTest.java:950:49:950:56 | source(...) : String | Log4jJndiInjectionTest.java:950:40:950:56 | (...)... | -| Log4jJndiInjectionTest.java:951:34:951:41 | source(...) : String | Log4jJndiInjectionTest.java:951:25:951:41 | (...)... | -| Log4jJndiInjectionTest.java:952:109:952:116 | source(...) : String | Log4jJndiInjectionTest.java:952:100:952:116 | (...)... | -| Log4jJndiInjectionTest.java:953:94:953:101 | source(...) : String | Log4jJndiInjectionTest.java:953:85:953:101 | (...)... | -| Log4jJndiInjectionTest.java:954:79:954:86 | source(...) : String | Log4jJndiInjectionTest.java:954:70:954:86 | (...)... | -| Log4jJndiInjectionTest.java:955:64:955:71 | source(...) : String | Log4jJndiInjectionTest.java:955:55:955:71 | (...)... | -| Log4jJndiInjectionTest.java:956:49:956:56 | source(...) : String | Log4jJndiInjectionTest.java:956:40:956:56 | (...)... | -| Log4jJndiInjectionTest.java:957:34:957:41 | source(...) : String | Log4jJndiInjectionTest.java:957:25:957:41 | (...)... | -| Log4jJndiInjectionTest.java:958:124:958:131 | source(...) : String | Log4jJndiInjectionTest.java:958:115:958:131 | (...)... | -| Log4jJndiInjectionTest.java:959:109:959:116 | source(...) : String | Log4jJndiInjectionTest.java:959:100:959:116 | (...)... | -| Log4jJndiInjectionTest.java:960:94:960:101 | source(...) : String | Log4jJndiInjectionTest.java:960:85:960:101 | (...)... | -| Log4jJndiInjectionTest.java:961:79:961:86 | source(...) : String | Log4jJndiInjectionTest.java:961:70:961:86 | (...)... | -| Log4jJndiInjectionTest.java:962:64:962:71 | source(...) : String | Log4jJndiInjectionTest.java:962:55:962:71 | (...)... | -| Log4jJndiInjectionTest.java:963:49:963:56 | source(...) : String | Log4jJndiInjectionTest.java:963:40:963:56 | (...)... | -| Log4jJndiInjectionTest.java:964:34:964:41 | source(...) : String | Log4jJndiInjectionTest.java:964:25:964:41 | (...)... | -| Log4jJndiInjectionTest.java:965:139:965:146 | source(...) : String | Log4jJndiInjectionTest.java:965:130:965:146 | (...)... | -| Log4jJndiInjectionTest.java:966:124:966:131 | source(...) : String | Log4jJndiInjectionTest.java:966:115:966:131 | (...)... | -| Log4jJndiInjectionTest.java:967:109:967:116 | source(...) : String | Log4jJndiInjectionTest.java:967:100:967:116 | (...)... | -| Log4jJndiInjectionTest.java:968:94:968:101 | source(...) : String | Log4jJndiInjectionTest.java:968:85:968:101 | (...)... | -| Log4jJndiInjectionTest.java:969:79:969:86 | source(...) : String | Log4jJndiInjectionTest.java:969:70:969:86 | (...)... | -| Log4jJndiInjectionTest.java:970:64:970:71 | source(...) : String | Log4jJndiInjectionTest.java:970:55:970:71 | (...)... | -| Log4jJndiInjectionTest.java:971:49:971:56 | source(...) : String | Log4jJndiInjectionTest.java:971:40:971:56 | (...)... | -| Log4jJndiInjectionTest.java:972:34:972:41 | source(...) : String | Log4jJndiInjectionTest.java:972:25:972:41 | (...)... | -| Log4jJndiInjectionTest.java:973:154:973:161 | source(...) : String | Log4jJndiInjectionTest.java:973:145:973:161 | (...)... | -| Log4jJndiInjectionTest.java:974:139:974:146 | source(...) : String | Log4jJndiInjectionTest.java:974:130:974:146 | (...)... | -| Log4jJndiInjectionTest.java:975:124:975:131 | source(...) : String | Log4jJndiInjectionTest.java:975:115:975:131 | (...)... | -| Log4jJndiInjectionTest.java:976:109:976:116 | source(...) : String | Log4jJndiInjectionTest.java:976:100:976:116 | (...)... | -| Log4jJndiInjectionTest.java:977:94:977:101 | source(...) : String | Log4jJndiInjectionTest.java:977:85:977:101 | (...)... | -| Log4jJndiInjectionTest.java:978:79:978:86 | source(...) : String | Log4jJndiInjectionTest.java:978:70:978:86 | (...)... | -| Log4jJndiInjectionTest.java:979:64:979:71 | source(...) : String | Log4jJndiInjectionTest.java:979:55:979:71 | (...)... | -| Log4jJndiInjectionTest.java:980:49:980:56 | source(...) : String | Log4jJndiInjectionTest.java:980:40:980:56 | (...)... | -| Log4jJndiInjectionTest.java:981:34:981:41 | source(...) : String | Log4jJndiInjectionTest.java:981:25:981:41 | (...)... | -| Log4jJndiInjectionTest.java:982:169:982:176 | source(...) : String | Log4jJndiInjectionTest.java:982:160:982:176 | (...)... | -| Log4jJndiInjectionTest.java:983:154:983:161 | source(...) : String | Log4jJndiInjectionTest.java:983:145:983:161 | (...)... | -| Log4jJndiInjectionTest.java:984:139:984:146 | source(...) : String | Log4jJndiInjectionTest.java:984:130:984:146 | (...)... | -| Log4jJndiInjectionTest.java:985:124:985:131 | source(...) : String | Log4jJndiInjectionTest.java:985:115:985:131 | (...)... | -| Log4jJndiInjectionTest.java:986:109:986:116 | source(...) : String | Log4jJndiInjectionTest.java:986:100:986:116 | (...)... | -| Log4jJndiInjectionTest.java:987:94:987:101 | source(...) : String | Log4jJndiInjectionTest.java:987:85:987:101 | (...)... | -| Log4jJndiInjectionTest.java:988:79:988:86 | source(...) : String | Log4jJndiInjectionTest.java:988:70:988:86 | (...)... | -| Log4jJndiInjectionTest.java:989:64:989:71 | source(...) : String | Log4jJndiInjectionTest.java:989:55:989:71 | (...)... | -| Log4jJndiInjectionTest.java:990:49:990:56 | source(...) : String | Log4jJndiInjectionTest.java:990:40:990:56 | (...)... | -| Log4jJndiInjectionTest.java:991:34:991:41 | source(...) : String | Log4jJndiInjectionTest.java:991:25:991:41 | (...)... | -| Log4jJndiInjectionTest.java:992:34:992:41 | source(...) : String | Log4jJndiInjectionTest.java:992:25:992:41 | (...)... | -| Log4jJndiInjectionTest.java:993:54:993:61 | source(...) : String | Log4jJndiInjectionTest.java:993:40:993:61 | (...)... | -| Log4jJndiInjectionTest.java:994:34:994:41 | source(...) : String | Log4jJndiInjectionTest.java:994:25:994:41 | (...)... | -| Log4jJndiInjectionTest.java:995:39:995:46 | source(...) : String | Log4jJndiInjectionTest.java:995:25:995:46 | (...)... | -| Log4jJndiInjectionTest.java:996:39:996:46 | source(...) : String | Log4jJndiInjectionTest.java:996:25:996:46 | (...)... | -| Log4jJndiInjectionTest.java:998:65:998:72 | source(...) : String | Log4jJndiInjectionTest.java:998:55:998:72 | (...)... | -| Log4jJndiInjectionTest.java:999:48:999:55 | source(...) : String | Log4jJndiInjectionTest.java:999:39:999:55 | (...)... | -| Log4jJndiInjectionTest.java:1000:45:1000:67 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:1000:45:1000:67 | new Object[] | -| Log4jJndiInjectionTest.java:1000:59:1000:66 | source(...) : String | Log4jJndiInjectionTest.java:1000:45:1000:67 | {...} : Object[] [[]] : String | -| Log4jJndiInjectionTest.java:1001:42:1001:49 | source(...) : String | Log4jJndiInjectionTest.java:1001:33:1001:49 | (...)... | -| Log4jJndiInjectionTest.java:1002:39:1002:61 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:1002:39:1002:61 | new Object[] | -| Log4jJndiInjectionTest.java:1002:53:1002:60 | source(...) : String | Log4jJndiInjectionTest.java:1002:39:1002:61 | {...} : Object[] [[]] : String | -| Log4jJndiInjectionTest.java:1020:40:1020:47 | source(...) : String | Log4jJndiInjectionTest.java:1020:25:1020:47 | (...)... | -| Log4jJndiInjectionTest.java:1021:35:1021:42 | source(...) : String | Log4jJndiInjectionTest.java:1021:25:1021:42 | (...)... | -| Log4jJndiInjectionTest.java:1023:34:1023:41 | source(...) : String | Log4jJndiInjectionTest.java:1023:25:1023:41 | (...)... | -| Log4jJndiInjectionTest.java:1024:34:1024:41 | source(...) : String | Log4jJndiInjectionTest.java:1024:25:1024:41 | (...)... | -| Log4jJndiInjectionTest.java:1025:40:1025:62 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:1025:40:1025:62 | new Object[] | -| Log4jJndiInjectionTest.java:1025:54:1025:61 | source(...) : String | Log4jJndiInjectionTest.java:1025:40:1025:62 | {...} : Object[] [[]] : String | -| Log4jJndiInjectionTest.java:1028:49:1028:56 | source(...) : String | Log4jJndiInjectionTest.java:1028:40:1028:56 | (...)... | -| Log4jJndiInjectionTest.java:1029:34:1029:41 | source(...) : String | Log4jJndiInjectionTest.java:1029:25:1029:41 | (...)... | -| Log4jJndiInjectionTest.java:1030:64:1030:71 | source(...) : String | Log4jJndiInjectionTest.java:1030:55:1030:71 | (...)... | -| Log4jJndiInjectionTest.java:1031:49:1031:56 | source(...) : String | Log4jJndiInjectionTest.java:1031:40:1031:56 | (...)... | -| Log4jJndiInjectionTest.java:1032:34:1032:41 | source(...) : String | Log4jJndiInjectionTest.java:1032:25:1032:41 | (...)... | -| Log4jJndiInjectionTest.java:1033:79:1033:86 | source(...) : String | Log4jJndiInjectionTest.java:1033:70:1033:86 | (...)... | -| Log4jJndiInjectionTest.java:1034:64:1034:71 | source(...) : String | Log4jJndiInjectionTest.java:1034:55:1034:71 | (...)... | -| Log4jJndiInjectionTest.java:1035:49:1035:56 | source(...) : String | Log4jJndiInjectionTest.java:1035:40:1035:56 | (...)... | -| Log4jJndiInjectionTest.java:1036:34:1036:41 | source(...) : String | Log4jJndiInjectionTest.java:1036:25:1036:41 | (...)... | -| Log4jJndiInjectionTest.java:1037:94:1037:101 | source(...) : String | Log4jJndiInjectionTest.java:1037:85:1037:101 | (...)... | -| Log4jJndiInjectionTest.java:1038:79:1038:86 | source(...) : String | Log4jJndiInjectionTest.java:1038:70:1038:86 | (...)... | -| Log4jJndiInjectionTest.java:1039:64:1039:71 | source(...) : String | Log4jJndiInjectionTest.java:1039:55:1039:71 | (...)... | -| Log4jJndiInjectionTest.java:1040:49:1040:56 | source(...) : String | Log4jJndiInjectionTest.java:1040:40:1040:56 | (...)... | -| Log4jJndiInjectionTest.java:1041:34:1041:41 | source(...) : String | Log4jJndiInjectionTest.java:1041:25:1041:41 | (...)... | -| Log4jJndiInjectionTest.java:1042:109:1042:116 | source(...) : String | Log4jJndiInjectionTest.java:1042:100:1042:116 | (...)... | -| Log4jJndiInjectionTest.java:1043:94:1043:101 | source(...) : String | Log4jJndiInjectionTest.java:1043:85:1043:101 | (...)... | -| Log4jJndiInjectionTest.java:1044:79:1044:86 | source(...) : String | Log4jJndiInjectionTest.java:1044:70:1044:86 | (...)... | -| Log4jJndiInjectionTest.java:1045:64:1045:71 | source(...) : String | Log4jJndiInjectionTest.java:1045:55:1045:71 | (...)... | -| Log4jJndiInjectionTest.java:1046:49:1046:56 | source(...) : String | Log4jJndiInjectionTest.java:1046:40:1046:56 | (...)... | -| Log4jJndiInjectionTest.java:1047:34:1047:41 | source(...) : String | Log4jJndiInjectionTest.java:1047:25:1047:41 | (...)... | -| Log4jJndiInjectionTest.java:1048:124:1048:131 | source(...) : String | Log4jJndiInjectionTest.java:1048:115:1048:131 | (...)... | -| Log4jJndiInjectionTest.java:1049:109:1049:116 | source(...) : String | Log4jJndiInjectionTest.java:1049:100:1049:116 | (...)... | -| Log4jJndiInjectionTest.java:1050:94:1050:101 | source(...) : String | Log4jJndiInjectionTest.java:1050:85:1050:101 | (...)... | -| Log4jJndiInjectionTest.java:1051:79:1051:86 | source(...) : String | Log4jJndiInjectionTest.java:1051:70:1051:86 | (...)... | -| Log4jJndiInjectionTest.java:1052:64:1052:71 | source(...) : String | Log4jJndiInjectionTest.java:1052:55:1052:71 | (...)... | -| Log4jJndiInjectionTest.java:1053:49:1053:56 | source(...) : String | Log4jJndiInjectionTest.java:1053:40:1053:56 | (...)... | -| Log4jJndiInjectionTest.java:1054:34:1054:41 | source(...) : String | Log4jJndiInjectionTest.java:1054:25:1054:41 | (...)... | -| Log4jJndiInjectionTest.java:1055:139:1055:146 | source(...) : String | Log4jJndiInjectionTest.java:1055:130:1055:146 | (...)... | -| Log4jJndiInjectionTest.java:1056:124:1056:131 | source(...) : String | Log4jJndiInjectionTest.java:1056:115:1056:131 | (...)... | -| Log4jJndiInjectionTest.java:1057:109:1057:116 | source(...) : String | Log4jJndiInjectionTest.java:1057:100:1057:116 | (...)... | -| Log4jJndiInjectionTest.java:1058:94:1058:101 | source(...) : String | Log4jJndiInjectionTest.java:1058:85:1058:101 | (...)... | -| Log4jJndiInjectionTest.java:1059:79:1059:86 | source(...) : String | Log4jJndiInjectionTest.java:1059:70:1059:86 | (...)... | -| Log4jJndiInjectionTest.java:1060:64:1060:71 | source(...) : String | Log4jJndiInjectionTest.java:1060:55:1060:71 | (...)... | -| Log4jJndiInjectionTest.java:1061:49:1061:56 | source(...) : String | Log4jJndiInjectionTest.java:1061:40:1061:56 | (...)... | -| Log4jJndiInjectionTest.java:1062:34:1062:41 | source(...) : String | Log4jJndiInjectionTest.java:1062:25:1062:41 | (...)... | -| Log4jJndiInjectionTest.java:1063:154:1063:161 | source(...) : String | Log4jJndiInjectionTest.java:1063:145:1063:161 | (...)... | -| Log4jJndiInjectionTest.java:1064:139:1064:146 | source(...) : String | Log4jJndiInjectionTest.java:1064:130:1064:146 | (...)... | -| Log4jJndiInjectionTest.java:1065:124:1065:131 | source(...) : String | Log4jJndiInjectionTest.java:1065:115:1065:131 | (...)... | -| Log4jJndiInjectionTest.java:1066:109:1066:116 | source(...) : String | Log4jJndiInjectionTest.java:1066:100:1066:116 | (...)... | -| Log4jJndiInjectionTest.java:1067:94:1067:101 | source(...) : String | Log4jJndiInjectionTest.java:1067:85:1067:101 | (...)... | -| Log4jJndiInjectionTest.java:1068:79:1068:86 | source(...) : String | Log4jJndiInjectionTest.java:1068:70:1068:86 | (...)... | -| Log4jJndiInjectionTest.java:1069:64:1069:71 | source(...) : String | Log4jJndiInjectionTest.java:1069:55:1069:71 | (...)... | -| Log4jJndiInjectionTest.java:1070:49:1070:56 | source(...) : String | Log4jJndiInjectionTest.java:1070:40:1070:56 | (...)... | -| Log4jJndiInjectionTest.java:1071:34:1071:41 | source(...) : String | Log4jJndiInjectionTest.java:1071:25:1071:41 | (...)... | -| Log4jJndiInjectionTest.java:1072:169:1072:176 | source(...) : String | Log4jJndiInjectionTest.java:1072:160:1072:176 | (...)... | -| Log4jJndiInjectionTest.java:1073:154:1073:161 | source(...) : String | Log4jJndiInjectionTest.java:1073:145:1073:161 | (...)... | -| Log4jJndiInjectionTest.java:1074:139:1074:146 | source(...) : String | Log4jJndiInjectionTest.java:1074:130:1074:146 | (...)... | -| Log4jJndiInjectionTest.java:1075:124:1075:131 | source(...) : String | Log4jJndiInjectionTest.java:1075:115:1075:131 | (...)... | -| Log4jJndiInjectionTest.java:1076:109:1076:116 | source(...) : String | Log4jJndiInjectionTest.java:1076:100:1076:116 | (...)... | -| Log4jJndiInjectionTest.java:1077:94:1077:101 | source(...) : String | Log4jJndiInjectionTest.java:1077:85:1077:101 | (...)... | -| Log4jJndiInjectionTest.java:1078:79:1078:86 | source(...) : String | Log4jJndiInjectionTest.java:1078:70:1078:86 | (...)... | -| Log4jJndiInjectionTest.java:1079:64:1079:71 | source(...) : String | Log4jJndiInjectionTest.java:1079:55:1079:71 | (...)... | -| Log4jJndiInjectionTest.java:1080:49:1080:56 | source(...) : String | Log4jJndiInjectionTest.java:1080:40:1080:56 | (...)... | -| Log4jJndiInjectionTest.java:1081:34:1081:41 | source(...) : String | Log4jJndiInjectionTest.java:1081:25:1081:41 | (...)... | -| Log4jJndiInjectionTest.java:1083:34:1083:41 | source(...) : String | Log4jJndiInjectionTest.java:1083:25:1083:41 | (...)... | -| Log4jJndiInjectionTest.java:1084:54:1084:61 | source(...) : String | Log4jJndiInjectionTest.java:1084:40:1084:61 | (...)... | -| Log4jJndiInjectionTest.java:1085:39:1085:46 | source(...) : String | Log4jJndiInjectionTest.java:1085:25:1085:46 | (...)... | -| Log4jJndiInjectionTest.java:1088:47:1088:54 | source(...) : String | Log4jJndiInjectionTest.java:1088:38:1088:54 | (...)... | -| Log4jJndiInjectionTest.java:1089:53:1089:60 | source(...) : String | Log4jJndiInjectionTest.java:1089:44:1089:60 | (...)... | -| Log4jJndiInjectionTest.java:1091:13:1091:15 | map [post update] : HashMap [] : String | Log4jJndiInjectionTest.java:1092:34:1092:36 | map | -| Log4jJndiInjectionTest.java:1091:28:1091:44 | (...)... : String | Log4jJndiInjectionTest.java:1091:13:1091:15 | map [post update] : HashMap [] : String | -| Log4jJndiInjectionTest.java:1091:37:1091:44 | source(...) : String | Log4jJndiInjectionTest.java:1091:28:1091:44 | (...)... : String | -| Log4jJndiInjectionTest.java:1095:31:1095:88 | with(...) : StringMapMessage | Log4jJndiInjectionTest.java:1096:26:1096:29 | mmsg | -| Log4jJndiInjectionTest.java:1095:71:1095:87 | (...)... : String | Log4jJndiInjectionTest.java:1095:31:1095:88 | with(...) : StringMapMessage | -| Log4jJndiInjectionTest.java:1095:80:1095:87 | source(...) : String | Log4jJndiInjectionTest.java:1095:71:1095:87 | (...)... : String | -| Log4jJndiInjectionTest.java:1100:13:1100:16 | mmsg [post update] : StringMapMessage | Log4jJndiInjectionTest.java:1101:26:1101:29 | mmsg | -| Log4jJndiInjectionTest.java:1100:35:1100:51 | (...)... : String | Log4jJndiInjectionTest.java:1100:13:1100:16 | mmsg [post update] : StringMapMessage | -| Log4jJndiInjectionTest.java:1100:44:1100:51 | source(...) : String | Log4jJndiInjectionTest.java:1100:35:1100:51 | (...)... : String | -| Log4jJndiInjectionTest.java:1105:13:1105:16 | mmsg [post update] : StringMapMessage | Log4jJndiInjectionTest.java:1106:26:1106:29 | mmsg | -| Log4jJndiInjectionTest.java:1105:34:1105:50 | (...)... : String | Log4jJndiInjectionTest.java:1105:13:1105:16 | mmsg [post update] : StringMapMessage | -| Log4jJndiInjectionTest.java:1105:43:1105:50 | source(...) : String | Log4jJndiInjectionTest.java:1105:34:1105:50 | (...)... : String | -| Log4jJndiInjectionTest.java:1111:13:1111:15 | map [post update] : HashMap [] : String | Log4jJndiInjectionTest.java:1112:25:1112:27 | map : HashMap [] : String | -| Log4jJndiInjectionTest.java:1111:33:1111:49 | (...)... : String | Log4jJndiInjectionTest.java:1111:13:1111:15 | map [post update] : HashMap [] : String | -| Log4jJndiInjectionTest.java:1111:42:1111:49 | source(...) : String | Log4jJndiInjectionTest.java:1111:33:1111:49 | (...)... : String | -| Log4jJndiInjectionTest.java:1112:13:1112:16 | mmsg [post update] : StringMapMessage | Log4jJndiInjectionTest.java:1113:26:1113:29 | mmsg | -| Log4jJndiInjectionTest.java:1112:25:1112:27 | map : HashMap [] : String | Log4jJndiInjectionTest.java:1112:13:1112:16 | mmsg [post update] : StringMapMessage | -| Log4jJndiInjectionTest.java:1116:61:1116:68 | source(...) : String | Log4jJndiInjectionTest.java:1116:52:1116:68 | (...)... | -| Log4jJndiInjectionTest.java:1117:81:1117:88 | source(...) : String | Log4jJndiInjectionTest.java:1117:72:1117:88 | (...)... | -| Log4jJndiInjectionTest.java:1119:13:1119:15 | map [post update] : HashMap [] : String | Log4jJndiInjectionTest.java:1120:43:1120:45 | map | -| Log4jJndiInjectionTest.java:1119:13:1119:15 | map [post update] : HashMap [] : String | Log4jJndiInjectionTest.java:1121:63:1121:65 | map | -| Log4jJndiInjectionTest.java:1119:33:1119:49 | (...)... : String | Log4jJndiInjectionTest.java:1119:13:1119:15 | map [post update] : HashMap [] : String | -| Log4jJndiInjectionTest.java:1119:42:1119:49 | source(...) : String | Log4jJndiInjectionTest.java:1119:33:1119:49 | (...)... : String | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:31:41:31:48 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:32:41:32:48 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:33:56:33:63 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:34:56:34:63 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:35:51:35:58 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:36:59:36:66 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:37:59:37:66 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:38:41:38:48 | source(...) | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:39:50:39:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:40:50:40:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:41:70:41:77 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:42:65:42:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:43:50:43:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:44:80:44:87 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:45:65:45:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:46:50:46:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:47:95:47:102 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:48:80:48:87 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:49:65:49:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:50:50:50:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:51:110:51:117 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:52:95:52:102 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:53:80:53:87 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:54:65:54:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:55:50:55:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:56:125:56:132 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:57:110:57:117 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:58:95:58:102 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:59:80:59:87 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:60:65:60:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:61:50:61:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:62:140:62:147 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:63:125:63:132 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:64:110:64:117 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:65:95:65:102 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:66:80:66:87 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:67:65:67:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:68:50:68:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:69:155:69:162 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:70:140:70:147 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:71:125:71:132 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:72:110:72:117 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:73:95:73:102 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:74:80:74:87 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:75:65:75:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:76:50:76:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:77:170:77:177 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:78:155:78:162 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:79:140:79:147 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:80:125:80:132 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:81:110:81:117 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:82:95:82:102 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:83:80:83:87 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:84:65:84:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:85:50:85:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:86:185:86:192 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:87:170:87:177 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:88:155:88:162 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:89:140:89:147 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:90:125:90:132 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:91:110:91:117 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:92:95:92:102 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:93:80:93:87 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:94:65:94:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:95:50:95:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:96:50:96:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:97:70:97:77 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:98:50:98:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:99:55:99:62 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:100:55:100:62 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:101:44:101:51 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:102:44:102:51 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:103:36:103:43 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:104:36:104:43 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:105:26:105:33 | source(...) | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:106:26:106:33 | source(...) | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:107:35:107:42 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:108:35:108:42 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:109:55:109:62 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:110:50:110:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:111:35:111:42 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:112:65:112:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:113:50:113:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:114:35:114:42 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:115:80:115:87 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:116:65:116:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:117:50:117:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:118:35:118:42 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:119:95:119:102 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:120:80:120:87 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:121:65:121:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:122:50:122:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:123:35:123:42 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:124:110:124:117 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:125:95:125:102 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:126:80:126:87 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:127:65:127:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:128:50:128:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:129:35:129:42 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:130:125:130:132 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:131:110:131:117 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:132:95:132:102 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:133:80:133:87 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:134:65:134:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:135:50:135:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:136:35:136:42 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:137:140:137:147 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:138:125:138:132 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:139:110:139:117 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:140:95:140:102 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:141:80:141:87 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:142:65:142:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:143:50:143:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:144:35:144:42 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:145:155:145:162 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:146:140:146:147 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:147:125:147:132 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:148:110:148:117 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:149:95:149:102 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:150:80:150:87 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:151:65:151:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:152:50:152:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:153:35:153:42 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:154:170:154:177 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:155:155:155:162 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:156:140:156:147 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:157:125:157:132 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:158:110:158:117 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:159:95:159:102 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:160:80:160:87 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:161:65:161:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:162:50:162:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:163:35:163:42 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:164:35:164:42 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:165:55:165:62 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:166:35:166:42 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:167:40:167:47 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:168:40:168:47 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:169:41:169:48 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:170:41:170:48 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:171:56:171:63 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:172:56:172:63 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:173:51:173:58 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:174:59:174:66 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:175:59:175:66 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:176:41:176:48 | source(...) | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:177:50:177:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:178:50:178:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:179:70:179:77 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:180:65:180:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:181:50:181:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:182:80:182:87 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:183:65:183:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:184:50:184:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:185:95:185:102 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:186:80:186:87 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:187:65:187:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:188:50:188:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:189:110:189:117 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:190:95:190:102 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:191:80:191:87 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:192:65:192:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:193:50:193:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:194:125:194:132 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:195:110:195:117 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:196:95:196:102 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:197:80:197:87 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:198:65:198:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:199:50:199:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:200:140:200:147 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:201:125:201:132 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:202:110:202:117 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:203:95:203:102 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:204:80:204:87 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:205:65:205:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:206:50:206:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:207:155:207:162 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:208:140:208:147 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:209:125:209:132 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:210:110:210:117 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:211:95:211:102 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:212:80:212:87 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:213:65:213:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:214:50:214:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:215:170:215:177 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:216:155:216:162 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:217:140:217:147 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:218:125:218:132 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:219:110:219:117 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:220:95:220:102 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:221:80:221:87 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:222:65:222:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:223:50:223:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:224:185:224:192 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:225:170:225:177 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:226:155:226:162 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:227:140:227:147 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:228:125:228:132 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:229:110:229:117 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:230:95:230:102 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:231:80:231:87 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:232:65:232:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:233:50:233:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:234:50:234:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:235:70:235:77 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:236:50:236:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:237:55:237:62 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:238:55:238:62 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:239:44:239:51 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:240:44:240:51 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:241:36:241:43 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:242:36:242:43 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:243:26:243:33 | source(...) | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:244:26:244:33 | source(...) | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:245:35:245:42 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:246:35:246:42 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:247:55:247:62 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:248:50:248:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:249:35:249:42 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:250:65:250:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:251:50:251:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:252:35:252:42 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:253:80:253:87 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:254:65:254:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:255:50:255:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:256:35:256:42 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:257:95:257:102 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:258:80:258:87 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:259:65:259:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:260:50:260:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:261:35:261:42 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:262:110:262:117 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:263:95:263:102 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:264:80:264:87 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:265:65:265:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:266:50:266:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:267:35:267:42 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:268:125:268:132 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:269:110:269:117 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:270:95:270:102 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:271:80:271:87 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:272:65:272:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:273:50:273:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:274:35:274:42 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:275:140:275:147 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:276:125:276:132 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:277:110:277:117 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:278:95:278:102 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:279:80:279:87 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:280:65:280:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:281:50:281:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:282:35:282:42 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:283:155:283:162 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:284:140:284:147 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:285:125:285:132 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:286:110:286:117 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:287:95:287:102 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:288:80:288:87 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:289:65:289:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:290:50:290:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:291:35:291:42 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:292:170:292:177 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:293:155:293:162 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:294:140:294:147 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:295:125:295:132 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:296:110:296:117 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:297:95:297:102 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:298:80:298:87 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:299:65:299:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:300:50:300:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:301:35:301:42 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:302:35:302:42 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:303:55:303:62 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:304:35:304:42 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:305:40:305:47 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:306:40:306:47 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:307:41:307:48 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:308:41:308:48 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:309:56:309:63 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:310:56:310:63 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:311:51:311:58 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:312:59:312:66 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:313:59:313:66 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:314:41:314:48 | source(...) | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:315:50:315:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:316:50:316:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:317:70:317:77 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:318:65:318:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:319:50:319:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:320:80:320:87 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:321:65:321:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:322:50:322:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:323:95:323:102 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:324:80:324:87 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:325:65:325:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:326:50:326:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:327:110:327:117 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:328:95:328:102 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:329:80:329:87 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:330:65:330:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:331:50:331:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:332:125:332:132 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:333:110:333:117 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:334:95:334:102 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:335:80:335:87 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:336:65:336:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:337:50:337:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:338:140:338:147 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:339:125:339:132 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:340:110:340:117 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:341:95:341:102 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:342:80:342:87 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:343:65:343:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:344:50:344:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:345:155:345:162 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:346:140:346:147 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:347:125:347:132 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:348:110:348:117 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:349:95:349:102 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:350:80:350:87 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:351:65:351:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:352:50:352:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:353:170:353:177 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:354:155:354:162 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:355:140:355:147 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:356:125:356:132 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:357:110:357:117 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:358:95:358:102 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:359:80:359:87 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:360:65:360:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:361:50:361:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:362:185:362:192 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:363:170:363:177 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:364:155:364:162 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:365:140:365:147 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:366:125:366:132 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:367:110:367:117 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:368:95:368:102 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:369:80:369:87 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:370:65:370:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:371:50:371:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:372:50:372:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:373:70:373:77 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:374:50:374:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:375:55:375:62 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:376:55:376:62 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:377:44:377:51 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:378:44:378:51 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:379:36:379:43 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:380:36:380:43 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:381:26:381:33 | source(...) | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:382:26:382:33 | source(...) | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:383:35:383:42 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:384:35:384:42 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:385:55:385:62 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:386:50:386:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:387:35:387:42 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:388:65:388:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:389:50:389:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:390:35:390:42 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:391:80:391:87 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:392:65:392:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:393:50:393:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:394:35:394:42 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:395:95:395:102 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:396:80:396:87 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:397:65:397:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:398:50:398:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:399:35:399:42 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:400:110:400:117 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:401:95:401:102 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:402:80:402:87 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:403:65:403:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:404:50:404:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:405:35:405:42 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:406:125:406:132 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:407:110:407:117 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:408:95:408:102 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:409:80:409:87 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:410:65:410:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:411:50:411:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:412:35:412:42 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:413:140:413:147 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:414:125:414:132 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:415:110:415:117 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:416:95:416:102 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:417:80:417:87 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:418:65:418:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:419:50:419:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:420:35:420:42 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:421:155:421:162 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:422:140:422:147 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:423:125:423:132 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:424:110:424:117 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:425:95:425:102 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:426:80:426:87 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:427:65:427:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:428:50:428:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:429:35:429:42 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:430:170:430:177 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:431:155:431:162 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:432:140:432:147 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:433:125:433:132 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:434:110:434:117 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:435:95:435:102 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:436:80:436:87 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:437:65:437:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:438:50:438:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:439:35:439:42 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:440:35:440:42 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:441:55:441:62 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:442:35:442:42 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:443:40:443:47 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:444:40:444:47 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:445:40:445:47 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:446:40:446:47 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:447:55:447:62 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:448:55:448:62 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:449:50:449:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:450:58:450:65 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:451:58:451:65 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:452:40:452:47 | source(...) | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:453:49:453:56 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:454:49:454:56 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:455:69:455:76 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:456:64:456:71 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:457:49:457:56 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:458:79:458:86 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:459:64:459:71 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:460:49:460:56 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:461:94:461:101 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:462:79:462:86 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:463:64:463:71 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:464:49:464:56 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:465:109:465:116 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:466:94:466:101 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:467:79:467:86 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:468:64:468:71 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:469:49:469:56 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:470:124:470:131 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:471:109:471:116 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:472:94:472:101 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:473:79:473:86 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:474:64:474:71 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:475:49:475:56 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:476:139:476:146 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:477:124:477:131 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:478:109:478:116 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:479:94:479:101 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:480:79:480:86 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:481:64:481:71 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:482:49:482:56 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:483:154:483:161 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:484:139:484:146 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:485:124:485:131 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:486:109:486:116 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:487:94:487:101 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:488:79:488:86 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:489:64:489:71 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:490:49:490:56 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:491:169:491:176 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:492:154:492:161 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:493:139:493:146 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:494:124:494:131 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:495:109:495:116 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:496:94:496:101 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:497:79:497:86 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:498:64:498:71 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:499:49:499:56 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:500:184:500:191 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:501:169:501:176 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:502:154:502:161 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:503:139:503:146 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:504:124:504:131 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:505:109:505:116 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:506:94:506:101 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:507:79:507:86 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:508:64:508:71 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:509:49:509:56 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:510:49:510:56 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:511:69:511:76 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:512:49:512:56 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:513:54:513:61 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:514:54:514:61 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:515:43:515:50 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:516:43:516:50 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:517:35:517:42 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:518:35:518:42 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:519:25:519:32 | source(...) | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:520:25:520:32 | source(...) | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:521:34:521:41 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:522:34:522:41 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:523:54:523:61 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:524:49:524:56 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:525:34:525:41 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:526:64:526:71 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:527:49:527:56 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:528:34:528:41 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:529:79:529:86 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:530:64:530:71 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:531:49:531:56 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:532:34:532:41 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:533:94:533:101 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:534:79:534:86 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:535:64:535:71 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:536:49:536:56 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:537:34:537:41 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:538:109:538:116 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:539:94:539:101 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:540:79:540:86 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:541:64:541:71 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:542:49:542:56 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:543:34:543:41 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:544:124:544:131 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:545:109:545:116 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:546:94:546:101 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:547:79:547:86 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:548:64:548:71 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:549:49:549:56 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:550:34:550:41 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:551:139:551:146 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:552:124:552:131 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:553:109:553:116 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:554:94:554:101 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:555:79:555:86 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:556:64:556:71 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:557:49:557:56 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:558:34:558:41 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:559:154:559:161 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:560:139:560:146 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:561:124:561:131 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:562:109:562:116 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:563:94:563:101 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:564:79:564:86 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:565:64:565:71 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:566:49:566:56 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:567:34:567:41 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:568:169:568:176 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:569:154:569:161 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:570:139:570:146 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:571:124:571:131 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:572:109:572:116 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:573:94:573:101 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:574:79:574:86 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:575:64:575:71 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:576:49:576:56 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:577:34:577:41 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:578:34:578:41 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:579:54:579:61 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:580:34:580:41 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:581:39:581:46 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:582:39:582:46 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:583:53:583:60 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:584:53:584:60 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:585:68:585:75 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:586:68:586:75 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:587:63:587:70 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:588:71:588:78 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:589:71:589:78 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:590:53:590:60 | source(...) | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:591:62:591:69 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:592:62:592:69 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:593:82:593:89 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:594:77:594:84 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:595:62:595:69 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:596:92:596:99 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:597:77:597:84 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:598:62:598:69 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:599:107:599:114 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:600:92:600:99 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:601:77:601:84 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:602:62:602:69 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:603:122:603:129 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:604:107:604:114 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:605:92:605:99 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:606:77:606:84 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:607:62:607:69 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:608:137:608:144 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:609:122:609:129 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:610:107:610:114 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:611:92:611:99 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:612:77:612:84 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:613:62:613:69 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:614:152:614:159 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:615:137:615:144 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:616:122:616:129 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:617:107:617:114 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:618:92:618:99 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:619:77:619:84 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:620:62:620:69 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:621:167:621:174 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:622:152:622:159 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:623:137:623:144 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:624:122:624:129 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:625:107:625:114 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:626:92:626:99 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:627:77:627:84 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:628:62:628:69 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:629:182:629:189 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:630:167:630:174 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:631:152:631:159 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:632:137:632:144 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:633:122:633:129 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:634:107:634:114 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:635:92:635:99 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:636:77:636:84 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:637:62:637:69 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:638:197:638:204 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:639:182:639:189 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:640:167:640:174 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:641:152:641:159 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:642:137:642:144 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:643:122:643:129 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:644:107:644:114 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:645:92:645:99 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:646:77:646:84 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:647:62:647:69 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:648:62:648:69 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:649:82:649:89 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:650:62:650:69 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:651:67:651:74 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:652:67:652:74 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:653:56:653:63 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:654:56:654:63 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:655:48:655:55 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:656:48:656:55 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:657:38:657:45 | source(...) | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:658:38:658:45 | source(...) | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:659:47:659:54 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:660:47:660:54 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:661:67:661:74 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:662:62:662:69 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:663:47:663:54 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:664:77:664:84 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:665:62:665:69 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:666:47:666:54 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:667:92:667:99 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:668:77:668:84 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:669:62:669:69 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:670:47:670:54 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:671:107:671:114 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:672:92:672:99 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:673:77:673:84 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:674:62:674:69 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:675:47:675:54 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:676:122:676:129 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:677:107:677:114 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:678:92:678:99 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:679:77:679:84 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:680:62:680:69 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:681:47:681:54 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:682:137:682:144 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:683:122:683:129 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:684:107:684:114 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:685:92:685:99 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:686:77:686:84 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:687:62:687:69 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:688:47:688:54 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:689:152:689:159 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:690:137:690:144 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:691:122:691:129 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:692:107:692:114 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:693:92:693:99 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:694:77:694:84 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:695:62:695:69 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:696:47:696:54 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:697:167:697:174 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:698:152:698:159 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:699:137:699:144 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:700:122:700:129 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:701:107:701:114 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:702:92:702:99 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:703:77:703:84 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:704:62:704:69 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:705:47:705:54 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:706:182:706:189 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:707:167:707:174 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:708:152:708:159 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:709:137:709:144 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:710:122:710:129 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:711:107:711:114 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:712:92:712:99 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:713:77:713:84 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:714:62:714:69 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:715:47:715:54 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:716:47:716:54 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:717:67:717:74 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:718:47:718:54 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:719:52:719:59 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:720:52:720:59 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:721:41:721:48 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:722:41:722:48 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:723:56:723:63 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:724:56:724:63 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:725:51:725:58 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:726:59:726:66 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:727:59:727:66 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:728:41:728:48 | source(...) | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:729:50:729:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:730:50:730:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:731:70:731:77 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:732:65:732:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:733:50:733:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:734:80:734:87 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:735:65:735:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:736:50:736:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:737:95:737:102 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:738:80:738:87 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:739:65:739:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:740:50:740:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:741:110:741:117 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:742:95:742:102 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:743:80:743:87 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:744:65:744:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:745:50:745:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:746:125:746:132 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:747:110:747:117 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:748:95:748:102 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:749:80:749:87 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:750:65:750:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:751:50:751:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:752:140:752:147 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:753:125:753:132 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:754:110:754:117 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:755:95:755:102 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:756:80:756:87 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:757:65:757:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:758:50:758:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:759:155:759:162 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:760:140:760:147 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:761:125:761:132 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:762:110:762:117 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:763:95:763:102 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:764:80:764:87 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:765:65:765:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:766:50:766:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:767:170:767:177 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:768:155:768:162 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:769:140:769:147 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:770:125:770:132 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:771:110:771:117 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:772:95:772:102 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:773:80:773:87 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:774:65:774:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:775:50:775:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:776:185:776:192 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:777:170:777:177 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:778:155:778:162 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:779:140:779:147 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:780:125:780:132 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:781:110:781:117 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:782:95:782:102 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:783:80:783:87 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:784:65:784:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:785:50:785:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:786:50:786:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:787:70:787:77 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:788:50:788:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:789:55:789:62 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:790:55:790:62 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:791:44:791:51 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:792:44:792:51 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:793:36:793:43 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:794:36:794:43 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:795:26:795:33 | source(...) | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:796:26:796:33 | source(...) | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:797:35:797:42 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:798:35:798:42 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:799:55:799:62 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:800:50:800:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:801:35:801:42 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:802:65:802:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:803:50:803:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:804:35:804:42 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:805:80:805:87 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:806:65:806:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:807:50:807:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:808:35:808:42 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:809:95:809:102 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:810:80:810:87 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:811:65:811:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:812:50:812:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:813:35:813:42 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:814:110:814:117 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:815:95:815:102 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:816:80:816:87 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:817:65:817:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:818:50:818:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:819:35:819:42 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:820:125:820:132 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:821:110:821:117 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:822:95:822:102 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:823:80:823:87 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:824:65:824:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:825:50:825:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:826:35:826:42 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:827:140:827:147 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:828:125:828:132 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:829:110:829:117 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:830:95:830:102 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:831:80:831:87 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:832:65:832:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:833:50:833:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:834:35:834:42 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:835:155:835:162 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:836:140:836:147 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:837:125:837:132 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:838:110:838:117 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:839:95:839:102 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:840:80:840:87 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:841:65:841:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:842:50:842:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:843:35:843:42 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:844:170:844:177 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:845:155:845:162 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:846:140:846:147 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:847:125:847:132 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:848:110:848:117 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:849:95:849:102 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:850:80:850:87 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:851:65:851:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:852:50:852:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:853:35:853:42 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:854:35:854:42 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:855:55:855:62 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:856:35:856:42 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:857:40:857:47 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:858:40:858:47 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:859:40:859:47 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:860:40:860:47 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:861:55:861:62 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:862:55:862:62 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:863:50:863:57 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:864:58:864:65 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:865:58:865:65 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:866:40:866:47 | source(...) | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:867:49:867:56 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:868:49:868:56 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:869:69:869:76 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:870:64:870:71 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:871:49:871:56 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:872:79:872:86 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:873:64:873:71 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:874:49:874:56 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:875:94:875:101 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:876:79:876:86 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:877:64:877:71 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:878:49:878:56 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:879:109:879:116 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:880:94:880:101 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:881:79:881:86 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:882:64:882:71 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:883:49:883:56 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:884:124:884:131 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:885:109:885:116 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:886:94:886:101 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:887:79:887:86 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:888:64:888:71 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:889:49:889:56 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:890:139:890:146 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:891:124:891:131 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:892:109:892:116 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:893:94:893:101 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:894:79:894:86 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:895:64:895:71 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:896:49:896:56 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:897:154:897:161 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:898:139:898:146 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:899:124:899:131 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:900:109:900:116 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:901:94:901:101 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:902:79:902:86 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:903:64:903:71 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:904:49:904:56 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:905:169:905:176 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:906:154:906:161 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:907:139:907:146 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:908:124:908:131 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:909:109:909:116 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:910:94:910:101 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:911:79:911:86 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:912:64:912:71 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:913:49:913:56 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:914:184:914:191 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:915:169:915:176 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:916:154:916:161 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:917:139:917:146 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:918:124:918:131 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:919:109:919:116 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:920:94:920:101 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:921:79:921:86 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:922:64:922:71 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:923:49:923:56 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:924:49:924:56 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:925:69:925:76 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:926:49:926:56 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:927:54:927:61 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:928:54:928:61 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:929:43:929:50 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:930:43:930:50 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:931:35:931:42 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:932:35:932:42 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:933:25:933:32 | source(...) | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:934:25:934:32 | source(...) | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:935:34:935:41 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:936:34:936:41 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:937:54:937:61 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:938:49:938:56 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:939:34:939:41 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:940:64:940:71 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:941:49:941:56 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:942:34:942:41 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:943:79:943:86 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:944:64:944:71 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:945:49:945:56 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:946:34:946:41 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:947:94:947:101 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:948:79:948:86 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:949:64:949:71 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:950:49:950:56 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:951:34:951:41 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:952:109:952:116 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:953:94:953:101 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:954:79:954:86 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:955:64:955:71 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:956:49:956:56 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:957:34:957:41 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:958:124:958:131 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:959:109:959:116 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:960:94:960:101 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:961:79:961:86 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:962:64:962:71 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:963:49:963:56 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:964:34:964:41 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:965:139:965:146 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:966:124:966:131 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:967:109:967:116 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:968:94:968:101 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:969:79:969:86 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:970:64:970:71 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:971:49:971:56 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:972:34:972:41 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:973:154:973:161 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:974:139:974:146 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:975:124:975:131 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:976:109:976:116 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:977:94:977:101 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:978:79:978:86 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:979:64:979:71 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:980:49:980:56 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:981:34:981:41 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:982:169:982:176 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:983:154:983:161 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:984:139:984:146 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:985:124:985:131 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:986:109:986:116 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:987:94:987:101 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:988:79:988:86 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:989:64:989:71 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:990:49:990:56 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:991:34:991:41 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:992:34:992:41 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:993:54:993:61 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:994:34:994:41 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:995:39:995:46 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:996:39:996:46 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:998:65:998:72 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:999:48:999:55 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1000:59:1000:66 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1001:42:1001:49 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1002:53:1002:60 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1020:40:1020:47 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1021:35:1021:42 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1022:25:1022:32 | source(...) | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1023:34:1023:41 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1024:34:1024:41 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1025:54:1025:61 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1026:40:1026:47 | source(...) | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1028:49:1028:56 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1029:34:1029:41 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1030:64:1030:71 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1031:49:1031:56 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1032:34:1032:41 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1033:79:1033:86 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1034:64:1034:71 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1035:49:1035:56 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1036:34:1036:41 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1037:94:1037:101 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1038:79:1038:86 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1039:64:1039:71 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1040:49:1040:56 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1041:34:1041:41 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1042:109:1042:116 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1043:94:1043:101 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1044:79:1044:86 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1045:64:1045:71 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1046:49:1046:56 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1047:34:1047:41 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1048:124:1048:131 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1049:109:1049:116 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1050:94:1050:101 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1051:79:1051:86 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1052:64:1052:71 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1053:49:1053:56 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1054:34:1054:41 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1055:139:1055:146 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1056:124:1056:131 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1057:109:1057:116 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1058:94:1058:101 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1059:79:1059:86 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1060:64:1060:71 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1061:49:1061:56 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1062:34:1062:41 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1063:154:1063:161 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1064:139:1064:146 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1065:124:1065:131 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1066:109:1066:116 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1067:94:1067:101 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1068:79:1068:86 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1069:64:1069:71 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1070:49:1070:56 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1071:34:1071:41 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1072:169:1072:176 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1073:154:1073:161 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1074:139:1074:146 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1075:124:1075:131 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1076:109:1076:116 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1077:94:1077:101 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1078:79:1078:86 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1079:64:1079:71 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1080:49:1080:56 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1081:34:1081:41 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1083:34:1083:41 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1084:54:1084:61 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1085:39:1085:46 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1088:47:1088:54 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1089:53:1089:60 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1091:37:1091:44 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1095:80:1095:87 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1100:44:1100:51 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1105:43:1105:50 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1111:42:1111:49 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1116:61:1116:68 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1117:81:1117:88 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1119:42:1119:49 | source(...) : String | provenance | | +| Log4jJndiInjectionTest.java:31:41:31:48 | source(...) : String | Log4jJndiInjectionTest.java:31:26:31:48 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:32:41:32:48 | source(...) : String | Log4jJndiInjectionTest.java:32:26:32:48 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:33:56:33:63 | source(...) : String | Log4jJndiInjectionTest.java:33:41:33:63 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:34:56:34:63 | source(...) : String | Log4jJndiInjectionTest.java:34:41:34:63 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:35:51:35:58 | source(...) : String | Log4jJndiInjectionTest.java:35:41:35:58 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:36:59:36:66 | source(...) : String | Log4jJndiInjectionTest.java:36:41:36:66 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:37:59:37:66 | source(...) : String | Log4jJndiInjectionTest.java:37:41:37:66 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:39:50:39:57 | source(...) : String | Log4jJndiInjectionTest.java:39:41:39:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:40:50:40:57 | source(...) : String | Log4jJndiInjectionTest.java:40:41:40:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:41:56:41:78 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:41:56:41:78 | new Object[] | provenance | | +| Log4jJndiInjectionTest.java:41:70:41:77 | source(...) : String | Log4jJndiInjectionTest.java:41:56:41:78 | {...} : Object[] [[]] : String | provenance | | +| Log4jJndiInjectionTest.java:42:65:42:72 | source(...) : String | Log4jJndiInjectionTest.java:42:56:42:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:43:50:43:57 | source(...) : String | Log4jJndiInjectionTest.java:43:41:43:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:44:80:44:87 | source(...) : String | Log4jJndiInjectionTest.java:44:71:44:87 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:45:65:45:72 | source(...) : String | Log4jJndiInjectionTest.java:45:56:45:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:46:50:46:57 | source(...) : String | Log4jJndiInjectionTest.java:46:41:46:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:47:95:47:102 | source(...) : String | Log4jJndiInjectionTest.java:47:86:47:102 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:48:80:48:87 | source(...) : String | Log4jJndiInjectionTest.java:48:71:48:87 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:49:65:49:72 | source(...) : String | Log4jJndiInjectionTest.java:49:56:49:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:50:50:50:57 | source(...) : String | Log4jJndiInjectionTest.java:50:41:50:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:51:110:51:117 | source(...) : String | Log4jJndiInjectionTest.java:51:101:51:117 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:52:95:52:102 | source(...) : String | Log4jJndiInjectionTest.java:52:86:52:102 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:53:80:53:87 | source(...) : String | Log4jJndiInjectionTest.java:53:71:53:87 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:54:65:54:72 | source(...) : String | Log4jJndiInjectionTest.java:54:56:54:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:55:50:55:57 | source(...) : String | Log4jJndiInjectionTest.java:55:41:55:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:56:125:56:132 | source(...) : String | Log4jJndiInjectionTest.java:56:116:56:132 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:57:110:57:117 | source(...) : String | Log4jJndiInjectionTest.java:57:101:57:117 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:58:95:58:102 | source(...) : String | Log4jJndiInjectionTest.java:58:86:58:102 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:59:80:59:87 | source(...) : String | Log4jJndiInjectionTest.java:59:71:59:87 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:60:65:60:72 | source(...) : String | Log4jJndiInjectionTest.java:60:56:60:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:61:50:61:57 | source(...) : String | Log4jJndiInjectionTest.java:61:41:61:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:62:140:62:147 | source(...) : String | Log4jJndiInjectionTest.java:62:131:62:147 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:63:125:63:132 | source(...) : String | Log4jJndiInjectionTest.java:63:116:63:132 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:64:110:64:117 | source(...) : String | Log4jJndiInjectionTest.java:64:101:64:117 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:65:95:65:102 | source(...) : String | Log4jJndiInjectionTest.java:65:86:65:102 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:66:80:66:87 | source(...) : String | Log4jJndiInjectionTest.java:66:71:66:87 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:67:65:67:72 | source(...) : String | Log4jJndiInjectionTest.java:67:56:67:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:68:50:68:57 | source(...) : String | Log4jJndiInjectionTest.java:68:41:68:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:69:155:69:162 | source(...) : String | Log4jJndiInjectionTest.java:69:146:69:162 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:70:140:70:147 | source(...) : String | Log4jJndiInjectionTest.java:70:131:70:147 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:71:125:71:132 | source(...) : String | Log4jJndiInjectionTest.java:71:116:71:132 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:72:110:72:117 | source(...) : String | Log4jJndiInjectionTest.java:72:101:72:117 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:73:95:73:102 | source(...) : String | Log4jJndiInjectionTest.java:73:86:73:102 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:74:80:74:87 | source(...) : String | Log4jJndiInjectionTest.java:74:71:74:87 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:75:65:75:72 | source(...) : String | Log4jJndiInjectionTest.java:75:56:75:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:76:50:76:57 | source(...) : String | Log4jJndiInjectionTest.java:76:41:76:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:77:170:77:177 | source(...) : String | Log4jJndiInjectionTest.java:77:161:77:177 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:78:155:78:162 | source(...) : String | Log4jJndiInjectionTest.java:78:146:78:162 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:79:140:79:147 | source(...) : String | Log4jJndiInjectionTest.java:79:131:79:147 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:80:125:80:132 | source(...) : String | Log4jJndiInjectionTest.java:80:116:80:132 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:81:110:81:117 | source(...) : String | Log4jJndiInjectionTest.java:81:101:81:117 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:82:95:82:102 | source(...) : String | Log4jJndiInjectionTest.java:82:86:82:102 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:83:80:83:87 | source(...) : String | Log4jJndiInjectionTest.java:83:71:83:87 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:84:65:84:72 | source(...) : String | Log4jJndiInjectionTest.java:84:56:84:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:85:50:85:57 | source(...) : String | Log4jJndiInjectionTest.java:85:41:85:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:86:185:86:192 | source(...) : String | Log4jJndiInjectionTest.java:86:176:86:192 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:87:170:87:177 | source(...) : String | Log4jJndiInjectionTest.java:87:161:87:177 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:88:155:88:162 | source(...) : String | Log4jJndiInjectionTest.java:88:146:88:162 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:89:140:89:147 | source(...) : String | Log4jJndiInjectionTest.java:89:131:89:147 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:90:125:90:132 | source(...) : String | Log4jJndiInjectionTest.java:90:116:90:132 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:91:110:91:117 | source(...) : String | Log4jJndiInjectionTest.java:91:101:91:117 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:92:95:92:102 | source(...) : String | Log4jJndiInjectionTest.java:92:86:92:102 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:93:80:93:87 | source(...) : String | Log4jJndiInjectionTest.java:93:71:93:87 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:94:65:94:72 | source(...) : String | Log4jJndiInjectionTest.java:94:56:94:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:95:50:95:57 | source(...) : String | Log4jJndiInjectionTest.java:95:41:95:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:96:50:96:57 | source(...) : String | Log4jJndiInjectionTest.java:96:41:96:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:97:70:97:77 | source(...) : String | Log4jJndiInjectionTest.java:97:56:97:77 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:98:50:98:57 | source(...) : String | Log4jJndiInjectionTest.java:98:41:98:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:99:55:99:62 | source(...) : String | Log4jJndiInjectionTest.java:99:41:99:62 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:100:55:100:62 | source(...) : String | Log4jJndiInjectionTest.java:100:41:100:62 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:101:44:101:51 | source(...) : String | Log4jJndiInjectionTest.java:101:26:101:51 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:102:44:102:51 | source(...) : String | Log4jJndiInjectionTest.java:102:26:102:51 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:103:36:103:43 | source(...) : String | Log4jJndiInjectionTest.java:103:26:103:43 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:104:36:104:43 | source(...) : String | Log4jJndiInjectionTest.java:104:26:104:43 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:107:35:107:42 | source(...) : String | Log4jJndiInjectionTest.java:107:26:107:42 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:108:35:108:42 | source(...) : String | Log4jJndiInjectionTest.java:108:26:108:42 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:109:41:109:63 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:109:41:109:63 | new Object[] | provenance | | +| Log4jJndiInjectionTest.java:109:55:109:62 | source(...) : String | Log4jJndiInjectionTest.java:109:41:109:63 | {...} : Object[] [[]] : String | provenance | | +| Log4jJndiInjectionTest.java:110:50:110:57 | source(...) : String | Log4jJndiInjectionTest.java:110:41:110:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:111:35:111:42 | source(...) : String | Log4jJndiInjectionTest.java:111:26:111:42 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:112:65:112:72 | source(...) : String | Log4jJndiInjectionTest.java:112:56:112:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:113:50:113:57 | source(...) : String | Log4jJndiInjectionTest.java:113:41:113:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:114:35:114:42 | source(...) : String | Log4jJndiInjectionTest.java:114:26:114:42 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:115:80:115:87 | source(...) : String | Log4jJndiInjectionTest.java:115:71:115:87 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:116:65:116:72 | source(...) : String | Log4jJndiInjectionTest.java:116:56:116:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:117:50:117:57 | source(...) : String | Log4jJndiInjectionTest.java:117:41:117:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:118:35:118:42 | source(...) : String | Log4jJndiInjectionTest.java:118:26:118:42 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:119:95:119:102 | source(...) : String | Log4jJndiInjectionTest.java:119:86:119:102 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:120:80:120:87 | source(...) : String | Log4jJndiInjectionTest.java:120:71:120:87 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:121:65:121:72 | source(...) : String | Log4jJndiInjectionTest.java:121:56:121:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:122:50:122:57 | source(...) : String | Log4jJndiInjectionTest.java:122:41:122:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:123:35:123:42 | source(...) : String | Log4jJndiInjectionTest.java:123:26:123:42 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:124:110:124:117 | source(...) : String | Log4jJndiInjectionTest.java:124:101:124:117 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:125:95:125:102 | source(...) : String | Log4jJndiInjectionTest.java:125:86:125:102 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:126:80:126:87 | source(...) : String | Log4jJndiInjectionTest.java:126:71:126:87 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:127:65:127:72 | source(...) : String | Log4jJndiInjectionTest.java:127:56:127:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:128:50:128:57 | source(...) : String | Log4jJndiInjectionTest.java:128:41:128:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:129:35:129:42 | source(...) : String | Log4jJndiInjectionTest.java:129:26:129:42 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:130:125:130:132 | source(...) : String | Log4jJndiInjectionTest.java:130:116:130:132 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:131:110:131:117 | source(...) : String | Log4jJndiInjectionTest.java:131:101:131:117 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:132:95:132:102 | source(...) : String | Log4jJndiInjectionTest.java:132:86:132:102 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:133:80:133:87 | source(...) : String | Log4jJndiInjectionTest.java:133:71:133:87 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:134:65:134:72 | source(...) : String | Log4jJndiInjectionTest.java:134:56:134:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:135:50:135:57 | source(...) : String | Log4jJndiInjectionTest.java:135:41:135:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:136:35:136:42 | source(...) : String | Log4jJndiInjectionTest.java:136:26:136:42 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:137:140:137:147 | source(...) : String | Log4jJndiInjectionTest.java:137:131:137:147 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:138:125:138:132 | source(...) : String | Log4jJndiInjectionTest.java:138:116:138:132 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:139:110:139:117 | source(...) : String | Log4jJndiInjectionTest.java:139:101:139:117 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:140:95:140:102 | source(...) : String | Log4jJndiInjectionTest.java:140:86:140:102 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:141:80:141:87 | source(...) : String | Log4jJndiInjectionTest.java:141:71:141:87 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:142:65:142:72 | source(...) : String | Log4jJndiInjectionTest.java:142:56:142:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:143:50:143:57 | source(...) : String | Log4jJndiInjectionTest.java:143:41:143:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:144:35:144:42 | source(...) : String | Log4jJndiInjectionTest.java:144:26:144:42 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:145:155:145:162 | source(...) : String | Log4jJndiInjectionTest.java:145:146:145:162 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:146:140:146:147 | source(...) : String | Log4jJndiInjectionTest.java:146:131:146:147 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:147:125:147:132 | source(...) : String | Log4jJndiInjectionTest.java:147:116:147:132 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:148:110:148:117 | source(...) : String | Log4jJndiInjectionTest.java:148:101:148:117 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:149:95:149:102 | source(...) : String | Log4jJndiInjectionTest.java:149:86:149:102 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:150:80:150:87 | source(...) : String | Log4jJndiInjectionTest.java:150:71:150:87 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:151:65:151:72 | source(...) : String | Log4jJndiInjectionTest.java:151:56:151:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:152:50:152:57 | source(...) : String | Log4jJndiInjectionTest.java:152:41:152:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:153:35:153:42 | source(...) : String | Log4jJndiInjectionTest.java:153:26:153:42 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:154:170:154:177 | source(...) : String | Log4jJndiInjectionTest.java:154:161:154:177 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:155:155:155:162 | source(...) : String | Log4jJndiInjectionTest.java:155:146:155:162 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:156:140:156:147 | source(...) : String | Log4jJndiInjectionTest.java:156:131:156:147 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:157:125:157:132 | source(...) : String | Log4jJndiInjectionTest.java:157:116:157:132 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:158:110:158:117 | source(...) : String | Log4jJndiInjectionTest.java:158:101:158:117 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:159:95:159:102 | source(...) : String | Log4jJndiInjectionTest.java:159:86:159:102 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:160:80:160:87 | source(...) : String | Log4jJndiInjectionTest.java:160:71:160:87 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:161:65:161:72 | source(...) : String | Log4jJndiInjectionTest.java:161:56:161:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:162:50:162:57 | source(...) : String | Log4jJndiInjectionTest.java:162:41:162:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:163:35:163:42 | source(...) : String | Log4jJndiInjectionTest.java:163:26:163:42 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:164:35:164:42 | source(...) : String | Log4jJndiInjectionTest.java:164:26:164:42 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:165:55:165:62 | source(...) : String | Log4jJndiInjectionTest.java:165:41:165:62 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:166:35:166:42 | source(...) : String | Log4jJndiInjectionTest.java:166:26:166:42 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:167:40:167:47 | source(...) : String | Log4jJndiInjectionTest.java:167:26:167:47 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:168:40:168:47 | source(...) : String | Log4jJndiInjectionTest.java:168:26:168:47 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:169:41:169:48 | source(...) : String | Log4jJndiInjectionTest.java:169:26:169:48 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:170:41:170:48 | source(...) : String | Log4jJndiInjectionTest.java:170:26:170:48 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:171:56:171:63 | source(...) : String | Log4jJndiInjectionTest.java:171:41:171:63 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:172:56:172:63 | source(...) : String | Log4jJndiInjectionTest.java:172:41:172:63 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:173:51:173:58 | source(...) : String | Log4jJndiInjectionTest.java:173:41:173:58 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:174:59:174:66 | source(...) : String | Log4jJndiInjectionTest.java:174:41:174:66 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:175:59:175:66 | source(...) : String | Log4jJndiInjectionTest.java:175:41:175:66 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:177:50:177:57 | source(...) : String | Log4jJndiInjectionTest.java:177:41:177:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:178:50:178:57 | source(...) : String | Log4jJndiInjectionTest.java:178:41:178:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:179:56:179:78 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:179:56:179:78 | new Object[] | provenance | | +| Log4jJndiInjectionTest.java:179:70:179:77 | source(...) : String | Log4jJndiInjectionTest.java:179:56:179:78 | {...} : Object[] [[]] : String | provenance | | +| Log4jJndiInjectionTest.java:180:65:180:72 | source(...) : String | Log4jJndiInjectionTest.java:180:56:180:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:181:50:181:57 | source(...) : String | Log4jJndiInjectionTest.java:181:41:181:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:182:80:182:87 | source(...) : String | Log4jJndiInjectionTest.java:182:71:182:87 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:183:65:183:72 | source(...) : String | Log4jJndiInjectionTest.java:183:56:183:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:184:50:184:57 | source(...) : String | Log4jJndiInjectionTest.java:184:41:184:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:185:95:185:102 | source(...) : String | Log4jJndiInjectionTest.java:185:86:185:102 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:186:80:186:87 | source(...) : String | Log4jJndiInjectionTest.java:186:71:186:87 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:187:65:187:72 | source(...) : String | Log4jJndiInjectionTest.java:187:56:187:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:188:50:188:57 | source(...) : String | Log4jJndiInjectionTest.java:188:41:188:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:189:110:189:117 | source(...) : String | Log4jJndiInjectionTest.java:189:101:189:117 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:190:95:190:102 | source(...) : String | Log4jJndiInjectionTest.java:190:86:190:102 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:191:80:191:87 | source(...) : String | Log4jJndiInjectionTest.java:191:71:191:87 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:192:65:192:72 | source(...) : String | Log4jJndiInjectionTest.java:192:56:192:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:193:50:193:57 | source(...) : String | Log4jJndiInjectionTest.java:193:41:193:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:194:125:194:132 | source(...) : String | Log4jJndiInjectionTest.java:194:116:194:132 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:195:110:195:117 | source(...) : String | Log4jJndiInjectionTest.java:195:101:195:117 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:196:95:196:102 | source(...) : String | Log4jJndiInjectionTest.java:196:86:196:102 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:197:80:197:87 | source(...) : String | Log4jJndiInjectionTest.java:197:71:197:87 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:198:65:198:72 | source(...) : String | Log4jJndiInjectionTest.java:198:56:198:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:199:50:199:57 | source(...) : String | Log4jJndiInjectionTest.java:199:41:199:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:200:140:200:147 | source(...) : String | Log4jJndiInjectionTest.java:200:131:200:147 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:201:125:201:132 | source(...) : String | Log4jJndiInjectionTest.java:201:116:201:132 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:202:110:202:117 | source(...) : String | Log4jJndiInjectionTest.java:202:101:202:117 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:203:95:203:102 | source(...) : String | Log4jJndiInjectionTest.java:203:86:203:102 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:204:80:204:87 | source(...) : String | Log4jJndiInjectionTest.java:204:71:204:87 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:205:65:205:72 | source(...) : String | Log4jJndiInjectionTest.java:205:56:205:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:206:50:206:57 | source(...) : String | Log4jJndiInjectionTest.java:206:41:206:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:207:155:207:162 | source(...) : String | Log4jJndiInjectionTest.java:207:146:207:162 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:208:140:208:147 | source(...) : String | Log4jJndiInjectionTest.java:208:131:208:147 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:209:125:209:132 | source(...) : String | Log4jJndiInjectionTest.java:209:116:209:132 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:210:110:210:117 | source(...) : String | Log4jJndiInjectionTest.java:210:101:210:117 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:211:95:211:102 | source(...) : String | Log4jJndiInjectionTest.java:211:86:211:102 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:212:80:212:87 | source(...) : String | Log4jJndiInjectionTest.java:212:71:212:87 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:213:65:213:72 | source(...) : String | Log4jJndiInjectionTest.java:213:56:213:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:214:50:214:57 | source(...) : String | Log4jJndiInjectionTest.java:214:41:214:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:215:170:215:177 | source(...) : String | Log4jJndiInjectionTest.java:215:161:215:177 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:216:155:216:162 | source(...) : String | Log4jJndiInjectionTest.java:216:146:216:162 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:217:140:217:147 | source(...) : String | Log4jJndiInjectionTest.java:217:131:217:147 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:218:125:218:132 | source(...) : String | Log4jJndiInjectionTest.java:218:116:218:132 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:219:110:219:117 | source(...) : String | Log4jJndiInjectionTest.java:219:101:219:117 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:220:95:220:102 | source(...) : String | Log4jJndiInjectionTest.java:220:86:220:102 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:221:80:221:87 | source(...) : String | Log4jJndiInjectionTest.java:221:71:221:87 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:222:65:222:72 | source(...) : String | Log4jJndiInjectionTest.java:222:56:222:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:223:50:223:57 | source(...) : String | Log4jJndiInjectionTest.java:223:41:223:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:224:185:224:192 | source(...) : String | Log4jJndiInjectionTest.java:224:176:224:192 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:225:170:225:177 | source(...) : String | Log4jJndiInjectionTest.java:225:161:225:177 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:226:155:226:162 | source(...) : String | Log4jJndiInjectionTest.java:226:146:226:162 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:227:140:227:147 | source(...) : String | Log4jJndiInjectionTest.java:227:131:227:147 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:228:125:228:132 | source(...) : String | Log4jJndiInjectionTest.java:228:116:228:132 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:229:110:229:117 | source(...) : String | Log4jJndiInjectionTest.java:229:101:229:117 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:230:95:230:102 | source(...) : String | Log4jJndiInjectionTest.java:230:86:230:102 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:231:80:231:87 | source(...) : String | Log4jJndiInjectionTest.java:231:71:231:87 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:232:65:232:72 | source(...) : String | Log4jJndiInjectionTest.java:232:56:232:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:233:50:233:57 | source(...) : String | Log4jJndiInjectionTest.java:233:41:233:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:234:50:234:57 | source(...) : String | Log4jJndiInjectionTest.java:234:41:234:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:235:70:235:77 | source(...) : String | Log4jJndiInjectionTest.java:235:56:235:77 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:236:50:236:57 | source(...) : String | Log4jJndiInjectionTest.java:236:41:236:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:237:55:237:62 | source(...) : String | Log4jJndiInjectionTest.java:237:41:237:62 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:238:55:238:62 | source(...) : String | Log4jJndiInjectionTest.java:238:41:238:62 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:239:44:239:51 | source(...) : String | Log4jJndiInjectionTest.java:239:26:239:51 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:240:44:240:51 | source(...) : String | Log4jJndiInjectionTest.java:240:26:240:51 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:241:36:241:43 | source(...) : String | Log4jJndiInjectionTest.java:241:26:241:43 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:242:36:242:43 | source(...) : String | Log4jJndiInjectionTest.java:242:26:242:43 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:245:35:245:42 | source(...) : String | Log4jJndiInjectionTest.java:245:26:245:42 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:246:35:246:42 | source(...) : String | Log4jJndiInjectionTest.java:246:26:246:42 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:247:41:247:63 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:247:41:247:63 | new Object[] | provenance | | +| Log4jJndiInjectionTest.java:247:55:247:62 | source(...) : String | Log4jJndiInjectionTest.java:247:41:247:63 | {...} : Object[] [[]] : String | provenance | | +| Log4jJndiInjectionTest.java:248:50:248:57 | source(...) : String | Log4jJndiInjectionTest.java:248:41:248:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:249:35:249:42 | source(...) : String | Log4jJndiInjectionTest.java:249:26:249:42 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:250:65:250:72 | source(...) : String | Log4jJndiInjectionTest.java:250:56:250:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:251:50:251:57 | source(...) : String | Log4jJndiInjectionTest.java:251:41:251:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:252:35:252:42 | source(...) : String | Log4jJndiInjectionTest.java:252:26:252:42 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:253:80:253:87 | source(...) : String | Log4jJndiInjectionTest.java:253:71:253:87 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:254:65:254:72 | source(...) : String | Log4jJndiInjectionTest.java:254:56:254:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:255:50:255:57 | source(...) : String | Log4jJndiInjectionTest.java:255:41:255:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:256:35:256:42 | source(...) : String | Log4jJndiInjectionTest.java:256:26:256:42 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:257:95:257:102 | source(...) : String | Log4jJndiInjectionTest.java:257:86:257:102 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:258:80:258:87 | source(...) : String | Log4jJndiInjectionTest.java:258:71:258:87 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:259:65:259:72 | source(...) : String | Log4jJndiInjectionTest.java:259:56:259:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:260:50:260:57 | source(...) : String | Log4jJndiInjectionTest.java:260:41:260:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:261:35:261:42 | source(...) : String | Log4jJndiInjectionTest.java:261:26:261:42 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:262:110:262:117 | source(...) : String | Log4jJndiInjectionTest.java:262:101:262:117 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:263:95:263:102 | source(...) : String | Log4jJndiInjectionTest.java:263:86:263:102 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:264:80:264:87 | source(...) : String | Log4jJndiInjectionTest.java:264:71:264:87 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:265:65:265:72 | source(...) : String | Log4jJndiInjectionTest.java:265:56:265:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:266:50:266:57 | source(...) : String | Log4jJndiInjectionTest.java:266:41:266:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:267:35:267:42 | source(...) : String | Log4jJndiInjectionTest.java:267:26:267:42 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:268:125:268:132 | source(...) : String | Log4jJndiInjectionTest.java:268:116:268:132 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:269:110:269:117 | source(...) : String | Log4jJndiInjectionTest.java:269:101:269:117 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:270:95:270:102 | source(...) : String | Log4jJndiInjectionTest.java:270:86:270:102 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:271:80:271:87 | source(...) : String | Log4jJndiInjectionTest.java:271:71:271:87 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:272:65:272:72 | source(...) : String | Log4jJndiInjectionTest.java:272:56:272:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:273:50:273:57 | source(...) : String | Log4jJndiInjectionTest.java:273:41:273:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:274:35:274:42 | source(...) : String | Log4jJndiInjectionTest.java:274:26:274:42 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:275:140:275:147 | source(...) : String | Log4jJndiInjectionTest.java:275:131:275:147 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:276:125:276:132 | source(...) : String | Log4jJndiInjectionTest.java:276:116:276:132 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:277:110:277:117 | source(...) : String | Log4jJndiInjectionTest.java:277:101:277:117 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:278:95:278:102 | source(...) : String | Log4jJndiInjectionTest.java:278:86:278:102 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:279:80:279:87 | source(...) : String | Log4jJndiInjectionTest.java:279:71:279:87 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:280:65:280:72 | source(...) : String | Log4jJndiInjectionTest.java:280:56:280:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:281:50:281:57 | source(...) : String | Log4jJndiInjectionTest.java:281:41:281:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:282:35:282:42 | source(...) : String | Log4jJndiInjectionTest.java:282:26:282:42 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:283:155:283:162 | source(...) : String | Log4jJndiInjectionTest.java:283:146:283:162 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:284:140:284:147 | source(...) : String | Log4jJndiInjectionTest.java:284:131:284:147 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:285:125:285:132 | source(...) : String | Log4jJndiInjectionTest.java:285:116:285:132 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:286:110:286:117 | source(...) : String | Log4jJndiInjectionTest.java:286:101:286:117 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:287:95:287:102 | source(...) : String | Log4jJndiInjectionTest.java:287:86:287:102 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:288:80:288:87 | source(...) : String | Log4jJndiInjectionTest.java:288:71:288:87 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:289:65:289:72 | source(...) : String | Log4jJndiInjectionTest.java:289:56:289:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:290:50:290:57 | source(...) : String | Log4jJndiInjectionTest.java:290:41:290:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:291:35:291:42 | source(...) : String | Log4jJndiInjectionTest.java:291:26:291:42 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:292:170:292:177 | source(...) : String | Log4jJndiInjectionTest.java:292:161:292:177 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:293:155:293:162 | source(...) : String | Log4jJndiInjectionTest.java:293:146:293:162 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:294:140:294:147 | source(...) : String | Log4jJndiInjectionTest.java:294:131:294:147 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:295:125:295:132 | source(...) : String | Log4jJndiInjectionTest.java:295:116:295:132 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:296:110:296:117 | source(...) : String | Log4jJndiInjectionTest.java:296:101:296:117 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:297:95:297:102 | source(...) : String | Log4jJndiInjectionTest.java:297:86:297:102 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:298:80:298:87 | source(...) : String | Log4jJndiInjectionTest.java:298:71:298:87 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:299:65:299:72 | source(...) : String | Log4jJndiInjectionTest.java:299:56:299:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:300:50:300:57 | source(...) : String | Log4jJndiInjectionTest.java:300:41:300:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:301:35:301:42 | source(...) : String | Log4jJndiInjectionTest.java:301:26:301:42 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:302:35:302:42 | source(...) : String | Log4jJndiInjectionTest.java:302:26:302:42 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:303:55:303:62 | source(...) : String | Log4jJndiInjectionTest.java:303:41:303:62 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:304:35:304:42 | source(...) : String | Log4jJndiInjectionTest.java:304:26:304:42 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:305:40:305:47 | source(...) : String | Log4jJndiInjectionTest.java:305:26:305:47 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:306:40:306:47 | source(...) : String | Log4jJndiInjectionTest.java:306:26:306:47 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:307:41:307:48 | source(...) : String | Log4jJndiInjectionTest.java:307:26:307:48 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:308:41:308:48 | source(...) : String | Log4jJndiInjectionTest.java:308:26:308:48 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:309:56:309:63 | source(...) : String | Log4jJndiInjectionTest.java:309:41:309:63 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:310:56:310:63 | source(...) : String | Log4jJndiInjectionTest.java:310:41:310:63 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:311:51:311:58 | source(...) : String | Log4jJndiInjectionTest.java:311:41:311:58 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:312:59:312:66 | source(...) : String | Log4jJndiInjectionTest.java:312:41:312:66 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:313:59:313:66 | source(...) : String | Log4jJndiInjectionTest.java:313:41:313:66 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:315:50:315:57 | source(...) : String | Log4jJndiInjectionTest.java:315:41:315:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:316:50:316:57 | source(...) : String | Log4jJndiInjectionTest.java:316:41:316:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:317:56:317:78 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:317:56:317:78 | new Object[] | provenance | | +| Log4jJndiInjectionTest.java:317:70:317:77 | source(...) : String | Log4jJndiInjectionTest.java:317:56:317:78 | {...} : Object[] [[]] : String | provenance | | +| Log4jJndiInjectionTest.java:318:65:318:72 | source(...) : String | Log4jJndiInjectionTest.java:318:56:318:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:319:50:319:57 | source(...) : String | Log4jJndiInjectionTest.java:319:41:319:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:320:80:320:87 | source(...) : String | Log4jJndiInjectionTest.java:320:71:320:87 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:321:65:321:72 | source(...) : String | Log4jJndiInjectionTest.java:321:56:321:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:322:50:322:57 | source(...) : String | Log4jJndiInjectionTest.java:322:41:322:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:323:95:323:102 | source(...) : String | Log4jJndiInjectionTest.java:323:86:323:102 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:324:80:324:87 | source(...) : String | Log4jJndiInjectionTest.java:324:71:324:87 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:325:65:325:72 | source(...) : String | Log4jJndiInjectionTest.java:325:56:325:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:326:50:326:57 | source(...) : String | Log4jJndiInjectionTest.java:326:41:326:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:327:110:327:117 | source(...) : String | Log4jJndiInjectionTest.java:327:101:327:117 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:328:95:328:102 | source(...) : String | Log4jJndiInjectionTest.java:328:86:328:102 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:329:80:329:87 | source(...) : String | Log4jJndiInjectionTest.java:329:71:329:87 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:330:65:330:72 | source(...) : String | Log4jJndiInjectionTest.java:330:56:330:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:331:50:331:57 | source(...) : String | Log4jJndiInjectionTest.java:331:41:331:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:332:125:332:132 | source(...) : String | Log4jJndiInjectionTest.java:332:116:332:132 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:333:110:333:117 | source(...) : String | Log4jJndiInjectionTest.java:333:101:333:117 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:334:95:334:102 | source(...) : String | Log4jJndiInjectionTest.java:334:86:334:102 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:335:80:335:87 | source(...) : String | Log4jJndiInjectionTest.java:335:71:335:87 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:336:65:336:72 | source(...) : String | Log4jJndiInjectionTest.java:336:56:336:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:337:50:337:57 | source(...) : String | Log4jJndiInjectionTest.java:337:41:337:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:338:140:338:147 | source(...) : String | Log4jJndiInjectionTest.java:338:131:338:147 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:339:125:339:132 | source(...) : String | Log4jJndiInjectionTest.java:339:116:339:132 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:340:110:340:117 | source(...) : String | Log4jJndiInjectionTest.java:340:101:340:117 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:341:95:341:102 | source(...) : String | Log4jJndiInjectionTest.java:341:86:341:102 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:342:80:342:87 | source(...) : String | Log4jJndiInjectionTest.java:342:71:342:87 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:343:65:343:72 | source(...) : String | Log4jJndiInjectionTest.java:343:56:343:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:344:50:344:57 | source(...) : String | Log4jJndiInjectionTest.java:344:41:344:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:345:155:345:162 | source(...) : String | Log4jJndiInjectionTest.java:345:146:345:162 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:346:140:346:147 | source(...) : String | Log4jJndiInjectionTest.java:346:131:346:147 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:347:125:347:132 | source(...) : String | Log4jJndiInjectionTest.java:347:116:347:132 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:348:110:348:117 | source(...) : String | Log4jJndiInjectionTest.java:348:101:348:117 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:349:95:349:102 | source(...) : String | Log4jJndiInjectionTest.java:349:86:349:102 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:350:80:350:87 | source(...) : String | Log4jJndiInjectionTest.java:350:71:350:87 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:351:65:351:72 | source(...) : String | Log4jJndiInjectionTest.java:351:56:351:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:352:50:352:57 | source(...) : String | Log4jJndiInjectionTest.java:352:41:352:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:353:170:353:177 | source(...) : String | Log4jJndiInjectionTest.java:353:161:353:177 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:354:155:354:162 | source(...) : String | Log4jJndiInjectionTest.java:354:146:354:162 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:355:140:355:147 | source(...) : String | Log4jJndiInjectionTest.java:355:131:355:147 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:356:125:356:132 | source(...) : String | Log4jJndiInjectionTest.java:356:116:356:132 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:357:110:357:117 | source(...) : String | Log4jJndiInjectionTest.java:357:101:357:117 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:358:95:358:102 | source(...) : String | Log4jJndiInjectionTest.java:358:86:358:102 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:359:80:359:87 | source(...) : String | Log4jJndiInjectionTest.java:359:71:359:87 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:360:65:360:72 | source(...) : String | Log4jJndiInjectionTest.java:360:56:360:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:361:50:361:57 | source(...) : String | Log4jJndiInjectionTest.java:361:41:361:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:362:185:362:192 | source(...) : String | Log4jJndiInjectionTest.java:362:176:362:192 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:363:170:363:177 | source(...) : String | Log4jJndiInjectionTest.java:363:161:363:177 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:364:155:364:162 | source(...) : String | Log4jJndiInjectionTest.java:364:146:364:162 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:365:140:365:147 | source(...) : String | Log4jJndiInjectionTest.java:365:131:365:147 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:366:125:366:132 | source(...) : String | Log4jJndiInjectionTest.java:366:116:366:132 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:367:110:367:117 | source(...) : String | Log4jJndiInjectionTest.java:367:101:367:117 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:368:95:368:102 | source(...) : String | Log4jJndiInjectionTest.java:368:86:368:102 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:369:80:369:87 | source(...) : String | Log4jJndiInjectionTest.java:369:71:369:87 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:370:65:370:72 | source(...) : String | Log4jJndiInjectionTest.java:370:56:370:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:371:50:371:57 | source(...) : String | Log4jJndiInjectionTest.java:371:41:371:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:372:50:372:57 | source(...) : String | Log4jJndiInjectionTest.java:372:41:372:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:373:70:373:77 | source(...) : String | Log4jJndiInjectionTest.java:373:56:373:77 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:374:50:374:57 | source(...) : String | Log4jJndiInjectionTest.java:374:41:374:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:375:55:375:62 | source(...) : String | Log4jJndiInjectionTest.java:375:41:375:62 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:376:55:376:62 | source(...) : String | Log4jJndiInjectionTest.java:376:41:376:62 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:377:44:377:51 | source(...) : String | Log4jJndiInjectionTest.java:377:26:377:51 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:378:44:378:51 | source(...) : String | Log4jJndiInjectionTest.java:378:26:378:51 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:379:36:379:43 | source(...) : String | Log4jJndiInjectionTest.java:379:26:379:43 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:380:36:380:43 | source(...) : String | Log4jJndiInjectionTest.java:380:26:380:43 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:383:35:383:42 | source(...) : String | Log4jJndiInjectionTest.java:383:26:383:42 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:384:35:384:42 | source(...) : String | Log4jJndiInjectionTest.java:384:26:384:42 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:385:41:385:63 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:385:41:385:63 | new Object[] | provenance | | +| Log4jJndiInjectionTest.java:385:55:385:62 | source(...) : String | Log4jJndiInjectionTest.java:385:41:385:63 | {...} : Object[] [[]] : String | provenance | | +| Log4jJndiInjectionTest.java:386:50:386:57 | source(...) : String | Log4jJndiInjectionTest.java:386:41:386:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:387:35:387:42 | source(...) : String | Log4jJndiInjectionTest.java:387:26:387:42 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:388:65:388:72 | source(...) : String | Log4jJndiInjectionTest.java:388:56:388:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:389:50:389:57 | source(...) : String | Log4jJndiInjectionTest.java:389:41:389:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:390:35:390:42 | source(...) : String | Log4jJndiInjectionTest.java:390:26:390:42 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:391:80:391:87 | source(...) : String | Log4jJndiInjectionTest.java:391:71:391:87 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:392:65:392:72 | source(...) : String | Log4jJndiInjectionTest.java:392:56:392:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:393:50:393:57 | source(...) : String | Log4jJndiInjectionTest.java:393:41:393:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:394:35:394:42 | source(...) : String | Log4jJndiInjectionTest.java:394:26:394:42 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:395:95:395:102 | source(...) : String | Log4jJndiInjectionTest.java:395:86:395:102 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:396:80:396:87 | source(...) : String | Log4jJndiInjectionTest.java:396:71:396:87 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:397:65:397:72 | source(...) : String | Log4jJndiInjectionTest.java:397:56:397:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:398:50:398:57 | source(...) : String | Log4jJndiInjectionTest.java:398:41:398:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:399:35:399:42 | source(...) : String | Log4jJndiInjectionTest.java:399:26:399:42 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:400:110:400:117 | source(...) : String | Log4jJndiInjectionTest.java:400:101:400:117 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:401:95:401:102 | source(...) : String | Log4jJndiInjectionTest.java:401:86:401:102 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:402:80:402:87 | source(...) : String | Log4jJndiInjectionTest.java:402:71:402:87 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:403:65:403:72 | source(...) : String | Log4jJndiInjectionTest.java:403:56:403:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:404:50:404:57 | source(...) : String | Log4jJndiInjectionTest.java:404:41:404:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:405:35:405:42 | source(...) : String | Log4jJndiInjectionTest.java:405:26:405:42 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:406:125:406:132 | source(...) : String | Log4jJndiInjectionTest.java:406:116:406:132 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:407:110:407:117 | source(...) : String | Log4jJndiInjectionTest.java:407:101:407:117 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:408:95:408:102 | source(...) : String | Log4jJndiInjectionTest.java:408:86:408:102 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:409:80:409:87 | source(...) : String | Log4jJndiInjectionTest.java:409:71:409:87 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:410:65:410:72 | source(...) : String | Log4jJndiInjectionTest.java:410:56:410:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:411:50:411:57 | source(...) : String | Log4jJndiInjectionTest.java:411:41:411:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:412:35:412:42 | source(...) : String | Log4jJndiInjectionTest.java:412:26:412:42 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:413:140:413:147 | source(...) : String | Log4jJndiInjectionTest.java:413:131:413:147 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:414:125:414:132 | source(...) : String | Log4jJndiInjectionTest.java:414:116:414:132 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:415:110:415:117 | source(...) : String | Log4jJndiInjectionTest.java:415:101:415:117 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:416:95:416:102 | source(...) : String | Log4jJndiInjectionTest.java:416:86:416:102 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:417:80:417:87 | source(...) : String | Log4jJndiInjectionTest.java:417:71:417:87 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:418:65:418:72 | source(...) : String | Log4jJndiInjectionTest.java:418:56:418:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:419:50:419:57 | source(...) : String | Log4jJndiInjectionTest.java:419:41:419:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:420:35:420:42 | source(...) : String | Log4jJndiInjectionTest.java:420:26:420:42 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:421:155:421:162 | source(...) : String | Log4jJndiInjectionTest.java:421:146:421:162 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:422:140:422:147 | source(...) : String | Log4jJndiInjectionTest.java:422:131:422:147 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:423:125:423:132 | source(...) : String | Log4jJndiInjectionTest.java:423:116:423:132 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:424:110:424:117 | source(...) : String | Log4jJndiInjectionTest.java:424:101:424:117 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:425:95:425:102 | source(...) : String | Log4jJndiInjectionTest.java:425:86:425:102 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:426:80:426:87 | source(...) : String | Log4jJndiInjectionTest.java:426:71:426:87 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:427:65:427:72 | source(...) : String | Log4jJndiInjectionTest.java:427:56:427:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:428:50:428:57 | source(...) : String | Log4jJndiInjectionTest.java:428:41:428:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:429:35:429:42 | source(...) : String | Log4jJndiInjectionTest.java:429:26:429:42 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:430:170:430:177 | source(...) : String | Log4jJndiInjectionTest.java:430:161:430:177 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:431:155:431:162 | source(...) : String | Log4jJndiInjectionTest.java:431:146:431:162 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:432:140:432:147 | source(...) : String | Log4jJndiInjectionTest.java:432:131:432:147 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:433:125:433:132 | source(...) : String | Log4jJndiInjectionTest.java:433:116:433:132 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:434:110:434:117 | source(...) : String | Log4jJndiInjectionTest.java:434:101:434:117 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:435:95:435:102 | source(...) : String | Log4jJndiInjectionTest.java:435:86:435:102 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:436:80:436:87 | source(...) : String | Log4jJndiInjectionTest.java:436:71:436:87 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:437:65:437:72 | source(...) : String | Log4jJndiInjectionTest.java:437:56:437:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:438:50:438:57 | source(...) : String | Log4jJndiInjectionTest.java:438:41:438:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:439:35:439:42 | source(...) : String | Log4jJndiInjectionTest.java:439:26:439:42 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:440:35:440:42 | source(...) : String | Log4jJndiInjectionTest.java:440:26:440:42 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:441:55:441:62 | source(...) : String | Log4jJndiInjectionTest.java:441:41:441:62 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:442:35:442:42 | source(...) : String | Log4jJndiInjectionTest.java:442:26:442:42 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:443:40:443:47 | source(...) : String | Log4jJndiInjectionTest.java:443:26:443:47 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:444:40:444:47 | source(...) : String | Log4jJndiInjectionTest.java:444:26:444:47 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:445:40:445:47 | source(...) : String | Log4jJndiInjectionTest.java:445:25:445:47 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:446:40:446:47 | source(...) : String | Log4jJndiInjectionTest.java:446:25:446:47 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:447:55:447:62 | source(...) : String | Log4jJndiInjectionTest.java:447:40:447:62 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:448:55:448:62 | source(...) : String | Log4jJndiInjectionTest.java:448:40:448:62 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:449:50:449:57 | source(...) : String | Log4jJndiInjectionTest.java:449:40:449:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:450:58:450:65 | source(...) : String | Log4jJndiInjectionTest.java:450:40:450:65 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:451:58:451:65 | source(...) : String | Log4jJndiInjectionTest.java:451:40:451:65 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:453:49:453:56 | source(...) : String | Log4jJndiInjectionTest.java:453:40:453:56 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:454:49:454:56 | source(...) : String | Log4jJndiInjectionTest.java:454:40:454:56 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:455:55:455:77 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:455:55:455:77 | new Object[] | provenance | | +| Log4jJndiInjectionTest.java:455:69:455:76 | source(...) : String | Log4jJndiInjectionTest.java:455:55:455:77 | {...} : Object[] [[]] : String | provenance | | +| Log4jJndiInjectionTest.java:456:64:456:71 | source(...) : String | Log4jJndiInjectionTest.java:456:55:456:71 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:457:49:457:56 | source(...) : String | Log4jJndiInjectionTest.java:457:40:457:56 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:458:79:458:86 | source(...) : String | Log4jJndiInjectionTest.java:458:70:458:86 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:459:64:459:71 | source(...) : String | Log4jJndiInjectionTest.java:459:55:459:71 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:460:49:460:56 | source(...) : String | Log4jJndiInjectionTest.java:460:40:460:56 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:461:94:461:101 | source(...) : String | Log4jJndiInjectionTest.java:461:85:461:101 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:462:79:462:86 | source(...) : String | Log4jJndiInjectionTest.java:462:70:462:86 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:463:64:463:71 | source(...) : String | Log4jJndiInjectionTest.java:463:55:463:71 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:464:49:464:56 | source(...) : String | Log4jJndiInjectionTest.java:464:40:464:56 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:465:109:465:116 | source(...) : String | Log4jJndiInjectionTest.java:465:100:465:116 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:466:94:466:101 | source(...) : String | Log4jJndiInjectionTest.java:466:85:466:101 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:467:79:467:86 | source(...) : String | Log4jJndiInjectionTest.java:467:70:467:86 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:468:64:468:71 | source(...) : String | Log4jJndiInjectionTest.java:468:55:468:71 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:469:49:469:56 | source(...) : String | Log4jJndiInjectionTest.java:469:40:469:56 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:470:124:470:131 | source(...) : String | Log4jJndiInjectionTest.java:470:115:470:131 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:471:109:471:116 | source(...) : String | Log4jJndiInjectionTest.java:471:100:471:116 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:472:94:472:101 | source(...) : String | Log4jJndiInjectionTest.java:472:85:472:101 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:473:79:473:86 | source(...) : String | Log4jJndiInjectionTest.java:473:70:473:86 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:474:64:474:71 | source(...) : String | Log4jJndiInjectionTest.java:474:55:474:71 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:475:49:475:56 | source(...) : String | Log4jJndiInjectionTest.java:475:40:475:56 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:476:139:476:146 | source(...) : String | Log4jJndiInjectionTest.java:476:130:476:146 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:477:124:477:131 | source(...) : String | Log4jJndiInjectionTest.java:477:115:477:131 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:478:109:478:116 | source(...) : String | Log4jJndiInjectionTest.java:478:100:478:116 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:479:94:479:101 | source(...) : String | Log4jJndiInjectionTest.java:479:85:479:101 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:480:79:480:86 | source(...) : String | Log4jJndiInjectionTest.java:480:70:480:86 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:481:64:481:71 | source(...) : String | Log4jJndiInjectionTest.java:481:55:481:71 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:482:49:482:56 | source(...) : String | Log4jJndiInjectionTest.java:482:40:482:56 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:483:154:483:161 | source(...) : String | Log4jJndiInjectionTest.java:483:145:483:161 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:484:139:484:146 | source(...) : String | Log4jJndiInjectionTest.java:484:130:484:146 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:485:124:485:131 | source(...) : String | Log4jJndiInjectionTest.java:485:115:485:131 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:486:109:486:116 | source(...) : String | Log4jJndiInjectionTest.java:486:100:486:116 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:487:94:487:101 | source(...) : String | Log4jJndiInjectionTest.java:487:85:487:101 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:488:79:488:86 | source(...) : String | Log4jJndiInjectionTest.java:488:70:488:86 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:489:64:489:71 | source(...) : String | Log4jJndiInjectionTest.java:489:55:489:71 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:490:49:490:56 | source(...) : String | Log4jJndiInjectionTest.java:490:40:490:56 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:491:169:491:176 | source(...) : String | Log4jJndiInjectionTest.java:491:160:491:176 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:492:154:492:161 | source(...) : String | Log4jJndiInjectionTest.java:492:145:492:161 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:493:139:493:146 | source(...) : String | Log4jJndiInjectionTest.java:493:130:493:146 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:494:124:494:131 | source(...) : String | Log4jJndiInjectionTest.java:494:115:494:131 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:495:109:495:116 | source(...) : String | Log4jJndiInjectionTest.java:495:100:495:116 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:496:94:496:101 | source(...) : String | Log4jJndiInjectionTest.java:496:85:496:101 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:497:79:497:86 | source(...) : String | Log4jJndiInjectionTest.java:497:70:497:86 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:498:64:498:71 | source(...) : String | Log4jJndiInjectionTest.java:498:55:498:71 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:499:49:499:56 | source(...) : String | Log4jJndiInjectionTest.java:499:40:499:56 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:500:184:500:191 | source(...) : String | Log4jJndiInjectionTest.java:500:175:500:191 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:501:169:501:176 | source(...) : String | Log4jJndiInjectionTest.java:501:160:501:176 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:502:154:502:161 | source(...) : String | Log4jJndiInjectionTest.java:502:145:502:161 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:503:139:503:146 | source(...) : String | Log4jJndiInjectionTest.java:503:130:503:146 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:504:124:504:131 | source(...) : String | Log4jJndiInjectionTest.java:504:115:504:131 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:505:109:505:116 | source(...) : String | Log4jJndiInjectionTest.java:505:100:505:116 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:506:94:506:101 | source(...) : String | Log4jJndiInjectionTest.java:506:85:506:101 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:507:79:507:86 | source(...) : String | Log4jJndiInjectionTest.java:507:70:507:86 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:508:64:508:71 | source(...) : String | Log4jJndiInjectionTest.java:508:55:508:71 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:509:49:509:56 | source(...) : String | Log4jJndiInjectionTest.java:509:40:509:56 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:510:49:510:56 | source(...) : String | Log4jJndiInjectionTest.java:510:40:510:56 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:511:69:511:76 | source(...) : String | Log4jJndiInjectionTest.java:511:55:511:76 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:512:49:512:56 | source(...) : String | Log4jJndiInjectionTest.java:512:40:512:56 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:513:54:513:61 | source(...) : String | Log4jJndiInjectionTest.java:513:40:513:61 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:514:54:514:61 | source(...) : String | Log4jJndiInjectionTest.java:514:40:514:61 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:515:43:515:50 | source(...) : String | Log4jJndiInjectionTest.java:515:25:515:50 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:516:43:516:50 | source(...) : String | Log4jJndiInjectionTest.java:516:25:516:50 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:517:35:517:42 | source(...) : String | Log4jJndiInjectionTest.java:517:25:517:42 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:518:35:518:42 | source(...) : String | Log4jJndiInjectionTest.java:518:25:518:42 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:521:34:521:41 | source(...) : String | Log4jJndiInjectionTest.java:521:25:521:41 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:522:34:522:41 | source(...) : String | Log4jJndiInjectionTest.java:522:25:522:41 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:523:40:523:62 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:523:40:523:62 | new Object[] | provenance | | +| Log4jJndiInjectionTest.java:523:54:523:61 | source(...) : String | Log4jJndiInjectionTest.java:523:40:523:62 | {...} : Object[] [[]] : String | provenance | | +| Log4jJndiInjectionTest.java:524:49:524:56 | source(...) : String | Log4jJndiInjectionTest.java:524:40:524:56 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:525:34:525:41 | source(...) : String | Log4jJndiInjectionTest.java:525:25:525:41 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:526:64:526:71 | source(...) : String | Log4jJndiInjectionTest.java:526:55:526:71 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:527:49:527:56 | source(...) : String | Log4jJndiInjectionTest.java:527:40:527:56 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:528:34:528:41 | source(...) : String | Log4jJndiInjectionTest.java:528:25:528:41 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:529:79:529:86 | source(...) : String | Log4jJndiInjectionTest.java:529:70:529:86 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:530:64:530:71 | source(...) : String | Log4jJndiInjectionTest.java:530:55:530:71 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:531:49:531:56 | source(...) : String | Log4jJndiInjectionTest.java:531:40:531:56 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:532:34:532:41 | source(...) : String | Log4jJndiInjectionTest.java:532:25:532:41 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:533:94:533:101 | source(...) : String | Log4jJndiInjectionTest.java:533:85:533:101 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:534:79:534:86 | source(...) : String | Log4jJndiInjectionTest.java:534:70:534:86 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:535:64:535:71 | source(...) : String | Log4jJndiInjectionTest.java:535:55:535:71 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:536:49:536:56 | source(...) : String | Log4jJndiInjectionTest.java:536:40:536:56 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:537:34:537:41 | source(...) : String | Log4jJndiInjectionTest.java:537:25:537:41 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:538:109:538:116 | source(...) : String | Log4jJndiInjectionTest.java:538:100:538:116 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:539:94:539:101 | source(...) : String | Log4jJndiInjectionTest.java:539:85:539:101 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:540:79:540:86 | source(...) : String | Log4jJndiInjectionTest.java:540:70:540:86 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:541:64:541:71 | source(...) : String | Log4jJndiInjectionTest.java:541:55:541:71 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:542:49:542:56 | source(...) : String | Log4jJndiInjectionTest.java:542:40:542:56 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:543:34:543:41 | source(...) : String | Log4jJndiInjectionTest.java:543:25:543:41 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:544:124:544:131 | source(...) : String | Log4jJndiInjectionTest.java:544:115:544:131 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:545:109:545:116 | source(...) : String | Log4jJndiInjectionTest.java:545:100:545:116 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:546:94:546:101 | source(...) : String | Log4jJndiInjectionTest.java:546:85:546:101 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:547:79:547:86 | source(...) : String | Log4jJndiInjectionTest.java:547:70:547:86 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:548:64:548:71 | source(...) : String | Log4jJndiInjectionTest.java:548:55:548:71 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:549:49:549:56 | source(...) : String | Log4jJndiInjectionTest.java:549:40:549:56 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:550:34:550:41 | source(...) : String | Log4jJndiInjectionTest.java:550:25:550:41 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:551:139:551:146 | source(...) : String | Log4jJndiInjectionTest.java:551:130:551:146 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:552:124:552:131 | source(...) : String | Log4jJndiInjectionTest.java:552:115:552:131 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:553:109:553:116 | source(...) : String | Log4jJndiInjectionTest.java:553:100:553:116 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:554:94:554:101 | source(...) : String | Log4jJndiInjectionTest.java:554:85:554:101 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:555:79:555:86 | source(...) : String | Log4jJndiInjectionTest.java:555:70:555:86 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:556:64:556:71 | source(...) : String | Log4jJndiInjectionTest.java:556:55:556:71 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:557:49:557:56 | source(...) : String | Log4jJndiInjectionTest.java:557:40:557:56 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:558:34:558:41 | source(...) : String | Log4jJndiInjectionTest.java:558:25:558:41 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:559:154:559:161 | source(...) : String | Log4jJndiInjectionTest.java:559:145:559:161 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:560:139:560:146 | source(...) : String | Log4jJndiInjectionTest.java:560:130:560:146 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:561:124:561:131 | source(...) : String | Log4jJndiInjectionTest.java:561:115:561:131 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:562:109:562:116 | source(...) : String | Log4jJndiInjectionTest.java:562:100:562:116 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:563:94:563:101 | source(...) : String | Log4jJndiInjectionTest.java:563:85:563:101 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:564:79:564:86 | source(...) : String | Log4jJndiInjectionTest.java:564:70:564:86 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:565:64:565:71 | source(...) : String | Log4jJndiInjectionTest.java:565:55:565:71 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:566:49:566:56 | source(...) : String | Log4jJndiInjectionTest.java:566:40:566:56 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:567:34:567:41 | source(...) : String | Log4jJndiInjectionTest.java:567:25:567:41 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:568:169:568:176 | source(...) : String | Log4jJndiInjectionTest.java:568:160:568:176 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:569:154:569:161 | source(...) : String | Log4jJndiInjectionTest.java:569:145:569:161 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:570:139:570:146 | source(...) : String | Log4jJndiInjectionTest.java:570:130:570:146 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:571:124:571:131 | source(...) : String | Log4jJndiInjectionTest.java:571:115:571:131 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:572:109:572:116 | source(...) : String | Log4jJndiInjectionTest.java:572:100:572:116 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:573:94:573:101 | source(...) : String | Log4jJndiInjectionTest.java:573:85:573:101 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:574:79:574:86 | source(...) : String | Log4jJndiInjectionTest.java:574:70:574:86 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:575:64:575:71 | source(...) : String | Log4jJndiInjectionTest.java:575:55:575:71 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:576:49:576:56 | source(...) : String | Log4jJndiInjectionTest.java:576:40:576:56 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:577:34:577:41 | source(...) : String | Log4jJndiInjectionTest.java:577:25:577:41 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:578:34:578:41 | source(...) : String | Log4jJndiInjectionTest.java:578:25:578:41 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:579:54:579:61 | source(...) : String | Log4jJndiInjectionTest.java:579:40:579:61 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:580:34:580:41 | source(...) : String | Log4jJndiInjectionTest.java:580:25:580:41 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:581:39:581:46 | source(...) : String | Log4jJndiInjectionTest.java:581:25:581:46 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:582:39:582:46 | source(...) : String | Log4jJndiInjectionTest.java:582:25:582:46 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:583:53:583:60 | source(...) : String | Log4jJndiInjectionTest.java:583:38:583:60 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:584:53:584:60 | source(...) : String | Log4jJndiInjectionTest.java:584:38:584:60 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:585:68:585:75 | source(...) : String | Log4jJndiInjectionTest.java:585:53:585:75 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:586:68:586:75 | source(...) : String | Log4jJndiInjectionTest.java:586:53:586:75 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:587:63:587:70 | source(...) : String | Log4jJndiInjectionTest.java:587:53:587:70 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:588:71:588:78 | source(...) : String | Log4jJndiInjectionTest.java:588:53:588:78 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:589:71:589:78 | source(...) : String | Log4jJndiInjectionTest.java:589:53:589:78 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:591:62:591:69 | source(...) : String | Log4jJndiInjectionTest.java:591:53:591:69 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:592:62:592:69 | source(...) : String | Log4jJndiInjectionTest.java:592:53:592:69 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:593:68:593:90 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:593:68:593:90 | new Object[] | provenance | | +| Log4jJndiInjectionTest.java:593:82:593:89 | source(...) : String | Log4jJndiInjectionTest.java:593:68:593:90 | {...} : Object[] [[]] : String | provenance | | +| Log4jJndiInjectionTest.java:594:77:594:84 | source(...) : String | Log4jJndiInjectionTest.java:594:68:594:84 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:595:62:595:69 | source(...) : String | Log4jJndiInjectionTest.java:595:53:595:69 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:596:92:596:99 | source(...) : String | Log4jJndiInjectionTest.java:596:83:596:99 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:597:77:597:84 | source(...) : String | Log4jJndiInjectionTest.java:597:68:597:84 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:598:62:598:69 | source(...) : String | Log4jJndiInjectionTest.java:598:53:598:69 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:599:107:599:114 | source(...) : String | Log4jJndiInjectionTest.java:599:98:599:114 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:600:92:600:99 | source(...) : String | Log4jJndiInjectionTest.java:600:83:600:99 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:601:77:601:84 | source(...) : String | Log4jJndiInjectionTest.java:601:68:601:84 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:602:62:602:69 | source(...) : String | Log4jJndiInjectionTest.java:602:53:602:69 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:603:122:603:129 | source(...) : String | Log4jJndiInjectionTest.java:603:113:603:129 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:604:107:604:114 | source(...) : String | Log4jJndiInjectionTest.java:604:98:604:114 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:605:92:605:99 | source(...) : String | Log4jJndiInjectionTest.java:605:83:605:99 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:606:77:606:84 | source(...) : String | Log4jJndiInjectionTest.java:606:68:606:84 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:607:62:607:69 | source(...) : String | Log4jJndiInjectionTest.java:607:53:607:69 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:608:137:608:144 | source(...) : String | Log4jJndiInjectionTest.java:608:128:608:144 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:609:122:609:129 | source(...) : String | Log4jJndiInjectionTest.java:609:113:609:129 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:610:107:610:114 | source(...) : String | Log4jJndiInjectionTest.java:610:98:610:114 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:611:92:611:99 | source(...) : String | Log4jJndiInjectionTest.java:611:83:611:99 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:612:77:612:84 | source(...) : String | Log4jJndiInjectionTest.java:612:68:612:84 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:613:62:613:69 | source(...) : String | Log4jJndiInjectionTest.java:613:53:613:69 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:614:152:614:159 | source(...) : String | Log4jJndiInjectionTest.java:614:143:614:159 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:615:137:615:144 | source(...) : String | Log4jJndiInjectionTest.java:615:128:615:144 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:616:122:616:129 | source(...) : String | Log4jJndiInjectionTest.java:616:113:616:129 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:617:107:617:114 | source(...) : String | Log4jJndiInjectionTest.java:617:98:617:114 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:618:92:618:99 | source(...) : String | Log4jJndiInjectionTest.java:618:83:618:99 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:619:77:619:84 | source(...) : String | Log4jJndiInjectionTest.java:619:68:619:84 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:620:62:620:69 | source(...) : String | Log4jJndiInjectionTest.java:620:53:620:69 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:621:167:621:174 | source(...) : String | Log4jJndiInjectionTest.java:621:158:621:174 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:622:152:622:159 | source(...) : String | Log4jJndiInjectionTest.java:622:143:622:159 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:623:137:623:144 | source(...) : String | Log4jJndiInjectionTest.java:623:128:623:144 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:624:122:624:129 | source(...) : String | Log4jJndiInjectionTest.java:624:113:624:129 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:625:107:625:114 | source(...) : String | Log4jJndiInjectionTest.java:625:98:625:114 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:626:92:626:99 | source(...) : String | Log4jJndiInjectionTest.java:626:83:626:99 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:627:77:627:84 | source(...) : String | Log4jJndiInjectionTest.java:627:68:627:84 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:628:62:628:69 | source(...) : String | Log4jJndiInjectionTest.java:628:53:628:69 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:629:182:629:189 | source(...) : String | Log4jJndiInjectionTest.java:629:173:629:189 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:630:167:630:174 | source(...) : String | Log4jJndiInjectionTest.java:630:158:630:174 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:631:152:631:159 | source(...) : String | Log4jJndiInjectionTest.java:631:143:631:159 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:632:137:632:144 | source(...) : String | Log4jJndiInjectionTest.java:632:128:632:144 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:633:122:633:129 | source(...) : String | Log4jJndiInjectionTest.java:633:113:633:129 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:634:107:634:114 | source(...) : String | Log4jJndiInjectionTest.java:634:98:634:114 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:635:92:635:99 | source(...) : String | Log4jJndiInjectionTest.java:635:83:635:99 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:636:77:636:84 | source(...) : String | Log4jJndiInjectionTest.java:636:68:636:84 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:637:62:637:69 | source(...) : String | Log4jJndiInjectionTest.java:637:53:637:69 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:638:197:638:204 | source(...) : String | Log4jJndiInjectionTest.java:638:188:638:204 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:639:182:639:189 | source(...) : String | Log4jJndiInjectionTest.java:639:173:639:189 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:640:167:640:174 | source(...) : String | Log4jJndiInjectionTest.java:640:158:640:174 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:641:152:641:159 | source(...) : String | Log4jJndiInjectionTest.java:641:143:641:159 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:642:137:642:144 | source(...) : String | Log4jJndiInjectionTest.java:642:128:642:144 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:643:122:643:129 | source(...) : String | Log4jJndiInjectionTest.java:643:113:643:129 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:644:107:644:114 | source(...) : String | Log4jJndiInjectionTest.java:644:98:644:114 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:645:92:645:99 | source(...) : String | Log4jJndiInjectionTest.java:645:83:645:99 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:646:77:646:84 | source(...) : String | Log4jJndiInjectionTest.java:646:68:646:84 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:647:62:647:69 | source(...) : String | Log4jJndiInjectionTest.java:647:53:647:69 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:648:62:648:69 | source(...) : String | Log4jJndiInjectionTest.java:648:53:648:69 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:649:82:649:89 | source(...) : String | Log4jJndiInjectionTest.java:649:68:649:89 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:650:62:650:69 | source(...) : String | Log4jJndiInjectionTest.java:650:53:650:69 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:651:67:651:74 | source(...) : String | Log4jJndiInjectionTest.java:651:53:651:74 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:652:67:652:74 | source(...) : String | Log4jJndiInjectionTest.java:652:53:652:74 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:653:56:653:63 | source(...) : String | Log4jJndiInjectionTest.java:653:38:653:63 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:654:56:654:63 | source(...) : String | Log4jJndiInjectionTest.java:654:38:654:63 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:655:48:655:55 | source(...) : String | Log4jJndiInjectionTest.java:655:38:655:55 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:656:48:656:55 | source(...) : String | Log4jJndiInjectionTest.java:656:38:656:55 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:659:47:659:54 | source(...) : String | Log4jJndiInjectionTest.java:659:38:659:54 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:660:47:660:54 | source(...) : String | Log4jJndiInjectionTest.java:660:38:660:54 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:661:53:661:75 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:661:53:661:75 | new Object[] | provenance | | +| Log4jJndiInjectionTest.java:661:67:661:74 | source(...) : String | Log4jJndiInjectionTest.java:661:53:661:75 | {...} : Object[] [[]] : String | provenance | | +| Log4jJndiInjectionTest.java:662:62:662:69 | source(...) : String | Log4jJndiInjectionTest.java:662:53:662:69 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:663:47:663:54 | source(...) : String | Log4jJndiInjectionTest.java:663:38:663:54 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:664:77:664:84 | source(...) : String | Log4jJndiInjectionTest.java:664:68:664:84 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:665:62:665:69 | source(...) : String | Log4jJndiInjectionTest.java:665:53:665:69 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:666:47:666:54 | source(...) : String | Log4jJndiInjectionTest.java:666:38:666:54 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:667:92:667:99 | source(...) : String | Log4jJndiInjectionTest.java:667:83:667:99 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:668:77:668:84 | source(...) : String | Log4jJndiInjectionTest.java:668:68:668:84 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:669:62:669:69 | source(...) : String | Log4jJndiInjectionTest.java:669:53:669:69 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:670:47:670:54 | source(...) : String | Log4jJndiInjectionTest.java:670:38:670:54 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:671:107:671:114 | source(...) : String | Log4jJndiInjectionTest.java:671:98:671:114 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:672:92:672:99 | source(...) : String | Log4jJndiInjectionTest.java:672:83:672:99 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:673:77:673:84 | source(...) : String | Log4jJndiInjectionTest.java:673:68:673:84 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:674:62:674:69 | source(...) : String | Log4jJndiInjectionTest.java:674:53:674:69 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:675:47:675:54 | source(...) : String | Log4jJndiInjectionTest.java:675:38:675:54 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:676:122:676:129 | source(...) : String | Log4jJndiInjectionTest.java:676:113:676:129 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:677:107:677:114 | source(...) : String | Log4jJndiInjectionTest.java:677:98:677:114 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:678:92:678:99 | source(...) : String | Log4jJndiInjectionTest.java:678:83:678:99 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:679:77:679:84 | source(...) : String | Log4jJndiInjectionTest.java:679:68:679:84 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:680:62:680:69 | source(...) : String | Log4jJndiInjectionTest.java:680:53:680:69 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:681:47:681:54 | source(...) : String | Log4jJndiInjectionTest.java:681:38:681:54 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:682:137:682:144 | source(...) : String | Log4jJndiInjectionTest.java:682:128:682:144 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:683:122:683:129 | source(...) : String | Log4jJndiInjectionTest.java:683:113:683:129 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:684:107:684:114 | source(...) : String | Log4jJndiInjectionTest.java:684:98:684:114 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:685:92:685:99 | source(...) : String | Log4jJndiInjectionTest.java:685:83:685:99 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:686:77:686:84 | source(...) : String | Log4jJndiInjectionTest.java:686:68:686:84 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:687:62:687:69 | source(...) : String | Log4jJndiInjectionTest.java:687:53:687:69 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:688:47:688:54 | source(...) : String | Log4jJndiInjectionTest.java:688:38:688:54 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:689:152:689:159 | source(...) : String | Log4jJndiInjectionTest.java:689:143:689:159 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:690:137:690:144 | source(...) : String | Log4jJndiInjectionTest.java:690:128:690:144 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:691:122:691:129 | source(...) : String | Log4jJndiInjectionTest.java:691:113:691:129 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:692:107:692:114 | source(...) : String | Log4jJndiInjectionTest.java:692:98:692:114 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:693:92:693:99 | source(...) : String | Log4jJndiInjectionTest.java:693:83:693:99 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:694:77:694:84 | source(...) : String | Log4jJndiInjectionTest.java:694:68:694:84 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:695:62:695:69 | source(...) : String | Log4jJndiInjectionTest.java:695:53:695:69 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:696:47:696:54 | source(...) : String | Log4jJndiInjectionTest.java:696:38:696:54 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:697:167:697:174 | source(...) : String | Log4jJndiInjectionTest.java:697:158:697:174 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:698:152:698:159 | source(...) : String | Log4jJndiInjectionTest.java:698:143:698:159 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:699:137:699:144 | source(...) : String | Log4jJndiInjectionTest.java:699:128:699:144 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:700:122:700:129 | source(...) : String | Log4jJndiInjectionTest.java:700:113:700:129 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:701:107:701:114 | source(...) : String | Log4jJndiInjectionTest.java:701:98:701:114 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:702:92:702:99 | source(...) : String | Log4jJndiInjectionTest.java:702:83:702:99 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:703:77:703:84 | source(...) : String | Log4jJndiInjectionTest.java:703:68:703:84 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:704:62:704:69 | source(...) : String | Log4jJndiInjectionTest.java:704:53:704:69 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:705:47:705:54 | source(...) : String | Log4jJndiInjectionTest.java:705:38:705:54 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:706:182:706:189 | source(...) : String | Log4jJndiInjectionTest.java:706:173:706:189 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:707:167:707:174 | source(...) : String | Log4jJndiInjectionTest.java:707:158:707:174 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:708:152:708:159 | source(...) : String | Log4jJndiInjectionTest.java:708:143:708:159 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:709:137:709:144 | source(...) : String | Log4jJndiInjectionTest.java:709:128:709:144 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:710:122:710:129 | source(...) : String | Log4jJndiInjectionTest.java:710:113:710:129 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:711:107:711:114 | source(...) : String | Log4jJndiInjectionTest.java:711:98:711:114 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:712:92:712:99 | source(...) : String | Log4jJndiInjectionTest.java:712:83:712:99 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:713:77:713:84 | source(...) : String | Log4jJndiInjectionTest.java:713:68:713:84 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:714:62:714:69 | source(...) : String | Log4jJndiInjectionTest.java:714:53:714:69 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:715:47:715:54 | source(...) : String | Log4jJndiInjectionTest.java:715:38:715:54 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:716:47:716:54 | source(...) : String | Log4jJndiInjectionTest.java:716:38:716:54 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:717:67:717:74 | source(...) : String | Log4jJndiInjectionTest.java:717:53:717:74 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:718:47:718:54 | source(...) : String | Log4jJndiInjectionTest.java:718:38:718:54 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:719:52:719:59 | source(...) : String | Log4jJndiInjectionTest.java:719:38:719:59 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:720:52:720:59 | source(...) : String | Log4jJndiInjectionTest.java:720:38:720:59 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:721:41:721:48 | source(...) : String | Log4jJndiInjectionTest.java:721:26:721:48 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:722:41:722:48 | source(...) : String | Log4jJndiInjectionTest.java:722:26:722:48 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:723:56:723:63 | source(...) : String | Log4jJndiInjectionTest.java:723:41:723:63 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:724:56:724:63 | source(...) : String | Log4jJndiInjectionTest.java:724:41:724:63 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:725:51:725:58 | source(...) : String | Log4jJndiInjectionTest.java:725:41:725:58 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:726:59:726:66 | source(...) : String | Log4jJndiInjectionTest.java:726:41:726:66 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:727:59:727:66 | source(...) : String | Log4jJndiInjectionTest.java:727:41:727:66 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:729:50:729:57 | source(...) : String | Log4jJndiInjectionTest.java:729:41:729:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:730:50:730:57 | source(...) : String | Log4jJndiInjectionTest.java:730:41:730:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:731:56:731:78 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:731:56:731:78 | new Object[] | provenance | | +| Log4jJndiInjectionTest.java:731:70:731:77 | source(...) : String | Log4jJndiInjectionTest.java:731:56:731:78 | {...} : Object[] [[]] : String | provenance | | +| Log4jJndiInjectionTest.java:732:65:732:72 | source(...) : String | Log4jJndiInjectionTest.java:732:56:732:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:733:50:733:57 | source(...) : String | Log4jJndiInjectionTest.java:733:41:733:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:734:80:734:87 | source(...) : String | Log4jJndiInjectionTest.java:734:71:734:87 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:735:65:735:72 | source(...) : String | Log4jJndiInjectionTest.java:735:56:735:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:736:50:736:57 | source(...) : String | Log4jJndiInjectionTest.java:736:41:736:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:737:95:737:102 | source(...) : String | Log4jJndiInjectionTest.java:737:86:737:102 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:738:80:738:87 | source(...) : String | Log4jJndiInjectionTest.java:738:71:738:87 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:739:65:739:72 | source(...) : String | Log4jJndiInjectionTest.java:739:56:739:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:740:50:740:57 | source(...) : String | Log4jJndiInjectionTest.java:740:41:740:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:741:110:741:117 | source(...) : String | Log4jJndiInjectionTest.java:741:101:741:117 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:742:95:742:102 | source(...) : String | Log4jJndiInjectionTest.java:742:86:742:102 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:743:80:743:87 | source(...) : String | Log4jJndiInjectionTest.java:743:71:743:87 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:744:65:744:72 | source(...) : String | Log4jJndiInjectionTest.java:744:56:744:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:745:50:745:57 | source(...) : String | Log4jJndiInjectionTest.java:745:41:745:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:746:125:746:132 | source(...) : String | Log4jJndiInjectionTest.java:746:116:746:132 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:747:110:747:117 | source(...) : String | Log4jJndiInjectionTest.java:747:101:747:117 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:748:95:748:102 | source(...) : String | Log4jJndiInjectionTest.java:748:86:748:102 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:749:80:749:87 | source(...) : String | Log4jJndiInjectionTest.java:749:71:749:87 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:750:65:750:72 | source(...) : String | Log4jJndiInjectionTest.java:750:56:750:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:751:50:751:57 | source(...) : String | Log4jJndiInjectionTest.java:751:41:751:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:752:140:752:147 | source(...) : String | Log4jJndiInjectionTest.java:752:131:752:147 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:753:125:753:132 | source(...) : String | Log4jJndiInjectionTest.java:753:116:753:132 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:754:110:754:117 | source(...) : String | Log4jJndiInjectionTest.java:754:101:754:117 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:755:95:755:102 | source(...) : String | Log4jJndiInjectionTest.java:755:86:755:102 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:756:80:756:87 | source(...) : String | Log4jJndiInjectionTest.java:756:71:756:87 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:757:65:757:72 | source(...) : String | Log4jJndiInjectionTest.java:757:56:757:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:758:50:758:57 | source(...) : String | Log4jJndiInjectionTest.java:758:41:758:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:759:155:759:162 | source(...) : String | Log4jJndiInjectionTest.java:759:146:759:162 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:760:140:760:147 | source(...) : String | Log4jJndiInjectionTest.java:760:131:760:147 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:761:125:761:132 | source(...) : String | Log4jJndiInjectionTest.java:761:116:761:132 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:762:110:762:117 | source(...) : String | Log4jJndiInjectionTest.java:762:101:762:117 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:763:95:763:102 | source(...) : String | Log4jJndiInjectionTest.java:763:86:763:102 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:764:80:764:87 | source(...) : String | Log4jJndiInjectionTest.java:764:71:764:87 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:765:65:765:72 | source(...) : String | Log4jJndiInjectionTest.java:765:56:765:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:766:50:766:57 | source(...) : String | Log4jJndiInjectionTest.java:766:41:766:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:767:170:767:177 | source(...) : String | Log4jJndiInjectionTest.java:767:161:767:177 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:768:155:768:162 | source(...) : String | Log4jJndiInjectionTest.java:768:146:768:162 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:769:140:769:147 | source(...) : String | Log4jJndiInjectionTest.java:769:131:769:147 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:770:125:770:132 | source(...) : String | Log4jJndiInjectionTest.java:770:116:770:132 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:771:110:771:117 | source(...) : String | Log4jJndiInjectionTest.java:771:101:771:117 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:772:95:772:102 | source(...) : String | Log4jJndiInjectionTest.java:772:86:772:102 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:773:80:773:87 | source(...) : String | Log4jJndiInjectionTest.java:773:71:773:87 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:774:65:774:72 | source(...) : String | Log4jJndiInjectionTest.java:774:56:774:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:775:50:775:57 | source(...) : String | Log4jJndiInjectionTest.java:775:41:775:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:776:185:776:192 | source(...) : String | Log4jJndiInjectionTest.java:776:176:776:192 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:777:170:777:177 | source(...) : String | Log4jJndiInjectionTest.java:777:161:777:177 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:778:155:778:162 | source(...) : String | Log4jJndiInjectionTest.java:778:146:778:162 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:779:140:779:147 | source(...) : String | Log4jJndiInjectionTest.java:779:131:779:147 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:780:125:780:132 | source(...) : String | Log4jJndiInjectionTest.java:780:116:780:132 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:781:110:781:117 | source(...) : String | Log4jJndiInjectionTest.java:781:101:781:117 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:782:95:782:102 | source(...) : String | Log4jJndiInjectionTest.java:782:86:782:102 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:783:80:783:87 | source(...) : String | Log4jJndiInjectionTest.java:783:71:783:87 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:784:65:784:72 | source(...) : String | Log4jJndiInjectionTest.java:784:56:784:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:785:50:785:57 | source(...) : String | Log4jJndiInjectionTest.java:785:41:785:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:786:50:786:57 | source(...) : String | Log4jJndiInjectionTest.java:786:41:786:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:787:70:787:77 | source(...) : String | Log4jJndiInjectionTest.java:787:56:787:77 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:788:50:788:57 | source(...) : String | Log4jJndiInjectionTest.java:788:41:788:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:789:55:789:62 | source(...) : String | Log4jJndiInjectionTest.java:789:41:789:62 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:790:55:790:62 | source(...) : String | Log4jJndiInjectionTest.java:790:41:790:62 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:791:44:791:51 | source(...) : String | Log4jJndiInjectionTest.java:791:26:791:51 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:792:44:792:51 | source(...) : String | Log4jJndiInjectionTest.java:792:26:792:51 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:793:36:793:43 | source(...) : String | Log4jJndiInjectionTest.java:793:26:793:43 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:794:36:794:43 | source(...) : String | Log4jJndiInjectionTest.java:794:26:794:43 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:797:35:797:42 | source(...) : String | Log4jJndiInjectionTest.java:797:26:797:42 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:798:35:798:42 | source(...) : String | Log4jJndiInjectionTest.java:798:26:798:42 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:799:41:799:63 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:799:41:799:63 | new Object[] | provenance | | +| Log4jJndiInjectionTest.java:799:55:799:62 | source(...) : String | Log4jJndiInjectionTest.java:799:41:799:63 | {...} : Object[] [[]] : String | provenance | | +| Log4jJndiInjectionTest.java:800:50:800:57 | source(...) : String | Log4jJndiInjectionTest.java:800:41:800:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:801:35:801:42 | source(...) : String | Log4jJndiInjectionTest.java:801:26:801:42 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:802:65:802:72 | source(...) : String | Log4jJndiInjectionTest.java:802:56:802:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:803:50:803:57 | source(...) : String | Log4jJndiInjectionTest.java:803:41:803:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:804:35:804:42 | source(...) : String | Log4jJndiInjectionTest.java:804:26:804:42 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:805:80:805:87 | source(...) : String | Log4jJndiInjectionTest.java:805:71:805:87 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:806:65:806:72 | source(...) : String | Log4jJndiInjectionTest.java:806:56:806:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:807:50:807:57 | source(...) : String | Log4jJndiInjectionTest.java:807:41:807:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:808:35:808:42 | source(...) : String | Log4jJndiInjectionTest.java:808:26:808:42 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:809:95:809:102 | source(...) : String | Log4jJndiInjectionTest.java:809:86:809:102 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:810:80:810:87 | source(...) : String | Log4jJndiInjectionTest.java:810:71:810:87 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:811:65:811:72 | source(...) : String | Log4jJndiInjectionTest.java:811:56:811:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:812:50:812:57 | source(...) : String | Log4jJndiInjectionTest.java:812:41:812:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:813:35:813:42 | source(...) : String | Log4jJndiInjectionTest.java:813:26:813:42 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:814:110:814:117 | source(...) : String | Log4jJndiInjectionTest.java:814:101:814:117 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:815:95:815:102 | source(...) : String | Log4jJndiInjectionTest.java:815:86:815:102 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:816:80:816:87 | source(...) : String | Log4jJndiInjectionTest.java:816:71:816:87 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:817:65:817:72 | source(...) : String | Log4jJndiInjectionTest.java:817:56:817:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:818:50:818:57 | source(...) : String | Log4jJndiInjectionTest.java:818:41:818:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:819:35:819:42 | source(...) : String | Log4jJndiInjectionTest.java:819:26:819:42 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:820:125:820:132 | source(...) : String | Log4jJndiInjectionTest.java:820:116:820:132 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:821:110:821:117 | source(...) : String | Log4jJndiInjectionTest.java:821:101:821:117 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:822:95:822:102 | source(...) : String | Log4jJndiInjectionTest.java:822:86:822:102 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:823:80:823:87 | source(...) : String | Log4jJndiInjectionTest.java:823:71:823:87 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:824:65:824:72 | source(...) : String | Log4jJndiInjectionTest.java:824:56:824:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:825:50:825:57 | source(...) : String | Log4jJndiInjectionTest.java:825:41:825:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:826:35:826:42 | source(...) : String | Log4jJndiInjectionTest.java:826:26:826:42 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:827:140:827:147 | source(...) : String | Log4jJndiInjectionTest.java:827:131:827:147 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:828:125:828:132 | source(...) : String | Log4jJndiInjectionTest.java:828:116:828:132 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:829:110:829:117 | source(...) : String | Log4jJndiInjectionTest.java:829:101:829:117 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:830:95:830:102 | source(...) : String | Log4jJndiInjectionTest.java:830:86:830:102 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:831:80:831:87 | source(...) : String | Log4jJndiInjectionTest.java:831:71:831:87 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:832:65:832:72 | source(...) : String | Log4jJndiInjectionTest.java:832:56:832:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:833:50:833:57 | source(...) : String | Log4jJndiInjectionTest.java:833:41:833:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:834:35:834:42 | source(...) : String | Log4jJndiInjectionTest.java:834:26:834:42 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:835:155:835:162 | source(...) : String | Log4jJndiInjectionTest.java:835:146:835:162 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:836:140:836:147 | source(...) : String | Log4jJndiInjectionTest.java:836:131:836:147 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:837:125:837:132 | source(...) : String | Log4jJndiInjectionTest.java:837:116:837:132 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:838:110:838:117 | source(...) : String | Log4jJndiInjectionTest.java:838:101:838:117 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:839:95:839:102 | source(...) : String | Log4jJndiInjectionTest.java:839:86:839:102 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:840:80:840:87 | source(...) : String | Log4jJndiInjectionTest.java:840:71:840:87 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:841:65:841:72 | source(...) : String | Log4jJndiInjectionTest.java:841:56:841:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:842:50:842:57 | source(...) : String | Log4jJndiInjectionTest.java:842:41:842:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:843:35:843:42 | source(...) : String | Log4jJndiInjectionTest.java:843:26:843:42 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:844:170:844:177 | source(...) : String | Log4jJndiInjectionTest.java:844:161:844:177 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:845:155:845:162 | source(...) : String | Log4jJndiInjectionTest.java:845:146:845:162 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:846:140:846:147 | source(...) : String | Log4jJndiInjectionTest.java:846:131:846:147 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:847:125:847:132 | source(...) : String | Log4jJndiInjectionTest.java:847:116:847:132 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:848:110:848:117 | source(...) : String | Log4jJndiInjectionTest.java:848:101:848:117 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:849:95:849:102 | source(...) : String | Log4jJndiInjectionTest.java:849:86:849:102 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:850:80:850:87 | source(...) : String | Log4jJndiInjectionTest.java:850:71:850:87 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:851:65:851:72 | source(...) : String | Log4jJndiInjectionTest.java:851:56:851:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:852:50:852:57 | source(...) : String | Log4jJndiInjectionTest.java:852:41:852:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:853:35:853:42 | source(...) : String | Log4jJndiInjectionTest.java:853:26:853:42 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:854:35:854:42 | source(...) : String | Log4jJndiInjectionTest.java:854:26:854:42 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:855:55:855:62 | source(...) : String | Log4jJndiInjectionTest.java:855:41:855:62 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:856:35:856:42 | source(...) : String | Log4jJndiInjectionTest.java:856:26:856:42 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:857:40:857:47 | source(...) : String | Log4jJndiInjectionTest.java:857:26:857:47 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:858:40:858:47 | source(...) : String | Log4jJndiInjectionTest.java:858:26:858:47 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:859:40:859:47 | source(...) : String | Log4jJndiInjectionTest.java:859:25:859:47 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:860:40:860:47 | source(...) : String | Log4jJndiInjectionTest.java:860:25:860:47 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:861:55:861:62 | source(...) : String | Log4jJndiInjectionTest.java:861:40:861:62 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:862:55:862:62 | source(...) : String | Log4jJndiInjectionTest.java:862:40:862:62 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:863:50:863:57 | source(...) : String | Log4jJndiInjectionTest.java:863:40:863:57 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:864:58:864:65 | source(...) : String | Log4jJndiInjectionTest.java:864:40:864:65 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:865:58:865:65 | source(...) : String | Log4jJndiInjectionTest.java:865:40:865:65 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:867:49:867:56 | source(...) : String | Log4jJndiInjectionTest.java:867:40:867:56 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:868:49:868:56 | source(...) : String | Log4jJndiInjectionTest.java:868:40:868:56 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:869:55:869:77 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:869:55:869:77 | new Object[] | provenance | | +| Log4jJndiInjectionTest.java:869:69:869:76 | source(...) : String | Log4jJndiInjectionTest.java:869:55:869:77 | {...} : Object[] [[]] : String | provenance | | +| Log4jJndiInjectionTest.java:870:64:870:71 | source(...) : String | Log4jJndiInjectionTest.java:870:55:870:71 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:871:49:871:56 | source(...) : String | Log4jJndiInjectionTest.java:871:40:871:56 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:872:79:872:86 | source(...) : String | Log4jJndiInjectionTest.java:872:70:872:86 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:873:64:873:71 | source(...) : String | Log4jJndiInjectionTest.java:873:55:873:71 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:874:49:874:56 | source(...) : String | Log4jJndiInjectionTest.java:874:40:874:56 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:875:94:875:101 | source(...) : String | Log4jJndiInjectionTest.java:875:85:875:101 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:876:79:876:86 | source(...) : String | Log4jJndiInjectionTest.java:876:70:876:86 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:877:64:877:71 | source(...) : String | Log4jJndiInjectionTest.java:877:55:877:71 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:878:49:878:56 | source(...) : String | Log4jJndiInjectionTest.java:878:40:878:56 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:879:109:879:116 | source(...) : String | Log4jJndiInjectionTest.java:879:100:879:116 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:880:94:880:101 | source(...) : String | Log4jJndiInjectionTest.java:880:85:880:101 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:881:79:881:86 | source(...) : String | Log4jJndiInjectionTest.java:881:70:881:86 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:882:64:882:71 | source(...) : String | Log4jJndiInjectionTest.java:882:55:882:71 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:883:49:883:56 | source(...) : String | Log4jJndiInjectionTest.java:883:40:883:56 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:884:124:884:131 | source(...) : String | Log4jJndiInjectionTest.java:884:115:884:131 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:885:109:885:116 | source(...) : String | Log4jJndiInjectionTest.java:885:100:885:116 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:886:94:886:101 | source(...) : String | Log4jJndiInjectionTest.java:886:85:886:101 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:887:79:887:86 | source(...) : String | Log4jJndiInjectionTest.java:887:70:887:86 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:888:64:888:71 | source(...) : String | Log4jJndiInjectionTest.java:888:55:888:71 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:889:49:889:56 | source(...) : String | Log4jJndiInjectionTest.java:889:40:889:56 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:890:139:890:146 | source(...) : String | Log4jJndiInjectionTest.java:890:130:890:146 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:891:124:891:131 | source(...) : String | Log4jJndiInjectionTest.java:891:115:891:131 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:892:109:892:116 | source(...) : String | Log4jJndiInjectionTest.java:892:100:892:116 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:893:94:893:101 | source(...) : String | Log4jJndiInjectionTest.java:893:85:893:101 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:894:79:894:86 | source(...) : String | Log4jJndiInjectionTest.java:894:70:894:86 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:895:64:895:71 | source(...) : String | Log4jJndiInjectionTest.java:895:55:895:71 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:896:49:896:56 | source(...) : String | Log4jJndiInjectionTest.java:896:40:896:56 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:897:154:897:161 | source(...) : String | Log4jJndiInjectionTest.java:897:145:897:161 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:898:139:898:146 | source(...) : String | Log4jJndiInjectionTest.java:898:130:898:146 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:899:124:899:131 | source(...) : String | Log4jJndiInjectionTest.java:899:115:899:131 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:900:109:900:116 | source(...) : String | Log4jJndiInjectionTest.java:900:100:900:116 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:901:94:901:101 | source(...) : String | Log4jJndiInjectionTest.java:901:85:901:101 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:902:79:902:86 | source(...) : String | Log4jJndiInjectionTest.java:902:70:902:86 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:903:64:903:71 | source(...) : String | Log4jJndiInjectionTest.java:903:55:903:71 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:904:49:904:56 | source(...) : String | Log4jJndiInjectionTest.java:904:40:904:56 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:905:169:905:176 | source(...) : String | Log4jJndiInjectionTest.java:905:160:905:176 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:906:154:906:161 | source(...) : String | Log4jJndiInjectionTest.java:906:145:906:161 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:907:139:907:146 | source(...) : String | Log4jJndiInjectionTest.java:907:130:907:146 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:908:124:908:131 | source(...) : String | Log4jJndiInjectionTest.java:908:115:908:131 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:909:109:909:116 | source(...) : String | Log4jJndiInjectionTest.java:909:100:909:116 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:910:94:910:101 | source(...) : String | Log4jJndiInjectionTest.java:910:85:910:101 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:911:79:911:86 | source(...) : String | Log4jJndiInjectionTest.java:911:70:911:86 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:912:64:912:71 | source(...) : String | Log4jJndiInjectionTest.java:912:55:912:71 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:913:49:913:56 | source(...) : String | Log4jJndiInjectionTest.java:913:40:913:56 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:914:184:914:191 | source(...) : String | Log4jJndiInjectionTest.java:914:175:914:191 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:915:169:915:176 | source(...) : String | Log4jJndiInjectionTest.java:915:160:915:176 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:916:154:916:161 | source(...) : String | Log4jJndiInjectionTest.java:916:145:916:161 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:917:139:917:146 | source(...) : String | Log4jJndiInjectionTest.java:917:130:917:146 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:918:124:918:131 | source(...) : String | Log4jJndiInjectionTest.java:918:115:918:131 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:919:109:919:116 | source(...) : String | Log4jJndiInjectionTest.java:919:100:919:116 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:920:94:920:101 | source(...) : String | Log4jJndiInjectionTest.java:920:85:920:101 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:921:79:921:86 | source(...) : String | Log4jJndiInjectionTest.java:921:70:921:86 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:922:64:922:71 | source(...) : String | Log4jJndiInjectionTest.java:922:55:922:71 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:923:49:923:56 | source(...) : String | Log4jJndiInjectionTest.java:923:40:923:56 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:924:49:924:56 | source(...) : String | Log4jJndiInjectionTest.java:924:40:924:56 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:925:69:925:76 | source(...) : String | Log4jJndiInjectionTest.java:925:55:925:76 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:926:49:926:56 | source(...) : String | Log4jJndiInjectionTest.java:926:40:926:56 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:927:54:927:61 | source(...) : String | Log4jJndiInjectionTest.java:927:40:927:61 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:928:54:928:61 | source(...) : String | Log4jJndiInjectionTest.java:928:40:928:61 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:929:43:929:50 | source(...) : String | Log4jJndiInjectionTest.java:929:25:929:50 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:930:43:930:50 | source(...) : String | Log4jJndiInjectionTest.java:930:25:930:50 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:931:35:931:42 | source(...) : String | Log4jJndiInjectionTest.java:931:25:931:42 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:932:35:932:42 | source(...) : String | Log4jJndiInjectionTest.java:932:25:932:42 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:935:34:935:41 | source(...) : String | Log4jJndiInjectionTest.java:935:25:935:41 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:936:34:936:41 | source(...) : String | Log4jJndiInjectionTest.java:936:25:936:41 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:937:40:937:62 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:937:40:937:62 | new Object[] | provenance | | +| Log4jJndiInjectionTest.java:937:54:937:61 | source(...) : String | Log4jJndiInjectionTest.java:937:40:937:62 | {...} : Object[] [[]] : String | provenance | | +| Log4jJndiInjectionTest.java:938:49:938:56 | source(...) : String | Log4jJndiInjectionTest.java:938:40:938:56 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:939:34:939:41 | source(...) : String | Log4jJndiInjectionTest.java:939:25:939:41 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:940:64:940:71 | source(...) : String | Log4jJndiInjectionTest.java:940:55:940:71 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:941:49:941:56 | source(...) : String | Log4jJndiInjectionTest.java:941:40:941:56 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:942:34:942:41 | source(...) : String | Log4jJndiInjectionTest.java:942:25:942:41 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:943:79:943:86 | source(...) : String | Log4jJndiInjectionTest.java:943:70:943:86 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:944:64:944:71 | source(...) : String | Log4jJndiInjectionTest.java:944:55:944:71 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:945:49:945:56 | source(...) : String | Log4jJndiInjectionTest.java:945:40:945:56 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:946:34:946:41 | source(...) : String | Log4jJndiInjectionTest.java:946:25:946:41 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:947:94:947:101 | source(...) : String | Log4jJndiInjectionTest.java:947:85:947:101 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:948:79:948:86 | source(...) : String | Log4jJndiInjectionTest.java:948:70:948:86 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:949:64:949:71 | source(...) : String | Log4jJndiInjectionTest.java:949:55:949:71 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:950:49:950:56 | source(...) : String | Log4jJndiInjectionTest.java:950:40:950:56 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:951:34:951:41 | source(...) : String | Log4jJndiInjectionTest.java:951:25:951:41 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:952:109:952:116 | source(...) : String | Log4jJndiInjectionTest.java:952:100:952:116 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:953:94:953:101 | source(...) : String | Log4jJndiInjectionTest.java:953:85:953:101 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:954:79:954:86 | source(...) : String | Log4jJndiInjectionTest.java:954:70:954:86 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:955:64:955:71 | source(...) : String | Log4jJndiInjectionTest.java:955:55:955:71 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:956:49:956:56 | source(...) : String | Log4jJndiInjectionTest.java:956:40:956:56 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:957:34:957:41 | source(...) : String | Log4jJndiInjectionTest.java:957:25:957:41 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:958:124:958:131 | source(...) : String | Log4jJndiInjectionTest.java:958:115:958:131 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:959:109:959:116 | source(...) : String | Log4jJndiInjectionTest.java:959:100:959:116 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:960:94:960:101 | source(...) : String | Log4jJndiInjectionTest.java:960:85:960:101 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:961:79:961:86 | source(...) : String | Log4jJndiInjectionTest.java:961:70:961:86 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:962:64:962:71 | source(...) : String | Log4jJndiInjectionTest.java:962:55:962:71 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:963:49:963:56 | source(...) : String | Log4jJndiInjectionTest.java:963:40:963:56 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:964:34:964:41 | source(...) : String | Log4jJndiInjectionTest.java:964:25:964:41 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:965:139:965:146 | source(...) : String | Log4jJndiInjectionTest.java:965:130:965:146 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:966:124:966:131 | source(...) : String | Log4jJndiInjectionTest.java:966:115:966:131 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:967:109:967:116 | source(...) : String | Log4jJndiInjectionTest.java:967:100:967:116 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:968:94:968:101 | source(...) : String | Log4jJndiInjectionTest.java:968:85:968:101 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:969:79:969:86 | source(...) : String | Log4jJndiInjectionTest.java:969:70:969:86 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:970:64:970:71 | source(...) : String | Log4jJndiInjectionTest.java:970:55:970:71 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:971:49:971:56 | source(...) : String | Log4jJndiInjectionTest.java:971:40:971:56 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:972:34:972:41 | source(...) : String | Log4jJndiInjectionTest.java:972:25:972:41 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:973:154:973:161 | source(...) : String | Log4jJndiInjectionTest.java:973:145:973:161 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:974:139:974:146 | source(...) : String | Log4jJndiInjectionTest.java:974:130:974:146 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:975:124:975:131 | source(...) : String | Log4jJndiInjectionTest.java:975:115:975:131 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:976:109:976:116 | source(...) : String | Log4jJndiInjectionTest.java:976:100:976:116 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:977:94:977:101 | source(...) : String | Log4jJndiInjectionTest.java:977:85:977:101 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:978:79:978:86 | source(...) : String | Log4jJndiInjectionTest.java:978:70:978:86 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:979:64:979:71 | source(...) : String | Log4jJndiInjectionTest.java:979:55:979:71 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:980:49:980:56 | source(...) : String | Log4jJndiInjectionTest.java:980:40:980:56 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:981:34:981:41 | source(...) : String | Log4jJndiInjectionTest.java:981:25:981:41 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:982:169:982:176 | source(...) : String | Log4jJndiInjectionTest.java:982:160:982:176 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:983:154:983:161 | source(...) : String | Log4jJndiInjectionTest.java:983:145:983:161 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:984:139:984:146 | source(...) : String | Log4jJndiInjectionTest.java:984:130:984:146 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:985:124:985:131 | source(...) : String | Log4jJndiInjectionTest.java:985:115:985:131 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:986:109:986:116 | source(...) : String | Log4jJndiInjectionTest.java:986:100:986:116 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:987:94:987:101 | source(...) : String | Log4jJndiInjectionTest.java:987:85:987:101 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:988:79:988:86 | source(...) : String | Log4jJndiInjectionTest.java:988:70:988:86 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:989:64:989:71 | source(...) : String | Log4jJndiInjectionTest.java:989:55:989:71 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:990:49:990:56 | source(...) : String | Log4jJndiInjectionTest.java:990:40:990:56 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:991:34:991:41 | source(...) : String | Log4jJndiInjectionTest.java:991:25:991:41 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:992:34:992:41 | source(...) : String | Log4jJndiInjectionTest.java:992:25:992:41 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:993:54:993:61 | source(...) : String | Log4jJndiInjectionTest.java:993:40:993:61 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:994:34:994:41 | source(...) : String | Log4jJndiInjectionTest.java:994:25:994:41 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:995:39:995:46 | source(...) : String | Log4jJndiInjectionTest.java:995:25:995:46 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:996:39:996:46 | source(...) : String | Log4jJndiInjectionTest.java:996:25:996:46 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:998:65:998:72 | source(...) : String | Log4jJndiInjectionTest.java:998:55:998:72 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:999:48:999:55 | source(...) : String | Log4jJndiInjectionTest.java:999:39:999:55 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1000:45:1000:67 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:1000:45:1000:67 | new Object[] | provenance | | +| Log4jJndiInjectionTest.java:1000:59:1000:66 | source(...) : String | Log4jJndiInjectionTest.java:1000:45:1000:67 | {...} : Object[] [[]] : String | provenance | | +| Log4jJndiInjectionTest.java:1001:42:1001:49 | source(...) : String | Log4jJndiInjectionTest.java:1001:33:1001:49 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1002:39:1002:61 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:1002:39:1002:61 | new Object[] | provenance | | +| Log4jJndiInjectionTest.java:1002:53:1002:60 | source(...) : String | Log4jJndiInjectionTest.java:1002:39:1002:61 | {...} : Object[] [[]] : String | provenance | | +| Log4jJndiInjectionTest.java:1020:40:1020:47 | source(...) : String | Log4jJndiInjectionTest.java:1020:25:1020:47 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1021:35:1021:42 | source(...) : String | Log4jJndiInjectionTest.java:1021:25:1021:42 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1023:34:1023:41 | source(...) : String | Log4jJndiInjectionTest.java:1023:25:1023:41 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1024:34:1024:41 | source(...) : String | Log4jJndiInjectionTest.java:1024:25:1024:41 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1025:40:1025:62 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:1025:40:1025:62 | new Object[] | provenance | | +| Log4jJndiInjectionTest.java:1025:54:1025:61 | source(...) : String | Log4jJndiInjectionTest.java:1025:40:1025:62 | {...} : Object[] [[]] : String | provenance | | +| Log4jJndiInjectionTest.java:1028:49:1028:56 | source(...) : String | Log4jJndiInjectionTest.java:1028:40:1028:56 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1029:34:1029:41 | source(...) : String | Log4jJndiInjectionTest.java:1029:25:1029:41 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1030:64:1030:71 | source(...) : String | Log4jJndiInjectionTest.java:1030:55:1030:71 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1031:49:1031:56 | source(...) : String | Log4jJndiInjectionTest.java:1031:40:1031:56 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1032:34:1032:41 | source(...) : String | Log4jJndiInjectionTest.java:1032:25:1032:41 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1033:79:1033:86 | source(...) : String | Log4jJndiInjectionTest.java:1033:70:1033:86 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1034:64:1034:71 | source(...) : String | Log4jJndiInjectionTest.java:1034:55:1034:71 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1035:49:1035:56 | source(...) : String | Log4jJndiInjectionTest.java:1035:40:1035:56 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1036:34:1036:41 | source(...) : String | Log4jJndiInjectionTest.java:1036:25:1036:41 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1037:94:1037:101 | source(...) : String | Log4jJndiInjectionTest.java:1037:85:1037:101 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1038:79:1038:86 | source(...) : String | Log4jJndiInjectionTest.java:1038:70:1038:86 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1039:64:1039:71 | source(...) : String | Log4jJndiInjectionTest.java:1039:55:1039:71 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1040:49:1040:56 | source(...) : String | Log4jJndiInjectionTest.java:1040:40:1040:56 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1041:34:1041:41 | source(...) : String | Log4jJndiInjectionTest.java:1041:25:1041:41 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1042:109:1042:116 | source(...) : String | Log4jJndiInjectionTest.java:1042:100:1042:116 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1043:94:1043:101 | source(...) : String | Log4jJndiInjectionTest.java:1043:85:1043:101 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1044:79:1044:86 | source(...) : String | Log4jJndiInjectionTest.java:1044:70:1044:86 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1045:64:1045:71 | source(...) : String | Log4jJndiInjectionTest.java:1045:55:1045:71 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1046:49:1046:56 | source(...) : String | Log4jJndiInjectionTest.java:1046:40:1046:56 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1047:34:1047:41 | source(...) : String | Log4jJndiInjectionTest.java:1047:25:1047:41 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1048:124:1048:131 | source(...) : String | Log4jJndiInjectionTest.java:1048:115:1048:131 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1049:109:1049:116 | source(...) : String | Log4jJndiInjectionTest.java:1049:100:1049:116 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1050:94:1050:101 | source(...) : String | Log4jJndiInjectionTest.java:1050:85:1050:101 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1051:79:1051:86 | source(...) : String | Log4jJndiInjectionTest.java:1051:70:1051:86 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1052:64:1052:71 | source(...) : String | Log4jJndiInjectionTest.java:1052:55:1052:71 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1053:49:1053:56 | source(...) : String | Log4jJndiInjectionTest.java:1053:40:1053:56 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1054:34:1054:41 | source(...) : String | Log4jJndiInjectionTest.java:1054:25:1054:41 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1055:139:1055:146 | source(...) : String | Log4jJndiInjectionTest.java:1055:130:1055:146 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1056:124:1056:131 | source(...) : String | Log4jJndiInjectionTest.java:1056:115:1056:131 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1057:109:1057:116 | source(...) : String | Log4jJndiInjectionTest.java:1057:100:1057:116 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1058:94:1058:101 | source(...) : String | Log4jJndiInjectionTest.java:1058:85:1058:101 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1059:79:1059:86 | source(...) : String | Log4jJndiInjectionTest.java:1059:70:1059:86 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1060:64:1060:71 | source(...) : String | Log4jJndiInjectionTest.java:1060:55:1060:71 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1061:49:1061:56 | source(...) : String | Log4jJndiInjectionTest.java:1061:40:1061:56 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1062:34:1062:41 | source(...) : String | Log4jJndiInjectionTest.java:1062:25:1062:41 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1063:154:1063:161 | source(...) : String | Log4jJndiInjectionTest.java:1063:145:1063:161 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1064:139:1064:146 | source(...) : String | Log4jJndiInjectionTest.java:1064:130:1064:146 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1065:124:1065:131 | source(...) : String | Log4jJndiInjectionTest.java:1065:115:1065:131 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1066:109:1066:116 | source(...) : String | Log4jJndiInjectionTest.java:1066:100:1066:116 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1067:94:1067:101 | source(...) : String | Log4jJndiInjectionTest.java:1067:85:1067:101 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1068:79:1068:86 | source(...) : String | Log4jJndiInjectionTest.java:1068:70:1068:86 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1069:64:1069:71 | source(...) : String | Log4jJndiInjectionTest.java:1069:55:1069:71 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1070:49:1070:56 | source(...) : String | Log4jJndiInjectionTest.java:1070:40:1070:56 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1071:34:1071:41 | source(...) : String | Log4jJndiInjectionTest.java:1071:25:1071:41 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1072:169:1072:176 | source(...) : String | Log4jJndiInjectionTest.java:1072:160:1072:176 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1073:154:1073:161 | source(...) : String | Log4jJndiInjectionTest.java:1073:145:1073:161 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1074:139:1074:146 | source(...) : String | Log4jJndiInjectionTest.java:1074:130:1074:146 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1075:124:1075:131 | source(...) : String | Log4jJndiInjectionTest.java:1075:115:1075:131 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1076:109:1076:116 | source(...) : String | Log4jJndiInjectionTest.java:1076:100:1076:116 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1077:94:1077:101 | source(...) : String | Log4jJndiInjectionTest.java:1077:85:1077:101 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1078:79:1078:86 | source(...) : String | Log4jJndiInjectionTest.java:1078:70:1078:86 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1079:64:1079:71 | source(...) : String | Log4jJndiInjectionTest.java:1079:55:1079:71 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1080:49:1080:56 | source(...) : String | Log4jJndiInjectionTest.java:1080:40:1080:56 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1081:34:1081:41 | source(...) : String | Log4jJndiInjectionTest.java:1081:25:1081:41 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1083:34:1083:41 | source(...) : String | Log4jJndiInjectionTest.java:1083:25:1083:41 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1084:54:1084:61 | source(...) : String | Log4jJndiInjectionTest.java:1084:40:1084:61 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1085:39:1085:46 | source(...) : String | Log4jJndiInjectionTest.java:1085:25:1085:46 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1088:47:1088:54 | source(...) : String | Log4jJndiInjectionTest.java:1088:38:1088:54 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1089:53:1089:60 | source(...) : String | Log4jJndiInjectionTest.java:1089:44:1089:60 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1091:13:1091:15 | map [post update] : HashMap [] : String | Log4jJndiInjectionTest.java:1092:34:1092:36 | map | provenance | | +| Log4jJndiInjectionTest.java:1091:28:1091:44 | (...)... : String | Log4jJndiInjectionTest.java:1091:13:1091:15 | map [post update] : HashMap [] : String | provenance | | +| Log4jJndiInjectionTest.java:1091:37:1091:44 | source(...) : String | Log4jJndiInjectionTest.java:1091:28:1091:44 | (...)... : String | provenance | | +| Log4jJndiInjectionTest.java:1095:31:1095:88 | with(...) : StringMapMessage | Log4jJndiInjectionTest.java:1096:26:1096:29 | mmsg | provenance | | +| Log4jJndiInjectionTest.java:1095:71:1095:87 | (...)... : String | Log4jJndiInjectionTest.java:1095:31:1095:88 | with(...) : StringMapMessage | provenance | | +| Log4jJndiInjectionTest.java:1095:80:1095:87 | source(...) : String | Log4jJndiInjectionTest.java:1095:71:1095:87 | (...)... : String | provenance | | +| Log4jJndiInjectionTest.java:1100:13:1100:16 | mmsg [post update] : StringMapMessage | Log4jJndiInjectionTest.java:1101:26:1101:29 | mmsg | provenance | | +| Log4jJndiInjectionTest.java:1100:35:1100:51 | (...)... : String | Log4jJndiInjectionTest.java:1100:13:1100:16 | mmsg [post update] : StringMapMessage | provenance | | +| Log4jJndiInjectionTest.java:1100:44:1100:51 | source(...) : String | Log4jJndiInjectionTest.java:1100:35:1100:51 | (...)... : String | provenance | | +| Log4jJndiInjectionTest.java:1105:13:1105:16 | mmsg [post update] : StringMapMessage | Log4jJndiInjectionTest.java:1106:26:1106:29 | mmsg | provenance | | +| Log4jJndiInjectionTest.java:1105:34:1105:50 | (...)... : String | Log4jJndiInjectionTest.java:1105:13:1105:16 | mmsg [post update] : StringMapMessage | provenance | | +| Log4jJndiInjectionTest.java:1105:43:1105:50 | source(...) : String | Log4jJndiInjectionTest.java:1105:34:1105:50 | (...)... : String | provenance | | +| Log4jJndiInjectionTest.java:1111:13:1111:15 | map [post update] : HashMap [] : String | Log4jJndiInjectionTest.java:1112:25:1112:27 | map : HashMap [] : String | provenance | | +| Log4jJndiInjectionTest.java:1111:33:1111:49 | (...)... : String | Log4jJndiInjectionTest.java:1111:13:1111:15 | map [post update] : HashMap [] : String | provenance | | +| Log4jJndiInjectionTest.java:1111:42:1111:49 | source(...) : String | Log4jJndiInjectionTest.java:1111:33:1111:49 | (...)... : String | provenance | | +| Log4jJndiInjectionTest.java:1112:13:1112:16 | mmsg [post update] : StringMapMessage | Log4jJndiInjectionTest.java:1113:26:1113:29 | mmsg | provenance | | +| Log4jJndiInjectionTest.java:1112:25:1112:27 | map : HashMap [] : String | Log4jJndiInjectionTest.java:1112:13:1112:16 | mmsg [post update] : StringMapMessage | provenance | | +| Log4jJndiInjectionTest.java:1116:61:1116:68 | source(...) : String | Log4jJndiInjectionTest.java:1116:52:1116:68 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1117:81:1117:88 | source(...) : String | Log4jJndiInjectionTest.java:1117:72:1117:88 | (...)... | provenance | | +| Log4jJndiInjectionTest.java:1119:13:1119:15 | map [post update] : HashMap [] : String | Log4jJndiInjectionTest.java:1120:43:1120:45 | map | provenance | | +| Log4jJndiInjectionTest.java:1119:13:1119:15 | map [post update] : HashMap [] : String | Log4jJndiInjectionTest.java:1121:63:1121:65 | map | provenance | | +| Log4jJndiInjectionTest.java:1119:33:1119:49 | (...)... : String | Log4jJndiInjectionTest.java:1119:13:1119:15 | map [post update] : HashMap [] : String | provenance | | +| Log4jJndiInjectionTest.java:1119:42:1119:49 | source(...) : String | Log4jJndiInjectionTest.java:1119:33:1119:49 | (...)... : String | provenance | | nodes | Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | semmle.label | getParameter(...) : String | | Log4jJndiInjectionTest.java:31:26:31:48 | (...)... | semmle.label | (...)... | diff --git a/java/ql/test/experimental/query-tests/security/CWE-073/FilePathInjection.expected b/java/ql/test/experimental/query-tests/security/CWE-073/FilePathInjection.expected index c7a79c6328d..da71e407707 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-073/FilePathInjection.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-073/FilePathInjection.expected @@ -1,13 +1,13 @@ edges -| FilePathInjection.java:21:21:21:34 | getPara(...) : String | FilePathInjection.java:26:47:26:59 | finalFilePath | -| FilePathInjection.java:64:21:64:34 | getPara(...) : String | FilePathInjection.java:72:47:72:59 | finalFilePath | -| FilePathInjection.java:87:21:87:34 | getPara(...) : String | FilePathInjection.java:95:47:95:59 | finalFilePath | -| FilePathInjection.java:177:50:177:58 | file : File | FilePathInjection.java:182:30:182:33 | file | -| FilePathInjection.java:205:17:205:44 | getParameter(...) : String | FilePathInjection.java:209:24:209:31 | filePath : String | -| FilePathInjection.java:209:15:209:32 | new File(...) : File | FilePathInjection.java:210:23:210:26 | file | -| FilePathInjection.java:209:15:209:32 | new File(...) : File | FilePathInjection.java:217:19:217:22 | file : File | -| FilePathInjection.java:209:24:209:31 | filePath : String | FilePathInjection.java:209:15:209:32 | new File(...) : File | -| FilePathInjection.java:217:19:217:22 | file : File | FilePathInjection.java:177:50:177:58 | file : File | +| FilePathInjection.java:21:21:21:34 | getPara(...) : String | FilePathInjection.java:26:47:26:59 | finalFilePath | provenance | | +| FilePathInjection.java:64:21:64:34 | getPara(...) : String | FilePathInjection.java:72:47:72:59 | finalFilePath | provenance | | +| FilePathInjection.java:87:21:87:34 | getPara(...) : String | FilePathInjection.java:95:47:95:59 | finalFilePath | provenance | | +| FilePathInjection.java:177:50:177:58 | file : File | FilePathInjection.java:182:30:182:33 | file | provenance | | +| FilePathInjection.java:205:17:205:44 | getParameter(...) : String | FilePathInjection.java:209:24:209:31 | filePath : String | provenance | | +| FilePathInjection.java:209:15:209:32 | new File(...) : File | FilePathInjection.java:210:23:210:26 | file | provenance | | +| FilePathInjection.java:209:15:209:32 | new File(...) : File | FilePathInjection.java:217:19:217:22 | file : File | provenance | | +| FilePathInjection.java:209:24:209:31 | filePath : String | FilePathInjection.java:209:15:209:32 | new File(...) : File | provenance | | +| FilePathInjection.java:217:19:217:22 | file : File | FilePathInjection.java:177:50:177:58 | file : File | provenance | | nodes | FilePathInjection.java:21:21:21:34 | getPara(...) : String | semmle.label | getPara(...) : String | | FilePathInjection.java:26:47:26:59 | finalFilePath | semmle.label | finalFilePath | diff --git a/java/ql/test/experimental/query-tests/security/CWE-078/CommandInjectionRuntimeExecLocal.expected b/java/ql/test/experimental/query-tests/security/CWE-078/CommandInjectionRuntimeExecLocal.expected index 0baff0f6f21..926675f900a 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-078/CommandInjectionRuntimeExecLocal.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-078/CommandInjectionRuntimeExecLocal.expected @@ -1,20 +1,20 @@ edges -| RuntimeExecTest.java:17:25:17:51 | getenv(...) : String | RuntimeExecTest.java:22:67:22:72 | script : String | -| RuntimeExecTest.java:17:25:17:51 | getenv(...) : String | RuntimeExecTest.java:25:66:25:71 | script : String | -| RuntimeExecTest.java:17:25:17:51 | getenv(...) : String | RuntimeExecTest.java:31:36:31:41 | script : String | -| RuntimeExecTest.java:17:25:17:51 | getenv(...) : String | RuntimeExecTest.java:38:52:38:57 | script : String | -| RuntimeExecTest.java:22:43:22:73 | {...} : String[] [[]] : String | RuntimeExecTest.java:22:43:22:73 | new String[] | -| RuntimeExecTest.java:22:67:22:72 | script : String | RuntimeExecTest.java:22:43:22:73 | {...} : String[] [[]] : String | -| RuntimeExecTest.java:25:42:25:72 | {...} : String[] [[]] : String | RuntimeExecTest.java:26:43:26:55 | commandArray1 | -| RuntimeExecTest.java:25:66:25:71 | script : String | RuntimeExecTest.java:25:42:25:72 | {...} : String[] [[]] : String | -| RuntimeExecTest.java:31:17:31:29 | commandArray2 [post update] : String[] [[]] : String | RuntimeExecTest.java:32:43:32:55 | commandArray2 | -| RuntimeExecTest.java:31:36:31:41 | script : String | RuntimeExecTest.java:31:17:31:29 | commandArray2 [post update] : String[] [[]] : String | -| RuntimeExecTest.java:36:21:39:21 | concat(...) : Stream [] : String | RuntimeExecTest.java:36:21:39:44 | toArray(...) : String[] [[]] : String | -| RuntimeExecTest.java:36:21:39:44 | toArray(...) : String[] [[]] : String | RuntimeExecTest.java:36:21:39:44 | toArray(...) | -| RuntimeExecTest.java:38:25:38:59 | stream(...) : Stream [] : String | RuntimeExecTest.java:36:21:39:21 | concat(...) : Stream [] : String | -| RuntimeExecTest.java:38:39:38:58 | new String[] : String[] [[]] : String | RuntimeExecTest.java:38:25:38:59 | stream(...) : Stream [] : String | -| RuntimeExecTest.java:38:39:38:58 | {...} : String[] [[]] : String | RuntimeExecTest.java:38:39:38:58 | new String[] : String[] [[]] : String | -| RuntimeExecTest.java:38:52:38:57 | script : String | RuntimeExecTest.java:38:39:38:58 | {...} : String[] [[]] : String | +| RuntimeExecTest.java:17:25:17:51 | getenv(...) : String | RuntimeExecTest.java:22:67:22:72 | script : String | provenance | | +| RuntimeExecTest.java:17:25:17:51 | getenv(...) : String | RuntimeExecTest.java:25:66:25:71 | script : String | provenance | | +| RuntimeExecTest.java:17:25:17:51 | getenv(...) : String | RuntimeExecTest.java:31:36:31:41 | script : String | provenance | | +| RuntimeExecTest.java:17:25:17:51 | getenv(...) : String | RuntimeExecTest.java:38:52:38:57 | script : String | provenance | | +| RuntimeExecTest.java:22:43:22:73 | {...} : String[] [[]] : String | RuntimeExecTest.java:22:43:22:73 | new String[] | provenance | | +| RuntimeExecTest.java:22:67:22:72 | script : String | RuntimeExecTest.java:22:43:22:73 | {...} : String[] [[]] : String | provenance | | +| RuntimeExecTest.java:25:42:25:72 | {...} : String[] [[]] : String | RuntimeExecTest.java:26:43:26:55 | commandArray1 | provenance | | +| RuntimeExecTest.java:25:66:25:71 | script : String | RuntimeExecTest.java:25:42:25:72 | {...} : String[] [[]] : String | provenance | | +| RuntimeExecTest.java:31:17:31:29 | commandArray2 [post update] : String[] [[]] : String | RuntimeExecTest.java:32:43:32:55 | commandArray2 | provenance | | +| RuntimeExecTest.java:31:36:31:41 | script : String | RuntimeExecTest.java:31:17:31:29 | commandArray2 [post update] : String[] [[]] : String | provenance | | +| RuntimeExecTest.java:36:21:39:21 | concat(...) : Stream [] : String | RuntimeExecTest.java:36:21:39:44 | toArray(...) : String[] [[]] : String | provenance | | +| RuntimeExecTest.java:36:21:39:44 | toArray(...) : String[] [[]] : String | RuntimeExecTest.java:36:21:39:44 | toArray(...) | provenance | | +| RuntimeExecTest.java:38:25:38:59 | stream(...) : Stream [] : String | RuntimeExecTest.java:36:21:39:21 | concat(...) : Stream [] : String | provenance | | +| RuntimeExecTest.java:38:39:38:58 | new String[] : String[] [[]] : String | RuntimeExecTest.java:38:25:38:59 | stream(...) : Stream [] : String | provenance | | +| RuntimeExecTest.java:38:39:38:58 | {...} : String[] [[]] : String | RuntimeExecTest.java:38:39:38:58 | new String[] : String[] [[]] : String | provenance | | +| RuntimeExecTest.java:38:52:38:57 | script : String | RuntimeExecTest.java:38:39:38:58 | {...} : String[] [[]] : String | provenance | | nodes | RuntimeExecTest.java:17:25:17:51 | getenv(...) : String | semmle.label | getenv(...) : String | | RuntimeExecTest.java:22:43:22:73 | new String[] | semmle.label | new String[] | diff --git a/java/ql/test/experimental/query-tests/security/CWE-078/ExecTainted.expected b/java/ql/test/experimental/query-tests/security/CWE-078/ExecTainted.expected index befb327fc33..d27556a5ccb 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-078/ExecTainted.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-078/ExecTainted.expected @@ -1,6 +1,6 @@ edges -| JSchOSInjectionTest.java:14:30:14:60 | getParameter(...) : String | JSchOSInjectionTest.java:27:52:27:68 | ... + ... | -| JSchOSInjectionTest.java:40:30:40:60 | getParameter(...) : String | JSchOSInjectionTest.java:53:36:53:52 | ... + ... | +| JSchOSInjectionTest.java:14:30:14:60 | getParameter(...) : String | JSchOSInjectionTest.java:27:52:27:68 | ... + ... | provenance | | +| JSchOSInjectionTest.java:40:30:40:60 | getParameter(...) : String | JSchOSInjectionTest.java:53:36:53:52 | ... + ... | provenance | | nodes | JSchOSInjectionTest.java:14:30:14:60 | getParameter(...) : String | semmle.label | getParameter(...) : String | | JSchOSInjectionTest.java:27:52:27:68 | ... + ... | semmle.label | ... + ... | diff --git a/java/ql/test/experimental/query-tests/security/CWE-089/src/main/MyBatisAnnotationSqlInjection.expected b/java/ql/test/experimental/query-tests/security/CWE-089/src/main/MyBatisAnnotationSqlInjection.expected index 1c5ba31a97f..9f043f8db51 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-089/src/main/MyBatisAnnotationSqlInjection.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-089/src/main/MyBatisAnnotationSqlInjection.expected @@ -1,21 +1,21 @@ edges -| MybatisSqlInjection.java:62:19:62:43 | name : String | MybatisSqlInjection.java:63:35:63:38 | name : String | -| MybatisSqlInjection.java:63:35:63:38 | name : String | MybatisSqlInjectionService.java:48:19:48:29 | name : String | -| MybatisSqlInjection.java:67:46:67:70 | name : String | MybatisSqlInjection.java:68:40:68:43 | name : String | -| MybatisSqlInjection.java:68:40:68:43 | name : String | MybatisSqlInjectionService.java:54:32:54:42 | name : String | -| MybatisSqlInjection.java:99:20:99:44 | name : String | MybatisSqlInjection.java:100:36:100:39 | name : String | -| MybatisSqlInjection.java:100:36:100:39 | name : String | MybatisSqlInjectionService.java:80:20:80:30 | name : String | -| MybatisSqlInjection.java:104:20:104:43 | age : String | MybatisSqlInjection.java:105:36:105:38 | age : String | -| MybatisSqlInjection.java:105:36:105:38 | age : String | MybatisSqlInjectionService.java:84:20:84:29 | age : String | -| MybatisSqlInjection.java:109:46:109:70 | name : String | MybatisSqlInjection.java:110:40:110:43 | name : String | -| MybatisSqlInjection.java:110:40:110:43 | name : String | MybatisSqlInjectionService.java:88:32:88:42 | name : String | -| MybatisSqlInjectionService.java:48:19:48:29 | name : String | MybatisSqlInjectionService.java:50:23:50:26 | name : String | -| MybatisSqlInjectionService.java:50:3:50:9 | hashMap [post update] : HashMap [] : String | MybatisSqlInjectionService.java:51:27:51:33 | hashMap | -| MybatisSqlInjectionService.java:50:23:50:26 | name : String | MybatisSqlInjectionService.java:50:3:50:9 | hashMap [post update] : HashMap [] : String | -| MybatisSqlInjectionService.java:54:32:54:42 | name : String | MybatisSqlInjectionService.java:55:32:55:35 | name | -| MybatisSqlInjectionService.java:80:20:80:30 | name : String | MybatisSqlInjectionService.java:81:28:81:31 | name | -| MybatisSqlInjectionService.java:84:20:84:29 | age : String | MybatisSqlInjectionService.java:85:28:85:30 | age | -| MybatisSqlInjectionService.java:88:32:88:42 | name : String | MybatisSqlInjectionService.java:89:32:89:35 | name | +| MybatisSqlInjection.java:62:19:62:43 | name : String | MybatisSqlInjection.java:63:35:63:38 | name : String | provenance | | +| MybatisSqlInjection.java:63:35:63:38 | name : String | MybatisSqlInjectionService.java:48:19:48:29 | name : String | provenance | | +| MybatisSqlInjection.java:67:46:67:70 | name : String | MybatisSqlInjection.java:68:40:68:43 | name : String | provenance | | +| MybatisSqlInjection.java:68:40:68:43 | name : String | MybatisSqlInjectionService.java:54:32:54:42 | name : String | provenance | | +| MybatisSqlInjection.java:99:20:99:44 | name : String | MybatisSqlInjection.java:100:36:100:39 | name : String | provenance | | +| MybatisSqlInjection.java:100:36:100:39 | name : String | MybatisSqlInjectionService.java:80:20:80:30 | name : String | provenance | | +| MybatisSqlInjection.java:104:20:104:43 | age : String | MybatisSqlInjection.java:105:36:105:38 | age : String | provenance | | +| MybatisSqlInjection.java:105:36:105:38 | age : String | MybatisSqlInjectionService.java:84:20:84:29 | age : String | provenance | | +| MybatisSqlInjection.java:109:46:109:70 | name : String | MybatisSqlInjection.java:110:40:110:43 | name : String | provenance | | +| MybatisSqlInjection.java:110:40:110:43 | name : String | MybatisSqlInjectionService.java:88:32:88:42 | name : String | provenance | | +| MybatisSqlInjectionService.java:48:19:48:29 | name : String | MybatisSqlInjectionService.java:50:23:50:26 | name : String | provenance | | +| MybatisSqlInjectionService.java:50:3:50:9 | hashMap [post update] : HashMap [] : String | MybatisSqlInjectionService.java:51:27:51:33 | hashMap | provenance | | +| MybatisSqlInjectionService.java:50:23:50:26 | name : String | MybatisSqlInjectionService.java:50:3:50:9 | hashMap [post update] : HashMap [] : String | provenance | | +| MybatisSqlInjectionService.java:54:32:54:42 | name : String | MybatisSqlInjectionService.java:55:32:55:35 | name | provenance | | +| MybatisSqlInjectionService.java:80:20:80:30 | name : String | MybatisSqlInjectionService.java:81:28:81:31 | name | provenance | | +| MybatisSqlInjectionService.java:84:20:84:29 | age : String | MybatisSqlInjectionService.java:85:28:85:30 | age | provenance | | +| MybatisSqlInjectionService.java:88:32:88:42 | name : String | MybatisSqlInjectionService.java:89:32:89:35 | name | provenance | | nodes | MybatisSqlInjection.java:62:19:62:43 | name : String | semmle.label | name : String | | MybatisSqlInjection.java:63:35:63:38 | name : String | semmle.label | name : String | diff --git a/java/ql/test/experimental/query-tests/security/CWE-089/src/main/MyBatisMapperXmlSqlInjection.expected b/java/ql/test/experimental/query-tests/security/CWE-089/src/main/MyBatisMapperXmlSqlInjection.expected index 6d38949fc1e..27ccbaad929 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-089/src/main/MyBatisMapperXmlSqlInjection.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-089/src/main/MyBatisMapperXmlSqlInjection.expected @@ -1,28 +1,28 @@ edges -| MybatisSqlInjection.java:19:25:19:49 | name : String | MybatisSqlInjection.java:20:55:20:58 | name : String | -| MybatisSqlInjection.java:20:55:20:58 | name : String | MybatisSqlInjectionService.java:13:25:13:35 | name : String | -| MybatisSqlInjection.java:25:25:25:49 | name : String | MybatisSqlInjection.java:26:55:26:58 | name : String | -| MybatisSqlInjection.java:26:55:26:58 | name : String | MybatisSqlInjectionService.java:18:25:18:35 | name : String | -| MybatisSqlInjection.java:31:25:31:49 | test : Test | MybatisSqlInjection.java:32:55:32:58 | test : Test | -| MybatisSqlInjection.java:32:55:32:58 | test : Test | MybatisSqlInjectionService.java:23:25:23:33 | test : Test | -| MybatisSqlInjection.java:37:19:37:40 | test : Test | MybatisSqlInjection.java:38:35:38:38 | test : Test | -| MybatisSqlInjection.java:38:35:38:38 | test : Test | MybatisSqlInjectionService.java:28:19:28:27 | test : Test | -| MybatisSqlInjection.java:42:19:42:40 | test : Test | MybatisSqlInjection.java:43:35:43:38 | test : Test | -| MybatisSqlInjection.java:43:35:43:38 | test : Test | MybatisSqlInjectionService.java:32:19:32:27 | test : Test | -| MybatisSqlInjection.java:47:19:47:57 | params : Map | MybatisSqlInjection.java:48:35:48:40 | params : Map | -| MybatisSqlInjection.java:48:35:48:40 | params : Map | MybatisSqlInjectionService.java:36:19:36:44 | params : Map | -| MybatisSqlInjection.java:52:19:52:50 | params : List | MybatisSqlInjection.java:53:35:53:40 | params : List | -| MybatisSqlInjection.java:53:35:53:40 | params : List | MybatisSqlInjectionService.java:40:19:40:37 | params : List | -| MybatisSqlInjection.java:57:19:57:46 | params : String[] | MybatisSqlInjection.java:58:35:58:40 | params : String[] | -| MybatisSqlInjection.java:58:35:58:40 | params : String[] | MybatisSqlInjectionService.java:44:19:44:33 | params : String[] | -| MybatisSqlInjectionService.java:13:25:13:35 | name : String | MybatisSqlInjectionService.java:14:47:14:50 | name | -| MybatisSqlInjectionService.java:18:25:18:35 | name : String | MybatisSqlInjectionService.java:19:47:19:50 | name | -| MybatisSqlInjectionService.java:23:25:23:33 | test : Test | MybatisSqlInjectionService.java:24:47:24:50 | test | -| MybatisSqlInjectionService.java:28:19:28:27 | test : Test | MybatisSqlInjectionService.java:29:27:29:30 | test | -| MybatisSqlInjectionService.java:32:19:32:27 | test : Test | MybatisSqlInjectionService.java:33:27:33:30 | test | -| MybatisSqlInjectionService.java:36:19:36:44 | params : Map | MybatisSqlInjectionService.java:37:27:37:32 | params | -| MybatisSqlInjectionService.java:40:19:40:37 | params : List | MybatisSqlInjectionService.java:41:27:41:32 | params | -| MybatisSqlInjectionService.java:44:19:44:33 | params : String[] | MybatisSqlInjectionService.java:45:27:45:32 | params | +| MybatisSqlInjection.java:19:25:19:49 | name : String | MybatisSqlInjection.java:20:55:20:58 | name : String | provenance | | +| MybatisSqlInjection.java:20:55:20:58 | name : String | MybatisSqlInjectionService.java:13:25:13:35 | name : String | provenance | | +| MybatisSqlInjection.java:25:25:25:49 | name : String | MybatisSqlInjection.java:26:55:26:58 | name : String | provenance | | +| MybatisSqlInjection.java:26:55:26:58 | name : String | MybatisSqlInjectionService.java:18:25:18:35 | name : String | provenance | | +| MybatisSqlInjection.java:31:25:31:49 | test : Test | MybatisSqlInjection.java:32:55:32:58 | test : Test | provenance | | +| MybatisSqlInjection.java:32:55:32:58 | test : Test | MybatisSqlInjectionService.java:23:25:23:33 | test : Test | provenance | | +| MybatisSqlInjection.java:37:19:37:40 | test : Test | MybatisSqlInjection.java:38:35:38:38 | test : Test | provenance | | +| MybatisSqlInjection.java:38:35:38:38 | test : Test | MybatisSqlInjectionService.java:28:19:28:27 | test : Test | provenance | | +| MybatisSqlInjection.java:42:19:42:40 | test : Test | MybatisSqlInjection.java:43:35:43:38 | test : Test | provenance | | +| MybatisSqlInjection.java:43:35:43:38 | test : Test | MybatisSqlInjectionService.java:32:19:32:27 | test : Test | provenance | | +| MybatisSqlInjection.java:47:19:47:57 | params : Map | MybatisSqlInjection.java:48:35:48:40 | params : Map | provenance | | +| MybatisSqlInjection.java:48:35:48:40 | params : Map | MybatisSqlInjectionService.java:36:19:36:44 | params : Map | provenance | | +| MybatisSqlInjection.java:52:19:52:50 | params : List | MybatisSqlInjection.java:53:35:53:40 | params : List | provenance | | +| MybatisSqlInjection.java:53:35:53:40 | params : List | MybatisSqlInjectionService.java:40:19:40:37 | params : List | provenance | | +| MybatisSqlInjection.java:57:19:57:46 | params : String[] | MybatisSqlInjection.java:58:35:58:40 | params : String[] | provenance | | +| MybatisSqlInjection.java:58:35:58:40 | params : String[] | MybatisSqlInjectionService.java:44:19:44:33 | params : String[] | provenance | | +| MybatisSqlInjectionService.java:13:25:13:35 | name : String | MybatisSqlInjectionService.java:14:47:14:50 | name | provenance | | +| MybatisSqlInjectionService.java:18:25:18:35 | name : String | MybatisSqlInjectionService.java:19:47:19:50 | name | provenance | | +| MybatisSqlInjectionService.java:23:25:23:33 | test : Test | MybatisSqlInjectionService.java:24:47:24:50 | test | provenance | | +| MybatisSqlInjectionService.java:28:19:28:27 | test : Test | MybatisSqlInjectionService.java:29:27:29:30 | test | provenance | | +| MybatisSqlInjectionService.java:32:19:32:27 | test : Test | MybatisSqlInjectionService.java:33:27:33:30 | test | provenance | | +| MybatisSqlInjectionService.java:36:19:36:44 | params : Map | MybatisSqlInjectionService.java:37:27:37:32 | params | provenance | | +| MybatisSqlInjectionService.java:40:19:40:37 | params : List | MybatisSqlInjectionService.java:41:27:41:32 | params | provenance | | +| MybatisSqlInjectionService.java:44:19:44:33 | params : String[] | MybatisSqlInjectionService.java:45:27:45:32 | params | provenance | | nodes | MybatisSqlInjection.java:19:25:19:49 | name : String | semmle.label | name : String | | MybatisSqlInjection.java:20:55:20:58 | name : String | semmle.label | name : String | diff --git a/java/ql/test/experimental/query-tests/security/CWE-094/BeanShellInjection.expected b/java/ql/test/experimental/query-tests/security/CWE-094/BeanShellInjection.expected index 62d42d57864..2afdd9869d7 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-094/BeanShellInjection.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-094/BeanShellInjection.expected @@ -1,10 +1,10 @@ edges -| BeanShellInjection.java:13:17:13:44 | getParameter(...) : String | BeanShellInjection.java:15:45:15:48 | code : String | -| BeanShellInjection.java:15:45:15:48 | code : String | BeanShellInjection.java:15:22:15:49 | new StaticScriptSource(...) | -| BeanShellInjection.java:20:17:20:44 | getParameter(...) : String | BeanShellInjection.java:22:20:22:23 | code | -| BeanShellInjection.java:27:17:27:44 | getParameter(...) : String | BeanShellInjection.java:29:32:29:35 | code : String | -| BeanShellInjection.java:29:3:29:20 | staticScriptSource : StaticScriptSource | BeanShellInjection.java:31:22:31:39 | staticScriptSource | -| BeanShellInjection.java:29:32:29:35 | code : String | BeanShellInjection.java:29:3:29:20 | staticScriptSource : StaticScriptSource | +| BeanShellInjection.java:13:17:13:44 | getParameter(...) : String | BeanShellInjection.java:15:45:15:48 | code : String | provenance | | +| BeanShellInjection.java:15:45:15:48 | code : String | BeanShellInjection.java:15:22:15:49 | new StaticScriptSource(...) | provenance | | +| BeanShellInjection.java:20:17:20:44 | getParameter(...) : String | BeanShellInjection.java:22:20:22:23 | code | provenance | | +| BeanShellInjection.java:27:17:27:44 | getParameter(...) : String | BeanShellInjection.java:29:32:29:35 | code : String | provenance | | +| BeanShellInjection.java:29:3:29:20 | staticScriptSource : StaticScriptSource | BeanShellInjection.java:31:22:31:39 | staticScriptSource | provenance | | +| BeanShellInjection.java:29:32:29:35 | code : String | BeanShellInjection.java:29:3:29:20 | staticScriptSource : StaticScriptSource | provenance | | nodes | BeanShellInjection.java:13:17:13:44 | getParameter(...) : String | semmle.label | getParameter(...) : String | | BeanShellInjection.java:15:22:15:49 | new StaticScriptSource(...) | semmle.label | new StaticScriptSource(...) | diff --git a/java/ql/test/experimental/query-tests/security/CWE-094/JShellInjection.expected b/java/ql/test/experimental/query-tests/security/CWE-094/JShellInjection.expected index f084660ced8..0f61156df13 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-094/JShellInjection.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-094/JShellInjection.expected @@ -1,14 +1,14 @@ edges -| JShellInjection.java:12:18:12:45 | getParameter(...) : String | JShellInjection.java:15:15:15:19 | input | -| JShellInjection.java:20:18:20:45 | getParameter(...) : String | JShellInjection.java:24:31:24:35 | input | -| JShellInjection.java:29:18:29:45 | getParameter(...) : String | JShellInjection.java:33:37:33:41 | input : String | -| JShellInjection.java:33:15:33:42 | analyzeCompletion(...) : CompletionInfo | JShellInjection.java:37:16:37:19 | info : CompletionInfo | -| JShellInjection.java:33:37:33:41 | input : String | JShellInjection.java:33:15:33:42 | analyzeCompletion(...) : CompletionInfo | -| JShellInjection.java:35:12:35:50 | analyzeCompletion(...) : CompletionInfo | JShellInjection.java:37:16:37:19 | info : CompletionInfo | -| JShellInjection.java:35:34:35:37 | info : CompletionInfo | JShellInjection.java:35:34:35:49 | remaining(...) : String | -| JShellInjection.java:35:34:35:49 | remaining(...) : String | JShellInjection.java:35:12:35:50 | analyzeCompletion(...) : CompletionInfo | -| JShellInjection.java:37:16:37:19 | info : CompletionInfo | JShellInjection.java:35:34:35:37 | info : CompletionInfo | -| JShellInjection.java:37:16:37:19 | info : CompletionInfo | JShellInjection.java:37:16:37:28 | source(...) | +| JShellInjection.java:12:18:12:45 | getParameter(...) : String | JShellInjection.java:15:15:15:19 | input | provenance | | +| JShellInjection.java:20:18:20:45 | getParameter(...) : String | JShellInjection.java:24:31:24:35 | input | provenance | | +| JShellInjection.java:29:18:29:45 | getParameter(...) : String | JShellInjection.java:33:37:33:41 | input : String | provenance | | +| JShellInjection.java:33:15:33:42 | analyzeCompletion(...) : CompletionInfo | JShellInjection.java:37:16:37:19 | info : CompletionInfo | provenance | | +| JShellInjection.java:33:37:33:41 | input : String | JShellInjection.java:33:15:33:42 | analyzeCompletion(...) : CompletionInfo | provenance | | +| JShellInjection.java:35:12:35:50 | analyzeCompletion(...) : CompletionInfo | JShellInjection.java:37:16:37:19 | info : CompletionInfo | provenance | | +| JShellInjection.java:35:34:35:37 | info : CompletionInfo | JShellInjection.java:35:34:35:49 | remaining(...) : String | provenance | | +| JShellInjection.java:35:34:35:49 | remaining(...) : String | JShellInjection.java:35:12:35:50 | analyzeCompletion(...) : CompletionInfo | provenance | | +| JShellInjection.java:37:16:37:19 | info : CompletionInfo | JShellInjection.java:35:34:35:37 | info : CompletionInfo | provenance | | +| JShellInjection.java:37:16:37:19 | info : CompletionInfo | JShellInjection.java:37:16:37:28 | source(...) | provenance | | nodes | JShellInjection.java:12:18:12:45 | getParameter(...) : String | semmle.label | getParameter(...) : String | | JShellInjection.java:15:15:15:19 | input | semmle.label | input | diff --git a/java/ql/test/experimental/query-tests/security/CWE-094/JakartaExpressionInjection.expected b/java/ql/test/experimental/query-tests/security/CWE-094/JakartaExpressionInjection.expected index ef5fefa21a3..dbf9191adad 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-094/JakartaExpressionInjection.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-094/JakartaExpressionInjection.expected @@ -1,34 +1,34 @@ edges -| JakartaExpressionInjection.java:23:25:23:47 | getInputStream(...) : InputStream | JakartaExpressionInjection.java:23:54:23:58 | bytes [post update] : byte[] | -| JakartaExpressionInjection.java:23:54:23:58 | bytes [post update] : byte[] | JakartaExpressionInjection.java:24:48:24:52 | bytes : byte[] | -| JakartaExpressionInjection.java:24:37:24:59 | new String(...) : String | JakartaExpressionInjection.java:25:31:25:40 | expression : String | -| JakartaExpressionInjection.java:24:48:24:52 | bytes : byte[] | JakartaExpressionInjection.java:24:37:24:59 | new String(...) : String | -| JakartaExpressionInjection.java:25:31:25:40 | expression : String | JakartaExpressionInjection.java:32:24:32:33 | expression : String | -| JakartaExpressionInjection.java:25:31:25:40 | expression : String | JakartaExpressionInjection.java:40:24:40:33 | expression : String | -| JakartaExpressionInjection.java:25:31:25:40 | expression : String | JakartaExpressionInjection.java:48:24:48:33 | expression : String | -| JakartaExpressionInjection.java:25:31:25:40 | expression : String | JakartaExpressionInjection.java:59:24:59:33 | expression : String | -| JakartaExpressionInjection.java:25:31:25:40 | expression : String | JakartaExpressionInjection.java:67:24:67:33 | expression : String | -| JakartaExpressionInjection.java:25:31:25:40 | expression : String | JakartaExpressionInjection.java:75:24:75:33 | expression : String | -| JakartaExpressionInjection.java:25:31:25:40 | expression : String | JakartaExpressionInjection.java:85:24:85:33 | expression : String | -| JakartaExpressionInjection.java:25:31:25:40 | expression : String | JakartaExpressionInjection.java:95:24:95:33 | expression : String | -| JakartaExpressionInjection.java:32:24:32:33 | expression : String | JakartaExpressionInjection.java:34:28:34:37 | expression | -| JakartaExpressionInjection.java:40:24:40:33 | expression : String | JakartaExpressionInjection.java:42:32:42:41 | expression | -| JakartaExpressionInjection.java:48:24:48:33 | expression : String | JakartaExpressionInjection.java:51:86:51:95 | expression : String | -| JakartaExpressionInjection.java:51:47:51:110 | createValueExpression(...) : ValueExpression | JakartaExpressionInjection.java:52:89:52:103 | valueExpression : ValueExpression | -| JakartaExpressionInjection.java:51:86:51:95 | expression : String | JakartaExpressionInjection.java:51:47:51:110 | createValueExpression(...) : ValueExpression | -| JakartaExpressionInjection.java:52:49:52:104 | new LambdaExpression(...) : LambdaExpression | JakartaExpressionInjection.java:53:13:53:28 | lambdaExpression | -| JakartaExpressionInjection.java:52:89:52:103 | valueExpression : ValueExpression | JakartaExpressionInjection.java:52:49:52:104 | new LambdaExpression(...) : LambdaExpression | -| JakartaExpressionInjection.java:59:24:59:33 | expression : String | JakartaExpressionInjection.java:61:32:61:41 | expression | -| JakartaExpressionInjection.java:67:24:67:33 | expression : String | JakartaExpressionInjection.java:69:43:69:52 | expression | -| JakartaExpressionInjection.java:75:24:75:33 | expression : String | JakartaExpressionInjection.java:78:72:78:81 | expression : String | -| JakartaExpressionInjection.java:78:33:78:96 | createValueExpression(...) : ValueExpression | JakartaExpressionInjection.java:79:13:79:13 | e | -| JakartaExpressionInjection.java:78:72:78:81 | expression : String | JakartaExpressionInjection.java:78:33:78:96 | createValueExpression(...) : ValueExpression | -| JakartaExpressionInjection.java:85:24:85:33 | expression : String | JakartaExpressionInjection.java:88:72:88:81 | expression : String | -| JakartaExpressionInjection.java:88:33:88:96 | createValueExpression(...) : ValueExpression | JakartaExpressionInjection.java:89:13:89:13 | e | -| JakartaExpressionInjection.java:88:72:88:81 | expression : String | JakartaExpressionInjection.java:88:33:88:96 | createValueExpression(...) : ValueExpression | -| JakartaExpressionInjection.java:95:24:95:33 | expression : String | JakartaExpressionInjection.java:98:74:98:83 | expression : String | -| JakartaExpressionInjection.java:98:34:98:112 | createMethodExpression(...) : MethodExpression | JakartaExpressionInjection.java:99:13:99:13 | e | -| JakartaExpressionInjection.java:98:74:98:83 | expression : String | JakartaExpressionInjection.java:98:34:98:112 | createMethodExpression(...) : MethodExpression | +| JakartaExpressionInjection.java:23:25:23:47 | getInputStream(...) : InputStream | JakartaExpressionInjection.java:23:54:23:58 | bytes [post update] : byte[] | provenance | | +| JakartaExpressionInjection.java:23:54:23:58 | bytes [post update] : byte[] | JakartaExpressionInjection.java:24:48:24:52 | bytes : byte[] | provenance | | +| JakartaExpressionInjection.java:24:37:24:59 | new String(...) : String | JakartaExpressionInjection.java:25:31:25:40 | expression : String | provenance | | +| JakartaExpressionInjection.java:24:48:24:52 | bytes : byte[] | JakartaExpressionInjection.java:24:37:24:59 | new String(...) : String | provenance | | +| JakartaExpressionInjection.java:25:31:25:40 | expression : String | JakartaExpressionInjection.java:32:24:32:33 | expression : String | provenance | | +| JakartaExpressionInjection.java:25:31:25:40 | expression : String | JakartaExpressionInjection.java:40:24:40:33 | expression : String | provenance | | +| JakartaExpressionInjection.java:25:31:25:40 | expression : String | JakartaExpressionInjection.java:48:24:48:33 | expression : String | provenance | | +| JakartaExpressionInjection.java:25:31:25:40 | expression : String | JakartaExpressionInjection.java:59:24:59:33 | expression : String | provenance | | +| JakartaExpressionInjection.java:25:31:25:40 | expression : String | JakartaExpressionInjection.java:67:24:67:33 | expression : String | provenance | | +| JakartaExpressionInjection.java:25:31:25:40 | expression : String | JakartaExpressionInjection.java:75:24:75:33 | expression : String | provenance | | +| JakartaExpressionInjection.java:25:31:25:40 | expression : String | JakartaExpressionInjection.java:85:24:85:33 | expression : String | provenance | | +| JakartaExpressionInjection.java:25:31:25:40 | expression : String | JakartaExpressionInjection.java:95:24:95:33 | expression : String | provenance | | +| JakartaExpressionInjection.java:32:24:32:33 | expression : String | JakartaExpressionInjection.java:34:28:34:37 | expression | provenance | | +| JakartaExpressionInjection.java:40:24:40:33 | expression : String | JakartaExpressionInjection.java:42:32:42:41 | expression | provenance | | +| JakartaExpressionInjection.java:48:24:48:33 | expression : String | JakartaExpressionInjection.java:51:86:51:95 | expression : String | provenance | | +| JakartaExpressionInjection.java:51:47:51:110 | createValueExpression(...) : ValueExpression | JakartaExpressionInjection.java:52:89:52:103 | valueExpression : ValueExpression | provenance | | +| JakartaExpressionInjection.java:51:86:51:95 | expression : String | JakartaExpressionInjection.java:51:47:51:110 | createValueExpression(...) : ValueExpression | provenance | | +| JakartaExpressionInjection.java:52:49:52:104 | new LambdaExpression(...) : LambdaExpression | JakartaExpressionInjection.java:53:13:53:28 | lambdaExpression | provenance | | +| JakartaExpressionInjection.java:52:89:52:103 | valueExpression : ValueExpression | JakartaExpressionInjection.java:52:49:52:104 | new LambdaExpression(...) : LambdaExpression | provenance | | +| JakartaExpressionInjection.java:59:24:59:33 | expression : String | JakartaExpressionInjection.java:61:32:61:41 | expression | provenance | | +| JakartaExpressionInjection.java:67:24:67:33 | expression : String | JakartaExpressionInjection.java:69:43:69:52 | expression | provenance | | +| JakartaExpressionInjection.java:75:24:75:33 | expression : String | JakartaExpressionInjection.java:78:72:78:81 | expression : String | provenance | | +| JakartaExpressionInjection.java:78:33:78:96 | createValueExpression(...) : ValueExpression | JakartaExpressionInjection.java:79:13:79:13 | e | provenance | | +| JakartaExpressionInjection.java:78:72:78:81 | expression : String | JakartaExpressionInjection.java:78:33:78:96 | createValueExpression(...) : ValueExpression | provenance | | +| JakartaExpressionInjection.java:85:24:85:33 | expression : String | JakartaExpressionInjection.java:88:72:88:81 | expression : String | provenance | | +| JakartaExpressionInjection.java:88:33:88:96 | createValueExpression(...) : ValueExpression | JakartaExpressionInjection.java:89:13:89:13 | e | provenance | | +| JakartaExpressionInjection.java:88:72:88:81 | expression : String | JakartaExpressionInjection.java:88:33:88:96 | createValueExpression(...) : ValueExpression | provenance | | +| JakartaExpressionInjection.java:95:24:95:33 | expression : String | JakartaExpressionInjection.java:98:74:98:83 | expression : String | provenance | | +| JakartaExpressionInjection.java:98:34:98:112 | createMethodExpression(...) : MethodExpression | JakartaExpressionInjection.java:99:13:99:13 | e | provenance | | +| JakartaExpressionInjection.java:98:74:98:83 | expression : String | JakartaExpressionInjection.java:98:34:98:112 | createMethodExpression(...) : MethodExpression | provenance | | nodes | JakartaExpressionInjection.java:23:25:23:47 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | | JakartaExpressionInjection.java:23:54:23:58 | bytes [post update] : byte[] | semmle.label | bytes [post update] : byte[] | diff --git a/java/ql/test/experimental/query-tests/security/CWE-094/JythonInjection.expected b/java/ql/test/experimental/query-tests/security/CWE-094/JythonInjection.expected index 0fbbe43e3c6..0d090adbea6 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-094/JythonInjection.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-094/JythonInjection.expected @@ -1,9 +1,9 @@ edges -| JythonInjection.java:28:23:28:50 | getParameter(...) : String | JythonInjection.java:36:30:36:33 | code | -| JythonInjection.java:53:23:53:50 | getParameter(...) : String | JythonInjection.java:58:44:58:47 | code | -| JythonInjection.java:73:23:73:50 | getParameter(...) : String | JythonInjection.java:81:35:81:38 | code | -| JythonInjection.java:97:23:97:50 | getParameter(...) : String | JythonInjection.java:106:61:106:64 | code : String | -| JythonInjection.java:106:61:106:64 | code : String | JythonInjection.java:106:61:106:75 | getBytes(...) | +| JythonInjection.java:28:23:28:50 | getParameter(...) : String | JythonInjection.java:36:30:36:33 | code | provenance | | +| JythonInjection.java:53:23:53:50 | getParameter(...) : String | JythonInjection.java:58:44:58:47 | code | provenance | | +| JythonInjection.java:73:23:73:50 | getParameter(...) : String | JythonInjection.java:81:35:81:38 | code | provenance | | +| JythonInjection.java:97:23:97:50 | getParameter(...) : String | JythonInjection.java:106:61:106:64 | code : String | provenance | | +| JythonInjection.java:106:61:106:64 | code : String | JythonInjection.java:106:61:106:75 | getBytes(...) | provenance | | nodes | JythonInjection.java:28:23:28:50 | getParameter(...) : String | semmle.label | getParameter(...) : String | | JythonInjection.java:36:30:36:33 | code | semmle.label | code | diff --git a/java/ql/test/experimental/query-tests/security/CWE-094/ScriptInjection.expected b/java/ql/test/experimental/query-tests/security/CWE-094/ScriptInjection.expected index f7a626fca76..d2119033cdf 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-094/ScriptInjection.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-094/ScriptInjection.expected @@ -1,26 +1,26 @@ edges -| RhinoServlet.java:28:23:28:50 | getParameter(...) : String | RhinoServlet.java:32:55:32:58 | code | -| RhinoServlet.java:81:23:81:50 | getParameter(...) : String | RhinoServlet.java:83:54:83:57 | code | -| RhinoServlet.java:88:23:88:50 | getParameter(...) : String | RhinoServlet.java:89:74:89:77 | code : String | -| RhinoServlet.java:89:74:89:77 | code : String | RhinoServlet.java:89:74:89:88 | getBytes(...) | -| ScriptEngineTest.java:20:44:20:55 | input : String | ScriptEngineTest.java:24:37:24:41 | input | -| ScriptEngineTest.java:27:51:27:62 | input : String | ScriptEngineTest.java:31:31:31:35 | input | -| ScriptEngineTest.java:35:58:35:69 | input : String | ScriptEngineTest.java:39:31:39:35 | input | -| ScriptEngineTest.java:42:46:42:57 | input : String | ScriptEngineTest.java:46:31:46:35 | input | -| ScriptEngineTest.java:49:41:49:52 | input : String | ScriptEngineTest.java:52:42:52:46 | input | -| ScriptEngineTest.java:56:41:56:52 | input : String | ScriptEngineTest.java:59:51:59:55 | input | -| ScriptEngineTest.java:91:18:91:45 | getParameter(...) : String | ScriptEngineTest.java:93:57:93:60 | code : String | -| ScriptEngineTest.java:91:18:91:45 | getParameter(...) : String | ScriptEngineTest.java:94:64:94:67 | code : String | -| ScriptEngineTest.java:91:18:91:45 | getParameter(...) : String | ScriptEngineTest.java:95:71:95:74 | code : String | -| ScriptEngineTest.java:91:18:91:45 | getParameter(...) : String | ScriptEngineTest.java:96:59:96:62 | code : String | -| ScriptEngineTest.java:91:18:91:45 | getParameter(...) : String | ScriptEngineTest.java:97:54:97:57 | code : String | -| ScriptEngineTest.java:91:18:91:45 | getParameter(...) : String | ScriptEngineTest.java:98:54:98:57 | code : String | -| ScriptEngineTest.java:93:57:93:60 | code : String | ScriptEngineTest.java:20:44:20:55 | input : String | -| ScriptEngineTest.java:94:64:94:67 | code : String | ScriptEngineTest.java:27:51:27:62 | input : String | -| ScriptEngineTest.java:95:71:95:74 | code : String | ScriptEngineTest.java:35:58:35:69 | input : String | -| ScriptEngineTest.java:96:59:96:62 | code : String | ScriptEngineTest.java:42:46:42:57 | input : String | -| ScriptEngineTest.java:97:54:97:57 | code : String | ScriptEngineTest.java:49:41:49:52 | input : String | -| ScriptEngineTest.java:98:54:98:57 | code : String | ScriptEngineTest.java:56:41:56:52 | input : String | +| RhinoServlet.java:28:23:28:50 | getParameter(...) : String | RhinoServlet.java:32:55:32:58 | code | provenance | | +| RhinoServlet.java:81:23:81:50 | getParameter(...) : String | RhinoServlet.java:83:54:83:57 | code | provenance | | +| RhinoServlet.java:88:23:88:50 | getParameter(...) : String | RhinoServlet.java:89:74:89:77 | code : String | provenance | | +| RhinoServlet.java:89:74:89:77 | code : String | RhinoServlet.java:89:74:89:88 | getBytes(...) | provenance | | +| ScriptEngineTest.java:20:44:20:55 | input : String | ScriptEngineTest.java:24:37:24:41 | input | provenance | | +| ScriptEngineTest.java:27:51:27:62 | input : String | ScriptEngineTest.java:31:31:31:35 | input | provenance | | +| ScriptEngineTest.java:35:58:35:69 | input : String | ScriptEngineTest.java:39:31:39:35 | input | provenance | | +| ScriptEngineTest.java:42:46:42:57 | input : String | ScriptEngineTest.java:46:31:46:35 | input | provenance | | +| ScriptEngineTest.java:49:41:49:52 | input : String | ScriptEngineTest.java:52:42:52:46 | input | provenance | | +| ScriptEngineTest.java:56:41:56:52 | input : String | ScriptEngineTest.java:59:51:59:55 | input | provenance | | +| ScriptEngineTest.java:91:18:91:45 | getParameter(...) : String | ScriptEngineTest.java:93:57:93:60 | code : String | provenance | | +| ScriptEngineTest.java:91:18:91:45 | getParameter(...) : String | ScriptEngineTest.java:94:64:94:67 | code : String | provenance | | +| ScriptEngineTest.java:91:18:91:45 | getParameter(...) : String | ScriptEngineTest.java:95:71:95:74 | code : String | provenance | | +| ScriptEngineTest.java:91:18:91:45 | getParameter(...) : String | ScriptEngineTest.java:96:59:96:62 | code : String | provenance | | +| ScriptEngineTest.java:91:18:91:45 | getParameter(...) : String | ScriptEngineTest.java:97:54:97:57 | code : String | provenance | | +| ScriptEngineTest.java:91:18:91:45 | getParameter(...) : String | ScriptEngineTest.java:98:54:98:57 | code : String | provenance | | +| ScriptEngineTest.java:93:57:93:60 | code : String | ScriptEngineTest.java:20:44:20:55 | input : String | provenance | | +| ScriptEngineTest.java:94:64:94:67 | code : String | ScriptEngineTest.java:27:51:27:62 | input : String | provenance | | +| ScriptEngineTest.java:95:71:95:74 | code : String | ScriptEngineTest.java:35:58:35:69 | input : String | provenance | | +| ScriptEngineTest.java:96:59:96:62 | code : String | ScriptEngineTest.java:42:46:42:57 | input : String | provenance | | +| ScriptEngineTest.java:97:54:97:57 | code : String | ScriptEngineTest.java:49:41:49:52 | input : String | provenance | | +| ScriptEngineTest.java:98:54:98:57 | code : String | ScriptEngineTest.java:56:41:56:52 | input : String | provenance | | nodes | RhinoServlet.java:28:23:28:50 | getParameter(...) : String | semmle.label | getParameter(...) : String | | RhinoServlet.java:32:55:32:58 | code | semmle.label | code | diff --git a/java/ql/test/experimental/query-tests/security/CWE-1004/SensitiveCookieNotHttpOnly.expected b/java/ql/test/experimental/query-tests/security/CWE-1004/SensitiveCookieNotHttpOnly.expected index ca4eb5e9917..5b1eefcc07a 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-1004/SensitiveCookieNotHttpOnly.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-1004/SensitiveCookieNotHttpOnly.expected @@ -1,23 +1,23 @@ edges -| SensitiveCookieNotHttpOnly.java:24:33:24:43 | "jwt_token" : String | SensitiveCookieNotHttpOnly.java:25:39:25:52 | tokenCookieStr : String | -| SensitiveCookieNotHttpOnly.java:25:28:25:64 | new Cookie(...) : Cookie | SensitiveCookieNotHttpOnly.java:31:28:31:36 | jwtCookie | -| SensitiveCookieNotHttpOnly.java:25:39:25:52 | tokenCookieStr : String | SensitiveCookieNotHttpOnly.java:25:28:25:64 | new Cookie(...) : Cookie | -| SensitiveCookieNotHttpOnly.java:42:42:42:49 | "token=" : String | SensitiveCookieNotHttpOnly.java:42:42:42:69 | ... + ... | -| SensitiveCookieNotHttpOnly.java:42:42:42:57 | ... + ... : String | SensitiveCookieNotHttpOnly.java:42:42:42:69 | ... + ... | -| SensitiveCookieNotHttpOnly.java:52:42:52:113 | new NewCookie(...) : NewCookie | SensitiveCookieNotHttpOnly.java:52:42:52:124 | toString(...) | -| SensitiveCookieNotHttpOnly.java:52:56:52:75 | "session-access-key" : String | SensitiveCookieNotHttpOnly.java:52:42:52:113 | new NewCookie(...) : NewCookie | -| SensitiveCookieNotHttpOnly.java:63:37:63:115 | new NewCookie(...) : NewCookie | SensitiveCookieNotHttpOnly.java:64:25:64:39 | accessKeyCookie : NewCookie | -| SensitiveCookieNotHttpOnly.java:63:51:63:70 | "session-access-key" : String | SensitiveCookieNotHttpOnly.java:63:37:63:115 | new NewCookie(...) : NewCookie | -| SensitiveCookieNotHttpOnly.java:64:25:64:39 | accessKeyCookie : NewCookie | SensitiveCookieNotHttpOnly.java:64:25:64:50 | toString(...) : String | -| SensitiveCookieNotHttpOnly.java:64:25:64:50 | toString(...) : String | SensitiveCookieNotHttpOnly.java:65:42:65:47 | keyStr | -| SensitiveCookieNotHttpOnly.java:70:28:70:35 | "token=" : String | SensitiveCookieNotHttpOnly.java:71:42:71:50 | secString | -| SensitiveCookieNotHttpOnly.java:70:28:70:43 | ... + ... : String | SensitiveCookieNotHttpOnly.java:71:42:71:50 | secString | -| SensitiveCookieNotHttpOnly.java:70:28:70:55 | ... + ... : String | SensitiveCookieNotHttpOnly.java:71:42:71:50 | secString | -| SensitiveCookieNotHttpOnly.java:88:35:88:51 | "Presto-UI-Token" : String | SensitiveCookieNotHttpOnly.java:89:36:89:51 | PRESTO_UI_COOKIE : String | -| SensitiveCookieNotHttpOnly.java:89:25:89:57 | new Cookie(...) : Cookie | SensitiveCookieNotHttpOnly.java:91:16:91:21 | cookie : Cookie | -| SensitiveCookieNotHttpOnly.java:89:36:89:51 | PRESTO_UI_COOKIE : String | SensitiveCookieNotHttpOnly.java:89:25:89:57 | new Cookie(...) : Cookie | -| SensitiveCookieNotHttpOnly.java:91:16:91:21 | cookie : Cookie | SensitiveCookieNotHttpOnly.java:110:25:110:64 | createAuthenticationCookie(...) : Cookie | -| SensitiveCookieNotHttpOnly.java:110:25:110:64 | createAuthenticationCookie(...) : Cookie | SensitiveCookieNotHttpOnly.java:111:28:111:33 | cookie | +| SensitiveCookieNotHttpOnly.java:24:33:24:43 | "jwt_token" : String | SensitiveCookieNotHttpOnly.java:25:39:25:52 | tokenCookieStr : String | provenance | | +| SensitiveCookieNotHttpOnly.java:25:28:25:64 | new Cookie(...) : Cookie | SensitiveCookieNotHttpOnly.java:31:28:31:36 | jwtCookie | provenance | | +| SensitiveCookieNotHttpOnly.java:25:39:25:52 | tokenCookieStr : String | SensitiveCookieNotHttpOnly.java:25:28:25:64 | new Cookie(...) : Cookie | provenance | | +| SensitiveCookieNotHttpOnly.java:42:42:42:49 | "token=" : String | SensitiveCookieNotHttpOnly.java:42:42:42:69 | ... + ... | provenance | | +| SensitiveCookieNotHttpOnly.java:42:42:42:57 | ... + ... : String | SensitiveCookieNotHttpOnly.java:42:42:42:69 | ... + ... | provenance | | +| SensitiveCookieNotHttpOnly.java:52:42:52:113 | new NewCookie(...) : NewCookie | SensitiveCookieNotHttpOnly.java:52:42:52:124 | toString(...) | provenance | | +| SensitiveCookieNotHttpOnly.java:52:56:52:75 | "session-access-key" : String | SensitiveCookieNotHttpOnly.java:52:42:52:113 | new NewCookie(...) : NewCookie | provenance | | +| SensitiveCookieNotHttpOnly.java:63:37:63:115 | new NewCookie(...) : NewCookie | SensitiveCookieNotHttpOnly.java:64:25:64:39 | accessKeyCookie : NewCookie | provenance | | +| SensitiveCookieNotHttpOnly.java:63:51:63:70 | "session-access-key" : String | SensitiveCookieNotHttpOnly.java:63:37:63:115 | new NewCookie(...) : NewCookie | provenance | | +| SensitiveCookieNotHttpOnly.java:64:25:64:39 | accessKeyCookie : NewCookie | SensitiveCookieNotHttpOnly.java:64:25:64:50 | toString(...) : String | provenance | | +| SensitiveCookieNotHttpOnly.java:64:25:64:50 | toString(...) : String | SensitiveCookieNotHttpOnly.java:65:42:65:47 | keyStr | provenance | | +| SensitiveCookieNotHttpOnly.java:70:28:70:35 | "token=" : String | SensitiveCookieNotHttpOnly.java:71:42:71:50 | secString | provenance | | +| SensitiveCookieNotHttpOnly.java:70:28:70:43 | ... + ... : String | SensitiveCookieNotHttpOnly.java:71:42:71:50 | secString | provenance | | +| SensitiveCookieNotHttpOnly.java:70:28:70:55 | ... + ... : String | SensitiveCookieNotHttpOnly.java:71:42:71:50 | secString | provenance | | +| SensitiveCookieNotHttpOnly.java:88:35:88:51 | "Presto-UI-Token" : String | SensitiveCookieNotHttpOnly.java:89:36:89:51 | PRESTO_UI_COOKIE : String | provenance | | +| SensitiveCookieNotHttpOnly.java:89:25:89:57 | new Cookie(...) : Cookie | SensitiveCookieNotHttpOnly.java:91:16:91:21 | cookie : Cookie | provenance | | +| SensitiveCookieNotHttpOnly.java:89:36:89:51 | PRESTO_UI_COOKIE : String | SensitiveCookieNotHttpOnly.java:89:25:89:57 | new Cookie(...) : Cookie | provenance | | +| SensitiveCookieNotHttpOnly.java:91:16:91:21 | cookie : Cookie | SensitiveCookieNotHttpOnly.java:110:25:110:64 | createAuthenticationCookie(...) : Cookie | provenance | | +| SensitiveCookieNotHttpOnly.java:110:25:110:64 | createAuthenticationCookie(...) : Cookie | SensitiveCookieNotHttpOnly.java:111:28:111:33 | cookie | provenance | | nodes | SensitiveCookieNotHttpOnly.java:24:33:24:43 | "jwt_token" : String | semmle.label | "jwt_token" : String | | SensitiveCookieNotHttpOnly.java:25:28:25:64 | new Cookie(...) : Cookie | semmle.label | new Cookie(...) : Cookie | diff --git a/java/ql/test/experimental/query-tests/security/CWE-200/InsecureWebResourceResponse.expected b/java/ql/test/experimental/query-tests/security/CWE-200/InsecureWebResourceResponse.expected index 07ce59763ad..a006cdd08b4 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-200/InsecureWebResourceResponse.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-200/InsecureWebResourceResponse.expected @@ -1,117 +1,117 @@ edges -| InsecureWebResourceResponse.java:28:27:28:37 | getIntent(...) : Intent | InsecureWebResourceResponse.java:28:27:28:64 | getStringExtra(...) : String | -| InsecureWebResourceResponse.java:28:27:28:64 | getStringExtra(...) : String | InsecureWebResourceResponse.java:30:25:30:32 | inputUrl : String | -| InsecureWebResourceResponse.java:28:27:28:64 | getStringExtra(...) : String | InsecureWebResourceResponse.java:32:25:32:32 | inputUrl : String | -| InsecureWebResourceResponse.java:28:27:28:64 | getStringExtra(...) : String | InsecureWebResourceResponse.java:34:25:34:32 | inputUrl : String | -| InsecureWebResourceResponse.java:28:27:28:64 | getStringExtra(...) : String | InsecureWebResourceResponse.java:36:26:36:33 | inputUrl : String | -| InsecureWebResourceResponse.java:28:27:28:64 | getStringExtra(...) : String | InsecureWebResourceResponse.java:38:26:38:33 | inputUrl : String | -| InsecureWebResourceResponse.java:28:27:28:64 | getStringExtra(...) : String | InsecureWebResourceResponse.java:40:25:40:32 | inputUrl : String | -| InsecureWebResourceResponse.java:28:27:28:64 | getStringExtra(...) : String | InsecureWebResourceResponse.java:42:25:42:32 | inputUrl : String | -| InsecureWebResourceResponse.java:28:27:28:64 | getStringExtra(...) : String | InsecureWebResourceResponse.java:44:26:44:33 | inputUrl : String | -| InsecureWebResourceResponse.java:30:25:30:32 | inputUrl : String | InsecureWebResourceResponse.java:59:34:59:43 | url : String | -| InsecureWebResourceResponse.java:32:25:32:32 | inputUrl : String | InsecureWebResourceResponse.java:80:34:80:43 | url : String | -| InsecureWebResourceResponse.java:34:25:34:32 | inputUrl : String | InsecureWebResourceResponse.java:106:34:106:43 | url : String | -| InsecureWebResourceResponse.java:36:26:36:33 | inputUrl : String | InsecureWebResourceResponse.java:131:36:131:45 | url : String | -| InsecureWebResourceResponse.java:38:26:38:33 | inputUrl : String | InsecureWebResourceResponse.java:156:35:156:44 | url : String | -| InsecureWebResourceResponse.java:40:25:40:32 | inputUrl : String | InsecureWebResourceResponse.java:181:34:181:43 | url : String | -| InsecureWebResourceResponse.java:42:25:42:32 | inputUrl : String | InsecureWebResourceResponse.java:188:34:188:43 | url : String | -| InsecureWebResourceResponse.java:44:26:44:33 | inputUrl : String | InsecureWebResourceResponse.java:217:35:217:44 | url : String | -| InsecureWebResourceResponse.java:59:34:59:43 | url : String | InsecureWebResourceResponse.java:75:20:75:22 | url : String | -| InsecureWebResourceResponse.java:63:77:63:86 | url : String | InsecureWebResourceResponse.java:65:41:65:43 | url : String | -| InsecureWebResourceResponse.java:65:31:65:44 | parse(...) : Uri | InsecureWebResourceResponse.java:66:71:66:73 | uri : Uri | -| InsecureWebResourceResponse.java:65:41:65:43 | url : String | InsecureWebResourceResponse.java:65:31:65:44 | parse(...) : Uri | -| InsecureWebResourceResponse.java:66:51:66:84 | new FileInputStream(...) : FileInputStream | InsecureWebResourceResponse.java:68:71:68:81 | inputStream | -| InsecureWebResourceResponse.java:66:71:66:73 | uri : Uri | InsecureWebResourceResponse.java:66:71:66:83 | getPath(...) : String | -| InsecureWebResourceResponse.java:66:71:66:83 | getPath(...) : String | InsecureWebResourceResponse.java:66:51:66:84 | new FileInputStream(...) : FileInputStream | -| InsecureWebResourceResponse.java:75:20:75:22 | url : String | InsecureWebResourceResponse.java:63:77:63:86 | url : String | -| InsecureWebResourceResponse.java:75:20:75:22 | url : String | InsecureWebResourceResponse.java:84:77:84:86 | url : String | -| InsecureWebResourceResponse.java:75:20:75:22 | url : String | InsecureWebResourceResponse.java:110:77:110:86 | url : String | -| InsecureWebResourceResponse.java:75:20:75:22 | url : String | InsecureWebResourceResponse.java:192:77:192:102 | request : WebResourceRequest | -| InsecureWebResourceResponse.java:75:20:75:22 | url : String | InsecureWebResourceResponse.java:232:69:232:78 | url : String | -| InsecureWebResourceResponse.java:80:34:80:43 | url : String | InsecureWebResourceResponse.java:101:20:101:22 | url : String | -| InsecureWebResourceResponse.java:84:77:84:86 | url : String | InsecureWebResourceResponse.java:86:41:86:43 | url : String | -| InsecureWebResourceResponse.java:86:31:86:44 | parse(...) : Uri | InsecureWebResourceResponse.java:88:66:88:68 | uri : Uri | -| InsecureWebResourceResponse.java:86:41:86:43 | url : String | InsecureWebResourceResponse.java:86:31:86:44 | parse(...) : Uri | -| InsecureWebResourceResponse.java:88:42:88:90 | new File(...) : File | InsecureWebResourceResponse.java:89:75:89:83 | cacheFile : File | -| InsecureWebResourceResponse.java:88:66:88:68 | uri : Uri | InsecureWebResourceResponse.java:88:66:88:89 | getLastPathSegment(...) : String | -| InsecureWebResourceResponse.java:88:66:88:89 | getLastPathSegment(...) : String | InsecureWebResourceResponse.java:88:42:88:90 | new File(...) : File | -| InsecureWebResourceResponse.java:89:55:89:84 | new FileInputStream(...) : FileInputStream | InsecureWebResourceResponse.java:91:75:91:85 | inputStream | -| InsecureWebResourceResponse.java:89:75:89:83 | cacheFile : File | InsecureWebResourceResponse.java:89:55:89:84 | new FileInputStream(...) : FileInputStream | -| InsecureWebResourceResponse.java:101:20:101:22 | url : String | InsecureWebResourceResponse.java:63:77:63:86 | url : String | -| InsecureWebResourceResponse.java:101:20:101:22 | url : String | InsecureWebResourceResponse.java:84:77:84:86 | url : String | -| InsecureWebResourceResponse.java:101:20:101:22 | url : String | InsecureWebResourceResponse.java:110:77:110:86 | url : String | -| InsecureWebResourceResponse.java:101:20:101:22 | url : String | InsecureWebResourceResponse.java:192:77:192:102 | request : WebResourceRequest | -| InsecureWebResourceResponse.java:101:20:101:22 | url : String | InsecureWebResourceResponse.java:232:69:232:78 | url : String | -| InsecureWebResourceResponse.java:106:34:106:43 | url : String | InsecureWebResourceResponse.java:127:20:127:22 | url : String | -| InsecureWebResourceResponse.java:110:77:110:86 | url : String | InsecureWebResourceResponse.java:112:41:112:43 | url : String | -| InsecureWebResourceResponse.java:112:31:112:44 | parse(...) : Uri | InsecureWebResourceResponse.java:113:35:113:37 | uri : Uri | -| InsecureWebResourceResponse.java:112:41:112:43 | url : String | InsecureWebResourceResponse.java:112:31:112:44 | parse(...) : Uri | -| InsecureWebResourceResponse.java:113:35:113:37 | uri : Uri | InsecureWebResourceResponse.java:113:35:113:47 | getPath(...) : String | -| InsecureWebResourceResponse.java:113:35:113:47 | getPath(...) : String | InsecureWebResourceResponse.java:113:35:113:60 | substring(...) : String | -| InsecureWebResourceResponse.java:113:35:113:60 | substring(...) : String | InsecureWebResourceResponse.java:115:75:115:78 | path : String | -| InsecureWebResourceResponse.java:115:55:115:108 | new FileInputStream(...) : FileInputStream | InsecureWebResourceResponse.java:117:75:117:85 | inputStream | -| InsecureWebResourceResponse.java:115:75:115:78 | path : String | InsecureWebResourceResponse.java:115:75:115:107 | substring(...) : String | -| InsecureWebResourceResponse.java:115:75:115:107 | substring(...) : String | InsecureWebResourceResponse.java:115:55:115:108 | new FileInputStream(...) : FileInputStream | -| InsecureWebResourceResponse.java:127:20:127:22 | url : String | InsecureWebResourceResponse.java:63:77:63:86 | url : String | -| InsecureWebResourceResponse.java:127:20:127:22 | url : String | InsecureWebResourceResponse.java:84:77:84:86 | url : String | -| InsecureWebResourceResponse.java:127:20:127:22 | url : String | InsecureWebResourceResponse.java:110:77:110:86 | url : String | -| InsecureWebResourceResponse.java:127:20:127:22 | url : String | InsecureWebResourceResponse.java:192:77:192:102 | request : WebResourceRequest | -| InsecureWebResourceResponse.java:127:20:127:22 | url : String | InsecureWebResourceResponse.java:232:69:232:78 | url : String | -| InsecureWebResourceResponse.java:131:36:131:45 | url : String | InsecureWebResourceResponse.java:152:20:152:22 | url : String | -| InsecureWebResourceResponse.java:152:20:152:22 | url : String | InsecureWebResourceResponse.java:63:77:63:86 | url : String | -| InsecureWebResourceResponse.java:152:20:152:22 | url : String | InsecureWebResourceResponse.java:84:77:84:86 | url : String | -| InsecureWebResourceResponse.java:152:20:152:22 | url : String | InsecureWebResourceResponse.java:110:77:110:86 | url : String | -| InsecureWebResourceResponse.java:152:20:152:22 | url : String | InsecureWebResourceResponse.java:192:77:192:102 | request : WebResourceRequest | -| InsecureWebResourceResponse.java:152:20:152:22 | url : String | InsecureWebResourceResponse.java:232:69:232:78 | url : String | -| InsecureWebResourceResponse.java:156:35:156:44 | url : String | InsecureWebResourceResponse.java:177:20:177:22 | url : String | -| InsecureWebResourceResponse.java:177:20:177:22 | url : String | InsecureWebResourceResponse.java:63:77:63:86 | url : String | -| InsecureWebResourceResponse.java:177:20:177:22 | url : String | InsecureWebResourceResponse.java:84:77:84:86 | url : String | -| InsecureWebResourceResponse.java:177:20:177:22 | url : String | InsecureWebResourceResponse.java:110:77:110:86 | url : String | -| InsecureWebResourceResponse.java:177:20:177:22 | url : String | InsecureWebResourceResponse.java:192:77:192:102 | request : WebResourceRequest | -| InsecureWebResourceResponse.java:177:20:177:22 | url : String | InsecureWebResourceResponse.java:232:69:232:78 | url : String | -| InsecureWebResourceResponse.java:181:34:181:43 | url : String | InsecureWebResourceResponse.java:184:20:184:22 | url : String | -| InsecureWebResourceResponse.java:184:20:184:22 | url : String | InsecureWebResourceResponse.java:63:77:63:86 | url : String | -| InsecureWebResourceResponse.java:184:20:184:22 | url : String | InsecureWebResourceResponse.java:84:77:84:86 | url : String | -| InsecureWebResourceResponse.java:184:20:184:22 | url : String | InsecureWebResourceResponse.java:110:77:110:86 | url : String | -| InsecureWebResourceResponse.java:184:20:184:22 | url : String | InsecureWebResourceResponse.java:192:77:192:102 | request : WebResourceRequest | -| InsecureWebResourceResponse.java:184:20:184:22 | url : String | InsecureWebResourceResponse.java:232:69:232:78 | url : String | -| InsecureWebResourceResponse.java:188:34:188:43 | url : String | InsecureWebResourceResponse.java:209:20:209:22 | url : String | -| InsecureWebResourceResponse.java:192:77:192:102 | request : WebResourceRequest | InsecureWebResourceResponse.java:194:31:194:37 | request : WebResourceRequest | -| InsecureWebResourceResponse.java:194:31:194:37 | request : WebResourceRequest | InsecureWebResourceResponse.java:194:31:194:46 | getUrl(...) : Uri | -| InsecureWebResourceResponse.java:194:31:194:46 | getUrl(...) : Uri | InsecureWebResourceResponse.java:196:66:196:68 | uri : Uri | -| InsecureWebResourceResponse.java:196:42:196:90 | new File(...) : File | InsecureWebResourceResponse.java:197:75:197:83 | cacheFile : File | -| InsecureWebResourceResponse.java:196:66:196:68 | uri : Uri | InsecureWebResourceResponse.java:196:66:196:89 | getLastPathSegment(...) : String | -| InsecureWebResourceResponse.java:196:66:196:89 | getLastPathSegment(...) : String | InsecureWebResourceResponse.java:196:42:196:90 | new File(...) : File | -| InsecureWebResourceResponse.java:197:55:197:84 | new FileInputStream(...) : FileInputStream | InsecureWebResourceResponse.java:199:75:199:85 | inputStream | -| InsecureWebResourceResponse.java:197:75:197:83 | cacheFile : File | InsecureWebResourceResponse.java:197:55:197:84 | new FileInputStream(...) : FileInputStream | -| InsecureWebResourceResponse.java:209:20:209:22 | url : String | InsecureWebResourceResponse.java:63:77:63:86 | url : String | -| InsecureWebResourceResponse.java:209:20:209:22 | url : String | InsecureWebResourceResponse.java:84:77:84:86 | url : String | -| InsecureWebResourceResponse.java:209:20:209:22 | url : String | InsecureWebResourceResponse.java:110:77:110:86 | url : String | -| InsecureWebResourceResponse.java:209:20:209:22 | url : String | InsecureWebResourceResponse.java:192:77:192:102 | request : WebResourceRequest | -| InsecureWebResourceResponse.java:209:20:209:22 | url : String | InsecureWebResourceResponse.java:232:69:232:78 | url : String | -| InsecureWebResourceResponse.java:217:35:217:44 | url : String | InsecureWebResourceResponse.java:226:20:226:22 | url : String | -| InsecureWebResourceResponse.java:226:20:226:22 | url : String | InsecureWebResourceResponse.java:63:77:63:86 | url : String | -| InsecureWebResourceResponse.java:226:20:226:22 | url : String | InsecureWebResourceResponse.java:84:77:84:86 | url : String | -| InsecureWebResourceResponse.java:226:20:226:22 | url : String | InsecureWebResourceResponse.java:110:77:110:86 | url : String | -| InsecureWebResourceResponse.java:226:20:226:22 | url : String | InsecureWebResourceResponse.java:192:77:192:102 | request : WebResourceRequest | -| InsecureWebResourceResponse.java:226:20:226:22 | url : String | InsecureWebResourceResponse.java:232:69:232:78 | url : String | -| InsecureWebResourceResponse.java:232:69:232:78 | url : String | InsecureWebResourceResponse.java:234:33:234:35 | url : String | -| InsecureWebResourceResponse.java:234:23:234:36 | parse(...) : Uri | InsecureWebResourceResponse.java:235:63:235:65 | uri : Uri | -| InsecureWebResourceResponse.java:234:33:234:35 | url : String | InsecureWebResourceResponse.java:234:23:234:36 | parse(...) : Uri | -| InsecureWebResourceResponse.java:235:43:235:76 | new FileInputStream(...) : FileInputStream | InsecureWebResourceResponse.java:237:63:237:73 | inputStream | -| InsecureWebResourceResponse.java:235:63:235:65 | uri : Uri | InsecureWebResourceResponse.java:235:63:235:75 | getPath(...) : String | -| InsecureWebResourceResponse.java:235:63:235:75 | getPath(...) : String | InsecureWebResourceResponse.java:235:43:235:76 | new FileInputStream(...) : FileInputStream | -| InsecureWebViewActivity.java:27:27:27:37 | getIntent(...) : Intent | InsecureWebViewActivity.java:27:27:27:64 | getStringExtra(...) : String | -| InsecureWebViewActivity.java:27:27:27:64 | getStringExtra(...) : String | InsecureWebViewActivity.java:28:20:28:27 | inputUrl : String | -| InsecureWebViewActivity.java:28:20:28:27 | inputUrl : String | InsecureWebViewActivity.java:42:28:42:37 | url : String | -| InsecureWebViewActivity.java:42:28:42:37 | url : String | InsecureWebViewActivity.java:43:25:43:27 | url : String | -| InsecureWebViewActivity.java:43:25:43:27 | url : String | InsecureWebViewActivity.java:53:77:53:86 | url : String | -| InsecureWebViewActivity.java:53:77:53:86 | url : String | InsecureWebViewActivity.java:55:41:55:43 | url : String | -| InsecureWebViewActivity.java:55:31:55:44 | parse(...) : Uri | InsecureWebViewActivity.java:56:71:56:73 | uri : Uri | -| InsecureWebViewActivity.java:55:41:55:43 | url : String | InsecureWebViewActivity.java:55:31:55:44 | parse(...) : Uri | -| InsecureWebViewActivity.java:56:51:56:84 | new FileInputStream(...) : FileInputStream | InsecureWebViewActivity.java:58:71:58:81 | inputStream | -| InsecureWebViewActivity.java:56:71:56:73 | uri : Uri | InsecureWebViewActivity.java:56:71:56:83 | getPath(...) : String | -| InsecureWebViewActivity.java:56:71:56:83 | getPath(...) : String | InsecureWebViewActivity.java:56:51:56:84 | new FileInputStream(...) : FileInputStream | +| InsecureWebResourceResponse.java:28:27:28:37 | getIntent(...) : Intent | InsecureWebResourceResponse.java:28:27:28:64 | getStringExtra(...) : String | provenance | | +| InsecureWebResourceResponse.java:28:27:28:64 | getStringExtra(...) : String | InsecureWebResourceResponse.java:30:25:30:32 | inputUrl : String | provenance | | +| InsecureWebResourceResponse.java:28:27:28:64 | getStringExtra(...) : String | InsecureWebResourceResponse.java:32:25:32:32 | inputUrl : String | provenance | | +| InsecureWebResourceResponse.java:28:27:28:64 | getStringExtra(...) : String | InsecureWebResourceResponse.java:34:25:34:32 | inputUrl : String | provenance | | +| InsecureWebResourceResponse.java:28:27:28:64 | getStringExtra(...) : String | InsecureWebResourceResponse.java:36:26:36:33 | inputUrl : String | provenance | | +| InsecureWebResourceResponse.java:28:27:28:64 | getStringExtra(...) : String | InsecureWebResourceResponse.java:38:26:38:33 | inputUrl : String | provenance | | +| InsecureWebResourceResponse.java:28:27:28:64 | getStringExtra(...) : String | InsecureWebResourceResponse.java:40:25:40:32 | inputUrl : String | provenance | | +| InsecureWebResourceResponse.java:28:27:28:64 | getStringExtra(...) : String | InsecureWebResourceResponse.java:42:25:42:32 | inputUrl : String | provenance | | +| InsecureWebResourceResponse.java:28:27:28:64 | getStringExtra(...) : String | InsecureWebResourceResponse.java:44:26:44:33 | inputUrl : String | provenance | | +| InsecureWebResourceResponse.java:30:25:30:32 | inputUrl : String | InsecureWebResourceResponse.java:59:34:59:43 | url : String | provenance | | +| InsecureWebResourceResponse.java:32:25:32:32 | inputUrl : String | InsecureWebResourceResponse.java:80:34:80:43 | url : String | provenance | | +| InsecureWebResourceResponse.java:34:25:34:32 | inputUrl : String | InsecureWebResourceResponse.java:106:34:106:43 | url : String | provenance | | +| InsecureWebResourceResponse.java:36:26:36:33 | inputUrl : String | InsecureWebResourceResponse.java:131:36:131:45 | url : String | provenance | | +| InsecureWebResourceResponse.java:38:26:38:33 | inputUrl : String | InsecureWebResourceResponse.java:156:35:156:44 | url : String | provenance | | +| InsecureWebResourceResponse.java:40:25:40:32 | inputUrl : String | InsecureWebResourceResponse.java:181:34:181:43 | url : String | provenance | | +| InsecureWebResourceResponse.java:42:25:42:32 | inputUrl : String | InsecureWebResourceResponse.java:188:34:188:43 | url : String | provenance | | +| InsecureWebResourceResponse.java:44:26:44:33 | inputUrl : String | InsecureWebResourceResponse.java:217:35:217:44 | url : String | provenance | | +| InsecureWebResourceResponse.java:59:34:59:43 | url : String | InsecureWebResourceResponse.java:75:20:75:22 | url : String | provenance | | +| InsecureWebResourceResponse.java:63:77:63:86 | url : String | InsecureWebResourceResponse.java:65:41:65:43 | url : String | provenance | | +| InsecureWebResourceResponse.java:65:31:65:44 | parse(...) : Uri | InsecureWebResourceResponse.java:66:71:66:73 | uri : Uri | provenance | | +| InsecureWebResourceResponse.java:65:41:65:43 | url : String | InsecureWebResourceResponse.java:65:31:65:44 | parse(...) : Uri | provenance | | +| InsecureWebResourceResponse.java:66:51:66:84 | new FileInputStream(...) : FileInputStream | InsecureWebResourceResponse.java:68:71:68:81 | inputStream | provenance | | +| InsecureWebResourceResponse.java:66:71:66:73 | uri : Uri | InsecureWebResourceResponse.java:66:71:66:83 | getPath(...) : String | provenance | | +| InsecureWebResourceResponse.java:66:71:66:83 | getPath(...) : String | InsecureWebResourceResponse.java:66:51:66:84 | new FileInputStream(...) : FileInputStream | provenance | | +| InsecureWebResourceResponse.java:75:20:75:22 | url : String | InsecureWebResourceResponse.java:63:77:63:86 | url : String | provenance | | +| InsecureWebResourceResponse.java:75:20:75:22 | url : String | InsecureWebResourceResponse.java:84:77:84:86 | url : String | provenance | | +| InsecureWebResourceResponse.java:75:20:75:22 | url : String | InsecureWebResourceResponse.java:110:77:110:86 | url : String | provenance | | +| InsecureWebResourceResponse.java:75:20:75:22 | url : String | InsecureWebResourceResponse.java:192:77:192:102 | request : WebResourceRequest | provenance | | +| InsecureWebResourceResponse.java:75:20:75:22 | url : String | InsecureWebResourceResponse.java:232:69:232:78 | url : String | provenance | | +| InsecureWebResourceResponse.java:80:34:80:43 | url : String | InsecureWebResourceResponse.java:101:20:101:22 | url : String | provenance | | +| InsecureWebResourceResponse.java:84:77:84:86 | url : String | InsecureWebResourceResponse.java:86:41:86:43 | url : String | provenance | | +| InsecureWebResourceResponse.java:86:31:86:44 | parse(...) : Uri | InsecureWebResourceResponse.java:88:66:88:68 | uri : Uri | provenance | | +| InsecureWebResourceResponse.java:86:41:86:43 | url : String | InsecureWebResourceResponse.java:86:31:86:44 | parse(...) : Uri | provenance | | +| InsecureWebResourceResponse.java:88:42:88:90 | new File(...) : File | InsecureWebResourceResponse.java:89:75:89:83 | cacheFile : File | provenance | | +| InsecureWebResourceResponse.java:88:66:88:68 | uri : Uri | InsecureWebResourceResponse.java:88:66:88:89 | getLastPathSegment(...) : String | provenance | | +| InsecureWebResourceResponse.java:88:66:88:89 | getLastPathSegment(...) : String | InsecureWebResourceResponse.java:88:42:88:90 | new File(...) : File | provenance | | +| InsecureWebResourceResponse.java:89:55:89:84 | new FileInputStream(...) : FileInputStream | InsecureWebResourceResponse.java:91:75:91:85 | inputStream | provenance | | +| InsecureWebResourceResponse.java:89:75:89:83 | cacheFile : File | InsecureWebResourceResponse.java:89:55:89:84 | new FileInputStream(...) : FileInputStream | provenance | | +| InsecureWebResourceResponse.java:101:20:101:22 | url : String | InsecureWebResourceResponse.java:63:77:63:86 | url : String | provenance | | +| InsecureWebResourceResponse.java:101:20:101:22 | url : String | InsecureWebResourceResponse.java:84:77:84:86 | url : String | provenance | | +| InsecureWebResourceResponse.java:101:20:101:22 | url : String | InsecureWebResourceResponse.java:110:77:110:86 | url : String | provenance | | +| InsecureWebResourceResponse.java:101:20:101:22 | url : String | InsecureWebResourceResponse.java:192:77:192:102 | request : WebResourceRequest | provenance | | +| InsecureWebResourceResponse.java:101:20:101:22 | url : String | InsecureWebResourceResponse.java:232:69:232:78 | url : String | provenance | | +| InsecureWebResourceResponse.java:106:34:106:43 | url : String | InsecureWebResourceResponse.java:127:20:127:22 | url : String | provenance | | +| InsecureWebResourceResponse.java:110:77:110:86 | url : String | InsecureWebResourceResponse.java:112:41:112:43 | url : String | provenance | | +| InsecureWebResourceResponse.java:112:31:112:44 | parse(...) : Uri | InsecureWebResourceResponse.java:113:35:113:37 | uri : Uri | provenance | | +| InsecureWebResourceResponse.java:112:41:112:43 | url : String | InsecureWebResourceResponse.java:112:31:112:44 | parse(...) : Uri | provenance | | +| InsecureWebResourceResponse.java:113:35:113:37 | uri : Uri | InsecureWebResourceResponse.java:113:35:113:47 | getPath(...) : String | provenance | | +| InsecureWebResourceResponse.java:113:35:113:47 | getPath(...) : String | InsecureWebResourceResponse.java:113:35:113:60 | substring(...) : String | provenance | | +| InsecureWebResourceResponse.java:113:35:113:60 | substring(...) : String | InsecureWebResourceResponse.java:115:75:115:78 | path : String | provenance | | +| InsecureWebResourceResponse.java:115:55:115:108 | new FileInputStream(...) : FileInputStream | InsecureWebResourceResponse.java:117:75:117:85 | inputStream | provenance | | +| InsecureWebResourceResponse.java:115:75:115:78 | path : String | InsecureWebResourceResponse.java:115:75:115:107 | substring(...) : String | provenance | | +| InsecureWebResourceResponse.java:115:75:115:107 | substring(...) : String | InsecureWebResourceResponse.java:115:55:115:108 | new FileInputStream(...) : FileInputStream | provenance | | +| InsecureWebResourceResponse.java:127:20:127:22 | url : String | InsecureWebResourceResponse.java:63:77:63:86 | url : String | provenance | | +| InsecureWebResourceResponse.java:127:20:127:22 | url : String | InsecureWebResourceResponse.java:84:77:84:86 | url : String | provenance | | +| InsecureWebResourceResponse.java:127:20:127:22 | url : String | InsecureWebResourceResponse.java:110:77:110:86 | url : String | provenance | | +| InsecureWebResourceResponse.java:127:20:127:22 | url : String | InsecureWebResourceResponse.java:192:77:192:102 | request : WebResourceRequest | provenance | | +| InsecureWebResourceResponse.java:127:20:127:22 | url : String | InsecureWebResourceResponse.java:232:69:232:78 | url : String | provenance | | +| InsecureWebResourceResponse.java:131:36:131:45 | url : String | InsecureWebResourceResponse.java:152:20:152:22 | url : String | provenance | | +| InsecureWebResourceResponse.java:152:20:152:22 | url : String | InsecureWebResourceResponse.java:63:77:63:86 | url : String | provenance | | +| InsecureWebResourceResponse.java:152:20:152:22 | url : String | InsecureWebResourceResponse.java:84:77:84:86 | url : String | provenance | | +| InsecureWebResourceResponse.java:152:20:152:22 | url : String | InsecureWebResourceResponse.java:110:77:110:86 | url : String | provenance | | +| InsecureWebResourceResponse.java:152:20:152:22 | url : String | InsecureWebResourceResponse.java:192:77:192:102 | request : WebResourceRequest | provenance | | +| InsecureWebResourceResponse.java:152:20:152:22 | url : String | InsecureWebResourceResponse.java:232:69:232:78 | url : String | provenance | | +| InsecureWebResourceResponse.java:156:35:156:44 | url : String | InsecureWebResourceResponse.java:177:20:177:22 | url : String | provenance | | +| InsecureWebResourceResponse.java:177:20:177:22 | url : String | InsecureWebResourceResponse.java:63:77:63:86 | url : String | provenance | | +| InsecureWebResourceResponse.java:177:20:177:22 | url : String | InsecureWebResourceResponse.java:84:77:84:86 | url : String | provenance | | +| InsecureWebResourceResponse.java:177:20:177:22 | url : String | InsecureWebResourceResponse.java:110:77:110:86 | url : String | provenance | | +| InsecureWebResourceResponse.java:177:20:177:22 | url : String | InsecureWebResourceResponse.java:192:77:192:102 | request : WebResourceRequest | provenance | | +| InsecureWebResourceResponse.java:177:20:177:22 | url : String | InsecureWebResourceResponse.java:232:69:232:78 | url : String | provenance | | +| InsecureWebResourceResponse.java:181:34:181:43 | url : String | InsecureWebResourceResponse.java:184:20:184:22 | url : String | provenance | | +| InsecureWebResourceResponse.java:184:20:184:22 | url : String | InsecureWebResourceResponse.java:63:77:63:86 | url : String | provenance | | +| InsecureWebResourceResponse.java:184:20:184:22 | url : String | InsecureWebResourceResponse.java:84:77:84:86 | url : String | provenance | | +| InsecureWebResourceResponse.java:184:20:184:22 | url : String | InsecureWebResourceResponse.java:110:77:110:86 | url : String | provenance | | +| InsecureWebResourceResponse.java:184:20:184:22 | url : String | InsecureWebResourceResponse.java:192:77:192:102 | request : WebResourceRequest | provenance | | +| InsecureWebResourceResponse.java:184:20:184:22 | url : String | InsecureWebResourceResponse.java:232:69:232:78 | url : String | provenance | | +| InsecureWebResourceResponse.java:188:34:188:43 | url : String | InsecureWebResourceResponse.java:209:20:209:22 | url : String | provenance | | +| InsecureWebResourceResponse.java:192:77:192:102 | request : WebResourceRequest | InsecureWebResourceResponse.java:194:31:194:37 | request : WebResourceRequest | provenance | | +| InsecureWebResourceResponse.java:194:31:194:37 | request : WebResourceRequest | InsecureWebResourceResponse.java:194:31:194:46 | getUrl(...) : Uri | provenance | | +| InsecureWebResourceResponse.java:194:31:194:46 | getUrl(...) : Uri | InsecureWebResourceResponse.java:196:66:196:68 | uri : Uri | provenance | | +| InsecureWebResourceResponse.java:196:42:196:90 | new File(...) : File | InsecureWebResourceResponse.java:197:75:197:83 | cacheFile : File | provenance | | +| InsecureWebResourceResponse.java:196:66:196:68 | uri : Uri | InsecureWebResourceResponse.java:196:66:196:89 | getLastPathSegment(...) : String | provenance | | +| InsecureWebResourceResponse.java:196:66:196:89 | getLastPathSegment(...) : String | InsecureWebResourceResponse.java:196:42:196:90 | new File(...) : File | provenance | | +| InsecureWebResourceResponse.java:197:55:197:84 | new FileInputStream(...) : FileInputStream | InsecureWebResourceResponse.java:199:75:199:85 | inputStream | provenance | | +| InsecureWebResourceResponse.java:197:75:197:83 | cacheFile : File | InsecureWebResourceResponse.java:197:55:197:84 | new FileInputStream(...) : FileInputStream | provenance | | +| InsecureWebResourceResponse.java:209:20:209:22 | url : String | InsecureWebResourceResponse.java:63:77:63:86 | url : String | provenance | | +| InsecureWebResourceResponse.java:209:20:209:22 | url : String | InsecureWebResourceResponse.java:84:77:84:86 | url : String | provenance | | +| InsecureWebResourceResponse.java:209:20:209:22 | url : String | InsecureWebResourceResponse.java:110:77:110:86 | url : String | provenance | | +| InsecureWebResourceResponse.java:209:20:209:22 | url : String | InsecureWebResourceResponse.java:192:77:192:102 | request : WebResourceRequest | provenance | | +| InsecureWebResourceResponse.java:209:20:209:22 | url : String | InsecureWebResourceResponse.java:232:69:232:78 | url : String | provenance | | +| InsecureWebResourceResponse.java:217:35:217:44 | url : String | InsecureWebResourceResponse.java:226:20:226:22 | url : String | provenance | | +| InsecureWebResourceResponse.java:226:20:226:22 | url : String | InsecureWebResourceResponse.java:63:77:63:86 | url : String | provenance | | +| InsecureWebResourceResponse.java:226:20:226:22 | url : String | InsecureWebResourceResponse.java:84:77:84:86 | url : String | provenance | | +| InsecureWebResourceResponse.java:226:20:226:22 | url : String | InsecureWebResourceResponse.java:110:77:110:86 | url : String | provenance | | +| InsecureWebResourceResponse.java:226:20:226:22 | url : String | InsecureWebResourceResponse.java:192:77:192:102 | request : WebResourceRequest | provenance | | +| InsecureWebResourceResponse.java:226:20:226:22 | url : String | InsecureWebResourceResponse.java:232:69:232:78 | url : String | provenance | | +| InsecureWebResourceResponse.java:232:69:232:78 | url : String | InsecureWebResourceResponse.java:234:33:234:35 | url : String | provenance | | +| InsecureWebResourceResponse.java:234:23:234:36 | parse(...) : Uri | InsecureWebResourceResponse.java:235:63:235:65 | uri : Uri | provenance | | +| InsecureWebResourceResponse.java:234:33:234:35 | url : String | InsecureWebResourceResponse.java:234:23:234:36 | parse(...) : Uri | provenance | | +| InsecureWebResourceResponse.java:235:43:235:76 | new FileInputStream(...) : FileInputStream | InsecureWebResourceResponse.java:237:63:237:73 | inputStream | provenance | | +| InsecureWebResourceResponse.java:235:63:235:65 | uri : Uri | InsecureWebResourceResponse.java:235:63:235:75 | getPath(...) : String | provenance | | +| InsecureWebResourceResponse.java:235:63:235:75 | getPath(...) : String | InsecureWebResourceResponse.java:235:43:235:76 | new FileInputStream(...) : FileInputStream | provenance | | +| InsecureWebViewActivity.java:27:27:27:37 | getIntent(...) : Intent | InsecureWebViewActivity.java:27:27:27:64 | getStringExtra(...) : String | provenance | | +| InsecureWebViewActivity.java:27:27:27:64 | getStringExtra(...) : String | InsecureWebViewActivity.java:28:20:28:27 | inputUrl : String | provenance | | +| InsecureWebViewActivity.java:28:20:28:27 | inputUrl : String | InsecureWebViewActivity.java:42:28:42:37 | url : String | provenance | | +| InsecureWebViewActivity.java:42:28:42:37 | url : String | InsecureWebViewActivity.java:43:25:43:27 | url : String | provenance | | +| InsecureWebViewActivity.java:43:25:43:27 | url : String | InsecureWebViewActivity.java:53:77:53:86 | url : String | provenance | | +| InsecureWebViewActivity.java:53:77:53:86 | url : String | InsecureWebViewActivity.java:55:41:55:43 | url : String | provenance | | +| InsecureWebViewActivity.java:55:31:55:44 | parse(...) : Uri | InsecureWebViewActivity.java:56:71:56:73 | uri : Uri | provenance | | +| InsecureWebViewActivity.java:55:41:55:43 | url : String | InsecureWebViewActivity.java:55:31:55:44 | parse(...) : Uri | provenance | | +| InsecureWebViewActivity.java:56:51:56:84 | new FileInputStream(...) : FileInputStream | InsecureWebViewActivity.java:58:71:58:81 | inputStream | provenance | | +| InsecureWebViewActivity.java:56:71:56:73 | uri : Uri | InsecureWebViewActivity.java:56:71:56:83 | getPath(...) : String | provenance | | +| InsecureWebViewActivity.java:56:71:56:83 | getPath(...) : String | InsecureWebViewActivity.java:56:51:56:84 | new FileInputStream(...) : FileInputStream | provenance | | nodes | InsecureWebResourceResponse.java:28:27:28:37 | getIntent(...) : Intent | semmle.label | getIntent(...) : Intent | | InsecureWebResourceResponse.java:28:27:28:64 | getStringExtra(...) : String | semmle.label | getStringExtra(...) : String | diff --git a/java/ql/test/experimental/query-tests/security/CWE-200/SensitiveAndroidFileLeak.expected b/java/ql/test/experimental/query-tests/security/CWE-200/SensitiveAndroidFileLeak.expected index 9c5b6ce8b69..739a825664b 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-200/SensitiveAndroidFileLeak.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-200/SensitiveAndroidFileLeak.expected @@ -1,23 +1,23 @@ edges -| FileService.java:20:31:20:43 | intent : Intent | FileService.java:21:28:21:33 | intent : Intent | -| FileService.java:21:28:21:33 | intent : Intent | FileService.java:21:28:21:64 | getStringExtra(...) : String | -| FileService.java:21:28:21:64 | getStringExtra(...) : String | FileService.java:25:42:25:50 | localPath : String | -| FileService.java:25:13:25:51 | makeParamsToExecute(...) : Object[] | FileService.java:40:41:40:55 | params : Object[] | -| FileService.java:25:13:25:51 | makeParamsToExecute(...) : Object[] [[]] : String | FileService.java:25:13:25:51 | makeParamsToExecute(...) : Object[] | -| FileService.java:25:42:25:50 | localPath : String | FileService.java:25:13:25:51 | makeParamsToExecute(...) : Object[] [[]] : String | -| FileService.java:25:42:25:50 | localPath : String | FileService.java:32:13:32:28 | sourceUri : String | -| FileService.java:32:13:32:28 | sourceUri : String | FileService.java:35:17:35:25 | sourceUri : String | -| FileService.java:34:20:36:13 | {...} : Object[] [[]] : String | FileService.java:34:20:36:13 | new Object[] : Object[] [[]] : String | -| FileService.java:35:17:35:25 | sourceUri : String | FileService.java:34:20:36:13 | {...} : Object[] [[]] : String | -| FileService.java:40:41:40:55 | params : Object[] | FileService.java:44:33:44:52 | (...)... : String[] | -| FileService.java:44:33:44:52 | (...)... : String[] | FileService.java:45:53:45:59 | ...[...] | -| LeakFileActivity2.java:15:13:15:18 | intent : Intent | LeakFileActivity2.java:16:26:16:31 | intent : Intent | -| LeakFileActivity2.java:16:26:16:31 | intent : Intent | FileService.java:20:31:20:43 | intent : Intent | -| LeakFileActivity.java:14:35:14:38 | data : Intent | LeakFileActivity.java:18:40:18:59 | contentIntent : Intent | -| LeakFileActivity.java:18:40:18:59 | contentIntent : Intent | LeakFileActivity.java:19:31:19:43 | contentIntent : Intent | -| LeakFileActivity.java:19:31:19:43 | contentIntent : Intent | LeakFileActivity.java:19:31:19:53 | getData(...) : Uri | -| LeakFileActivity.java:19:31:19:53 | getData(...) : Uri | LeakFileActivity.java:21:58:21:72 | streamsToUpload : Uri | -| LeakFileActivity.java:21:58:21:72 | streamsToUpload : Uri | LeakFileActivity.java:21:58:21:82 | getPath(...) | +| FileService.java:20:31:20:43 | intent : Intent | FileService.java:21:28:21:33 | intent : Intent | provenance | | +| FileService.java:21:28:21:33 | intent : Intent | FileService.java:21:28:21:64 | getStringExtra(...) : String | provenance | | +| FileService.java:21:28:21:64 | getStringExtra(...) : String | FileService.java:25:42:25:50 | localPath : String | provenance | | +| FileService.java:25:13:25:51 | makeParamsToExecute(...) : Object[] | FileService.java:40:41:40:55 | params : Object[] | provenance | | +| FileService.java:25:13:25:51 | makeParamsToExecute(...) : Object[] [[]] : String | FileService.java:25:13:25:51 | makeParamsToExecute(...) : Object[] | provenance | | +| FileService.java:25:42:25:50 | localPath : String | FileService.java:25:13:25:51 | makeParamsToExecute(...) : Object[] [[]] : String | provenance | | +| FileService.java:25:42:25:50 | localPath : String | FileService.java:32:13:32:28 | sourceUri : String | provenance | | +| FileService.java:32:13:32:28 | sourceUri : String | FileService.java:35:17:35:25 | sourceUri : String | provenance | | +| FileService.java:34:20:36:13 | {...} : Object[] [[]] : String | FileService.java:34:20:36:13 | new Object[] : Object[] [[]] : String | provenance | | +| FileService.java:35:17:35:25 | sourceUri : String | FileService.java:34:20:36:13 | {...} : Object[] [[]] : String | provenance | | +| FileService.java:40:41:40:55 | params : Object[] | FileService.java:44:33:44:52 | (...)... : String[] | provenance | | +| FileService.java:44:33:44:52 | (...)... : String[] | FileService.java:45:53:45:59 | ...[...] | provenance | | +| LeakFileActivity2.java:15:13:15:18 | intent : Intent | LeakFileActivity2.java:16:26:16:31 | intent : Intent | provenance | | +| LeakFileActivity2.java:16:26:16:31 | intent : Intent | FileService.java:20:31:20:43 | intent : Intent | provenance | | +| LeakFileActivity.java:14:35:14:38 | data : Intent | LeakFileActivity.java:18:40:18:59 | contentIntent : Intent | provenance | | +| LeakFileActivity.java:18:40:18:59 | contentIntent : Intent | LeakFileActivity.java:19:31:19:43 | contentIntent : Intent | provenance | | +| LeakFileActivity.java:19:31:19:43 | contentIntent : Intent | LeakFileActivity.java:19:31:19:53 | getData(...) : Uri | provenance | | +| LeakFileActivity.java:19:31:19:53 | getData(...) : Uri | LeakFileActivity.java:21:58:21:72 | streamsToUpload : Uri | provenance | | +| LeakFileActivity.java:21:58:21:72 | streamsToUpload : Uri | LeakFileActivity.java:21:58:21:82 | getPath(...) | provenance | | nodes | FileService.java:20:31:20:43 | intent : Intent | semmle.label | intent : Intent | | FileService.java:21:28:21:33 | intent : Intent | semmle.label | intent : Intent | diff --git a/java/ql/test/experimental/query-tests/security/CWE-208/NotConstantTimeCheckOnSignature/Test.expected b/java/ql/test/experimental/query-tests/security/CWE-208/NotConstantTimeCheckOnSignature/Test.expected index ec275d26d74..13c2a03ee2b 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-208/NotConstantTimeCheckOnSignature/Test.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-208/NotConstantTimeCheckOnSignature/Test.expected @@ -1,7 +1,7 @@ edges -| Test.java:14:28:14:44 | doFinal(...) : byte[] | Test.java:15:43:15:51 | actualMac | -| Test.java:30:28:30:40 | sign(...) : byte[] | Test.java:31:40:31:48 | signature | -| Test.java:47:22:47:46 | doFinal(...) : byte[] | Test.java:48:40:48:42 | tag | +| Test.java:14:28:14:44 | doFinal(...) : byte[] | Test.java:15:43:15:51 | actualMac | provenance | | +| Test.java:30:28:30:40 | sign(...) : byte[] | Test.java:31:40:31:48 | signature | provenance | | +| Test.java:47:22:47:46 | doFinal(...) : byte[] | Test.java:48:40:48:42 | tag | provenance | | nodes | Test.java:14:28:14:44 | doFinal(...) : byte[] | semmle.label | doFinal(...) : byte[] | | Test.java:15:43:15:51 | actualMac | semmle.label | actualMac | diff --git a/java/ql/test/experimental/query-tests/security/CWE-208/TimingAttackAgainstSignagure/Test.expected b/java/ql/test/experimental/query-tests/security/CWE-208/TimingAttackAgainstSignagure/Test.expected index c5d41465cb2..64b6414d2e0 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-208/TimingAttackAgainstSignagure/Test.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-208/TimingAttackAgainstSignagure/Test.expected @@ -1,15 +1,15 @@ edges -| Test.java:21:32:21:48 | doFinal(...) : byte[] | Test.java:23:47:23:55 | actualMac | -| Test.java:34:25:34:33 | actualMac : byte[] | Test.java:36:47:36:55 | actualMac | -| Test.java:59:32:59:44 | sign(...) : byte[] | Test.java:61:44:61:52 | signature | -| Test.java:73:25:73:33 | signature : byte[] | Test.java:75:44:75:52 | signature | -| Test.java:99:26:99:45 | doFinal(...) : byte[] | Test.java:101:49:101:51 | tag | -| Test.java:116:28:116:30 | tag : byte[] | Test.java:118:44:118:46 | tag | -| Test.java:134:56:134:58 | tag : ByteBuffer | Test.java:136:44:136:46 | tag : ByteBuffer | -| Test.java:136:44:136:46 | tag : ByteBuffer | Test.java:136:44:136:54 | array(...) | -| Test.java:148:56:148:58 | tag : ByteBuffer | Test.java:150:53:150:55 | tag | -| Test.java:174:26:174:50 | doFinal(...) : byte[] | Test.java:176:44:176:46 | tag | -| Test.java:201:34:201:50 | doFinal(...) : byte[] | Test.java:204:26:204:36 | computedTag | +| Test.java:21:32:21:48 | doFinal(...) : byte[] | Test.java:23:47:23:55 | actualMac | provenance | | +| Test.java:34:25:34:33 | actualMac : byte[] | Test.java:36:47:36:55 | actualMac | provenance | | +| Test.java:59:32:59:44 | sign(...) : byte[] | Test.java:61:44:61:52 | signature | provenance | | +| Test.java:73:25:73:33 | signature : byte[] | Test.java:75:44:75:52 | signature | provenance | | +| Test.java:99:26:99:45 | doFinal(...) : byte[] | Test.java:101:49:101:51 | tag | provenance | | +| Test.java:116:28:116:30 | tag : byte[] | Test.java:118:44:118:46 | tag | provenance | | +| Test.java:134:56:134:58 | tag : ByteBuffer | Test.java:136:44:136:46 | tag : ByteBuffer | provenance | | +| Test.java:136:44:136:46 | tag : ByteBuffer | Test.java:136:44:136:54 | array(...) | provenance | | +| Test.java:148:56:148:58 | tag : ByteBuffer | Test.java:150:53:150:55 | tag | provenance | | +| Test.java:174:26:174:50 | doFinal(...) : byte[] | Test.java:176:44:176:46 | tag | provenance | | +| Test.java:201:34:201:50 | doFinal(...) : byte[] | Test.java:204:26:204:36 | computedTag | provenance | | nodes | Test.java:21:32:21:48 | doFinal(...) : byte[] | semmle.label | doFinal(...) : byte[] | | Test.java:23:47:23:55 | actualMac | semmle.label | actualMac | 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 ab68d9578b4..054956fdd2c 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,10 +1,10 @@ edges -| DisabledRevocationChecking.java:17:5:17:8 | this <.field> [post update] : DisabledRevocationChecking [flag] : Boolean | DisabledRevocationChecking.java:21:5:21:31 | this <.method> [post update] : DisabledRevocationChecking [flag] : Boolean | -| DisabledRevocationChecking.java:17:12:17:16 | false : Boolean | DisabledRevocationChecking.java:17:5:17:8 | this <.field> [post update] : DisabledRevocationChecking [flag] : Boolean | -| DisabledRevocationChecking.java:21:5:21:31 | this <.method> [post update] : DisabledRevocationChecking [flag] : Boolean | DisabledRevocationChecking.java:22:5:22:31 | this <.method> : DisabledRevocationChecking [flag] : Boolean | -| DisabledRevocationChecking.java:22:5:22:31 | this <.method> : DisabledRevocationChecking [flag] : Boolean | DisabledRevocationChecking.java:25:15:25:22 | parameter this : DisabledRevocationChecking [flag] : Boolean | -| DisabledRevocationChecking.java:25:15:25:22 | parameter this : DisabledRevocationChecking [flag] : Boolean | DisabledRevocationChecking.java:28:33:28:36 | this <.field> : DisabledRevocationChecking [flag] : Boolean | -| DisabledRevocationChecking.java:28:33:28:36 | this <.field> : DisabledRevocationChecking [flag] : Boolean | DisabledRevocationChecking.java:28:33:28:36 | flag | +| DisabledRevocationChecking.java:17:5:17:8 | this <.field> [post update] : DisabledRevocationChecking [flag] : Boolean | DisabledRevocationChecking.java:21:5:21:31 | this <.method> [post update] : 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: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 | diff --git a/java/ql/test/experimental/query-tests/security/CWE-327/UnsafeTlsVersion.expected b/java/ql/test/experimental/query-tests/security/CWE-327/UnsafeTlsVersion.expected index 53315833c14..af60203749c 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-327/UnsafeTlsVersion.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-327/UnsafeTlsVersion.expected @@ -1,59 +1,59 @@ edges -| UnsafeTlsVersion.java:31:5:31:46 | new ..[] { .. } : String[] [[]] : String | UnsafeTlsVersion.java:43:74:43:92 | protocols : String[] [[]] : String | -| UnsafeTlsVersion.java:31:39:31:45 | "SSLv3" : String | UnsafeTlsVersion.java:31:5:31:46 | new ..[] { .. } : String[] [[]] : String | -| UnsafeTlsVersion.java:32:5:32:44 | new ..[] { .. } : String[] [[]] : String | UnsafeTlsVersion.java:43:74:43:92 | protocols : String[] [[]] : String | -| UnsafeTlsVersion.java:32:39:32:43 | "TLS" : String | UnsafeTlsVersion.java:32:5:32:44 | new ..[] { .. } : String[] [[]] : String | -| UnsafeTlsVersion.java:33:5:33:46 | new ..[] { .. } : String[] [[]] : String | UnsafeTlsVersion.java:43:74:43:92 | protocols : String[] [[]] : String | -| UnsafeTlsVersion.java:33:39:33:45 | "TLSv1" : String | UnsafeTlsVersion.java:33:5:33:46 | new ..[] { .. } : String[] [[]] : String | -| UnsafeTlsVersion.java:34:5:34:48 | new ..[] { .. } : String[] [[]] : String | UnsafeTlsVersion.java:43:74:43:92 | protocols : String[] [[]] : String | -| UnsafeTlsVersion.java:34:39:34:47 | "TLSv1.1" : String | UnsafeTlsVersion.java:34:5:34:48 | new ..[] { .. } : String[] [[]] : String | -| UnsafeTlsVersion.java:35:5:35:68 | new ..[] { .. } : String[] [[]] : String | UnsafeTlsVersion.java:43:74:43:92 | protocols : String[] [[]] : String | -| UnsafeTlsVersion.java:35:39:35:45 | "TLSv1" : String | UnsafeTlsVersion.java:35:5:35:68 | new ..[] { .. } : String[] [[]] : String | -| UnsafeTlsVersion.java:35:48:35:56 | "TLSv1.1" : String | UnsafeTlsVersion.java:35:5:35:68 | new ..[] { .. } : String[] [[]] : String | -| UnsafeTlsVersion.java:43:74:43:92 | protocols : String[] [[]] : String | UnsafeTlsVersion.java:44:44:44:52 | protocols | -| UnsafeTlsVersion.java:50:38:50:61 | {...} : String[] [[]] : String | UnsafeTlsVersion.java:50:38:50:61 | new String[] | -| UnsafeTlsVersion.java:50:53:50:59 | "SSLv3" : String | UnsafeTlsVersion.java:50:38:50:61 | {...} : String[] [[]] : String | -| UnsafeTlsVersion.java:51:38:51:59 | {...} : String[] [[]] : String | UnsafeTlsVersion.java:51:38:51:59 | new String[] | -| UnsafeTlsVersion.java:51:53:51:57 | "TLS" : String | UnsafeTlsVersion.java:51:38:51:59 | {...} : String[] [[]] : String | -| UnsafeTlsVersion.java:52:38:52:61 | {...} : String[] [[]] : String | UnsafeTlsVersion.java:52:38:52:61 | new String[] | -| UnsafeTlsVersion.java:52:53:52:59 | "TLSv1" : String | UnsafeTlsVersion.java:52:38:52:61 | {...} : String[] [[]] : String | -| UnsafeTlsVersion.java:53:38:53:63 | {...} : String[] [[]] : String | UnsafeTlsVersion.java:53:38:53:63 | new String[] | -| UnsafeTlsVersion.java:53:53:53:61 | "TLSv1.1" : String | UnsafeTlsVersion.java:53:38:53:63 | {...} : String[] [[]] : String | -| UnsafeTlsVersion.java:56:29:56:65 | {...} : String[] [[]] : String | UnsafeTlsVersion.java:56:29:56:65 | new String[] | -| UnsafeTlsVersion.java:56:44:56:52 | "TLSv1.1" : String | UnsafeTlsVersion.java:56:29:56:65 | {...} : String[] [[]] : String | -| UnsafeTlsVersion.java:68:5:68:28 | new ..[] { .. } : String[] [[]] : String | UnsafeTlsVersion.java:79:43:79:61 | protocols : String[] [[]] : String | -| UnsafeTlsVersion.java:68:21:68:27 | "SSLv3" : String | UnsafeTlsVersion.java:68:5:68:28 | new ..[] { .. } : String[] [[]] : String | -| UnsafeTlsVersion.java:69:5:69:26 | new ..[] { .. } : String[] [[]] : String | UnsafeTlsVersion.java:79:43:79:61 | protocols : String[] [[]] : String | -| UnsafeTlsVersion.java:69:21:69:25 | "TLS" : String | UnsafeTlsVersion.java:69:5:69:26 | new ..[] { .. } : String[] [[]] : String | -| UnsafeTlsVersion.java:70:5:70:28 | new ..[] { .. } : String[] [[]] : String | UnsafeTlsVersion.java:79:43:79:61 | protocols : String[] [[]] : String | -| UnsafeTlsVersion.java:70:21:70:27 | "TLSv1" : String | UnsafeTlsVersion.java:70:5:70:28 | new ..[] { .. } : String[] [[]] : String | -| UnsafeTlsVersion.java:71:5:71:30 | new ..[] { .. } : String[] [[]] : String | UnsafeTlsVersion.java:79:43:79:61 | protocols : String[] [[]] : String | -| UnsafeTlsVersion.java:71:21:71:29 | "TLSv1.1" : String | UnsafeTlsVersion.java:71:5:71:30 | new ..[] { .. } : String[] [[]] : String | -| UnsafeTlsVersion.java:72:5:72:41 | new ..[] { .. } : String[] [[]] : String | UnsafeTlsVersion.java:79:43:79:61 | protocols : String[] [[]] : String | -| UnsafeTlsVersion.java:72:21:72:29 | "TLSv1.1" : String | UnsafeTlsVersion.java:72:5:72:41 | new ..[] { .. } : String[] [[]] : String | -| UnsafeTlsVersion.java:79:43:79:61 | protocols : String[] [[]] : String | UnsafeTlsVersion.java:81:32:81:40 | protocols | -| UnsafeTlsVersion.java:88:5:88:34 | new ..[] { .. } : String[] [[]] : String | UnsafeTlsVersion.java:99:55:99:73 | protocols : String[] [[]] : String | -| UnsafeTlsVersion.java:88:27:88:33 | "SSLv3" : String | UnsafeTlsVersion.java:88:5:88:34 | new ..[] { .. } : String[] [[]] : String | -| UnsafeTlsVersion.java:89:5:89:32 | new ..[] { .. } : String[] [[]] : String | UnsafeTlsVersion.java:99:55:99:73 | protocols : String[] [[]] : String | -| UnsafeTlsVersion.java:89:27:89:31 | "TLS" : String | UnsafeTlsVersion.java:89:5:89:32 | new ..[] { .. } : String[] [[]] : String | -| UnsafeTlsVersion.java:90:5:90:34 | new ..[] { .. } : String[] [[]] : String | UnsafeTlsVersion.java:99:55:99:73 | protocols : String[] [[]] : String | -| UnsafeTlsVersion.java:90:27:90:33 | "TLSv1" : String | UnsafeTlsVersion.java:90:5:90:34 | new ..[] { .. } : String[] [[]] : String | -| UnsafeTlsVersion.java:91:5:91:36 | new ..[] { .. } : String[] [[]] : String | UnsafeTlsVersion.java:99:55:99:73 | protocols : String[] [[]] : String | -| UnsafeTlsVersion.java:91:27:91:35 | "TLSv1.1" : String | UnsafeTlsVersion.java:91:5:91:36 | new ..[] { .. } : String[] [[]] : String | -| UnsafeTlsVersion.java:92:5:92:47 | new ..[] { .. } : String[] [[]] : String | UnsafeTlsVersion.java:99:55:99:73 | protocols : String[] [[]] : String | -| UnsafeTlsVersion.java:92:27:92:35 | "TLSv1.1" : String | UnsafeTlsVersion.java:92:5:92:47 | new ..[] { .. } : String[] [[]] : String | -| UnsafeTlsVersion.java:99:55:99:73 | protocols : String[] [[]] : String | UnsafeTlsVersion.java:101:32:101:40 | protocols | -| UnsafeTlsVersion.java:108:5:108:28 | new ..[] { .. } : String[] [[]] : String | UnsafeTlsVersion.java:119:43:119:61 | protocols : String[] [[]] : String | -| UnsafeTlsVersion.java:108:21:108:27 | "SSLv3" : String | UnsafeTlsVersion.java:108:5:108:28 | new ..[] { .. } : String[] [[]] : String | -| UnsafeTlsVersion.java:109:5:109:26 | new ..[] { .. } : String[] [[]] : String | UnsafeTlsVersion.java:119:43:119:61 | protocols : String[] [[]] : String | -| UnsafeTlsVersion.java:109:21:109:25 | "TLS" : String | UnsafeTlsVersion.java:109:5:109:26 | new ..[] { .. } : String[] [[]] : String | -| UnsafeTlsVersion.java:110:5:110:28 | new ..[] { .. } : String[] [[]] : String | UnsafeTlsVersion.java:119:43:119:61 | protocols : String[] [[]] : String | -| UnsafeTlsVersion.java:110:21:110:27 | "TLSv1" : String | UnsafeTlsVersion.java:110:5:110:28 | new ..[] { .. } : String[] [[]] : String | -| UnsafeTlsVersion.java:111:5:111:30 | new ..[] { .. } : String[] [[]] : String | UnsafeTlsVersion.java:119:43:119:61 | protocols : String[] [[]] : String | -| UnsafeTlsVersion.java:111:21:111:29 | "TLSv1.1" : String | UnsafeTlsVersion.java:111:5:111:30 | new ..[] { .. } : String[] [[]] : String | -| UnsafeTlsVersion.java:112:5:112:41 | new ..[] { .. } : String[] [[]] : String | UnsafeTlsVersion.java:119:43:119:61 | protocols : String[] [[]] : String | -| UnsafeTlsVersion.java:112:21:112:29 | "TLSv1.1" : String | UnsafeTlsVersion.java:112:5:112:41 | new ..[] { .. } : String[] [[]] : String | -| UnsafeTlsVersion.java:119:43:119:61 | protocols : String[] [[]] : String | UnsafeTlsVersion.java:121:32:121:40 | protocols | +| UnsafeTlsVersion.java:31:5:31:46 | new ..[] { .. } : String[] [[]] : String | UnsafeTlsVersion.java:43:74:43:92 | protocols : String[] [[]] : String | provenance | | +| UnsafeTlsVersion.java:31:39:31:45 | "SSLv3" : String | UnsafeTlsVersion.java:31:5:31:46 | new ..[] { .. } : String[] [[]] : String | provenance | | +| UnsafeTlsVersion.java:32:5:32:44 | new ..[] { .. } : String[] [[]] : String | UnsafeTlsVersion.java:43:74:43:92 | protocols : String[] [[]] : String | provenance | | +| UnsafeTlsVersion.java:32:39:32:43 | "TLS" : String | UnsafeTlsVersion.java:32:5:32:44 | new ..[] { .. } : String[] [[]] : String | provenance | | +| UnsafeTlsVersion.java:33:5:33:46 | new ..[] { .. } : String[] [[]] : String | UnsafeTlsVersion.java:43:74:43:92 | protocols : String[] [[]] : String | provenance | | +| UnsafeTlsVersion.java:33:39:33:45 | "TLSv1" : String | UnsafeTlsVersion.java:33:5:33:46 | new ..[] { .. } : String[] [[]] : String | provenance | | +| UnsafeTlsVersion.java:34:5:34:48 | new ..[] { .. } : String[] [[]] : String | UnsafeTlsVersion.java:43:74:43:92 | protocols : String[] [[]] : String | provenance | | +| UnsafeTlsVersion.java:34:39:34:47 | "TLSv1.1" : String | UnsafeTlsVersion.java:34:5:34:48 | new ..[] { .. } : String[] [[]] : String | provenance | | +| UnsafeTlsVersion.java:35:5:35:68 | new ..[] { .. } : String[] [[]] : String | UnsafeTlsVersion.java:43:74:43:92 | protocols : String[] [[]] : String | provenance | | +| UnsafeTlsVersion.java:35:39:35:45 | "TLSv1" : String | UnsafeTlsVersion.java:35:5:35:68 | new ..[] { .. } : String[] [[]] : String | provenance | | +| UnsafeTlsVersion.java:35:48:35:56 | "TLSv1.1" : String | UnsafeTlsVersion.java:35:5:35:68 | new ..[] { .. } : String[] [[]] : String | provenance | | +| UnsafeTlsVersion.java:43:74:43:92 | protocols : String[] [[]] : String | UnsafeTlsVersion.java:44:44:44:52 | protocols | provenance | | +| UnsafeTlsVersion.java:50:38:50:61 | {...} : String[] [[]] : String | UnsafeTlsVersion.java:50:38:50:61 | new String[] | provenance | | +| UnsafeTlsVersion.java:50:53:50:59 | "SSLv3" : String | UnsafeTlsVersion.java:50:38:50:61 | {...} : String[] [[]] : String | provenance | | +| UnsafeTlsVersion.java:51:38:51:59 | {...} : String[] [[]] : String | UnsafeTlsVersion.java:51:38:51:59 | new String[] | provenance | | +| UnsafeTlsVersion.java:51:53:51:57 | "TLS" : String | UnsafeTlsVersion.java:51:38:51:59 | {...} : String[] [[]] : String | provenance | | +| UnsafeTlsVersion.java:52:38:52:61 | {...} : String[] [[]] : String | UnsafeTlsVersion.java:52:38:52:61 | new String[] | provenance | | +| UnsafeTlsVersion.java:52:53:52:59 | "TLSv1" : String | UnsafeTlsVersion.java:52:38:52:61 | {...} : String[] [[]] : String | provenance | | +| UnsafeTlsVersion.java:53:38:53:63 | {...} : String[] [[]] : String | UnsafeTlsVersion.java:53:38:53:63 | new String[] | provenance | | +| UnsafeTlsVersion.java:53:53:53:61 | "TLSv1.1" : String | UnsafeTlsVersion.java:53:38:53:63 | {...} : String[] [[]] : String | provenance | | +| UnsafeTlsVersion.java:56:29:56:65 | {...} : String[] [[]] : String | UnsafeTlsVersion.java:56:29:56:65 | new String[] | provenance | | +| UnsafeTlsVersion.java:56:44:56:52 | "TLSv1.1" : String | UnsafeTlsVersion.java:56:29:56:65 | {...} : String[] [[]] : String | provenance | | +| UnsafeTlsVersion.java:68:5:68:28 | new ..[] { .. } : String[] [[]] : String | UnsafeTlsVersion.java:79:43:79:61 | protocols : String[] [[]] : String | provenance | | +| UnsafeTlsVersion.java:68:21:68:27 | "SSLv3" : String | UnsafeTlsVersion.java:68:5:68:28 | new ..[] { .. } : String[] [[]] : String | provenance | | +| UnsafeTlsVersion.java:69:5:69:26 | new ..[] { .. } : String[] [[]] : String | UnsafeTlsVersion.java:79:43:79:61 | protocols : String[] [[]] : String | provenance | | +| UnsafeTlsVersion.java:69:21:69:25 | "TLS" : String | UnsafeTlsVersion.java:69:5:69:26 | new ..[] { .. } : String[] [[]] : String | provenance | | +| UnsafeTlsVersion.java:70:5:70:28 | new ..[] { .. } : String[] [[]] : String | UnsafeTlsVersion.java:79:43:79:61 | protocols : String[] [[]] : String | provenance | | +| UnsafeTlsVersion.java:70:21:70:27 | "TLSv1" : String | UnsafeTlsVersion.java:70:5:70:28 | new ..[] { .. } : String[] [[]] : String | provenance | | +| UnsafeTlsVersion.java:71:5:71:30 | new ..[] { .. } : String[] [[]] : String | UnsafeTlsVersion.java:79:43:79:61 | protocols : String[] [[]] : String | provenance | | +| UnsafeTlsVersion.java:71:21:71:29 | "TLSv1.1" : String | UnsafeTlsVersion.java:71:5:71:30 | new ..[] { .. } : String[] [[]] : String | provenance | | +| UnsafeTlsVersion.java:72:5:72:41 | new ..[] { .. } : String[] [[]] : String | UnsafeTlsVersion.java:79:43:79:61 | protocols : String[] [[]] : String | provenance | | +| UnsafeTlsVersion.java:72:21:72:29 | "TLSv1.1" : String | UnsafeTlsVersion.java:72:5:72:41 | new ..[] { .. } : String[] [[]] : String | provenance | | +| UnsafeTlsVersion.java:79:43:79:61 | protocols : String[] [[]] : String | UnsafeTlsVersion.java:81:32:81:40 | protocols | provenance | | +| UnsafeTlsVersion.java:88:5:88:34 | new ..[] { .. } : String[] [[]] : String | UnsafeTlsVersion.java:99:55:99:73 | protocols : String[] [[]] : String | provenance | | +| UnsafeTlsVersion.java:88:27:88:33 | "SSLv3" : String | UnsafeTlsVersion.java:88:5:88:34 | new ..[] { .. } : String[] [[]] : String | provenance | | +| UnsafeTlsVersion.java:89:5:89:32 | new ..[] { .. } : String[] [[]] : String | UnsafeTlsVersion.java:99:55:99:73 | protocols : String[] [[]] : String | provenance | | +| UnsafeTlsVersion.java:89:27:89:31 | "TLS" : String | UnsafeTlsVersion.java:89:5:89:32 | new ..[] { .. } : String[] [[]] : String | provenance | | +| UnsafeTlsVersion.java:90:5:90:34 | new ..[] { .. } : String[] [[]] : String | UnsafeTlsVersion.java:99:55:99:73 | protocols : String[] [[]] : String | provenance | | +| UnsafeTlsVersion.java:90:27:90:33 | "TLSv1" : String | UnsafeTlsVersion.java:90:5:90:34 | new ..[] { .. } : String[] [[]] : String | provenance | | +| UnsafeTlsVersion.java:91:5:91:36 | new ..[] { .. } : String[] [[]] : String | UnsafeTlsVersion.java:99:55:99:73 | protocols : String[] [[]] : String | provenance | | +| UnsafeTlsVersion.java:91:27:91:35 | "TLSv1.1" : String | UnsafeTlsVersion.java:91:5:91:36 | new ..[] { .. } : String[] [[]] : String | provenance | | +| UnsafeTlsVersion.java:92:5:92:47 | new ..[] { .. } : String[] [[]] : String | UnsafeTlsVersion.java:99:55:99:73 | protocols : String[] [[]] : String | provenance | | +| UnsafeTlsVersion.java:92:27:92:35 | "TLSv1.1" : String | UnsafeTlsVersion.java:92:5:92:47 | new ..[] { .. } : String[] [[]] : String | provenance | | +| UnsafeTlsVersion.java:99:55:99:73 | protocols : String[] [[]] : String | UnsafeTlsVersion.java:101:32:101:40 | protocols | provenance | | +| UnsafeTlsVersion.java:108:5:108:28 | new ..[] { .. } : String[] [[]] : String | UnsafeTlsVersion.java:119:43:119:61 | protocols : String[] [[]] : String | provenance | | +| UnsafeTlsVersion.java:108:21:108:27 | "SSLv3" : String | UnsafeTlsVersion.java:108:5:108:28 | new ..[] { .. } : String[] [[]] : String | provenance | | +| UnsafeTlsVersion.java:109:5:109:26 | new ..[] { .. } : String[] [[]] : String | UnsafeTlsVersion.java:119:43:119:61 | protocols : String[] [[]] : String | provenance | | +| UnsafeTlsVersion.java:109:21:109:25 | "TLS" : String | UnsafeTlsVersion.java:109:5:109:26 | new ..[] { .. } : String[] [[]] : String | provenance | | +| UnsafeTlsVersion.java:110:5:110:28 | new ..[] { .. } : String[] [[]] : String | UnsafeTlsVersion.java:119:43:119:61 | protocols : String[] [[]] : String | provenance | | +| UnsafeTlsVersion.java:110:21:110:27 | "TLSv1" : String | UnsafeTlsVersion.java:110:5:110:28 | new ..[] { .. } : String[] [[]] : String | provenance | | +| UnsafeTlsVersion.java:111:5:111:30 | new ..[] { .. } : String[] [[]] : String | UnsafeTlsVersion.java:119:43:119:61 | protocols : String[] [[]] : String | provenance | | +| UnsafeTlsVersion.java:111:21:111:29 | "TLSv1.1" : String | UnsafeTlsVersion.java:111:5:111:30 | new ..[] { .. } : String[] [[]] : String | provenance | | +| UnsafeTlsVersion.java:112:5:112:41 | new ..[] { .. } : String[] [[]] : String | UnsafeTlsVersion.java:119:43:119:61 | protocols : String[] [[]] : String | provenance | | +| UnsafeTlsVersion.java:112:21:112:29 | "TLSv1.1" : String | UnsafeTlsVersion.java:112:5:112:41 | new ..[] { .. } : String[] [[]] : String | provenance | | +| UnsafeTlsVersion.java:119:43:119:61 | protocols : String[] [[]] : String | UnsafeTlsVersion.java:121:32:121:40 | protocols | provenance | | nodes | UnsafeTlsVersion.java:16:28:16:32 | "SSL" | semmle.label | "SSL" | | UnsafeTlsVersion.java:17:28:17:34 | "SSLv2" | semmle.label | "SSLv2" | diff --git a/java/ql/test/experimental/query-tests/security/CWE-346/UnvalidatedCors.expected b/java/ql/test/experimental/query-tests/security/CWE-346/UnvalidatedCors.expected index 845406aabe7..c803d30fa2f 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-346/UnvalidatedCors.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-346/UnvalidatedCors.expected @@ -1,5 +1,5 @@ edges -| UnvalidatedCors.java:21:22:21:48 | getHeader(...) : String | UnvalidatedCors.java:27:67:27:69 | url | +| UnvalidatedCors.java:21:22:21:48 | getHeader(...) : String | UnvalidatedCors.java:27:67:27:69 | url | provenance | | nodes | UnvalidatedCors.java:21:22:21:48 | getHeader(...) : String | semmle.label | getHeader(...) : String | | UnvalidatedCors.java:27:67:27:69 | url | semmle.label | url | diff --git a/java/ql/test/experimental/query-tests/security/CWE-348/ClientSuppliedIpUsedInSecurityCheck.expected b/java/ql/test/experimental/query-tests/security/CWE-348/ClientSuppliedIpUsedInSecurityCheck.expected index e6589ba1787..1fa40af94f2 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-348/ClientSuppliedIpUsedInSecurityCheck.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-348/ClientSuppliedIpUsedInSecurityCheck.expected @@ -1,11 +1,11 @@ edges -| ClientSuppliedIpUsedInSecurityCheck.java:16:21:16:33 | getClientIP(...) : String | ClientSuppliedIpUsedInSecurityCheck.java:17:37:17:38 | ip | -| ClientSuppliedIpUsedInSecurityCheck.java:24:21:24:33 | getClientIP(...) : String | ClientSuppliedIpUsedInSecurityCheck.java:25:33:25:34 | ip | -| ClientSuppliedIpUsedInSecurityCheck.java:43:27:43:62 | getHeader(...) : String | ClientSuppliedIpUsedInSecurityCheck.java:47:16:47:23 | xfHeader : String | -| ClientSuppliedIpUsedInSecurityCheck.java:47:16:47:23 | xfHeader : String | ClientSuppliedIpUsedInSecurityCheck.java:47:16:47:34 | split(...) : String[] | -| ClientSuppliedIpUsedInSecurityCheck.java:47:16:47:34 | split(...) : String[] | ClientSuppliedIpUsedInSecurityCheck.java:47:16:47:37 | ...[...] : String | -| ClientSuppliedIpUsedInSecurityCheck.java:47:16:47:37 | ...[...] : String | ClientSuppliedIpUsedInSecurityCheck.java:16:21:16:33 | getClientIP(...) : String | -| ClientSuppliedIpUsedInSecurityCheck.java:47:16:47:37 | ...[...] : String | ClientSuppliedIpUsedInSecurityCheck.java:24:21:24:33 | getClientIP(...) : String | +| ClientSuppliedIpUsedInSecurityCheck.java:16:21:16:33 | getClientIP(...) : String | ClientSuppliedIpUsedInSecurityCheck.java:17:37:17:38 | ip | provenance | | +| ClientSuppliedIpUsedInSecurityCheck.java:24:21:24:33 | getClientIP(...) : String | ClientSuppliedIpUsedInSecurityCheck.java:25:33:25:34 | ip | provenance | | +| ClientSuppliedIpUsedInSecurityCheck.java:43:27:43:62 | getHeader(...) : String | ClientSuppliedIpUsedInSecurityCheck.java:47:16:47:23 | xfHeader : String | provenance | | +| ClientSuppliedIpUsedInSecurityCheck.java:47:16:47:23 | xfHeader : String | ClientSuppliedIpUsedInSecurityCheck.java:47:16:47:34 | split(...) : String[] | provenance | | +| ClientSuppliedIpUsedInSecurityCheck.java:47:16:47:34 | split(...) : String[] | ClientSuppliedIpUsedInSecurityCheck.java:47:16:47:37 | ...[...] : String | provenance | | +| ClientSuppliedIpUsedInSecurityCheck.java:47:16:47:37 | ...[...] : String | ClientSuppliedIpUsedInSecurityCheck.java:16:21:16:33 | getClientIP(...) : String | provenance | | +| ClientSuppliedIpUsedInSecurityCheck.java:47:16:47:37 | ...[...] : String | ClientSuppliedIpUsedInSecurityCheck.java:24:21:24:33 | getClientIP(...) : String | provenance | | nodes | ClientSuppliedIpUsedInSecurityCheck.java:16:21:16:33 | getClientIP(...) : String | semmle.label | getClientIP(...) : String | | ClientSuppliedIpUsedInSecurityCheck.java:17:37:17:38 | ip | semmle.label | ip | diff --git a/java/ql/test/experimental/query-tests/security/CWE-352/JsonpInjection.expected b/java/ql/test/experimental/query-tests/security/CWE-352/JsonpInjection.expected index f9bcf7132a2..3bd9825e18f 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-352/JsonpInjection.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-352/JsonpInjection.expected @@ -1,11 +1,11 @@ edges -| JsonpController.java:33:32:33:68 | getParameter(...) : String | JsonpController.java:37:16:37:24 | resultStr | -| JsonpController.java:44:32:44:68 | getParameter(...) : String | JsonpController.java:46:16:46:24 | resultStr | -| JsonpController.java:53:32:53:68 | getParameter(...) : String | JsonpController.java:56:16:56:24 | resultStr | -| JsonpController.java:63:32:63:68 | getParameter(...) : String | JsonpController.java:66:16:66:24 | resultStr | -| JsonpController.java:73:32:73:68 | getParameter(...) : String | JsonpController.java:80:20:80:28 | resultStr | -| JsonpController.java:87:32:87:68 | getParameter(...) : String | JsonpController.java:94:20:94:28 | resultStr | -| JsonpController.java:101:32:101:68 | getParameter(...) : String | JsonpController.java:105:16:105:24 | resultStr | +| JsonpController.java:33:32:33:68 | getParameter(...) : String | JsonpController.java:37:16:37:24 | resultStr | provenance | | +| JsonpController.java:44:32:44:68 | getParameter(...) : String | JsonpController.java:46:16:46:24 | resultStr | provenance | | +| JsonpController.java:53:32:53:68 | getParameter(...) : String | JsonpController.java:56:16:56:24 | resultStr | provenance | | +| JsonpController.java:63:32:63:68 | getParameter(...) : String | JsonpController.java:66:16:66:24 | resultStr | provenance | | +| JsonpController.java:73:32:73:68 | getParameter(...) : String | JsonpController.java:80:20:80:28 | resultStr | provenance | | +| JsonpController.java:87:32:87:68 | getParameter(...) : String | JsonpController.java:94:20:94:28 | resultStr | provenance | | +| JsonpController.java:101:32:101:68 | getParameter(...) : String | JsonpController.java:105:16:105:24 | resultStr | provenance | | nodes | JsonpController.java:33:32:33:68 | getParameter(...) : String | semmle.label | getParameter(...) : String | | JsonpController.java:37:16:37:24 | resultStr | semmle.label | resultStr | 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 1f74227841b..04c8147eac5 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 @@ -1,12 +1,12 @@ edges -| ThreadResourceAbuse.java:37:25:37:73 | getInitParameter(...) : String | ThreadResourceAbuse.java:40:28:40:36 | delayTime : Number | -| ThreadResourceAbuse.java:40:4:40:37 | new UncheckedSyncAction(...) : UncheckedSyncAction [waitTime] : Number | ThreadResourceAbuse.java:71:15:71:17 | parameter this : UncheckedSyncAction [waitTime] : Number | -| ThreadResourceAbuse.java:40:28:40:36 | delayTime : 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:30:66:41 | waitTime : Number | ThreadResourceAbuse.java:67:20:67:27 | waitTime : Number | -| ThreadResourceAbuse.java:67:20:67:27 | waitTime : Number | ThreadResourceAbuse.java:67:4:67:7 | this [post update] : UncheckedSyncAction [waitTime] : Number | -| ThreadResourceAbuse.java:71:15:71:17 | parameter this : UncheckedSyncAction [waitTime] : Number | ThreadResourceAbuse.java:74:18:74:25 | this <.field> : UncheckedSyncAction [waitTime] : Number | -| ThreadResourceAbuse.java:74:18:74:25 | this <.field> : UncheckedSyncAction [waitTime] : Number | ThreadResourceAbuse.java:74:18:74:25 | waitTime | +| ThreadResourceAbuse.java:37:25:37:73 | getInitParameter(...) : String | ThreadResourceAbuse.java:40:28:40:36 | delayTime : Number | provenance | | +| ThreadResourceAbuse.java:40:4:40:37 | new UncheckedSyncAction(...) : UncheckedSyncAction [waitTime] : Number | ThreadResourceAbuse.java:71:15:71:17 | parameter this : UncheckedSyncAction [waitTime] : Number | provenance | | +| 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: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 | | 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 | 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 e79dbfee2d3..635ce2979ff 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 @@ -1,36 +1,36 @@ edges -| ThreadResourceAbuse.java:18:25:18:57 | getParameter(...) : String | ThreadResourceAbuse.java:21:28:21:36 | delayTime : Number | -| ThreadResourceAbuse.java:21:4:21:37 | new UncheckedSyncAction(...) : UncheckedSyncAction [waitTime] : Number | ThreadResourceAbuse.java:71:15:71:17 | parameter this : UncheckedSyncAction [waitTime] : Number | -| ThreadResourceAbuse.java:21:28:21:36 | delayTime : Number | ThreadResourceAbuse.java:21:4:21:37 | new UncheckedSyncAction(...) : UncheckedSyncAction [waitTime] : Number | -| ThreadResourceAbuse.java:21:28:21:36 | delayTime : Number | ThreadResourceAbuse.java:66:30:66:41 | waitTime : Number | -| ThreadResourceAbuse.java:29:82:29:114 | getParameter(...) : String | ThreadResourceAbuse.java:30:28:30:36 | delayTime : Number | -| ThreadResourceAbuse.java:30:4:30:37 | new UncheckedSyncAction(...) : UncheckedSyncAction [waitTime] : Number | ThreadResourceAbuse.java:71:15:71:17 | parameter this : UncheckedSyncAction [waitTime] : Number | -| ThreadResourceAbuse.java:30:28:30:36 | delayTime : Number | ThreadResourceAbuse.java:30:4:30: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:30:66:41 | waitTime : Number | ThreadResourceAbuse.java:67:20:67:27 | waitTime : Number | -| ThreadResourceAbuse.java:67:20:67:27 | waitTime : Number | ThreadResourceAbuse.java:67:4:67:7 | this [post update] : UncheckedSyncAction [waitTime] : Number | -| ThreadResourceAbuse.java:71:15:71:17 | parameter this : UncheckedSyncAction [waitTime] : Number | ThreadResourceAbuse.java:74:18:74:25 | this <.field> : UncheckedSyncAction [waitTime] : Number | -| ThreadResourceAbuse.java:74:18:74:25 | this <.field> : UncheckedSyncAction [waitTime] : Number | ThreadResourceAbuse.java:74:18:74:25 | waitTime | -| ThreadResourceAbuse.java:141:27:141:43 | getValue(...) : String | ThreadResourceAbuse.java:144:34:144:42 | delayTime | -| ThreadResourceAbuse.java:172:19:172:50 | getHeader(...) : String | ThreadResourceAbuse.java:176:17:176:26 | retryAfter | -| ThreadResourceAbuse.java:206:28:206:56 | getParameter(...) : String | ThreadResourceAbuse.java:209:49:209:59 | uploadDelay : Number | -| ThreadResourceAbuse.java:209:30:209:87 | new UploadListener(...) : UploadListener [slowUploads] : Number | UploadListener.java:28:14:28:19 | parameter this : UploadListener [slowUploads] : Number | -| ThreadResourceAbuse.java:209:49:209:59 | uploadDelay : Number | ThreadResourceAbuse.java:209:30:209:87 | new UploadListener(...) : UploadListener [slowUploads] : Number | -| ThreadResourceAbuse.java:209:49:209:59 | uploadDelay : Number | UploadListener.java:15:24:15:44 | sleepMilliseconds : Number | -| ThreadResourceAbuse.java:215:19:215:50 | getHeader(...) : String | ThreadResourceAbuse.java:219:17:219:26 | retryAfter : Number | -| ThreadResourceAbuse.java:219:17:219:26 | retryAfter : Number | ThreadResourceAbuse.java:219:17:219:33 | ... * ... | -| ThreadResourceAbuse.java:227:19:227:50 | getHeader(...) : String | ThreadResourceAbuse.java:230:3:230:12 | retryAfter : Number | -| ThreadResourceAbuse.java:230:3:230:12 | retryAfter : Number | ThreadResourceAbuse.java:230:3:230:20 | ...*=... : Number | -| ThreadResourceAbuse.java:230:3:230:20 | ...*=... : Number | ThreadResourceAbuse.java:233:17:233:26 | retryAfter | -| UploadListener.java:15:24:15:44 | sleepMilliseconds : Number | UploadListener.java:16:17:16:33 | sleepMilliseconds : Number | -| UploadListener.java:16:17:16:33 | sleepMilliseconds : Number | UploadListener.java:16:3:16:13 | this <.field> [post update] : UploadListener [slowUploads] : Number | -| UploadListener.java:28:14:28:19 | parameter this : UploadListener [slowUploads] : Number | UploadListener.java:29:3:29:11 | this <.field> : UploadListener [slowUploads] : Number | -| UploadListener.java:29:3:29:11 | this <.field> : UploadListener [slowUploads] : Number | UploadListener.java:30:3:30:15 | this <.field> : UploadListener [slowUploads] : Number | -| UploadListener.java:30:3:30:15 | this <.field> : UploadListener [slowUploads] : Number | UploadListener.java:33:7:33:17 | this <.field> : UploadListener [slowUploads] : Number | -| UploadListener.java:30:3:30:15 | this <.field> : UploadListener [slowUploads] : Number | UploadListener.java:35:18:35:28 | this <.field> : UploadListener [slowUploads] : Number | -| UploadListener.java:33:7:33:17 | slowUploads : Number | UploadListener.java:35:18:35:28 | slowUploads | -| UploadListener.java:33:7:33:17 | this <.field> : UploadListener [slowUploads] : Number | UploadListener.java:33:7:33:17 | slowUploads : Number | -| UploadListener.java:35:18:35:28 | this <.field> : UploadListener [slowUploads] : Number | UploadListener.java:35:18:35:28 | slowUploads | +| ThreadResourceAbuse.java:18:25:18:57 | getParameter(...) : String | ThreadResourceAbuse.java:21:28:21:36 | delayTime : Number | provenance | | +| ThreadResourceAbuse.java:21:4:21:37 | new UncheckedSyncAction(...) : UncheckedSyncAction [waitTime] : Number | ThreadResourceAbuse.java:71:15:71:17 | parameter this : UncheckedSyncAction [waitTime] : Number | provenance | | +| ThreadResourceAbuse.java:21:28:21:36 | delayTime : Number | ThreadResourceAbuse.java:21:4:21:37 | new UncheckedSyncAction(...) : UncheckedSyncAction [waitTime] : Number | provenance | | +| ThreadResourceAbuse.java:21:28:21:36 | delayTime : Number | ThreadResourceAbuse.java:66:30:66:41 | waitTime : Number | provenance | | +| ThreadResourceAbuse.java:29:82:29:114 | getParameter(...) : String | ThreadResourceAbuse.java:30:28:30:36 | delayTime : Number | provenance | | +| ThreadResourceAbuse.java:30:4:30:37 | new UncheckedSyncAction(...) : UncheckedSyncAction [waitTime] : Number | ThreadResourceAbuse.java:71:15:71:17 | parameter this : UncheckedSyncAction [waitTime] : Number | provenance | | +| 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: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 | | +| ThreadResourceAbuse.java:141:27:141:43 | getValue(...) : String | ThreadResourceAbuse.java:144:34:144:42 | delayTime | provenance | | +| ThreadResourceAbuse.java:172:19:172:50 | getHeader(...) : String | ThreadResourceAbuse.java:176:17:176:26 | retryAfter | provenance | | +| ThreadResourceAbuse.java:206:28:206:56 | getParameter(...) : String | ThreadResourceAbuse.java:209:49:209:59 | uploadDelay : Number | provenance | | +| ThreadResourceAbuse.java:209:30:209:87 | new UploadListener(...) : UploadListener [slowUploads] : Number | UploadListener.java:28:14:28:19 | parameter this : UploadListener [slowUploads] : Number | provenance | | +| ThreadResourceAbuse.java:209:49:209:59 | uploadDelay : Number | ThreadResourceAbuse.java:209:30:209:87 | new UploadListener(...) : UploadListener [slowUploads] : Number | provenance | | +| ThreadResourceAbuse.java:209:49:209:59 | uploadDelay : Number | UploadListener.java:15:24:15:44 | sleepMilliseconds : Number | provenance | | +| ThreadResourceAbuse.java:215:19:215:50 | getHeader(...) : String | ThreadResourceAbuse.java:219:17:219:26 | retryAfter : Number | provenance | | +| ThreadResourceAbuse.java:219:17:219:26 | retryAfter : Number | ThreadResourceAbuse.java:219:17:219:33 | ... * ... | provenance | | +| ThreadResourceAbuse.java:227:19:227:50 | getHeader(...) : String | ThreadResourceAbuse.java:230:3:230:12 | retryAfter : Number | provenance | | +| ThreadResourceAbuse.java:230:3:230:12 | retryAfter : Number | ThreadResourceAbuse.java:230:3:230:20 | ...*=... : Number | provenance | | +| ThreadResourceAbuse.java:230:3:230:20 | ...*=... : Number | ThreadResourceAbuse.java:233:17:233:26 | retryAfter | provenance | | +| UploadListener.java:15:24:15:44 | sleepMilliseconds : Number | UploadListener.java:16:17:16:33 | sleepMilliseconds : 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 | | +| UploadListener.java:30:3:30:15 | this <.field> : UploadListener [slowUploads] : Number | UploadListener.java:33:7:33:17 | this <.field> : UploadListener [slowUploads] : Number | provenance | | +| UploadListener.java:30:3:30:15 | this <.field> : UploadListener [slowUploads] : Number | UploadListener.java:35:18:35:28 | this <.field> : UploadListener [slowUploads] : Number | provenance | | +| UploadListener.java:33:7:33:17 | slowUploads : Number | UploadListener.java:35:18:35:28 | slowUploads | provenance | | +| UploadListener.java:33:7:33:17 | this <.field> : UploadListener [slowUploads] : Number | UploadListener.java:33:7:33:17 | slowUploads : Number | provenance | | +| UploadListener.java:35:18:35:28 | this <.field> : UploadListener [slowUploads] : Number | UploadListener.java:35:18:35:28 | slowUploads | provenance | | nodes | ThreadResourceAbuse.java:18:25:18:57 | getParameter(...) : String | semmle.label | getParameter(...) : String | | ThreadResourceAbuse.java:21:4:21:37 | new UncheckedSyncAction(...) : UncheckedSyncAction [waitTime] : Number | semmle.label | new UncheckedSyncAction(...) : UncheckedSyncAction [waitTime] : Number | diff --git a/java/ql/test/experimental/query-tests/security/CWE-470/LoadClassNoSignatureCheck.expected b/java/ql/test/experimental/query-tests/security/CWE-470/LoadClassNoSignatureCheck.expected index 23d52993a91..cb7595fb0c3 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-470/LoadClassNoSignatureCheck.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-470/LoadClassNoSignatureCheck.expected @@ -1,7 +1,7 @@ edges -| BadClassLoader.java:15:42:16:75 | createPackageContext(...) : Context | BadClassLoader.java:17:47:17:56 | appContext : Context | -| BadClassLoader.java:17:47:17:56 | appContext : Context | BadClassLoader.java:17:47:17:73 | getClassLoader(...) : ClassLoader | -| BadClassLoader.java:17:47:17:73 | getClassLoader(...) : ClassLoader | BadClassLoader.java:18:37:18:47 | classLoader | +| BadClassLoader.java:15:42:16:75 | createPackageContext(...) : Context | BadClassLoader.java:17:47:17:56 | appContext : Context | provenance | | +| BadClassLoader.java:17:47:17:56 | appContext : Context | BadClassLoader.java:17:47:17:73 | getClassLoader(...) : ClassLoader | provenance | | +| BadClassLoader.java:17:47:17:73 | getClassLoader(...) : ClassLoader | BadClassLoader.java:18:37:18:47 | classLoader | provenance | | nodes | BadClassLoader.java:15:42:16:75 | createPackageContext(...) : Context | semmle.label | createPackageContext(...) : Context | | BadClassLoader.java:17:47:17:56 | appContext : Context | semmle.label | appContext : Context | diff --git a/java/ql/test/experimental/query-tests/security/CWE-470/UnsafeReflection.expected b/java/ql/test/experimental/query-tests/security/CWE-470/UnsafeReflection.expected index 2e37b50f3f7..37a3e15ea7a 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-470/UnsafeReflection.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-470/UnsafeReflection.expected @@ -1,39 +1,39 @@ edges -| UnsafeReflection.java:21:28:21:60 | getParameter(...) : String | UnsafeReflection.java:24:41:24:49 | className : String | -| UnsafeReflection.java:22:33:22:70 | getParameter(...) : String | UnsafeReflection.java:25:76:25:89 | parameterValue | -| UnsafeReflection.java:24:27:24:50 | forName(...) : Class | UnsafeReflection.java:25:29:25:33 | clazz : Class | -| UnsafeReflection.java:24:41:24:49 | className : String | UnsafeReflection.java:24:27:24:50 | forName(...) : Class | -| UnsafeReflection.java:25:29:25:33 | clazz : Class | UnsafeReflection.java:25:29:25:59 | getDeclaredConstructors(...) : Constructor[] | -| UnsafeReflection.java:25:29:25:59 | getDeclaredConstructors(...) : Constructor[] | UnsafeReflection.java:25:29:25:62 | ...[...] | -| UnsafeReflection.java:33:28:33:60 | getParameter(...) : String | UnsafeReflection.java:37:49:37:57 | className : String | -| UnsafeReflection.java:34:33:34:70 | getParameter(...) : String | UnsafeReflection.java:39:58:39:71 | parameterValue | -| UnsafeReflection.java:37:27:37:58 | loadClass(...) : Class | UnsafeReflection.java:38:29:38:33 | clazz : Class | -| UnsafeReflection.java:37:49:37:57 | className : String | UnsafeReflection.java:37:27:37:58 | loadClass(...) : Class | -| UnsafeReflection.java:38:29:38:33 | clazz : Class | UnsafeReflection.java:38:29:38:47 | newInstance(...) : Object | -| UnsafeReflection.java:38:29:38:33 | clazz : Class | UnsafeReflection.java:39:13:39:17 | clazz : Class | -| UnsafeReflection.java:38:29:38:47 | newInstance(...) : Object | UnsafeReflection.java:39:50:39:55 | object | -| UnsafeReflection.java:39:13:39:17 | clazz : Class | UnsafeReflection.java:39:13:39:38 | getDeclaredMethods(...) : Method[] | -| UnsafeReflection.java:39:13:39:38 | getDeclaredMethods(...) : Method[] | UnsafeReflection.java:39:13:39:41 | ...[...] | -| UnsafeReflection.java:46:24:46:82 | beanIdOrClassName : String | UnsafeReflection.java:53:30:53:46 | beanIdOrClassName : String | -| UnsafeReflection.java:46:132:46:168 | body : Map | UnsafeReflection.java:49:37:49:40 | body : Map | -| UnsafeReflection.java:49:23:49:59 | (...)... : List | UnsafeReflection.java:53:67:53:73 | rawData : List | -| UnsafeReflection.java:49:37:49:40 | body : Map | UnsafeReflection.java:49:37:49:59 | get(...) : Object | -| UnsafeReflection.java:49:37:49:59 | get(...) : Object | UnsafeReflection.java:49:23:49:59 | (...)... : List | -| UnsafeReflection.java:53:30:53:46 | beanIdOrClassName : String | UnsafeReflection.java:104:34:104:57 | beanIdOrClassName : String | -| UnsafeReflection.java:53:67:53:73 | rawData : List | UnsafeReflection.java:104:102:104:118 | data : List | -| UnsafeReflection.java:62:33:62:70 | getParameter(...) : String | UnsafeReflection.java:68:76:68:89 | parameterValue | -| UnsafeReflection.java:77:33:77:70 | getParameter(...) : String | UnsafeReflection.java:83:76:83:89 | parameterValue | -| UnsafeReflection.java:92:33:92:70 | getParameter(...) : String | UnsafeReflection.java:98:76:98:89 | parameterValue | -| UnsafeReflection.java:104:34:104:57 | beanIdOrClassName : String | UnsafeReflection.java:108:39:108:55 | beanIdOrClassName : String | -| UnsafeReflection.java:104:102:104:118 | data : List | UnsafeReflection.java:119:41:119:44 | data | -| UnsafeReflection.java:108:25:108:56 | forName(...) : Class | UnsafeReflection.java:109:31:109:39 | beanClass : Class | -| UnsafeReflection.java:108:39:108:55 | beanIdOrClassName : String | UnsafeReflection.java:108:25:108:56 | forName(...) : Class | -| UnsafeReflection.java:109:11:109:40 | getBean(...) : Object | UnsafeReflection.java:113:30:113:33 | bean : Object | -| UnsafeReflection.java:109:31:109:39 | beanClass : Class | UnsafeReflection.java:109:11:109:40 | getBean(...) : Object | -| UnsafeReflection.java:113:30:113:33 | bean : Object | UnsafeReflection.java:113:30:113:44 | getClass(...) : Class | -| UnsafeReflection.java:113:30:113:33 | bean : Object | UnsafeReflection.java:119:35:119:38 | bean | -| UnsafeReflection.java:113:30:113:44 | getClass(...) : Class | UnsafeReflection.java:113:30:113:57 | getMethods(...) : Method[] | -| UnsafeReflection.java:113:30:113:57 | getMethods(...) : Method[] | UnsafeReflection.java:119:21:119:26 | method | +| UnsafeReflection.java:21:28:21:60 | getParameter(...) : String | UnsafeReflection.java:24:41:24:49 | className : String | provenance | | +| UnsafeReflection.java:22:33:22:70 | getParameter(...) : String | UnsafeReflection.java:25:76:25:89 | parameterValue | provenance | | +| UnsafeReflection.java:24:27:24:50 | forName(...) : Class | UnsafeReflection.java:25:29:25:33 | clazz : Class | provenance | | +| UnsafeReflection.java:24:41:24:49 | className : String | UnsafeReflection.java:24:27:24:50 | forName(...) : Class | provenance | | +| UnsafeReflection.java:25:29:25:33 | clazz : Class | UnsafeReflection.java:25:29:25:59 | getDeclaredConstructors(...) : Constructor[] | provenance | | +| UnsafeReflection.java:25:29:25:59 | getDeclaredConstructors(...) : Constructor[] | UnsafeReflection.java:25:29:25:62 | ...[...] | provenance | | +| UnsafeReflection.java:33:28:33:60 | getParameter(...) : String | UnsafeReflection.java:37:49:37:57 | className : String | provenance | | +| UnsafeReflection.java:34:33:34:70 | getParameter(...) : String | UnsafeReflection.java:39:58:39:71 | parameterValue | provenance | | +| UnsafeReflection.java:37:27:37:58 | loadClass(...) : Class | UnsafeReflection.java:38:29:38:33 | clazz : Class | provenance | | +| UnsafeReflection.java:37:49:37:57 | className : String | UnsafeReflection.java:37:27:37:58 | loadClass(...) : Class | provenance | | +| UnsafeReflection.java:38:29:38:33 | clazz : Class | UnsafeReflection.java:38:29:38:47 | newInstance(...) : Object | provenance | | +| UnsafeReflection.java:38:29:38:33 | clazz : Class | UnsafeReflection.java:39:13:39:17 | clazz : Class | provenance | | +| UnsafeReflection.java:38:29:38:47 | newInstance(...) : Object | UnsafeReflection.java:39:50:39:55 | object | provenance | | +| UnsafeReflection.java:39:13:39:17 | clazz : Class | UnsafeReflection.java:39:13:39:38 | getDeclaredMethods(...) : Method[] | provenance | | +| UnsafeReflection.java:39:13:39:38 | getDeclaredMethods(...) : Method[] | UnsafeReflection.java:39:13:39:41 | ...[...] | provenance | | +| UnsafeReflection.java:46:24:46:82 | beanIdOrClassName : String | UnsafeReflection.java:53:30:53:46 | beanIdOrClassName : String | provenance | | +| UnsafeReflection.java:46:132:46:168 | body : Map | UnsafeReflection.java:49:37:49:40 | body : Map | provenance | | +| UnsafeReflection.java:49:23:49:59 | (...)... : List | UnsafeReflection.java:53:67:53:73 | rawData : List | provenance | | +| UnsafeReflection.java:49:37:49:40 | body : Map | UnsafeReflection.java:49:37:49:59 | get(...) : Object | provenance | | +| UnsafeReflection.java:49:37:49:59 | get(...) : Object | UnsafeReflection.java:49:23:49:59 | (...)... : List | provenance | | +| UnsafeReflection.java:53:30:53:46 | beanIdOrClassName : String | UnsafeReflection.java:104:34:104:57 | beanIdOrClassName : String | provenance | | +| UnsafeReflection.java:53:67:53:73 | rawData : List | UnsafeReflection.java:104:102:104:118 | data : List | provenance | | +| UnsafeReflection.java:62:33:62:70 | getParameter(...) : String | UnsafeReflection.java:68:76:68:89 | parameterValue | provenance | | +| UnsafeReflection.java:77:33:77:70 | getParameter(...) : String | UnsafeReflection.java:83:76:83:89 | parameterValue | provenance | | +| UnsafeReflection.java:92:33:92:70 | getParameter(...) : String | UnsafeReflection.java:98:76:98:89 | parameterValue | provenance | | +| UnsafeReflection.java:104:34:104:57 | beanIdOrClassName : String | UnsafeReflection.java:108:39:108:55 | beanIdOrClassName : String | provenance | | +| UnsafeReflection.java:104:102:104:118 | data : List | UnsafeReflection.java:119:41:119:44 | data | provenance | | +| UnsafeReflection.java:108:25:108:56 | forName(...) : Class | UnsafeReflection.java:109:31:109:39 | beanClass : Class | provenance | | +| UnsafeReflection.java:108:39:108:55 | beanIdOrClassName : String | UnsafeReflection.java:108:25:108:56 | forName(...) : Class | provenance | | +| UnsafeReflection.java:109:11:109:40 | getBean(...) : Object | UnsafeReflection.java:113:30:113:33 | bean : Object | provenance | | +| UnsafeReflection.java:109:31:109:39 | beanClass : Class | UnsafeReflection.java:109:11:109:40 | getBean(...) : Object | provenance | | +| UnsafeReflection.java:113:30:113:33 | bean : Object | UnsafeReflection.java:113:30:113:44 | getClass(...) : Class | provenance | | +| UnsafeReflection.java:113:30:113:33 | bean : Object | UnsafeReflection.java:119:35:119:38 | bean | provenance | | +| UnsafeReflection.java:113:30:113:44 | getClass(...) : Class | UnsafeReflection.java:113:30:113:57 | getMethods(...) : Method[] | provenance | | +| UnsafeReflection.java:113:30:113:57 | getMethods(...) : Method[] | UnsafeReflection.java:119:21:119:26 | method | provenance | | nodes | UnsafeReflection.java:21:28:21:60 | getParameter(...) : String | semmle.label | getParameter(...) : String | | UnsafeReflection.java:22:33:22:70 | getParameter(...) : String | semmle.label | getParameter(...) : String | diff --git a/java/ql/test/experimental/query-tests/security/CWE-502/UnsafeDeserializationRmi.expected b/java/ql/test/experimental/query-tests/security/CWE-502/UnsafeDeserializationRmi.expected index aaa0d3b0438..07b813d01fa 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-502/UnsafeDeserializationRmi.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-502/UnsafeDeserializationRmi.expected @@ -1,5 +1,5 @@ edges -| UnsafeDeserializationRmi.java:17:68:17:95 | new UnsafeRemoteObjectImpl(...) : UnsafeRemoteObjectImpl | UnsafeDeserializationRmi.java:17:35:17:96 | exportObject(...) | +| UnsafeDeserializationRmi.java:17:68:17:95 | new UnsafeRemoteObjectImpl(...) : UnsafeRemoteObjectImpl | UnsafeDeserializationRmi.java:17:35:17:96 | exportObject(...) | provenance | | nodes | UnsafeDeserializationRmi.java:15:33:15:60 | new UnsafeRemoteObjectImpl(...) | semmle.label | new UnsafeRemoteObjectImpl(...) | | UnsafeDeserializationRmi.java:16:35:16:62 | new UnsafeRemoteObjectImpl(...) | semmle.label | new UnsafeRemoteObjectImpl(...) | diff --git a/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeUrlForward.expected b/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeUrlForward.expected index 5d809244fdb..545471868e7 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeUrlForward.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeUrlForward.expected @@ -1,44 +1,44 @@ edges -| UnsafeLoadSpringResource.java:27:32:27:77 | fileName : String | UnsafeLoadSpringResource.java:31:49:31:56 | fileName : String | -| UnsafeLoadSpringResource.java:31:27:31:57 | new ClassPathResource(...) : ClassPathResource | UnsafeLoadSpringResource.java:35:31:35:33 | clr | -| UnsafeLoadSpringResource.java:31:49:31:56 | fileName : String | UnsafeLoadSpringResource.java:31:27:31:57 | new ClassPathResource(...) : ClassPathResource | -| UnsafeLoadSpringResource.java:68:32:68:77 | fileName : String | UnsafeLoadSpringResource.java:76:38:76:45 | fileName | -| UnsafeLoadSpringResource.java:108:32:108:77 | fileName : String | UnsafeLoadSpringResource.java:116:51:116:58 | fileName | -| UnsafeRequestPath.java:20:17:20:63 | getServletPath(...) : String | UnsafeRequestPath.java:23:33:23:36 | path | -| UnsafeResourceGet2.java:16:32:16:79 | getRequestParameterMap(...) : Map | UnsafeResourceGet2.java:17:20:17:25 | params : Map | -| UnsafeResourceGet2.java:17:20:17:25 | params : Map | UnsafeResourceGet2.java:17:20:17:40 | get(...) : String | -| UnsafeResourceGet2.java:17:20:17:40 | get(...) : String | UnsafeResourceGet2.java:19:93:19:99 | loadUrl | -| UnsafeResourceGet2.java:32:32:32:79 | getRequestParameterMap(...) : Map | UnsafeResourceGet2.java:33:20:33:25 | params : Map | -| UnsafeResourceGet2.java:33:20:33:25 | params : Map | UnsafeResourceGet2.java:33:20:33:40 | get(...) : String | -| UnsafeResourceGet2.java:33:20:33:40 | get(...) : String | UnsafeResourceGet2.java:35:49:35:55 | loadUrl : String | -| UnsafeResourceGet2.java:35:13:35:56 | getResource(...) : URL | UnsafeResourceGet2.java:37:20:37:22 | url | -| UnsafeResourceGet2.java:35:49:35:55 | loadUrl : String | UnsafeResourceGet2.java:35:13:35:56 | getResource(...) : URL | -| UnsafeResourceGet.java:32:23:32:56 | getParameter(...) : String | UnsafeResourceGet.java:39:28:39:37 | requestUrl : String | -| UnsafeResourceGet.java:39:13:39:38 | getResource(...) : URL | UnsafeResourceGet.java:41:20:41:22 | url | -| UnsafeResourceGet.java:39:28:39:37 | requestUrl : String | UnsafeResourceGet.java:39:13:39:38 | getResource(...) : URL | -| UnsafeResourceGet.java:111:24:111:58 | getParameter(...) : String | UnsafeResourceGet.java:115:68:115:78 | requestPath | -| UnsafeResourceGet.java:143:23:143:56 | getParameter(...) : String | UnsafeResourceGet.java:148:36:148:45 | requestUrl : String | -| UnsafeResourceGet.java:148:13:148:46 | getResource(...) : URL | UnsafeResourceGet.java:150:20:150:22 | url | -| UnsafeResourceGet.java:148:36:148:45 | requestUrl : String | UnsafeResourceGet.java:148:13:148:46 | getResource(...) : URL | -| UnsafeResourceGet.java:181:24:181:58 | getParameter(...) : String | UnsafeResourceGet.java:189:68:189:78 | requestPath | -| UnsafeResourceGet.java:219:23:219:56 | getParameter(...) : String | UnsafeResourceGet.java:224:53:224:62 | requestUrl : String | -| UnsafeResourceGet.java:224:13:224:63 | getResource(...) : URL | UnsafeResourceGet.java:226:20:226:22 | url | -| UnsafeResourceGet.java:224:53:224:62 | requestUrl : String | UnsafeResourceGet.java:224:13:224:63 | getResource(...) : URL | -| UnsafeResourceGet.java:237:24:237:58 | getParameter(...) : String | UnsafeResourceGet.java:241:33:241:43 | requestPath : String | -| UnsafeResourceGet.java:241:18:241:44 | getResource(...) : Resource | UnsafeResourceGet.java:245:21:245:22 | rs : Resource | -| UnsafeResourceGet.java:241:33:241:43 | requestPath : String | UnsafeResourceGet.java:241:18:241:44 | getResource(...) : Resource | -| UnsafeResourceGet.java:245:21:245:22 | rs : Resource | UnsafeResourceGet.java:245:21:245:32 | getPath(...) | -| UnsafeServletRequestDispatch.java:23:22:23:54 | getParameter(...) : String | UnsafeServletRequestDispatch.java:32:51:32:59 | returnURL | -| UnsafeServletRequestDispatch.java:42:22:42:54 | getParameter(...) : String | UnsafeServletRequestDispatch.java:48:56:48:64 | returnURL | -| UnsafeServletRequestDispatch.java:71:17:71:44 | getParameter(...) : String | UnsafeServletRequestDispatch.java:76:53:76:56 | path | -| UnsafeUrlForward.java:13:27:13:36 | url : String | UnsafeUrlForward.java:14:27:14:29 | url | -| UnsafeUrlForward.java:18:27:18:36 | url : String | UnsafeUrlForward.java:20:28:20:30 | url | -| UnsafeUrlForward.java:25:21:25:30 | url : String | UnsafeUrlForward.java:26:23:26:25 | url | -| UnsafeUrlForward.java:30:27:30:36 | url : String | UnsafeUrlForward.java:31:48:31:63 | ... + ... | -| UnsafeUrlForward.java:30:27:30:36 | url : String | UnsafeUrlForward.java:31:61:31:63 | url | -| UnsafeUrlForward.java:36:19:36:28 | url : String | UnsafeUrlForward.java:38:33:38:35 | url | -| UnsafeUrlForward.java:47:19:47:28 | url : String | UnsafeUrlForward.java:49:33:49:62 | ... + ... | -| UnsafeUrlForward.java:58:19:58:28 | url : String | UnsafeUrlForward.java:60:33:60:62 | ... + ... | +| UnsafeLoadSpringResource.java:27:32:27:77 | fileName : String | UnsafeLoadSpringResource.java:31:49:31:56 | fileName : String | provenance | | +| UnsafeLoadSpringResource.java:31:27:31:57 | new ClassPathResource(...) : ClassPathResource | UnsafeLoadSpringResource.java:35:31:35:33 | clr | provenance | | +| UnsafeLoadSpringResource.java:31:49:31:56 | fileName : String | UnsafeLoadSpringResource.java:31:27:31:57 | new ClassPathResource(...) : ClassPathResource | provenance | | +| UnsafeLoadSpringResource.java:68:32:68:77 | fileName : String | UnsafeLoadSpringResource.java:76:38:76:45 | fileName | provenance | | +| UnsafeLoadSpringResource.java:108:32:108:77 | fileName : String | UnsafeLoadSpringResource.java:116:51:116:58 | fileName | provenance | | +| UnsafeRequestPath.java:20:17:20:63 | getServletPath(...) : String | UnsafeRequestPath.java:23:33:23:36 | path | provenance | | +| UnsafeResourceGet2.java:16:32:16:79 | getRequestParameterMap(...) : Map | UnsafeResourceGet2.java:17:20:17:25 | params : Map | provenance | | +| UnsafeResourceGet2.java:17:20:17:25 | params : Map | UnsafeResourceGet2.java:17:20:17:40 | get(...) : String | provenance | | +| UnsafeResourceGet2.java:17:20:17:40 | get(...) : String | UnsafeResourceGet2.java:19:93:19:99 | loadUrl | provenance | | +| UnsafeResourceGet2.java:32:32:32:79 | getRequestParameterMap(...) : Map | UnsafeResourceGet2.java:33:20:33:25 | params : Map | provenance | | +| UnsafeResourceGet2.java:33:20:33:25 | params : Map | UnsafeResourceGet2.java:33:20:33:40 | get(...) : String | provenance | | +| UnsafeResourceGet2.java:33:20:33:40 | get(...) : String | UnsafeResourceGet2.java:35:49:35:55 | loadUrl : String | provenance | | +| UnsafeResourceGet2.java:35:13:35:56 | getResource(...) : URL | UnsafeResourceGet2.java:37:20:37:22 | url | provenance | | +| UnsafeResourceGet2.java:35:49:35:55 | loadUrl : String | UnsafeResourceGet2.java:35:13:35:56 | getResource(...) : URL | provenance | | +| UnsafeResourceGet.java:32:23:32:56 | getParameter(...) : String | UnsafeResourceGet.java:39:28:39:37 | requestUrl : String | provenance | | +| UnsafeResourceGet.java:39:13:39:38 | getResource(...) : URL | UnsafeResourceGet.java:41:20:41:22 | url | provenance | | +| UnsafeResourceGet.java:39:28:39:37 | requestUrl : String | UnsafeResourceGet.java:39:13:39:38 | getResource(...) : URL | provenance | | +| UnsafeResourceGet.java:111:24:111:58 | getParameter(...) : String | UnsafeResourceGet.java:115:68:115:78 | requestPath | provenance | | +| UnsafeResourceGet.java:143:23:143:56 | getParameter(...) : String | UnsafeResourceGet.java:148:36:148:45 | requestUrl : String | provenance | | +| UnsafeResourceGet.java:148:13:148:46 | getResource(...) : URL | UnsafeResourceGet.java:150:20:150:22 | url | provenance | | +| UnsafeResourceGet.java:148:36:148:45 | requestUrl : String | UnsafeResourceGet.java:148:13:148:46 | getResource(...) : URL | provenance | | +| UnsafeResourceGet.java:181:24:181:58 | getParameter(...) : String | UnsafeResourceGet.java:189:68:189:78 | requestPath | provenance | | +| UnsafeResourceGet.java:219:23:219:56 | getParameter(...) : String | UnsafeResourceGet.java:224:53:224:62 | requestUrl : String | provenance | | +| UnsafeResourceGet.java:224:13:224:63 | getResource(...) : URL | UnsafeResourceGet.java:226:20:226:22 | url | provenance | | +| UnsafeResourceGet.java:224:53:224:62 | requestUrl : String | UnsafeResourceGet.java:224:13:224:63 | getResource(...) : URL | provenance | | +| UnsafeResourceGet.java:237:24:237:58 | getParameter(...) : String | UnsafeResourceGet.java:241:33:241:43 | requestPath : String | provenance | | +| UnsafeResourceGet.java:241:18:241:44 | getResource(...) : Resource | UnsafeResourceGet.java:245:21:245:22 | rs : Resource | provenance | | +| UnsafeResourceGet.java:241:33:241:43 | requestPath : String | UnsafeResourceGet.java:241:18:241:44 | getResource(...) : Resource | provenance | | +| UnsafeResourceGet.java:245:21:245:22 | rs : Resource | UnsafeResourceGet.java:245:21:245:32 | getPath(...) | provenance | | +| UnsafeServletRequestDispatch.java:23:22:23:54 | getParameter(...) : String | UnsafeServletRequestDispatch.java:32:51:32:59 | returnURL | provenance | | +| UnsafeServletRequestDispatch.java:42:22:42:54 | getParameter(...) : String | UnsafeServletRequestDispatch.java:48:56:48:64 | returnURL | provenance | | +| UnsafeServletRequestDispatch.java:71:17:71:44 | getParameter(...) : String | UnsafeServletRequestDispatch.java:76:53:76:56 | path | provenance | | +| UnsafeUrlForward.java:13:27:13:36 | url : String | UnsafeUrlForward.java:14:27:14:29 | url | provenance | | +| UnsafeUrlForward.java:18:27:18:36 | url : String | UnsafeUrlForward.java:20:28:20:30 | url | provenance | | +| UnsafeUrlForward.java:25:21:25:30 | url : String | UnsafeUrlForward.java:26:23:26:25 | url | provenance | | +| UnsafeUrlForward.java:30:27:30:36 | url : String | UnsafeUrlForward.java:31:48:31:63 | ... + ... | provenance | | +| UnsafeUrlForward.java:30:27:30:36 | url : String | UnsafeUrlForward.java:31:61:31:63 | url | provenance | | +| UnsafeUrlForward.java:36:19:36:28 | url : String | UnsafeUrlForward.java:38:33:38:35 | url | provenance | | +| UnsafeUrlForward.java:47:19:47:28 | url : String | UnsafeUrlForward.java:49:33:49:62 | ... + ... | provenance | | +| UnsafeUrlForward.java:58:19:58:28 | url : String | UnsafeUrlForward.java:60:33:60:62 | ... + ... | provenance | | nodes | UnsafeLoadSpringResource.java:27:32:27:77 | fileName : String | semmle.label | fileName : String | | UnsafeLoadSpringResource.java:31:27:31:57 | new ClassPathResource(...) : ClassPathResource | semmle.label | new ClassPathResource(...) : ClassPathResource | diff --git a/java/ql/test/experimental/query-tests/security/CWE-598/SensitiveGetQuery.expected b/java/ql/test/experimental/query-tests/security/CWE-598/SensitiveGetQuery.expected index 28471144374..5d1bec7e093 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-598/SensitiveGetQuery.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-598/SensitiveGetQuery.expected @@ -1,19 +1,19 @@ edges -| SensitiveGetQuery2.java:12:13:12:37 | getParameterMap(...) : Map | SensitiveGetQuery2.java:14:30:14:32 | map : Map | -| SensitiveGetQuery2.java:14:21:14:48 | (...)... : String | SensitiveGetQuery2.java:15:29:15:36 | password | -| SensitiveGetQuery2.java:14:21:14:48 | (...)... : String | SensitiveGetQuery2.java:15:29:15:36 | password : String | -| SensitiveGetQuery2.java:14:30:14:32 | map : Map | SensitiveGetQuery2.java:14:30:14:48 | get(...) : Object | -| SensitiveGetQuery2.java:14:30:14:48 | get(...) : Object | SensitiveGetQuery2.java:14:21:14:48 | (...)... : String | -| SensitiveGetQuery2.java:15:29:15:36 | password : String | SensitiveGetQuery2.java:18:40:18:54 | password : String | -| SensitiveGetQuery2.java:18:40:18:54 | password : String | SensitiveGetQuery2.java:19:61:19:68 | password | -| SensitiveGetQuery3.java:12:21:12:60 | getRequestParameter(...) : String | SensitiveGetQuery3.java:13:57:13:64 | password | -| SensitiveGetQuery3.java:17:10:17:40 | getParameter(...) : String | SensitiveGetQuery3.java:12:21:12:60 | getRequestParameter(...) : String | -| SensitiveGetQuery4.java:14:24:14:66 | getRequestParameter(...) : String | SensitiveGetQuery4.java:16:37:16:47 | accessToken | -| SensitiveGetQuery4.java:20:10:20:40 | getParameter(...) : String | SensitiveGetQuery4.java:14:24:14:66 | getRequestParameter(...) : String | -| SensitiveGetQuery.java:12:21:12:52 | getParameter(...) : String | SensitiveGetQuery.java:14:29:14:36 | password | -| SensitiveGetQuery.java:12:21:12:52 | getParameter(...) : String | SensitiveGetQuery.java:14:29:14:36 | password : String | -| SensitiveGetQuery.java:14:29:14:36 | password : String | SensitiveGetQuery.java:17:40:17:54 | password : String | -| SensitiveGetQuery.java:17:40:17:54 | password : String | SensitiveGetQuery.java:18:61:18:68 | password | +| SensitiveGetQuery2.java:12:13:12:37 | getParameterMap(...) : Map | SensitiveGetQuery2.java:14:30:14:32 | map : Map | provenance | | +| SensitiveGetQuery2.java:14:21:14:48 | (...)... : String | SensitiveGetQuery2.java:15:29:15:36 | password | provenance | | +| SensitiveGetQuery2.java:14:21:14:48 | (...)... : String | SensitiveGetQuery2.java:15:29:15:36 | password : String | provenance | | +| SensitiveGetQuery2.java:14:30:14:32 | map : Map | SensitiveGetQuery2.java:14:30:14:48 | get(...) : Object | provenance | | +| SensitiveGetQuery2.java:14:30:14:48 | get(...) : Object | SensitiveGetQuery2.java:14:21:14:48 | (...)... : String | provenance | | +| SensitiveGetQuery2.java:15:29:15:36 | password : String | SensitiveGetQuery2.java:18:40:18:54 | password : String | provenance | | +| SensitiveGetQuery2.java:18:40:18:54 | password : String | SensitiveGetQuery2.java:19:61:19:68 | password | provenance | | +| SensitiveGetQuery3.java:12:21:12:60 | getRequestParameter(...) : String | SensitiveGetQuery3.java:13:57:13:64 | password | provenance | | +| SensitiveGetQuery3.java:17:10:17:40 | getParameter(...) : String | SensitiveGetQuery3.java:12:21:12:60 | getRequestParameter(...) : String | provenance | | +| SensitiveGetQuery4.java:14:24:14:66 | getRequestParameter(...) : String | SensitiveGetQuery4.java:16:37:16:47 | accessToken | provenance | | +| SensitiveGetQuery4.java:20:10:20:40 | getParameter(...) : String | SensitiveGetQuery4.java:14:24:14:66 | getRequestParameter(...) : String | provenance | | +| SensitiveGetQuery.java:12:21:12:52 | getParameter(...) : String | SensitiveGetQuery.java:14:29:14:36 | password | provenance | | +| SensitiveGetQuery.java:12:21:12:52 | getParameter(...) : String | SensitiveGetQuery.java:14:29:14:36 | password : String | provenance | | +| SensitiveGetQuery.java:14:29:14:36 | password : String | SensitiveGetQuery.java:17:40:17:54 | password : String | provenance | | +| SensitiveGetQuery.java:17:40:17:54 | password : String | SensitiveGetQuery.java:18:61:18:68 | password | provenance | | nodes | SensitiveGetQuery2.java:12:13:12:37 | getParameterMap(...) : Map | semmle.label | getParameterMap(...) : Map | | SensitiveGetQuery2.java:14:21:14:48 | (...)... : String | semmle.label | (...)... : String | diff --git a/java/ql/test/experimental/query-tests/security/CWE-600/UncaughtServletException.expected b/java/ql/test/experimental/query-tests/security/CWE-600/UncaughtServletException.expected index c06301e37fb..d257ae51324 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-600/UncaughtServletException.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-600/UncaughtServletException.expected @@ -1,8 +1,8 @@ edges -| UncaughtServletException.java:13:15:13:43 | getParameter(...) : String | UncaughtServletException.java:14:44:14:45 | ip | -| UncaughtServletException.java:16:19:16:41 | getRemoteUser(...) : String | UncaughtServletException.java:17:20:17:25 | userId | -| UncaughtServletException.java:54:16:54:44 | getParameter(...) : String | UncaughtServletException.java:55:45:55:46 | ip | -| UncaughtServletException.java:75:21:75:43 | getRemoteUser(...) : String | UncaughtServletException.java:76:22:76:27 | userId | +| UncaughtServletException.java:13:15:13:43 | getParameter(...) : String | UncaughtServletException.java:14:44:14:45 | ip | provenance | | +| UncaughtServletException.java:16:19:16:41 | getRemoteUser(...) : String | UncaughtServletException.java:17:20:17:25 | userId | provenance | | +| UncaughtServletException.java:54:16:54:44 | getParameter(...) : String | UncaughtServletException.java:55:45:55:46 | ip | provenance | | +| UncaughtServletException.java:75:21:75:43 | getRemoteUser(...) : String | UncaughtServletException.java:76:22:76:27 | userId | provenance | | nodes | UncaughtServletException.java:13:15:13:43 | getParameter(...) : String | semmle.label | getParameter(...) : String | | UncaughtServletException.java:14:44:14:45 | ip | semmle.label | ip | diff --git a/java/ql/test/experimental/query-tests/security/CWE-601/SpringUrlRedirect.expected b/java/ql/test/experimental/query-tests/security/CWE-601/SpringUrlRedirect.expected index 2269d357ec6..8042fd3dded 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-601/SpringUrlRedirect.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-601/SpringUrlRedirect.expected @@ -1,40 +1,40 @@ edges -| SpringUrlRedirect.java:17:30:17:47 | redirectUrl : String | SpringUrlRedirect.java:19:19:19:29 | redirectUrl | -| SpringUrlRedirect.java:24:24:24:41 | redirectUrl : String | SpringUrlRedirect.java:25:36:25:46 | redirectUrl | -| SpringUrlRedirect.java:30:30:30:47 | redirectUrl : String | SpringUrlRedirect.java:31:44:31:54 | redirectUrl | -| SpringUrlRedirect.java:36:30:36:47 | redirectUrl : String | SpringUrlRedirect.java:37:47:37:57 | redirectUrl | -| SpringUrlRedirect.java:41:24:41:41 | redirectUrl : String | SpringUrlRedirect.java:44:29:44:39 | redirectUrl | -| SpringUrlRedirect.java:49:24:49:41 | redirectUrl : String | SpringUrlRedirect.java:52:30:52:40 | redirectUrl | -| SpringUrlRedirect.java:57:24:57:41 | redirectUrl : String | SpringUrlRedirect.java:58:55:58:65 | redirectUrl : String | -| SpringUrlRedirect.java:58:30:58:66 | new ..[] { .. } : Object[] [[]] : String | SpringUrlRedirect.java:58:30:58:66 | format(...) | -| SpringUrlRedirect.java:58:55:58:65 | redirectUrl : String | SpringUrlRedirect.java:58:30:58:66 | new ..[] { .. } : Object[] [[]] : String | -| SpringUrlRedirect.java:62:24:62:41 | redirectUrl : String | SpringUrlRedirect.java:63:44:63:68 | ... + ... : String | -| SpringUrlRedirect.java:63:44:63:68 | ... + ... : String | SpringUrlRedirect.java:63:30:63:76 | format(...) | -| SpringUrlRedirect.java:89:38:89:55 | redirectUrl : String | SpringUrlRedirect.java:91:38:91:48 | redirectUrl : String | -| SpringUrlRedirect.java:91:38:91:48 | redirectUrl : String | SpringUrlRedirect.java:91:27:91:49 | create(...) | -| SpringUrlRedirect.java:96:39:96:56 | redirectUrl : String | SpringUrlRedirect.java:98:44:98:54 | redirectUrl : String | -| SpringUrlRedirect.java:98:9:98:19 | httpHeaders : HttpHeaders | SpringUrlRedirect.java:100:37:100:47 | httpHeaders | -| SpringUrlRedirect.java:98:33:98:55 | create(...) : URI | SpringUrlRedirect.java:98:9:98:19 | httpHeaders : HttpHeaders | -| SpringUrlRedirect.java:98:44:98:54 | redirectUrl : String | SpringUrlRedirect.java:98:33:98:55 | create(...) : URI | -| SpringUrlRedirect.java:104:39:104:56 | redirectUrl : String | SpringUrlRedirect.java:106:37:106:47 | redirectUrl : String | -| SpringUrlRedirect.java:106:9:106:19 | httpHeaders [post update] : HttpHeaders | SpringUrlRedirect.java:108:68:108:78 | httpHeaders | -| SpringUrlRedirect.java:106:9:106:19 | httpHeaders [post update] : HttpHeaders [, ] : String | SpringUrlRedirect.java:108:68:108:78 | httpHeaders | -| SpringUrlRedirect.java:106:37:106:47 | redirectUrl : String | SpringUrlRedirect.java:106:9:106:19 | httpHeaders [post update] : HttpHeaders | -| SpringUrlRedirect.java:106:37:106:47 | redirectUrl : String | SpringUrlRedirect.java:106:9:106:19 | httpHeaders [post update] : HttpHeaders [, ] : String | -| SpringUrlRedirect.java:112:39:112:56 | redirectUrl : String | SpringUrlRedirect.java:114:37:114:47 | redirectUrl : String | -| SpringUrlRedirect.java:114:9:114:19 | httpHeaders [post update] : HttpHeaders | SpringUrlRedirect.java:116:37:116:47 | httpHeaders | -| SpringUrlRedirect.java:114:9:114:19 | httpHeaders [post update] : HttpHeaders [, ] : String | SpringUrlRedirect.java:116:37:116:47 | httpHeaders | -| SpringUrlRedirect.java:114:37:114:47 | redirectUrl : String | SpringUrlRedirect.java:114:9:114:19 | httpHeaders [post update] : HttpHeaders | -| SpringUrlRedirect.java:114:37:114:47 | redirectUrl : String | SpringUrlRedirect.java:114:9:114:19 | httpHeaders [post update] : HttpHeaders [, ] : String | -| SpringUrlRedirect.java:120:33:120:50 | redirectUrl : String | SpringUrlRedirect.java:122:37:122:47 | redirectUrl : String | -| SpringUrlRedirect.java:122:9:122:19 | httpHeaders [post update] : HttpHeaders | SpringUrlRedirect.java:124:49:124:59 | httpHeaders | -| SpringUrlRedirect.java:122:9:122:19 | httpHeaders [post update] : HttpHeaders [, ] : String | SpringUrlRedirect.java:124:49:124:59 | httpHeaders | -| SpringUrlRedirect.java:122:37:122:47 | redirectUrl : String | SpringUrlRedirect.java:122:9:122:19 | httpHeaders [post update] : HttpHeaders | -| SpringUrlRedirect.java:122:37:122:47 | redirectUrl : String | SpringUrlRedirect.java:122:9:122:19 | httpHeaders [post update] : HttpHeaders [, ] : String | -| SpringUrlRedirect.java:128:33:128:50 | redirectUrl : String | SpringUrlRedirect.java:130:44:130:54 | redirectUrl : String | -| SpringUrlRedirect.java:130:9:130:19 | httpHeaders : HttpHeaders | SpringUrlRedirect.java:132:49:132:59 | httpHeaders | -| SpringUrlRedirect.java:130:33:130:55 | create(...) : URI | SpringUrlRedirect.java:130:9:130:19 | httpHeaders : HttpHeaders | -| SpringUrlRedirect.java:130:44:130:54 | redirectUrl : String | SpringUrlRedirect.java:130:33:130:55 | create(...) : URI | +| SpringUrlRedirect.java:17:30:17:47 | redirectUrl : String | SpringUrlRedirect.java:19:19:19:29 | redirectUrl | provenance | | +| SpringUrlRedirect.java:24:24:24:41 | redirectUrl : String | SpringUrlRedirect.java:25:36:25:46 | redirectUrl | provenance | | +| SpringUrlRedirect.java:30:30:30:47 | redirectUrl : String | SpringUrlRedirect.java:31:44:31:54 | redirectUrl | provenance | | +| SpringUrlRedirect.java:36:30:36:47 | redirectUrl : String | SpringUrlRedirect.java:37:47:37:57 | redirectUrl | provenance | | +| SpringUrlRedirect.java:41:24:41:41 | redirectUrl : String | SpringUrlRedirect.java:44:29:44:39 | redirectUrl | provenance | | +| SpringUrlRedirect.java:49:24:49:41 | redirectUrl : String | SpringUrlRedirect.java:52:30:52:40 | redirectUrl | provenance | | +| SpringUrlRedirect.java:57:24:57:41 | redirectUrl : String | SpringUrlRedirect.java:58:55:58:65 | redirectUrl : String | provenance | | +| SpringUrlRedirect.java:58:30:58:66 | new ..[] { .. } : Object[] [[]] : String | SpringUrlRedirect.java:58:30:58:66 | format(...) | provenance | | +| SpringUrlRedirect.java:58:55:58:65 | redirectUrl : String | SpringUrlRedirect.java:58:30:58:66 | new ..[] { .. } : Object[] [[]] : String | provenance | | +| SpringUrlRedirect.java:62:24:62:41 | redirectUrl : String | SpringUrlRedirect.java:63:44:63:68 | ... + ... : String | provenance | | +| SpringUrlRedirect.java:63:44:63:68 | ... + ... : String | SpringUrlRedirect.java:63:30:63:76 | format(...) | provenance | | +| SpringUrlRedirect.java:89:38:89:55 | redirectUrl : String | SpringUrlRedirect.java:91:38:91:48 | redirectUrl : String | provenance | | +| SpringUrlRedirect.java:91:38:91:48 | redirectUrl : String | SpringUrlRedirect.java:91:27:91:49 | create(...) | provenance | | +| SpringUrlRedirect.java:96:39:96:56 | redirectUrl : String | SpringUrlRedirect.java:98:44:98:54 | redirectUrl : String | provenance | | +| SpringUrlRedirect.java:98:9:98:19 | httpHeaders : HttpHeaders | SpringUrlRedirect.java:100:37:100:47 | httpHeaders | provenance | | +| SpringUrlRedirect.java:98:33:98:55 | create(...) : URI | SpringUrlRedirect.java:98:9:98:19 | httpHeaders : HttpHeaders | provenance | | +| SpringUrlRedirect.java:98:44:98:54 | redirectUrl : String | SpringUrlRedirect.java:98:33:98:55 | create(...) : URI | provenance | | +| SpringUrlRedirect.java:104:39:104:56 | redirectUrl : String | SpringUrlRedirect.java:106:37:106:47 | redirectUrl : String | provenance | | +| SpringUrlRedirect.java:106:9:106:19 | httpHeaders [post update] : HttpHeaders | SpringUrlRedirect.java:108:68:108:78 | httpHeaders | provenance | | +| SpringUrlRedirect.java:106:9:106:19 | httpHeaders [post update] : HttpHeaders [, ] : String | SpringUrlRedirect.java:108:68:108:78 | httpHeaders | provenance | | +| SpringUrlRedirect.java:106:37:106:47 | redirectUrl : String | SpringUrlRedirect.java:106:9:106:19 | httpHeaders [post update] : HttpHeaders | provenance | | +| SpringUrlRedirect.java:106:37:106:47 | redirectUrl : String | SpringUrlRedirect.java:106:9:106:19 | httpHeaders [post update] : HttpHeaders [, ] : String | provenance | | +| SpringUrlRedirect.java:112:39:112:56 | redirectUrl : String | SpringUrlRedirect.java:114:37:114:47 | redirectUrl : String | provenance | | +| SpringUrlRedirect.java:114:9:114:19 | httpHeaders [post update] : HttpHeaders | SpringUrlRedirect.java:116:37:116:47 | httpHeaders | provenance | | +| SpringUrlRedirect.java:114:9:114:19 | httpHeaders [post update] : HttpHeaders [, ] : String | SpringUrlRedirect.java:116:37:116:47 | httpHeaders | provenance | | +| SpringUrlRedirect.java:114:37:114:47 | redirectUrl : String | SpringUrlRedirect.java:114:9:114:19 | httpHeaders [post update] : HttpHeaders | provenance | | +| SpringUrlRedirect.java:114:37:114:47 | redirectUrl : String | SpringUrlRedirect.java:114:9:114:19 | httpHeaders [post update] : HttpHeaders [, ] : String | provenance | | +| SpringUrlRedirect.java:120:33:120:50 | redirectUrl : String | SpringUrlRedirect.java:122:37:122:47 | redirectUrl : String | provenance | | +| SpringUrlRedirect.java:122:9:122:19 | httpHeaders [post update] : HttpHeaders | SpringUrlRedirect.java:124:49:124:59 | httpHeaders | provenance | | +| SpringUrlRedirect.java:122:9:122:19 | httpHeaders [post update] : HttpHeaders [, ] : String | SpringUrlRedirect.java:124:49:124:59 | httpHeaders | provenance | | +| SpringUrlRedirect.java:122:37:122:47 | redirectUrl : String | SpringUrlRedirect.java:122:9:122:19 | httpHeaders [post update] : HttpHeaders | provenance | | +| SpringUrlRedirect.java:122:37:122:47 | redirectUrl : String | SpringUrlRedirect.java:122:9:122:19 | httpHeaders [post update] : HttpHeaders [, ] : String | provenance | | +| SpringUrlRedirect.java:128:33:128:50 | redirectUrl : String | SpringUrlRedirect.java:130:44:130:54 | redirectUrl : String | provenance | | +| SpringUrlRedirect.java:130:9:130:19 | httpHeaders : HttpHeaders | SpringUrlRedirect.java:132:49:132:59 | httpHeaders | provenance | | +| SpringUrlRedirect.java:130:33:130:55 | create(...) : URI | SpringUrlRedirect.java:130:9:130:19 | httpHeaders : HttpHeaders | provenance | | +| SpringUrlRedirect.java:130:44:130:54 | redirectUrl : String | SpringUrlRedirect.java:130:33:130:55 | create(...) : URI | provenance | | nodes | SpringUrlRedirect.java:17:30:17:47 | redirectUrl : String | semmle.label | redirectUrl : String | | SpringUrlRedirect.java:19:19:19:29 | redirectUrl | semmle.label | redirectUrl | diff --git a/java/ql/test/experimental/query-tests/security/CWE-625/PermissiveDotRegex.expected b/java/ql/test/experimental/query-tests/security/CWE-625/PermissiveDotRegex.expected index c8a387fa33d..d6e5f12ec29 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-625/PermissiveDotRegex.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-625/PermissiveDotRegex.expected @@ -1,22 +1,22 @@ edges -| DotRegexFilter.java:29:19:29:43 | getPathInfo(...) : String | DotRegexFilter.java:32:25:32:30 | source | -| DotRegexServlet.java:19:19:19:39 | getPathInfo(...) : String | DotRegexServlet.java:22:25:22:30 | source | -| DotRegexServlet.java:57:19:57:41 | getRequestURI(...) : String | DotRegexServlet.java:59:21:59:26 | source | -| DotRegexServlet.java:75:19:75:39 | getPathInfo(...) : String | DotRegexServlet.java:77:56:77:61 | source | -| DotRegexServlet.java:112:19:112:39 | getPathInfo(...) : String | DotRegexServlet.java:115:25:115:30 | source | -| DotRegexSpring.java:20:26:20:50 | path : String | DotRegexSpring.java:22:21:22:24 | path : String | -| DotRegexSpring.java:22:10:22:25 | decodePath(...) : String | DotRegexSpring.java:23:25:23:28 | path | -| DotRegexSpring.java:22:21:22:24 | path : String | DotRegexSpring.java:22:10:22:25 | decodePath(...) : String | -| DotRegexSpring.java:22:21:22:24 | path : String | DotRegexSpring.java:69:28:69:38 | path : String | -| DotRegexSpring.java:37:40:37:64 | path : String | DotRegexSpring.java:39:21:39:24 | path : String | -| DotRegexSpring.java:39:10:39:25 | decodePath(...) : String | DotRegexSpring.java:40:25:40:28 | path | -| DotRegexSpring.java:39:21:39:24 | path : String | DotRegexSpring.java:39:10:39:25 | decodePath(...) : String | -| DotRegexSpring.java:39:21:39:24 | path : String | DotRegexSpring.java:69:28:69:38 | path : String | -| DotRegexSpring.java:69:28:69:38 | path : String | DotRegexSpring.java:71:29:71:32 | path : String | -| DotRegexSpring.java:69:28:69:38 | path : String | DotRegexSpring.java:73:10:73:13 | path : String | -| DotRegexSpring.java:71:11:71:42 | decode(...) : String | DotRegexSpring.java:71:29:71:32 | path : String | -| DotRegexSpring.java:71:11:71:42 | decode(...) : String | DotRegexSpring.java:73:10:73:13 | path : String | -| DotRegexSpring.java:71:29:71:32 | path : String | DotRegexSpring.java:71:11:71:42 | decode(...) : String | +| DotRegexFilter.java:29:19:29:43 | getPathInfo(...) : String | DotRegexFilter.java:32:25:32:30 | source | provenance | | +| DotRegexServlet.java:19:19:19:39 | getPathInfo(...) : String | DotRegexServlet.java:22:25:22:30 | source | provenance | | +| DotRegexServlet.java:57:19:57:41 | getRequestURI(...) : String | DotRegexServlet.java:59:21:59:26 | source | provenance | | +| DotRegexServlet.java:75:19:75:39 | getPathInfo(...) : String | DotRegexServlet.java:77:56:77:61 | source | provenance | | +| DotRegexServlet.java:112:19:112:39 | getPathInfo(...) : String | DotRegexServlet.java:115:25:115:30 | source | provenance | | +| DotRegexSpring.java:20:26:20:50 | path : String | DotRegexSpring.java:22:21:22:24 | path : String | provenance | | +| DotRegexSpring.java:22:10:22:25 | decodePath(...) : String | DotRegexSpring.java:23:25:23:28 | path | provenance | | +| DotRegexSpring.java:22:21:22:24 | path : String | DotRegexSpring.java:22:10:22:25 | decodePath(...) : String | provenance | | +| DotRegexSpring.java:22:21:22:24 | path : String | DotRegexSpring.java:69:28:69:38 | path : String | provenance | | +| DotRegexSpring.java:37:40:37:64 | path : String | DotRegexSpring.java:39:21:39:24 | path : String | provenance | | +| DotRegexSpring.java:39:10:39:25 | decodePath(...) : String | DotRegexSpring.java:40:25:40:28 | path | provenance | | +| DotRegexSpring.java:39:21:39:24 | path : String | DotRegexSpring.java:39:10:39:25 | decodePath(...) : String | provenance | | +| DotRegexSpring.java:39:21:39:24 | path : String | DotRegexSpring.java:69:28:69:38 | path : String | provenance | | +| DotRegexSpring.java:69:28:69:38 | path : String | DotRegexSpring.java:71:29:71:32 | path : String | provenance | | +| DotRegexSpring.java:69:28:69:38 | path : String | DotRegexSpring.java:73:10:73:13 | path : String | provenance | | +| DotRegexSpring.java:71:11:71:42 | decode(...) : String | DotRegexSpring.java:71:29:71:32 | path : String | provenance | | +| DotRegexSpring.java:71:11:71:42 | decode(...) : String | DotRegexSpring.java:73:10:73:13 | path : String | provenance | | +| DotRegexSpring.java:71:29:71:32 | path : String | DotRegexSpring.java:71:11:71:42 | decode(...) : String | provenance | | nodes | DotRegexFilter.java:29:19:29:43 | getPathInfo(...) : String | semmle.label | getPathInfo(...) : String | | DotRegexFilter.java:32:25:32:30 | source | semmle.label | source | diff --git a/java/ql/test/experimental/query-tests/security/CWE-652/XQueryInjection.expected b/java/ql/test/experimental/query-tests/security/CWE-652/XQueryInjection.expected index 47dfb5f426e..60b0f3977ee 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-652/XQueryInjection.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-652/XQueryInjection.expected @@ -1,31 +1,31 @@ edges -| XQueryInjection.java:45:23:45:50 | getParameter(...) : String | XQueryInjection.java:50:60:50:64 | query : String | -| XQueryInjection.java:50:37:50:65 | prepareExpression(...) : XQPreparedExpression | XQueryInjection.java:51:35:51:38 | xqpe | -| XQueryInjection.java:50:60:50:64 | query : String | XQueryInjection.java:50:37:50:65 | prepareExpression(...) : XQPreparedExpression | -| XQueryInjection.java:59:23:59:50 | getParameter(...) : String | XQueryInjection.java:65:53:65:57 | query | -| XQueryInjection.java:73:32:73:59 | nameStr : String | XQueryInjection.java:78:60:78:64 | query : String | -| XQueryInjection.java:78:37:78:65 | prepareExpression(...) : XQPreparedExpression | XQueryInjection.java:79:35:79:38 | xqpe | -| XQueryInjection.java:78:60:78:64 | query : String | XQueryInjection.java:78:37:78:65 | prepareExpression(...) : XQPreparedExpression | -| XQueryInjection.java:86:33:86:60 | nameStr : String | XQueryInjection.java:92:53:92:57 | query | -| XQueryInjection.java:100:28:100:51 | getInputStream(...) : ServletInputStream | XQueryInjection.java:103:60:103:63 | name : ServletInputStream | -| XQueryInjection.java:103:37:103:64 | prepareExpression(...) : XQPreparedExpression | XQueryInjection.java:104:35:104:38 | xqpe | -| XQueryInjection.java:103:60:103:63 | name : ServletInputStream | XQueryInjection.java:103:37:103:64 | prepareExpression(...) : XQPreparedExpression | -| XQueryInjection.java:112:28:112:51 | getInputStream(...) : ServletInputStream | XQueryInjection.java:116:53:116:56 | name | -| XQueryInjection.java:124:28:124:51 | getInputStream(...) : ServletInputStream | XQueryInjection.java:125:70:125:73 | name : ServletInputStream | -| XQueryInjection.java:125:29:125:75 | new BufferedReader(...) : BufferedReader | XQueryInjection.java:128:60:128:61 | br : BufferedReader | -| XQueryInjection.java:125:48:125:74 | new InputStreamReader(...) : InputStreamReader | XQueryInjection.java:125:29:125:75 | new BufferedReader(...) : BufferedReader | -| XQueryInjection.java:125:70:125:73 | name : ServletInputStream | XQueryInjection.java:125:48:125:74 | new InputStreamReader(...) : InputStreamReader | -| XQueryInjection.java:128:37:128:62 | prepareExpression(...) : XQPreparedExpression | XQueryInjection.java:129:35:129:38 | xqpe | -| XQueryInjection.java:128:60:128:61 | br : BufferedReader | XQueryInjection.java:128:37:128:62 | prepareExpression(...) : XQPreparedExpression | -| XQueryInjection.java:137:28:137:51 | getInputStream(...) : ServletInputStream | XQueryInjection.java:138:70:138:73 | name : ServletInputStream | -| XQueryInjection.java:138:29:138:75 | new BufferedReader(...) : BufferedReader | XQueryInjection.java:142:53:142:54 | br | -| XQueryInjection.java:138:48:138:74 | new InputStreamReader(...) : InputStreamReader | XQueryInjection.java:138:29:138:75 | new BufferedReader(...) : BufferedReader | -| XQueryInjection.java:138:70:138:73 | name : ServletInputStream | XQueryInjection.java:138:48:138:74 | new InputStreamReader(...) : InputStreamReader | -| XQueryInjection.java:150:23:150:50 | getParameter(...) : String | XQueryInjection.java:155:29:155:32 | name | -| XQueryInjection.java:157:26:157:49 | getInputStream(...) : ServletInputStream | XQueryInjection.java:158:70:158:71 | is : ServletInputStream | -| XQueryInjection.java:158:29:158:73 | new BufferedReader(...) : BufferedReader | XQueryInjection.java:159:29:159:30 | br | -| XQueryInjection.java:158:48:158:72 | new InputStreamReader(...) : InputStreamReader | XQueryInjection.java:158:29:158:73 | new BufferedReader(...) : BufferedReader | -| XQueryInjection.java:158:70:158:71 | is : ServletInputStream | XQueryInjection.java:158:48:158:72 | new InputStreamReader(...) : InputStreamReader | +| XQueryInjection.java:45:23:45:50 | getParameter(...) : String | XQueryInjection.java:50:60:50:64 | query : String | provenance | | +| XQueryInjection.java:50:37:50:65 | prepareExpression(...) : XQPreparedExpression | XQueryInjection.java:51:35:51:38 | xqpe | provenance | | +| XQueryInjection.java:50:60:50:64 | query : String | XQueryInjection.java:50:37:50:65 | prepareExpression(...) : XQPreparedExpression | provenance | | +| XQueryInjection.java:59:23:59:50 | getParameter(...) : String | XQueryInjection.java:65:53:65:57 | query | provenance | | +| XQueryInjection.java:73:32:73:59 | nameStr : String | XQueryInjection.java:78:60:78:64 | query : String | provenance | | +| XQueryInjection.java:78:37:78:65 | prepareExpression(...) : XQPreparedExpression | XQueryInjection.java:79:35:79:38 | xqpe | provenance | | +| XQueryInjection.java:78:60:78:64 | query : String | XQueryInjection.java:78:37:78:65 | prepareExpression(...) : XQPreparedExpression | provenance | | +| XQueryInjection.java:86:33:86:60 | nameStr : String | XQueryInjection.java:92:53:92:57 | query | provenance | | +| XQueryInjection.java:100:28:100:51 | getInputStream(...) : ServletInputStream | XQueryInjection.java:103:60:103:63 | name : ServletInputStream | provenance | | +| XQueryInjection.java:103:37:103:64 | prepareExpression(...) : XQPreparedExpression | XQueryInjection.java:104:35:104:38 | xqpe | provenance | | +| XQueryInjection.java:103:60:103:63 | name : ServletInputStream | XQueryInjection.java:103:37:103:64 | prepareExpression(...) : XQPreparedExpression | provenance | | +| XQueryInjection.java:112:28:112:51 | getInputStream(...) : ServletInputStream | XQueryInjection.java:116:53:116:56 | name | provenance | | +| XQueryInjection.java:124:28:124:51 | getInputStream(...) : ServletInputStream | XQueryInjection.java:125:70:125:73 | name : ServletInputStream | provenance | | +| XQueryInjection.java:125:29:125:75 | new BufferedReader(...) : BufferedReader | XQueryInjection.java:128:60:128:61 | br : BufferedReader | provenance | | +| XQueryInjection.java:125:48:125:74 | new InputStreamReader(...) : InputStreamReader | XQueryInjection.java:125:29:125:75 | new BufferedReader(...) : BufferedReader | provenance | | +| XQueryInjection.java:125:70:125:73 | name : ServletInputStream | XQueryInjection.java:125:48:125:74 | new InputStreamReader(...) : InputStreamReader | provenance | | +| XQueryInjection.java:128:37:128:62 | prepareExpression(...) : XQPreparedExpression | XQueryInjection.java:129:35:129:38 | xqpe | provenance | | +| XQueryInjection.java:128:60:128:61 | br : BufferedReader | XQueryInjection.java:128:37:128:62 | prepareExpression(...) : XQPreparedExpression | provenance | | +| XQueryInjection.java:137:28:137:51 | getInputStream(...) : ServletInputStream | XQueryInjection.java:138:70:138:73 | name : ServletInputStream | provenance | | +| XQueryInjection.java:138:29:138:75 | new BufferedReader(...) : BufferedReader | XQueryInjection.java:142:53:142:54 | br | provenance | | +| XQueryInjection.java:138:48:138:74 | new InputStreamReader(...) : InputStreamReader | XQueryInjection.java:138:29:138:75 | new BufferedReader(...) : BufferedReader | provenance | | +| XQueryInjection.java:138:70:138:73 | name : ServletInputStream | XQueryInjection.java:138:48:138:74 | new InputStreamReader(...) : InputStreamReader | provenance | | +| XQueryInjection.java:150:23:150:50 | getParameter(...) : String | XQueryInjection.java:155:29:155:32 | name | provenance | | +| XQueryInjection.java:157:26:157:49 | getInputStream(...) : ServletInputStream | XQueryInjection.java:158:70:158:71 | is : ServletInputStream | provenance | | +| XQueryInjection.java:158:29:158:73 | new BufferedReader(...) : BufferedReader | XQueryInjection.java:159:29:159:30 | br | provenance | | +| XQueryInjection.java:158:48:158:72 | new InputStreamReader(...) : InputStreamReader | XQueryInjection.java:158:29:158:73 | new BufferedReader(...) : BufferedReader | provenance | | +| XQueryInjection.java:158:70:158:71 | is : ServletInputStream | XQueryInjection.java:158:48:158:72 | new InputStreamReader(...) : InputStreamReader | provenance | | nodes | XQueryInjection.java:45:23:45:50 | getParameter(...) : String | semmle.label | getParameter(...) : String | | XQueryInjection.java:50:37:50:65 | prepareExpression(...) : XQPreparedExpression | semmle.label | prepareExpression(...) : XQPreparedExpression | diff --git a/java/ql/test/experimental/query-tests/security/CWE-755/NFEAndroidDoS.expected b/java/ql/test/experimental/query-tests/security/CWE-755/NFEAndroidDoS.expected index 5f0e5b028f9..80df54d749a 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-755/NFEAndroidDoS.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-755/NFEAndroidDoS.expected @@ -1,13 +1,13 @@ edges -| NFEAndroidDoS.java:13:24:13:34 | getIntent(...) : Intent | NFEAndroidDoS.java:13:24:13:61 | getStringExtra(...) : String | -| NFEAndroidDoS.java:13:24:13:61 | getStringExtra(...) : String | NFEAndroidDoS.java:14:21:14:51 | parseDouble(...) | -| NFEAndroidDoS.java:22:21:22:31 | getIntent(...) : Intent | NFEAndroidDoS.java:22:21:22:55 | getStringExtra(...) : String | -| NFEAndroidDoS.java:22:21:22:55 | getStringExtra(...) : String | NFEAndroidDoS.java:23:15:23:40 | parseInt(...) | -| NFEAndroidDoS.java:25:22:25:32 | getIntent(...) : Intent | NFEAndroidDoS.java:25:22:25:57 | getStringExtra(...) : String | -| NFEAndroidDoS.java:25:22:25:57 | getStringExtra(...) : String | NFEAndroidDoS.java:26:16:26:42 | parseInt(...) | -| NFEAndroidDoS.java:43:24:43:34 | getIntent(...) : Intent | NFEAndroidDoS.java:43:24:43:61 | getStringExtra(...) : String | -| NFEAndroidDoS.java:43:24:43:61 | getStringExtra(...) : String | NFEAndroidDoS.java:44:21:44:43 | new Double(...) | -| NFEAndroidDoS.java:43:24:43:61 | getStringExtra(...) : String | NFEAndroidDoS.java:47:21:47:47 | valueOf(...) | +| NFEAndroidDoS.java:13:24:13:34 | getIntent(...) : Intent | NFEAndroidDoS.java:13:24:13:61 | getStringExtra(...) : String | provenance | | +| NFEAndroidDoS.java:13:24:13:61 | getStringExtra(...) : String | NFEAndroidDoS.java:14:21:14:51 | parseDouble(...) | provenance | | +| NFEAndroidDoS.java:22:21:22:31 | getIntent(...) : Intent | NFEAndroidDoS.java:22:21:22:55 | getStringExtra(...) : String | provenance | | +| NFEAndroidDoS.java:22:21:22:55 | getStringExtra(...) : String | NFEAndroidDoS.java:23:15:23:40 | parseInt(...) | provenance | | +| NFEAndroidDoS.java:25:22:25:32 | getIntent(...) : Intent | NFEAndroidDoS.java:25:22:25:57 | getStringExtra(...) : String | provenance | | +| NFEAndroidDoS.java:25:22:25:57 | getStringExtra(...) : String | NFEAndroidDoS.java:26:16:26:42 | parseInt(...) | provenance | | +| NFEAndroidDoS.java:43:24:43:34 | getIntent(...) : Intent | NFEAndroidDoS.java:43:24:43:61 | getStringExtra(...) : String | provenance | | +| NFEAndroidDoS.java:43:24:43:61 | getStringExtra(...) : String | NFEAndroidDoS.java:44:21:44:43 | new Double(...) | provenance | | +| NFEAndroidDoS.java:43:24:43:61 | getStringExtra(...) : String | NFEAndroidDoS.java:47:21:47:47 | valueOf(...) | provenance | | nodes | NFEAndroidDoS.java:13:24:13:34 | getIntent(...) : Intent | semmle.label | getIntent(...) : Intent | | NFEAndroidDoS.java:13:24:13:61 | getStringExtra(...) : String | semmle.label | getStringExtra(...) : String | diff --git a/java/ql/test/experimental/query-tests/security/CWE-759/HashWithoutSalt.expected b/java/ql/test/experimental/query-tests/security/CWE-759/HashWithoutSalt.expected index 8681b437222..9666029ebdc 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-759/HashWithoutSalt.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-759/HashWithoutSalt.expected @@ -1,10 +1,10 @@ edges -| HashWithoutSalt.java:10:36:10:43 | password : String | HashWithoutSalt.java:10:36:10:54 | getBytes(...) | -| HashWithoutSalt.java:25:13:25:20 | password : String | HashWithoutSalt.java:25:13:25:31 | getBytes(...) | -| HashWithoutSalt.java:93:22:93:29 | password : String | HashWithoutSalt.java:93:22:93:40 | getBytes(...) : byte[] | -| HashWithoutSalt.java:93:22:93:40 | getBytes(...) : byte[] | HashWithoutSalt.java:94:17:94:25 | passBytes | -| HashWithoutSalt.java:111:22:111:29 | password : String | HashWithoutSalt.java:111:22:111:40 | getBytes(...) : byte[] | -| HashWithoutSalt.java:111:22:111:40 | getBytes(...) : byte[] | HashWithoutSalt.java:112:18:112:26 | passBytes | +| HashWithoutSalt.java:10:36:10:43 | password : String | HashWithoutSalt.java:10:36:10:54 | getBytes(...) | provenance | | +| HashWithoutSalt.java:25:13:25:20 | password : String | HashWithoutSalt.java:25:13:25:31 | getBytes(...) | provenance | | +| HashWithoutSalt.java:93:22:93:29 | password : String | HashWithoutSalt.java:93:22:93:40 | getBytes(...) : byte[] | provenance | | +| HashWithoutSalt.java:93:22:93:40 | getBytes(...) : byte[] | HashWithoutSalt.java:94:17:94:25 | passBytes | provenance | | +| HashWithoutSalt.java:111:22:111:29 | password : String | HashWithoutSalt.java:111:22:111:40 | getBytes(...) : byte[] | provenance | | +| HashWithoutSalt.java:111:22:111:40 | getBytes(...) : byte[] | HashWithoutSalt.java:112:18:112:26 | passBytes | provenance | | nodes | HashWithoutSalt.java:10:36:10:43 | password : String | semmle.label | password : String | | HashWithoutSalt.java:10:36:10:54 | getBytes(...) | semmle.label | getBytes(...) | diff --git a/java/ql/test/library-tests/dataflow/call-sensitivity/flow.expected b/java/ql/test/library-tests/dataflow/call-sensitivity/flow.expected index 05552beb5d9..dc35379e71e 100644 --- a/java/ql/test/library-tests/dataflow/call-sensitivity/flow.expected +++ b/java/ql/test/library-tests/dataflow/call-sensitivity/flow.expected @@ -1,37 +1,37 @@ edges -| A2.java:15:15:15:28 | new Integer(...) : Number | A2.java:27:27:27:34 | o : Number | -| A2.java:27:27:27:34 | o : Number | A2.java:29:9:29:9 | o | -| A.java:6:28:6:35 | o : Number | A.java:8:11:8:11 | o : Number | -| A.java:6:28:6:35 | o : Number | A.java:8:11:8:11 | o : Number | -| A.java:14:29:14:36 | o : Number | A.java:16:9:16:9 | o | -| A.java:20:30:20:37 | o : Number | A.java:22:9:22:9 | o | -| A.java:26:31:26:38 | o : Number | A.java:28:9:28:9 | o | -| A.java:32:35:32:42 | o : Number | A.java:40:8:40:9 | o3 | -| A.java:43:36:43:43 | o : Number | A.java:51:8:51:9 | o3 | -| A.java:43:36:43:43 | o : Number | A.java:51:8:51:9 | o3 | -| A.java:43:36:43:43 | o : Number | A.java:51:8:51:9 | o3 | -| A.java:62:18:62:31 | new Integer(...) : Number | A.java:14:29:14:36 | o : Number | -| A.java:63:19:63:32 | new Integer(...) : Number | A.java:20:30:20:37 | o : Number | -| A.java:64:20:64:33 | new Integer(...) : Number | A.java:26:31:26:38 | o : Number | -| A.java:65:24:65:37 | new Integer(...) : Number | A.java:32:35:32:42 | o : Number | -| A.java:66:25:66:38 | new Integer(...) : Number | A.java:43:36:43:43 | o : Number | -| A.java:67:25:67:38 | new Integer(...) : Number | A.java:43:36:43:43 | o : Number | -| A.java:68:25:68:38 | new Integer(...) : Number | A.java:43:36:43:43 | o : Number | -| A.java:69:20:69:33 | new Integer(...) : Number | A.java:6:28:6:35 | o : Number | -| A.java:69:20:69:33 | new Integer(...) : Number | A.java:69:8:69:40 | flowThrough(...) | -| A.java:71:25:71:38 | new Integer(...) : Number | A.java:43:36:43:43 | o : Number | -| A.java:84:18:84:31 | new Integer(...) : Number | A.java:14:29:14:36 | o : Number | -| A.java:85:19:85:32 | new Integer(...) : Number | A.java:20:30:20:37 | o : Number | -| A.java:86:20:86:33 | new Integer(...) : Number | A.java:26:31:26:38 | o : Number | -| A.java:87:24:87:37 | new Integer(...) : Number | A.java:32:35:32:42 | o : Number | -| A.java:88:20:88:33 | new Integer(...) : Number | A.java:6:28:6:35 | o : Number | -| A.java:88:20:88:33 | new Integer(...) : Number | A.java:88:8:88:37 | flowThrough(...) | -| A.java:99:20:99:33 | new Integer(...) : Number | A.java:106:30:106:37 | o : Number | -| A.java:100:21:100:34 | new Integer(...) : Number | A.java:113:31:113:38 | o : Number | -| A.java:101:26:101:39 | new Integer(...) : Number | A.java:120:36:120:43 | o : Number | -| A.java:106:30:106:37 | o : Number | A.java:108:10:108:10 | o | -| A.java:113:31:113:38 | o : Number | A.java:115:10:115:10 | o | -| A.java:120:36:120:43 | o : Number | A.java:128:9:128:10 | o3 | +| A2.java:15:15:15:28 | new Integer(...) : Number | A2.java:27:27:27:34 | o : Number | provenance | | +| A2.java:27:27:27:34 | o : Number | A2.java:29:9:29:9 | o | provenance | | +| A.java:6:28:6:35 | o : Number | A.java:8:11:8:11 | o : Number | provenance | | +| A.java:6:28:6:35 | o : Number | A.java:8:11:8:11 | o : Number | provenance | | +| A.java:14:29:14:36 | o : Number | A.java:16:9:16:9 | o | provenance | | +| A.java:20:30:20:37 | o : Number | A.java:22:9:22:9 | o | provenance | | +| A.java:26:31:26:38 | o : Number | A.java:28:9:28:9 | o | provenance | | +| A.java:32:35:32:42 | o : Number | A.java:40:8:40:9 | o3 | provenance | | +| A.java:43:36:43:43 | o : Number | A.java:51:8:51:9 | o3 | provenance | | +| A.java:43:36:43:43 | o : Number | A.java:51:8:51:9 | o3 | provenance | | +| A.java:43:36:43:43 | o : Number | A.java:51:8:51:9 | o3 | provenance | | +| A.java:62:18:62:31 | new Integer(...) : Number | A.java:14:29:14:36 | o : Number | provenance | | +| A.java:63:19:63:32 | new Integer(...) : Number | A.java:20:30:20:37 | o : Number | provenance | | +| A.java:64:20:64:33 | new Integer(...) : Number | A.java:26:31:26:38 | o : Number | provenance | | +| A.java:65:24:65:37 | new Integer(...) : Number | A.java:32:35:32:42 | o : Number | provenance | | +| A.java:66:25:66:38 | new Integer(...) : Number | A.java:43:36:43:43 | o : Number | provenance | | +| A.java:67:25:67:38 | new Integer(...) : Number | A.java:43:36:43:43 | o : Number | provenance | | +| A.java:68:25:68:38 | new Integer(...) : Number | A.java:43:36:43:43 | o : Number | provenance | | +| A.java:69:20:69:33 | new Integer(...) : Number | A.java:6:28:6:35 | o : Number | provenance | | +| A.java:69:20:69:33 | new Integer(...) : Number | A.java:69:8:69:40 | flowThrough(...) | provenance | | +| A.java:71:25:71:38 | new Integer(...) : Number | A.java:43:36:43:43 | o : Number | provenance | | +| A.java:84:18:84:31 | new Integer(...) : Number | A.java:14:29:14:36 | o : Number | provenance | | +| A.java:85:19:85:32 | new Integer(...) : Number | A.java:20:30:20:37 | o : Number | provenance | | +| A.java:86:20:86:33 | new Integer(...) : Number | A.java:26:31:26:38 | o : Number | provenance | | +| A.java:87:24:87:37 | new Integer(...) : Number | A.java:32:35:32:42 | o : Number | provenance | | +| A.java:88:20:88:33 | new Integer(...) : Number | A.java:6:28:6:35 | o : Number | provenance | | +| A.java:88:20:88:33 | new Integer(...) : Number | A.java:88:8:88:37 | flowThrough(...) | provenance | | +| A.java:99:20:99:33 | new Integer(...) : Number | A.java:106:30:106:37 | o : Number | provenance | | +| A.java:100:21:100:34 | new Integer(...) : Number | A.java:113:31:113:38 | o : Number | provenance | | +| A.java:101:26:101:39 | new Integer(...) : Number | A.java:120:36:120:43 | o : Number | provenance | | +| A.java:106:30:106:37 | o : Number | A.java:108:10:108:10 | o | provenance | | +| A.java:113:31:113:38 | o : Number | A.java:115:10:115:10 | o | provenance | | +| A.java:120:36:120:43 | o : Number | A.java:128:9:128:10 | o3 | provenance | | nodes | A2.java:15:15:15:28 | new Integer(...) : Number | semmle.label | new Integer(...) : Number | | A2.java:27:27:27:34 | o : Number | semmle.label | o : Number | diff --git a/java/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest1.expected b/java/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest1.expected index 9dbde2c728d..9be77dca333 100644 --- a/java/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest1.expected +++ b/java/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest1.expected @@ -1,14 +1,14 @@ edges -| Test.java:10:31:10:41 | data : byte[] | Test.java:11:23:11:26 | data : byte[] | -| Test.java:11:23:11:26 | data : byte[] | Test.java:11:12:11:51 | new String(...) : String | -| Test.java:19:5:19:25 | getInputStream(...) : InputStream | Test.java:19:32:19:35 | data [post update] : byte[] | -| Test.java:19:32:19:35 | data [post update] : byte[] | Test.java:22:49:22:52 | data : byte[] | -| Test.java:19:32:19:35 | data [post update] : byte[] | Test.java:25:69:25:72 | data : byte[] | -| Test.java:22:49:22:52 | data : byte[] | Test.java:10:31:10:41 | data : byte[] | -| Test.java:22:49:22:52 | data : byte[] | Test.java:22:36:22:53 | byteToString(...) | -| Test.java:25:56:25:73 | byteToString(...) : String | Test.java:25:26:25:80 | ... + ... | -| Test.java:25:69:25:72 | data : byte[] | Test.java:10:31:10:41 | data : byte[] | -| Test.java:25:69:25:72 | data : byte[] | Test.java:25:56:25:73 | byteToString(...) : String | +| Test.java:10:31:10:41 | data : byte[] | Test.java:11:23:11:26 | data : byte[] | provenance | | +| Test.java:11:23:11:26 | data : byte[] | Test.java:11:12:11:51 | new String(...) : String | provenance | | +| Test.java:19:5:19:25 | getInputStream(...) : InputStream | Test.java:19:32:19:35 | data [post update] : byte[] | provenance | | +| Test.java:19:32:19:35 | data [post update] : byte[] | Test.java:22:49:22:52 | data : byte[] | provenance | | +| Test.java:19:32:19:35 | data [post update] : byte[] | Test.java:25:69:25:72 | data : byte[] | provenance | | +| Test.java:22:49:22:52 | data : byte[] | Test.java:10:31:10:41 | data : byte[] | provenance | | +| Test.java:22:49:22:52 | data : byte[] | Test.java:22:36:22:53 | byteToString(...) | provenance | | +| Test.java:25:56:25:73 | byteToString(...) : String | Test.java:25:26:25:80 | ... + ... | provenance | | +| Test.java:25:69:25:72 | data : byte[] | Test.java:10:31:10:41 | data : byte[] | provenance | | +| Test.java:25:69:25:72 | data : byte[] | Test.java:25:56:25:73 | byteToString(...) : String | provenance | | nodes | Test.java:10:31:10:41 | data : byte[] | semmle.label | data : byte[] | | Test.java:11:12:11:51 | new String(...) : String | semmle.label | new String(...) : String | diff --git a/java/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest2.expected b/java/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest2.expected index 69fad09766d..c3d7b2f7a5f 100644 --- a/java/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest2.expected +++ b/java/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest2.expected @@ -1,16 +1,16 @@ edges -| Test.java:10:31:10:41 | data : byte[] | Test.java:11:23:11:26 | data : byte[] | -| Test.java:11:23:11:26 | data : byte[] | Test.java:11:12:11:51 | new String(...) : String | -| Test.java:19:5:19:25 | getInputStream(...) : InputStream | Test.java:19:32:19:35 | data [post update] : byte[] | -| Test.java:19:32:19:35 | data [post update] : byte[] | Test.java:22:49:22:52 | data : byte[] | -| Test.java:19:32:19:35 | data [post update] : byte[] | Test.java:25:69:25:72 | data : byte[] | -| Test.java:22:49:22:52 | data : byte[] | Test.java:10:31:10:41 | data : byte[] | -| Test.java:22:49:22:52 | data : byte[] | Test.java:22:36:22:53 | byteToString(...) | -| Test.java:25:56:25:73 | byteToString(...) : String | Test.java:25:26:25:80 | ... + ... | -| Test.java:25:69:25:72 | data : byte[] | Test.java:10:31:10:41 | data : byte[] | -| Test.java:25:69:25:72 | data : byte[] | Test.java:25:56:25:73 | byteToString(...) : String | -| Test.java:30:21:30:61 | executeQuery(...) : String | Test.java:33:26:33:68 | ... + ... | -| Test.java:30:21:30:61 | executeQuery(...) : String | Test.java:36:36:36:41 | result | +| Test.java:10:31:10:41 | data : byte[] | Test.java:11:23:11:26 | data : byte[] | provenance | | +| Test.java:11:23:11:26 | data : byte[] | Test.java:11:12:11:51 | new String(...) : String | provenance | | +| Test.java:19:5:19:25 | getInputStream(...) : InputStream | Test.java:19:32:19:35 | data [post update] : byte[] | provenance | | +| Test.java:19:32:19:35 | data [post update] : byte[] | Test.java:22:49:22:52 | data : byte[] | provenance | | +| Test.java:19:32:19:35 | data [post update] : byte[] | Test.java:25:69:25:72 | data : byte[] | provenance | | +| Test.java:22:49:22:52 | data : byte[] | Test.java:10:31:10:41 | data : byte[] | provenance | | +| Test.java:22:49:22:52 | data : byte[] | Test.java:22:36:22:53 | byteToString(...) | provenance | | +| Test.java:25:56:25:73 | byteToString(...) : String | Test.java:25:26:25:80 | ... + ... | provenance | | +| Test.java:25:69:25:72 | data : byte[] | Test.java:10:31:10:41 | data : byte[] | provenance | | +| Test.java:25:69:25:72 | data : byte[] | Test.java:25:56:25:73 | byteToString(...) : String | provenance | | +| Test.java:30:21:30:61 | executeQuery(...) : String | Test.java:33:26:33:68 | ... + ... | provenance | | +| Test.java:30:21:30:61 | executeQuery(...) : String | Test.java:36:36:36:41 | result | provenance | | nodes | Test.java:10:31:10:41 | data : byte[] | semmle.label | data : byte[] | | Test.java:11:12:11:51 | new String(...) : String | semmle.label | new String(...) : String | diff --git a/java/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest3.expected b/java/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest3.expected index 35b2d7049a2..301b7bdc911 100644 --- a/java/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest3.expected +++ b/java/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest3.expected @@ -1,26 +1,26 @@ edges -| Test.java:10:31:10:41 | data : byte[] | Test.java:11:23:11:26 | data : byte[] | -| Test.java:11:23:11:26 | data : byte[] | Test.java:11:12:11:51 | new String(...) : String | -| Test.java:19:5:19:25 | getInputStream(...) : InputStream | Test.java:19:32:19:35 | data [post update] : byte[] | -| Test.java:19:32:19:35 | data [post update] : byte[] | Test.java:22:49:22:52 | data : byte[] | -| Test.java:19:32:19:35 | data [post update] : byte[] | Test.java:25:69:25:72 | data : byte[] | -| Test.java:22:49:22:52 | data : byte[] | Test.java:10:31:10:41 | data : byte[] | -| Test.java:22:49:22:52 | data : byte[] | Test.java:22:36:22:53 | byteToString(...) | -| Test.java:25:56:25:73 | byteToString(...) : String | Test.java:25:26:25:80 | ... + ... | -| Test.java:25:69:25:72 | data : byte[] | Test.java:10:31:10:41 | data : byte[] | -| Test.java:25:69:25:72 | data : byte[] | Test.java:25:56:25:73 | byteToString(...) : String | -| Test.java:30:21:30:61 | executeQuery(...) : String | Test.java:33:26:33:68 | ... + ... | -| Test.java:30:21:30:61 | executeQuery(...) : String | Test.java:36:36:36:41 | result | -| Test.java:41:21:41:49 | readEnv(...) : String | Test.java:44:26:44:68 | ... + ... | -| Test.java:41:21:41:49 | readEnv(...) : String | Test.java:47:36:47:41 | result | -| Test.java:64:5:64:13 | System.in : InputStream | Test.java:64:20:64:23 | data [post update] : byte[] | -| Test.java:64:20:64:23 | data [post update] : byte[] | Test.java:67:69:67:72 | data : byte[] | -| Test.java:64:20:64:23 | data [post update] : byte[] | Test.java:70:49:70:52 | data : byte[] | -| Test.java:67:56:67:73 | byteToString(...) : String | Test.java:67:26:67:80 | ... + ... | -| Test.java:67:69:67:72 | data : byte[] | Test.java:10:31:10:41 | data : byte[] | -| Test.java:67:69:67:72 | data : byte[] | Test.java:67:56:67:73 | byteToString(...) : String | -| Test.java:70:49:70:52 | data : byte[] | Test.java:10:31:10:41 | data : byte[] | -| Test.java:70:49:70:52 | data : byte[] | Test.java:70:36:70:53 | byteToString(...) | +| Test.java:10:31:10:41 | data : byte[] | Test.java:11:23:11:26 | data : byte[] | provenance | | +| Test.java:11:23:11:26 | data : byte[] | Test.java:11:12:11:51 | new String(...) : String | provenance | | +| Test.java:19:5:19:25 | getInputStream(...) : InputStream | Test.java:19:32:19:35 | data [post update] : byte[] | provenance | | +| Test.java:19:32:19:35 | data [post update] : byte[] | Test.java:22:49:22:52 | data : byte[] | provenance | | +| Test.java:19:32:19:35 | data [post update] : byte[] | Test.java:25:69:25:72 | data : byte[] | provenance | | +| Test.java:22:49:22:52 | data : byte[] | Test.java:10:31:10:41 | data : byte[] | provenance | | +| Test.java:22:49:22:52 | data : byte[] | Test.java:22:36:22:53 | byteToString(...) | provenance | | +| Test.java:25:56:25:73 | byteToString(...) : String | Test.java:25:26:25:80 | ... + ... | provenance | | +| Test.java:25:69:25:72 | data : byte[] | Test.java:10:31:10:41 | data : byte[] | provenance | | +| Test.java:25:69:25:72 | data : byte[] | Test.java:25:56:25:73 | byteToString(...) : String | provenance | | +| Test.java:30:21:30:61 | executeQuery(...) : String | Test.java:33:26:33:68 | ... + ... | provenance | | +| Test.java:30:21:30:61 | executeQuery(...) : String | Test.java:36:36:36:41 | result | provenance | | +| Test.java:41:21:41:49 | readEnv(...) : String | Test.java:44:26:44:68 | ... + ... | provenance | | +| Test.java:41:21:41:49 | readEnv(...) : String | Test.java:47:36:47:41 | result | provenance | | +| Test.java:64:5:64:13 | System.in : InputStream | Test.java:64:20:64:23 | data [post update] : byte[] | provenance | | +| Test.java:64:20:64:23 | data [post update] : byte[] | Test.java:67:69:67:72 | data : byte[] | provenance | | +| Test.java:64:20:64:23 | data [post update] : byte[] | Test.java:70:49:70:52 | data : byte[] | provenance | | +| Test.java:67:56:67:73 | byteToString(...) : String | Test.java:67:26:67:80 | ... + ... | provenance | | +| Test.java:67:69:67:72 | data : byte[] | Test.java:10:31:10:41 | data : byte[] | provenance | | +| Test.java:67:69:67:72 | data : byte[] | Test.java:67:56:67:73 | byteToString(...) : String | provenance | | +| Test.java:70:49:70:52 | data : byte[] | Test.java:10:31:10:41 | data : byte[] | provenance | | +| Test.java:70:49:70:52 | data : byte[] | Test.java:70:36:70:53 | byteToString(...) | provenance | | nodes | Test.java:10:31:10:41 | data : byte[] | semmle.label | data : byte[] | | Test.java:11:12:11:51 | new String(...) : String | semmle.label | new String(...) : String | diff --git a/java/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest4.expected b/java/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest4.expected index 44f01c1485e..0c536214b5b 100644 --- a/java/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest4.expected +++ b/java/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest4.expected @@ -1,28 +1,28 @@ edges -| Test.java:10:31:10:41 | data : byte[] | Test.java:11:23:11:26 | data : byte[] | -| Test.java:11:23:11:26 | data : byte[] | Test.java:11:12:11:51 | new String(...) : String | -| Test.java:19:5:19:25 | getInputStream(...) : InputStream | Test.java:19:32:19:35 | data [post update] : byte[] | -| Test.java:19:32:19:35 | data [post update] : byte[] | Test.java:22:49:22:52 | data : byte[] | -| Test.java:19:32:19:35 | data [post update] : byte[] | Test.java:25:69:25:72 | data : byte[] | -| Test.java:22:49:22:52 | data : byte[] | Test.java:10:31:10:41 | data : byte[] | -| Test.java:22:49:22:52 | data : byte[] | Test.java:22:36:22:53 | byteToString(...) | -| Test.java:25:56:25:73 | byteToString(...) : String | Test.java:25:26:25:80 | ... + ... | -| Test.java:25:69:25:72 | data : byte[] | Test.java:10:31:10:41 | data : byte[] | -| Test.java:25:69:25:72 | data : byte[] | Test.java:25:56:25:73 | byteToString(...) : String | -| Test.java:30:21:30:61 | executeQuery(...) : String | Test.java:33:26:33:68 | ... + ... | -| Test.java:30:21:30:61 | executeQuery(...) : String | Test.java:36:36:36:41 | result | -| Test.java:41:21:41:49 | readEnv(...) : String | Test.java:44:26:44:68 | ... + ... | -| Test.java:41:21:41:49 | readEnv(...) : String | Test.java:47:36:47:41 | result | -| Test.java:52:21:52:47 | getCustom(...) : String | Test.java:55:26:55:68 | ... + ... | -| Test.java:52:21:52:47 | getCustom(...) : String | Test.java:58:36:58:41 | result | -| Test.java:64:5:64:13 | System.in : InputStream | Test.java:64:20:64:23 | data [post update] : byte[] | -| Test.java:64:20:64:23 | data [post update] : byte[] | Test.java:67:69:67:72 | data : byte[] | -| Test.java:64:20:64:23 | data [post update] : byte[] | Test.java:70:49:70:52 | data : byte[] | -| Test.java:67:56:67:73 | byteToString(...) : String | Test.java:67:26:67:80 | ... + ... | -| Test.java:67:69:67:72 | data : byte[] | Test.java:10:31:10:41 | data : byte[] | -| Test.java:67:69:67:72 | data : byte[] | Test.java:67:56:67:73 | byteToString(...) : String | -| Test.java:70:49:70:52 | data : byte[] | Test.java:10:31:10:41 | data : byte[] | -| Test.java:70:49:70:52 | data : byte[] | Test.java:70:36:70:53 | byteToString(...) | +| Test.java:10:31:10:41 | data : byte[] | Test.java:11:23:11:26 | data : byte[] | provenance | | +| Test.java:11:23:11:26 | data : byte[] | Test.java:11:12:11:51 | new String(...) : String | provenance | | +| Test.java:19:5:19:25 | getInputStream(...) : InputStream | Test.java:19:32:19:35 | data [post update] : byte[] | provenance | | +| Test.java:19:32:19:35 | data [post update] : byte[] | Test.java:22:49:22:52 | data : byte[] | provenance | | +| Test.java:19:32:19:35 | data [post update] : byte[] | Test.java:25:69:25:72 | data : byte[] | provenance | | +| Test.java:22:49:22:52 | data : byte[] | Test.java:10:31:10:41 | data : byte[] | provenance | | +| Test.java:22:49:22:52 | data : byte[] | Test.java:22:36:22:53 | byteToString(...) | provenance | | +| Test.java:25:56:25:73 | byteToString(...) : String | Test.java:25:26:25:80 | ... + ... | provenance | | +| Test.java:25:69:25:72 | data : byte[] | Test.java:10:31:10:41 | data : byte[] | provenance | | +| Test.java:25:69:25:72 | data : byte[] | Test.java:25:56:25:73 | byteToString(...) : String | provenance | | +| Test.java:30:21:30:61 | executeQuery(...) : String | Test.java:33:26:33:68 | ... + ... | provenance | | +| Test.java:30:21:30:61 | executeQuery(...) : String | Test.java:36:36:36:41 | result | provenance | | +| Test.java:41:21:41:49 | readEnv(...) : String | Test.java:44:26:44:68 | ... + ... | provenance | | +| Test.java:41:21:41:49 | readEnv(...) : String | Test.java:47:36:47:41 | result | provenance | | +| Test.java:52:21:52:47 | getCustom(...) : String | Test.java:55:26:55:68 | ... + ... | provenance | | +| Test.java:52:21:52:47 | getCustom(...) : String | Test.java:58:36:58:41 | result | provenance | | +| Test.java:64:5:64:13 | System.in : InputStream | Test.java:64:20:64:23 | data [post update] : byte[] | provenance | | +| Test.java:64:20:64:23 | data [post update] : byte[] | Test.java:67:69:67:72 | data : byte[] | provenance | | +| Test.java:64:20:64:23 | data [post update] : byte[] | Test.java:70:49:70:52 | data : byte[] | provenance | | +| Test.java:67:56:67:73 | byteToString(...) : String | Test.java:67:26:67:80 | ... + ... | provenance | | +| Test.java:67:69:67:72 | data : byte[] | Test.java:10:31:10:41 | data : byte[] | provenance | | +| Test.java:67:69:67:72 | data : byte[] | Test.java:67:56:67:73 | byteToString(...) : String | provenance | | +| Test.java:70:49:70:52 | data : byte[] | Test.java:10:31:10:41 | data : byte[] | provenance | | +| Test.java:70:49:70:52 | data : byte[] | Test.java:70:36:70:53 | byteToString(...) | provenance | | nodes | Test.java:10:31:10:41 | data : byte[] | semmle.label | data : byte[] | | Test.java:11:12:11:51 | new String(...) : String | semmle.label | new String(...) : String | diff --git a/java/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest5.expected b/java/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest5.expected index d535ba38f98..7a0b1572ac5 100644 --- a/java/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest5.expected +++ b/java/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest5.expected @@ -1,24 +1,24 @@ edges -| Test.java:10:31:10:41 | data : byte[] | Test.java:11:23:11:26 | data : byte[] | -| Test.java:11:23:11:26 | data : byte[] | Test.java:11:12:11:51 | new String(...) : String | -| Test.java:19:5:19:25 | getInputStream(...) : InputStream | Test.java:19:32:19:35 | data [post update] : byte[] | -| Test.java:19:32:19:35 | data [post update] : byte[] | Test.java:22:49:22:52 | data : byte[] | -| Test.java:19:32:19:35 | data [post update] : byte[] | Test.java:25:69:25:72 | data : byte[] | -| Test.java:22:49:22:52 | data : byte[] | Test.java:10:31:10:41 | data : byte[] | -| Test.java:22:49:22:52 | data : byte[] | Test.java:22:36:22:53 | byteToString(...) | -| Test.java:25:56:25:73 | byteToString(...) : String | Test.java:25:26:25:80 | ... + ... | -| Test.java:25:69:25:72 | data : byte[] | Test.java:10:31:10:41 | data : byte[] | -| Test.java:25:69:25:72 | data : byte[] | Test.java:25:56:25:73 | byteToString(...) : String | -| Test.java:41:21:41:49 | readEnv(...) : String | Test.java:44:26:44:68 | ... + ... | -| Test.java:41:21:41:49 | readEnv(...) : String | Test.java:47:36:47:41 | result | -| Test.java:64:5:64:13 | System.in : InputStream | Test.java:64:20:64:23 | data [post update] : byte[] | -| Test.java:64:20:64:23 | data [post update] : byte[] | Test.java:67:69:67:72 | data : byte[] | -| Test.java:64:20:64:23 | data [post update] : byte[] | Test.java:70:49:70:52 | data : byte[] | -| Test.java:67:56:67:73 | byteToString(...) : String | Test.java:67:26:67:80 | ... + ... | -| Test.java:67:69:67:72 | data : byte[] | Test.java:10:31:10:41 | data : byte[] | -| Test.java:67:69:67:72 | data : byte[] | Test.java:67:56:67:73 | byteToString(...) : String | -| Test.java:70:49:70:52 | data : byte[] | Test.java:10:31:10:41 | data : byte[] | -| Test.java:70:49:70:52 | data : byte[] | Test.java:70:36:70:53 | byteToString(...) | +| Test.java:10:31:10:41 | data : byte[] | Test.java:11:23:11:26 | data : byte[] | provenance | | +| Test.java:11:23:11:26 | data : byte[] | Test.java:11:12:11:51 | new String(...) : String | provenance | | +| Test.java:19:5:19:25 | getInputStream(...) : InputStream | Test.java:19:32:19:35 | data [post update] : byte[] | provenance | | +| Test.java:19:32:19:35 | data [post update] : byte[] | Test.java:22:49:22:52 | data : byte[] | provenance | | +| Test.java:19:32:19:35 | data [post update] : byte[] | Test.java:25:69:25:72 | data : byte[] | provenance | | +| Test.java:22:49:22:52 | data : byte[] | Test.java:10:31:10:41 | data : byte[] | provenance | | +| Test.java:22:49:22:52 | data : byte[] | Test.java:22:36:22:53 | byteToString(...) | provenance | | +| Test.java:25:56:25:73 | byteToString(...) : String | Test.java:25:26:25:80 | ... + ... | provenance | | +| Test.java:25:69:25:72 | data : byte[] | Test.java:10:31:10:41 | data : byte[] | provenance | | +| Test.java:25:69:25:72 | data : byte[] | Test.java:25:56:25:73 | byteToString(...) : String | provenance | | +| Test.java:41:21:41:49 | readEnv(...) : String | Test.java:44:26:44:68 | ... + ... | provenance | | +| Test.java:41:21:41:49 | readEnv(...) : String | Test.java:47:36:47:41 | result | provenance | | +| Test.java:64:5:64:13 | System.in : InputStream | Test.java:64:20:64:23 | data [post update] : byte[] | provenance | | +| Test.java:64:20:64:23 | data [post update] : byte[] | Test.java:67:69:67:72 | data : byte[] | provenance | | +| Test.java:64:20:64:23 | data [post update] : byte[] | Test.java:70:49:70:52 | data : byte[] | provenance | | +| Test.java:67:56:67:73 | byteToString(...) : String | Test.java:67:26:67:80 | ... + ... | provenance | | +| Test.java:67:69:67:72 | data : byte[] | Test.java:10:31:10:41 | data : byte[] | provenance | | +| Test.java:67:69:67:72 | data : byte[] | Test.java:67:56:67:73 | byteToString(...) : String | provenance | | +| Test.java:70:49:70:52 | data : byte[] | Test.java:10:31:10:41 | data : byte[] | provenance | | +| Test.java:70:49:70:52 | data : byte[] | Test.java:70:36:70:53 | byteToString(...) | provenance | | nodes | Test.java:10:31:10:41 | data : byte[] | semmle.label | data : byte[] | | Test.java:11:12:11:51 | new String(...) : String | semmle.label | new String(...) : String | diff --git a/java/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest6.expected b/java/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest6.expected index 9b5109ab7e9..ba132f5b739 100644 --- a/java/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest6.expected +++ b/java/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest6.expected @@ -1,24 +1,24 @@ edges -| Test.java:10:31:10:41 | data : byte[] | Test.java:11:23:11:26 | data : byte[] | -| Test.java:11:23:11:26 | data : byte[] | Test.java:11:12:11:51 | new String(...) : String | -| Test.java:19:5:19:25 | getInputStream(...) : InputStream | Test.java:19:32:19:35 | data [post update] : byte[] | -| Test.java:19:32:19:35 | data [post update] : byte[] | Test.java:22:49:22:52 | data : byte[] | -| Test.java:19:32:19:35 | data [post update] : byte[] | Test.java:25:69:25:72 | data : byte[] | -| Test.java:22:49:22:52 | data : byte[] | Test.java:10:31:10:41 | data : byte[] | -| Test.java:22:49:22:52 | data : byte[] | Test.java:22:36:22:53 | byteToString(...) | -| Test.java:25:56:25:73 | byteToString(...) : String | Test.java:25:26:25:80 | ... + ... | -| Test.java:25:69:25:72 | data : byte[] | Test.java:10:31:10:41 | data : byte[] | -| Test.java:25:69:25:72 | data : byte[] | Test.java:25:56:25:73 | byteToString(...) : String | -| Test.java:30:21:30:61 | executeQuery(...) : String | Test.java:33:26:33:68 | ... + ... | -| Test.java:30:21:30:61 | executeQuery(...) : String | Test.java:36:36:36:41 | result | -| Test.java:64:5:64:13 | System.in : InputStream | Test.java:64:20:64:23 | data [post update] : byte[] | -| Test.java:64:20:64:23 | data [post update] : byte[] | Test.java:67:69:67:72 | data : byte[] | -| Test.java:64:20:64:23 | data [post update] : byte[] | Test.java:70:49:70:52 | data : byte[] | -| Test.java:67:56:67:73 | byteToString(...) : String | Test.java:67:26:67:80 | ... + ... | -| Test.java:67:69:67:72 | data : byte[] | Test.java:10:31:10:41 | data : byte[] | -| Test.java:67:69:67:72 | data : byte[] | Test.java:67:56:67:73 | byteToString(...) : String | -| Test.java:70:49:70:52 | data : byte[] | Test.java:10:31:10:41 | data : byte[] | -| Test.java:70:49:70:52 | data : byte[] | Test.java:70:36:70:53 | byteToString(...) | +| Test.java:10:31:10:41 | data : byte[] | Test.java:11:23:11:26 | data : byte[] | provenance | | +| Test.java:11:23:11:26 | data : byte[] | Test.java:11:12:11:51 | new String(...) : String | provenance | | +| Test.java:19:5:19:25 | getInputStream(...) : InputStream | Test.java:19:32:19:35 | data [post update] : byte[] | provenance | | +| Test.java:19:32:19:35 | data [post update] : byte[] | Test.java:22:49:22:52 | data : byte[] | provenance | | +| Test.java:19:32:19:35 | data [post update] : byte[] | Test.java:25:69:25:72 | data : byte[] | provenance | | +| Test.java:22:49:22:52 | data : byte[] | Test.java:10:31:10:41 | data : byte[] | provenance | | +| Test.java:22:49:22:52 | data : byte[] | Test.java:22:36:22:53 | byteToString(...) | provenance | | +| Test.java:25:56:25:73 | byteToString(...) : String | Test.java:25:26:25:80 | ... + ... | provenance | | +| Test.java:25:69:25:72 | data : byte[] | Test.java:10:31:10:41 | data : byte[] | provenance | | +| Test.java:25:69:25:72 | data : byte[] | Test.java:25:56:25:73 | byteToString(...) : String | provenance | | +| Test.java:30:21:30:61 | executeQuery(...) : String | Test.java:33:26:33:68 | ... + ... | provenance | | +| Test.java:30:21:30:61 | executeQuery(...) : String | Test.java:36:36:36:41 | result | provenance | | +| Test.java:64:5:64:13 | System.in : InputStream | Test.java:64:20:64:23 | data [post update] : byte[] | provenance | | +| Test.java:64:20:64:23 | data [post update] : byte[] | Test.java:67:69:67:72 | data : byte[] | provenance | | +| Test.java:64:20:64:23 | data [post update] : byte[] | Test.java:70:49:70:52 | data : byte[] | provenance | | +| Test.java:67:56:67:73 | byteToString(...) : String | Test.java:67:26:67:80 | ... + ... | provenance | | +| Test.java:67:69:67:72 | data : byte[] | Test.java:10:31:10:41 | data : byte[] | provenance | | +| Test.java:67:69:67:72 | data : byte[] | Test.java:67:56:67:73 | byteToString(...) : String | provenance | | +| Test.java:70:49:70:52 | data : byte[] | Test.java:10:31:10:41 | data : byte[] | provenance | | +| Test.java:70:49:70:52 | data : byte[] | Test.java:70:36:70:53 | byteToString(...) | provenance | | nodes | Test.java:10:31:10:41 | data : byte[] | semmle.label | data : byte[] | | Test.java:11:12:11:51 | new String(...) : String | semmle.label | new String(...) : String | diff --git a/java/ql/test/library-tests/frameworks/JaxWs/UrlRedirect.expected b/java/ql/test/library-tests/frameworks/JaxWs/UrlRedirect.expected index 1c0986ada31..57aadbcee42 100644 --- a/java/ql/test/library-tests/frameworks/JaxWs/UrlRedirect.expected +++ b/java/ql/test/library-tests/frameworks/JaxWs/UrlRedirect.expected @@ -1,8 +1,8 @@ edges -| UrlRedirectJakarta.java:10:32:10:61 | getParameter(...) : String | UrlRedirectJakarta.java:10:24:10:62 | new URI(...) | -| UrlRedirectJakarta.java:13:41:13:70 | getParameter(...) : String | UrlRedirectJakarta.java:13:33:13:71 | new URI(...) | -| UrlRedirectJax.java:10:32:10:61 | getParameter(...) : String | UrlRedirectJax.java:10:24:10:62 | new URI(...) | -| UrlRedirectJax.java:13:41:13:70 | getParameter(...) : String | UrlRedirectJax.java:13:33:13:71 | new URI(...) | +| UrlRedirectJakarta.java:10:32:10:61 | getParameter(...) : String | UrlRedirectJakarta.java:10:24:10:62 | new URI(...) | provenance | | +| UrlRedirectJakarta.java:13:41:13:70 | getParameter(...) : String | UrlRedirectJakarta.java:13:33:13:71 | new URI(...) | provenance | | +| UrlRedirectJax.java:10:32:10:61 | getParameter(...) : String | UrlRedirectJax.java:10:24:10:62 | new URI(...) | provenance | | +| UrlRedirectJax.java:13:41:13:70 | getParameter(...) : String | UrlRedirectJax.java:13:33:13:71 | new URI(...) | provenance | | nodes | UrlRedirectJakarta.java:10:24:10:62 | new URI(...) | semmle.label | new URI(...) | | UrlRedirectJakarta.java:10:32:10:61 | getParameter(...) : String | semmle.label | getParameter(...) : String | diff --git a/java/ql/test/query-tests/security/CWE-022/semmle/tests/ZipSlip.expected b/java/ql/test/query-tests/security/CWE-022/semmle/tests/ZipSlip.expected index 7c6a5bffc2e..07beb3e1b00 100644 --- a/java/ql/test/query-tests/security/CWE-022/semmle/tests/ZipSlip.expected +++ b/java/ql/test/query-tests/security/CWE-022/semmle/tests/ZipSlip.expected @@ -1,9 +1,9 @@ edges -| ZipTest.java:7:19:7:33 | getName(...) : String | ZipTest.java:8:31:8:34 | name : String | -| ZipTest.java:8:17:8:35 | new File(...) : File | ZipTest.java:9:48:9:51 | file | -| ZipTest.java:8:17:8:35 | new File(...) : File | ZipTest.java:10:49:10:52 | file | -| ZipTest.java:8:17:8:35 | new File(...) : File | ZipTest.java:11:36:11:39 | file | -| ZipTest.java:8:31:8:34 | name : String | ZipTest.java:8:17:8:35 | new File(...) : File | +| ZipTest.java:7:19:7:33 | getName(...) : String | ZipTest.java:8:31:8:34 | name : String | provenance | | +| ZipTest.java:8:17:8:35 | new File(...) : File | ZipTest.java:9:48:9:51 | file | provenance | | +| ZipTest.java:8:17:8:35 | new File(...) : File | ZipTest.java:10:49:10:52 | file | provenance | | +| ZipTest.java:8:17:8:35 | new File(...) : File | ZipTest.java:11:36:11:39 | file | provenance | | +| ZipTest.java:8:31:8:34 | name : String | ZipTest.java:8:17:8:35 | new File(...) : File | provenance | | nodes | ZipTest.java:7:19:7:33 | getName(...) : String | semmle.label | getName(...) : String | | ZipTest.java:8:17:8:35 | new File(...) : File | semmle.label | new File(...) : File | diff --git a/java/ql/test/query-tests/security/CWE-078/ExecTaintedLocal.expected b/java/ql/test/query-tests/security/CWE-078/ExecTaintedLocal.expected index fd2c8fb4d5c..791ee28469a 100644 --- a/java/ql/test/query-tests/security/CWE-078/ExecTaintedLocal.expected +++ b/java/ql/test/query-tests/security/CWE-078/ExecTaintedLocal.expected @@ -1,23 +1,23 @@ edges -| Test.java:6:35:6:44 | arg : String | Test.java:7:44:7:69 | ... + ... : String | -| Test.java:6:35:6:44 | arg : String | Test.java:10:61:10:73 | ... + ... : String | -| Test.java:6:35:6:44 | arg : String | Test.java:16:13:16:25 | ... + ... : String | -| Test.java:6:35:6:44 | arg : String | Test.java:22:15:22:27 | ... + ... : String | -| Test.java:7:25:7:70 | new ..[] { .. } : String[] [[]] : String | Test.java:7:25:7:70 | new ..[] { .. } | -| Test.java:7:44:7:69 | ... + ... : String | Test.java:7:25:7:70 | new ..[] { .. } : String[] [[]] : String | -| Test.java:10:29:10:74 | {...} : String[] [[]] : String | Test.java:10:29:10:74 | new String[] | -| Test.java:10:61:10:73 | ... + ... : String | Test.java:10:29:10:74 | {...} : String[] [[]] : String | -| Test.java:16:5:16:7 | cmd [post update] : ArrayList [] : String | Test.java:18:29:18:31 | cmd | -| Test.java:16:13:16:25 | ... + ... : String | Test.java:16:5:16:7 | cmd [post update] : ArrayList [] : String | -| Test.java:22:5:22:8 | cmd1 [post update] : String[] [[]] : String | Test.java:24:29:24:32 | cmd1 | -| Test.java:22:15:22:27 | ... + ... : String | Test.java:22:5:22:8 | cmd1 [post update] : String[] [[]] : String | -| Test.java:28:38:28:47 | arg : String | Test.java:29:44:29:64 | ... + ... : String | -| Test.java:29:25:29:65 | new ..[] { .. } : String[] [[]] : String | Test.java:29:25:29:65 | new ..[] { .. } | -| Test.java:29:44:29:64 | ... + ... : String | Test.java:29:25:29:65 | new ..[] { .. } : String[] [[]] : String | -| Test.java:57:27:57:39 | args : String[] | Test.java:60:20:60:22 | arg : String | -| Test.java:57:27:57:39 | args : String[] | Test.java:61:23:61:25 | arg : String | -| Test.java:60:20:60:22 | arg : String | Test.java:6:35:6:44 | arg : String | -| Test.java:61:23:61:25 | arg : String | Test.java:28:38:28:47 | arg : String | +| Test.java:6:35:6:44 | arg : String | Test.java:7:44:7:69 | ... + ... : String | provenance | | +| Test.java:6:35:6:44 | arg : String | Test.java:10:61:10:73 | ... + ... : String | provenance | | +| Test.java:6:35:6:44 | arg : String | Test.java:16:13:16:25 | ... + ... : String | provenance | | +| Test.java:6:35:6:44 | arg : String | Test.java:22:15:22:27 | ... + ... : String | provenance | | +| Test.java:7:25:7:70 | new ..[] { .. } : String[] [[]] : String | Test.java:7:25:7:70 | new ..[] { .. } | provenance | | +| Test.java:7:44:7:69 | ... + ... : String | Test.java:7:25:7:70 | new ..[] { .. } : String[] [[]] : String | provenance | | +| Test.java:10:29:10:74 | {...} : String[] [[]] : String | Test.java:10:29:10:74 | new String[] | provenance | | +| Test.java:10:61:10:73 | ... + ... : String | Test.java:10:29:10:74 | {...} : String[] [[]] : String | provenance | | +| Test.java:16:5:16:7 | cmd [post update] : ArrayList [] : String | Test.java:18:29:18:31 | cmd | provenance | | +| Test.java:16:13:16:25 | ... + ... : String | Test.java:16:5:16:7 | cmd [post update] : ArrayList [] : String | provenance | | +| Test.java:22:5:22:8 | cmd1 [post update] : String[] [[]] : String | Test.java:24:29:24:32 | cmd1 | provenance | | +| Test.java:22:15:22:27 | ... + ... : String | Test.java:22:5:22:8 | cmd1 [post update] : String[] [[]] : String | provenance | | +| Test.java:28:38:28:47 | arg : String | Test.java:29:44:29:64 | ... + ... : String | provenance | | +| Test.java:29:25:29:65 | new ..[] { .. } : String[] [[]] : String | Test.java:29:25:29:65 | new ..[] { .. } | provenance | | +| Test.java:29:44:29:64 | ... + ... : String | Test.java:29:25:29:65 | new ..[] { .. } : String[] [[]] : String | provenance | | +| Test.java:57:27:57:39 | args : String[] | Test.java:60:20:60:22 | arg : String | provenance | | +| Test.java:57:27:57:39 | args : String[] | Test.java:61:23:61:25 | arg : String | provenance | | +| Test.java:60:20:60:22 | arg : String | Test.java:6:35:6:44 | arg : String | provenance | | +| Test.java:61:23:61:25 | arg : String | Test.java:28:38:28:47 | arg : String | provenance | | nodes | Test.java:6:35:6:44 | arg : String | semmle.label | arg : String | | Test.java:7:25:7:70 | new ..[] { .. } | semmle.label | new ..[] { .. } | diff --git a/java/ql/test/query-tests/security/CWE-089/semmle/examples/SqlTaintedLocal.expected b/java/ql/test/query-tests/security/CWE-089/semmle/examples/SqlTaintedLocal.expected index 45577278a7e..75c75b528ad 100644 --- a/java/ql/test/query-tests/security/CWE-089/semmle/examples/SqlTaintedLocal.expected +++ b/java/ql/test/query-tests/security/CWE-089/semmle/examples/SqlTaintedLocal.expected @@ -1,25 +1,25 @@ edges -| Mongo.java:10:29:10:41 | args : String[] | Mongo.java:17:56:17:66 | stringQuery : String | -| Mongo.java:10:29:10:41 | args : String[] | Mongo.java:21:49:21:52 | json | -| Mongo.java:17:56:17:66 | stringQuery : String | Mongo.java:17:45:17:67 | parse(...) | -| Test.java:29:30:29:42 | args : String[] | Test.java:36:47:36:52 | query1 | -| Test.java:29:30:29:42 | args : String[] | Test.java:42:57:42:62 | query2 | -| Test.java:29:30:29:42 | args : String[] | Test.java:50:62:50:67 | query3 | -| Test.java:29:30:29:42 | args : String[] | Test.java:58:19:58:26 | category : String | -| Test.java:29:30:29:42 | args : String[] | Test.java:70:40:70:44 | query | -| Test.java:29:30:29:42 | args : String[] | Test.java:78:46:78:50 | query | -| Test.java:58:4:58:10 | querySb [post update] : StringBuilder | Test.java:60:29:60:35 | querySb : StringBuilder | -| Test.java:58:19:58:26 | category : String | Test.java:58:4:58:10 | querySb [post update] : StringBuilder | -| Test.java:60:29:60:35 | querySb : StringBuilder | Test.java:60:29:60:46 | toString(...) : String | -| Test.java:60:29:60:46 | toString(...) : String | Test.java:62:47:62:61 | querySbToString | -| Test.java:183:33:183:45 | args : String[] | Test.java:209:47:209:68 | queryWithUserTableName | -| Test.java:213:34:213:46 | args : String[] | Test.java:221:81:221:111 | ... + ... | -| Test.java:227:26:227:38 | args : String[] | Test.java:228:11:228:14 | args : String[] | -| Test.java:227:26:227:38 | args : String[] | Test.java:232:14:232:17 | args : String[] | -| Test.java:227:26:227:38 | args : String[] | Test.java:233:15:233:18 | args : String[] | -| Test.java:228:11:228:14 | args : String[] | Test.java:29:30:29:42 | args : String[] | -| Test.java:232:14:232:17 | args : String[] | Test.java:183:33:183:45 | args : String[] | -| Test.java:233:15:233:18 | args : String[] | Test.java:213:34:213:46 | args : String[] | +| Mongo.java:10:29:10:41 | args : String[] | Mongo.java:17:56:17:66 | stringQuery : String | provenance | | +| Mongo.java:10:29:10:41 | args : String[] | Mongo.java:21:49:21:52 | json | provenance | | +| Mongo.java:17:56:17:66 | stringQuery : String | Mongo.java:17:45:17:67 | parse(...) | provenance | | +| Test.java:29:30:29:42 | args : String[] | Test.java:36:47:36:52 | query1 | provenance | | +| Test.java:29:30:29:42 | args : String[] | Test.java:42:57:42:62 | query2 | provenance | | +| Test.java:29:30:29:42 | args : String[] | Test.java:50:62:50:67 | query3 | provenance | | +| Test.java:29:30:29:42 | args : String[] | Test.java:58:19:58:26 | category : String | provenance | | +| Test.java:29:30:29:42 | args : String[] | Test.java:70:40:70:44 | query | provenance | | +| Test.java:29:30:29:42 | args : String[] | Test.java:78:46:78:50 | query | provenance | | +| Test.java:58:4:58:10 | querySb [post update] : StringBuilder | Test.java:60:29:60:35 | querySb : StringBuilder | provenance | | +| Test.java:58:19:58:26 | category : String | Test.java:58:4:58:10 | querySb [post update] : StringBuilder | provenance | | +| Test.java:60:29:60:35 | querySb : StringBuilder | Test.java:60:29:60:46 | toString(...) : String | provenance | | +| Test.java:60:29:60:46 | toString(...) : String | Test.java:62:47:62:61 | querySbToString | provenance | | +| Test.java:183:33:183:45 | args : String[] | Test.java:209:47:209:68 | queryWithUserTableName | provenance | | +| Test.java:213:34:213:46 | args : String[] | Test.java:221:81:221:111 | ... + ... | provenance | | +| Test.java:227:26:227:38 | args : String[] | Test.java:228:11:228:14 | args : String[] | provenance | | +| Test.java:227:26:227:38 | args : String[] | Test.java:232:14:232:17 | args : String[] | provenance | | +| Test.java:227:26:227:38 | args : String[] | Test.java:233:15:233:18 | args : String[] | provenance | | +| Test.java:228:11:228:14 | args : String[] | Test.java:29:30:29:42 | args : String[] | provenance | | +| Test.java:232:14:232:17 | args : String[] | Test.java:183:33:183:45 | args : String[] | provenance | | +| Test.java:233:15:233:18 | args : String[] | Test.java:213:34:213:46 | args : String[] | provenance | | nodes | Mongo.java:10:29:10:41 | args : String[] | semmle.label | args : String[] | | Mongo.java:17:45:17:67 | parse(...) | semmle.label | parse(...) | diff --git a/java/ql/test/query-tests/security/CWE-090/LdapInjection.expected b/java/ql/test/query-tests/security/CWE-090/LdapInjection.expected index 961ad3ed6ef..69c97ca8487 100644 --- a/java/ql/test/query-tests/security/CWE-090/LdapInjection.expected +++ b/java/ql/test/query-tests/security/CWE-090/LdapInjection.expected @@ -1,143 +1,143 @@ edges -| LdapInjection.java:45:28:45:52 | jBad : String | LdapInjection.java:47:38:47:57 | ... + ... | -| LdapInjection.java:45:55:45:81 | jBadDN : String | LdapInjection.java:47:16:47:35 | ... + ... | -| LdapInjection.java:51:28:51:52 | jBad : String | LdapInjection.java:53:56:53:75 | ... + ... | -| LdapInjection.java:51:55:51:85 | jBadDNName : String | LdapInjection.java:53:29:53:52 | ... + ... : String | -| LdapInjection.java:53:29:53:52 | ... + ... : String | LdapInjection.java:53:16:53:53 | new LdapName(...) | -| LdapInjection.java:57:28:57:52 | jBad : String | LdapInjection.java:59:63:59:82 | ... + ... | -| LdapInjection.java:63:28:63:59 | jBadInitial : String | LdapInjection.java:65:29:65:55 | ... + ... | -| LdapInjection.java:69:28:69:52 | jBad : String | LdapInjection.java:71:84:71:103 | ... + ... | -| LdapInjection.java:69:55:69:88 | jBadDNNameAdd : String | LdapInjection.java:71:53:71:79 | ... + ... : String | -| LdapInjection.java:71:40:71:80 | new LdapName(...) : LdapName | LdapInjection.java:71:16:71:81 | addAll(...) | -| LdapInjection.java:71:53:71:79 | ... + ... : String | LdapInjection.java:71:40:71:80 | new LdapName(...) : LdapName | -| LdapInjection.java:75:28:75:52 | jBad : String | LdapInjection.java:79:47:79:66 | ... + ... | -| LdapInjection.java:75:55:75:89 | jBadDNNameAdd2 : String | LdapInjection.java:78:30:78:57 | ... + ... : String | -| LdapInjection.java:78:5:78:8 | name : LdapName | LdapInjection.java:79:40:79:43 | name : LdapName | -| LdapInjection.java:78:17:78:58 | new LdapName(...) : LdapName | LdapInjection.java:78:17:78:68 | getRdns(...) : List | -| LdapInjection.java:78:17:78:68 | getRdns(...) : List | LdapInjection.java:78:5:78:8 | name : LdapName | -| LdapInjection.java:78:30:78:57 | ... + ... : String | LdapInjection.java:78:17:78:58 | new LdapName(...) : LdapName | -| LdapInjection.java:79:40:79:43 | name : LdapName | LdapInjection.java:79:16:79:44 | addAll(...) | -| LdapInjection.java:83:28:83:52 | jBad : String | LdapInjection.java:85:75:85:94 | ... + ... | -| LdapInjection.java:83:55:83:93 | jBadDNNameToString : String | LdapInjection.java:85:29:85:60 | ... + ... : String | -| LdapInjection.java:85:16:85:61 | new LdapName(...) : LdapName | LdapInjection.java:85:16:85:72 | toString(...) | -| LdapInjection.java:85:29:85:60 | ... + ... : String | LdapInjection.java:85:16:85:61 | new LdapName(...) : LdapName | -| LdapInjection.java:89:28:89:52 | jBad : String | LdapInjection.java:91:76:91:95 | ... + ... | -| LdapInjection.java:89:55:89:90 | jBadDNNameClone : String | LdapInjection.java:91:36:91:64 | ... + ... : String | -| LdapInjection.java:91:23:91:65 | new LdapName(...) : LdapName | LdapInjection.java:91:23:91:73 | clone(...) : Object | -| LdapInjection.java:91:23:91:73 | clone(...) : Object | LdapInjection.java:91:16:91:73 | (...)... | -| LdapInjection.java:91:36:91:64 | ... + ... : String | LdapInjection.java:91:23:91:65 | new LdapName(...) : LdapName | -| LdapInjection.java:106:31:106:55 | uBad : String | LdapInjection.java:108:67:108:86 | ... + ... | -| LdapInjection.java:106:58:106:84 | uBadDN : String | LdapInjection.java:108:20:108:39 | ... + ... | -| LdapInjection.java:112:31:112:67 | uBadFilterCreate : String | LdapInjection.java:113:72:113:87 | uBadFilterCreate : String | -| LdapInjection.java:113:72:113:87 | uBadFilterCreate : String | LdapInjection.java:113:58:113:88 | create(...) | -| LdapInjection.java:117:31:117:70 | uBadROSearchRequest : String | LdapInjection.java:120:9:120:43 | ... + ... : String | -| LdapInjection.java:117:73:117:103 | uBadROSRDN : String | LdapInjection.java:119:55:119:78 | ... + ... : String | -| LdapInjection.java:119:31:120:44 | new SearchRequest(...) : SearchRequest | LdapInjection.java:121:14:121:14 | s | -| LdapInjection.java:119:55:119:78 | ... + ... : String | LdapInjection.java:119:31:120:44 | new SearchRequest(...) : SearchRequest | -| LdapInjection.java:120:9:120:43 | ... + ... : String | LdapInjection.java:119:31:120:44 | new SearchRequest(...) : SearchRequest | -| LdapInjection.java:125:31:125:68 | uBadSearchRequest : String | LdapInjection.java:128:9:128:41 | ... + ... : String | -| LdapInjection.java:125:71:125:99 | uBadSRDN : String | LdapInjection.java:127:47:127:68 | ... + ... : String | -| LdapInjection.java:127:23:128:42 | new SearchRequest(...) : SearchRequest | LdapInjection.java:129:14:129:14 | s | -| LdapInjection.java:127:47:127:68 | ... + ... : String | LdapInjection.java:127:23:128:42 | new SearchRequest(...) : SearchRequest | -| LdapInjection.java:128:9:128:41 | ... + ... : String | LdapInjection.java:127:23:128:42 | new SearchRequest(...) : SearchRequest | -| LdapInjection.java:133:31:133:55 | uBad : String | LdapInjection.java:135:69:135:88 | ... + ... | -| LdapInjection.java:133:58:133:87 | uBadDNSFR : String | LdapInjection.java:135:22:135:44 | ... + ... | -| LdapInjection.java:139:31:139:75 | uBadROSearchRequestAsync : String | LdapInjection.java:142:9:142:48 | ... + ... : String | -| LdapInjection.java:139:78:139:113 | uBadROSRDNAsync : String | LdapInjection.java:141:55:141:83 | ... + ... : String | -| LdapInjection.java:141:31:142:49 | new SearchRequest(...) : SearchRequest | LdapInjection.java:143:19:143:19 | s | -| LdapInjection.java:141:55:141:83 | ... + ... : String | LdapInjection.java:141:31:142:49 | new SearchRequest(...) : SearchRequest | -| LdapInjection.java:142:9:142:48 | ... + ... : String | LdapInjection.java:141:31:142:49 | new SearchRequest(...) : SearchRequest | -| LdapInjection.java:147:31:147:73 | uBadSearchRequestAsync : String | LdapInjection.java:150:9:150:46 | ... + ... : String | -| LdapInjection.java:147:76:147:109 | uBadSRDNAsync : String | LdapInjection.java:149:47:149:73 | ... + ... : String | -| LdapInjection.java:149:23:150:47 | new SearchRequest(...) : SearchRequest | LdapInjection.java:151:19:151:19 | s | -| LdapInjection.java:149:47:149:73 | ... + ... : String | LdapInjection.java:149:23:150:47 | new SearchRequest(...) : SearchRequest | -| LdapInjection.java:150:9:150:46 | ... + ... : String | LdapInjection.java:149:23:150:47 | new SearchRequest(...) : SearchRequest | -| LdapInjection.java:155:31:155:70 | uBadFilterCreateNOT : String | LdapInjection.java:156:95:156:113 | uBadFilterCreateNOT : String | -| LdapInjection.java:156:81:156:114 | create(...) : Filter | LdapInjection.java:156:58:156:115 | createNOTFilter(...) | -| LdapInjection.java:156:95:156:113 | uBadFilterCreateNOT : String | LdapInjection.java:156:81:156:114 | create(...) : Filter | -| LdapInjection.java:160:31:160:75 | uBadFilterCreateToString : String | LdapInjection.java:161:72:161:95 | uBadFilterCreateToString : String | -| LdapInjection.java:161:58:161:96 | create(...) : Filter | LdapInjection.java:161:58:161:107 | toString(...) | -| LdapInjection.java:161:72:161:95 | uBadFilterCreateToString : String | LdapInjection.java:161:58:161:96 | create(...) : Filter | -| LdapInjection.java:165:32:165:82 | uBadFilterCreateToStringBuffer : String | LdapInjection.java:167:19:167:48 | uBadFilterCreateToStringBuffer : String | -| LdapInjection.java:167:5:167:49 | create(...) : Filter | LdapInjection.java:167:70:167:70 | b : StringBuilder | -| LdapInjection.java:167:19:167:48 | uBadFilterCreateToStringBuffer : String | LdapInjection.java:167:5:167:49 | create(...) : Filter | -| LdapInjection.java:167:70:167:70 | b : StringBuilder | LdapInjection.java:168:58:168:58 | b : StringBuilder | -| LdapInjection.java:168:58:168:58 | b : StringBuilder | LdapInjection.java:168:58:168:69 | toString(...) | -| LdapInjection.java:172:32:172:78 | uBadSearchRequestDuplicate : String | LdapInjection.java:175:9:175:50 | ... + ... : String | -| LdapInjection.java:174:23:175:51 | new SearchRequest(...) : SearchRequest | LdapInjection.java:176:14:176:14 | s : SearchRequest | -| LdapInjection.java:175:9:175:50 | ... + ... : String | LdapInjection.java:174:23:175:51 | new SearchRequest(...) : SearchRequest | -| LdapInjection.java:176:14:176:14 | s : SearchRequest | LdapInjection.java:176:14:176:26 | duplicate(...) | -| LdapInjection.java:180:32:180:80 | uBadROSearchRequestDuplicate : String | LdapInjection.java:183:9:183:52 | ... + ... : String | -| LdapInjection.java:182:31:183:53 | new SearchRequest(...) : SearchRequest | LdapInjection.java:184:14:184:14 | s : SearchRequest | -| LdapInjection.java:183:9:183:52 | ... + ... : String | LdapInjection.java:182:31:183:53 | new SearchRequest(...) : SearchRequest | -| LdapInjection.java:184:14:184:14 | s : SearchRequest | LdapInjection.java:184:14:184:26 | duplicate(...) | -| LdapInjection.java:188:32:188:74 | uBadSearchRequestSetDN : String | LdapInjection.java:191:17:191:38 | uBadSearchRequestSetDN : String | -| LdapInjection.java:191:5:191:5 | s : SearchRequest | LdapInjection.java:192:14:192:14 | s | -| LdapInjection.java:191:17:191:38 | uBadSearchRequestSetDN : String | LdapInjection.java:191:5:191:5 | s : SearchRequest | -| LdapInjection.java:196:32:196:78 | uBadSearchRequestSetFilter : String | LdapInjection.java:199:17:199:42 | uBadSearchRequestSetFilter : String | -| LdapInjection.java:199:5:199:5 | s : SearchRequest | LdapInjection.java:200:14:200:14 | s | -| LdapInjection.java:199:17:199:42 | uBadSearchRequestSetFilter : String | LdapInjection.java:199:5:199:5 | s : SearchRequest | -| LdapInjection.java:229:30:229:54 | sBad : String | LdapInjection.java:230:36:230:55 | ... + ... | -| LdapInjection.java:229:57:229:83 | sBadDN : String | LdapInjection.java:230:14:230:33 | ... + ... | -| LdapInjection.java:234:30:234:54 | sBad : String | LdapInjection.java:235:88:235:107 | ... + ... | -| LdapInjection.java:234:57:234:92 | sBadDNLNBuilder : String | LdapInjection.java:235:48:235:76 | ... + ... : String | -| LdapInjection.java:235:20:235:77 | newInstance(...) : LdapNameBuilder | LdapInjection.java:235:20:235:85 | build(...) | -| LdapInjection.java:235:48:235:76 | ... + ... : String | LdapInjection.java:235:20:235:77 | newInstance(...) : LdapNameBuilder | -| LdapInjection.java:239:30:239:54 | sBad : String | LdapInjection.java:240:100:240:119 | ... + ... | -| LdapInjection.java:239:57:239:95 | sBadDNLNBuilderAdd : String | LdapInjection.java:240:57:240:88 | ... + ... : String | -| LdapInjection.java:240:23:240:89 | add(...) : LdapNameBuilder | LdapInjection.java:240:23:240:97 | build(...) | -| LdapInjection.java:240:57:240:88 | ... + ... : String | LdapInjection.java:240:23:240:89 | add(...) : LdapNameBuilder | -| LdapInjection.java:244:30:244:63 | sBadLdapQuery : String | LdapInjection.java:245:47:245:75 | ... + ... : String | -| LdapInjection.java:245:47:245:75 | ... + ... : String | LdapInjection.java:245:15:245:76 | filter(...) | -| LdapInjection.java:249:30:249:60 | sBadFilter : String | LdapInjection.java:250:86:250:111 | ... + ... : String | -| LdapInjection.java:249:63:249:98 | sBadDNLdapUtils : String | LdapInjection.java:250:34:250:62 | ... + ... : String | -| LdapInjection.java:250:34:250:62 | ... + ... : String | LdapInjection.java:250:12:250:63 | newLdapName(...) | -| LdapInjection.java:250:86:250:111 | ... + ... : String | LdapInjection.java:250:66:250:112 | new HardcodedFilter(...) | -| LdapInjection.java:254:30:254:63 | sBadLdapQuery : String | LdapInjection.java:255:56:255:84 | ... + ... : String | -| LdapInjection.java:255:56:255:84 | ... + ... : String | LdapInjection.java:255:24:255:85 | filter(...) | -| LdapInjection.java:259:30:259:64 | sBadLdapQuery2 : String | LdapInjection.java:260:51:260:80 | ... + ... : String | -| LdapInjection.java:260:19:260:81 | filter(...) : LdapQuery | LdapInjection.java:261:24:261:24 | q | -| LdapInjection.java:260:51:260:80 | ... + ... : String | LdapInjection.java:260:19:260:81 | filter(...) : LdapQuery | -| LdapInjection.java:265:30:265:73 | sBadLdapQueryWithFilter : String | LdapInjection.java:266:76:266:114 | ... + ... : String | -| LdapInjection.java:266:56:266:115 | new HardcodedFilter(...) : HardcodedFilter | LdapInjection.java:266:24:266:116 | filter(...) | -| LdapInjection.java:266:76:266:114 | ... + ... : String | LdapInjection.java:266:56:266:115 | new HardcodedFilter(...) : HardcodedFilter | -| LdapInjection.java:270:30:270:74 | sBadLdapQueryWithFilter2 : String | LdapInjection.java:271:68:271:107 | ... + ... : String | -| LdapInjection.java:271:48:271:108 | new HardcodedFilter(...) : HardcodedFilter | LdapInjection.java:272:56:272:56 | f : HardcodedFilter | -| LdapInjection.java:271:68:271:107 | ... + ... : String | LdapInjection.java:271:48:271:108 | new HardcodedFilter(...) : HardcodedFilter | -| LdapInjection.java:272:56:272:56 | f : HardcodedFilter | LdapInjection.java:272:24:272:57 | filter(...) | -| LdapInjection.java:276:31:276:68 | sBadLdapQueryBase : String | LdapInjection.java:277:42:277:58 | sBadLdapQueryBase : String | -| LdapInjection.java:277:12:277:59 | base(...) : LdapQueryBuilder | LdapInjection.java:277:12:277:66 | base(...) | -| LdapInjection.java:277:42:277:58 | sBadLdapQueryBase : String | LdapInjection.java:277:12:277:59 | base(...) : LdapQueryBuilder | -| LdapInjection.java:281:31:281:71 | sBadLdapQueryComplex : String | LdapInjection.java:282:54:282:73 | sBadLdapQueryComplex : String | -| LdapInjection.java:282:24:282:74 | base(...) : LdapQueryBuilder | LdapInjection.java:282:24:282:87 | where(...) : ConditionCriteria | -| LdapInjection.java:282:24:282:87 | where(...) : ConditionCriteria | LdapInjection.java:282:24:282:98 | is(...) | -| LdapInjection.java:282:54:282:73 | sBadLdapQueryComplex : String | LdapInjection.java:282:24:282:74 | base(...) : LdapQueryBuilder | -| LdapInjection.java:286:31:286:69 | sBadFilterToString : String | LdapInjection.java:287:38:287:71 | ... + ... : String | -| LdapInjection.java:287:18:287:72 | new HardcodedFilter(...) : HardcodedFilter | LdapInjection.java:287:18:287:83 | toString(...) | -| LdapInjection.java:287:38:287:71 | ... + ... : String | LdapInjection.java:287:18:287:72 | new HardcodedFilter(...) : HardcodedFilter | -| LdapInjection.java:291:31:291:67 | sBadFilterEncode : String | LdapInjection.java:293:25:293:56 | ... + ... : String | -| LdapInjection.java:293:5:293:57 | new HardcodedFilter(...) : HardcodedFilter | LdapInjection.java:293:66:293:66 | s : StringBuffer | -| LdapInjection.java:293:25:293:56 | ... + ... : String | LdapInjection.java:293:5:293:57 | new HardcodedFilter(...) : HardcodedFilter | -| LdapInjection.java:293:66:293:66 | s : StringBuffer | LdapInjection.java:294:18:294:18 | s : StringBuffer | -| LdapInjection.java:294:18:294:18 | s : StringBuffer | LdapInjection.java:294:18:294:29 | toString(...) | -| LdapInjection.java:314:30:314:54 | aBad : String | LdapInjection.java:316:36:316:55 | ... + ... | -| LdapInjection.java:314:57:314:83 | aBadDN : String | LdapInjection.java:316:14:316:33 | ... + ... | -| LdapInjection.java:320:30:320:54 | aBad : String | LdapInjection.java:322:65:322:84 | ... + ... | -| LdapInjection.java:320:57:320:94 | aBadDNObjToString : String | LdapInjection.java:322:21:322:51 | ... + ... : String | -| LdapInjection.java:322:14:322:52 | new Dn(...) : Dn | LdapInjection.java:322:14:322:62 | getName(...) | -| LdapInjection.java:322:21:322:51 | ... + ... : String | LdapInjection.java:322:14:322:52 | new Dn(...) : Dn | -| LdapInjection.java:326:30:326:67 | aBadSearchRequest : String | LdapInjection.java:329:17:329:49 | ... + ... : String | -| LdapInjection.java:329:5:329:5 | s : SearchRequestImpl | LdapInjection.java:330:14:330:14 | s | -| LdapInjection.java:329:17:329:49 | ... + ... : String | LdapInjection.java:329:5:329:5 | s : SearchRequestImpl | -| LdapInjection.java:334:74:334:103 | aBadDNObj : String | LdapInjection.java:337:22:337:44 | ... + ... : String | -| LdapInjection.java:337:5:337:5 | s : SearchRequestImpl | LdapInjection.java:338:14:338:14 | s | -| LdapInjection.java:337:15:337:45 | new Dn(...) : Dn | LdapInjection.java:337:5:337:5 | s : SearchRequestImpl | -| LdapInjection.java:337:22:337:44 | ... + ... : String | LdapInjection.java:337:15:337:45 | new Dn(...) : Dn | -| LdapInjection.java:342:30:342:72 | aBadDNSearchRequestGet : String | LdapInjection.java:345:22:345:57 | ... + ... : String | -| LdapInjection.java:345:5:345:5 | s : SearchRequestImpl | LdapInjection.java:346:14:346:14 | s : SearchRequestImpl | -| LdapInjection.java:345:15:345:58 | new Dn(...) : Dn | LdapInjection.java:345:5:345:5 | s : SearchRequestImpl | -| LdapInjection.java:345:22:345:57 | ... + ... : String | LdapInjection.java:345:15:345:58 | new Dn(...) : Dn | -| LdapInjection.java:346:14:346:14 | s : SearchRequestImpl | LdapInjection.java:346:14:346:24 | getBase(...) | +| LdapInjection.java:45:28:45:52 | jBad : String | LdapInjection.java:47:38:47:57 | ... + ... | provenance | | +| LdapInjection.java:45:55:45:81 | jBadDN : String | LdapInjection.java:47:16:47:35 | ... + ... | provenance | | +| LdapInjection.java:51:28:51:52 | jBad : String | LdapInjection.java:53:56:53:75 | ... + ... | provenance | | +| LdapInjection.java:51:55:51:85 | jBadDNName : String | LdapInjection.java:53:29:53:52 | ... + ... : String | provenance | | +| LdapInjection.java:53:29:53:52 | ... + ... : String | LdapInjection.java:53:16:53:53 | new LdapName(...) | provenance | | +| LdapInjection.java:57:28:57:52 | jBad : String | LdapInjection.java:59:63:59:82 | ... + ... | provenance | | +| LdapInjection.java:63:28:63:59 | jBadInitial : String | LdapInjection.java:65:29:65:55 | ... + ... | provenance | | +| LdapInjection.java:69:28:69:52 | jBad : String | LdapInjection.java:71:84:71:103 | ... + ... | provenance | | +| LdapInjection.java:69:55:69:88 | jBadDNNameAdd : String | LdapInjection.java:71:53:71:79 | ... + ... : String | provenance | | +| LdapInjection.java:71:40:71:80 | new LdapName(...) : LdapName | LdapInjection.java:71:16:71:81 | addAll(...) | provenance | | +| LdapInjection.java:71:53:71:79 | ... + ... : String | LdapInjection.java:71:40:71:80 | new LdapName(...) : LdapName | provenance | | +| LdapInjection.java:75:28:75:52 | jBad : String | LdapInjection.java:79:47:79:66 | ... + ... | provenance | | +| LdapInjection.java:75:55:75:89 | jBadDNNameAdd2 : String | LdapInjection.java:78:30:78:57 | ... + ... : String | provenance | | +| LdapInjection.java:78:5:78:8 | name : LdapName | LdapInjection.java:79:40:79:43 | name : LdapName | provenance | | +| LdapInjection.java:78:17:78:58 | new LdapName(...) : LdapName | LdapInjection.java:78:17:78:68 | getRdns(...) : List | provenance | | +| LdapInjection.java:78:17:78:68 | getRdns(...) : List | LdapInjection.java:78:5:78:8 | name : LdapName | provenance | | +| LdapInjection.java:78:30:78:57 | ... + ... : String | LdapInjection.java:78:17:78:58 | new LdapName(...) : LdapName | provenance | | +| LdapInjection.java:79:40:79:43 | name : LdapName | LdapInjection.java:79:16:79:44 | addAll(...) | provenance | | +| LdapInjection.java:83:28:83:52 | jBad : String | LdapInjection.java:85:75:85:94 | ... + ... | provenance | | +| LdapInjection.java:83:55:83:93 | jBadDNNameToString : String | LdapInjection.java:85:29:85:60 | ... + ... : String | provenance | | +| LdapInjection.java:85:16:85:61 | new LdapName(...) : LdapName | LdapInjection.java:85:16:85:72 | toString(...) | provenance | | +| LdapInjection.java:85:29:85:60 | ... + ... : String | LdapInjection.java:85:16:85:61 | new LdapName(...) : LdapName | provenance | | +| LdapInjection.java:89:28:89:52 | jBad : String | LdapInjection.java:91:76:91:95 | ... + ... | provenance | | +| LdapInjection.java:89:55:89:90 | jBadDNNameClone : String | LdapInjection.java:91:36:91:64 | ... + ... : String | provenance | | +| LdapInjection.java:91:23:91:65 | new LdapName(...) : LdapName | LdapInjection.java:91:23:91:73 | clone(...) : Object | provenance | | +| LdapInjection.java:91:23:91:73 | clone(...) : Object | LdapInjection.java:91:16:91:73 | (...)... | provenance | | +| LdapInjection.java:91:36:91:64 | ... + ... : String | LdapInjection.java:91:23:91:65 | new LdapName(...) : LdapName | provenance | | +| LdapInjection.java:106:31:106:55 | uBad : String | LdapInjection.java:108:67:108:86 | ... + ... | provenance | | +| LdapInjection.java:106:58:106:84 | uBadDN : String | LdapInjection.java:108:20:108:39 | ... + ... | provenance | | +| LdapInjection.java:112:31:112:67 | uBadFilterCreate : String | LdapInjection.java:113:72:113:87 | uBadFilterCreate : String | provenance | | +| LdapInjection.java:113:72:113:87 | uBadFilterCreate : String | LdapInjection.java:113:58:113:88 | create(...) | provenance | | +| LdapInjection.java:117:31:117:70 | uBadROSearchRequest : String | LdapInjection.java:120:9:120:43 | ... + ... : String | provenance | | +| LdapInjection.java:117:73:117:103 | uBadROSRDN : String | LdapInjection.java:119:55:119:78 | ... + ... : String | provenance | | +| LdapInjection.java:119:31:120:44 | new SearchRequest(...) : SearchRequest | LdapInjection.java:121:14:121:14 | s | provenance | | +| LdapInjection.java:119:55:119:78 | ... + ... : String | LdapInjection.java:119:31:120:44 | new SearchRequest(...) : SearchRequest | provenance | | +| LdapInjection.java:120:9:120:43 | ... + ... : String | LdapInjection.java:119:31:120:44 | new SearchRequest(...) : SearchRequest | provenance | | +| LdapInjection.java:125:31:125:68 | uBadSearchRequest : String | LdapInjection.java:128:9:128:41 | ... + ... : String | provenance | | +| LdapInjection.java:125:71:125:99 | uBadSRDN : String | LdapInjection.java:127:47:127:68 | ... + ... : String | provenance | | +| LdapInjection.java:127:23:128:42 | new SearchRequest(...) : SearchRequest | LdapInjection.java:129:14:129:14 | s | provenance | | +| LdapInjection.java:127:47:127:68 | ... + ... : String | LdapInjection.java:127:23:128:42 | new SearchRequest(...) : SearchRequest | provenance | | +| LdapInjection.java:128:9:128:41 | ... + ... : String | LdapInjection.java:127:23:128:42 | new SearchRequest(...) : SearchRequest | provenance | | +| LdapInjection.java:133:31:133:55 | uBad : String | LdapInjection.java:135:69:135:88 | ... + ... | provenance | | +| LdapInjection.java:133:58:133:87 | uBadDNSFR : String | LdapInjection.java:135:22:135:44 | ... + ... | provenance | | +| LdapInjection.java:139:31:139:75 | uBadROSearchRequestAsync : String | LdapInjection.java:142:9:142:48 | ... + ... : String | provenance | | +| LdapInjection.java:139:78:139:113 | uBadROSRDNAsync : String | LdapInjection.java:141:55:141:83 | ... + ... : String | provenance | | +| LdapInjection.java:141:31:142:49 | new SearchRequest(...) : SearchRequest | LdapInjection.java:143:19:143:19 | s | provenance | | +| LdapInjection.java:141:55:141:83 | ... + ... : String | LdapInjection.java:141:31:142:49 | new SearchRequest(...) : SearchRequest | provenance | | +| LdapInjection.java:142:9:142:48 | ... + ... : String | LdapInjection.java:141:31:142:49 | new SearchRequest(...) : SearchRequest | provenance | | +| LdapInjection.java:147:31:147:73 | uBadSearchRequestAsync : String | LdapInjection.java:150:9:150:46 | ... + ... : String | provenance | | +| LdapInjection.java:147:76:147:109 | uBadSRDNAsync : String | LdapInjection.java:149:47:149:73 | ... + ... : String | provenance | | +| LdapInjection.java:149:23:150:47 | new SearchRequest(...) : SearchRequest | LdapInjection.java:151:19:151:19 | s | provenance | | +| LdapInjection.java:149:47:149:73 | ... + ... : String | LdapInjection.java:149:23:150:47 | new SearchRequest(...) : SearchRequest | provenance | | +| LdapInjection.java:150:9:150:46 | ... + ... : String | LdapInjection.java:149:23:150:47 | new SearchRequest(...) : SearchRequest | provenance | | +| LdapInjection.java:155:31:155:70 | uBadFilterCreateNOT : String | LdapInjection.java:156:95:156:113 | uBadFilterCreateNOT : String | provenance | | +| LdapInjection.java:156:81:156:114 | create(...) : Filter | LdapInjection.java:156:58:156:115 | createNOTFilter(...) | provenance | | +| LdapInjection.java:156:95:156:113 | uBadFilterCreateNOT : String | LdapInjection.java:156:81:156:114 | create(...) : Filter | provenance | | +| LdapInjection.java:160:31:160:75 | uBadFilterCreateToString : String | LdapInjection.java:161:72:161:95 | uBadFilterCreateToString : String | provenance | | +| LdapInjection.java:161:58:161:96 | create(...) : Filter | LdapInjection.java:161:58:161:107 | toString(...) | provenance | | +| LdapInjection.java:161:72:161:95 | uBadFilterCreateToString : String | LdapInjection.java:161:58:161:96 | create(...) : Filter | provenance | | +| LdapInjection.java:165:32:165:82 | uBadFilterCreateToStringBuffer : String | LdapInjection.java:167:19:167:48 | uBadFilterCreateToStringBuffer : String | provenance | | +| LdapInjection.java:167:5:167:49 | create(...) : Filter | LdapInjection.java:167:70:167:70 | b : StringBuilder | provenance | | +| LdapInjection.java:167:19:167:48 | uBadFilterCreateToStringBuffer : String | LdapInjection.java:167:5:167:49 | create(...) : Filter | provenance | | +| LdapInjection.java:167:70:167:70 | b : StringBuilder | LdapInjection.java:168:58:168:58 | b : StringBuilder | provenance | | +| LdapInjection.java:168:58:168:58 | b : StringBuilder | LdapInjection.java:168:58:168:69 | toString(...) | provenance | | +| LdapInjection.java:172:32:172:78 | uBadSearchRequestDuplicate : String | LdapInjection.java:175:9:175:50 | ... + ... : String | provenance | | +| LdapInjection.java:174:23:175:51 | new SearchRequest(...) : SearchRequest | LdapInjection.java:176:14:176:14 | s : SearchRequest | provenance | | +| LdapInjection.java:175:9:175:50 | ... + ... : String | LdapInjection.java:174:23:175:51 | new SearchRequest(...) : SearchRequest | provenance | | +| LdapInjection.java:176:14:176:14 | s : SearchRequest | LdapInjection.java:176:14:176:26 | duplicate(...) | provenance | | +| LdapInjection.java:180:32:180:80 | uBadROSearchRequestDuplicate : String | LdapInjection.java:183:9:183:52 | ... + ... : String | provenance | | +| LdapInjection.java:182:31:183:53 | new SearchRequest(...) : SearchRequest | LdapInjection.java:184:14:184:14 | s : SearchRequest | provenance | | +| LdapInjection.java:183:9:183:52 | ... + ... : String | LdapInjection.java:182:31:183:53 | new SearchRequest(...) : SearchRequest | provenance | | +| LdapInjection.java:184:14:184:14 | s : SearchRequest | LdapInjection.java:184:14:184:26 | duplicate(...) | provenance | | +| LdapInjection.java:188:32:188:74 | uBadSearchRequestSetDN : String | LdapInjection.java:191:17:191:38 | uBadSearchRequestSetDN : String | provenance | | +| LdapInjection.java:191:5:191:5 | s : SearchRequest | LdapInjection.java:192:14:192:14 | s | provenance | | +| LdapInjection.java:191:17:191:38 | uBadSearchRequestSetDN : String | LdapInjection.java:191:5:191:5 | s : SearchRequest | provenance | | +| LdapInjection.java:196:32:196:78 | uBadSearchRequestSetFilter : String | LdapInjection.java:199:17:199:42 | uBadSearchRequestSetFilter : String | provenance | | +| LdapInjection.java:199:5:199:5 | s : SearchRequest | LdapInjection.java:200:14:200:14 | s | provenance | | +| LdapInjection.java:199:17:199:42 | uBadSearchRequestSetFilter : String | LdapInjection.java:199:5:199:5 | s : SearchRequest | provenance | | +| LdapInjection.java:229:30:229:54 | sBad : String | LdapInjection.java:230:36:230:55 | ... + ... | provenance | | +| LdapInjection.java:229:57:229:83 | sBadDN : String | LdapInjection.java:230:14:230:33 | ... + ... | provenance | | +| LdapInjection.java:234:30:234:54 | sBad : String | LdapInjection.java:235:88:235:107 | ... + ... | provenance | | +| LdapInjection.java:234:57:234:92 | sBadDNLNBuilder : String | LdapInjection.java:235:48:235:76 | ... + ... : String | provenance | | +| LdapInjection.java:235:20:235:77 | newInstance(...) : LdapNameBuilder | LdapInjection.java:235:20:235:85 | build(...) | provenance | | +| LdapInjection.java:235:48:235:76 | ... + ... : String | LdapInjection.java:235:20:235:77 | newInstance(...) : LdapNameBuilder | provenance | | +| LdapInjection.java:239:30:239:54 | sBad : String | LdapInjection.java:240:100:240:119 | ... + ... | provenance | | +| LdapInjection.java:239:57:239:95 | sBadDNLNBuilderAdd : String | LdapInjection.java:240:57:240:88 | ... + ... : String | provenance | | +| LdapInjection.java:240:23:240:89 | add(...) : LdapNameBuilder | LdapInjection.java:240:23:240:97 | build(...) | provenance | | +| LdapInjection.java:240:57:240:88 | ... + ... : String | LdapInjection.java:240:23:240:89 | add(...) : LdapNameBuilder | provenance | | +| LdapInjection.java:244:30:244:63 | sBadLdapQuery : String | LdapInjection.java:245:47:245:75 | ... + ... : String | provenance | | +| LdapInjection.java:245:47:245:75 | ... + ... : String | LdapInjection.java:245:15:245:76 | filter(...) | provenance | | +| LdapInjection.java:249:30:249:60 | sBadFilter : String | LdapInjection.java:250:86:250:111 | ... + ... : String | provenance | | +| LdapInjection.java:249:63:249:98 | sBadDNLdapUtils : String | LdapInjection.java:250:34:250:62 | ... + ... : String | provenance | | +| LdapInjection.java:250:34:250:62 | ... + ... : String | LdapInjection.java:250:12:250:63 | newLdapName(...) | provenance | | +| LdapInjection.java:250:86:250:111 | ... + ... : String | LdapInjection.java:250:66:250:112 | new HardcodedFilter(...) | provenance | | +| LdapInjection.java:254:30:254:63 | sBadLdapQuery : String | LdapInjection.java:255:56:255:84 | ... + ... : String | provenance | | +| LdapInjection.java:255:56:255:84 | ... + ... : String | LdapInjection.java:255:24:255:85 | filter(...) | provenance | | +| LdapInjection.java:259:30:259:64 | sBadLdapQuery2 : String | LdapInjection.java:260:51:260:80 | ... + ... : String | provenance | | +| LdapInjection.java:260:19:260:81 | filter(...) : LdapQuery | LdapInjection.java:261:24:261:24 | q | provenance | | +| LdapInjection.java:260:51:260:80 | ... + ... : String | LdapInjection.java:260:19:260:81 | filter(...) : LdapQuery | provenance | | +| LdapInjection.java:265:30:265:73 | sBadLdapQueryWithFilter : String | LdapInjection.java:266:76:266:114 | ... + ... : String | provenance | | +| LdapInjection.java:266:56:266:115 | new HardcodedFilter(...) : HardcodedFilter | LdapInjection.java:266:24:266:116 | filter(...) | provenance | | +| LdapInjection.java:266:76:266:114 | ... + ... : String | LdapInjection.java:266:56:266:115 | new HardcodedFilter(...) : HardcodedFilter | provenance | | +| LdapInjection.java:270:30:270:74 | sBadLdapQueryWithFilter2 : String | LdapInjection.java:271:68:271:107 | ... + ... : String | provenance | | +| LdapInjection.java:271:48:271:108 | new HardcodedFilter(...) : HardcodedFilter | LdapInjection.java:272:56:272:56 | f : HardcodedFilter | provenance | | +| LdapInjection.java:271:68:271:107 | ... + ... : String | LdapInjection.java:271:48:271:108 | new HardcodedFilter(...) : HardcodedFilter | provenance | | +| LdapInjection.java:272:56:272:56 | f : HardcodedFilter | LdapInjection.java:272:24:272:57 | filter(...) | provenance | | +| LdapInjection.java:276:31:276:68 | sBadLdapQueryBase : String | LdapInjection.java:277:42:277:58 | sBadLdapQueryBase : String | provenance | | +| LdapInjection.java:277:12:277:59 | base(...) : LdapQueryBuilder | LdapInjection.java:277:12:277:66 | base(...) | provenance | | +| LdapInjection.java:277:42:277:58 | sBadLdapQueryBase : String | LdapInjection.java:277:12:277:59 | base(...) : LdapQueryBuilder | provenance | | +| LdapInjection.java:281:31:281:71 | sBadLdapQueryComplex : String | LdapInjection.java:282:54:282:73 | sBadLdapQueryComplex : String | provenance | | +| LdapInjection.java:282:24:282:74 | base(...) : LdapQueryBuilder | LdapInjection.java:282:24:282:87 | where(...) : ConditionCriteria | provenance | | +| LdapInjection.java:282:24:282:87 | where(...) : ConditionCriteria | LdapInjection.java:282:24:282:98 | is(...) | provenance | | +| LdapInjection.java:282:54:282:73 | sBadLdapQueryComplex : String | LdapInjection.java:282:24:282:74 | base(...) : LdapQueryBuilder | provenance | | +| LdapInjection.java:286:31:286:69 | sBadFilterToString : String | LdapInjection.java:287:38:287:71 | ... + ... : String | provenance | | +| LdapInjection.java:287:18:287:72 | new HardcodedFilter(...) : HardcodedFilter | LdapInjection.java:287:18:287:83 | toString(...) | provenance | | +| LdapInjection.java:287:38:287:71 | ... + ... : String | LdapInjection.java:287:18:287:72 | new HardcodedFilter(...) : HardcodedFilter | provenance | | +| LdapInjection.java:291:31:291:67 | sBadFilterEncode : String | LdapInjection.java:293:25:293:56 | ... + ... : String | provenance | | +| LdapInjection.java:293:5:293:57 | new HardcodedFilter(...) : HardcodedFilter | LdapInjection.java:293:66:293:66 | s : StringBuffer | provenance | | +| LdapInjection.java:293:25:293:56 | ... + ... : String | LdapInjection.java:293:5:293:57 | new HardcodedFilter(...) : HardcodedFilter | provenance | | +| LdapInjection.java:293:66:293:66 | s : StringBuffer | LdapInjection.java:294:18:294:18 | s : StringBuffer | provenance | | +| LdapInjection.java:294:18:294:18 | s : StringBuffer | LdapInjection.java:294:18:294:29 | toString(...) | provenance | | +| LdapInjection.java:314:30:314:54 | aBad : String | LdapInjection.java:316:36:316:55 | ... + ... | provenance | | +| LdapInjection.java:314:57:314:83 | aBadDN : String | LdapInjection.java:316:14:316:33 | ... + ... | provenance | | +| LdapInjection.java:320:30:320:54 | aBad : String | LdapInjection.java:322:65:322:84 | ... + ... | provenance | | +| LdapInjection.java:320:57:320:94 | aBadDNObjToString : String | LdapInjection.java:322:21:322:51 | ... + ... : String | provenance | | +| LdapInjection.java:322:14:322:52 | new Dn(...) : Dn | LdapInjection.java:322:14:322:62 | getName(...) | provenance | | +| LdapInjection.java:322:21:322:51 | ... + ... : String | LdapInjection.java:322:14:322:52 | new Dn(...) : Dn | provenance | | +| LdapInjection.java:326:30:326:67 | aBadSearchRequest : String | LdapInjection.java:329:17:329:49 | ... + ... : String | provenance | | +| LdapInjection.java:329:5:329:5 | s : SearchRequestImpl | LdapInjection.java:330:14:330:14 | s | provenance | | +| LdapInjection.java:329:17:329:49 | ... + ... : String | LdapInjection.java:329:5:329:5 | s : SearchRequestImpl | provenance | | +| LdapInjection.java:334:74:334:103 | aBadDNObj : String | LdapInjection.java:337:22:337:44 | ... + ... : String | provenance | | +| LdapInjection.java:337:5:337:5 | s : SearchRequestImpl | LdapInjection.java:338:14:338:14 | s | provenance | | +| LdapInjection.java:337:15:337:45 | new Dn(...) : Dn | LdapInjection.java:337:5:337:5 | s : SearchRequestImpl | provenance | | +| LdapInjection.java:337:22:337:44 | ... + ... : String | LdapInjection.java:337:15:337:45 | new Dn(...) : Dn | provenance | | +| LdapInjection.java:342:30:342:72 | aBadDNSearchRequestGet : String | LdapInjection.java:345:22:345:57 | ... + ... : String | provenance | | +| LdapInjection.java:345:5:345:5 | s : SearchRequestImpl | LdapInjection.java:346:14:346:14 | s : SearchRequestImpl | provenance | | +| LdapInjection.java:345:15:345:58 | new Dn(...) : Dn | LdapInjection.java:345:5:345:5 | s : SearchRequestImpl | provenance | | +| LdapInjection.java:345:22:345:57 | ... + ... : String | LdapInjection.java:345:15:345:58 | new Dn(...) : Dn | provenance | | +| LdapInjection.java:346:14:346:14 | s : SearchRequestImpl | LdapInjection.java:346:14:346:24 | getBase(...) | provenance | | nodes | LdapInjection.java:45:28:45:52 | jBad : String | semmle.label | jBad : String | | LdapInjection.java:45:55:45:81 | jBadDN : String | semmle.label | jBadDN : String | diff --git a/java/ql/test/query-tests/security/CWE-094/InsecureBeanValidation.expected b/java/ql/test/query-tests/security/CWE-094/InsecureBeanValidation.expected index 5388b0df98c..adff0e4ca42 100644 --- a/java/ql/test/query-tests/security/CWE-094/InsecureBeanValidation.expected +++ b/java/ql/test/query-tests/security/CWE-094/InsecureBeanValidation.expected @@ -1,5 +1,5 @@ edges -| InsecureBeanValidation.java:7:28:7:40 | object : String | InsecureBeanValidation.java:11:64:11:68 | value | +| InsecureBeanValidation.java:7:28:7:40 | object : String | InsecureBeanValidation.java:11:64:11:68 | value | provenance | | nodes | InsecureBeanValidation.java:7:28:7:40 | object : String | semmle.label | object : String | | InsecureBeanValidation.java:11:64:11:68 | value | semmle.label | value | diff --git a/java/ql/test/query-tests/security/CWE-113/semmle/tests/ResponseSplitting.expected b/java/ql/test/query-tests/security/CWE-113/semmle/tests/ResponseSplitting.expected index 34a84f252e1..7ec4c978a03 100644 --- a/java/ql/test/query-tests/security/CWE-113/semmle/tests/ResponseSplitting.expected +++ b/java/ql/test/query-tests/security/CWE-113/semmle/tests/ResponseSplitting.expected @@ -1,8 +1,8 @@ edges -| ResponseSplitting.java:22:20:22:67 | new Cookie(...) : Cookie | ResponseSplitting.java:23:23:23:28 | cookie | -| ResponseSplitting.java:22:39:22:66 | getParameter(...) : String | ResponseSplitting.java:22:20:22:67 | new Cookie(...) : Cookie | -| ResponseSplitting.java:53:14:53:48 | getParameter(...) : String | ResponseSplitting.java:59:27:59:27 | t : String | -| ResponseSplitting.java:59:27:59:27 | t : String | ResponseSplitting.java:59:27:59:57 | replaceFirst(...) | +| ResponseSplitting.java:22:20:22:67 | new Cookie(...) : Cookie | ResponseSplitting.java:23:23:23:28 | cookie | provenance | | +| ResponseSplitting.java:22:39:22:66 | getParameter(...) : String | ResponseSplitting.java:22:20:22:67 | new Cookie(...) : Cookie | provenance | | +| ResponseSplitting.java:53:14:53:48 | getParameter(...) : String | ResponseSplitting.java:59:27:59:27 | t : String | provenance | | +| ResponseSplitting.java:59:27:59:27 | t : String | ResponseSplitting.java:59:27:59:57 | replaceFirst(...) | provenance | | nodes | ResponseSplitting.java:22:20:22:67 | new Cookie(...) : Cookie | semmle.label | new Cookie(...) : Cookie | | ResponseSplitting.java:22:39:22:66 | getParameter(...) : String | semmle.label | getParameter(...) : String | diff --git a/java/ql/test/query-tests/security/CWE-129/semmle/tests/ImproperValidationOfArrayConstructionCodeSpecified.expected b/java/ql/test/query-tests/security/CWE-129/semmle/tests/ImproperValidationOfArrayConstructionCodeSpecified.expected index cd4530b3002..62f9df885f8 100644 --- a/java/ql/test/query-tests/security/CWE-129/semmle/tests/ImproperValidationOfArrayConstructionCodeSpecified.expected +++ b/java/ql/test/query-tests/security/CWE-129/semmle/tests/ImproperValidationOfArrayConstructionCodeSpecified.expected @@ -1,5 +1,5 @@ edges -| Test.java:105:16:105:16 | 0 : Number | Test.java:107:27:107:30 | size | +| Test.java:105:16:105:16 | 0 : Number | Test.java:107:27:107:30 | size | provenance | | nodes | Test.java:105:16:105:16 | 0 : Number | semmle.label | 0 : Number | | Test.java:107:27:107:30 | size | semmle.label | size | diff --git a/java/ql/test/query-tests/security/CWE-129/semmle/tests/ImproperValidationOfArrayConstructionLocal.expected b/java/ql/test/query-tests/security/CWE-129/semmle/tests/ImproperValidationOfArrayConstructionLocal.expected index abfb68f74a5..2ae58aa9d56 100644 --- a/java/ql/test/query-tests/security/CWE-129/semmle/tests/ImproperValidationOfArrayConstructionLocal.expected +++ b/java/ql/test/query-tests/security/CWE-129/semmle/tests/ImproperValidationOfArrayConstructionLocal.expected @@ -1,8 +1,8 @@ edges -| Test.java:76:27:76:60 | getProperty(...) : String | Test.java:78:37:78:48 | userProperty : String | -| Test.java:78:37:78:48 | userProperty : String | Test.java:78:37:78:55 | trim(...) : String | -| Test.java:78:37:78:55 | trim(...) : String | Test.java:80:31:80:34 | size | -| Test.java:78:37:78:55 | trim(...) : String | Test.java:86:34:86:37 | size | +| Test.java:76:27:76:60 | getProperty(...) : String | Test.java:78:37:78:48 | userProperty : String | provenance | | +| Test.java:78:37:78:48 | userProperty : String | Test.java:78:37:78:55 | trim(...) : String | provenance | | +| Test.java:78:37:78:55 | trim(...) : String | Test.java:80:31:80:34 | size | provenance | | +| Test.java:78:37:78:55 | trim(...) : String | Test.java:86:34:86:37 | size | provenance | | nodes | Test.java:76:27:76:60 | getProperty(...) : String | semmle.label | getProperty(...) : String | | Test.java:78:37:78:48 | userProperty : String | semmle.label | userProperty : String | diff --git a/java/ql/test/query-tests/security/CWE-129/semmle/tests/ImproperValidationOfArrayIndexCodeSpecified.expected b/java/ql/test/query-tests/security/CWE-129/semmle/tests/ImproperValidationOfArrayIndexCodeSpecified.expected index 16de93aaec8..b745c26ec0a 100644 --- a/java/ql/test/query-tests/security/CWE-129/semmle/tests/ImproperValidationOfArrayIndexCodeSpecified.expected +++ b/java/ql/test/query-tests/security/CWE-129/semmle/tests/ImproperValidationOfArrayIndexCodeSpecified.expected @@ -1,12 +1,12 @@ edges -| ../../../../../stubs/apache-commons-lang3-3.7/org/apache/commons/lang3/RandomUtils.java:34:14:34:14 | 0 : Number | Test.java:59:17:59:42 | nextInt(...) : Number | -| Test.java:41:17:41:48 | nextInt(...) : Number | Test.java:44:30:44:34 | index | -| Test.java:41:17:41:48 | nextInt(...) : Number | Test.java:48:32:48:36 | index | -| Test.java:41:17:41:48 | nextInt(...) : Number | Test.java:52:39:52:43 | index | -| Test.java:59:17:59:42 | nextInt(...) : Number | Test.java:62:30:62:34 | index | -| Test.java:59:17:59:42 | nextInt(...) : Number | Test.java:66:32:66:36 | index | -| Test.java:59:17:59:42 | nextInt(...) : Number | Test.java:70:39:70:43 | index | -| Test.java:112:17:112:17 | 0 : Number | Test.java:115:32:115:36 | index | +| ../../../../../stubs/apache-commons-lang3-3.7/org/apache/commons/lang3/RandomUtils.java:34:14:34:14 | 0 : Number | Test.java:59:17:59:42 | nextInt(...) : Number | provenance | | +| Test.java:41:17:41:48 | nextInt(...) : Number | Test.java:44:30:44:34 | index | provenance | | +| Test.java:41:17:41:48 | nextInt(...) : Number | Test.java:48:32:48:36 | index | provenance | | +| Test.java:41:17:41:48 | nextInt(...) : Number | Test.java:52:39:52:43 | index | provenance | | +| Test.java:59:17:59:42 | nextInt(...) : Number | Test.java:62:30:62:34 | index | provenance | | +| Test.java:59:17:59:42 | nextInt(...) : Number | Test.java:66:32:66:36 | index | provenance | | +| Test.java:59:17:59:42 | nextInt(...) : Number | Test.java:70:39:70:43 | index | provenance | | +| Test.java:112:17:112:17 | 0 : Number | Test.java:115:32:115:36 | index | provenance | | nodes | ../../../../../stubs/apache-commons-lang3-3.7/org/apache/commons/lang3/RandomUtils.java:34:14:34:14 | 0 : Number | semmle.label | 0 : Number | | Test.java:41:17:41:48 | nextInt(...) : Number | semmle.label | nextInt(...) : Number | diff --git a/java/ql/test/query-tests/security/CWE-129/semmle/tests/ImproperValidationOfArrayIndexLocal.expected b/java/ql/test/query-tests/security/CWE-129/semmle/tests/ImproperValidationOfArrayIndexLocal.expected index 6e0738c8576..40248b6c645 100644 --- a/java/ql/test/query-tests/security/CWE-129/semmle/tests/ImproperValidationOfArrayIndexLocal.expected +++ b/java/ql/test/query-tests/security/CWE-129/semmle/tests/ImproperValidationOfArrayIndexLocal.expected @@ -1,7 +1,7 @@ edges -| Test.java:14:27:14:60 | getProperty(...) : String | Test.java:16:38:16:49 | userProperty : String | -| Test.java:16:38:16:49 | userProperty : String | Test.java:16:38:16:56 | trim(...) : String | -| Test.java:16:38:16:56 | trim(...) : String | Test.java:19:34:19:38 | index | +| Test.java:14:27:14:60 | getProperty(...) : String | Test.java:16:38:16:49 | userProperty : String | provenance | | +| Test.java:16:38:16:49 | userProperty : String | Test.java:16:38:16:56 | trim(...) : String | provenance | | +| Test.java:16:38:16:56 | trim(...) : String | Test.java:19:34:19:38 | index | provenance | | nodes | Test.java:14:27:14:60 | getProperty(...) : String | semmle.label | getProperty(...) : String | | Test.java:16:38:16:49 | userProperty : String | semmle.label | userProperty : String | diff --git a/java/ql/test/query-tests/security/CWE-134/semmle/tests/ExternallyControlledFormatString.expected b/java/ql/test/query-tests/security/CWE-134/semmle/tests/ExternallyControlledFormatString.expected index 5be16020175..d5b66f9d4b2 100644 --- a/java/ql/test/query-tests/security/CWE-134/semmle/tests/ExternallyControlledFormatString.expected +++ b/java/ql/test/query-tests/security/CWE-134/semmle/tests/ExternallyControlledFormatString.expected @@ -1,7 +1,7 @@ edges -| Test.java:33:30:33:74 | getParameter(...) : String | Test.java:34:20:34:32 | userParameter : String | -| Test.java:34:20:34:32 | userParameter : String | Test.java:37:31:37:43 | format : String | -| Test.java:37:31:37:43 | format : String | Test.java:39:25:39:30 | format | +| Test.java:33:30:33:74 | getParameter(...) : String | Test.java:34:20:34:32 | userParameter : String | provenance | | +| Test.java:34:20:34:32 | userParameter : String | Test.java:37:31:37:43 | format : String | provenance | | +| Test.java:37:31:37:43 | format : String | Test.java:39:25:39:30 | format | provenance | | nodes | Test.java:33:30:33:74 | getParameter(...) : String | semmle.label | getParameter(...) : String | | Test.java:34:20:34:32 | userParameter : String | semmle.label | userParameter : String | diff --git a/java/ql/test/query-tests/security/CWE-134/semmle/tests/ExternallyControlledFormatStringLocal.expected b/java/ql/test/query-tests/security/CWE-134/semmle/tests/ExternallyControlledFormatStringLocal.expected index 99e197a2e73..3f6e0a3ff23 100644 --- a/java/ql/test/query-tests/security/CWE-134/semmle/tests/ExternallyControlledFormatStringLocal.expected +++ b/java/ql/test/query-tests/security/CWE-134/semmle/tests/ExternallyControlledFormatStringLocal.expected @@ -1,9 +1,9 @@ edges -| Test.java:17:27:17:60 | getProperty(...) : String | Test.java:19:19:19:30 | userProperty | -| Test.java:17:27:17:60 | getProperty(...) : String | Test.java:21:23:21:34 | userProperty | -| Test.java:17:27:17:60 | getProperty(...) : String | Test.java:23:23:23:34 | userProperty | -| Test.java:17:27:17:60 | getProperty(...) : String | Test.java:25:28:25:39 | userProperty | -| Test.java:17:27:17:60 | getProperty(...) : String | Test.java:27:44:27:55 | userProperty | +| Test.java:17:27:17:60 | getProperty(...) : String | Test.java:19:19:19:30 | userProperty | provenance | | +| Test.java:17:27:17:60 | getProperty(...) : String | Test.java:21:23:21:34 | userProperty | provenance | | +| Test.java:17:27:17:60 | getProperty(...) : String | Test.java:23:23:23:34 | userProperty | provenance | | +| Test.java:17:27:17:60 | getProperty(...) : String | Test.java:25:28:25:39 | userProperty | provenance | | +| Test.java:17:27:17:60 | getProperty(...) : String | Test.java:27:44:27:55 | userProperty | provenance | | nodes | Test.java:17:27:17:60 | getProperty(...) : String | semmle.label | getProperty(...) : String | | Test.java:19:19:19:30 | userProperty | semmle.label | userProperty | diff --git a/java/ql/test/query-tests/security/CWE-190/semmle/tests/ArithmeticTaintedLocal.expected b/java/ql/test/query-tests/security/CWE-190/semmle/tests/ArithmeticTaintedLocal.expected index 1864576369c..d051c41d4d0 100644 --- a/java/ql/test/query-tests/security/CWE-190/semmle/tests/ArithmeticTaintedLocal.expected +++ b/java/ql/test/query-tests/security/CWE-190/semmle/tests/ArithmeticTaintedLocal.expected @@ -1,45 +1,45 @@ edges -| ArithmeticTainted.java:17:24:17:64 | new InputStreamReader(...) : InputStreamReader | ArithmeticTainted.java:18:40:18:56 | readerInputStream : InputStreamReader | -| ArithmeticTainted.java:17:24:17:64 | new InputStreamReader(...) : InputStreamReader | ArithmeticTainted.java:18:40:18:56 | readerInputStream : InputStreamReader | -| ArithmeticTainted.java:17:46:17:54 | System.in : InputStream | ArithmeticTainted.java:17:24:17:64 | new InputStreamReader(...) : InputStreamReader | -| ArithmeticTainted.java:17:46:17:54 | System.in : InputStream | ArithmeticTainted.java:17:24:17:64 | new InputStreamReader(...) : InputStreamReader | -| ArithmeticTainted.java:18:21:18:57 | new BufferedReader(...) : BufferedReader | ArithmeticTainted.java:19:26:19:39 | readerBuffered : BufferedReader | -| ArithmeticTainted.java:18:21:18:57 | new BufferedReader(...) : BufferedReader | ArithmeticTainted.java:19:26:19:39 | readerBuffered : BufferedReader | -| ArithmeticTainted.java:18:40:18:56 | readerInputStream : InputStreamReader | ArithmeticTainted.java:18:21:18:57 | new BufferedReader(...) : BufferedReader | -| ArithmeticTainted.java:18:40:18:56 | readerInputStream : InputStreamReader | ArithmeticTainted.java:18:21:18:57 | new BufferedReader(...) : BufferedReader | -| ArithmeticTainted.java:19:26:19:39 | readerBuffered : BufferedReader | ArithmeticTainted.java:19:26:19:50 | readLine(...) : String | -| ArithmeticTainted.java:19:26:19:39 | readerBuffered : BufferedReader | ArithmeticTainted.java:19:26:19:50 | readLine(...) : String | -| ArithmeticTainted.java:19:26:19:50 | readLine(...) : String | ArithmeticTainted.java:21:29:21:40 | stringNumber : String | -| ArithmeticTainted.java:19:26:19:50 | readLine(...) : String | ArithmeticTainted.java:21:29:21:40 | stringNumber : String | -| ArithmeticTainted.java:21:29:21:40 | stringNumber : String | ArithmeticTainted.java:21:29:21:47 | trim(...) : String | -| ArithmeticTainted.java:21:29:21:40 | stringNumber : String | ArithmeticTainted.java:21:29:21:47 | trim(...) : String | -| ArithmeticTainted.java:21:29:21:47 | trim(...) : String | ArithmeticTainted.java:32:17:32:20 | data | -| ArithmeticTainted.java:21:29:21:47 | trim(...) : String | ArithmeticTainted.java:40:17:40:20 | data | -| ArithmeticTainted.java:21:29:21:47 | trim(...) : String | ArithmeticTainted.java:50:17:50:20 | data | -| ArithmeticTainted.java:21:29:21:47 | trim(...) : String | ArithmeticTainted.java:64:20:64:23 | data : Number | -| ArithmeticTainted.java:21:29:21:47 | trim(...) : String | ArithmeticTainted.java:95:37:95:40 | data | -| ArithmeticTainted.java:21:29:21:47 | trim(...) : String | ArithmeticTainted.java:118:9:118:12 | data : Number | -| ArithmeticTainted.java:21:29:21:47 | trim(...) : String | ArithmeticTainted.java:119:10:119:13 | data : Number | -| ArithmeticTainted.java:21:29:21:47 | trim(...) : String | ArithmeticTainted.java:120:10:120:13 | data : Number | -| ArithmeticTainted.java:21:29:21:47 | trim(...) : String | ArithmeticTainted.java:121:10:121:13 | data : Number | -| ArithmeticTainted.java:64:4:64:10 | tainted [post update] : Holder [dat] : Number | ArithmeticTainted.java:66:18:66:24 | tainted : Holder [dat] : Number | -| ArithmeticTainted.java:64:20:64:23 | data : 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 | -| ArithmeticTainted.java:66:18:66:24 | tainted : Holder [dat] : Number | ArithmeticTainted.java:66:18:66:34 | getData(...) : Number | -| ArithmeticTainted.java:66:18:66:24 | tainted : Holder [dat] : Number | Holder.java:16:13:16:19 | parameter this : Holder [dat] : Number | -| ArithmeticTainted.java:66:18:66:34 | getData(...) : Number | ArithmeticTainted.java:71:17:71:23 | herring | -| ArithmeticTainted.java:118:9:118:12 | data : Number | ArithmeticTainted.java:125:26:125:33 | data : Number | -| ArithmeticTainted.java:119:10:119:13 | data : Number | ArithmeticTainted.java:129:27:129:34 | data : Number | -| ArithmeticTainted.java:120:10:120:13 | data : Number | ArithmeticTainted.java:133:27:133:34 | data : Number | -| ArithmeticTainted.java:121:10:121:13 | data : Number | ArithmeticTainted.java:137:27:137:34 | data : Number | -| ArithmeticTainted.java:125:26:125:33 | data : Number | ArithmeticTainted.java:127:3:127:6 | data | -| ArithmeticTainted.java:129:27:129:34 | data : Number | ArithmeticTainted.java:131:5:131:8 | data | -| ArithmeticTainted.java:133:27:133:34 | data : Number | ArithmeticTainted.java:135:3:135:6 | data | -| ArithmeticTainted.java:137:27:137:34 | data : Number | ArithmeticTainted.java:139:5:139:8 | data | -| Holder.java:12:22:12:26 | d : Number | Holder.java:13:9:13:9 | d : Number | -| Holder.java:13:9:13:9 | d : Number | Holder.java:13:3:13:5 | this <.field> [post update] : Holder [dat] : Number | -| Holder.java:16:13:16:19 | parameter this : Holder [dat] : Number | Holder.java:17:10:17:12 | this <.field> : Holder [dat] : Number | -| Holder.java:17:10:17:12 | this <.field> : Holder [dat] : Number | Holder.java:17:10:17:12 | dat : Number | +| ArithmeticTainted.java:17:24:17:64 | new InputStreamReader(...) : InputStreamReader | ArithmeticTainted.java:18:40:18:56 | readerInputStream : InputStreamReader | provenance | | +| ArithmeticTainted.java:17:24:17:64 | new InputStreamReader(...) : InputStreamReader | ArithmeticTainted.java:18:40:18:56 | readerInputStream : InputStreamReader | provenance | | +| ArithmeticTainted.java:17:46:17:54 | System.in : InputStream | ArithmeticTainted.java:17:24:17:64 | new InputStreamReader(...) : InputStreamReader | provenance | | +| ArithmeticTainted.java:17:46:17:54 | System.in : InputStream | ArithmeticTainted.java:17:24:17:64 | new InputStreamReader(...) : InputStreamReader | provenance | | +| ArithmeticTainted.java:18:21:18:57 | new BufferedReader(...) : BufferedReader | ArithmeticTainted.java:19:26:19:39 | readerBuffered : BufferedReader | provenance | | +| ArithmeticTainted.java:18:21:18:57 | new BufferedReader(...) : BufferedReader | ArithmeticTainted.java:19:26:19:39 | readerBuffered : BufferedReader | provenance | | +| ArithmeticTainted.java:18:40:18:56 | readerInputStream : InputStreamReader | ArithmeticTainted.java:18:21:18:57 | new BufferedReader(...) : BufferedReader | provenance | | +| ArithmeticTainted.java:18:40:18:56 | readerInputStream : InputStreamReader | ArithmeticTainted.java:18:21:18:57 | new BufferedReader(...) : BufferedReader | provenance | | +| ArithmeticTainted.java:19:26:19:39 | readerBuffered : BufferedReader | ArithmeticTainted.java:19:26:19:50 | readLine(...) : String | provenance | | +| ArithmeticTainted.java:19:26:19:39 | readerBuffered : BufferedReader | ArithmeticTainted.java:19:26:19:50 | readLine(...) : String | provenance | | +| ArithmeticTainted.java:19:26:19:50 | readLine(...) : String | ArithmeticTainted.java:21:29:21:40 | stringNumber : String | provenance | | +| ArithmeticTainted.java:19:26:19:50 | readLine(...) : String | ArithmeticTainted.java:21:29:21:40 | stringNumber : String | provenance | | +| ArithmeticTainted.java:21:29:21:40 | stringNumber : String | ArithmeticTainted.java:21:29:21:47 | trim(...) : String | provenance | | +| ArithmeticTainted.java:21:29:21:40 | stringNumber : String | ArithmeticTainted.java:21:29:21:47 | trim(...) : String | provenance | | +| ArithmeticTainted.java:21:29:21:47 | trim(...) : String | ArithmeticTainted.java:32:17:32:20 | data | provenance | | +| ArithmeticTainted.java:21:29:21:47 | trim(...) : String | ArithmeticTainted.java:40:17:40:20 | data | provenance | | +| ArithmeticTainted.java:21:29:21:47 | trim(...) : String | ArithmeticTainted.java:50:17:50:20 | data | provenance | | +| ArithmeticTainted.java:21:29:21:47 | trim(...) : String | ArithmeticTainted.java:64:20:64:23 | data : Number | provenance | | +| ArithmeticTainted.java:21:29:21:47 | trim(...) : String | ArithmeticTainted.java:95:37:95:40 | data | provenance | | +| ArithmeticTainted.java:21:29:21:47 | trim(...) : String | ArithmeticTainted.java:118:9:118:12 | data : Number | provenance | | +| ArithmeticTainted.java:21:29:21:47 | trim(...) : String | ArithmeticTainted.java:119:10:119:13 | data : Number | provenance | | +| ArithmeticTainted.java:21:29:21:47 | trim(...) : String | ArithmeticTainted.java:120:10:120:13 | data : Number | provenance | | +| ArithmeticTainted.java:21:29:21:47 | trim(...) : String | ArithmeticTainted.java:121:10:121:13 | data : Number | provenance | | +| ArithmeticTainted.java:64:4:64:10 | tainted [post update] : Holder [dat] : Number | ArithmeticTainted.java:66:18:66:24 | tainted : Holder [dat] : Number | provenance | | +| ArithmeticTainted.java:64:20:64:23 | data : Number | ArithmeticTainted.java:64:4:64:10 | tainted [post update] : Holder [dat] : Number | provenance | | +| ArithmeticTainted.java:64:20:64:23 | data : Number | Holder.java:12:22:12:26 | d : Number | provenance | | +| ArithmeticTainted.java:66:18:66:24 | tainted : Holder [dat] : Number | ArithmeticTainted.java:66:18:66:34 | getData(...) : Number | provenance | | +| ArithmeticTainted.java:66:18:66:24 | tainted : Holder [dat] : Number | Holder.java:16:13:16:19 | parameter this : Holder [dat] : Number | provenance | | +| ArithmeticTainted.java:66:18:66:34 | getData(...) : Number | ArithmeticTainted.java:71:17:71:23 | herring | provenance | | +| ArithmeticTainted.java:118:9:118:12 | data : Number | ArithmeticTainted.java:125:26:125:33 | data : Number | provenance | | +| ArithmeticTainted.java:119:10:119:13 | data : Number | ArithmeticTainted.java:129:27:129:34 | data : Number | provenance | | +| ArithmeticTainted.java:120:10:120:13 | data : Number | ArithmeticTainted.java:133:27:133:34 | data : Number | provenance | | +| ArithmeticTainted.java:121:10:121:13 | data : Number | ArithmeticTainted.java:137:27:137:34 | data : Number | provenance | | +| ArithmeticTainted.java:125:26:125:33 | data : Number | ArithmeticTainted.java:127:3:127:6 | data | provenance | | +| ArithmeticTainted.java:129:27:129:34 | data : Number | ArithmeticTainted.java:131:5:131:8 | data | provenance | | +| 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: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 | | nodes | ArithmeticTainted.java:17:24:17:64 | new InputStreamReader(...) : InputStreamReader | semmle.label | new InputStreamReader(...) : InputStreamReader | | ArithmeticTainted.java:17:24:17:64 | new InputStreamReader(...) : InputStreamReader | semmle.label | new InputStreamReader(...) : InputStreamReader | diff --git a/java/ql/test/query-tests/security/CWE-190/semmle/tests/ArithmeticUncontrolled.expected b/java/ql/test/query-tests/security/CWE-190/semmle/tests/ArithmeticUncontrolled.expected index 43256841646..5a305a82c88 100644 --- a/java/ql/test/query-tests/security/CWE-190/semmle/tests/ArithmeticUncontrolled.expected +++ b/java/ql/test/query-tests/security/CWE-190/semmle/tests/ArithmeticUncontrolled.expected @@ -1,8 +1,8 @@ edges -| Test.java:206:14:206:57 | nextInt(...) : Number | Test.java:210:17:210:20 | data | -| Test.java:206:14:206:57 | nextInt(...) : Number | Test.java:241:37:241:40 | data | -| Test.java:245:15:245:35 | nextInt(...) : Number | Test.java:249:17:249:21 | data2 | -| Test.java:245:15:245:35 | nextInt(...) : Number | Test.java:280:37:280:41 | data2 | +| Test.java:206:14:206:57 | nextInt(...) : Number | Test.java:210:17:210:20 | data | provenance | | +| Test.java:206:14:206:57 | nextInt(...) : Number | Test.java:241:37:241:40 | data | provenance | | +| Test.java:245:15:245:35 | nextInt(...) : Number | Test.java:249:17:249:21 | data2 | provenance | | +| Test.java:245:15:245:35 | nextInt(...) : Number | Test.java:280:37:280:41 | data2 | provenance | | nodes | Test.java:206:14:206:57 | nextInt(...) : Number | semmle.label | nextInt(...) : Number | | Test.java:210:17:210:20 | data | semmle.label | data | diff --git a/java/ql/test/query-tests/security/CWE-190/semmle/tests/ArithmeticWithExtremeValues.expected b/java/ql/test/query-tests/security/CWE-190/semmle/tests/ArithmeticWithExtremeValues.expected index 574dc3392a0..bd0b33f4810 100644 --- a/java/ql/test/query-tests/security/CWE-190/semmle/tests/ArithmeticWithExtremeValues.expected +++ b/java/ql/test/query-tests/security/CWE-190/semmle/tests/ArithmeticWithExtremeValues.expected @@ -1,11 +1,11 @@ edges -| Test.java:93:8:93:24 | Integer.MAX_VALUE : Number | Test.java:96:8:96:8 | i | -| Test.java:109:13:109:26 | Long.MIN_VALUE : Number | Test.java:111:13:111:13 | i | -| Test.java:138:9:138:25 | Integer.MAX_VALUE : Number | Test.java:139:14:139:14 | i | -| Test.java:144:12:144:28 | Integer.MAX_VALUE : Number | Test.java:147:14:147:14 | i | -| Test.java:185:13:185:26 | Byte.MAX_VALUE : Number | Test.java:188:39:188:39 | b | -| Test.java:192:14:192:28 | Short.MAX_VALUE : Number | Test.java:195:41:195:41 | s | -| Test.java:199:12:199:28 | Integer.MAX_VALUE : Number | Test.java:202:37:202:37 | i | +| Test.java:93:8:93:24 | Integer.MAX_VALUE : Number | Test.java:96:8:96:8 | i | provenance | | +| Test.java:109:13:109:26 | Long.MIN_VALUE : Number | Test.java:111:13:111:13 | i | provenance | | +| Test.java:138:9:138:25 | Integer.MAX_VALUE : Number | Test.java:139:14:139:14 | i | provenance | | +| Test.java:144:12:144:28 | Integer.MAX_VALUE : Number | Test.java:147:14:147:14 | i | provenance | | +| Test.java:185:13:185:26 | Byte.MAX_VALUE : Number | Test.java:188:39:188:39 | b | provenance | | +| Test.java:192:14:192:28 | Short.MAX_VALUE : Number | Test.java:195:41:195:41 | s | provenance | | +| Test.java:199:12:199:28 | Integer.MAX_VALUE : Number | Test.java:202:37:202:37 | i | provenance | | nodes | Test.java:93:8:93:24 | Integer.MAX_VALUE : Number | semmle.label | Integer.MAX_VALUE : Number | | Test.java:96:8:96:8 | i | semmle.label | i | diff --git a/java/ql/test/query-tests/security/CWE-200/semmle/tests/TempDirLocalInformationDisclosure/TempDirLocalInformationDisclosure.expected b/java/ql/test/query-tests/security/CWE-200/semmle/tests/TempDirLocalInformationDisclosure/TempDirLocalInformationDisclosure.expected index 03c431822b5..21e9f7379c6 100644 --- a/java/ql/test/query-tests/security/CWE-200/semmle/tests/TempDirLocalInformationDisclosure/TempDirLocalInformationDisclosure.expected +++ b/java/ql/test/query-tests/security/CWE-200/semmle/tests/TempDirLocalInformationDisclosure/TempDirLocalInformationDisclosure.expected @@ -1,59 +1,59 @@ edges -| Files.java:10:24:10:69 | new File(...) : File | Files.java:14:37:14:43 | baseDir : File | -| Files.java:10:33:10:68 | getProperty(...) : String | Files.java:10:24:10:69 | new File(...) : File | -| Files.java:14:28:14:64 | new File(...) : File | Files.java:15:17:15:23 | tempDir | -| Files.java:14:37:14:43 | baseDir : File | Files.java:14:28:14:64 | new File(...) : File | -| Test.java:36:24:36:69 | new File(...) : File | Test.java:39:63:39:69 | tempDir | -| Test.java:36:33:36:68 | getProperty(...) : String | Test.java:36:24:36:69 | new File(...) : File | -| Test.java:50:29:50:94 | new File(...) : File | Test.java:53:63:53:74 | tempDirChild | -| Test.java:50:38:50:83 | new File(...) : File | Test.java:50:29:50:94 | new File(...) : File | -| Test.java:50:47:50:82 | getProperty(...) : String | Test.java:50:38:50:83 | new File(...) : File | -| Test.java:61:24:61:69 | new File(...) : File | Test.java:61:24:61:88 | getCanonicalFile(...) : File | -| Test.java:61:24:61:88 | getCanonicalFile(...) : File | Test.java:64:63:64:69 | tempDir | -| Test.java:61:33:61:68 | getProperty(...) : String | Test.java:61:24:61:69 | new File(...) : File | -| Test.java:75:24:75:69 | new File(...) : File | Test.java:75:24:75:87 | getAbsoluteFile(...) : File | -| Test.java:75:24:75:87 | getAbsoluteFile(...) : File | Test.java:78:63:78:69 | tempDir | -| Test.java:75:33:75:68 | getProperty(...) : String | Test.java:75:24:75:69 | new File(...) : File | -| Test.java:110:29:110:84 | new File(...) : File | Test.java:113:9:113:20 | tempDirChild | -| Test.java:110:38:110:73 | getProperty(...) : String | Test.java:110:29:110:84 | new File(...) : File | -| Test.java:134:29:134:84 | new File(...) : File | Test.java:137:9:137:20 | tempDirChild | -| Test.java:134:38:134:73 | getProperty(...) : String | Test.java:134:29:134:84 | new File(...) : File | -| Test.java:158:29:158:88 | new File(...) : File | Test.java:159:21:159:32 | tempDirChild : File | -| Test.java:158:38:158:73 | getProperty(...) : String | Test.java:158:29:158:88 | new File(...) : File | -| Test.java:159:21:159:32 | tempDirChild : File | Test.java:159:21:159:41 | toPath(...) | -| Test.java:187:29:187:88 | new File(...) : File | Test.java:188:21:188:32 | tempDirChild : File | -| Test.java:187:38:187:73 | getProperty(...) : String | Test.java:187:29:187:88 | new File(...) : File | -| Test.java:188:21:188:32 | tempDirChild : File | Test.java:188:21:188:41 | toPath(...) | -| Test.java:204:29:204:104 | new File(...) : File | Test.java:204:29:204:113 | toPath(...) : Path | -| Test.java:204:29:204:113 | toPath(...) : Path | Test.java:207:33:207:44 | tempDirChild | -| Test.java:204:38:204:73 | getProperty(...) : String | Test.java:204:29:204:104 | new File(...) : File | -| Test.java:216:29:216:102 | new File(...) : File | Test.java:216:29:216:111 | toPath(...) : Path | -| Test.java:216:29:216:111 | toPath(...) : Path | Test.java:219:31:219:42 | tempDirChild | -| Test.java:216:38:216:73 | getProperty(...) : String | Test.java:216:29:216:102 | new File(...) : File | -| Test.java:228:29:228:100 | new File(...) : File | Test.java:231:26:231:37 | tempDirChild : File | -| Test.java:228:38:228:73 | getProperty(...) : String | Test.java:228:29:228:100 | new File(...) : File | -| Test.java:231:26:231:37 | tempDirChild : File | Test.java:231:26:231:46 | toPath(...) | -| Test.java:249:29:249:101 | new File(...) : File | Test.java:252:31:252:42 | tempDirChild : File | -| Test.java:249:38:249:73 | getProperty(...) : String | Test.java:249:29:249:101 | new File(...) : File | -| Test.java:252:31:252:42 | tempDirChild : File | Test.java:252:31:252:51 | toPath(...) | -| Test.java:260:29:260:109 | new File(...) : File | Test.java:263:33:263:44 | tempDirChild : File | -| Test.java:260:38:260:73 | getProperty(...) : String | Test.java:260:29:260:109 | new File(...) : File | -| Test.java:263:33:263:44 | tempDirChild : File | Test.java:263:33:263:53 | toPath(...) | -| Test.java:294:29:294:101 | new File(...) : File | Test.java:298:35:298:46 | tempDirChild : File | -| Test.java:294:38:294:73 | getProperty(...) : String | Test.java:294:29:294:101 | new File(...) : File | -| Test.java:298:35:298:46 | tempDirChild : File | Test.java:298:35:298:55 | toPath(...) | -| Test.java:313:29:313:101 | new File(...) : File | Test.java:316:35:316:46 | tempDirChild : File | -| Test.java:313:38:313:73 | getProperty(...) : String | Test.java:313:29:313:101 | new File(...) : File | -| Test.java:316:35:316:46 | tempDirChild : File | Test.java:316:35:316:55 | toPath(...) | -| Test.java:322:29:322:101 | new File(...) : File | Test.java:326:35:326:46 | tempDirChild : File | -| Test.java:322:38:322:73 | getProperty(...) : String | Test.java:322:29:322:101 | new File(...) : File | -| Test.java:326:35:326:46 | tempDirChild : File | Test.java:326:35:326:55 | toPath(...) | -| Test.java:350:29:350:101 | new File(...) : File | Test.java:355:35:355:46 | tempDirChild : File | -| Test.java:350:38:350:73 | getProperty(...) : String | Test.java:350:29:350:101 | new File(...) : File | -| Test.java:355:35:355:46 | tempDirChild : File | Test.java:355:35:355:55 | toPath(...) | -| Test.java:361:29:361:101 | new File(...) : File | Test.java:366:35:366:46 | tempDirChild : File | -| Test.java:361:38:361:73 | getProperty(...) : String | Test.java:361:29:361:101 | new File(...) : File | -| Test.java:366:35:366:46 | tempDirChild : File | Test.java:366:35:366:55 | toPath(...) | +| Files.java:10:24:10:69 | new File(...) : File | Files.java:14:37:14:43 | baseDir : File | provenance | | +| Files.java:10:33:10:68 | getProperty(...) : String | Files.java:10:24:10:69 | new File(...) : File | provenance | | +| Files.java:14:28:14:64 | new File(...) : File | Files.java:15:17:15:23 | tempDir | provenance | | +| Files.java:14:37:14:43 | baseDir : File | Files.java:14:28:14:64 | new File(...) : File | provenance | | +| Test.java:36:24:36:69 | new File(...) : File | Test.java:39:63:39:69 | tempDir | provenance | | +| Test.java:36:33:36:68 | getProperty(...) : String | Test.java:36:24:36:69 | new File(...) : File | provenance | | +| Test.java:50:29:50:94 | new File(...) : File | Test.java:53:63:53:74 | tempDirChild | provenance | | +| Test.java:50:38:50:83 | new File(...) : File | Test.java:50:29:50:94 | new File(...) : File | provenance | | +| Test.java:50:47:50:82 | getProperty(...) : String | Test.java:50:38:50:83 | new File(...) : File | provenance | | +| Test.java:61:24:61:69 | new File(...) : File | Test.java:61:24:61:88 | getCanonicalFile(...) : File | provenance | | +| Test.java:61:24:61:88 | getCanonicalFile(...) : File | Test.java:64:63:64:69 | tempDir | provenance | | +| Test.java:61:33:61:68 | getProperty(...) : String | Test.java:61:24:61:69 | new File(...) : File | provenance | | +| Test.java:75:24:75:69 | new File(...) : File | Test.java:75:24:75:87 | getAbsoluteFile(...) : File | provenance | | +| Test.java:75:24:75:87 | getAbsoluteFile(...) : File | Test.java:78:63:78:69 | tempDir | provenance | | +| Test.java:75:33:75:68 | getProperty(...) : String | Test.java:75:24:75:69 | new File(...) : File | provenance | | +| Test.java:110:29:110:84 | new File(...) : File | Test.java:113:9:113:20 | tempDirChild | provenance | | +| Test.java:110:38:110:73 | getProperty(...) : String | Test.java:110:29:110:84 | new File(...) : File | provenance | | +| Test.java:134:29:134:84 | new File(...) : File | Test.java:137:9:137:20 | tempDirChild | provenance | | +| Test.java:134:38:134:73 | getProperty(...) : String | Test.java:134:29:134:84 | new File(...) : File | provenance | | +| Test.java:158:29:158:88 | new File(...) : File | Test.java:159:21:159:32 | tempDirChild : File | provenance | | +| Test.java:158:38:158:73 | getProperty(...) : String | Test.java:158:29:158:88 | new File(...) : File | provenance | | +| Test.java:159:21:159:32 | tempDirChild : File | Test.java:159:21:159:41 | toPath(...) | provenance | | +| Test.java:187:29:187:88 | new File(...) : File | Test.java:188:21:188:32 | tempDirChild : File | provenance | | +| Test.java:187:38:187:73 | getProperty(...) : String | Test.java:187:29:187:88 | new File(...) : File | provenance | | +| Test.java:188:21:188:32 | tempDirChild : File | Test.java:188:21:188:41 | toPath(...) | provenance | | +| Test.java:204:29:204:104 | new File(...) : File | Test.java:204:29:204:113 | toPath(...) : Path | provenance | | +| Test.java:204:29:204:113 | toPath(...) : Path | Test.java:207:33:207:44 | tempDirChild | provenance | | +| Test.java:204:38:204:73 | getProperty(...) : String | Test.java:204:29:204:104 | new File(...) : File | provenance | | +| Test.java:216:29:216:102 | new File(...) : File | Test.java:216:29:216:111 | toPath(...) : Path | provenance | | +| Test.java:216:29:216:111 | toPath(...) : Path | Test.java:219:31:219:42 | tempDirChild | provenance | | +| Test.java:216:38:216:73 | getProperty(...) : String | Test.java:216:29:216:102 | new File(...) : File | provenance | | +| Test.java:228:29:228:100 | new File(...) : File | Test.java:231:26:231:37 | tempDirChild : File | provenance | | +| Test.java:228:38:228:73 | getProperty(...) : String | Test.java:228:29:228:100 | new File(...) : File | provenance | | +| Test.java:231:26:231:37 | tempDirChild : File | Test.java:231:26:231:46 | toPath(...) | provenance | | +| Test.java:249:29:249:101 | new File(...) : File | Test.java:252:31:252:42 | tempDirChild : File | provenance | | +| Test.java:249:38:249:73 | getProperty(...) : String | Test.java:249:29:249:101 | new File(...) : File | provenance | | +| Test.java:252:31:252:42 | tempDirChild : File | Test.java:252:31:252:51 | toPath(...) | provenance | | +| Test.java:260:29:260:109 | new File(...) : File | Test.java:263:33:263:44 | tempDirChild : File | provenance | | +| Test.java:260:38:260:73 | getProperty(...) : String | Test.java:260:29:260:109 | new File(...) : File | provenance | | +| Test.java:263:33:263:44 | tempDirChild : File | Test.java:263:33:263:53 | toPath(...) | provenance | | +| Test.java:294:29:294:101 | new File(...) : File | Test.java:298:35:298:46 | tempDirChild : File | provenance | | +| Test.java:294:38:294:73 | getProperty(...) : String | Test.java:294:29:294:101 | new File(...) : File | provenance | | +| Test.java:298:35:298:46 | tempDirChild : File | Test.java:298:35:298:55 | toPath(...) | provenance | | +| Test.java:313:29:313:101 | new File(...) : File | Test.java:316:35:316:46 | tempDirChild : File | provenance | | +| Test.java:313:38:313:73 | getProperty(...) : String | Test.java:313:29:313:101 | new File(...) : File | provenance | | +| Test.java:316:35:316:46 | tempDirChild : File | Test.java:316:35:316:55 | toPath(...) | provenance | | +| Test.java:322:29:322:101 | new File(...) : File | Test.java:326:35:326:46 | tempDirChild : File | provenance | | +| Test.java:322:38:322:73 | getProperty(...) : String | Test.java:322:29:322:101 | new File(...) : File | provenance | | +| Test.java:326:35:326:46 | tempDirChild : File | Test.java:326:35:326:55 | toPath(...) | provenance | | +| Test.java:350:29:350:101 | new File(...) : File | Test.java:355:35:355:46 | tempDirChild : File | provenance | | +| Test.java:350:38:350:73 | getProperty(...) : String | Test.java:350:29:350:101 | new File(...) : File | provenance | | +| Test.java:355:35:355:46 | tempDirChild : File | Test.java:355:35:355:55 | toPath(...) | provenance | | +| Test.java:361:29:361:101 | new File(...) : File | Test.java:366:35:366:46 | tempDirChild : File | provenance | | +| Test.java:361:38:361:73 | getProperty(...) : String | Test.java:361:29:361:101 | new File(...) : File | provenance | | +| Test.java:366:35:366:46 | tempDirChild : File | Test.java:366:35:366:55 | toPath(...) | provenance | | nodes | Files.java:10:24:10:69 | new File(...) : File | semmle.label | new File(...) : File | | Files.java:10:33:10:68 | getProperty(...) : String | semmle.label | getProperty(...) : String | diff --git a/java/ql/test/query-tests/security/CWE-297/UnsafeHostnameVerification.expected b/java/ql/test/query-tests/security/CWE-297/UnsafeHostnameVerification.expected index 86e91b2003b..8377276e40c 100644 --- a/java/ql/test/query-tests/security/CWE-297/UnsafeHostnameVerification.expected +++ b/java/ql/test/query-tests/security/CWE-297/UnsafeHostnameVerification.expected @@ -1,8 +1,8 @@ edges -| UnsafeHostnameVerification.java:66:37:80:9 | new (...) : new HostnameVerifier(...) { ... } | UnsafeHostnameVerification.java:81:55:81:62 | verifier | -| UnsafeHostnameVerification.java:88:37:93:9 | new (...) : new HostnameVerifier(...) { ... } | UnsafeHostnameVerification.java:94:55:94:62 | verifier | -| UnsafeHostnameVerification.java:97:42:97:68 | ALLOW_ALL_HOSTNAME_VERIFIER : new HostnameVerifier(...) { ... } | UnsafeHostnameVerification.java:34:59:34:85 | ALLOW_ALL_HOSTNAME_VERIFIER | -| UnsafeHostnameVerification.java:97:72:102:5 | new (...) : new HostnameVerifier(...) { ... } | UnsafeHostnameVerification.java:97:42:97:68 | ALLOW_ALL_HOSTNAME_VERIFIER : new HostnameVerifier(...) { ... } | +| UnsafeHostnameVerification.java:66:37:80:9 | new (...) : new HostnameVerifier(...) { ... } | UnsafeHostnameVerification.java:81:55:81:62 | verifier | provenance | | +| UnsafeHostnameVerification.java:88:37:93:9 | new (...) : new HostnameVerifier(...) { ... } | UnsafeHostnameVerification.java:94:55:94:62 | verifier | provenance | | +| UnsafeHostnameVerification.java:97:42:97:68 | ALLOW_ALL_HOSTNAME_VERIFIER : new HostnameVerifier(...) { ... } | UnsafeHostnameVerification.java:34:59:34:85 | ALLOW_ALL_HOSTNAME_VERIFIER | provenance | | +| UnsafeHostnameVerification.java:97:72:102:5 | new (...) : new HostnameVerifier(...) { ... } | UnsafeHostnameVerification.java:97:42:97:68 | ALLOW_ALL_HOSTNAME_VERIFIER : new HostnameVerifier(...) { ... } | provenance | | nodes | UnsafeHostnameVerification.java:14:55:19:9 | new (...) | semmle.label | new (...) | | UnsafeHostnameVerification.java:26:55:26:71 | ...->... | semmle.label | ...->... | diff --git a/java/ql/test/query-tests/security/CWE-311/CWE-319/HttpsUrls.expected b/java/ql/test/query-tests/security/CWE-311/CWE-319/HttpsUrls.expected index baef4c539b8..2b2ff6478ce 100644 --- a/java/ql/test/query-tests/security/CWE-311/CWE-319/HttpsUrls.expected +++ b/java/ql/test/query-tests/security/CWE-311/CWE-319/HttpsUrls.expected @@ -1,16 +1,16 @@ edges -| HttpsUrlsTest.java:23:23:23:31 | "http://" : String | HttpsUrlsTest.java:24:21:24:56 | ... + ... : String | -| HttpsUrlsTest.java:24:13:24:57 | new URL(...) : URL | HttpsUrlsTest.java:28:50:28:50 | u | -| HttpsUrlsTest.java:24:21:24:56 | ... + ... : String | HttpsUrlsTest.java:24:13:24:57 | new URL(...) : URL | -| HttpsUrlsTest.java:36:23:36:28 | "http" : String | HttpsUrlsTest.java:37:21:37:28 | protocol : String | -| HttpsUrlsTest.java:37:13:37:62 | new URL(...) : URL | HttpsUrlsTest.java:41:50:41:50 | u | -| HttpsUrlsTest.java:37:21:37:28 | protocol : String | HttpsUrlsTest.java:37:13:37:62 | new URL(...) : URL | -| HttpsUrlsTest.java:49:23:49:31 | "http://" : String | HttpsUrlsTest.java:51:64:51:98 | ... + ... : String | -| HttpsUrlsTest.java:51:13:51:99 | new URL(...) : URL | HttpsUrlsTest.java:55:50:55:50 | u | -| HttpsUrlsTest.java:51:64:51:98 | ... + ... : String | HttpsUrlsTest.java:51:13:51:99 | new URL(...) : URL | -| HttpsUrlsTest.java:87:23:87:28 | "http" : String | HttpsUrlsTest.java:88:21:88:28 | protocol : String | -| HttpsUrlsTest.java:88:13:88:52 | new URL(...) : URL | HttpsUrlsTest.java:92:50:92:50 | u | -| HttpsUrlsTest.java:88:21:88:28 | protocol : String | HttpsUrlsTest.java:88:13:88:52 | new URL(...) : URL | +| HttpsUrlsTest.java:23:23:23:31 | "http://" : String | HttpsUrlsTest.java:24:21:24:56 | ... + ... : String | provenance | | +| HttpsUrlsTest.java:24:13:24:57 | new URL(...) : URL | HttpsUrlsTest.java:28:50:28:50 | u | provenance | | +| HttpsUrlsTest.java:24:21:24:56 | ... + ... : String | HttpsUrlsTest.java:24:13:24:57 | new URL(...) : URL | provenance | | +| HttpsUrlsTest.java:36:23:36:28 | "http" : String | HttpsUrlsTest.java:37:21:37:28 | protocol : String | provenance | | +| HttpsUrlsTest.java:37:13:37:62 | new URL(...) : URL | HttpsUrlsTest.java:41:50:41:50 | u | provenance | | +| HttpsUrlsTest.java:37:21:37:28 | protocol : String | HttpsUrlsTest.java:37:13:37:62 | new URL(...) : URL | provenance | | +| HttpsUrlsTest.java:49:23:49:31 | "http://" : String | HttpsUrlsTest.java:51:64:51:98 | ... + ... : String | provenance | | +| HttpsUrlsTest.java:51:13:51:99 | new URL(...) : URL | HttpsUrlsTest.java:55:50:55:50 | u | provenance | | +| HttpsUrlsTest.java:51:64:51:98 | ... + ... : String | HttpsUrlsTest.java:51:13:51:99 | new URL(...) : URL | provenance | | +| HttpsUrlsTest.java:87:23:87:28 | "http" : String | HttpsUrlsTest.java:88:21:88:28 | protocol : String | provenance | | +| HttpsUrlsTest.java:88:13:88:52 | new URL(...) : URL | HttpsUrlsTest.java:92:50:92:50 | u | provenance | | +| HttpsUrlsTest.java:88:21:88:28 | protocol : String | HttpsUrlsTest.java:88:13:88:52 | new URL(...) : URL | provenance | | nodes | HttpsUrlsTest.java:23:23:23:31 | "http://" : String | semmle.label | "http://" : String | | HttpsUrlsTest.java:24:13:24:57 | new URL(...) : URL | semmle.label | new URL(...) : URL | diff --git a/java/ql/test/query-tests/security/CWE-327/semmle/tests/BrokenCryptoAlgorithm.expected b/java/ql/test/query-tests/security/CWE-327/semmle/tests/BrokenCryptoAlgorithm.expected index 3965182c6d4..7c3a7f3f082 100644 --- a/java/ql/test/query-tests/security/CWE-327/semmle/tests/BrokenCryptoAlgorithm.expected +++ b/java/ql/test/query-tests/security/CWE-327/semmle/tests/BrokenCryptoAlgorithm.expected @@ -1,5 +1,5 @@ edges -| WeakHashing.java:21:86:21:90 | "MD5" : String | WeakHashing.java:21:56:21:91 | getProperty(...) | +| WeakHashing.java:21:86:21:90 | "MD5" : String | WeakHashing.java:21:56:21:91 | getProperty(...) | provenance | | nodes | Test.java:19:45:19:49 | "DES" | semmle.label | "DES" | | Test.java:42:33:42:37 | "RC2" | semmle.label | "RC2" | diff --git a/java/ql/test/query-tests/security/CWE-601/semmle/tests/UrlRedirect.expected b/java/ql/test/query-tests/security/CWE-601/semmle/tests/UrlRedirect.expected index 974005e801b..d49af28117c 100644 --- a/java/ql/test/query-tests/security/CWE-601/semmle/tests/UrlRedirect.expected +++ b/java/ql/test/query-tests/security/CWE-601/semmle/tests/UrlRedirect.expected @@ -1,11 +1,11 @@ edges -| UrlRedirect.java:32:37:32:66 | getParameter(...) : String | UrlRedirect.java:32:25:32:67 | weakCleanup(...) | -| UrlRedirect.java:32:37:32:66 | getParameter(...) : String | UrlRedirect.java:45:28:45:39 | input : String | -| UrlRedirect.java:36:58:36:89 | getParameter(...) : String | UrlRedirect.java:36:25:36:89 | ... + ... | -| UrlRedirect.java:45:28:45:39 | input : String | UrlRedirect.java:46:10:46:14 | input : String | -| UrlRedirect.java:46:10:46:14 | input : String | UrlRedirect.java:46:10:46:40 | replaceAll(...) : String | -| mad/Test.java:9:16:9:41 | getParameter(...) : String | mad/Test.java:14:31:14:38 | source(...) : String | -| mad/Test.java:14:31:14:38 | source(...) : String | mad/Test.java:14:22:14:38 | (...)... | +| UrlRedirect.java:32:37:32:66 | getParameter(...) : String | UrlRedirect.java:32:25:32:67 | weakCleanup(...) | provenance | | +| UrlRedirect.java:32:37:32:66 | getParameter(...) : String | UrlRedirect.java:45:28:45:39 | input : String | provenance | | +| UrlRedirect.java:36:58:36:89 | getParameter(...) : String | UrlRedirect.java:36:25:36:89 | ... + ... | provenance | | +| UrlRedirect.java:45:28:45:39 | input : String | UrlRedirect.java:46:10:46:14 | input : String | provenance | | +| UrlRedirect.java:46:10:46:14 | input : String | UrlRedirect.java:46:10:46:40 | replaceAll(...) : String | provenance | | +| mad/Test.java:9:16:9:41 | getParameter(...) : String | mad/Test.java:14:31:14:38 | source(...) : String | provenance | | +| mad/Test.java:14:31:14:38 | source(...) : String | mad/Test.java:14:22:14:38 | (...)... | provenance | | nodes | UrlRedirect.java:23:25:23:54 | getParameter(...) | semmle.label | getParameter(...) | | UrlRedirect.java:32:25:32:67 | weakCleanup(...) | semmle.label | weakCleanup(...) | diff --git a/java/ql/test/query-tests/security/CWE-681/semmle/tests/NumericCastTaintedLocal.expected b/java/ql/test/query-tests/security/CWE-681/semmle/tests/NumericCastTaintedLocal.expected index 6ab99919c33..89bf2054d1d 100644 --- a/java/ql/test/query-tests/security/CWE-681/semmle/tests/NumericCastTaintedLocal.expected +++ b/java/ql/test/query-tests/security/CWE-681/semmle/tests/NumericCastTaintedLocal.expected @@ -1,11 +1,11 @@ edges -| Test.java:10:36:11:47 | new BufferedReader(...) : BufferedReader | Test.java:12:26:12:39 | readerBuffered : BufferedReader | -| Test.java:11:6:11:46 | new InputStreamReader(...) : InputStreamReader | Test.java:10:36:11:47 | new BufferedReader(...) : BufferedReader | -| Test.java:11:28:11:36 | System.in : InputStream | Test.java:11:6:11:46 | new InputStreamReader(...) : InputStreamReader | -| Test.java:12:26:12:39 | readerBuffered : BufferedReader | Test.java:12:26:12:50 | readLine(...) : String | -| Test.java:12:26:12:50 | readLine(...) : String | Test.java:14:27:14:38 | stringNumber : String | -| Test.java:14:27:14:38 | stringNumber : String | Test.java:14:27:14:45 | trim(...) : String | -| Test.java:14:27:14:45 | trim(...) : String | Test.java:21:22:21:25 | data | +| Test.java:10:36:11:47 | new BufferedReader(...) : BufferedReader | Test.java:12:26:12:39 | readerBuffered : BufferedReader | provenance | | +| Test.java:11:6:11:46 | new InputStreamReader(...) : InputStreamReader | Test.java:10:36:11:47 | new BufferedReader(...) : BufferedReader | provenance | | +| Test.java:11:28:11:36 | System.in : InputStream | Test.java:11:6:11:46 | new InputStreamReader(...) : InputStreamReader | provenance | | +| Test.java:12:26:12:39 | readerBuffered : BufferedReader | Test.java:12:26:12:50 | readLine(...) : String | provenance | | +| Test.java:12:26:12:50 | readLine(...) : String | Test.java:14:27:14:38 | stringNumber : String | provenance | | +| Test.java:14:27:14:38 | stringNumber : String | Test.java:14:27:14:45 | trim(...) : String | provenance | | +| Test.java:14:27:14:45 | trim(...) : String | Test.java:21:22:21:25 | data | provenance | | nodes | Test.java:10:36:11:47 | new BufferedReader(...) : BufferedReader | semmle.label | new BufferedReader(...) : BufferedReader | | Test.java:11:6:11:46 | new InputStreamReader(...) : InputStreamReader | semmle.label | new InputStreamReader(...) : InputStreamReader | diff --git a/java/ql/test/query-tests/security/CWE-807/semmle/tests/TaintedPermissionsCheck.expected b/java/ql/test/query-tests/security/CWE-807/semmle/tests/TaintedPermissionsCheck.expected index 2349a61216f..9d67e3e6c3d 100644 --- a/java/ql/test/query-tests/security/CWE-807/semmle/tests/TaintedPermissionsCheck.expected +++ b/java/ql/test/query-tests/security/CWE-807/semmle/tests/TaintedPermissionsCheck.expected @@ -1,5 +1,5 @@ edges -| TaintedPermissionsCheckTest.java:12:19:12:48 | getParameter(...) : String | TaintedPermissionsCheckTest.java:15:27:15:53 | ... + ... | +| TaintedPermissionsCheckTest.java:12:19:12:48 | getParameter(...) : String | TaintedPermissionsCheckTest.java:15:27:15:53 | ... + ... | provenance | | nodes | TaintedPermissionsCheckTest.java:12:19:12:48 | getParameter(...) : String | semmle.label | getParameter(...) : String | | TaintedPermissionsCheckTest.java:15:27:15:53 | ... + ... | semmle.label | ... + ... | From 21a6520cd3fdb0fd26c425876a84feb23c7cb9dd Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Mon, 5 Feb 2024 13:49:33 +0100 Subject: [PATCH 113/378] C#: Add empty provenance column to expected files. --- .../CWE-918/RequestForgery.expected | 2 +- .../CWE-759/HashWithoutSalt.expected | 12 +- .../backdoor/PotentialTimeBomb.expected | 16 +- .../cil/dataflow/DataFlow.expected | 100 +- .../library-tests/csharp7/GlobalFlow.expected | 46 +- .../csharp7/GlobalTaintTracking.expected | 60 +- .../dataflow/async/Async.expected | 70 +- .../CallSensitivityFlow.expected | 84 +- .../collections/CollectionFlow.expected | 548 ++--- .../external-models/ExternalFlow.expected | 144 +- .../dataflow/fields/FieldFlow.expected | 1880 ++++++++--------- .../dataflow/global/DataFlowPath.expected | 680 +++--- .../global/TaintTrackingPath.expected | 766 +++---- .../dataflow/operators/operatorFlow.expected | 144 +- .../threat-models-flowtest1.expected | 16 +- .../threat-models-flowtest2.expected | 18 +- .../threat-models-flowtest3.expected | 22 +- .../threat-models-flowtest4.expected | 24 +- .../threat-models-flowtest5.expected | 20 +- .../threat-models-flowtest6.expected | 20 +- .../dataflow/tuples/Tuples.expected | 400 ++-- .../TypeFlowDispatch.expected | 108 +- .../dataflow/types/Types.expected | 116 +- .../EntityFramework/Dataflow.expected | 348 +-- .../FormatInvalid/FormatInvalid.expected | 4 +- .../UnsafeYearConstruction.expected | 6 +- .../UntrustedDataToExternalAPI.expected | 6 +- .../CWE-022/TaintedPath/TaintedPath.expected | 30 +- .../CWE-022/ZipSlip/ZipSlip.expected | 38 +- .../CWE-078/CommandInjection.expected | 44 +- .../CWE-078/StoredCommandInjection.expected | 2 +- .../CWE-079/StoredXSS/StoredXSS.expected | 2 +- .../CWE-079/XSS/XSS.expected | 30 +- .../CWE-079/XSSAsp/XSS.expected | 58 +- .../CWE-079/XSSRazorPages/XSS.expected | 136 +- .../CWE-079/XssPageModels/test.expected | 18 +- .../CWE-089/SecondOrderSqlInjection.expected | 30 +- .../CWE-089/SqlInjection.expected | 66 +- .../CWE-090/LDAPInjection.expected | 26 +- .../CWE-090/StoredLDAPInjection.expected | 2 +- .../XMLInjection/XMLInjection.expected | 6 +- .../CWE-094/CodeInjection.expected | 10 +- .../CWE-099/ResourceInjection.expected | 10 +- .../CWE-112/MissingXMLValidation.expected | 32 +- .../AssemblyPathInjection.expected | 6 +- .../CWE-117/LogForging.expected | 16 +- .../CWE-134/UncontrolledFormatString.expected | 18 +- .../ExposureInTransmittedData.expected | 10 +- .../ExceptionInformationExposure.expected | 12 +- .../HardcodedSymmetricEncryptionKey.expected | 26 +- .../DontInstallRootCert.expected | 6 +- .../InsecureSQLConnection.expected | 4 +- .../CWE-338/InsecureRandomness.expected | 30 +- ...safeDeserializationUntrustedInput.expected | 38 +- ...safeDeserializationUntrustedInput.expected | 6 +- .../CWE-601/UrlRedirect/UrlRedirect.expected | 56 +- .../CWE-611/UntrustedDataInsecureXml.expected | 2 +- .../CWE-643/StoredXPathInjection.expected | 8 +- .../CWE-643/XPathInjection.expected | 60 +- .../CWE-730/ReDoS/ReDoS.expected | 22 +- .../CWE-730/ReDoSGlobalTimeout/ReDoS.expected | 6 +- .../RegexInjection/RegexInjection.expected | 6 +- .../CWE-798/HardcodedCredentials.expected | 2 +- .../CWE-807/ConditionalBypass.expected | 40 +- .../CWE-838/InappropriateEncoding.expected | 20 +- 65 files changed, 3297 insertions(+), 3297 deletions(-) diff --git a/csharp/ql/test/experimental/CWE-918/RequestForgery.expected b/csharp/ql/test/experimental/CWE-918/RequestForgery.expected index 4c499ad4be6..37cc9ded82c 100644 --- a/csharp/ql/test/experimental/CWE-918/RequestForgery.expected +++ b/csharp/ql/test/experimental/CWE-918/RequestForgery.expected @@ -1,5 +1,5 @@ edges -| RequestForgery.cs:12:52:12:54 | url : String | RequestForgery.cs:14:66:14:68 | access to parameter url | +| RequestForgery.cs:12:52:12:54 | url : String | RequestForgery.cs:14:66:14:68 | access to parameter url | provenance | | nodes | RequestForgery.cs:12:52:12:54 | url : String | semmle.label | url : String | | RequestForgery.cs:14:66:14:68 | access to parameter url | semmle.label | access to parameter url | diff --git a/csharp/ql/test/experimental/Security Features/CWE-759/HashWithoutSalt.expected b/csharp/ql/test/experimental/Security Features/CWE-759/HashWithoutSalt.expected index 0ee0a6b7f61..f3c1a8ed6c5 100644 --- a/csharp/ql/test/experimental/Security Features/CWE-759/HashWithoutSalt.expected +++ b/csharp/ql/test/experimental/Security Features/CWE-759/HashWithoutSalt.expected @@ -1,10 +1,10 @@ edges -| HashWithoutSalt.cs:18:28:18:105 | call to method ConvertStringToBinary : IBuffer | HashWithoutSalt.cs:20:49:20:56 | access to local variable passBuff | -| HashWithoutSalt.cs:18:70:18:77 | access to parameter password : String | HashWithoutSalt.cs:18:28:18:105 | call to method ConvertStringToBinary : IBuffer | -| HashWithoutSalt.cs:38:28:38:72 | call to method GetBytes : Byte[] | HashWithoutSalt.cs:39:51:39:59 | access to local variable passBytes | -| HashWithoutSalt.cs:38:64:38:71 | access to parameter password : String | HashWithoutSalt.cs:38:28:38:72 | call to method GetBytes : Byte[] | -| HashWithoutSalt.cs:70:28:70:72 | call to method GetBytes : Byte[] | HashWithoutSalt.cs:71:48:71:56 | access to local variable passBytes | -| HashWithoutSalt.cs:70:64:70:71 | access to parameter password : String | HashWithoutSalt.cs:70:28:70:72 | call to method GetBytes : Byte[] | +| HashWithoutSalt.cs:18:28:18:105 | call to method ConvertStringToBinary : IBuffer | HashWithoutSalt.cs:20:49:20:56 | access to local variable passBuff | provenance | | +| HashWithoutSalt.cs:18:70:18:77 | access to parameter password : String | HashWithoutSalt.cs:18:28:18:105 | call to method ConvertStringToBinary : IBuffer | provenance | | +| HashWithoutSalt.cs:38:28:38:72 | call to method GetBytes : Byte[] | HashWithoutSalt.cs:39:51:39:59 | access to local variable passBytes | provenance | | +| HashWithoutSalt.cs:38:64:38:71 | access to parameter password : String | HashWithoutSalt.cs:38:28:38:72 | call to method GetBytes : Byte[] | provenance | | +| HashWithoutSalt.cs:70:28:70:72 | call to method GetBytes : Byte[] | HashWithoutSalt.cs:71:48:71:56 | access to local variable passBytes | provenance | | +| HashWithoutSalt.cs:70:64:70:71 | access to parameter password : String | HashWithoutSalt.cs:70:28:70:72 | call to method GetBytes : Byte[] | provenance | | nodes | HashWithoutSalt.cs:18:28:18:105 | call to method ConvertStringToBinary : IBuffer | semmle.label | call to method ConvertStringToBinary : IBuffer | | HashWithoutSalt.cs:18:70:18:77 | access to parameter password : String | semmle.label | access to parameter password : String | diff --git a/csharp/ql/test/experimental/Security Features/backdoor/PotentialTimeBomb.expected b/csharp/ql/test/experimental/Security Features/backdoor/PotentialTimeBomb.expected index 512699c5398..812e1751048 100644 --- a/csharp/ql/test/experimental/Security Features/backdoor/PotentialTimeBomb.expected +++ b/csharp/ql/test/experimental/Security Features/backdoor/PotentialTimeBomb.expected @@ -7,14 +7,14 @@ nodes | test.cs:71:36:71:70 | call to method AddHours | semmle.label | call to method AddHours | subpaths edges -| test.cs:69:34:69:76 | call to method GetLastWriteTime : DateTime | test.cs:71:36:71:48 | access to local variable lastWriteTime | -| test.cs:71:13:71:71 | call to method CompareTo : Int32 | test.cs:71:13:71:76 | ... >= ... | -| test.cs:71:36:71:48 | access to local variable lastWriteTime | test.cs:71:13:71:71 | call to method CompareTo | -| test.cs:71:36:71:48 | access to local variable lastWriteTime | test.cs:71:13:71:71 | call to method CompareTo : Int32 | -| test.cs:71:36:71:48 | access to local variable lastWriteTime | test.cs:71:36:71:70 | call to method AddHours | -| test.cs:71:36:71:70 | call to method AddHours | test.cs:71:13:71:71 | call to method CompareTo | -| test.cs:71:36:71:70 | call to method AddHours | test.cs:71:13:71:71 | call to method CompareTo : Int32 | -| test.cs:71:36:71:70 | call to method AddHours | test.cs:71:36:71:70 | call to method AddHours | +| test.cs:69:34:69:76 | call to method GetLastWriteTime : DateTime | test.cs:71:36:71:48 | access to local variable lastWriteTime | provenance | | +| test.cs:71:13:71:71 | call to method CompareTo : Int32 | test.cs:71:13:71:76 | ... >= ... | provenance | | +| test.cs:71:36:71:48 | access to local variable lastWriteTime | test.cs:71:13:71:71 | call to method CompareTo | provenance | | +| test.cs:71:36:71:48 | access to local variable lastWriteTime | test.cs:71:13:71:71 | call to method CompareTo : Int32 | provenance | | +| test.cs:71:36:71:48 | access to local variable lastWriteTime | test.cs:71:36:71:70 | call to method AddHours | provenance | | +| test.cs:71:36:71:70 | call to method AddHours | test.cs:71:13:71:71 | call to method CompareTo | provenance | | +| test.cs:71:36:71:70 | call to method AddHours | test.cs:71:13:71:71 | call to method CompareTo : Int32 | provenance | | +| test.cs:71:36:71:70 | call to method AddHours | test.cs:71:36:71:70 | call to method AddHours | provenance | | #select | test.cs:71:9:74:9 | if (...) ... | test.cs:69:34:69:76 | call to method GetLastWriteTime : DateTime | test.cs:71:13:71:71 | call to method CompareTo | Possible TimeBomb logic triggered by an $@ that takes into account $@ from the $@ as part of the potential trigger. | test.cs:71:13:71:71 | call to method CompareTo | call to method CompareTo | test.cs:71:36:71:70 | call to method AddHours | offset | test.cs:69:34:69:76 | call to method GetLastWriteTime | last modification time of a file | | test.cs:71:9:74:9 | if (...) ... | test.cs:69:34:69:76 | call to method GetLastWriteTime : DateTime | test.cs:71:13:71:71 | call to method CompareTo : Int32 | Possible TimeBomb logic triggered by an $@ that takes into account $@ from the $@ as part of the potential trigger. | test.cs:71:13:71:71 | call to method CompareTo | call to method CompareTo | test.cs:71:36:71:70 | call to method AddHours | offset | test.cs:69:34:69:76 | call to method GetLastWriteTime | last modification time of a file | diff --git a/csharp/ql/test/library-tests/cil/dataflow/DataFlow.expected b/csharp/ql/test/library-tests/cil/dataflow/DataFlow.expected index 6d75d5ef041..e4c2f9af9ed 100644 --- a/csharp/ql/test/library-tests/cil/dataflow/DataFlow.expected +++ b/csharp/ql/test/library-tests/cil/dataflow/DataFlow.expected @@ -1,54 +1,54 @@ edges -| DataFlow.dll:0:0:0:0 | Parameter 1 of Taint1 : String | DataFlow.dll:0:0:0:0 | ldarg.1 : String | -| DataFlow.dll:0:0:0:0 | Parameter 1 of Taint1 : String | DataFlow.dll:0:0:0:0 | ldarg.1 : String | -| DataFlow.dll:0:0:0:0 | Parameter 1 of Taint2 : String | DataFlow.dll:0:0:0:0 | ldarg.1 : String | -| DataFlow.dll:0:0:0:0 | Parameter 1 of Taint3 : String | DataFlow.dll:0:0:0:0 | ldarg.1 : String | -| DataFlow.dll:0:0:0:0 | Parameter 1 of Taint5 : String | DataFlow.dll:0:0:0:0 | ldarg.1 : String | -| DataFlow.dll:0:0:0:0 | Parameter 1 of Taint6 : String | DataFlow.dll:0:0:0:0 | ldarg.1 : String | -| DataFlow.dll:0:0:0:0 | Parameter 1 of TaintIndirect : String | DataFlow.dll:0:0:0:0 | ldarg.1 : String | -| DataFlow.dll:0:0:0:0 | Parameter 2 of Taint1 : String | DataFlow.dll:0:0:0:0 | ldarg.2 : String | -| DataFlow.dll:0:0:0:0 | Parameter 2 of TaintIndirect : String | DataFlow.dll:0:0:0:0 | ldarg.2 : String | -| DataFlow.dll:0:0:0:0 | ldarg.1 : String | DataFlow.dll:0:0:0:0 | Parameter 1 of Taint1 : String | -| DataFlow.dll:0:0:0:0 | ldarg.1 : String | DataFlow.dll:0:0:0:0 | Parameter 1 of Taint5 : String | -| DataFlow.dll:0:0:0:0 | ldarg.1 : String | DataFlow.dll:0:0:0:0 | Parameter 1 of Taint6 : String | -| DataFlow.dll:0:0:0:0 | ldarg.1 : String | DataFlow.dll:0:0:0:0 | call : String | -| DataFlow.dll:0:0:0:0 | ldarg.1 : String | DataFlow.dll:0:0:0:0 | call : String | -| DataFlow.dll:0:0:0:0 | ldarg.1 : String | DataFlow.dll:0:0:0:0 | call : String | -| DataFlow.dll:0:0:0:0 | ldarg.1 : String | DataFlow.dll:0:0:0:0 | call : String | -| DataFlow.dll:0:0:0:0 | ldarg.2 : String | DataFlow.dll:0:0:0:0 | Parameter 2 of Taint1 : String | -| DataFlow.dll:0:0:0:0 | ldarg.2 : String | DataFlow.dll:0:0:0:0 | call : String | -| DataFlow.dll:0:0:0:0 | ldarg.2 : String | DataFlow.dll:0:0:0:0 | call : String | -| dataflow.cs:16:18:16:26 | "tainted" : String | dataflow.cs:16:18:16:37 | call to method ToString | -| dataflow.cs:18:27:18:27 | 2 : Int32 | dataflow.cs:18:18:18:31 | call to method Max | -| dataflow.cs:18:30:18:30 | 3 : Int32 | dataflow.cs:18:18:18:31 | call to method Max | -| dataflow.cs:19:29:19:31 | 0.5 : Double | dataflow.cs:19:18:19:32 | call to method Round | -| dataflow.cs:20:45:20:53 | "tainted" : String | dataflow.cs:20:18:20:54 | call to method GetFullPath | -| dataflow.cs:27:44:27:46 | 1 : Double | dataflow.cs:27:18:27:52 | call to method IEEERemainder | -| dataflow.cs:27:49:27:51 | 2 : Double | dataflow.cs:27:18:27:52 | call to method IEEERemainder | -| dataflow.cs:38:34:38:37 | "d1" : String | DataFlow.dll:0:0:0:0 | Parameter 1 of Taint1 : String | -| dataflow.cs:38:34:38:37 | "d1" : String | dataflow.cs:38:18:38:38 | call to method Taint1 | -| dataflow.cs:39:34:39:37 | "d2" : String | DataFlow.dll:0:0:0:0 | Parameter 1 of Taint2 : String | -| dataflow.cs:39:34:39:37 | "d2" : String | dataflow.cs:39:18:39:38 | call to method Taint2 | -| dataflow.cs:40:34:40:37 | "d3" : String | DataFlow.dll:0:0:0:0 | Parameter 1 of Taint3 : String | -| dataflow.cs:40:34:40:37 | "d3" : String | dataflow.cs:40:18:40:38 | call to method Taint3 | -| dataflow.cs:44:28:44:32 | "t1a" : String | DataFlow.dll:0:0:0:0 | Parameter 1 of Taint1 : String | -| dataflow.cs:44:28:44:32 | "t1a" : String | dataflow.cs:44:18:44:40 | call to method Taint1 | -| dataflow.cs:44:35:44:39 | "t1b" : String | DataFlow.dll:0:0:0:0 | Parameter 2 of Taint1 : String | -| dataflow.cs:44:35:44:39 | "t1b" : String | dataflow.cs:44:18:44:40 | call to method Taint1 | -| dataflow.cs:47:35:47:38 | "t6" : String | DataFlow.dll:0:0:0:0 | Parameter 1 of TaintIndirect : String | -| dataflow.cs:47:35:47:38 | "t6" : String | dataflow.cs:47:18:47:45 | call to method TaintIndirect | -| dataflow.cs:47:41:47:44 | "t6" : String | DataFlow.dll:0:0:0:0 | Parameter 2 of TaintIndirect : String | -| dataflow.cs:47:41:47:44 | "t6" : String | dataflow.cs:47:18:47:45 | call to method TaintIndirect | -| dataflow.cs:72:21:72:34 | call to method NullFunction : null | dataflow.cs:72:21:72:52 | ... ?? ... | -| dataflow.cs:72:39:72:52 | call to method IndirectNull : null | dataflow.cs:72:21:72:52 | ... ?? ... | -| dataflow.cs:87:31:87:44 | call to method NullFunction : null | dataflow.cs:87:24:87:51 | ... ? ... : ... | -| dataflow.cs:100:30:100:33 | null : null | dataflow.cs:72:39:72:52 | call to method IndirectNull : null | -| dataflow.cs:100:30:100:33 | null : null | dataflow.cs:106:20:106:33 | call to method IndirectNull | -| dataflow.cs:100:30:100:33 | null : null | dataflow.cs:106:20:106:33 | call to method IndirectNull : null | -| dataflow.cs:106:20:106:33 | call to method IndirectNull : null | dataflow.cs:108:16:108:16 | access to local variable x : null | -| dataflow.cs:107:23:107:26 | null : null | dataflow.cs:108:16:108:16 | access to local variable x : null | -| dataflow.cs:108:16:108:16 | access to local variable x : null | dataflow.cs:72:21:72:34 | call to method NullFunction : null | -| dataflow.cs:108:16:108:16 | access to local variable x : null | dataflow.cs:87:31:87:44 | call to method NullFunction : null | +| DataFlow.dll:0:0:0:0 | Parameter 1 of Taint1 : String | DataFlow.dll:0:0:0:0 | ldarg.1 : String | provenance | | +| DataFlow.dll:0:0:0:0 | Parameter 1 of Taint1 : String | DataFlow.dll:0:0:0:0 | ldarg.1 : String | provenance | | +| DataFlow.dll:0:0:0:0 | Parameter 1 of Taint2 : String | DataFlow.dll:0:0:0:0 | ldarg.1 : String | provenance | | +| DataFlow.dll:0:0:0:0 | Parameter 1 of Taint3 : String | DataFlow.dll:0:0:0:0 | ldarg.1 : String | provenance | | +| DataFlow.dll:0:0:0:0 | Parameter 1 of Taint5 : String | DataFlow.dll:0:0:0:0 | ldarg.1 : String | provenance | | +| DataFlow.dll:0:0:0:0 | Parameter 1 of Taint6 : String | DataFlow.dll:0:0:0:0 | ldarg.1 : String | provenance | | +| DataFlow.dll:0:0:0:0 | Parameter 1 of TaintIndirect : String | DataFlow.dll:0:0:0:0 | ldarg.1 : String | provenance | | +| DataFlow.dll:0:0:0:0 | Parameter 2 of Taint1 : String | DataFlow.dll:0:0:0:0 | ldarg.2 : String | provenance | | +| DataFlow.dll:0:0:0:0 | Parameter 2 of TaintIndirect : String | DataFlow.dll:0:0:0:0 | ldarg.2 : String | provenance | | +| DataFlow.dll:0:0:0:0 | ldarg.1 : String | DataFlow.dll:0:0:0:0 | Parameter 1 of Taint1 : String | provenance | | +| DataFlow.dll:0:0:0:0 | ldarg.1 : String | DataFlow.dll:0:0:0:0 | Parameter 1 of Taint5 : String | provenance | | +| DataFlow.dll:0:0:0:0 | ldarg.1 : String | DataFlow.dll:0:0:0:0 | Parameter 1 of Taint6 : String | provenance | | +| DataFlow.dll:0:0:0:0 | ldarg.1 : String | DataFlow.dll:0:0:0:0 | call : String | provenance | | +| DataFlow.dll:0:0:0:0 | ldarg.1 : String | DataFlow.dll:0:0:0:0 | call : String | provenance | | +| DataFlow.dll:0:0:0:0 | ldarg.1 : String | DataFlow.dll:0:0:0:0 | call : String | provenance | | +| DataFlow.dll:0:0:0:0 | ldarg.1 : String | DataFlow.dll:0:0:0:0 | call : String | provenance | | +| DataFlow.dll:0:0:0:0 | ldarg.2 : String | DataFlow.dll:0:0:0:0 | Parameter 2 of Taint1 : String | provenance | | +| DataFlow.dll:0:0:0:0 | ldarg.2 : String | DataFlow.dll:0:0:0:0 | call : String | provenance | | +| DataFlow.dll:0:0:0:0 | ldarg.2 : String | DataFlow.dll:0:0:0:0 | call : String | provenance | | +| dataflow.cs:16:18:16:26 | "tainted" : String | dataflow.cs:16:18:16:37 | call to method ToString | provenance | | +| dataflow.cs:18:27:18:27 | 2 : Int32 | dataflow.cs:18:18:18:31 | call to method Max | provenance | | +| dataflow.cs:18:30:18:30 | 3 : Int32 | dataflow.cs:18:18:18:31 | call to method Max | provenance | | +| dataflow.cs:19:29:19:31 | 0.5 : Double | dataflow.cs:19:18:19:32 | call to method Round | provenance | | +| dataflow.cs:20:45:20:53 | "tainted" : String | dataflow.cs:20:18:20:54 | call to method GetFullPath | provenance | | +| dataflow.cs:27:44:27:46 | 1 : Double | dataflow.cs:27:18:27:52 | call to method IEEERemainder | provenance | | +| dataflow.cs:27:49:27:51 | 2 : Double | dataflow.cs:27:18:27:52 | call to method IEEERemainder | provenance | | +| dataflow.cs:38:34:38:37 | "d1" : String | DataFlow.dll:0:0:0:0 | Parameter 1 of Taint1 : String | provenance | | +| dataflow.cs:38:34:38:37 | "d1" : String | dataflow.cs:38:18:38:38 | call to method Taint1 | provenance | | +| dataflow.cs:39:34:39:37 | "d2" : String | DataFlow.dll:0:0:0:0 | Parameter 1 of Taint2 : String | provenance | | +| dataflow.cs:39:34:39:37 | "d2" : String | dataflow.cs:39:18:39:38 | call to method Taint2 | provenance | | +| dataflow.cs:40:34:40:37 | "d3" : String | DataFlow.dll:0:0:0:0 | Parameter 1 of Taint3 : String | provenance | | +| dataflow.cs:40:34:40:37 | "d3" : String | dataflow.cs:40:18:40:38 | call to method Taint3 | provenance | | +| dataflow.cs:44:28:44:32 | "t1a" : String | DataFlow.dll:0:0:0:0 | Parameter 1 of Taint1 : String | provenance | | +| dataflow.cs:44:28:44:32 | "t1a" : String | dataflow.cs:44:18:44:40 | call to method Taint1 | provenance | | +| dataflow.cs:44:35:44:39 | "t1b" : String | DataFlow.dll:0:0:0:0 | Parameter 2 of Taint1 : String | provenance | | +| dataflow.cs:44:35:44:39 | "t1b" : String | dataflow.cs:44:18:44:40 | call to method Taint1 | provenance | | +| dataflow.cs:47:35:47:38 | "t6" : String | DataFlow.dll:0:0:0:0 | Parameter 1 of TaintIndirect : String | provenance | | +| dataflow.cs:47:35:47:38 | "t6" : String | dataflow.cs:47:18:47:45 | call to method TaintIndirect | provenance | | +| dataflow.cs:47:41:47:44 | "t6" : String | DataFlow.dll:0:0:0:0 | Parameter 2 of TaintIndirect : String | provenance | | +| dataflow.cs:47:41:47:44 | "t6" : String | dataflow.cs:47:18:47:45 | call to method TaintIndirect | provenance | | +| dataflow.cs:72:21:72:34 | call to method NullFunction : null | dataflow.cs:72:21:72:52 | ... ?? ... | provenance | | +| dataflow.cs:72:39:72:52 | call to method IndirectNull : null | dataflow.cs:72:21:72:52 | ... ?? ... | provenance | | +| dataflow.cs:87:31:87:44 | call to method NullFunction : null | dataflow.cs:87:24:87:51 | ... ? ... : ... | provenance | | +| dataflow.cs:100:30:100:33 | null : null | dataflow.cs:72:39:72:52 | call to method IndirectNull : null | provenance | | +| dataflow.cs:100:30:100:33 | null : null | dataflow.cs:106:20:106:33 | call to method IndirectNull | provenance | | +| dataflow.cs:100:30:100:33 | null : null | dataflow.cs:106:20:106:33 | call to method IndirectNull : null | provenance | | +| dataflow.cs:106:20:106:33 | call to method IndirectNull : null | dataflow.cs:108:16:108:16 | access to local variable x : null | provenance | | +| dataflow.cs:107:23:107:26 | null : null | dataflow.cs:108:16:108:16 | access to local variable x : null | provenance | | +| dataflow.cs:108:16:108:16 | access to local variable x : null | dataflow.cs:72:21:72:34 | call to method NullFunction : null | provenance | | +| dataflow.cs:108:16:108:16 | access to local variable x : null | dataflow.cs:87:31:87:44 | call to method NullFunction : null | provenance | | nodes | DataFlow.dll:0:0:0:0 | Parameter 1 of Taint1 : String | semmle.label | Parameter 1 of Taint1 : String | | DataFlow.dll:0:0:0:0 | Parameter 1 of Taint1 : String | semmle.label | Parameter 1 of Taint1 : String | diff --git a/csharp/ql/test/library-tests/csharp7/GlobalFlow.expected b/csharp/ql/test/library-tests/csharp7/GlobalFlow.expected index e858c24758d..59e0fb54c32 100644 --- a/csharp/ql/test/library-tests/csharp7/GlobalFlow.expected +++ b/csharp/ql/test/library-tests/csharp7/GlobalFlow.expected @@ -1,27 +1,27 @@ edges -| CSharp7.cs:39:9:39:21 | SSA def(x) : String | CSharp7.cs:49:22:49:23 | SSA def(t1) : String | -| CSharp7.cs:39:13:39:21 | "tainted" : String | CSharp7.cs:39:9:39:21 | SSA def(x) : String | -| CSharp7.cs:42:19:42:19 | x : String | CSharp7.cs:44:9:44:13 | SSA def(y) : String | -| CSharp7.cs:49:22:49:23 | SSA def(t1) : String | CSharp7.cs:51:18:51:19 | access to local variable t1 | -| CSharp7.cs:55:11:55:19 | "tainted" : String | CSharp7.cs:42:19:42:19 | x : String | -| CSharp7.cs:55:11:55:19 | "tainted" : String | CSharp7.cs:55:30:55:31 | SSA def(t4) : String | -| CSharp7.cs:55:30:55:31 | SSA def(t4) : String | CSharp7.cs:56:18:56:19 | access to local variable t4 | -| CSharp7.cs:80:21:80:21 | x : String | CSharp7.cs:82:20:82:20 | access to parameter x : String | -| CSharp7.cs:82:16:82:24 | (..., ...) : ValueTuple [field Item1] : String | CSharp7.cs:82:16:82:26 | access to field Item1 : String | -| CSharp7.cs:82:20:82:20 | access to parameter x : String | CSharp7.cs:82:16:82:24 | (..., ...) : ValueTuple [field Item1] : String | -| CSharp7.cs:87:18:87:34 | (..., ...) : ValueTuple [field Item1] : String | CSharp7.cs:90:20:90:21 | access to local variable t1 : ValueTuple [field Item1] : String | -| CSharp7.cs:87:19:87:27 | "tainted" : String | CSharp7.cs:87:18:87:34 | (..., ...) : ValueTuple [field Item1] : String | -| CSharp7.cs:90:20:90:21 | access to local variable t1 : ValueTuple [field Item1] : String | CSharp7.cs:90:20:90:27 | access to field Item1 : String | -| CSharp7.cs:90:20:90:27 | access to field Item1 : String | CSharp7.cs:80:21:80:21 | x : String | -| CSharp7.cs:90:20:90:27 | access to field Item1 : String | CSharp7.cs:90:18:90:28 | call to method I | -| CSharp7.cs:175:22:175:30 | "tainted" : String | CSharp7.cs:181:23:181:25 | access to local variable src : String | -| CSharp7.cs:175:22:175:30 | "tainted" : String | CSharp7.cs:182:23:182:25 | access to local variable src : String | -| CSharp7.cs:177:25:177:25 | s : String | CSharp7.cs:177:31:177:31 | access to parameter s : String | -| CSharp7.cs:178:25:178:25 | s : String | CSharp7.cs:178:37:178:37 | access to parameter s : String | -| CSharp7.cs:181:23:181:25 | access to local variable src : String | CSharp7.cs:177:25:177:25 | s : String | -| CSharp7.cs:181:23:181:25 | access to local variable src : String | CSharp7.cs:181:21:181:26 | call to local function g | -| CSharp7.cs:182:23:182:25 | access to local variable src : String | CSharp7.cs:178:25:178:25 | s : String | -| CSharp7.cs:182:23:182:25 | access to local variable src : String | CSharp7.cs:182:21:182:26 | call to local function h | +| CSharp7.cs:39:9:39:21 | SSA def(x) : String | CSharp7.cs:49:22:49:23 | SSA def(t1) : String | provenance | | +| CSharp7.cs:39:13:39:21 | "tainted" : String | CSharp7.cs:39:9:39:21 | SSA def(x) : String | provenance | | +| CSharp7.cs:42:19:42:19 | x : String | CSharp7.cs:44:9:44:13 | SSA def(y) : String | provenance | | +| CSharp7.cs:49:22:49:23 | SSA def(t1) : String | CSharp7.cs:51:18:51:19 | access to local variable t1 | provenance | | +| CSharp7.cs:55:11:55:19 | "tainted" : String | CSharp7.cs:42:19:42:19 | x : String | provenance | | +| CSharp7.cs:55:11:55:19 | "tainted" : String | CSharp7.cs:55:30:55:31 | SSA def(t4) : String | provenance | | +| CSharp7.cs:55:30:55:31 | SSA def(t4) : String | CSharp7.cs:56:18:56:19 | access to local variable t4 | provenance | | +| CSharp7.cs:80:21:80:21 | x : String | CSharp7.cs:82:20:82:20 | access to parameter x : String | provenance | | +| CSharp7.cs:82:16:82:24 | (..., ...) : ValueTuple [field Item1] : String | CSharp7.cs:82:16:82:26 | access to field Item1 : String | provenance | | +| CSharp7.cs:82:20:82:20 | access to parameter x : String | CSharp7.cs:82:16:82:24 | (..., ...) : ValueTuple [field Item1] : String | provenance | | +| CSharp7.cs:87:18:87:34 | (..., ...) : ValueTuple [field Item1] : String | CSharp7.cs:90:20:90:21 | access to local variable t1 : ValueTuple [field Item1] : String | provenance | | +| CSharp7.cs:87:19:87:27 | "tainted" : String | CSharp7.cs:87:18:87:34 | (..., ...) : ValueTuple [field Item1] : String | provenance | | +| CSharp7.cs:90:20:90:21 | access to local variable t1 : ValueTuple [field Item1] : String | CSharp7.cs:90:20:90:27 | access to field Item1 : String | provenance | | +| CSharp7.cs:90:20:90:27 | access to field Item1 : String | CSharp7.cs:80:21:80:21 | x : String | provenance | | +| CSharp7.cs:90:20:90:27 | access to field Item1 : String | CSharp7.cs:90:18:90:28 | call to method I | provenance | | +| CSharp7.cs:175:22:175:30 | "tainted" : String | CSharp7.cs:181:23:181:25 | access to local variable src : String | provenance | | +| CSharp7.cs:175:22:175:30 | "tainted" : String | CSharp7.cs:182:23:182:25 | access to local variable src : String | provenance | | +| CSharp7.cs:177:25:177:25 | s : String | CSharp7.cs:177:31:177:31 | access to parameter s : String | provenance | | +| CSharp7.cs:178:25:178:25 | s : String | CSharp7.cs:178:37:178:37 | access to parameter s : String | provenance | | +| CSharp7.cs:181:23:181:25 | access to local variable src : String | CSharp7.cs:177:25:177:25 | s : String | provenance | | +| CSharp7.cs:181:23:181:25 | access to local variable src : String | CSharp7.cs:181:21:181:26 | call to local function g | provenance | | +| CSharp7.cs:182:23:182:25 | access to local variable src : String | CSharp7.cs:178:25:178:25 | s : String | provenance | | +| CSharp7.cs:182:23:182:25 | access to local variable src : String | CSharp7.cs:182:21:182:26 | call to local function h | provenance | | nodes | CSharp7.cs:39:9:39:21 | SSA def(x) : String | semmle.label | SSA def(x) : String | | CSharp7.cs:39:13:39:21 | "tainted" : String | semmle.label | "tainted" : String | diff --git a/csharp/ql/test/library-tests/csharp7/GlobalTaintTracking.expected b/csharp/ql/test/library-tests/csharp7/GlobalTaintTracking.expected index 04bb7095ec9..2cc4eb58cf9 100644 --- a/csharp/ql/test/library-tests/csharp7/GlobalTaintTracking.expected +++ b/csharp/ql/test/library-tests/csharp7/GlobalTaintTracking.expected @@ -1,34 +1,34 @@ edges -| CSharp7.cs:39:9:39:21 | SSA def(x) : String | CSharp7.cs:49:22:49:23 | SSA def(t1) : String | -| CSharp7.cs:39:13:39:21 | "tainted" : String | CSharp7.cs:39:9:39:21 | SSA def(x) : String | -| CSharp7.cs:42:19:42:19 | x : String | CSharp7.cs:44:9:44:13 | SSA def(y) : String | -| CSharp7.cs:49:22:49:23 | SSA def(t1) : String | CSharp7.cs:51:18:51:19 | access to local variable t1 | -| CSharp7.cs:55:11:55:19 | "tainted" : String | CSharp7.cs:42:19:42:19 | x : String | -| CSharp7.cs:55:11:55:19 | "tainted" : String | CSharp7.cs:55:30:55:31 | SSA def(t4) : String | -| CSharp7.cs:55:30:55:31 | SSA def(t4) : String | CSharp7.cs:56:18:56:19 | access to local variable t4 | -| CSharp7.cs:80:21:80:21 | x : String | CSharp7.cs:82:20:82:20 | access to parameter x : String | -| CSharp7.cs:82:16:82:24 | (..., ...) : ValueTuple [field Item1] : String | CSharp7.cs:82:16:82:26 | access to field Item1 : String | -| CSharp7.cs:82:20:82:20 | access to parameter x : String | CSharp7.cs:82:16:82:24 | (..., ...) : ValueTuple [field Item1] : String | -| CSharp7.cs:87:18:87:34 | (..., ...) : ValueTuple [field Item1] : String | CSharp7.cs:90:20:90:21 | access to local variable t1 : ValueTuple [field Item1] : String | -| CSharp7.cs:87:19:87:27 | "tainted" : String | CSharp7.cs:87:18:87:34 | (..., ...) : ValueTuple [field Item1] : String | -| CSharp7.cs:90:20:90:21 | access to local variable t1 : ValueTuple [field Item1] : String | CSharp7.cs:90:20:90:27 | access to field Item1 : String | -| CSharp7.cs:90:20:90:27 | access to field Item1 : String | CSharp7.cs:80:21:80:21 | x : String | -| CSharp7.cs:90:20:90:27 | access to field Item1 : String | CSharp7.cs:90:18:90:28 | call to method I | -| CSharp7.cs:175:22:175:30 | "tainted" : String | CSharp7.cs:180:23:180:25 | access to local variable src : String | -| CSharp7.cs:175:22:175:30 | "tainted" : String | CSharp7.cs:181:23:181:25 | access to local variable src : String | -| CSharp7.cs:175:22:175:30 | "tainted" : String | CSharp7.cs:182:23:182:25 | access to local variable src : String | -| CSharp7.cs:176:25:176:25 | s : String | CSharp7.cs:176:33:176:33 | access to parameter s : String | -| CSharp7.cs:176:31:176:34 | call to local function g : String | CSharp7.cs:176:31:176:39 | ... + ... : String | -| CSharp7.cs:176:33:176:33 | access to parameter s : String | CSharp7.cs:176:31:176:34 | call to local function g : String | -| CSharp7.cs:176:33:176:33 | access to parameter s : String | CSharp7.cs:177:25:177:25 | s : String | -| CSharp7.cs:177:25:177:25 | s : String | CSharp7.cs:177:31:177:31 | access to parameter s : String | -| CSharp7.cs:178:25:178:25 | s : String | CSharp7.cs:178:37:178:37 | access to parameter s : String | -| CSharp7.cs:180:23:180:25 | access to local variable src : String | CSharp7.cs:176:25:176:25 | s : String | -| CSharp7.cs:180:23:180:25 | access to local variable src : String | CSharp7.cs:180:21:180:26 | call to local function f | -| CSharp7.cs:181:23:181:25 | access to local variable src : String | CSharp7.cs:177:25:177:25 | s : String | -| CSharp7.cs:181:23:181:25 | access to local variable src : String | CSharp7.cs:181:21:181:26 | call to local function g | -| CSharp7.cs:182:23:182:25 | access to local variable src : String | CSharp7.cs:178:25:178:25 | s : String | -| CSharp7.cs:182:23:182:25 | access to local variable src : String | CSharp7.cs:182:21:182:26 | call to local function h | +| CSharp7.cs:39:9:39:21 | SSA def(x) : String | CSharp7.cs:49:22:49:23 | SSA def(t1) : String | provenance | | +| CSharp7.cs:39:13:39:21 | "tainted" : String | CSharp7.cs:39:9:39:21 | SSA def(x) : String | provenance | | +| CSharp7.cs:42:19:42:19 | x : String | CSharp7.cs:44:9:44:13 | SSA def(y) : String | provenance | | +| CSharp7.cs:49:22:49:23 | SSA def(t1) : String | CSharp7.cs:51:18:51:19 | access to local variable t1 | provenance | | +| CSharp7.cs:55:11:55:19 | "tainted" : String | CSharp7.cs:42:19:42:19 | x : String | provenance | | +| CSharp7.cs:55:11:55:19 | "tainted" : String | CSharp7.cs:55:30:55:31 | SSA def(t4) : String | provenance | | +| CSharp7.cs:55:30:55:31 | SSA def(t4) : String | CSharp7.cs:56:18:56:19 | access to local variable t4 | provenance | | +| CSharp7.cs:80:21:80:21 | x : String | CSharp7.cs:82:20:82:20 | access to parameter x : String | provenance | | +| CSharp7.cs:82:16:82:24 | (..., ...) : ValueTuple [field Item1] : String | CSharp7.cs:82:16:82:26 | access to field Item1 : String | provenance | | +| CSharp7.cs:82:20:82:20 | access to parameter x : String | CSharp7.cs:82:16:82:24 | (..., ...) : ValueTuple [field Item1] : String | provenance | | +| CSharp7.cs:87:18:87:34 | (..., ...) : ValueTuple [field Item1] : String | CSharp7.cs:90:20:90:21 | access to local variable t1 : ValueTuple [field Item1] : String | provenance | | +| CSharp7.cs:87:19:87:27 | "tainted" : String | CSharp7.cs:87:18:87:34 | (..., ...) : ValueTuple [field Item1] : String | provenance | | +| CSharp7.cs:90:20:90:21 | access to local variable t1 : ValueTuple [field Item1] : String | CSharp7.cs:90:20:90:27 | access to field Item1 : String | provenance | | +| CSharp7.cs:90:20:90:27 | access to field Item1 : String | CSharp7.cs:80:21:80:21 | x : String | provenance | | +| CSharp7.cs:90:20:90:27 | access to field Item1 : String | CSharp7.cs:90:18:90:28 | call to method I | provenance | | +| CSharp7.cs:175:22:175:30 | "tainted" : String | CSharp7.cs:180:23:180:25 | access to local variable src : String | provenance | | +| CSharp7.cs:175:22:175:30 | "tainted" : String | CSharp7.cs:181:23:181:25 | access to local variable src : String | provenance | | +| CSharp7.cs:175:22:175:30 | "tainted" : String | CSharp7.cs:182:23:182:25 | access to local variable src : String | provenance | | +| CSharp7.cs:176:25:176:25 | s : String | CSharp7.cs:176:33:176:33 | access to parameter s : String | provenance | | +| CSharp7.cs:176:31:176:34 | call to local function g : String | CSharp7.cs:176:31:176:39 | ... + ... : String | provenance | | +| CSharp7.cs:176:33:176:33 | access to parameter s : String | CSharp7.cs:176:31:176:34 | call to local function g : String | provenance | | +| CSharp7.cs:176:33:176:33 | access to parameter s : String | CSharp7.cs:177:25:177:25 | s : String | provenance | | +| CSharp7.cs:177:25:177:25 | s : String | CSharp7.cs:177:31:177:31 | access to parameter s : String | provenance | | +| CSharp7.cs:178:25:178:25 | s : String | CSharp7.cs:178:37:178:37 | access to parameter s : String | provenance | | +| CSharp7.cs:180:23:180:25 | access to local variable src : String | CSharp7.cs:176:25:176:25 | s : String | provenance | | +| CSharp7.cs:180:23:180:25 | access to local variable src : String | CSharp7.cs:180:21:180:26 | call to local function f | provenance | | +| CSharp7.cs:181:23:181:25 | access to local variable src : String | CSharp7.cs:177:25:177:25 | s : String | provenance | | +| CSharp7.cs:181:23:181:25 | access to local variable src : String | CSharp7.cs:181:21:181:26 | call to local function g | provenance | | +| CSharp7.cs:182:23:182:25 | access to local variable src : String | CSharp7.cs:178:25:178:25 | s : String | provenance | | +| CSharp7.cs:182:23:182:25 | access to local variable src : String | CSharp7.cs:182:21:182:26 | call to local function h | provenance | | nodes | CSharp7.cs:39:9:39:21 | SSA def(x) : String | semmle.label | SSA def(x) : String | | CSharp7.cs:39:13:39:21 | "tainted" : String | semmle.label | "tainted" : String | diff --git a/csharp/ql/test/library-tests/dataflow/async/Async.expected b/csharp/ql/test/library-tests/dataflow/async/Async.expected index 4fd0136cda0..ed0395fff0b 100644 --- a/csharp/ql/test/library-tests/dataflow/async/Async.expected +++ b/csharp/ql/test/library-tests/dataflow/async/Async.expected @@ -1,39 +1,39 @@ edges -| Async.cs:9:37:9:41 | input : String | Async.cs:11:21:11:25 | access to parameter input : String | -| Async.cs:11:21:11:25 | access to parameter input : String | Async.cs:11:14:11:26 | call to method Return | -| Async.cs:11:21:11:25 | access to parameter input : String | Async.cs:14:34:14:34 | x : String | -| Async.cs:14:34:14:34 | x : String | Async.cs:16:16:16:16 | access to parameter x : String | -| Async.cs:14:34:14:34 | x : String | Async.cs:16:16:16:16 | access to parameter x : String | -| Async.cs:16:16:16:16 | access to parameter x : String | Async.cs:11:14:11:26 | call to method Return | -| Async.cs:19:41:19:45 | input : String | Async.cs:21:32:21:36 | access to parameter input : String | -| Async.cs:21:20:21:37 | call to method ReturnAwait : Task [property Result] : String | Async.cs:21:14:21:37 | await ... | -| Async.cs:21:32:21:36 | access to parameter input : String | Async.cs:21:20:21:37 | call to method ReturnAwait : Task [property Result] : String | -| Async.cs:21:32:21:36 | access to parameter input : String | Async.cs:35:51:35:51 | x : String | -| Async.cs:24:41:24:45 | input : String | Async.cs:26:35:26:39 | access to parameter input : String | -| Async.cs:26:17:26:40 | await ... : String | Async.cs:27:14:27:14 | access to local variable x | -| Async.cs:26:23:26:40 | call to method ReturnAwait : Task [property Result] : String | Async.cs:26:17:26:40 | await ... : String | -| Async.cs:26:35:26:39 | access to parameter input : String | Async.cs:26:23:26:40 | call to method ReturnAwait : Task [property Result] : String | -| Async.cs:26:35:26:39 | access to parameter input : String | Async.cs:35:51:35:51 | x : String | -| Async.cs:30:35:30:39 | input : String | Async.cs:32:27:32:31 | access to parameter input : String | -| Async.cs:32:14:32:32 | call to method ReturnAwait2 : Task [property Result] : String | Async.cs:32:14:32:39 | access to property Result | -| Async.cs:32:27:32:31 | access to parameter input : String | Async.cs:32:14:32:32 | call to method ReturnAwait2 : Task [property Result] : String | -| Async.cs:32:27:32:31 | access to parameter input : String | Async.cs:51:52:51:52 | x : String | -| Async.cs:35:51:35:51 | x : String | Async.cs:38:16:38:16 | access to parameter x : String | -| Async.cs:35:51:35:51 | x : String | Async.cs:38:16:38:16 | access to parameter x : String | -| Async.cs:38:16:38:16 | access to parameter x : String | Async.cs:21:20:21:37 | call to method ReturnAwait : Task [property Result] : String | -| Async.cs:38:16:38:16 | access to parameter x : String | Async.cs:26:23:26:40 | call to method ReturnAwait : Task [property Result] : String | -| Async.cs:41:33:41:37 | input : String | Async.cs:43:25:43:29 | access to parameter input : String | -| Async.cs:43:14:43:30 | call to method ReturnTask : Task [property Result] : String | Async.cs:43:14:43:37 | access to property Result | -| Async.cs:43:25:43:29 | access to parameter input : String | Async.cs:43:14:43:30 | call to method ReturnTask : Task [property Result] : String | -| Async.cs:43:25:43:29 | access to parameter input : String | Async.cs:46:44:46:44 | x : String | -| Async.cs:46:44:46:44 | x : String | Async.cs:48:32:48:32 | access to parameter x : String | -| Async.cs:46:44:46:44 | x : String | Async.cs:48:32:48:32 | access to parameter x : String | -| Async.cs:48:16:48:33 | call to method FromResult : Task [property Result] : String | Async.cs:43:14:43:30 | call to method ReturnTask : Task [property Result] : String | -| Async.cs:48:32:48:32 | access to parameter x : String | Async.cs:48:16:48:33 | call to method FromResult : Task [property Result] : String | -| Async.cs:48:32:48:32 | access to parameter x : String | Async.cs:48:16:48:33 | call to method FromResult : Task [property Result] : String | -| Async.cs:51:52:51:52 | x : String | Async.cs:51:58:51:58 | access to parameter x : String | -| Async.cs:51:52:51:52 | x : String | Async.cs:51:58:51:58 | access to parameter x : String | -| Async.cs:51:58:51:58 | access to parameter x : String | Async.cs:32:14:32:32 | call to method ReturnAwait2 : Task [property Result] : String | +| Async.cs:9:37:9:41 | input : String | Async.cs:11:21:11:25 | access to parameter input : String | provenance | | +| Async.cs:11:21:11:25 | access to parameter input : String | Async.cs:11:14:11:26 | call to method Return | provenance | | +| Async.cs:11:21:11:25 | access to parameter input : String | Async.cs:14:34:14:34 | x : String | provenance | | +| Async.cs:14:34:14:34 | x : String | Async.cs:16:16:16:16 | access to parameter x : String | provenance | | +| Async.cs:14:34:14:34 | x : String | Async.cs:16:16:16:16 | access to parameter x : String | provenance | | +| Async.cs:16:16:16:16 | access to parameter x : String | Async.cs:11:14:11:26 | call to method Return | provenance | | +| Async.cs:19:41:19:45 | input : String | Async.cs:21:32:21:36 | access to parameter input : String | provenance | | +| Async.cs:21:20:21:37 | call to method ReturnAwait : Task [property Result] : String | Async.cs:21:14:21:37 | await ... | provenance | | +| Async.cs:21:32:21:36 | access to parameter input : String | Async.cs:21:20:21:37 | call to method ReturnAwait : Task [property Result] : String | provenance | | +| Async.cs:21:32:21:36 | access to parameter input : String | Async.cs:35:51:35:51 | x : String | provenance | | +| Async.cs:24:41:24:45 | input : String | Async.cs:26:35:26:39 | access to parameter input : String | provenance | | +| Async.cs:26:17:26:40 | await ... : String | Async.cs:27:14:27:14 | access to local variable x | provenance | | +| Async.cs:26:23:26:40 | call to method ReturnAwait : Task [property Result] : String | Async.cs:26:17:26:40 | await ... : String | provenance | | +| Async.cs:26:35:26:39 | access to parameter input : String | Async.cs:26:23:26:40 | call to method ReturnAwait : Task [property Result] : String | provenance | | +| Async.cs:26:35:26:39 | access to parameter input : String | Async.cs:35:51:35:51 | x : String | provenance | | +| Async.cs:30:35:30:39 | input : String | Async.cs:32:27:32:31 | access to parameter input : String | provenance | | +| Async.cs:32:14:32:32 | call to method ReturnAwait2 : Task [property Result] : String | Async.cs:32:14:32:39 | access to property Result | provenance | | +| Async.cs:32:27:32:31 | access to parameter input : String | Async.cs:32:14:32:32 | call to method ReturnAwait2 : Task [property Result] : String | provenance | | +| Async.cs:32:27:32:31 | access to parameter input : String | Async.cs:51:52:51:52 | x : String | provenance | | +| Async.cs:35:51:35:51 | x : String | Async.cs:38:16:38:16 | access to parameter x : String | provenance | | +| Async.cs:35:51:35:51 | x : String | Async.cs:38:16:38:16 | access to parameter x : String | provenance | | +| Async.cs:38:16:38:16 | access to parameter x : String | Async.cs:21:20:21:37 | call to method ReturnAwait : Task [property Result] : String | provenance | | +| Async.cs:38:16:38:16 | access to parameter x : String | Async.cs:26:23:26:40 | call to method ReturnAwait : Task [property Result] : String | provenance | | +| Async.cs:41:33:41:37 | input : String | Async.cs:43:25:43:29 | access to parameter input : String | provenance | | +| Async.cs:43:14:43:30 | call to method ReturnTask : Task [property Result] : String | Async.cs:43:14:43:37 | access to property Result | provenance | | +| Async.cs:43:25:43:29 | access to parameter input : String | Async.cs:43:14:43:30 | call to method ReturnTask : Task [property Result] : String | provenance | | +| Async.cs:43:25:43:29 | access to parameter input : String | Async.cs:46:44:46:44 | x : String | provenance | | +| Async.cs:46:44:46:44 | x : String | Async.cs:48:32:48:32 | access to parameter x : String | provenance | | +| Async.cs:46:44:46:44 | x : String | Async.cs:48:32:48:32 | access to parameter x : String | provenance | | +| Async.cs:48:16:48:33 | call to method FromResult : Task [property Result] : String | Async.cs:43:14:43:30 | call to method ReturnTask : Task [property Result] : String | provenance | | +| Async.cs:48:32:48:32 | access to parameter x : String | Async.cs:48:16:48:33 | call to method FromResult : Task [property Result] : String | provenance | | +| Async.cs:48:32:48:32 | access to parameter x : String | Async.cs:48:16:48:33 | call to method FromResult : Task [property Result] : String | provenance | | +| Async.cs:51:52:51:52 | x : String | Async.cs:51:58:51:58 | access to parameter x : String | provenance | | +| Async.cs:51:52:51:52 | x : String | Async.cs:51:58:51:58 | access to parameter x : String | provenance | | +| Async.cs:51:58:51:58 | access to parameter x : String | Async.cs:32:14:32:32 | call to method ReturnAwait2 : Task [property Result] : String | provenance | | nodes | Async.cs:9:37:9:41 | input : String | semmle.label | input : String | | Async.cs:11:14:11:26 | call to method Return | semmle.label | call to method Return | diff --git a/csharp/ql/test/library-tests/dataflow/call-sensitivity/CallSensitivityFlow.expected b/csharp/ql/test/library-tests/dataflow/call-sensitivity/CallSensitivityFlow.expected index c7cc4c5f45f..daf679b629a 100644 --- a/csharp/ql/test/library-tests/dataflow/call-sensitivity/CallSensitivityFlow.expected +++ b/csharp/ql/test/library-tests/dataflow/call-sensitivity/CallSensitivityFlow.expected @@ -1,46 +1,46 @@ edges -| CallSensitivityFlow.cs:7:38:7:38 | o : Object | CallSensitivityFlow.cs:11:20:11:20 | access to parameter o : Object | -| CallSensitivityFlow.cs:7:38:7:38 | o : Object | CallSensitivityFlow.cs:11:20:11:20 | access to parameter o : Object | -| CallSensitivityFlow.cs:19:39:19:39 | o : Object | CallSensitivityFlow.cs:23:18:23:18 | access to parameter o | -| CallSensitivityFlow.cs:27:40:27:40 | o : Object | CallSensitivityFlow.cs:31:18:31:18 | access to parameter o | -| CallSensitivityFlow.cs:27:40:27:40 | o : Object | CallSensitivityFlow.cs:31:18:31:18 | access to parameter o | -| CallSensitivityFlow.cs:35:41:35:41 | o : Object | CallSensitivityFlow.cs:39:18:39:18 | [cond (line 35): true] access to parameter o | -| CallSensitivityFlow.cs:43:45:43:45 | o : Object | CallSensitivityFlow.cs:53:14:53:15 | access to local variable o3 | -| CallSensitivityFlow.cs:56:46:56:46 | o : Object | CallSensitivityFlow.cs:66:14:66:15 | access to local variable o3 | -| CallSensitivityFlow.cs:56:46:56:46 | o : Object | CallSensitivityFlow.cs:66:14:66:15 | access to local variable o3 | -| CallSensitivityFlow.cs:56:46:56:46 | o : Object | CallSensitivityFlow.cs:66:14:66:15 | access to local variable o3 | -| CallSensitivityFlow.cs:56:46:56:46 | o : Object | CallSensitivityFlow.cs:66:14:66:15 | access to local variable o3 | -| CallSensitivityFlow.cs:78:24:78:35 | object creation of type Object : Object | CallSensitivityFlow.cs:19:39:19:39 | o : Object | -| CallSensitivityFlow.cs:79:25:79:36 | object creation of type Object : Object | CallSensitivityFlow.cs:27:40:27:40 | o : Object | -| CallSensitivityFlow.cs:80:26:80:37 | object creation of type Object : Object | CallSensitivityFlow.cs:35:41:35:41 | o : Object | -| CallSensitivityFlow.cs:81:30:81:41 | object creation of type Object : Object | CallSensitivityFlow.cs:43:45:43:45 | o : Object | -| CallSensitivityFlow.cs:82:31:82:42 | object creation of type Object : Object | CallSensitivityFlow.cs:56:46:56:46 | o : Object | -| CallSensitivityFlow.cs:83:31:83:42 | object creation of type Object : Object | CallSensitivityFlow.cs:56:46:56:46 | o : Object | -| CallSensitivityFlow.cs:84:31:84:42 | object creation of type Object : Object | CallSensitivityFlow.cs:56:46:56:46 | o : Object | -| CallSensitivityFlow.cs:85:26:85:37 | object creation of type Object : Object | CallSensitivityFlow.cs:7:38:7:38 | o : Object | -| CallSensitivityFlow.cs:85:26:85:37 | object creation of type Object : Object | CallSensitivityFlow.cs:85:14:85:44 | call to method FlowThrough | -| CallSensitivityFlow.cs:87:31:87:42 | object creation of type Object : Object | CallSensitivityFlow.cs:56:46:56:46 | o : Object | -| CallSensitivityFlow.cs:101:24:101:35 | object creation of type Object : Object | CallSensitivityFlow.cs:19:39:19:39 | o : Object | -| CallSensitivityFlow.cs:102:25:102:36 | object creation of type Object : Object | CallSensitivityFlow.cs:27:40:27:40 | o : Object | -| CallSensitivityFlow.cs:103:26:103:37 | object creation of type Object : Object | CallSensitivityFlow.cs:35:41:35:41 | o : Object | -| CallSensitivityFlow.cs:104:30:104:41 | object creation of type Object : Object | CallSensitivityFlow.cs:43:45:43:45 | o : Object | -| CallSensitivityFlow.cs:105:26:105:37 | object creation of type Object : Object | CallSensitivityFlow.cs:7:38:7:38 | o : Object | -| CallSensitivityFlow.cs:105:26:105:37 | object creation of type Object : Object | CallSensitivityFlow.cs:105:14:105:41 | call to method FlowThrough | -| CallSensitivityFlow.cs:117:26:117:37 | object creation of type Object : Object | CallSensitivityFlow.cs:124:43:124:43 | o : Object | -| CallSensitivityFlow.cs:118:27:118:38 | object creation of type Object : Object | CallSensitivityFlow.cs:132:44:132:44 | o : Object | -| CallSensitivityFlow.cs:119:32:119:43 | object creation of type Object : Object | CallSensitivityFlow.cs:140:49:140:49 | o : Object | -| CallSensitivityFlow.cs:124:43:124:43 | o : Object | CallSensitivityFlow.cs:128:22:128:22 | access to parameter o | -| CallSensitivityFlow.cs:132:44:132:44 | o : Object | CallSensitivityFlow.cs:136:22:136:22 | access to parameter o | -| CallSensitivityFlow.cs:140:49:140:49 | o : Object | CallSensitivityFlow.cs:150:18:150:19 | access to local variable o3 | -| CallSensitivityFlow.cs:162:34:162:34 | o : Object | CallSensitivityFlow.cs:164:14:164:14 | access to parameter o | -| CallSensitivityFlow.cs:167:44:167:44 | o : Object | CallSensitivityFlow.cs:169:14:169:14 | access to parameter o : Object | -| CallSensitivityFlow.cs:169:14:169:14 | access to parameter o : Object | CallSensitivityFlow.cs:162:34:162:34 | o : Object | -| CallSensitivityFlow.cs:172:37:172:48 | object creation of type Object : Object | CallSensitivityFlow.cs:174:45:174:53 | call to method MOut : Object | -| CallSensitivityFlow.cs:174:45:174:53 | call to method MOut : Object | CallSensitivityFlow.cs:187:17:187:30 | call to method CallMOut : Object | -| CallSensitivityFlow.cs:182:21:182:32 | object creation of type Object : Object | CallSensitivityFlow.cs:205:40:205:40 | o : Object | -| CallSensitivityFlow.cs:185:21:185:32 | object creation of type Object : Object | CallSensitivityFlow.cs:167:44:167:44 | o : Object | -| CallSensitivityFlow.cs:187:17:187:30 | call to method CallMOut : Object | CallSensitivityFlow.cs:188:14:188:14 | access to local variable o | -| CallSensitivityFlow.cs:205:40:205:40 | o : Object | CallSensitivityFlow.cs:208:18:208:18 | access to parameter o | +| CallSensitivityFlow.cs:7:38:7:38 | o : Object | CallSensitivityFlow.cs:11:20:11:20 | access to parameter o : Object | provenance | | +| CallSensitivityFlow.cs:7:38:7:38 | o : Object | CallSensitivityFlow.cs:11:20:11:20 | access to parameter o : Object | provenance | | +| CallSensitivityFlow.cs:19:39:19:39 | o : Object | CallSensitivityFlow.cs:23:18:23:18 | access to parameter o | provenance | | +| CallSensitivityFlow.cs:27:40:27:40 | o : Object | CallSensitivityFlow.cs:31:18:31:18 | access to parameter o | provenance | | +| CallSensitivityFlow.cs:27:40:27:40 | o : Object | CallSensitivityFlow.cs:31:18:31:18 | access to parameter o | provenance | | +| CallSensitivityFlow.cs:35:41:35:41 | o : Object | CallSensitivityFlow.cs:39:18:39:18 | [cond (line 35): true] access to parameter o | provenance | | +| CallSensitivityFlow.cs:43:45:43:45 | o : Object | CallSensitivityFlow.cs:53:14:53:15 | access to local variable o3 | provenance | | +| CallSensitivityFlow.cs:56:46:56:46 | o : Object | CallSensitivityFlow.cs:66:14:66:15 | access to local variable o3 | provenance | | +| CallSensitivityFlow.cs:56:46:56:46 | o : Object | CallSensitivityFlow.cs:66:14:66:15 | access to local variable o3 | provenance | | +| CallSensitivityFlow.cs:56:46:56:46 | o : Object | CallSensitivityFlow.cs:66:14:66:15 | access to local variable o3 | provenance | | +| CallSensitivityFlow.cs:56:46:56:46 | o : Object | CallSensitivityFlow.cs:66:14:66:15 | access to local variable o3 | provenance | | +| CallSensitivityFlow.cs:78:24:78:35 | object creation of type Object : Object | CallSensitivityFlow.cs:19:39:19:39 | o : Object | provenance | | +| CallSensitivityFlow.cs:79:25:79:36 | object creation of type Object : Object | CallSensitivityFlow.cs:27:40:27:40 | o : Object | provenance | | +| CallSensitivityFlow.cs:80:26:80:37 | object creation of type Object : Object | CallSensitivityFlow.cs:35:41:35:41 | o : Object | provenance | | +| CallSensitivityFlow.cs:81:30:81:41 | object creation of type Object : Object | CallSensitivityFlow.cs:43:45:43:45 | o : Object | provenance | | +| CallSensitivityFlow.cs:82:31:82:42 | object creation of type Object : Object | CallSensitivityFlow.cs:56:46:56:46 | o : Object | provenance | | +| CallSensitivityFlow.cs:83:31:83:42 | object creation of type Object : Object | CallSensitivityFlow.cs:56:46:56:46 | o : Object | provenance | | +| CallSensitivityFlow.cs:84:31:84:42 | object creation of type Object : Object | CallSensitivityFlow.cs:56:46:56:46 | o : Object | provenance | | +| CallSensitivityFlow.cs:85:26:85:37 | object creation of type Object : Object | CallSensitivityFlow.cs:7:38:7:38 | o : Object | provenance | | +| CallSensitivityFlow.cs:85:26:85:37 | object creation of type Object : Object | CallSensitivityFlow.cs:85:14:85:44 | call to method FlowThrough | provenance | | +| CallSensitivityFlow.cs:87:31:87:42 | object creation of type Object : Object | CallSensitivityFlow.cs:56:46:56:46 | o : Object | provenance | | +| CallSensitivityFlow.cs:101:24:101:35 | object creation of type Object : Object | CallSensitivityFlow.cs:19:39:19:39 | o : Object | provenance | | +| CallSensitivityFlow.cs:102:25:102:36 | object creation of type Object : Object | CallSensitivityFlow.cs:27:40:27:40 | o : Object | provenance | | +| CallSensitivityFlow.cs:103:26:103:37 | object creation of type Object : Object | CallSensitivityFlow.cs:35:41:35:41 | o : Object | provenance | | +| CallSensitivityFlow.cs:104:30:104:41 | object creation of type Object : Object | CallSensitivityFlow.cs:43:45:43:45 | o : Object | provenance | | +| CallSensitivityFlow.cs:105:26:105:37 | object creation of type Object : Object | CallSensitivityFlow.cs:7:38:7:38 | o : Object | provenance | | +| CallSensitivityFlow.cs:105:26:105:37 | object creation of type Object : Object | CallSensitivityFlow.cs:105:14:105:41 | call to method FlowThrough | provenance | | +| CallSensitivityFlow.cs:117:26:117:37 | object creation of type Object : Object | CallSensitivityFlow.cs:124:43:124:43 | o : Object | provenance | | +| CallSensitivityFlow.cs:118:27:118:38 | object creation of type Object : Object | CallSensitivityFlow.cs:132:44:132:44 | o : Object | provenance | | +| CallSensitivityFlow.cs:119:32:119:43 | object creation of type Object : Object | CallSensitivityFlow.cs:140:49:140:49 | o : Object | provenance | | +| CallSensitivityFlow.cs:124:43:124:43 | o : Object | CallSensitivityFlow.cs:128:22:128:22 | access to parameter o | provenance | | +| CallSensitivityFlow.cs:132:44:132:44 | o : Object | CallSensitivityFlow.cs:136:22:136:22 | access to parameter o | provenance | | +| CallSensitivityFlow.cs:140:49:140:49 | o : Object | CallSensitivityFlow.cs:150:18:150:19 | access to local variable o3 | provenance | | +| CallSensitivityFlow.cs:162:34:162:34 | o : Object | CallSensitivityFlow.cs:164:14:164:14 | access to parameter o | provenance | | +| CallSensitivityFlow.cs:167:44:167:44 | o : Object | CallSensitivityFlow.cs:169:14:169:14 | access to parameter o : Object | provenance | | +| CallSensitivityFlow.cs:169:14:169:14 | access to parameter o : Object | CallSensitivityFlow.cs:162:34:162:34 | o : Object | provenance | | +| CallSensitivityFlow.cs:172:37:172:48 | object creation of type Object : Object | CallSensitivityFlow.cs:174:45:174:53 | call to method MOut : Object | provenance | | +| CallSensitivityFlow.cs:174:45:174:53 | call to method MOut : Object | CallSensitivityFlow.cs:187:17:187:30 | call to method CallMOut : Object | provenance | | +| CallSensitivityFlow.cs:182:21:182:32 | object creation of type Object : Object | CallSensitivityFlow.cs:205:40:205:40 | o : Object | provenance | | +| CallSensitivityFlow.cs:185:21:185:32 | object creation of type Object : Object | CallSensitivityFlow.cs:167:44:167:44 | o : Object | provenance | | +| CallSensitivityFlow.cs:187:17:187:30 | call to method CallMOut : Object | CallSensitivityFlow.cs:188:14:188:14 | access to local variable o | provenance | | +| CallSensitivityFlow.cs:205:40:205:40 | o : Object | CallSensitivityFlow.cs:208:18:208:18 | access to parameter o | provenance | | nodes | CallSensitivityFlow.cs:7:38:7:38 | o : Object | semmle.label | o : Object | | CallSensitivityFlow.cs:7:38:7:38 | o : Object | semmle.label | o : Object | diff --git a/csharp/ql/test/library-tests/dataflow/collections/CollectionFlow.expected b/csharp/ql/test/library-tests/dataflow/collections/CollectionFlow.expected index 4ecd3771cbf..2aadd5b0bbf 100644 --- a/csharp/ql/test/library-tests/dataflow/collections/CollectionFlow.expected +++ b/csharp/ql/test/library-tests/dataflow/collections/CollectionFlow.expected @@ -1,278 +1,278 @@ edges -| CollectionFlow.cs:14:40:14:41 | ts : A[] [element] : A | CollectionFlow.cs:14:52:14:53 | access to parameter ts : A[] [element] : A | -| CollectionFlow.cs:14:40:14:41 | ts : null [element] : A | CollectionFlow.cs:14:52:14:53 | access to parameter ts : null [element] : A | -| CollectionFlow.cs:14:52:14:53 | access to parameter ts : A[] [element] : A | CollectionFlow.cs:14:52:14:56 | access to array element | -| CollectionFlow.cs:14:52:14:53 | access to parameter ts : null [element] : A | CollectionFlow.cs:14:52:14:56 | access to array element | -| CollectionFlow.cs:16:49:16:52 | list : List [element] : A | CollectionFlow.cs:16:63:16:66 | access to parameter list : List [element] : A | -| CollectionFlow.cs:16:49:16:52 | list : List [element] : A | CollectionFlow.cs:16:63:16:66 | access to parameter list : List [element] : A | -| CollectionFlow.cs:16:49:16:52 | list : List [element] : A | CollectionFlow.cs:16:63:16:66 | access to parameter list : List [element] : A | -| CollectionFlow.cs:16:49:16:52 | list : List [element] : A | CollectionFlow.cs:16:63:16:66 | access to parameter list : List [element] : A | -| CollectionFlow.cs:16:63:16:66 | access to parameter list : List [element] : A | CollectionFlow.cs:16:63:16:69 | access to indexer | -| CollectionFlow.cs:16:63:16:66 | access to parameter list : List [element] : A | CollectionFlow.cs:16:63:16:69 | access to indexer | -| CollectionFlow.cs:16:63:16:66 | access to parameter list : List [element] : A | CollectionFlow.cs:16:63:16:69 | access to indexer | -| CollectionFlow.cs:16:63:16:66 | access to parameter list : List [element] : A | CollectionFlow.cs:16:63:16:69 | access to indexer | -| CollectionFlow.cs:18:61:18:64 | dict : Dictionary [element, property Value] : A | CollectionFlow.cs:18:75:18:78 | access to parameter dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:18:75:18:78 | access to parameter dict : Dictionary [element, property Value] : A | CollectionFlow.cs:18:75:18:81 | access to indexer | -| CollectionFlow.cs:20:59:20:62 | dict : Dictionary [element, property Key] : A | CollectionFlow.cs:20:73:20:76 | access to parameter dict : Dictionary [element, property Key] : A | -| CollectionFlow.cs:20:73:20:76 | access to parameter dict : Dictionary [element, property Key] : A | CollectionFlow.cs:20:73:20:81 | access to property Keys : ICollection [element] : A | -| CollectionFlow.cs:20:73:20:81 | access to property Keys : ICollection [element] : A | CollectionFlow.cs:20:73:20:89 | call to method First | -| CollectionFlow.cs:22:34:22:35 | ts : A[] [element] : A | CollectionFlow.cs:22:41:22:42 | access to parameter ts : A[] [element] : A | -| CollectionFlow.cs:22:34:22:35 | ts : null [element] : A | CollectionFlow.cs:22:41:22:42 | access to parameter ts : null [element] : A | -| CollectionFlow.cs:22:41:22:42 | access to parameter ts : A[] [element] : A | CollectionFlow.cs:22:41:22:45 | access to array element : A | -| CollectionFlow.cs:22:41:22:42 | access to parameter ts : null [element] : A | CollectionFlow.cs:22:41:22:45 | access to array element : A | -| CollectionFlow.cs:24:43:24:46 | list : List [element] : A | CollectionFlow.cs:24:52:24:55 | access to parameter list : List [element] : A | -| CollectionFlow.cs:24:43:24:46 | list : List [element] : A | CollectionFlow.cs:24:52:24:55 | access to parameter list : List [element] : A | -| CollectionFlow.cs:24:43:24:46 | list : List [element] : A | CollectionFlow.cs:24:52:24:55 | access to parameter list : List [element] : A | -| CollectionFlow.cs:24:43:24:46 | list : List [element] : A | CollectionFlow.cs:24:52:24:55 | access to parameter list : List [element] : A | -| CollectionFlow.cs:24:52:24:55 | access to parameter list : List [element] : A | CollectionFlow.cs:24:52:24:58 | access to indexer : A | -| CollectionFlow.cs:24:52:24:55 | access to parameter list : List [element] : A | CollectionFlow.cs:24:52:24:58 | access to indexer : A | -| CollectionFlow.cs:24:52:24:55 | access to parameter list : List [element] : A | CollectionFlow.cs:24:52:24:58 | access to indexer : A | -| CollectionFlow.cs:24:52:24:55 | access to parameter list : List [element] : A | CollectionFlow.cs:24:52:24:58 | access to indexer : A | -| CollectionFlow.cs:26:58:26:61 | dict : Dictionary [element, property Value] : A | CollectionFlow.cs:26:67:26:70 | access to parameter dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:26:67:26:70 | access to parameter dict : Dictionary [element, property Value] : A | CollectionFlow.cs:26:67:26:73 | access to indexer : A | -| CollectionFlow.cs:28:59:28:62 | dict : Dictionary [element, property Value] : A | CollectionFlow.cs:28:68:28:71 | access to parameter dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:28:68:28:71 | access to parameter dict : Dictionary [element, property Value] : A | CollectionFlow.cs:28:68:28:79 | call to method First> : KeyValuePair [property Value] : A | -| CollectionFlow.cs:28:68:28:79 | call to method First> : KeyValuePair [property Value] : A | CollectionFlow.cs:28:68:28:85 | access to property Value : A | -| CollectionFlow.cs:30:60:30:63 | dict : Dictionary [element, property Value] : A | CollectionFlow.cs:30:69:30:72 | access to parameter dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:30:69:30:72 | access to parameter dict : Dictionary [element, property Value] : A | CollectionFlow.cs:30:69:30:79 | access to property Values : ICollection [element] : A | -| CollectionFlow.cs:30:69:30:79 | access to property Values : ICollection [element] : A | CollectionFlow.cs:30:69:30:87 | call to method First : A | -| CollectionFlow.cs:32:58:32:61 | dict : Dictionary [element, property Key] : A | CollectionFlow.cs:32:67:32:70 | access to parameter dict : Dictionary [element, property Key] : A | -| CollectionFlow.cs:32:67:32:70 | access to parameter dict : Dictionary [element, property Key] : A | CollectionFlow.cs:32:67:32:75 | access to property Keys : ICollection [element] : A | -| CollectionFlow.cs:32:67:32:75 | access to property Keys : ICollection [element] : A | CollectionFlow.cs:32:67:32:83 | call to method First : A | -| CollectionFlow.cs:34:57:34:60 | dict : Dictionary [element, property Key] : A | CollectionFlow.cs:34:66:34:69 | access to parameter dict : Dictionary [element, property Key] : A | -| CollectionFlow.cs:34:66:34:69 | access to parameter dict : Dictionary [element, property Key] : A | CollectionFlow.cs:34:66:34:77 | call to method First> : KeyValuePair [property Key] : A | -| CollectionFlow.cs:34:66:34:77 | call to method First> : KeyValuePair [property Key] : A | CollectionFlow.cs:34:66:34:81 | access to property Key : A | -| CollectionFlow.cs:36:49:36:52 | args : A[] [element] : A | CollectionFlow.cs:36:63:36:66 | access to parameter args : A[] [element] : A | -| CollectionFlow.cs:36:49:36:52 | args : null [element] : A | CollectionFlow.cs:36:63:36:66 | access to parameter args : null [element] : A | -| CollectionFlow.cs:36:63:36:66 | access to parameter args : A[] [element] : A | CollectionFlow.cs:36:63:36:69 | access to array element | -| CollectionFlow.cs:36:63:36:66 | access to parameter args : null [element] : A | CollectionFlow.cs:36:63:36:69 | access to array element | -| CollectionFlow.cs:40:17:40:23 | object creation of type A : A | CollectionFlow.cs:41:27:41:27 | access to local variable a : A | -| CollectionFlow.cs:41:25:41:29 | { ..., ... } : null [element] : A | CollectionFlow.cs:42:14:42:16 | access to local variable as : null [element] : A | -| CollectionFlow.cs:41:25:41:29 | { ..., ... } : null [element] : A | CollectionFlow.cs:43:18:43:20 | access to local variable as : null [element] : A | -| CollectionFlow.cs:41:25:41:29 | { ..., ... } : null [element] : A | CollectionFlow.cs:44:20:44:22 | access to local variable as : null [element] : A | -| CollectionFlow.cs:41:27:41:27 | access to local variable a : A | CollectionFlow.cs:41:25:41:29 | { ..., ... } : null [element] : A | -| CollectionFlow.cs:42:14:42:16 | access to local variable as : null [element] : A | CollectionFlow.cs:42:14:42:19 | access to array element | -| CollectionFlow.cs:43:18:43:20 | access to local variable as : null [element] : A | CollectionFlow.cs:14:40:14:41 | ts : null [element] : A | -| CollectionFlow.cs:44:20:44:22 | access to local variable as : null [element] : A | CollectionFlow.cs:22:34:22:35 | ts : null [element] : A | -| CollectionFlow.cs:44:20:44:22 | access to local variable as : null [element] : A | CollectionFlow.cs:44:14:44:23 | call to method First | -| CollectionFlow.cs:58:17:58:23 | object creation of type A : A | CollectionFlow.cs:59:53:59:53 | access to local variable a : A | -| CollectionFlow.cs:59:38:59:57 | { ..., ... } : CollectionFlow [field As, element] : A | CollectionFlow.cs:60:14:60:14 | access to local variable c : CollectionFlow [field As, element] : A | -| CollectionFlow.cs:59:38:59:57 | { ..., ... } : CollectionFlow [field As, element] : A | CollectionFlow.cs:61:18:61:18 | access to local variable c : CollectionFlow [field As, element] : A | -| CollectionFlow.cs:59:38:59:57 | { ..., ... } : CollectionFlow [field As, element] : A | CollectionFlow.cs:62:20:62:20 | access to local variable c : CollectionFlow [field As, element] : A | -| CollectionFlow.cs:59:45:59:55 | { ..., ... } : A[] [element] : A | CollectionFlow.cs:59:38:59:57 | { ..., ... } : CollectionFlow [field As, element] : A | -| CollectionFlow.cs:59:53:59:53 | access to local variable a : A | CollectionFlow.cs:59:45:59:55 | { ..., ... } : A[] [element] : A | -| CollectionFlow.cs:60:14:60:14 | access to local variable c : CollectionFlow [field As, element] : A | CollectionFlow.cs:60:14:60:17 | access to field As : A[] [element] : A | -| CollectionFlow.cs:60:14:60:17 | access to field As : A[] [element] : A | CollectionFlow.cs:60:14:60:20 | access to array element | -| CollectionFlow.cs:61:18:61:18 | access to local variable c : CollectionFlow [field As, element] : A | CollectionFlow.cs:61:18:61:21 | access to field As : A[] [element] : A | -| CollectionFlow.cs:61:18:61:21 | access to field As : A[] [element] : A | CollectionFlow.cs:14:40:14:41 | ts : A[] [element] : A | -| CollectionFlow.cs:62:20:62:20 | access to local variable c : CollectionFlow [field As, element] : A | CollectionFlow.cs:62:20:62:23 | access to field As : A[] [element] : A | -| CollectionFlow.cs:62:20:62:23 | access to field As : A[] [element] : A | CollectionFlow.cs:22:34:22:35 | ts : A[] [element] : A | -| CollectionFlow.cs:62:20:62:23 | access to field As : A[] [element] : A | CollectionFlow.cs:62:14:62:24 | call to method First | -| CollectionFlow.cs:76:17:76:23 | object creation of type A : A | CollectionFlow.cs:78:18:78:18 | access to local variable a : A | -| CollectionFlow.cs:78:9:78:11 | [post] access to local variable as : A[] [element] : A | CollectionFlow.cs:79:14:79:16 | access to local variable as : A[] [element] : A | -| CollectionFlow.cs:78:9:78:11 | [post] access to local variable as : A[] [element] : A | CollectionFlow.cs:80:18:80:20 | access to local variable as : A[] [element] : A | -| CollectionFlow.cs:78:9:78:11 | [post] access to local variable as : A[] [element] : A | CollectionFlow.cs:81:20:81:22 | access to local variable as : A[] [element] : A | -| CollectionFlow.cs:78:18:78:18 | access to local variable a : A | CollectionFlow.cs:78:9:78:11 | [post] access to local variable as : A[] [element] : A | -| CollectionFlow.cs:79:14:79:16 | access to local variable as : A[] [element] : A | CollectionFlow.cs:79:14:79:19 | access to array element | -| CollectionFlow.cs:80:18:80:20 | access to local variable as : A[] [element] : A | CollectionFlow.cs:14:40:14:41 | ts : A[] [element] : A | -| CollectionFlow.cs:81:20:81:22 | access to local variable as : A[] [element] : A | CollectionFlow.cs:22:34:22:35 | ts : A[] [element] : A | -| CollectionFlow.cs:81:20:81:22 | access to local variable as : A[] [element] : A | CollectionFlow.cs:81:14:81:23 | call to method First | -| CollectionFlow.cs:96:17:96:23 | object creation of type A : A | CollectionFlow.cs:98:19:98:19 | access to local variable a : A | -| CollectionFlow.cs:98:9:98:12 | [post] access to local variable list : List [element] : A | CollectionFlow.cs:99:14:99:17 | access to local variable list : List [element] : A | -| CollectionFlow.cs:98:9:98:12 | [post] access to local variable list : List [element] : A | CollectionFlow.cs:100:22:100:25 | access to local variable list : List [element] : A | -| CollectionFlow.cs:98:9:98:12 | [post] access to local variable list : List [element] : A | CollectionFlow.cs:101:24:101:27 | access to local variable list : List [element] : A | -| CollectionFlow.cs:98:19:98:19 | access to local variable a : A | CollectionFlow.cs:98:9:98:12 | [post] access to local variable list : List [element] : A | -| CollectionFlow.cs:99:14:99:17 | access to local variable list : List [element] : A | CollectionFlow.cs:99:14:99:20 | access to indexer | -| CollectionFlow.cs:100:22:100:25 | access to local variable list : List [element] : A | CollectionFlow.cs:16:49:16:52 | list : List [element] : A | -| CollectionFlow.cs:101:24:101:27 | access to local variable list : List [element] : A | CollectionFlow.cs:24:43:24:46 | list : List [element] : A | -| CollectionFlow.cs:101:24:101:27 | access to local variable list : List [element] : A | CollectionFlow.cs:101:14:101:28 | call to method ListFirst | -| CollectionFlow.cs:115:17:115:23 | object creation of type A : A | CollectionFlow.cs:116:36:116:36 | access to local variable a : A | -| CollectionFlow.cs:116:20:116:38 | object creation of type List : List [element] : A | CollectionFlow.cs:117:14:117:17 | access to local variable list : List [element] : A | -| CollectionFlow.cs:116:20:116:38 | object creation of type List : List [element] : A | CollectionFlow.cs:118:22:118:25 | access to local variable list : List [element] : A | -| CollectionFlow.cs:116:20:116:38 | object creation of type List : List [element] : A | CollectionFlow.cs:119:24:119:27 | access to local variable list : List [element] : A | -| CollectionFlow.cs:116:36:116:36 | access to local variable a : A | CollectionFlow.cs:116:20:116:38 | object creation of type List : List [element] : A | -| CollectionFlow.cs:117:14:117:17 | access to local variable list : List [element] : A | CollectionFlow.cs:117:14:117:20 | access to indexer | -| CollectionFlow.cs:118:22:118:25 | access to local variable list : List [element] : A | CollectionFlow.cs:16:49:16:52 | list : List [element] : A | -| CollectionFlow.cs:119:24:119:27 | access to local variable list : List [element] : A | CollectionFlow.cs:24:43:24:46 | list : List [element] : A | -| CollectionFlow.cs:119:24:119:27 | access to local variable list : List [element] : A | CollectionFlow.cs:119:14:119:28 | call to method ListFirst | -| CollectionFlow.cs:132:17:132:23 | object creation of type A : A | CollectionFlow.cs:134:18:134:18 | access to local variable a : A | -| CollectionFlow.cs:134:9:134:12 | [post] access to local variable list : List [element] : A | CollectionFlow.cs:135:14:135:17 | access to local variable list : List [element] : A | -| CollectionFlow.cs:134:9:134:12 | [post] access to local variable list : List [element] : A | CollectionFlow.cs:136:22:136:25 | access to local variable list : List [element] : A | -| CollectionFlow.cs:134:9:134:12 | [post] access to local variable list : List [element] : A | CollectionFlow.cs:137:24:137:27 | access to local variable list : List [element] : A | -| CollectionFlow.cs:134:18:134:18 | access to local variable a : A | CollectionFlow.cs:134:9:134:12 | [post] access to local variable list : List [element] : A | -| CollectionFlow.cs:135:14:135:17 | access to local variable list : List [element] : A | CollectionFlow.cs:135:14:135:20 | access to indexer | -| CollectionFlow.cs:136:22:136:25 | access to local variable list : List [element] : A | CollectionFlow.cs:16:49:16:52 | list : List [element] : A | -| CollectionFlow.cs:137:24:137:27 | access to local variable list : List [element] : A | CollectionFlow.cs:24:43:24:46 | list : List [element] : A | -| CollectionFlow.cs:137:24:137:27 | access to local variable list : List [element] : A | CollectionFlow.cs:137:14:137:28 | call to method ListFirst | -| CollectionFlow.cs:151:17:151:23 | object creation of type A : A | CollectionFlow.cs:153:19:153:19 | access to local variable a : A | -| CollectionFlow.cs:153:9:153:12 | [post] access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:154:14:154:17 | access to local variable dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:153:9:153:12 | [post] access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:155:23:155:26 | access to local variable dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:153:9:153:12 | [post] access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:156:28:156:31 | access to local variable dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:153:9:153:12 | [post] access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:157:29:157:32 | access to local variable dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:153:9:153:12 | [post] access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:158:30:158:33 | access to local variable dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:153:19:153:19 | access to local variable a : A | CollectionFlow.cs:153:9:153:12 | [post] access to local variable dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:154:14:154:17 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:154:14:154:20 | access to indexer | -| CollectionFlow.cs:155:23:155:26 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:18:61:18:64 | dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:156:28:156:31 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:26:58:26:61 | dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:156:28:156:31 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:156:14:156:32 | call to method DictIndexZero | -| CollectionFlow.cs:157:29:157:32 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:28:59:28:62 | dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:157:29:157:32 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:157:14:157:33 | call to method DictFirstValue | -| CollectionFlow.cs:158:30:158:33 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:30:60:30:63 | dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:158:30:158:33 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:158:14:158:34 | call to method DictValuesFirst | -| CollectionFlow.cs:174:17:174:23 | object creation of type A : A | CollectionFlow.cs:175:52:175:52 | access to local variable a : A | -| CollectionFlow.cs:175:20:175:56 | object creation of type Dictionary : Dictionary [element, property Value] : A | CollectionFlow.cs:176:14:176:17 | access to local variable dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:175:20:175:56 | object creation of type Dictionary : Dictionary [element, property Value] : A | CollectionFlow.cs:177:23:177:26 | access to local variable dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:175:20:175:56 | object creation of type Dictionary : Dictionary [element, property Value] : A | CollectionFlow.cs:178:28:178:31 | access to local variable dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:175:20:175:56 | object creation of type Dictionary : Dictionary [element, property Value] : A | CollectionFlow.cs:179:29:179:32 | access to local variable dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:175:20:175:56 | object creation of type Dictionary : Dictionary [element, property Value] : A | CollectionFlow.cs:180:30:180:33 | access to local variable dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:175:52:175:52 | access to local variable a : A | CollectionFlow.cs:175:20:175:56 | object creation of type Dictionary : Dictionary [element, property Value] : A | -| CollectionFlow.cs:176:14:176:17 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:176:14:176:20 | access to indexer | -| CollectionFlow.cs:177:23:177:26 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:18:61:18:64 | dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:178:28:178:31 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:26:58:26:61 | dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:178:28:178:31 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:178:14:178:32 | call to method DictIndexZero | -| CollectionFlow.cs:179:29:179:32 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:28:59:28:62 | dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:179:29:179:32 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:179:14:179:33 | call to method DictFirstValue | -| CollectionFlow.cs:180:30:180:33 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:30:60:30:63 | dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:180:30:180:33 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:180:14:180:34 | call to method DictValuesFirst | -| CollectionFlow.cs:195:17:195:23 | object creation of type A : A | CollectionFlow.cs:196:53:196:53 | access to local variable a : A | -| CollectionFlow.cs:196:20:196:55 | object creation of type Dictionary : Dictionary [element, property Value] : A | CollectionFlow.cs:197:14:197:17 | access to local variable dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:196:20:196:55 | object creation of type Dictionary : Dictionary [element, property Value] : A | CollectionFlow.cs:198:23:198:26 | access to local variable dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:196:20:196:55 | object creation of type Dictionary : Dictionary [element, property Value] : A | CollectionFlow.cs:199:28:199:31 | access to local variable dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:196:20:196:55 | object creation of type Dictionary : Dictionary [element, property Value] : A | CollectionFlow.cs:200:29:200:32 | access to local variable dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:196:20:196:55 | object creation of type Dictionary : Dictionary [element, property Value] : A | CollectionFlow.cs:201:30:201:33 | access to local variable dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:196:53:196:53 | access to local variable a : A | CollectionFlow.cs:196:20:196:55 | object creation of type Dictionary : Dictionary [element, property Value] : A | -| CollectionFlow.cs:197:14:197:17 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:197:14:197:20 | access to indexer | -| CollectionFlow.cs:198:23:198:26 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:18:61:18:64 | dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:199:28:199:31 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:26:58:26:61 | dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:199:28:199:31 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:199:14:199:32 | call to method DictIndexZero | -| CollectionFlow.cs:200:29:200:32 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:28:59:28:62 | dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:200:29:200:32 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:200:14:200:33 | call to method DictFirstValue | -| CollectionFlow.cs:201:30:201:33 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:30:60:30:63 | dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:201:30:201:33 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:201:14:201:34 | call to method DictValuesFirst | -| CollectionFlow.cs:217:17:217:23 | object creation of type A : A | CollectionFlow.cs:218:49:218:49 | access to local variable a : A | -| CollectionFlow.cs:218:20:218:56 | object creation of type Dictionary : Dictionary [element, property Key] : A | CollectionFlow.cs:219:14:219:17 | access to local variable dict : Dictionary [element, property Key] : A | -| CollectionFlow.cs:218:20:218:56 | object creation of type Dictionary : Dictionary [element, property Key] : A | CollectionFlow.cs:220:21:220:24 | access to local variable dict : Dictionary [element, property Key] : A | -| CollectionFlow.cs:218:20:218:56 | object creation of type Dictionary : Dictionary [element, property Key] : A | CollectionFlow.cs:221:28:221:31 | access to local variable dict : Dictionary [element, property Key] : A | -| CollectionFlow.cs:218:20:218:56 | object creation of type Dictionary : Dictionary [element, property Key] : A | CollectionFlow.cs:222:27:222:30 | access to local variable dict : Dictionary [element, property Key] : A | -| CollectionFlow.cs:218:49:218:49 | access to local variable a : A | CollectionFlow.cs:218:20:218:56 | object creation of type Dictionary : Dictionary [element, property Key] : A | -| CollectionFlow.cs:219:14:219:17 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:219:14:219:22 | access to property Keys : Dictionary.KeyCollection [element] : A | -| CollectionFlow.cs:219:14:219:22 | access to property Keys : Dictionary.KeyCollection [element] : A | CollectionFlow.cs:219:14:219:30 | call to method First | -| CollectionFlow.cs:220:21:220:24 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:20:59:20:62 | dict : Dictionary [element, property Key] : A | -| CollectionFlow.cs:221:28:221: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:221:28:221:31 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:221:14:221:32 | call to method DictKeysFirst | -| 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:222:27:222:30 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:222:14:222:31 | call to method DictFirstKey | -| CollectionFlow.cs:236:17:236:23 | object creation of type A : A | CollectionFlow.cs:237:48:237:48 | access to local variable a : A | -| CollectionFlow.cs:237:20:237:55 | object creation of type Dictionary : Dictionary [element, property Key] : A | CollectionFlow.cs:238:14:238:17 | access to local variable dict : Dictionary [element, property Key] : A | -| CollectionFlow.cs:237:20:237:55 | object creation of type Dictionary : Dictionary [element, property Key] : A | CollectionFlow.cs:239:21:239:24 | access to local variable dict : Dictionary [element, property Key] : A | -| CollectionFlow.cs:237:20:237:55 | object creation of type Dictionary : Dictionary [element, property Key] : A | CollectionFlow.cs:240:28:240:31 | access to local variable dict : Dictionary [element, property Key] : A | -| CollectionFlow.cs:237:20:237:55 | object creation of type Dictionary : Dictionary [element, property Key] : A | CollectionFlow.cs:241:27:241:30 | access to local variable dict : Dictionary [element, property Key] : A | -| CollectionFlow.cs:237:48:237:48 | access to local variable a : A | CollectionFlow.cs:237:20:237:55 | object creation of type Dictionary : Dictionary [element, property Key] : A | -| CollectionFlow.cs:238:14:238:17 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:238:14:238:22 | access to property Keys : Dictionary.KeyCollection [element] : A | -| CollectionFlow.cs:238:14:238:22 | access to property Keys : Dictionary.KeyCollection [element] : A | CollectionFlow.cs:238:14:238:30 | call to method First | -| CollectionFlow.cs:239:21:239:24 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:20:59:20:62 | dict : Dictionary [element, property Key] : A | -| 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:240:28:240:31 | access to local variable dict : Dictionary [element, property Key] : 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:241:27:241:30 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:241:14:241:31 | call to method DictFirstKey | -| CollectionFlow.cs:255:17:255:23 | object creation of type A : A | CollectionFlow.cs:256:27:256:27 | access to local variable a : A | -| CollectionFlow.cs:256:25:256:29 | { ..., ... } : null [element] : A | CollectionFlow.cs:257:27:257:29 | access to local variable as : null [element] : A | -| CollectionFlow.cs:256:27:256:27 | access to local variable a : A | CollectionFlow.cs:256:25:256:29 | { ..., ... } : null [element] : A | -| CollectionFlow.cs:257:22:257:22 | SSA def(x) : A | CollectionFlow.cs:258:18:258:18 | access to local variable x | -| CollectionFlow.cs:257:27:257:29 | access to local variable as : null [element] : A | CollectionFlow.cs:257:22:257:22 | SSA def(x) : A | -| CollectionFlow.cs:270:17:270:23 | object creation of type A : A | CollectionFlow.cs:271:27:271:27 | access to local variable a : A | -| CollectionFlow.cs:271:25:271:29 | { ..., ... } : null [element] : A | CollectionFlow.cs:272:26:272:28 | access to local variable as : null [element] : A | -| CollectionFlow.cs:271:27:271:27 | access to local variable a : A | CollectionFlow.cs:271:25:271:29 | { ..., ... } : null [element] : A | -| CollectionFlow.cs:272:26:272:28 | access to local variable as : null [element] : A | CollectionFlow.cs:272:26:272:44 | call to method GetEnumerator : IEnumerator [property Current] : A | -| CollectionFlow.cs:272:26:272:44 | call to method GetEnumerator : IEnumerator [property Current] : A | CollectionFlow.cs:274:18:274:27 | access to local variable enumerator : IEnumerator [property Current] : A | -| CollectionFlow.cs:274:18:274:27 | access to local variable enumerator : IEnumerator [property Current] : A | CollectionFlow.cs:274:18:274:35 | access to property Current | -| CollectionFlow.cs:287:17:287:23 | object creation of type A : A | CollectionFlow.cs:289:18:289:18 | access to local variable a : A | -| CollectionFlow.cs:289:9:289:12 | [post] access to local variable list : List [element] : A | CollectionFlow.cs:290:26:290:29 | access to local variable list : List [element] : A | -| CollectionFlow.cs:289:18:289:18 | access to local variable a : A | CollectionFlow.cs:289:9:289:12 | [post] access to local variable list : List [element] : A | -| CollectionFlow.cs:290:26:290:29 | access to local variable list : List [element] : A | CollectionFlow.cs:290:26:290:45 | call to method GetEnumerator : List.Enumerator [property Current] : A | -| CollectionFlow.cs:290:26:290:45 | call to method GetEnumerator : List.Enumerator [property Current] : A | CollectionFlow.cs:292:18:292:27 | access to local variable enumerator : List.Enumerator [property Current] : A | -| CollectionFlow.cs:292:18:292:27 | access to local variable enumerator : List.Enumerator [property Current] : A | CollectionFlow.cs:292:18:292:35 | access to property Current | -| CollectionFlow.cs:306:17:306:23 | object creation of type A : A | CollectionFlow.cs:308:43:308:43 | access to local variable a : A | -| CollectionFlow.cs:308:9:308:12 | [post] access to local variable list : List [element, property Key] : A | CollectionFlow.cs:309:9:309:12 | access to local variable list : List [element, property Key] : A | -| CollectionFlow.cs:308:18:308:47 | object creation of type KeyValuePair : KeyValuePair [property Key] : A | CollectionFlow.cs:308:9:308:12 | [post] access to local variable list : List [element, property Key] : A | -| CollectionFlow.cs:308:43:308:43 | access to local variable a : A | CollectionFlow.cs:308:18:308:47 | object creation of type KeyValuePair : KeyValuePair [property Key] : A | -| CollectionFlow.cs:309:9:309:12 | access to local variable list : List [element, property Key] : A | CollectionFlow.cs:309:21:309:23 | kvp : KeyValuePair [property Key] : A | -| 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 | -| CollectionFlow.cs:311:18:311:20 | access to parameter kvp : KeyValuePair [property Key] : A | CollectionFlow.cs:311:18:311:24 | access to property Key | -| CollectionFlow.cs:328:32:328:38 | element : A | CollectionFlow.cs:328:55:328:61 | access to parameter element : A | -| 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 | -| CollectionFlow.cs:332:17:332:23 | object creation of type A : A | CollectionFlow.cs:334:23:334:23 | access to local variable a : A | -| CollectionFlow.cs:334:18:334:20 | [post] access to local variable as : A[] [element] : A | CollectionFlow.cs:335:14:335:16 | access to local variable as : A[] [element] : A | -| CollectionFlow.cs:334:18:334:20 | [post] access to local variable as : A[] [element] : A | CollectionFlow.cs:336:18:336:20 | access to local variable as : 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:334:23:334:23 | access to local variable a : A | CollectionFlow.cs:328:32:328:38 | element : A | -| CollectionFlow.cs:334:23:334:23 | access to local variable a : A | CollectionFlow.cs:334:18:334:20 | [post] access to local variable as : A[] [element] : A | -| CollectionFlow.cs:335:14:335:16 | access to local variable as : A[] [element] : A | CollectionFlow.cs:335:14:335:19 | access to array element | -| CollectionFlow.cs:336:18:336:20 | access to local variable as : A[] [element] : A | CollectionFlow.cs:14:40:14:41 | ts : 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:337:20:337:22 | access to local variable as : A[] [element] : A | CollectionFlow.cs:337:14:337:23 | call to method First | -| CollectionFlow.cs:350:34:350:40 | element : A | CollectionFlow.cs:350:55:350:61 | access to parameter element : A | -| 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 | -| CollectionFlow.cs:354:17:354:23 | object creation of type A : A | CollectionFlow.cs:356:23:356:23 | access to local variable a : A | -| CollectionFlow.cs:356:17:356:20 | [post] access to local variable list : List [element] : A | CollectionFlow.cs:357:14:357:17 | access to local variable list : List [element] : A | -| CollectionFlow.cs:356:17:356:20 | [post] access to local variable list : List [element] : A | CollectionFlow.cs:358:22:358:25 | access to local variable list : 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:356:23:356:23 | access to local variable a : A | CollectionFlow.cs:350:34:350:40 | element : A | -| CollectionFlow.cs:356:23:356:23 | access to local variable a : A | CollectionFlow.cs:356:17:356:20 | [post] access to local variable list : List [element] : A | -| CollectionFlow.cs:357:14:357:17 | access to local variable list : List [element] : A | CollectionFlow.cs:357:14:357:20 | access to indexer | -| CollectionFlow.cs:358:22:358:25 | access to local variable list : List [element] : A | CollectionFlow.cs:16:49:16:52 | 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:359:24:359:27 | access to local variable list : List [element] : A | CollectionFlow.cs:359:14:359:28 | call to method ListFirst | -| CollectionFlow.cs:373:20:373:26 | object creation of type A : A | CollectionFlow.cs:36:49:36:52 | args : A[] [element] : A | -| CollectionFlow.cs:374:26:374:32 | object creation of type A : A | CollectionFlow.cs:36:49:36:52 | args : A[] [element] : A | -| CollectionFlow.cs:375:26:375:32 | object creation of type A : A | CollectionFlow.cs:36:49:36:52 | args : A[] [element] : A | -| CollectionFlow.cs:376:20:376:38 | array creation of type A[] : null [element] : A | CollectionFlow.cs:36:49:36:52 | args : null [element] : A | -| CollectionFlow.cs:376:28:376:38 | { ..., ... } : null [element] : A | CollectionFlow.cs:376:20:376:38 | array creation of type A[] : null [element] : A | -| CollectionFlow.cs:376:30:376:36 | object creation of type A : A | CollectionFlow.cs:376:28:376:38 | { ..., ... } : null [element] : A | -| CollectionFlow.cs:406:17:406:23 | object creation of type A : A | CollectionFlow.cs:408:20:408:20 | access to local variable a : A | -| CollectionFlow.cs:408:9:408:13 | [post] access to local variable array : MyInlineArray [element] : A | CollectionFlow.cs:409:14:409:18 | access to local variable array : MyInlineArray [element] : A | -| CollectionFlow.cs:408:20:408:20 | access to local variable a : A | CollectionFlow.cs:408:9:408:13 | [post] access to local variable array : MyInlineArray [element] : A | -| CollectionFlow.cs:409:14:409:18 | access to local variable array : MyInlineArray [element] : A | CollectionFlow.cs:409:14:409:21 | access to array element | -| CollectionFlow.cs:427:17:427:23 | object creation of type A : A | CollectionFlow.cs:428:22:428:22 | access to local variable a : A | -| CollectionFlow.cs:428:21:428:23 | [...] : A[] [element] : A | CollectionFlow.cs:429:14:429:18 | access to local variable array : A[] [element] : A | -| CollectionFlow.cs:428:22:428:22 | access to local variable a : A | CollectionFlow.cs:428:21:428:23 | [...] : A[] [element] : A | -| CollectionFlow.cs:429:14:429:18 | access to local variable array : A[] [element] : A | CollectionFlow.cs:429:14:429:21 | access to array element | -| CollectionFlow.cs:434:17:434:23 | object creation of type A : A | CollectionFlow.cs:435:22:435:22 | access to local variable a : A | -| CollectionFlow.cs:435:21:435:23 | [...] : List [element] : A | CollectionFlow.cs:436:14:436:14 | access to local variable l : List [element] : A | -| CollectionFlow.cs:435:22:435:22 | access to local variable a : A | CollectionFlow.cs:435:21:435:23 | [...] : List [element] : A | -| CollectionFlow.cs:436:14:436:14 | access to local variable l : List [element] : A | CollectionFlow.cs:436:14:436:17 | access to indexer | -| CollectionFlow.cs:447:17:447:23 | object creation of type A : A | CollectionFlow.cs:448:21:448:21 | access to local variable a : A | -| CollectionFlow.cs:448:20:448:22 | [...] : A[] [element] : A | CollectionFlow.cs:449:22:449:28 | .. access to local variable temp : A[] [element] : A | -| CollectionFlow.cs:448:21:448:21 | access to local variable a : A | CollectionFlow.cs:448:20:448:22 | [...] : A[] [element] : A | -| CollectionFlow.cs:449:22:449:28 | .. access to local variable temp : A[] [element] : A | CollectionFlow.cs:450:14:450:18 | access to local variable array : A[] [element] : A | -| CollectionFlow.cs:450:14:450:18 | access to local variable array : A[] [element] : A | CollectionFlow.cs:450:14:450:21 | access to array element | -| CollectionFlow.cs:487:17:487:23 | object creation of type A : A | CollectionFlow.cs:488:40:488:40 | access to local variable a : A | -| CollectionFlow.cs:488:24:488:41 | object creation of type Span : Span [element] : A | CollectionFlow.cs:489:14:489:17 | access to local variable span : Span [element] : A | -| CollectionFlow.cs:488:40:488:40 | access to local variable a : A | CollectionFlow.cs:488:24:488:41 | object creation of type Span : Span [element] : A | -| CollectionFlow.cs:489:14:489:17 | access to local variable span : Span [element] : A | CollectionFlow.cs:489:14:489:20 | access to indexer | -| CollectionFlow.cs:494:17:494:23 | object creation of type A : A | CollectionFlow.cs:495:40:495:40 | access to local variable a : A | -| CollectionFlow.cs:495:24:495:41 | object creation of type Span : Span [element] : A | CollectionFlow.cs:496:19:496:22 | access to local variable span : Span [element] : A | -| CollectionFlow.cs:495:40:495:40 | access to local variable a : A | CollectionFlow.cs:495:24:495:41 | object creation of type Span : Span [element] : A | -| CollectionFlow.cs:496:19:496:22 | access to local variable span : Span [element] : A | CollectionFlow.cs:496:19:496:32 | call to method ToArray : T[] [element] : A | -| CollectionFlow.cs:496:19:496:32 | call to method ToArray : T[] [element] : A | CollectionFlow.cs:497:14:497:16 | access to local variable arr : T[] [element] : A | -| CollectionFlow.cs:497:14:497:16 | access to local variable arr : T[] [element] : A | CollectionFlow.cs:497:14:497:19 | access to array element | -| CollectionFlow.cs:502:17:502:23 | object creation of type A : A | CollectionFlow.cs:503:21:503:21 | access to local variable a : A | -| CollectionFlow.cs:503:9:503:14 | [post] access to parameter target : Span [element] : A | CollectionFlow.cs:504:14:504:19 | access to parameter target : Span [element] : A | -| CollectionFlow.cs:503:21:503:21 | access to local variable a : A | CollectionFlow.cs:503:9:503:14 | [post] access to parameter target : Span [element] : A | -| CollectionFlow.cs:504:14:504:19 | access to parameter target : Span [element] : A | CollectionFlow.cs:504:14:504:22 | access to indexer | -| CollectionFlow.cs:509:22:509:51 | object creation of type Span : Span [element] : A | CollectionFlow.cs:510:9:510:14 | access to local variable source : Span [element] : A | -| CollectionFlow.cs:509:34:509:50 | array creation of type A[] : null [element] : A | CollectionFlow.cs:509:22:509:51 | object creation of type Span : Span [element] : A | -| CollectionFlow.cs:509:40:509:50 | { ..., ... } : null [element] : A | CollectionFlow.cs:509:34:509:50 | array creation of type A[] : null [element] : A | -| CollectionFlow.cs:509:42:509:48 | object creation of type A : A | CollectionFlow.cs:509:40:509:50 | { ..., ... } : null [element] : A | -| CollectionFlow.cs:510:9:510:14 | access to local variable source : Span [element] : A | CollectionFlow.cs:510:23:510:28 | [post] access to parameter target : Span [element] : A | -| CollectionFlow.cs:510:23:510:28 | [post] access to parameter target : Span [element] : A | CollectionFlow.cs:511:14:511:19 | access to parameter target : Span [element] : A | -| CollectionFlow.cs:511:14:511:19 | access to parameter target : Span [element] : A | CollectionFlow.cs:511:14:511:22 | access to indexer | -| CollectionFlow.cs:516:17:516:23 | object creation of type A : A | CollectionFlow.cs:517:60:517:60 | access to local variable a : A | -| CollectionFlow.cs:517:32:517:63 | object creation of type ReadOnlySpan : ReadOnlySpan [element] : A | CollectionFlow.cs:518:14:518:17 | access to local variable span : ReadOnlySpan [element] : A | -| CollectionFlow.cs:517:52:517:62 | array creation of type A[] : null [element] : A | CollectionFlow.cs:517:32:517:63 | object creation of type ReadOnlySpan : ReadOnlySpan [element] : A | -| CollectionFlow.cs:517:58:517:62 | { ..., ... } : null [element] : A | CollectionFlow.cs:517:52:517:62 | array creation of type A[] : null [element] : A | -| CollectionFlow.cs:517:60:517:60 | access to local variable a : A | CollectionFlow.cs:517:58:517:62 | { ..., ... } : null [element] : A | -| CollectionFlow.cs:518:14:518:17 | access to local variable span : ReadOnlySpan [element] : A | CollectionFlow.cs:518:14:518:20 | access to indexer | +| CollectionFlow.cs:14:40:14:41 | ts : A[] [element] : A | CollectionFlow.cs:14:52:14:53 | access to parameter ts : A[] [element] : A | provenance | | +| CollectionFlow.cs:14:40:14:41 | ts : null [element] : A | CollectionFlow.cs:14:52:14:53 | access to parameter ts : null [element] : A | provenance | | +| CollectionFlow.cs:14:52:14:53 | access to parameter ts : A[] [element] : A | CollectionFlow.cs:14:52:14:56 | access to array element | provenance | | +| CollectionFlow.cs:14:52:14:53 | access to parameter ts : null [element] : A | CollectionFlow.cs:14:52:14:56 | access to array element | provenance | | +| CollectionFlow.cs:16:49:16:52 | list : List [element] : A | CollectionFlow.cs:16:63:16:66 | access to parameter list : List [element] : A | provenance | | +| CollectionFlow.cs:16:49:16:52 | list : List [element] : A | CollectionFlow.cs:16:63:16:66 | access to parameter list : List [element] : A | provenance | | +| CollectionFlow.cs:16:49:16:52 | list : List [element] : A | CollectionFlow.cs:16:63:16:66 | access to parameter list : List [element] : A | provenance | | +| CollectionFlow.cs:16:49:16:52 | list : List [element] : A | CollectionFlow.cs:16:63:16:66 | access to parameter list : List [element] : A | provenance | | +| CollectionFlow.cs:16:63:16:66 | access to parameter list : List [element] : A | CollectionFlow.cs:16:63:16:69 | access to indexer | provenance | | +| CollectionFlow.cs:16:63:16:66 | access to parameter list : List [element] : A | CollectionFlow.cs:16:63:16:69 | access to indexer | provenance | | +| CollectionFlow.cs:16:63:16:66 | access to parameter list : List [element] : A | CollectionFlow.cs:16:63:16:69 | access to indexer | provenance | | +| CollectionFlow.cs:16:63:16:66 | access to parameter list : List [element] : A | CollectionFlow.cs:16:63:16:69 | access to indexer | provenance | | +| CollectionFlow.cs:18:61:18:64 | dict : Dictionary [element, property Value] : A | CollectionFlow.cs:18:75:18:78 | access to parameter dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:18:75:18:78 | access to parameter dict : Dictionary [element, property Value] : A | CollectionFlow.cs:18:75:18:81 | access to indexer | provenance | | +| CollectionFlow.cs:20:59:20:62 | dict : Dictionary [element, property Key] : A | CollectionFlow.cs:20:73:20:76 | access to parameter dict : Dictionary [element, property Key] : A | provenance | | +| CollectionFlow.cs:20:73:20:76 | access to parameter dict : Dictionary [element, property Key] : A | CollectionFlow.cs:20:73:20:81 | access to property Keys : ICollection [element] : A | provenance | | +| CollectionFlow.cs:20:73:20:81 | access to property Keys : ICollection [element] : A | CollectionFlow.cs:20:73:20:89 | call to method First | provenance | | +| CollectionFlow.cs:22:34:22:35 | ts : A[] [element] : A | CollectionFlow.cs:22:41:22:42 | access to parameter ts : A[] [element] : A | provenance | | +| CollectionFlow.cs:22:34:22:35 | ts : null [element] : A | CollectionFlow.cs:22:41:22:42 | access to parameter ts : null [element] : A | provenance | | +| CollectionFlow.cs:22:41:22:42 | access to parameter ts : A[] [element] : A | CollectionFlow.cs:22:41:22:45 | access to array element : A | provenance | | +| CollectionFlow.cs:22:41:22:42 | access to parameter ts : null [element] : A | CollectionFlow.cs:22:41:22:45 | access to array element : A | provenance | | +| CollectionFlow.cs:24:43:24:46 | list : List [element] : A | CollectionFlow.cs:24:52:24:55 | access to parameter list : List [element] : A | provenance | | +| CollectionFlow.cs:24:43:24:46 | list : List [element] : A | CollectionFlow.cs:24:52:24:55 | access to parameter list : List [element] : A | provenance | | +| CollectionFlow.cs:24:43:24:46 | list : List [element] : A | CollectionFlow.cs:24:52:24:55 | access to parameter list : List [element] : A | provenance | | +| CollectionFlow.cs:24:43:24:46 | list : List [element] : A | CollectionFlow.cs:24:52:24:55 | access to parameter list : List [element] : A | provenance | | +| CollectionFlow.cs:24:52:24:55 | access to parameter list : List [element] : A | CollectionFlow.cs:24:52:24:58 | access to indexer : A | provenance | | +| CollectionFlow.cs:24:52:24:55 | access to parameter list : List [element] : A | CollectionFlow.cs:24:52:24:58 | access to indexer : A | provenance | | +| CollectionFlow.cs:24:52:24:55 | access to parameter list : List [element] : A | CollectionFlow.cs:24:52:24:58 | access to indexer : A | provenance | | +| CollectionFlow.cs:24:52:24:55 | access to parameter list : List [element] : A | CollectionFlow.cs:24:52:24:58 | access to indexer : A | provenance | | +| CollectionFlow.cs:26:58:26:61 | dict : Dictionary [element, property Value] : A | CollectionFlow.cs:26:67:26:70 | access to parameter dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:26:67:26:70 | access to parameter dict : Dictionary [element, property Value] : A | CollectionFlow.cs:26:67:26:73 | access to indexer : A | provenance | | +| CollectionFlow.cs:28:59:28:62 | dict : Dictionary [element, property Value] : A | CollectionFlow.cs:28:68:28:71 | access to parameter dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:28:68:28:71 | access to parameter dict : Dictionary [element, property Value] : A | CollectionFlow.cs:28:68:28:79 | call to method First> : KeyValuePair [property Value] : A | provenance | | +| CollectionFlow.cs:28:68:28:79 | call to method First> : KeyValuePair [property Value] : A | CollectionFlow.cs:28:68:28:85 | access to property Value : A | provenance | | +| CollectionFlow.cs:30:60:30:63 | dict : Dictionary [element, property Value] : A | CollectionFlow.cs:30:69:30:72 | access to parameter dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:30:69:30:72 | access to parameter dict : Dictionary [element, property Value] : A | CollectionFlow.cs:30:69:30:79 | access to property Values : ICollection [element] : A | provenance | | +| CollectionFlow.cs:30:69:30:79 | access to property Values : ICollection [element] : A | CollectionFlow.cs:30:69:30:87 | call to method First : A | provenance | | +| CollectionFlow.cs:32:58:32:61 | dict : Dictionary [element, property Key] : A | CollectionFlow.cs:32:67:32:70 | access to parameter dict : Dictionary [element, property Key] : A | provenance | | +| CollectionFlow.cs:32:67:32:70 | access to parameter dict : Dictionary [element, property Key] : A | CollectionFlow.cs:32:67:32:75 | access to property Keys : ICollection [element] : A | provenance | | +| CollectionFlow.cs:32:67:32:75 | access to property Keys : ICollection [element] : A | CollectionFlow.cs:32:67:32:83 | call to method First : A | provenance | | +| CollectionFlow.cs:34:57:34:60 | dict : Dictionary [element, property Key] : A | CollectionFlow.cs:34:66:34:69 | access to parameter dict : Dictionary [element, property Key] : A | provenance | | +| CollectionFlow.cs:34:66:34:69 | access to parameter dict : Dictionary [element, property Key] : A | CollectionFlow.cs:34:66:34:77 | call to method First> : KeyValuePair [property Key] : A | provenance | | +| CollectionFlow.cs:34:66:34:77 | call to method First> : KeyValuePair [property Key] : A | CollectionFlow.cs:34:66:34:81 | access to property Key : A | provenance | | +| CollectionFlow.cs:36:49:36:52 | args : A[] [element] : A | CollectionFlow.cs:36:63:36:66 | access to parameter args : A[] [element] : A | provenance | | +| CollectionFlow.cs:36:49:36:52 | args : null [element] : A | CollectionFlow.cs:36:63:36:66 | access to parameter args : null [element] : A | provenance | | +| CollectionFlow.cs:36:63:36:66 | access to parameter args : A[] [element] : A | CollectionFlow.cs:36:63:36:69 | access to array element | provenance | | +| CollectionFlow.cs:36:63:36:66 | access to parameter args : null [element] : A | CollectionFlow.cs:36:63:36:69 | access to array element | provenance | | +| CollectionFlow.cs:40:17:40:23 | object creation of type A : A | CollectionFlow.cs:41:27:41:27 | access to local variable a : A | provenance | | +| CollectionFlow.cs:41:25:41:29 | { ..., ... } : null [element] : A | CollectionFlow.cs:42:14:42:16 | access to local variable as : null [element] : A | provenance | | +| CollectionFlow.cs:41:25:41:29 | { ..., ... } : null [element] : A | CollectionFlow.cs:43:18:43:20 | access to local variable as : null [element] : A | provenance | | +| CollectionFlow.cs:41:25:41:29 | { ..., ... } : null [element] : A | CollectionFlow.cs:44:20:44:22 | access to local variable as : null [element] : A | provenance | | +| CollectionFlow.cs:41:27:41:27 | access to local variable a : A | CollectionFlow.cs:41:25:41:29 | { ..., ... } : null [element] : A | provenance | | +| CollectionFlow.cs:42:14:42:16 | access to local variable as : null [element] : A | CollectionFlow.cs:42:14:42:19 | access to array element | provenance | | +| CollectionFlow.cs:43:18:43:20 | access to local variable as : null [element] : A | CollectionFlow.cs:14:40:14:41 | ts : null [element] : A | provenance | | +| CollectionFlow.cs:44:20:44:22 | access to local variable as : null [element] : A | CollectionFlow.cs:22:34:22:35 | ts : null [element] : A | provenance | | +| CollectionFlow.cs:44:20:44:22 | access to local variable as : null [element] : A | CollectionFlow.cs:44:14:44:23 | call to method First | provenance | | +| CollectionFlow.cs:58:17:58:23 | object creation of type A : A | CollectionFlow.cs:59:53:59:53 | access to local variable a : A | provenance | | +| CollectionFlow.cs:59:38:59:57 | { ..., ... } : CollectionFlow [field As, element] : A | CollectionFlow.cs:60:14:60:14 | access to local variable c : CollectionFlow [field As, element] : A | provenance | | +| CollectionFlow.cs:59:38:59:57 | { ..., ... } : CollectionFlow [field As, element] : A | CollectionFlow.cs:61:18:61:18 | access to local variable c : CollectionFlow [field As, element] : A | provenance | | +| CollectionFlow.cs:59:38:59:57 | { ..., ... } : CollectionFlow [field As, element] : A | CollectionFlow.cs:62:20:62:20 | access to local variable c : CollectionFlow [field As, element] : A | provenance | | +| CollectionFlow.cs:59:45:59:55 | { ..., ... } : A[] [element] : A | CollectionFlow.cs:59:38:59:57 | { ..., ... } : CollectionFlow [field As, element] : A | provenance | | +| CollectionFlow.cs:59:53:59:53 | access to local variable a : A | CollectionFlow.cs:59:45:59:55 | { ..., ... } : A[] [element] : A | provenance | | +| CollectionFlow.cs:60:14:60:14 | access to local variable c : CollectionFlow [field As, element] : A | CollectionFlow.cs:60:14:60:17 | access to field As : A[] [element] : A | provenance | | +| CollectionFlow.cs:60:14:60:17 | access to field As : A[] [element] : A | CollectionFlow.cs:60:14:60:20 | access to array element | provenance | | +| CollectionFlow.cs:61:18:61:18 | access to local variable c : CollectionFlow [field As, element] : A | CollectionFlow.cs:61:18:61:21 | access to field As : A[] [element] : A | provenance | | +| CollectionFlow.cs:61:18:61:21 | access to field As : A[] [element] : A | CollectionFlow.cs:14:40:14:41 | ts : A[] [element] : A | provenance | | +| CollectionFlow.cs:62:20:62:20 | access to local variable c : CollectionFlow [field As, element] : A | CollectionFlow.cs:62:20:62:23 | access to field As : A[] [element] : A | provenance | | +| CollectionFlow.cs:62:20:62:23 | access to field As : A[] [element] : A | CollectionFlow.cs:22:34:22:35 | ts : A[] [element] : A | provenance | | +| CollectionFlow.cs:62:20:62:23 | access to field As : A[] [element] : A | CollectionFlow.cs:62:14:62:24 | call to method First | provenance | | +| CollectionFlow.cs:76:17:76:23 | object creation of type A : A | CollectionFlow.cs:78:18:78:18 | access to local variable a : A | provenance | | +| CollectionFlow.cs:78:9:78:11 | [post] access to local variable as : A[] [element] : A | CollectionFlow.cs:79:14:79:16 | access to local variable as : A[] [element] : A | provenance | | +| CollectionFlow.cs:78:9:78:11 | [post] access to local variable as : A[] [element] : A | CollectionFlow.cs:80:18:80:20 | access to local variable as : A[] [element] : A | provenance | | +| CollectionFlow.cs:78:9:78:11 | [post] access to local variable as : A[] [element] : A | CollectionFlow.cs:81:20:81:22 | access to local variable as : A[] [element] : A | provenance | | +| CollectionFlow.cs:78:18:78:18 | access to local variable a : A | CollectionFlow.cs:78:9:78:11 | [post] access to local variable as : A[] [element] : A | provenance | | +| CollectionFlow.cs:79:14:79:16 | access to local variable as : A[] [element] : A | CollectionFlow.cs:79:14:79:19 | access to array element | provenance | | +| CollectionFlow.cs:80:18:80:20 | access to local variable as : A[] [element] : A | CollectionFlow.cs:14:40:14:41 | ts : A[] [element] : A | provenance | | +| CollectionFlow.cs:81:20:81:22 | access to local variable as : A[] [element] : A | CollectionFlow.cs:22:34:22:35 | ts : A[] [element] : A | provenance | | +| CollectionFlow.cs:81:20:81:22 | access to local variable as : A[] [element] : A | CollectionFlow.cs:81:14:81:23 | call to method First | provenance | | +| CollectionFlow.cs:96:17:96:23 | object creation of type A : A | CollectionFlow.cs:98:19:98:19 | access to local variable a : A | provenance | | +| CollectionFlow.cs:98:9:98:12 | [post] access to local variable list : List [element] : A | CollectionFlow.cs:99:14:99:17 | access to local variable list : List [element] : A | provenance | | +| CollectionFlow.cs:98:9:98:12 | [post] access to local variable list : List [element] : A | CollectionFlow.cs:100:22:100:25 | access to local variable list : List [element] : A | provenance | | +| CollectionFlow.cs:98:9:98:12 | [post] access to local variable list : List [element] : A | CollectionFlow.cs:101:24:101:27 | access to local variable list : List [element] : A | provenance | | +| CollectionFlow.cs:98:19:98:19 | access to local variable a : A | CollectionFlow.cs:98:9:98:12 | [post] access to local variable list : List [element] : A | provenance | | +| CollectionFlow.cs:99:14:99:17 | access to local variable list : List [element] : A | CollectionFlow.cs:99:14:99:20 | access to indexer | provenance | | +| CollectionFlow.cs:100:22:100:25 | access to local variable list : List [element] : A | CollectionFlow.cs:16:49:16:52 | list : List [element] : A | provenance | | +| CollectionFlow.cs:101:24:101:27 | access to local variable list : List [element] : A | CollectionFlow.cs:24:43:24:46 | list : List [element] : A | provenance | | +| CollectionFlow.cs:101:24:101:27 | access to local variable list : List [element] : A | CollectionFlow.cs:101:14:101:28 | call to method ListFirst | provenance | | +| CollectionFlow.cs:115:17:115:23 | object creation of type A : A | CollectionFlow.cs:116:36:116:36 | access to local variable a : A | provenance | | +| CollectionFlow.cs:116:20:116:38 | object creation of type List : List [element] : A | CollectionFlow.cs:117:14:117:17 | access to local variable list : List [element] : A | provenance | | +| CollectionFlow.cs:116:20:116:38 | object creation of type List : List [element] : A | CollectionFlow.cs:118:22:118:25 | access to local variable list : List [element] : A | provenance | | +| CollectionFlow.cs:116:20:116:38 | object creation of type List : List [element] : A | CollectionFlow.cs:119:24:119:27 | access to local variable list : List [element] : A | provenance | | +| CollectionFlow.cs:116:36:116:36 | access to local variable a : A | CollectionFlow.cs:116:20:116:38 | object creation of type List : List [element] : A | provenance | | +| CollectionFlow.cs:117:14:117:17 | access to local variable list : List [element] : A | CollectionFlow.cs:117:14:117:20 | access to indexer | provenance | | +| CollectionFlow.cs:118:22:118:25 | access to local variable list : List [element] : A | CollectionFlow.cs:16:49:16:52 | list : List [element] : A | provenance | | +| CollectionFlow.cs:119:24:119:27 | access to local variable list : List [element] : A | CollectionFlow.cs:24:43:24:46 | list : List [element] : A | provenance | | +| CollectionFlow.cs:119:24:119:27 | access to local variable list : List [element] : A | CollectionFlow.cs:119:14:119:28 | call to method ListFirst | provenance | | +| CollectionFlow.cs:132:17:132:23 | object creation of type A : A | CollectionFlow.cs:134:18:134:18 | access to local variable a : A | provenance | | +| CollectionFlow.cs:134:9:134:12 | [post] access to local variable list : List [element] : A | CollectionFlow.cs:135:14:135:17 | access to local variable list : List [element] : A | provenance | | +| CollectionFlow.cs:134:9:134:12 | [post] access to local variable list : List [element] : A | CollectionFlow.cs:136:22:136:25 | access to local variable list : List [element] : A | provenance | | +| CollectionFlow.cs:134:9:134:12 | [post] access to local variable list : List [element] : A | CollectionFlow.cs:137:24:137:27 | access to local variable list : List [element] : A | provenance | | +| CollectionFlow.cs:134:18:134:18 | access to local variable a : A | CollectionFlow.cs:134:9:134:12 | [post] access to local variable list : List [element] : A | provenance | | +| CollectionFlow.cs:135:14:135:17 | access to local variable list : List [element] : A | CollectionFlow.cs:135:14:135:20 | access to indexer | provenance | | +| CollectionFlow.cs:136:22:136:25 | access to local variable list : List [element] : A | CollectionFlow.cs:16:49:16:52 | list : List [element] : A | provenance | | +| CollectionFlow.cs:137:24:137:27 | access to local variable list : List [element] : A | CollectionFlow.cs:24:43:24:46 | list : List [element] : A | provenance | | +| CollectionFlow.cs:137:24:137:27 | access to local variable list : List [element] : A | CollectionFlow.cs:137:14:137:28 | call to method ListFirst | provenance | | +| CollectionFlow.cs:151:17:151:23 | object creation of type A : A | CollectionFlow.cs:153:19:153:19 | access to local variable a : A | provenance | | +| CollectionFlow.cs:153:9:153:12 | [post] access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:154:14:154:17 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:153:9:153:12 | [post] access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:155:23:155:26 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:153:9:153:12 | [post] access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:156:28:156:31 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:153:9:153:12 | [post] access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:157:29:157:32 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:153:9:153:12 | [post] access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:158:30:158:33 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:153:19:153:19 | access to local variable a : A | CollectionFlow.cs:153:9:153:12 | [post] access to local variable dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:154:14:154:17 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:154:14:154:20 | access to indexer | provenance | | +| CollectionFlow.cs:155:23:155:26 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:18:61:18:64 | dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:156:28:156:31 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:26:58:26:61 | dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:156:28:156:31 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:156:14:156:32 | call to method DictIndexZero | provenance | | +| CollectionFlow.cs:157:29:157:32 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:28:59:28:62 | dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:157:29:157:32 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:157:14:157:33 | call to method DictFirstValue | provenance | | +| CollectionFlow.cs:158:30:158:33 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:30:60:30:63 | dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:158:30:158:33 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:158:14:158:34 | call to method DictValuesFirst | provenance | | +| CollectionFlow.cs:174:17:174:23 | object creation of type A : A | CollectionFlow.cs:175:52:175:52 | access to local variable a : A | provenance | | +| CollectionFlow.cs:175:20:175:56 | object creation of type Dictionary : Dictionary [element, property Value] : A | CollectionFlow.cs:176:14:176:17 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:175:20:175:56 | object creation of type Dictionary : Dictionary [element, property Value] : A | CollectionFlow.cs:177:23:177:26 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:175:20:175:56 | object creation of type Dictionary : Dictionary [element, property Value] : A | CollectionFlow.cs:178:28:178:31 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:175:20:175:56 | object creation of type Dictionary : Dictionary [element, property Value] : A | CollectionFlow.cs:179:29:179:32 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:175:20:175:56 | object creation of type Dictionary : Dictionary [element, property Value] : A | CollectionFlow.cs:180:30:180:33 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:175:52:175:52 | access to local variable a : A | CollectionFlow.cs:175:20:175:56 | object creation of type Dictionary : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:176:14:176:17 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:176:14:176:20 | access to indexer | provenance | | +| CollectionFlow.cs:177:23:177:26 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:18:61:18:64 | dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:178:28:178:31 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:26:58:26:61 | dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:178:28:178:31 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:178:14:178:32 | call to method DictIndexZero | provenance | | +| CollectionFlow.cs:179:29:179:32 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:28:59:28:62 | dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:179:29:179:32 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:179:14:179:33 | call to method DictFirstValue | provenance | | +| CollectionFlow.cs:180:30:180:33 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:30:60:30:63 | dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:180:30:180:33 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:180:14:180:34 | call to method DictValuesFirst | provenance | | +| CollectionFlow.cs:195:17:195:23 | object creation of type A : A | CollectionFlow.cs:196:53:196:53 | access to local variable a : A | provenance | | +| CollectionFlow.cs:196:20:196:55 | object creation of type Dictionary : Dictionary [element, property Value] : A | CollectionFlow.cs:197:14:197:17 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:196:20:196:55 | object creation of type Dictionary : Dictionary [element, property Value] : A | CollectionFlow.cs:198:23:198:26 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:196:20:196:55 | object creation of type Dictionary : Dictionary [element, property Value] : A | CollectionFlow.cs:199:28:199:31 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:196:20:196:55 | object creation of type Dictionary : Dictionary [element, property Value] : A | CollectionFlow.cs:200:29:200:32 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:196:20:196:55 | object creation of type Dictionary : Dictionary [element, property Value] : A | CollectionFlow.cs:201:30:201:33 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:196:53:196:53 | access to local variable a : A | CollectionFlow.cs:196:20:196:55 | object creation of type Dictionary : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:197:14:197:17 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:197:14:197:20 | access to indexer | provenance | | +| CollectionFlow.cs:198:23:198:26 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:18:61:18:64 | dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:199:28:199:31 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:26:58:26:61 | dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:199:28:199:31 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:199:14:199:32 | call to method DictIndexZero | provenance | | +| CollectionFlow.cs:200:29:200:32 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:28:59:28:62 | dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:200:29:200:32 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:200:14:200:33 | call to method DictFirstValue | provenance | | +| CollectionFlow.cs:201:30:201:33 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:30:60:30:63 | dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:201:30:201:33 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:201:14:201:34 | call to method DictValuesFirst | provenance | | +| CollectionFlow.cs:217:17:217:23 | object creation of type A : A | CollectionFlow.cs:218:49:218:49 | access to local variable a : A | provenance | | +| CollectionFlow.cs:218:20:218:56 | object creation of type Dictionary : Dictionary [element, property Key] : A | CollectionFlow.cs:219:14:219:17 | access to local variable dict : Dictionary [element, property Key] : A | provenance | | +| CollectionFlow.cs:218:20:218:56 | object creation of type Dictionary : Dictionary [element, property Key] : A | CollectionFlow.cs:220:21:220:24 | access to local variable dict : Dictionary [element, property Key] : A | provenance | | +| CollectionFlow.cs:218:20:218:56 | object creation of type Dictionary : Dictionary [element, property Key] : A | CollectionFlow.cs:221:28:221:31 | access to local variable dict : Dictionary [element, property Key] : A | provenance | | +| CollectionFlow.cs:218:20:218:56 | object creation of type Dictionary : Dictionary [element, property Key] : A | CollectionFlow.cs:222:27:222:30 | access to local variable dict : Dictionary [element, property Key] : A | provenance | | +| CollectionFlow.cs:218:49:218:49 | access to local variable a : A | CollectionFlow.cs:218:20:218:56 | object creation of type Dictionary : Dictionary [element, property Key] : A | provenance | | +| CollectionFlow.cs:219:14:219:17 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:219:14:219:22 | access to property Keys : Dictionary.KeyCollection [element] : A | provenance | | +| CollectionFlow.cs:219:14:219:22 | access to property Keys : Dictionary.KeyCollection [element] : A | CollectionFlow.cs:219:14:219:30 | call to method First | provenance | | +| CollectionFlow.cs:220:21:220:24 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:20:59:20:62 | dict : Dictionary [element, property Key] : A | provenance | | +| CollectionFlow.cs:221:28:221:31 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:32:58:32:61 | dict : Dictionary [element, property Key] : A | provenance | | +| CollectionFlow.cs:221:28:221:31 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:221:14:221:32 | call to method DictKeysFirst | provenance | | +| 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 | provenance | | +| CollectionFlow.cs:222:27:222:30 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:222:14:222:31 | call to method DictFirstKey | provenance | | +| CollectionFlow.cs:236:17:236:23 | object creation of type A : A | CollectionFlow.cs:237:48:237:48 | access to local variable a : A | provenance | | +| CollectionFlow.cs:237:20:237:55 | object creation of type Dictionary : Dictionary [element, property Key] : A | CollectionFlow.cs:238:14:238:17 | access to local variable dict : Dictionary [element, property Key] : A | provenance | | +| CollectionFlow.cs:237:20:237:55 | object creation of type Dictionary : Dictionary [element, property Key] : A | CollectionFlow.cs:239:21:239:24 | access to local variable dict : Dictionary [element, property Key] : A | provenance | | +| CollectionFlow.cs:237:20:237:55 | object creation of type Dictionary : Dictionary [element, property Key] : A | CollectionFlow.cs:240:28:240:31 | access to local variable dict : Dictionary [element, property Key] : A | provenance | | +| CollectionFlow.cs:237:20:237:55 | object creation of type Dictionary : Dictionary [element, property Key] : A | CollectionFlow.cs:241:27:241:30 | access to local variable dict : Dictionary [element, property Key] : A | provenance | | +| CollectionFlow.cs:237:48:237:48 | access to local variable a : A | CollectionFlow.cs:237:20:237:55 | object creation of type Dictionary : Dictionary [element, property Key] : A | provenance | | +| CollectionFlow.cs:238:14:238:17 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:238:14:238:22 | access to property Keys : Dictionary.KeyCollection [element] : A | provenance | | +| CollectionFlow.cs:238:14:238:22 | access to property Keys : Dictionary.KeyCollection [element] : A | CollectionFlow.cs:238:14:238:30 | call to method First | provenance | | +| CollectionFlow.cs:239:21:239:24 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:20:59:20:62 | dict : Dictionary [element, property Key] : A | provenance | | +| 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 | provenance | | +| CollectionFlow.cs:240:28:240:31 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:240:14:240:32 | call to method DictKeysFirst | provenance | | +| 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 | provenance | | +| CollectionFlow.cs:241:27:241:30 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:241:14:241:31 | call to method DictFirstKey | provenance | | +| CollectionFlow.cs:255:17:255:23 | object creation of type A : A | CollectionFlow.cs:256:27:256:27 | access to local variable a : A | provenance | | +| CollectionFlow.cs:256:25:256:29 | { ..., ... } : null [element] : A | CollectionFlow.cs:257:27:257:29 | access to local variable as : null [element] : A | provenance | | +| CollectionFlow.cs:256:27:256:27 | access to local variable a : A | CollectionFlow.cs:256:25:256:29 | { ..., ... } : null [element] : A | provenance | | +| CollectionFlow.cs:257:22:257:22 | SSA def(x) : A | CollectionFlow.cs:258:18:258:18 | access to local variable x | provenance | | +| CollectionFlow.cs:257:27:257:29 | access to local variable as : null [element] : A | CollectionFlow.cs:257:22:257:22 | SSA def(x) : A | provenance | | +| CollectionFlow.cs:270:17:270:23 | object creation of type A : A | CollectionFlow.cs:271:27:271:27 | access to local variable a : A | provenance | | +| CollectionFlow.cs:271:25:271:29 | { ..., ... } : null [element] : A | CollectionFlow.cs:272:26:272:28 | access to local variable as : null [element] : A | provenance | | +| CollectionFlow.cs:271:27:271:27 | access to local variable a : A | CollectionFlow.cs:271:25:271:29 | { ..., ... } : null [element] : A | provenance | | +| CollectionFlow.cs:272:26:272:28 | access to local variable as : null [element] : A | CollectionFlow.cs:272:26:272:44 | call to method GetEnumerator : IEnumerator [property Current] : A | provenance | | +| CollectionFlow.cs:272:26:272:44 | call to method GetEnumerator : IEnumerator [property Current] : A | CollectionFlow.cs:274:18:274:27 | access to local variable enumerator : IEnumerator [property Current] : A | provenance | | +| CollectionFlow.cs:274:18:274:27 | access to local variable enumerator : IEnumerator [property Current] : A | CollectionFlow.cs:274:18:274:35 | access to property Current | provenance | | +| CollectionFlow.cs:287:17:287:23 | object creation of type A : A | CollectionFlow.cs:289:18:289:18 | access to local variable a : A | provenance | | +| CollectionFlow.cs:289:9:289:12 | [post] access to local variable list : List [element] : A | CollectionFlow.cs:290:26:290:29 | access to local variable list : List [element] : A | provenance | | +| CollectionFlow.cs:289:18:289:18 | access to local variable a : A | CollectionFlow.cs:289:9:289:12 | [post] access to local variable list : List [element] : A | provenance | | +| CollectionFlow.cs:290:26:290:29 | access to local variable list : List [element] : A | CollectionFlow.cs:290:26:290:45 | call to method GetEnumerator : List.Enumerator [property Current] : A | provenance | | +| CollectionFlow.cs:290:26:290:45 | call to method GetEnumerator : List.Enumerator [property Current] : A | CollectionFlow.cs:292:18:292:27 | access to local variable enumerator : List.Enumerator [property Current] : A | provenance | | +| CollectionFlow.cs:292:18:292:27 | access to local variable enumerator : List.Enumerator [property Current] : A | CollectionFlow.cs:292:18:292:35 | access to property Current | provenance | | +| CollectionFlow.cs:306:17:306:23 | object creation of type A : A | CollectionFlow.cs:308:43:308:43 | access to local variable a : A | provenance | | +| CollectionFlow.cs:308:9:308:12 | [post] access to local variable list : List [element, property Key] : A | CollectionFlow.cs:309:9:309:12 | access to local variable list : List [element, property Key] : A | provenance | | +| CollectionFlow.cs:308:18:308:47 | object creation of type KeyValuePair : KeyValuePair [property Key] : A | CollectionFlow.cs:308:9:308:12 | [post] access to local variable list : List [element, property Key] : A | provenance | | +| CollectionFlow.cs:308:43:308:43 | access to local variable a : A | CollectionFlow.cs:308:18:308:47 | object creation of type KeyValuePair : KeyValuePair [property Key] : A | provenance | | +| CollectionFlow.cs:309:9:309:12 | access to local variable list : List [element, property Key] : A | CollectionFlow.cs:309:21:309:23 | kvp : KeyValuePair [property Key] : A | provenance | | +| 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: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:17:332:23 | object creation of type A : A | CollectionFlow.cs:334:23:334:23 | access to local variable a : A | provenance | | +| CollectionFlow.cs:334:18:334:20 | [post] access to local variable as : A[] [element] : A | CollectionFlow.cs:335:14:335:16 | access to local variable as : A[] [element] : A | provenance | | +| CollectionFlow.cs:334:18:334:20 | [post] access to local variable as : A[] [element] : A | CollectionFlow.cs:336:18:336:20 | access to local variable as : A[] [element] : A | provenance | | +| 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 | provenance | | +| CollectionFlow.cs:334:23:334:23 | access to local variable a : A | CollectionFlow.cs:328:32:328:38 | element : A | provenance | | +| CollectionFlow.cs:334:23:334:23 | access to local variable a : A | CollectionFlow.cs:334:18:334:20 | [post] access to local variable as : A[] [element] : A | provenance | | +| CollectionFlow.cs:335:14:335:16 | access to local variable as : A[] [element] : A | CollectionFlow.cs:335:14:335:19 | access to array element | provenance | | +| CollectionFlow.cs:336:18:336:20 | access to local variable as : A[] [element] : A | CollectionFlow.cs:14:40:14:41 | ts : A[] [element] : A | provenance | | +| 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:55:350:61 | access to parameter element : A | CollectionFlow.cs:350:46:350:49 | [post] access to parameter list : List [element] : A | provenance | | +| CollectionFlow.cs:354:17:354:23 | object creation of type A : A | CollectionFlow.cs:356:23:356:23 | access to local variable a : A | provenance | | +| CollectionFlow.cs:356:17:356:20 | [post] access to local variable list : List [element] : A | CollectionFlow.cs:357:14:357:17 | access to local variable list : List [element] : A | provenance | | +| CollectionFlow.cs:356:17:356:20 | [post] access to local variable list : List [element] : A | CollectionFlow.cs:358:22:358:25 | access to local variable list : List [element] : A | provenance | | +| 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 | provenance | | +| CollectionFlow.cs:356:23:356:23 | access to local variable a : A | CollectionFlow.cs:350:34:350:40 | element : A | provenance | | +| CollectionFlow.cs:356:23:356:23 | access to local variable a : A | CollectionFlow.cs:356:17:356:20 | [post] access to local variable list : List [element] : A | provenance | | +| CollectionFlow.cs:357:14:357:17 | access to local variable list : List [element] : A | CollectionFlow.cs:357:14:357:20 | access to indexer | provenance | | +| CollectionFlow.cs:358:22:358:25 | access to local variable list : List [element] : A | CollectionFlow.cs:16:49:16:52 | list : List [element] : A | provenance | | +| CollectionFlow.cs:359:24:359:27 | access to local variable list : List [element] : A | CollectionFlow.cs:24:43:24:46 | list : List [element] : A | provenance | | +| CollectionFlow.cs:359:24:359:27 | access to local variable list : List [element] : A | CollectionFlow.cs:359:14:359:28 | call to method ListFirst | provenance | | +| CollectionFlow.cs:373:20:373:26 | object creation of type A : A | CollectionFlow.cs:36:49:36:52 | args : A[] [element] : A | provenance | | +| CollectionFlow.cs:374:26:374:32 | object creation of type A : A | CollectionFlow.cs:36:49:36:52 | args : A[] [element] : A | provenance | | +| CollectionFlow.cs:375:26:375:32 | object creation of type A : A | CollectionFlow.cs:36:49:36:52 | args : A[] [element] : A | provenance | | +| CollectionFlow.cs:376:20:376:38 | array creation of type A[] : null [element] : A | CollectionFlow.cs:36:49:36:52 | args : null [element] : A | provenance | | +| CollectionFlow.cs:376:28:376:38 | { ..., ... } : null [element] : A | CollectionFlow.cs:376:20:376:38 | array creation of type A[] : null [element] : A | provenance | | +| CollectionFlow.cs:376:30:376:36 | object creation of type A : A | CollectionFlow.cs:376:28:376:38 | { ..., ... } : null [element] : A | provenance | | +| CollectionFlow.cs:406:17:406:23 | object creation of type A : A | CollectionFlow.cs:408:20:408:20 | access to local variable a : A | provenance | | +| CollectionFlow.cs:408:9:408:13 | [post] access to local variable array : MyInlineArray [element] : A | CollectionFlow.cs:409:14:409:18 | access to local variable array : MyInlineArray [element] : A | provenance | | +| CollectionFlow.cs:408:20:408:20 | access to local variable a : A | CollectionFlow.cs:408:9:408:13 | [post] access to local variable array : MyInlineArray [element] : A | provenance | | +| CollectionFlow.cs:409:14:409:18 | access to local variable array : MyInlineArray [element] : A | CollectionFlow.cs:409:14:409:21 | access to array element | provenance | | +| CollectionFlow.cs:427:17:427:23 | object creation of type A : A | CollectionFlow.cs:428:22:428:22 | access to local variable a : A | provenance | | +| CollectionFlow.cs:428:21:428:23 | [...] : A[] [element] : A | CollectionFlow.cs:429:14:429:18 | access to local variable array : A[] [element] : A | provenance | | +| CollectionFlow.cs:428:22:428:22 | access to local variable a : A | CollectionFlow.cs:428:21:428:23 | [...] : A[] [element] : A | provenance | | +| CollectionFlow.cs:429:14:429:18 | access to local variable array : A[] [element] : A | CollectionFlow.cs:429:14:429:21 | access to array element | provenance | | +| CollectionFlow.cs:434:17:434:23 | object creation of type A : A | CollectionFlow.cs:435:22:435:22 | access to local variable a : A | provenance | | +| CollectionFlow.cs:435:21:435:23 | [...] : List [element] : A | CollectionFlow.cs:436:14:436:14 | access to local variable l : List [element] : A | provenance | | +| CollectionFlow.cs:435:22:435:22 | access to local variable a : A | CollectionFlow.cs:435:21:435:23 | [...] : List [element] : A | provenance | | +| CollectionFlow.cs:436:14:436:14 | access to local variable l : List [element] : A | CollectionFlow.cs:436:14:436:17 | access to indexer | provenance | | +| CollectionFlow.cs:447:17:447:23 | object creation of type A : A | CollectionFlow.cs:448:21:448:21 | access to local variable a : A | provenance | | +| CollectionFlow.cs:448:20:448:22 | [...] : A[] [element] : A | CollectionFlow.cs:449:22:449:28 | .. access to local variable temp : A[] [element] : A | provenance | | +| CollectionFlow.cs:448:21:448:21 | access to local variable a : A | CollectionFlow.cs:448:20:448:22 | [...] : A[] [element] : A | provenance | | +| CollectionFlow.cs:449:22:449:28 | .. access to local variable temp : A[] [element] : A | CollectionFlow.cs:450:14:450:18 | access to local variable array : A[] [element] : A | provenance | | +| CollectionFlow.cs:450:14:450:18 | access to local variable array : A[] [element] : A | CollectionFlow.cs:450:14:450:21 | access to array element | provenance | | +| CollectionFlow.cs:487:17:487:23 | object creation of type A : A | CollectionFlow.cs:488:40:488:40 | access to local variable a : A | provenance | | +| CollectionFlow.cs:488:24:488:41 | object creation of type Span : Span [element] : A | CollectionFlow.cs:489:14:489:17 | access to local variable span : Span [element] : A | provenance | | +| CollectionFlow.cs:488:40:488:40 | access to local variable a : A | CollectionFlow.cs:488:24:488:41 | object creation of type Span : Span [element] : A | provenance | | +| CollectionFlow.cs:489:14:489:17 | access to local variable span : Span [element] : A | CollectionFlow.cs:489:14:489:20 | access to indexer | provenance | | +| CollectionFlow.cs:494:17:494:23 | object creation of type A : A | CollectionFlow.cs:495:40:495:40 | access to local variable a : A | provenance | | +| CollectionFlow.cs:495:24:495:41 | object creation of type Span : Span [element] : A | CollectionFlow.cs:496:19:496:22 | access to local variable span : Span [element] : A | provenance | | +| CollectionFlow.cs:495:40:495:40 | access to local variable a : A | CollectionFlow.cs:495:24:495:41 | object creation of type Span : Span [element] : A | provenance | | +| CollectionFlow.cs:496:19:496:22 | access to local variable span : Span [element] : A | CollectionFlow.cs:496:19:496:32 | call to method ToArray : T[] [element] : A | provenance | | +| CollectionFlow.cs:496:19:496:32 | call to method ToArray : T[] [element] : A | CollectionFlow.cs:497:14:497:16 | access to local variable arr : T[] [element] : A | provenance | | +| CollectionFlow.cs:497:14:497:16 | access to local variable arr : T[] [element] : A | CollectionFlow.cs:497:14:497:19 | access to array element | provenance | | +| CollectionFlow.cs:502:17:502:23 | object creation of type A : A | CollectionFlow.cs:503:21:503:21 | access to local variable a : A | provenance | | +| CollectionFlow.cs:503:9:503:14 | [post] access to parameter target : Span [element] : A | CollectionFlow.cs:504:14:504:19 | access to parameter target : Span [element] : A | provenance | | +| CollectionFlow.cs:503:21:503:21 | access to local variable a : A | CollectionFlow.cs:503:9:503:14 | [post] access to parameter target : Span [element] : A | provenance | | +| CollectionFlow.cs:504:14:504:19 | access to parameter target : Span [element] : A | CollectionFlow.cs:504:14:504:22 | access to indexer | provenance | | +| CollectionFlow.cs:509:22:509:51 | object creation of type Span : Span [element] : A | CollectionFlow.cs:510:9:510:14 | access to local variable source : Span [element] : A | provenance | | +| CollectionFlow.cs:509:34:509:50 | array creation of type A[] : null [element] : A | CollectionFlow.cs:509:22:509:51 | object creation of type Span : Span [element] : A | provenance | | +| CollectionFlow.cs:509:40:509:50 | { ..., ... } : null [element] : A | CollectionFlow.cs:509:34:509:50 | array creation of type A[] : null [element] : A | provenance | | +| CollectionFlow.cs:509:42:509:48 | object creation of type A : A | CollectionFlow.cs:509:40:509:50 | { ..., ... } : null [element] : A | provenance | | +| CollectionFlow.cs:510:9:510:14 | access to local variable source : Span [element] : A | CollectionFlow.cs:510:23:510:28 | [post] access to parameter target : Span [element] : A | provenance | | +| CollectionFlow.cs:510:23:510:28 | [post] access to parameter target : Span [element] : A | CollectionFlow.cs:511:14:511:19 | access to parameter target : Span [element] : A | provenance | | +| CollectionFlow.cs:511:14:511:19 | access to parameter target : Span [element] : A | CollectionFlow.cs:511:14:511:22 | access to indexer | provenance | | +| CollectionFlow.cs:516:17:516:23 | object creation of type A : A | CollectionFlow.cs:517:60:517:60 | access to local variable a : A | provenance | | +| CollectionFlow.cs:517:32:517:63 | object creation of type ReadOnlySpan : ReadOnlySpan [element] : A | CollectionFlow.cs:518:14:518:17 | access to local variable span : ReadOnlySpan [element] : A | provenance | | +| CollectionFlow.cs:517:52:517:62 | array creation of type A[] : null [element] : A | CollectionFlow.cs:517:32:517:63 | object creation of type ReadOnlySpan : ReadOnlySpan [element] : A | provenance | | +| CollectionFlow.cs:517:58:517:62 | { ..., ... } : null [element] : A | CollectionFlow.cs:517:52:517:62 | array creation of type A[] : null [element] : A | provenance | | +| CollectionFlow.cs:517:60:517:60 | access to local variable a : A | CollectionFlow.cs:517:58:517:62 | { ..., ... } : null [element] : A | provenance | | +| CollectionFlow.cs:518:14:518:17 | access to local variable span : ReadOnlySpan [element] : A | CollectionFlow.cs:518:14:518:20 | access to indexer | provenance | | nodes | CollectionFlow.cs:14:40:14:41 | ts : A[] [element] : A | semmle.label | ts : A[] [element] : A | | CollectionFlow.cs:14:40:14:41 | ts : null [element] : A | semmle.label | ts : null [element] : A | diff --git a/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.expected b/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.expected index cd3e2b94127..a64ed809a80 100644 --- a/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.expected +++ b/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.expected @@ -1,77 +1,77 @@ invalidModelRow edges -| ExternalFlow.cs:9:27:9:38 | object creation of type Object : Object | ExternalFlow.cs:10:29:10:32 | access to local variable arg1 : Object | -| ExternalFlow.cs:10:29:10:32 | access to local variable arg1 : Object | ExternalFlow.cs:10:18:10:33 | call to method StepArgRes | -| ExternalFlow.cs:15:29:15:40 | object creation of type Object : Object | ExternalFlow.cs:17:24:17:29 | access to local variable argIn1 : Object | -| ExternalFlow.cs:16:30:16:41 | object creation of type Object : Object | ExternalFlow.cs:18:18:18:24 | access to local variable argOut1 | -| ExternalFlow.cs:17:24:17:29 | access to local variable argIn1 : Object | ExternalFlow.cs:17:32:17:38 | [post] access to local variable argOut1 : Object | -| ExternalFlow.cs:17:32:17:38 | [post] access to local variable argOut1 : Object | ExternalFlow.cs:18:18:18:24 | access to local variable argOut1 | -| ExternalFlow.cs:23:27:23:38 | object creation of type Object : Object | ExternalFlow.cs:24:25:24:28 | access to local variable arg2 : Object | -| ExternalFlow.cs:24:13:24:29 | [post] this access : D | ExternalFlow.cs:25:18:25:21 | this access | -| ExternalFlow.cs:24:25:24:28 | access to local variable arg2 : Object | ExternalFlow.cs:24:13:24:29 | [post] this access : D | -| ExternalFlow.cs:30:13:30:16 | [post] this access : D [field Field] : Object | ExternalFlow.cs:31:18:31:21 | this access : D [field Field] : Object | -| ExternalFlow.cs:30:26:30:37 | object creation of type Object : Object | ExternalFlow.cs:30:13:30:16 | [post] this access : D [field Field] : Object | -| ExternalFlow.cs:31:18:31:21 | this access : D [field Field] : Object | ExternalFlow.cs:31:18:31:39 | call to method StepFieldGetter | -| ExternalFlow.cs:36:19:36:62 | (...) ... : D [field Field] : Object | ExternalFlow.cs:36:18:36:69 | access to field Field | -| ExternalFlow.cs:36:22:36:25 | [post] this access : D [field Field] : Object | ExternalFlow.cs:37:18:37:21 | this access : D [field Field] : Object | -| ExternalFlow.cs:36:22:36:55 | call to method StepFieldSetter : D [field Field2, field Field] : Object | ExternalFlow.cs:36:22:36:62 | access to field Field2 : Object [field Field] : Object | -| ExternalFlow.cs:36:22:36:62 | access to field Field2 : Object [field Field] : Object | ExternalFlow.cs:36:19:36:62 | (...) ... : D [field Field] : Object | -| ExternalFlow.cs:36:43:36:54 | object creation of type Object : Object | ExternalFlow.cs:36:22:36:25 | [post] this access : D [field Field] : Object | -| ExternalFlow.cs:36:43:36:54 | object creation of type Object : Object | ExternalFlow.cs:36:22:36:55 | call to method StepFieldSetter : D [field Field2, field Field] : Object | -| ExternalFlow.cs:37:18:37:21 | this access : D [field Field] : Object | ExternalFlow.cs:37:18:37:27 | access to field Field | -| ExternalFlow.cs:42:13:42:16 | [post] this access : D [property Property] : Object | ExternalFlow.cs:43:18:43:21 | this access : D [property Property] : Object | -| ExternalFlow.cs:42:29:42:40 | object creation of type Object : Object | ExternalFlow.cs:42:13:42:16 | [post] this access : D [property Property] : Object | -| ExternalFlow.cs:43:18:43:21 | this access : D [property Property] : Object | ExternalFlow.cs:43:18:43:42 | call to method StepPropertyGetter | -| ExternalFlow.cs:48:13:48:16 | [post] this access : D [property Property] : Object | ExternalFlow.cs:49:18:49:21 | this access : D [property Property] : Object | -| ExternalFlow.cs:48:37:48:48 | object creation of type Object : Object | ExternalFlow.cs:48:13:48:16 | [post] this access : D [property Property] : Object | -| ExternalFlow.cs:49:18:49:21 | this access : D [property Property] : Object | ExternalFlow.cs:49:18:49:30 | access to property Property | -| ExternalFlow.cs:54:13:54:16 | [post] this access : D [element] : Object | ExternalFlow.cs:55:18:55:21 | this access : D [element] : Object | -| ExternalFlow.cs:54:36:54:47 | object creation of type Object : Object | ExternalFlow.cs:54:13:54:16 | [post] this access : D [element] : Object | -| ExternalFlow.cs:55:18:55:21 | this access : D [element] : Object | ExternalFlow.cs:55:18:55:41 | call to method StepElementGetter | -| ExternalFlow.cs:60:35:60:35 | o : Object | ExternalFlow.cs:60:47:60:47 | access to parameter o | -| ExternalFlow.cs:60:64:60:75 | object creation of type Object : Object | ExternalFlow.cs:60:35:60:35 | o : Object | -| ExternalFlow.cs:65:21:65:60 | call to method Apply : Object | ExternalFlow.cs:66:18:66:18 | access to local variable o | -| ExternalFlow.cs:65:45:65:56 | object creation of type Object : Object | ExternalFlow.cs:65:21:65:60 | call to method Apply : Object | -| ExternalFlow.cs:71:30:71:45 | { ..., ... } : null [element] : Object | ExternalFlow.cs:72:17:72:20 | access to local variable objs : null [element] : Object | -| ExternalFlow.cs:71:32:71:43 | object creation of type Object : Object | ExternalFlow.cs:71:30:71:45 | { ..., ... } : null [element] : Object | -| ExternalFlow.cs:72:17:72:20 | access to local variable objs : null [element] : Object | ExternalFlow.cs:72:23:72:23 | o : Object | -| ExternalFlow.cs:72:23:72:23 | o : Object | ExternalFlow.cs:72:35:72:35 | access to parameter o | -| ExternalFlow.cs:77:24:77:58 | call to method Map : T[] [element] : Object | ExternalFlow.cs:78:18:78:21 | access to local variable objs : T[] [element] : Object | -| ExternalFlow.cs:77:46:77:57 | object creation of type Object : Object | ExternalFlow.cs:77:24:77:58 | call to method Map : T[] [element] : Object | -| ExternalFlow.cs:78:18:78:21 | access to local variable objs : T[] [element] : Object | ExternalFlow.cs:78:18:78:24 | access to array element | -| ExternalFlow.cs:83:30:83:45 | { ..., ... } : null [element] : Object | ExternalFlow.cs:84:29:84:32 | access to local variable objs : null [element] : Object | -| ExternalFlow.cs:83:32:83:43 | object creation of type Object : Object | ExternalFlow.cs:83:30:83:45 | { ..., ... } : null [element] : Object | -| ExternalFlow.cs:84:25:84:41 | call to method Map : T[] [element] : Object | ExternalFlow.cs:85:18:85:22 | access to local variable objs2 : T[] [element] : Object | -| ExternalFlow.cs:84:29:84:32 | access to local variable objs : null [element] : Object | ExternalFlow.cs:84:25:84:41 | call to method Map : T[] [element] : Object | -| ExternalFlow.cs:85:18:85:22 | access to local variable objs2 : T[] [element] : Object | ExternalFlow.cs:85:18:85:25 | access to array element | -| ExternalFlow.cs:90:21:90:34 | object creation of type String : String | ExternalFlow.cs:91:19:91:19 | access to local variable s : String | -| ExternalFlow.cs:91:19:91:19 | access to local variable s : String | ExternalFlow.cs:91:30:91:30 | SSA def(i) : Int32 | -| ExternalFlow.cs:91:30:91:30 | SSA def(i) : Int32 | ExternalFlow.cs:92:18:92:18 | (...) ... | -| ExternalFlow.cs:98:13:98:14 | [post] access to local variable d1 : D [field Field] : Object | ExternalFlow.cs:103:16:103:17 | access to local variable d1 : D [field Field] : Object | -| ExternalFlow.cs:98:13:98:14 | [post] access to local variable d1 : D [field Field] : Object | ExternalFlow.cs:104:18:104:19 | access to local variable d1 : D [field Field] : Object | -| ExternalFlow.cs:98:24:98:35 | object creation of type Object : Object | ExternalFlow.cs:98:13:98:14 | [post] access to local variable d1 : D [field Field] : Object | -| ExternalFlow.cs:100:20:100:20 | d : Object | ExternalFlow.cs:102:22:102:22 | access to parameter d | -| ExternalFlow.cs:103:16:103:17 | access to local variable d1 : D [field Field] : Object | ExternalFlow.cs:100:20:100:20 | d : Object | -| ExternalFlow.cs:104:18:104:19 | access to local variable d1 : D [field Field] : Object | ExternalFlow.cs:104:18:104:25 | access to field Field | -| ExternalFlow.cs:111:13:111:13 | [post] access to local variable f : F [field MyField] : Object | ExternalFlow.cs:112:18:112:18 | access to local variable f : F [field MyField] : Object | -| ExternalFlow.cs:111:24:111:35 | object creation of type Object : Object | ExternalFlow.cs:111:13:111:13 | [post] access to local variable f : F [field MyField] : Object | -| ExternalFlow.cs:112:18:112:18 | access to local variable f : F [field MyField] : Object | ExternalFlow.cs:112:18:112:25 | access to property MyProp | -| ExternalFlow.cs:117:34:117:49 | { ..., ... } : null [element] : Object | ExternalFlow.cs:118:29:118:29 | access to local variable a : null [element] : Object | -| ExternalFlow.cs:117:36:117:47 | object creation of type Object : Object | ExternalFlow.cs:117:34:117:49 | { ..., ... } : null [element] : Object | -| ExternalFlow.cs:118:21:118:30 | call to method Reverse : null [element] : Object | ExternalFlow.cs:120:18:120:18 | access to local variable b : null [element] : Object | -| ExternalFlow.cs:118:29:118:29 | access to local variable a : null [element] : Object | ExternalFlow.cs:118:21:118:30 | call to method Reverse : null [element] : Object | -| ExternalFlow.cs:120:18:120:18 | access to local variable b : null [element] : Object | ExternalFlow.cs:120:18:120:21 | access to array element | -| ExternalFlow.cs:205:22:205:33 | object creation of type Object : Object | ExternalFlow.cs:206:38:206:39 | access to local variable o2 : Object | -| ExternalFlow.cs:206:38:206:39 | access to local variable o2 : Object | ExternalFlow.cs:206:18:206:40 | call to method MixedFlowArgs | -| ExternalFlow.cs:211:22:211:33 | object creation of type Object : Object | ExternalFlow.cs:212:52:212:53 | access to local variable o1 : Object | -| ExternalFlow.cs:212:52:212:53 | access to local variable o1 : Object | ExternalFlow.cs:212:18:212:54 | call to method GeneratedFlowWithGeneratedNeutral | -| ExternalFlow.cs:244:21:244:28 | object creation of type HC : HC | ExternalFlow.cs:245:21:245:21 | access to local variable h : HC | -| ExternalFlow.cs:245:21:245:21 | access to local variable h : HC | ExternalFlow.cs:245:21:245:39 | call to method ExtensionMethod : HC | -| ExternalFlow.cs:245:21:245:39 | call to method ExtensionMethod : HC | ExternalFlow.cs:246:18:246:18 | access to local variable o | -| ExternalFlow.cs:262:13:262:13 | [post] access to parameter a : MyInlineArray [element] : Object | ExternalFlow.cs:263:30:263:30 | access to parameter a : MyInlineArray [element] : Object | -| ExternalFlow.cs:262:20:262:31 | object creation of type Object : Object | ExternalFlow.cs:262:13:262:13 | [post] access to parameter a : MyInlineArray [element] : Object | -| ExternalFlow.cs:263:21:263:31 | call to method GetFirst : Object | ExternalFlow.cs:264:18:264:18 | access to local variable b | -| ExternalFlow.cs:263:30:263:30 | access to parameter a : MyInlineArray [element] : Object | ExternalFlow.cs:263:21:263:31 | call to method GetFirst : Object | +| ExternalFlow.cs:9:27:9:38 | object creation of type Object : Object | ExternalFlow.cs:10:29:10:32 | access to local variable arg1 : Object | provenance | | +| ExternalFlow.cs:10:29:10:32 | access to local variable arg1 : Object | ExternalFlow.cs:10:18:10:33 | call to method StepArgRes | provenance | | +| ExternalFlow.cs:15:29:15:40 | object creation of type Object : Object | ExternalFlow.cs:17:24:17:29 | access to local variable argIn1 : Object | provenance | | +| ExternalFlow.cs:16:30:16:41 | object creation of type Object : Object | ExternalFlow.cs:18:18:18:24 | access to local variable argOut1 | provenance | | +| ExternalFlow.cs:17:24:17:29 | access to local variable argIn1 : Object | ExternalFlow.cs:17:32:17:38 | [post] access to local variable argOut1 : Object | provenance | | +| ExternalFlow.cs:17:32:17:38 | [post] access to local variable argOut1 : Object | ExternalFlow.cs:18:18:18:24 | access to local variable argOut1 | provenance | | +| ExternalFlow.cs:23:27:23:38 | object creation of type Object : Object | ExternalFlow.cs:24:25:24:28 | access to local variable arg2 : Object | provenance | | +| ExternalFlow.cs:24:13:24:29 | [post] this access : D | ExternalFlow.cs:25:18:25:21 | this access | provenance | | +| ExternalFlow.cs:24:25:24:28 | access to local variable arg2 : Object | ExternalFlow.cs:24:13:24:29 | [post] this access : D | provenance | | +| ExternalFlow.cs:30:13:30:16 | [post] this access : D [field Field] : Object | ExternalFlow.cs:31:18:31:21 | this access : D [field Field] : Object | provenance | | +| ExternalFlow.cs:30:26:30:37 | object creation of type Object : Object | ExternalFlow.cs:30:13:30:16 | [post] this access : D [field Field] : Object | provenance | | +| ExternalFlow.cs:31:18:31:21 | this access : D [field Field] : Object | ExternalFlow.cs:31:18:31:39 | call to method StepFieldGetter | provenance | | +| ExternalFlow.cs:36:19:36:62 | (...) ... : D [field Field] : Object | ExternalFlow.cs:36:18:36:69 | access to field Field | provenance | | +| ExternalFlow.cs:36:22:36:25 | [post] this access : D [field Field] : Object | ExternalFlow.cs:37:18:37:21 | this access : D [field Field] : Object | provenance | | +| ExternalFlow.cs:36:22:36:55 | call to method StepFieldSetter : D [field Field2, field Field] : Object | ExternalFlow.cs:36:22:36:62 | access to field Field2 : Object [field Field] : Object | provenance | | +| ExternalFlow.cs:36:22:36:62 | access to field Field2 : Object [field Field] : Object | ExternalFlow.cs:36:19:36:62 | (...) ... : D [field Field] : Object | provenance | | +| ExternalFlow.cs:36:43:36:54 | object creation of type Object : Object | ExternalFlow.cs:36:22:36:25 | [post] this access : D [field Field] : Object | provenance | | +| ExternalFlow.cs:36:43:36:54 | object creation of type Object : Object | ExternalFlow.cs:36:22:36:55 | call to method StepFieldSetter : D [field Field2, field Field] : Object | provenance | | +| ExternalFlow.cs:37:18:37:21 | this access : D [field Field] : Object | ExternalFlow.cs:37:18:37:27 | access to field Field | provenance | | +| ExternalFlow.cs:42:13:42:16 | [post] this access : D [property Property] : Object | ExternalFlow.cs:43:18:43:21 | this access : D [property Property] : Object | provenance | | +| ExternalFlow.cs:42:29:42:40 | object creation of type Object : Object | ExternalFlow.cs:42:13:42:16 | [post] this access : D [property Property] : Object | provenance | | +| ExternalFlow.cs:43:18:43:21 | this access : D [property Property] : Object | ExternalFlow.cs:43:18:43:42 | call to method StepPropertyGetter | provenance | | +| ExternalFlow.cs:48:13:48:16 | [post] this access : D [property Property] : Object | ExternalFlow.cs:49:18:49:21 | this access : D [property Property] : Object | provenance | | +| ExternalFlow.cs:48:37:48:48 | object creation of type Object : Object | ExternalFlow.cs:48:13:48:16 | [post] this access : D [property Property] : Object | provenance | | +| ExternalFlow.cs:49:18:49:21 | this access : D [property Property] : Object | ExternalFlow.cs:49:18:49:30 | access to property Property | provenance | | +| ExternalFlow.cs:54:13:54:16 | [post] this access : D [element] : Object | ExternalFlow.cs:55:18:55:21 | this access : D [element] : Object | provenance | | +| ExternalFlow.cs:54:36:54:47 | object creation of type Object : Object | ExternalFlow.cs:54:13:54:16 | [post] this access : D [element] : Object | provenance | | +| ExternalFlow.cs:55:18:55:21 | this access : D [element] : Object | ExternalFlow.cs:55:18:55:41 | call to method StepElementGetter | provenance | | +| ExternalFlow.cs:60:35:60:35 | o : Object | ExternalFlow.cs:60:47:60:47 | access to parameter o | provenance | | +| ExternalFlow.cs:60:64:60:75 | object creation of type Object : Object | ExternalFlow.cs:60:35:60:35 | o : Object | provenance | | +| ExternalFlow.cs:65:21:65:60 | call to method Apply : Object | ExternalFlow.cs:66:18:66:18 | access to local variable o | provenance | | +| ExternalFlow.cs:65:45:65:56 | object creation of type Object : Object | ExternalFlow.cs:65:21:65:60 | call to method Apply : Object | provenance | | +| ExternalFlow.cs:71:30:71:45 | { ..., ... } : null [element] : Object | ExternalFlow.cs:72:17:72:20 | access to local variable objs : null [element] : Object | provenance | | +| ExternalFlow.cs:71:32:71:43 | object creation of type Object : Object | ExternalFlow.cs:71:30:71:45 | { ..., ... } : null [element] : Object | provenance | | +| ExternalFlow.cs:72:17:72:20 | access to local variable objs : null [element] : Object | ExternalFlow.cs:72:23:72:23 | o : Object | provenance | | +| ExternalFlow.cs:72:23:72:23 | o : Object | ExternalFlow.cs:72:35:72:35 | access to parameter o | provenance | | +| ExternalFlow.cs:77:24:77:58 | call to method Map : T[] [element] : Object | ExternalFlow.cs:78:18:78:21 | access to local variable objs : T[] [element] : Object | provenance | | +| ExternalFlow.cs:77:46:77:57 | object creation of type Object : Object | ExternalFlow.cs:77:24:77:58 | call to method Map : T[] [element] : Object | provenance | | +| ExternalFlow.cs:78:18:78:21 | access to local variable objs : T[] [element] : Object | ExternalFlow.cs:78:18:78:24 | access to array element | provenance | | +| ExternalFlow.cs:83:30:83:45 | { ..., ... } : null [element] : Object | ExternalFlow.cs:84:29:84:32 | access to local variable objs : null [element] : Object | provenance | | +| ExternalFlow.cs:83:32:83:43 | object creation of type Object : Object | ExternalFlow.cs:83:30:83:45 | { ..., ... } : null [element] : Object | provenance | | +| ExternalFlow.cs:84:25:84:41 | call to method Map : T[] [element] : Object | ExternalFlow.cs:85:18:85:22 | access to local variable objs2 : T[] [element] : Object | provenance | | +| ExternalFlow.cs:84:29:84:32 | access to local variable objs : null [element] : Object | ExternalFlow.cs:84:25:84:41 | call to method Map : T[] [element] : Object | provenance | | +| ExternalFlow.cs:85:18:85:22 | access to local variable objs2 : T[] [element] : Object | ExternalFlow.cs:85:18:85:25 | access to array element | provenance | | +| ExternalFlow.cs:90:21:90:34 | object creation of type String : String | ExternalFlow.cs:91:19:91:19 | access to local variable s : String | provenance | | +| ExternalFlow.cs:91:19:91:19 | access to local variable s : String | ExternalFlow.cs:91:30:91:30 | SSA def(i) : Int32 | provenance | | +| ExternalFlow.cs:91:30:91:30 | SSA def(i) : Int32 | ExternalFlow.cs:92:18:92:18 | (...) ... | provenance | | +| ExternalFlow.cs:98:13:98:14 | [post] access to local variable d1 : D [field Field] : Object | ExternalFlow.cs:103:16:103:17 | access to local variable d1 : D [field Field] : Object | provenance | | +| ExternalFlow.cs:98:13:98:14 | [post] access to local variable d1 : D [field Field] : Object | ExternalFlow.cs:104:18:104:19 | access to local variable d1 : D [field Field] : Object | provenance | | +| ExternalFlow.cs:98:24:98:35 | object creation of type Object : Object | ExternalFlow.cs:98:13:98:14 | [post] access to local variable d1 : D [field Field] : Object | provenance | | +| ExternalFlow.cs:100:20:100:20 | d : Object | ExternalFlow.cs:102:22:102:22 | access to parameter d | provenance | | +| ExternalFlow.cs:103:16:103:17 | access to local variable d1 : D [field Field] : Object | ExternalFlow.cs:100:20:100:20 | d : Object | provenance | | +| ExternalFlow.cs:104:18:104:19 | access to local variable d1 : D [field Field] : Object | ExternalFlow.cs:104:18:104:25 | access to field Field | provenance | | +| ExternalFlow.cs:111:13:111:13 | [post] access to local variable f : F [field MyField] : Object | ExternalFlow.cs:112:18:112:18 | access to local variable f : F [field MyField] : Object | provenance | | +| ExternalFlow.cs:111:24:111:35 | object creation of type Object : Object | ExternalFlow.cs:111:13:111:13 | [post] access to local variable f : F [field MyField] : Object | provenance | | +| ExternalFlow.cs:112:18:112:18 | access to local variable f : F [field MyField] : Object | ExternalFlow.cs:112:18:112:25 | access to property MyProp | provenance | | +| ExternalFlow.cs:117:34:117:49 | { ..., ... } : null [element] : Object | ExternalFlow.cs:118:29:118:29 | access to local variable a : null [element] : Object | provenance | | +| ExternalFlow.cs:117:36:117:47 | object creation of type Object : Object | ExternalFlow.cs:117:34:117:49 | { ..., ... } : null [element] : Object | provenance | | +| ExternalFlow.cs:118:21:118:30 | call to method Reverse : null [element] : Object | ExternalFlow.cs:120:18:120:18 | access to local variable b : null [element] : Object | provenance | | +| ExternalFlow.cs:118:29:118:29 | access to local variable a : null [element] : Object | ExternalFlow.cs:118:21:118:30 | call to method Reverse : null [element] : Object | provenance | | +| ExternalFlow.cs:120:18:120:18 | access to local variable b : null [element] : Object | ExternalFlow.cs:120:18:120:21 | access to array element | provenance | | +| ExternalFlow.cs:205:22:205:33 | object creation of type Object : Object | ExternalFlow.cs:206:38:206:39 | access to local variable o2 : Object | provenance | | +| ExternalFlow.cs:206:38:206:39 | access to local variable o2 : Object | ExternalFlow.cs:206:18:206:40 | call to method MixedFlowArgs | provenance | | +| ExternalFlow.cs:211:22:211:33 | object creation of type Object : Object | ExternalFlow.cs:212:52:212:53 | access to local variable o1 : Object | provenance | | +| ExternalFlow.cs:212:52:212:53 | access to local variable o1 : Object | ExternalFlow.cs:212:18:212:54 | call to method GeneratedFlowWithGeneratedNeutral | provenance | | +| ExternalFlow.cs:244:21:244:28 | object creation of type HC : HC | ExternalFlow.cs:245:21:245:21 | access to local variable h : HC | provenance | | +| ExternalFlow.cs:245:21:245:21 | access to local variable h : HC | ExternalFlow.cs:245:21:245:39 | call to method ExtensionMethod : HC | provenance | | +| ExternalFlow.cs:245:21:245:39 | call to method ExtensionMethod : HC | ExternalFlow.cs:246:18:246:18 | access to local variable o | provenance | | +| ExternalFlow.cs:262:13:262:13 | [post] access to parameter a : MyInlineArray [element] : Object | ExternalFlow.cs:263:30:263:30 | access to parameter a : MyInlineArray [element] : Object | provenance | | +| ExternalFlow.cs:262:20:262:31 | object creation of type Object : Object | ExternalFlow.cs:262:13:262:13 | [post] access to parameter a : MyInlineArray [element] : Object | provenance | | +| ExternalFlow.cs:263:21:263:31 | call to method GetFirst : Object | ExternalFlow.cs:264:18:264:18 | access to local variable b | provenance | | +| ExternalFlow.cs:263:30:263:30 | access to parameter a : MyInlineArray [element] : Object | ExternalFlow.cs:263:21:263:31 | call to method GetFirst : Object | provenance | | nodes | ExternalFlow.cs:9:27:9:38 | object creation of type Object : Object | semmle.label | object creation of type Object : Object | | ExternalFlow.cs:10:18:10:33 | call to method StepArgRes | semmle.label | call to method StepArgRes | diff --git a/csharp/ql/test/library-tests/dataflow/fields/FieldFlow.expected b/csharp/ql/test/library-tests/dataflow/fields/FieldFlow.expected index a56a9fa6524..4b4f70a46a8 100644 --- a/csharp/ql/test/library-tests/dataflow/fields/FieldFlow.expected +++ b/csharp/ql/test/library-tests/dataflow/fields/FieldFlow.expected @@ -1,945 +1,945 @@ testFailures edges -| A.cs:5:17:5:28 | call to method Source : C | A.cs:6:24:6:24 | access to local variable c : C | -| A.cs:5:17:5:28 | call to method Source : C | A.cs:6:24:6:24 | access to local variable c : C | -| A.cs:6:17:6:25 | call to method Make : B [field c] : C | A.cs:7:14:7:14 | access to local variable b : B [field c] : C | -| A.cs:6:17:6:25 | call to method Make : B [field c] : C | A.cs:7:14:7:14 | access to local variable b : B [field c] : C | -| A.cs:6:24:6:24 | access to local variable 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: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:6:24:6:24 | access to local variable c : C | A.cs:147:32:147:32 | c : C | -| A.cs:7:14:7:14 | access to local variable b : B [field c] : C | A.cs:7:14:7:16 | access to field c | -| A.cs:7:14:7:14 | access to local variable b : B [field c] : C | A.cs:7:14:7:16 | access to field c | -| 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: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:13:15:13:29 | call to method Source : 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: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:13:15:13:29 | call to method Source : C1 | A.cs:145:27:145:27 | c : C1 | -| A.cs:14:14:14:14 | access to local variable b : B [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: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: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:15:15:15:35 | object creation of type B : B [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: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: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:15:21:15:34 | call to method Source : 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: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:15:21:15:34 | call to method Source : C | A.cs:141:20:141:20 | c : C | -| A.cs:22:14:22:38 | call to method SetOnB : B [field c] : C2 | A.cs:24:14:24:15 | 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:24:14:24:15 | access to local variable b2 : B [field c] : C2 | -| A.cs:22:25:22:37 | call to method Source : 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: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:22:25:22:37 | call to method Source : C2 | A.cs:42:29:42:29 | c : C2 | -| A.cs:24:14:24:15 | access to local variable b2 : B [field c] : C2 | A.cs:24:14:24:17 | access to field c | -| A.cs:24:14:24:15 | access to local variable b2 : B [field c] : C2 | A.cs:24:14:24:17 | access to field c | -| A.cs:31:14:31:42 | call to method SetOnBWrap : B [field c] : C2 | A.cs:33:14:33:15 | access to local variable b2 : B [field c] : C2 | -| A.cs:31:14:31:42 | call to method SetOnBWrap : B [field c] : C2 | A.cs:33:14:33:15 | access to local variable b2 : B [field c] : C2 | -| A.cs:31:29:31:41 | call to method Source : 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: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:31:29:31:41 | call to method Source : C2 | A.cs:36:33:36:33 | c : C2 | -| A.cs:33:14:33:15 | access to local variable b2 : B [field c] : C2 | A.cs:33:14:33:17 | access to field c | -| A.cs:33:14:33:15 | access to local variable b2 : B [field c] : C2 | A.cs:33:14:33:17 | access to field c | -| A.cs:36:33:36:33 | c : C2 | A.cs:38:29:38:29 | access to parameter c : C2 | -| A.cs:36:33:36:33 | c : C2 | A.cs:38:29:38:29 | access to parameter c : C2 | -| A.cs:38:18:38:30 | call to method SetOnB : B [field c] : C2 | A.cs:39:16:39:28 | ... ? ... : ... : B [field c] : C2 | -| A.cs:38:18:38:30 | call to method SetOnB : B [field c] : C2 | A.cs:39:16:39:28 | ... ? ... : ... : B [field c] : C2 | -| A.cs:38:29:38:29 | access to parameter 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: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:38:29:38:29 | access to parameter c : C2 | A.cs:42:29:42:29 | c : C2 | -| A.cs:42:29:42:29 | c : C2 | A.cs:47:20:47:20 | access to parameter c : C2 | -| A.cs:42:29:42:29 | c : C2 | A.cs:47:20:47:20 | access to parameter c : C2 | -| A.cs:47:13:47:14 | [post] access to local variable b2 : B [field c] : C2 | A.cs:48:20:48:21 | access to local variable b2 : B [field c] : C2 | -| A.cs:47:13:47:14 | [post] access to local variable b2 : B [field c] : C2 | A.cs:48:20:48:21 | access to local variable b2 : B [field c] : C2 | -| A.cs:47:20:47:20 | access to parameter 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: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:47:20:47:20 | access to parameter c : C2 | A.cs:145:27:145:27 | c : C2 | -| A.cs:55:17:55:28 | call to method Source : A | A.cs:57:16:57:16 | access to local variable a : A | -| A.cs:55:17:55:28 | call to method Source : A | A.cs:57:16:57:16 | access to local variable a : A | -| A.cs:57:9:57:10 | [post] access to local variable c1 : C1 [field a] : A | A.cs:58:12:58:13 | access to local variable c1 : C1 [field a] : A | -| A.cs:57:9:57:10 | [post] access to local variable c1 : C1 [field a] : A | A.cs:58:12:58:13 | access to local variable c1 : C1 [field a] : A | -| A.cs:57:16:57:16 | access to local variable a : A | A.cs:57:9:57:10 | [post] access to local variable c1 : C1 [field a] : A | -| A.cs:57:16:57:16 | access to local variable a : A | A.cs:57:9:57:10 | [post] access to local variable c1 : C1 [field a] : A | -| A.cs:58:12:58:13 | access to local variable c1 : C1 [field a] : A | A.cs:60:22:60:22 | c : C1 [field a] : A | -| A.cs:58:12:58:13 | access to local variable c1 : C1 [field a] : A | A.cs:60:22:60:22 | c : C1 [field a] : A | -| A.cs:60:22:60:22 | c : C1 [field a] : A | A.cs:64:19:64:23 | (...) ... : C1 [field a] : A | -| A.cs:60:22:60:22 | c : C1 [field a] : A | A.cs:64:19:64:23 | (...) ... : C1 [field a] : A | -| A.cs:64:19:64:23 | (...) ... : C1 [field a] : A | A.cs:64:18:64:26 | access to field a | -| A.cs:64:19:64:23 | (...) ... : C1 [field a] : A | A.cs:64:18:64:26 | access to field a | -| A.cs:83:9:83:9 | [post] access to parameter b : B [field c] : C | A.cs:88:12:88:12 | [post] access to local variable b : B [field c] : C | -| A.cs:83:9:83:9 | [post] access to parameter b : B [field c] : C | A.cs:88:12:88:12 | [post] access to local variable b : B [field c] : C | -| 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 | -| 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 | -| A.cs:83:15:83:26 | call to method Source : C | A.cs:145:27:145:27 | c : C | -| A.cs:83:15:83:26 | call to method Source : C | A.cs:145:27:145:27 | c : C | -| 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 | -| 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 | -| 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 | -| 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 | -| A.cs:95:20:95:20 | b : B | A.cs:97:13:97:13 | access to parameter b : B | -| A.cs:95:20:95:20 | b : B | A.cs:97:13:97:13 | access to parameter b : B | -| 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 | -| 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 | -| A.cs:97:13:97:13 | [post] access to parameter b : B [field c] : C | A.cs:105:23:105:23 | [post] access to local variable b : B [field c] : C | -| A.cs:97:13:97:13 | [post] access to parameter b : B [field c] : C | A.cs:105:23:105:23 | [post] access to local variable b : B [field c] : C | -| A.cs:97:13:97:13 | access to parameter b : B | A.cs:98:22:98:43 | ... ? ... : ... : B | -| A.cs:97:13:97:13 | access to parameter b : B | A.cs:98:22:98:43 | ... ? ... : ... : B | -| 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 | -| 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 | -| A.cs:98:13:98:16 | [post] this access : D [field b, field c] : C | A.cs:105:17:105:29 | object creation of type D : D [field b, field c] : C | -| A.cs:98:13:98:16 | [post] this access : D [field b, field c] : C | A.cs:105:17:105:29 | object creation of type D : D [field b, field c] : C | -| A.cs:98:13:98:16 | [post] this access : D [field b] : B | A.cs:105:17:105:29 | object creation of type D : D [field b] : B | -| A.cs:98:13:98:16 | [post] this access : D [field b] : B | A.cs:105:17:105:29 | object creation of type D : D [field b] : B | -| A.cs:98:22:98:43 | ... ? ... : ... : B | A.cs:98:13:98:16 | [post] this access : D [field b] : B | -| A.cs:98:22:98:43 | ... ? ... : ... : B | A.cs:98:13:98:16 | [post] this access : D [field b] : B | -| A.cs:98:22:98:43 | ... ? ... : ... : B | A.cs:98:13:98:16 | [post] this access : D [field b] : B | -| A.cs:98:22:98:43 | ... ? ... : ... : B | A.cs:98:13:98:16 | [post] this access : D [field b] : B | -| A.cs:98:22:98:43 | ... ? ... : ... : B [field c] : C | A.cs:98:13:98:16 | [post] this access : D [field b, field c] : C | -| A.cs:98:22:98:43 | ... ? ... : ... : B [field c] : C | A.cs:98:13:98:16 | [post] this access : D [field b, field c] : C | -| A.cs:98:30:98:43 | call to method Source : B | A.cs:98:22:98:43 | ... ? ... : ... : B | -| A.cs:98:30:98:43 | call to method Source : B | A.cs:98:22:98:43 | ... ? ... : ... : B | -| A.cs:104:17:104:30 | call to method Source : B | A.cs:105:23:105:23 | access to local variable b : B | -| A.cs:104:17:104:30 | call to method Source : B | A.cs:105:23:105:23 | access to local variable b : B | -| A.cs:105:17:105:29 | object creation of type D : D [field b, field c] : C | A.cs:107:14:107:14 | access to local variable d : D [field b, field c] : C | -| A.cs:105:17:105:29 | object creation of type D : D [field b, field c] : C | A.cs:107:14:107:14 | access to local variable d : D [field b, field c] : C | -| A.cs:105:17:105:29 | object creation of type D : D [field b] : B | A.cs:106:14:106:14 | access to local variable d : D [field b] : B | -| A.cs:105:17:105:29 | object creation of type D : D [field b] : B | A.cs:106:14:106:14 | access to local variable d : D [field b] : B | -| A.cs:105:23:105:23 | [post] access to local variable b : B [field c] : C | A.cs:108:14:108:14 | access to local variable b : B [field c] : C | -| A.cs:105:23:105:23 | [post] access to local variable b : B [field c] : C | A.cs:108:14:108:14 | access to local variable 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:105:23:105:23 | access to local variable b : B | A.cs:95:20:95:20 | b : B | -| A.cs:105:23:105:23 | access to local variable 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:105:17:105:29 | object creation of type D : D [field b] : B | -| A.cs:106:14:106:14 | access to local variable d : D [field b] : B | A.cs:106:14:106:16 | access to field b | -| A.cs:106:14:106:14 | access to local variable d : D [field b] : B | A.cs:106:14:106:16 | access to field b | -| A.cs:107:14:107:14 | access to local variable d : D [field b, field c] : C | A.cs:107:14:107:16 | access to field b : B [field c] : C | -| A.cs:107:14:107:14 | access to local variable d : D [field b, field c] : C | A.cs:107:14:107:16 | access to field b : B [field c] : C | -| A.cs:107:14:107:16 | access to field b : B [field c] : C | A.cs:107:14:107:18 | access to field c | -| A.cs:107:14:107:16 | access to field b : B [field c] : C | A.cs:107:14:107:18 | access to field c | -| A.cs:108:14:108:14 | access to local variable b : B [field c] : C | A.cs:108:14:108:16 | access to field c | -| A.cs:108:14:108:14 | access to local variable b : B [field c] : C | A.cs:108:14:108:16 | access to field c | -| A.cs:113:17:113:29 | call to method Source : B | A.cs:114:29:114:29 | access to local variable b : B | -| A.cs:113:17:113:29 | call to method Source : B | A.cs:114:29:114:29 | access to local variable b : 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: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:114:29:114:29 | access to local variable b : 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: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:114:29:114:29 | access to local variable b : B | A.cs:157:25:157:28 | 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: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:115:35:115:36 | access to local variable l1 : MyList [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: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: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:116:18:116:37 | object creation of type MyList : MyList [field next, field next, field head] : B | A.cs:119:14:119:15 | access to local variable l3 : 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:119:14:119:15 | access to local variable l3 : 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:121:41:121:41 | access to local variable l : 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:121:41:121:41 | access to local variable l : 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: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: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: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:119:14:119:15 | access to local variable l3 : MyList [field next, field next, field head] : B | A.cs:119:14:119:20 | access to field next : MyList [field next, field head] : B | -| A.cs:119:14:119:15 | access to local variable l3 : MyList [field next, field next, field head] : B | A.cs:119:14:119:20 | access to field next : MyList [field next, field head] : B | -| A.cs:119:14:119:20 | access to field next : MyList [field next, field head] : B | A.cs:119:14:119:25 | access to field next : MyList [field head] : B | -| A.cs:119:14:119:20 | access to field next : MyList [field next, field head] : B | A.cs:119:14:119:25 | access to field next : MyList [field head] : B | -| A.cs:119:14:119:25 | access to field next : MyList [field head] : B | A.cs:119:14:119:30 | access to field head | -| A.cs:119:14:119:25 | access to field next : MyList [field head] : B | A.cs:119:14:119:30 | access to field head | -| A.cs:121:41:121:41 | access to local variable l : MyList [field next, field head] : B | A.cs:121:41:121:46 | access to field next : MyList [field head] : B | -| A.cs:121:41:121:41 | access to local variable l : MyList [field next, field head] : B | A.cs:121:41:121:46 | access to field next : MyList [field head] : B | -| A.cs:121:41:121:41 | access to local variable l : MyList [field next, field next, field head] : B | A.cs:121:41:121:46 | access to field next : MyList [field next, field head] : B | -| A.cs:121:41:121:41 | access to local variable l : MyList [field next, field next, field head] : B | A.cs:121:41:121:46 | access to field next : MyList [field next, field head] : B | -| A.cs:121:41:121:46 | access to field next : MyList [field head] : B | A.cs:123:18:123:18 | access to local variable l : MyList [field head] : B | -| A.cs:121:41:121:46 | access to field next : MyList [field head] : B | A.cs:123:18:123:18 | access to local variable l : MyList [field head] : B | -| A.cs:121:41:121:46 | access to field next : MyList [field next, field head] : B | A.cs:121:41:121:41 | access to local variable l : MyList [field next, field head] : B | -| A.cs:121:41:121:46 | access to field next : MyList [field next, field head] : B | A.cs:121:41:121:41 | access to local variable l : MyList [field next, field head] : B | -| 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 | -| 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 | -| A.cs:141:20:141:20 | c : C | A.cs:143:22:143:22 | access to parameter c : C | -| A.cs:141:20:141:20 | c : C | A.cs:143:22:143:22 | access to parameter c : C | -| A.cs:143:22:143:22 | access to parameter c : C | A.cs:143:13:143:16 | [post] this access : B [field c] : C | -| A.cs:143:22:143:22 | access to parameter c : C | A.cs:143:13:143:16 | [post] this access : B [field c] : C | -| A.cs:145:27:145:27 | c : C | A.cs:145:41:145:41 | access to parameter c : C | -| A.cs:145:27:145:27 | c : C | A.cs:145:41:145:41 | access to parameter c : C | -| A.cs:145:27:145:27 | c : C1 | A.cs:145:41:145:41 | access to parameter c : C1 | -| A.cs:145:27:145:27 | c : C1 | A.cs:145:41:145:41 | access to parameter c : C1 | -| A.cs:145:27:145:27 | c : C2 | A.cs:145:41:145:41 | access to parameter c : C2 | -| A.cs:145:27:145:27 | c : C2 | A.cs:145:41:145:41 | access to parameter c : C2 | -| A.cs:145:41:145:41 | access to parameter c : C | A.cs:145:32:145:35 | [post] this access : B [field c] : C | -| A.cs:145:41:145:41 | access to parameter c : C | A.cs:145:32:145:35 | [post] this access : B [field c] : C | -| A.cs:145:41:145:41 | access to parameter c : C1 | A.cs:145:32:145:35 | [post] this access : B [field c] : C1 | -| A.cs:145:41:145:41 | access to parameter c : C1 | A.cs:145:32:145:35 | [post] this access : B [field c] : C1 | -| A.cs:145:41:145:41 | access to parameter c : C2 | A.cs:145:32:145:35 | [post] this access : B [field c] : C2 | -| A.cs:145:41:145:41 | access to parameter c : C2 | A.cs:145:32:145:35 | [post] this access : B [field c] : C2 | -| A.cs:146:18:146:20 | this : B [field c] : C | A.cs:146:33:146:36 | this access : B [field c] : C | -| A.cs:146:18:146:20 | this : B [field c] : C | A.cs:146:33:146:36 | this access : B [field c] : C | -| A.cs:146:18:146:20 | this : B [field c] : C1 | A.cs:146:33:146:36 | this access : B [field c] : C1 | -| A.cs:146:18:146:20 | this : B [field c] : C1 | A.cs:146:33:146:36 | this access : B [field c] : C1 | -| A.cs:146:33:146:36 | this access : B [field c] : C | A.cs:146:33:146:38 | access to field c : C | -| A.cs:146:33:146:36 | this access : B [field c] : C | A.cs:146:33:146:38 | access to field c : C | -| A.cs:146:33:146:36 | this access : B [field c] : C1 | A.cs:146:33:146:38 | access to field c : C1 | -| A.cs:146:33:146:36 | this access : B [field c] : C1 | A.cs:146:33:146:38 | access to field c : C1 | -| A.cs:147:32:147:32 | c : C | A.cs:149:26:149:26 | access to parameter c : C | -| A.cs:147:32:147:32 | c : C | A.cs:149:26:149:26 | access to parameter c : C | -| A.cs:149:26:149:26 | access to parameter c : C | A.cs:141:20:141:20 | c : C | -| A.cs:149:26:149:26 | access to parameter c : C | A.cs:141:20:141:20 | c : C | -| A.cs:149:26:149:26 | access to parameter 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:149:20:149:27 | object creation of type B : B [field c] : C | -| A.cs:157:25:157:28 | head : B | A.cs:159:25:159:28 | access to parameter head : B | -| A.cs:157:25:157:28 | head : B | A.cs:159:25:159:28 | access to parameter head : B | -| 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 | -| 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 | -| 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 | -| 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 | -| A.cs:159:25:159:28 | access to parameter head : B | A.cs:159:13:159:16 | [post] this access : MyList [field head] : B | -| A.cs:159:25:159:28 | access to parameter head : B | A.cs:159:13:159:16 | [post] this access : MyList [field head] : B | -| 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 | -| 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 | -| 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 | -| 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 | -| B.cs:5:17:5:31 | call to method Source : Elem | B.cs:6:27:6:27 | access to local variable e : Elem | -| B.cs:5:17:5:31 | call to method Source : Elem | B.cs:6:27:6:27 | access to local variable e : 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: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:6:27:6:27 | access to local variable e : 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: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:6:27:6:27 | access to local variable e : Elem | B.cs:29:26:29:27 | e1 : Elem | -| B.cs:7:18:7:29 | object creation of type Box2 : Box2 [field box1, field elem1] : Elem | B.cs:8:14:8:15 | access to local variable b2 : 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:8:14:8:15 | access to local variable b2 : Box2 [field box1, field elem1] : Elem | -| B.cs:7:27:7:28 | access to local variable b1 : 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: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: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:8:14:8:15 | access to local variable b2 : Box2 [field box1, field elem1] : Elem | B.cs:8:14:8:20 | access to field box1 : Box1 [field elem1] : Elem | -| B.cs:8:14:8:15 | access to local variable b2 : Box2 [field box1, field elem1] : Elem | B.cs:8:14:8:20 | access to field box1 : Box1 [field elem1] : Elem | -| B.cs:8:14:8:20 | access to field box1 : Box1 [field elem1] : Elem | B.cs:8:14:8:26 | access to field elem1 | -| B.cs:8:14:8:20 | access to field box1 : Box1 [field elem1] : Elem | B.cs:8:14:8:26 | access to field elem1 | -| B.cs:14:17:14:31 | call to method Source : Elem | B.cs:15:33:15:33 | access to local variable e : Elem | -| B.cs:14:17:14:31 | call to method Source : Elem | B.cs:15:33:15:33 | access to local variable e : 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: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:15:33:15:33 | access to local variable e : 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: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:15:33:15:33 | access to local variable e : Elem | B.cs:29:35:29:36 | e2 : Elem | -| B.cs:16:18:16:29 | object creation of type Box2 : Box2 [field box1, field elem2] : Elem | B.cs:18:14:18:15 | access to local variable b2 : 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:18:14:18:15 | access to local variable b2 : Box2 [field box1, field elem2] : Elem | -| B.cs:16:27:16:28 | access to local variable b1 : 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: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: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:18:14:18:15 | access to local variable b2 : Box2 [field box1, field elem2] : Elem | B.cs:18:14:18:20 | access to field box1 : Box1 [field elem2] : Elem | -| B.cs:18:14:18:15 | access to local variable b2 : Box2 [field box1, field elem2] : Elem | B.cs:18:14:18:20 | access to field box1 : Box1 [field elem2] : Elem | -| B.cs:18:14:18:20 | access to field box1 : Box1 [field elem2] : Elem | B.cs:18:14:18:26 | access to field elem2 | -| B.cs:18:14:18:20 | access to field box1 : Box1 [field elem2] : Elem | B.cs:18:14:18:26 | access to field elem2 | -| B.cs:29:26:29:27 | e1 : Elem | B.cs:31:26:31:27 | access to parameter e1 : Elem | -| B.cs:29:26:29:27 | e1 : Elem | B.cs:31:26:31:27 | access to parameter e1 : Elem | -| B.cs:29:35:29:36 | e2 : Elem | B.cs:32:26:32:27 | access to parameter e2 : Elem | -| B.cs:29:35:29:36 | e2 : Elem | B.cs:32:26:32:27 | access to parameter e2 : Elem | -| B.cs:31:26:31:27 | access to parameter e1 : Elem | B.cs:31:13:31:16 | [post] this access : Box1 [field elem1] : Elem | -| B.cs:31:26:31:27 | access to parameter e1 : Elem | B.cs:31:13:31:16 | [post] this access : Box1 [field elem1] : Elem | -| B.cs:32:26:32:27 | access to parameter e2 : Elem | B.cs:32:13:32:16 | [post] this access : Box1 [field elem2] : Elem | -| B.cs:32:26:32:27 | access to parameter e2 : Elem | B.cs:32:13:32:16 | [post] this access : Box1 [field elem2] : Elem | -| 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 | -| 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 | -| 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 | -| 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 | -| 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 | -| 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 | -| 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 | -| 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 | -| C.cs:3:18:3:19 | [post] this access : C [field s1] : Elem | C.cs:12:15:12:21 | object creation of type C : C [field s1] : Elem | -| C.cs:3:18:3:19 | [post] this access : C [field s1] : Elem | C.cs:12:15:12:21 | object creation of type C : C [field s1] : Elem | -| C.cs:3:23:3:37 | call to method Source : Elem | C.cs:3:18:3:19 | [post] this access : C [field s1] : Elem | -| C.cs:3:23:3:37 | call to method Source : Elem | C.cs:3:18:3:19 | [post] this access : C [field s1] : Elem | -| C.cs:4:27:4:28 | [post] this access : C [field s2] : Elem | C.cs:12:15:12:21 | object creation of type C : C [field s2] : Elem | -| C.cs:4:27:4:28 | [post] this access : C [field s2] : Elem | C.cs:12:15:12:21 | object creation of type C : C [field s2] : Elem | -| C.cs:4:32:4:46 | call to method Source : Elem | C.cs:4:27:4:28 | [post] this access : C [field s2] : Elem | -| C.cs:4:32:4:46 | call to method Source : Elem | C.cs:4:27:4:28 | [post] this access : C [field s2] : Elem | -| C.cs:6:30:6:44 | call to method Source : Elem | C.cs:26:14:26:15 | access to field s4 | -| C.cs:6:30:6:44 | call to method Source : Elem | C.cs:26:14:26:15 | access to field s4 | -| C.cs:7:18:7:19 | [post] this access : C [property s5] : Elem | C.cs:12:15:12:21 | object creation of type C : C [property s5] : Elem | -| C.cs:7:18:7:19 | [post] this access : C [property s5] : Elem | C.cs:12:15:12:21 | object creation of type C : C [property s5] : Elem | -| C.cs:7:37:7:51 | call to method Source : Elem | C.cs:7:18:7:19 | [post] this access : C [property s5] : Elem | -| C.cs:7:37:7:51 | call to method Source : Elem | C.cs:7:18:7:19 | [post] this access : C [property s5] : Elem | -| C.cs:8:30:8:44 | call to method Source : Elem | C.cs:28:14:28:15 | access to property s6 | -| C.cs:8:30:8:44 | call to method Source : Elem | C.cs:28:14:28:15 | access to property s6 | -| C.cs:12:15:12:21 | object creation of type C : C [field s1] : Elem | C.cs:13:9:13:9 | access to local variable c : C [field s1] : Elem | -| C.cs:12:15:12:21 | object creation of type C : C [field s1] : Elem | C.cs:13:9:13:9 | access to local variable c : C [field s1] : Elem | -| C.cs:12:15:12:21 | object creation of type C : C [field s2] : Elem | C.cs:13:9:13:9 | access to local variable c : C [field s2] : Elem | -| C.cs:12:15:12:21 | object creation of type C : C [field s2] : Elem | C.cs:13:9:13:9 | access to local variable c : C [field s2] : Elem | -| C.cs:12:15:12:21 | object creation of type C : C [field s3] : Elem | C.cs:13:9:13:9 | access to local variable c : C [field s3] : Elem | -| C.cs:12:15:12:21 | object creation of type C : C [field s3] : Elem | C.cs:13:9:13:9 | access to local variable c : C [field s3] : Elem | -| C.cs:12:15:12:21 | object creation of type C : C [property s5] : Elem | C.cs:13:9:13:9 | access to local variable c : C [property s5] : Elem | -| C.cs:12:15:12:21 | object creation of type C : C [property s5] : Elem | C.cs:13:9:13:9 | access to local variable c : C [property s5] : Elem | -| C.cs:13:9:13:9 | access to local variable c : C [field s1] : Elem | C.cs:21:17:21:18 | this : C [field s1] : Elem | -| C.cs:13:9:13:9 | access to local variable c : C [field s1] : Elem | C.cs:21:17:21:18 | this : C [field s1] : Elem | -| C.cs:13:9:13:9 | access to local variable c : C [field s2] : Elem | C.cs:21:17:21:18 | this : C [field s2] : Elem | -| C.cs:13:9:13:9 | access to local variable c : C [field s2] : Elem | C.cs:21:17:21:18 | this : C [field s2] : Elem | -| 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 | -| 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 | -| 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 | -| 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 | -| C.cs:18:9:18:12 | [post] this access : C [field s3] : Elem | C.cs:12:15:12:21 | object creation of type C : C [field s3] : Elem | -| C.cs:18:9:18:12 | [post] this access : C [field s3] : Elem | C.cs:12:15:12:21 | object creation of type C : C [field s3] : Elem | -| C.cs:18:19:18:33 | call to method Source : Elem | C.cs:18:9:18:12 | [post] this access : C [field s3] : Elem | -| C.cs:18:19:18:33 | call to method Source : Elem | C.cs:18:9:18:12 | [post] this access : C [field s3] : Elem | -| C.cs:21:17:21:18 | this : C [field s1] : Elem | C.cs:23:14:23:15 | this access : C [field s1] : Elem | -| C.cs:21:17:21:18 | this : C [field s1] : Elem | C.cs:23:14:23:15 | this access : C [field s1] : Elem | -| C.cs:21:17:21:18 | this : C [field s2] : Elem | C.cs:24:14:24:15 | this access : C [field s2] : Elem | -| C.cs:21:17:21:18 | this : C [field s2] : Elem | C.cs:24:14:24:15 | this access : C [field s2] : Elem | -| C.cs:21:17:21:18 | this : C [field s3] : Elem | C.cs:25:14:25:15 | this access : C [field s3] : Elem | -| C.cs:21:17:21:18 | this : C [field s3] : Elem | C.cs:25:14:25:15 | this access : C [field s3] : Elem | -| C.cs:21:17:21:18 | this : C [property s5] : Elem | C.cs:27:14:27:15 | this access : C [property s5] : Elem | -| C.cs:21:17:21:18 | this : C [property s5] : Elem | C.cs:27:14:27:15 | this access : C [property s5] : Elem | -| C.cs:23:14:23:15 | this access : C [field s1] : Elem | C.cs:23:14:23:15 | access to field s1 | -| C.cs:23:14:23:15 | this access : C [field s1] : Elem | C.cs:23:14:23:15 | access to field s1 | -| C.cs:24:14:24:15 | this access : C [field s2] : Elem | C.cs:24:14:24:15 | access to field s2 | -| C.cs:24:14:24:15 | this access : C [field s2] : Elem | C.cs:24:14:24:15 | access to field s2 | -| C.cs:25:14:25:15 | this access : C [field s3] : Elem | C.cs:25:14:25:15 | access to field s3 | -| C.cs:25:14:25:15 | this access : C [field s3] : Elem | C.cs:25:14:25:15 | access to field s3 | -| C.cs:27:14:27:15 | this access : C [property s5] : Elem | C.cs:27:14:27:15 | access to property s5 | -| C.cs:27:14:27:15 | this access : C [property s5] : Elem | C.cs:27:14:27:15 | access to property s5 | -| C_ctor.cs:3:18:3:19 | [post] this access : C_no_ctor [field s1] : Elem | C_ctor.cs:7:23:7:37 | object creation of type C_no_ctor : C_no_ctor [field s1] : Elem | -| C_ctor.cs:3:18:3:19 | [post] this access : C_no_ctor [field s1] : Elem | C_ctor.cs:7:23:7:37 | object creation of type C_no_ctor : C_no_ctor [field s1] : Elem | -| C_ctor.cs:3:23:3:42 | call to method Source : Elem | C_ctor.cs:3:18:3:19 | [post] this access : C_no_ctor [field s1] : Elem | -| C_ctor.cs:3:23:3:42 | call to method Source : Elem | C_ctor.cs:3:18:3:19 | [post] this access : C_no_ctor [field s1] : Elem | -| C_ctor.cs:7:23:7:37 | object creation of type C_no_ctor : C_no_ctor [field s1] : Elem | C_ctor.cs:8:9:8:9 | access to local variable c : C_no_ctor [field s1] : Elem | -| C_ctor.cs:7:23:7:37 | object creation of type C_no_ctor : C_no_ctor [field s1] : Elem | C_ctor.cs:8:9:8:9 | access to local variable c : C_no_ctor [field s1] : Elem | -| C_ctor.cs:8:9:8:9 | access to local variable c : C_no_ctor [field s1] : Elem | C_ctor.cs:11:17:11:18 | this : C_no_ctor [field s1] : Elem | -| C_ctor.cs:8:9:8:9 | access to local variable c : C_no_ctor [field s1] : Elem | C_ctor.cs:11:17:11:18 | this : C_no_ctor [field s1] : Elem | -| C_ctor.cs:11:17:11:18 | this : C_no_ctor [field s1] : Elem | C_ctor.cs:13:19:13:20 | this access : C_no_ctor [field s1] : Elem | -| C_ctor.cs:11:17:11:18 | this : C_no_ctor [field s1] : Elem | C_ctor.cs:13:19:13:20 | this access : C_no_ctor [field s1] : Elem | -| C_ctor.cs:13:19:13:20 | this access : C_no_ctor [field s1] : Elem | C_ctor.cs:13:19:13:20 | access to field s1 | -| C_ctor.cs:13:19:13:20 | this access : C_no_ctor [field s1] : Elem | C_ctor.cs:13:19:13:20 | access to field s1 | -| C_ctor.cs:19:18:19:19 | [post] this access : C_with_ctor [field s1] : Elem | C_ctor.cs:23:25:23:41 | object creation of type C_with_ctor : C_with_ctor [field s1] : Elem | -| C_ctor.cs:19:18:19:19 | [post] this access : C_with_ctor [field s1] : Elem | C_ctor.cs:23:25:23:41 | object creation of type C_with_ctor : C_with_ctor [field s1] : Elem | -| C_ctor.cs:19:23:19:42 | call to method Source : Elem | C_ctor.cs:19:18:19:19 | [post] this access : C_with_ctor [field s1] : Elem | -| C_ctor.cs:19:23:19:42 | call to method Source : Elem | C_ctor.cs:19:18:19:19 | [post] this access : C_with_ctor [field s1] : Elem | -| C_ctor.cs:23:25:23:41 | object creation of type C_with_ctor : C_with_ctor [field s1] : Elem | C_ctor.cs:24:9:24:9 | access to local variable c : C_with_ctor [field s1] : Elem | -| C_ctor.cs:23:25:23:41 | object creation of type C_with_ctor : C_with_ctor [field s1] : Elem | C_ctor.cs:24:9:24:9 | access to local variable c : C_with_ctor [field s1] : Elem | -| C_ctor.cs:24:9:24:9 | access to local variable c : C_with_ctor [field s1] : Elem | C_ctor.cs:29:17:29:18 | this : C_with_ctor [field s1] : Elem | -| C_ctor.cs:24:9:24:9 | access to local variable c : C_with_ctor [field s1] : Elem | C_ctor.cs:29:17:29:18 | this : C_with_ctor [field s1] : Elem | -| C_ctor.cs:29:17:29:18 | this : C_with_ctor [field s1] : Elem | C_ctor.cs:31:19:31:20 | this access : C_with_ctor [field s1] : Elem | -| C_ctor.cs:29:17:29:18 | this : C_with_ctor [field s1] : Elem | C_ctor.cs:31:19:31:20 | this access : C_with_ctor [field s1] : Elem | -| C_ctor.cs:31:19:31:20 | this access : C_with_ctor [field s1] : Elem | C_ctor.cs:31:19:31:20 | access to field s1 | -| C_ctor.cs:31:19:31:20 | this access : C_with_ctor [field s1] : Elem | C_ctor.cs:31:19:31:20 | access to field s1 | -| D.cs:8:9:8:11 | this : D [field trivialPropField] : Object | D.cs:8:22:8:25 | this access : D [field trivialPropField] : Object | -| D.cs:8:9:8:11 | this : D [field trivialPropField] : Object | D.cs:8:22:8:25 | this access : D [field trivialPropField] : Object | -| D.cs:8:22:8:25 | this access : D [field trivialPropField] : Object | D.cs:8:22:8:42 | access to field trivialPropField : Object | -| D.cs:8:22:8:25 | this access : D [field trivialPropField] : Object | D.cs:8:22:8:42 | access to field trivialPropField : Object | -| D.cs:9:9:9:11 | value : Object | D.cs:9:39:9:43 | access to parameter value : Object | -| D.cs:9:9:9:11 | value : Object | D.cs:9:39:9:43 | access to parameter value : Object | -| D.cs:9:39:9:43 | access to parameter value : Object | D.cs:9:15:9:18 | [post] this access : D [field trivialPropField] : Object | -| D.cs:9:39:9:43 | access to parameter value : Object | D.cs:9:15:9:18 | [post] this access : D [field trivialPropField] : Object | -| D.cs:14:9:14:11 | this : D [field trivialPropField] : Object | D.cs:14:22:14:25 | this access : D [field trivialPropField] : Object | -| D.cs:14:9:14:11 | this : D [field trivialPropField] : Object | D.cs:14:22:14:25 | this access : D [field trivialPropField] : Object | -| D.cs:14:22:14:25 | this access : D [field trivialPropField] : Object | D.cs:14:22:14:42 | access to field trivialPropField : Object | -| D.cs:14:22:14:25 | this access : D [field trivialPropField] : Object | D.cs:14:22:14:42 | access to field trivialPropField : Object | -| D.cs:15:9:15:11 | value : Object | D.cs:15:34:15:38 | access to parameter value : Object | -| D.cs:15:9:15:11 | value : Object | D.cs:15:34:15:38 | access to parameter value : Object | -| D.cs:15:34:15:38 | access to parameter value : Object | D.cs:9:9:9:11 | value : Object | -| D.cs:15:34:15:38 | access to parameter value : Object | D.cs:9:9:9:11 | value : Object | -| D.cs:15:34:15:38 | access to parameter value : 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:15:15:15:18 | [post] this access : D [field trivialPropField] : Object | -| D.cs:18:28:18:29 | o1 : Object | D.cs:21:24:21:25 | access to parameter o1 : Object | -| D.cs:18:28:18:29 | o1 : Object | D.cs:21:24:21:25 | access to parameter o1 : Object | -| D.cs:18:39:18:40 | o2 : Object | D.cs:22:27:22:28 | access to parameter o2 : Object | -| D.cs:18:39:18:40 | o2 : Object | D.cs:22:27:22:28 | access to parameter o2 : Object | -| D.cs:18:50:18:51 | o3 : Object | D.cs:23:27:23:28 | access to parameter o3 : Object | -| D.cs:18:50:18:51 | o3 : Object | D.cs:23:27:23:28 | access to parameter o3 : Object | -| D.cs:21:9:21:11 | [post] access to local variable ret : D [property AutoProp] : Object | D.cs:24:16:24:18 | access to local variable ret : D [property AutoProp] : Object | -| D.cs:21:9:21:11 | [post] access to local variable ret : D [property AutoProp] : Object | D.cs:24:16:24:18 | access to local variable ret : D [property AutoProp] : Object | -| D.cs:21:24:21:25 | access to parameter o1 : Object | D.cs:21:9:21:11 | [post] access to local variable ret : D [property AutoProp] : Object | -| D.cs:21:24:21:25 | access to parameter o1 : Object | D.cs:21:9:21:11 | [post] access to local variable ret : D [property AutoProp] : Object | -| D.cs:22:9:22:11 | [post] access to local variable ret : D [field trivialPropField] : Object | D.cs:24:16:24:18 | access to local variable ret : D [field trivialPropField] : Object | -| D.cs:22:9:22:11 | [post] access to local variable ret : D [field trivialPropField] : Object | D.cs:24:16:24:18 | 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:22:27:22:28 | access to parameter o2 : Object | D.cs:9:9:9:11 | value : Object | -| D.cs:22:27:22:28 | access to parameter o2 : 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:22:9:22:11 | [post] access to local variable ret : D [field trivialPropField] : Object | -| D.cs:23:9:23:11 | [post] access to local variable ret : D [field trivialPropField] : Object | D.cs:24:16:24:18 | access to local variable ret : D [field trivialPropField] : Object | -| D.cs:23:9:23:11 | [post] access to local variable ret : D [field trivialPropField] : Object | D.cs:24:16:24:18 | 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:23:27:23:28 | access to parameter o3 : Object | D.cs:15:9:15:11 | value : Object | -| D.cs:23:27:23:28 | access to parameter o3 : 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:23:9:23:11 | [post] access to local variable ret : D [field trivialPropField] : Object | -| D.cs:29:17:29:33 | call to method Source : Object | D.cs:31:24:31:24 | access to local variable o : Object | -| D.cs:29:17:29:33 | call to method Source : Object | D.cs:31:24:31:24 | access to local variable o : Object | -| D.cs:31:17:31:37 | call to method Create : D [property AutoProp] : Object | D.cs:32:14:32:14 | access to local variable d : D [property AutoProp] : Object | -| D.cs:31:17:31:37 | call to method Create : D [property AutoProp] : Object | D.cs:32:14:32:14 | access to local variable d : 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:31:24:31:24 | access to local variable o : Object | D.cs:18:28:18:29 | o1 : Object | -| D.cs:31:24:31:24 | access to local variable o : 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:31:17:31:37 | call to method Create : D [property AutoProp] : Object | -| D.cs:32:14:32:14 | access to local variable d : D [property AutoProp] : Object | D.cs:32:14:32:23 | access to property AutoProp | -| D.cs:32:14:32:14 | access to local variable d : D [property AutoProp] : Object | D.cs:32:14:32:23 | access to property AutoProp | -| D.cs:37:13:37:49 | call to method Create : D [field trivialPropField] : Object | D.cs:39:14:39:14 | access to local variable d : D [field trivialPropField] : Object | -| D.cs:37:13:37:49 | call to method Create : D [field trivialPropField] : Object | D.cs:39:14:39:14 | access to local variable d : D [field trivialPropField] : Object | -| D.cs:37:13:37:49 | call to method Create : D [field trivialPropField] : Object | D.cs:40:14:40:14 | access to local variable d : D [field trivialPropField] : Object | -| D.cs:37:13:37:49 | call to method Create : D [field trivialPropField] : Object | D.cs:40:14:40:14 | access to local variable d : D [field trivialPropField] : Object | -| D.cs:37:13:37:49 | call to method Create : D [field trivialPropField] : Object | D.cs:41:14:41:14 | access to local variable d : D [field trivialPropField] : Object | -| D.cs:37:13:37:49 | call to method Create : D [field trivialPropField] : Object | D.cs:41:14:41:14 | access to local variable d : D [field trivialPropField] : Object | -| D.cs:37:26:37:42 | call to method Source : Object | D.cs:18:39:18:40 | o2 : Object | -| D.cs:37:26:37:42 | call to method Source : Object | D.cs:18:39:18:40 | o2 : Object | -| D.cs:37:26:37:42 | call to method Source : Object | D.cs:37:13:37:49 | call to method Create : D [field trivialPropField] : Object | -| D.cs:37:26:37:42 | call to method Source : Object | D.cs:37:13:37:49 | call to method Create : D [field trivialPropField] : Object | -| D.cs:39:14:39:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:8:9:8:11 | this : D [field trivialPropField] : Object | -| D.cs:39:14:39:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:8:9:8:11 | this : D [field trivialPropField] : Object | -| D.cs:39:14:39:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:39:14:39:26 | access to property TrivialProp | -| D.cs:39:14:39:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:39:14:39:26 | access to property TrivialProp | -| D.cs:40:14:40:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:40:14:40:31 | access to field trivialPropField | -| D.cs:40:14:40:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:40:14:40:31 | access to field trivialPropField | -| D.cs:41:14:41:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:14:9:14:11 | this : D [field trivialPropField] : Object | -| D.cs:41:14:41:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:14:9:14:11 | this : D [field trivialPropField] : Object | -| D.cs:41:14:41:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:41:14:41:26 | access to property ComplexProp | -| D.cs:41:14:41:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:41:14:41:26 | access to property ComplexProp | -| D.cs:43:13:43:49 | call to method Create : D [field trivialPropField] : Object | D.cs:45:14:45:14 | access to local variable d : D [field trivialPropField] : Object | -| D.cs:43:13:43:49 | call to method Create : D [field trivialPropField] : Object | D.cs:45:14:45:14 | access to local variable d : D [field trivialPropField] : Object | -| D.cs:43:13:43:49 | call to method Create : D [field trivialPropField] : Object | D.cs:46:14:46:14 | access to local variable d : D [field trivialPropField] : Object | -| D.cs:43:13:43:49 | call to method Create : D [field trivialPropField] : Object | D.cs:46:14:46:14 | access to local variable d : D [field trivialPropField] : Object | -| D.cs:43:13:43:49 | call to method Create : D [field trivialPropField] : Object | D.cs:47:14:47:14 | access to local variable d : D [field trivialPropField] : Object | -| D.cs:43:13:43:49 | call to method Create : D [field trivialPropField] : Object | D.cs:47:14:47:14 | access to local variable d : D [field trivialPropField] : Object | -| D.cs:43:32:43:48 | call to method Source : Object | D.cs:18:50:18:51 | o3 : Object | -| D.cs:43:32:43:48 | call to method Source : Object | D.cs:18:50:18:51 | o3 : Object | -| D.cs:43:32:43:48 | call to method Source : Object | D.cs:43:13:43:49 | call to method Create : D [field trivialPropField] : Object | -| D.cs:43:32:43:48 | call to method Source : Object | D.cs:43:13:43:49 | call to method Create : D [field trivialPropField] : Object | -| D.cs:45:14:45:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:8:9:8:11 | this : D [field trivialPropField] : Object | -| D.cs:45:14:45:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:8:9:8:11 | this : D [field trivialPropField] : Object | -| D.cs:45:14:45:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:45:14:45:26 | access to property TrivialProp | -| D.cs:45:14:45:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:45:14:45:26 | access to property TrivialProp | -| D.cs:46:14:46:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:46:14:46:31 | access to field trivialPropField | -| D.cs:46:14:46:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:46:14:46:31 | access to field trivialPropField | -| 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: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:47:14:47:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:47:14:47:26 | access to property ComplexProp | -| D.cs:47:14:47:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:47:14:47:26 | access to property ComplexProp | -| E.cs:8:29:8:29 | o : Object | E.cs:11:21:11:21 | access to parameter o : Object | -| E.cs:8:29:8:29 | o : Object | E.cs:11:21:11:21 | access to parameter o : Object | -| E.cs:11:9:11:11 | [post] access to local variable ret : S [field Field] : Object | E.cs:12:16:12:18 | access to local variable ret : S [field Field] : Object | -| E.cs:11:9:11:11 | [post] access to local variable ret : S [field Field] : Object | E.cs:12:16:12:18 | access to local variable ret : S [field Field] : Object | -| E.cs:11:21:11:21 | access to parameter o : Object | E.cs:11:9:11:11 | [post] access to local variable ret : S [field Field] : Object | -| E.cs:11:21:11:21 | access to parameter o : Object | E.cs:11:9:11:11 | [post] access to local variable ret : S [field Field] : Object | -| E.cs:22:17:22:33 | call to method Source : Object | E.cs:23:25:23:25 | access to local variable o : Object | -| E.cs:22:17:22:33 | call to method Source : Object | E.cs:23:25:23:25 | access to local variable o : Object | -| E.cs:23:17:23:26 | call to method CreateS : S [field Field] : Object | E.cs:24:14:24:14 | access to local variable s : S [field Field] : Object | -| E.cs:23:17:23:26 | call to method CreateS : S [field Field] : Object | E.cs:24:14:24:14 | access to local variable s : 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:23:25:23:25 | access to local variable o : Object | E.cs:8:29:8:29 | o : Object | -| E.cs:23:25:23:25 | access to local variable o : 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:23:17:23:26 | call to method CreateS : S [field Field] : Object | -| 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 | -| 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 | -| E.cs:43:46:43:46 | o : Object | E.cs:46:22:46:22 | access to parameter o : Object | -| E.cs:43:46:43:46 | o : Object | E.cs:46:22:46:22 | access to parameter o : Object | -| 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 | -| 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 | -| E.cs:54:21:54:37 | call to method Source : Object | E.cs:55:29:55:33 | access to local variable taint : Object | -| E.cs:54:21:54:37 | call to method Source : Object | E.cs:55:29:55:33 | access to local variable taint : Object | -| E.cs:55:23:55:26 | [post] access to local variable refs : RefS [field RefField] : Object | E.cs:57:14:57:17 | access to local variable refs : RefS [field RefField] : Object | -| E.cs:55:23:55:26 | [post] access to local variable refs : RefS [field RefField] : Object | E.cs:57:14:57:17 | 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:55:29:55:33 | access to local variable taint : Object | E.cs:43:46:43:46 | o : Object | -| E.cs:55:29:55:33 | access to local variable taint : 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:55:23:55:26 | [post] access to local variable refs : RefS [field RefField] : Object | -| E.cs:57:14:57:17 | access to local variable refs : RefS [field RefField] : Object | E.cs:57:14:57:26 | access to field RefField | -| E.cs:57:14:57:17 | access to local variable refs : RefS [field RefField] : Object | E.cs:57:14:57:26 | access to field RefField | -| F.cs:6:28:6:29 | o1 : Object | F.cs:6:65:6:66 | access to parameter o1 : Object | -| F.cs:6:28:6:29 | o1 : Object | F.cs:6:65:6:66 | access to parameter o1 : Object | -| F.cs:6:39:6:40 | o2 : Object | F.cs:6:78:6:79 | access to parameter o2 : Object | -| F.cs:6:39:6:40 | o2 : Object | F.cs:6:78:6:79 | access to parameter o2 : Object | -| F.cs:6:54:6:81 | { ..., ... } : F [field Field1] : Object | F.cs:6:46:6:81 | object creation of type F : F [field Field1] : Object | -| F.cs:6:54:6:81 | { ..., ... } : F [field Field1] : Object | F.cs:6:46:6:81 | object creation of type F : F [field Field1] : Object | -| F.cs:6:54:6:81 | { ..., ... } : F [field Field2] : Object | F.cs:6:46:6:81 | object creation of type F : F [field Field2] : Object | -| F.cs:6:54:6:81 | { ..., ... } : F [field Field2] : Object | F.cs:6:46:6:81 | object creation of type F : F [field Field2] : Object | -| F.cs:6:65:6:66 | access to parameter o1 : Object | F.cs:6:54:6:81 | { ..., ... } : F [field Field1] : Object | -| F.cs:6:65:6:66 | access to parameter o1 : Object | F.cs:6:54:6:81 | { ..., ... } : F [field Field1] : Object | -| F.cs:6:78:6:79 | access to parameter o2 : Object | F.cs:6:54:6:81 | { ..., ... } : F [field Field2] : Object | -| F.cs:6:78:6:79 | access to parameter o2 : Object | F.cs:6:54:6:81 | { ..., ... } : F [field Field2] : Object | -| F.cs:10:17:10:33 | call to method Source : Object | F.cs:11:24:11:24 | access to local variable o : Object | -| F.cs:10:17:10:33 | call to method Source : Object | F.cs:11:24:11:24 | access to local variable o : Object | -| F.cs:11:17:11:31 | call to method Create : F [field Field1] : Object | F.cs:12:14:12:14 | access to local variable f : F [field Field1] : Object | -| F.cs:11:17:11:31 | call to method Create : F [field Field1] : Object | F.cs:12:14:12:14 | access to local variable f : 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:11:24:11:24 | access to local variable o : Object | F.cs:6:28:6:29 | o1 : Object | -| F.cs:11:24:11:24 | access to local variable o : 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:11:17:11:31 | call to method Create : F [field Field1] : Object | -| F.cs:12:14:12:14 | access to local variable f : F [field Field1] : Object | F.cs:12:14:12:21 | access to field Field1 | -| F.cs:12:14:12:14 | access to local variable f : F [field Field1] : Object | F.cs:12:14:12:21 | access to field Field1 | -| F.cs:15:13:15:43 | call to method Create : F [field Field2] : Object | F.cs:17:14:17:14 | access to local variable f : F [field Field2] : Object | -| F.cs:15:13:15:43 | call to method Create : F [field Field2] : Object | F.cs:17:14:17:14 | access to local variable f : 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:15:26:15:42 | call to method Source : Object | F.cs:6:39:6:40 | o2 : Object | -| F.cs:15:26:15:42 | call to method Source : 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:15:13:15:43 | call to method Create : F [field Field2] : Object | -| F.cs:17:14:17:14 | access to local variable f : F [field Field2] : Object | F.cs:17:14:17:21 | access to field Field2 | -| F.cs:17:14:17:14 | access to local variable f : F [field Field2] : Object | F.cs:17:14:17:21 | access to field Field2 | -| F.cs:19:21:19:50 | { ..., ... } : F [field Field1] : Object | F.cs:20:14:20:14 | access to local variable f : F [field Field1] : Object | -| F.cs:19:21:19:50 | { ..., ... } : F [field Field1] : Object | F.cs:20:14:20:14 | access to local variable f : F [field Field1] : Object | -| F.cs:19:32:19:48 | call to method Source : Object | F.cs:19:21:19:50 | { ..., ... } : F [field Field1] : Object | -| F.cs:19:32:19:48 | call to method Source : Object | F.cs:19:21:19:50 | { ..., ... } : F [field Field1] : Object | -| F.cs:20:14:20:14 | access to local variable f : F [field Field1] : Object | F.cs:20:14:20:21 | access to field Field1 | -| F.cs:20:14:20:14 | access to local variable f : F [field Field1] : Object | F.cs:20:14:20:21 | access to field Field1 | -| F.cs:23:21:23:50 | { ..., ... } : F [field Field2] : Object | F.cs:25:14:25:14 | access to local variable f : F [field Field2] : Object | -| F.cs:23:21:23:50 | { ..., ... } : F [field Field2] : Object | F.cs:25:14:25:14 | access to local variable f : F [field Field2] : Object | -| F.cs:23:32:23:48 | call to method Source : Object | F.cs:23:21:23:50 | { ..., ... } : F [field Field2] : Object | -| F.cs:23:32:23:48 | call to method Source : Object | F.cs:23:21:23:50 | { ..., ... } : F [field Field2] : Object | -| F.cs:25:14:25:14 | access to local variable f : F [field Field2] : Object | F.cs:25:14:25:21 | access to field Field2 | -| F.cs:25:14:25:14 | access to local variable f : F [field Field2] : Object | F.cs:25:14:25:21 | access to field Field2 | -| F.cs:30:17:30:33 | call to method Source : Object | F.cs:32:27:32:27 | access to local variable o : Object | -| F.cs:30:17:30:33 | call to method Source : Object | F.cs:32:27:32:27 | access to local variable o : Object | -| F.cs:32:17:32:40 | { ..., ... } : <>__AnonType0 [property X] : Object | F.cs:33:14:33:14 | access to local variable a : <>__AnonType0 [property X] : Object | -| F.cs:32:17:32:40 | { ..., ... } : <>__AnonType0 [property X] : Object | F.cs:33:14:33:14 | access to local variable a : <>__AnonType0 [property X] : Object | -| F.cs:32:27:32:27 | access to local variable o : Object | F.cs:32:17:32:40 | { ..., ... } : <>__AnonType0 [property X] : Object | -| F.cs:32:27:32:27 | access to local variable o : Object | F.cs:32:17:32:40 | { ..., ... } : <>__AnonType0 [property X] : Object | -| F.cs:33:14:33:14 | access to local variable a : <>__AnonType0 [property X] : Object | F.cs:33:14:33:16 | access to property X | -| F.cs:33:14:33:14 | access to local variable a : <>__AnonType0 [property X] : Object | F.cs:33:14:33:16 | access to property X | -| G.cs:7:18:7:32 | call to method Source : Elem | G.cs:9:23:9:23 | access to local variable e : Elem | -| G.cs:7:18:7:32 | call to method Source : Elem | G.cs:9:23:9:23 | access to local variable e : Elem | -| G.cs:9:9:9:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | G.cs:10:18:10:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | -| G.cs:9:9:9:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | G.cs:10:18:10:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | -| G.cs:9:9:9:14 | [post] access to field Box1 : Box1 [field Elem] : Elem | G.cs:9:9:9:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | -| G.cs:9:9:9:14 | [post] access to field Box1 : Box1 [field Elem] : Elem | G.cs:9:9:9:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | -| G.cs:9:23:9:23 | access to local variable e : Elem | G.cs:9:9:9:14 | [post] access to field Box1 : Box1 [field Elem] : Elem | -| G.cs:9:23:9:23 | access to local variable e : Elem | G.cs:9:9:9:14 | [post] access to field Box1 : Box1 [field Elem] : Elem | -| G.cs:10:18:10: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 | -| G.cs:10:18:10: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 | -| G.cs:15:18:15:32 | call to method Source : Elem | G.cs:17:24:17:24 | access to local variable e : Elem | -| G.cs:15:18:15:32 | call to method Source : Elem | G.cs:17:24:17:24 | access to local variable e : Elem | -| G.cs:17:9:17:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | G.cs:18:18:18:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | -| G.cs:17:9:17:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | G.cs:18:18:18:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | -| G.cs:17:9:17:14 | [post] access to field Box1 : Box1 [field Elem] : Elem | G.cs:17:9:17:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | -| G.cs:17:9:17:14 | [post] access to field Box1 : Box1 [field Elem] : Elem | G.cs:17:9:17:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | -| G.cs:17:24:17:24 | access to local variable e : 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: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:17:24:17:24 | access to local variable e : Elem | G.cs:64:34:64:34 | e : Elem | -| G.cs:18:18:18: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 | -| G.cs:18:18:18: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 | -| G.cs:23:18:23:32 | call to method Source : Elem | G.cs:25:28:25:28 | access to local variable e : Elem | -| G.cs:23:18:23:32 | call to method Source : Elem | G.cs:25:28:25:28 | access to local variable e : Elem | -| 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 | -| 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 | -| 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 | -| 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 | -| 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 | -| 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 | -| 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 | -| 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 | -| G.cs:31:18:31:32 | call to method Source : Elem | G.cs:33:29:33:29 | access to local variable e : Elem | -| G.cs:31:18:31:32 | call to method Source : Elem | G.cs:33:29:33:29 | access to local variable e : Elem | -| 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 | -| 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 | -| 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 | -| 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 | -| 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 | -| 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 | -| G.cs:33:29:33:29 | access to local variable e : Elem | G.cs:64:34:64:34 | e : Elem | -| G.cs:33:29:33:29 | access to local variable e : Elem | G.cs:64:34:64:34 | e : Elem | -| G.cs:34:18:34: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 | -| G.cs:34:18:34: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 | -| G.cs:37:38:37:39 | b2 : Box2 [field Box1, field Elem] : Elem | G.cs:39:14:39:15 | access to parameter b2 : Box2 [field Box1, field Elem] : Elem | -| G.cs:37:38:37:39 | b2 : Box2 [field Box1, field Elem] : Elem | G.cs:39:14:39:15 | access to parameter b2 : Box2 [field Box1, field Elem] : Elem | -| G.cs:39:14:39:15 | access to parameter b2 : Box2 [field 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: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: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:39:14:39:25 | call to method GetBox1 : Box1 [field Elem] : Elem | G.cs:39:14:39:35 | call to method GetElem | -| G.cs:39:14:39:25 | call to method GetBox1 : Box1 [field Elem] : Elem | G.cs:39:14:39:35 | call to method GetElem | -| 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: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:44:18:44:32 | call to method Source : Elem | G.cs:46:30:46:30 | access to local variable e : Elem | -| G.cs:44:18:44:32 | call to method Source : Elem | G.cs:46:30:46:30 | access to local variable e : Elem | -| G.cs:46:9:46:16 | [post] access to field boxfield : Box2 [field Box1, field Elem] : Elem | G.cs:46:9:46:16 | [post] this access : G [field boxfield, field Box1, field Elem] : Elem | -| G.cs:46:9:46:16 | [post] access to field boxfield : Box2 [field Box1, field Elem] : Elem | G.cs:46:9:46:16 | [post] this access : G [field boxfield, field Box1, field Elem] : Elem | -| G.cs:46:9:46:16 | [post] this access : G [field boxfield, field Box1, field Elem] : Elem | G.cs:47:9:47:13 | this access : G [field boxfield, field Box1, field Elem] : Elem | -| G.cs:46:9:46:16 | [post] this access : G [field boxfield, field Box1, field Elem] : Elem | G.cs:47:9:47:13 | this access : G [field boxfield, field Box1, field Elem] : Elem | -| G.cs:46:9:46:21 | [post] access to field Box1 : Box1 [field Elem] : Elem | G.cs:46:9:46:16 | [post] access to field boxfield : Box2 [field Box1, field Elem] : Elem | -| G.cs:46:9:46:21 | [post] access to field Box1 : Box1 [field Elem] : Elem | G.cs:46:9:46:16 | [post] access to field boxfield : Box2 [field Box1, field Elem] : Elem | -| G.cs:46:30:46:30 | access to local variable e : Elem | G.cs:46:9:46:21 | [post] access to field Box1 : Box1 [field Elem] : Elem | -| G.cs:46:30:46:30 | access to local variable e : Elem | G.cs:46:9:46:21 | [post] access to field Box1 : Box1 [field Elem] : Elem | -| G.cs:47:9:47:13 | this access : G [field boxfield, field Box1, field Elem] : Elem | G.cs:50:18:50:20 | this : G [field boxfield, field Box1, field Elem] : Elem | -| G.cs:47:9:47:13 | this access : G [field boxfield, field Box1, field Elem] : Elem | G.cs:50:18:50:20 | this : G [field boxfield, field Box1, field Elem] : Elem | -| G.cs:50:18:50:20 | this : G [field boxfield, field Box1, field Elem] : Elem | G.cs:52:14:52:21 | this access : G [field boxfield, field Box1, field Elem] : Elem | -| G.cs:50:18:50:20 | this : G [field boxfield, field Box1, field Elem] : Elem | G.cs:52:14:52:21 | this access : G [field boxfield, field Box1, field Elem] : Elem | -| G.cs:52:14:52:21 | access to field boxfield : Box2 [field Box1, field Elem] : Elem | G.cs:52:14:52:26 | access to field Box1 : Box1 [field Elem] : Elem | -| G.cs:52:14:52:21 | access to field boxfield : Box2 [field Box1, field Elem] : Elem | G.cs:52:14:52:26 | access to field Box1 : Box1 [field Elem] : Elem | -| G.cs:52:14:52:21 | this access : G [field boxfield, field Box1, field Elem] : Elem | G.cs:52:14:52:21 | access to field boxfield : Box2 [field Box1, field Elem] : Elem | -| G.cs:52:14:52:21 | this access : G [field boxfield, field Box1, field Elem] : Elem | G.cs:52:14:52:21 | access to field boxfield : Box2 [field Box1, field Elem] : Elem | -| G.cs:52:14:52:26 | access to field Box1 : Box1 [field Elem] : Elem | G.cs:52:14:52:31 | access to field Elem | -| G.cs:52:14:52:26 | access to field Box1 : Box1 [field Elem] : Elem | G.cs:52:14:52:31 | access to field Elem | -| G.cs:63:21:63:27 | this : Box1 [field Elem] : Elem | G.cs:63:34:63:37 | this access : Box1 [field Elem] : Elem | -| G.cs:63:21:63:27 | this : Box1 [field Elem] : Elem | G.cs:63:34:63:37 | this access : Box1 [field Elem] : Elem | -| G.cs:63:34:63:37 | this access : Box1 [field Elem] : Elem | G.cs:63:34:63:37 | access to field Elem : Elem | -| G.cs:63:34:63:37 | this access : Box1 [field Elem] : Elem | G.cs:63:34:63:37 | access to field Elem : Elem | -| G.cs:64:34:64:34 | e : Elem | G.cs:64:46:64:46 | access to parameter e : Elem | -| G.cs:64:34:64:34 | e : Elem | G.cs:64:46:64:46 | access to parameter e : Elem | -| G.cs:64:46:64:46 | access to parameter e : Elem | G.cs:64:39:64:42 | [post] this access : Box1 [field Elem] : Elem | -| G.cs:64:46:64:46 | access to parameter e : Elem | G.cs:64:39:64:42 | [post] this access : Box1 [field Elem] : Elem | -| 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 | -| 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 | -| 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 | -| 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 | -| 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 | -| 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 | -| 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 | -| 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 | -| H.cs:16:22:16:22 | access to parameter a : A [field FieldA] : Object | H.cs:16:22:16:29 | access to field FieldA : Object | -| H.cs:16:22:16:22 | access to parameter a : A [field FieldA] : Object | H.cs:16:22:16:29 | access to field FieldA : Object | -| H.cs:16:22:16:29 | access to field FieldA : Object | H.cs:16:9:16:11 | [post] access to local variable ret : A [field FieldA] : Object | -| H.cs:16:22:16:29 | access to field FieldA : Object | H.cs:16:9:16:11 | [post] access to local variable ret : A [field FieldA] : Object | -| H.cs:23:9:23:9 | [post] access to local variable a : A [field FieldA] : Object | H.cs:24:27:24:27 | access to local variable a : A [field FieldA] : Object | -| H.cs:23:9:23:9 | [post] access to local variable a : A [field FieldA] : Object | H.cs:24:27:24:27 | access to local variable a : A [field FieldA] : Object | -| H.cs:23:20:23:36 | call to method Source : Object | H.cs:23:9:23:9 | [post] access to local variable a : A [field FieldA] : Object | -| H.cs:23:20:23:36 | call to method Source : Object | H.cs:23:9:23:9 | [post] access to local variable a : A [field FieldA] : Object | -| H.cs:24:21:24:28 | call to method Clone : A [field FieldA] : Object | H.cs:25:14:25:18 | access to local variable clone : A [field FieldA] : Object | -| H.cs:24:21:24:28 | call to method Clone : A [field FieldA] : Object | H.cs:25:14:25:18 | access to local variable clone : A [field FieldA] : Object | -| 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: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:24:27:24:27 | access to local variable a : A [field FieldA] : Object | H.cs:24:21:24:28 | call to method Clone : A [field FieldA] : Object | -| H.cs:24:27:24:27 | access to local variable a : A [field FieldA] : Object | H.cs:24:21:24:28 | call to method Clone : A [field FieldA] : Object | -| H.cs:25:14:25:18 | access to local variable clone : A [field FieldA] : Object | H.cs:25:14:25:25 | access to field FieldA | -| H.cs:25:14:25:18 | access to local variable clone : A [field FieldA] : Object | H.cs:25:14:25:25 | access to field FieldA | -| H.cs:33:19:33:19 | a : A [field FieldA] : A | H.cs:36:20:36:20 | access to parameter a : A [field FieldA] : A | -| H.cs:33:19:33:19 | a : A [field FieldA] : A | H.cs:36:20:36:20 | access to parameter a : A [field FieldA] : A | -| H.cs:33:19:33:19 | a : A [field FieldA] : Object | H.cs:36:20:36:20 | access to parameter a : A [field FieldA] : Object | -| H.cs:33:19:33:19 | a : A [field FieldA] : Object | H.cs:36:20:36:20 | access to parameter a : A [field FieldA] : Object | -| H.cs:36:9:36:9 | [post] access to local variable b : B [field FieldB] : A | H.cs:37:16:37:16 | access to local variable b : B [field FieldB] : A | -| H.cs:36:9:36:9 | [post] access to local variable b : B [field FieldB] : A | H.cs:37:16:37:16 | access to local variable b : B [field FieldB] : A | -| H.cs:36:9:36:9 | [post] access to local variable b : B [field FieldB] : Object | H.cs:37:16:37:16 | access to local variable b : B [field FieldB] : Object | -| H.cs:36:9:36:9 | [post] access to local variable b : B [field FieldB] : Object | H.cs:37:16:37:16 | access to local variable b : B [field FieldB] : Object | -| H.cs:36:20:36:20 | access to parameter a : A [field FieldA] : A | H.cs:36:20:36:27 | access to field FieldA : A | -| H.cs:36:20:36:20 | access to parameter a : A [field FieldA] : A | H.cs:36:20:36:27 | access to field FieldA : A | -| H.cs:36:20:36:20 | access to parameter a : A [field FieldA] : Object | H.cs:36:20:36:27 | access to field FieldA : Object | -| H.cs:36:20:36:20 | access to parameter a : A [field FieldA] : Object | H.cs:36:20:36:27 | access to field FieldA : Object | -| H.cs:36:20:36:27 | access to field FieldA : A | H.cs:36:9:36:9 | [post] access to local variable b : B [field FieldB] : A | -| H.cs:36:20:36:27 | access to field FieldA : A | H.cs:36:9:36:9 | [post] access to local variable b : B [field FieldB] : A | -| H.cs:36:20:36:27 | access to field FieldA : Object | H.cs:36:9:36:9 | [post] access to local variable b : B [field FieldB] : Object | -| H.cs:36:20:36:27 | access to field FieldA : Object | H.cs:36:9:36:9 | [post] access to local variable b : B [field FieldB] : Object | -| H.cs:43:9:43:9 | [post] access to local variable a : A [field FieldA] : Object | H.cs:44:27:44:27 | access to local variable a : A [field FieldA] : Object | -| H.cs:43:9:43:9 | [post] access to local variable a : A [field FieldA] : Object | H.cs:44:27:44:27 | access to local variable a : A [field FieldA] : Object | -| H.cs:43:20:43:36 | call to method Source : Object | H.cs:43:9:43:9 | [post] access to local variable a : A [field FieldA] : Object | -| H.cs:43:20:43:36 | call to method Source : Object | H.cs:43:9:43:9 | [post] access to local variable a : A [field FieldA] : Object | -| H.cs:44:17:44:28 | call to method Transform : B [field FieldB] : Object | H.cs:45:14:45:14 | 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:45:14:45:14 | access to local variable b : 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: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:44:27:44:27 | access to local variable a : A [field FieldA] : 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:44:17:44:28 | call to method Transform : B [field FieldB] : Object | -| 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 | -| 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 | -| 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 | -| 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 | -| 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 | -| 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 | -| 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 | -| 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 | -| H.cs:63:9:63:9 | [post] access to local variable a : A [field FieldA] : Object | H.cs:64:22:64:22 | access to local variable a : A [field FieldA] : Object | -| H.cs:63:9:63:9 | [post] access to local variable a : A [field FieldA] : Object | H.cs:64:22:64:22 | access to local variable a : A [field FieldA] : Object | -| H.cs:63:20:63:36 | call to method Source : Object | H.cs:63:9:63:9 | [post] access to local variable a : A [field FieldA] : Object | -| H.cs:63:20:63:36 | call to method Source : Object | H.cs:63:9:63:9 | [post] access to local variable a : A [field FieldA] : 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: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:64:22:64:22 | access to local variable a : A [field FieldA] : 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:64:25:64:26 | [post] access to local variable b1 : B [field FieldB] : Object | -| H.cs:64:25:64:26 | [post] access to local variable b1 : B [field FieldB] : Object | H.cs:65:14:65:15 | access to local variable b1 : B [field FieldB] : Object | -| H.cs:64:25:64:26 | [post] access to local variable b1 : B [field FieldB] : Object | H.cs:65:14:65:15 | access to local variable b1 : B [field FieldB] : Object | -| 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 | -| 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 | -| H.cs:77:30:77:30 | o : Object | H.cs:79:20:79:20 | access to parameter o : Object | -| H.cs:77:30:77:30 | o : Object | 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 | H.cs:80:22:80:22 | access to parameter a : A [field FieldA] : Object | -| 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 | -| 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 | -| 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 | -| 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: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: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 | -| 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 | -| 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 | -| 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 | -| H.cs:88:20:88:36 | call to method Source : Object | H.cs:77:30:77:30 | o : Object | -| H.cs:88:20:88:36 | call to method Source : Object | H.cs:77:30:77:30 | o : Object | -| H.cs:88:20:88:36 | call to method Source : 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: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: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:88:39:88:40 | [post] access to local variable b1 : B [field FieldB] : Object | -| H.cs:88:39:88:40 | [post] access to local variable b1 : B [field FieldB] : Object | H.cs:90:14:90:15 | access to local variable b1 : B [field FieldB] : Object | -| H.cs:88:39:88:40 | [post] access to local variable b1 : B [field FieldB] : Object | H.cs:90:14:90:15 | access to local variable b1 : B [field FieldB] : Object | -| H.cs:89:14:89:14 | access to local variable a : A [field FieldA] : Object | H.cs:89:14:89:21 | access to field FieldA | -| H.cs:89:14:89:14 | access to local variable a : A [field FieldA] : Object | H.cs:89:14:89:21 | access to field FieldA | -| H.cs:90:14:90:15 | access to local variable b1 : B [field FieldB] : Object | H.cs:90:14:90:22 | access to field FieldB | -| H.cs:90:14:90:15 | access to local variable b1 : B [field FieldB] : Object | H.cs:90:14:90:22 | access to field FieldB | -| H.cs:102:23:102:23 | a : A [field FieldA] : Object | H.cs:105:23:105:23 | access to parameter a : A [field FieldA] : Object | -| H.cs:102:23:102:23 | a : A [field FieldA] : Object | H.cs:105:23:105:23 | access to parameter a : A [field FieldA] : Object | -| H.cs:105:9:105:12 | [post] access to local variable temp : B [field FieldB, field FieldA] : Object | H.cs:106:29:106:32 | access to local variable temp : B [field FieldB, field FieldA] : Object | -| H.cs:105:9:105:12 | [post] access to local variable temp : B [field FieldB, field FieldA] : Object | H.cs:106:29:106:32 | access to local variable temp : B [field FieldB, field FieldA] : Object | -| H.cs:105:23:105:23 | access to parameter a : A [field FieldA] : Object | H.cs:105:9:105:12 | [post] access to local variable temp : B [field FieldB, field FieldA] : Object | -| H.cs:105:23:105:23 | access to parameter a : A [field FieldA] : Object | H.cs:105:9:105:12 | [post] access to local variable temp : B [field FieldB, field FieldA] : Object | -| H.cs:106:26:106:39 | (...) ... : A [field FieldA] : Object | H.cs:33:19:33:19 | a : A [field FieldA] : Object | -| H.cs:106:26:106:39 | (...) ... : A [field FieldA] : Object | H.cs:33:19:33:19 | a : A [field FieldA] : Object | -| H.cs:106:26:106:39 | (...) ... : A [field FieldA] : 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:106:16:106:40 | call to method Transform : B [field FieldB] : Object | -| H.cs:106:29:106:32 | access to local variable temp : B [field FieldB, field FieldA] : Object | H.cs:106:29:106:39 | access to field FieldB : A [field FieldA] : Object | -| H.cs:106:29:106:32 | access to local variable temp : B [field FieldB, field FieldA] : Object | H.cs:106:29:106:39 | access to field FieldB : A [field FieldA] : Object | -| H.cs:106:29:106:39 | access to field FieldB : A [field FieldA] : Object | H.cs:106:26:106:39 | (...) ... : A [field FieldA] : Object | -| H.cs:106:29:106:39 | access to field FieldB : A [field FieldA] : Object | H.cs:106:26:106:39 | (...) ... : A [field FieldA] : Object | -| H.cs:112:9:112:9 | [post] access to local variable a : A [field FieldA] : Object | H.cs:113:31:113:31 | access to local variable a : A [field FieldA] : Object | -| H.cs:112:9:112:9 | [post] access to local variable a : A [field FieldA] : Object | H.cs:113:31:113:31 | access to local variable a : A [field FieldA] : Object | -| H.cs:112:20:112:36 | call to method Source : Object | H.cs:112:9:112:9 | [post] access to local variable a : A [field FieldA] : Object | -| H.cs:112:20:112:36 | call to method Source : Object | H.cs:112:9:112:9 | [post] access to local variable a : A [field FieldA] : Object | -| H.cs:113:17:113:32 | call to method TransformWrap : B [field FieldB] : Object | H.cs:114:14:114:14 | access to local variable b : B [field FieldB] : Object | -| H.cs:113:17:113:32 | call to method TransformWrap : B [field FieldB] : Object | H.cs:114:14:114:14 | access to local variable b : 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: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:113:31:113:31 | access to local variable a : A [field FieldA] : Object | H.cs:113:17:113:32 | call to method TransformWrap : B [field FieldB] : Object | -| H.cs:113:31:113:31 | access to local variable a : A [field FieldA] : Object | H.cs:113:17:113:32 | call to method TransformWrap : B [field FieldB] : Object | -| H.cs:114:14:114:14 | access to local variable b : B [field FieldB] : Object | H.cs:114:14:114:21 | access to field FieldB | -| H.cs:114:14:114:14 | access to local variable b : B [field FieldB] : Object | H.cs:114:14:114:21 | access to field FieldB | -| H.cs:122:18:122:18 | a : A [field FieldA] : Object | H.cs:124:26:124:26 | access to parameter a : A [field FieldA] : Object | -| H.cs:122:18:122:18 | a : A [field FieldA] : Object | H.cs:124:26:124:26 | access to parameter a : A [field FieldA] : Object | -| H.cs:124:16:124:27 | call to method Transform : B [field FieldB] : Object | H.cs:124:16:124:34 | access to field FieldB : Object | -| H.cs:124:16:124:27 | call to method Transform : B [field FieldB] : Object | H.cs:124:16:124:34 | access to field FieldB : Object | -| H.cs:124:26:124:26 | access to parameter a : A [field FieldA] : Object | H.cs:33:19:33:19 | a : A [field FieldA] : Object | -| H.cs:124:26:124:26 | access to parameter a : A [field FieldA] : Object | H.cs:33:19:33:19 | a : A [field FieldA] : Object | -| H.cs:124:26:124:26 | access to parameter a : A [field FieldA] : Object | H.cs:124:16:124:27 | call to method Transform : B [field FieldB] : Object | -| H.cs:124:26:124:26 | access to parameter a : A [field FieldA] : Object | H.cs:124:16:124:27 | call to method Transform : B [field FieldB] : Object | -| H.cs:130:9:130:9 | [post] access to local variable a : A [field FieldA] : Object | H.cs:131:18:131:18 | access to local variable a : A [field FieldA] : Object | -| H.cs:130:9:130:9 | [post] access to local variable a : A [field FieldA] : Object | H.cs:131:18:131:18 | access to local variable a : A [field FieldA] : Object | -| H.cs:130:20:130:36 | call to method Source : Object | H.cs:130:9:130:9 | [post] access to local variable a : A [field FieldA] : Object | -| H.cs:130:20:130:36 | call to method Source : Object | H.cs:130:9:130:9 | [post] access to local variable a : A [field FieldA] : Object | -| H.cs:131:18:131:18 | access to local variable a : A [field FieldA] : Object | H.cs:122:18:122:18 | a : A [field FieldA] : Object | -| H.cs:131:18:131:18 | access to local variable a : A [field FieldA] : Object | H.cs:122:18:122:18 | a : A [field FieldA] : Object | -| H.cs:131:18:131:18 | access to local variable a : A [field FieldA] : Object | H.cs:131:14:131:19 | call to method Get | -| H.cs:131:18:131:18 | access to local variable a : A [field FieldA] : Object | H.cs:131:14:131:19 | call to method Get | -| H.cs:138:27:138:27 | o : A | H.cs:141:20:141:25 | ... as ... : A | -| H.cs:138:27:138:27 | o : A | H.cs:141:20:141:25 | ... as ... : A | -| H.cs:141:9:141:9 | [post] access to local variable a : A [field FieldA] : A | H.cs:142:26:142:26 | access to local variable a : A [field FieldA] : A | -| H.cs:141:9:141:9 | [post] access to local variable a : A [field FieldA] : A | H.cs:142:26:142:26 | access to local variable a : A [field FieldA] : A | -| H.cs:141:20:141:25 | ... as ... : A | H.cs:141:9:141:9 | [post] access to local variable a : A [field FieldA] : A | -| H.cs:141:20:141:25 | ... as ... : A | H.cs:141:9:141:9 | [post] access to local variable a : A [field FieldA] : A | -| H.cs:142:16:142:27 | call to method Transform : B [field FieldB] : A | H.cs:142:16:142:34 | access to field FieldB : A | -| H.cs:142:16:142:27 | call to method Transform : B [field FieldB] : A | H.cs:142:16:142:34 | access to field FieldB : A | -| 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: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:142:26:142:26 | access to local variable a : A [field FieldA] : A | H.cs:142:16:142:27 | call to method Transform : B [field FieldB] : A | -| H.cs:142:26:142:26 | access to local variable a : A [field FieldA] : A | H.cs:142:16:142:27 | call to method Transform : B [field FieldB] : A | -| H.cs:147:17:147:39 | call to method Through : A | H.cs:148:14:148:14 | access to local variable a | -| H.cs:147:17:147:39 | call to method Through : A | H.cs:148:14:148:14 | access to local variable a | -| H.cs:147:25:147:38 | call to method Source : A | H.cs:138:27:138:27 | o : A | -| H.cs:147:25:147:38 | call to method Source : A | H.cs:138:27:138:27 | o : A | -| H.cs:147:25:147:38 | call to method Source : 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:147:17:147:39 | call to method Through : A | -| H.cs:153:32:153:32 | o : Object | H.cs:156:20:156:20 | access to parameter o : Object | -| H.cs:153:32:153:32 | o : Object | H.cs:156:20:156:20 | access to parameter o : Object | -| H.cs:155:17:155:30 | call to method Source : B | H.cs:156:9:156:9 | access to local variable b : B | -| H.cs:155:17:155:30 | call to method Source : B | H.cs:156:9:156:9 | access to local variable b : B | -| H.cs:156:9:156:9 | [post] access to local variable b : B [field FieldB] : Object | H.cs:157:20:157:20 | access to local variable b : B [field FieldB] : Object | -| H.cs:156:9:156:9 | [post] access to local variable b : B [field FieldB] : Object | H.cs:157:20:157:20 | access to local variable b : B [field FieldB] : Object | -| H.cs:156:9:156:9 | access to local variable b : B | H.cs:157:20:157:20 | access to local variable b : B | -| H.cs:156:9:156:9 | access to local variable b : B | H.cs:157:20:157:20 | access to local variable b : B | -| 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 | -| 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 | -| H.cs:157:9:157:9 | [post] access to parameter a : A [field FieldA] : B | H.cs:164:19:164:19 | [post] access to local variable a : A [field FieldA] : B | -| H.cs:157:9:157:9 | [post] access to parameter a : A [field FieldA] : B | H.cs:164:19:164:19 | [post] access to local variable a : A [field FieldA] : B | -| 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 | -| 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 | -| 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 | -| 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 | -| H.cs:163:17:163:35 | call to method Source : Object | H.cs:164:22:164:22 | access to local variable o : Object | -| H.cs:163:17:163:35 | call to method Source : Object | H.cs:164:22:164:22 | access to local variable o : Object | -| H.cs:164:19:164:19 | [post] access to local variable a : A [field FieldA, field FieldB] : Object | H.cs:165:20:165:20 | access to local variable a : 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:165:20:165:20 | access to local variable a : A [field FieldA, field FieldB] : Object | -| H.cs:164:19:164:19 | [post] access to local variable a : A [field FieldA] : B | H.cs:165:20:165:20 | access to local variable a : A [field FieldA] : B | -| H.cs:164:19:164:19 | [post] access to local variable a : A [field FieldA] : B | H.cs:165:20:165:20 | access to local variable a : A [field FieldA] : B | -| H.cs:164:22:164:22 | access to local variable o : Object | H.cs:153:32:153:32 | o : Object | -| H.cs:164:22:164:22 | access to local variable o : Object | H.cs:153:32:153:32 | o : Object | -| H.cs:164:22:164:22 | access to local variable o : 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:164:19:164:19 | [post] access to local variable a : A [field FieldA, field FieldB] : Object | -| H.cs:165:17:165:27 | (...) ... : B | H.cs:166:14:166:14 | access to local variable b | -| H.cs:165:17:165:27 | (...) ... : B | H.cs:166:14:166:14 | access to local variable b | -| H.cs:165:17:165:27 | (...) ... : B [field FieldB] : Object | H.cs:167:14:167:14 | access to local variable b : B [field FieldB] : Object | -| H.cs:165:17:165:27 | (...) ... : B [field FieldB] : Object | H.cs:167:14:167:14 | access to local variable b : B [field FieldB] : Object | -| H.cs:165:20:165:20 | access to local variable a : A [field FieldA, field FieldB] : Object | H.cs:165:20:165:27 | access to field FieldA : B [field FieldB] : Object | -| H.cs:165:20:165:20 | access to local variable a : A [field FieldA, field FieldB] : Object | H.cs:165:20:165:27 | access to field FieldA : B [field FieldB] : Object | -| H.cs:165:20:165:20 | access to local variable a : A [field FieldA] : B | H.cs:165:20:165:27 | access to field FieldA : B | -| H.cs:165:20:165:20 | access to local variable a : A [field FieldA] : B | H.cs:165:20:165:27 | access to field FieldA : B | -| H.cs:165:20:165:27 | access to field FieldA : B | H.cs:165:17:165:27 | (...) ... : B | -| H.cs:165:20:165:27 | access to field FieldA : B | H.cs:165:17:165:27 | (...) ... : B | -| H.cs:165:20:165:27 | access to field FieldA : B [field FieldB] : Object | H.cs:165:17:165:27 | (...) ... : B [field FieldB] : Object | -| H.cs:165:20:165:27 | access to field FieldA : B [field FieldB] : Object | H.cs:165:17:165:27 | (...) ... : B [field FieldB] : Object | -| 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 | -| 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 | -| I.cs:7:9:7:14 | [post] this access : I [field Field1] : Object | I.cs:21:13:21:19 | object creation of type I : I [field Field1] : Object | -| I.cs:7:9:7:14 | [post] this access : I [field Field1] : Object | I.cs:21:13:21:19 | object creation of type I : I [field Field1] : Object | -| I.cs:7:9:7:14 | [post] this access : I [field Field1] : Object | I.cs:26:13:26:37 | [pre-initializer] object creation of type I : I [field Field1] : Object | -| I.cs:7:9:7:14 | [post] this access : I [field Field1] : Object | I.cs:26:13:26:37 | [pre-initializer] object creation of type I : I [field Field1] : Object | -| I.cs:7:18:7:34 | call to method Source : Object | I.cs:7:9:7:14 | [post] this access : I [field Field1] : Object | -| I.cs:7:18:7:34 | call to method Source : Object | I.cs:7:9:7:14 | [post] this access : I [field Field1] : Object | -| I.cs:13:17:13:33 | call to method Source : Object | I.cs:15:20:15:20 | access to local variable o : Object | -| I.cs:13:17:13:33 | call to method Source : Object | I.cs:15:20:15:20 | access to local variable o : Object | -| I.cs:15:9:15:9 | [post] access to local variable i : I [field Field1] : Object | I.cs:16:9:16:9 | access to local variable i : I [field Field1] : Object | -| I.cs:15:9:15:9 | [post] access to local variable i : I [field Field1] : Object | I.cs:16:9:16:9 | access to local variable i : I [field Field1] : Object | -| I.cs:15:20:15:20 | access to local variable o : Object | I.cs:15:9:15:9 | [post] access to local variable i : I [field Field1] : Object | -| I.cs:15:20:15:20 | access to local variable o : Object | I.cs:15:9:15:9 | [post] access to local variable i : I [field Field1] : Object | -| I.cs:16:9:16:9 | access to local variable i : I [field Field1] : Object | I.cs:17:9:17:9 | access to local variable i : I [field Field1] : Object | -| I.cs:16:9:16:9 | access to local variable i : I [field Field1] : Object | I.cs:17:9:17:9 | access to local variable i : I [field Field1] : Object | -| I.cs:17:9:17:9 | access to local variable i : I [field Field1] : Object | I.cs:18:14:18:14 | access to local variable i : I [field Field1] : Object | -| I.cs:17:9:17:9 | access to local variable i : I [field Field1] : Object | I.cs:18:14:18:14 | access to local variable i : I [field Field1] : Object | -| I.cs:18:14:18:14 | access to local variable i : I [field Field1] : Object | I.cs:18:14:18:21 | access to field Field1 | -| I.cs:18:14:18:14 | access to local variable i : I [field Field1] : Object | I.cs:18:14:18:21 | access to field Field1 | -| I.cs:21:13:21:19 | object creation of type I : I [field Field1] : Object | I.cs:22:9:22:9 | access to local variable i : I [field Field1] : Object | -| I.cs:21:13:21:19 | object creation of type I : I [field Field1] : Object | I.cs:22:9:22:9 | access to local variable i : I [field Field1] : Object | -| I.cs:22:9:22:9 | access to local variable i : I [field Field1] : Object | I.cs:23:14:23:14 | access to local variable i : I [field Field1] : Object | -| I.cs:22:9:22:9 | access to local variable i : I [field Field1] : Object | I.cs:23:14:23:14 | access to local variable i : I [field Field1] : Object | -| I.cs:23:14:23:14 | access to local variable i : I [field Field1] : Object | I.cs:23:14:23:21 | access to field Field1 | -| I.cs:23:14:23:14 | access to local variable i : I [field Field1] : Object | I.cs:23:14:23:21 | access to field Field1 | -| I.cs:26:13:26:37 | [pre-initializer] object creation of type I : I [field Field1] : Object | I.cs:27:14:27:14 | access to local variable i : I [field Field1] : Object | -| I.cs:26:13:26:37 | [pre-initializer] object creation of type I : I [field Field1] : Object | I.cs:27:14:27:14 | access to local variable i : I [field Field1] : Object | -| I.cs:27:14:27:14 | access to local variable i : I [field Field1] : Object | I.cs:27:14:27:21 | access to field Field1 | -| I.cs:27:14:27:14 | access to local variable i : I [field Field1] : Object | I.cs:27:14:27:21 | access to field Field1 | -| I.cs:31:13:31:29 | call to method Source : Object | I.cs:32:20:32:20 | access to local variable o : Object | -| I.cs:31:13:31:29 | call to method Source : Object | I.cs:32:20:32:20 | access to local variable o : Object | -| I.cs:32:9:32:9 | [post] access to local variable i : I [field Field1] : Object | I.cs:33:9:33:9 | access to local variable i : I [field Field1] : Object | -| I.cs:32:9:32:9 | [post] access to local variable i : I [field Field1] : Object | I.cs:33:9:33:9 | access to local variable i : I [field Field1] : Object | -| I.cs:32:20:32:20 | access to local variable o : Object | I.cs:32:9:32:9 | [post] access to local variable i : I [field Field1] : Object | -| I.cs:32:20:32:20 | access to local variable o : Object | I.cs:32:9:32:9 | [post] access to local variable i : I [field Field1] : Object | -| I.cs:33:9:33:9 | access to local variable i : I [field Field1] : Object | I.cs:34:12:34:12 | access to local variable i : I [field Field1] : Object | -| I.cs:33:9:33:9 | access to local variable i : I [field Field1] : Object | I.cs:34:12:34:12 | access to local variable i : I [field Field1] : Object | -| I.cs:34:12:34:12 | access to local variable i : I [field Field1] : Object | I.cs:37:23:37:23 | i : I [field Field1] : Object | -| I.cs:34:12:34:12 | access to local variable i : I [field Field1] : Object | I.cs:37:23:37:23 | i : I [field Field1] : Object | -| I.cs:37:23:37:23 | i : I [field Field1] : Object | I.cs:39:9:39:9 | access to parameter i : I [field Field1] : Object | -| I.cs:37:23:37:23 | i : I [field Field1] : Object | I.cs:39:9:39:9 | access to parameter i : I [field Field1] : Object | -| 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 | -| 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 | -| I.cs:40:14:40:14 | access to parameter i : I [field Field1] : Object | I.cs:40:14:40:21 | access to field Field1 | -| I.cs:40:14:40:14 | access to parameter i : I [field Field1] : Object | I.cs:40:14:40:21 | access to field Field1 | -| J.cs:14:26:14:30 | field : Object | J.cs:14:66:14:70 | access to parameter field : Object | -| J.cs:14:26:14:30 | field : Object | J.cs:14:66:14:70 | access to parameter field : Object | -| J.cs:14:40:14:43 | prop : Object | J.cs:14:73:14:76 | access to parameter prop : Object | -| J.cs:14:40:14:43 | prop : Object | J.cs:14:73:14:76 | access to parameter prop : Object | -| J.cs:14:66:14:70 | access to parameter field : Object | J.cs:14:50:14:54 | [post] this access : Struct [field Field] : Object | -| J.cs:14:66:14:70 | access to parameter field : Object | J.cs:14:50:14:54 | [post] this access : Struct [field Field] : Object | -| J.cs:14:73:14:76 | access to parameter prop : Object | J.cs:14:57:14:60 | [post] this access : Struct [property Prop] : Object | -| J.cs:14:73:14:76 | access to parameter prop : Object | J.cs:14:57:14:60 | [post] this access : Struct [property Prop] : Object | -| J.cs:21:17:21:33 | call to method Source : Object | J.cs:22:34:22:34 | access to local variable o : Object | -| J.cs:21:17:21:33 | call to method Source : Object | J.cs:22:34:22:34 | access to local variable o : Object | -| J.cs:22:18:22:41 | object creation of type RecordClass : RecordClass [property Prop1] : Object | J.cs:23:14:23:15 | access to local variable r1 : RecordClass [property Prop1] : Object | -| J.cs:22:18:22:41 | object creation of type RecordClass : RecordClass [property Prop1] : Object | J.cs:23:14:23:15 | access to local variable r1 : RecordClass [property Prop1] : Object | -| J.cs:22:18:22:41 | object creation of type RecordClass : RecordClass [property Prop1] : Object | J.cs:27:14:27:15 | access to local variable r2 : RecordClass [property Prop1] : Object | -| J.cs:22:18:22:41 | object creation of type RecordClass : RecordClass [property Prop1] : Object | J.cs:27:14:27:15 | access to local variable r2 : RecordClass [property Prop1] : Object | -| J.cs:22:18:22:41 | object creation of type RecordClass : RecordClass [property Prop1] : Object | J.cs:31:14:31:15 | access to local variable r3 : RecordClass [property Prop1] : Object | -| J.cs:22:18:22:41 | object creation of type RecordClass : RecordClass [property Prop1] : Object | J.cs:31:14:31:15 | access to local variable r3 : RecordClass [property Prop1] : Object | -| J.cs:22:34:22:34 | access to local variable o : 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:22:18:22:41 | object creation of type RecordClass : RecordClass [property Prop1] : Object | -| J.cs:23:14:23:15 | access to local variable r1 : RecordClass [property Prop1] : Object | J.cs:23:14:23:21 | access to property Prop1 | -| J.cs:23:14:23:15 | access to local variable r1 : RecordClass [property Prop1] : Object | J.cs:23:14:23:21 | access to property Prop1 | -| J.cs:27:14:27:15 | access to local variable r2 : RecordClass [property Prop1] : Object | J.cs:27:14:27:21 | access to property Prop1 | -| J.cs:27:14:27:15 | access to local variable r2 : RecordClass [property Prop1] : Object | J.cs:27:14:27:21 | access to property Prop1 | -| J.cs:30:18:30:54 | ... with { ... } : RecordClass [property Prop2] : Object | J.cs:32:14:32:15 | access to local variable r3 : RecordClass [property Prop2] : Object | -| J.cs:30:18:30:54 | ... with { ... } : RecordClass [property Prop2] : Object | J.cs:32:14:32:15 | access to local variable r3 : RecordClass [property Prop2] : Object | -| J.cs:30:36:30:52 | call to method Source : Object | J.cs:30:18:30:54 | ... with { ... } : RecordClass [property Prop2] : Object | -| J.cs:30:36:30:52 | call to method Source : Object | J.cs:30:18:30:54 | ... with { ... } : RecordClass [property Prop2] : Object | -| J.cs:31:14:31:15 | access to local variable r3 : RecordClass [property Prop1] : Object | J.cs:31:14:31:21 | access to property Prop1 | -| J.cs:31:14:31:15 | access to local variable r3 : RecordClass [property Prop1] : Object | J.cs:31:14:31:21 | access to property Prop1 | -| J.cs:32:14:32:15 | access to local variable r3 : RecordClass [property Prop2] : Object | J.cs:32:14:32:21 | access to property Prop2 | -| J.cs:32:14:32:15 | access to local variable r3 : RecordClass [property Prop2] : Object | J.cs:32:14:32:21 | access to property Prop2 | -| J.cs:41:17:41:33 | call to method Source : Object | J.cs:42:35:42:35 | access to local variable o : Object | -| J.cs:41:17:41:33 | call to method Source : Object | J.cs:42:35:42:35 | access to local variable o : Object | -| J.cs:42:18:42:42 | object creation of type RecordStruct : RecordStruct [property Prop1] : Object | J.cs:43:14:43:15 | access to local variable r1 : RecordStruct [property Prop1] : Object | -| J.cs:42:18:42:42 | object creation of type RecordStruct : RecordStruct [property Prop1] : Object | J.cs:43:14:43:15 | access to local variable r1 : RecordStruct [property Prop1] : Object | -| J.cs:42:18:42:42 | object creation of type RecordStruct : RecordStruct [property Prop1] : Object | J.cs:47:14:47:15 | access to local variable r2 : RecordStruct [property Prop1] : Object | -| J.cs:42:18:42:42 | object creation of type RecordStruct : RecordStruct [property Prop1] : Object | J.cs:47:14:47:15 | access to local variable r2 : RecordStruct [property Prop1] : Object | -| J.cs:42:18:42:42 | object creation of type RecordStruct : RecordStruct [property Prop1] : Object | J.cs:51:14:51:15 | access to local variable r3 : RecordStruct [property Prop1] : Object | -| J.cs:42:18:42:42 | object creation of type RecordStruct : RecordStruct [property Prop1] : Object | J.cs:51:14:51:15 | access to local variable r3 : RecordStruct [property Prop1] : Object | -| J.cs:42:35:42:35 | access to local variable o : 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:42:18:42:42 | object creation of type RecordStruct : RecordStruct [property Prop1] : Object | -| J.cs:43:14:43:15 | access to local variable r1 : RecordStruct [property Prop1] : Object | J.cs:43:14:43:21 | access to property Prop1 | -| J.cs:43:14:43:15 | access to local variable r1 : RecordStruct [property Prop1] : Object | J.cs:43:14:43:21 | access to property Prop1 | -| J.cs:47:14:47:15 | access to local variable r2 : RecordStruct [property Prop1] : Object | J.cs:47:14:47:21 | access to property Prop1 | -| J.cs:47:14:47:15 | access to local variable r2 : RecordStruct [property Prop1] : Object | J.cs:47:14:47:21 | access to property Prop1 | -| J.cs:50:18:50:54 | ... with { ... } : RecordStruct [property Prop2] : Object | J.cs:52:14:52:15 | access to local variable r3 : RecordStruct [property Prop2] : Object | -| J.cs:50:18:50:54 | ... with { ... } : RecordStruct [property Prop2] : Object | J.cs:52:14:52:15 | access to local variable r3 : RecordStruct [property Prop2] : Object | -| J.cs:50:36:50:52 | call to method Source : Object | J.cs:50:18:50:54 | ... with { ... } : RecordStruct [property Prop2] : Object | -| J.cs:50:36:50:52 | call to method Source : Object | J.cs:50:18:50:54 | ... with { ... } : RecordStruct [property Prop2] : Object | -| J.cs:51:14:51:15 | access to local variable r3 : RecordStruct [property Prop1] : Object | J.cs:51:14:51:21 | access to property Prop1 | -| J.cs:51:14:51:15 | access to local variable r3 : RecordStruct [property Prop1] : Object | J.cs:51:14:51:21 | access to property Prop1 | -| J.cs:52:14:52:15 | access to local variable r3 : RecordStruct [property Prop2] : Object | J.cs:52:14:52:21 | access to property Prop2 | -| J.cs:52:14:52:15 | access to local variable r3 : RecordStruct [property Prop2] : Object | J.cs:52:14:52:21 | access to property Prop2 | -| J.cs:61:17:61:33 | call to method Source : Object | J.cs:62:29:62:29 | access to local variable o : Object | -| J.cs:61:17:61:33 | call to method Source : Object | J.cs:62:29:62:29 | access to local variable o : Object | -| J.cs:62:18:62:36 | object creation of type Struct : Struct [field Field] : Object | J.cs:65:14:65:15 | access to local variable s2 : Struct [field Field] : Object | -| J.cs:62:18:62:36 | object creation of type Struct : Struct [field Field] : Object | J.cs:65:14:65:15 | access to local variable s2 : Struct [field Field] : Object | -| J.cs:62:18:62:36 | object creation of type Struct : Struct [field Field] : Object | J.cs:69:14:69:15 | access to local variable s3 : Struct [field Field] : Object | -| J.cs:62:18:62:36 | object creation of type Struct : Struct [field Field] : Object | J.cs:69:14:69:15 | access to local variable s3 : 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:62:29:62:29 | access to local variable o : Object | J.cs:14:26:14:30 | field : Object | -| J.cs:62:29:62:29 | access to local variable o : 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:62:18:62:36 | object creation of type Struct : Struct [field Field] : Object | -| J.cs:65:14:65:15 | access to local variable s2 : Struct [field Field] : Object | J.cs:65:14:65:21 | access to field Field | -| J.cs:65:14:65:15 | access to local variable s2 : Struct [field Field] : Object | J.cs:65:14:65:21 | access to field Field | -| J.cs:68:18:68:53 | ... with { ... } : Struct [property Prop] : Object | J.cs:70:14:70:15 | access to local variable s3 : Struct [property Prop] : Object | -| J.cs:68:18:68:53 | ... with { ... } : Struct [property Prop] : Object | J.cs:70:14:70:15 | access to local variable s3 : Struct [property Prop] : Object | -| J.cs:68:35:68:51 | call to method Source : Object | J.cs:68:18:68:53 | ... with { ... } : Struct [property Prop] : Object | -| J.cs:68:35:68:51 | call to method Source : Object | J.cs:68:18:68:53 | ... with { ... } : Struct [property Prop] : Object | -| J.cs:69:14:69:15 | access to local variable s3 : Struct [field Field] : Object | J.cs:69:14:69:21 | access to field Field | -| J.cs:69:14:69:15 | access to local variable s3 : Struct [field Field] : Object | J.cs:69:14:69:21 | access to field Field | -| J.cs:70:14:70:15 | access to local variable s3 : Struct [property Prop] : Object | J.cs:70:14:70:20 | access to property Prop | -| J.cs:70:14:70:15 | access to local variable s3 : Struct [property Prop] : Object | J.cs:70:14:70:20 | access to property Prop | -| J.cs:79:17:79:33 | call to method Source : Object | J.cs:80:35:80:35 | access to local variable o : Object | -| J.cs:79:17:79:33 | call to method Source : Object | J.cs:80:35:80:35 | access to local variable o : Object | -| J.cs:80:18:80:36 | object creation of type Struct : Struct [property Prop] : Object | J.cs:84:14:84:15 | access to local variable s2 : Struct [property Prop] : Object | -| J.cs:80:18:80:36 | object creation of type Struct : Struct [property Prop] : Object | J.cs:84:14:84:15 | access to local variable s2 : Struct [property Prop] : Object | -| J.cs:80:18:80:36 | object creation of type Struct : Struct [property Prop] : Object | J.cs:88:14:88:15 | access to local variable s3 : Struct [property Prop] : Object | -| J.cs:80:18:80:36 | object creation of type Struct : Struct [property Prop] : Object | J.cs:88:14:88:15 | access to local variable s3 : 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:80:35:80:35 | access to local variable o : Object | J.cs:14:40:14:43 | prop : Object | -| J.cs:80:35:80:35 | access to local variable o : 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:80:18:80:36 | object creation of type Struct : Struct [property Prop] : Object | -| J.cs:84:14:84:15 | access to local variable s2 : Struct [property Prop] : Object | J.cs:84:14:84:20 | access to property Prop | -| J.cs:84:14:84:15 | access to local variable s2 : Struct [property Prop] : Object | J.cs:84:14:84:20 | access to property Prop | -| J.cs:86:18:86:54 | ... with { ... } : Struct [field Field] : Object | J.cs:87:14:87:15 | access to local variable s3 : Struct [field Field] : Object | -| J.cs:86:18:86:54 | ... with { ... } : Struct [field Field] : Object | J.cs:87:14:87:15 | access to local variable s3 : Struct [field Field] : Object | -| J.cs:86:36:86:52 | call to method Source : Object | J.cs:86:18:86:54 | ... with { ... } : Struct [field Field] : Object | -| J.cs:86:36:86:52 | call to method Source : Object | J.cs:86:18:86:54 | ... with { ... } : Struct [field Field] : Object | -| J.cs:87:14:87:15 | access to local variable s3 : Struct [field Field] : Object | J.cs:87:14:87:21 | access to field Field | -| J.cs:87:14:87:15 | access to local variable s3 : Struct [field Field] : Object | J.cs:87:14:87:21 | access to field Field | -| J.cs:88:14:88:15 | access to local variable s3 : Struct [property Prop] : Object | J.cs:88:14:88:20 | access to property Prop | -| J.cs:88:14:88:15 | access to local variable s3 : Struct [property Prop] : Object | J.cs:88:14:88:20 | access to property Prop | -| J.cs:97:17:97:33 | call to method Source : Object | J.cs:99:28:99:28 | access to local variable o : Object | -| J.cs:97:17:97:33 | call to method Source : Object | J.cs:99:28:99:28 | access to local variable o : Object | -| J.cs:99:18:99:41 | { ..., ... } : <>__AnonType0 [property X] : Object | J.cs:102:14:102:15 | access to local variable a2 : <>__AnonType0 [property X] : Object | -| J.cs:99:18:99:41 | { ..., ... } : <>__AnonType0 [property X] : Object | J.cs:102:14:102:15 | access to local variable a2 : <>__AnonType0 [property X] : Object | -| J.cs:99:18:99:41 | { ..., ... } : <>__AnonType0 [property X] : Object | J.cs:106:14:106:15 | access to local variable a3 : <>__AnonType0 [property X] : Object | -| J.cs:99:18:99:41 | { ..., ... } : <>__AnonType0 [property X] : Object | J.cs:106:14:106:15 | access to local variable a3 : <>__AnonType0 [property X] : Object | -| J.cs:99:28:99:28 | access to local variable o : Object | J.cs:99:18:99:41 | { ..., ... } : <>__AnonType0 [property X] : Object | -| J.cs:99:28:99:28 | access to local variable o : Object | J.cs:99:18:99:41 | { ..., ... } : <>__AnonType0 [property X] : Object | -| J.cs:102:14:102:15 | access to local variable a2 : <>__AnonType0 [property X] : Object | J.cs:102:14:102:17 | access to property X | -| J.cs:102:14:102:15 | access to local variable a2 : <>__AnonType0 [property X] : Object | J.cs:102:14:102:17 | access to property X | -| J.cs:105:18:105:50 | ... with { ... } : <>__AnonType0 [property Y] : Object | J.cs:107:14:107:15 | access to local variable a3 : <>__AnonType0 [property Y] : Object | -| J.cs:105:18:105:50 | ... with { ... } : <>__AnonType0 [property Y] : Object | J.cs:107:14:107:15 | access to local variable a3 : <>__AnonType0 [property Y] : Object | -| J.cs:105:32:105:48 | call to method Source : Object | J.cs:105:18:105:50 | ... with { ... } : <>__AnonType0 [property Y] : Object | -| J.cs:105:32:105:48 | call to method Source : Object | J.cs:105:18:105:50 | ... with { ... } : <>__AnonType0 [property Y] : Object | -| J.cs:106:14:106:15 | access to local variable a3 : <>__AnonType0 [property X] : Object | J.cs:106:14:106:17 | access to property X | -| J.cs:106:14:106:15 | access to local variable a3 : <>__AnonType0 [property X] : Object | J.cs:106:14:106:17 | access to property X | -| J.cs:107:14:107:15 | access to local variable a3 : <>__AnonType0 [property Y] : Object | J.cs:107:14:107:17 | access to property Y | -| J.cs:107:14:107:15 | access to local variable a3 : <>__AnonType0 [property Y] : Object | J.cs:107:14:107:17 | access to property Y | -| J.cs:119:13:119:13 | [post] access to local variable a : Int32[] [element] : Int32 | J.cs:125:14:125:14 | access to local variable a : Int32[] [element] : Int32 | -| J.cs:119:13:119:13 | [post] access to local variable a : Int32[] [element] : Int32 | J.cs:125:14:125:14 | access to local variable a : Int32[] [element] : Int32 | -| J.cs:119:20:119:34 | call to method Source : Int32 | J.cs:119:13:119:13 | [post] access to local variable a : Int32[] [element] : Int32 | -| J.cs:119:20:119:34 | call to method Source : Int32 | J.cs:119:13:119:13 | [post] access to local variable a : Int32[] [element] : Int32 | -| J.cs:125:14:125:14 | access to local variable a : Int32[] [element] : Int32 | J.cs:125:14:125:17 | access to array element : Int32 | -| J.cs:125:14:125:14 | access to local variable a : Int32[] [element] : Int32 | J.cs:125:14:125:17 | access to array element : Int32 | -| J.cs:125:14:125:17 | access to array element : Int32 | J.cs:125:14:125:17 | (...) ... | -| J.cs:125:14:125:17 | access to array element : Int32 | J.cs:125:14:125:17 | (...) ... | +| A.cs:5:17:5:28 | call to method Source : C | A.cs:6:24:6:24 | access to local variable c : C | provenance | | +| A.cs:5:17:5:28 | call to method Source : C | A.cs:6:24:6:24 | access to local variable c : C | provenance | | +| A.cs:6:17:6:25 | call to method Make : B [field c] : C | A.cs:7:14:7:14 | access to local variable b : B [field c] : C | provenance | | +| A.cs:6:17:6:25 | call to method Make : B [field c] : C | A.cs:7:14:7:14 | access to local variable b : B [field c] : C | provenance | | +| A.cs:6:24:6:24 | access to local variable c : C | A.cs:6:17:6:25 | call to method Make : B [field c] : C | provenance | | +| A.cs:6:24:6:24 | access to local variable c : C | A.cs:6:17:6:25 | call to method Make : B [field c] : C | provenance | | +| A.cs:6:24:6:24 | access to local variable c : C | A.cs:147:32:147:32 | c : C | provenance | | +| A.cs:6:24:6:24 | access to local variable c : C | A.cs:147:32:147:32 | c : C | provenance | | +| A.cs:7:14:7:14 | access to local variable b : B [field c] : C | A.cs:7:14:7:16 | access to field c | provenance | | +| A.cs:7:14:7:14 | access to local variable b : B [field c] : C | A.cs:7:14:7:16 | access to field c | provenance | | +| 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 | provenance | | +| 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 | provenance | | +| A.cs:13:15:13:29 | call to method Source : C1 | A.cs:13:9:13:9 | [post] access to local variable b : B [field c] : C1 | provenance | | +| A.cs:13:15:13:29 | call to method Source : C1 | A.cs:13:9:13:9 | [post] access to local variable b : B [field c] : C1 | provenance | | +| A.cs:13:15:13:29 | call to method Source : C1 | A.cs:145:27:145:27 | c : C1 | provenance | | +| A.cs:13:15:13:29 | call to method Source : C1 | A.cs:145:27:145:27 | c : C1 | provenance | | +| A.cs:14:14:14:14 | access to local variable b : B [field c] : C1 | A.cs:14:14:14:20 | call to method Get | provenance | | +| A.cs:14:14:14:14 | access to local variable b : B [field c] : C1 | A.cs:14:14:14:20 | call to method Get | provenance | | +| 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 | provenance | | +| 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 | provenance | | +| A.cs:15:15:15:35 | object creation of type B : B [field c] : C | A.cs:15:14:15:42 | call to method Get | provenance | | +| A.cs:15:15:15:35 | object creation of type B : B [field c] : C | A.cs:15:14:15:42 | call to method Get | provenance | | +| 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 | provenance | | +| 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 | provenance | | +| A.cs:15:21:15:34 | call to method Source : C | A.cs:15:15:15:35 | object creation of type B : B [field c] : C | provenance | | +| A.cs:15:21:15:34 | call to method Source : C | A.cs:15:15:15:35 | object creation of type B : B [field c] : C | provenance | | +| A.cs:15:21:15:34 | call to method Source : C | A.cs:141:20:141:20 | c : C | provenance | | +| A.cs:15:21:15:34 | call to method Source : C | A.cs:141:20:141:20 | c : C | provenance | | +| A.cs:22:14:22:38 | call to method SetOnB : B [field c] : C2 | A.cs:24:14:24:15 | access to local variable b2 : B [field c] : C2 | provenance | | +| A.cs:22:14:22:38 | call to method SetOnB : B [field c] : C2 | A.cs:24:14:24:15 | access to local variable b2 : B [field c] : C2 | provenance | | +| A.cs:22:25:22:37 | call to method Source : C2 | A.cs:22:14:22:38 | call to method SetOnB : B [field c] : C2 | provenance | | +| A.cs:22:25:22:37 | call to method Source : C2 | A.cs:22:14:22:38 | call to method SetOnB : B [field c] : C2 | provenance | | +| A.cs:22:25:22:37 | call to method Source : C2 | A.cs:42:29:42:29 | c : C2 | provenance | | +| A.cs:22:25:22:37 | call to method Source : C2 | A.cs:42:29:42:29 | c : C2 | provenance | | +| A.cs:24:14:24:15 | access to local variable b2 : B [field c] : C2 | A.cs:24:14:24:17 | access to field c | provenance | | +| A.cs:24:14:24:15 | access to local variable b2 : B [field c] : C2 | A.cs:24:14:24:17 | access to field c | provenance | | +| A.cs:31:14:31:42 | call to method SetOnBWrap : B [field c] : C2 | A.cs:33:14:33:15 | access to local variable b2 : B [field c] : C2 | provenance | | +| A.cs:31:14:31:42 | call to method SetOnBWrap : B [field c] : C2 | A.cs:33:14:33:15 | access to local variable b2 : B [field c] : C2 | provenance | | +| A.cs:31:29:31:41 | call to method Source : C2 | A.cs:31:14:31:42 | call to method SetOnBWrap : B [field c] : C2 | provenance | | +| A.cs:31:29:31:41 | call to method Source : C2 | A.cs:31:14:31:42 | call to method SetOnBWrap : B [field c] : C2 | provenance | | +| A.cs:31:29:31:41 | call to method Source : C2 | A.cs:36:33:36:33 | c : C2 | provenance | | +| A.cs:31:29:31:41 | call to method Source : C2 | A.cs:36:33:36:33 | c : C2 | provenance | | +| A.cs:33:14:33:15 | access to local variable b2 : B [field c] : C2 | A.cs:33:14:33:17 | access to field c | provenance | | +| A.cs:33:14:33:15 | access to local variable b2 : B [field c] : C2 | A.cs:33:14:33:17 | access to field c | provenance | | +| A.cs:36:33:36:33 | c : C2 | A.cs:38:29:38:29 | access to parameter c : C2 | provenance | | +| A.cs:36:33:36:33 | c : C2 | A.cs:38:29:38:29 | access to parameter c : C2 | provenance | | +| A.cs:38:18:38:30 | call to method SetOnB : B [field c] : C2 | A.cs:39:16:39:28 | ... ? ... : ... : B [field c] : C2 | provenance | | +| A.cs:38:18:38:30 | call to method SetOnB : B [field c] : C2 | A.cs:39:16:39:28 | ... ? ... : ... : B [field c] : C2 | provenance | | +| A.cs:38:29:38:29 | access to parameter c : C2 | A.cs:38:18:38:30 | call to method SetOnB : B [field c] : C2 | provenance | | +| A.cs:38:29:38:29 | access to parameter c : C2 | A.cs:38:18:38:30 | call to method SetOnB : B [field c] : C2 | provenance | | +| A.cs:38:29:38:29 | access to parameter c : C2 | A.cs:42:29:42:29 | c : C2 | provenance | | +| A.cs:38:29:38:29 | access to parameter c : C2 | A.cs:42:29:42:29 | c : C2 | provenance | | +| A.cs:42:29:42:29 | c : C2 | A.cs:47:20:47:20 | access to parameter c : C2 | provenance | | +| A.cs:42:29:42:29 | c : C2 | A.cs:47:20:47:20 | access to parameter c : C2 | provenance | | +| A.cs:47:13:47:14 | [post] access to local variable b2 : B [field c] : C2 | A.cs:48:20:48:21 | access to local variable b2 : B [field c] : C2 | provenance | | +| A.cs:47:13:47:14 | [post] access to local variable b2 : B [field c] : C2 | A.cs:48:20:48:21 | access to local variable b2 : B [field c] : C2 | provenance | | +| A.cs:47:20:47:20 | access to parameter c : C2 | A.cs:47:13:47:14 | [post] access to local variable b2 : B [field c] : C2 | provenance | | +| A.cs:47:20:47:20 | access to parameter c : C2 | A.cs:47:13:47:14 | [post] access to local variable b2 : B [field c] : C2 | provenance | | +| A.cs:47:20:47:20 | access to parameter c : C2 | A.cs:145:27:145:27 | c : C2 | provenance | | +| A.cs:47:20:47:20 | access to parameter c : C2 | A.cs:145:27:145:27 | c : C2 | provenance | | +| A.cs:55:17:55:28 | call to method Source : A | A.cs:57:16:57:16 | access to local variable a : A | provenance | | +| A.cs:55:17:55:28 | call to method Source : A | A.cs:57:16:57:16 | access to local variable a : A | provenance | | +| A.cs:57:9:57:10 | [post] access to local variable c1 : C1 [field a] : A | A.cs:58:12:58:13 | access to local variable c1 : C1 [field a] : A | provenance | | +| A.cs:57:9:57:10 | [post] access to local variable c1 : C1 [field a] : A | A.cs:58:12:58:13 | access to local variable c1 : C1 [field a] : A | provenance | | +| A.cs:57:16:57:16 | access to local variable a : A | A.cs:57:9:57:10 | [post] access to local variable c1 : C1 [field a] : A | provenance | | +| A.cs:57:16:57:16 | access to local variable a : A | A.cs:57:9:57:10 | [post] access to local variable c1 : C1 [field a] : A | provenance | | +| A.cs:58:12:58:13 | access to local variable c1 : C1 [field a] : A | A.cs:60:22:60:22 | c : C1 [field a] : A | provenance | | +| A.cs:58:12:58:13 | access to local variable c1 : C1 [field a] : A | A.cs:60:22:60:22 | c : C1 [field a] : A | provenance | | +| A.cs:60:22:60:22 | c : C1 [field a] : A | A.cs:64:19:64:23 | (...) ... : C1 [field a] : A | provenance | | +| 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:83:9:83:9 | [post] access to parameter b : 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:88:12:88:12 | [post] access to local variable 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: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 | | +| A.cs:83:15:83:26 | call to method Source : C | A.cs:145:27:145:27 | c : C | provenance | | +| 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: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: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: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 | [post] access to parameter b : 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:105:23:105:23 | [post] access to local variable b : 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:105:17:105:29 | object creation of type D : D [field b, field c] : C | provenance | | +| A.cs:98:13:98:16 | [post] this access : 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:98:13:98:16 | [post] this access : D [field b] : B | A.cs:105:17:105:29 | object creation of type D : D [field b] : B | provenance | | +| A.cs:98:13:98:16 | [post] this access : D [field b] : B | A.cs:105:17:105:29 | object creation of type D : 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 | | +| 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 [field c] : C | A.cs:98:13:98:16 | [post] this access : D [field b, field c] : C | provenance | | +| A.cs:98:22:98:43 | ... ? ... : ... : B [field c] : C | A.cs:98:13:98:16 | [post] this access : D [field b, field c] : C | provenance | | +| A.cs:98:30:98:43 | call to method Source : B | A.cs:98:22:98:43 | ... ? ... : ... : B | provenance | | +| A.cs:98:30:98:43 | call to method Source : B | A.cs:98:22:98:43 | ... ? ... : ... : B | provenance | | +| A.cs:104:17:104:30 | call to method Source : B | A.cs:105:23:105:23 | access to local variable b : B | provenance | | +| A.cs:104:17:104:30 | call to method Source : B | A.cs:105:23:105:23 | access to local variable b : B | provenance | | +| A.cs:105:17:105:29 | object creation of type D : D [field b, field c] : C | A.cs:107:14:107:14 | access to local variable d : D [field b, field c] : C | provenance | | +| A.cs:105:17:105:29 | object creation of type D : D [field b, field c] : C | A.cs:107:14:107:14 | access to local variable d : D [field b, field c] : C | provenance | | +| A.cs:105:17:105:29 | object creation of type D : D [field b] : B | A.cs:106:14:106:14 | access to local variable d : D [field b] : B | provenance | | +| A.cs:105:17:105:29 | object creation of type D : D [field b] : B | A.cs:106:14:106:14 | access to local variable d : D [field b] : B | provenance | | +| A.cs:105:23:105:23 | [post] access to local variable b : B [field c] : C | A.cs:108:14:108:14 | access to local variable b : B [field c] : C | provenance | | +| A.cs:105:23:105:23 | [post] access to local variable b : B [field c] : C | A.cs:108:14:108:14 | access to local variable b : B [field c] : C | provenance | | +| A.cs:105:23:105:23 | access to local variable b : B | A.cs:95:20:95:20 | b : B | provenance | | +| A.cs:105:23:105:23 | access to local variable b : B | A.cs:95:20:95:20 | b : B | provenance | | +| A.cs:105:23:105:23 | access to local variable b : B | A.cs:105:17:105:29 | object creation of type D : D [field b] : B | provenance | | +| A.cs:105:23:105:23 | access to local variable b : B | A.cs:105:17:105:29 | object creation of type D : D [field b] : B | provenance | | +| A.cs:106:14:106:14 | access to local variable d : D [field b] : B | A.cs:106:14:106:16 | access to field b | provenance | | +| A.cs:106:14:106:14 | access to local variable d : D [field b] : B | A.cs:106:14:106:16 | access to field b | provenance | | +| A.cs:107:14:107:14 | access to local variable d : D [field b, field c] : C | A.cs:107:14:107:16 | access to field b : B [field c] : C | provenance | | +| A.cs:107:14:107:14 | access to local variable d : D [field b, field c] : C | A.cs:107:14:107:16 | access to field b : B [field c] : C | provenance | | +| A.cs:107:14:107:16 | access to field b : B [field c] : C | A.cs:107:14:107:18 | access to field c | provenance | | +| A.cs:107:14:107:16 | access to field b : B [field c] : C | A.cs:107:14:107:18 | access to field c | provenance | | +| A.cs:108:14:108:14 | access to local variable b : B [field c] : C | A.cs:108:14:108:16 | access to field c | provenance | | +| A.cs:108:14:108:14 | access to local variable b : B [field c] : C | A.cs:108:14:108:16 | access to field c | provenance | | +| A.cs:113:17:113:29 | call to method Source : B | A.cs:114:29:114:29 | access to local variable b : B | provenance | | +| A.cs:113:17:113:29 | call to method Source : B | A.cs:114:29:114:29 | access to local variable b : B | provenance | | +| 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 | provenance | | +| 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 | provenance | | +| A.cs:114:29:114:29 | access to local variable b : B | A.cs:114:18:114:54 | object creation of type MyList : MyList [field head] : B | provenance | | +| A.cs:114:29:114:29 | access to local variable b : B | A.cs:114:18:114:54 | object creation of type MyList : MyList [field head] : B | provenance | | +| A.cs:114:29:114:29 | access to local variable b : B | A.cs:157:25:157:28 | head : B | provenance | | +| A.cs:114:29:114:29 | access to local variable b : B | A.cs:157:25:157:28 | head : B | provenance | | +| 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 | provenance | | +| 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 | provenance | | +| A.cs:115:35:115:36 | access to local variable l1 : MyList [field head] : B | A.cs:115:18:115:37 | object creation of type MyList : MyList [field next, field head] : B | provenance | | +| A.cs:115:35:115:36 | access to local variable l1 : MyList [field head] : B | A.cs:115:18:115:37 | object creation of type MyList : MyList [field next, field head] : B | provenance | | +| 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 | provenance | | +| 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 | provenance | | +| A.cs:116:18:116:37 | object creation of type MyList : MyList [field next, field next, field head] : B | A.cs:119:14:119:15 | access to local variable l3 : MyList [field next, field next, field head] : B | provenance | | +| A.cs:116:18:116:37 | object creation of type MyList : MyList [field next, field next, field head] : B | A.cs:119:14:119:15 | access to local variable l3 : MyList [field next, field next, field head] : B | provenance | | +| A.cs:116:18:116:37 | object creation of type MyList : MyList [field next, field next, field head] : B | A.cs:121:41:121:41 | access to local variable l : MyList [field next, field next, field head] : B | provenance | | +| A.cs:116:18:116:37 | object creation of type MyList : MyList [field next, field next, field head] : B | A.cs:121:41:121:41 | access to local variable l : MyList [field next, field next, field head] : B | provenance | | +| A.cs:116:35:116:36 | access to local variable l2 : MyList [field next, field head] : B | A.cs:116:18:116:37 | object creation of type MyList : MyList [field next, field next, field head] : B | provenance | | +| A.cs:116:35:116:36 | access to local variable l2 : MyList [field next, field head] : B | A.cs:116:18:116:37 | object creation of type MyList : MyList [field next, field next, field head] : B | provenance | | +| 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 | provenance | | +| 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 | provenance | | +| A.cs:119:14:119:15 | access to local variable l3 : MyList [field next, field next, field head] : B | A.cs:119:14:119:20 | access to field next : MyList [field next, field head] : B | provenance | | +| A.cs:119:14:119:15 | access to local variable l3 : MyList [field next, field next, field head] : B | A.cs:119:14:119:20 | access to field next : MyList [field next, field head] : B | provenance | | +| A.cs:119:14:119:20 | access to field next : MyList [field next, field head] : B | A.cs:119:14:119:25 | access to field next : MyList [field head] : B | provenance | | +| A.cs:119:14:119:20 | access to field next : MyList [field next, field head] : B | A.cs:119:14:119:25 | access to field next : MyList [field head] : B | provenance | | +| A.cs:119:14:119:25 | access to field next : MyList [field head] : B | A.cs:119:14:119:30 | access to field head | provenance | | +| A.cs:119:14:119:25 | access to field next : MyList [field head] : B | A.cs:119:14:119:30 | access to field head | provenance | | +| A.cs:121:41:121:41 | access to local variable l : MyList [field next, field head] : B | A.cs:121:41:121:46 | access to field next : MyList [field head] : B | provenance | | +| A.cs:121:41:121:41 | access to local variable l : MyList [field next, field head] : B | A.cs:121:41:121:46 | access to field next : MyList [field head] : B | provenance | | +| A.cs:121:41:121:41 | access to local variable l : MyList [field next, field next, field head] : B | A.cs:121:41:121:46 | access to field next : MyList [field next, field head] : B | provenance | | +| A.cs:121:41:121:41 | access to local variable l : MyList [field next, field next, field head] : B | A.cs:121:41:121:46 | access to field next : MyList [field next, field head] : B | provenance | | +| A.cs:121:41:121:46 | access to field next : MyList [field head] : B | A.cs:123:18:123:18 | access to local variable l : MyList [field head] : B | provenance | | +| A.cs:121:41:121:46 | access to field next : MyList [field head] : B | A.cs:123:18:123:18 | access to local variable l : MyList [field head] : B | provenance | | +| A.cs:121:41:121:46 | access to field next : MyList [field next, field head] : B | A.cs:121:41:121:41 | access to local variable l : MyList [field next, field head] : B | provenance | | +| A.cs:121:41:121:46 | access to field next : MyList [field next, field head] : B | A.cs:121:41:121:41 | access to local variable l : MyList [field next, field head] : B | provenance | | +| 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: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: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 | | +| A.cs:145:27:145:27 | c : C | A.cs:145:41:145:41 | access to parameter c : C | provenance | | +| 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 : 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: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 | | +| 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 | | +| A.cs:145:41:145:41 | access to parameter c : C2 | A.cs:145:32:145:35 | [post] this access : B [field c] : C2 | provenance | | +| A.cs:145:41:145:41 | access to parameter c : C2 | A.cs:145:32:145:35 | [post] this access : B [field c] : C2 | provenance | | +| A.cs:146:18:146:20 | this : B [field c] : C | A.cs:146:33:146:36 | this access : B [field c] : C | provenance | | +| A.cs:146:18:146:20 | this : B [field c] : C | A.cs:146:33:146:36 | this access : B [field c] : C | provenance | | +| A.cs:146:18:146:20 | this : B [field c] : C1 | A.cs:146:33:146:36 | this access : B [field c] : C1 | provenance | | +| A.cs:146:18:146:20 | this : B [field c] : C1 | A.cs:146:33:146:36 | this access : B [field c] : C1 | provenance | | +| A.cs:146:33:146:36 | this access : B [field c] : C | A.cs:146:33:146:38 | access to field c : C | provenance | | +| A.cs:146:33:146:36 | this access : B [field c] : C | A.cs:146:33:146:38 | access to field c : C | provenance | | +| A.cs:146:33:146:36 | this access : B [field c] : C1 | A.cs:146:33:146:38 | access to field c : C1 | provenance | | +| A.cs:146:33:146:36 | this access : B [field c] : C1 | A.cs:146:33:146:38 | access to field c : C1 | provenance | | +| A.cs:147:32:147:32 | c : C | A.cs:149:26:149:26 | access to parameter c : C | provenance | | +| A.cs:147:32:147:32 | c : C | A.cs:149:26:149:26 | access to parameter c : C | provenance | | +| A.cs:149:26:149:26 | access to parameter c : C | A.cs:141:20:141:20 | c : C | provenance | | +| A.cs:149:26:149:26 | access to parameter c : C | A.cs:141:20:141:20 | c : C | provenance | | +| A.cs:149:26:149:26 | access to parameter c : C | A.cs:149:20:149:27 | object creation of type B : B [field c] : C | provenance | | +| A.cs:149:26:149:26 | access to parameter c : C | A.cs:149:20:149:27 | object creation of type B : B [field c] : C | provenance | | +| A.cs:157:25:157:28 | head : B | A.cs:159:25:159:28 | access to parameter head : B | provenance | | +| A.cs:157:25:157:28 | head : B | A.cs:159:25:159:28 | access to parameter head : B | provenance | | +| 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 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: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: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 | | +| 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 | | +| B.cs:5:17:5:31 | call to method Source : Elem | B.cs:6:27:6:27 | access to local variable e : Elem | provenance | | +| B.cs:5:17:5:31 | call to method Source : Elem | B.cs:6:27:6:27 | access to local variable e : Elem | provenance | | +| 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 | provenance | | +| 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 | provenance | | +| B.cs:6:27:6:27 | access to local variable e : Elem | B.cs:6:18:6:34 | object creation of type Box1 : Box1 [field elem1] : Elem | provenance | | +| B.cs:6:27:6:27 | access to local variable e : Elem | B.cs:6:18:6:34 | object creation of type Box1 : Box1 [field elem1] : Elem | provenance | | +| B.cs:6:27:6:27 | access to local variable e : Elem | B.cs:29:26:29:27 | e1 : Elem | provenance | | +| B.cs:6:27:6:27 | access to local variable e : Elem | B.cs:29:26:29:27 | e1 : Elem | provenance | | +| B.cs:7:18:7:29 | object creation of type Box2 : Box2 [field box1, field elem1] : Elem | B.cs:8:14:8:15 | access to local variable b2 : Box2 [field box1, field elem1] : Elem | provenance | | +| B.cs:7:18:7:29 | object creation of type Box2 : Box2 [field box1, field elem1] : Elem | B.cs:8:14:8:15 | access to local variable b2 : Box2 [field box1, field elem1] : Elem | provenance | | +| B.cs:7:27:7:28 | access to local variable b1 : Box1 [field elem1] : Elem | B.cs:7:18:7:29 | object creation of type Box2 : Box2 [field box1, field elem1] : Elem | provenance | | +| B.cs:7:27:7:28 | access to local variable b1 : Box1 [field elem1] : Elem | B.cs:7:18:7:29 | object creation of type Box2 : Box2 [field box1, field elem1] : Elem | provenance | | +| 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 | provenance | | +| 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 | provenance | | +| B.cs:8:14:8:15 | access to local variable b2 : Box2 [field box1, field elem1] : Elem | B.cs:8:14:8:20 | access to field box1 : Box1 [field elem1] : Elem | provenance | | +| B.cs:8:14:8:15 | access to local variable b2 : Box2 [field box1, field elem1] : Elem | B.cs:8:14:8:20 | access to field box1 : Box1 [field elem1] : Elem | provenance | | +| B.cs:8:14:8:20 | access to field box1 : Box1 [field elem1] : Elem | B.cs:8:14:8:26 | access to field elem1 | provenance | | +| B.cs:8:14:8:20 | access to field box1 : Box1 [field elem1] : Elem | B.cs:8:14:8:26 | access to field elem1 | provenance | | +| B.cs:14:17:14:31 | call to method Source : Elem | B.cs:15:33:15:33 | access to local variable e : Elem | provenance | | +| B.cs:14:17:14:31 | call to method Source : Elem | B.cs:15:33:15:33 | access to local variable e : Elem | provenance | | +| 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 | provenance | | +| 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 | provenance | | +| B.cs:15:33:15:33 | access to local variable e : Elem | B.cs:15:18:15:34 | object creation of type Box1 : Box1 [field elem2] : Elem | provenance | | +| B.cs:15:33:15:33 | access to local variable e : Elem | B.cs:15:18:15:34 | object creation of type Box1 : Box1 [field elem2] : Elem | provenance | | +| B.cs:15:33:15:33 | access to local variable e : Elem | B.cs:29:35:29:36 | e2 : Elem | provenance | | +| B.cs:15:33:15:33 | access to local variable e : Elem | B.cs:29:35:29:36 | e2 : Elem | provenance | | +| B.cs:16:18:16:29 | object creation of type Box2 : Box2 [field box1, field elem2] : Elem | B.cs:18:14:18:15 | access to local variable b2 : Box2 [field box1, field elem2] : Elem | provenance | | +| B.cs:16:18:16:29 | object creation of type Box2 : Box2 [field box1, field elem2] : Elem | B.cs:18:14:18:15 | access to local variable b2 : Box2 [field box1, field elem2] : Elem | provenance | | +| B.cs:16:27:16:28 | access to local variable b1 : Box1 [field elem2] : Elem | B.cs:16:18:16:29 | object creation of type Box2 : Box2 [field box1, field elem2] : Elem | provenance | | +| B.cs:16:27:16:28 | access to local variable b1 : Box1 [field elem2] : Elem | B.cs:16:18:16:29 | object creation of type Box2 : Box2 [field box1, field elem2] : Elem | provenance | | +| 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 | provenance | | +| 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 | provenance | | +| B.cs:18:14:18:15 | access to local variable b2 : Box2 [field box1, field elem2] : Elem | B.cs:18:14:18:20 | access to field box1 : Box1 [field elem2] : Elem | provenance | | +| B.cs:18:14:18:15 | access to local variable b2 : Box2 [field box1, field elem2] : Elem | B.cs:18:14:18:20 | access to field box1 : Box1 [field elem2] : Elem | provenance | | +| B.cs:18:14:18:20 | access to field box1 : Box1 [field elem2] : Elem | B.cs:18:14:18:26 | access to field elem2 | provenance | | +| B.cs:18:14:18:20 | access to field box1 : Box1 [field elem2] : Elem | B.cs:18:14:18:26 | access to field elem2 | provenance | | +| B.cs:29:26:29:27 | e1 : Elem | B.cs:31:26:31:27 | access to parameter e1 : Elem | provenance | | +| 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: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: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: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:12:15:12:21 | object creation of type C : C [field s1] : Elem | provenance | | +| C.cs:3:18:3:19 | [post] this access : C [field s1] : Elem | C.cs:12:15:12:21 | object creation of type C : 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:12:15:12:21 | object creation of type C : C [field s2] : Elem | provenance | | +| C.cs:4:27:4:28 | [post] this access : C [field s2] : Elem | C.cs:12:15:12:21 | object creation of type C : 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:12:15:12:21 | object creation of type C : C [property s5] : Elem | provenance | | +| C.cs:7:18:7:19 | [post] this access : C [property s5] : Elem | C.cs:12:15:12:21 | object creation of type C : 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 | | +| C.cs:8:30:8:44 | call to method Source : Elem | C.cs:28:14:28:15 | access to property s6 | provenance | | +| C.cs:12:15:12:21 | object creation of type C : C [field s1] : Elem | C.cs:13:9:13:9 | access to local variable c : C [field s1] : Elem | provenance | | +| C.cs:12:15:12:21 | object creation of type C : C [field s1] : Elem | C.cs:13:9:13:9 | access to local variable c : C [field s1] : Elem | provenance | | +| C.cs:12:15:12:21 | object creation of type C : C [field s2] : Elem | C.cs:13:9:13:9 | access to local variable c : C [field s2] : Elem | provenance | | +| C.cs:12:15:12:21 | object creation of type C : C [field s2] : Elem | C.cs:13:9:13:9 | access to local variable c : C [field s2] : Elem | provenance | | +| C.cs:12:15:12:21 | object creation of type C : C [field s3] : Elem | C.cs:13:9:13:9 | access to local variable c : C [field s3] : Elem | provenance | | +| C.cs:12:15:12:21 | object creation of type C : C [field s3] : Elem | C.cs:13:9:13:9 | access to local variable c : C [field s3] : Elem | provenance | | +| C.cs:12:15:12:21 | object creation of type C : C [property s5] : Elem | C.cs:13:9:13:9 | access to local variable c : C [property s5] : Elem | provenance | | +| C.cs:12:15:12:21 | object creation of type C : C [property s5] : Elem | C.cs:13:9:13:9 | access to local variable c : C [property s5] : Elem | provenance | | +| C.cs:13:9:13:9 | access to local variable c : C [field s1] : Elem | C.cs:21:17:21:18 | this : C [field s1] : Elem | provenance | | +| C.cs:13:9:13:9 | access to local variable c : C [field s1] : Elem | C.cs:21:17:21:18 | this : C [field s1] : Elem | provenance | | +| C.cs:13:9:13:9 | access to local variable c : C [field s2] : Elem | C.cs:21:17:21:18 | this : C [field s2] : Elem | provenance | | +| C.cs:13:9:13:9 | access to local variable c : C [field s2] : Elem | C.cs:21:17:21:18 | this : C [field s2] : Elem | provenance | | +| 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 [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:18:9:18:12 | [post] this access : C [field s3] : Elem | C.cs:12:15:12:21 | object creation of type C : C [field s3] : Elem | provenance | | +| C.cs:18:9:18:12 | [post] this access : C [field s3] : Elem | C.cs:12:15:12:21 | object creation of type C : 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 | | +| C.cs:21:17:21:18 | this : C [field s1] : Elem | C.cs:23:14:23:15 | this access : C [field s1] : Elem | provenance | | +| C.cs:21:17:21:18 | this : C [field s2] : Elem | C.cs:24:14:24:15 | this access : C [field s2] : Elem | provenance | | +| C.cs:21:17:21:18 | this : C [field s2] : Elem | C.cs:24:14:24:15 | this access : C [field s2] : Elem | provenance | | +| C.cs:21:17:21:18 | this : C [field s3] : Elem | C.cs:25:14:25:15 | this access : C [field s3] : Elem | provenance | | +| C.cs:21:17:21:18 | this : C [field s3] : Elem | C.cs:25:14:25:15 | this access : C [field s3] : Elem | provenance | | +| C.cs:21:17:21:18 | this : C [property s5] : Elem | C.cs:27:14:27:15 | this access : C [property s5] : Elem | provenance | | +| C.cs:21:17:21:18 | this : C [property s5] : Elem | C.cs:27:14:27:15 | this access : C [property s5] : Elem | provenance | | +| C.cs:23:14:23:15 | this access : C [field s1] : Elem | C.cs:23:14:23:15 | access to field s1 | provenance | | +| C.cs:23:14:23:15 | this access : C [field s1] : Elem | C.cs:23:14:23:15 | access to field s1 | provenance | | +| C.cs:24:14:24:15 | this access : C [field s2] : Elem | C.cs:24:14:24:15 | access to field s2 | provenance | | +| C.cs:24:14:24:15 | this access : C [field s2] : Elem | C.cs:24:14:24:15 | access to field s2 | provenance | | +| C.cs:25:14:25:15 | this access : C [field s3] : Elem | C.cs:25:14:25:15 | access to field s3 | provenance | | +| C.cs:25:14:25:15 | this access : C [field s3] : Elem | C.cs:25:14:25:15 | access to field s3 | provenance | | +| C.cs:27:14:27:15 | this access : C [property s5] : Elem | C.cs:27:14:27:15 | access to property s5 | provenance | | +| C.cs:27:14:27:15 | this access : C [property s5] : Elem | C.cs:27:14:27:15 | access to property s5 | provenance | | +| C_ctor.cs:3:18:3:19 | [post] this access : C_no_ctor [field s1] : Elem | C_ctor.cs:7:23:7:37 | object creation of type C_no_ctor : C_no_ctor [field s1] : Elem | provenance | | +| C_ctor.cs:3:18:3:19 | [post] this access : C_no_ctor [field s1] : Elem | C_ctor.cs:7:23:7:37 | object creation of type C_no_ctor : C_no_ctor [field s1] : Elem | provenance | | +| C_ctor.cs:3:23:3:42 | call to method Source : Elem | C_ctor.cs:3:18:3:19 | [post] this access : C_no_ctor [field s1] : Elem | provenance | | +| C_ctor.cs:3:23:3:42 | call to method Source : Elem | C_ctor.cs:3:18:3:19 | [post] this access : C_no_ctor [field s1] : Elem | provenance | | +| C_ctor.cs:7:23:7:37 | object creation of type C_no_ctor : C_no_ctor [field s1] : Elem | C_ctor.cs:8:9:8:9 | access to local variable c : C_no_ctor [field s1] : Elem | provenance | | +| C_ctor.cs:7:23:7:37 | object creation of type C_no_ctor : C_no_ctor [field s1] : Elem | C_ctor.cs:8:9:8:9 | access to local variable c : C_no_ctor [field s1] : Elem | provenance | | +| C_ctor.cs:8:9:8:9 | access to local variable c : C_no_ctor [field s1] : Elem | C_ctor.cs:11:17:11:18 | this : C_no_ctor [field s1] : Elem | provenance | | +| C_ctor.cs:8:9:8:9 | access to local variable c : C_no_ctor [field s1] : Elem | C_ctor.cs:11:17:11:18 | this : C_no_ctor [field s1] : Elem | provenance | | +| C_ctor.cs:11:17:11:18 | this : C_no_ctor [field s1] : Elem | C_ctor.cs:13:19:13:20 | this access : C_no_ctor [field s1] : Elem | provenance | | +| C_ctor.cs:11:17:11:18 | this : C_no_ctor [field s1] : Elem | C_ctor.cs:13:19:13:20 | this access : C_no_ctor [field s1] : Elem | provenance | | +| C_ctor.cs:13:19:13:20 | this access : C_no_ctor [field s1] : Elem | C_ctor.cs:13:19:13:20 | access to field s1 | provenance | | +| C_ctor.cs:13:19:13:20 | this access : C_no_ctor [field s1] : Elem | C_ctor.cs:13:19:13:20 | access to field s1 | provenance | | +| C_ctor.cs:19:18:19:19 | [post] this access : C_with_ctor [field s1] : Elem | C_ctor.cs:23:25:23:41 | object creation of type C_with_ctor : C_with_ctor [field s1] : Elem | provenance | | +| C_ctor.cs:19:18:19:19 | [post] this access : C_with_ctor [field s1] : Elem | C_ctor.cs:23:25:23:41 | object creation of type C_with_ctor : C_with_ctor [field s1] : Elem | provenance | | +| C_ctor.cs:19:23:19:42 | call to method Source : Elem | C_ctor.cs:19:18:19:19 | [post] this access : C_with_ctor [field s1] : Elem | provenance | | +| C_ctor.cs:19:23:19:42 | call to method Source : Elem | C_ctor.cs:19:18:19:19 | [post] this access : C_with_ctor [field s1] : Elem | provenance | | +| C_ctor.cs:23:25:23:41 | object creation of type C_with_ctor : C_with_ctor [field s1] : Elem | C_ctor.cs:24:9:24:9 | access to local variable c : C_with_ctor [field s1] : Elem | provenance | | +| C_ctor.cs:23:25:23:41 | object creation of type C_with_ctor : C_with_ctor [field s1] : Elem | C_ctor.cs:24:9:24:9 | access to local variable c : C_with_ctor [field s1] : Elem | provenance | | +| C_ctor.cs:24:9:24:9 | access to local variable c : C_with_ctor [field s1] : Elem | C_ctor.cs:29:17:29:18 | this : C_with_ctor [field s1] : Elem | provenance | | +| C_ctor.cs:24:9:24:9 | access to local variable c : C_with_ctor [field s1] : Elem | C_ctor.cs:29:17:29:18 | this : C_with_ctor [field s1] : Elem | provenance | | +| C_ctor.cs:29:17:29:18 | this : C_with_ctor [field s1] : Elem | C_ctor.cs:31:19:31:20 | this access : C_with_ctor [field s1] : Elem | provenance | | +| C_ctor.cs:29:17:29:18 | this : C_with_ctor [field s1] : Elem | C_ctor.cs:31:19:31:20 | this access : C_with_ctor [field s1] : Elem | provenance | | +| C_ctor.cs:31:19:31:20 | this access : C_with_ctor [field s1] : Elem | C_ctor.cs:31:19:31:20 | access to field s1 | provenance | | +| C_ctor.cs:31:19:31:20 | this access : C_with_ctor [field s1] : Elem | C_ctor.cs:31:19:31:20 | access to field s1 | provenance | | +| D.cs:8:9:8:11 | this : D [field trivialPropField] : Object | D.cs:8:22:8:25 | this access : D [field trivialPropField] : Object | provenance | | +| D.cs:8:9:8:11 | this : D [field trivialPropField] : Object | D.cs:8:22:8:25 | this access : D [field trivialPropField] : Object | provenance | | +| 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: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: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 | | +| D.cs:14:9:14:11 | this : D [field trivialPropField] : Object | D.cs:14:22:14:25 | this access : D [field trivialPropField] : Object | provenance | | +| 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: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: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 | | +| 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 | | +| D.cs:18:28:18:29 | o1 : Object | D.cs:21:24:21:25 | access to parameter o1 : Object | provenance | | +| D.cs:18:28:18:29 | o1 : Object | D.cs:21:24:21:25 | access to parameter o1 : Object | provenance | | +| D.cs:18:39:18:40 | o2 : Object | D.cs:22:27:22:28 | access to parameter o2 : Object | provenance | | +| D.cs:18:39:18:40 | o2 : Object | D.cs:22:27:22:28 | access to parameter o2 : Object | provenance | | +| D.cs:18:50:18:51 | o3 : Object | D.cs:23:27:23:28 | access to parameter o3 : Object | provenance | | +| D.cs:18:50:18:51 | o3 : Object | D.cs:23:27:23:28 | access to parameter o3 : Object | provenance | | +| D.cs:21:9:21:11 | [post] access to local variable ret : D [property AutoProp] : Object | D.cs:24:16:24:18 | access to local variable ret : D [property AutoProp] : Object | provenance | | +| D.cs:21:9:21:11 | [post] access to local variable ret : D [property AutoProp] : Object | D.cs:24:16:24:18 | access to local variable ret : D [property AutoProp] : Object | provenance | | +| D.cs:21:24:21:25 | access to parameter o1 : Object | D.cs:21:9:21:11 | [post] access to local variable ret : D [property AutoProp] : Object | provenance | | +| D.cs:21:24:21:25 | access to parameter o1 : Object | D.cs:21:9:21:11 | [post] access to local variable ret : D [property AutoProp] : Object | provenance | | +| D.cs:22:9:22:11 | [post] access to local variable ret : D [field trivialPropField] : Object | D.cs:24:16:24:18 | access to local variable ret : D [field trivialPropField] : Object | provenance | | +| D.cs:22:9:22:11 | [post] access to local variable ret : D [field trivialPropField] : Object | D.cs:24:16:24:18 | access to local variable ret : D [field trivialPropField] : Object | provenance | | +| D.cs:22:27:22:28 | access to parameter o2 : Object | D.cs:9:9:9:11 | value : Object | provenance | | +| D.cs:22:27:22:28 | access to parameter o2 : Object | D.cs:9:9:9:11 | value : Object | provenance | | +| D.cs:22:27:22:28 | access to parameter o2 : Object | D.cs:22:9:22:11 | [post] access to local variable ret : D [field trivialPropField] : Object | provenance | | +| D.cs:22:27:22:28 | access to parameter o2 : Object | D.cs:22:9:22:11 | [post] access to local variable ret : D [field trivialPropField] : Object | provenance | | +| D.cs:23:9:23:11 | [post] access to local variable ret : D [field trivialPropField] : Object | D.cs:24:16:24:18 | access to local variable ret : D [field trivialPropField] : Object | provenance | | +| D.cs:23:9:23:11 | [post] access to local variable ret : D [field trivialPropField] : Object | D.cs:24:16:24:18 | access to local variable ret : D [field trivialPropField] : Object | provenance | | +| D.cs:23:27:23:28 | access to parameter o3 : Object | D.cs:15:9:15:11 | value : Object | provenance | | +| D.cs:23:27:23:28 | access to parameter o3 : Object | D.cs:15:9:15:11 | value : Object | provenance | | +| D.cs:23:27:23:28 | access to parameter o3 : Object | D.cs:23:9:23:11 | [post] access to local variable ret : D [field trivialPropField] : Object | provenance | | +| D.cs:23:27:23:28 | access to parameter o3 : Object | D.cs:23:9:23:11 | [post] access to local variable ret : D [field trivialPropField] : Object | provenance | | +| D.cs:29:17:29:33 | call to method Source : Object | D.cs:31:24:31:24 | access to local variable o : Object | provenance | | +| D.cs:29:17:29:33 | call to method Source : Object | D.cs:31:24:31:24 | access to local variable o : Object | provenance | | +| D.cs:31:17:31:37 | call to method Create : D [property AutoProp] : Object | D.cs:32:14:32:14 | access to local variable d : D [property AutoProp] : Object | provenance | | +| D.cs:31:17:31:37 | call to method Create : D [property AutoProp] : Object | D.cs:32:14:32:14 | access to local variable d : D [property AutoProp] : Object | provenance | | +| D.cs:31:24:31:24 | access to local variable o : Object | D.cs:18:28:18:29 | o1 : Object | provenance | | +| D.cs:31:24:31:24 | access to local variable o : Object | D.cs:18:28:18:29 | o1 : Object | provenance | | +| D.cs:31:24:31:24 | access to local variable o : Object | D.cs:31:17:31:37 | call to method Create : D [property AutoProp] : Object | provenance | | +| D.cs:31:24:31:24 | access to local variable o : Object | D.cs:31:17:31:37 | call to method Create : D [property AutoProp] : Object | provenance | | +| D.cs:32:14:32:14 | access to local variable d : D [property AutoProp] : Object | D.cs:32:14:32:23 | access to property AutoProp | provenance | | +| D.cs:32:14:32:14 | access to local variable d : D [property AutoProp] : Object | D.cs:32:14:32:23 | access to property AutoProp | provenance | | +| D.cs:37:13:37:49 | call to method Create : D [field trivialPropField] : Object | D.cs:39:14:39:14 | access to local variable d : D [field trivialPropField] : Object | provenance | | +| D.cs:37:13:37:49 | call to method Create : D [field trivialPropField] : Object | D.cs:39:14:39:14 | access to local variable d : D [field trivialPropField] : Object | provenance | | +| D.cs:37:13:37:49 | call to method Create : D [field trivialPropField] : Object | D.cs:40:14:40:14 | access to local variable d : D [field trivialPropField] : Object | provenance | | +| D.cs:37:13:37:49 | call to method Create : D [field trivialPropField] : Object | D.cs:40:14:40:14 | access to local variable d : D [field trivialPropField] : Object | provenance | | +| D.cs:37:13:37:49 | call to method Create : D [field trivialPropField] : Object | D.cs:41:14:41:14 | access to local variable d : D [field trivialPropField] : Object | provenance | | +| D.cs:37:13:37:49 | call to method Create : D [field trivialPropField] : Object | D.cs:41:14:41:14 | access to local variable d : D [field trivialPropField] : Object | provenance | | +| D.cs:37:26:37:42 | call to method Source : Object | D.cs:18:39:18:40 | o2 : Object | provenance | | +| D.cs:37:26:37:42 | call to method Source : Object | D.cs:18:39:18:40 | o2 : Object | provenance | | +| D.cs:37:26:37:42 | call to method Source : Object | D.cs:37:13:37:49 | call to method Create : D [field trivialPropField] : Object | provenance | | +| D.cs:37:26:37:42 | call to method Source : Object | D.cs:37:13:37:49 | call to method Create : D [field trivialPropField] : Object | provenance | | +| D.cs:39:14:39:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:8:9:8:11 | this : D [field trivialPropField] : Object | provenance | | +| D.cs:39:14:39:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:8:9:8:11 | this : D [field trivialPropField] : Object | provenance | | +| D.cs:39:14:39:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:39:14:39:26 | access to property TrivialProp | provenance | | +| D.cs:39:14:39:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:39:14:39:26 | access to property TrivialProp | provenance | | +| D.cs:40:14:40:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:40:14:40:31 | access to field trivialPropField | provenance | | +| D.cs:40:14:40:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:40:14:40:31 | access to field trivialPropField | provenance | | +| D.cs:41:14:41:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:14:9:14:11 | this : D [field trivialPropField] : Object | provenance | | +| D.cs:41:14:41:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:14:9:14:11 | this : D [field trivialPropField] : Object | provenance | | +| D.cs:41:14:41:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:41:14:41:26 | access to property ComplexProp | provenance | | +| D.cs:41:14:41:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:41:14:41:26 | access to property ComplexProp | provenance | | +| D.cs:43:13:43:49 | call to method Create : D [field trivialPropField] : Object | D.cs:45:14:45:14 | access to local variable d : D [field trivialPropField] : Object | provenance | | +| D.cs:43:13:43:49 | call to method Create : D [field trivialPropField] : Object | D.cs:45:14:45:14 | access to local variable d : D [field trivialPropField] : Object | provenance | | +| D.cs:43:13:43:49 | call to method Create : D [field trivialPropField] : Object | D.cs:46:14:46:14 | access to local variable d : D [field trivialPropField] : Object | provenance | | +| D.cs:43:13:43:49 | call to method Create : D [field trivialPropField] : Object | D.cs:46:14:46:14 | access to local variable d : D [field trivialPropField] : Object | provenance | | +| D.cs:43:13:43:49 | call to method Create : D [field trivialPropField] : Object | D.cs:47:14:47:14 | access to local variable d : D [field trivialPropField] : Object | provenance | | +| D.cs:43:13:43:49 | call to method Create : D [field trivialPropField] : Object | D.cs:47:14:47:14 | access to local variable d : D [field trivialPropField] : Object | provenance | | +| D.cs:43:32:43:48 | call to method Source : Object | D.cs:18:50:18:51 | o3 : Object | provenance | | +| D.cs:43:32:43:48 | call to method Source : Object | D.cs:18:50:18:51 | o3 : Object | provenance | | +| D.cs:43:32:43:48 | call to method Source : Object | D.cs:43:13:43:49 | call to method Create : D [field trivialPropField] : Object | provenance | | +| D.cs:43:32:43:48 | call to method Source : Object | D.cs:43:13:43:49 | call to method Create : D [field trivialPropField] : Object | provenance | | +| D.cs:45:14:45:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:8:9:8:11 | this : D [field trivialPropField] : Object | provenance | | +| D.cs:45:14:45:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:8:9:8:11 | this : D [field trivialPropField] : Object | provenance | | +| D.cs:45:14:45:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:45:14:45:26 | access to property TrivialProp | provenance | | +| D.cs:45:14:45:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:45:14:45:26 | access to property TrivialProp | provenance | | +| D.cs:46:14:46:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:46:14:46:31 | access to field trivialPropField | provenance | | +| D.cs:46:14:46:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:46:14:46:31 | access to field trivialPropField | provenance | | +| 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 | provenance | | +| 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 | provenance | | +| D.cs:47:14:47:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:47:14:47:26 | access to property ComplexProp | provenance | | +| D.cs:47:14:47:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:47:14:47:26 | access to property ComplexProp | provenance | | +| E.cs:8:29:8:29 | o : Object | E.cs:11:21:11:21 | access to parameter o : Object | provenance | | +| E.cs:8:29:8:29 | o : Object | E.cs:11:21:11:21 | access to parameter o : Object | provenance | | +| E.cs:11:9:11:11 | [post] access to local variable ret : S [field Field] : Object | E.cs:12:16:12:18 | access to local variable ret : S [field Field] : Object | provenance | | +| E.cs:11:9:11:11 | [post] access to local variable ret : S [field Field] : Object | E.cs:12:16:12:18 | access to local variable ret : S [field Field] : Object | provenance | | +| E.cs:11:21:11:21 | access to parameter o : Object | E.cs:11:9:11:11 | [post] access to local variable ret : S [field Field] : Object | provenance | | +| E.cs:11:21:11:21 | access to parameter o : Object | E.cs:11:9:11:11 | [post] access to local variable ret : S [field Field] : Object | provenance | | +| E.cs:22:17:22:33 | call to method Source : Object | E.cs:23:25:23:25 | access to local variable o : Object | provenance | | +| E.cs:22:17:22:33 | call to method Source : Object | E.cs:23:25:23:25 | access to local variable o : Object | provenance | | +| E.cs:23:17:23:26 | call to method CreateS : S [field Field] : Object | E.cs:24:14:24:14 | access to local variable s : S [field Field] : Object | provenance | | +| E.cs:23:17:23:26 | call to method CreateS : S [field Field] : Object | E.cs:24:14:24:14 | access to local variable s : S [field Field] : Object | provenance | | +| E.cs:23:25:23:25 | access to local variable o : Object | E.cs:8:29:8:29 | o : Object | provenance | | +| E.cs:23:25:23:25 | access to local variable o : Object | E.cs:8:29:8:29 | o : Object | provenance | | +| E.cs:23:25:23:25 | access to local variable o : Object | E.cs:23:17:23:26 | call to method CreateS : S [field Field] : Object | provenance | | +| E.cs:23:25:23:25 | access to local variable o : Object | E.cs:23:17:23:26 | call to method CreateS : S [field Field] : Object | provenance | | +| 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: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: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:21:54:37 | call to method Source : Object | E.cs:55:29:55:33 | access to local variable taint : Object | provenance | | +| E.cs:54:21:54:37 | call to method Source : Object | E.cs:55:29:55:33 | access to local variable taint : Object | provenance | | +| E.cs:55:23:55:26 | [post] access to local variable refs : RefS [field RefField] : Object | E.cs:57:14:57:17 | access to local variable refs : RefS [field RefField] : Object | provenance | | +| E.cs:55:23:55:26 | [post] access to local variable refs : RefS [field RefField] : Object | E.cs:57:14:57:17 | access to local variable refs : RefS [field RefField] : Object | provenance | | +| E.cs:55:29:55:33 | access to local variable taint : Object | E.cs:43:46:43:46 | o : Object | provenance | | +| E.cs:55:29:55:33 | access to local variable taint : Object | E.cs:43:46:43:46 | o : Object | provenance | | +| E.cs:55:29:55:33 | access to local variable taint : Object | E.cs:55:23:55:26 | [post] access to local variable refs : RefS [field RefField] : Object | provenance | | +| E.cs:55:29:55:33 | access to local variable taint : Object | E.cs:55:23:55:26 | [post] access to local variable refs : RefS [field RefField] : Object | provenance | | +| E.cs:57:14:57:17 | access to local variable refs : RefS [field RefField] : Object | E.cs:57:14:57:26 | access to field RefField | provenance | | +| E.cs:57:14:57:17 | access to local variable refs : RefS [field RefField] : Object | E.cs:57:14:57:26 | access to field RefField | provenance | | +| F.cs:6:28:6:29 | o1 : Object | F.cs:6:65:6:66 | access to parameter o1 : Object | provenance | | +| F.cs:6:28:6:29 | o1 : Object | F.cs:6:65:6:66 | access to parameter o1 : Object | provenance | | +| F.cs:6:39:6:40 | o2 : Object | F.cs:6:78:6:79 | access to parameter o2 : Object | provenance | | +| F.cs:6:39:6:40 | o2 : Object | F.cs:6:78:6:79 | access to parameter o2 : Object | provenance | | +| F.cs:6:54:6:81 | { ..., ... } : F [field Field1] : Object | F.cs:6:46:6:81 | object creation of type F : F [field Field1] : Object | provenance | | +| F.cs:6:54:6:81 | { ..., ... } : F [field Field1] : Object | F.cs:6:46:6:81 | object creation of type F : F [field Field1] : Object | provenance | | +| F.cs:6:54:6:81 | { ..., ... } : F [field Field2] : Object | F.cs:6:46:6:81 | object creation of type F : F [field Field2] : Object | provenance | | +| F.cs:6:54:6:81 | { ..., ... } : F [field Field2] : Object | F.cs:6:46:6:81 | object creation of type F : F [field Field2] : Object | provenance | | +| F.cs:6:65:6:66 | access to parameter o1 : Object | F.cs:6:54:6:81 | { ..., ... } : F [field Field1] : Object | provenance | | +| F.cs:6:65:6:66 | access to parameter o1 : Object | F.cs:6:54:6:81 | { ..., ... } : F [field Field1] : Object | provenance | | +| F.cs:6:78:6:79 | access to parameter o2 : Object | F.cs:6:54:6:81 | { ..., ... } : F [field Field2] : Object | provenance | | +| F.cs:6:78:6:79 | access to parameter o2 : Object | F.cs:6:54:6:81 | { ..., ... } : F [field Field2] : Object | provenance | | +| F.cs:10:17:10:33 | call to method Source : Object | F.cs:11:24:11:24 | access to local variable o : Object | provenance | | +| F.cs:10:17:10:33 | call to method Source : Object | F.cs:11:24:11:24 | access to local variable o : Object | provenance | | +| F.cs:11:17:11:31 | call to method Create : F [field Field1] : Object | F.cs:12:14:12:14 | access to local variable f : F [field Field1] : Object | provenance | | +| F.cs:11:17:11:31 | call to method Create : F [field Field1] : Object | F.cs:12:14:12:14 | access to local variable f : F [field Field1] : Object | provenance | | +| F.cs:11:24:11:24 | access to local variable o : Object | F.cs:6:28:6:29 | o1 : Object | provenance | | +| F.cs:11:24:11:24 | access to local variable o : Object | F.cs:6:28:6:29 | o1 : Object | provenance | | +| F.cs:11:24:11:24 | access to local variable o : Object | F.cs:11:17:11:31 | call to method Create : F [field Field1] : Object | provenance | | +| F.cs:11:24:11:24 | access to local variable o : Object | F.cs:11:17:11:31 | call to method Create : F [field Field1] : Object | provenance | | +| F.cs:12:14:12:14 | access to local variable f : F [field Field1] : Object | F.cs:12:14:12:21 | access to field Field1 | provenance | | +| F.cs:12:14:12:14 | access to local variable f : F [field Field1] : Object | F.cs:12:14:12:21 | access to field Field1 | provenance | | +| F.cs:15:13:15:43 | call to method Create : F [field Field2] : Object | F.cs:17:14:17:14 | access to local variable f : F [field Field2] : Object | provenance | | +| F.cs:15:13:15:43 | call to method Create : F [field Field2] : Object | F.cs:17:14:17:14 | access to local variable f : F [field Field2] : Object | provenance | | +| F.cs:15:26:15:42 | call to method Source : Object | F.cs:6:39:6:40 | o2 : Object | provenance | | +| F.cs:15:26:15:42 | call to method Source : Object | F.cs:6:39:6:40 | o2 : Object | provenance | | +| F.cs:15:26:15:42 | call to method Source : Object | F.cs:15:13:15:43 | call to method Create : F [field Field2] : Object | provenance | | +| F.cs:15:26:15:42 | call to method Source : Object | F.cs:15:13:15:43 | call to method Create : F [field Field2] : Object | provenance | | +| F.cs:17:14:17:14 | access to local variable f : F [field Field2] : Object | F.cs:17:14:17:21 | access to field Field2 | provenance | | +| F.cs:17:14:17:14 | access to local variable f : F [field Field2] : Object | F.cs:17:14:17:21 | access to field Field2 | provenance | | +| F.cs:19:21:19:50 | { ..., ... } : F [field Field1] : Object | F.cs:20:14:20:14 | access to local variable f : F [field Field1] : Object | provenance | | +| F.cs:19:21:19:50 | { ..., ... } : F [field Field1] : Object | F.cs:20:14:20:14 | access to local variable f : F [field Field1] : Object | provenance | | +| F.cs:19:32:19:48 | call to method Source : Object | F.cs:19:21:19:50 | { ..., ... } : F [field Field1] : Object | provenance | | +| F.cs:19:32:19:48 | call to method Source : Object | F.cs:19:21:19:50 | { ..., ... } : F [field Field1] : Object | provenance | | +| F.cs:20:14:20:14 | access to local variable f : F [field Field1] : Object | F.cs:20:14:20:21 | access to field Field1 | provenance | | +| F.cs:20:14:20:14 | access to local variable f : F [field Field1] : Object | F.cs:20:14:20:21 | access to field Field1 | provenance | | +| F.cs:23:21:23:50 | { ..., ... } : F [field Field2] : Object | F.cs:25:14:25:14 | access to local variable f : F [field Field2] : Object | provenance | | +| F.cs:23:21:23:50 | { ..., ... } : F [field Field2] : Object | F.cs:25:14:25:14 | access to local variable f : F [field Field2] : Object | provenance | | +| F.cs:23:32:23:48 | call to method Source : Object | F.cs:23:21:23:50 | { ..., ... } : F [field Field2] : Object | provenance | | +| F.cs:23:32:23:48 | call to method Source : Object | F.cs:23:21:23:50 | { ..., ... } : F [field Field2] : Object | provenance | | +| F.cs:25:14:25:14 | access to local variable f : F [field Field2] : Object | F.cs:25:14:25:21 | access to field Field2 | provenance | | +| F.cs:25:14:25:14 | access to local variable f : F [field Field2] : Object | F.cs:25:14:25:21 | access to field Field2 | provenance | | +| F.cs:30:17:30:33 | call to method Source : Object | F.cs:32:27:32:27 | access to local variable o : Object | provenance | | +| F.cs:30:17:30:33 | call to method Source : Object | F.cs:32:27:32:27 | access to local variable o : Object | provenance | | +| F.cs:32:17:32:40 | { ..., ... } : <>__AnonType0 [property X] : Object | F.cs:33:14:33:14 | access to local variable a : <>__AnonType0 [property X] : Object | provenance | | +| F.cs:32:17:32:40 | { ..., ... } : <>__AnonType0 [property X] : Object | F.cs:33:14:33:14 | access to local variable a : <>__AnonType0 [property X] : Object | provenance | | +| F.cs:32:27:32:27 | access to local variable o : Object | F.cs:32:17:32:40 | { ..., ... } : <>__AnonType0 [property X] : Object | provenance | | +| F.cs:32:27:32:27 | access to local variable o : Object | F.cs:32:17:32:40 | { ..., ... } : <>__AnonType0 [property X] : Object | provenance | | +| F.cs:33:14:33:14 | access to local variable a : <>__AnonType0 [property X] : Object | F.cs:33:14:33:16 | access to property X | provenance | | +| F.cs:33:14:33:14 | access to local variable a : <>__AnonType0 [property X] : Object | F.cs:33:14:33:16 | access to property X | provenance | | +| G.cs:7:18:7:32 | call to method Source : Elem | G.cs:9:23:9:23 | access to local variable e : Elem | provenance | | +| G.cs:7:18:7:32 | call to method Source : Elem | G.cs:9:23:9:23 | access to local variable e : Elem | provenance | | +| G.cs:9:9:9:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | G.cs:10:18:10:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | provenance | | +| G.cs:9:9:9:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | G.cs:10:18:10:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | provenance | | +| G.cs:9:9:9:14 | [post] access to field Box1 : Box1 [field Elem] : Elem | G.cs:9:9:9:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | provenance | | +| G.cs:9:9:9:14 | [post] access to field Box1 : Box1 [field Elem] : Elem | G.cs:9:9:9:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | provenance | | +| G.cs:9:23:9:23 | access to local variable e : Elem | G.cs:9:9:9:14 | [post] access to field Box1 : Box1 [field Elem] : Elem | provenance | | +| G.cs:9:23:9:23 | access to local variable e : Elem | G.cs:9:9:9:14 | [post] access to field Box1 : Box1 [field Elem] : Elem | provenance | | +| G.cs:10:18:10: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 | | +| G.cs:10:18:10: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 | | +| G.cs:15:18:15:32 | call to method Source : Elem | G.cs:17:24:17:24 | access to local variable e : Elem | provenance | | +| G.cs:15:18:15:32 | call to method Source : Elem | G.cs:17:24:17:24 | access to local variable e : Elem | provenance | | +| G.cs:17:9:17:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | G.cs:18:18:18:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | provenance | | +| G.cs:17:9:17:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | G.cs:18:18:18:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | provenance | | +| G.cs:17:9:17:14 | [post] access to field Box1 : Box1 [field Elem] : Elem | G.cs:17:9:17:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | provenance | | +| G.cs:17:9:17:14 | [post] access to field Box1 : Box1 [field Elem] : Elem | G.cs:17:9:17:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | provenance | | +| G.cs:17:24:17:24 | access to local variable e : Elem | G.cs:17:9:17:14 | [post] access to field Box1 : Box1 [field Elem] : Elem | provenance | | +| G.cs:17:24:17:24 | access to local variable e : Elem | G.cs:17:9:17:14 | [post] access to field Box1 : Box1 [field Elem] : Elem | provenance | | +| G.cs:17:24:17:24 | access to local variable e : Elem | G.cs:64:34:64:34 | e : Elem | provenance | | +| G.cs:17:24:17:24 | access to local variable e : Elem | G.cs:64:34:64:34 | e : Elem | provenance | | +| G.cs:18:18:18: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 | | +| G.cs:18:18:18: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 | | +| G.cs:23:18:23:32 | call to method Source : Elem | G.cs:25:28:25:28 | access to local variable e : Elem | provenance | | +| G.cs:23:18:23:32 | call to method Source : Elem | G.cs:25:28:25:28 | 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: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 | | +| 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 | | +| G.cs:31:18:31:32 | call to method Source : Elem | G.cs:33:29:33:29 | access to local variable e : Elem | provenance | | +| G.cs:31:18:31:32 | call to method Source : Elem | G.cs:33:29:33:29 | 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: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 | | +| G.cs:33:29:33:29 | access to local variable e : Elem | G.cs:64:34:64:34 | e : Elem | provenance | | +| G.cs:34:18:34: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 | | +| G.cs:34:18:34: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 | | +| G.cs:37:38:37:39 | b2 : Box2 [field Box1, field Elem] : Elem | G.cs:39:14:39:15 | access to parameter b2 : Box2 [field Box1, field Elem] : Elem | provenance | | +| G.cs:37:38:37:39 | b2 : Box2 [field Box1, field Elem] : Elem | G.cs:39:14:39:15 | access to parameter b2 : Box2 [field Box1, field Elem] : Elem | provenance | | +| G.cs:39:14:39:15 | access to parameter b2 : Box2 [field Box1, field Elem] : Elem | G.cs:39:14:39:25 | call to method GetBox1 : Box1 [field Elem] : Elem | provenance | | +| G.cs:39:14:39:15 | access to parameter b2 : Box2 [field Box1, field Elem] : Elem | G.cs:39:14:39:25 | call to method GetBox1 : Box1 [field Elem] : Elem | provenance | | +| 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 | provenance | | +| 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 | provenance | | +| G.cs:39:14:39:25 | call to method GetBox1 : Box1 [field Elem] : Elem | G.cs:39:14:39:35 | call to method GetElem | provenance | | +| G.cs:39:14:39:25 | call to method GetBox1 : Box1 [field Elem] : Elem | G.cs:39:14:39:35 | call to method GetElem | provenance | | +| 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 | provenance | | +| 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 | provenance | | +| G.cs:44:18:44:32 | call to method Source : Elem | G.cs:46:30:46:30 | access to local variable e : Elem | provenance | | +| G.cs:44:18:44:32 | call to method Source : Elem | G.cs:46:30:46:30 | access to local variable e : Elem | provenance | | +| G.cs:46:9:46:16 | [post] access to field boxfield : Box2 [field Box1, field Elem] : Elem | G.cs:46:9:46:16 | [post] this access : G [field boxfield, field Box1, field Elem] : Elem | provenance | | +| G.cs:46:9:46:16 | [post] access to field boxfield : Box2 [field Box1, field Elem] : Elem | G.cs:46:9:46:16 | [post] this access : G [field boxfield, field Box1, field Elem] : Elem | provenance | | +| G.cs:46:9:46:16 | [post] this access : G [field boxfield, field Box1, field Elem] : Elem | G.cs:47:9:47:13 | this access : G [field boxfield, field Box1, field Elem] : Elem | provenance | | +| G.cs:46:9:46:16 | [post] this access : G [field boxfield, field Box1, field Elem] : Elem | G.cs:47:9:47:13 | this access : G [field boxfield, field Box1, field Elem] : Elem | provenance | | +| G.cs:46:9:46:21 | [post] access to field Box1 : Box1 [field Elem] : Elem | G.cs:46:9:46:16 | [post] access to field boxfield : Box2 [field Box1, field Elem] : Elem | provenance | | +| G.cs:46:9:46:21 | [post] access to field Box1 : Box1 [field Elem] : Elem | G.cs:46:9:46:16 | [post] access to field boxfield : Box2 [field Box1, field Elem] : Elem | provenance | | +| G.cs:46:30:46:30 | access to local variable e : Elem | G.cs:46:9:46:21 | [post] access to field Box1 : Box1 [field Elem] : Elem | provenance | | +| G.cs:46:30:46:30 | access to local variable e : Elem | G.cs:46:9:46:21 | [post] access to field Box1 : Box1 [field Elem] : Elem | provenance | | +| G.cs:47:9:47:13 | this access : G [field boxfield, field Box1, field Elem] : Elem | G.cs:50:18:50:20 | this : G [field boxfield, field Box1, field Elem] : Elem | provenance | | +| G.cs:47:9:47:13 | this access : G [field boxfield, field Box1, field Elem] : Elem | G.cs:50:18:50:20 | this : G [field boxfield, field Box1, field Elem] : Elem | provenance | | +| G.cs:50:18:50:20 | this : G [field boxfield, field Box1, field Elem] : Elem | G.cs:52:14:52:21 | this access : G [field boxfield, field Box1, field Elem] : Elem | provenance | | +| G.cs:50:18:50:20 | this : G [field boxfield, field Box1, field Elem] : Elem | G.cs:52:14:52:21 | this access : G [field boxfield, field Box1, field Elem] : Elem | provenance | | +| G.cs:52:14:52:21 | access to field boxfield : Box2 [field Box1, field Elem] : Elem | G.cs:52:14:52:26 | access to field Box1 : Box1 [field Elem] : Elem | provenance | | +| G.cs:52:14:52:21 | access to field boxfield : Box2 [field Box1, field Elem] : Elem | G.cs:52:14:52:26 | access to field Box1 : Box1 [field Elem] : Elem | provenance | | +| G.cs:52:14:52:21 | this access : G [field boxfield, field Box1, field Elem] : Elem | G.cs:52:14:52:21 | access to field boxfield : Box2 [field Box1, field Elem] : Elem | provenance | | +| G.cs:52:14:52:21 | this access : G [field boxfield, field Box1, field Elem] : Elem | G.cs:52:14:52:21 | access to field boxfield : Box2 [field Box1, field Elem] : Elem | provenance | | +| G.cs:52:14:52:26 | access to field Box1 : Box1 [field Elem] : Elem | G.cs:52:14:52:31 | access to field Elem | provenance | | +| G.cs:52:14:52:26 | access to field Box1 : Box1 [field Elem] : Elem | G.cs:52:14:52:31 | access to field Elem | provenance | | +| G.cs:63:21:63:27 | this : Box1 [field Elem] : Elem | G.cs:63:34:63:37 | this access : Box1 [field Elem] : Elem | provenance | | +| G.cs:63:21:63:27 | this : Box1 [field Elem] : Elem | G.cs:63:34:63:37 | this access : Box1 [field Elem] : Elem | provenance | | +| 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: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: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 | 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 | | +| 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 | | +| 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 | | +| H.cs:16:22:16:22 | access to parameter a : A [field FieldA] : Object | H.cs:16:22:16:29 | access to field FieldA : Object | provenance | | +| H.cs:16:22:16:22 | access to parameter a : A [field FieldA] : Object | H.cs:16:22:16:29 | access to field FieldA : Object | provenance | | +| H.cs:16:22:16:29 | access to field FieldA : Object | H.cs:16:9:16:11 | [post] access to local variable ret : A [field FieldA] : Object | provenance | | +| H.cs:16:22:16:29 | access to field FieldA : Object | H.cs:16:9:16:11 | [post] access to local variable ret : A [field FieldA] : Object | provenance | | +| H.cs:23:9:23:9 | [post] access to local variable a : A [field FieldA] : Object | H.cs:24:27:24:27 | access to local variable a : A [field FieldA] : Object | provenance | | +| H.cs:23:9:23:9 | [post] access to local variable a : A [field FieldA] : Object | H.cs:24:27:24:27 | access to local variable a : A [field FieldA] : Object | provenance | | +| H.cs:23:20:23:36 | call to method Source : Object | H.cs:23:9:23:9 | [post] access to local variable a : A [field FieldA] : Object | provenance | | +| H.cs:23:20:23:36 | call to method Source : Object | H.cs:23:9:23:9 | [post] access to local variable a : A [field FieldA] : Object | provenance | | +| H.cs:24:21:24:28 | call to method Clone : A [field FieldA] : Object | H.cs:25:14:25:18 | access to local variable clone : A [field FieldA] : Object | provenance | | +| H.cs:24:21:24:28 | call to method Clone : A [field FieldA] : Object | H.cs:25:14:25:18 | access to local variable clone : A [field FieldA] : Object | provenance | | +| 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 | provenance | | +| 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 | provenance | | +| H.cs:24:27:24:27 | access to local variable a : A [field FieldA] : Object | H.cs:24:21:24:28 | call to method Clone : A [field FieldA] : Object | provenance | | +| H.cs:24:27:24:27 | access to local variable a : A [field FieldA] : Object | H.cs:24:21:24:28 | call to method Clone : A [field FieldA] : Object | provenance | | +| H.cs:25:14:25:18 | access to local variable clone : A [field FieldA] : Object | H.cs:25:14:25:25 | access to field FieldA | provenance | | +| H.cs:25:14:25:18 | access to local variable clone : A [field FieldA] : Object | H.cs:25:14:25:25 | access to field FieldA | provenance | | +| H.cs:33:19:33:19 | a : A [field FieldA] : A | H.cs:36:20:36:20 | access to parameter a : A [field FieldA] : A | provenance | | +| H.cs:33:19:33:19 | a : A [field FieldA] : A | H.cs:36:20:36:20 | access to parameter a : A [field FieldA] : A | provenance | | +| H.cs:33:19:33:19 | a : A [field FieldA] : Object | H.cs:36:20:36:20 | access to parameter a : A [field FieldA] : Object | provenance | | +| H.cs:33:19:33:19 | a : A [field FieldA] : Object | H.cs:36:20:36:20 | access to parameter a : A [field FieldA] : Object | provenance | | +| H.cs:36:9:36:9 | [post] access to local variable b : B [field FieldB] : A | H.cs:37:16:37:16 | access to local variable b : B [field FieldB] : A | provenance | | +| H.cs:36:9:36:9 | [post] access to local variable b : B [field FieldB] : A | H.cs:37:16:37:16 | access to local variable b : B [field FieldB] : A | provenance | | +| H.cs:36:9:36:9 | [post] access to local variable b : B [field FieldB] : Object | H.cs:37:16:37:16 | access to local variable b : B [field FieldB] : Object | provenance | | +| H.cs:36:9:36:9 | [post] access to local variable b : B [field FieldB] : Object | H.cs:37:16:37:16 | access to local variable b : B [field FieldB] : Object | provenance | | +| H.cs:36:20:36:20 | access to parameter a : A [field FieldA] : A | H.cs:36:20:36:27 | access to field FieldA : A | provenance | | +| H.cs:36:20:36:20 | access to parameter a : A [field FieldA] : A | H.cs:36:20:36:27 | access to field FieldA : A | provenance | | +| H.cs:36:20:36:20 | access to parameter a : A [field FieldA] : Object | H.cs:36:20:36:27 | access to field FieldA : Object | provenance | | +| H.cs:36:20:36:20 | access to parameter a : A [field FieldA] : Object | H.cs:36:20:36:27 | access to field FieldA : Object | provenance | | +| H.cs:36:20:36:27 | access to field FieldA : A | H.cs:36:9:36:9 | [post] access to local variable b : B [field FieldB] : A | provenance | | +| H.cs:36:20:36:27 | access to field FieldA : A | H.cs:36:9:36:9 | [post] access to local variable b : B [field FieldB] : A | provenance | | +| H.cs:36:20:36:27 | access to field FieldA : Object | H.cs:36:9:36:9 | [post] access to local variable b : B [field FieldB] : Object | provenance | | +| H.cs:36:20:36:27 | access to field FieldA : Object | H.cs:36:9:36:9 | [post] access to local variable b : B [field FieldB] : Object | provenance | | +| H.cs:43:9:43:9 | [post] access to local variable a : A [field FieldA] : Object | H.cs:44:27:44:27 | access to local variable a : A [field FieldA] : Object | provenance | | +| H.cs:43:9:43:9 | [post] access to local variable a : A [field FieldA] : Object | H.cs:44:27:44:27 | access to local variable a : A [field FieldA] : Object | provenance | | +| H.cs:43:20:43:36 | call to method Source : Object | H.cs:43:9:43:9 | [post] access to local variable a : A [field FieldA] : Object | provenance | | +| H.cs:43:20:43:36 | call to method Source : Object | H.cs:43:9:43:9 | [post] access to local variable a : A [field FieldA] : Object | provenance | | +| H.cs:44:17:44:28 | call to method Transform : B [field FieldB] : Object | H.cs:45:14:45:14 | access to local variable b : B [field FieldB] : Object | provenance | | +| H.cs:44:17:44:28 | call to method Transform : B [field FieldB] : Object | H.cs:45:14:45:14 | access to local variable b : B [field FieldB] : Object | provenance | | +| 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 | provenance | | +| 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 | provenance | | +| H.cs:44:27:44:27 | access to local variable a : A [field FieldA] : Object | H.cs:44:17:44:28 | call to method Transform : B [field FieldB] : Object | provenance | | +| H.cs:44:27:44:27 | access to local variable a : A [field FieldA] : Object | H.cs:44:17:44:28 | call to method Transform : B [field FieldB] : Object | provenance | | +| 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: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: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 | | +| 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 | | +| H.cs:63:9:63:9 | [post] access to local variable a : A [field FieldA] : Object | H.cs:64:22:64:22 | access to local variable a : A [field FieldA] : Object | provenance | | +| H.cs:63:9:63:9 | [post] access to local variable a : A [field FieldA] : Object | H.cs:64:22:64:22 | access to local variable a : A [field FieldA] : Object | provenance | | +| H.cs:63:20:63:36 | call to method Source : Object | H.cs:63:9:63:9 | [post] access to local variable a : A [field FieldA] : Object | provenance | | +| H.cs:63:20:63:36 | call to method Source : Object | H.cs:63:9:63:9 | [post] access to local variable a : A [field FieldA] : Object | provenance | | +| 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 | provenance | | +| 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 | provenance | | +| H.cs:64:22:64:22 | access to local variable a : A [field FieldA] : Object | H.cs:64:25:64:26 | [post] access to local variable b1 : B [field FieldB] : Object | provenance | | +| H.cs:64:22:64:22 | access to local variable a : A [field FieldA] : Object | H.cs:64:25:64:26 | [post] access to local variable b1 : B [field FieldB] : Object | provenance | | +| H.cs:64:25:64:26 | [post] access to local variable b1 : B [field FieldB] : Object | H.cs:65:14:65:15 | access to local variable b1 : B [field FieldB] : Object | provenance | | +| H.cs:64:25:64:26 | [post] access to local variable b1 : B [field FieldB] : Object | H.cs:65:14:65:15 | access to local variable b1 : B [field FieldB] : Object | provenance | | +| 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: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: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 | | +| 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 | | +| 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: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: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 | | +| H.cs:88:20:88:36 | call to method Source : Object | H.cs:77:30:77:30 | o : Object | provenance | | +| H.cs:88:20:88:36 | call to method Source : Object | H.cs:88:17:88:17 | [post] access to local variable a : A [field FieldA] : Object | provenance | | +| H.cs:88:20:88:36 | call to method Source : Object | H.cs:88:17:88:17 | [post] access to local variable a : A [field FieldA] : Object | provenance | | +| H.cs:88:20:88:36 | call to method Source : Object | H.cs:88:39:88:40 | [post] access to local variable b1 : B [field FieldB] : Object | provenance | | +| H.cs:88:20:88:36 | call to method Source : Object | H.cs:88:39:88:40 | [post] access to local variable b1 : B [field FieldB] : Object | provenance | | +| H.cs:88:39:88:40 | [post] access to local variable b1 : B [field FieldB] : Object | H.cs:90:14:90:15 | access to local variable b1 : B [field FieldB] : Object | provenance | | +| H.cs:88:39:88:40 | [post] access to local variable b1 : B [field FieldB] : Object | H.cs:90:14:90:15 | access to local variable b1 : B [field FieldB] : Object | provenance | | +| H.cs:89:14:89:14 | access to local variable a : A [field FieldA] : Object | H.cs:89:14:89:21 | access to field FieldA | provenance | | +| H.cs:89:14:89:14 | access to local variable a : A [field FieldA] : Object | H.cs:89:14:89:21 | access to field FieldA | provenance | | +| H.cs:90:14:90:15 | access to local variable b1 : B [field FieldB] : Object | H.cs:90:14:90:22 | access to field FieldB | provenance | | +| H.cs:90:14:90:15 | access to local variable b1 : B [field FieldB] : Object | H.cs:90:14:90:22 | access to field FieldB | provenance | | +| H.cs:102:23:102:23 | a : A [field FieldA] : Object | H.cs:105:23:105:23 | access to parameter a : A [field FieldA] : Object | provenance | | +| H.cs:102:23:102:23 | a : A [field FieldA] : Object | H.cs:105:23:105:23 | access to parameter a : A [field FieldA] : Object | provenance | | +| H.cs:105:9:105:12 | [post] access to local variable temp : B [field FieldB, field FieldA] : Object | H.cs:106:29:106:32 | access to local variable temp : B [field FieldB, field FieldA] : Object | provenance | | +| H.cs:105:9:105:12 | [post] access to local variable temp : B [field FieldB, field FieldA] : Object | H.cs:106:29:106:32 | access to local variable temp : B [field FieldB, field FieldA] : Object | provenance | | +| H.cs:105:23:105:23 | access to parameter a : A [field FieldA] : Object | H.cs:105:9:105:12 | [post] access to local variable temp : B [field FieldB, field FieldA] : Object | provenance | | +| H.cs:105:23:105:23 | access to parameter a : A [field FieldA] : Object | H.cs:105:9:105:12 | [post] access to local variable temp : B [field FieldB, field FieldA] : Object | provenance | | +| H.cs:106:26:106:39 | (...) ... : A [field FieldA] : Object | H.cs:33:19:33:19 | a : A [field FieldA] : Object | provenance | | +| H.cs:106:26:106:39 | (...) ... : A [field FieldA] : Object | H.cs:33:19:33:19 | a : A [field FieldA] : Object | provenance | | +| H.cs:106:26:106:39 | (...) ... : A [field FieldA] : Object | H.cs:106:16:106:40 | call to method Transform : B [field FieldB] : Object | provenance | | +| H.cs:106:26:106:39 | (...) ... : A [field FieldA] : Object | H.cs:106:16:106:40 | call to method Transform : B [field FieldB] : Object | provenance | | +| H.cs:106:29:106:32 | access to local variable temp : B [field FieldB, field FieldA] : Object | H.cs:106:29:106:39 | access to field FieldB : A [field FieldA] : Object | provenance | | +| H.cs:106:29:106:32 | access to local variable temp : B [field FieldB, field FieldA] : Object | H.cs:106:29:106:39 | access to field FieldB : A [field FieldA] : Object | provenance | | +| H.cs:106:29:106:39 | access to field FieldB : A [field FieldA] : Object | H.cs:106:26:106:39 | (...) ... : A [field FieldA] : Object | provenance | | +| H.cs:106:29:106:39 | access to field FieldB : A [field FieldA] : Object | H.cs:106:26:106:39 | (...) ... : A [field FieldA] : Object | provenance | | +| H.cs:112:9:112:9 | [post] access to local variable a : A [field FieldA] : Object | H.cs:113:31:113:31 | access to local variable a : A [field FieldA] : Object | provenance | | +| H.cs:112:9:112:9 | [post] access to local variable a : A [field FieldA] : Object | H.cs:113:31:113:31 | access to local variable a : A [field FieldA] : Object | provenance | | +| H.cs:112:20:112:36 | call to method Source : Object | H.cs:112:9:112:9 | [post] access to local variable a : A [field FieldA] : Object | provenance | | +| H.cs:112:20:112:36 | call to method Source : Object | H.cs:112:9:112:9 | [post] access to local variable a : A [field FieldA] : Object | provenance | | +| H.cs:113:17:113:32 | call to method TransformWrap : B [field FieldB] : Object | H.cs:114:14:114:14 | access to local variable b : B [field FieldB] : Object | provenance | | +| H.cs:113:17:113:32 | call to method TransformWrap : B [field FieldB] : Object | H.cs:114:14:114:14 | access to local variable b : B [field FieldB] : Object | provenance | | +| 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 | provenance | | +| 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 | provenance | | +| H.cs:113:31:113:31 | access to local variable a : A [field FieldA] : Object | H.cs:113:17:113:32 | call to method TransformWrap : B [field FieldB] : Object | provenance | | +| H.cs:113:31:113:31 | access to local variable a : A [field FieldA] : Object | H.cs:113:17:113:32 | call to method TransformWrap : B [field FieldB] : Object | provenance | | +| H.cs:114:14:114:14 | access to local variable b : B [field FieldB] : Object | H.cs:114:14:114:21 | access to field FieldB | provenance | | +| H.cs:114:14:114:14 | access to local variable b : B [field FieldB] : Object | H.cs:114:14:114:21 | access to field FieldB | provenance | | +| H.cs:122:18:122:18 | a : A [field FieldA] : Object | H.cs:124:26:124:26 | access to parameter a : A [field FieldA] : Object | provenance | | +| H.cs:122:18:122:18 | a : A [field FieldA] : Object | H.cs:124:26:124:26 | access to parameter a : A [field FieldA] : Object | provenance | | +| H.cs:124:16:124:27 | call to method Transform : B [field FieldB] : Object | H.cs:124:16:124:34 | access to field FieldB : Object | provenance | | +| H.cs:124:16:124:27 | call to method Transform : B [field FieldB] : Object | H.cs:124:16:124:34 | access to field FieldB : Object | provenance | | +| H.cs:124:26:124:26 | access to parameter a : A [field FieldA] : Object | H.cs:33:19:33:19 | a : A [field FieldA] : Object | provenance | | +| H.cs:124:26:124:26 | access to parameter a : A [field FieldA] : Object | H.cs:33:19:33:19 | a : A [field FieldA] : Object | provenance | | +| H.cs:124:26:124:26 | access to parameter a : A [field FieldA] : Object | H.cs:124:16:124:27 | call to method Transform : B [field FieldB] : Object | provenance | | +| H.cs:124:26:124:26 | access to parameter a : A [field FieldA] : Object | H.cs:124:16:124:27 | call to method Transform : B [field FieldB] : Object | provenance | | +| H.cs:130:9:130:9 | [post] access to local variable a : A [field FieldA] : Object | H.cs:131:18:131:18 | access to local variable a : A [field FieldA] : Object | provenance | | +| H.cs:130:9:130:9 | [post] access to local variable a : A [field FieldA] : Object | H.cs:131:18:131:18 | access to local variable a : A [field FieldA] : Object | provenance | | +| H.cs:130:20:130:36 | call to method Source : Object | H.cs:130:9:130:9 | [post] access to local variable a : A [field FieldA] : Object | provenance | | +| H.cs:130:20:130:36 | call to method Source : Object | H.cs:130:9:130:9 | [post] access to local variable a : A [field FieldA] : Object | provenance | | +| H.cs:131:18:131:18 | access to local variable a : A [field FieldA] : Object | H.cs:122:18:122:18 | a : A [field FieldA] : Object | provenance | | +| H.cs:131:18:131:18 | access to local variable a : A [field FieldA] : Object | H.cs:122:18:122:18 | a : A [field FieldA] : Object | provenance | | +| H.cs:131:18:131:18 | access to local variable a : A [field FieldA] : Object | H.cs:131:14:131:19 | call to method Get | provenance | | +| H.cs:131:18:131:18 | access to local variable a : A [field FieldA] : Object | H.cs:131:14:131:19 | call to method Get | provenance | | +| H.cs:138:27:138:27 | o : A | H.cs:141:20:141:25 | ... as ... : A | provenance | | +| H.cs:138:27:138:27 | o : A | H.cs:141:20:141:25 | ... as ... : A | provenance | | +| H.cs:141:9:141:9 | [post] access to local variable a : A [field FieldA] : A | H.cs:142:26:142:26 | access to local variable a : A [field FieldA] : A | provenance | | +| H.cs:141:9:141:9 | [post] access to local variable a : A [field FieldA] : A | H.cs:142:26:142:26 | access to local variable a : A [field FieldA] : A | provenance | | +| H.cs:141:20:141:25 | ... as ... : A | H.cs:141:9:141:9 | [post] access to local variable a : A [field FieldA] : A | provenance | | +| H.cs:141:20:141:25 | ... as ... : A | H.cs:141:9:141:9 | [post] access to local variable a : A [field FieldA] : A | provenance | | +| H.cs:142:16:142:27 | call to method Transform : B [field FieldB] : A | H.cs:142:16:142:34 | access to field FieldB : A | provenance | | +| H.cs:142:16:142:27 | call to method Transform : B [field FieldB] : A | H.cs:142:16:142:34 | access to field FieldB : A | provenance | | +| 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 | provenance | | +| 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 | provenance | | +| H.cs:142:26:142:26 | access to local variable a : A [field FieldA] : A | H.cs:142:16:142:27 | call to method Transform : B [field FieldB] : A | provenance | | +| H.cs:142:26:142:26 | access to local variable a : A [field FieldA] : A | H.cs:142:16:142:27 | call to method Transform : B [field FieldB] : A | provenance | | +| H.cs:147:17:147:39 | call to method Through : A | H.cs:148:14:148:14 | access to local variable a | provenance | | +| H.cs:147:17:147:39 | call to method Through : A | H.cs:148:14:148:14 | access to local variable a | provenance | | +| 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: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: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:17:155:30 | call to method Source : B | H.cs:156:9:156:9 | access to local variable b : B | provenance | | +| H.cs:155:17:155:30 | call to method Source : B | H.cs:156:9:156:9 | access to local variable b : B | provenance | | +| H.cs:156:9:156:9 | [post] access to local variable b : B [field FieldB] : Object | H.cs:157:20:157:20 | access to local variable b : B [field FieldB] : Object | provenance | | +| H.cs:156:9:156:9 | [post] access to local variable b : B [field FieldB] : Object | H.cs:157:20:157:20 | access to local variable b : B [field FieldB] : Object | provenance | | +| 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: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] : B | H.cs:164:19:164:19 | [post] access to local variable a : A [field FieldA] : B | provenance | | +| H.cs:157:9:157:9 | [post] access to parameter a : A [field FieldA] : B | H.cs:164:19:164:19 | [post] access to local variable 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 | 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 | | +| 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 | | +| H.cs:163:17:163:35 | call to method Source : Object | H.cs:164:22:164:22 | access to local variable o : Object | provenance | | +| H.cs:163:17:163:35 | call to method Source : Object | H.cs:164:22:164:22 | access to local variable o : Object | provenance | | +| H.cs:164:19:164:19 | [post] access to local variable a : A [field FieldA, field FieldB] : Object | H.cs:165:20:165:20 | access to local variable a : A [field FieldA, field FieldB] : Object | provenance | | +| H.cs:164:19:164:19 | [post] access to local variable a : A [field FieldA, field FieldB] : Object | H.cs:165:20:165:20 | access to local variable a : A [field FieldA, field FieldB] : Object | provenance | | +| H.cs:164:19:164:19 | [post] access to local variable a : A [field FieldA] : B | H.cs:165:20:165:20 | access to local variable a : A [field FieldA] : B | provenance | | +| H.cs:164:19:164:19 | [post] access to local variable a : A [field FieldA] : B | H.cs:165:20:165:20 | access to local variable a : A [field FieldA] : B | provenance | | +| H.cs:164:22:164:22 | access to local variable o : Object | H.cs:153:32:153:32 | o : Object | provenance | | +| H.cs:164:22:164:22 | access to local variable o : Object | H.cs:153:32:153:32 | o : Object | provenance | | +| H.cs:164:22:164:22 | access to local variable o : Object | H.cs:164:19:164:19 | [post] access to local variable a : A [field FieldA, field FieldB] : Object | provenance | | +| H.cs:164:22:164:22 | access to local variable o : Object | H.cs:164:19:164:19 | [post] access to local variable a : A [field FieldA, field FieldB] : Object | provenance | | +| H.cs:165:17:165:27 | (...) ... : B | H.cs:166:14:166:14 | access to local variable b | provenance | | +| H.cs:165:17:165:27 | (...) ... : B | H.cs:166:14:166:14 | access to local variable b | provenance | | +| H.cs:165:17:165:27 | (...) ... : B [field FieldB] : Object | H.cs:167:14:167:14 | access to local variable b : B [field FieldB] : Object | provenance | | +| H.cs:165:17:165:27 | (...) ... : B [field FieldB] : Object | H.cs:167:14:167:14 | access to local variable b : B [field FieldB] : Object | provenance | | +| H.cs:165:20:165:20 | access to local variable a : A [field FieldA, field FieldB] : Object | H.cs:165:20:165:27 | access to field FieldA : B [field FieldB] : Object | provenance | | +| H.cs:165:20:165:20 | access to local variable a : A [field FieldA, field FieldB] : Object | H.cs:165:20:165:27 | access to field FieldA : B [field FieldB] : Object | provenance | | +| H.cs:165:20:165:20 | access to local variable a : A [field FieldA] : B | H.cs:165:20:165:27 | access to field FieldA : B | provenance | | +| H.cs:165:20:165:20 | access to local variable a : A [field FieldA] : B | H.cs:165:20:165:27 | access to field FieldA : B | provenance | | +| H.cs:165:20:165:27 | access to field FieldA : B | H.cs:165:17:165:27 | (...) ... : B | provenance | | +| H.cs:165:20:165:27 | access to field FieldA : B | H.cs:165:17:165:27 | (...) ... : B | provenance | | +| H.cs:165:20:165:27 | access to field FieldA : B [field FieldB] : Object | H.cs:165:17:165:27 | (...) ... : B [field FieldB] : Object | provenance | | +| H.cs:165:20:165:27 | access to field FieldA : B [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:7:9:7:14 | [post] this access : I [field Field1] : Object | I.cs:21:13:21:19 | 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:21:13:21:19 | 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: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:26:13:26:37 | [pre-initializer] object creation of type I : 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:17:13:33 | call to method Source : Object | I.cs:15:20:15:20 | access to local variable o : Object | provenance | | +| I.cs:13:17:13:33 | call to method Source : Object | I.cs:15:20:15:20 | access to local variable o : Object | provenance | | +| I.cs:15:9:15:9 | [post] access to local variable i : I [field Field1] : Object | I.cs:16:9:16:9 | access to local variable i : I [field Field1] : Object | provenance | | +| I.cs:15:9:15:9 | [post] access to local variable i : I [field Field1] : Object | I.cs:16:9:16:9 | access to local variable i : I [field Field1] : Object | provenance | | +| I.cs:15:20:15:20 | access to local variable o : Object | I.cs:15:9:15:9 | [post] access to local variable i : I [field Field1] : Object | provenance | | +| I.cs:15:20:15:20 | access to local variable o : Object | I.cs:15:9:15:9 | [post] access to local variable i : I [field Field1] : Object | provenance | | +| I.cs:16:9:16:9 | access to local variable i : I [field Field1] : Object | I.cs:17:9:17:9 | access to local variable i : I [field Field1] : Object | provenance | | +| I.cs:16:9:16:9 | access to local variable i : I [field Field1] : Object | I.cs:17:9:17:9 | access to local variable i : I [field Field1] : Object | provenance | | +| I.cs:17:9:17:9 | access to local variable i : I [field Field1] : Object | I.cs:18:14:18:14 | access to local variable i : I [field Field1] : Object | provenance | | +| I.cs:17:9:17:9 | access to local variable i : I [field Field1] : Object | I.cs:18:14:18:14 | access to local variable i : I [field Field1] : Object | provenance | | +| I.cs:18:14:18:14 | access to local variable i : I [field Field1] : Object | I.cs:18:14:18:21 | access to field Field1 | provenance | | +| I.cs:18:14:18:14 | access to local variable i : I [field Field1] : Object | I.cs:18:14:18:21 | access to field Field1 | provenance | | +| I.cs:21:13:21:19 | object creation of type I : I [field Field1] : Object | I.cs:22:9:22:9 | access to local variable i : I [field Field1] : Object | provenance | | +| I.cs:21:13:21:19 | object creation of type I : I [field Field1] : Object | I.cs:22:9:22:9 | access to local variable i : I [field Field1] : Object | provenance | | +| I.cs:22:9:22:9 | access to local variable i : I [field Field1] : Object | I.cs:23:14:23:14 | access to local variable i : I [field Field1] : Object | provenance | | +| I.cs:22:9:22:9 | access to local variable i : I [field Field1] : Object | I.cs:23:14:23:14 | access to local variable i : I [field Field1] : Object | provenance | | +| I.cs:23:14:23:14 | access to local variable i : I [field Field1] : Object | I.cs:23:14:23:21 | access to field Field1 | provenance | | +| I.cs:23:14:23:14 | access to local variable i : I [field Field1] : Object | I.cs:23:14:23:21 | access to field Field1 | provenance | | +| I.cs:26:13:26:37 | [pre-initializer] object creation of type I : I [field Field1] : Object | I.cs:27:14:27:14 | access to local variable i : I [field Field1] : Object | provenance | | +| I.cs:26:13:26:37 | [pre-initializer] object creation of type I : I [field Field1] : Object | I.cs:27:14:27:14 | access to local variable i : I [field Field1] : Object | provenance | | +| I.cs:27:14:27:14 | access to local variable i : I [field Field1] : Object | I.cs:27:14:27:21 | access to field Field1 | provenance | | +| I.cs:27:14:27:14 | access to local variable i : I [field Field1] : Object | I.cs:27:14:27:21 | access to field Field1 | provenance | | +| I.cs:31:13:31:29 | call to method Source : Object | I.cs:32:20:32:20 | access to local variable o : Object | provenance | | +| I.cs:31:13:31:29 | call to method Source : Object | I.cs:32:20:32:20 | access to local variable o : Object | provenance | | +| I.cs:32:9:32:9 | [post] access to local variable i : I [field Field1] : Object | I.cs:33:9:33:9 | access to local variable i : I [field Field1] : Object | provenance | | +| I.cs:32:9:32:9 | [post] access to local variable i : I [field Field1] : Object | I.cs:33:9:33:9 | access to local variable i : I [field Field1] : Object | provenance | | +| I.cs:32:20:32:20 | access to local variable o : Object | I.cs:32:9:32:9 | [post] access to local variable i : I [field Field1] : Object | provenance | | +| I.cs:32:20:32:20 | access to local variable o : Object | I.cs:32:9:32:9 | [post] access to local variable i : I [field Field1] : Object | provenance | | +| I.cs:33:9:33:9 | access to local variable i : I [field Field1] : Object | I.cs:34:12:34:12 | access to local variable i : I [field Field1] : Object | provenance | | +| I.cs:33:9:33:9 | access to local variable i : I [field Field1] : Object | I.cs:34:12:34:12 | access to local variable i : I [field Field1] : Object | provenance | | +| I.cs:34:12:34:12 | access to local variable i : I [field Field1] : Object | I.cs:37:23:37:23 | i : I [field Field1] : Object | provenance | | +| I.cs:34:12:34:12 | access to local variable i : I [field Field1] : Object | I.cs:37:23:37:23 | i : I [field Field1] : Object | provenance | | +| I.cs:37:23:37:23 | i : I [field Field1] : Object | I.cs:39:9:39:9 | access to parameter i : I [field Field1] : Object | provenance | | +| I.cs:37:23:37:23 | i : I [field Field1] : Object | I.cs:39:9:39:9 | access to parameter i : I [field Field1] : Object | provenance | | +| 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: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: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: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 | | +| 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 | | +| J.cs:21:17:21:33 | call to method Source : Object | J.cs:22:34:22:34 | access to local variable o : Object | provenance | | +| J.cs:21:17:21:33 | call to method Source : Object | J.cs:22:34:22:34 | access to local variable o : Object | provenance | | +| J.cs:22:18:22:41 | object creation of type RecordClass : RecordClass [property Prop1] : Object | J.cs:23:14:23:15 | access to local variable r1 : RecordClass [property Prop1] : Object | provenance | | +| J.cs:22:18:22:41 | object creation of type RecordClass : RecordClass [property Prop1] : Object | J.cs:23:14:23:15 | access to local variable r1 : RecordClass [property Prop1] : Object | provenance | | +| J.cs:22:18:22:41 | object creation of type RecordClass : RecordClass [property Prop1] : Object | J.cs:27:14:27:15 | access to local variable r2 : RecordClass [property Prop1] : Object | provenance | | +| J.cs:22:18:22:41 | object creation of type RecordClass : RecordClass [property Prop1] : Object | J.cs:27:14:27:15 | access to local variable r2 : RecordClass [property Prop1] : Object | provenance | | +| J.cs:22:18:22:41 | object creation of type RecordClass : RecordClass [property Prop1] : Object | J.cs:31:14:31:15 | access to local variable r3 : RecordClass [property Prop1] : Object | provenance | | +| J.cs:22:18:22:41 | object creation of type RecordClass : RecordClass [property Prop1] : Object | J.cs:31:14:31:15 | access to local variable r3 : RecordClass [property Prop1] : Object | provenance | | +| J.cs:22:34:22:34 | access to local variable o : Object | J.cs:22:18:22:41 | object creation of type RecordClass : RecordClass [property Prop1] : Object | provenance | | +| J.cs:22:34:22:34 | access to local variable o : Object | J.cs:22:18:22:41 | object creation of type RecordClass : RecordClass [property Prop1] : Object | provenance | | +| J.cs:23:14:23:15 | access to local variable r1 : RecordClass [property Prop1] : Object | J.cs:23:14:23:21 | access to property Prop1 | provenance | | +| J.cs:23:14:23:15 | access to local variable r1 : RecordClass [property Prop1] : Object | J.cs:23:14:23:21 | access to property Prop1 | provenance | | +| J.cs:27:14:27:15 | access to local variable r2 : RecordClass [property Prop1] : Object | J.cs:27:14:27:21 | access to property Prop1 | provenance | | +| J.cs:27:14:27:15 | access to local variable r2 : RecordClass [property Prop1] : Object | J.cs:27:14:27:21 | access to property Prop1 | provenance | | +| J.cs:30:18:30:54 | ... with { ... } : RecordClass [property Prop2] : Object | J.cs:32:14:32:15 | access to local variable r3 : RecordClass [property Prop2] : Object | provenance | | +| J.cs:30:18:30:54 | ... with { ... } : RecordClass [property Prop2] : Object | J.cs:32:14:32:15 | access to local variable r3 : RecordClass [property Prop2] : Object | provenance | | +| J.cs:30:36:30:52 | call to method Source : Object | J.cs:30:18:30:54 | ... with { ... } : RecordClass [property Prop2] : Object | provenance | | +| J.cs:30:36:30:52 | call to method Source : Object | J.cs:30:18:30:54 | ... with { ... } : RecordClass [property Prop2] : Object | provenance | | +| J.cs:31:14:31:15 | access to local variable r3 : RecordClass [property Prop1] : Object | J.cs:31:14:31:21 | access to property Prop1 | provenance | | +| J.cs:31:14:31:15 | access to local variable r3 : RecordClass [property Prop1] : Object | J.cs:31:14:31:21 | access to property Prop1 | provenance | | +| J.cs:32:14:32:15 | access to local variable r3 : RecordClass [property Prop2] : Object | J.cs:32:14:32:21 | access to property Prop2 | provenance | | +| J.cs:32:14:32:15 | access to local variable r3 : RecordClass [property Prop2] : Object | J.cs:32:14:32:21 | access to property Prop2 | provenance | | +| J.cs:41:17:41:33 | call to method Source : Object | J.cs:42:35:42:35 | access to local variable o : Object | provenance | | +| J.cs:41:17:41:33 | call to method Source : Object | J.cs:42:35:42:35 | access to local variable o : Object | provenance | | +| J.cs:42:18:42:42 | object creation of type RecordStruct : RecordStruct [property Prop1] : Object | J.cs:43:14:43:15 | access to local variable r1 : RecordStruct [property Prop1] : Object | provenance | | +| J.cs:42:18:42:42 | object creation of type RecordStruct : RecordStruct [property Prop1] : Object | J.cs:43:14:43:15 | access to local variable r1 : RecordStruct [property Prop1] : Object | provenance | | +| J.cs:42:18:42:42 | object creation of type RecordStruct : RecordStruct [property Prop1] : Object | J.cs:47:14:47:15 | access to local variable r2 : RecordStruct [property Prop1] : Object | provenance | | +| J.cs:42:18:42:42 | object creation of type RecordStruct : RecordStruct [property Prop1] : Object | J.cs:47:14:47:15 | access to local variable r2 : RecordStruct [property Prop1] : Object | provenance | | +| J.cs:42:18:42:42 | object creation of type RecordStruct : RecordStruct [property Prop1] : Object | J.cs:51:14:51:15 | access to local variable r3 : RecordStruct [property Prop1] : Object | provenance | | +| J.cs:42:18:42:42 | object creation of type RecordStruct : RecordStruct [property Prop1] : Object | J.cs:51:14:51:15 | access to local variable r3 : RecordStruct [property Prop1] : Object | provenance | | +| J.cs:42:35:42:35 | access to local variable o : Object | J.cs:42:18:42:42 | object creation of type RecordStruct : RecordStruct [property Prop1] : Object | provenance | | +| J.cs:42:35:42:35 | access to local variable o : Object | J.cs:42:18:42:42 | object creation of type RecordStruct : RecordStruct [property Prop1] : Object | provenance | | +| J.cs:43:14:43:15 | access to local variable r1 : RecordStruct [property Prop1] : Object | J.cs:43:14:43:21 | access to property Prop1 | provenance | | +| J.cs:43:14:43:15 | access to local variable r1 : RecordStruct [property Prop1] : Object | J.cs:43:14:43:21 | access to property Prop1 | provenance | | +| J.cs:47:14:47:15 | access to local variable r2 : RecordStruct [property Prop1] : Object | J.cs:47:14:47:21 | access to property Prop1 | provenance | | +| J.cs:47:14:47:15 | access to local variable r2 : RecordStruct [property Prop1] : Object | J.cs:47:14:47:21 | access to property Prop1 | provenance | | +| J.cs:50:18:50:54 | ... with { ... } : RecordStruct [property Prop2] : Object | J.cs:52:14:52:15 | access to local variable r3 : RecordStruct [property Prop2] : Object | provenance | | +| J.cs:50:18:50:54 | ... with { ... } : RecordStruct [property Prop2] : Object | J.cs:52:14:52:15 | access to local variable r3 : RecordStruct [property Prop2] : Object | provenance | | +| J.cs:50:36:50:52 | call to method Source : Object | J.cs:50:18:50:54 | ... with { ... } : RecordStruct [property Prop2] : Object | provenance | | +| J.cs:50:36:50:52 | call to method Source : Object | J.cs:50:18:50:54 | ... with { ... } : RecordStruct [property Prop2] : Object | provenance | | +| J.cs:51:14:51:15 | access to local variable r3 : RecordStruct [property Prop1] : Object | J.cs:51:14:51:21 | access to property Prop1 | provenance | | +| J.cs:51:14:51:15 | access to local variable r3 : RecordStruct [property Prop1] : Object | J.cs:51:14:51:21 | access to property Prop1 | provenance | | +| J.cs:52:14:52:15 | access to local variable r3 : RecordStruct [property Prop2] : Object | J.cs:52:14:52:21 | access to property Prop2 | provenance | | +| J.cs:52:14:52:15 | access to local variable r3 : RecordStruct [property Prop2] : Object | J.cs:52:14:52:21 | access to property Prop2 | provenance | | +| J.cs:61:17:61:33 | call to method Source : Object | J.cs:62:29:62:29 | access to local variable o : Object | provenance | | +| J.cs:61:17:61:33 | call to method Source : Object | J.cs:62:29:62:29 | access to local variable o : Object | provenance | | +| J.cs:62:18:62:36 | object creation of type Struct : Struct [field Field] : Object | J.cs:65:14:65:15 | access to local variable s2 : Struct [field Field] : Object | provenance | | +| J.cs:62:18:62:36 | object creation of type Struct : Struct [field Field] : Object | J.cs:65:14:65:15 | access to local variable s2 : Struct [field Field] : Object | provenance | | +| J.cs:62:18:62:36 | object creation of type Struct : Struct [field Field] : Object | J.cs:69:14:69:15 | access to local variable s3 : Struct [field Field] : Object | provenance | | +| J.cs:62:18:62:36 | object creation of type Struct : Struct [field Field] : Object | J.cs:69:14:69:15 | access to local variable s3 : Struct [field Field] : Object | provenance | | +| J.cs:62:29:62:29 | access to local variable o : Object | J.cs:14:26:14:30 | field : Object | provenance | | +| J.cs:62:29:62:29 | access to local variable o : Object | J.cs:14:26:14:30 | field : Object | provenance | | +| J.cs:62:29:62:29 | access to local variable o : Object | J.cs:62:18:62:36 | object creation of type Struct : Struct [field Field] : Object | provenance | | +| J.cs:62:29:62:29 | access to local variable o : Object | J.cs:62:18:62:36 | object creation of type Struct : Struct [field Field] : Object | provenance | | +| J.cs:65:14:65:15 | access to local variable s2 : Struct [field Field] : Object | J.cs:65:14:65:21 | access to field Field | provenance | | +| J.cs:65:14:65:15 | access to local variable s2 : Struct [field Field] : Object | J.cs:65:14:65:21 | access to field Field | provenance | | +| J.cs:68:18:68:53 | ... with { ... } : Struct [property Prop] : Object | J.cs:70:14:70:15 | access to local variable s3 : Struct [property Prop] : Object | provenance | | +| J.cs:68:18:68:53 | ... with { ... } : Struct [property Prop] : Object | J.cs:70:14:70:15 | access to local variable s3 : Struct [property Prop] : Object | provenance | | +| J.cs:68:35:68:51 | call to method Source : Object | J.cs:68:18:68:53 | ... with { ... } : Struct [property Prop] : Object | provenance | | +| J.cs:68:35:68:51 | call to method Source : Object | J.cs:68:18:68:53 | ... with { ... } : Struct [property Prop] : Object | provenance | | +| J.cs:69:14:69:15 | access to local variable s3 : Struct [field Field] : Object | J.cs:69:14:69:21 | access to field Field | provenance | | +| J.cs:69:14:69:15 | access to local variable s3 : Struct [field Field] : Object | J.cs:69:14:69:21 | access to field Field | provenance | | +| J.cs:70:14:70:15 | access to local variable s3 : Struct [property Prop] : Object | J.cs:70:14:70:20 | access to property Prop | provenance | | +| J.cs:70:14:70:15 | access to local variable s3 : Struct [property Prop] : Object | J.cs:70:14:70:20 | access to property Prop | provenance | | +| J.cs:79:17:79:33 | call to method Source : Object | J.cs:80:35:80:35 | access to local variable o : Object | provenance | | +| J.cs:79:17:79:33 | call to method Source : Object | J.cs:80:35:80:35 | access to local variable o : Object | provenance | | +| J.cs:80:18:80:36 | object creation of type Struct : Struct [property Prop] : Object | J.cs:84:14:84:15 | access to local variable s2 : Struct [property Prop] : Object | provenance | | +| J.cs:80:18:80:36 | object creation of type Struct : Struct [property Prop] : Object | J.cs:84:14:84:15 | access to local variable s2 : Struct [property Prop] : Object | provenance | | +| J.cs:80:18:80:36 | object creation of type Struct : Struct [property Prop] : Object | J.cs:88:14:88:15 | access to local variable s3 : Struct [property Prop] : Object | provenance | | +| J.cs:80:18:80:36 | object creation of type Struct : Struct [property Prop] : Object | J.cs:88:14:88:15 | access to local variable s3 : Struct [property Prop] : Object | provenance | | +| J.cs:80:35:80:35 | access to local variable o : Object | J.cs:14:40:14:43 | prop : Object | provenance | | +| J.cs:80:35:80:35 | access to local variable o : Object | J.cs:14:40:14:43 | prop : Object | provenance | | +| J.cs:80:35:80:35 | access to local variable o : Object | J.cs:80:18:80:36 | object creation of type Struct : Struct [property Prop] : Object | provenance | | +| J.cs:80:35:80:35 | access to local variable o : Object | J.cs:80:18:80:36 | object creation of type Struct : Struct [property Prop] : Object | provenance | | +| J.cs:84:14:84:15 | access to local variable s2 : Struct [property Prop] : Object | J.cs:84:14:84:20 | access to property Prop | provenance | | +| J.cs:84:14:84:15 | access to local variable s2 : Struct [property Prop] : Object | J.cs:84:14:84:20 | access to property Prop | provenance | | +| J.cs:86:18:86:54 | ... with { ... } : Struct [field Field] : Object | J.cs:87:14:87:15 | access to local variable s3 : Struct [field Field] : Object | provenance | | +| J.cs:86:18:86:54 | ... with { ... } : Struct [field Field] : Object | J.cs:87:14:87:15 | access to local variable s3 : Struct [field Field] : Object | provenance | | +| J.cs:86:36:86:52 | call to method Source : Object | J.cs:86:18:86:54 | ... with { ... } : Struct [field Field] : Object | provenance | | +| J.cs:86:36:86:52 | call to method Source : Object | J.cs:86:18:86:54 | ... with { ... } : Struct [field Field] : Object | provenance | | +| J.cs:87:14:87:15 | access to local variable s3 : Struct [field Field] : Object | J.cs:87:14:87:21 | access to field Field | provenance | | +| J.cs:87:14:87:15 | access to local variable s3 : Struct [field Field] : Object | J.cs:87:14:87:21 | access to field Field | provenance | | +| J.cs:88:14:88:15 | access to local variable s3 : Struct [property Prop] : Object | J.cs:88:14:88:20 | access to property Prop | provenance | | +| J.cs:88:14:88:15 | access to local variable s3 : Struct [property Prop] : Object | J.cs:88:14:88:20 | access to property Prop | provenance | | +| J.cs:97:17:97:33 | call to method Source : Object | J.cs:99:28:99:28 | access to local variable o : Object | provenance | | +| J.cs:97:17:97:33 | call to method Source : Object | J.cs:99:28:99:28 | access to local variable o : Object | provenance | | +| J.cs:99:18:99:41 | { ..., ... } : <>__AnonType0 [property X] : Object | J.cs:102:14:102:15 | access to local variable a2 : <>__AnonType0 [property X] : Object | provenance | | +| J.cs:99:18:99:41 | { ..., ... } : <>__AnonType0 [property X] : Object | J.cs:102:14:102:15 | access to local variable a2 : <>__AnonType0 [property X] : Object | provenance | | +| J.cs:99:18:99:41 | { ..., ... } : <>__AnonType0 [property X] : Object | J.cs:106:14:106:15 | access to local variable a3 : <>__AnonType0 [property X] : Object | provenance | | +| J.cs:99:18:99:41 | { ..., ... } : <>__AnonType0 [property X] : Object | J.cs:106:14:106:15 | access to local variable a3 : <>__AnonType0 [property X] : Object | provenance | | +| J.cs:99:28:99:28 | access to local variable o : Object | J.cs:99:18:99:41 | { ..., ... } : <>__AnonType0 [property X] : Object | provenance | | +| J.cs:99:28:99:28 | access to local variable o : Object | J.cs:99:18:99:41 | { ..., ... } : <>__AnonType0 [property X] : Object | provenance | | +| J.cs:102:14:102:15 | access to local variable a2 : <>__AnonType0 [property X] : Object | J.cs:102:14:102:17 | access to property X | provenance | | +| J.cs:102:14:102:15 | access to local variable a2 : <>__AnonType0 [property X] : Object | J.cs:102:14:102:17 | access to property X | provenance | | +| J.cs:105:18:105:50 | ... with { ... } : <>__AnonType0 [property Y] : Object | J.cs:107:14:107:15 | access to local variable a3 : <>__AnonType0 [property Y] : Object | provenance | | +| J.cs:105:18:105:50 | ... with { ... } : <>__AnonType0 [property Y] : Object | J.cs:107:14:107:15 | access to local variable a3 : <>__AnonType0 [property Y] : Object | provenance | | +| J.cs:105:32:105:48 | call to method Source : Object | J.cs:105:18:105:50 | ... with { ... } : <>__AnonType0 [property Y] : Object | provenance | | +| J.cs:105:32:105:48 | call to method Source : Object | J.cs:105:18:105:50 | ... with { ... } : <>__AnonType0 [property Y] : Object | provenance | | +| J.cs:106:14:106:15 | access to local variable a3 : <>__AnonType0 [property X] : Object | J.cs:106:14:106:17 | access to property X | provenance | | +| J.cs:106:14:106:15 | access to local variable a3 : <>__AnonType0 [property X] : Object | J.cs:106:14:106:17 | access to property X | provenance | | +| J.cs:107:14:107:15 | access to local variable a3 : <>__AnonType0 [property Y] : Object | J.cs:107:14:107:17 | access to property Y | provenance | | +| J.cs:107:14:107:15 | access to local variable a3 : <>__AnonType0 [property Y] : Object | J.cs:107:14:107:17 | access to property Y | provenance | | +| J.cs:119:13:119:13 | [post] access to local variable a : Int32[] [element] : Int32 | J.cs:125:14:125:14 | access to local variable a : Int32[] [element] : Int32 | provenance | | +| J.cs:119:13:119:13 | [post] access to local variable a : Int32[] [element] : Int32 | J.cs:125:14:125:14 | access to local variable a : Int32[] [element] : Int32 | provenance | | +| J.cs:119:20:119:34 | call to method Source : Int32 | J.cs:119:13:119:13 | [post] access to local variable a : Int32[] [element] : Int32 | provenance | | +| J.cs:119:20:119:34 | call to method Source : Int32 | J.cs:119:13:119:13 | [post] access to local variable a : Int32[] [element] : Int32 | provenance | | +| J.cs:125:14:125:14 | access to local variable a : Int32[] [element] : Int32 | J.cs:125:14:125:17 | access to array element : Int32 | provenance | | +| J.cs:125:14:125:14 | access to local variable a : Int32[] [element] : Int32 | J.cs:125:14:125:17 | access to array element : Int32 | provenance | | +| J.cs:125:14:125:17 | access to array element : Int32 | J.cs:125:14:125:17 | (...) ... | provenance | | +| J.cs:125:14:125:17 | access to array element : Int32 | J.cs:125:14:125:17 | (...) ... | provenance | | nodes | A.cs:5:17:5:28 | call to method Source : C | semmle.label | call to method Source : C | | A.cs:5:17:5:28 | call to method Source : C | semmle.label | 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 00d45708afc..4d549939f1c 100644 --- a/csharp/ql/test/library-tests/dataflow/global/DataFlowPath.expected +++ b/csharp/ql/test/library-tests/dataflow/global/DataFlowPath.expected @@ -1,344 +1,344 @@ edges -| Capture.cs:7:20:7:26 | tainted : String | Capture.cs:12:19:12:24 | access to local variable sink27 | -| Capture.cs:7:20:7:26 | tainted : String | Capture.cs:21:23:21:28 | access to local variable sink28 | -| Capture.cs:7:20:7:26 | tainted : String | Capture.cs:30:19:30:24 | access to local variable sink29 | -| Capture.cs:7:20:7:26 | tainted : String | Capture.cs:61:36:61:42 | access to parameter tainted : String | -| Capture.cs:50:50:50:55 | sink39 : String | Capture.cs:57:27:57:32 | access to parameter sink39 | -| Capture.cs:61:36:61:42 | access to parameter tainted : String | Capture.cs:50:50:50:55 | sink39 : String | -| Capture.cs:69:13:69:35 | SSA def(sink30) : String | Capture.cs:72:15:72:20 | access to local variable sink30 | -| Capture.cs:69:22:69:35 | "taint source" : String | Capture.cs:69:13:69:35 | SSA def(sink30) : String | -| Capture.cs:79:17:79:39 | SSA def(sink31) : String | Capture.cs:84:15:84:20 | access to local variable sink31 | -| Capture.cs:79:26:79:39 | "taint source" : String | Capture.cs:79:17:79:39 | SSA def(sink31) : String | -| Capture.cs:89:13:89:35 | SSA def(sink32) : String | Capture.cs:93:15:93:20 | access to local variable sink32 | -| Capture.cs:89:22:89:35 | "taint source" : String | Capture.cs:89:13:89:35 | SSA def(sink32) : String | -| Capture.cs:115:17:115:39 | SSA def(sink40) : String | Capture.cs:122:15:122:20 | access to local variable sink40 | -| Capture.cs:115:26:115:39 | "taint source" : String | Capture.cs:115:17:115:39 | SSA def(sink40) : String | -| Capture.cs:125:25:125:31 | tainted : String | Capture.cs:133:15:133:20 | access to local variable sink33 | -| Capture.cs:125:25:125:31 | tainted : String | Capture.cs:145:15:145:20 | access to local variable sink34 | -| Capture.cs:125:25:125:31 | tainted : String | Capture.cs:154:15:154:20 | access to local variable sink35 | -| Capture.cs:125:25:125:31 | tainted : String | Capture.cs:160:22:160:38 | call to local function CaptureThrough4 : String | -| Capture.cs:125:25:125:31 | tainted : String | Capture.cs:168:25:168:31 | access to parameter tainted : String | -| Capture.cs:125:25:125:31 | tainted : String | Capture.cs:194:25:194:31 | access to parameter tainted : String | -| Capture.cs:160:22:160:38 | call to local function CaptureThrough4 : String | Capture.cs:161:15:161:20 | access to local variable sink36 | -| Capture.cs:168:25:168:31 | access to parameter tainted : String | Capture.cs:169:15:169:20 | access to local variable sink37 | -| Capture.cs:188:26:188:26 | s : String | Capture.cs:191:20:191:22 | call to local function M : String | -| Capture.cs:194:22:194:32 | call to local function Id : String | Capture.cs:195:15:195:20 | access to local variable sink38 | -| Capture.cs:194:25:194:31 | access to parameter tainted : String | Capture.cs:188:26:188:26 | s : String | -| Capture.cs:194:25:194:31 | access to parameter tainted : String | Capture.cs:194:22:194:32 | call to local function Id : String | -| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:19:15:19:29 | access to field SinkField0 | -| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 | -| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:257:26:257:35 | sinkParam0 : String | -| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:263:26:263:35 | sinkParam1 : String | -| GlobalDataFlow.cs:45:30:45:39 | sinkParam2 : String | GlobalDataFlow.cs:45:50:45:59 | access to parameter sinkParam2 | -| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:45:30:45:39 | sinkParam2 : String | -| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | GlobalDataFlow.cs:382:41:382:41 | x : String | -| GlobalDataFlow.cs:54:15:54:15 | x : String | GlobalDataFlow.cs:54:24:54:24 | access to parameter x : String | -| GlobalDataFlow.cs:54:24:54:24 | access to parameter x : String | GlobalDataFlow.cs:273:26:273:35 | sinkParam4 : String | -| GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:382:41:382:41 | x : String | -| GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | GlobalDataFlow.cs:396:52:396:52 | x : String | -| GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:396:52:396:52 | x : String | -| GlobalDataFlow.cs:57:37:57:37 | x : String | GlobalDataFlow.cs:57:46:57:46 | access to parameter x : String | -| GlobalDataFlow.cs:57:46:57:46 | access to parameter x : String | GlobalDataFlow.cs:288:26:288:35 | sinkParam7 : String | -| GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:396:52:396:52 | x : String | -| GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | GlobalDataFlow.cs:427:9:427:11 | value : String | -| GlobalDataFlow.cs:71:21:71:46 | call to method Return : String | GlobalDataFlow.cs:72:15:72:19 | access to local variable sink0 | -| GlobalDataFlow.cs:71:21:71:46 | call to method Return : String | GlobalDataFlow.cs:73:94:73:98 | access to local variable sink0 : String | -| GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:21:71:46 | call to method Return : String | -| GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:298:26:298:26 | x : String | -| GlobalDataFlow.cs:73:21:73:101 | (...) ... : String | GlobalDataFlow.cs:74:15:74:19 | access to local variable sink1 | -| GlobalDataFlow.cs:73:21:73:101 | (...) ... : String | GlobalDataFlow.cs:76:19:76:23 | access to local variable sink1 : String | -| GlobalDataFlow.cs:73:29:73:101 | call to method Invoke : String | GlobalDataFlow.cs:73:21:73:101 | (...) ... : String | -| GlobalDataFlow.cs:73:94:73:98 | access to local variable sink0 : String | GlobalDataFlow.cs:73:29:73:101 | call to method Invoke : String | -| GlobalDataFlow.cs:73:94:73:98 | access to local variable sink0 : String | GlobalDataFlow.cs:298:26:298:26 | x : String | -| GlobalDataFlow.cs:76:19:76:23 | access to local variable sink1 : String | GlobalDataFlow.cs:76:30:76:34 | SSA def(sink2) : String | -| GlobalDataFlow.cs:76:19:76:23 | access to local variable sink1 : String | GlobalDataFlow.cs:304:32:304:32 | x : String | -| GlobalDataFlow.cs:76:30:76:34 | SSA def(sink2) : String | GlobalDataFlow.cs:77:15:77:19 | access to local variable sink2 | -| GlobalDataFlow.cs:76:30:76:34 | SSA def(sink2) : String | GlobalDataFlow.cs:79:19:79:23 | access to local variable sink2 : String | -| GlobalDataFlow.cs:79:19:79:23 | access to local variable sink2 : String | GlobalDataFlow.cs:79:30:79:34 | SSA def(sink3) : String | -| GlobalDataFlow.cs:79:19:79:23 | access to local variable sink2 : String | GlobalDataFlow.cs:310:32:310:32 | x : String | -| GlobalDataFlow.cs:79:30:79:34 | SSA def(sink3) : String | GlobalDataFlow.cs:80:15:80:19 | access to local variable sink3 | -| GlobalDataFlow.cs:79:30:79:34 | SSA def(sink3) : String | GlobalDataFlow.cs:81:59:81:63 | access to local variable sink3 : String | -| GlobalDataFlow.cs:79:30:79:34 | SSA def(sink3) : String | GlobalDataFlow.cs:139:29:139:33 | access to local variable sink3 : String | -| GlobalDataFlow.cs:81:22:81:85 | call to method SelectEven : IEnumerable [element] : String | GlobalDataFlow.cs:81:22:81:93 | call to method First : String | -| GlobalDataFlow.cs:81:22:81:93 | call to method First : String | GlobalDataFlow.cs:82:15:82:20 | access to local variable sink13 | -| GlobalDataFlow.cs:81:22:81:93 | call to method First : String | GlobalDataFlow.cs:83:59:83:64 | access to local variable sink13 : String | -| GlobalDataFlow.cs:81:23:81:65 | (...) ... : null [element] : String | GlobalDataFlow.cs:81:22:81:85 | call to method SelectEven : IEnumerable [element] : String | -| GlobalDataFlow.cs:81:23:81:65 | (...) ... : null [element] : String | GlobalDataFlow.cs:553:71:553:71 | e : null [element] : String | -| GlobalDataFlow.cs:81:57:81:65 | { ..., ... } : null [element] : String | GlobalDataFlow.cs:81:23:81:65 | (...) ... : null [element] : String | -| GlobalDataFlow.cs:81:59:81:63 | access to local variable sink3 : String | GlobalDataFlow.cs:81:57:81:65 | { ..., ... } : null [element] : String | -| GlobalDataFlow.cs:81:79:81:79 | x : String | GlobalDataFlow.cs:81:84:81:84 | access to parameter x : String | -| GlobalDataFlow.cs:83:22:83:87 | call to method Select : IEnumerable [element] : String | GlobalDataFlow.cs:83:22:83:95 | call to method First : String | -| GlobalDataFlow.cs:83:22:83:95 | call to method First : String | GlobalDataFlow.cs:84:15:84:20 | access to local variable sink14 | -| GlobalDataFlow.cs:83:22:83:95 | call to method First : String | GlobalDataFlow.cs:85:59:85:64 | access to local variable sink14 : String | -| GlobalDataFlow.cs:83:23:83:66 | (...) ... : null [element] : String | GlobalDataFlow.cs:83:22:83:87 | call to method Select : IEnumerable [element] : String | -| GlobalDataFlow.cs:83:23:83:66 | (...) ... : null [element] : String | GlobalDataFlow.cs:315:31:315:40 | sinkParam8 : String | -| GlobalDataFlow.cs:83:57:83:66 | { ..., ... } : null [element] : String | GlobalDataFlow.cs:83:23:83:66 | (...) ... : null [element] : String | -| GlobalDataFlow.cs:83:59:83:64 | access to local variable sink13 : String | GlobalDataFlow.cs:83:57:83:66 | { ..., ... } : null [element] : String | -| GlobalDataFlow.cs:85:22:85:128 | call to method Zip : IEnumerable [element] : String | GlobalDataFlow.cs:85:22:85:136 | call to method First : String | -| GlobalDataFlow.cs:85:22:85:136 | call to method First : String | GlobalDataFlow.cs:86:15:86:20 | access to local variable sink15 | -| GlobalDataFlow.cs:85:22:85:136 | call to method First : String | GlobalDataFlow.cs:87:106:87:111 | access to local variable sink15 : String | -| GlobalDataFlow.cs:85:23:85:66 | (...) ... : null [element] : String | GlobalDataFlow.cs:85:22:85:128 | call to method Zip : IEnumerable [element] : String | -| GlobalDataFlow.cs:85:57:85:66 | { ..., ... } : null [element] : String | GlobalDataFlow.cs:85:23:85:66 | (...) ... : null [element] : String | -| GlobalDataFlow.cs:85:59:85:64 | access to local variable sink14 : String | GlobalDataFlow.cs:85:57:85:66 | { ..., ... } : null [element] : String | -| GlobalDataFlow.cs:87:22:87:128 | call to method Zip : IEnumerable [element] : String | GlobalDataFlow.cs:87:22:87:136 | call to method First : String | -| GlobalDataFlow.cs:87:22:87:136 | call to method First : String | GlobalDataFlow.cs:88:15:88:20 | access to local variable sink16 | -| GlobalDataFlow.cs:87:70:87:113 | (...) ... : null [element] : String | GlobalDataFlow.cs:87:22:87:128 | call to method Zip : IEnumerable [element] : String | -| GlobalDataFlow.cs:87:104:87:113 | { ..., ... } : null [element] : String | GlobalDataFlow.cs:87:70:87:113 | (...) ... : null [element] : String | -| GlobalDataFlow.cs:87:106:87:111 | access to local variable sink15 : String | GlobalDataFlow.cs:87:104:87:113 | { ..., ... } : null [element] : String | -| GlobalDataFlow.cs:138:40:138:40 | x : String | GlobalDataFlow.cs:138:63:138:63 | access to parameter x : String | -| GlobalDataFlow.cs:138:63:138:63 | access to parameter x : String | GlobalDataFlow.cs:138:45:138:64 | call to method ApplyFunc : String | -| GlobalDataFlow.cs:138:63:138:63 | access to parameter x : String | GlobalDataFlow.cs:387:46:387:46 | x : String | -| GlobalDataFlow.cs:139:21:139:34 | delegate call : String | GlobalDataFlow.cs:140:15:140:19 | access to local variable sink4 | -| GlobalDataFlow.cs:139:21:139:34 | delegate call : String | GlobalDataFlow.cs:147:39:147:43 | access to local variable sink4 : String | -| GlobalDataFlow.cs:139:29:139:33 | access to local variable sink3 : String | GlobalDataFlow.cs:138:40:138:40 | x : String | -| GlobalDataFlow.cs:139:29:139:33 | access to local variable sink3 : String | GlobalDataFlow.cs:139:21:139:34 | delegate call : String | -| GlobalDataFlow.cs:147:21:147:44 | call to method ApplyFunc : String | GlobalDataFlow.cs:148:15:148:19 | access to local variable sink5 | -| GlobalDataFlow.cs:147:39:147:43 | access to local variable sink4 : String | GlobalDataFlow.cs:147:21:147:44 | call to method ApplyFunc : String | -| GlobalDataFlow.cs:147:39:147:43 | access to local variable sink4 : String | GlobalDataFlow.cs:387:46:387:46 | x : String | -| GlobalDataFlow.cs:157:21:157:25 | call to method Out : String | GlobalDataFlow.cs:158:15:158:19 | access to local variable sink6 | -| GlobalDataFlow.cs:160:20:160:24 | SSA def(sink7) : String | GlobalDataFlow.cs:161:15:161:19 | access to local variable sink7 | -| GlobalDataFlow.cs:163:20:163:24 | SSA def(sink8) : String | GlobalDataFlow.cs:164:15:164:19 | access to local variable sink8 | -| GlobalDataFlow.cs:165:22:165:31 | call to method OutYield : IEnumerable [element] : String | GlobalDataFlow.cs:165:22:165:39 | call to method First : String | -| GlobalDataFlow.cs:165:22:165:39 | call to method First : String | GlobalDataFlow.cs:166:15:166:20 | access to local variable sink12 | -| GlobalDataFlow.cs:167:22:167:43 | call to method TaintedParam : String | GlobalDataFlow.cs:168:15:168:20 | access to local variable sink23 | -| GlobalDataFlow.cs:183:35:183:48 | "taint source" : String | GlobalDataFlow.cs:184:21:184:26 | delegate call : String | -| GlobalDataFlow.cs:184:21:184:26 | delegate call : String | GlobalDataFlow.cs:185:15:185:19 | access to local variable sink9 | -| GlobalDataFlow.cs:193:22:193:42 | object creation of type Lazy : Lazy [property Value] : String | GlobalDataFlow.cs:193:22:193:48 | access to property Value : String | -| GlobalDataFlow.cs:193:22:193:48 | access to property Value : String | GlobalDataFlow.cs:194:15:194:20 | access to local variable sink10 | -| GlobalDataFlow.cs:201:22:201:32 | access to property OutProperty : String | GlobalDataFlow.cs:202:15:202:20 | access to local variable sink19 | -| GlobalDataFlow.cs:211:38:211:61 | array creation of type String[] : null [element] : String | GlobalDataFlow.cs:211:38:211:75 | call to method AsQueryable : IQueryable [element] : String | -| GlobalDataFlow.cs:211:38:211:75 | call to method AsQueryable : IQueryable [element] : String | GlobalDataFlow.cs:216:22:216:28 | access to local variable tainted : IQueryable [element] : String | -| GlobalDataFlow.cs:211:38:211:75 | call to method AsQueryable : IQueryable [element] : String | GlobalDataFlow.cs:218:22:218:28 | access to local variable tainted : IQueryable [element] : String | -| GlobalDataFlow.cs:211:38:211:75 | call to method AsQueryable : IQueryable [element] : String | GlobalDataFlow.cs:220:22:220:28 | access to local variable tainted : IQueryable [element] : String | -| GlobalDataFlow.cs:211:44:211:61 | { ..., ... } : null [element] : String | GlobalDataFlow.cs:211:38:211:61 | array creation of type String[] : null [element] : String | -| GlobalDataFlow.cs:211:46:211:59 | "taint source" : String | GlobalDataFlow.cs:211:44:211:61 | { ..., ... } : null [element] : String | -| GlobalDataFlow.cs:214:35:214:45 | sinkParam10 : String | GlobalDataFlow.cs:214:58:214:68 | access to parameter sinkParam10 | -| GlobalDataFlow.cs:215:71:215:71 | x : String | GlobalDataFlow.cs:215:89:215:89 | access to parameter x : String | -| GlobalDataFlow.cs:215:89:215:89 | access to parameter x : String | GlobalDataFlow.cs:321:32:321:41 | sinkParam9 : String | -| GlobalDataFlow.cs:216:22:216:28 | access to local variable tainted : IQueryable [element] : String | GlobalDataFlow.cs:214:35:214:45 | sinkParam10 : String | -| GlobalDataFlow.cs:216:22:216:28 | access to local variable tainted : IQueryable [element] : String | GlobalDataFlow.cs:216:22:216:39 | call to method Select : IEnumerable [element] : String | -| GlobalDataFlow.cs:216:22:216:39 | call to method Select : IEnumerable [element] : String | GlobalDataFlow.cs:216:22:216:47 | call to method First : String | -| GlobalDataFlow.cs:216:22:216:47 | call to method First : String | GlobalDataFlow.cs:217:15:217:20 | access to local variable sink24 | -| GlobalDataFlow.cs:218:22:218:28 | access to local variable tainted : IQueryable [element] : String | GlobalDataFlow.cs:215:71:215:71 | x : String | -| GlobalDataFlow.cs:218:22:218:28 | access to local variable tainted : IQueryable [element] : String | GlobalDataFlow.cs:218:22:218:39 | call to method Select : IQueryable [element] : String | -| GlobalDataFlow.cs:218:22:218:39 | call to method Select : IQueryable [element] : String | GlobalDataFlow.cs:218:22:218:47 | call to method First : String | -| GlobalDataFlow.cs:218:22:218:47 | call to method First : String | GlobalDataFlow.cs:219:15:219:20 | access to local variable sink25 | -| GlobalDataFlow.cs:220:22:220:28 | access to local variable tainted : IQueryable [element] : String | GlobalDataFlow.cs:220:22:220:49 | call to method Select : IEnumerable [element] : String | -| GlobalDataFlow.cs:220:22:220:28 | access to local variable tainted : IQueryable [element] : String | GlobalDataFlow.cs:327:32:327:42 | sinkParam11 : String | -| GlobalDataFlow.cs:220:22:220:49 | call to method Select : IEnumerable [element] : String | GlobalDataFlow.cs:220:22:220:57 | call to method First : String | -| GlobalDataFlow.cs:220:22:220:57 | call to method First : String | GlobalDataFlow.cs:221:15:221:20 | access to local variable sink26 | -| GlobalDataFlow.cs:241:20:241:49 | call to method Run : Task [property Result] : String | GlobalDataFlow.cs:242:22:242:25 | access to local variable task : Task [property Result] : String | -| GlobalDataFlow.cs:241:20:241:49 | call to method Run : Task [property Result] : String | GlobalDataFlow.cs:244:28:244:31 | access to local variable task : Task [property Result] : String | -| GlobalDataFlow.cs:241:35:241:48 | "taint source" : String | GlobalDataFlow.cs:241:20:241:49 | call to method Run : Task [property Result] : String | -| GlobalDataFlow.cs:242:22:242:25 | access to local variable task : Task [property Result] : String | GlobalDataFlow.cs:242:22:242:32 | access to property Result : String | -| GlobalDataFlow.cs:242:22:242:32 | access to property Result : String | GlobalDataFlow.cs:243:15:243:20 | access to local variable sink41 | -| GlobalDataFlow.cs:244:22:244:31 | await ... : String | GlobalDataFlow.cs:245:15:245:20 | access to local variable sink42 | -| GlobalDataFlow.cs:244:28:244:31 | access to local variable task : Task [property Result] : String | GlobalDataFlow.cs:244:22:244:31 | await ... : String | -| GlobalDataFlow.cs:257:26:257:35 | sinkParam0 : String | GlobalDataFlow.cs:259:16:259:25 | access to parameter sinkParam0 : String | -| GlobalDataFlow.cs:257:26:257:35 | sinkParam0 : String | GlobalDataFlow.cs:260:15:260:24 | access to parameter sinkParam0 | -| GlobalDataFlow.cs:259:16:259:25 | access to parameter sinkParam0 : String | GlobalDataFlow.cs:257:26:257:35 | sinkParam0 : String | -| GlobalDataFlow.cs:263:26:263:35 | sinkParam1 : String | GlobalDataFlow.cs:265:15:265:24 | access to parameter sinkParam1 | -| GlobalDataFlow.cs:268:26:268:35 | sinkParam3 : String | GlobalDataFlow.cs:270:15:270:24 | access to parameter sinkParam3 | -| GlobalDataFlow.cs:273:26:273:35 | sinkParam4 : String | GlobalDataFlow.cs:275:15:275:24 | access to parameter sinkParam4 | -| GlobalDataFlow.cs:278:26:278:35 | sinkParam5 : String | GlobalDataFlow.cs:280:15:280:24 | access to parameter sinkParam5 | -| GlobalDataFlow.cs:283:26:283:35 | sinkParam6 : String | GlobalDataFlow.cs:285:15:285:24 | access to parameter sinkParam6 | -| GlobalDataFlow.cs:288:26:288:35 | sinkParam7 : String | GlobalDataFlow.cs:290:15:290:24 | access to parameter sinkParam7 | -| GlobalDataFlow.cs:298:26:298:26 | x : String | GlobalDataFlow.cs:300:37:300:37 | access to parameter x : String | -| GlobalDataFlow.cs:300:17:300:38 | call to method ApplyFunc : String | GlobalDataFlow.cs:301:16:301:41 | ... ? ... : ... : String | -| GlobalDataFlow.cs:300:27:300:28 | x0 : String | GlobalDataFlow.cs:300:33:300:34 | access to parameter x0 : String | -| GlobalDataFlow.cs:300:37:300:37 | access to parameter x : String | GlobalDataFlow.cs:300:17:300:38 | call to method ApplyFunc : String | -| GlobalDataFlow.cs:300:37:300:37 | access to parameter x : String | GlobalDataFlow.cs:387:46:387:46 | x : String | -| GlobalDataFlow.cs:304:32:304:32 | x : String | GlobalDataFlow.cs:306:9:306:13 | SSA def(y) : String | -| GlobalDataFlow.cs:310:32:310:32 | x : String | GlobalDataFlow.cs:312:9:312:13 | SSA def(y) : String | -| GlobalDataFlow.cs:315:31:315:40 | sinkParam8 : String | GlobalDataFlow.cs:317:15:317:24 | access to parameter sinkParam8 | -| GlobalDataFlow.cs:321:32:321:41 | sinkParam9 : String | GlobalDataFlow.cs:323:15:323:24 | access to parameter sinkParam9 | -| GlobalDataFlow.cs:327:32:327:42 | sinkParam11 : String | GlobalDataFlow.cs:329:15:329:25 | access to parameter sinkParam11 | -| GlobalDataFlow.cs:341:16:341:29 | "taint source" : String | GlobalDataFlow.cs:157:21:157:25 | call to method Out : String | -| GlobalDataFlow.cs:341:16:341:29 | "taint source" : String | GlobalDataFlow.cs:193:22:193:42 | object creation of type Lazy : Lazy [property Value] : String | -| GlobalDataFlow.cs:346:9:346:26 | SSA def(x) : String | GlobalDataFlow.cs:160:20:160:24 | SSA def(sink7) : String | -| GlobalDataFlow.cs:346:13:346:26 | "taint source" : String | GlobalDataFlow.cs:346:9:346:26 | SSA def(x) : String | -| GlobalDataFlow.cs:351:9:351:26 | SSA def(x) : String | GlobalDataFlow.cs:163:20:163:24 | SSA def(sink8) : String | -| GlobalDataFlow.cs:351:13:351:26 | "taint source" : String | GlobalDataFlow.cs:351:9:351:26 | SSA def(x) : String | -| GlobalDataFlow.cs:357:22:357:35 | "taint source" : String | GlobalDataFlow.cs:165:22:165:31 | call to method OutYield : IEnumerable [element] : String | -| GlobalDataFlow.cs:382:41:382:41 | x : String | GlobalDataFlow.cs:384:11:384:11 | access to parameter x : String | -| GlobalDataFlow.cs:382:41:382:41 | x : String | GlobalDataFlow.cs:384:11:384:11 | access to parameter x : String | -| GlobalDataFlow.cs:384:11:384:11 | access to parameter x : String | GlobalDataFlow.cs:54:15:54:15 | x : String | -| GlobalDataFlow.cs:384:11:384:11 | access to parameter x : String | GlobalDataFlow.cs:268:26:268:35 | sinkParam3 : String | -| GlobalDataFlow.cs:387:46:387:46 | x : String | GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | -| GlobalDataFlow.cs:387:46:387:46 | x : String | GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | -| GlobalDataFlow.cs:387:46:387:46 | x : String | GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | -| GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | GlobalDataFlow.cs:298:26:298:26 | x : String | -| GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | GlobalDataFlow.cs:298:26:298:26 | x : String | -| GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | GlobalDataFlow.cs:300:27:300:28 | x0 : String | -| GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | GlobalDataFlow.cs:389:16:389:19 | delegate call : String | -| GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | GlobalDataFlow.cs:389:16:389:19 | delegate call : String | -| GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | GlobalDataFlow.cs:389:16:389:19 | delegate call : String | -| GlobalDataFlow.cs:396:52:396:52 | x : String | GlobalDataFlow.cs:398:11:398:11 | access to parameter x : String | -| GlobalDataFlow.cs:396:52:396:52 | x : String | GlobalDataFlow.cs:398:11:398:11 | access to parameter x : String | -| GlobalDataFlow.cs:396:52:396:52 | x : String | GlobalDataFlow.cs:398:11:398:11 | access to parameter x : String | -| GlobalDataFlow.cs:398:11:398:11 | access to parameter x : String | GlobalDataFlow.cs:57:37:57:37 | x : String | -| GlobalDataFlow.cs:398:11:398:11 | access to parameter x : String | GlobalDataFlow.cs:278:26:278:35 | sinkParam5 : String | -| GlobalDataFlow.cs:398:11:398:11 | access to parameter x : String | GlobalDataFlow.cs:283:26:283:35 | sinkParam6 : String | -| GlobalDataFlow.cs:401:39:401:45 | tainted : String | GlobalDataFlow.cs:404:15:404:20 | access to local variable sink11 | -| GlobalDataFlow.cs:401:39:401:45 | tainted : String | GlobalDataFlow.cs:405:16:405:21 | access to local variable sink11 : String | -| GlobalDataFlow.cs:405:16:405:21 | access to local variable sink11 : String | GlobalDataFlow.cs:167:22:167:43 | call to method TaintedParam : String | -| GlobalDataFlow.cs:427:9:427:11 | value : String | GlobalDataFlow.cs:427:41:427:46 | access to local variable sink20 | -| GlobalDataFlow.cs:438:22:438:35 | "taint source" : String | GlobalDataFlow.cs:201:22:201:32 | access to property OutProperty : String | -| GlobalDataFlow.cs:457:20:457:49 | call to method Run : Task [property Result] : String | GlobalDataFlow.cs:458:25:458:28 | access to local variable task : Task [property Result] : String | -| GlobalDataFlow.cs:457:35:457:48 | "taint source" : String | GlobalDataFlow.cs:457:20:457:49 | call to method Run : Task [property Result] : String | -| GlobalDataFlow.cs:458:25:458:28 | access to local variable task : Task [property Result] : String | GlobalDataFlow.cs:458:25:458:50 | call to method ConfigureAwait : ConfiguredTaskAwaitable [synthetic m_configuredTaskAwaiter, synthetic m_task_configured_task_awaitable, property Result] : String | -| GlobalDataFlow.cs:458:25:458:50 | call to method ConfigureAwait : ConfiguredTaskAwaitable [synthetic m_configuredTaskAwaiter, synthetic m_task_configured_task_awaitable, property Result] : String | GlobalDataFlow.cs:459:23:459:31 | access to local variable awaitable : ConfiguredTaskAwaitable [synthetic m_configuredTaskAwaiter, synthetic m_task_configured_task_awaitable, property Result] : String | -| GlobalDataFlow.cs:459:23:459:31 | access to local variable awaitable : ConfiguredTaskAwaitable [synthetic m_configuredTaskAwaiter, synthetic m_task_configured_task_awaitable, property Result] : String | GlobalDataFlow.cs:459:23:459:44 | call to method GetAwaiter : ConfiguredTaskAwaitable.ConfiguredTaskAwaiter [synthetic m_task_configured_task_awaitable, property Result] : String | -| GlobalDataFlow.cs:459:23:459:44 | call to method GetAwaiter : ConfiguredTaskAwaitable.ConfiguredTaskAwaiter [synthetic m_task_configured_task_awaitable, property Result] : String | GlobalDataFlow.cs:460:22:460:28 | access to local variable awaiter : ConfiguredTaskAwaitable.ConfiguredTaskAwaiter [synthetic m_task_configured_task_awaitable, property Result] : String | -| GlobalDataFlow.cs:460:22:460:28 | access to local variable awaiter : ConfiguredTaskAwaitable.ConfiguredTaskAwaiter [synthetic m_task_configured_task_awaitable, property Result] : String | GlobalDataFlow.cs:460:22:460:40 | call to method GetResult : String | -| GlobalDataFlow.cs:460:22:460:40 | call to method GetResult : String | GlobalDataFlow.cs:461:15:461:20 | access to local variable sink45 | -| GlobalDataFlow.cs:466:53:466:55 | arg : String | GlobalDataFlow.cs:470:15:470:17 | access to parameter arg : String | -| GlobalDataFlow.cs:469:21:469:21 | s : String | GlobalDataFlow.cs:469:32:469:32 | access to parameter s | -| GlobalDataFlow.cs:470:15:470:17 | access to parameter arg : String | GlobalDataFlow.cs:469:21:469:21 | s : String | -| GlobalDataFlow.cs:473:28:473:41 | "taint source" : String | GlobalDataFlow.cs:466:53:466:55 | arg : String | -| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:490:25:490:26 | [post] access to local variable x1 : SimpleClass [field field] : String | -| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:490:30:490:31 | [post] access to local variable x2 : SimpleClass [field field] : String | -| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:497:31:497:32 | [post] access to local variable y1 : SimpleClass [field field] : String | -| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:497:36:497:37 | [post] access to local variable y2 : SimpleClass [field field] : String | -| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:497:42:497:43 | [post] access to local variable y3 : SimpleClass [field field] : String | -| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:508:33:508:33 | [post] access to local variable x : SubSimpleClass [field field] : String | -| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:515:20:515:20 | [post] access to parameter x : SimpleClass [field field] : String | -| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:515:25:515:25 | [post] access to local variable y : SimpleClass [field field] : String | -| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:527:20:527:20 | [post] access to local variable x : SimpleClass [field field] : String | -| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:528:20:528:20 | [post] access to local variable y : SimpleClass [field field] : String | -| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:529:18:529:18 | [post] access to local variable z : SimpleClass [field field] : String | -| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:538:20:538:21 | [post] access to parameter sc : SimpleClass [field field] : String | -| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:546:24:546:24 | [post] access to local variable x : SimpleClass [field field] : String | -| GlobalDataFlow.cs:483:20:483:33 | "taint source" : String | GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | -| 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 | -| 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 | -| GlobalDataFlow.cs:491:15:491:16 | access to local variable x1 : SimpleClass [field field] : String | GlobalDataFlow.cs:491:15:491:22 | access to field field | -| GlobalDataFlow.cs:492:15:492:16 | access to local variable x2 : SimpleClass [field field] : String | GlobalDataFlow.cs:492:15:492:22 | access to field field | -| GlobalDataFlow.cs:497:31:497:32 | [post] access to local variable y1 : SimpleClass [field field] : String | GlobalDataFlow.cs:498:15:498:16 | access to local variable y1 : SimpleClass [field field] : String | -| GlobalDataFlow.cs:497:36:497:37 | [post] access to local variable y2 : SimpleClass [field field] : String | GlobalDataFlow.cs:499:15:499:16 | access to local variable y2 : SimpleClass [field field] : String | -| GlobalDataFlow.cs:497:42:497:43 | [post] access to local variable y3 : SimpleClass [field field] : String | GlobalDataFlow.cs:500:15:500:16 | access to local variable y3 : SimpleClass [field field] : String | -| GlobalDataFlow.cs:498:15:498:16 | access to local variable y1 : SimpleClass [field field] : String | GlobalDataFlow.cs:498:15:498:22 | access to field field | -| GlobalDataFlow.cs:499:15:499:16 | access to local variable y2 : SimpleClass [field field] : String | GlobalDataFlow.cs:499:15:499:22 | access to field field | -| GlobalDataFlow.cs:500:15:500:16 | access to local variable y3 : SimpleClass [field field] : String | GlobalDataFlow.cs:500:15:500:22 | access to field field | -| GlobalDataFlow.cs:508:33:508:33 | [post] access to local variable x : SubSimpleClass [field field] : String | GlobalDataFlow.cs:509:15:509:15 | access to local variable x : SubSimpleClass [field field] : String | -| GlobalDataFlow.cs:509:15:509:15 | access to local variable x : SubSimpleClass [field field] : String | GlobalDataFlow.cs:509:15:509:21 | access to field field | -| GlobalDataFlow.cs:515:20:515:20 | [post] access to parameter x : SimpleClass [field field] : String | GlobalDataFlow.cs:516:15:516:15 | access to parameter x : SimpleClass [field field] : String | -| GlobalDataFlow.cs:515:25:515:25 | [post] access to local variable y : SimpleClass [field field] : String | GlobalDataFlow.cs:517:15:517:15 | access to local variable y : SimpleClass [field field] : String | -| GlobalDataFlow.cs:516:15:516:15 | access to parameter x : SimpleClass [field field] : String | GlobalDataFlow.cs:516:15:516:21 | access to field field | -| GlobalDataFlow.cs:517:15:517:15 | access to local variable y : SimpleClass [field field] : String | GlobalDataFlow.cs:517:15:517:21 | access to field field | -| GlobalDataFlow.cs:527:20:527:20 | [post] access to local variable x : SimpleClass [field field] : String | GlobalDataFlow.cs:531:15:531:15 | access to local variable x : SimpleClass [field field] : String | -| GlobalDataFlow.cs:528:20:528:20 | [post] access to local variable y : SimpleClass [field field] : String | GlobalDataFlow.cs:532:15:532:15 | access to local variable y : SimpleClass [field field] : String | -| GlobalDataFlow.cs:529:18:529:18 | [post] access to local variable z : SimpleClass [field field] : String | GlobalDataFlow.cs:533:15:533:15 | access to local variable z : SimpleClass [field field] : String | -| GlobalDataFlow.cs:531:15:531:15 | access to local variable x : SimpleClass [field field] : String | GlobalDataFlow.cs:531:15:531:21 | access to field field | -| GlobalDataFlow.cs:532:15:532:15 | access to local variable y : SimpleClass [field field] : String | GlobalDataFlow.cs:532:15:532:21 | access to field field | -| GlobalDataFlow.cs:533:15:533:15 | access to local variable z : SimpleClass [field field] : String | GlobalDataFlow.cs:533:15:533:21 | access to field field | -| GlobalDataFlow.cs:538:20:538:21 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:539:15:539:16 | access to parameter sc : SimpleClass [field field] : String | -| GlobalDataFlow.cs:539:15:539:16 | access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:539:15:539:22 | access to field field | -| GlobalDataFlow.cs:546:24:546:24 | [post] access to local variable x : SimpleClass [field field] : String | GlobalDataFlow.cs:547:15:547:15 | access to local variable x : SimpleClass [field field] : String | -| GlobalDataFlow.cs:547:15:547:15 | access to local variable x : SimpleClass [field field] : String | GlobalDataFlow.cs:547:15:547:21 | access to field field | -| GlobalDataFlow.cs:553:71:553:71 | e : null [element] : String | GlobalDataFlow.cs:556:27:556:27 | access to parameter e : null [element] : String | -| GlobalDataFlow.cs:556:22:556:22 | SSA def(x) : String | GlobalDataFlow.cs:558:46:558:46 | access to local variable x : String | -| GlobalDataFlow.cs:556:27:556:27 | access to parameter e : null [element] : String | GlobalDataFlow.cs:556:22:556:22 | SSA def(x) : String | -| GlobalDataFlow.cs:558:46:558:46 | access to local variable x : String | GlobalDataFlow.cs:81:79:81:79 | x : String | -| GlobalDataFlow.cs:558:46:558:46 | access to local variable x : String | GlobalDataFlow.cs:558:44:558:47 | delegate call : String | -| Splitting.cs:3:28:3:34 | tainted : String | Splitting.cs:8:24:8:30 | [b (line 3): false] access to parameter tainted : String | -| Splitting.cs:3:28:3:34 | tainted : String | Splitting.cs:8:24:8:30 | [b (line 3): true] access to parameter tainted : String | -| Splitting.cs:8:17:8:31 | [b (line 3): false] call to method Return : String | Splitting.cs:9:15:9:15 | [b (line 3): false] access to local variable x | -| Splitting.cs:8:17:8:31 | [b (line 3): true] call to method Return : String | Splitting.cs:9:15:9:15 | [b (line 3): true] access to local variable x | -| Splitting.cs:8:17:8:31 | [b (line 3): true] call to method Return : String | Splitting.cs:11:19:11:19 | access to local variable x | -| Splitting.cs:8:24:8:30 | [b (line 3): false] access to parameter tainted : 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): false] access to parameter tainted : String | Splitting.cs:16:26:16:26 | x : String | -| Splitting.cs:8:24:8:30 | [b (line 3): true] access to parameter tainted : String | Splitting.cs:8:17:8:31 | [b (line 3): true] 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:26:16:26 | x : String | Splitting.cs:16:32:16:32 | access to parameter x : String | -| Splitting.cs:18:24:18:24 | s : String | Splitting.cs:20:29:20:29 | access to parameter s : String | -| Splitting.cs:20:29:20:29 | access to parameter s : String | Splitting.cs:16:26:16:26 | x : String | -| Splitting.cs:20:29:20:29 | access to parameter s : String | Splitting.cs:20:22:20:30 | call to method Return : String | -| Splitting.cs:21:9:21:11 | value : String | Splitting.cs:21:28:21:32 | access to parameter value : String | -| Splitting.cs:21:28:21:32 | access to parameter value : String | Splitting.cs:16:26:16:26 | x : String | -| Splitting.cs:21:28:21:32 | access to parameter value : String | Splitting.cs:21:21:21:33 | call to method Return | -| Splitting.cs:24:28:24:34 | tainted : String | Splitting.cs:30:17:30:23 | [b (line 24): false] access to parameter tainted : String | -| Splitting.cs:24:28:24:34 | tainted : String | Splitting.cs:30:17:30:23 | [b (line 24): true] access to parameter tainted : String | -| Splitting.cs:24:28:24:34 | tainted : String | Splitting.cs:31:19:31:25 | [b (line 24): false] access to parameter tainted : String | -| Splitting.cs:24:28:24:34 | tainted : String | Splitting.cs:31:19:31:25 | [b (line 24): true] access to parameter tainted : String | -| Splitting.cs:30:17:30:23 | [b (line 24): false] access to parameter tainted : String | Splitting.cs:21:9:21:11 | value : String | -| Splitting.cs:30:17:30:23 | [b (line 24): true] access to parameter tainted : String | Splitting.cs:21:9:21:11 | value : String | -| Splitting.cs:31:17:31:26 | [b (line 24): false] dynamic access to element : String | Splitting.cs:32:15:32:15 | [b (line 24): false] access to local variable x | -| Splitting.cs:31:17:31:26 | [b (line 24): true] dynamic access to element : String | Splitting.cs:32:15:32:15 | [b (line 24): true] access to local variable x | -| Splitting.cs:31:17:31:26 | [b (line 24): true] dynamic access to element : String | Splitting.cs:34:19:34:19 | access to local variable x | -| Splitting.cs:31:19:31:25 | [b (line 24): false] access to parameter tainted : String | Splitting.cs:18:24:18:24 | s : String | -| Splitting.cs:31:19:31:25 | [b (line 24): false] access to parameter tainted : String | Splitting.cs:31:17:31:26 | [b (line 24): false] dynamic access to element : String | -| Splitting.cs:31:19:31:25 | [b (line 24): true] access to parameter tainted : String | Splitting.cs:18:24:18:24 | s : String | -| Splitting.cs:31:19:31:25 | [b (line 24): true] access to parameter tainted : String | Splitting.cs:31:17:31:26 | [b (line 24): true] dynamic access to element : String | -| Splitting.cs:39:21:39:34 | [b (line 37): true] "taint source" : String | Splitting.cs:41:19:41:19 | access to local variable s | -| Splitting.cs:48:36:48:49 | "taint source" : String | Splitting.cs:50:19:50:19 | access to local variable s | -| Splitting.cs:48:36:48:49 | "taint source" : String | Splitting.cs:52:19:52:19 | access to local variable s | +| Capture.cs:7:20:7:26 | tainted : String | Capture.cs:12:19:12:24 | access to local variable sink27 | provenance | | +| Capture.cs:7:20:7:26 | tainted : String | Capture.cs:21:23:21:28 | access to local variable sink28 | provenance | | +| Capture.cs:7:20:7:26 | tainted : String | Capture.cs:30:19:30:24 | access to local variable sink29 | provenance | | +| Capture.cs:7:20:7:26 | tainted : String | Capture.cs:61:36:61:42 | access to parameter tainted : String | provenance | | +| Capture.cs:50:50:50:55 | sink39 : String | Capture.cs:57:27:57:32 | access to parameter sink39 | provenance | | +| Capture.cs:61:36:61:42 | access to parameter tainted : String | Capture.cs:50:50:50:55 | sink39 : String | provenance | | +| Capture.cs:69:13:69:35 | SSA def(sink30) : String | Capture.cs:72:15:72:20 | access to local variable sink30 | provenance | | +| Capture.cs:69:22:69:35 | "taint source" : String | Capture.cs:69:13:69:35 | SSA def(sink30) : String | provenance | | +| Capture.cs:79:17:79:39 | SSA def(sink31) : String | Capture.cs:84:15:84:20 | access to local variable sink31 | provenance | | +| Capture.cs:79:26:79:39 | "taint source" : String | Capture.cs:79:17:79:39 | SSA def(sink31) : String | provenance | | +| Capture.cs:89:13:89:35 | SSA def(sink32) : String | Capture.cs:93:15:93:20 | access to local variable sink32 | provenance | | +| Capture.cs:89:22:89:35 | "taint source" : String | Capture.cs:89:13:89:35 | SSA def(sink32) : String | provenance | | +| Capture.cs:115:17:115:39 | SSA def(sink40) : String | Capture.cs:122:15:122:20 | access to local variable sink40 | provenance | | +| Capture.cs:115:26:115:39 | "taint source" : String | Capture.cs:115:17:115:39 | SSA def(sink40) : String | provenance | | +| Capture.cs:125:25:125:31 | tainted : String | Capture.cs:133:15:133:20 | access to local variable sink33 | provenance | | +| Capture.cs:125:25:125:31 | tainted : String | Capture.cs:145:15:145:20 | access to local variable sink34 | provenance | | +| Capture.cs:125:25:125:31 | tainted : String | Capture.cs:154:15:154:20 | access to local variable sink35 | provenance | | +| Capture.cs:125:25:125:31 | tainted : String | Capture.cs:160:22:160:38 | call to local function CaptureThrough4 : String | provenance | | +| Capture.cs:125:25:125:31 | tainted : String | Capture.cs:168:25:168:31 | access to parameter tainted : String | provenance | | +| Capture.cs:125:25:125:31 | tainted : String | Capture.cs:194:25:194:31 | access to parameter tainted : String | provenance | | +| Capture.cs:160:22:160:38 | call to local function CaptureThrough4 : String | Capture.cs:161:15:161:20 | access to local variable sink36 | provenance | | +| Capture.cs:168:25:168:31 | access to parameter tainted : String | Capture.cs:169:15:169:20 | access to local variable sink37 | provenance | | +| Capture.cs:188:26:188:26 | s : String | Capture.cs:191:20:191:22 | call to local function M : String | provenance | | +| Capture.cs:194:22:194:32 | call to local function Id : String | Capture.cs:195:15:195:20 | access to local variable sink38 | provenance | | +| Capture.cs:194:25:194:31 | access to parameter tainted : String | Capture.cs:188:26:188:26 | s : String | provenance | | +| Capture.cs:194:25:194:31 | access to parameter tainted : String | Capture.cs:194:22:194:32 | call to local function Id : String | provenance | | +| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:19:15:19:29 | access to field SinkField0 | provenance | | +| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 | provenance | | +| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:257:26:257:35 | sinkParam0 : String | provenance | | +| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:263:26:263:35 | sinkParam1 : String | provenance | | +| GlobalDataFlow.cs:45:30:45:39 | sinkParam2 : String | GlobalDataFlow.cs:45:50:45:59 | access to parameter sinkParam2 | provenance | | +| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:45:30:45:39 | sinkParam2 : String | provenance | | +| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | GlobalDataFlow.cs:382:41:382:41 | x : String | provenance | | +| GlobalDataFlow.cs:54:15:54:15 | x : String | GlobalDataFlow.cs:54:24:54:24 | access to parameter x : String | provenance | | +| GlobalDataFlow.cs:54:24:54:24 | access to parameter x : String | GlobalDataFlow.cs:273:26:273:35 | sinkParam4 : String | provenance | | +| GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:382:41:382:41 | x : String | provenance | | +| GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | GlobalDataFlow.cs:396:52:396:52 | x : String | provenance | | +| GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:396:52:396:52 | x : String | provenance | | +| GlobalDataFlow.cs:57:37:57:37 | x : String | GlobalDataFlow.cs:57:46:57:46 | access to parameter x : String | provenance | | +| GlobalDataFlow.cs:57:46:57:46 | access to parameter x : String | GlobalDataFlow.cs:288:26:288:35 | sinkParam7 : String | provenance | | +| GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:396:52:396:52 | x : String | provenance | | +| GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | GlobalDataFlow.cs:427:9:427:11 | value : String | provenance | | +| GlobalDataFlow.cs:71:21:71:46 | call to method Return : String | GlobalDataFlow.cs:72:15:72:19 | access to local variable sink0 | provenance | | +| GlobalDataFlow.cs:71:21:71:46 | call to method Return : String | GlobalDataFlow.cs:73:94:73:98 | access to local variable sink0 : String | provenance | | +| GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:21:71:46 | call to method Return : String | provenance | | +| GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:298:26:298:26 | x : String | provenance | | +| GlobalDataFlow.cs:73:21:73:101 | (...) ... : String | GlobalDataFlow.cs:74:15:74:19 | access to local variable sink1 | provenance | | +| GlobalDataFlow.cs:73:21:73:101 | (...) ... : String | GlobalDataFlow.cs:76:19:76:23 | access to local variable sink1 : String | provenance | | +| GlobalDataFlow.cs:73:29:73:101 | call to method Invoke : String | GlobalDataFlow.cs:73:21:73:101 | (...) ... : String | provenance | | +| GlobalDataFlow.cs:73:94:73:98 | access to local variable sink0 : String | GlobalDataFlow.cs:73:29:73:101 | call to method Invoke : String | provenance | | +| GlobalDataFlow.cs:73:94:73:98 | access to local variable sink0 : String | GlobalDataFlow.cs:298:26:298:26 | x : String | provenance | | +| GlobalDataFlow.cs:76:19:76:23 | access to local variable sink1 : String | GlobalDataFlow.cs:76:30:76:34 | SSA def(sink2) : String | provenance | | +| GlobalDataFlow.cs:76:19:76:23 | access to local variable sink1 : String | GlobalDataFlow.cs:304:32:304:32 | x : String | provenance | | +| GlobalDataFlow.cs:76:30:76:34 | SSA def(sink2) : String | GlobalDataFlow.cs:77:15:77:19 | access to local variable sink2 | provenance | | +| GlobalDataFlow.cs:76:30:76:34 | SSA def(sink2) : String | GlobalDataFlow.cs:79:19:79:23 | access to local variable sink2 : String | provenance | | +| GlobalDataFlow.cs:79:19:79:23 | access to local variable sink2 : String | GlobalDataFlow.cs:79:30:79:34 | SSA def(sink3) : String | provenance | | +| GlobalDataFlow.cs:79:19:79:23 | access to local variable sink2 : String | GlobalDataFlow.cs:310:32:310:32 | x : String | provenance | | +| GlobalDataFlow.cs:79:30:79:34 | SSA def(sink3) : String | GlobalDataFlow.cs:80:15:80:19 | access to local variable sink3 | provenance | | +| GlobalDataFlow.cs:79:30:79:34 | SSA def(sink3) : String | GlobalDataFlow.cs:81:59:81:63 | access to local variable sink3 : String | provenance | | +| GlobalDataFlow.cs:79:30:79:34 | SSA def(sink3) : String | GlobalDataFlow.cs:139:29:139:33 | access to local variable sink3 : String | provenance | | +| GlobalDataFlow.cs:81:22:81:85 | call to method SelectEven : IEnumerable [element] : String | GlobalDataFlow.cs:81:22:81:93 | call to method First : String | provenance | | +| GlobalDataFlow.cs:81:22:81:93 | call to method First : String | GlobalDataFlow.cs:82:15:82:20 | access to local variable sink13 | provenance | | +| GlobalDataFlow.cs:81:22:81:93 | call to method First : String | GlobalDataFlow.cs:83:59:83:64 | access to local variable sink13 : String | provenance | | +| GlobalDataFlow.cs:81:23:81:65 | (...) ... : null [element] : String | GlobalDataFlow.cs:81:22:81:85 | call to method SelectEven : IEnumerable [element] : String | provenance | | +| GlobalDataFlow.cs:81:23:81:65 | (...) ... : null [element] : String | GlobalDataFlow.cs:553:71:553:71 | e : null [element] : String | provenance | | +| GlobalDataFlow.cs:81:57:81:65 | { ..., ... } : null [element] : String | GlobalDataFlow.cs:81:23:81:65 | (...) ... : null [element] : String | provenance | | +| GlobalDataFlow.cs:81:59:81:63 | access to local variable sink3 : String | GlobalDataFlow.cs:81:57:81:65 | { ..., ... } : null [element] : String | provenance | | +| GlobalDataFlow.cs:81:79:81:79 | x : String | GlobalDataFlow.cs:81:84:81:84 | access to parameter x : String | provenance | | +| GlobalDataFlow.cs:83:22:83:87 | call to method Select : IEnumerable [element] : String | GlobalDataFlow.cs:83:22:83:95 | call to method First : String | provenance | | +| GlobalDataFlow.cs:83:22:83:95 | call to method First : String | GlobalDataFlow.cs:84:15:84:20 | access to local variable sink14 | provenance | | +| GlobalDataFlow.cs:83:22:83:95 | call to method First : String | GlobalDataFlow.cs:85:59:85:64 | access to local variable sink14 : String | provenance | | +| GlobalDataFlow.cs:83:23:83:66 | (...) ... : null [element] : String | GlobalDataFlow.cs:83:22:83:87 | call to method Select : IEnumerable [element] : String | provenance | | +| GlobalDataFlow.cs:83:23:83:66 | (...) ... : null [element] : String | GlobalDataFlow.cs:315:31:315:40 | sinkParam8 : String | provenance | | +| GlobalDataFlow.cs:83:57:83:66 | { ..., ... } : null [element] : String | GlobalDataFlow.cs:83:23:83:66 | (...) ... : null [element] : String | provenance | | +| GlobalDataFlow.cs:83:59:83:64 | access to local variable sink13 : String | GlobalDataFlow.cs:83:57:83:66 | { ..., ... } : null [element] : String | provenance | | +| GlobalDataFlow.cs:85:22:85:128 | call to method Zip : IEnumerable [element] : String | GlobalDataFlow.cs:85:22:85:136 | call to method First : String | provenance | | +| GlobalDataFlow.cs:85:22:85:136 | call to method First : String | GlobalDataFlow.cs:86:15:86:20 | access to local variable sink15 | provenance | | +| GlobalDataFlow.cs:85:22:85:136 | call to method First : String | GlobalDataFlow.cs:87:106:87:111 | access to local variable sink15 : String | provenance | | +| GlobalDataFlow.cs:85:23:85:66 | (...) ... : null [element] : String | GlobalDataFlow.cs:85:22:85:128 | call to method Zip : IEnumerable [element] : String | provenance | | +| GlobalDataFlow.cs:85:57:85:66 | { ..., ... } : null [element] : String | GlobalDataFlow.cs:85:23:85:66 | (...) ... : null [element] : String | provenance | | +| GlobalDataFlow.cs:85:59:85:64 | access to local variable sink14 : String | GlobalDataFlow.cs:85:57:85:66 | { ..., ... } : null [element] : String | provenance | | +| GlobalDataFlow.cs:87:22:87:128 | call to method Zip : IEnumerable [element] : String | GlobalDataFlow.cs:87:22:87:136 | call to method First : String | provenance | | +| GlobalDataFlow.cs:87:22:87:136 | call to method First : String | GlobalDataFlow.cs:88:15:88:20 | access to local variable sink16 | provenance | | +| GlobalDataFlow.cs:87:70:87:113 | (...) ... : null [element] : String | GlobalDataFlow.cs:87:22:87:128 | call to method Zip : IEnumerable [element] : String | provenance | | +| GlobalDataFlow.cs:87:104:87:113 | { ..., ... } : null [element] : String | GlobalDataFlow.cs:87:70:87:113 | (...) ... : null [element] : String | provenance | | +| GlobalDataFlow.cs:87:106:87:111 | access to local variable sink15 : String | GlobalDataFlow.cs:87:104:87:113 | { ..., ... } : null [element] : String | provenance | | +| GlobalDataFlow.cs:138:40:138:40 | x : String | GlobalDataFlow.cs:138:63:138:63 | access to parameter x : String | provenance | | +| GlobalDataFlow.cs:138:63:138:63 | access to parameter x : String | GlobalDataFlow.cs:138:45:138:64 | call to method ApplyFunc : String | provenance | | +| GlobalDataFlow.cs:138:63:138:63 | access to parameter x : String | GlobalDataFlow.cs:387:46:387:46 | x : String | provenance | | +| GlobalDataFlow.cs:139:21:139:34 | delegate call : String | GlobalDataFlow.cs:140:15:140:19 | access to local variable sink4 | provenance | | +| GlobalDataFlow.cs:139:21:139:34 | delegate call : String | GlobalDataFlow.cs:147:39:147:43 | access to local variable sink4 : String | provenance | | +| GlobalDataFlow.cs:139:29:139:33 | access to local variable sink3 : String | GlobalDataFlow.cs:138:40:138:40 | x : String | provenance | | +| GlobalDataFlow.cs:139:29:139:33 | access to local variable sink3 : String | GlobalDataFlow.cs:139:21:139:34 | delegate call : String | provenance | | +| GlobalDataFlow.cs:147:21:147:44 | call to method ApplyFunc : String | GlobalDataFlow.cs:148:15:148:19 | access to local variable sink5 | provenance | | +| GlobalDataFlow.cs:147:39:147:43 | access to local variable sink4 : String | GlobalDataFlow.cs:147:21:147:44 | call to method ApplyFunc : String | provenance | | +| GlobalDataFlow.cs:147:39:147:43 | access to local variable sink4 : String | GlobalDataFlow.cs:387:46:387:46 | x : String | provenance | | +| GlobalDataFlow.cs:157:21:157:25 | call to method Out : String | GlobalDataFlow.cs:158:15:158:19 | access to local variable sink6 | provenance | | +| GlobalDataFlow.cs:160:20:160:24 | SSA def(sink7) : String | GlobalDataFlow.cs:161:15:161:19 | access to local variable sink7 | provenance | | +| GlobalDataFlow.cs:163:20:163:24 | SSA def(sink8) : String | GlobalDataFlow.cs:164:15:164:19 | access to local variable sink8 | provenance | | +| GlobalDataFlow.cs:165:22:165:31 | call to method OutYield : IEnumerable [element] : String | GlobalDataFlow.cs:165:22:165:39 | call to method First : String | provenance | | +| GlobalDataFlow.cs:165:22:165:39 | call to method First : String | GlobalDataFlow.cs:166:15:166:20 | access to local variable sink12 | provenance | | +| GlobalDataFlow.cs:167:22:167:43 | call to method TaintedParam : String | GlobalDataFlow.cs:168:15:168:20 | access to local variable sink23 | provenance | | +| GlobalDataFlow.cs:183:35:183:48 | "taint source" : String | GlobalDataFlow.cs:184:21:184:26 | delegate call : String | provenance | | +| GlobalDataFlow.cs:184:21:184:26 | delegate call : String | GlobalDataFlow.cs:185:15:185:19 | access to local variable sink9 | provenance | | +| GlobalDataFlow.cs:193:22:193:42 | object creation of type Lazy : Lazy [property Value] : String | GlobalDataFlow.cs:193:22:193:48 | access to property Value : String | provenance | | +| GlobalDataFlow.cs:193:22:193:48 | access to property Value : String | GlobalDataFlow.cs:194:15:194:20 | access to local variable sink10 | provenance | | +| GlobalDataFlow.cs:201:22:201:32 | access to property OutProperty : String | GlobalDataFlow.cs:202:15:202:20 | access to local variable sink19 | provenance | | +| GlobalDataFlow.cs:211:38:211:61 | array creation of type String[] : null [element] : String | GlobalDataFlow.cs:211:38:211:75 | call to method AsQueryable : IQueryable [element] : String | provenance | | +| GlobalDataFlow.cs:211:38:211:75 | call to method AsQueryable : IQueryable [element] : String | GlobalDataFlow.cs:216:22:216:28 | access to local variable tainted : IQueryable [element] : String | provenance | | +| GlobalDataFlow.cs:211:38:211:75 | call to method AsQueryable : IQueryable [element] : String | GlobalDataFlow.cs:218:22:218:28 | access to local variable tainted : IQueryable [element] : String | provenance | | +| GlobalDataFlow.cs:211:38:211:75 | call to method AsQueryable : IQueryable [element] : String | GlobalDataFlow.cs:220:22:220:28 | access to local variable tainted : IQueryable [element] : String | provenance | | +| GlobalDataFlow.cs:211:44:211:61 | { ..., ... } : null [element] : String | GlobalDataFlow.cs:211:38:211:61 | array creation of type String[] : null [element] : String | provenance | | +| GlobalDataFlow.cs:211:46:211:59 | "taint source" : String | GlobalDataFlow.cs:211:44:211:61 | { ..., ... } : null [element] : String | provenance | | +| GlobalDataFlow.cs:214:35:214:45 | sinkParam10 : String | GlobalDataFlow.cs:214:58:214:68 | access to parameter sinkParam10 | provenance | | +| GlobalDataFlow.cs:215:71:215:71 | x : String | GlobalDataFlow.cs:215:89:215:89 | access to parameter x : String | provenance | | +| GlobalDataFlow.cs:215:89:215:89 | access to parameter x : String | GlobalDataFlow.cs:321:32:321:41 | sinkParam9 : String | provenance | | +| GlobalDataFlow.cs:216:22:216:28 | access to local variable tainted : IQueryable [element] : String | GlobalDataFlow.cs:214:35:214:45 | sinkParam10 : String | provenance | | +| GlobalDataFlow.cs:216:22:216:28 | access to local variable tainted : IQueryable [element] : String | GlobalDataFlow.cs:216:22:216:39 | call to method Select : IEnumerable [element] : String | provenance | | +| GlobalDataFlow.cs:216:22:216:39 | call to method Select : IEnumerable [element] : String | GlobalDataFlow.cs:216:22:216:47 | call to method First : String | provenance | | +| GlobalDataFlow.cs:216:22:216:47 | call to method First : String | GlobalDataFlow.cs:217:15:217:20 | access to local variable sink24 | provenance | | +| GlobalDataFlow.cs:218:22:218:28 | access to local variable tainted : IQueryable [element] : String | GlobalDataFlow.cs:215:71:215:71 | x : String | provenance | | +| GlobalDataFlow.cs:218:22:218:28 | access to local variable tainted : IQueryable [element] : String | GlobalDataFlow.cs:218:22:218:39 | call to method Select : IQueryable [element] : String | provenance | | +| GlobalDataFlow.cs:218:22:218:39 | call to method Select : IQueryable [element] : String | GlobalDataFlow.cs:218:22:218:47 | call to method First : String | provenance | | +| GlobalDataFlow.cs:218:22:218:47 | call to method First : String | GlobalDataFlow.cs:219:15:219:20 | access to local variable sink25 | provenance | | +| GlobalDataFlow.cs:220:22:220:28 | access to local variable tainted : IQueryable [element] : String | GlobalDataFlow.cs:220:22:220:49 | call to method Select : IEnumerable [element] : String | provenance | | +| GlobalDataFlow.cs:220:22:220:28 | access to local variable tainted : IQueryable [element] : String | GlobalDataFlow.cs:327:32:327:42 | sinkParam11 : String | provenance | | +| GlobalDataFlow.cs:220:22:220:49 | call to method Select : IEnumerable [element] : String | GlobalDataFlow.cs:220:22:220:57 | call to method First : String | provenance | | +| GlobalDataFlow.cs:220:22:220:57 | call to method First : String | GlobalDataFlow.cs:221:15:221:20 | access to local variable sink26 | provenance | | +| GlobalDataFlow.cs:241:20:241:49 | call to method Run : Task [property Result] : String | GlobalDataFlow.cs:242:22:242:25 | access to local variable task : Task [property Result] : String | provenance | | +| GlobalDataFlow.cs:241:20:241:49 | call to method Run : Task [property Result] : String | GlobalDataFlow.cs:244:28:244:31 | access to local variable task : Task [property Result] : String | provenance | | +| GlobalDataFlow.cs:241:35:241:48 | "taint source" : String | GlobalDataFlow.cs:241:20:241:49 | call to method Run : Task [property Result] : String | provenance | | +| GlobalDataFlow.cs:242:22:242:25 | access to local variable task : Task [property Result] : String | GlobalDataFlow.cs:242:22:242:32 | access to property Result : String | provenance | | +| GlobalDataFlow.cs:242:22:242:32 | access to property Result : String | GlobalDataFlow.cs:243:15:243:20 | access to local variable sink41 | provenance | | +| GlobalDataFlow.cs:244:22:244:31 | await ... : String | GlobalDataFlow.cs:245:15:245:20 | access to local variable sink42 | provenance | | +| GlobalDataFlow.cs:244:28:244:31 | access to local variable task : Task [property Result] : String | GlobalDataFlow.cs:244:22:244:31 | await ... : String | provenance | | +| GlobalDataFlow.cs:257:26:257:35 | sinkParam0 : String | GlobalDataFlow.cs:259:16:259:25 | access to parameter sinkParam0 : String | provenance | | +| GlobalDataFlow.cs:257:26:257:35 | sinkParam0 : String | GlobalDataFlow.cs:260:15:260:24 | access to parameter sinkParam0 | provenance | | +| GlobalDataFlow.cs:259:16:259:25 | access to parameter sinkParam0 : String | GlobalDataFlow.cs:257:26:257:35 | sinkParam0 : String | provenance | | +| GlobalDataFlow.cs:263:26:263:35 | sinkParam1 : String | GlobalDataFlow.cs:265:15:265:24 | access to parameter sinkParam1 | provenance | | +| GlobalDataFlow.cs:268:26:268:35 | sinkParam3 : String | GlobalDataFlow.cs:270:15:270:24 | access to parameter sinkParam3 | provenance | | +| GlobalDataFlow.cs:273:26:273:35 | sinkParam4 : String | GlobalDataFlow.cs:275:15:275:24 | access to parameter sinkParam4 | provenance | | +| GlobalDataFlow.cs:278:26:278:35 | sinkParam5 : String | GlobalDataFlow.cs:280:15:280:24 | access to parameter sinkParam5 | provenance | | +| GlobalDataFlow.cs:283:26:283:35 | sinkParam6 : String | GlobalDataFlow.cs:285:15:285:24 | access to parameter sinkParam6 | provenance | | +| GlobalDataFlow.cs:288:26:288:35 | sinkParam7 : String | GlobalDataFlow.cs:290:15:290:24 | access to parameter sinkParam7 | provenance | | +| GlobalDataFlow.cs:298:26:298:26 | x : String | GlobalDataFlow.cs:300:37:300:37 | access to parameter x : String | provenance | | +| GlobalDataFlow.cs:300:17:300:38 | call to method ApplyFunc : String | GlobalDataFlow.cs:301:16:301:41 | ... ? ... : ... : String | provenance | | +| GlobalDataFlow.cs:300:27:300:28 | x0 : String | GlobalDataFlow.cs:300:33:300:34 | access to parameter x0 : String | provenance | | +| GlobalDataFlow.cs:300:37:300:37 | access to parameter x : String | GlobalDataFlow.cs:300:17:300:38 | call to method ApplyFunc : String | provenance | | +| GlobalDataFlow.cs:300:37:300:37 | access to parameter x : String | GlobalDataFlow.cs:387:46:387:46 | x : String | provenance | | +| GlobalDataFlow.cs:304:32:304:32 | x : String | GlobalDataFlow.cs:306:9:306:13 | SSA def(y) : String | provenance | | +| GlobalDataFlow.cs:310:32:310:32 | x : String | GlobalDataFlow.cs:312:9:312:13 | SSA def(y) : String | provenance | | +| GlobalDataFlow.cs:315:31:315:40 | sinkParam8 : String | GlobalDataFlow.cs:317:15:317:24 | access to parameter sinkParam8 | provenance | | +| GlobalDataFlow.cs:321:32:321:41 | sinkParam9 : String | GlobalDataFlow.cs:323:15:323:24 | access to parameter sinkParam9 | provenance | | +| GlobalDataFlow.cs:327:32:327:42 | sinkParam11 : String | GlobalDataFlow.cs:329:15:329:25 | access to parameter sinkParam11 | provenance | | +| GlobalDataFlow.cs:341:16:341:29 | "taint source" : String | GlobalDataFlow.cs:157:21:157:25 | call to method Out : String | provenance | | +| GlobalDataFlow.cs:341:16:341:29 | "taint source" : String | GlobalDataFlow.cs:193:22:193:42 | object creation of type Lazy : Lazy [property Value] : String | provenance | | +| GlobalDataFlow.cs:346:9:346:26 | SSA def(x) : String | GlobalDataFlow.cs:160:20:160:24 | SSA def(sink7) : String | provenance | | +| GlobalDataFlow.cs:346:13:346:26 | "taint source" : String | GlobalDataFlow.cs:346:9:346:26 | SSA def(x) : String | provenance | | +| GlobalDataFlow.cs:351:9:351:26 | SSA def(x) : String | GlobalDataFlow.cs:163:20:163:24 | SSA def(sink8) : String | provenance | | +| GlobalDataFlow.cs:351:13:351:26 | "taint source" : String | GlobalDataFlow.cs:351:9:351:26 | SSA def(x) : String | provenance | | +| GlobalDataFlow.cs:357:22:357:35 | "taint source" : String | GlobalDataFlow.cs:165:22:165:31 | call to method OutYield : IEnumerable [element] : String | provenance | | +| GlobalDataFlow.cs:382:41:382:41 | x : String | GlobalDataFlow.cs:384:11:384:11 | access to parameter x : String | provenance | | +| GlobalDataFlow.cs:382:41:382:41 | x : String | GlobalDataFlow.cs:384:11:384:11 | access to parameter x : String | provenance | | +| GlobalDataFlow.cs:384:11:384:11 | access to parameter x : String | GlobalDataFlow.cs:54:15:54:15 | x : String | provenance | | +| GlobalDataFlow.cs:384:11:384:11 | access to parameter x : String | GlobalDataFlow.cs:268:26:268:35 | sinkParam3 : String | provenance | | +| GlobalDataFlow.cs:387:46:387:46 | x : String | GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | provenance | | +| GlobalDataFlow.cs:387:46:387:46 | x : String | GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | provenance | | +| GlobalDataFlow.cs:387:46:387:46 | x : String | GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | provenance | | +| GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | GlobalDataFlow.cs:298:26:298:26 | x : String | provenance | | +| GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | GlobalDataFlow.cs:298:26:298:26 | x : String | provenance | | +| GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | GlobalDataFlow.cs:300:27:300:28 | x0 : String | provenance | | +| GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | GlobalDataFlow.cs:389:16:389:19 | delegate call : String | provenance | | +| GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | GlobalDataFlow.cs:389:16:389:19 | delegate call : String | provenance | | +| GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | GlobalDataFlow.cs:389:16:389:19 | delegate call : String | provenance | | +| GlobalDataFlow.cs:396:52:396:52 | x : String | GlobalDataFlow.cs:398:11:398:11 | access to parameter x : String | provenance | | +| GlobalDataFlow.cs:396:52:396:52 | x : String | GlobalDataFlow.cs:398:11:398:11 | access to parameter x : String | provenance | | +| GlobalDataFlow.cs:396:52:396:52 | x : String | GlobalDataFlow.cs:398:11:398:11 | access to parameter x : String | provenance | | +| GlobalDataFlow.cs:398:11:398:11 | access to parameter x : String | GlobalDataFlow.cs:57:37:57:37 | x : String | provenance | | +| GlobalDataFlow.cs:398:11:398:11 | access to parameter x : String | GlobalDataFlow.cs:278:26:278:35 | sinkParam5 : String | provenance | | +| GlobalDataFlow.cs:398:11:398:11 | access to parameter x : String | GlobalDataFlow.cs:283:26:283:35 | sinkParam6 : String | provenance | | +| GlobalDataFlow.cs:401:39:401:45 | tainted : String | GlobalDataFlow.cs:404:15:404:20 | access to local variable sink11 | provenance | | +| GlobalDataFlow.cs:401:39:401:45 | tainted : String | GlobalDataFlow.cs:405:16:405:21 | access to local variable sink11 : String | provenance | | +| GlobalDataFlow.cs:405:16:405:21 | access to local variable sink11 : String | GlobalDataFlow.cs:167:22:167:43 | call to method TaintedParam : String | provenance | | +| GlobalDataFlow.cs:427:9:427:11 | value : String | GlobalDataFlow.cs:427:41:427:46 | access to local variable sink20 | provenance | | +| GlobalDataFlow.cs:438:22:438:35 | "taint source" : String | GlobalDataFlow.cs:201:22:201:32 | access to property OutProperty : String | provenance | | +| GlobalDataFlow.cs:457:20:457:49 | call to method Run : Task [property Result] : String | GlobalDataFlow.cs:458:25:458:28 | access to local variable task : Task [property Result] : String | provenance | | +| GlobalDataFlow.cs:457:35:457:48 | "taint source" : String | GlobalDataFlow.cs:457:20:457:49 | call to method Run : Task [property Result] : String | provenance | | +| GlobalDataFlow.cs:458:25:458:28 | access to local variable task : Task [property Result] : String | GlobalDataFlow.cs:458:25:458:50 | call to method ConfigureAwait : ConfiguredTaskAwaitable [synthetic m_configuredTaskAwaiter, synthetic m_task_configured_task_awaitable, property Result] : String | provenance | | +| GlobalDataFlow.cs:458:25:458:50 | call to method ConfigureAwait : ConfiguredTaskAwaitable [synthetic m_configuredTaskAwaiter, synthetic m_task_configured_task_awaitable, property Result] : String | GlobalDataFlow.cs:459:23:459:31 | access to local variable awaitable : ConfiguredTaskAwaitable [synthetic m_configuredTaskAwaiter, synthetic m_task_configured_task_awaitable, property Result] : String | provenance | | +| GlobalDataFlow.cs:459:23:459:31 | access to local variable awaitable : ConfiguredTaskAwaitable [synthetic m_configuredTaskAwaiter, synthetic m_task_configured_task_awaitable, property Result] : String | GlobalDataFlow.cs:459:23:459:44 | call to method GetAwaiter : ConfiguredTaskAwaitable.ConfiguredTaskAwaiter [synthetic m_task_configured_task_awaitable, property Result] : String | provenance | | +| GlobalDataFlow.cs:459:23:459:44 | call to method GetAwaiter : ConfiguredTaskAwaitable.ConfiguredTaskAwaiter [synthetic m_task_configured_task_awaitable, property Result] : String | GlobalDataFlow.cs:460:22:460:28 | access to local variable awaiter : ConfiguredTaskAwaitable.ConfiguredTaskAwaiter [synthetic m_task_configured_task_awaitable, property Result] : String | provenance | | +| GlobalDataFlow.cs:460:22:460:28 | access to local variable awaiter : ConfiguredTaskAwaitable.ConfiguredTaskAwaiter [synthetic m_task_configured_task_awaitable, property Result] : String | GlobalDataFlow.cs:460:22:460:40 | call to method GetResult : String | provenance | | +| GlobalDataFlow.cs:460:22:460:40 | call to method GetResult : String | GlobalDataFlow.cs:461:15:461:20 | access to local variable sink45 | provenance | | +| GlobalDataFlow.cs:466:53:466:55 | arg : String | GlobalDataFlow.cs:470:15:470:17 | access to parameter arg : String | provenance | | +| 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:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:490:25:490:26 | [post] access to local variable x1 : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:490:30:490:31 | [post] access to local variable x2 : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:497:31:497:32 | [post] access to local variable y1 : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:497:36:497:37 | [post] access to local variable y2 : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:497:42:497:43 | [post] access to local variable y3 : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:508:33:508:33 | [post] access to local variable x : SubSimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:515:20:515:20 | [post] access to parameter x : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:515:25:515:25 | [post] access to local variable y : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:527:20:527:20 | [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:528:20:528:20 | [post] access to local variable y : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:529:18:529:18 | [post] access to local variable z : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:538:20:538:21 | [post] access to parameter sc : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:546:24:546:24 | [post] access to local variable x : 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 | | +| GlobalDataFlow.cs:491:15:491:16 | access to local variable x1 : SimpleClass [field field] : String | GlobalDataFlow.cs:491:15:491:22 | access to field field | provenance | | +| GlobalDataFlow.cs:492:15:492:16 | access to local variable x2 : SimpleClass [field field] : String | GlobalDataFlow.cs:492:15:492:22 | access to field field | provenance | | +| GlobalDataFlow.cs:497:31:497:32 | [post] access to local variable y1 : SimpleClass [field field] : String | GlobalDataFlow.cs:498:15:498:16 | access to local variable y1 : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:497:36:497:37 | [post] access to local variable y2 : SimpleClass [field field] : String | GlobalDataFlow.cs:499:15:499:16 | access to local variable y2 : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:497:42:497:43 | [post] access to local variable y3 : SimpleClass [field field] : String | GlobalDataFlow.cs:500:15:500:16 | access to local variable y3 : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:498:15:498:16 | access to local variable y1 : SimpleClass [field field] : String | GlobalDataFlow.cs:498:15:498:22 | access to field field | provenance | | +| GlobalDataFlow.cs:499:15:499:16 | access to local variable y2 : SimpleClass [field field] : String | GlobalDataFlow.cs:499:15:499:22 | access to field field | provenance | | +| GlobalDataFlow.cs:500:15:500:16 | access to local variable y3 : SimpleClass [field field] : String | GlobalDataFlow.cs:500:15:500:22 | access to field field | provenance | | +| GlobalDataFlow.cs:508:33:508:33 | [post] access to local variable x : SubSimpleClass [field field] : String | GlobalDataFlow.cs:509:15:509:15 | access to local variable x : SubSimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:509:15:509:15 | access to local variable x : SubSimpleClass [field field] : String | GlobalDataFlow.cs:509:15:509:21 | access to field field | provenance | | +| GlobalDataFlow.cs:515:20:515:20 | [post] access to parameter x : SimpleClass [field field] : String | GlobalDataFlow.cs:516:15:516:15 | access to parameter x : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:515:25:515:25 | [post] access to local variable y : SimpleClass [field field] : String | GlobalDataFlow.cs:517:15:517:15 | access to local variable y : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:516:15:516:15 | access to parameter x : SimpleClass [field field] : String | GlobalDataFlow.cs:516:15:516:21 | access to field field | provenance | | +| GlobalDataFlow.cs:517:15:517:15 | access to local variable y : SimpleClass [field field] : String | GlobalDataFlow.cs:517:15:517:21 | access to field field | provenance | | +| GlobalDataFlow.cs:527:20:527:20 | [post] access to local variable x : SimpleClass [field field] : String | GlobalDataFlow.cs:531:15:531:15 | access to local variable x : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:528:20:528:20 | [post] access to local variable y : SimpleClass [field field] : String | GlobalDataFlow.cs:532:15:532:15 | access to local variable y : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:529:18:529:18 | [post] access to local variable z : SimpleClass [field field] : String | GlobalDataFlow.cs:533:15:533:15 | access to local variable z : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:531:15:531:15 | access to local variable x : SimpleClass [field field] : String | GlobalDataFlow.cs:531:15:531:21 | access to field field | provenance | | +| GlobalDataFlow.cs:532:15:532:15 | access to local variable y : SimpleClass [field field] : String | GlobalDataFlow.cs:532:15:532:21 | access to field field | provenance | | +| GlobalDataFlow.cs:533:15:533:15 | access to local variable z : SimpleClass [field field] : String | GlobalDataFlow.cs:533:15:533:21 | access to field field | provenance | | +| GlobalDataFlow.cs:538:20:538:21 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:539:15:539:16 | access to parameter sc : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:539:15:539:16 | access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:539:15:539:22 | access to field field | provenance | | +| GlobalDataFlow.cs:546:24:546:24 | [post] access to local variable x : SimpleClass [field field] : String | GlobalDataFlow.cs:547:15:547:15 | access to local variable x : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:547:15:547:15 | access to local variable x : SimpleClass [field field] : String | GlobalDataFlow.cs:547:15:547:21 | access to field field | provenance | | +| GlobalDataFlow.cs:553:71:553:71 | e : null [element] : String | GlobalDataFlow.cs:556:27:556:27 | access to parameter e : null [element] : String | provenance | | +| GlobalDataFlow.cs:556:22:556:22 | SSA def(x) : String | GlobalDataFlow.cs:558:46:558:46 | access to local variable x : String | provenance | | +| GlobalDataFlow.cs:556:27:556:27 | access to parameter e : null [element] : String | GlobalDataFlow.cs:556:22:556:22 | SSA def(x) : String | provenance | | +| 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 | | +| Splitting.cs:3:28:3:34 | tainted : String | Splitting.cs:8:24:8:30 | [b (line 3): false] access to parameter tainted : String | provenance | | +| Splitting.cs:3:28:3:34 | tainted : String | Splitting.cs:8:24:8:30 | [b (line 3): true] access to parameter tainted : String | provenance | | +| Splitting.cs:8:17:8:31 | [b (line 3): false] call to method Return : String | Splitting.cs:9:15:9:15 | [b (line 3): false] access to local variable x | provenance | | +| Splitting.cs:8:17:8:31 | [b (line 3): true] call to method Return : String | Splitting.cs:9:15:9:15 | [b (line 3): true] access to local variable x | provenance | | +| Splitting.cs:8:17:8:31 | [b (line 3): true] call to method Return : String | Splitting.cs:11:19:11:19 | access to local variable x | provenance | | +| Splitting.cs:8:24:8:30 | [b (line 3): false] access to parameter tainted : String | Splitting.cs:8:17:8:31 | [b (line 3): false] call to method Return : String | provenance | | +| Splitting.cs:8:24:8:30 | [b (line 3): false] access to parameter tainted : String | Splitting.cs:16:26:16:26 | x : String | provenance | | +| Splitting.cs:8:24:8:30 | [b (line 3): true] access to parameter tainted : String | Splitting.cs:8:17:8:31 | [b (line 3): true] call to method Return : String | provenance | | +| Splitting.cs:8:24:8:30 | [b (line 3): true] access to parameter tainted : String | Splitting.cs:16:26:16:26 | x : String | provenance | | +| Splitting.cs:16:26:16:26 | x : String | Splitting.cs:16:32:16:32 | access to parameter x : String | provenance | | +| Splitting.cs:18:24:18:24 | s : String | Splitting.cs:20:29:20:29 | access to parameter s : String | provenance | | +| Splitting.cs:20:29:20:29 | access to parameter s : String | Splitting.cs:16:26:16:26 | x : String | provenance | | +| Splitting.cs:20:29:20:29 | access to parameter s : String | Splitting.cs:20:22:20:30 | call to method Return : String | provenance | | +| Splitting.cs:21:9:21:11 | value : String | Splitting.cs:21:28:21:32 | access to parameter value : String | provenance | | +| Splitting.cs:21:28:21:32 | access to parameter value : String | Splitting.cs:16:26:16:26 | x : String | provenance | | +| Splitting.cs:21:28:21:32 | access to parameter value : String | Splitting.cs:21:21:21:33 | call to method Return | provenance | | +| Splitting.cs:24:28:24:34 | tainted : String | Splitting.cs:30:17:30:23 | [b (line 24): false] access to parameter tainted : String | provenance | | +| Splitting.cs:24:28:24:34 | tainted : String | Splitting.cs:30:17:30:23 | [b (line 24): true] access to parameter tainted : String | provenance | | +| Splitting.cs:24:28:24:34 | tainted : String | Splitting.cs:31:19:31:25 | [b (line 24): false] access to parameter tainted : String | provenance | | +| Splitting.cs:24:28:24:34 | tainted : String | Splitting.cs:31:19:31:25 | [b (line 24): true] access to parameter tainted : String | provenance | | +| Splitting.cs:30:17:30:23 | [b (line 24): false] access to parameter tainted : String | Splitting.cs:21:9:21:11 | value : String | provenance | | +| Splitting.cs:30:17:30:23 | [b (line 24): true] access to parameter tainted : String | Splitting.cs:21:9:21:11 | value : String | provenance | | +| Splitting.cs:31:17:31:26 | [b (line 24): false] dynamic access to element : String | Splitting.cs:32:15:32:15 | [b (line 24): false] access to local variable x | provenance | | +| Splitting.cs:31:17:31:26 | [b (line 24): true] dynamic access to element : String | Splitting.cs:32:15:32:15 | [b (line 24): true] access to local variable x | provenance | | +| Splitting.cs:31:17:31:26 | [b (line 24): true] dynamic access to element : String | Splitting.cs:34:19:34:19 | access to local variable x | provenance | | +| Splitting.cs:31:19:31:25 | [b (line 24): false] access to parameter tainted : String | Splitting.cs:18:24:18:24 | s : String | provenance | | +| Splitting.cs:31:19:31:25 | [b (line 24): false] access to parameter tainted : String | Splitting.cs:31:17:31:26 | [b (line 24): false] dynamic access to element : String | provenance | | +| Splitting.cs:31:19:31:25 | [b (line 24): true] access to parameter tainted : String | Splitting.cs:18:24:18:24 | s : String | provenance | | +| Splitting.cs:31:19:31:25 | [b (line 24): true] access to parameter tainted : String | Splitting.cs:31:17:31:26 | [b (line 24): true] dynamic access to element : String | provenance | | +| Splitting.cs:39:21:39:34 | [b (line 37): true] "taint source" : String | Splitting.cs:41:19:41:19 | access to local variable s | provenance | | +| Splitting.cs:48:36:48:49 | "taint source" : String | Splitting.cs:50:19:50:19 | access to local variable s | provenance | | +| Splitting.cs:48:36:48:49 | "taint source" : String | Splitting.cs:52:19:52:19 | access to local variable s | provenance | | nodes | Capture.cs:7:20:7:26 | tainted : String | semmle.label | tainted : String | | Capture.cs:12:19:12:24 | access to local variable sink27 | semmle.label | access to local variable sink27 | diff --git a/csharp/ql/test/library-tests/dataflow/global/TaintTrackingPath.expected b/csharp/ql/test/library-tests/dataflow/global/TaintTrackingPath.expected index 8dd706eb671..ace244f6961 100644 --- a/csharp/ql/test/library-tests/dataflow/global/TaintTrackingPath.expected +++ b/csharp/ql/test/library-tests/dataflow/global/TaintTrackingPath.expected @@ -1,387 +1,387 @@ edges -| Capture.cs:7:20:7:26 | tainted : String | Capture.cs:12:19:12:24 | access to local variable sink27 | -| Capture.cs:7:20:7:26 | tainted : String | Capture.cs:21:23:21:28 | access to local variable sink28 | -| Capture.cs:7:20:7:26 | tainted : String | Capture.cs:30:19:30:24 | access to local variable sink29 | -| Capture.cs:7:20:7:26 | tainted : String | Capture.cs:61:36:61:42 | access to parameter tainted : String | -| Capture.cs:50:50:50:55 | sink39 : String | Capture.cs:57:27:57:32 | access to parameter sink39 | -| Capture.cs:61:36:61:42 | access to parameter tainted : String | Capture.cs:50:50:50:55 | sink39 : String | -| Capture.cs:69:13:69:35 | SSA def(sink30) : String | Capture.cs:72:15:72:20 | access to local variable sink30 | -| Capture.cs:69:22:69:35 | "taint source" : String | Capture.cs:69:13:69:35 | SSA def(sink30) : String | -| Capture.cs:79:17:79:39 | SSA def(sink31) : String | Capture.cs:84:15:84:20 | access to local variable sink31 | -| Capture.cs:79:26:79:39 | "taint source" : String | Capture.cs:79:17:79:39 | SSA def(sink31) : String | -| Capture.cs:89:13:89:35 | SSA def(sink32) : String | Capture.cs:93:15:93:20 | access to local variable sink32 | -| Capture.cs:89:22:89:35 | "taint source" : String | Capture.cs:89:13:89:35 | SSA def(sink32) : String | -| Capture.cs:115:17:115:39 | SSA def(sink40) : String | Capture.cs:122:15:122:20 | access to local variable sink40 | -| Capture.cs:115:26:115:39 | "taint source" : String | Capture.cs:115:17:115:39 | SSA def(sink40) : String | -| Capture.cs:125:25:125:31 | tainted : String | Capture.cs:133:15:133:20 | access to local variable sink33 | -| Capture.cs:125:25:125:31 | tainted : String | Capture.cs:145:15:145:20 | access to local variable sink34 | -| Capture.cs:125:25:125:31 | tainted : String | Capture.cs:154:15:154:20 | access to local variable sink35 | -| Capture.cs:125:25:125:31 | tainted : String | Capture.cs:160:22:160:38 | call to local function CaptureThrough4 : String | -| Capture.cs:125:25:125:31 | tainted : String | Capture.cs:168:25:168:31 | access to parameter tainted : String | -| Capture.cs:125:25:125:31 | tainted : String | Capture.cs:194:25:194:31 | access to parameter tainted : String | -| Capture.cs:160:22:160:38 | call to local function CaptureThrough4 : String | Capture.cs:161:15:161:20 | access to local variable sink36 | -| Capture.cs:168:25:168:31 | access to parameter tainted : String | Capture.cs:169:15:169:20 | access to local variable sink37 | -| Capture.cs:188:26:188:26 | s : String | Capture.cs:191:20:191:22 | call to local function M : String | -| Capture.cs:194:22:194:32 | call to local function Id : String | Capture.cs:195:15:195:20 | access to local variable sink38 | -| Capture.cs:194:25:194:31 | access to parameter tainted : String | Capture.cs:188:26:188:26 | s : String | -| Capture.cs:194:25:194:31 | access to parameter tainted : String | Capture.cs:194:22:194:32 | call to local function Id : String | -| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:19:15:19:29 | access to field SinkField0 | -| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 | -| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:257:26:257:35 | sinkParam0 : String | -| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:263:26:263:35 | sinkParam1 : String | -| GlobalDataFlow.cs:45:30:45:39 | sinkParam2 : String | GlobalDataFlow.cs:45:50:45:59 | access to parameter sinkParam2 | -| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:45:30:45:39 | sinkParam2 : String | -| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | GlobalDataFlow.cs:382:41:382:41 | x : String | -| GlobalDataFlow.cs:54:15:54:15 | x : String | GlobalDataFlow.cs:54:24:54:24 | access to parameter x : String | -| GlobalDataFlow.cs:54:24:54:24 | access to parameter x : String | GlobalDataFlow.cs:273:26:273:35 | sinkParam4 : String | -| GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:382:41:382:41 | x : String | -| GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | GlobalDataFlow.cs:396:52:396:52 | x : String | -| GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:396:52:396:52 | x : String | -| GlobalDataFlow.cs:57:37:57:37 | x : String | GlobalDataFlow.cs:57:46:57:46 | access to parameter x : String | -| GlobalDataFlow.cs:57:46:57:46 | access to parameter x : String | GlobalDataFlow.cs:288:26:288:35 | sinkParam7 : String | -| GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:396:52:396:52 | x : String | -| GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | GlobalDataFlow.cs:427:9:427:11 | value : String | -| GlobalDataFlow.cs:71:21:71:46 | call to method Return : String | GlobalDataFlow.cs:72:15:72:19 | access to local variable sink0 | -| GlobalDataFlow.cs:71:21:71:46 | call to method Return : String | GlobalDataFlow.cs:73:94:73:98 | access to local variable sink0 : String | -| GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:21:71:46 | call to method Return : String | -| GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:298:26:298:26 | x : String | -| GlobalDataFlow.cs:73:21:73:101 | (...) ... : String | GlobalDataFlow.cs:74:15:74:19 | access to local variable sink1 | -| GlobalDataFlow.cs:73:21:73:101 | (...) ... : String | GlobalDataFlow.cs:76:19:76:23 | access to local variable sink1 : String | -| GlobalDataFlow.cs:73:29:73:101 | call to method Invoke : String | GlobalDataFlow.cs:73:21:73:101 | (...) ... : String | -| GlobalDataFlow.cs:73:94:73:98 | access to local variable sink0 : String | GlobalDataFlow.cs:73:29:73:101 | call to method Invoke : String | -| GlobalDataFlow.cs:73:94:73:98 | access to local variable sink0 : String | GlobalDataFlow.cs:298:26:298:26 | x : String | -| GlobalDataFlow.cs:76:19:76:23 | access to local variable sink1 : String | GlobalDataFlow.cs:76:30:76:34 | SSA def(sink2) : String | -| GlobalDataFlow.cs:76:19:76:23 | access to local variable sink1 : String | GlobalDataFlow.cs:304:32:304:32 | x : String | -| GlobalDataFlow.cs:76:30:76:34 | SSA def(sink2) : String | GlobalDataFlow.cs:77:15:77:19 | access to local variable sink2 | -| GlobalDataFlow.cs:76:30:76:34 | SSA def(sink2) : String | GlobalDataFlow.cs:79:19:79:23 | access to local variable sink2 : String | -| GlobalDataFlow.cs:79:19:79:23 | access to local variable sink2 : String | GlobalDataFlow.cs:79:30:79:34 | SSA def(sink3) : String | -| GlobalDataFlow.cs:79:19:79:23 | access to local variable sink2 : String | GlobalDataFlow.cs:310:32:310:32 | x : String | -| GlobalDataFlow.cs:79:30:79:34 | SSA def(sink3) : String | GlobalDataFlow.cs:80:15:80:19 | access to local variable sink3 | -| GlobalDataFlow.cs:79:30:79:34 | SSA def(sink3) : String | GlobalDataFlow.cs:81:59:81:63 | access to local variable sink3 : String | -| GlobalDataFlow.cs:79:30:79:34 | SSA def(sink3) : String | GlobalDataFlow.cs:139:29:139:33 | access to local variable sink3 : String | -| GlobalDataFlow.cs:81:22:81:85 | call to method SelectEven : IEnumerable [element] : String | GlobalDataFlow.cs:81:22:81:93 | call to method First : String | -| GlobalDataFlow.cs:81:22:81:93 | call to method First : String | GlobalDataFlow.cs:82:15:82:20 | access to local variable sink13 | -| GlobalDataFlow.cs:81:22:81:93 | call to method First : String | GlobalDataFlow.cs:83:59:83:64 | access to local variable sink13 : String | -| GlobalDataFlow.cs:81:23:81:65 | (...) ... : null [element] : String | GlobalDataFlow.cs:81:22:81:85 | call to method SelectEven : IEnumerable [element] : String | -| GlobalDataFlow.cs:81:23:81:65 | (...) ... : null [element] : String | GlobalDataFlow.cs:553:71:553:71 | e : null [element] : String | -| GlobalDataFlow.cs:81:57:81:65 | { ..., ... } : null [element] : String | GlobalDataFlow.cs:81:23:81:65 | (...) ... : null [element] : String | -| GlobalDataFlow.cs:81:59:81:63 | access to local variable sink3 : String | GlobalDataFlow.cs:81:57:81:65 | { ..., ... } : null [element] : String | -| GlobalDataFlow.cs:81:79:81:79 | x : String | GlobalDataFlow.cs:81:84:81:84 | access to parameter x : String | -| GlobalDataFlow.cs:83:22:83:87 | call to method Select : IEnumerable [element] : String | GlobalDataFlow.cs:83:22:83:95 | call to method First : String | -| GlobalDataFlow.cs:83:22:83:95 | call to method First : String | GlobalDataFlow.cs:84:15:84:20 | access to local variable sink14 | -| GlobalDataFlow.cs:83:22:83:95 | call to method First : String | GlobalDataFlow.cs:85:59:85:64 | access to local variable sink14 : String | -| GlobalDataFlow.cs:83:22:83:95 | call to method First : String | GlobalDataFlow.cs:89:59:89:64 | access to local variable sink14 : String | -| GlobalDataFlow.cs:83:22:83:95 | call to method First : String | GlobalDataFlow.cs:91:75:91:80 | access to local variable sink14 : String | -| GlobalDataFlow.cs:83:23:83:66 | (...) ... : null [element] : String | GlobalDataFlow.cs:83:22:83:87 | call to method Select : IEnumerable [element] : String | -| GlobalDataFlow.cs:83:23:83:66 | (...) ... : null [element] : String | GlobalDataFlow.cs:315:31:315:40 | sinkParam8 : String | -| GlobalDataFlow.cs:83:57:83:66 | { ..., ... } : null [element] : String | GlobalDataFlow.cs:83:23:83:66 | (...) ... : null [element] : String | -| GlobalDataFlow.cs:83:59:83:64 | access to local variable sink13 : String | GlobalDataFlow.cs:83:57:83:66 | { ..., ... } : null [element] : String | -| GlobalDataFlow.cs:85:22:85:128 | call to method Zip : IEnumerable [element] : String | GlobalDataFlow.cs:85:22:85:136 | call to method First : String | -| GlobalDataFlow.cs:85:22:85:136 | call to method First : String | GlobalDataFlow.cs:86:15:86:20 | access to local variable sink15 | -| GlobalDataFlow.cs:85:22:85:136 | call to method First : String | GlobalDataFlow.cs:87:106:87:111 | access to local variable sink15 : String | -| GlobalDataFlow.cs:85:23:85:66 | (...) ... : null [element] : String | GlobalDataFlow.cs:85:22:85:128 | call to method Zip : IEnumerable [element] : String | -| GlobalDataFlow.cs:85:57:85:66 | { ..., ... } : null [element] : String | GlobalDataFlow.cs:85:23:85:66 | (...) ... : null [element] : String | -| GlobalDataFlow.cs:85:59:85:64 | access to local variable sink14 : String | GlobalDataFlow.cs:85:57:85:66 | { ..., ... } : null [element] : String | -| GlobalDataFlow.cs:87:22:87:128 | call to method Zip : IEnumerable [element] : String | GlobalDataFlow.cs:87:22:87:136 | call to method First : String | -| GlobalDataFlow.cs:87:22:87:136 | call to method First : String | GlobalDataFlow.cs:88:15:88:20 | access to local variable sink16 | -| GlobalDataFlow.cs:87:70:87:113 | (...) ... : null [element] : String | GlobalDataFlow.cs:87:22:87:128 | call to method Zip : IEnumerable [element] : String | -| GlobalDataFlow.cs:87:104:87:113 | { ..., ... } : null [element] : String | GlobalDataFlow.cs:87:70:87:113 | (...) ... : null [element] : String | -| GlobalDataFlow.cs:87:106:87:111 | access to local variable sink15 : String | GlobalDataFlow.cs:87:104:87:113 | { ..., ... } : null [element] : String | -| GlobalDataFlow.cs:89:22:89:110 | call to method Aggregate : String | GlobalDataFlow.cs:90:15:90:20 | access to local variable sink17 | -| GlobalDataFlow.cs:89:23:89:66 | (...) ... : null [element] : String | GlobalDataFlow.cs:89:22:89:110 | call to method Aggregate : String | -| GlobalDataFlow.cs:89:57:89:66 | { ..., ... } : null [element] : String | GlobalDataFlow.cs:89:23:89:66 | (...) ... : null [element] : String | -| GlobalDataFlow.cs:89:59:89:64 | access to local variable sink14 : String | GlobalDataFlow.cs:89:57:89:66 | { ..., ... } : null [element] : String | -| GlobalDataFlow.cs:91:22:91:110 | call to method Aggregate : String | GlobalDataFlow.cs:92:15:92:20 | access to local variable sink18 | -| GlobalDataFlow.cs:91:22:91:110 | call to method Aggregate : String | GlobalDataFlow.cs:94:24:94:29 | access to local variable sink18 : String | -| GlobalDataFlow.cs:91:22:91:110 | call to method Aggregate : String | GlobalDataFlow.cs:97:23:97:28 | access to local variable sink18 : String | -| GlobalDataFlow.cs:91:22:91:110 | call to method Aggregate : String | GlobalDataFlow.cs:100:24:100:29 | access to local variable sink18 : String | -| GlobalDataFlow.cs:91:75:91:80 | access to local variable sink14 : String | GlobalDataFlow.cs:91:22:91:110 | call to method Aggregate : String | -| GlobalDataFlow.cs:94:24:94:29 | access to local variable sink18 : String | GlobalDataFlow.cs:94:36:94:41 | SSA def(sink21) : Int32 | -| GlobalDataFlow.cs:94:36:94:41 | SSA def(sink21) : Int32 | GlobalDataFlow.cs:95:15:95:20 | access to local variable sink21 | -| GlobalDataFlow.cs:97:23:97:28 | access to local variable sink18 : String | GlobalDataFlow.cs:97:35:97:40 | SSA def(sink22) : Boolean | -| GlobalDataFlow.cs:97:35:97:40 | SSA def(sink22) : Boolean | GlobalDataFlow.cs:98:15:98:20 | access to local variable sink22 | -| GlobalDataFlow.cs:100:24:100:29 | access to local variable sink18 : String | GlobalDataFlow.cs:100:82:100:88 | SSA def(sink21b) : Int32 | -| GlobalDataFlow.cs:100:82:100:88 | SSA def(sink21b) : Int32 | GlobalDataFlow.cs:101:15:101:21 | access to local variable sink21b | -| GlobalDataFlow.cs:138:40:138:40 | x : String | GlobalDataFlow.cs:138:63:138:63 | access to parameter x : String | -| GlobalDataFlow.cs:138:63:138:63 | access to parameter x : String | GlobalDataFlow.cs:138:45:138:64 | call to method ApplyFunc : String | -| GlobalDataFlow.cs:138:63:138:63 | access to parameter x : String | GlobalDataFlow.cs:387:46:387:46 | x : String | -| GlobalDataFlow.cs:139:21:139:34 | delegate call : String | GlobalDataFlow.cs:140:15:140:19 | access to local variable sink4 | -| GlobalDataFlow.cs:139:21:139:34 | delegate call : String | GlobalDataFlow.cs:147:39:147:43 | access to local variable sink4 : String | -| GlobalDataFlow.cs:139:29:139:33 | access to local variable sink3 : String | GlobalDataFlow.cs:138:40:138:40 | x : String | -| GlobalDataFlow.cs:139:29:139:33 | access to local variable sink3 : String | GlobalDataFlow.cs:139:21:139:34 | delegate call : String | -| GlobalDataFlow.cs:147:21:147:44 | call to method ApplyFunc : String | GlobalDataFlow.cs:148:15:148:19 | access to local variable sink5 | -| GlobalDataFlow.cs:147:39:147:43 | access to local variable sink4 : String | GlobalDataFlow.cs:147:21:147:44 | call to method ApplyFunc : String | -| GlobalDataFlow.cs:147:39:147:43 | access to local variable sink4 : String | GlobalDataFlow.cs:387:46:387:46 | x : String | -| GlobalDataFlow.cs:157:21:157:25 | call to method Out : String | GlobalDataFlow.cs:158:15:158:19 | access to local variable sink6 | -| GlobalDataFlow.cs:160:20:160:24 | SSA def(sink7) : String | GlobalDataFlow.cs:161:15:161:19 | access to local variable sink7 | -| GlobalDataFlow.cs:163:20:163:24 | SSA def(sink8) : String | GlobalDataFlow.cs:164:15:164:19 | access to local variable sink8 | -| GlobalDataFlow.cs:165:22:165:31 | call to method OutYield : IEnumerable [element] : String | GlobalDataFlow.cs:165:22:165:39 | call to method First : String | -| GlobalDataFlow.cs:165:22:165:39 | call to method First : String | GlobalDataFlow.cs:166:15:166:20 | access to local variable sink12 | -| GlobalDataFlow.cs:167:22:167:43 | call to method TaintedParam : String | GlobalDataFlow.cs:168:15:168:20 | access to local variable sink23 | -| GlobalDataFlow.cs:183:35:183:48 | "taint source" : String | GlobalDataFlow.cs:184:21:184:26 | delegate call : String | -| GlobalDataFlow.cs:184:21:184:26 | delegate call : String | GlobalDataFlow.cs:185:15:185:19 | access to local variable sink9 | -| GlobalDataFlow.cs:193:22:193:42 | object creation of type Lazy : Lazy [property Value] : String | GlobalDataFlow.cs:193:22:193:48 | access to property Value : String | -| GlobalDataFlow.cs:193:22:193:48 | access to property Value : String | GlobalDataFlow.cs:194:15:194:20 | access to local variable sink10 | -| GlobalDataFlow.cs:201:22:201:32 | access to property OutProperty : String | GlobalDataFlow.cs:202:15:202:20 | access to local variable sink19 | -| GlobalDataFlow.cs:211:38:211:61 | array creation of type String[] : null [element] : String | GlobalDataFlow.cs:211:38:211:75 | call to method AsQueryable : IQueryable [element] : String | -| GlobalDataFlow.cs:211:38:211:75 | call to method AsQueryable : IQueryable [element] : String | GlobalDataFlow.cs:216:22:216:28 | access to local variable tainted : IQueryable [element] : String | -| GlobalDataFlow.cs:211:38:211:75 | call to method AsQueryable : IQueryable [element] : String | GlobalDataFlow.cs:218:22:218:28 | access to local variable tainted : IQueryable [element] : String | -| GlobalDataFlow.cs:211:38:211:75 | call to method AsQueryable : IQueryable [element] : String | GlobalDataFlow.cs:220:22:220:28 | access to local variable tainted : IQueryable [element] : String | -| GlobalDataFlow.cs:211:44:211:61 | { ..., ... } : null [element] : String | GlobalDataFlow.cs:211:38:211:61 | array creation of type String[] : null [element] : String | -| GlobalDataFlow.cs:211:46:211:59 | "taint source" : String | GlobalDataFlow.cs:211:44:211:61 | { ..., ... } : null [element] : String | -| GlobalDataFlow.cs:214:35:214:45 | sinkParam10 : String | GlobalDataFlow.cs:214:58:214:68 | access to parameter sinkParam10 | -| GlobalDataFlow.cs:215:71:215:71 | x : String | GlobalDataFlow.cs:215:89:215:89 | access to parameter x : String | -| GlobalDataFlow.cs:215:89:215:89 | access to parameter x : String | GlobalDataFlow.cs:321:32:321:41 | sinkParam9 : String | -| GlobalDataFlow.cs:216:22:216:28 | access to local variable tainted : IQueryable [element] : String | GlobalDataFlow.cs:214:35:214:45 | sinkParam10 : String | -| GlobalDataFlow.cs:216:22:216:28 | access to local variable tainted : IQueryable [element] : String | GlobalDataFlow.cs:216:22:216:39 | call to method Select : IEnumerable [element] : String | -| GlobalDataFlow.cs:216:22:216:39 | call to method Select : IEnumerable [element] : String | GlobalDataFlow.cs:216:22:216:47 | call to method First : String | -| GlobalDataFlow.cs:216:22:216:47 | call to method First : String | GlobalDataFlow.cs:217:15:217:20 | access to local variable sink24 | -| GlobalDataFlow.cs:218:22:218:28 | access to local variable tainted : IQueryable [element] : String | GlobalDataFlow.cs:215:71:215:71 | x : String | -| GlobalDataFlow.cs:218:22:218:28 | access to local variable tainted : IQueryable [element] : String | GlobalDataFlow.cs:218:22:218:39 | call to method Select : IQueryable [element] : String | -| GlobalDataFlow.cs:218:22:218:39 | call to method Select : IQueryable [element] : String | GlobalDataFlow.cs:218:22:218:47 | call to method First : String | -| GlobalDataFlow.cs:218:22:218:47 | call to method First : String | GlobalDataFlow.cs:219:15:219:20 | access to local variable sink25 | -| GlobalDataFlow.cs:220:22:220:28 | access to local variable tainted : IQueryable [element] : String | GlobalDataFlow.cs:220:22:220:49 | call to method Select : IEnumerable [element] : String | -| GlobalDataFlow.cs:220:22:220:28 | access to local variable tainted : IQueryable [element] : String | GlobalDataFlow.cs:327:32:327:42 | sinkParam11 : String | -| GlobalDataFlow.cs:220:22:220:49 | call to method Select : IEnumerable [element] : String | GlobalDataFlow.cs:220:22:220:57 | call to method First : String | -| GlobalDataFlow.cs:220:22:220:57 | call to method First : String | GlobalDataFlow.cs:221:15:221:20 | access to local variable sink26 | -| GlobalDataFlow.cs:241:20:241:49 | call to method Run : Task [property Result] : String | GlobalDataFlow.cs:242:22:242:25 | access to local variable task : Task [property Result] : String | -| GlobalDataFlow.cs:241:20:241:49 | call to method Run : Task [property Result] : String | GlobalDataFlow.cs:244:28:244:31 | access to local variable task : Task [property Result] : String | -| GlobalDataFlow.cs:241:35:241:48 | "taint source" : String | GlobalDataFlow.cs:241:20:241:49 | call to method Run : Task [property Result] : String | -| GlobalDataFlow.cs:242:22:242:25 | access to local variable task : Task [property Result] : String | GlobalDataFlow.cs:242:22:242:32 | access to property Result : String | -| GlobalDataFlow.cs:242:22:242:32 | access to property Result : String | GlobalDataFlow.cs:243:15:243:20 | access to local variable sink41 | -| GlobalDataFlow.cs:244:22:244:31 | await ... : String | GlobalDataFlow.cs:245:15:245:20 | access to local variable sink42 | -| GlobalDataFlow.cs:244:28:244:31 | access to local variable task : Task [property Result] : String | GlobalDataFlow.cs:244:22:244:31 | await ... : String | -| GlobalDataFlow.cs:257:26:257:35 | sinkParam0 : String | GlobalDataFlow.cs:259:16:259:25 | access to parameter sinkParam0 : String | -| GlobalDataFlow.cs:257:26:257:35 | sinkParam0 : String | GlobalDataFlow.cs:260:15:260:24 | access to parameter sinkParam0 | -| GlobalDataFlow.cs:259:16:259:25 | access to parameter sinkParam0 : String | GlobalDataFlow.cs:257:26:257:35 | sinkParam0 : String | -| GlobalDataFlow.cs:263:26:263:35 | sinkParam1 : String | GlobalDataFlow.cs:265:15:265:24 | access to parameter sinkParam1 | -| GlobalDataFlow.cs:268:26:268:35 | sinkParam3 : String | GlobalDataFlow.cs:270:15:270:24 | access to parameter sinkParam3 | -| GlobalDataFlow.cs:273:26:273:35 | sinkParam4 : String | GlobalDataFlow.cs:275:15:275:24 | access to parameter sinkParam4 | -| GlobalDataFlow.cs:278:26:278:35 | sinkParam5 : String | GlobalDataFlow.cs:280:15:280:24 | access to parameter sinkParam5 | -| GlobalDataFlow.cs:283:26:283:35 | sinkParam6 : String | GlobalDataFlow.cs:285:15:285:24 | access to parameter sinkParam6 | -| GlobalDataFlow.cs:288:26:288:35 | sinkParam7 : String | GlobalDataFlow.cs:290:15:290:24 | access to parameter sinkParam7 | -| GlobalDataFlow.cs:298:26:298:26 | x : String | GlobalDataFlow.cs:300:37:300:37 | access to parameter x : String | -| GlobalDataFlow.cs:300:17:300:38 | call to method ApplyFunc : String | GlobalDataFlow.cs:301:16:301:41 | ... ? ... : ... : String | -| GlobalDataFlow.cs:300:27:300:28 | x0 : String | GlobalDataFlow.cs:300:33:300:34 | access to parameter x0 : String | -| GlobalDataFlow.cs:300:37:300:37 | access to parameter x : String | GlobalDataFlow.cs:300:17:300:38 | call to method ApplyFunc : String | -| GlobalDataFlow.cs:300:37:300:37 | access to parameter x : String | GlobalDataFlow.cs:387:46:387:46 | x : String | -| GlobalDataFlow.cs:304:32:304:32 | x : String | GlobalDataFlow.cs:306:9:306:13 | SSA def(y) : String | -| GlobalDataFlow.cs:310:32:310:32 | x : String | GlobalDataFlow.cs:312:9:312:13 | SSA def(y) : String | -| GlobalDataFlow.cs:315:31:315:40 | sinkParam8 : String | GlobalDataFlow.cs:317:15:317:24 | access to parameter sinkParam8 | -| GlobalDataFlow.cs:321:32:321:41 | sinkParam9 : String | GlobalDataFlow.cs:323:15:323:24 | access to parameter sinkParam9 | -| GlobalDataFlow.cs:327:32:327:42 | sinkParam11 : String | GlobalDataFlow.cs:329:15:329:25 | access to parameter sinkParam11 | -| GlobalDataFlow.cs:341:16:341:29 | "taint source" : String | GlobalDataFlow.cs:157:21:157:25 | call to method Out : String | -| GlobalDataFlow.cs:341:16:341:29 | "taint source" : String | GlobalDataFlow.cs:193:22:193:42 | object creation of type Lazy : Lazy [property Value] : String | -| GlobalDataFlow.cs:346:9:346:26 | SSA def(x) : String | GlobalDataFlow.cs:160:20:160:24 | SSA def(sink7) : String | -| GlobalDataFlow.cs:346:13:346:26 | "taint source" : String | GlobalDataFlow.cs:346:9:346:26 | SSA def(x) : String | -| GlobalDataFlow.cs:351:9:351:26 | SSA def(x) : String | GlobalDataFlow.cs:163:20:163:24 | SSA def(sink8) : String | -| GlobalDataFlow.cs:351:13:351:26 | "taint source" : String | GlobalDataFlow.cs:351:9:351:26 | SSA def(x) : String | -| GlobalDataFlow.cs:357:22:357:35 | "taint source" : String | GlobalDataFlow.cs:165:22:165:31 | call to method OutYield : IEnumerable [element] : String | -| GlobalDataFlow.cs:382:41:382:41 | x : String | GlobalDataFlow.cs:384:11:384:11 | access to parameter x : String | -| GlobalDataFlow.cs:382:41:382:41 | x : String | GlobalDataFlow.cs:384:11:384:11 | access to parameter x : String | -| GlobalDataFlow.cs:384:11:384:11 | access to parameter x : String | GlobalDataFlow.cs:54:15:54:15 | x : String | -| GlobalDataFlow.cs:384:11:384:11 | access to parameter x : String | GlobalDataFlow.cs:268:26:268:35 | sinkParam3 : String | -| GlobalDataFlow.cs:387:46:387:46 | x : String | GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | -| GlobalDataFlow.cs:387:46:387:46 | x : String | GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | -| GlobalDataFlow.cs:387:46:387:46 | x : String | GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | -| GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | GlobalDataFlow.cs:298:26:298:26 | x : String | -| GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | GlobalDataFlow.cs:298:26:298:26 | x : String | -| GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | GlobalDataFlow.cs:300:27:300:28 | x0 : String | -| GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | GlobalDataFlow.cs:389:16:389:19 | delegate call : String | -| GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | GlobalDataFlow.cs:389:16:389:19 | delegate call : String | -| GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | GlobalDataFlow.cs:389:16:389:19 | delegate call : String | -| GlobalDataFlow.cs:396:52:396:52 | x : String | GlobalDataFlow.cs:398:11:398:11 | access to parameter x : String | -| GlobalDataFlow.cs:396:52:396:52 | x : String | GlobalDataFlow.cs:398:11:398:11 | access to parameter x : String | -| GlobalDataFlow.cs:396:52:396:52 | x : String | GlobalDataFlow.cs:398:11:398:11 | access to parameter x : String | -| GlobalDataFlow.cs:398:11:398:11 | access to parameter x : String | GlobalDataFlow.cs:57:37:57:37 | x : String | -| GlobalDataFlow.cs:398:11:398:11 | access to parameter x : String | GlobalDataFlow.cs:278:26:278:35 | sinkParam5 : String | -| GlobalDataFlow.cs:398:11:398:11 | access to parameter x : String | GlobalDataFlow.cs:283:26:283:35 | sinkParam6 : String | -| GlobalDataFlow.cs:401:39:401:45 | tainted : String | GlobalDataFlow.cs:404:15:404:20 | access to local variable sink11 | -| GlobalDataFlow.cs:401:39:401:45 | tainted : String | GlobalDataFlow.cs:405:16:405:21 | access to local variable sink11 : String | -| GlobalDataFlow.cs:405:16:405:21 | access to local variable sink11 : String | GlobalDataFlow.cs:167:22:167:43 | call to method TaintedParam : String | -| GlobalDataFlow.cs:427:9:427:11 | value : String | GlobalDataFlow.cs:427:41:427:46 | access to local variable sink20 | -| GlobalDataFlow.cs:438:22:438:35 | "taint source" : String | GlobalDataFlow.cs:201:22:201:32 | access to property OutProperty : String | -| GlobalDataFlow.cs:448:22:448:65 | call to method Join : String | GlobalDataFlow.cs:449:15:449:20 | access to local variable sink44 | -| GlobalDataFlow.cs:448:51:448:64 | "taint source" : String | GlobalDataFlow.cs:448:22:448:65 | call to method Join : String | -| GlobalDataFlow.cs:457:20:457:49 | call to method Run : Task [property Result] : String | GlobalDataFlow.cs:458:25:458:28 | access to local variable task : Task [property Result] : String | -| GlobalDataFlow.cs:457:35:457:48 | "taint source" : String | GlobalDataFlow.cs:457:20:457:49 | call to method Run : Task [property Result] : String | -| GlobalDataFlow.cs:458:25:458:28 | access to local variable task : Task [property Result] : String | GlobalDataFlow.cs:458:25:458:50 | call to method ConfigureAwait : ConfiguredTaskAwaitable [synthetic m_configuredTaskAwaiter, synthetic m_task_configured_task_awaitable, property Result] : String | -| GlobalDataFlow.cs:458:25:458:50 | call to method ConfigureAwait : ConfiguredTaskAwaitable [synthetic m_configuredTaskAwaiter, synthetic m_task_configured_task_awaitable, property Result] : String | GlobalDataFlow.cs:459:23:459:31 | access to local variable awaitable : ConfiguredTaskAwaitable [synthetic m_configuredTaskAwaiter, synthetic m_task_configured_task_awaitable, property Result] : String | -| GlobalDataFlow.cs:459:23:459:31 | access to local variable awaitable : ConfiguredTaskAwaitable [synthetic m_configuredTaskAwaiter, synthetic m_task_configured_task_awaitable, property Result] : String | GlobalDataFlow.cs:459:23:459:44 | call to method GetAwaiter : ConfiguredTaskAwaitable.ConfiguredTaskAwaiter [synthetic m_task_configured_task_awaitable, property Result] : String | -| GlobalDataFlow.cs:459:23:459:44 | call to method GetAwaiter : ConfiguredTaskAwaitable.ConfiguredTaskAwaiter [synthetic m_task_configured_task_awaitable, property Result] : String | GlobalDataFlow.cs:460:22:460:28 | access to local variable awaiter : ConfiguredTaskAwaitable.ConfiguredTaskAwaiter [synthetic m_task_configured_task_awaitable, property Result] : String | -| GlobalDataFlow.cs:460:22:460:28 | access to local variable awaiter : ConfiguredTaskAwaitable.ConfiguredTaskAwaiter [synthetic m_task_configured_task_awaitable, property Result] : String | GlobalDataFlow.cs:460:22:460:40 | call to method GetResult : String | -| GlobalDataFlow.cs:460:22:460:40 | call to method GetResult : String | GlobalDataFlow.cs:461:15:461:20 | access to local variable sink45 | -| GlobalDataFlow.cs:466:53:466:55 | arg : String | GlobalDataFlow.cs:470:15:470:17 | access to parameter arg : String | -| GlobalDataFlow.cs:469:21:469:21 | s : String | GlobalDataFlow.cs:469:32:469:32 | access to parameter s | -| GlobalDataFlow.cs:470:15:470:17 | access to parameter arg : String | GlobalDataFlow.cs:469:21:469:21 | s : String | -| GlobalDataFlow.cs:473:28:473:41 | "taint source" : String | GlobalDataFlow.cs:466:53:466:55 | arg : String | -| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:490:25:490:26 | [post] access to local variable x1 : SimpleClass [field field] : String | -| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:490:30:490:31 | [post] access to local variable x2 : SimpleClass [field field] : String | -| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:497:31:497:32 | [post] access to local variable y1 : SimpleClass [field field] : String | -| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:497:36:497:37 | [post] access to local variable y2 : SimpleClass [field field] : String | -| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:497:42:497:43 | [post] access to local variable y3 : SimpleClass [field field] : String | -| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:508:33:508:33 | [post] access to local variable x : SubSimpleClass [field field] : String | -| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:515:20:515:20 | [post] access to parameter x : SimpleClass [field field] : String | -| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:515:25:515:25 | [post] access to local variable y : SimpleClass [field field] : String | -| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:527:20:527:20 | [post] access to local variable x : SimpleClass [field field] : String | -| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:528:20:528:20 | [post] access to local variable y : SimpleClass [field field] : String | -| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:529:18:529:18 | [post] access to local variable z : SimpleClass [field field] : String | -| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:538:20:538:21 | [post] access to parameter sc : SimpleClass [field field] : String | -| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:546:24:546:24 | [post] access to local variable x : SimpleClass [field field] : String | -| GlobalDataFlow.cs:483:20:483:33 | "taint source" : String | GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | -| 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 | -| 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 | -| GlobalDataFlow.cs:491:15:491:16 | access to local variable x1 : SimpleClass [field field] : String | GlobalDataFlow.cs:491:15:491:22 | access to field field | -| GlobalDataFlow.cs:492:15:492:16 | access to local variable x2 : SimpleClass [field field] : String | GlobalDataFlow.cs:492:15:492:22 | access to field field | -| GlobalDataFlow.cs:497:31:497:32 | [post] access to local variable y1 : SimpleClass [field field] : String | GlobalDataFlow.cs:498:15:498:16 | access to local variable y1 : SimpleClass [field field] : String | -| GlobalDataFlow.cs:497:36:497:37 | [post] access to local variable y2 : SimpleClass [field field] : String | GlobalDataFlow.cs:499:15:499:16 | access to local variable y2 : SimpleClass [field field] : String | -| GlobalDataFlow.cs:497:42:497:43 | [post] access to local variable y3 : SimpleClass [field field] : String | GlobalDataFlow.cs:500:15:500:16 | access to local variable y3 : SimpleClass [field field] : String | -| GlobalDataFlow.cs:498:15:498:16 | access to local variable y1 : SimpleClass [field field] : String | GlobalDataFlow.cs:498:15:498:22 | access to field field | -| GlobalDataFlow.cs:499:15:499:16 | access to local variable y2 : SimpleClass [field field] : String | GlobalDataFlow.cs:499:15:499:22 | access to field field | -| GlobalDataFlow.cs:500:15:500:16 | access to local variable y3 : SimpleClass [field field] : String | GlobalDataFlow.cs:500:15:500:22 | access to field field | -| GlobalDataFlow.cs:508:33:508:33 | [post] access to local variable x : SubSimpleClass [field field] : String | GlobalDataFlow.cs:509:15:509:15 | access to local variable x : SubSimpleClass [field field] : String | -| GlobalDataFlow.cs:509:15:509:15 | access to local variable x : SubSimpleClass [field field] : String | GlobalDataFlow.cs:509:15:509:21 | access to field field | -| GlobalDataFlow.cs:515:20:515:20 | [post] access to parameter x : SimpleClass [field field] : String | GlobalDataFlow.cs:516:15:516:15 | access to parameter x : SimpleClass [field field] : String | -| GlobalDataFlow.cs:515:25:515:25 | [post] access to local variable y : SimpleClass [field field] : String | GlobalDataFlow.cs:517:15:517:15 | access to local variable y : SimpleClass [field field] : String | -| GlobalDataFlow.cs:516:15:516:15 | access to parameter x : SimpleClass [field field] : String | GlobalDataFlow.cs:516:15:516:21 | access to field field | -| GlobalDataFlow.cs:517:15:517:15 | access to local variable y : SimpleClass [field field] : String | GlobalDataFlow.cs:517:15:517:21 | access to field field | -| GlobalDataFlow.cs:527:20:527:20 | [post] access to local variable x : SimpleClass [field field] : String | GlobalDataFlow.cs:531:15:531:15 | access to local variable x : SimpleClass [field field] : String | -| GlobalDataFlow.cs:528:20:528:20 | [post] access to local variable y : SimpleClass [field field] : String | GlobalDataFlow.cs:532:15:532:15 | access to local variable y : SimpleClass [field field] : String | -| GlobalDataFlow.cs:529:18:529:18 | [post] access to local variable z : SimpleClass [field field] : String | GlobalDataFlow.cs:533:15:533:15 | access to local variable z : SimpleClass [field field] : String | -| GlobalDataFlow.cs:531:15:531:15 | access to local variable x : SimpleClass [field field] : String | GlobalDataFlow.cs:531:15:531:21 | access to field field | -| GlobalDataFlow.cs:532:15:532:15 | access to local variable y : SimpleClass [field field] : String | GlobalDataFlow.cs:532:15:532:21 | access to field field | -| GlobalDataFlow.cs:533:15:533:15 | access to local variable z : SimpleClass [field field] : String | GlobalDataFlow.cs:533:15:533:21 | access to field field | -| GlobalDataFlow.cs:538:20:538:21 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:539:15:539:16 | access to parameter sc : SimpleClass [field field] : String | -| GlobalDataFlow.cs:539:15:539:16 | access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:539:15:539:22 | access to field field | -| GlobalDataFlow.cs:546:24:546:24 | [post] access to local variable x : SimpleClass [field field] : String | GlobalDataFlow.cs:547:15:547:15 | access to local variable x : SimpleClass [field field] : String | -| GlobalDataFlow.cs:547:15:547:15 | access to local variable x : SimpleClass [field field] : String | GlobalDataFlow.cs:547:15:547:21 | access to field field | -| GlobalDataFlow.cs:553:71:553:71 | e : null [element] : String | GlobalDataFlow.cs:556:27:556:27 | access to parameter e : null [element] : String | -| GlobalDataFlow.cs:556:22:556:22 | SSA def(x) : String | GlobalDataFlow.cs:558:46:558:46 | access to local variable x : String | -| GlobalDataFlow.cs:556:27:556:27 | access to parameter e : null [element] : String | GlobalDataFlow.cs:556:22:556:22 | SSA def(x) : String | -| GlobalDataFlow.cs:558:46:558:46 | access to local variable x : String | GlobalDataFlow.cs:81:79:81:79 | x : String | -| GlobalDataFlow.cs:558:46:558:46 | access to local variable x : String | GlobalDataFlow.cs:558:44:558:47 | delegate call : String | -| GlobalDataFlowStringBuilder.cs:17:64:17:64 | s : String | GlobalDataFlowStringBuilder.cs:19:19:19:19 | access to parameter s : String | -| GlobalDataFlowStringBuilder.cs:19:19:19:19 | access to parameter s : String | GlobalDataFlowStringBuilder.cs:19:9:19:10 | [post] access to parameter sb : StringBuilder | -| GlobalDataFlowStringBuilder.cs:22:76:22:76 | s : String | GlobalDataFlowStringBuilder.cs:24:19:24:26 | (...) ... : AppendInterpolatedStringHandler | -| GlobalDataFlowStringBuilder.cs:24:19:24:26 | (...) ... : AppendInterpolatedStringHandler | GlobalDataFlowStringBuilder.cs:24:9:24:10 | [post] access to parameter sb : StringBuilder | -| 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 | -| 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 | -| GlobalDataFlowStringBuilder.cs:30:31:30:32 | [post] access to local variable sb : StringBuilder | GlobalDataFlowStringBuilder.cs:40:20:40:26 | (...) ... : AppendInterpolatedStringHandler | -| GlobalDataFlowStringBuilder.cs:30:35:30:48 | "taint source" : String | GlobalDataFlowStringBuilder.cs:17:64:17:64 | s : String | -| GlobalDataFlowStringBuilder.cs:30:35:30:48 | "taint source" : String | 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 | GlobalDataFlowStringBuilder.cs:31:21:31:33 | call to method ToString : String | -| GlobalDataFlowStringBuilder.cs:31:21:31:33 | call to method ToString : String | GlobalDataFlowStringBuilder.cs:32:15:32:19 | access to local variable sink0 | -| GlobalDataFlowStringBuilder.cs:35:9:35:11 | [post] access to local variable sb1 : StringBuilder | GlobalDataFlowStringBuilder.cs:36:21:36:23 | access to local variable sb1 : StringBuilder | -| GlobalDataFlowStringBuilder.cs:35:20:35:21 | access to local variable sb : StringBuilder | GlobalDataFlowStringBuilder.cs:35:9:35:11 | [post] access to local variable sb1 : StringBuilder | -| GlobalDataFlowStringBuilder.cs:36:21:36:23 | access to local variable sb1 : StringBuilder | GlobalDataFlowStringBuilder.cs:36:21:36:34 | call to method ToString : String | -| GlobalDataFlowStringBuilder.cs:36:21:36:34 | call to method ToString : String | GlobalDataFlowStringBuilder.cs:37:15:37:19 | access to local variable sink1 | -| GlobalDataFlowStringBuilder.cs:40:9:40:11 | [post] access to local variable sb2 : StringBuilder | GlobalDataFlowStringBuilder.cs:41:21:41:23 | access to local variable sb2 : StringBuilder | -| GlobalDataFlowStringBuilder.cs:40:20:40:26 | (...) ... : AppendInterpolatedStringHandler | GlobalDataFlowStringBuilder.cs:40:9:40:11 | [post] access to local variable sb2 : StringBuilder | -| GlobalDataFlowStringBuilder.cs:41:21:41:23 | access to local variable sb2 : StringBuilder | GlobalDataFlowStringBuilder.cs:41:21:41:34 | call to method ToString : String | -| GlobalDataFlowStringBuilder.cs:41:21:41:34 | call to method ToString : String | GlobalDataFlowStringBuilder.cs:42:15:42:19 | access to local variable sink2 | -| GlobalDataFlowStringBuilder.cs:48:43:48:44 | [post] access to local variable sb : StringBuilder | GlobalDataFlowStringBuilder.cs:49:21:49:22 | 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:48:47:48:60 | "taint source" : String | GlobalDataFlowStringBuilder.cs:48:43:48:44 | [post] access to local variable sb : StringBuilder | -| GlobalDataFlowStringBuilder.cs:49:21:49:22 | access to local variable sb : StringBuilder | GlobalDataFlowStringBuilder.cs:49:21:49:33 | call to method ToString : String | -| GlobalDataFlowStringBuilder.cs:49:21:49:33 | call to method ToString : String | GlobalDataFlowStringBuilder.cs:50:15:50:19 | access to local variable sink3 | -| Splitting.cs:3:28:3:34 | tainted : String | Splitting.cs:8:24:8:30 | [b (line 3): false] access to parameter tainted : String | -| Splitting.cs:3:28:3:34 | tainted : String | Splitting.cs:8:24:8:30 | [b (line 3): true] access to parameter tainted : String | -| Splitting.cs:8:17:8:31 | [b (line 3): false] call to method Return : String | Splitting.cs:9:15:9:15 | [b (line 3): false] access to local variable x | -| Splitting.cs:8:17:8:31 | [b (line 3): true] call to method Return : String | Splitting.cs:9:15:9:15 | [b (line 3): true] access to local variable x | -| Splitting.cs:8:17:8:31 | [b (line 3): true] call to method Return : String | Splitting.cs:11:19:11:19 | access to local variable x | -| Splitting.cs:8:24:8:30 | [b (line 3): false] access to parameter tainted : 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): false] access to parameter tainted : String | Splitting.cs:16:26:16:26 | x : String | -| Splitting.cs:8:24:8:30 | [b (line 3): true] access to parameter tainted : String | Splitting.cs:8:17:8:31 | [b (line 3): true] 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:26:16:26 | x : String | Splitting.cs:16:32:16:32 | access to parameter x : String | -| Splitting.cs:18:24:18:24 | s : String | Splitting.cs:20:29:20:29 | access to parameter s : String | -| Splitting.cs:20:29:20:29 | access to parameter s : String | Splitting.cs:16:26:16:26 | x : String | -| Splitting.cs:20:29:20:29 | access to parameter s : String | Splitting.cs:20:22:20:30 | call to method Return : String | -| Splitting.cs:21:9:21:11 | value : String | Splitting.cs:21:28:21:32 | access to parameter value : String | -| Splitting.cs:21:28:21:32 | access to parameter value : String | Splitting.cs:16:26:16:26 | x : String | -| Splitting.cs:21:28:21:32 | access to parameter value : String | Splitting.cs:21:21:21:33 | call to method Return | -| Splitting.cs:24:28:24:34 | tainted : String | Splitting.cs:30:17:30:23 | [b (line 24): false] access to parameter tainted : String | -| Splitting.cs:24:28:24:34 | tainted : String | Splitting.cs:30:17:30:23 | [b (line 24): true] access to parameter tainted : String | -| Splitting.cs:24:28:24:34 | tainted : String | Splitting.cs:31:19:31:25 | [b (line 24): false] access to parameter tainted : String | -| Splitting.cs:24:28:24:34 | tainted : String | Splitting.cs:31:19:31:25 | [b (line 24): true] access to parameter tainted : String | -| Splitting.cs:30:17:30:23 | [b (line 24): false] access to parameter tainted : String | Splitting.cs:21:9:21:11 | value : String | -| Splitting.cs:30:17:30:23 | [b (line 24): true] access to parameter tainted : String | Splitting.cs:21:9:21:11 | value : String | -| Splitting.cs:31:17:31:26 | [b (line 24): false] dynamic access to element : String | Splitting.cs:32:15:32:15 | [b (line 24): false] access to local variable x | -| Splitting.cs:31:17:31:26 | [b (line 24): true] dynamic access to element : String | Splitting.cs:32:15:32:15 | [b (line 24): true] access to local variable x | -| Splitting.cs:31:17:31:26 | [b (line 24): true] dynamic access to element : String | Splitting.cs:34:19:34:19 | access to local variable x | -| Splitting.cs:31:19:31:25 | [b (line 24): false] access to parameter tainted : String | Splitting.cs:18:24:18:24 | s : String | -| Splitting.cs:31:19:31:25 | [b (line 24): false] access to parameter tainted : String | Splitting.cs:31:17:31:26 | [b (line 24): false] dynamic access to element : String | -| Splitting.cs:31:19:31:25 | [b (line 24): true] access to parameter tainted : String | Splitting.cs:18:24:18:24 | s : String | -| Splitting.cs:31:19:31:25 | [b (line 24): true] access to parameter tainted : String | Splitting.cs:31:17:31:26 | [b (line 24): true] dynamic access to element : String | -| Splitting.cs:39:21:39:34 | [b (line 37): true] "taint source" : String | Splitting.cs:41:19:41:19 | access to local variable s | -| Splitting.cs:48:36:48:49 | "taint source" : String | Splitting.cs:50:19:50:19 | access to local variable s | -| Splitting.cs:48:36:48:49 | "taint source" : String | Splitting.cs:52:19:52:19 | access to local variable s | +| Capture.cs:7:20:7:26 | tainted : String | Capture.cs:12:19:12:24 | access to local variable sink27 | provenance | | +| Capture.cs:7:20:7:26 | tainted : String | Capture.cs:21:23:21:28 | access to local variable sink28 | provenance | | +| Capture.cs:7:20:7:26 | tainted : String | Capture.cs:30:19:30:24 | access to local variable sink29 | provenance | | +| Capture.cs:7:20:7:26 | tainted : String | Capture.cs:61:36:61:42 | access to parameter tainted : String | provenance | | +| Capture.cs:50:50:50:55 | sink39 : String | Capture.cs:57:27:57:32 | access to parameter sink39 | provenance | | +| Capture.cs:61:36:61:42 | access to parameter tainted : String | Capture.cs:50:50:50:55 | sink39 : String | provenance | | +| Capture.cs:69:13:69:35 | SSA def(sink30) : String | Capture.cs:72:15:72:20 | access to local variable sink30 | provenance | | +| Capture.cs:69:22:69:35 | "taint source" : String | Capture.cs:69:13:69:35 | SSA def(sink30) : String | provenance | | +| Capture.cs:79:17:79:39 | SSA def(sink31) : String | Capture.cs:84:15:84:20 | access to local variable sink31 | provenance | | +| Capture.cs:79:26:79:39 | "taint source" : String | Capture.cs:79:17:79:39 | SSA def(sink31) : String | provenance | | +| Capture.cs:89:13:89:35 | SSA def(sink32) : String | Capture.cs:93:15:93:20 | access to local variable sink32 | provenance | | +| Capture.cs:89:22:89:35 | "taint source" : String | Capture.cs:89:13:89:35 | SSA def(sink32) : String | provenance | | +| Capture.cs:115:17:115:39 | SSA def(sink40) : String | Capture.cs:122:15:122:20 | access to local variable sink40 | provenance | | +| Capture.cs:115:26:115:39 | "taint source" : String | Capture.cs:115:17:115:39 | SSA def(sink40) : String | provenance | | +| Capture.cs:125:25:125:31 | tainted : String | Capture.cs:133:15:133:20 | access to local variable sink33 | provenance | | +| Capture.cs:125:25:125:31 | tainted : String | Capture.cs:145:15:145:20 | access to local variable sink34 | provenance | | +| Capture.cs:125:25:125:31 | tainted : String | Capture.cs:154:15:154:20 | access to local variable sink35 | provenance | | +| Capture.cs:125:25:125:31 | tainted : String | Capture.cs:160:22:160:38 | call to local function CaptureThrough4 : String | provenance | | +| Capture.cs:125:25:125:31 | tainted : String | Capture.cs:168:25:168:31 | access to parameter tainted : String | provenance | | +| Capture.cs:125:25:125:31 | tainted : String | Capture.cs:194:25:194:31 | access to parameter tainted : String | provenance | | +| Capture.cs:160:22:160:38 | call to local function CaptureThrough4 : String | Capture.cs:161:15:161:20 | access to local variable sink36 | provenance | | +| Capture.cs:168:25:168:31 | access to parameter tainted : String | Capture.cs:169:15:169:20 | access to local variable sink37 | provenance | | +| Capture.cs:188:26:188:26 | s : String | Capture.cs:191:20:191:22 | call to local function M : String | provenance | | +| Capture.cs:194:22:194:32 | call to local function Id : String | Capture.cs:195:15:195:20 | access to local variable sink38 | provenance | | +| Capture.cs:194:25:194:31 | access to parameter tainted : String | Capture.cs:188:26:188:26 | s : String | provenance | | +| Capture.cs:194:25:194:31 | access to parameter tainted : String | Capture.cs:194:22:194:32 | call to local function Id : String | provenance | | +| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:19:15:19:29 | access to field SinkField0 | provenance | | +| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 | provenance | | +| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:257:26:257:35 | sinkParam0 : String | provenance | | +| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:263:26:263:35 | sinkParam1 : String | provenance | | +| GlobalDataFlow.cs:45:30:45:39 | sinkParam2 : String | GlobalDataFlow.cs:45:50:45:59 | access to parameter sinkParam2 | provenance | | +| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:45:30:45:39 | sinkParam2 : String | provenance | | +| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | GlobalDataFlow.cs:382:41:382:41 | x : String | provenance | | +| GlobalDataFlow.cs:54:15:54:15 | x : String | GlobalDataFlow.cs:54:24:54:24 | access to parameter x : String | provenance | | +| GlobalDataFlow.cs:54:24:54:24 | access to parameter x : String | GlobalDataFlow.cs:273:26:273:35 | sinkParam4 : String | provenance | | +| GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:382:41:382:41 | x : String | provenance | | +| GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | GlobalDataFlow.cs:396:52:396:52 | x : String | provenance | | +| GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:396:52:396:52 | x : String | provenance | | +| GlobalDataFlow.cs:57:37:57:37 | x : String | GlobalDataFlow.cs:57:46:57:46 | access to parameter x : String | provenance | | +| GlobalDataFlow.cs:57:46:57:46 | access to parameter x : String | GlobalDataFlow.cs:288:26:288:35 | sinkParam7 : String | provenance | | +| GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:396:52:396:52 | x : String | provenance | | +| GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | GlobalDataFlow.cs:427:9:427:11 | value : String | provenance | | +| GlobalDataFlow.cs:71:21:71:46 | call to method Return : String | GlobalDataFlow.cs:72:15:72:19 | access to local variable sink0 | provenance | | +| GlobalDataFlow.cs:71:21:71:46 | call to method Return : String | GlobalDataFlow.cs:73:94:73:98 | access to local variable sink0 : String | provenance | | +| GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:21:71:46 | call to method Return : String | provenance | | +| GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:298:26:298:26 | x : String | provenance | | +| GlobalDataFlow.cs:73:21:73:101 | (...) ... : String | GlobalDataFlow.cs:74:15:74:19 | access to local variable sink1 | provenance | | +| GlobalDataFlow.cs:73:21:73:101 | (...) ... : String | GlobalDataFlow.cs:76:19:76:23 | access to local variable sink1 : String | provenance | | +| GlobalDataFlow.cs:73:29:73:101 | call to method Invoke : String | GlobalDataFlow.cs:73:21:73:101 | (...) ... : String | provenance | | +| GlobalDataFlow.cs:73:94:73:98 | access to local variable sink0 : String | GlobalDataFlow.cs:73:29:73:101 | call to method Invoke : String | provenance | | +| GlobalDataFlow.cs:73:94:73:98 | access to local variable sink0 : String | GlobalDataFlow.cs:298:26:298:26 | x : String | provenance | | +| GlobalDataFlow.cs:76:19:76:23 | access to local variable sink1 : String | GlobalDataFlow.cs:76:30:76:34 | SSA def(sink2) : String | provenance | | +| GlobalDataFlow.cs:76:19:76:23 | access to local variable sink1 : String | GlobalDataFlow.cs:304:32:304:32 | x : String | provenance | | +| GlobalDataFlow.cs:76:30:76:34 | SSA def(sink2) : String | GlobalDataFlow.cs:77:15:77:19 | access to local variable sink2 | provenance | | +| GlobalDataFlow.cs:76:30:76:34 | SSA def(sink2) : String | GlobalDataFlow.cs:79:19:79:23 | access to local variable sink2 : String | provenance | | +| GlobalDataFlow.cs:79:19:79:23 | access to local variable sink2 : String | GlobalDataFlow.cs:79:30:79:34 | SSA def(sink3) : String | provenance | | +| GlobalDataFlow.cs:79:19:79:23 | access to local variable sink2 : String | GlobalDataFlow.cs:310:32:310:32 | x : String | provenance | | +| GlobalDataFlow.cs:79:30:79:34 | SSA def(sink3) : String | GlobalDataFlow.cs:80:15:80:19 | access to local variable sink3 | provenance | | +| GlobalDataFlow.cs:79:30:79:34 | SSA def(sink3) : String | GlobalDataFlow.cs:81:59:81:63 | access to local variable sink3 : String | provenance | | +| GlobalDataFlow.cs:79:30:79:34 | SSA def(sink3) : String | GlobalDataFlow.cs:139:29:139:33 | access to local variable sink3 : String | provenance | | +| GlobalDataFlow.cs:81:22:81:85 | call to method SelectEven : IEnumerable [element] : String | GlobalDataFlow.cs:81:22:81:93 | call to method First : String | provenance | | +| GlobalDataFlow.cs:81:22:81:93 | call to method First : String | GlobalDataFlow.cs:82:15:82:20 | access to local variable sink13 | provenance | | +| GlobalDataFlow.cs:81:22:81:93 | call to method First : String | GlobalDataFlow.cs:83:59:83:64 | access to local variable sink13 : String | provenance | | +| GlobalDataFlow.cs:81:23:81:65 | (...) ... : null [element] : String | GlobalDataFlow.cs:81:22:81:85 | call to method SelectEven : IEnumerable [element] : String | provenance | | +| GlobalDataFlow.cs:81:23:81:65 | (...) ... : null [element] : String | GlobalDataFlow.cs:553:71:553:71 | e : null [element] : String | provenance | | +| GlobalDataFlow.cs:81:57:81:65 | { ..., ... } : null [element] : String | GlobalDataFlow.cs:81:23:81:65 | (...) ... : null [element] : String | provenance | | +| GlobalDataFlow.cs:81:59:81:63 | access to local variable sink3 : String | GlobalDataFlow.cs:81:57:81:65 | { ..., ... } : null [element] : String | provenance | | +| GlobalDataFlow.cs:81:79:81:79 | x : String | GlobalDataFlow.cs:81:84:81:84 | access to parameter x : String | provenance | | +| GlobalDataFlow.cs:83:22:83:87 | call to method Select : IEnumerable [element] : String | GlobalDataFlow.cs:83:22:83:95 | call to method First : String | provenance | | +| GlobalDataFlow.cs:83:22:83:95 | call to method First : String | GlobalDataFlow.cs:84:15:84:20 | access to local variable sink14 | provenance | | +| GlobalDataFlow.cs:83:22:83:95 | call to method First : String | GlobalDataFlow.cs:85:59:85:64 | access to local variable sink14 : String | provenance | | +| GlobalDataFlow.cs:83:22:83:95 | call to method First : String | GlobalDataFlow.cs:89:59:89:64 | access to local variable sink14 : String | provenance | | +| GlobalDataFlow.cs:83:22:83:95 | call to method First : String | GlobalDataFlow.cs:91:75:91:80 | access to local variable sink14 : String | provenance | | +| GlobalDataFlow.cs:83:23:83:66 | (...) ... : null [element] : String | GlobalDataFlow.cs:83:22:83:87 | call to method Select : IEnumerable [element] : String | provenance | | +| GlobalDataFlow.cs:83:23:83:66 | (...) ... : null [element] : String | GlobalDataFlow.cs:315:31:315:40 | sinkParam8 : String | provenance | | +| GlobalDataFlow.cs:83:57:83:66 | { ..., ... } : null [element] : String | GlobalDataFlow.cs:83:23:83:66 | (...) ... : null [element] : String | provenance | | +| GlobalDataFlow.cs:83:59:83:64 | access to local variable sink13 : String | GlobalDataFlow.cs:83:57:83:66 | { ..., ... } : null [element] : String | provenance | | +| GlobalDataFlow.cs:85:22:85:128 | call to method Zip : IEnumerable [element] : String | GlobalDataFlow.cs:85:22:85:136 | call to method First : String | provenance | | +| GlobalDataFlow.cs:85:22:85:136 | call to method First : String | GlobalDataFlow.cs:86:15:86:20 | access to local variable sink15 | provenance | | +| GlobalDataFlow.cs:85:22:85:136 | call to method First : String | GlobalDataFlow.cs:87:106:87:111 | access to local variable sink15 : String | provenance | | +| GlobalDataFlow.cs:85:23:85:66 | (...) ... : null [element] : String | GlobalDataFlow.cs:85:22:85:128 | call to method Zip : IEnumerable [element] : String | provenance | | +| GlobalDataFlow.cs:85:57:85:66 | { ..., ... } : null [element] : String | GlobalDataFlow.cs:85:23:85:66 | (...) ... : null [element] : String | provenance | | +| GlobalDataFlow.cs:85:59:85:64 | access to local variable sink14 : String | GlobalDataFlow.cs:85:57:85:66 | { ..., ... } : null [element] : String | provenance | | +| GlobalDataFlow.cs:87:22:87:128 | call to method Zip : IEnumerable [element] : String | GlobalDataFlow.cs:87:22:87:136 | call to method First : String | provenance | | +| GlobalDataFlow.cs:87:22:87:136 | call to method First : String | GlobalDataFlow.cs:88:15:88:20 | access to local variable sink16 | provenance | | +| GlobalDataFlow.cs:87:70:87:113 | (...) ... : null [element] : String | GlobalDataFlow.cs:87:22:87:128 | call to method Zip : IEnumerable [element] : String | provenance | | +| GlobalDataFlow.cs:87:104:87:113 | { ..., ... } : null [element] : String | GlobalDataFlow.cs:87:70:87:113 | (...) ... : null [element] : String | provenance | | +| GlobalDataFlow.cs:87:106:87:111 | access to local variable sink15 : String | GlobalDataFlow.cs:87:104:87:113 | { ..., ... } : null [element] : String | provenance | | +| GlobalDataFlow.cs:89:22:89:110 | call to method Aggregate : String | GlobalDataFlow.cs:90:15:90:20 | access to local variable sink17 | provenance | | +| GlobalDataFlow.cs:89:23:89:66 | (...) ... : null [element] : String | GlobalDataFlow.cs:89:22:89:110 | call to method Aggregate : String | provenance | | +| GlobalDataFlow.cs:89:57:89:66 | { ..., ... } : null [element] : String | GlobalDataFlow.cs:89:23:89:66 | (...) ... : null [element] : String | provenance | | +| GlobalDataFlow.cs:89:59:89:64 | access to local variable sink14 : String | GlobalDataFlow.cs:89:57:89:66 | { ..., ... } : null [element] : String | provenance | | +| GlobalDataFlow.cs:91:22:91:110 | call to method Aggregate : String | GlobalDataFlow.cs:92:15:92:20 | access to local variable sink18 | provenance | | +| GlobalDataFlow.cs:91:22:91:110 | call to method Aggregate : String | GlobalDataFlow.cs:94:24:94:29 | access to local variable sink18 : String | provenance | | +| GlobalDataFlow.cs:91:22:91:110 | call to method Aggregate : String | GlobalDataFlow.cs:97:23:97:28 | access to local variable sink18 : String | provenance | | +| GlobalDataFlow.cs:91:22:91:110 | call to method Aggregate : String | GlobalDataFlow.cs:100:24:100:29 | access to local variable sink18 : String | provenance | | +| GlobalDataFlow.cs:91:75:91:80 | access to local variable sink14 : String | GlobalDataFlow.cs:91:22:91:110 | call to method Aggregate : String | provenance | | +| GlobalDataFlow.cs:94:24:94:29 | access to local variable sink18 : String | GlobalDataFlow.cs:94:36:94:41 | SSA def(sink21) : Int32 | provenance | | +| GlobalDataFlow.cs:94:36:94:41 | SSA def(sink21) : Int32 | GlobalDataFlow.cs:95:15:95:20 | access to local variable sink21 | provenance | | +| GlobalDataFlow.cs:97:23:97:28 | access to local variable sink18 : String | GlobalDataFlow.cs:97:35:97:40 | SSA def(sink22) : Boolean | provenance | | +| GlobalDataFlow.cs:97:35:97:40 | SSA def(sink22) : Boolean | GlobalDataFlow.cs:98:15:98:20 | access to local variable sink22 | provenance | | +| GlobalDataFlow.cs:100:24:100:29 | access to local variable sink18 : String | GlobalDataFlow.cs:100:82:100:88 | SSA def(sink21b) : Int32 | provenance | | +| GlobalDataFlow.cs:100:82:100:88 | SSA def(sink21b) : Int32 | GlobalDataFlow.cs:101:15:101:21 | access to local variable sink21b | provenance | | +| GlobalDataFlow.cs:138:40:138:40 | x : String | GlobalDataFlow.cs:138:63:138:63 | access to parameter x : String | provenance | | +| GlobalDataFlow.cs:138:63:138:63 | access to parameter x : String | GlobalDataFlow.cs:138:45:138:64 | call to method ApplyFunc : String | provenance | | +| GlobalDataFlow.cs:138:63:138:63 | access to parameter x : String | GlobalDataFlow.cs:387:46:387:46 | x : String | provenance | | +| GlobalDataFlow.cs:139:21:139:34 | delegate call : String | GlobalDataFlow.cs:140:15:140:19 | access to local variable sink4 | provenance | | +| GlobalDataFlow.cs:139:21:139:34 | delegate call : String | GlobalDataFlow.cs:147:39:147:43 | access to local variable sink4 : String | provenance | | +| GlobalDataFlow.cs:139:29:139:33 | access to local variable sink3 : String | GlobalDataFlow.cs:138:40:138:40 | x : String | provenance | | +| GlobalDataFlow.cs:139:29:139:33 | access to local variable sink3 : String | GlobalDataFlow.cs:139:21:139:34 | delegate call : String | provenance | | +| GlobalDataFlow.cs:147:21:147:44 | call to method ApplyFunc : String | GlobalDataFlow.cs:148:15:148:19 | access to local variable sink5 | provenance | | +| GlobalDataFlow.cs:147:39:147:43 | access to local variable sink4 : String | GlobalDataFlow.cs:147:21:147:44 | call to method ApplyFunc : String | provenance | | +| GlobalDataFlow.cs:147:39:147:43 | access to local variable sink4 : String | GlobalDataFlow.cs:387:46:387:46 | x : String | provenance | | +| GlobalDataFlow.cs:157:21:157:25 | call to method Out : String | GlobalDataFlow.cs:158:15:158:19 | access to local variable sink6 | provenance | | +| GlobalDataFlow.cs:160:20:160:24 | SSA def(sink7) : String | GlobalDataFlow.cs:161:15:161:19 | access to local variable sink7 | provenance | | +| GlobalDataFlow.cs:163:20:163:24 | SSA def(sink8) : String | GlobalDataFlow.cs:164:15:164:19 | access to local variable sink8 | provenance | | +| GlobalDataFlow.cs:165:22:165:31 | call to method OutYield : IEnumerable [element] : String | GlobalDataFlow.cs:165:22:165:39 | call to method First : String | provenance | | +| GlobalDataFlow.cs:165:22:165:39 | call to method First : String | GlobalDataFlow.cs:166:15:166:20 | access to local variable sink12 | provenance | | +| GlobalDataFlow.cs:167:22:167:43 | call to method TaintedParam : String | GlobalDataFlow.cs:168:15:168:20 | access to local variable sink23 | provenance | | +| GlobalDataFlow.cs:183:35:183:48 | "taint source" : String | GlobalDataFlow.cs:184:21:184:26 | delegate call : String | provenance | | +| GlobalDataFlow.cs:184:21:184:26 | delegate call : String | GlobalDataFlow.cs:185:15:185:19 | access to local variable sink9 | provenance | | +| GlobalDataFlow.cs:193:22:193:42 | object creation of type Lazy : Lazy [property Value] : String | GlobalDataFlow.cs:193:22:193:48 | access to property Value : String | provenance | | +| GlobalDataFlow.cs:193:22:193:48 | access to property Value : String | GlobalDataFlow.cs:194:15:194:20 | access to local variable sink10 | provenance | | +| GlobalDataFlow.cs:201:22:201:32 | access to property OutProperty : String | GlobalDataFlow.cs:202:15:202:20 | access to local variable sink19 | provenance | | +| GlobalDataFlow.cs:211:38:211:61 | array creation of type String[] : null [element] : String | GlobalDataFlow.cs:211:38:211:75 | call to method AsQueryable : IQueryable [element] : String | provenance | | +| GlobalDataFlow.cs:211:38:211:75 | call to method AsQueryable : IQueryable [element] : String | GlobalDataFlow.cs:216:22:216:28 | access to local variable tainted : IQueryable [element] : String | provenance | | +| GlobalDataFlow.cs:211:38:211:75 | call to method AsQueryable : IQueryable [element] : String | GlobalDataFlow.cs:218:22:218:28 | access to local variable tainted : IQueryable [element] : String | provenance | | +| GlobalDataFlow.cs:211:38:211:75 | call to method AsQueryable : IQueryable [element] : String | GlobalDataFlow.cs:220:22:220:28 | access to local variable tainted : IQueryable [element] : String | provenance | | +| GlobalDataFlow.cs:211:44:211:61 | { ..., ... } : null [element] : String | GlobalDataFlow.cs:211:38:211:61 | array creation of type String[] : null [element] : String | provenance | | +| GlobalDataFlow.cs:211:46:211:59 | "taint source" : String | GlobalDataFlow.cs:211:44:211:61 | { ..., ... } : null [element] : String | provenance | | +| GlobalDataFlow.cs:214:35:214:45 | sinkParam10 : String | GlobalDataFlow.cs:214:58:214:68 | access to parameter sinkParam10 | provenance | | +| GlobalDataFlow.cs:215:71:215:71 | x : String | GlobalDataFlow.cs:215:89:215:89 | access to parameter x : String | provenance | | +| GlobalDataFlow.cs:215:89:215:89 | access to parameter x : String | GlobalDataFlow.cs:321:32:321:41 | sinkParam9 : String | provenance | | +| GlobalDataFlow.cs:216:22:216:28 | access to local variable tainted : IQueryable [element] : String | GlobalDataFlow.cs:214:35:214:45 | sinkParam10 : String | provenance | | +| GlobalDataFlow.cs:216:22:216:28 | access to local variable tainted : IQueryable [element] : String | GlobalDataFlow.cs:216:22:216:39 | call to method Select : IEnumerable [element] : String | provenance | | +| GlobalDataFlow.cs:216:22:216:39 | call to method Select : IEnumerable [element] : String | GlobalDataFlow.cs:216:22:216:47 | call to method First : String | provenance | | +| GlobalDataFlow.cs:216:22:216:47 | call to method First : String | GlobalDataFlow.cs:217:15:217:20 | access to local variable sink24 | provenance | | +| GlobalDataFlow.cs:218:22:218:28 | access to local variable tainted : IQueryable [element] : String | GlobalDataFlow.cs:215:71:215:71 | x : String | provenance | | +| GlobalDataFlow.cs:218:22:218:28 | access to local variable tainted : IQueryable [element] : String | GlobalDataFlow.cs:218:22:218:39 | call to method Select : IQueryable [element] : String | provenance | | +| GlobalDataFlow.cs:218:22:218:39 | call to method Select : IQueryable [element] : String | GlobalDataFlow.cs:218:22:218:47 | call to method First : String | provenance | | +| GlobalDataFlow.cs:218:22:218:47 | call to method First : String | GlobalDataFlow.cs:219:15:219:20 | access to local variable sink25 | provenance | | +| GlobalDataFlow.cs:220:22:220:28 | access to local variable tainted : IQueryable [element] : String | GlobalDataFlow.cs:220:22:220:49 | call to method Select : IEnumerable [element] : String | provenance | | +| GlobalDataFlow.cs:220:22:220:28 | access to local variable tainted : IQueryable [element] : String | GlobalDataFlow.cs:327:32:327:42 | sinkParam11 : String | provenance | | +| GlobalDataFlow.cs:220:22:220:49 | call to method Select : IEnumerable [element] : String | GlobalDataFlow.cs:220:22:220:57 | call to method First : String | provenance | | +| GlobalDataFlow.cs:220:22:220:57 | call to method First : String | GlobalDataFlow.cs:221:15:221:20 | access to local variable sink26 | provenance | | +| GlobalDataFlow.cs:241:20:241:49 | call to method Run : Task [property Result] : String | GlobalDataFlow.cs:242:22:242:25 | access to local variable task : Task [property Result] : String | provenance | | +| GlobalDataFlow.cs:241:20:241:49 | call to method Run : Task [property Result] : String | GlobalDataFlow.cs:244:28:244:31 | access to local variable task : Task [property Result] : String | provenance | | +| GlobalDataFlow.cs:241:35:241:48 | "taint source" : String | GlobalDataFlow.cs:241:20:241:49 | call to method Run : Task [property Result] : String | provenance | | +| GlobalDataFlow.cs:242:22:242:25 | access to local variable task : Task [property Result] : String | GlobalDataFlow.cs:242:22:242:32 | access to property Result : String | provenance | | +| GlobalDataFlow.cs:242:22:242:32 | access to property Result : String | GlobalDataFlow.cs:243:15:243:20 | access to local variable sink41 | provenance | | +| GlobalDataFlow.cs:244:22:244:31 | await ... : String | GlobalDataFlow.cs:245:15:245:20 | access to local variable sink42 | provenance | | +| GlobalDataFlow.cs:244:28:244:31 | access to local variable task : Task [property Result] : String | GlobalDataFlow.cs:244:22:244:31 | await ... : String | provenance | | +| GlobalDataFlow.cs:257:26:257:35 | sinkParam0 : String | GlobalDataFlow.cs:259:16:259:25 | access to parameter sinkParam0 : String | provenance | | +| GlobalDataFlow.cs:257:26:257:35 | sinkParam0 : String | GlobalDataFlow.cs:260:15:260:24 | access to parameter sinkParam0 | provenance | | +| GlobalDataFlow.cs:259:16:259:25 | access to parameter sinkParam0 : String | GlobalDataFlow.cs:257:26:257:35 | sinkParam0 : String | provenance | | +| GlobalDataFlow.cs:263:26:263:35 | sinkParam1 : String | GlobalDataFlow.cs:265:15:265:24 | access to parameter sinkParam1 | provenance | | +| GlobalDataFlow.cs:268:26:268:35 | sinkParam3 : String | GlobalDataFlow.cs:270:15:270:24 | access to parameter sinkParam3 | provenance | | +| GlobalDataFlow.cs:273:26:273:35 | sinkParam4 : String | GlobalDataFlow.cs:275:15:275:24 | access to parameter sinkParam4 | provenance | | +| GlobalDataFlow.cs:278:26:278:35 | sinkParam5 : String | GlobalDataFlow.cs:280:15:280:24 | access to parameter sinkParam5 | provenance | | +| GlobalDataFlow.cs:283:26:283:35 | sinkParam6 : String | GlobalDataFlow.cs:285:15:285:24 | access to parameter sinkParam6 | provenance | | +| GlobalDataFlow.cs:288:26:288:35 | sinkParam7 : String | GlobalDataFlow.cs:290:15:290:24 | access to parameter sinkParam7 | provenance | | +| GlobalDataFlow.cs:298:26:298:26 | x : String | GlobalDataFlow.cs:300:37:300:37 | access to parameter x : String | provenance | | +| GlobalDataFlow.cs:300:17:300:38 | call to method ApplyFunc : String | GlobalDataFlow.cs:301:16:301:41 | ... ? ... : ... : String | provenance | | +| GlobalDataFlow.cs:300:27:300:28 | x0 : String | GlobalDataFlow.cs:300:33:300:34 | access to parameter x0 : String | provenance | | +| GlobalDataFlow.cs:300:37:300:37 | access to parameter x : String | GlobalDataFlow.cs:300:17:300:38 | call to method ApplyFunc : String | provenance | | +| GlobalDataFlow.cs:300:37:300:37 | access to parameter x : String | GlobalDataFlow.cs:387:46:387:46 | x : String | provenance | | +| GlobalDataFlow.cs:304:32:304:32 | x : String | GlobalDataFlow.cs:306:9:306:13 | SSA def(y) : String | provenance | | +| GlobalDataFlow.cs:310:32:310:32 | x : String | GlobalDataFlow.cs:312:9:312:13 | SSA def(y) : String | provenance | | +| GlobalDataFlow.cs:315:31:315:40 | sinkParam8 : String | GlobalDataFlow.cs:317:15:317:24 | access to parameter sinkParam8 | provenance | | +| GlobalDataFlow.cs:321:32:321:41 | sinkParam9 : String | GlobalDataFlow.cs:323:15:323:24 | access to parameter sinkParam9 | provenance | | +| GlobalDataFlow.cs:327:32:327:42 | sinkParam11 : String | GlobalDataFlow.cs:329:15:329:25 | access to parameter sinkParam11 | provenance | | +| GlobalDataFlow.cs:341:16:341:29 | "taint source" : String | GlobalDataFlow.cs:157:21:157:25 | call to method Out : String | provenance | | +| GlobalDataFlow.cs:341:16:341:29 | "taint source" : String | GlobalDataFlow.cs:193:22:193:42 | object creation of type Lazy : Lazy [property Value] : String | provenance | | +| GlobalDataFlow.cs:346:9:346:26 | SSA def(x) : String | GlobalDataFlow.cs:160:20:160:24 | SSA def(sink7) : String | provenance | | +| GlobalDataFlow.cs:346:13:346:26 | "taint source" : String | GlobalDataFlow.cs:346:9:346:26 | SSA def(x) : String | provenance | | +| GlobalDataFlow.cs:351:9:351:26 | SSA def(x) : String | GlobalDataFlow.cs:163:20:163:24 | SSA def(sink8) : String | provenance | | +| GlobalDataFlow.cs:351:13:351:26 | "taint source" : String | GlobalDataFlow.cs:351:9:351:26 | SSA def(x) : String | provenance | | +| GlobalDataFlow.cs:357:22:357:35 | "taint source" : String | GlobalDataFlow.cs:165:22:165:31 | call to method OutYield : IEnumerable [element] : String | provenance | | +| GlobalDataFlow.cs:382:41:382:41 | x : String | GlobalDataFlow.cs:384:11:384:11 | access to parameter x : String | provenance | | +| GlobalDataFlow.cs:382:41:382:41 | x : String | GlobalDataFlow.cs:384:11:384:11 | access to parameter x : String | provenance | | +| GlobalDataFlow.cs:384:11:384:11 | access to parameter x : String | GlobalDataFlow.cs:54:15:54:15 | x : String | provenance | | +| GlobalDataFlow.cs:384:11:384:11 | access to parameter x : String | GlobalDataFlow.cs:268:26:268:35 | sinkParam3 : String | provenance | | +| GlobalDataFlow.cs:387:46:387:46 | x : String | GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | provenance | | +| GlobalDataFlow.cs:387:46:387:46 | x : String | GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | provenance | | +| GlobalDataFlow.cs:387:46:387:46 | x : String | GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | provenance | | +| GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | GlobalDataFlow.cs:298:26:298:26 | x : String | provenance | | +| GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | GlobalDataFlow.cs:298:26:298:26 | x : String | provenance | | +| GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | GlobalDataFlow.cs:300:27:300:28 | x0 : String | provenance | | +| GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | GlobalDataFlow.cs:389:16:389:19 | delegate call : String | provenance | | +| GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | GlobalDataFlow.cs:389:16:389:19 | delegate call : String | provenance | | +| GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | GlobalDataFlow.cs:389:16:389:19 | delegate call : String | provenance | | +| GlobalDataFlow.cs:396:52:396:52 | x : String | GlobalDataFlow.cs:398:11:398:11 | access to parameter x : String | provenance | | +| GlobalDataFlow.cs:396:52:396:52 | x : String | GlobalDataFlow.cs:398:11:398:11 | access to parameter x : String | provenance | | +| GlobalDataFlow.cs:396:52:396:52 | x : String | GlobalDataFlow.cs:398:11:398:11 | access to parameter x : String | provenance | | +| GlobalDataFlow.cs:398:11:398:11 | access to parameter x : String | GlobalDataFlow.cs:57:37:57:37 | x : String | provenance | | +| GlobalDataFlow.cs:398:11:398:11 | access to parameter x : String | GlobalDataFlow.cs:278:26:278:35 | sinkParam5 : String | provenance | | +| GlobalDataFlow.cs:398:11:398:11 | access to parameter x : String | GlobalDataFlow.cs:283:26:283:35 | sinkParam6 : String | provenance | | +| GlobalDataFlow.cs:401:39:401:45 | tainted : String | GlobalDataFlow.cs:404:15:404:20 | access to local variable sink11 | provenance | | +| GlobalDataFlow.cs:401:39:401:45 | tainted : String | GlobalDataFlow.cs:405:16:405:21 | access to local variable sink11 : String | provenance | | +| GlobalDataFlow.cs:405:16:405:21 | access to local variable sink11 : String | GlobalDataFlow.cs:167:22:167:43 | call to method TaintedParam : String | provenance | | +| GlobalDataFlow.cs:427:9:427:11 | value : String | GlobalDataFlow.cs:427:41:427:46 | access to local variable sink20 | provenance | | +| GlobalDataFlow.cs:438:22:438:35 | "taint source" : String | GlobalDataFlow.cs:201:22:201:32 | access to property OutProperty : String | provenance | | +| GlobalDataFlow.cs:448:22:448:65 | call to method Join : String | GlobalDataFlow.cs:449:15:449:20 | access to local variable sink44 | provenance | | +| GlobalDataFlow.cs:448:51:448:64 | "taint source" : String | GlobalDataFlow.cs:448:22:448:65 | call to method Join : String | provenance | | +| GlobalDataFlow.cs:457:20:457:49 | call to method Run : Task [property Result] : String | GlobalDataFlow.cs:458:25:458:28 | access to local variable task : Task [property Result] : String | provenance | | +| GlobalDataFlow.cs:457:35:457:48 | "taint source" : String | GlobalDataFlow.cs:457:20:457:49 | call to method Run : Task [property Result] : String | provenance | | +| GlobalDataFlow.cs:458:25:458:28 | access to local variable task : Task [property Result] : String | GlobalDataFlow.cs:458:25:458:50 | call to method ConfigureAwait : ConfiguredTaskAwaitable [synthetic m_configuredTaskAwaiter, synthetic m_task_configured_task_awaitable, property Result] : String | provenance | | +| GlobalDataFlow.cs:458:25:458:50 | call to method ConfigureAwait : ConfiguredTaskAwaitable [synthetic m_configuredTaskAwaiter, synthetic m_task_configured_task_awaitable, property Result] : String | GlobalDataFlow.cs:459:23:459:31 | access to local variable awaitable : ConfiguredTaskAwaitable [synthetic m_configuredTaskAwaiter, synthetic m_task_configured_task_awaitable, property Result] : String | provenance | | +| GlobalDataFlow.cs:459:23:459:31 | access to local variable awaitable : ConfiguredTaskAwaitable [synthetic m_configuredTaskAwaiter, synthetic m_task_configured_task_awaitable, property Result] : String | GlobalDataFlow.cs:459:23:459:44 | call to method GetAwaiter : ConfiguredTaskAwaitable.ConfiguredTaskAwaiter [synthetic m_task_configured_task_awaitable, property Result] : String | provenance | | +| GlobalDataFlow.cs:459:23:459:44 | call to method GetAwaiter : ConfiguredTaskAwaitable.ConfiguredTaskAwaiter [synthetic m_task_configured_task_awaitable, property Result] : String | GlobalDataFlow.cs:460:22:460:28 | access to local variable awaiter : ConfiguredTaskAwaitable.ConfiguredTaskAwaiter [synthetic m_task_configured_task_awaitable, property Result] : String | provenance | | +| GlobalDataFlow.cs:460:22:460:28 | access to local variable awaiter : ConfiguredTaskAwaitable.ConfiguredTaskAwaiter [synthetic m_task_configured_task_awaitable, property Result] : String | GlobalDataFlow.cs:460:22:460:40 | call to method GetResult : String | provenance | | +| GlobalDataFlow.cs:460:22:460:40 | call to method GetResult : String | GlobalDataFlow.cs:461:15:461:20 | access to local variable sink45 | provenance | | +| GlobalDataFlow.cs:466:53:466:55 | arg : String | GlobalDataFlow.cs:470:15:470:17 | access to parameter arg : String | provenance | | +| 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:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:490:25:490:26 | [post] access to local variable x1 : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:490:30:490:31 | [post] access to local variable x2 : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:497:31:497:32 | [post] access to local variable y1 : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:497:36:497:37 | [post] access to local variable y2 : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:497:42:497:43 | [post] access to local variable y3 : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:508:33:508:33 | [post] access to local variable x : SubSimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:515:20:515:20 | [post] access to parameter x : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:515:25:515:25 | [post] access to local variable y : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:527:20:527:20 | [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:528:20:528:20 | [post] access to local variable y : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:529:18:529:18 | [post] access to local variable z : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:538:20:538:21 | [post] access to parameter sc : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:546:24:546:24 | [post] access to local variable x : 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 | | +| GlobalDataFlow.cs:491:15:491:16 | access to local variable x1 : SimpleClass [field field] : String | GlobalDataFlow.cs:491:15:491:22 | access to field field | provenance | | +| GlobalDataFlow.cs:492:15:492:16 | access to local variable x2 : SimpleClass [field field] : String | GlobalDataFlow.cs:492:15:492:22 | access to field field | provenance | | +| GlobalDataFlow.cs:497:31:497:32 | [post] access to local variable y1 : SimpleClass [field field] : String | GlobalDataFlow.cs:498:15:498:16 | access to local variable y1 : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:497:36:497:37 | [post] access to local variable y2 : SimpleClass [field field] : String | GlobalDataFlow.cs:499:15:499:16 | access to local variable y2 : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:497:42:497:43 | [post] access to local variable y3 : SimpleClass [field field] : String | GlobalDataFlow.cs:500:15:500:16 | access to local variable y3 : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:498:15:498:16 | access to local variable y1 : SimpleClass [field field] : String | GlobalDataFlow.cs:498:15:498:22 | access to field field | provenance | | +| GlobalDataFlow.cs:499:15:499:16 | access to local variable y2 : SimpleClass [field field] : String | GlobalDataFlow.cs:499:15:499:22 | access to field field | provenance | | +| GlobalDataFlow.cs:500:15:500:16 | access to local variable y3 : SimpleClass [field field] : String | GlobalDataFlow.cs:500:15:500:22 | access to field field | provenance | | +| GlobalDataFlow.cs:508:33:508:33 | [post] access to local variable x : SubSimpleClass [field field] : String | GlobalDataFlow.cs:509:15:509:15 | access to local variable x : SubSimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:509:15:509:15 | access to local variable x : SubSimpleClass [field field] : String | GlobalDataFlow.cs:509:15:509:21 | access to field field | provenance | | +| GlobalDataFlow.cs:515:20:515:20 | [post] access to parameter x : SimpleClass [field field] : String | GlobalDataFlow.cs:516:15:516:15 | access to parameter x : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:515:25:515:25 | [post] access to local variable y : SimpleClass [field field] : String | GlobalDataFlow.cs:517:15:517:15 | access to local variable y : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:516:15:516:15 | access to parameter x : SimpleClass [field field] : String | GlobalDataFlow.cs:516:15:516:21 | access to field field | provenance | | +| GlobalDataFlow.cs:517:15:517:15 | access to local variable y : SimpleClass [field field] : String | GlobalDataFlow.cs:517:15:517:21 | access to field field | provenance | | +| GlobalDataFlow.cs:527:20:527:20 | [post] access to local variable x : SimpleClass [field field] : String | GlobalDataFlow.cs:531:15:531:15 | access to local variable x : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:528:20:528:20 | [post] access to local variable y : SimpleClass [field field] : String | GlobalDataFlow.cs:532:15:532:15 | access to local variable y : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:529:18:529:18 | [post] access to local variable z : SimpleClass [field field] : String | GlobalDataFlow.cs:533:15:533:15 | access to local variable z : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:531:15:531:15 | access to local variable x : SimpleClass [field field] : String | GlobalDataFlow.cs:531:15:531:21 | access to field field | provenance | | +| GlobalDataFlow.cs:532:15:532:15 | access to local variable y : SimpleClass [field field] : String | GlobalDataFlow.cs:532:15:532:21 | access to field field | provenance | | +| GlobalDataFlow.cs:533:15:533:15 | access to local variable z : SimpleClass [field field] : String | GlobalDataFlow.cs:533:15:533:21 | access to field field | provenance | | +| GlobalDataFlow.cs:538:20:538:21 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:539:15:539:16 | access to parameter sc : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:539:15:539:16 | access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:539:15:539:22 | access to field field | provenance | | +| GlobalDataFlow.cs:546:24:546:24 | [post] access to local variable x : SimpleClass [field field] : String | GlobalDataFlow.cs:547:15:547:15 | access to local variable x : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:547:15:547:15 | access to local variable x : SimpleClass [field field] : String | GlobalDataFlow.cs:547:15:547:21 | access to field field | provenance | | +| GlobalDataFlow.cs:553:71:553:71 | e : null [element] : String | GlobalDataFlow.cs:556:27:556:27 | access to parameter e : null [element] : String | provenance | | +| GlobalDataFlow.cs:556:22:556:22 | SSA def(x) : String | GlobalDataFlow.cs:558:46:558:46 | access to local variable x : String | provenance | | +| GlobalDataFlow.cs:556:27:556:27 | access to parameter e : null [element] : String | GlobalDataFlow.cs:556:22:556:22 | SSA def(x) : String | provenance | | +| 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:19:19:19 | access to parameter s : String | GlobalDataFlowStringBuilder.cs:19:9:19:10 | [post] access to parameter sb : StringBuilder | provenance | | +| GlobalDataFlowStringBuilder.cs:22:76:22:76 | s : String | GlobalDataFlowStringBuilder.cs:24:19:24:26 | (...) ... : AppendInterpolatedStringHandler | provenance | | +| GlobalDataFlowStringBuilder.cs:24:19:24:26 | (...) ... : AppendInterpolatedStringHandler | GlobalDataFlowStringBuilder.cs:24:9:24:10 | [post] access to parameter sb : StringBuilder | provenance | | +| 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 | | +| GlobalDataFlowStringBuilder.cs:30:31:30:32 | [post] access to local variable sb : StringBuilder | GlobalDataFlowStringBuilder.cs:40:20:40:26 | (...) ... : AppendInterpolatedStringHandler | provenance | | +| GlobalDataFlowStringBuilder.cs:30:35:30:48 | "taint source" : String | GlobalDataFlowStringBuilder.cs:17:64:17:64 | s : String | provenance | | +| GlobalDataFlowStringBuilder.cs:30:35:30:48 | "taint source" : String | GlobalDataFlowStringBuilder.cs:30:31:30:32 | [post] access to local variable sb : StringBuilder | provenance | | +| GlobalDataFlowStringBuilder.cs:31:21:31:22 | access to local variable sb : StringBuilder | GlobalDataFlowStringBuilder.cs:31:21:31:33 | call to method ToString : String | provenance | | +| GlobalDataFlowStringBuilder.cs:31:21:31:33 | call to method ToString : String | GlobalDataFlowStringBuilder.cs:32:15:32:19 | access to local variable sink0 | provenance | | +| GlobalDataFlowStringBuilder.cs:35:9:35:11 | [post] access to local variable sb1 : StringBuilder | GlobalDataFlowStringBuilder.cs:36:21:36:23 | access to local variable sb1 : StringBuilder | provenance | | +| GlobalDataFlowStringBuilder.cs:35:20:35:21 | access to local variable sb : StringBuilder | GlobalDataFlowStringBuilder.cs:35:9:35:11 | [post] access to local variable sb1 : StringBuilder | provenance | | +| GlobalDataFlowStringBuilder.cs:36:21:36:23 | access to local variable sb1 : StringBuilder | GlobalDataFlowStringBuilder.cs:36:21:36:34 | call to method ToString : String | provenance | | +| GlobalDataFlowStringBuilder.cs:36:21:36:34 | call to method ToString : String | GlobalDataFlowStringBuilder.cs:37:15:37:19 | access to local variable sink1 | provenance | | +| GlobalDataFlowStringBuilder.cs:40:9:40:11 | [post] access to local variable sb2 : StringBuilder | GlobalDataFlowStringBuilder.cs:41:21:41:23 | access to local variable sb2 : StringBuilder | provenance | | +| GlobalDataFlowStringBuilder.cs:40:20:40:26 | (...) ... : AppendInterpolatedStringHandler | GlobalDataFlowStringBuilder.cs:40:9:40:11 | [post] access to local variable sb2 : StringBuilder | provenance | | +| GlobalDataFlowStringBuilder.cs:41:21:41:23 | access to local variable sb2 : StringBuilder | GlobalDataFlowStringBuilder.cs:41:21:41:34 | call to method ToString : String | provenance | | +| GlobalDataFlowStringBuilder.cs:41:21:41:34 | call to method ToString : String | GlobalDataFlowStringBuilder.cs:42:15:42:19 | access to local variable sink2 | provenance | | +| GlobalDataFlowStringBuilder.cs:48:43:48:44 | [post] access to local variable sb : StringBuilder | GlobalDataFlowStringBuilder.cs:49:21:49:22 | access to local variable sb : StringBuilder | provenance | | +| GlobalDataFlowStringBuilder.cs:48:47:48:60 | "taint source" : String | GlobalDataFlowStringBuilder.cs:22:76:22:76 | s : String | provenance | | +| GlobalDataFlowStringBuilder.cs:48:47:48:60 | "taint source" : String | GlobalDataFlowStringBuilder.cs:48:43:48:44 | [post] access to local variable sb : StringBuilder | provenance | | +| GlobalDataFlowStringBuilder.cs:49:21:49:22 | access to local variable sb : StringBuilder | GlobalDataFlowStringBuilder.cs:49:21:49:33 | call to method ToString : String | provenance | | +| GlobalDataFlowStringBuilder.cs:49:21:49:33 | call to method ToString : String | GlobalDataFlowStringBuilder.cs:50:15:50:19 | access to local variable sink3 | provenance | | +| Splitting.cs:3:28:3:34 | tainted : String | Splitting.cs:8:24:8:30 | [b (line 3): false] access to parameter tainted : String | provenance | | +| Splitting.cs:3:28:3:34 | tainted : String | Splitting.cs:8:24:8:30 | [b (line 3): true] access to parameter tainted : String | provenance | | +| Splitting.cs:8:17:8:31 | [b (line 3): false] call to method Return : String | Splitting.cs:9:15:9:15 | [b (line 3): false] access to local variable x | provenance | | +| Splitting.cs:8:17:8:31 | [b (line 3): true] call to method Return : String | Splitting.cs:9:15:9:15 | [b (line 3): true] access to local variable x | provenance | | +| Splitting.cs:8:17:8:31 | [b (line 3): true] call to method Return : String | Splitting.cs:11:19:11:19 | access to local variable x | provenance | | +| Splitting.cs:8:24:8:30 | [b (line 3): false] access to parameter tainted : String | Splitting.cs:8:17:8:31 | [b (line 3): false] call to method Return : String | provenance | | +| Splitting.cs:8:24:8:30 | [b (line 3): false] access to parameter tainted : String | Splitting.cs:16:26:16:26 | x : String | provenance | | +| Splitting.cs:8:24:8:30 | [b (line 3): true] access to parameter tainted : String | Splitting.cs:8:17:8:31 | [b (line 3): true] call to method Return : String | provenance | | +| Splitting.cs:8:24:8:30 | [b (line 3): true] access to parameter tainted : String | Splitting.cs:16:26:16:26 | x : String | provenance | | +| Splitting.cs:16:26:16:26 | x : String | Splitting.cs:16:32:16:32 | access to parameter x : String | provenance | | +| Splitting.cs:18:24:18:24 | s : String | Splitting.cs:20:29:20:29 | access to parameter s : String | provenance | | +| Splitting.cs:20:29:20:29 | access to parameter s : String | Splitting.cs:16:26:16:26 | x : String | provenance | | +| Splitting.cs:20:29:20:29 | access to parameter s : String | Splitting.cs:20:22:20:30 | call to method Return : String | provenance | | +| Splitting.cs:21:9:21:11 | value : String | Splitting.cs:21:28:21:32 | access to parameter value : String | provenance | | +| Splitting.cs:21:28:21:32 | access to parameter value : String | Splitting.cs:16:26:16:26 | x : String | provenance | | +| Splitting.cs:21:28:21:32 | access to parameter value : String | Splitting.cs:21:21:21:33 | call to method Return | provenance | | +| Splitting.cs:24:28:24:34 | tainted : String | Splitting.cs:30:17:30:23 | [b (line 24): false] access to parameter tainted : String | provenance | | +| Splitting.cs:24:28:24:34 | tainted : String | Splitting.cs:30:17:30:23 | [b (line 24): true] access to parameter tainted : String | provenance | | +| Splitting.cs:24:28:24:34 | tainted : String | Splitting.cs:31:19:31:25 | [b (line 24): false] access to parameter tainted : String | provenance | | +| Splitting.cs:24:28:24:34 | tainted : String | Splitting.cs:31:19:31:25 | [b (line 24): true] access to parameter tainted : String | provenance | | +| Splitting.cs:30:17:30:23 | [b (line 24): false] access to parameter tainted : String | Splitting.cs:21:9:21:11 | value : String | provenance | | +| Splitting.cs:30:17:30:23 | [b (line 24): true] access to parameter tainted : String | Splitting.cs:21:9:21:11 | value : String | provenance | | +| Splitting.cs:31:17:31:26 | [b (line 24): false] dynamic access to element : String | Splitting.cs:32:15:32:15 | [b (line 24): false] access to local variable x | provenance | | +| Splitting.cs:31:17:31:26 | [b (line 24): true] dynamic access to element : String | Splitting.cs:32:15:32:15 | [b (line 24): true] access to local variable x | provenance | | +| Splitting.cs:31:17:31:26 | [b (line 24): true] dynamic access to element : String | Splitting.cs:34:19:34:19 | access to local variable x | provenance | | +| Splitting.cs:31:19:31:25 | [b (line 24): false] access to parameter tainted : String | Splitting.cs:18:24:18:24 | s : String | provenance | | +| Splitting.cs:31:19:31:25 | [b (line 24): false] access to parameter tainted : String | Splitting.cs:31:17:31:26 | [b (line 24): false] dynamic access to element : String | provenance | | +| Splitting.cs:31:19:31:25 | [b (line 24): true] access to parameter tainted : String | Splitting.cs:18:24:18:24 | s : String | provenance | | +| Splitting.cs:31:19:31:25 | [b (line 24): true] access to parameter tainted : String | Splitting.cs:31:17:31:26 | [b (line 24): true] dynamic access to element : String | provenance | | +| Splitting.cs:39:21:39:34 | [b (line 37): true] "taint source" : String | Splitting.cs:41:19:41:19 | access to local variable s | provenance | | +| Splitting.cs:48:36:48:49 | "taint source" : String | Splitting.cs:50:19:50:19 | access to local variable s | provenance | | +| Splitting.cs:48:36:48:49 | "taint source" : String | Splitting.cs:52:19:52:19 | access to local variable s | provenance | | nodes | Capture.cs:7:20:7:26 | tainted : String | semmle.label | tainted : String | | Capture.cs:12:19:12:24 | access to local variable sink27 | semmle.label | access to local variable sink27 | diff --git a/csharp/ql/test/library-tests/dataflow/operators/operatorFlow.expected b/csharp/ql/test/library-tests/dataflow/operators/operatorFlow.expected index f5f0902b3a8..d55c099ca4f 100644 --- a/csharp/ql/test/library-tests/dataflow/operators/operatorFlow.expected +++ b/csharp/ql/test/library-tests/dataflow/operators/operatorFlow.expected @@ -1,77 +1,77 @@ testFailures edges -| Operator.cs:9:39:9:39 | x : C | Operator.cs:9:50:9:50 | access to parameter x : C | -| Operator.cs:9:39:9:39 | x : C | Operator.cs:9:50:9:50 | access to parameter x : C | -| Operator.cs:16:38:16:38 | x : C | Operator.cs:16:49:16:49 | access to parameter x : C | -| Operator.cs:16:38:16:38 | x : C | Operator.cs:16:49:16:49 | access to parameter x : C | -| Operator.cs:18:51:18:51 | y : C | Operator.cs:18:57:18:57 | access to parameter y : C | -| Operator.cs:18:51:18:51 | y : C | Operator.cs:18:57:18:57 | access to parameter y : C | -| Operator.cs:19:38:19:38 | x : C | Operator.cs:19:49:19:49 | access to parameter x : C | -| Operator.cs:19:38:19:38 | x : C | Operator.cs:19:49:19:49 | access to parameter x : C | -| Operator.cs:21:43:21:43 | y : C | Operator.cs:21:49:21:49 | access to parameter y : C | -| Operator.cs:21:43:21:43 | y : C | Operator.cs:21:49:21:49 | access to parameter y : C | -| Operator.cs:22:51:22:51 | y : C | Operator.cs:22:57:22:57 | access to parameter y : C | -| Operator.cs:22:51:22:51 | y : C | Operator.cs:22:57:22:57 | access to parameter y : C | -| Operator.cs:27:17:27:28 | call to method Source : C | Operator.cs:29:17:29:17 | access to local variable x : C | -| Operator.cs:27:17:27:28 | call to method Source : C | Operator.cs:29:17:29:17 | access to local variable x : C | -| Operator.cs:29:17:29:17 | access to local variable x : C | Operator.cs:16:38:16:38 | x : C | -| Operator.cs:29:17:29:17 | access to local variable x : C | Operator.cs:16:38:16:38 | x : C | -| Operator.cs:29:17:29:17 | access to local variable x : C | Operator.cs:29:17:29:21 | call to operator + : C | -| Operator.cs:29:17:29:17 | access to local variable x : C | Operator.cs:29:17:29:21 | call to operator + : C | -| Operator.cs:29:17:29:21 | call to operator + : C | Operator.cs:30:14:30:14 | access to local variable z | -| Operator.cs:29:17:29:21 | call to operator + : C | Operator.cs:30:14:30:14 | access to local variable z | -| Operator.cs:35:17:35:28 | call to method Source : C | Operator.cs:37:27:37:27 | access to local variable x : C | -| Operator.cs:35:17:35:28 | call to method Source : C | Operator.cs:37:27:37:27 | access to local variable x : C | -| Operator.cs:37:27:37:27 | access to local variable x : C | Operator.cs:19:38:19:38 | x : C | -| Operator.cs:37:27:37:27 | access to local variable x : C | Operator.cs:19:38:19:38 | x : C | -| Operator.cs:37:27:37:27 | access to local variable x : C | Operator.cs:37:27:37:31 | call to operator - : C | -| Operator.cs:37:27:37:27 | access to local variable x : C | Operator.cs:37:27:37:31 | call to operator - : C | -| Operator.cs:37:27:37:31 | call to operator - : C | Operator.cs:38:14:38:14 | access to local variable z | -| Operator.cs:37:27:37:31 | call to operator - : C | Operator.cs:38:14:38:14 | access to local variable z | -| Operator.cs:44:17:44:28 | call to method Source : C | Operator.cs:45:29:45:29 | access to local variable y : C | -| Operator.cs:44:17:44:28 | call to method Source : C | Operator.cs:45:29:45:29 | access to local variable y : C | -| Operator.cs:45:25:45:29 | call to operator checked - : C | Operator.cs:46:14:46:14 | access to local variable z | -| Operator.cs:45:25:45:29 | call to operator checked - : C | Operator.cs:46:14:46:14 | access to local variable z | -| Operator.cs:45:29:45:29 | access to local variable y : C | Operator.cs:18:51:18:51 | y : C | -| Operator.cs:45:29:45:29 | access to local variable y : C | Operator.cs:18:51:18:51 | y : C | -| Operator.cs:45:29:45:29 | access to local variable y : C | Operator.cs:45:25:45:29 | call to operator checked - : C | -| Operator.cs:45:29:45:29 | access to local variable y : C | Operator.cs:45:25:45:29 | call to operator checked - : C | -| Operator.cs:49:28:49:28 | x : C | Operator.cs:51:17:51:17 | access to parameter x : C | -| Operator.cs:49:28:49:28 | x : C | Operator.cs:51:17:51:17 | access to parameter x : C | -| Operator.cs:51:17:51:17 | access to parameter x : C | Operator.cs:9:39:9:39 | x : C | -| Operator.cs:51:17:51:17 | access to parameter x : C | Operator.cs:9:39:9:39 | x : C | -| Operator.cs:51:17:51:17 | access to parameter x : C | Operator.cs:51:17:51:21 | call to operator * : C | -| Operator.cs:51:17:51:17 | access to parameter x : C | Operator.cs:51:17:51:21 | call to operator * : C | -| Operator.cs:51:17:51:21 | call to operator * : C | Operator.cs:52:14:52:14 | (...) ... | -| Operator.cs:51:17:51:21 | call to operator * : C | Operator.cs:52:14:52:14 | (...) ... | -| Operator.cs:57:17:57:28 | call to method Source : C | Operator.cs:59:15:59:15 | access to local variable x : C | -| Operator.cs:57:17:57:28 | call to method Source : C | Operator.cs:59:15:59:15 | access to local variable x : C | -| Operator.cs:59:15:59:15 | access to local variable x : C | Operator.cs:49:28:49:28 | x : C | -| Operator.cs:59:15:59:15 | access to local variable x : C | Operator.cs:49:28:49:28 | x : C | -| Operator.cs:62:33:62:33 | y : C | Operator.cs:64:21:64:21 | access to parameter y : C | -| Operator.cs:62:33:62:33 | y : C | Operator.cs:64:21:64:21 | access to parameter y : C | -| Operator.cs:64:17:64:21 | call to operator / : C | Operator.cs:65:14:65:14 | (...) ... | -| Operator.cs:64:17:64:21 | call to operator / : C | Operator.cs:65:14:65:14 | (...) ... | -| Operator.cs:64:21:64:21 | access to parameter y : C | Operator.cs:21:43:21:43 | y : C | -| Operator.cs:64:21:64:21 | access to parameter y : C | Operator.cs:21:43:21:43 | y : C | -| Operator.cs:64:21:64:21 | access to parameter y : C | Operator.cs:64:17:64:21 | call to operator / : C | -| Operator.cs:64:21:64:21 | access to parameter y : C | Operator.cs:64:17:64:21 | call to operator / : C | -| Operator.cs:71:17:71:29 | call to method Source : C | Operator.cs:72:18:72:18 | access to local variable y : C | -| Operator.cs:71:17:71:29 | call to method Source : C | Operator.cs:72:18:72:18 | access to local variable y : C | -| Operator.cs:72:18:72:18 | access to local variable y : C | Operator.cs:62:33:62:33 | y : C | -| Operator.cs:72:18:72:18 | access to local variable y : C | Operator.cs:62:33:62:33 | y : C | -| Operator.cs:75:33:75:33 | y : C | Operator.cs:77:29:77:29 | access to parameter y : C | -| Operator.cs:75:33:75:33 | y : C | Operator.cs:77:29:77:29 | access to parameter y : C | -| Operator.cs:77:25:77:29 | call to operator checked / : C | Operator.cs:78:14:78:14 | (...) ... | -| Operator.cs:77:25:77:29 | call to operator checked / : C | Operator.cs:78:14:78:14 | (...) ... | -| Operator.cs:77:29:77:29 | access to parameter y : C | Operator.cs:22:51:22:51 | y : C | -| Operator.cs:77:29:77:29 | access to parameter y : C | Operator.cs:22:51:22:51 | y : C | -| Operator.cs:77:29:77:29 | access to parameter y : C | Operator.cs:77:25:77:29 | call to operator checked / : C | -| Operator.cs:77:29:77:29 | access to parameter y : C | Operator.cs:77:25:77:29 | call to operator checked / : C | -| Operator.cs:84:17:84:29 | call to method Source : C | Operator.cs:85:18:85:18 | access to local variable y : C | -| Operator.cs:84:17:84:29 | call to method Source : C | Operator.cs:85:18:85:18 | access to local variable y : C | -| Operator.cs:85:18:85:18 | access to local variable y : C | Operator.cs:75:33:75:33 | y : C | -| Operator.cs:85:18:85:18 | access to local variable y : C | Operator.cs:75:33:75:33 | y : C | +| Operator.cs:9:39:9:39 | x : C | Operator.cs:9:50:9:50 | access to parameter x : C | provenance | | +| Operator.cs:9:39:9:39 | x : C | Operator.cs:9:50:9:50 | access to parameter x : C | provenance | | +| Operator.cs:16:38:16:38 | x : C | Operator.cs:16:49:16:49 | access to parameter x : C | provenance | | +| Operator.cs:16:38:16:38 | x : C | Operator.cs:16:49:16:49 | access to parameter x : C | provenance | | +| Operator.cs:18:51:18:51 | y : C | Operator.cs:18:57:18:57 | access to parameter y : C | provenance | | +| Operator.cs:18:51:18:51 | y : C | Operator.cs:18:57:18:57 | access to parameter y : C | provenance | | +| Operator.cs:19:38:19:38 | x : C | Operator.cs:19:49:19:49 | access to parameter x : C | provenance | | +| Operator.cs:19:38:19:38 | x : C | Operator.cs:19:49:19:49 | access to parameter x : C | provenance | | +| Operator.cs:21:43:21:43 | y : C | Operator.cs:21:49:21:49 | access to parameter y : C | provenance | | +| Operator.cs:21:43:21:43 | y : C | Operator.cs:21:49:21:49 | access to parameter y : C | provenance | | +| Operator.cs:22:51:22:51 | y : C | Operator.cs:22:57:22:57 | access to parameter y : C | provenance | | +| Operator.cs:22:51:22:51 | y : C | Operator.cs:22:57:22:57 | access to parameter y : C | provenance | | +| Operator.cs:27:17:27:28 | call to method Source : C | Operator.cs:29:17:29:17 | access to local variable x : C | provenance | | +| Operator.cs:27:17:27:28 | call to method Source : C | Operator.cs:29:17:29:17 | access to local variable x : C | provenance | | +| Operator.cs:29:17:29:17 | access to local variable x : C | Operator.cs:16:38:16:38 | x : C | provenance | | +| Operator.cs:29:17:29:17 | access to local variable x : C | Operator.cs:16:38:16:38 | x : C | provenance | | +| Operator.cs:29:17:29:17 | access to local variable x : C | Operator.cs:29:17:29:21 | call to operator + : C | provenance | | +| Operator.cs:29:17:29:17 | access to local variable x : C | Operator.cs:29:17:29:21 | call to operator + : C | provenance | | +| Operator.cs:29:17:29:21 | call to operator + : C | Operator.cs:30:14:30:14 | access to local variable z | provenance | | +| Operator.cs:29:17:29:21 | call to operator + : C | Operator.cs:30:14:30:14 | access to local variable z | provenance | | +| Operator.cs:35:17:35:28 | call to method Source : C | Operator.cs:37:27:37:27 | access to local variable x : C | provenance | | +| Operator.cs:35:17:35:28 | call to method Source : C | Operator.cs:37:27:37:27 | access to local variable x : C | provenance | | +| Operator.cs:37:27:37:27 | access to local variable x : C | Operator.cs:19:38:19:38 | x : C | provenance | | +| Operator.cs:37:27:37:27 | access to local variable x : C | Operator.cs:19:38:19:38 | x : C | provenance | | +| Operator.cs:37:27:37:27 | access to local variable x : C | Operator.cs:37:27:37:31 | call to operator - : C | provenance | | +| Operator.cs:37:27:37:27 | access to local variable x : C | Operator.cs:37:27:37:31 | call to operator - : C | provenance | | +| Operator.cs:37:27:37:31 | call to operator - : C | Operator.cs:38:14:38:14 | access to local variable z | provenance | | +| Operator.cs:37:27:37:31 | call to operator - : C | Operator.cs:38:14:38:14 | access to local variable z | provenance | | +| Operator.cs:44:17:44:28 | call to method Source : C | Operator.cs:45:29:45:29 | access to local variable y : C | provenance | | +| Operator.cs:44:17:44:28 | call to method Source : C | Operator.cs:45:29:45:29 | access to local variable y : C | provenance | | +| Operator.cs:45:25:45:29 | call to operator checked - : C | Operator.cs:46:14:46:14 | access to local variable z | provenance | | +| Operator.cs:45:25:45:29 | call to operator checked - : C | Operator.cs:46:14:46:14 | access to local variable z | provenance | | +| Operator.cs:45:29:45:29 | access to local variable y : C | Operator.cs:18:51:18:51 | y : C | provenance | | +| Operator.cs:45:29:45:29 | access to local variable y : C | Operator.cs:18:51:18:51 | y : C | provenance | | +| Operator.cs:45:29:45:29 | access to local variable y : C | Operator.cs:45:25:45:29 | call to operator checked - : C | provenance | | +| Operator.cs:45:29:45:29 | access to local variable y : C | Operator.cs:45:25:45:29 | call to operator checked - : C | provenance | | +| Operator.cs:49:28:49:28 | x : C | Operator.cs:51:17:51:17 | access to parameter x : C | provenance | | +| Operator.cs:49:28:49:28 | x : C | Operator.cs:51:17:51:17 | access to parameter x : C | provenance | | +| Operator.cs:51:17:51:17 | access to parameter x : C | Operator.cs:9:39:9:39 | x : C | provenance | | +| Operator.cs:51:17:51:17 | access to parameter x : C | Operator.cs:9:39:9:39 | x : C | provenance | | +| Operator.cs:51:17:51:17 | access to parameter x : C | Operator.cs:51:17:51:21 | call to operator * : C | provenance | | +| Operator.cs:51:17:51:17 | access to parameter x : C | Operator.cs:51:17:51:21 | call to operator * : C | provenance | | +| Operator.cs:51:17:51:21 | call to operator * : C | Operator.cs:52:14:52:14 | (...) ... | provenance | | +| Operator.cs:51:17:51:21 | call to operator * : C | Operator.cs:52:14:52:14 | (...) ... | provenance | | +| Operator.cs:57:17:57:28 | call to method Source : C | Operator.cs:59:15:59:15 | access to local variable x : C | provenance | | +| Operator.cs:57:17:57:28 | call to method Source : C | Operator.cs:59:15:59:15 | access to local variable x : C | provenance | | +| Operator.cs:59:15:59:15 | access to local variable x : C | Operator.cs:49:28:49:28 | x : C | provenance | | +| Operator.cs:59:15:59:15 | access to local variable x : C | Operator.cs:49:28:49:28 | x : C | provenance | | +| Operator.cs:62:33:62:33 | y : C | Operator.cs:64:21:64:21 | access to parameter y : C | provenance | | +| Operator.cs:62:33:62:33 | y : C | Operator.cs:64:21:64:21 | access to parameter y : C | provenance | | +| Operator.cs:64:17:64:21 | call to operator / : C | Operator.cs:65:14:65:14 | (...) ... | provenance | | +| Operator.cs:64:17:64:21 | call to operator / : C | Operator.cs:65:14:65:14 | (...) ... | provenance | | +| Operator.cs:64:21:64:21 | access to parameter y : C | Operator.cs:21:43:21:43 | y : C | provenance | | +| Operator.cs:64:21:64:21 | access to parameter y : C | Operator.cs:21:43:21:43 | y : C | provenance | | +| Operator.cs:64:21:64:21 | access to parameter y : C | Operator.cs:64:17:64:21 | call to operator / : C | provenance | | +| Operator.cs:64:21:64:21 | access to parameter y : C | Operator.cs:64:17:64:21 | call to operator / : C | provenance | | +| Operator.cs:71:17:71:29 | call to method Source : C | Operator.cs:72:18:72:18 | access to local variable y : C | provenance | | +| Operator.cs:71:17:71:29 | call to method Source : C | Operator.cs:72:18:72:18 | access to local variable y : C | provenance | | +| Operator.cs:72:18:72:18 | access to local variable y : C | Operator.cs:62:33:62:33 | y : C | provenance | | +| Operator.cs:72:18:72:18 | access to local variable y : C | Operator.cs:62:33:62:33 | y : C | provenance | | +| Operator.cs:75:33:75:33 | y : C | Operator.cs:77:29:77:29 | access to parameter y : C | provenance | | +| Operator.cs:75:33:75:33 | y : C | Operator.cs:77:29:77:29 | access to parameter y : C | provenance | | +| Operator.cs:77:25:77:29 | call to operator checked / : C | Operator.cs:78:14:78:14 | (...) ... | provenance | | +| Operator.cs:77:25:77:29 | call to operator checked / : C | Operator.cs:78:14:78:14 | (...) ... | provenance | | +| Operator.cs:77:29:77:29 | access to parameter y : C | Operator.cs:22:51:22:51 | y : C | provenance | | +| Operator.cs:77:29:77:29 | access to parameter y : C | Operator.cs:22:51:22:51 | y : C | provenance | | +| Operator.cs:77:29:77:29 | access to parameter y : C | Operator.cs:77:25:77:29 | call to operator checked / : C | provenance | | +| Operator.cs:77:29:77:29 | access to parameter y : C | Operator.cs:77:25:77:29 | call to operator checked / : C | provenance | | +| Operator.cs:84:17:84:29 | call to method Source : C | Operator.cs:85:18:85:18 | access to local variable y : C | provenance | | +| Operator.cs:84:17:84:29 | call to method Source : C | Operator.cs:85:18:85:18 | access to local variable y : C | provenance | | +| Operator.cs:85:18:85:18 | access to local variable y : C | Operator.cs:75:33:75:33 | y : C | provenance | | +| Operator.cs:85:18:85:18 | access to local variable y : C | Operator.cs:75:33:75:33 | y : C | provenance | | nodes | Operator.cs:9:39:9:39 | x : C | semmle.label | x : C | | Operator.cs:9:39:9:39 | x : C | semmle.label | x : C | diff --git a/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest1.expected b/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest1.expected index edde57342e5..2000a735bdb 100644 --- a/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest1.expected +++ b/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest1.expected @@ -1,12 +1,12 @@ edges -| Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | -| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | Test.cs:15:20:15:61 | call to method GetString : String | -| Test.cs:23:42:23:59 | call to method GetStream : NetworkStream | Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | -| Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | -| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | -| Test.cs:28:85:28:105 | call to method BytesToString : String | Test.cs:28:42:28:111 | ... + ... | -| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | -| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:28:85:28:105 | call to method BytesToString : String | +| Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | provenance | | +| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | Test.cs:15:20:15:61 | call to method GetString : String | provenance | | +| Test.cs:23:42:23:59 | call to method GetStream : NetworkStream | Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | provenance | | +| Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | provenance | | +| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | provenance | | +| Test.cs:28:85:28:105 | call to method BytesToString : String | Test.cs:28:42:28:111 | ... + ... | provenance | | +| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | provenance | | +| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:28:85:28:105 | call to method BytesToString : String | provenance | | nodes | Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | semmle.label | bytes : Byte[] [element] : Object | | Test.cs:15:20:15:61 | call to method GetString : String | semmle.label | call to method GetString : String | diff --git a/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest2.expected b/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest2.expected index 38da52c1af5..85243196a39 100644 --- a/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest2.expected +++ b/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest2.expected @@ -1,13 +1,13 @@ edges -| Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | -| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | Test.cs:15:20:15:61 | call to method GetString : String | -| Test.cs:23:42:23:59 | call to method GetStream : NetworkStream | Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | -| Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | -| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | -| Test.cs:28:85:28:105 | call to method BytesToString : String | Test.cs:28:42:28:111 | ... + ... | -| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | -| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:28:85:28:105 | call to method BytesToString : String | -| Test.cs:34:29:34:69 | call to method ExecuteQuery : String | Test.cs:37:42:37:96 | ... + ... | +| Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | provenance | | +| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | Test.cs:15:20:15:61 | call to method GetString : String | provenance | | +| Test.cs:23:42:23:59 | call to method GetStream : NetworkStream | Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | provenance | | +| Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | provenance | | +| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | provenance | | +| Test.cs:28:85:28:105 | call to method BytesToString : String | Test.cs:28:42:28:111 | ... + ... | provenance | | +| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | provenance | | +| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:28:85:28:105 | call to method BytesToString : String | provenance | | +| Test.cs:34:29:34:69 | call to method ExecuteQuery : String | Test.cs:37:42:37:96 | ... + ... | provenance | | nodes | Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | semmle.label | bytes : Byte[] [element] : Object | | Test.cs:15:20:15:61 | call to method GetString : String | semmle.label | call to method GetString : String | diff --git a/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest3.expected b/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest3.expected index 82868f7fce3..a499529d57d 100644 --- a/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest3.expected +++ b/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest3.expected @@ -1,15 +1,15 @@ edges -| Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | -| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | Test.cs:15:20:15:61 | call to method GetString : String | -| Test.cs:23:42:23:59 | call to method GetStream : NetworkStream | Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | -| Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | -| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | -| Test.cs:28:85:28:105 | call to method BytesToString : String | Test.cs:28:42:28:111 | ... + ... | -| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | -| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:28:85:28:105 | call to method BytesToString : String | -| Test.cs:34:29:34:69 | call to method ExecuteQuery : String | Test.cs:37:42:37:96 | ... + ... | -| Test.cs:43:29:43:50 | call to method ReadEnv : String | Test.cs:46:42:46:96 | ... + ... | -| Test.cs:62:29:62:48 | call to method GetCliArg : String | Test.cs:65:42:65:96 | ... + ... | +| Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | provenance | | +| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | Test.cs:15:20:15:61 | call to method GetString : String | provenance | | +| Test.cs:23:42:23:59 | call to method GetStream : NetworkStream | Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | provenance | | +| Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | provenance | | +| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | provenance | | +| Test.cs:28:85:28:105 | call to method BytesToString : String | Test.cs:28:42:28:111 | ... + ... | provenance | | +| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | provenance | | +| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:28:85:28:105 | call to method BytesToString : String | provenance | | +| Test.cs:34:29:34:69 | call to method ExecuteQuery : String | Test.cs:37:42:37:96 | ... + ... | provenance | | +| Test.cs:43:29:43:50 | call to method ReadEnv : String | Test.cs:46:42:46:96 | ... + ... | provenance | | +| Test.cs:62:29:62:48 | call to method GetCliArg : String | Test.cs:65:42:65:96 | ... + ... | provenance | | nodes | Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | semmle.label | bytes : Byte[] [element] : Object | | Test.cs:15:20:15:61 | call to method GetString : String | semmle.label | call to method GetString : String | diff --git a/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest4.expected b/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest4.expected index b4863cc7b12..53b70178511 100644 --- a/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest4.expected +++ b/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest4.expected @@ -1,16 +1,16 @@ edges -| Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | -| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | Test.cs:15:20:15:61 | call to method GetString : String | -| Test.cs:23:42:23:59 | call to method GetStream : NetworkStream | Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | -| Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | -| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | -| Test.cs:28:85:28:105 | call to method BytesToString : String | Test.cs:28:42:28:111 | ... + ... | -| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | -| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:28:85:28:105 | call to method BytesToString : String | -| Test.cs:34:29:34:69 | call to method ExecuteQuery : String | Test.cs:37:42:37:96 | ... + ... | -| Test.cs:43:29:43:50 | call to method ReadEnv : String | Test.cs:46:42:46:96 | ... + ... | -| Test.cs:53:29:53:52 | call to method GetCustom : String | Test.cs:56:42:56:96 | ... + ... | -| Test.cs:62:29:62:48 | call to method GetCliArg : String | Test.cs:65:42:65:96 | ... + ... | +| Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | provenance | | +| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | Test.cs:15:20:15:61 | call to method GetString : String | provenance | | +| Test.cs:23:42:23:59 | call to method GetStream : NetworkStream | Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | provenance | | +| Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | provenance | | +| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | provenance | | +| Test.cs:28:85:28:105 | call to method BytesToString : String | Test.cs:28:42:28:111 | ... + ... | provenance | | +| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | provenance | | +| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:28:85:28:105 | call to method BytesToString : String | provenance | | +| Test.cs:34:29:34:69 | call to method ExecuteQuery : String | Test.cs:37:42:37:96 | ... + ... | provenance | | +| Test.cs:43:29:43:50 | call to method ReadEnv : String | Test.cs:46:42:46:96 | ... + ... | provenance | | +| Test.cs:53:29:53:52 | call to method GetCustom : String | Test.cs:56:42:56:96 | ... + ... | provenance | | +| Test.cs:62:29:62:48 | call to method GetCliArg : String | Test.cs:65:42:65:96 | ... + ... | provenance | | nodes | Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | semmle.label | bytes : Byte[] [element] : Object | | Test.cs:15:20:15:61 | call to method GetString : String | semmle.label | call to method GetString : String | diff --git a/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest5.expected b/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest5.expected index 69b547c0bdd..184c4722f80 100644 --- a/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest5.expected +++ b/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest5.expected @@ -1,14 +1,14 @@ edges -| Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | -| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | Test.cs:15:20:15:61 | call to method GetString : String | -| Test.cs:23:42:23:59 | call to method GetStream : NetworkStream | Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | -| Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | -| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | -| Test.cs:28:85:28:105 | call to method BytesToString : String | Test.cs:28:42:28:111 | ... + ... | -| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | -| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:28:85:28:105 | call to method BytesToString : String | -| Test.cs:43:29:43:50 | call to method ReadEnv : String | Test.cs:46:42:46:96 | ... + ... | -| Test.cs:62:29:62:48 | call to method GetCliArg : String | Test.cs:65:42:65:96 | ... + ... | +| Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | provenance | | +| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | Test.cs:15:20:15:61 | call to method GetString : String | provenance | | +| Test.cs:23:42:23:59 | call to method GetStream : NetworkStream | Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | provenance | | +| Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | provenance | | +| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | provenance | | +| Test.cs:28:85:28:105 | call to method BytesToString : String | Test.cs:28:42:28:111 | ... + ... | provenance | | +| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | provenance | | +| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:28:85:28:105 | call to method BytesToString : String | provenance | | +| Test.cs:43:29:43:50 | call to method ReadEnv : String | Test.cs:46:42:46:96 | ... + ... | provenance | | +| Test.cs:62:29:62:48 | call to method GetCliArg : String | Test.cs:65:42:65:96 | ... + ... | provenance | | nodes | Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | semmle.label | bytes : Byte[] [element] : Object | | Test.cs:15:20:15:61 | call to method GetString : String | semmle.label | call to method GetString : String | diff --git a/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest6.expected b/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest6.expected index f48ee60904b..72271d08836 100644 --- a/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest6.expected +++ b/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest6.expected @@ -1,14 +1,14 @@ edges -| Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | -| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | Test.cs:15:20:15:61 | call to method GetString : String | -| Test.cs:23:42:23:59 | call to method GetStream : NetworkStream | Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | -| Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | -| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | -| Test.cs:28:85:28:105 | call to method BytesToString : String | Test.cs:28:42:28:111 | ... + ... | -| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | -| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:28:85:28:105 | call to method BytesToString : String | -| Test.cs:34:29:34:69 | call to method ExecuteQuery : String | Test.cs:37:42:37:96 | ... + ... | -| Test.cs:62:29:62:48 | call to method GetCliArg : String | Test.cs:65:42:65:96 | ... + ... | +| Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | provenance | | +| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | Test.cs:15:20:15:61 | call to method GetString : String | provenance | | +| Test.cs:23:42:23:59 | call to method GetStream : NetworkStream | Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | provenance | | +| Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | provenance | | +| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | provenance | | +| Test.cs:28:85:28:105 | call to method BytesToString : String | Test.cs:28:42:28:111 | ... + ... | provenance | | +| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | provenance | | +| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:28:85:28:105 | call to method BytesToString : String | provenance | | +| Test.cs:34:29:34:69 | call to method ExecuteQuery : String | Test.cs:37:42:37:96 | ... + ... | provenance | | +| Test.cs:62:29:62:48 | call to method GetCliArg : String | Test.cs:65:42:65:96 | ... + ... | provenance | | nodes | Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | semmle.label | bytes : Byte[] [element] : Object | | Test.cs:15:20:15:61 | call to method GetString : String | semmle.label | call to method GetString : String | diff --git a/csharp/ql/test/library-tests/dataflow/tuples/Tuples.expected b/csharp/ql/test/library-tests/dataflow/tuples/Tuples.expected index 95c39fd302c..e93d25ad84a 100644 --- a/csharp/ql/test/library-tests/dataflow/tuples/Tuples.expected +++ b/csharp/ql/test/library-tests/dataflow/tuples/Tuples.expected @@ -1,205 +1,205 @@ testFailures edges -| Tuples.cs:7:18:7:34 | call to method Source : Object | Tuples.cs:10:21:10:22 | access to local variable o1 : Object | -| Tuples.cs:7:18:7:34 | call to method Source : Object | Tuples.cs:10:21:10:22 | access to local variable o1 : Object | -| Tuples.cs:8:18:8:34 | call to method Source : Object | Tuples.cs:10:29:10:30 | access to local variable o2 : Object | -| Tuples.cs:8:18:8:34 | call to method Source : Object | Tuples.cs:10:29:10:30 | access to local variable o2 : Object | -| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple> [field Item1] : Object | -| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple> [field Item1] : Object | -| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:16:9:16:19 | (..., ...) : ValueTuple> [field Item1] : Object | -| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:16:9:16:19 | (..., ...) : ValueTuple> [field Item1] : Object | -| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:21:9:21:22 | (..., ...) : ValueTuple> [field Item1] : Object | -| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:21:9:21:22 | (..., ...) : ValueTuple> [field Item1] : Object | -| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:26:14:26:14 | access to local variable x : ValueTuple> [field Item1] : Object | -| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:26:14:26:14 | access to local variable x : ValueTuple> [field Item1] : Object | -| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:27:14:27:14 | access to local variable x : ValueTuple> [field Item1] : Object | -| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:27:14:27:14 | access to local variable x : ValueTuple> [field Item1] : Object | -| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | -| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | -| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:16:9:16:19 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | -| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:16:9:16:19 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | -| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:21:9:21:22 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | -| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:21:9:21:22 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | -| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:29:14:29:14 | access to local variable x : ValueTuple> [field Item2, field Item2] : Object | -| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:29:14:29:14 | access to local variable x : ValueTuple> [field Item2, field Item2] : Object | -| Tuples.cs:10:21:10:22 | access to local variable o1 : Object | Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item1] : Object | -| Tuples.cs:10:21:10:22 | access to local variable o1 : Object | Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item1] : Object | -| Tuples.cs:10:25:10:31 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | -| Tuples.cs:10:25:10:31 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | -| Tuples.cs:10:29:10:30 | access to local variable o2 : Object | Tuples.cs:10:25:10:31 | (..., ...) : ValueTuple [field Item2] : Object | -| Tuples.cs:10:29:10:30 | access to local variable o2 : Object | Tuples.cs:10:25:10:31 | (..., ...) : ValueTuple [field Item2] : Object | -| Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:11:9:11:27 | SSA def(c) : Object | -| Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:11:9:11:27 | SSA def(c) : Object | -| Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:11:9:11:27 | SSA def(a) : Object | -| Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:11:9:11:27 | SSA def(a) : Object | -| Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple [field Item2] : Object | -| Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple [field Item2] : Object | -| Tuples.cs:11:9:11:27 | SSA def(a) : Object | Tuples.cs:12:14:12:14 | access to local variable a | -| Tuples.cs:11:9:11:27 | SSA def(a) : Object | Tuples.cs:12:14:12:14 | access to local variable a | -| Tuples.cs:11:9:11:27 | SSA def(c) : Object | Tuples.cs:14:14:14:14 | access to local variable c | -| Tuples.cs:11:9:11:27 | SSA def(c) : Object | Tuples.cs:14:14:14:14 | access to local variable c | -| Tuples.cs:16:9:16:19 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:16:9:16:23 | SSA def(a) : Object | -| Tuples.cs:16:9:16:19 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:16:9:16:23 | SSA def(a) : Object | -| Tuples.cs:16:9:16:19 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:16:13:16:18 | (..., ...) : ValueTuple [field Item2] : Object | -| Tuples.cs:16:9:16:19 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:16:13:16:18 | (..., ...) : ValueTuple [field Item2] : Object | -| Tuples.cs:16:9:16:23 | SSA def(a) : Object | Tuples.cs:17:14:17:14 | access to local variable a | -| Tuples.cs:16:9:16:23 | SSA def(a) : Object | Tuples.cs:17:14:17:14 | access to local variable a | -| Tuples.cs:16:9:16:23 | SSA def(c) : Object | Tuples.cs:19:14:19:14 | access to local variable c | -| Tuples.cs:16:9:16:23 | SSA def(c) : Object | Tuples.cs:19:14:19:14 | access to local variable c | -| Tuples.cs:16:13:16:18 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:16:9:16:23 | SSA def(c) : Object | -| Tuples.cs:16:13:16:18 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:16:9:16:23 | SSA def(c) : Object | -| Tuples.cs:21:9:21:22 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:21:9:21:26 | SSA def(p) : Object | -| Tuples.cs:21:9:21:22 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:21:9:21:26 | SSA def(p) : Object | -| Tuples.cs:21:9:21:22 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:21:9:21:26 | SSA def(q) : ValueTuple [field Item2] : Object | -| Tuples.cs:21:9:21:22 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:21:9:21:26 | SSA def(q) : ValueTuple [field Item2] : Object | -| Tuples.cs:21:9:21:26 | SSA def(p) : Object | Tuples.cs:22:14:22:14 | access to local variable p | -| Tuples.cs:21:9:21:26 | SSA def(p) : Object | Tuples.cs:22:14:22:14 | access to local variable p | -| Tuples.cs:21:9:21:26 | SSA def(q) : ValueTuple [field Item2] : Object | Tuples.cs:24:14:24:14 | access to local variable q : ValueTuple [field Item2] : Object | -| Tuples.cs:21:9:21:26 | SSA def(q) : ValueTuple [field Item2] : Object | Tuples.cs:24:14:24:14 | access to local variable q : ValueTuple [field Item2] : Object | -| Tuples.cs:24:14:24:14 | access to local variable q : ValueTuple [field Item2] : Object | Tuples.cs:24:14:24:20 | access to field Item2 | -| Tuples.cs:24:14:24:14 | access to local variable q : ValueTuple [field Item2] : Object | Tuples.cs:24:14:24:20 | access to field Item2 | -| Tuples.cs:26:14:26:14 | access to local variable x : ValueTuple> [field Item1] : Object | Tuples.cs:26:14:26:20 | access to field Item1 | -| Tuples.cs:26:14:26:14 | access to local variable x : ValueTuple> [field Item1] : Object | Tuples.cs:26:14:26:20 | access to field Item1 | -| Tuples.cs:27:14:27:14 | access to local variable x : ValueTuple> [field Item1] : Object | Tuples.cs:27:14:27:16 | access to field Item1 | -| Tuples.cs:27:14:27:14 | access to local variable x : ValueTuple> [field Item1] : Object | Tuples.cs:27:14:27:16 | access to field Item1 | -| Tuples.cs:29:14:29:14 | access to local variable x : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:29:14:29:20 | access to field Item2 : ValueTuple [field Item2] : Object | -| Tuples.cs:29:14:29:14 | access to local variable x : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:29:14:29:20 | access to field Item2 : ValueTuple [field Item2] : Object | -| Tuples.cs:29:14:29:20 | access to field Item2 : ValueTuple [field Item2] : Object | Tuples.cs:29:14:29:26 | access to field Item2 | -| Tuples.cs:29:14:29:20 | access to field Item2 : ValueTuple [field Item2] : Object | Tuples.cs:29:14:29:26 | access to field Item2 | -| Tuples.cs:34:18:34:34 | call to method Source : Object | Tuples.cs:37:18:37:19 | access to local variable o1 : Object | -| Tuples.cs:34:18:34:34 | call to method Source : Object | Tuples.cs:37:18:37:19 | access to local variable o1 : Object | -| Tuples.cs:35:18:35:34 | call to method Source : Object | Tuples.cs:37:46:37:47 | access to local variable o2 : Object | -| Tuples.cs:35:18:35:34 | call to method Source : Object | Tuples.cs:37:46:37:47 | access to local variable o2 : Object | -| Tuples.cs:37:17:37:48 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:38:14:38:14 | access to local variable x : ValueTuple> [field Item1] : Object | -| Tuples.cs:37:17:37:48 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:38:14:38:14 | access to local variable x : ValueTuple> [field Item1] : Object | -| Tuples.cs:37:17:37:48 | (..., ...) : ValueTuple> [field Item10] : Object | Tuples.cs:40:14:40:14 | access to local variable x : ValueTuple> [field Item10] : Object | -| Tuples.cs:37:17:37:48 | (..., ...) : ValueTuple> [field Item10] : Object | Tuples.cs:40:14:40:14 | access to local variable x : ValueTuple> [field Item10] : Object | -| Tuples.cs:37:18:37:19 | access to local variable o1 : Object | Tuples.cs:37:17:37:48 | (..., ...) : ValueTuple> [field Item1] : Object | -| Tuples.cs:37:18:37:19 | access to local variable o1 : Object | Tuples.cs:37:17:37:48 | (..., ...) : ValueTuple> [field Item1] : Object | -| Tuples.cs:37:46:37:47 | access to local variable o2 : Object | Tuples.cs:37:17:37:48 | (..., ...) : ValueTuple> [field Item10] : Object | -| Tuples.cs:37:46:37:47 | access to local variable o2 : Object | Tuples.cs:37:17:37:48 | (..., ...) : ValueTuple> [field Item10] : Object | -| Tuples.cs:38:14:38:14 | access to local variable x : ValueTuple> [field Item1] : Object | Tuples.cs:38:14:38:20 | access to field Item1 | -| Tuples.cs:38:14:38:14 | access to local variable x : ValueTuple> [field Item1] : Object | Tuples.cs:38:14:38:20 | access to field Item1 | -| Tuples.cs:40:14:40:14 | access to local variable x : ValueTuple> [field Item10] : Object | Tuples.cs:40:14:40:21 | access to field Item10 | -| Tuples.cs:40:14:40:14 | access to local variable x : ValueTuple> [field Item10] : Object | Tuples.cs:40:14:40:21 | access to field Item10 | -| Tuples.cs:45:17:45:33 | call to method Source : String | Tuples.cs:46:48:46:48 | access to local variable o : String | -| Tuples.cs:45:17:45:33 | call to method Source : String | Tuples.cs:46:48:46:48 | access to local variable o : String | -| Tuples.cs:46:17:46:55 | (...) ... : ValueTuple [field Item1] : String | Tuples.cs:47:14:47:14 | access to local variable x : ValueTuple [field Item1] : String | -| Tuples.cs:46:17:46:55 | (...) ... : ValueTuple [field Item1] : String | Tuples.cs:47:14:47:14 | access to local variable x : ValueTuple [field Item1] : String | -| Tuples.cs:46:47:46:55 | (..., ...) : ValueTuple [field Item1] : String | Tuples.cs:46:17:46:55 | (...) ... : ValueTuple [field Item1] : String | -| Tuples.cs:46:47:46:55 | (..., ...) : ValueTuple [field Item1] : String | Tuples.cs:46:17:46:55 | (...) ... : ValueTuple [field Item1] : String | -| Tuples.cs:46:48:46:48 | access to local variable o : String | Tuples.cs:46:47:46:55 | (..., ...) : ValueTuple [field Item1] : String | -| Tuples.cs:46:48:46:48 | access to local variable o : String | Tuples.cs:46:47:46:55 | (..., ...) : ValueTuple [field Item1] : String | -| Tuples.cs:47:14:47:14 | access to local variable x : ValueTuple [field Item1] : String | Tuples.cs:47:14:47:20 | access to field Item1 | -| Tuples.cs:47:14:47:14 | access to local variable x : ValueTuple [field Item1] : String | Tuples.cs:47:14:47:20 | access to field Item1 | -| Tuples.cs:57:18:57:34 | call to method Source : String | Tuples.cs:59:18:59:19 | access to local variable o1 : String | -| Tuples.cs:57:18:57:34 | call to method Source : String | Tuples.cs:59:18:59:19 | access to local variable o1 : String | -| Tuples.cs:58:18:58:34 | call to method Source : String | Tuples.cs:59:26:59:27 | access to local variable o2 : String | -| Tuples.cs:58:18:58:34 | call to method Source : String | Tuples.cs:59:26:59:27 | access to local variable o2 : String | -| Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item1] : String | Tuples.cs:62:18:62:57 | SSA def(t) : ValueTuple,Int32> [field Item1] : String | -| Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item1] : String | Tuples.cs:62:18:62:57 | SSA def(t) : ValueTuple,Int32> [field Item1] : String | -| Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item1] : String | Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple,Int32> [field Item1] : String | -| Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item1] : String | Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple,Int32> [field Item1] : String | -| Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item1] : String | Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple,Int32> [field Item1] : String | -| Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item1] : String | Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple,Int32> [field Item1] : String | -| Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:62:18:62:57 | SSA def(t) : ValueTuple,Int32> [field Item2, field Item2] : String | -| Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:62:18:62:57 | SSA def(t) : ValueTuple,Int32> [field Item2, field Item2] : String | -| Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | -| Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | -| Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | -| Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | -| Tuples.cs:59:18:59:19 | access to local variable o1 : String | Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item1] : String | -| Tuples.cs:59:18:59:19 | access to local variable o1 : String | Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item1] : String | -| Tuples.cs:59:22:59:28 | (..., ...) : ValueTuple [field Item2] : String | Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | -| Tuples.cs:59:22:59:28 | (..., ...) : ValueTuple [field Item2] : String | Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | -| Tuples.cs:59:26:59:27 | access to local variable o2 : String | Tuples.cs:59:22:59:28 | (..., ...) : ValueTuple [field Item2] : String | -| Tuples.cs:59:26:59:27 | access to local variable o2 : String | Tuples.cs:59:22:59:28 | (..., ...) : ValueTuple [field Item2] : String | -| Tuples.cs:62:18:62:57 | SSA def(t) : ValueTuple,Int32> [field Item1] : String | Tuples.cs:63:22:63:22 | access to local variable t : ValueTuple,Int32> [field Item1] : String | -| Tuples.cs:62:18:62:57 | SSA def(t) : ValueTuple,Int32> [field Item1] : String | Tuples.cs:63:22:63:22 | access to local variable t : ValueTuple,Int32> [field Item1] : String | -| Tuples.cs:62:18:62:57 | SSA def(t) : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:64:22:64:22 | access to local variable t : ValueTuple,Int32> [field Item2, field Item2] : String | -| Tuples.cs:62:18:62:57 | SSA def(t) : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:64:22:64:22 | access to local variable t : ValueTuple,Int32> [field Item2, field Item2] : String | -| Tuples.cs:63:22:63:22 | access to local variable t : ValueTuple,Int32> [field Item1] : String | Tuples.cs:63:22:63:28 | access to field Item1 | -| Tuples.cs:63:22:63:22 | access to local variable t : ValueTuple,Int32> [field Item1] : String | Tuples.cs:63:22:63:28 | access to field Item1 | -| Tuples.cs:64:22:64:22 | access to local variable t : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:64:22:64:28 | access to field Item2 : ValueTuple [field Item2] : String | -| Tuples.cs:64:22:64:22 | access to local variable t : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:64:22:64:28 | access to field Item2 : ValueTuple [field Item2] : String | -| Tuples.cs:64:22:64:28 | access to field Item2 : ValueTuple [field Item2] : String | Tuples.cs:64:22:64:34 | access to field Item2 | -| Tuples.cs:64:22:64:28 | access to field Item2 : ValueTuple [field Item2] : String | Tuples.cs:64:22:64:34 | access to field Item2 | -| Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple [field Item2] : String | Tuples.cs:67:30:67:30 | SSA def(c) : String | -| Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple [field Item2] : String | Tuples.cs:67:30:67:30 | SSA def(c) : String | -| Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple,Int32> [field Item1] : String | Tuples.cs:67:23:67:23 | SSA def(a) : String | -| Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple,Int32> [field Item1] : String | Tuples.cs:67:23:67:23 | SSA def(a) : String | -| Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple [field Item2] : String | -| Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple [field Item2] : String | -| Tuples.cs:67:23:67:23 | SSA def(a) : String | Tuples.cs:68:22:68:22 | access to local variable a | -| Tuples.cs:67:23:67:23 | SSA def(a) : String | Tuples.cs:68:22:68:22 | access to local variable a | -| Tuples.cs:67:30:67:30 | SSA def(c) : String | Tuples.cs:69:22:69:22 | access to local variable c | -| Tuples.cs:67:30:67:30 | SSA def(c) : String | Tuples.cs:69:22:69:22 | access to local variable c | -| Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple [field Item2] : String | Tuples.cs:87:30:87:30 | SSA def(r) : String | -| Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple [field Item2] : String | Tuples.cs:87:30:87:30 | SSA def(r) : String | -| Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple,Int32> [field Item1] : String | Tuples.cs:87:23:87:23 | SSA def(p) : String | -| Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple,Int32> [field Item1] : String | Tuples.cs:87:23:87:23 | SSA def(p) : String | -| Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple [field Item2] : String | -| Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple [field Item2] : String | -| Tuples.cs:87:23:87:23 | SSA def(p) : String | Tuples.cs:89:18:89:18 | access to local variable p | -| Tuples.cs:87:23:87:23 | SSA def(p) : String | Tuples.cs:89:18:89:18 | access to local variable p | -| Tuples.cs:87:30:87:30 | SSA def(r) : String | Tuples.cs:90:18:90:18 | access to local variable r | -| Tuples.cs:87:30:87:30 | SSA def(r) : String | Tuples.cs:90:18:90:18 | access to local variable r | -| Tuples.cs:99:17:99:33 | call to method Source : String | Tuples.cs:100:24:100:24 | access to local variable o : String | -| Tuples.cs:99:17:99:33 | call to method Source : String | Tuples.cs:100:24:100:24 | access to local variable o : String | -| Tuples.cs:100:17:100:28 | object creation of type R1 : R1 [property i] : String | Tuples.cs:101:14:101:14 | access to local variable r : R1 [property i] : String | -| Tuples.cs:100:17:100:28 | object creation of type R1 : R1 [property i] : String | Tuples.cs:101:14:101:14 | access to local variable r : R1 [property i] : String | -| Tuples.cs:100:24:100:24 | access to local variable o : 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:100:17:100:28 | object creation of type R1 : R1 [property i] : String | -| Tuples.cs:101:14:101:14 | access to local variable r : R1 [property i] : String | Tuples.cs:101:14:101:16 | access to property i | -| Tuples.cs:101:14:101:14 | access to local variable r : R1 [property i] : String | Tuples.cs:101:14:101:16 | access to property i | -| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:121:28:121:28 | access to local variable o : Object | -| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:121:28:121:28 | access to local variable o : Object | -| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:122:14:122:15 | access to local variable x1 | -| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:122:14:122:15 | access to local variable x1 | -| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:125:25:125:25 | access to local variable o : Object | -| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:125:25:125:25 | access to local variable o : Object | -| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:126:14:126:15 | access to local variable x2 | -| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:126:14:126:15 | access to local variable x2 | -| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:129:31:129:31 | access to local variable o : Object | -| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:129:31:129:31 | access to local variable o : Object | -| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:130:14:130:15 | access to local variable y3 | -| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:130:14:130:15 | access to local variable y3 | -| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:133:28:133:28 | access to local variable o : Object | -| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:133:28:133:28 | access to local variable o : Object | -| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:134:14:134:15 | access to local variable y4 | -| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:134:14:134:15 | access to local variable y4 | -| Tuples.cs:121:9:121:23 | (..., ...) : ValueTuple [field Item1] : Object | Tuples.cs:121:9:121:32 | SSA def(x1) : Object | -| Tuples.cs:121:9:121:23 | (..., ...) : ValueTuple [field Item1] : Object | Tuples.cs:121:9:121:32 | SSA def(x1) : Object | -| Tuples.cs:121:9:121:32 | SSA def(x1) : Object | Tuples.cs:122:14:122:15 | access to local variable x1 | -| Tuples.cs:121:9:121:32 | SSA def(x1) : Object | Tuples.cs:122:14:122:15 | access to local variable x1 | -| Tuples.cs:121:27:121:32 | (..., ...) : ValueTuple [field Item1] : Object | Tuples.cs:121:9:121:23 | (..., ...) : ValueTuple [field Item1] : Object | -| Tuples.cs:121:27:121:32 | (..., ...) : ValueTuple [field Item1] : Object | Tuples.cs:121:9:121:23 | (..., ...) : ValueTuple [field Item1] : Object | -| Tuples.cs:121:28:121:28 | access to local variable o : Object | Tuples.cs:121:27:121:32 | (..., ...) : ValueTuple [field Item1] : Object | -| Tuples.cs:121:28:121:28 | access to local variable o : Object | Tuples.cs:121:27:121:32 | (..., ...) : ValueTuple [field Item1] : Object | -| Tuples.cs:125:9:125:20 | (..., ...) : ValueTuple [field Item1] : Object | Tuples.cs:125:9:125:29 | SSA def(x2) : Object | -| Tuples.cs:125:9:125:20 | (..., ...) : ValueTuple [field Item1] : Object | Tuples.cs:125:9:125:29 | SSA def(x2) : Object | -| Tuples.cs:125:9:125:29 | SSA def(x2) : Object | Tuples.cs:126:14:126:15 | access to local variable x2 | -| Tuples.cs:125:9:125:29 | SSA def(x2) : Object | Tuples.cs:126:14:126:15 | access to local variable x2 | -| Tuples.cs:125:24:125:29 | (..., ...) : ValueTuple [field Item1] : Object | Tuples.cs:125:9:125:20 | (..., ...) : ValueTuple [field Item1] : Object | -| Tuples.cs:125:24:125:29 | (..., ...) : ValueTuple [field Item1] : Object | Tuples.cs:125:9:125:20 | (..., ...) : ValueTuple [field Item1] : Object | -| Tuples.cs:125:25:125:25 | access to local variable o : Object | Tuples.cs:125:24:125:29 | (..., ...) : ValueTuple [field Item1] : Object | -| Tuples.cs:125:25:125:25 | access to local variable o : Object | Tuples.cs:125:24:125:29 | (..., ...) : ValueTuple [field Item1] : Object | -| Tuples.cs:129:9:129:23 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:129:9:129:32 | SSA def(y3) : Object | -| Tuples.cs:129:9:129:23 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:129:9:129:32 | SSA def(y3) : Object | -| Tuples.cs:129:9:129:32 | SSA def(y3) : Object | Tuples.cs:130:14:130:15 | access to local variable y3 | -| Tuples.cs:129:9:129:32 | SSA def(y3) : Object | Tuples.cs:130:14:130:15 | access to local variable y3 | -| Tuples.cs:129:27:129:32 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:129:9:129:23 | (..., ...) : ValueTuple [field Item2] : Object | -| Tuples.cs:129:27:129:32 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:129:9:129:23 | (..., ...) : ValueTuple [field Item2] : Object | -| Tuples.cs:129:31:129:31 | access to local variable o : Object | Tuples.cs:129:27:129:32 | (..., ...) : ValueTuple [field Item2] : Object | -| Tuples.cs:129:31:129:31 | access to local variable o : Object | Tuples.cs:129:27:129:32 | (..., ...) : ValueTuple [field Item2] : Object | -| Tuples.cs:133:9:133:20 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:133:9:133:29 | SSA def(y4) : Object | -| Tuples.cs:133:9:133:20 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:133:9:133:29 | SSA def(y4) : Object | -| Tuples.cs:133:9:133:29 | SSA def(y4) : Object | Tuples.cs:134:14:134:15 | access to local variable y4 | -| Tuples.cs:133:9:133:29 | SSA def(y4) : Object | Tuples.cs:134:14:134:15 | access to local variable y4 | -| Tuples.cs:133:24:133:29 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:133:9:133:20 | (..., ...) : ValueTuple [field Item2] : Object | -| Tuples.cs:133:24:133:29 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:133:9:133:20 | (..., ...) : ValueTuple [field Item2] : Object | -| Tuples.cs:133:28:133:28 | access to local variable o : Object | Tuples.cs:133:24:133:29 | (..., ...) : ValueTuple [field Item2] : Object | -| Tuples.cs:133:28:133:28 | access to local variable o : Object | Tuples.cs:133:24:133:29 | (..., ...) : ValueTuple [field Item2] : Object | +| Tuples.cs:7:18:7:34 | call to method Source : Object | Tuples.cs:10:21:10:22 | access to local variable o1 : Object | provenance | | +| Tuples.cs:7:18:7:34 | call to method Source : Object | Tuples.cs:10:21:10:22 | access to local variable o1 : Object | provenance | | +| Tuples.cs:8:18:8:34 | call to method Source : Object | Tuples.cs:10:29:10:30 | access to local variable o2 : Object | provenance | | +| Tuples.cs:8:18:8:34 | call to method Source : Object | Tuples.cs:10:29:10:30 | access to local variable o2 : Object | provenance | | +| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple> [field Item1] : Object | provenance | | +| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple> [field Item1] : Object | provenance | | +| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:16:9:16:19 | (..., ...) : ValueTuple> [field Item1] : Object | provenance | | +| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:16:9:16:19 | (..., ...) : ValueTuple> [field Item1] : Object | provenance | | +| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:21:9:21:22 | (..., ...) : ValueTuple> [field Item1] : Object | provenance | | +| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:21:9:21:22 | (..., ...) : ValueTuple> [field Item1] : Object | provenance | | +| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:26:14:26:14 | access to local variable x : ValueTuple> [field Item1] : Object | provenance | | +| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:26:14:26:14 | access to local variable x : ValueTuple> [field Item1] : Object | provenance | | +| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:27:14:27:14 | access to local variable x : ValueTuple> [field Item1] : Object | provenance | | +| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:27:14:27:14 | access to local variable x : ValueTuple> [field Item1] : Object | provenance | | +| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | provenance | | +| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | provenance | | +| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:16:9:16:19 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | provenance | | +| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:16:9:16:19 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | provenance | | +| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:21:9:21:22 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | provenance | | +| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:21:9:21:22 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | provenance | | +| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:29:14:29:14 | access to local variable x : ValueTuple> [field Item2, field Item2] : Object | provenance | | +| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:29:14:29:14 | access to local variable x : ValueTuple> [field Item2, field Item2] : Object | provenance | | +| Tuples.cs:10:21:10:22 | access to local variable o1 : Object | Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item1] : Object | provenance | | +| Tuples.cs:10:21:10:22 | access to local variable o1 : Object | Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item1] : Object | provenance | | +| Tuples.cs:10:25:10:31 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | provenance | | +| Tuples.cs:10:25:10:31 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | provenance | | +| Tuples.cs:10:29:10:30 | access to local variable o2 : Object | Tuples.cs:10:25:10:31 | (..., ...) : ValueTuple [field Item2] : Object | provenance | | +| Tuples.cs:10:29:10:30 | access to local variable o2 : Object | Tuples.cs:10:25:10:31 | (..., ...) : ValueTuple [field Item2] : Object | provenance | | +| Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:11:9:11:27 | SSA def(c) : Object | provenance | | +| Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:11:9:11:27 | SSA def(c) : Object | provenance | | +| Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:11:9:11:27 | SSA def(a) : Object | provenance | | +| Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:11:9:11:27 | SSA def(a) : Object | provenance | | +| Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple [field Item2] : Object | provenance | | +| Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple [field Item2] : Object | provenance | | +| Tuples.cs:11:9:11:27 | SSA def(a) : Object | Tuples.cs:12:14:12:14 | access to local variable a | provenance | | +| Tuples.cs:11:9:11:27 | SSA def(a) : Object | Tuples.cs:12:14:12:14 | access to local variable a | provenance | | +| Tuples.cs:11:9:11:27 | SSA def(c) : Object | Tuples.cs:14:14:14:14 | access to local variable c | provenance | | +| Tuples.cs:11:9:11:27 | SSA def(c) : Object | Tuples.cs:14:14:14:14 | access to local variable c | provenance | | +| Tuples.cs:16:9:16:19 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:16:9:16:23 | SSA def(a) : Object | provenance | | +| Tuples.cs:16:9:16:19 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:16:9:16:23 | SSA def(a) : Object | provenance | | +| Tuples.cs:16:9:16:19 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:16:13:16:18 | (..., ...) : ValueTuple [field Item2] : Object | provenance | | +| Tuples.cs:16:9:16:19 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:16:13:16:18 | (..., ...) : ValueTuple [field Item2] : Object | provenance | | +| Tuples.cs:16:9:16:23 | SSA def(a) : Object | Tuples.cs:17:14:17:14 | access to local variable a | provenance | | +| Tuples.cs:16:9:16:23 | SSA def(a) : Object | Tuples.cs:17:14:17:14 | access to local variable a | provenance | | +| Tuples.cs:16:9:16:23 | SSA def(c) : Object | Tuples.cs:19:14:19:14 | access to local variable c | provenance | | +| Tuples.cs:16:9:16:23 | SSA def(c) : Object | Tuples.cs:19:14:19:14 | access to local variable c | provenance | | +| Tuples.cs:16:13:16:18 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:16:9:16:23 | SSA def(c) : Object | provenance | | +| Tuples.cs:16:13:16:18 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:16:9:16:23 | SSA def(c) : Object | provenance | | +| Tuples.cs:21:9:21:22 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:21:9:21:26 | SSA def(p) : Object | provenance | | +| Tuples.cs:21:9:21:22 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:21:9:21:26 | SSA def(p) : Object | provenance | | +| Tuples.cs:21:9:21:22 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:21:9:21:26 | SSA def(q) : ValueTuple [field Item2] : Object | provenance | | +| Tuples.cs:21:9:21:22 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:21:9:21:26 | SSA def(q) : ValueTuple [field Item2] : Object | provenance | | +| Tuples.cs:21:9:21:26 | SSA def(p) : Object | Tuples.cs:22:14:22:14 | access to local variable p | provenance | | +| Tuples.cs:21:9:21:26 | SSA def(p) : Object | Tuples.cs:22:14:22:14 | access to local variable p | provenance | | +| Tuples.cs:21:9:21:26 | SSA def(q) : ValueTuple [field Item2] : Object | Tuples.cs:24:14:24:14 | access to local variable q : ValueTuple [field Item2] : Object | provenance | | +| Tuples.cs:21:9:21:26 | SSA def(q) : ValueTuple [field Item2] : Object | Tuples.cs:24:14:24:14 | access to local variable q : ValueTuple [field Item2] : Object | provenance | | +| Tuples.cs:24:14:24:14 | access to local variable q : ValueTuple [field Item2] : Object | Tuples.cs:24:14:24:20 | access to field Item2 | provenance | | +| Tuples.cs:24:14:24:14 | access to local variable q : ValueTuple [field Item2] : Object | Tuples.cs:24:14:24:20 | access to field Item2 | provenance | | +| Tuples.cs:26:14:26:14 | access to local variable x : ValueTuple> [field Item1] : Object | Tuples.cs:26:14:26:20 | access to field Item1 | provenance | | +| Tuples.cs:26:14:26:14 | access to local variable x : ValueTuple> [field Item1] : Object | Tuples.cs:26:14:26:20 | access to field Item1 | provenance | | +| Tuples.cs:27:14:27:14 | access to local variable x : ValueTuple> [field Item1] : Object | Tuples.cs:27:14:27:16 | access to field Item1 | provenance | | +| Tuples.cs:27:14:27:14 | access to local variable x : ValueTuple> [field Item1] : Object | Tuples.cs:27:14:27:16 | access to field Item1 | provenance | | +| Tuples.cs:29:14:29:14 | access to local variable x : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:29:14:29:20 | access to field Item2 : ValueTuple [field Item2] : Object | provenance | | +| Tuples.cs:29:14:29:14 | access to local variable x : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:29:14:29:20 | access to field Item2 : ValueTuple [field Item2] : Object | provenance | | +| Tuples.cs:29:14:29:20 | access to field Item2 : ValueTuple [field Item2] : Object | Tuples.cs:29:14:29:26 | access to field Item2 | provenance | | +| Tuples.cs:29:14:29:20 | access to field Item2 : ValueTuple [field Item2] : Object | Tuples.cs:29:14:29:26 | access to field Item2 | provenance | | +| Tuples.cs:34:18:34:34 | call to method Source : Object | Tuples.cs:37:18:37:19 | access to local variable o1 : Object | provenance | | +| Tuples.cs:34:18:34:34 | call to method Source : Object | Tuples.cs:37:18:37:19 | access to local variable o1 : Object | provenance | | +| Tuples.cs:35:18:35:34 | call to method Source : Object | Tuples.cs:37:46:37:47 | access to local variable o2 : Object | provenance | | +| Tuples.cs:35:18:35:34 | call to method Source : Object | Tuples.cs:37:46:37:47 | access to local variable o2 : Object | provenance | | +| Tuples.cs:37:17:37:48 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:38:14:38:14 | access to local variable x : ValueTuple> [field Item1] : Object | provenance | | +| Tuples.cs:37:17:37:48 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:38:14:38:14 | access to local variable x : ValueTuple> [field Item1] : Object | provenance | | +| Tuples.cs:37:17:37:48 | (..., ...) : ValueTuple> [field Item10] : Object | Tuples.cs:40:14:40:14 | access to local variable x : ValueTuple> [field Item10] : Object | provenance | | +| Tuples.cs:37:17:37:48 | (..., ...) : ValueTuple> [field Item10] : Object | Tuples.cs:40:14:40:14 | access to local variable x : ValueTuple> [field Item10] : Object | provenance | | +| Tuples.cs:37:18:37:19 | access to local variable o1 : Object | Tuples.cs:37:17:37:48 | (..., ...) : ValueTuple> [field Item1] : Object | provenance | | +| Tuples.cs:37:18:37:19 | access to local variable o1 : Object | Tuples.cs:37:17:37:48 | (..., ...) : ValueTuple> [field Item1] : Object | provenance | | +| Tuples.cs:37:46:37:47 | access to local variable o2 : Object | Tuples.cs:37:17:37:48 | (..., ...) : ValueTuple> [field Item10] : Object | provenance | | +| Tuples.cs:37:46:37:47 | access to local variable o2 : Object | Tuples.cs:37:17:37:48 | (..., ...) : ValueTuple> [field Item10] : Object | provenance | | +| Tuples.cs:38:14:38:14 | access to local variable x : ValueTuple> [field Item1] : Object | Tuples.cs:38:14:38:20 | access to field Item1 | provenance | | +| Tuples.cs:38:14:38:14 | access to local variable x : ValueTuple> [field Item1] : Object | Tuples.cs:38:14:38:20 | access to field Item1 | provenance | | +| Tuples.cs:40:14:40:14 | access to local variable x : ValueTuple> [field Item10] : Object | Tuples.cs:40:14:40:21 | access to field Item10 | provenance | | +| Tuples.cs:40:14:40:14 | access to local variable x : ValueTuple> [field Item10] : Object | Tuples.cs:40:14:40:21 | access to field Item10 | provenance | | +| Tuples.cs:45:17:45:33 | call to method Source : String | Tuples.cs:46:48:46:48 | access to local variable o : String | provenance | | +| Tuples.cs:45:17:45:33 | call to method Source : String | Tuples.cs:46:48:46:48 | access to local variable o : String | provenance | | +| Tuples.cs:46:17:46:55 | (...) ... : ValueTuple [field Item1] : String | Tuples.cs:47:14:47:14 | access to local variable x : ValueTuple [field Item1] : String | provenance | | +| Tuples.cs:46:17:46:55 | (...) ... : ValueTuple [field Item1] : String | Tuples.cs:47:14:47:14 | access to local variable x : ValueTuple [field Item1] : String | provenance | | +| Tuples.cs:46:47:46:55 | (..., ...) : ValueTuple [field Item1] : String | Tuples.cs:46:17:46:55 | (...) ... : ValueTuple [field Item1] : String | provenance | | +| Tuples.cs:46:47:46:55 | (..., ...) : ValueTuple [field Item1] : String | Tuples.cs:46:17:46:55 | (...) ... : ValueTuple [field Item1] : String | provenance | | +| Tuples.cs:46:48:46:48 | access to local variable o : String | Tuples.cs:46:47:46:55 | (..., ...) : ValueTuple [field Item1] : String | provenance | | +| Tuples.cs:46:48:46:48 | access to local variable o : String | Tuples.cs:46:47:46:55 | (..., ...) : ValueTuple [field Item1] : String | provenance | | +| Tuples.cs:47:14:47:14 | access to local variable x : ValueTuple [field Item1] : String | Tuples.cs:47:14:47:20 | access to field Item1 | provenance | | +| Tuples.cs:47:14:47:14 | access to local variable x : ValueTuple [field Item1] : String | Tuples.cs:47:14:47:20 | access to field Item1 | provenance | | +| Tuples.cs:57:18:57:34 | call to method Source : String | Tuples.cs:59:18:59:19 | access to local variable o1 : String | provenance | | +| Tuples.cs:57:18:57:34 | call to method Source : String | Tuples.cs:59:18:59:19 | access to local variable o1 : String | provenance | | +| Tuples.cs:58:18:58:34 | call to method Source : String | Tuples.cs:59:26:59:27 | access to local variable o2 : String | provenance | | +| Tuples.cs:58:18:58:34 | call to method Source : String | Tuples.cs:59:26:59:27 | access to local variable o2 : String | provenance | | +| Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item1] : String | Tuples.cs:62:18:62:57 | SSA def(t) : ValueTuple,Int32> [field Item1] : String | provenance | | +| Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item1] : String | Tuples.cs:62:18:62:57 | SSA def(t) : ValueTuple,Int32> [field Item1] : String | provenance | | +| Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item1] : String | Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple,Int32> [field Item1] : String | provenance | | +| Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item1] : String | Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple,Int32> [field Item1] : String | provenance | | +| Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item1] : String | Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple,Int32> [field Item1] : String | provenance | | +| Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item1] : String | Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple,Int32> [field Item1] : String | provenance | | +| Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:62:18:62:57 | SSA def(t) : ValueTuple,Int32> [field Item2, field Item2] : String | provenance | | +| Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:62:18:62:57 | SSA def(t) : ValueTuple,Int32> [field Item2, field Item2] : String | provenance | | +| Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | provenance | | +| Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | provenance | | +| Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | provenance | | +| Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | provenance | | +| Tuples.cs:59:18:59:19 | access to local variable o1 : String | Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item1] : String | provenance | | +| Tuples.cs:59:18:59:19 | access to local variable o1 : String | Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item1] : String | provenance | | +| Tuples.cs:59:22:59:28 | (..., ...) : ValueTuple [field Item2] : String | Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | provenance | | +| Tuples.cs:59:22:59:28 | (..., ...) : ValueTuple [field Item2] : String | Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | provenance | | +| Tuples.cs:59:26:59:27 | access to local variable o2 : String | Tuples.cs:59:22:59:28 | (..., ...) : ValueTuple [field Item2] : String | provenance | | +| Tuples.cs:59:26:59:27 | access to local variable o2 : String | Tuples.cs:59:22:59:28 | (..., ...) : ValueTuple [field Item2] : String | provenance | | +| Tuples.cs:62:18:62:57 | SSA def(t) : ValueTuple,Int32> [field Item1] : String | Tuples.cs:63:22:63:22 | access to local variable t : ValueTuple,Int32> [field Item1] : String | provenance | | +| Tuples.cs:62:18:62:57 | SSA def(t) : ValueTuple,Int32> [field Item1] : String | Tuples.cs:63:22:63:22 | access to local variable t : ValueTuple,Int32> [field Item1] : String | provenance | | +| Tuples.cs:62:18:62:57 | SSA def(t) : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:64:22:64:22 | access to local variable t : ValueTuple,Int32> [field Item2, field Item2] : String | provenance | | +| Tuples.cs:62:18:62:57 | SSA def(t) : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:64:22:64:22 | access to local variable t : ValueTuple,Int32> [field Item2, field Item2] : String | provenance | | +| Tuples.cs:63:22:63:22 | access to local variable t : ValueTuple,Int32> [field Item1] : String | Tuples.cs:63:22:63:28 | access to field Item1 | provenance | | +| Tuples.cs:63:22:63:22 | access to local variable t : ValueTuple,Int32> [field Item1] : String | Tuples.cs:63:22:63:28 | access to field Item1 | provenance | | +| Tuples.cs:64:22:64:22 | access to local variable t : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:64:22:64:28 | access to field Item2 : ValueTuple [field Item2] : String | provenance | | +| Tuples.cs:64:22:64:22 | access to local variable t : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:64:22:64:28 | access to field Item2 : ValueTuple [field Item2] : String | provenance | | +| Tuples.cs:64:22:64:28 | access to field Item2 : ValueTuple [field Item2] : String | Tuples.cs:64:22:64:34 | access to field Item2 | provenance | | +| Tuples.cs:64:22:64:28 | access to field Item2 : ValueTuple [field Item2] : String | Tuples.cs:64:22:64:34 | access to field Item2 | provenance | | +| Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple [field Item2] : String | Tuples.cs:67:30:67:30 | SSA def(c) : String | provenance | | +| Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple [field Item2] : String | Tuples.cs:67:30:67:30 | SSA def(c) : String | provenance | | +| Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple,Int32> [field Item1] : String | Tuples.cs:67:23:67:23 | SSA def(a) : String | provenance | | +| Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple,Int32> [field Item1] : String | Tuples.cs:67:23:67:23 | SSA def(a) : String | provenance | | +| Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple [field Item2] : String | provenance | | +| Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple [field Item2] : String | provenance | | +| Tuples.cs:67:23:67:23 | SSA def(a) : String | Tuples.cs:68:22:68:22 | access to local variable a | provenance | | +| Tuples.cs:67:23:67:23 | SSA def(a) : String | Tuples.cs:68:22:68:22 | access to local variable a | provenance | | +| Tuples.cs:67:30:67:30 | SSA def(c) : String | Tuples.cs:69:22:69:22 | access to local variable c | provenance | | +| Tuples.cs:67:30:67:30 | SSA def(c) : String | Tuples.cs:69:22:69:22 | access to local variable c | provenance | | +| Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple [field Item2] : String | Tuples.cs:87:30:87:30 | SSA def(r) : String | provenance | | +| Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple [field Item2] : String | Tuples.cs:87:30:87:30 | SSA def(r) : String | provenance | | +| Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple,Int32> [field Item1] : String | Tuples.cs:87:23:87:23 | SSA def(p) : String | provenance | | +| Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple,Int32> [field Item1] : String | Tuples.cs:87:23:87:23 | SSA def(p) : 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: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:23:87:23 | SSA def(p) : String | Tuples.cs:89:18:89:18 | access to local variable p | provenance | | +| Tuples.cs:87:23:87:23 | SSA def(p) : String | Tuples.cs:89:18:89:18 | access to local variable p | provenance | | +| Tuples.cs:87:30:87:30 | SSA def(r) : String | Tuples.cs:90:18:90:18 | access to local variable r | provenance | | +| Tuples.cs:87:30:87:30 | SSA def(r) : String | Tuples.cs:90:18:90:18 | access to local variable r | provenance | | +| Tuples.cs:99:17:99:33 | call to method Source : 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:100:24:100:24 | access to local variable o : String | provenance | | +| Tuples.cs:100:17:100:28 | object creation of type R1 : R1 [property i] : String | Tuples.cs:101:14:101:14 | access to local variable r : R1 [property i] : String | provenance | | +| Tuples.cs:100:17:100:28 | object creation of type R1 : R1 [property i] : String | Tuples.cs:101:14:101:14 | access to local variable r : R1 [property i] : String | provenance | | +| Tuples.cs:100:24:100:24 | access to local variable o : String | Tuples.cs:100:17:100:28 | object creation of type R1 : R1 [property i] : String | provenance | | +| Tuples.cs:100:24:100:24 | access to local variable o : String | Tuples.cs:100:17:100:28 | object creation of type R1 : R1 [property i] : String | provenance | | +| Tuples.cs:101:14:101:14 | access to local variable r : R1 [property i] : String | Tuples.cs:101:14:101:16 | access to property i | provenance | | +| Tuples.cs:101:14:101:14 | access to local variable r : R1 [property i] : String | Tuples.cs:101:14:101:16 | access to property i | provenance | | +| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:121:28:121:28 | access to local variable o : Object | provenance | | +| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:121:28:121:28 | access to local variable o : Object | provenance | | +| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:122:14:122:15 | access to local variable x1 | provenance | | +| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:122:14:122:15 | access to local variable x1 | provenance | | +| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:125:25:125:25 | access to local variable o : Object | provenance | | +| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:125:25:125:25 | access to local variable o : Object | provenance | | +| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:126:14:126:15 | access to local variable x2 | provenance | | +| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:126:14:126:15 | access to local variable x2 | provenance | | +| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:129:31:129:31 | access to local variable o : Object | provenance | | +| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:129:31:129:31 | access to local variable o : Object | provenance | | +| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:130:14:130:15 | access to local variable y3 | provenance | | +| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:130:14:130:15 | access to local variable y3 | provenance | | +| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:133:28:133:28 | access to local variable o : Object | provenance | | +| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:133:28:133:28 | access to local variable o : Object | provenance | | +| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:134:14:134:15 | access to local variable y4 | provenance | | +| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:134:14:134:15 | access to local variable y4 | provenance | | +| Tuples.cs:121:9:121:23 | (..., ...) : ValueTuple [field Item1] : Object | Tuples.cs:121:9:121:32 | SSA def(x1) : Object | provenance | | +| Tuples.cs:121:9:121:23 | (..., ...) : ValueTuple [field Item1] : Object | Tuples.cs:121:9:121:32 | SSA def(x1) : Object | provenance | | +| Tuples.cs:121:9:121:32 | SSA def(x1) : Object | Tuples.cs:122:14:122:15 | access to local variable x1 | provenance | | +| Tuples.cs:121:9:121:32 | SSA def(x1) : Object | Tuples.cs:122:14:122:15 | access to local variable x1 | provenance | | +| Tuples.cs:121:27:121:32 | (..., ...) : ValueTuple [field Item1] : Object | Tuples.cs:121:9:121:23 | (..., ...) : ValueTuple [field Item1] : Object | provenance | | +| Tuples.cs:121:27:121:32 | (..., ...) : ValueTuple [field Item1] : Object | Tuples.cs:121:9:121:23 | (..., ...) : ValueTuple [field Item1] : Object | provenance | | +| Tuples.cs:121:28:121:28 | access to local variable o : Object | Tuples.cs:121:27:121:32 | (..., ...) : ValueTuple [field Item1] : Object | provenance | | +| Tuples.cs:121:28:121:28 | access to local variable o : Object | Tuples.cs:121:27:121:32 | (..., ...) : ValueTuple [field Item1] : Object | provenance | | +| Tuples.cs:125:9:125:20 | (..., ...) : ValueTuple [field Item1] : Object | Tuples.cs:125:9:125:29 | SSA def(x2) : Object | provenance | | +| Tuples.cs:125:9:125:20 | (..., ...) : ValueTuple [field Item1] : Object | Tuples.cs:125:9:125:29 | SSA def(x2) : Object | provenance | | +| Tuples.cs:125:9:125:29 | SSA def(x2) : Object | Tuples.cs:126:14:126:15 | access to local variable x2 | provenance | | +| Tuples.cs:125:9:125:29 | SSA def(x2) : Object | Tuples.cs:126:14:126:15 | access to local variable x2 | provenance | | +| Tuples.cs:125:24:125:29 | (..., ...) : ValueTuple [field Item1] : Object | Tuples.cs:125:9:125:20 | (..., ...) : ValueTuple [field Item1] : Object | provenance | | +| Tuples.cs:125:24:125:29 | (..., ...) : ValueTuple [field Item1] : Object | Tuples.cs:125:9:125:20 | (..., ...) : ValueTuple [field Item1] : Object | provenance | | +| Tuples.cs:125:25:125:25 | access to local variable o : Object | Tuples.cs:125:24:125:29 | (..., ...) : ValueTuple [field Item1] : Object | provenance | | +| Tuples.cs:125:25:125:25 | access to local variable o : Object | Tuples.cs:125:24:125:29 | (..., ...) : ValueTuple [field Item1] : Object | provenance | | +| Tuples.cs:129:9:129:23 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:129:9:129:32 | SSA def(y3) : Object | provenance | | +| Tuples.cs:129:9:129:23 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:129:9:129:32 | SSA def(y3) : Object | provenance | | +| Tuples.cs:129:9:129:32 | SSA def(y3) : Object | Tuples.cs:130:14:130:15 | access to local variable y3 | provenance | | +| Tuples.cs:129:9:129:32 | SSA def(y3) : Object | Tuples.cs:130:14:130:15 | access to local variable y3 | provenance | | +| Tuples.cs:129:27:129:32 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:129:9:129:23 | (..., ...) : ValueTuple [field Item2] : Object | provenance | | +| Tuples.cs:129:27:129:32 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:129:9:129:23 | (..., ...) : ValueTuple [field Item2] : Object | provenance | | +| Tuples.cs:129:31:129:31 | access to local variable o : Object | Tuples.cs:129:27:129:32 | (..., ...) : ValueTuple [field Item2] : Object | provenance | | +| Tuples.cs:129:31:129:31 | access to local variable o : Object | Tuples.cs:129:27:129:32 | (..., ...) : ValueTuple [field Item2] : Object | provenance | | +| Tuples.cs:133:9:133:20 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:133:9:133:29 | SSA def(y4) : Object | provenance | | +| Tuples.cs:133:9:133:20 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:133:9:133:29 | SSA def(y4) : Object | provenance | | +| Tuples.cs:133:9:133:29 | SSA def(y4) : Object | Tuples.cs:134:14:134:15 | access to local variable y4 | provenance | | +| Tuples.cs:133:9:133:29 | SSA def(y4) : Object | Tuples.cs:134:14:134:15 | access to local variable y4 | provenance | | +| Tuples.cs:133:24:133:29 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:133:9:133:20 | (..., ...) : ValueTuple [field Item2] : Object | provenance | | +| Tuples.cs:133:24:133:29 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:133:9:133:20 | (..., ...) : ValueTuple [field Item2] : Object | provenance | | +| Tuples.cs:133:28:133:28 | access to local variable o : Object | Tuples.cs:133:24:133:29 | (..., ...) : ValueTuple [field Item2] : Object | provenance | | +| Tuples.cs:133:28:133:28 | access to local variable o : Object | Tuples.cs:133:24:133:29 | (..., ...) : ValueTuple [field Item2] : Object | provenance | | nodes | Tuples.cs:7:18:7:34 | call to method Source : Object | semmle.label | call to method Source : Object | | Tuples.cs:7:18:7:34 | call to method Source : Object | semmle.label | call to method Source : Object | diff --git a/csharp/ql/test/library-tests/dataflow/typeflow-dispatch/TypeFlowDispatch.expected b/csharp/ql/test/library-tests/dataflow/typeflow-dispatch/TypeFlowDispatch.expected index 51286b90578..cb7792957a8 100644 --- a/csharp/ql/test/library-tests/dataflow/typeflow-dispatch/TypeFlowDispatch.expected +++ b/csharp/ql/test/library-tests/dataflow/typeflow-dispatch/TypeFlowDispatch.expected @@ -1,59 +1,59 @@ testFailures edges -| TypeFlowDispatch.cs:11:42:11:42 | x : String | TypeFlowDispatch.cs:13:11:13:11 | access to parameter x : String | -| TypeFlowDispatch.cs:11:42:11:42 | x : String | TypeFlowDispatch.cs:13:11:13:11 | access to parameter x : String | -| TypeFlowDispatch.cs:13:11:13:11 | access to parameter x : String | TypeFlowDispatch.cs:23:20:23:20 | x : String | -| TypeFlowDispatch.cs:13:11:13:11 | access to parameter x : String | TypeFlowDispatch.cs:23:20:23:20 | x : String | -| TypeFlowDispatch.cs:16:46:16:46 | x : String | TypeFlowDispatch.cs:18:19:18:19 | access to parameter x : String | -| TypeFlowDispatch.cs:16:46:16:46 | x : String | TypeFlowDispatch.cs:18:19:18:19 | access to parameter x : String | -| TypeFlowDispatch.cs:18:19:18:19 | access to parameter x : String | TypeFlowDispatch.cs:11:42:11:42 | x : String | -| TypeFlowDispatch.cs:18:19:18:19 | access to parameter x : String | TypeFlowDispatch.cs:11:42:11:42 | x : String | -| TypeFlowDispatch.cs:23:20:23:20 | x : String | TypeFlowDispatch.cs:23:32:23:32 | access to parameter x | -| TypeFlowDispatch.cs:23:20:23:20 | x : String | TypeFlowDispatch.cs:23:32:23:32 | access to parameter x | -| TypeFlowDispatch.cs:23:39:23:49 | call to method Source : String | TypeFlowDispatch.cs:16:46:16:46 | x : String | -| TypeFlowDispatch.cs:23:39:23:49 | call to method Source : String | TypeFlowDispatch.cs:16:46:16:46 | x : String | -| TypeFlowDispatch.cs:29:37:29:37 | l : List [element] : String | TypeFlowDispatch.cs:31:9:31:9 | access to parameter l : List [element] : String | -| TypeFlowDispatch.cs:29:37:29:37 | l : List [element] : String | TypeFlowDispatch.cs:31:9:31:9 | access to parameter l : List [element] : String | -| TypeFlowDispatch.cs:31:9:31:9 | access to parameter l : List [element] : String | TypeFlowDispatch.cs:39:34:39:34 | x : String | -| TypeFlowDispatch.cs:31:9:31:9 | access to parameter l : List [element] : String | TypeFlowDispatch.cs:39:34:39:34 | x : String | -| TypeFlowDispatch.cs:36:23:36:54 | object creation of type List : List [element] : String | TypeFlowDispatch.cs:39:25:39:31 | access to local variable tainted : List [element] : String | -| TypeFlowDispatch.cs:36:23:36:54 | object creation of type List : List [element] : String | TypeFlowDispatch.cs:39:25:39:31 | access to local variable tainted : List [element] : String | -| TypeFlowDispatch.cs:36:42:36:52 | call to method Source : String | TypeFlowDispatch.cs:36:23:36:54 | object creation of type List : List [element] : String | -| TypeFlowDispatch.cs:36:42:36:52 | call to method Source : String | TypeFlowDispatch.cs:36:23:36:54 | object creation of type List : List [element] : String | -| TypeFlowDispatch.cs:39:25:39:31 | access to local variable tainted : List [element] : String | TypeFlowDispatch.cs:29:37:29:37 | l : List [element] : String | -| TypeFlowDispatch.cs:39:25:39:31 | access to local variable tainted : List [element] : String | TypeFlowDispatch.cs:29:37:29:37 | l : List [element] : String | -| TypeFlowDispatch.cs:39:34:39:34 | x : String | TypeFlowDispatch.cs:39:46:39:46 | access to parameter x | -| TypeFlowDispatch.cs:39:34:39:34 | x : String | TypeFlowDispatch.cs:39:46:39:46 | access to parameter x | -| TypeFlowDispatch.cs:42:42:42:42 | x : String | TypeFlowDispatch.cs:44:11:44:11 | access to parameter x : String | -| TypeFlowDispatch.cs:42:42:42:42 | x : String | TypeFlowDispatch.cs:44:11:44:11 | access to parameter x : String | -| TypeFlowDispatch.cs:44:11:44:11 | access to parameter x : String | TypeFlowDispatch.cs:52:32:52:32 | t : String | -| TypeFlowDispatch.cs:44:11:44:11 | access to parameter x : String | TypeFlowDispatch.cs:52:32:52:32 | t : String | -| TypeFlowDispatch.cs:47:46:47:46 | x : String | TypeFlowDispatch.cs:49:19:49:19 | access to parameter x : String | -| TypeFlowDispatch.cs:47:46:47:46 | x : String | TypeFlowDispatch.cs:49:19:49:19 | access to parameter x : String | -| TypeFlowDispatch.cs:49:19:49:19 | access to parameter x : String | TypeFlowDispatch.cs:42:42:42:42 | x : String | -| TypeFlowDispatch.cs:49:19:49:19 | access to parameter x : String | TypeFlowDispatch.cs:42:42:42:42 | x : String | -| TypeFlowDispatch.cs:52:32:52:32 | t : String | TypeFlowDispatch.cs:52:43:52:43 | access to parameter t | -| TypeFlowDispatch.cs:52:32:52:32 | t : String | TypeFlowDispatch.cs:52:43:52:43 | access to parameter t | -| TypeFlowDispatch.cs:57:38:57:48 | call to method Source : String | TypeFlowDispatch.cs:47:46:47:46 | x : String | -| TypeFlowDispatch.cs:57:38:57:48 | call to method Source : String | TypeFlowDispatch.cs:47:46:47:46 | x : String | -| TypeFlowDispatch.cs:61:29:61:29 | l : List [element] : String | TypeFlowDispatch.cs:63:27:63:27 | access to parameter l : List [element] : String | -| TypeFlowDispatch.cs:61:29:61:29 | l : List [element] : String | TypeFlowDispatch.cs:63:27:63:27 | access to parameter l : List [element] : String | -| TypeFlowDispatch.cs:63:22:63:22 | SSA def(x) : String | TypeFlowDispatch.cs:64:15:64:15 | access to local variable x : String | -| TypeFlowDispatch.cs:63:22:63:22 | SSA def(x) : String | TypeFlowDispatch.cs:64:15:64:15 | access to local variable x : String | -| TypeFlowDispatch.cs:63:27:63:27 | access to parameter l : List [element] : String | TypeFlowDispatch.cs:63:22:63:22 | SSA def(x) : String | -| TypeFlowDispatch.cs:63:27:63:27 | access to parameter l : List [element] : String | TypeFlowDispatch.cs:63:22:63:22 | SSA def(x) : String | -| TypeFlowDispatch.cs:64:15:64:15 | access to local variable x : String | TypeFlowDispatch.cs:52:32:52:32 | t : String | -| TypeFlowDispatch.cs:64:15:64:15 | access to local variable x : String | TypeFlowDispatch.cs:52:32:52:32 | t : String | -| TypeFlowDispatch.cs:67:33:67:33 | l : List [element] : String | TypeFlowDispatch.cs:69:17:69:17 | access to parameter l : List [element] : String | -| TypeFlowDispatch.cs:67:33:67:33 | l : List [element] : String | TypeFlowDispatch.cs:69:17:69:17 | access to parameter l : List [element] : String | -| TypeFlowDispatch.cs:69:17:69:17 | access to parameter l : List [element] : String | TypeFlowDispatch.cs:61:29:61:29 | l : List [element] : String | -| TypeFlowDispatch.cs:69:17:69:17 | access to parameter l : List [element] : String | TypeFlowDispatch.cs:61:29:61:29 | l : List [element] : String | -| TypeFlowDispatch.cs:74:23:74:54 | object creation of type List : List [element] : String | TypeFlowDispatch.cs:77:21:77:27 | access to local variable tainted : List [element] : String | -| TypeFlowDispatch.cs:74:23:74:54 | object creation of type List : List [element] : String | TypeFlowDispatch.cs:77:21:77:27 | access to local variable tainted : List [element] : String | -| TypeFlowDispatch.cs:74:42:74:52 | call to method Source : String | TypeFlowDispatch.cs:74:23:74:54 | object creation of type List : List [element] : String | -| TypeFlowDispatch.cs:74:42:74:52 | call to method Source : String | TypeFlowDispatch.cs:74:23:74:54 | object creation of type List : List [element] : String | -| TypeFlowDispatch.cs:77:21:77:27 | access to local variable tainted : List [element] : String | TypeFlowDispatch.cs:67:33:67:33 | l : List [element] : String | -| TypeFlowDispatch.cs:77:21:77:27 | access to local variable tainted : List [element] : String | TypeFlowDispatch.cs:67:33:67:33 | l : List [element] : String | +| TypeFlowDispatch.cs:11:42:11:42 | x : String | TypeFlowDispatch.cs:13:11:13:11 | access to parameter x : String | provenance | | +| TypeFlowDispatch.cs:11:42:11:42 | x : String | TypeFlowDispatch.cs:13:11:13:11 | access to parameter x : String | provenance | | +| TypeFlowDispatch.cs:13:11:13:11 | access to parameter x : String | TypeFlowDispatch.cs:23:20:23:20 | x : String | provenance | | +| TypeFlowDispatch.cs:13:11:13:11 | access to parameter x : String | TypeFlowDispatch.cs:23:20:23:20 | x : String | provenance | | +| TypeFlowDispatch.cs:16:46:16:46 | x : String | TypeFlowDispatch.cs:18:19:18:19 | access to parameter x : String | provenance | | +| TypeFlowDispatch.cs:16:46:16:46 | x : String | TypeFlowDispatch.cs:18:19:18:19 | access to parameter x : String | provenance | | +| TypeFlowDispatch.cs:18:19:18:19 | access to parameter x : String | TypeFlowDispatch.cs:11:42:11:42 | x : String | provenance | | +| TypeFlowDispatch.cs:18:19:18:19 | access to parameter x : String | TypeFlowDispatch.cs:11:42:11:42 | x : String | provenance | | +| TypeFlowDispatch.cs:23:20:23:20 | x : String | TypeFlowDispatch.cs:23:32:23:32 | access to parameter x | provenance | | +| TypeFlowDispatch.cs:23:20:23:20 | x : String | TypeFlowDispatch.cs:23:32:23:32 | access to parameter x | provenance | | +| TypeFlowDispatch.cs:23:39:23:49 | call to method Source : String | TypeFlowDispatch.cs:16:46:16:46 | x : String | provenance | | +| TypeFlowDispatch.cs:23:39:23:49 | call to method Source : String | TypeFlowDispatch.cs:16:46:16:46 | x : String | provenance | | +| TypeFlowDispatch.cs:29:37:29:37 | l : List [element] : String | TypeFlowDispatch.cs:31:9:31:9 | access to parameter l : List [element] : String | provenance | | +| TypeFlowDispatch.cs:29:37:29:37 | l : List [element] : String | TypeFlowDispatch.cs:31:9:31:9 | access to parameter l : List [element] : String | provenance | | +| TypeFlowDispatch.cs:31:9:31:9 | access to parameter l : List [element] : String | TypeFlowDispatch.cs:39:34:39:34 | x : String | provenance | | +| TypeFlowDispatch.cs:31:9:31:9 | access to parameter l : List [element] : String | TypeFlowDispatch.cs:39:34:39:34 | x : String | provenance | | +| TypeFlowDispatch.cs:36:23:36:54 | object creation of type List : List [element] : String | TypeFlowDispatch.cs:39:25:39:31 | access to local variable tainted : List [element] : String | provenance | | +| TypeFlowDispatch.cs:36:23:36:54 | object creation of type List : List [element] : String | TypeFlowDispatch.cs:39:25:39:31 | access to local variable tainted : List [element] : String | provenance | | +| TypeFlowDispatch.cs:36:42:36:52 | call to method Source : String | TypeFlowDispatch.cs:36:23:36:54 | object creation of type List : List [element] : String | provenance | | +| TypeFlowDispatch.cs:36:42:36:52 | call to method Source : String | TypeFlowDispatch.cs:36:23:36:54 | object creation of type List : List [element] : String | provenance | | +| TypeFlowDispatch.cs:39:25:39:31 | access to local variable tainted : List [element] : String | TypeFlowDispatch.cs:29:37:29:37 | l : List [element] : String | provenance | | +| TypeFlowDispatch.cs:39:25:39:31 | access to local variable tainted : List [element] : String | TypeFlowDispatch.cs:29:37:29:37 | l : List [element] : String | provenance | | +| TypeFlowDispatch.cs:39:34:39:34 | x : String | TypeFlowDispatch.cs:39:46:39:46 | access to parameter x | provenance | | +| TypeFlowDispatch.cs:39:34:39:34 | x : String | TypeFlowDispatch.cs:39:46:39:46 | access to parameter x | provenance | | +| TypeFlowDispatch.cs:42:42:42:42 | x : String | TypeFlowDispatch.cs:44:11:44:11 | access to parameter x : String | provenance | | +| TypeFlowDispatch.cs:42:42:42:42 | x : String | TypeFlowDispatch.cs:44:11:44:11 | access to parameter x : String | provenance | | +| TypeFlowDispatch.cs:44:11:44:11 | access to parameter x : String | TypeFlowDispatch.cs:52:32:52:32 | t : String | provenance | | +| TypeFlowDispatch.cs:44:11:44:11 | access to parameter x : String | TypeFlowDispatch.cs:52:32:52:32 | t : String | provenance | | +| TypeFlowDispatch.cs:47:46:47:46 | x : String | TypeFlowDispatch.cs:49:19:49:19 | access to parameter x : String | provenance | | +| TypeFlowDispatch.cs:47:46:47:46 | x : String | TypeFlowDispatch.cs:49:19:49:19 | access to parameter x : String | provenance | | +| TypeFlowDispatch.cs:49:19:49:19 | access to parameter x : String | TypeFlowDispatch.cs:42:42:42:42 | x : String | provenance | | +| TypeFlowDispatch.cs:49:19:49:19 | access to parameter x : String | TypeFlowDispatch.cs:42:42:42:42 | x : String | provenance | | +| TypeFlowDispatch.cs:52:32:52:32 | t : String | TypeFlowDispatch.cs:52:43:52:43 | access to parameter t | provenance | | +| TypeFlowDispatch.cs:52:32:52:32 | t : String | TypeFlowDispatch.cs:52:43:52:43 | access to parameter t | provenance | | +| TypeFlowDispatch.cs:57:38:57:48 | call to method Source : String | TypeFlowDispatch.cs:47:46:47:46 | x : String | provenance | | +| TypeFlowDispatch.cs:57:38:57:48 | call to method Source : String | TypeFlowDispatch.cs:47:46:47:46 | x : String | provenance | | +| TypeFlowDispatch.cs:61:29:61:29 | l : List [element] : String | TypeFlowDispatch.cs:63:27:63:27 | access to parameter l : List [element] : String | provenance | | +| TypeFlowDispatch.cs:61:29:61:29 | l : List [element] : String | TypeFlowDispatch.cs:63:27:63:27 | access to parameter l : List [element] : String | provenance | | +| TypeFlowDispatch.cs:63:22:63:22 | SSA def(x) : String | TypeFlowDispatch.cs:64:15:64:15 | access to local variable x : String | provenance | | +| TypeFlowDispatch.cs:63:22:63:22 | SSA def(x) : String | TypeFlowDispatch.cs:64:15:64:15 | access to local variable x : String | provenance | | +| TypeFlowDispatch.cs:63:27:63:27 | access to parameter l : List [element] : String | TypeFlowDispatch.cs:63:22:63:22 | SSA def(x) : String | provenance | | +| TypeFlowDispatch.cs:63:27:63:27 | access to parameter l : List [element] : String | TypeFlowDispatch.cs:63:22:63:22 | SSA def(x) : String | provenance | | +| TypeFlowDispatch.cs:64:15:64:15 | access to local variable x : String | TypeFlowDispatch.cs:52:32:52:32 | t : String | provenance | | +| TypeFlowDispatch.cs:64:15:64:15 | access to local variable x : String | TypeFlowDispatch.cs:52:32:52:32 | t : String | provenance | | +| TypeFlowDispatch.cs:67:33:67:33 | l : List [element] : String | TypeFlowDispatch.cs:69:17:69:17 | access to parameter l : List [element] : String | provenance | | +| TypeFlowDispatch.cs:67:33:67:33 | l : List [element] : String | TypeFlowDispatch.cs:69:17:69:17 | access to parameter l : List [element] : String | provenance | | +| TypeFlowDispatch.cs:69:17:69:17 | access to parameter l : List [element] : String | TypeFlowDispatch.cs:61:29:61:29 | l : List [element] : String | provenance | | +| TypeFlowDispatch.cs:69:17:69:17 | access to parameter l : List [element] : String | TypeFlowDispatch.cs:61:29:61:29 | l : List [element] : String | provenance | | +| TypeFlowDispatch.cs:74:23:74:54 | object creation of type List : List [element] : String | TypeFlowDispatch.cs:77:21:77:27 | access to local variable tainted : List [element] : String | provenance | | +| TypeFlowDispatch.cs:74:23:74:54 | object creation of type List : List [element] : String | TypeFlowDispatch.cs:77:21:77:27 | access to local variable tainted : List [element] : String | provenance | | +| TypeFlowDispatch.cs:74:42:74:52 | call to method Source : String | TypeFlowDispatch.cs:74:23:74:54 | object creation of type List : List [element] : String | provenance | | +| TypeFlowDispatch.cs:74:42:74:52 | call to method Source : String | TypeFlowDispatch.cs:74:23:74:54 | object creation of type List : List [element] : String | provenance | | +| TypeFlowDispatch.cs:77:21:77:27 | access to local variable tainted : List [element] : String | TypeFlowDispatch.cs:67:33:67:33 | l : List [element] : String | provenance | | +| TypeFlowDispatch.cs:77:21:77:27 | access to local variable tainted : List [element] : String | TypeFlowDispatch.cs:67:33:67:33 | l : List [element] : String | provenance | | nodes | TypeFlowDispatch.cs:11:42:11:42 | x : String | semmle.label | x : String | | TypeFlowDispatch.cs:11:42:11:42 | x : String | semmle.label | x : String | diff --git a/csharp/ql/test/library-tests/dataflow/types/Types.expected b/csharp/ql/test/library-tests/dataflow/types/Types.expected index 76628874c48..1c35152bc26 100644 --- a/csharp/ql/test/library-tests/dataflow/types/Types.expected +++ b/csharp/ql/test/library-tests/dataflow/types/Types.expected @@ -1,63 +1,63 @@ testFailures edges -| Types.cs:7:21:7:25 | this : D | Types.cs:7:32:7:35 | this access : D | -| Types.cs:7:32:7:35 | this access : D | Types.cs:16:30:16:30 | this : D | -| Types.cs:16:30:16:30 | this : D | Types.cs:16:42:16:45 | this access | -| Types.cs:23:12:23:18 | object creation of type C : C | Types.cs:47:22:47:22 | a : C | -| Types.cs:25:12:25:18 | object creation of type C : C | Types.cs:63:22:63:22 | a : C | -| Types.cs:26:12:26:18 | object creation of type C : C | Types.cs:65:25:65:25 | x : C | -| Types.cs:27:12:27:18 | object creation of type C : C | Types.cs:67:25:67:25 | x : C | -| Types.cs:28:12:28:18 | object creation of type C : C | Types.cs:69:25:69:25 | x : C | -| Types.cs:30:12:30:18 | object creation of type C : C | Types.cs:77:22:77:22 | a : C | -| Types.cs:32:9:32:15 | object creation of type D : D | Types.cs:16:30:16:30 | this : D | -| Types.cs:33:9:33:15 | object creation of type D : D | Types.cs:7:21:7:25 | this : D | -| Types.cs:35:12:35:18 | object creation of type D : D | Types.cs:53:22:53:22 | a : D | -| Types.cs:37:12:37:18 | object creation of type D : D | Types.cs:65:25:65:25 | x : D | -| Types.cs:38:12:38:18 | object creation of type D : D | Types.cs:67:25:67:25 | x : D | -| Types.cs:39:12:39:18 | object creation of type D : D | Types.cs:69:25:69:25 | x : D | -| Types.cs:40:12:40:18 | object creation of type D : D | Types.cs:71:25:71:25 | x : D | -| Types.cs:43:20:43:23 | null : null | Types.cs:44:14:44:14 | access to local variable o | -| Types.cs:47:22:47:22 | a : C | Types.cs:49:18:49:20 | SSA def(c) : C | -| Types.cs:49:18:49:20 | SSA def(c) : C | Types.cs:50:18:50:18 | access to local variable c | -| Types.cs:53:22:53:22 | a : D | Types.cs:57:18:57:20 | SSA def(d) : D | -| Types.cs:57:18:57:20 | SSA def(d) : D | Types.cs:58:22:58:22 | access to local variable d | -| Types.cs:63:22:63:22 | a : C | Types.cs:63:33:63:36 | (...) ... | -| Types.cs:65:25:65:25 | x : C | Types.cs:65:36:65:36 | access to parameter x | -| Types.cs:65:25:65:25 | x : D | Types.cs:65:36:65:36 | access to parameter x | -| Types.cs:67:25:67:25 | x : C | Types.cs:67:48:67:48 | access to parameter x | -| Types.cs:67:25:67:25 | x : D | Types.cs:67:48:67:48 | access to parameter x | -| Types.cs:69:25:69:25 | x : C | Types.cs:69:52:69:52 | access to parameter x | -| Types.cs:69:25:69:25 | x : D | Types.cs:69:52:69:52 | access to parameter x | -| Types.cs:71:25:71:25 | x : D | Types.cs:73:21:73:21 | (...) ... : D | -| Types.cs:73:21:73:21 | (...) ... : D | Types.cs:74:9:74:9 | access to local variable d : D | -| Types.cs:74:9:74:9 | access to local variable d : D | Types.cs:16:30:16:30 | this : D | -| Types.cs:77:22:77:22 | a : C | Types.cs:79:18:79:25 | SSA def(b) : C | -| Types.cs:79:18:79:25 | SSA def(b) : C | Types.cs:80:18:80:18 | access to local variable b | -| Types.cs:90:22:90:22 | e : Types+E.E2 | Types.cs:92:26:92:26 | access to parameter e : Types+E.E2 | -| Types.cs:92:13:92:16 | [post] this access : Types+E [field Field] : Types+E.E2 | Types.cs:93:13:93:16 | this access : Types+E [field Field] : Types+E.E2 | -| Types.cs:92:26:92:26 | access to parameter e : Types+E.E2 | Types.cs:92:13:92:16 | [post] this access : Types+E [field Field] : Types+E.E2 | -| Types.cs:93:13:93:16 | this access : Types+E [field Field] : Types+E.E2 | Types.cs:113:34:113:34 | this : Types+E [field Field] : Types+E.E2 | -| Types.cs:110:25:110:32 | object creation of type E2 : Types+E.E2 | Types.cs:90:22:90:22 | e : Types+E.E2 | -| Types.cs:113:34:113:34 | this : Types+E [field Field] : Types+E.E2 | Types.cs:115:22:115:25 | this access : Types+E [field Field] : Types+E.E2 | -| Types.cs:115:22:115:25 | this access : Types+E [field Field] : Types+E.E2 | Types.cs:115:22:115:31 | access to field Field | -| Types.cs:120:25:120:31 | object creation of type A : A | Types.cs:122:30:122:30 | access to local variable a : A | -| Types.cs:121:26:121:33 | object creation of type E2 : Types+E.E2 | Types.cs:123:30:123:31 | access to local variable e2 : Types+E.E2 | -| Types.cs:122:30:122:30 | access to local variable a : A | Types.cs:122:22:122:31 | call to method Through | -| Types.cs:122:30:122:30 | access to local variable a : A | Types.cs:130:34:130:34 | x : A | -| Types.cs:123:30:123:31 | access to local variable e2 : Types+E.E2 | Types.cs:123:22:123:32 | call to method Through | -| Types.cs:123:30:123:31 | access to local variable e2 : Types+E.E2 | Types.cs:130:34:130:34 | x : Types+E.E2 | -| Types.cs:130:34:130:34 | x : A | Types.cs:130:40:130:40 | access to parameter x : A | -| Types.cs:130:34:130:34 | x : Types+E.E2 | Types.cs:130:40:130:40 | access to parameter x : Types+E.E2 | -| Types.cs:138:21:138:25 | this : FieldC [field Field] : Object | Types.cs:138:32:138:35 | this access : FieldC [field Field] : Object | -| Types.cs:138:32:138:35 | this access : FieldC [field Field] : Object | Types.cs:153:30:153:30 | this : FieldC [field Field] : Object | -| Types.cs:144:13:144:13 | [post] access to parameter c : FieldC [field Field] : Object | Types.cs:145:13:145:13 | access to parameter c : FieldC [field Field] : Object | -| Types.cs:144:23:144:34 | object creation of type Object : Object | Types.cs:144:13:144:13 | [post] access to parameter c : FieldC [field Field] : Object | -| Types.cs:145:13:145:13 | access to parameter c : FieldC [field Field] : Object | Types.cs:138:21:138:25 | this : FieldC [field Field] : Object | -| Types.cs:153:30:153:30 | this : FieldC [field Field] : Object | Types.cs:153:42:153:45 | this access : FieldC [field Field] : Object | -| Types.cs:153:42:153:45 | this access : FieldC [field Field] : Object | Types.cs:153:42:153:51 | access to field Field | -| Types.cs:162:34:162:34 | this : Types+F+F1 | Types.cs:162:46:162:49 | this access | -| Types.cs:167:22:167:34 | object creation of type F1 : Types+F+F1 | Types.cs:173:13:173:19 | call to method GetF1 : Types+F+F1 | -| Types.cs:173:13:173:19 | call to method GetF1 : Types+F+F1 | Types.cs:162:34:162:34 | this : Types+F+F1 | +| Types.cs:7:21:7:25 | this : D | Types.cs:7:32:7:35 | this access : D | provenance | | +| Types.cs:7:32:7:35 | this access : D | Types.cs:16:30:16:30 | this : D | provenance | | +| Types.cs:16:30:16:30 | this : D | Types.cs:16:42:16:45 | this access | provenance | | +| Types.cs:23:12:23:18 | object creation of type C : C | Types.cs:47:22:47:22 | a : C | provenance | | +| Types.cs:25:12:25:18 | object creation of type C : C | Types.cs:63:22:63:22 | a : C | provenance | | +| Types.cs:26:12:26:18 | object creation of type C : C | Types.cs:65:25:65:25 | x : C | provenance | | +| Types.cs:27:12:27:18 | object creation of type C : C | Types.cs:67:25:67:25 | x : C | provenance | | +| Types.cs:28:12:28:18 | object creation of type C : C | Types.cs:69:25:69:25 | x : C | provenance | | +| Types.cs:30:12:30:18 | object creation of type C : C | Types.cs:77:22:77:22 | a : C | provenance | | +| Types.cs:32:9:32:15 | object creation of type D : D | Types.cs:16:30:16:30 | this : D | provenance | | +| Types.cs:33:9:33:15 | object creation of type D : D | Types.cs:7:21:7:25 | this : D | provenance | | +| Types.cs:35:12:35:18 | object creation of type D : D | Types.cs:53:22:53:22 | a : D | provenance | | +| Types.cs:37:12:37:18 | object creation of type D : D | Types.cs:65:25:65:25 | x : D | provenance | | +| Types.cs:38:12:38:18 | object creation of type D : D | Types.cs:67:25:67:25 | x : D | provenance | | +| Types.cs:39:12:39:18 | object creation of type D : D | Types.cs:69:25:69:25 | x : D | provenance | | +| Types.cs:40:12:40:18 | object creation of type D : D | Types.cs:71:25:71:25 | x : D | provenance | | +| Types.cs:43:20:43:23 | null : null | Types.cs:44:14:44:14 | access to local variable o | provenance | | +| Types.cs:47:22:47:22 | a : C | Types.cs:49:18:49:20 | SSA def(c) : C | provenance | | +| Types.cs:49:18:49:20 | SSA def(c) : C | Types.cs:50:18:50:18 | access to local variable c | provenance | | +| Types.cs:53:22:53:22 | a : D | Types.cs:57:18:57:20 | SSA def(d) : D | provenance | | +| Types.cs:57:18:57:20 | SSA def(d) : D | Types.cs:58:22:58:22 | access to local variable d | provenance | | +| Types.cs:63:22:63:22 | a : C | Types.cs:63:33:63:36 | (...) ... | provenance | | +| Types.cs:65:25:65:25 | x : C | Types.cs:65:36:65:36 | access to parameter x | provenance | | +| Types.cs:65:25:65:25 | x : D | Types.cs:65:36:65:36 | access to parameter x | provenance | | +| Types.cs:67:25:67:25 | x : C | Types.cs:67:48:67:48 | access to parameter x | provenance | | +| Types.cs:67:25:67:25 | x : D | Types.cs:67:48:67:48 | access to parameter x | provenance | | +| Types.cs:69:25:69:25 | x : C | Types.cs:69:52:69:52 | access to parameter x | provenance | | +| Types.cs:69:25:69:25 | x : D | Types.cs:69:52:69:52 | access to parameter x | provenance | | +| Types.cs:71:25:71:25 | x : D | Types.cs:73:21:73:21 | (...) ... : D | provenance | | +| Types.cs:73:21:73:21 | (...) ... : D | Types.cs:74:9:74:9 | access to local variable d : D | provenance | | +| Types.cs:74:9:74:9 | access to local variable d : D | Types.cs:16:30:16:30 | this : D | provenance | | +| Types.cs:77:22:77:22 | a : C | Types.cs:79:18:79:25 | SSA def(b) : C | provenance | | +| Types.cs:79:18:79:25 | SSA def(b) : C | Types.cs:80:18:80:18 | access to local variable b | provenance | | +| Types.cs:90:22:90:22 | e : Types+E.E2 | Types.cs:92:26:92:26 | access to parameter e : Types+E.E2 | provenance | | +| Types.cs:92:13:92:16 | [post] this access : Types+E [field Field] : Types+E.E2 | Types.cs:93:13:93:16 | this access : Types+E [field Field] : Types+E.E2 | provenance | | +| Types.cs:92:26:92:26 | access to parameter e : Types+E.E2 | Types.cs:92:13:92:16 | [post] this access : Types+E [field Field] : Types+E.E2 | provenance | | +| Types.cs:93:13:93:16 | this access : Types+E [field Field] : Types+E.E2 | Types.cs:113:34:113:34 | this : Types+E [field Field] : Types+E.E2 | provenance | | +| Types.cs:110:25:110:32 | object creation of type E2 : Types+E.E2 | Types.cs:90:22:90:22 | e : Types+E.E2 | provenance | | +| Types.cs:113:34:113:34 | this : Types+E [field Field] : Types+E.E2 | Types.cs:115:22:115:25 | this access : Types+E [field Field] : Types+E.E2 | provenance | | +| Types.cs:115:22:115:25 | this access : Types+E [field Field] : Types+E.E2 | Types.cs:115:22:115:31 | access to field Field | provenance | | +| Types.cs:120:25:120:31 | object creation of type A : A | Types.cs:122:30:122:30 | access to local variable a : A | provenance | | +| Types.cs:121:26:121:33 | object creation of type E2 : Types+E.E2 | Types.cs:123:30:123:31 | access to local variable e2 : Types+E.E2 | provenance | | +| Types.cs:122:30:122:30 | access to local variable a : A | Types.cs:122:22:122:31 | call to method Through | provenance | | +| Types.cs:122:30:122:30 | access to local variable a : A | Types.cs:130:34:130:34 | x : A | provenance | | +| Types.cs:123:30:123:31 | access to local variable e2 : Types+E.E2 | Types.cs:123:22:123:32 | call to method Through | provenance | | +| Types.cs:123:30:123:31 | access to local variable e2 : Types+E.E2 | Types.cs:130:34:130:34 | x : Types+E.E2 | provenance | | +| Types.cs:130:34:130:34 | x : A | Types.cs:130:40:130:40 | access to parameter x : A | provenance | | +| Types.cs:130:34:130:34 | x : Types+E.E2 | Types.cs:130:40:130:40 | access to parameter x : Types+E.E2 | provenance | | +| Types.cs:138:21:138:25 | this : FieldC [field Field] : Object | Types.cs:138:32:138:35 | this access : FieldC [field Field] : Object | provenance | | +| Types.cs:138:32:138:35 | this access : FieldC [field Field] : Object | Types.cs:153:30:153:30 | this : FieldC [field Field] : Object | provenance | | +| Types.cs:144:13:144:13 | [post] access to parameter c : FieldC [field Field] : Object | Types.cs:145:13:145:13 | access to parameter c : FieldC [field Field] : Object | provenance | | +| Types.cs:144:23:144:34 | object creation of type Object : Object | Types.cs:144:13:144:13 | [post] access to parameter c : FieldC [field Field] : Object | provenance | | +| Types.cs:145:13:145:13 | access to parameter c : FieldC [field Field] : Object | Types.cs:138:21:138:25 | this : FieldC [field Field] : Object | provenance | | +| Types.cs:153:30:153:30 | this : FieldC [field Field] : Object | Types.cs:153:42:153:45 | this access : FieldC [field Field] : Object | provenance | | +| Types.cs:153:42:153:45 | this access : FieldC [field Field] : Object | Types.cs:153:42:153:51 | access to field Field | provenance | | +| Types.cs:162:34:162:34 | this : Types+F+F1 | Types.cs:162:46:162:49 | this access | provenance | | +| Types.cs:167:22:167:34 | object creation of type F1 : Types+F+F1 | Types.cs:173:13:173:19 | call to method GetF1 : Types+F+F1 | provenance | | +| Types.cs:173:13:173:19 | call to method GetF1 : Types+F+F1 | Types.cs:162:34:162:34 | this : Types+F+F1 | provenance | | nodes | Types.cs:7:21:7:25 | this : D | semmle.label | this : D | | Types.cs:7:32:7:35 | this access : D | semmle.label | this access : D | diff --git a/csharp/ql/test/library-tests/frameworks/EntityFramework/Dataflow.expected b/csharp/ql/test/library-tests/frameworks/EntityFramework/Dataflow.expected index a9d4895fb46..b4b4cf6f129 100644 --- a/csharp/ql/test/library-tests/frameworks/EntityFramework/Dataflow.expected +++ b/csharp/ql/test/library-tests/frameworks/EntityFramework/Dataflow.expected @@ -1,178 +1,178 @@ edges -| EntityFramework.cs:59:13:62:13 | { ..., ... } : Person [property Name] : String | EntityFramework.cs:66:29:66:30 | access to local variable p1 : Person [property Name] : String | -| EntityFramework.cs:61:24:61:32 | "tainted" : String | EntityFramework.cs:59:13:62:13 | { ..., ... } : Person [property Name] : String | -| EntityFramework.cs:66:13:66:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Name] : String | EntityFramework.cs:68:13:68:15 | access to local variable ctx : MyContext [property Persons, element, property Name] : String | -| EntityFramework.cs:66:13:66:23 | [post] access to property Persons : DbSet [element, property Name] : String | EntityFramework.cs:66:13:66:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Name] : String | -| EntityFramework.cs:66:29:66:30 | access to local variable p1 : Person [property Name] : String | EntityFramework.cs:66:13:66:23 | [post] access to property Persons : DbSet [element, property Name] : String | -| EntityFramework.cs:68:13:68:15 | access to local variable ctx : MyContext [property Persons, element, property Name] : String | EntityFramework.cs:204:18:204:28 | access to property Persons : DbSet [element, property Name] : String | -| EntityFramework.cs:81:13:84:13 | { ..., ... } : Person [property Name] : String | EntityFramework.cs:88:29:88:30 | access to local variable p1 : Person [property Name] : String | -| EntityFramework.cs:83:24:83:32 | "tainted" : String | EntityFramework.cs:81:13:84:13 | { ..., ... } : Person [property Name] : String | -| EntityFramework.cs:88:13:88:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Name] : String | EntityFramework.cs:90:19:90:21 | access to local variable ctx : MyContext [property Persons, element, property Name] : String | -| EntityFramework.cs:88:13:88:23 | [post] access to property Persons : DbSet [element, property Name] : String | EntityFramework.cs:88:13:88:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Name] : String | -| EntityFramework.cs:88:29:88:30 | access to local variable p1 : Person [property Name] : String | EntityFramework.cs:88:13:88:23 | [post] access to property Persons : DbSet [element, property Name] : String | -| EntityFramework.cs:90:19:90:21 | access to local variable ctx : MyContext [property Persons, element, property Name] : String | EntityFramework.cs:204:18:204:28 | access to property Persons : DbSet [element, property Name] : String | -| EntityFramework.cs:103:13:106:13 | { ..., ... } : Person [property Name] : String | EntityFramework.cs:109:27:109:28 | access to local variable p1 : Person [property Name] : String | -| EntityFramework.cs:105:24:105:32 | "tainted" : String | EntityFramework.cs:103:13:106:13 | { ..., ... } : Person [property Name] : String | -| EntityFramework.cs:109:27:109:28 | access to local variable p1 : Person [property Name] : String | EntityFramework.cs:193:35:193:35 | p : Person [property Name] : String | -| EntityFramework.cs:122:13:125:13 | { ..., ... } : Person [property Title] : String | EntityFramework.cs:129:18:129:19 | access to local variable p1 : Person [property Title] : String | -| EntityFramework.cs:124:25:124:33 | "tainted" : String | EntityFramework.cs:122:13:125:13 | { ..., ... } : Person [property Title] : String | -| EntityFramework.cs:129:18:129:19 | access to local variable p1 : Person [property Title] : String | EntityFramework.cs:129:18:129:25 | access to property Title | -| EntityFramework.cs:141:13:148:13 | { ..., ... } : Person [property Addresses, element, property Street] : String | EntityFramework.cs:149:29:149:30 | access to local variable p1 : Person [property Addresses, element, property Street] : String | -| EntityFramework.cs:142:29:147:17 | array creation of type Address[] : null [element, property Street] : String | EntityFramework.cs:141:13:148:13 | { ..., ... } : Person [property Addresses, element, property Street] : String | -| EntityFramework.cs:142:35:147:17 | { ..., ... } : null [element, property Street] : String | EntityFramework.cs:142:29:147:17 | array creation of type Address[] : null [element, property Street] : String | -| EntityFramework.cs:143:21:146:21 | object creation of type Address : Address [property Street] : String | EntityFramework.cs:142:35:147:17 | { ..., ... } : null [element, property Street] : String | -| EntityFramework.cs:143:33:146:21 | { ..., ... } : Address [property Street] : String | EntityFramework.cs:143:21:146:21 | object creation of type Address : Address [property Street] : String | -| EntityFramework.cs:145:34:145:42 | "tainted" : String | EntityFramework.cs:143:33:146:21 | { ..., ... } : Address [property Street] : String | -| EntityFramework.cs:149:13:149:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFramework.cs:150:13:150:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | -| EntityFramework.cs:149:13:149:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFramework.cs:154:13:154:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | -| EntityFramework.cs:149:13:149:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFramework.cs:162:13:162:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | -| EntityFramework.cs:149:13:149:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFramework.cs:166:13:166:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | -| EntityFramework.cs:149:13:149:23 | [post] access to property Persons : DbSet [element, property Addresses, element, property Street] : String | EntityFramework.cs:149:13:149:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | -| EntityFramework.cs:149:29:149:30 | access to local variable p1 : Person [property Addresses, element, property Street] : String | EntityFramework.cs:149:13:149:23 | [post] access to property Persons : DbSet [element, property Addresses, element, property Street] : String | -| EntityFramework.cs:150:13:150:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFramework.cs:212:18:212:30 | access to property Addresses : DbSet
    [element, property Street] : String | -| EntityFramework.cs:150:13:150:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFramework.cs:219:18:219:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | -| EntityFramework.cs:154:13:154:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFramework.cs:212:18:212:30 | access to property Addresses : DbSet
    [element, property Street] : String | -| EntityFramework.cs:154:13:154:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFramework.cs:219:18:219:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | -| EntityFramework.cs:157:13:160:13 | { ..., ... } : Address [property Street] : String | EntityFramework.cs:161:31:161:32 | access to local variable a1 : Address [property Street] : String | -| EntityFramework.cs:159:26:159:34 | "tainted" : String | EntityFramework.cs:157:13:160:13 | { ..., ... } : Address [property Street] : String | -| EntityFramework.cs:161:13:161:15 | [post] access to local variable ctx : MyContext [property Addresses, element, property Street] : String | EntityFramework.cs:162:13:162:15 | access to local variable ctx : MyContext [property Addresses, element, property Street] : String | -| EntityFramework.cs:161:13:161:15 | [post] access to local variable ctx : MyContext [property Addresses, element, property Street] : String | EntityFramework.cs:166:13:166:15 | access to local variable ctx : MyContext [property Addresses, element, property Street] : String | -| EntityFramework.cs:161:13:161:25 | [post] access to property Addresses : DbSet [element, property Street] : String | EntityFramework.cs:161:13:161:15 | [post] access to local variable ctx : MyContext [property Addresses, element, property Street] : String | -| EntityFramework.cs:161:31:161:32 | access to local variable a1 : Address [property Street] : String | EntityFramework.cs:161:13:161:25 | [post] access to property Addresses : DbSet [element, property Street] : String | -| EntityFramework.cs:162:13:162:15 | access to local variable ctx : MyContext [property Addresses, element, property Street] : String | EntityFramework.cs:212:18:212:30 | access to property Addresses : DbSet
    [element, property Street] : String | -| EntityFramework.cs:162:13:162:15 | access to local variable ctx : MyContext [property Addresses, element, property Street] : String | EntityFramework.cs:219:18:219:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | -| EntityFramework.cs:162:13:162:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFramework.cs:212:18:212:30 | access to property Addresses : DbSet
    [element, property Street] : String | -| EntityFramework.cs:162:13:162:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFramework.cs:219:18:219:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | -| EntityFramework.cs:166:13:166:15 | access to local variable ctx : MyContext [property Addresses, element, property Street] : String | EntityFramework.cs:212:18:212:30 | access to property Addresses : DbSet
    [element, property Street] : String | -| EntityFramework.cs:166:13:166:15 | access to local variable ctx : MyContext [property Addresses, element, property Street] : String | EntityFramework.cs:219:18:219:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | -| EntityFramework.cs:166:13:166:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFramework.cs:212:18:212:30 | access to property Addresses : DbSet
    [element, property Street] : String | -| EntityFramework.cs:166:13:166:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFramework.cs:219:18:219:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | -| EntityFramework.cs:173:13:176:13 | { ..., ... } : Person [property Name] : String | EntityFramework.cs:182:71:182:72 | access to local variable p1 : Person [property Name] : String | -| EntityFramework.cs:175:24:175:32 | "tainted" : String | EntityFramework.cs:173:13:176:13 | { ..., ... } : Person [property Name] : String | -| EntityFramework.cs:178:13:181:13 | { ..., ... } : Address [property Street] : String | EntityFramework.cs:182:85:182:86 | access to local variable a1 : Address [property Street] : String | -| EntityFramework.cs:180:26:180:34 | "tainted" : String | EntityFramework.cs:178:13:181:13 | { ..., ... } : Address [property Street] : String | -| EntityFramework.cs:182:60:182:88 | { ..., ... } : PersonAddressMap [property Address, property Street] : String | EntityFramework.cs:183:37:183:53 | access to local variable personAddressMap1 : PersonAddressMap [property Address, property Street] : String | -| EntityFramework.cs:182:60:182:88 | { ..., ... } : PersonAddressMap [property Person, property Name] : String | EntityFramework.cs:183:37:183:53 | access to local variable personAddressMap1 : PersonAddressMap [property Person, property Name] : String | -| EntityFramework.cs:182:71:182:72 | access to local variable p1 : Person [property Name] : String | EntityFramework.cs:182:60:182:88 | { ..., ... } : PersonAddressMap [property Person, property Name] : String | -| EntityFramework.cs:182:85:182:86 | access to local variable a1 : Address [property Street] : String | EntityFramework.cs:182:60:182:88 | { ..., ... } : PersonAddressMap [property Address, property Street] : String | -| EntityFramework.cs:183:13:183:15 | [post] access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | EntityFramework.cs:184:13:184:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | -| EntityFramework.cs:183:13:183:15 | [post] access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | EntityFramework.cs:190:13:190:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | -| EntityFramework.cs:183:13:183:15 | [post] access to local variable ctx : MyContext [property PersonAddresses, element, property Person, property Name] : String | EntityFramework.cs:184:13:184:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Person, property Name] : String | -| EntityFramework.cs:183:13:183:15 | [post] access to local variable ctx : MyContext [property PersonAddresses, element, property Person, property Name] : String | EntityFramework.cs:190:13:190:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Person, property Name] : String | -| EntityFramework.cs:183:13:183:31 | [post] access to property PersonAddresses : DbSet [element, property Address, property Street] : String | EntityFramework.cs:183:13:183:15 | [post] access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | -| EntityFramework.cs:183:13:183:31 | [post] access to property PersonAddresses : DbSet [element, property Person, property Name] : String | EntityFramework.cs:183:13:183:15 | [post] access to local variable ctx : MyContext [property PersonAddresses, element, property Person, property Name] : String | -| EntityFramework.cs:183:37:183:53 | access to local variable personAddressMap1 : PersonAddressMap [property Address, property Street] : String | EntityFramework.cs:183:13:183:31 | [post] access to property PersonAddresses : DbSet [element, property Address, property Street] : String | -| EntityFramework.cs:183:37:183:53 | access to local variable personAddressMap1 : PersonAddressMap [property Person, property Name] : String | EntityFramework.cs:183:13:183:31 | [post] access to property PersonAddresses : DbSet [element, property Person, property Name] : String | -| EntityFramework.cs:184:13:184:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | EntityFramework.cs:212:18:212:30 | access to property Addresses : DbSet
    [element, property Street] : String | -| EntityFramework.cs:184:13:184:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | EntityFramework.cs:219:18:219:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | -| EntityFramework.cs:184:13:184:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Person, property Name] : String | EntityFramework.cs:204:18:204:28 | access to property Persons : DbSet [element, property Name] : String | -| EntityFramework.cs:190:13:190:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | EntityFramework.cs:212:18:212:30 | access to property Addresses : DbSet
    [element, property Street] : String | -| EntityFramework.cs:190:13:190:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | EntityFramework.cs:219:18:219:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | -| EntityFramework.cs:190:13:190:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Person, property Name] : String | EntityFramework.cs:204:18:204:28 | access to property Persons : DbSet [element, property Name] : String | -| EntityFramework.cs:193:35:193:35 | p : Person [property Name] : String | EntityFramework.cs:196:29:196:29 | access to parameter p : Person [property Name] : String | -| EntityFramework.cs:196:13:196:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Name] : String | EntityFramework.cs:197:13:197:15 | access to local variable ctx : MyContext [property Persons, element, property Name] : String | -| EntityFramework.cs:196:13:196:23 | [post] access to property Persons : DbSet [element, property Name] : String | EntityFramework.cs:196:13:196:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Name] : String | -| EntityFramework.cs:196:29:196:29 | access to parameter p : Person [property Name] : String | EntityFramework.cs:196:13:196:23 | [post] access to property Persons : DbSet [element, property Name] : String | -| EntityFramework.cs:197:13:197:15 | access to local variable ctx : MyContext [property Persons, element, property Name] : String | EntityFramework.cs:204:18:204:28 | access to property Persons : DbSet [element, property Name] : String | -| EntityFramework.cs:204:18:204:28 | access to property Persons : DbSet [element, property Name] : String | EntityFramework.cs:204:18:204:36 | call to method First : Person [property Name] : String | -| EntityFramework.cs:204:18:204:36 | call to method First : Person [property Name] : String | EntityFramework.cs:204:18:204:41 | access to property Name | -| EntityFramework.cs:212:18:212:30 | access to property Addresses : DbSet
    [element, property Street] : String | EntityFramework.cs:212:18:212:38 | call to method First
    : Address [property Street] : String | -| EntityFramework.cs:212:18:212:38 | call to method First
    : Address [property Street] : String | EntityFramework.cs:212:18:212:45 | access to property Street | -| EntityFramework.cs:219:18:219:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | EntityFramework.cs:219:18:219:36 | call to method First : Person [property Addresses, element, property Street] : String | -| EntityFramework.cs:219:18:219:36 | call to method First : Person [property Addresses, element, property Street] : String | EntityFramework.cs:219:18:219:46 | access to property Addresses : ICollection
    [element, property Street] : String | -| EntityFramework.cs:219:18:219:46 | access to property Addresses : ICollection
    [element, property Street] : String | EntityFramework.cs:219:18:219:54 | call to method First
    : Address [property Street] : String | -| EntityFramework.cs:219:18:219:54 | call to method First
    : Address [property Street] : String | EntityFramework.cs:219:18:219:61 | access to property Street | -| EntityFrameworkCore.cs:82:31:82:39 | "tainted" : String | EntityFrameworkCore.cs:83:18:83:28 | access to local variable taintSource | -| EntityFrameworkCore.cs:82:31:82:39 | "tainted" : String | EntityFrameworkCore.cs:84:35:84:45 | access to local variable taintSource : String | -| EntityFrameworkCore.cs:82:31:82:39 | "tainted" : String | EntityFrameworkCore.cs:85:18:85:42 | (...) ... | -| EntityFrameworkCore.cs:82:31:82:39 | "tainted" : String | EntityFrameworkCore.cs:85:32:85:42 | access to local variable taintSource : String | -| EntityFrameworkCore.cs:84:18:84:46 | object creation of type RawSqlString : RawSqlString | EntityFrameworkCore.cs:84:18:84:46 | (...) ... | -| EntityFrameworkCore.cs:84:35:84:45 | access to local variable taintSource : String | EntityFrameworkCore.cs:84:18:84:46 | object creation of type RawSqlString : RawSqlString | -| EntityFrameworkCore.cs:85:18:85:42 | call to operator implicit conversion : RawSqlString | EntityFrameworkCore.cs:85:18:85:42 | (...) ... | -| EntityFrameworkCore.cs:85:32:85:42 | access to local variable taintSource : String | EntityFrameworkCore.cs:85:18:85:42 | call to operator implicit conversion : RawSqlString | -| EntityFrameworkCore.cs:92:13:95:13 | { ..., ... } : Person [property Name] : String | EntityFrameworkCore.cs:99:29:99:30 | access to local variable p1 : Person [property Name] : String | -| EntityFrameworkCore.cs:94:24:94:32 | "tainted" : String | EntityFrameworkCore.cs:92:13:95:13 | { ..., ... } : Person [property Name] : String | -| EntityFrameworkCore.cs:99:13:99:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Name] : String | EntityFrameworkCore.cs:101:13:101:15 | access to local variable ctx : MyContext [property Persons, element, property Name] : String | -| EntityFrameworkCore.cs:99:13:99:23 | [post] access to property Persons : DbSet [element, property Name] : String | EntityFrameworkCore.cs:99:13:99:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Name] : String | -| EntityFrameworkCore.cs:99:29:99:30 | access to local variable p1 : Person [property Name] : String | EntityFrameworkCore.cs:99:13:99:23 | [post] access to property Persons : DbSet [element, property Name] : String | -| EntityFrameworkCore.cs:101:13:101:15 | access to local variable ctx : MyContext [property Persons, element, property Name] : String | EntityFrameworkCore.cs:237:18:237:28 | access to property Persons : DbSet [element, property Name] : String | -| EntityFrameworkCore.cs:114:13:117:13 | { ..., ... } : Person [property Name] : String | EntityFrameworkCore.cs:121:29:121:30 | access to local variable p1 : Person [property Name] : String | -| EntityFrameworkCore.cs:116:24:116:32 | "tainted" : String | EntityFrameworkCore.cs:114:13:117:13 | { ..., ... } : Person [property Name] : String | -| EntityFrameworkCore.cs:121:13:121:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Name] : String | EntityFrameworkCore.cs:123:19:123:21 | access to local variable ctx : MyContext [property Persons, element, property Name] : String | -| EntityFrameworkCore.cs:121:13:121:23 | [post] access to property Persons : DbSet [element, property Name] : String | EntityFrameworkCore.cs:121:13:121:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Name] : String | -| EntityFrameworkCore.cs:121:29:121:30 | access to local variable p1 : Person [property Name] : String | EntityFrameworkCore.cs:121:13:121:23 | [post] access to property Persons : DbSet [element, property Name] : String | -| EntityFrameworkCore.cs:123:19:123:21 | access to local variable ctx : MyContext [property Persons, element, property Name] : String | EntityFrameworkCore.cs:237:18:237:28 | access to property Persons : DbSet [element, property Name] : String | -| EntityFrameworkCore.cs:136:13:139:13 | { ..., ... } : Person [property Name] : String | EntityFrameworkCore.cs:142:27:142:28 | access to local variable p1 : Person [property Name] : String | -| EntityFrameworkCore.cs:138:24:138:32 | "tainted" : String | EntityFrameworkCore.cs:136:13:139:13 | { ..., ... } : Person [property Name] : String | -| EntityFrameworkCore.cs:142:27:142:28 | access to local variable p1 : Person [property Name] : String | EntityFrameworkCore.cs:226:35:226:35 | p : Person [property Name] : String | -| EntityFrameworkCore.cs:155:13:158:13 | { ..., ... } : Person [property Title] : String | EntityFrameworkCore.cs:162:18:162:19 | access to local variable p1 : Person [property Title] : String | -| EntityFrameworkCore.cs:157:25:157:33 | "tainted" : String | EntityFrameworkCore.cs:155:13:158:13 | { ..., ... } : Person [property Title] : String | -| EntityFrameworkCore.cs:162:18:162:19 | access to local variable p1 : Person [property Title] : String | EntityFrameworkCore.cs:162:18:162:25 | access to property Title | -| EntityFrameworkCore.cs:174:13:181:13 | { ..., ... } : Person [property Addresses, element, property Street] : String | EntityFrameworkCore.cs:182:29:182:30 | access to local variable p1 : Person [property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:175:29:180:17 | array creation of type Address[] : null [element, property Street] : String | EntityFrameworkCore.cs:174:13:181:13 | { ..., ... } : Person [property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:175:35:180:17 | { ..., ... } : null [element, property Street] : String | EntityFrameworkCore.cs:175:29:180:17 | array creation of type Address[] : null [element, property Street] : String | -| EntityFrameworkCore.cs:176:21:179:21 | object creation of type Address : Address [property Street] : String | EntityFrameworkCore.cs:175:35:180:17 | { ..., ... } : null [element, property Street] : String | -| EntityFrameworkCore.cs:176:33:179:21 | { ..., ... } : Address [property Street] : String | EntityFrameworkCore.cs:176:21:179:21 | object creation of type Address : Address [property Street] : String | -| EntityFrameworkCore.cs:178:34:178:42 | "tainted" : String | EntityFrameworkCore.cs:176:33:179:21 | { ..., ... } : Address [property Street] : String | -| EntityFrameworkCore.cs:182:13:182:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:183:13:183:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:182:13:182:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:187:13:187:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:182:13:182:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:195:13:195:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:182:13:182:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:199:13:199:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:182:13:182:23 | [post] access to property Persons : DbSet [element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:182:13:182:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:182:29:182:30 | access to local variable p1 : Person [property Addresses, element, property Street] : String | EntityFrameworkCore.cs:182:13:182:23 | [post] access to property Persons : DbSet [element, property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:183:13:183:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:245:18:245:30 | access to property Addresses : DbSet
    [element, property Street] : String | -| EntityFrameworkCore.cs:183:13:183:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:252:18:252:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:187:13:187:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:245:18:245:30 | access to property Addresses : DbSet
    [element, property Street] : String | -| EntityFrameworkCore.cs:187:13:187:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:252:18:252:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:190:13:193:13 | { ..., ... } : Address [property Street] : String | EntityFrameworkCore.cs:194:31:194:32 | access to local variable a1 : Address [property Street] : String | -| EntityFrameworkCore.cs:192:26:192:34 | "tainted" : String | EntityFrameworkCore.cs:190:13:193:13 | { ..., ... } : Address [property Street] : String | -| EntityFrameworkCore.cs:194:13:194:15 | [post] access to local variable ctx : MyContext [property Addresses, element, property Street] : String | EntityFrameworkCore.cs:195:13:195:15 | access to local variable ctx : MyContext [property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:194:13:194:15 | [post] access to local variable ctx : MyContext [property Addresses, element, property Street] : String | EntityFrameworkCore.cs:199:13:199:15 | access to local variable ctx : MyContext [property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:194:13:194:25 | [post] access to property Addresses : DbSet [element, property Street] : String | EntityFrameworkCore.cs:194:13:194:15 | [post] access to local variable ctx : MyContext [property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:194:31:194:32 | access to local variable a1 : Address [property Street] : String | EntityFrameworkCore.cs:194:13:194:25 | [post] access to property Addresses : DbSet [element, property Street] : String | -| EntityFrameworkCore.cs:195:13:195:15 | access to local variable ctx : MyContext [property Addresses, element, property Street] : String | EntityFrameworkCore.cs:245:18:245:30 | access to property Addresses : DbSet
    [element, property Street] : String | -| EntityFrameworkCore.cs:195:13:195:15 | access to local variable ctx : MyContext [property Addresses, element, property Street] : String | EntityFrameworkCore.cs:252:18:252:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:195:13:195:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:245:18:245:30 | access to property Addresses : DbSet
    [element, property Street] : String | -| EntityFrameworkCore.cs:195:13:195:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:252:18:252:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:199:13:199:15 | access to local variable ctx : MyContext [property Addresses, element, property Street] : String | EntityFrameworkCore.cs:245:18:245:30 | access to property Addresses : DbSet
    [element, property Street] : String | -| EntityFrameworkCore.cs:199:13:199:15 | access to local variable ctx : MyContext [property Addresses, element, property Street] : String | EntityFrameworkCore.cs:252:18:252:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:199:13:199:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:245:18:245:30 | access to property Addresses : DbSet
    [element, property Street] : String | -| EntityFrameworkCore.cs:199:13:199:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:252:18:252:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:206:13:209:13 | { ..., ... } : Person [property Name] : String | EntityFrameworkCore.cs:215:71:215:72 | access to local variable p1 : Person [property Name] : String | -| EntityFrameworkCore.cs:208:24:208:32 | "tainted" : String | EntityFrameworkCore.cs:206:13:209:13 | { ..., ... } : Person [property Name] : String | -| EntityFrameworkCore.cs:211:13:214:13 | { ..., ... } : Address [property Street] : String | EntityFrameworkCore.cs:215:85:215:86 | access to local variable a1 : Address [property Street] : String | -| EntityFrameworkCore.cs:213:26:213:34 | "tainted" : String | EntityFrameworkCore.cs:211:13:214:13 | { ..., ... } : Address [property Street] : String | -| EntityFrameworkCore.cs:215:60:215:88 | { ..., ... } : PersonAddressMap [property Address, property Street] : String | EntityFrameworkCore.cs:216:37:216:53 | access to local variable personAddressMap1 : PersonAddressMap [property Address, property Street] : String | -| EntityFrameworkCore.cs:215:60:215:88 | { ..., ... } : PersonAddressMap [property Person, property Name] : String | EntityFrameworkCore.cs:216:37:216:53 | access to local variable personAddressMap1 : PersonAddressMap [property Person, property Name] : String | -| EntityFrameworkCore.cs:215:71:215:72 | access to local variable p1 : Person [property Name] : String | EntityFrameworkCore.cs:215:60:215:88 | { ..., ... } : PersonAddressMap [property Person, property Name] : String | -| EntityFrameworkCore.cs:215:85:215:86 | access to local variable a1 : Address [property Street] : String | EntityFrameworkCore.cs:215:60:215:88 | { ..., ... } : PersonAddressMap [property Address, property Street] : String | -| EntityFrameworkCore.cs:216:13:216:15 | [post] access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | EntityFrameworkCore.cs:217:13:217:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | -| EntityFrameworkCore.cs:216:13:216:15 | [post] access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | EntityFrameworkCore.cs:223:13:223:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | -| EntityFrameworkCore.cs:216:13:216:15 | [post] access to local variable ctx : MyContext [property PersonAddresses, element, property Person, property Name] : String | EntityFrameworkCore.cs:217:13:217:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Person, property Name] : String | -| EntityFrameworkCore.cs:216:13:216:15 | [post] access to local variable ctx : MyContext [property PersonAddresses, element, property Person, property Name] : String | EntityFrameworkCore.cs:223:13:223:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Person, property Name] : String | -| EntityFrameworkCore.cs:216:13:216:31 | [post] access to property PersonAddresses : DbSet [element, property Address, property Street] : String | EntityFrameworkCore.cs:216:13:216:15 | [post] access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | -| EntityFrameworkCore.cs:216:13:216:31 | [post] access to property PersonAddresses : DbSet [element, property Person, property Name] : String | EntityFrameworkCore.cs:216:13:216:15 | [post] access to local variable ctx : MyContext [property PersonAddresses, element, property Person, property Name] : String | -| EntityFrameworkCore.cs:216:37:216:53 | access to local variable personAddressMap1 : PersonAddressMap [property Address, property Street] : String | EntityFrameworkCore.cs:216:13:216:31 | [post] access to property PersonAddresses : DbSet [element, property Address, property Street] : String | -| EntityFrameworkCore.cs:216:37:216:53 | access to local variable personAddressMap1 : PersonAddressMap [property Person, property Name] : String | EntityFrameworkCore.cs:216:13:216:31 | [post] access to property PersonAddresses : DbSet [element, property Person, property Name] : String | -| EntityFrameworkCore.cs:217:13:217:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | EntityFrameworkCore.cs:245:18:245:30 | access to property Addresses : DbSet
    [element, property Street] : String | -| EntityFrameworkCore.cs:217:13:217:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | EntityFrameworkCore.cs:252:18:252:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:217:13:217:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Person, property Name] : String | EntityFrameworkCore.cs:237:18:237:28 | access to property Persons : DbSet [element, property Name] : String | -| EntityFrameworkCore.cs:223:13:223:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | EntityFrameworkCore.cs:245:18:245:30 | access to property Addresses : DbSet
    [element, property Street] : String | -| EntityFrameworkCore.cs:223:13:223:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | EntityFrameworkCore.cs:252:18:252:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:223:13:223:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Person, property Name] : String | EntityFrameworkCore.cs:237:18:237:28 | access to property Persons : DbSet [element, property Name] : String | -| EntityFrameworkCore.cs:226:35:226:35 | p : Person [property Name] : String | EntityFrameworkCore.cs:229:29:229:29 | access to parameter p : Person [property Name] : String | -| EntityFrameworkCore.cs:229:13:229:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Name] : String | EntityFrameworkCore.cs:230:13:230:15 | access to local variable ctx : MyContext [property Persons, element, property Name] : String | -| EntityFrameworkCore.cs:229:13:229:23 | [post] access to property Persons : DbSet [element, property Name] : String | EntityFrameworkCore.cs:229:13:229:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Name] : String | -| EntityFrameworkCore.cs:229:29:229:29 | access to parameter p : Person [property Name] : String | EntityFrameworkCore.cs:229:13:229:23 | [post] access to property Persons : DbSet [element, property Name] : String | -| EntityFrameworkCore.cs:230:13:230:15 | access to local variable ctx : MyContext [property Persons, element, property Name] : String | EntityFrameworkCore.cs:237:18:237:28 | access to property Persons : DbSet [element, property Name] : String | -| EntityFrameworkCore.cs:237:18:237:28 | access to property Persons : DbSet [element, property Name] : String | EntityFrameworkCore.cs:237:18:237:36 | call to method First : Person [property Name] : String | -| EntityFrameworkCore.cs:237:18:237:36 | call to method First : Person [property Name] : String | EntityFrameworkCore.cs:237:18:237:41 | access to property Name | -| EntityFrameworkCore.cs:245:18:245:30 | access to property Addresses : DbSet
    [element, property Street] : String | EntityFrameworkCore.cs:245:18:245:38 | call to method First
    : Address [property Street] : String | -| EntityFrameworkCore.cs:245:18:245:38 | call to method First
    : Address [property Street] : String | EntityFrameworkCore.cs:245:18:245:45 | access to property Street | -| EntityFrameworkCore.cs:252:18:252:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:252:18:252:36 | call to method First : Person [property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:252:18:252:36 | call to method First : Person [property Addresses, element, property Street] : String | EntityFrameworkCore.cs:252:18:252:46 | access to property Addresses : ICollection
    [element, property Street] : String | -| EntityFrameworkCore.cs:252:18:252:46 | access to property Addresses : ICollection
    [element, property Street] : String | EntityFrameworkCore.cs:252:18:252:54 | call to method First
    : Address [property Street] : String | -| EntityFrameworkCore.cs:252:18:252:54 | call to method First
    : Address [property Street] : String | EntityFrameworkCore.cs:252:18:252:61 | access to property Street | +| EntityFramework.cs:59:13:62:13 | { ..., ... } : Person [property Name] : String | EntityFramework.cs:66:29:66:30 | access to local variable p1 : Person [property Name] : String | provenance | | +| EntityFramework.cs:61:24:61:32 | "tainted" : String | EntityFramework.cs:59:13:62:13 | { ..., ... } : Person [property Name] : String | provenance | | +| EntityFramework.cs:66:13:66:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Name] : String | EntityFramework.cs:68:13:68:15 | access to local variable ctx : MyContext [property Persons, element, property Name] : String | provenance | | +| EntityFramework.cs:66:13:66:23 | [post] access to property Persons : DbSet [element, property Name] : String | EntityFramework.cs:66:13:66:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Name] : String | provenance | | +| EntityFramework.cs:66:29:66:30 | access to local variable p1 : Person [property Name] : String | EntityFramework.cs:66:13:66:23 | [post] access to property Persons : DbSet [element, property Name] : String | provenance | | +| EntityFramework.cs:68:13:68:15 | access to local variable ctx : MyContext [property Persons, element, property Name] : String | EntityFramework.cs:204:18:204:28 | access to property Persons : DbSet [element, property Name] : String | provenance | | +| EntityFramework.cs:81:13:84:13 | { ..., ... } : Person [property Name] : String | EntityFramework.cs:88:29:88:30 | access to local variable p1 : Person [property Name] : String | provenance | | +| EntityFramework.cs:83:24:83:32 | "tainted" : String | EntityFramework.cs:81:13:84:13 | { ..., ... } : Person [property Name] : String | provenance | | +| EntityFramework.cs:88:13:88:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Name] : String | EntityFramework.cs:90:19:90:21 | access to local variable ctx : MyContext [property Persons, element, property Name] : String | provenance | | +| EntityFramework.cs:88:13:88:23 | [post] access to property Persons : DbSet [element, property Name] : String | EntityFramework.cs:88:13:88:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Name] : String | provenance | | +| EntityFramework.cs:88:29:88:30 | access to local variable p1 : Person [property Name] : String | EntityFramework.cs:88:13:88:23 | [post] access to property Persons : DbSet [element, property Name] : String | provenance | | +| EntityFramework.cs:90:19:90:21 | access to local variable ctx : MyContext [property Persons, element, property Name] : String | EntityFramework.cs:204:18:204:28 | access to property Persons : DbSet [element, property Name] : String | provenance | | +| EntityFramework.cs:103:13:106:13 | { ..., ... } : Person [property Name] : String | EntityFramework.cs:109:27:109:28 | access to local variable p1 : Person [property Name] : String | provenance | | +| EntityFramework.cs:105:24:105:32 | "tainted" : String | EntityFramework.cs:103:13:106:13 | { ..., ... } : Person [property Name] : String | provenance | | +| EntityFramework.cs:109:27:109:28 | access to local variable p1 : Person [property Name] : String | EntityFramework.cs:193:35:193:35 | p : Person [property Name] : String | provenance | | +| EntityFramework.cs:122:13:125:13 | { ..., ... } : Person [property Title] : String | EntityFramework.cs:129:18:129:19 | access to local variable p1 : Person [property Title] : String | provenance | | +| EntityFramework.cs:124:25:124:33 | "tainted" : String | EntityFramework.cs:122:13:125:13 | { ..., ... } : Person [property Title] : String | provenance | | +| EntityFramework.cs:129:18:129:19 | access to local variable p1 : Person [property Title] : String | EntityFramework.cs:129:18:129:25 | access to property Title | provenance | | +| EntityFramework.cs:141:13:148:13 | { ..., ... } : Person [property Addresses, element, property Street] : String | EntityFramework.cs:149:29:149:30 | access to local variable p1 : Person [property Addresses, element, property Street] : String | provenance | | +| EntityFramework.cs:142:29:147:17 | array creation of type Address[] : null [element, property Street] : String | EntityFramework.cs:141:13:148:13 | { ..., ... } : Person [property Addresses, element, property Street] : String | provenance | | +| EntityFramework.cs:142:35:147:17 | { ..., ... } : null [element, property Street] : String | EntityFramework.cs:142:29:147:17 | array creation of type Address[] : null [element, property Street] : String | provenance | | +| EntityFramework.cs:143:21:146:21 | object creation of type Address : Address [property Street] : String | EntityFramework.cs:142:35:147:17 | { ..., ... } : null [element, property Street] : String | provenance | | +| EntityFramework.cs:143:33:146:21 | { ..., ... } : Address [property Street] : String | EntityFramework.cs:143:21:146:21 | object creation of type Address : Address [property Street] : String | provenance | | +| EntityFramework.cs:145:34:145:42 | "tainted" : String | EntityFramework.cs:143:33:146:21 | { ..., ... } : Address [property Street] : String | provenance | | +| EntityFramework.cs:149:13:149:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFramework.cs:150:13:150:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | provenance | | +| EntityFramework.cs:149:13:149:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFramework.cs:154:13:154:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | provenance | | +| EntityFramework.cs:149:13:149:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFramework.cs:162:13:162:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | provenance | | +| EntityFramework.cs:149:13:149:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFramework.cs:166:13:166:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | provenance | | +| EntityFramework.cs:149:13:149:23 | [post] access to property Persons : DbSet [element, property Addresses, element, property Street] : String | EntityFramework.cs:149:13:149:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | provenance | | +| EntityFramework.cs:149:29:149:30 | access to local variable p1 : Person [property Addresses, element, property Street] : String | EntityFramework.cs:149:13:149:23 | [post] access to property Persons : DbSet [element, property Addresses, element, property Street] : String | provenance | | +| EntityFramework.cs:150:13:150:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFramework.cs:212:18:212:30 | access to property Addresses : DbSet
    [element, property Street] : String | provenance | | +| EntityFramework.cs:150:13:150:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFramework.cs:219:18:219:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | provenance | | +| EntityFramework.cs:154:13:154:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFramework.cs:212:18:212:30 | access to property Addresses : DbSet
    [element, property Street] : String | provenance | | +| EntityFramework.cs:154:13:154:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFramework.cs:219:18:219:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | provenance | | +| EntityFramework.cs:157:13:160:13 | { ..., ... } : Address [property Street] : String | EntityFramework.cs:161:31:161:32 | access to local variable a1 : Address [property Street] : String | provenance | | +| EntityFramework.cs:159:26:159:34 | "tainted" : String | EntityFramework.cs:157:13:160:13 | { ..., ... } : Address [property Street] : String | provenance | | +| EntityFramework.cs:161:13:161:15 | [post] access to local variable ctx : MyContext [property Addresses, element, property Street] : String | EntityFramework.cs:162:13:162:15 | access to local variable ctx : MyContext [property Addresses, element, property Street] : String | provenance | | +| EntityFramework.cs:161:13:161:15 | [post] access to local variable ctx : MyContext [property Addresses, element, property Street] : String | EntityFramework.cs:166:13:166:15 | access to local variable ctx : MyContext [property Addresses, element, property Street] : String | provenance | | +| EntityFramework.cs:161:13:161:25 | [post] access to property Addresses : DbSet [element, property Street] : String | EntityFramework.cs:161:13:161:15 | [post] access to local variable ctx : MyContext [property Addresses, element, property Street] : String | provenance | | +| EntityFramework.cs:161:31:161:32 | access to local variable a1 : Address [property Street] : String | EntityFramework.cs:161:13:161:25 | [post] access to property Addresses : DbSet [element, property Street] : String | provenance | | +| EntityFramework.cs:162:13:162:15 | access to local variable ctx : MyContext [property Addresses, element, property Street] : String | EntityFramework.cs:212:18:212:30 | access to property Addresses : DbSet
    [element, property Street] : String | provenance | | +| EntityFramework.cs:162:13:162:15 | access to local variable ctx : MyContext [property Addresses, element, property Street] : String | EntityFramework.cs:219:18:219:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | provenance | | +| EntityFramework.cs:162:13:162:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFramework.cs:212:18:212:30 | access to property Addresses : DbSet
    [element, property Street] : String | provenance | | +| EntityFramework.cs:162:13:162:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFramework.cs:219:18:219:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | provenance | | +| EntityFramework.cs:166:13:166:15 | access to local variable ctx : MyContext [property Addresses, element, property Street] : String | EntityFramework.cs:212:18:212:30 | access to property Addresses : DbSet
    [element, property Street] : String | provenance | | +| EntityFramework.cs:166:13:166:15 | access to local variable ctx : MyContext [property Addresses, element, property Street] : String | EntityFramework.cs:219:18:219:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | provenance | | +| EntityFramework.cs:166:13:166:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFramework.cs:212:18:212:30 | access to property Addresses : DbSet
    [element, property Street] : String | provenance | | +| EntityFramework.cs:166:13:166:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFramework.cs:219:18:219:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | provenance | | +| EntityFramework.cs:173:13:176:13 | { ..., ... } : Person [property Name] : String | EntityFramework.cs:182:71:182:72 | access to local variable p1 : Person [property Name] : String | provenance | | +| EntityFramework.cs:175:24:175:32 | "tainted" : String | EntityFramework.cs:173:13:176:13 | { ..., ... } : Person [property Name] : String | provenance | | +| EntityFramework.cs:178:13:181:13 | { ..., ... } : Address [property Street] : String | EntityFramework.cs:182:85:182:86 | access to local variable a1 : Address [property Street] : String | provenance | | +| EntityFramework.cs:180:26:180:34 | "tainted" : String | EntityFramework.cs:178:13:181:13 | { ..., ... } : Address [property Street] : String | provenance | | +| EntityFramework.cs:182:60:182:88 | { ..., ... } : PersonAddressMap [property Address, property Street] : String | EntityFramework.cs:183:37:183:53 | access to local variable personAddressMap1 : PersonAddressMap [property Address, property Street] : String | provenance | | +| EntityFramework.cs:182:60:182:88 | { ..., ... } : PersonAddressMap [property Person, property Name] : String | EntityFramework.cs:183:37:183:53 | access to local variable personAddressMap1 : PersonAddressMap [property Person, property Name] : String | provenance | | +| EntityFramework.cs:182:71:182:72 | access to local variable p1 : Person [property Name] : String | EntityFramework.cs:182:60:182:88 | { ..., ... } : PersonAddressMap [property Person, property Name] : String | provenance | | +| EntityFramework.cs:182:85:182:86 | access to local variable a1 : Address [property Street] : String | EntityFramework.cs:182:60:182:88 | { ..., ... } : PersonAddressMap [property Address, property Street] : String | provenance | | +| EntityFramework.cs:183:13:183:15 | [post] access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | EntityFramework.cs:184:13:184:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | provenance | | +| EntityFramework.cs:183:13:183:15 | [post] access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | EntityFramework.cs:190:13:190:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | provenance | | +| EntityFramework.cs:183:13:183:15 | [post] access to local variable ctx : MyContext [property PersonAddresses, element, property Person, property Name] : String | EntityFramework.cs:184:13:184:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Person, property Name] : String | provenance | | +| EntityFramework.cs:183:13:183:15 | [post] access to local variable ctx : MyContext [property PersonAddresses, element, property Person, property Name] : String | EntityFramework.cs:190:13:190:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Person, property Name] : String | provenance | | +| EntityFramework.cs:183:13:183:31 | [post] access to property PersonAddresses : DbSet [element, property Address, property Street] : String | EntityFramework.cs:183:13:183:15 | [post] access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | provenance | | +| EntityFramework.cs:183:13:183:31 | [post] access to property PersonAddresses : DbSet [element, property Person, property Name] : String | EntityFramework.cs:183:13:183:15 | [post] access to local variable ctx : MyContext [property PersonAddresses, element, property Person, property Name] : String | provenance | | +| EntityFramework.cs:183:37:183:53 | access to local variable personAddressMap1 : PersonAddressMap [property Address, property Street] : String | EntityFramework.cs:183:13:183:31 | [post] access to property PersonAddresses : DbSet [element, property Address, property Street] : String | provenance | | +| EntityFramework.cs:183:37:183:53 | access to local variable personAddressMap1 : PersonAddressMap [property Person, property Name] : String | EntityFramework.cs:183:13:183:31 | [post] access to property PersonAddresses : DbSet [element, property Person, property Name] : String | provenance | | +| EntityFramework.cs:184:13:184:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | EntityFramework.cs:212:18:212:30 | access to property Addresses : DbSet
    [element, property Street] : String | provenance | | +| EntityFramework.cs:184:13:184:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | EntityFramework.cs:219:18:219:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | provenance | | +| EntityFramework.cs:184:13:184:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Person, property Name] : String | EntityFramework.cs:204:18:204:28 | access to property Persons : DbSet [element, property Name] : String | provenance | | +| EntityFramework.cs:190:13:190:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | EntityFramework.cs:212:18:212:30 | access to property Addresses : DbSet
    [element, property Street] : String | provenance | | +| EntityFramework.cs:190:13:190:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | EntityFramework.cs:219:18:219:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | provenance | | +| EntityFramework.cs:190:13:190:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Person, property Name] : String | EntityFramework.cs:204:18:204:28 | access to property Persons : DbSet [element, property Name] : String | provenance | | +| EntityFramework.cs:193:35:193:35 | p : Person [property Name] : String | EntityFramework.cs:196:29:196:29 | access to parameter p : Person [property Name] : String | provenance | | +| EntityFramework.cs:196:13:196:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Name] : String | EntityFramework.cs:197:13:197:15 | access to local variable ctx : MyContext [property Persons, element, property Name] : String | provenance | | +| EntityFramework.cs:196:13:196:23 | [post] access to property Persons : DbSet [element, property Name] : String | EntityFramework.cs:196:13:196:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Name] : String | provenance | | +| EntityFramework.cs:196:29:196:29 | access to parameter p : Person [property Name] : String | EntityFramework.cs:196:13:196:23 | [post] access to property Persons : DbSet [element, property Name] : String | provenance | | +| EntityFramework.cs:197:13:197:15 | access to local variable ctx : MyContext [property Persons, element, property Name] : String | EntityFramework.cs:204:18:204:28 | access to property Persons : DbSet [element, property Name] : String | provenance | | +| EntityFramework.cs:204:18:204:28 | access to property Persons : DbSet [element, property Name] : String | EntityFramework.cs:204:18:204:36 | call to method First : Person [property Name] : String | provenance | | +| EntityFramework.cs:204:18:204:36 | call to method First : Person [property Name] : String | EntityFramework.cs:204:18:204:41 | access to property Name | provenance | | +| EntityFramework.cs:212:18:212:30 | access to property Addresses : DbSet
    [element, property Street] : String | EntityFramework.cs:212:18:212:38 | call to method First
    : Address [property Street] : String | provenance | | +| EntityFramework.cs:212:18:212:38 | call to method First
    : Address [property Street] : String | EntityFramework.cs:212:18:212:45 | access to property Street | provenance | | +| EntityFramework.cs:219:18:219:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | EntityFramework.cs:219:18:219:36 | call to method First : Person [property Addresses, element, property Street] : String | provenance | | +| EntityFramework.cs:219:18:219:36 | call to method First : Person [property Addresses, element, property Street] : String | EntityFramework.cs:219:18:219:46 | access to property Addresses : ICollection
    [element, property Street] : String | provenance | | +| EntityFramework.cs:219:18:219:46 | access to property Addresses : ICollection
    [element, property Street] : String | EntityFramework.cs:219:18:219:54 | call to method First
    : Address [property Street] : String | provenance | | +| EntityFramework.cs:219:18:219:54 | call to method First
    : Address [property Street] : String | EntityFramework.cs:219:18:219:61 | access to property Street | provenance | | +| EntityFrameworkCore.cs:82:31:82:39 | "tainted" : String | EntityFrameworkCore.cs:83:18:83:28 | access to local variable taintSource | provenance | | +| EntityFrameworkCore.cs:82:31:82:39 | "tainted" : String | EntityFrameworkCore.cs:84:35:84:45 | access to local variable taintSource : String | provenance | | +| EntityFrameworkCore.cs:82:31:82:39 | "tainted" : String | EntityFrameworkCore.cs:85:18:85:42 | (...) ... | provenance | | +| EntityFrameworkCore.cs:82:31:82:39 | "tainted" : String | EntityFrameworkCore.cs:85:32:85:42 | access to local variable taintSource : String | provenance | | +| EntityFrameworkCore.cs:84:18:84:46 | object creation of type RawSqlString : RawSqlString | EntityFrameworkCore.cs:84:18:84:46 | (...) ... | provenance | | +| EntityFrameworkCore.cs:84:35:84:45 | access to local variable taintSource : String | EntityFrameworkCore.cs:84:18:84:46 | object creation of type RawSqlString : RawSqlString | provenance | | +| EntityFrameworkCore.cs:85:18:85:42 | call to operator implicit conversion : RawSqlString | EntityFrameworkCore.cs:85:18:85:42 | (...) ... | provenance | | +| EntityFrameworkCore.cs:85:32:85:42 | access to local variable taintSource : String | EntityFrameworkCore.cs:85:18:85:42 | call to operator implicit conversion : RawSqlString | provenance | | +| EntityFrameworkCore.cs:92:13:95:13 | { ..., ... } : Person [property Name] : String | EntityFrameworkCore.cs:99:29:99:30 | access to local variable p1 : Person [property Name] : String | provenance | | +| EntityFrameworkCore.cs:94:24:94:32 | "tainted" : String | EntityFrameworkCore.cs:92:13:95:13 | { ..., ... } : Person [property Name] : String | provenance | | +| EntityFrameworkCore.cs:99:13:99:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Name] : String | EntityFrameworkCore.cs:101:13:101:15 | access to local variable ctx : MyContext [property Persons, element, property Name] : String | provenance | | +| EntityFrameworkCore.cs:99:13:99:23 | [post] access to property Persons : DbSet [element, property Name] : String | EntityFrameworkCore.cs:99:13:99:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Name] : String | provenance | | +| EntityFrameworkCore.cs:99:29:99:30 | access to local variable p1 : Person [property Name] : String | EntityFrameworkCore.cs:99:13:99:23 | [post] access to property Persons : DbSet [element, property Name] : String | provenance | | +| EntityFrameworkCore.cs:101:13:101:15 | access to local variable ctx : MyContext [property Persons, element, property Name] : String | EntityFrameworkCore.cs:237:18:237:28 | access to property Persons : DbSet [element, property Name] : String | provenance | | +| EntityFrameworkCore.cs:114:13:117:13 | { ..., ... } : Person [property Name] : String | EntityFrameworkCore.cs:121:29:121:30 | access to local variable p1 : Person [property Name] : String | provenance | | +| EntityFrameworkCore.cs:116:24:116:32 | "tainted" : String | EntityFrameworkCore.cs:114:13:117:13 | { ..., ... } : Person [property Name] : String | provenance | | +| EntityFrameworkCore.cs:121:13:121:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Name] : String | EntityFrameworkCore.cs:123:19:123:21 | access to local variable ctx : MyContext [property Persons, element, property Name] : String | provenance | | +| EntityFrameworkCore.cs:121:13:121:23 | [post] access to property Persons : DbSet [element, property Name] : String | EntityFrameworkCore.cs:121:13:121:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Name] : String | provenance | | +| EntityFrameworkCore.cs:121:29:121:30 | access to local variable p1 : Person [property Name] : String | EntityFrameworkCore.cs:121:13:121:23 | [post] access to property Persons : DbSet [element, property Name] : String | provenance | | +| EntityFrameworkCore.cs:123:19:123:21 | access to local variable ctx : MyContext [property Persons, element, property Name] : String | EntityFrameworkCore.cs:237:18:237:28 | access to property Persons : DbSet [element, property Name] : String | provenance | | +| EntityFrameworkCore.cs:136:13:139:13 | { ..., ... } : Person [property Name] : String | EntityFrameworkCore.cs:142:27:142:28 | access to local variable p1 : Person [property Name] : String | provenance | | +| EntityFrameworkCore.cs:138:24:138:32 | "tainted" : String | EntityFrameworkCore.cs:136:13:139:13 | { ..., ... } : Person [property Name] : String | provenance | | +| EntityFrameworkCore.cs:142:27:142:28 | access to local variable p1 : Person [property Name] : String | EntityFrameworkCore.cs:226:35:226:35 | p : Person [property Name] : String | provenance | | +| EntityFrameworkCore.cs:155:13:158:13 | { ..., ... } : Person [property Title] : String | EntityFrameworkCore.cs:162:18:162:19 | access to local variable p1 : Person [property Title] : String | provenance | | +| EntityFrameworkCore.cs:157:25:157:33 | "tainted" : String | EntityFrameworkCore.cs:155:13:158:13 | { ..., ... } : Person [property Title] : String | provenance | | +| EntityFrameworkCore.cs:162:18:162:19 | access to local variable p1 : Person [property Title] : String | EntityFrameworkCore.cs:162:18:162:25 | access to property Title | provenance | | +| EntityFrameworkCore.cs:174:13:181:13 | { ..., ... } : Person [property Addresses, element, property Street] : String | EntityFrameworkCore.cs:182:29:182:30 | access to local variable p1 : Person [property Addresses, element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:175:29:180:17 | array creation of type Address[] : null [element, property Street] : String | EntityFrameworkCore.cs:174:13:181:13 | { ..., ... } : Person [property Addresses, element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:175:35:180:17 | { ..., ... } : null [element, property Street] : String | EntityFrameworkCore.cs:175:29:180:17 | array creation of type Address[] : null [element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:176:21:179:21 | object creation of type Address : Address [property Street] : String | EntityFrameworkCore.cs:175:35:180:17 | { ..., ... } : null [element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:176:33:179:21 | { ..., ... } : Address [property Street] : String | EntityFrameworkCore.cs:176:21:179:21 | object creation of type Address : Address [property Street] : String | provenance | | +| EntityFrameworkCore.cs:178:34:178:42 | "tainted" : String | EntityFrameworkCore.cs:176:33:179:21 | { ..., ... } : Address [property Street] : String | provenance | | +| EntityFrameworkCore.cs:182:13:182:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:183:13:183:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:182:13:182:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:187:13:187:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:182:13:182:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:195:13:195:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:182:13:182:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:199:13:199:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:182:13:182:23 | [post] access to property Persons : DbSet [element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:182:13:182:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:182:29:182:30 | access to local variable p1 : Person [property Addresses, element, property Street] : String | EntityFrameworkCore.cs:182:13:182:23 | [post] access to property Persons : DbSet [element, property Addresses, element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:183:13:183:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:245:18:245:30 | access to property Addresses : DbSet
    [element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:183:13:183:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:252:18:252:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:187:13:187:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:245:18:245:30 | access to property Addresses : DbSet
    [element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:187:13:187:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:252:18:252:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:190:13:193:13 | { ..., ... } : Address [property Street] : String | EntityFrameworkCore.cs:194:31:194:32 | access to local variable a1 : Address [property Street] : String | provenance | | +| EntityFrameworkCore.cs:192:26:192:34 | "tainted" : String | EntityFrameworkCore.cs:190:13:193:13 | { ..., ... } : Address [property Street] : String | provenance | | +| EntityFrameworkCore.cs:194:13:194:15 | [post] access to local variable ctx : MyContext [property Addresses, element, property Street] : String | EntityFrameworkCore.cs:195:13:195:15 | access to local variable ctx : MyContext [property Addresses, element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:194:13:194:15 | [post] access to local variable ctx : MyContext [property Addresses, element, property Street] : String | EntityFrameworkCore.cs:199:13:199:15 | access to local variable ctx : MyContext [property Addresses, element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:194:13:194:25 | [post] access to property Addresses : DbSet [element, property Street] : String | EntityFrameworkCore.cs:194:13:194:15 | [post] access to local variable ctx : MyContext [property Addresses, element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:194:31:194:32 | access to local variable a1 : Address [property Street] : String | EntityFrameworkCore.cs:194:13:194:25 | [post] access to property Addresses : DbSet [element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:195:13:195:15 | access to local variable ctx : MyContext [property Addresses, element, property Street] : String | EntityFrameworkCore.cs:245:18:245:30 | access to property Addresses : DbSet
    [element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:195:13:195:15 | access to local variable ctx : MyContext [property Addresses, element, property Street] : String | EntityFrameworkCore.cs:252:18:252:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:195:13:195:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:245:18:245:30 | access to property Addresses : DbSet
    [element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:195:13:195:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:252:18:252:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:199:13:199:15 | access to local variable ctx : MyContext [property Addresses, element, property Street] : String | EntityFrameworkCore.cs:245:18:245:30 | access to property Addresses : DbSet
    [element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:199:13:199:15 | access to local variable ctx : MyContext [property Addresses, element, property Street] : String | EntityFrameworkCore.cs:252:18:252:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:199:13:199:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:245:18:245:30 | access to property Addresses : DbSet
    [element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:199:13:199:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:252:18:252:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:206:13:209:13 | { ..., ... } : Person [property Name] : String | EntityFrameworkCore.cs:215:71:215:72 | access to local variable p1 : Person [property Name] : String | provenance | | +| EntityFrameworkCore.cs:208:24:208:32 | "tainted" : String | EntityFrameworkCore.cs:206:13:209:13 | { ..., ... } : Person [property Name] : String | provenance | | +| EntityFrameworkCore.cs:211:13:214:13 | { ..., ... } : Address [property Street] : String | EntityFrameworkCore.cs:215:85:215:86 | access to local variable a1 : Address [property Street] : String | provenance | | +| EntityFrameworkCore.cs:213:26:213:34 | "tainted" : String | EntityFrameworkCore.cs:211:13:214:13 | { ..., ... } : Address [property Street] : String | provenance | | +| EntityFrameworkCore.cs:215:60:215:88 | { ..., ... } : PersonAddressMap [property Address, property Street] : String | EntityFrameworkCore.cs:216:37:216:53 | access to local variable personAddressMap1 : PersonAddressMap [property Address, property Street] : String | provenance | | +| EntityFrameworkCore.cs:215:60:215:88 | { ..., ... } : PersonAddressMap [property Person, property Name] : String | EntityFrameworkCore.cs:216:37:216:53 | access to local variable personAddressMap1 : PersonAddressMap [property Person, property Name] : String | provenance | | +| EntityFrameworkCore.cs:215:71:215:72 | access to local variable p1 : Person [property Name] : String | EntityFrameworkCore.cs:215:60:215:88 | { ..., ... } : PersonAddressMap [property Person, property Name] : String | provenance | | +| EntityFrameworkCore.cs:215:85:215:86 | access to local variable a1 : Address [property Street] : String | EntityFrameworkCore.cs:215:60:215:88 | { ..., ... } : PersonAddressMap [property Address, property Street] : String | provenance | | +| EntityFrameworkCore.cs:216:13:216:15 | [post] access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | EntityFrameworkCore.cs:217:13:217:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | provenance | | +| EntityFrameworkCore.cs:216:13:216:15 | [post] access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | EntityFrameworkCore.cs:223:13:223:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | provenance | | +| EntityFrameworkCore.cs:216:13:216:15 | [post] access to local variable ctx : MyContext [property PersonAddresses, element, property Person, property Name] : String | EntityFrameworkCore.cs:217:13:217:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Person, property Name] : String | provenance | | +| EntityFrameworkCore.cs:216:13:216:15 | [post] access to local variable ctx : MyContext [property PersonAddresses, element, property Person, property Name] : String | EntityFrameworkCore.cs:223:13:223:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Person, property Name] : String | provenance | | +| EntityFrameworkCore.cs:216:13:216:31 | [post] access to property PersonAddresses : DbSet [element, property Address, property Street] : String | EntityFrameworkCore.cs:216:13:216:15 | [post] access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | provenance | | +| EntityFrameworkCore.cs:216:13:216:31 | [post] access to property PersonAddresses : DbSet [element, property Person, property Name] : String | EntityFrameworkCore.cs:216:13:216:15 | [post] access to local variable ctx : MyContext [property PersonAddresses, element, property Person, property Name] : String | provenance | | +| EntityFrameworkCore.cs:216:37:216:53 | access to local variable personAddressMap1 : PersonAddressMap [property Address, property Street] : String | EntityFrameworkCore.cs:216:13:216:31 | [post] access to property PersonAddresses : DbSet [element, property Address, property Street] : String | provenance | | +| EntityFrameworkCore.cs:216:37:216:53 | access to local variable personAddressMap1 : PersonAddressMap [property Person, property Name] : String | EntityFrameworkCore.cs:216:13:216:31 | [post] access to property PersonAddresses : DbSet [element, property Person, property Name] : String | provenance | | +| EntityFrameworkCore.cs:217:13:217:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | EntityFrameworkCore.cs:245:18:245:30 | access to property Addresses : DbSet
    [element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:217:13:217:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | EntityFrameworkCore.cs:252:18:252:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:217:13:217:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Person, property Name] : String | EntityFrameworkCore.cs:237:18:237:28 | access to property Persons : DbSet [element, property Name] : String | provenance | | +| EntityFrameworkCore.cs:223:13:223:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | EntityFrameworkCore.cs:245:18:245:30 | access to property Addresses : DbSet
    [element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:223:13:223:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | EntityFrameworkCore.cs:252:18:252:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:223:13:223:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Person, property Name] : String | EntityFrameworkCore.cs:237:18:237:28 | access to property Persons : DbSet [element, property Name] : String | provenance | | +| EntityFrameworkCore.cs:226:35:226:35 | p : Person [property Name] : String | EntityFrameworkCore.cs:229:29:229:29 | access to parameter p : Person [property Name] : String | provenance | | +| EntityFrameworkCore.cs:229:13:229:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Name] : String | EntityFrameworkCore.cs:230:13:230:15 | access to local variable ctx : MyContext [property Persons, element, property Name] : String | provenance | | +| EntityFrameworkCore.cs:229:13:229:23 | [post] access to property Persons : DbSet [element, property Name] : String | EntityFrameworkCore.cs:229:13:229:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Name] : String | provenance | | +| EntityFrameworkCore.cs:229:29:229:29 | access to parameter p : Person [property Name] : String | EntityFrameworkCore.cs:229:13:229:23 | [post] access to property Persons : DbSet [element, property Name] : String | provenance | | +| EntityFrameworkCore.cs:230:13:230:15 | access to local variable ctx : MyContext [property Persons, element, property Name] : String | EntityFrameworkCore.cs:237:18:237:28 | access to property Persons : DbSet [element, property Name] : String | provenance | | +| EntityFrameworkCore.cs:237:18:237:28 | access to property Persons : DbSet [element, property Name] : String | EntityFrameworkCore.cs:237:18:237:36 | call to method First : Person [property Name] : String | provenance | | +| EntityFrameworkCore.cs:237:18:237:36 | call to method First : Person [property Name] : String | EntityFrameworkCore.cs:237:18:237:41 | access to property Name | provenance | | +| EntityFrameworkCore.cs:245:18:245:30 | access to property Addresses : DbSet
    [element, property Street] : String | EntityFrameworkCore.cs:245:18:245:38 | call to method First
    : Address [property Street] : String | provenance | | +| EntityFrameworkCore.cs:245:18:245:38 | call to method First
    : Address [property Street] : String | EntityFrameworkCore.cs:245:18:245:45 | access to property Street | provenance | | +| EntityFrameworkCore.cs:252:18:252:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:252:18:252:36 | call to method First : Person [property Addresses, element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:252:18:252:36 | call to method First : Person [property Addresses, element, property Street] : String | EntityFrameworkCore.cs:252:18:252:46 | access to property Addresses : ICollection
    [element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:252:18:252:46 | access to property Addresses : ICollection
    [element, property Street] : String | EntityFrameworkCore.cs:252:18:252:54 | call to method First
    : Address [property Street] : String | provenance | | +| EntityFrameworkCore.cs:252:18:252:54 | call to method First
    : Address [property Street] : String | EntityFrameworkCore.cs:252:18:252:61 | access to property Street | provenance | | nodes | EntityFramework.cs:59:13:62:13 | { ..., ... } : Person [property Name] : String | semmle.label | { ..., ... } : Person [property Name] : String | | EntityFramework.cs:61:24:61:32 | "tainted" : String | semmle.label | "tainted" : String | diff --git a/csharp/ql/test/query-tests/API Abuse/FormatInvalid/FormatInvalid.expected b/csharp/ql/test/query-tests/API Abuse/FormatInvalid/FormatInvalid.expected index f3525d8bd47..a1c5e925437 100644 --- a/csharp/ql/test/query-tests/API Abuse/FormatInvalid/FormatInvalid.expected +++ b/csharp/ql/test/query-tests/API Abuse/FormatInvalid/FormatInvalid.expected @@ -1,6 +1,6 @@ edges -| FormatMissingArgument.cs:22:16:22:20 | "{1}" : String | FormatMissingArgument.cs:28:24:28:29 | format : String | -| FormatMissingArgument.cs:28:24:28:29 | format : String | FormatMissingArgument.cs:31:23:31:28 | access to parameter format | +| FormatMissingArgument.cs:22:16:22:20 | "{1}" : String | FormatMissingArgument.cs:28:24:28:29 | format : String | provenance | | +| FormatMissingArgument.cs:28:24:28:29 | format : String | FormatMissingArgument.cs:31:23:31:28 | access to parameter format | provenance | | nodes | FormatInvalid.cs:9:23:9:27 | "{0}" | semmle.label | "{0}" | | FormatInvalid.cs:12:23:12:29 | "{0,1}" | semmle.label | "{0,1}" | diff --git a/csharp/ql/test/query-tests/Likely Bugs/UnsafeYearConstruction/UnsafeYearConstruction.expected b/csharp/ql/test/query-tests/Likely Bugs/UnsafeYearConstruction/UnsafeYearConstruction.expected index bf23b05a35a..5ff0ff32c21 100644 --- a/csharp/ql/test/query-tests/Likely Bugs/UnsafeYearConstruction/UnsafeYearConstruction.expected +++ b/csharp/ql/test/query-tests/Likely Bugs/UnsafeYearConstruction/UnsafeYearConstruction.expected @@ -1,7 +1,7 @@ edges -| Program.cs:15:27:15:38 | ... + ... : Int32 | Program.cs:17:37:17:43 | access to local variable endYear | -| Program.cs:23:31:23:34 | year : Int32 | Program.cs:26:39:26:42 | access to parameter year | -| Program.cs:33:18:33:29 | ... - ... : Int32 | Program.cs:23:31:23:34 | year : Int32 | +| Program.cs:15:27:15:38 | ... + ... : Int32 | Program.cs:17:37:17:43 | access to local variable endYear | provenance | | +| Program.cs:23:31:23:34 | year : Int32 | Program.cs:26:39:26:42 | access to parameter year | provenance | | +| Program.cs:33:18:33:29 | ... - ... : Int32 | Program.cs:23:31:23:34 | year : Int32 | provenance | | nodes | Program.cs:13:39:13:50 | ... - ... | semmle.label | ... - ... | | Program.cs:15:27:15:38 | ... + ... : Int32 | semmle.label | ... + ... : Int32 | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-020/UntrustedDataToExternalAPI.expected b/csharp/ql/test/query-tests/Security Features/CWE-020/UntrustedDataToExternalAPI.expected index 4135e7ce5d6..10a233c2c82 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-020/UntrustedDataToExternalAPI.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-020/UntrustedDataToExternalAPI.expected @@ -1,7 +1,7 @@ edges -| UntrustedData.cs:9:20:9:42 | access to property QueryString : NameValueCollection | UntrustedData.cs:9:20:9:50 | access to indexer : String | -| UntrustedData.cs:9:20:9:42 | access to property QueryString : NameValueCollection | UntrustedData.cs:13:28:13:31 | access to local variable name | -| UntrustedData.cs:9:20:9:50 | access to indexer : String | UntrustedData.cs:13:28:13:31 | access to local variable name | +| UntrustedData.cs:9:20:9:42 | access to property QueryString : NameValueCollection | UntrustedData.cs:9:20:9:50 | access to indexer : String | provenance | | +| UntrustedData.cs:9:20:9:42 | access to property QueryString : NameValueCollection | UntrustedData.cs:13:28:13:31 | access to local variable name | provenance | | +| UntrustedData.cs:9:20:9:50 | access to indexer : String | UntrustedData.cs:13:28:13:31 | access to local variable name | provenance | | nodes | UntrustedData.cs:9:20:9:30 | access to property Request | semmle.label | access to property Request | | UntrustedData.cs:9:20:9:42 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-022/TaintedPath/TaintedPath.expected b/csharp/ql/test/query-tests/Security Features/CWE-022/TaintedPath/TaintedPath.expected index 77e55c484e7..e3bc1c2dd1b 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-022/TaintedPath/TaintedPath.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-022/TaintedPath/TaintedPath.expected @@ -1,19 +1,19 @@ edges -| TaintedPath.cs:10:23:10:45 | access to property QueryString : NameValueCollection | TaintedPath.cs:10:23:10:53 | access to indexer : String | -| TaintedPath.cs:10:23:10:45 | access to property QueryString : NameValueCollection | TaintedPath.cs:12:50:12:53 | access to local variable path | -| TaintedPath.cs:10:23:10:45 | access to property QueryString : NameValueCollection | TaintedPath.cs:17:51:17:54 | access to local variable path | -| TaintedPath.cs:10:23:10:45 | access to property QueryString : NameValueCollection | TaintedPath.cs:25:30:25:33 | access to local variable path | -| TaintedPath.cs:10:23:10:45 | access to property QueryString : NameValueCollection | TaintedPath.cs:31:30:31:33 | access to local variable path | -| TaintedPath.cs:10:23:10:45 | access to property QueryString : NameValueCollection | TaintedPath.cs:36:25:36:31 | access to local variable badPath | -| TaintedPath.cs:10:23:10:45 | access to property QueryString : NameValueCollection | TaintedPath.cs:38:49:38:55 | access to local variable badPath | -| TaintedPath.cs:10:23:10:45 | access to property QueryString : NameValueCollection | TaintedPath.cs:51:26:51:29 | access to local variable path | -| TaintedPath.cs:10:23:10:53 | access to indexer : String | TaintedPath.cs:12:50:12:53 | access to local variable path | -| TaintedPath.cs:10:23:10:53 | access to indexer : String | TaintedPath.cs:17:51:17:54 | access to local variable path | -| TaintedPath.cs:10:23:10:53 | access to indexer : String | TaintedPath.cs:25:30:25:33 | access to local variable path | -| TaintedPath.cs:10:23:10:53 | access to indexer : String | TaintedPath.cs:31:30:31:33 | access to local variable path | -| TaintedPath.cs:10:23:10:53 | access to indexer : String | TaintedPath.cs:36:25:36:31 | access to local variable badPath | -| TaintedPath.cs:10:23:10:53 | access to indexer : String | TaintedPath.cs:38:49:38:55 | access to local variable badPath | -| TaintedPath.cs:10:23:10:53 | access to indexer : String | TaintedPath.cs:51:26:51:29 | access to local variable path | +| TaintedPath.cs:10:23:10:45 | access to property QueryString : NameValueCollection | TaintedPath.cs:10:23:10:53 | access to indexer : String | provenance | | +| TaintedPath.cs:10:23:10:45 | access to property QueryString : NameValueCollection | TaintedPath.cs:12:50:12:53 | access to local variable path | provenance | | +| TaintedPath.cs:10:23:10:45 | access to property QueryString : NameValueCollection | TaintedPath.cs:17:51:17:54 | access to local variable path | provenance | | +| TaintedPath.cs:10:23:10:45 | access to property QueryString : NameValueCollection | TaintedPath.cs:25:30:25:33 | access to local variable path | provenance | | +| TaintedPath.cs:10:23:10:45 | access to property QueryString : NameValueCollection | TaintedPath.cs:31:30:31:33 | access to local variable path | provenance | | +| TaintedPath.cs:10:23:10:45 | access to property QueryString : NameValueCollection | TaintedPath.cs:36:25:36:31 | access to local variable badPath | provenance | | +| TaintedPath.cs:10:23:10:45 | access to property QueryString : NameValueCollection | TaintedPath.cs:38:49:38:55 | access to local variable badPath | provenance | | +| TaintedPath.cs:10:23:10:45 | access to property QueryString : NameValueCollection | TaintedPath.cs:51:26:51:29 | access to local variable path | provenance | | +| TaintedPath.cs:10:23:10:53 | access to indexer : String | TaintedPath.cs:12:50:12:53 | access to local variable path | provenance | | +| TaintedPath.cs:10:23:10:53 | access to indexer : String | TaintedPath.cs:17:51:17:54 | access to local variable path | provenance | | +| TaintedPath.cs:10:23:10:53 | access to indexer : String | TaintedPath.cs:25:30:25:33 | access to local variable path | provenance | | +| TaintedPath.cs:10:23:10:53 | access to indexer : String | TaintedPath.cs:31:30:31:33 | access to local variable path | provenance | | +| TaintedPath.cs:10:23:10:53 | access to indexer : String | TaintedPath.cs:36:25:36:31 | access to local variable badPath | provenance | | +| TaintedPath.cs:10:23:10:53 | access to indexer : String | TaintedPath.cs:38:49:38:55 | access to local variable badPath | provenance | | +| TaintedPath.cs:10:23:10:53 | access to indexer : String | TaintedPath.cs:51:26:51:29 | access to local variable path | provenance | | nodes | TaintedPath.cs:10:23:10:45 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | | TaintedPath.cs:10:23:10:53 | access to indexer : String | semmle.label | access to indexer : String | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-022/ZipSlip/ZipSlip.expected b/csharp/ql/test/query-tests/Security Features/CWE-022/ZipSlip/ZipSlip.expected index a5b2d7166f7..3443ea23f8e 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-022/ZipSlip/ZipSlip.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-022/ZipSlip/ZipSlip.expected @@ -1,23 +1,23 @@ edges -| ZipSlip.cs:15:35:15:66 | call to method GetFullPath : String | ZipSlip.cs:30:71:30:78 | access to local variable fullPath : String | -| ZipSlip.cs:15:35:15:66 | call to method GetFullPath : String | ZipSlip.cs:38:81:38:88 | access to local variable fullPath : String | -| ZipSlip.cs:15:52:15:65 | access to property FullName : String | ZipSlip.cs:15:35:15:66 | call to method GetFullPath : String | -| ZipSlip.cs:18:31:18:44 | access to property FullName : String | ZipSlip.cs:22:71:22:74 | access to local variable file : String | -| ZipSlip.cs:22:43:22:75 | call to method Combine : String | ZipSlip.cs:23:41:23:52 | access to local variable destFileName | -| ZipSlip.cs:22:71:22:74 | access to local variable file : String | ZipSlip.cs:22:43:22:75 | call to method Combine : String | -| ZipSlip.cs:30:43:30:79 | call to method Combine : String | ZipSlip.cs:31:41:31:52 | access to local variable destFilePath | -| ZipSlip.cs:30:43:30:79 | call to method Combine : String | ZipSlip.cs:35:45:35:56 | access to local variable destFilePath | -| ZipSlip.cs:30:71:30:78 | access to local variable fullPath : String | ZipSlip.cs:30:43:30:79 | call to method Combine : String | -| ZipSlip.cs:38:36:38:90 | call to method GetFullPath : String | ZipSlip.cs:39:41:39:52 | access to local variable destFilePath | -| ZipSlip.cs:38:53:38:89 | call to method Combine : String | ZipSlip.cs:38:36:38:90 | call to method GetFullPath : String | -| ZipSlip.cs:38:81:38:88 | access to local variable fullPath : String | ZipSlip.cs:38:53:38:89 | call to method Combine : String | -| ZipSlip.cs:61:47:61:86 | call to method Combine : String | ZipSlip.cs:68:74:68:85 | access to local variable destFilePath | -| ZipSlip.cs:61:47:61:86 | call to method Combine : String | ZipSlip.cs:75:71:75:82 | access to local variable destFilePath | -| ZipSlip.cs:61:47:61:86 | call to method Combine : String | ZipSlip.cs:82:57:82:68 | access to local variable destFilePath | -| ZipSlip.cs:61:47:61:86 | call to method Combine : String | ZipSlip.cs:90:58:90:69 | access to local variable destFilePath | -| ZipSlip.cs:61:72:61:85 | access to property FullName : String | ZipSlip.cs:61:47:61:86 | call to method Combine : String | -| ZipSlipBad.cs:9:31:9:73 | call to method Combine : String | ZipSlipBad.cs:10:29:10:40 | access to local variable destFileName | -| ZipSlipBad.cs:9:59:9:72 | access to property FullName : String | ZipSlipBad.cs:9:31:9:73 | call to method Combine : String | +| ZipSlip.cs:15:35:15:66 | call to method GetFullPath : String | ZipSlip.cs:30:71:30:78 | access to local variable fullPath : String | provenance | | +| ZipSlip.cs:15:35:15:66 | call to method GetFullPath : String | ZipSlip.cs:38:81:38:88 | access to local variable fullPath : String | provenance | | +| ZipSlip.cs:15:52:15:65 | access to property FullName : String | ZipSlip.cs:15:35:15:66 | call to method GetFullPath : String | provenance | | +| ZipSlip.cs:18:31:18:44 | access to property FullName : String | ZipSlip.cs:22:71:22:74 | access to local variable file : String | provenance | | +| ZipSlip.cs:22:43:22:75 | call to method Combine : String | ZipSlip.cs:23:41:23:52 | access to local variable destFileName | provenance | | +| ZipSlip.cs:22:71:22:74 | access to local variable file : String | ZipSlip.cs:22:43:22:75 | call to method Combine : String | provenance | | +| ZipSlip.cs:30:43:30:79 | call to method Combine : String | ZipSlip.cs:31:41:31:52 | access to local variable destFilePath | provenance | | +| ZipSlip.cs:30:43:30:79 | call to method Combine : String | ZipSlip.cs:35:45:35:56 | access to local variable destFilePath | provenance | | +| ZipSlip.cs:30:71:30:78 | access to local variable fullPath : String | ZipSlip.cs:30:43:30:79 | call to method Combine : String | provenance | | +| ZipSlip.cs:38:36:38:90 | call to method GetFullPath : String | ZipSlip.cs:39:41:39:52 | access to local variable destFilePath | provenance | | +| ZipSlip.cs:38:53:38:89 | call to method Combine : String | ZipSlip.cs:38:36:38:90 | call to method GetFullPath : String | provenance | | +| ZipSlip.cs:38:81:38:88 | access to local variable fullPath : String | ZipSlip.cs:38:53:38:89 | call to method Combine : String | provenance | | +| ZipSlip.cs:61:47:61:86 | call to method Combine : String | ZipSlip.cs:68:74:68:85 | access to local variable destFilePath | provenance | | +| ZipSlip.cs:61:47:61:86 | call to method Combine : String | ZipSlip.cs:75:71:75:82 | access to local variable destFilePath | provenance | | +| ZipSlip.cs:61:47:61:86 | call to method Combine : String | ZipSlip.cs:82:57:82:68 | access to local variable destFilePath | provenance | | +| ZipSlip.cs:61:47:61:86 | call to method Combine : String | ZipSlip.cs:90:58:90:69 | access to local variable destFilePath | provenance | | +| ZipSlip.cs:61:72:61:85 | access to property FullName : String | ZipSlip.cs:61:47:61:86 | call to method Combine : String | provenance | | +| ZipSlipBad.cs:9:31:9:73 | call to method Combine : String | ZipSlipBad.cs:10:29:10:40 | access to local variable destFileName | provenance | | +| ZipSlipBad.cs:9:59:9:72 | access to property FullName : String | ZipSlipBad.cs:9:31:9:73 | call to method Combine : String | provenance | | nodes | ZipSlip.cs:15:35:15:66 | call to method GetFullPath : String | semmle.label | call to method GetFullPath : String | | ZipSlip.cs:15:52:15:65 | access to property FullName : String | semmle.label | access to property FullName : String | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-078/CommandInjection.expected b/csharp/ql/test/query-tests/Security Features/CWE-078/CommandInjection.expected index 336342b9747..fc1da3ba7c6 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-078/CommandInjection.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-078/CommandInjection.expected @@ -1,26 +1,26 @@ edges -| CommandInjection.cs:25:32:25:46 | access to field categoryTextBox : TextBox | CommandInjection.cs:25:32:25:51 | access to property Text : String | -| CommandInjection.cs:25:32:25:51 | access to property Text : String | CommandInjection.cs:26:27:26:47 | ... + ... | -| CommandInjection.cs:25:32:25:51 | access to property Text : String | CommandInjection.cs:26:50:26:66 | ... + ... | -| CommandInjection.cs:25:32:25:51 | access to property Text : String | CommandInjection.cs:28:63:28:71 | access to local variable userInput | -| CommandInjection.cs:25:32:25:51 | access to property Text : String | CommandInjection.cs:28:63:28:71 | access to local variable userInput : String | -| CommandInjection.cs:25:32:25:51 | access to property Text : String | CommandInjection.cs:28:74:28:82 | access to local variable userInput | -| CommandInjection.cs:25:32:25:51 | access to property Text : String | CommandInjection.cs:28:74:28:82 | access to local variable userInput : String | -| CommandInjection.cs:25:32:25:51 | access to property Text : String | CommandInjection.cs:32:39:32:47 | access to local variable userInput | -| CommandInjection.cs:25:32:25:51 | access to property Text : String | CommandInjection.cs:32:39:32:47 | access to local variable userInput : String | -| CommandInjection.cs:25:32:25:51 | access to property Text : String | CommandInjection.cs:33:40:33:48 | access to local variable userInput | -| CommandInjection.cs:25:32:25:51 | access to property Text : String | CommandInjection.cs:33:40:33:48 | access to local variable userInput : String | -| CommandInjection.cs:25:32:25:51 | access to property Text : String | CommandInjection.cs:34:47:34:55 | access to local variable userInput | -| CommandInjection.cs:25:32:25:51 | access to property Text : String | CommandInjection.cs:34:47:34:55 | access to local variable userInput : String | -| CommandInjection.cs:28:42:28:83 | object creation of type ProcessStartInfo : ProcessStartInfo | CommandInjection.cs:29:27:29:35 | access to local variable startInfo | -| CommandInjection.cs:28:63:28:71 | access to local variable userInput : String | CommandInjection.cs:28:42:28:83 | object creation of type ProcessStartInfo : ProcessStartInfo | -| CommandInjection.cs:28:74:28:82 | access to local variable userInput : String | CommandInjection.cs:28:42:28:83 | object creation of type ProcessStartInfo : ProcessStartInfo | -| CommandInjection.cs:32:13:32:26 | [post] access to local variable startInfoProps : ProcessStartInfo | CommandInjection.cs:35:27:35:40 | access to local variable startInfoProps | -| CommandInjection.cs:32:39:32:47 | access to local variable userInput : String | CommandInjection.cs:32:13:32:26 | [post] access to local variable startInfoProps : ProcessStartInfo | -| CommandInjection.cs:33:13:33:26 | [post] access to local variable startInfoProps : ProcessStartInfo | CommandInjection.cs:35:27:35:40 | access to local variable startInfoProps | -| CommandInjection.cs:33:40:33:48 | access to local variable userInput : String | CommandInjection.cs:33:13:33:26 | [post] access to local variable startInfoProps : ProcessStartInfo | -| CommandInjection.cs:34:13:34:26 | [post] access to local variable startInfoProps : ProcessStartInfo | CommandInjection.cs:35:27:35:40 | access to local variable startInfoProps | -| CommandInjection.cs:34:47:34:55 | access to local variable userInput : String | CommandInjection.cs:34:13:34:26 | [post] access to local variable startInfoProps : ProcessStartInfo | +| CommandInjection.cs:25:32:25:46 | access to field categoryTextBox : TextBox | CommandInjection.cs:25:32:25:51 | access to property Text : String | provenance | | +| CommandInjection.cs:25:32:25:51 | access to property Text : String | CommandInjection.cs:26:27:26:47 | ... + ... | provenance | | +| CommandInjection.cs:25:32:25:51 | access to property Text : String | CommandInjection.cs:26:50:26:66 | ... + ... | provenance | | +| CommandInjection.cs:25:32:25:51 | access to property Text : String | CommandInjection.cs:28:63:28:71 | access to local variable userInput | provenance | | +| CommandInjection.cs:25:32:25:51 | access to property Text : String | CommandInjection.cs:28:63:28:71 | access to local variable userInput : String | provenance | | +| CommandInjection.cs:25:32:25:51 | access to property Text : String | CommandInjection.cs:28:74:28:82 | access to local variable userInput | provenance | | +| CommandInjection.cs:25:32:25:51 | access to property Text : String | CommandInjection.cs:28:74:28:82 | access to local variable userInput : String | provenance | | +| CommandInjection.cs:25:32:25:51 | access to property Text : String | CommandInjection.cs:32:39:32:47 | access to local variable userInput | provenance | | +| CommandInjection.cs:25:32:25:51 | access to property Text : String | CommandInjection.cs:32:39:32:47 | access to local variable userInput : String | provenance | | +| CommandInjection.cs:25:32:25:51 | access to property Text : String | CommandInjection.cs:33:40:33:48 | access to local variable userInput | provenance | | +| CommandInjection.cs:25:32:25:51 | access to property Text : String | CommandInjection.cs:33:40:33:48 | access to local variable userInput : String | provenance | | +| CommandInjection.cs:25:32:25:51 | access to property Text : String | CommandInjection.cs:34:47:34:55 | access to local variable userInput | provenance | | +| CommandInjection.cs:25:32:25:51 | access to property Text : String | CommandInjection.cs:34:47:34:55 | access to local variable userInput : String | provenance | | +| CommandInjection.cs:28:42:28:83 | object creation of type ProcessStartInfo : ProcessStartInfo | CommandInjection.cs:29:27:29:35 | access to local variable startInfo | provenance | | +| CommandInjection.cs:28:63:28:71 | access to local variable userInput : String | CommandInjection.cs:28:42:28:83 | object creation of type ProcessStartInfo : ProcessStartInfo | provenance | | +| CommandInjection.cs:28:74:28:82 | access to local variable userInput : String | CommandInjection.cs:28:42:28:83 | object creation of type ProcessStartInfo : ProcessStartInfo | provenance | | +| CommandInjection.cs:32:13:32:26 | [post] access to local variable startInfoProps : ProcessStartInfo | CommandInjection.cs:35:27:35:40 | access to local variable startInfoProps | provenance | | +| CommandInjection.cs:32:39:32:47 | access to local variable userInput : String | CommandInjection.cs:32:13:32:26 | [post] access to local variable startInfoProps : ProcessStartInfo | provenance | | +| CommandInjection.cs:33:13:33:26 | [post] access to local variable startInfoProps : ProcessStartInfo | CommandInjection.cs:35:27:35:40 | access to local variable startInfoProps | provenance | | +| CommandInjection.cs:33:40:33:48 | access to local variable userInput : String | CommandInjection.cs:33:13:33:26 | [post] access to local variable startInfoProps : ProcessStartInfo | provenance | | +| CommandInjection.cs:34:13:34:26 | [post] access to local variable startInfoProps : ProcessStartInfo | CommandInjection.cs:35:27:35:40 | access to local variable startInfoProps | provenance | | +| CommandInjection.cs:34:47:34:55 | access to local variable userInput : String | CommandInjection.cs:34:13:34:26 | [post] access to local variable startInfoProps : ProcessStartInfo | provenance | | nodes | CommandInjection.cs:25:32:25:46 | access to field categoryTextBox : TextBox | semmle.label | access to field categoryTextBox : TextBox | | CommandInjection.cs:25:32:25:51 | access to property Text : String | semmle.label | access to property Text : String | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-078/StoredCommandInjection.expected b/csharp/ql/test/query-tests/Security Features/CWE-078/StoredCommandInjection.expected index 0c166565a83..46c85f7abbe 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-078/StoredCommandInjection.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-078/StoredCommandInjection.expected @@ -1,5 +1,5 @@ edges -| StoredCommandInjection.cs:22:54:22:80 | call to method GetString : String | StoredCommandInjection.cs:22:46:22:80 | ... + ... | +| StoredCommandInjection.cs:22:54:22:80 | call to method GetString : String | StoredCommandInjection.cs:22:46:22:80 | ... + ... | provenance | | nodes | StoredCommandInjection.cs:22:46:22:80 | ... + ... | semmle.label | ... + ... | | StoredCommandInjection.cs:22:54:22:80 | call to method GetString : String | semmle.label | call to method GetString : String | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/StoredXSS/StoredXSS.expected b/csharp/ql/test/query-tests/Security Features/CWE-079/StoredXSS/StoredXSS.expected index beef5ec2968..488df85e1c4 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/StoredXSS/StoredXSS.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/StoredXSS/StoredXSS.expected @@ -1,5 +1,5 @@ edges -| StoredXSS.cs:22:60:22:86 | call to method GetString : String | StoredXSS.cs:22:44:22:86 | ... + ... | +| StoredXSS.cs:22:60:22:86 | call to method GetString : String | StoredXSS.cs:22:44:22:86 | ... + ... | provenance | | nodes | StoredXSS.cs:22:44:22:86 | ... + ... | semmle.label | ... + ... | | StoredXSS.cs:22:60:22:86 | call to method GetString : String | semmle.label | call to method GetString : String | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSS/XSS.expected b/csharp/ql/test/query-tests/Security Features/CWE-079/XSS/XSS.expected index added443400..1e1c6258c89 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSS/XSS.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSS/XSS.expected @@ -1,19 +1,19 @@ edges -| Index.cshtml:5:19:5:31 | access to property Query : IQueryCollection | Index.cshtml:14:16:14:22 | call to operator implicit conversion | -| XSSAspNet.cs:19:25:19:43 | access to property QueryString : NameValueCollection | XSSAspNet.cs:19:25:19:52 | access to indexer : String | -| XSSAspNet.cs:19:25:19:43 | access to property QueryString : NameValueCollection | XSSAspNet.cs:26:30:26:34 | access to local variable sayHi | -| XSSAspNet.cs:19:25:19:43 | access to property QueryString : NameValueCollection | XSSAspNet.cs:36:40:36:44 | access to local variable sayHi | -| XSSAspNet.cs:19:25:19:52 | access to indexer : String | XSSAspNet.cs:26:30:26:34 | access to local variable sayHi | -| XSSAspNet.cs:19:25:19:52 | access to indexer : String | XSSAspNet.cs:36:40:36:44 | access to local variable sayHi | -| XSSAspNet.cs:43:28:43:46 | access to property QueryString : NameValueCollection | XSSAspNet.cs:43:28:43:55 | access to indexer | -| XSSAspNetCore.cs:21:52:21:64 | access to property Query : IQueryCollection | XSSAspNetCore.cs:21:52:21:76 | call to operator implicit conversion | -| XSSAspNetCore.cs:40:56:40:58 | foo : String | XSSAspNetCore.cs:44:51:44:53 | access to parameter foo | -| XSSAspNetCore.cs:58:43:58:55 | access to property Query : IQueryCollection | XSSAspNetCore.cs:58:43:58:62 | access to indexer : StringValues | -| XSSAspNetCore.cs:58:43:58:62 | access to indexer : StringValues | XSSAspNetCore.cs:58:43:58:73 | call to method ToString | -| XSSAspNetCore.cs:61:44:61:56 | access to property Query : IQueryCollection | XSSAspNetCore.cs:61:44:61:63 | access to indexer : StringValues | -| XSSAspNetCore.cs:61:44:61:56 | access to property Query : IQueryCollection | XSSAspNetCore.cs:61:44:61:66 | access to indexer | -| XSSAspNetCore.cs:61:44:61:63 | access to indexer : StringValues | XSSAspNetCore.cs:61:44:61:66 | access to indexer | -| XSSAspNetCore.cs:72:51:72:65 | access to property Headers : IHeaderDictionary | XSSAspNetCore.cs:72:51:72:72 | call to operator implicit conversion | +| Index.cshtml:5:19:5:31 | access to property Query : IQueryCollection | Index.cshtml:14:16:14:22 | call to operator implicit conversion | provenance | | +| XSSAspNet.cs:19:25:19:43 | access to property QueryString : NameValueCollection | XSSAspNet.cs:19:25:19:52 | access to indexer : String | provenance | | +| XSSAspNet.cs:19:25:19:43 | access to property QueryString : NameValueCollection | XSSAspNet.cs:26:30:26:34 | access to local variable sayHi | provenance | | +| XSSAspNet.cs:19:25:19:43 | access to property QueryString : NameValueCollection | XSSAspNet.cs:36:40:36:44 | access to local variable sayHi | provenance | | +| XSSAspNet.cs:19:25:19:52 | access to indexer : String | XSSAspNet.cs:26:30:26:34 | access to local variable sayHi | provenance | | +| XSSAspNet.cs:19:25:19:52 | access to indexer : String | XSSAspNet.cs:36:40:36:44 | access to local variable sayHi | provenance | | +| XSSAspNet.cs:43:28:43:46 | access to property QueryString : NameValueCollection | XSSAspNet.cs:43:28:43:55 | access to indexer | provenance | | +| XSSAspNetCore.cs:21:52:21:64 | access to property Query : IQueryCollection | XSSAspNetCore.cs:21:52:21:76 | call to operator implicit conversion | provenance | | +| XSSAspNetCore.cs:40:56:40:58 | foo : String | XSSAspNetCore.cs:44:51:44:53 | access to parameter foo | provenance | | +| XSSAspNetCore.cs:58:43:58:55 | access to property Query : IQueryCollection | XSSAspNetCore.cs:58:43:58:62 | access to indexer : StringValues | provenance | | +| XSSAspNetCore.cs:58:43:58:62 | access to indexer : StringValues | XSSAspNetCore.cs:58:43:58:73 | call to method ToString | provenance | | +| XSSAspNetCore.cs:61:44:61:56 | access to property Query : IQueryCollection | XSSAspNetCore.cs:61:44:61:63 | access to indexer : StringValues | provenance | | +| XSSAspNetCore.cs:61:44:61:56 | access to property Query : IQueryCollection | XSSAspNetCore.cs:61:44:61:66 | access to indexer | provenance | | +| XSSAspNetCore.cs:61:44:61:63 | access to indexer : StringValues | XSSAspNetCore.cs:61:44:61:66 | access to indexer | provenance | | +| XSSAspNetCore.cs:72:51:72:65 | access to property Headers : IHeaderDictionary | XSSAspNetCore.cs:72:51:72:72 | call to operator implicit conversion | provenance | | nodes | Index.cshtml:5:19:5:31 | access to property Query : IQueryCollection | semmle.label | access to property Query : IQueryCollection | | Index.cshtml:14:16:14:22 | call to operator implicit conversion | semmle.label | call to operator implicit conversion | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSAsp/XSS.expected b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSAsp/XSS.expected index 941b4b359a9..e3c29b08316 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSAsp/XSS.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSAsp/XSS.expected @@ -1,33 +1,33 @@ edges -| XSS.cs:25:13:25:21 | [post] access to local variable userInput : StringBuilder | XSS.cs:26:32:26:40 | access to local variable userInput : StringBuilder | -| XSS.cs:25:13:25:21 | [post] access to local variable userInput : StringBuilder | XSS.cs:27:29:27:37 | access to local variable userInput : StringBuilder | -| XSS.cs:25:13:25:21 | [post] access to local variable userInput : StringBuilder | XSS.cs:28:26:28:34 | access to local variable userInput : StringBuilder | -| XSS.cs:25:48:25:62 | access to field categoryTextBox : TextBox | XSS.cs:25:48:25:67 | access to property Text : String | -| XSS.cs:25:48:25:67 | access to property Text : String | XSS.cs:25:13:25:21 | [post] access to local variable userInput : StringBuilder | -| XSS.cs:26:32:26:40 | access to local variable userInput : StringBuilder | XSS.cs:26:32:26:51 | call to method ToString | -| XSS.cs:27:29:27:37 | access to local variable userInput : StringBuilder | XSS.cs:27:29:27:48 | call to method ToString | -| XSS.cs:28:26:28:34 | access to local variable userInput : StringBuilder | XSS.cs:28:26:28:45 | call to method ToString | -| XSS.cs:37:27:37:53 | access to property QueryString : NameValueCollection | XSS.cs:37:27:37:61 | access to indexer : String | -| XSS.cs:37:27:37:53 | access to property QueryString : NameValueCollection | XSS.cs:38:36:38:39 | access to local variable name | -| XSS.cs:37:27:37:61 | access to indexer : String | XSS.cs:38:36:38:39 | access to local variable name | -| XSS.cs:57:27:57:65 | access to property QueryString : NameValueCollection | XSS.cs:57:27:57:73 | access to indexer : String | -| XSS.cs:57:27:57:65 | access to property QueryString : NameValueCollection | XSS.cs:59:22:59:25 | access to local variable name | -| XSS.cs:57:27:57:73 | access to indexer : String | XSS.cs:59:22:59:25 | access to local variable name | -| XSS.cs:75:27:75:53 | access to property QueryString : NameValueCollection | XSS.cs:75:27:75:61 | access to indexer : String | -| XSS.cs:75:27:75:53 | access to property QueryString : NameValueCollection | XSS.cs:76:36:76:39 | access to local variable name | -| XSS.cs:75:27:75:61 | access to indexer : String | XSS.cs:76:36:76:39 | access to local variable name | -| XSS.cs:78:28:78:42 | access to property Request : HttpRequestBase | XSS.cs:79:36:79:40 | access to local variable name2 | -| XSS.cs:85:27:85:53 | access to property QueryString : NameValueCollection | XSS.cs:85:27:85:61 | access to indexer : String | -| XSS.cs:85:27:85:53 | access to property QueryString : NameValueCollection | XSS.cs:86:28:86:31 | access to local variable name | -| XSS.cs:85:27:85:53 | access to property QueryString : NameValueCollection | XSS.cs:87:31:87:34 | access to local variable name | -| XSS.cs:85:27:85:61 | access to indexer : String | XSS.cs:86:28:86:31 | access to local variable name | -| XSS.cs:85:27:85:61 | access to indexer : String | XSS.cs:87:31:87:34 | access to local variable name | -| XSS.cs:94:27:94:53 | access to property QueryString : NameValueCollection | XSS.cs:94:27:94:61 | access to indexer : String | -| XSS.cs:94:27:94:53 | access to property QueryString : NameValueCollection | XSS.cs:95:31:95:34 | access to local variable name | -| XSS.cs:94:27:94:61 | access to indexer : String | XSS.cs:95:31:95:34 | access to local variable name | -| script.aspx:12:1:12:14 | <%= ... %> | script.aspx:12:1:12:14 | <%= ... %> | -| script.aspx:16:1:16:34 | <%= ... %> | script.aspx:16:1:16:34 | <%= ... %> | -| script.aspx:20:1:20:41 | <%= ... %> | script.aspx:20:1:20:41 | <%= ... %> | +| XSS.cs:25:13:25:21 | [post] access to local variable userInput : StringBuilder | XSS.cs:26:32:26:40 | access to local variable userInput : StringBuilder | provenance | | +| XSS.cs:25:13:25:21 | [post] access to local variable userInput : StringBuilder | XSS.cs:27:29:27:37 | access to local variable userInput : StringBuilder | provenance | | +| XSS.cs:25:13:25:21 | [post] access to local variable userInput : StringBuilder | XSS.cs:28:26:28:34 | access to local variable userInput : StringBuilder | provenance | | +| XSS.cs:25:48:25:62 | access to field categoryTextBox : TextBox | XSS.cs:25:48:25:67 | access to property Text : String | provenance | | +| XSS.cs:25:48:25:67 | access to property Text : String | XSS.cs:25:13:25:21 | [post] access to local variable userInput : StringBuilder | provenance | | +| XSS.cs:26:32:26:40 | access to local variable userInput : StringBuilder | XSS.cs:26:32:26:51 | call to method ToString | provenance | | +| XSS.cs:27:29:27:37 | access to local variable userInput : StringBuilder | XSS.cs:27:29:27:48 | call to method ToString | provenance | | +| XSS.cs:28:26:28:34 | access to local variable userInput : StringBuilder | XSS.cs:28:26:28:45 | call to method ToString | provenance | | +| XSS.cs:37:27:37:53 | access to property QueryString : NameValueCollection | XSS.cs:37:27:37:61 | access to indexer : String | provenance | | +| XSS.cs:37:27:37:53 | access to property QueryString : NameValueCollection | XSS.cs:38:36:38:39 | access to local variable name | provenance | | +| XSS.cs:37:27:37:61 | access to indexer : String | XSS.cs:38:36:38:39 | access to local variable name | provenance | | +| XSS.cs:57:27:57:65 | access to property QueryString : NameValueCollection | XSS.cs:57:27:57:73 | access to indexer : String | provenance | | +| XSS.cs:57:27:57:65 | access to property QueryString : NameValueCollection | XSS.cs:59:22:59:25 | access to local variable name | provenance | | +| XSS.cs:57:27:57:73 | access to indexer : String | XSS.cs:59:22:59:25 | access to local variable name | provenance | | +| XSS.cs:75:27:75:53 | access to property QueryString : NameValueCollection | XSS.cs:75:27:75:61 | access to indexer : String | provenance | | +| XSS.cs:75:27:75:53 | access to property QueryString : NameValueCollection | XSS.cs:76:36:76:39 | access to local variable name | provenance | | +| XSS.cs:75:27:75:61 | access to indexer : String | XSS.cs:76:36:76:39 | access to local variable name | provenance | | +| XSS.cs:78:28:78:42 | access to property Request : HttpRequestBase | XSS.cs:79:36:79:40 | access to local variable name2 | provenance | | +| XSS.cs:85:27:85:53 | access to property QueryString : NameValueCollection | XSS.cs:85:27:85:61 | access to indexer : String | provenance | | +| XSS.cs:85:27:85:53 | access to property QueryString : NameValueCollection | XSS.cs:86:28:86:31 | access to local variable name | provenance | | +| XSS.cs:85:27:85:53 | access to property QueryString : NameValueCollection | XSS.cs:87:31:87:34 | access to local variable name | provenance | | +| XSS.cs:85:27:85:61 | access to indexer : String | XSS.cs:86:28:86:31 | access to local variable name | provenance | | +| XSS.cs:85:27:85:61 | access to indexer : String | XSS.cs:87:31:87:34 | access to local variable name | provenance | | +| XSS.cs:94:27:94:53 | access to property QueryString : NameValueCollection | XSS.cs:94:27:94:61 | access to indexer : String | provenance | | +| XSS.cs:94:27:94:53 | access to property QueryString : NameValueCollection | XSS.cs:95:31:95:34 | access to local variable name | provenance | | +| XSS.cs:94:27:94:61 | access to indexer : String | XSS.cs:95:31:95:34 | access to local variable name | provenance | | +| script.aspx:12:1:12:14 | <%= ... %> | script.aspx:12:1:12:14 | <%= ... %> | provenance | | +| script.aspx:16:1:16:34 | <%= ... %> | script.aspx:16:1:16:34 | <%= ... %> | provenance | | +| script.aspx:20:1:20:41 | <%= ... %> | script.aspx:20:1:20:41 | <%= ... %> | provenance | | nodes | XSS.cs:25:13:25:21 | [post] access to local variable userInput : StringBuilder | semmle.label | [post] access to local variable userInput : StringBuilder | | XSS.cs:25:48:25:62 | access to field categoryTextBox : TextBox | semmle.label | access to field categoryTextBox : TextBox | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/XSS.expected b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/XSS.expected index 19413509bcb..70c8dcfbd11 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/XSS.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/XSS.expected @@ -1,72 +1,72 @@ edges -| Areas/TestArea/Views/Shared/Test18.cshtml:8:16:8:20 | access to property Model : UserData | Areas/TestArea/Views/Shared/Test18.cshtml:8:16:8:25 | access to property Name | -| Areas/TestArea/Views/Test4/Test17.cshtml:8:16:8:20 | access to property Model : UserData | Areas/TestArea/Views/Test4/Test17.cshtml:8:16:8:25 | access to property Name | -| Controllers/TestController.cs:13:41:13:48 | tainted1 : UserData | Controllers/TestController.cs:15:30:15:37 | access to parameter tainted1 : UserData | -| Controllers/TestController.cs:15:30:15:37 | access to parameter tainted1 : UserData | Views/Test/Test1.cshtml:8:16:8:20 | access to property Model : UserData | -| Controllers/TestController.cs:18:41:18:48 | tainted2 : UserData | Controllers/TestController.cs:20:30:20:37 | access to parameter tainted2 : UserData | -| Controllers/TestController.cs:20:30:20:37 | access to parameter tainted2 : UserData | Views/Shared/Test2.cshtml:8:16:8:20 | access to property Model : UserData | -| Controllers/TestController.cs:23:41:23:48 | tainted3 : UserData | Controllers/TestController.cs:25:30:25:37 | access to parameter tainted3 : UserData | -| Controllers/TestController.cs:25:30:25:37 | access to parameter tainted3 : UserData | Views/Test/Test3.cshtml:8:16:8:20 | access to property Model : UserData | -| Controllers/TestController.cs:28:41:28:48 | tainted4 : UserData | Controllers/TestController.cs:30:32:30:39 | access to parameter tainted4 : UserData | -| Controllers/TestController.cs:30:32:30:39 | access to parameter tainted4 : UserData | Views/Test/Test4.cshtml:8:16:8:20 | access to property Model : UserData | -| Controllers/TestController.cs:33:41:33:48 | tainted5 : UserData | Controllers/TestController.cs:35:39:35:46 | access to parameter tainted5 : UserData | -| Controllers/TestController.cs:35:39:35:46 | access to parameter tainted5 : UserData | Views/Other/Test5.cshtml:8:16:8:20 | access to property Model : UserData | -| Controllers/TestController.cs:38:41:38:48 | tainted6 : UserData | Controllers/TestController.cs:40:64:40:71 | access to parameter tainted6 : UserData | -| Controllers/TestController.cs:40:64:40:71 | access to parameter tainted6 : UserData | Views/Other/Test6.cshtml:8:16:8:20 | access to property Model : UserData | -| Controllers/TestController.cs:43:41:43:48 | tainted7 : UserData | Controllers/TestController.cs:45:21:45:28 | access to parameter tainted7 : UserData | -| Controllers/TestController.cs:45:21:45:28 | access to parameter tainted7 : UserData | Views/Test/Test7.cshtml:8:16:8:20 | access to property Model : UserData | -| Controllers/TestController.cs:48:41:48:48 | tainted8 : UserData | Controllers/TestController.cs:50:50:50:57 | access to parameter tainted8 : UserData | -| Controllers/TestController.cs:50:50:50:57 | access to parameter tainted8 : UserData | Views/Other/Test8.cshtml:8:16:8:20 | access to property Model : UserData | -| Controllers/TestController.cs:53:41:53:48 | tainted9 : UserData | Controllers/TestController.cs:55:51:55:58 | access to parameter tainted9 : UserData | -| Controllers/TestController.cs:55:51:55:58 | access to parameter tainted9 : UserData | Views/Other/Test9.cshtml:8:16:8:20 | access to property Model : UserData | -| Controllers/TestController.cs:60:42:60:50 | tainted10 : UserData | Controllers/TestController.cs:62:31:62:39 | access to parameter tainted10 : UserData | -| Controllers/TestController.cs:62:31:62:39 | access to parameter tainted10 : UserData | Views/Test2/Test10.cshtml:8:16:8:20 | access to property Model : UserData | -| Controllers/TestController.cs:65:42:65:50 | tainted11 : UserData | Controllers/TestController.cs:67:23:67:31 | access to parameter tainted11 : UserData | -| Controllers/TestController.cs:67:23:67:31 | access to parameter tainted11 : UserData | Controllers/TestController.cs:70:43:70:43 | x : UserData | -| Controllers/TestController.cs:70:43:70:43 | x : UserData | Controllers/TestController.cs:70:70:70:70 | access to parameter x : UserData | -| Controllers/TestController.cs:70:70:70:70 | access to parameter x : UserData | Views/Test2/Test11.cshtml:8:16:8:20 | access to property Model : UserData | -| Controllers/TestController.cs:81:42:81:50 | tainted13 : UserData | Controllers/TestController.cs:83:37:83:45 | access to parameter tainted13 : UserData | -| Controllers/TestController.cs:83:37:83:45 | access to parameter tainted13 : UserData | Controllers/TestController.cs:94:64:94:64 | x : UserData | -| Controllers/TestController.cs:86:42:86:50 | tainted14 : UserData | Controllers/TestController.cs:88:37:88:45 | access to parameter tainted14 : UserData | -| Controllers/TestController.cs:88:37:88:45 | access to parameter tainted14 : UserData | Controllers/TestController.cs:96:64:96:64 | x : UserData | -| Controllers/TestController.cs:94:64:94:64 | x : UserData | Controllers/TestController.cs:94:113:94:113 | access to parameter x : UserData | -| Controllers/TestController.cs:94:113:94:113 | access to parameter x : UserData | Views/Other/Test13.cshtml:8:16:8:20 | access to property Model : UserData | -| Controllers/TestController.cs:96:64:96:64 | x : UserData | Controllers/TestController.cs:96:93:96:93 | access to parameter x : UserData | -| Controllers/TestController.cs:96:93:96:93 | access to parameter x : UserData | Views/Shared/Test14.cshtml:8:16:8:20 | access to property Model : UserData | -| Controllers/TestController.cs:106:42:106:50 | tainted15 : UserData | Controllers/TestController.cs:108:21:108:29 | access to parameter tainted15 : UserData | -| Controllers/TestController.cs:108:21:108:29 | access to parameter tainted15 : UserData | Views/Custom/Test3/Test15.cshtml:8:16:8:20 | access to property Model : UserData | -| Controllers/TestController.cs:111:42:111:50 | tainted16 : UserData | Controllers/TestController.cs:113:31:113:39 | access to parameter tainted16 : UserData | -| Controllers/TestController.cs:113:31:113:39 | access to parameter tainted16 : UserData | Views/Custom2/Test16.cshtml:8:16:8:20 | access to property Model : UserData | -| Controllers/TestController.cs:119:42:119:50 | tainted17 : UserData | Controllers/TestController.cs:121:31:121:39 | access to parameter tainted17 : UserData | -| Controllers/TestController.cs:121:31:121:39 | access to parameter tainted17 : UserData | Areas/TestArea/Views/Test4/Test17.cshtml:8:16:8:20 | access to property Model : UserData | -| Controllers/TestController.cs:124:42:124:50 | tainted18 : UserData | Controllers/TestController.cs:126:31:126:39 | access to parameter tainted18 : UserData | -| Controllers/TestController.cs:126:31:126:39 | access to parameter tainted18 : UserData | Areas/TestArea/Views/Shared/Test18.cshtml:8:16:8:20 | access to property Model : UserData | -| Controllers/TestController.cs:129:42:129:50 | tainted19 : UserData | Controllers/TestController.cs:131:31:131:39 | access to parameter tainted19 : UserData | -| Controllers/TestController.cs:131:31:131:39 | access to parameter tainted19 : UserData | Views/Shared/Test19.cshtml:8:16:8:20 | access to property Model : UserData | -| Controllers/TestController.cs:139:42:139:50 | tainted21 : UserData | Controllers/TestController.cs:141:31:141:39 | access to parameter tainted21 : UserData | -| Controllers/TestController.cs:141:31:141:39 | access to parameter tainted21 : UserData | Pages/Shared/Test21.cshtml:8:16:8:20 | access to property Model : UserData | -| Controllers/TestController.cs:149:40:149:48 | tainted23 : String | Controllers/TestController.cs:152:18:152:26 | access to parameter tainted23 : String | -| Controllers/TestController.cs:152:9:152:9 | [post] access to local variable x : UserData [property Name] : String | Controllers/TestController.cs:153:31:153:31 | access to local variable x : UserData [property Name] : String | -| Controllers/TestController.cs:152:18:152:26 | access to parameter tainted23 : String | Controllers/TestController.cs:152:9:152:9 | [post] access to local variable x : UserData [property Name] : String | -| Controllers/TestController.cs:153:31:153:31 | access to local variable x : UserData [property Name] : String | Views/Shared/Test23.cshtml:8:16:8:20 | access to property Model : UserData [property Name] : String | -| Pages/Shared/Test21.cshtml:8:16:8:20 | access to property Model : UserData | Pages/Shared/Test21.cshtml:8:16:8:25 | access to property Name | -| Views/Custom2/Test16.cshtml:8:16:8:20 | access to property Model : UserData | Views/Custom2/Test16.cshtml:8:16:8:25 | access to property Name | -| Views/Custom/Test3/Test15.cshtml:8:16:8:20 | access to property Model : UserData | Views/Custom/Test3/Test15.cshtml:8:16:8:25 | access to property Name | -| Views/Other/Test5.cshtml:8:16:8:20 | access to property Model : UserData | Views/Other/Test5.cshtml:8:16:8:25 | access to property Name | -| Views/Other/Test6.cshtml:8:16:8:20 | access to property Model : UserData | Views/Other/Test6.cshtml:8:16:8:25 | access to property Name | -| Views/Other/Test8.cshtml:8:16:8:20 | access to property Model : UserData | Views/Other/Test8.cshtml:8:16:8:25 | access to property Name | -| Views/Other/Test9.cshtml:8:16:8:20 | access to property Model : UserData | Views/Other/Test9.cshtml:8:16:8:25 | access to property Name | -| Views/Other/Test13.cshtml:8:16:8:20 | access to property Model : UserData | Views/Other/Test13.cshtml:8:16:8:25 | access to property Name | -| Views/Shared/Test2.cshtml:8:16:8:20 | access to property Model : UserData | Views/Shared/Test2.cshtml:8:16:8:25 | access to property Name | -| Views/Shared/Test14.cshtml:8:16:8:20 | access to property Model : UserData | Views/Shared/Test14.cshtml:8:16:8:25 | access to property Name | -| Views/Shared/Test19.cshtml:8:16:8:20 | access to property Model : UserData | Views/Shared/Test19.cshtml:8:16:8:25 | access to property Name | -| Views/Shared/Test23.cshtml:8:16:8:20 | access to property Model : UserData [property Name] : String | Views/Shared/Test23.cshtml:8:16:8:25 | access to property Name | -| Views/Test2/Test10.cshtml:8:16:8:20 | access to property Model : UserData | Views/Test2/Test10.cshtml:8:16:8:25 | access to property Name | -| Views/Test2/Test11.cshtml:8:16:8:20 | access to property Model : UserData | Views/Test2/Test11.cshtml:8:16:8:25 | access to property Name | -| Views/Test/Test1.cshtml:8:16:8:20 | access to property Model : UserData | Views/Test/Test1.cshtml:8:16:8:25 | access to property Name | -| Views/Test/Test3.cshtml:8:16:8:20 | access to property Model : UserData | Views/Test/Test3.cshtml:8:16:8:25 | access to property Name | -| Views/Test/Test4.cshtml:8:16:8:20 | access to property Model : UserData | Views/Test/Test4.cshtml:8:16:8:25 | access to property Name | -| Views/Test/Test7.cshtml:8:16:8:20 | access to property Model : UserData | Views/Test/Test7.cshtml:8:16:8:25 | access to property Name | +| Areas/TestArea/Views/Shared/Test18.cshtml:8:16:8:20 | access to property Model : UserData | Areas/TestArea/Views/Shared/Test18.cshtml:8:16:8:25 | access to property Name | provenance | | +| Areas/TestArea/Views/Test4/Test17.cshtml:8:16:8:20 | access to property Model : UserData | Areas/TestArea/Views/Test4/Test17.cshtml:8:16:8:25 | access to property Name | provenance | | +| Controllers/TestController.cs:13:41:13:48 | tainted1 : UserData | Controllers/TestController.cs:15:30:15:37 | access to parameter tainted1 : UserData | provenance | | +| Controllers/TestController.cs:15:30:15:37 | access to parameter tainted1 : UserData | Views/Test/Test1.cshtml:8:16:8:20 | access to property Model : UserData | provenance | | +| Controllers/TestController.cs:18:41:18:48 | tainted2 : UserData | Controllers/TestController.cs:20:30:20:37 | access to parameter tainted2 : UserData | provenance | | +| Controllers/TestController.cs:20:30:20:37 | access to parameter tainted2 : UserData | Views/Shared/Test2.cshtml:8:16:8:20 | access to property Model : UserData | provenance | | +| Controllers/TestController.cs:23:41:23:48 | tainted3 : UserData | Controllers/TestController.cs:25:30:25:37 | access to parameter tainted3 : UserData | provenance | | +| Controllers/TestController.cs:25:30:25:37 | access to parameter tainted3 : UserData | Views/Test/Test3.cshtml:8:16:8:20 | access to property Model : UserData | provenance | | +| Controllers/TestController.cs:28:41:28:48 | tainted4 : UserData | Controllers/TestController.cs:30:32:30:39 | access to parameter tainted4 : UserData | provenance | | +| Controllers/TestController.cs:30:32:30:39 | access to parameter tainted4 : UserData | Views/Test/Test4.cshtml:8:16:8:20 | access to property Model : UserData | provenance | | +| Controllers/TestController.cs:33:41:33:48 | tainted5 : UserData | Controllers/TestController.cs:35:39:35:46 | access to parameter tainted5 : UserData | provenance | | +| Controllers/TestController.cs:35:39:35:46 | access to parameter tainted5 : UserData | Views/Other/Test5.cshtml:8:16:8:20 | access to property Model : UserData | provenance | | +| Controllers/TestController.cs:38:41:38:48 | tainted6 : UserData | Controllers/TestController.cs:40:64:40:71 | access to parameter tainted6 : UserData | provenance | | +| Controllers/TestController.cs:40:64:40:71 | access to parameter tainted6 : UserData | Views/Other/Test6.cshtml:8:16:8:20 | access to property Model : UserData | provenance | | +| Controllers/TestController.cs:43:41:43:48 | tainted7 : UserData | Controllers/TestController.cs:45:21:45:28 | access to parameter tainted7 : UserData | provenance | | +| Controllers/TestController.cs:45:21:45:28 | access to parameter tainted7 : UserData | Views/Test/Test7.cshtml:8:16:8:20 | access to property Model : UserData | provenance | | +| Controllers/TestController.cs:48:41:48:48 | tainted8 : UserData | Controllers/TestController.cs:50:50:50:57 | access to parameter tainted8 : UserData | provenance | | +| Controllers/TestController.cs:50:50:50:57 | access to parameter tainted8 : UserData | Views/Other/Test8.cshtml:8:16:8:20 | access to property Model : UserData | provenance | | +| Controllers/TestController.cs:53:41:53:48 | tainted9 : UserData | Controllers/TestController.cs:55:51:55:58 | access to parameter tainted9 : UserData | provenance | | +| Controllers/TestController.cs:55:51:55:58 | access to parameter tainted9 : UserData | Views/Other/Test9.cshtml:8:16:8:20 | access to property Model : UserData | provenance | | +| Controllers/TestController.cs:60:42:60:50 | tainted10 : UserData | Controllers/TestController.cs:62:31:62:39 | access to parameter tainted10 : UserData | provenance | | +| Controllers/TestController.cs:62:31:62:39 | access to parameter tainted10 : UserData | Views/Test2/Test10.cshtml:8:16:8:20 | access to property Model : UserData | provenance | | +| Controllers/TestController.cs:65:42:65:50 | tainted11 : UserData | Controllers/TestController.cs:67:23:67:31 | access to parameter tainted11 : UserData | provenance | | +| Controllers/TestController.cs:67:23:67:31 | access to parameter tainted11 : UserData | Controllers/TestController.cs:70:43:70:43 | x : UserData | provenance | | +| Controllers/TestController.cs:70:43:70:43 | x : UserData | Controllers/TestController.cs:70:70:70:70 | access to parameter x : UserData | provenance | | +| Controllers/TestController.cs:70:70:70:70 | access to parameter x : UserData | Views/Test2/Test11.cshtml:8:16:8:20 | access to property Model : UserData | provenance | | +| Controllers/TestController.cs:81:42:81:50 | tainted13 : UserData | Controllers/TestController.cs:83:37:83:45 | access to parameter tainted13 : UserData | provenance | | +| Controllers/TestController.cs:83:37:83:45 | access to parameter tainted13 : UserData | Controllers/TestController.cs:94:64:94:64 | x : UserData | provenance | | +| Controllers/TestController.cs:86:42:86:50 | tainted14 : UserData | Controllers/TestController.cs:88:37:88:45 | access to parameter tainted14 : UserData | provenance | | +| Controllers/TestController.cs:88:37:88:45 | access to parameter tainted14 : UserData | Controllers/TestController.cs:96:64:96:64 | x : UserData | provenance | | +| Controllers/TestController.cs:94:64:94:64 | x : UserData | Controllers/TestController.cs:94:113:94:113 | access to parameter x : UserData | provenance | | +| Controllers/TestController.cs:94:113:94:113 | access to parameter x : UserData | Views/Other/Test13.cshtml:8:16:8:20 | access to property Model : UserData | provenance | | +| Controllers/TestController.cs:96:64:96:64 | x : UserData | Controllers/TestController.cs:96:93:96:93 | access to parameter x : UserData | provenance | | +| Controllers/TestController.cs:96:93:96:93 | access to parameter x : UserData | Views/Shared/Test14.cshtml:8:16:8:20 | access to property Model : UserData | provenance | | +| Controllers/TestController.cs:106:42:106:50 | tainted15 : UserData | Controllers/TestController.cs:108:21:108:29 | access to parameter tainted15 : UserData | provenance | | +| Controllers/TestController.cs:108:21:108:29 | access to parameter tainted15 : UserData | Views/Custom/Test3/Test15.cshtml:8:16:8:20 | access to property Model : UserData | provenance | | +| Controllers/TestController.cs:111:42:111:50 | tainted16 : UserData | Controllers/TestController.cs:113:31:113:39 | access to parameter tainted16 : UserData | provenance | | +| Controllers/TestController.cs:113:31:113:39 | access to parameter tainted16 : UserData | Views/Custom2/Test16.cshtml:8:16:8:20 | access to property Model : UserData | provenance | | +| Controllers/TestController.cs:119:42:119:50 | tainted17 : UserData | Controllers/TestController.cs:121:31:121:39 | access to parameter tainted17 : UserData | provenance | | +| Controllers/TestController.cs:121:31:121:39 | access to parameter tainted17 : UserData | Areas/TestArea/Views/Test4/Test17.cshtml:8:16:8:20 | access to property Model : UserData | provenance | | +| Controllers/TestController.cs:124:42:124:50 | tainted18 : UserData | Controllers/TestController.cs:126:31:126:39 | access to parameter tainted18 : UserData | provenance | | +| Controllers/TestController.cs:126:31:126:39 | access to parameter tainted18 : UserData | Areas/TestArea/Views/Shared/Test18.cshtml:8:16:8:20 | access to property Model : UserData | provenance | | +| Controllers/TestController.cs:129:42:129:50 | tainted19 : UserData | Controllers/TestController.cs:131:31:131:39 | access to parameter tainted19 : UserData | provenance | | +| Controllers/TestController.cs:131:31:131:39 | access to parameter tainted19 : UserData | Views/Shared/Test19.cshtml:8:16:8:20 | access to property Model : UserData | provenance | | +| Controllers/TestController.cs:139:42:139:50 | tainted21 : UserData | Controllers/TestController.cs:141:31:141:39 | access to parameter tainted21 : UserData | provenance | | +| Controllers/TestController.cs:141:31:141:39 | access to parameter tainted21 : UserData | Pages/Shared/Test21.cshtml:8:16:8:20 | access to property Model : UserData | provenance | | +| Controllers/TestController.cs:149:40:149:48 | tainted23 : String | Controllers/TestController.cs:152:18:152:26 | access to parameter tainted23 : String | provenance | | +| Controllers/TestController.cs:152:9:152:9 | [post] access to local variable x : UserData [property Name] : String | Controllers/TestController.cs:153:31:153:31 | access to local variable x : UserData [property Name] : String | provenance | | +| Controllers/TestController.cs:152:18:152:26 | access to parameter tainted23 : String | Controllers/TestController.cs:152:9:152:9 | [post] access to local variable x : UserData [property Name] : String | provenance | | +| Controllers/TestController.cs:153:31:153:31 | access to local variable x : UserData [property Name] : String | Views/Shared/Test23.cshtml:8:16:8:20 | access to property Model : UserData [property Name] : String | provenance | | +| Pages/Shared/Test21.cshtml:8:16:8:20 | access to property Model : UserData | Pages/Shared/Test21.cshtml:8:16:8:25 | access to property Name | provenance | | +| Views/Custom2/Test16.cshtml:8:16:8:20 | access to property Model : UserData | Views/Custom2/Test16.cshtml:8:16:8:25 | access to property Name | provenance | | +| Views/Custom/Test3/Test15.cshtml:8:16:8:20 | access to property Model : UserData | Views/Custom/Test3/Test15.cshtml:8:16:8:25 | access to property Name | provenance | | +| Views/Other/Test5.cshtml:8:16:8:20 | access to property Model : UserData | Views/Other/Test5.cshtml:8:16:8:25 | access to property Name | provenance | | +| Views/Other/Test6.cshtml:8:16:8:20 | access to property Model : UserData | Views/Other/Test6.cshtml:8:16:8:25 | access to property Name | provenance | | +| Views/Other/Test8.cshtml:8:16:8:20 | access to property Model : UserData | Views/Other/Test8.cshtml:8:16:8:25 | access to property Name | provenance | | +| Views/Other/Test9.cshtml:8:16:8:20 | access to property Model : UserData | Views/Other/Test9.cshtml:8:16:8:25 | access to property Name | provenance | | +| Views/Other/Test13.cshtml:8:16:8:20 | access to property Model : UserData | Views/Other/Test13.cshtml:8:16:8:25 | access to property Name | provenance | | +| Views/Shared/Test2.cshtml:8:16:8:20 | access to property Model : UserData | Views/Shared/Test2.cshtml:8:16:8:25 | access to property Name | provenance | | +| Views/Shared/Test14.cshtml:8:16:8:20 | access to property Model : UserData | Views/Shared/Test14.cshtml:8:16:8:25 | access to property Name | provenance | | +| Views/Shared/Test19.cshtml:8:16:8:20 | access to property Model : UserData | Views/Shared/Test19.cshtml:8:16:8:25 | access to property Name | provenance | | +| Views/Shared/Test23.cshtml:8:16:8:20 | access to property Model : UserData [property Name] : String | Views/Shared/Test23.cshtml:8:16:8:25 | access to property Name | provenance | | +| Views/Test2/Test10.cshtml:8:16:8:20 | access to property Model : UserData | Views/Test2/Test10.cshtml:8:16:8:25 | access to property Name | provenance | | +| Views/Test2/Test11.cshtml:8:16:8:20 | access to property Model : UserData | Views/Test2/Test11.cshtml:8:16:8:25 | access to property Name | provenance | | +| Views/Test/Test1.cshtml:8:16:8:20 | access to property Model : UserData | Views/Test/Test1.cshtml:8:16:8:25 | access to property Name | provenance | | +| Views/Test/Test3.cshtml:8:16:8:20 | access to property Model : UserData | Views/Test/Test3.cshtml:8:16:8:25 | access to property Name | provenance | | +| Views/Test/Test4.cshtml:8:16:8:20 | access to property Model : UserData | Views/Test/Test4.cshtml:8:16:8:25 | access to property Name | provenance | | +| Views/Test/Test7.cshtml:8:16:8:20 | access to property Model : UserData | Views/Test/Test7.cshtml:8:16:8:25 | access to property Name | provenance | | nodes | Areas/TestArea/Views/Shared/Test18.cshtml:8:16:8:20 | access to property Model : UserData | semmle.label | access to property Model : UserData | | Areas/TestArea/Views/Shared/Test18.cshtml:8:16:8:25 | access to property Name | semmle.label | access to property Name | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XssPageModels/test.expected b/csharp/ql/test/query-tests/Security Features/CWE-079/XssPageModels/test.expected index 6806ff9abe4..b939e45a082 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XssPageModels/test.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XssPageModels/test.expected @@ -1,13 +1,13 @@ edges -| TestModel.cs:13:9:13:12 | [post] this access : TestModel [property Name] : String | TestModel.cs:14:16:14:21 | this access : TestModel [property Name] : String | -| TestModel.cs:13:21:13:28 | call to method source : String | TestModel.cs:13:9:13:12 | [post] this access : TestModel [property Name] : String | -| TestModel.cs:14:16:14:21 | this access : TestModel [property Name] : String | TestPage.cshtml.g.cs:63:35:63:48 | access to property Model : TestModel [property Name] : String | -| TestModel.cs:14:16:14:21 | this access : TestModel [property Name] : String | TestPage.cshtml:5:16:5:20 | access to property Model : TestModel [property Name] : String | -| TestModel.cs:18:9:18:12 | [post] this access : TestModel [property Name] : String | TestPage.cshtml.g.cs:63:35:63:48 | access to property Model : TestModel [property Name] : String | -| TestModel.cs:18:9:18:12 | [post] this access : TestModel [property Name] : String | TestPage.cshtml:5:16:5:20 | access to property Model : TestModel [property Name] : String | -| TestModel.cs:18:16:18:23 | call to method source : String | TestModel.cs:18:9:18:12 | [post] this access : TestModel [property Name] : String | -| TestPage.cshtml.g.cs:63:35:63:48 | access to property Model : TestModel [property Name] : String | TestPage.cshtml:5:16:5:20 | access to property Model : TestModel [property Name] : String | -| TestPage.cshtml:5:16:5:20 | access to property Model : TestModel [property Name] : String | TestPage.cshtml:5:16:5:25 | access to property Name | +| TestModel.cs:13:9:13:12 | [post] this access : TestModel [property Name] : String | TestModel.cs:14:16:14:21 | this access : TestModel [property Name] : String | provenance | | +| TestModel.cs:13:21:13:28 | call to method source : String | TestModel.cs:13:9:13:12 | [post] this access : TestModel [property Name] : String | provenance | | +| TestModel.cs:14:16:14:21 | this access : TestModel [property Name] : String | TestPage.cshtml.g.cs:63:35:63:48 | access to property Model : TestModel [property Name] : String | provenance | | +| TestModel.cs:14:16:14:21 | this access : TestModel [property Name] : String | TestPage.cshtml:5:16:5:20 | access to property Model : TestModel [property Name] : String | provenance | | +| TestModel.cs:18:9:18:12 | [post] this access : TestModel [property Name] : String | TestPage.cshtml.g.cs:63:35:63:48 | access to property Model : TestModel [property Name] : String | provenance | | +| TestModel.cs:18:9:18:12 | [post] this access : TestModel [property Name] : String | TestPage.cshtml:5:16:5:20 | access to property Model : TestModel [property Name] : String | provenance | | +| TestModel.cs:18:16:18:23 | call to method source : String | TestModel.cs:18:9:18:12 | [post] this access : TestModel [property Name] : String | provenance | | +| TestPage.cshtml.g.cs:63:35:63:48 | access to property Model : TestModel [property Name] : String | TestPage.cshtml:5:16:5:20 | access to property Model : TestModel [property Name] : String | provenance | | +| TestPage.cshtml:5:16:5:20 | access to property Model : TestModel [property Name] : String | TestPage.cshtml:5:16:5:25 | access to property Name | provenance | | nodes | TestModel.cs:13:9:13:12 | [post] this access : TestModel [property Name] : String | semmle.label | [post] this access : TestModel [property Name] : String | | TestModel.cs:13:21:13:28 | call to method source : String | semmle.label | call to method source : String | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-089/SecondOrderSqlInjection.expected b/csharp/ql/test/query-tests/Security Features/CWE-089/SecondOrderSqlInjection.expected index e6048fc656e..c2ce4a209f6 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-089/SecondOrderSqlInjection.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-089/SecondOrderSqlInjection.expected @@ -1,19 +1,19 @@ edges -| SecondOrderSqlInjection.cs:25:119:25:145 | call to method GetString : String | SecondOrderSqlInjection.cs:25:71:25:145 | ... + ... | -| SecondOrderSqlInjection.cs:33:36:33:78 | object creation of type FileStream : FileStream | SecondOrderSqlInjection.cs:35:59:35:60 | access to local variable fs : FileStream | -| SecondOrderSqlInjection.cs:35:42:35:76 | object creation of type StreamReader : StreamReader | SecondOrderSqlInjection.cs:38:35:38:36 | access to local variable sr : StreamReader | -| SecondOrderSqlInjection.cs:35:59:35:60 | access to local variable fs : FileStream | SecondOrderSqlInjection.cs:35:42:35:76 | object creation of type StreamReader : StreamReader | -| SecondOrderSqlInjection.cs:38:35:38:36 | access to local variable sr : StreamReader | SecondOrderSqlInjection.cs:38:35:38:47 | call to method ReadLine : String | -| SecondOrderSqlInjection.cs:38:35:38:47 | call to method ReadLine : String | SecondOrderSqlInjection.cs:40:31:40:33 | access to local variable sql : String | -| SecondOrderSqlInjection.cs:40:31:40:33 | access to local variable sql : String | SecondOrderSqlInjection.cs:40:31:40:40 | call to method Trim : String | -| SecondOrderSqlInjection.cs:40:31:40:40 | call to method Trim : String | SecondOrderSqlInjection.cs:45:57:45:59 | access to local variable sql | -| SqlInjectionSqlite.cs:49:36:49:84 | object creation of type FileStream : FileStream | SqlInjectionSqlite.cs:51:59:51:60 | access to local variable fs : FileStream | -| SqlInjectionSqlite.cs:51:42:51:76 | object creation of type StreamReader : StreamReader | SqlInjectionSqlite.cs:54:35:54:36 | access to local variable sr : StreamReader | -| SqlInjectionSqlite.cs:51:59:51:60 | access to local variable fs : FileStream | SqlInjectionSqlite.cs:51:42:51:76 | object creation of type StreamReader : StreamReader | -| SqlInjectionSqlite.cs:54:35:54:36 | access to local variable sr : StreamReader | SqlInjectionSqlite.cs:54:35:54:47 | call to method ReadLine : String | -| SqlInjectionSqlite.cs:54:35:54:47 | call to method ReadLine : String | SqlInjectionSqlite.cs:56:31:56:33 | access to local variable sql : String | -| SqlInjectionSqlite.cs:56:31:56:33 | access to local variable sql : String | SqlInjectionSqlite.cs:56:31:56:40 | call to method Trim : String | -| SqlInjectionSqlite.cs:56:31:56:40 | call to method Trim : String | SqlInjectionSqlite.cs:61:53:61:55 | access to local variable sql | +| SecondOrderSqlInjection.cs:25:119:25:145 | call to method GetString : String | SecondOrderSqlInjection.cs:25:71:25:145 | ... + ... | provenance | | +| SecondOrderSqlInjection.cs:33:36:33:78 | object creation of type FileStream : FileStream | SecondOrderSqlInjection.cs:35:59:35:60 | access to local variable fs : FileStream | provenance | | +| SecondOrderSqlInjection.cs:35:42:35:76 | object creation of type StreamReader : StreamReader | SecondOrderSqlInjection.cs:38:35:38:36 | access to local variable sr : StreamReader | provenance | | +| SecondOrderSqlInjection.cs:35:59:35:60 | access to local variable fs : FileStream | SecondOrderSqlInjection.cs:35:42:35:76 | object creation of type StreamReader : StreamReader | provenance | | +| SecondOrderSqlInjection.cs:38:35:38:36 | access to local variable sr : StreamReader | SecondOrderSqlInjection.cs:38:35:38:47 | call to method ReadLine : String | provenance | | +| SecondOrderSqlInjection.cs:38:35:38:47 | call to method ReadLine : String | SecondOrderSqlInjection.cs:40:31:40:33 | access to local variable sql : String | provenance | | +| SecondOrderSqlInjection.cs:40:31:40:33 | access to local variable sql : String | SecondOrderSqlInjection.cs:40:31:40:40 | call to method Trim : String | provenance | | +| SecondOrderSqlInjection.cs:40:31:40:40 | call to method Trim : String | SecondOrderSqlInjection.cs:45:57:45:59 | access to local variable sql | provenance | | +| SqlInjectionSqlite.cs:49:36:49:84 | object creation of type FileStream : FileStream | SqlInjectionSqlite.cs:51:59:51:60 | access to local variable fs : FileStream | provenance | | +| SqlInjectionSqlite.cs:51:42:51:76 | object creation of type StreamReader : StreamReader | SqlInjectionSqlite.cs:54:35:54:36 | access to local variable sr : StreamReader | provenance | | +| SqlInjectionSqlite.cs:51:59:51:60 | access to local variable fs : FileStream | SqlInjectionSqlite.cs:51:42:51:76 | object creation of type StreamReader : StreamReader | provenance | | +| SqlInjectionSqlite.cs:54:35:54:36 | access to local variable sr : StreamReader | SqlInjectionSqlite.cs:54:35:54:47 | call to method ReadLine : String | provenance | | +| SqlInjectionSqlite.cs:54:35:54:47 | call to method ReadLine : String | SqlInjectionSqlite.cs:56:31:56:33 | access to local variable sql : String | provenance | | +| SqlInjectionSqlite.cs:56:31:56:33 | access to local variable sql : String | SqlInjectionSqlite.cs:56:31:56:40 | call to method Trim : String | provenance | | +| SqlInjectionSqlite.cs:56:31:56:40 | call to method Trim : String | SqlInjectionSqlite.cs:61:53:61:55 | access to local variable sql | provenance | | nodes | SecondOrderSqlInjection.cs:25:71:25:145 | ... + ... | semmle.label | ... + ... | | SecondOrderSqlInjection.cs:25:119:25:145 | call to method GetString : String | semmle.label | call to method GetString : String | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-089/SqlInjection.expected b/csharp/ql/test/query-tests/Security Features/CWE-089/SqlInjection.expected index 888573d86b6..9ef1a073fbe 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-089/SqlInjection.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-089/SqlInjection.expected @@ -1,37 +1,37 @@ edges -| SqlInjection.cs:33:21:33:35 | access to field categoryTextBox : TextBox | SqlInjection.cs:33:21:33:40 | access to property Text : String | -| SqlInjection.cs:33:21:33:40 | access to property Text : String | SqlInjection.cs:34:50:34:55 | access to local variable query1 | -| SqlInjection.cs:68:33:68:47 | access to field categoryTextBox : TextBox | SqlInjection.cs:68:33:68:52 | access to property Text : String | -| SqlInjection.cs:68:33:68:52 | access to property Text : String | SqlInjection.cs:69:56:69:61 | access to local variable query1 | -| SqlInjection.cs:68:33:68:52 | access to property Text : String | SqlInjection.cs:70:55:70:60 | access to local variable query1 | -| SqlInjection.cs:82:21:82:29 | access to property Text : String | SqlInjection.cs:83:50:83:55 | access to local variable query1 | -| SqlInjection.cs:92:21:92:29 | access to property Text : String | SqlInjection.cs:93:42:93:52 | access to local variable queryString | -| SqlInjection.cs:92:21:92:29 | access to property Text : String | SqlInjection.cs:93:42:93:52 | access to local variable queryString : String | -| SqlInjection.cs:93:27:93:53 | object creation of type SqlCommand : SqlCommand | SqlInjection.cs:94:50:94:52 | access to local variable cmd | -| SqlInjection.cs:93:42:93:52 | access to local variable queryString : String | SqlInjection.cs:93:27:93:53 | object creation of type SqlCommand : SqlCommand | -| SqlInjectionDapper.cs:20:86:20:94 | access to property Text : String | SqlInjectionDapper.cs:21:55:21:59 | access to local variable query | -| SqlInjectionDapper.cs:29:86:29:94 | access to property Text : String | SqlInjectionDapper.cs:30:66:30:70 | access to local variable query | -| SqlInjectionDapper.cs:38:86:38:94 | access to property Text : String | SqlInjectionDapper.cs:39:63:39:67 | access to local variable query | -| SqlInjectionDapper.cs:47:86:47:94 | access to property Text : String | SqlInjectionDapper.cs:49:47:49:51 | access to local variable query | -| SqlInjectionDapper.cs:57:86:57:94 | access to property Text : String | SqlInjectionDapper.cs:58:42:58:46 | access to local variable query | -| SqlInjectionDapper.cs:66:86:66:94 | access to property Text : String | SqlInjectionDapper.cs:67:42:67:46 | access to local variable query | -| SqlInjectionDapper.cs:75:86:75:94 | access to property Text : String | SqlInjectionDapper.cs:77:52:77:56 | access to local variable query | -| SqlInjectionSqlite.cs:19:51:19:63 | access to field untrustedData : TextBox | SqlInjectionSqlite.cs:19:51:19:68 | access to property Text | -| SqlInjectionSqlite.cs:24:23:24:71 | object creation of type SQLiteCommand : SQLiteCommand | SqlInjectionSqlite.cs:44:45:44:47 | access to local variable cmd | -| SqlInjectionSqlite.cs:24:41:24:53 | access to field untrustedData : TextBox | SqlInjectionSqlite.cs:24:41:24:58 | access to property Text | -| SqlInjectionSqlite.cs:24:41:24:53 | access to field untrustedData : TextBox | SqlInjectionSqlite.cs:24:41:24:58 | access to property Text : String | -| SqlInjectionSqlite.cs:24:41:24:58 | access to property Text : String | SqlInjectionSqlite.cs:24:23:24:71 | object creation of type SQLiteCommand : SQLiteCommand | -| SqlInjectionSqlite.cs:33:49:33:61 | access to field untrustedData : TextBox | SqlInjectionSqlite.cs:33:49:33:66 | access to property Text | -| SqlInjectionSqlite.cs:39:45:39:57 | access to field untrustedData : TextBox | SqlInjectionSqlite.cs:39:45:39:62 | access to property Text | -| SqlInjectionSqlite.cs:49:36:49:84 | object creation of type FileStream : FileStream | SqlInjectionSqlite.cs:51:59:51:60 | access to local variable fs : FileStream | -| SqlInjectionSqlite.cs:49:51:49:63 | access to field untrustedData : TextBox | SqlInjectionSqlite.cs:49:51:49:68 | access to property Text : String | -| SqlInjectionSqlite.cs:49:51:49:68 | access to property Text : String | SqlInjectionSqlite.cs:49:36:49:84 | object creation of type FileStream : FileStream | -| SqlInjectionSqlite.cs:51:42:51:76 | object creation of type StreamReader : StreamReader | SqlInjectionSqlite.cs:54:35:54:36 | access to local variable sr : StreamReader | -| SqlInjectionSqlite.cs:51:59:51:60 | access to local variable fs : FileStream | SqlInjectionSqlite.cs:51:42:51:76 | object creation of type StreamReader : StreamReader | -| SqlInjectionSqlite.cs:54:35:54:36 | access to local variable sr : StreamReader | SqlInjectionSqlite.cs:54:35:54:47 | call to method ReadLine : String | -| SqlInjectionSqlite.cs:54:35:54:47 | call to method ReadLine : String | SqlInjectionSqlite.cs:56:31:56:33 | access to local variable sql : String | -| SqlInjectionSqlite.cs:56:31:56:33 | access to local variable sql : String | SqlInjectionSqlite.cs:56:31:56:40 | call to method Trim : String | -| SqlInjectionSqlite.cs:56:31:56:40 | call to method Trim : String | SqlInjectionSqlite.cs:61:53:61:55 | access to local variable sql | +| SqlInjection.cs:33:21:33:35 | access to field categoryTextBox : TextBox | SqlInjection.cs:33:21:33:40 | access to property Text : String | provenance | | +| SqlInjection.cs:33:21:33:40 | access to property Text : String | SqlInjection.cs:34:50:34:55 | access to local variable query1 | provenance | | +| SqlInjection.cs:68:33:68:47 | access to field categoryTextBox : TextBox | SqlInjection.cs:68:33:68:52 | access to property Text : String | provenance | | +| SqlInjection.cs:68:33:68:52 | access to property Text : String | SqlInjection.cs:69:56:69:61 | access to local variable query1 | provenance | | +| SqlInjection.cs:68:33:68:52 | access to property Text : String | SqlInjection.cs:70:55:70:60 | access to local variable query1 | provenance | | +| SqlInjection.cs:82:21:82:29 | access to property Text : String | SqlInjection.cs:83:50:83:55 | access to local variable query1 | provenance | | +| SqlInjection.cs:92:21:92:29 | access to property Text : String | SqlInjection.cs:93:42:93:52 | access to local variable queryString | provenance | | +| SqlInjection.cs:92:21:92:29 | access to property Text : String | SqlInjection.cs:93:42:93:52 | access to local variable queryString : String | provenance | | +| SqlInjection.cs:93:27:93:53 | object creation of type SqlCommand : SqlCommand | SqlInjection.cs:94:50:94:52 | access to local variable cmd | provenance | | +| SqlInjection.cs:93:42:93:52 | access to local variable queryString : String | SqlInjection.cs:93:27:93:53 | object creation of type SqlCommand : SqlCommand | provenance | | +| SqlInjectionDapper.cs:20:86:20:94 | access to property Text : String | SqlInjectionDapper.cs:21:55:21:59 | access to local variable query | provenance | | +| SqlInjectionDapper.cs:29:86:29:94 | access to property Text : String | SqlInjectionDapper.cs:30:66:30:70 | access to local variable query | provenance | | +| SqlInjectionDapper.cs:38:86:38:94 | access to property Text : String | SqlInjectionDapper.cs:39:63:39:67 | access to local variable query | provenance | | +| SqlInjectionDapper.cs:47:86:47:94 | access to property Text : String | SqlInjectionDapper.cs:49:47:49:51 | access to local variable query | provenance | | +| SqlInjectionDapper.cs:57:86:57:94 | access to property Text : String | SqlInjectionDapper.cs:58:42:58:46 | access to local variable query | provenance | | +| SqlInjectionDapper.cs:66:86:66:94 | access to property Text : String | SqlInjectionDapper.cs:67:42:67:46 | access to local variable query | provenance | | +| SqlInjectionDapper.cs:75:86:75:94 | access to property Text : String | SqlInjectionDapper.cs:77:52:77:56 | access to local variable query | provenance | | +| SqlInjectionSqlite.cs:19:51:19:63 | access to field untrustedData : TextBox | SqlInjectionSqlite.cs:19:51:19:68 | access to property Text | provenance | | +| SqlInjectionSqlite.cs:24:23:24:71 | object creation of type SQLiteCommand : SQLiteCommand | SqlInjectionSqlite.cs:44:45:44:47 | access to local variable cmd | provenance | | +| SqlInjectionSqlite.cs:24:41:24:53 | access to field untrustedData : TextBox | SqlInjectionSqlite.cs:24:41:24:58 | access to property Text | provenance | | +| SqlInjectionSqlite.cs:24:41:24:53 | access to field untrustedData : TextBox | SqlInjectionSqlite.cs:24:41:24:58 | access to property Text : String | provenance | | +| SqlInjectionSqlite.cs:24:41:24:58 | access to property Text : String | SqlInjectionSqlite.cs:24:23:24:71 | object creation of type SQLiteCommand : SQLiteCommand | provenance | | +| SqlInjectionSqlite.cs:33:49:33:61 | access to field untrustedData : TextBox | SqlInjectionSqlite.cs:33:49:33:66 | access to property Text | provenance | | +| SqlInjectionSqlite.cs:39:45:39:57 | access to field untrustedData : TextBox | SqlInjectionSqlite.cs:39:45:39:62 | access to property Text | provenance | | +| SqlInjectionSqlite.cs:49:36:49:84 | object creation of type FileStream : FileStream | SqlInjectionSqlite.cs:51:59:51:60 | access to local variable fs : FileStream | provenance | | +| SqlInjectionSqlite.cs:49:51:49:63 | access to field untrustedData : TextBox | SqlInjectionSqlite.cs:49:51:49:68 | access to property Text : String | provenance | | +| SqlInjectionSqlite.cs:49:51:49:68 | access to property Text : String | SqlInjectionSqlite.cs:49:36:49:84 | object creation of type FileStream : FileStream | provenance | | +| SqlInjectionSqlite.cs:51:42:51:76 | object creation of type StreamReader : StreamReader | SqlInjectionSqlite.cs:54:35:54:36 | access to local variable sr : StreamReader | provenance | | +| SqlInjectionSqlite.cs:51:59:51:60 | access to local variable fs : FileStream | SqlInjectionSqlite.cs:51:42:51:76 | object creation of type StreamReader : StreamReader | provenance | | +| SqlInjectionSqlite.cs:54:35:54:36 | access to local variable sr : StreamReader | SqlInjectionSqlite.cs:54:35:54:47 | call to method ReadLine : String | provenance | | +| SqlInjectionSqlite.cs:54:35:54:47 | call to method ReadLine : String | SqlInjectionSqlite.cs:56:31:56:33 | access to local variable sql : String | provenance | | +| SqlInjectionSqlite.cs:56:31:56:33 | access to local variable sql : String | SqlInjectionSqlite.cs:56:31:56:40 | call to method Trim : String | provenance | | +| SqlInjectionSqlite.cs:56:31:56:40 | call to method Trim : String | SqlInjectionSqlite.cs:61:53:61:55 | access to local variable sql | provenance | | nodes | SqlInjection.cs:33:21:33:35 | access to field categoryTextBox : TextBox | semmle.label | access to field categoryTextBox : TextBox | | SqlInjection.cs:33:21:33:40 | access to property Text : String | semmle.label | access to property Text : String | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-090/LDAPInjection.expected b/csharp/ql/test/query-tests/Security Features/CWE-090/LDAPInjection.expected index 0699a17d531..ec812749311 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-090/LDAPInjection.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-090/LDAPInjection.expected @@ -1,17 +1,17 @@ edges -| LDAPInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:11:27:11:61 | access to indexer : String | -| LDAPInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:14:54:14:78 | ... + ... | -| LDAPInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:16:21:16:45 | ... + ... | -| LDAPInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:23:21:23:45 | ... + ... | -| LDAPInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:24:53:24:77 | ... + ... | -| LDAPInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:27:48:27:70 | ... + ... | -| LDAPInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:29:20:29:42 | ... + ... | -| LDAPInjection.cs:11:27:11:61 | access to indexer : String | LDAPInjection.cs:14:54:14:78 | ... + ... | -| LDAPInjection.cs:11:27:11:61 | access to indexer : String | LDAPInjection.cs:16:21:16:45 | ... + ... | -| LDAPInjection.cs:11:27:11:61 | access to indexer : String | LDAPInjection.cs:23:21:23:45 | ... + ... | -| LDAPInjection.cs:11:27:11:61 | access to indexer : String | LDAPInjection.cs:24:53:24:77 | ... + ... | -| LDAPInjection.cs:11:27:11:61 | access to indexer : String | LDAPInjection.cs:27:48:27:70 | ... + ... | -| LDAPInjection.cs:11:27:11:61 | access to indexer : String | LDAPInjection.cs:29:20:29:42 | ... + ... | +| LDAPInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:11:27:11:61 | access to indexer : String | provenance | | +| LDAPInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:14:54:14:78 | ... + ... | provenance | | +| LDAPInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:16:21:16:45 | ... + ... | provenance | | +| LDAPInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:23:21:23:45 | ... + ... | provenance | | +| LDAPInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:24:53:24:77 | ... + ... | provenance | | +| LDAPInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:27:48:27:70 | ... + ... | provenance | | +| LDAPInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:29:20:29:42 | ... + ... | provenance | | +| LDAPInjection.cs:11:27:11:61 | access to indexer : String | LDAPInjection.cs:14:54:14:78 | ... + ... | provenance | | +| LDAPInjection.cs:11:27:11:61 | access to indexer : String | LDAPInjection.cs:16:21:16:45 | ... + ... | provenance | | +| LDAPInjection.cs:11:27:11:61 | access to indexer : String | LDAPInjection.cs:23:21:23:45 | ... + ... | provenance | | +| LDAPInjection.cs:11:27:11:61 | access to indexer : String | LDAPInjection.cs:24:53:24:77 | ... + ... | provenance | | +| LDAPInjection.cs:11:27:11:61 | access to indexer : String | LDAPInjection.cs:27:48:27:70 | ... + ... | provenance | | +| LDAPInjection.cs:11:27:11:61 | access to indexer : String | LDAPInjection.cs:29:20:29:42 | ... + ... | provenance | | nodes | LDAPInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | | LDAPInjection.cs:11:27:11:61 | access to indexer : String | semmle.label | access to indexer : String | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-090/StoredLDAPInjection.expected b/csharp/ql/test/query-tests/Security Features/CWE-090/StoredLDAPInjection.expected index 34e5ef3dc99..d66714c82cc 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-090/StoredLDAPInjection.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-090/StoredLDAPInjection.expected @@ -1,5 +1,5 @@ edges -| StoredLDAPInjection.cs:22:83:22:109 | call to method GetString : String | StoredLDAPInjection.cs:22:66:22:109 | ... + ... | +| StoredLDAPInjection.cs:22:83:22:109 | call to method GetString : String | StoredLDAPInjection.cs:22:66:22:109 | ... + ... | provenance | | nodes | StoredLDAPInjection.cs:22:66:22:109 | ... + ... | semmle.label | ... + ... | | StoredLDAPInjection.cs:22:83:22:109 | call to method GetString : String | semmle.label | call to method GetString : String | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-091/XMLInjection/XMLInjection.expected b/csharp/ql/test/query-tests/Security Features/CWE-091/XMLInjection/XMLInjection.expected index 63b1d336449..028af79c5df 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-091/XMLInjection/XMLInjection.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-091/XMLInjection/XMLInjection.expected @@ -1,7 +1,7 @@ edges -| Test.cs:8:27:8:49 | access to property QueryString : NameValueCollection | Test.cs:8:27:8:65 | access to indexer : String | -| Test.cs:8:27:8:49 | access to property QueryString : NameValueCollection | Test.cs:15:25:15:80 | ... + ... | -| Test.cs:8:27:8:65 | access to indexer : String | Test.cs:15:25:15:80 | ... + ... | +| Test.cs:8:27:8:49 | access to property QueryString : NameValueCollection | Test.cs:8:27:8:65 | access to indexer : String | provenance | | +| Test.cs:8:27:8:49 | access to property QueryString : NameValueCollection | Test.cs:15:25:15:80 | ... + ... | provenance | | +| Test.cs:8:27:8:65 | access to indexer : String | Test.cs:15:25:15:80 | ... + ... | provenance | | nodes | Test.cs:8:27:8:49 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | | Test.cs:8:27:8:65 | access to indexer : String | semmle.label | access to indexer : String | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-094/CodeInjection.expected b/csharp/ql/test/query-tests/Security Features/CWE-094/CodeInjection.expected index 006ca27fdd7..f247e97bc35 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-094/CodeInjection.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-094/CodeInjection.expected @@ -1,9 +1,9 @@ edges -| CodeInjection.cs:23:23:23:45 | access to property QueryString : NameValueCollection | CodeInjection.cs:23:23:23:53 | access to indexer : String | -| CodeInjection.cs:23:23:23:45 | access to property QueryString : NameValueCollection | CodeInjection.cs:29:64:29:67 | access to local variable code | -| CodeInjection.cs:23:23:23:45 | access to property QueryString : NameValueCollection | CodeInjection.cs:40:36:40:39 | access to local variable code | -| CodeInjection.cs:23:23:23:53 | access to indexer : String | CodeInjection.cs:29:64:29:67 | access to local variable code | -| CodeInjection.cs:23:23:23:53 | access to indexer : String | CodeInjection.cs:40:36:40:39 | access to local variable code | +| CodeInjection.cs:23:23:23:45 | access to property QueryString : NameValueCollection | CodeInjection.cs:23:23:23:53 | access to indexer : String | provenance | | +| CodeInjection.cs:23:23:23:45 | access to property QueryString : NameValueCollection | CodeInjection.cs:29:64:29:67 | access to local variable code | provenance | | +| CodeInjection.cs:23:23:23:45 | access to property QueryString : NameValueCollection | CodeInjection.cs:40:36:40:39 | access to local variable code | provenance | | +| CodeInjection.cs:23:23:23:53 | access to indexer : String | CodeInjection.cs:29:64:29:67 | access to local variable code | provenance | | +| CodeInjection.cs:23:23:23:53 | access to indexer : String | CodeInjection.cs:40:36:40:39 | access to local variable code | provenance | | nodes | CodeInjection.cs:23:23:23:45 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | | CodeInjection.cs:23:23:23:53 | access to indexer : String | semmle.label | access to indexer : String | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-099/ResourceInjection.expected b/csharp/ql/test/query-tests/Security Features/CWE-099/ResourceInjection.expected index 75ef7285557..cc089c9898b 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-099/ResourceInjection.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-099/ResourceInjection.expected @@ -1,9 +1,9 @@ edges -| ResourceInjection.cs:8:27:8:49 | access to property QueryString : NameValueCollection | ResourceInjection.cs:8:27:8:61 | access to indexer : String | -| ResourceInjection.cs:8:27:8:49 | access to property QueryString : NameValueCollection | ResourceInjection.cs:11:57:11:72 | access to local variable connectionString | -| ResourceInjection.cs:8:27:8:49 | access to property QueryString : NameValueCollection | ResourceInjection.cs:13:42:13:57 | access to local variable connectionString | -| ResourceInjection.cs:8:27:8:61 | access to indexer : String | ResourceInjection.cs:11:57:11:72 | access to local variable connectionString | -| ResourceInjection.cs:8:27:8:61 | access to indexer : String | ResourceInjection.cs:13:42:13:57 | access to local variable connectionString | +| ResourceInjection.cs:8:27:8:49 | access to property QueryString : NameValueCollection | ResourceInjection.cs:8:27:8:61 | access to indexer : String | provenance | | +| ResourceInjection.cs:8:27:8:49 | access to property QueryString : NameValueCollection | ResourceInjection.cs:11:57:11:72 | access to local variable connectionString | provenance | | +| ResourceInjection.cs:8:27:8:49 | access to property QueryString : NameValueCollection | ResourceInjection.cs:13:42:13:57 | access to local variable connectionString | provenance | | +| ResourceInjection.cs:8:27:8:61 | access to indexer : String | ResourceInjection.cs:11:57:11:72 | access to local variable connectionString | provenance | | +| ResourceInjection.cs:8:27:8:61 | access to indexer : String | ResourceInjection.cs:13:42:13:57 | access to local variable connectionString | provenance | | nodes | ResourceInjection.cs:8:27:8:49 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | | ResourceInjection.cs:8:27:8:61 | access to indexer : String | semmle.label | access to indexer : String | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-112/MissingXMLValidation.expected b/csharp/ql/test/query-tests/Security Features/CWE-112/MissingXMLValidation.expected index 869daaa60cb..72d5d497820 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-112/MissingXMLValidation.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-112/MissingXMLValidation.expected @@ -1,20 +1,20 @@ edges -| MissingXMLValidation.cs:12:34:12:56 | access to property QueryString : NameValueCollection | MissingXMLValidation.cs:12:34:12:75 | access to indexer : String | -| MissingXMLValidation.cs:12:34:12:56 | access to property QueryString : NameValueCollection | MissingXMLValidation.cs:16:43:16:57 | access to local variable userProvidedXml : String | -| MissingXMLValidation.cs:12:34:12:56 | access to property QueryString : NameValueCollection | MissingXMLValidation.cs:21:43:21:57 | access to local variable userProvidedXml : String | -| MissingXMLValidation.cs:12:34:12:56 | access to property QueryString : NameValueCollection | MissingXMLValidation.cs:27:43:27:57 | access to local variable userProvidedXml : String | -| MissingXMLValidation.cs:12:34:12:56 | access to property QueryString : NameValueCollection | MissingXMLValidation.cs:35:43:35:57 | access to local variable userProvidedXml : String | -| MissingXMLValidation.cs:12:34:12:56 | access to property QueryString : NameValueCollection | MissingXMLValidation.cs:45:43:45:57 | access to local variable userProvidedXml : String | -| MissingXMLValidation.cs:12:34:12:75 | access to indexer : String | MissingXMLValidation.cs:16:43:16:57 | access to local variable userProvidedXml : String | -| MissingXMLValidation.cs:12:34:12:75 | access to indexer : String | MissingXMLValidation.cs:21:43:21:57 | access to local variable userProvidedXml : String | -| MissingXMLValidation.cs:12:34:12:75 | access to indexer : String | MissingXMLValidation.cs:27:43:27:57 | access to local variable userProvidedXml : String | -| MissingXMLValidation.cs:12:34:12:75 | access to indexer : String | MissingXMLValidation.cs:35:43:35:57 | access to local variable userProvidedXml : String | -| MissingXMLValidation.cs:12:34:12:75 | access to indexer : String | MissingXMLValidation.cs:45:43:45:57 | access to local variable userProvidedXml : String | -| MissingXMLValidation.cs:16:43:16:57 | access to local variable userProvidedXml : String | MissingXMLValidation.cs:16:26:16:58 | object creation of type StringReader | -| MissingXMLValidation.cs:21:43:21:57 | access to local variable userProvidedXml : String | MissingXMLValidation.cs:21:26:21:58 | object creation of type StringReader | -| MissingXMLValidation.cs:27:43:27:57 | access to local variable userProvidedXml : String | MissingXMLValidation.cs:27:26:27:58 | object creation of type StringReader | -| MissingXMLValidation.cs:35:43:35:57 | access to local variable userProvidedXml : String | MissingXMLValidation.cs:35:26:35:58 | object creation of type StringReader | -| MissingXMLValidation.cs:45:43:45:57 | access to local variable userProvidedXml : String | MissingXMLValidation.cs:45:26:45:58 | object creation of type StringReader | +| MissingXMLValidation.cs:12:34:12:56 | access to property QueryString : NameValueCollection | MissingXMLValidation.cs:12:34:12:75 | access to indexer : String | provenance | | +| MissingXMLValidation.cs:12:34:12:56 | access to property QueryString : NameValueCollection | MissingXMLValidation.cs:16:43:16:57 | access to local variable userProvidedXml : String | provenance | | +| MissingXMLValidation.cs:12:34:12:56 | access to property QueryString : NameValueCollection | MissingXMLValidation.cs:21:43:21:57 | access to local variable userProvidedXml : String | provenance | | +| MissingXMLValidation.cs:12:34:12:56 | access to property QueryString : NameValueCollection | MissingXMLValidation.cs:27:43:27:57 | access to local variable userProvidedXml : String | provenance | | +| MissingXMLValidation.cs:12:34:12:56 | access to property QueryString : NameValueCollection | MissingXMLValidation.cs:35:43:35:57 | access to local variable userProvidedXml : String | provenance | | +| MissingXMLValidation.cs:12:34:12:56 | access to property QueryString : NameValueCollection | MissingXMLValidation.cs:45:43:45:57 | access to local variable userProvidedXml : String | provenance | | +| MissingXMLValidation.cs:12:34:12:75 | access to indexer : String | MissingXMLValidation.cs:16:43:16:57 | access to local variable userProvidedXml : String | provenance | | +| MissingXMLValidation.cs:12:34:12:75 | access to indexer : String | MissingXMLValidation.cs:21:43:21:57 | access to local variable userProvidedXml : String | provenance | | +| MissingXMLValidation.cs:12:34:12:75 | access to indexer : String | MissingXMLValidation.cs:27:43:27:57 | access to local variable userProvidedXml : String | provenance | | +| MissingXMLValidation.cs:12:34:12:75 | access to indexer : String | MissingXMLValidation.cs:35:43:35:57 | access to local variable userProvidedXml : String | provenance | | +| MissingXMLValidation.cs:12:34:12:75 | access to indexer : String | MissingXMLValidation.cs:45:43:45:57 | access to local variable userProvidedXml : String | provenance | | +| MissingXMLValidation.cs:16:43:16:57 | access to local variable userProvidedXml : String | MissingXMLValidation.cs:16:26:16:58 | object creation of type StringReader | provenance | | +| MissingXMLValidation.cs:21:43:21:57 | access to local variable userProvidedXml : String | MissingXMLValidation.cs:21:26:21:58 | object creation of type StringReader | provenance | | +| MissingXMLValidation.cs:27:43:27:57 | access to local variable userProvidedXml : String | MissingXMLValidation.cs:27:26:27:58 | object creation of type StringReader | provenance | | +| MissingXMLValidation.cs:35:43:35:57 | access to local variable userProvidedXml : String | MissingXMLValidation.cs:35:26:35:58 | object creation of type StringReader | provenance | | +| MissingXMLValidation.cs:45:43:45:57 | access to local variable userProvidedXml : String | MissingXMLValidation.cs:45:26:45:58 | object creation of type StringReader | provenance | | nodes | MissingXMLValidation.cs:12:34:12:56 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | | MissingXMLValidation.cs:12:34:12:75 | access to indexer : String | semmle.label | access to indexer : String | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-114/AssemblyPathInjection/AssemblyPathInjection.expected b/csharp/ql/test/query-tests/Security Features/CWE-114/AssemblyPathInjection/AssemblyPathInjection.expected index 396d766c3e6..a13b0d64004 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-114/AssemblyPathInjection/AssemblyPathInjection.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-114/AssemblyPathInjection/AssemblyPathInjection.expected @@ -1,7 +1,7 @@ edges -| Test.cs:7:26:7:48 | access to property QueryString : NameValueCollection | Test.cs:7:26:7:63 | access to indexer : String | -| Test.cs:7:26:7:48 | access to property QueryString : NameValueCollection | Test.cs:10:36:10:46 | access to local variable libraryName | -| Test.cs:7:26:7:63 | access to indexer : String | Test.cs:10:36:10:46 | access to local variable libraryName | +| Test.cs:7:26:7:48 | access to property QueryString : NameValueCollection | Test.cs:7:26:7:63 | access to indexer : String | provenance | | +| Test.cs:7:26:7:48 | access to property QueryString : NameValueCollection | Test.cs:10:36:10:46 | access to local variable libraryName | provenance | | +| Test.cs:7:26:7:63 | access to indexer : String | Test.cs:10:36:10:46 | access to local variable libraryName | provenance | | nodes | Test.cs:7:26:7:48 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | | Test.cs:7:26:7:63 | access to indexer : String | semmle.label | access to indexer : String | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-117/LogForging.expected b/csharp/ql/test/query-tests/Security Features/CWE-117/LogForging.expected index 4e863739f34..b01941c6d39 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-117/LogForging.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-117/LogForging.expected @@ -1,12 +1,12 @@ edges -| LogForging.cs:18:27:18:49 | access to property QueryString : NameValueCollection | LogForging.cs:18:27:18:61 | access to indexer : String | -| LogForging.cs:18:27:18:49 | access to property QueryString : NameValueCollection | LogForging.cs:21:21:21:43 | ... + ... | -| LogForging.cs:18:27:18:49 | access to property QueryString : NameValueCollection | LogForging.cs:29:50:29:72 | ... + ... | -| LogForging.cs:18:27:18:49 | access to property QueryString : NameValueCollection | LogForging.cs:33:26:33:33 | access to local variable username | -| LogForging.cs:18:27:18:61 | access to indexer : String | LogForging.cs:21:21:21:43 | ... + ... | -| LogForging.cs:18:27:18:61 | access to indexer : String | LogForging.cs:29:50:29:72 | ... + ... | -| LogForging.cs:18:27:18:61 | access to indexer : String | LogForging.cs:33:26:33:33 | access to local variable username | -| LogForgingAsp.cs:8:32:8:39 | username : String | LogForgingAsp.cs:12:21:12:43 | ... + ... | +| LogForging.cs:18:27:18:49 | access to property QueryString : NameValueCollection | LogForging.cs:18:27:18:61 | access to indexer : String | provenance | | +| LogForging.cs:18:27:18:49 | access to property QueryString : NameValueCollection | LogForging.cs:21:21:21:43 | ... + ... | provenance | | +| LogForging.cs:18:27:18:49 | access to property QueryString : NameValueCollection | LogForging.cs:29:50:29:72 | ... + ... | provenance | | +| LogForging.cs:18:27:18:49 | access to property QueryString : NameValueCollection | LogForging.cs:33:26:33:33 | access to local variable username | provenance | | +| LogForging.cs:18:27:18:61 | access to indexer : String | LogForging.cs:21:21:21:43 | ... + ... | provenance | | +| LogForging.cs:18:27:18:61 | access to indexer : String | LogForging.cs:29:50:29:72 | ... + ... | provenance | | +| LogForging.cs:18:27:18:61 | access to indexer : String | LogForging.cs:33:26:33:33 | access to local variable username | provenance | | +| LogForgingAsp.cs:8:32:8:39 | username : String | LogForgingAsp.cs:12:21:12:43 | ... + ... | provenance | | nodes | LogForging.cs:18:27:18:49 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | | LogForging.cs:18:27:18:61 | access to indexer : String | semmle.label | access to indexer : String | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-134/UncontrolledFormatString.expected b/csharp/ql/test/query-tests/Security Features/CWE-134/UncontrolledFormatString.expected index 5945b83d635..9ae706885f6 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-134/UncontrolledFormatString.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-134/UncontrolledFormatString.expected @@ -1,13 +1,13 @@ edges -| ConsoleUncontrolledFormatString.cs:8:22:8:39 | call to method ReadLine : String | ConsoleUncontrolledFormatString.cs:11:31:11:36 | access to local variable format | -| UncontrolledFormatString.cs:9:23:9:45 | access to property QueryString : NameValueCollection | UncontrolledFormatString.cs:9:23:9:53 | access to indexer : String | -| UncontrolledFormatString.cs:9:23:9:45 | access to property QueryString : NameValueCollection | UncontrolledFormatString.cs:12:23:12:26 | access to local variable path | -| UncontrolledFormatString.cs:9:23:9:45 | access to property QueryString : NameValueCollection | UncontrolledFormatString.cs:15:46:15:49 | access to local variable path | -| UncontrolledFormatString.cs:9:23:9:53 | access to indexer : String | UncontrolledFormatString.cs:12:23:12:26 | access to local variable path | -| UncontrolledFormatString.cs:9:23:9:53 | access to indexer : String | UncontrolledFormatString.cs:15:46:15:49 | access to local variable path | -| UncontrolledFormatStringBad.cs:9:25:9:47 | access to property QueryString : NameValueCollection | UncontrolledFormatStringBad.cs:9:25:9:61 | access to indexer : String | -| UncontrolledFormatStringBad.cs:9:25:9:47 | access to property QueryString : NameValueCollection | UncontrolledFormatStringBad.cs:12:39:12:44 | access to local variable format | -| UncontrolledFormatStringBad.cs:9:25:9:61 | access to indexer : String | UncontrolledFormatStringBad.cs:12:39:12:44 | access to local variable format | +| ConsoleUncontrolledFormatString.cs:8:22:8:39 | call to method ReadLine : String | ConsoleUncontrolledFormatString.cs:11:31:11:36 | access to local variable format | provenance | | +| UncontrolledFormatString.cs:9:23:9:45 | access to property QueryString : NameValueCollection | UncontrolledFormatString.cs:9:23:9:53 | access to indexer : String | provenance | | +| UncontrolledFormatString.cs:9:23:9:45 | access to property QueryString : NameValueCollection | UncontrolledFormatString.cs:12:23:12:26 | access to local variable path | provenance | | +| UncontrolledFormatString.cs:9:23:9:45 | access to property QueryString : NameValueCollection | UncontrolledFormatString.cs:15:46:15:49 | access to local variable path | provenance | | +| UncontrolledFormatString.cs:9:23:9:53 | access to indexer : String | UncontrolledFormatString.cs:12:23:12:26 | access to local variable path | provenance | | +| UncontrolledFormatString.cs:9:23:9:53 | access to indexer : String | UncontrolledFormatString.cs:15:46:15:49 | access to local variable path | provenance | | +| UncontrolledFormatStringBad.cs:9:25:9:47 | access to property QueryString : NameValueCollection | UncontrolledFormatStringBad.cs:9:25:9:61 | access to indexer : String | provenance | | +| UncontrolledFormatStringBad.cs:9:25:9:47 | access to property QueryString : NameValueCollection | UncontrolledFormatStringBad.cs:12:39:12:44 | access to local variable format | provenance | | +| UncontrolledFormatStringBad.cs:9:25:9:61 | access to indexer : String | UncontrolledFormatStringBad.cs:12:39:12:44 | access to local variable format | provenance | | nodes | ConsoleUncontrolledFormatString.cs:8:22:8:39 | call to method ReadLine : String | semmle.label | call to method ReadLine : String | | ConsoleUncontrolledFormatString.cs:11:31:11:36 | access to local variable format | semmle.label | access to local variable format | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-201/ExposureInTransmittedData/ExposureInTransmittedData.expected b/csharp/ql/test/query-tests/Security Features/CWE-201/ExposureInTransmittedData/ExposureInTransmittedData.expected index 9399dd0a6eb..9a1d6036ad7 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-201/ExposureInTransmittedData/ExposureInTransmittedData.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-201/ExposureInTransmittedData/ExposureInTransmittedData.expected @@ -1,9 +1,9 @@ edges -| ExposureInTransmittedData.cs:24:32:24:38 | access to property Data : IDictionary | ExposureInTransmittedData.cs:24:32:24:50 | access to indexer | -| ExposureInTransmittedData.cs:30:17:30:36 | call to method GetField : String | ExposureInTransmittedData.cs:31:53:31:53 | access to local variable p | -| ExposureInTransmittedData.cs:30:17:30:36 | call to method GetField : String | ExposureInTransmittedData.cs:31:56:31:56 | access to local variable p | -| ExposureInTransmittedData.cs:30:17:30:36 | call to method GetField : String | ExposureInTransmittedData.cs:32:24:32:52 | ... + ... | -| ExposureInTransmittedData.cs:30:17:30:36 | call to method GetField : String | ExposureInTransmittedData.cs:33:27:33:27 | access to local variable p | +| ExposureInTransmittedData.cs:24:32:24:38 | access to property Data : IDictionary | ExposureInTransmittedData.cs:24:32:24:50 | access to indexer | provenance | | +| ExposureInTransmittedData.cs:30:17:30:36 | call to method GetField : String | ExposureInTransmittedData.cs:31:53:31:53 | access to local variable p | provenance | | +| ExposureInTransmittedData.cs:30:17:30:36 | call to method GetField : String | ExposureInTransmittedData.cs:31:56:31:56 | access to local variable p | provenance | | +| ExposureInTransmittedData.cs:30:17:30:36 | call to method GetField : String | ExposureInTransmittedData.cs:32:24:32:52 | ... + ... | provenance | | +| ExposureInTransmittedData.cs:30:17:30:36 | call to method GetField : String | ExposureInTransmittedData.cs:33:27:33:27 | access to local variable p | provenance | | nodes | ExposureInTransmittedData.cs:14:32:14:39 | access to local variable password | semmle.label | access to local variable password | | ExposureInTransmittedData.cs:18:32:18:44 | call to method ToString | semmle.label | call to method ToString | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-209/ExceptionInformationExposure.expected b/csharp/ql/test/query-tests/Security Features/CWE-209/ExceptionInformationExposure.expected index 3e273ef83b8..4ba1ed42f1d 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-209/ExceptionInformationExposure.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-209/ExceptionInformationExposure.expected @@ -1,10 +1,10 @@ edges -| ExceptionInformationExposure.cs:19:32:19:33 | access to local variable ex : Exception | ExceptionInformationExposure.cs:19:32:19:44 | call to method ToString | -| ExceptionInformationExposure.cs:23:32:23:33 | access to local variable ex : Exception | ExceptionInformationExposure.cs:23:32:23:44 | access to property StackTrace | -| ExceptionInformationExposure.cs:39:28:39:44 | access to property InnerException : Exception | ExceptionInformationExposure.cs:39:28:39:55 | access to property StackTrace | -| ExceptionInformationExposure.cs:40:28:40:29 | access to local variable ex : Exception | ExceptionInformationExposure.cs:40:28:40:40 | access to property StackTrace | -| ExceptionInformationExposure.cs:41:28:41:29 | access to local variable ex : Exception | ExceptionInformationExposure.cs:41:28:41:40 | call to method ToString | -| ExceptionInformationExposure.cs:47:28:47:44 | object creation of type MyException : MyException | ExceptionInformationExposure.cs:47:28:47:55 | call to method ToString | +| ExceptionInformationExposure.cs:19:32:19:33 | access to local variable ex : Exception | ExceptionInformationExposure.cs:19:32:19:44 | call to method ToString | provenance | | +| ExceptionInformationExposure.cs:23:32:23:33 | access to local variable ex : Exception | ExceptionInformationExposure.cs:23:32:23:44 | access to property StackTrace | provenance | | +| ExceptionInformationExposure.cs:39:28:39:44 | access to property InnerException : Exception | ExceptionInformationExposure.cs:39:28:39:55 | access to property StackTrace | provenance | | +| ExceptionInformationExposure.cs:40:28:40:29 | access to local variable ex : Exception | ExceptionInformationExposure.cs:40:28:40:40 | access to property StackTrace | provenance | | +| ExceptionInformationExposure.cs:41:28:41:29 | access to local variable ex : Exception | ExceptionInformationExposure.cs:41:28:41:40 | call to method ToString | provenance | | +| ExceptionInformationExposure.cs:47:28:47:44 | object creation of type MyException : MyException | ExceptionInformationExposure.cs:47:28:47:55 | call to method ToString | provenance | | nodes | ExceptionInformationExposure.cs:19:32:19:33 | access to local variable ex : Exception | semmle.label | access to local variable ex : Exception | | ExceptionInformationExposure.cs:19:32:19:44 | call to method ToString | semmle.label | call to method ToString | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-321/HardcodedSymmetricEncryptionKey/HardcodedSymmetricEncryptionKey.expected b/csharp/ql/test/query-tests/Security Features/CWE-321/HardcodedSymmetricEncryptionKey/HardcodedSymmetricEncryptionKey.expected index 10cb82ff67e..8fcc865b54c 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-321/HardcodedSymmetricEncryptionKey/HardcodedSymmetricEncryptionKey.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-321/HardcodedSymmetricEncryptionKey/HardcodedSymmetricEncryptionKey.expected @@ -1,17 +1,17 @@ edges -| HardcodedSymmetricEncryptionKey.cs:25:21:25:97 | array creation of type Byte[] : Byte[] | HardcodedSymmetricEncryptionKey.cs:31:21:31:21 | access to local variable d | -| HardcodedSymmetricEncryptionKey.cs:25:21:25:97 | array creation of type Byte[] : Byte[] | HardcodedSymmetricEncryptionKey.cs:36:37:36:37 | access to local variable d : Byte[] | -| HardcodedSymmetricEncryptionKey.cs:25:21:25:97 | array creation of type Byte[] : Byte[] | HardcodedSymmetricEncryptionKey.cs:41:50:41:50 | access to local variable c : Byte[] | -| HardcodedSymmetricEncryptionKey.cs:25:21:25:97 | array creation of type Byte[] : Byte[] | HardcodedSymmetricEncryptionKey.cs:50:35:50:35 | access to local variable c : Byte[] | -| HardcodedSymmetricEncryptionKey.cs:28:39:28:116 | call to method GetBytes : Byte[] | HardcodedSymmetricEncryptionKey.cs:44:51:44:69 | access to local variable byteArrayFromString : Byte[] | -| HardcodedSymmetricEncryptionKey.cs:28:62:28:115 | "Hello, world: here is a very bad way to create a key" : String | HardcodedSymmetricEncryptionKey.cs:28:39:28:116 | call to method GetBytes : Byte[] | -| HardcodedSymmetricEncryptionKey.cs:36:37:36:37 | access to local variable d : Byte[] | HardcodedSymmetricEncryptionKey.cs:103:57:103:59 | key : Byte[] | -| HardcodedSymmetricEncryptionKey.cs:41:50:41:50 | access to local variable c : Byte[] | HardcodedSymmetricEncryptionKey.cs:112:63:112:65 | key : Byte[] | -| HardcodedSymmetricEncryptionKey.cs:44:51:44:69 | access to local variable byteArrayFromString : Byte[] | HardcodedSymmetricEncryptionKey.cs:112:63:112:65 | key : Byte[] | -| HardcodedSymmetricEncryptionKey.cs:50:35:50:35 | access to local variable c : Byte[] | HardcodedSymmetricEncryptionKey.cs:59:64:59:71 | password : Byte[] | -| HardcodedSymmetricEncryptionKey.cs:59:64:59:71 | password : Byte[] | HardcodedSymmetricEncryptionKey.cs:68:87:68:94 | access to parameter password | -| HardcodedSymmetricEncryptionKey.cs:103:57:103:59 | key : Byte[] | HardcodedSymmetricEncryptionKey.cs:108:23:108:25 | access to parameter key | -| HardcodedSymmetricEncryptionKey.cs:112:63:112:65 | key : Byte[] | HardcodedSymmetricEncryptionKey.cs:121:87:121:89 | access to parameter key | +| HardcodedSymmetricEncryptionKey.cs:25:21:25:97 | array creation of type Byte[] : Byte[] | HardcodedSymmetricEncryptionKey.cs:31:21:31:21 | access to local variable d | provenance | | +| HardcodedSymmetricEncryptionKey.cs:25:21:25:97 | array creation of type Byte[] : Byte[] | HardcodedSymmetricEncryptionKey.cs:36:37:36:37 | access to local variable d : Byte[] | provenance | | +| HardcodedSymmetricEncryptionKey.cs:25:21:25:97 | array creation of type Byte[] : Byte[] | HardcodedSymmetricEncryptionKey.cs:41:50:41:50 | access to local variable c : Byte[] | provenance | | +| HardcodedSymmetricEncryptionKey.cs:25:21:25:97 | array creation of type Byte[] : Byte[] | HardcodedSymmetricEncryptionKey.cs:50:35:50:35 | access to local variable c : Byte[] | provenance | | +| HardcodedSymmetricEncryptionKey.cs:28:39:28:116 | call to method GetBytes : Byte[] | HardcodedSymmetricEncryptionKey.cs:44:51:44:69 | access to local variable byteArrayFromString : Byte[] | provenance | | +| HardcodedSymmetricEncryptionKey.cs:28:62:28:115 | "Hello, world: here is a very bad way to create a key" : String | HardcodedSymmetricEncryptionKey.cs:28:39:28:116 | call to method GetBytes : Byte[] | provenance | | +| HardcodedSymmetricEncryptionKey.cs:36:37:36:37 | access to local variable d : Byte[] | HardcodedSymmetricEncryptionKey.cs:103:57:103:59 | key : Byte[] | provenance | | +| HardcodedSymmetricEncryptionKey.cs:41:50:41:50 | access to local variable c : Byte[] | HardcodedSymmetricEncryptionKey.cs:112:63:112:65 | key : Byte[] | provenance | | +| HardcodedSymmetricEncryptionKey.cs:44:51:44:69 | access to local variable byteArrayFromString : Byte[] | HardcodedSymmetricEncryptionKey.cs:112:63:112:65 | key : Byte[] | provenance | | +| HardcodedSymmetricEncryptionKey.cs:50:35:50:35 | access to local variable c : Byte[] | HardcodedSymmetricEncryptionKey.cs:59:64:59:71 | password : Byte[] | provenance | | +| HardcodedSymmetricEncryptionKey.cs:59:64:59:71 | password : Byte[] | HardcodedSymmetricEncryptionKey.cs:68:87:68:94 | access to parameter password | provenance | | +| HardcodedSymmetricEncryptionKey.cs:103:57:103:59 | key : Byte[] | HardcodedSymmetricEncryptionKey.cs:108:23:108:25 | access to parameter key | provenance | | +| HardcodedSymmetricEncryptionKey.cs:112:63:112:65 | key : Byte[] | HardcodedSymmetricEncryptionKey.cs:121:87:121:89 | access to parameter key | provenance | | nodes | HardcodedSymmetricEncryptionKey.cs:17:21:17:97 | array creation of type Byte[] | semmle.label | array creation of type Byte[] | | HardcodedSymmetricEncryptionKey.cs:22:23:22:99 | array creation of type Byte[] | semmle.label | array creation of type Byte[] | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-327/DontInstallRootCert/DontInstallRootCert.expected b/csharp/ql/test/query-tests/Security Features/CWE-327/DontInstallRootCert/DontInstallRootCert.expected index 9f20b582a86..616fe890da8 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-327/DontInstallRootCert/DontInstallRootCert.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-327/DontInstallRootCert/DontInstallRootCert.expected @@ -1,7 +1,7 @@ edges -| Test.cs:15:31:15:59 | object creation of type X509Store : X509Store | Test.cs:18:13:18:17 | access to local variable store | -| Test.cs:25:31:25:86 | object creation of type X509Store : X509Store | Test.cs:28:13:28:17 | access to local variable store | -| Test.cs:70:31:70:86 | object creation of type X509Store : X509Store | Test.cs:73:13:73:17 | access to local variable store | +| Test.cs:15:31:15:59 | object creation of type X509Store : X509Store | Test.cs:18:13:18:17 | access to local variable store | provenance | | +| Test.cs:25:31:25:86 | object creation of type X509Store : X509Store | Test.cs:28:13:28:17 | access to local variable store | provenance | | +| Test.cs:70:31:70:86 | object creation of type X509Store : X509Store | Test.cs:73:13:73:17 | access to local variable store | provenance | | nodes | Test.cs:15:31:15:59 | object creation of type X509Store : X509Store | semmle.label | object creation of type X509Store : X509Store | | Test.cs:18:13:18:17 | access to local variable store | semmle.label | access to local variable store | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-327/InsecureSQLConnection/InsecureSQLConnection.expected b/csharp/ql/test/query-tests/Security Features/CWE-327/InsecureSQLConnection/InsecureSQLConnection.expected index 14d9e9213c6..fc657fcde1d 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-327/InsecureSQLConnection/InsecureSQLConnection.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-327/InsecureSQLConnection/InsecureSQLConnection.expected @@ -1,6 +1,6 @@ edges -| InsecureSQLConnection.cs:44:17:44:64 | "Server=1.2.3.4;Database=Anything;UID=ab;Pwd=cd" : String | InsecureSQLConnection.cs:46:81:46:93 | access to local variable connectString | -| InsecureSQLConnection.cs:53:17:53:78 | "Server=1.2.3.4;Database=Anything;UID=ab;Pwd=cd;Encrypt=false" : String | InsecureSQLConnection.cs:55:81:55:93 | access to local variable connectString | +| InsecureSQLConnection.cs:44:17:44:64 | "Server=1.2.3.4;Database=Anything;UID=ab;Pwd=cd" : String | InsecureSQLConnection.cs:46:81:46:93 | access to local variable connectString | provenance | | +| InsecureSQLConnection.cs:53:17:53:78 | "Server=1.2.3.4;Database=Anything;UID=ab;Pwd=cd;Encrypt=false" : String | InsecureSQLConnection.cs:55:81:55:93 | access to local variable connectString | provenance | | nodes | InsecureSQLConnection.cs:38:52:38:128 | "Server=myServerName\\myInstanceName;Database=myDataBase;User Id=myUsername;" | semmle.label | "Server=myServerName\\myInstanceName;Database=myDataBase;User Id=myUsername;" | | InsecureSQLConnection.cs:44:17:44:64 | "Server=1.2.3.4;Database=Anything;UID=ab;Pwd=cd" : String | semmle.label | "Server=1.2.3.4;Database=Anything;UID=ab;Pwd=cd" : String | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-338/InsecureRandomness.expected b/csharp/ql/test/query-tests/Security Features/CWE-338/InsecureRandomness.expected index 20312f4c17b..b0c0dbae40f 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-338/InsecureRandomness.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-338/InsecureRandomness.expected @@ -1,19 +1,19 @@ edges -| InsecureRandomness.cs:28:13:28:16 | [post] access to local variable data : Byte[] [element] : Byte | InsecureRandomness.cs:29:57:29:60 | access to local variable data : Byte[] [element] : Byte | -| InsecureRandomness.cs:28:23:28:43 | (...) ... : Byte | InsecureRandomness.cs:28:13:28:16 | [post] access to local variable data : Byte[] [element] : Byte | -| InsecureRandomness.cs:28:29:28:43 | call to method Next : Int32 | InsecureRandomness.cs:28:23:28:43 | (...) ... : Byte | -| InsecureRandomness.cs:29:13:29:18 | [post] access to local variable result : StringBuilder | InsecureRandomness.cs:31:16:31:21 | access to local variable result : StringBuilder | -| InsecureRandomness.cs:29:27:29:61 | call to method GetString : String | InsecureRandomness.cs:29:13:29:18 | [post] access to local variable result : StringBuilder | -| InsecureRandomness.cs:29:57:29:60 | access to local variable data : Byte[] [element] : Byte | InsecureRandomness.cs:29:27:29:61 | call to method GetString : String | -| InsecureRandomness.cs:31:16:31:21 | access to local variable result : StringBuilder | InsecureRandomness.cs:31:16:31:32 | call to method ToString : String | -| InsecureRandomness.cs:31:16:31:32 | call to method ToString : String | InsecureRandomness.cs:12:27:12:50 | call to method InsecureRandomString | -| InsecureRandomness.cs:60:23:60:40 | access to array element : String | InsecureRandomness.cs:62:16:62:21 | access to local variable result : String | -| InsecureRandomness.cs:60:31:60:39 | call to method Next : Int32 | InsecureRandomness.cs:60:23:60:40 | access to array element : String | -| InsecureRandomness.cs:62:16:62:21 | access to local variable result : String | InsecureRandomness.cs:62:16:62:32 | call to method ToString : String | -| InsecureRandomness.cs:62:16:62:32 | call to method ToString : String | InsecureRandomness.cs:13:20:13:56 | call to method InsecureRandomStringFromSelection | -| InsecureRandomness.cs:72:23:72:40 | access to indexer : String | InsecureRandomness.cs:74:16:74:21 | access to local variable result : String | -| InsecureRandomness.cs:72:31:72:39 | call to method Next : Int32 | InsecureRandomness.cs:72:23:72:40 | access to indexer : String | -| InsecureRandomness.cs:74:16:74:21 | access to local variable result : String | InsecureRandomness.cs:14:20:14:54 | call to method InsecureRandomStringFromIndexer | +| InsecureRandomness.cs:28:13:28:16 | [post] access to local variable data : Byte[] [element] : Byte | InsecureRandomness.cs:29:57:29:60 | access to local variable data : Byte[] [element] : Byte | provenance | | +| InsecureRandomness.cs:28:23:28:43 | (...) ... : Byte | InsecureRandomness.cs:28:13:28:16 | [post] access to local variable data : Byte[] [element] : Byte | provenance | | +| InsecureRandomness.cs:28:29:28:43 | call to method Next : Int32 | InsecureRandomness.cs:28:23:28:43 | (...) ... : Byte | provenance | | +| InsecureRandomness.cs:29:13:29:18 | [post] access to local variable result : StringBuilder | InsecureRandomness.cs:31:16:31:21 | access to local variable result : StringBuilder | provenance | | +| InsecureRandomness.cs:29:27:29:61 | call to method GetString : String | InsecureRandomness.cs:29:13:29:18 | [post] access to local variable result : StringBuilder | provenance | | +| InsecureRandomness.cs:29:57:29:60 | access to local variable data : Byte[] [element] : Byte | InsecureRandomness.cs:29:27:29:61 | call to method GetString : String | provenance | | +| InsecureRandomness.cs:31:16:31:21 | access to local variable result : StringBuilder | InsecureRandomness.cs:31:16:31:32 | call to method ToString : String | provenance | | +| InsecureRandomness.cs:31:16:31:32 | call to method ToString : String | InsecureRandomness.cs:12:27:12:50 | call to method InsecureRandomString | provenance | | +| InsecureRandomness.cs:60:23:60:40 | access to array element : String | InsecureRandomness.cs:62:16:62:21 | access to local variable result : String | provenance | | +| InsecureRandomness.cs:60:31:60:39 | call to method Next : Int32 | InsecureRandomness.cs:60:23:60:40 | access to array element : String | provenance | | +| InsecureRandomness.cs:62:16:62:21 | access to local variable result : String | InsecureRandomness.cs:62:16:62:32 | call to method ToString : String | provenance | | +| InsecureRandomness.cs:62:16:62:32 | call to method ToString : String | InsecureRandomness.cs:13:20:13:56 | call to method InsecureRandomStringFromSelection | provenance | | +| InsecureRandomness.cs:72:23:72:40 | access to indexer : String | InsecureRandomness.cs:74:16:74:21 | access to local variable result : String | provenance | | +| InsecureRandomness.cs:72:31:72:39 | call to method Next : Int32 | InsecureRandomness.cs:72:23:72:40 | access to indexer : String | provenance | | +| InsecureRandomness.cs:74:16:74:21 | access to local variable result : String | InsecureRandomness.cs:14:20:14:54 | call to method InsecureRandomStringFromIndexer | provenance | | nodes | InsecureRandomness.cs:12:27:12:50 | call to method InsecureRandomString | semmle.label | call to method InsecureRandomString | | InsecureRandomness.cs:13:20:13:56 | call to method InsecureRandomStringFromSelection | semmle.label | call to method InsecureRandomStringFromSelection | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-502/UnsafeDeserializationUntrustedInput/UnsafeDeserializationUntrustedInput.expected b/csharp/ql/test/query-tests/Security Features/CWE-502/UnsafeDeserializationUntrustedInput/UnsafeDeserializationUntrustedInput.expected index 0761f950feb..d9ee462e64a 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-502/UnsafeDeserializationUntrustedInput/UnsafeDeserializationUntrustedInput.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-502/UnsafeDeserializationUntrustedInput/UnsafeDeserializationUntrustedInput.expected @@ -1,23 +1,23 @@ edges -| BinaryFormatterUntrustedInputBad.cs:12:48:12:83 | call to method GetBytes : Byte[] | BinaryFormatterUntrustedInputBad.cs:12:31:12:84 | object creation of type MemoryStream | -| BinaryFormatterUntrustedInputBad.cs:12:71:12:77 | access to parameter textBox : TextBox | BinaryFormatterUntrustedInputBad.cs:12:71:12:82 | access to property Text : String | -| BinaryFormatterUntrustedInputBad.cs:12:71:12:82 | access to property Text : String | BinaryFormatterUntrustedInputBad.cs:12:48:12:83 | call to method GetBytes : Byte[] | -| DataContractJsonSerializerUntrustedInputBad.cs:13:47:13:79 | call to method GetBytes : Byte[] | DataContractJsonSerializerUntrustedInputBad.cs:13:30:13:80 | object creation of type MemoryStream | -| DataContractJsonSerializerUntrustedInputBad.cs:13:70:13:73 | access to parameter data : TextBox | DataContractJsonSerializerUntrustedInputBad.cs:13:70:13:78 | access to property Text : String | -| DataContractJsonSerializerUntrustedInputBad.cs:13:70:13:78 | access to property Text : String | DataContractJsonSerializerUntrustedInputBad.cs:13:47:13:79 | call to method GetBytes : Byte[] | -| DataContractSerializerUntrustedInputBad.cs:13:47:13:79 | call to method GetBytes : Byte[] | DataContractSerializerUntrustedInputBad.cs:13:30:13:80 | object creation of type MemoryStream | -| DataContractSerializerUntrustedInputBad.cs:13:70:13:73 | access to parameter data : TextBox | DataContractSerializerUntrustedInputBad.cs:13:70:13:78 | access to property Text : String | -| DataContractSerializerUntrustedInputBad.cs:13:70:13:78 | access to property Text : String | DataContractSerializerUntrustedInputBad.cs:13:47:13:79 | call to method GetBytes : Byte[] | -| ResourceReaderUntrustedInputBad.cs:11:54:11:86 | call to method GetBytes : Byte[] | ResourceReaderUntrustedInputBad.cs:11:37:11:87 | object creation of type MemoryStream | -| ResourceReaderUntrustedInputBad.cs:11:77:11:80 | access to parameter data : TextBox | ResourceReaderUntrustedInputBad.cs:11:77:11:85 | access to property Text : String | -| ResourceReaderUntrustedInputBad.cs:11:77:11:85 | access to property Text : String | ResourceReaderUntrustedInputBad.cs:11:54:11:86 | call to method GetBytes : Byte[] | -| UnsafeDeserializationUntrustedInputBad.cs:10:37:10:43 | access to parameter textBox : TextBox | UnsafeDeserializationUntrustedInputBad.cs:10:37:10:48 | access to property Text | -| XmlObjectSerializerUntrustedInputBad.cs:13:47:13:79 | call to method GetBytes : Byte[] | XmlObjectSerializerUntrustedInputBad.cs:13:30:13:80 | object creation of type MemoryStream | -| XmlObjectSerializerUntrustedInputBad.cs:13:70:13:73 | access to parameter data : TextBox | XmlObjectSerializerUntrustedInputBad.cs:13:70:13:78 | access to property Text : String | -| XmlObjectSerializerUntrustedInputBad.cs:13:70:13:78 | access to property Text : String | XmlObjectSerializerUntrustedInputBad.cs:13:47:13:79 | call to method GetBytes : Byte[] | -| XmlSerializerUntrustedInputBad.cs:13:48:13:80 | call to method GetBytes : Byte[] | XmlSerializerUntrustedInputBad.cs:13:31:13:81 | object creation of type MemoryStream | -| XmlSerializerUntrustedInputBad.cs:13:71:13:74 | access to parameter data : TextBox | XmlSerializerUntrustedInputBad.cs:13:71:13:79 | access to property Text : String | -| XmlSerializerUntrustedInputBad.cs:13:71:13:79 | access to property Text : String | XmlSerializerUntrustedInputBad.cs:13:48:13:80 | call to method GetBytes : Byte[] | +| BinaryFormatterUntrustedInputBad.cs:12:48:12:83 | call to method GetBytes : Byte[] | BinaryFormatterUntrustedInputBad.cs:12:31:12:84 | object creation of type MemoryStream | provenance | | +| BinaryFormatterUntrustedInputBad.cs:12:71:12:77 | access to parameter textBox : TextBox | BinaryFormatterUntrustedInputBad.cs:12:71:12:82 | access to property Text : String | provenance | | +| BinaryFormatterUntrustedInputBad.cs:12:71:12:82 | access to property Text : String | BinaryFormatterUntrustedInputBad.cs:12:48:12:83 | call to method GetBytes : Byte[] | provenance | | +| DataContractJsonSerializerUntrustedInputBad.cs:13:47:13:79 | call to method GetBytes : Byte[] | DataContractJsonSerializerUntrustedInputBad.cs:13:30:13:80 | object creation of type MemoryStream | provenance | | +| DataContractJsonSerializerUntrustedInputBad.cs:13:70:13:73 | access to parameter data : TextBox | DataContractJsonSerializerUntrustedInputBad.cs:13:70:13:78 | access to property Text : String | provenance | | +| DataContractJsonSerializerUntrustedInputBad.cs:13:70:13:78 | access to property Text : String | DataContractJsonSerializerUntrustedInputBad.cs:13:47:13:79 | call to method GetBytes : Byte[] | provenance | | +| DataContractSerializerUntrustedInputBad.cs:13:47:13:79 | call to method GetBytes : Byte[] | DataContractSerializerUntrustedInputBad.cs:13:30:13:80 | object creation of type MemoryStream | provenance | | +| DataContractSerializerUntrustedInputBad.cs:13:70:13:73 | access to parameter data : TextBox | DataContractSerializerUntrustedInputBad.cs:13:70:13:78 | access to property Text : String | provenance | | +| DataContractSerializerUntrustedInputBad.cs:13:70:13:78 | access to property Text : String | DataContractSerializerUntrustedInputBad.cs:13:47:13:79 | call to method GetBytes : Byte[] | provenance | | +| ResourceReaderUntrustedInputBad.cs:11:54:11:86 | call to method GetBytes : Byte[] | ResourceReaderUntrustedInputBad.cs:11:37:11:87 | object creation of type MemoryStream | provenance | | +| ResourceReaderUntrustedInputBad.cs:11:77:11:80 | access to parameter data : TextBox | ResourceReaderUntrustedInputBad.cs:11:77:11:85 | access to property Text : String | provenance | | +| ResourceReaderUntrustedInputBad.cs:11:77:11:85 | access to property Text : String | ResourceReaderUntrustedInputBad.cs:11:54:11:86 | call to method GetBytes : Byte[] | provenance | | +| UnsafeDeserializationUntrustedInputBad.cs:10:37:10:43 | access to parameter textBox : TextBox | UnsafeDeserializationUntrustedInputBad.cs:10:37:10:48 | access to property Text | provenance | | +| XmlObjectSerializerUntrustedInputBad.cs:13:47:13:79 | call to method GetBytes : Byte[] | XmlObjectSerializerUntrustedInputBad.cs:13:30:13:80 | object creation of type MemoryStream | provenance | | +| XmlObjectSerializerUntrustedInputBad.cs:13:70:13:73 | access to parameter data : TextBox | XmlObjectSerializerUntrustedInputBad.cs:13:70:13:78 | access to property Text : String | provenance | | +| XmlObjectSerializerUntrustedInputBad.cs:13:70:13:78 | access to property Text : String | XmlObjectSerializerUntrustedInputBad.cs:13:47:13:79 | call to method GetBytes : Byte[] | provenance | | +| XmlSerializerUntrustedInputBad.cs:13:48:13:80 | call to method GetBytes : Byte[] | XmlSerializerUntrustedInputBad.cs:13:31:13:81 | object creation of type MemoryStream | provenance | | +| XmlSerializerUntrustedInputBad.cs:13:71:13:74 | access to parameter data : TextBox | XmlSerializerUntrustedInputBad.cs:13:71:13:79 | access to property Text : String | provenance | | +| XmlSerializerUntrustedInputBad.cs:13:71:13:79 | access to property Text : String | XmlSerializerUntrustedInputBad.cs:13:48:13:80 | call to method GetBytes : Byte[] | provenance | | nodes | BinaryFormatterUntrustedInputBad.cs:12:31:12:84 | object creation of type MemoryStream | semmle.label | object creation of type MemoryStream | | BinaryFormatterUntrustedInputBad.cs:12:48:12:83 | call to method GetBytes : Byte[] | semmle.label | call to method GetBytes : Byte[] | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-502/UnsafeDeserializationUntrustedInputNewtonsoftJson/UnsafeDeserializationUntrustedInput.expected b/csharp/ql/test/query-tests/Security Features/CWE-502/UnsafeDeserializationUntrustedInputNewtonsoftJson/UnsafeDeserializationUntrustedInput.expected index c73b3122688..c50a361dac7 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-502/UnsafeDeserializationUntrustedInputNewtonsoftJson/UnsafeDeserializationUntrustedInput.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-502/UnsafeDeserializationUntrustedInputNewtonsoftJson/UnsafeDeserializationUntrustedInput.expected @@ -1,7 +1,7 @@ edges -| Test.cs:9:46:9:49 | access to parameter data : TextBox | Test.cs:9:46:9:54 | access to property Text | -| Test.cs:17:46:17:49 | access to parameter data : TextBox | Test.cs:17:46:17:54 | access to property Text | -| Test.cs:25:46:25:49 | access to parameter data : TextBox | Test.cs:25:46:25:54 | access to property Text | +| Test.cs:9:46:9:49 | access to parameter data : TextBox | Test.cs:9:46:9:54 | access to property Text | provenance | | +| Test.cs:17:46:17:49 | access to parameter data : TextBox | Test.cs:17:46:17:54 | access to property Text | provenance | | +| Test.cs:25:46:25:49 | access to parameter data : TextBox | Test.cs:25:46:25:54 | access to property Text | provenance | | nodes | Test.cs:9:46:9:49 | access to parameter data : TextBox | semmle.label | access to parameter data : TextBox | | Test.cs:9:46:9:54 | access to property Text | semmle.label | access to property Text | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-601/UrlRedirect/UrlRedirect.expected b/csharp/ql/test/query-tests/Security Features/CWE-601/UrlRedirect/UrlRedirect.expected index ff1cac032fe..33e63414558 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-601/UrlRedirect/UrlRedirect.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-601/UrlRedirect/UrlRedirect.expected @@ -1,32 +1,32 @@ edges -| UrlRedirect.cs:13:31:13:53 | access to property QueryString : NameValueCollection | UrlRedirect.cs:13:31:13:61 | access to indexer | -| UrlRedirect.cs:23:22:23:44 | access to property QueryString : NameValueCollection | UrlRedirect.cs:23:22:23:52 | access to indexer : String | -| UrlRedirect.cs:23:22:23:44 | access to property QueryString : NameValueCollection | UrlRedirect.cs:48:29:48:31 | access to local variable url | -| UrlRedirect.cs:23:22:23:44 | access to property QueryString : NameValueCollection | UrlRedirect.cs:64:31:64:52 | $"..." | -| UrlRedirect.cs:23:22:23:44 | access to property QueryString : NameValueCollection | UrlRedirect.cs:70:66:70:68 | access to local variable url : String | -| UrlRedirect.cs:23:22:23:44 | access to property QueryString : NameValueCollection | UrlRedirect.cs:76:69:76:71 | access to local variable url : String | -| UrlRedirect.cs:23:22:23:44 | access to property QueryString : NameValueCollection | UrlRedirect.cs:76:74:76:76 | access to local variable url : String | -| UrlRedirect.cs:23:22:23:52 | access to indexer : String | UrlRedirect.cs:48:29:48:31 | access to local variable url | -| UrlRedirect.cs:23:22:23:52 | access to indexer : String | UrlRedirect.cs:64:31:64:52 | $"..." | -| UrlRedirect.cs:23:22:23:52 | access to indexer : String | UrlRedirect.cs:70:66:70:68 | access to local variable url : String | -| UrlRedirect.cs:23:22:23:52 | access to indexer : String | UrlRedirect.cs:76:69:76:71 | access to local variable url : String | -| UrlRedirect.cs:23:22:23:52 | access to indexer : String | UrlRedirect.cs:76:74:76:76 | access to local variable url : String | -| UrlRedirect.cs:38:44:38:66 | access to property QueryString : NameValueCollection | UrlRedirect.cs:38:44:38:74 | access to indexer | -| UrlRedirect.cs:39:47:39:69 | access to property QueryString : NameValueCollection | UrlRedirect.cs:39:47:39:77 | access to indexer | -| UrlRedirect.cs:70:66:70:68 | access to local variable url : String | UrlRedirect.cs:70:31:70:69 | call to method Format | -| UrlRedirect.cs:76:69:76:71 | access to local variable url : String | UrlRedirect.cs:76:31:76:77 | call to method Format | -| UrlRedirect.cs:76:74:76:76 | access to local variable url : String | UrlRedirect.cs:76:31:76:77 | call to method Format | -| UrlRedirectCore.cs:13:44:13:48 | value : String | UrlRedirectCore.cs:16:22:16:26 | access to parameter value | -| UrlRedirectCore.cs:13:44:13:48 | value : String | UrlRedirectCore.cs:19:44:19:48 | call to operator implicit conversion | -| UrlRedirectCore.cs:13:44:13:48 | value : String | UrlRedirectCore.cs:25:46:25:50 | call to operator implicit conversion | -| UrlRedirectCore.cs:13:44:13:48 | value : String | UrlRedirectCore.cs:31:66:31:70 | access to parameter value | -| UrlRedirectCore.cs:13:44:13:48 | value : String | UrlRedirectCore.cs:34:49:34:53 | call to operator implicit conversion | -| UrlRedirectCore.cs:13:44:13:48 | value : String | UrlRedirectCore.cs:37:69:37:73 | access to parameter value | -| UrlRedirectCore.cs:13:44:13:48 | value : String | UrlRedirectCore.cs:40:39:40:53 | ... + ... | -| UrlRedirectCore.cs:45:51:45:55 | value : String | UrlRedirectCore.cs:48:28:48:32 | access to parameter value | -| UrlRedirectCore.cs:45:51:45:55 | value : String | UrlRedirectCore.cs:53:40:53:44 | access to parameter value : String | -| UrlRedirectCore.cs:45:51:45:55 | value : String | UrlRedirectCore.cs:56:31:56:35 | access to parameter value | -| UrlRedirectCore.cs:53:40:53:44 | access to parameter value : String | UrlRedirectCore.cs:53:32:53:45 | object creation of type Uri | +| UrlRedirect.cs:13:31:13:53 | access to property QueryString : NameValueCollection | UrlRedirect.cs:13:31:13:61 | access to indexer | provenance | | +| UrlRedirect.cs:23:22:23:44 | access to property QueryString : NameValueCollection | UrlRedirect.cs:23:22:23:52 | access to indexer : String | provenance | | +| UrlRedirect.cs:23:22:23:44 | access to property QueryString : NameValueCollection | UrlRedirect.cs:48:29:48:31 | access to local variable url | provenance | | +| UrlRedirect.cs:23:22:23:44 | access to property QueryString : NameValueCollection | UrlRedirect.cs:64:31:64:52 | $"..." | provenance | | +| UrlRedirect.cs:23:22:23:44 | access to property QueryString : NameValueCollection | UrlRedirect.cs:70:66:70:68 | access to local variable url : String | provenance | | +| UrlRedirect.cs:23:22:23:44 | access to property QueryString : NameValueCollection | UrlRedirect.cs:76:69:76:71 | access to local variable url : String | provenance | | +| UrlRedirect.cs:23:22:23:44 | access to property QueryString : NameValueCollection | UrlRedirect.cs:76:74:76:76 | access to local variable url : String | provenance | | +| UrlRedirect.cs:23:22:23:52 | access to indexer : String | UrlRedirect.cs:48:29:48:31 | access to local variable url | provenance | | +| UrlRedirect.cs:23:22:23:52 | access to indexer : String | UrlRedirect.cs:64:31:64:52 | $"..." | provenance | | +| UrlRedirect.cs:23:22:23:52 | access to indexer : String | UrlRedirect.cs:70:66:70:68 | access to local variable url : String | provenance | | +| UrlRedirect.cs:23:22:23:52 | access to indexer : String | UrlRedirect.cs:76:69:76:71 | access to local variable url : String | provenance | | +| UrlRedirect.cs:23:22:23:52 | access to indexer : String | UrlRedirect.cs:76:74:76:76 | access to local variable url : String | provenance | | +| UrlRedirect.cs:38:44:38:66 | access to property QueryString : NameValueCollection | UrlRedirect.cs:38:44:38:74 | access to indexer | provenance | | +| UrlRedirect.cs:39:47:39:69 | access to property QueryString : NameValueCollection | UrlRedirect.cs:39:47:39:77 | access to indexer | provenance | | +| UrlRedirect.cs:70:66:70:68 | access to local variable url : String | UrlRedirect.cs:70:31:70:69 | call to method Format | provenance | | +| UrlRedirect.cs:76:69:76:71 | access to local variable url : String | UrlRedirect.cs:76:31:76:77 | call to method Format | provenance | | +| UrlRedirect.cs:76:74:76:76 | access to local variable url : String | UrlRedirect.cs:76:31:76:77 | call to method Format | provenance | | +| UrlRedirectCore.cs:13:44:13:48 | value : String | UrlRedirectCore.cs:16:22:16:26 | access to parameter value | provenance | | +| UrlRedirectCore.cs:13:44:13:48 | value : String | UrlRedirectCore.cs:19:44:19:48 | call to operator implicit conversion | provenance | | +| UrlRedirectCore.cs:13:44:13:48 | value : String | UrlRedirectCore.cs:25:46:25:50 | call to operator implicit conversion | provenance | | +| UrlRedirectCore.cs:13:44:13:48 | value : String | UrlRedirectCore.cs:31:66:31:70 | access to parameter value | provenance | | +| UrlRedirectCore.cs:13:44:13:48 | value : String | UrlRedirectCore.cs:34:49:34:53 | call to operator implicit conversion | provenance | | +| UrlRedirectCore.cs:13:44:13:48 | value : String | UrlRedirectCore.cs:37:69:37:73 | access to parameter value | provenance | | +| UrlRedirectCore.cs:13:44:13:48 | value : String | UrlRedirectCore.cs:40:39:40:53 | ... + ... | provenance | | +| UrlRedirectCore.cs:45:51:45:55 | value : String | UrlRedirectCore.cs:48:28:48:32 | access to parameter value | provenance | | +| UrlRedirectCore.cs:45:51:45:55 | value : String | UrlRedirectCore.cs:53:40:53:44 | access to parameter value : String | provenance | | +| UrlRedirectCore.cs:45:51:45:55 | value : String | UrlRedirectCore.cs:56:31:56:35 | access to parameter value | provenance | | +| UrlRedirectCore.cs:53:40:53:44 | access to parameter value : String | UrlRedirectCore.cs:53:32:53:45 | object creation of type Uri | provenance | | nodes | UrlRedirect.cs:13:31:13:53 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | | UrlRedirect.cs:13:31:13:61 | access to indexer | semmle.label | access to indexer | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-611/UntrustedDataInsecureXml.expected b/csharp/ql/test/query-tests/Security Features/CWE-611/UntrustedDataInsecureXml.expected index c6e463428a6..4a3a88b7a74 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-611/UntrustedDataInsecureXml.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-611/UntrustedDataInsecureXml.expected @@ -1,5 +1,5 @@ edges -| Test.cs:11:50:11:72 | access to property QueryString : NameValueCollection | Test.cs:11:50:11:84 | access to indexer | +| Test.cs:11:50:11:72 | access to property QueryString : NameValueCollection | Test.cs:11:50:11:84 | access to indexer | provenance | | nodes | Test.cs:11:50:11:72 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | | Test.cs:11:50:11:84 | access to indexer | semmle.label | access to indexer | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-643/StoredXPathInjection.expected b/csharp/ql/test/query-tests/Security Features/CWE-643/StoredXPathInjection.expected index 63235e25c92..daaca6c5d3a 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-643/StoredXPathInjection.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-643/StoredXPathInjection.expected @@ -1,8 +1,8 @@ edges -| StoredXPathInjection.cs:22:39:22:65 | call to method GetString : String | StoredXPathInjection.cs:25:45:25:148 | ... + ... | -| StoredXPathInjection.cs:22:39:22:65 | call to method GetString : String | StoredXPathInjection.cs:28:41:28:144 | ... + ... | -| StoredXPathInjection.cs:23:39:23:65 | call to method GetString : String | StoredXPathInjection.cs:25:45:25:148 | ... + ... | -| StoredXPathInjection.cs:23:39:23:65 | call to method GetString : String | StoredXPathInjection.cs:28:41:28:144 | ... + ... | +| StoredXPathInjection.cs:22:39:22:65 | call to method GetString : String | StoredXPathInjection.cs:25:45:25:148 | ... + ... | provenance | | +| StoredXPathInjection.cs:22:39:22:65 | call to method GetString : String | StoredXPathInjection.cs:28:41:28:144 | ... + ... | provenance | | +| StoredXPathInjection.cs:23:39:23:65 | call to method GetString : String | StoredXPathInjection.cs:25:45:25:148 | ... + ... | provenance | | +| StoredXPathInjection.cs:23:39:23:65 | call to method GetString : String | StoredXPathInjection.cs:28:41:28:144 | ... + ... | provenance | | nodes | StoredXPathInjection.cs:22:39:22:65 | call to method GetString : String | semmle.label | call to method GetString : String | | StoredXPathInjection.cs:23:39:23:65 | call to method GetString : String | semmle.label | call to method GetString : String | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-643/XPathInjection.expected b/csharp/ql/test/query-tests/Security Features/CWE-643/XPathInjection.expected index fa812c210ed..78652e8ea9d 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-643/XPathInjection.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-643/XPathInjection.expected @@ -1,34 +1,34 @@ edges -| XPathInjection.cs:10:27:10:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:10:27:10:61 | access to indexer : String | -| XPathInjection.cs:10:27:10:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:16:33:16:33 | access to local variable s | -| XPathInjection.cs:10:27:10:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:19:29:19:29 | access to local variable s | -| XPathInjection.cs:10:27:10:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:28:20:28:20 | access to local variable s | -| XPathInjection.cs:10:27:10:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:34:30:34:30 | access to local variable s | -| XPathInjection.cs:10:27:10:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:40:21:40:21 | access to local variable s | -| XPathInjection.cs:10:27:10:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:46:22:46:22 | access to local variable s | -| XPathInjection.cs:10:27:10:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:52:21:52:21 | access to local variable s | -| XPathInjection.cs:10:27:10:61 | access to indexer : String | XPathInjection.cs:16:33:16:33 | access to local variable s | -| XPathInjection.cs:10:27:10:61 | access to indexer : String | XPathInjection.cs:19:29:19:29 | access to local variable s | -| XPathInjection.cs:10:27:10:61 | access to indexer : String | XPathInjection.cs:28:20:28:20 | access to local variable s | -| XPathInjection.cs:10:27:10:61 | access to indexer : String | XPathInjection.cs:34:30:34:30 | access to local variable s | -| XPathInjection.cs:10:27:10:61 | access to indexer : String | XPathInjection.cs:40:21:40:21 | access to local variable s | -| XPathInjection.cs:10:27:10:61 | access to indexer : String | XPathInjection.cs:46:22:46:22 | access to local variable s | -| XPathInjection.cs:10:27:10:61 | access to indexer : String | XPathInjection.cs:52:21:52:21 | access to local variable s | -| XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:11:27:11:61 | access to indexer : String | -| XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:16:33:16:33 | access to local variable s | -| XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:19:29:19:29 | access to local variable s | -| XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:28:20:28:20 | access to local variable s | -| XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:34:30:34:30 | access to local variable s | -| XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:40:21:40:21 | access to local variable s | -| XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:46:22:46:22 | access to local variable s | -| XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:52:21:52:21 | access to local variable s | -| XPathInjection.cs:11:27:11:61 | access to indexer : String | XPathInjection.cs:16:33:16:33 | access to local variable s | -| XPathInjection.cs:11:27:11:61 | access to indexer : String | XPathInjection.cs:19:29:19:29 | access to local variable s | -| XPathInjection.cs:11:27:11:61 | access to indexer : String | XPathInjection.cs:28:20:28:20 | access to local variable s | -| XPathInjection.cs:11:27:11:61 | access to indexer : String | XPathInjection.cs:34:30:34:30 | access to local variable s | -| XPathInjection.cs:11:27:11:61 | access to indexer : String | XPathInjection.cs:40:21:40:21 | access to local variable s | -| XPathInjection.cs:11:27:11:61 | access to indexer : String | XPathInjection.cs:46:22:46:22 | access to local variable s | -| XPathInjection.cs:11:27:11:61 | access to indexer : String | XPathInjection.cs:52:21:52:21 | access to local variable s | +| XPathInjection.cs:10:27:10:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:10:27:10:61 | access to indexer : String | provenance | | +| XPathInjection.cs:10:27:10:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:16:33:16:33 | access to local variable s | provenance | | +| XPathInjection.cs:10:27:10:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:19:29:19:29 | access to local variable s | provenance | | +| XPathInjection.cs:10:27:10:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:28:20:28:20 | access to local variable s | provenance | | +| XPathInjection.cs:10:27:10:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:34:30:34:30 | access to local variable s | provenance | | +| XPathInjection.cs:10:27:10:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:40:21:40:21 | access to local variable s | provenance | | +| XPathInjection.cs:10:27:10:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:46:22:46:22 | access to local variable s | provenance | | +| XPathInjection.cs:10:27:10:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:52:21:52:21 | access to local variable s | provenance | | +| XPathInjection.cs:10:27:10:61 | access to indexer : String | XPathInjection.cs:16:33:16:33 | access to local variable s | provenance | | +| XPathInjection.cs:10:27:10:61 | access to indexer : String | XPathInjection.cs:19:29:19:29 | access to local variable s | provenance | | +| XPathInjection.cs:10:27:10:61 | access to indexer : String | XPathInjection.cs:28:20:28:20 | access to local variable s | provenance | | +| XPathInjection.cs:10:27:10:61 | access to indexer : String | XPathInjection.cs:34:30:34:30 | access to local variable s | provenance | | +| XPathInjection.cs:10:27:10:61 | access to indexer : String | XPathInjection.cs:40:21:40:21 | access to local variable s | provenance | | +| XPathInjection.cs:10:27:10:61 | access to indexer : String | XPathInjection.cs:46:22:46:22 | access to local variable s | provenance | | +| XPathInjection.cs:10:27:10:61 | access to indexer : String | XPathInjection.cs:52:21:52:21 | access to local variable s | provenance | | +| XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:11:27:11:61 | access to indexer : String | provenance | | +| XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:16:33:16:33 | access to local variable s | provenance | | +| XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:19:29:19:29 | access to local variable s | provenance | | +| XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:28:20:28:20 | access to local variable s | provenance | | +| XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:34:30:34:30 | access to local variable s | provenance | | +| XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:40:21:40:21 | access to local variable s | provenance | | +| XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:46:22:46:22 | access to local variable s | provenance | | +| XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:52:21:52:21 | access to local variable s | provenance | | +| XPathInjection.cs:11:27:11:61 | access to indexer : String | XPathInjection.cs:16:33:16:33 | access to local variable s | provenance | | +| XPathInjection.cs:11:27:11:61 | access to indexer : String | XPathInjection.cs:19:29:19:29 | access to local variable s | provenance | | +| XPathInjection.cs:11:27:11:61 | access to indexer : String | XPathInjection.cs:28:20:28:20 | access to local variable s | provenance | | +| XPathInjection.cs:11:27:11:61 | access to indexer : String | XPathInjection.cs:34:30:34:30 | access to local variable s | provenance | | +| XPathInjection.cs:11:27:11:61 | access to indexer : String | XPathInjection.cs:40:21:40:21 | access to local variable s | provenance | | +| XPathInjection.cs:11:27:11:61 | access to indexer : String | XPathInjection.cs:46:22:46:22 | access to local variable s | provenance | | +| XPathInjection.cs:11:27:11:61 | access to indexer : String | XPathInjection.cs:52:21:52:21 | access to local variable s | provenance | | nodes | XPathInjection.cs:10:27:10:49 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | | XPathInjection.cs:10:27:10:61 | access to indexer : String | semmle.label | access to indexer : String | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-730/ReDoS/ReDoS.expected b/csharp/ql/test/query-tests/Security Features/CWE-730/ReDoS/ReDoS.expected index 8f378704ce5..ed14c44e2af 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-730/ReDoS/ReDoS.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-730/ReDoS/ReDoS.expected @@ -1,15 +1,15 @@ edges -| ExponentialRegex.cs:11:28:11:50 | access to property QueryString : NameValueCollection | ExponentialRegex.cs:11:28:11:63 | access to indexer : String | -| ExponentialRegex.cs:11:28:11:50 | access to property QueryString : NameValueCollection | ExponentialRegex.cs:15:40:15:48 | access to local variable userInput | -| ExponentialRegex.cs:11:28:11:50 | access to property QueryString : NameValueCollection | ExponentialRegex.cs:16:42:16:50 | access to local variable userInput | -| ExponentialRegex.cs:11:28:11:50 | access to property QueryString : NameValueCollection | ExponentialRegex.cs:19:139:19:147 | access to local variable userInput | -| ExponentialRegex.cs:11:28:11:50 | access to property QueryString : NameValueCollection | ExponentialRegex.cs:22:43:22:51 | access to local variable userInput | -| ExponentialRegex.cs:11:28:11:50 | access to property QueryString : NameValueCollection | ExponentialRegex.cs:24:21:24:29 | access to local variable userInput | -| ExponentialRegex.cs:11:28:11:63 | access to indexer : String | ExponentialRegex.cs:15:40:15:48 | access to local variable userInput | -| ExponentialRegex.cs:11:28:11:63 | access to indexer : String | ExponentialRegex.cs:16:42:16:50 | access to local variable userInput | -| ExponentialRegex.cs:11:28:11:63 | access to indexer : String | ExponentialRegex.cs:19:139:19:147 | access to local variable userInput | -| ExponentialRegex.cs:11:28:11:63 | access to indexer : String | ExponentialRegex.cs:22:43:22:51 | access to local variable userInput | -| ExponentialRegex.cs:11:28:11:63 | access to indexer : String | ExponentialRegex.cs:24:21:24:29 | access to local variable userInput | +| ExponentialRegex.cs:11:28:11:50 | access to property QueryString : NameValueCollection | ExponentialRegex.cs:11:28:11:63 | access to indexer : String | provenance | | +| ExponentialRegex.cs:11:28:11:50 | access to property QueryString : NameValueCollection | ExponentialRegex.cs:15:40:15:48 | access to local variable userInput | provenance | | +| ExponentialRegex.cs:11:28:11:50 | access to property QueryString : NameValueCollection | ExponentialRegex.cs:16:42:16:50 | access to local variable userInput | provenance | | +| ExponentialRegex.cs:11:28:11:50 | access to property QueryString : NameValueCollection | ExponentialRegex.cs:19:139:19:147 | access to local variable userInput | provenance | | +| ExponentialRegex.cs:11:28:11:50 | access to property QueryString : NameValueCollection | ExponentialRegex.cs:22:43:22:51 | access to local variable userInput | provenance | | +| ExponentialRegex.cs:11:28:11:50 | access to property QueryString : NameValueCollection | ExponentialRegex.cs:24:21:24:29 | access to local variable userInput | provenance | | +| ExponentialRegex.cs:11:28:11:63 | access to indexer : String | ExponentialRegex.cs:15:40:15:48 | access to local variable userInput | provenance | | +| ExponentialRegex.cs:11:28:11:63 | access to indexer : String | ExponentialRegex.cs:16:42:16:50 | access to local variable userInput | provenance | | +| ExponentialRegex.cs:11:28:11:63 | access to indexer : String | ExponentialRegex.cs:19:139:19:147 | access to local variable userInput | provenance | | +| ExponentialRegex.cs:11:28:11:63 | access to indexer : String | ExponentialRegex.cs:22:43:22:51 | access to local variable userInput | provenance | | +| ExponentialRegex.cs:11:28:11:63 | access to indexer : String | ExponentialRegex.cs:24:21:24:29 | access to local variable userInput | provenance | | nodes | ExponentialRegex.cs:11:28:11:50 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | | ExponentialRegex.cs:11:28:11:63 | access to indexer : String | semmle.label | access to indexer : String | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-730/ReDoSGlobalTimeout/ReDoS.expected b/csharp/ql/test/query-tests/Security Features/CWE-730/ReDoSGlobalTimeout/ReDoS.expected index 100f4fc61cc..989d0648f48 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-730/ReDoSGlobalTimeout/ReDoS.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-730/ReDoSGlobalTimeout/ReDoS.expected @@ -1,7 +1,7 @@ edges -| ExponentialRegex.cs:13:28:13:50 | access to property QueryString : NameValueCollection | ExponentialRegex.cs:13:28:13:63 | access to indexer : String | -| ExponentialRegex.cs:13:28:13:50 | access to property QueryString : NameValueCollection | ExponentialRegex.cs:16:40:16:48 | access to local variable userInput | -| ExponentialRegex.cs:13:28:13:63 | access to indexer : String | ExponentialRegex.cs:16:40:16:48 | access to local variable userInput | +| ExponentialRegex.cs:13:28:13:50 | access to property QueryString : NameValueCollection | ExponentialRegex.cs:13:28:13:63 | access to indexer : String | provenance | | +| ExponentialRegex.cs:13:28:13:50 | access to property QueryString : NameValueCollection | ExponentialRegex.cs:16:40:16:48 | access to local variable userInput | provenance | | +| ExponentialRegex.cs:13:28:13:63 | access to indexer : String | ExponentialRegex.cs:16:40:16:48 | access to local variable userInput | provenance | | nodes | ExponentialRegex.cs:13:28:13:50 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | | ExponentialRegex.cs:13:28:13:63 | access to indexer : String | semmle.label | access to indexer : String | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-730/RegexInjection/RegexInjection.expected b/csharp/ql/test/query-tests/Security Features/CWE-730/RegexInjection/RegexInjection.expected index 01b1dcfb67f..7fa9f7428f4 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-730/RegexInjection/RegexInjection.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-730/RegexInjection/RegexInjection.expected @@ -1,7 +1,7 @@ edges -| RegexInjection.cs:10:24:10:46 | access to property QueryString : NameValueCollection | RegexInjection.cs:10:24:10:55 | access to indexer : String | -| RegexInjection.cs:10:24:10:46 | access to property QueryString : NameValueCollection | RegexInjection.cs:14:19:14:23 | access to local variable regex | -| RegexInjection.cs:10:24:10:55 | access to indexer : String | RegexInjection.cs:14:19:14:23 | access to local variable regex | +| RegexInjection.cs:10:24:10:46 | access to property QueryString : NameValueCollection | RegexInjection.cs:10:24:10:55 | access to indexer : String | provenance | | +| RegexInjection.cs:10:24:10:46 | access to property QueryString : NameValueCollection | RegexInjection.cs:14:19:14:23 | access to local variable regex | provenance | | +| RegexInjection.cs:10:24:10:55 | access to indexer : String | RegexInjection.cs:14:19:14:23 | access to local variable regex | provenance | | nodes | RegexInjection.cs:10:24:10:46 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | | RegexInjection.cs:10:24:10:55 | access to indexer : String | semmle.label | access to indexer : String | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-798/HardcodedCredentials.expected b/csharp/ql/test/query-tests/Security Features/CWE-798/HardcodedCredentials.expected index 4dc81537e20..5c707971384 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-798/HardcodedCredentials.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-798/HardcodedCredentials.expected @@ -1,5 +1,5 @@ edges -| HardcodedCredentials.cs:48:30:48:60 | array creation of type Byte[] : Byte[] | HardcodedCredentials.cs:51:13:51:23 | access to local variable rawCertData | +| HardcodedCredentials.cs:48:30:48:60 | array creation of type Byte[] : Byte[] | HardcodedCredentials.cs:51:13:51:23 | access to local variable rawCertData | provenance | | nodes | HardcodedCredentials.cs:16:25:16:36 | "myPa55word" | semmle.label | "myPa55word" | | HardcodedCredentials.cs:32:19:32:28 | "username" | semmle.label | "username" | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-807/ConditionalBypass.expected b/csharp/ql/test/query-tests/Security Features/CWE-807/ConditionalBypass.expected index 3f985cd5eff..86f4167bd75 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-807/ConditionalBypass.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-807/ConditionalBypass.expected @@ -1,24 +1,24 @@ edges -| ConditionalBypass.cs:12:26:12:48 | access to property QueryString : NameValueCollection | ConditionalBypass.cs:12:26:12:59 | access to indexer : String | -| ConditionalBypass.cs:12:26:12:48 | access to property QueryString : NameValueCollection | ConditionalBypass.cs:16:13:16:30 | ... == ... | -| ConditionalBypass.cs:12:26:12:59 | access to indexer : String | ConditionalBypass.cs:16:13:16:30 | ... == ... | -| ConditionalBypass.cs:19:34:19:52 | access to property Cookies : HttpCookieCollection | ConditionalBypass.cs:22:13:22:23 | access to local variable adminCookie : HttpCookie | -| ConditionalBypass.cs:19:34:19:52 | access to property Cookies : HttpCookieCollection | ConditionalBypass.cs:27:13:27:23 | access to local variable adminCookie : HttpCookie | -| ConditionalBypass.cs:22:13:22:23 | access to local variable adminCookie : HttpCookie | ConditionalBypass.cs:22:13:22:29 | access to property Value : String | -| ConditionalBypass.cs:22:13:22:29 | access to property Value : String | ConditionalBypass.cs:22:13:22:45 | call to method Equals | -| ConditionalBypass.cs:27:13:27:23 | access to local variable adminCookie : HttpCookie | ConditionalBypass.cs:27:13:27:29 | access to property Value : String | -| ConditionalBypass.cs:27:13:27:29 | access to property Value : String | ConditionalBypass.cs:27:13:27:40 | ... == ... | -| ConditionalBypass.cs:42:32:42:66 | call to method GetHostByAddress : IPHostEntry | ConditionalBypass.cs:44:13:44:20 | access to local variable hostInfo : IPHostEntry | -| ConditionalBypass.cs:42:32:42:66 | call to method GetHostByAddress : IPHostEntry | ConditionalBypass.cs:49:13:49:20 | access to local variable hostInfo : IPHostEntry | -| ConditionalBypass.cs:44:13:44:20 | access to local variable hostInfo : IPHostEntry | ConditionalBypass.cs:44:13:44:29 | access to property HostName : String | -| ConditionalBypass.cs:44:13:44:29 | access to property HostName : String | ConditionalBypass.cs:44:13:44:46 | ... == ... | -| ConditionalBypass.cs:49:13:49:20 | access to local variable hostInfo : IPHostEntry | ConditionalBypass.cs:49:13:49:29 | access to property HostName | -| ConditionalBypass.cs:70:34:70:52 | access to property Cookies : HttpCookieCollection | ConditionalBypass.cs:72:13:72:23 | access to local variable adminCookie : HttpCookie | -| ConditionalBypass.cs:72:13:72:23 | access to local variable adminCookie : HttpCookie | ConditionalBypass.cs:72:13:72:29 | access to property Value : String | -| ConditionalBypass.cs:72:13:72:29 | access to property Value : String | ConditionalBypass.cs:72:13:72:40 | ... == ... | -| ConditionalBypass.cs:83:34:83:52 | access to property Cookies : HttpCookieCollection | ConditionalBypass.cs:84:13:84:23 | access to local variable adminCookie : HttpCookie | -| ConditionalBypass.cs:84:13:84:23 | access to local variable adminCookie : HttpCookie | ConditionalBypass.cs:84:13:84:29 | access to property Value : String | -| ConditionalBypass.cs:84:13:84:29 | access to property Value : String | ConditionalBypass.cs:84:13:84:40 | ... == ... | +| ConditionalBypass.cs:12:26:12:48 | access to property QueryString : NameValueCollection | ConditionalBypass.cs:12:26:12:59 | access to indexer : String | provenance | | +| ConditionalBypass.cs:12:26:12:48 | access to property QueryString : NameValueCollection | ConditionalBypass.cs:16:13:16:30 | ... == ... | provenance | | +| ConditionalBypass.cs:12:26:12:59 | access to indexer : String | ConditionalBypass.cs:16:13:16:30 | ... == ... | provenance | | +| ConditionalBypass.cs:19:34:19:52 | access to property Cookies : HttpCookieCollection | ConditionalBypass.cs:22:13:22:23 | access to local variable adminCookie : HttpCookie | provenance | | +| ConditionalBypass.cs:19:34:19:52 | access to property Cookies : HttpCookieCollection | ConditionalBypass.cs:27:13:27:23 | access to local variable adminCookie : HttpCookie | provenance | | +| ConditionalBypass.cs:22:13:22:23 | access to local variable adminCookie : HttpCookie | ConditionalBypass.cs:22:13:22:29 | access to property Value : String | provenance | | +| ConditionalBypass.cs:22:13:22:29 | access to property Value : String | ConditionalBypass.cs:22:13:22:45 | call to method Equals | provenance | | +| ConditionalBypass.cs:27:13:27:23 | access to local variable adminCookie : HttpCookie | ConditionalBypass.cs:27:13:27:29 | access to property Value : String | provenance | | +| ConditionalBypass.cs:27:13:27:29 | access to property Value : String | ConditionalBypass.cs:27:13:27:40 | ... == ... | provenance | | +| ConditionalBypass.cs:42:32:42:66 | call to method GetHostByAddress : IPHostEntry | ConditionalBypass.cs:44:13:44:20 | access to local variable hostInfo : IPHostEntry | provenance | | +| ConditionalBypass.cs:42:32:42:66 | call to method GetHostByAddress : IPHostEntry | ConditionalBypass.cs:49:13:49:20 | access to local variable hostInfo : IPHostEntry | provenance | | +| ConditionalBypass.cs:44:13:44:20 | access to local variable hostInfo : IPHostEntry | ConditionalBypass.cs:44:13:44:29 | access to property HostName : String | provenance | | +| ConditionalBypass.cs:44:13:44:29 | access to property HostName : String | ConditionalBypass.cs:44:13:44:46 | ... == ... | provenance | | +| ConditionalBypass.cs:49:13:49:20 | access to local variable hostInfo : IPHostEntry | ConditionalBypass.cs:49:13:49:29 | access to property HostName | provenance | | +| ConditionalBypass.cs:70:34:70:52 | access to property Cookies : HttpCookieCollection | ConditionalBypass.cs:72:13:72:23 | access to local variable adminCookie : HttpCookie | provenance | | +| ConditionalBypass.cs:72:13:72:23 | access to local variable adminCookie : HttpCookie | ConditionalBypass.cs:72:13:72:29 | access to property Value : String | provenance | | +| ConditionalBypass.cs:72:13:72:29 | access to property Value : String | ConditionalBypass.cs:72:13:72:40 | ... == ... | provenance | | +| ConditionalBypass.cs:83:34:83:52 | access to property Cookies : HttpCookieCollection | ConditionalBypass.cs:84:13:84:23 | access to local variable adminCookie : HttpCookie | provenance | | +| ConditionalBypass.cs:84:13:84:23 | access to local variable adminCookie : HttpCookie | ConditionalBypass.cs:84:13:84:29 | access to property Value : String | provenance | | +| ConditionalBypass.cs:84:13:84:29 | access to property Value : String | ConditionalBypass.cs:84:13:84:40 | ... == ... | provenance | | nodes | ConditionalBypass.cs:12:26:12:48 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | | ConditionalBypass.cs:12:26:12:59 | access to indexer : String | semmle.label | access to indexer : String | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-838/InappropriateEncoding.expected b/csharp/ql/test/query-tests/Security Features/CWE-838/InappropriateEncoding.expected index 2f33a932e3d..4958966f788 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-838/InappropriateEncoding.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-838/InappropriateEncoding.expected @@ -1,14 +1,14 @@ edges -| HtmlEncode.cs:10:40:10:65 | call to method UrlEncode : String | HtmlEncode.cs:10:28:10:65 | ... + ... | -| InappropriateEncoding.cs:13:28:13:40 | call to method Encode : String | InappropriateEncoding.cs:18:46:18:51 | access to local variable query1 | -| InappropriateEncoding.cs:34:28:34:55 | call to method UrlEncode : String | InappropriateEncoding.cs:35:32:35:43 | access to local variable encodedValue | -| InappropriateEncoding.cs:34:28:34:55 | call to method UrlEncode : String | InappropriateEncoding.cs:36:22:36:59 | ... + ... | -| InappropriateEncoding.cs:34:28:34:55 | call to method UrlEncode : String | InappropriateEncoding.cs:37:59:37:70 | access to local variable encodedValue : String | -| InappropriateEncoding.cs:37:59:37:70 | access to local variable encodedValue : String | InappropriateEncoding.cs:37:22:37:71 | call to method Format | -| InappropriateEncoding.cs:55:28:55:56 | call to method HtmlEncode : String | InappropriateEncoding.cs:56:31:56:42 | access to local variable encodedValue | -| InappropriateEncoding.cs:66:16:66:42 | call to method Replace : String | InappropriateEncoding.cs:13:28:13:40 | call to method Encode : String | -| SqlEncode.cs:14:62:14:87 | call to method Replace : String | SqlEncode.cs:15:46:15:50 | access to local variable query | -| UrlEncode.cs:10:43:10:69 | call to method HtmlEncode : String | UrlEncode.cs:10:31:10:69 | ... + ... | +| HtmlEncode.cs:10:40:10:65 | call to method UrlEncode : String | HtmlEncode.cs:10:28:10:65 | ... + ... | provenance | | +| InappropriateEncoding.cs:13:28:13:40 | call to method Encode : String | InappropriateEncoding.cs:18:46:18:51 | access to local variable query1 | provenance | | +| InappropriateEncoding.cs:34:28:34:55 | call to method UrlEncode : String | InappropriateEncoding.cs:35:32:35:43 | access to local variable encodedValue | provenance | | +| InappropriateEncoding.cs:34:28:34:55 | call to method UrlEncode : String | InappropriateEncoding.cs:36:22:36:59 | ... + ... | provenance | | +| InappropriateEncoding.cs:34:28:34:55 | call to method UrlEncode : String | InappropriateEncoding.cs:37:59:37:70 | access to local variable encodedValue : String | provenance | | +| InappropriateEncoding.cs:37:59:37:70 | access to local variable encodedValue : String | InappropriateEncoding.cs:37:22:37:71 | call to method Format | provenance | | +| InappropriateEncoding.cs:55:28:55:56 | call to method HtmlEncode : String | InappropriateEncoding.cs:56:31:56:42 | access to local variable encodedValue | provenance | | +| InappropriateEncoding.cs:66:16:66:42 | call to method Replace : String | InappropriateEncoding.cs:13:28:13:40 | call to method Encode : String | provenance | | +| SqlEncode.cs:14:62:14:87 | call to method Replace : String | SqlEncode.cs:15:46:15:50 | access to local variable query | provenance | | +| UrlEncode.cs:10:43:10:69 | call to method HtmlEncode : String | UrlEncode.cs:10:31:10:69 | ... + ... | provenance | | nodes | HtmlEncode.cs:10:28:10:65 | ... + ... | semmle.label | ... + ... | | HtmlEncode.cs:10:40:10:65 | call to method UrlEncode : String | semmle.label | call to method UrlEncode : String | From 3b8af1e52abce2372d6d07b995db87ef7dae31b3 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Tue, 6 Feb 2024 13:03:43 +0100 Subject: [PATCH 114/378] Go: Add empty provenance column to expected files. --- .../CWE-090/LDAPInjection.expected | 40 +- .../CWE-1004/CookieWithoutHttpOnly.expected | 816 +++++++++--------- .../test/experimental/CWE-203/Timing.expected | 12 +- .../CWE-287/ImproperLdapAuth.expected | 6 +- .../CWE-321-V2/HardCodedKeys.expected | 8 +- .../CWE-321/HardcodedKeys.expected | 80 +- .../ParseJWTWithoutVerification.expected | 24 +- .../CWE-369/DivideByZero.expected | 44 +- .../experimental/CWE-74/DsnInjection.expected | 10 +- .../CWE-74/DsnInjectionLocal.expected | 40 +- .../HTMLTemplateEscapingPassthrough.expected | 48 +- go/ql/test/experimental/CWE-918/SSRF.expected | 84 +- .../Unsafe/WrongUsageOfUnsafe.expected | 32 +- .../go/dataflow/ChannelField/test.expected | 18 +- .../DefaultSanitizer.expected | 4 +- .../go/dataflow/HiddenNodes/test.expected | 6 +- .../go/frameworks/Beego/ReflectedXss.expected | 202 ++--- .../go/frameworks/Beego/TaintedPath.expected | 16 +- .../frameworks/BeegoOrm/SqlInjection.expected | 64 +- .../go/frameworks/BeegoOrm/StoredXss.expected | 54 +- .../go/frameworks/Chi/ReflectedXss.expected | 12 +- .../go/frameworks/Echo/OpenRedirect.expected | 20 +- .../go/frameworks/Echo/ReflectedXss.expected | 64 +- .../go/frameworks/Echo/TaintedPath.expected | 4 +- .../go/frameworks/Encoding/jsoniter.expected | 24 +- .../go/frameworks/Gin/TaintedPath.expected | 8 +- .../frameworks/GoMicro/LogInjection.expected | 24 +- .../frameworks/Gorestful/gorestful.expected | 16 +- .../go/frameworks/Revel/OpenRedirect.expected | 10 +- .../go/frameworks/Revel/ReflectedXss.expected | 18 +- .../go/frameworks/Revel/TaintedPath.expected | 8 +- .../frameworks/Twirp/RequestForgery.expected | 46 +- .../frameworks/XNetHtml/ReflectedXss.expected | 112 +-- .../frameworks/XNetHtml/SqlInjection.expected | 4 +- .../UnhandledCloseWritableHandle.expected | 30 +- .../IncompleteHostnameRegexp.expected | 2 +- .../Security/CWE-022/TaintedPath.expected | 10 +- .../CWE-022/UnsafeUnzipSymlink.expected | 8 +- .../Security/CWE-022/ZipSlip.expected | 24 +- .../CWE-078/CommandInjection.expected | 142 +-- .../Security/CWE-078/StoredCommand.expected | 8 +- .../Security/CWE-079/ReflectedXss.expected | 96 +-- .../Security/CWE-079/StoredXss.expected | 12 +- .../Security/CWE-089/SqlInjection.expected | 216 ++--- .../Security/CWE-089/StringBreak.expected | 14 +- .../CWE-190/AllocationSizeOverflow.expected | 40 +- .../CWE-209/StackTraceExposure.expected | 2 +- .../CWE-312/CleartextLogging.expected | 104 +-- .../CWE-322/InsecureHostKeyCallback.expected | 32 +- .../CWE-326/InsufficientKeySize.expected | 12 +- .../Security/CWE-327/UnsafeTLS.expected | 80 +- .../CWE-327/WeakCryptoAlgorithm.expected | 8 +- .../InsecureRandomness.expected | 30 +- .../CWE-352/ConstantOauth2State.expected | 24 +- .../BadRedirectCheck.expected | 38 +- .../OpenUrlRedirect/OpenUrlRedirect.expected | 130 +-- .../Security/CWE-640/EmailInjection.expected | 38 +- .../Security/CWE-643/XPathInjection.expected | 106 +-- .../Security/CWE-918/RequestForgery.expected | 56 +- 59 files changed, 1620 insertions(+), 1620 deletions(-) diff --git a/go/ql/test/experimental/CWE-090/LDAPInjection.expected b/go/ql/test/experimental/CWE-090/LDAPInjection.expected index 8e1165fab60..2815643c014 100644 --- a/go/ql/test/experimental/CWE-090/LDAPInjection.expected +++ b/go/ql/test/experimental/CWE-090/LDAPInjection.expected @@ -1,24 +1,24 @@ edges -| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:59:3:59:11 | untrusted | -| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:61:3:61:51 | ...+... | -| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:62:3:62:33 | slice literal | -| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:62:24:62:32 | untrusted | -| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:66:3:66:11 | untrusted | -| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:68:3:68:51 | ...+... | -| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:69:3:69:33 | slice literal | -| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:69:24:69:32 | untrusted | -| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:73:3:73:11 | untrusted | -| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:75:3:75:51 | ...+... | -| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:76:3:76:33 | slice literal | -| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:76:24:76:32 | untrusted | -| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:80:22:80:30 | untrusted | -| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:81:25:81:33 | untrusted | -| LDAPInjection.go:62:3:62:33 | slice literal [array] | LDAPInjection.go:62:3:62:33 | slice literal | -| LDAPInjection.go:62:24:62:32 | untrusted | LDAPInjection.go:62:3:62:33 | slice literal [array] | -| LDAPInjection.go:69:3:69:33 | slice literal [array] | LDAPInjection.go:69:3:69:33 | slice literal | -| LDAPInjection.go:69:24:69:32 | untrusted | LDAPInjection.go:69:3:69:33 | slice literal [array] | -| LDAPInjection.go:76:3:76:33 | slice literal [array] | LDAPInjection.go:76:3:76:33 | slice literal | -| LDAPInjection.go:76:24:76:32 | untrusted | LDAPInjection.go:76:3:76:33 | slice literal [array] | +| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:59:3:59:11 | untrusted | provenance | | +| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:61:3:61:51 | ...+... | provenance | | +| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:62:3:62:33 | slice literal | provenance | | +| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:62:24:62:32 | untrusted | provenance | | +| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:66:3:66:11 | untrusted | provenance | | +| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:68:3:68:51 | ...+... | provenance | | +| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:69:3:69:33 | slice literal | provenance | | +| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:69:24:69:32 | untrusted | provenance | | +| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:73:3:73:11 | untrusted | provenance | | +| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:75:3:75:51 | ...+... | provenance | | +| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:76:3:76:33 | slice literal | provenance | | +| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:76:24:76:32 | untrusted | provenance | | +| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:80:22:80:30 | untrusted | provenance | | +| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:81:25:81:33 | untrusted | provenance | | +| LDAPInjection.go:62:3:62:33 | slice literal [array] | LDAPInjection.go:62:3:62:33 | slice literal | provenance | | +| LDAPInjection.go:62:24:62:32 | untrusted | LDAPInjection.go:62:3:62:33 | slice literal [array] | provenance | | +| LDAPInjection.go:69:3:69:33 | slice literal [array] | LDAPInjection.go:69:3:69:33 | slice literal | provenance | | +| LDAPInjection.go:69:24:69:32 | untrusted | LDAPInjection.go:69:3:69:33 | slice literal [array] | provenance | | +| LDAPInjection.go:76:3:76:33 | slice literal [array] | LDAPInjection.go:76:3:76:33 | slice literal | provenance | | +| LDAPInjection.go:76:24:76:32 | untrusted | LDAPInjection.go:76:3:76:33 | slice literal [array] | provenance | | nodes | LDAPInjection.go:57:15:57:29 | call to UserAgent | semmle.label | call to UserAgent | | LDAPInjection.go:59:3:59:11 | untrusted | semmle.label | untrusted | diff --git a/go/ql/test/experimental/CWE-1004/CookieWithoutHttpOnly.expected b/go/ql/test/experimental/CWE-1004/CookieWithoutHttpOnly.expected index c7618b3108f..e00daf0294f 100644 --- a/go/ql/test/experimental/CWE-1004/CookieWithoutHttpOnly.expected +++ b/go/ql/test/experimental/CWE-1004/CookieWithoutHttpOnly.expected @@ -1,412 +1,412 @@ edges -| CookieWithoutHttpOnly.go:11:7:14:2 | struct literal | CookieWithoutHttpOnly.go:15:20:15:21 | &... | -| CookieWithoutHttpOnly.go:11:7:14:2 | struct literal | CookieWithoutHttpOnly.go:15:20:15:21 | &... | -| CookieWithoutHttpOnly.go:11:7:14:2 | struct literal | CookieWithoutHttpOnly.go:15:21:15:21 | c | -| CookieWithoutHttpOnly.go:12:10:12:18 | "session" | CookieWithoutHttpOnly.go:11:7:14:2 | struct literal | -| CookieWithoutHttpOnly.go:15:20:15:21 | &... | CookieWithoutHttpOnly.go:15:20:15:21 | &... | -| CookieWithoutHttpOnly.go:15:20:15:21 | &... | CookieWithoutHttpOnly.go:15:20:15:21 | &... | -| CookieWithoutHttpOnly.go:15:20:15:21 | &... | CookieWithoutHttpOnly.go:15:21:15:21 | c | -| CookieWithoutHttpOnly.go:15:20:15:21 | &... [pointer] | CookieWithoutHttpOnly.go:15:20:15:21 | &... | -| CookieWithoutHttpOnly.go:15:20:15:21 | &... [pointer] | CookieWithoutHttpOnly.go:15:20:15:21 | &... | -| CookieWithoutHttpOnly.go:15:20:15:21 | &... [pointer] | CookieWithoutHttpOnly.go:15:21:15:21 | c | -| CookieWithoutHttpOnly.go:15:21:15:21 | c | CookieWithoutHttpOnly.go:15:20:15:21 | &... [pointer] | -| CookieWithoutHttpOnly.go:19:7:23:2 | struct literal | CookieWithoutHttpOnly.go:24:20:24:21 | &... | -| CookieWithoutHttpOnly.go:19:7:23:2 | struct literal | CookieWithoutHttpOnly.go:24:20:24:21 | &... | -| CookieWithoutHttpOnly.go:19:7:23:2 | struct literal | CookieWithoutHttpOnly.go:24:20:24:21 | &... | -| CookieWithoutHttpOnly.go:19:7:23:2 | struct literal | CookieWithoutHttpOnly.go:24:20:24:21 | &... | -| CookieWithoutHttpOnly.go:19:7:23:2 | struct literal | CookieWithoutHttpOnly.go:24:21:24:21 | c | -| CookieWithoutHttpOnly.go:19:7:23:2 | struct literal | CookieWithoutHttpOnly.go:24:21:24:21 | c | -| CookieWithoutHttpOnly.go:20:13:20:21 | "session" | CookieWithoutHttpOnly.go:19:7:23:2 | struct literal | -| CookieWithoutHttpOnly.go:22:13:22:17 | false | CookieWithoutHttpOnly.go:19:7:23:2 | struct literal | -| CookieWithoutHttpOnly.go:24:20:24:21 | &... | CookieWithoutHttpOnly.go:24:20:24:21 | &... | -| CookieWithoutHttpOnly.go:24:20:24:21 | &... | CookieWithoutHttpOnly.go:24:20:24:21 | &... | -| CookieWithoutHttpOnly.go:24:20:24:21 | &... | CookieWithoutHttpOnly.go:24:20:24:21 | &... | -| CookieWithoutHttpOnly.go:24:20:24:21 | &... | CookieWithoutHttpOnly.go:24:20:24:21 | &... | -| CookieWithoutHttpOnly.go:24:20:24:21 | &... | CookieWithoutHttpOnly.go:24:21:24:21 | c | -| CookieWithoutHttpOnly.go:24:20:24:21 | &... | CookieWithoutHttpOnly.go:24:21:24:21 | c | -| CookieWithoutHttpOnly.go:24:20:24:21 | &... [pointer] | CookieWithoutHttpOnly.go:24:20:24:21 | &... | -| CookieWithoutHttpOnly.go:24:20:24:21 | &... [pointer] | CookieWithoutHttpOnly.go:24:20:24:21 | &... | -| CookieWithoutHttpOnly.go:24:20:24:21 | &... [pointer] | CookieWithoutHttpOnly.go:24:20:24:21 | &... | -| CookieWithoutHttpOnly.go:24:20:24:21 | &... [pointer] | CookieWithoutHttpOnly.go:24:20:24:21 | &... | -| CookieWithoutHttpOnly.go:24:20:24:21 | &... [pointer] | CookieWithoutHttpOnly.go:24:21:24:21 | c | -| CookieWithoutHttpOnly.go:24:20:24:21 | &... [pointer] | CookieWithoutHttpOnly.go:24:21:24:21 | c | -| CookieWithoutHttpOnly.go:24:21:24:21 | c | CookieWithoutHttpOnly.go:24:20:24:21 | &... [pointer] | -| CookieWithoutHttpOnly.go:24:21:24:21 | c | CookieWithoutHttpOnly.go:24:20:24:21 | &... [pointer] | -| CookieWithoutHttpOnly.go:28:7:32:2 | struct literal | CookieWithoutHttpOnly.go:33:20:33:21 | &... | -| CookieWithoutHttpOnly.go:28:7:32:2 | struct literal | CookieWithoutHttpOnly.go:33:20:33:21 | &... | -| CookieWithoutHttpOnly.go:28:7:32:2 | struct literal | CookieWithoutHttpOnly.go:33:20:33:21 | &... | -| CookieWithoutHttpOnly.go:28:7:32:2 | struct literal | CookieWithoutHttpOnly.go:33:20:33:21 | &... | -| CookieWithoutHttpOnly.go:28:7:32:2 | struct literal | CookieWithoutHttpOnly.go:33:21:33:21 | c | -| CookieWithoutHttpOnly.go:28:7:32:2 | struct literal | CookieWithoutHttpOnly.go:33:21:33:21 | c | -| CookieWithoutHttpOnly.go:29:13:29:21 | "session" | CookieWithoutHttpOnly.go:28:7:32:2 | struct literal | -| CookieWithoutHttpOnly.go:31:13:31:16 | true | CookieWithoutHttpOnly.go:28:7:32:2 | struct literal | -| CookieWithoutHttpOnly.go:33:20:33:21 | &... | CookieWithoutHttpOnly.go:33:20:33:21 | &... | -| CookieWithoutHttpOnly.go:33:20:33:21 | &... | CookieWithoutHttpOnly.go:33:20:33:21 | &... | -| CookieWithoutHttpOnly.go:33:20:33:21 | &... | CookieWithoutHttpOnly.go:33:20:33:21 | &... | -| CookieWithoutHttpOnly.go:33:20:33:21 | &... | CookieWithoutHttpOnly.go:33:20:33:21 | &... | -| CookieWithoutHttpOnly.go:33:20:33:21 | &... | CookieWithoutHttpOnly.go:33:21:33:21 | c | -| CookieWithoutHttpOnly.go:33:20:33:21 | &... | CookieWithoutHttpOnly.go:33:21:33:21 | c | -| CookieWithoutHttpOnly.go:33:20:33:21 | &... [pointer] | CookieWithoutHttpOnly.go:33:20:33:21 | &... | -| CookieWithoutHttpOnly.go:33:20:33:21 | &... [pointer] | CookieWithoutHttpOnly.go:33:20:33:21 | &... | -| CookieWithoutHttpOnly.go:33:20:33:21 | &... [pointer] | CookieWithoutHttpOnly.go:33:20:33:21 | &... | -| CookieWithoutHttpOnly.go:33:20:33:21 | &... [pointer] | CookieWithoutHttpOnly.go:33:20:33:21 | &... | -| CookieWithoutHttpOnly.go:33:20:33:21 | &... [pointer] | CookieWithoutHttpOnly.go:33:21:33:21 | c | -| CookieWithoutHttpOnly.go:33:20:33:21 | &... [pointer] | CookieWithoutHttpOnly.go:33:21:33:21 | c | -| CookieWithoutHttpOnly.go:33:21:33:21 | c | CookieWithoutHttpOnly.go:33:20:33:21 | &... [pointer] | -| CookieWithoutHttpOnly.go:33:21:33:21 | c | CookieWithoutHttpOnly.go:33:20:33:21 | &... [pointer] | -| CookieWithoutHttpOnly.go:37:7:40:2 | struct literal | CookieWithoutHttpOnly.go:42:20:42:21 | &... | -| CookieWithoutHttpOnly.go:37:7:40:2 | struct literal | CookieWithoutHttpOnly.go:42:20:42:21 | &... | -| CookieWithoutHttpOnly.go:37:7:40:2 | struct literal | CookieWithoutHttpOnly.go:42:20:42:21 | &... | -| CookieWithoutHttpOnly.go:37:7:40:2 | struct literal | CookieWithoutHttpOnly.go:42:20:42:21 | &... | -| CookieWithoutHttpOnly.go:37:7:40:2 | struct literal | CookieWithoutHttpOnly.go:42:21:42:21 | c | -| CookieWithoutHttpOnly.go:37:7:40:2 | struct literal | CookieWithoutHttpOnly.go:42:21:42:21 | c | -| CookieWithoutHttpOnly.go:38:10:38:18 | "session" | CookieWithoutHttpOnly.go:37:7:40:2 | struct literal | -| CookieWithoutHttpOnly.go:41:15:41:18 | true | CookieWithoutHttpOnly.go:37:7:40:2 | struct literal | -| CookieWithoutHttpOnly.go:42:20:42:21 | &... | CookieWithoutHttpOnly.go:42:20:42:21 | &... | -| CookieWithoutHttpOnly.go:42:20:42:21 | &... | CookieWithoutHttpOnly.go:42:20:42:21 | &... | -| CookieWithoutHttpOnly.go:42:20:42:21 | &... | CookieWithoutHttpOnly.go:42:20:42:21 | &... | -| CookieWithoutHttpOnly.go:42:20:42:21 | &... | CookieWithoutHttpOnly.go:42:20:42:21 | &... | -| CookieWithoutHttpOnly.go:42:20:42:21 | &... | CookieWithoutHttpOnly.go:42:21:42:21 | c | -| CookieWithoutHttpOnly.go:42:20:42:21 | &... | CookieWithoutHttpOnly.go:42:21:42:21 | c | -| CookieWithoutHttpOnly.go:42:20:42:21 | &... [pointer] | CookieWithoutHttpOnly.go:42:20:42:21 | &... | -| CookieWithoutHttpOnly.go:42:20:42:21 | &... [pointer] | CookieWithoutHttpOnly.go:42:20:42:21 | &... | -| CookieWithoutHttpOnly.go:42:20:42:21 | &... [pointer] | CookieWithoutHttpOnly.go:42:20:42:21 | &... | -| CookieWithoutHttpOnly.go:42:20:42:21 | &... [pointer] | CookieWithoutHttpOnly.go:42:20:42:21 | &... | -| CookieWithoutHttpOnly.go:42:20:42:21 | &... [pointer] | CookieWithoutHttpOnly.go:42:21:42:21 | c | -| CookieWithoutHttpOnly.go:42:20:42:21 | &... [pointer] | CookieWithoutHttpOnly.go:42:21:42:21 | c | -| CookieWithoutHttpOnly.go:42:21:42:21 | c | CookieWithoutHttpOnly.go:42:20:42:21 | &... [pointer] | -| CookieWithoutHttpOnly.go:42:21:42:21 | c | CookieWithoutHttpOnly.go:42:20:42:21 | &... [pointer] | -| CookieWithoutHttpOnly.go:46:7:49:2 | struct literal | CookieWithoutHttpOnly.go:51:20:51:21 | &... | -| CookieWithoutHttpOnly.go:46:7:49:2 | struct literal | CookieWithoutHttpOnly.go:51:20:51:21 | &... | -| CookieWithoutHttpOnly.go:46:7:49:2 | struct literal | CookieWithoutHttpOnly.go:51:20:51:21 | &... | -| CookieWithoutHttpOnly.go:46:7:49:2 | struct literal | CookieWithoutHttpOnly.go:51:20:51:21 | &... | -| CookieWithoutHttpOnly.go:46:7:49:2 | struct literal | CookieWithoutHttpOnly.go:51:21:51:21 | c | -| CookieWithoutHttpOnly.go:46:7:49:2 | struct literal | CookieWithoutHttpOnly.go:51:21:51:21 | c | -| CookieWithoutHttpOnly.go:47:10:47:18 | "session" | CookieWithoutHttpOnly.go:46:7:49:2 | struct literal | -| CookieWithoutHttpOnly.go:50:15:50:19 | false | CookieWithoutHttpOnly.go:46:7:49:2 | struct literal | -| CookieWithoutHttpOnly.go:51:20:51:21 | &... | CookieWithoutHttpOnly.go:51:20:51:21 | &... | -| CookieWithoutHttpOnly.go:51:20:51:21 | &... | CookieWithoutHttpOnly.go:51:20:51:21 | &... | -| CookieWithoutHttpOnly.go:51:20:51:21 | &... | CookieWithoutHttpOnly.go:51:20:51:21 | &... | -| CookieWithoutHttpOnly.go:51:20:51:21 | &... | CookieWithoutHttpOnly.go:51:20:51:21 | &... | -| CookieWithoutHttpOnly.go:51:20:51:21 | &... | CookieWithoutHttpOnly.go:51:21:51:21 | c | -| CookieWithoutHttpOnly.go:51:20:51:21 | &... | CookieWithoutHttpOnly.go:51:21:51:21 | c | -| CookieWithoutHttpOnly.go:51:20:51:21 | &... [pointer] | CookieWithoutHttpOnly.go:51:20:51:21 | &... | -| CookieWithoutHttpOnly.go:51:20:51:21 | &... [pointer] | CookieWithoutHttpOnly.go:51:20:51:21 | &... | -| CookieWithoutHttpOnly.go:51:20:51:21 | &... [pointer] | CookieWithoutHttpOnly.go:51:20:51:21 | &... | -| CookieWithoutHttpOnly.go:51:20:51:21 | &... [pointer] | CookieWithoutHttpOnly.go:51:20:51:21 | &... | -| CookieWithoutHttpOnly.go:51:20:51:21 | &... [pointer] | CookieWithoutHttpOnly.go:51:21:51:21 | c | -| CookieWithoutHttpOnly.go:51:20:51:21 | &... [pointer] | CookieWithoutHttpOnly.go:51:21:51:21 | c | -| CookieWithoutHttpOnly.go:51:21:51:21 | c | CookieWithoutHttpOnly.go:51:20:51:21 | &... [pointer] | -| CookieWithoutHttpOnly.go:51:21:51:21 | c | CookieWithoutHttpOnly.go:51:20:51:21 | &... [pointer] | -| CookieWithoutHttpOnly.go:55:2:55:4 | definition of val | CookieWithoutHttpOnly.go:59:13:59:15 | val | -| CookieWithoutHttpOnly.go:55:9:55:13 | false | CookieWithoutHttpOnly.go:59:13:59:15 | val | -| CookieWithoutHttpOnly.go:56:7:60:2 | struct literal | CookieWithoutHttpOnly.go:61:20:61:21 | &... | -| CookieWithoutHttpOnly.go:56:7:60:2 | struct literal | CookieWithoutHttpOnly.go:61:20:61:21 | &... | -| CookieWithoutHttpOnly.go:56:7:60:2 | struct literal | CookieWithoutHttpOnly.go:61:20:61:21 | &... | -| CookieWithoutHttpOnly.go:56:7:60:2 | struct literal | CookieWithoutHttpOnly.go:61:20:61:21 | &... | -| CookieWithoutHttpOnly.go:56:7:60:2 | struct literal | CookieWithoutHttpOnly.go:61:21:61:21 | c | -| CookieWithoutHttpOnly.go:56:7:60:2 | struct literal | CookieWithoutHttpOnly.go:61:21:61:21 | c | -| CookieWithoutHttpOnly.go:57:13:57:21 | "session" | CookieWithoutHttpOnly.go:56:7:60:2 | struct literal | -| CookieWithoutHttpOnly.go:59:13:59:15 | val | CookieWithoutHttpOnly.go:56:7:60:2 | struct literal | -| CookieWithoutHttpOnly.go:61:20:61:21 | &... | CookieWithoutHttpOnly.go:61:20:61:21 | &... | -| CookieWithoutHttpOnly.go:61:20:61:21 | &... | CookieWithoutHttpOnly.go:61:20:61:21 | &... | -| CookieWithoutHttpOnly.go:61:20:61:21 | &... | CookieWithoutHttpOnly.go:61:20:61:21 | &... | -| CookieWithoutHttpOnly.go:61:20:61:21 | &... | CookieWithoutHttpOnly.go:61:20:61:21 | &... | -| CookieWithoutHttpOnly.go:61:20:61:21 | &... | CookieWithoutHttpOnly.go:61:21:61:21 | c | -| CookieWithoutHttpOnly.go:61:20:61:21 | &... | CookieWithoutHttpOnly.go:61:21:61:21 | c | -| CookieWithoutHttpOnly.go:61:20:61:21 | &... [pointer] | CookieWithoutHttpOnly.go:61:20:61:21 | &... | -| CookieWithoutHttpOnly.go:61:20:61:21 | &... [pointer] | CookieWithoutHttpOnly.go:61:20:61:21 | &... | -| CookieWithoutHttpOnly.go:61:20:61:21 | &... [pointer] | CookieWithoutHttpOnly.go:61:20:61:21 | &... | -| CookieWithoutHttpOnly.go:61:20:61:21 | &... [pointer] | CookieWithoutHttpOnly.go:61:20:61:21 | &... | -| CookieWithoutHttpOnly.go:61:20:61:21 | &... [pointer] | CookieWithoutHttpOnly.go:61:21:61:21 | c | -| CookieWithoutHttpOnly.go:61:20:61:21 | &... [pointer] | CookieWithoutHttpOnly.go:61:21:61:21 | c | -| CookieWithoutHttpOnly.go:61:21:61:21 | c | CookieWithoutHttpOnly.go:61:20:61:21 | &... [pointer] | -| CookieWithoutHttpOnly.go:61:21:61:21 | c | CookieWithoutHttpOnly.go:61:20:61:21 | &... [pointer] | -| CookieWithoutHttpOnly.go:65:2:65:4 | definition of val | CookieWithoutHttpOnly.go:69:13:69:15 | val | -| CookieWithoutHttpOnly.go:65:9:65:12 | true | CookieWithoutHttpOnly.go:69:13:69:15 | val | -| CookieWithoutHttpOnly.go:66:7:70:2 | struct literal | CookieWithoutHttpOnly.go:71:20:71:21 | &... | -| CookieWithoutHttpOnly.go:66:7:70:2 | struct literal | CookieWithoutHttpOnly.go:71:20:71:21 | &... | -| CookieWithoutHttpOnly.go:66:7:70:2 | struct literal | CookieWithoutHttpOnly.go:71:20:71:21 | &... | -| CookieWithoutHttpOnly.go:66:7:70:2 | struct literal | CookieWithoutHttpOnly.go:71:20:71:21 | &... | -| CookieWithoutHttpOnly.go:66:7:70:2 | struct literal | CookieWithoutHttpOnly.go:71:21:71:21 | c | -| CookieWithoutHttpOnly.go:66:7:70:2 | struct literal | CookieWithoutHttpOnly.go:71:21:71:21 | c | -| CookieWithoutHttpOnly.go:67:13:67:21 | "session" | CookieWithoutHttpOnly.go:66:7:70:2 | struct literal | -| CookieWithoutHttpOnly.go:69:13:69:15 | val | CookieWithoutHttpOnly.go:66:7:70:2 | struct literal | -| CookieWithoutHttpOnly.go:71:20:71:21 | &... | CookieWithoutHttpOnly.go:71:20:71:21 | &... | -| CookieWithoutHttpOnly.go:71:20:71:21 | &... | CookieWithoutHttpOnly.go:71:20:71:21 | &... | -| CookieWithoutHttpOnly.go:71:20:71:21 | &... | CookieWithoutHttpOnly.go:71:20:71:21 | &... | -| CookieWithoutHttpOnly.go:71:20:71:21 | &... | CookieWithoutHttpOnly.go:71:20:71:21 | &... | -| CookieWithoutHttpOnly.go:71:20:71:21 | &... | CookieWithoutHttpOnly.go:71:21:71:21 | c | -| CookieWithoutHttpOnly.go:71:20:71:21 | &... | CookieWithoutHttpOnly.go:71:21:71:21 | c | -| CookieWithoutHttpOnly.go:71:20:71:21 | &... [pointer] | CookieWithoutHttpOnly.go:71:20:71:21 | &... | -| CookieWithoutHttpOnly.go:71:20:71:21 | &... [pointer] | CookieWithoutHttpOnly.go:71:20:71:21 | &... | -| CookieWithoutHttpOnly.go:71:20:71:21 | &... [pointer] | CookieWithoutHttpOnly.go:71:20:71:21 | &... | -| CookieWithoutHttpOnly.go:71:20:71:21 | &... [pointer] | CookieWithoutHttpOnly.go:71:20:71:21 | &... | -| CookieWithoutHttpOnly.go:71:20:71:21 | &... [pointer] | CookieWithoutHttpOnly.go:71:21:71:21 | c | -| CookieWithoutHttpOnly.go:71:20:71:21 | &... [pointer] | CookieWithoutHttpOnly.go:71:21:71:21 | c | -| CookieWithoutHttpOnly.go:71:21:71:21 | c | CookieWithoutHttpOnly.go:71:20:71:21 | &... [pointer] | -| CookieWithoutHttpOnly.go:71:21:71:21 | c | CookieWithoutHttpOnly.go:71:20:71:21 | &... [pointer] | -| CookieWithoutHttpOnly.go:75:2:75:4 | definition of val | CookieWithoutHttpOnly.go:80:15:80:17 | val | -| CookieWithoutHttpOnly.go:75:9:75:12 | true | CookieWithoutHttpOnly.go:80:15:80:17 | val | -| CookieWithoutHttpOnly.go:76:7:79:2 | struct literal | CookieWithoutHttpOnly.go:81:20:81:21 | &... | -| CookieWithoutHttpOnly.go:76:7:79:2 | struct literal | CookieWithoutHttpOnly.go:81:20:81:21 | &... | -| CookieWithoutHttpOnly.go:76:7:79:2 | struct literal | CookieWithoutHttpOnly.go:81:20:81:21 | &... | -| CookieWithoutHttpOnly.go:76:7:79:2 | struct literal | CookieWithoutHttpOnly.go:81:20:81:21 | &... | -| CookieWithoutHttpOnly.go:76:7:79:2 | struct literal | CookieWithoutHttpOnly.go:81:21:81:21 | c | -| CookieWithoutHttpOnly.go:76:7:79:2 | struct literal | CookieWithoutHttpOnly.go:81:21:81:21 | c | -| CookieWithoutHttpOnly.go:77:10:77:18 | "session" | CookieWithoutHttpOnly.go:76:7:79:2 | struct literal | -| CookieWithoutHttpOnly.go:80:15:80:17 | val | CookieWithoutHttpOnly.go:76:7:79:2 | struct literal | -| CookieWithoutHttpOnly.go:81:20:81:21 | &... | CookieWithoutHttpOnly.go:81:20:81:21 | &... | -| CookieWithoutHttpOnly.go:81:20:81:21 | &... | CookieWithoutHttpOnly.go:81:20:81:21 | &... | -| CookieWithoutHttpOnly.go:81:20:81:21 | &... | CookieWithoutHttpOnly.go:81:20:81:21 | &... | -| CookieWithoutHttpOnly.go:81:20:81:21 | &... | CookieWithoutHttpOnly.go:81:20:81:21 | &... | -| CookieWithoutHttpOnly.go:81:20:81:21 | &... | CookieWithoutHttpOnly.go:81:21:81:21 | c | -| CookieWithoutHttpOnly.go:81:20:81:21 | &... | CookieWithoutHttpOnly.go:81:21:81:21 | c | -| CookieWithoutHttpOnly.go:81:20:81:21 | &... [pointer] | CookieWithoutHttpOnly.go:81:20:81:21 | &... | -| CookieWithoutHttpOnly.go:81:20:81:21 | &... [pointer] | CookieWithoutHttpOnly.go:81:20:81:21 | &... | -| CookieWithoutHttpOnly.go:81:20:81:21 | &... [pointer] | CookieWithoutHttpOnly.go:81:20:81:21 | &... | -| CookieWithoutHttpOnly.go:81:20:81:21 | &... [pointer] | CookieWithoutHttpOnly.go:81:20:81:21 | &... | -| CookieWithoutHttpOnly.go:81:20:81:21 | &... [pointer] | CookieWithoutHttpOnly.go:81:21:81:21 | c | -| CookieWithoutHttpOnly.go:81:20:81:21 | &... [pointer] | CookieWithoutHttpOnly.go:81:21:81:21 | c | -| CookieWithoutHttpOnly.go:81:21:81:21 | c | CookieWithoutHttpOnly.go:81:20:81:21 | &... [pointer] | -| CookieWithoutHttpOnly.go:81:21:81:21 | c | CookieWithoutHttpOnly.go:81:20:81:21 | &... [pointer] | -| CookieWithoutHttpOnly.go:85:2:85:4 | definition of val | CookieWithoutHttpOnly.go:90:15:90:17 | val | -| CookieWithoutHttpOnly.go:85:9:85:13 | false | CookieWithoutHttpOnly.go:90:15:90:17 | val | -| CookieWithoutHttpOnly.go:86:7:89:2 | struct literal | CookieWithoutHttpOnly.go:91:20:91:21 | &... | -| CookieWithoutHttpOnly.go:86:7:89:2 | struct literal | CookieWithoutHttpOnly.go:91:20:91:21 | &... | -| CookieWithoutHttpOnly.go:86:7:89:2 | struct literal | CookieWithoutHttpOnly.go:91:20:91:21 | &... | -| CookieWithoutHttpOnly.go:86:7:89:2 | struct literal | CookieWithoutHttpOnly.go:91:20:91:21 | &... | -| CookieWithoutHttpOnly.go:86:7:89:2 | struct literal | CookieWithoutHttpOnly.go:91:21:91:21 | c | -| CookieWithoutHttpOnly.go:86:7:89:2 | struct literal | CookieWithoutHttpOnly.go:91:21:91:21 | c | -| CookieWithoutHttpOnly.go:87:10:87:18 | "session" | CookieWithoutHttpOnly.go:86:7:89:2 | struct literal | -| CookieWithoutHttpOnly.go:90:15:90:17 | val | CookieWithoutHttpOnly.go:86:7:89:2 | struct literal | -| CookieWithoutHttpOnly.go:91:20:91:21 | &... | CookieWithoutHttpOnly.go:91:20:91:21 | &... | -| CookieWithoutHttpOnly.go:91:20:91:21 | &... | CookieWithoutHttpOnly.go:91:20:91:21 | &... | -| CookieWithoutHttpOnly.go:91:20:91:21 | &... | CookieWithoutHttpOnly.go:91:20:91:21 | &... | -| CookieWithoutHttpOnly.go:91:20:91:21 | &... | CookieWithoutHttpOnly.go:91:20:91:21 | &... | -| CookieWithoutHttpOnly.go:91:20:91:21 | &... | CookieWithoutHttpOnly.go:91:21:91:21 | c | -| CookieWithoutHttpOnly.go:91:20:91:21 | &... | CookieWithoutHttpOnly.go:91:21:91:21 | c | -| CookieWithoutHttpOnly.go:91:20:91:21 | &... [pointer] | CookieWithoutHttpOnly.go:91:20:91:21 | &... | -| CookieWithoutHttpOnly.go:91:20:91:21 | &... [pointer] | CookieWithoutHttpOnly.go:91:20:91:21 | &... | -| CookieWithoutHttpOnly.go:91:20:91:21 | &... [pointer] | CookieWithoutHttpOnly.go:91:20:91:21 | &... | -| CookieWithoutHttpOnly.go:91:20:91:21 | &... [pointer] | CookieWithoutHttpOnly.go:91:20:91:21 | &... | -| CookieWithoutHttpOnly.go:91:20:91:21 | &... [pointer] | CookieWithoutHttpOnly.go:91:21:91:21 | c | -| CookieWithoutHttpOnly.go:91:20:91:21 | &... [pointer] | CookieWithoutHttpOnly.go:91:21:91:21 | c | -| CookieWithoutHttpOnly.go:91:21:91:21 | c | CookieWithoutHttpOnly.go:91:20:91:21 | &... [pointer] | -| CookieWithoutHttpOnly.go:91:21:91:21 | c | CookieWithoutHttpOnly.go:91:20:91:21 | &... [pointer] | -| CookieWithoutHttpOnly.go:95:7:98:2 | struct literal | CookieWithoutHttpOnly.go:100:20:100:21 | &... | -| CookieWithoutHttpOnly.go:95:7:98:2 | struct literal | CookieWithoutHttpOnly.go:100:20:100:21 | &... | -| CookieWithoutHttpOnly.go:95:7:98:2 | struct literal | CookieWithoutHttpOnly.go:100:21:100:21 | c | -| CookieWithoutHttpOnly.go:99:15:99:19 | false | CookieWithoutHttpOnly.go:95:7:98:2 | struct literal | -| CookieWithoutHttpOnly.go:100:20:100:21 | &... | CookieWithoutHttpOnly.go:100:20:100:21 | &... | -| CookieWithoutHttpOnly.go:100:20:100:21 | &... | CookieWithoutHttpOnly.go:100:20:100:21 | &... | -| CookieWithoutHttpOnly.go:100:20:100:21 | &... | CookieWithoutHttpOnly.go:100:21:100:21 | c | -| CookieWithoutHttpOnly.go:100:20:100:21 | &... [pointer] | CookieWithoutHttpOnly.go:100:20:100:21 | &... | -| CookieWithoutHttpOnly.go:100:20:100:21 | &... [pointer] | CookieWithoutHttpOnly.go:100:20:100:21 | &... | -| CookieWithoutHttpOnly.go:100:20:100:21 | &... [pointer] | CookieWithoutHttpOnly.go:100:21:100:21 | c | -| CookieWithoutHttpOnly.go:100:21:100:21 | c | CookieWithoutHttpOnly.go:100:20:100:21 | &... [pointer] | -| CookieWithoutHttpOnly.go:104:10:104:18 | "session" | CookieWithoutHttpOnly.go:106:10:106:13 | name | -| CookieWithoutHttpOnly.go:105:7:108:2 | struct literal | CookieWithoutHttpOnly.go:110:20:110:21 | &... | -| CookieWithoutHttpOnly.go:105:7:108:2 | struct literal | CookieWithoutHttpOnly.go:110:20:110:21 | &... | -| CookieWithoutHttpOnly.go:105:7:108:2 | struct literal | CookieWithoutHttpOnly.go:110:20:110:21 | &... | -| CookieWithoutHttpOnly.go:105:7:108:2 | struct literal | CookieWithoutHttpOnly.go:110:20:110:21 | &... | -| CookieWithoutHttpOnly.go:105:7:108:2 | struct literal | CookieWithoutHttpOnly.go:110:21:110:21 | c | -| CookieWithoutHttpOnly.go:105:7:108:2 | struct literal | CookieWithoutHttpOnly.go:110:21:110:21 | c | -| CookieWithoutHttpOnly.go:106:10:106:13 | name | CookieWithoutHttpOnly.go:105:7:108:2 | struct literal | -| CookieWithoutHttpOnly.go:109:15:109:19 | false | CookieWithoutHttpOnly.go:105:7:108:2 | struct literal | -| CookieWithoutHttpOnly.go:110:20:110:21 | &... | CookieWithoutHttpOnly.go:110:20:110:21 | &... | -| CookieWithoutHttpOnly.go:110:20:110:21 | &... | CookieWithoutHttpOnly.go:110:20:110:21 | &... | -| CookieWithoutHttpOnly.go:110:20:110:21 | &... | CookieWithoutHttpOnly.go:110:20:110:21 | &... | -| CookieWithoutHttpOnly.go:110:20:110:21 | &... | CookieWithoutHttpOnly.go:110:20:110:21 | &... | -| CookieWithoutHttpOnly.go:110:20:110:21 | &... | CookieWithoutHttpOnly.go:110:21:110:21 | c | -| CookieWithoutHttpOnly.go:110:20:110:21 | &... | CookieWithoutHttpOnly.go:110:21:110:21 | c | -| CookieWithoutHttpOnly.go:110:20:110:21 | &... [pointer] | CookieWithoutHttpOnly.go:110:20:110:21 | &... | -| CookieWithoutHttpOnly.go:110:20:110:21 | &... [pointer] | CookieWithoutHttpOnly.go:110:20:110:21 | &... | -| CookieWithoutHttpOnly.go:110:20:110:21 | &... [pointer] | CookieWithoutHttpOnly.go:110:20:110:21 | &... | -| CookieWithoutHttpOnly.go:110:20:110:21 | &... [pointer] | CookieWithoutHttpOnly.go:110:20:110:21 | &... | -| CookieWithoutHttpOnly.go:110:20:110:21 | &... [pointer] | CookieWithoutHttpOnly.go:110:21:110:21 | c | -| CookieWithoutHttpOnly.go:110:20:110:21 | &... [pointer] | CookieWithoutHttpOnly.go:110:21:110:21 | c | -| CookieWithoutHttpOnly.go:110:21:110:21 | c | CookieWithoutHttpOnly.go:110:20:110:21 | &... [pointer] | -| CookieWithoutHttpOnly.go:110:21:110:21 | c | CookieWithoutHttpOnly.go:110:20:110:21 | &... [pointer] | -| CookieWithoutHttpOnly.go:114:13:114:24 | "login_name" | CookieWithoutHttpOnly.go:116:10:116:16 | session | -| CookieWithoutHttpOnly.go:115:7:118:2 | struct literal | CookieWithoutHttpOnly.go:120:20:120:21 | &... | -| CookieWithoutHttpOnly.go:115:7:118:2 | struct literal | CookieWithoutHttpOnly.go:120:20:120:21 | &... | -| CookieWithoutHttpOnly.go:115:7:118:2 | struct literal | CookieWithoutHttpOnly.go:120:20:120:21 | &... | -| CookieWithoutHttpOnly.go:115:7:118:2 | struct literal | CookieWithoutHttpOnly.go:120:20:120:21 | &... | -| CookieWithoutHttpOnly.go:115:7:118:2 | struct literal | CookieWithoutHttpOnly.go:120:21:120:21 | c | -| CookieWithoutHttpOnly.go:115:7:118:2 | struct literal | CookieWithoutHttpOnly.go:120:21:120:21 | c | -| CookieWithoutHttpOnly.go:116:10:116:16 | session | CookieWithoutHttpOnly.go:115:7:118:2 | struct literal | -| CookieWithoutHttpOnly.go:119:15:119:19 | false | CookieWithoutHttpOnly.go:115:7:118:2 | struct literal | -| CookieWithoutHttpOnly.go:120:20:120:21 | &... | CookieWithoutHttpOnly.go:120:20:120:21 | &... | -| CookieWithoutHttpOnly.go:120:20:120:21 | &... | CookieWithoutHttpOnly.go:120:20:120:21 | &... | -| CookieWithoutHttpOnly.go:120:20:120:21 | &... | CookieWithoutHttpOnly.go:120:20:120:21 | &... | -| CookieWithoutHttpOnly.go:120:20:120:21 | &... | CookieWithoutHttpOnly.go:120:20:120:21 | &... | -| CookieWithoutHttpOnly.go:120:20:120:21 | &... | CookieWithoutHttpOnly.go:120:21:120:21 | c | -| CookieWithoutHttpOnly.go:120:20:120:21 | &... | CookieWithoutHttpOnly.go:120:21:120:21 | c | -| CookieWithoutHttpOnly.go:120:20:120:21 | &... [pointer] | CookieWithoutHttpOnly.go:120:20:120:21 | &... | -| CookieWithoutHttpOnly.go:120:20:120:21 | &... [pointer] | CookieWithoutHttpOnly.go:120:20:120:21 | &... | -| CookieWithoutHttpOnly.go:120:20:120:21 | &... [pointer] | CookieWithoutHttpOnly.go:120:20:120:21 | &... | -| CookieWithoutHttpOnly.go:120:20:120:21 | &... [pointer] | CookieWithoutHttpOnly.go:120:20:120:21 | &... | -| CookieWithoutHttpOnly.go:120:20:120:21 | &... [pointer] | CookieWithoutHttpOnly.go:120:21:120:21 | c | -| CookieWithoutHttpOnly.go:120:20:120:21 | &... [pointer] | CookieWithoutHttpOnly.go:120:21:120:21 | c | -| CookieWithoutHttpOnly.go:120:21:120:21 | c | CookieWithoutHttpOnly.go:120:20:120:21 | &... [pointer] | -| CookieWithoutHttpOnly.go:120:21:120:21 | c | CookieWithoutHttpOnly.go:120:20:120:21 | &... [pointer] | -| CookieWithoutHttpOnly.go:123:13:123:49 | call to NewCookieStore | CookieWithoutHttpOnly.go:126:16:126:20 | store | -| CookieWithoutHttpOnly.go:123:13:123:49 | call to NewCookieStore | CookieWithoutHttpOnly.go:134:16:134:20 | store | -| CookieWithoutHttpOnly.go:123:13:123:49 | call to NewCookieStore | CookieWithoutHttpOnly.go:146:16:146:20 | store | -| CookieWithoutHttpOnly.go:123:13:123:49 | call to NewCookieStore | CookieWithoutHttpOnly.go:158:16:158:20 | store | -| CookieWithoutHttpOnly.go:123:13:123:49 | call to NewCookieStore | CookieWithoutHttpOnly.go:170:16:170:20 | store | -| CookieWithoutHttpOnly.go:123:13:123:49 | call to NewCookieStore | CookieWithoutHttpOnly.go:183:16:183:20 | store | -| CookieWithoutHttpOnly.go:123:13:123:49 | call to NewCookieStore | CookieWithoutHttpOnly.go:195:16:195:20 | store | -| CookieWithoutHttpOnly.go:126:2:126:43 | ... := ...[0] | CookieWithoutHttpOnly.go:129:2:129:8 | session | -| CookieWithoutHttpOnly.go:126:16:126:20 | store | CookieWithoutHttpOnly.go:126:2:126:43 | ... := ...[0] | -| CookieWithoutHttpOnly.go:133:2:133:9 | definition of httpOnly | CookieWithoutHttpOnly.go:139:13:139:20 | httpOnly | -| CookieWithoutHttpOnly.go:133:14:133:18 | false | CookieWithoutHttpOnly.go:139:13:139:20 | httpOnly | -| CookieWithoutHttpOnly.go:134:2:134:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:135:2:135:8 | session [pointer] | -| CookieWithoutHttpOnly.go:134:2:134:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:135:2:135:8 | session [pointer] | -| CookieWithoutHttpOnly.go:134:2:134:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:137:2:137:8 | session [pointer] | -| CookieWithoutHttpOnly.go:134:2:134:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:137:2:137:8 | session [pointer] | -| CookieWithoutHttpOnly.go:134:2:134:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:142:2:142:8 | session | -| CookieWithoutHttpOnly.go:134:2:134:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:142:2:142:8 | session | -| CookieWithoutHttpOnly.go:134:2:134:43 | ... := ...[0] | CookieWithoutHttpOnly.go:142:2:142:8 | session | -| CookieWithoutHttpOnly.go:134:16:134:20 | store | CookieWithoutHttpOnly.go:134:2:134:43 | ... := ...[0] | -| CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | CookieWithoutHttpOnly.go:134:2:134:8 | definition of session [pointer] | -| CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | CookieWithoutHttpOnly.go:134:2:134:8 | definition of session [pointer] | -| CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | -| CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | -| CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | CookieWithoutHttpOnly.go:137:2:137:8 | session | -| CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | CookieWithoutHttpOnly.go:137:2:137:8 | session | -| CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | CookieWithoutHttpOnly.go:142:2:142:8 | session | -| CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | CookieWithoutHttpOnly.go:142:2:142:8 | session | -| CookieWithoutHttpOnly.go:135:2:135:8 | session [pointer] | CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | -| CookieWithoutHttpOnly.go:135:2:135:8 | session [pointer] | CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | -| CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | CookieWithoutHttpOnly.go:134:2:134:8 | definition of session [pointer] | -| CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | CookieWithoutHttpOnly.go:134:2:134:8 | definition of session [pointer] | -| CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | -| CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | -| CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | CookieWithoutHttpOnly.go:137:2:137:8 | session | -| CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | CookieWithoutHttpOnly.go:137:2:137:8 | session | -| CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | CookieWithoutHttpOnly.go:142:2:142:8 | session | -| CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | CookieWithoutHttpOnly.go:142:2:142:8 | session | -| CookieWithoutHttpOnly.go:137:2:137:8 | session | CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | -| CookieWithoutHttpOnly.go:137:2:137:8 | session | CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | -| CookieWithoutHttpOnly.go:137:2:137:8 | session [pointer] | CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | -| CookieWithoutHttpOnly.go:137:2:137:8 | session [pointer] | CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | -| CookieWithoutHttpOnly.go:137:20:140:2 | &... | CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | -| CookieWithoutHttpOnly.go:137:20:140:2 | &... | CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | -| CookieWithoutHttpOnly.go:137:20:140:2 | &... | CookieWithoutHttpOnly.go:137:2:137:8 | session | -| CookieWithoutHttpOnly.go:137:20:140:2 | &... | CookieWithoutHttpOnly.go:137:2:137:8 | session | -| CookieWithoutHttpOnly.go:137:20:140:2 | &... | CookieWithoutHttpOnly.go:137:20:140:2 | &... | -| CookieWithoutHttpOnly.go:137:20:140:2 | &... | CookieWithoutHttpOnly.go:137:21:140:2 | struct literal | -| CookieWithoutHttpOnly.go:137:21:140:2 | struct literal | CookieWithoutHttpOnly.go:137:20:140:2 | &... | -| CookieWithoutHttpOnly.go:137:21:140:2 | struct literal | CookieWithoutHttpOnly.go:137:20:140:2 | &... | -| CookieWithoutHttpOnly.go:139:13:139:20 | httpOnly | CookieWithoutHttpOnly.go:137:21:140:2 | struct literal | -| CookieWithoutHttpOnly.go:146:2:146:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:147:2:147:8 | session [pointer] | -| CookieWithoutHttpOnly.go:146:2:146:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:149:2:149:8 | session [pointer] | -| CookieWithoutHttpOnly.go:146:2:146:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:153:2:153:8 | session | -| CookieWithoutHttpOnly.go:146:2:146:43 | ... := ...[0] | CookieWithoutHttpOnly.go:153:2:153:8 | session | -| CookieWithoutHttpOnly.go:146:16:146:20 | store | CookieWithoutHttpOnly.go:146:2:146:43 | ... := ...[0] | -| CookieWithoutHttpOnly.go:147:2:147:8 | implicit dereference | CookieWithoutHttpOnly.go:146:2:146:8 | definition of session [pointer] | -| CookieWithoutHttpOnly.go:147:2:147:8 | implicit dereference | CookieWithoutHttpOnly.go:147:2:147:8 | implicit dereference | -| CookieWithoutHttpOnly.go:147:2:147:8 | implicit dereference | CookieWithoutHttpOnly.go:149:2:149:8 | session | -| CookieWithoutHttpOnly.go:147:2:147:8 | implicit dereference | CookieWithoutHttpOnly.go:153:2:153:8 | session | -| CookieWithoutHttpOnly.go:147:2:147:8 | session [pointer] | CookieWithoutHttpOnly.go:147:2:147:8 | implicit dereference | -| CookieWithoutHttpOnly.go:149:2:149:8 | implicit dereference | CookieWithoutHttpOnly.go:146:2:146:8 | definition of session [pointer] | -| CookieWithoutHttpOnly.go:149:2:149:8 | implicit dereference | CookieWithoutHttpOnly.go:147:2:147:8 | implicit dereference | -| CookieWithoutHttpOnly.go:149:2:149:8 | implicit dereference | CookieWithoutHttpOnly.go:149:2:149:8 | session | -| CookieWithoutHttpOnly.go:149:2:149:8 | implicit dereference | CookieWithoutHttpOnly.go:153:2:153:8 | session | -| CookieWithoutHttpOnly.go:149:2:149:8 | session | CookieWithoutHttpOnly.go:149:2:149:8 | implicit dereference | -| CookieWithoutHttpOnly.go:149:2:149:8 | session [pointer] | CookieWithoutHttpOnly.go:149:2:149:8 | implicit dereference | -| CookieWithoutHttpOnly.go:149:20:151:2 | &... | CookieWithoutHttpOnly.go:149:2:149:8 | implicit dereference | -| CookieWithoutHttpOnly.go:149:20:151:2 | &... | CookieWithoutHttpOnly.go:149:2:149:8 | session | -| CookieWithoutHttpOnly.go:149:20:151:2 | &... | CookieWithoutHttpOnly.go:149:20:151:2 | &... | -| CookieWithoutHttpOnly.go:149:21:151:2 | struct literal | CookieWithoutHttpOnly.go:149:20:151:2 | &... | -| CookieWithoutHttpOnly.go:157:2:157:9 | definition of httpOnly | CookieWithoutHttpOnly.go:163:13:163:20 | httpOnly | -| CookieWithoutHttpOnly.go:157:14:157:17 | true | CookieWithoutHttpOnly.go:163:13:163:20 | httpOnly | -| CookieWithoutHttpOnly.go:158:2:158:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:159:2:159:8 | session [pointer] | -| CookieWithoutHttpOnly.go:158:2:158:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:159:2:159:8 | session [pointer] | -| CookieWithoutHttpOnly.go:158:2:158:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:161:2:161:8 | session [pointer] | -| CookieWithoutHttpOnly.go:158:2:158:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:161:2:161:8 | session [pointer] | -| CookieWithoutHttpOnly.go:158:2:158:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:166:2:166:8 | session | -| CookieWithoutHttpOnly.go:158:2:158:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:166:2:166:8 | session | -| CookieWithoutHttpOnly.go:158:2:158:43 | ... := ...[0] | CookieWithoutHttpOnly.go:166:2:166:8 | session | -| CookieWithoutHttpOnly.go:158:16:158:20 | store | CookieWithoutHttpOnly.go:158:2:158:43 | ... := ...[0] | -| CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | CookieWithoutHttpOnly.go:158:2:158:8 | definition of session [pointer] | -| CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | CookieWithoutHttpOnly.go:158:2:158:8 | definition of session [pointer] | -| CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | -| CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | -| CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | CookieWithoutHttpOnly.go:161:2:161:8 | session | -| CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | CookieWithoutHttpOnly.go:161:2:161:8 | session | -| CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | CookieWithoutHttpOnly.go:166:2:166:8 | session | -| CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | CookieWithoutHttpOnly.go:166:2:166:8 | session | -| CookieWithoutHttpOnly.go:159:2:159:8 | session [pointer] | CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | -| CookieWithoutHttpOnly.go:159:2:159:8 | session [pointer] | CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | -| CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | CookieWithoutHttpOnly.go:158:2:158:8 | definition of session [pointer] | -| CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | CookieWithoutHttpOnly.go:158:2:158:8 | definition of session [pointer] | -| CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | -| CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | -| CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | CookieWithoutHttpOnly.go:161:2:161:8 | session | -| CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | CookieWithoutHttpOnly.go:161:2:161:8 | session | -| CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | CookieWithoutHttpOnly.go:166:2:166:8 | session | -| CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | CookieWithoutHttpOnly.go:166:2:166:8 | session | -| CookieWithoutHttpOnly.go:161:2:161:8 | session | CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | -| CookieWithoutHttpOnly.go:161:2:161:8 | session | CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | -| CookieWithoutHttpOnly.go:161:2:161:8 | session [pointer] | CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | -| CookieWithoutHttpOnly.go:161:2:161:8 | session [pointer] | CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | -| CookieWithoutHttpOnly.go:161:20:164:2 | &... | CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | -| CookieWithoutHttpOnly.go:161:20:164:2 | &... | CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | -| CookieWithoutHttpOnly.go:161:20:164:2 | &... | CookieWithoutHttpOnly.go:161:2:161:8 | session | -| CookieWithoutHttpOnly.go:161:20:164:2 | &... | CookieWithoutHttpOnly.go:161:2:161:8 | session | -| CookieWithoutHttpOnly.go:161:20:164:2 | &... | CookieWithoutHttpOnly.go:161:20:164:2 | &... | -| CookieWithoutHttpOnly.go:161:20:164:2 | &... | CookieWithoutHttpOnly.go:161:21:164:2 | struct literal | -| CookieWithoutHttpOnly.go:161:21:164:2 | struct literal | CookieWithoutHttpOnly.go:161:20:164:2 | &... | -| CookieWithoutHttpOnly.go:161:21:164:2 | struct literal | CookieWithoutHttpOnly.go:161:20:164:2 | &... | -| CookieWithoutHttpOnly.go:163:13:163:20 | httpOnly | CookieWithoutHttpOnly.go:161:21:164:2 | struct literal | -| CookieWithoutHttpOnly.go:169:56:169:63 | argument corresponding to httpOnly | CookieWithoutHttpOnly.go:175:13:175:20 | httpOnly | -| CookieWithoutHttpOnly.go:169:56:169:63 | definition of httpOnly | CookieWithoutHttpOnly.go:175:13:175:20 | httpOnly | -| CookieWithoutHttpOnly.go:170:2:170:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:171:2:171:8 | session [pointer] | -| CookieWithoutHttpOnly.go:170:2:170:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:171:2:171:8 | session [pointer] | -| CookieWithoutHttpOnly.go:170:2:170:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:173:2:173:8 | session [pointer] | -| CookieWithoutHttpOnly.go:170:2:170:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:173:2:173:8 | session [pointer] | -| CookieWithoutHttpOnly.go:170:2:170:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:178:2:178:8 | session | -| CookieWithoutHttpOnly.go:170:2:170:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:178:2:178:8 | session | -| CookieWithoutHttpOnly.go:170:2:170:43 | ... := ...[0] | CookieWithoutHttpOnly.go:178:2:178:8 | session | -| CookieWithoutHttpOnly.go:170:16:170:20 | store | CookieWithoutHttpOnly.go:170:2:170:43 | ... := ...[0] | -| CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | CookieWithoutHttpOnly.go:170:2:170:8 | definition of session [pointer] | -| CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | CookieWithoutHttpOnly.go:170:2:170:8 | definition of session [pointer] | -| CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | -| CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | -| CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | CookieWithoutHttpOnly.go:173:2:173:8 | session | -| CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | CookieWithoutHttpOnly.go:173:2:173:8 | session | -| CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | CookieWithoutHttpOnly.go:178:2:178:8 | session | -| CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | CookieWithoutHttpOnly.go:178:2:178:8 | session | -| CookieWithoutHttpOnly.go:171:2:171:8 | session [pointer] | CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | -| CookieWithoutHttpOnly.go:171:2:171:8 | session [pointer] | CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | -| CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | CookieWithoutHttpOnly.go:170:2:170:8 | definition of session [pointer] | -| CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | CookieWithoutHttpOnly.go:170:2:170:8 | definition of session [pointer] | -| CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | -| CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | -| CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | CookieWithoutHttpOnly.go:173:2:173:8 | session | -| CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | CookieWithoutHttpOnly.go:173:2:173:8 | session | -| CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | CookieWithoutHttpOnly.go:178:2:178:8 | session | -| CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | CookieWithoutHttpOnly.go:178:2:178:8 | session | -| CookieWithoutHttpOnly.go:173:2:173:8 | session | CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | -| CookieWithoutHttpOnly.go:173:2:173:8 | session | CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | -| CookieWithoutHttpOnly.go:173:2:173:8 | session [pointer] | CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | -| CookieWithoutHttpOnly.go:173:2:173:8 | session [pointer] | CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | -| CookieWithoutHttpOnly.go:173:20:176:2 | &... | CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | -| CookieWithoutHttpOnly.go:173:20:176:2 | &... | CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | -| CookieWithoutHttpOnly.go:173:20:176:2 | &... | CookieWithoutHttpOnly.go:173:2:173:8 | session | -| CookieWithoutHttpOnly.go:173:20:176:2 | &... | CookieWithoutHttpOnly.go:173:2:173:8 | session | -| CookieWithoutHttpOnly.go:173:20:176:2 | &... | CookieWithoutHttpOnly.go:173:20:176:2 | &... | -| CookieWithoutHttpOnly.go:173:20:176:2 | &... | CookieWithoutHttpOnly.go:173:21:176:2 | struct literal | -| CookieWithoutHttpOnly.go:173:21:176:2 | struct literal | CookieWithoutHttpOnly.go:173:20:176:2 | &... | -| CookieWithoutHttpOnly.go:173:21:176:2 | struct literal | CookieWithoutHttpOnly.go:173:20:176:2 | &... | -| CookieWithoutHttpOnly.go:175:13:175:20 | httpOnly | CookieWithoutHttpOnly.go:173:21:176:2 | struct literal | -| CookieWithoutHttpOnly.go:183:2:183:43 | ... := ...[0] | CookieWithoutHttpOnly.go:191:19:191:25 | session | -| CookieWithoutHttpOnly.go:183:16:183:20 | store | CookieWithoutHttpOnly.go:183:2:183:43 | ... := ...[0] | -| CookieWithoutHttpOnly.go:195:2:195:43 | ... := ...[0] | CookieWithoutHttpOnly.go:202:19:202:25 | session | -| CookieWithoutHttpOnly.go:195:16:195:20 | store | CookieWithoutHttpOnly.go:195:2:195:43 | ... := ...[0] | +| CookieWithoutHttpOnly.go:11:7:14:2 | struct literal | CookieWithoutHttpOnly.go:15:20:15:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:11:7:14:2 | struct literal | CookieWithoutHttpOnly.go:15:20:15:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:11:7:14:2 | struct literal | CookieWithoutHttpOnly.go:15:21:15:21 | c | provenance | | +| CookieWithoutHttpOnly.go:12:10:12:18 | "session" | CookieWithoutHttpOnly.go:11:7:14:2 | struct literal | provenance | | +| CookieWithoutHttpOnly.go:15:20:15:21 | &... | CookieWithoutHttpOnly.go:15:20:15:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:15:20:15:21 | &... | CookieWithoutHttpOnly.go:15:20:15:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:15:20:15:21 | &... | CookieWithoutHttpOnly.go:15:21:15:21 | c | provenance | | +| CookieWithoutHttpOnly.go:15:20:15:21 | &... [pointer] | CookieWithoutHttpOnly.go:15:20:15:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:15:20:15:21 | &... [pointer] | CookieWithoutHttpOnly.go:15:20:15:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:15:20:15:21 | &... [pointer] | CookieWithoutHttpOnly.go:15:21:15:21 | c | provenance | | +| CookieWithoutHttpOnly.go:15:21:15:21 | c | CookieWithoutHttpOnly.go:15:20:15:21 | &... [pointer] | provenance | | +| CookieWithoutHttpOnly.go:19:7:23:2 | struct literal | CookieWithoutHttpOnly.go:24:20:24:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:19:7:23:2 | struct literal | CookieWithoutHttpOnly.go:24:20:24:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:19:7:23:2 | struct literal | CookieWithoutHttpOnly.go:24:20:24:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:19:7:23:2 | struct literal | CookieWithoutHttpOnly.go:24:20:24:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:19:7:23:2 | struct literal | CookieWithoutHttpOnly.go:24:21:24:21 | c | provenance | | +| CookieWithoutHttpOnly.go:19:7:23:2 | struct literal | CookieWithoutHttpOnly.go:24:21:24:21 | c | provenance | | +| CookieWithoutHttpOnly.go:20:13:20:21 | "session" | CookieWithoutHttpOnly.go:19:7:23:2 | struct literal | provenance | | +| CookieWithoutHttpOnly.go:22:13:22:17 | false | CookieWithoutHttpOnly.go:19:7:23:2 | struct literal | provenance | | +| CookieWithoutHttpOnly.go:24:20:24:21 | &... | CookieWithoutHttpOnly.go:24:20:24:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:24:20:24:21 | &... | CookieWithoutHttpOnly.go:24:20:24:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:24:20:24:21 | &... | CookieWithoutHttpOnly.go:24:20:24:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:24:20:24:21 | &... | CookieWithoutHttpOnly.go:24:20:24:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:24:20:24:21 | &... | CookieWithoutHttpOnly.go:24:21:24:21 | c | provenance | | +| CookieWithoutHttpOnly.go:24:20:24:21 | &... | CookieWithoutHttpOnly.go:24:21:24:21 | c | provenance | | +| CookieWithoutHttpOnly.go:24:20:24:21 | &... [pointer] | CookieWithoutHttpOnly.go:24:20:24:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:24:20:24:21 | &... [pointer] | CookieWithoutHttpOnly.go:24:20:24:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:24:20:24:21 | &... [pointer] | CookieWithoutHttpOnly.go:24:20:24:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:24:20:24:21 | &... [pointer] | CookieWithoutHttpOnly.go:24:20:24:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:24:20:24:21 | &... [pointer] | CookieWithoutHttpOnly.go:24:21:24:21 | c | provenance | | +| CookieWithoutHttpOnly.go:24:20:24:21 | &... [pointer] | CookieWithoutHttpOnly.go:24:21:24:21 | c | provenance | | +| CookieWithoutHttpOnly.go:24:21:24:21 | c | CookieWithoutHttpOnly.go:24:20:24:21 | &... [pointer] | provenance | | +| CookieWithoutHttpOnly.go:24:21:24:21 | c | CookieWithoutHttpOnly.go:24:20:24:21 | &... [pointer] | provenance | | +| CookieWithoutHttpOnly.go:28:7:32:2 | struct literal | CookieWithoutHttpOnly.go:33:20:33:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:28:7:32:2 | struct literal | CookieWithoutHttpOnly.go:33:20:33:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:28:7:32:2 | struct literal | CookieWithoutHttpOnly.go:33:20:33:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:28:7:32:2 | struct literal | CookieWithoutHttpOnly.go:33:20:33:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:28:7:32:2 | struct literal | CookieWithoutHttpOnly.go:33:21:33:21 | c | provenance | | +| CookieWithoutHttpOnly.go:28:7:32:2 | struct literal | CookieWithoutHttpOnly.go:33:21:33:21 | c | provenance | | +| CookieWithoutHttpOnly.go:29:13:29:21 | "session" | CookieWithoutHttpOnly.go:28:7:32:2 | struct literal | provenance | | +| CookieWithoutHttpOnly.go:31:13:31:16 | true | CookieWithoutHttpOnly.go:28:7:32:2 | struct literal | provenance | | +| CookieWithoutHttpOnly.go:33:20:33:21 | &... | CookieWithoutHttpOnly.go:33:20:33:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:33:20:33:21 | &... | CookieWithoutHttpOnly.go:33:20:33:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:33:20:33:21 | &... | CookieWithoutHttpOnly.go:33:20:33:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:33:20:33:21 | &... | CookieWithoutHttpOnly.go:33:20:33:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:33:20:33:21 | &... | CookieWithoutHttpOnly.go:33:21:33:21 | c | provenance | | +| CookieWithoutHttpOnly.go:33:20:33:21 | &... | CookieWithoutHttpOnly.go:33:21:33:21 | c | provenance | | +| CookieWithoutHttpOnly.go:33:20:33:21 | &... [pointer] | CookieWithoutHttpOnly.go:33:20:33:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:33:20:33:21 | &... [pointer] | CookieWithoutHttpOnly.go:33:20:33:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:33:20:33:21 | &... [pointer] | CookieWithoutHttpOnly.go:33:20:33:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:33:20:33:21 | &... [pointer] | CookieWithoutHttpOnly.go:33:20:33:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:33:20:33:21 | &... [pointer] | CookieWithoutHttpOnly.go:33:21:33:21 | c | provenance | | +| CookieWithoutHttpOnly.go:33:20:33:21 | &... [pointer] | CookieWithoutHttpOnly.go:33:21:33:21 | c | provenance | | +| CookieWithoutHttpOnly.go:33:21:33:21 | c | CookieWithoutHttpOnly.go:33:20:33:21 | &... [pointer] | provenance | | +| CookieWithoutHttpOnly.go:33:21:33:21 | c | CookieWithoutHttpOnly.go:33:20:33:21 | &... [pointer] | provenance | | +| CookieWithoutHttpOnly.go:37:7:40:2 | struct literal | CookieWithoutHttpOnly.go:42:20:42:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:37:7:40:2 | struct literal | CookieWithoutHttpOnly.go:42:20:42:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:37:7:40:2 | struct literal | CookieWithoutHttpOnly.go:42:20:42:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:37:7:40:2 | struct literal | CookieWithoutHttpOnly.go:42:20:42:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:37:7:40:2 | struct literal | CookieWithoutHttpOnly.go:42:21:42:21 | c | provenance | | +| CookieWithoutHttpOnly.go:37:7:40:2 | struct literal | CookieWithoutHttpOnly.go:42:21:42:21 | c | provenance | | +| CookieWithoutHttpOnly.go:38:10:38:18 | "session" | CookieWithoutHttpOnly.go:37:7:40:2 | struct literal | provenance | | +| CookieWithoutHttpOnly.go:41:15:41:18 | true | CookieWithoutHttpOnly.go:37:7:40:2 | struct literal | provenance | | +| CookieWithoutHttpOnly.go:42:20:42:21 | &... | CookieWithoutHttpOnly.go:42:20:42:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:42:20:42:21 | &... | CookieWithoutHttpOnly.go:42:20:42:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:42:20:42:21 | &... | CookieWithoutHttpOnly.go:42:20:42:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:42:20:42:21 | &... | CookieWithoutHttpOnly.go:42:20:42:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:42:20:42:21 | &... | CookieWithoutHttpOnly.go:42:21:42:21 | c | provenance | | +| CookieWithoutHttpOnly.go:42:20:42:21 | &... | CookieWithoutHttpOnly.go:42:21:42:21 | c | provenance | | +| CookieWithoutHttpOnly.go:42:20:42:21 | &... [pointer] | CookieWithoutHttpOnly.go:42:20:42:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:42:20:42:21 | &... [pointer] | CookieWithoutHttpOnly.go:42:20:42:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:42:20:42:21 | &... [pointer] | CookieWithoutHttpOnly.go:42:20:42:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:42:20:42:21 | &... [pointer] | CookieWithoutHttpOnly.go:42:20:42:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:42:20:42:21 | &... [pointer] | CookieWithoutHttpOnly.go:42:21:42:21 | c | provenance | | +| CookieWithoutHttpOnly.go:42:20:42:21 | &... [pointer] | CookieWithoutHttpOnly.go:42:21:42:21 | c | provenance | | +| CookieWithoutHttpOnly.go:42:21:42:21 | c | CookieWithoutHttpOnly.go:42:20:42:21 | &... [pointer] | provenance | | +| CookieWithoutHttpOnly.go:42:21:42:21 | c | CookieWithoutHttpOnly.go:42:20:42:21 | &... [pointer] | provenance | | +| CookieWithoutHttpOnly.go:46:7:49:2 | struct literal | CookieWithoutHttpOnly.go:51:20:51:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:46:7:49:2 | struct literal | CookieWithoutHttpOnly.go:51:20:51:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:46:7:49:2 | struct literal | CookieWithoutHttpOnly.go:51:20:51:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:46:7:49:2 | struct literal | CookieWithoutHttpOnly.go:51:20:51:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:46:7:49:2 | struct literal | CookieWithoutHttpOnly.go:51:21:51:21 | c | provenance | | +| CookieWithoutHttpOnly.go:46:7:49:2 | struct literal | CookieWithoutHttpOnly.go:51:21:51:21 | c | provenance | | +| CookieWithoutHttpOnly.go:47:10:47:18 | "session" | CookieWithoutHttpOnly.go:46:7:49:2 | struct literal | provenance | | +| CookieWithoutHttpOnly.go:50:15:50:19 | false | CookieWithoutHttpOnly.go:46:7:49:2 | struct literal | provenance | | +| CookieWithoutHttpOnly.go:51:20:51:21 | &... | CookieWithoutHttpOnly.go:51:20:51:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:51:20:51:21 | &... | CookieWithoutHttpOnly.go:51:20:51:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:51:20:51:21 | &... | CookieWithoutHttpOnly.go:51:20:51:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:51:20:51:21 | &... | CookieWithoutHttpOnly.go:51:20:51:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:51:20:51:21 | &... | CookieWithoutHttpOnly.go:51:21:51:21 | c | provenance | | +| CookieWithoutHttpOnly.go:51:20:51:21 | &... | CookieWithoutHttpOnly.go:51:21:51:21 | c | provenance | | +| CookieWithoutHttpOnly.go:51:20:51:21 | &... [pointer] | CookieWithoutHttpOnly.go:51:20:51:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:51:20:51:21 | &... [pointer] | CookieWithoutHttpOnly.go:51:20:51:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:51:20:51:21 | &... [pointer] | CookieWithoutHttpOnly.go:51:20:51:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:51:20:51:21 | &... [pointer] | CookieWithoutHttpOnly.go:51:20:51:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:51:20:51:21 | &... [pointer] | CookieWithoutHttpOnly.go:51:21:51:21 | c | provenance | | +| CookieWithoutHttpOnly.go:51:20:51:21 | &... [pointer] | CookieWithoutHttpOnly.go:51:21:51:21 | c | provenance | | +| CookieWithoutHttpOnly.go:51:21:51:21 | c | CookieWithoutHttpOnly.go:51:20:51:21 | &... [pointer] | provenance | | +| CookieWithoutHttpOnly.go:51:21:51:21 | c | CookieWithoutHttpOnly.go:51:20:51:21 | &... [pointer] | provenance | | +| CookieWithoutHttpOnly.go:55:2:55:4 | definition of val | CookieWithoutHttpOnly.go:59:13:59:15 | val | provenance | | +| CookieWithoutHttpOnly.go:55:9:55:13 | false | CookieWithoutHttpOnly.go:59:13:59:15 | val | provenance | | +| CookieWithoutHttpOnly.go:56:7:60:2 | struct literal | CookieWithoutHttpOnly.go:61:20:61:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:56:7:60:2 | struct literal | CookieWithoutHttpOnly.go:61:20:61:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:56:7:60:2 | struct literal | CookieWithoutHttpOnly.go:61:20:61:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:56:7:60:2 | struct literal | CookieWithoutHttpOnly.go:61:20:61:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:56:7:60:2 | struct literal | CookieWithoutHttpOnly.go:61:21:61:21 | c | provenance | | +| CookieWithoutHttpOnly.go:56:7:60:2 | struct literal | CookieWithoutHttpOnly.go:61:21:61:21 | c | provenance | | +| CookieWithoutHttpOnly.go:57:13:57:21 | "session" | CookieWithoutHttpOnly.go:56:7:60:2 | struct literal | provenance | | +| CookieWithoutHttpOnly.go:59:13:59:15 | val | CookieWithoutHttpOnly.go:56:7:60:2 | struct literal | provenance | | +| CookieWithoutHttpOnly.go:61:20:61:21 | &... | CookieWithoutHttpOnly.go:61:20:61:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:61:20:61:21 | &... | CookieWithoutHttpOnly.go:61:20:61:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:61:20:61:21 | &... | CookieWithoutHttpOnly.go:61:20:61:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:61:20:61:21 | &... | CookieWithoutHttpOnly.go:61:20:61:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:61:20:61:21 | &... | CookieWithoutHttpOnly.go:61:21:61:21 | c | provenance | | +| CookieWithoutHttpOnly.go:61:20:61:21 | &... | CookieWithoutHttpOnly.go:61:21:61:21 | c | provenance | | +| CookieWithoutHttpOnly.go:61:20:61:21 | &... [pointer] | CookieWithoutHttpOnly.go:61:20:61:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:61:20:61:21 | &... [pointer] | CookieWithoutHttpOnly.go:61:20:61:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:61:20:61:21 | &... [pointer] | CookieWithoutHttpOnly.go:61:20:61:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:61:20:61:21 | &... [pointer] | CookieWithoutHttpOnly.go:61:20:61:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:61:20:61:21 | &... [pointer] | CookieWithoutHttpOnly.go:61:21:61:21 | c | provenance | | +| CookieWithoutHttpOnly.go:61:20:61:21 | &... [pointer] | CookieWithoutHttpOnly.go:61:21:61:21 | c | provenance | | +| CookieWithoutHttpOnly.go:61:21:61:21 | c | CookieWithoutHttpOnly.go:61:20:61:21 | &... [pointer] | provenance | | +| CookieWithoutHttpOnly.go:61:21:61:21 | c | CookieWithoutHttpOnly.go:61:20:61:21 | &... [pointer] | provenance | | +| CookieWithoutHttpOnly.go:65:2:65:4 | definition of val | CookieWithoutHttpOnly.go:69:13:69:15 | val | provenance | | +| CookieWithoutHttpOnly.go:65:9:65:12 | true | CookieWithoutHttpOnly.go:69:13:69:15 | val | provenance | | +| CookieWithoutHttpOnly.go:66:7:70:2 | struct literal | CookieWithoutHttpOnly.go:71:20:71:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:66:7:70:2 | struct literal | CookieWithoutHttpOnly.go:71:20:71:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:66:7:70:2 | struct literal | CookieWithoutHttpOnly.go:71:20:71:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:66:7:70:2 | struct literal | CookieWithoutHttpOnly.go:71:20:71:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:66:7:70:2 | struct literal | CookieWithoutHttpOnly.go:71:21:71:21 | c | provenance | | +| CookieWithoutHttpOnly.go:66:7:70:2 | struct literal | CookieWithoutHttpOnly.go:71:21:71:21 | c | provenance | | +| CookieWithoutHttpOnly.go:67:13:67:21 | "session" | CookieWithoutHttpOnly.go:66:7:70:2 | struct literal | provenance | | +| CookieWithoutHttpOnly.go:69:13:69:15 | val | CookieWithoutHttpOnly.go:66:7:70:2 | struct literal | provenance | | +| CookieWithoutHttpOnly.go:71:20:71:21 | &... | CookieWithoutHttpOnly.go:71:20:71:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:71:20:71:21 | &... | CookieWithoutHttpOnly.go:71:20:71:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:71:20:71:21 | &... | CookieWithoutHttpOnly.go:71:20:71:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:71:20:71:21 | &... | CookieWithoutHttpOnly.go:71:20:71:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:71:20:71:21 | &... | CookieWithoutHttpOnly.go:71:21:71:21 | c | provenance | | +| CookieWithoutHttpOnly.go:71:20:71:21 | &... | CookieWithoutHttpOnly.go:71:21:71:21 | c | provenance | | +| CookieWithoutHttpOnly.go:71:20:71:21 | &... [pointer] | CookieWithoutHttpOnly.go:71:20:71:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:71:20:71:21 | &... [pointer] | CookieWithoutHttpOnly.go:71:20:71:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:71:20:71:21 | &... [pointer] | CookieWithoutHttpOnly.go:71:20:71:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:71:20:71:21 | &... [pointer] | CookieWithoutHttpOnly.go:71:20:71:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:71:20:71:21 | &... [pointer] | CookieWithoutHttpOnly.go:71:21:71:21 | c | provenance | | +| CookieWithoutHttpOnly.go:71:20:71:21 | &... [pointer] | CookieWithoutHttpOnly.go:71:21:71:21 | c | provenance | | +| CookieWithoutHttpOnly.go:71:21:71:21 | c | CookieWithoutHttpOnly.go:71:20:71:21 | &... [pointer] | provenance | | +| CookieWithoutHttpOnly.go:71:21:71:21 | c | CookieWithoutHttpOnly.go:71:20:71:21 | &... [pointer] | provenance | | +| CookieWithoutHttpOnly.go:75:2:75:4 | definition of val | CookieWithoutHttpOnly.go:80:15:80:17 | val | provenance | | +| CookieWithoutHttpOnly.go:75:9:75:12 | true | CookieWithoutHttpOnly.go:80:15:80:17 | val | provenance | | +| CookieWithoutHttpOnly.go:76:7:79:2 | struct literal | CookieWithoutHttpOnly.go:81:20:81:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:76:7:79:2 | struct literal | CookieWithoutHttpOnly.go:81:20:81:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:76:7:79:2 | struct literal | CookieWithoutHttpOnly.go:81:20:81:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:76:7:79:2 | struct literal | CookieWithoutHttpOnly.go:81:20:81:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:76:7:79:2 | struct literal | CookieWithoutHttpOnly.go:81:21:81:21 | c | provenance | | +| CookieWithoutHttpOnly.go:76:7:79:2 | struct literal | CookieWithoutHttpOnly.go:81:21:81:21 | c | provenance | | +| CookieWithoutHttpOnly.go:77:10:77:18 | "session" | CookieWithoutHttpOnly.go:76:7:79:2 | struct literal | provenance | | +| CookieWithoutHttpOnly.go:80:15:80:17 | val | CookieWithoutHttpOnly.go:76:7:79:2 | struct literal | provenance | | +| CookieWithoutHttpOnly.go:81:20:81:21 | &... | CookieWithoutHttpOnly.go:81:20:81:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:81:20:81:21 | &... | CookieWithoutHttpOnly.go:81:20:81:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:81:20:81:21 | &... | CookieWithoutHttpOnly.go:81:20:81:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:81:20:81:21 | &... | CookieWithoutHttpOnly.go:81:20:81:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:81:20:81:21 | &... | CookieWithoutHttpOnly.go:81:21:81:21 | c | provenance | | +| CookieWithoutHttpOnly.go:81:20:81:21 | &... | CookieWithoutHttpOnly.go:81:21:81:21 | c | provenance | | +| CookieWithoutHttpOnly.go:81:20:81:21 | &... [pointer] | CookieWithoutHttpOnly.go:81:20:81:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:81:20:81:21 | &... [pointer] | CookieWithoutHttpOnly.go:81:20:81:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:81:20:81:21 | &... [pointer] | CookieWithoutHttpOnly.go:81:20:81:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:81:20:81:21 | &... [pointer] | CookieWithoutHttpOnly.go:81:20:81:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:81:20:81:21 | &... [pointer] | CookieWithoutHttpOnly.go:81:21:81:21 | c | provenance | | +| CookieWithoutHttpOnly.go:81:20:81:21 | &... [pointer] | CookieWithoutHttpOnly.go:81:21:81:21 | c | provenance | | +| CookieWithoutHttpOnly.go:81:21:81:21 | c | CookieWithoutHttpOnly.go:81:20:81:21 | &... [pointer] | provenance | | +| CookieWithoutHttpOnly.go:81:21:81:21 | c | CookieWithoutHttpOnly.go:81:20:81:21 | &... [pointer] | provenance | | +| CookieWithoutHttpOnly.go:85:2:85:4 | definition of val | CookieWithoutHttpOnly.go:90:15:90:17 | val | provenance | | +| CookieWithoutHttpOnly.go:85:9:85:13 | false | CookieWithoutHttpOnly.go:90:15:90:17 | val | provenance | | +| CookieWithoutHttpOnly.go:86:7:89:2 | struct literal | CookieWithoutHttpOnly.go:91:20:91:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:86:7:89:2 | struct literal | CookieWithoutHttpOnly.go:91:20:91:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:86:7:89:2 | struct literal | CookieWithoutHttpOnly.go:91:20:91:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:86:7:89:2 | struct literal | CookieWithoutHttpOnly.go:91:20:91:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:86:7:89:2 | struct literal | CookieWithoutHttpOnly.go:91:21:91:21 | c | provenance | | +| CookieWithoutHttpOnly.go:86:7:89:2 | struct literal | CookieWithoutHttpOnly.go:91:21:91:21 | c | provenance | | +| CookieWithoutHttpOnly.go:87:10:87:18 | "session" | CookieWithoutHttpOnly.go:86:7:89:2 | struct literal | provenance | | +| CookieWithoutHttpOnly.go:90:15:90:17 | val | CookieWithoutHttpOnly.go:86:7:89:2 | struct literal | provenance | | +| CookieWithoutHttpOnly.go:91:20:91:21 | &... | CookieWithoutHttpOnly.go:91:20:91:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:91:20:91:21 | &... | CookieWithoutHttpOnly.go:91:20:91:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:91:20:91:21 | &... | CookieWithoutHttpOnly.go:91:20:91:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:91:20:91:21 | &... | CookieWithoutHttpOnly.go:91:20:91:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:91:20:91:21 | &... | CookieWithoutHttpOnly.go:91:21:91:21 | c | provenance | | +| CookieWithoutHttpOnly.go:91:20:91:21 | &... | CookieWithoutHttpOnly.go:91:21:91:21 | c | provenance | | +| CookieWithoutHttpOnly.go:91:20:91:21 | &... [pointer] | CookieWithoutHttpOnly.go:91:20:91:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:91:20:91:21 | &... [pointer] | CookieWithoutHttpOnly.go:91:20:91:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:91:20:91:21 | &... [pointer] | CookieWithoutHttpOnly.go:91:20:91:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:91:20:91:21 | &... [pointer] | CookieWithoutHttpOnly.go:91:20:91:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:91:20:91:21 | &... [pointer] | CookieWithoutHttpOnly.go:91:21:91:21 | c | provenance | | +| CookieWithoutHttpOnly.go:91:20:91:21 | &... [pointer] | CookieWithoutHttpOnly.go:91:21:91:21 | c | provenance | | +| CookieWithoutHttpOnly.go:91:21:91:21 | c | CookieWithoutHttpOnly.go:91:20:91:21 | &... [pointer] | provenance | | +| CookieWithoutHttpOnly.go:91:21:91:21 | c | CookieWithoutHttpOnly.go:91:20:91:21 | &... [pointer] | provenance | | +| CookieWithoutHttpOnly.go:95:7:98:2 | struct literal | CookieWithoutHttpOnly.go:100:20:100:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:95:7:98:2 | struct literal | CookieWithoutHttpOnly.go:100:20:100:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:95:7:98:2 | struct literal | CookieWithoutHttpOnly.go:100:21:100:21 | c | provenance | | +| CookieWithoutHttpOnly.go:99:15:99:19 | false | CookieWithoutHttpOnly.go:95:7:98:2 | struct literal | provenance | | +| CookieWithoutHttpOnly.go:100:20:100:21 | &... | CookieWithoutHttpOnly.go:100:20:100:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:100:20:100:21 | &... | CookieWithoutHttpOnly.go:100:20:100:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:100:20:100:21 | &... | CookieWithoutHttpOnly.go:100:21:100:21 | c | provenance | | +| CookieWithoutHttpOnly.go:100:20:100:21 | &... [pointer] | CookieWithoutHttpOnly.go:100:20:100:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:100:20:100:21 | &... [pointer] | CookieWithoutHttpOnly.go:100:20:100:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:100:20:100:21 | &... [pointer] | CookieWithoutHttpOnly.go:100:21:100:21 | c | provenance | | +| CookieWithoutHttpOnly.go:100:21:100:21 | c | CookieWithoutHttpOnly.go:100:20:100:21 | &... [pointer] | provenance | | +| CookieWithoutHttpOnly.go:104:10:104:18 | "session" | CookieWithoutHttpOnly.go:106:10:106:13 | name | provenance | | +| CookieWithoutHttpOnly.go:105:7:108:2 | struct literal | CookieWithoutHttpOnly.go:110:20:110:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:105:7:108:2 | struct literal | CookieWithoutHttpOnly.go:110:20:110:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:105:7:108:2 | struct literal | CookieWithoutHttpOnly.go:110:20:110:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:105:7:108:2 | struct literal | CookieWithoutHttpOnly.go:110:20:110:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:105:7:108:2 | struct literal | CookieWithoutHttpOnly.go:110:21:110:21 | c | provenance | | +| CookieWithoutHttpOnly.go:105:7:108:2 | struct literal | CookieWithoutHttpOnly.go:110:21:110:21 | c | provenance | | +| CookieWithoutHttpOnly.go:106:10:106:13 | name | CookieWithoutHttpOnly.go:105:7:108:2 | struct literal | provenance | | +| CookieWithoutHttpOnly.go:109:15:109:19 | false | CookieWithoutHttpOnly.go:105:7:108:2 | struct literal | provenance | | +| CookieWithoutHttpOnly.go:110:20:110:21 | &... | CookieWithoutHttpOnly.go:110:20:110:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:110:20:110:21 | &... | CookieWithoutHttpOnly.go:110:20:110:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:110:20:110:21 | &... | CookieWithoutHttpOnly.go:110:20:110:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:110:20:110:21 | &... | CookieWithoutHttpOnly.go:110:20:110:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:110:20:110:21 | &... | CookieWithoutHttpOnly.go:110:21:110:21 | c | provenance | | +| CookieWithoutHttpOnly.go:110:20:110:21 | &... | CookieWithoutHttpOnly.go:110:21:110:21 | c | provenance | | +| CookieWithoutHttpOnly.go:110:20:110:21 | &... [pointer] | CookieWithoutHttpOnly.go:110:20:110:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:110:20:110:21 | &... [pointer] | CookieWithoutHttpOnly.go:110:20:110:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:110:20:110:21 | &... [pointer] | CookieWithoutHttpOnly.go:110:20:110:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:110:20:110:21 | &... [pointer] | CookieWithoutHttpOnly.go:110:20:110:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:110:20:110:21 | &... [pointer] | CookieWithoutHttpOnly.go:110:21:110:21 | c | provenance | | +| CookieWithoutHttpOnly.go:110:20:110:21 | &... [pointer] | CookieWithoutHttpOnly.go:110:21:110:21 | c | provenance | | +| CookieWithoutHttpOnly.go:110:21:110:21 | c | CookieWithoutHttpOnly.go:110:20:110:21 | &... [pointer] | provenance | | +| CookieWithoutHttpOnly.go:110:21:110:21 | c | CookieWithoutHttpOnly.go:110:20:110:21 | &... [pointer] | provenance | | +| CookieWithoutHttpOnly.go:114:13:114:24 | "login_name" | CookieWithoutHttpOnly.go:116:10:116:16 | session | provenance | | +| CookieWithoutHttpOnly.go:115:7:118:2 | struct literal | CookieWithoutHttpOnly.go:120:20:120:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:115:7:118:2 | struct literal | CookieWithoutHttpOnly.go:120:20:120:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:115:7:118:2 | struct literal | CookieWithoutHttpOnly.go:120:20:120:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:115:7:118:2 | struct literal | CookieWithoutHttpOnly.go:120:20:120:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:115:7:118:2 | struct literal | CookieWithoutHttpOnly.go:120:21:120:21 | c | provenance | | +| CookieWithoutHttpOnly.go:115:7:118:2 | struct literal | CookieWithoutHttpOnly.go:120:21:120:21 | c | provenance | | +| CookieWithoutHttpOnly.go:116:10:116:16 | session | CookieWithoutHttpOnly.go:115:7:118:2 | struct literal | provenance | | +| CookieWithoutHttpOnly.go:119:15:119:19 | false | CookieWithoutHttpOnly.go:115:7:118:2 | struct literal | provenance | | +| CookieWithoutHttpOnly.go:120:20:120:21 | &... | CookieWithoutHttpOnly.go:120:20:120:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:120:20:120:21 | &... | CookieWithoutHttpOnly.go:120:20:120:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:120:20:120:21 | &... | CookieWithoutHttpOnly.go:120:20:120:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:120:20:120:21 | &... | CookieWithoutHttpOnly.go:120:20:120:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:120:20:120:21 | &... | CookieWithoutHttpOnly.go:120:21:120:21 | c | provenance | | +| CookieWithoutHttpOnly.go:120:20:120:21 | &... | CookieWithoutHttpOnly.go:120:21:120:21 | c | provenance | | +| CookieWithoutHttpOnly.go:120:20:120:21 | &... [pointer] | CookieWithoutHttpOnly.go:120:20:120:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:120:20:120:21 | &... [pointer] | CookieWithoutHttpOnly.go:120:20:120:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:120:20:120:21 | &... [pointer] | CookieWithoutHttpOnly.go:120:20:120:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:120:20:120:21 | &... [pointer] | CookieWithoutHttpOnly.go:120:20:120:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:120:20:120:21 | &... [pointer] | CookieWithoutHttpOnly.go:120:21:120:21 | c | provenance | | +| CookieWithoutHttpOnly.go:120:20:120:21 | &... [pointer] | CookieWithoutHttpOnly.go:120:21:120:21 | c | provenance | | +| CookieWithoutHttpOnly.go:120:21:120:21 | c | CookieWithoutHttpOnly.go:120:20:120:21 | &... [pointer] | provenance | | +| CookieWithoutHttpOnly.go:120:21:120:21 | c | CookieWithoutHttpOnly.go:120:20:120:21 | &... [pointer] | provenance | | +| CookieWithoutHttpOnly.go:123:13:123:49 | call to NewCookieStore | CookieWithoutHttpOnly.go:126:16:126:20 | store | provenance | | +| CookieWithoutHttpOnly.go:123:13:123:49 | call to NewCookieStore | CookieWithoutHttpOnly.go:134:16:134:20 | store | provenance | | +| CookieWithoutHttpOnly.go:123:13:123:49 | call to NewCookieStore | CookieWithoutHttpOnly.go:146:16:146:20 | store | provenance | | +| CookieWithoutHttpOnly.go:123:13:123:49 | call to NewCookieStore | CookieWithoutHttpOnly.go:158:16:158:20 | store | provenance | | +| CookieWithoutHttpOnly.go:123:13:123:49 | call to NewCookieStore | CookieWithoutHttpOnly.go:170:16:170:20 | store | provenance | | +| CookieWithoutHttpOnly.go:123:13:123:49 | call to NewCookieStore | CookieWithoutHttpOnly.go:183:16:183:20 | store | provenance | | +| CookieWithoutHttpOnly.go:123:13:123:49 | call to NewCookieStore | CookieWithoutHttpOnly.go:195:16:195:20 | store | provenance | | +| CookieWithoutHttpOnly.go:126:2:126:43 | ... := ...[0] | CookieWithoutHttpOnly.go:129:2:129:8 | session | provenance | | +| CookieWithoutHttpOnly.go:126:16:126:20 | store | CookieWithoutHttpOnly.go:126:2:126:43 | ... := ...[0] | provenance | | +| CookieWithoutHttpOnly.go:133:2:133:9 | definition of httpOnly | CookieWithoutHttpOnly.go:139:13:139:20 | httpOnly | provenance | | +| CookieWithoutHttpOnly.go:133:14:133:18 | false | CookieWithoutHttpOnly.go:139:13:139:20 | httpOnly | provenance | | +| CookieWithoutHttpOnly.go:134:2:134:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:135:2:135:8 | session [pointer] | provenance | | +| CookieWithoutHttpOnly.go:134:2:134:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:135:2:135:8 | session [pointer] | provenance | | +| CookieWithoutHttpOnly.go:134:2:134:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:137:2:137:8 | session [pointer] | provenance | | +| CookieWithoutHttpOnly.go:134:2:134:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:137:2:137:8 | session [pointer] | provenance | | +| CookieWithoutHttpOnly.go:134:2:134:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:142:2:142:8 | session | provenance | | +| CookieWithoutHttpOnly.go:134:2:134:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:142:2:142:8 | session | provenance | | +| CookieWithoutHttpOnly.go:134:2:134:43 | ... := ...[0] | CookieWithoutHttpOnly.go:142:2:142:8 | session | provenance | | +| CookieWithoutHttpOnly.go:134:16:134:20 | store | CookieWithoutHttpOnly.go:134:2:134:43 | ... := ...[0] | provenance | | +| CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | CookieWithoutHttpOnly.go:134:2:134:8 | definition of session [pointer] | provenance | | +| CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | CookieWithoutHttpOnly.go:134:2:134:8 | definition of session [pointer] | provenance | | +| CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | CookieWithoutHttpOnly.go:137:2:137:8 | session | provenance | | +| CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | CookieWithoutHttpOnly.go:137:2:137:8 | session | provenance | | +| CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | CookieWithoutHttpOnly.go:142:2:142:8 | session | provenance | | +| CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | CookieWithoutHttpOnly.go:142:2:142:8 | session | provenance | | +| CookieWithoutHttpOnly.go:135:2:135:8 | session [pointer] | CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:135:2:135:8 | session [pointer] | CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | CookieWithoutHttpOnly.go:134:2:134:8 | definition of session [pointer] | provenance | | +| CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | CookieWithoutHttpOnly.go:134:2:134:8 | definition of session [pointer] | provenance | | +| CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | CookieWithoutHttpOnly.go:137:2:137:8 | session | provenance | | +| CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | CookieWithoutHttpOnly.go:137:2:137:8 | session | provenance | | +| CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | CookieWithoutHttpOnly.go:142:2:142:8 | session | provenance | | +| CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | CookieWithoutHttpOnly.go:142:2:142:8 | session | provenance | | +| CookieWithoutHttpOnly.go:137:2:137:8 | session | CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:137:2:137:8 | session | CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:137:2:137:8 | session [pointer] | CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:137:2:137:8 | session [pointer] | CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:137:20:140:2 | &... | CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:137:20:140:2 | &... | CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:137:20:140:2 | &... | CookieWithoutHttpOnly.go:137:2:137:8 | session | provenance | | +| CookieWithoutHttpOnly.go:137:20:140:2 | &... | CookieWithoutHttpOnly.go:137:2:137:8 | session | provenance | | +| CookieWithoutHttpOnly.go:137:20:140:2 | &... | CookieWithoutHttpOnly.go:137:20:140:2 | &... | provenance | | +| CookieWithoutHttpOnly.go:137:20:140:2 | &... | CookieWithoutHttpOnly.go:137:21:140:2 | struct literal | provenance | | +| CookieWithoutHttpOnly.go:137:21:140:2 | struct literal | CookieWithoutHttpOnly.go:137:20:140:2 | &... | provenance | | +| CookieWithoutHttpOnly.go:137:21:140:2 | struct literal | CookieWithoutHttpOnly.go:137:20:140:2 | &... | provenance | | +| CookieWithoutHttpOnly.go:139:13:139:20 | httpOnly | CookieWithoutHttpOnly.go:137:21:140:2 | struct literal | provenance | | +| CookieWithoutHttpOnly.go:146:2:146:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:147:2:147:8 | session [pointer] | provenance | | +| CookieWithoutHttpOnly.go:146:2:146:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:149:2:149:8 | session [pointer] | provenance | | +| CookieWithoutHttpOnly.go:146:2:146:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:153:2:153:8 | session | provenance | | +| CookieWithoutHttpOnly.go:146:2:146:43 | ... := ...[0] | CookieWithoutHttpOnly.go:153:2:153:8 | session | provenance | | +| CookieWithoutHttpOnly.go:146:16:146:20 | store | CookieWithoutHttpOnly.go:146:2:146:43 | ... := ...[0] | provenance | | +| CookieWithoutHttpOnly.go:147:2:147:8 | implicit dereference | CookieWithoutHttpOnly.go:146:2:146:8 | definition of session [pointer] | provenance | | +| CookieWithoutHttpOnly.go:147:2:147:8 | implicit dereference | CookieWithoutHttpOnly.go:147:2:147:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:147:2:147:8 | implicit dereference | CookieWithoutHttpOnly.go:149:2:149:8 | session | provenance | | +| CookieWithoutHttpOnly.go:147:2:147:8 | implicit dereference | CookieWithoutHttpOnly.go:153:2:153:8 | session | provenance | | +| CookieWithoutHttpOnly.go:147:2:147:8 | session [pointer] | CookieWithoutHttpOnly.go:147:2:147:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:149:2:149:8 | implicit dereference | CookieWithoutHttpOnly.go:146:2:146:8 | definition of session [pointer] | provenance | | +| CookieWithoutHttpOnly.go:149:2:149:8 | implicit dereference | CookieWithoutHttpOnly.go:147:2:147:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:149:2:149:8 | implicit dereference | CookieWithoutHttpOnly.go:149:2:149:8 | session | provenance | | +| CookieWithoutHttpOnly.go:149:2:149:8 | implicit dereference | CookieWithoutHttpOnly.go:153:2:153:8 | session | provenance | | +| CookieWithoutHttpOnly.go:149:2:149:8 | session | CookieWithoutHttpOnly.go:149:2:149:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:149:2:149:8 | session [pointer] | CookieWithoutHttpOnly.go:149:2:149:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:149:20:151:2 | &... | CookieWithoutHttpOnly.go:149:2:149:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:149:20:151:2 | &... | CookieWithoutHttpOnly.go:149:2:149:8 | session | provenance | | +| CookieWithoutHttpOnly.go:149:20:151:2 | &... | CookieWithoutHttpOnly.go:149:20:151:2 | &... | provenance | | +| CookieWithoutHttpOnly.go:149:21:151:2 | struct literal | CookieWithoutHttpOnly.go:149:20:151:2 | &... | provenance | | +| CookieWithoutHttpOnly.go:157:2:157:9 | definition of httpOnly | CookieWithoutHttpOnly.go:163:13:163:20 | httpOnly | provenance | | +| CookieWithoutHttpOnly.go:157:14:157:17 | true | CookieWithoutHttpOnly.go:163:13:163:20 | httpOnly | provenance | | +| CookieWithoutHttpOnly.go:158:2:158:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:159:2:159:8 | session [pointer] | provenance | | +| CookieWithoutHttpOnly.go:158:2:158:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:159:2:159:8 | session [pointer] | provenance | | +| CookieWithoutHttpOnly.go:158:2:158:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:161:2:161:8 | session [pointer] | provenance | | +| CookieWithoutHttpOnly.go:158:2:158:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:161:2:161:8 | session [pointer] | provenance | | +| CookieWithoutHttpOnly.go:158:2:158:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:166:2:166:8 | session | provenance | | +| CookieWithoutHttpOnly.go:158:2:158:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:166:2:166:8 | session | provenance | | +| CookieWithoutHttpOnly.go:158:2:158:43 | ... := ...[0] | CookieWithoutHttpOnly.go:166:2:166:8 | session | provenance | | +| CookieWithoutHttpOnly.go:158:16:158:20 | store | CookieWithoutHttpOnly.go:158:2:158:43 | ... := ...[0] | provenance | | +| CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | CookieWithoutHttpOnly.go:158:2:158:8 | definition of session [pointer] | provenance | | +| CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | CookieWithoutHttpOnly.go:158:2:158:8 | definition of session [pointer] | provenance | | +| CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | CookieWithoutHttpOnly.go:161:2:161:8 | session | provenance | | +| CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | CookieWithoutHttpOnly.go:161:2:161:8 | session | provenance | | +| CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | CookieWithoutHttpOnly.go:166:2:166:8 | session | provenance | | +| CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | CookieWithoutHttpOnly.go:166:2:166:8 | session | provenance | | +| CookieWithoutHttpOnly.go:159:2:159:8 | session [pointer] | CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:159:2:159:8 | session [pointer] | CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | CookieWithoutHttpOnly.go:158:2:158:8 | definition of session [pointer] | provenance | | +| CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | CookieWithoutHttpOnly.go:158:2:158:8 | definition of session [pointer] | provenance | | +| CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | CookieWithoutHttpOnly.go:161:2:161:8 | session | provenance | | +| CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | CookieWithoutHttpOnly.go:161:2:161:8 | session | provenance | | +| CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | CookieWithoutHttpOnly.go:166:2:166:8 | session | provenance | | +| CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | CookieWithoutHttpOnly.go:166:2:166:8 | session | provenance | | +| CookieWithoutHttpOnly.go:161:2:161:8 | session | CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:161:2:161:8 | session | CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:161:2:161:8 | session [pointer] | CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:161:2:161:8 | session [pointer] | CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:161:20:164:2 | &... | CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:161:20:164:2 | &... | CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:161:20:164:2 | &... | CookieWithoutHttpOnly.go:161:2:161:8 | session | provenance | | +| CookieWithoutHttpOnly.go:161:20:164:2 | &... | CookieWithoutHttpOnly.go:161:2:161:8 | session | provenance | | +| CookieWithoutHttpOnly.go:161:20:164:2 | &... | CookieWithoutHttpOnly.go:161:20:164:2 | &... | provenance | | +| CookieWithoutHttpOnly.go:161:20:164:2 | &... | CookieWithoutHttpOnly.go:161:21:164:2 | struct literal | provenance | | +| CookieWithoutHttpOnly.go:161:21:164:2 | struct literal | CookieWithoutHttpOnly.go:161:20:164:2 | &... | provenance | | +| CookieWithoutHttpOnly.go:161:21:164:2 | struct literal | CookieWithoutHttpOnly.go:161:20:164:2 | &... | provenance | | +| CookieWithoutHttpOnly.go:163:13:163:20 | httpOnly | CookieWithoutHttpOnly.go:161:21:164:2 | struct literal | provenance | | +| CookieWithoutHttpOnly.go:169:56:169:63 | argument corresponding to httpOnly | CookieWithoutHttpOnly.go:175:13:175:20 | httpOnly | provenance | | +| CookieWithoutHttpOnly.go:169:56:169:63 | definition of httpOnly | CookieWithoutHttpOnly.go:175:13:175:20 | httpOnly | provenance | | +| CookieWithoutHttpOnly.go:170:2:170:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:171:2:171:8 | session [pointer] | provenance | | +| CookieWithoutHttpOnly.go:170:2:170:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:171:2:171:8 | session [pointer] | provenance | | +| CookieWithoutHttpOnly.go:170:2:170:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:173:2:173:8 | session [pointer] | provenance | | +| CookieWithoutHttpOnly.go:170:2:170:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:173:2:173:8 | session [pointer] | provenance | | +| CookieWithoutHttpOnly.go:170:2:170:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:178:2:178:8 | session | provenance | | +| CookieWithoutHttpOnly.go:170:2:170:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:178:2:178:8 | session | provenance | | +| CookieWithoutHttpOnly.go:170:2:170:43 | ... := ...[0] | CookieWithoutHttpOnly.go:178:2:178:8 | session | provenance | | +| CookieWithoutHttpOnly.go:170:16:170:20 | store | CookieWithoutHttpOnly.go:170:2:170:43 | ... := ...[0] | provenance | | +| CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | CookieWithoutHttpOnly.go:170:2:170:8 | definition of session [pointer] | provenance | | +| CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | CookieWithoutHttpOnly.go:170:2:170:8 | definition of session [pointer] | provenance | | +| CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | CookieWithoutHttpOnly.go:173:2:173:8 | session | provenance | | +| CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | CookieWithoutHttpOnly.go:173:2:173:8 | session | provenance | | +| CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | CookieWithoutHttpOnly.go:178:2:178:8 | session | provenance | | +| CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | CookieWithoutHttpOnly.go:178:2:178:8 | session | provenance | | +| CookieWithoutHttpOnly.go:171:2:171:8 | session [pointer] | CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:171:2:171:8 | session [pointer] | CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | CookieWithoutHttpOnly.go:170:2:170:8 | definition of session [pointer] | provenance | | +| CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | CookieWithoutHttpOnly.go:170:2:170:8 | definition of session [pointer] | provenance | | +| CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | CookieWithoutHttpOnly.go:173:2:173:8 | session | provenance | | +| CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | CookieWithoutHttpOnly.go:173:2:173:8 | session | provenance | | +| CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | CookieWithoutHttpOnly.go:178:2:178:8 | session | provenance | | +| CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | CookieWithoutHttpOnly.go:178:2:178:8 | session | provenance | | +| CookieWithoutHttpOnly.go:173:2:173:8 | session | CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:173:2:173:8 | session | CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:173:2:173:8 | session [pointer] | CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:173:2:173:8 | session [pointer] | CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:173:20:176:2 | &... | CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:173:20:176:2 | &... | CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:173:20:176:2 | &... | CookieWithoutHttpOnly.go:173:2:173:8 | session | provenance | | +| CookieWithoutHttpOnly.go:173:20:176:2 | &... | CookieWithoutHttpOnly.go:173:2:173:8 | session | provenance | | +| CookieWithoutHttpOnly.go:173:20:176:2 | &... | CookieWithoutHttpOnly.go:173:20:176:2 | &... | provenance | | +| CookieWithoutHttpOnly.go:173:20:176:2 | &... | CookieWithoutHttpOnly.go:173:21:176:2 | struct literal | provenance | | +| CookieWithoutHttpOnly.go:173:21:176:2 | struct literal | CookieWithoutHttpOnly.go:173:20:176:2 | &... | provenance | | +| CookieWithoutHttpOnly.go:173:21:176:2 | struct literal | CookieWithoutHttpOnly.go:173:20:176:2 | &... | provenance | | +| CookieWithoutHttpOnly.go:175:13:175:20 | httpOnly | CookieWithoutHttpOnly.go:173:21:176:2 | struct literal | provenance | | +| CookieWithoutHttpOnly.go:183:2:183:43 | ... := ...[0] | CookieWithoutHttpOnly.go:191:19:191:25 | session | provenance | | +| CookieWithoutHttpOnly.go:183:16:183:20 | store | CookieWithoutHttpOnly.go:183:2:183:43 | ... := ...[0] | provenance | | +| CookieWithoutHttpOnly.go:195:2:195:43 | ... := ...[0] | CookieWithoutHttpOnly.go:202:19:202:25 | session | provenance | | +| CookieWithoutHttpOnly.go:195:16:195:20 | store | CookieWithoutHttpOnly.go:195:2:195:43 | ... := ...[0] | provenance | | nodes | CookieWithoutHttpOnly.go:11:7:14:2 | struct literal | semmle.label | struct literal | | CookieWithoutHttpOnly.go:12:10:12:18 | "session" | semmle.label | "session" | diff --git a/go/ql/test/experimental/CWE-203/Timing.expected b/go/ql/test/experimental/CWE-203/Timing.expected index 05e19774dbc..b1aa5487aa9 100644 --- a/go/ql/test/experimental/CWE-203/Timing.expected +++ b/go/ql/test/experimental/CWE-203/Timing.expected @@ -1,10 +1,10 @@ edges -| timing.go:15:18:15:27 | selection of Header | timing.go:15:18:15:45 | call to Get | -| timing.go:15:18:15:45 | call to Get | timing.go:17:31:17:42 | headerSecret | -| timing.go:28:18:28:27 | selection of Header | timing.go:28:18:28:45 | call to Get | -| timing.go:28:18:28:45 | call to Get | timing.go:30:47:30:58 | headerSecret | -| timing.go:41:18:41:27 | selection of Header | timing.go:41:18:41:45 | call to Get | -| timing.go:41:18:41:45 | call to Get | timing.go:42:25:42:36 | headerSecret | +| timing.go:15:18:15:27 | selection of Header | timing.go:15:18:15:45 | call to Get | provenance | | +| timing.go:15:18:15:45 | call to Get | timing.go:17:31:17:42 | headerSecret | provenance | | +| timing.go:28:18:28:27 | selection of Header | timing.go:28:18:28:45 | call to Get | provenance | | +| timing.go:28:18:28:45 | call to Get | timing.go:30:47:30:58 | headerSecret | provenance | | +| timing.go:41:18:41:27 | selection of Header | timing.go:41:18:41:45 | call to Get | provenance | | +| timing.go:41:18:41:45 | call to Get | timing.go:42:25:42:36 | headerSecret | provenance | | nodes | timing.go:15:18:15:27 | selection of Header | semmle.label | selection of Header | | timing.go:15:18:15:45 | call to Get | semmle.label | call to Get | diff --git a/go/ql/test/experimental/CWE-287/ImproperLdapAuth.expected b/go/ql/test/experimental/CWE-287/ImproperLdapAuth.expected index 16d32e48937..14629dfec2e 100644 --- a/go/ql/test/experimental/CWE-287/ImproperLdapAuth.expected +++ b/go/ql/test/experimental/CWE-287/ImproperLdapAuth.expected @@ -1,7 +1,7 @@ edges -| ImproperLdapAuth.go:18:18:18:24 | selection of URL | ImproperLdapAuth.go:18:18:18:32 | call to Query | -| ImproperLdapAuth.go:18:18:18:32 | call to Query | ImproperLdapAuth.go:28:23:28:34 | bindPassword | -| ImproperLdapAuth.go:87:18:87:19 | "" | ImproperLdapAuth.go:97:23:97:34 | bindPassword | +| ImproperLdapAuth.go:18:18:18:24 | selection of URL | ImproperLdapAuth.go:18:18:18:32 | call to Query | provenance | | +| ImproperLdapAuth.go:18:18:18:32 | call to Query | ImproperLdapAuth.go:28:23:28:34 | bindPassword | provenance | | +| ImproperLdapAuth.go:87:18:87:19 | "" | ImproperLdapAuth.go:97:23:97:34 | bindPassword | provenance | | nodes | ImproperLdapAuth.go:18:18:18:24 | selection of URL | semmle.label | selection of URL | | ImproperLdapAuth.go:18:18:18:32 | call to Query | semmle.label | call to Query | diff --git a/go/ql/test/experimental/CWE-321-V2/HardCodedKeys.expected b/go/ql/test/experimental/CWE-321-V2/HardCodedKeys.expected index 6d1d1693ab7..5b26a2a9b36 100644 --- a/go/ql/test/experimental/CWE-321-V2/HardCodedKeys.expected +++ b/go/ql/test/experimental/CWE-321-V2/HardCodedKeys.expected @@ -1,8 +1,8 @@ edges -| go-jose.v3.go:13:14:13:34 | type conversion | go-jose.v3.go:24:32:24:37 | JwtKey | -| go-jose.v3.go:13:21:13:33 | "AllYourBase" | go-jose.v3.go:13:14:13:34 | type conversion | -| golang-jwt-v5.go:19:15:19:35 | type conversion | golang-jwt-v5.go:27:9:27:15 | JwtKey1 | -| golang-jwt-v5.go:19:22:19:34 | "AllYourBase" | golang-jwt-v5.go:19:15:19:35 | type conversion | +| go-jose.v3.go:13:14:13:34 | type conversion | go-jose.v3.go:24:32:24:37 | JwtKey | provenance | | +| go-jose.v3.go:13:21:13:33 | "AllYourBase" | go-jose.v3.go:13:14:13:34 | type conversion | provenance | | +| golang-jwt-v5.go:19:15:19:35 | type conversion | golang-jwt-v5.go:27:9:27:15 | JwtKey1 | provenance | | +| golang-jwt-v5.go:19:22:19:34 | "AllYourBase" | golang-jwt-v5.go:19:15:19:35 | type conversion | provenance | | nodes | go-jose.v3.go:13:14:13:34 | type conversion | semmle.label | type conversion | | go-jose.v3.go:13:21:13:33 | "AllYourBase" | semmle.label | "AllYourBase" | diff --git a/go/ql/test/experimental/CWE-321/HardcodedKeys.expected b/go/ql/test/experimental/CWE-321/HardcodedKeys.expected index 873bb55b7c2..bcc40eacb23 100644 --- a/go/ql/test/experimental/CWE-321/HardcodedKeys.expected +++ b/go/ql/test/experimental/CWE-321/HardcodedKeys.expected @@ -1,44 +1,44 @@ edges -| HardcodedKeysBad.go:11:18:11:38 | type conversion | HardcodedKeysBad.go:19:28:19:39 | mySigningKey | -| HardcodedKeysBad.go:11:25:11:37 | "AllYourBase" | HardcodedKeysBad.go:11:18:11:38 | type conversion | -| main.go:33:18:33:31 | type conversion | main.go:42:28:42:39 | mySigningKey | -| main.go:33:25:33:30 | "key1" | main.go:33:18:33:31 | type conversion | -| main.go:50:23:50:28 | "key2" | main.go:50:16:50:29 | type conversion | -| main.go:68:9:68:22 | type conversion | main.go:69:44:69:46 | key | -| main.go:68:16:68:21 | `key3` | main.go:68:9:68:22 | type conversion | -| main.go:73:9:73:22 | type conversion | main.go:74:66:74:68 | key | -| main.go:73:16:73:21 | "key4" | main.go:73:9:73:22 | type conversion | -| main.go:77:10:77:23 | type conversion | main.go:82:15:82:18 | key2 | -| main.go:77:17:77:22 | "key5" | main.go:77:10:77:23 | type conversion | -| main.go:88:9:88:22 | type conversion | main.go:92:41:92:43 | key | -| main.go:88:16:88:21 | "key6" | main.go:88:9:88:22 | type conversion | -| main.go:97:10:97:23 | type conversion | main.go:99:66:99:69 | key2 | -| main.go:97:17:97:22 | "key7" | main.go:97:10:97:23 | type conversion | -| main.go:105:9:105:22 | type conversion | main.go:110:30:110:32 | key | -| main.go:105:16:105:21 | "key8" | main.go:105:9:105:22 | type conversion | -| main.go:114:15:114:28 | type conversion | main.go:115:16:115:24 | sharedKey | -| main.go:114:22:114:27 | "key9" | main.go:114:15:114:28 | type conversion | -| main.go:118:23:118:37 | type conversion | main.go:121:16:121:30 | sharedKeyglobal | -| main.go:118:30:118:36 | "key10" | main.go:118:23:118:37 | type conversion | -| main.go:127:27:127:33 | "key11" | main.go:127:20:127:34 | type conversion | -| main.go:142:14:142:28 | type conversion | main.go:144:39:144:46 | mySecret | -| main.go:142:21:142:27 | "key12" | main.go:142:14:142:28 | type conversion | -| main.go:149:14:149:28 | type conversion | main.go:153:11:153:18 | mySecret | -| main.go:149:21:149:27 | "key13" | main.go:149:14:149:28 | type conversion | -| main.go:160:12:160:26 | type conversion | main.go:161:34:161:39 | secret | -| main.go:160:19:160:25 | "key14" | main.go:160:12:160:26 | type conversion | -| main.go:166:12:166:26 | type conversion | main.go:167:32:167:37 | secret | -| main.go:166:19:166:25 | "key15" | main.go:166:12:166:26 | type conversion | -| main.go:172:12:172:26 | type conversion | main.go:173:41:173:46 | secret | -| main.go:172:19:172:25 | "key16" | main.go:172:12:172:26 | type conversion | -| main.go:178:12:178:26 | type conversion | main.go:179:51:179:56 | secret | -| main.go:178:19:178:25 | "key17" | main.go:178:12:178:26 | type conversion | -| main.go:184:12:184:26 | type conversion | main.go:185:42:185:47 | secret | -| main.go:184:19:184:25 | "key18" | main.go:184:12:184:26 | type conversion | -| main.go:190:12:190:26 | type conversion | main.go:193:33:193:38 | secret | -| main.go:190:19:190:25 | "key19" | main.go:190:12:190:26 | type conversion | -| sanitizer.go:17:9:17:21 | type conversion | sanitizer.go:18:44:18:46 | key | -| sanitizer.go:17:16:17:20 | `key` | sanitizer.go:17:9:17:21 | type conversion | +| HardcodedKeysBad.go:11:18:11:38 | type conversion | HardcodedKeysBad.go:19:28:19:39 | mySigningKey | provenance | | +| HardcodedKeysBad.go:11:25:11:37 | "AllYourBase" | HardcodedKeysBad.go:11:18:11:38 | type conversion | provenance | | +| main.go:33:18:33:31 | type conversion | main.go:42:28:42:39 | mySigningKey | provenance | | +| main.go:33:25:33:30 | "key1" | main.go:33:18:33:31 | type conversion | provenance | | +| main.go:50:23:50:28 | "key2" | main.go:50:16:50:29 | type conversion | provenance | | +| main.go:68:9:68:22 | type conversion | main.go:69:44:69:46 | key | provenance | | +| main.go:68:16:68:21 | `key3` | main.go:68:9:68:22 | type conversion | provenance | | +| main.go:73:9:73:22 | type conversion | main.go:74:66:74:68 | key | provenance | | +| main.go:73:16:73:21 | "key4" | main.go:73:9:73:22 | type conversion | provenance | | +| main.go:77:10:77:23 | type conversion | main.go:82:15:82:18 | key2 | provenance | | +| main.go:77:17:77:22 | "key5" | main.go:77:10:77:23 | type conversion | provenance | | +| main.go:88:9:88:22 | type conversion | main.go:92:41:92:43 | key | provenance | | +| main.go:88:16:88:21 | "key6" | main.go:88:9:88:22 | type conversion | provenance | | +| main.go:97:10:97:23 | type conversion | main.go:99:66:99:69 | key2 | provenance | | +| main.go:97:17:97:22 | "key7" | main.go:97:10:97:23 | type conversion | provenance | | +| main.go:105:9:105:22 | type conversion | main.go:110:30:110:32 | key | provenance | | +| main.go:105:16:105:21 | "key8" | main.go:105:9:105:22 | type conversion | provenance | | +| main.go:114:15:114:28 | type conversion | main.go:115:16:115:24 | sharedKey | provenance | | +| main.go:114:22:114:27 | "key9" | main.go:114:15:114:28 | type conversion | provenance | | +| main.go:118:23:118:37 | type conversion | main.go:121:16:121:30 | sharedKeyglobal | provenance | | +| main.go:118:30:118:36 | "key10" | main.go:118:23:118:37 | type conversion | provenance | | +| main.go:127:27:127:33 | "key11" | main.go:127:20:127:34 | type conversion | provenance | | +| main.go:142:14:142:28 | type conversion | main.go:144:39:144:46 | mySecret | provenance | | +| main.go:142:21:142:27 | "key12" | main.go:142:14:142:28 | type conversion | provenance | | +| main.go:149:14:149:28 | type conversion | main.go:153:11:153:18 | mySecret | provenance | | +| main.go:149:21:149:27 | "key13" | main.go:149:14:149:28 | type conversion | provenance | | +| main.go:160:12:160:26 | type conversion | main.go:161:34:161:39 | secret | provenance | | +| main.go:160:19:160:25 | "key14" | main.go:160:12:160:26 | type conversion | provenance | | +| main.go:166:12:166:26 | type conversion | main.go:167:32:167:37 | secret | provenance | | +| main.go:166:19:166:25 | "key15" | main.go:166:12:166:26 | type conversion | provenance | | +| main.go:172:12:172:26 | type conversion | main.go:173:41:173:46 | secret | provenance | | +| main.go:172:19:172:25 | "key16" | main.go:172:12:172:26 | type conversion | provenance | | +| main.go:178:12:178:26 | type conversion | main.go:179:51:179:56 | secret | provenance | | +| main.go:178:19:178:25 | "key17" | main.go:178:12:178:26 | type conversion | provenance | | +| main.go:184:12:184:26 | type conversion | main.go:185:42:185:47 | secret | provenance | | +| main.go:184:19:184:25 | "key18" | main.go:184:12:184:26 | type conversion | provenance | | +| main.go:190:12:190:26 | type conversion | main.go:193:33:193:38 | secret | provenance | | +| main.go:190:19:190:25 | "key19" | main.go:190:12:190:26 | type conversion | provenance | | +| sanitizer.go:17:9:17:21 | type conversion | sanitizer.go:18:44:18:46 | key | provenance | | +| sanitizer.go:17:16:17:20 | `key` | sanitizer.go:17:9:17:21 | type conversion | provenance | | nodes | HardcodedKeysBad.go:11:18:11:38 | type conversion | semmle.label | type conversion | | HardcodedKeysBad.go:11:25:11:37 | "AllYourBase" | semmle.label | "AllYourBase" | diff --git a/go/ql/test/experimental/CWE-347/ParseJWTWithoutVerification.expected b/go/ql/test/experimental/CWE-347/ParseJWTWithoutVerification.expected index 7162ed5802f..d067b5eb83d 100644 --- a/go/ql/test/experimental/CWE-347/ParseJWTWithoutVerification.expected +++ b/go/ql/test/experimental/CWE-347/ParseJWTWithoutVerification.expected @@ -1,16 +1,16 @@ edges -| go-jose.v3.go:25:16:25:20 | selection of URL | go-jose.v3.go:25:16:25:28 | call to Query | -| go-jose.v3.go:25:16:25:28 | call to Query | go-jose.v3.go:25:16:25:47 | call to Get | -| go-jose.v3.go:25:16:25:47 | call to Get | go-jose.v3.go:26:15:26:25 | signedToken | -| go-jose.v3.go:26:15:26:25 | signedToken | go-jose.v3.go:29:19:29:29 | definition of signedToken | -| go-jose.v3.go:29:19:29:29 | definition of signedToken | go-jose.v3.go:31:37:31:47 | signedToken | -| go-jose.v3.go:31:2:31:48 | ... := ...[0] | go-jose.v3.go:33:12:33:23 | DecodedToken | -| go-jose.v3.go:31:37:31:47 | signedToken | go-jose.v3.go:31:2:31:48 | ... := ...[0] | -| golang-jwt-v5.go:28:16:28:20 | selection of URL | golang-jwt-v5.go:28:16:28:28 | call to Query | -| golang-jwt-v5.go:28:16:28:28 | call to Query | golang-jwt-v5.go:28:16:28:47 | call to Get | -| golang-jwt-v5.go:28:16:28:47 | call to Get | golang-jwt-v5.go:29:25:29:35 | signedToken | -| golang-jwt-v5.go:29:25:29:35 | signedToken | golang-jwt-v5.go:32:29:32:39 | definition of signedToken | -| golang-jwt-v5.go:32:29:32:39 | definition of signedToken | golang-jwt-v5.go:34:58:34:68 | signedToken | +| go-jose.v3.go:25:16:25:20 | selection of URL | go-jose.v3.go:25:16:25:28 | call to Query | provenance | | +| go-jose.v3.go:25:16:25:28 | call to Query | go-jose.v3.go:25:16:25:47 | call to Get | provenance | | +| go-jose.v3.go:25:16:25:47 | call to Get | go-jose.v3.go:26:15:26:25 | signedToken | provenance | | +| go-jose.v3.go:26:15:26:25 | signedToken | go-jose.v3.go:29:19:29:29 | definition of signedToken | provenance | | +| go-jose.v3.go:29:19:29:29 | definition of signedToken | go-jose.v3.go:31:37:31:47 | signedToken | provenance | | +| go-jose.v3.go:31:2:31:48 | ... := ...[0] | go-jose.v3.go:33:12:33:23 | DecodedToken | provenance | | +| go-jose.v3.go:31:37:31:47 | signedToken | go-jose.v3.go:31:2:31:48 | ... := ...[0] | provenance | | +| golang-jwt-v5.go:28:16:28:20 | selection of URL | golang-jwt-v5.go:28:16:28:28 | call to Query | provenance | | +| golang-jwt-v5.go:28:16:28:28 | call to Query | golang-jwt-v5.go:28:16:28:47 | call to Get | provenance | | +| golang-jwt-v5.go:28:16:28:47 | call to Get | golang-jwt-v5.go:29:25:29:35 | signedToken | provenance | | +| golang-jwt-v5.go:29:25:29:35 | signedToken | golang-jwt-v5.go:32:29:32:39 | definition of signedToken | provenance | | +| golang-jwt-v5.go:32:29:32:39 | definition of signedToken | golang-jwt-v5.go:34:58:34:68 | signedToken | provenance | | nodes | go-jose.v3.go:25:16:25:20 | selection of URL | semmle.label | selection of URL | | go-jose.v3.go:25:16:25:28 | call to Query | semmle.label | call to Query | diff --git a/go/ql/test/experimental/CWE-369/DivideByZero.expected b/go/ql/test/experimental/CWE-369/DivideByZero.expected index 0d979a79790..0b6eeb93317 100644 --- a/go/ql/test/experimental/CWE-369/DivideByZero.expected +++ b/go/ql/test/experimental/CWE-369/DivideByZero.expected @@ -1,26 +1,26 @@ edges -| DivideByZero.go:10:12:10:16 | selection of URL | DivideByZero.go:10:12:10:24 | call to Query | -| DivideByZero.go:10:12:10:24 | call to Query | DivideByZero.go:11:27:11:32 | param1 | -| DivideByZero.go:11:2:11:33 | ... := ...[0] | DivideByZero.go:12:16:12:20 | value | -| DivideByZero.go:11:27:11:32 | param1 | DivideByZero.go:11:2:11:33 | ... := ...[0] | -| DivideByZero.go:17:12:17:16 | selection of URL | DivideByZero.go:17:12:17:24 | call to Query | -| DivideByZero.go:17:12:17:24 | call to Query | DivideByZero.go:18:11:18:24 | type conversion | -| DivideByZero.go:18:11:18:24 | type conversion | DivideByZero.go:19:16:19:20 | value | -| DivideByZero.go:24:12:24:16 | selection of URL | DivideByZero.go:24:12:24:24 | call to Query | -| DivideByZero.go:24:12:24:24 | call to Query | DivideByZero.go:25:31:25:36 | param1 | -| DivideByZero.go:25:2:25:45 | ... := ...[0] | DivideByZero.go:26:16:26:20 | value | -| DivideByZero.go:25:31:25:36 | param1 | DivideByZero.go:25:2:25:45 | ... := ...[0] | -| DivideByZero.go:31:12:31:16 | selection of URL | DivideByZero.go:31:12:31:24 | call to Query | -| DivideByZero.go:31:12:31:24 | call to Query | DivideByZero.go:32:33:32:38 | param1 | -| DivideByZero.go:32:2:32:43 | ... := ...[0] | DivideByZero.go:33:16:33:20 | value | -| DivideByZero.go:32:33:32:38 | param1 | DivideByZero.go:32:2:32:43 | ... := ...[0] | -| DivideByZero.go:38:12:38:16 | selection of URL | DivideByZero.go:38:12:38:24 | call to Query | -| DivideByZero.go:38:12:38:24 | call to Query | DivideByZero.go:39:32:39:37 | param1 | -| DivideByZero.go:39:2:39:46 | ... := ...[0] | DivideByZero.go:40:16:40:20 | value | -| DivideByZero.go:39:32:39:37 | param1 | DivideByZero.go:39:2:39:46 | ... := ...[0] | -| DivideByZero.go:54:12:54:16 | selection of URL | DivideByZero.go:54:12:54:24 | call to Query | -| DivideByZero.go:54:12:54:24 | call to Query | DivideByZero.go:55:11:55:24 | type conversion | -| DivideByZero.go:55:11:55:24 | type conversion | DivideByZero.go:57:17:57:21 | value | +| DivideByZero.go:10:12:10:16 | selection of URL | DivideByZero.go:10:12:10:24 | call to Query | provenance | | +| DivideByZero.go:10:12:10:24 | call to Query | DivideByZero.go:11:27:11:32 | param1 | provenance | | +| DivideByZero.go:11:2:11:33 | ... := ...[0] | DivideByZero.go:12:16:12:20 | value | provenance | | +| DivideByZero.go:11:27:11:32 | param1 | DivideByZero.go:11:2:11:33 | ... := ...[0] | provenance | | +| DivideByZero.go:17:12:17:16 | selection of URL | DivideByZero.go:17:12:17:24 | call to Query | provenance | | +| DivideByZero.go:17:12:17:24 | call to Query | DivideByZero.go:18:11:18:24 | type conversion | provenance | | +| DivideByZero.go:18:11:18:24 | type conversion | DivideByZero.go:19:16:19:20 | value | provenance | | +| DivideByZero.go:24:12:24:16 | selection of URL | DivideByZero.go:24:12:24:24 | call to Query | provenance | | +| DivideByZero.go:24:12:24:24 | call to Query | DivideByZero.go:25:31:25:36 | param1 | provenance | | +| DivideByZero.go:25:2:25:45 | ... := ...[0] | DivideByZero.go:26:16:26:20 | value | provenance | | +| DivideByZero.go:25:31:25:36 | param1 | DivideByZero.go:25:2:25:45 | ... := ...[0] | provenance | | +| DivideByZero.go:31:12:31:16 | selection of URL | DivideByZero.go:31:12:31:24 | call to Query | provenance | | +| DivideByZero.go:31:12:31:24 | call to Query | DivideByZero.go:32:33:32:38 | param1 | provenance | | +| DivideByZero.go:32:2:32:43 | ... := ...[0] | DivideByZero.go:33:16:33:20 | value | provenance | | +| DivideByZero.go:32:33:32:38 | param1 | DivideByZero.go:32:2:32:43 | ... := ...[0] | provenance | | +| DivideByZero.go:38:12:38:16 | selection of URL | DivideByZero.go:38:12:38:24 | call to Query | provenance | | +| DivideByZero.go:38:12:38:24 | call to Query | DivideByZero.go:39:32:39:37 | param1 | provenance | | +| DivideByZero.go:39:2:39:46 | ... := ...[0] | DivideByZero.go:40:16:40:20 | value | provenance | | +| DivideByZero.go:39:32:39:37 | param1 | DivideByZero.go:39:2:39:46 | ... := ...[0] | provenance | | +| DivideByZero.go:54:12:54:16 | selection of URL | DivideByZero.go:54:12:54:24 | call to Query | provenance | | +| DivideByZero.go:54:12:54:24 | call to Query | DivideByZero.go:55:11:55:24 | type conversion | provenance | | +| DivideByZero.go:55:11:55:24 | type conversion | DivideByZero.go:57:17:57:21 | value | provenance | | nodes | DivideByZero.go:10:12:10:16 | selection of URL | semmle.label | selection of URL | | DivideByZero.go:10:12:10:24 | call to Query | semmle.label | call to Query | diff --git a/go/ql/test/experimental/CWE-74/DsnInjection.expected b/go/ql/test/experimental/CWE-74/DsnInjection.expected index 9859f05b50c..2788c186d00 100644 --- a/go/ql/test/experimental/CWE-74/DsnInjection.expected +++ b/go/ql/test/experimental/CWE-74/DsnInjection.expected @@ -1,9 +1,9 @@ edges -| Dsn.go:47:10:47:30 | call to FormValue | Dsn.go:49:102:49:105 | name | -| Dsn.go:49:11:49:106 | []type{args} [array] | Dsn.go:49:11:49:106 | call to Sprintf | -| Dsn.go:49:11:49:106 | call to Sprintf | Dsn.go:50:29:50:33 | dbDSN | -| Dsn.go:49:102:49:105 | name | Dsn.go:49:11:49:106 | []type{args} [array] | -| Dsn.go:49:102:49:105 | name | Dsn.go:49:11:49:106 | call to Sprintf | +| Dsn.go:47:10:47:30 | call to FormValue | Dsn.go:49:102:49:105 | name | provenance | | +| Dsn.go:49:11:49:106 | []type{args} [array] | Dsn.go:49:11:49:106 | call to Sprintf | provenance | | +| Dsn.go:49:11:49:106 | call to Sprintf | Dsn.go:50:29:50:33 | dbDSN | provenance | | +| Dsn.go:49:102:49:105 | name | Dsn.go:49:11:49:106 | []type{args} [array] | provenance | | +| Dsn.go:49:102:49:105 | name | Dsn.go:49:11:49:106 | call to Sprintf | provenance | | nodes | Dsn.go:47:10:47:30 | call to FormValue | semmle.label | call to FormValue | | Dsn.go:49:11:49:106 | []type{args} [array] | semmle.label | []type{args} [array] | diff --git a/go/ql/test/experimental/CWE-74/DsnInjectionLocal.expected b/go/ql/test/experimental/CWE-74/DsnInjectionLocal.expected index 09143c4cab9..ffe20d053f7 100644 --- a/go/ql/test/experimental/CWE-74/DsnInjectionLocal.expected +++ b/go/ql/test/experimental/CWE-74/DsnInjectionLocal.expected @@ -1,24 +1,24 @@ edges -| Dsn.go:26:11:26:17 | selection of Args | Dsn.go:28:102:28:109 | index expression | -| Dsn.go:28:11:28:110 | []type{args} [array] | Dsn.go:28:11:28:110 | call to Sprintf | -| Dsn.go:28:11:28:110 | call to Sprintf | Dsn.go:29:29:29:33 | dbDSN | -| Dsn.go:28:102:28:109 | index expression | Dsn.go:28:11:28:110 | []type{args} [array] | -| Dsn.go:28:102:28:109 | index expression | Dsn.go:28:11:28:110 | call to Sprintf | -| Dsn.go:62:2:62:4 | definition of cfg [pointer] | Dsn.go:63:9:63:11 | cfg [pointer] | -| Dsn.go:62:2:62:4 | definition of cfg [pointer] | Dsn.go:67:102:67:104 | cfg [pointer] | -| Dsn.go:63:9:63:11 | cfg [pointer] | Dsn.go:63:9:63:11 | implicit dereference | -| Dsn.go:63:9:63:11 | implicit dereference | Dsn.go:62:2:62:4 | definition of cfg [pointer] | -| Dsn.go:63:9:63:11 | implicit dereference | Dsn.go:63:9:63:11 | implicit dereference | -| Dsn.go:63:9:63:11 | implicit dereference | Dsn.go:67:102:67:108 | selection of dsn | -| Dsn.go:63:19:63:25 | selection of Args | Dsn.go:63:19:63:29 | slice expression | -| Dsn.go:63:19:63:29 | slice expression | Dsn.go:63:9:63:11 | implicit dereference | -| Dsn.go:67:11:67:109 | []type{args} [array] | Dsn.go:67:11:67:109 | call to Sprintf | -| Dsn.go:67:11:67:109 | call to Sprintf | Dsn.go:68:29:68:33 | dbDSN | -| Dsn.go:67:102:67:104 | cfg [pointer] | Dsn.go:67:102:67:104 | implicit dereference | -| Dsn.go:67:102:67:104 | implicit dereference | Dsn.go:63:9:63:11 | implicit dereference | -| Dsn.go:67:102:67:104 | implicit dereference | Dsn.go:67:102:67:108 | selection of dsn | -| Dsn.go:67:102:67:108 | selection of dsn | Dsn.go:67:11:67:109 | []type{args} [array] | -| Dsn.go:67:102:67:108 | selection of dsn | Dsn.go:67:11:67:109 | call to Sprintf | +| Dsn.go:26:11:26:17 | selection of Args | Dsn.go:28:102:28:109 | index expression | provenance | | +| Dsn.go:28:11:28:110 | []type{args} [array] | Dsn.go:28:11:28:110 | call to Sprintf | provenance | | +| Dsn.go:28:11:28:110 | call to Sprintf | Dsn.go:29:29:29:33 | dbDSN | provenance | | +| Dsn.go:28:102:28:109 | index expression | Dsn.go:28:11:28:110 | []type{args} [array] | provenance | | +| Dsn.go:28:102:28:109 | index expression | Dsn.go:28:11:28:110 | call to Sprintf | provenance | | +| Dsn.go:62:2:62:4 | definition of cfg [pointer] | Dsn.go:63:9:63:11 | cfg [pointer] | provenance | | +| Dsn.go:62:2:62:4 | definition of cfg [pointer] | Dsn.go:67:102:67:104 | cfg [pointer] | provenance | | +| Dsn.go:63:9:63:11 | cfg [pointer] | Dsn.go:63:9:63:11 | implicit dereference | provenance | | +| Dsn.go:63:9:63:11 | implicit dereference | Dsn.go:62:2:62:4 | definition of cfg [pointer] | provenance | | +| Dsn.go:63:9:63:11 | implicit dereference | Dsn.go:63:9:63:11 | implicit dereference | provenance | | +| Dsn.go:63:9:63:11 | implicit dereference | Dsn.go:67:102:67:108 | selection of dsn | provenance | | +| Dsn.go:63:19:63:25 | selection of Args | Dsn.go:63:19:63:29 | slice expression | provenance | | +| Dsn.go:63:19:63:29 | slice expression | Dsn.go:63:9:63:11 | implicit dereference | provenance | | +| Dsn.go:67:11:67:109 | []type{args} [array] | Dsn.go:67:11:67:109 | call to Sprintf | provenance | | +| Dsn.go:67:11:67:109 | call to Sprintf | Dsn.go:68:29:68:33 | dbDSN | provenance | | +| Dsn.go:67:102:67:104 | cfg [pointer] | Dsn.go:67:102:67:104 | implicit dereference | provenance | | +| Dsn.go:67:102:67:104 | implicit dereference | Dsn.go:63:9:63:11 | implicit dereference | provenance | | +| Dsn.go:67:102:67:104 | implicit dereference | Dsn.go:67:102:67:108 | selection of dsn | provenance | | +| Dsn.go:67:102:67:108 | selection of dsn | Dsn.go:67:11:67:109 | []type{args} [array] | provenance | | +| Dsn.go:67:102:67:108 | selection of dsn | Dsn.go:67:11:67:109 | call to Sprintf | provenance | | nodes | Dsn.go:26:11:26:17 | selection of Args | semmle.label | selection of Args | | Dsn.go:28:11:28:110 | []type{args} [array] | semmle.label | []type{args} [array] | diff --git a/go/ql/test/experimental/CWE-79/HTMLTemplateEscapingPassthrough.expected b/go/ql/test/experimental/CWE-79/HTMLTemplateEscapingPassthrough.expected index 2b543ccde1d..1d0f5facd03 100644 --- a/go/ql/test/experimental/CWE-79/HTMLTemplateEscapingPassthrough.expected +++ b/go/ql/test/experimental/CWE-79/HTMLTemplateEscapingPassthrough.expected @@ -1,28 +1,28 @@ edges -| HTMLTemplateEscapingPassthrough.go:29:12:29:41 | type conversion | HTMLTemplateEscapingPassthrough.go:30:39:30:39 | a | -| HTMLTemplateEscapingPassthrough.go:29:26:29:40 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:29:12:29:41 | type conversion | -| HTMLTemplateEscapingPassthrough.go:35:9:35:38 | type conversion | HTMLTemplateEscapingPassthrough.go:36:40:36:40 | a | -| HTMLTemplateEscapingPassthrough.go:35:23:35:37 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:35:9:35:38 | type conversion | -| HTMLTemplateEscapingPassthrough.go:40:9:40:34 | type conversion | HTMLTemplateEscapingPassthrough.go:41:40:41:40 | a | -| HTMLTemplateEscapingPassthrough.go:40:19:40:33 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:40:9:40:34 | type conversion | -| HTMLTemplateEscapingPassthrough.go:46:11:46:44 | type conversion | HTMLTemplateEscapingPassthrough.go:47:41:47:41 | c | -| HTMLTemplateEscapingPassthrough.go:46:29:46:43 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:46:11:46:44 | type conversion | -| HTMLTemplateEscapingPassthrough.go:50:11:50:38 | type conversion | HTMLTemplateEscapingPassthrough.go:51:44:51:44 | d | -| HTMLTemplateEscapingPassthrough.go:50:23:50:37 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:50:11:50:38 | type conversion | -| HTMLTemplateEscapingPassthrough.go:54:11:54:41 | type conversion | HTMLTemplateEscapingPassthrough.go:55:44:55:44 | e | -| HTMLTemplateEscapingPassthrough.go:54:26:54:40 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:54:11:54:41 | type conversion | -| HTMLTemplateEscapingPassthrough.go:58:11:58:39 | type conversion | HTMLTemplateEscapingPassthrough.go:59:38:59:38 | b | -| HTMLTemplateEscapingPassthrough.go:58:24:58:38 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:58:11:58:39 | type conversion | -| HTMLTemplateEscapingPassthrough.go:62:11:62:42 | type conversion | HTMLTemplateEscapingPassthrough.go:63:44:63:44 | f | -| HTMLTemplateEscapingPassthrough.go:62:27:62:41 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:62:11:62:42 | type conversion | -| HTMLTemplateEscapingPassthrough.go:66:11:66:39 | type conversion | HTMLTemplateEscapingPassthrough.go:67:38:67:38 | g | -| HTMLTemplateEscapingPassthrough.go:66:24:66:38 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:66:11:66:39 | type conversion | -| HTMLTemplateEscapingPassthrough.go:75:17:75:31 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:76:38:76:44 | escaped | -| HTMLTemplateEscapingPassthrough.go:81:10:81:24 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:84:38:84:40 | src | -| HTMLTemplateEscapingPassthrough.go:89:10:89:24 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:91:64:91:66 | src | -| HTMLTemplateEscapingPassthrough.go:91:16:91:77 | type conversion | HTMLTemplateEscapingPassthrough.go:92:38:92:46 | converted | -| HTMLTemplateEscapingPassthrough.go:91:38:91:67 | call to HTMLEscapeString | HTMLTemplateEscapingPassthrough.go:91:16:91:77 | type conversion | -| HTMLTemplateEscapingPassthrough.go:91:64:91:66 | src | HTMLTemplateEscapingPassthrough.go:91:38:91:67 | call to HTMLEscapeString | +| HTMLTemplateEscapingPassthrough.go:29:12:29:41 | type conversion | HTMLTemplateEscapingPassthrough.go:30:39:30:39 | a | provenance | | +| HTMLTemplateEscapingPassthrough.go:29:26:29:40 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:29:12:29:41 | type conversion | provenance | | +| HTMLTemplateEscapingPassthrough.go:35:9:35:38 | type conversion | HTMLTemplateEscapingPassthrough.go:36:40:36:40 | a | provenance | | +| HTMLTemplateEscapingPassthrough.go:35:23:35:37 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:35:9:35:38 | type conversion | provenance | | +| HTMLTemplateEscapingPassthrough.go:40:9:40:34 | type conversion | HTMLTemplateEscapingPassthrough.go:41:40:41:40 | a | provenance | | +| HTMLTemplateEscapingPassthrough.go:40:19:40:33 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:40:9:40:34 | type conversion | provenance | | +| HTMLTemplateEscapingPassthrough.go:46:11:46:44 | type conversion | HTMLTemplateEscapingPassthrough.go:47:41:47:41 | c | provenance | | +| HTMLTemplateEscapingPassthrough.go:46:29:46:43 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:46:11:46:44 | type conversion | provenance | | +| HTMLTemplateEscapingPassthrough.go:50:11:50:38 | type conversion | HTMLTemplateEscapingPassthrough.go:51:44:51:44 | d | provenance | | +| HTMLTemplateEscapingPassthrough.go:50:23:50:37 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:50:11:50:38 | type conversion | provenance | | +| HTMLTemplateEscapingPassthrough.go:54:11:54:41 | type conversion | HTMLTemplateEscapingPassthrough.go:55:44:55:44 | e | provenance | | +| HTMLTemplateEscapingPassthrough.go:54:26:54:40 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:54:11:54:41 | type conversion | provenance | | +| HTMLTemplateEscapingPassthrough.go:58:11:58:39 | type conversion | HTMLTemplateEscapingPassthrough.go:59:38:59:38 | b | provenance | | +| HTMLTemplateEscapingPassthrough.go:58:24:58:38 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:58:11:58:39 | type conversion | provenance | | +| HTMLTemplateEscapingPassthrough.go:62:11:62:42 | type conversion | HTMLTemplateEscapingPassthrough.go:63:44:63:44 | f | provenance | | +| HTMLTemplateEscapingPassthrough.go:62:27:62:41 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:62:11:62:42 | type conversion | provenance | | +| HTMLTemplateEscapingPassthrough.go:66:11:66:39 | type conversion | HTMLTemplateEscapingPassthrough.go:67:38:67:38 | g | provenance | | +| HTMLTemplateEscapingPassthrough.go:66:24:66:38 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:66:11:66:39 | type conversion | provenance | | +| HTMLTemplateEscapingPassthrough.go:75:17:75:31 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:76:38:76:44 | escaped | provenance | | +| HTMLTemplateEscapingPassthrough.go:81:10:81:24 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:84:38:84:40 | src | provenance | | +| HTMLTemplateEscapingPassthrough.go:89:10:89:24 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:91:64:91:66 | src | provenance | | +| HTMLTemplateEscapingPassthrough.go:91:16:91:77 | type conversion | HTMLTemplateEscapingPassthrough.go:92:38:92:46 | converted | provenance | | +| HTMLTemplateEscapingPassthrough.go:91:38:91:67 | call to HTMLEscapeString | HTMLTemplateEscapingPassthrough.go:91:16:91:77 | type conversion | provenance | | +| HTMLTemplateEscapingPassthrough.go:91:64:91:66 | src | HTMLTemplateEscapingPassthrough.go:91:38:91:67 | call to HTMLEscapeString | provenance | | nodes | HTMLTemplateEscapingPassthrough.go:29:12:29:41 | type conversion | semmle.label | type conversion | | HTMLTemplateEscapingPassthrough.go:29:26:29:40 | call to UserAgent | semmle.label | call to UserAgent | diff --git a/go/ql/test/experimental/CWE-918/SSRF.expected b/go/ql/test/experimental/CWE-918/SSRF.expected index e7b78beb153..0e5bdee9671 100644 --- a/go/ql/test/experimental/CWE-918/SSRF.expected +++ b/go/ql/test/experimental/CWE-918/SSRF.expected @@ -1,46 +1,46 @@ edges -| builtin.go:19:12:19:34 | call to FormValue | builtin.go:22:21:22:62 | ...+... | -| builtin.go:83:21:83:31 | call to Referer | builtin.go:88:27:88:40 | untrustedInput | -| builtin.go:97:21:97:31 | call to Referer | builtin.go:101:36:101:49 | untrustedInput | -| builtin.go:111:21:111:31 | call to Referer | builtin.go:114:15:114:28 | untrustedInput | -| builtin.go:129:21:129:31 | call to Referer | builtin.go:132:38:132:51 | untrustedInput | -| new-tests.go:26:26:26:30 | &... | new-tests.go:31:48:31:56 | selection of word | -| new-tests.go:26:26:26:30 | &... | new-tests.go:32:48:32:56 | selection of safe | -| new-tests.go:26:26:26:30 | &... | new-tests.go:35:49:35:57 | selection of word | -| new-tests.go:31:11:31:57 | []type{args} [array] | new-tests.go:31:11:31:57 | call to Sprintf | -| new-tests.go:31:48:31:56 | selection of word | new-tests.go:31:11:31:57 | []type{args} [array] | -| new-tests.go:31:48:31:56 | selection of word | new-tests.go:31:11:31:57 | call to Sprintf | -| new-tests.go:32:11:32:57 | []type{args} [array] | new-tests.go:32:11:32:57 | call to Sprintf | -| new-tests.go:32:48:32:56 | selection of safe | new-tests.go:32:11:32:57 | []type{args} [array] | -| new-tests.go:32:48:32:56 | selection of safe | new-tests.go:32:11:32:57 | call to Sprintf | -| new-tests.go:35:12:35:58 | []type{args} [array] | new-tests.go:35:12:35:58 | call to Sprintf | -| new-tests.go:35:49:35:57 | selection of word | new-tests.go:35:12:35:58 | []type{args} [array] | -| new-tests.go:35:49:35:57 | selection of word | new-tests.go:35:12:35:58 | call to Sprintf | -| new-tests.go:39:18:39:30 | call to Param | new-tests.go:47:11:47:46 | ...+... | -| new-tests.go:49:18:49:30 | call to Query | new-tests.go:50:11:50:46 | ...+... | -| new-tests.go:62:2:62:39 | ... := ...[0] | new-tests.go:63:17:63:23 | reqBody | -| new-tests.go:62:31:62:38 | selection of Body | new-tests.go:62:2:62:39 | ... := ...[0] | -| new-tests.go:63:17:63:23 | reqBody | new-tests.go:63:26:63:30 | &... | -| new-tests.go:63:26:63:30 | &... | new-tests.go:68:48:68:56 | selection of word | -| new-tests.go:63:26:63:30 | &... | new-tests.go:69:48:69:56 | selection of safe | -| new-tests.go:63:26:63:30 | &... | new-tests.go:74:49:74:57 | selection of word | -| new-tests.go:68:11:68:57 | []type{args} [array] | new-tests.go:68:11:68:57 | call to Sprintf | -| new-tests.go:68:48:68:56 | selection of word | new-tests.go:68:11:68:57 | []type{args} [array] | -| new-tests.go:68:48:68:56 | selection of word | new-tests.go:68:11:68:57 | call to Sprintf | -| new-tests.go:69:11:69:57 | []type{args} [array] | new-tests.go:69:11:69:57 | call to Sprintf | -| new-tests.go:69:48:69:56 | selection of safe | new-tests.go:69:11:69:57 | []type{args} [array] | -| new-tests.go:69:48:69:56 | selection of safe | new-tests.go:69:11:69:57 | call to Sprintf | -| new-tests.go:74:12:74:58 | []type{args} [array] | new-tests.go:74:12:74:58 | call to Sprintf | -| new-tests.go:74:49:74:57 | selection of word | new-tests.go:74:12:74:58 | []type{args} [array] | -| new-tests.go:74:49:74:57 | selection of word | new-tests.go:74:12:74:58 | call to Sprintf | -| new-tests.go:78:18:78:24 | selection of URL | new-tests.go:78:18:78:32 | call to Query | -| new-tests.go:78:18:78:32 | call to Query | new-tests.go:78:18:78:46 | call to Get | -| new-tests.go:78:18:78:46 | call to Get | new-tests.go:79:11:79:46 | ...+... | -| new-tests.go:81:18:81:67 | call to TrimPrefix | new-tests.go:82:11:82:46 | ...+... | -| new-tests.go:81:37:81:43 | selection of URL | new-tests.go:81:37:81:48 | selection of Path | -| new-tests.go:81:37:81:48 | selection of Path | new-tests.go:81:18:81:67 | call to TrimPrefix | -| new-tests.go:86:10:86:20 | call to Vars | new-tests.go:88:11:88:46 | ...+... | -| new-tests.go:95:18:95:45 | call to URLParam | new-tests.go:96:11:96:46 | ...+... | +| builtin.go:19:12:19:34 | call to FormValue | builtin.go:22:21:22:62 | ...+... | provenance | | +| builtin.go:83:21:83:31 | call to Referer | builtin.go:88:27:88:40 | untrustedInput | provenance | | +| builtin.go:97:21:97:31 | call to Referer | builtin.go:101:36:101:49 | untrustedInput | provenance | | +| builtin.go:111:21:111:31 | call to Referer | builtin.go:114:15:114:28 | untrustedInput | provenance | | +| builtin.go:129:21:129:31 | call to Referer | builtin.go:132:38:132:51 | untrustedInput | provenance | | +| new-tests.go:26:26:26:30 | &... | new-tests.go:31:48:31:56 | selection of word | provenance | | +| new-tests.go:26:26:26:30 | &... | new-tests.go:32:48:32:56 | selection of safe | provenance | | +| new-tests.go:26:26:26:30 | &... | new-tests.go:35:49:35:57 | selection of word | provenance | | +| new-tests.go:31:11:31:57 | []type{args} [array] | new-tests.go:31:11:31:57 | call to Sprintf | provenance | | +| new-tests.go:31:48:31:56 | selection of word | new-tests.go:31:11:31:57 | []type{args} [array] | provenance | | +| new-tests.go:31:48:31:56 | selection of word | new-tests.go:31:11:31:57 | call to Sprintf | provenance | | +| new-tests.go:32:11:32:57 | []type{args} [array] | new-tests.go:32:11:32:57 | call to Sprintf | provenance | | +| new-tests.go:32:48:32:56 | selection of safe | new-tests.go:32:11:32:57 | []type{args} [array] | provenance | | +| new-tests.go:32:48:32:56 | selection of safe | new-tests.go:32:11:32:57 | call to Sprintf | provenance | | +| new-tests.go:35:12:35:58 | []type{args} [array] | new-tests.go:35:12:35:58 | call to Sprintf | provenance | | +| new-tests.go:35:49:35:57 | selection of word | new-tests.go:35:12:35:58 | []type{args} [array] | provenance | | +| new-tests.go:35:49:35:57 | selection of word | new-tests.go:35:12:35:58 | call to Sprintf | provenance | | +| new-tests.go:39:18:39:30 | call to Param | new-tests.go:47:11:47:46 | ...+... | provenance | | +| new-tests.go:49:18:49:30 | call to Query | new-tests.go:50:11:50:46 | ...+... | provenance | | +| new-tests.go:62:2:62:39 | ... := ...[0] | new-tests.go:63:17:63:23 | reqBody | provenance | | +| new-tests.go:62:31:62:38 | selection of Body | new-tests.go:62:2:62:39 | ... := ...[0] | provenance | | +| new-tests.go:63:17:63:23 | reqBody | new-tests.go:63:26:63:30 | &... | provenance | | +| new-tests.go:63:26:63:30 | &... | new-tests.go:68:48:68:56 | selection of word | provenance | | +| new-tests.go:63:26:63:30 | &... | new-tests.go:69:48:69:56 | selection of safe | provenance | | +| new-tests.go:63:26:63:30 | &... | new-tests.go:74:49:74:57 | selection of word | provenance | | +| new-tests.go:68:11:68:57 | []type{args} [array] | new-tests.go:68:11:68:57 | call to Sprintf | provenance | | +| new-tests.go:68:48:68:56 | selection of word | new-tests.go:68:11:68:57 | []type{args} [array] | provenance | | +| new-tests.go:68:48:68:56 | selection of word | new-tests.go:68:11:68:57 | call to Sprintf | provenance | | +| new-tests.go:69:11:69:57 | []type{args} [array] | new-tests.go:69:11:69:57 | call to Sprintf | provenance | | +| new-tests.go:69:48:69:56 | selection of safe | new-tests.go:69:11:69:57 | []type{args} [array] | provenance | | +| new-tests.go:69:48:69:56 | selection of safe | new-tests.go:69:11:69:57 | call to Sprintf | provenance | | +| new-tests.go:74:12:74:58 | []type{args} [array] | new-tests.go:74:12:74:58 | call to Sprintf | provenance | | +| new-tests.go:74:49:74:57 | selection of word | new-tests.go:74:12:74:58 | []type{args} [array] | provenance | | +| new-tests.go:74:49:74:57 | selection of word | new-tests.go:74:12:74:58 | call to Sprintf | provenance | | +| new-tests.go:78:18:78:24 | selection of URL | new-tests.go:78:18:78:32 | call to Query | provenance | | +| new-tests.go:78:18:78:32 | call to Query | new-tests.go:78:18:78:46 | call to Get | provenance | | +| new-tests.go:78:18:78:46 | call to Get | new-tests.go:79:11:79:46 | ...+... | provenance | | +| new-tests.go:81:18:81:67 | call to TrimPrefix | new-tests.go:82:11:82:46 | ...+... | provenance | | +| new-tests.go:81:37:81:43 | selection of URL | new-tests.go:81:37:81:48 | selection of Path | provenance | | +| new-tests.go:81:37:81:48 | selection of Path | new-tests.go:81:18:81:67 | call to TrimPrefix | provenance | | +| new-tests.go:86:10:86:20 | call to Vars | new-tests.go:88:11:88:46 | ...+... | provenance | | +| new-tests.go:95:18:95:45 | call to URLParam | new-tests.go:96:11:96:46 | ...+... | provenance | | nodes | builtin.go:19:12:19:34 | call to FormValue | semmle.label | call to FormValue | | builtin.go:22:21:22:62 | ...+... | semmle.label | ...+... | diff --git a/go/ql/test/experimental/Unsafe/WrongUsageOfUnsafe.expected b/go/ql/test/experimental/Unsafe/WrongUsageOfUnsafe.expected index 612c6ef1e51..3c7e02eea26 100644 --- a/go/ql/test/experimental/Unsafe/WrongUsageOfUnsafe.expected +++ b/go/ql/test/experimental/Unsafe/WrongUsageOfUnsafe.expected @@ -1,20 +1,20 @@ edges -| WrongUsageOfUnsafe.go:17:24:17:48 | type conversion | WrongUsageOfUnsafe.go:17:13:17:49 | type conversion | -| WrongUsageOfUnsafe.go:34:24:34:51 | type conversion | WrongUsageOfUnsafe.go:34:13:34:52 | type conversion | -| WrongUsageOfUnsafe.go:55:24:55:51 | type conversion | WrongUsageOfUnsafe.go:55:13:55:52 | type conversion | -| WrongUsageOfUnsafe.go:77:27:77:54 | type conversion | WrongUsageOfUnsafe.go:77:16:77:55 | type conversion | -| WrongUsageOfUnsafe.go:93:20:93:44 | type conversion | WrongUsageOfUnsafe.go:93:13:93:45 | type conversion | -| WrongUsageOfUnsafe.go:111:31:111:58 | type conversion | WrongUsageOfUnsafe.go:111:16:111:59 | type conversion | -| WrongUsageOfUnsafe.go:129:31:129:55 | type conversion | WrongUsageOfUnsafe.go:129:16:129:56 | type conversion | -| WrongUsageOfUnsafe.go:149:31:149:55 | type conversion | WrongUsageOfUnsafe.go:149:16:149:56 | type conversion | -| WrongUsageOfUnsafe.go:166:33:166:57 | type conversion | WrongUsageOfUnsafe.go:166:16:166:58 | type conversion | -| WrongUsageOfUnsafe.go:189:31:189:55 | type conversion | WrongUsageOfUnsafe.go:189:16:189:56 | type conversion | -| WrongUsageOfUnsafe.go:211:31:211:60 | type conversion | WrongUsageOfUnsafe.go:211:16:211:61 | type conversion | -| WrongUsageOfUnsafe.go:227:31:227:55 | type conversion | WrongUsageOfUnsafe.go:236:21:236:23 | definition of req | -| WrongUsageOfUnsafe.go:236:21:236:23 | definition of req | WrongUsageOfUnsafe.go:243:9:243:27 | type conversion | -| WrongUsageOfUnsafe.go:256:28:256:52 | type conversion | WrongUsageOfUnsafe.go:256:16:256:53 | type conversion | -| WrongUsageOfUnsafe.go:274:25:274:49 | type conversion | WrongUsageOfUnsafe.go:274:16:274:50 | type conversion | -| WrongUsageOfUnsafe.go:292:23:292:47 | type conversion | WrongUsageOfUnsafe.go:292:16:292:48 | type conversion | +| WrongUsageOfUnsafe.go:17:24:17:48 | type conversion | WrongUsageOfUnsafe.go:17:13:17:49 | type conversion | provenance | | +| WrongUsageOfUnsafe.go:34:24:34:51 | type conversion | WrongUsageOfUnsafe.go:34:13:34:52 | type conversion | provenance | | +| WrongUsageOfUnsafe.go:55:24:55:51 | type conversion | WrongUsageOfUnsafe.go:55:13:55:52 | type conversion | provenance | | +| WrongUsageOfUnsafe.go:77:27:77:54 | type conversion | WrongUsageOfUnsafe.go:77:16:77:55 | type conversion | provenance | | +| WrongUsageOfUnsafe.go:93:20:93:44 | type conversion | WrongUsageOfUnsafe.go:93:13:93:45 | type conversion | provenance | | +| WrongUsageOfUnsafe.go:111:31:111:58 | type conversion | WrongUsageOfUnsafe.go:111:16:111:59 | type conversion | provenance | | +| WrongUsageOfUnsafe.go:129:31:129:55 | type conversion | WrongUsageOfUnsafe.go:129:16:129:56 | type conversion | provenance | | +| WrongUsageOfUnsafe.go:149:31:149:55 | type conversion | WrongUsageOfUnsafe.go:149:16:149:56 | type conversion | provenance | | +| WrongUsageOfUnsafe.go:166:33:166:57 | type conversion | WrongUsageOfUnsafe.go:166:16:166:58 | type conversion | provenance | | +| WrongUsageOfUnsafe.go:189:31:189:55 | type conversion | WrongUsageOfUnsafe.go:189:16:189:56 | type conversion | provenance | | +| WrongUsageOfUnsafe.go:211:31:211:60 | type conversion | WrongUsageOfUnsafe.go:211:16:211:61 | type conversion | provenance | | +| WrongUsageOfUnsafe.go:227:31:227:55 | type conversion | WrongUsageOfUnsafe.go:236:21:236:23 | definition of req | provenance | | +| WrongUsageOfUnsafe.go:236:21:236:23 | definition of req | WrongUsageOfUnsafe.go:243:9:243:27 | type conversion | provenance | | +| WrongUsageOfUnsafe.go:256:28:256:52 | type conversion | WrongUsageOfUnsafe.go:256:16:256:53 | type conversion | provenance | | +| WrongUsageOfUnsafe.go:274:25:274:49 | type conversion | WrongUsageOfUnsafe.go:274:16:274:50 | type conversion | provenance | | +| WrongUsageOfUnsafe.go:292:23:292:47 | type conversion | WrongUsageOfUnsafe.go:292:16:292:48 | type conversion | provenance | | nodes | WrongUsageOfUnsafe.go:17:13:17:49 | type conversion | semmle.label | type conversion | | WrongUsageOfUnsafe.go:17:24:17:48 | type conversion | semmle.label | type conversion | diff --git a/go/ql/test/library-tests/semmle/go/dataflow/ChannelField/test.expected b/go/ql/test/library-tests/semmle/go/dataflow/ChannelField/test.expected index 523d27be250..315e8f2ceab 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/ChannelField/test.expected +++ b/go/ql/test/library-tests/semmle/go/dataflow/ChannelField/test.expected @@ -1,13 +1,13 @@ edges -| test.go:9:9:9:11 | selection of c [collection] | test.go:9:7:9:11 | <-... | -| test.go:13:16:13:16 | definition of s [pointer, c, collection] | test.go:16:2:16:2 | s [pointer, c, collection] | -| test.go:15:10:15:17 | call to source | test.go:16:9:16:12 | data | -| test.go:16:2:16:2 | implicit dereference [c, collection] | test.go:13:16:13:16 | definition of s [pointer, c, collection] | -| test.go:16:2:16:2 | implicit dereference [c, collection] | test.go:16:2:16:4 | selection of c [collection] | -| test.go:16:2:16:2 | s [pointer, c, collection] | test.go:16:2:16:2 | implicit dereference [c, collection] | -| test.go:16:2:16:4 | selection of c [collection] | test.go:9:9:9:11 | selection of c [collection] | -| test.go:16:2:16:4 | selection of c [collection] | test.go:16:2:16:2 | implicit dereference [c, collection] | -| test.go:16:9:16:12 | data | test.go:16:2:16:4 | selection of c [collection] | +| test.go:9:9:9:11 | selection of c [collection] | test.go:9:7:9:11 | <-... | provenance | | +| test.go:13:16:13:16 | definition of s [pointer, c, collection] | test.go:16:2:16:2 | s [pointer, c, collection] | provenance | | +| test.go:15:10:15:17 | call to source | test.go:16:9:16:12 | data | provenance | | +| test.go:16:2:16:2 | implicit dereference [c, collection] | test.go:13:16:13:16 | definition of s [pointer, c, collection] | provenance | | +| test.go:16:2:16:2 | implicit dereference [c, collection] | test.go:16:2:16:4 | selection of c [collection] | provenance | | +| test.go:16:2:16:2 | s [pointer, c, collection] | test.go:16:2:16:2 | implicit dereference [c, collection] | provenance | | +| test.go:16:2:16:4 | selection of c [collection] | test.go:9:9:9:11 | selection of c [collection] | provenance | | +| test.go:16:2:16:4 | selection of c [collection] | test.go:16:2:16:2 | implicit dereference [c, collection] | provenance | | +| test.go:16:9:16:12 | data | test.go:16:2:16:4 | selection of c [collection] | provenance | | nodes | test.go:9:7:9:11 | <-... | semmle.label | <-... | | test.go:9:9:9:11 | selection of c [collection] | semmle.label | selection of c [collection] | diff --git a/go/ql/test/library-tests/semmle/go/dataflow/DefaultTaintSanitizer/DefaultSanitizer.expected b/go/ql/test/library-tests/semmle/go/dataflow/DefaultTaintSanitizer/DefaultSanitizer.expected index a7ab7fc63a4..c126e70195b 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/DefaultTaintSanitizer/DefaultSanitizer.expected +++ b/go/ql/test/library-tests/semmle/go/dataflow/DefaultTaintSanitizer/DefaultSanitizer.expected @@ -1,6 +1,6 @@ edges -| Builtin.go:6:2:6:2 | definition of b | Builtin.go:8:9:8:17 | type conversion | -| Builtin.go:7:2:7:15 | selection of Body | Builtin.go:6:2:6:2 | definition of b | +| Builtin.go:6:2:6:2 | definition of b | Builtin.go:8:9:8:17 | type conversion | provenance | | +| Builtin.go:7:2:7:15 | selection of Body | Builtin.go:6:2:6:2 | definition of b | provenance | | nodes | Builtin.go:6:2:6:2 | definition of b | semmle.label | definition of b | | Builtin.go:7:2:7:15 | selection of Body | semmle.label | selection of Body | diff --git a/go/ql/test/library-tests/semmle/go/dataflow/HiddenNodes/test.expected b/go/ql/test/library-tests/semmle/go/dataflow/HiddenNodes/test.expected index 2c7583cacb4..1bd17817463 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/HiddenNodes/test.expected +++ b/go/ql/test/library-tests/semmle/go/dataflow/HiddenNodes/test.expected @@ -1,7 +1,7 @@ edges -| test.go:14:8:14:15 | call to source | test.go:15:34:15:35 | fi | -| test.go:15:2:15:44 | ... := ...[0] | test.go:16:7:16:12 | header | -| test.go:15:34:15:35 | fi | test.go:15:2:15:44 | ... := ...[0] | +| test.go:14:8:14:15 | call to source | test.go:15:34:15:35 | fi | provenance | | +| test.go:15:2:15:44 | ... := ...[0] | test.go:16:7:16:12 | header | provenance | | +| test.go:15:34:15:35 | fi | test.go:15:2:15:44 | ... := ...[0] | provenance | | nodes | test.go:14:8:14:15 | call to source | semmle.label | call to source | | test.go:15:2:15:44 | ... := ...[0] | semmle.label | ... := ...[0] | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Beego/ReflectedXss.expected b/go/ql/test/library-tests/semmle/go/frameworks/Beego/ReflectedXss.expected index 3c14fdfadeb..5825fcdfcd6 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Beego/ReflectedXss.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Beego/ReflectedXss.expected @@ -1,105 +1,105 @@ edges -| test.go:33:6:33:10 | definition of bound | test.go:35:13:35:30 | type conversion | -| test.go:33:6:33:10 | definition of bound | test.go:36:13:36:27 | type conversion | -| test.go:33:6:33:10 | definition of bound | test.go:37:13:37:29 | type conversion | -| test.go:42:20:42:42 | call to Cookie | test.go:42:13:42:43 | type conversion | -| test.go:47:20:47:31 | call to Data | test.go:47:13:47:52 | type conversion | -| test.go:52:20:52:43 | call to GetData | test.go:52:13:52:53 | type conversion | -| test.go:57:20:57:42 | call to Header | test.go:57:13:57:43 | type conversion | -| test.go:62:20:62:41 | call to Param | test.go:62:13:62:42 | type conversion | -| test.go:67:20:67:33 | call to Params | test.go:67:13:67:45 | type conversion | -| test.go:72:20:72:41 | call to Query | test.go:72:13:72:42 | type conversion | -| test.go:77:20:77:32 | call to Refer | test.go:77:13:77:33 | type conversion | -| test.go:82:20:82:34 | call to Referer | test.go:82:13:82:35 | type conversion | -| test.go:87:20:87:30 | call to URI | test.go:87:13:87:31 | type conversion | -| test.go:92:20:92:30 | call to URL | test.go:92:13:92:31 | type conversion | -| test.go:97:20:97:36 | call to UserAgent | test.go:97:13:97:37 | type conversion | -| test.go:102:14:102:25 | call to Data | test.go:102:14:102:45 | type assertion | -| test.go:114:14:114:25 | call to Data | test.go:114:14:114:45 | type assertion | -| test.go:126:14:126:25 | call to Data | test.go:126:14:126:45 | type assertion | -| test.go:143:23:143:42 | call to Data | test.go:143:23:143:62 | type assertion | -| test.go:199:15:199:26 | call to Data | test.go:200:36:200:53 | type assertion | -| test.go:199:15:199:26 | call to Data | test.go:201:39:201:56 | type assertion | -| test.go:199:15:199:26 | call to Data | test.go:202:28:202:56 | type assertion | -| test.go:199:15:199:26 | call to Data | test.go:204:36:204:53 | type assertion | -| test.go:199:15:199:26 | call to Data | test.go:205:34:205:51 | type assertion | -| test.go:200:21:200:54 | call to HTML2str | test.go:200:14:200:55 | type conversion | -| test.go:200:36:200:53 | type assertion | test.go:200:21:200:54 | call to HTML2str | -| test.go:201:21:201:57 | call to Htmlunquote | test.go:201:14:201:58 | type conversion | -| test.go:201:39:201:56 | type assertion | test.go:201:21:201:57 | call to Htmlunquote | -| test.go:202:2:202:68 | ... := ...[0] | test.go:203:14:203:28 | type assertion | -| test.go:202:28:202:56 | type assertion | test.go:202:2:202:68 | ... := ...[0] | -| test.go:204:21:204:54 | call to Str2html | test.go:204:14:204:55 | type conversion | -| test.go:204:36:204:53 | type assertion | test.go:204:21:204:54 | call to Str2html | -| test.go:205:21:205:58 | call to Substr | test.go:205:14:205:59 | type conversion | -| test.go:205:34:205:51 | type assertion | test.go:205:21:205:58 | call to Substr | -| test.go:207:6:207:6 | definition of s | test.go:209:14:209:28 | type conversion | -| test.go:208:18:208:33 | selection of Form | test.go:207:6:207:6 | definition of s | -| test.go:223:2:223:34 | ... := ...[0] | test.go:225:31:225:31 | f | -| test.go:223:2:223:34 | ... := ...[1] | test.go:224:14:224:32 | type conversion | -| test.go:225:2:225:32 | ... := ...[0] | test.go:226:14:226:20 | content | -| test.go:225:31:225:31 | f | test.go:225:2:225:32 | ... := ...[0] | -| test.go:228:2:228:40 | ... := ...[0] | test.go:229:14:229:38 | type conversion | -| test.go:231:7:231:28 | call to GetString | test.go:232:14:232:22 | type conversion | -| test.go:234:8:234:35 | call to GetStrings | test.go:235:14:235:26 | type conversion | -| test.go:237:9:237:17 | call to Input | test.go:238:14:238:27 | type conversion | -| test.go:240:6:240:8 | definition of str | test.go:242:14:242:30 | type conversion | -| test.go:246:15:246:36 | call to GetString | test.go:249:21:249:29 | untrusted | -| test.go:259:23:259:44 | call to GetCookie | test.go:259:16:259:45 | type conversion | -| test.go:270:62:270:83 | call to GetCookie | test.go:270:55:270:84 | type conversion | -| test.go:275:2:275:40 | ... := ...[0] | test.go:278:21:278:28 | index expression | -| test.go:275:2:275:40 | ... := ...[0] | test.go:283:44:283:60 | selection of Filename | -| test.go:275:2:275:40 | ... := ...[0] | test.go:284:38:284:49 | genericFiles | -| test.go:275:2:275:40 | ... := ...[0] | test.go:285:37:285:48 | genericFiles | -| test.go:275:2:275:40 | ... := ...[0] | test.go:291:4:291:15 | genericFiles | -| test.go:275:2:275:40 | ... := ...[0] | test.go:293:42:293:53 | genericFiles | -| test.go:275:2:275:40 | ... := ...[0] | test.go:294:53:294:64 | genericFiles | -| test.go:275:2:275:40 | ... := ...[0] | test.go:295:38:295:49 | genericFiles | -| test.go:275:2:275:40 | ... := ...[0] | test.go:296:49:296:60 | genericFiles | -| test.go:275:2:275:40 | ... := ...[0] | test.go:297:51:297:65 | index expression | -| test.go:275:2:275:40 | ... := ...[0] | test.go:298:36:298:47 | genericFiles | -| test.go:275:2:275:40 | ... := ...[0] | test.go:299:37:299:48 | genericFiles | -| test.go:275:2:275:40 | ... := ...[0] | test.go:301:39:301:50 | genericFiles | -| test.go:275:2:275:40 | ... := ...[0] | test.go:302:40:302:51 | genericFiles | -| test.go:275:2:275:40 | ... := ...[0] | test.go:303:39:303:50 | genericFiles | -| test.go:276:2:276:13 | definition of genericFiles [array] | test.go:297:51:297:62 | genericFiles [array] | -| test.go:278:21:278:28 | index expression | test.go:276:2:276:13 | definition of genericFiles [array] | -| test.go:283:44:283:60 | selection of Filename | test.go:283:21:283:61 | call to GetDisplayString | -| test.go:284:21:284:53 | call to SliceChunk | test.go:284:21:284:92 | selection of Filename | -| test.go:284:38:284:49 | genericFiles | test.go:284:21:284:53 | call to SliceChunk | -| test.go:285:21:285:60 | call to SliceDiff | test.go:285:21:285:96 | selection of Filename | -| test.go:285:37:285:48 | genericFiles | test.go:285:21:285:60 | call to SliceDiff | -| test.go:290:3:292:44 | call to SliceFilter | test.go:290:3:292:80 | selection of Filename | -| test.go:291:4:291:15 | genericFiles | test.go:290:3:292:44 | call to SliceFilter | -| test.go:293:21:293:65 | call to SliceIntersect | test.go:293:21:293:101 | selection of Filename | -| test.go:293:42:293:53 | genericFiles | test.go:293:21:293:65 | call to SliceIntersect | -| test.go:294:21:294:65 | call to SliceIntersect | test.go:294:21:294:101 | selection of Filename | -| test.go:294:53:294:64 | genericFiles | test.go:294:21:294:65 | call to SliceIntersect | -| test.go:295:21:295:61 | call to SliceMerge | test.go:295:21:295:97 | selection of Filename | -| test.go:295:38:295:49 | genericFiles | test.go:295:21:295:61 | call to SliceMerge | -| test.go:296:21:296:61 | call to SliceMerge | test.go:296:21:296:97 | selection of Filename | -| test.go:296:49:296:60 | genericFiles | test.go:296:21:296:61 | call to SliceMerge | -| test.go:297:21:297:66 | call to SlicePad | test.go:297:21:297:102 | selection of Filename | -| test.go:297:51:297:62 | genericFiles [array] | test.go:297:51:297:65 | index expression | -| test.go:297:51:297:65 | index expression | test.go:297:21:297:66 | call to SlicePad | -| test.go:298:21:298:66 | call to SlicePad | test.go:298:21:298:102 | selection of Filename | -| test.go:298:36:298:47 | genericFiles | test.go:298:21:298:66 | call to SlicePad | -| test.go:299:21:299:49 | call to SliceRand | test.go:299:21:299:82 | selection of Filename | -| test.go:299:37:299:48 | genericFiles | test.go:299:21:299:49 | call to SliceRand | -| test.go:301:21:301:97 | call to SliceReduce | test.go:301:21:301:133 | selection of Filename | -| test.go:301:39:301:50 | genericFiles | test.go:301:21:301:97 | call to SliceReduce | -| test.go:302:21:302:52 | call to SliceShuffle | test.go:302:21:302:88 | selection of Filename | -| test.go:302:40:302:51 | genericFiles | test.go:302:21:302:52 | call to SliceShuffle | -| test.go:303:21:303:51 | call to SliceUnique | test.go:303:21:303:87 | selection of Filename | -| test.go:303:39:303:50 | genericFiles | test.go:303:21:303:51 | call to SliceUnique | -| test.go:308:2:308:5 | definition of bMap | test.go:311:21:311:24 | bMap | -| test.go:308:2:308:5 | definition of bMap | test.go:312:21:312:24 | bMap | -| test.go:309:15:309:36 | call to GetString | test.go:310:22:310:30 | untrusted | -| test.go:310:22:310:30 | untrusted | test.go:308:2:308:5 | definition of bMap | -| test.go:311:21:311:24 | bMap | test.go:311:21:311:39 | call to Get | -| test.go:311:21:311:39 | call to Get | test.go:311:21:311:48 | type assertion | -| test.go:312:21:312:24 | bMap | test.go:312:21:312:32 | call to Items | -| test.go:312:21:312:32 | call to Items | test.go:312:21:312:52 | type assertion | +| test.go:33:6:33:10 | definition of bound | test.go:35:13:35:30 | type conversion | provenance | | +| test.go:33:6:33:10 | definition of bound | test.go:36:13:36:27 | type conversion | provenance | | +| test.go:33:6:33:10 | definition of bound | test.go:37:13:37:29 | type conversion | provenance | | +| test.go:42:20:42:42 | call to Cookie | test.go:42:13:42:43 | type conversion | provenance | | +| test.go:47:20:47:31 | call to Data | test.go:47:13:47:52 | type conversion | provenance | | +| test.go:52:20:52:43 | call to GetData | test.go:52:13:52:53 | type conversion | provenance | | +| test.go:57:20:57:42 | call to Header | test.go:57:13:57:43 | type conversion | provenance | | +| test.go:62:20:62:41 | call to Param | test.go:62:13:62:42 | type conversion | provenance | | +| test.go:67:20:67:33 | call to Params | test.go:67:13:67:45 | type conversion | provenance | | +| test.go:72:20:72:41 | call to Query | test.go:72:13:72:42 | type conversion | provenance | | +| test.go:77:20:77:32 | call to Refer | test.go:77:13:77:33 | type conversion | provenance | | +| test.go:82:20:82:34 | call to Referer | test.go:82:13:82:35 | type conversion | provenance | | +| test.go:87:20:87:30 | call to URI | test.go:87:13:87:31 | type conversion | provenance | | +| test.go:92:20:92:30 | call to URL | test.go:92:13:92:31 | type conversion | provenance | | +| test.go:97:20:97:36 | call to UserAgent | test.go:97:13:97:37 | type conversion | provenance | | +| test.go:102:14:102:25 | call to Data | test.go:102:14:102:45 | type assertion | provenance | | +| test.go:114:14:114:25 | call to Data | test.go:114:14:114:45 | type assertion | provenance | | +| test.go:126:14:126:25 | call to Data | test.go:126:14:126:45 | type assertion | provenance | | +| test.go:143:23:143:42 | call to Data | test.go:143:23:143:62 | type assertion | provenance | | +| test.go:199:15:199:26 | call to Data | test.go:200:36:200:53 | type assertion | provenance | | +| test.go:199:15:199:26 | call to Data | test.go:201:39:201:56 | type assertion | provenance | | +| test.go:199:15:199:26 | call to Data | test.go:202:28:202:56 | type assertion | provenance | | +| test.go:199:15:199:26 | call to Data | test.go:204:36:204:53 | type assertion | provenance | | +| test.go:199:15:199:26 | call to Data | test.go:205:34:205:51 | type assertion | provenance | | +| test.go:200:21:200:54 | call to HTML2str | test.go:200:14:200:55 | type conversion | provenance | | +| test.go:200:36:200:53 | type assertion | test.go:200:21:200:54 | call to HTML2str | provenance | | +| test.go:201:21:201:57 | call to Htmlunquote | test.go:201:14:201:58 | type conversion | provenance | | +| test.go:201:39:201:56 | type assertion | test.go:201:21:201:57 | call to Htmlunquote | provenance | | +| test.go:202:2:202:68 | ... := ...[0] | test.go:203:14:203:28 | type assertion | provenance | | +| test.go:202:28:202:56 | type assertion | test.go:202:2:202:68 | ... := ...[0] | provenance | | +| test.go:204:21:204:54 | call to Str2html | test.go:204:14:204:55 | type conversion | provenance | | +| test.go:204:36:204:53 | type assertion | test.go:204:21:204:54 | call to Str2html | provenance | | +| test.go:205:21:205:58 | call to Substr | test.go:205:14:205:59 | type conversion | provenance | | +| test.go:205:34:205:51 | type assertion | test.go:205:21:205:58 | call to Substr | provenance | | +| test.go:207:6:207:6 | definition of s | test.go:209:14:209:28 | type conversion | provenance | | +| test.go:208:18:208:33 | selection of Form | test.go:207:6:207:6 | definition of s | provenance | | +| test.go:223:2:223:34 | ... := ...[0] | test.go:225:31:225:31 | f | provenance | | +| test.go:223:2:223:34 | ... := ...[1] | test.go:224:14:224:32 | type conversion | provenance | | +| test.go:225:2:225:32 | ... := ...[0] | test.go:226:14:226:20 | content | provenance | | +| test.go:225:31:225:31 | f | test.go:225:2:225:32 | ... := ...[0] | provenance | | +| test.go:228:2:228:40 | ... := ...[0] | test.go:229:14:229:38 | type conversion | provenance | | +| test.go:231:7:231:28 | call to GetString | test.go:232:14:232:22 | type conversion | provenance | | +| test.go:234:8:234:35 | call to GetStrings | test.go:235:14:235:26 | type conversion | provenance | | +| test.go:237:9:237:17 | call to Input | test.go:238:14:238:27 | type conversion | provenance | | +| test.go:240:6:240:8 | definition of str | test.go:242:14:242:30 | type conversion | provenance | | +| test.go:246:15:246:36 | call to GetString | test.go:249:21:249:29 | untrusted | provenance | | +| test.go:259:23:259:44 | call to GetCookie | test.go:259:16:259:45 | type conversion | provenance | | +| test.go:270:62:270:83 | call to GetCookie | test.go:270:55:270:84 | type conversion | provenance | | +| test.go:275:2:275:40 | ... := ...[0] | test.go:278:21:278:28 | index expression | provenance | | +| test.go:275:2:275:40 | ... := ...[0] | test.go:283:44:283:60 | selection of Filename | provenance | | +| test.go:275:2:275:40 | ... := ...[0] | test.go:284:38:284:49 | genericFiles | provenance | | +| test.go:275:2:275:40 | ... := ...[0] | test.go:285:37:285:48 | genericFiles | provenance | | +| test.go:275:2:275:40 | ... := ...[0] | test.go:291:4:291:15 | genericFiles | provenance | | +| test.go:275:2:275:40 | ... := ...[0] | test.go:293:42:293:53 | genericFiles | provenance | | +| test.go:275:2:275:40 | ... := ...[0] | test.go:294:53:294:64 | genericFiles | provenance | | +| test.go:275:2:275:40 | ... := ...[0] | test.go:295:38:295:49 | genericFiles | provenance | | +| test.go:275:2:275:40 | ... := ...[0] | test.go:296:49:296:60 | genericFiles | provenance | | +| test.go:275:2:275:40 | ... := ...[0] | test.go:297:51:297:65 | index expression | provenance | | +| test.go:275:2:275:40 | ... := ...[0] | test.go:298:36:298:47 | genericFiles | provenance | | +| test.go:275:2:275:40 | ... := ...[0] | test.go:299:37:299:48 | genericFiles | provenance | | +| test.go:275:2:275:40 | ... := ...[0] | test.go:301:39:301:50 | genericFiles | provenance | | +| test.go:275:2:275:40 | ... := ...[0] | test.go:302:40:302:51 | genericFiles | provenance | | +| test.go:275:2:275:40 | ... := ...[0] | test.go:303:39:303:50 | genericFiles | provenance | | +| test.go:276:2:276:13 | definition of genericFiles [array] | test.go:297:51:297:62 | genericFiles [array] | provenance | | +| test.go:278:21:278:28 | index expression | test.go:276:2:276:13 | definition of genericFiles [array] | provenance | | +| test.go:283:44:283:60 | selection of Filename | test.go:283:21:283:61 | call to GetDisplayString | provenance | | +| test.go:284:21:284:53 | call to SliceChunk | test.go:284:21:284:92 | selection of Filename | provenance | | +| test.go:284:38:284:49 | genericFiles | test.go:284:21:284:53 | call to SliceChunk | provenance | | +| test.go:285:21:285:60 | call to SliceDiff | test.go:285:21:285:96 | selection of Filename | provenance | | +| test.go:285:37:285:48 | genericFiles | test.go:285:21:285:60 | call to SliceDiff | provenance | | +| test.go:290:3:292:44 | call to SliceFilter | test.go:290:3:292:80 | selection of Filename | provenance | | +| test.go:291:4:291:15 | genericFiles | test.go:290:3:292:44 | call to SliceFilter | provenance | | +| test.go:293:21:293:65 | call to SliceIntersect | test.go:293:21:293:101 | selection of Filename | provenance | | +| test.go:293:42:293:53 | genericFiles | test.go:293:21:293:65 | call to SliceIntersect | provenance | | +| test.go:294:21:294:65 | call to SliceIntersect | test.go:294:21:294:101 | selection of Filename | provenance | | +| test.go:294:53:294:64 | genericFiles | test.go:294:21:294:65 | call to SliceIntersect | provenance | | +| test.go:295:21:295:61 | call to SliceMerge | test.go:295:21:295:97 | selection of Filename | provenance | | +| test.go:295:38:295:49 | genericFiles | test.go:295:21:295:61 | call to SliceMerge | provenance | | +| test.go:296:21:296:61 | call to SliceMerge | test.go:296:21:296:97 | selection of Filename | provenance | | +| test.go:296:49:296:60 | genericFiles | test.go:296:21:296:61 | call to SliceMerge | provenance | | +| test.go:297:21:297:66 | call to SlicePad | test.go:297:21:297:102 | selection of Filename | provenance | | +| test.go:297:51:297:62 | genericFiles [array] | test.go:297:51:297:65 | index expression | provenance | | +| test.go:297:51:297:65 | index expression | test.go:297:21:297:66 | call to SlicePad | provenance | | +| test.go:298:21:298:66 | call to SlicePad | test.go:298:21:298:102 | selection of Filename | provenance | | +| test.go:298:36:298:47 | genericFiles | test.go:298:21:298:66 | call to SlicePad | provenance | | +| test.go:299:21:299:49 | call to SliceRand | test.go:299:21:299:82 | selection of Filename | provenance | | +| test.go:299:37:299:48 | genericFiles | test.go:299:21:299:49 | call to SliceRand | provenance | | +| test.go:301:21:301:97 | call to SliceReduce | test.go:301:21:301:133 | selection of Filename | provenance | | +| test.go:301:39:301:50 | genericFiles | test.go:301:21:301:97 | call to SliceReduce | provenance | | +| test.go:302:21:302:52 | call to SliceShuffle | test.go:302:21:302:88 | selection of Filename | provenance | | +| test.go:302:40:302:51 | genericFiles | test.go:302:21:302:52 | call to SliceShuffle | provenance | | +| test.go:303:21:303:51 | call to SliceUnique | test.go:303:21:303:87 | selection of Filename | provenance | | +| test.go:303:39:303:50 | genericFiles | test.go:303:21:303:51 | call to SliceUnique | provenance | | +| test.go:308:2:308:5 | definition of bMap | test.go:311:21:311:24 | bMap | provenance | | +| test.go:308:2:308:5 | definition of bMap | test.go:312:21:312:24 | bMap | provenance | | +| test.go:309:15:309:36 | call to GetString | test.go:310:22:310:30 | untrusted | provenance | | +| test.go:310:22:310:30 | untrusted | test.go:308:2:308:5 | definition of bMap | provenance | | +| test.go:311:21:311:24 | bMap | test.go:311:21:311:39 | call to Get | provenance | | +| test.go:311:21:311:39 | call to Get | test.go:311:21:311:48 | type assertion | provenance | | +| test.go:312:21:312:24 | bMap | test.go:312:21:312:32 | call to Items | provenance | | +| test.go:312:21:312:32 | call to Items | test.go:312:21:312:52 | type assertion | provenance | | nodes | test.go:33:6:33:10 | definition of bound | semmle.label | definition of bound | | test.go:35:13:35:30 | type conversion | semmle.label | type conversion | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Beego/TaintedPath.expected b/go/ql/test/library-tests/semmle/go/frameworks/Beego/TaintedPath.expected index 714f03bdcec..c0deba242e0 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Beego/TaintedPath.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Beego/TaintedPath.expected @@ -1,12 +1,12 @@ edges -| test.go:215:15:215:26 | call to Data | test.go:216:18:216:26 | untrusted | -| test.go:215:15:215:26 | call to Data | test.go:217:10:217:18 | untrusted | -| test.go:215:15:215:26 | call to Data | test.go:218:35:218:43 | untrusted | -| test.go:324:17:324:37 | selection of RequestBody | test.go:324:40:324:43 | &... | -| test.go:324:40:324:43 | &... | test.go:326:35:326:43 | untrusted | -| test.go:332:15:332:26 | call to Data | test.go:334:23:334:31 | untrusted | -| test.go:340:15:340:26 | call to Data | test.go:342:53:342:61 | untrusted | -| test.go:340:15:340:26 | call to Data | test.go:344:23:344:31 | untrusted | +| test.go:215:15:215:26 | call to Data | test.go:216:18:216:26 | untrusted | provenance | | +| test.go:215:15:215:26 | call to Data | test.go:217:10:217:18 | untrusted | provenance | | +| test.go:215:15:215:26 | call to Data | test.go:218:35:218:43 | untrusted | provenance | | +| test.go:324:17:324:37 | selection of RequestBody | test.go:324:40:324:43 | &... | provenance | | +| test.go:324:40:324:43 | &... | test.go:326:35:326:43 | untrusted | provenance | | +| test.go:332:15:332:26 | call to Data | test.go:334:23:334:31 | untrusted | provenance | | +| test.go:340:15:340:26 | call to Data | test.go:342:53:342:61 | untrusted | provenance | | +| test.go:340:15:340:26 | call to Data | test.go:344:23:344:31 | untrusted | provenance | | nodes | test.go:215:15:215:26 | call to Data | semmle.label | call to Data | | test.go:216:18:216:26 | untrusted | semmle.label | untrusted | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/BeegoOrm/SqlInjection.expected b/go/ql/test/library-tests/semmle/go/frameworks/BeegoOrm/SqlInjection.expected index f9668a6f723..ccaac4425ff 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/BeegoOrm/SqlInjection.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/BeegoOrm/SqlInjection.expected @@ -1,36 +1,36 @@ edges -| test.go:10:15:10:41 | call to UserAgent | test.go:12:11:12:19 | untrusted | -| test.go:10:15:10:41 | call to UserAgent | test.go:13:23:13:31 | untrusted | -| test.go:10:15:10:41 | call to UserAgent | test.go:14:14:14:22 | untrusted | -| test.go:10:15:10:41 | call to UserAgent | test.go:15:26:15:34 | untrusted | -| test.go:10:15:10:41 | call to UserAgent | test.go:16:12:16:20 | untrusted | -| test.go:10:15:10:41 | call to UserAgent | test.go:17:24:17:32 | untrusted | -| test.go:10:15:10:41 | call to UserAgent | test.go:18:15:18:23 | untrusted | -| test.go:10:15:10:41 | call to UserAgent | test.go:19:27:19:35 | untrusted | -| test.go:24:15:24:41 | call to UserAgent | test.go:26:12:26:20 | untrusted | -| test.go:24:15:24:41 | call to UserAgent | test.go:27:10:27:18 | untrusted | -| test.go:24:15:24:41 | call to UserAgent | test.go:28:15:28:23 | untrusted | -| test.go:24:15:24:41 | call to UserAgent | test.go:29:14:29:22 | untrusted | -| test.go:24:15:24:41 | call to UserAgent | test.go:30:15:30:23 | untrusted | -| test.go:24:15:24:41 | call to UserAgent | test.go:31:8:31:16 | untrusted | -| test.go:24:15:24:41 | call to UserAgent | test.go:32:11:32:19 | untrusted | -| test.go:24:15:24:41 | call to UserAgent | test.go:33:9:33:17 | untrusted | -| test.go:24:15:24:41 | call to UserAgent | test.go:34:8:34:16 | untrusted | -| test.go:24:15:24:41 | call to UserAgent | test.go:35:8:35:16 | untrusted | -| test.go:24:15:24:41 | call to UserAgent | test.go:36:13:36:21 | untrusted | -| test.go:24:15:24:41 | call to UserAgent | test.go:37:13:37:21 | untrusted | -| test.go:24:15:24:41 | call to UserAgent | test.go:38:12:38:20 | untrusted | -| test.go:24:15:24:41 | call to UserAgent | test.go:39:12:39:20 | untrusted | -| test.go:24:15:24:41 | call to UserAgent | test.go:40:9:40:17 | untrusted | -| test.go:24:15:24:41 | call to UserAgent | test.go:41:12:41:20 | untrusted | -| test.go:24:15:24:41 | call to UserAgent | test.go:42:16:42:24 | untrusted | -| test.go:24:15:24:41 | call to UserAgent | test.go:42:27:42:35 | untrusted | -| test.go:24:15:24:41 | call to UserAgent | test.go:43:12:43:20 | untrusted | -| test.go:24:15:24:41 | call to UserAgent | test.go:44:14:44:22 | untrusted | -| test.go:24:15:24:41 | call to UserAgent | test.go:44:25:44:33 | untrusted | -| test.go:48:15:48:41 | call to UserAgent | test.go:49:12:49:20 | untrusted | -| test.go:54:15:54:41 | call to UserAgent | test.go:56:31:56:39 | untrusted | -| test.go:60:15:60:41 | call to UserAgent | test.go:62:19:62:27 | untrusted | +| test.go:10:15:10:41 | call to UserAgent | test.go:12:11:12:19 | untrusted | provenance | | +| test.go:10:15:10:41 | call to UserAgent | test.go:13:23:13:31 | untrusted | provenance | | +| test.go:10:15:10:41 | call to UserAgent | test.go:14:14:14:22 | untrusted | provenance | | +| test.go:10:15:10:41 | call to UserAgent | test.go:15:26:15:34 | untrusted | provenance | | +| test.go:10:15:10:41 | call to UserAgent | test.go:16:12:16:20 | untrusted | provenance | | +| test.go:10:15:10:41 | call to UserAgent | test.go:17:24:17:32 | untrusted | provenance | | +| test.go:10:15:10:41 | call to UserAgent | test.go:18:15:18:23 | untrusted | provenance | | +| test.go:10:15:10:41 | call to UserAgent | test.go:19:27:19:35 | untrusted | provenance | | +| test.go:24:15:24:41 | call to UserAgent | test.go:26:12:26:20 | untrusted | provenance | | +| test.go:24:15:24:41 | call to UserAgent | test.go:27:10:27:18 | untrusted | provenance | | +| test.go:24:15:24:41 | call to UserAgent | test.go:28:15:28:23 | untrusted | provenance | | +| test.go:24:15:24:41 | call to UserAgent | test.go:29:14:29:22 | untrusted | provenance | | +| test.go:24:15:24:41 | call to UserAgent | test.go:30:15:30:23 | untrusted | provenance | | +| test.go:24:15:24:41 | call to UserAgent | test.go:31:8:31:16 | untrusted | provenance | | +| test.go:24:15:24:41 | call to UserAgent | test.go:32:11:32:19 | untrusted | provenance | | +| test.go:24:15:24:41 | call to UserAgent | test.go:33:9:33:17 | untrusted | provenance | | +| test.go:24:15:24:41 | call to UserAgent | test.go:34:8:34:16 | untrusted | provenance | | +| test.go:24:15:24:41 | call to UserAgent | test.go:35:8:35:16 | untrusted | provenance | | +| test.go:24:15:24:41 | call to UserAgent | test.go:36:13:36:21 | untrusted | provenance | | +| test.go:24:15:24:41 | call to UserAgent | test.go:37:13:37:21 | untrusted | provenance | | +| test.go:24:15:24:41 | call to UserAgent | test.go:38:12:38:20 | untrusted | provenance | | +| test.go:24:15:24:41 | call to UserAgent | test.go:39:12:39:20 | untrusted | provenance | | +| test.go:24:15:24:41 | call to UserAgent | test.go:40:9:40:17 | untrusted | provenance | | +| test.go:24:15:24:41 | call to UserAgent | test.go:41:12:41:20 | untrusted | provenance | | +| test.go:24:15:24:41 | call to UserAgent | test.go:42:16:42:24 | untrusted | provenance | | +| test.go:24:15:24:41 | call to UserAgent | test.go:42:27:42:35 | untrusted | provenance | | +| test.go:24:15:24:41 | call to UserAgent | test.go:43:12:43:20 | untrusted | provenance | | +| test.go:24:15:24:41 | call to UserAgent | test.go:44:14:44:22 | untrusted | provenance | | +| test.go:24:15:24:41 | call to UserAgent | test.go:44:25:44:33 | untrusted | provenance | | +| test.go:48:15:48:41 | call to UserAgent | test.go:49:12:49:20 | untrusted | provenance | | +| test.go:54:15:54:41 | call to UserAgent | test.go:56:31:56:39 | untrusted | provenance | | +| test.go:60:15:60:41 | call to UserAgent | test.go:62:19:62:27 | untrusted | provenance | | nodes | test.go:10:15:10:41 | call to UserAgent | semmle.label | call to UserAgent | | test.go:12:11:12:19 | untrusted | semmle.label | untrusted | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/BeegoOrm/StoredXss.expected b/go/ql/test/library-tests/semmle/go/frameworks/BeegoOrm/StoredXss.expected index 09a41c42fb2..363a42b91d7 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/BeegoOrm/StoredXss.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/BeegoOrm/StoredXss.expected @@ -1,31 +1,31 @@ edges -| test.go:77:13:77:16 | &... | test.go:78:13:78:29 | type conversion | -| test.go:77:13:77:16 | &... | test.go:79:13:79:43 | type conversion | -| test.go:82:22:82:26 | &... | test.go:83:13:83:30 | type conversion | -| test.go:86:21:86:25 | &... | test.go:87:13:87:30 | type conversion | -| test.go:92:20:92:36 | call to Value | test.go:92:13:92:37 | type conversion | -| test.go:93:20:93:39 | call to RawValue | test.go:93:13:93:49 | type conversion | -| test.go:94:20:94:37 | call to String | test.go:94:13:94:38 | type conversion | -| test.go:95:20:95:36 | call to Value | test.go:95:13:95:37 | type conversion | -| test.go:96:20:96:39 | call to RawValue | test.go:96:13:96:49 | type conversion | -| test.go:97:20:97:37 | call to String | test.go:97:13:97:38 | type conversion | -| test.go:98:20:98:37 | call to Value | test.go:98:13:98:38 | type conversion | -| test.go:99:20:99:40 | call to RawValue | test.go:99:13:99:50 | type conversion | -| test.go:100:20:100:38 | call to String | test.go:100:13:100:39 | type conversion | -| test.go:106:9:106:13 | &... | test.go:107:13:107:33 | type conversion | -| test.go:110:9:110:12 | &... | test.go:111:13:111:29 | type conversion | -| test.go:114:12:114:19 | &... | test.go:115:13:115:48 | type conversion | -| test.go:118:16:118:24 | &... | test.go:119:13:119:43 | type conversion | -| test.go:122:16:122:23 | &... | test.go:123:13:123:39 | type conversion | -| test.go:126:15:126:24 | &... | test.go:127:13:127:47 | type conversion | -| test.go:130:18:130:30 | &... | test.go:131:13:131:38 | type conversion | -| test.go:137:12:137:19 | &... | test.go:138:13:138:48 | type conversion | -| test.go:141:16:141:24 | &... | test.go:142:13:142:43 | type conversion | -| test.go:145:16:145:23 | &... | test.go:146:13:146:39 | type conversion | -| test.go:149:15:149:24 | &... | test.go:150:13:150:47 | type conversion | -| test.go:153:18:153:30 | &... | test.go:154:13:154:38 | type conversion | -| test.go:157:14:157:22 | &... | test.go:158:13:158:28 | type conversion | -| test.go:161:15:161:24 | &... | test.go:162:13:162:32 | type conversion | +| test.go:77:13:77:16 | &... | test.go:78:13:78:29 | type conversion | provenance | | +| test.go:77:13:77:16 | &... | test.go:79:13:79:43 | type conversion | provenance | | +| test.go:82:22:82:26 | &... | test.go:83:13:83:30 | type conversion | provenance | | +| test.go:86:21:86:25 | &... | test.go:87:13:87:30 | type conversion | provenance | | +| test.go:92:20:92:36 | call to Value | test.go:92:13:92:37 | type conversion | provenance | | +| test.go:93:20:93:39 | call to RawValue | test.go:93:13:93:49 | type conversion | provenance | | +| test.go:94:20:94:37 | call to String | test.go:94:13:94:38 | type conversion | provenance | | +| test.go:95:20:95:36 | call to Value | test.go:95:13:95:37 | type conversion | provenance | | +| test.go:96:20:96:39 | call to RawValue | test.go:96:13:96:49 | type conversion | provenance | | +| test.go:97:20:97:37 | call to String | test.go:97:13:97:38 | type conversion | provenance | | +| test.go:98:20:98:37 | call to Value | test.go:98:13:98:38 | type conversion | provenance | | +| test.go:99:20:99:40 | call to RawValue | test.go:99:13:99:50 | type conversion | provenance | | +| test.go:100:20:100:38 | call to String | test.go:100:13:100:39 | type conversion | provenance | | +| test.go:106:9:106:13 | &... | test.go:107:13:107:33 | type conversion | provenance | | +| test.go:110:9:110:12 | &... | test.go:111:13:111:29 | type conversion | provenance | | +| test.go:114:12:114:19 | &... | test.go:115:13:115:48 | type conversion | provenance | | +| test.go:118:16:118:24 | &... | test.go:119:13:119:43 | type conversion | provenance | | +| test.go:122:16:122:23 | &... | test.go:123:13:123:39 | type conversion | provenance | | +| test.go:126:15:126:24 | &... | test.go:127:13:127:47 | type conversion | provenance | | +| test.go:130:18:130:30 | &... | test.go:131:13:131:38 | type conversion | provenance | | +| test.go:137:12:137:19 | &... | test.go:138:13:138:48 | type conversion | provenance | | +| test.go:141:16:141:24 | &... | test.go:142:13:142:43 | type conversion | provenance | | +| test.go:145:16:145:23 | &... | test.go:146:13:146:39 | type conversion | provenance | | +| test.go:149:15:149:24 | &... | test.go:150:13:150:47 | type conversion | provenance | | +| test.go:153:18:153:30 | &... | test.go:154:13:154:38 | type conversion | provenance | | +| test.go:157:14:157:22 | &... | test.go:158:13:158:28 | type conversion | provenance | | +| test.go:161:15:161:24 | &... | test.go:162:13:162:32 | type conversion | provenance | | nodes | test.go:77:13:77:16 | &... | semmle.label | &... | | test.go:78:13:78:29 | type conversion | semmle.label | type conversion | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Chi/ReflectedXss.expected b/go/ql/test/library-tests/semmle/go/frameworks/Chi/ReflectedXss.expected index cc6d95f8717..d422436065c 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Chi/ReflectedXss.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Chi/ReflectedXss.expected @@ -1,10 +1,10 @@ edges -| test.go:13:12:13:16 | selection of URL | test.go:13:12:13:21 | selection of Path | -| test.go:13:12:13:21 | selection of Path | test.go:21:18:21:23 | hidden | -| test.go:21:18:21:23 | hidden | test.go:21:11:21:24 | type conversion | -| test.go:22:18:22:45 | call to URLParam | test.go:22:11:22:46 | type conversion | -| test.go:23:18:23:60 | call to URLParamFromCtx | test.go:23:11:23:61 | type conversion | -| test.go:24:18:24:71 | call to URLParam | test.go:24:11:24:72 | type conversion | +| test.go:13:12:13:16 | selection of URL | test.go:13:12:13:21 | selection of Path | provenance | | +| test.go:13:12:13:21 | selection of Path | test.go:21:18:21:23 | hidden | provenance | | +| test.go:21:18:21:23 | hidden | test.go:21:11:21:24 | type conversion | provenance | | +| test.go:22:18:22:45 | call to URLParam | test.go:22:11:22:46 | type conversion | provenance | | +| test.go:23:18:23:60 | call to URLParamFromCtx | test.go:23:11:23:61 | type conversion | provenance | | +| test.go:24:18:24:71 | call to URLParam | test.go:24:11:24:72 | type conversion | provenance | | nodes | test.go:13:12:13:16 | selection of URL | semmle.label | selection of URL | | test.go:13:12:13:21 | selection of Path | semmle.label | selection of Path | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Echo/OpenRedirect.expected b/go/ql/test/library-tests/semmle/go/frameworks/Echo/OpenRedirect.expected index 12bab8f680e..77425f059c8 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Echo/OpenRedirect.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Echo/OpenRedirect.expected @@ -1,14 +1,14 @@ edges -| test.go:172:2:172:6 | definition of param | test.go:173:20:173:24 | param | -| test.go:172:11:172:32 | call to Param | test.go:172:2:172:6 | definition of param | -| test.go:178:2:178:6 | definition of param | test.go:182:24:182:28 | param | -| test.go:178:11:178:32 | call to Param | test.go:178:2:178:6 | definition of param | -| test.go:182:24:182:28 | param | test.go:182:20:182:28 | ...+... | -| test.go:190:2:190:4 | definition of url | test.go:193:21:193:23 | url | -| test.go:190:9:190:26 | star expression | test.go:190:2:190:4 | definition of url | -| test.go:190:9:190:26 | star expression | test.go:190:10:190:26 | selection of URL | -| test.go:190:10:190:26 | selection of URL | test.go:190:9:190:26 | star expression | -| test.go:193:21:193:23 | url | test.go:193:21:193:32 | call to String | +| test.go:172:2:172:6 | definition of param | test.go:173:20:173:24 | param | provenance | | +| test.go:172:11:172:32 | call to Param | test.go:172:2:172:6 | definition of param | provenance | | +| test.go:178:2:178:6 | definition of param | test.go:182:24:182:28 | param | provenance | | +| test.go:178:11:178:32 | call to Param | test.go:178:2:178:6 | definition of param | provenance | | +| test.go:182:24:182:28 | param | test.go:182:20:182:28 | ...+... | provenance | | +| test.go:190:2:190:4 | definition of url | test.go:193:21:193:23 | url | provenance | | +| test.go:190:9:190:26 | star expression | test.go:190:2:190:4 | definition of url | provenance | | +| test.go:190:9:190:26 | star expression | test.go:190:10:190:26 | selection of URL | provenance | | +| test.go:190:10:190:26 | selection of URL | test.go:190:9:190:26 | star expression | provenance | | +| test.go:193:21:193:23 | url | test.go:193:21:193:32 | call to String | provenance | | nodes | test.go:172:2:172:6 | definition of param | semmle.label | definition of param | | test.go:172:11:172:32 | call to Param | semmle.label | call to Param | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Echo/ReflectedXss.expected b/go/ql/test/library-tests/semmle/go/frameworks/Echo/ReflectedXss.expected index 05a6ac2869b..f76e5fb42cd 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Echo/ReflectedXss.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Echo/ReflectedXss.expected @@ -1,36 +1,36 @@ edges -| test.go:15:11:15:32 | call to Param | test.go:16:16:16:20 | param | -| test.go:21:11:21:27 | call to ParamValues | test.go:22:16:22:20 | param | -| test.go:27:11:27:37 | call to QueryParam | test.go:28:16:28:20 | param | -| test.go:33:11:33:27 | call to QueryParams | test.go:34:16:34:20 | param | -| test.go:39:10:39:26 | call to QueryString | test.go:40:16:40:19 | qstr | -| test.go:45:9:45:34 | call to FormValue | test.go:46:16:46:18 | val | -| test.go:51:2:51:30 | ... := ...[0] | test.go:52:16:52:37 | index expression | -| test.go:57:2:57:46 | ... := ...[0] | test.go:58:13:58:22 | fileHeader | -| test.go:58:2:58:29 | ... := ...[0] | test.go:60:2:60:5 | file | -| test.go:58:13:58:22 | fileHeader | test.go:58:2:58:29 | ... := ...[0] | -| test.go:59:2:59:7 | definition of buffer | test.go:61:20:61:25 | buffer | -| test.go:60:2:60:5 | file | test.go:59:2:59:7 | definition of buffer | -| test.go:66:2:66:31 | ... := ...[0] | test.go:67:16:67:41 | index expression | -| test.go:72:2:72:31 | ... := ...[0] | test.go:74:13:74:22 | fileHeader | -| test.go:74:2:74:29 | ... := ...[0] | test.go:76:2:76:5 | file | -| test.go:74:13:74:22 | fileHeader | test.go:74:2:74:29 | ... := ...[0] | -| test.go:75:2:75:7 | definition of buffer | test.go:77:20:77:25 | buffer | -| test.go:76:2:76:5 | file | test.go:75:2:75:7 | definition of buffer | -| test.go:82:2:82:32 | ... := ...[0] | test.go:83:16:83:24 | selection of Value | -| test.go:88:13:88:25 | call to Cookies | test.go:89:16:89:31 | selection of Value | -| test.go:99:11:99:15 | &... | test.go:100:16:100:21 | selection of s | -| test.go:112:17:112:19 | definition of ctx | test.go:114:16:114:18 | ctx | -| test.go:113:21:113:42 | call to Param | test.go:112:17:112:19 | definition of ctx | -| test.go:114:16:114:18 | ctx | test.go:114:16:114:33 | call to Get | -| test.go:114:16:114:33 | call to Get | test.go:114:16:114:42 | type assertion | -| test.go:124:11:124:32 | call to Param | test.go:125:16:125:20 | param | -| test.go:130:11:130:32 | call to Param | test.go:131:20:131:32 | type conversion | -| test.go:136:11:136:32 | call to Param | test.go:137:29:137:41 | type conversion | -| test.go:148:11:148:32 | call to Param | test.go:149:30:149:34 | param | -| test.go:149:12:149:35 | call to NewReader | test.go:150:31:150:36 | reader | -| test.go:149:30:149:34 | param | test.go:149:12:149:35 | call to NewReader | -| test.go:164:11:164:32 | call to Param | test.go:165:23:165:35 | type conversion | +| test.go:15:11:15:32 | call to Param | test.go:16:16:16:20 | param | provenance | | +| test.go:21:11:21:27 | call to ParamValues | test.go:22:16:22:20 | param | provenance | | +| test.go:27:11:27:37 | call to QueryParam | test.go:28:16:28:20 | param | provenance | | +| test.go:33:11:33:27 | call to QueryParams | test.go:34:16:34:20 | param | provenance | | +| test.go:39:10:39:26 | call to QueryString | test.go:40:16:40:19 | qstr | provenance | | +| test.go:45:9:45:34 | call to FormValue | test.go:46:16:46:18 | val | provenance | | +| test.go:51:2:51:30 | ... := ...[0] | test.go:52:16:52:37 | index expression | provenance | | +| test.go:57:2:57:46 | ... := ...[0] | test.go:58:13:58:22 | fileHeader | provenance | | +| test.go:58:2:58:29 | ... := ...[0] | test.go:60:2:60:5 | file | provenance | | +| test.go:58:13:58:22 | fileHeader | test.go:58:2:58:29 | ... := ...[0] | provenance | | +| test.go:59:2:59:7 | definition of buffer | test.go:61:20:61:25 | buffer | provenance | | +| test.go:60:2:60:5 | file | test.go:59:2:59:7 | definition of buffer | provenance | | +| test.go:66:2:66:31 | ... := ...[0] | test.go:67:16:67:41 | index expression | provenance | | +| test.go:72:2:72:31 | ... := ...[0] | test.go:74:13:74:22 | fileHeader | provenance | | +| test.go:74:2:74:29 | ... := ...[0] | test.go:76:2:76:5 | file | provenance | | +| test.go:74:13:74:22 | fileHeader | test.go:74:2:74:29 | ... := ...[0] | provenance | | +| test.go:75:2:75:7 | definition of buffer | test.go:77:20:77:25 | buffer | provenance | | +| test.go:76:2:76:5 | file | test.go:75:2:75:7 | definition of buffer | provenance | | +| test.go:82:2:82:32 | ... := ...[0] | test.go:83:16:83:24 | selection of Value | provenance | | +| test.go:88:13:88:25 | call to Cookies | test.go:89:16:89:31 | selection of Value | provenance | | +| test.go:99:11:99:15 | &... | test.go:100:16:100:21 | selection of s | provenance | | +| test.go:112:17:112:19 | definition of ctx | test.go:114:16:114:18 | ctx | provenance | | +| test.go:113:21:113:42 | call to Param | test.go:112:17:112:19 | definition of ctx | provenance | | +| test.go:114:16:114:18 | ctx | test.go:114:16:114:33 | call to Get | provenance | | +| test.go:114:16:114:33 | call to Get | test.go:114:16:114:42 | type assertion | provenance | | +| test.go:124:11:124:32 | call to Param | test.go:125:16:125:20 | param | provenance | | +| test.go:130:11:130:32 | call to Param | test.go:131:20:131:32 | type conversion | provenance | | +| test.go:136:11:136:32 | call to Param | test.go:137:29:137:41 | type conversion | provenance | | +| test.go:148:11:148:32 | call to Param | test.go:149:30:149:34 | param | provenance | | +| test.go:149:12:149:35 | call to NewReader | test.go:150:31:150:36 | reader | provenance | | +| test.go:149:30:149:34 | param | test.go:149:12:149:35 | call to NewReader | provenance | | +| test.go:164:11:164:32 | call to Param | test.go:165:23:165:35 | type conversion | provenance | | nodes | test.go:15:11:15:32 | call to Param | semmle.label | call to Param | | test.go:16:16:16:20 | param | semmle.label | param | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Echo/TaintedPath.expected b/go/ql/test/library-tests/semmle/go/frameworks/Echo/TaintedPath.expected index 5c43259a2b6..04bcfdedcb0 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Echo/TaintedPath.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Echo/TaintedPath.expected @@ -1,6 +1,6 @@ edges -| test.go:221:15:221:38 | call to QueryParam | test.go:222:17:222:24 | filepath | -| test.go:225:15:225:38 | call to QueryParam | test.go:226:23:226:30 | filepath | +| test.go:221:15:221:38 | call to QueryParam | test.go:222:17:222:24 | filepath | provenance | | +| test.go:225:15:225:38 | call to QueryParam | test.go:226:23:226:30 | filepath | provenance | | nodes | test.go:221:15:221:38 | call to QueryParam | semmle.label | call to QueryParam | | test.go:222:17:222:24 | filepath | semmle.label | filepath | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Encoding/jsoniter.expected b/go/ql/test/library-tests/semmle/go/frameworks/Encoding/jsoniter.expected index 5161978daeb..ffbde6355cb 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Encoding/jsoniter.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Encoding/jsoniter.expected @@ -1,16 +1,16 @@ edges -| jsoniter.go:23:20:23:38 | call to getUntrustedBytes | jsoniter.go:27:17:27:30 | untrustedInput | -| jsoniter.go:23:20:23:38 | call to getUntrustedBytes | jsoniter.go:31:21:31:34 | untrustedInput | -| jsoniter.go:24:21:24:40 | call to getUntrustedString | jsoniter.go:35:27:35:41 | untrustedString | -| jsoniter.go:24:21:24:40 | call to getUntrustedString | jsoniter.go:39:31:39:45 | untrustedString | -| jsoniter.go:27:17:27:30 | untrustedInput | jsoniter.go:27:33:27:37 | &... | -| jsoniter.go:27:33:27:37 | &... | jsoniter.go:28:15:28:24 | selection of field | -| jsoniter.go:31:21:31:34 | untrustedInput | jsoniter.go:31:37:31:42 | &... | -| jsoniter.go:31:37:31:42 | &... | jsoniter.go:32:15:32:25 | selection of field | -| jsoniter.go:35:27:35:41 | untrustedString | jsoniter.go:35:44:35:49 | &... | -| jsoniter.go:35:44:35:49 | &... | jsoniter.go:36:15:36:25 | selection of field | -| jsoniter.go:39:31:39:45 | untrustedString | jsoniter.go:39:48:39:53 | &... | -| jsoniter.go:39:48:39:53 | &... | jsoniter.go:40:15:40:25 | selection of field | +| jsoniter.go:23:20:23:38 | call to getUntrustedBytes | jsoniter.go:27:17:27:30 | untrustedInput | provenance | | +| jsoniter.go:23:20:23:38 | call to getUntrustedBytes | jsoniter.go:31:21:31:34 | untrustedInput | provenance | | +| jsoniter.go:24:21:24:40 | call to getUntrustedString | jsoniter.go:35:27:35:41 | untrustedString | provenance | | +| jsoniter.go:24:21:24:40 | call to getUntrustedString | jsoniter.go:39:31:39:45 | untrustedString | provenance | | +| jsoniter.go:27:17:27:30 | untrustedInput | jsoniter.go:27:33:27:37 | &... | provenance | | +| jsoniter.go:27:33:27:37 | &... | jsoniter.go:28:15:28:24 | selection of field | provenance | | +| jsoniter.go:31:21:31:34 | untrustedInput | jsoniter.go:31:37:31:42 | &... | provenance | | +| jsoniter.go:31:37:31:42 | &... | jsoniter.go:32:15:32:25 | selection of field | provenance | | +| jsoniter.go:35:27:35:41 | untrustedString | jsoniter.go:35:44:35:49 | &... | provenance | | +| jsoniter.go:35:44:35:49 | &... | jsoniter.go:36:15:36:25 | selection of field | provenance | | +| jsoniter.go:39:31:39:45 | untrustedString | jsoniter.go:39:48:39:53 | &... | provenance | | +| jsoniter.go:39:48:39:53 | &... | jsoniter.go:40:15:40:25 | selection of field | provenance | | nodes | jsoniter.go:23:20:23:38 | call to getUntrustedBytes | semmle.label | call to getUntrustedBytes | | jsoniter.go:24:21:24:40 | call to getUntrustedString | semmle.label | call to getUntrustedString | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Gin/TaintedPath.expected b/go/ql/test/library-tests/semmle/go/frameworks/Gin/TaintedPath.expected index b53ceb0281e..45d417ca812 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Gin/TaintedPath.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Gin/TaintedPath.expected @@ -1,8 +1,8 @@ edges -| Gin.go:24:15:24:33 | call to Query | Gin.go:25:10:25:17 | filepath | -| Gin.go:24:15:24:33 | call to Query | Gin.go:26:39:26:46 | filepath | -| Gin.go:24:15:24:33 | call to Query | Gin.go:27:20:27:27 | filepath | -| Gin.go:24:15:24:33 | call to Query | Gin.go:29:32:29:39 | filepath | +| Gin.go:24:15:24:33 | call to Query | Gin.go:25:10:25:17 | filepath | provenance | | +| Gin.go:24:15:24:33 | call to Query | Gin.go:26:39:26:46 | filepath | provenance | | +| Gin.go:24:15:24:33 | call to Query | Gin.go:27:20:27:27 | filepath | provenance | | +| Gin.go:24:15:24:33 | call to Query | Gin.go:29:32:29:39 | filepath | provenance | | nodes | Gin.go:24:15:24:33 | call to Query | semmle.label | call to Query | | Gin.go:25:10:25:17 | filepath | semmle.label | filepath | 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 d23496fe4c5..7e8cdc288f1 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,16 +1,16 @@ edges -| main.go:18:46:18:48 | definition of req | main.go:18:46:18:48 | definition of req | -| main.go:18:46:18:48 | definition of req | main.go:18:46:18:48 | definition of req | -| main.go:18:46:18:48 | definition of req | main.go:21:28:21:31 | name | -| main.go:18:46:18:48 | definition of req | main.go:21:28:21:31 | name | -| main.go:18:46:18:48 | definition of req | proto/Hello.pb.micro.go:85:53:85:54 | definition of in | -| proto/Hello.pb.micro.go:85:53:85:54 | definition of in | proto/Hello.pb.micro.go:85:53:85:54 | definition of in | -| proto/Hello.pb.micro.go:85:53:85:54 | definition of in | proto/Hello.pb.micro.go:86:37:86:38 | in | -| proto/Hello.pb.micro.go:85:53:85:54 | definition of in | proto/Hello.pb.micro.go:86:37:86:38 | in | -| proto/Hello.pb.micro.go:86:37:86:38 | in | main.go:18:46:18:48 | definition of req | -| proto/Hello.pb.micro.go:86:37:86:38 | in | main.go:18:46:18:48 | definition of req | -| proto/Hello.pb.micro.go:86:37:86:38 | in | proto/Hello.pb.micro.go:85:53:85:54 | definition of in | -| proto/Hello.pb.micro.go:86:37:86:38 | in | proto/Hello.pb.micro.go:85:53:85:54 | definition of in | +| main.go:18:46:18:48 | definition of req | main.go:18:46:18:48 | definition of req | provenance | | +| main.go:18:46:18:48 | definition of req | main.go:18:46:18:48 | definition of req | 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 | 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 | 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: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 | | +| proto/Hello.pb.micro.go:86:37:86:38 | in | proto/Hello.pb.micro.go:85:53:85:54 | definition of in | provenance | | 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 | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Gorestful/gorestful.expected b/go/ql/test/library-tests/semmle/go/frameworks/Gorestful/gorestful.expected index b299a773b06..e64858732ed 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Gorestful/gorestful.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Gorestful/gorestful.expected @@ -1,12 +1,12 @@ edges -| gorestful.go:15:15:15:44 | call to QueryParameters | gorestful.go:15:15:15:47 | index expression | -| gorestful.go:17:12:17:39 | call to BodyParameter | gorestful.go:18:15:18:17 | val | -| gorestful.go:21:15:21:38 | call to PathParameters | gorestful.go:21:15:21:45 | index expression | -| gorestful.go:23:21:23:24 | &... | gorestful.go:24:15:24:21 | selection of cmd | -| gorestful_v2.go:15:15:15:44 | call to QueryParameters | gorestful_v2.go:15:15:15:47 | index expression | -| gorestful_v2.go:17:12:17:39 | call to BodyParameter | gorestful_v2.go:18:15:18:17 | val | -| gorestful_v2.go:21:15:21:38 | call to PathParameters | gorestful_v2.go:21:15:21:45 | index expression | -| gorestful_v2.go:23:21:23:24 | &... | gorestful_v2.go:24:15:24:21 | selection of cmd | +| gorestful.go:15:15:15:44 | call to QueryParameters | gorestful.go:15:15:15:47 | index expression | provenance | | +| gorestful.go:17:12:17:39 | call to BodyParameter | gorestful.go:18:15:18:17 | val | provenance | | +| gorestful.go:21:15:21:38 | call to PathParameters | gorestful.go:21:15:21:45 | index expression | provenance | | +| gorestful.go:23:21:23:24 | &... | gorestful.go:24:15:24:21 | selection of cmd | provenance | | +| gorestful_v2.go:15:15:15:44 | call to QueryParameters | gorestful_v2.go:15:15:15:47 | index expression | provenance | | +| gorestful_v2.go:17:12:17:39 | call to BodyParameter | gorestful_v2.go:18:15:18:17 | val | provenance | | +| gorestful_v2.go:21:15:21:38 | call to PathParameters | gorestful_v2.go:21:15:21:45 | index expression | provenance | | +| gorestful_v2.go:23:21:23:24 | &... | gorestful_v2.go:24:15:24:21 | selection of cmd | provenance | | nodes | gorestful.go:15:15:15:44 | call to QueryParameters | semmle.label | call to QueryParameters | | gorestful.go:15:15:15:47 | index expression | semmle.label | index expression | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Revel/OpenRedirect.expected b/go/ql/test/library-tests/semmle/go/frameworks/Revel/OpenRedirect.expected index d3215df275d..e0eb8c6cc08 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Revel/OpenRedirect.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Revel/OpenRedirect.expected @@ -1,9 +1,9 @@ edges -| EndToEnd.go:94:20:94:27 | implicit dereference | EndToEnd.go:94:20:94:27 | selection of Params | -| EndToEnd.go:94:20:94:27 | implicit dereference | EndToEnd.go:94:20:94:32 | selection of Form | -| EndToEnd.go:94:20:94:27 | selection of Params | EndToEnd.go:94:20:94:27 | implicit dereference | -| EndToEnd.go:94:20:94:27 | selection of Params | EndToEnd.go:94:20:94:32 | selection of Form | -| EndToEnd.go:94:20:94:32 | selection of Form | EndToEnd.go:94:20:94:49 | call to Get | +| EndToEnd.go:94:20:94:27 | implicit dereference | EndToEnd.go:94:20:94:27 | selection of Params | provenance | | +| EndToEnd.go:94:20:94:27 | implicit dereference | EndToEnd.go:94:20:94:32 | selection of Form | provenance | | +| EndToEnd.go:94:20:94:27 | selection of Params | EndToEnd.go:94:20:94:27 | implicit dereference | provenance | | +| EndToEnd.go:94:20:94:27 | selection of Params | EndToEnd.go:94:20:94:32 | selection of Form | provenance | | +| EndToEnd.go:94:20:94:32 | selection of Form | EndToEnd.go:94:20:94:49 | call to Get | provenance | | nodes | EndToEnd.go:94:20:94:27 | implicit dereference | semmle.label | implicit dereference | | EndToEnd.go:94:20:94:27 | selection of Params | semmle.label | selection of Params | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Revel/ReflectedXss.expected b/go/ql/test/library-tests/semmle/go/frameworks/Revel/ReflectedXss.expected index 5352f0569bd..b9725fae820 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Revel/ReflectedXss.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Revel/ReflectedXss.expected @@ -1,13 +1,13 @@ edges -| EndToEnd.go:35:2:35:4 | definition of buf | EndToEnd.go:37:24:37:26 | buf | -| EndToEnd.go:36:18:36:25 | selection of Params | EndToEnd.go:36:18:36:30 | selection of Form | -| EndToEnd.go:36:18:36:30 | selection of Form | EndToEnd.go:36:18:36:47 | call to Get | -| EndToEnd.go:36:18:36:47 | call to Get | EndToEnd.go:35:2:35:4 | definition of buf | -| EndToEnd.go:69:22:69:29 | selection of Params | EndToEnd.go:69:22:69:34 | selection of Form | -| EndToEnd.go:69:22:69:34 | selection of Form | EndToEnd.go:69:22:69:51 | call to Get | -| Revel.go:70:22:70:29 | selection of Params | Revel.go:70:22:70:35 | selection of Query | -| examples/booking/app/init.go:36:44:36:48 | selection of URL | examples/booking/app/init.go:36:44:36:53 | selection of Path | -| examples/booking/app/init.go:40:49:40:53 | selection of URL | examples/booking/app/init.go:40:49:40:58 | selection of Path | +| EndToEnd.go:35:2:35:4 | definition of buf | EndToEnd.go:37:24:37:26 | buf | provenance | | +| EndToEnd.go:36:18:36:25 | selection of Params | EndToEnd.go:36:18:36:30 | selection of Form | provenance | | +| EndToEnd.go:36:18:36:30 | selection of Form | EndToEnd.go:36:18:36:47 | call to Get | provenance | | +| EndToEnd.go:36:18:36:47 | call to Get | EndToEnd.go:35:2:35:4 | definition of buf | provenance | | +| EndToEnd.go:69:22:69:29 | selection of Params | EndToEnd.go:69:22:69:34 | selection of Form | provenance | | +| EndToEnd.go:69:22:69:34 | selection of Form | EndToEnd.go:69:22:69:51 | call to Get | provenance | | +| Revel.go:70:22:70:29 | selection of Params | Revel.go:70:22:70:35 | selection of Query | provenance | | +| examples/booking/app/init.go:36:44:36:48 | selection of URL | examples/booking/app/init.go:36:44:36:53 | selection of Path | provenance | | +| examples/booking/app/init.go:40:49:40:53 | selection of URL | examples/booking/app/init.go:40:49:40:58 | selection of Path | provenance | | nodes | EndToEnd.go:35:2:35:4 | definition of buf | semmle.label | definition of buf | | EndToEnd.go:36:18:36:25 | selection of Params | semmle.label | selection of Params | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Revel/TaintedPath.expected b/go/ql/test/library-tests/semmle/go/frameworks/Revel/TaintedPath.expected index c9b3a4bbe58..ad3ca2e44dc 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Revel/TaintedPath.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Revel/TaintedPath.expected @@ -1,8 +1,8 @@ edges -| EndToEnd.go:58:18:58:25 | selection of Params | EndToEnd.go:58:18:58:30 | selection of Form | -| EndToEnd.go:58:18:58:30 | selection of Form | EndToEnd.go:58:18:58:47 | call to Get | -| EndToEnd.go:64:26:64:33 | selection of Params | EndToEnd.go:64:26:64:38 | selection of Form | -| EndToEnd.go:64:26:64:38 | selection of Form | EndToEnd.go:64:26:64:55 | call to Get | +| EndToEnd.go:58:18:58:25 | selection of Params | EndToEnd.go:58:18:58:30 | selection of Form | provenance | | +| EndToEnd.go:58:18:58:30 | selection of Form | EndToEnd.go:58:18:58:47 | call to Get | provenance | | +| EndToEnd.go:64:26:64:33 | selection of Params | EndToEnd.go:64:26:64:38 | selection of Form | provenance | | +| EndToEnd.go:64:26:64:38 | selection of Form | EndToEnd.go:64:26:64:55 | call to Get | provenance | | nodes | EndToEnd.go:58:18:58:25 | selection of Params | semmle.label | selection of Params | | EndToEnd.go:58:18:58:30 | selection of Form | semmle.label | selection of Form | 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 14e97ebe357..90e6b42ec51 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 @@ -1,27 +1,27 @@ edges -| client/main.go:16:35:16:78 | &... | client/main.go:16:35:16:78 | &... | -| client/main.go:16:35:16:78 | &... | server/main.go:19:56:19:61 | definition of params | -| rpc/notes/service.twirp.go:473:6:473:13 | definition of typedReq | rpc/notes/service.twirp.go:477:44:477:51 | typedReq | -| rpc/notes/service.twirp.go:477:44:477:51 | typedReq | server/main.go:19:56:19:61 | definition of params | -| rpc/notes/service.twirp.go:493:2:493:2 | capture variable reqContent | rpc/notes/service.twirp.go:495:35:495:44 | reqContent | -| rpc/notes/service.twirp.go:495:35:495:44 | reqContent | server/main.go:19:56:19:61 | definition of params | -| rpc/notes/service.twirp.go:538:2:538:33 | ... := ...[0] | rpc/notes/service.twirp.go:544:27:544:29 | buf | -| rpc/notes/service.twirp.go:538:25:538:32 | selection of Body | rpc/notes/service.twirp.go:538:2:538:33 | ... := ...[0] | -| rpc/notes/service.twirp.go:543:2:543:11 | definition of reqContent | rpc/notes/service.twirp.go:574:2:574:2 | capture variable reqContent | -| rpc/notes/service.twirp.go:544:27:544:29 | buf | rpc/notes/service.twirp.go:543:2:543:11 | definition of reqContent | -| rpc/notes/service.twirp.go:554:6:554:13 | definition of typedReq | rpc/notes/service.twirp.go:558:44:558:51 | typedReq | -| rpc/notes/service.twirp.go:558:44:558:51 | typedReq | server/main.go:19:56:19:61 | definition of params | -| rpc/notes/service.twirp.go:574:2:574:2 | capture variable reqContent | rpc/notes/service.twirp.go:576:35:576:44 | reqContent | -| rpc/notes/service.twirp.go:576:35:576:44 | reqContent | server/main.go:19:56:19:61 | definition of params | -| server/main.go:19:56:19:61 | definition of params | client/main.go:16:35:16:78 | &... | -| server/main.go:19:56:19:61 | definition of params | rpc/notes/service.twirp.go:473:6:473:13 | definition of typedReq | -| server/main.go:19:56:19:61 | definition of params | rpc/notes/service.twirp.go:493:2:493:2 | capture variable reqContent | -| server/main.go:19:56:19:61 | definition of params | rpc/notes/service.twirp.go:554:6:554:13 | definition of typedReq | -| server/main.go:19:56:19:61 | definition of params | rpc/notes/service.twirp.go:574:2:574:2 | capture variable reqContent | -| server/main.go:19:56:19:61 | definition of params | server/main.go:19:56:19:61 | definition of params | -| server/main.go:19:56:19:61 | definition of params | server/main.go:19:56:19:61 | definition of params | -| server/main.go:19:56:19:61 | definition of params | server/main.go:30:38:30:48 | selection of Text | -| server/main.go:19:56:19:61 | definition of params | server/main.go:30:38:30:48 | selection of Text | +| client/main.go:16:35:16:78 | &... | client/main.go:16:35:16:78 | &... | provenance | | +| client/main.go:16:35:16:78 | &... | server/main.go:19:56:19:61 | definition of params | provenance | | +| rpc/notes/service.twirp.go:473:6:473:13 | definition of typedReq | rpc/notes/service.twirp.go:477:44:477:51 | typedReq | provenance | | +| rpc/notes/service.twirp.go:477:44:477:51 | typedReq | server/main.go:19:56:19:61 | definition of params | provenance | | +| rpc/notes/service.twirp.go:493:2:493:2 | capture variable reqContent | rpc/notes/service.twirp.go:495:35:495:44 | reqContent | provenance | | +| rpc/notes/service.twirp.go:495:35:495:44 | reqContent | server/main.go:19:56:19:61 | definition of params | provenance | | +| rpc/notes/service.twirp.go:538:2:538:33 | ... := ...[0] | rpc/notes/service.twirp.go:544:27:544:29 | buf | provenance | | +| rpc/notes/service.twirp.go:538:25:538:32 | selection of Body | rpc/notes/service.twirp.go:538:2:538:33 | ... := ...[0] | provenance | | +| rpc/notes/service.twirp.go:543:2:543:11 | definition of reqContent | rpc/notes/service.twirp.go:574:2:574:2 | capture variable reqContent | provenance | | +| rpc/notes/service.twirp.go:544:27:544:29 | buf | rpc/notes/service.twirp.go:543:2:543:11 | definition of reqContent | provenance | | +| rpc/notes/service.twirp.go:554:6:554:13 | definition of typedReq | rpc/notes/service.twirp.go:558:44:558:51 | typedReq | provenance | | +| 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 | client/main.go:16:35:16:78 | &... | provenance | | +| server/main.go:19:56:19:61 | definition of params | rpc/notes/service.twirp.go:473:6:473:13 | definition of typedReq | provenance | | +| server/main.go:19:56:19:61 | definition of params | rpc/notes/service.twirp.go:493:2:493:2 | capture variable reqContent | provenance | | +| server/main.go:19:56:19:61 | definition of params | rpc/notes/service.twirp.go:554:6:554:13 | definition of typedReq | provenance | | +| server/main.go:19:56:19:61 | definition of params | rpc/notes/service.twirp.go:574:2:574:2 | capture variable reqContent | provenance | | +| server/main.go:19:56:19:61 | definition of params | 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 | 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 | | nodes | client/main.go:16:35:16:78 | &... | semmle.label | &... | | rpc/notes/service.twirp.go:473:6:473:13 | definition of typedReq | semmle.label | definition of typedReq | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/XNetHtml/ReflectedXss.expected b/go/ql/test/library-tests/semmle/go/frameworks/XNetHtml/ReflectedXss.expected index 1124ca22b05..341e2cf46ab 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/XNetHtml/ReflectedXss.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/XNetHtml/ReflectedXss.expected @@ -1,60 +1,60 @@ edges -| test.go:12:12:12:22 | selection of URL | test.go:12:12:12:30 | call to Query | -| test.go:12:12:12:30 | call to Query | test.go:12:12:12:44 | call to Get | -| test.go:12:12:12:44 | call to Get | test.go:15:42:15:47 | param1 | -| test.go:15:22:15:48 | call to UnescapeString | test.go:15:15:15:49 | type conversion | -| test.go:15:42:15:47 | param1 | test.go:15:22:15:48 | call to UnescapeString | -| test.go:17:2:17:36 | ... := ...[0] | test.go:18:15:18:31 | type conversion | -| test.go:17:2:17:36 | ... := ...[0] | test.go:29:22:29:25 | node | -| test.go:17:24:17:35 | selection of Body | test.go:17:2:17:36 | ... := ...[0] | -| test.go:20:2:20:48 | ... := ...[0] | test.go:21:15:21:32 | type conversion | -| test.go:20:36:20:47 | selection of Body | test.go:20:2:20:48 | ... := ...[0] | -| test.go:23:2:23:50 | ... := ...[0] | test.go:24:15:24:35 | type conversion | -| test.go:23:33:23:44 | selection of Body | test.go:23:2:23:50 | ... := ...[0] | -| test.go:26:2:26:62 | ... := ...[0] | test.go:27:15:27:36 | type conversion | -| test.go:26:45:26:56 | selection of Body | test.go:26:2:26:62 | ... := ...[0] | -| test.go:31:15:31:45 | call to NewTokenizer | test.go:32:15:32:23 | tokenizer | -| test.go:31:15:31:45 | call to NewTokenizer | test.go:33:15:33:23 | tokenizer | -| test.go:31:15:31:45 | call to NewTokenizer | test.go:34:17:34:25 | tokenizer | -| test.go:31:15:31:45 | call to NewTokenizer | test.go:36:15:36:23 | tokenizer | -| test.go:31:15:31:45 | call to NewTokenizer | test.go:37:22:37:30 | tokenizer | -| test.go:31:33:31:44 | selection of Body | test.go:31:15:31:45 | call to NewTokenizer | -| test.go:32:15:32:23 | tokenizer | test.go:32:15:32:34 | call to Buffered | -| test.go:33:15:33:23 | tokenizer | test.go:33:15:33:29 | call to Raw | -| test.go:34:2:34:35 | ... := ...[1] | test.go:35:15:35:19 | value | -| test.go:34:17:34:25 | tokenizer | test.go:34:2:34:35 | ... := ...[1] | -| test.go:36:15:36:23 | tokenizer | test.go:36:15:36:30 | call to Text | -| test.go:37:22:37:30 | tokenizer | test.go:37:22:37:38 | call to Token | -| test.go:37:22:37:38 | call to Token | test.go:37:15:37:44 | type conversion | -| test.go:39:23:39:77 | call to NewTokenizerFragment | test.go:40:15:40:31 | tokenizerFragment | -| test.go:39:49:39:60 | selection of Body | test.go:39:23:39:77 | call to NewTokenizerFragment | -| test.go:40:15:40:31 | tokenizerFragment | test.go:40:15:40:42 | call to Buffered | -| test.go:42:6:42:14 | definition of cleanNode | test.go:45:22:45:31 | &... | -| test.go:42:6:42:14 | definition of cleanNode | test.go:45:22:45:31 | &... | -| test.go:42:6:42:14 | definition of cleanNode | test.go:45:23:45:31 | cleanNode | -| test.go:43:2:43:43 | ... := ...[0] | test.go:44:24:44:34 | taintedNode | -| test.go:43:31:43:42 | selection of Body | test.go:43:2:43:43 | ... := ...[0] | -| test.go:44:24:44:34 | taintedNode | test.go:42:6:42:14 | definition of cleanNode | -| test.go:45:22:45:31 | &... | test.go:45:22:45:31 | &... | -| test.go:45:22:45:31 | &... | test.go:45:22:45:31 | &... | -| test.go:45:22:45:31 | &... | test.go:45:23:45:31 | cleanNode | -| test.go:45:22:45:31 | &... [pointer] | test.go:45:22:45:31 | &... | -| test.go:45:22:45:31 | &... [pointer] | test.go:45:22:45:31 | &... | -| test.go:45:22:45:31 | &... [pointer] | test.go:45:23:45:31 | cleanNode | -| test.go:45:23:45:31 | cleanNode | test.go:45:22:45:31 | &... [pointer] | -| test.go:47:6:47:15 | definition of cleanNode2 | test.go:50:22:50:32 | &... | -| test.go:47:6:47:15 | definition of cleanNode2 | test.go:50:22:50:32 | &... | -| test.go:47:6:47:15 | definition of cleanNode2 | test.go:50:23:50:32 | cleanNode2 | -| test.go:48:2:48:44 | ... := ...[0] | test.go:49:26:49:37 | taintedNode2 | -| test.go:48:32:48:43 | selection of Body | test.go:48:2:48:44 | ... := ...[0] | -| test.go:49:26:49:37 | taintedNode2 | test.go:47:6:47:15 | definition of cleanNode2 | -| test.go:50:22:50:32 | &... | test.go:50:22:50:32 | &... | -| test.go:50:22:50:32 | &... | test.go:50:22:50:32 | &... | -| test.go:50:22:50:32 | &... | test.go:50:23:50:32 | cleanNode2 | -| test.go:50:22:50:32 | &... [pointer] | test.go:50:22:50:32 | &... | -| test.go:50:22:50:32 | &... [pointer] | test.go:50:22:50:32 | &... | -| test.go:50:22:50:32 | &... [pointer] | test.go:50:23:50:32 | cleanNode2 | -| test.go:50:23:50:32 | cleanNode2 | test.go:50:22:50:32 | &... [pointer] | +| test.go:12:12:12:22 | selection of URL | test.go:12:12:12:30 | call to Query | provenance | | +| test.go:12:12:12:30 | call to Query | test.go:12:12:12:44 | call to Get | provenance | | +| test.go:12:12:12:44 | call to Get | test.go:15:42:15:47 | param1 | provenance | | +| test.go:15:22:15:48 | call to UnescapeString | test.go:15:15:15:49 | type conversion | provenance | | +| test.go:15:42:15:47 | param1 | test.go:15:22:15:48 | call to UnescapeString | provenance | | +| test.go:17:2:17:36 | ... := ...[0] | test.go:18:15:18:31 | type conversion | provenance | | +| test.go:17:2:17:36 | ... := ...[0] | test.go:29:22:29:25 | node | provenance | | +| test.go:17:24:17:35 | selection of Body | test.go:17:2:17:36 | ... := ...[0] | provenance | | +| test.go:20:2:20:48 | ... := ...[0] | test.go:21:15:21:32 | type conversion | provenance | | +| test.go:20:36:20:47 | selection of Body | test.go:20:2:20:48 | ... := ...[0] | provenance | | +| test.go:23:2:23:50 | ... := ...[0] | test.go:24:15:24:35 | type conversion | provenance | | +| test.go:23:33:23:44 | selection of Body | test.go:23:2:23:50 | ... := ...[0] | provenance | | +| test.go:26:2:26:62 | ... := ...[0] | test.go:27:15:27:36 | type conversion | provenance | | +| test.go:26:45:26:56 | selection of Body | test.go:26:2:26:62 | ... := ...[0] | provenance | | +| test.go:31:15:31:45 | call to NewTokenizer | test.go:32:15:32:23 | tokenizer | provenance | | +| test.go:31:15:31:45 | call to NewTokenizer | test.go:33:15:33:23 | tokenizer | provenance | | +| test.go:31:15:31:45 | call to NewTokenizer | test.go:34:17:34:25 | tokenizer | provenance | | +| test.go:31:15:31:45 | call to NewTokenizer | test.go:36:15:36:23 | tokenizer | provenance | | +| test.go:31:15:31:45 | call to NewTokenizer | test.go:37:22:37:30 | tokenizer | provenance | | +| test.go:31:33:31:44 | selection of Body | test.go:31:15:31:45 | call to NewTokenizer | provenance | | +| test.go:32:15:32:23 | tokenizer | test.go:32:15:32:34 | call to Buffered | provenance | | +| test.go:33:15:33:23 | tokenizer | test.go:33:15:33:29 | call to Raw | provenance | | +| test.go:34:2:34:35 | ... := ...[1] | test.go:35:15:35:19 | value | provenance | | +| test.go:34:17:34:25 | tokenizer | test.go:34:2:34:35 | ... := ...[1] | provenance | | +| test.go:36:15:36:23 | tokenizer | test.go:36:15:36:30 | call to Text | provenance | | +| test.go:37:22:37:30 | tokenizer | test.go:37:22:37:38 | call to Token | provenance | | +| test.go:37:22:37:38 | call to Token | test.go:37:15:37:44 | type conversion | provenance | | +| test.go:39:23:39:77 | call to NewTokenizerFragment | test.go:40:15:40:31 | tokenizerFragment | provenance | | +| test.go:39:49:39:60 | selection of Body | test.go:39:23:39:77 | call to NewTokenizerFragment | provenance | | +| test.go:40:15:40:31 | tokenizerFragment | test.go:40:15:40:42 | call to Buffered | provenance | | +| test.go:42:6:42:14 | definition of cleanNode | test.go:45:22:45:31 | &... | provenance | | +| test.go:42:6:42:14 | definition of cleanNode | test.go:45:22:45:31 | &... | provenance | | +| test.go:42:6:42:14 | definition of cleanNode | test.go:45:23:45:31 | cleanNode | provenance | | +| test.go:43:2:43:43 | ... := ...[0] | test.go:44:24:44:34 | taintedNode | provenance | | +| test.go:43:31:43:42 | selection of Body | test.go:43:2:43:43 | ... := ...[0] | provenance | | +| test.go:44:24:44:34 | taintedNode | test.go:42:6:42:14 | definition of cleanNode | provenance | | +| test.go:45:22:45:31 | &... | test.go:45:22:45:31 | &... | provenance | | +| test.go:45:22:45:31 | &... | test.go:45:22:45:31 | &... | provenance | | +| test.go:45:22:45:31 | &... | test.go:45:23:45:31 | cleanNode | provenance | | +| test.go:45:22:45:31 | &... [pointer] | test.go:45:22:45:31 | &... | provenance | | +| test.go:45:22:45:31 | &... [pointer] | test.go:45:22:45:31 | &... | provenance | | +| test.go:45:22:45:31 | &... [pointer] | test.go:45:23:45:31 | cleanNode | provenance | | +| test.go:45:23:45:31 | cleanNode | test.go:45:22:45:31 | &... [pointer] | provenance | | +| test.go:47:6:47:15 | definition of cleanNode2 | test.go:50:22:50:32 | &... | provenance | | +| test.go:47:6:47:15 | definition of cleanNode2 | test.go:50:22:50:32 | &... | provenance | | +| test.go:47:6:47:15 | definition of cleanNode2 | test.go:50:23:50:32 | cleanNode2 | provenance | | +| test.go:48:2:48:44 | ... := ...[0] | test.go:49:26:49:37 | taintedNode2 | provenance | | +| test.go:48:32:48:43 | selection of Body | test.go:48:2:48:44 | ... := ...[0] | provenance | | +| test.go:49:26:49:37 | taintedNode2 | test.go:47:6:47:15 | definition of cleanNode2 | provenance | | +| test.go:50:22:50:32 | &... | test.go:50:22:50:32 | &... | provenance | | +| test.go:50:22:50:32 | &... | test.go:50:22:50:32 | &... | provenance | | +| test.go:50:22:50:32 | &... | test.go:50:23:50:32 | cleanNode2 | provenance | | +| test.go:50:22:50:32 | &... [pointer] | test.go:50:22:50:32 | &... | provenance | | +| test.go:50:22:50:32 | &... [pointer] | test.go:50:22:50:32 | &... | provenance | | +| test.go:50:22:50:32 | &... [pointer] | test.go:50:23:50:32 | cleanNode2 | provenance | | +| test.go:50:23:50:32 | cleanNode2 | test.go:50:22:50:32 | &... [pointer] | provenance | | nodes | test.go:12:12:12:22 | selection of URL | semmle.label | selection of URL | | test.go:12:12:12:30 | call to Query | semmle.label | call to Query | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/XNetHtml/SqlInjection.expected b/go/ql/test/library-tests/semmle/go/frameworks/XNetHtml/SqlInjection.expected index a36880faf24..9171f32e84d 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/XNetHtml/SqlInjection.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/XNetHtml/SqlInjection.expected @@ -1,6 +1,6 @@ edges -| test.go:56:2:56:42 | ... := ...[0] | test.go:57:29:57:40 | selection of Value | -| test.go:57:29:57:40 | selection of Value | test.go:57:11:57:41 | call to EscapeString | +| test.go:56:2:56:42 | ... := ...[0] | test.go:57:29:57:40 | selection of Value | provenance | | +| test.go:57:29:57:40 | selection of Value | test.go:57:11:57:41 | call to EscapeString | provenance | | nodes | test.go:56:2:56:42 | ... := ...[0] | semmle.label | ... := ...[0] | | test.go:57:11:57:41 | call to EscapeString | semmle.label | call to EscapeString | diff --git a/go/ql/test/query-tests/InconsistentCode/UnhandledCloseWritableHandle/UnhandledCloseWritableHandle.expected b/go/ql/test/query-tests/InconsistentCode/UnhandledCloseWritableHandle/UnhandledCloseWritableHandle.expected index 3a0c58c7ee9..e5ad074d25d 100644 --- a/go/ql/test/query-tests/InconsistentCode/UnhandledCloseWritableHandle/UnhandledCloseWritableHandle.expected +++ b/go/ql/test/query-tests/InconsistentCode/UnhandledCloseWritableHandle/UnhandledCloseWritableHandle.expected @@ -1,19 +1,19 @@ edges -| tests.go:8:24:8:24 | definition of f | tests.go:9:8:9:8 | f | -| tests.go:12:32:12:32 | definition of f | tests.go:13:13:13:13 | capture variable f | -| tests.go:13:13:13:13 | capture variable f | tests.go:14:3:14:3 | f | -| tests.go:31:5:31:78 | ... := ...[0] | tests.go:32:21:32:21 | f | -| tests.go:31:5:31:78 | ... := ...[0] | tests.go:33:29:33:29 | f | -| tests.go:32:21:32:21 | f | tests.go:8:24:8:24 | definition of f | -| tests.go:33:29:33:29 | f | tests.go:12:32:12:32 | definition of f | -| tests.go:45:5:45:76 | ... := ...[0] | tests.go:46:21:46:21 | f | -| tests.go:45:5:45:76 | ... := ...[0] | tests.go:47:29:47:29 | f | -| tests.go:46:21:46:21 | f | tests.go:8:24:8:24 | definition of f | -| tests.go:47:29:47:29 | f | tests.go:12:32:12:32 | definition of f | -| tests.go:54:5:54:78 | ... := ...[0] | tests.go:56:3:56:3 | f | -| tests.go:66:5:66:76 | ... := ...[0] | tests.go:68:3:68:3 | f | -| tests.go:108:5:108:78 | ... := ...[0] | tests.go:110:9:110:9 | f | -| tests.go:125:5:125:78 | ... := ...[0] | tests.go:129:3:129:3 | f | +| tests.go:8:24:8:24 | definition of f | tests.go:9:8:9:8 | f | provenance | | +| tests.go:12:32:12:32 | definition of f | tests.go:13:13:13:13 | capture variable f | provenance | | +| tests.go:13:13:13:13 | capture variable f | tests.go:14:3:14:3 | f | provenance | | +| tests.go:31:5:31:78 | ... := ...[0] | tests.go:32:21:32:21 | f | provenance | | +| tests.go:31:5:31:78 | ... := ...[0] | tests.go:33:29:33:29 | f | provenance | | +| tests.go:32:21:32:21 | f | tests.go:8:24:8:24 | definition of f | provenance | | +| tests.go:33:29:33:29 | f | tests.go:12:32:12:32 | definition of f | provenance | | +| tests.go:45:5:45:76 | ... := ...[0] | tests.go:46:21:46:21 | f | provenance | | +| tests.go:45:5:45:76 | ... := ...[0] | tests.go:47:29:47:29 | f | provenance | | +| tests.go:46:21:46:21 | f | tests.go:8:24:8:24 | definition of f | provenance | | +| tests.go:47:29:47:29 | f | tests.go:12:32:12:32 | definition of f | provenance | | +| tests.go:54:5:54:78 | ... := ...[0] | tests.go:56:3:56:3 | f | provenance | | +| tests.go:66:5:66:76 | ... := ...[0] | tests.go:68:3:68:3 | f | provenance | | +| tests.go:108:5:108:78 | ... := ...[0] | tests.go:110:9:110:9 | f | provenance | | +| tests.go:125:5:125:78 | ... := ...[0] | tests.go:129:3:129:3 | f | provenance | | nodes | tests.go:8:24:8:24 | definition of f | semmle.label | definition of f | | tests.go:9:8:9:8 | f | semmle.label | f | diff --git a/go/ql/test/query-tests/Security/CWE-020/IncompleteHostnameRegexp/IncompleteHostnameRegexp.expected b/go/ql/test/query-tests/Security/CWE-020/IncompleteHostnameRegexp/IncompleteHostnameRegexp.expected index 029366069d2..4486b4e0962 100644 --- a/go/ql/test/query-tests/Security/CWE-020/IncompleteHostnameRegexp/IncompleteHostnameRegexp.expected +++ b/go/ql/test/query-tests/Security/CWE-020/IncompleteHostnameRegexp/IncompleteHostnameRegexp.expected @@ -1,5 +1,5 @@ edges -| IncompleteHostnameRegexp.go:11:8:11:36 | "^((www\|beta).)?example.com/" | IncompleteHostnameRegexp.go:12:38:12:39 | re | +| IncompleteHostnameRegexp.go:11:8:11:36 | "^((www\|beta).)?example.com/" | IncompleteHostnameRegexp.go:12:38:12:39 | re | provenance | | nodes | IncompleteHostnameRegexp.go:11:8:11:36 | "^((www\|beta).)?example.com/" | semmle.label | "^((www\|beta).)?example.com/" | | IncompleteHostnameRegexp.go:12:38:12:39 | re | semmle.label | re | diff --git a/go/ql/test/query-tests/Security/CWE-022/TaintedPath.expected b/go/ql/test/query-tests/Security/CWE-022/TaintedPath.expected index 307906f7e9b..34d4180a849 100644 --- a/go/ql/test/query-tests/Security/CWE-022/TaintedPath.expected +++ b/go/ql/test/query-tests/Security/CWE-022/TaintedPath.expected @@ -1,9 +1,9 @@ edges -| TaintedPath.go:13:18:13:22 | selection of URL | TaintedPath.go:13:18:13:30 | call to Query | -| TaintedPath.go:13:18:13:30 | call to Query | TaintedPath.go:16:29:16:40 | tainted_path | -| TaintedPath.go:13:18:13:30 | call to Query | TaintedPath.go:20:57:20:68 | tainted_path | -| TaintedPath.go:20:57:20:68 | tainted_path | TaintedPath.go:20:28:20:69 | call to Join | -| tst.go:14:2:14:39 | ... := ...[1] | tst.go:17:41:17:56 | selection of Filename | +| TaintedPath.go:13:18:13:22 | selection of URL | TaintedPath.go:13:18:13:30 | call to Query | provenance | | +| TaintedPath.go:13:18:13:30 | call to Query | TaintedPath.go:16:29:16:40 | tainted_path | provenance | | +| TaintedPath.go:13:18:13:30 | call to Query | TaintedPath.go:20:57:20:68 | tainted_path | provenance | | +| TaintedPath.go:20:57:20:68 | tainted_path | TaintedPath.go:20:28:20:69 | call to Join | provenance | | +| tst.go:14:2:14:39 | ... := ...[1] | tst.go:17:41:17:56 | selection of Filename | provenance | | nodes | TaintedPath.go:13:18:13:22 | selection of URL | semmle.label | selection of URL | | TaintedPath.go:13:18:13:30 | call to Query | semmle.label | call to Query | diff --git a/go/ql/test/query-tests/Security/CWE-022/UnsafeUnzipSymlink.expected b/go/ql/test/query-tests/Security/CWE-022/UnsafeUnzipSymlink.expected index da8dc7ed50e..bddeaf06e62 100644 --- a/go/ql/test/query-tests/Security/CWE-022/UnsafeUnzipSymlink.expected +++ b/go/ql/test/query-tests/Security/CWE-022/UnsafeUnzipSymlink.expected @@ -1,8 +1,8 @@ edges -| UnsafeUnzipSymlink.go:111:19:111:26 | definition of linkName | UnsafeUnzipSymlink.go:112:13:112:20 | linkName | -| UnsafeUnzipSymlink.go:111:29:111:36 | definition of fileName | UnsafeUnzipSymlink.go:112:23:112:30 | fileName | -| UnsafeUnzipSymlink.go:126:17:126:31 | selection of Linkname | UnsafeUnzipSymlink.go:111:19:111:26 | definition of linkName | -| UnsafeUnzipSymlink.go:126:34:126:44 | selection of Name | UnsafeUnzipSymlink.go:111:29:111:36 | definition of fileName | +| UnsafeUnzipSymlink.go:111:19:111:26 | definition of linkName | UnsafeUnzipSymlink.go:112:13:112:20 | linkName | provenance | | +| UnsafeUnzipSymlink.go:111:29:111:36 | definition of fileName | UnsafeUnzipSymlink.go:112:23:112:30 | fileName | provenance | | +| UnsafeUnzipSymlink.go:126:17:126:31 | selection of Linkname | UnsafeUnzipSymlink.go:111:19:111:26 | definition of linkName | provenance | | +| UnsafeUnzipSymlink.go:126:34:126:44 | selection of Name | UnsafeUnzipSymlink.go:111:29:111:36 | definition of fileName | provenance | | nodes | UnsafeUnzipSymlink.go:31:15:31:29 | selection of Linkname | semmle.label | selection of Linkname | | UnsafeUnzipSymlink.go:31:32:31:42 | selection of Name | semmle.label | selection of Name | diff --git a/go/ql/test/query-tests/Security/CWE-022/ZipSlip.expected b/go/ql/test/query-tests/Security/CWE-022/ZipSlip.expected index f10f103c963..5ff0ca886c2 100644 --- a/go/ql/test/query-tests/Security/CWE-022/ZipSlip.expected +++ b/go/ql/test/query-tests/Security/CWE-022/ZipSlip.expected @@ -1,16 +1,16 @@ edges -| UnsafeUnzipSymlinkGood.go:52:24:52:32 | definition of candidate | UnsafeUnzipSymlinkGood.go:61:53:61:61 | candidate | -| UnsafeUnzipSymlinkGood.go:61:53:61:61 | candidate | UnsafeUnzipSymlinkGood.go:61:31:61:62 | call to Join | -| UnsafeUnzipSymlinkGood.go:72:3:72:25 | ... := ...[0] | UnsafeUnzipSymlinkGood.go:76:24:76:38 | selection of Linkname | -| UnsafeUnzipSymlinkGood.go:72:3:72:25 | ... := ...[0] | UnsafeUnzipSymlinkGood.go:76:70:76:80 | selection of Name | -| UnsafeUnzipSymlinkGood.go:76:24:76:38 | selection of Linkname | UnsafeUnzipSymlinkGood.go:52:24:52:32 | definition of candidate | -| UnsafeUnzipSymlinkGood.go:76:70:76:80 | selection of Name | UnsafeUnzipSymlinkGood.go:52:24:52:32 | definition of candidate | -| ZipSlip.go:11:2:15:2 | range statement[1] | ZipSlip.go:12:24:12:29 | selection of Name | -| ZipSlip.go:12:3:12:30 | ... := ...[0] | ZipSlip.go:14:20:14:20 | p | -| ZipSlip.go:12:24:12:29 | selection of Name | ZipSlip.go:12:3:12:30 | ... := ...[0] | -| tarslip.go:15:2:15:30 | ... := ...[0] | tarslip.go:16:23:16:33 | selection of Name | -| tarslip.go:16:23:16:33 | selection of Name | tarslip.go:16:14:16:34 | call to Dir | -| tst.go:23:2:43:2 | range statement[1] | tst.go:29:20:29:23 | path | +| UnsafeUnzipSymlinkGood.go:52:24:52:32 | definition of candidate | UnsafeUnzipSymlinkGood.go:61:53:61:61 | candidate | provenance | | +| UnsafeUnzipSymlinkGood.go:61:53:61:61 | candidate | UnsafeUnzipSymlinkGood.go:61:31:61:62 | call to Join | provenance | | +| UnsafeUnzipSymlinkGood.go:72:3:72:25 | ... := ...[0] | UnsafeUnzipSymlinkGood.go:76:24:76:38 | selection of Linkname | provenance | | +| UnsafeUnzipSymlinkGood.go:72:3:72:25 | ... := ...[0] | UnsafeUnzipSymlinkGood.go:76:70:76:80 | selection of Name | provenance | | +| UnsafeUnzipSymlinkGood.go:76:24:76:38 | selection of Linkname | UnsafeUnzipSymlinkGood.go:52:24:52:32 | definition of candidate | provenance | | +| UnsafeUnzipSymlinkGood.go:76:70:76:80 | selection of Name | UnsafeUnzipSymlinkGood.go:52:24:52:32 | definition of candidate | provenance | | +| ZipSlip.go:11:2:15:2 | range statement[1] | ZipSlip.go:12:24:12:29 | selection of Name | provenance | | +| ZipSlip.go:12:3:12:30 | ... := ...[0] | ZipSlip.go:14:20:14:20 | p | provenance | | +| ZipSlip.go:12:24:12:29 | selection of Name | ZipSlip.go:12:3:12:30 | ... := ...[0] | provenance | | +| tarslip.go:15:2:15:30 | ... := ...[0] | tarslip.go:16:23:16:33 | selection of Name | provenance | | +| tarslip.go:16:23:16:33 | selection of Name | tarslip.go:16:14:16:34 | call to Dir | provenance | | +| tst.go:23:2:43:2 | range statement[1] | tst.go:29:20:29:23 | path | provenance | | nodes | UnsafeUnzipSymlinkGood.go:52:24:52:32 | definition of candidate | semmle.label | definition of candidate | | UnsafeUnzipSymlinkGood.go:61:31:61:62 | call to Join | semmle.label | call to Join | diff --git a/go/ql/test/query-tests/Security/CWE-078/CommandInjection.expected b/go/ql/test/query-tests/Security/CWE-078/CommandInjection.expected index 01f6d0a17f6..06df5262ca2 100644 --- a/go/ql/test/query-tests/Security/CWE-078/CommandInjection.expected +++ b/go/ql/test/query-tests/Security/CWE-078/CommandInjection.expected @@ -1,75 +1,75 @@ edges -| ArgumentInjection.go:9:10:9:16 | selection of URL | ArgumentInjection.go:9:10:9:24 | call to Query | -| ArgumentInjection.go:9:10:9:24 | call to Query | ArgumentInjection.go:10:31:10:34 | path | -| CommandInjection.go:9:13:9:19 | selection of URL | CommandInjection.go:9:13:9:27 | call to Query | -| CommandInjection.go:9:13:9:27 | call to Query | CommandInjection.go:10:22:10:28 | cmdName | -| GitSubcommands.go:10:13:10:19 | selection of URL | GitSubcommands.go:10:13:10:27 | call to Query | -| GitSubcommands.go:10:13:10:27 | call to Query | GitSubcommands.go:12:31:12:37 | tainted | -| GitSubcommands.go:10:13:10:27 | call to Query | GitSubcommands.go:13:31:13:37 | tainted | -| GitSubcommands.go:10:13:10:27 | call to Query | GitSubcommands.go:14:30:14:36 | tainted | -| GitSubcommands.go:10:13:10:27 | call to Query | GitSubcommands.go:15:35:15:41 | tainted | -| GitSubcommands.go:10:13:10:27 | call to Query | GitSubcommands.go:16:36:16:42 | tainted | -| SanitizingDoubleDash.go:9:13:9:19 | selection of URL | SanitizingDoubleDash.go:9:13:9:27 | call to Query | -| SanitizingDoubleDash.go:9:13:9:27 | call to Query | SanitizingDoubleDash.go:13:25:13:31 | tainted | -| SanitizingDoubleDash.go:9:13:9:27 | call to Query | SanitizingDoubleDash.go:14:23:14:33 | slice expression | -| SanitizingDoubleDash.go:9:13:9:27 | call to Query | SanitizingDoubleDash.go:39:31:39:37 | tainted | -| SanitizingDoubleDash.go:9:13:9:27 | call to Query | SanitizingDoubleDash.go:53:21:53:28 | arrayLit | -| SanitizingDoubleDash.go:9:13:9:27 | call to Query | SanitizingDoubleDash.go:68:31:68:37 | tainted | -| SanitizingDoubleDash.go:9:13:9:27 | call to Query | SanitizingDoubleDash.go:80:23:80:29 | tainted | -| SanitizingDoubleDash.go:13:15:13:32 | array literal [array] | SanitizingDoubleDash.go:14:23:14:30 | arrayLit [array] | -| SanitizingDoubleDash.go:13:25:13:31 | tainted | SanitizingDoubleDash.go:13:15:13:32 | array literal [array] | -| SanitizingDoubleDash.go:14:23:14:30 | arrayLit [array] | SanitizingDoubleDash.go:14:23:14:33 | slice element node | -| SanitizingDoubleDash.go:14:23:14:33 | slice element node | SanitizingDoubleDash.go:14:23:14:33 | slice expression [array] | -| SanitizingDoubleDash.go:14:23:14:33 | slice expression [array] | SanitizingDoubleDash.go:14:23:14:33 | slice expression | -| SanitizingDoubleDash.go:39:14:39:44 | call to append | SanitizingDoubleDash.go:40:23:40:30 | arrayLit | -| SanitizingDoubleDash.go:39:31:39:37 | tainted | SanitizingDoubleDash.go:39:14:39:44 | call to append | -| SanitizingDoubleDash.go:53:14:53:35 | call to append | SanitizingDoubleDash.go:54:23:54:30 | arrayLit | -| SanitizingDoubleDash.go:53:21:53:28 | arrayLit | SanitizingDoubleDash.go:53:14:53:35 | call to append | -| SanitizingDoubleDash.go:68:14:68:38 | call to append | SanitizingDoubleDash.go:69:21:69:28 | arrayLit | -| SanitizingDoubleDash.go:68:31:68:37 | tainted | SanitizingDoubleDash.go:68:14:68:38 | call to append | -| SanitizingDoubleDash.go:69:14:69:35 | call to append | SanitizingDoubleDash.go:70:23:70:30 | arrayLit | -| SanitizingDoubleDash.go:69:21:69:28 | arrayLit | SanitizingDoubleDash.go:69:14:69:35 | call to append | -| SanitizingDoubleDash.go:92:13:92:19 | selection of URL | SanitizingDoubleDash.go:92:13:92:27 | call to Query | -| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:95:25:95:31 | tainted | -| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:96:24:96:34 | slice expression | -| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:100:31:100:37 | tainted | -| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:101:24:101:34 | slice expression | -| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:105:30:105:36 | tainted | -| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:106:24:106:31 | arrayLit | -| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:111:37:111:43 | tainted | -| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:117:31:117:37 | tainted | -| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:123:31:123:37 | tainted | -| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:129:21:129:28 | arrayLit | -| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:136:31:136:37 | tainted | -| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:142:31:142:37 | tainted | -| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:148:30:148:36 | tainted | -| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:152:24:152:30 | tainted | -| SanitizingDoubleDash.go:95:15:95:32 | array literal [array] | SanitizingDoubleDash.go:96:24:96:31 | arrayLit [array] | -| SanitizingDoubleDash.go:95:25:95:31 | tainted | SanitizingDoubleDash.go:95:15:95:32 | array literal [array] | -| SanitizingDoubleDash.go:96:24:96:31 | arrayLit [array] | SanitizingDoubleDash.go:96:24:96:34 | slice element node | -| SanitizingDoubleDash.go:96:24:96:34 | slice element node | SanitizingDoubleDash.go:96:24:96:34 | slice expression [array] | -| SanitizingDoubleDash.go:96:24:96:34 | slice expression [array] | SanitizingDoubleDash.go:96:24:96:34 | slice expression | -| SanitizingDoubleDash.go:100:15:100:38 | array literal [array] | SanitizingDoubleDash.go:101:24:101:31 | arrayLit [array] | -| SanitizingDoubleDash.go:100:31:100:37 | tainted | SanitizingDoubleDash.go:100:15:100:38 | array literal [array] | -| SanitizingDoubleDash.go:101:24:101:31 | arrayLit [array] | SanitizingDoubleDash.go:101:24:101:34 | slice element node | -| SanitizingDoubleDash.go:101:24:101:34 | slice element node | SanitizingDoubleDash.go:101:24:101:34 | slice expression [array] | -| SanitizingDoubleDash.go:101:24:101:34 | slice expression [array] | SanitizingDoubleDash.go:101:24:101:34 | slice expression | -| SanitizingDoubleDash.go:105:15:105:37 | slice literal [array] | SanitizingDoubleDash.go:106:24:106:31 | arrayLit | -| SanitizingDoubleDash.go:105:30:105:36 | tainted | SanitizingDoubleDash.go:105:15:105:37 | slice literal [array] | -| SanitizingDoubleDash.go:111:14:111:44 | call to append | SanitizingDoubleDash.go:112:24:112:31 | arrayLit | -| SanitizingDoubleDash.go:111:37:111:43 | tainted | SanitizingDoubleDash.go:111:14:111:44 | call to append | -| SanitizingDoubleDash.go:117:14:117:44 | call to append | SanitizingDoubleDash.go:118:24:118:31 | arrayLit | -| SanitizingDoubleDash.go:117:31:117:37 | tainted | SanitizingDoubleDash.go:117:14:117:44 | call to append | -| SanitizingDoubleDash.go:123:14:123:38 | call to append | SanitizingDoubleDash.go:124:24:124:31 | arrayLit | -| SanitizingDoubleDash.go:123:31:123:37 | tainted | SanitizingDoubleDash.go:123:14:123:38 | call to append | -| SanitizingDoubleDash.go:129:14:129:35 | call to append | SanitizingDoubleDash.go:130:24:130:31 | arrayLit | -| SanitizingDoubleDash.go:129:21:129:28 | arrayLit | SanitizingDoubleDash.go:129:14:129:35 | call to append | -| SanitizingDoubleDash.go:136:14:136:38 | call to append | SanitizingDoubleDash.go:137:24:137:31 | arrayLit | -| SanitizingDoubleDash.go:136:31:136:37 | tainted | SanitizingDoubleDash.go:136:14:136:38 | call to append | -| SanitizingDoubleDash.go:142:14:142:38 | call to append | SanitizingDoubleDash.go:143:21:143:28 | arrayLit | -| SanitizingDoubleDash.go:142:31:142:37 | tainted | SanitizingDoubleDash.go:142:14:142:38 | call to append | -| SanitizingDoubleDash.go:143:14:143:35 | call to append | SanitizingDoubleDash.go:144:24:144:31 | arrayLit | -| SanitizingDoubleDash.go:143:21:143:28 | arrayLit | SanitizingDoubleDash.go:143:14:143:35 | call to append | +| ArgumentInjection.go:9:10:9:16 | selection of URL | ArgumentInjection.go:9:10:9:24 | call to Query | provenance | | +| ArgumentInjection.go:9:10:9:24 | call to Query | ArgumentInjection.go:10:31:10:34 | path | provenance | | +| CommandInjection.go:9:13:9:19 | selection of URL | CommandInjection.go:9:13:9:27 | call to Query | provenance | | +| CommandInjection.go:9:13:9:27 | call to Query | CommandInjection.go:10:22:10:28 | cmdName | provenance | | +| GitSubcommands.go:10:13:10:19 | selection of URL | GitSubcommands.go:10:13:10:27 | call to Query | provenance | | +| GitSubcommands.go:10:13:10:27 | call to Query | GitSubcommands.go:12:31:12:37 | tainted | provenance | | +| GitSubcommands.go:10:13:10:27 | call to Query | GitSubcommands.go:13:31:13:37 | tainted | provenance | | +| GitSubcommands.go:10:13:10:27 | call to Query | GitSubcommands.go:14:30:14:36 | tainted | provenance | | +| GitSubcommands.go:10:13:10:27 | call to Query | GitSubcommands.go:15:35:15:41 | tainted | provenance | | +| GitSubcommands.go:10:13:10:27 | call to Query | GitSubcommands.go:16:36:16:42 | tainted | provenance | | +| SanitizingDoubleDash.go:9:13:9:19 | selection of URL | SanitizingDoubleDash.go:9:13:9:27 | call to Query | provenance | | +| SanitizingDoubleDash.go:9:13:9:27 | call to Query | SanitizingDoubleDash.go:13:25:13:31 | tainted | provenance | | +| SanitizingDoubleDash.go:9:13:9:27 | call to Query | SanitizingDoubleDash.go:14:23:14:33 | slice expression | provenance | | +| SanitizingDoubleDash.go:9:13:9:27 | call to Query | SanitizingDoubleDash.go:39:31:39:37 | tainted | provenance | | +| SanitizingDoubleDash.go:9:13:9:27 | call to Query | SanitizingDoubleDash.go:53:21:53:28 | arrayLit | provenance | | +| SanitizingDoubleDash.go:9:13:9:27 | call to Query | SanitizingDoubleDash.go:68:31:68:37 | tainted | provenance | | +| SanitizingDoubleDash.go:9:13:9:27 | call to Query | SanitizingDoubleDash.go:80:23:80:29 | tainted | provenance | | +| SanitizingDoubleDash.go:13:15:13:32 | array literal [array] | SanitizingDoubleDash.go:14:23:14:30 | arrayLit [array] | provenance | | +| SanitizingDoubleDash.go:13:25:13:31 | tainted | SanitizingDoubleDash.go:13:15:13:32 | array literal [array] | provenance | | +| SanitizingDoubleDash.go:14:23:14:30 | arrayLit [array] | SanitizingDoubleDash.go:14:23:14:33 | slice element node | provenance | | +| SanitizingDoubleDash.go:14:23:14:33 | slice element node | SanitizingDoubleDash.go:14:23:14:33 | slice expression [array] | provenance | | +| SanitizingDoubleDash.go:14:23:14:33 | slice expression [array] | SanitizingDoubleDash.go:14:23:14:33 | slice expression | provenance | | +| SanitizingDoubleDash.go:39:14:39:44 | call to append | SanitizingDoubleDash.go:40:23:40:30 | arrayLit | provenance | | +| SanitizingDoubleDash.go:39:31:39:37 | tainted | SanitizingDoubleDash.go:39:14:39:44 | call to append | provenance | | +| SanitizingDoubleDash.go:53:14:53:35 | call to append | SanitizingDoubleDash.go:54:23:54:30 | arrayLit | provenance | | +| SanitizingDoubleDash.go:53:21:53:28 | arrayLit | SanitizingDoubleDash.go:53:14:53:35 | call to append | provenance | | +| SanitizingDoubleDash.go:68:14:68:38 | call to append | SanitizingDoubleDash.go:69:21:69:28 | arrayLit | provenance | | +| SanitizingDoubleDash.go:68:31:68:37 | tainted | SanitizingDoubleDash.go:68:14:68:38 | call to append | provenance | | +| SanitizingDoubleDash.go:69:14:69:35 | call to append | SanitizingDoubleDash.go:70:23:70:30 | arrayLit | provenance | | +| SanitizingDoubleDash.go:69:21:69:28 | arrayLit | SanitizingDoubleDash.go:69:14:69:35 | call to append | provenance | | +| SanitizingDoubleDash.go:92:13:92:19 | selection of URL | SanitizingDoubleDash.go:92:13:92:27 | call to Query | provenance | | +| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:95:25:95:31 | tainted | provenance | | +| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:96:24:96:34 | slice expression | provenance | | +| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:100:31:100:37 | tainted | provenance | | +| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:101:24:101:34 | slice expression | provenance | | +| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:105:30:105:36 | tainted | provenance | | +| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:106:24:106:31 | arrayLit | provenance | | +| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:111:37:111:43 | tainted | provenance | | +| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:117:31:117:37 | tainted | provenance | | +| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:123:31:123:37 | tainted | provenance | | +| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:129:21:129:28 | arrayLit | provenance | | +| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:136:31:136:37 | tainted | provenance | | +| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:142:31:142:37 | tainted | provenance | | +| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:148:30:148:36 | tainted | provenance | | +| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:152:24:152:30 | tainted | provenance | | +| SanitizingDoubleDash.go:95:15:95:32 | array literal [array] | SanitizingDoubleDash.go:96:24:96:31 | arrayLit [array] | provenance | | +| SanitizingDoubleDash.go:95:25:95:31 | tainted | SanitizingDoubleDash.go:95:15:95:32 | array literal [array] | provenance | | +| SanitizingDoubleDash.go:96:24:96:31 | arrayLit [array] | SanitizingDoubleDash.go:96:24:96:34 | slice element node | provenance | | +| SanitizingDoubleDash.go:96:24:96:34 | slice element node | SanitizingDoubleDash.go:96:24:96:34 | slice expression [array] | provenance | | +| SanitizingDoubleDash.go:96:24:96:34 | slice expression [array] | SanitizingDoubleDash.go:96:24:96:34 | slice expression | provenance | | +| SanitizingDoubleDash.go:100:15:100:38 | array literal [array] | SanitizingDoubleDash.go:101:24:101:31 | arrayLit [array] | provenance | | +| SanitizingDoubleDash.go:100:31:100:37 | tainted | SanitizingDoubleDash.go:100:15:100:38 | array literal [array] | provenance | | +| SanitizingDoubleDash.go:101:24:101:31 | arrayLit [array] | SanitizingDoubleDash.go:101:24:101:34 | slice element node | provenance | | +| SanitizingDoubleDash.go:101:24:101:34 | slice element node | SanitizingDoubleDash.go:101:24:101:34 | slice expression [array] | provenance | | +| SanitizingDoubleDash.go:101:24:101:34 | slice expression [array] | SanitizingDoubleDash.go:101:24:101:34 | slice expression | provenance | | +| SanitizingDoubleDash.go:105:15:105:37 | slice literal [array] | SanitizingDoubleDash.go:106:24:106:31 | arrayLit | provenance | | +| SanitizingDoubleDash.go:105:30:105:36 | tainted | SanitizingDoubleDash.go:105:15:105:37 | slice literal [array] | provenance | | +| SanitizingDoubleDash.go:111:14:111:44 | call to append | SanitizingDoubleDash.go:112:24:112:31 | arrayLit | provenance | | +| SanitizingDoubleDash.go:111:37:111:43 | tainted | SanitizingDoubleDash.go:111:14:111:44 | call to append | provenance | | +| SanitizingDoubleDash.go:117:14:117:44 | call to append | SanitizingDoubleDash.go:118:24:118:31 | arrayLit | provenance | | +| SanitizingDoubleDash.go:117:31:117:37 | tainted | SanitizingDoubleDash.go:117:14:117:44 | call to append | provenance | | +| SanitizingDoubleDash.go:123:14:123:38 | call to append | SanitizingDoubleDash.go:124:24:124:31 | arrayLit | provenance | | +| SanitizingDoubleDash.go:123:31:123:37 | tainted | SanitizingDoubleDash.go:123:14:123:38 | call to append | provenance | | +| SanitizingDoubleDash.go:129:14:129:35 | call to append | SanitizingDoubleDash.go:130:24:130:31 | arrayLit | provenance | | +| SanitizingDoubleDash.go:129:21:129:28 | arrayLit | SanitizingDoubleDash.go:129:14:129:35 | call to append | provenance | | +| SanitizingDoubleDash.go:136:14:136:38 | call to append | SanitizingDoubleDash.go:137:24:137:31 | arrayLit | provenance | | +| SanitizingDoubleDash.go:136:31:136:37 | tainted | SanitizingDoubleDash.go:136:14:136:38 | call to append | provenance | | +| SanitizingDoubleDash.go:142:14:142:38 | call to append | SanitizingDoubleDash.go:143:21:143:28 | arrayLit | provenance | | +| SanitizingDoubleDash.go:142:31:142:37 | tainted | SanitizingDoubleDash.go:142:14:142:38 | call to append | provenance | | +| SanitizingDoubleDash.go:143:14:143:35 | call to append | SanitizingDoubleDash.go:144:24:144:31 | arrayLit | provenance | | +| SanitizingDoubleDash.go:143:21:143:28 | arrayLit | SanitizingDoubleDash.go:143:14:143:35 | call to append | provenance | | nodes | ArgumentInjection.go:9:10:9:16 | selection of URL | semmle.label | selection of URL | | ArgumentInjection.go:9:10:9:24 | call to Query | semmle.label | call to Query | diff --git a/go/ql/test/query-tests/Security/CWE-078/StoredCommand.expected b/go/ql/test/query-tests/Security/CWE-078/StoredCommand.expected index e0e028fff91..4bdeaa67be0 100644 --- a/go/ql/test/query-tests/Security/CWE-078/StoredCommand.expected +++ b/go/ql/test/query-tests/Security/CWE-078/StoredCommand.expected @@ -1,8 +1,8 @@ edges -| StoredCommand.go:11:2:11:27 | ... := ...[0] | StoredCommand.go:13:2:13:5 | rows | -| StoredCommand.go:13:2:13:5 | rows | StoredCommand.go:13:12:13:19 | &... | -| StoredCommand.go:13:12:13:19 | &... | StoredCommand.go:13:12:13:19 | &... | -| StoredCommand.go:13:12:13:19 | &... | StoredCommand.go:14:22:14:28 | cmdName | +| StoredCommand.go:11:2:11:27 | ... := ...[0] | StoredCommand.go:13:2:13:5 | rows | provenance | | +| StoredCommand.go:13:2:13:5 | rows | StoredCommand.go:13:12:13:19 | &... | provenance | | +| StoredCommand.go:13:12:13:19 | &... | StoredCommand.go:13:12:13:19 | &... | provenance | | +| StoredCommand.go:13:12:13:19 | &... | StoredCommand.go:14:22:14:28 | cmdName | provenance | | nodes | StoredCommand.go:11:2:11:27 | ... := ...[0] | semmle.label | ... := ...[0] | | StoredCommand.go:13:2:13:5 | rows | semmle.label | rows | diff --git a/go/ql/test/query-tests/Security/CWE-079/ReflectedXss.expected b/go/ql/test/query-tests/Security/CWE-079/ReflectedXss.expected index 81144cc3c86..634c21befb3 100644 --- a/go/ql/test/query-tests/Security/CWE-079/ReflectedXss.expected +++ b/go/ql/test/query-tests/Security/CWE-079/ReflectedXss.expected @@ -1,52 +1,52 @@ edges -| ReflectedXss.go:11:15:11:20 | selection of Form | ReflectedXss.go:11:15:11:36 | call to Get | -| ReflectedXss.go:11:15:11:36 | call to Get | ReflectedXss.go:14:44:14:51 | username | -| contenttype.go:11:11:11:16 | selection of Form | contenttype.go:11:11:11:28 | call to Get | -| contenttype.go:11:11:11:28 | call to Get | contenttype.go:17:11:17:22 | type conversion | -| contenttype.go:49:11:49:16 | selection of Form | contenttype.go:49:11:49:28 | call to Get | -| contenttype.go:49:11:49:28 | call to Get | contenttype.go:53:34:53:37 | data | -| contenttype.go:63:10:63:28 | call to FormValue | contenttype.go:64:52:64:55 | data | -| contenttype.go:73:10:73:28 | call to FormValue | contenttype.go:79:11:79:14 | data | -| contenttype.go:88:10:88:28 | call to FormValue | contenttype.go:91:4:91:7 | data | -| contenttype.go:113:10:113:28 | call to FormValue | contenttype.go:114:50:114:53 | data | -| reflectedxsstest.go:31:2:31:44 | ... := ...[0] | reflectedxsstest.go:32:34:32:37 | file | -| reflectedxsstest.go:31:2:31:44 | ... := ...[1] | reflectedxsstest.go:34:46:34:60 | selection of Filename | -| reflectedxsstest.go:32:2:32:38 | ... := ...[0] | reflectedxsstest.go:33:49:33:55 | content | -| reflectedxsstest.go:32:34:32:37 | file | reflectedxsstest.go:32:2:32:38 | ... := ...[0] | -| reflectedxsstest.go:33:17:33:56 | []type{args} [array] | reflectedxsstest.go:33:17:33:56 | call to Sprintf | -| reflectedxsstest.go:33:17:33:56 | call to Sprintf | reflectedxsstest.go:33:10:33:57 | type conversion | -| reflectedxsstest.go:33:49:33:55 | content | reflectedxsstest.go:33:17:33:56 | []type{args} [array] | -| reflectedxsstest.go:33:49:33:55 | content | reflectedxsstest.go:33:17:33:56 | call to Sprintf | -| reflectedxsstest.go:34:17:34:61 | []type{args} [array] | reflectedxsstest.go:34:17:34:61 | call to Sprintf | -| reflectedxsstest.go:34:17:34:61 | call to Sprintf | reflectedxsstest.go:34:10:34:62 | type conversion | -| reflectedxsstest.go:34:46:34:60 | selection of Filename | reflectedxsstest.go:34:17:34:61 | []type{args} [array] | -| reflectedxsstest.go:34:46:34:60 | selection of Filename | reflectedxsstest.go:34:17:34:61 | call to Sprintf | -| reflectedxsstest.go:38:2:38:35 | ... := ...[0] | reflectedxsstest.go:39:16:39:21 | reader | -| reflectedxsstest.go:39:2:39:32 | ... := ...[0] | reflectedxsstest.go:40:14:40:17 | part | -| reflectedxsstest.go:39:2:39:32 | ... := ...[0] | reflectedxsstest.go:42:2:42:5 | part | -| reflectedxsstest.go:39:16:39:21 | reader | reflectedxsstest.go:39:2:39:32 | ... := ...[0] | -| reflectedxsstest.go:40:14:40:17 | part | reflectedxsstest.go:40:14:40:28 | call to FileName | -| reflectedxsstest.go:40:14:40:28 | call to FileName | reflectedxsstest.go:44:46:44:53 | partName | -| reflectedxsstest.go:41:2:41:10 | definition of byteSlice | reflectedxsstest.go:45:10:45:18 | byteSlice | -| reflectedxsstest.go:42:2:42:5 | part | reflectedxsstest.go:41:2:41:10 | definition of byteSlice | -| reflectedxsstest.go:44:17:44:54 | []type{args} [array] | reflectedxsstest.go:44:17:44:54 | call to Sprintf | -| reflectedxsstest.go:44:17:44:54 | call to Sprintf | reflectedxsstest.go:44:10:44:55 | type conversion | -| reflectedxsstest.go:44:46:44:53 | partName | reflectedxsstest.go:44:17:44:54 | []type{args} [array] | -| reflectedxsstest.go:44:46:44:53 | partName | reflectedxsstest.go:44:17:44:54 | call to Sprintf | -| reflectedxsstest.go:51:14:51:18 | selection of URL | reflectedxsstest.go:51:14:51:26 | call to Query | -| reflectedxsstest.go:51:14:51:26 | call to Query | reflectedxsstest.go:54:11:54:21 | type conversion | -| tst.go:14:15:14:20 | selection of Form | tst.go:14:15:14:36 | call to Get | -| tst.go:14:15:14:36 | call to Get | tst.go:18:32:18:32 | a | -| tst.go:18:19:18:38 | call to Join | tst.go:18:12:18:39 | type conversion | -| tst.go:18:32:18:32 | a | tst.go:18:19:18:38 | call to Join | -| tst.go:48:14:48:19 | selection of Form | tst.go:48:14:48:34 | call to Get | -| tst.go:48:14:48:34 | call to Get | tst.go:53:12:53:26 | type conversion | -| websocketXss.go:30:7:30:10 | definition of xnet | websocketXss.go:32:24:32:27 | xnet | -| websocketXss.go:34:3:34:7 | definition of xnet2 | websocketXss.go:36:24:36:28 | xnet2 | -| websocketXss.go:40:3:40:40 | ... := ...[1] | websocketXss.go:41:24:41:29 | nhooyr | -| websocketXss.go:46:7:46:16 | definition of gorillaMsg | websocketXss.go:48:24:48:33 | gorillaMsg | -| websocketXss.go:50:3:50:10 | definition of gorilla2 | websocketXss.go:52:24:52:31 | gorilla2 | -| websocketXss.go:54:3:54:38 | ... := ...[1] | websocketXss.go:55:24:55:31 | gorilla3 | +| ReflectedXss.go:11:15:11:20 | selection of Form | ReflectedXss.go:11:15:11:36 | call to Get | provenance | | +| ReflectedXss.go:11:15:11:36 | call to Get | ReflectedXss.go:14:44:14:51 | username | provenance | | +| contenttype.go:11:11:11:16 | selection of Form | contenttype.go:11:11:11:28 | call to Get | provenance | | +| contenttype.go:11:11:11:28 | call to Get | contenttype.go:17:11:17:22 | type conversion | provenance | | +| contenttype.go:49:11:49:16 | selection of Form | contenttype.go:49:11:49:28 | call to Get | provenance | | +| contenttype.go:49:11:49:28 | call to Get | contenttype.go:53:34:53:37 | data | provenance | | +| contenttype.go:63:10:63:28 | call to FormValue | contenttype.go:64:52:64:55 | data | provenance | | +| contenttype.go:73:10:73:28 | call to FormValue | contenttype.go:79:11:79:14 | data | provenance | | +| contenttype.go:88:10:88:28 | call to FormValue | contenttype.go:91:4:91:7 | data | provenance | | +| contenttype.go:113:10:113:28 | call to FormValue | contenttype.go:114:50:114:53 | data | provenance | | +| reflectedxsstest.go:31:2:31:44 | ... := ...[0] | reflectedxsstest.go:32:34:32:37 | file | provenance | | +| reflectedxsstest.go:31:2:31:44 | ... := ...[1] | reflectedxsstest.go:34:46:34:60 | selection of Filename | provenance | | +| reflectedxsstest.go:32:2:32:38 | ... := ...[0] | reflectedxsstest.go:33:49:33:55 | content | provenance | | +| reflectedxsstest.go:32:34:32:37 | file | reflectedxsstest.go:32:2:32:38 | ... := ...[0] | provenance | | +| reflectedxsstest.go:33:17:33:56 | []type{args} [array] | reflectedxsstest.go:33:17:33:56 | call to Sprintf | provenance | | +| reflectedxsstest.go:33:17:33:56 | call to Sprintf | reflectedxsstest.go:33:10:33:57 | type conversion | provenance | | +| reflectedxsstest.go:33:49:33:55 | content | reflectedxsstest.go:33:17:33:56 | []type{args} [array] | provenance | | +| reflectedxsstest.go:33:49:33:55 | content | reflectedxsstest.go:33:17:33:56 | call to Sprintf | provenance | | +| reflectedxsstest.go:34:17:34:61 | []type{args} [array] | reflectedxsstest.go:34:17:34:61 | call to Sprintf | provenance | | +| reflectedxsstest.go:34:17:34:61 | call to Sprintf | reflectedxsstest.go:34:10:34:62 | type conversion | provenance | | +| reflectedxsstest.go:34:46:34:60 | selection of Filename | reflectedxsstest.go:34:17:34:61 | []type{args} [array] | provenance | | +| reflectedxsstest.go:34:46:34:60 | selection of Filename | reflectedxsstest.go:34:17:34:61 | call to Sprintf | provenance | | +| reflectedxsstest.go:38:2:38:35 | ... := ...[0] | reflectedxsstest.go:39:16:39:21 | reader | provenance | | +| reflectedxsstest.go:39:2:39:32 | ... := ...[0] | reflectedxsstest.go:40:14:40:17 | part | provenance | | +| reflectedxsstest.go:39:2:39:32 | ... := ...[0] | reflectedxsstest.go:42:2:42:5 | part | provenance | | +| reflectedxsstest.go:39:16:39:21 | reader | reflectedxsstest.go:39:2:39:32 | ... := ...[0] | provenance | | +| reflectedxsstest.go:40:14:40:17 | part | reflectedxsstest.go:40:14:40:28 | call to FileName | provenance | | +| reflectedxsstest.go:40:14:40:28 | call to FileName | reflectedxsstest.go:44:46:44:53 | partName | provenance | | +| reflectedxsstest.go:41:2:41:10 | definition of byteSlice | reflectedxsstest.go:45:10:45:18 | byteSlice | provenance | | +| reflectedxsstest.go:42:2:42:5 | part | reflectedxsstest.go:41:2:41:10 | definition of byteSlice | provenance | | +| reflectedxsstest.go:44:17:44:54 | []type{args} [array] | reflectedxsstest.go:44:17:44:54 | call to Sprintf | provenance | | +| reflectedxsstest.go:44:17:44:54 | call to Sprintf | reflectedxsstest.go:44:10:44:55 | type conversion | provenance | | +| reflectedxsstest.go:44:46:44:53 | partName | reflectedxsstest.go:44:17:44:54 | []type{args} [array] | provenance | | +| reflectedxsstest.go:44:46:44:53 | partName | reflectedxsstest.go:44:17:44:54 | call to Sprintf | provenance | | +| reflectedxsstest.go:51:14:51:18 | selection of URL | reflectedxsstest.go:51:14:51:26 | call to Query | provenance | | +| reflectedxsstest.go:51:14:51:26 | call to Query | reflectedxsstest.go:54:11:54:21 | type conversion | provenance | | +| tst.go:14:15:14:20 | selection of Form | tst.go:14:15:14:36 | call to Get | provenance | | +| tst.go:14:15:14:36 | call to Get | tst.go:18:32:18:32 | a | provenance | | +| tst.go:18:19:18:38 | call to Join | tst.go:18:12:18:39 | type conversion | provenance | | +| tst.go:18:32:18:32 | a | tst.go:18:19:18:38 | call to Join | provenance | | +| tst.go:48:14:48:19 | selection of Form | tst.go:48:14:48:34 | call to Get | provenance | | +| tst.go:48:14:48:34 | call to Get | tst.go:53:12:53:26 | type conversion | provenance | | +| websocketXss.go:30:7:30:10 | definition of xnet | websocketXss.go:32:24:32:27 | xnet | provenance | | +| websocketXss.go:34:3:34:7 | definition of xnet2 | websocketXss.go:36:24:36:28 | xnet2 | provenance | | +| websocketXss.go:40:3:40:40 | ... := ...[1] | websocketXss.go:41:24:41:29 | nhooyr | provenance | | +| websocketXss.go:46:7:46:16 | definition of gorillaMsg | websocketXss.go:48:24:48:33 | gorillaMsg | provenance | | +| websocketXss.go:50:3:50:10 | definition of gorilla2 | websocketXss.go:52:24:52:31 | gorilla2 | provenance | | +| websocketXss.go:54:3:54:38 | ... := ...[1] | websocketXss.go:55:24:55:31 | gorilla3 | provenance | | nodes | ReflectedXss.go:11:15:11:20 | selection of Form | semmle.label | selection of Form | | ReflectedXss.go:11:15:11:36 | call to Get | semmle.label | call to Get | diff --git a/go/ql/test/query-tests/Security/CWE-079/StoredXss.expected b/go/ql/test/query-tests/Security/CWE-079/StoredXss.expected index f51eda4c93c..c399840db9a 100644 --- a/go/ql/test/query-tests/Security/CWE-079/StoredXss.expected +++ b/go/ql/test/query-tests/Security/CWE-079/StoredXss.expected @@ -1,10 +1,10 @@ edges -| StoredXss.go:13:21:13:31 | call to Name | StoredXss.go:13:21:13:36 | ...+... | -| stored.go:18:3:18:28 | ... := ...[0] | stored.go:25:14:25:17 | rows | -| stored.go:25:14:25:17 | rows | stored.go:25:29:25:33 | &... | -| stored.go:25:29:25:33 | &... | stored.go:25:29:25:33 | &... | -| stored.go:25:29:25:33 | &... | stored.go:30:22:30:25 | name | -| stored.go:59:30:59:33 | definition of path | stored.go:61:22:61:25 | path | +| StoredXss.go:13:21:13:31 | call to Name | StoredXss.go:13:21:13:36 | ...+... | provenance | | +| stored.go:18:3:18:28 | ... := ...[0] | stored.go:25:14:25:17 | rows | provenance | | +| stored.go:25:14:25:17 | rows | stored.go:25:29:25:33 | &... | provenance | | +| stored.go:25:29:25:33 | &... | stored.go:25:29:25:33 | &... | provenance | | +| stored.go:25:29:25:33 | &... | stored.go:30:22:30:25 | name | provenance | | +| stored.go:59:30:59:33 | definition of path | stored.go:61:22:61:25 | path | provenance | | nodes | StoredXss.go:13:21:13:31 | call to Name | semmle.label | call to Name | | StoredXss.go:13:21:13:36 | ...+... | semmle.label | ...+... | diff --git a/go/ql/test/query-tests/Security/CWE-089/SqlInjection.expected b/go/ql/test/query-tests/Security/CWE-089/SqlInjection.expected index 43bbd3a3fe7..066f4a272f0 100644 --- a/go/ql/test/query-tests/Security/CWE-089/SqlInjection.expected +++ b/go/ql/test/query-tests/Security/CWE-089/SqlInjection.expected @@ -1,112 +1,112 @@ edges -| SqlInjection.go:10:7:11:30 | []type{args} [array] | SqlInjection.go:10:7:11:30 | call to Sprintf | -| SqlInjection.go:10:7:11:30 | call to Sprintf | SqlInjection.go:12:11:12:11 | q | -| SqlInjection.go:11:3:11:9 | selection of URL | SqlInjection.go:11:3:11:17 | call to Query | -| SqlInjection.go:11:3:11:17 | call to Query | SqlInjection.go:11:3:11:29 | index expression | -| SqlInjection.go:11:3:11:29 | index expression | SqlInjection.go:10:7:11:30 | []type{args} [array] | -| SqlInjection.go:11:3:11:29 | index expression | SqlInjection.go:10:7:11:30 | call to Sprintf | -| issue48.go:17:2:17:33 | ... := ...[0] | issue48.go:18:17:18:17 | b | -| issue48.go:17:25:17:32 | selection of Body | issue48.go:17:2:17:33 | ... := ...[0] | -| issue48.go:18:17:18:17 | b | issue48.go:18:20:18:39 | &... | -| issue48.go:18:20:18:39 | &... | issue48.go:21:3:21:33 | index expression | -| issue48.go:20:8:21:34 | []type{args} [array] | issue48.go:20:8:21:34 | call to Sprintf | -| issue48.go:20:8:21:34 | call to Sprintf | issue48.go:22:11:22:12 | q3 | -| issue48.go:21:3:21:33 | index expression | issue48.go:20:8:21:34 | []type{args} [array] | -| issue48.go:21:3:21:33 | index expression | issue48.go:20:8:21:34 | call to Sprintf | -| issue48.go:27:2:27:34 | ... := ...[0] | issue48.go:28:17:28:18 | b2 | -| issue48.go:27:26:27:33 | selection of Body | issue48.go:27:2:27:34 | ... := ...[0] | -| issue48.go:28:17:28:18 | b2 | issue48.go:28:21:28:41 | &... | -| issue48.go:28:21:28:41 | &... | issue48.go:31:3:31:31 | selection of Category | -| issue48.go:30:8:31:32 | []type{args} [array] | issue48.go:30:8:31:32 | call to Sprintf | -| issue48.go:30:8:31:32 | call to Sprintf | issue48.go:32:11:32:12 | q4 | -| issue48.go:31:3:31:31 | selection of Category | issue48.go:30:8:31:32 | []type{args} [array] | -| issue48.go:31:3:31:31 | selection of Category | issue48.go:30:8:31:32 | call to Sprintf | -| issue48.go:37:17:37:50 | type conversion | issue48.go:37:53:37:73 | &... | -| issue48.go:37:24:37:30 | selection of URL | issue48.go:37:24:37:38 | call to Query | -| issue48.go:37:24:37:38 | call to Query | issue48.go:37:17:37:50 | type conversion | -| issue48.go:37:53:37:73 | &... | issue48.go:40:3:40:31 | selection of Category | -| issue48.go:39:8:40:32 | []type{args} [array] | issue48.go:39:8:40:32 | call to Sprintf | -| issue48.go:39:8:40:32 | call to Sprintf | issue48.go:41:11:41:12 | q5 | -| issue48.go:40:3:40:31 | selection of Category | issue48.go:39:8:40:32 | []type{args} [array] | -| issue48.go:40:3:40:31 | selection of Category | issue48.go:39:8:40:32 | call to Sprintf | -| main.go:11:11:11:16 | selection of Form | main.go:11:11:11:28 | index expression | -| main.go:15:11:15:84 | []type{args} [array] | main.go:15:11:15:84 | call to Sprintf | -| main.go:15:63:15:67 | selection of URL | main.go:15:63:15:75 | call to Query | -| main.go:15:63:15:75 | call to Query | main.go:15:63:15:83 | index expression | -| main.go:15:63:15:83 | index expression | main.go:15:11:15:84 | []type{args} [array] | -| main.go:15:63:15:83 | index expression | main.go:15:11:15:84 | call to Sprintf | -| main.go:16:11:16:85 | []type{args} [array] | main.go:16:11:16:85 | call to Sprintf | -| main.go:16:63:16:70 | selection of Header | main.go:16:63:16:84 | call to Get | -| main.go:16:63:16:84 | call to Get | main.go:16:11:16:85 | []type{args} [array] | -| main.go:16:63:16:84 | call to Get | main.go:16:11:16:85 | call to Sprintf | -| main.go:28:17:31:2 | &... [pointer, Category] | main.go:34:3:34:13 | RequestData [pointer, Category] | -| main.go:28:18:31:2 | struct literal [Category] | main.go:28:17:31:2 | &... [pointer, Category] | -| main.go:30:13:30:19 | selection of URL | main.go:30:13:30:27 | call to Query | -| main.go:30:13:30:27 | call to Query | main.go:30:13:30:39 | index expression | -| main.go:30:13:30:39 | index expression | main.go:28:18:31:2 | struct literal [Category] | -| main.go:33:7:34:23 | []type{args} [array] | main.go:33:7:34:23 | call to Sprintf | -| main.go:33:7:34:23 | call to Sprintf | main.go:35:11:35:11 | q | -| main.go:34:3:34:13 | RequestData [pointer, Category] | main.go:34:3:34:13 | implicit dereference [Category] | -| main.go:34:3:34:13 | implicit dereference [Category] | main.go:34:3:34:22 | selection of Category | -| main.go:34:3:34:22 | selection of Category | main.go:33:7:34:23 | []type{args} [array] | -| main.go:34:3:34:22 | selection of Category | main.go:33:7:34:23 | call to Sprintf | -| main.go:39:2:39:12 | definition of RequestData [pointer, Category] | main.go:40:2:40:12 | RequestData [pointer, Category] | -| main.go:39:2:39:12 | definition of RequestData [pointer, Category] | main.go:43:3:43:13 | RequestData [pointer, Category] | -| main.go:40:2:40:12 | RequestData [pointer, Category] | main.go:40:2:40:12 | implicit dereference [Category] | -| main.go:40:2:40:12 | implicit dereference [Category] | main.go:39:2:39:12 | definition of RequestData [pointer, Category] | -| main.go:40:25:40:31 | selection of URL | main.go:40:25:40:39 | call to Query | -| main.go:40:25:40:39 | call to Query | main.go:40:25:40:51 | index expression | -| main.go:40:25:40:51 | index expression | main.go:40:2:40:12 | implicit dereference [Category] | -| main.go:42:7:43:23 | []type{args} [array] | main.go:42:7:43:23 | call to Sprintf | -| main.go:42:7:43:23 | call to Sprintf | main.go:44:11:44:11 | q | -| main.go:43:3:43:13 | RequestData [pointer, Category] | main.go:43:3:43:13 | implicit dereference [Category] | -| main.go:43:3:43:13 | implicit dereference [Category] | main.go:43:3:43:22 | selection of Category | -| main.go:43:3:43:22 | selection of Category | main.go:42:7:43:23 | []type{args} [array] | -| main.go:43:3:43:22 | selection of Category | main.go:42:7:43:23 | call to Sprintf | -| main.go:48:2:48:12 | definition of RequestData [pointer, Category] | main.go:49:4:49:14 | RequestData [pointer, Category] | -| main.go:48:2:48:12 | definition of RequestData [pointer, Category] | main.go:52:3:52:13 | RequestData [pointer, Category] | -| main.go:49:3:49:14 | star expression [Category] | main.go:48:2:48:12 | definition of RequestData [pointer, Category] | -| main.go:49:4:49:14 | RequestData [pointer, Category] | main.go:49:3:49:14 | star expression [Category] | -| main.go:49:28:49:34 | selection of URL | main.go:49:28:49:42 | call to Query | -| main.go:49:28:49:42 | call to Query | main.go:49:28:49:54 | index expression | -| main.go:49:28:49:54 | index expression | main.go:49:3:49:14 | star expression [Category] | -| main.go:51:7:52:23 | []type{args} [array] | main.go:51:7:52:23 | call to Sprintf | -| main.go:51:7:52:23 | call to Sprintf | main.go:53:11:53:11 | q | -| main.go:52:3:52:13 | RequestData [pointer, Category] | main.go:52:3:52:13 | implicit dereference [Category] | -| main.go:52:3:52:13 | implicit dereference [Category] | main.go:52:3:52:22 | selection of Category | -| main.go:52:3:52:22 | selection of Category | main.go:51:7:52:23 | []type{args} [array] | -| main.go:52:3:52:22 | selection of Category | main.go:51:7:52:23 | call to Sprintf | -| main.go:57:2:57:12 | definition of RequestData [pointer, Category] | main.go:58:4:58:14 | RequestData [pointer, Category] | -| main.go:57:2:57:12 | definition of RequestData [pointer, Category] | main.go:61:5:61:15 | RequestData [pointer, Category] | -| main.go:58:3:58:14 | star expression [Category] | main.go:57:2:57:12 | definition of RequestData [pointer, Category] | -| main.go:58:4:58:14 | RequestData [pointer, Category] | main.go:58:3:58:14 | star expression [Category] | -| main.go:58:28:58:34 | selection of URL | main.go:58:28:58:42 | call to Query | -| main.go:58:28:58:42 | call to Query | main.go:58:28:58:54 | index expression | -| main.go:58:28:58:54 | index expression | main.go:58:3:58:14 | star expression [Category] | -| main.go:60:7:61:26 | []type{args} [array] | main.go:60:7:61:26 | call to Sprintf | -| main.go:60:7:61:26 | call to Sprintf | main.go:62:11:62:11 | q | -| main.go:61:3:61:25 | selection of Category | main.go:60:7:61:26 | []type{args} [array] | -| main.go:61:3:61:25 | selection of Category | main.go:60:7:61:26 | call to Sprintf | -| main.go:61:4:61:15 | star expression [Category] | main.go:61:3:61:25 | selection of Category | -| main.go:61:5:61:15 | RequestData [pointer, Category] | main.go:61:4:61:15 | star expression [Category] | -| mongoDB.go:40:20:40:30 | call to Referer | mongoDB.go:42:28:42:41 | untrustedInput | -| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:50:34:50:39 | filter | -| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:61:27:61:32 | filter | -| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:63:23:63:28 | filter | -| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:64:22:64:27 | filter | -| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:66:32:66:37 | filter | -| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:69:17:69:22 | filter | -| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:70:20:70:25 | filter | -| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:71:29:71:34 | filter | -| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:72:30:72:35 | filter | -| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:73:29:73:34 | filter | -| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:78:23:78:28 | filter | -| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:79:23:79:28 | filter | -| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:80:22:80:27 | filter | -| mongoDB.go:42:28:42:41 | untrustedInput | mongoDB.go:42:19:42:42 | struct literal | -| mongoDB.go:50:23:50:40 | struct literal | mongoDB.go:57:22:57:29 | pipeline | -| mongoDB.go:50:23:50:40 | struct literal | mongoDB.go:81:18:81:25 | pipeline | -| mongoDB.go:50:34:50:39 | filter | mongoDB.go:50:23:50:40 | struct literal | +| SqlInjection.go:10:7:11:30 | []type{args} [array] | SqlInjection.go:10:7:11:30 | call to Sprintf | provenance | | +| SqlInjection.go:10:7:11:30 | call to Sprintf | SqlInjection.go:12:11:12:11 | q | provenance | | +| SqlInjection.go:11:3:11:9 | selection of URL | SqlInjection.go:11:3:11:17 | call to Query | provenance | | +| SqlInjection.go:11:3:11:17 | call to Query | SqlInjection.go:11:3:11:29 | index expression | provenance | | +| SqlInjection.go:11:3:11:29 | index expression | SqlInjection.go:10:7:11:30 | []type{args} [array] | provenance | | +| SqlInjection.go:11:3:11:29 | index expression | SqlInjection.go:10:7:11:30 | call to Sprintf | provenance | | +| issue48.go:17:2:17:33 | ... := ...[0] | issue48.go:18:17:18:17 | b | provenance | | +| issue48.go:17:25:17:32 | selection of Body | issue48.go:17:2:17:33 | ... := ...[0] | provenance | | +| issue48.go:18:17:18:17 | b | issue48.go:18:20:18:39 | &... | provenance | | +| issue48.go:18:20:18:39 | &... | issue48.go:21:3:21:33 | index expression | provenance | | +| issue48.go:20:8:21:34 | []type{args} [array] | issue48.go:20:8:21:34 | call to Sprintf | provenance | | +| issue48.go:20:8:21:34 | call to Sprintf | issue48.go:22:11:22:12 | q3 | provenance | | +| issue48.go:21:3:21:33 | index expression | issue48.go:20:8:21:34 | []type{args} [array] | provenance | | +| issue48.go:21:3:21:33 | index expression | issue48.go:20:8:21:34 | call to Sprintf | provenance | | +| issue48.go:27:2:27:34 | ... := ...[0] | issue48.go:28:17:28:18 | b2 | provenance | | +| issue48.go:27:26:27:33 | selection of Body | issue48.go:27:2:27:34 | ... := ...[0] | provenance | | +| issue48.go:28:17:28:18 | b2 | issue48.go:28:21:28:41 | &... | provenance | | +| issue48.go:28:21:28:41 | &... | issue48.go:31:3:31:31 | selection of Category | provenance | | +| issue48.go:30:8:31:32 | []type{args} [array] | issue48.go:30:8:31:32 | call to Sprintf | provenance | | +| issue48.go:30:8:31:32 | call to Sprintf | issue48.go:32:11:32:12 | q4 | provenance | | +| issue48.go:31:3:31:31 | selection of Category | issue48.go:30:8:31:32 | []type{args} [array] | provenance | | +| issue48.go:31:3:31:31 | selection of Category | issue48.go:30:8:31:32 | call to Sprintf | provenance | | +| issue48.go:37:17:37:50 | type conversion | issue48.go:37:53:37:73 | &... | provenance | | +| issue48.go:37:24:37:30 | selection of URL | issue48.go:37:24:37:38 | call to Query | provenance | | +| issue48.go:37:24:37:38 | call to Query | issue48.go:37:17:37:50 | type conversion | provenance | | +| issue48.go:37:53:37:73 | &... | issue48.go:40:3:40:31 | selection of Category | provenance | | +| issue48.go:39:8:40:32 | []type{args} [array] | issue48.go:39:8:40:32 | call to Sprintf | provenance | | +| issue48.go:39:8:40:32 | call to Sprintf | issue48.go:41:11:41:12 | q5 | provenance | | +| issue48.go:40:3:40:31 | selection of Category | issue48.go:39:8:40:32 | []type{args} [array] | provenance | | +| issue48.go:40:3:40:31 | selection of Category | issue48.go:39:8:40:32 | call to Sprintf | provenance | | +| main.go:11:11:11:16 | selection of Form | main.go:11:11:11:28 | index expression | provenance | | +| main.go:15:11:15:84 | []type{args} [array] | main.go:15:11:15:84 | call to Sprintf | provenance | | +| main.go:15:63:15:67 | selection of URL | main.go:15:63:15:75 | call to Query | provenance | | +| main.go:15:63:15:75 | call to Query | main.go:15:63:15:83 | index expression | provenance | | +| main.go:15:63:15:83 | index expression | main.go:15:11:15:84 | []type{args} [array] | provenance | | +| main.go:15:63:15:83 | index expression | main.go:15:11:15:84 | call to Sprintf | provenance | | +| main.go:16:11:16:85 | []type{args} [array] | main.go:16:11:16:85 | call to Sprintf | provenance | | +| main.go:16:63:16:70 | selection of Header | main.go:16:63:16:84 | call to Get | provenance | | +| main.go:16:63:16:84 | call to Get | main.go:16:11:16:85 | []type{args} [array] | provenance | | +| main.go:16:63:16:84 | call to Get | main.go:16:11:16:85 | call to Sprintf | provenance | | +| main.go:28:17:31:2 | &... [pointer, Category] | main.go:34:3:34:13 | RequestData [pointer, Category] | provenance | | +| main.go:28:18:31:2 | struct literal [Category] | main.go:28:17:31:2 | &... [pointer, Category] | provenance | | +| main.go:30:13:30:19 | selection of URL | main.go:30:13:30:27 | call to Query | provenance | | +| main.go:30:13:30:27 | call to Query | main.go:30:13:30:39 | index expression | provenance | | +| main.go:30:13:30:39 | index expression | main.go:28:18:31:2 | struct literal [Category] | provenance | | +| main.go:33:7:34:23 | []type{args} [array] | main.go:33:7:34:23 | call to Sprintf | provenance | | +| main.go:33:7:34:23 | call to Sprintf | main.go:35:11:35:11 | q | provenance | | +| main.go:34:3:34:13 | RequestData [pointer, Category] | main.go:34:3:34:13 | implicit dereference [Category] | provenance | | +| main.go:34:3:34:13 | implicit dereference [Category] | main.go:34:3:34:22 | selection of Category | provenance | | +| main.go:34:3:34:22 | selection of Category | main.go:33:7:34:23 | []type{args} [array] | provenance | | +| main.go:34:3:34:22 | selection of Category | main.go:33:7:34:23 | call to Sprintf | provenance | | +| main.go:39:2:39:12 | definition of RequestData [pointer, Category] | main.go:40:2:40:12 | RequestData [pointer, Category] | provenance | | +| main.go:39:2:39:12 | definition of RequestData [pointer, Category] | main.go:43:3:43:13 | RequestData [pointer, Category] | provenance | | +| main.go:40:2:40:12 | RequestData [pointer, Category] | main.go:40:2:40:12 | implicit dereference [Category] | provenance | | +| main.go:40:2:40:12 | implicit dereference [Category] | main.go:39:2:39:12 | definition of RequestData [pointer, Category] | provenance | | +| main.go:40:25:40:31 | selection of URL | main.go:40:25:40:39 | call to Query | provenance | | +| main.go:40:25:40:39 | call to Query | main.go:40:25:40:51 | index expression | provenance | | +| main.go:40:25:40:51 | index expression | main.go:40:2:40:12 | implicit dereference [Category] | provenance | | +| main.go:42:7:43:23 | []type{args} [array] | main.go:42:7:43:23 | call to Sprintf | provenance | | +| main.go:42:7:43:23 | call to Sprintf | main.go:44:11:44:11 | q | provenance | | +| main.go:43:3:43:13 | RequestData [pointer, Category] | main.go:43:3:43:13 | implicit dereference [Category] | provenance | | +| main.go:43:3:43:13 | implicit dereference [Category] | main.go:43:3:43:22 | selection of Category | provenance | | +| main.go:43:3:43:22 | selection of Category | main.go:42:7:43:23 | []type{args} [array] | provenance | | +| main.go:43:3:43:22 | selection of Category | main.go:42:7:43:23 | call to Sprintf | provenance | | +| main.go:48:2:48:12 | definition of RequestData [pointer, Category] | main.go:49:4:49:14 | RequestData [pointer, Category] | provenance | | +| main.go:48:2:48:12 | definition of RequestData [pointer, Category] | main.go:52:3:52:13 | RequestData [pointer, Category] | provenance | | +| main.go:49:3:49:14 | star expression [Category] | main.go:48:2:48:12 | definition of RequestData [pointer, Category] | provenance | | +| main.go:49:4:49:14 | RequestData [pointer, Category] | main.go:49:3:49:14 | star expression [Category] | provenance | | +| main.go:49:28:49:34 | selection of URL | main.go:49:28:49:42 | call to Query | provenance | | +| main.go:49:28:49:42 | call to Query | main.go:49:28:49:54 | index expression | provenance | | +| main.go:49:28:49:54 | index expression | main.go:49:3:49:14 | star expression [Category] | provenance | | +| main.go:51:7:52:23 | []type{args} [array] | main.go:51:7:52:23 | call to Sprintf | provenance | | +| main.go:51:7:52:23 | call to Sprintf | main.go:53:11:53:11 | q | provenance | | +| main.go:52:3:52:13 | RequestData [pointer, Category] | main.go:52:3:52:13 | implicit dereference [Category] | provenance | | +| main.go:52:3:52:13 | implicit dereference [Category] | main.go:52:3:52:22 | selection of Category | provenance | | +| main.go:52:3:52:22 | selection of Category | main.go:51:7:52:23 | []type{args} [array] | provenance | | +| main.go:52:3:52:22 | selection of Category | main.go:51:7:52:23 | call to Sprintf | provenance | | +| main.go:57:2:57:12 | definition of RequestData [pointer, Category] | main.go:58:4:58:14 | RequestData [pointer, Category] | provenance | | +| main.go:57:2:57:12 | definition of RequestData [pointer, Category] | main.go:61:5:61:15 | RequestData [pointer, Category] | provenance | | +| main.go:58:3:58:14 | star expression [Category] | main.go:57:2:57:12 | definition of RequestData [pointer, Category] | provenance | | +| main.go:58:4:58:14 | RequestData [pointer, Category] | main.go:58:3:58:14 | star expression [Category] | provenance | | +| main.go:58:28:58:34 | selection of URL | main.go:58:28:58:42 | call to Query | provenance | | +| main.go:58:28:58:42 | call to Query | main.go:58:28:58:54 | index expression | provenance | | +| main.go:58:28:58:54 | index expression | main.go:58:3:58:14 | star expression [Category] | provenance | | +| main.go:60:7:61:26 | []type{args} [array] | main.go:60:7:61:26 | call to Sprintf | provenance | | +| main.go:60:7:61:26 | call to Sprintf | main.go:62:11:62:11 | q | provenance | | +| main.go:61:3:61:25 | selection of Category | main.go:60:7:61:26 | []type{args} [array] | provenance | | +| main.go:61:3:61:25 | selection of Category | main.go:60:7:61:26 | call to Sprintf | provenance | | +| main.go:61:4:61:15 | star expression [Category] | main.go:61:3:61:25 | selection of Category | provenance | | +| main.go:61:5:61:15 | RequestData [pointer, Category] | main.go:61:4:61:15 | star expression [Category] | provenance | | +| mongoDB.go:40:20:40:30 | call to Referer | mongoDB.go:42:28:42:41 | untrustedInput | provenance | | +| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:50:34:50:39 | filter | provenance | | +| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:61:27:61:32 | filter | provenance | | +| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:63:23:63:28 | filter | provenance | | +| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:64:22:64:27 | filter | provenance | | +| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:66:32:66:37 | filter | provenance | | +| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:69:17:69:22 | filter | provenance | | +| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:70:20:70:25 | filter | provenance | | +| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:71:29:71:34 | filter | provenance | | +| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:72:30:72:35 | filter | provenance | | +| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:73:29:73:34 | filter | provenance | | +| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:78:23:78:28 | filter | provenance | | +| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:79:23:79:28 | filter | provenance | | +| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:80:22:80:27 | filter | provenance | | +| mongoDB.go:42:28:42:41 | untrustedInput | mongoDB.go:42:19:42:42 | struct literal | provenance | | +| mongoDB.go:50:23:50:40 | struct literal | mongoDB.go:57:22:57:29 | pipeline | provenance | | +| mongoDB.go:50:23:50:40 | struct literal | mongoDB.go:81:18:81:25 | pipeline | provenance | | +| mongoDB.go:50:34:50:39 | filter | mongoDB.go:50:23:50:40 | struct literal | provenance | | nodes | SqlInjection.go:10:7:11:30 | []type{args} [array] | semmle.label | []type{args} [array] | | SqlInjection.go:10:7:11:30 | call to Sprintf | semmle.label | call to Sprintf | diff --git a/go/ql/test/query-tests/Security/CWE-089/StringBreak.expected b/go/ql/test/query-tests/Security/CWE-089/StringBreak.expected index de5b7c7a833..05147badb06 100644 --- a/go/ql/test/query-tests/Security/CWE-089/StringBreak.expected +++ b/go/ql/test/query-tests/Security/CWE-089/StringBreak.expected @@ -1,11 +1,11 @@ edges -| StringBreak.go:10:2:10:40 | ... := ...[0] | StringBreak.go:14:47:14:57 | versionJSON | -| StringBreakMismatched.go:12:2:12:40 | ... := ...[0] | StringBreakMismatched.go:13:29:13:47 | type conversion | -| StringBreakMismatched.go:13:13:13:62 | call to Replace | StringBreakMismatched.go:17:26:17:32 | escaped | -| StringBreakMismatched.go:13:29:13:47 | type conversion | StringBreakMismatched.go:13:13:13:62 | call to Replace | -| StringBreakMismatched.go:24:2:24:40 | ... := ...[0] | StringBreakMismatched.go:25:29:25:47 | type conversion | -| StringBreakMismatched.go:25:13:25:61 | call to Replace | StringBreakMismatched.go:29:27:29:33 | escaped | -| StringBreakMismatched.go:25:29:25:47 | type conversion | StringBreakMismatched.go:25:13:25:61 | call to Replace | +| StringBreak.go:10:2:10:40 | ... := ...[0] | StringBreak.go:14:47:14:57 | versionJSON | provenance | | +| StringBreakMismatched.go:12:2:12:40 | ... := ...[0] | StringBreakMismatched.go:13:29:13:47 | type conversion | provenance | | +| StringBreakMismatched.go:13:13:13:62 | call to Replace | StringBreakMismatched.go:17:26:17:32 | escaped | provenance | | +| StringBreakMismatched.go:13:29:13:47 | type conversion | StringBreakMismatched.go:13:13:13:62 | call to Replace | provenance | | +| StringBreakMismatched.go:24:2:24:40 | ... := ...[0] | StringBreakMismatched.go:25:29:25:47 | type conversion | provenance | | +| StringBreakMismatched.go:25:13:25:61 | call to Replace | StringBreakMismatched.go:29:27:29:33 | escaped | provenance | | +| StringBreakMismatched.go:25:29:25:47 | type conversion | StringBreakMismatched.go:25:13:25:61 | call to Replace | provenance | | nodes | StringBreak.go:10:2:10:40 | ... := ...[0] | semmle.label | ... := ...[0] | | StringBreak.go:14:47:14:57 | versionJSON | semmle.label | versionJSON | diff --git a/go/ql/test/query-tests/Security/CWE-190/AllocationSizeOverflow.expected b/go/ql/test/query-tests/Security/CWE-190/AllocationSizeOverflow.expected index 036c11ff51e..e139ab4f5e5 100644 --- a/go/ql/test/query-tests/Security/CWE-190/AllocationSizeOverflow.expected +++ b/go/ql/test/query-tests/Security/CWE-190/AllocationSizeOverflow.expected @@ -1,24 +1,24 @@ edges -| AllocationSizeOverflow.go:6:2:6:33 | ... := ...[0] | AllocationSizeOverflow.go:10:14:10:21 | jsonData | -| AllocationSizeOverflow.go:10:14:10:21 | jsonData | AllocationSizeOverflow.go:10:10:10:22 | call to len | -| tst2.go:9:2:9:37 | ... := ...[0] | tst2.go:10:26:10:29 | data | -| tst2.go:10:26:10:29 | data | tst2.go:10:22:10:30 | call to len | -| tst2.go:14:2:14:29 | ... := ...[0] | tst2.go:15:26:15:29 | data | -| tst2.go:15:26:15:29 | data | tst2.go:15:22:15:30 | call to len | -| tst3.go:6:2:6:31 | ... := ...[0] | tst3.go:7:26:7:33 | jsonData | -| tst3.go:6:2:6:31 | ... := ...[0] | tst3.go:24:20:24:27 | jsonData | -| tst3.go:6:2:6:31 | ... := ...[0] | tst3.go:32:20:32:27 | jsonData | -| tst3.go:7:26:7:33 | jsonData | tst3.go:7:22:7:34 | call to len | -| tst3.go:24:20:24:27 | jsonData | tst3.go:24:16:24:28 | call to len | -| tst3.go:32:20:32:27 | jsonData | tst3.go:32:16:32:28 | call to len | -| tst.go:14:2:14:30 | ... = ...[0] | tst.go:15:26:15:33 | jsonData | -| tst.go:15:26:15:33 | jsonData | tst.go:15:22:15:34 | call to len | -| tst.go:20:2:20:31 | ... = ...[0] | tst.go:21:26:21:33 | jsonData | -| tst.go:21:26:21:33 | jsonData | tst.go:21:22:21:34 | call to len | -| tst.go:26:2:26:31 | ... = ...[0] | tst.go:27:30:27:37 | jsonData | -| tst.go:27:30:27:37 | jsonData | tst.go:27:26:27:38 | call to len | -| tst.go:34:2:34:30 | ... = ...[0] | tst.go:35:26:35:33 | jsonData | -| tst.go:35:26:35:33 | jsonData | tst.go:35:22:35:34 | call to len | +| AllocationSizeOverflow.go:6:2:6:33 | ... := ...[0] | AllocationSizeOverflow.go:10:14:10:21 | jsonData | provenance | | +| AllocationSizeOverflow.go:10:14:10:21 | jsonData | AllocationSizeOverflow.go:10:10:10:22 | call to len | provenance | | +| tst2.go:9:2:9:37 | ... := ...[0] | tst2.go:10:26:10:29 | data | provenance | | +| tst2.go:10:26:10:29 | data | tst2.go:10:22:10:30 | call to len | provenance | | +| tst2.go:14:2:14:29 | ... := ...[0] | tst2.go:15:26:15:29 | data | provenance | | +| tst2.go:15:26:15:29 | data | tst2.go:15:22:15:30 | call to len | provenance | | +| tst3.go:6:2:6:31 | ... := ...[0] | tst3.go:7:26:7:33 | jsonData | provenance | | +| tst3.go:6:2:6:31 | ... := ...[0] | tst3.go:24:20:24:27 | jsonData | provenance | | +| tst3.go:6:2:6:31 | ... := ...[0] | tst3.go:32:20:32:27 | jsonData | provenance | | +| tst3.go:7:26:7:33 | jsonData | tst3.go:7:22:7:34 | call to len | provenance | | +| tst3.go:24:20:24:27 | jsonData | tst3.go:24:16:24:28 | call to len | provenance | | +| tst3.go:32:20:32:27 | jsonData | tst3.go:32:16:32:28 | call to len | provenance | | +| tst.go:14:2:14:30 | ... = ...[0] | tst.go:15:26:15:33 | jsonData | provenance | | +| tst.go:15:26:15:33 | jsonData | tst.go:15:22:15:34 | call to len | provenance | | +| tst.go:20:2:20:31 | ... = ...[0] | tst.go:21:26:21:33 | jsonData | provenance | | +| tst.go:21:26:21:33 | jsonData | tst.go:21:22:21:34 | call to len | provenance | | +| tst.go:26:2:26:31 | ... = ...[0] | tst.go:27:30:27:37 | jsonData | provenance | | +| tst.go:27:30:27:37 | jsonData | tst.go:27:26:27:38 | call to len | provenance | | +| tst.go:34:2:34:30 | ... = ...[0] | tst.go:35:26:35:33 | jsonData | provenance | | +| tst.go:35:26:35:33 | jsonData | tst.go:35:22:35:34 | call to len | provenance | | nodes | AllocationSizeOverflow.go:6:2:6:33 | ... := ...[0] | semmle.label | ... := ...[0] | | AllocationSizeOverflow.go:10:10:10:22 | call to len | semmle.label | call to len | diff --git a/go/ql/test/query-tests/Security/CWE-209/StackTraceExposure.expected b/go/ql/test/query-tests/Security/CWE-209/StackTraceExposure.expected index 99042f7a497..c62c6126648 100644 --- a/go/ql/test/query-tests/Security/CWE-209/StackTraceExposure.expected +++ b/go/ql/test/query-tests/Security/CWE-209/StackTraceExposure.expected @@ -1,5 +1,5 @@ edges -| test.go:14:2:14:4 | definition of buf | test.go:17:10:17:12 | buf | +| test.go:14:2:14:4 | definition of buf | test.go:17:10:17:12 | buf | provenance | | nodes | test.go:14:2:14:4 | definition of buf | semmle.label | definition of buf | | test.go:17:10:17:12 | buf | semmle.label | buf | diff --git a/go/ql/test/query-tests/Security/CWE-312/CleartextLogging.expected b/go/ql/test/query-tests/Security/CWE-312/CleartextLogging.expected index c58d2d26d5e..98daffabbaf 100644 --- a/go/ql/test/query-tests/Security/CWE-312/CleartextLogging.expected +++ b/go/ql/test/query-tests/Security/CWE-312/CleartextLogging.expected @@ -1,56 +1,56 @@ edges -| klog.go:20:3:25:3 | range statement[1] | klog.go:20:13:20:19 | definition of headers | -| klog.go:20:13:20:19 | definition of headers | klog.go:21:27:21:33 | headers | -| klog.go:20:30:20:37 | selection of Header | klog.go:20:3:25:3 | range statement[1] | -| klog.go:21:4:24:4 | range statement[1] | klog.go:21:11:21:16 | definition of header | -| klog.go:21:11:21:16 | definition of header | klog.go:22:15:22:20 | header | -| klog.go:21:27:21:33 | headers | klog.go:21:4:24:4 | range statement[1] | -| klog.go:28:13:28:20 | selection of Header | klog.go:28:13:28:41 | call to Get | -| overrides.go:9:9:9:16 | password | overrides.go:13:14:13:23 | call to String | -| passwords.go:8:12:8:12 | definition of x | passwords.go:9:14:9:14 | x | -| passwords.go:30:8:30:15 | password | passwords.go:8:12:8:12 | definition of x | -| passwords.go:34:28:34:35 | password | passwords.go:34:14:34:35 | ...+... | -| passwords.go:36:2:36:5 | definition of obj1 | passwords.go:39:14:39:17 | obj1 | -| passwords.go:36:10:38:2 | struct literal | passwords.go:36:2:36:5 | definition of obj1 | -| passwords.go:37:13:37:13 | x | passwords.go:36:10:38:2 | struct literal | -| passwords.go:41:2:41:5 | definition of obj2 | passwords.go:44:14:44:17 | obj2 | -| passwords.go:41:10:43:2 | struct literal | passwords.go:41:2:41:5 | definition of obj2 | -| passwords.go:42:6:42:13 | password | passwords.go:41:10:43:2 | struct literal | -| passwords.go:46:6:46:9 | definition of obj3 | passwords.go:47:14:47:17 | obj3 | -| passwords.go:48:11:48:18 | password | passwords.go:46:6:46:9 | definition of obj3 | -| passwords.go:85:2:85:14 | definition of utilityObject | passwords.go:88:14:88:26 | utilityObject | -| passwords.go:85:19:87:2 | struct literal | passwords.go:85:2:85:14 | definition of utilityObject | -| passwords.go:86:16:86:36 | call to make | passwords.go:85:19:87:2 | struct literal | -| passwords.go:90:2:90:7 | definition of secret | passwords.go:91:23:91:28 | secret | -| passwords.go:90:12:90:19 | password | passwords.go:90:2:90:7 | definition of secret | -| passwords.go:101:33:101:40 | password | passwords.go:101:15:101:40 | ...+... | -| passwords.go:107:34:107:41 | password | passwords.go:107:16:107:41 | ...+... | -| passwords.go:112:33:112:40 | password | passwords.go:112:15:112:40 | ...+... | -| passwords.go:116:28:116:36 | password1 | passwords.go:116:28:116:45 | call to String | -| passwords.go:116:28:116:45 | call to String | passwords.go:116:14:116:45 | ...+... | -| passwords.go:118:2:118:7 | definition of config | passwords.go:125:14:125:19 | config | -| passwords.go:118:2:118:7 | definition of config [x] | passwords.go:126:14:126:19 | config [x] | -| passwords.go:118:2:118:7 | definition of config [y] | passwords.go:127:14:127:19 | config [y] | -| passwords.go:118:12:123:2 | struct literal | passwords.go:118:2:118:7 | definition of config | -| passwords.go:118:12:123:2 | struct literal [x] | passwords.go:118:2:118:7 | definition of config [x] | -| passwords.go:118:12:123:2 | struct literal [y] | passwords.go:118:2:118:7 | definition of config [y] | -| passwords.go:119:13:119:13 | x | passwords.go:118:12:123:2 | struct literal | -| passwords.go:121:13:121:20 | password | passwords.go:118:12:123:2 | struct literal | -| passwords.go:121:13:121:20 | password | passwords.go:118:12:123:2 | struct literal [x] | -| passwords.go:122:13:122:25 | call to getPassword | passwords.go:118:12:123:2 | struct literal | -| passwords.go:122:13:122:25 | call to getPassword | passwords.go:118:12:123:2 | struct literal [y] | -| passwords.go:126:14:126:19 | config [x] | passwords.go:126:14:126:21 | selection of x | -| passwords.go:127:14:127:19 | config [y] | passwords.go:127:14:127:21 | selection of y | -| protobuf.go:11:2:11:6 | definition of query [pointer, Description] | protobuf.go:12:2:12:6 | query [pointer, Description] | -| protobuf.go:11:2:11:6 | definition of query [pointer, Description] | protobuf.go:14:14:14:18 | query [pointer, Description] | -| protobuf.go:12:2:12:6 | implicit dereference [Description] | protobuf.go:11:2:11:6 | definition of query [pointer, Description] | -| protobuf.go:12:2:12:6 | query [pointer, Description] | protobuf.go:12:2:12:6 | implicit dereference [Description] | -| protobuf.go:12:22:12:29 | password | protobuf.go:12:2:12:6 | implicit dereference [Description] | -| protobuf.go:14:14:14:18 | query [pointer, Description] | protobuf.go:14:14:14:35 | call to GetDescription | -| protobuf.go:14:14:14:18 | query [pointer, Description] | protos/query/query.pb.go:117:7:117:7 | definition of x [pointer, Description] | -| protos/query/query.pb.go:117:7:117:7 | definition of x [pointer, Description] | protos/query/query.pb.go:119:10:119:10 | x [pointer, Description] | -| protos/query/query.pb.go:119:10:119:10 | implicit dereference [Description] | protos/query/query.pb.go:119:10:119:22 | selection of Description | -| protos/query/query.pb.go:119:10:119:10 | x [pointer, Description] | protos/query/query.pb.go:119:10:119:10 | implicit dereference [Description] | +| klog.go:20:3:25:3 | range statement[1] | klog.go:20:13:20:19 | definition of headers | provenance | | +| klog.go:20:13:20:19 | definition of headers | klog.go:21:27:21:33 | headers | provenance | | +| klog.go:20:30:20:37 | selection of Header | klog.go:20:3:25:3 | range statement[1] | provenance | | +| klog.go:21:4:24:4 | range statement[1] | klog.go:21:11:21:16 | definition of header | provenance | | +| klog.go:21:11:21:16 | definition of header | klog.go:22:15:22:20 | header | provenance | | +| klog.go:21:27:21:33 | headers | klog.go:21:4:24:4 | range statement[1] | provenance | | +| klog.go:28:13:28:20 | selection of Header | klog.go:28:13:28:41 | call to Get | provenance | | +| overrides.go:9:9:9:16 | password | overrides.go:13:14:13:23 | call to String | provenance | | +| passwords.go:8:12:8:12 | definition of x | passwords.go:9:14:9:14 | x | provenance | | +| passwords.go:30:8:30:15 | password | passwords.go:8:12:8:12 | definition of x | provenance | | +| passwords.go:34:28:34:35 | password | passwords.go:34:14:34:35 | ...+... | provenance | | +| passwords.go:36:2:36:5 | definition of obj1 | passwords.go:39:14:39:17 | obj1 | provenance | | +| passwords.go:36:10:38:2 | struct literal | passwords.go:36:2:36:5 | definition of obj1 | provenance | | +| passwords.go:37:13:37:13 | x | passwords.go:36:10:38:2 | struct literal | provenance | | +| passwords.go:41:2:41:5 | definition of obj2 | passwords.go:44:14:44:17 | obj2 | provenance | | +| passwords.go:41:10:43:2 | struct literal | passwords.go:41:2:41:5 | definition of obj2 | provenance | | +| passwords.go:42:6:42:13 | password | passwords.go:41:10:43:2 | struct literal | provenance | | +| passwords.go:46:6:46:9 | definition of obj3 | passwords.go:47:14:47:17 | obj3 | provenance | | +| passwords.go:48:11:48:18 | password | passwords.go:46:6:46:9 | definition of obj3 | provenance | | +| passwords.go:85:2:85:14 | definition of utilityObject | passwords.go:88:14:88:26 | utilityObject | provenance | | +| passwords.go:85:19:87:2 | struct literal | passwords.go:85:2:85:14 | definition of utilityObject | provenance | | +| passwords.go:86:16:86:36 | call to make | passwords.go:85:19:87:2 | struct literal | provenance | | +| passwords.go:90:2:90:7 | definition of secret | passwords.go:91:23:91:28 | secret | provenance | | +| passwords.go:90:12:90:19 | password | passwords.go:90:2:90:7 | definition of secret | provenance | | +| passwords.go:101:33:101:40 | password | passwords.go:101:15:101:40 | ...+... | provenance | | +| passwords.go:107:34:107:41 | password | passwords.go:107:16:107:41 | ...+... | provenance | | +| passwords.go:112:33:112:40 | password | passwords.go:112:15:112:40 | ...+... | provenance | | +| passwords.go:116:28:116:36 | password1 | passwords.go:116:28:116:45 | call to String | provenance | | +| passwords.go:116:28:116:45 | call to String | passwords.go:116:14:116:45 | ...+... | provenance | | +| passwords.go:118:2:118:7 | definition of config | passwords.go:125:14:125:19 | config | provenance | | +| passwords.go:118:2:118:7 | definition of config [x] | passwords.go:126:14:126:19 | config [x] | provenance | | +| passwords.go:118:2:118:7 | definition of config [y] | passwords.go:127:14:127:19 | config [y] | provenance | | +| passwords.go:118:12:123:2 | struct literal | passwords.go:118:2:118:7 | definition of config | provenance | | +| passwords.go:118:12:123:2 | struct literal [x] | passwords.go:118:2:118:7 | definition of config [x] | provenance | | +| passwords.go:118:12:123:2 | struct literal [y] | passwords.go:118:2:118:7 | definition of config [y] | provenance | | +| passwords.go:119:13:119:13 | x | passwords.go:118:12:123:2 | struct literal | provenance | | +| passwords.go:121:13:121:20 | password | passwords.go:118:12:123:2 | struct literal | provenance | | +| passwords.go:121:13:121:20 | password | passwords.go:118:12:123:2 | struct literal [x] | provenance | | +| passwords.go:122:13:122:25 | call to getPassword | passwords.go:118:12:123:2 | struct literal | provenance | | +| passwords.go:122:13:122:25 | call to getPassword | passwords.go:118:12:123:2 | struct literal [y] | provenance | | +| passwords.go:126:14:126:19 | config [x] | passwords.go:126:14:126:21 | selection of x | provenance | | +| passwords.go:127:14:127:19 | config [y] | passwords.go:127:14:127:21 | selection of y | provenance | | +| protobuf.go:11:2:11:6 | definition of query [pointer, Description] | protobuf.go:12:2:12:6 | query [pointer, Description] | provenance | | +| protobuf.go:11:2:11:6 | definition of query [pointer, Description] | protobuf.go:14:14:14:18 | query [pointer, Description] | provenance | | +| protobuf.go:12:2:12:6 | implicit dereference [Description] | protobuf.go:11:2:11:6 | definition of query [pointer, Description] | provenance | | +| protobuf.go:12:2:12:6 | query [pointer, Description] | protobuf.go:12:2:12:6 | implicit dereference [Description] | provenance | | +| protobuf.go:12:22:12:29 | password | protobuf.go:12:2:12:6 | implicit dereference [Description] | provenance | | +| protobuf.go:14:14:14:18 | query [pointer, Description] | protobuf.go:14:14:14:35 | call to GetDescription | provenance | | +| protobuf.go:14:14:14:18 | query [pointer, Description] | protos/query/query.pb.go:117:7:117:7 | definition of x [pointer, Description] | provenance | | +| protos/query/query.pb.go:117:7:117:7 | definition of x [pointer, Description] | protos/query/query.pb.go:119:10:119:10 | x [pointer, Description] | provenance | | +| protos/query/query.pb.go:119:10:119:10 | implicit dereference [Description] | protos/query/query.pb.go:119:10:119:22 | selection of Description | provenance | | +| protos/query/query.pb.go:119:10:119:10 | x [pointer, Description] | protos/query/query.pb.go:119:10:119:10 | implicit dereference [Description] | provenance | | nodes | klog.go:20:3:25:3 | range statement[1] | semmle.label | range statement[1] | | klog.go:20:13:20:19 | definition of headers | semmle.label | definition of headers | diff --git a/go/ql/test/query-tests/Security/CWE-322/InsecureHostKeyCallback.expected b/go/ql/test/query-tests/Security/CWE-322/InsecureHostKeyCallback.expected index 2376ab7a7cf..b81d24f2665 100644 --- a/go/ql/test/query-tests/Security/CWE-322/InsecureHostKeyCallback.expected +++ b/go/ql/test/query-tests/Security/CWE-322/InsecureHostKeyCallback.expected @@ -1,20 +1,20 @@ edges -| InsecureHostKeyCallbackExample.go:16:4:18:4 | function literal | InsecureHostKeyCallbackExample.go:15:20:18:5 | type conversion | -| InsecureHostKeyCallbackExample.go:31:14:34:4 | type conversion | InsecureHostKeyCallbackExample.go:39:20:39:27 | callback | -| InsecureHostKeyCallbackExample.go:32:3:34:3 | function literal | InsecureHostKeyCallbackExample.go:31:14:34:4 | type conversion | -| InsecureHostKeyCallbackExample.go:45:3:47:3 | function literal | InsecureHostKeyCallbackExample.go:52:20:52:48 | type conversion | -| InsecureHostKeyCallbackExample.go:58:39:58:46 | definition of callback | InsecureHostKeyCallbackExample.go:62:20:62:27 | callback | -| InsecureHostKeyCallbackExample.go:68:48:68:55 | definition of callback | InsecureHostKeyCallbackExample.go:78:28:78:35 | callback | -| InsecureHostKeyCallbackExample.go:94:3:94:43 | ... := ...[0] | InsecureHostKeyCallbackExample.go:95:28:95:35 | callback | -| InsecureHostKeyCallbackExample.go:102:22:105:4 | type conversion | InsecureHostKeyCallbackExample.go:107:35:107:50 | insecureCallback | -| InsecureHostKeyCallbackExample.go:103:3:105:3 | function literal | InsecureHostKeyCallbackExample.go:102:22:105:4 | type conversion | -| InsecureHostKeyCallbackExample.go:107:35:107:50 | insecureCallback | InsecureHostKeyCallbackExample.go:58:39:58:46 | definition of callback | -| InsecureHostKeyCallbackExample.go:109:31:115:4 | type conversion | InsecureHostKeyCallbackExample.go:117:35:117:59 | potentiallySecureCallback | -| InsecureHostKeyCallbackExample.go:109:31:115:4 | type conversion | InsecureHostKeyCallbackExample.go:120:44:120:68 | potentiallySecureCallback | -| InsecureHostKeyCallbackExample.go:110:3:115:3 | function literal | InsecureHostKeyCallbackExample.go:109:31:115:4 | type conversion | -| InsecureHostKeyCallbackExample.go:117:35:117:59 | potentiallySecureCallback | InsecureHostKeyCallbackExample.go:58:39:58:46 | definition of callback | -| InsecureHostKeyCallbackExample.go:118:35:118:61 | call to InsecureIgnoreHostKey | InsecureHostKeyCallbackExample.go:58:39:58:46 | definition of callback | -| InsecureHostKeyCallbackExample.go:120:44:120:68 | potentiallySecureCallback | InsecureHostKeyCallbackExample.go:68:48:68:55 | definition of callback | +| InsecureHostKeyCallbackExample.go:16:4:18:4 | function literal | InsecureHostKeyCallbackExample.go:15:20:18:5 | type conversion | provenance | | +| InsecureHostKeyCallbackExample.go:31:14:34:4 | type conversion | InsecureHostKeyCallbackExample.go:39:20:39:27 | callback | provenance | | +| InsecureHostKeyCallbackExample.go:32:3:34:3 | function literal | InsecureHostKeyCallbackExample.go:31:14:34:4 | type conversion | provenance | | +| InsecureHostKeyCallbackExample.go:45:3:47:3 | function literal | InsecureHostKeyCallbackExample.go:52:20:52:48 | type conversion | provenance | | +| InsecureHostKeyCallbackExample.go:58:39:58:46 | definition of callback | InsecureHostKeyCallbackExample.go:62:20:62:27 | callback | provenance | | +| InsecureHostKeyCallbackExample.go:68:48:68:55 | definition of callback | InsecureHostKeyCallbackExample.go:78:28:78:35 | callback | provenance | | +| InsecureHostKeyCallbackExample.go:94:3:94:43 | ... := ...[0] | InsecureHostKeyCallbackExample.go:95:28:95:35 | callback | provenance | | +| InsecureHostKeyCallbackExample.go:102:22:105:4 | type conversion | InsecureHostKeyCallbackExample.go:107:35:107:50 | insecureCallback | provenance | | +| InsecureHostKeyCallbackExample.go:103:3:105:3 | function literal | InsecureHostKeyCallbackExample.go:102:22:105:4 | type conversion | provenance | | +| InsecureHostKeyCallbackExample.go:107:35:107:50 | insecureCallback | InsecureHostKeyCallbackExample.go:58:39:58:46 | definition of callback | provenance | | +| InsecureHostKeyCallbackExample.go:109:31:115:4 | type conversion | InsecureHostKeyCallbackExample.go:117:35:117:59 | potentiallySecureCallback | provenance | | +| InsecureHostKeyCallbackExample.go:109:31:115:4 | type conversion | InsecureHostKeyCallbackExample.go:120:44:120:68 | potentiallySecureCallback | provenance | | +| InsecureHostKeyCallbackExample.go:110:3:115:3 | function literal | InsecureHostKeyCallbackExample.go:109:31:115:4 | type conversion | provenance | | +| InsecureHostKeyCallbackExample.go:117:35:117:59 | potentiallySecureCallback | InsecureHostKeyCallbackExample.go:58:39:58:46 | definition of callback | provenance | | +| InsecureHostKeyCallbackExample.go:118:35:118:61 | call to InsecureIgnoreHostKey | InsecureHostKeyCallbackExample.go:58:39:58:46 | definition of callback | provenance | | +| InsecureHostKeyCallbackExample.go:120:44:120:68 | potentiallySecureCallback | InsecureHostKeyCallbackExample.go:68:48:68:55 | definition of callback | provenance | | nodes | InsecureHostKeyCallbackExample.go:15:20:18:5 | type conversion | semmle.label | type conversion | | InsecureHostKeyCallbackExample.go:16:4:18:4 | function literal | semmle.label | function literal | diff --git a/go/ql/test/query-tests/Security/CWE-326/InsufficientKeySize.expected b/go/ql/test/query-tests/Security/CWE-326/InsufficientKeySize.expected index fb1058af01c..556b1722b59 100644 --- a/go/ql/test/query-tests/Security/CWE-326/InsufficientKeySize.expected +++ b/go/ql/test/query-tests/Security/CWE-326/InsufficientKeySize.expected @@ -1,10 +1,10 @@ edges -| InsufficientKeySize.go:13:10:13:13 | 1024 | InsufficientKeySize.go:14:31:14:34 | size | -| InsufficientKeySize.go:18:7:18:10 | 1024 | InsufficientKeySize.go:25:11:25:14 | definition of size | -| InsufficientKeySize.go:25:11:25:14 | definition of size | InsufficientKeySize.go:26:31:26:34 | size | -| InsufficientKeySize.go:30:13:30:16 | 1024 | InsufficientKeySize.go:32:32:32:38 | keyBits | -| InsufficientKeySize.go:44:13:44:16 | 1024 | InsufficientKeySize.go:47:32:47:38 | keyBits | -| InsufficientKeySize.go:61:21:61:24 | 1024 | InsufficientKeySize.go:67:31:67:37 | keyBits | +| InsufficientKeySize.go:13:10:13:13 | 1024 | InsufficientKeySize.go:14:31:14:34 | size | provenance | | +| InsufficientKeySize.go:18:7:18:10 | 1024 | InsufficientKeySize.go:25:11:25:14 | definition of size | provenance | | +| InsufficientKeySize.go:25:11:25:14 | definition of size | InsufficientKeySize.go:26:31:26:34 | size | provenance | | +| InsufficientKeySize.go:30:13:30:16 | 1024 | InsufficientKeySize.go:32:32:32:38 | keyBits | provenance | | +| InsufficientKeySize.go:44:13:44:16 | 1024 | InsufficientKeySize.go:47:32:47:38 | keyBits | provenance | | +| InsufficientKeySize.go:61:21:61:24 | 1024 | InsufficientKeySize.go:67:31:67:37 | keyBits | provenance | | nodes | InsufficientKeySize.go:9:31:9:34 | 1024 | semmle.label | 1024 | | InsufficientKeySize.go:13:10:13:13 | 1024 | semmle.label | 1024 | diff --git a/go/ql/test/query-tests/Security/CWE-327/UnsafeTLS.expected b/go/ql/test/query-tests/Security/CWE-327/UnsafeTLS.expected index e47a4768465..c0dc967a16f 100644 --- a/go/ql/test/query-tests/Security/CWE-327/UnsafeTLS.expected +++ b/go/ql/test/query-tests/Security/CWE-327/UnsafeTLS.expected @@ -1,44 +1,44 @@ edges -| UnsafeTLS.go:131:14:131:29 | selection of VersionTLS13 | UnsafeTLS.go:136:16:136:22 | version | -| UnsafeTLS.go:133:14:133:29 | selection of VersionSSL30 | UnsafeTLS.go:136:16:136:22 | version | -| UnsafeTLS.go:260:5:260:32 | selection of TLS_RSA_WITH_RC4_128_SHA | UnsafeTLS.go:259:18:266:4 | slice literal | -| UnsafeTLS.go:261:5:261:39 | selection of TLS_RSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:259:18:266:4 | slice literal | -| UnsafeTLS.go:262:5:262:40 | selection of TLS_ECDHE_ECDSA_WITH_RC4_128_SHA | UnsafeTLS.go:259:18:266:4 | slice literal | -| UnsafeTLS.go:263:5:263:38 | selection of TLS_ECDHE_RSA_WITH_RC4_128_SHA | UnsafeTLS.go:259:18:266:4 | slice literal | -| UnsafeTLS.go:264:5:264:47 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:259:18:266:4 | slice literal | -| UnsafeTLS.go:265:5:265:45 | selection of TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:259:18:266:4 | slice literal | -| UnsafeTLS.go:273:5:273:32 | selection of TLS_RSA_WITH_RC4_128_SHA | UnsafeTLS.go:272:18:274:4 | slice literal | -| UnsafeTLS.go:281:5:281:39 | selection of TLS_RSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:280:18:282:4 | slice literal | -| UnsafeTLS.go:289:5:289:40 | selection of TLS_ECDHE_ECDSA_WITH_RC4_128_SHA | UnsafeTLS.go:288:18:290:4 | slice literal | -| UnsafeTLS.go:297:5:297:38 | selection of TLS_ECDHE_RSA_WITH_RC4_128_SHA | UnsafeTLS.go:296:18:298:4 | slice literal | -| UnsafeTLS.go:305:5:305:47 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:304:18:306:4 | slice literal | -| UnsafeTLS.go:313:5:313:45 | selection of TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:312:18:314:4 | slice literal | -| UnsafeTLS.go:329:53:329:93 | selection of TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:329:25:329:94 | call to append | -| UnsafeTLS.go:334:13:334:38 | call to InsecureCipherSuites | UnsafeTLS.go:336:54:336:57 | selection of ID | -| UnsafeTLS.go:336:54:336:57 | selection of ID | UnsafeTLS.go:336:26:336:58 | call to append | -| UnsafeTLS.go:342:13:342:38 | call to InsecureCipherSuites | UnsafeTLS.go:344:40:344:43 | selection of ID | -| UnsafeTLS.go:344:19:344:44 | call to append | UnsafeTLS.go:344:26:344:37 | cipherSuites | -| UnsafeTLS.go:344:19:344:44 | call to append | UnsafeTLS.go:346:25:346:36 | cipherSuites | -| UnsafeTLS.go:344:26:344:37 | cipherSuites | UnsafeTLS.go:344:19:344:44 | call to append | -| UnsafeTLS.go:344:40:344:43 | selection of ID | UnsafeTLS.go:344:19:344:44 | call to append | -| UnsafeTLS.go:351:13:351:38 | call to InsecureCipherSuites | UnsafeTLS.go:353:40:353:51 | selection of ID | -| UnsafeTLS.go:353:19:353:52 | call to append | UnsafeTLS.go:353:26:353:37 | cipherSuites | -| UnsafeTLS.go:353:19:353:52 | call to append | UnsafeTLS.go:355:25:355:36 | cipherSuites | -| UnsafeTLS.go:353:26:353:37 | cipherSuites | UnsafeTLS.go:353:19:353:52 | call to append | -| UnsafeTLS.go:353:40:353:51 | selection of ID | UnsafeTLS.go:353:19:353:52 | call to append | -| UnsafeTLS.go:363:5:363:47 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:362:18:364:4 | slice literal | -| UnsafeTLS.go:371:5:371:47 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:370:18:372:4 | slice literal | -| UnsafeTLS.go:379:5:379:47 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:378:18:380:4 | slice literal | -| UnsafeTLS.go:387:5:387:47 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:386:18:388:4 | slice literal | -| UnsafeTLS.go:395:5:395:47 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:394:18:396:4 | slice literal | -| UnsafeTLS.go:403:4:403:46 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:402:33:404:3 | slice literal | -| UnsafeTLS.go:410:4:410:46 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:409:31:411:3 | slice literal | -| UnsafeTLS.go:419:6:419:48 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:418:19:420:5 | slice literal | -| UnsafeTLS.go:426:6:426:48 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:425:19:427:5 | slice literal | -| UnsafeTLS.go:433:6:433:48 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:432:19:434:5 | slice literal | -| UnsafeTLS.go:443:6:443:48 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:442:19:444:5 | slice literal | -| UnsafeTLS.go:450:6:450:48 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:449:19:451:5 | slice literal | -| UnsafeTLS.go:457:6:457:48 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:456:19:458:5 | slice literal | +| UnsafeTLS.go:131:14:131:29 | selection of VersionTLS13 | UnsafeTLS.go:136:16:136:22 | version | provenance | | +| UnsafeTLS.go:133:14:133:29 | selection of VersionSSL30 | UnsafeTLS.go:136:16:136:22 | version | provenance | | +| UnsafeTLS.go:260:5:260:32 | selection of TLS_RSA_WITH_RC4_128_SHA | UnsafeTLS.go:259:18:266:4 | slice literal | provenance | | +| UnsafeTLS.go:261:5:261:39 | selection of TLS_RSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:259:18:266:4 | slice literal | provenance | | +| UnsafeTLS.go:262:5:262:40 | selection of TLS_ECDHE_ECDSA_WITH_RC4_128_SHA | UnsafeTLS.go:259:18:266:4 | slice literal | provenance | | +| UnsafeTLS.go:263:5:263:38 | selection of TLS_ECDHE_RSA_WITH_RC4_128_SHA | UnsafeTLS.go:259:18:266:4 | slice literal | provenance | | +| UnsafeTLS.go:264:5:264:47 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:259:18:266:4 | slice literal | provenance | | +| UnsafeTLS.go:265:5:265:45 | selection of TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:259:18:266:4 | slice literal | provenance | | +| UnsafeTLS.go:273:5:273:32 | selection of TLS_RSA_WITH_RC4_128_SHA | UnsafeTLS.go:272:18:274:4 | slice literal | provenance | | +| UnsafeTLS.go:281:5:281:39 | selection of TLS_RSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:280:18:282:4 | slice literal | provenance | | +| UnsafeTLS.go:289:5:289:40 | selection of TLS_ECDHE_ECDSA_WITH_RC4_128_SHA | UnsafeTLS.go:288:18:290:4 | slice literal | provenance | | +| UnsafeTLS.go:297:5:297:38 | selection of TLS_ECDHE_RSA_WITH_RC4_128_SHA | UnsafeTLS.go:296:18:298:4 | slice literal | provenance | | +| UnsafeTLS.go:305:5:305:47 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:304:18:306:4 | slice literal | provenance | | +| UnsafeTLS.go:313:5:313:45 | selection of TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:312:18:314:4 | slice literal | provenance | | +| UnsafeTLS.go:329:53:329:93 | selection of TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:329:25:329:94 | call to append | provenance | | +| UnsafeTLS.go:334:13:334:38 | call to InsecureCipherSuites | UnsafeTLS.go:336:54:336:57 | selection of ID | provenance | | +| UnsafeTLS.go:336:54:336:57 | selection of ID | UnsafeTLS.go:336:26:336:58 | call to append | provenance | | +| UnsafeTLS.go:342:13:342:38 | call to InsecureCipherSuites | UnsafeTLS.go:344:40:344:43 | selection of ID | provenance | | +| UnsafeTLS.go:344:19:344:44 | call to append | UnsafeTLS.go:344:26:344:37 | cipherSuites | provenance | | +| UnsafeTLS.go:344:19:344:44 | call to append | UnsafeTLS.go:346:25:346:36 | cipherSuites | provenance | | +| UnsafeTLS.go:344:26:344:37 | cipherSuites | UnsafeTLS.go:344:19:344:44 | call to append | provenance | | +| UnsafeTLS.go:344:40:344:43 | selection of ID | UnsafeTLS.go:344:19:344:44 | call to append | provenance | | +| UnsafeTLS.go:351:13:351:38 | call to InsecureCipherSuites | UnsafeTLS.go:353:40:353:51 | selection of ID | provenance | | +| UnsafeTLS.go:353:19:353:52 | call to append | UnsafeTLS.go:353:26:353:37 | cipherSuites | provenance | | +| UnsafeTLS.go:353:19:353:52 | call to append | UnsafeTLS.go:355:25:355:36 | cipherSuites | provenance | | +| UnsafeTLS.go:353:26:353:37 | cipherSuites | UnsafeTLS.go:353:19:353:52 | call to append | provenance | | +| UnsafeTLS.go:353:40:353:51 | selection of ID | UnsafeTLS.go:353:19:353:52 | call to append | provenance | | +| UnsafeTLS.go:363:5:363:47 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:362:18:364:4 | slice literal | provenance | | +| UnsafeTLS.go:371:5:371:47 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:370:18:372:4 | slice literal | provenance | | +| UnsafeTLS.go:379:5:379:47 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:378:18:380:4 | slice literal | provenance | | +| UnsafeTLS.go:387:5:387:47 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:386:18:388:4 | slice literal | provenance | | +| UnsafeTLS.go:395:5:395:47 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:394:18:396:4 | slice literal | provenance | | +| UnsafeTLS.go:403:4:403:46 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:402:33:404:3 | slice literal | provenance | | +| UnsafeTLS.go:410:4:410:46 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:409:31:411:3 | slice literal | provenance | | +| UnsafeTLS.go:419:6:419:48 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:418:19:420:5 | slice literal | provenance | | +| UnsafeTLS.go:426:6:426:48 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:425:19:427:5 | slice literal | provenance | | +| UnsafeTLS.go:433:6:433:48 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:432:19:434:5 | slice literal | provenance | | +| UnsafeTLS.go:443:6:443:48 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:442:19:444:5 | slice literal | provenance | | +| UnsafeTLS.go:450:6:450:48 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:449:19:451:5 | slice literal | provenance | | +| UnsafeTLS.go:457:6:457:48 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:456:19:458:5 | slice literal | provenance | | nodes | UnsafeTLS.go:21:23:21:23 | 0 | semmle.label | 0 | | UnsafeTLS.go:25:23:25:23 | 0 | semmle.label | 0 | diff --git a/go/ql/test/query-tests/Security/CWE-327/WeakCryptoAlgorithm.expected b/go/ql/test/query-tests/Security/CWE-327/WeakCryptoAlgorithm.expected index a107cd75df0..53cfd40145d 100644 --- a/go/ql/test/query-tests/Security/CWE-327/WeakCryptoAlgorithm.expected +++ b/go/ql/test/query-tests/Security/CWE-327/WeakCryptoAlgorithm.expected @@ -1,8 +1,8 @@ edges -| Crypto.go:16:9:16:16 | password | Crypto.go:19:25:19:27 | buf | -| Crypto.go:16:9:16:16 | password | Crypto.go:22:10:22:12 | buf | -| Crypto.go:16:9:16:16 | password | Crypto.go:25:16:25:18 | buf | -| Crypto.go:16:9:16:16 | password | Crypto.go:28:11:28:13 | buf | +| Crypto.go:16:9:16:16 | password | Crypto.go:19:25:19:27 | buf | provenance | | +| Crypto.go:16:9:16:16 | password | Crypto.go:22:10:22:12 | buf | provenance | | +| Crypto.go:16:9:16:16 | password | Crypto.go:25:16:25:18 | buf | provenance | | +| Crypto.go:16:9:16:16 | password | Crypto.go:28:11:28:13 | buf | provenance | | nodes | Crypto.go:16:9:16:16 | password | semmle.label | password | | Crypto.go:19:25:19:27 | buf | semmle.label | buf | diff --git a/go/ql/test/query-tests/Security/CWE-338/InsecureRandomness/InsecureRandomness.expected b/go/ql/test/query-tests/Security/CWE-338/InsecureRandomness/InsecureRandomness.expected index 2ba01cedce0..2e92d105daa 100644 --- a/go/ql/test/query-tests/Security/CWE-338/InsecureRandomness/InsecureRandomness.expected +++ b/go/ql/test/query-tests/Security/CWE-338/InsecureRandomness/InsecureRandomness.expected @@ -1,19 +1,19 @@ edges -| sample.go:15:10:15:64 | call to Sum256 | sample.go:16:9:16:15 | slice expression | -| sample.go:15:24:15:63 | type conversion | sample.go:15:10:15:64 | call to Sum256 | -| sample.go:15:31:15:62 | []type{args} [array] | sample.go:15:31:15:62 | call to Sprintf | -| sample.go:15:31:15:62 | call to Sprintf | sample.go:15:24:15:63 | type conversion | -| sample.go:15:49:15:61 | call to Uint32 | sample.go:15:31:15:62 | []type{args} [array] | -| sample.go:15:49:15:61 | call to Uint32 | sample.go:15:31:15:62 | call to Sprintf | -| sample.go:16:9:16:15 | slice expression | sample.go:26:25:26:30 | call to Guid | -| sample.go:33:2:33:6 | definition of nonce | sample.go:37:25:37:29 | nonce | -| sample.go:33:2:33:6 | definition of nonce | sample.go:37:32:37:36 | nonce | -| sample.go:34:12:34:40 | call to New | sample.go:35:14:35:19 | random | -| sample.go:35:14:35:19 | random | sample.go:33:2:33:6 | definition of nonce | -| sample.go:55:17:55:42 | call to Intn | sample.go:56:29:56:38 | randNumber | -| sample.go:56:11:56:40 | type conversion | sample.go:58:32:58:43 | type conversion | -| sample.go:56:18:56:39 | index expression | sample.go:56:11:56:40 | type conversion | -| sample.go:56:29:56:38 | randNumber | sample.go:56:18:56:39 | index expression | +| sample.go:15:10:15:64 | call to Sum256 | sample.go:16:9:16:15 | slice expression | provenance | | +| sample.go:15:24:15:63 | type conversion | sample.go:15:10:15:64 | call to Sum256 | provenance | | +| sample.go:15:31:15:62 | []type{args} [array] | sample.go:15:31:15:62 | call to Sprintf | provenance | | +| sample.go:15:31:15:62 | call to Sprintf | sample.go:15:24:15:63 | type conversion | provenance | | +| sample.go:15:49:15:61 | call to Uint32 | sample.go:15:31:15:62 | []type{args} [array] | provenance | | +| sample.go:15:49:15:61 | call to Uint32 | sample.go:15:31:15:62 | call to Sprintf | provenance | | +| sample.go:16:9:16:15 | slice expression | sample.go:26:25:26:30 | call to Guid | provenance | | +| sample.go:33:2:33:6 | definition of nonce | sample.go:37:25:37:29 | nonce | provenance | | +| sample.go:33:2:33:6 | definition of nonce | sample.go:37:32:37:36 | nonce | provenance | | +| sample.go:34:12:34:40 | call to New | sample.go:35:14:35:19 | random | provenance | | +| sample.go:35:14:35:19 | random | sample.go:33:2:33:6 | definition of nonce | provenance | | +| sample.go:55:17:55:42 | call to Intn | sample.go:56:29:56:38 | randNumber | provenance | | +| sample.go:56:11:56:40 | type conversion | sample.go:58:32:58:43 | type conversion | provenance | | +| sample.go:56:18:56:39 | index expression | sample.go:56:11:56:40 | type conversion | provenance | | +| sample.go:56:29:56:38 | randNumber | sample.go:56:18:56:39 | index expression | provenance | | nodes | InsecureRandomness.go:12:18:12:40 | call to Intn | semmle.label | call to Intn | | sample.go:15:10:15:64 | call to Sum256 | semmle.label | call to Sum256 | diff --git a/go/ql/test/query-tests/Security/CWE-352/ConstantOauth2State.expected b/go/ql/test/query-tests/Security/CWE-352/ConstantOauth2State.expected index 9ef4c6d850e..d1c82f01713 100644 --- a/go/ql/test/query-tests/Security/CWE-352/ConstantOauth2State.expected +++ b/go/ql/test/query-tests/Security/CWE-352/ConstantOauth2State.expected @@ -1,16 +1,16 @@ edges -| ConstantOauth2State.go:20:26:20:32 | "state" | ConstantOauth2State.go:50:26:50:41 | stateStringConst | -| ConstantOauth2State.go:20:26:20:32 | "state" | ConstantOauth2State.go:147:26:147:41 | stateStringConst | -| ConstantOauth2State.go:20:26:20:32 | "state" | ConstantOauth2State.go:169:26:169:41 | stateStringConst | -| ConstantOauth2State.go:20:26:20:32 | "state" | ConstantOauth2State.go:191:26:191:41 | stateStringConst | -| ConstantOauth2State.go:20:26:20:32 | "state" | ConstantOauth2State.go:210:26:210:41 | stateStringConst | -| ConstantOauth2State.go:20:26:20:32 | "state" | ConstantOauth2State.go:232:26:232:41 | stateStringConst | -| ConstantOauth2State.go:20:26:20:32 | "state" | ConstantOauth2State.go:249:26:249:41 | stateStringConst | -| ConstantOauth2State.go:20:26:20:32 | "state" | ConstantOauth2State.go:266:26:266:41 | stateStringConst | -| ConstantOauth2State.go:20:26:20:32 | "state" | ConstantOauth2State.go:282:26:282:41 | stateStringConst | -| ConstantOauth2State.go:22:22:22:28 | "state" | ConstantOauth2State.go:65:26:65:39 | stateStringVar | -| ConstantOauth2State.go:80:11:80:25 | call to newFixedState | ConstantOauth2State.go:81:26:81:30 | state | -| ConstantOauth2State.go:86:9:86:15 | "state" | ConstantOauth2State.go:80:11:80:25 | call to newFixedState | +| ConstantOauth2State.go:20:26:20:32 | "state" | ConstantOauth2State.go:50:26:50:41 | stateStringConst | provenance | | +| ConstantOauth2State.go:20:26:20:32 | "state" | ConstantOauth2State.go:147:26:147:41 | stateStringConst | provenance | | +| ConstantOauth2State.go:20:26:20:32 | "state" | ConstantOauth2State.go:169:26:169:41 | stateStringConst | provenance | | +| ConstantOauth2State.go:20:26:20:32 | "state" | ConstantOauth2State.go:191:26:191:41 | stateStringConst | provenance | | +| ConstantOauth2State.go:20:26:20:32 | "state" | ConstantOauth2State.go:210:26:210:41 | stateStringConst | provenance | | +| ConstantOauth2State.go:20:26:20:32 | "state" | ConstantOauth2State.go:232:26:232:41 | stateStringConst | provenance | | +| ConstantOauth2State.go:20:26:20:32 | "state" | ConstantOauth2State.go:249:26:249:41 | stateStringConst | provenance | | +| ConstantOauth2State.go:20:26:20:32 | "state" | ConstantOauth2State.go:266:26:266:41 | stateStringConst | provenance | | +| ConstantOauth2State.go:20:26:20:32 | "state" | ConstantOauth2State.go:282:26:282:41 | stateStringConst | provenance | | +| ConstantOauth2State.go:22:22:22:28 | "state" | ConstantOauth2State.go:65:26:65:39 | stateStringVar | provenance | | +| ConstantOauth2State.go:80:11:80:25 | call to newFixedState | ConstantOauth2State.go:81:26:81:30 | state | provenance | | +| ConstantOauth2State.go:86:9:86:15 | "state" | ConstantOauth2State.go:80:11:80:25 | call to newFixedState | provenance | | nodes | ConstantOauth2State.go:20:26:20:32 | "state" | semmle.label | "state" | | ConstantOauth2State.go:22:22:22:28 | "state" | semmle.label | "state" | diff --git a/go/ql/test/query-tests/Security/CWE-601/BadRedirectCheck/BadRedirectCheck.expected b/go/ql/test/query-tests/Security/CWE-601/BadRedirectCheck/BadRedirectCheck.expected index da1b8886574..20569426bfa 100644 --- a/go/ql/test/query-tests/Security/CWE-601/BadRedirectCheck/BadRedirectCheck.expected +++ b/go/ql/test/query-tests/Security/CWE-601/BadRedirectCheck/BadRedirectCheck.expected @@ -1,23 +1,23 @@ edges -| BadRedirectCheck.go:3:18:3:22 | argument corresponding to redir | BadRedirectCheck.go:5:10:5:14 | redir | -| BadRedirectCheck.go:3:18:3:22 | definition of redir | BadRedirectCheck.go:5:10:5:14 | redir | -| BadRedirectCheck.go:5:10:5:14 | redir | main.go:11:25:11:45 | call to sanitizeUrl | -| cves.go:14:23:14:25 | argument corresponding to url | cves.go:16:26:16:28 | url | -| cves.go:33:14:33:34 | call to Get | cves.go:37:25:37:32 | redirect | -| cves.go:41:14:41:34 | call to Get | cves.go:45:25:45:32 | redirect | -| main.go:10:18:10:25 | argument corresponding to redirect | main.go:11:37:11:44 | redirect | -| main.go:11:37:11:44 | redirect | BadRedirectCheck.go:3:18:3:22 | definition of redir | -| main.go:11:37:11:44 | redirect | main.go:11:25:11:45 | call to sanitizeUrl | -| main.go:32:24:32:26 | argument corresponding to url | main.go:34:26:34:28 | url | -| main.go:68:17:68:24 | argument corresponding to redirect | main.go:73:20:73:27 | redirect | -| main.go:68:17:68:24 | definition of redirect | main.go:73:20:73:27 | redirect | -| main.go:73:9:73:28 | call to Clean | main.go:77:25:77:39 | call to getTarget1 | -| main.go:73:20:73:27 | redirect | main.go:73:9:73:28 | call to Clean | -| main.go:73:20:73:27 | redirect | main.go:73:9:73:28 | call to Clean | -| main.go:76:19:76:21 | argument corresponding to url | main.go:77:36:77:38 | url | -| main.go:77:36:77:38 | url | main.go:68:17:68:24 | definition of redirect | -| main.go:77:36:77:38 | url | main.go:77:25:77:39 | call to getTarget1 | -| main.go:87:9:87:14 | selection of Path | main.go:91:25:91:39 | call to getTarget2 | +| BadRedirectCheck.go:3:18:3:22 | argument corresponding to redir | BadRedirectCheck.go:5:10:5:14 | redir | provenance | | +| BadRedirectCheck.go:3:18:3:22 | definition of redir | BadRedirectCheck.go:5:10:5:14 | redir | provenance | | +| BadRedirectCheck.go:5:10:5:14 | redir | main.go:11:25:11:45 | call to sanitizeUrl | provenance | | +| cves.go:14:23:14:25 | argument corresponding to url | cves.go:16:26:16:28 | url | provenance | | +| cves.go:33:14:33:34 | call to Get | cves.go:37:25:37:32 | redirect | provenance | | +| cves.go:41:14:41:34 | call to Get | cves.go:45:25:45:32 | redirect | provenance | | +| main.go:10:18:10:25 | argument corresponding to redirect | main.go:11:37:11:44 | redirect | provenance | | +| main.go:11:37:11:44 | redirect | BadRedirectCheck.go:3:18:3:22 | definition of redir | provenance | | +| main.go:11:37:11:44 | redirect | main.go:11:25:11:45 | call to sanitizeUrl | provenance | | +| main.go:32:24:32:26 | argument corresponding to url | main.go:34:26:34:28 | url | provenance | | +| main.go:68:17:68:24 | argument corresponding to redirect | main.go:73:20:73:27 | redirect | provenance | | +| main.go:68:17:68:24 | definition of redirect | main.go:73:20:73:27 | redirect | provenance | | +| main.go:73:9:73:28 | call to Clean | main.go:77:25:77:39 | call to getTarget1 | provenance | | +| main.go:73:20:73:27 | redirect | main.go:73:9:73:28 | call to Clean | provenance | | +| main.go:73:20:73:27 | redirect | main.go:73:9:73:28 | call to Clean | provenance | | +| main.go:76:19:76:21 | argument corresponding to url | main.go:77:36:77:38 | url | provenance | | +| main.go:77:36:77:38 | url | main.go:68:17:68:24 | definition of redirect | provenance | | +| main.go:77:36:77:38 | url | main.go:77:25:77:39 | call to getTarget1 | provenance | | +| main.go:87:9:87:14 | selection of Path | main.go:91:25:91:39 | call to getTarget2 | provenance | | nodes | BadRedirectCheck.go:3:18:3:22 | argument corresponding to redir | semmle.label | argument corresponding to redir | | BadRedirectCheck.go:3:18:3:22 | definition of redir | semmle.label | definition of redir | diff --git a/go/ql/test/query-tests/Security/CWE-601/OpenUrlRedirect/OpenUrlRedirect.expected b/go/ql/test/query-tests/Security/CWE-601/OpenUrlRedirect/OpenUrlRedirect.expected index d56e1f9c68b..edbdc8b6e8d 100644 --- a/go/ql/test/query-tests/Security/CWE-601/OpenUrlRedirect/OpenUrlRedirect.expected +++ b/go/ql/test/query-tests/Security/CWE-601/OpenUrlRedirect/OpenUrlRedirect.expected @@ -1,69 +1,69 @@ edges -| OpenUrlRedirect.go:10:23:10:28 | selection of Form | OpenUrlRedirect.go:10:23:10:42 | call to Get | -| stdlib.go:13:3:13:8 | definition of target | stdlib.go:15:30:15:35 | target | -| stdlib.go:13:13:13:18 | selection of Form | stdlib.go:13:13:13:32 | call to Get | -| stdlib.go:13:13:13:32 | call to Get | stdlib.go:13:3:13:8 | definition of target | -| stdlib.go:22:3:22:8 | definition of target | stdlib.go:24:30:24:35 | target | -| stdlib.go:22:13:22:18 | selection of Form | stdlib.go:22:13:22:32 | call to Get | -| stdlib.go:22:13:22:32 | call to Get | stdlib.go:22:3:22:8 | definition of target | -| stdlib.go:31:3:31:8 | definition of target | stdlib.go:35:34:35:39 | target | -| stdlib.go:31:13:31:18 | selection of Form | stdlib.go:31:13:31:32 | call to Get | -| stdlib.go:31:13:31:32 | call to Get | stdlib.go:31:3:31:8 | definition of target | -| stdlib.go:35:34:35:39 | target | stdlib.go:35:30:35:39 | ...+... | -| stdlib.go:44:3:44:8 | definition of target | stdlib.go:46:23:46:28 | target | -| stdlib.go:44:13:44:18 | selection of Form | stdlib.go:44:13:44:32 | call to Get | -| stdlib.go:44:13:44:32 | call to Get | stdlib.go:44:3:44:8 | definition of target | -| stdlib.go:64:3:64:8 | definition of target | stdlib.go:67:23:67:28 | target | -| stdlib.go:64:13:64:18 | selection of Form | stdlib.go:64:13:64:32 | call to Get | -| stdlib.go:64:13:64:32 | call to Get | stdlib.go:64:3:64:8 | definition of target | -| stdlib.go:67:23:67:28 | target | stdlib.go:67:23:67:37 | ...+... | -| stdlib.go:67:23:67:37 | ...+... | stdlib.go:67:23:67:40 | ...+... | -| stdlib.go:89:3:89:8 | definition of target | stdlib.go:90:3:90:8 | target | -| stdlib.go:89:13:89:18 | selection of Form | stdlib.go:89:13:89:32 | call to Get | -| stdlib.go:89:13:89:32 | call to Get | stdlib.go:89:3:89:8 | definition of target | -| stdlib.go:90:3:90:8 | definition of target | stdlib.go:92:23:92:28 | target | -| stdlib.go:90:3:90:8 | target | stdlib.go:90:3:90:25 | ... += ... | -| stdlib.go:90:3:90:25 | ... += ... | stdlib.go:90:3:90:8 | definition of target | -| stdlib.go:107:54:107:54 | definition of r [pointer, URL, pointer] | stdlib.go:112:4:112:4 | r [pointer, URL, pointer] | -| stdlib.go:107:54:107:54 | definition of r [pointer, URL] | stdlib.go:112:4:112:4 | r [pointer, URL] | -| stdlib.go:107:54:107:54 | definition of r [pointer, URL] | stdlib.go:113:24:113:24 | r [pointer, URL] | -| stdlib.go:112:4:112:4 | implicit dereference [URL, pointer] | stdlib.go:107:54:107:54 | definition of r [pointer, URL, pointer] | -| stdlib.go:112:4:112:4 | implicit dereference [URL, pointer] | stdlib.go:112:4:112:8 | selection of URL [pointer] | -| stdlib.go:112:4:112:4 | implicit dereference [URL] | stdlib.go:107:54:107:54 | definition of r [pointer, URL] | -| stdlib.go:112:4:112:4 | implicit dereference [URL] | stdlib.go:112:4:112:8 | selection of URL | -| stdlib.go:112:4:112:4 | r [pointer, URL, pointer] | stdlib.go:112:4:112:4 | implicit dereference [URL, pointer] | -| stdlib.go:112:4:112:4 | r [pointer, URL] | stdlib.go:112:4:112:4 | implicit dereference [URL] | -| stdlib.go:112:4:112:8 | implicit dereference | stdlib.go:112:4:112:8 | selection of URL | -| stdlib.go:112:4:112:8 | implicit dereference | stdlib.go:112:4:112:8 | selection of URL [pointer] | -| stdlib.go:112:4:112:8 | selection of URL | stdlib.go:112:4:112:4 | implicit dereference [URL] | -| stdlib.go:112:4:112:8 | selection of URL | stdlib.go:112:4:112:8 | implicit dereference | -| stdlib.go:112:4:112:8 | selection of URL [pointer] | stdlib.go:112:4:112:4 | implicit dereference [URL, pointer] | -| stdlib.go:112:4:112:8 | selection of URL [pointer] | stdlib.go:112:4:112:8 | implicit dereference | -| stdlib.go:113:24:113:24 | implicit dereference [URL] | stdlib.go:113:24:113:28 | selection of URL | -| stdlib.go:113:24:113:24 | r [pointer, URL] | stdlib.go:113:24:113:24 | implicit dereference [URL] | -| stdlib.go:113:24:113:28 | selection of URL | stdlib.go:113:24:113:37 | call to String | -| stdlib.go:146:3:146:8 | definition of target | stdlib.go:152:3:152:3 | target = phi(def@146:3, def@149:4) | -| stdlib.go:146:13:146:18 | selection of Form | stdlib.go:146:13:146:32 | call to Get | -| stdlib.go:146:13:146:32 | call to Get | stdlib.go:146:3:146:8 | definition of target | -| stdlib.go:152:3:152:3 | target = phi(def@146:3, def@149:4) | stdlib.go:152:23:152:28 | target | -| stdlib.go:159:3:159:5 | definition of url | stdlib.go:162:24:162:26 | url | -| stdlib.go:159:10:159:15 | star expression | stdlib.go:159:3:159:5 | definition of url | -| stdlib.go:159:10:159:15 | star expression | stdlib.go:159:11:159:15 | selection of URL | -| stdlib.go:159:11:159:15 | selection of URL | stdlib.go:159:10:159:15 | star expression | -| stdlib.go:162:24:162:26 | url | stdlib.go:162:24:162:35 | call to String | -| stdlib.go:173:35:173:39 | selection of URL | stdlib.go:173:35:173:52 | call to RequestURI | -| stdlib.go:173:35:173:52 | call to RequestURI | stdlib.go:173:24:173:52 | ...+... | -| stdlib.go:182:3:182:8 | definition of target | stdlib.go:184:23:184:28 | target | -| stdlib.go:182:13:182:33 | call to FormValue | stdlib.go:182:3:182:8 | definition of target | -| stdlib.go:190:3:190:8 | definition of target | stdlib.go:192:23:192:28 | target | -| stdlib.go:190:3:190:8 | definition of target | stdlib.go:194:23:194:28 | target | -| stdlib.go:190:3:190:57 | ... := ...[0] | stdlib.go:190:3:190:8 | definition of target | -| stdlib.go:190:36:190:56 | call to FormValue | stdlib.go:190:3:190:57 | ... := ...[0] | -| stdlib.go:192:23:192:28 | implicit dereference | stdlib.go:190:3:190:8 | definition of target | -| stdlib.go:192:23:192:28 | implicit dereference | stdlib.go:192:23:192:33 | selection of Path | -| stdlib.go:192:23:192:28 | target | stdlib.go:192:23:192:28 | implicit dereference | -| stdlib.go:192:23:192:28 | target | stdlib.go:192:23:192:33 | selection of Path | -| stdlib.go:194:23:194:28 | target | stdlib.go:194:23:194:42 | call to EscapedPath | +| OpenUrlRedirect.go:10:23:10:28 | selection of Form | OpenUrlRedirect.go:10:23:10:42 | call to Get | provenance | | +| stdlib.go:13:3:13:8 | definition of target | stdlib.go:15:30:15:35 | target | provenance | | +| stdlib.go:13:13:13:18 | selection of Form | stdlib.go:13:13:13:32 | call to Get | provenance | | +| stdlib.go:13:13:13:32 | call to Get | stdlib.go:13:3:13:8 | definition of target | provenance | | +| stdlib.go:22:3:22:8 | definition of target | stdlib.go:24:30:24:35 | target | provenance | | +| stdlib.go:22:13:22:18 | selection of Form | stdlib.go:22:13:22:32 | call to Get | provenance | | +| stdlib.go:22:13:22:32 | call to Get | stdlib.go:22:3:22:8 | definition of target | provenance | | +| stdlib.go:31:3:31:8 | definition of target | stdlib.go:35:34:35:39 | target | provenance | | +| stdlib.go:31:13:31:18 | selection of Form | stdlib.go:31:13:31:32 | call to Get | provenance | | +| stdlib.go:31:13:31:32 | call to Get | stdlib.go:31:3:31:8 | definition of target | provenance | | +| stdlib.go:35:34:35:39 | target | stdlib.go:35:30:35:39 | ...+... | provenance | | +| stdlib.go:44:3:44:8 | definition of target | stdlib.go:46:23:46:28 | target | provenance | | +| stdlib.go:44:13:44:18 | selection of Form | stdlib.go:44:13:44:32 | call to Get | provenance | | +| stdlib.go:44:13:44:32 | call to Get | stdlib.go:44:3:44:8 | definition of target | provenance | | +| stdlib.go:64:3:64:8 | definition of target | stdlib.go:67:23:67:28 | target | provenance | | +| stdlib.go:64:13:64:18 | selection of Form | stdlib.go:64:13:64:32 | call to Get | provenance | | +| stdlib.go:64:13:64:32 | call to Get | stdlib.go:64:3:64:8 | definition of target | provenance | | +| stdlib.go:67:23:67:28 | target | stdlib.go:67:23:67:37 | ...+... | provenance | | +| stdlib.go:67:23:67:37 | ...+... | stdlib.go:67:23:67:40 | ...+... | provenance | | +| stdlib.go:89:3:89:8 | definition of target | stdlib.go:90:3:90:8 | target | provenance | | +| stdlib.go:89:13:89:18 | selection of Form | stdlib.go:89:13:89:32 | call to Get | provenance | | +| stdlib.go:89:13:89:32 | call to Get | stdlib.go:89:3:89:8 | definition of target | provenance | | +| stdlib.go:90:3:90:8 | definition of target | stdlib.go:92:23:92:28 | target | provenance | | +| stdlib.go:90:3:90:8 | target | stdlib.go:90:3:90:25 | ... += ... | provenance | | +| stdlib.go:90:3:90:25 | ... += ... | stdlib.go:90:3:90:8 | definition of target | provenance | | +| stdlib.go:107:54:107:54 | definition of r [pointer, URL, pointer] | stdlib.go:112:4:112:4 | r [pointer, URL, pointer] | provenance | | +| stdlib.go:107:54:107:54 | definition of r [pointer, URL] | stdlib.go:112:4:112:4 | r [pointer, URL] | provenance | | +| stdlib.go:107:54:107:54 | definition of r [pointer, URL] | stdlib.go:113:24:113:24 | r [pointer, URL] | provenance | | +| stdlib.go:112:4:112:4 | implicit dereference [URL, pointer] | stdlib.go:107:54:107:54 | definition of r [pointer, URL, pointer] | provenance | | +| stdlib.go:112:4:112:4 | implicit dereference [URL, pointer] | stdlib.go:112:4:112:8 | selection of URL [pointer] | provenance | | +| stdlib.go:112:4:112:4 | implicit dereference [URL] | stdlib.go:107:54:107:54 | definition of r [pointer, URL] | provenance | | +| stdlib.go:112:4:112:4 | implicit dereference [URL] | stdlib.go:112:4:112:8 | selection of URL | provenance | | +| stdlib.go:112:4:112:4 | r [pointer, URL, pointer] | stdlib.go:112:4:112:4 | implicit dereference [URL, pointer] | provenance | | +| stdlib.go:112:4:112:4 | r [pointer, URL] | stdlib.go:112:4:112:4 | implicit dereference [URL] | provenance | | +| stdlib.go:112:4:112:8 | implicit dereference | stdlib.go:112:4:112:8 | selection of URL | provenance | | +| stdlib.go:112:4:112:8 | implicit dereference | stdlib.go:112:4:112:8 | selection of URL [pointer] | provenance | | +| stdlib.go:112:4:112:8 | selection of URL | stdlib.go:112:4:112:4 | implicit dereference [URL] | provenance | | +| stdlib.go:112:4:112:8 | selection of URL | stdlib.go:112:4:112:8 | implicit dereference | provenance | | +| stdlib.go:112:4:112:8 | selection of URL [pointer] | stdlib.go:112:4:112:4 | implicit dereference [URL, pointer] | provenance | | +| stdlib.go:112:4:112:8 | selection of URL [pointer] | stdlib.go:112:4:112:8 | implicit dereference | provenance | | +| stdlib.go:113:24:113:24 | implicit dereference [URL] | stdlib.go:113:24:113:28 | selection of URL | provenance | | +| stdlib.go:113:24:113:24 | r [pointer, URL] | stdlib.go:113:24:113:24 | implicit dereference [URL] | provenance | | +| stdlib.go:113:24:113:28 | selection of URL | stdlib.go:113:24:113:37 | call to String | provenance | | +| stdlib.go:146:3:146:8 | definition of target | stdlib.go:152:3:152:3 | target = phi(def@146:3, def@149:4) | provenance | | +| stdlib.go:146:13:146:18 | selection of Form | stdlib.go:146:13:146:32 | call to Get | provenance | | +| stdlib.go:146:13:146:32 | call to Get | stdlib.go:146:3:146:8 | definition of target | provenance | | +| stdlib.go:152:3:152:3 | target = phi(def@146:3, def@149:4) | stdlib.go:152:23:152:28 | target | provenance | | +| stdlib.go:159:3:159:5 | definition of url | stdlib.go:162:24:162:26 | url | provenance | | +| stdlib.go:159:10:159:15 | star expression | stdlib.go:159:3:159:5 | definition of url | provenance | | +| stdlib.go:159:10:159:15 | star expression | stdlib.go:159:11:159:15 | selection of URL | provenance | | +| stdlib.go:159:11:159:15 | selection of URL | stdlib.go:159:10:159:15 | star expression | provenance | | +| stdlib.go:162:24:162:26 | url | stdlib.go:162:24:162:35 | call to String | provenance | | +| stdlib.go:173:35:173:39 | selection of URL | stdlib.go:173:35:173:52 | call to RequestURI | provenance | | +| stdlib.go:173:35:173:52 | call to RequestURI | stdlib.go:173:24:173:52 | ...+... | provenance | | +| stdlib.go:182:3:182:8 | definition of target | stdlib.go:184:23:184:28 | target | provenance | | +| stdlib.go:182:13:182:33 | call to FormValue | stdlib.go:182:3:182:8 | definition of target | provenance | | +| stdlib.go:190:3:190:8 | definition of target | stdlib.go:192:23:192:28 | target | provenance | | +| stdlib.go:190:3:190:8 | definition of target | stdlib.go:194:23:194:28 | target | provenance | | +| stdlib.go:190:3:190:57 | ... := ...[0] | stdlib.go:190:3:190:8 | definition of target | provenance | | +| stdlib.go:190:36:190:56 | call to FormValue | stdlib.go:190:3:190:57 | ... := ...[0] | provenance | | +| stdlib.go:192:23:192:28 | implicit dereference | stdlib.go:190:3:190:8 | definition of target | provenance | | +| stdlib.go:192:23:192:28 | implicit dereference | stdlib.go:192:23:192:33 | selection of Path | provenance | | +| stdlib.go:192:23:192:28 | target | stdlib.go:192:23:192:28 | implicit dereference | provenance | | +| stdlib.go:192:23:192:28 | target | stdlib.go:192:23:192:33 | selection of Path | provenance | | +| stdlib.go:194:23:194:28 | target | stdlib.go:194:23:194:42 | call to EscapedPath | provenance | | nodes | OpenUrlRedirect.go:10:23:10:28 | selection of Form | semmle.label | selection of Form | | OpenUrlRedirect.go:10:23:10:42 | call to Get | semmle.label | call to Get | diff --git a/go/ql/test/query-tests/Security/CWE-640/EmailInjection.expected b/go/ql/test/query-tests/Security/CWE-640/EmailInjection.expected index ec7b13e00eb..fa8adec48fe 100644 --- a/go/ql/test/query-tests/Security/CWE-640/EmailInjection.expected +++ b/go/ql/test/query-tests/Security/CWE-640/EmailInjection.expected @@ -1,23 +1,23 @@ edges -| EmailBad.go:9:10:9:17 | selection of Header | EmailBad.go:9:10:9:29 | call to Get | -| EmailBad.go:9:10:9:29 | call to Get | EmailBad.go:12:56:12:67 | type conversion | -| main.go:29:21:29:31 | call to Referer | main.go:31:57:31:78 | type conversion | -| main.go:37:21:37:31 | call to Referer | main.go:41:25:41:38 | untrustedInput | -| main.go:41:25:41:38 | untrustedInput | main.go:40:3:40:7 | definition of write | -| main.go:46:21:46:31 | call to Referer | main.go:52:46:52:59 | untrustedInput | -| main.go:46:21:46:31 | call to Referer | main.go:53:52:53:65 | untrustedInput | -| main.go:58:21:58:31 | call to Referer | main.go:60:47:60:60 | untrustedInput | -| main.go:60:14:60:61 | call to NewContent | main.go:63:16:63:22 | content | -| main.go:60:47:60:60 | untrustedInput | main.go:60:14:60:61 | call to NewContent | -| main.go:68:21:68:31 | call to Referer | main.go:74:47:74:60 | untrustedInput | -| main.go:74:14:74:61 | call to NewContent | main.go:76:50:76:56 | content | -| main.go:74:14:74:61 | call to NewContent | main.go:76:59:76:65 | content | -| main.go:74:14:74:61 | call to NewContent | main.go:77:16:77:22 | content | -| main.go:74:47:74:60 | untrustedInput | main.go:74:14:74:61 | call to NewContent | -| main.go:82:21:82:31 | call to Referer | main.go:89:37:89:50 | untrustedInput | -| main.go:82:21:82:31 | call to Referer | main.go:91:48:91:61 | untrustedInput | -| main.go:91:15:91:62 | call to NewContent | main.go:93:16:93:23 | content2 | -| main.go:91:48:91:61 | untrustedInput | main.go:91:15:91:62 | call to NewContent | +| EmailBad.go:9:10:9:17 | selection of Header | EmailBad.go:9:10:9:29 | call to Get | provenance | | +| EmailBad.go:9:10:9:29 | call to Get | EmailBad.go:12:56:12:67 | type conversion | provenance | | +| main.go:29:21:29:31 | call to Referer | main.go:31:57:31:78 | type conversion | provenance | | +| main.go:37:21:37:31 | call to Referer | main.go:41:25:41:38 | untrustedInput | provenance | | +| main.go:41:25:41:38 | untrustedInput | main.go:40:3:40:7 | definition of write | provenance | | +| main.go:46:21:46:31 | call to Referer | main.go:52:46:52:59 | untrustedInput | provenance | | +| main.go:46:21:46:31 | call to Referer | main.go:53:52:53:65 | untrustedInput | provenance | | +| main.go:58:21:58:31 | call to Referer | main.go:60:47:60:60 | untrustedInput | provenance | | +| main.go:60:14:60:61 | call to NewContent | main.go:63:16:63:22 | content | provenance | | +| main.go:60:47:60:60 | untrustedInput | main.go:60:14:60:61 | call to NewContent | provenance | | +| main.go:68:21:68:31 | call to Referer | main.go:74:47:74:60 | untrustedInput | provenance | | +| main.go:74:14:74:61 | call to NewContent | main.go:76:50:76:56 | content | provenance | | +| main.go:74:14:74:61 | call to NewContent | main.go:76:59:76:65 | content | provenance | | +| main.go:74:14:74:61 | call to NewContent | main.go:77:16:77:22 | content | provenance | | +| main.go:74:47:74:60 | untrustedInput | main.go:74:14:74:61 | call to NewContent | provenance | | +| main.go:82:21:82:31 | call to Referer | main.go:89:37:89:50 | untrustedInput | provenance | | +| main.go:82:21:82:31 | call to Referer | main.go:91:48:91:61 | untrustedInput | provenance | | +| main.go:91:15:91:62 | call to NewContent | main.go:93:16:93:23 | content2 | provenance | | +| main.go:91:48:91:61 | untrustedInput | main.go:91:15:91:62 | call to NewContent | provenance | | nodes | EmailBad.go:9:10:9:17 | selection of Header | semmle.label | selection of Header | | EmailBad.go:9:10:9:29 | call to Get | semmle.label | call to Get | diff --git a/go/ql/test/query-tests/Security/CWE-643/XPathInjection.expected b/go/ql/test/query-tests/Security/CWE-643/XPathInjection.expected index 34fbf42f85f..753444333d9 100644 --- a/go/ql/test/query-tests/Security/CWE-643/XPathInjection.expected +++ b/go/ql/test/query-tests/Security/CWE-643/XPathInjection.expected @@ -1,57 +1,57 @@ edges -| XPathInjection.go:13:14:13:19 | selection of Form | XPathInjection.go:13:14:13:35 | call to Get | -| XPathInjection.go:13:14:13:35 | call to Get | XPathInjection.go:16:29:16:91 | ...+... | -| tst.go:34:14:34:19 | selection of Form | tst.go:34:14:34:35 | call to Get | -| tst.go:34:14:34:35 | call to Get | tst.go:37:23:37:85 | ...+... | -| tst.go:34:14:34:35 | call to Get | tst.go:40:24:40:86 | ...+... | -| tst.go:34:14:34:35 | call to Get | tst.go:43:24:43:82 | ...+... | -| tst.go:48:14:48:19 | selection of Form | tst.go:48:14:48:35 | call to Get | -| tst.go:48:14:48:35 | call to Get | tst.go:51:26:51:84 | ...+... | -| tst.go:48:14:48:35 | call to Get | tst.go:54:29:54:87 | ...+... | -| tst.go:48:14:48:35 | call to Get | tst.go:57:33:57:91 | ...+... | -| tst.go:48:14:48:35 | call to Get | tst.go:60:30:60:88 | ...+... | -| tst.go:65:14:65:19 | selection of Form | tst.go:65:14:65:35 | call to Get | -| tst.go:65:14:65:35 | call to Get | tst.go:68:25:68:83 | ...+... | -| tst.go:65:14:65:35 | call to Get | tst.go:71:28:71:86 | ...+... | -| tst.go:65:14:65:35 | call to Get | tst.go:74:25:74:83 | ...+... | -| tst.go:65:14:65:35 | call to Get | tst.go:77:34:77:92 | ...+... | -| tst.go:65:14:65:35 | call to Get | tst.go:80:32:80:90 | ...+... | -| tst.go:65:14:65:35 | call to Get | tst.go:83:29:83:87 | ...+... | -| tst.go:65:14:65:35 | call to Get | tst.go:86:23:86:85 | ...+... | -| tst.go:65:14:65:35 | call to Get | tst.go:89:22:89:84 | ...+... | -| tst.go:94:14:94:19 | selection of Form | tst.go:94:14:94:35 | call to Get | -| tst.go:94:14:94:35 | call to Get | tst.go:97:26:97:84 | ...+... | -| tst.go:94:14:94:35 | call to Get | tst.go:100:29:100:87 | ...+... | -| tst.go:94:14:94:35 | call to Get | tst.go:103:33:103:91 | ...+... | -| tst.go:94:14:94:35 | call to Get | tst.go:106:30:106:88 | ...+... | -| tst.go:111:14:111:19 | selection of Form | tst.go:111:14:111:35 | call to Get | -| tst.go:111:14:111:35 | call to Get | tst.go:114:25:114:87 | ...+... | -| tst.go:111:14:111:35 | call to Get | tst.go:117:26:117:88 | ...+... | -| tst.go:122:14:122:19 | selection of Form | tst.go:122:14:122:35 | call to Get | -| tst.go:122:14:122:35 | call to Get | tst.go:126:23:126:126 | ...+... | -| tst.go:122:14:122:35 | call to Get | tst.go:129:24:129:127 | ...+... | -| tst.go:122:14:122:35 | call to Get | tst.go:132:27:132:122 | ...+... | -| tst.go:123:14:123:19 | selection of Form | tst.go:123:14:123:35 | call to Get | -| tst.go:123:14:123:35 | call to Get | tst.go:126:23:126:126 | ...+... | -| tst.go:123:14:123:35 | call to Get | tst.go:129:24:129:127 | ...+... | -| tst.go:123:14:123:35 | call to Get | tst.go:132:27:132:122 | ...+... | -| tst.go:140:14:140:19 | selection of Form | tst.go:140:14:140:35 | call to Get | -| tst.go:140:14:140:35 | call to Get | tst.go:143:27:143:89 | ...+... | -| tst.go:140:14:140:35 | call to Get | tst.go:146:28:146:90 | ...+... | -| tst.go:151:14:151:19 | selection of Form | tst.go:151:14:151:35 | call to Get | -| tst.go:151:14:151:35 | call to Get | tst.go:155:33:155:136 | ...+... | -| tst.go:151:14:151:35 | call to Get | tst.go:158:18:158:121 | ...+... | -| tst.go:151:14:151:35 | call to Get | tst.go:164:31:164:126 | ...+... | -| tst.go:151:14:151:35 | call to Get | tst.go:173:21:173:116 | ...+... | -| tst.go:151:14:151:35 | call to Get | tst.go:182:27:182:122 | ...+... | -| tst.go:152:14:152:19 | selection of Form | tst.go:152:14:152:35 | call to Get | -| tst.go:152:14:152:35 | call to Get | tst.go:155:33:155:136 | ...+... | -| tst.go:152:14:152:35 | call to Get | tst.go:158:18:158:121 | ...+... | -| tst.go:152:14:152:35 | call to Get | tst.go:164:31:164:126 | ...+... | -| tst.go:152:14:152:35 | call to Get | tst.go:173:21:173:116 | ...+... | -| tst.go:152:14:152:35 | call to Get | tst.go:182:27:182:122 | ...+... | -| tst.go:193:14:193:19 | selection of Form | tst.go:193:14:193:35 | call to Get | -| tst.go:193:14:193:35 | call to Get | tst.go:198:23:198:85 | ...+... | +| XPathInjection.go:13:14:13:19 | selection of Form | XPathInjection.go:13:14:13:35 | call to Get | provenance | | +| XPathInjection.go:13:14:13:35 | call to Get | XPathInjection.go:16:29:16:91 | ...+... | provenance | | +| tst.go:34:14:34:19 | selection of Form | tst.go:34:14:34:35 | call to Get | provenance | | +| tst.go:34:14:34:35 | call to Get | tst.go:37:23:37:85 | ...+... | provenance | | +| tst.go:34:14:34:35 | call to Get | tst.go:40:24:40:86 | ...+... | provenance | | +| tst.go:34:14:34:35 | call to Get | tst.go:43:24:43:82 | ...+... | provenance | | +| tst.go:48:14:48:19 | selection of Form | tst.go:48:14:48:35 | call to Get | provenance | | +| tst.go:48:14:48:35 | call to Get | tst.go:51:26:51:84 | ...+... | provenance | | +| tst.go:48:14:48:35 | call to Get | tst.go:54:29:54:87 | ...+... | provenance | | +| tst.go:48:14:48:35 | call to Get | tst.go:57:33:57:91 | ...+... | provenance | | +| tst.go:48:14:48:35 | call to Get | tst.go:60:30:60:88 | ...+... | provenance | | +| tst.go:65:14:65:19 | selection of Form | tst.go:65:14:65:35 | call to Get | provenance | | +| tst.go:65:14:65:35 | call to Get | tst.go:68:25:68:83 | ...+... | provenance | | +| tst.go:65:14:65:35 | call to Get | tst.go:71:28:71:86 | ...+... | provenance | | +| tst.go:65:14:65:35 | call to Get | tst.go:74:25:74:83 | ...+... | provenance | | +| tst.go:65:14:65:35 | call to Get | tst.go:77:34:77:92 | ...+... | provenance | | +| tst.go:65:14:65:35 | call to Get | tst.go:80:32:80:90 | ...+... | provenance | | +| tst.go:65:14:65:35 | call to Get | tst.go:83:29:83:87 | ...+... | provenance | | +| tst.go:65:14:65:35 | call to Get | tst.go:86:23:86:85 | ...+... | provenance | | +| tst.go:65:14:65:35 | call to Get | tst.go:89:22:89:84 | ...+... | provenance | | +| tst.go:94:14:94:19 | selection of Form | tst.go:94:14:94:35 | call to Get | provenance | | +| tst.go:94:14:94:35 | call to Get | tst.go:97:26:97:84 | ...+... | provenance | | +| tst.go:94:14:94:35 | call to Get | tst.go:100:29:100:87 | ...+... | provenance | | +| tst.go:94:14:94:35 | call to Get | tst.go:103:33:103:91 | ...+... | provenance | | +| tst.go:94:14:94:35 | call to Get | tst.go:106:30:106:88 | ...+... | provenance | | +| tst.go:111:14:111:19 | selection of Form | tst.go:111:14:111:35 | call to Get | provenance | | +| tst.go:111:14:111:35 | call to Get | tst.go:114:25:114:87 | ...+... | provenance | | +| tst.go:111:14:111:35 | call to Get | tst.go:117:26:117:88 | ...+... | provenance | | +| tst.go:122:14:122:19 | selection of Form | tst.go:122:14:122:35 | call to Get | provenance | | +| tst.go:122:14:122:35 | call to Get | tst.go:126:23:126:126 | ...+... | provenance | | +| tst.go:122:14:122:35 | call to Get | tst.go:129:24:129:127 | ...+... | provenance | | +| tst.go:122:14:122:35 | call to Get | tst.go:132:27:132:122 | ...+... | provenance | | +| tst.go:123:14:123:19 | selection of Form | tst.go:123:14:123:35 | call to Get | provenance | | +| tst.go:123:14:123:35 | call to Get | tst.go:126:23:126:126 | ...+... | provenance | | +| tst.go:123:14:123:35 | call to Get | tst.go:129:24:129:127 | ...+... | provenance | | +| tst.go:123:14:123:35 | call to Get | tst.go:132:27:132:122 | ...+... | provenance | | +| tst.go:140:14:140:19 | selection of Form | tst.go:140:14:140:35 | call to Get | provenance | | +| tst.go:140:14:140:35 | call to Get | tst.go:143:27:143:89 | ...+... | provenance | | +| tst.go:140:14:140:35 | call to Get | tst.go:146:28:146:90 | ...+... | provenance | | +| tst.go:151:14:151:19 | selection of Form | tst.go:151:14:151:35 | call to Get | provenance | | +| tst.go:151:14:151:35 | call to Get | tst.go:155:33:155:136 | ...+... | provenance | | +| tst.go:151:14:151:35 | call to Get | tst.go:158:18:158:121 | ...+... | provenance | | +| tst.go:151:14:151:35 | call to Get | tst.go:164:31:164:126 | ...+... | provenance | | +| tst.go:151:14:151:35 | call to Get | tst.go:173:21:173:116 | ...+... | provenance | | +| tst.go:151:14:151:35 | call to Get | tst.go:182:27:182:122 | ...+... | provenance | | +| tst.go:152:14:152:19 | selection of Form | tst.go:152:14:152:35 | call to Get | provenance | | +| tst.go:152:14:152:35 | call to Get | tst.go:155:33:155:136 | ...+... | provenance | | +| tst.go:152:14:152:35 | call to Get | tst.go:158:18:158:121 | ...+... | provenance | | +| tst.go:152:14:152:35 | call to Get | tst.go:164:31:164:126 | ...+... | provenance | | +| tst.go:152:14:152:35 | call to Get | tst.go:173:21:173:116 | ...+... | provenance | | +| tst.go:152:14:152:35 | call to Get | tst.go:182:27:182:122 | ...+... | provenance | | +| tst.go:193:14:193:19 | selection of Form | tst.go:193:14:193:35 | call to Get | provenance | | +| tst.go:193:14:193:35 | call to Get | tst.go:198:23:198:85 | ...+... | provenance | | nodes | XPathInjection.go:13:14:13:19 | selection of Form | semmle.label | selection of Form | | XPathInjection.go:13:14:13:35 | call to Get | semmle.label | call to Get | diff --git a/go/ql/test/query-tests/Security/CWE-918/RequestForgery.expected b/go/ql/test/query-tests/Security/CWE-918/RequestForgery.expected index b843de1c0b1..c3d6015d748 100644 --- a/go/ql/test/query-tests/Security/CWE-918/RequestForgery.expected +++ b/go/ql/test/query-tests/Security/CWE-918/RequestForgery.expected @@ -1,32 +1,32 @@ edges -| RequestForgery.go:8:12:8:34 | call to FormValue | RequestForgery.go:11:24:11:65 | ...+... | -| tst.go:10:13:10:35 | call to FormValue | tst.go:14:11:14:17 | tainted | -| tst.go:10:13:10:35 | call to FormValue | tst.go:18:12:18:18 | tainted | -| tst.go:10:13:10:35 | call to FormValue | tst.go:21:34:21:40 | tainted | -| tst.go:10:13:10:35 | call to FormValue | tst.go:24:66:24:72 | tainted | -| tst.go:10:13:10:35 | call to FormValue | tst.go:27:11:27:29 | ...+... | -| tst.go:10:13:10:35 | call to FormValue | tst.go:29:11:29:40 | ...+... | -| tst.go:10:13:10:35 | call to FormValue | tst.go:36:11:36:17 | tainted | -| tst.go:35:2:35:2 | definition of u [pointer] | tst.go:36:2:36:2 | u [pointer] | -| tst.go:36:2:36:2 | implicit dereference | tst.go:35:2:35:2 | definition of u [pointer] | -| tst.go:36:2:36:2 | implicit dereference | tst.go:36:2:36:2 | u | -| tst.go:36:2:36:2 | implicit dereference | tst.go:37:11:37:11 | u | -| tst.go:36:2:36:2 | u | tst.go:36:2:36:2 | implicit dereference | -| tst.go:36:2:36:2 | u | tst.go:36:2:36:2 | u | -| tst.go:36:2:36:2 | u | tst.go:37:11:37:11 | u | -| tst.go:36:2:36:2 | u [pointer] | tst.go:36:2:36:2 | implicit dereference | -| tst.go:36:11:36:17 | tainted | tst.go:36:2:36:2 | u | -| tst.go:36:11:36:17 | tainted | tst.go:37:11:37:11 | u | -| tst.go:37:11:37:11 | u | tst.go:37:11:37:20 | call to String | -| websocket.go:60:21:60:31 | call to Referer | websocket.go:65:27:65:40 | untrustedInput | -| websocket.go:74:21:74:31 | call to Referer | websocket.go:78:36:78:49 | untrustedInput | -| websocket.go:88:21:88:31 | call to Referer | websocket.go:91:31:91:44 | untrustedInput | -| websocket.go:107:21:107:31 | call to Referer | websocket.go:110:15:110:28 | untrustedInput | -| websocket.go:126:21:126:31 | call to Referer | websocket.go:129:38:129:51 | untrustedInput | -| websocket.go:154:21:154:31 | call to Referer | websocket.go:155:31:155:44 | untrustedInput | -| websocket.go:160:21:160:31 | call to Referer | websocket.go:162:31:162:44 | untrustedInput | -| websocket.go:195:21:195:31 | call to Referer | websocket.go:197:18:197:31 | untrustedInput | -| websocket.go:202:21:202:31 | call to Referer | websocket.go:204:11:204:24 | untrustedInput | +| RequestForgery.go:8:12:8:34 | call to FormValue | RequestForgery.go:11:24:11:65 | ...+... | provenance | | +| tst.go:10:13:10:35 | call to FormValue | tst.go:14:11:14:17 | tainted | provenance | | +| tst.go:10:13:10:35 | call to FormValue | tst.go:18:12:18:18 | tainted | provenance | | +| tst.go:10:13:10:35 | call to FormValue | tst.go:21:34:21:40 | tainted | provenance | | +| tst.go:10:13:10:35 | call to FormValue | tst.go:24:66:24:72 | tainted | provenance | | +| tst.go:10:13:10:35 | call to FormValue | tst.go:27:11:27:29 | ...+... | provenance | | +| tst.go:10:13:10:35 | call to FormValue | tst.go:29:11:29:40 | ...+... | provenance | | +| tst.go:10:13:10:35 | call to FormValue | tst.go:36:11:36:17 | tainted | provenance | | +| tst.go:35:2:35:2 | definition of u [pointer] | tst.go:36:2:36:2 | u [pointer] | provenance | | +| tst.go:36:2:36:2 | implicit dereference | tst.go:35:2:35:2 | definition of u [pointer] | provenance | | +| tst.go:36:2:36:2 | implicit dereference | tst.go:36:2:36:2 | u | provenance | | +| tst.go:36:2:36:2 | implicit dereference | tst.go:37:11:37:11 | u | provenance | | +| tst.go:36:2:36:2 | u | tst.go:36:2:36:2 | implicit dereference | provenance | | +| tst.go:36:2:36:2 | u | tst.go:36:2:36:2 | u | provenance | | +| tst.go:36:2:36:2 | u | tst.go:37:11:37:11 | u | provenance | | +| tst.go:36:2:36:2 | u [pointer] | tst.go:36:2:36:2 | implicit dereference | provenance | | +| tst.go:36:11:36:17 | tainted | tst.go:36:2:36:2 | u | provenance | | +| tst.go:36:11:36:17 | tainted | tst.go:37:11:37:11 | u | provenance | | +| tst.go:37:11:37:11 | u | tst.go:37:11:37:20 | call to String | provenance | | +| websocket.go:60:21:60:31 | call to Referer | websocket.go:65:27:65:40 | untrustedInput | provenance | | +| websocket.go:74:21:74:31 | call to Referer | websocket.go:78:36:78:49 | untrustedInput | provenance | | +| websocket.go:88:21:88:31 | call to Referer | websocket.go:91:31:91:44 | untrustedInput | provenance | | +| websocket.go:107:21:107:31 | call to Referer | websocket.go:110:15:110:28 | untrustedInput | provenance | | +| websocket.go:126:21:126:31 | call to Referer | websocket.go:129:38:129:51 | untrustedInput | provenance | | +| websocket.go:154:21:154:31 | call to Referer | websocket.go:155:31:155:44 | untrustedInput | provenance | | +| websocket.go:160:21:160:31 | call to Referer | websocket.go:162:31:162:44 | untrustedInput | provenance | | +| websocket.go:195:21:195:31 | call to Referer | websocket.go:197:18:197:31 | untrustedInput | provenance | | +| websocket.go:202:21:202:31 | call to Referer | websocket.go:204:11:204:24 | untrustedInput | provenance | | nodes | RequestForgery.go:8:12:8:34 | call to FormValue | semmle.label | call to FormValue | | RequestForgery.go:11:24:11:65 | ...+... | semmle.label | ...+... | From 228a61ead3460109c6543355aad95a69470352aa Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Tue, 6 Feb 2024 13:33:21 +0100 Subject: [PATCH 115/378] Swift: Add empty provenance column to expected files. --- .../dataflow/dataflow/DataFlow.expected | 1266 ++++++++--------- .../dataflow/taint/core/Taint.expected | 432 +++--- .../CWE-078/CommandInjection.expected | 360 ++--- .../CWE-079/UnsafeWebViewFetch.expected | 130 +- .../Security/CWE-089/SqlInjection.expected | 236 +-- .../Security/CWE-094/UnsafeJsEval.expected | 108 +- .../StaticInitializationVector.expected | 80 +- .../CWE-134/UncontrolledFormatString.expected | 70 +- .../CWE-135/StringLengthConflation.expected | 84 +- .../CWE-259/ConstantPassword.expected | 60 +- .../CWE-311/CleartextStorageDatabase.expected | 622 ++++---- .../CWE-311/CleartextTransmission.expected | 66 +- .../CleartextStoragePreferences.expected | 28 +- .../CWE-321/HardcodedEncryptionKey.expected | 140 +- .../Security/CWE-327/ECBEncryption.expected | 12 +- .../CWE-328/WeakPasswordHashing.expected | 4 +- .../Security/CWE-730/RegexInjection.expected | 46 +- .../Security/CWE-757/InsecureTLS.expected | 146 +- .../Security/CWE-760/ConstantSalt.expected | 48 +- .../InsufficientHashIterations.expected | 6 +- 20 files changed, 1972 insertions(+), 1972 deletions(-) diff --git a/swift/ql/test/library-tests/dataflow/dataflow/DataFlow.expected b/swift/ql/test/library-tests/dataflow/dataflow/DataFlow.expected index 7abf18a9063..10e7d32b57b 100644 --- a/swift/ql/test/library-tests/dataflow/dataflow/DataFlow.expected +++ b/swift/ql/test/library-tests/dataflow/dataflow/DataFlow.expected @@ -1,637 +1,637 @@ edges -| file://:0:0:0:0 | .wrappedValue | test.swift:949:15:949:15 | x | -| file://:0:0:0:0 | .wrappedValue | test.swift:951:15:951:15 | x | -| file://:0:0:0:0 | KeyPathComponent [some:0] | test.swift:663:13:663:29 | exit #keyPath(...) [some:0] | -| file://:0:0:0:0 | [post] self [wrappedValue] | file://:0:0:0:0 | self [wrappedValue] | -| file://:0:0:0:0 | self [a, x] | file://:0:0:0:0 | .a [x] | -| file://:0:0:0:0 | self [s, x] | file://:0:0:0:0 | .s [x] | -| file://:0:0:0:0 | self [str] | file://:0:0:0:0 | .str | -| file://:0:0:0:0 | self [v2, some:0] | file://:0:0:0:0 | .v2 [some:0] | -| file://:0:0:0:0 | self [v2] | file://:0:0:0:0 | .v2 | -| file://:0:0:0:0 | self [v3] | file://:0:0:0:0 | .v3 | -| file://:0:0:0:0 | self [v] | file://:0:0:0:0 | .v | -| file://:0:0:0:0 | self [wrappedValue] | test.swift:958:9:958:9 | self [wrappedValue] | -| file://:0:0:0:0 | self [x, some:0] | file://:0:0:0:0 | .x [some:0] | -| file://:0:0:0:0 | self [x] | file://:0:0:0:0 | .x | -| file://:0:0:0:0 | self [x] | file://:0:0:0:0 | .x | -| file://:0:0:0:0 | self [x] | file://:0:0:0:0 | .x | -| file://:0:0:0:0 | value | file://:0:0:0:0 | [post] self [v2] | -| file://:0:0:0:0 | value | file://:0:0:0:0 | [post] self [v3] | -| file://:0:0:0:0 | value | file://:0:0:0:0 | [post] self [v] | -| file://:0:0:0:0 | value | file://:0:0:0:0 | [post] self [wrappedValue] | -| file://:0:0:0:0 | value | file://:0:0:0:0 | [post] self [x] | -| file://:0:0:0:0 | value | file://:0:0:0:0 | [post] self [x] | -| file://:0:0:0:0 | value | test.swift:938:9:938:9 | newValue | -| file://:0:0:0:0 | value | test.swift:957:9:957:9 | value | -| file://:0:0:0:0 | value | test.swift:965:9:965:9 | newValue | -| file://:0:0:0:0 | value [some:0] | file://:0:0:0:0 | [post] self [v2, some:0] | -| file://:0:0:0:0 | value [some:0] | file://:0:0:0:0 | [post] self [x, some:0] | -| test.swift:6:19:6:26 | call to source() | test.swift:7:15:7:15 | t1 | -| test.swift:6:19:6:26 | call to source() | test.swift:9:15:9:15 | t1 | -| test.swift:6:19:6:26 | call to source() | test.swift:10:15:10:15 | t2 | -| test.swift:25:20:25:27 | call to source() | test.swift:29:18:29:21 | x | -| test.swift:26:26:26:33 | call to source() | test.swift:29:26:29:29 | y | -| test.swift:29:18:29:21 | x | test.swift:30:15:30:15 | x | -| test.swift:29:26:29:29 | y | test.swift:31:15:31:15 | y | -| test.swift:35:12:35:19 | call to source() | test.swift:39:15:39:29 | call to callee_source() | -| test.swift:43:19:43:26 | call to source() | test.swift:50:15:50:15 | t | -| test.swift:53:1:56:1 | arg[return] | test.swift:61:23:61:23 | [post] x | -| test.swift:54:11:54:18 | call to source() | test.swift:53:1:56:1 | arg[return] | -| test.swift:61:23:61:23 | [post] x | test.swift:62:15:62:15 | x | -| test.swift:65:16:65:28 | arg1 | test.swift:65:1:70:1 | arg2[return] | -| test.swift:73:18:73:25 | call to source() | test.swift:75:22:75:22 | x | -| test.swift:73:18:73:25 | call to source() | test.swift:76:15:76:15 | x | -| test.swift:75:22:75:22 | x | test.swift:65:16:65:28 | arg1 | -| test.swift:75:22:75:22 | x | test.swift:75:32:75:32 | [post] y | -| test.swift:75:32:75:32 | [post] y | test.swift:77:15:77:15 | y | -| test.swift:80:1:82:1 | arg[return] | test.swift:97:40:97:40 | [post] x | -| test.swift:81:11:81:18 | call to source() | test.swift:80:1:82:1 | arg[return] | -| test.swift:84:1:91:1 | arg[return] | test.swift:104:41:104:41 | [post] x | -| test.swift:86:15:86:22 | call to source() | test.swift:84:1:91:1 | arg[return] | -| test.swift:89:15:89:22 | call to source() | test.swift:84:1:91:1 | arg[return] | -| test.swift:97:40:97:40 | [post] x | test.swift:98:19:98:19 | x | -| test.swift:104:41:104:41 | [post] x | test.swift:105:19:105:19 | x | -| test.swift:109:9:109:14 | arg | test.swift:110:12:110:12 | arg | -| test.swift:113:14:113:19 | arg | test.swift:114:19:114:19 | arg | -| test.swift:113:14:113:19 | arg | test.swift:114:19:114:19 | arg | -| test.swift:114:19:114:19 | arg | test.swift:109:9:109:14 | arg | -| test.swift:114:19:114:19 | arg | test.swift:114:12:114:22 | call to ... | -| test.swift:114:19:114:19 | arg | test.swift:114:12:114:22 | call to ... | -| test.swift:114:19:114:19 | arg | test.swift:123:10:123:13 | i | -| test.swift:118:18:118:25 | call to source() | test.swift:119:31:119:31 | x | -| test.swift:119:18:119:44 | call to forward(arg:lambda:) | test.swift:120:15:120:15 | y | -| test.swift:119:31:119:31 | x | test.swift:113:14:113:19 | arg | -| test.swift:119:31:119:31 | x | test.swift:119:18:119:44 | call to forward(arg:lambda:) | -| test.swift:122:18:125:6 | call to forward(arg:lambda:) | test.swift:126:15:126:15 | z | -| test.swift:122:31:122:38 | call to source() | test.swift:113:14:113:19 | arg | -| test.swift:122:31:122:38 | call to source() | test.swift:122:18:125:6 | call to forward(arg:lambda:) | -| test.swift:123:10:123:13 | i | test.swift:124:16:124:16 | i | -| test.swift:142:10:142:13 | i | test.swift:143:16:143:16 | i | -| test.swift:145:23:145:30 | call to source() | test.swift:142:10:142:13 | i | -| test.swift:145:23:145:30 | call to source() | test.swift:145:15:145:31 | call to ... | -| test.swift:149:16:149:23 | call to source() | test.swift:151:15:151:28 | call to ... | -| test.swift:149:16:149:23 | call to source() | test.swift:159:16:159:29 | call to ... | -| test.swift:154:10:154:13 | i | test.swift:155:19:155:19 | i | -| test.swift:157:16:157:23 | call to source() | test.swift:154:10:154:13 | i | -| test.swift:159:16:159:29 | call to ... | test.swift:154:10:154:13 | i | -| test.swift:163:7:163:7 | self [x] | file://:0:0:0:0 | self [x] | -| test.swift:163:7:163:7 | value | file://:0:0:0:0 | value | -| test.swift:169:12:169:22 | value | test.swift:170:9:170:9 | value | -| test.swift:170:5:170:5 | [post] self [x] | test.swift:169:3:171:3 | self[return] [x] | -| test.swift:170:9:170:9 | value | test.swift:163:7:163:7 | value | -| test.swift:170:9:170:9 | value | test.swift:170:5:170:5 | [post] self [x] | -| test.swift:173:8:173:8 | self [x] | test.swift:174:12:174:12 | self [x] | -| test.swift:174:12:174:12 | self [x] | test.swift:163:7:163:7 | self [x] | -| test.swift:174:12:174:12 | self [x] | test.swift:174:12:174:12 | .x | -| test.swift:180:3:180:3 | [post] a [x] | test.swift:181:13:181:13 | a [x] | -| test.swift:180:9:180:16 | call to source() | test.swift:163:7:163:7 | value | -| test.swift:180:9:180:16 | call to source() | 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] | -| test.swift:181:13:181:13 | a [x] | test.swift:181:13:181:15 | .x | -| test.swift:185:7:185:7 | self [a, x] | file://:0:0:0:0 | self [a, x] | -| test.swift:194:3:194:3 | [post] b [a, x] | test.swift:195:13:195:13 | b [a, x] | -| test.swift:194:3:194:5 | [post] getter for .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:194:11:194:18 | call to source() | 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] | -| test.swift:195:13:195:13 | b [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] | -| test.swift:195:13:195:15 | .a [x] | test.swift:195:13:195:17 | .x | -| test.swift:200:3:200:3 | [post] a [x] | test.swift:201:13:201:13 | a [x] | -| test.swift:200:9:200:16 | call to source() | test.swift:169:12:169:22 | value | -| test.swift:200:9:200:16 | call to source() | 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] | -| test.swift:201:13:201:13 | a [x] | test.swift:201:13:201:15 | .x | -| test.swift:206:3:206:3 | [post] a [x] | test.swift:207:13:207:13 | a [x] | -| test.swift:206:9:206:16 | call to source() | test.swift:163:7:163:7 | value | -| test.swift:206:9:206:16 | call to source() | 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:207:13:207:13 | a [x] | test.swift:207:13:207:19 | call to get() | -| test.swift:212:3:212:3 | [post] a [x] | test.swift:213:13:213:13 | a [x] | -| test.swift:212:9:212:16 | call to source() | test.swift:169:12:169:22 | value | -| test.swift:212:9:212:16 | call to source() | 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:213:13:213:13 | a [x] | test.swift:213:13:213:19 | call to get() | -| test.swift:218:3:218:3 | [post] b [a, x] | test.swift:219:13:219:13 | b [a, x] | -| test.swift:218:3:218:5 | [post] getter for .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:218:11:218:18 | call to source() | 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] | -| test.swift:219:13:219:13 | b [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] | -| test.swift:219:13:219:15 | .a [x] | test.swift:219:13:219:17 | .x | -| test.swift:225:14:225:21 | call to source() | test.swift:235:13:235:15 | .source_value | -| test.swift:225:14:225:21 | call to source() | test.swift:238:13:238:15 | .source_value | -| test.swift:259:12:259:19 | call to source() | test.swift:259:12:259:19 | call to source() [some:0] | -| test.swift:259:12:259:19 | call to source() | test.swift:263:13:263:28 | call to optionalSource() | -| test.swift:259:12:259:19 | call to source() | test.swift:536:13:536:28 | call to optionalSource() | -| test.swift:259:12:259:19 | call to source() | test.swift:563:13:563:28 | call to optionalSource() | -| test.swift:259:12:259:19 | call to source() [some:0] | test.swift:263:13:263:28 | call to optionalSource() [some:0] | -| test.swift:259:12:259:19 | call to source() [some:0] | test.swift:536:13:536:28 | call to optionalSource() [some:0] | -| test.swift:259:12:259:19 | call to source() [some:0] | test.swift:563:13:563:28 | call to optionalSource() [some:0] | -| test.swift:263:13:263:28 | call to optionalSource() | test.swift:265:15:265:15 | x | -| test.swift:263:13:263:28 | call to optionalSource() | test.swift:267:15:267:16 | ...! | -| test.swift:263:13:263:28 | call to optionalSource() | test.swift:271:15:271:16 | ...? | -| test.swift:263:13:263:28 | call to optionalSource() | test.swift:274:15:274:20 | ... ??(_:_:) ... | -| test.swift:263:13:263:28 | call to optionalSource() | test.swift:275:15:275:27 | ... ??(_:_:) ... | -| test.swift:263:13:263:28 | call to optionalSource() | test.swift:279:15:279:31 | ... ? ... : ... | -| test.swift:263:13:263:28 | call to optionalSource() | test.swift:280:15:280:38 | ... ? ... : ... | -| test.swift:263:13:263:28 | call to optionalSource() | test.swift:285:19:285:19 | z | -| test.swift:263:13:263:28 | call to optionalSource() | test.swift:291:16:291:17 | ...? | -| test.swift:263:13:263:28 | call to optionalSource() | test.swift:300:15:300:15 | z1 | -| test.swift:263:13:263:28 | call to optionalSource() | test.swift:303:15:303:16 | ...! | -| test.swift:263:13:263:28 | call to optionalSource() [some:0] | test.swift:267:15:267:15 | x [some:0] | -| test.swift:263:13:263:28 | call to optionalSource() [some:0] | test.swift:279:26:279:26 | x [some:0] | -| test.swift:263:13:263:28 | call to optionalSource() [some:0] | test.swift:280:26:280:26 | x [some:0] | -| test.swift:263:13:263:28 | call to optionalSource() [some:0] | test.swift:284:8:284:12 | let ...? [some:0] | -| test.swift:263:13:263:28 | call to optionalSource() [some:0] | test.swift:291:16:291:17 | ...? [some:0] | -| test.swift:263:13:263:28 | call to optionalSource() [some:0] | test.swift:298:11:298:15 | let ...? [some:0] | -| test.swift:263:13:263:28 | call to optionalSource() [some:0] | test.swift:303:15:303:15 | x [some:0] | -| test.swift:263:13:263:28 | call to optionalSource() [some:0] | test.swift:306:13:306:24 | .some(...) [some:0] | -| test.swift:263:13:263:28 | call to optionalSource() [some:0] | test.swift:314:10:314:21 | .some(...) [some:0] | -| test.swift:267:15:267:15 | x [some:0] | test.swift:267:15:267:16 | ...! | -| test.swift:270:15:270:22 | call to source() | test.swift:270:15:270:31 | call to signum() | -| test.swift:271:15:271:16 | ...? | test.swift:271:15:271:25 | call to signum() | -| test.swift:271:15:271:25 | call to signum() | test.swift:271:15:271:25 | OptionalEvaluationExpr | -| test.swift:275:20:275:27 | call to source() | test.swift:275:15:275:27 | ... ??(_:_:) ... | -| test.swift:277:20:277:27 | call to source() | test.swift:277:15:277:27 | ... ??(_:_:) ... | -| test.swift:279:26:279:26 | x [some:0] | test.swift:279:26:279:27 | ...! | -| test.swift:279:26:279:27 | ...! | test.swift:279:15:279:31 | ... ? ... : ... | -| test.swift:280:26:280:26 | x [some:0] | test.swift:280:26:280:27 | ...! | -| test.swift:280:26:280:27 | ...! | test.swift:280:15:280:38 | ... ? ... : ... | -| test.swift:280:31:280:38 | call to source() | test.swift:280:15:280:38 | ... ? ... : ... | -| test.swift:282:31:282:38 | call to source() | test.swift:282:15:282:38 | ... ? ... : ... | -| test.swift:284:8:284:12 | let ...? [some:0] | test.swift:284:12:284:12 | z | -| test.swift:284:12:284:12 | z | test.swift:285:19:285:19 | z | -| test.swift:291:8:291:12 | let ...? [some:0] | test.swift:291:12:291:12 | z | -| test.swift:291:12:291:12 | z | test.swift:292:19:292:19 | z | -| test.swift:291:16:291:17 | ...? | test.swift:291:16:291:26 | call to signum() | -| test.swift:291:16:291:17 | ...? [some:0] | test.swift:291:16:291:26 | call to signum() [some:0] | -| test.swift:291:16:291:26 | call to signum() | test.swift:291:16:291:26 | call to signum() [some:0] | -| test.swift:291:16:291:26 | call to signum() | test.swift:292:19:292:19 | z | -| test.swift:291:16:291:26 | call to signum() [some:0] | test.swift:291:8:291:12 | let ...? [some:0] | -| test.swift:298:11:298:15 | let ...? [some:0] | test.swift:298:15:298:15 | z1 | -| test.swift:298:15:298:15 | z1 | test.swift:300:15:300:15 | z1 | -| test.swift:303:15:303:15 | x [some:0] | test.swift:303:15:303:16 | ...! | -| test.swift:303:15:303:16 | ...! | test.swift:303:15:303:25 | call to signum() | -| test.swift:306:13:306:24 | .some(...) [some:0] | test.swift:306:23:306:23 | z | -| test.swift:306:23:306:23 | z | test.swift:307:19:307:19 | z | -| test.swift:314:10:314:21 | .some(...) [some:0] | test.swift:314:20:314:20 | z | -| test.swift:314:20:314:20 | z | test.swift:315:19:315:19 | z | -| test.swift:331:14:331:26 | (...) [Tuple element at index 1] | test.swift:335:15:335:15 | t1 [Tuple element at index 1] | -| test.swift:331:18:331:25 | call to source() | test.swift:331:14:331:26 | (...) [Tuple element at index 1] | -| test.swift:335:15:335:15 | t1 [Tuple element at index 1] | test.swift:335:15:335:18 | .1 | -| test.swift:343:5:343:5 | [post] t1 [Tuple element at index 0] | test.swift:346:15:346:15 | t1 [Tuple element at index 0] | -| test.swift:343:12:343:19 | call to source() | test.swift:343:5:343:5 | [post] t1 [Tuple element at index 0] | -| test.swift:346:15:346:15 | t1 [Tuple element at index 0] | test.swift:346:15:346:18 | .0 | -| test.swift:351:14:351:45 | (...) [Tuple element at index 0] | test.swift:353:9:353:17 | (...) [Tuple element at index 0] | -| test.swift:351:14:351:45 | (...) [Tuple element at index 0] | test.swift:356:15:356:15 | t1 [Tuple element at index 0] | -| test.swift:351:14:351:45 | (...) [Tuple element at index 0] | test.swift:360:15:360:15 | t2 [Tuple element at index 0] | -| test.swift:351:14:351:45 | (...) [Tuple element at index 1] | test.swift:353:9:353:17 | (...) [Tuple element at index 1] | -| test.swift:351:14:351:45 | (...) [Tuple element at index 1] | test.swift:357:15:357:15 | t1 [Tuple element at index 1] | -| test.swift:351:14:351:45 | (...) [Tuple element at index 1] | test.swift:361:15:361:15 | t2 [Tuple element at index 1] | -| test.swift:351:18:351:25 | call to source() | test.swift:351:14:351:45 | (...) [Tuple element at index 0] | -| test.swift:351:31:351:38 | call to source() | test.swift:351:14:351:45 | (...) [Tuple element at index 1] | -| test.swift:353:9:353:17 | (...) [Tuple element at index 0] | test.swift:353:10:353:10 | a | -| test.swift:353:9:353:17 | (...) [Tuple element at index 1] | test.swift:353:13:353:13 | b | -| test.swift:353:10:353:10 | a | test.swift:363:15:363:15 | a | -| test.swift:353:13:353:13 | b | test.swift:364:15:364:15 | b | -| test.swift:356:15:356:15 | t1 [Tuple element at index 0] | test.swift:356:15:356:18 | .0 | -| test.swift:357:15:357:15 | t1 [Tuple element at index 1] | test.swift:357:15:357:18 | .1 | -| test.swift:360:15:360:15 | t2 [Tuple element at index 0] | test.swift:360:15:360:18 | .0 | -| test.swift:361:15:361:15 | t2 [Tuple element at index 1] | test.swift:361:15:361:18 | .1 | -| test.swift:368:22:368:36 | t [Tuple element at index 1] | test.swift:369:13:369:13 | t [Tuple element at index 1] | -| test.swift:369:13:369:13 | t [Tuple element at index 1] | test.swift:369:13:369:15 | .1 | -| test.swift:369:13:369:15 | .1 | test.swift:369:12:369:19 | (...) [Tuple element at index 0] | -| test.swift:375:14:375:26 | (...) [Tuple element at index 1] | test.swift:376:30:376:30 | t1 [Tuple element at index 1] | -| test.swift:375:14:375:26 | (...) [Tuple element at index 1] | test.swift:377:30:377:30 | t1 [Tuple element at index 1] | -| test.swift:375:14:375:26 | (...) [Tuple element at index 1] | test.swift:380:15:380:15 | t1 [Tuple element at index 1] | -| test.swift:375:18:375:25 | call to source() | test.swift:375:14:375:26 | (...) [Tuple element at index 1] | -| test.swift:376:14:376:32 | call to tupleShiftLeft1(_:) [Tuple element at index 0] | test.swift:381:15:381:15 | t2 [Tuple element at index 0] | -| 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:376:30:376:30 | t1 [Tuple element at index 1] | test.swift:376:14:376:32 | call to tupleShiftLeft1(_:) [Tuple element at index 0] | -| test.swift:377:14:377:32 | call to tupleShiftLeft2(_:) [Tuple element at index 0] | test.swift:383:15:383:15 | t3 [Tuple element at index 0] | -| test.swift:377:30:377:30 | t1 [Tuple element at index 1] | test.swift:377:14:377:32 | call to tupleShiftLeft2(_:) [Tuple element at index 0] | -| test.swift:380:15:380:15 | t1 [Tuple element at index 1] | test.swift:380:15:380:18 | .1 | -| test.swift:381:15:381:15 | t2 [Tuple element at index 0] | test.swift:381:15:381:18 | .0 | -| test.swift:383:15:383:15 | t3 [Tuple element at index 0] | test.swift:383:15:383:18 | .0 | -| test.swift:394:16:394:21 | v | test.swift:394:61:394:61 | v | -| test.swift:394:61:394:61 | v | test.swift:394:45:394:62 | call to ... [mySingle:0] | -| test.swift:396:18:396:23 | v | test.swift:396:59:396:59 | v | -| test.swift:396:59:396:59 | v | test.swift:396:45:396:60 | call to ... [some:0] | -| test.swift:422:9:422:27 | call to ... [mySingle:0] | test.swift:427:10:427:25 | .mySingle(...) [mySingle:0] | -| test.swift:422:9:422:27 | call to ... [mySingle:0] | test.swift:436:13:436:28 | .mySingle(...) [mySingle:0] | -| test.swift:422:19:422:26 | call to source() | test.swift:422:9:422:27 | call to ... [mySingle:0] | -| test.swift:427:10:427:25 | .mySingle(...) [mySingle:0] | test.swift:427:24:427:24 | a | -| test.swift:427:24:427:24 | a | test.swift:428:19:428:19 | a | -| test.swift:436:13:436:28 | .mySingle(...) [mySingle:0] | test.swift:436:27:436:27 | x | -| test.swift:436:27:436:27 | x | test.swift:437:19:437:19 | x | -| test.swift:444:9:444:34 | call to ... [myPair:1] | test.swift:451:10:451:30 | .myPair(...) [myPair:1] | -| test.swift:444:9:444:34 | call to ... [myPair:1] | test.swift:461:13:461:33 | .myPair(...) [myPair:1] | -| test.swift:444:9:444:34 | call to ... [myPair:1] | test.swift:466:33:466:33 | a [myPair:1] | -| test.swift:444:9:444:34 | call to ... [myPair:1] | test.swift:495:13:495:13 | a [myPair:1] | -| test.swift:444:26:444:33 | call to source() | test.swift:444:9:444:34 | call to ... [myPair:1] | -| test.swift:451:10:451:30 | .myPair(...) [myPair:1] | test.swift:451:29:451:29 | b | -| test.swift:451:29:451:29 | b | test.swift:453:19:453:19 | b | -| test.swift:461:13:461:33 | .myPair(...) [myPair:1] | test.swift:461:32:461:32 | y | -| test.swift:461:32:461:32 | y | test.swift:463:19:463:19 | y | -| test.swift:466:21:466:34 | call to ... [myCons:1, myPair:1] | test.swift:476:14:476:38 | .myCons(...) [myCons:1, myPair:1] | -| test.swift:466:21:466:34 | call to ... [myCons:1, myPair:1] | test.swift:491:17:491:41 | .myCons(...) [myCons:1, myPair:1] | -| test.swift:466:21:466:34 | call to ... [myCons:1, myPair:1] | test.swift:495:16:495:16 | b [myCons:1, myPair:1] | -| test.swift:466:33:466:33 | a [myPair:1] | test.swift:466:21:466:34 | call to ... [myCons:1, myPair:1] | -| test.swift:476:14:476:38 | .myCons(...) [myCons:1, myPair:1] | test.swift:476:25:476:37 | .myPair(...) [myPair:1] | -| test.swift:476:25:476:37 | .myPair(...) [myPair:1] | test.swift:476:36:476:36 | c | -| test.swift:476:36:476:36 | c | test.swift:479:19:479:19 | c | -| test.swift:487:13:487:39 | .myPair(...) [myPair:0] | test.swift:487:31:487:31 | x | -| test.swift:487:31:487:31 | x | test.swift:488:19:488:19 | x | -| test.swift:487:43:487:62 | call to ... [myPair:0] | test.swift:487:13:487:39 | .myPair(...) [myPair:0] | -| test.swift:487:51:487:58 | call to source() | test.swift:487:43:487:62 | call to ... [myPair:0] | -| test.swift:491:17:491:41 | .myCons(...) [myCons:1, myPair:1] | test.swift:491:28:491:40 | .myPair(...) [myPair:1] | -| test.swift:491:28:491:40 | .myPair(...) [myPair:1] | test.swift:491:39:491:39 | c | -| test.swift:491:39:491:39 | c | test.swift:492:19:492:19 | c | -| test.swift:495:12:495:17 | (...) [Tuple element at index 0, myPair:1] | test.swift:496:14:496:55 | (...) [Tuple element at index 0, myPair:1] | -| test.swift:495:12:495:17 | (...) [Tuple element at index 1, myCons:1, myPair:1] | test.swift:496:14:496:55 | (...) [Tuple element at index 1, myCons:1, myPair:1] | -| test.swift:495:13:495:13 | a [myPair:1] | test.swift:495:12:495:17 | (...) [Tuple element at index 0, myPair:1] | -| test.swift:495:16:495:16 | b [myCons:1, myPair:1] | test.swift:495:12:495:17 | (...) [Tuple element at index 1, myCons:1, myPair:1] | -| test.swift:496:14:496:55 | (...) [Tuple element at index 0, myPair:1] | test.swift:496:15:496:27 | .myPair(...) [myPair:1] | -| test.swift:496:14:496:55 | (...) [Tuple element at index 1, myCons:1, myPair:1] | test.swift:496:30:496:54 | .myCons(...) [myCons:1, myPair:1] | -| test.swift:496:15:496:27 | .myPair(...) [myPair:1] | test.swift:496:26:496:26 | b | -| test.swift:496:26:496:26 | b | test.swift:498:19:498:19 | b | -| test.swift:496:30:496:54 | .myCons(...) [myCons:1, myPair:1] | test.swift:496:41:496:53 | .myPair(...) [myPair:1] | -| test.swift:496:41:496:53 | .myPair(...) [myPair:1] | test.swift:496:52:496:52 | e | -| test.swift:496:52:496:52 | e | test.swift:501:19:501:19 | e | -| test.swift:507:14:507:38 | call to ... [mySingle:0] | test.swift:513:13:513:35 | .mySingle(...) [mySingle:0] | -| test.swift:507:30:507:37 | call to source() | test.swift:507:14:507:38 | call to ... [mySingle:0] | -| test.swift:509:14:509:32 | call to mkMyEnum1(_:) [mySingle:0] | test.swift:515:13:515:35 | .mySingle(...) [mySingle:0] | -| test.swift:509:24:509:31 | call to source() | test.swift:394:16:394:21 | v | -| test.swift:509:24:509:31 | call to source() | test.swift:509:14:509:32 | call to mkMyEnum1(_:) [mySingle:0] | -| test.swift:511:14:511:32 | call to mkMyEnum2(_:) [mySingle:0] | test.swift:517:13:517:35 | .mySingle(...) [mySingle:0] | -| test.swift:511:24:511:31 | call to source() | test.swift:511:14:511:32 | call to mkMyEnum2(_:) [mySingle:0] | -| test.swift:513:13:513:35 | .mySingle(...) [mySingle:0] | test.swift:513:33:513:33 | d2 | -| test.swift:513:33:513:33 | d2 | test.swift:513:54:513:54 | d2 | -| test.swift:515:13:515:35 | .mySingle(...) [mySingle:0] | test.swift:515:33:515:33 | d4 | -| test.swift:515:33:515:33 | d4 | test.swift:515:54:515:54 | d4 | -| test.swift:517:13:517:35 | .mySingle(...) [mySingle:0] | test.swift:517:33:517:33 | d6 | -| test.swift:517:33:517:33 | d6 | test.swift:517:54:517:54 | d6 | -| test.swift:520:14:520:36 | call to ... [some:0] | test.swift:526:15:526:15 | e2 [some:0] | -| test.swift:520:28:520:35 | call to source() | test.swift:520:14:520:36 | call to ... [some:0] | -| test.swift:522:14:522:34 | call to mkOptional1(_:) [some:0] | test.swift:528:15:528:15 | e4 [some:0] | -| test.swift:522:26:522:33 | call to source() | test.swift:396:18:396:23 | v | -| test.swift:522:26:522:33 | call to source() | test.swift:522:14:522:34 | call to mkOptional1(_:) [some:0] | -| test.swift:524:14:524:34 | call to mkOptional2(_:) [some:0] | test.swift:530:15:530:15 | e6 [some:0] | -| test.swift:524:26:524:33 | call to source() | test.swift:524:14:524:34 | call to mkOptional2(_:) [some:0] | -| test.swift:526:15:526:15 | e2 [some:0] | test.swift:526:15:526:17 | ...! | -| test.swift:528:15:528:15 | e4 [some:0] | test.swift:528:15:528:17 | ...! | -| test.swift:530:15:530:15 | e6 [some:0] | test.swift:530:15:530:17 | ...! | -| test.swift:536:13:536:28 | call to optionalSource() | test.swift:539:19:539:19 | a | -| test.swift:536:13:536:28 | call to optionalSource() [some:0] | test.swift:538:8:538:12 | let ...? [some:0] | -| test.swift:536:13:536:28 | call to optionalSource() [some:0] | test.swift:543:19:543:19 | x [some:0] | -| test.swift:538:8:538:12 | let ...? [some:0] | test.swift:538:12:538:12 | a | -| test.swift:538:12:538:12 | a | test.swift:539:19:539:19 | a | -| test.swift:543:18:543:23 | (...) [Tuple element at index 0, some:0] | test.swift:545:10:545:37 | (...) [Tuple element at index 0, some:0] | -| test.swift:543:19:543:19 | x [some:0] | test.swift:543:18:543:23 | (...) [Tuple element at index 0, some:0] | -| test.swift:545:10:545:37 | (...) [Tuple element at index 0, some:0] | test.swift:545:11:545:22 | .some(...) [some:0] | -| test.swift:545:11:545:22 | .some(...) [some:0] | test.swift:545:21:545:21 | a | -| test.swift:545:21:545:21 | a | test.swift:546:19:546:19 | a | -| test.swift:559:9:559:9 | self [x, some:0] | file://:0:0:0:0 | self [x, some:0] | -| test.swift:559:9:559:9 | self [x] | file://:0:0:0:0 | self [x] | -| test.swift:559:9:559:9 | value | file://:0:0:0:0 | value | -| test.swift:559:9:559:9 | value [some:0] | file://:0:0:0:0 | value [some:0] | -| test.swift:563:13:563:28 | call to optionalSource() | test.swift:565:12:565:12 | x | -| test.swift:563:13:563:28 | call to optionalSource() [some:0] | test.swift:565:12:565:12 | 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:565:5:565:5 | [post] cx [x] | test.swift:569:20:569:20 | cx [x] | -| test.swift:565:12:565:12 | x | test.swift:559:9:559:9 | value | -| test.swift:565:12:565:12 | 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:565:12:565:12 | x [some:0] | test.swift:565:5:565:5 | [post] cx [x, some:0] | -| test.swift:569:11:569:15 | let ...? [some:0] | test.swift:569:15:569:15 | z1 | -| test.swift:569:15:569:15 | z1 | test.swift:570:15:570:15 | z1 | -| test.swift:569:20:569:20 | cx [x, some:0] | test.swift:559:9:559:9 | self [x, some:0] | -| test.swift:569:20:569:20 | cx [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] | -| test.swift:569:20:569:20 | cx [x] | test.swift:569:20:569:23 | .x | -| test.swift:569:20:569:23 | .x | test.swift:570:15:570:15 | z1 | -| test.swift:569:20:569:23 | .x [some:0] | test.swift:569:11:569:15 | let ...? [some:0] | -| test.swift:576:14:576:21 | call to source() | test.swift:576:13:576:21 | call to +(_:) | -| test.swift:585:9:585:9 | self [str] | file://:0:0:0:0 | self [str] | -| test.swift:586:10:586:13 | s | test.swift:587:13:587:13 | s | -| test.swift:587:7:587:7 | [post] self [str] | test.swift:586:5:588:5 | self[return] [str] | -| test.swift:587:13:587:13 | s | test.swift:587:7:587:7 | [post] self [str] | -| test.swift:592:17:595:5 | self[return] [str] | test.swift:600:13:600:41 | call to MyClass.init(contentsOfFile:) [str] | -| test.swift:593:7:593:7 | [post] self [str] | test.swift:592:17:595:5 | self[return] [str] | -| test.swift:593:7:593:7 | [post] self [str] | test.swift:594:17:594:17 | self [str] | -| test.swift:593:20:593:28 | call to source3() | test.swift:586:10:586:13 | s | -| test.swift:593:20:593:28 | call to source3() | test.swift:593:7:593:7 | [post] self [str] | -| test.swift:594:17:594:17 | self [str] | test.swift:594:17:594:17 | .str | -| test.swift:599:13:599:33 | call to MyClass.init(s:) [str] | test.swift:585:9:585:9 | self [str] | -| test.swift:599:13:599:33 | call to MyClass.init(s:) [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:599:24:599:32 | call to source3() | 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] | -| test.swift:600:13:600:41 | call to MyClass.init(contentsOfFile:) [str] | test.swift:600:13:600:43 | .str | -| test.swift:615:7:615:7 | self [x] | file://:0:0:0:0 | self [x] | -| test.swift:617:8:617:11 | x | test.swift:618:14:618:14 | x | -| test.swift:618:5:618:5 | [post] self [x] | test.swift:617:3:619:3 | self[return] [x] | -| test.swift:618:14:618:14 | x | test.swift:618:5:618:5 | [post] self [x] | -| test.swift:623:11:623:24 | call to S.init(x:) [x] | test.swift:625:13:625:13 | s [x] | -| test.swift:623:11:623:24 | call to S.init(x:) [x] | test.swift:628:13:628:13 | s [x] | -| test.swift:623:16:623:23 | call to source() | test.swift:617:8:617:11 | x | -| test.swift:623:16:623:23 | call to source() | test.swift:623:11:623:24 | call to S.init(x:) [x] | -| test.swift:624:11:624:14 | enter #keyPath(...) [x] | test.swift:624:14:624:14 | KeyPathComponent | -| test.swift:624:14:624:14 | KeyPathComponent | test.swift:624:11:624:14 | exit #keyPath(...) | -| test.swift:625:13:625:13 | s [x] | test.swift:624:11:624:14 | enter #keyPath(...) [x] | -| test.swift:625:13:625:13 | s [x] | test.swift:625:13:625:25 | \\...[...] | -| test.swift:627:36:627:38 | enter #keyPath(...) [x] | test.swift:627:38:627:38 | KeyPathComponent | -| test.swift:627:38:627:38 | KeyPathComponent | test.swift:627:36:627:38 | exit #keyPath(...) | -| test.swift:628:13:628:13 | s [x] | test.swift:627:36:627:38 | enter #keyPath(...) [x] | -| test.swift:628:13:628:13 | s [x] | test.swift:628:13:628:32 | \\...[...] | -| test.swift:632:7:632:7 | self [s, x] | file://:0:0:0:0 | self [s, x] | -| test.swift:634:8:634:11 | s [x] | test.swift:635:14:635:14 | s [x] | -| test.swift:635:5:635:5 | [post] self [s, x] | test.swift:634:3:636:3 | self[return] [s, x] | -| test.swift:635:14:635:14 | s [x] | test.swift:635:5:635:5 | [post] self [s, x] | -| test.swift:640:11:640:24 | call to S.init(x:) [x] | test.swift:641:18:641:18 | s [x] | -| test.swift:640:16:640:23 | call to source() | test.swift:617:8:617:11 | x | -| test.swift:640:16:640:23 | call to source() | test.swift:640:11:640:24 | call to S.init(x:) [x] | -| test.swift:641:12:641:19 | call to S2.init(s:) [s, x] | test.swift:643:13:643:13 | s2 [s, x] | -| test.swift:641:18:641:18 | s [x] | test.swift:634:8:634:11 | s [x] | -| test.swift:641:18:641:18 | s [x] | test.swift:641:12:641:19 | call to S2.init(s:) [s, x] | -| test.swift:642:11:642:17 | enter #keyPath(...) [s, x] | test.swift:642:15:642:15 | KeyPathComponent [x] | -| test.swift:642:15:642:15 | KeyPathComponent [x] | test.swift:642:17:642:17 | KeyPathComponent | -| test.swift:642:17:642:17 | KeyPathComponent | test.swift:642:11:642:17 | exit #keyPath(...) | -| test.swift:643:13:643:13 | s2 [s, x] | test.swift:642:11:642:17 | enter #keyPath(...) [s, x] | -| test.swift:643:13:643:13 | s2 [s, x] | test.swift:643:13:643:26 | \\...[...] | -| test.swift:647:17:647:26 | [...] [Collection element] | test.swift:649:15:649:15 | array [Collection element] | -| test.swift:647:18:647:25 | call to source() | test.swift:647:17:647:26 | [...] [Collection element] | -| test.swift:648:13:648:22 | enter #keyPath(...) [Collection element] | test.swift:648:20:648:22 | KeyPathComponent | -| test.swift:648:20:648:22 | KeyPathComponent | test.swift:648:13:648:22 | exit #keyPath(...) | -| test.swift:649:15:649:15 | array [Collection element] | test.swift:648:13:648:22 | enter #keyPath(...) [Collection element] | -| test.swift:649:15:649:15 | array [Collection element] | test.swift:649:15:649:31 | \\...[...] | -| test.swift:655:8:655:12 | s [some:0, x] | test.swift:656:14:656:14 | s [some:0, x] | -| test.swift:656:5:656:5 | [post] self [s, some:0, x] | test.swift:655:3:657:3 | self[return] [s, some:0, x] | -| test.swift:656:14:656:14 | s [some:0, x] | test.swift:656:5:656:5 | [post] self [s, some:0, x] | -| test.swift:661:13:661:26 | call to S.init(x:) [x] | test.swift:662:29:662:29 | s [x] | -| test.swift:661:18:661:25 | call to source() | test.swift:617:8:617:11 | x | -| test.swift:661:18:661:25 | call to source() | test.swift:661:13:661:26 | call to S.init(x:) [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:662:29:662:29 | s [some:0, x] | test.swift:655:8:655:12 | s [some:0, x] | -| test.swift:662:29:662:29 | s [some:0, x] | test.swift:662:14:662:30 | call to S2_Optional.init(s:) [s, some:0, x] | -| test.swift:662:29:662:29 | s [x] | test.swift:662:29:662:29 | s [some:0, x] | -| test.swift:663:13:663:29 | enter #keyPath(...) [s, some:0, x] | test.swift:663:26:663:26 | KeyPathComponent [some:0, x] | -| test.swift:663:26:663:26 | KeyPathComponent [some:0, x] | test.swift:663:27:663:27 | KeyPathComponent [x] | -| test.swift:663:27:663:27 | KeyPathComponent [x] | test.swift:663:29:663:29 | KeyPathComponent | -| test.swift:663:29:663:29 | KeyPathComponent | file://:0:0:0:0 | KeyPathComponent [some:0] | -| 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:664:15:664:15 | s2 [s, some:0, x] | test.swift:664:15:664:28 | \\...[...] [some:0] | -| test.swift:664:15:664:28 | \\...[...] [some:0] | test.swift:664:15:664:29 | ...! | -| test.swift:668:13:668:20 | call to source() | test.swift:676:15:676:15 | y | -| test.swift:678:9:678:16 | call to source() | test.swift:680:11:680:11 | x | -| test.swift:678:9:678:16 | call to source() | test.swift:681:15:681:15 | x | -| test.swift:680:11:680:11 | x | test.swift:680:15:680:15 | [post] y | -| test.swift:680:15:680:15 | [post] y | test.swift:682:15:682:15 | y | -| test.swift:688:5:688:5 | [post] arr1 [Collection element] | test.swift:689:15:689:15 | arr1 [Collection element] | -| test.swift:688:15:688:22 | call to source() | test.swift:688:5:688:5 | [post] arr1 [Collection element] | -| test.swift:689:15:689:15 | arr1 [Collection element] | test.swift:689:15:689:21 | ...[...] | -| test.swift:692:16:692:25 | [...] [Collection element] | test.swift:693:15:693:15 | arr2 [Collection element] | -| test.swift:692:17:692:24 | call to source() | test.swift:692:16:692:25 | [...] [Collection element] | -| test.swift:693:15:693:15 | arr2 [Collection element] | test.swift:693:15:693:21 | ...[...] | -| test.swift:695:18:695:29 | [...] [Collection element, Collection element] | test.swift:697:15:697:15 | matrix [Collection element, Collection element] | -| test.swift:695:19:695:28 | [...] [Collection element] | test.swift:695:18:695:29 | [...] [Collection element, Collection element] | -| test.swift:695:20:695:27 | call to source() | test.swift:695:19:695:28 | [...] [Collection element] | -| test.swift:697:15:697:15 | matrix [Collection element, Collection element] | test.swift:697:15:697:23 | ...[...] [Collection element] | -| test.swift:697:15:697:23 | ...[...] [Collection element] | test.swift:697:15:697:26 | ...[...] | -| test.swift:700:5:700:5 | [post] matrix2 [Collection element, Collection element] | test.swift:701:15:701:15 | matrix2 [Collection element, Collection element] | -| test.swift:700:5:700:14 | [post] getter for ...[...] [Collection element] | test.swift:700:5:700:5 | [post] matrix2 [Collection element, Collection element] | -| test.swift:700:21:700:28 | call to source() | test.swift:700:5:700:14 | [post] getter for ...[...] [Collection element] | -| test.swift:701:15:701:15 | matrix2 [Collection element, Collection element] | test.swift:701:15:701:24 | ...[...] [Collection element] | -| test.swift:701:15:701:24 | ...[...] [Collection element] | test.swift:701:15:701:27 | ...[...] | -| test.swift:708:16:708:51 | call to Array.init(repeating:count:) [Collection element] | test.swift:709:15:709:15 | arr5 [Collection element] | -| test.swift:708:33:708:40 | call to source() | test.swift:708:16:708:51 | call to Array.init(repeating:count:) [Collection element] | -| test.swift:709:15:709:15 | arr5 [Collection element] | test.swift:709:15:709:21 | ...[...] | -| test.swift:712:5:712:5 | [post] arr6 [Collection element] | test.swift:713:15:713:15 | arr6 [Collection element] | -| test.swift:712:17:712:24 | call to source() | test.swift:712:5:712:5 | [post] arr6 [Collection element] | -| test.swift:713:15:713:15 | arr6 [Collection element] | test.swift:713:15:713:21 | ...[...] | -| test.swift:715:16:715:25 | [...] [Collection element] | test.swift:716:15:716:15 | arr7 [Collection element] | -| test.swift:715:17:715:24 | call to source() | test.swift:715:16:715:25 | [...] [Collection element] | -| test.swift:716:15:716:15 | arr7 [Collection element] | test.swift:716:15:716:34 | call to randomElement() [some:0] | -| test.swift:716:15:716:34 | call to randomElement() [some:0] | test.swift:716:15:716:35 | ...! | -| test.swift:722:5:722:5 | [post] set1 [Collection element] | test.swift:723:15:723:15 | set1 [Collection element] | -| test.swift:722:17:722:24 | call to source() | test.swift:722:5:722:5 | [post] set1 [Collection element] | -| test.swift:723:15:723:15 | set1 [Collection element] | test.swift:723:15:723:34 | call to randomElement() [some:0] | -| test.swift:723:15:723:34 | call to randomElement() [some:0] | test.swift:723:15:723:35 | ...! | -| test.swift:725:16:725:30 | call to Set.init(_:) [Collection element] | test.swift:726:15:726:15 | set2 [Collection element] | -| test.swift:725:20:725:29 | [...] [Collection element] | test.swift:725:16:725:30 | call to Set.init(_:) [Collection element] | -| test.swift:725:21:725:28 | call to source() | test.swift:725:20:725:29 | [...] [Collection element] | -| test.swift:726:15:726:15 | set2 [Collection element] | test.swift:726:15:726:34 | call to randomElement() [some:0] | -| test.swift:726:15:726:34 | call to randomElement() [some:0] | test.swift:726:15:726:35 | ...! | -| test.swift:731:9:731:9 | self [v2, some:0] | file://:0:0:0:0 | self [v2, some:0] | -| test.swift:731:9:731:9 | self [v2] | file://:0:0:0:0 | self [v2] | -| test.swift:731:9:731:9 | value | file://:0:0:0:0 | value | -| test.swift:731:9:731:9 | value [some:0] | file://:0:0:0:0 | value [some:0] | -| test.swift:732:9:732:9 | self [v3] | file://:0:0:0:0 | self [v3] | -| test.swift:732:9:732:9 | value | file://:0:0:0:0 | value | -| test.swift:742:5:742:5 | v1 [some:0] | test.swift:752:15:752:15 | v1 [some:0] | -| test.swift:742:11:742:18 | call to source() | test.swift:742:5:742:5 | v1 [some:0] | -| test.swift:743:10:743:17 | call to source() | test.swift:743:10:743:17 | call to source() [some:0] | -| test.swift:743:10:743:17 | call to source() | test.swift:753:15:753:17 | ...! | -| test.swift:743:10:743:17 | call to source() [some:0] | test.swift:753:15:753:15 | v2 [some:0] | -| test.swift:744:10:744:17 | call to source() | test.swift:754:15:754:15 | v3 | -| test.swift:746:5:746:5 | [post] mo1 [v2, some:0] | test.swift:747:5:747:5 | mo1 [v2, some:0] | -| test.swift:746:5:746:5 | [post] mo1 [v2] | test.swift:747:5:747:5 | mo1 [v2] | -| test.swift:746:14:746:21 | call to source() | test.swift:731:9:731:9 | value | -| test.swift:746:14:746:21 | call to source() | test.swift:746:5:746:5 | [post] mo1 [v2] | -| test.swift:746:14:746:21 | call to source() | test.swift:746:14:746:21 | call to source() [some:0] | -| test.swift:746:14:746:21 | call to source() [some:0] | test.swift:731:9:731:9 | value [some:0] | -| test.swift:746:14:746:21 | call to source() [some:0] | test.swift:746:5:746:5 | [post] mo1 [v2, some:0] | -| test.swift:747:5:747:5 | [post] mo1 [v3] | test.swift:757:15:757:15 | mo1 [v3] | -| test.swift:747:5:747:5 | mo1 [v2, some:0] | test.swift:756:15:756:15 | mo1 [v2, some:0] | -| test.swift:747:5:747:5 | mo1 [v2] | test.swift:756:15:756:15 | mo1 [v2] | -| test.swift:747:14:747:21 | call to source() | test.swift:732:9:732:9 | value | -| test.swift:747:14:747:21 | call to source() | test.swift:747:5:747:5 | [post] mo1 [v3] | -| test.swift:752:15:752:15 | v1 [some:0] | test.swift:752:15:752:17 | ...! | -| test.swift:753:15:753:15 | v2 [some:0] | test.swift:753:15:753:17 | ...! | -| test.swift:756:15:756:15 | mo1 [v2, some:0] | test.swift:731:9:731:9 | self [v2, some:0] | -| test.swift:756:15:756:15 | mo1 [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] | -| test.swift:756:15:756:15 | mo1 [v2] | test.swift:756:15:756:19 | .v2 | -| test.swift:756:15:756:19 | .v2 | test.swift:756:15:756:21 | ...! | -| test.swift:756:15:756:19 | .v2 [some:0] | test.swift:756:15:756:21 | ...! | -| test.swift:757:15:757:15 | mo1 [v3] | test.swift:732:9:732:9 | self [v3] | -| test.swift:757:15:757:15 | mo1 [v3] | test.swift:757:15:757:19 | .v3 | -| test.swift:764:13:764:26 | call to S.init(x:) [x] | test.swift:765:29:765:29 | s [x] | -| test.swift:764:18:764:25 | call to source() | test.swift:617:8:617:11 | x | -| test.swift:764:18:764:25 | call to source() | test.swift:764:13:764:26 | call to S.init(x:) [x] | -| test.swift:765:14:765:30 | call to S2_Optional.init(s:) [s, some:0, x] | test.swift:767:15:767:15 | s2 [s, some:0, x] | -| test.swift:765:29:765:29 | s [some:0, x] | test.swift:655:8:655:12 | s [some:0, x] | -| test.swift:765:29:765:29 | s [some:0, x] | test.swift:765:14:765:30 | call to S2_Optional.init(s:) [s, some:0, x] | -| test.swift:765:29:765:29 | s [x] | test.swift:765:29:765:29 | s [some:0, x] | -| test.swift:766:13:766:29 | enter #keyPath(...) [s, some:0, x] | test.swift:766:26:766:26 | KeyPathComponent [some:0, x] | -| test.swift:766:26:766:26 | KeyPathComponent [some:0, x] | test.swift:766:26:766:26 | KeyPathComponent [x] | -| test.swift:766:26:766:26 | KeyPathComponent [x] | test.swift:766:29:766:29 | KeyPathComponent | -| test.swift:766:29:766:29 | KeyPathComponent | test.swift:766:13:766:29 | exit #keyPath(...) | -| test.swift:767:15:767:15 | s2 [s, some:0, x] | test.swift:766:13:766:29 | enter #keyPath(...) [s, some:0, x] | -| test.swift:767:15:767:15 | s2 [s, some:0, x] | test.swift:767:15:767:28 | \\...[...] | -| test.swift:774:5:774:5 | [post] dict1 [Collection element, Tuple element at index 1] | test.swift:776:15:776:15 | dict1 [Collection element, Tuple element at index 1] | -| test.swift:774:5:774:12 | DictionarySubscriptNode [Tuple element at index 1] | test.swift:774:5:774:5 | [post] dict1 [Collection element, Tuple element at index 1] | -| test.swift:774:16:774:23 | call to source() | test.swift:774:5:774:12 | DictionarySubscriptNode [Tuple element at index 1] | -| test.swift:776:15:776:15 | dict1 [Collection element, Tuple element at index 1] | test.swift:776:15:776:22 | DictionarySubscriptNode [Tuple element at index 1] | -| test.swift:776:15:776:22 | DictionarySubscriptNode [Tuple element at index 1] | test.swift:776:15:776:22 | ...[...] | -| test.swift:778:17:778:29 | [...] [Collection element, Tuple element at index 0] | test.swift:781:25:781:25 | dict2 [Collection element, Tuple element at index 0] | -| test.swift:778:18:778:25 | call to source() | test.swift:778:18:778:28 | (...) [Tuple element at index 0] | -| test.swift:778:18:778:28 | (...) [Tuple element at index 0] | test.swift:778:17:778:29 | [...] [Collection element, Tuple element at index 0] | -| test.swift:781:5:781:5 | $generator [Collection element, Tuple element at index 0] | test.swift:781:5:781:5 | call to next() [some:0, Tuple element at index 0] | -| test.swift:781:5:781:5 | call to next() [some:0, Tuple element at index 0] | test.swift:781:9:781:20 | (...) [Tuple element at index 0] | -| test.swift:781:9:781:20 | (...) [Tuple element at index 0] | test.swift:781:10:781:10 | key | -| test.swift:781:10:781:10 | key | test.swift:782:19:782:19 | key | -| test.swift:781:25:781:25 | call to makeIterator() [Collection element, Tuple element at index 0] | test.swift:781:5:781:5 | $generator [Collection element, Tuple element at index 0] | -| test.swift:781:25:781:25 | dict2 [Collection element, Tuple element at index 0] | test.swift:781:25:781:25 | call to makeIterator() [Collection element, Tuple element at index 0] | -| test.swift:786:17:786:29 | [...] [Collection element, Tuple element at index 1] | test.swift:787:15:787:15 | dict3 [Collection element, Tuple element at index 1] | -| test.swift:786:17:786:29 | [...] [Collection element, Tuple element at index 1] | test.swift:789:5:789:5 | dict3 [Collection element, Tuple element at index 1] | -| test.swift:786:17:786:29 | [...] [Collection element, Tuple element at index 1] | test.swift:792:15:792:15 | dict3 [Collection element, Tuple element at index 1] | -| test.swift:786:17:786:29 | [...] [Collection element, Tuple element at index 1] | test.swift:794:25:794:25 | dict3 [Collection element, Tuple element at index 1] | -| test.swift:786:18:786:28 | (...) [Tuple element at index 1] | test.swift:786:17:786:29 | [...] [Collection element, Tuple element at index 1] | -| test.swift:786:21:786:28 | call to source() | test.swift:786:18:786:28 | (...) [Tuple element at index 1] | -| test.swift:787:15:787:15 | dict3 [Collection element, Tuple element at index 1] | test.swift:787:15:787:22 | DictionarySubscriptNode [Tuple element at index 1] | -| test.swift:787:15:787:22 | DictionarySubscriptNode [Tuple element at index 1] | test.swift:787:15:787:22 | ...[...] | -| test.swift:789:5:789:5 | [post] dict3 [Collection element, Tuple element at index 0] | test.swift:791:15:791:15 | dict3 [Collection element, Tuple element at index 0] | -| test.swift:789:5:789:5 | [post] dict3 [Collection element, Tuple element at index 0] | test.swift:794:25:794:25 | dict3 [Collection element, Tuple element at index 0] | -| test.swift:789:5:789:5 | [post] dict3 [Collection element, Tuple element at index 1] | test.swift:792:15:792:15 | dict3 [Collection element, Tuple element at index 1] | -| test.swift:789:5:789:5 | [post] dict3 [Collection element, Tuple element at index 1] | test.swift:794:25:794:25 | dict3 [Collection element, Tuple element at index 1] | -| test.swift:789:5:789:5 | dict3 [Collection element, Tuple element at index 1] | test.swift:789:5:789:19 | DictionarySubscriptNode [Tuple element at index 1] | -| test.swift:789:5:789:19 | DictionarySubscriptNode [Tuple element at index 0] | test.swift:789:5:789:5 | [post] dict3 [Collection element, Tuple element at index 0] | -| test.swift:789:5:789:19 | DictionarySubscriptNode [Tuple element at index 1] | test.swift:789:5:789:5 | [post] dict3 [Collection element, Tuple element at index 1] | -| test.swift:789:11:789:18 | call to source() | test.swift:789:5:789:19 | DictionarySubscriptNode [Tuple element at index 0] | -| test.swift:791:15:791:15 | dict3 [Collection element, Tuple element at index 0] | test.swift:791:15:791:35 | call to randomElement() [some:0, Tuple element at index 0] | -| test.swift:791:15:791:35 | call to randomElement() [some:0, Tuple element at index 0] | test.swift:791:15:791:36 | ...! [Tuple element at index 0] | -| test.swift:791:15:791:36 | ...! [Tuple element at index 0] | test.swift:791:15:791:38 | .0 | -| test.swift:792:15:792:15 | dict3 [Collection element, Tuple element at index 1] | test.swift:792:15:792:35 | call to randomElement() [some:0, Tuple element at index 1] | -| test.swift:792:15:792:35 | call to randomElement() [some:0, Tuple element at index 1] | test.swift:792:15:792:36 | ...! [Tuple element at index 1] | -| test.swift:792:15:792:36 | ...! [Tuple element at index 1] | test.swift:792:15:792:38 | .1 | -| test.swift:794:5:794:5 | $generator [Collection element, Tuple element at index 0] | test.swift:794:5:794:5 | call to next() [some:0, Tuple element at index 0] | -| test.swift:794:5:794:5 | $generator [Collection element, Tuple element at index 1] | test.swift:794:5:794:5 | call to next() [some:0, Tuple element at index 1] | -| test.swift:794:5:794:5 | call to next() [some:0, Tuple element at index 0] | test.swift:794:9:794:20 | (...) [Tuple element at index 0] | -| test.swift:794:5:794:5 | call to next() [some:0, Tuple element at index 1] | test.swift:794:9:794:20 | (...) [Tuple element at index 1] | -| test.swift:794:9:794:20 | (...) [Tuple element at index 0] | test.swift:794:10:794:10 | key | -| test.swift:794:9:794:20 | (...) [Tuple element at index 1] | test.swift:794:15:794:15 | value | -| test.swift:794:10:794:10 | key | test.swift:795:19:795:19 | key | -| test.swift:794:15:794:15 | value | test.swift:796:19:796:19 | value | -| test.swift:794:25:794:25 | call to makeIterator() [Collection element, Tuple element at index 0] | test.swift:794:5:794:5 | $generator [Collection element, Tuple element at index 0] | -| test.swift:794:25:794:25 | call to makeIterator() [Collection element, Tuple element at index 1] | test.swift:794:5:794:5 | $generator [Collection element, Tuple element at index 1] | -| test.swift:794:25:794:25 | dict3 [Collection element, Tuple element at index 0] | test.swift:794:25:794:25 | call to makeIterator() [Collection element, Tuple element at index 0] | -| test.swift:794:25:794:25 | dict3 [Collection element, Tuple element at index 1] | test.swift:794:25:794:25 | call to makeIterator() [Collection element, Tuple element at index 1] | -| test.swift:799:17:799:28 | [...] [Collection element, Tuple element at index 1] | test.swift:800:15:800:15 | dict4 [Collection element, Tuple element at index 1] | -| test.swift:799:17:799:28 | [...] [Collection element, Tuple element at index 1] | test.swift:801:15:801:15 | dict4 [Collection element, Tuple element at index 1] | -| test.swift:799:17:799:28 | [...] [Collection element, Tuple element at index 1] | test.swift:803:15:803:15 | dict4 [Collection element, Tuple element at index 1] | -| test.swift:799:18:799:27 | (...) [Tuple element at index 1] | test.swift:799:17:799:28 | [...] [Collection element, Tuple element at index 1] | -| test.swift:799:20:799:27 | call to source() | test.swift:799:18:799:27 | (...) [Tuple element at index 1] | -| test.swift:800:15:800:15 | [post] dict4 [Collection element, Tuple element at index 0] | test.swift:802:15:802:15 | dict4 [Collection element, Tuple element at index 0] | -| test.swift:800:15:800:15 | dict4 [Collection element, Tuple element at index 1] | test.swift:800:15:800:52 | call to updateValue(_:forKey:) [some:0] | -| test.swift:800:15:800:52 | call to updateValue(_:forKey:) [some:0] | test.swift:800:15:800:53 | ...! | -| test.swift:800:44:800:51 | call to source() | test.swift:800:15:800:15 | [post] dict4 [Collection element, Tuple element at index 0] | -| test.swift:801:15:801:15 | [post] dict4 [Collection element, Tuple element at index 1] | test.swift:803:15:803:15 | dict4 [Collection element, Tuple element at index 1] | -| test.swift:801:15:801:15 | dict4 [Collection element, Tuple element at index 1] | test.swift:801:15:801:52 | call to updateValue(_:forKey:) [some:0] | -| test.swift:801:15:801:52 | call to updateValue(_:forKey:) [some:0] | test.swift:801:15:801:53 | ...! | -| test.swift:801:33:801:40 | call to source() | test.swift:801:15:801:15 | [post] dict4 [Collection element, Tuple element at index 1] | -| test.swift:802:15:802:15 | dict4 [Collection element, Tuple element at index 0] | test.swift:802:15:802:35 | call to randomElement() [some:0, Tuple element at index 0] | -| test.swift:802:15:802:35 | call to randomElement() [some:0, Tuple element at index 0] | test.swift:802:15:802:36 | ...! [Tuple element at index 0] | -| test.swift:802:15:802:36 | ...! [Tuple element at index 0] | test.swift:802:15:802:38 | .0 | -| test.swift:803:15:803:15 | dict4 [Collection element, Tuple element at index 1] | test.swift:803:15:803:35 | call to randomElement() [some:0, Tuple element at index 1] | -| test.swift:803:15:803:35 | call to randomElement() [some:0, Tuple element at index 1] | test.swift:803:15:803:36 | ...! [Tuple element at index 1] | -| test.swift:803:15:803:36 | ...! [Tuple element at index 1] | test.swift:803:15:803:38 | .1 | -| test.swift:809:8:809:13 | v | test.swift:810:14:810:14 | v | -| test.swift:810:5:810:5 | [post] self [v] | test.swift:809:3:811:3 | self[return] [v] | -| test.swift:810:14:810:14 | v | test.swift:810:5:810:5 | [post] self [v] | -| test.swift:813:8:813:8 | self [v] | test.swift:813:31:813:31 | self [v] | -| test.swift:813:31:813:31 | self [v] | test.swift:813:31:813:31 | .v | -| test.swift:813:31:813:31 | self [v] | test.swift:815:7:815:7 | self [v] | -| test.swift:815:7:815:7 | self [v] | file://:0:0:0:0 | self [v] | -| test.swift:815:7:815:7 | value | file://:0:0:0:0 | value | -| test.swift:819:14:819:25 | call to S3.init(_:) [v] | test.swift:822:15:822:15 | s1 [v] | -| test.swift:819:14:819:25 | call to S3.init(_:) [v] | test.swift:824:15:824:15 | s1 [v] | -| test.swift:819:17:819:24 | call to source() | test.swift:809:8:809:13 | v | -| test.swift:819:17:819:24 | call to source() | 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] | -| test.swift:822:15:822:15 | s1 [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:824:15:824:15 | s1 [v] | test.swift:824:15:824:23 | call to getv() | -| test.swift:828:5:828:5 | [post] s2 [v] | test.swift:831:15:831:15 | s2 [v] | -| test.swift:828:5:828:5 | [post] s2 [v] | test.swift:833:15:833:15 | s2 [v] | -| test.swift:828:12:828:19 | call to source() | test.swift:815:7:815:7 | value | -| test.swift:828:12:828:19 | call to source() | 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] | -| test.swift:831:15:831:15 | s2 [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:833:15:833:15 | s2 [v] | test.swift:833:15:833:23 | call to getv() | -| test.swift:839:11:839:17 | [post] exit #keyPath(...) | test.swift:839:17:839:17 | [post] KeyPathComponent | -| test.swift:839:15:839:15 | [post] KeyPathComponent [x] | test.swift:839:11:839:17 | [post] enter #keyPath(...) [s, x] | -| test.swift:839:17:839:17 | [post] KeyPathComponent | test.swift:839:15:839:15 | [post] KeyPathComponent [x] | -| test.swift:840:3:840:3 | [post] s2 [s, x] | test.swift:841:13:841:13 | s2 [s, x] | -| test.swift:840:3:840:16 | \\...[...] | test.swift:839:11:839:17 | [post] exit #keyPath(...) | -| test.swift:840:3:840:16 | \\...[...] | test.swift:840:3:840:3 | [post] s2 [s, x] | -| test.swift:840:20:840:27 | call to source() | test.swift:840:3:840:16 | \\...[...] | -| test.swift:841:13:841:13 | s2 [s, x] | test.swift:632:7:632:7 | self [s, x] | -| test.swift:841:13:841:13 | s2 [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] | -| test.swift:841:13:841:16 | .s [x] | test.swift:841:13:841:18 | .x | -| test.swift:844:19:844:28 | args [Collection element] | test.swift:846:15:846:15 | args [Collection element] | -| test.swift:846:15:846:15 | args [Collection element] | test.swift:846:15:846:21 | ...[...] | -| test.swift:849:19:849:24 | v | test.swift:850:15:850:15 | v | -| test.swift:856:29:856:40 | args [Collection element] | test.swift:859:15:859:15 | args [Collection element] | -| test.swift:856:29:856:40 | args [Collection element] | test.swift:860:15:860:15 | args [Collection element] | -| test.swift:856:29:856:40 | args [Collection element] | test.swift:862:16:862:16 | args [Collection element] | -| test.swift:856:29:856:40 | args [Collection element] | test.swift:867:15:867:15 | args [Collection element] | -| test.swift:859:15:859:15 | args [Collection element] | test.swift:859:15:859:21 | ...[...] | -| test.swift:860:15:860:15 | args [Collection element] | test.swift:860:15:860:21 | ...[...] | -| test.swift:862:5:862:5 | $arg$generator [Collection element] | test.swift:862:5:862:5 | call to next() [some:0] | -| test.swift:862:5:862:5 | call to next() [some:0] | test.swift:862:9:862:9 | arg | -| test.swift:862:9:862:9 | arg | test.swift:863:19:863:19 | arg | -| test.swift:862:16:862:16 | args [Collection element] | test.swift:862:16:862:16 | call to makeIterator() [Collection element] | -| test.swift:862:16:862:16 | call to makeIterator() [Collection element] | test.swift:862:5:862:5 | $arg$generator [Collection element] | -| test.swift:866:21:866:29 | enter #keyPath(...) [Collection element] | test.swift:866:27:866:29 | KeyPathComponent | -| test.swift:866:27:866:29 | KeyPathComponent | test.swift:866:21:866:29 | exit #keyPath(...) | -| test.swift:867:15:867:15 | args [Collection element] | test.swift:866:21:866:29 | enter #keyPath(...) [Collection element] | -| test.swift:867:15:867:15 | args [Collection element] | test.swift:867:15:867:38 | \\...[...] | -| test.swift:871:24:871:31 | [...] [Collection element] | test.swift:844:19:844:28 | args [Collection element] | -| test.swift:871:24:871:31 | [...] [Collection element] | test.swift:871:24:871:31 | [...] [Collection element] | -| test.swift:871:24:871:31 | call to source() | test.swift:871:24:871:31 | [...] [Collection element] | -| test.swift:872:18:872:25 | call to source() | test.swift:849:19:849:24 | v | -| test.swift:873:21:873:31 | [...] [Collection element] | test.swift:856:29:856:40 | args [Collection element] | -| test.swift:873:21:873:31 | [...] [Collection element] | test.swift:873:21:873:31 | [...] [Collection element] | -| test.swift:873:24:873:31 | call to source() | test.swift:873:21:873:31 | [...] [Collection element] | -| test.swift:877:16:877:30 | call to Set.init(_:) [Collection element] | test.swift:879:17:879:17 | set1 [Collection element] | -| test.swift:877:16:877:30 | call to Set.init(_:) [Collection element] | test.swift:883:21:883:21 | set1 [Collection element] | -| test.swift:877:20:877:29 | [...] [Collection element] | test.swift:877:16:877:30 | call to Set.init(_:) [Collection element] | -| test.swift:877:21:877:28 | call to source() | test.swift:877:20:877:29 | [...] [Collection element] | -| test.swift:879:5:879:5 | $elem$generator [Collection element] | test.swift:879:5:879:5 | call to next() [some:0] | -| test.swift:879:5:879:5 | call to next() [some:0] | test.swift:879:9:879:9 | elem | -| test.swift:879:9:879:9 | elem | test.swift:880:19:880:19 | elem | -| test.swift:879:17:879:17 | call to makeIterator() [Collection element] | test.swift:879:5:879:5 | $elem$generator [Collection element] | -| test.swift:879:17:879:17 | set1 [Collection element] | test.swift:879:17:879:17 | call to makeIterator() [Collection element] | -| test.swift:883:21:883:21 | set1 [Collection element] | test.swift:883:21:883:39 | call to makeIterator() [Collection element] | -| test.swift:883:21:883:39 | call to makeIterator() [Collection element] | test.swift:884:15:884:15 | generator [Collection element] | -| test.swift:884:15:884:15 | generator [Collection element] | test.swift:884:15:884:30 | call to next() [some:0] | -| test.swift:884:15:884:30 | call to next() [some:0] | test.swift:884:15:884:31 | ...! | -| test.swift:908:19:908:26 | call to source() | test.swift:904:13:904:18 | call to ... | -| test.swift:927:12:927:31 | call to source(_:) | test.swift:927:12:927:31 | OpenExistentialExpr | -| test.swift:929:12:929:57 | call to source(_:) | test.swift:929:12:929:57 | OpenExistentialExpr | -| test.swift:937:22:937:29 | call to source() | file://:0:0:0:0 | .wrappedValue | -| test.swift:938:9:938:9 | newValue | test.swift:938:25:938:25 | newValue | -| test.swift:941:10:941:24 | wrappedValue | test.swift:942:19:942:19 | wrappedValue | -| test.swift:943:29:943:36 | call to source() | test.swift:938:9:938:9 | newValue | -| test.swift:948:33:948:33 | value | file://:0:0:0:0 | value | -| test.swift:948:42:948:49 | call to source() | test.swift:941:10:941:24 | wrappedValue | -| test.swift:950:9:950:16 | call to source() | test.swift:948:33:948:33 | value | -| test.swift:957:9:957:9 | value | file://:0:0:0:0 | value | -| test.swift:958:9:958:9 | self [wrappedValue] | test.swift:959:23:959:23 | self [wrappedValue] | -| test.swift:959:23:959:23 | self [wrappedValue] | test.swift:959:23:959:23 | .wrappedValue | -| test.swift:965:9:965:9 | newValue | test.swift:967:28:967:28 | newValue | -| test.swift:967:28:967:28 | newValue | test.swift:957:9:957:9 | value | -| test.swift:971:10:971:24 | wrappedValue | test.swift:972:19:972:19 | wrappedValue | -| test.swift:978:34:978:34 | value | file://:0:0:0:0 | value | -| test.swift:980:9:980:16 | call to source() | test.swift:978:34:978:34 | value | -| test.swift:983:38:983:45 | call to source() | test.swift:971:10:971:24 | wrappedValue | -| test.swift:988:34:988:34 | value | file://:0:0:0:0 | value | -| test.swift:991:10:991:17 | call to source() | test.swift:988:34:988:34 | value | +| 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 [wrappedValue] | file://:0:0:0:0 | self [wrappedValue] | 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 | | +| file://:0:0:0:0 | self [v2, some:0] | file://:0:0:0:0 | .v2 [some:0] | provenance | | +| file://:0:0:0:0 | self [v2] | file://:0:0:0:0 | .v2 | provenance | | +| file://:0:0:0:0 | self [v3] | file://:0:0:0:0 | .v3 | provenance | | +| file://:0:0:0:0 | self [v] | file://:0:0:0:0 | .v | provenance | | +| file://:0:0:0:0 | self [wrappedValue] | test.swift:958:9:958:9 | self [wrappedValue] | provenance | | +| file://:0:0:0:0 | self [x, some:0] | file://:0:0:0:0 | .x [some:0] | provenance | | +| file://:0:0:0:0 | self [x] | file://:0:0:0:0 | .x | provenance | | +| file://:0:0:0:0 | self [x] | file://:0:0:0:0 | .x | provenance | | +| file://:0:0:0:0 | self [x] | file://:0:0:0:0 | .x | provenance | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | [post] self [v2] | provenance | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | [post] self [v3] | provenance | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | [post] self [v] | provenance | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | [post] self [wrappedValue] | provenance | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | [post] self [x] | provenance | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | [post] self [x] | provenance | | +| file://:0:0:0:0 | value | test.swift:938:9:938:9 | newValue | provenance | | +| file://:0:0:0:0 | value | test.swift:957:9:957:9 | value | provenance | | +| file://:0:0:0:0 | value | test.swift:965:9:965:9 | newValue | provenance | | +| file://:0:0:0:0 | value [some:0] | file://:0:0:0:0 | [post] self [v2, some:0] | provenance | | +| file://:0:0:0:0 | value [some:0] | file://:0:0:0:0 | [post] self [x, some:0] | provenance | | +| test.swift:6:19:6:26 | call to source() | test.swift:7:15:7:15 | t1 | provenance | | +| test.swift:6:19:6:26 | call to source() | test.swift:9:15:9:15 | t1 | provenance | | +| test.swift:6:19:6:26 | call to source() | test.swift:10:15:10:15 | t2 | provenance | | +| test.swift:25:20:25:27 | call to source() | test.swift:29:18:29:21 | x | provenance | | +| test.swift:26:26:26:33 | call to source() | test.swift:29:26:29:29 | y | provenance | | +| test.swift:29:18:29:21 | x | test.swift:30:15:30:15 | x | provenance | | +| test.swift:29:26:29:29 | y | test.swift:31:15:31:15 | y | provenance | | +| test.swift:35:12:35:19 | call to source() | test.swift:39:15:39:29 | call to callee_source() | provenance | | +| test.swift:43:19:43:26 | call to source() | test.swift:50:15:50:15 | t | provenance | | +| test.swift:53:1:56:1 | arg[return] | test.swift:61:23:61:23 | [post] x | provenance | | +| test.swift:54:11:54:18 | call to source() | test.swift:53:1:56:1 | arg[return] | provenance | | +| test.swift:61:23:61:23 | [post] x | test.swift:62:15:62:15 | x | provenance | | +| test.swift:65:16:65:28 | arg1 | test.swift:65:1:70:1 | arg2[return] | provenance | | +| test.swift:73:18:73:25 | call to source() | test.swift:75:22:75:22 | x | provenance | | +| test.swift:73:18:73:25 | call to source() | test.swift:76:15:76:15 | x | provenance | | +| test.swift:75:22:75:22 | x | test.swift:65:16:65:28 | arg1 | provenance | | +| test.swift:75:22:75:22 | x | test.swift:75:32:75:32 | [post] y | provenance | | +| test.swift:75:32:75:32 | [post] y | test.swift:77:15:77:15 | y | provenance | | +| test.swift:80:1:82:1 | arg[return] | test.swift:97:40:97:40 | [post] x | provenance | | +| test.swift:81:11:81:18 | call to source() | test.swift:80:1:82:1 | arg[return] | provenance | | +| test.swift:84:1:91:1 | arg[return] | test.swift:104:41:104:41 | [post] x | provenance | | +| test.swift:86:15:86:22 | call to source() | test.swift:84:1:91:1 | arg[return] | provenance | | +| test.swift:89:15:89:22 | call to source() | test.swift:84:1:91:1 | arg[return] | provenance | | +| test.swift:97:40:97:40 | [post] x | test.swift:98:19:98:19 | x | provenance | | +| test.swift:104:41:104:41 | [post] x | test.swift:105:19:105:19 | x | provenance | | +| test.swift:109:9:109:14 | arg | test.swift:110:12:110:12 | arg | provenance | | +| test.swift:113:14:113:19 | arg | test.swift:114:19:114:19 | arg | provenance | | +| test.swift:113:14:113:19 | arg | test.swift:114:19:114:19 | arg | provenance | | +| test.swift:114:19:114:19 | arg | test.swift:109:9:109:14 | arg | provenance | | +| test.swift:114:19:114:19 | arg | test.swift:114:12:114:22 | call to ... | provenance | | +| test.swift:114:19:114:19 | arg | test.swift:114:12:114:22 | call to ... | provenance | | +| test.swift:114:19:114:19 | arg | test.swift:123:10:123:13 | i | provenance | | +| test.swift:118:18:118:25 | call to source() | test.swift:119:31:119:31 | x | provenance | | +| test.swift:119:18:119:44 | call to forward(arg:lambda:) | test.swift:120:15:120:15 | y | provenance | | +| test.swift:119:31:119:31 | x | test.swift:113:14:113:19 | arg | provenance | | +| test.swift:119:31:119:31 | x | test.swift:119:18:119:44 | call to forward(arg:lambda:) | provenance | | +| test.swift:122:18:125:6 | call to forward(arg:lambda:) | test.swift:126:15:126:15 | z | provenance | | +| test.swift:122:31:122:38 | call to source() | test.swift:113:14:113:19 | arg | provenance | | +| test.swift:122:31:122:38 | call to source() | test.swift:122:18:125:6 | call to forward(arg:lambda:) | provenance | | +| test.swift:123:10:123:13 | i | test.swift:124:16:124:16 | i | provenance | | +| test.swift:142:10:142:13 | i | test.swift:143:16:143:16 | i | provenance | | +| test.swift:145:23:145:30 | call to source() | test.swift:142:10:142:13 | i | provenance | | +| test.swift:145:23:145:30 | call to source() | test.swift:145:15:145:31 | call to ... | provenance | | +| test.swift:149:16:149:23 | call to source() | test.swift:151:15:151:28 | call to ... | provenance | | +| test.swift:149:16:149:23 | call to source() | test.swift:159:16:159:29 | call to ... | provenance | | +| test.swift:154:10:154:13 | i | test.swift:155:19:155:19 | i | provenance | | +| test.swift:157:16:157:23 | call to source() | test.swift:154:10:154:13 | i | provenance | | +| test.swift:159:16:159:29 | call to ... | test.swift:154:10:154:13 | i | provenance | | +| test.swift:163:7:163:7 | self [x] | file://:0:0:0:0 | self [x] | provenance | | +| 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: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 | | +| test.swift:174:12:174:12 | self [x] | test.swift:163:7:163:7 | self [x] | provenance | | +| test.swift:174:12:174:12 | self [x] | test.swift:174:12:174:12 | .x | provenance | | +| test.swift:180:3:180:3 | [post] a [x] | test.swift:181:13:181:13 | a [x] | provenance | | +| test.swift:180:9:180:16 | call to source() | test.swift:163:7:163:7 | value | provenance | | +| test.swift:180:9:180:16 | call to source() | test.swift:180:3:180:3 | [post] a [x] | provenance | | +| test.swift:181:13:181:13 | a [x] | test.swift:163:7:163:7 | self [x] | provenance | | +| 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 | [post] getter for .a [x] | test.swift:194:3:194:3 | [post] b [a, 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 | | +| test.swift:195:13:195:13 | b [a, x] | test.swift:195:13:195:15 | .a [x] | provenance | | +| test.swift:195:13:195:15 | .a [x] | test.swift:163:7:163:7 | self [x] | provenance | | +| test.swift:195:13:195:15 | .a [x] | test.swift:195:13:195:17 | .x | provenance | | +| test.swift:200:3:200:3 | [post] a [x] | test.swift:201:13:201:13 | a [x] | provenance | | +| test.swift:200:9:200:16 | call to source() | test.swift:169:12:169:22 | value | provenance | | +| test.swift:200:9:200:16 | call to source() | test.swift:200:3:200:3 | [post] a [x] | provenance | | +| test.swift:201:13:201:13 | a [x] | test.swift:163:7:163:7 | self [x] | provenance | | +| test.swift:201:13:201:13 | a [x] | test.swift:201:13:201:15 | .x | provenance | | +| test.swift:206:3:206:3 | [post] a [x] | test.swift:207:13:207:13 | a [x] | provenance | | +| test.swift:206:9:206:16 | call to source() | test.swift:163:7:163:7 | value | provenance | | +| test.swift:206:9:206:16 | call to source() | test.swift:206:3:206:3 | [post] a [x] | provenance | | +| test.swift:207:13:207:13 | a [x] | test.swift:173:8:173:8 | self [x] | provenance | | +| test.swift:207:13:207:13 | a [x] | test.swift:207:13:207:19 | call to get() | provenance | | +| test.swift:212:3:212:3 | [post] a [x] | test.swift:213:13:213:13 | a [x] | provenance | | +| test.swift:212:9:212:16 | call to source() | test.swift:169:12:169:22 | value | provenance | | +| test.swift:212:9:212:16 | call to source() | test.swift:212:3:212:3 | [post] a [x] | provenance | | +| 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 | [post] getter for .a [x] | test.swift:218:3:218:3 | [post] b [a, 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 | | +| test.swift:219:13:219:13 | b [a, x] | test.swift:219:13:219:15 | .a [x] | provenance | | +| test.swift:219:13:219:15 | .a [x] | test.swift:163:7:163:7 | self [x] | provenance | | +| test.swift:219:13:219:15 | .a [x] | test.swift:219:13:219:17 | .x | provenance | | +| test.swift:225:14:225:21 | call to source() | test.swift:235:13:235:15 | .source_value | provenance | | +| test.swift:225:14:225:21 | call to source() | test.swift:238:13:238:15 | .source_value | provenance | | +| test.swift:259:12:259:19 | call to source() | test.swift:259:12:259:19 | call to source() [some:0] | provenance | | +| test.swift:259:12:259:19 | call to source() | test.swift:263:13:263:28 | call to optionalSource() | provenance | | +| test.swift:259:12:259:19 | call to source() | test.swift:536:13:536:28 | call to optionalSource() | provenance | | +| test.swift:259:12:259:19 | call to source() | test.swift:563:13:563:28 | call to optionalSource() | provenance | | +| test.swift:259:12:259:19 | call to source() [some:0] | test.swift:263:13:263:28 | call to optionalSource() [some:0] | provenance | | +| test.swift:259:12:259:19 | call to source() [some:0] | test.swift:536:13:536:28 | call to optionalSource() [some:0] | provenance | | +| test.swift:259:12:259:19 | call to source() [some:0] | test.swift:563:13:563:28 | call to optionalSource() [some:0] | provenance | | +| test.swift:263:13:263:28 | call to optionalSource() | test.swift:265:15:265:15 | x | provenance | | +| test.swift:263:13:263:28 | call to optionalSource() | test.swift:267:15:267:16 | ...! | provenance | | +| test.swift:263:13:263:28 | call to optionalSource() | test.swift:271:15:271:16 | ...? | provenance | | +| test.swift:263:13:263:28 | call to optionalSource() | test.swift:274:15:274:20 | ... ??(_:_:) ... | provenance | | +| test.swift:263:13:263:28 | call to optionalSource() | test.swift:275:15:275:27 | ... ??(_:_:) ... | provenance | | +| test.swift:263:13:263:28 | call to optionalSource() | test.swift:279:15:279:31 | ... ? ... : ... | provenance | | +| test.swift:263:13:263:28 | call to optionalSource() | test.swift:280:15:280:38 | ... ? ... : ... | provenance | | +| test.swift:263:13:263:28 | call to optionalSource() | test.swift:285:19:285:19 | z | provenance | | +| test.swift:263:13:263:28 | call to optionalSource() | test.swift:291:16:291:17 | ...? | provenance | | +| test.swift:263:13:263:28 | call to optionalSource() | test.swift:300:15:300:15 | z1 | provenance | | +| test.swift:263:13:263:28 | call to optionalSource() | test.swift:303:15:303:16 | ...! | provenance | | +| test.swift:263:13:263:28 | call to optionalSource() [some:0] | test.swift:267:15:267:15 | x [some:0] | provenance | | +| test.swift:263:13:263:28 | call to optionalSource() [some:0] | test.swift:279:26:279:26 | x [some:0] | provenance | | +| test.swift:263:13:263:28 | call to optionalSource() [some:0] | test.swift:280:26:280:26 | x [some:0] | provenance | | +| test.swift:263:13:263:28 | call to optionalSource() [some:0] | test.swift:284:8:284:12 | let ...? [some:0] | provenance | | +| test.swift:263:13:263:28 | call to optionalSource() [some:0] | test.swift:291:16:291:17 | ...? [some:0] | provenance | | +| test.swift:263:13:263:28 | call to optionalSource() [some:0] | test.swift:298:11:298:15 | let ...? [some:0] | provenance | | +| test.swift:263:13:263:28 | call to optionalSource() [some:0] | test.swift:303:15:303:15 | x [some:0] | provenance | | +| test.swift:263:13:263:28 | call to optionalSource() [some:0] | test.swift:306:13:306:24 | .some(...) [some:0] | provenance | | +| test.swift:263:13:263:28 | call to optionalSource() [some:0] | test.swift:314:10:314:21 | .some(...) [some:0] | provenance | | +| test.swift:267:15:267:15 | x [some:0] | test.swift:267:15:267:16 | ...! | provenance | | +| test.swift:270:15:270:22 | call to source() | test.swift:270:15:270:31 | call to signum() | provenance | | +| test.swift:271:15:271:16 | ...? | test.swift:271:15:271:25 | call to signum() | provenance | | +| test.swift:271:15:271:25 | call to signum() | test.swift:271:15:271:25 | OptionalEvaluationExpr | provenance | | +| test.swift:275:20:275:27 | call to source() | test.swift:275:15:275:27 | ... ??(_:_:) ... | provenance | | +| test.swift:277:20:277:27 | call to source() | test.swift:277:15:277:27 | ... ??(_:_:) ... | provenance | | +| test.swift:279:26:279:26 | x [some:0] | test.swift:279:26:279:27 | ...! | provenance | | +| test.swift:279:26:279:27 | ...! | test.swift:279:15:279:31 | ... ? ... : ... | provenance | | +| test.swift:280:26:280:26 | x [some:0] | test.swift:280:26:280:27 | ...! | provenance | | +| test.swift:280:26:280:27 | ...! | test.swift:280:15:280:38 | ... ? ... : ... | provenance | | +| test.swift:280:31:280:38 | call to source() | test.swift:280:15:280:38 | ... ? ... : ... | provenance | | +| test.swift:282:31:282:38 | call to source() | test.swift:282:15:282:38 | ... ? ... : ... | provenance | | +| test.swift:284:8:284:12 | let ...? [some:0] | test.swift:284:12:284:12 | z | provenance | | +| test.swift:284:12:284:12 | z | test.swift:285:19:285:19 | z | provenance | | +| test.swift:291:8:291:12 | let ...? [some:0] | test.swift:291:12:291:12 | z | provenance | | +| test.swift:291:12:291:12 | z | test.swift:292:19:292:19 | z | provenance | | +| test.swift:291:16:291:17 | ...? | test.swift:291:16:291:26 | call to signum() | provenance | | +| test.swift:291:16:291:17 | ...? [some:0] | test.swift:291:16:291:26 | call to signum() [some:0] | provenance | | +| test.swift:291:16:291:26 | call to signum() | test.swift:291:16:291:26 | call to signum() [some:0] | provenance | | +| test.swift:291:16:291:26 | call to signum() | test.swift:292:19:292:19 | z | provenance | | +| test.swift:291:16:291:26 | call to signum() [some:0] | test.swift:291:8:291:12 | let ...? [some:0] | provenance | | +| test.swift:298:11:298:15 | let ...? [some:0] | test.swift:298:15:298:15 | z1 | provenance | | +| test.swift:298:15:298:15 | z1 | test.swift:300:15:300:15 | z1 | provenance | | +| test.swift:303:15:303:15 | x [some:0] | test.swift:303:15:303:16 | ...! | provenance | | +| test.swift:303:15:303:16 | ...! | test.swift:303:15:303:25 | call to signum() | provenance | | +| test.swift:306:13:306:24 | .some(...) [some:0] | test.swift:306:23:306:23 | z | provenance | | +| test.swift:306:23:306:23 | z | test.swift:307:19:307:19 | z | provenance | | +| test.swift:314:10:314:21 | .some(...) [some:0] | test.swift:314:20:314:20 | z | provenance | | +| test.swift:314:20:314:20 | z | test.swift:315:19:315:19 | z | provenance | | +| test.swift:331:14:331:26 | (...) [Tuple element at index 1] | test.swift:335:15:335:15 | t1 [Tuple element at index 1] | provenance | | +| test.swift:331:18:331:25 | call to source() | test.swift:331:14:331:26 | (...) [Tuple element at index 1] | provenance | | +| test.swift:335:15:335:15 | t1 [Tuple element at index 1] | test.swift:335:15:335:18 | .1 | provenance | | +| test.swift:343:5:343:5 | [post] t1 [Tuple element at index 0] | test.swift:346:15:346:15 | t1 [Tuple element at index 0] | provenance | | +| test.swift:343:12:343:19 | call to source() | test.swift:343:5:343:5 | [post] t1 [Tuple element at index 0] | provenance | | +| test.swift:346:15:346:15 | t1 [Tuple element at index 0] | test.swift:346:15:346:18 | .0 | provenance | | +| test.swift:351:14:351:45 | (...) [Tuple element at index 0] | test.swift:353:9:353:17 | (...) [Tuple element at index 0] | provenance | | +| test.swift:351:14:351:45 | (...) [Tuple element at index 0] | test.swift:356:15:356:15 | t1 [Tuple element at index 0] | provenance | | +| test.swift:351:14:351:45 | (...) [Tuple element at index 0] | test.swift:360:15:360:15 | t2 [Tuple element at index 0] | provenance | | +| test.swift:351:14:351:45 | (...) [Tuple element at index 1] | test.swift:353:9:353:17 | (...) [Tuple element at index 1] | provenance | | +| test.swift:351:14:351:45 | (...) [Tuple element at index 1] | test.swift:357:15:357:15 | t1 [Tuple element at index 1] | provenance | | +| test.swift:351:14:351:45 | (...) [Tuple element at index 1] | test.swift:361:15:361:15 | t2 [Tuple element at index 1] | provenance | | +| test.swift:351:18:351:25 | call to source() | test.swift:351:14:351:45 | (...) [Tuple element at index 0] | provenance | | +| test.swift:351:31:351:38 | call to source() | test.swift:351:14:351:45 | (...) [Tuple element at index 1] | provenance | | +| test.swift:353:9:353:17 | (...) [Tuple element at index 0] | test.swift:353:10:353:10 | a | provenance | | +| test.swift:353:9:353:17 | (...) [Tuple element at index 1] | test.swift:353:13:353:13 | b | provenance | | +| test.swift:353:10:353:10 | a | test.swift:363:15:363:15 | a | provenance | | +| test.swift:353:13:353:13 | b | test.swift:364:15:364:15 | b | provenance | | +| test.swift:356:15:356:15 | t1 [Tuple element at index 0] | test.swift:356:15:356:18 | .0 | provenance | | +| test.swift:357:15:357:15 | t1 [Tuple element at index 1] | test.swift:357:15:357:18 | .1 | provenance | | +| test.swift:360:15:360:15 | t2 [Tuple element at index 0] | test.swift:360:15:360:18 | .0 | provenance | | +| test.swift:361:15:361:15 | t2 [Tuple element at index 1] | test.swift:361:15:361:18 | .1 | provenance | | +| test.swift:368:22:368:36 | t [Tuple element at index 1] | test.swift:369:13:369:13 | t [Tuple element at index 1] | provenance | | +| test.swift:369:13:369:13 | t [Tuple element at index 1] | test.swift:369:13:369:15 | .1 | provenance | | +| test.swift:369:13:369:15 | .1 | test.swift:369:12:369:19 | (...) [Tuple element at index 0] | provenance | | +| test.swift:375:14:375:26 | (...) [Tuple element at index 1] | test.swift:376:30:376:30 | t1 [Tuple element at index 1] | provenance | | +| test.swift:375:14:375:26 | (...) [Tuple element at index 1] | test.swift:377:30:377:30 | t1 [Tuple element at index 1] | provenance | | +| test.swift:375:14:375:26 | (...) [Tuple element at index 1] | test.swift:380:15:380:15 | t1 [Tuple element at index 1] | provenance | | +| test.swift:375:18:375:25 | call to source() | test.swift:375:14:375:26 | (...) [Tuple element at index 1] | provenance | | +| test.swift:376:14:376:32 | call to tupleShiftLeft1(_:) [Tuple element at index 0] | test.swift:381:15:381:15 | t2 [Tuple element at index 0] | provenance | | +| test.swift:376:30:376:30 | t1 [Tuple element at index 1] | test.swift:368:22:368:36 | t [Tuple element at index 1] | provenance | | +| test.swift:376:30:376:30 | t1 [Tuple element at index 1] | test.swift:376:14:376:32 | call to tupleShiftLeft1(_:) [Tuple element at index 0] | provenance | | +| test.swift:377:14:377:32 | call to tupleShiftLeft2(_:) [Tuple element at index 0] | test.swift:383:15:383:15 | t3 [Tuple element at index 0] | provenance | | +| test.swift:377:30:377:30 | t1 [Tuple element at index 1] | test.swift:377:14:377:32 | call to tupleShiftLeft2(_:) [Tuple element at index 0] | provenance | | +| test.swift:380:15:380:15 | t1 [Tuple element at index 1] | test.swift:380:15:380:18 | .1 | provenance | | +| test.swift:381:15:381:15 | t2 [Tuple element at index 0] | test.swift:381:15:381:18 | .0 | provenance | | +| test.swift:383:15:383:15 | t3 [Tuple element at index 0] | test.swift:383:15:383:18 | .0 | provenance | | +| test.swift:394:16:394:21 | v | test.swift:394:61:394:61 | v | provenance | | +| test.swift:394:61:394:61 | v | test.swift:394:45:394:62 | call to ... [mySingle:0] | provenance | | +| test.swift:396:18:396:23 | v | test.swift:396:59:396:59 | v | provenance | | +| test.swift:396:59:396:59 | v | test.swift:396:45:396:60 | call to ... [some:0] | provenance | | +| test.swift:422:9:422:27 | call to ... [mySingle:0] | test.swift:427:10:427:25 | .mySingle(...) [mySingle:0] | provenance | | +| test.swift:422:9:422:27 | call to ... [mySingle:0] | test.swift:436:13:436:28 | .mySingle(...) [mySingle:0] | provenance | | +| test.swift:422:19:422:26 | call to source() | test.swift:422:9:422:27 | call to ... [mySingle:0] | provenance | | +| test.swift:427:10:427:25 | .mySingle(...) [mySingle:0] | test.swift:427:24:427:24 | a | provenance | | +| test.swift:427:24:427:24 | a | test.swift:428:19:428:19 | a | provenance | | +| test.swift:436:13:436:28 | .mySingle(...) [mySingle:0] | test.swift:436:27:436:27 | x | provenance | | +| test.swift:436:27:436:27 | x | test.swift:437:19:437:19 | x | provenance | | +| test.swift:444:9:444:34 | call to ... [myPair:1] | test.swift:451:10:451:30 | .myPair(...) [myPair:1] | provenance | | +| test.swift:444:9:444:34 | call to ... [myPair:1] | test.swift:461:13:461:33 | .myPair(...) [myPair:1] | provenance | | +| test.swift:444:9:444:34 | call to ... [myPair:1] | test.swift:466:33:466:33 | a [myPair:1] | provenance | | +| test.swift:444:9:444:34 | call to ... [myPair:1] | test.swift:495:13:495:13 | a [myPair:1] | provenance | | +| test.swift:444:26:444:33 | call to source() | test.swift:444:9:444:34 | call to ... [myPair:1] | provenance | | +| test.swift:451:10:451:30 | .myPair(...) [myPair:1] | test.swift:451:29:451:29 | b | provenance | | +| test.swift:451:29:451:29 | b | test.swift:453:19:453:19 | b | provenance | | +| test.swift:461:13:461:33 | .myPair(...) [myPair:1] | test.swift:461:32:461:32 | y | provenance | | +| test.swift:461:32:461:32 | y | test.swift:463:19:463:19 | y | provenance | | +| test.swift:466:21:466:34 | call to ... [myCons:1, myPair:1] | test.swift:476:14:476:38 | .myCons(...) [myCons:1, myPair:1] | provenance | | +| test.swift:466:21:466:34 | call to ... [myCons:1, myPair:1] | test.swift:491:17:491:41 | .myCons(...) [myCons:1, myPair:1] | provenance | | +| test.swift:466:21:466:34 | call to ... [myCons:1, myPair:1] | test.swift:495:16:495:16 | b [myCons:1, myPair:1] | provenance | | +| test.swift:466:33:466:33 | a [myPair:1] | test.swift:466:21:466:34 | call to ... [myCons:1, myPair:1] | provenance | | +| test.swift:476:14:476:38 | .myCons(...) [myCons:1, myPair:1] | test.swift:476:25:476:37 | .myPair(...) [myPair:1] | provenance | | +| test.swift:476:25:476:37 | .myPair(...) [myPair:1] | test.swift:476:36:476:36 | c | provenance | | +| test.swift:476:36:476:36 | c | test.swift:479:19:479:19 | c | provenance | | +| test.swift:487:13:487:39 | .myPair(...) [myPair:0] | test.swift:487:31:487:31 | x | provenance | | +| test.swift:487:31:487:31 | x | test.swift:488:19:488:19 | x | provenance | | +| test.swift:487:43:487:62 | call to ... [myPair:0] | test.swift:487:13:487:39 | .myPair(...) [myPair:0] | provenance | | +| test.swift:487:51:487:58 | call to source() | test.swift:487:43:487:62 | call to ... [myPair:0] | provenance | | +| test.swift:491:17:491:41 | .myCons(...) [myCons:1, myPair:1] | test.swift:491:28:491:40 | .myPair(...) [myPair:1] | provenance | | +| test.swift:491:28:491:40 | .myPair(...) [myPair:1] | test.swift:491:39:491:39 | c | provenance | | +| test.swift:491:39:491:39 | c | test.swift:492:19:492:19 | c | provenance | | +| test.swift:495:12:495:17 | (...) [Tuple element at index 0, myPair:1] | test.swift:496:14:496:55 | (...) [Tuple element at index 0, myPair:1] | provenance | | +| test.swift:495:12:495:17 | (...) [Tuple element at index 1, myCons:1, myPair:1] | test.swift:496:14:496:55 | (...) [Tuple element at index 1, myCons:1, myPair:1] | provenance | | +| test.swift:495:13:495:13 | a [myPair:1] | test.swift:495:12:495:17 | (...) [Tuple element at index 0, myPair:1] | provenance | | +| test.swift:495:16:495:16 | b [myCons:1, myPair:1] | test.swift:495:12:495:17 | (...) [Tuple element at index 1, myCons:1, myPair:1] | provenance | | +| test.swift:496:14:496:55 | (...) [Tuple element at index 0, myPair:1] | test.swift:496:15:496:27 | .myPair(...) [myPair:1] | provenance | | +| test.swift:496:14:496:55 | (...) [Tuple element at index 1, myCons:1, myPair:1] | test.swift:496:30:496:54 | .myCons(...) [myCons:1, myPair:1] | provenance | | +| test.swift:496:15:496:27 | .myPair(...) [myPair:1] | test.swift:496:26:496:26 | b | provenance | | +| test.swift:496:26:496:26 | b | test.swift:498:19:498:19 | b | provenance | | +| test.swift:496:30:496:54 | .myCons(...) [myCons:1, myPair:1] | test.swift:496:41:496:53 | .myPair(...) [myPair:1] | provenance | | +| test.swift:496:41:496:53 | .myPair(...) [myPair:1] | test.swift:496:52:496:52 | e | provenance | | +| test.swift:496:52:496:52 | e | test.swift:501:19:501:19 | e | provenance | | +| test.swift:507:14:507:38 | call to ... [mySingle:0] | test.swift:513:13:513:35 | .mySingle(...) [mySingle:0] | provenance | | +| test.swift:507:30:507:37 | call to source() | test.swift:507:14:507:38 | call to ... [mySingle:0] | provenance | | +| test.swift:509:14:509:32 | call to mkMyEnum1(_:) [mySingle:0] | test.swift:515:13:515:35 | .mySingle(...) [mySingle:0] | provenance | | +| test.swift:509:24:509:31 | call to source() | test.swift:394:16:394:21 | v | provenance | | +| test.swift:509:24:509:31 | call to source() | test.swift:509:14:509:32 | call to mkMyEnum1(_:) [mySingle:0] | provenance | | +| test.swift:511:14:511:32 | call to mkMyEnum2(_:) [mySingle:0] | test.swift:517:13:517:35 | .mySingle(...) [mySingle:0] | provenance | | +| test.swift:511:24:511:31 | call to source() | test.swift:511:14:511:32 | call to mkMyEnum2(_:) [mySingle:0] | provenance | | +| test.swift:513:13:513:35 | .mySingle(...) [mySingle:0] | test.swift:513:33:513:33 | d2 | provenance | | +| test.swift:513:33:513:33 | d2 | test.swift:513:54:513:54 | d2 | provenance | | +| test.swift:515:13:515:35 | .mySingle(...) [mySingle:0] | test.swift:515:33:515:33 | d4 | provenance | | +| test.swift:515:33:515:33 | d4 | test.swift:515:54:515:54 | d4 | provenance | | +| test.swift:517:13:517:35 | .mySingle(...) [mySingle:0] | test.swift:517:33:517:33 | d6 | provenance | | +| test.swift:517:33:517:33 | d6 | test.swift:517:54:517:54 | d6 | provenance | | +| test.swift:520:14:520:36 | call to ... [some:0] | test.swift:526:15:526:15 | e2 [some:0] | provenance | | +| test.swift:520:28:520:35 | call to source() | test.swift:520:14:520:36 | call to ... [some:0] | provenance | | +| test.swift:522:14:522:34 | call to mkOptional1(_:) [some:0] | test.swift:528:15:528:15 | e4 [some:0] | provenance | | +| test.swift:522:26:522:33 | call to source() | test.swift:396:18:396:23 | v | provenance | | +| test.swift:522:26:522:33 | call to source() | test.swift:522:14:522:34 | call to mkOptional1(_:) [some:0] | provenance | | +| test.swift:524:14:524:34 | call to mkOptional2(_:) [some:0] | test.swift:530:15:530:15 | e6 [some:0] | provenance | | +| test.swift:524:26:524:33 | call to source() | test.swift:524:14:524:34 | call to mkOptional2(_:) [some:0] | provenance | | +| test.swift:526:15:526:15 | e2 [some:0] | test.swift:526:15:526:17 | ...! | provenance | | +| test.swift:528:15:528:15 | e4 [some:0] | test.swift:528:15:528:17 | ...! | provenance | | +| test.swift:530:15:530:15 | e6 [some:0] | test.swift:530:15:530:17 | ...! | provenance | | +| test.swift:536:13:536:28 | call to optionalSource() | test.swift:539:19:539:19 | a | provenance | | +| test.swift:536:13:536:28 | call to optionalSource() [some:0] | test.swift:538:8:538:12 | let ...? [some:0] | provenance | | +| test.swift:536:13:536:28 | call to optionalSource() [some:0] | test.swift:543:19:543:19 | x [some:0] | provenance | | +| test.swift:538:8:538:12 | let ...? [some:0] | test.swift:538:12:538:12 | a | provenance | | +| test.swift:538:12:538:12 | a | test.swift:539:19:539:19 | a | provenance | | +| test.swift:543:18:543:23 | (...) [Tuple element at index 0, some:0] | test.swift:545:10:545:37 | (...) [Tuple element at index 0, some:0] | provenance | | +| test.swift:543:19:543:19 | x [some:0] | test.swift:543:18:543:23 | (...) [Tuple element at index 0, some:0] | provenance | | +| test.swift:545:10:545:37 | (...) [Tuple element at index 0, some:0] | test.swift:545:11:545:22 | .some(...) [some:0] | provenance | | +| test.swift:545:11:545:22 | .some(...) [some:0] | test.swift:545:21:545:21 | a | provenance | | +| test.swift:545:21:545:21 | a | test.swift:546:19:546:19 | a | provenance | | +| test.swift:559:9:559:9 | self [x, some:0] | file://:0:0:0:0 | self [x, some:0] | provenance | | +| test.swift:559:9:559:9 | self [x] | file://:0:0:0:0 | self [x] | provenance | | +| test.swift:559:9:559:9 | value | file://:0:0:0:0 | value | provenance | | +| test.swift:559:9:559:9 | value [some:0] | file://:0:0:0:0 | value [some:0] | provenance | | +| test.swift:563:13:563:28 | call to optionalSource() | test.swift:565:12:565:12 | x | provenance | | +| test.swift:563:13:563:28 | call to optionalSource() [some:0] | test.swift:565:12:565:12 | x [some:0] | provenance | | +| test.swift:565:5:565:5 | [post] cx [x, some:0] | test.swift:569:20:569:20 | cx [x, some:0] | provenance | | +| test.swift:565:5:565:5 | [post] cx [x] | test.swift:569:20:569:20 | cx [x] | provenance | | +| test.swift:565:12:565:12 | x | test.swift:559:9:559:9 | value | provenance | | +| test.swift:565:12:565:12 | x | test.swift:565:5:565:5 | [post] cx [x] | provenance | | +| test.swift:565:12:565:12 | x [some:0] | test.swift:559:9:559:9 | value [some:0] | provenance | | +| test.swift:565:12:565:12 | x [some:0] | test.swift:565:5:565:5 | [post] cx [x, some:0] | provenance | | +| test.swift:569:11:569:15 | let ...? [some:0] | test.swift:569:15:569:15 | z1 | provenance | | +| test.swift:569:15:569:15 | z1 | test.swift:570:15:570:15 | z1 | provenance | | +| test.swift:569:20:569:20 | cx [x, some:0] | test.swift:559:9:559:9 | self [x, some:0] | provenance | | +| test.swift:569:20:569:20 | cx [x, some:0] | test.swift:569:20:569:23 | .x [some:0] | provenance | | +| test.swift:569:20:569:20 | cx [x] | test.swift:559:9:559:9 | self [x] | provenance | | +| test.swift:569:20:569:20 | cx [x] | test.swift:569:20:569:23 | .x | provenance | | +| test.swift:569:20:569:23 | .x | test.swift:570:15:570:15 | z1 | provenance | | +| test.swift:569:20:569:23 | .x [some:0] | test.swift:569:11:569:15 | let ...? [some:0] | provenance | | +| 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: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 | | +| test.swift:593:7:593:7 | [post] self [str] | test.swift:592:17:595:5 | self[return] [str] | provenance | | +| test.swift:593:7:593:7 | [post] self [str] | test.swift:594:17:594:17 | self [str] | provenance | | +| test.swift:593:20:593:28 | call to source3() | test.swift:586:10:586:13 | s | provenance | | +| test.swift:593:20:593:28 | call to source3() | test.swift:593:7:593:7 | [post] self [str] | provenance | | +| test.swift:594:17:594:17 | self [str] | test.swift:594:17:594:17 | .str | provenance | | +| test.swift:599:13:599:33 | call to MyClass.init(s:) [str] | test.swift:585:9:585:9 | self [str] | provenance | | +| test.swift:599:13:599:33 | call to MyClass.init(s:) [str] | test.swift:599:13:599:35 | .str | provenance | | +| test.swift:599:24:599:32 | call to source3() | test.swift:586:10:586:13 | s | provenance | | +| test.swift:599:24:599:32 | call to source3() | test.swift:599:13:599:33 | call to MyClass.init(s:) [str] | provenance | | +| test.swift:600:13:600:41 | call to MyClass.init(contentsOfFile:) [str] | test.swift:585:9:585:9 | self [str] | provenance | | +| test.swift:600:13:600:41 | call to MyClass.init(contentsOfFile:) [str] | test.swift:600:13:600:43 | .str | provenance | | +| test.swift:615:7:615:7 | self [x] | file://:0:0:0:0 | self [x] | provenance | | +| test.swift:617:8:617:11 | x | test.swift:618:14:618:14 | x | provenance | | +| test.swift:618:5:618:5 | [post] self [x] | test.swift:617:3:619:3 | self[return] [x] | provenance | | +| test.swift:618:14:618:14 | x | test.swift:618:5:618:5 | [post] self [x] | provenance | | +| test.swift:623:11:623:24 | call to S.init(x:) [x] | test.swift:625:13:625:13 | s [x] | provenance | | +| test.swift:623:11:623:24 | call to S.init(x:) [x] | test.swift:628:13:628:13 | s [x] | provenance | | +| test.swift:623:16:623:23 | call to source() | test.swift:617:8:617:11 | x | provenance | | +| test.swift:623:16:623:23 | call to source() | test.swift:623:11:623:24 | call to S.init(x:) [x] | provenance | | +| test.swift:624:11:624:14 | enter #keyPath(...) [x] | test.swift:624:14:624:14 | KeyPathComponent | provenance | | +| test.swift:624:14:624:14 | KeyPathComponent | test.swift:624:11:624:14 | exit #keyPath(...) | provenance | | +| test.swift:625:13:625:13 | s [x] | test.swift:624:11:624:14 | enter #keyPath(...) [x] | provenance | | +| test.swift:625:13:625:13 | s [x] | test.swift:625:13:625:25 | \\...[...] | provenance | | +| test.swift:627:36:627:38 | enter #keyPath(...) [x] | test.swift:627:38:627:38 | KeyPathComponent | provenance | | +| test.swift:627:38:627:38 | KeyPathComponent | test.swift:627:36:627:38 | exit #keyPath(...) | provenance | | +| test.swift:628:13:628:13 | s [x] | test.swift:627:36:627:38 | enter #keyPath(...) [x] | provenance | | +| test.swift:628:13:628:13 | s [x] | test.swift:628:13:628:32 | \\...[...] | provenance | | +| test.swift:632:7:632:7 | self [s, x] | file://:0:0:0:0 | self [s, x] | provenance | | +| test.swift:634:8:634:11 | s [x] | test.swift:635:14:635:14 | s [x] | provenance | | +| test.swift:635:5:635:5 | [post] self [s, x] | test.swift:634:3:636:3 | self[return] [s, x] | provenance | | +| test.swift:635:14:635:14 | s [x] | test.swift:635:5:635:5 | [post] self [s, x] | provenance | | +| test.swift:640:11:640:24 | call to S.init(x:) [x] | test.swift:641:18:641:18 | s [x] | provenance | | +| test.swift:640:16:640:23 | call to source() | test.swift:617:8:617:11 | x | provenance | | +| test.swift:640:16:640:23 | call to source() | test.swift:640:11:640:24 | call to S.init(x:) [x] | provenance | | +| test.swift:641:12:641:19 | call to S2.init(s:) [s, x] | test.swift:643:13:643:13 | s2 [s, x] | provenance | | +| test.swift:641:18:641:18 | s [x] | test.swift:634:8:634:11 | s [x] | provenance | | +| test.swift:641:18:641:18 | s [x] | test.swift:641:12:641:19 | call to S2.init(s:) [s, x] | provenance | | +| test.swift:642:11:642:17 | enter #keyPath(...) [s, x] | test.swift:642:15:642:15 | KeyPathComponent [x] | provenance | | +| test.swift:642:15:642:15 | KeyPathComponent [x] | test.swift:642:17:642:17 | KeyPathComponent | provenance | | +| test.swift:642:17:642:17 | KeyPathComponent | test.swift:642:11:642:17 | exit #keyPath(...) | provenance | | +| test.swift:643:13:643:13 | s2 [s, x] | test.swift:642:11:642:17 | enter #keyPath(...) [s, x] | provenance | | +| test.swift:643:13:643:13 | s2 [s, x] | test.swift:643:13:643:26 | \\...[...] | provenance | | +| test.swift:647:17:647:26 | [...] [Collection element] | test.swift:649:15:649:15 | array [Collection element] | provenance | | +| test.swift:647:18:647:25 | call to source() | test.swift:647:17:647:26 | [...] [Collection element] | provenance | | +| test.swift:648:13:648:22 | enter #keyPath(...) [Collection element] | test.swift:648:20:648:22 | KeyPathComponent | provenance | | +| test.swift:648:20:648:22 | KeyPathComponent | test.swift:648:13:648:22 | exit #keyPath(...) | provenance | | +| test.swift:649:15:649:15 | array [Collection element] | test.swift:648:13:648:22 | enter #keyPath(...) [Collection element] | provenance | | +| test.swift:649:15:649:15 | array [Collection element] | test.swift:649:15:649:31 | \\...[...] | provenance | | +| test.swift:655:8:655:12 | s [some:0, x] | test.swift:656:14:656:14 | s [some:0, x] | provenance | | +| test.swift:656:5:656:5 | [post] self [s, some:0, x] | test.swift:655:3:657:3 | self[return] [s, some:0, x] | provenance | | +| test.swift:656:14:656:14 | s [some:0, x] | test.swift:656:5:656:5 | [post] self [s, some:0, x] | provenance | | +| test.swift:661:13:661:26 | call to S.init(x:) [x] | test.swift:662:29:662:29 | s [x] | provenance | | +| test.swift:661:18:661:25 | call to source() | test.swift:617:8:617:11 | x | provenance | | +| test.swift:661:18:661:25 | call to source() | test.swift:661:13:661:26 | call to S.init(x:) [x] | provenance | | +| 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] | provenance | | +| test.swift:662:29:662:29 | s [some:0, x] | test.swift:655:8:655:12 | s [some:0, x] | provenance | | +| test.swift:662:29:662:29 | s [some:0, x] | test.swift:662:14:662:30 | call to S2_Optional.init(s:) [s, some:0, x] | provenance | | +| test.swift:662:29:662:29 | s [x] | test.swift:662:29:662:29 | s [some:0, x] | provenance | | +| test.swift:663:13:663:29 | enter #keyPath(...) [s, some:0, x] | test.swift:663:26:663:26 | KeyPathComponent [some:0, x] | provenance | | +| test.swift:663:26:663:26 | KeyPathComponent [some:0, x] | test.swift:663:27:663:27 | KeyPathComponent [x] | provenance | | +| test.swift:663:27:663:27 | KeyPathComponent [x] | test.swift:663:29:663:29 | KeyPathComponent | provenance | | +| test.swift:663:29:663:29 | KeyPathComponent | file://:0:0:0:0 | KeyPathComponent [some:0] | provenance | | +| test.swift:664:15:664:15 | s2 [s, some:0, x] | test.swift:663:13:663:29 | enter #keyPath(...) [s, some:0, x] | provenance | | +| test.swift:664:15:664:15 | s2 [s, some:0, x] | test.swift:664:15:664:28 | \\...[...] [some:0] | provenance | | +| test.swift:664:15:664:28 | \\...[...] [some:0] | test.swift:664:15:664:29 | ...! | provenance | | +| test.swift:668:13:668:20 | call to source() | test.swift:676:15:676:15 | y | provenance | | +| test.swift:678:9:678:16 | call to source() | test.swift:680:11:680:11 | x | provenance | | +| test.swift:678:9:678:16 | call to source() | test.swift:681:15:681:15 | x | provenance | | +| test.swift:680:11:680:11 | x | test.swift:680:15:680:15 | [post] y | provenance | | +| test.swift:680:15:680:15 | [post] y | test.swift:682:15:682:15 | y | provenance | | +| test.swift:688:5:688:5 | [post] arr1 [Collection element] | test.swift:689:15:689:15 | arr1 [Collection element] | provenance | | +| test.swift:688:15:688:22 | call to source() | test.swift:688:5:688:5 | [post] arr1 [Collection element] | provenance | | +| test.swift:689:15:689:15 | arr1 [Collection element] | test.swift:689:15:689:21 | ...[...] | provenance | | +| test.swift:692:16:692:25 | [...] [Collection element] | test.swift:693:15:693:15 | arr2 [Collection element] | provenance | | +| test.swift:692:17:692:24 | call to source() | test.swift:692:16:692:25 | [...] [Collection element] | provenance | | +| test.swift:693:15:693:15 | arr2 [Collection element] | test.swift:693:15:693:21 | ...[...] | provenance | | +| test.swift:695:18:695:29 | [...] [Collection element, Collection element] | test.swift:697:15:697:15 | matrix [Collection element, Collection element] | provenance | | +| test.swift:695:19:695:28 | [...] [Collection element] | test.swift:695:18:695:29 | [...] [Collection element, Collection element] | provenance | | +| test.swift:695:20:695:27 | call to source() | test.swift:695:19:695:28 | [...] [Collection element] | provenance | | +| test.swift:697:15:697:15 | matrix [Collection element, Collection element] | test.swift:697:15:697:23 | ...[...] [Collection element] | provenance | | +| test.swift:697:15:697:23 | ...[...] [Collection element] | test.swift:697:15:697:26 | ...[...] | provenance | | +| test.swift:700:5:700:5 | [post] matrix2 [Collection element, Collection element] | test.swift:701:15:701:15 | matrix2 [Collection element, Collection element] | provenance | | +| test.swift:700:5:700:14 | [post] getter for ...[...] [Collection element] | test.swift:700:5:700:5 | [post] matrix2 [Collection element, Collection element] | provenance | | +| test.swift:700:21:700:28 | call to source() | test.swift:700:5:700:14 | [post] getter for ...[...] [Collection element] | provenance | | +| test.swift:701:15:701:15 | matrix2 [Collection element, Collection element] | test.swift:701:15:701:24 | ...[...] [Collection element] | provenance | | +| test.swift:701:15:701:24 | ...[...] [Collection element] | test.swift:701:15:701:27 | ...[...] | provenance | | +| test.swift:708:16:708:51 | call to Array.init(repeating:count:) [Collection element] | test.swift:709:15:709:15 | arr5 [Collection element] | provenance | | +| test.swift:708:33:708:40 | call to source() | test.swift:708:16:708:51 | call to Array.init(repeating:count:) [Collection element] | provenance | | +| test.swift:709:15:709:15 | arr5 [Collection element] | test.swift:709:15:709:21 | ...[...] | provenance | | +| test.swift:712:5:712:5 | [post] arr6 [Collection element] | test.swift:713:15:713:15 | arr6 [Collection element] | provenance | | +| test.swift:712:17:712:24 | call to source() | test.swift:712:5:712:5 | [post] arr6 [Collection element] | provenance | | +| test.swift:713:15:713:15 | arr6 [Collection element] | test.swift:713:15:713:21 | ...[...] | provenance | | +| test.swift:715:16:715:25 | [...] [Collection element] | test.swift:716:15:716:15 | arr7 [Collection element] | provenance | | +| test.swift:715:17:715:24 | call to source() | test.swift:715:16:715:25 | [...] [Collection element] | provenance | | +| test.swift:716:15:716:15 | arr7 [Collection element] | test.swift:716:15:716:34 | call to randomElement() [some:0] | provenance | | +| test.swift:716:15:716:34 | call to randomElement() [some:0] | test.swift:716:15:716:35 | ...! | provenance | | +| test.swift:722:5:722:5 | [post] set1 [Collection element] | test.swift:723:15:723:15 | set1 [Collection element] | provenance | | +| test.swift:722:17:722:24 | call to source() | test.swift:722:5:722:5 | [post] set1 [Collection element] | provenance | | +| test.swift:723:15:723:15 | set1 [Collection element] | test.swift:723:15:723:34 | call to randomElement() [some:0] | provenance | | +| test.swift:723:15:723:34 | call to randomElement() [some:0] | test.swift:723:15:723:35 | ...! | provenance | | +| test.swift:725:16:725:30 | call to Set.init(_:) [Collection element] | test.swift:726:15:726:15 | set2 [Collection element] | provenance | | +| test.swift:725:20:725:29 | [...] [Collection element] | test.swift:725:16:725:30 | call to Set.init(_:) [Collection element] | provenance | | +| test.swift:725:21:725:28 | call to source() | test.swift:725:20:725:29 | [...] [Collection element] | provenance | | +| test.swift:726:15:726:15 | set2 [Collection element] | test.swift:726:15:726:34 | call to randomElement() [some:0] | provenance | | +| test.swift:726:15:726:34 | call to randomElement() [some:0] | test.swift:726:15:726:35 | ...! | provenance | | +| test.swift:731:9:731:9 | self [v2, some:0] | file://:0:0:0:0 | self [v2, some:0] | provenance | | +| test.swift:731:9:731:9 | self [v2] | file://:0:0:0:0 | self [v2] | provenance | | +| test.swift:731:9:731:9 | value | file://:0:0:0:0 | value | provenance | | +| test.swift:731:9:731:9 | value [some:0] | file://:0:0:0:0 | value [some:0] | provenance | | +| test.swift:732:9:732:9 | self [v3] | file://:0:0:0:0 | self [v3] | provenance | | +| test.swift:732:9:732:9 | value | file://:0:0:0:0 | value | provenance | | +| test.swift:742:5:742:5 | v1 [some:0] | test.swift:752:15:752:15 | v1 [some:0] | provenance | | +| test.swift:742:11:742:18 | call to source() | test.swift:742:5:742:5 | v1 [some:0] | provenance | | +| test.swift:743:10:743:17 | call to source() | test.swift:743:10:743:17 | call to source() [some:0] | provenance | | +| test.swift:743:10:743:17 | call to source() | test.swift:753:15:753:17 | ...! | provenance | | +| test.swift:743:10:743:17 | call to source() [some:0] | test.swift:753:15:753:15 | v2 [some:0] | provenance | | +| test.swift:744:10:744:17 | call to source() | test.swift:754:15:754:15 | v3 | provenance | | +| test.swift:746:5:746:5 | [post] mo1 [v2, some:0] | test.swift:747:5:747:5 | mo1 [v2, some:0] | provenance | | +| test.swift:746:5:746:5 | [post] mo1 [v2] | test.swift:747:5:747:5 | mo1 [v2] | provenance | | +| test.swift:746:14:746:21 | call to source() | test.swift:731:9:731:9 | value | provenance | | +| test.swift:746:14:746:21 | call to source() | test.swift:746:5:746:5 | [post] mo1 [v2] | provenance | | +| test.swift:746:14:746:21 | call to source() | test.swift:746:14:746:21 | call to source() [some:0] | provenance | | +| test.swift:746:14:746:21 | call to source() [some:0] | test.swift:731:9:731:9 | value [some:0] | provenance | | +| test.swift:746:14:746:21 | call to source() [some:0] | test.swift:746:5:746:5 | [post] mo1 [v2, some:0] | provenance | | +| test.swift:747:5:747:5 | [post] mo1 [v3] | test.swift:757:15:757:15 | mo1 [v3] | provenance | | +| test.swift:747:5:747:5 | mo1 [v2, some:0] | test.swift:756:15:756:15 | mo1 [v2, some:0] | provenance | | +| test.swift:747:5:747:5 | mo1 [v2] | test.swift:756:15:756:15 | mo1 [v2] | provenance | | +| test.swift:747:14:747:21 | call to source() | test.swift:732:9:732:9 | value | provenance | | +| test.swift:747:14:747:21 | call to source() | test.swift:747:5:747:5 | [post] mo1 [v3] | provenance | | +| test.swift:752:15:752:15 | v1 [some:0] | test.swift:752:15:752:17 | ...! | provenance | | +| test.swift:753:15:753:15 | v2 [some:0] | test.swift:753:15:753:17 | ...! | provenance | | +| test.swift:756:15:756:15 | mo1 [v2, some:0] | test.swift:731:9:731:9 | self [v2, some:0] | provenance | | +| test.swift:756:15:756:15 | mo1 [v2, some:0] | test.swift:756:15:756:19 | .v2 [some:0] | provenance | | +| test.swift:756:15:756:15 | mo1 [v2] | test.swift:731:9:731:9 | self [v2] | provenance | | +| test.swift:756:15:756:15 | mo1 [v2] | test.swift:756:15:756:19 | .v2 | provenance | | +| test.swift:756:15:756:19 | .v2 | test.swift:756:15:756:21 | ...! | provenance | | +| test.swift:756:15:756:19 | .v2 [some:0] | test.swift:756:15:756:21 | ...! | provenance | | +| test.swift:757:15:757:15 | mo1 [v3] | test.swift:732:9:732:9 | self [v3] | provenance | | +| test.swift:757:15:757:15 | mo1 [v3] | test.swift:757:15:757:19 | .v3 | provenance | | +| test.swift:764:13:764:26 | call to S.init(x:) [x] | test.swift:765:29:765:29 | s [x] | provenance | | +| test.swift:764:18:764:25 | call to source() | test.swift:617:8:617:11 | x | provenance | | +| test.swift:764:18:764:25 | call to source() | test.swift:764:13:764:26 | call to S.init(x:) [x] | provenance | | +| test.swift:765:14:765:30 | call to S2_Optional.init(s:) [s, some:0, x] | test.swift:767:15:767:15 | s2 [s, some:0, x] | provenance | | +| test.swift:765:29:765:29 | s [some:0, x] | test.swift:655:8:655:12 | s [some:0, x] | provenance | | +| test.swift:765:29:765:29 | s [some:0, x] | test.swift:765:14:765:30 | call to S2_Optional.init(s:) [s, some:0, x] | provenance | | +| test.swift:765:29:765:29 | s [x] | test.swift:765:29:765:29 | s [some:0, x] | provenance | | +| test.swift:766:13:766:29 | enter #keyPath(...) [s, some:0, x] | test.swift:766:26:766:26 | KeyPathComponent [some:0, x] | provenance | | +| test.swift:766:26:766:26 | KeyPathComponent [some:0, x] | test.swift:766:26:766:26 | KeyPathComponent [x] | provenance | | +| test.swift:766:26:766:26 | KeyPathComponent [x] | test.swift:766:29:766:29 | KeyPathComponent | provenance | | +| test.swift:766:29:766:29 | KeyPathComponent | test.swift:766:13:766:29 | exit #keyPath(...) | provenance | | +| test.swift:767:15:767:15 | s2 [s, some:0, x] | test.swift:766:13:766:29 | enter #keyPath(...) [s, some:0, x] | provenance | | +| test.swift:767:15:767:15 | s2 [s, some:0, x] | test.swift:767:15:767:28 | \\...[...] | provenance | | +| test.swift:774:5:774:5 | [post] dict1 [Collection element, Tuple element at index 1] | test.swift:776:15:776:15 | dict1 [Collection element, Tuple element at index 1] | provenance | | +| test.swift:774:5:774:12 | DictionarySubscriptNode [Tuple element at index 1] | test.swift:774:5:774:5 | [post] dict1 [Collection element, Tuple element at index 1] | provenance | | +| test.swift:774:16:774:23 | call to source() | test.swift:774:5:774:12 | DictionarySubscriptNode [Tuple element at index 1] | provenance | | +| test.swift:776:15:776:15 | dict1 [Collection element, Tuple element at index 1] | test.swift:776:15:776:22 | DictionarySubscriptNode [Tuple element at index 1] | provenance | | +| test.swift:776:15:776:22 | DictionarySubscriptNode [Tuple element at index 1] | test.swift:776:15:776:22 | ...[...] | provenance | | +| test.swift:778:17:778:29 | [...] [Collection element, Tuple element at index 0] | test.swift:781:25:781:25 | dict2 [Collection element, Tuple element at index 0] | provenance | | +| test.swift:778:18:778:25 | call to source() | test.swift:778:18:778:28 | (...) [Tuple element at index 0] | provenance | | +| test.swift:778:18:778:28 | (...) [Tuple element at index 0] | test.swift:778:17:778:29 | [...] [Collection element, Tuple element at index 0] | provenance | | +| test.swift:781:5:781:5 | $generator [Collection element, Tuple element at index 0] | test.swift:781:5:781:5 | call to next() [some:0, Tuple element at index 0] | provenance | | +| test.swift:781:5:781:5 | call to next() [some:0, Tuple element at index 0] | test.swift:781:9:781:20 | (...) [Tuple element at index 0] | provenance | | +| test.swift:781:9:781:20 | (...) [Tuple element at index 0] | test.swift:781:10:781:10 | key | provenance | | +| test.swift:781:10:781:10 | key | test.swift:782:19:782:19 | key | provenance | | +| test.swift:781:25:781:25 | call to makeIterator() [Collection element, Tuple element at index 0] | test.swift:781:5:781:5 | $generator [Collection element, Tuple element at index 0] | provenance | | +| test.swift:781:25:781:25 | dict2 [Collection element, Tuple element at index 0] | test.swift:781:25:781:25 | call to makeIterator() [Collection element, Tuple element at index 0] | provenance | | +| test.swift:786:17:786:29 | [...] [Collection element, Tuple element at index 1] | test.swift:787:15:787:15 | dict3 [Collection element, Tuple element at index 1] | provenance | | +| test.swift:786:17:786:29 | [...] [Collection element, Tuple element at index 1] | test.swift:789:5:789:5 | dict3 [Collection element, Tuple element at index 1] | provenance | | +| test.swift:786:17:786:29 | [...] [Collection element, Tuple element at index 1] | test.swift:792:15:792:15 | dict3 [Collection element, Tuple element at index 1] | provenance | | +| test.swift:786:17:786:29 | [...] [Collection element, Tuple element at index 1] | test.swift:794:25:794:25 | dict3 [Collection element, Tuple element at index 1] | provenance | | +| test.swift:786:18:786:28 | (...) [Tuple element at index 1] | test.swift:786:17:786:29 | [...] [Collection element, Tuple element at index 1] | provenance | | +| test.swift:786:21:786:28 | call to source() | test.swift:786:18:786:28 | (...) [Tuple element at index 1] | provenance | | +| test.swift:787:15:787:15 | dict3 [Collection element, Tuple element at index 1] | test.swift:787:15:787:22 | DictionarySubscriptNode [Tuple element at index 1] | provenance | | +| test.swift:787:15:787:22 | DictionarySubscriptNode [Tuple element at index 1] | test.swift:787:15:787:22 | ...[...] | provenance | | +| test.swift:789:5:789:5 | [post] dict3 [Collection element, Tuple element at index 0] | test.swift:791:15:791:15 | dict3 [Collection element, Tuple element at index 0] | provenance | | +| test.swift:789:5:789:5 | [post] dict3 [Collection element, Tuple element at index 0] | test.swift:794:25:794:25 | dict3 [Collection element, Tuple element at index 0] | provenance | | +| test.swift:789:5:789:5 | [post] dict3 [Collection element, Tuple element at index 1] | test.swift:792:15:792:15 | dict3 [Collection element, Tuple element at index 1] | provenance | | +| test.swift:789:5:789:5 | [post] dict3 [Collection element, Tuple element at index 1] | test.swift:794:25:794:25 | dict3 [Collection element, Tuple element at index 1] | provenance | | +| test.swift:789:5:789:5 | dict3 [Collection element, Tuple element at index 1] | test.swift:789:5:789:19 | DictionarySubscriptNode [Tuple element at index 1] | provenance | | +| test.swift:789:5:789:19 | DictionarySubscriptNode [Tuple element at index 0] | test.swift:789:5:789:5 | [post] dict3 [Collection element, Tuple element at index 0] | provenance | | +| test.swift:789:5:789:19 | DictionarySubscriptNode [Tuple element at index 1] | test.swift:789:5:789:5 | [post] dict3 [Collection element, Tuple element at index 1] | provenance | | +| test.swift:789:11:789:18 | call to source() | test.swift:789:5:789:19 | DictionarySubscriptNode [Tuple element at index 0] | provenance | | +| test.swift:791:15:791:15 | dict3 [Collection element, Tuple element at index 0] | test.swift:791:15:791:35 | call to randomElement() [some:0, Tuple element at index 0] | provenance | | +| test.swift:791:15:791:35 | call to randomElement() [some:0, Tuple element at index 0] | test.swift:791:15:791:36 | ...! [Tuple element at index 0] | provenance | | +| test.swift:791:15:791:36 | ...! [Tuple element at index 0] | test.swift:791:15:791:38 | .0 | provenance | | +| test.swift:792:15:792:15 | dict3 [Collection element, Tuple element at index 1] | test.swift:792:15:792:35 | call to randomElement() [some:0, Tuple element at index 1] | provenance | | +| test.swift:792:15:792:35 | call to randomElement() [some:0, Tuple element at index 1] | test.swift:792:15:792:36 | ...! [Tuple element at index 1] | provenance | | +| test.swift:792:15:792:36 | ...! [Tuple element at index 1] | test.swift:792:15:792:38 | .1 | provenance | | +| test.swift:794:5:794:5 | $generator [Collection element, Tuple element at index 0] | test.swift:794:5:794:5 | call to next() [some:0, Tuple element at index 0] | provenance | | +| test.swift:794:5:794:5 | $generator [Collection element, Tuple element at index 1] | test.swift:794:5:794:5 | call to next() [some:0, Tuple element at index 1] | provenance | | +| test.swift:794:5:794:5 | call to next() [some:0, Tuple element at index 0] | test.swift:794:9:794:20 | (...) [Tuple element at index 0] | provenance | | +| test.swift:794:5:794:5 | call to next() [some:0, Tuple element at index 1] | test.swift:794:9:794:20 | (...) [Tuple element at index 1] | provenance | | +| test.swift:794:9:794:20 | (...) [Tuple element at index 0] | test.swift:794:10:794:10 | key | provenance | | +| test.swift:794:9:794:20 | (...) [Tuple element at index 1] | test.swift:794:15:794:15 | value | provenance | | +| test.swift:794:10:794:10 | key | test.swift:795:19:795:19 | key | provenance | | +| test.swift:794:15:794:15 | value | test.swift:796:19:796:19 | value | provenance | | +| test.swift:794:25:794:25 | call to makeIterator() [Collection element, Tuple element at index 0] | test.swift:794:5:794:5 | $generator [Collection element, Tuple element at index 0] | provenance | | +| test.swift:794:25:794:25 | call to makeIterator() [Collection element, Tuple element at index 1] | test.swift:794:5:794:5 | $generator [Collection element, Tuple element at index 1] | provenance | | +| test.swift:794:25:794:25 | dict3 [Collection element, Tuple element at index 0] | test.swift:794:25:794:25 | call to makeIterator() [Collection element, Tuple element at index 0] | provenance | | +| test.swift:794:25:794:25 | dict3 [Collection element, Tuple element at index 1] | test.swift:794:25:794:25 | call to makeIterator() [Collection element, Tuple element at index 1] | provenance | | +| test.swift:799:17:799:28 | [...] [Collection element, Tuple element at index 1] | test.swift:800:15:800:15 | dict4 [Collection element, Tuple element at index 1] | provenance | | +| test.swift:799:17:799:28 | [...] [Collection element, Tuple element at index 1] | test.swift:801:15:801:15 | dict4 [Collection element, Tuple element at index 1] | provenance | | +| test.swift:799:17:799:28 | [...] [Collection element, Tuple element at index 1] | test.swift:803:15:803:15 | dict4 [Collection element, Tuple element at index 1] | provenance | | +| test.swift:799:18:799:27 | (...) [Tuple element at index 1] | test.swift:799:17:799:28 | [...] [Collection element, Tuple element at index 1] | provenance | | +| test.swift:799:20:799:27 | call to source() | test.swift:799:18:799:27 | (...) [Tuple element at index 1] | provenance | | +| test.swift:800:15:800:15 | [post] dict4 [Collection element, Tuple element at index 0] | test.swift:802:15:802:15 | dict4 [Collection element, Tuple element at index 0] | provenance | | +| test.swift:800:15:800:15 | dict4 [Collection element, Tuple element at index 1] | test.swift:800:15:800:52 | call to updateValue(_:forKey:) [some:0] | provenance | | +| test.swift:800:15:800:52 | call to updateValue(_:forKey:) [some:0] | test.swift:800:15:800:53 | ...! | provenance | | +| test.swift:800:44:800:51 | call to source() | test.swift:800:15:800:15 | [post] dict4 [Collection element, Tuple element at index 0] | provenance | | +| test.swift:801:15:801:15 | [post] dict4 [Collection element, Tuple element at index 1] | test.swift:803:15:803:15 | dict4 [Collection element, Tuple element at index 1] | provenance | | +| test.swift:801:15:801:15 | dict4 [Collection element, Tuple element at index 1] | test.swift:801:15:801:52 | call to updateValue(_:forKey:) [some:0] | provenance | | +| test.swift:801:15:801:52 | call to updateValue(_:forKey:) [some:0] | test.swift:801:15:801:53 | ...! | provenance | | +| test.swift:801:33:801:40 | call to source() | test.swift:801:15:801:15 | [post] dict4 [Collection element, Tuple element at index 1] | provenance | | +| test.swift:802:15:802:15 | dict4 [Collection element, Tuple element at index 0] | test.swift:802:15:802:35 | call to randomElement() [some:0, Tuple element at index 0] | provenance | | +| test.swift:802:15:802:35 | call to randomElement() [some:0, Tuple element at index 0] | test.swift:802:15:802:36 | ...! [Tuple element at index 0] | provenance | | +| test.swift:802:15:802:36 | ...! [Tuple element at index 0] | test.swift:802:15:802:38 | .0 | provenance | | +| test.swift:803:15:803:15 | dict4 [Collection element, Tuple element at index 1] | test.swift:803:15:803:35 | call to randomElement() [some:0, Tuple element at index 1] | provenance | | +| test.swift:803:15:803:35 | call to randomElement() [some:0, Tuple element at index 1] | test.swift:803:15:803:36 | ...! [Tuple element at index 1] | provenance | | +| test.swift:803:15:803:36 | ...! [Tuple element at index 1] | test.swift:803:15:803:38 | .1 | provenance | | +| test.swift:809:8:809:13 | v | test.swift:810:14:810:14 | v | provenance | | +| test.swift:810:5:810:5 | [post] self [v] | test.swift:809:3:811:3 | self[return] [v] | provenance | | +| test.swift:810:14:810:14 | v | test.swift:810:5:810:5 | [post] self [v] | provenance | | +| test.swift:813:8:813:8 | self [v] | test.swift:813:31:813:31 | self [v] | provenance | | +| test.swift:813:31:813:31 | self [v] | test.swift:813:31:813:31 | .v | provenance | | +| test.swift:813:31:813:31 | self [v] | test.swift:815:7:815:7 | self [v] | provenance | | +| test.swift:815:7:815:7 | self [v] | file://:0:0:0:0 | self [v] | provenance | | +| test.swift:815:7:815:7 | value | file://:0:0:0:0 | value | provenance | | +| test.swift:819:14:819:25 | call to S3.init(_:) [v] | test.swift:822:15:822:15 | s1 [v] | provenance | | +| test.swift:819:14:819:25 | call to S3.init(_:) [v] | test.swift:824:15:824:15 | s1 [v] | provenance | | +| test.swift:819:17:819:24 | call to source() | test.swift:809:8:809:13 | v | provenance | | +| test.swift:819:17:819:24 | call to source() | test.swift:819:14:819:25 | call to S3.init(_:) [v] | provenance | | +| test.swift:822:15:822:15 | s1 [v] | test.swift:815:7:815:7 | self [v] | provenance | | +| test.swift:822:15:822:15 | s1 [v] | test.swift:822:15:822:18 | .v | provenance | | +| test.swift:824:15:824:15 | s1 [v] | test.swift:813:8:813:8 | self [v] | provenance | | +| test.swift:824:15:824:15 | s1 [v] | test.swift:824:15:824:23 | call to getv() | provenance | | +| test.swift:828:5:828:5 | [post] s2 [v] | test.swift:831:15:831:15 | s2 [v] | provenance | | +| test.swift:828:5:828:5 | [post] s2 [v] | test.swift:833:15:833:15 | s2 [v] | provenance | | +| test.swift:828:12:828:19 | call to source() | test.swift:815:7:815:7 | value | provenance | | +| test.swift:828:12:828:19 | call to source() | test.swift:828:5:828:5 | [post] s2 [v] | provenance | | +| test.swift:831:15:831:15 | s2 [v] | test.swift:815:7:815:7 | self [v] | provenance | | +| 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] 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 | | +| test.swift:840:3:840:3 | [post] s2 [s, x] | test.swift:841:13:841:13 | s2 [s, x] | provenance | | +| test.swift:840:3:840:16 | \\...[...] | test.swift:839:11:839:17 | [post] exit #keyPath(...) | provenance | | +| test.swift:840:3:840:16 | \\...[...] | test.swift:840:3:840:3 | [post] s2 [s, x] | provenance | | +| test.swift:840:20:840:27 | call to source() | test.swift:840:3:840:16 | \\...[...] | provenance | | +| test.swift:841:13:841:13 | s2 [s, x] | test.swift:632:7:632:7 | self [s, x] | provenance | | +| test.swift:841:13:841:13 | s2 [s, x] | test.swift:841:13:841:16 | .s [x] | provenance | | +| test.swift:841:13:841:16 | .s [x] | test.swift:615:7:615:7 | self [x] | provenance | | +| test.swift:841:13:841:16 | .s [x] | test.swift:841:13:841:18 | .x | provenance | | +| test.swift:844:19:844:28 | args [Collection element] | test.swift:846:15:846:15 | args [Collection element] | provenance | | +| test.swift:846:15:846:15 | args [Collection element] | test.swift:846:15:846:21 | ...[...] | provenance | | +| test.swift:849:19:849:24 | v | test.swift:850:15:850:15 | v | provenance | | +| test.swift:856:29:856:40 | args [Collection element] | test.swift:859:15:859:15 | args [Collection element] | provenance | | +| test.swift:856:29:856:40 | args [Collection element] | test.swift:860:15:860:15 | args [Collection element] | provenance | | +| test.swift:856:29:856:40 | args [Collection element] | test.swift:862:16:862:16 | args [Collection element] | provenance | | +| test.swift:856:29:856:40 | args [Collection element] | test.swift:867:15:867:15 | args [Collection element] | provenance | | +| test.swift:859:15:859:15 | args [Collection element] | test.swift:859:15:859:21 | ...[...] | provenance | | +| test.swift:860:15:860:15 | args [Collection element] | test.swift:860:15:860:21 | ...[...] | provenance | | +| test.swift:862:5:862:5 | $arg$generator [Collection element] | test.swift:862:5:862:5 | call to next() [some:0] | provenance | | +| test.swift:862:5:862:5 | call to next() [some:0] | test.swift:862:9:862:9 | arg | provenance | | +| test.swift:862:9:862:9 | arg | test.swift:863:19:863:19 | arg | provenance | | +| test.swift:862:16:862:16 | args [Collection element] | test.swift:862:16:862:16 | call to makeIterator() [Collection element] | provenance | | +| test.swift:862:16:862:16 | call to makeIterator() [Collection element] | test.swift:862:5:862:5 | $arg$generator [Collection element] | provenance | | +| test.swift:866:21:866:29 | enter #keyPath(...) [Collection element] | test.swift:866:27:866:29 | KeyPathComponent | provenance | | +| test.swift:866:27:866:29 | KeyPathComponent | test.swift:866:21:866:29 | exit #keyPath(...) | provenance | | +| test.swift:867:15:867:15 | args [Collection element] | test.swift:866:21:866:29 | enter #keyPath(...) [Collection element] | provenance | | +| test.swift:867:15:867:15 | args [Collection element] | test.swift:867:15:867:38 | \\...[...] | provenance | | +| test.swift:871:24:871:31 | [...] [Collection element] | test.swift:844:19:844:28 | args [Collection element] | provenance | | +| test.swift:871:24:871:31 | [...] [Collection element] | test.swift:871:24:871:31 | [...] [Collection element] | provenance | | +| test.swift:871:24:871:31 | call to source() | test.swift:871:24:871:31 | [...] [Collection element] | provenance | | +| test.swift:872:18:872:25 | call to source() | test.swift:849:19:849:24 | v | provenance | | +| test.swift:873:21:873:31 | [...] [Collection element] | test.swift:856:29:856:40 | args [Collection element] | provenance | | +| test.swift:873:21:873:31 | [...] [Collection element] | test.swift:873:21:873:31 | [...] [Collection element] | provenance | | +| test.swift:873:24:873:31 | call to source() | test.swift:873:21:873:31 | [...] [Collection element] | provenance | | +| test.swift:877:16:877:30 | call to Set.init(_:) [Collection element] | test.swift:879:17:879:17 | set1 [Collection element] | provenance | | +| test.swift:877:16:877:30 | call to Set.init(_:) [Collection element] | test.swift:883:21:883:21 | set1 [Collection element] | provenance | | +| test.swift:877:20:877:29 | [...] [Collection element] | test.swift:877:16:877:30 | call to Set.init(_:) [Collection element] | provenance | | +| test.swift:877:21:877:28 | call to source() | test.swift:877:20:877:29 | [...] [Collection element] | provenance | | +| test.swift:879:5:879:5 | $elem$generator [Collection element] | test.swift:879:5:879:5 | call to next() [some:0] | provenance | | +| test.swift:879:5:879:5 | call to next() [some:0] | test.swift:879:9:879:9 | elem | provenance | | +| test.swift:879:9:879:9 | elem | test.swift:880:19:880:19 | elem | provenance | | +| test.swift:879:17:879:17 | call to makeIterator() [Collection element] | test.swift:879:5:879:5 | $elem$generator [Collection element] | provenance | | +| test.swift:879:17:879:17 | set1 [Collection element] | test.swift:879:17:879:17 | call to makeIterator() [Collection element] | provenance | | +| test.swift:883:21:883:21 | set1 [Collection element] | test.swift:883:21:883:39 | call to makeIterator() [Collection element] | provenance | | +| test.swift:883:21:883:39 | call to makeIterator() [Collection element] | test.swift:884:15:884:15 | generator [Collection element] | provenance | | +| test.swift:884:15:884:15 | generator [Collection element] | test.swift:884:15:884:30 | call to next() [some:0] | provenance | | +| test.swift:884:15:884:30 | call to next() [some:0] | test.swift:884:15:884:31 | ...! | provenance | | +| test.swift:908:19:908:26 | call to source() | test.swift:904:13:904:18 | call to ... | provenance | | +| test.swift:927:12:927:31 | call to source(_:) | test.swift:927:12:927:31 | OpenExistentialExpr | provenance | | +| test.swift:929:12:929:57 | call to source(_:) | test.swift:929:12:929:57 | OpenExistentialExpr | provenance | | +| test.swift:937:22:937:29 | call to source() | file://:0:0:0:0 | .wrappedValue | provenance | | +| test.swift:938:9:938:9 | newValue | test.swift:938:25:938:25 | newValue | provenance | | +| test.swift:941:10:941:24 | wrappedValue | test.swift:942:19:942:19 | wrappedValue | provenance | | +| test.swift:943:29:943:36 | call to source() | test.swift:938:9:938:9 | newValue | provenance | | +| test.swift:948:33:948:33 | value | file://:0:0:0:0 | value | provenance | | +| test.swift:948:42:948:49 | call to source() | test.swift:941:10:941:24 | wrappedValue | provenance | | +| test.swift:950:9:950:16 | call to source() | test.swift:948:33:948:33 | value | provenance | | +| test.swift:957:9:957:9 | value | file://:0:0:0:0 | value | provenance | | +| test.swift:958:9:958:9 | self [wrappedValue] | test.swift:959:23:959:23 | self [wrappedValue] | provenance | | +| test.swift:959:23:959:23 | self [wrappedValue] | test.swift:959:23:959:23 | .wrappedValue | provenance | | +| test.swift:965:9:965:9 | newValue | test.swift:967:28:967:28 | newValue | provenance | | +| test.swift:967:28:967:28 | newValue | test.swift:957:9:957:9 | value | provenance | | +| test.swift:971:10:971:24 | wrappedValue | test.swift:972:19:972:19 | wrappedValue | provenance | | +| test.swift:978:34:978:34 | value | file://:0:0:0:0 | value | provenance | | +| test.swift:980:9:980:16 | call to source() | test.swift:978:34:978:34 | value | provenance | | +| test.swift:983:38:983:45 | call to source() | test.swift:971:10:971:24 | wrappedValue | provenance | | +| 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 [x] | semmle.label | .a [x] | | file://:0:0:0:0 | .s [x] | semmle.label | .s [x] | 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 24d797088fc..b0c6ed9c8bd 100644 --- a/swift/ql/test/library-tests/dataflow/taint/core/Taint.expected +++ b/swift/ql/test/library-tests/dataflow/taint/core/Taint.expected @@ -1,220 +1,220 @@ edges -| conversions.swift:33:16:33:26 | call to sourceInt() | conversions.swift:33:12:33:27 | call to Self.init(_:) | -| conversions.swift:34:18:34:28 | call to sourceInt() | conversions.swift:34:12:34:29 | call to Self.init(_:) | -| conversions.swift:35:18:35:28 | call to sourceInt() | conversions.swift:35:12:35:29 | call to Float.init(_:) | -| conversions.swift:36:12:36:30 | call to String.init(_:) [Collection element] | conversions.swift:36:12:36:30 | call to String.init(_:) | -| conversions.swift:36:19:36:29 | call to sourceInt() | conversions.swift:36:12:36:30 | call to String.init(_:) | -| conversions.swift:36:19:36:29 | call to sourceInt() | conversions.swift:36:12:36:30 | call to String.init(_:) [Collection element] | -| conversions.swift:37:12:37:30 | call to String.init(_:) | conversions.swift:37:12:37:32 | .utf8 | -| conversions.swift:37:19:37:29 | call to sourceInt() | conversions.swift:37:12:37:30 | call to String.init(_:) | -| conversions.swift:39:12:39:30 | [...] [Collection element] | conversions.swift:40:12:40:12 | arr | -| conversions.swift:39:12:39:30 | [...] [Collection element] | conversions.swift:41:12:41:12 | arr [Collection element] | -| conversions.swift:39:12:39:30 | [...] [Collection element] | conversions.swift:41:12:41:17 | ...[...] | -| conversions.swift:39:12:39:30 | [...] [Collection element] | conversions.swift:42:20:42:20 | arr | -| conversions.swift:39:12:39:30 | [...] [Collection element] | conversions.swift:42:20:42:20 | arr [Collection element] | -| conversions.swift:39:12:39:30 | [...] [Collection element] | conversions.swift:43:20:43:20 | arr | -| conversions.swift:39:12:39:30 | [...] [Collection element] | conversions.swift:43:20:43:20 | arr [Collection element] | -| conversions.swift:39:19:39:29 | call to sourceInt() | conversions.swift:39:12:39:30 | [...] [Collection element] | -| conversions.swift:41:12:41:12 | arr [Collection element] | conversions.swift:41:12:41:17 | ...[...] | -| conversions.swift:42:12:42:23 | call to Array.init(_:) [Collection element] | conversions.swift:42:12:42:23 | call to Array.init(_:) | -| conversions.swift:42:20:42:20 | arr | conversions.swift:42:12:42:23 | call to Array.init(_:) [Collection element] | -| conversions.swift:42:20:42:20 | arr [Collection element] | conversions.swift:42:12:42:23 | call to Array.init(_:) [Collection element] | -| conversions.swift:43:12:43:23 | call to Array.init(_:) [Collection element] | conversions.swift:43:12:43:26 | ...[...] | -| conversions.swift:43:20:43:20 | arr | conversions.swift:43:12:43:23 | call to Array.init(_:) [Collection element] | -| conversions.swift:43:20:43:20 | arr [Collection element] | conversions.swift:43:12:43:23 | call to Array.init(_:) [Collection element] | -| conversions.swift:44:12:44:39 | call to Array.init(_:) [Collection element] | conversions.swift:44:12:44:39 | call to Array.init(_:) | -| conversions.swift:44:20:44:33 | call to sourceString() | conversions.swift:44:20:44:35 | .utf8 | -| conversions.swift:44:20:44:35 | .utf8 | conversions.swift:44:12:44:39 | call to Array.init(_:) [Collection element] | -| conversions.swift:45:12:45:39 | call to Array.init(_:) [Collection element] | conversions.swift:45:12:45:42 | ...[...] | -| conversions.swift:45:20:45:33 | call to sourceString() | conversions.swift:45:20:45:35 | .utf8 | -| conversions.swift:45:20:45:35 | .utf8 | conversions.swift:45:12:45:39 | call to Array.init(_:) [Collection element] | -| conversions.swift:47:13:47:23 | call to sourceInt() | conversions.swift:48:13:48:13 | v | -| conversions.swift:51:18:51:41 | call to numericCast(_:) | conversions.swift:52:12:52:12 | v2 | -| conversions.swift:51:30:51:40 | call to sourceInt() | conversions.swift:51:18:51:41 | call to numericCast(_:) | -| conversions.swift:54:17:54:57 | call to unsafeBitCast(_:to:) | conversions.swift:55:12:55:12 | v4 | -| conversions.swift:54:31:54:41 | call to sourceInt() | conversions.swift:54:17:54:57 | call to unsafeBitCast(_:to:) | -| conversions.swift:57:11:57:47 | call to Self.init(truncatingIfNeeded:) | conversions.swift:58:12:58:12 | v5 | -| conversions.swift:57:36:57:46 | call to sourceInt() | conversions.swift:57:11:57:47 | call to Self.init(truncatingIfNeeded:) | -| conversions.swift:60:11:60:39 | call to UInt.init(bitPattern:) | conversions.swift:61:12:61:12 | v6 | -| conversions.swift:60:28:60:38 | call to sourceInt() | conversions.swift:60:11:60:39 | call to UInt.init(bitPattern:) | -| conversions.swift:63:11:63:26 | call to abs(_:) | conversions.swift:64:12:64:12 | v7 | -| conversions.swift:63:15:63:25 | call to sourceInt() | conversions.swift:63:11:63:26 | call to abs(_:) | -| conversions.swift:69:28:69:38 | call to sourceInt() | conversions.swift:69:12:69:39 | call to advanced(by:) | -| conversions.swift:71:12:71:36 | call to Self.init(exactly:) [some:0] | conversions.swift:71:12:71:37 | ...! | -| conversions.swift:71:25:71:35 | call to sourceInt() | conversions.swift:71:12:71:36 | call to Self.init(exactly:) [some:0] | -| conversions.swift:72:12:72:39 | call to Self.init(exactly:) [some:0] | conversions.swift:72:12:72:40 | ...! | -| conversions.swift:72:28:72:38 | call to sourceInt() | conversions.swift:72:12:72:39 | call to Self.init(exactly:) [some:0] | -| conversions.swift:73:26:73:36 | call to sourceInt() | conversions.swift:73:12:73:37 | call to Self.init(clamping:) | -| conversions.swift:74:36:74:46 | call to sourceInt() | conversions.swift:74:12:74:47 | call to Self.init(truncatingIfNeeded:) | -| conversions.swift:75:12:75:41 | call to Self.init(_:radix:) [some:0] | conversions.swift:75:12:75:42 | ...! | -| conversions.swift:75:16:75:29 | call to sourceString() | conversions.swift:75:12:75:41 | call to Self.init(_:radix:) [some:0] | -| conversions.swift:77:30:77:40 | call to sourceInt() | conversions.swift:77:12:77:41 | call to Self.init(littleEndian:) | -| conversions.swift:78:27:78:37 | call to sourceInt() | conversions.swift:78:12:78:38 | call to Self.init(bigEndian:) | -| conversions.swift:79:12:79:22 | call to sourceInt() | conversions.swift:79:12:79:24 | .littleEndian | -| conversions.swift:80:12:80:22 | call to sourceInt() | conversions.swift:80:12:80:24 | .bigEndian | -| conversions.swift:109:18:109:30 | call to sourceFloat() | conversions.swift:109:12:109:31 | call to Float.init(_:) | -| conversions.swift:110:18:110:30 | call to sourceFloat() | conversions.swift:110:12:110:31 | call to UInt8.init(_:) | -| conversions.swift:111:12:111:32 | call to String.init(_:) [Collection element] | conversions.swift:111:12:111:32 | call to String.init(_:) | -| conversions.swift:111:19:111:31 | call to sourceFloat() | conversions.swift:111:12:111:32 | call to String.init(_:) | -| conversions.swift:111:19:111:31 | call to sourceFloat() | conversions.swift:111:12:111:32 | call to String.init(_:) [Collection element] | -| conversions.swift:112:12:112:32 | call to String.init(_:) | conversions.swift:112:12:112:34 | .utf8 | -| conversions.swift:112:19:112:31 | call to sourceFloat() | conversions.swift:112:12:112:32 | call to String.init(_:) | -| conversions.swift:113:12:113:34 | call to String.init(_:) [Collection element] | conversions.swift:113:12:113:34 | call to String.init(_:) | -| conversions.swift:113:19:113:33 | call to sourceFloat80() | conversions.swift:113:12:113:34 | call to String.init(_:) | -| conversions.swift:113:19:113:33 | call to sourceFloat80() | conversions.swift:113:12:113:34 | call to String.init(_:) [Collection element] | -| conversions.swift:114:12:114:34 | call to String.init(_:) | conversions.swift:114:12:114:36 | .utf8 | -| conversions.swift:114:19:114:33 | call to sourceFloat80() | conversions.swift:114:12:114:34 | call to String.init(_:) | -| conversions.swift:115:12:115:33 | call to String.init(_:) [Collection element] | conversions.swift:115:12:115:33 | call to String.init(_:) | -| conversions.swift:115:19:115:32 | call to sourceDouble() | conversions.swift:115:12:115:33 | call to String.init(_:) | -| conversions.swift:115:19:115:32 | call to sourceDouble() | conversions.swift:115:12:115:33 | call to String.init(_:) [Collection element] | -| conversions.swift:116:12:116:33 | call to String.init(_:) | conversions.swift:116:12:116:35 | .utf8 | -| conversions.swift:116:19:116:32 | call to sourceDouble() | conversions.swift:116:12:116:33 | call to String.init(_:) | -| conversions.swift:118:18:118:30 | call to sourceFloat() | conversions.swift:118:12:118:31 | call to Float.init(_:) | -| conversions.swift:119:41:119:51 | call to sourceInt() | conversions.swift:119:12:119:70 | call to Float.init(sign:exponent:significand:) | -| conversions.swift:120:57:120:69 | call to sourceFloat() | conversions.swift:120:12:120:70 | call to Float.init(sign:exponent:significand:) | -| conversions.swift:122:44:122:56 | call to sourceFloat() | conversions.swift:122:12:122:57 | call to Float.init(signOf:magnitudeOf:) | -| conversions.swift:124:12:124:24 | call to sourceFloat() | conversions.swift:124:12:124:26 | .exponent | -| conversions.swift:125:12:125:24 | call to sourceFloat() | conversions.swift:125:12:125:26 | .significand | -| conversions.swift:126:12:126:26 | call to sourceFloat80() | conversions.swift:126:12:126:28 | .exponent | -| conversions.swift:127:12:127:26 | call to sourceFloat80() | conversions.swift:127:12:127:28 | .significand | -| conversions.swift:128:12:128:25 | call to sourceDouble() | conversions.swift:128:12:128:27 | .exponent | -| conversions.swift:129:12:129:25 | call to sourceDouble() | conversions.swift:129:12:129:27 | .significand | -| conversions.swift:130:12:130:23 | call to sourceUInt() | conversions.swift:130:12:130:25 | .byteSwapped | -| conversions.swift:131:12:131:25 | call to sourceUInt64() | conversions.swift:131:12:131:27 | .byteSwapped | -| conversions.swift:136:12:136:33 | call to String.init(_:) [Collection element] | conversions.swift:136:12:136:33 | call to String.init(_:) | -| conversions.swift:136:19:136:32 | call to sourceString() | conversions.swift:136:12:136:33 | call to String.init(_:) | -| conversions.swift:136:19:136:32 | call to sourceString() | conversions.swift:136:12:136:33 | call to String.init(_:) [Collection element] | -| conversions.swift:144:12:144:35 | call to MyString.init(_:) | conversions.swift:144:12:144:35 | call to MyString.init(_:) [some:0] | -| conversions.swift:144:12:144:35 | call to MyString.init(_:) | conversions.swift:145:12:145:12 | ms2 | -| conversions.swift:144:12:144:35 | call to MyString.init(_:) | conversions.swift:146:12:146:16 | .description | -| conversions.swift:144:12:144:35 | call to MyString.init(_:) | conversions.swift:147:12:147:16 | .debugDescription | -| conversions.swift:144:12:144:35 | call to MyString.init(_:) [some:0] | conversions.swift:144:12:144:36 | ...! | -| conversions.swift:144:12:144:36 | ...! | conversions.swift:145:12:145:12 | ms2 | -| conversions.swift:144:12:144:36 | ...! | conversions.swift:146:12:146:16 | .description | -| conversions.swift:144:12:144:36 | ...! | conversions.swift:147:12:147:16 | .debugDescription | -| conversions.swift:144:21:144:34 | call to sourceString() | conversions.swift:144:12:144:35 | call to MyString.init(_:) | -| conversions.swift:152:31:152:44 | call to sourceString() | conversions.swift:153:12:153:12 | parent | -| conversions.swift:152:31:152:44 | call to sourceString() | conversions.swift:154:12:154:12 | parent | -| conversions.swift:152:31:152:44 | call to sourceString() | conversions.swift:156:40:156:40 | parent | -| conversions.swift:156:25:156:69 | call to unsafeDowncast(_:to:) | conversions.swift:157:12:157:12 | v3 | -| conversions.swift:156:25:156:69 | call to unsafeDowncast(_:to:) | conversions.swift:158:12:158:12 | v3 | -| conversions.swift:156:40:156:40 | parent | conversions.swift:156:25:156:69 | call to unsafeDowncast(_:to:) | -| conversions.swift:166:24:166:34 | call to sourceInt() | conversions.swift:166:12:166:35 | call to Self.init(_:) | -| conversions.swift:171:14:171:33 | call to sourceArray(_:) | conversions.swift:173:13:173:13 | arr1 | -| conversions.swift:171:14:171:33 | call to sourceArray(_:) | conversions.swift:175:13:175:19 | ...[...] | -| conversions.swift:171:14:171:33 | call to sourceArray(_:) | conversions.swift:178:25:178:25 | arr1 | -| conversions.swift:171:14:171:33 | call to sourceArray(_:) | conversions.swift:185:31:185:31 | arr1 | -| conversions.swift:172:14:172:26 | [...] [Collection element] | conversions.swift:174:13:174:13 | arr2 | -| conversions.swift:172:14:172:26 | [...] [Collection element] | conversions.swift:176:13:176:13 | arr2 [Collection element] | -| conversions.swift:172:14:172:26 | [...] [Collection element] | conversions.swift:176:13:176:19 | ...[...] | -| conversions.swift:172:14:172:26 | [...] [Collection element] | conversions.swift:179:25:179:25 | arr2 | -| conversions.swift:172:14:172:26 | [...] [Collection element] | conversions.swift:179:25:179:25 | arr2 [Collection element] | -| conversions.swift:172:14:172:26 | [...] [Collection element] | conversions.swift:186:31:186:31 | arr2 | -| conversions.swift:172:14:172:26 | [...] [Collection element] | conversions.swift:186:31:186:31 | arr2 [Collection element] | -| conversions.swift:172:15:172:25 | call to sourceInt() | conversions.swift:172:14:172:26 | [...] [Collection element] | -| conversions.swift:176:13:176:13 | arr2 [Collection element] | conversions.swift:176:13:176:19 | ...[...] | -| conversions.swift:178:19:178:29 | call to Array.init(_:) [Collection element] | conversions.swift:180:13:180:13 | arr1b | -| conversions.swift:178:19:178:29 | call to Array.init(_:) [Collection element] | conversions.swift:182:13:182:13 | arr1b [Collection element] | -| conversions.swift:178:19:178:29 | call to Array.init(_:) [Collection element] | conversions.swift:182:13:182:20 | ...[...] | -| conversions.swift:178:25:178:25 | arr1 | conversions.swift:178:19:178:29 | call to Array.init(_:) [Collection element] | -| conversions.swift:179:19:179:29 | call to Array.init(_:) [Collection element] | conversions.swift:181:13:181:13 | arr2b | -| conversions.swift:179:19:179:29 | call to Array.init(_:) [Collection element] | conversions.swift:183:13:183:13 | arr2b [Collection element] | -| conversions.swift:179:19:179:29 | call to Array.init(_:) [Collection element] | conversions.swift:183:13:183:20 | ...[...] | -| conversions.swift:179:25:179:25 | arr2 | conversions.swift:179:19:179:29 | call to Array.init(_:) [Collection element] | -| conversions.swift:179:25:179:25 | arr2 [Collection element] | conversions.swift:179:19:179:29 | call to Array.init(_:) [Collection element] | -| conversions.swift:182:13:182:13 | arr1b [Collection element] | conversions.swift:182:13:182:20 | ...[...] | -| conversions.swift:183:13:183:13 | arr2b [Collection element] | conversions.swift:183:13:183:20 | ...[...] | -| conversions.swift:185:15:185:35 | call to ContiguousArray.init(_:) [Collection element] | conversions.swift:187:13:187:13 | arr1c | -| conversions.swift:185:15:185:35 | call to ContiguousArray.init(_:) [Collection element] | conversions.swift:189:13:189:13 | arr1c [Collection element] | -| conversions.swift:185:15:185:35 | call to ContiguousArray.init(_:) [Collection element] | conversions.swift:189:13:189:20 | ...[...] | -| conversions.swift:185:31:185:31 | arr1 | conversions.swift:185:15:185:35 | call to ContiguousArray.init(_:) [Collection element] | -| conversions.swift:186:15:186:35 | call to ContiguousArray.init(_:) [Collection element] | conversions.swift:188:13:188:13 | arr2c | -| conversions.swift:186:15:186:35 | call to ContiguousArray.init(_:) [Collection element] | conversions.swift:190:13:190:13 | arr2c [Collection element] | -| conversions.swift:186:15:186:35 | call to ContiguousArray.init(_:) [Collection element] | conversions.swift:190:13:190:20 | ...[...] | -| conversions.swift:186:31:186:31 | arr2 | conversions.swift:186:15:186:35 | call to ContiguousArray.init(_:) [Collection element] | -| conversions.swift:186:31:186:31 | arr2 [Collection element] | conversions.swift:186:15:186:35 | call to ContiguousArray.init(_:) [Collection element] | -| conversions.swift:189:13:189:13 | arr1c [Collection element] | conversions.swift:189:13:189:20 | ...[...] | -| conversions.swift:190:13:190:13 | arr2c [Collection element] | conversions.swift:190:13:190:20 | ...[...] | -| file://:0:0:0:0 | self [first] | file://:0:0:0:0 | .first | -| file://:0:0:0:0 | self [second] | file://:0:0:0:0 | .second | -| file://:0:0:0:0 | value | file://:0:0:0:0 | [post] self [first] | -| file://:0:0:0:0 | value | file://:0:0:0:0 | [post] self [second] | -| simple.swift:12:17:12:24 | call to source() | simple.swift:12:13:12:24 | ... .+(_:_:) ... | -| simple.swift:13:13:13:20 | call to source() | simple.swift:13:13:13:24 | ... .+(_:_:) ... | -| simple.swift:14:17:14:24 | call to source() | simple.swift:14:13:14:24 | ... .-(_:_:) ... | -| simple.swift:15:13:15:20 | call to source() | simple.swift:15:13:15:24 | ... .-(_:_:) ... | -| simple.swift:16:17:16:24 | call to source() | simple.swift:16:13:16:24 | ... .*(_:_:) ... | -| simple.swift:17:13:17:20 | call to source() | simple.swift:17:13:17:24 | ... .*(_:_:) ... | -| simple.swift:18:19:18:26 | call to source() | simple.swift:18:13:18:26 | ... ./(_:_:) ... | -| simple.swift:19:13:19:20 | call to source() | simple.swift:19:13:19:24 | ... ./(_:_:) ... | -| simple.swift:20:19:20:26 | call to source() | simple.swift:20:13:20:26 | ... .%(_:_:) ... | -| simple.swift:21:13:21:20 | call to source() | simple.swift:21:13:21:24 | ... .%(_:_:) ... | -| simple.swift:23:14:23:21 | call to source() | simple.swift:23:13:23:21 | call to -(_:) | -| simple.swift:27:18:27:25 | call to source() | simple.swift:27:13:27:25 | ... .&+(_:_:) ... | -| simple.swift:28:13:28:20 | call to source() | simple.swift:28:13:28:25 | ... .&+(_:_:) ... | -| simple.swift:29:18:29:25 | call to source() | simple.swift:29:13:29:25 | ... .&-(_:_:) ... | -| simple.swift:30:13:30:20 | call to source() | simple.swift:30:13:30:25 | ... .&-(_:_:) ... | -| simple.swift:31:18:31:25 | call to source() | simple.swift:31:13:31:25 | ... .&*(_:_:) ... | -| simple.swift:32:13:32:20 | call to source() | simple.swift:32:13:32:25 | ... .&*(_:_:) ... | -| simple.swift:40:8:40:15 | call to source() | simple.swift:41:13:41:13 | a | -| simple.swift:40:8:40:15 | call to source() | simple.swift:43:13:43:13 | a | -| simple.swift:48:8:48:15 | call to source() | simple.swift:49:13:49:13 | b | -| simple.swift:48:8:48:15 | call to source() | simple.swift:51:13:51:13 | b | -| simple.swift:54:8:54:15 | call to source() | simple.swift:55:13:55:13 | c | -| simple.swift:54:8:54:15 | call to source() | simple.swift:57:13:57:13 | c | -| simple.swift:60:8:60:15 | call to source() | simple.swift:61:13:61:13 | d | -| simple.swift:60:8:60:15 | call to source() | simple.swift:63:13:63:13 | d | -| simple.swift:66:8:66:15 | call to source() | simple.swift:67:13:67:13 | e | -| simple.swift:66:8:66:15 | call to source() | simple.swift:69:13:69:13 | e | -| simple.swift:73:17:73:24 | call to source() | simple.swift:73:13:73:24 | ... .\|(_:_:) ... | -| simple.swift:74:13:74:20 | call to source() | simple.swift:74:13:74:24 | ... .\|(_:_:) ... | -| simple.swift:76:22:76:29 | call to source() | simple.swift:76:13:76:29 | ... .&(_:_:) ... | -| simple.swift:77:13:77:20 | call to source() | simple.swift:77:13:77:24 | ... .&(_:_:) ... | -| simple.swift:79:22:79:29 | call to source() | simple.swift:79:13:79:29 | ... .^(_:_:) ... | -| simple.swift:80:13:80:20 | call to source() | simple.swift:80:13:80:24 | ... .^(_:_:) ... | -| simple.swift:82:13:82:20 | call to source() | simple.swift:82:13:82:25 | ... .<<(_:_:) ... | -| simple.swift:83:13:83:20 | call to source() | simple.swift:83:13:83:26 | ... .&<<(_:_:) ... | -| simple.swift:84:13:84:20 | call to source() | simple.swift:84:13:84:25 | ... .>>(_:_:) ... | -| simple.swift:85:13:85:20 | call to source() | simple.swift:85:13:85:26 | ... .&>>(_:_:) ... | -| simple.swift:87:14:87:21 | call to source() | simple.swift:87:13:87:21 | call to ~(_:) | -| stringinterpolation.swift:6:6:6:6 | self [first] | file://:0:0:0:0 | self [first] | -| stringinterpolation.swift:6:6:6:6 | value | file://:0:0:0:0 | value | -| stringinterpolation.swift:7:6:7:6 | self [second] | file://:0:0:0:0 | self [second] | -| stringinterpolation.swift:7:6:7:6 | value | file://:0:0:0:0 | value | -| stringinterpolation.swift:11:36:11:44 | pair [first] | stringinterpolation.swift:13:36:13:36 | pair [first] | -| stringinterpolation.swift:13:3:13:3 | [post] self | stringinterpolation.swift:11:11:14:2 | self[return] | -| stringinterpolation.swift:13:36:13:36 | pair [first] | stringinterpolation.swift:6:6:6:6 | self [first] | -| stringinterpolation.swift:13:36:13:36 | pair [first] | stringinterpolation.swift:13:36:13:41 | .first | -| stringinterpolation.swift:13:36:13:41 | .first | stringinterpolation.swift:11:11:14:2 | self[return] | -| stringinterpolation.swift:13:36:13:41 | .first | stringinterpolation.swift:13:3:13:3 | [post] self | -| stringinterpolation.swift:19:2:19:2 | [post] p1 [first] | stringinterpolation.swift:20:2:20:2 | p1 [first] | -| stringinterpolation.swift:19:13:19:20 | call to source() | stringinterpolation.swift:6:6:6:6 | value | -| stringinterpolation.swift:19:13:19:20 | call to source() | stringinterpolation.swift:19:2:19:2 | [post] p1 [first] | -| stringinterpolation.swift:20:2:20:2 | p1 [first] | stringinterpolation.swift:22:21:22:21 | p1 [first] | -| stringinterpolation.swift:20:2:20:2 | p1 [first] | stringinterpolation.swift:24:21:24:21 | p1 [first] | -| stringinterpolation.swift:22:21:22:21 | p1 [first] | stringinterpolation.swift:6:6:6:6 | self [first] | -| stringinterpolation.swift:22:21:22:21 | p1 [first] | stringinterpolation.swift:22:21:22:24 | .first | -| stringinterpolation.swift:22:21:22:24 | .first | stringinterpolation.swift:22:12:22:12 | "..." | -| stringinterpolation.swift:24:20:24:20 | [post] $interpolation | stringinterpolation.swift:24:12:24:12 | "..." | -| stringinterpolation.swift:24:21:24:21 | p1 [first] | stringinterpolation.swift:11:36:11:44 | pair [first] | -| stringinterpolation.swift:24:21:24:21 | p1 [first] | stringinterpolation.swift:24:20:24:20 | [post] $interpolation | -| stringinterpolation.swift:28:2:28:2 | [post] p2 [second] | stringinterpolation.swift:31:21:31:21 | p2 [second] | -| stringinterpolation.swift:28:14:28:21 | call to source() | stringinterpolation.swift:7:6:7:6 | value | -| stringinterpolation.swift:28:14:28:21 | call to source() | 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] | -| stringinterpolation.swift:31:21:31:21 | p2 [second] | stringinterpolation.swift:31:21:31:24 | .second | -| stringinterpolation.swift:31:21:31:24 | .second | stringinterpolation.swift:31:12:31:12 | "..." | -| stringinterpolation.swift:36:10:36:17 | call to source() | stringinterpolation.swift:40:12:40:12 | "..." | -| stringinterpolation.swift:36:10:36:17 | call to source() | stringinterpolation.swift:41:12:41:12 | "..." | -| stringinterpolation.swift:36:10:36:17 | call to source() | stringinterpolation.swift:42:12:42:12 | "..." | -| subscript.swift:13:15:13:22 | call to source() | subscript.swift:13:15:13:25 | ...[...] | -| subscript.swift:14:15:14:23 | call to source2() | subscript.swift:14:15:14:26 | ...[...] | -| try.swift:9:17:9:24 | call to source() | try.swift:9:13:9:24 | try ... | -| try.swift:15:17:15:24 | call to source() | try.swift:15:12:15:24 | try! ... | -| try.swift:18:13:18:25 | try? ... [some:0] | try.swift:18:12:18:27 | ...! | -| try.swift:18:18:18:25 | call to source() | try.swift:18:12:18:27 | ...! | -| try.swift:18:18:18:25 | call to source() | try.swift:18:18:18:25 | call to source() [some:0] | -| try.swift:18:18:18:25 | call to source() [some:0] | try.swift:18:13:18:25 | try? ... [some:0] | +| conversions.swift:33:16:33:26 | call to sourceInt() | conversions.swift:33:12:33:27 | call to Self.init(_:) | provenance | | +| conversions.swift:34:18:34:28 | call to sourceInt() | conversions.swift:34:12:34:29 | call to Self.init(_:) | provenance | | +| conversions.swift:35:18:35:28 | call to sourceInt() | conversions.swift:35:12:35:29 | call to Float.init(_:) | provenance | | +| conversions.swift:36:12:36:30 | call to String.init(_:) [Collection element] | conversions.swift:36:12:36:30 | call to String.init(_:) | provenance | | +| conversions.swift:36:19:36:29 | call to sourceInt() | conversions.swift:36:12:36:30 | call to String.init(_:) | provenance | | +| conversions.swift:36:19:36:29 | call to sourceInt() | conversions.swift:36:12:36:30 | call to String.init(_:) [Collection element] | provenance | | +| conversions.swift:37:12:37:30 | call to String.init(_:) | conversions.swift:37:12:37:32 | .utf8 | provenance | | +| conversions.swift:37:19:37:29 | call to sourceInt() | conversions.swift:37:12:37:30 | call to String.init(_:) | provenance | | +| conversions.swift:39:12:39:30 | [...] [Collection element] | conversions.swift:40:12:40:12 | arr | provenance | | +| conversions.swift:39:12:39:30 | [...] [Collection element] | conversions.swift:41:12:41:12 | arr [Collection element] | provenance | | +| conversions.swift:39:12:39:30 | [...] [Collection element] | conversions.swift:41:12:41:17 | ...[...] | provenance | | +| conversions.swift:39:12:39:30 | [...] [Collection element] | conversions.swift:42:20:42:20 | arr | provenance | | +| conversions.swift:39:12:39:30 | [...] [Collection element] | conversions.swift:42:20:42:20 | arr [Collection element] | provenance | | +| conversions.swift:39:12:39:30 | [...] [Collection element] | conversions.swift:43:20:43:20 | arr | provenance | | +| conversions.swift:39:12:39:30 | [...] [Collection element] | conversions.swift:43:20:43:20 | arr [Collection element] | provenance | | +| conversions.swift:39:19:39:29 | call to sourceInt() | conversions.swift:39:12:39:30 | [...] [Collection element] | provenance | | +| conversions.swift:41:12:41:12 | arr [Collection element] | conversions.swift:41:12:41:17 | ...[...] | provenance | | +| conversions.swift:42:12:42:23 | call to Array.init(_:) [Collection element] | conversions.swift:42:12:42:23 | call to Array.init(_:) | provenance | | +| conversions.swift:42:20:42:20 | arr | conversions.swift:42:12:42:23 | call to Array.init(_:) [Collection element] | provenance | | +| conversions.swift:42:20:42:20 | arr [Collection element] | conversions.swift:42:12:42:23 | call to Array.init(_:) [Collection element] | provenance | | +| conversions.swift:43:12:43:23 | call to Array.init(_:) [Collection element] | conversions.swift:43:12:43:26 | ...[...] | provenance | | +| conversions.swift:43:20:43:20 | arr | conversions.swift:43:12:43:23 | call to Array.init(_:) [Collection element] | provenance | | +| conversions.swift:43:20:43:20 | arr [Collection element] | conversions.swift:43:12:43:23 | call to Array.init(_:) [Collection element] | provenance | | +| conversions.swift:44:12:44:39 | call to Array.init(_:) [Collection element] | conversions.swift:44:12:44:39 | call to Array.init(_:) | provenance | | +| conversions.swift:44:20:44:33 | call to sourceString() | conversions.swift:44:20:44:35 | .utf8 | provenance | | +| conversions.swift:44:20:44:35 | .utf8 | conversions.swift:44:12:44:39 | call to Array.init(_:) [Collection element] | provenance | | +| conversions.swift:45:12:45:39 | call to Array.init(_:) [Collection element] | conversions.swift:45:12:45:42 | ...[...] | provenance | | +| conversions.swift:45:20:45:33 | call to sourceString() | conversions.swift:45:20:45:35 | .utf8 | provenance | | +| conversions.swift:45:20:45:35 | .utf8 | conversions.swift:45:12:45:39 | call to Array.init(_:) [Collection element] | provenance | | +| conversions.swift:47:13:47:23 | call to sourceInt() | conversions.swift:48:13:48:13 | v | provenance | | +| conversions.swift:51:18:51:41 | call to numericCast(_:) | conversions.swift:52:12:52:12 | v2 | provenance | | +| conversions.swift:51:30:51:40 | call to sourceInt() | conversions.swift:51:18:51:41 | call to numericCast(_:) | provenance | | +| conversions.swift:54:17:54:57 | call to unsafeBitCast(_:to:) | conversions.swift:55:12:55:12 | v4 | provenance | | +| conversions.swift:54:31:54:41 | call to sourceInt() | conversions.swift:54:17:54:57 | call to unsafeBitCast(_:to:) | provenance | | +| conversions.swift:57:11:57:47 | call to Self.init(truncatingIfNeeded:) | conversions.swift:58:12:58:12 | v5 | provenance | | +| conversions.swift:57:36:57:46 | call to sourceInt() | conversions.swift:57:11:57:47 | call to Self.init(truncatingIfNeeded:) | provenance | | +| conversions.swift:60:11:60:39 | call to UInt.init(bitPattern:) | conversions.swift:61:12:61:12 | v6 | provenance | | +| conversions.swift:60:28:60:38 | call to sourceInt() | conversions.swift:60:11:60:39 | call to UInt.init(bitPattern:) | provenance | | +| conversions.swift:63:11:63:26 | call to abs(_:) | conversions.swift:64:12:64:12 | v7 | provenance | | +| conversions.swift:63:15:63:25 | call to sourceInt() | conversions.swift:63:11:63:26 | call to abs(_:) | provenance | | +| conversions.swift:69:28:69:38 | call to sourceInt() | conversions.swift:69:12:69:39 | call to advanced(by:) | provenance | | +| conversions.swift:71:12:71:36 | call to Self.init(exactly:) [some:0] | conversions.swift:71:12:71:37 | ...! | provenance | | +| conversions.swift:71:25:71:35 | call to sourceInt() | conversions.swift:71:12:71:36 | call to Self.init(exactly:) [some:0] | provenance | | +| conversions.swift:72:12:72:39 | call to Self.init(exactly:) [some:0] | conversions.swift:72:12:72:40 | ...! | provenance | | +| conversions.swift:72:28:72:38 | call to sourceInt() | conversions.swift:72:12:72:39 | call to Self.init(exactly:) [some:0] | provenance | | +| conversions.swift:73:26:73:36 | call to sourceInt() | conversions.swift:73:12:73:37 | call to Self.init(clamping:) | provenance | | +| conversions.swift:74:36:74:46 | call to sourceInt() | conversions.swift:74:12:74:47 | call to Self.init(truncatingIfNeeded:) | provenance | | +| conversions.swift:75:12:75:41 | call to Self.init(_:radix:) [some:0] | conversions.swift:75:12:75:42 | ...! | provenance | | +| conversions.swift:75:16:75:29 | call to sourceString() | conversions.swift:75:12:75:41 | call to Self.init(_:radix:) [some:0] | provenance | | +| conversions.swift:77:30:77:40 | call to sourceInt() | conversions.swift:77:12:77:41 | call to Self.init(littleEndian:) | provenance | | +| conversions.swift:78:27:78:37 | call to sourceInt() | conversions.swift:78:12:78:38 | call to Self.init(bigEndian:) | provenance | | +| conversions.swift:79:12:79:22 | call to sourceInt() | conversions.swift:79:12:79:24 | .littleEndian | provenance | | +| conversions.swift:80:12:80:22 | call to sourceInt() | conversions.swift:80:12:80:24 | .bigEndian | provenance | | +| conversions.swift:109:18:109:30 | call to sourceFloat() | conversions.swift:109:12:109:31 | call to Float.init(_:) | provenance | | +| conversions.swift:110:18:110:30 | call to sourceFloat() | conversions.swift:110:12:110:31 | call to UInt8.init(_:) | provenance | | +| conversions.swift:111:12:111:32 | call to String.init(_:) [Collection element] | conversions.swift:111:12:111:32 | call to String.init(_:) | provenance | | +| conversions.swift:111:19:111:31 | call to sourceFloat() | conversions.swift:111:12:111:32 | call to String.init(_:) | provenance | | +| conversions.swift:111:19:111:31 | call to sourceFloat() | conversions.swift:111:12:111:32 | call to String.init(_:) [Collection element] | provenance | | +| conversions.swift:112:12:112:32 | call to String.init(_:) | conversions.swift:112:12:112:34 | .utf8 | provenance | | +| conversions.swift:112:19:112:31 | call to sourceFloat() | conversions.swift:112:12:112:32 | call to String.init(_:) | provenance | | +| conversions.swift:113:12:113:34 | call to String.init(_:) [Collection element] | conversions.swift:113:12:113:34 | call to String.init(_:) | provenance | | +| conversions.swift:113:19:113:33 | call to sourceFloat80() | conversions.swift:113:12:113:34 | call to String.init(_:) | provenance | | +| conversions.swift:113:19:113:33 | call to sourceFloat80() | conversions.swift:113:12:113:34 | call to String.init(_:) [Collection element] | provenance | | +| conversions.swift:114:12:114:34 | call to String.init(_:) | conversions.swift:114:12:114:36 | .utf8 | provenance | | +| conversions.swift:114:19:114:33 | call to sourceFloat80() | conversions.swift:114:12:114:34 | call to String.init(_:) | provenance | | +| conversions.swift:115:12:115:33 | call to String.init(_:) [Collection element] | conversions.swift:115:12:115:33 | call to String.init(_:) | provenance | | +| conversions.swift:115:19:115:32 | call to sourceDouble() | conversions.swift:115:12:115:33 | call to String.init(_:) | provenance | | +| conversions.swift:115:19:115:32 | call to sourceDouble() | conversions.swift:115:12:115:33 | call to String.init(_:) [Collection element] | provenance | | +| conversions.swift:116:12:116:33 | call to String.init(_:) | conversions.swift:116:12:116:35 | .utf8 | provenance | | +| conversions.swift:116:19:116:32 | call to sourceDouble() | conversions.swift:116:12:116:33 | call to String.init(_:) | provenance | | +| conversions.swift:118:18:118:30 | call to sourceFloat() | conversions.swift:118:12:118:31 | call to Float.init(_:) | provenance | | +| conversions.swift:119:41:119:51 | call to sourceInt() | conversions.swift:119:12:119:70 | call to Float.init(sign:exponent:significand:) | provenance | | +| conversions.swift:120:57:120:69 | call to sourceFloat() | conversions.swift:120:12:120:70 | call to Float.init(sign:exponent:significand:) | provenance | | +| conversions.swift:122:44:122:56 | call to sourceFloat() | conversions.swift:122:12:122:57 | call to Float.init(signOf:magnitudeOf:) | provenance | | +| conversions.swift:124:12:124:24 | call to sourceFloat() | conversions.swift:124:12:124:26 | .exponent | provenance | | +| conversions.swift:125:12:125:24 | call to sourceFloat() | conversions.swift:125:12:125:26 | .significand | provenance | | +| conversions.swift:126:12:126:26 | call to sourceFloat80() | conversions.swift:126:12:126:28 | .exponent | provenance | | +| conversions.swift:127:12:127:26 | call to sourceFloat80() | conversions.swift:127:12:127:28 | .significand | provenance | | +| conversions.swift:128:12:128:25 | call to sourceDouble() | conversions.swift:128:12:128:27 | .exponent | provenance | | +| conversions.swift:129:12:129:25 | call to sourceDouble() | conversions.swift:129:12:129:27 | .significand | provenance | | +| conversions.swift:130:12:130:23 | call to sourceUInt() | conversions.swift:130:12:130:25 | .byteSwapped | provenance | | +| conversions.swift:131:12:131:25 | call to sourceUInt64() | conversions.swift:131:12:131:27 | .byteSwapped | provenance | | +| conversions.swift:136:12:136:33 | call to String.init(_:) [Collection element] | conversions.swift:136:12:136:33 | call to String.init(_:) | provenance | | +| conversions.swift:136:19:136:32 | call to sourceString() | conversions.swift:136:12:136:33 | call to String.init(_:) | provenance | | +| conversions.swift:136:19:136:32 | call to sourceString() | conversions.swift:136:12:136:33 | call to String.init(_:) [Collection element] | provenance | | +| conversions.swift:144:12:144:35 | call to MyString.init(_:) | conversions.swift:144:12:144:35 | call to MyString.init(_:) [some:0] | provenance | | +| conversions.swift:144:12:144:35 | call to MyString.init(_:) | conversions.swift:145:12:145:12 | ms2 | provenance | | +| conversions.swift:144:12:144:35 | call to MyString.init(_:) | conversions.swift:146:12:146:16 | .description | provenance | | +| conversions.swift:144:12:144:35 | call to MyString.init(_:) | conversions.swift:147:12:147:16 | .debugDescription | provenance | | +| conversions.swift:144:12:144:35 | call to MyString.init(_:) [some:0] | conversions.swift:144:12:144:36 | ...! | provenance | | +| conversions.swift:144:12:144:36 | ...! | conversions.swift:145:12:145:12 | ms2 | provenance | | +| conversions.swift:144:12:144:36 | ...! | conversions.swift:146:12:146:16 | .description | provenance | | +| conversions.swift:144:12:144:36 | ...! | conversions.swift:147:12:147:16 | .debugDescription | provenance | | +| conversions.swift:144:21:144:34 | call to sourceString() | conversions.swift:144:12:144:35 | call to MyString.init(_:) | provenance | | +| conversions.swift:152:31:152:44 | call to sourceString() | conversions.swift:153:12:153:12 | parent | provenance | | +| conversions.swift:152:31:152:44 | call to sourceString() | conversions.swift:154:12:154:12 | parent | provenance | | +| conversions.swift:152:31:152:44 | call to sourceString() | conversions.swift:156:40:156:40 | parent | provenance | | +| conversions.swift:156:25:156:69 | call to unsafeDowncast(_:to:) | conversions.swift:157:12:157:12 | v3 | provenance | | +| conversions.swift:156:25:156:69 | call to unsafeDowncast(_:to:) | conversions.swift:158:12:158:12 | v3 | provenance | | +| conversions.swift:156:40:156:40 | parent | conversions.swift:156:25:156:69 | call to unsafeDowncast(_:to:) | provenance | | +| conversions.swift:166:24:166:34 | call to sourceInt() | conversions.swift:166:12:166:35 | call to Self.init(_:) | provenance | | +| conversions.swift:171:14:171:33 | call to sourceArray(_:) | conversions.swift:173:13:173:13 | arr1 | provenance | | +| conversions.swift:171:14:171:33 | call to sourceArray(_:) | conversions.swift:175:13:175:19 | ...[...] | provenance | | +| conversions.swift:171:14:171:33 | call to sourceArray(_:) | conversions.swift:178:25:178:25 | arr1 | provenance | | +| conversions.swift:171:14:171:33 | call to sourceArray(_:) | conversions.swift:185:31:185:31 | arr1 | provenance | | +| conversions.swift:172:14:172:26 | [...] [Collection element] | conversions.swift:174:13:174:13 | arr2 | provenance | | +| conversions.swift:172:14:172:26 | [...] [Collection element] | conversions.swift:176:13:176:13 | arr2 [Collection element] | provenance | | +| conversions.swift:172:14:172:26 | [...] [Collection element] | conversions.swift:176:13:176:19 | ...[...] | provenance | | +| conversions.swift:172:14:172:26 | [...] [Collection element] | conversions.swift:179:25:179:25 | arr2 | provenance | | +| conversions.swift:172:14:172:26 | [...] [Collection element] | conversions.swift:179:25:179:25 | arr2 [Collection element] | provenance | | +| conversions.swift:172:14:172:26 | [...] [Collection element] | conversions.swift:186:31:186:31 | arr2 | provenance | | +| conversions.swift:172:14:172:26 | [...] [Collection element] | conversions.swift:186:31:186:31 | arr2 [Collection element] | provenance | | +| conversions.swift:172:15:172:25 | call to sourceInt() | conversions.swift:172:14:172:26 | [...] [Collection element] | provenance | | +| conversions.swift:176:13:176:13 | arr2 [Collection element] | conversions.swift:176:13:176:19 | ...[...] | provenance | | +| conversions.swift:178:19:178:29 | call to Array.init(_:) [Collection element] | conversions.swift:180:13:180:13 | arr1b | provenance | | +| conversions.swift:178:19:178:29 | call to Array.init(_:) [Collection element] | conversions.swift:182:13:182:13 | arr1b [Collection element] | provenance | | +| conversions.swift:178:19:178:29 | call to Array.init(_:) [Collection element] | conversions.swift:182:13:182:20 | ...[...] | provenance | | +| conversions.swift:178:25:178:25 | arr1 | conversions.swift:178:19:178:29 | call to Array.init(_:) [Collection element] | provenance | | +| conversions.swift:179:19:179:29 | call to Array.init(_:) [Collection element] | conversions.swift:181:13:181:13 | arr2b | provenance | | +| conversions.swift:179:19:179:29 | call to Array.init(_:) [Collection element] | conversions.swift:183:13:183:13 | arr2b [Collection element] | provenance | | +| conversions.swift:179:19:179:29 | call to Array.init(_:) [Collection element] | conversions.swift:183:13:183:20 | ...[...] | provenance | | +| conversions.swift:179:25:179:25 | arr2 | conversions.swift:179:19:179:29 | call to Array.init(_:) [Collection element] | provenance | | +| conversions.swift:179:25:179:25 | arr2 [Collection element] | conversions.swift:179:19:179:29 | call to Array.init(_:) [Collection element] | provenance | | +| conversions.swift:182:13:182:13 | arr1b [Collection element] | conversions.swift:182:13:182:20 | ...[...] | provenance | | +| conversions.swift:183:13:183:13 | arr2b [Collection element] | conversions.swift:183:13:183:20 | ...[...] | provenance | | +| conversions.swift:185:15:185:35 | call to ContiguousArray.init(_:) [Collection element] | conversions.swift:187:13:187:13 | arr1c | provenance | | +| conversions.swift:185:15:185:35 | call to ContiguousArray.init(_:) [Collection element] | conversions.swift:189:13:189:13 | arr1c [Collection element] | provenance | | +| conversions.swift:185:15:185:35 | call to ContiguousArray.init(_:) [Collection element] | conversions.swift:189:13:189:20 | ...[...] | provenance | | +| conversions.swift:185:31:185:31 | arr1 | conversions.swift:185:15:185:35 | call to ContiguousArray.init(_:) [Collection element] | provenance | | +| conversions.swift:186:15:186:35 | call to ContiguousArray.init(_:) [Collection element] | conversions.swift:188:13:188:13 | arr2c | provenance | | +| conversions.swift:186:15:186:35 | call to ContiguousArray.init(_:) [Collection element] | conversions.swift:190:13:190:13 | arr2c [Collection element] | provenance | | +| conversions.swift:186:15:186:35 | call to ContiguousArray.init(_:) [Collection element] | conversions.swift:190:13:190:20 | ...[...] | provenance | | +| conversions.swift:186:31:186:31 | arr2 | conversions.swift:186:15:186:35 | call to ContiguousArray.init(_:) [Collection element] | provenance | | +| conversions.swift:186:31:186:31 | arr2 [Collection element] | conversions.swift:186:15:186:35 | call to ContiguousArray.init(_:) [Collection element] | provenance | | +| conversions.swift:189:13:189:13 | arr1c [Collection element] | conversions.swift:189:13:189:20 | ...[...] | provenance | | +| conversions.swift:190:13:190:13 | arr2c [Collection element] | conversions.swift:190:13:190:20 | ...[...] | 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 | value | file://:0:0:0:0 | [post] self [first] | provenance | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | [post] self [second] | provenance | | +| simple.swift:12:17:12:24 | call to source() | simple.swift:12:13:12:24 | ... .+(_:_:) ... | provenance | | +| simple.swift:13:13:13:20 | call to source() | simple.swift:13:13:13:24 | ... .+(_:_:) ... | provenance | | +| simple.swift:14:17:14:24 | call to source() | simple.swift:14:13:14:24 | ... .-(_:_:) ... | provenance | | +| simple.swift:15:13:15:20 | call to source() | simple.swift:15:13:15:24 | ... .-(_:_:) ... | provenance | | +| simple.swift:16:17:16:24 | call to source() | simple.swift:16:13:16:24 | ... .*(_:_:) ... | provenance | | +| simple.swift:17:13:17:20 | call to source() | simple.swift:17:13:17:24 | ... .*(_:_:) ... | provenance | | +| simple.swift:18:19:18:26 | call to source() | simple.swift:18:13:18:26 | ... ./(_:_:) ... | provenance | | +| simple.swift:19:13:19:20 | call to source() | simple.swift:19:13:19:24 | ... ./(_:_:) ... | provenance | | +| simple.swift:20:19:20:26 | call to source() | simple.swift:20:13:20:26 | ... .%(_:_:) ... | provenance | | +| simple.swift:21:13:21:20 | call to source() | simple.swift:21:13:21:24 | ... .%(_:_:) ... | provenance | | +| simple.swift:23:14:23:21 | call to source() | simple.swift:23:13:23:21 | call to -(_:) | provenance | | +| simple.swift:27:18:27:25 | call to source() | simple.swift:27:13:27:25 | ... .&+(_:_:) ... | provenance | | +| simple.swift:28:13:28:20 | call to source() | simple.swift:28:13:28:25 | ... .&+(_:_:) ... | provenance | | +| simple.swift:29:18:29:25 | call to source() | simple.swift:29:13:29:25 | ... .&-(_:_:) ... | provenance | | +| simple.swift:30:13:30:20 | call to source() | simple.swift:30:13:30:25 | ... .&-(_:_:) ... | provenance | | +| simple.swift:31:18:31:25 | call to source() | simple.swift:31:13:31:25 | ... .&*(_:_:) ... | provenance | | +| simple.swift:32:13:32:20 | call to source() | simple.swift:32:13:32:25 | ... .&*(_:_:) ... | provenance | | +| simple.swift:40:8:40:15 | call to source() | simple.swift:41:13:41:13 | a | provenance | | +| simple.swift:40:8:40:15 | call to source() | simple.swift:43:13:43:13 | a | provenance | | +| simple.swift:48:8:48:15 | call to source() | simple.swift:49:13:49:13 | b | provenance | | +| simple.swift:48:8:48:15 | call to source() | simple.swift:51:13:51:13 | b | provenance | | +| simple.swift:54:8:54:15 | call to source() | simple.swift:55:13:55:13 | c | provenance | | +| simple.swift:54:8:54:15 | call to source() | simple.swift:57:13:57:13 | c | provenance | | +| simple.swift:60:8:60:15 | call to source() | simple.swift:61:13:61:13 | d | provenance | | +| simple.swift:60:8:60:15 | call to source() | simple.swift:63:13:63:13 | d | provenance | | +| simple.swift:66:8:66:15 | call to source() | simple.swift:67:13:67:13 | e | provenance | | +| simple.swift:66:8:66:15 | call to source() | simple.swift:69:13:69:13 | e | provenance | | +| simple.swift:73:17:73:24 | call to source() | simple.swift:73:13:73:24 | ... .\|(_:_:) ... | provenance | | +| simple.swift:74:13:74:20 | call to source() | simple.swift:74:13:74:24 | ... .\|(_:_:) ... | provenance | | +| simple.swift:76:22:76:29 | call to source() | simple.swift:76:13:76:29 | ... .&(_:_:) ... | provenance | | +| simple.swift:77:13:77:20 | call to source() | simple.swift:77:13:77:24 | ... .&(_:_:) ... | provenance | | +| simple.swift:79:22:79:29 | call to source() | simple.swift:79:13:79:29 | ... .^(_:_:) ... | provenance | | +| simple.swift:80:13:80:20 | call to source() | simple.swift:80:13:80:24 | ... .^(_:_:) ... | provenance | | +| simple.swift:82:13:82:20 | call to source() | simple.swift:82:13:82:25 | ... .<<(_:_:) ... | provenance | | +| simple.swift:83:13:83:20 | call to source() | simple.swift:83:13:83:26 | ... .&<<(_:_:) ... | provenance | | +| simple.swift:84:13:84:20 | call to source() | simple.swift:84:13:84:25 | ... .>>(_:_:) ... | provenance | | +| simple.swift:85:13:85:20 | call to source() | simple.swift:85:13:85:26 | ... .&>>(_:_:) ... | provenance | | +| simple.swift:87:14:87:21 | call to source() | simple.swift:87:13:87:21 | call to ~(_:) | provenance | | +| stringinterpolation.swift:6:6:6:6 | self [first] | file://:0:0:0:0 | self [first] | provenance | | +| stringinterpolation.swift:6:6:6:6 | value | file://:0:0:0:0 | value | provenance | | +| stringinterpolation.swift:7:6:7:6 | self [second] | file://:0:0:0:0 | self [second] | provenance | | +| stringinterpolation.swift:7:6:7:6 | value | file://:0:0:0:0 | value | provenance | | +| stringinterpolation.swift:11:36:11:44 | pair [first] | stringinterpolation.swift:13:36:13:36 | pair [first] | provenance | | +| stringinterpolation.swift:13:3:13:3 | [post] self | stringinterpolation.swift:11:11:14:2 | self[return] | provenance | | +| 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:13:3:13:3 | [post] self | 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 | | +| stringinterpolation.swift:20:2:20:2 | p1 [first] | stringinterpolation.swift:22:21:22:21 | p1 [first] | provenance | | +| stringinterpolation.swift:20:2:20:2 | p1 [first] | stringinterpolation.swift:24:21:24:21 | p1 [first] | provenance | | +| stringinterpolation.swift:22:21:22:21 | p1 [first] | stringinterpolation.swift:6:6:6:6 | self [first] | provenance | | +| stringinterpolation.swift:22:21:22:21 | p1 [first] | stringinterpolation.swift:22:21:22:24 | .first | provenance | | +| stringinterpolation.swift:22:21:22:24 | .first | stringinterpolation.swift:22:12:22:12 | "..." | provenance | | +| stringinterpolation.swift:24:20:24:20 | [post] $interpolation | stringinterpolation.swift:24:12:24:12 | "..." | provenance | | +| stringinterpolation.swift:24:21:24:21 | p1 [first] | stringinterpolation.swift:11:36:11:44 | pair [first] | provenance | | +| stringinterpolation.swift:24:21:24:21 | p1 [first] | stringinterpolation.swift:24:20:24:20 | [post] $interpolation | provenance | | +| stringinterpolation.swift:28:2:28:2 | [post] p2 [second] | stringinterpolation.swift:31:21:31:21 | p2 [second] | provenance | | +| stringinterpolation.swift:28:14:28:21 | call to source() | stringinterpolation.swift:7:6:7:6 | value | provenance | | +| stringinterpolation.swift:28:14:28:21 | call to source() | stringinterpolation.swift:28:2:28:2 | [post] p2 [second] | provenance | | +| stringinterpolation.swift:31:21:31:21 | p2 [second] | stringinterpolation.swift:7:6:7:6 | self [second] | provenance | | +| stringinterpolation.swift:31:21:31:21 | p2 [second] | stringinterpolation.swift:31:21:31:24 | .second | provenance | | +| stringinterpolation.swift:31:21:31:24 | .second | stringinterpolation.swift:31:12:31:12 | "..." | provenance | | +| stringinterpolation.swift:36:10:36:17 | call to source() | stringinterpolation.swift:40:12:40:12 | "..." | provenance | | +| stringinterpolation.swift:36:10:36:17 | call to source() | stringinterpolation.swift:41:12:41:12 | "..." | provenance | | +| stringinterpolation.swift:36:10:36:17 | call to source() | stringinterpolation.swift:42:12:42:12 | "..." | provenance | | +| subscript.swift:13:15:13:22 | call to source() | subscript.swift:13:15:13:25 | ...[...] | provenance | | +| subscript.swift:14:15:14:23 | call to source2() | subscript.swift:14:15:14:26 | ...[...] | provenance | | +| try.swift:9:17:9:24 | call to source() | try.swift:9:13:9:24 | try ... | provenance | | +| try.swift:15:17:15:24 | call to source() | try.swift:15:12:15:24 | try! ... | provenance | | +| try.swift:18:13:18:25 | try? ... [some:0] | try.swift:18:12:18:27 | ...! | provenance | | +| try.swift:18:18:18:25 | call to source() | try.swift:18:12:18:27 | ...! | provenance | | +| try.swift:18:18:18:25 | call to source() | try.swift:18:18:18:25 | call to source() [some:0] | provenance | | +| try.swift:18:18:18:25 | call to source() [some:0] | try.swift:18:13:18:25 | try? ... [some:0] | provenance | | nodes | conversions.swift:32:12:32:22 | call to sourceInt() | semmle.label | call to sourceInt() | | conversions.swift:33:12:33:27 | call to Self.init(_:) | semmle.label | call to Self.init(_:) | diff --git a/swift/ql/test/query-tests/Security/CWE-078/CommandInjection.expected b/swift/ql/test/query-tests/Security/CWE-078/CommandInjection.expected index b6c8f60bbc1..9f783f1ea66 100644 --- a/swift/ql/test/query-tests/Security/CWE-078/CommandInjection.expected +++ b/swift/ql/test/query-tests/Security/CWE-078/CommandInjection.expected @@ -1,184 +1,184 @@ edges -| CommandInjection.swift:58:22:58:33 | command | CommandInjection.swift:62:16:62:16 | command | -| CommandInjection.swift:58:22:58:33 | command [some:0] | CommandInjection.swift:62:16:62:16 | command [some:0] | -| CommandInjection.swift:62:16:62:16 | command | CommandInjection.swift:62:16:62:16 | command [some:0] | -| CommandInjection.swift:69:8:69:12 | let ...? [some:0, some:0] | CommandInjection.swift:69:12:69:12 | userControlledString [some:0] | -| CommandInjection.swift:69:8:69:12 | let ...? [some:0] | CommandInjection.swift:69:12:69:12 | userControlledString | -| CommandInjection.swift:69:12:69:12 | userControlledString | CommandInjection.swift:75:27:75:27 | userControlledString | -| CommandInjection.swift:69:12:69:12 | userControlledString | CommandInjection.swift:78:43:78:43 | userControlledString | -| CommandInjection.swift:69:12:69:12 | userControlledString [some:0] | CommandInjection.swift:78:43:78:43 | userControlledString [some:0] | -| CommandInjection.swift:69:40:69:94 | call to String.init(contentsOf:) | CommandInjection.swift:69:40:69:94 | call to String.init(contentsOf:) [some:0] | -| CommandInjection.swift:69:40:69:94 | call to String.init(contentsOf:) | CommandInjection.swift:75:27:75:27 | userControlledString | -| CommandInjection.swift:69:40:69:94 | call to String.init(contentsOf:) | CommandInjection.swift:78:43:78:43 | userControlledString | -| CommandInjection.swift:69:40:69:94 | call to String.init(contentsOf:) [some:0, some:0] | CommandInjection.swift:69:8:69:12 | let ...? [some:0, some:0] | -| CommandInjection.swift:69:40:69:94 | call to String.init(contentsOf:) [some:0] | CommandInjection.swift:69:8:69:12 | let ...? [some:0] | -| CommandInjection.swift:69:40:69:94 | call to String.init(contentsOf:) [some:0] | CommandInjection.swift:69:40:69:94 | call to String.init(contentsOf:) [some:0, some:0] | -| CommandInjection.swift:69:40:69:94 | call to String.init(contentsOf:) [some:0] | CommandInjection.swift:78:43:78:43 | userControlledString [some:0] | -| CommandInjection.swift:75:2:75:2 | [post] task1 [arguments, Collection element] | CommandInjection.swift:75:2:75:2 | [post] task1 | -| CommandInjection.swift:75:20:75:47 | [...] [Collection element] | CommandInjection.swift:75:2:75:2 | [post] task1 [arguments, Collection element] | -| CommandInjection.swift:75:27:75:27 | userControlledString | CommandInjection.swift:75:20:75:47 | [...] [Collection element] | -| CommandInjection.swift:78:5:78:9 | let ...? [some:0] | CommandInjection.swift:78:9:78:9 | validatedString | -| CommandInjection.swift:78:9:78:9 | validatedString | CommandInjection.swift:81:31:81:31 | validatedString | -| CommandInjection.swift:78:27:78:63 | call to validateCommand(_:) | CommandInjection.swift:81:31:81:31 | validatedString | -| CommandInjection.swift:78:27:78:63 | call to validateCommand(_:) [some:0] | CommandInjection.swift:78:5:78:9 | let ...? [some:0] | -| CommandInjection.swift:78:43:78:43 | userControlledString | CommandInjection.swift:58:22:58:33 | command | -| CommandInjection.swift:78:43:78:43 | userControlledString | CommandInjection.swift:78:27:78:63 | call to validateCommand(_:) | -| CommandInjection.swift:78:43:78:43 | userControlledString | CommandInjection.swift:78:27:78:63 | call to validateCommand(_:) [some:0] | -| CommandInjection.swift:78:43:78:43 | userControlledString [some:0] | CommandInjection.swift:58:22:58:33 | command [some:0] | -| CommandInjection.swift:78:43:78:43 | userControlledString [some:0] | CommandInjection.swift:78:27:78:63 | call to validateCommand(_:) [some:0] | -| CommandInjection.swift:81:6:81:6 | [post] task2 [arguments, Collection element] | CommandInjection.swift:81:6:81:6 | [post] task2 | -| CommandInjection.swift:81:24:81:46 | [...] [Collection element] | CommandInjection.swift:81:6:81:6 | [post] task2 [arguments, Collection element] | -| CommandInjection.swift:81:31:81:31 | validatedString | CommandInjection.swift:81:24:81:46 | [...] [Collection element] | -| CommandInjection.swift:93:20:93:40 | arguments [Collection element] | CommandInjection.swift:94:20:94:20 | arguments [Collection element] | -| CommandInjection.swift:94:3:94:3 | [post] self [arguments, Collection element] | CommandInjection.swift:94:3:94:3 | [post] self | -| CommandInjection.swift:94:20:94:20 | arguments [Collection element] | CommandInjection.swift:94:3:94:3 | [post] self [arguments, Collection element] | -| CommandInjection.swift:99:8:99:12 | let ...? [some:0] | CommandInjection.swift:99:12:99:12 | userControlledString | -| CommandInjection.swift:99:12:99:12 | userControlledString | CommandInjection.swift:114:36:114:36 | userControlledString | -| CommandInjection.swift:99:12:99:12 | userControlledString | CommandInjection.swift:115:28:115:28 | userControlledString | -| CommandInjection.swift:99:12:99:12 | userControlledString | CommandInjection.swift:119:45:119:45 | userControlledString | -| CommandInjection.swift:99:12:99:12 | userControlledString | CommandInjection.swift:120:36:120:36 | userControlledString | -| CommandInjection.swift:99:12:99:12 | userControlledString | CommandInjection.swift:121:28:121:36 | ... .+(_:_:) ... | -| CommandInjection.swift:99:12:99:12 | userControlledString | CommandInjection.swift:125:46:125:46 | userControlledString | -| CommandInjection.swift:99:12:99:12 | userControlledString | CommandInjection.swift:126:22:126:22 | userControlledString | -| CommandInjection.swift:99:12:99:12 | userControlledString | CommandInjection.swift:130:45:130:45 | userControlledString | -| CommandInjection.swift:99:12:99:12 | userControlledString | CommandInjection.swift:131:36:131:36 | userControlledString | -| CommandInjection.swift:99:12:99:12 | userControlledString | CommandInjection.swift:132:21:132:21 | userControlledString | -| CommandInjection.swift:99:12:99:12 | userControlledString | CommandInjection.swift:133:22:133:22 | userControlledString | -| CommandInjection.swift:99:12:99:12 | userControlledString | CommandInjection.swift:134:24:134:24 | userControlledString | -| CommandInjection.swift:99:12:99:12 | userControlledString | CommandInjection.swift:144:42:144:42 | userControlledString | -| CommandInjection.swift:99:12:99:12 | userControlledString | CommandInjection.swift:145:75:145:75 | userControlledString | -| CommandInjection.swift:99:12:99:12 | userControlledString | CommandInjection.swift:148:35:148:35 | userControlledString | -| CommandInjection.swift:99:12:99:12 | userControlledString | CommandInjection.swift:149:70:149:70 | userControlledString | -| CommandInjection.swift:99:12:99:12 | userControlledString | CommandInjection.swift:154:53:154:53 | userControlledString | -| CommandInjection.swift:99:12:99:12 | userControlledString | CommandInjection.swift:157:52:157:52 | userControlledString | -| CommandInjection.swift:99:12:99:12 | userControlledString | CommandInjection.swift:158:33:158:33 | userControlledString | -| CommandInjection.swift:99:12:99:12 | userControlledString | CommandInjection.swift:160:57:160:57 | userControlledString | -| CommandInjection.swift:99:40:99:94 | call to String.init(contentsOf:) | CommandInjection.swift:99:40:99:94 | call to String.init(contentsOf:) [some:0] | -| CommandInjection.swift:99:40:99:94 | call to String.init(contentsOf:) | CommandInjection.swift:114:36:114:36 | userControlledString | -| CommandInjection.swift:99:40:99:94 | call to String.init(contentsOf:) | CommandInjection.swift:115:28:115:28 | userControlledString | -| CommandInjection.swift:99:40:99:94 | call to String.init(contentsOf:) | CommandInjection.swift:119:45:119:45 | userControlledString | -| CommandInjection.swift:99:40:99:94 | call to String.init(contentsOf:) | CommandInjection.swift:120:36:120:36 | userControlledString | -| CommandInjection.swift:99:40:99:94 | call to String.init(contentsOf:) | CommandInjection.swift:121:28:121:36 | ... .+(_:_:) ... | -| CommandInjection.swift:99:40:99:94 | call to String.init(contentsOf:) | CommandInjection.swift:125:46:125:46 | userControlledString | -| CommandInjection.swift:99:40:99:94 | call to String.init(contentsOf:) | CommandInjection.swift:126:22:126:22 | userControlledString | -| CommandInjection.swift:99:40:99:94 | call to String.init(contentsOf:) | CommandInjection.swift:130:45:130:45 | userControlledString | -| CommandInjection.swift:99:40:99:94 | call to String.init(contentsOf:) | CommandInjection.swift:131:36:131:36 | userControlledString | -| CommandInjection.swift:99:40:99:94 | call to String.init(contentsOf:) | CommandInjection.swift:132:21:132:21 | userControlledString | -| CommandInjection.swift:99:40:99:94 | call to String.init(contentsOf:) | CommandInjection.swift:133:22:133:22 | userControlledString | -| CommandInjection.swift:99:40:99:94 | call to String.init(contentsOf:) | CommandInjection.swift:134:24:134:24 | userControlledString | -| CommandInjection.swift:99:40:99:94 | call to String.init(contentsOf:) | CommandInjection.swift:144:42:144:42 | userControlledString | -| CommandInjection.swift:99:40:99:94 | call to String.init(contentsOf:) | CommandInjection.swift:145:75:145:75 | userControlledString | -| CommandInjection.swift:99:40:99:94 | call to String.init(contentsOf:) | CommandInjection.swift:148:35:148:35 | userControlledString | -| CommandInjection.swift:99:40:99:94 | call to String.init(contentsOf:) | CommandInjection.swift:149:70:149:70 | userControlledString | -| CommandInjection.swift:99:40:99:94 | call to String.init(contentsOf:) | CommandInjection.swift:154:53:154:53 | userControlledString | -| CommandInjection.swift:99:40:99:94 | call to String.init(contentsOf:) | CommandInjection.swift:157:52:157:52 | userControlledString | -| CommandInjection.swift:99:40:99:94 | call to String.init(contentsOf:) | CommandInjection.swift:158:33:158:33 | userControlledString | -| CommandInjection.swift:99:40:99:94 | call to String.init(contentsOf:) | CommandInjection.swift:160:57:160:57 | userControlledString | -| CommandInjection.swift:99:40:99:94 | call to String.init(contentsOf:) [some:0] | CommandInjection.swift:99:8:99:12 | let ...? [some:0] | -| CommandInjection.swift:114:2:114:2 | [post] task3 [executableURL] | CommandInjection.swift:114:2:114:2 | [post] task3 | -| CommandInjection.swift:114:24:114:56 | call to URL.init(string:) [some:0] | CommandInjection.swift:114:24:114:57 | ...! | -| CommandInjection.swift:114:24:114:57 | ...! | CommandInjection.swift:114:2:114:2 | [post] task3 [executableURL] | -| CommandInjection.swift:114:36:114:36 | userControlledString | CommandInjection.swift:114:24:114:56 | call to URL.init(string:) [some:0] | -| CommandInjection.swift:115:2:115:2 | [post] task3 [arguments, Collection element] | CommandInjection.swift:115:2:115:2 | [post] task3 | -| CommandInjection.swift:115:20:115:48 | [...] [Collection element] | CommandInjection.swift:115:2:115:2 | [post] task3 [arguments, Collection element] | -| CommandInjection.swift:115:28:115:28 | userControlledString | CommandInjection.swift:115:20:115:48 | [...] [Collection element] | -| CommandInjection.swift:119:2:119:2 | [post] task4 [executableURL] | CommandInjection.swift:119:2:119:2 | [post] task4 | -| CommandInjection.swift:119:24:119:65 | call to URL.init(fileURLWithPath:) | CommandInjection.swift:119:2:119:2 | [post] task4 [executableURL] | -| CommandInjection.swift:119:45:119:45 | userControlledString | CommandInjection.swift:119:24:119:65 | call to URL.init(fileURLWithPath:) | -| CommandInjection.swift:120:2:120:2 | [post] task4 [executableURL] | CommandInjection.swift:120:2:120:2 | [post] task4 | -| CommandInjection.swift:120:24:120:56 | call to URL.init(string:) [some:0] | CommandInjection.swift:120:24:120:57 | ...! | -| CommandInjection.swift:120:24:120:57 | ...! | CommandInjection.swift:120:2:120:2 | [post] task4 [executableURL] | -| CommandInjection.swift:120:36:120:36 | userControlledString | CommandInjection.swift:120:24:120:56 | call to URL.init(string:) [some:0] | -| CommandInjection.swift:121:2:121:2 | [post] task4 [arguments, Collection element] | CommandInjection.swift:121:2:121:2 | [post] task4 | -| CommandInjection.swift:121:20:121:56 | [...] [Collection element] | CommandInjection.swift:121:2:121:2 | [post] task4 [arguments, Collection element] | -| CommandInjection.swift:121:28:121:36 | ... .+(_:_:) ... | CommandInjection.swift:121:20:121:56 | [...] [Collection element] | -| CommandInjection.swift:125:2:125:7 | [post] ...? [executableURL] | CommandInjection.swift:125:2:125:7 | [post] ...? | -| CommandInjection.swift:125:25:125:66 | call to URL.init(fileURLWithPath:) | CommandInjection.swift:125:2:125:7 | [post] ...? [executableURL] | -| CommandInjection.swift:125:46:125:46 | userControlledString | CommandInjection.swift:125:25:125:66 | call to URL.init(fileURLWithPath:) | -| CommandInjection.swift:126:2:126:7 | [post] ...? [arguments, Collection element] | CommandInjection.swift:126:2:126:7 | [post] ...? | -| CommandInjection.swift:126:21:126:42 | [...] [Collection element] | CommandInjection.swift:126:2:126:7 | [post] ...? [arguments, Collection element] | -| CommandInjection.swift:126:22:126:22 | userControlledString | CommandInjection.swift:126:21:126:42 | [...] [Collection element] | -| CommandInjection.swift:130:2:130:2 | [post] task6 [executableURL] | CommandInjection.swift:130:2:130:2 | [post] task6 | -| CommandInjection.swift:130:24:130:65 | call to URL.init(fileURLWithPath:) | CommandInjection.swift:130:2:130:2 | [post] task6 [executableURL] | -| CommandInjection.swift:130:45:130:45 | userControlledString | CommandInjection.swift:130:24:130:65 | call to URL.init(fileURLWithPath:) | -| CommandInjection.swift:131:2:131:2 | [post] task6 [executableURL] | CommandInjection.swift:131:2:131:2 | [post] task6 | -| CommandInjection.swift:131:24:131:56 | call to URL.init(string:) [some:0] | CommandInjection.swift:131:24:131:57 | ...! | -| CommandInjection.swift:131:24:131:57 | ...! | CommandInjection.swift:131:2:131:2 | [post] task6 [executableURL] | -| CommandInjection.swift:131:36:131:36 | userControlledString | CommandInjection.swift:131:24:131:56 | call to URL.init(string:) [some:0] | -| CommandInjection.swift:132:2:132:2 | [post] task6 [arguments, Collection element] | CommandInjection.swift:132:2:132:2 | [post] task6 | -| CommandInjection.swift:132:20:132:41 | [...] [Collection element] | CommandInjection.swift:132:2:132:2 | [post] task6 [arguments, Collection element] | -| CommandInjection.swift:132:21:132:21 | userControlledString | CommandInjection.swift:132:20:132:41 | [...] [Collection element] | -| CommandInjection.swift:133:21:133:42 | [...] [Collection element] | CommandInjection.swift:93:20:93:40 | arguments [Collection element] | -| CommandInjection.swift:133:22:133:22 | userControlledString | CommandInjection.swift:133:21:133:42 | [...] [Collection element] | -| CommandInjection.swift:134:24:134:24 | userControlledString | CommandInjection.swift:144:42:144:42 | userControlledString | -| CommandInjection.swift:134:24:134:24 | userControlledString | CommandInjection.swift:145:75:145:75 | userControlledString | -| CommandInjection.swift:134:24:134:24 | userControlledString | CommandInjection.swift:148:35:148:35 | userControlledString | -| CommandInjection.swift:134:24:134:24 | userControlledString | CommandInjection.swift:149:70:149:70 | userControlledString | -| CommandInjection.swift:134:24:134:24 | userControlledString | CommandInjection.swift:154:53:154:53 | userControlledString | -| CommandInjection.swift:134:24:134:24 | userControlledString | CommandInjection.swift:157:52:157:52 | userControlledString | -| CommandInjection.swift:134:24:134:24 | userControlledString | CommandInjection.swift:158:33:158:33 | userControlledString | -| CommandInjection.swift:134:24:134:24 | userControlledString | CommandInjection.swift:160:57:160:57 | userControlledString | -| CommandInjection.swift:145:67:145:95 | [...] [Collection element] | CommandInjection.swift:145:67:145:95 | [...] | -| CommandInjection.swift:145:75:145:75 | userControlledString | CommandInjection.swift:145:67:145:95 | [...] [Collection element] | -| CommandInjection.swift:148:23:148:55 | call to URL.init(string:) [some:0] | CommandInjection.swift:148:23:148:56 | ...! | -| CommandInjection.swift:148:35:148:35 | userControlledString | CommandInjection.swift:148:23:148:55 | call to URL.init(string:) [some:0] | -| CommandInjection.swift:149:62:149:90 | [...] [Collection element] | CommandInjection.swift:149:62:149:90 | [...] | -| CommandInjection.swift:149:70:149:70 | userControlledString | CommandInjection.swift:149:62:149:90 | [...] [Collection element] | -| CommandInjection.swift:154:41:154:73 | call to URL.init(string:) [some:0] | CommandInjection.swift:154:41:154:74 | ...! | -| CommandInjection.swift:154:53:154:53 | userControlledString | CommandInjection.swift:154:41:154:73 | call to URL.init(string:) [some:0] | -| CommandInjection.swift:157:40:157:72 | call to URL.init(string:) [some:0] | CommandInjection.swift:157:40:157:73 | ...! | -| CommandInjection.swift:157:40:157:72 | call to URL.init(string:) [some:0] | CommandInjection.swift:157:40:157:73 | ...! | -| CommandInjection.swift:157:40:157:73 | ...! | file://:0:0:0:0 | url | -| CommandInjection.swift:157:52:157:52 | userControlledString | CommandInjection.swift:157:40:157:72 | call to URL.init(string:) [some:0] | -| CommandInjection.swift:158:32:158:53 | [...] [Collection element] | CommandInjection.swift:158:32:158:53 | [...] | -| CommandInjection.swift:158:33:158:33 | userControlledString | CommandInjection.swift:158:32:158:53 | [...] [Collection element] | -| CommandInjection.swift:160:45:160:77 | call to URL.init(string:) [some:0] | CommandInjection.swift:160:45:160:78 | ...! | -| CommandInjection.swift:160:45:160:77 | call to URL.init(string:) [some:0] | CommandInjection.swift:160:45:160:78 | ...! | -| CommandInjection.swift:160:45:160:78 | ...! | file://:0:0:0:0 | url | -| CommandInjection.swift:160:57:160:57 | userControlledString | CommandInjection.swift:160:45:160:77 | call to URL.init(string:) [some:0] | -| CommandInjection.swift:174:3:174:3 | newValue [Collection element] | CommandInjection.swift:175:19:175:19 | newValue [Collection element] | -| CommandInjection.swift:174:3:174:3 | newValue [Collection element] | CommandInjection.swift:176:20:176:20 | newValue [Collection element] | -| CommandInjection.swift:174:3:174:3 | newValue [Collection element] | CommandInjection.swift:177:19:177:19 | newValue [Collection element] | -| CommandInjection.swift:175:4:175:4 | [post] getter for .p1 [arguments, Collection element] | CommandInjection.swift:175:4:175:4 | [post] getter for .p1 | -| CommandInjection.swift:175:19:175:19 | newValue [Collection element] | CommandInjection.swift:175:4:175:4 | [post] getter for .p1 [arguments, Collection element] | -| CommandInjection.swift:176:4:176:6 | [post] ...! [arguments, Collection element] | CommandInjection.swift:176:4:176:6 | [post] ...! | -| CommandInjection.swift:176:20:176:20 | newValue [Collection element] | CommandInjection.swift:176:4:176:6 | [post] ...! [arguments, Collection element] | -| CommandInjection.swift:177:4:177:4 | [post] ...! [arguments, Collection element] | CommandInjection.swift:177:4:177:4 | [post] ...! | -| CommandInjection.swift:177:19:177:19 | newValue [Collection element] | CommandInjection.swift:177:4:177:4 | [post] ...! [arguments, Collection element] | -| CommandInjection.swift:182:9:182:13 | let ...? [some:0] | CommandInjection.swift:182:13:182:13 | userControlledString | -| CommandInjection.swift:182:13:182:13 | userControlledString | CommandInjection.swift:186:19:186:19 | userControlledString | -| CommandInjection.swift:182:13:182:13 | userControlledString | CommandInjection.swift:192:31:192:31 | userControlledString | -| CommandInjection.swift:182:41:182:95 | call to String.init(contentsOf:) | CommandInjection.swift:182:41:182:95 | call to String.init(contentsOf:) [some:0] | -| CommandInjection.swift:182:41:182:95 | call to String.init(contentsOf:) | CommandInjection.swift:186:19:186:19 | userControlledString | -| CommandInjection.swift:182:41:182:95 | call to String.init(contentsOf:) | CommandInjection.swift:192:31:192:31 | userControlledString | -| CommandInjection.swift:182:41:182:95 | call to String.init(contentsOf:) [some:0] | CommandInjection.swift:182:9:182:13 | let ...? [some:0] | -| CommandInjection.swift:186:18:186:39 | [...] [Collection element] | CommandInjection.swift:188:18:188:18 | tainted1 [Collection element] | -| CommandInjection.swift:186:18:186:39 | [...] [Collection element] | CommandInjection.swift:189:19:189:19 | tainted1 [Collection element] | -| CommandInjection.swift:186:18:186:39 | [...] [Collection element] | CommandInjection.swift:190:18:190:18 | tainted1 [Collection element] | -| CommandInjection.swift:186:19:186:19 | userControlledString | CommandInjection.swift:186:18:186:39 | [...] [Collection element] | -| CommandInjection.swift:188:3:188:3 | [post] getter for .p1 [arguments, Collection element] | CommandInjection.swift:188:3:188:3 | [post] getter for .p1 | -| CommandInjection.swift:188:18:188:18 | tainted1 [Collection element] | CommandInjection.swift:188:3:188:3 | [post] getter for .p1 [arguments, Collection element] | -| CommandInjection.swift:188:18:188:18 | tainted1 [Collection element] | CommandInjection.swift:189:19:189:19 | tainted1 [Collection element] | -| CommandInjection.swift:188:18:188:18 | tainted1 [Collection element] | CommandInjection.swift:190:18:190:18 | tainted1 [Collection element] | -| CommandInjection.swift:189:3:189:5 | [post] ...! [arguments, Collection element] | CommandInjection.swift:189:3:189:5 | [post] ...! | -| CommandInjection.swift:189:19:189:19 | tainted1 [Collection element] | CommandInjection.swift:189:3:189:5 | [post] ...! [arguments, Collection element] | -| CommandInjection.swift:189:19:189:19 | tainted1 [Collection element] | CommandInjection.swift:190:18:190:18 | tainted1 [Collection element] | -| CommandInjection.swift:190:3:190:3 | [post] ...! [arguments, Collection element] | CommandInjection.swift:190:3:190:3 | [post] ...! | -| CommandInjection.swift:190:18:190:18 | tainted1 [Collection element] | CommandInjection.swift:190:3:190:3 | [post] ...! [arguments, Collection element] | -| CommandInjection.swift:192:30:192:51 | [...] [Collection element] | CommandInjection.swift:194:18:194:18 | tainted2 [Collection element] | -| CommandInjection.swift:192:30:192:51 | [...] [Collection element] | CommandInjection.swift:195:19:195:19 | tainted2 [Collection element] | -| CommandInjection.swift:192:30:192:51 | [...] [Collection element] | CommandInjection.swift:196:18:196:18 | tainted2 [Collection element] | -| CommandInjection.swift:192:30:192:51 | [...] [Collection element] | CommandInjection.swift:198:13:198:13 | tainted2 [Collection element] | -| CommandInjection.swift:192:31:192:31 | userControlledString | CommandInjection.swift:192:30:192:51 | [...] [Collection element] | -| CommandInjection.swift:194:3:194:3 | [post] getter for .p1 [arguments, Collection element] | CommandInjection.swift:194:3:194:3 | [post] getter for .p1 | -| CommandInjection.swift:194:18:194:18 | tainted2 [Collection element] | CommandInjection.swift:194:3:194:3 | [post] getter for .p1 [arguments, Collection element] | -| CommandInjection.swift:195:3:195:5 | [post] ...! [arguments, Collection element] | CommandInjection.swift:195:3:195:5 | [post] ...! | -| CommandInjection.swift:195:19:195:19 | tainted2 [Collection element] | CommandInjection.swift:195:3:195:5 | [post] ...! [arguments, Collection element] | -| CommandInjection.swift:196:3:196:3 | [post] ...! [arguments, Collection element] | CommandInjection.swift:196:3:196:3 | [post] ...! | -| CommandInjection.swift:196:18:196:18 | tainted2 [Collection element] | CommandInjection.swift:196:3:196:3 | [post] ...! [arguments, Collection element] | -| CommandInjection.swift:198:13:198:13 | tainted2 [Collection element] | CommandInjection.swift:174:3:174:3 | newValue [Collection element] | -| file://:0:0:0:0 | url | file://:0:0:0:0 | url | -| file://:0:0:0:0 | url | file://:0:0:0:0 | url | +| CommandInjection.swift:58:22:58:33 | command | CommandInjection.swift:62:16:62:16 | command | provenance | | +| CommandInjection.swift:58:22:58:33 | command [some:0] | CommandInjection.swift:62:16:62:16 | command [some:0] | provenance | | +| CommandInjection.swift:62:16:62:16 | command | CommandInjection.swift:62:16:62:16 | command [some:0] | provenance | | +| CommandInjection.swift:69:8:69:12 | let ...? [some:0, some:0] | CommandInjection.swift:69:12:69:12 | userControlledString [some:0] | provenance | | +| CommandInjection.swift:69:8:69:12 | let ...? [some:0] | CommandInjection.swift:69:12:69:12 | userControlledString | provenance | | +| CommandInjection.swift:69:12:69:12 | userControlledString | CommandInjection.swift:75:27:75:27 | userControlledString | provenance | | +| CommandInjection.swift:69:12:69:12 | userControlledString | CommandInjection.swift:78:43:78:43 | userControlledString | provenance | | +| CommandInjection.swift:69:12:69:12 | userControlledString [some:0] | CommandInjection.swift:78:43:78:43 | userControlledString [some:0] | provenance | | +| CommandInjection.swift:69:40:69:94 | call to String.init(contentsOf:) | CommandInjection.swift:69:40:69:94 | call to String.init(contentsOf:) [some:0] | provenance | | +| CommandInjection.swift:69:40:69:94 | call to String.init(contentsOf:) | CommandInjection.swift:75:27:75:27 | userControlledString | provenance | | +| CommandInjection.swift:69:40:69:94 | call to String.init(contentsOf:) | CommandInjection.swift:78:43:78:43 | userControlledString | provenance | | +| CommandInjection.swift:69:40:69:94 | call to String.init(contentsOf:) [some:0, some:0] | CommandInjection.swift:69:8:69:12 | let ...? [some:0, some:0] | provenance | | +| CommandInjection.swift:69:40:69:94 | call to String.init(contentsOf:) [some:0] | CommandInjection.swift:69:8:69:12 | let ...? [some:0] | provenance | | +| CommandInjection.swift:69:40:69:94 | call to String.init(contentsOf:) [some:0] | CommandInjection.swift:69:40:69:94 | call to String.init(contentsOf:) [some:0, some:0] | provenance | | +| CommandInjection.swift:69:40:69:94 | call to String.init(contentsOf:) [some:0] | CommandInjection.swift:78:43:78:43 | userControlledString [some:0] | provenance | | +| CommandInjection.swift:75:2:75:2 | [post] task1 [arguments, Collection element] | CommandInjection.swift:75:2:75:2 | [post] task1 | provenance | | +| CommandInjection.swift:75:20:75:47 | [...] [Collection element] | CommandInjection.swift:75:2:75:2 | [post] task1 [arguments, Collection element] | provenance | | +| CommandInjection.swift:75:27:75:27 | userControlledString | CommandInjection.swift:75:20:75:47 | [...] [Collection element] | provenance | | +| CommandInjection.swift:78:5:78:9 | let ...? [some:0] | CommandInjection.swift:78:9:78:9 | validatedString | provenance | | +| CommandInjection.swift:78:9:78:9 | validatedString | CommandInjection.swift:81:31:81:31 | validatedString | provenance | | +| CommandInjection.swift:78:27:78:63 | call to validateCommand(_:) | CommandInjection.swift:81:31:81:31 | validatedString | provenance | | +| CommandInjection.swift:78:27:78:63 | call to validateCommand(_:) [some:0] | CommandInjection.swift:78:5:78:9 | let ...? [some:0] | provenance | | +| CommandInjection.swift:78:43:78:43 | userControlledString | CommandInjection.swift:58:22:58:33 | command | provenance | | +| CommandInjection.swift:78:43:78:43 | userControlledString | CommandInjection.swift:78:27:78:63 | call to validateCommand(_:) | provenance | | +| CommandInjection.swift:78:43:78:43 | userControlledString | CommandInjection.swift:78:27:78:63 | call to validateCommand(_:) [some:0] | provenance | | +| CommandInjection.swift:78:43:78:43 | userControlledString [some:0] | CommandInjection.swift:58:22:58:33 | command [some:0] | provenance | | +| CommandInjection.swift:78:43:78:43 | userControlledString [some:0] | CommandInjection.swift:78:27:78:63 | call to validateCommand(_:) [some:0] | provenance | | +| CommandInjection.swift:81:6:81:6 | [post] task2 [arguments, Collection element] | CommandInjection.swift:81:6:81:6 | [post] task2 | provenance | | +| CommandInjection.swift:81:24:81:46 | [...] [Collection element] | CommandInjection.swift:81:6:81:6 | [post] task2 [arguments, Collection element] | provenance | | +| CommandInjection.swift:81:31:81:31 | validatedString | CommandInjection.swift:81:24:81:46 | [...] [Collection element] | provenance | | +| CommandInjection.swift:93:20:93:40 | arguments [Collection element] | CommandInjection.swift:94:20:94:20 | arguments [Collection element] | provenance | | +| CommandInjection.swift:94:3:94:3 | [post] self [arguments, Collection element] | CommandInjection.swift:94:3:94:3 | [post] self | provenance | | +| CommandInjection.swift:94:20:94:20 | arguments [Collection element] | CommandInjection.swift:94:3:94:3 | [post] self [arguments, Collection element] | provenance | | +| CommandInjection.swift:99:8:99:12 | let ...? [some:0] | CommandInjection.swift:99:12:99:12 | userControlledString | provenance | | +| CommandInjection.swift:99:12:99:12 | userControlledString | CommandInjection.swift:114:36:114:36 | userControlledString | provenance | | +| CommandInjection.swift:99:12:99:12 | userControlledString | CommandInjection.swift:115:28:115:28 | userControlledString | provenance | | +| CommandInjection.swift:99:12:99:12 | userControlledString | CommandInjection.swift:119:45:119:45 | userControlledString | provenance | | +| CommandInjection.swift:99:12:99:12 | userControlledString | CommandInjection.swift:120:36:120:36 | userControlledString | provenance | | +| CommandInjection.swift:99:12:99:12 | userControlledString | CommandInjection.swift:121:28:121:36 | ... .+(_:_:) ... | provenance | | +| CommandInjection.swift:99:12:99:12 | userControlledString | CommandInjection.swift:125:46:125:46 | userControlledString | provenance | | +| CommandInjection.swift:99:12:99:12 | userControlledString | CommandInjection.swift:126:22:126:22 | userControlledString | provenance | | +| CommandInjection.swift:99:12:99:12 | userControlledString | CommandInjection.swift:130:45:130:45 | userControlledString | provenance | | +| CommandInjection.swift:99:12:99:12 | userControlledString | CommandInjection.swift:131:36:131:36 | userControlledString | provenance | | +| CommandInjection.swift:99:12:99:12 | userControlledString | CommandInjection.swift:132:21:132:21 | userControlledString | provenance | | +| CommandInjection.swift:99:12:99:12 | userControlledString | CommandInjection.swift:133:22:133:22 | userControlledString | provenance | | +| CommandInjection.swift:99:12:99:12 | userControlledString | CommandInjection.swift:134:24:134:24 | userControlledString | provenance | | +| CommandInjection.swift:99:12:99:12 | userControlledString | CommandInjection.swift:144:42:144:42 | userControlledString | provenance | | +| CommandInjection.swift:99:12:99:12 | userControlledString | CommandInjection.swift:145:75:145:75 | userControlledString | provenance | | +| CommandInjection.swift:99:12:99:12 | userControlledString | CommandInjection.swift:148:35:148:35 | userControlledString | provenance | | +| CommandInjection.swift:99:12:99:12 | userControlledString | CommandInjection.swift:149:70:149:70 | userControlledString | provenance | | +| CommandInjection.swift:99:12:99:12 | userControlledString | CommandInjection.swift:154:53:154:53 | userControlledString | provenance | | +| CommandInjection.swift:99:12:99:12 | userControlledString | CommandInjection.swift:157:52:157:52 | userControlledString | provenance | | +| CommandInjection.swift:99:12:99:12 | userControlledString | CommandInjection.swift:158:33:158:33 | userControlledString | provenance | | +| CommandInjection.swift:99:12:99:12 | userControlledString | CommandInjection.swift:160:57:160:57 | userControlledString | provenance | | +| CommandInjection.swift:99:40:99:94 | call to String.init(contentsOf:) | CommandInjection.swift:99:40:99:94 | call to String.init(contentsOf:) [some:0] | provenance | | +| CommandInjection.swift:99:40:99:94 | call to String.init(contentsOf:) | CommandInjection.swift:114:36:114:36 | userControlledString | provenance | | +| CommandInjection.swift:99:40:99:94 | call to String.init(contentsOf:) | CommandInjection.swift:115:28:115:28 | userControlledString | provenance | | +| CommandInjection.swift:99:40:99:94 | call to String.init(contentsOf:) | CommandInjection.swift:119:45:119:45 | userControlledString | provenance | | +| CommandInjection.swift:99:40:99:94 | call to String.init(contentsOf:) | CommandInjection.swift:120:36:120:36 | userControlledString | provenance | | +| CommandInjection.swift:99:40:99:94 | call to String.init(contentsOf:) | CommandInjection.swift:121:28:121:36 | ... .+(_:_:) ... | provenance | | +| CommandInjection.swift:99:40:99:94 | call to String.init(contentsOf:) | CommandInjection.swift:125:46:125:46 | userControlledString | provenance | | +| CommandInjection.swift:99:40:99:94 | call to String.init(contentsOf:) | CommandInjection.swift:126:22:126:22 | userControlledString | provenance | | +| CommandInjection.swift:99:40:99:94 | call to String.init(contentsOf:) | CommandInjection.swift:130:45:130:45 | userControlledString | provenance | | +| CommandInjection.swift:99:40:99:94 | call to String.init(contentsOf:) | CommandInjection.swift:131:36:131:36 | userControlledString | provenance | | +| CommandInjection.swift:99:40:99:94 | call to String.init(contentsOf:) | CommandInjection.swift:132:21:132:21 | userControlledString | provenance | | +| CommandInjection.swift:99:40:99:94 | call to String.init(contentsOf:) | CommandInjection.swift:133:22:133:22 | userControlledString | provenance | | +| CommandInjection.swift:99:40:99:94 | call to String.init(contentsOf:) | CommandInjection.swift:134:24:134:24 | userControlledString | provenance | | +| CommandInjection.swift:99:40:99:94 | call to String.init(contentsOf:) | CommandInjection.swift:144:42:144:42 | userControlledString | provenance | | +| CommandInjection.swift:99:40:99:94 | call to String.init(contentsOf:) | CommandInjection.swift:145:75:145:75 | userControlledString | provenance | | +| CommandInjection.swift:99:40:99:94 | call to String.init(contentsOf:) | CommandInjection.swift:148:35:148:35 | userControlledString | provenance | | +| CommandInjection.swift:99:40:99:94 | call to String.init(contentsOf:) | CommandInjection.swift:149:70:149:70 | userControlledString | provenance | | +| CommandInjection.swift:99:40:99:94 | call to String.init(contentsOf:) | CommandInjection.swift:154:53:154:53 | userControlledString | provenance | | +| CommandInjection.swift:99:40:99:94 | call to String.init(contentsOf:) | CommandInjection.swift:157:52:157:52 | userControlledString | provenance | | +| CommandInjection.swift:99:40:99:94 | call to String.init(contentsOf:) | CommandInjection.swift:158:33:158:33 | userControlledString | provenance | | +| CommandInjection.swift:99:40:99:94 | call to String.init(contentsOf:) | CommandInjection.swift:160:57:160:57 | userControlledString | provenance | | +| CommandInjection.swift:99:40:99:94 | call to String.init(contentsOf:) [some:0] | CommandInjection.swift:99:8:99:12 | let ...? [some:0] | provenance | | +| CommandInjection.swift:114:2:114:2 | [post] task3 [executableURL] | CommandInjection.swift:114:2:114:2 | [post] task3 | provenance | | +| CommandInjection.swift:114:24:114:56 | call to URL.init(string:) [some:0] | CommandInjection.swift:114:24:114:57 | ...! | provenance | | +| CommandInjection.swift:114:24:114:57 | ...! | CommandInjection.swift:114:2:114:2 | [post] task3 [executableURL] | provenance | | +| CommandInjection.swift:114:36:114:36 | userControlledString | CommandInjection.swift:114:24:114:56 | call to URL.init(string:) [some:0] | provenance | | +| CommandInjection.swift:115:2:115:2 | [post] task3 [arguments, Collection element] | CommandInjection.swift:115:2:115:2 | [post] task3 | provenance | | +| CommandInjection.swift:115:20:115:48 | [...] [Collection element] | CommandInjection.swift:115:2:115:2 | [post] task3 [arguments, Collection element] | provenance | | +| CommandInjection.swift:115:28:115:28 | userControlledString | CommandInjection.swift:115:20:115:48 | [...] [Collection element] | provenance | | +| CommandInjection.swift:119:2:119:2 | [post] task4 [executableURL] | CommandInjection.swift:119:2:119:2 | [post] task4 | provenance | | +| CommandInjection.swift:119:24:119:65 | call to URL.init(fileURLWithPath:) | CommandInjection.swift:119:2:119:2 | [post] task4 [executableURL] | provenance | | +| CommandInjection.swift:119:45:119:45 | userControlledString | CommandInjection.swift:119:24:119:65 | call to URL.init(fileURLWithPath:) | provenance | | +| CommandInjection.swift:120:2:120:2 | [post] task4 [executableURL] | CommandInjection.swift:120:2:120:2 | [post] task4 | provenance | | +| CommandInjection.swift:120:24:120:56 | call to URL.init(string:) [some:0] | CommandInjection.swift:120:24:120:57 | ...! | provenance | | +| CommandInjection.swift:120:24:120:57 | ...! | CommandInjection.swift:120:2:120:2 | [post] task4 [executableURL] | provenance | | +| CommandInjection.swift:120:36:120:36 | userControlledString | CommandInjection.swift:120:24:120:56 | call to URL.init(string:) [some:0] | provenance | | +| CommandInjection.swift:121:2:121:2 | [post] task4 [arguments, Collection element] | CommandInjection.swift:121:2:121:2 | [post] task4 | provenance | | +| CommandInjection.swift:121:20:121:56 | [...] [Collection element] | CommandInjection.swift:121:2:121:2 | [post] task4 [arguments, Collection element] | provenance | | +| CommandInjection.swift:121:28:121:36 | ... .+(_:_:) ... | CommandInjection.swift:121:20:121:56 | [...] [Collection element] | provenance | | +| CommandInjection.swift:125:2:125:7 | [post] ...? [executableURL] | CommandInjection.swift:125:2:125:7 | [post] ...? | provenance | | +| CommandInjection.swift:125:25:125:66 | call to URL.init(fileURLWithPath:) | CommandInjection.swift:125:2:125:7 | [post] ...? [executableURL] | provenance | | +| CommandInjection.swift:125:46:125:46 | userControlledString | CommandInjection.swift:125:25:125:66 | call to URL.init(fileURLWithPath:) | provenance | | +| CommandInjection.swift:126:2:126:7 | [post] ...? [arguments, Collection element] | CommandInjection.swift:126:2:126:7 | [post] ...? | provenance | | +| CommandInjection.swift:126:21:126:42 | [...] [Collection element] | CommandInjection.swift:126:2:126:7 | [post] ...? [arguments, Collection element] | provenance | | +| CommandInjection.swift:126:22:126:22 | userControlledString | CommandInjection.swift:126:21:126:42 | [...] [Collection element] | provenance | | +| CommandInjection.swift:130:2:130:2 | [post] task6 [executableURL] | CommandInjection.swift:130:2:130:2 | [post] task6 | provenance | | +| CommandInjection.swift:130:24:130:65 | call to URL.init(fileURLWithPath:) | CommandInjection.swift:130:2:130:2 | [post] task6 [executableURL] | provenance | | +| CommandInjection.swift:130:45:130:45 | userControlledString | CommandInjection.swift:130:24:130:65 | call to URL.init(fileURLWithPath:) | provenance | | +| CommandInjection.swift:131:2:131:2 | [post] task6 [executableURL] | CommandInjection.swift:131:2:131:2 | [post] task6 | provenance | | +| CommandInjection.swift:131:24:131:56 | call to URL.init(string:) [some:0] | CommandInjection.swift:131:24:131:57 | ...! | provenance | | +| CommandInjection.swift:131:24:131:57 | ...! | CommandInjection.swift:131:2:131:2 | [post] task6 [executableURL] | provenance | | +| CommandInjection.swift:131:36:131:36 | userControlledString | CommandInjection.swift:131:24:131:56 | call to URL.init(string:) [some:0] | provenance | | +| CommandInjection.swift:132:2:132:2 | [post] task6 [arguments, Collection element] | CommandInjection.swift:132:2:132:2 | [post] task6 | provenance | | +| CommandInjection.swift:132:20:132:41 | [...] [Collection element] | CommandInjection.swift:132:2:132:2 | [post] task6 [arguments, Collection element] | provenance | | +| CommandInjection.swift:132:21:132:21 | userControlledString | CommandInjection.swift:132:20:132:41 | [...] [Collection element] | provenance | | +| CommandInjection.swift:133:21:133:42 | [...] [Collection element] | CommandInjection.swift:93:20:93:40 | arguments [Collection element] | provenance | | +| CommandInjection.swift:133:22:133:22 | userControlledString | CommandInjection.swift:133:21:133:42 | [...] [Collection element] | provenance | | +| CommandInjection.swift:134:24:134:24 | userControlledString | CommandInjection.swift:144:42:144:42 | userControlledString | provenance | | +| CommandInjection.swift:134:24:134:24 | userControlledString | CommandInjection.swift:145:75:145:75 | userControlledString | provenance | | +| CommandInjection.swift:134:24:134:24 | userControlledString | CommandInjection.swift:148:35:148:35 | userControlledString | provenance | | +| CommandInjection.swift:134:24:134:24 | userControlledString | CommandInjection.swift:149:70:149:70 | userControlledString | provenance | | +| CommandInjection.swift:134:24:134:24 | userControlledString | CommandInjection.swift:154:53:154:53 | userControlledString | provenance | | +| CommandInjection.swift:134:24:134:24 | userControlledString | CommandInjection.swift:157:52:157:52 | userControlledString | provenance | | +| CommandInjection.swift:134:24:134:24 | userControlledString | CommandInjection.swift:158:33:158:33 | userControlledString | provenance | | +| CommandInjection.swift:134:24:134:24 | userControlledString | CommandInjection.swift:160:57:160:57 | userControlledString | provenance | | +| CommandInjection.swift:145:67:145:95 | [...] [Collection element] | CommandInjection.swift:145:67:145:95 | [...] | provenance | | +| CommandInjection.swift:145:75:145:75 | userControlledString | CommandInjection.swift:145:67:145:95 | [...] [Collection element] | provenance | | +| CommandInjection.swift:148:23:148:55 | call to URL.init(string:) [some:0] | CommandInjection.swift:148:23:148:56 | ...! | provenance | | +| CommandInjection.swift:148:35:148:35 | userControlledString | CommandInjection.swift:148:23:148:55 | call to URL.init(string:) [some:0] | provenance | | +| CommandInjection.swift:149:62:149:90 | [...] [Collection element] | CommandInjection.swift:149:62:149:90 | [...] | provenance | | +| CommandInjection.swift:149:70:149:70 | userControlledString | CommandInjection.swift:149:62:149:90 | [...] [Collection element] | provenance | | +| CommandInjection.swift:154:41:154:73 | call to URL.init(string:) [some:0] | CommandInjection.swift:154:41:154:74 | ...! | provenance | | +| CommandInjection.swift:154:53:154:53 | userControlledString | CommandInjection.swift:154:41:154:73 | call to URL.init(string:) [some:0] | provenance | | +| CommandInjection.swift:157:40:157:72 | call to URL.init(string:) [some:0] | CommandInjection.swift:157:40:157:73 | ...! | provenance | | +| CommandInjection.swift:157:40:157:72 | call to URL.init(string:) [some:0] | CommandInjection.swift:157:40:157:73 | ...! | provenance | | +| CommandInjection.swift:157:40:157:73 | ...! | file://:0:0:0:0 | url | provenance | | +| CommandInjection.swift:157:52:157:52 | userControlledString | CommandInjection.swift:157:40:157:72 | call to URL.init(string:) [some:0] | provenance | | +| CommandInjection.swift:158:32:158:53 | [...] [Collection element] | CommandInjection.swift:158:32:158:53 | [...] | provenance | | +| CommandInjection.swift:158:33:158:33 | userControlledString | CommandInjection.swift:158:32:158:53 | [...] [Collection element] | provenance | | +| CommandInjection.swift:160:45:160:77 | call to URL.init(string:) [some:0] | CommandInjection.swift:160:45:160:78 | ...! | provenance | | +| CommandInjection.swift:160:45:160:77 | call to URL.init(string:) [some:0] | CommandInjection.swift:160:45:160:78 | ...! | provenance | | +| CommandInjection.swift:160:45:160:78 | ...! | file://:0:0:0:0 | url | provenance | | +| CommandInjection.swift:160:57:160:57 | userControlledString | CommandInjection.swift:160:45:160:77 | call to URL.init(string:) [some:0] | provenance | | +| CommandInjection.swift:174:3:174:3 | newValue [Collection element] | CommandInjection.swift:175:19:175:19 | newValue [Collection element] | provenance | | +| CommandInjection.swift:174:3:174:3 | newValue [Collection element] | CommandInjection.swift:176:20:176:20 | newValue [Collection element] | provenance | | +| CommandInjection.swift:174:3:174:3 | newValue [Collection element] | CommandInjection.swift:177:19:177:19 | newValue [Collection element] | provenance | | +| CommandInjection.swift:175:4:175:4 | [post] getter for .p1 [arguments, Collection element] | CommandInjection.swift:175:4:175:4 | [post] getter for .p1 | provenance | | +| CommandInjection.swift:175:19:175:19 | newValue [Collection element] | CommandInjection.swift:175:4:175:4 | [post] getter for .p1 [arguments, Collection element] | provenance | | +| CommandInjection.swift:176:4:176:6 | [post] ...! [arguments, Collection element] | CommandInjection.swift:176:4:176:6 | [post] ...! | provenance | | +| CommandInjection.swift:176:20:176:20 | newValue [Collection element] | CommandInjection.swift:176:4:176:6 | [post] ...! [arguments, Collection element] | provenance | | +| CommandInjection.swift:177:4:177:4 | [post] ...! [arguments, Collection element] | CommandInjection.swift:177:4:177:4 | [post] ...! | provenance | | +| CommandInjection.swift:177:19:177:19 | newValue [Collection element] | CommandInjection.swift:177:4:177:4 | [post] ...! [arguments, Collection element] | provenance | | +| CommandInjection.swift:182:9:182:13 | let ...? [some:0] | CommandInjection.swift:182:13:182:13 | userControlledString | provenance | | +| CommandInjection.swift:182:13:182:13 | userControlledString | CommandInjection.swift:186:19:186:19 | userControlledString | provenance | | +| CommandInjection.swift:182:13:182:13 | userControlledString | CommandInjection.swift:192:31:192:31 | userControlledString | provenance | | +| CommandInjection.swift:182:41:182:95 | call to String.init(contentsOf:) | CommandInjection.swift:182:41:182:95 | call to String.init(contentsOf:) [some:0] | provenance | | +| CommandInjection.swift:182:41:182:95 | call to String.init(contentsOf:) | CommandInjection.swift:186:19:186:19 | userControlledString | provenance | | +| CommandInjection.swift:182:41:182:95 | call to String.init(contentsOf:) | CommandInjection.swift:192:31:192:31 | userControlledString | provenance | | +| CommandInjection.swift:182:41:182:95 | call to String.init(contentsOf:) [some:0] | CommandInjection.swift:182:9:182:13 | let ...? [some:0] | provenance | | +| CommandInjection.swift:186:18:186:39 | [...] [Collection element] | CommandInjection.swift:188:18:188:18 | tainted1 [Collection element] | provenance | | +| CommandInjection.swift:186:18:186:39 | [...] [Collection element] | CommandInjection.swift:189:19:189:19 | tainted1 [Collection element] | provenance | | +| CommandInjection.swift:186:18:186:39 | [...] [Collection element] | CommandInjection.swift:190:18:190:18 | tainted1 [Collection element] | provenance | | +| CommandInjection.swift:186:19:186:19 | userControlledString | CommandInjection.swift:186:18:186:39 | [...] [Collection element] | provenance | | +| CommandInjection.swift:188:3:188:3 | [post] getter for .p1 [arguments, Collection element] | CommandInjection.swift:188:3:188:3 | [post] getter for .p1 | provenance | | +| CommandInjection.swift:188:18:188:18 | tainted1 [Collection element] | CommandInjection.swift:188:3:188:3 | [post] getter for .p1 [arguments, Collection element] | provenance | | +| CommandInjection.swift:188:18:188:18 | tainted1 [Collection element] | CommandInjection.swift:189:19:189:19 | tainted1 [Collection element] | provenance | | +| CommandInjection.swift:188:18:188:18 | tainted1 [Collection element] | CommandInjection.swift:190:18:190:18 | tainted1 [Collection element] | provenance | | +| CommandInjection.swift:189:3:189:5 | [post] ...! [arguments, Collection element] | CommandInjection.swift:189:3:189:5 | [post] ...! | provenance | | +| CommandInjection.swift:189:19:189:19 | tainted1 [Collection element] | CommandInjection.swift:189:3:189:5 | [post] ...! [arguments, Collection element] | provenance | | +| CommandInjection.swift:189:19:189:19 | tainted1 [Collection element] | CommandInjection.swift:190:18:190:18 | tainted1 [Collection element] | provenance | | +| CommandInjection.swift:190:3:190:3 | [post] ...! [arguments, Collection element] | CommandInjection.swift:190:3:190:3 | [post] ...! | provenance | | +| CommandInjection.swift:190:18:190:18 | tainted1 [Collection element] | CommandInjection.swift:190:3:190:3 | [post] ...! [arguments, Collection element] | provenance | | +| CommandInjection.swift:192:30:192:51 | [...] [Collection element] | CommandInjection.swift:194:18:194:18 | tainted2 [Collection element] | provenance | | +| CommandInjection.swift:192:30:192:51 | [...] [Collection element] | CommandInjection.swift:195:19:195:19 | tainted2 [Collection element] | provenance | | +| CommandInjection.swift:192:30:192:51 | [...] [Collection element] | CommandInjection.swift:196:18:196:18 | tainted2 [Collection element] | provenance | | +| CommandInjection.swift:192:30:192:51 | [...] [Collection element] | CommandInjection.swift:198:13:198:13 | tainted2 [Collection element] | provenance | | +| CommandInjection.swift:192:31:192:31 | userControlledString | CommandInjection.swift:192:30:192:51 | [...] [Collection element] | provenance | | +| CommandInjection.swift:194:3:194:3 | [post] getter for .p1 [arguments, Collection element] | CommandInjection.swift:194:3:194:3 | [post] getter for .p1 | provenance | | +| CommandInjection.swift:194:18:194:18 | tainted2 [Collection element] | CommandInjection.swift:194:3:194:3 | [post] getter for .p1 [arguments, Collection element] | provenance | | +| CommandInjection.swift:195:3:195:5 | [post] ...! [arguments, Collection element] | CommandInjection.swift:195:3:195:5 | [post] ...! | provenance | | +| CommandInjection.swift:195:19:195:19 | tainted2 [Collection element] | CommandInjection.swift:195:3:195:5 | [post] ...! [arguments, Collection element] | provenance | | +| CommandInjection.swift:196:3:196:3 | [post] ...! [arguments, Collection element] | CommandInjection.swift:196:3:196:3 | [post] ...! | provenance | | +| CommandInjection.swift:196:18:196:18 | tainted2 [Collection element] | CommandInjection.swift:196:3:196:3 | [post] ...! [arguments, Collection element] | provenance | | +| CommandInjection.swift:198:13:198:13 | tainted2 [Collection element] | CommandInjection.swift:174:3:174:3 | newValue [Collection element] | provenance | | +| file://:0:0:0:0 | url | file://:0:0:0:0 | url | provenance | | +| file://:0:0:0:0 | url | file://:0:0:0:0 | url | provenance | | nodes | CommandInjection.swift:58:22:58:33 | command | semmle.label | command | | CommandInjection.swift:58:22:58:33 | command [some:0] | semmle.label | command [some:0] | diff --git a/swift/ql/test/query-tests/Security/CWE-079/UnsafeWebViewFetch.expected b/swift/ql/test/query-tests/Security/CWE-079/UnsafeWebViewFetch.expected index 66356d31349..c2fefc171e6 100644 --- a/swift/ql/test/query-tests/Security/CWE-079/UnsafeWebViewFetch.expected +++ b/swift/ql/test/query-tests/Security/CWE-079/UnsafeWebViewFetch.expected @@ -1,69 +1,69 @@ edges -| UnsafeWebViewFetch.swift:94:10:94:37 | try ... | UnsafeWebViewFetch.swift:117:21:117:35 | call to getRemoteData() | -| UnsafeWebViewFetch.swift:94:10:94:37 | try ... | UnsafeWebViewFetch.swift:120:25:120:39 | call to getRemoteData() | -| UnsafeWebViewFetch.swift:94:10:94:37 | try ... | UnsafeWebViewFetch.swift:164:21:164:35 | call to getRemoteData() | -| UnsafeWebViewFetch.swift:94:10:94:37 | try ... | UnsafeWebViewFetch.swift:167:25:167:39 | call to getRemoteData() | -| UnsafeWebViewFetch.swift:94:10:94:37 | try ... | UnsafeWebViewFetch.swift:206:17:206:31 | call to getRemoteData() | -| UnsafeWebViewFetch.swift:94:14:94:37 | call to String.init(contentsOf:) | UnsafeWebViewFetch.swift:94:10:94:37 | try ... | -| UnsafeWebViewFetch.swift:103:30:103:84 | call to String.init(contentsOf:) | UnsafeWebViewFetch.swift:103:25:103:84 | try! ... | -| UnsafeWebViewFetch.swift:105:18:105:72 | call to String.init(contentsOf:) | UnsafeWebViewFetch.swift:106:25:106:25 | data | -| UnsafeWebViewFetch.swift:109:30:109:53 | call to String.init(contentsOf:) | UnsafeWebViewFetch.swift:109:25:109:53 | try! ... | -| UnsafeWebViewFetch.swift:117:21:117:35 | call to getRemoteData() | UnsafeWebViewFetch.swift:121:25:121:25 | remoteString | -| UnsafeWebViewFetch.swift:117:21:117:35 | call to getRemoteData() | UnsafeWebViewFetch.swift:124:25:124:51 | ... .+(_:_:) ... | -| UnsafeWebViewFetch.swift:117:21:117:35 | call to getRemoteData() | UnsafeWebViewFetch.swift:127:25:127:25 | "..." | -| UnsafeWebViewFetch.swift:117:21:117:35 | call to getRemoteData() | UnsafeWebViewFetch.swift:131:30:131:30 | remoteString | -| UnsafeWebViewFetch.swift:117:21:117:35 | call to getRemoteData() | UnsafeWebViewFetch.swift:135:25:135:25 | remoteString | -| UnsafeWebViewFetch.swift:117:21:117:35 | call to getRemoteData() | UnsafeWebViewFetch.swift:137:25:137:25 | remoteString | -| UnsafeWebViewFetch.swift:117:21:117:35 | call to getRemoteData() | UnsafeWebViewFetch.swift:139:25:139:25 | remoteString | -| UnsafeWebViewFetch.swift:117:21:117:35 | call to getRemoteData() | UnsafeWebViewFetch.swift:141:25:141:25 | remoteString | -| UnsafeWebViewFetch.swift:117:21:117:35 | call to getRemoteData() | UnsafeWebViewFetch.swift:150:24:150:37 | .utf8 | -| UnsafeWebViewFetch.swift:131:18:131:42 | call to URL.init(string:) [some:0] | UnsafeWebViewFetch.swift:132:52:132:52 | remoteURL [some:0] | -| UnsafeWebViewFetch.swift:131:18:131:42 | call to URL.init(string:) [some:0] | UnsafeWebViewFetch.swift:138:47:138:47 | remoteURL [some:0] | -| UnsafeWebViewFetch.swift:131:18:131:42 | call to URL.init(string:) [some:0] | UnsafeWebViewFetch.swift:139:48:139:48 | remoteURL [some:0] | -| UnsafeWebViewFetch.swift:131:18:131:42 | call to URL.init(string:) [some:0] | UnsafeWebViewFetch.swift:153:85:153:85 | remoteURL [some:0] | -| UnsafeWebViewFetch.swift:131:18:131:42 | call to URL.init(string:) [some:0] | UnsafeWebViewFetch.swift:154:86:154:86 | remoteURL [some:0] | -| UnsafeWebViewFetch.swift:131:30:131:30 | remoteString | UnsafeWebViewFetch.swift:131:18:131:42 | call to URL.init(string:) [some:0] | -| UnsafeWebViewFetch.swift:132:19:132:61 | call to URL.init(string:relativeTo:) [some:0] | UnsafeWebViewFetch.swift:140:47:140:47 | remoteURL2 [some:0] | -| UnsafeWebViewFetch.swift:132:19:132:61 | call to URL.init(string:relativeTo:) [some:0] | UnsafeWebViewFetch.swift:141:48:141:48 | remoteURL2 [some:0] | -| UnsafeWebViewFetch.swift:132:52:132:52 | remoteURL [some:0] | UnsafeWebViewFetch.swift:132:19:132:61 | call to URL.init(string:relativeTo:) [some:0] | -| UnsafeWebViewFetch.swift:138:47:138:47 | remoteURL [some:0] | UnsafeWebViewFetch.swift:138:47:138:56 | ...! | -| UnsafeWebViewFetch.swift:139:48:139:48 | remoteURL [some:0] | UnsafeWebViewFetch.swift:139:48:139:57 | ...! | -| UnsafeWebViewFetch.swift:140:47:140:47 | remoteURL2 [some:0] | UnsafeWebViewFetch.swift:140:47:140:57 | ...! | -| UnsafeWebViewFetch.swift:141:48:141:48 | remoteURL2 [some:0] | UnsafeWebViewFetch.swift:141:48:141:58 | ...! | -| UnsafeWebViewFetch.swift:150:19:150:41 | call to Data.init(_:) | UnsafeWebViewFetch.swift:152:15:152:15 | remoteData | -| UnsafeWebViewFetch.swift:150:19:150:41 | call to Data.init(_:) | UnsafeWebViewFetch.swift:154:15:154:15 | remoteData | -| UnsafeWebViewFetch.swift:150:24:150:37 | .utf8 | UnsafeWebViewFetch.swift:150:19:150:41 | call to Data.init(_:) | -| UnsafeWebViewFetch.swift:153:85:153:85 | remoteURL [some:0] | UnsafeWebViewFetch.swift:153:85:153:94 | ...! | -| UnsafeWebViewFetch.swift:154:86:154:86 | remoteURL [some:0] | UnsafeWebViewFetch.swift:154:86:154:95 | ...! | -| UnsafeWebViewFetch.swift:164:21:164:35 | call to getRemoteData() | UnsafeWebViewFetch.swift:168:25:168:25 | remoteString | -| UnsafeWebViewFetch.swift:164:21:164:35 | call to getRemoteData() | UnsafeWebViewFetch.swift:171:25:171:51 | ... .+(_:_:) ... | -| UnsafeWebViewFetch.swift:164:21:164:35 | call to getRemoteData() | UnsafeWebViewFetch.swift:174:25:174:25 | "..." | -| UnsafeWebViewFetch.swift:164:21:164:35 | call to getRemoteData() | UnsafeWebViewFetch.swift:178:30:178:30 | remoteString | -| UnsafeWebViewFetch.swift:164:21:164:35 | call to getRemoteData() | UnsafeWebViewFetch.swift:182:25:182:25 | remoteString | -| UnsafeWebViewFetch.swift:164:21:164:35 | call to getRemoteData() | UnsafeWebViewFetch.swift:184:25:184:25 | remoteString | -| UnsafeWebViewFetch.swift:164:21:164:35 | call to getRemoteData() | UnsafeWebViewFetch.swift:186:25:186:25 | remoteString | -| UnsafeWebViewFetch.swift:164:21:164:35 | call to getRemoteData() | UnsafeWebViewFetch.swift:188:25:188:25 | remoteString | -| UnsafeWebViewFetch.swift:164:21:164:35 | call to getRemoteData() | UnsafeWebViewFetch.swift:197:24:197:37 | .utf8 | -| UnsafeWebViewFetch.swift:178:18:178:42 | call to URL.init(string:) [some:0] | UnsafeWebViewFetch.swift:179:52:179:52 | remoteURL [some:0] | -| UnsafeWebViewFetch.swift:178:18:178:42 | call to URL.init(string:) [some:0] | UnsafeWebViewFetch.swift:185:47:185:47 | remoteURL [some:0] | -| UnsafeWebViewFetch.swift:178:18:178:42 | call to URL.init(string:) [some:0] | UnsafeWebViewFetch.swift:186:48:186:48 | remoteURL [some:0] | -| UnsafeWebViewFetch.swift:178:18:178:42 | call to URL.init(string:) [some:0] | UnsafeWebViewFetch.swift:200:90:200:90 | remoteURL [some:0] | -| UnsafeWebViewFetch.swift:178:18:178:42 | call to URL.init(string:) [some:0] | UnsafeWebViewFetch.swift:201:91:201:91 | remoteURL [some:0] | -| UnsafeWebViewFetch.swift:178:30:178:30 | remoteString | UnsafeWebViewFetch.swift:178:18:178:42 | call to URL.init(string:) [some:0] | -| UnsafeWebViewFetch.swift:179:19:179:61 | call to URL.init(string:relativeTo:) [some:0] | UnsafeWebViewFetch.swift:187:47:187:47 | remoteURL2 [some:0] | -| UnsafeWebViewFetch.swift:179:19:179:61 | call to URL.init(string:relativeTo:) [some:0] | UnsafeWebViewFetch.swift:188:48:188:48 | remoteURL2 [some:0] | -| UnsafeWebViewFetch.swift:179:52:179:52 | remoteURL [some:0] | UnsafeWebViewFetch.swift:179:19:179:61 | call to URL.init(string:relativeTo:) [some:0] | -| UnsafeWebViewFetch.swift:185:47:185:47 | remoteURL [some:0] | UnsafeWebViewFetch.swift:185:47:185:56 | ...! | -| UnsafeWebViewFetch.swift:186:48:186:48 | remoteURL [some:0] | UnsafeWebViewFetch.swift:186:48:186:57 | ...! | -| UnsafeWebViewFetch.swift:187:47:187:47 | remoteURL2 [some:0] | UnsafeWebViewFetch.swift:187:47:187:57 | ...! | -| UnsafeWebViewFetch.swift:188:48:188:48 | remoteURL2 [some:0] | UnsafeWebViewFetch.swift:188:48:188:58 | ...! | -| UnsafeWebViewFetch.swift:197:19:197:41 | call to Data.init(_:) | UnsafeWebViewFetch.swift:199:15:199:15 | remoteData | -| UnsafeWebViewFetch.swift:197:19:197:41 | call to Data.init(_:) | UnsafeWebViewFetch.swift:201:15:201:15 | remoteData | -| UnsafeWebViewFetch.swift:197:24:197:37 | .utf8 | UnsafeWebViewFetch.swift:197:19:197:41 | call to Data.init(_:) | -| UnsafeWebViewFetch.swift:200:90:200:90 | remoteURL [some:0] | UnsafeWebViewFetch.swift:200:90:200:99 | ...! | -| UnsafeWebViewFetch.swift:201:91:201:91 | remoteURL [some:0] | UnsafeWebViewFetch.swift:201:91:201:100 | ...! | -| UnsafeWebViewFetch.swift:206:17:206:31 | call to getRemoteData() | UnsafeWebViewFetch.swift:210:25:210:25 | htmlData | -| UnsafeWebViewFetch.swift:206:17:206:31 | call to getRemoteData() | UnsafeWebViewFetch.swift:211:25:211:25 | htmlData | +| UnsafeWebViewFetch.swift:94:10:94:37 | try ... | UnsafeWebViewFetch.swift:117:21:117:35 | call to getRemoteData() | provenance | | +| UnsafeWebViewFetch.swift:94:10:94:37 | try ... | UnsafeWebViewFetch.swift:120:25:120:39 | call to getRemoteData() | provenance | | +| UnsafeWebViewFetch.swift:94:10:94:37 | try ... | UnsafeWebViewFetch.swift:164:21:164:35 | call to getRemoteData() | provenance | | +| UnsafeWebViewFetch.swift:94:10:94:37 | try ... | UnsafeWebViewFetch.swift:167:25:167:39 | call to getRemoteData() | provenance | | +| UnsafeWebViewFetch.swift:94:10:94:37 | try ... | UnsafeWebViewFetch.swift:206:17:206:31 | call to getRemoteData() | provenance | | +| UnsafeWebViewFetch.swift:94:14:94:37 | call to String.init(contentsOf:) | UnsafeWebViewFetch.swift:94:10:94:37 | try ... | provenance | | +| UnsafeWebViewFetch.swift:103:30:103:84 | call to String.init(contentsOf:) | UnsafeWebViewFetch.swift:103:25:103:84 | try! ... | provenance | | +| UnsafeWebViewFetch.swift:105:18:105:72 | call to String.init(contentsOf:) | UnsafeWebViewFetch.swift:106:25:106:25 | data | provenance | | +| UnsafeWebViewFetch.swift:109:30:109:53 | call to String.init(contentsOf:) | UnsafeWebViewFetch.swift:109:25:109:53 | try! ... | provenance | | +| UnsafeWebViewFetch.swift:117:21:117:35 | call to getRemoteData() | UnsafeWebViewFetch.swift:121:25:121:25 | remoteString | provenance | | +| UnsafeWebViewFetch.swift:117:21:117:35 | call to getRemoteData() | UnsafeWebViewFetch.swift:124:25:124:51 | ... .+(_:_:) ... | provenance | | +| UnsafeWebViewFetch.swift:117:21:117:35 | call to getRemoteData() | UnsafeWebViewFetch.swift:127:25:127:25 | "..." | provenance | | +| UnsafeWebViewFetch.swift:117:21:117:35 | call to getRemoteData() | UnsafeWebViewFetch.swift:131:30:131:30 | remoteString | provenance | | +| UnsafeWebViewFetch.swift:117:21:117:35 | call to getRemoteData() | UnsafeWebViewFetch.swift:135:25:135:25 | remoteString | provenance | | +| UnsafeWebViewFetch.swift:117:21:117:35 | call to getRemoteData() | UnsafeWebViewFetch.swift:137:25:137:25 | remoteString | provenance | | +| UnsafeWebViewFetch.swift:117:21:117:35 | call to getRemoteData() | UnsafeWebViewFetch.swift:139:25:139:25 | remoteString | provenance | | +| UnsafeWebViewFetch.swift:117:21:117:35 | call to getRemoteData() | UnsafeWebViewFetch.swift:141:25:141:25 | remoteString | provenance | | +| UnsafeWebViewFetch.swift:117:21:117:35 | call to getRemoteData() | UnsafeWebViewFetch.swift:150:24:150:37 | .utf8 | provenance | | +| UnsafeWebViewFetch.swift:131:18:131:42 | call to URL.init(string:) [some:0] | UnsafeWebViewFetch.swift:132:52:132:52 | remoteURL [some:0] | provenance | | +| UnsafeWebViewFetch.swift:131:18:131:42 | call to URL.init(string:) [some:0] | UnsafeWebViewFetch.swift:138:47:138:47 | remoteURL [some:0] | provenance | | +| UnsafeWebViewFetch.swift:131:18:131:42 | call to URL.init(string:) [some:0] | UnsafeWebViewFetch.swift:139:48:139:48 | remoteURL [some:0] | provenance | | +| UnsafeWebViewFetch.swift:131:18:131:42 | call to URL.init(string:) [some:0] | UnsafeWebViewFetch.swift:153:85:153:85 | remoteURL [some:0] | provenance | | +| UnsafeWebViewFetch.swift:131:18:131:42 | call to URL.init(string:) [some:0] | UnsafeWebViewFetch.swift:154:86:154:86 | remoteURL [some:0] | provenance | | +| UnsafeWebViewFetch.swift:131:30:131:30 | remoteString | UnsafeWebViewFetch.swift:131:18:131:42 | call to URL.init(string:) [some:0] | provenance | | +| UnsafeWebViewFetch.swift:132:19:132:61 | call to URL.init(string:relativeTo:) [some:0] | UnsafeWebViewFetch.swift:140:47:140:47 | remoteURL2 [some:0] | provenance | | +| UnsafeWebViewFetch.swift:132:19:132:61 | call to URL.init(string:relativeTo:) [some:0] | UnsafeWebViewFetch.swift:141:48:141:48 | remoteURL2 [some:0] | provenance | | +| UnsafeWebViewFetch.swift:132:52:132:52 | remoteURL [some:0] | UnsafeWebViewFetch.swift:132:19:132:61 | call to URL.init(string:relativeTo:) [some:0] | provenance | | +| UnsafeWebViewFetch.swift:138:47:138:47 | remoteURL [some:0] | UnsafeWebViewFetch.swift:138:47:138:56 | ...! | provenance | | +| UnsafeWebViewFetch.swift:139:48:139:48 | remoteURL [some:0] | UnsafeWebViewFetch.swift:139:48:139:57 | ...! | provenance | | +| UnsafeWebViewFetch.swift:140:47:140:47 | remoteURL2 [some:0] | UnsafeWebViewFetch.swift:140:47:140:57 | ...! | provenance | | +| UnsafeWebViewFetch.swift:141:48:141:48 | remoteURL2 [some:0] | UnsafeWebViewFetch.swift:141:48:141:58 | ...! | provenance | | +| UnsafeWebViewFetch.swift:150:19:150:41 | call to Data.init(_:) | UnsafeWebViewFetch.swift:152:15:152:15 | remoteData | provenance | | +| UnsafeWebViewFetch.swift:150:19:150:41 | call to Data.init(_:) | UnsafeWebViewFetch.swift:154:15:154:15 | remoteData | provenance | | +| UnsafeWebViewFetch.swift:150:24:150:37 | .utf8 | UnsafeWebViewFetch.swift:150:19:150:41 | call to Data.init(_:) | provenance | | +| UnsafeWebViewFetch.swift:153:85:153:85 | remoteURL [some:0] | UnsafeWebViewFetch.swift:153:85:153:94 | ...! | provenance | | +| UnsafeWebViewFetch.swift:154:86:154:86 | remoteURL [some:0] | UnsafeWebViewFetch.swift:154:86:154:95 | ...! | provenance | | +| UnsafeWebViewFetch.swift:164:21:164:35 | call to getRemoteData() | UnsafeWebViewFetch.swift:168:25:168:25 | remoteString | provenance | | +| UnsafeWebViewFetch.swift:164:21:164:35 | call to getRemoteData() | UnsafeWebViewFetch.swift:171:25:171:51 | ... .+(_:_:) ... | provenance | | +| UnsafeWebViewFetch.swift:164:21:164:35 | call to getRemoteData() | UnsafeWebViewFetch.swift:174:25:174:25 | "..." | provenance | | +| UnsafeWebViewFetch.swift:164:21:164:35 | call to getRemoteData() | UnsafeWebViewFetch.swift:178:30:178:30 | remoteString | provenance | | +| UnsafeWebViewFetch.swift:164:21:164:35 | call to getRemoteData() | UnsafeWebViewFetch.swift:182:25:182:25 | remoteString | provenance | | +| UnsafeWebViewFetch.swift:164:21:164:35 | call to getRemoteData() | UnsafeWebViewFetch.swift:184:25:184:25 | remoteString | provenance | | +| UnsafeWebViewFetch.swift:164:21:164:35 | call to getRemoteData() | UnsafeWebViewFetch.swift:186:25:186:25 | remoteString | provenance | | +| UnsafeWebViewFetch.swift:164:21:164:35 | call to getRemoteData() | UnsafeWebViewFetch.swift:188:25:188:25 | remoteString | provenance | | +| UnsafeWebViewFetch.swift:164:21:164:35 | call to getRemoteData() | UnsafeWebViewFetch.swift:197:24:197:37 | .utf8 | provenance | | +| UnsafeWebViewFetch.swift:178:18:178:42 | call to URL.init(string:) [some:0] | UnsafeWebViewFetch.swift:179:52:179:52 | remoteURL [some:0] | provenance | | +| UnsafeWebViewFetch.swift:178:18:178:42 | call to URL.init(string:) [some:0] | UnsafeWebViewFetch.swift:185:47:185:47 | remoteURL [some:0] | provenance | | +| UnsafeWebViewFetch.swift:178:18:178:42 | call to URL.init(string:) [some:0] | UnsafeWebViewFetch.swift:186:48:186:48 | remoteURL [some:0] | provenance | | +| UnsafeWebViewFetch.swift:178:18:178:42 | call to URL.init(string:) [some:0] | UnsafeWebViewFetch.swift:200:90:200:90 | remoteURL [some:0] | provenance | | +| UnsafeWebViewFetch.swift:178:18:178:42 | call to URL.init(string:) [some:0] | UnsafeWebViewFetch.swift:201:91:201:91 | remoteURL [some:0] | provenance | | +| UnsafeWebViewFetch.swift:178:30:178:30 | remoteString | UnsafeWebViewFetch.swift:178:18:178:42 | call to URL.init(string:) [some:0] | provenance | | +| UnsafeWebViewFetch.swift:179:19:179:61 | call to URL.init(string:relativeTo:) [some:0] | UnsafeWebViewFetch.swift:187:47:187:47 | remoteURL2 [some:0] | provenance | | +| UnsafeWebViewFetch.swift:179:19:179:61 | call to URL.init(string:relativeTo:) [some:0] | UnsafeWebViewFetch.swift:188:48:188:48 | remoteURL2 [some:0] | provenance | | +| UnsafeWebViewFetch.swift:179:52:179:52 | remoteURL [some:0] | UnsafeWebViewFetch.swift:179:19:179:61 | call to URL.init(string:relativeTo:) [some:0] | provenance | | +| UnsafeWebViewFetch.swift:185:47:185:47 | remoteURL [some:0] | UnsafeWebViewFetch.swift:185:47:185:56 | ...! | provenance | | +| UnsafeWebViewFetch.swift:186:48:186:48 | remoteURL [some:0] | UnsafeWebViewFetch.swift:186:48:186:57 | ...! | provenance | | +| UnsafeWebViewFetch.swift:187:47:187:47 | remoteURL2 [some:0] | UnsafeWebViewFetch.swift:187:47:187:57 | ...! | provenance | | +| UnsafeWebViewFetch.swift:188:48:188:48 | remoteURL2 [some:0] | UnsafeWebViewFetch.swift:188:48:188:58 | ...! | provenance | | +| UnsafeWebViewFetch.swift:197:19:197:41 | call to Data.init(_:) | UnsafeWebViewFetch.swift:199:15:199:15 | remoteData | provenance | | +| UnsafeWebViewFetch.swift:197:19:197:41 | call to Data.init(_:) | UnsafeWebViewFetch.swift:201:15:201:15 | remoteData | provenance | | +| UnsafeWebViewFetch.swift:197:24:197:37 | .utf8 | UnsafeWebViewFetch.swift:197:19:197:41 | call to Data.init(_:) | provenance | | +| UnsafeWebViewFetch.swift:200:90:200:90 | remoteURL [some:0] | UnsafeWebViewFetch.swift:200:90:200:99 | ...! | provenance | | +| UnsafeWebViewFetch.swift:201:91:201:91 | remoteURL [some:0] | UnsafeWebViewFetch.swift:201:91:201:100 | ...! | provenance | | +| UnsafeWebViewFetch.swift:206:17:206:31 | call to getRemoteData() | UnsafeWebViewFetch.swift:210:25:210:25 | htmlData | provenance | | +| UnsafeWebViewFetch.swift:206:17:206:31 | call to getRemoteData() | UnsafeWebViewFetch.swift:211:25:211:25 | htmlData | provenance | | nodes | UnsafeWebViewFetch.swift:94:10:94:37 | try ... | semmle.label | try ... | | UnsafeWebViewFetch.swift:94:14:94:37 | call to String.init(contentsOf:) | semmle.label | call to String.init(contentsOf:) | diff --git a/swift/ql/test/query-tests/Security/CWE-089/SqlInjection.expected b/swift/ql/test/query-tests/Security/CWE-089/SqlInjection.expected index 52d6268367f..36ebcd04a6e 100644 --- a/swift/ql/test/query-tests/Security/CWE-089/SqlInjection.expected +++ b/swift/ql/test/query-tests/Security/CWE-089/SqlInjection.expected @@ -1,122 +1,122 @@ edges -| GRDB.swift:104:25:104:79 | call to String.init(contentsOf:) | GRDB.swift:106:41:106:41 | remoteString | -| GRDB.swift:104:25:104:79 | call to String.init(contentsOf:) | GRDB.swift:108:41:108:41 | remoteString | -| GRDB.swift:104:25:104:79 | call to String.init(contentsOf:) | GRDB.swift:111:43:111:43 | remoteString | -| GRDB.swift:104:25:104:79 | call to String.init(contentsOf:) | GRDB.swift:114:51:114:51 | remoteString | -| GRDB.swift:104:25:104:79 | call to String.init(contentsOf:) | GRDB.swift:117:27:117:27 | remoteString | -| GRDB.swift:104:25:104:79 | call to String.init(contentsOf:) | GRDB.swift:119:27:119:27 | remoteString | -| GRDB.swift:104:25:104:79 | call to String.init(contentsOf:) | GRDB.swift:122:41:122:41 | remoteString | -| GRDB.swift:104:25:104:79 | call to String.init(contentsOf:) | GRDB.swift:124:41:124:41 | remoteString | -| GRDB.swift:130:26:130:80 | call to String.init(contentsOf:) | GRDB.swift:132:39:132:39 | remoteString | -| GRDB.swift:130:26:130:80 | call to String.init(contentsOf:) | GRDB.swift:135:46:135:46 | remoteString | -| GRDB.swift:130:26:130:80 | call to String.init(contentsOf:) | GRDB.swift:138:56:138:56 | remoteString | -| GRDB.swift:130:26:130:80 | call to String.init(contentsOf:) | GRDB.swift:141:45:141:45 | remoteString | -| GRDB.swift:130:26:130:80 | call to String.init(contentsOf:) | GRDB.swift:144:29:144:29 | remoteString | -| GRDB.swift:130:26:130:80 | call to String.init(contentsOf:) | GRDB.swift:145:29:145:29 | remoteString | -| GRDB.swift:130:26:130:80 | call to String.init(contentsOf:) | GRDB.swift:146:29:146:29 | remoteString | -| GRDB.swift:130:26:130:80 | call to String.init(contentsOf:) | GRDB.swift:147:29:147:29 | remoteString | -| GRDB.swift:130:26:130:80 | call to String.init(contentsOf:) | GRDB.swift:148:29:148:29 | remoteString | -| GRDB.swift:130:26:130:80 | call to String.init(contentsOf:) | GRDB.swift:149:29:149:29 | remoteString | -| GRDB.swift:130:26:130:80 | call to String.init(contentsOf:) | GRDB.swift:150:29:150:29 | remoteString | -| GRDB.swift:130:26:130:80 | call to String.init(contentsOf:) | GRDB.swift:151:29:151:29 | remoteString | -| GRDB.swift:164:26:164:80 | call to String.init(contentsOf:) | GRDB.swift:166:32:166:32 | remoteString | -| GRDB.swift:164:26:164:80 | call to String.init(contentsOf:) | GRDB.swift:167:39:167:39 | remoteString | -| GRDB.swift:164:26:164:80 | call to String.init(contentsOf:) | GRDB.swift:168:49:168:49 | remoteString | -| GRDB.swift:164:26:164:80 | call to String.init(contentsOf:) | GRDB.swift:169:38:169:38 | remoteString | -| GRDB.swift:164:26:164:80 | call to String.init(contentsOf:) | GRDB.swift:170:22:170:22 | remoteString | -| GRDB.swift:164:26:164:80 | call to String.init(contentsOf:) | GRDB.swift:172:22:172:22 | remoteString | -| GRDB.swift:185:26:185:80 | call to String.init(contentsOf:) | GRDB.swift:187:33:187:33 | remoteString | -| GRDB.swift:185:26:185:80 | call to String.init(contentsOf:) | GRDB.swift:190:32:190:32 | remoteString | -| GRDB.swift:185:26:185:80 | call to String.init(contentsOf:) | GRDB.swift:193:37:193:37 | remoteString | -| GRDB.swift:199:26:199:80 | call to String.init(contentsOf:) | GRDB.swift:201:36:201:36 | remoteString | -| GRDB.swift:207:26:207:80 | call to String.init(contentsOf:) | GRDB.swift:209:41:209:41 | remoteString | -| GRDB.swift:207:26:207:80 | call to String.init(contentsOf:) | GRDB.swift:210:44:210:44 | remoteString | -| GRDB.swift:207:26:207:80 | call to String.init(contentsOf:) | GRDB.swift:211:47:211:47 | remoteString | -| GRDB.swift:207:26:207:80 | call to String.init(contentsOf:) | GRDB.swift:212:47:212:47 | remoteString | -| GRDB.swift:222:26:222:80 | call to String.init(contentsOf:) | GRDB.swift:224:37:224:37 | remoteString | -| GRDB.swift:222:26:222:80 | call to String.init(contentsOf:) | GRDB.swift:225:37:225:37 | remoteString | -| GRDB.swift:222:26:222:80 | call to String.init(contentsOf:) | GRDB.swift:229:37:229:37 | remoteString | -| GRDB.swift:222:26:222:80 | call to String.init(contentsOf:) | GRDB.swift:230:37:230:37 | remoteString | -| GRDB.swift:222:26:222:80 | call to String.init(contentsOf:) | GRDB.swift:234:36:234:36 | remoteString | -| GRDB.swift:222:26:222:80 | call to String.init(contentsOf:) | GRDB.swift:235:36:235:36 | remoteString | -| GRDB.swift:242:26:242:80 | call to String.init(contentsOf:) | GRDB.swift:244:38:244:38 | remoteString | -| GRDB.swift:250:26:250:80 | call to String.init(contentsOf:) | GRDB.swift:252:32:252:32 | remoteString | -| GRDB.swift:250:26:250:80 | call to String.init(contentsOf:) | GRDB.swift:253:32:253:32 | remoteString | -| GRDB.swift:250:26:250:80 | call to String.init(contentsOf:) | GRDB.swift:254:32:254:32 | remoteString | -| GRDB.swift:250:26:250:80 | call to String.init(contentsOf:) | GRDB.swift:255:32:255:32 | remoteString | -| GRDB.swift:250:26:250:80 | call to String.init(contentsOf:) | GRDB.swift:261:29:261:29 | remoteString | -| GRDB.swift:250:26:250:80 | call to String.init(contentsOf:) | GRDB.swift:262:29:262:29 | remoteString | -| GRDB.swift:250:26:250:80 | call to String.init(contentsOf:) | GRDB.swift:263:29:263:29 | remoteString | -| GRDB.swift:250:26:250:80 | call to String.init(contentsOf:) | GRDB.swift:264:29:264:29 | remoteString | -| GRDB.swift:250:26:250:80 | call to String.init(contentsOf:) | GRDB.swift:270:29:270:29 | remoteString | -| GRDB.swift:250:26:250:80 | call to String.init(contentsOf:) | GRDB.swift:271:29:271:29 | remoteString | -| GRDB.swift:250:26:250:80 | call to String.init(contentsOf:) | GRDB.swift:272:29:272:29 | remoteString | -| GRDB.swift:250:26:250:80 | call to String.init(contentsOf:) | GRDB.swift:273:29:273:29 | remoteString | -| GRDB.swift:250:26:250:80 | call to String.init(contentsOf:) | GRDB.swift:279:29:279:29 | remoteString | -| GRDB.swift:250:26:250:80 | call to String.init(contentsOf:) | GRDB.swift:280:29:280:29 | remoteString | -| GRDB.swift:250:26:250:80 | call to String.init(contentsOf:) | GRDB.swift:281:29:281:29 | remoteString | -| GRDB.swift:250:26:250:80 | call to String.init(contentsOf:) | GRDB.swift:282:29:282:29 | remoteString | -| GRDB.swift:291:26:291:80 | call to String.init(contentsOf:) | GRDB.swift:293:53:293:53 | remoteString | -| GRDB.swift:291:26:291:80 | call to String.init(contentsOf:) | GRDB.swift:294:53:294:53 | remoteString | -| GRDB.swift:291:26:291:80 | call to String.init(contentsOf:) | GRDB.swift:295:53:295:53 | remoteString | -| GRDB.swift:291:26:291:80 | call to String.init(contentsOf:) | GRDB.swift:296:53:296:53 | remoteString | -| GRDB.swift:291:26:291:80 | call to String.init(contentsOf:) | GRDB.swift:302:50:302:50 | remoteString | -| GRDB.swift:291:26:291:80 | call to String.init(contentsOf:) | GRDB.swift:303:50:303:50 | remoteString | -| GRDB.swift:291:26:291:80 | call to String.init(contentsOf:) | GRDB.swift:304:50:304:50 | remoteString | -| GRDB.swift:291:26:291:80 | call to String.init(contentsOf:) | GRDB.swift:305:50:305:50 | remoteString | -| GRDB.swift:291:26:291:80 | call to String.init(contentsOf:) | GRDB.swift:311:50:311:50 | remoteString | -| GRDB.swift:291:26:291:80 | call to String.init(contentsOf:) | GRDB.swift:312:50:312:50 | remoteString | -| GRDB.swift:291:26:291:80 | call to String.init(contentsOf:) | GRDB.swift:313:50:313:50 | remoteString | -| GRDB.swift:291:26:291:80 | call to String.init(contentsOf:) | GRDB.swift:314:50:314:50 | remoteString | -| GRDB.swift:291:26:291:80 | call to String.init(contentsOf:) | GRDB.swift:320:50:320:50 | remoteString | -| GRDB.swift:291:26:291:80 | call to String.init(contentsOf:) | GRDB.swift:321:50:321:50 | remoteString | -| GRDB.swift:291:26:291:80 | call to String.init(contentsOf:) | GRDB.swift:322:50:322:50 | remoteString | -| GRDB.swift:291:26:291:80 | call to String.init(contentsOf:) | GRDB.swift:323:50:323:50 | remoteString | -| GRDB.swift:332:26:332:80 | call to String.init(contentsOf:) | GRDB.swift:334:57:334:57 | remoteString | -| GRDB.swift:332:26:332:80 | call to String.init(contentsOf:) | GRDB.swift:335:57:335:57 | remoteString | -| GRDB.swift:342:26:342:80 | call to String.init(contentsOf:) | GRDB.swift:344:51:344:51 | remoteString | -| GRDB.swift:342:26:342:80 | call to String.init(contentsOf:) | GRDB.swift:345:51:345:51 | remoteString | -| GRDB.swift:342:26:342:80 | call to String.init(contentsOf:) | GRDB.swift:346:66:346:66 | remoteString | -| GRDB.swift:342:26:342:80 | call to String.init(contentsOf:) | GRDB.swift:347:66:347:66 | remoteString | -| GRDB.swift:342:26:342:80 | call to String.init(contentsOf:) | GRDB.swift:348:69:348:69 | remoteString | -| GRDB.swift:342:26:342:80 | call to String.init(contentsOf:) | GRDB.swift:349:84:349:84 | remoteString | -| GRDB.swift:342:26:342:80 | call to String.init(contentsOf:) | GRDB.swift:350:69:350:69 | remoteString | -| GRDB.swift:342:26:342:80 | call to String.init(contentsOf:) | GRDB.swift:351:84:351:84 | remoteString | -| SQLite.swift:62:25:62:79 | call to String.init(contentsOf:) | SQLite.swift:73:17:73:17 | unsafeQuery1 | -| SQLite.swift:62:25:62:79 | call to String.init(contentsOf:) | SQLite.swift:74:17:74:17 | unsafeQuery2 | -| SQLite.swift:62:25:62:79 | call to String.init(contentsOf:) | SQLite.swift:75:17:75:17 | unsafeQuery3 | -| SQLite.swift:62:25:62:79 | call to String.init(contentsOf:) | SQLite.swift:83:29:83:29 | unsafeQuery3 | -| SQLite.swift:62:25:62:79 | call to String.init(contentsOf:) | SQLite.swift:95:32:95:32 | remoteString | -| SQLite.swift:62:25:62:79 | call to String.init(contentsOf:) | SQLite.swift:100:29:100:29 | unsafeQuery1 | -| SQLite.swift:62:25:62:79 | call to String.init(contentsOf:) | SQLite.swift:103:29:103:29 | unsafeQuery1 | -| SQLite.swift:62:25:62:79 | call to String.init(contentsOf:) | SQLite.swift:106:29:106:29 | unsafeQuery1 | -| SQLite.swift:62:25:62:79 | call to String.init(contentsOf:) | SQLite.swift:109:13:109:13 | unsafeQuery1 | -| SQLite.swift:62:25:62:79 | call to String.init(contentsOf:) | SQLite.swift:111:13:111:13 | unsafeQuery1 | -| SQLite.swift:62:25:62:79 | call to String.init(contentsOf:) | SQLite.swift:113:13:113:13 | unsafeQuery1 | -| SQLite.swift:62:25:62:79 | call to String.init(contentsOf:) | SQLite.swift:115:16:115:16 | unsafeQuery1 | -| SQLite.swift:62:25:62:79 | call to String.init(contentsOf:) | SQLite.swift:117:16:117:16 | unsafeQuery1 | -| SQLite.swift:62:25:62:79 | call to String.init(contentsOf:) | SQLite.swift:119:16:119:16 | unsafeQuery1 | -| SQLite.swift:62:25:62:79 | call to String.init(contentsOf:) | SQLite.swift:132:20:132:20 | remoteString | -| other.swift:46:25:46:79 | call to String.init(contentsOf:) | other.swift:50:22:50:22 | remoteString | -| other.swift:46:25:46:79 | call to String.init(contentsOf:) | other.swift:52:14:52:14 | remoteString | -| other.swift:46:25:46:79 | call to String.init(contentsOf:) | other.swift:53:14:53:14 | remoteString | -| other.swift:46:25:46:79 | call to String.init(contentsOf:) | other.swift:54:31:54:31 | remoteString | -| other.swift:46:25:46:79 | call to String.init(contentsOf:) | other.swift:55:14:55:14 | remoteString | -| other.swift:46:25:46:79 | call to String.init(contentsOf:) | other.swift:57:16:57:16 | remoteString | -| other.swift:54:31:54:31 | remoteString | other.swift:54:14:54:43 | call to NSString.init(string:) | -| sqlite3_c_api.swift:122:26:122:80 | call to String.init(contentsOf:) | sqlite3_c_api.swift:133:33:133:33 | unsafeQuery1 | -| sqlite3_c_api.swift:122:26:122:80 | call to String.init(contentsOf:) | sqlite3_c_api.swift:134:33:134:33 | unsafeQuery2 | -| sqlite3_c_api.swift:122:26:122:80 | call to String.init(contentsOf:) | sqlite3_c_api.swift:135:33:135:33 | unsafeQuery3 | -| sqlite3_c_api.swift:122:26:122:80 | call to String.init(contentsOf:) | sqlite3_c_api.swift:145:26:145:26 | unsafeQuery3 | -| sqlite3_c_api.swift:122:26:122:80 | call to String.init(contentsOf:) | sqlite3_c_api.swift:175:29:175:29 | unsafeQuery3 | -| sqlite3_c_api.swift:122:26:122:80 | call to String.init(contentsOf:) | sqlite3_c_api.swift:183:29:183:29 | unsafeQuery3 | -| sqlite3_c_api.swift:122:26:122:80 | call to String.init(contentsOf:) | sqlite3_c_api.swift:189:13:189:13 | unsafeQuery3 | -| sqlite3_c_api.swift:189:13:189:13 | unsafeQuery3 | sqlite3_c_api.swift:189:13:189:58 | call to data(using:allowLossyConversion:) | -| sqlite3_c_api.swift:189:13:189:58 | call to data(using:allowLossyConversion:) | sqlite3_c_api.swift:190:2:190:2 | data | -| sqlite3_c_api.swift:190:2:190:2 | data | sqlite3_c_api.swift:190:21:190:21 | [post] buffer | -| sqlite3_c_api.swift:190:21:190:21 | [post] buffer | sqlite3_c_api.swift:194:28:194:28 | buffer | -| sqlite3_c_api.swift:190:21:190:21 | [post] buffer | sqlite3_c_api.swift:202:31:202:31 | buffer | -| sqlite3_c_api.swift:190:21:190:21 | [post] buffer | sqlite3_c_api.swift:210:31:210:31 | buffer | +| GRDB.swift:104:25:104:79 | call to String.init(contentsOf:) | GRDB.swift:106:41:106:41 | remoteString | provenance | | +| GRDB.swift:104:25:104:79 | call to String.init(contentsOf:) | GRDB.swift:108:41:108:41 | remoteString | provenance | | +| GRDB.swift:104:25:104:79 | call to String.init(contentsOf:) | GRDB.swift:111:43:111:43 | remoteString | provenance | | +| GRDB.swift:104:25:104:79 | call to String.init(contentsOf:) | GRDB.swift:114:51:114:51 | remoteString | provenance | | +| GRDB.swift:104:25:104:79 | call to String.init(contentsOf:) | GRDB.swift:117:27:117:27 | remoteString | provenance | | +| GRDB.swift:104:25:104:79 | call to String.init(contentsOf:) | GRDB.swift:119:27:119:27 | remoteString | provenance | | +| GRDB.swift:104:25:104:79 | call to String.init(contentsOf:) | GRDB.swift:122:41:122:41 | remoteString | provenance | | +| GRDB.swift:104:25:104:79 | call to String.init(contentsOf:) | GRDB.swift:124:41:124:41 | remoteString | provenance | | +| GRDB.swift:130:26:130:80 | call to String.init(contentsOf:) | GRDB.swift:132:39:132:39 | remoteString | provenance | | +| GRDB.swift:130:26:130:80 | call to String.init(contentsOf:) | GRDB.swift:135:46:135:46 | remoteString | provenance | | +| GRDB.swift:130:26:130:80 | call to String.init(contentsOf:) | GRDB.swift:138:56:138:56 | remoteString | provenance | | +| GRDB.swift:130:26:130:80 | call to String.init(contentsOf:) | GRDB.swift:141:45:141:45 | remoteString | provenance | | +| GRDB.swift:130:26:130:80 | call to String.init(contentsOf:) | GRDB.swift:144:29:144:29 | remoteString | provenance | | +| GRDB.swift:130:26:130:80 | call to String.init(contentsOf:) | GRDB.swift:145:29:145:29 | remoteString | provenance | | +| GRDB.swift:130:26:130:80 | call to String.init(contentsOf:) | GRDB.swift:146:29:146:29 | remoteString | provenance | | +| GRDB.swift:130:26:130:80 | call to String.init(contentsOf:) | GRDB.swift:147:29:147:29 | remoteString | provenance | | +| GRDB.swift:130:26:130:80 | call to String.init(contentsOf:) | GRDB.swift:148:29:148:29 | remoteString | provenance | | +| GRDB.swift:130:26:130:80 | call to String.init(contentsOf:) | GRDB.swift:149:29:149:29 | remoteString | provenance | | +| GRDB.swift:130:26:130:80 | call to String.init(contentsOf:) | GRDB.swift:150:29:150:29 | remoteString | provenance | | +| GRDB.swift:130:26:130:80 | call to String.init(contentsOf:) | GRDB.swift:151:29:151:29 | remoteString | provenance | | +| GRDB.swift:164:26:164:80 | call to String.init(contentsOf:) | GRDB.swift:166:32:166:32 | remoteString | provenance | | +| GRDB.swift:164:26:164:80 | call to String.init(contentsOf:) | GRDB.swift:167:39:167:39 | remoteString | provenance | | +| GRDB.swift:164:26:164:80 | call to String.init(contentsOf:) | GRDB.swift:168:49:168:49 | remoteString | provenance | | +| GRDB.swift:164:26:164:80 | call to String.init(contentsOf:) | GRDB.swift:169:38:169:38 | remoteString | provenance | | +| GRDB.swift:164:26:164:80 | call to String.init(contentsOf:) | GRDB.swift:170:22:170:22 | remoteString | provenance | | +| GRDB.swift:164:26:164:80 | call to String.init(contentsOf:) | GRDB.swift:172:22:172:22 | remoteString | provenance | | +| GRDB.swift:185:26:185:80 | call to String.init(contentsOf:) | GRDB.swift:187:33:187:33 | remoteString | provenance | | +| GRDB.swift:185:26:185:80 | call to String.init(contentsOf:) | GRDB.swift:190:32:190:32 | remoteString | provenance | | +| GRDB.swift:185:26:185:80 | call to String.init(contentsOf:) | GRDB.swift:193:37:193:37 | remoteString | provenance | | +| GRDB.swift:199:26:199:80 | call to String.init(contentsOf:) | GRDB.swift:201:36:201:36 | remoteString | provenance | | +| GRDB.swift:207:26:207:80 | call to String.init(contentsOf:) | GRDB.swift:209:41:209:41 | remoteString | provenance | | +| GRDB.swift:207:26:207:80 | call to String.init(contentsOf:) | GRDB.swift:210:44:210:44 | remoteString | provenance | | +| GRDB.swift:207:26:207:80 | call to String.init(contentsOf:) | GRDB.swift:211:47:211:47 | remoteString | provenance | | +| GRDB.swift:207:26:207:80 | call to String.init(contentsOf:) | GRDB.swift:212:47:212:47 | remoteString | provenance | | +| GRDB.swift:222:26:222:80 | call to String.init(contentsOf:) | GRDB.swift:224:37:224:37 | remoteString | provenance | | +| GRDB.swift:222:26:222:80 | call to String.init(contentsOf:) | GRDB.swift:225:37:225:37 | remoteString | provenance | | +| GRDB.swift:222:26:222:80 | call to String.init(contentsOf:) | GRDB.swift:229:37:229:37 | remoteString | provenance | | +| GRDB.swift:222:26:222:80 | call to String.init(contentsOf:) | GRDB.swift:230:37:230:37 | remoteString | provenance | | +| GRDB.swift:222:26:222:80 | call to String.init(contentsOf:) | GRDB.swift:234:36:234:36 | remoteString | provenance | | +| GRDB.swift:222:26:222:80 | call to String.init(contentsOf:) | GRDB.swift:235:36:235:36 | remoteString | provenance | | +| GRDB.swift:242:26:242:80 | call to String.init(contentsOf:) | GRDB.swift:244:38:244:38 | remoteString | provenance | | +| GRDB.swift:250:26:250:80 | call to String.init(contentsOf:) | GRDB.swift:252:32:252:32 | remoteString | provenance | | +| GRDB.swift:250:26:250:80 | call to String.init(contentsOf:) | GRDB.swift:253:32:253:32 | remoteString | provenance | | +| GRDB.swift:250:26:250:80 | call to String.init(contentsOf:) | GRDB.swift:254:32:254:32 | remoteString | provenance | | +| GRDB.swift:250:26:250:80 | call to String.init(contentsOf:) | GRDB.swift:255:32:255:32 | remoteString | provenance | | +| GRDB.swift:250:26:250:80 | call to String.init(contentsOf:) | GRDB.swift:261:29:261:29 | remoteString | provenance | | +| GRDB.swift:250:26:250:80 | call to String.init(contentsOf:) | GRDB.swift:262:29:262:29 | remoteString | provenance | | +| GRDB.swift:250:26:250:80 | call to String.init(contentsOf:) | GRDB.swift:263:29:263:29 | remoteString | provenance | | +| GRDB.swift:250:26:250:80 | call to String.init(contentsOf:) | GRDB.swift:264:29:264:29 | remoteString | provenance | | +| GRDB.swift:250:26:250:80 | call to String.init(contentsOf:) | GRDB.swift:270:29:270:29 | remoteString | provenance | | +| GRDB.swift:250:26:250:80 | call to String.init(contentsOf:) | GRDB.swift:271:29:271:29 | remoteString | provenance | | +| GRDB.swift:250:26:250:80 | call to String.init(contentsOf:) | GRDB.swift:272:29:272:29 | remoteString | provenance | | +| GRDB.swift:250:26:250:80 | call to String.init(contentsOf:) | GRDB.swift:273:29:273:29 | remoteString | provenance | | +| GRDB.swift:250:26:250:80 | call to String.init(contentsOf:) | GRDB.swift:279:29:279:29 | remoteString | provenance | | +| GRDB.swift:250:26:250:80 | call to String.init(contentsOf:) | GRDB.swift:280:29:280:29 | remoteString | provenance | | +| GRDB.swift:250:26:250:80 | call to String.init(contentsOf:) | GRDB.swift:281:29:281:29 | remoteString | provenance | | +| GRDB.swift:250:26:250:80 | call to String.init(contentsOf:) | GRDB.swift:282:29:282:29 | remoteString | provenance | | +| GRDB.swift:291:26:291:80 | call to String.init(contentsOf:) | GRDB.swift:293:53:293:53 | remoteString | provenance | | +| GRDB.swift:291:26:291:80 | call to String.init(contentsOf:) | GRDB.swift:294:53:294:53 | remoteString | provenance | | +| GRDB.swift:291:26:291:80 | call to String.init(contentsOf:) | GRDB.swift:295:53:295:53 | remoteString | provenance | | +| GRDB.swift:291:26:291:80 | call to String.init(contentsOf:) | GRDB.swift:296:53:296:53 | remoteString | provenance | | +| GRDB.swift:291:26:291:80 | call to String.init(contentsOf:) | GRDB.swift:302:50:302:50 | remoteString | provenance | | +| GRDB.swift:291:26:291:80 | call to String.init(contentsOf:) | GRDB.swift:303:50:303:50 | remoteString | provenance | | +| GRDB.swift:291:26:291:80 | call to String.init(contentsOf:) | GRDB.swift:304:50:304:50 | remoteString | provenance | | +| GRDB.swift:291:26:291:80 | call to String.init(contentsOf:) | GRDB.swift:305:50:305:50 | remoteString | provenance | | +| GRDB.swift:291:26:291:80 | call to String.init(contentsOf:) | GRDB.swift:311:50:311:50 | remoteString | provenance | | +| GRDB.swift:291:26:291:80 | call to String.init(contentsOf:) | GRDB.swift:312:50:312:50 | remoteString | provenance | | +| GRDB.swift:291:26:291:80 | call to String.init(contentsOf:) | GRDB.swift:313:50:313:50 | remoteString | provenance | | +| GRDB.swift:291:26:291:80 | call to String.init(contentsOf:) | GRDB.swift:314:50:314:50 | remoteString | provenance | | +| GRDB.swift:291:26:291:80 | call to String.init(contentsOf:) | GRDB.swift:320:50:320:50 | remoteString | provenance | | +| GRDB.swift:291:26:291:80 | call to String.init(contentsOf:) | GRDB.swift:321:50:321:50 | remoteString | provenance | | +| GRDB.swift:291:26:291:80 | call to String.init(contentsOf:) | GRDB.swift:322:50:322:50 | remoteString | provenance | | +| GRDB.swift:291:26:291:80 | call to String.init(contentsOf:) | GRDB.swift:323:50:323:50 | remoteString | provenance | | +| GRDB.swift:332:26:332:80 | call to String.init(contentsOf:) | GRDB.swift:334:57:334:57 | remoteString | provenance | | +| GRDB.swift:332:26:332:80 | call to String.init(contentsOf:) | GRDB.swift:335:57:335:57 | remoteString | provenance | | +| GRDB.swift:342:26:342:80 | call to String.init(contentsOf:) | GRDB.swift:344:51:344:51 | remoteString | provenance | | +| GRDB.swift:342:26:342:80 | call to String.init(contentsOf:) | GRDB.swift:345:51:345:51 | remoteString | provenance | | +| GRDB.swift:342:26:342:80 | call to String.init(contentsOf:) | GRDB.swift:346:66:346:66 | remoteString | provenance | | +| GRDB.swift:342:26:342:80 | call to String.init(contentsOf:) | GRDB.swift:347:66:347:66 | remoteString | provenance | | +| GRDB.swift:342:26:342:80 | call to String.init(contentsOf:) | GRDB.swift:348:69:348:69 | remoteString | provenance | | +| GRDB.swift:342:26:342:80 | call to String.init(contentsOf:) | GRDB.swift:349:84:349:84 | remoteString | provenance | | +| GRDB.swift:342:26:342:80 | call to String.init(contentsOf:) | GRDB.swift:350:69:350:69 | remoteString | provenance | | +| GRDB.swift:342:26:342:80 | call to String.init(contentsOf:) | GRDB.swift:351:84:351:84 | remoteString | provenance | | +| SQLite.swift:62:25:62:79 | call to String.init(contentsOf:) | SQLite.swift:73:17:73:17 | unsafeQuery1 | provenance | | +| SQLite.swift:62:25:62:79 | call to String.init(contentsOf:) | SQLite.swift:74:17:74:17 | unsafeQuery2 | provenance | | +| SQLite.swift:62:25:62:79 | call to String.init(contentsOf:) | SQLite.swift:75:17:75:17 | unsafeQuery3 | provenance | | +| SQLite.swift:62:25:62:79 | call to String.init(contentsOf:) | SQLite.swift:83:29:83:29 | unsafeQuery3 | provenance | | +| SQLite.swift:62:25:62:79 | call to String.init(contentsOf:) | SQLite.swift:95:32:95:32 | remoteString | provenance | | +| SQLite.swift:62:25:62:79 | call to String.init(contentsOf:) | SQLite.swift:100:29:100:29 | unsafeQuery1 | provenance | | +| SQLite.swift:62:25:62:79 | call to String.init(contentsOf:) | SQLite.swift:103:29:103:29 | unsafeQuery1 | provenance | | +| SQLite.swift:62:25:62:79 | call to String.init(contentsOf:) | SQLite.swift:106:29:106:29 | unsafeQuery1 | provenance | | +| SQLite.swift:62:25:62:79 | call to String.init(contentsOf:) | SQLite.swift:109:13:109:13 | unsafeQuery1 | provenance | | +| SQLite.swift:62:25:62:79 | call to String.init(contentsOf:) | SQLite.swift:111:13:111:13 | unsafeQuery1 | provenance | | +| SQLite.swift:62:25:62:79 | call to String.init(contentsOf:) | SQLite.swift:113:13:113:13 | unsafeQuery1 | provenance | | +| SQLite.swift:62:25:62:79 | call to String.init(contentsOf:) | SQLite.swift:115:16:115:16 | unsafeQuery1 | provenance | | +| SQLite.swift:62:25:62:79 | call to String.init(contentsOf:) | SQLite.swift:117:16:117:16 | unsafeQuery1 | provenance | | +| SQLite.swift:62:25:62:79 | call to String.init(contentsOf:) | SQLite.swift:119:16:119:16 | unsafeQuery1 | provenance | | +| SQLite.swift:62:25:62:79 | call to String.init(contentsOf:) | SQLite.swift:132:20:132:20 | remoteString | provenance | | +| other.swift:46:25:46:79 | call to String.init(contentsOf:) | other.swift:50:22:50:22 | remoteString | provenance | | +| other.swift:46:25:46:79 | call to String.init(contentsOf:) | other.swift:52:14:52:14 | remoteString | provenance | | +| other.swift:46:25:46:79 | call to String.init(contentsOf:) | other.swift:53:14:53:14 | remoteString | provenance | | +| other.swift:46:25:46:79 | call to String.init(contentsOf:) | other.swift:54:31:54:31 | remoteString | provenance | | +| other.swift:46:25:46:79 | call to String.init(contentsOf:) | other.swift:55:14:55:14 | remoteString | provenance | | +| other.swift:46:25:46:79 | call to String.init(contentsOf:) | other.swift:57:16:57:16 | remoteString | provenance | | +| other.swift:54:31:54:31 | remoteString | other.swift:54:14:54:43 | call to NSString.init(string:) | provenance | | +| sqlite3_c_api.swift:122:26:122:80 | call to String.init(contentsOf:) | sqlite3_c_api.swift:133:33:133:33 | unsafeQuery1 | provenance | | +| sqlite3_c_api.swift:122:26:122:80 | call to String.init(contentsOf:) | sqlite3_c_api.swift:134:33:134:33 | unsafeQuery2 | provenance | | +| sqlite3_c_api.swift:122:26:122:80 | call to String.init(contentsOf:) | sqlite3_c_api.swift:135:33:135:33 | unsafeQuery3 | provenance | | +| sqlite3_c_api.swift:122:26:122:80 | call to String.init(contentsOf:) | sqlite3_c_api.swift:145:26:145:26 | unsafeQuery3 | provenance | | +| sqlite3_c_api.swift:122:26:122:80 | call to String.init(contentsOf:) | sqlite3_c_api.swift:175:29:175:29 | unsafeQuery3 | provenance | | +| sqlite3_c_api.swift:122:26:122:80 | call to String.init(contentsOf:) | sqlite3_c_api.swift:183:29:183:29 | unsafeQuery3 | provenance | | +| sqlite3_c_api.swift:122:26:122:80 | call to String.init(contentsOf:) | sqlite3_c_api.swift:189:13:189:13 | unsafeQuery3 | provenance | | +| sqlite3_c_api.swift:189:13:189:13 | unsafeQuery3 | sqlite3_c_api.swift:189:13:189:58 | call to data(using:allowLossyConversion:) | provenance | | +| sqlite3_c_api.swift:189:13:189:58 | call to data(using:allowLossyConversion:) | sqlite3_c_api.swift:190:2:190:2 | data | provenance | | +| sqlite3_c_api.swift:190:2:190:2 | data | sqlite3_c_api.swift:190:21:190:21 | [post] buffer | provenance | | +| sqlite3_c_api.swift:190:21:190:21 | [post] buffer | sqlite3_c_api.swift:194:28:194:28 | buffer | provenance | | +| sqlite3_c_api.swift:190:21:190:21 | [post] buffer | sqlite3_c_api.swift:202:31:202:31 | buffer | provenance | | +| sqlite3_c_api.swift:190:21:190:21 | [post] buffer | sqlite3_c_api.swift:210:31:210:31 | buffer | provenance | | nodes | GRDB.swift:104:25:104:79 | call to String.init(contentsOf:) | semmle.label | call to String.init(contentsOf:) | | GRDB.swift:106:41:106:41 | remoteString | semmle.label | remoteString | diff --git a/swift/ql/test/query-tests/Security/CWE-094/UnsafeJsEval.expected b/swift/ql/test/query-tests/Security/CWE-094/UnsafeJsEval.expected index 65c4c5eb2c1..f048e06cb85 100644 --- a/swift/ql/test/query-tests/Security/CWE-094/UnsafeJsEval.expected +++ b/swift/ql/test/query-tests/Security/CWE-094/UnsafeJsEval.expected @@ -1,58 +1,58 @@ edges -| UnsafeJsEval.swift:204:7:204:66 | try! ... | UnsafeJsEval.swift:265:13:265:13 | string | -| UnsafeJsEval.swift:204:7:204:66 | try! ... | UnsafeJsEval.swift:268:13:268:13 | string | -| UnsafeJsEval.swift:204:7:204:66 | try! ... | UnsafeJsEval.swift:276:13:276:13 | string | -| UnsafeJsEval.swift:204:7:204:66 | try! ... | UnsafeJsEval.swift:279:13:279:13 | string | -| UnsafeJsEval.swift:204:7:204:66 | try! ... | UnsafeJsEval.swift:285:13:285:13 | string | -| UnsafeJsEval.swift:204:7:204:66 | try! ... | UnsafeJsEval.swift:299:13:299:13 | string | -| UnsafeJsEval.swift:204:12:204:66 | call to String.init(contentsOf:) | UnsafeJsEval.swift:204:7:204:66 | try! ... | -| UnsafeJsEval.swift:205:7:205:35 | try! ... | UnsafeJsEval.swift:265:13:265:13 | string | -| UnsafeJsEval.swift:205:7:205:35 | try! ... | UnsafeJsEval.swift:268:13:268:13 | string | -| UnsafeJsEval.swift:205:7:205:35 | try! ... | UnsafeJsEval.swift:276:13:276:13 | string | -| UnsafeJsEval.swift:205:7:205:35 | try! ... | UnsafeJsEval.swift:279:13:279:13 | string | -| UnsafeJsEval.swift:205:7:205:35 | try! ... | UnsafeJsEval.swift:285:13:285:13 | string | -| UnsafeJsEval.swift:205:7:205:35 | try! ... | UnsafeJsEval.swift:299:13:299:13 | string | -| UnsafeJsEval.swift:205:12:205:35 | call to String.init(contentsOf:) | UnsafeJsEval.swift:205:7:205:35 | try! ... | -| UnsafeJsEval.swift:208:7:208:58 | ... .+(_:_:) ... | UnsafeJsEval.swift:265:13:265:13 | string | -| UnsafeJsEval.swift:208:7:208:58 | ... .+(_:_:) ... | UnsafeJsEval.swift:268:13:268:13 | string | -| UnsafeJsEval.swift:208:7:208:58 | ... .+(_:_:) ... | UnsafeJsEval.swift:276:13:276:13 | string | -| UnsafeJsEval.swift:208:7:208:58 | ... .+(_:_:) ... | UnsafeJsEval.swift:279:13:279:13 | string | -| UnsafeJsEval.swift:208:7:208:58 | ... .+(_:_:) ... | UnsafeJsEval.swift:285:13:285:13 | string | -| UnsafeJsEval.swift:208:7:208:58 | ... .+(_:_:) ... | UnsafeJsEval.swift:299:13:299:13 | string | -| UnsafeJsEval.swift:208:30:208:53 | call to String.init(contentsOf:) | UnsafeJsEval.swift:208:7:208:58 | ... .+(_:_:) ... | -| UnsafeJsEval.swift:211:19:211:60 | call to Data.init(_:) | UnsafeJsEval.swift:214:24:214:24 | remoteData | -| UnsafeJsEval.swift:211:24:211:56 | .utf8 | UnsafeJsEval.swift:211:19:211:60 | call to Data.init(_:) | -| UnsafeJsEval.swift:211:30:211:53 | call to String.init(contentsOf:) | UnsafeJsEval.swift:211:24:211:56 | .utf8 | -| UnsafeJsEval.swift:214:7:214:49 | call to String.init(decoding:as:) | UnsafeJsEval.swift:265:13:265:13 | string | -| UnsafeJsEval.swift:214:7:214:49 | call to String.init(decoding:as:) | UnsafeJsEval.swift:268:13:268:13 | string | -| UnsafeJsEval.swift:214:7:214:49 | call to String.init(decoding:as:) | UnsafeJsEval.swift:276:13:276:13 | string | -| UnsafeJsEval.swift:214:7:214:49 | call to String.init(decoding:as:) | UnsafeJsEval.swift:279:13:279:13 | string | -| UnsafeJsEval.swift:214:7:214:49 | call to String.init(decoding:as:) | UnsafeJsEval.swift:285:13:285:13 | string | -| UnsafeJsEval.swift:214:7:214:49 | call to String.init(decoding:as:) | UnsafeJsEval.swift:299:13:299:13 | string | -| UnsafeJsEval.swift:214:24:214:24 | remoteData | UnsafeJsEval.swift:214:7:214:49 | call to String.init(decoding:as:) | -| UnsafeJsEval.swift:265:13:265:13 | string | UnsafeJsEval.swift:266:43:266:43 | string | -| UnsafeJsEval.swift:266:43:266:43 | string | UnsafeJsEval.swift:266:22:266:107 | call to WKUserScript.init(source:injectionTime:forMainFrameOnly:) | -| UnsafeJsEval.swift:268:13:268:13 | string | UnsafeJsEval.swift:269:43:269:43 | string | -| UnsafeJsEval.swift:269:43:269:43 | string | UnsafeJsEval.swift:269:22:269:124 | call to WKUserScript.init(source:injectionTime:forMainFrameOnly:in:) | -| UnsafeJsEval.swift:276:13:276:13 | string | UnsafeJsEval.swift:277:26:277:26 | string | -| UnsafeJsEval.swift:279:13:279:13 | string | UnsafeJsEval.swift:280:26:280:26 | string | -| UnsafeJsEval.swift:285:13:285:13 | string | UnsafeJsEval.swift:286:3:286:10 | .utf16 | -| UnsafeJsEval.swift:286:3:286:10 | .utf16 | UnsafeJsEval.swift:286:51:286:51 | stringBytes [Collection element] | -| UnsafeJsEval.swift:286:51:286:51 | stringBytes [Collection element] | UnsafeJsEval.swift:287:60:287:60 | stringBytes [Collection element] | -| UnsafeJsEval.swift:287:16:287:98 | call to JSStringRetain(_:) | UnsafeJsEval.swift:291:17:291:17 | jsstr | -| UnsafeJsEval.swift:287:31:287:97 | call to JSStringCreateWithCharacters(_:_:) | UnsafeJsEval.swift:287:16:287:98 | call to JSStringRetain(_:) | -| UnsafeJsEval.swift:287:60:287:60 | stringBytes | UnsafeJsEval.swift:287:60:287:72 | .baseAddress | -| UnsafeJsEval.swift:287:60:287:60 | stringBytes [Collection element] | UnsafeJsEval.swift:287:60:287:60 | stringBytes | -| UnsafeJsEval.swift:287:60:287:72 | .baseAddress | UnsafeJsEval.swift:287:31:287:97 | call to JSStringCreateWithCharacters(_:_:) | -| UnsafeJsEval.swift:299:13:299:13 | string | UnsafeJsEval.swift:300:3:300:10 | .utf8CString | -| UnsafeJsEval.swift:300:3:300:10 | .utf8CString | UnsafeJsEval.swift:300:48:300:48 | stringBytes [Collection element] | -| UnsafeJsEval.swift:300:48:300:48 | stringBytes [Collection element] | UnsafeJsEval.swift:301:61:301:61 | stringBytes [Collection element] | -| UnsafeJsEval.swift:301:16:301:85 | call to JSStringRetain(_:) | UnsafeJsEval.swift:305:17:305:17 | jsstr | -| UnsafeJsEval.swift:301:31:301:84 | call to JSStringCreateWithUTF8CString(_:) | UnsafeJsEval.swift:301:16:301:85 | call to JSStringRetain(_:) | -| UnsafeJsEval.swift:301:61:301:61 | stringBytes | UnsafeJsEval.swift:301:61:301:73 | .baseAddress | -| UnsafeJsEval.swift:301:61:301:61 | stringBytes [Collection element] | UnsafeJsEval.swift:301:61:301:61 | stringBytes | -| UnsafeJsEval.swift:301:61:301:73 | .baseAddress | UnsafeJsEval.swift:301:31:301:84 | call to JSStringCreateWithUTF8CString(_:) | -| UnsafeJsEval.swift:318:24:318:87 | call to String.init(contentsOf:) | UnsafeJsEval.swift:320:44:320:74 | ... .+(_:_:) ... | +| UnsafeJsEval.swift:204:7:204:66 | try! ... | UnsafeJsEval.swift:265:13:265:13 | string | provenance | | +| UnsafeJsEval.swift:204:7:204:66 | try! ... | UnsafeJsEval.swift:268:13:268:13 | string | provenance | | +| UnsafeJsEval.swift:204:7:204:66 | try! ... | UnsafeJsEval.swift:276:13:276:13 | string | provenance | | +| UnsafeJsEval.swift:204:7:204:66 | try! ... | UnsafeJsEval.swift:279:13:279:13 | string | provenance | | +| UnsafeJsEval.swift:204:7:204:66 | try! ... | UnsafeJsEval.swift:285:13:285:13 | string | provenance | | +| UnsafeJsEval.swift:204:7:204:66 | try! ... | UnsafeJsEval.swift:299:13:299:13 | string | provenance | | +| UnsafeJsEval.swift:204:12:204:66 | call to String.init(contentsOf:) | UnsafeJsEval.swift:204:7:204:66 | try! ... | provenance | | +| UnsafeJsEval.swift:205:7:205:35 | try! ... | UnsafeJsEval.swift:265:13:265:13 | string | provenance | | +| UnsafeJsEval.swift:205:7:205:35 | try! ... | UnsafeJsEval.swift:268:13:268:13 | string | provenance | | +| UnsafeJsEval.swift:205:7:205:35 | try! ... | UnsafeJsEval.swift:276:13:276:13 | string | provenance | | +| UnsafeJsEval.swift:205:7:205:35 | try! ... | UnsafeJsEval.swift:279:13:279:13 | string | provenance | | +| UnsafeJsEval.swift:205:7:205:35 | try! ... | UnsafeJsEval.swift:285:13:285:13 | string | provenance | | +| UnsafeJsEval.swift:205:7:205:35 | try! ... | UnsafeJsEval.swift:299:13:299:13 | string | provenance | | +| UnsafeJsEval.swift:205:12:205:35 | call to String.init(contentsOf:) | UnsafeJsEval.swift:205:7:205:35 | try! ... | provenance | | +| UnsafeJsEval.swift:208:7:208:58 | ... .+(_:_:) ... | UnsafeJsEval.swift:265:13:265:13 | string | provenance | | +| UnsafeJsEval.swift:208:7:208:58 | ... .+(_:_:) ... | UnsafeJsEval.swift:268:13:268:13 | string | provenance | | +| UnsafeJsEval.swift:208:7:208:58 | ... .+(_:_:) ... | UnsafeJsEval.swift:276:13:276:13 | string | provenance | | +| UnsafeJsEval.swift:208:7:208:58 | ... .+(_:_:) ... | UnsafeJsEval.swift:279:13:279:13 | string | provenance | | +| UnsafeJsEval.swift:208:7:208:58 | ... .+(_:_:) ... | UnsafeJsEval.swift:285:13:285:13 | string | provenance | | +| UnsafeJsEval.swift:208:7:208:58 | ... .+(_:_:) ... | UnsafeJsEval.swift:299:13:299:13 | string | provenance | | +| UnsafeJsEval.swift:208:30:208:53 | call to String.init(contentsOf:) | UnsafeJsEval.swift:208:7:208:58 | ... .+(_:_:) ... | provenance | | +| UnsafeJsEval.swift:211:19:211:60 | call to Data.init(_:) | UnsafeJsEval.swift:214:24:214:24 | remoteData | provenance | | +| UnsafeJsEval.swift:211:24:211:56 | .utf8 | UnsafeJsEval.swift:211:19:211:60 | call to Data.init(_:) | provenance | | +| UnsafeJsEval.swift:211:30:211:53 | call to String.init(contentsOf:) | UnsafeJsEval.swift:211:24:211:56 | .utf8 | provenance | | +| UnsafeJsEval.swift:214:7:214:49 | call to String.init(decoding:as:) | UnsafeJsEval.swift:265:13:265:13 | string | provenance | | +| UnsafeJsEval.swift:214:7:214:49 | call to String.init(decoding:as:) | UnsafeJsEval.swift:268:13:268:13 | string | provenance | | +| UnsafeJsEval.swift:214:7:214:49 | call to String.init(decoding:as:) | UnsafeJsEval.swift:276:13:276:13 | string | provenance | | +| UnsafeJsEval.swift:214:7:214:49 | call to String.init(decoding:as:) | UnsafeJsEval.swift:279:13:279:13 | string | provenance | | +| UnsafeJsEval.swift:214:7:214:49 | call to String.init(decoding:as:) | UnsafeJsEval.swift:285:13:285:13 | string | provenance | | +| UnsafeJsEval.swift:214:7:214:49 | call to String.init(decoding:as:) | UnsafeJsEval.swift:299:13:299:13 | string | provenance | | +| UnsafeJsEval.swift:214:24:214:24 | remoteData | UnsafeJsEval.swift:214:7:214:49 | call to String.init(decoding:as:) | provenance | | +| UnsafeJsEval.swift:265:13:265:13 | string | UnsafeJsEval.swift:266:43:266:43 | string | provenance | | +| UnsafeJsEval.swift:266:43:266:43 | string | UnsafeJsEval.swift:266:22:266:107 | call to WKUserScript.init(source:injectionTime:forMainFrameOnly:) | provenance | | +| UnsafeJsEval.swift:268:13:268:13 | string | UnsafeJsEval.swift:269:43:269:43 | string | provenance | | +| UnsafeJsEval.swift:269:43:269:43 | string | UnsafeJsEval.swift:269:22:269:124 | call to WKUserScript.init(source:injectionTime:forMainFrameOnly:in:) | provenance | | +| UnsafeJsEval.swift:276:13:276:13 | string | UnsafeJsEval.swift:277:26:277:26 | string | provenance | | +| UnsafeJsEval.swift:279:13:279:13 | string | UnsafeJsEval.swift:280:26:280:26 | string | provenance | | +| UnsafeJsEval.swift:285:13:285:13 | string | UnsafeJsEval.swift:286:3:286:10 | .utf16 | provenance | | +| UnsafeJsEval.swift:286:3:286:10 | .utf16 | UnsafeJsEval.swift:286:51:286:51 | stringBytes [Collection element] | provenance | | +| UnsafeJsEval.swift:286:51:286:51 | stringBytes [Collection element] | UnsafeJsEval.swift:287:60:287:60 | stringBytes [Collection element] | provenance | | +| UnsafeJsEval.swift:287:16:287:98 | call to JSStringRetain(_:) | UnsafeJsEval.swift:291:17:291:17 | jsstr | provenance | | +| UnsafeJsEval.swift:287:31:287:97 | call to JSStringCreateWithCharacters(_:_:) | UnsafeJsEval.swift:287:16:287:98 | call to JSStringRetain(_:) | provenance | | +| UnsafeJsEval.swift:287:60:287:60 | stringBytes | UnsafeJsEval.swift:287:60:287:72 | .baseAddress | provenance | | +| UnsafeJsEval.swift:287:60:287:60 | stringBytes [Collection element] | UnsafeJsEval.swift:287:60:287:60 | stringBytes | provenance | | +| UnsafeJsEval.swift:287:60:287:72 | .baseAddress | UnsafeJsEval.swift:287:31:287:97 | call to JSStringCreateWithCharacters(_:_:) | provenance | | +| UnsafeJsEval.swift:299:13:299:13 | string | UnsafeJsEval.swift:300:3:300:10 | .utf8CString | provenance | | +| UnsafeJsEval.swift:300:3:300:10 | .utf8CString | UnsafeJsEval.swift:300:48:300:48 | stringBytes [Collection element] | provenance | | +| UnsafeJsEval.swift:300:48:300:48 | stringBytes [Collection element] | UnsafeJsEval.swift:301:61:301:61 | stringBytes [Collection element] | provenance | | +| UnsafeJsEval.swift:301:16:301:85 | call to JSStringRetain(_:) | UnsafeJsEval.swift:305:17:305:17 | jsstr | provenance | | +| UnsafeJsEval.swift:301:31:301:84 | call to JSStringCreateWithUTF8CString(_:) | UnsafeJsEval.swift:301:16:301:85 | call to JSStringRetain(_:) | provenance | | +| UnsafeJsEval.swift:301:61:301:61 | stringBytes | UnsafeJsEval.swift:301:61:301:73 | .baseAddress | provenance | | +| UnsafeJsEval.swift:301:61:301:61 | stringBytes [Collection element] | UnsafeJsEval.swift:301:61:301:61 | stringBytes | provenance | | +| UnsafeJsEval.swift:301:61:301:73 | .baseAddress | UnsafeJsEval.swift:301:31:301:84 | call to JSStringCreateWithUTF8CString(_:) | provenance | | +| UnsafeJsEval.swift:318:24:318:87 | call to String.init(contentsOf:) | UnsafeJsEval.swift:320:44:320:74 | ... .+(_:_:) ... | provenance | | nodes | UnsafeJsEval.swift:204:7:204:66 | try! ... | semmle.label | try! ... | | UnsafeJsEval.swift:204:12:204:66 | call to String.init(contentsOf:) | semmle.label | call to String.init(contentsOf:) | diff --git a/swift/ql/test/query-tests/Security/CWE-1204/StaticInitializationVector.expected b/swift/ql/test/query-tests/Security/CWE-1204/StaticInitializationVector.expected index 74adec1c605..02fdbe6a6a4 100644 --- a/swift/ql/test/query-tests/Security/CWE-1204/StaticInitializationVector.expected +++ b/swift/ql/test/query-tests/Security/CWE-1204/StaticInitializationVector.expected @@ -1,44 +1,44 @@ edges -| rncryptor.swift:60:19:60:25 | call to Data.init(_:) | rncryptor.swift:68:104:68:104 | myConstIV1 | -| rncryptor.swift:60:19:60:25 | call to Data.init(_:) | rncryptor.swift:77:125:77:125 | myConstIV1 | -| rncryptor.swift:60:24:60:24 | 0 | rncryptor.swift:60:19:60:25 | call to Data.init(_:) | -| rncryptor.swift:61:19:61:27 | call to Data.init(_:) | rncryptor.swift:70:104:70:104 | myConstIV2 | -| rncryptor.swift:61:19:61:27 | call to Data.init(_:) | rncryptor.swift:79:133:79:133 | myConstIV2 | -| rncryptor.swift:61:24:61:24 | 123 | rncryptor.swift:61:19:61:27 | call to Data.init(_:) | -| rncryptor.swift:62:19:62:35 | call to Data.init(_:) | rncryptor.swift:72:84:72:84 | myConstIV3 | -| rncryptor.swift:62:19:62:35 | call to Data.init(_:) | rncryptor.swift:81:105:81:105 | myConstIV3 | -| rncryptor.swift:62:24:62:34 | [...] | rncryptor.swift:62:19:62:35 | call to Data.init(_:) | -| rncryptor.swift:63:19:63:28 | call to Data.init(_:) | rncryptor.swift:74:84:74:84 | myConstIV4 | -| rncryptor.swift:63:19:63:28 | call to Data.init(_:) | rncryptor.swift:83:113:83:113 | myConstIV4 | -| rncryptor.swift:63:24:63:24 | iv | rncryptor.swift:63:19:63:28 | call to Data.init(_:) | -| test.swift:53:19:53:34 | iv | test.swift:54:17:54:17 | iv | -| test.swift:85:3:85:3 | this string is constant | test.swift:89:10:89:28 | call to getConstantString() | -| test.swift:85:3:85:3 | this string is constant | test.swift:101:17:101:35 | call to getConstantString() | -| test.swift:89:2:89:34 | call to Array.init(_:) [Collection element] | test.swift:100:12:100:29 | call to getConstantArray() [Collection element] | -| test.swift:89:10:89:28 | call to getConstantString() | test.swift:89:10:89:30 | .utf8 | -| test.swift:89:10:89:30 | .utf8 | test.swift:89:2:89:34 | call to Array.init(_:) [Collection element] | -| test.swift:99:25:99:120 | [...] | test.swift:128:33:128:33 | iv | -| test.swift:99:25:99:120 | [...] | test.swift:135:22:135:22 | iv | -| test.swift:99:25:99:120 | [...] | test.swift:139:22:139:22 | iv | -| test.swift:99:25:99:120 | [...] | test.swift:140:22:140:22 | iv | -| test.swift:99:25:99:120 | [...] | test.swift:145:22:145:22 | iv | -| test.swift:99:25:99:120 | [...] | test.swift:146:22:146:22 | iv | -| test.swift:99:25:99:120 | [...] | test.swift:147:22:147:22 | iv | -| test.swift:99:25:99:120 | [...] | test.swift:147:22:147:22 | iv | -| test.swift:99:25:99:120 | [...] | test.swift:153:22:153:22 | iv | -| test.swift:99:25:99:120 | [...] | test.swift:157:24:157:24 | iv | -| test.swift:99:25:99:120 | [...] | test.swift:161:22:161:22 | iv | -| test.swift:99:25:99:120 | [...] | test.swift:162:22:162:22 | iv | -| test.swift:99:25:99:120 | [...] | test.swift:167:22:167:22 | iv | -| test.swift:99:25:99:120 | [...] | test.swift:168:22:168:22 | iv | -| test.swift:100:12:100:29 | call to getConstantArray() [Collection element] | test.swift:129:33:129:33 | iv2 | -| test.swift:101:17:101:35 | call to getConstantString() | test.swift:112:36:112:36 | ivString | -| test.swift:101:17:101:35 | call to getConstantString() | test.swift:113:36:113:36 | ivString | -| test.swift:101:17:101:35 | call to getConstantString() | test.swift:118:41:118:41 | ivString | -| test.swift:101:17:101:35 | call to getConstantString() | test.swift:122:41:122:41 | ivString | -| test.swift:101:17:101:35 | call to getConstantString() | test.swift:123:41:123:41 | ivString | -| test.swift:101:17:101:35 | call to getConstantString() | test.swift:130:39:130:39 | ivString | -| test.swift:147:22:147:22 | iv | test.swift:53:19:53:34 | iv | +| rncryptor.swift:60:19:60:25 | call to Data.init(_:) | rncryptor.swift:68:104:68:104 | myConstIV1 | provenance | | +| rncryptor.swift:60:19:60:25 | call to Data.init(_:) | rncryptor.swift:77:125:77:125 | myConstIV1 | provenance | | +| rncryptor.swift:60:24:60:24 | 0 | rncryptor.swift:60:19:60:25 | call to Data.init(_:) | provenance | | +| rncryptor.swift:61:19:61:27 | call to Data.init(_:) | rncryptor.swift:70:104:70:104 | myConstIV2 | provenance | | +| rncryptor.swift:61:19:61:27 | call to Data.init(_:) | rncryptor.swift:79:133:79:133 | myConstIV2 | provenance | | +| rncryptor.swift:61:24:61:24 | 123 | rncryptor.swift:61:19:61:27 | call to Data.init(_:) | provenance | | +| rncryptor.swift:62:19:62:35 | call to Data.init(_:) | rncryptor.swift:72:84:72:84 | myConstIV3 | provenance | | +| rncryptor.swift:62:19:62:35 | call to Data.init(_:) | rncryptor.swift:81:105:81:105 | myConstIV3 | provenance | | +| rncryptor.swift:62:24:62:34 | [...] | rncryptor.swift:62:19:62:35 | call to Data.init(_:) | provenance | | +| rncryptor.swift:63:19:63:28 | call to Data.init(_:) | rncryptor.swift:74:84:74:84 | myConstIV4 | provenance | | +| rncryptor.swift:63:19:63:28 | call to Data.init(_:) | rncryptor.swift:83:113:83:113 | myConstIV4 | provenance | | +| rncryptor.swift:63:24:63:24 | iv | rncryptor.swift:63:19:63:28 | call to Data.init(_:) | provenance | | +| test.swift:53:19:53:34 | iv | test.swift:54:17:54:17 | iv | provenance | | +| test.swift:85:3:85:3 | this string is constant | test.swift:89:10:89:28 | call to getConstantString() | provenance | | +| test.swift:85:3:85:3 | this string is constant | test.swift:101:17:101:35 | call to getConstantString() | provenance | | +| test.swift:89:2:89:34 | call to Array.init(_:) [Collection element] | test.swift:100:12:100:29 | call to getConstantArray() [Collection element] | provenance | | +| test.swift:89:10:89:28 | call to getConstantString() | test.swift:89:10:89:30 | .utf8 | provenance | | +| test.swift:89:10:89:30 | .utf8 | test.swift:89:2:89:34 | call to Array.init(_:) [Collection element] | provenance | | +| test.swift:99:25:99:120 | [...] | test.swift:128:33:128:33 | iv | provenance | | +| test.swift:99:25:99:120 | [...] | test.swift:135:22:135:22 | iv | provenance | | +| test.swift:99:25:99:120 | [...] | test.swift:139:22:139:22 | iv | provenance | | +| test.swift:99:25:99:120 | [...] | test.swift:140:22:140:22 | iv | provenance | | +| test.swift:99:25:99:120 | [...] | test.swift:145:22:145:22 | iv | provenance | | +| test.swift:99:25:99:120 | [...] | test.swift:146:22:146:22 | iv | provenance | | +| test.swift:99:25:99:120 | [...] | test.swift:147:22:147:22 | iv | provenance | | +| test.swift:99:25:99:120 | [...] | test.swift:147:22:147:22 | iv | provenance | | +| test.swift:99:25:99:120 | [...] | test.swift:153:22:153:22 | iv | provenance | | +| test.swift:99:25:99:120 | [...] | test.swift:157:24:157:24 | iv | provenance | | +| test.swift:99:25:99:120 | [...] | test.swift:161:22:161:22 | iv | provenance | | +| test.swift:99:25:99:120 | [...] | test.swift:162:22:162:22 | iv | provenance | | +| test.swift:99:25:99:120 | [...] | test.swift:167:22:167:22 | iv | provenance | | +| test.swift:99:25:99:120 | [...] | test.swift:168:22:168:22 | iv | provenance | | +| test.swift:100:12:100:29 | call to getConstantArray() [Collection element] | test.swift:129:33:129:33 | iv2 | provenance | | +| test.swift:101:17:101:35 | call to getConstantString() | test.swift:112:36:112:36 | ivString | provenance | | +| test.swift:101:17:101:35 | call to getConstantString() | test.swift:113:36:113:36 | ivString | provenance | | +| test.swift:101:17:101:35 | call to getConstantString() | test.swift:118:41:118:41 | ivString | provenance | | +| test.swift:101:17:101:35 | call to getConstantString() | test.swift:122:41:122:41 | ivString | provenance | | +| test.swift:101:17:101:35 | call to getConstantString() | test.swift:123:41:123:41 | ivString | provenance | | +| test.swift:101:17:101:35 | call to getConstantString() | test.swift:130:39:130:39 | ivString | provenance | | +| test.swift:147:22:147:22 | iv | test.swift:53:19:53:34 | iv | provenance | | nodes | rncryptor.swift:60:19:60:25 | call to Data.init(_:) | semmle.label | call to Data.init(_:) | | rncryptor.swift:60:24:60:24 | 0 | semmle.label | 0 | diff --git a/swift/ql/test/query-tests/Security/CWE-134/UncontrolledFormatString.expected b/swift/ql/test/query-tests/Security/CWE-134/UncontrolledFormatString.expected index 56dd3f6e3c3..94dd27a82c2 100644 --- a/swift/ql/test/query-tests/Security/CWE-134/UncontrolledFormatString.expected +++ b/swift/ql/test/query-tests/Security/CWE-134/UncontrolledFormatString.expected @@ -1,39 +1,39 @@ edges -| UncontrolledFormatString.swift:77:12:77:22 | format | UncontrolledFormatString.swift:78:22:80:5 | format | -| UncontrolledFormatString.swift:78:22:80:5 | format | UncontrolledFormatString.swift:78:22:80:5 | { ... } [format] | -| UncontrolledFormatString.swift:78:22:80:5 | { ... } [format] | UncontrolledFormatString.swift:79:16:79:16 | this [format] | -| UncontrolledFormatString.swift:79:16:79:16 | this [format] | UncontrolledFormatString.swift:79:16:79:16 | format | -| UncontrolledFormatString.swift:91:24:91:77 | call to String.init(contentsOf:) | UncontrolledFormatString.swift:97:24:97:24 | tainted | -| UncontrolledFormatString.swift:91:24:91:77 | call to String.init(contentsOf:) | UncontrolledFormatString.swift:100:24:100:24 | tainted | -| UncontrolledFormatString.swift:91:24:91:77 | call to String.init(contentsOf:) | UncontrolledFormatString.swift:101:24:101:24 | tainted | -| UncontrolledFormatString.swift:91:24:91:77 | call to String.init(contentsOf:) | UncontrolledFormatString.swift:103:24:103:24 | tainted | -| UncontrolledFormatString.swift:91:24:91:77 | call to String.init(contentsOf:) | UncontrolledFormatString.swift:104:24:104:24 | tainted | -| UncontrolledFormatString.swift:91:24:91:77 | call to String.init(contentsOf:) | UncontrolledFormatString.swift:105:24:105:24 | tainted | -| UncontrolledFormatString.swift:91:24:91:77 | call to String.init(contentsOf:) | UncontrolledFormatString.swift:106:42:106:42 | tainted | -| UncontrolledFormatString.swift:91:24:91:77 | call to String.init(contentsOf:) | UncontrolledFormatString.swift:108:43:108:43 | tainted | -| UncontrolledFormatString.swift:91:24:91:77 | call to String.init(contentsOf:) | UncontrolledFormatString.swift:109:57:109:57 | tainted | -| UncontrolledFormatString.swift:91:24:91:77 | call to String.init(contentsOf:) | UncontrolledFormatString.swift:111:50:111:50 | tainted | -| UncontrolledFormatString.swift:91:24:91:77 | call to String.init(contentsOf:) | UncontrolledFormatString.swift:112:64:112:64 | tainted | -| UncontrolledFormatString.swift:91:24:91:77 | call to String.init(contentsOf:) | UncontrolledFormatString.swift:115:11:115:11 | tainted | -| UncontrolledFormatString.swift:91:24:91:77 | call to String.init(contentsOf:) | UncontrolledFormatString.swift:116:11:116:11 | tainted | -| UncontrolledFormatString.swift:91:24:91:77 | call to String.init(contentsOf:) | UncontrolledFormatString.swift:116:11:116:11 | tainted | -| UncontrolledFormatString.swift:91:24:91:77 | call to String.init(contentsOf:) | UncontrolledFormatString.swift:118:61:118:61 | tainted | -| UncontrolledFormatString.swift:91:24:91:77 | call to String.init(contentsOf:) | UncontrolledFormatString.swift:130:39:130:39 | tainted | -| UncontrolledFormatString.swift:91:24:91:77 | call to String.init(contentsOf:) | UncontrolledFormatString.swift:135:37:135:37 | tainted | -| UncontrolledFormatString.swift:91:24:91:77 | call to String.init(contentsOf:) | UncontrolledFormatString.swift:139:5:139:5 | tainted | -| UncontrolledFormatString.swift:91:24:91:77 | call to String.init(contentsOf:) | UncontrolledFormatString.swift:154:26:154:26 | tainted | -| UncontrolledFormatString.swift:91:24:91:77 | call to String.init(contentsOf:) | UncontrolledFormatString.swift:156:32:156:32 | tainted | -| UncontrolledFormatString.swift:108:43:108:43 | tainted | UncontrolledFormatString.swift:108:26:108:50 | call to NSString.init(string:) | -| UncontrolledFormatString.swift:109:57:109:57 | tainted | UncontrolledFormatString.swift:109:40:109:64 | call to NSString.init(string:) | -| UncontrolledFormatString.swift:111:50:111:50 | tainted | UncontrolledFormatString.swift:111:33:111:57 | call to NSString.init(string:) | -| UncontrolledFormatString.swift:112:64:112:64 | tainted | UncontrolledFormatString.swift:112:47:112:71 | call to NSString.init(string:) | -| UncontrolledFormatString.swift:116:11:116:11 | tainted | UncontrolledFormatString.swift:77:12:77:22 | format | -| UncontrolledFormatString.swift:135:37:135:37 | tainted | UncontrolledFormatString.swift:135:20:135:44 | call to NSString.init(string:) | -| UncontrolledFormatString.swift:139:5:139:5 | tainted | UncontrolledFormatString.swift:140:9:140:9 | cstr [Collection element] | -| UncontrolledFormatString.swift:140:9:140:9 | cstr [Collection element] | UncontrolledFormatString.swift:141:24:141:24 | cstr | -| UncontrolledFormatString.swift:140:9:140:9 | cstr [Collection element] | UncontrolledFormatString.swift:143:21:143:21 | cstr | -| UncontrolledFormatString.swift:140:9:140:9 | cstr [Collection element] | UncontrolledFormatString.swift:145:27:145:27 | cstr | -| UncontrolledFormatString.swift:140:9:140:9 | cstr [Collection element] | UncontrolledFormatString.swift:147:35:147:35 | cstr | +| UncontrolledFormatString.swift:77:12:77:22 | format | UncontrolledFormatString.swift:78:22:80:5 | format | provenance | | +| UncontrolledFormatString.swift:78:22:80:5 | format | UncontrolledFormatString.swift:78:22:80:5 | { ... } [format] | provenance | | +| UncontrolledFormatString.swift:78:22:80:5 | { ... } [format] | UncontrolledFormatString.swift:79:16:79:16 | this [format] | provenance | | +| UncontrolledFormatString.swift:79:16:79:16 | this [format] | UncontrolledFormatString.swift:79:16:79:16 | format | provenance | | +| UncontrolledFormatString.swift:91:24:91:77 | call to String.init(contentsOf:) | UncontrolledFormatString.swift:97:24:97:24 | tainted | provenance | | +| UncontrolledFormatString.swift:91:24:91:77 | call to String.init(contentsOf:) | UncontrolledFormatString.swift:100:24:100:24 | tainted | provenance | | +| UncontrolledFormatString.swift:91:24:91:77 | call to String.init(contentsOf:) | UncontrolledFormatString.swift:101:24:101:24 | tainted | provenance | | +| UncontrolledFormatString.swift:91:24:91:77 | call to String.init(contentsOf:) | UncontrolledFormatString.swift:103:24:103:24 | tainted | provenance | | +| UncontrolledFormatString.swift:91:24:91:77 | call to String.init(contentsOf:) | UncontrolledFormatString.swift:104:24:104:24 | tainted | provenance | | +| UncontrolledFormatString.swift:91:24:91:77 | call to String.init(contentsOf:) | UncontrolledFormatString.swift:105:24:105:24 | tainted | provenance | | +| UncontrolledFormatString.swift:91:24:91:77 | call to String.init(contentsOf:) | UncontrolledFormatString.swift:106:42:106:42 | tainted | provenance | | +| UncontrolledFormatString.swift:91:24:91:77 | call to String.init(contentsOf:) | UncontrolledFormatString.swift:108:43:108:43 | tainted | provenance | | +| UncontrolledFormatString.swift:91:24:91:77 | call to String.init(contentsOf:) | UncontrolledFormatString.swift:109:57:109:57 | tainted | provenance | | +| UncontrolledFormatString.swift:91:24:91:77 | call to String.init(contentsOf:) | UncontrolledFormatString.swift:111:50:111:50 | tainted | provenance | | +| UncontrolledFormatString.swift:91:24:91:77 | call to String.init(contentsOf:) | UncontrolledFormatString.swift:112:64:112:64 | tainted | provenance | | +| UncontrolledFormatString.swift:91:24:91:77 | call to String.init(contentsOf:) | UncontrolledFormatString.swift:115:11:115:11 | tainted | provenance | | +| UncontrolledFormatString.swift:91:24:91:77 | call to String.init(contentsOf:) | UncontrolledFormatString.swift:116:11:116:11 | tainted | provenance | | +| UncontrolledFormatString.swift:91:24:91:77 | call to String.init(contentsOf:) | UncontrolledFormatString.swift:116:11:116:11 | tainted | provenance | | +| UncontrolledFormatString.swift:91:24:91:77 | call to String.init(contentsOf:) | UncontrolledFormatString.swift:118:61:118:61 | tainted | provenance | | +| UncontrolledFormatString.swift:91:24:91:77 | call to String.init(contentsOf:) | UncontrolledFormatString.swift:130:39:130:39 | tainted | provenance | | +| UncontrolledFormatString.swift:91:24:91:77 | call to String.init(contentsOf:) | UncontrolledFormatString.swift:135:37:135:37 | tainted | provenance | | +| UncontrolledFormatString.swift:91:24:91:77 | call to String.init(contentsOf:) | UncontrolledFormatString.swift:139:5:139:5 | tainted | provenance | | +| UncontrolledFormatString.swift:91:24:91:77 | call to String.init(contentsOf:) | UncontrolledFormatString.swift:154:26:154:26 | tainted | provenance | | +| UncontrolledFormatString.swift:91:24:91:77 | call to String.init(contentsOf:) | UncontrolledFormatString.swift:156:32:156:32 | tainted | provenance | | +| UncontrolledFormatString.swift:108:43:108:43 | tainted | UncontrolledFormatString.swift:108:26:108:50 | call to NSString.init(string:) | provenance | | +| UncontrolledFormatString.swift:109:57:109:57 | tainted | UncontrolledFormatString.swift:109:40:109:64 | call to NSString.init(string:) | provenance | | +| UncontrolledFormatString.swift:111:50:111:50 | tainted | UncontrolledFormatString.swift:111:33:111:57 | call to NSString.init(string:) | provenance | | +| UncontrolledFormatString.swift:112:64:112:64 | tainted | UncontrolledFormatString.swift:112:47:112:71 | call to NSString.init(string:) | provenance | | +| UncontrolledFormatString.swift:116:11:116:11 | tainted | UncontrolledFormatString.swift:77:12:77:22 | format | provenance | | +| UncontrolledFormatString.swift:135:37:135:37 | tainted | UncontrolledFormatString.swift:135:20:135:44 | call to NSString.init(string:) | provenance | | +| UncontrolledFormatString.swift:139:5:139:5 | tainted | UncontrolledFormatString.swift:140:9:140:9 | cstr [Collection element] | provenance | | +| UncontrolledFormatString.swift:140:9:140:9 | cstr [Collection element] | UncontrolledFormatString.swift:141:24:141:24 | cstr | provenance | | +| UncontrolledFormatString.swift:140:9:140:9 | cstr [Collection element] | UncontrolledFormatString.swift:143:21:143:21 | cstr | provenance | | +| UncontrolledFormatString.swift:140:9:140:9 | cstr [Collection element] | UncontrolledFormatString.swift:145:27:145:27 | cstr | provenance | | +| UncontrolledFormatString.swift:140:9:140:9 | cstr [Collection element] | UncontrolledFormatString.swift:147:35:147:35 | cstr | provenance | | nodes | UncontrolledFormatString.swift:77:12:77:22 | format | semmle.label | format | | UncontrolledFormatString.swift:78:22:80:5 | format | semmle.label | format | diff --git a/swift/ql/test/query-tests/Security/CWE-135/StringLengthConflation.expected b/swift/ql/test/query-tests/Security/CWE-135/StringLengthConflation.expected index 0fa5e727fcb..83405f7cf61 100644 --- a/swift/ql/test/query-tests/Security/CWE-135/StringLengthConflation.expected +++ b/swift/ql/test/query-tests/Security/CWE-135/StringLengthConflation.expected @@ -1,46 +1,46 @@ edges -| StringLengthConflation2.swift:35:36:35:38 | .count | StringLengthConflation2.swift:35:36:35:46 | ... .-(_:_:) ... | -| StringLengthConflation2.swift:37:34:37:36 | .count | StringLengthConflation2.swift:37:34:37:44 | ... .-(_:_:) ... | -| StringLengthConflation.swift:60:47:60:50 | .length | StringLengthConflation.swift:60:47:60:59 | ... ./(_:_:) ... | -| StringLengthConflation.swift:66:33:66:36 | .length | StringLengthConflation.swift:66:33:66:45 | ... ./(_:_:) ... | -| StringLengthConflation.swift:96:28:96:31 | .length | StringLengthConflation.swift:96:28:96:40 | ... .-(_:_:) ... | -| StringLengthConflation.swift:100:27:100:30 | .length | StringLengthConflation.swift:100:27:100:39 | ... .-(_:_:) ... | -| StringLengthConflation.swift:104:25:104:28 | .length | StringLengthConflation.swift:104:25:104:37 | ... .-(_:_:) ... | -| StringLengthConflation.swift:108:25:108:28 | .length | StringLengthConflation.swift:108:25:108:37 | ... .-(_:_:) ... | -| StringLengthConflation.swift:114:23:114:26 | .length | StringLengthConflation.swift:114:23:114:35 | ... .-(_:_:) ... | -| StringLengthConflation.swift:120:22:120:25 | .length | StringLengthConflation.swift:120:22:120:34 | ... .-(_:_:) ... | -| StringLengthConflation.swift:125:34:125:36 | .count | StringLengthConflation.swift:125:34:125:44 | ... .-(_:_:) ... | -| StringLengthConflation.swift:126:36:126:38 | .count | StringLengthConflation.swift:126:36:126:46 | ... .-(_:_:) ... | -| StringLengthConflation.swift:131:36:131:38 | .count | StringLengthConflation.swift:131:36:131:46 | ... .-(_:_:) ... | -| StringLengthConflation.swift:132:38:132:40 | .count | StringLengthConflation.swift:132:38:132:48 | ... .-(_:_:) ... | -| StringLengthConflation.swift:137:34:137:36 | .count | StringLengthConflation.swift:137:34:137:44 | ... .-(_:_:) ... | -| StringLengthConflation.swift:138:36:138:38 | .count | StringLengthConflation.swift:138:36:138:46 | ... .-(_:_:) ... | -| StringLengthConflation.swift:144:28:144:30 | .count | StringLengthConflation.swift:144:28:144:38 | ... .-(_:_:) ... | -| StringLengthConflation.swift:168:29:168:36 | .count | StringLengthConflation.swift:168:29:168:44 | ... .-(_:_:) ... | -| StringLengthConflation.swift:169:29:169:37 | .count | StringLengthConflation.swift:169:29:169:45 | ... .-(_:_:) ... | -| StringLengthConflation.swift:170:29:170:46 | .count | StringLengthConflation.swift:170:29:170:54 | ... .-(_:_:) ... | -| StringLengthConflation.swift:171:29:171:32 | .length | StringLengthConflation.swift:171:29:171:41 | ... .-(_:_:) ... | -| StringLengthConflation.swift:172:29:172:33 | .length | StringLengthConflation.swift:172:29:172:42 | ... .-(_:_:) ... | -| StringLengthConflation.swift:173:35:173:37 | .count | StringLengthConflation.swift:173:35:173:45 | ... .-(_:_:) ... | -| StringLengthConflation.swift:174:35:174:42 | .count | StringLengthConflation.swift:174:35:174:50 | ... .-(_:_:) ... | -| StringLengthConflation.swift:175:35:175:43 | .count | StringLengthConflation.swift:175:35:175:51 | ... .-(_:_:) ... | -| StringLengthConflation.swift:177:35:177:38 | .length | StringLengthConflation.swift:177:35:177:47 | ... .-(_:_:) ... | -| StringLengthConflation.swift:178:35:178:39 | .length | StringLengthConflation.swift:178:35:178:48 | ... .-(_:_:) ... | -| StringLengthConflation.swift:179:37:179:39 | .count | StringLengthConflation.swift:179:37:179:47 | ... .-(_:_:) ... | -| StringLengthConflation.swift:181:37:181:39 | .count | StringLengthConflation.swift:181:37:181:47 | ... .-(_:_:) ... | -| file://:0:0:0:0 | .length | StringLengthConflation.swift:53:43:53:46 | .length | -| file://:0:0:0:0 | .length | StringLengthConflation.swift:60:47:60:50 | .length | -| file://:0:0:0:0 | .length | StringLengthConflation.swift:66:33:66:36 | .length | -| file://:0:0:0:0 | .length | StringLengthConflation.swift:96:28:96:31 | .length | -| file://:0:0:0:0 | .length | StringLengthConflation.swift:100:27:100:30 | .length | -| file://:0:0:0:0 | .length | StringLengthConflation.swift:104:25:104:28 | .length | -| file://:0:0:0:0 | .length | StringLengthConflation.swift:108:25:108:28 | .length | -| file://:0:0:0:0 | .length | StringLengthConflation.swift:114:23:114:26 | .length | -| file://:0:0:0:0 | .length | StringLengthConflation.swift:120:22:120:25 | .length | -| file://:0:0:0:0 | .length | StringLengthConflation.swift:171:29:171:32 | .length | -| file://:0:0:0:0 | .length | StringLengthConflation.swift:172:29:172:33 | .length | -| file://:0:0:0:0 | .length | StringLengthConflation.swift:177:35:177:38 | .length | -| file://:0:0:0:0 | .length | StringLengthConflation.swift:178:35:178:39 | .length | +| StringLengthConflation2.swift:35:36:35:38 | .count | StringLengthConflation2.swift:35:36:35:46 | ... .-(_:_:) ... | provenance | | +| StringLengthConflation2.swift:37:34:37:36 | .count | StringLengthConflation2.swift:37:34:37:44 | ... .-(_:_:) ... | provenance | | +| StringLengthConflation.swift:60:47:60:50 | .length | StringLengthConflation.swift:60:47:60:59 | ... ./(_:_:) ... | provenance | | +| StringLengthConflation.swift:66:33:66:36 | .length | StringLengthConflation.swift:66:33:66:45 | ... ./(_:_:) ... | provenance | | +| StringLengthConflation.swift:96:28:96:31 | .length | StringLengthConflation.swift:96:28:96:40 | ... .-(_:_:) ... | provenance | | +| StringLengthConflation.swift:100:27:100:30 | .length | StringLengthConflation.swift:100:27:100:39 | ... .-(_:_:) ... | provenance | | +| StringLengthConflation.swift:104:25:104:28 | .length | StringLengthConflation.swift:104:25:104:37 | ... .-(_:_:) ... | provenance | | +| StringLengthConflation.swift:108:25:108:28 | .length | StringLengthConflation.swift:108:25:108:37 | ... .-(_:_:) ... | provenance | | +| StringLengthConflation.swift:114:23:114:26 | .length | StringLengthConflation.swift:114:23:114:35 | ... .-(_:_:) ... | provenance | | +| StringLengthConflation.swift:120:22:120:25 | .length | StringLengthConflation.swift:120:22:120:34 | ... .-(_:_:) ... | provenance | | +| StringLengthConflation.swift:125:34:125:36 | .count | StringLengthConflation.swift:125:34:125:44 | ... .-(_:_:) ... | provenance | | +| StringLengthConflation.swift:126:36:126:38 | .count | StringLengthConflation.swift:126:36:126:46 | ... .-(_:_:) ... | provenance | | +| StringLengthConflation.swift:131:36:131:38 | .count | StringLengthConflation.swift:131:36:131:46 | ... .-(_:_:) ... | provenance | | +| StringLengthConflation.swift:132:38:132:40 | .count | StringLengthConflation.swift:132:38:132:48 | ... .-(_:_:) ... | provenance | | +| StringLengthConflation.swift:137:34:137:36 | .count | StringLengthConflation.swift:137:34:137:44 | ... .-(_:_:) ... | provenance | | +| StringLengthConflation.swift:138:36:138:38 | .count | StringLengthConflation.swift:138:36:138:46 | ... .-(_:_:) ... | provenance | | +| StringLengthConflation.swift:144:28:144:30 | .count | StringLengthConflation.swift:144:28:144:38 | ... .-(_:_:) ... | provenance | | +| StringLengthConflation.swift:168:29:168:36 | .count | StringLengthConflation.swift:168:29:168:44 | ... .-(_:_:) ... | provenance | | +| StringLengthConflation.swift:169:29:169:37 | .count | StringLengthConflation.swift:169:29:169:45 | ... .-(_:_:) ... | provenance | | +| StringLengthConflation.swift:170:29:170:46 | .count | StringLengthConflation.swift:170:29:170:54 | ... .-(_:_:) ... | provenance | | +| StringLengthConflation.swift:171:29:171:32 | .length | StringLengthConflation.swift:171:29:171:41 | ... .-(_:_:) ... | provenance | | +| StringLengthConflation.swift:172:29:172:33 | .length | StringLengthConflation.swift:172:29:172:42 | ... .-(_:_:) ... | provenance | | +| StringLengthConflation.swift:173:35:173:37 | .count | StringLengthConflation.swift:173:35:173:45 | ... .-(_:_:) ... | provenance | | +| StringLengthConflation.swift:174:35:174:42 | .count | StringLengthConflation.swift:174:35:174:50 | ... .-(_:_:) ... | provenance | | +| StringLengthConflation.swift:175:35:175:43 | .count | StringLengthConflation.swift:175:35:175:51 | ... .-(_:_:) ... | provenance | | +| StringLengthConflation.swift:177:35:177:38 | .length | StringLengthConflation.swift:177:35:177:47 | ... .-(_:_:) ... | provenance | | +| StringLengthConflation.swift:178:35:178:39 | .length | StringLengthConflation.swift:178:35:178:48 | ... .-(_:_:) ... | provenance | | +| StringLengthConflation.swift:179:37:179:39 | .count | StringLengthConflation.swift:179:37:179:47 | ... .-(_:_:) ... | provenance | | +| StringLengthConflation.swift:181:37:181:39 | .count | StringLengthConflation.swift:181:37:181:47 | ... .-(_:_:) ... | provenance | | +| file://:0:0:0:0 | .length | StringLengthConflation.swift:53:43:53:46 | .length | provenance | | +| file://:0:0:0:0 | .length | StringLengthConflation.swift:60:47:60:50 | .length | provenance | | +| file://:0:0:0:0 | .length | StringLengthConflation.swift:66:33:66:36 | .length | provenance | | +| file://:0:0:0:0 | .length | StringLengthConflation.swift:96:28:96:31 | .length | provenance | | +| file://:0:0:0:0 | .length | StringLengthConflation.swift:100:27:100:30 | .length | provenance | | +| file://:0:0:0:0 | .length | StringLengthConflation.swift:104:25:104:28 | .length | provenance | | +| file://:0:0:0:0 | .length | StringLengthConflation.swift:108:25:108:28 | .length | provenance | | +| file://:0:0:0:0 | .length | StringLengthConflation.swift:114:23:114:26 | .length | provenance | | +| file://:0:0:0:0 | .length | StringLengthConflation.swift:120:22:120:25 | .length | provenance | | +| file://:0:0:0:0 | .length | StringLengthConflation.swift:171:29:171:32 | .length | provenance | | +| file://:0:0:0:0 | .length | StringLengthConflation.swift:172:29:172:33 | .length | provenance | | +| file://:0:0:0:0 | .length | StringLengthConflation.swift:177:35:177:38 | .length | provenance | | +| file://:0:0:0:0 | .length | StringLengthConflation.swift:178:35:178:39 | .length | provenance | | nodes | StringLengthConflation2.swift:35:36:35:38 | .count | semmle.label | .count | | StringLengthConflation2.swift:35:36:35:46 | ... .-(_:_:) ... | semmle.label | ... .-(_:_:) ... | diff --git a/swift/ql/test/query-tests/Security/CWE-259/ConstantPassword.expected b/swift/ql/test/query-tests/Security/CWE-259/ConstantPassword.expected index 11c1950f3a9..0c1e98bfe7c 100644 --- a/swift/ql/test/query-tests/Security/CWE-259/ConstantPassword.expected +++ b/swift/ql/test/query-tests/Security/CWE-259/ConstantPassword.expected @@ -1,34 +1,34 @@ edges -| rncryptor.swift:69:24:69:24 | abc123 | rncryptor.swift:77:89:77:89 | myConstPassword | -| rncryptor.swift:69:24:69:24 | abc123 | rncryptor.swift:78:56:78:56 | myConstPassword | -| rncryptor.swift:69:24:69:24 | abc123 | rncryptor.swift:80:89:80:89 | myMaybePassword | -| rncryptor.swift:69:24:69:24 | abc123 | rncryptor.swift:81:56:81:56 | myMaybePassword | -| rncryptor.swift:69:24:69:24 | abc123 | rncryptor.swift:91:39:91:39 | myConstPassword | -| rncryptor.swift:69:24:69:24 | abc123 | rncryptor.swift:92:37:92:37 | myConstPassword | -| rncryptor.swift:69:24:69:24 | abc123 | rncryptor.swift:93:39:93:39 | myConstPassword | -| rncryptor.swift:69:24:69:24 | abc123 | rncryptor.swift:94:37:94:37 | myConstPassword | -| rncryptor.swift:69:24:69:24 | abc123 | rncryptor.swift:96:68:96:68 | myConstPassword | -| rncryptor.swift:69:24:69:24 | abc123 | rncryptor.swift:97:68:97:68 | myConstPassword | -| rncryptor.swift:69:24:69:24 | abc123 | rncryptor.swift:98:68:98:68 | myConstPassword | -| rncryptor.swift:69:24:69:24 | abc123 | rncryptor.swift:100:89:100:89 | myConstPassword | -| rncryptor.swift:69:24:69:24 | abc123 | rncryptor.swift:101:97:101:97 | myConstPassword | -| rncryptor.swift:69:24:69:24 | abc123 | rncryptor.swift:102:89:102:89 | myConstPassword | -| rncryptor.swift:69:24:69:24 | abc123 | rncryptor.swift:103:97:103:97 | myConstPassword | -| rncryptor.swift:69:24:69:24 | abc123 | rncryptor.swift:105:32:105:32 | myConstPassword | -| rncryptor.swift:69:24:69:24 | abc123 | rncryptor.swift:107:61:107:61 | myConstPassword | -| rncryptor.swift:69:24:69:24 | abc123 | rncryptor.swift:108:97:108:97 | myConstPassword | -| test.swift:29:3:29:3 | this string is constant | test.swift:33:10:33:28 | call to getConstantString() | -| test.swift:33:2:33:34 | call to Array.init(_:) [Collection element] | test.swift:44:31:44:48 | call to getConstantArray() [Collection element] | -| test.swift:33:10:33:28 | call to getConstantString() | test.swift:33:10:33:30 | .utf8 | -| test.swift:33:10:33:30 | .utf8 | test.swift:33:2:33:34 | call to Array.init(_:) [Collection element] | -| test.swift:43:39:43:134 | [...] | test.swift:51:30:51:30 | constantPassword | -| test.swift:43:39:43:134 | [...] | test.swift:56:40:56:40 | constantPassword | -| test.swift:43:39:43:134 | [...] | test.swift:62:40:62:40 | constantPassword | -| test.swift:43:39:43:134 | [...] | test.swift:67:34:67:34 | constantPassword | -| test.swift:44:31:44:48 | call to getConstantArray() [Collection element] | test.swift:52:30:52:30 | constantStringPassword | -| test.swift:44:31:44:48 | call to getConstantArray() [Collection element] | test.swift:57:40:57:40 | constantStringPassword | -| test.swift:44:31:44:48 | call to getConstantArray() [Collection element] | test.swift:63:40:63:40 | constantStringPassword | -| test.swift:44:31:44:48 | call to getConstantArray() [Collection element] | test.swift:68:34:68:34 | constantStringPassword | +| rncryptor.swift:69:24:69:24 | abc123 | rncryptor.swift:77:89:77:89 | myConstPassword | provenance | | +| rncryptor.swift:69:24:69:24 | abc123 | rncryptor.swift:78:56:78:56 | myConstPassword | provenance | | +| rncryptor.swift:69:24:69:24 | abc123 | rncryptor.swift:80:89:80:89 | myMaybePassword | provenance | | +| rncryptor.swift:69:24:69:24 | abc123 | rncryptor.swift:81:56:81:56 | myMaybePassword | provenance | | +| rncryptor.swift:69:24:69:24 | abc123 | rncryptor.swift:91:39:91:39 | myConstPassword | provenance | | +| rncryptor.swift:69:24:69:24 | abc123 | rncryptor.swift:92:37:92:37 | myConstPassword | provenance | | +| rncryptor.swift:69:24:69:24 | abc123 | rncryptor.swift:93:39:93:39 | myConstPassword | provenance | | +| rncryptor.swift:69:24:69:24 | abc123 | rncryptor.swift:94:37:94:37 | myConstPassword | provenance | | +| rncryptor.swift:69:24:69:24 | abc123 | rncryptor.swift:96:68:96:68 | myConstPassword | provenance | | +| rncryptor.swift:69:24:69:24 | abc123 | rncryptor.swift:97:68:97:68 | myConstPassword | provenance | | +| rncryptor.swift:69:24:69:24 | abc123 | rncryptor.swift:98:68:98:68 | myConstPassword | provenance | | +| rncryptor.swift:69:24:69:24 | abc123 | rncryptor.swift:100:89:100:89 | myConstPassword | provenance | | +| rncryptor.swift:69:24:69:24 | abc123 | rncryptor.swift:101:97:101:97 | myConstPassword | provenance | | +| rncryptor.swift:69:24:69:24 | abc123 | rncryptor.swift:102:89:102:89 | myConstPassword | provenance | | +| rncryptor.swift:69:24:69:24 | abc123 | rncryptor.swift:103:97:103:97 | myConstPassword | provenance | | +| rncryptor.swift:69:24:69:24 | abc123 | rncryptor.swift:105:32:105:32 | myConstPassword | provenance | | +| rncryptor.swift:69:24:69:24 | abc123 | rncryptor.swift:107:61:107:61 | myConstPassword | provenance | | +| rncryptor.swift:69:24:69:24 | abc123 | rncryptor.swift:108:97:108:97 | myConstPassword | provenance | | +| test.swift:29:3:29:3 | this string is constant | test.swift:33:10:33:28 | call to getConstantString() | provenance | | +| test.swift:33:2:33:34 | call to Array.init(_:) [Collection element] | test.swift:44:31:44:48 | call to getConstantArray() [Collection element] | provenance | | +| test.swift:33:10:33:28 | call to getConstantString() | test.swift:33:10:33:30 | .utf8 | provenance | | +| test.swift:33:10:33:30 | .utf8 | test.swift:33:2:33:34 | call to Array.init(_:) [Collection element] | provenance | | +| test.swift:43:39:43:134 | [...] | test.swift:51:30:51:30 | constantPassword | provenance | | +| test.swift:43:39:43:134 | [...] | test.swift:56:40:56:40 | constantPassword | provenance | | +| test.swift:43:39:43:134 | [...] | test.swift:62:40:62:40 | constantPassword | provenance | | +| test.swift:43:39:43:134 | [...] | test.swift:67:34:67:34 | constantPassword | provenance | | +| test.swift:44:31:44:48 | call to getConstantArray() [Collection element] | test.swift:52:30:52:30 | constantStringPassword | provenance | | +| test.swift:44:31:44:48 | call to getConstantArray() [Collection element] | test.swift:57:40:57:40 | constantStringPassword | provenance | | +| test.swift:44:31:44:48 | call to getConstantArray() [Collection element] | test.swift:63:40:63:40 | constantStringPassword | provenance | | +| test.swift:44:31:44:48 | call to getConstantArray() [Collection element] | test.swift:68:34:68:34 | constantStringPassword | provenance | | nodes | rncryptor.swift:69:24:69:24 | abc123 | semmle.label | abc123 | | rncryptor.swift:77:89:77:89 | myConstPassword | semmle.label | myConstPassword | 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 dca833fff7f..d3d3e9ec03e 100644 --- a/swift/ql/test/query-tests/Security/CWE-311/CleartextStorageDatabase.expected +++ b/swift/ql/test/query-tests/Security/CWE-311/CleartextStorageDatabase.expected @@ -1,315 +1,315 @@ edges -| SQLite.swift:119:70:119:70 | mobilePhoneNumber | SQLite.swift:123:17:123:17 | insertQuery | -| SQLite.swift:119:70:119:70 | mobilePhoneNumber | SQLite.swift:127:21:127:21 | insertQuery | -| SQLite.swift:119:70:119:70 | mobilePhoneNumber | SQLite.swift:131:17:131:17 | insertQuery | -| SQLite.swift:119:70:119:70 | mobilePhoneNumber | SQLite.swift:135:20:135:20 | insertQuery | -| SQLite.swift:119:70:119:70 | mobilePhoneNumber | SQLite.swift:139:24:139:24 | insertQuery | -| SQLite.swift:120:50:120:50 | mobilePhoneNumber | SQLite.swift:124:17:124:17 | updateQuery | -| SQLite.swift:120:50:120:50 | mobilePhoneNumber | SQLite.swift:128:21:128:21 | updateQuery | -| SQLite.swift:120:50:120:50 | mobilePhoneNumber | SQLite.swift:132:17:132:17 | updateQuery | -| SQLite.swift:120:50:120:50 | mobilePhoneNumber | SQLite.swift:136:20:136:20 | updateQuery | -| SQLite.swift:120:50:120:50 | mobilePhoneNumber | SQLite.swift:140:24:140:24 | updateQuery | -| SQLite.swift:147:32:147:32 | [...] [Collection element] | SQLite.swift:147:32:147:32 | [...] | -| SQLite.swift:147:32:147:32 | mobilePhoneNumber | SQLite.swift:147:32:147:32 | [...] [Collection element] | -| SQLite.swift:148:28:148:28 | [...] [Collection element] | SQLite.swift:148:28:148:28 | [...] | -| SQLite.swift:148:28:148:28 | mobilePhoneNumber | SQLite.swift:148:28:148:28 | [...] [Collection element] | -| SQLite.swift:149:31:149:31 | [...] [Collection element] | SQLite.swift:149:31:149:31 | [...] | -| SQLite.swift:149:31:149:31 | mobilePhoneNumber | SQLite.swift:149:31:149:31 | [...] [Collection element] | -| SQLite.swift:152:21:152:21 | [...] [Collection element] | SQLite.swift:152:21:152:21 | [...] | -| SQLite.swift:152:21:152:21 | mobilePhoneNumber | SQLite.swift:152:21:152:21 | [...] [Collection element] | -| SQLite.swift:153:20:153:20 | [...] [Collection element] | SQLite.swift:153:20:153:20 | [...] | -| SQLite.swift:153:20:153:20 | mobilePhoneNumber | SQLite.swift:153:20:153:20 | [...] [Collection element] | -| SQLite.swift:154:23:154:23 | [...] [Collection element] | SQLite.swift:154:23:154:23 | [...] | -| SQLite.swift:154:23:154:23 | mobilePhoneNumber | SQLite.swift:154:23:154:23 | [...] [Collection element] | -| SQLite.swift:158:32:158:54 | [...] [Collection element] | SQLite.swift:158:32:158:54 | [...] | -| SQLite.swift:158:33:158:33 | mobilePhoneNumber | SQLite.swift:158:32:158:54 | [...] [Collection element] | -| SQLite.swift:159:28:159:50 | [...] [Collection element] | SQLite.swift:159:28:159:50 | [...] | -| SQLite.swift:159:29:159:29 | mobilePhoneNumber | SQLite.swift:159:28:159:50 | [...] [Collection element] | -| SQLite.swift:160:31:160:53 | [...] [Collection element] | SQLite.swift:160:31:160:53 | [...] | -| SQLite.swift:160:32:160:32 | mobilePhoneNumber | SQLite.swift:160:31:160:53 | [...] [Collection element] | -| SQLite.swift:163:21:163:43 | [...] [Collection element] | SQLite.swift:163:21:163:43 | [...] | -| SQLite.swift:163:22:163:22 | mobilePhoneNumber | SQLite.swift:163:21:163:43 | [...] [Collection element] | -| SQLite.swift:164:20:164:42 | [...] [Collection element] | SQLite.swift:164:20:164:42 | [...] | -| SQLite.swift:164:21:164:21 | mobilePhoneNumber | SQLite.swift:164:20:164:42 | [...] [Collection element] | -| SQLite.swift:165:23:165:45 | [...] [Collection element] | SQLite.swift:165:23:165:45 | [...] | -| SQLite.swift:165:24:165:24 | mobilePhoneNumber | SQLite.swift:165:23:165:45 | [...] [Collection element] | -| SQLite.swift:169:32:169:70 | [...] [Collection element, Tuple element at index 1] | SQLite.swift:169:32:169:70 | [...] | -| SQLite.swift:169:43:169:53 | (...) [Tuple element at index 1] | SQLite.swift:169:32:169:70 | [...] [Collection element, Tuple element at index 1] | -| SQLite.swift:169:53:169:53 | mobilePhoneNumber | SQLite.swift:169:43:169:53 | (...) [Tuple element at index 1] | -| SQLite.swift:170:28:170:66 | [...] [Collection element, Tuple element at index 1] | SQLite.swift:170:28:170:66 | [...] | -| SQLite.swift:170:39:170:49 | (...) [Tuple element at index 1] | SQLite.swift:170:28:170:66 | [...] [Collection element, Tuple element at index 1] | -| SQLite.swift:170:49:170:49 | mobilePhoneNumber | SQLite.swift:170:39:170:49 | (...) [Tuple element at index 1] | -| SQLite.swift:171:31:171:69 | [...] [Collection element, Tuple element at index 1] | SQLite.swift:171:31:171:69 | [...] | -| SQLite.swift:171:42:171:52 | (...) [Tuple element at index 1] | SQLite.swift:171:31:171:69 | [...] [Collection element, Tuple element at index 1] | -| SQLite.swift:171:52:171:52 | mobilePhoneNumber | SQLite.swift:171:42:171:52 | (...) [Tuple element at index 1] | -| SQLite.swift:174:21:174:59 | [...] [Collection element, Tuple element at index 1] | SQLite.swift:174:21:174:59 | [...] | -| SQLite.swift:174:32:174:42 | (...) [Tuple element at index 1] | SQLite.swift:174:21:174:59 | [...] [Collection element, Tuple element at index 1] | -| SQLite.swift:174:42:174:42 | mobilePhoneNumber | SQLite.swift:174:32:174:42 | (...) [Tuple element at index 1] | -| SQLite.swift:175:20:175:58 | [...] [Collection element, Tuple element at index 1] | SQLite.swift:175:20:175:58 | [...] | -| SQLite.swift:175:31:175:41 | (...) [Tuple element at index 1] | SQLite.swift:175:20:175:58 | [...] [Collection element, Tuple element at index 1] | -| SQLite.swift:175:41:175:41 | mobilePhoneNumber | SQLite.swift:175:31:175:41 | (...) [Tuple element at index 1] | -| SQLite.swift:176:23:176:61 | [...] [Collection element, Tuple element at index 1] | SQLite.swift:176:23:176:61 | [...] | -| SQLite.swift:176:34:176:44 | (...) [Tuple element at index 1] | SQLite.swift:176:23:176:61 | [...] [Collection element, Tuple element at index 1] | -| SQLite.swift:176:44:176:44 | mobilePhoneNumber | SQLite.swift:176:34:176:44 | (...) [Tuple element at index 1] | -| SQLite.swift:186:40:186:54 | ... <-(_:_:) ... | SQLite.swift:186:40:186:54 | [...] [Collection element] | -| SQLite.swift:186:40:186:54 | [...] [Collection element] | SQLite.swift:186:40:186:54 | [...] | -| SQLite.swift:186:54:186:54 | mobilePhoneNumber | SQLite.swift:186:40:186:54 | ... <-(_:_:) ... | -| SQLite.swift:189:26:189:40 | ... <-(_:_:) ... | SQLite.swift:189:26:189:40 | [...] [Collection element] | -| SQLite.swift:189:26:189:40 | [...] [Collection element] | SQLite.swift:189:26:189:40 | [...] | -| SQLite.swift:189:40:189:40 | mobilePhoneNumber | SQLite.swift:189:26:189:40 | ... <-(_:_:) ... | -| SQLite.swift:191:27:191:41 | ... <-(_:_:) ... | SQLite.swift:191:27:191:41 | [...] [Collection element] | -| SQLite.swift:191:27:191:41 | [...] [Collection element] | SQLite.swift:191:27:191:41 | [...] | -| SQLite.swift:191:41:191:41 | mobilePhoneNumber | SQLite.swift:191:27:191:41 | ... <-(_:_:) ... | -| SQLite.swift:193:26:193:89 | ... <-(_:_:) ... | SQLite.swift:193:26:193:89 | [...] [Collection element] | -| SQLite.swift:193:26:193:89 | [...] [Collection element] | SQLite.swift:193:26:193:89 | [...] | -| SQLite.swift:193:40:193:89 | call to replace(_:with:) | SQLite.swift:193:26:193:89 | ... <-(_:_:) ... | -| SQLite.swift:193:72:193:72 | mobilePhoneNumber | SQLite.swift:193:40:193:89 | call to replace(_:with:) | -| SQLite.swift:197:16:197:50 | [...] [Collection element, Collection element] | SQLite.swift:199:30:199:30 | badMany | -| SQLite.swift:197:16:197:50 | [...] [Collection element, Collection element] | SQLite.swift:201:54:201:54 | badMany | -| SQLite.swift:197:17:197:49 | [...] [Collection element] | SQLite.swift:197:16:197:50 | [...] [Collection element, Collection element] | -| SQLite.swift:197:18:197:32 | ... <-(_:_:) ... | SQLite.swift:197:17:197:49 | [...] [Collection element] | -| SQLite.swift:197:32:197:32 | mobilePhoneNumber | SQLite.swift:197:18:197:32 | ... <-(_:_:) ... | -| file://:0:0:0:0 | self | file://:0:0:0:0 | .value | -| file://:0:0:0:0 | self | file://:0:0:0:0 | .value2 | -| file://:0:0:0:0 | self [value] | file://:0:0:0:0 | .value | -| file://:0:0:0:0 | value | file://:0:0:0:0 | [post] self [data] | -| file://:0:0:0:0 | value | file://:0:0:0:0 | [post] self [data] | -| file://:0:0:0:0 | value | file://:0:0:0:0 | [post] self [notStoredBankAccountNumber] | -| file://:0:0:0:0 | value | file://:0:0:0:0 | [post] self [password] | -| file://:0:0:0:0 | value | file://:0:0:0:0 | [post] self [value] | -| sqlite3_c_api.swift:42:69:42:69 | medicalNotes | sqlite3_c_api.swift:46:27:46:27 | insertQuery | -| sqlite3_c_api.swift:43:49:43:49 | medicalNotes | sqlite3_c_api.swift:47:27:47:27 | updateQuery | -| testCoreData2.swift:23:13:23:13 | value | file://:0:0:0:0 | value | -| testCoreData2.swift:37:2:37:2 | [post] obj [myValue] | testCoreData2.swift:37:2:37:2 | [post] obj | -| testCoreData2.swift:37:16:37:16 | bankAccountNo | testCoreData2.swift:37:2:37:2 | [post] obj [myValue] | -| testCoreData2.swift:39:2:39:2 | [post] obj [myBankAccountNumber] | testCoreData2.swift:39:2:39:2 | [post] obj | -| testCoreData2.swift:39:28:39:28 | bankAccountNo | testCoreData2.swift:39:2:39:2 | [post] obj [myBankAccountNumber] | -| testCoreData2.swift:41:2:41:2 | [post] obj [myBankAccountNumber2] | testCoreData2.swift:41:2:41:2 | [post] obj | -| testCoreData2.swift:41:29:41:29 | bankAccountNo | testCoreData2.swift:41:2:41:2 | [post] obj [myBankAccountNumber2] | -| testCoreData2.swift:43:2:43:2 | [post] obj [notStoredBankAccountNumber] | testCoreData2.swift:43:2:43:2 | [post] obj | -| testCoreData2.swift:43:35:43:35 | bankAccountNo | testCoreData2.swift:23:13:23:13 | value | -| testCoreData2.swift:43:35:43:35 | bankAccountNo | testCoreData2.swift:43:2:43:2 | [post] obj [notStoredBankAccountNumber] | -| testCoreData2.swift:46:2:46:10 | [post] ...? [myValue] | testCoreData2.swift:46:2:46:10 | [post] ...? | -| testCoreData2.swift:46:22:46:22 | bankAccountNo | testCoreData2.swift:46:2:46:10 | [post] ...? [myValue] | -| testCoreData2.swift:48:2:48:10 | [post] ...? [myBankAccountNumber] | testCoreData2.swift:48:2:48:10 | [post] ...? | -| testCoreData2.swift:48:34:48:34 | bankAccountNo | testCoreData2.swift:48:2:48:10 | [post] ...? [myBankAccountNumber] | -| testCoreData2.swift:50:2:50:10 | [post] ...? [myBankAccountNumber2] | testCoreData2.swift:50:2:50:10 | [post] ...? | -| testCoreData2.swift:50:35:50:35 | bankAccountNo | testCoreData2.swift:50:2:50:10 | [post] ...? [myBankAccountNumber2] | -| testCoreData2.swift:52:2:52:10 | [post] ...? [notStoredBankAccountNumber] | testCoreData2.swift:52:2:52:10 | [post] ...? | -| testCoreData2.swift:52:41:52:41 | bankAccountNo | testCoreData2.swift:23:13:23:13 | value | -| testCoreData2.swift:52:41:52:41 | bankAccountNo | testCoreData2.swift:52:2:52:10 | [post] ...? [notStoredBankAccountNumber] | -| testCoreData2.swift:57:3:57:3 | [post] obj [myBankAccountNumber] | testCoreData2.swift:57:3:57:3 | [post] obj | -| testCoreData2.swift:57:29:57:29 | bankAccountNo | testCoreData2.swift:57:3:57:3 | [post] obj [myBankAccountNumber] | -| testCoreData2.swift:60:4:60:4 | [post] obj [myBankAccountNumber] | testCoreData2.swift:60:4:60:4 | [post] obj | -| testCoreData2.swift:60:30:60:30 | bankAccountNo | testCoreData2.swift:60:4:60:4 | [post] obj [myBankAccountNumber] | -| testCoreData2.swift:62:4:62:4 | [post] obj [myBankAccountNumber] | testCoreData2.swift:62:4:62:4 | [post] obj | -| testCoreData2.swift:62:30:62:30 | bankAccountNo | testCoreData2.swift:62:4:62:4 | [post] obj [myBankAccountNumber] | -| testCoreData2.swift:65:3:65:3 | [post] obj [myBankAccountNumber] | testCoreData2.swift:65:3:65:3 | [post] obj | -| testCoreData2.swift:65:29:65:29 | bankAccountNo | testCoreData2.swift:65:3:65:3 | [post] obj [myBankAccountNumber] | -| testCoreData2.swift:70:9:70:9 | self | file://:0:0:0:0 | self | -| testCoreData2.swift:70:9:70:9 | self [value] | file://:0:0:0:0 | self [value] | -| testCoreData2.swift:70:9:70:9 | value | file://:0:0:0:0 | value | -| testCoreData2.swift:71:9:71:9 | self | file://:0:0:0:0 | self | -| testCoreData2.swift:79:2:79:2 | [post] dbObj [myValue] | testCoreData2.swift:79:2:79:2 | [post] dbObj | -| testCoreData2.swift:79:18:79:28 | .bankAccountNo | testCoreData2.swift:79:2:79:2 | [post] dbObj [myValue] | -| testCoreData2.swift:80:2:80:2 | [post] dbObj [myValue] | testCoreData2.swift:80:2:80:2 | [post] dbObj | -| testCoreData2.swift:80:18:80:28 | ...! | testCoreData2.swift:80:2:80:2 | [post] dbObj [myValue] | -| testCoreData2.swift:80:18:80:28 | .bankAccountNo2 | testCoreData2.swift:80:18:80:28 | ...! | -| testCoreData2.swift:82:2:82:2 | [post] dbObj [myValue] | testCoreData2.swift:82:2:82:2 | [post] dbObj | -| testCoreData2.swift:82:18:82:18 | bankAccountNo | testCoreData2.swift:70:9:70:9 | self | -| testCoreData2.swift:82:18:82:18 | bankAccountNo | testCoreData2.swift:82:18:82:32 | .value | -| testCoreData2.swift:82:18:82:32 | .value | testCoreData2.swift:82:2:82:2 | [post] dbObj [myValue] | -| testCoreData2.swift:83:2:83:2 | [post] dbObj [myValue] | testCoreData2.swift:83:2:83:2 | [post] dbObj | -| testCoreData2.swift:83:18:83:18 | bankAccountNo | testCoreData2.swift:71:9:71:9 | self | -| testCoreData2.swift:83:18:83:18 | bankAccountNo | testCoreData2.swift:83:18:83:32 | .value2 | -| testCoreData2.swift:83:18:83:32 | ...! | testCoreData2.swift:83:2:83:2 | [post] dbObj [myValue] | -| testCoreData2.swift:83:18:83:32 | .value2 | testCoreData2.swift:83:18:83:32 | ...! | -| testCoreData2.swift:84:2:84:2 | [post] dbObj [myValue] | testCoreData2.swift:84:2:84:2 | [post] dbObj | -| testCoreData2.swift:84:18:84:18 | ...! | testCoreData2.swift:70:9:70:9 | self | -| testCoreData2.swift:84:18:84:18 | ...! | testCoreData2.swift:84:18:84:33 | .value | -| testCoreData2.swift:84:18:84:18 | bankAccountNo2 | testCoreData2.swift:84:18:84:18 | ...! | -| testCoreData2.swift:84:18:84:33 | .value | testCoreData2.swift:84:2:84:2 | [post] dbObj [myValue] | -| testCoreData2.swift:85:2:85:2 | [post] dbObj [myValue] | testCoreData2.swift:85:2:85:2 | [post] dbObj | -| testCoreData2.swift:85:18:85:18 | ...! | testCoreData2.swift:71:9:71:9 | self | -| testCoreData2.swift:85:18:85:18 | ...! | testCoreData2.swift:85:18:85:33 | .value2 | -| testCoreData2.swift:85:18:85:18 | bankAccountNo2 | testCoreData2.swift:85:18:85:18 | ...! | -| testCoreData2.swift:85:18:85:33 | ...! | testCoreData2.swift:85:2:85:2 | [post] dbObj [myValue] | -| testCoreData2.swift:85:18:85:33 | .value2 | testCoreData2.swift:85:18:85:33 | ...! | -| testCoreData2.swift:87:2:87:10 | [post] ...? [myValue] | testCoreData2.swift:87:2:87:10 | [post] ...? | -| testCoreData2.swift:87:22:87:32 | .bankAccountNo | testCoreData2.swift:87:2:87:10 | [post] ...? [myValue] | -| testCoreData2.swift:88:2:88:10 | [post] ...? [myValue] | testCoreData2.swift:88:2:88:10 | [post] ...? | -| testCoreData2.swift:88:22:88:22 | bankAccountNo | testCoreData2.swift:70:9:70:9 | self | -| testCoreData2.swift:88:22:88:22 | bankAccountNo | testCoreData2.swift:88:22:88:36 | .value | -| testCoreData2.swift:88:22:88:36 | .value | testCoreData2.swift:88:2:88:10 | [post] ...? [myValue] | -| testCoreData2.swift:89:2:89:10 | [post] ...? [myValue] | testCoreData2.swift:89:2:89:10 | [post] ...? | -| testCoreData2.swift:89:22:89:22 | ...! | testCoreData2.swift:71:9:71:9 | self | -| testCoreData2.swift:89:22:89:22 | ...! | testCoreData2.swift:89:22:89:37 | .value2 | -| testCoreData2.swift:89:22:89:22 | bankAccountNo2 | testCoreData2.swift:89:22:89:22 | ...! | -| testCoreData2.swift:89:22:89:37 | ...! | testCoreData2.swift:89:2:89:10 | [post] ...? [myValue] | -| testCoreData2.swift:89:22:89:37 | .value2 | testCoreData2.swift:89:22:89:37 | ...! | -| testCoreData2.swift:91:10:91:10 | bankAccountNo | testCoreData2.swift:92:10:92:10 | a | -| testCoreData2.swift:92:10:92:10 | a | testCoreData2.swift:70:9:70:9 | self | -| testCoreData2.swift:92:10:92:10 | a | testCoreData2.swift:92:10:92:12 | .value | -| testCoreData2.swift:92:10:92:12 | .value | testCoreData2.swift:93:18:93:18 | b | -| testCoreData2.swift:93:2:93:2 | [post] dbObj [myValue] | testCoreData2.swift:93:2:93:2 | [post] dbObj | -| testCoreData2.swift:93:18:93:18 | b | testCoreData2.swift:93:2:93:2 | [post] dbObj [myValue] | -| testCoreData2.swift:95:10:95:10 | bankAccountNo | testCoreData2.swift:97:12:97:12 | c | -| testCoreData2.swift:97:2:97:2 | [post] d [value] | testCoreData2.swift:98:18:98:18 | d [value] | -| testCoreData2.swift:97:12:97:12 | c | testCoreData2.swift:70:9:70:9 | self | -| testCoreData2.swift:97:12:97:12 | c | testCoreData2.swift:97:12:97:14 | .value | -| testCoreData2.swift:97:12:97:14 | .value | testCoreData2.swift:70:9:70:9 | value | -| testCoreData2.swift:97:12:97:14 | .value | testCoreData2.swift:97:2:97:2 | [post] d [value] | -| testCoreData2.swift:98:2:98:2 | [post] dbObj [myValue] | testCoreData2.swift:98:2:98:2 | [post] dbObj | -| testCoreData2.swift:98:18:98:18 | d [value] | testCoreData2.swift:70:9:70:9 | self [value] | -| testCoreData2.swift:98:18:98:18 | d [value] | testCoreData2.swift:98:18:98:20 | .value | -| testCoreData2.swift:98:18:98:20 | .value | testCoreData2.swift:98:2:98:2 | [post] dbObj [myValue] | -| testCoreData2.swift:101:10:101:10 | bankAccountNo | testCoreData2.swift:103:13:103:13 | e | -| testCoreData2.swift:103:13:103:13 | e | testCoreData2.swift:70:9:70:9 | self | -| testCoreData2.swift:103:13:103:13 | e | testCoreData2.swift:104:18:104:18 | e | -| testCoreData2.swift:104:2:104:2 | [post] dbObj [myValue] | testCoreData2.swift:104:2:104:2 | [post] dbObj | -| testCoreData2.swift:104:18:104:18 | e | testCoreData2.swift:70:9:70:9 | self | -| testCoreData2.swift:104:18:104:18 | e | testCoreData2.swift:104:18:104:20 | .value | -| testCoreData2.swift:104:18:104:18 | e | testCoreData2.swift:105:18:105:18 | e | -| testCoreData2.swift:104:18:104:20 | .value | testCoreData2.swift:104:2:104:2 | [post] dbObj [myValue] | -| testCoreData2.swift:105:2:105:2 | [post] dbObj [myValue] | testCoreData2.swift:105:2:105:2 | [post] dbObj | -| testCoreData2.swift:105:18:105:18 | e | testCoreData2.swift:71:9:71:9 | self | -| testCoreData2.swift:105:18:105:18 | e | testCoreData2.swift:105:18:105:20 | .value2 | -| testCoreData2.swift:105:18:105:20 | ...! | testCoreData2.swift:105:2:105:2 | [post] dbObj [myValue] | -| testCoreData2.swift:105:18:105:20 | .value2 | testCoreData2.swift:105:18:105:20 | ...! | -| testCoreData.swift:18:19:18:26 | value | testCoreData.swift:19:12:19:12 | value | -| testCoreData.swift:31:3:31:3 | newValue | testCoreData.swift:32:13:32:13 | newValue | -| testCoreData.swift:61:25:61:25 | password | testCoreData.swift:18:19:18:26 | value | -| testCoreData.swift:64:2:64:2 | [post] obj [myValue] | testCoreData.swift:64:2:64:2 | [post] obj | -| testCoreData.swift:64:16:64:16 | password | testCoreData.swift:31:3:31:3 | newValue | -| testCoreData.swift:64:16:64:16 | password | testCoreData.swift:64:2:64:2 | [post] obj [myValue] | -| testCoreData.swift:77:24:77:24 | x | testCoreData.swift:78:15:78:15 | x | -| testCoreData.swift:80:10:80:22 | call to getPassword() | testCoreData.swift:81:15:81:15 | y | -| testCoreData.swift:91:10:91:10 | passwd | testCoreData.swift:95:15:95:15 | x | -| testCoreData.swift:92:10:92:10 | passwd | testCoreData.swift:96:15:96:15 | y | -| testCoreData.swift:93:10:93:10 | passwd | testCoreData.swift:97:15:97:15 | z | -| testGRDB.swift:73:56:73:65 | [...] [Collection element] | testGRDB.swift:73:56:73:65 | [...] | -| testGRDB.swift:73:57:73:57 | password | testGRDB.swift:73:56:73:65 | [...] [Collection element] | -| testGRDB.swift:76:42:76:51 | [...] [Collection element] | testGRDB.swift:76:42:76:51 | [...] | -| testGRDB.swift:76:43:76:43 | password | testGRDB.swift:76:42:76:51 | [...] [Collection element] | -| testGRDB.swift:81:44:81:53 | [...] [Collection element] | testGRDB.swift:81:44:81:53 | [...] | -| testGRDB.swift:81:45:81:45 | password | testGRDB.swift:81:44:81:53 | [...] [Collection element] | -| testGRDB.swift:83:44:83:53 | [...] [Collection element] | testGRDB.swift:83:44:83:53 | [...] | -| testGRDB.swift:83:45:83:45 | password | testGRDB.swift:83:44:83:53 | [...] [Collection element] | -| testGRDB.swift:85:44:85:53 | [...] [Collection element] | testGRDB.swift:85:44:85:53 | [...] | -| testGRDB.swift:85:45:85:45 | password | testGRDB.swift:85:44:85:53 | [...] [Collection element] | -| testGRDB.swift:87:44:87:53 | [...] [Collection element] | testGRDB.swift:87:44:87:53 | [...] | -| testGRDB.swift:87:45:87:45 | password | testGRDB.swift:87:44:87:53 | [...] [Collection element] | -| testGRDB.swift:92:37:92:46 | [...] [Collection element] | testGRDB.swift:92:37:92:46 | [...] | -| testGRDB.swift:92:38:92:38 | password | testGRDB.swift:92:37:92:46 | [...] [Collection element] | -| testGRDB.swift:95:36:95:45 | [...] [Collection element] | testGRDB.swift:95:36:95:45 | [...] | -| testGRDB.swift:95:37:95:37 | password | testGRDB.swift:95:36:95:45 | [...] [Collection element] | -| testGRDB.swift:100:72:100:81 | [...] [Collection element] | testGRDB.swift:100:72:100:81 | [...] | -| testGRDB.swift:100:73:100:73 | password | testGRDB.swift:100:72:100:81 | [...] [Collection element] | -| testGRDB.swift:101:72:101:81 | [...] [Collection element] | testGRDB.swift:101:72:101:81 | [...] | -| testGRDB.swift:101:73:101:73 | password | testGRDB.swift:101:72:101:81 | [...] [Collection element] | -| testGRDB.swift:107:52:107:61 | [...] [Collection element] | testGRDB.swift:107:52:107:61 | [...] | -| testGRDB.swift:107:53:107:53 | password | testGRDB.swift:107:52:107:61 | [...] [Collection element] | -| testGRDB.swift:109:52:109:61 | [...] [Collection element] | testGRDB.swift:109:52:109:61 | [...] | -| testGRDB.swift:109:53:109:53 | password | testGRDB.swift:109:52:109:61 | [...] [Collection element] | -| testGRDB.swift:111:51:111:60 | [...] [Collection element] | testGRDB.swift:111:51:111:60 | [...] | -| testGRDB.swift:111:52:111:52 | password | testGRDB.swift:111:51:111:60 | [...] [Collection element] | -| testGRDB.swift:116:47:116:56 | [...] [Collection element] | testGRDB.swift:116:47:116:56 | [...] | -| testGRDB.swift:116:48:116:48 | password | testGRDB.swift:116:47:116:56 | [...] [Collection element] | -| testGRDB.swift:118:47:118:56 | [...] [Collection element] | testGRDB.swift:118:47:118:56 | [...] | -| testGRDB.swift:118:48:118:48 | password | testGRDB.swift:118:47:118:56 | [...] [Collection element] | -| testGRDB.swift:121:44:121:53 | [...] [Collection element] | testGRDB.swift:121:44:121:53 | [...] | -| testGRDB.swift:121:45:121:45 | password | testGRDB.swift:121:44:121:53 | [...] [Collection element] | -| testGRDB.swift:123:44:123:53 | [...] [Collection element] | testGRDB.swift:123:44:123:53 | [...] | -| testGRDB.swift:123:45:123:45 | password | testGRDB.swift:123:44:123:53 | [...] [Collection element] | -| testGRDB.swift:126:44:126:53 | [...] [Collection element] | testGRDB.swift:126:44:126:53 | [...] | -| testGRDB.swift:126:45:126:45 | password | testGRDB.swift:126:44:126:53 | [...] [Collection element] | -| testGRDB.swift:128:44:128:53 | [...] [Collection element] | testGRDB.swift:128:44:128:53 | [...] | -| testGRDB.swift:128:45:128:45 | password | testGRDB.swift:128:44:128:53 | [...] [Collection element] | -| testGRDB.swift:131:44:131:53 | [...] [Collection element] | testGRDB.swift:131:44:131:53 | [...] | -| testGRDB.swift:131:45:131:45 | password | testGRDB.swift:131:44:131:53 | [...] [Collection element] | -| testGRDB.swift:133:44:133:53 | [...] [Collection element] | testGRDB.swift:133:44:133:53 | [...] | -| testGRDB.swift:133:45:133:45 | password | testGRDB.swift:133:44:133:53 | [...] [Collection element] | -| testGRDB.swift:138:68:138:77 | [...] [Collection element] | testGRDB.swift:138:68:138:77 | [...] | -| testGRDB.swift:138:69:138:69 | password | testGRDB.swift:138:68:138:77 | [...] [Collection element] | -| testGRDB.swift:140:68:140:77 | [...] [Collection element] | testGRDB.swift:140:68:140:77 | [...] | -| testGRDB.swift:140:69:140:69 | password | testGRDB.swift:140:68:140:77 | [...] [Collection element] | -| testGRDB.swift:143:65:143:74 | [...] [Collection element] | testGRDB.swift:143:65:143:74 | [...] | -| testGRDB.swift:143:66:143:66 | password | testGRDB.swift:143:65:143:74 | [...] [Collection element] | -| testGRDB.swift:145:65:145:74 | [...] [Collection element] | testGRDB.swift:145:65:145:74 | [...] | -| testGRDB.swift:145:66:145:66 | password | testGRDB.swift:145:65:145:74 | [...] [Collection element] | -| testGRDB.swift:148:65:148:74 | [...] [Collection element] | testGRDB.swift:148:65:148:74 | [...] | -| testGRDB.swift:148:66:148:66 | password | testGRDB.swift:148:65:148:74 | [...] [Collection element] | -| testGRDB.swift:150:65:150:74 | [...] [Collection element] | testGRDB.swift:150:65:150:74 | [...] | -| testGRDB.swift:150:66:150:66 | password | testGRDB.swift:150:65:150:74 | [...] [Collection element] | -| testGRDB.swift:153:65:153:74 | [...] [Collection element] | testGRDB.swift:153:65:153:74 | [...] | -| testGRDB.swift:153:66:153:66 | password | testGRDB.swift:153:65:153:74 | [...] [Collection element] | -| testGRDB.swift:155:65:155:74 | [...] [Collection element] | testGRDB.swift:155:65:155:74 | [...] | -| testGRDB.swift:155:66:155:66 | password | testGRDB.swift:155:65:155:74 | [...] [Collection element] | -| testGRDB.swift:160:59:160:68 | [...] [Collection element] | testGRDB.swift:160:59:160:68 | [...] | -| testGRDB.swift:160:60:160:60 | password | testGRDB.swift:160:59:160:68 | [...] [Collection element] | -| testGRDB.swift:161:50:161:59 | [...] [Collection element] | testGRDB.swift:161:50:161:59 | [...] | -| testGRDB.swift:161:51:161:51 | password | testGRDB.swift:161:50:161:59 | [...] [Collection element] | -| testGRDB.swift:164:59:164:68 | [...] [Collection element] | testGRDB.swift:164:59:164:68 | [...] | -| testGRDB.swift:164:60:164:60 | password | testGRDB.swift:164:59:164:68 | [...] [Collection element] | -| testGRDB.swift:165:50:165:59 | [...] [Collection element] | testGRDB.swift:165:50:165:59 | [...] | -| testGRDB.swift:165:51:165:51 | password | testGRDB.swift:165:50:165:59 | [...] [Collection element] | -| testGRDB.swift:169:56:169:65 | [...] [Collection element] | testGRDB.swift:169:56:169:65 | [...] | -| testGRDB.swift:169:57:169:57 | password | testGRDB.swift:169:56:169:65 | [...] [Collection element] | -| testGRDB.swift:170:47:170:56 | [...] [Collection element] | testGRDB.swift:170:47:170:56 | [...] | -| testGRDB.swift:170:48:170:48 | password | testGRDB.swift:170:47:170:56 | [...] [Collection element] | -| testGRDB.swift:173:56:173:65 | [...] [Collection element] | testGRDB.swift:173:56:173:65 | [...] | -| testGRDB.swift:173:57:173:57 | password | testGRDB.swift:173:56:173:65 | [...] [Collection element] | -| testGRDB.swift:174:47:174:56 | [...] [Collection element] | testGRDB.swift:174:47:174:56 | [...] | -| testGRDB.swift:174:48:174:48 | password | testGRDB.swift:174:47:174:56 | [...] [Collection element] | -| testGRDB.swift:178:56:178:65 | [...] [Collection element] | testGRDB.swift:178:56:178:65 | [...] | -| testGRDB.swift:178:57:178:57 | password | testGRDB.swift:178:56:178:65 | [...] [Collection element] | -| testGRDB.swift:179:47:179:56 | [...] [Collection element] | testGRDB.swift:179:47:179:56 | [...] | -| testGRDB.swift:179:48:179:48 | password | testGRDB.swift:179:47:179:56 | [...] [Collection element] | -| testGRDB.swift:182:56:182:65 | [...] [Collection element] | testGRDB.swift:182:56:182:65 | [...] | -| testGRDB.swift:182:57:182:57 | password | testGRDB.swift:182:56:182:65 | [...] [Collection element] | -| testGRDB.swift:183:47:183:56 | [...] [Collection element] | testGRDB.swift:183:47:183:56 | [...] | -| testGRDB.swift:183:48:183:48 | password | testGRDB.swift:183:47:183:56 | [...] [Collection element] | -| testGRDB.swift:187:56:187:65 | [...] [Collection element] | testGRDB.swift:187:56:187:65 | [...] | -| testGRDB.swift:187:57:187:57 | password | testGRDB.swift:187:56:187:65 | [...] [Collection element] | -| testGRDB.swift:188:47:188:56 | [...] [Collection element] | testGRDB.swift:188:47:188:56 | [...] | -| testGRDB.swift:188:48:188:48 | password | testGRDB.swift:188:47:188:56 | [...] [Collection element] | -| testGRDB.swift:191:56:191:65 | [...] [Collection element] | testGRDB.swift:191:56:191:65 | [...] | -| testGRDB.swift:191:57:191:57 | password | testGRDB.swift:191:56:191:65 | [...] [Collection element] | -| testGRDB.swift:192:47:192:56 | [...] [Collection element] | testGRDB.swift:192:47:192:56 | [...] | -| testGRDB.swift:192:48:192:48 | password | testGRDB.swift:192:47:192:56 | [...] [Collection element] | -| testGRDB.swift:198:29:198:38 | [...] [Collection element] | testGRDB.swift:198:29:198:38 | [...] | -| testGRDB.swift:198:30:198:30 | password | testGRDB.swift:198:29:198:38 | [...] [Collection element] | -| testGRDB.swift:201:23:201:32 | [...] [Collection element] | testGRDB.swift:201:23:201:32 | [...] | -| testGRDB.swift:201:24:201:24 | password | testGRDB.swift:201:23:201:32 | [...] [Collection element] | -| testGRDB.swift:206:66:206:75 | [...] [Collection element] | testGRDB.swift:206:66:206:75 | [...] | -| testGRDB.swift:206:67:206:67 | password | testGRDB.swift:206:66:206:75 | [...] [Collection element] | -| testGRDB.swift:208:80:208:89 | [...] [Collection element] | testGRDB.swift:208:80:208:89 | [...] | -| testGRDB.swift:208:81:208:81 | password | testGRDB.swift:208:80:208:89 | [...] [Collection element] | -| testGRDB.swift:210:84:210:93 | [...] [Collection element] | testGRDB.swift:210:84:210:93 | [...] | -| testGRDB.swift:210:85:210:85 | password | testGRDB.swift:210:84:210:93 | [...] [Collection element] | -| testGRDB.swift:212:98:212:107 | [...] [Collection element] | testGRDB.swift:212:98:212:107 | [...] | -| testGRDB.swift:212:99:212:99 | password | testGRDB.swift:212:98:212:107 | [...] [Collection element] | -| testRealm2.swift:13:6:13:6 | value | file://:0:0:0:0 | value | -| testRealm2.swift:18:2:18:2 | [post] o [data] | testRealm2.swift:18:2:18:2 | [post] o | -| testRealm2.swift:18:11:18:11 | myPassword | testRealm2.swift:13:6:13:6 | value | -| testRealm2.swift:18:11:18:11 | myPassword | testRealm2.swift:18:2:18:2 | [post] o [data] | -| testRealm.swift:27:6:27:6 | value | file://:0:0:0:0 | value | -| testRealm.swift:34:6:34:6 | value | file://:0:0:0:0 | value | -| testRealm.swift:41:2:41:2 | [post] a [data] | testRealm.swift:41:2:41:2 | [post] a | -| testRealm.swift:41:11:41:11 | myPassword | testRealm.swift:27:6:27:6 | value | -| testRealm.swift:41:11:41:11 | myPassword | testRealm.swift:41:2:41:2 | [post] a [data] | -| testRealm.swift:49:2:49:2 | [post] c [data] | testRealm.swift:49:2:49:2 | [post] c | -| testRealm.swift:49:11:49:11 | myPassword | testRealm.swift:27:6:27:6 | value | -| testRealm.swift:49:11:49:11 | myPassword | testRealm.swift:49:2:49:2 | [post] c [data] | -| testRealm.swift:59:2:59:3 | [post] ...! [data] | testRealm.swift:59:2:59:3 | [post] ...! | -| testRealm.swift:59:12:59:12 | myPassword | testRealm.swift:27:6:27:6 | value | -| testRealm.swift:59:12:59:12 | myPassword | testRealm.swift:59:2:59:3 | [post] ...! [data] | -| testRealm.swift:66:2:66:2 | [post] g [data] | testRealm.swift:66:2:66:2 | [post] g | -| testRealm.swift:66:11:66:11 | myPassword | testRealm.swift:27:6:27:6 | value | -| testRealm.swift:66:11:66:11 | myPassword | testRealm.swift:66:2:66:2 | [post] g [data] | -| testRealm.swift:73:2:73:2 | [post] h [password] | testRealm.swift:73:2:73:2 | [post] h | -| testRealm.swift:73:15:73:15 | myPassword | testRealm.swift:34:6:34:6 | value | -| testRealm.swift:73:15:73:15 | myPassword | testRealm.swift:73:2:73:2 | [post] h [password] | +| SQLite.swift:119:70:119:70 | mobilePhoneNumber | SQLite.swift:123:17:123:17 | insertQuery | provenance | | +| SQLite.swift:119:70:119:70 | mobilePhoneNumber | SQLite.swift:127:21:127:21 | insertQuery | provenance | | +| SQLite.swift:119:70:119:70 | mobilePhoneNumber | SQLite.swift:131:17:131:17 | insertQuery | provenance | | +| SQLite.swift:119:70:119:70 | mobilePhoneNumber | SQLite.swift:135:20:135:20 | insertQuery | provenance | | +| SQLite.swift:119:70:119:70 | mobilePhoneNumber | SQLite.swift:139:24:139:24 | insertQuery | provenance | | +| SQLite.swift:120:50:120:50 | mobilePhoneNumber | SQLite.swift:124:17:124:17 | updateQuery | provenance | | +| SQLite.swift:120:50:120:50 | mobilePhoneNumber | SQLite.swift:128:21:128:21 | updateQuery | provenance | | +| SQLite.swift:120:50:120:50 | mobilePhoneNumber | SQLite.swift:132:17:132:17 | updateQuery | provenance | | +| SQLite.swift:120:50:120:50 | mobilePhoneNumber | SQLite.swift:136:20:136:20 | updateQuery | provenance | | +| SQLite.swift:120:50:120:50 | mobilePhoneNumber | SQLite.swift:140:24:140:24 | updateQuery | provenance | | +| SQLite.swift:147:32:147:32 | [...] [Collection element] | SQLite.swift:147:32:147:32 | [...] | provenance | | +| SQLite.swift:147:32:147:32 | mobilePhoneNumber | SQLite.swift:147:32:147:32 | [...] [Collection element] | provenance | | +| SQLite.swift:148:28:148:28 | [...] [Collection element] | SQLite.swift:148:28:148:28 | [...] | provenance | | +| SQLite.swift:148:28:148:28 | mobilePhoneNumber | SQLite.swift:148:28:148:28 | [...] [Collection element] | provenance | | +| SQLite.swift:149:31:149:31 | [...] [Collection element] | SQLite.swift:149:31:149:31 | [...] | provenance | | +| SQLite.swift:149:31:149:31 | mobilePhoneNumber | SQLite.swift:149:31:149:31 | [...] [Collection element] | provenance | | +| SQLite.swift:152:21:152:21 | [...] [Collection element] | SQLite.swift:152:21:152:21 | [...] | provenance | | +| SQLite.swift:152:21:152:21 | mobilePhoneNumber | SQLite.swift:152:21:152:21 | [...] [Collection element] | provenance | | +| SQLite.swift:153:20:153:20 | [...] [Collection element] | SQLite.swift:153:20:153:20 | [...] | provenance | | +| SQLite.swift:153:20:153:20 | mobilePhoneNumber | SQLite.swift:153:20:153:20 | [...] [Collection element] | provenance | | +| SQLite.swift:154:23:154:23 | [...] [Collection element] | SQLite.swift:154:23:154:23 | [...] | provenance | | +| SQLite.swift:154:23:154:23 | mobilePhoneNumber | SQLite.swift:154:23:154:23 | [...] [Collection element] | provenance | | +| SQLite.swift:158:32:158:54 | [...] [Collection element] | SQLite.swift:158:32:158:54 | [...] | provenance | | +| SQLite.swift:158:33:158:33 | mobilePhoneNumber | SQLite.swift:158:32:158:54 | [...] [Collection element] | provenance | | +| SQLite.swift:159:28:159:50 | [...] [Collection element] | SQLite.swift:159:28:159:50 | [...] | provenance | | +| SQLite.swift:159:29:159:29 | mobilePhoneNumber | SQLite.swift:159:28:159:50 | [...] [Collection element] | provenance | | +| SQLite.swift:160:31:160:53 | [...] [Collection element] | SQLite.swift:160:31:160:53 | [...] | provenance | | +| SQLite.swift:160:32:160:32 | mobilePhoneNumber | SQLite.swift:160:31:160:53 | [...] [Collection element] | provenance | | +| SQLite.swift:163:21:163:43 | [...] [Collection element] | SQLite.swift:163:21:163:43 | [...] | provenance | | +| SQLite.swift:163:22:163:22 | mobilePhoneNumber | SQLite.swift:163:21:163:43 | [...] [Collection element] | provenance | | +| SQLite.swift:164:20:164:42 | [...] [Collection element] | SQLite.swift:164:20:164:42 | [...] | provenance | | +| SQLite.swift:164:21:164:21 | mobilePhoneNumber | SQLite.swift:164:20:164:42 | [...] [Collection element] | provenance | | +| SQLite.swift:165:23:165:45 | [...] [Collection element] | SQLite.swift:165:23:165:45 | [...] | provenance | | +| SQLite.swift:165:24:165:24 | mobilePhoneNumber | SQLite.swift:165:23:165:45 | [...] [Collection element] | provenance | | +| SQLite.swift:169:32:169:70 | [...] [Collection element, Tuple element at index 1] | SQLite.swift:169:32:169:70 | [...] | provenance | | +| SQLite.swift:169:43:169:53 | (...) [Tuple element at index 1] | SQLite.swift:169:32:169:70 | [...] [Collection element, Tuple element at index 1] | provenance | | +| SQLite.swift:169:53:169:53 | mobilePhoneNumber | SQLite.swift:169:43:169:53 | (...) [Tuple element at index 1] | provenance | | +| SQLite.swift:170:28:170:66 | [...] [Collection element, Tuple element at index 1] | SQLite.swift:170:28:170:66 | [...] | provenance | | +| SQLite.swift:170:39:170:49 | (...) [Tuple element at index 1] | SQLite.swift:170:28:170:66 | [...] [Collection element, Tuple element at index 1] | provenance | | +| SQLite.swift:170:49:170:49 | mobilePhoneNumber | SQLite.swift:170:39:170:49 | (...) [Tuple element at index 1] | provenance | | +| SQLite.swift:171:31:171:69 | [...] [Collection element, Tuple element at index 1] | SQLite.swift:171:31:171:69 | [...] | provenance | | +| SQLite.swift:171:42:171:52 | (...) [Tuple element at index 1] | SQLite.swift:171:31:171:69 | [...] [Collection element, Tuple element at index 1] | provenance | | +| SQLite.swift:171:52:171:52 | mobilePhoneNumber | SQLite.swift:171:42:171:52 | (...) [Tuple element at index 1] | provenance | | +| SQLite.swift:174:21:174:59 | [...] [Collection element, Tuple element at index 1] | SQLite.swift:174:21:174:59 | [...] | provenance | | +| SQLite.swift:174:32:174:42 | (...) [Tuple element at index 1] | SQLite.swift:174:21:174:59 | [...] [Collection element, Tuple element at index 1] | provenance | | +| SQLite.swift:174:42:174:42 | mobilePhoneNumber | SQLite.swift:174:32:174:42 | (...) [Tuple element at index 1] | provenance | | +| SQLite.swift:175:20:175:58 | [...] [Collection element, Tuple element at index 1] | SQLite.swift:175:20:175:58 | [...] | provenance | | +| SQLite.swift:175:31:175:41 | (...) [Tuple element at index 1] | SQLite.swift:175:20:175:58 | [...] [Collection element, Tuple element at index 1] | provenance | | +| SQLite.swift:175:41:175:41 | mobilePhoneNumber | SQLite.swift:175:31:175:41 | (...) [Tuple element at index 1] | provenance | | +| SQLite.swift:176:23:176:61 | [...] [Collection element, Tuple element at index 1] | SQLite.swift:176:23:176:61 | [...] | provenance | | +| SQLite.swift:176:34:176:44 | (...) [Tuple element at index 1] | SQLite.swift:176:23:176:61 | [...] [Collection element, Tuple element at index 1] | provenance | | +| SQLite.swift:176:44:176:44 | mobilePhoneNumber | SQLite.swift:176:34:176:44 | (...) [Tuple element at index 1] | provenance | | +| SQLite.swift:186:40:186:54 | ... <-(_:_:) ... | SQLite.swift:186:40:186:54 | [...] [Collection element] | provenance | | +| SQLite.swift:186:40:186:54 | [...] [Collection element] | SQLite.swift:186:40:186:54 | [...] | provenance | | +| SQLite.swift:186:54:186:54 | mobilePhoneNumber | SQLite.swift:186:40:186:54 | ... <-(_:_:) ... | provenance | | +| SQLite.swift:189:26:189:40 | ... <-(_:_:) ... | SQLite.swift:189:26:189:40 | [...] [Collection element] | provenance | | +| SQLite.swift:189:26:189:40 | [...] [Collection element] | SQLite.swift:189:26:189:40 | [...] | provenance | | +| SQLite.swift:189:40:189:40 | mobilePhoneNumber | SQLite.swift:189:26:189:40 | ... <-(_:_:) ... | provenance | | +| SQLite.swift:191:27:191:41 | ... <-(_:_:) ... | SQLite.swift:191:27:191:41 | [...] [Collection element] | provenance | | +| SQLite.swift:191:27:191:41 | [...] [Collection element] | SQLite.swift:191:27:191:41 | [...] | provenance | | +| SQLite.swift:191:41:191:41 | mobilePhoneNumber | SQLite.swift:191:27:191:41 | ... <-(_:_:) ... | provenance | | +| SQLite.swift:193:26:193:89 | ... <-(_:_:) ... | SQLite.swift:193:26:193:89 | [...] [Collection element] | provenance | | +| SQLite.swift:193:26:193:89 | [...] [Collection element] | SQLite.swift:193:26:193:89 | [...] | provenance | | +| SQLite.swift:193:40:193:89 | call to replace(_:with:) | SQLite.swift:193:26:193:89 | ... <-(_:_:) ... | provenance | | +| SQLite.swift:193:72:193:72 | mobilePhoneNumber | SQLite.swift:193:40:193:89 | call to replace(_:with:) | provenance | | +| SQLite.swift:197:16:197:50 | [...] [Collection element, Collection element] | SQLite.swift:199:30:199:30 | badMany | provenance | | +| SQLite.swift:197:16:197:50 | [...] [Collection element, Collection element] | SQLite.swift:201:54:201:54 | badMany | provenance | | +| 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 | self | file://:0:0:0:0 | .value | provenance | | +| file://:0:0:0:0 | self | file://:0:0:0:0 | .value2 | 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 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | [post] self [notStoredBankAccountNumber] | provenance | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | [post] self [password] | provenance | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | [post] self [value] | provenance | | +| sqlite3_c_api.swift:42:69:42:69 | medicalNotes | sqlite3_c_api.swift:46:27:46:27 | insertQuery | provenance | | +| sqlite3_c_api.swift:43:49:43:49 | medicalNotes | sqlite3_c_api.swift:47:27:47:27 | updateQuery | provenance | | +| testCoreData2.swift:23:13:23:13 | value | file://:0:0:0:0 | value | provenance | | +| testCoreData2.swift:37:2:37:2 | [post] obj [myValue] | testCoreData2.swift:37:2:37:2 | [post] obj | provenance | | +| testCoreData2.swift:37:16:37:16 | bankAccountNo | testCoreData2.swift:37:2:37:2 | [post] obj [myValue] | provenance | | +| testCoreData2.swift:39:2:39:2 | [post] obj [myBankAccountNumber] | testCoreData2.swift:39:2:39:2 | [post] obj | provenance | | +| testCoreData2.swift:39:28:39:28 | bankAccountNo | testCoreData2.swift:39:2:39:2 | [post] obj [myBankAccountNumber] | provenance | | +| testCoreData2.swift:41:2:41:2 | [post] obj [myBankAccountNumber2] | testCoreData2.swift:41:2:41:2 | [post] obj | provenance | | +| testCoreData2.swift:41:29:41:29 | bankAccountNo | testCoreData2.swift:41:2:41:2 | [post] obj [myBankAccountNumber2] | provenance | | +| testCoreData2.swift:43:2:43:2 | [post] obj [notStoredBankAccountNumber] | testCoreData2.swift:43:2:43:2 | [post] obj | provenance | | +| testCoreData2.swift:43:35:43:35 | bankAccountNo | testCoreData2.swift:23:13:23:13 | value | provenance | | +| testCoreData2.swift:43:35:43:35 | bankAccountNo | testCoreData2.swift:43:2:43:2 | [post] obj [notStoredBankAccountNumber] | provenance | | +| testCoreData2.swift:46:2:46:10 | [post] ...? [myValue] | testCoreData2.swift:46:2:46:10 | [post] ...? | provenance | | +| testCoreData2.swift:46:22:46:22 | bankAccountNo | testCoreData2.swift:46:2:46:10 | [post] ...? [myValue] | provenance | | +| testCoreData2.swift:48:2:48:10 | [post] ...? [myBankAccountNumber] | testCoreData2.swift:48:2:48:10 | [post] ...? | provenance | | +| testCoreData2.swift:48:34:48:34 | bankAccountNo | testCoreData2.swift:48:2:48:10 | [post] ...? [myBankAccountNumber] | provenance | | +| testCoreData2.swift:50:2:50:10 | [post] ...? [myBankAccountNumber2] | testCoreData2.swift:50:2:50:10 | [post] ...? | provenance | | +| testCoreData2.swift:50:35:50:35 | bankAccountNo | testCoreData2.swift:50:2:50:10 | [post] ...? [myBankAccountNumber2] | provenance | | +| testCoreData2.swift:52:2:52:10 | [post] ...? [notStoredBankAccountNumber] | testCoreData2.swift:52:2:52:10 | [post] ...? | provenance | | +| testCoreData2.swift:52:41:52:41 | bankAccountNo | testCoreData2.swift:23:13:23:13 | value | provenance | | +| testCoreData2.swift:52:41:52:41 | bankAccountNo | testCoreData2.swift:52:2:52:10 | [post] ...? [notStoredBankAccountNumber] | provenance | | +| testCoreData2.swift:57:3:57:3 | [post] obj [myBankAccountNumber] | testCoreData2.swift:57:3:57:3 | [post] obj | provenance | | +| testCoreData2.swift:57:29:57:29 | bankAccountNo | testCoreData2.swift:57:3:57:3 | [post] obj [myBankAccountNumber] | provenance | | +| testCoreData2.swift:60:4:60:4 | [post] obj [myBankAccountNumber] | testCoreData2.swift:60:4:60:4 | [post] obj | provenance | | +| testCoreData2.swift:60:30:60:30 | bankAccountNo | testCoreData2.swift:60:4:60:4 | [post] obj [myBankAccountNumber] | provenance | | +| testCoreData2.swift:62:4:62:4 | [post] obj [myBankAccountNumber] | testCoreData2.swift:62:4:62:4 | [post] obj | provenance | | +| testCoreData2.swift:62:30:62:30 | bankAccountNo | testCoreData2.swift:62:4:62:4 | [post] obj [myBankAccountNumber] | provenance | | +| testCoreData2.swift:65:3:65:3 | [post] obj [myBankAccountNumber] | testCoreData2.swift:65:3:65:3 | [post] obj | provenance | | +| testCoreData2.swift:65:29:65:29 | bankAccountNo | testCoreData2.swift:65:3:65:3 | [post] obj [myBankAccountNumber] | provenance | | +| testCoreData2.swift:70:9:70:9 | self | file://:0:0:0:0 | self | provenance | | +| testCoreData2.swift:70:9:70:9 | self [value] | file://:0:0:0:0 | self [value] | provenance | | +| testCoreData2.swift:70:9:70:9 | value | file://:0:0:0:0 | value | provenance | | +| testCoreData2.swift:71:9:71:9 | self | file://:0:0:0:0 | self | provenance | | +| testCoreData2.swift:79:2:79:2 | [post] dbObj [myValue] | testCoreData2.swift:79:2:79:2 | [post] dbObj | provenance | | +| testCoreData2.swift:79:18:79:28 | .bankAccountNo | testCoreData2.swift:79:2:79:2 | [post] dbObj [myValue] | provenance | | +| testCoreData2.swift:80:2:80:2 | [post] dbObj [myValue] | testCoreData2.swift:80:2:80:2 | [post] dbObj | provenance | | +| testCoreData2.swift:80:18:80:28 | ...! | testCoreData2.swift:80:2:80:2 | [post] dbObj [myValue] | provenance | | +| testCoreData2.swift:80:18:80:28 | .bankAccountNo2 | testCoreData2.swift:80:18:80:28 | ...! | provenance | | +| testCoreData2.swift:82:2:82:2 | [post] dbObj [myValue] | testCoreData2.swift:82:2:82:2 | [post] dbObj | provenance | | +| testCoreData2.swift:82:18:82:18 | bankAccountNo | testCoreData2.swift:70:9:70:9 | self | provenance | | +| testCoreData2.swift:82:18:82:18 | bankAccountNo | testCoreData2.swift:82:18:82:32 | .value | provenance | | +| testCoreData2.swift:82:18:82:32 | .value | testCoreData2.swift:82:2:82:2 | [post] dbObj [myValue] | provenance | | +| testCoreData2.swift:83:2:83:2 | [post] dbObj [myValue] | testCoreData2.swift:83:2:83:2 | [post] dbObj | provenance | | +| testCoreData2.swift:83:18:83:18 | bankAccountNo | testCoreData2.swift:71:9:71:9 | self | provenance | | +| testCoreData2.swift:83:18:83:18 | bankAccountNo | testCoreData2.swift:83:18:83:32 | .value2 | provenance | | +| testCoreData2.swift:83:18:83:32 | ...! | testCoreData2.swift:83:2:83:2 | [post] dbObj [myValue] | provenance | | +| testCoreData2.swift:83:18:83:32 | .value2 | testCoreData2.swift:83:18:83:32 | ...! | provenance | | +| testCoreData2.swift:84:2:84:2 | [post] dbObj [myValue] | testCoreData2.swift:84:2:84:2 | [post] dbObj | provenance | | +| testCoreData2.swift:84:18:84:18 | ...! | testCoreData2.swift:70:9:70:9 | self | provenance | | +| testCoreData2.swift:84:18:84:18 | ...! | testCoreData2.swift:84:18:84:33 | .value | provenance | | +| testCoreData2.swift:84:18:84:18 | bankAccountNo2 | testCoreData2.swift:84:18:84:18 | ...! | provenance | | +| testCoreData2.swift:84:18:84:33 | .value | testCoreData2.swift:84:2:84:2 | [post] dbObj [myValue] | provenance | | +| testCoreData2.swift:85:2:85:2 | [post] dbObj [myValue] | testCoreData2.swift:85:2:85:2 | [post] dbObj | provenance | | +| testCoreData2.swift:85:18:85:18 | ...! | testCoreData2.swift:71:9:71:9 | self | provenance | | +| testCoreData2.swift:85:18:85:18 | ...! | testCoreData2.swift:85:18:85:33 | .value2 | provenance | | +| testCoreData2.swift:85:18:85:18 | bankAccountNo2 | testCoreData2.swift:85:18:85:18 | ...! | provenance | | +| testCoreData2.swift:85:18:85:33 | ...! | testCoreData2.swift:85:2:85:2 | [post] dbObj [myValue] | provenance | | +| testCoreData2.swift:85:18:85:33 | .value2 | testCoreData2.swift:85:18:85:33 | ...! | provenance | | +| testCoreData2.swift:87:2:87:10 | [post] ...? [myValue] | testCoreData2.swift:87:2:87:10 | [post] ...? | provenance | | +| testCoreData2.swift:87:22:87:32 | .bankAccountNo | testCoreData2.swift:87:2:87:10 | [post] ...? [myValue] | provenance | | +| testCoreData2.swift:88:2:88:10 | [post] ...? [myValue] | testCoreData2.swift:88:2:88:10 | [post] ...? | provenance | | +| testCoreData2.swift:88:22:88:22 | bankAccountNo | testCoreData2.swift:70:9:70:9 | self | provenance | | +| testCoreData2.swift:88:22:88:22 | bankAccountNo | testCoreData2.swift:88:22:88:36 | .value | provenance | | +| testCoreData2.swift:88:22:88:36 | .value | testCoreData2.swift:88:2:88:10 | [post] ...? [myValue] | provenance | | +| testCoreData2.swift:89:2:89:10 | [post] ...? [myValue] | testCoreData2.swift:89:2:89:10 | [post] ...? | provenance | | +| testCoreData2.swift:89:22:89:22 | ...! | testCoreData2.swift:71:9:71:9 | self | provenance | | +| testCoreData2.swift:89:22:89:22 | ...! | testCoreData2.swift:89:22:89:37 | .value2 | provenance | | +| testCoreData2.swift:89:22:89:22 | bankAccountNo2 | testCoreData2.swift:89:22:89:22 | ...! | provenance | | +| testCoreData2.swift:89:22:89:37 | ...! | testCoreData2.swift:89:2:89:10 | [post] ...? [myValue] | provenance | | +| testCoreData2.swift:89:22:89:37 | .value2 | testCoreData2.swift:89:22:89:37 | ...! | provenance | | +| testCoreData2.swift:91:10:91:10 | bankAccountNo | testCoreData2.swift:92:10:92:10 | a | provenance | | +| testCoreData2.swift:92:10:92:10 | a | testCoreData2.swift:70:9:70:9 | self | provenance | | +| testCoreData2.swift:92:10:92:10 | a | testCoreData2.swift:92:10:92:12 | .value | provenance | | +| testCoreData2.swift:92:10:92:12 | .value | testCoreData2.swift:93:18:93:18 | b | provenance | | +| testCoreData2.swift:93:2:93:2 | [post] dbObj [myValue] | testCoreData2.swift:93:2:93:2 | [post] dbObj | provenance | | +| testCoreData2.swift:93:18:93:18 | b | testCoreData2.swift:93:2:93:2 | [post] dbObj [myValue] | provenance | | +| testCoreData2.swift:95:10:95:10 | bankAccountNo | testCoreData2.swift:97:12:97:12 | c | provenance | | +| testCoreData2.swift:97:2:97:2 | [post] d [value] | testCoreData2.swift:98:18:98:18 | d [value] | provenance | | +| testCoreData2.swift:97:12:97:12 | c | testCoreData2.swift:70:9:70:9 | self | provenance | | +| testCoreData2.swift:97:12:97:12 | c | testCoreData2.swift:97:12:97:14 | .value | provenance | | +| testCoreData2.swift:97:12:97:14 | .value | testCoreData2.swift:70:9:70:9 | value | provenance | | +| testCoreData2.swift:97:12:97:14 | .value | testCoreData2.swift:97:2:97:2 | [post] d [value] | provenance | | +| testCoreData2.swift:98:2:98:2 | [post] dbObj [myValue] | testCoreData2.swift:98:2:98:2 | [post] dbObj | provenance | | +| testCoreData2.swift:98:18:98:18 | d [value] | testCoreData2.swift:70:9:70:9 | self [value] | provenance | | +| testCoreData2.swift:98:18:98:18 | d [value] | testCoreData2.swift:98:18:98:20 | .value | provenance | | +| testCoreData2.swift:98:18:98:20 | .value | testCoreData2.swift:98:2:98:2 | [post] dbObj [myValue] | provenance | | +| testCoreData2.swift:101:10:101:10 | bankAccountNo | testCoreData2.swift:103:13:103:13 | e | provenance | | +| testCoreData2.swift:103:13:103:13 | e | testCoreData2.swift:70:9:70:9 | self | provenance | | +| testCoreData2.swift:103:13:103:13 | e | testCoreData2.swift:104:18:104:18 | e | provenance | | +| testCoreData2.swift:104:2:104:2 | [post] dbObj [myValue] | testCoreData2.swift:104:2:104:2 | [post] dbObj | provenance | | +| testCoreData2.swift:104:18:104:18 | e | testCoreData2.swift:70:9:70:9 | self | provenance | | +| testCoreData2.swift:104:18:104:18 | e | testCoreData2.swift:104:18:104:20 | .value | provenance | | +| testCoreData2.swift:104:18:104:18 | e | testCoreData2.swift:105:18:105:18 | e | provenance | | +| testCoreData2.swift:104:18:104:20 | .value | testCoreData2.swift:104:2:104:2 | [post] dbObj [myValue] | provenance | | +| testCoreData2.swift:105:2:105:2 | [post] dbObj [myValue] | testCoreData2.swift:105:2:105:2 | [post] dbObj | provenance | | +| testCoreData2.swift:105:18:105:18 | e | testCoreData2.swift:71:9:71:9 | self | provenance | | +| testCoreData2.swift:105:18:105:18 | e | testCoreData2.swift:105:18:105:20 | .value2 | provenance | | +| testCoreData2.swift:105:18:105:20 | ...! | testCoreData2.swift:105:2:105:2 | [post] dbObj [myValue] | provenance | | +| testCoreData2.swift:105:18:105:20 | .value2 | testCoreData2.swift:105:18:105:20 | ...! | provenance | | +| testCoreData.swift:18:19:18:26 | value | testCoreData.swift:19:12:19:12 | value | provenance | | +| testCoreData.swift:31:3:31:3 | newValue | testCoreData.swift:32:13:32:13 | newValue | provenance | | +| testCoreData.swift:61:25:61:25 | password | testCoreData.swift:18:19:18:26 | value | provenance | | +| testCoreData.swift:64:2:64:2 | [post] obj [myValue] | testCoreData.swift:64:2:64:2 | [post] obj | provenance | | +| testCoreData.swift:64:16:64:16 | password | testCoreData.swift:31:3:31:3 | newValue | provenance | | +| testCoreData.swift:64:16:64:16 | password | testCoreData.swift:64:2:64:2 | [post] obj [myValue] | provenance | | +| testCoreData.swift:77:24:77:24 | x | testCoreData.swift:78:15:78:15 | x | provenance | | +| testCoreData.swift:80:10:80:22 | call to getPassword() | testCoreData.swift:81:15:81:15 | y | provenance | | +| testCoreData.swift:91:10:91:10 | passwd | testCoreData.swift:95:15:95:15 | x | provenance | | +| testCoreData.swift:92:10:92:10 | passwd | testCoreData.swift:96:15:96:15 | y | provenance | | +| testCoreData.swift:93:10:93:10 | passwd | testCoreData.swift:97:15:97:15 | z | provenance | | +| testGRDB.swift:73:56:73:65 | [...] [Collection element] | testGRDB.swift:73:56:73:65 | [...] | provenance | | +| testGRDB.swift:73:57:73:57 | password | testGRDB.swift:73:56:73:65 | [...] [Collection element] | provenance | | +| testGRDB.swift:76:42:76:51 | [...] [Collection element] | testGRDB.swift:76:42:76:51 | [...] | provenance | | +| testGRDB.swift:76:43:76:43 | password | testGRDB.swift:76:42:76:51 | [...] [Collection element] | provenance | | +| testGRDB.swift:81:44:81:53 | [...] [Collection element] | testGRDB.swift:81:44:81:53 | [...] | provenance | | +| testGRDB.swift:81:45:81:45 | password | testGRDB.swift:81:44:81:53 | [...] [Collection element] | provenance | | +| testGRDB.swift:83:44:83:53 | [...] [Collection element] | testGRDB.swift:83:44:83:53 | [...] | provenance | | +| testGRDB.swift:83:45:83:45 | password | testGRDB.swift:83:44:83:53 | [...] [Collection element] | provenance | | +| testGRDB.swift:85:44:85:53 | [...] [Collection element] | testGRDB.swift:85:44:85:53 | [...] | provenance | | +| testGRDB.swift:85:45:85:45 | password | testGRDB.swift:85:44:85:53 | [...] [Collection element] | provenance | | +| testGRDB.swift:87:44:87:53 | [...] [Collection element] | testGRDB.swift:87:44:87:53 | [...] | provenance | | +| testGRDB.swift:87:45:87:45 | password | testGRDB.swift:87:44:87:53 | [...] [Collection element] | provenance | | +| testGRDB.swift:92:37:92:46 | [...] [Collection element] | testGRDB.swift:92:37:92:46 | [...] | provenance | | +| testGRDB.swift:92:38:92:38 | password | testGRDB.swift:92:37:92:46 | [...] [Collection element] | provenance | | +| testGRDB.swift:95:36:95:45 | [...] [Collection element] | testGRDB.swift:95:36:95:45 | [...] | provenance | | +| testGRDB.swift:95:37:95:37 | password | testGRDB.swift:95:36:95:45 | [...] [Collection element] | provenance | | +| testGRDB.swift:100:72:100:81 | [...] [Collection element] | testGRDB.swift:100:72:100:81 | [...] | provenance | | +| testGRDB.swift:100:73:100:73 | password | testGRDB.swift:100:72:100:81 | [...] [Collection element] | provenance | | +| testGRDB.swift:101:72:101:81 | [...] [Collection element] | testGRDB.swift:101:72:101:81 | [...] | provenance | | +| testGRDB.swift:101:73:101:73 | password | testGRDB.swift:101:72:101:81 | [...] [Collection element] | provenance | | +| testGRDB.swift:107:52:107:61 | [...] [Collection element] | testGRDB.swift:107:52:107:61 | [...] | provenance | | +| testGRDB.swift:107:53:107:53 | password | testGRDB.swift:107:52:107:61 | [...] [Collection element] | provenance | | +| testGRDB.swift:109:52:109:61 | [...] [Collection element] | testGRDB.swift:109:52:109:61 | [...] | provenance | | +| testGRDB.swift:109:53:109:53 | password | testGRDB.swift:109:52:109:61 | [...] [Collection element] | provenance | | +| testGRDB.swift:111:51:111:60 | [...] [Collection element] | testGRDB.swift:111:51:111:60 | [...] | provenance | | +| testGRDB.swift:111:52:111:52 | password | testGRDB.swift:111:51:111:60 | [...] [Collection element] | provenance | | +| testGRDB.swift:116:47:116:56 | [...] [Collection element] | testGRDB.swift:116:47:116:56 | [...] | provenance | | +| testGRDB.swift:116:48:116:48 | password | testGRDB.swift:116:47:116:56 | [...] [Collection element] | provenance | | +| testGRDB.swift:118:47:118:56 | [...] [Collection element] | testGRDB.swift:118:47:118:56 | [...] | provenance | | +| testGRDB.swift:118:48:118:48 | password | testGRDB.swift:118:47:118:56 | [...] [Collection element] | provenance | | +| testGRDB.swift:121:44:121:53 | [...] [Collection element] | testGRDB.swift:121:44:121:53 | [...] | provenance | | +| testGRDB.swift:121:45:121:45 | password | testGRDB.swift:121:44:121:53 | [...] [Collection element] | provenance | | +| testGRDB.swift:123:44:123:53 | [...] [Collection element] | testGRDB.swift:123:44:123:53 | [...] | provenance | | +| testGRDB.swift:123:45:123:45 | password | testGRDB.swift:123:44:123:53 | [...] [Collection element] | provenance | | +| testGRDB.swift:126:44:126:53 | [...] [Collection element] | testGRDB.swift:126:44:126:53 | [...] | provenance | | +| testGRDB.swift:126:45:126:45 | password | testGRDB.swift:126:44:126:53 | [...] [Collection element] | provenance | | +| testGRDB.swift:128:44:128:53 | [...] [Collection element] | testGRDB.swift:128:44:128:53 | [...] | provenance | | +| testGRDB.swift:128:45:128:45 | password | testGRDB.swift:128:44:128:53 | [...] [Collection element] | provenance | | +| testGRDB.swift:131:44:131:53 | [...] [Collection element] | testGRDB.swift:131:44:131:53 | [...] | provenance | | +| testGRDB.swift:131:45:131:45 | password | testGRDB.swift:131:44:131:53 | [...] [Collection element] | provenance | | +| testGRDB.swift:133:44:133:53 | [...] [Collection element] | testGRDB.swift:133:44:133:53 | [...] | provenance | | +| testGRDB.swift:133:45:133:45 | password | testGRDB.swift:133:44:133:53 | [...] [Collection element] | provenance | | +| testGRDB.swift:138:68:138:77 | [...] [Collection element] | testGRDB.swift:138:68:138:77 | [...] | provenance | | +| testGRDB.swift:138:69:138:69 | password | testGRDB.swift:138:68:138:77 | [...] [Collection element] | provenance | | +| testGRDB.swift:140:68:140:77 | [...] [Collection element] | testGRDB.swift:140:68:140:77 | [...] | provenance | | +| testGRDB.swift:140:69:140:69 | password | testGRDB.swift:140:68:140:77 | [...] [Collection element] | provenance | | +| testGRDB.swift:143:65:143:74 | [...] [Collection element] | testGRDB.swift:143:65:143:74 | [...] | provenance | | +| testGRDB.swift:143:66:143:66 | password | testGRDB.swift:143:65:143:74 | [...] [Collection element] | provenance | | +| testGRDB.swift:145:65:145:74 | [...] [Collection element] | testGRDB.swift:145:65:145:74 | [...] | provenance | | +| testGRDB.swift:145:66:145:66 | password | testGRDB.swift:145:65:145:74 | [...] [Collection element] | provenance | | +| testGRDB.swift:148:65:148:74 | [...] [Collection element] | testGRDB.swift:148:65:148:74 | [...] | provenance | | +| testGRDB.swift:148:66:148:66 | password | testGRDB.swift:148:65:148:74 | [...] [Collection element] | provenance | | +| testGRDB.swift:150:65:150:74 | [...] [Collection element] | testGRDB.swift:150:65:150:74 | [...] | provenance | | +| testGRDB.swift:150:66:150:66 | password | testGRDB.swift:150:65:150:74 | [...] [Collection element] | provenance | | +| testGRDB.swift:153:65:153:74 | [...] [Collection element] | testGRDB.swift:153:65:153:74 | [...] | provenance | | +| testGRDB.swift:153:66:153:66 | password | testGRDB.swift:153:65:153:74 | [...] [Collection element] | provenance | | +| testGRDB.swift:155:65:155:74 | [...] [Collection element] | testGRDB.swift:155:65:155:74 | [...] | provenance | | +| testGRDB.swift:155:66:155:66 | password | testGRDB.swift:155:65:155:74 | [...] [Collection element] | provenance | | +| testGRDB.swift:160:59:160:68 | [...] [Collection element] | testGRDB.swift:160:59:160:68 | [...] | provenance | | +| testGRDB.swift:160:60:160:60 | password | testGRDB.swift:160:59:160:68 | [...] [Collection element] | provenance | | +| testGRDB.swift:161:50:161:59 | [...] [Collection element] | testGRDB.swift:161:50:161:59 | [...] | provenance | | +| testGRDB.swift:161:51:161:51 | password | testGRDB.swift:161:50:161:59 | [...] [Collection element] | provenance | | +| testGRDB.swift:164:59:164:68 | [...] [Collection element] | testGRDB.swift:164:59:164:68 | [...] | provenance | | +| testGRDB.swift:164:60:164:60 | password | testGRDB.swift:164:59:164:68 | [...] [Collection element] | provenance | | +| testGRDB.swift:165:50:165:59 | [...] [Collection element] | testGRDB.swift:165:50:165:59 | [...] | provenance | | +| testGRDB.swift:165:51:165:51 | password | testGRDB.swift:165:50:165:59 | [...] [Collection element] | provenance | | +| testGRDB.swift:169:56:169:65 | [...] [Collection element] | testGRDB.swift:169:56:169:65 | [...] | provenance | | +| testGRDB.swift:169:57:169:57 | password | testGRDB.swift:169:56:169:65 | [...] [Collection element] | provenance | | +| testGRDB.swift:170:47:170:56 | [...] [Collection element] | testGRDB.swift:170:47:170:56 | [...] | provenance | | +| testGRDB.swift:170:48:170:48 | password | testGRDB.swift:170:47:170:56 | [...] [Collection element] | provenance | | +| testGRDB.swift:173:56:173:65 | [...] [Collection element] | testGRDB.swift:173:56:173:65 | [...] | provenance | | +| testGRDB.swift:173:57:173:57 | password | testGRDB.swift:173:56:173:65 | [...] [Collection element] | provenance | | +| testGRDB.swift:174:47:174:56 | [...] [Collection element] | testGRDB.swift:174:47:174:56 | [...] | provenance | | +| testGRDB.swift:174:48:174:48 | password | testGRDB.swift:174:47:174:56 | [...] [Collection element] | provenance | | +| testGRDB.swift:178:56:178:65 | [...] [Collection element] | testGRDB.swift:178:56:178:65 | [...] | provenance | | +| testGRDB.swift:178:57:178:57 | password | testGRDB.swift:178:56:178:65 | [...] [Collection element] | provenance | | +| testGRDB.swift:179:47:179:56 | [...] [Collection element] | testGRDB.swift:179:47:179:56 | [...] | provenance | | +| testGRDB.swift:179:48:179:48 | password | testGRDB.swift:179:47:179:56 | [...] [Collection element] | provenance | | +| testGRDB.swift:182:56:182:65 | [...] [Collection element] | testGRDB.swift:182:56:182:65 | [...] | provenance | | +| testGRDB.swift:182:57:182:57 | password | testGRDB.swift:182:56:182:65 | [...] [Collection element] | provenance | | +| testGRDB.swift:183:47:183:56 | [...] [Collection element] | testGRDB.swift:183:47:183:56 | [...] | provenance | | +| testGRDB.swift:183:48:183:48 | password | testGRDB.swift:183:47:183:56 | [...] [Collection element] | provenance | | +| testGRDB.swift:187:56:187:65 | [...] [Collection element] | testGRDB.swift:187:56:187:65 | [...] | provenance | | +| testGRDB.swift:187:57:187:57 | password | testGRDB.swift:187:56:187:65 | [...] [Collection element] | provenance | | +| testGRDB.swift:188:47:188:56 | [...] [Collection element] | testGRDB.swift:188:47:188:56 | [...] | provenance | | +| testGRDB.swift:188:48:188:48 | password | testGRDB.swift:188:47:188:56 | [...] [Collection element] | provenance | | +| testGRDB.swift:191:56:191:65 | [...] [Collection element] | testGRDB.swift:191:56:191:65 | [...] | provenance | | +| testGRDB.swift:191:57:191:57 | password | testGRDB.swift:191:56:191:65 | [...] [Collection element] | provenance | | +| testGRDB.swift:192:47:192:56 | [...] [Collection element] | testGRDB.swift:192:47:192:56 | [...] | provenance | | +| testGRDB.swift:192:48:192:48 | password | testGRDB.swift:192:47:192:56 | [...] [Collection element] | provenance | | +| testGRDB.swift:198:29:198:38 | [...] [Collection element] | testGRDB.swift:198:29:198:38 | [...] | provenance | | +| testGRDB.swift:198:30:198:30 | password | testGRDB.swift:198:29:198:38 | [...] [Collection element] | provenance | | +| testGRDB.swift:201:23:201:32 | [...] [Collection element] | testGRDB.swift:201:23:201:32 | [...] | provenance | | +| testGRDB.swift:201:24:201:24 | password | testGRDB.swift:201:23:201:32 | [...] [Collection element] | provenance | | +| testGRDB.swift:206:66:206:75 | [...] [Collection element] | testGRDB.swift:206:66:206:75 | [...] | provenance | | +| testGRDB.swift:206:67:206:67 | password | testGRDB.swift:206:66:206:75 | [...] [Collection element] | provenance | | +| testGRDB.swift:208:80:208:89 | [...] [Collection element] | testGRDB.swift:208:80:208:89 | [...] | provenance | | +| testGRDB.swift:208:81:208:81 | password | testGRDB.swift:208:80:208:89 | [...] [Collection element] | provenance | | +| testGRDB.swift:210:84:210:93 | [...] [Collection element] | testGRDB.swift:210:84:210:93 | [...] | provenance | | +| testGRDB.swift:210:85:210:85 | password | testGRDB.swift:210:84:210:93 | [...] [Collection element] | provenance | | +| testGRDB.swift:212:98:212:107 | [...] [Collection element] | testGRDB.swift:212:98:212:107 | [...] | provenance | | +| testGRDB.swift:212:99:212:99 | password | testGRDB.swift:212:98:212:107 | [...] [Collection element] | provenance | | +| testRealm2.swift:13:6:13:6 | value | file://:0:0:0:0 | value | provenance | | +| testRealm2.swift:18:2:18:2 | [post] o [data] | testRealm2.swift:18:2:18:2 | [post] o | provenance | | +| testRealm2.swift:18:11:18:11 | myPassword | testRealm2.swift:13:6:13:6 | value | provenance | | +| testRealm2.swift:18:11:18:11 | myPassword | testRealm2.swift:18:2:18:2 | [post] o [data] | provenance | | +| testRealm.swift:27:6:27:6 | value | file://:0:0:0:0 | value | provenance | | +| testRealm.swift:34:6:34:6 | value | file://:0:0:0:0 | value | provenance | | +| testRealm.swift:41:2:41:2 | [post] a [data] | testRealm.swift:41:2:41:2 | [post] a | provenance | | +| testRealm.swift:41:11:41:11 | myPassword | testRealm.swift:27:6:27:6 | value | provenance | | +| testRealm.swift:41:11:41:11 | myPassword | testRealm.swift:41:2:41:2 | [post] a [data] | provenance | | +| testRealm.swift:49:2:49:2 | [post] c [data] | testRealm.swift:49:2:49:2 | [post] c | provenance | | +| testRealm.swift:49:11:49:11 | myPassword | testRealm.swift:27:6:27:6 | value | provenance | | +| testRealm.swift:49:11:49:11 | myPassword | testRealm.swift:49:2:49:2 | [post] c [data] | provenance | | +| testRealm.swift:59:2:59:3 | [post] ...! [data] | testRealm.swift:59:2:59:3 | [post] ...! | provenance | | +| testRealm.swift:59:12:59:12 | myPassword | testRealm.swift:27:6:27:6 | value | provenance | | +| testRealm.swift:59:12:59:12 | myPassword | testRealm.swift:59:2:59:3 | [post] ...! [data] | provenance | | +| testRealm.swift:66:2:66:2 | [post] g [data] | testRealm.swift:66:2:66:2 | [post] g | provenance | | +| testRealm.swift:66:11:66:11 | myPassword | testRealm.swift:27:6:27:6 | value | provenance | | +| testRealm.swift:66:11:66:11 | myPassword | testRealm.swift:66:2:66:2 | [post] g [data] | provenance | | +| testRealm.swift:73:2:73:2 | [post] h [password] | testRealm.swift:73:2:73:2 | [post] h | provenance | | +| testRealm.swift:73:15:73:15 | myPassword | testRealm.swift:34:6:34:6 | value | provenance | | +| testRealm.swift:73:15:73:15 | myPassword | testRealm.swift:73:2:73:2 | [post] h [password] | provenance | | nodes | SQLite.swift:119:70:119:70 | mobilePhoneNumber | semmle.label | mobilePhoneNumber | | SQLite.swift:120:50:120:50 | mobilePhoneNumber | semmle.label | mobilePhoneNumber | diff --git a/swift/ql/test/query-tests/Security/CWE-311/CleartextTransmission.expected b/swift/ql/test/query-tests/Security/CWE-311/CleartextTransmission.expected index d5139193e2c..0b3d8336874 100644 --- a/swift/ql/test/query-tests/Security/CWE-311/CleartextTransmission.expected +++ b/swift/ql/test/query-tests/Security/CWE-311/CleartextTransmission.expected @@ -1,37 +1,37 @@ edges -| file://:0:0:0:0 | self | file://:0:0:0:0 | .value | -| testAlamofire.swift:150:45:150:45 | password | testAlamofire.swift:150:13:150:45 | ... .+(_:_:) ... | -| testAlamofire.swift:152:51:152:51 | password | testAlamofire.swift:152:19:152:51 | ... .+(_:_:) ... | -| testAlamofire.swift:154:38:154:38 | email | testAlamofire.swift:154:14:154:46 | ... .+(_:_:) ... | -| testSend.swift:33:14:33:32 | call to Data.init(_:) | testSend.swift:37:19:37:19 | data2 | -| testSend.swift:33:19:33:19 | passwordPlain | testSend.swift:33:14:33:32 | call to Data.init(_:) | -| testSend.swift:41:10:41:18 | data | testSend.swift:41:45:41:45 | data | -| testSend.swift:58:13:58:13 | password | testSend.swift:65:27:65:27 | str1 | -| testSend.swift:59:13:59:13 | password | testSend.swift:66:27:66:27 | str2 | -| testSend.swift:60:13:60:25 | call to pad(_:) | testSend.swift:67:27:67:27 | str3 | -| testSend.swift:60:17:60:17 | password | testSend.swift:41:10:41:18 | data | -| testSend.swift:60:17:60:17 | password | testSend.swift:60:13:60:25 | call to pad(_:) | -| testSend.swift:86:7:86:7 | self | file://:0:0:0:0 | self | -| testSend.swift:94:27:94:30 | .password | testSend.swift:86:7:86:7 | self | -| testSend.swift:94:27:94:30 | .password | testSend.swift:94:27:94:39 | .value | -| testURL.swift:39:50:39:50 | passwd | testURL.swift:39:18:39:50 | ... .+(_:_:) ... | -| testURL.swift:41:51:41:51 | account_no | testURL.swift:41:18:41:51 | ... .+(_:_:) ... | -| testURL.swift:42:51:42:51 | credit_card_no | testURL.swift:42:18:42:51 | ... .+(_:_:) ... | -| testURL.swift:50:51:50:51 | e_mail | testURL.swift:50:18:50:51 | ... .+(_:_:) ... | -| testURL.swift:52:53:52:53 | a_homeaddr_z | testURL.swift:52:18:52:53 | ... .+(_:_:) ... | -| testURL.swift:54:51:54:51 | resident_ID | testURL.swift:54:18:54:51 | ... .+(_:_:) ... | -| testURL.swift:73:52:73:67 | call to get_secret_key() | testURL.swift:73:18:73:67 | ... .+(_:_:) ... | -| testURL.swift:75:53:75:69 | call to get_cert_string() | testURL.swift:75:18:75:69 | ... .+(_:_:) ... | -| testURL.swift:96:51:96:51 | certificate | testURL.swift:96:18:96:18 | "..." | -| testURL.swift:104:16:104:57 | call to SecKeyCopyExternalRepresentation(_:_:) | testURL.swift:105:19:105:53 | call to String.init(data:encoding:) | -| testURL.swift:104:16:104:57 | call to SecKeyCopyExternalRepresentation(_:_:) | testURL.swift:105:32:105:32 | data | -| testURL.swift:104:16:104:57 | call to SecKeyCopyExternalRepresentation(_:_:) | testURL.swift:106:20:106:20 | "..." | -| testURL.swift:105:6:105:10 | let ...? [some:0] | testURL.swift:105:10:105:10 | string | -| testURL.swift:105:10:105:10 | string | testURL.swift:106:20:106:20 | "..." | -| testURL.swift:105:19:105:53 | call to String.init(data:encoding:) | testURL.swift:105:19:105:53 | call to String.init(data:encoding:) [some:0] | -| testURL.swift:105:19:105:53 | call to String.init(data:encoding:) | testURL.swift:106:20:106:20 | "..." | -| testURL.swift:105:19:105:53 | call to String.init(data:encoding:) [some:0] | testURL.swift:105:6:105:10 | let ...? [some:0] | -| testURL.swift:105:32:105:32 | data | testURL.swift:105:19:105:53 | call to String.init(data:encoding:) [some:0] | +| file://:0:0:0:0 | self | file://:0:0:0:0 | .value | provenance | | +| testAlamofire.swift:150:45:150:45 | password | testAlamofire.swift:150:13:150:45 | ... .+(_:_:) ... | provenance | | +| testAlamofire.swift:152:51:152:51 | password | testAlamofire.swift:152:19:152:51 | ... .+(_:_:) ... | provenance | | +| testAlamofire.swift:154:38:154:38 | email | testAlamofire.swift:154:14:154:46 | ... .+(_:_:) ... | provenance | | +| testSend.swift:33:14:33:32 | call to Data.init(_:) | testSend.swift:37:19:37:19 | data2 | provenance | | +| testSend.swift:33:19:33:19 | passwordPlain | testSend.swift:33:14:33:32 | call to Data.init(_:) | provenance | | +| testSend.swift:41:10:41:18 | data | testSend.swift:41:45:41:45 | data | provenance | | +| testSend.swift:58:13:58:13 | password | testSend.swift:65:27:65:27 | str1 | provenance | | +| testSend.swift:59:13:59:13 | password | testSend.swift:66:27:66:27 | str2 | provenance | | +| testSend.swift:60:13:60:25 | call to pad(_:) | testSend.swift:67:27:67:27 | str3 | provenance | | +| testSend.swift:60:17:60:17 | password | testSend.swift:41:10:41:18 | data | provenance | | +| testSend.swift:60:17:60:17 | password | testSend.swift:60:13:60:25 | call to pad(_:) | provenance | | +| testSend.swift:86:7:86:7 | self | file://:0:0:0:0 | self | provenance | | +| testSend.swift:94:27:94:30 | .password | testSend.swift:86:7:86:7 | self | provenance | | +| testSend.swift:94:27:94:30 | .password | testSend.swift:94:27:94:39 | .value | provenance | | +| testURL.swift:39:50:39:50 | passwd | testURL.swift:39:18:39:50 | ... .+(_:_:) ... | provenance | | +| testURL.swift:41:51:41:51 | account_no | testURL.swift:41:18:41:51 | ... .+(_:_:) ... | provenance | | +| testURL.swift:42:51:42:51 | credit_card_no | testURL.swift:42:18:42:51 | ... .+(_:_:) ... | provenance | | +| testURL.swift:50:51:50:51 | e_mail | testURL.swift:50:18:50:51 | ... .+(_:_:) ... | provenance | | +| testURL.swift:52:53:52:53 | a_homeaddr_z | testURL.swift:52:18:52:53 | ... .+(_:_:) ... | provenance | | +| testURL.swift:54:51:54:51 | resident_ID | testURL.swift:54:18:54:51 | ... .+(_:_:) ... | provenance | | +| testURL.swift:73:52:73:67 | call to get_secret_key() | testURL.swift:73:18:73:67 | ... .+(_:_:) ... | provenance | | +| testURL.swift:75:53:75:69 | call to get_cert_string() | testURL.swift:75:18:75:69 | ... .+(_:_:) ... | provenance | | +| testURL.swift:96:51:96:51 | certificate | testURL.swift:96:18:96:18 | "..." | provenance | | +| testURL.swift:104:16:104:57 | call to SecKeyCopyExternalRepresentation(_:_:) | testURL.swift:105:19:105:53 | call to String.init(data:encoding:) | provenance | | +| testURL.swift:104:16:104:57 | call to SecKeyCopyExternalRepresentation(_:_:) | testURL.swift:105:32:105:32 | data | provenance | | +| testURL.swift:104:16:104:57 | call to SecKeyCopyExternalRepresentation(_:_:) | testURL.swift:106:20:106:20 | "..." | provenance | | +| testURL.swift:105:6:105:10 | let ...? [some:0] | testURL.swift:105:10:105:10 | string | provenance | | +| testURL.swift:105:10:105:10 | string | testURL.swift:106:20:106:20 | "..." | provenance | | +| testURL.swift:105:19:105:53 | call to String.init(data:encoding:) | testURL.swift:105:19:105:53 | call to String.init(data:encoding:) [some:0] | provenance | | +| testURL.swift:105:19:105:53 | call to String.init(data:encoding:) | testURL.swift:106:20:106:20 | "..." | provenance | | +| testURL.swift:105:19:105:53 | call to String.init(data:encoding:) [some:0] | testURL.swift:105:6:105:10 | let ...? [some:0] | provenance | | +| testURL.swift:105:32:105:32 | data | testURL.swift:105:19:105:53 | call to String.init(data:encoding:) [some:0] | provenance | | nodes | file://:0:0:0:0 | .value | semmle.label | .value | | file://:0:0:0:0 | self | semmle.label | self | diff --git a/swift/ql/test/query-tests/Security/CWE-312/CleartextStoragePreferences.expected b/swift/ql/test/query-tests/Security/CWE-312/CleartextStoragePreferences.expected index 69865237e18..4c78d468cf0 100644 --- a/swift/ql/test/query-tests/Security/CWE-312/CleartextStoragePreferences.expected +++ b/swift/ql/test/query-tests/Security/CWE-312/CleartextStoragePreferences.expected @@ -1,18 +1,18 @@ edges -| file://:0:0:0:0 | self | file://:0:0:0:0 | .value | -| testNSUbiquitousKeyValueStore.swift:41:24:41:24 | x | testNSUbiquitousKeyValueStore.swift:42:40:42:40 | x | -| testNSUbiquitousKeyValueStore.swift:44:10:44:22 | call to getPassword() | testNSUbiquitousKeyValueStore.swift:45:40:45:40 | y | -| testNSUbiquitousKeyValueStore.swift:55:10:55:10 | passwd | testNSUbiquitousKeyValueStore.swift:59:40:59:40 | x | -| testNSUbiquitousKeyValueStore.swift:56:10:56:10 | passwd | testNSUbiquitousKeyValueStore.swift:60:40:60:40 | y | -| testNSUbiquitousKeyValueStore.swift:57:10:57:10 | passwd | testNSUbiquitousKeyValueStore.swift:61:40:61:40 | z | -| testUserDefaults.swift:41:24:41:24 | x | testUserDefaults.swift:42:28:42:28 | x | -| testUserDefaults.swift:44:10:44:22 | call to getPassword() | testUserDefaults.swift:45:28:45:28 | y | -| testUserDefaults.swift:55:10:55:10 | passwd | testUserDefaults.swift:59:28:59:28 | x | -| testUserDefaults.swift:56:10:56:10 | passwd | testUserDefaults.swift:60:28:60:28 | y | -| testUserDefaults.swift:57:10:57:10 | passwd | testUserDefaults.swift:61:28:61:28 | z | -| testUserDefaults.swift:74:7:74:7 | self | file://:0:0:0:0 | self | -| testUserDefaults.swift:82:28:82:31 | .password | testUserDefaults.swift:74:7:74:7 | self | -| testUserDefaults.swift:82:28:82:31 | .password | testUserDefaults.swift:82:28:82:40 | .value | +| file://:0:0:0:0 | self | file://:0:0:0:0 | .value | provenance | | +| testNSUbiquitousKeyValueStore.swift:41:24:41:24 | x | testNSUbiquitousKeyValueStore.swift:42:40:42:40 | x | provenance | | +| testNSUbiquitousKeyValueStore.swift:44:10:44:22 | call to getPassword() | testNSUbiquitousKeyValueStore.swift:45:40:45:40 | y | provenance | | +| testNSUbiquitousKeyValueStore.swift:55:10:55:10 | passwd | testNSUbiquitousKeyValueStore.swift:59:40:59:40 | x | provenance | | +| testNSUbiquitousKeyValueStore.swift:56:10:56:10 | passwd | testNSUbiquitousKeyValueStore.swift:60:40:60:40 | y | provenance | | +| testNSUbiquitousKeyValueStore.swift:57:10:57:10 | passwd | testNSUbiquitousKeyValueStore.swift:61:40:61:40 | z | provenance | | +| testUserDefaults.swift:41:24:41:24 | x | testUserDefaults.swift:42:28:42:28 | x | provenance | | +| testUserDefaults.swift:44:10:44:22 | call to getPassword() | testUserDefaults.swift:45:28:45:28 | y | provenance | | +| testUserDefaults.swift:55:10:55:10 | passwd | testUserDefaults.swift:59:28:59:28 | x | provenance | | +| testUserDefaults.swift:56:10:56:10 | passwd | testUserDefaults.swift:60:28:60:28 | y | provenance | | +| testUserDefaults.swift:57:10:57:10 | passwd | testUserDefaults.swift:61:28:61:28 | z | provenance | | +| testUserDefaults.swift:74:7:74:7 | self | file://:0:0:0:0 | self | provenance | | +| testUserDefaults.swift:82:28:82:31 | .password | testUserDefaults.swift:74:7:74:7 | self | provenance | | +| testUserDefaults.swift:82:28:82:31 | .password | testUserDefaults.swift:82:28:82:40 | .value | provenance | | nodes | file://:0:0:0:0 | .value | semmle.label | .value | | file://:0:0:0:0 | self | semmle.label | self | 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 a2cd88cd3f8..733a7c42c9e 100644 --- a/swift/ql/test/query-tests/Security/CWE-321/HardcodedEncryptionKey.expected +++ b/swift/ql/test/query-tests/Security/CWE-321/HardcodedEncryptionKey.expected @@ -1,74 +1,74 @@ edges -| SQLite.swift:54:25:54:33 | [...] | SQLite.swift:54:13:54:34 | call to Blob.init(bytes:) | -| cryptoswift.swift:76:3:76:3 | this string is constant | cryptoswift.swift:80:10:80:28 | call to getConstantString() | -| cryptoswift.swift:76:3:76:3 | this string is constant | cryptoswift.swift:92:18:92:36 | call to getConstantString() | -| cryptoswift.swift:80:2:80:34 | call to Array.init(_:) [Collection element] | cryptoswift.swift:91:13:91:30 | call to getConstantArray() [Collection element] | -| cryptoswift.swift:80:10:80:28 | call to getConstantString() | cryptoswift.swift:80:10:80:30 | .utf8 | -| cryptoswift.swift:80:10:80:30 | .utf8 | cryptoswift.swift:80:2:80:34 | call to Array.init(_:) [Collection element] | -| cryptoswift.swift:90:26:90:121 | [...] | cryptoswift.swift:117:22:117:22 | key | -| cryptoswift.swift:90:26:90:121 | [...] | cryptoswift.swift:118:22:118:22 | key | -| cryptoswift.swift:90:26:90:121 | [...] | cryptoswift.swift:128:26:128:26 | key | -| cryptoswift.swift:90:26:90:121 | [...] | cryptoswift.swift:135:25:135:25 | key | -| cryptoswift.swift:90:26:90:121 | [...] | cryptoswift.swift:140:25:140:25 | key | -| cryptoswift.swift:90:26:90:121 | [...] | cryptoswift.swift:145:26:145:26 | key | -| cryptoswift.swift:90:26:90:121 | [...] | cryptoswift.swift:150:26:150:26 | key | -| cryptoswift.swift:90:26:90:121 | [...] | cryptoswift.swift:151:26:151:26 | key | -| cryptoswift.swift:90:26:90:121 | [...] | cryptoswift.swift:161:24:161:24 | key | -| cryptoswift.swift:90:26:90:121 | [...] | cryptoswift.swift:163:24:163:24 | key | -| cryptoswift.swift:91:13:91:30 | call to getConstantArray() [Collection element] | cryptoswift.swift:106:21:106:21 | key2 | -| cryptoswift.swift:91:13:91:30 | call to getConstantArray() [Collection element] | cryptoswift.swift:107:21:107:21 | key2 | -| cryptoswift.swift:92:18:92:36 | call to getConstantString() | cryptoswift.swift:108:21:108:21 | keyString | -| cryptoswift.swift:92:18:92:36 | call to getConstantString() | cryptoswift.swift:109:21:109:21 | keyString | -| cryptoswift.swift:92:18:92:36 | call to getConstantString() | cryptoswift.swift:119:22:119:22 | keyString | -| cryptoswift.swift:92:18:92:36 | call to getConstantString() | cryptoswift.swift:120:22:120:22 | keyString | -| cryptoswift.swift:92:18:92:36 | call to getConstantString() | cryptoswift.swift:129:26:129:26 | keyString | -| cryptoswift.swift:92:18:92:36 | call to getConstantString() | cryptoswift.swift:152:26:152:26 | keyString | -| cryptoswift.swift:92:18:92:36 | call to getConstantString() | cryptoswift.swift:153:26:153:26 | keyString | -| cryptoswift.swift:92:18:92:36 | call to getConstantString() | cryptoswift.swift:162:24:162:24 | keyString | -| cryptoswift.swift:92:18:92:36 | call to getConstantString() | cryptoswift.swift:164:24:164:24 | keyString | -| file://:0:0:0:0 | [post] self [encryptionKey] | file://:0:0:0:0 | [post] self | -| file://:0:0:0:0 | [post] self [encryptionKey] | file://:0:0:0:0 | [post] self | -| file://:0:0:0:0 | value | file://:0:0:0:0 | [post] self [encryptionKey] | -| grdb.swift:21:20:21:20 | abc123 | grdb.swift:27:23:27:23 | constString | -| grdb.swift:21:20:21:20 | abc123 | grdb.swift:31:26:31:26 | constString | -| grdb.swift:22:33:22:50 | [...] | grdb.swift:23:23:23:23 | constArray | -| grdb.swift:23:18:23:33 | call to Data.init(_:) | grdb.swift:29:23:29:23 | constData | -| grdb.swift:23:18:23:33 | call to Data.init(_:) | grdb.swift:33:26:33:26 | constData | -| grdb.swift:23:23:23:23 | constArray | grdb.swift:23:18:23:33 | call to Data.init(_:) | -| misc.swift:30:7:30:7 | value | file://:0:0:0:0 | value | -| misc.swift:46:19:46:38 | call to Data.init(_:) | misc.swift:49:41:49:41 | myConstKey | -| misc.swift:46:19:46:38 | call to Data.init(_:) | misc.swift:53:25:53:25 | myConstKey | -| misc.swift:46:19:46:38 | call to Data.init(_:) | misc.swift:57:41:57:41 | myConstKey | -| misc.swift:46:24:46:24 | abcdef123456 | misc.swift:46:19:46:38 | call to Data.init(_:) | -| misc.swift:53:2:53:2 | [post] config [encryptionKey] | misc.swift:53:2:53:2 | [post] config | -| misc.swift:53:25:53:25 | myConstKey | misc.swift:30:7:30:7 | value | -| misc.swift:53:25:53:25 | myConstKey | misc.swift:53:2:53:2 | [post] config | -| misc.swift:53:25:53:25 | myConstKey | misc.swift:53:2:53:2 | [post] config [encryptionKey] | -| misc.swift:57:2:57:18 | [post] getter for .config [encryptionKey] | misc.swift:57:2:57:18 | [post] getter for .config | -| misc.swift:57:41:57:41 | myConstKey | misc.swift:30:7:30:7 | value | -| misc.swift:57:41:57:41 | myConstKey | misc.swift:57:2:57:18 | [post] getter for .config | -| misc.swift:57:41:57:41 | myConstKey | misc.swift:57:2:57:18 | [post] getter for .config [encryptionKey] | -| rncryptor.swift:60:19:60:38 | call to Data.init(_:) | rncryptor.swift:65:73:65:73 | myConstKey | -| rncryptor.swift:60:19:60:38 | call to Data.init(_:) | rncryptor.swift:66:73:66:73 | myConstKey | -| rncryptor.swift:60:19:60:38 | call to Data.init(_:) | rncryptor.swift:67:73:67:73 | myConstKey | -| rncryptor.swift:60:19:60:38 | call to Data.init(_:) | rncryptor.swift:68:73:68:73 | myConstKey | -| rncryptor.swift:60:19:60:38 | call to Data.init(_:) | rncryptor.swift:70:94:70:94 | myConstKey | -| rncryptor.swift:60:19:60:38 | call to Data.init(_:) | rncryptor.swift:71:102:71:102 | myConstKey | -| rncryptor.swift:60:19:60:38 | call to Data.init(_:) | rncryptor.swift:72:94:72:94 | myConstKey | -| rncryptor.swift:60:19:60:38 | call to Data.init(_:) | rncryptor.swift:73:102:73:102 | myConstKey | -| rncryptor.swift:60:19:60:38 | call to Data.init(_:) | rncryptor.swift:75:37:75:37 | myConstKey | -| rncryptor.swift:60:19:60:38 | call to Data.init(_:) | rncryptor.swift:76:37:76:37 | myConstKey | -| rncryptor.swift:60:19:60:38 | call to Data.init(_:) | rncryptor.swift:78:66:78:66 | myConstKey | -| rncryptor.swift:60:19:60:38 | call to Data.init(_:) | rncryptor.swift:79:66:79:66 | myConstKey | -| rncryptor.swift:60:19:60:38 | call to Data.init(_:) | rncryptor.swift:80:94:80:94 | myConstKey | -| rncryptor.swift:60:19:60:38 | call to Data.init(_:) | rncryptor.swift:81:102:81:102 | myConstKey | -| rncryptor.swift:60:19:60:38 | call to Data.init(_:) | rncryptor.swift:83:92:83:92 | myConstKey | -| rncryptor.swift:60:24:60:24 | abcdef123456 | rncryptor.swift:60:19:60:38 | call to Data.init(_:) | -| sqlite3_c_api.swift:41:19:41:38 | call to Data.init(_:) | sqlite3_c_api.swift:48:2:48:2 | myConstKey | -| sqlite3_c_api.swift:41:24:41:24 | abcdef123456 | sqlite3_c_api.swift:41:19:41:38 | call to Data.init(_:) | -| sqlite3_c_api.swift:48:2:48:2 | myConstKey | sqlite3_c_api.swift:48:31:48:31 | buffer [Collection element] | -| sqlite3_c_api.swift:48:31:48:31 | buffer [Collection element] | sqlite3_c_api.swift:49:36:49:36 | buffer | -| sqlite3_c_api.swift:48:31:48:31 | buffer [Collection element] | sqlite3_c_api.swift:50:38:50:38 | buffer | +| SQLite.swift:54:25:54:33 | [...] | SQLite.swift:54:13:54:34 | call to Blob.init(bytes:) | provenance | | +| cryptoswift.swift:76:3:76:3 | this string is constant | cryptoswift.swift:80:10:80:28 | call to getConstantString() | provenance | | +| cryptoswift.swift:76:3:76:3 | this string is constant | cryptoswift.swift:92:18:92:36 | call to getConstantString() | provenance | | +| cryptoswift.swift:80:2:80:34 | call to Array.init(_:) [Collection element] | cryptoswift.swift:91:13:91:30 | call to getConstantArray() [Collection element] | provenance | | +| cryptoswift.swift:80:10:80:28 | call to getConstantString() | cryptoswift.swift:80:10:80:30 | .utf8 | provenance | | +| cryptoswift.swift:80:10:80:30 | .utf8 | cryptoswift.swift:80:2:80:34 | call to Array.init(_:) [Collection element] | provenance | | +| cryptoswift.swift:90:26:90:121 | [...] | cryptoswift.swift:117:22:117:22 | key | provenance | | +| cryptoswift.swift:90:26:90:121 | [...] | cryptoswift.swift:118:22:118:22 | key | provenance | | +| cryptoswift.swift:90:26:90:121 | [...] | cryptoswift.swift:128:26:128:26 | key | provenance | | +| cryptoswift.swift:90:26:90:121 | [...] | cryptoswift.swift:135:25:135:25 | key | provenance | | +| cryptoswift.swift:90:26:90:121 | [...] | cryptoswift.swift:140:25:140:25 | key | provenance | | +| cryptoswift.swift:90:26:90:121 | [...] | cryptoswift.swift:145:26:145:26 | key | provenance | | +| cryptoswift.swift:90:26:90:121 | [...] | cryptoswift.swift:150:26:150:26 | key | provenance | | +| cryptoswift.swift:90:26:90:121 | [...] | cryptoswift.swift:151:26:151:26 | key | provenance | | +| cryptoswift.swift:90:26:90:121 | [...] | cryptoswift.swift:161:24:161:24 | key | provenance | | +| cryptoswift.swift:90:26:90:121 | [...] | cryptoswift.swift:163:24:163:24 | key | provenance | | +| cryptoswift.swift:91:13:91:30 | call to getConstantArray() [Collection element] | cryptoswift.swift:106:21:106:21 | key2 | provenance | | +| cryptoswift.swift:91:13:91:30 | call to getConstantArray() [Collection element] | cryptoswift.swift:107:21:107:21 | key2 | provenance | | +| cryptoswift.swift:92:18:92:36 | call to getConstantString() | cryptoswift.swift:108:21:108:21 | keyString | provenance | | +| cryptoswift.swift:92:18:92:36 | call to getConstantString() | cryptoswift.swift:109:21:109:21 | keyString | provenance | | +| cryptoswift.swift:92:18:92:36 | call to getConstantString() | cryptoswift.swift:119:22:119:22 | keyString | provenance | | +| cryptoswift.swift:92:18:92:36 | call to getConstantString() | cryptoswift.swift:120:22:120:22 | keyString | provenance | | +| cryptoswift.swift:92:18:92:36 | call to getConstantString() | cryptoswift.swift:129:26:129:26 | keyString | provenance | | +| cryptoswift.swift:92:18:92:36 | call to getConstantString() | cryptoswift.swift:152:26:152:26 | keyString | provenance | | +| cryptoswift.swift:92:18:92:36 | call to getConstantString() | cryptoswift.swift:153:26:153:26 | keyString | provenance | | +| cryptoswift.swift:92:18:92:36 | call to getConstantString() | cryptoswift.swift:162:24:162:24 | keyString | provenance | | +| cryptoswift.swift:92:18:92:36 | call to getConstantString() | cryptoswift.swift:164:24:164:24 | keyString | provenance | | +| file://:0:0:0:0 | [post] self [encryptionKey] | file://:0:0:0:0 | [post] self | provenance | | +| file://:0:0:0:0 | [post] self [encryptionKey] | 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 | | +| grdb.swift:21:20:21:20 | abc123 | grdb.swift:31:26:31:26 | constString | provenance | | +| grdb.swift:22:33:22:50 | [...] | grdb.swift:23:23:23:23 | constArray | provenance | | +| grdb.swift:23:18:23:33 | call to Data.init(_:) | grdb.swift:29:23:29:23 | constData | provenance | | +| grdb.swift:23:18:23:33 | call to Data.init(_:) | grdb.swift:33:26:33:26 | constData | provenance | | +| grdb.swift:23:23:23:23 | constArray | grdb.swift:23:18:23:33 | call to Data.init(_:) | provenance | | +| misc.swift:30:7:30:7 | value | file://:0:0:0:0 | value | provenance | | +| misc.swift:46:19:46:38 | call to Data.init(_:) | misc.swift:49:41:49:41 | myConstKey | provenance | | +| misc.swift:46:19:46:38 | call to Data.init(_:) | misc.swift:53:25:53:25 | myConstKey | provenance | | +| misc.swift:46:19:46:38 | call to Data.init(_:) | misc.swift:57:41:57:41 | myConstKey | provenance | | +| misc.swift:46:24:46:24 | abcdef123456 | misc.swift:46:19:46:38 | call to Data.init(_:) | provenance | | +| misc.swift:53:2:53:2 | [post] config [encryptionKey] | misc.swift:53:2:53:2 | [post] config | provenance | | +| misc.swift:53:25:53:25 | myConstKey | misc.swift:30:7:30:7 | value | provenance | | +| misc.swift:53:25:53:25 | myConstKey | misc.swift:53:2:53:2 | [post] config | provenance | | +| misc.swift:53:25:53:25 | myConstKey | misc.swift:53:2:53:2 | [post] config [encryptionKey] | provenance | | +| misc.swift:57:2:57:18 | [post] getter for .config [encryptionKey] | misc.swift:57:2:57:18 | [post] getter for .config | provenance | | +| misc.swift:57:41:57:41 | myConstKey | misc.swift:30:7:30:7 | value | provenance | | +| misc.swift:57:41:57:41 | myConstKey | misc.swift:57:2:57:18 | [post] getter for .config | provenance | | +| misc.swift:57:41:57:41 | myConstKey | misc.swift:57:2:57:18 | [post] getter for .config [encryptionKey] | provenance | | +| rncryptor.swift:60:19:60:38 | call to Data.init(_:) | rncryptor.swift:65:73:65:73 | myConstKey | provenance | | +| rncryptor.swift:60:19:60:38 | call to Data.init(_:) | rncryptor.swift:66:73:66:73 | myConstKey | provenance | | +| rncryptor.swift:60:19:60:38 | call to Data.init(_:) | rncryptor.swift:67:73:67:73 | myConstKey | provenance | | +| rncryptor.swift:60:19:60:38 | call to Data.init(_:) | rncryptor.swift:68:73:68:73 | myConstKey | provenance | | +| rncryptor.swift:60:19:60:38 | call to Data.init(_:) | rncryptor.swift:70:94:70:94 | myConstKey | provenance | | +| rncryptor.swift:60:19:60:38 | call to Data.init(_:) | rncryptor.swift:71:102:71:102 | myConstKey | provenance | | +| rncryptor.swift:60:19:60:38 | call to Data.init(_:) | rncryptor.swift:72:94:72:94 | myConstKey | provenance | | +| rncryptor.swift:60:19:60:38 | call to Data.init(_:) | rncryptor.swift:73:102:73:102 | myConstKey | provenance | | +| rncryptor.swift:60:19:60:38 | call to Data.init(_:) | rncryptor.swift:75:37:75:37 | myConstKey | provenance | | +| rncryptor.swift:60:19:60:38 | call to Data.init(_:) | rncryptor.swift:76:37:76:37 | myConstKey | provenance | | +| rncryptor.swift:60:19:60:38 | call to Data.init(_:) | rncryptor.swift:78:66:78:66 | myConstKey | provenance | | +| rncryptor.swift:60:19:60:38 | call to Data.init(_:) | rncryptor.swift:79:66:79:66 | myConstKey | provenance | | +| rncryptor.swift:60:19:60:38 | call to Data.init(_:) | rncryptor.swift:80:94:80:94 | myConstKey | provenance | | +| rncryptor.swift:60:19:60:38 | call to Data.init(_:) | rncryptor.swift:81:102:81:102 | myConstKey | provenance | | +| rncryptor.swift:60:19:60:38 | call to Data.init(_:) | rncryptor.swift:83:92:83:92 | myConstKey | provenance | | +| rncryptor.swift:60:24:60:24 | abcdef123456 | rncryptor.swift:60:19:60:38 | call to Data.init(_:) | provenance | | +| sqlite3_c_api.swift:41:19:41:38 | call to Data.init(_:) | sqlite3_c_api.swift:48:2:48:2 | myConstKey | provenance | | +| sqlite3_c_api.swift:41:24:41:24 | abcdef123456 | sqlite3_c_api.swift:41:19:41:38 | call to Data.init(_:) | provenance | | +| sqlite3_c_api.swift:48:2:48:2 | myConstKey | sqlite3_c_api.swift:48:31:48:31 | buffer [Collection element] | provenance | | +| sqlite3_c_api.swift:48:31:48:31 | buffer [Collection element] | sqlite3_c_api.swift:49:36:49:36 | buffer | provenance | | +| sqlite3_c_api.swift:48:31:48:31 | buffer [Collection element] | sqlite3_c_api.swift:50:38:50:38 | buffer | provenance | | nodes | SQLite.swift:43:13:43:13 | hardcoded_key | semmle.label | hardcoded_key | | SQLite.swift:45:23:45:23 | hardcoded_key | semmle.label | hardcoded_key | diff --git a/swift/ql/test/query-tests/Security/CWE-327/ECBEncryption.expected b/swift/ql/test/query-tests/Security/CWE-327/ECBEncryption.expected index 38c377b3926..dce2964652c 100644 --- a/swift/ql/test/query-tests/Security/CWE-327/ECBEncryption.expected +++ b/swift/ql/test/query-tests/Security/CWE-327/ECBEncryption.expected @@ -1,10 +1,10 @@ edges -| test.swift:34:9:34:13 | call to ECB.init() | test.swift:54:37:54:53 | call to getECBBlockMode() | -| test.swift:34:9:34:13 | call to ECB.init() | test.swift:55:37:55:53 | call to getECBBlockMode() | -| test.swift:34:9:34:13 | call to ECB.init() | test.swift:67:42:67:58 | call to getECBBlockMode() | -| test.swift:45:12:45:16 | call to ECB.init() | test.swift:50:37:50:37 | ecb | -| test.swift:45:12:45:16 | call to ECB.init() | test.swift:51:37:51:37 | ecb | -| test.swift:45:12:45:16 | call to ECB.init() | test.swift:65:42:65:42 | ecb | +| test.swift:34:9:34:13 | call to ECB.init() | test.swift:54:37:54:53 | call to getECBBlockMode() | provenance | | +| test.swift:34:9:34:13 | call to ECB.init() | test.swift:55:37:55:53 | call to getECBBlockMode() | provenance | | +| test.swift:34:9:34:13 | call to ECB.init() | test.swift:67:42:67:58 | call to getECBBlockMode() | provenance | | +| test.swift:45:12:45:16 | call to ECB.init() | test.swift:50:37:50:37 | ecb | provenance | | +| test.swift:45:12:45:16 | call to ECB.init() | test.swift:51:37:51:37 | ecb | provenance | | +| test.swift:45:12:45:16 | call to ECB.init() | test.swift:65:42:65:42 | ecb | provenance | | nodes | test.swift:34:9:34:13 | call to ECB.init() | semmle.label | call to ECB.init() | | test.swift:45:12:45:16 | call to ECB.init() | semmle.label | call to ECB.init() | diff --git a/swift/ql/test/query-tests/Security/CWE-328/WeakPasswordHashing.expected b/swift/ql/test/query-tests/Security/CWE-328/WeakPasswordHashing.expected index e33e8ca7b26..46f3d211ccd 100644 --- a/swift/ql/test/query-tests/Security/CWE-328/WeakPasswordHashing.expected +++ b/swift/ql/test/query-tests/Security/CWE-328/WeakPasswordHashing.expected @@ -1,6 +1,6 @@ edges -| testCryptoKit.swift:193:38:193:38 | passwordString | testCryptoKit.swift:193:38:193:53 | .utf8 | -| testCryptoKit.swift:193:38:193:53 | .utf8 | testCryptoKit.swift:193:33:193:57 | call to Data.init(_:) | +| testCryptoKit.swift:193:38:193:38 | passwordString | testCryptoKit.swift:193:38:193:53 | .utf8 | provenance | | +| testCryptoKit.swift:193:38:193:53 | .utf8 | testCryptoKit.swift:193:33:193:57 | call to Data.init(_:) | provenance | | nodes | testCryptoKit.swift:65:47:65:47 | passwd | semmle.label | passwd | | testCryptoKit.swift:71:44:71:44 | passwd | semmle.label | passwd | diff --git a/swift/ql/test/query-tests/Security/CWE-730/RegexInjection.expected b/swift/ql/test/query-tests/Security/CWE-730/RegexInjection.expected index b2f31c7de1b..1a26f921197 100644 --- a/swift/ql/test/query-tests/Security/CWE-730/RegexInjection.expected +++ b/swift/ql/test/query-tests/Security/CWE-730/RegexInjection.expected @@ -1,27 +1,27 @@ edges -| tests.swift:95:22:95:46 | call to String.init(contentsOf:) | tests.swift:101:16:101:16 | taintedString | -| tests.swift:95:22:95:46 | call to String.init(contentsOf:) | tests.swift:104:16:104:40 | ... .+(_:_:) ... | -| tests.swift:95:22:95:46 | call to String.init(contentsOf:) | tests.swift:106:16:106:16 | "..." | -| tests.swift:95:22:95:46 | call to String.init(contentsOf:) | tests.swift:109:16:109:39 | ... ? ... : ... | -| tests.swift:95:22:95:46 | call to String.init(contentsOf:) | tests.swift:110:16:110:37 | ... ? ... : ... | -| tests.swift:95:22:95:46 | call to String.init(contentsOf:) | tests.swift:113:24:113:24 | taintedString | -| tests.swift:95:22:95:46 | call to String.init(contentsOf:) | tests.swift:114:45:114:45 | taintedString | -| tests.swift:95:22:95:46 | call to String.init(contentsOf:) | tests.swift:120:19:120:19 | taintedString | -| tests.swift:95:22:95:46 | call to String.init(contentsOf:) | tests.swift:126:40:126:40 | taintedString | -| tests.swift:95:22:95:46 | call to String.init(contentsOf:) | tests.swift:131:39:131:39 | taintedString | -| tests.swift:95:22:95:46 | call to String.init(contentsOf:) | tests.swift:137:40:137:40 | taintedString | -| tests.swift:95:22:95:46 | call to String.init(contentsOf:) | tests.swift:144:16:144:16 | remoteInput | -| tests.swift:95:22:95:46 | call to String.init(contentsOf:) | tests.swift:147:39:147:39 | regexStr | -| tests.swift:95:22:95:46 | call to String.init(contentsOf:) | tests.swift:162:17:162:17 | taintedString | -| tests.swift:95:22:95:46 | call to String.init(contentsOf:) | tests.swift:164:17:164:17 | taintedString | -| tests.swift:95:22:95:46 | call to String.init(contentsOf:) | tests.swift:167:17:167:17 | taintedString | -| tests.swift:95:22:95:46 | call to String.init(contentsOf:) | tests.swift:170:17:170:17 | taintedString | -| tests.swift:95:22:95:46 | call to String.init(contentsOf:) | tests.swift:173:17:173:17 | taintedString | -| tests.swift:95:22:95:46 | call to String.init(contentsOf:) | tests.swift:176:17:176:17 | taintedString | -| tests.swift:95:22:95:46 | call to String.init(contentsOf:) | tests.swift:179:17:179:17 | taintedString | -| tests.swift:95:22:95:46 | call to String.init(contentsOf:) | tests.swift:182:17:182:17 | taintedString | -| tests.swift:95:22:95:46 | call to String.init(contentsOf:) | tests.swift:185:17:185:17 | taintedString | -| tests.swift:95:22:95:46 | call to String.init(contentsOf:) | tests.swift:190:21:190:21 | taintedString | +| tests.swift:95:22:95:46 | call to String.init(contentsOf:) | tests.swift:101:16:101:16 | taintedString | provenance | | +| tests.swift:95:22:95:46 | call to String.init(contentsOf:) | tests.swift:104:16:104:40 | ... .+(_:_:) ... | provenance | | +| tests.swift:95:22:95:46 | call to String.init(contentsOf:) | tests.swift:106:16:106:16 | "..." | provenance | | +| tests.swift:95:22:95:46 | call to String.init(contentsOf:) | tests.swift:109:16:109:39 | ... ? ... : ... | provenance | | +| tests.swift:95:22:95:46 | call to String.init(contentsOf:) | tests.swift:110:16:110:37 | ... ? ... : ... | provenance | | +| tests.swift:95:22:95:46 | call to String.init(contentsOf:) | tests.swift:113:24:113:24 | taintedString | provenance | | +| tests.swift:95:22:95:46 | call to String.init(contentsOf:) | tests.swift:114:45:114:45 | taintedString | provenance | | +| tests.swift:95:22:95:46 | call to String.init(contentsOf:) | tests.swift:120:19:120:19 | taintedString | provenance | | +| tests.swift:95:22:95:46 | call to String.init(contentsOf:) | tests.swift:126:40:126:40 | taintedString | provenance | | +| tests.swift:95:22:95:46 | call to String.init(contentsOf:) | tests.swift:131:39:131:39 | taintedString | provenance | | +| tests.swift:95:22:95:46 | call to String.init(contentsOf:) | tests.swift:137:40:137:40 | taintedString | provenance | | +| tests.swift:95:22:95:46 | call to String.init(contentsOf:) | tests.swift:144:16:144:16 | remoteInput | provenance | | +| tests.swift:95:22:95:46 | call to String.init(contentsOf:) | tests.swift:147:39:147:39 | regexStr | provenance | | +| tests.swift:95:22:95:46 | call to String.init(contentsOf:) | tests.swift:162:17:162:17 | taintedString | provenance | | +| tests.swift:95:22:95:46 | call to String.init(contentsOf:) | tests.swift:164:17:164:17 | taintedString | provenance | | +| tests.swift:95:22:95:46 | call to String.init(contentsOf:) | tests.swift:167:17:167:17 | taintedString | provenance | | +| tests.swift:95:22:95:46 | call to String.init(contentsOf:) | tests.swift:170:17:170:17 | taintedString | provenance | | +| tests.swift:95:22:95:46 | call to String.init(contentsOf:) | tests.swift:173:17:173:17 | taintedString | provenance | | +| tests.swift:95:22:95:46 | call to String.init(contentsOf:) | tests.swift:176:17:176:17 | taintedString | provenance | | +| tests.swift:95:22:95:46 | call to String.init(contentsOf:) | tests.swift:179:17:179:17 | taintedString | provenance | | +| tests.swift:95:22:95:46 | call to String.init(contentsOf:) | tests.swift:182:17:182:17 | taintedString | provenance | | +| tests.swift:95:22:95:46 | call to String.init(contentsOf:) | tests.swift:185:17:185:17 | taintedString | provenance | | +| tests.swift:95:22:95:46 | call to String.init(contentsOf:) | tests.swift:190:21:190:21 | taintedString | provenance | | nodes | tests.swift:95:22:95:46 | call to String.init(contentsOf:) | semmle.label | call to String.init(contentsOf:) | | tests.swift:101:16:101:16 | taintedString | semmle.label | taintedString | 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 fb030f5e39b..9c82519faa9 100644 --- a/swift/ql/test/query-tests/Security/CWE-757/InsecureTLS.expected +++ b/swift/ql/test/query-tests/Security/CWE-757/InsecureTLS.expected @@ -1,77 +1,77 @@ edges -| InsecureTLS.swift:19:7:19:7 | value | file://:0:0:0:0 | value | -| InsecureTLS.swift:20:7:20:7 | value | file://:0:0:0:0 | value | -| InsecureTLS.swift:22:7:22:7 | value | file://:0:0:0:0 | value | -| InsecureTLS.swift:23:7:23:7 | value | file://:0:0:0:0 | value | -| InsecureTLS.swift:40:3:40:3 | [post] config [tlsMinimumSupportedProtocolVersion] | InsecureTLS.swift:40:3:40:3 | [post] config | -| InsecureTLS.swift:40:47:40:70 | .TLSv10 | InsecureTLS.swift:19:7:19:7 | value | -| InsecureTLS.swift:40:47:40:70 | .TLSv10 | InsecureTLS.swift:40:3:40:3 | [post] config | -| InsecureTLS.swift:40:47:40:70 | .TLSv10 | InsecureTLS.swift:40:3:40:3 | [post] config [tlsMinimumSupportedProtocolVersion] | -| InsecureTLS.swift:45:3:45:3 | [post] config [tlsMinimumSupportedProtocolVersion] | InsecureTLS.swift:45:3:45:3 | [post] config | -| InsecureTLS.swift:45:47:45:70 | .TLSv11 | InsecureTLS.swift:19:7:19:7 | value | -| InsecureTLS.swift:45:47:45:70 | .TLSv11 | InsecureTLS.swift:45:3:45:3 | [post] config | -| InsecureTLS.swift:45:47:45:70 | .TLSv11 | InsecureTLS.swift:45:3:45:3 | [post] config [tlsMinimumSupportedProtocolVersion] | -| InsecureTLS.swift:57:3:57:3 | [post] config [tlsMaximumSupportedProtocolVersion] | InsecureTLS.swift:57:3:57:3 | [post] config | -| InsecureTLS.swift:57:47:57:70 | .TLSv10 | InsecureTLS.swift:20:7:20:7 | value | -| InsecureTLS.swift:57:47:57:70 | .TLSv10 | InsecureTLS.swift:57:3:57:3 | [post] config | -| InsecureTLS.swift:57:47:57:70 | .TLSv10 | InsecureTLS.swift:57:3:57:3 | [post] config [tlsMaximumSupportedProtocolVersion] | -| InsecureTLS.swift:64:3:64:3 | [post] config [tlsMinimumSupportedProtocol] | InsecureTLS.swift:64:3:64:3 | [post] config | -| InsecureTLS.swift:64:40:64:52 | .tlsProtocol10 | InsecureTLS.swift:22:7:22:7 | value | -| InsecureTLS.swift:64:40:64:52 | .tlsProtocol10 | InsecureTLS.swift:64:3:64:3 | [post] config | -| InsecureTLS.swift:64:40:64:52 | .tlsProtocol10 | InsecureTLS.swift:64:3:64:3 | [post] config [tlsMinimumSupportedProtocol] | -| InsecureTLS.swift:76:3:76:3 | [post] config [tlsMaximumSupportedProtocol] | InsecureTLS.swift:76:3:76:3 | [post] config | -| InsecureTLS.swift:76:40:76:52 | .tlsProtocol10 | InsecureTLS.swift:23:7:23:7 | value | -| InsecureTLS.swift:76:40:76:52 | .tlsProtocol10 | InsecureTLS.swift:76:3:76:3 | [post] config | -| InsecureTLS.swift:76:40:76:52 | .tlsProtocol10 | InsecureTLS.swift:76:3:76:3 | [post] config [tlsMaximumSupportedProtocol] | -| InsecureTLS.swift:102:10:102:33 | .TLSv10 | InsecureTLS.swift:111:47:111:64 | call to getBadTLSVersion() | -| InsecureTLS.swift:111:3:111:3 | [post] config [tlsMinimumSupportedProtocolVersion] | InsecureTLS.swift:111:3:111:3 | [post] config | -| InsecureTLS.swift:111:47:111:64 | call to getBadTLSVersion() | InsecureTLS.swift:19:7:19:7 | value | -| InsecureTLS.swift:111:47:111:64 | call to getBadTLSVersion() | InsecureTLS.swift:111:3:111:3 | [post] config | -| InsecureTLS.swift:111:47:111:64 | call to getBadTLSVersion() | InsecureTLS.swift:111:3:111:3 | [post] config [tlsMinimumSupportedProtocolVersion] | -| InsecureTLS.swift:121:55:121:66 | version | InsecureTLS.swift:122:47:122:47 | version | -| InsecureTLS.swift:122:3:122:3 | [post] config [tlsMinimumSupportedProtocolVersion] | InsecureTLS.swift:122:3:122:3 | [post] config | -| InsecureTLS.swift:122:47:122:47 | version | InsecureTLS.swift:19:7:19:7 | value | -| InsecureTLS.swift:122:47:122:47 | version | InsecureTLS.swift:122:3:122:3 | [post] config | -| InsecureTLS.swift:122:47:122:47 | version | InsecureTLS.swift:122:3:122:3 | [post] config [tlsMinimumSupportedProtocolVersion] | -| InsecureTLS.swift:127:25:127:48 | .TLSv11 | InsecureTLS.swift:121:55:121:66 | version | -| InsecureTLS.swift:158:7:158:7 | self [TLSVersion] | file://:0:0:0:0 | self [TLSVersion] | -| InsecureTLS.swift:158:7:158:7 | value | file://:0:0:0:0 | value | -| InsecureTLS.swift:163:3:163:3 | [post] def [TLSVersion] | InsecureTLS.swift:165:47:165:47 | def [TLSVersion] | -| InsecureTLS.swift:163:20:163:43 | .TLSv10 | InsecureTLS.swift:158:7:158:7 | value | -| InsecureTLS.swift:163:20:163:43 | .TLSv10 | InsecureTLS.swift:163:3:163:3 | [post] def [TLSVersion] | -| InsecureTLS.swift:165:3:165:3 | [post] config [tlsMinimumSupportedProtocolVersion] | InsecureTLS.swift:165:3:165:3 | [post] config | -| InsecureTLS.swift:165:47:165:47 | def [TLSVersion] | InsecureTLS.swift:158:7:158:7 | self [TLSVersion] | -| InsecureTLS.swift:165:47:165:47 | def [TLSVersion] | InsecureTLS.swift:165:47:165:51 | .TLSVersion | -| InsecureTLS.swift:165:47:165:51 | .TLSVersion | InsecureTLS.swift:19:7:19:7 | value | -| InsecureTLS.swift:165:47:165:51 | .TLSVersion | InsecureTLS.swift:165:3:165:3 | [post] config | -| InsecureTLS.swift:165:47:165:51 | .TLSVersion | InsecureTLS.swift:165:3:165:3 | [post] config [tlsMinimumSupportedProtocolVersion] | -| InsecureTLS.swift:181:3:181:9 | [post] getter for .config [tlsMinimumSupportedProtocolVersion] | InsecureTLS.swift:181:3:181:9 | [post] getter for .config | -| InsecureTLS.swift:181:53:181:76 | .TLSv10 | InsecureTLS.swift:19:7:19:7 | value | -| InsecureTLS.swift:181:53:181:76 | .TLSv10 | InsecureTLS.swift:181:3:181:9 | [post] getter for .config | -| InsecureTLS.swift:181:53:181:76 | .TLSv10 | InsecureTLS.swift:181:3:181:9 | [post] getter for .config [tlsMinimumSupportedProtocolVersion] | -| InsecureTLS.swift:185:20:185:36 | withMinVersion | InsecureTLS.swift:187:42:187:42 | withMinVersion | -| InsecureTLS.swift:187:5:187:5 | [post] self [tlsMinimumSupportedProtocolVersion] | InsecureTLS.swift:187:5:187:5 | [post] self | -| InsecureTLS.swift:187:42:187:42 | withMinVersion | InsecureTLS.swift:187:5:187:5 | [post] self [tlsMinimumSupportedProtocolVersion] | -| InsecureTLS.swift:193:51:193:74 | .TLSv10 | InsecureTLS.swift:185:20:185:36 | withMinVersion | -| InsecureTLS.swift:196:56:196:63 | value | InsecureTLS.swift:196:1:198:1 | version[return] | -| InsecureTLS.swift:202:24:202:24 | [post] config [tlsMinimumSupportedProtocolVersion] | InsecureTLS.swift:202:24:202:24 | [post] config | -| InsecureTLS.swift:202:24:202:31 | [post] getter for .tlsMinimumSupportedProtocolVersion | InsecureTLS.swift:202:24:202:24 | [post] config [tlsMinimumSupportedProtocolVersion] | -| InsecureTLS.swift:202:74:202:97 | .TLSv10 | InsecureTLS.swift:196:56:196:63 | value | -| InsecureTLS.swift:202:74:202:97 | .TLSv10 | InsecureTLS.swift:202:24:202:31 | [post] getter for .tlsMinimumSupportedProtocolVersion | -| file://:0:0:0:0 | [post] self [tlsMaximumSupportedProtocolVersion] | file://:0:0:0:0 | [post] self | -| file://:0:0:0:0 | [post] self [tlsMaximumSupportedProtocolVersion] | file://:0:0:0:0 | [post] self | -| file://:0:0:0:0 | [post] self [tlsMaximumSupportedProtocol] | file://:0:0:0:0 | [post] self | -| file://:0:0:0:0 | [post] self [tlsMaximumSupportedProtocol] | file://:0:0:0:0 | [post] self | -| file://:0:0:0:0 | [post] self [tlsMinimumSupportedProtocolVersion] | file://:0:0:0:0 | [post] self | -| file://:0:0:0:0 | [post] self [tlsMinimumSupportedProtocolVersion] | file://:0:0:0:0 | [post] self | -| file://:0:0:0:0 | [post] self [tlsMinimumSupportedProtocol] | file://:0:0:0:0 | [post] self | -| file://:0:0:0:0 | [post] self [tlsMinimumSupportedProtocol] | file://:0:0:0:0 | [post] self | -| file://:0:0:0:0 | self [TLSVersion] | file://:0:0:0:0 | .TLSVersion | -| file://:0:0:0:0 | value | file://:0:0:0:0 | [post] self [TLSVersion] | -| file://:0:0:0:0 | value | file://:0:0:0:0 | [post] self [tlsMaximumSupportedProtocolVersion] | -| file://:0:0:0:0 | value | file://:0:0:0:0 | [post] self [tlsMaximumSupportedProtocol] | -| file://:0:0:0:0 | value | file://:0:0:0:0 | [post] self [tlsMinimumSupportedProtocolVersion] | -| file://:0:0:0:0 | value | file://:0:0:0:0 | [post] self [tlsMinimumSupportedProtocol] | +| InsecureTLS.swift:19:7:19:7 | value | file://:0:0:0:0 | value | provenance | | +| InsecureTLS.swift:20:7:20:7 | value | file://:0:0:0:0 | value | provenance | | +| InsecureTLS.swift:22:7:22:7 | value | file://:0:0:0:0 | value | provenance | | +| InsecureTLS.swift:23:7:23:7 | value | file://:0:0:0:0 | value | provenance | | +| InsecureTLS.swift:40:3:40:3 | [post] config [tlsMinimumSupportedProtocolVersion] | InsecureTLS.swift:40:3:40:3 | [post] config | provenance | | +| InsecureTLS.swift:40:47:40:70 | .TLSv10 | InsecureTLS.swift:19:7:19:7 | value | provenance | | +| InsecureTLS.swift:40:47:40:70 | .TLSv10 | InsecureTLS.swift:40:3:40:3 | [post] config | provenance | | +| InsecureTLS.swift:40:47:40:70 | .TLSv10 | InsecureTLS.swift:40:3:40:3 | [post] config [tlsMinimumSupportedProtocolVersion] | provenance | | +| InsecureTLS.swift:45:3:45:3 | [post] config [tlsMinimumSupportedProtocolVersion] | InsecureTLS.swift:45:3:45:3 | [post] config | provenance | | +| InsecureTLS.swift:45:47:45:70 | .TLSv11 | InsecureTLS.swift:19:7:19:7 | value | provenance | | +| InsecureTLS.swift:45:47:45:70 | .TLSv11 | InsecureTLS.swift:45:3:45:3 | [post] config | provenance | | +| InsecureTLS.swift:45:47:45:70 | .TLSv11 | InsecureTLS.swift:45:3:45:3 | [post] config [tlsMinimumSupportedProtocolVersion] | provenance | | +| InsecureTLS.swift:57:3:57:3 | [post] config [tlsMaximumSupportedProtocolVersion] | InsecureTLS.swift:57:3:57:3 | [post] config | provenance | | +| InsecureTLS.swift:57:47:57:70 | .TLSv10 | InsecureTLS.swift:20:7:20:7 | value | provenance | | +| InsecureTLS.swift:57:47:57:70 | .TLSv10 | InsecureTLS.swift:57:3:57:3 | [post] config | provenance | | +| InsecureTLS.swift:57:47:57:70 | .TLSv10 | InsecureTLS.swift:57:3:57:3 | [post] config [tlsMaximumSupportedProtocolVersion] | provenance | | +| InsecureTLS.swift:64:3:64:3 | [post] config [tlsMinimumSupportedProtocol] | InsecureTLS.swift:64:3:64:3 | [post] config | provenance | | +| InsecureTLS.swift:64:40:64:52 | .tlsProtocol10 | InsecureTLS.swift:22:7:22:7 | value | provenance | | +| InsecureTLS.swift:64:40:64:52 | .tlsProtocol10 | InsecureTLS.swift:64:3:64:3 | [post] config | provenance | | +| InsecureTLS.swift:64:40:64:52 | .tlsProtocol10 | InsecureTLS.swift:64:3:64:3 | [post] config [tlsMinimumSupportedProtocol] | provenance | | +| InsecureTLS.swift:76:3:76:3 | [post] config [tlsMaximumSupportedProtocol] | InsecureTLS.swift:76:3:76:3 | [post] config | provenance | | +| InsecureTLS.swift:76:40:76:52 | .tlsProtocol10 | InsecureTLS.swift:23:7:23:7 | value | provenance | | +| InsecureTLS.swift:76:40:76:52 | .tlsProtocol10 | InsecureTLS.swift:76:3:76:3 | [post] config | provenance | | +| InsecureTLS.swift:76:40:76:52 | .tlsProtocol10 | InsecureTLS.swift:76:3:76:3 | [post] config [tlsMaximumSupportedProtocol] | provenance | | +| InsecureTLS.swift:102:10:102:33 | .TLSv10 | InsecureTLS.swift:111:47:111:64 | call to getBadTLSVersion() | provenance | | +| InsecureTLS.swift:111:3:111:3 | [post] config [tlsMinimumSupportedProtocolVersion] | InsecureTLS.swift:111:3:111:3 | [post] config | provenance | | +| InsecureTLS.swift:111:47:111:64 | call to getBadTLSVersion() | InsecureTLS.swift:19:7:19:7 | value | provenance | | +| InsecureTLS.swift:111:47:111:64 | call to getBadTLSVersion() | InsecureTLS.swift:111:3:111:3 | [post] config | provenance | | +| InsecureTLS.swift:111:47:111:64 | call to getBadTLSVersion() | InsecureTLS.swift:111:3:111:3 | [post] config [tlsMinimumSupportedProtocolVersion] | provenance | | +| InsecureTLS.swift:121:55:121:66 | version | InsecureTLS.swift:122:47:122:47 | version | provenance | | +| InsecureTLS.swift:122:3:122:3 | [post] config [tlsMinimumSupportedProtocolVersion] | InsecureTLS.swift:122:3:122:3 | [post] config | provenance | | +| InsecureTLS.swift:122:47:122:47 | version | InsecureTLS.swift:19:7:19:7 | value | provenance | | +| InsecureTLS.swift:122:47:122:47 | version | InsecureTLS.swift:122:3:122:3 | [post] config | provenance | | +| InsecureTLS.swift:122:47:122:47 | version | InsecureTLS.swift:122:3:122:3 | [post] config [tlsMinimumSupportedProtocolVersion] | provenance | | +| InsecureTLS.swift:127:25:127:48 | .TLSv11 | InsecureTLS.swift:121:55:121:66 | version | provenance | | +| InsecureTLS.swift:158:7:158:7 | self [TLSVersion] | file://:0:0:0:0 | self [TLSVersion] | provenance | | +| InsecureTLS.swift:158:7:158:7 | value | file://:0:0:0:0 | value | provenance | | +| InsecureTLS.swift:163:3:163:3 | [post] def [TLSVersion] | InsecureTLS.swift:165:47:165:47 | def [TLSVersion] | provenance | | +| InsecureTLS.swift:163:20:163:43 | .TLSv10 | InsecureTLS.swift:158:7:158:7 | value | provenance | | +| InsecureTLS.swift:163:20:163:43 | .TLSv10 | InsecureTLS.swift:163:3:163:3 | [post] def [TLSVersion] | provenance | | +| InsecureTLS.swift:165:3:165:3 | [post] config [tlsMinimumSupportedProtocolVersion] | InsecureTLS.swift:165:3:165:3 | [post] config | provenance | | +| InsecureTLS.swift:165:47:165:47 | def [TLSVersion] | InsecureTLS.swift:158:7:158:7 | self [TLSVersion] | provenance | | +| InsecureTLS.swift:165:47:165:47 | def [TLSVersion] | InsecureTLS.swift:165:47:165:51 | .TLSVersion | provenance | | +| InsecureTLS.swift:165:47:165:51 | .TLSVersion | InsecureTLS.swift:19:7:19:7 | value | provenance | | +| InsecureTLS.swift:165:47:165:51 | .TLSVersion | InsecureTLS.swift:165:3:165:3 | [post] config | provenance | | +| InsecureTLS.swift:165:47:165:51 | .TLSVersion | InsecureTLS.swift:165:3:165:3 | [post] config [tlsMinimumSupportedProtocolVersion] | provenance | | +| InsecureTLS.swift:181:3:181:9 | [post] getter for .config [tlsMinimumSupportedProtocolVersion] | InsecureTLS.swift:181:3:181:9 | [post] getter for .config | provenance | | +| InsecureTLS.swift:181:53:181:76 | .TLSv10 | InsecureTLS.swift:19:7:19:7 | value | provenance | | +| InsecureTLS.swift:181:53:181:76 | .TLSv10 | InsecureTLS.swift:181:3:181:9 | [post] getter for .config | provenance | | +| InsecureTLS.swift:181:53:181:76 | .TLSv10 | InsecureTLS.swift:181:3:181:9 | [post] getter for .config [tlsMinimumSupportedProtocolVersion] | provenance | | +| InsecureTLS.swift:185:20:185:36 | withMinVersion | InsecureTLS.swift:187:42:187:42 | withMinVersion | provenance | | +| InsecureTLS.swift:187:5:187:5 | [post] self [tlsMinimumSupportedProtocolVersion] | InsecureTLS.swift:187:5:187:5 | [post] self | provenance | | +| InsecureTLS.swift:187:42:187:42 | withMinVersion | InsecureTLS.swift:187:5:187:5 | [post] self [tlsMinimumSupportedProtocolVersion] | 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:24 | [post] config [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:24 | [post] config [tlsMinimumSupportedProtocolVersion] | 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 [tlsMaximumSupportedProtocolVersion] | file://:0:0:0:0 | [post] self | provenance | | +| file://:0:0:0:0 | [post] self [tlsMaximumSupportedProtocolVersion] | file://:0:0:0:0 | [post] self | provenance | | +| file://:0:0:0:0 | [post] self [tlsMaximumSupportedProtocol] | file://:0:0:0:0 | [post] self | provenance | | +| file://:0:0:0:0 | [post] self [tlsMaximumSupportedProtocol] | file://:0:0:0:0 | [post] self | provenance | | +| file://:0:0:0:0 | [post] self [tlsMinimumSupportedProtocolVersion] | file://:0:0:0:0 | [post] self | provenance | | +| file://:0:0:0:0 | [post] self [tlsMinimumSupportedProtocolVersion] | file://:0:0:0:0 | [post] self | provenance | | +| file://:0:0:0:0 | [post] self [tlsMinimumSupportedProtocol] | file://:0:0:0:0 | [post] self | provenance | | +| file://:0:0:0:0 | [post] self [tlsMinimumSupportedProtocol] | file://:0:0:0:0 | [post] self | 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 [TLSVersion] | provenance | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | [post] self [tlsMaximumSupportedProtocolVersion] | provenance | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | [post] self [tlsMaximumSupportedProtocol] | provenance | | +| 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 | value | semmle.label | value | | InsecureTLS.swift:20:7:20:7 | value | semmle.label | value | diff --git a/swift/ql/test/query-tests/Security/CWE-760/ConstantSalt.expected b/swift/ql/test/query-tests/Security/CWE-760/ConstantSalt.expected index 033d4481780..2d89675b482 100644 --- a/swift/ql/test/query-tests/Security/CWE-760/ConstantSalt.expected +++ b/swift/ql/test/query-tests/Security/CWE-760/ConstantSalt.expected @@ -1,28 +1,28 @@ edges -| rncryptor.swift:59:24:59:43 | call to Data.init(_:) | rncryptor.swift:63:57:63:57 | myConstantSalt1 | -| rncryptor.swift:59:24:59:43 | call to Data.init(_:) | rncryptor.swift:68:106:68:106 | myConstantSalt1 | -| rncryptor.swift:59:24:59:43 | call to Data.init(_:) | rncryptor.swift:71:106:71:106 | myConstantSalt1 | -| rncryptor.swift:59:24:59:43 | call to Data.init(_:) | rncryptor.swift:75:127:75:127 | myConstantSalt1 | -| rncryptor.swift:59:24:59:43 | call to Data.init(_:) | rncryptor.swift:78:135:78:135 | myConstantSalt1 | -| rncryptor.swift:59:29:59:29 | abcdef123456 | rncryptor.swift:59:24:59:43 | call to Data.init(_:) | -| rncryptor.swift:60:24:60:30 | call to Data.init(_:) | rncryptor.swift:65:55:65:55 | myConstantSalt2 | -| rncryptor.swift:60:24:60:30 | call to Data.init(_:) | rncryptor.swift:69:131:69:131 | myConstantSalt2 | -| rncryptor.swift:60:24:60:30 | call to Data.init(_:) | rncryptor.swift:72:131:72:131 | myConstantSalt2 | -| rncryptor.swift:60:24:60:30 | call to Data.init(_:) | rncryptor.swift:76:152:76:152 | myConstantSalt2 | -| rncryptor.swift:60:24:60:30 | call to Data.init(_:) | rncryptor.swift:79:160:79:160 | myConstantSalt2 | -| rncryptor.swift:60:29:60:29 | 0 | rncryptor.swift:60:24:60:30 | call to Data.init(_:) | -| test.swift:29:3:29:3 | this string is constant | test.swift:33:10:33:28 | call to getConstantString() | -| test.swift:33:2:33:34 | call to Array.init(_:) [Collection element] | test.swift:44:27:44:44 | call to getConstantArray() [Collection element] | -| test.swift:33:10:33:28 | call to getConstantString() | test.swift:33:10:33:30 | .utf8 | -| test.swift:33:10:33:30 | .utf8 | test.swift:33:2:33:34 | call to Array.init(_:) [Collection element] | -| test.swift:43:35:43:130 | [...] | test.swift:51:49:51:49 | constantSalt | -| test.swift:43:35:43:130 | [...] | test.swift:56:59:56:59 | constantSalt | -| test.swift:43:35:43:130 | [...] | test.swift:62:59:62:59 | constantSalt | -| test.swift:43:35:43:130 | [...] | test.swift:67:53:67:53 | constantSalt | -| test.swift:44:27:44:44 | call to getConstantArray() [Collection element] | test.swift:52:49:52:49 | constantStringSalt | -| test.swift:44:27:44:44 | call to getConstantArray() [Collection element] | test.swift:57:59:57:59 | constantStringSalt | -| test.swift:44:27:44:44 | call to getConstantArray() [Collection element] | test.swift:63:59:63:59 | constantStringSalt | -| test.swift:44:27:44:44 | call to getConstantArray() [Collection element] | test.swift:68:53:68:53 | constantStringSalt | +| rncryptor.swift:59:24:59:43 | call to Data.init(_:) | rncryptor.swift:63:57:63:57 | myConstantSalt1 | provenance | | +| rncryptor.swift:59:24:59:43 | call to Data.init(_:) | rncryptor.swift:68:106:68:106 | myConstantSalt1 | provenance | | +| rncryptor.swift:59:24:59:43 | call to Data.init(_:) | rncryptor.swift:71:106:71:106 | myConstantSalt1 | provenance | | +| rncryptor.swift:59:24:59:43 | call to Data.init(_:) | rncryptor.swift:75:127:75:127 | myConstantSalt1 | provenance | | +| rncryptor.swift:59:24:59:43 | call to Data.init(_:) | rncryptor.swift:78:135:78:135 | myConstantSalt1 | provenance | | +| rncryptor.swift:59:29:59:29 | abcdef123456 | rncryptor.swift:59:24:59:43 | call to Data.init(_:) | provenance | | +| rncryptor.swift:60:24:60:30 | call to Data.init(_:) | rncryptor.swift:65:55:65:55 | myConstantSalt2 | provenance | | +| rncryptor.swift:60:24:60:30 | call to Data.init(_:) | rncryptor.swift:69:131:69:131 | myConstantSalt2 | provenance | | +| rncryptor.swift:60:24:60:30 | call to Data.init(_:) | rncryptor.swift:72:131:72:131 | myConstantSalt2 | provenance | | +| rncryptor.swift:60:24:60:30 | call to Data.init(_:) | rncryptor.swift:76:152:76:152 | myConstantSalt2 | provenance | | +| rncryptor.swift:60:24:60:30 | call to Data.init(_:) | rncryptor.swift:79:160:79:160 | myConstantSalt2 | provenance | | +| rncryptor.swift:60:29:60:29 | 0 | rncryptor.swift:60:24:60:30 | call to Data.init(_:) | provenance | | +| test.swift:29:3:29:3 | this string is constant | test.swift:33:10:33:28 | call to getConstantString() | provenance | | +| test.swift:33:2:33:34 | call to Array.init(_:) [Collection element] | test.swift:44:27:44:44 | call to getConstantArray() [Collection element] | provenance | | +| test.swift:33:10:33:28 | call to getConstantString() | test.swift:33:10:33:30 | .utf8 | provenance | | +| test.swift:33:10:33:30 | .utf8 | test.swift:33:2:33:34 | call to Array.init(_:) [Collection element] | provenance | | +| test.swift:43:35:43:130 | [...] | test.swift:51:49:51:49 | constantSalt | provenance | | +| test.swift:43:35:43:130 | [...] | test.swift:56:59:56:59 | constantSalt | provenance | | +| test.swift:43:35:43:130 | [...] | test.swift:62:59:62:59 | constantSalt | provenance | | +| test.swift:43:35:43:130 | [...] | test.swift:67:53:67:53 | constantSalt | provenance | | +| test.swift:44:27:44:44 | call to getConstantArray() [Collection element] | test.swift:52:49:52:49 | constantStringSalt | provenance | | +| test.swift:44:27:44:44 | call to getConstantArray() [Collection element] | test.swift:57:59:57:59 | constantStringSalt | provenance | | +| test.swift:44:27:44:44 | call to getConstantArray() [Collection element] | test.swift:63:59:63:59 | constantStringSalt | provenance | | +| test.swift:44:27:44:44 | call to getConstantArray() [Collection element] | test.swift:68:53:68:53 | constantStringSalt | provenance | | nodes | rncryptor.swift:59:24:59:43 | call to Data.init(_:) | semmle.label | call to Data.init(_:) | | rncryptor.swift:59:29:59:29 | abcdef123456 | semmle.label | abcdef123456 | diff --git a/swift/ql/test/query-tests/Security/CWE-916/InsufficientHashIterations.expected b/swift/ql/test/query-tests/Security/CWE-916/InsufficientHashIterations.expected index 1cba5d58060..aff512f0512 100644 --- a/swift/ql/test/query-tests/Security/CWE-916/InsufficientHashIterations.expected +++ b/swift/ql/test/query-tests/Security/CWE-916/InsufficientHashIterations.expected @@ -1,7 +1,7 @@ edges -| test.swift:20:45:20:45 | 99999 | test.swift:33:22:33:43 | call to getLowIterationCount() | -| test.swift:33:22:33:43 | call to getLowIterationCount() | test.swift:37:84:37:84 | lowIterations | -| test.swift:33:22:33:43 | call to getLowIterationCount() | test.swift:44:84:44:84 | lowIterations | +| test.swift:20:45:20:45 | 99999 | test.swift:33:22:33:43 | call to getLowIterationCount() | provenance | | +| test.swift:33:22:33:43 | call to getLowIterationCount() | test.swift:37:84:37:84 | lowIterations | provenance | | +| test.swift:33:22:33:43 | call to getLowIterationCount() | test.swift:44:84:44:84 | lowIterations | provenance | | nodes | test.swift:20:45:20:45 | 99999 | semmle.label | 99999 | | test.swift:33:22:33:43 | call to getLowIterationCount() | semmle.label | call to getLowIterationCount() | From 35a3aa0a09db850d1024ae3af37ab8556d56ebbd Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Wed, 7 Feb 2024 11:37:01 +0100 Subject: [PATCH 116/378] Ruby: Add empty provenance column to expected files. --- .../dataflow/array-flow/array-flow.expected | 4240 ++++++++--------- .../call-sensitivity.expected | 194 +- .../library-tests/dataflow/erb/erb.expected | 88 +- .../flow-summaries/semantics.expected | 2168 ++++----- .../dataflow/global/Flow.expected | 506 +- .../dataflow/hash-flow/hash-flow.expected | 1952 ++++---- .../dataflow/local/InlineFlowTest.expected | 90 +- .../dataflow/params/params-flow.expected | 338 +- .../dataflow/ssa-flow/ssa-flow.expected | 6 +- .../dataflow/string-flow/string-flow.expected | 22 +- .../dataflow/summaries/Summaries.expected | 506 +- .../action_controller/params-flow.expected | 192 +- .../action_mailer/params-flow.expected | 2 +- .../ActiveSupportDataFlow.expected | 404 +- .../frameworks/arel/Arel.expected | 6 +- .../frameworks/json/JsonDataFlow.expected | 20 +- .../frameworks/sinatra/Flow.expected | 10 +- .../ImproperLdapAuth.expected | 12 +- .../LdapInjection/Ldapinjection.expected | 24 +- .../TemplateInjection.expected | 34 +- .../XPathInjection/XPathInjection.expected | 32 +- .../cwe-022-ZipSlip/ZipSlip.expected | 64 +- .../cwe-176/UnicodeBypassValidation.expected | 60 +- .../ManuallyCheckHttpVerb.expected | 24 +- .../weak-params/WeakParams.expected | 8 +- .../MissingFullAnchor.expected | 6 +- .../security/cwe-022/PathInjection.expected | 134 +- .../CommandInjection.expected | 44 +- .../cwe-078/KernelOpen/KernelOpen.expected | 26 +- .../UnsafeShellCommandConstruction.expected | 34 +- .../security/cwe-079/ReflectedXSS.expected | 84 +- .../security/cwe-079/StoredXSS.expected | 48 +- .../cwe-079/UnsafeHtmlConstruction.expected | 6 +- .../security/cwe-089/SqlInjection.expected | 158 +- .../CodeInjection/CodeInjection.expected | 92 +- .../UnsafeCodeConstruction.expected | 44 +- .../security/cwe-117/LogInjection.expected | 48 +- .../PolynomialReDoS.expected | 94 +- .../RegExpInjection.expected | 42 +- .../cwe-134/TaintedFormatString.expected | 38 +- .../cwe-209/StackTraceExposure.expected | 4 +- .../cwe-312/CleartextLogging.expected | 78 +- .../cwe-312/CleartextStorage.expected | 60 +- .../UnsafeDeserialization.expected | 6 +- .../UnsafeDeserialization.expected | 6 +- .../UnsafeDeserialization.expected | 102 +- .../HardcodedDataInterpretedAsCode.expected | 22 +- .../security/cwe-601/UrlRedirect.expected | 26 +- .../cwe-611/libxml-backend/Xxe.expected | 12 +- .../security/cwe-611/xxe/Xxe.expected | 54 +- .../cwe-732/WeakFilePermissions.expected | 14 +- .../cwe-798/HardcodedCredentials.expected | 32 +- .../ConditionalBypass.expected | 16 +- .../cwe-829/InsecureDownload.expected | 10 +- .../cwe-912/HttpToFileAccess.expected | 10 +- .../cwe-918/ServerSideRequestForgery.expected | 10 +- .../DecompressionApi.expected | 8 +- 57 files changed, 6185 insertions(+), 6185 deletions(-) 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 f36cf514b89..046f19b454e 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 @@ -1,2125 +1,2125 @@ testFailures edges -| array_flow.rb:2:5:2:5 | a [element 0] | array_flow.rb:3:10:3:10 | a [element 0] | -| array_flow.rb:2:5:2:5 | a [element 0] | array_flow.rb:5:10:5:10 | a [element 0] | -| array_flow.rb:2:9:2:20 | * ... [element 0] | array_flow.rb:2:5:2:5 | a [element 0] | -| array_flow.rb:2:10:2:20 | call to source | array_flow.rb:2:9:2:20 | * ... [element 0] | -| array_flow.rb:3:10:3:10 | a [element 0] | array_flow.rb:3:10:3:13 | ...[...] | -| array_flow.rb:5:10:5:10 | a [element 0] | array_flow.rb:5:10:5:13 | ...[...] | -| array_flow.rb:9:5:9:5 | a [element 1] | array_flow.rb:11:10:11:10 | a [element 1] | -| array_flow.rb:9:5:9:5 | a [element 1] | array_flow.rb:13:10:13:10 | a [element 1] | -| array_flow.rb:9:13:9:21 | call to source | array_flow.rb:9:5:9:5 | a [element 1] | -| array_flow.rb:11:10:11:10 | a [element 1] | array_flow.rb:11:10:11:13 | ...[...] | -| array_flow.rb:13:10:13:10 | a [element 1] | array_flow.rb:13:10:13:13 | ...[...] | -| array_flow.rb:17:5:17:5 | a [element] | array_flow.rb:18:10:18:10 | a [element] | -| array_flow.rb:17:5:17:5 | a [element] | array_flow.rb:19:10:19:10 | a [element] | -| array_flow.rb:17:5:17:5 | a [element] | array_flow.rb:21:19:21:19 | a [element] | -| array_flow.rb:17:9:17:33 | call to new [element] | array_flow.rb:17:5:17:5 | a [element] | -| array_flow.rb:17:22:17:32 | call to source | array_flow.rb:17:9:17:33 | call to new [element] | -| array_flow.rb:18:10:18:10 | a [element] | array_flow.rb:18:10:18:13 | ...[...] | -| array_flow.rb:19:10:19:10 | a [element] | array_flow.rb:19:10:19:13 | ...[...] | -| array_flow.rb:21:5:21:5 | b [element] | array_flow.rb:22:10:22:10 | b [element] | -| array_flow.rb:21:5:21:5 | b [element] | array_flow.rb:23:10:23:10 | b [element] | -| array_flow.rb:21:9:21:20 | call to new [element] | array_flow.rb:21:5:21:5 | b [element] | -| array_flow.rb:21:19:21:19 | a [element] | array_flow.rb:21:9:21:20 | call to new [element] | -| array_flow.rb:22:10:22:10 | b [element] | array_flow.rb:22:10:22:13 | ...[...] | -| array_flow.rb:23:10:23:10 | b [element] | array_flow.rb:23:10:23:13 | ...[...] | -| array_flow.rb:25:5:25:5 | c [element] | array_flow.rb:28:10:28:10 | c [element] | -| array_flow.rb:25:5:25:5 | c [element] | array_flow.rb:29:10:29:10 | c [element] | -| array_flow.rb:25:9:27:7 | call to new [element] | array_flow.rb:25:5:25:5 | c [element] | -| array_flow.rb:26:9:26:19 | call to source | array_flow.rb:25:9:27:7 | call to new [element] | -| array_flow.rb:28:10:28:10 | c [element] | array_flow.rb:28:10:28:13 | ...[...] | -| array_flow.rb:29:10:29:10 | c [element] | array_flow.rb:29:10:29:13 | ...[...] | -| array_flow.rb:33:5:33:5 | a [element 0] | array_flow.rb:34:27:34:27 | a [element 0] | -| array_flow.rb:33:10:33:18 | call to source | array_flow.rb:33:5:33:5 | a [element 0] | -| array_flow.rb:34:5:34:5 | b [element 0] | array_flow.rb:35:10:35:10 | b [element 0] | -| array_flow.rb:34:9:34:28 | call to try_convert [element 0] | array_flow.rb:34:5:34:5 | b [element 0] | -| array_flow.rb:34:27:34:27 | a [element 0] | array_flow.rb:34:9:34:28 | call to try_convert [element 0] | -| array_flow.rb:35:10:35:10 | b [element 0] | array_flow.rb:35:10:35:13 | ...[...] | -| array_flow.rb:40:5:40:5 | a [element 0] | array_flow.rb:42:9:42:9 | a [element 0] | -| array_flow.rb:40:10:40:20 | call to source | array_flow.rb:40:5:40:5 | a [element 0] | -| array_flow.rb:41:5:41:5 | b [element 2] | array_flow.rb:42:13:42:13 | b [element 2] | -| array_flow.rb:41:16:41:26 | call to source | array_flow.rb:41:5:41:5 | b [element 2] | -| array_flow.rb:42:5:42:5 | c [element] | array_flow.rb:43:10:43:10 | c [element] | -| array_flow.rb:42:5:42:5 | c [element] | array_flow.rb:44:10:44:10 | c [element] | -| array_flow.rb:42:9:42:9 | a [element 0] | array_flow.rb:42:9:42:13 | ... & ... [element] | -| array_flow.rb:42:9:42:13 | ... & ... [element] | array_flow.rb:42:5:42:5 | c [element] | -| array_flow.rb:42:13:42:13 | b [element 2] | array_flow.rb:42:9:42:13 | ... & ... [element] | -| array_flow.rb:43:10:43:10 | c [element] | array_flow.rb:43:10:43:13 | ...[...] | -| array_flow.rb:44:10:44:10 | c [element] | array_flow.rb:44:10:44:13 | ...[...] | -| array_flow.rb:48:5:48:5 | a [element 0] | array_flow.rb:49:9:49:9 | a [element 0] | -| array_flow.rb:48:10:48:18 | call to source | array_flow.rb:48:5:48:5 | a [element 0] | -| array_flow.rb:49:5:49:5 | b [element] | array_flow.rb:50:10:50:10 | b [element] | -| array_flow.rb:49:5:49:5 | b [element] | array_flow.rb:51:10:51:10 | b [element] | -| array_flow.rb:49:9:49:9 | a [element 0] | array_flow.rb:49:9:49:13 | ... * ... [element] | -| array_flow.rb:49:9:49:13 | ... * ... [element] | array_flow.rb:49:5:49:5 | b [element] | -| array_flow.rb:50:10:50:10 | b [element] | array_flow.rb:50:10:50:13 | ...[...] | -| array_flow.rb:51:10:51:10 | b [element] | array_flow.rb:51:10:51:13 | ...[...] | -| array_flow.rb:55:5:55:5 | a [element 0] | array_flow.rb:57:9:57:9 | a [element 0] | -| array_flow.rb:55:10:55:20 | call to source | array_flow.rb:55:5:55:5 | a [element 0] | -| array_flow.rb:56:5:56:5 | b [element 1] | array_flow.rb:57:13:57:13 | b [element 1] | -| array_flow.rb:56:13:56:23 | call to source | array_flow.rb:56:5:56:5 | b [element 1] | -| array_flow.rb:57:5:57:5 | c [element 0] | array_flow.rb:58:10:58:10 | c [element 0] | -| array_flow.rb:57:5:57:5 | c [element] | array_flow.rb:58:10:58:10 | c [element] | -| array_flow.rb:57:5:57:5 | c [element] | array_flow.rb:59:10:59:10 | c [element] | -| array_flow.rb:57:9:57:9 | a [element 0] | array_flow.rb:57:9:57:13 | ... + ... [element 0] | -| array_flow.rb:57:9:57:13 | ... + ... [element 0] | array_flow.rb:57:5:57:5 | c [element 0] | -| array_flow.rb:57:9:57:13 | ... + ... [element] | array_flow.rb:57:5:57:5 | c [element] | -| array_flow.rb:57:13:57:13 | b [element 1] | array_flow.rb:57:9:57:13 | ... + ... [element] | -| array_flow.rb:58:10:58:10 | c [element 0] | array_flow.rb:58:10:58:13 | ...[...] | -| array_flow.rb:58:10:58:10 | c [element] | array_flow.rb:58:10:58:13 | ...[...] | -| array_flow.rb:59:10:59:10 | c [element] | array_flow.rb:59:10:59:13 | ...[...] | -| array_flow.rb:63:5:63:5 | a [element 0] | array_flow.rb:65:9:65:9 | a [element 0] | -| array_flow.rb:63:10:63:20 | call to source | array_flow.rb:63:5:63:5 | a [element 0] | -| array_flow.rb:65:5:65:5 | c [element] | array_flow.rb:66:10:66:10 | c [element] | -| array_flow.rb:65:5:65:5 | c [element] | array_flow.rb:67:10:67:10 | c [element] | -| array_flow.rb:65:9:65:9 | a [element 0] | array_flow.rb:65:9:65:13 | ... - ... [element] | -| array_flow.rb:65:9:65:13 | ... - ... [element] | array_flow.rb:65:5:65:5 | c [element] | -| array_flow.rb:66:10:66:10 | c [element] | array_flow.rb:66:10:66:13 | ...[...] | -| array_flow.rb:67:10:67:10 | c [element] | array_flow.rb:67:10:67:13 | ...[...] | -| array_flow.rb:71:5:71:5 | a [element 0] | array_flow.rb:72:9:72:9 | a [element 0] | -| array_flow.rb:71:5:71:5 | a [element 0] | array_flow.rb:73:10:73:10 | a [element 0] | -| array_flow.rb:71:10:71:20 | call to source | array_flow.rb:71:5:71:5 | a [element 0] | -| array_flow.rb:72:5:72:5 | b [element 0] | array_flow.rb:75:10:75:10 | b [element 0] | -| array_flow.rb:72:5:72:5 | b [element] | array_flow.rb:75:10:75:10 | b [element] | -| array_flow.rb:72:5:72:5 | b [element] | array_flow.rb:76:10:76:10 | b [element] | -| array_flow.rb:72:9:72:9 | [post] a [element] | array_flow.rb:73:10:73:10 | a [element] | -| array_flow.rb:72:9:72:9 | [post] a [element] | array_flow.rb:74:10:74:10 | a [element] | -| array_flow.rb:72:9:72:9 | a [element 0] | array_flow.rb:72:9:72:24 | ... << ... [element 0] | -| array_flow.rb:72:9:72:24 | ... << ... [element 0] | array_flow.rb:72:5:72:5 | b [element 0] | -| array_flow.rb:72:9:72:24 | ... << ... [element] | array_flow.rb:72:5:72:5 | b [element] | -| array_flow.rb:72:14:72:24 | call to source | array_flow.rb:72:9:72:9 | [post] a [element] | -| array_flow.rb:72:14:72:24 | call to source | array_flow.rb:72:9:72:24 | ... << ... [element] | -| array_flow.rb:73:10:73:10 | a [element 0] | array_flow.rb:73:10:73:13 | ...[...] | -| array_flow.rb:73:10:73:10 | a [element] | array_flow.rb:73:10:73:13 | ...[...] | -| array_flow.rb:74:10:74:10 | a [element] | array_flow.rb:74:10:74:13 | ...[...] | -| array_flow.rb:75:10:75:10 | b [element 0] | array_flow.rb:75:10:75:13 | ...[...] | -| array_flow.rb:75:10:75:10 | b [element] | array_flow.rb:75:10:75:13 | ...[...] | -| array_flow.rb:76:10:76:10 | b [element] | array_flow.rb:76:10:76:13 | ...[...] | -| array_flow.rb:80:5:80:5 | a [element 1] | array_flow.rb:81:15:81:15 | a [element 1] | -| array_flow.rb:80:13:80:21 | call to source | array_flow.rb:80:5:80:5 | a [element 1] | -| array_flow.rb:81:8:81:8 | c | array_flow.rb:83:10:83:10 | c | -| array_flow.rb:81:15:81:15 | a [element 1] | array_flow.rb:81:8:81:8 | c | -| array_flow.rb:88:5:88:5 | a [element 1] | array_flow.rb:89:9:89:9 | a [element 1] | -| array_flow.rb:88:13:88:22 | call to source | array_flow.rb:88:5:88:5 | a [element 1] | -| array_flow.rb:89:5:89:5 | b [element 1] | array_flow.rb:91:10:91:10 | b [element 1] | -| array_flow.rb:89:5:89:5 | b [element 1] | array_flow.rb:92:10:92:10 | b [element 1] | -| array_flow.rb:89:9:89:9 | a [element 1] | array_flow.rb:89:9:89:15 | ...[...] [element 1] | -| array_flow.rb:89:9:89:15 | ...[...] [element 1] | array_flow.rb:89:5:89:5 | b [element 1] | -| array_flow.rb:91:10:91:10 | b [element 1] | array_flow.rb:91:10:91:13 | ...[...] | -| array_flow.rb:92:10:92:10 | b [element 1] | array_flow.rb:92:10:92:13 | ...[...] | -| array_flow.rb:96:5:96:5 | a [element 1] | array_flow.rb:97:9:97:9 | a [element 1] | -| array_flow.rb:96:13:96:22 | call to source | array_flow.rb:96:5:96:5 | a [element 1] | -| array_flow.rb:97:5:97:5 | b [element 1] | array_flow.rb:99:10:99:10 | b [element 1] | -| array_flow.rb:97:5:97:5 | b [element 1] | array_flow.rb:101:10:101:10 | b [element 1] | -| array_flow.rb:97:9:97:9 | a [element 1] | array_flow.rb:97:9:97:15 | ...[...] [element 1] | -| array_flow.rb:97:9:97:15 | ...[...] [element 1] | array_flow.rb:97:5:97:5 | b [element 1] | -| array_flow.rb:99:10:99:10 | b [element 1] | array_flow.rb:99:10:99:13 | ...[...] | -| array_flow.rb:101:10:101:10 | b [element 1] | array_flow.rb:101:10:101:13 | ...[...] | -| array_flow.rb:103:5:103:5 | a [element 1] | array_flow.rb:104:9:104:9 | a [element 1] | -| array_flow.rb:103:13:103:24 | call to source | array_flow.rb:103:5:103:5 | a [element 1] | -| array_flow.rb:104:5:104:5 | b [element 1] | array_flow.rb:106:10:106:10 | b [element 1] | -| array_flow.rb:104:9:104:9 | a [element 1] | array_flow.rb:104:9:104:16 | ...[...] [element 1] | -| array_flow.rb:104:9:104:16 | ...[...] [element 1] | array_flow.rb:104:5:104:5 | b [element 1] | -| array_flow.rb:106:10:106:10 | b [element 1] | array_flow.rb:106:10:106:13 | ...[...] | -| array_flow.rb:109:5:109:5 | a [element 1] | array_flow.rb:110:9:110:9 | a [element 1] | -| array_flow.rb:109:5:109:5 | a [element 1] | array_flow.rb:114:9:114:9 | a [element 1] | -| array_flow.rb:109:5:109:5 | a [element 3] | array_flow.rb:110:9:110:9 | a [element 3] | -| array_flow.rb:109:5:109:5 | a [element 3] | array_flow.rb:114:9:114:9 | a [element 3] | -| array_flow.rb:109:13:109:24 | call to source | array_flow.rb:109:5:109:5 | a [element 1] | -| array_flow.rb:109:30:109:41 | call to source | array_flow.rb:109:5:109:5 | a [element 3] | -| array_flow.rb:110:5:110:5 | b [element] | array_flow.rb:111:10:111:10 | b [element] | -| array_flow.rb:110:5:110:5 | b [element] | array_flow.rb:112:10:112:10 | b [element] | -| array_flow.rb:110:9:110:9 | a [element 1] | array_flow.rb:110:9:110:18 | ...[...] [element] | -| array_flow.rb:110:9:110:9 | a [element 3] | array_flow.rb:110:9:110:18 | ...[...] [element] | -| array_flow.rb:110:9:110:18 | ...[...] [element] | array_flow.rb:110:5:110:5 | b [element] | -| array_flow.rb:111:10:111:10 | b [element] | array_flow.rb:111:10:111:13 | ...[...] | -| array_flow.rb:112:10:112:10 | b [element] | array_flow.rb:112:10:112:13 | ...[...] | -| array_flow.rb:114:5:114:5 | b [element] | array_flow.rb:115:10:115:10 | b [element] | -| array_flow.rb:114:5:114:5 | b [element] | array_flow.rb:116:10:116:10 | b [element] | -| array_flow.rb:114:9:114:9 | a [element 1] | array_flow.rb:114:9:114:19 | ...[...] [element] | -| array_flow.rb:114:9:114:9 | a [element 3] | array_flow.rb:114:9:114:19 | ...[...] [element] | -| array_flow.rb:114:9:114:19 | ...[...] [element] | array_flow.rb:114:5:114:5 | b [element] | -| array_flow.rb:115:10:115:10 | b [element] | array_flow.rb:115:10:115:13 | ...[...] | -| array_flow.rb:116:10:116:10 | b [element] | array_flow.rb:116:10:116:13 | ...[...] | -| array_flow.rb:121:5:121:5 | [post] a [element] | array_flow.rb:122:10:122:10 | a [element] | -| array_flow.rb:121:5:121:5 | [post] a [element] | array_flow.rb:123:10:123:10 | a [element] | -| array_flow.rb:121:5:121:5 | [post] a [element] | array_flow.rb:124:10:124:10 | a [element] | -| array_flow.rb:121:15:121:24 | call to source | array_flow.rb:121:5:121:5 | [post] a [element] | -| array_flow.rb:122:10:122:10 | a [element] | array_flow.rb:122:10:122:13 | ...[...] | -| array_flow.rb:123:10:123:10 | a [element] | array_flow.rb:123:10:123:13 | ...[...] | -| array_flow.rb:124:10:124:10 | a [element] | array_flow.rb:124:10:124:13 | ...[...] | -| array_flow.rb:129:5:129:5 | [post] a [element] | array_flow.rb:130:10:130:10 | a [element] | -| array_flow.rb:129:5:129:5 | [post] a [element] | array_flow.rb:131:10:131:10 | a [element] | -| array_flow.rb:129:5:129:5 | [post] a [element] | array_flow.rb:132:10:132:10 | a [element] | -| array_flow.rb:129:19:129:28 | call to source | array_flow.rb:129:5:129:5 | [post] a [element] | -| array_flow.rb:130:10:130:10 | a [element] | array_flow.rb:130:10:130:13 | ...[...] | -| array_flow.rb:131:10:131:10 | a [element] | array_flow.rb:131:10:131:13 | ...[...] | -| array_flow.rb:132:10:132:10 | a [element] | array_flow.rb:132:10:132:13 | ...[...] | -| array_flow.rb:137:5:137:5 | [post] a [element] | array_flow.rb:138:10:138:10 | a [element] | -| array_flow.rb:137:5:137:5 | [post] a [element] | array_flow.rb:139:10:139:10 | a [element] | -| array_flow.rb:137:5:137:5 | [post] a [element] | array_flow.rb:140:10:140:10 | a [element] | -| array_flow.rb:137:15:137:24 | call to source | array_flow.rb:137:5:137:5 | [post] a [element] | -| array_flow.rb:138:10:138:10 | a [element] | array_flow.rb:138:10:138:13 | ...[...] | -| array_flow.rb:139:10:139:10 | a [element] | array_flow.rb:139:10:139:13 | ...[...] | -| array_flow.rb:140:10:140:10 | a [element] | array_flow.rb:140:10:140:13 | ...[...] | -| array_flow.rb:145:5:145:5 | [post] a [element] | array_flow.rb:146:10:146:10 | a [element] | -| array_flow.rb:145:5:145:5 | [post] a [element] | array_flow.rb:147:10:147:10 | a [element] | -| array_flow.rb:145:5:145:5 | [post] a [element] | array_flow.rb:148:10:148:10 | a [element] | -| array_flow.rb:145:19:145:28 | call to source | array_flow.rb:145:5:145:5 | [post] a [element] | -| array_flow.rb:146:10:146:10 | a [element] | array_flow.rb:146:10:146:13 | ...[...] | -| array_flow.rb:147:10:147:10 | a [element] | array_flow.rb:147:10:147:13 | ...[...] | -| array_flow.rb:148:10:148:10 | a [element] | array_flow.rb:148:10:148:13 | ...[...] | -| array_flow.rb:152:5:152:5 | a [element 2] | array_flow.rb:153:5:153:5 | a [element 2] | -| array_flow.rb:152:16:152:25 | call to source | array_flow.rb:152:5:152:5 | a [element 2] | -| array_flow.rb:153:5:153:5 | a [element 2] | array_flow.rb:153:16:153:16 | x | -| array_flow.rb:153:16:153:16 | x | array_flow.rb:154:14:154:14 | x | -| array_flow.rb:159:5:159:5 | a [element 2] | array_flow.rb:160:5:160:5 | a [element 2] | -| array_flow.rb:159:16:159:25 | call to source | array_flow.rb:159:5:159:5 | a [element 2] | -| array_flow.rb:160:5:160:5 | a [element 2] | array_flow.rb:160:16:160:16 | x | -| array_flow.rb:160:16:160:16 | x | array_flow.rb:161:14:161:14 | x | -| array_flow.rb:166:5:166:5 | a [element 0] | array_flow.rb:167:9:167:9 | a [element 0] | -| array_flow.rb:166:5:166:5 | a [element 0] | array_flow.rb:168:10:168:10 | a [element 0] | -| array_flow.rb:166:10:166:21 | call to source | array_flow.rb:166:5:166:5 | a [element 0] | -| array_flow.rb:167:5:167:5 | b [element 0] | array_flow.rb:170:10:170:10 | b [element 0] | -| array_flow.rb:167:5:167:5 | b [element] | array_flow.rb:170:10:170:10 | b [element] | -| array_flow.rb:167:5:167:5 | b [element] | array_flow.rb:171:10:171:10 | b [element] | -| array_flow.rb:167:9:167:9 | [post] a [element] | array_flow.rb:168:10:168:10 | a [element] | -| array_flow.rb:167:9:167:9 | [post] a [element] | array_flow.rb:169:10:169:10 | a [element] | -| array_flow.rb:167:9:167:9 | a [element 0] | array_flow.rb:167:9:167:44 | call to append [element 0] | -| array_flow.rb:167:9:167:44 | call to append [element 0] | array_flow.rb:167:5:167:5 | b [element 0] | -| array_flow.rb:167:9:167:44 | call to append [element] | array_flow.rb:167:5:167:5 | b [element] | -| array_flow.rb:167:18:167:29 | call to source | array_flow.rb:167:9:167:9 | [post] a [element] | -| array_flow.rb:167:18:167:29 | call to source | array_flow.rb:167:9:167:44 | call to append [element] | -| array_flow.rb:167:32:167:43 | call to source | array_flow.rb:167:9:167:9 | [post] a [element] | -| array_flow.rb:167:32:167:43 | call to source | array_flow.rb:167:9:167:44 | call to append [element] | -| array_flow.rb:168:10:168:10 | a [element 0] | array_flow.rb:168:10:168:13 | ...[...] | -| array_flow.rb:168:10:168:10 | a [element] | array_flow.rb:168:10:168:13 | ...[...] | -| array_flow.rb:169:10:169:10 | a [element] | array_flow.rb:169:10:169:13 | ...[...] | -| array_flow.rb:170:10:170:10 | b [element 0] | array_flow.rb:170:10:170:13 | ...[...] | -| array_flow.rb:170:10:170:10 | b [element] | array_flow.rb:170:10:170:13 | ...[...] | -| array_flow.rb:171:10:171:10 | b [element] | array_flow.rb:171:10:171:13 | ...[...] | -| array_flow.rb:177:5:177:5 | c [element 1] | array_flow.rb:178:16:178:16 | c [element 1] | -| array_flow.rb:177:15:177:24 | call to source | array_flow.rb:177:5:177:5 | c [element 1] | -| array_flow.rb:178:5:178:5 | d [element 2, element 1] | array_flow.rb:179:11:179:11 | d [element 2, element 1] | -| array_flow.rb:178:5:178:5 | d [element 2, element 1] | array_flow.rb:180:11:180:11 | d [element 2, element 1] | -| array_flow.rb:178:16:178:16 | c [element 1] | array_flow.rb:178:5:178:5 | d [element 2, element 1] | -| array_flow.rb:179:11:179:11 | d [element 2, element 1] | array_flow.rb:179:11:179:22 | call to assoc [element 1] | -| array_flow.rb:179:11:179:22 | call to assoc [element 1] | array_flow.rb:179:11:179:25 | ...[...] | -| array_flow.rb:179:11:179:25 | ...[...] | array_flow.rb:179:10:179:26 | ( ... ) | -| array_flow.rb:180:11:180:11 | d [element 2, element 1] | array_flow.rb:180:11:180:22 | call to assoc [element 1] | -| array_flow.rb:180:11:180:22 | call to assoc [element 1] | array_flow.rb:180:11:180:25 | ...[...] | -| array_flow.rb:180:11:180:25 | ...[...] | array_flow.rb:180:10:180:26 | ( ... ) | -| array_flow.rb:184:5:184:5 | a [element 1] | array_flow.rb:186:10:186:10 | a [element 1] | -| array_flow.rb:184:5:184:5 | a [element 1] | array_flow.rb:188:10:188:10 | a [element 1] | -| array_flow.rb:184:13:184:22 | call to source | array_flow.rb:184:5:184:5 | a [element 1] | -| array_flow.rb:186:10:186:10 | a [element 1] | array_flow.rb:186:10:186:16 | call to at | -| array_flow.rb:188:10:188:10 | a [element 1] | array_flow.rb:188:10:188:16 | call to at | -| array_flow.rb:192:5:192:5 | a [element 2] | array_flow.rb:193:9:193:9 | a [element 2] | -| array_flow.rb:192:16:192:25 | call to source | array_flow.rb:192:5:192:5 | a [element 2] | -| array_flow.rb:193:5:193:5 | b | array_flow.rb:196:10:196:10 | b | -| array_flow.rb:193:9:193:9 | a [element 2] | array_flow.rb:193:9:195:7 | call to bsearch | -| array_flow.rb:193:9:193:9 | a [element 2] | array_flow.rb:193:23:193:23 | x | -| array_flow.rb:193:9:195:7 | call to bsearch | array_flow.rb:193:5:193:5 | b | -| array_flow.rb:193:23:193:23 | x | array_flow.rb:194:14:194:14 | x | -| array_flow.rb:200:5:200:5 | a [element 2] | array_flow.rb:201:9:201:9 | a [element 2] | -| array_flow.rb:200:16:200:25 | call to source | array_flow.rb:200:5:200:5 | a [element 2] | -| array_flow.rb:201:9:201:9 | a [element 2] | array_flow.rb:201:29:201:29 | x | -| array_flow.rb:201:29:201:29 | x | array_flow.rb:202:14:202:14 | x | -| array_flow.rb:208:5:208:5 | a [element 2] | array_flow.rb:209:5:209:5 | a [element 2] | -| array_flow.rb:208:16:208:25 | call to source | array_flow.rb:208:5:208:5 | a [element 2] | -| array_flow.rb:209:5:209:5 | a [element 2] | array_flow.rb:209:17:209:17 | x | -| array_flow.rb:209:17:209:17 | x | array_flow.rb:210:14:210:14 | x | -| array_flow.rb:215:5:215:5 | a [element 2] | array_flow.rb:216:9:216:9 | a [element 2] | -| array_flow.rb:215:5:215:5 | a [element 3] | array_flow.rb:216:9:216:9 | a [element 3] | -| array_flow.rb:215:16:215:27 | call to source | array_flow.rb:215:5:215:5 | a [element 2] | -| array_flow.rb:215:30:215:41 | call to source | array_flow.rb:215:5:215:5 | a [element 3] | -| array_flow.rb:216:9:216:9 | a [element 2] | array_flow.rb:216:27:216:27 | x | -| array_flow.rb:216:9:216:9 | a [element 2] | array_flow.rb:216:30:216:30 | y | -| array_flow.rb:216:9:216:9 | a [element 3] | array_flow.rb:216:27:216:27 | x | -| array_flow.rb:216:9:216:9 | a [element 3] | array_flow.rb:216:30:216:30 | y | -| array_flow.rb:216:27:216:27 | x | array_flow.rb:217:14:217:14 | x | -| array_flow.rb:216:30:216:30 | y | array_flow.rb:218:14:218:14 | y | -| array_flow.rb:231:5:231:5 | a [element 2] | array_flow.rb:232:9:232:9 | a [element 2] | -| array_flow.rb:231:16:231:27 | call to source | array_flow.rb:231:5:231:5 | a [element 2] | -| array_flow.rb:232:5:232:5 | b [element] | array_flow.rb:236:10:236:10 | b [element] | -| array_flow.rb:232:9:232:9 | a [element 2] | array_flow.rb:232:23:232:23 | x | -| array_flow.rb:232:9:235:7 | call to collect [element] | array_flow.rb:232:5:232:5 | b [element] | -| array_flow.rb:232:23:232:23 | x | array_flow.rb:233:14:233:14 | x | -| array_flow.rb:234:9:234:19 | call to source | array_flow.rb:232:9:235:7 | call to collect [element] | -| array_flow.rb:236:10:236:10 | b [element] | array_flow.rb:236:10:236:13 | ...[...] | -| array_flow.rb:240:5:240:5 | a [element 2] | array_flow.rb:241:9:241:9 | a [element 2] | -| array_flow.rb:240:16:240:27 | call to source | array_flow.rb:240:5:240:5 | a [element 2] | -| array_flow.rb:241:5:241:5 | b [element] | array_flow.rb:246:10:246:10 | b [element] | -| array_flow.rb:241:9:241:9 | [post] a [element] | array_flow.rb:245:10:245:10 | a [element] | -| array_flow.rb:241:9:241:9 | a [element 2] | array_flow.rb:241:24:241:24 | x | -| array_flow.rb:241:9:244:7 | call to collect! [element] | array_flow.rb:241:5:241:5 | b [element] | -| array_flow.rb:241:24:241:24 | x | array_flow.rb:242:14:242:14 | x | -| array_flow.rb:243:9:243:19 | call to source | array_flow.rb:241:9:241:9 | [post] a [element] | -| array_flow.rb:243:9:243:19 | call to source | array_flow.rb:241:9:244:7 | call to collect! [element] | -| array_flow.rb:245:10:245:10 | a [element] | array_flow.rb:245:10:245:13 | ...[...] | -| array_flow.rb:246:10:246:10 | b [element] | array_flow.rb:246:10:246:13 | ...[...] | -| array_flow.rb:250:5:250:5 | a [element 2] | array_flow.rb:251:9:251:9 | a [element 2] | -| array_flow.rb:250:5:250:5 | a [element 2] | array_flow.rb:256:9:256:9 | a [element 2] | -| array_flow.rb:250:16:250:27 | call to source | array_flow.rb:250:5:250:5 | a [element 2] | -| array_flow.rb:251:5:251:5 | b [element] | array_flow.rb:255:10:255:10 | b [element] | -| array_flow.rb:251:9:251:9 | a [element 2] | array_flow.rb:251:9:254:7 | call to collect_concat [element] | -| array_flow.rb:251:9:251:9 | a [element 2] | array_flow.rb:251:30:251:30 | x | -| array_flow.rb:251:9:254:7 | call to collect_concat [element] | array_flow.rb:251:5:251:5 | b [element] | -| array_flow.rb:251:30:251:30 | x | array_flow.rb:252:14:252:14 | x | -| array_flow.rb:253:13:253:24 | call to source | array_flow.rb:251:9:254:7 | call to collect_concat [element] | -| array_flow.rb:255:10:255:10 | b [element] | array_flow.rb:255:10:255:13 | ...[...] | -| array_flow.rb:256:5:256:5 | b [element] | array_flow.rb:260:10:260:10 | b [element] | -| array_flow.rb:256:9:256:9 | a [element 2] | array_flow.rb:256:30:256:30 | x | -| array_flow.rb:256:9:259:7 | call to collect_concat [element] | array_flow.rb:256:5:256:5 | b [element] | -| array_flow.rb:256:30:256:30 | x | array_flow.rb:257:14:257:14 | x | -| array_flow.rb:258:9:258:20 | call to source | array_flow.rb:256:9:259:7 | call to collect_concat [element] | -| array_flow.rb:260:10:260:10 | b [element] | array_flow.rb:260:10:260:13 | ...[...] | -| array_flow.rb:264:5:264:5 | a [element 2] | array_flow.rb:265:9:265:9 | a [element 2] | -| array_flow.rb:264:16:264:25 | call to source | array_flow.rb:264:5:264:5 | a [element 2] | -| array_flow.rb:265:5:265:5 | b [element 2] | array_flow.rb:269:10:269:10 | b [element 2] | -| array_flow.rb:265:9:265:9 | a [element 2] | array_flow.rb:265:9:267:7 | call to combination [element 2] | -| array_flow.rb:265:9:265:9 | a [element 2] | array_flow.rb:265:30:265:30 | x [element] | -| array_flow.rb:265:9:267:7 | call to combination [element 2] | array_flow.rb:265:5:265:5 | b [element 2] | -| array_flow.rb:265:30:265:30 | x [element] | array_flow.rb:266:14:266:14 | x [element] | -| array_flow.rb:266:14:266:14 | x [element] | array_flow.rb:266:14:266:17 | ...[...] | -| array_flow.rb:269:10:269:10 | b [element 2] | array_flow.rb:269:10:269:13 | ...[...] | -| array_flow.rb:273:5:273:5 | a [element 2] | array_flow.rb:274:9:274:9 | a [element 2] | -| array_flow.rb:273:16:273:25 | call to source | array_flow.rb:273:5:273:5 | a [element 2] | -| array_flow.rb:274:5:274:5 | b [element] | array_flow.rb:275:10:275:10 | b [element] | -| array_flow.rb:274:9:274:9 | a [element 2] | array_flow.rb:274:9:274:17 | call to compact [element] | -| array_flow.rb:274:9:274:17 | call to compact [element] | array_flow.rb:274:5:274:5 | b [element] | -| array_flow.rb:275:10:275:10 | b [element] | array_flow.rb:275:10:275:13 | ...[...] | -| array_flow.rb:279:5:279:5 | a [element 2] | array_flow.rb:280:9:280:9 | a [element 2] | -| array_flow.rb:279:16:279:25 | call to source | array_flow.rb:279:5:279:5 | a [element 2] | -| array_flow.rb:280:5:280:5 | b [element] | array_flow.rb:282:10:282:10 | b [element] | -| array_flow.rb:280:9:280:9 | [post] a [element] | array_flow.rb:281:10:281:10 | a [element] | -| array_flow.rb:280:9:280:9 | a [element 2] | array_flow.rb:280:9:280:9 | [post] a [element] | -| array_flow.rb:280:9:280:9 | a [element 2] | array_flow.rb:280:9:280:18 | call to compact! [element] | -| array_flow.rb:280:9:280:18 | call to compact! [element] | array_flow.rb:280:5:280:5 | b [element] | -| array_flow.rb:281:10:281:10 | a [element] | array_flow.rb:281:10:281:13 | ...[...] | -| array_flow.rb:282:10:282:10 | b [element] | array_flow.rb:282:10:282:13 | ...[...] | -| array_flow.rb:286:5:286:5 | a [element 2] | array_flow.rb:290:10:290:10 | a [element 2] | -| array_flow.rb:286:16:286:27 | call to source | array_flow.rb:286:5:286:5 | a [element 2] | -| array_flow.rb:287:5:287:5 | b [element 2] | array_flow.rb:288:14:288:14 | b [element 2] | -| array_flow.rb:287:16:287:27 | call to source | array_flow.rb:287:5:287:5 | b [element 2] | -| array_flow.rb:288:5:288:5 | [post] a [element] | array_flow.rb:289:10:289:10 | a [element] | -| array_flow.rb:288:5:288:5 | [post] a [element] | array_flow.rb:290:10:290:10 | a [element] | -| array_flow.rb:288:14:288:14 | b [element 2] | array_flow.rb:288:5:288:5 | [post] a [element] | -| array_flow.rb:289:10:289:10 | a [element] | array_flow.rb:289:10:289:13 | ...[...] | -| array_flow.rb:290:10:290:10 | a [element 2] | array_flow.rb:290:10:290:13 | ...[...] | -| array_flow.rb:290:10:290:10 | a [element] | array_flow.rb:290:10:290:13 | ...[...] | -| array_flow.rb:294:5:294:5 | a [element 2] | array_flow.rb:295:5:295:5 | a [element 2] | -| array_flow.rb:294:16:294:25 | call to source | array_flow.rb:294:5:294:5 | a [element 2] | -| array_flow.rb:295:5:295:5 | a [element 2] | array_flow.rb:295:17:295:17 | x | -| array_flow.rb:295:17:295:17 | x | array_flow.rb:296:14:296:14 | x | -| array_flow.rb:301:5:301:5 | a [element 2] | array_flow.rb:302:5:302:5 | a [element 2] | -| array_flow.rb:301:16:301:25 | call to source | array_flow.rb:301:5:301:5 | a [element 2] | -| array_flow.rb:302:5:302:5 | a [element 2] | array_flow.rb:302:20:302:20 | x | -| array_flow.rb:302:20:302:20 | x | array_flow.rb:303:14:303:14 | x | -| array_flow.rb:308:5:308:5 | a [element 2] | array_flow.rb:309:9:309:9 | a [element 2] | -| array_flow.rb:308:16:308:25 | call to source | array_flow.rb:308:5:308:5 | a [element 2] | -| array_flow.rb:309:5:309:5 | b [element 2] | array_flow.rb:312:10:312:10 | b [element 2] | -| array_flow.rb:309:9:309:9 | a [element 2] | array_flow.rb:309:9:309:21 | call to deconstruct [element 2] | -| array_flow.rb:309:9:309:21 | call to deconstruct [element 2] | array_flow.rb:309:5:309:5 | b [element 2] | -| array_flow.rb:312:10:312:10 | b [element 2] | array_flow.rb:312:10:312:13 | ...[...] | -| array_flow.rb:316:5:316:5 | a [element 2] | array_flow.rb:317:9:317:9 | a [element 2] | -| array_flow.rb:316:16:316:27 | call to source | array_flow.rb:316:5:316:5 | a [element 2] | -| array_flow.rb:317:5:317:5 | b | array_flow.rb:318:10:318:10 | b | -| array_flow.rb:317:9:317:9 | a [element 2] | array_flow.rb:317:9:317:36 | call to delete | -| array_flow.rb:317:9:317:36 | call to delete | array_flow.rb:317:5:317:5 | b | -| array_flow.rb:317:23:317:34 | call to source | array_flow.rb:317:9:317:36 | call to delete | -| array_flow.rb:325:5:325:5 | a [element 2] | array_flow.rb:326:9:326:9 | a [element 2] | -| array_flow.rb:325:5:325:5 | a [element 3] | array_flow.rb:326:9:326:9 | a [element 3] | -| array_flow.rb:325:16:325:27 | call to source | array_flow.rb:325:5:325:5 | a [element 2] | -| array_flow.rb:325:30:325:41 | call to source | array_flow.rb:325:5:325:5 | a [element 3] | -| array_flow.rb:326:5:326:5 | b | array_flow.rb:327:10:327:10 | b | -| array_flow.rb:326:9:326:9 | [post] a [element 2] | array_flow.rb:328:10:328:10 | a [element 2] | -| array_flow.rb:326:9:326:9 | a [element 2] | array_flow.rb:326:9:326:22 | call to delete_at | -| array_flow.rb:326:9:326:9 | a [element 3] | array_flow.rb:326:9:326:9 | [post] a [element 2] | -| array_flow.rb:326:9:326:22 | call to delete_at | array_flow.rb:326:5:326:5 | b | -| array_flow.rb:328:10:328:10 | a [element 2] | array_flow.rb:328:10:328:13 | ...[...] | -| array_flow.rb:330:5:330:5 | a [element 2] | array_flow.rb:331:9:331:9 | a [element 2] | -| array_flow.rb:330:5:330:5 | a [element 3] | array_flow.rb:331:9:331:9 | a [element 3] | -| array_flow.rb:330:16:330:27 | call to source | array_flow.rb:330:5:330:5 | a [element 2] | -| array_flow.rb:330:30:330:41 | call to source | array_flow.rb:330:5:330:5 | a [element 3] | -| array_flow.rb:331:5:331:5 | b | array_flow.rb:332:10:332:10 | b | -| array_flow.rb:331:9:331:9 | [post] a [element] | array_flow.rb:333:10:333:10 | a [element] | -| array_flow.rb:331:9:331:9 | [post] a [element] | array_flow.rb:334:10:334:10 | a [element] | -| array_flow.rb:331:9:331:9 | a [element 2] | array_flow.rb:331:9:331:9 | [post] a [element] | -| array_flow.rb:331:9:331:9 | a [element 2] | array_flow.rb:331:9:331:22 | call to delete_at | -| array_flow.rb:331:9:331:9 | a [element 3] | array_flow.rb:331:9:331:9 | [post] a [element] | -| array_flow.rb:331:9:331:9 | a [element 3] | array_flow.rb:331:9:331:22 | call to delete_at | -| array_flow.rb:331:9:331:22 | call to delete_at | array_flow.rb:331:5:331:5 | b | -| array_flow.rb:333:10:333:10 | a [element] | array_flow.rb:333:10:333:13 | ...[...] | -| array_flow.rb:334:10:334:10 | a [element] | array_flow.rb:334:10:334:13 | ...[...] | -| array_flow.rb:338:5:338:5 | a [element 2] | array_flow.rb:339:9:339:9 | a [element 2] | -| array_flow.rb:338:16:338:25 | call to source | array_flow.rb:338:5:338:5 | a [element 2] | -| array_flow.rb:339:5:339:5 | b [element] | array_flow.rb:342:10:342:10 | b [element] | -| array_flow.rb:339:9:339:9 | [post] a [element] | array_flow.rb:343:10:343:10 | a [element] | -| array_flow.rb:339:9:339:9 | [post] a [element] | array_flow.rb:344:10:344:10 | a [element] | -| array_flow.rb:339:9:339:9 | [post] a [element] | array_flow.rb:345:10:345:10 | a [element] | -| array_flow.rb:339:9:339:9 | a [element 2] | array_flow.rb:339:9:339:9 | [post] a [element] | -| array_flow.rb:339:9:339:9 | a [element 2] | array_flow.rb:339:9:341:7 | call to delete_if [element] | -| array_flow.rb:339:9:339:9 | a [element 2] | array_flow.rb:339:25:339:25 | x | -| array_flow.rb:339:9:341:7 | call to delete_if [element] | array_flow.rb:339:5:339:5 | b [element] | -| array_flow.rb:339:25:339:25 | x | array_flow.rb:340:14:340:14 | x | -| array_flow.rb:342:10:342:10 | b [element] | array_flow.rb:342:10:342:13 | ...[...] | -| array_flow.rb:343:10:343:10 | a [element] | array_flow.rb:343:10:343:13 | ...[...] | -| array_flow.rb:344:10:344:10 | a [element] | array_flow.rb:344:10:344:13 | ...[...] | -| array_flow.rb:345:10:345:10 | a [element] | array_flow.rb:345:10:345:13 | ...[...] | -| array_flow.rb:349:5:349:5 | a [element 2] | array_flow.rb:350:9:350:9 | a [element 2] | -| array_flow.rb:349:16:349:25 | call to source | array_flow.rb:349:5:349:5 | a [element 2] | -| array_flow.rb:350:5:350:5 | b [element] | array_flow.rb:351:10:351:10 | b [element] | -| array_flow.rb:350:9:350:9 | a [element 2] | array_flow.rb:350:9:350:25 | call to difference [element] | -| array_flow.rb:350:9:350:25 | call to difference [element] | array_flow.rb:350:5:350:5 | b [element] | -| array_flow.rb:351:10:351:10 | b [element] | array_flow.rb:351:10:351:13 | ...[...] | -| array_flow.rb:355:5:355:5 | a [element 2] | array_flow.rb:357:10:357:10 | a [element 2] | -| array_flow.rb:355:5:355:5 | a [element 2] | array_flow.rb:358:10:358:10 | a [element 2] | -| array_flow.rb:355:5:355:5 | a [element 3, element 1] | array_flow.rb:360:10:360:10 | a [element 3, element 1] | -| array_flow.rb:355:16:355:27 | call to source | array_flow.rb:355:5:355:5 | a [element 2] | -| array_flow.rb:355:34:355:45 | call to source | array_flow.rb:355:5:355:5 | a [element 3, element 1] | -| array_flow.rb:357:10:357:10 | a [element 2] | array_flow.rb:357:10:357:17 | call to dig | -| array_flow.rb:358:10:358:10 | a [element 2] | array_flow.rb:358:10:358:17 | call to dig | -| array_flow.rb:360:10:360:10 | a [element 3, element 1] | array_flow.rb:360:10:360:19 | call to dig | -| array_flow.rb:364:5:364:5 | a [element 2] | array_flow.rb:365:9:365:9 | a [element 2] | -| array_flow.rb:364:16:364:27 | call to source | array_flow.rb:364:5:364:5 | a [element 2] | -| array_flow.rb:365:5:365:5 | b | array_flow.rb:368:10:368:10 | b | -| array_flow.rb:365:9:365:9 | a [element 2] | array_flow.rb:365:9:367:7 | call to detect | -| array_flow.rb:365:9:365:9 | a [element 2] | array_flow.rb:365:43:365:43 | x | -| array_flow.rb:365:9:367:7 | call to detect | array_flow.rb:365:5:365:5 | b | -| array_flow.rb:365:23:365:34 | call to source | array_flow.rb:365:9:367:7 | call to detect | -| array_flow.rb:365:43:365:43 | x | array_flow.rb:366:14:366:14 | x | -| array_flow.rb:372:5:372:5 | a [element 2] | array_flow.rb:373:9:373:9 | a [element 2] | -| array_flow.rb:372:5:372:5 | a [element 2] | array_flow.rb:375:9:375:9 | a [element 2] | -| array_flow.rb:372:5:372:5 | a [element 2] | array_flow.rb:380:9:380:9 | a [element 2] | -| array_flow.rb:372:5:372:5 | a [element 3] | array_flow.rb:373:9:373:9 | a [element 3] | -| array_flow.rb:372:5:372:5 | a [element 3] | array_flow.rb:375:9:375:9 | a [element 3] | -| array_flow.rb:372:16:372:27 | call to source | array_flow.rb:372:5:372:5 | a [element 2] | -| array_flow.rb:372:30:372:41 | call to source | array_flow.rb:372:5:372:5 | a [element 3] | -| array_flow.rb:373:5:373:5 | b [element] | array_flow.rb:374:10:374:10 | b [element] | -| array_flow.rb:373:9:373:9 | a [element 2] | array_flow.rb:373:9:373:17 | call to drop [element] | -| array_flow.rb:373:9:373:9 | a [element 3] | array_flow.rb:373:9:373:17 | call to drop [element] | -| array_flow.rb:373:9:373:17 | call to drop [element] | array_flow.rb:373:5:373:5 | b [element] | -| array_flow.rb:374:10:374:10 | b [element] | array_flow.rb:374:10:374:13 | ...[...] | -| array_flow.rb:375:5:375:5 | b [element 1] | array_flow.rb:377:10:377:10 | b [element 1] | -| array_flow.rb:375:5:375:5 | b [element 1] | array_flow.rb:378:10:378:10 | b [element 1] | -| array_flow.rb:375:5:375:5 | b [element 2] | array_flow.rb:378:10:378:10 | b [element 2] | -| array_flow.rb:375:9:375:9 | a [element 2] | array_flow.rb:375:9:375:17 | call to drop [element 1] | -| array_flow.rb:375:9:375:9 | a [element 3] | array_flow.rb:375:9:375:17 | call to drop [element 2] | -| array_flow.rb:375:9:375:17 | call to drop [element 1] | array_flow.rb:375:5:375:5 | b [element 1] | -| array_flow.rb:375:9:375:17 | call to drop [element 2] | array_flow.rb:375:5:375:5 | b [element 2] | -| array_flow.rb:377:10:377:10 | b [element 1] | array_flow.rb:377:10:377:13 | ...[...] | -| array_flow.rb:378:10:378:10 | b [element 1] | array_flow.rb:378:10:378:13 | ...[...] | -| array_flow.rb:378:10:378:10 | b [element 2] | array_flow.rb:378:10:378:13 | ...[...] | -| array_flow.rb:379:5:379:5 | [post] a [element] | array_flow.rb:380:9:380:9 | a [element] | -| array_flow.rb:379:12:379:23 | call to source | array_flow.rb:379:5:379:5 | [post] a [element] | -| array_flow.rb:380:5:380:5 | b [element 1] | array_flow.rb:381:10:381:10 | b [element 1] | -| array_flow.rb:380:5:380:5 | b [element] | array_flow.rb:381:10:381:10 | b [element] | -| array_flow.rb:380:5:380:5 | b [element] | array_flow.rb:382:9:382:9 | b [element] | -| array_flow.rb:380:9:380:9 | a [element 2] | array_flow.rb:380:9:380:17 | call to drop [element 1] | -| array_flow.rb:380:9:380:9 | a [element] | array_flow.rb:380:9:380:17 | call to drop [element] | -| array_flow.rb:380:9:380:17 | call to drop [element 1] | array_flow.rb:380:5:380:5 | b [element 1] | -| array_flow.rb:380:9:380:17 | call to drop [element] | array_flow.rb:380:5:380:5 | b [element] | -| array_flow.rb:381:10:381:10 | b [element 1] | array_flow.rb:381:10:381:13 | ...[...] | -| array_flow.rb:381:10:381:10 | b [element] | array_flow.rb:381:10:381:13 | ...[...] | -| array_flow.rb:382:5:382:5 | c [element] | array_flow.rb:383:10:383:10 | c [element] | -| array_flow.rb:382:9:382:9 | b [element] | array_flow.rb:382:9:382:19 | call to drop [element] | -| array_flow.rb:382:9:382:19 | call to drop [element] | array_flow.rb:382:5:382:5 | c [element] | -| array_flow.rb:383:10:383:10 | c [element] | array_flow.rb:383:10:383:13 | ...[...] | -| array_flow.rb:387:5:387:5 | a [element 2] | array_flow.rb:388:9:388:9 | a [element 2] | -| array_flow.rb:387:5:387:5 | a [element 3] | array_flow.rb:388:9:388:9 | a [element 3] | -| array_flow.rb:387:16:387:27 | call to source | array_flow.rb:387:5:387:5 | a [element 2] | -| array_flow.rb:387:30:387:41 | call to source | array_flow.rb:387:5:387:5 | a [element 3] | -| array_flow.rb:388:5:388:5 | b [element] | array_flow.rb:391:10:391:10 | b [element] | -| array_flow.rb:388:9:388:9 | a [element 2] | array_flow.rb:388:9:390:7 | call to drop_while [element] | -| array_flow.rb:388:9:388:9 | a [element 2] | array_flow.rb:388:26:388:26 | x | -| array_flow.rb:388:9:388:9 | a [element 3] | array_flow.rb:388:9:390:7 | call to drop_while [element] | -| array_flow.rb:388:9:388:9 | a [element 3] | array_flow.rb:388:26:388:26 | x | -| array_flow.rb:388:9:390:7 | call to drop_while [element] | array_flow.rb:388:5:388:5 | b [element] | -| array_flow.rb:388:26:388:26 | x | array_flow.rb:389:14:389:14 | x | -| array_flow.rb:391:10:391:10 | b [element] | array_flow.rb:391:10:391:13 | ...[...] | -| array_flow.rb:395:5:395:5 | a [element 2] | array_flow.rb:396:9:396:9 | a [element 2] | -| array_flow.rb:395:16:395:25 | call to source | array_flow.rb:395:5:395:5 | a [element 2] | -| array_flow.rb:396:5:396:5 | b [element 2] | array_flow.rb:399:10:399:10 | b [element 2] | -| array_flow.rb:396:9:396:9 | a [element 2] | array_flow.rb:396:9:398:7 | call to each [element 2] | -| array_flow.rb:396:9:396:9 | a [element 2] | array_flow.rb:396:20:396:20 | x | -| array_flow.rb:396:9:398:7 | call to each [element 2] | array_flow.rb:396:5:396:5 | b [element 2] | -| array_flow.rb:396:20:396:20 | x | array_flow.rb:397:14:397:14 | x | -| array_flow.rb:399:10:399:10 | b [element 2] | array_flow.rb:399:10:399:13 | ...[...] | -| array_flow.rb:403:5:403:5 | a [element 2] | array_flow.rb:404:18:404:18 | a [element 2] | -| array_flow.rb:403:16:403:25 | call to source | array_flow.rb:403:5:403:5 | a [element 2] | -| array_flow.rb:404:5:404:5 | b [element 2] | array_flow.rb:408:10:408:10 | b [element 2] | -| array_flow.rb:404:9:406:7 | [post] { ... } [captured x] | array_flow.rb:407:10:407:10 | x | -| array_flow.rb:404:9:406:7 | __synth__0__1 | array_flow.rb:405:14:405:14 | x | -| array_flow.rb:404:18:404:18 | a [element 2] | array_flow.rb:404:5:404:5 | b [element 2] | -| array_flow.rb:404:18:404:18 | a [element 2] | array_flow.rb:404:9:406:7 | [post] { ... } [captured x] | -| array_flow.rb:404:18:404:18 | a [element 2] | array_flow.rb:404:9:406:7 | __synth__0__1 | -| array_flow.rb:408:10:408:10 | b [element 2] | array_flow.rb:408:10:408:13 | ...[...] | -| array_flow.rb:412:5:412:5 | a [element 2] | array_flow.rb:413:5:413:5 | a [element 2] | -| array_flow.rb:412:16:412:25 | call to source | array_flow.rb:412:5:412:5 | a [element 2] | -| array_flow.rb:413:5:413:5 | a [element 2] | array_flow.rb:413:24:413:24 | x [element] | -| array_flow.rb:413:24:413:24 | x [element] | array_flow.rb:414:15:414:15 | x [element] | -| array_flow.rb:414:15:414:15 | x [element] | array_flow.rb:414:15:414:18 | ...[...] | -| array_flow.rb:414:15:414:18 | ...[...] | array_flow.rb:414:14:414:19 | ( ... ) | -| array_flow.rb:419:5:419:5 | a [element 2] | array_flow.rb:420:9:420:9 | a [element 2] | -| array_flow.rb:419:16:419:25 | call to source | array_flow.rb:419:5:419:5 | a [element 2] | -| array_flow.rb:420:5:420:5 | b [element 2] | array_flow.rb:423:10:423:10 | b [element 2] | -| array_flow.rb:420:9:420:9 | a [element 2] | array_flow.rb:420:9:422:7 | call to each_entry [element 2] | -| array_flow.rb:420:9:420:9 | a [element 2] | array_flow.rb:420:26:420:26 | x | -| array_flow.rb:420:9:422:7 | call to each_entry [element 2] | array_flow.rb:420:5:420:5 | b [element 2] | -| array_flow.rb:420:26:420:26 | x | array_flow.rb:421:14:421:14 | x | -| array_flow.rb:423:10:423:10 | b [element 2] | array_flow.rb:423:10:423:13 | ...[...] | -| array_flow.rb:427:5:427:5 | a [element 2] | array_flow.rb:428:9:428:9 | a [element 2] | -| array_flow.rb:427:16:427:25 | call to source | array_flow.rb:427:5:427:5 | a [element 2] | -| array_flow.rb:428:5:428:5 | b [element 2] | array_flow.rb:431:10:431:10 | b [element 2] | -| array_flow.rb:428:9:428:9 | a [element 2] | array_flow.rb:428:9:430:7 | call to each_index [element 2] | -| array_flow.rb:428:9:430:7 | call to each_index [element 2] | array_flow.rb:428:5:428:5 | b [element 2] | -| array_flow.rb:431:10:431:10 | b [element 2] | array_flow.rb:431:10:431:13 | ...[...] | -| array_flow.rb:435:5:435:5 | a [element 3] | array_flow.rb:436:5:436:5 | a [element 3] | -| array_flow.rb:435:19:435:28 | call to source | array_flow.rb:435:5:435:5 | a [element 3] | -| array_flow.rb:436:5:436:5 | a [element 3] | array_flow.rb:436:25:436:25 | x [element] | -| array_flow.rb:436:25:436:25 | x [element] | array_flow.rb:437:14:437:14 | x [element] | -| array_flow.rb:437:14:437:14 | x [element] | array_flow.rb:437:14:437:17 | ...[...] | -| array_flow.rb:442:5:442:5 | a [element 3] | array_flow.rb:443:9:443:9 | a [element 3] | -| array_flow.rb:442:19:442:28 | call to source | array_flow.rb:442:5:442:5 | a [element 3] | -| array_flow.rb:443:5:443:5 | b [element 3] | array_flow.rb:447:10:447:10 | b [element 3] | -| array_flow.rb:443:9:443:9 | a [element 3] | array_flow.rb:443:9:446:7 | call to each_with_index [element 3] | -| array_flow.rb:443:9:443:9 | a [element 3] | array_flow.rb:443:31:443:31 | x | -| array_flow.rb:443:9:446:7 | call to each_with_index [element 3] | array_flow.rb:443:5:443:5 | b [element 3] | -| array_flow.rb:443:31:443:31 | x | array_flow.rb:444:14:444:14 | x | -| array_flow.rb:447:10:447:10 | b [element 3] | array_flow.rb:447:10:447:13 | ...[...] | -| array_flow.rb:451:5:451:5 | a [element 3] | array_flow.rb:452:9:452:9 | a [element 3] | -| array_flow.rb:451:19:451:30 | call to source | array_flow.rb:451:5:451:5 | a [element 3] | -| array_flow.rb:452:5:452:5 | b | array_flow.rb:456:10:456:10 | b | -| array_flow.rb:452:9:452:9 | a [element 3] | array_flow.rb:452:46:452:46 | x | -| array_flow.rb:452:9:455:7 | call to each_with_object | array_flow.rb:452:5:452:5 | b | -| array_flow.rb:452:28:452:39 | call to source | array_flow.rb:452:9:455:7 | call to each_with_object | -| array_flow.rb:452:28:452:39 | call to source | array_flow.rb:452:48:452:48 | a | -| array_flow.rb:452:46:452:46 | x | array_flow.rb:453:14:453:14 | x | -| array_flow.rb:452:48:452:48 | a | array_flow.rb:454:14:454:14 | a | -| array_flow.rb:460:5:460:5 | a [element 3] | array_flow.rb:461:9:461:9 | a [element 3] | -| array_flow.rb:460:19:460:28 | call to source | array_flow.rb:460:5:460:5 | a [element 3] | -| array_flow.rb:461:5:461:5 | b [element 3] | array_flow.rb:462:10:462:10 | b [element 3] | -| array_flow.rb:461:9:461:9 | a [element 3] | array_flow.rb:461:9:461:17 | call to entries [element 3] | -| array_flow.rb:461:9:461:17 | call to entries [element 3] | array_flow.rb:461:5:461:5 | b [element 3] | -| array_flow.rb:462:10:462:10 | b [element 3] | array_flow.rb:462:10:462:13 | ...[...] | -| array_flow.rb:466:5:466:5 | a [element 3] | array_flow.rb:467:9:467:9 | a [element 3] | -| array_flow.rb:466:5:466:5 | a [element 3] | array_flow.rb:471:9:471:9 | a [element 3] | -| array_flow.rb:466:5:466:5 | a [element 3] | array_flow.rb:473:9:473:9 | a [element 3] | -| array_flow.rb:466:5:466:5 | a [element 3] | array_flow.rb:477:9:477:9 | a [element 3] | -| array_flow.rb:466:5:466:5 | a [element 4] | array_flow.rb:467:9:467:9 | a [element 4] | -| array_flow.rb:466:5:466:5 | a [element 4] | array_flow.rb:477:9:477:9 | a [element 4] | -| array_flow.rb:466:19:466:30 | call to source | array_flow.rb:466:5:466:5 | a [element 3] | -| array_flow.rb:466:33:466:44 | call to source | array_flow.rb:466:5:466:5 | a [element 4] | -| array_flow.rb:467:5:467:5 | b | array_flow.rb:470:10:470:10 | b | -| array_flow.rb:467:9:467:9 | a [element 3] | array_flow.rb:467:9:469:7 | call to fetch | -| array_flow.rb:467:9:467:9 | a [element 4] | array_flow.rb:467:9:469:7 | call to fetch | -| array_flow.rb:467:9:469:7 | call to fetch | array_flow.rb:467:5:467:5 | b | -| array_flow.rb:467:17:467:28 | call to source | array_flow.rb:467:35:467:35 | x | -| array_flow.rb:467:35:467:35 | x | array_flow.rb:468:14:468:14 | x | -| array_flow.rb:471:5:471:5 | b | array_flow.rb:472:10:472:10 | b | -| array_flow.rb:471:9:471:9 | a [element 3] | array_flow.rb:471:9:471:18 | call to fetch | -| array_flow.rb:471:9:471:18 | call to fetch | array_flow.rb:471:5:471:5 | b | -| array_flow.rb:473:5:473:5 | b | array_flow.rb:474:10:474:10 | b | -| array_flow.rb:473:9:473:9 | a [element 3] | array_flow.rb:473:9:473:32 | call to fetch | -| array_flow.rb:473:9:473:32 | call to fetch | array_flow.rb:473:5:473:5 | b | -| array_flow.rb:473:20:473:31 | call to source | array_flow.rb:473:9:473:32 | call to fetch | -| array_flow.rb:475:5:475:5 | b | array_flow.rb:476:10:476:10 | b | -| array_flow.rb:475:9:475:34 | call to fetch | array_flow.rb:475:5:475:5 | b | -| array_flow.rb:475:22:475:33 | call to source | array_flow.rb:475:9:475:34 | call to fetch | -| array_flow.rb:477:5:477:5 | b | array_flow.rb:478:10:478:10 | b | -| array_flow.rb:477:9:477:9 | a [element 3] | array_flow.rb:477:9:477:32 | call to fetch | -| array_flow.rb:477:9:477:9 | a [element 4] | array_flow.rb:477:9:477:32 | call to fetch | -| array_flow.rb:477:9:477:32 | call to fetch | array_flow.rb:477:5:477:5 | b | -| array_flow.rb:477:20:477:31 | call to source | array_flow.rb:477:9:477:32 | call to fetch | -| array_flow.rb:482:5:482:5 | a [element 3] | array_flow.rb:484:10:484:10 | a [element 3] | -| array_flow.rb:482:19:482:30 | call to source | array_flow.rb:482:5:482:5 | a [element 3] | -| array_flow.rb:483:5:483:5 | [post] a [element] | array_flow.rb:484:10:484:10 | a [element] | -| array_flow.rb:483:12:483:23 | call to source | array_flow.rb:483:5:483:5 | [post] a [element] | -| array_flow.rb:484:10:484:10 | a [element 3] | array_flow.rb:484:10:484:13 | ...[...] | -| array_flow.rb:484:10:484:10 | a [element] | array_flow.rb:484:10:484:13 | ...[...] | -| array_flow.rb:485:5:485:5 | [post] a [element] | array_flow.rb:486:10:486:10 | a [element] | -| array_flow.rb:485:12:485:23 | call to source | array_flow.rb:485:5:485:5 | [post] a [element] | -| array_flow.rb:486:10:486:10 | a [element] | array_flow.rb:486:10:486:13 | ...[...] | -| array_flow.rb:487:5:487:5 | [post] a [element] | array_flow.rb:490:10:490:10 | a [element] | -| array_flow.rb:487:5:487:5 | [post] a [element] | array_flow.rb:494:10:494:10 | a [element] | -| array_flow.rb:488:9:488:20 | call to source | array_flow.rb:487:5:487:5 | [post] a [element] | -| array_flow.rb:490:10:490:10 | a [element] | array_flow.rb:490:10:490:13 | ...[...] | -| array_flow.rb:491:5:491:5 | [post] a [element] | array_flow.rb:494:10:494:10 | a [element] | -| array_flow.rb:492:9:492:20 | call to source | array_flow.rb:491:5:491:5 | [post] a [element] | -| array_flow.rb:494:10:494:10 | a [element] | array_flow.rb:494:10:494:13 | ...[...] | -| array_flow.rb:498:5:498:5 | a [element 3] | array_flow.rb:499:9:499:9 | a [element 3] | -| array_flow.rb:498:19:498:28 | call to source | array_flow.rb:498:5:498:5 | a [element 3] | -| array_flow.rb:499:5:499:5 | b [element] | array_flow.rb:502:10:502:10 | b [element] | -| array_flow.rb:499:9:499:9 | a [element 3] | array_flow.rb:499:9:501:7 | call to filter [element] | -| array_flow.rb:499:9:499:9 | a [element 3] | array_flow.rb:499:22:499:22 | x | -| array_flow.rb:499:9:501:7 | call to filter [element] | array_flow.rb:499:5:499:5 | b [element] | -| array_flow.rb:499:22:499:22 | x | array_flow.rb:500:14:500:14 | x | -| array_flow.rb:502:10:502:10 | b [element] | array_flow.rb:502:10:502:13 | ...[...] | -| array_flow.rb:506:5:506:5 | a [element 3] | array_flow.rb:507:9:507:9 | a [element 3] | -| array_flow.rb:506:19:506:28 | call to source | array_flow.rb:506:5:506:5 | a [element 3] | -| array_flow.rb:507:5:507:5 | b [element] | array_flow.rb:511:10:511:10 | b [element] | -| array_flow.rb:507:9:507:9 | a [element 3] | array_flow.rb:507:9:510:7 | call to filter_map [element] | -| array_flow.rb:507:9:507:9 | a [element 3] | array_flow.rb:507:26:507:26 | x | -| array_flow.rb:507:9:510:7 | call to filter_map [element] | array_flow.rb:507:5:507:5 | b [element] | -| array_flow.rb:507:26:507:26 | x | array_flow.rb:508:14:508:14 | x | -| array_flow.rb:511:10:511:10 | b [element] | array_flow.rb:511:10:511:13 | ...[...] | -| array_flow.rb:518:5:518:5 | d [element] | array_flow.rb:521:10:521:10 | d [element] | -| array_flow.rb:518:9:520:7 | call to filter_map [element] | array_flow.rb:518:5:518:5 | d [element] | -| array_flow.rb:519:9:519:20 | call to source | array_flow.rb:518:9:520:7 | call to filter_map [element] | -| array_flow.rb:521:10:521:10 | d [element] | array_flow.rb:521:10:521:13 | ...[...] | -| array_flow.rb:525:5:525:5 | a [element 3] | array_flow.rb:526:9:526:9 | a [element 3] | -| array_flow.rb:525:19:525:28 | call to source | array_flow.rb:525:5:525:5 | a [element 3] | -| array_flow.rb:526:5:526:5 | b [element] | array_flow.rb:531:10:531:10 | b [element] | -| array_flow.rb:526:9:526:9 | [post] a [element] | array_flow.rb:530:10:530:10 | a [element] | -| array_flow.rb:526:9:526:9 | a [element 3] | array_flow.rb:526:9:526:9 | [post] a [element] | -| array_flow.rb:526:9:526:9 | a [element 3] | array_flow.rb:526:9:529:7 | call to filter! [element] | -| array_flow.rb:526:9:526:9 | a [element 3] | array_flow.rb:526:23:526:23 | x | -| array_flow.rb:526:9:529:7 | call to filter! [element] | array_flow.rb:526:5:526:5 | b [element] | -| array_flow.rb:526:23:526:23 | x | array_flow.rb:527:14:527:14 | x | -| array_flow.rb:530:10:530:10 | a [element] | array_flow.rb:530:10:530:13 | ...[...] | -| array_flow.rb:531:10:531:10 | b [element] | array_flow.rb:531:10:531:13 | ...[...] | -| array_flow.rb:535:5:535:5 | a [element 3] | array_flow.rb:536:9:536:9 | a [element 3] | -| array_flow.rb:535:19:535:30 | call to source | array_flow.rb:535:5:535:5 | a [element 3] | -| array_flow.rb:536:5:536:5 | b | array_flow.rb:539:10:539:10 | b | -| array_flow.rb:536:9:536:9 | a [element 3] | array_flow.rb:536:9:538:7 | call to find | -| array_flow.rb:536:9:536:9 | a [element 3] | array_flow.rb:536:41:536:41 | x | -| array_flow.rb:536:9:538:7 | call to find | array_flow.rb:536:5:536:5 | b | -| array_flow.rb:536:21:536:32 | call to source | array_flow.rb:536:9:538:7 | call to find | -| array_flow.rb:536:41:536:41 | x | array_flow.rb:537:14:537:14 | x | -| array_flow.rb:543:5:543:5 | a [element 3] | array_flow.rb:544:9:544:9 | a [element 3] | -| array_flow.rb:543:19:543:28 | call to source | array_flow.rb:543:5:543:5 | a [element 3] | -| array_flow.rb:544:5:544:5 | b [element] | array_flow.rb:547:10:547:10 | b [element] | -| array_flow.rb:544:9:544:9 | a [element 3] | array_flow.rb:544:9:546:7 | call to find_all [element] | -| array_flow.rb:544:9:544:9 | a [element 3] | array_flow.rb:544:24:544:24 | x | -| array_flow.rb:544:9:546:7 | call to find_all [element] | array_flow.rb:544:5:544:5 | b [element] | -| array_flow.rb:544:24:544:24 | x | array_flow.rb:545:14:545:14 | x | -| array_flow.rb:547:10:547:10 | b [element] | array_flow.rb:547:10:547:13 | ...[...] | -| array_flow.rb:551:5:551:5 | a [element 3] | array_flow.rb:552:5:552:5 | a [element 3] | -| array_flow.rb:551:19:551:28 | call to source | array_flow.rb:551:5:551:5 | a [element 3] | -| array_flow.rb:552:5:552:5 | a [element 3] | array_flow.rb:552:22:552:22 | x | -| array_flow.rb:552:22:552:22 | x | array_flow.rb:553:14:553:14 | x | -| array_flow.rb:558:5:558:5 | a [element 0] | array_flow.rb:560:10:560:10 | a [element 0] | -| array_flow.rb:558:5:558:5 | a [element 0] | array_flow.rb:561:9:561:9 | a [element 0] | -| array_flow.rb:558:5:558:5 | a [element 0] | array_flow.rb:564:9:564:9 | a [element 0] | -| array_flow.rb:558:5:558:5 | a [element 3] | array_flow.rb:564:9:564:9 | a [element 3] | -| array_flow.rb:558:10:558:21 | call to source | array_flow.rb:558:5:558:5 | a [element 0] | -| array_flow.rb:558:30:558:41 | call to source | array_flow.rb:558:5:558:5 | a [element 3] | -| array_flow.rb:559:5:559:5 | [post] a [element] | array_flow.rb:560:10:560:10 | a [element] | -| array_flow.rb:559:5:559:5 | [post] a [element] | array_flow.rb:561:9:561:9 | a [element] | -| array_flow.rb:559:5:559:5 | [post] a [element] | array_flow.rb:564:9:564:9 | a [element] | -| array_flow.rb:559:12:559:23 | call to source | array_flow.rb:559:5:559:5 | [post] a [element] | -| array_flow.rb:560:10:560:10 | a [element 0] | array_flow.rb:560:10:560:16 | call to first | -| array_flow.rb:560:10:560:10 | a [element] | array_flow.rb:560:10:560:16 | call to first | -| array_flow.rb:561:5:561:5 | b [element 0] | array_flow.rb:562:10:562:10 | b [element 0] | -| array_flow.rb:561:5:561:5 | b [element] | array_flow.rb:562:10:562:10 | b [element] | -| array_flow.rb:561:5:561:5 | b [element] | array_flow.rb:563:10:563:10 | b [element] | -| array_flow.rb:561:9:561:9 | a [element 0] | array_flow.rb:561:9:561:18 | call to first [element 0] | -| array_flow.rb:561:9:561:9 | a [element] | array_flow.rb:561:9:561:18 | call to first [element] | -| array_flow.rb:561:9:561:18 | call to first [element 0] | array_flow.rb:561:5:561:5 | b [element 0] | -| array_flow.rb:561:9:561:18 | call to first [element] | array_flow.rb:561:5:561:5 | b [element] | -| array_flow.rb:562:10:562:10 | b [element 0] | array_flow.rb:562:10:562:13 | ...[...] | -| array_flow.rb:562:10:562:10 | b [element] | array_flow.rb:562:10:562:13 | ...[...] | -| array_flow.rb:563:10:563:10 | b [element] | array_flow.rb:563:10:563:13 | ...[...] | -| array_flow.rb:564:5:564:5 | c [element 0] | array_flow.rb:565:10:565:10 | c [element 0] | -| array_flow.rb:564:5:564:5 | c [element 3] | array_flow.rb:566:10:566:10 | c [element 3] | -| array_flow.rb:564:5:564:5 | c [element] | array_flow.rb:565:10:565:10 | c [element] | -| array_flow.rb:564:5:564:5 | c [element] | array_flow.rb:566:10:566:10 | c [element] | -| array_flow.rb:564:9:564:9 | a [element 0] | array_flow.rb:564:9:564:18 | call to first [element 0] | -| array_flow.rb:564:9:564:9 | a [element 3] | array_flow.rb:564:9:564:18 | call to first [element 3] | -| array_flow.rb:564:9:564:9 | a [element] | array_flow.rb:564:9:564:18 | call to first [element] | -| array_flow.rb:564:9:564:18 | call to first [element 0] | array_flow.rb:564:5:564:5 | c [element 0] | -| array_flow.rb:564:9:564:18 | call to first [element 3] | array_flow.rb:564:5:564:5 | c [element 3] | -| array_flow.rb:564:9:564:18 | call to first [element] | array_flow.rb:564:5:564:5 | c [element] | -| array_flow.rb:565:10:565:10 | c [element 0] | array_flow.rb:565:10:565:13 | ...[...] | -| array_flow.rb:565:10:565:10 | c [element] | array_flow.rb:565:10:565:13 | ...[...] | -| array_flow.rb:566:10:566:10 | c [element 3] | array_flow.rb:566:10:566:13 | ...[...] | -| array_flow.rb:566:10:566:10 | c [element] | array_flow.rb:566:10:566:13 | ...[...] | -| array_flow.rb:570:5:570:5 | a [element 2] | array_flow.rb:571:9:571:9 | a [element 2] | -| array_flow.rb:570:5:570:5 | a [element 2] | array_flow.rb:576:9:576:9 | a [element 2] | -| array_flow.rb:570:16:570:27 | call to source | array_flow.rb:570:5:570:5 | a [element 2] | -| array_flow.rb:571:5:571:5 | b [element] | array_flow.rb:575:10:575:10 | b [element] | -| array_flow.rb:571:9:571:9 | a [element 2] | array_flow.rb:571:9:574:7 | call to flat_map [element] | -| array_flow.rb:571:9:571:9 | a [element 2] | array_flow.rb:571:24:571:24 | x | -| array_flow.rb:571:9:574:7 | call to flat_map [element] | array_flow.rb:571:5:571:5 | b [element] | -| array_flow.rb:571:24:571:24 | x | array_flow.rb:572:14:572:14 | x | -| array_flow.rb:573:13:573:24 | call to source | array_flow.rb:571:9:574:7 | call to flat_map [element] | -| array_flow.rb:575:10:575:10 | b [element] | array_flow.rb:575:10:575:13 | ...[...] | -| array_flow.rb:576:5:576:5 | b [element] | array_flow.rb:580:10:580:10 | b [element] | -| array_flow.rb:576:9:576:9 | a [element 2] | array_flow.rb:576:24:576:24 | x | -| array_flow.rb:576:9:579:7 | call to flat_map [element] | array_flow.rb:576:5:576:5 | b [element] | -| array_flow.rb:576:24:576:24 | x | array_flow.rb:577:14:577:14 | x | -| array_flow.rb:578:9:578:20 | call to source | array_flow.rb:576:9:579:7 | call to flat_map [element] | -| array_flow.rb:580:10:580:10 | b [element] | array_flow.rb:580:10:580:13 | ...[...] | -| array_flow.rb:584:5:584:5 | a [element 2, element 1] | array_flow.rb:585:9:585:9 | a [element 2, element 1] | -| array_flow.rb:584:20:584:29 | call to source | array_flow.rb:584:5:584:5 | a [element 2, element 1] | -| array_flow.rb:585:5:585:5 | b [element] | array_flow.rb:586:10:586:10 | b [element] | -| array_flow.rb:585:9:585:9 | a [element 2, element 1] | array_flow.rb:585:9:585:17 | call to flatten [element] | -| array_flow.rb:585:9:585:17 | call to flatten [element] | array_flow.rb:585:5:585:5 | b [element] | -| array_flow.rb:586:10:586:10 | b [element] | array_flow.rb:586:10:586:13 | ...[...] | -| array_flow.rb:590:5:590:5 | a [element 2, element 1] | array_flow.rb:591:10:591:10 | a [element 2, element 1] | -| array_flow.rb:590:5:590:5 | a [element 2, element 1] | array_flow.rb:592:9:592:9 | a [element 2, element 1] | -| array_flow.rb:590:20:590:29 | call to source | array_flow.rb:590:5:590:5 | a [element 2, element 1] | -| array_flow.rb:591:10:591:10 | a [element 2, element 1] | array_flow.rb:591:10:591:13 | ...[...] [element 1] | -| array_flow.rb:591:10:591:13 | ...[...] [element 1] | array_flow.rb:591:10:591:16 | ...[...] | -| array_flow.rb:592:5:592:5 | b [element, element 1] | array_flow.rb:596:10:596:10 | b [element, element 1] | -| array_flow.rb:592:5:592:5 | b [element] | array_flow.rb:595:10:595:10 | b [element] | -| array_flow.rb:592:9:592:9 | [post] a [element, element 1] | array_flow.rb:594:10:594:10 | a [element, element 1] | -| array_flow.rb:592:9:592:9 | [post] a [element] | array_flow.rb:593:10:593:10 | a [element] | -| array_flow.rb:592:9:592:9 | a [element 2, element 1] | array_flow.rb:592:9:592:9 | [post] a [element, element 1] | -| array_flow.rb:592:9:592:9 | a [element 2, element 1] | array_flow.rb:592:9:592:9 | [post] a [element] | -| array_flow.rb:592:9:592:9 | a [element 2, element 1] | array_flow.rb:592:9:592:18 | call to flatten! [element, element 1] | -| array_flow.rb:592:9:592:9 | a [element 2, element 1] | array_flow.rb:592:9:592:18 | call to flatten! [element] | -| array_flow.rb:592:9:592:18 | call to flatten! [element, element 1] | array_flow.rb:592:5:592:5 | b [element, element 1] | -| array_flow.rb:592:9:592:18 | call to flatten! [element] | array_flow.rb:592:5:592:5 | b [element] | -| array_flow.rb:593:10:593:10 | a [element] | array_flow.rb:593:10:593:13 | ...[...] | -| array_flow.rb:594:10:594:10 | a [element, element 1] | array_flow.rb:594:10:594:13 | ...[...] [element 1] | -| array_flow.rb:594:10:594:13 | ...[...] [element 1] | array_flow.rb:594:10:594:16 | ...[...] | -| array_flow.rb:595:10:595:10 | b [element] | array_flow.rb:595:10:595:13 | ...[...] | -| array_flow.rb:596:10:596:10 | b [element, element 1] | array_flow.rb:596:10:596:13 | ...[...] [element 1] | -| array_flow.rb:596:10:596:13 | ...[...] [element 1] | array_flow.rb:596:10:596:16 | ...[...] | -| array_flow.rb:600:5:600:5 | a [element 3] | array_flow.rb:601:9:601:9 | a [element 3] | -| array_flow.rb:600:5:600:5 | a [element 3] | array_flow.rb:603:9:603:9 | a [element 3] | -| array_flow.rb:600:19:600:30 | call to source | array_flow.rb:600:5:600:5 | a [element 3] | -| array_flow.rb:601:5:601:5 | b [element] | array_flow.rb:602:10:602:10 | b [element] | -| array_flow.rb:601:9:601:9 | a [element 3] | array_flow.rb:601:9:601:20 | call to grep [element] | -| array_flow.rb:601:9:601:20 | call to grep [element] | array_flow.rb:601:5:601:5 | b [element] | -| array_flow.rb:602:10:602:10 | b [element] | array_flow.rb:602:10:602:13 | ...[...] | -| array_flow.rb:603:5:603:5 | b [element] | array_flow.rb:607:10:607:10 | b [element] | -| array_flow.rb:603:9:603:9 | a [element 3] | array_flow.rb:603:26:603:26 | x | -| array_flow.rb:603:9:606:7 | call to grep [element] | array_flow.rb:603:5:603:5 | b [element] | -| array_flow.rb:603:26:603:26 | x | array_flow.rb:604:14:604:14 | x | -| array_flow.rb:605:9:605:20 | call to source | array_flow.rb:603:9:606:7 | call to grep [element] | -| array_flow.rb:607:10:607:10 | b [element] | array_flow.rb:607:10:607:13 | ...[...] | -| array_flow.rb:611:5:611:5 | a [element 3] | array_flow.rb:612:9:612:9 | a [element 3] | -| array_flow.rb:611:5:611:5 | a [element 3] | array_flow.rb:614:9:614:9 | a [element 3] | -| array_flow.rb:611:19:611:30 | call to source | array_flow.rb:611:5:611:5 | a [element 3] | -| array_flow.rb:612:5:612:5 | b [element] | array_flow.rb:613:10:613:10 | b [element] | -| array_flow.rb:612:9:612:9 | a [element 3] | array_flow.rb:612:9:612:21 | call to grep_v [element] | -| array_flow.rb:612:9:612:21 | call to grep_v [element] | array_flow.rb:612:5:612:5 | b [element] | -| array_flow.rb:613:10:613:10 | b [element] | array_flow.rb:613:10:613:13 | ...[...] | -| array_flow.rb:614:5:614:5 | b [element] | array_flow.rb:618:10:618:10 | b [element] | -| array_flow.rb:614:9:614:9 | a [element 3] | array_flow.rb:614:27:614:27 | x | -| array_flow.rb:614:9:617:7 | call to grep_v [element] | array_flow.rb:614:5:614:5 | b [element] | -| array_flow.rb:614:27:614:27 | x | array_flow.rb:615:14:615:14 | x | -| array_flow.rb:616:9:616:20 | call to source | array_flow.rb:614:9:617:7 | call to grep_v [element] | -| array_flow.rb:618:10:618:10 | b [element] | array_flow.rb:618:10:618:13 | ...[...] | -| array_flow.rb:622:5:622:5 | a [element 3] | array_flow.rb:623:9:623:9 | a [element 3] | -| array_flow.rb:622:19:622:30 | call to source | array_flow.rb:622:5:622:5 | a [element 3] | -| array_flow.rb:623:9:623:9 | a [element 3] | array_flow.rb:623:24:623:24 | x | -| array_flow.rb:623:24:623:24 | x | array_flow.rb:624:14:624:14 | x | -| array_flow.rb:631:5:631:5 | a [element 3] | array_flow.rb:632:5:632:5 | a [element 3] | -| array_flow.rb:631:19:631:28 | call to source | array_flow.rb:631:5:631:5 | a [element 3] | -| array_flow.rb:632:5:632:5 | a [element 3] | array_flow.rb:632:17:632:17 | x | -| array_flow.rb:632:17:632:17 | x | array_flow.rb:633:14:633:14 | x | -| array_flow.rb:638:5:638:5 | a [element 0] | array_flow.rb:639:9:639:9 | a [element 0] | -| array_flow.rb:638:5:638:5 | a [element 0] | array_flow.rb:645:9:645:9 | a [element 0] | -| array_flow.rb:638:5:638:5 | a [element 2] | array_flow.rb:639:9:639:9 | a [element 2] | -| array_flow.rb:638:5:638:5 | a [element 2] | array_flow.rb:645:9:645:9 | a [element 2] | -| array_flow.rb:638:10:638:21 | call to source | array_flow.rb:638:5:638:5 | a [element 0] | -| array_flow.rb:638:27:638:38 | call to source | array_flow.rb:638:5:638:5 | a [element 2] | -| array_flow.rb:639:5:639:5 | b | array_flow.rb:644:10:644:10 | b | -| array_flow.rb:639:9:639:9 | a [element 0] | array_flow.rb:639:22:639:22 | x | -| array_flow.rb:639:9:639:9 | a [element 2] | array_flow.rb:639:25:639:25 | y | -| array_flow.rb:639:9:643:7 | call to inject | array_flow.rb:639:5:639:5 | b | -| array_flow.rb:639:22:639:22 | x | array_flow.rb:640:14:640:14 | x | -| array_flow.rb:639:25:639:25 | y | array_flow.rb:641:14:641:14 | y | -| array_flow.rb:642:9:642:19 | call to source | array_flow.rb:639:9:643:7 | call to inject | -| array_flow.rb:645:5:645:5 | c | array_flow.rb:650:10:650:10 | c | -| array_flow.rb:645:9:645:9 | a [element 0] | array_flow.rb:645:28:645:28 | y | -| array_flow.rb:645:9:645:9 | a [element 2] | array_flow.rb:645:28:645:28 | y | -| array_flow.rb:645:9:649:7 | call to inject | array_flow.rb:645:5:645:5 | c | -| array_flow.rb:645:28:645:28 | y | array_flow.rb:647:14:647:14 | y | -| array_flow.rb:648:9:648:19 | call to source | array_flow.rb:645:9:649:7 | call to inject | -| array_flow.rb:655:5:655:5 | a [element 2] | array_flow.rb:656:9:656:9 | a [element 2] | -| array_flow.rb:655:16:655:27 | call to source | array_flow.rb:655:5:655:5 | a [element 2] | -| array_flow.rb:656:5:656:5 | b [element 1] | array_flow.rb:663:10:663:10 | b [element 1] | -| array_flow.rb:656:5:656:5 | b [element 2] | array_flow.rb:664:10:664:10 | b [element 2] | -| array_flow.rb:656:5:656:5 | b [element 4] | array_flow.rb:666:10:666:10 | b [element 4] | -| array_flow.rb:656:9:656:9 | [post] a [element 1] | array_flow.rb:658:10:658:10 | a [element 1] | -| array_flow.rb:656:9:656:9 | [post] a [element 2] | array_flow.rb:659:10:659:10 | a [element 2] | -| array_flow.rb:656:9:656:9 | [post] a [element 4] | array_flow.rb:661:10:661:10 | a [element 4] | -| array_flow.rb:656:9:656:9 | a [element 2] | array_flow.rb:656:9:656:9 | [post] a [element 4] | -| array_flow.rb:656:9:656:9 | a [element 2] | array_flow.rb:656:9:656:47 | call to insert [element 4] | -| array_flow.rb:656:9:656:47 | call to insert [element 1] | array_flow.rb:656:5:656:5 | b [element 1] | -| array_flow.rb:656:9:656:47 | call to insert [element 2] | array_flow.rb:656:5:656:5 | b [element 2] | -| array_flow.rb:656:9:656:47 | call to insert [element 4] | array_flow.rb:656:5:656:5 | b [element 4] | -| array_flow.rb:656:21:656:32 | call to source | array_flow.rb:656:9:656:9 | [post] a [element 1] | -| array_flow.rb:656:21:656:32 | call to source | array_flow.rb:656:9:656:47 | call to insert [element 1] | -| array_flow.rb:656:35:656:46 | call to source | array_flow.rb:656:9:656:9 | [post] a [element 2] | -| array_flow.rb:656:35:656:46 | call to source | array_flow.rb:656:9:656:47 | call to insert [element 2] | -| array_flow.rb:658:10:658:10 | a [element 1] | array_flow.rb:658:10:658:13 | ...[...] | -| array_flow.rb:659:10:659:10 | a [element 2] | array_flow.rb:659:10:659:13 | ...[...] | -| array_flow.rb:661:10:661:10 | a [element 4] | array_flow.rb:661:10:661:13 | ...[...] | -| array_flow.rb:663:10:663:10 | b [element 1] | array_flow.rb:663:10:663:13 | ...[...] | -| array_flow.rb:664:10:664:10 | b [element 2] | array_flow.rb:664:10:664:13 | ...[...] | -| array_flow.rb:666:10:666:10 | b [element 4] | array_flow.rb:666:10:666:13 | ...[...] | -| array_flow.rb:669:5:669:5 | c [element 2] | array_flow.rb:670:9:670:9 | c [element 2] | -| array_flow.rb:669:16:669:27 | call to source | array_flow.rb:669:5:669:5 | c [element 2] | -| array_flow.rb:670:5:670:5 | d [element] | array_flow.rb:672:10:672:10 | d [element] | -| array_flow.rb:670:9:670:9 | [post] c [element] | array_flow.rb:671:10:671:10 | c [element] | -| array_flow.rb:670:9:670:9 | c [element 2] | array_flow.rb:670:9:670:9 | [post] c [element] | -| array_flow.rb:670:9:670:9 | c [element 2] | array_flow.rb:670:9:670:47 | call to insert [element] | -| array_flow.rb:670:9:670:47 | call to insert [element] | array_flow.rb:670:5:670:5 | d [element] | -| array_flow.rb:670:21:670:32 | call to source | array_flow.rb:670:9:670:9 | [post] c [element] | -| array_flow.rb:670:21:670:32 | call to source | array_flow.rb:670:9:670:47 | call to insert [element] | -| array_flow.rb:670:35:670:46 | call to source | array_flow.rb:670:9:670:9 | [post] c [element] | -| array_flow.rb:670:35:670:46 | call to source | array_flow.rb:670:9:670:47 | call to insert [element] | -| array_flow.rb:671:10:671:10 | c [element] | array_flow.rb:671:10:671:13 | ...[...] | -| array_flow.rb:672:10:672:10 | d [element] | array_flow.rb:672:10:672:13 | ...[...] | -| array_flow.rb:683:5:683:5 | a [element 2] | array_flow.rb:684:9:684:9 | a [element 2] | -| array_flow.rb:683:16:683:27 | call to source | array_flow.rb:683:5:683:5 | a [element 2] | -| array_flow.rb:684:5:684:5 | b [element] | array_flow.rb:685:10:685:10 | b [element] | -| array_flow.rb:684:9:684:9 | a [element 2] | array_flow.rb:684:9:684:60 | call to intersection [element] | -| array_flow.rb:684:9:684:60 | call to intersection [element] | array_flow.rb:684:5:684:5 | b [element] | -| array_flow.rb:684:31:684:42 | call to source | array_flow.rb:684:9:684:60 | call to intersection [element] | -| array_flow.rb:684:47:684:58 | call to source | array_flow.rb:684:9:684:60 | call to intersection [element] | -| array_flow.rb:685:10:685:10 | b [element] | array_flow.rb:685:10:685:13 | ...[...] | -| array_flow.rb:689:5:689:5 | a [element 2] | array_flow.rb:690:9:690:9 | a [element 2] | -| array_flow.rb:689:16:689:25 | call to source | array_flow.rb:689:5:689:5 | a [element 2] | -| array_flow.rb:690:5:690:5 | b [element] | array_flow.rb:695:10:695:10 | b [element] | -| array_flow.rb:690:9:690:9 | [post] a [element] | array_flow.rb:694:10:694:10 | a [element] | -| array_flow.rb:690:9:690:9 | a [element 2] | array_flow.rb:690:9:690:9 | [post] a [element] | -| array_flow.rb:690:9:690:9 | a [element 2] | array_flow.rb:690:9:693:7 | call to keep_if [element] | -| array_flow.rb:690:9:690:9 | a [element 2] | array_flow.rb:690:23:690:23 | x | -| array_flow.rb:690:9:693:7 | call to keep_if [element] | array_flow.rb:690:5:690:5 | b [element] | -| array_flow.rb:690:23:690:23 | x | array_flow.rb:691:14:691:14 | x | -| array_flow.rb:694:10:694:10 | a [element] | array_flow.rb:694:10:694:13 | ...[...] | -| array_flow.rb:695:10:695:10 | b [element] | array_flow.rb:695:10:695:13 | ...[...] | -| array_flow.rb:699:5:699:5 | a [element 2] | array_flow.rb:701:10:701:10 | a [element 2] | -| array_flow.rb:699:5:699:5 | a [element 2] | array_flow.rb:702:9:702:9 | a [element 2] | -| array_flow.rb:699:16:699:27 | call to source | array_flow.rb:699:5:699:5 | a [element 2] | -| array_flow.rb:700:5:700:5 | [post] a [element] | array_flow.rb:701:10:701:10 | a [element] | -| array_flow.rb:700:5:700:5 | [post] a [element] | array_flow.rb:702:9:702:9 | a [element] | -| array_flow.rb:700:12:700:23 | call to source | array_flow.rb:700:5:700:5 | [post] a [element] | -| array_flow.rb:701:10:701:10 | a [element 2] | array_flow.rb:701:10:701:15 | call to last | -| array_flow.rb:701:10:701:10 | a [element] | array_flow.rb:701:10:701:15 | call to last | -| array_flow.rb:702:5:702:5 | b [element] | array_flow.rb:703:10:703:10 | b [element] | -| array_flow.rb:702:5:702:5 | b [element] | array_flow.rb:704:10:704:10 | b [element] | -| array_flow.rb:702:9:702:9 | a [element 2] | array_flow.rb:702:9:702:17 | call to last [element] | -| array_flow.rb:702:9:702:9 | a [element] | array_flow.rb:702:9:702:17 | call to last [element] | -| array_flow.rb:702:9:702:17 | call to last [element] | array_flow.rb:702:5:702:5 | b [element] | -| array_flow.rb:703:10:703:10 | b [element] | array_flow.rb:703:10:703:13 | ...[...] | -| array_flow.rb:704:10:704:10 | b [element] | array_flow.rb:704:10:704:13 | ...[...] | -| array_flow.rb:708:5:708:5 | a [element 2] | array_flow.rb:709:9:709:9 | a [element 2] | -| array_flow.rb:708:16:708:27 | call to source | array_flow.rb:708:5:708:5 | a [element 2] | -| array_flow.rb:709:5:709:5 | b [element] | array_flow.rb:713:10:713:10 | b [element] | -| array_flow.rb:709:9:709:9 | a [element 2] | array_flow.rb:709:19:709:19 | x | -| array_flow.rb:709:9:712:7 | call to map [element] | array_flow.rb:709:5:709:5 | b [element] | -| array_flow.rb:709:19:709:19 | x | array_flow.rb:710:14:710:14 | x | -| array_flow.rb:711:9:711:19 | call to source | array_flow.rb:709:9:712:7 | call to map [element] | -| array_flow.rb:713:10:713:10 | b [element] | array_flow.rb:713:10:713:13 | ...[...] | -| array_flow.rb:717:5:717:5 | a [element 2] | array_flow.rb:718:9:718:9 | a [element 2] | -| array_flow.rb:717:16:717:27 | call to source | array_flow.rb:717:5:717:5 | a [element 2] | -| array_flow.rb:718:5:718:5 | b [element] | array_flow.rb:722:10:722:10 | b [element] | -| array_flow.rb:718:9:718:9 | a [element 2] | array_flow.rb:718:20:718:20 | x | -| array_flow.rb:718:9:721:7 | call to map! [element] | array_flow.rb:718:5:718:5 | b [element] | -| array_flow.rb:718:20:718:20 | x | array_flow.rb:719:14:719:14 | x | -| array_flow.rb:720:9:720:19 | call to source | array_flow.rb:718:9:721:7 | call to map! [element] | -| array_flow.rb:722:10:722:10 | b [element] | array_flow.rb:722:10:722:13 | ...[...] | -| array_flow.rb:726:5:726:5 | a [element 2] | array_flow.rb:729:9:729:9 | a [element 2] | -| array_flow.rb:726:5:726:5 | a [element 2] | array_flow.rb:733:9:733:9 | a [element 2] | -| array_flow.rb:726:5:726:5 | a [element 2] | array_flow.rb:737:9:737:9 | a [element 2] | -| array_flow.rb:726:5:726:5 | a [element 2] | array_flow.rb:745:9:745:9 | a [element 2] | -| array_flow.rb:726:16:726:25 | call to source | array_flow.rb:726:5:726:5 | a [element 2] | -| array_flow.rb:729:5:729:5 | b | array_flow.rb:730:10:730:10 | b | -| array_flow.rb:729:9:729:9 | a [element 2] | array_flow.rb:729:9:729:13 | call to max | -| array_flow.rb:729:9:729:13 | call to max | array_flow.rb:729:5:729:5 | b | -| array_flow.rb:733:5:733:5 | c [element] | array_flow.rb:734:10:734:10 | c [element] | -| array_flow.rb:733:9:733:9 | a [element 2] | array_flow.rb:733:9:733:16 | call to max [element] | -| array_flow.rb:733:9:733:16 | call to max [element] | array_flow.rb:733:5:733:5 | c [element] | -| array_flow.rb:734:10:734:10 | c [element] | array_flow.rb:734:10:734:13 | ...[...] | -| array_flow.rb:737:5:737:5 | d | array_flow.rb:742:10:742:10 | d | -| array_flow.rb:737:9:737:9 | a [element 2] | array_flow.rb:737:9:741:7 | call to max | -| array_flow.rb:737:9:737:9 | a [element 2] | array_flow.rb:737:19:737:19 | x | -| array_flow.rb:737:9:737:9 | a [element 2] | array_flow.rb:737:22:737:22 | y | -| array_flow.rb:737:9:741:7 | call to max | array_flow.rb:737:5:737:5 | d | -| array_flow.rb:737:19:737:19 | x | array_flow.rb:738:14:738:14 | x | -| array_flow.rb:737:22:737:22 | y | array_flow.rb:739:14:739:14 | y | -| array_flow.rb:745:5:745:5 | e [element] | array_flow.rb:750:10:750:10 | e [element] | -| array_flow.rb:745:9:745:9 | a [element 2] | array_flow.rb:745:9:749:7 | call to max [element] | -| array_flow.rb:745:9:745:9 | a [element 2] | array_flow.rb:745:22:745:22 | x | -| array_flow.rb:745:9:745:9 | a [element 2] | array_flow.rb:745:25:745:25 | y | -| array_flow.rb:745:9:749:7 | call to max [element] | array_flow.rb:745:5:745:5 | e [element] | -| array_flow.rb:745:22:745:22 | x | array_flow.rb:746:14:746:14 | x | -| array_flow.rb:745:25:745:25 | y | array_flow.rb:747:14:747:14 | y | -| array_flow.rb:750:10:750:10 | e [element] | array_flow.rb:750:10:750:13 | ...[...] | -| array_flow.rb:754:5:754:5 | a [element 2] | array_flow.rb:757:9:757:9 | a [element 2] | -| array_flow.rb:754:5:754:5 | a [element 2] | array_flow.rb:764:9:764:9 | a [element 2] | -| array_flow.rb:754:16:754:25 | call to source | array_flow.rb:754:5:754:5 | a [element 2] | -| array_flow.rb:757:5:757:5 | b | array_flow.rb:761:10:761:10 | b | -| array_flow.rb:757:9:757:9 | a [element 2] | array_flow.rb:757:9:760:7 | call to max_by | -| array_flow.rb:757:9:757:9 | a [element 2] | array_flow.rb:757:22:757:22 | x | -| array_flow.rb:757:9:760:7 | call to max_by | array_flow.rb:757:5:757:5 | b | -| array_flow.rb:757:22:757:22 | x | array_flow.rb:758:14:758:14 | x | -| array_flow.rb:764:5:764:5 | c [element] | array_flow.rb:768:10:768:10 | c [element] | -| array_flow.rb:764:9:764:9 | a [element 2] | array_flow.rb:764:9:767:7 | call to max_by [element] | -| array_flow.rb:764:9:764:9 | a [element 2] | array_flow.rb:764:25:764:25 | x | -| array_flow.rb:764:9:767:7 | call to max_by [element] | array_flow.rb:764:5:764:5 | c [element] | -| array_flow.rb:764:25:764:25 | x | array_flow.rb:765:14:765:14 | x | -| array_flow.rb:768:10:768:10 | c [element] | array_flow.rb:768:10:768:13 | ...[...] | -| array_flow.rb:772:5:772:5 | a [element 2] | array_flow.rb:775:9:775:9 | a [element 2] | -| array_flow.rb:772:5:772:5 | a [element 2] | array_flow.rb:779:9:779:9 | a [element 2] | -| array_flow.rb:772:5:772:5 | a [element 2] | array_flow.rb:783:9:783:9 | a [element 2] | -| array_flow.rb:772:5:772:5 | a [element 2] | array_flow.rb:791:9:791:9 | a [element 2] | -| array_flow.rb:772:16:772:25 | call to source | array_flow.rb:772:5:772:5 | a [element 2] | -| array_flow.rb:775:5:775:5 | b | array_flow.rb:776:10:776:10 | b | -| array_flow.rb:775:9:775:9 | a [element 2] | array_flow.rb:775:9:775:13 | call to min | -| array_flow.rb:775:9:775:13 | call to min | array_flow.rb:775:5:775:5 | b | -| array_flow.rb:779:5:779:5 | c [element] | array_flow.rb:780:10:780:10 | c [element] | -| array_flow.rb:779:9:779:9 | a [element 2] | array_flow.rb:779:9:779:16 | call to min [element] | -| array_flow.rb:779:9:779:16 | call to min [element] | array_flow.rb:779:5:779:5 | c [element] | -| array_flow.rb:780:10:780:10 | c [element] | array_flow.rb:780:10:780:13 | ...[...] | -| array_flow.rb:783:5:783:5 | d | array_flow.rb:788:10:788:10 | d | -| array_flow.rb:783:9:783:9 | a [element 2] | array_flow.rb:783:9:787:7 | call to min | -| array_flow.rb:783:9:783:9 | a [element 2] | array_flow.rb:783:19:783:19 | x | -| array_flow.rb:783:9:783:9 | a [element 2] | array_flow.rb:783:22:783:22 | y | -| array_flow.rb:783:9:787:7 | call to min | array_flow.rb:783:5:783:5 | d | -| array_flow.rb:783:19:783:19 | x | array_flow.rb:784:14:784:14 | x | -| array_flow.rb:783:22:783:22 | y | array_flow.rb:785:14:785:14 | y | -| array_flow.rb:791:5:791:5 | e [element] | array_flow.rb:796:10:796:10 | e [element] | -| array_flow.rb:791:9:791:9 | a [element 2] | array_flow.rb:791:9:795:7 | call to min [element] | -| array_flow.rb:791:9:791:9 | a [element 2] | array_flow.rb:791:22:791:22 | x | -| array_flow.rb:791:9:791:9 | a [element 2] | array_flow.rb:791:25:791:25 | y | -| array_flow.rb:791:9:795:7 | call to min [element] | array_flow.rb:791:5:791:5 | e [element] | -| array_flow.rb:791:22:791:22 | x | array_flow.rb:792:14:792:14 | x | -| array_flow.rb:791:25:791:25 | y | array_flow.rb:793:14:793:14 | y | -| array_flow.rb:796:10:796:10 | e [element] | array_flow.rb:796:10:796:13 | ...[...] | -| array_flow.rb:800:5:800:5 | a [element 2] | array_flow.rb:803:9:803:9 | a [element 2] | -| array_flow.rb:800:5:800:5 | a [element 2] | array_flow.rb:810:9:810:9 | a [element 2] | -| array_flow.rb:800:16:800:25 | call to source | array_flow.rb:800:5:800:5 | a [element 2] | -| array_flow.rb:803:5:803:5 | b | array_flow.rb:807:10:807:10 | b | -| array_flow.rb:803:9:803:9 | a [element 2] | array_flow.rb:803:9:806:7 | call to min_by | -| array_flow.rb:803:9:803:9 | a [element 2] | array_flow.rb:803:22:803:22 | x | -| array_flow.rb:803:9:806:7 | call to min_by | array_flow.rb:803:5:803:5 | b | -| array_flow.rb:803:22:803:22 | x | array_flow.rb:804:14:804:14 | x | -| array_flow.rb:810:5:810:5 | c [element] | array_flow.rb:814:10:814:10 | c [element] | -| array_flow.rb:810:9:810:9 | a [element 2] | array_flow.rb:810:9:813:7 | call to min_by [element] | -| array_flow.rb:810:9:810:9 | a [element 2] | array_flow.rb:810:25:810:25 | x | -| array_flow.rb:810:9:813:7 | call to min_by [element] | array_flow.rb:810:5:810:5 | c [element] | -| array_flow.rb:810:25:810:25 | x | array_flow.rb:811:14:811:14 | x | -| array_flow.rb:814:10:814:10 | c [element] | array_flow.rb:814:10:814:13 | ...[...] | -| array_flow.rb:818:5:818:5 | a [element 2] | array_flow.rb:820:9:820:9 | a [element 2] | -| array_flow.rb:818:5:818:5 | a [element 2] | array_flow.rb:824:9:824:9 | a [element 2] | -| array_flow.rb:818:16:818:25 | call to source | array_flow.rb:818:5:818:5 | a [element 2] | -| array_flow.rb:820:5:820:5 | b [element] | array_flow.rb:821:10:821:10 | b [element] | -| array_flow.rb:820:5:820:5 | b [element] | array_flow.rb:822:10:822:10 | b [element] | -| array_flow.rb:820:9:820:9 | a [element 2] | array_flow.rb:820:9:820:16 | call to minmax [element] | -| array_flow.rb:820:9:820:16 | call to minmax [element] | array_flow.rb:820:5:820:5 | b [element] | -| array_flow.rb:821:10:821:10 | b [element] | array_flow.rb:821:10:821:13 | ...[...] | -| array_flow.rb:822:10:822:10 | b [element] | array_flow.rb:822:10:822:13 | ...[...] | -| array_flow.rb:824:5:824:5 | c [element] | array_flow.rb:829:10:829:10 | c [element] | -| array_flow.rb:824:5:824:5 | c [element] | array_flow.rb:830:10:830:10 | c [element] | -| array_flow.rb:824:9:824:9 | a [element 2] | array_flow.rb:824:9:828:7 | call to minmax [element] | -| array_flow.rb:824:9:824:9 | a [element 2] | array_flow.rb:824:22:824:22 | x | -| array_flow.rb:824:9:824:9 | a [element 2] | array_flow.rb:824:25:824:25 | y | -| array_flow.rb:824:9:828:7 | call to minmax [element] | array_flow.rb:824:5:824:5 | c [element] | -| array_flow.rb:824:22:824:22 | x | array_flow.rb:825:14:825:14 | x | -| array_flow.rb:824:25:824:25 | y | array_flow.rb:826:14:826:14 | y | -| array_flow.rb:829:10:829:10 | c [element] | array_flow.rb:829:10:829:13 | ...[...] | -| array_flow.rb:830:10:830:10 | c [element] | array_flow.rb:830:10:830:13 | ...[...] | -| array_flow.rb:834:5:834:5 | a [element 2] | array_flow.rb:835:9:835:9 | a [element 2] | -| array_flow.rb:834:16:834:25 | call to source | array_flow.rb:834:5:834:5 | a [element 2] | -| array_flow.rb:835:5:835:5 | b [element] | array_flow.rb:839:10:839:10 | b [element] | -| array_flow.rb:835:5:835:5 | b [element] | array_flow.rb:840:10:840:10 | b [element] | -| array_flow.rb:835:9:835:9 | a [element 2] | array_flow.rb:835:9:838:7 | call to minmax_by [element] | -| array_flow.rb:835:9:835:9 | a [element 2] | array_flow.rb:835:25:835:25 | x | -| array_flow.rb:835:9:838:7 | call to minmax_by [element] | array_flow.rb:835:5:835:5 | b [element] | -| array_flow.rb:835:25:835:25 | x | array_flow.rb:836:14:836:14 | x | -| array_flow.rb:839:10:839:10 | b [element] | array_flow.rb:839:10:839:13 | ...[...] | -| array_flow.rb:840:10:840:10 | b [element] | array_flow.rb:840:10:840:13 | ...[...] | -| array_flow.rb:844:5:844:5 | a [element 2] | array_flow.rb:845:5:845:5 | a [element 2] | -| array_flow.rb:844:16:844:25 | call to source | array_flow.rb:844:5:844:5 | a [element 2] | -| array_flow.rb:845:5:845:5 | a [element 2] | array_flow.rb:845:17:845:17 | x | -| array_flow.rb:845:17:845:17 | x | array_flow.rb:846:14:846:14 | x | -| array_flow.rb:853:5:853:5 | a [element 2] | array_flow.rb:854:5:854:5 | a [element 2] | -| array_flow.rb:853:16:853:25 | call to source | array_flow.rb:853:5:853:5 | a [element 2] | -| array_flow.rb:854:5:854:5 | a [element 2] | array_flow.rb:854:16:854:16 | x | -| array_flow.rb:854:16:854:16 | x | array_flow.rb:855:14:855:14 | x | -| array_flow.rb:866:5:866:5 | a [element 2] | array_flow.rb:867:9:867:9 | a [element 2] | -| array_flow.rb:866:16:866:25 | call to source | array_flow.rb:866:5:866:5 | a [element 2] | -| array_flow.rb:867:5:867:5 | b [element, element] | array_flow.rb:871:10:871:10 | b [element, element] | -| array_flow.rb:867:5:867:5 | b [element, element] | array_flow.rb:872:10:872:10 | b [element, element] | -| array_flow.rb:867:9:867:9 | a [element 2] | array_flow.rb:867:9:870:7 | call to partition [element, element] | -| array_flow.rb:867:9:867:9 | a [element 2] | array_flow.rb:867:25:867:25 | x | -| array_flow.rb:867:9:870:7 | call to partition [element, element] | array_flow.rb:867:5:867:5 | b [element, element] | -| array_flow.rb:867:25:867:25 | x | array_flow.rb:868:14:868:14 | x | -| array_flow.rb:871:10:871:10 | b [element, element] | array_flow.rb:871:10:871:13 | ...[...] [element] | -| array_flow.rb:871:10:871:13 | ...[...] [element] | array_flow.rb:871:10:871:16 | ...[...] | -| array_flow.rb:872:10:872:10 | b [element, element] | array_flow.rb:872:10:872:13 | ...[...] [element] | -| array_flow.rb:872:10:872:13 | ...[...] [element] | array_flow.rb:872:10:872:16 | ...[...] | -| array_flow.rb:876:5:876:5 | a [element 2] | array_flow.rb:878:9:878:9 | a [element 2] | -| array_flow.rb:876:5:876:5 | a [element 2] | array_flow.rb:886:9:886:9 | a [element 2] | -| array_flow.rb:876:5:876:5 | a [element 2] | array_flow.rb:893:9:893:9 | a [element 2] | -| array_flow.rb:876:16:876:25 | call to source | array_flow.rb:876:5:876:5 | a [element 2] | -| array_flow.rb:878:5:878:5 | b [element 2] | array_flow.rb:884:10:884:10 | b [element 2] | -| array_flow.rb:878:9:878:9 | a [element 2] | array_flow.rb:878:9:882:7 | call to permutation [element 2] | -| array_flow.rb:878:9:878:9 | a [element 2] | array_flow.rb:878:27:878:27 | x [element] | -| array_flow.rb:878:9:882:7 | call to permutation [element 2] | array_flow.rb:878:5:878:5 | b [element 2] | -| array_flow.rb:878:27:878:27 | x [element] | array_flow.rb:879:14:879:14 | x [element] | -| array_flow.rb:878:27:878:27 | x [element] | array_flow.rb:880:14:880:14 | x [element] | -| array_flow.rb:878:27:878:27 | x [element] | array_flow.rb:881:14:881:14 | x [element] | -| array_flow.rb:879:14:879:14 | x [element] | array_flow.rb:879:14:879:17 | ...[...] | -| array_flow.rb:880:14:880:14 | x [element] | array_flow.rb:880:14:880:17 | ...[...] | -| array_flow.rb:881:14:881:14 | x [element] | array_flow.rb:881:14:881:17 | ...[...] | -| array_flow.rb:884:10:884:10 | b [element 2] | array_flow.rb:884:10:884:13 | ...[...] | -| array_flow.rb:886:5:886:5 | c [element 2] | array_flow.rb:891:10:891:10 | c [element 2] | -| array_flow.rb:886:5:886:5 | c [element 2] | array_flow.rb:898:10:898:10 | c [element 2] | -| array_flow.rb:886:9:886:9 | a [element 2] | array_flow.rb:886:9:889:7 | call to permutation [element 2] | -| array_flow.rb:886:9:886:9 | a [element 2] | array_flow.rb:886:30:886:30 | x [element] | -| array_flow.rb:886:9:889:7 | call to permutation [element 2] | array_flow.rb:886:5:886:5 | c [element 2] | -| array_flow.rb:886:30:886:30 | x [element] | array_flow.rb:887:14:887:14 | x [element] | -| array_flow.rb:886:30:886:30 | x [element] | array_flow.rb:888:14:888:14 | x [element] | -| array_flow.rb:887:14:887:14 | x [element] | array_flow.rb:887:14:887:17 | ...[...] | -| array_flow.rb:888:14:888:14 | x [element] | array_flow.rb:888:14:888:17 | ...[...] | -| array_flow.rb:891:10:891:10 | c [element 2] | array_flow.rb:891:10:891:13 | ...[...] | -| array_flow.rb:893:9:893:9 | a [element 2] | array_flow.rb:893:30:893:30 | x [element] | -| array_flow.rb:893:30:893:30 | x [element] | array_flow.rb:894:14:894:14 | x [element] | -| array_flow.rb:893:30:893:30 | x [element] | array_flow.rb:895:14:895:14 | x [element] | -| array_flow.rb:894:14:894:14 | x [element] | array_flow.rb:894:14:894:17 | ...[...] | -| array_flow.rb:895:14:895:14 | x [element] | array_flow.rb:895:14:895:17 | ...[...] | -| array_flow.rb:898:10:898:10 | c [element 2] | array_flow.rb:898:10:898:13 | ...[...] | -| array_flow.rb:905:5:905:5 | a [element 1] | array_flow.rb:906:9:906:9 | a [element 1] | -| array_flow.rb:905:5:905:5 | a [element 1] | array_flow.rb:909:10:909:10 | a [element 1] | -| array_flow.rb:905:5:905:5 | a [element 3] | array_flow.rb:906:9:906:9 | a [element 3] | -| array_flow.rb:905:5:905:5 | a [element 3] | array_flow.rb:911:10:911:10 | a [element 3] | -| array_flow.rb:905:13:905:24 | call to source | array_flow.rb:905:5:905:5 | a [element 1] | -| array_flow.rb:905:30:905:41 | call to source | array_flow.rb:905:5:905:5 | a [element 3] | -| array_flow.rb:906:5:906:5 | b | array_flow.rb:907:10:907:10 | b | -| array_flow.rb:906:9:906:9 | a [element 1] | array_flow.rb:906:9:906:13 | call to pop | -| array_flow.rb:906:9:906:9 | a [element 3] | array_flow.rb:906:9:906:13 | call to pop | -| array_flow.rb:906:9:906:13 | call to pop | array_flow.rb:906:5:906:5 | b | -| array_flow.rb:909:10:909:10 | a [element 1] | array_flow.rb:909:10:909:13 | ...[...] | -| array_flow.rb:911:10:911:10 | a [element 3] | array_flow.rb:911:10:911:13 | ...[...] | -| array_flow.rb:913:5:913:5 | a [element 1] | array_flow.rb:914:9:914:9 | a [element 1] | -| array_flow.rb:913:5:913:5 | a [element 1] | array_flow.rb:918:10:918:10 | a [element 1] | -| array_flow.rb:913:5:913:5 | a [element 3] | array_flow.rb:914:9:914:9 | a [element 3] | -| array_flow.rb:913:5:913:5 | a [element 3] | array_flow.rb:920:10:920:10 | a [element 3] | -| array_flow.rb:913:13:913:24 | call to source | array_flow.rb:913:5:913:5 | a [element 1] | -| array_flow.rb:913:30:913:41 | call to source | array_flow.rb:913:5:913:5 | a [element 3] | -| array_flow.rb:914:5:914:5 | b [element] | array_flow.rb:915:10:915:10 | b [element] | -| array_flow.rb:914:5:914:5 | b [element] | array_flow.rb:916:10:916:10 | b [element] | -| array_flow.rb:914:9:914:9 | a [element 1] | array_flow.rb:914:9:914:16 | call to pop [element] | -| array_flow.rb:914:9:914:9 | a [element 3] | array_flow.rb:914:9:914:16 | call to pop [element] | -| array_flow.rb:914:9:914:16 | call to pop [element] | array_flow.rb:914:5:914:5 | b [element] | -| array_flow.rb:915:10:915:10 | b [element] | array_flow.rb:915:10:915:13 | ...[...] | -| array_flow.rb:916:10:916:10 | b [element] | array_flow.rb:916:10:916:13 | ...[...] | -| array_flow.rb:918:10:918:10 | a [element 1] | array_flow.rb:918:10:918:13 | ...[...] | -| array_flow.rb:920:10:920:10 | a [element 3] | array_flow.rb:920:10:920:13 | ...[...] | -| array_flow.rb:924:5:924:5 | a [element 2] | array_flow.rb:925:5:925:5 | a [element 2] | -| array_flow.rb:924:16:924:27 | call to source | array_flow.rb:924:5:924:5 | a [element 2] | -| array_flow.rb:925:5:925:5 | [post] a [element 2] | array_flow.rb:928:10:928:10 | a [element 2] | -| array_flow.rb:925:5:925:5 | [post] a [element 5] | array_flow.rb:931:10:931:10 | a [element 5] | -| array_flow.rb:925:5:925:5 | a [element 2] | array_flow.rb:925:5:925:5 | [post] a [element 5] | -| array_flow.rb:925:21:925:32 | call to source | array_flow.rb:925:5:925:5 | [post] a [element 2] | -| array_flow.rb:928:10:928:10 | a [element 2] | array_flow.rb:928:10:928:13 | ...[...] | -| array_flow.rb:931:10:931:10 | a [element 5] | array_flow.rb:931:10:931:13 | ...[...] | -| array_flow.rb:935:5:935:5 | a [element 2] | array_flow.rb:938:9:938:9 | a [element 2] | -| array_flow.rb:935:16:935:27 | call to source | array_flow.rb:935:5:935:5 | a [element 2] | -| array_flow.rb:936:5:936:5 | b [element 1] | array_flow.rb:938:19:938:19 | b [element 1] | -| array_flow.rb:936:13:936:24 | call to source | array_flow.rb:936:5:936:5 | b [element 1] | -| array_flow.rb:937:5:937:5 | c [element 0] | array_flow.rb:938:22:938:22 | c [element 0] | -| array_flow.rb:937:10:937:21 | call to source | array_flow.rb:937:5:937:5 | c [element 0] | -| array_flow.rb:938:5:938:5 | d [element, element] | array_flow.rb:939:10:939:10 | d [element, element] | -| array_flow.rb:938:5:938:5 | d [element, element] | array_flow.rb:940:10:940:10 | d [element, element] | -| array_flow.rb:938:9:938:9 | a [element 2] | array_flow.rb:938:9:938:22 | call to product [element, element] | -| array_flow.rb:938:9:938:22 | call to product [element, element] | array_flow.rb:938:5:938:5 | d [element, element] | -| array_flow.rb:938:19:938:19 | b [element 1] | array_flow.rb:938:9:938:22 | call to product [element, element] | -| array_flow.rb:938:22:938:22 | c [element 0] | array_flow.rb:938:9:938:22 | call to product [element, element] | -| array_flow.rb:939:10:939:10 | d [element, element] | array_flow.rb:939:10:939:13 | ...[...] [element] | -| array_flow.rb:939:10:939:13 | ...[...] [element] | array_flow.rb:939:10:939:16 | ...[...] | -| array_flow.rb:940:10:940:10 | d [element, element] | array_flow.rb:940:10:940:13 | ...[...] [element] | -| array_flow.rb:940:10:940:13 | ...[...] [element] | array_flow.rb:940:10:940:16 | ...[...] | -| array_flow.rb:944:5:944:5 | a [element 0] | array_flow.rb:945:9:945:9 | a [element 0] | -| array_flow.rb:944:5:944:5 | a [element 0] | array_flow.rb:946:10:946:10 | a [element 0] | -| array_flow.rb:944:10:944:21 | call to source | array_flow.rb:944:5:944:5 | a [element 0] | -| array_flow.rb:945:5:945:5 | b [element 0] | array_flow.rb:948:10:948:10 | b [element 0] | -| array_flow.rb:945:5:945:5 | b [element] | array_flow.rb:948:10:948:10 | b [element] | -| array_flow.rb:945:5:945:5 | b [element] | array_flow.rb:949:10:949:10 | b [element] | -| array_flow.rb:945:9:945:9 | [post] a [element] | array_flow.rb:946:10:946:10 | a [element] | -| array_flow.rb:945:9:945:9 | [post] a [element] | array_flow.rb:947:10:947:10 | a [element] | -| array_flow.rb:945:9:945:9 | a [element 0] | array_flow.rb:945:9:945:44 | call to append [element 0] | -| array_flow.rb:945:9:945:44 | call to append [element 0] | array_flow.rb:945:5:945:5 | b [element 0] | -| array_flow.rb:945:9:945:44 | call to append [element] | array_flow.rb:945:5:945:5 | b [element] | -| array_flow.rb:945:18:945:29 | call to source | array_flow.rb:945:9:945:9 | [post] a [element] | -| array_flow.rb:945:18:945:29 | call to source | array_flow.rb:945:9:945:44 | call to append [element] | -| array_flow.rb:945:32:945:43 | call to source | array_flow.rb:945:9:945:9 | [post] a [element] | -| array_flow.rb:945:32:945:43 | call to source | array_flow.rb:945:9:945:44 | call to append [element] | -| array_flow.rb:946:10:946:10 | a [element 0] | array_flow.rb:946:10:946:13 | ...[...] | -| array_flow.rb:946:10:946:10 | a [element] | array_flow.rb:946:10:946:13 | ...[...] | -| array_flow.rb:947:10:947:10 | a [element] | array_flow.rb:947:10:947:13 | ...[...] | -| array_flow.rb:948:10:948:10 | b [element 0] | array_flow.rb:948:10:948:13 | ...[...] | -| array_flow.rb:948:10:948:10 | b [element] | array_flow.rb:948:10:948:13 | ...[...] | -| array_flow.rb:949:10:949:10 | b [element] | array_flow.rb:949:10:949:13 | ...[...] | -| array_flow.rb:955:5:955:5 | c [element 0] | array_flow.rb:956:16:956:16 | c [element 0] | -| array_flow.rb:955:10:955:19 | call to source | array_flow.rb:955:5:955:5 | c [element 0] | -| array_flow.rb:956:5:956:5 | d [element 2, element 0] | array_flow.rb:957:10:957:10 | d [element 2, element 0] | -| array_flow.rb:956:5:956:5 | d [element 2, element 0] | array_flow.rb:958:10:958:10 | d [element 2, element 0] | -| array_flow.rb:956:16:956:16 | c [element 0] | array_flow.rb:956:5:956:5 | d [element 2, element 0] | -| array_flow.rb:957:10:957:10 | d [element 2, element 0] | array_flow.rb:957:10:957:22 | call to rassoc [element 0] | -| array_flow.rb:957:10:957:22 | call to rassoc [element 0] | array_flow.rb:957:10:957:25 | ...[...] | -| array_flow.rb:958:10:958:10 | d [element 2, element 0] | array_flow.rb:958:10:958:22 | call to rassoc [element 0] | -| array_flow.rb:958:10:958:22 | call to rassoc [element 0] | array_flow.rb:958:10:958:25 | ...[...] | -| array_flow.rb:962:5:962:5 | a [element 0] | array_flow.rb:963:9:963:9 | a [element 0] | -| array_flow.rb:962:5:962:5 | a [element 0] | array_flow.rb:968:9:968:9 | a [element 0] | -| array_flow.rb:962:5:962:5 | a [element 2] | array_flow.rb:963:9:963:9 | a [element 2] | -| array_flow.rb:962:5:962:5 | a [element 2] | array_flow.rb:968:9:968:9 | a [element 2] | -| array_flow.rb:962:10:962:21 | call to source | array_flow.rb:962:5:962:5 | a [element 0] | -| array_flow.rb:962:27:962:38 | call to source | array_flow.rb:962:5:962:5 | a [element 2] | -| array_flow.rb:963:9:963:9 | a [element 0] | array_flow.rb:963:22:963:22 | x | -| array_flow.rb:963:9:963:9 | a [element 2] | array_flow.rb:963:25:963:25 | y | -| array_flow.rb:963:22:963:22 | x | array_flow.rb:964:14:964:14 | x | -| array_flow.rb:963:25:963:25 | y | array_flow.rb:965:14:965:14 | y | -| array_flow.rb:968:9:968:9 | a [element 0] | array_flow.rb:968:28:968:28 | y | -| array_flow.rb:968:9:968:9 | a [element 2] | array_flow.rb:968:28:968:28 | y | -| array_flow.rb:968:28:968:28 | y | array_flow.rb:970:14:970:14 | y | -| array_flow.rb:976:5:976:5 | a [element 2] | array_flow.rb:977:9:977:9 | a [element 2] | -| array_flow.rb:976:16:976:25 | call to source | array_flow.rb:976:5:976:5 | a [element 2] | -| array_flow.rb:977:5:977:5 | b [element] | array_flow.rb:981:10:981:10 | b [element] | -| array_flow.rb:977:9:977:9 | a [element 2] | array_flow.rb:977:9:980:7 | call to reject [element] | -| array_flow.rb:977:9:977:9 | a [element 2] | array_flow.rb:977:22:977:22 | x | -| array_flow.rb:977:9:980:7 | call to reject [element] | array_flow.rb:977:5:977:5 | b [element] | -| array_flow.rb:977:22:977:22 | x | array_flow.rb:978:14:978:14 | x | -| array_flow.rb:981:10:981:10 | b [element] | array_flow.rb:981:10:981:13 | ...[...] | -| array_flow.rb:985:5:985:5 | a [element 2] | array_flow.rb:986:9:986:9 | a [element 2] | -| array_flow.rb:985:16:985:25 | call to source | array_flow.rb:985:5:985:5 | a [element 2] | -| array_flow.rb:986:5:986:5 | b [element] | array_flow.rb:991:10:991:10 | b [element] | -| array_flow.rb:986:9:986:9 | [post] a [element] | array_flow.rb:990:10:990:10 | a [element] | -| array_flow.rb:986:9:986:9 | a [element 2] | array_flow.rb:986:9:986:9 | [post] a [element] | -| array_flow.rb:986:9:986:9 | a [element 2] | array_flow.rb:986:9:989:7 | call to reject! [element] | -| array_flow.rb:986:9:986:9 | a [element 2] | array_flow.rb:986:23:986:23 | x | -| array_flow.rb:986:9:989:7 | call to reject! [element] | array_flow.rb:986:5:986:5 | b [element] | -| array_flow.rb:986:23:986:23 | x | array_flow.rb:987:14:987:14 | x | -| array_flow.rb:990:10:990:10 | a [element] | array_flow.rb:990:10:990:13 | ...[...] | -| array_flow.rb:991:10:991:10 | b [element] | array_flow.rb:991:10:991:13 | ...[...] | -| array_flow.rb:995:5:995:5 | a [element 2] | array_flow.rb:996:9:996:9 | a [element 2] | -| array_flow.rb:995:16:995:25 | call to source | array_flow.rb:995:5:995:5 | a [element 2] | -| array_flow.rb:996:5:996:5 | b [element 2] | array_flow.rb:1001:10:1001:10 | b [element 2] | -| array_flow.rb:996:9:996:9 | a [element 2] | array_flow.rb:996:9:999:7 | call to repeated_combination [element 2] | -| array_flow.rb:996:9:996:9 | a [element 2] | array_flow.rb:996:39:996:39 | x [element] | -| array_flow.rb:996:9:999:7 | call to repeated_combination [element 2] | array_flow.rb:996:5:996:5 | b [element 2] | -| array_flow.rb:996:39:996:39 | x [element] | array_flow.rb:997:14:997:14 | x [element] | -| array_flow.rb:996:39:996:39 | x [element] | array_flow.rb:998:14:998:14 | x [element] | -| array_flow.rb:997:14:997:14 | x [element] | array_flow.rb:997:14:997:17 | ...[...] | -| array_flow.rb:998:14:998:14 | x [element] | array_flow.rb:998:14:998:17 | ...[...] | -| array_flow.rb:1001:10:1001:10 | b [element 2] | array_flow.rb:1001:10:1001:13 | ...[...] | -| array_flow.rb:1005:5:1005:5 | a [element 2] | array_flow.rb:1006:9:1006:9 | a [element 2] | -| array_flow.rb:1005:16:1005:25 | call to source | array_flow.rb:1005:5:1005:5 | a [element 2] | -| array_flow.rb:1006:5:1006:5 | b [element 2] | array_flow.rb:1011:10:1011:10 | b [element 2] | -| array_flow.rb:1006:9:1006:9 | a [element 2] | array_flow.rb:1006:9:1009:7 | call to repeated_permutation [element 2] | -| array_flow.rb:1006:9:1006:9 | a [element 2] | array_flow.rb:1006:39:1006:39 | x [element] | -| array_flow.rb:1006:9:1009:7 | call to repeated_permutation [element 2] | array_flow.rb:1006:5:1006:5 | b [element 2] | -| array_flow.rb:1006:39:1006:39 | x [element] | array_flow.rb:1007:14:1007:14 | x [element] | -| array_flow.rb:1006:39:1006:39 | x [element] | array_flow.rb:1008:14:1008:14 | x [element] | -| array_flow.rb:1007:14:1007:14 | x [element] | array_flow.rb:1007:14:1007:17 | ...[...] | -| array_flow.rb:1008:14:1008:14 | x [element] | array_flow.rb:1008:14:1008:17 | ...[...] | -| array_flow.rb:1011:10:1011:10 | b [element 2] | array_flow.rb:1011:10:1011:13 | ...[...] | -| array_flow.rb:1017:5:1017:5 | b [element 0] | array_flow.rb:1019:10:1019:10 | b [element 0] | -| array_flow.rb:1017:9:1017:9 | [post] a [element 0] | array_flow.rb:1018:10:1018:10 | a [element 0] | -| array_flow.rb:1017:9:1017:33 | call to replace [element 0] | array_flow.rb:1017:5:1017:5 | b [element 0] | -| array_flow.rb:1017:20:1017:31 | call to source | array_flow.rb:1017:9:1017:9 | [post] a [element 0] | -| array_flow.rb:1017:20:1017:31 | call to source | array_flow.rb:1017:9:1017:33 | call to replace [element 0] | -| array_flow.rb:1018:10:1018:10 | a [element 0] | array_flow.rb:1018:10:1018:13 | ...[...] | -| array_flow.rb:1019:10:1019:10 | b [element 0] | array_flow.rb:1019:10:1019:13 | ...[...] | -| array_flow.rb:1023:5:1023:5 | a [element 2] | array_flow.rb:1024:9:1024:9 | a [element 2] | -| array_flow.rb:1023:5:1023:5 | a [element 2] | array_flow.rb:1029:10:1029:10 | a [element 2] | -| array_flow.rb:1023:5:1023:5 | a [element 3] | array_flow.rb:1024:9:1024:9 | a [element 3] | -| array_flow.rb:1023:5:1023:5 | a [element 3] | array_flow.rb:1030:10:1030:10 | a [element 3] | -| array_flow.rb:1023:16:1023:28 | call to source | array_flow.rb:1023:5:1023:5 | a [element 2] | -| array_flow.rb:1023:31:1023:43 | call to source | array_flow.rb:1023:5:1023:5 | a [element 3] | -| array_flow.rb:1024:5:1024:5 | b [element] | array_flow.rb:1025:10:1025:10 | b [element] | -| array_flow.rb:1024:5:1024:5 | b [element] | array_flow.rb:1026:10:1026:10 | b [element] | -| array_flow.rb:1024:5:1024:5 | b [element] | array_flow.rb:1027:10:1027:10 | b [element] | -| array_flow.rb:1024:9:1024:9 | a [element 2] | array_flow.rb:1024:9:1024:17 | call to reverse [element] | -| array_flow.rb:1024:9:1024:9 | a [element 3] | array_flow.rb:1024:9:1024:17 | call to reverse [element] | -| array_flow.rb:1024:9:1024:17 | call to reverse [element] | array_flow.rb:1024:5:1024:5 | b [element] | -| array_flow.rb:1025:10:1025:10 | b [element] | array_flow.rb:1025:10:1025:13 | ...[...] | -| array_flow.rb:1026:10:1026:10 | b [element] | array_flow.rb:1026:10:1026:13 | ...[...] | -| array_flow.rb:1027:10:1027:10 | b [element] | array_flow.rb:1027:10:1027:13 | ...[...] | -| array_flow.rb:1029:10:1029:10 | a [element 2] | array_flow.rb:1029:10:1029:13 | ...[...] | -| array_flow.rb:1030:10:1030:10 | a [element 3] | array_flow.rb:1030:10:1030:13 | ...[...] | -| array_flow.rb:1034:5:1034:5 | a [element 2] | array_flow.rb:1035:9:1035:9 | a [element 2] | -| array_flow.rb:1034:5:1034:5 | a [element 2] | array_flow.rb:1040:10:1040:10 | a [element 2] | -| array_flow.rb:1034:5:1034:5 | a [element 3] | array_flow.rb:1035:9:1035:9 | a [element 3] | -| array_flow.rb:1034:5:1034:5 | a [element 3] | array_flow.rb:1041:10:1041:10 | a [element 3] | -| array_flow.rb:1034:16:1034:28 | call to source | array_flow.rb:1034:5:1034:5 | a [element 2] | -| array_flow.rb:1034:31:1034:43 | call to source | array_flow.rb:1034:5:1034:5 | a [element 3] | -| array_flow.rb:1035:5:1035:5 | b [element] | array_flow.rb:1036:10:1036:10 | b [element] | -| array_flow.rb:1035:5:1035:5 | b [element] | array_flow.rb:1037:10:1037:10 | b [element] | -| array_flow.rb:1035:5:1035:5 | b [element] | array_flow.rb:1038:10:1038:10 | b [element] | -| array_flow.rb:1035:9:1035:9 | [post] a [element] | array_flow.rb:1039:10:1039:10 | a [element] | -| array_flow.rb:1035:9:1035:9 | [post] a [element] | array_flow.rb:1040:10:1040:10 | a [element] | -| array_flow.rb:1035:9:1035:9 | [post] a [element] | array_flow.rb:1041:10:1041:10 | a [element] | -| array_flow.rb:1035:9:1035:9 | a [element 2] | array_flow.rb:1035:9:1035:9 | [post] a [element] | -| array_flow.rb:1035:9:1035:9 | a [element 2] | array_flow.rb:1035:9:1035:18 | call to reverse! [element] | -| array_flow.rb:1035:9:1035:9 | a [element 3] | array_flow.rb:1035:9:1035:9 | [post] a [element] | -| array_flow.rb:1035:9:1035:9 | a [element 3] | array_flow.rb:1035:9:1035:18 | call to reverse! [element] | -| array_flow.rb:1035:9:1035:18 | call to reverse! [element] | array_flow.rb:1035:5:1035:5 | b [element] | -| array_flow.rb:1036:10:1036:10 | b [element] | array_flow.rb:1036:10:1036:13 | ...[...] | -| array_flow.rb:1037:10:1037:10 | b [element] | array_flow.rb:1037:10:1037:13 | ...[...] | -| array_flow.rb:1038:10:1038:10 | b [element] | array_flow.rb:1038:10:1038:13 | ...[...] | -| array_flow.rb:1039:10:1039:10 | a [element] | array_flow.rb:1039:10:1039:13 | ...[...] | -| array_flow.rb:1040:10:1040:10 | a [element 2] | array_flow.rb:1040:10:1040:13 | ...[...] | -| array_flow.rb:1040:10:1040:10 | a [element] | array_flow.rb:1040:10:1040:13 | ...[...] | -| array_flow.rb:1041:10:1041:10 | a [element 3] | array_flow.rb:1041:10:1041:13 | ...[...] | -| array_flow.rb:1041:10:1041:10 | a [element] | array_flow.rb:1041:10:1041:13 | ...[...] | -| array_flow.rb:1045:5:1045:5 | a [element 2] | array_flow.rb:1046:9:1046:9 | a [element 2] | -| array_flow.rb:1045:16:1045:26 | call to source | array_flow.rb:1045:5:1045:5 | a [element 2] | -| array_flow.rb:1046:5:1046:5 | b [element 2] | array_flow.rb:1049:10:1049:10 | b [element 2] | -| array_flow.rb:1046:9:1046:9 | a [element 2] | array_flow.rb:1046:9:1048:7 | call to reverse_each [element 2] | -| array_flow.rb:1046:9:1046:9 | a [element 2] | array_flow.rb:1046:28:1046:28 | x | -| array_flow.rb:1046:9:1048:7 | call to reverse_each [element 2] | array_flow.rb:1046:5:1046:5 | b [element 2] | -| array_flow.rb:1046:28:1046:28 | x | array_flow.rb:1047:14:1047:14 | x | -| array_flow.rb:1049:10:1049:10 | b [element 2] | array_flow.rb:1049:10:1049:13 | ...[...] | -| array_flow.rb:1053:5:1053:5 | a [element 2] | array_flow.rb:1054:5:1054:5 | a [element 2] | -| array_flow.rb:1053:16:1053:26 | call to source | array_flow.rb:1053:5:1053:5 | a [element 2] | -| array_flow.rb:1054:5:1054:5 | a [element 2] | array_flow.rb:1054:18:1054:18 | x | -| array_flow.rb:1054:18:1054:18 | x | array_flow.rb:1055:14:1055:14 | x | -| array_flow.rb:1063:5:1063:5 | a [element 0] | array_flow.rb:1065:9:1065:9 | a [element 0] | -| array_flow.rb:1063:5:1063:5 | a [element 0] | array_flow.rb:1071:9:1071:9 | a [element 0] | -| array_flow.rb:1063:5:1063:5 | a [element 0] | array_flow.rb:1077:9:1077:9 | a [element 0] | -| array_flow.rb:1063:5:1063:5 | a [element 0] | array_flow.rb:1083:9:1083:9 | a [element 0] | -| array_flow.rb:1063:5:1063:5 | a [element 2] | array_flow.rb:1065:9:1065:9 | a [element 2] | -| array_flow.rb:1063:5:1063:5 | a [element 2] | array_flow.rb:1071:9:1071:9 | a [element 2] | -| array_flow.rb:1063:5:1063:5 | a [element 2] | array_flow.rb:1077:9:1077:9 | a [element 2] | -| array_flow.rb:1063:5:1063:5 | a [element 2] | array_flow.rb:1083:9:1083:9 | a [element 2] | -| array_flow.rb:1063:5:1063:5 | a [element 3] | array_flow.rb:1065:9:1065:9 | a [element 3] | -| array_flow.rb:1063:5:1063:5 | a [element 3] | array_flow.rb:1071:9:1071:9 | a [element 3] | -| array_flow.rb:1063:5:1063:5 | a [element 3] | array_flow.rb:1077:9:1077:9 | a [element 3] | -| array_flow.rb:1063:5:1063:5 | a [element 3] | array_flow.rb:1083:9:1083:9 | a [element 3] | -| array_flow.rb:1063:10:1063:22 | call to source | array_flow.rb:1063:5:1063:5 | a [element 0] | -| array_flow.rb:1063:28:1063:40 | call to source | array_flow.rb:1063:5:1063:5 | a [element 2] | -| array_flow.rb:1063:43:1063:55 | call to source | array_flow.rb:1063:5:1063:5 | a [element 3] | -| array_flow.rb:1065:5:1065:5 | b [element 1] | array_flow.rb:1067:10:1067:10 | b [element 1] | -| array_flow.rb:1065:5:1065:5 | b [element 2] | array_flow.rb:1068:10:1068:10 | b [element 2] | -| array_flow.rb:1065:5:1065:5 | b [element] | array_flow.rb:1066:10:1066:10 | b [element] | -| array_flow.rb:1065:5:1065:5 | b [element] | array_flow.rb:1067:10:1067:10 | b [element] | -| array_flow.rb:1065:5:1065:5 | b [element] | array_flow.rb:1068:10:1068:10 | b [element] | -| array_flow.rb:1065:5:1065:5 | b [element] | array_flow.rb:1069:10:1069:10 | b [element] | -| array_flow.rb:1065:9:1065:9 | a [element 0] | array_flow.rb:1065:9:1065:16 | call to rotate [element] | -| array_flow.rb:1065:9:1065:9 | a [element 2] | array_flow.rb:1065:9:1065:16 | call to rotate [element 1] | -| array_flow.rb:1065:9:1065:9 | a [element 3] | array_flow.rb:1065:9:1065:16 | call to rotate [element 2] | -| array_flow.rb:1065:9:1065:16 | call to rotate [element 1] | array_flow.rb:1065:5:1065:5 | b [element 1] | -| array_flow.rb:1065:9:1065:16 | call to rotate [element 2] | array_flow.rb:1065:5:1065:5 | b [element 2] | -| array_flow.rb:1065:9:1065:16 | call to rotate [element] | array_flow.rb:1065:5:1065:5 | b [element] | -| array_flow.rb:1066:10:1066:10 | b [element] | array_flow.rb:1066:10:1066:13 | ...[...] | -| array_flow.rb:1067:10:1067:10 | b [element 1] | array_flow.rb:1067:10:1067:13 | ...[...] | -| array_flow.rb:1067:10:1067:10 | b [element] | array_flow.rb:1067:10:1067:13 | ...[...] | -| array_flow.rb:1068:10:1068:10 | b [element 2] | array_flow.rb:1068:10:1068:13 | ...[...] | -| array_flow.rb:1068:10:1068:10 | b [element] | array_flow.rb:1068:10:1068:13 | ...[...] | -| array_flow.rb:1069:10:1069:10 | b [element] | array_flow.rb:1069:10:1069:13 | ...[...] | -| array_flow.rb:1071:5:1071:5 | b [element 0] | array_flow.rb:1072:10:1072:10 | b [element 0] | -| array_flow.rb:1071:5:1071:5 | b [element 1] | array_flow.rb:1073:10:1073:10 | b [element 1] | -| array_flow.rb:1071:5:1071:5 | b [element] | array_flow.rb:1072:10:1072:10 | b [element] | -| array_flow.rb:1071:5:1071:5 | b [element] | array_flow.rb:1073:10:1073:10 | b [element] | -| array_flow.rb:1071:5:1071:5 | b [element] | array_flow.rb:1074:10:1074:10 | b [element] | -| array_flow.rb:1071:5:1071:5 | b [element] | array_flow.rb:1075:10:1075:10 | b [element] | -| array_flow.rb:1071:9:1071:9 | a [element 0] | array_flow.rb:1071:9:1071:19 | call to rotate [element] | -| array_flow.rb:1071:9:1071:9 | a [element 2] | array_flow.rb:1071:9:1071:19 | call to rotate [element 0] | -| array_flow.rb:1071:9:1071:9 | a [element 3] | array_flow.rb:1071:9:1071:19 | call to rotate [element 1] | -| array_flow.rb:1071:9:1071:19 | call to rotate [element 0] | array_flow.rb:1071:5:1071:5 | b [element 0] | -| array_flow.rb:1071:9:1071:19 | call to rotate [element 1] | array_flow.rb:1071:5:1071:5 | b [element 1] | -| array_flow.rb:1071:9:1071:19 | call to rotate [element] | array_flow.rb:1071:5:1071:5 | b [element] | -| array_flow.rb:1072:10:1072:10 | b [element 0] | array_flow.rb:1072:10:1072:13 | ...[...] | -| array_flow.rb:1072:10:1072:10 | b [element] | array_flow.rb:1072:10:1072:13 | ...[...] | -| array_flow.rb:1073:10:1073:10 | b [element 1] | array_flow.rb:1073:10:1073:13 | ...[...] | -| array_flow.rb:1073:10:1073:10 | b [element] | array_flow.rb:1073:10:1073:13 | ...[...] | -| array_flow.rb:1074:10:1074:10 | b [element] | array_flow.rb:1074:10:1074:13 | ...[...] | -| array_flow.rb:1075:10:1075:10 | b [element] | array_flow.rb:1075:10:1075:13 | ...[...] | -| array_flow.rb:1077:5:1077:5 | b [element 0] | array_flow.rb:1078:10:1078:10 | b [element 0] | -| array_flow.rb:1077:5:1077:5 | b [element 2] | array_flow.rb:1080:10:1080:10 | b [element 2] | -| array_flow.rb:1077:5:1077:5 | b [element 3] | array_flow.rb:1081:10:1081:10 | b [element 3] | -| array_flow.rb:1077:9:1077:9 | a [element 0] | array_flow.rb:1077:9:1077:19 | call to rotate [element 0] | -| array_flow.rb:1077:9:1077:9 | a [element 2] | array_flow.rb:1077:9:1077:19 | call to rotate [element 2] | -| array_flow.rb:1077:9:1077:9 | a [element 3] | array_flow.rb:1077:9:1077:19 | call to rotate [element 3] | -| array_flow.rb:1077:9:1077:19 | call to rotate [element 0] | array_flow.rb:1077:5:1077:5 | b [element 0] | -| array_flow.rb:1077:9:1077:19 | call to rotate [element 2] | array_flow.rb:1077:5:1077:5 | b [element 2] | -| array_flow.rb:1077:9:1077:19 | call to rotate [element 3] | array_flow.rb:1077:5:1077:5 | b [element 3] | -| array_flow.rb:1078:10:1078:10 | b [element 0] | array_flow.rb:1078:10:1078:13 | ...[...] | -| array_flow.rb:1080:10:1080:10 | b [element 2] | array_flow.rb:1080:10:1080:13 | ...[...] | -| array_flow.rb:1081:10:1081:10 | b [element 3] | array_flow.rb:1081:10:1081:13 | ...[...] | -| array_flow.rb:1083:5:1083:5 | b [element] | array_flow.rb:1084:10:1084:10 | b [element] | -| array_flow.rb:1083:5:1083:5 | b [element] | array_flow.rb:1085:10:1085:10 | b [element] | -| array_flow.rb:1083:5:1083:5 | b [element] | array_flow.rb:1086:10:1086:10 | b [element] | -| array_flow.rb:1083:5:1083:5 | b [element] | array_flow.rb:1087:10:1087:10 | b [element] | -| array_flow.rb:1083:9:1083:9 | a [element 0] | array_flow.rb:1083:9:1083:19 | call to rotate [element] | -| array_flow.rb:1083:9:1083:9 | a [element 2] | array_flow.rb:1083:9:1083:19 | call to rotate [element] | -| array_flow.rb:1083:9:1083:9 | a [element 3] | array_flow.rb:1083:9:1083:19 | call to rotate [element] | -| array_flow.rb:1083:9:1083:19 | call to rotate [element] | array_flow.rb:1083:5:1083:5 | b [element] | -| array_flow.rb:1084:10:1084:10 | b [element] | array_flow.rb:1084:10:1084:13 | ...[...] | -| array_flow.rb:1085:10:1085:10 | b [element] | array_flow.rb:1085:10:1085:13 | ...[...] | -| array_flow.rb:1086:10:1086:10 | b [element] | array_flow.rb:1086:10:1086:13 | ...[...] | -| array_flow.rb:1087:10:1087:10 | b [element] | array_flow.rb:1087:10:1087:13 | ...[...] | -| array_flow.rb:1095:5:1095:5 | a [element 0] | array_flow.rb:1096:9:1096:9 | a [element 0] | -| array_flow.rb:1095:5:1095:5 | a [element 2] | array_flow.rb:1096:9:1096:9 | a [element 2] | -| array_flow.rb:1095:5:1095:5 | a [element 3] | array_flow.rb:1096:9:1096:9 | a [element 3] | -| array_flow.rb:1095:10:1095:22 | call to source | array_flow.rb:1095:5:1095:5 | a [element 0] | -| array_flow.rb:1095:28:1095:40 | call to source | array_flow.rb:1095:5:1095:5 | a [element 2] | -| array_flow.rb:1095:43:1095:55 | call to source | array_flow.rb:1095:5:1095:5 | a [element 3] | -| array_flow.rb:1096:5:1096:5 | b [element 1] | array_flow.rb:1102:10:1102:10 | b [element 1] | -| array_flow.rb:1096:5:1096:5 | b [element 2] | array_flow.rb:1103:10:1103:10 | b [element 2] | -| array_flow.rb:1096:5:1096:5 | b [element] | array_flow.rb:1101:10:1101:10 | b [element] | -| array_flow.rb:1096:5:1096:5 | b [element] | array_flow.rb:1102:10:1102:10 | b [element] | -| array_flow.rb:1096:5:1096:5 | b [element] | array_flow.rb:1103:10:1103:10 | b [element] | -| array_flow.rb:1096:5:1096:5 | b [element] | array_flow.rb:1104:10:1104:10 | b [element] | -| array_flow.rb:1096:9:1096:9 | [post] a [element 1] | array_flow.rb:1098:10:1098:10 | a [element 1] | -| array_flow.rb:1096:9:1096:9 | [post] a [element 2] | array_flow.rb:1099:10:1099:10 | a [element 2] | -| array_flow.rb:1096:9:1096:9 | [post] a [element] | array_flow.rb:1097:10:1097:10 | a [element] | -| array_flow.rb:1096:9:1096:9 | [post] a [element] | array_flow.rb:1098:10:1098:10 | a [element] | -| array_flow.rb:1096:9:1096:9 | [post] a [element] | array_flow.rb:1099:10:1099:10 | a [element] | -| array_flow.rb:1096:9:1096:9 | [post] a [element] | array_flow.rb:1100:10:1100:10 | a [element] | -| array_flow.rb:1096:9:1096:9 | a [element 0] | array_flow.rb:1096:9:1096:9 | [post] a [element] | -| array_flow.rb:1096:9:1096:9 | a [element 0] | array_flow.rb:1096:9:1096:17 | call to rotate! [element] | -| array_flow.rb:1096:9:1096:9 | a [element 2] | array_flow.rb:1096:9:1096:9 | [post] a [element 1] | -| array_flow.rb:1096:9:1096:9 | a [element 2] | array_flow.rb:1096:9:1096:17 | call to rotate! [element 1] | -| array_flow.rb:1096:9:1096:9 | a [element 3] | array_flow.rb:1096:9:1096:9 | [post] a [element 2] | -| array_flow.rb:1096:9:1096:9 | a [element 3] | array_flow.rb:1096:9:1096:17 | call to rotate! [element 2] | -| array_flow.rb:1096:9:1096:17 | call to rotate! [element 1] | array_flow.rb:1096:5:1096:5 | b [element 1] | -| array_flow.rb:1096:9:1096:17 | call to rotate! [element 2] | array_flow.rb:1096:5:1096:5 | b [element 2] | -| array_flow.rb:1096:9:1096:17 | call to rotate! [element] | array_flow.rb:1096:5:1096:5 | b [element] | -| array_flow.rb:1097:10:1097:10 | a [element] | array_flow.rb:1097:10:1097:13 | ...[...] | -| array_flow.rb:1098:10:1098:10 | a [element 1] | array_flow.rb:1098:10:1098:13 | ...[...] | -| array_flow.rb:1098:10:1098:10 | a [element] | array_flow.rb:1098:10:1098:13 | ...[...] | -| array_flow.rb:1099:10:1099:10 | a [element 2] | array_flow.rb:1099:10:1099:13 | ...[...] | -| array_flow.rb:1099:10:1099:10 | a [element] | array_flow.rb:1099:10:1099:13 | ...[...] | -| array_flow.rb:1100:10:1100:10 | a [element] | array_flow.rb:1100:10:1100:13 | ...[...] | -| array_flow.rb:1101:10:1101:10 | b [element] | array_flow.rb:1101:10:1101:13 | ...[...] | -| array_flow.rb:1102:10:1102:10 | b [element 1] | array_flow.rb:1102:10:1102:13 | ...[...] | -| array_flow.rb:1102:10:1102:10 | b [element] | array_flow.rb:1102:10:1102:13 | ...[...] | -| array_flow.rb:1103:10:1103:10 | b [element 2] | array_flow.rb:1103:10:1103:13 | ...[...] | -| array_flow.rb:1103:10:1103:10 | b [element] | array_flow.rb:1103:10:1103:13 | ...[...] | -| array_flow.rb:1104:10:1104:10 | b [element] | array_flow.rb:1104:10:1104:13 | ...[...] | -| array_flow.rb:1106:5:1106:5 | a [element 0] | array_flow.rb:1107:9:1107:9 | a [element 0] | -| array_flow.rb:1106:5:1106:5 | a [element 2] | array_flow.rb:1107:9:1107:9 | a [element 2] | -| array_flow.rb:1106:5:1106:5 | a [element 3] | array_flow.rb:1107:9:1107:9 | a [element 3] | -| array_flow.rb:1106:10:1106:22 | call to source | array_flow.rb:1106:5:1106:5 | a [element 0] | -| array_flow.rb:1106:28:1106:40 | call to source | array_flow.rb:1106:5:1106:5 | a [element 2] | -| array_flow.rb:1106:43:1106:55 | call to source | array_flow.rb:1106:5:1106:5 | a [element 3] | -| array_flow.rb:1107:5:1107:5 | b [element 0] | array_flow.rb:1112:10:1112:10 | b [element 0] | -| array_flow.rb:1107:5:1107:5 | b [element 1] | array_flow.rb:1113:10:1113:10 | b [element 1] | -| array_flow.rb:1107:5:1107:5 | b [element] | array_flow.rb:1112:10:1112:10 | b [element] | -| array_flow.rb:1107:5:1107:5 | b [element] | array_flow.rb:1113:10:1113:10 | b [element] | -| array_flow.rb:1107:5:1107:5 | b [element] | array_flow.rb:1114:10:1114:10 | b [element] | -| array_flow.rb:1107:5:1107:5 | b [element] | array_flow.rb:1115:10:1115:10 | b [element] | -| array_flow.rb:1107:9:1107:9 | [post] a [element 0] | array_flow.rb:1108:10:1108:10 | a [element 0] | -| array_flow.rb:1107:9:1107:9 | [post] a [element 1] | array_flow.rb:1109:10:1109:10 | a [element 1] | -| array_flow.rb:1107:9:1107:9 | [post] a [element] | array_flow.rb:1108:10:1108:10 | a [element] | -| array_flow.rb:1107:9:1107:9 | [post] a [element] | array_flow.rb:1109:10:1109:10 | a [element] | -| array_flow.rb:1107:9:1107:9 | [post] a [element] | array_flow.rb:1110:10:1110:10 | a [element] | -| array_flow.rb:1107:9:1107:9 | [post] a [element] | array_flow.rb:1111:10:1111:10 | a [element] | -| array_flow.rb:1107:9:1107:9 | a [element 0] | array_flow.rb:1107:9:1107:9 | [post] a [element] | -| array_flow.rb:1107:9:1107:9 | a [element 0] | array_flow.rb:1107:9:1107:20 | call to rotate! [element] | -| array_flow.rb:1107:9:1107:9 | a [element 2] | array_flow.rb:1107:9:1107:9 | [post] a [element 0] | -| array_flow.rb:1107:9:1107:9 | a [element 2] | array_flow.rb:1107:9:1107:20 | call to rotate! [element 0] | -| array_flow.rb:1107:9:1107:9 | a [element 3] | array_flow.rb:1107:9:1107:9 | [post] a [element 1] | -| array_flow.rb:1107:9:1107:9 | a [element 3] | array_flow.rb:1107:9:1107:20 | call to rotate! [element 1] | -| array_flow.rb:1107:9:1107:20 | call to rotate! [element 0] | array_flow.rb:1107:5:1107:5 | b [element 0] | -| array_flow.rb:1107:9:1107:20 | call to rotate! [element 1] | array_flow.rb:1107:5:1107:5 | b [element 1] | -| array_flow.rb:1107:9:1107:20 | call to rotate! [element] | array_flow.rb:1107:5:1107:5 | b [element] | -| array_flow.rb:1108:10:1108:10 | a [element 0] | array_flow.rb:1108:10:1108:13 | ...[...] | -| array_flow.rb:1108:10:1108:10 | a [element] | array_flow.rb:1108:10:1108:13 | ...[...] | -| array_flow.rb:1109:10:1109:10 | a [element 1] | array_flow.rb:1109:10:1109:13 | ...[...] | -| array_flow.rb:1109:10:1109:10 | a [element] | array_flow.rb:1109:10:1109:13 | ...[...] | -| array_flow.rb:1110:10:1110:10 | a [element] | array_flow.rb:1110:10:1110:13 | ...[...] | -| array_flow.rb:1111:10:1111:10 | a [element] | array_flow.rb:1111:10:1111:13 | ...[...] | -| array_flow.rb:1112:10:1112:10 | b [element 0] | array_flow.rb:1112:10:1112:13 | ...[...] | -| array_flow.rb:1112:10:1112:10 | b [element] | array_flow.rb:1112:10:1112:13 | ...[...] | -| array_flow.rb:1113:10:1113:10 | b [element 1] | array_flow.rb:1113:10:1113:13 | ...[...] | -| array_flow.rb:1113:10:1113:10 | b [element] | array_flow.rb:1113:10:1113:13 | ...[...] | -| array_flow.rb:1114:10:1114:10 | b [element] | array_flow.rb:1114:10:1114:13 | ...[...] | -| array_flow.rb:1115:10:1115:10 | b [element] | array_flow.rb:1115:10:1115:13 | ...[...] | -| array_flow.rb:1117:5:1117:5 | a [element 0] | array_flow.rb:1118:9:1118:9 | a [element 0] | -| array_flow.rb:1117:5:1117:5 | a [element 2] | array_flow.rb:1118:9:1118:9 | a [element 2] | -| array_flow.rb:1117:5:1117:5 | a [element 3] | array_flow.rb:1118:9:1118:9 | a [element 3] | -| array_flow.rb:1117:10:1117:22 | call to source | array_flow.rb:1117:5:1117:5 | a [element 0] | -| array_flow.rb:1117:28:1117:40 | call to source | array_flow.rb:1117:5:1117:5 | a [element 2] | -| array_flow.rb:1117:43:1117:55 | call to source | array_flow.rb:1117:5:1117:5 | a [element 3] | -| array_flow.rb:1118:5:1118:5 | b [element 0] | array_flow.rb:1123:10:1123:10 | b [element 0] | -| array_flow.rb:1118:5:1118:5 | b [element 2] | array_flow.rb:1125:10:1125:10 | b [element 2] | -| array_flow.rb:1118:5:1118:5 | b [element 3] | array_flow.rb:1126:10:1126:10 | b [element 3] | -| array_flow.rb:1118:9:1118:9 | [post] a [element 0] | array_flow.rb:1119:10:1119:10 | a [element 0] | -| array_flow.rb:1118:9:1118:9 | [post] a [element 2] | array_flow.rb:1121:10:1121:10 | a [element 2] | -| array_flow.rb:1118:9:1118:9 | [post] a [element 3] | array_flow.rb:1122:10:1122:10 | a [element 3] | -| array_flow.rb:1118:9:1118:9 | a [element 0] | array_flow.rb:1118:9:1118:9 | [post] a [element 0] | -| array_flow.rb:1118:9:1118:9 | a [element 0] | array_flow.rb:1118:9:1118:20 | call to rotate! [element 0] | -| array_flow.rb:1118:9:1118:9 | a [element 2] | array_flow.rb:1118:9:1118:9 | [post] a [element 2] | -| array_flow.rb:1118:9:1118:9 | a [element 2] | array_flow.rb:1118:9:1118:20 | call to rotate! [element 2] | -| array_flow.rb:1118:9:1118:9 | a [element 3] | array_flow.rb:1118:9:1118:9 | [post] a [element 3] | -| array_flow.rb:1118:9:1118:9 | a [element 3] | array_flow.rb:1118:9:1118:20 | call to rotate! [element 3] | -| array_flow.rb:1118:9:1118:20 | call to rotate! [element 0] | array_flow.rb:1118:5:1118:5 | b [element 0] | -| array_flow.rb:1118:9:1118:20 | call to rotate! [element 2] | array_flow.rb:1118:5:1118:5 | b [element 2] | -| array_flow.rb:1118:9:1118:20 | call to rotate! [element 3] | array_flow.rb:1118:5:1118:5 | b [element 3] | -| array_flow.rb:1119:10:1119:10 | a [element 0] | array_flow.rb:1119:10:1119:13 | ...[...] | -| array_flow.rb:1121:10:1121:10 | a [element 2] | array_flow.rb:1121:10:1121:13 | ...[...] | -| array_flow.rb:1122:10:1122:10 | a [element 3] | array_flow.rb:1122:10:1122:13 | ...[...] | -| array_flow.rb:1123:10:1123:10 | b [element 0] | array_flow.rb:1123:10:1123:13 | ...[...] | -| array_flow.rb:1125:10:1125:10 | b [element 2] | array_flow.rb:1125:10:1125:13 | ...[...] | -| array_flow.rb:1126:10:1126:10 | b [element 3] | array_flow.rb:1126:10:1126:13 | ...[...] | -| array_flow.rb:1128:5:1128:5 | a [element 0] | array_flow.rb:1129:9:1129:9 | a [element 0] | -| array_flow.rb:1128:5:1128:5 | a [element 2] | array_flow.rb:1129:9:1129:9 | a [element 2] | -| array_flow.rb:1128:5:1128:5 | a [element 3] | array_flow.rb:1129:9:1129:9 | a [element 3] | -| array_flow.rb:1128:10:1128:22 | call to source | array_flow.rb:1128:5:1128:5 | a [element 0] | -| array_flow.rb:1128:28:1128:40 | call to source | array_flow.rb:1128:5:1128:5 | a [element 2] | -| array_flow.rb:1128:43:1128:55 | call to source | array_flow.rb:1128:5:1128:5 | a [element 3] | -| array_flow.rb:1129:5:1129:5 | b [element] | array_flow.rb:1134:10:1134:10 | b [element] | -| array_flow.rb:1129:5:1129:5 | b [element] | array_flow.rb:1135:10:1135:10 | b [element] | -| array_flow.rb:1129:5:1129:5 | b [element] | array_flow.rb:1136:10:1136:10 | b [element] | -| array_flow.rb:1129:5:1129:5 | b [element] | array_flow.rb:1137:10:1137:10 | b [element] | -| array_flow.rb:1129:9:1129:9 | [post] a [element] | array_flow.rb:1130:10:1130:10 | a [element] | -| array_flow.rb:1129:9:1129:9 | [post] a [element] | array_flow.rb:1131:10:1131:10 | a [element] | -| array_flow.rb:1129:9:1129:9 | [post] a [element] | array_flow.rb:1132:10:1132:10 | a [element] | -| array_flow.rb:1129:9:1129:9 | [post] a [element] | array_flow.rb:1133:10:1133:10 | a [element] | -| array_flow.rb:1129:9:1129:9 | a [element 0] | array_flow.rb:1129:9:1129:9 | [post] a [element] | -| array_flow.rb:1129:9:1129:9 | a [element 0] | array_flow.rb:1129:9:1129:20 | call to rotate! [element] | -| array_flow.rb:1129:9:1129:9 | a [element 2] | array_flow.rb:1129:9:1129:9 | [post] a [element] | -| array_flow.rb:1129:9:1129:9 | a [element 2] | array_flow.rb:1129:9:1129:20 | call to rotate! [element] | -| array_flow.rb:1129:9:1129:9 | a [element 3] | array_flow.rb:1129:9:1129:9 | [post] a [element] | -| array_flow.rb:1129:9:1129:9 | a [element 3] | array_flow.rb:1129:9:1129:20 | call to rotate! [element] | -| array_flow.rb:1129:9:1129:20 | call to rotate! [element] | array_flow.rb:1129:5:1129:5 | b [element] | -| array_flow.rb:1130:10:1130:10 | a [element] | array_flow.rb:1130:10:1130:13 | ...[...] | -| array_flow.rb:1131:10:1131:10 | a [element] | array_flow.rb:1131:10:1131:13 | ...[...] | -| array_flow.rb:1132:10:1132:10 | a [element] | array_flow.rb:1132:10:1132:13 | ...[...] | -| array_flow.rb:1133:10:1133:10 | a [element] | array_flow.rb:1133:10:1133:13 | ...[...] | -| array_flow.rb:1134:10:1134:10 | b [element] | array_flow.rb:1134:10:1134:13 | ...[...] | -| array_flow.rb:1135:10:1135:10 | b [element] | array_flow.rb:1135:10:1135:13 | ...[...] | -| array_flow.rb:1136:10:1136:10 | b [element] | array_flow.rb:1136:10:1136:13 | ...[...] | -| array_flow.rb:1137:10:1137:10 | b [element] | array_flow.rb:1137:10:1137:13 | ...[...] | -| array_flow.rb:1141:5:1141:5 | a [element 3] | array_flow.rb:1142:9:1142:9 | a [element 3] | -| array_flow.rb:1141:19:1141:29 | call to source | array_flow.rb:1141:5:1141:5 | a [element 3] | -| array_flow.rb:1142:5:1142:5 | b [element] | array_flow.rb:1145:10:1145:10 | b [element] | -| array_flow.rb:1142:9:1142:9 | a [element 3] | array_flow.rb:1142:9:1144:7 | call to select [element] | -| array_flow.rb:1142:9:1142:9 | a [element 3] | array_flow.rb:1142:22:1142:22 | x | -| array_flow.rb:1142:9:1144:7 | call to select [element] | array_flow.rb:1142:5:1142:5 | b [element] | -| array_flow.rb:1142:22:1142:22 | x | array_flow.rb:1143:14:1143:14 | x | -| array_flow.rb:1145:10:1145:10 | b [element] | array_flow.rb:1145:10:1145:13 | ...[...] | -| array_flow.rb:1149:5:1149:5 | a [element 2] | array_flow.rb:1150:9:1150:9 | a [element 2] | -| array_flow.rb:1149:16:1149:26 | call to source | array_flow.rb:1149:5:1149:5 | a [element 2] | -| array_flow.rb:1150:5:1150:5 | b [element] | array_flow.rb:1155:10:1155:10 | b [element] | -| array_flow.rb:1150:9:1150:9 | [post] a [element] | array_flow.rb:1154:10:1154:10 | a [element] | -| array_flow.rb:1150:9:1150:9 | a [element 2] | array_flow.rb:1150:9:1150:9 | [post] a [element] | -| array_flow.rb:1150:9:1150:9 | a [element 2] | array_flow.rb:1150:9:1153:7 | call to select! [element] | -| array_flow.rb:1150:9:1150:9 | a [element 2] | array_flow.rb:1150:23:1150:23 | x | -| array_flow.rb:1150:9:1153:7 | call to select! [element] | array_flow.rb:1150:5:1150:5 | b [element] | -| array_flow.rb:1150:23:1150:23 | x | array_flow.rb:1151:14:1151:14 | x | -| array_flow.rb:1154:10:1154:10 | a [element] | array_flow.rb:1154:10:1154:13 | ...[...] | -| array_flow.rb:1155:10:1155:10 | b [element] | array_flow.rb:1155:10:1155:13 | ...[...] | -| array_flow.rb:1159:5:1159:5 | a [element 0] | array_flow.rb:1160:9:1160:9 | a [element 0] | -| array_flow.rb:1159:5:1159:5 | a [element 2] | array_flow.rb:1160:9:1160:9 | a [element 2] | -| array_flow.rb:1159:10:1159:22 | call to source | array_flow.rb:1159:5:1159:5 | a [element 0] | -| array_flow.rb:1159:28:1159:40 | call to source | array_flow.rb:1159:5:1159:5 | a [element 2] | -| array_flow.rb:1160:5:1160:5 | b | array_flow.rb:1161:10:1161:10 | b | -| array_flow.rb:1160:9:1160:9 | [post] a [element 1] | array_flow.rb:1163:10:1163:10 | a [element 1] | -| array_flow.rb:1160:9:1160:9 | a [element 0] | array_flow.rb:1160:9:1160:15 | call to shift | -| array_flow.rb:1160:9:1160:9 | a [element 2] | array_flow.rb:1160:9:1160:9 | [post] a [element 1] | -| array_flow.rb:1160:9:1160:15 | call to shift | array_flow.rb:1160:5:1160:5 | b | -| array_flow.rb:1163:10:1163:10 | a [element 1] | array_flow.rb:1163:10:1163:13 | ...[...] | -| array_flow.rb:1166:5:1166:5 | a [element 0] | array_flow.rb:1167:9:1167:9 | a [element 0] | -| array_flow.rb:1166:5:1166:5 | a [element 2] | array_flow.rb:1167:9:1167:9 | a [element 2] | -| array_flow.rb:1166:10:1166:22 | call to source | array_flow.rb:1166:5:1166:5 | a [element 0] | -| array_flow.rb:1166:28:1166:40 | call to source | array_flow.rb:1166:5:1166:5 | a [element 2] | -| array_flow.rb:1167:5:1167:5 | b [element 0] | array_flow.rb:1168:10:1168:10 | b [element 0] | -| array_flow.rb:1167:9:1167:9 | [post] a [element 0] | array_flow.rb:1170:10:1170:10 | a [element 0] | -| array_flow.rb:1167:9:1167:9 | a [element 0] | array_flow.rb:1167:9:1167:18 | call to shift [element 0] | -| array_flow.rb:1167:9:1167:9 | a [element 2] | array_flow.rb:1167:9:1167:9 | [post] a [element 0] | -| array_flow.rb:1167:9:1167:18 | call to shift [element 0] | array_flow.rb:1167:5:1167:5 | b [element 0] | -| array_flow.rb:1168:10:1168:10 | b [element 0] | array_flow.rb:1168:10:1168:13 | ...[...] | -| array_flow.rb:1170:10:1170:10 | a [element 0] | array_flow.rb:1170:10:1170:13 | ...[...] | -| array_flow.rb:1174:5:1174:5 | a [element 0] | array_flow.rb:1175:9:1175:9 | a [element 0] | -| array_flow.rb:1174:5:1174:5 | a [element 0] | array_flow.rb:1178:10:1178:10 | a [element 0] | -| array_flow.rb:1174:5:1174:5 | a [element 2] | array_flow.rb:1175:9:1175:9 | a [element 2] | -| array_flow.rb:1174:5:1174:5 | a [element 2] | array_flow.rb:1180:10:1180:10 | a [element 2] | -| array_flow.rb:1174:10:1174:22 | call to source | array_flow.rb:1174:5:1174:5 | a [element 0] | -| array_flow.rb:1174:28:1174:40 | call to source | array_flow.rb:1174:5:1174:5 | a [element 2] | -| array_flow.rb:1175:5:1175:5 | b [element] | array_flow.rb:1176:10:1176:10 | b [element] | -| array_flow.rb:1175:5:1175:5 | b [element] | array_flow.rb:1177:10:1177:10 | b [element] | -| array_flow.rb:1175:9:1175:9 | [post] a [element] | array_flow.rb:1178:10:1178:10 | a [element] | -| array_flow.rb:1175:9:1175:9 | [post] a [element] | array_flow.rb:1179:10:1179:10 | a [element] | -| array_flow.rb:1175:9:1175:9 | [post] a [element] | array_flow.rb:1180:10:1180:10 | a [element] | -| array_flow.rb:1175:9:1175:9 | a [element 0] | array_flow.rb:1175:9:1175:9 | [post] a [element] | -| array_flow.rb:1175:9:1175:9 | a [element 0] | array_flow.rb:1175:9:1175:18 | call to shift [element] | -| array_flow.rb:1175:9:1175:9 | a [element 2] | array_flow.rb:1175:9:1175:9 | [post] a [element] | -| array_flow.rb:1175:9:1175:9 | a [element 2] | array_flow.rb:1175:9:1175:18 | call to shift [element] | -| array_flow.rb:1175:9:1175:18 | call to shift [element] | array_flow.rb:1175:5:1175:5 | b [element] | -| array_flow.rb:1176:10:1176:10 | b [element] | array_flow.rb:1176:10:1176:13 | ...[...] | -| array_flow.rb:1177:10:1177:10 | b [element] | array_flow.rb:1177:10:1177:13 | ...[...] | -| array_flow.rb:1178:10:1178:10 | a [element 0] | array_flow.rb:1178:10:1178:13 | ...[...] | -| array_flow.rb:1178:10:1178:10 | a [element] | array_flow.rb:1178:10:1178:13 | ...[...] | -| array_flow.rb:1179:10:1179:10 | a [element] | array_flow.rb:1179:10:1179:13 | ...[...] | -| array_flow.rb:1180:10:1180:10 | a [element 2] | array_flow.rb:1180:10:1180:13 | ...[...] | -| array_flow.rb:1180:10:1180:10 | a [element] | array_flow.rb:1180:10:1180:13 | ...[...] | -| array_flow.rb:1184:5:1184:5 | a [element 2] | array_flow.rb:1185:9:1185:9 | a [element 2] | -| array_flow.rb:1184:5:1184:5 | a [element 2] | array_flow.rb:1188:10:1188:10 | a [element 2] | -| array_flow.rb:1184:16:1184:26 | call to source | array_flow.rb:1184:5:1184:5 | a [element 2] | -| array_flow.rb:1185:5:1185:5 | b [element] | array_flow.rb:1189:10:1189:10 | b [element] | -| array_flow.rb:1185:5:1185:5 | b [element] | array_flow.rb:1190:10:1190:10 | b [element] | -| array_flow.rb:1185:5:1185:5 | b [element] | array_flow.rb:1191:10:1191:10 | b [element] | -| array_flow.rb:1185:9:1185:9 | a [element 2] | array_flow.rb:1185:9:1185:17 | call to shuffle [element] | -| array_flow.rb:1185:9:1185:17 | call to shuffle [element] | array_flow.rb:1185:5:1185:5 | b [element] | -| array_flow.rb:1188:10:1188:10 | a [element 2] | array_flow.rb:1188:10:1188:13 | ...[...] | -| array_flow.rb:1189:10:1189:10 | b [element] | array_flow.rb:1189:10:1189:13 | ...[...] | -| array_flow.rb:1190:10:1190:10 | b [element] | array_flow.rb:1190:10:1190:13 | ...[...] | -| array_flow.rb:1191:10:1191:10 | b [element] | array_flow.rb:1191:10:1191:13 | ...[...] | -| array_flow.rb:1195:5:1195:5 | a [element 2] | array_flow.rb:1196:9:1196:9 | a [element 2] | -| array_flow.rb:1195:5:1195:5 | a [element 2] | array_flow.rb:1199:10:1199:10 | a [element 2] | -| array_flow.rb:1195:16:1195:26 | call to source | array_flow.rb:1195:5:1195:5 | a [element 2] | -| array_flow.rb:1196:5:1196:5 | b [element] | array_flow.rb:1200:10:1200:10 | b [element] | -| array_flow.rb:1196:5:1196:5 | b [element] | array_flow.rb:1201:10:1201:10 | b [element] | -| array_flow.rb:1196:5:1196:5 | b [element] | array_flow.rb:1202:10:1202:10 | b [element] | -| array_flow.rb:1196:9:1196:9 | [post] a [element] | array_flow.rb:1197:10:1197:10 | a [element] | -| array_flow.rb:1196:9:1196:9 | [post] a [element] | array_flow.rb:1198:10:1198:10 | a [element] | -| array_flow.rb:1196:9:1196:9 | [post] a [element] | array_flow.rb:1199:10:1199:10 | a [element] | -| array_flow.rb:1196:9:1196:9 | a [element 2] | array_flow.rb:1196:9:1196:9 | [post] a [element] | -| array_flow.rb:1196:9:1196:9 | a [element 2] | array_flow.rb:1196:9:1196:18 | call to shuffle! [element] | -| array_flow.rb:1196:9:1196:18 | call to shuffle! [element] | array_flow.rb:1196:5:1196:5 | b [element] | -| array_flow.rb:1197:10:1197:10 | a [element] | array_flow.rb:1197:10:1197:13 | ...[...] | -| array_flow.rb:1198:10:1198:10 | a [element] | array_flow.rb:1198:10:1198:13 | ...[...] | -| array_flow.rb:1199:10:1199:10 | a [element 2] | array_flow.rb:1199:10:1199:13 | ...[...] | -| array_flow.rb:1199:10:1199:10 | a [element] | array_flow.rb:1199:10:1199:13 | ...[...] | -| array_flow.rb:1200:10:1200:10 | b [element] | array_flow.rb:1200:10:1200:13 | ...[...] | -| array_flow.rb:1201:10:1201:10 | b [element] | array_flow.rb:1201:10:1201:13 | ...[...] | -| array_flow.rb:1202:10:1202:10 | b [element] | array_flow.rb:1202:10:1202:13 | ...[...] | -| array_flow.rb:1206:5:1206:5 | a [element 2] | array_flow.rb:1211:9:1211:9 | a [element 2] | -| array_flow.rb:1206:5:1206:5 | a [element 2] | array_flow.rb:1214:9:1214:9 | a [element 2] | -| array_flow.rb:1206:5:1206:5 | a [element 2] | array_flow.rb:1221:9:1221:9 | a [element 2] | -| array_flow.rb:1206:5:1206:5 | a [element 2] | array_flow.rb:1226:9:1226:9 | a [element 2] | -| array_flow.rb:1206:5:1206:5 | a [element 2] | array_flow.rb:1230:9:1230:9 | a [element 2] | -| array_flow.rb:1206:5:1206:5 | a [element 2] | array_flow.rb:1235:9:1235:9 | a [element 2] | -| array_flow.rb:1206:5:1206:5 | a [element 2] | array_flow.rb:1240:9:1240:9 | a [element 2] | -| array_flow.rb:1206:5:1206:5 | a [element 2] | array_flow.rb:1244:9:1244:9 | a [element 2] | -| array_flow.rb:1206:5:1206:5 | a [element 2] | array_flow.rb:1248:9:1248:9 | a [element 2] | -| array_flow.rb:1206:5:1206:5 | a [element 2] | array_flow.rb:1253:9:1253:9 | a [element 2] | -| array_flow.rb:1206:5:1206:5 | a [element 4] | array_flow.rb:1208:9:1208:9 | a [element 4] | -| array_flow.rb:1206:5:1206:5 | a [element 4] | array_flow.rb:1211:9:1211:9 | a [element 4] | -| array_flow.rb:1206:5:1206:5 | a [element 4] | array_flow.rb:1214:9:1214:9 | a [element 4] | -| array_flow.rb:1206:5:1206:5 | a [element 4] | array_flow.rb:1221:9:1221:9 | a [element 4] | -| array_flow.rb:1206:5:1206:5 | a [element 4] | array_flow.rb:1226:9:1226:9 | a [element 4] | -| array_flow.rb:1206:5:1206:5 | a [element 4] | array_flow.rb:1240:9:1240:9 | a [element 4] | -| array_flow.rb:1206:5:1206:5 | a [element 4] | array_flow.rb:1244:9:1244:9 | a [element 4] | -| array_flow.rb:1206:5:1206:5 | a [element 4] | array_flow.rb:1253:9:1253:9 | a [element 4] | -| array_flow.rb:1206:16:1206:28 | call to source | array_flow.rb:1206:5:1206:5 | a [element 2] | -| array_flow.rb:1206:34:1206:46 | call to source | array_flow.rb:1206:5:1206:5 | a [element 4] | -| array_flow.rb:1208:5:1208:5 | b | array_flow.rb:1209:10:1209:10 | b | -| array_flow.rb:1208:9:1208:9 | a [element 4] | array_flow.rb:1208:9:1208:17 | call to slice | -| array_flow.rb:1208:9:1208:17 | call to slice | array_flow.rb:1208:5:1208:5 | b | -| array_flow.rb:1211:5:1211:5 | b | array_flow.rb:1212:10:1212:10 | b | -| array_flow.rb:1211:9:1211:9 | a [element 2] | array_flow.rb:1211:9:1211:19 | call to slice | -| array_flow.rb:1211:9:1211:9 | a [element 4] | array_flow.rb:1211:9:1211:19 | call to slice | -| array_flow.rb:1211:9:1211:19 | call to slice | array_flow.rb:1211:5:1211:5 | b | -| array_flow.rb:1214:5:1214:5 | b | array_flow.rb:1216:10:1216:10 | b | -| array_flow.rb:1214:9:1214:9 | a [element 2] | array_flow.rb:1214:9:1214:17 | call to slice | -| array_flow.rb:1214:9:1214:9 | a [element 4] | array_flow.rb:1214:9:1214:17 | call to slice | -| array_flow.rb:1214:9:1214:17 | call to slice | array_flow.rb:1214:5:1214:5 | b | -| array_flow.rb:1221:5:1221:5 | b [element 0] | array_flow.rb:1222:10:1222:10 | b [element 0] | -| array_flow.rb:1221:5:1221:5 | b [element 2] | array_flow.rb:1224:10:1224:10 | b [element 2] | -| array_flow.rb:1221:9:1221:9 | a [element 2] | array_flow.rb:1221:9:1221:21 | call to slice [element 0] | -| array_flow.rb:1221:9:1221:9 | a [element 4] | array_flow.rb:1221:9:1221:21 | call to slice [element 2] | -| array_flow.rb:1221:9:1221:21 | call to slice [element 0] | array_flow.rb:1221:5:1221:5 | b [element 0] | -| array_flow.rb:1221:9:1221:21 | call to slice [element 2] | array_flow.rb:1221:5:1221:5 | b [element 2] | -| array_flow.rb:1222:10:1222:10 | b [element 0] | array_flow.rb:1222:10:1222:13 | ...[...] | -| array_flow.rb:1224:10:1224:10 | b [element 2] | array_flow.rb:1224:10:1224:13 | ...[...] | -| array_flow.rb:1226:5:1226:5 | b [element] | array_flow.rb:1227:10:1227:10 | b [element] | -| array_flow.rb:1226:5:1226:5 | b [element] | array_flow.rb:1228:10:1228:10 | b [element] | -| array_flow.rb:1226:9:1226:9 | a [element 2] | array_flow.rb:1226:9:1226:21 | call to slice [element] | -| array_flow.rb:1226:9:1226:9 | a [element 4] | array_flow.rb:1226:9:1226:21 | call to slice [element] | -| array_flow.rb:1226:9:1226:21 | call to slice [element] | array_flow.rb:1226:5:1226:5 | b [element] | -| array_flow.rb:1227:10:1227:10 | b [element] | array_flow.rb:1227:10:1227:13 | ...[...] | -| array_flow.rb:1228:10:1228:10 | b [element] | array_flow.rb:1228:10:1228:13 | ...[...] | -| array_flow.rb:1230:5:1230:5 | b [element 0] | array_flow.rb:1231:10:1231:10 | b [element 0] | -| array_flow.rb:1230:9:1230:9 | a [element 2] | array_flow.rb:1230:9:1230:21 | call to slice [element 0] | -| array_flow.rb:1230:9:1230:21 | call to slice [element 0] | array_flow.rb:1230:5:1230:5 | b [element 0] | -| array_flow.rb:1231:10:1231:10 | b [element 0] | array_flow.rb:1231:10:1231:13 | ...[...] | -| array_flow.rb:1235:5:1235:5 | b [element 0] | array_flow.rb:1236:10:1236:10 | b [element 0] | -| array_flow.rb:1235:9:1235:9 | a [element 2] | array_flow.rb:1235:9:1235:22 | call to slice [element 0] | -| array_flow.rb:1235:9:1235:22 | call to slice [element 0] | array_flow.rb:1235:5:1235:5 | b [element 0] | -| array_flow.rb:1236:10:1236:10 | b [element 0] | array_flow.rb:1236:10:1236:13 | ...[...] | -| array_flow.rb:1240:5:1240:5 | b [element] | array_flow.rb:1241:10:1241:10 | b [element] | -| array_flow.rb:1240:5:1240:5 | b [element] | array_flow.rb:1242:10:1242:10 | b [element] | -| array_flow.rb:1240:9:1240:9 | a [element 2] | array_flow.rb:1240:9:1240:21 | call to slice [element] | -| array_flow.rb:1240:9:1240:9 | a [element 4] | array_flow.rb:1240:9:1240:21 | call to slice [element] | -| array_flow.rb:1240:9:1240:21 | call to slice [element] | array_flow.rb:1240:5:1240:5 | b [element] | -| array_flow.rb:1241:10:1241:10 | b [element] | array_flow.rb:1241:10:1241:13 | ...[...] | -| array_flow.rb:1242:10:1242:10 | b [element] | array_flow.rb:1242:10:1242:13 | ...[...] | -| array_flow.rb:1244:5:1244:5 | b [element] | array_flow.rb:1245:10:1245:10 | b [element] | -| array_flow.rb:1244:5:1244:5 | b [element] | array_flow.rb:1246:10:1246:10 | b [element] | -| array_flow.rb:1244:9:1244:9 | a [element 2] | array_flow.rb:1244:9:1244:24 | call to slice [element] | -| array_flow.rb:1244:9:1244:9 | a [element 4] | array_flow.rb:1244:9:1244:24 | call to slice [element] | -| array_flow.rb:1244:9:1244:24 | call to slice [element] | array_flow.rb:1244:5:1244:5 | b [element] | -| array_flow.rb:1245:10:1245:10 | b [element] | array_flow.rb:1245:10:1245:13 | ...[...] | -| array_flow.rb:1246:10:1246:10 | b [element] | array_flow.rb:1246:10:1246:13 | ...[...] | -| array_flow.rb:1248:5:1248:5 | b [element 2] | array_flow.rb:1251:10:1251:10 | b [element 2] | -| array_flow.rb:1248:9:1248:9 | a [element 2] | array_flow.rb:1248:9:1248:20 | call to slice [element 2] | -| array_flow.rb:1248:9:1248:20 | call to slice [element 2] | array_flow.rb:1248:5:1248:5 | b [element 2] | -| array_flow.rb:1251:10:1251:10 | b [element 2] | array_flow.rb:1251:10:1251:13 | ...[...] | -| array_flow.rb:1253:5:1253:5 | b [element] | array_flow.rb:1254:10:1254:10 | b [element] | -| array_flow.rb:1253:5:1253:5 | b [element] | array_flow.rb:1255:10:1255:10 | b [element] | -| array_flow.rb:1253:5:1253:5 | b [element] | array_flow.rb:1256:10:1256:10 | b [element] | -| array_flow.rb:1253:9:1253:9 | a [element 2] | array_flow.rb:1253:9:1253:20 | call to slice [element] | -| array_flow.rb:1253:9:1253:9 | a [element 4] | array_flow.rb:1253:9:1253:20 | call to slice [element] | -| array_flow.rb:1253:9:1253:20 | call to slice [element] | array_flow.rb:1253:5:1253:5 | b [element] | -| array_flow.rb:1254:10:1254:10 | b [element] | array_flow.rb:1254:10:1254:13 | ...[...] | -| array_flow.rb:1255:10:1255:10 | b [element] | array_flow.rb:1255:10:1255:13 | ...[...] | -| array_flow.rb:1256:10:1256:10 | b [element] | array_flow.rb:1256:10:1256:13 | ...[...] | -| array_flow.rb:1260:5:1260:5 | a [element 2] | array_flow.rb:1261:9:1261:9 | a [element 2] | -| array_flow.rb:1260:5:1260:5 | a [element 4] | array_flow.rb:1261:9:1261:9 | a [element 4] | -| array_flow.rb:1260:16:1260:28 | call to source | array_flow.rb:1260:5:1260:5 | a [element 2] | -| array_flow.rb:1260:34:1260:46 | call to source | array_flow.rb:1260:5:1260:5 | a [element 4] | -| array_flow.rb:1261:5:1261:5 | b | array_flow.rb:1262:10:1262:10 | b | -| array_flow.rb:1261:9:1261:9 | [post] a [element 3] | array_flow.rb:1266:10:1266:10 | a [element 3] | -| array_flow.rb:1261:9:1261:9 | a [element 2] | array_flow.rb:1261:9:1261:19 | call to slice! | -| array_flow.rb:1261:9:1261:9 | a [element 4] | array_flow.rb:1261:9:1261:9 | [post] a [element 3] | -| array_flow.rb:1261:9:1261:19 | call to slice! | array_flow.rb:1261:5:1261:5 | b | -| array_flow.rb:1266:10:1266:10 | a [element 3] | array_flow.rb:1266:10:1266:13 | ...[...] | -| array_flow.rb:1268:5:1268:5 | a [element 2] | array_flow.rb:1269:9:1269:9 | a [element 2] | -| array_flow.rb:1268:5:1268:5 | a [element 4] | array_flow.rb:1269:9:1269:9 | a [element 4] | -| array_flow.rb:1268:16:1268:28 | call to source | array_flow.rb:1268:5:1268:5 | a [element 2] | -| array_flow.rb:1268:34:1268:46 | call to source | array_flow.rb:1268:5:1268:5 | a [element 4] | -| array_flow.rb:1269:5:1269:5 | b | array_flow.rb:1275:10:1275:10 | b | -| array_flow.rb:1269:5:1269:5 | b [element] | array_flow.rb:1277:10:1277:10 | b [element] | -| array_flow.rb:1269:9:1269:9 | [post] a [element] | array_flow.rb:1270:10:1270:10 | a [element] | -| array_flow.rb:1269:9:1269:9 | [post] a [element] | array_flow.rb:1271:10:1271:10 | a [element] | -| array_flow.rb:1269:9:1269:9 | [post] a [element] | array_flow.rb:1272:10:1272:10 | a [element] | -| array_flow.rb:1269:9:1269:9 | [post] a [element] | array_flow.rb:1273:10:1273:10 | a [element] | -| array_flow.rb:1269:9:1269:9 | a [element 2] | array_flow.rb:1269:9:1269:9 | [post] a [element] | -| array_flow.rb:1269:9:1269:9 | a [element 2] | array_flow.rb:1269:9:1269:19 | call to slice! | -| array_flow.rb:1269:9:1269:9 | a [element 2] | array_flow.rb:1269:9:1269:19 | call to slice! [element] | -| array_flow.rb:1269:9:1269:9 | a [element 4] | array_flow.rb:1269:9:1269:9 | [post] a [element] | -| array_flow.rb:1269:9:1269:9 | a [element 4] | array_flow.rb:1269:9:1269:19 | call to slice! | -| array_flow.rb:1269:9:1269:9 | a [element 4] | array_flow.rb:1269:9:1269:19 | call to slice! [element] | -| array_flow.rb:1269:9:1269:19 | call to slice! | array_flow.rb:1269:5:1269:5 | b | -| array_flow.rb:1269:9:1269:19 | call to slice! [element] | array_flow.rb:1269:5:1269:5 | b [element] | -| array_flow.rb:1270:10:1270:10 | a [element] | array_flow.rb:1270:10:1270:13 | ...[...] | -| array_flow.rb:1271:10:1271:10 | a [element] | array_flow.rb:1271:10:1271:13 | ...[...] | -| array_flow.rb:1272:10:1272:10 | a [element] | array_flow.rb:1272:10:1272:13 | ...[...] | -| array_flow.rb:1273:10:1273:10 | a [element] | array_flow.rb:1273:10:1273:13 | ...[...] | -| array_flow.rb:1277:10:1277:10 | b [element] | array_flow.rb:1277:10:1277:13 | ...[...] | -| array_flow.rb:1279:5:1279:5 | a [element 2] | array_flow.rb:1280:9:1280:9 | a [element 2] | -| array_flow.rb:1279:5:1279:5 | a [element 4] | array_flow.rb:1280:9:1280:9 | a [element 4] | -| array_flow.rb:1279:16:1279:28 | call to source | array_flow.rb:1279:5:1279:5 | a [element 2] | -| array_flow.rb:1279:34:1279:46 | call to source | array_flow.rb:1279:5:1279:5 | a [element 4] | -| array_flow.rb:1280:5:1280:5 | b [element 0] | array_flow.rb:1281:10:1281:10 | b [element 0] | -| array_flow.rb:1280:5:1280:5 | b [element 2] | array_flow.rb:1283:10:1283:10 | b [element 2] | -| array_flow.rb:1280:9:1280:9 | a [element 2] | array_flow.rb:1280:9:1280:22 | call to slice! [element 0] | -| array_flow.rb:1280:9:1280:9 | a [element 4] | array_flow.rb:1280:9:1280:22 | call to slice! [element 2] | -| array_flow.rb:1280:9:1280:22 | call to slice! [element 0] | array_flow.rb:1280:5:1280:5 | b [element 0] | -| array_flow.rb:1280:9:1280:22 | call to slice! [element 2] | array_flow.rb:1280:5:1280:5 | b [element 2] | -| array_flow.rb:1281:10:1281:10 | b [element 0] | array_flow.rb:1281:10:1281:13 | ...[...] | -| array_flow.rb:1283:10:1283:10 | b [element 2] | array_flow.rb:1283:10:1283:13 | ...[...] | -| array_flow.rb:1290:5:1290:5 | a [element 2] | array_flow.rb:1291:9:1291:9 | a [element 2] | -| array_flow.rb:1290:5:1290:5 | a [element 4] | array_flow.rb:1291:9:1291:9 | a [element 4] | -| array_flow.rb:1290:16:1290:28 | call to source | array_flow.rb:1290:5:1290:5 | a [element 2] | -| array_flow.rb:1290:34:1290:46 | call to source | array_flow.rb:1290:5:1290:5 | a [element 4] | -| array_flow.rb:1291:5:1291:5 | b [element 0] | array_flow.rb:1292:10:1292:10 | b [element 0] | -| array_flow.rb:1291:9:1291:9 | [post] a [element 2] | array_flow.rb:1297:10:1297:10 | a [element 2] | -| array_flow.rb:1291:9:1291:9 | a [element 2] | array_flow.rb:1291:9:1291:22 | call to slice! [element 0] | -| array_flow.rb:1291:9:1291:9 | a [element 4] | array_flow.rb:1291:9:1291:9 | [post] a [element 2] | -| array_flow.rb:1291:9:1291:22 | call to slice! [element 0] | array_flow.rb:1291:5:1291:5 | b [element 0] | -| array_flow.rb:1292:10:1292:10 | b [element 0] | array_flow.rb:1292:10:1292:13 | ...[...] | -| array_flow.rb:1297:10:1297:10 | a [element 2] | array_flow.rb:1297:10:1297:13 | ...[...] | -| array_flow.rb:1301:5:1301:5 | a [element 2] | array_flow.rb:1302:9:1302:9 | a [element 2] | -| array_flow.rb:1301:5:1301:5 | a [element 4] | array_flow.rb:1302:9:1302:9 | a [element 4] | -| array_flow.rb:1301:16:1301:28 | call to source | array_flow.rb:1301:5:1301:5 | a [element 2] | -| array_flow.rb:1301:34:1301:46 | call to source | array_flow.rb:1301:5:1301:5 | a [element 4] | -| array_flow.rb:1302:5:1302:5 | b [element 0] | array_flow.rb:1303:10:1303:10 | b [element 0] | -| array_flow.rb:1302:9:1302:9 | [post] a [element 2] | array_flow.rb:1308:10:1308:10 | a [element 2] | -| array_flow.rb:1302:9:1302:9 | a [element 2] | array_flow.rb:1302:9:1302:23 | call to slice! [element 0] | -| array_flow.rb:1302:9:1302:9 | a [element 4] | array_flow.rb:1302:9:1302:9 | [post] a [element 2] | -| array_flow.rb:1302:9:1302:23 | call to slice! [element 0] | array_flow.rb:1302:5:1302:5 | b [element 0] | -| array_flow.rb:1303:10:1303:10 | b [element 0] | array_flow.rb:1303:10:1303:13 | ...[...] | -| array_flow.rb:1308:10:1308:10 | a [element 2] | array_flow.rb:1308:10:1308:13 | ...[...] | -| array_flow.rb:1312:5:1312:5 | a [element 2] | array_flow.rb:1313:9:1313:9 | a [element 2] | -| array_flow.rb:1312:5:1312:5 | a [element 4] | array_flow.rb:1313:9:1313:9 | a [element 4] | -| array_flow.rb:1312:16:1312:28 | call to source | array_flow.rb:1312:5:1312:5 | a [element 2] | -| array_flow.rb:1312:34:1312:46 | call to source | array_flow.rb:1312:5:1312:5 | a [element 4] | -| array_flow.rb:1313:5:1313:5 | b [element] | array_flow.rb:1314:10:1314:10 | b [element] | -| array_flow.rb:1313:5:1313:5 | b [element] | array_flow.rb:1315:10:1315:10 | b [element] | -| array_flow.rb:1313:5:1313:5 | b [element] | array_flow.rb:1316:10:1316:10 | b [element] | -| array_flow.rb:1313:9:1313:9 | [post] a [element] | array_flow.rb:1317:10:1317:10 | a [element] | -| array_flow.rb:1313:9:1313:9 | [post] a [element] | array_flow.rb:1318:10:1318:10 | a [element] | -| array_flow.rb:1313:9:1313:9 | [post] a [element] | array_flow.rb:1319:10:1319:10 | a [element] | -| array_flow.rb:1313:9:1313:9 | a [element 2] | array_flow.rb:1313:9:1313:9 | [post] a [element] | -| array_flow.rb:1313:9:1313:9 | a [element 2] | array_flow.rb:1313:9:1313:22 | call to slice! [element] | -| array_flow.rb:1313:9:1313:9 | a [element 4] | array_flow.rb:1313:9:1313:9 | [post] a [element] | -| array_flow.rb:1313:9:1313:9 | a [element 4] | array_flow.rb:1313:9:1313:22 | call to slice! [element] | -| array_flow.rb:1313:9:1313:22 | call to slice! [element] | array_flow.rb:1313:5:1313:5 | b [element] | -| array_flow.rb:1314:10:1314:10 | b [element] | array_flow.rb:1314:10:1314:13 | ...[...] | -| array_flow.rb:1315:10:1315:10 | b [element] | array_flow.rb:1315:10:1315:13 | ...[...] | -| array_flow.rb:1316:10:1316:10 | b [element] | array_flow.rb:1316:10:1316:13 | ...[...] | -| array_flow.rb:1317:10:1317:10 | a [element] | array_flow.rb:1317:10:1317:13 | ...[...] | -| array_flow.rb:1318:10:1318:10 | a [element] | array_flow.rb:1318:10:1318:13 | ...[...] | -| array_flow.rb:1319:10:1319:10 | a [element] | array_flow.rb:1319:10:1319:13 | ...[...] | -| array_flow.rb:1321:5:1321:5 | a [element 2] | array_flow.rb:1322:9:1322:9 | a [element 2] | -| array_flow.rb:1321:5:1321:5 | a [element 4] | array_flow.rb:1322:9:1322:9 | a [element 4] | -| array_flow.rb:1321:16:1321:28 | call to source | array_flow.rb:1321:5:1321:5 | a [element 2] | -| array_flow.rb:1321:34:1321:46 | call to source | array_flow.rb:1321:5:1321:5 | a [element 4] | -| array_flow.rb:1322:5:1322:5 | b [element] | array_flow.rb:1323:10:1323:10 | b [element] | -| array_flow.rb:1322:5:1322:5 | b [element] | array_flow.rb:1324:10:1324:10 | b [element] | -| array_flow.rb:1322:5:1322:5 | b [element] | array_flow.rb:1325:10:1325:10 | b [element] | -| array_flow.rb:1322:9:1322:9 | [post] a [element] | array_flow.rb:1326:10:1326:10 | a [element] | -| array_flow.rb:1322:9:1322:9 | [post] a [element] | array_flow.rb:1327:10:1327:10 | a [element] | -| array_flow.rb:1322:9:1322:9 | [post] a [element] | array_flow.rb:1328:10:1328:10 | a [element] | -| array_flow.rb:1322:9:1322:9 | a [element 2] | array_flow.rb:1322:9:1322:9 | [post] a [element] | -| array_flow.rb:1322:9:1322:9 | a [element 2] | array_flow.rb:1322:9:1322:22 | call to slice! [element] | -| array_flow.rb:1322:9:1322:9 | a [element 4] | array_flow.rb:1322:9:1322:9 | [post] a [element] | -| array_flow.rb:1322:9:1322:9 | a [element 4] | array_flow.rb:1322:9:1322:22 | call to slice! [element] | -| array_flow.rb:1322:9:1322:22 | call to slice! [element] | array_flow.rb:1322:5:1322:5 | b [element] | -| array_flow.rb:1323:10:1323:10 | b [element] | array_flow.rb:1323:10:1323:13 | ...[...] | -| array_flow.rb:1324:10:1324:10 | b [element] | array_flow.rb:1324:10:1324:13 | ...[...] | -| array_flow.rb:1325:10:1325:10 | b [element] | array_flow.rb:1325:10:1325:13 | ...[...] | -| array_flow.rb:1326:10:1326:10 | a [element] | array_flow.rb:1326:10:1326:13 | ...[...] | -| array_flow.rb:1327:10:1327:10 | a [element] | array_flow.rb:1327:10:1327:13 | ...[...] | -| array_flow.rb:1328:10:1328:10 | a [element] | array_flow.rb:1328:10:1328:13 | ...[...] | -| array_flow.rb:1330:5:1330:5 | a [element 2] | array_flow.rb:1331:9:1331:9 | a [element 2] | -| array_flow.rb:1330:5:1330:5 | a [element 4] | array_flow.rb:1331:9:1331:9 | a [element 4] | -| array_flow.rb:1330:16:1330:28 | call to source | array_flow.rb:1330:5:1330:5 | a [element 2] | -| array_flow.rb:1330:34:1330:46 | call to source | array_flow.rb:1330:5:1330:5 | a [element 4] | -| array_flow.rb:1331:5:1331:5 | b [element] | array_flow.rb:1332:10:1332:10 | b [element] | -| array_flow.rb:1331:5:1331:5 | b [element] | array_flow.rb:1333:10:1333:10 | b [element] | -| array_flow.rb:1331:5:1331:5 | b [element] | array_flow.rb:1334:10:1334:10 | b [element] | -| array_flow.rb:1331:9:1331:9 | [post] a [element] | array_flow.rb:1335:10:1335:10 | a [element] | -| array_flow.rb:1331:9:1331:9 | [post] a [element] | array_flow.rb:1336:10:1336:10 | a [element] | -| array_flow.rb:1331:9:1331:9 | [post] a [element] | array_flow.rb:1337:10:1337:10 | a [element] | -| array_flow.rb:1331:9:1331:9 | a [element 2] | array_flow.rb:1331:9:1331:9 | [post] a [element] | -| array_flow.rb:1331:9:1331:9 | a [element 2] | array_flow.rb:1331:9:1331:25 | call to slice! [element] | -| array_flow.rb:1331:9:1331:9 | a [element 4] | array_flow.rb:1331:9:1331:9 | [post] a [element] | -| array_flow.rb:1331:9:1331:9 | a [element 4] | array_flow.rb:1331:9:1331:25 | call to slice! [element] | -| array_flow.rb:1331:9:1331:25 | call to slice! [element] | array_flow.rb:1331:5:1331:5 | b [element] | -| array_flow.rb:1332:10:1332:10 | b [element] | array_flow.rb:1332:10:1332:13 | ...[...] | -| array_flow.rb:1333:10:1333:10 | b [element] | array_flow.rb:1333:10:1333:13 | ...[...] | -| array_flow.rb:1334:10:1334:10 | b [element] | array_flow.rb:1334:10:1334:13 | ...[...] | -| array_flow.rb:1335:10:1335:10 | a [element] | array_flow.rb:1335:10:1335:13 | ...[...] | -| array_flow.rb:1336:10:1336:10 | a [element] | array_flow.rb:1336:10:1336:13 | ...[...] | -| array_flow.rb:1337:10:1337:10 | a [element] | array_flow.rb:1337:10:1337:13 | ...[...] | -| array_flow.rb:1339:5:1339:5 | a [element 2] | array_flow.rb:1340:9:1340:9 | a [element 2] | -| array_flow.rb:1339:5:1339:5 | a [element 4] | array_flow.rb:1340:9:1340:9 | a [element 4] | -| array_flow.rb:1339:16:1339:28 | call to source | array_flow.rb:1339:5:1339:5 | a [element 2] | -| array_flow.rb:1339:34:1339:46 | call to source | array_flow.rb:1339:5:1339:5 | a [element 4] | -| array_flow.rb:1340:5:1340:5 | b [element 2] | array_flow.rb:1343:10:1343:10 | b [element 2] | -| array_flow.rb:1340:9:1340:9 | [post] a [element 1] | array_flow.rb:1345:10:1345:10 | a [element 1] | -| array_flow.rb:1340:9:1340:9 | a [element 2] | array_flow.rb:1340:9:1340:21 | call to slice! [element 2] | -| array_flow.rb:1340:9:1340:9 | a [element 4] | array_flow.rb:1340:9:1340:9 | [post] a [element 1] | -| array_flow.rb:1340:9:1340:21 | call to slice! [element 2] | array_flow.rb:1340:5:1340:5 | b [element 2] | -| array_flow.rb:1343:10:1343:10 | b [element 2] | array_flow.rb:1343:10:1343:13 | ...[...] | -| array_flow.rb:1345:10:1345:10 | a [element 1] | array_flow.rb:1345:10:1345:13 | ...[...] | -| array_flow.rb:1348:5:1348:5 | a [element 2] | array_flow.rb:1349:9:1349:9 | a [element 2] | -| array_flow.rb:1348:5:1348:5 | a [element 4] | array_flow.rb:1349:9:1349:9 | a [element 4] | -| array_flow.rb:1348:16:1348:28 | call to source | array_flow.rb:1348:5:1348:5 | a [element 2] | -| array_flow.rb:1348:34:1348:46 | call to source | array_flow.rb:1348:5:1348:5 | a [element 4] | -| array_flow.rb:1349:5:1349:5 | b [element] | array_flow.rb:1350:10:1350:10 | b [element] | -| array_flow.rb:1349:5:1349:5 | b [element] | array_flow.rb:1351:10:1351:10 | b [element] | -| array_flow.rb:1349:5:1349:5 | b [element] | array_flow.rb:1352:10:1352:10 | b [element] | -| array_flow.rb:1349:9:1349:9 | [post] a [element] | array_flow.rb:1353:10:1353:10 | a [element] | -| array_flow.rb:1349:9:1349:9 | [post] a [element] | array_flow.rb:1354:10:1354:10 | a [element] | -| array_flow.rb:1349:9:1349:9 | [post] a [element] | array_flow.rb:1355:10:1355:10 | a [element] | -| array_flow.rb:1349:9:1349:9 | a [element 2] | array_flow.rb:1349:9:1349:9 | [post] a [element] | -| array_flow.rb:1349:9:1349:9 | a [element 2] | array_flow.rb:1349:9:1349:21 | call to slice! [element] | -| array_flow.rb:1349:9:1349:9 | a [element 4] | array_flow.rb:1349:9:1349:9 | [post] a [element] | -| array_flow.rb:1349:9:1349:9 | a [element 4] | array_flow.rb:1349:9:1349:21 | call to slice! [element] | -| array_flow.rb:1349:9:1349:21 | call to slice! [element] | array_flow.rb:1349:5:1349:5 | b [element] | -| array_flow.rb:1350:10:1350:10 | b [element] | array_flow.rb:1350:10:1350:13 | ...[...] | -| array_flow.rb:1351:10:1351:10 | b [element] | array_flow.rb:1351:10:1351:13 | ...[...] | -| array_flow.rb:1352:10:1352:10 | b [element] | array_flow.rb:1352:10:1352:13 | ...[...] | -| array_flow.rb:1353:10:1353:10 | a [element] | array_flow.rb:1353:10:1353:13 | ...[...] | -| array_flow.rb:1354:10:1354:10 | a [element] | array_flow.rb:1354:10:1354:13 | ...[...] | -| array_flow.rb:1355:10:1355:10 | a [element] | array_flow.rb:1355:10:1355:13 | ...[...] | -| array_flow.rb:1359:5:1359:5 | a [element 2] | array_flow.rb:1360:9:1360:9 | a [element 2] | -| array_flow.rb:1359:16:1359:26 | call to source | array_flow.rb:1359:5:1359:5 | a [element 2] | -| array_flow.rb:1360:9:1360:9 | a [element 2] | array_flow.rb:1360:27:1360:27 | x | -| array_flow.rb:1360:27:1360:27 | x | array_flow.rb:1361:14:1361:14 | x | -| array_flow.rb:1367:5:1367:5 | a [element 2] | array_flow.rb:1368:9:1368:9 | a [element 2] | -| array_flow.rb:1367:16:1367:26 | call to source | array_flow.rb:1367:5:1367:5 | a [element 2] | -| array_flow.rb:1368:9:1368:9 | a [element 2] | array_flow.rb:1368:28:1368:28 | x | -| array_flow.rb:1368:28:1368:28 | x | array_flow.rb:1369:14:1369:14 | x | -| array_flow.rb:1375:5:1375:5 | a [element 2] | array_flow.rb:1376:9:1376:9 | a [element 2] | -| array_flow.rb:1375:16:1375:26 | call to source | array_flow.rb:1375:5:1375:5 | a [element 2] | -| array_flow.rb:1376:9:1376:9 | a [element 2] | array_flow.rb:1376:26:1376:26 | x | -| array_flow.rb:1376:9:1376:9 | a [element 2] | array_flow.rb:1376:29:1376:29 | y | -| array_flow.rb:1376:26:1376:26 | x | array_flow.rb:1377:14:1377:14 | x | -| array_flow.rb:1376:29:1376:29 | y | array_flow.rb:1378:14:1378:14 | y | -| array_flow.rb:1383:5:1383:5 | a [element 2] | array_flow.rb:1384:9:1384:9 | a [element 2] | -| array_flow.rb:1383:5:1383:5 | a [element 2] | array_flow.rb:1387:9:1387:9 | a [element 2] | -| array_flow.rb:1383:16:1383:26 | call to source | array_flow.rb:1383:5:1383:5 | a [element 2] | -| array_flow.rb:1384:5:1384:5 | b [element] | array_flow.rb:1385:10:1385:10 | b [element] | -| array_flow.rb:1384:5:1384:5 | b [element] | array_flow.rb:1386:10:1386:10 | b [element] | -| array_flow.rb:1384:9:1384:9 | a [element 2] | array_flow.rb:1384:9:1384:14 | call to sort [element] | -| array_flow.rb:1384:9:1384:14 | call to sort [element] | array_flow.rb:1384:5:1384:5 | b [element] | -| array_flow.rb:1385:10:1385:10 | b [element] | array_flow.rb:1385:10:1385:13 | ...[...] | -| array_flow.rb:1386:10:1386:10 | b [element] | array_flow.rb:1386:10:1386:13 | ...[...] | -| array_flow.rb:1387:5:1387:5 | c [element] | array_flow.rb:1392:10:1392:10 | c [element] | -| array_flow.rb:1387:5:1387:5 | c [element] | array_flow.rb:1393:10:1393:10 | c [element] | -| array_flow.rb:1387:9:1387:9 | a [element 2] | array_flow.rb:1387:9:1391:7 | call to sort [element] | -| array_flow.rb:1387:9:1387:9 | a [element 2] | array_flow.rb:1387:20:1387:20 | x | -| array_flow.rb:1387:9:1387:9 | a [element 2] | array_flow.rb:1387:23:1387:23 | y | -| array_flow.rb:1387:9:1391:7 | call to sort [element] | array_flow.rb:1387:5:1387:5 | c [element] | -| array_flow.rb:1387:20:1387:20 | x | array_flow.rb:1388:14:1388:14 | x | -| array_flow.rb:1387:23:1387:23 | y | array_flow.rb:1389:14:1389:14 | y | -| array_flow.rb:1392:10:1392:10 | c [element] | array_flow.rb:1392:10:1392:13 | ...[...] | -| array_flow.rb:1393:10:1393:10 | c [element] | array_flow.rb:1393:10:1393:13 | ...[...] | -| array_flow.rb:1397:5:1397:5 | a [element 2] | array_flow.rb:1398:9:1398:9 | a [element 2] | -| array_flow.rb:1397:16:1397:26 | call to source | array_flow.rb:1397:5:1397:5 | a [element 2] | -| array_flow.rb:1398:5:1398:5 | b [element] | array_flow.rb:1399:10:1399:10 | b [element] | -| array_flow.rb:1398:5:1398:5 | b [element] | array_flow.rb:1400:10:1400:10 | b [element] | -| array_flow.rb:1398:9:1398:9 | [post] a [element] | array_flow.rb:1401:10:1401:10 | a [element] | -| array_flow.rb:1398:9:1398:9 | [post] a [element] | array_flow.rb:1402:10:1402:10 | a [element] | -| array_flow.rb:1398:9:1398:9 | a [element 2] | array_flow.rb:1398:9:1398:9 | [post] a [element] | -| array_flow.rb:1398:9:1398:9 | a [element 2] | array_flow.rb:1398:9:1398:15 | call to sort! [element] | -| array_flow.rb:1398:9:1398:15 | call to sort! [element] | array_flow.rb:1398:5:1398:5 | b [element] | -| array_flow.rb:1399:10:1399:10 | b [element] | array_flow.rb:1399:10:1399:13 | ...[...] | -| array_flow.rb:1400:10:1400:10 | b [element] | array_flow.rb:1400:10:1400:13 | ...[...] | -| array_flow.rb:1401:10:1401:10 | a [element] | array_flow.rb:1401:10:1401:13 | ...[...] | -| array_flow.rb:1402:10:1402:10 | a [element] | array_flow.rb:1402:10:1402:13 | ...[...] | -| array_flow.rb:1404:5:1404:5 | a [element 2] | array_flow.rb:1405:9:1405:9 | a [element 2] | -| array_flow.rb:1404:16:1404:26 | call to source | array_flow.rb:1404:5:1404:5 | a [element 2] | -| array_flow.rb:1405:5:1405:5 | b [element] | array_flow.rb:1410:10:1410:10 | b [element] | -| array_flow.rb:1405:5:1405:5 | b [element] | array_flow.rb:1411:10:1411:10 | b [element] | -| array_flow.rb:1405:9:1405:9 | [post] a [element] | array_flow.rb:1412:10:1412:10 | a [element] | -| array_flow.rb:1405:9:1405:9 | [post] a [element] | array_flow.rb:1413:10:1413:10 | a [element] | -| array_flow.rb:1405:9:1405:9 | a [element 2] | array_flow.rb:1405:9:1405:9 | [post] a [element] | -| array_flow.rb:1405:9:1405:9 | a [element 2] | array_flow.rb:1405:9:1409:7 | call to sort! [element] | -| array_flow.rb:1405:9:1405:9 | a [element 2] | array_flow.rb:1405:21:1405:21 | x | -| array_flow.rb:1405:9:1405:9 | a [element 2] | array_flow.rb:1405:24:1405:24 | y | -| array_flow.rb:1405:9:1409:7 | call to sort! [element] | array_flow.rb:1405:5:1405:5 | b [element] | -| array_flow.rb:1405:21:1405:21 | x | array_flow.rb:1406:14:1406:14 | x | -| array_flow.rb:1405:24:1405:24 | y | array_flow.rb:1407:14:1407:14 | y | -| array_flow.rb:1410:10:1410:10 | b [element] | array_flow.rb:1410:10:1410:13 | ...[...] | -| array_flow.rb:1411:10:1411:10 | b [element] | array_flow.rb:1411:10:1411:13 | ...[...] | -| array_flow.rb:1412:10:1412:10 | a [element] | array_flow.rb:1412:10:1412:13 | ...[...] | -| array_flow.rb:1413:10:1413:10 | a [element] | array_flow.rb:1413:10:1413:13 | ...[...] | -| array_flow.rb:1417:5:1417:5 | a [element 2] | array_flow.rb:1418:9:1418:9 | a [element 2] | -| array_flow.rb:1417:16:1417:26 | call to source | array_flow.rb:1417:5:1417:5 | a [element 2] | -| array_flow.rb:1418:5:1418:5 | b [element] | array_flow.rb:1422:10:1422:10 | b [element] | -| array_flow.rb:1418:5:1418:5 | b [element] | array_flow.rb:1423:10:1423:10 | b [element] | -| array_flow.rb:1418:9:1418:9 | a [element 2] | array_flow.rb:1418:9:1421:7 | call to sort_by [element] | -| array_flow.rb:1418:9:1418:9 | a [element 2] | array_flow.rb:1418:23:1418:23 | x | -| array_flow.rb:1418:9:1421:7 | call to sort_by [element] | array_flow.rb:1418:5:1418:5 | b [element] | -| array_flow.rb:1418:23:1418:23 | x | array_flow.rb:1419:14:1419:14 | x | -| array_flow.rb:1422:10:1422:10 | b [element] | array_flow.rb:1422:10:1422:13 | ...[...] | -| array_flow.rb:1423:10:1423:10 | b [element] | array_flow.rb:1423:10:1423:13 | ...[...] | -| array_flow.rb:1427:5:1427:5 | a [element 2] | array_flow.rb:1428:9:1428:9 | a [element 2] | -| array_flow.rb:1427:16:1427:26 | call to source | array_flow.rb:1427:5:1427:5 | a [element 2] | -| array_flow.rb:1428:5:1428:5 | b [element] | array_flow.rb:1434:10:1434:10 | b [element] | -| array_flow.rb:1428:5:1428:5 | b [element] | array_flow.rb:1435:10:1435:10 | b [element] | -| array_flow.rb:1428:9:1428:9 | [post] a [element] | array_flow.rb:1432:10:1432:10 | a [element] | -| array_flow.rb:1428:9:1428:9 | [post] a [element] | array_flow.rb:1433:10:1433:10 | a [element] | -| array_flow.rb:1428:9:1428:9 | a [element 2] | array_flow.rb:1428:9:1428:9 | [post] a [element] | -| array_flow.rb:1428:9:1428:9 | a [element 2] | array_flow.rb:1428:9:1431:7 | call to sort_by! [element] | -| array_flow.rb:1428:9:1428:9 | a [element 2] | array_flow.rb:1428:24:1428:24 | x | -| array_flow.rb:1428:9:1431:7 | call to sort_by! [element] | array_flow.rb:1428:5:1428:5 | b [element] | -| array_flow.rb:1428:24:1428:24 | x | array_flow.rb:1429:14:1429:14 | x | -| array_flow.rb:1432:10:1432:10 | a [element] | array_flow.rb:1432:10:1432:13 | ...[...] | -| array_flow.rb:1433:10:1433:10 | a [element] | array_flow.rb:1433:10:1433:13 | ...[...] | -| array_flow.rb:1434:10:1434:10 | b [element] | array_flow.rb:1434:10:1434:13 | ...[...] | -| array_flow.rb:1435:10:1435:10 | b [element] | array_flow.rb:1435:10:1435:13 | ...[...] | -| array_flow.rb:1439:5:1439:5 | a [element 2] | array_flow.rb:1440:9:1440:9 | a [element 2] | -| array_flow.rb:1439:16:1439:26 | call to source | array_flow.rb:1439:5:1439:5 | a [element 2] | -| array_flow.rb:1440:9:1440:9 | a [element 2] | array_flow.rb:1440:19:1440:19 | x | -| array_flow.rb:1440:19:1440:19 | x | array_flow.rb:1441:14:1441:14 | x | -| array_flow.rb:1447:5:1447:5 | a [element 2] | array_flow.rb:1448:9:1448:9 | a [element 2] | -| array_flow.rb:1447:5:1447:5 | a [element 2] | array_flow.rb:1453:9:1453:9 | a [element 2] | -| array_flow.rb:1447:5:1447:5 | a [element 2] | array_flow.rb:1459:9:1459:9 | a [element 2] | -| array_flow.rb:1447:5:1447:5 | a [element 2] | array_flow.rb:1466:9:1466:9 | a [element 2] | -| array_flow.rb:1447:5:1447:5 | a [element 3] | array_flow.rb:1448:9:1448:9 | a [element 3] | -| array_flow.rb:1447:5:1447:5 | a [element 3] | array_flow.rb:1459:9:1459:9 | a [element 3] | -| array_flow.rb:1447:16:1447:28 | call to source | array_flow.rb:1447:5:1447:5 | a [element 2] | -| array_flow.rb:1447:31:1447:43 | call to source | array_flow.rb:1447:5:1447:5 | a [element 3] | -| array_flow.rb:1448:5:1448:5 | b [element 2] | array_flow.rb:1451:10:1451:10 | b [element 2] | -| array_flow.rb:1448:5:1448:5 | b [element 3] | array_flow.rb:1452:10:1452:10 | b [element 3] | -| array_flow.rb:1448:9:1448:9 | a [element 2] | array_flow.rb:1448:9:1448:17 | call to take [element 2] | -| array_flow.rb:1448:9:1448:9 | a [element 3] | array_flow.rb:1448:9:1448:17 | call to take [element 3] | -| array_flow.rb:1448:9:1448:17 | call to take [element 2] | array_flow.rb:1448:5:1448:5 | b [element 2] | -| array_flow.rb:1448:9:1448:17 | call to take [element 3] | array_flow.rb:1448:5:1448:5 | b [element 3] | -| array_flow.rb:1451:10:1451:10 | b [element 2] | array_flow.rb:1451:10:1451:13 | ...[...] | -| array_flow.rb:1452:10:1452:10 | b [element 3] | array_flow.rb:1452:10:1452:13 | ...[...] | -| array_flow.rb:1453:5:1453:5 | b [element 2] | array_flow.rb:1456:10:1456:10 | b [element 2] | -| array_flow.rb:1453:5:1453:5 | b [element 2] | array_flow.rb:1458:10:1458:10 | b [element 2] | -| array_flow.rb:1453:9:1453:9 | a [element 2] | array_flow.rb:1453:9:1453:17 | call to take [element 2] | -| array_flow.rb:1453:9:1453:17 | call to take [element 2] | array_flow.rb:1453:5:1453:5 | b [element 2] | -| array_flow.rb:1456:10:1456:10 | b [element 2] | array_flow.rb:1456:10:1456:13 | ...[...] | -| array_flow.rb:1458:10:1458:10 | b [element 2] | array_flow.rb:1458:10:1458:13 | ...[...] | -| array_flow.rb:1459:5:1459:5 | b [element 2] | array_flow.rb:1462:10:1462:10 | b [element 2] | -| array_flow.rb:1459:5:1459:5 | b [element 2] | array_flow.rb:1464:10:1464:10 | b [element 2] | -| array_flow.rb:1459:5:1459:5 | b [element 3] | array_flow.rb:1463:10:1463:10 | b [element 3] | -| array_flow.rb:1459:5:1459:5 | b [element 3] | array_flow.rb:1464:10:1464:10 | b [element 3] | -| array_flow.rb:1459:9:1459:9 | a [element 2] | array_flow.rb:1459:9:1459:19 | call to take [element 2] | -| array_flow.rb:1459:9:1459:9 | a [element 3] | array_flow.rb:1459:9:1459:19 | call to take [element 3] | -| array_flow.rb:1459:9:1459:19 | call to take [element 2] | array_flow.rb:1459:5:1459:5 | b [element 2] | -| array_flow.rb:1459:9:1459:19 | call to take [element 3] | array_flow.rb:1459:5:1459:5 | b [element 3] | -| array_flow.rb:1462:10:1462:10 | b [element 2] | array_flow.rb:1462:10:1462:13 | ...[...] | -| array_flow.rb:1463:10:1463:10 | b [element 3] | array_flow.rb:1463:10:1463:13 | ...[...] | -| array_flow.rb:1464:10:1464:10 | b [element 2] | array_flow.rb:1464:10:1464:13 | ...[...] | -| array_flow.rb:1464:10:1464:10 | b [element 3] | array_flow.rb:1464:10:1464:13 | ...[...] | -| array_flow.rb:1465:5:1465:5 | [post] a [element] | array_flow.rb:1466:9:1466:9 | a [element] | -| array_flow.rb:1465:12:1465:24 | call to source | array_flow.rb:1465:5:1465:5 | [post] a [element] | -| array_flow.rb:1466:5:1466:5 | b [element 2] | array_flow.rb:1467:10:1467:10 | b [element 2] | -| array_flow.rb:1466:5:1466:5 | b [element] | array_flow.rb:1467:10:1467:10 | b [element] | -| array_flow.rb:1466:9:1466:9 | a [element 2] | array_flow.rb:1466:9:1466:17 | call to take [element 2] | -| array_flow.rb:1466:9:1466:9 | a [element] | array_flow.rb:1466:9:1466:17 | call to take [element] | -| array_flow.rb:1466:9:1466:17 | call to take [element 2] | array_flow.rb:1466:5:1466:5 | b [element 2] | -| array_flow.rb:1466:9:1466:17 | call to take [element] | array_flow.rb:1466:5:1466:5 | b [element] | -| array_flow.rb:1467:10:1467:10 | b [element 2] | array_flow.rb:1467:10:1467:13 | ...[...] | -| array_flow.rb:1467:10:1467:10 | b [element] | array_flow.rb:1467:10:1467:13 | ...[...] | -| array_flow.rb:1471:5:1471:5 | a [element 2] | array_flow.rb:1472:9:1472:9 | a [element 2] | -| array_flow.rb:1471:16:1471:26 | call to source | array_flow.rb:1471:5:1471:5 | a [element 2] | -| array_flow.rb:1472:5:1472:5 | b [element 2] | array_flow.rb:1478:10:1478:10 | b [element 2] | -| array_flow.rb:1472:9:1472:9 | a [element 2] | array_flow.rb:1472:9:1475:7 | call to take_while [element 2] | -| array_flow.rb:1472:9:1472:9 | a [element 2] | array_flow.rb:1472:26:1472:26 | x | -| array_flow.rb:1472:9:1475:7 | call to take_while [element 2] | array_flow.rb:1472:5:1472:5 | b [element 2] | -| array_flow.rb:1472:26:1472:26 | x | array_flow.rb:1473:14:1473:14 | x | -| array_flow.rb:1478:10:1478:10 | b [element 2] | array_flow.rb:1478:10:1478:13 | ...[...] | -| array_flow.rb:1484:5:1484:5 | a [element 3] | array_flow.rb:1485:9:1485:9 | a [element 3] | -| array_flow.rb:1484:19:1484:29 | call to source | array_flow.rb:1484:5:1484:5 | a [element 3] | -| array_flow.rb:1485:5:1485:5 | b [element 3] | array_flow.rb:1486:10:1486:10 | b [element 3] | -| array_flow.rb:1485:9:1485:9 | a [element 3] | array_flow.rb:1485:9:1485:14 | call to to_a [element 3] | -| array_flow.rb:1485:9:1485:14 | call to to_a [element 3] | array_flow.rb:1485:5:1485:5 | b [element 3] | -| array_flow.rb:1486:10:1486:10 | b [element 3] | array_flow.rb:1486:10:1486:13 | ...[...] | -| array_flow.rb:1490:5:1490:5 | a [element 2] | array_flow.rb:1491:9:1491:9 | a [element 2] | -| array_flow.rb:1490:16:1490:26 | call to source | array_flow.rb:1490:5:1490:5 | a [element 2] | -| array_flow.rb:1491:5:1491:5 | b [element 2] | array_flow.rb:1494:10:1494:10 | b [element 2] | -| array_flow.rb:1491:9:1491:9 | a [element 2] | array_flow.rb:1491:9:1491:16 | call to to_ary [element 2] | -| array_flow.rb:1491:9:1491:16 | call to to_ary [element 2] | array_flow.rb:1491:5:1491:5 | b [element 2] | -| array_flow.rb:1494:10:1494:10 | b [element 2] | array_flow.rb:1494:10:1494:13 | ...[...] | -| array_flow.rb:1507:5:1507:5 | a [element 0, element 1] | array_flow.rb:1508:9:1508:9 | a [element 0, element 1] | -| array_flow.rb:1507:5:1507:5 | a [element 1, element 1] | array_flow.rb:1508:9:1508:9 | a [element 1, element 1] | -| array_flow.rb:1507:5:1507:5 | a [element 2, element 1] | array_flow.rb:1508:9:1508:9 | a [element 2, element 1] | -| array_flow.rb:1507:14:1507:26 | call to source | array_flow.rb:1507:5:1507:5 | a [element 0, element 1] | -| array_flow.rb:1507:34:1507:46 | call to source | array_flow.rb:1507:5:1507:5 | a [element 1, element 1] | -| array_flow.rb:1507:54:1507:66 | call to source | array_flow.rb:1507:5:1507:5 | a [element 2, element 1] | -| array_flow.rb:1508:5:1508:5 | b [element 1, element 0] | array_flow.rb:1512:10:1512:10 | b [element 1, element 0] | -| array_flow.rb:1508:5:1508:5 | b [element 1, element 1] | array_flow.rb:1513:10:1513:10 | b [element 1, element 1] | -| array_flow.rb:1508:5:1508:5 | b [element 1, element 2] | array_flow.rb:1514:10:1514:10 | b [element 1, element 2] | -| array_flow.rb:1508:9:1508:9 | a [element 0, element 1] | array_flow.rb:1508:9:1508:19 | call to transpose [element 1, element 0] | -| array_flow.rb:1508:9:1508:9 | a [element 1, element 1] | array_flow.rb:1508:9:1508:19 | call to transpose [element 1, element 1] | -| array_flow.rb:1508:9:1508:9 | a [element 2, element 1] | array_flow.rb:1508:9:1508:19 | call to transpose [element 1, element 2] | -| array_flow.rb:1508:9:1508:19 | call to transpose [element 1, element 0] | array_flow.rb:1508:5:1508:5 | b [element 1, element 0] | -| array_flow.rb:1508:9:1508:19 | call to transpose [element 1, element 1] | array_flow.rb:1508:5:1508:5 | b [element 1, element 1] | -| array_flow.rb:1508:9:1508:19 | call to transpose [element 1, element 2] | array_flow.rb:1508:5:1508:5 | b [element 1, element 2] | -| array_flow.rb:1512:10:1512:10 | b [element 1, element 0] | array_flow.rb:1512:10:1512:13 | ...[...] [element 0] | -| array_flow.rb:1512:10:1512:13 | ...[...] [element 0] | array_flow.rb:1512:10:1512:16 | ...[...] | -| array_flow.rb:1513:10:1513:10 | b [element 1, element 1] | array_flow.rb:1513:10:1513:13 | ...[...] [element 1] | -| array_flow.rb:1513:10:1513:13 | ...[...] [element 1] | array_flow.rb:1513:10:1513:16 | ...[...] | -| array_flow.rb:1514:10:1514:10 | b [element 1, element 2] | array_flow.rb:1514:10:1514:13 | ...[...] [element 2] | -| array_flow.rb:1514:10:1514:13 | ...[...] [element 2] | array_flow.rb:1514:10:1514:16 | ...[...] | -| array_flow.rb:1518:5:1518:5 | a [element 2] | array_flow.rb:1521:9:1521:9 | a [element 2] | -| array_flow.rb:1518:16:1518:28 | call to source | array_flow.rb:1518:5:1518:5 | a [element 2] | -| array_flow.rb:1519:5:1519:5 | b [element 1] | array_flow.rb:1521:17:1521:17 | b [element 1] | -| array_flow.rb:1519:13:1519:25 | call to source | array_flow.rb:1519:5:1519:5 | b [element 1] | -| array_flow.rb:1520:5:1520:5 | c [element 1] | array_flow.rb:1521:20:1521:20 | c [element 1] | -| array_flow.rb:1520:13:1520:25 | call to source | array_flow.rb:1520:5:1520:5 | c [element 1] | -| array_flow.rb:1521:5:1521:5 | d [element] | array_flow.rb:1522:10:1522:10 | d [element] | -| array_flow.rb:1521:5:1521:5 | d [element] | array_flow.rb:1523:10:1523:10 | d [element] | -| array_flow.rb:1521:5:1521:5 | d [element] | array_flow.rb:1524:10:1524:10 | d [element] | -| array_flow.rb:1521:9:1521:9 | a [element 2] | array_flow.rb:1521:9:1521:21 | call to union [element] | -| array_flow.rb:1521:9:1521:21 | call to union [element] | array_flow.rb:1521:5:1521:5 | d [element] | -| array_flow.rb:1521:17:1521:17 | b [element 1] | array_flow.rb:1521:9:1521:21 | call to union [element] | -| array_flow.rb:1521:20:1521:20 | c [element 1] | array_flow.rb:1521:9:1521:21 | call to union [element] | -| array_flow.rb:1522:10:1522:10 | d [element] | array_flow.rb:1522:10:1522:13 | ...[...] | -| array_flow.rb:1523:10:1523:10 | d [element] | array_flow.rb:1523:10:1523:13 | ...[...] | -| array_flow.rb:1524:10:1524:10 | d [element] | array_flow.rb:1524:10:1524:13 | ...[...] | -| array_flow.rb:1528:5:1528:5 | a [element 3] | array_flow.rb:1530:9:1530:9 | a [element 3] | -| array_flow.rb:1528:5:1528:5 | a [element 3] | array_flow.rb:1534:9:1534:9 | a [element 3] | -| array_flow.rb:1528:5:1528:5 | a [element 4] | array_flow.rb:1530:9:1530:9 | a [element 4] | -| array_flow.rb:1528:5:1528:5 | a [element 4] | array_flow.rb:1534:9:1534:9 | a [element 4] | -| array_flow.rb:1528:19:1528:31 | call to source | array_flow.rb:1528:5:1528:5 | a [element 3] | -| array_flow.rb:1528:34:1528:46 | call to source | array_flow.rb:1528:5:1528:5 | a [element 4] | -| array_flow.rb:1530:5:1530:5 | b [element] | array_flow.rb:1531:10:1531:10 | b [element] | -| array_flow.rb:1530:5:1530:5 | b [element] | array_flow.rb:1532:10:1532:10 | b [element] | -| array_flow.rb:1530:9:1530:9 | a [element 3] | array_flow.rb:1530:9:1530:14 | call to uniq [element] | -| array_flow.rb:1530:9:1530:9 | a [element 4] | array_flow.rb:1530:9:1530:14 | call to uniq [element] | -| array_flow.rb:1530:9:1530:14 | call to uniq [element] | array_flow.rb:1530:5:1530:5 | b [element] | -| array_flow.rb:1531:10:1531:10 | b [element] | array_flow.rb:1531:10:1531:13 | ...[...] | -| array_flow.rb:1532:10:1532:10 | b [element] | array_flow.rb:1532:10:1532:13 | ...[...] | -| array_flow.rb:1534:5:1534:5 | c [element] | array_flow.rb:1538:10:1538:10 | c [element] | -| array_flow.rb:1534:9:1534:9 | a [element 3] | array_flow.rb:1534:9:1537:7 | call to uniq [element] | -| array_flow.rb:1534:9:1534:9 | a [element 3] | array_flow.rb:1534:20:1534:20 | x | -| array_flow.rb:1534:9:1534:9 | a [element 4] | array_flow.rb:1534:9:1537:7 | call to uniq [element] | -| array_flow.rb:1534:9:1534:9 | a [element 4] | array_flow.rb:1534:20:1534:20 | x | -| array_flow.rb:1534:9:1537:7 | call to uniq [element] | array_flow.rb:1534:5:1534:5 | c [element] | -| array_flow.rb:1534:20:1534:20 | x | array_flow.rb:1535:14:1535:14 | x | -| array_flow.rb:1538:10:1538:10 | c [element] | array_flow.rb:1538:10:1538:13 | ...[...] | -| array_flow.rb:1542:5:1542:5 | a [element 2] | array_flow.rb:1543:9:1543:9 | a [element 2] | -| array_flow.rb:1542:5:1542:5 | a [element 3] | array_flow.rb:1543:9:1543:9 | a [element 3] | -| array_flow.rb:1542:16:1542:28 | call to source | array_flow.rb:1542:5:1542:5 | a [element 2] | -| array_flow.rb:1542:31:1542:43 | call to source | array_flow.rb:1542:5:1542:5 | a [element 3] | -| array_flow.rb:1543:5:1543:5 | b [element] | array_flow.rb:1544:10:1544:10 | b [element] | -| array_flow.rb:1543:5:1543:5 | b [element] | array_flow.rb:1545:10:1545:10 | b [element] | -| array_flow.rb:1543:9:1543:9 | [post] a [element] | array_flow.rb:1546:10:1546:10 | a [element] | -| array_flow.rb:1543:9:1543:9 | [post] a [element] | array_flow.rb:1547:10:1547:10 | a [element] | -| array_flow.rb:1543:9:1543:9 | a [element 2] | array_flow.rb:1543:9:1543:9 | [post] a [element] | -| array_flow.rb:1543:9:1543:9 | a [element 2] | array_flow.rb:1543:9:1543:15 | call to uniq! [element] | -| array_flow.rb:1543:9:1543:9 | a [element 3] | array_flow.rb:1543:9:1543:9 | [post] a [element] | -| array_flow.rb:1543:9:1543:9 | a [element 3] | array_flow.rb:1543:9:1543:15 | call to uniq! [element] | -| array_flow.rb:1543:9:1543:15 | call to uniq! [element] | array_flow.rb:1543:5:1543:5 | b [element] | -| array_flow.rb:1544:10:1544:10 | b [element] | array_flow.rb:1544:10:1544:13 | ...[...] | -| array_flow.rb:1545:10:1545:10 | b [element] | array_flow.rb:1545:10:1545:13 | ...[...] | -| array_flow.rb:1546:10:1546:10 | a [element] | array_flow.rb:1546:10:1546:13 | ...[...] | -| array_flow.rb:1547:10:1547:10 | a [element] | array_flow.rb:1547:10:1547:13 | ...[...] | -| array_flow.rb:1549:5:1549:5 | a [element 2] | array_flow.rb:1550:9:1550:9 | a [element 2] | -| array_flow.rb:1549:5:1549:5 | a [element 3] | array_flow.rb:1550:9:1550:9 | a [element 3] | -| array_flow.rb:1549:16:1549:28 | call to source | array_flow.rb:1549:5:1549:5 | a [element 2] | -| array_flow.rb:1549:31:1549:43 | call to source | array_flow.rb:1549:5:1549:5 | a [element 3] | -| array_flow.rb:1550:5:1550:5 | b [element] | array_flow.rb:1554:10:1554:10 | b [element] | -| array_flow.rb:1550:5:1550:5 | b [element] | array_flow.rb:1555:10:1555:10 | b [element] | -| array_flow.rb:1550:9:1550:9 | [post] a [element] | array_flow.rb:1556:10:1556:10 | a [element] | -| array_flow.rb:1550:9:1550:9 | [post] a [element] | array_flow.rb:1557:10:1557:10 | a [element] | -| array_flow.rb:1550:9:1550:9 | a [element 2] | array_flow.rb:1550:9:1550:9 | [post] a [element] | -| array_flow.rb:1550:9:1550:9 | a [element 2] | array_flow.rb:1550:9:1553:7 | call to uniq! [element] | -| array_flow.rb:1550:9:1550:9 | a [element 2] | array_flow.rb:1550:21:1550:21 | x | -| array_flow.rb:1550:9:1550:9 | a [element 3] | array_flow.rb:1550:9:1550:9 | [post] a [element] | -| array_flow.rb:1550:9:1550:9 | a [element 3] | array_flow.rb:1550:9:1553:7 | call to uniq! [element] | -| array_flow.rb:1550:9:1550:9 | a [element 3] | array_flow.rb:1550:21:1550:21 | x | -| array_flow.rb:1550:9:1553:7 | call to uniq! [element] | array_flow.rb:1550:5:1550:5 | b [element] | -| array_flow.rb:1550:21:1550:21 | x | array_flow.rb:1551:14:1551:14 | x | -| array_flow.rb:1554:10:1554:10 | b [element] | array_flow.rb:1554:10:1554:13 | ...[...] | -| array_flow.rb:1555:10:1555:10 | b [element] | array_flow.rb:1555:10:1555:13 | ...[...] | -| array_flow.rb:1556:10:1556:10 | a [element] | array_flow.rb:1556:10:1556:13 | ...[...] | -| array_flow.rb:1557:10:1557:10 | a [element] | array_flow.rb:1557:10:1557:13 | ...[...] | -| array_flow.rb:1561:5:1561:5 | a [element 2] | array_flow.rb:1562:5:1562:5 | a [element 2] | -| array_flow.rb:1561:16:1561:28 | call to source | array_flow.rb:1561:5:1561:5 | a [element 2] | -| array_flow.rb:1562:5:1562:5 | [post] a [element 2] | array_flow.rb:1565:10:1565:10 | a [element 2] | -| array_flow.rb:1562:5:1562:5 | [post] a [element 5] | array_flow.rb:1568:10:1568:10 | a [element 5] | -| array_flow.rb:1562:5:1562:5 | a [element 2] | array_flow.rb:1562:5:1562:5 | [post] a [element 5] | -| array_flow.rb:1562:21:1562:33 | call to source | array_flow.rb:1562:5:1562:5 | [post] a [element 2] | -| array_flow.rb:1565:10:1565:10 | a [element 2] | array_flow.rb:1565:10:1565:13 | ...[...] | -| array_flow.rb:1568:10:1568:10 | a [element 5] | array_flow.rb:1568:10:1568:13 | ...[...] | -| array_flow.rb:1572:5:1572:5 | a [element 1] | array_flow.rb:1574:9:1574:9 | a [element 1] | -| array_flow.rb:1572:5:1572:5 | a [element 1] | array_flow.rb:1580:9:1580:9 | a [element 1] | -| array_flow.rb:1572:5:1572:5 | a [element 1] | array_flow.rb:1584:9:1584:9 | a [element 1] | -| array_flow.rb:1572:5:1572:5 | a [element 1] | array_flow.rb:1588:9:1588:9 | a [element 1] | -| array_flow.rb:1572:5:1572:5 | a [element 3] | array_flow.rb:1580:9:1580:9 | a [element 3] | -| array_flow.rb:1572:5:1572:5 | a [element 3] | array_flow.rb:1584:9:1584:9 | a [element 3] | -| array_flow.rb:1572:5:1572:5 | a [element 3] | array_flow.rb:1588:9:1588:9 | a [element 3] | -| array_flow.rb:1572:13:1572:25 | call to source | array_flow.rb:1572:5:1572:5 | a [element 1] | -| array_flow.rb:1572:31:1572:43 | call to source | array_flow.rb:1572:5:1572:5 | a [element 3] | -| array_flow.rb:1574:5:1574:5 | b [element 1] | array_flow.rb:1576:10:1576:10 | b [element 1] | -| array_flow.rb:1574:5:1574:5 | b [element 3] | array_flow.rb:1578:10:1578:10 | b [element 3] | -| array_flow.rb:1574:9:1574:9 | a [element 1] | array_flow.rb:1574:9:1574:31 | call to values_at [element 1] | -| array_flow.rb:1574:9:1574:9 | a [element 1] | array_flow.rb:1574:9:1574:31 | call to values_at [element 3] | -| array_flow.rb:1574:9:1574:31 | call to values_at [element 1] | array_flow.rb:1574:5:1574:5 | b [element 1] | -| array_flow.rb:1574:9:1574:31 | call to values_at [element 3] | array_flow.rb:1574:5:1574:5 | b [element 3] | -| array_flow.rb:1576:10:1576:10 | b [element 1] | array_flow.rb:1576:10:1576:13 | ...[...] | -| array_flow.rb:1578:10:1578:10 | b [element 3] | array_flow.rb:1578:10:1578:13 | ...[...] | -| array_flow.rb:1580:5:1580:5 | b [element] | array_flow.rb:1581:10:1581:10 | b [element] | -| array_flow.rb:1580:5:1580:5 | b [element] | array_flow.rb:1582:10:1582:10 | b [element] | -| array_flow.rb:1580:9:1580:9 | a [element 1] | array_flow.rb:1580:9:1580:25 | call to values_at [element] | -| array_flow.rb:1580:9:1580:9 | a [element 3] | array_flow.rb:1580:9:1580:25 | call to values_at [element] | -| array_flow.rb:1580:9:1580:25 | call to values_at [element] | array_flow.rb:1580:5:1580:5 | b [element] | -| array_flow.rb:1581:10:1581:10 | b [element] | array_flow.rb:1581:10:1581:13 | ...[...] | -| array_flow.rb:1582:10:1582:10 | b [element] | array_flow.rb:1582:10:1582:13 | ...[...] | -| array_flow.rb:1584:5:1584:5 | b [element] | array_flow.rb:1585:10:1585:10 | b [element] | -| array_flow.rb:1584:5:1584:5 | b [element] | array_flow.rb:1586:10:1586:10 | b [element] | -| array_flow.rb:1584:9:1584:9 | a [element 1] | array_flow.rb:1584:9:1584:26 | call to values_at [element] | -| array_flow.rb:1584:9:1584:9 | a [element 3] | array_flow.rb:1584:9:1584:26 | call to values_at [element] | -| array_flow.rb:1584:9:1584:26 | call to values_at [element] | array_flow.rb:1584:5:1584:5 | b [element] | -| array_flow.rb:1585:10:1585:10 | b [element] | array_flow.rb:1585:10:1585:13 | ...[...] | -| array_flow.rb:1586:10:1586:10 | b [element] | array_flow.rb:1586:10:1586:13 | ...[...] | -| array_flow.rb:1588:5:1588:5 | b [element 1] | array_flow.rb:1590:10:1590:10 | b [element 1] | -| array_flow.rb:1588:5:1588:5 | b [element] | array_flow.rb:1589:10:1589:10 | b [element] | -| array_flow.rb:1588:5:1588:5 | b [element] | array_flow.rb:1590:10:1590:10 | b [element] | -| array_flow.rb:1588:5:1588:5 | b [element] | array_flow.rb:1591:10:1591:10 | b [element] | -| array_flow.rb:1588:5:1588:5 | b [element] | array_flow.rb:1592:10:1592:10 | b [element] | -| array_flow.rb:1588:9:1588:9 | a [element 1] | array_flow.rb:1588:9:1588:28 | call to values_at [element] | -| array_flow.rb:1588:9:1588:9 | a [element 3] | array_flow.rb:1588:9:1588:28 | call to values_at [element 1] | -| array_flow.rb:1588:9:1588:9 | a [element 3] | array_flow.rb:1588:9:1588:28 | call to values_at [element] | -| array_flow.rb:1588:9:1588:28 | call to values_at [element 1] | array_flow.rb:1588:5:1588:5 | b [element 1] | -| array_flow.rb:1588:9:1588:28 | call to values_at [element] | array_flow.rb:1588:5:1588:5 | b [element] | -| array_flow.rb:1589:10:1589:10 | b [element] | array_flow.rb:1589:10:1589:13 | ...[...] | -| array_flow.rb:1590:10:1590:10 | b [element 1] | array_flow.rb:1590:10:1590:13 | ...[...] | -| array_flow.rb:1590:10:1590:10 | b [element] | array_flow.rb:1590:10:1590:13 | ...[...] | -| array_flow.rb:1591:10:1591:10 | b [element] | array_flow.rb:1591:10:1591:13 | ...[...] | -| array_flow.rb:1592:10:1592:10 | b [element] | array_flow.rb:1592:10:1592:13 | ...[...] | -| array_flow.rb:1596:5:1596:5 | a [element 2] | array_flow.rb:1599:9:1599:9 | a [element 2] | -| array_flow.rb:1596:5:1596:5 | a [element 2] | array_flow.rb:1604:5:1604:5 | a [element 2] | -| array_flow.rb:1596:16:1596:28 | call to source | array_flow.rb:1596:5:1596:5 | a [element 2] | -| array_flow.rb:1597:5:1597:5 | b [element 1] | array_flow.rb:1599:15:1599:15 | b [element 1] | -| array_flow.rb:1597:5:1597:5 | b [element 1] | array_flow.rb:1604:11:1604:11 | b [element 1] | -| array_flow.rb:1597:13:1597:25 | call to source | array_flow.rb:1597:5:1597:5 | b [element 1] | -| array_flow.rb:1598:5:1598:5 | c [element 0] | array_flow.rb:1599:18:1599:18 | c [element 0] | -| array_flow.rb:1598:5:1598:5 | c [element 0] | array_flow.rb:1604:14:1604:14 | c [element 0] | -| array_flow.rb:1598:10:1598:22 | call to source | array_flow.rb:1598:5:1598:5 | c [element 0] | -| array_flow.rb:1599:5:1599:5 | d [element 0, element 2] | array_flow.rb:1601:10:1601:10 | d [element 0, element 2] | -| array_flow.rb:1599:5:1599:5 | d [element 1, element 1] | array_flow.rb:1602:10:1602:10 | d [element 1, element 1] | -| array_flow.rb:1599:5:1599:5 | d [element 2, element 0] | array_flow.rb:1603:10:1603:10 | d [element 2, element 0] | -| array_flow.rb:1599:9:1599:9 | a [element 2] | array_flow.rb:1599:9:1599:19 | call to zip [element 2, element 0] | -| array_flow.rb:1599:9:1599:19 | call to zip [element 0, element 2] | array_flow.rb:1599:5:1599:5 | d [element 0, element 2] | -| array_flow.rb:1599:9:1599:19 | call to zip [element 1, element 1] | array_flow.rb:1599:5:1599:5 | d [element 1, element 1] | -| array_flow.rb:1599:9:1599:19 | call to zip [element 2, element 0] | array_flow.rb:1599:5:1599:5 | d [element 2, element 0] | -| array_flow.rb:1599:15:1599:15 | b [element 1] | array_flow.rb:1599:9:1599:19 | call to zip [element 1, element 1] | -| array_flow.rb:1599:18:1599:18 | c [element 0] | array_flow.rb:1599:9:1599:19 | call to zip [element 0, element 2] | -| array_flow.rb:1601:10:1601:10 | d [element 0, element 2] | array_flow.rb:1601:10:1601:13 | ...[...] [element 2] | -| array_flow.rb:1601:10:1601:13 | ...[...] [element 2] | array_flow.rb:1601:10:1601:16 | ...[...] | -| array_flow.rb:1602:10:1602:10 | d [element 1, element 1] | array_flow.rb:1602:10:1602:13 | ...[...] [element 1] | -| array_flow.rb:1602:10:1602:13 | ...[...] [element 1] | array_flow.rb:1602:10:1602:16 | ...[...] | -| array_flow.rb:1603:10:1603:10 | d [element 2, element 0] | array_flow.rb:1603:10:1603:13 | ...[...] [element 0] | -| array_flow.rb:1603:10:1603:13 | ...[...] [element 0] | array_flow.rb:1603:10:1603:16 | ...[...] | -| array_flow.rb:1604:5:1604:5 | a [element 2] | array_flow.rb:1604:21:1604:21 | x [element 0] | -| array_flow.rb:1604:11:1604:11 | b [element 1] | array_flow.rb:1604:21:1604:21 | x [element 1] | -| array_flow.rb:1604:14:1604:14 | c [element 0] | array_flow.rb:1604:21:1604:21 | x [element 2] | -| array_flow.rb:1604:21:1604:21 | x [element 0] | array_flow.rb:1605:14:1605:14 | x [element 0] | -| array_flow.rb:1604:21:1604:21 | x [element 1] | array_flow.rb:1606:14:1606:14 | x [element 1] | -| array_flow.rb:1604:21:1604:21 | x [element 2] | array_flow.rb:1607:14:1607:14 | x [element 2] | -| array_flow.rb:1605:14:1605:14 | x [element 0] | array_flow.rb:1605:14:1605:17 | ...[...] | -| array_flow.rb:1606:14:1606:14 | x [element 1] | array_flow.rb:1606:14:1606:17 | ...[...] | -| array_flow.rb:1607:14:1607:14 | x [element 2] | array_flow.rb:1607:14:1607:17 | ...[...] | -| array_flow.rb:1612:5:1612:5 | a [element 2] | array_flow.rb:1614:9:1614:9 | a [element 2] | -| array_flow.rb:1612:16:1612:28 | call to source | array_flow.rb:1612:5:1612:5 | a [element 2] | -| array_flow.rb:1613:5:1613:5 | b [element 1] | array_flow.rb:1614:13:1614:13 | b [element 1] | -| array_flow.rb:1613:13:1613:25 | call to source | array_flow.rb:1613:5:1613:5 | b [element 1] | -| array_flow.rb:1614:5:1614:5 | c [element] | array_flow.rb:1615:10:1615:10 | c [element] | -| array_flow.rb:1614:5:1614:5 | c [element] | array_flow.rb:1616:10:1616:10 | c [element] | -| array_flow.rb:1614:5:1614:5 | c [element] | array_flow.rb:1617:10:1617:10 | c [element] | -| array_flow.rb:1614:9:1614:9 | a [element 2] | array_flow.rb:1614:9:1614:13 | ... \| ... [element] | -| array_flow.rb:1614:9:1614:13 | ... \| ... [element] | array_flow.rb:1614:5:1614:5 | c [element] | -| array_flow.rb:1614:13:1614:13 | b [element 1] | array_flow.rb:1614:9:1614:13 | ... \| ... [element] | -| array_flow.rb:1615:10:1615:10 | c [element] | array_flow.rb:1615:10:1615:13 | ...[...] | -| array_flow.rb:1616:10:1616:10 | c [element] | array_flow.rb:1616:10:1616:13 | ...[...] | -| array_flow.rb:1617:10:1617:10 | c [element] | array_flow.rb:1617:10:1617:13 | ...[...] | -| array_flow.rb:1622:5:1622:5 | [post] a [element, element 0] | array_flow.rb:1623:10:1623:10 | a [element, element 0] | -| array_flow.rb:1622:5:1622:5 | [post] a [element, element 0] | array_flow.rb:1626:10:1626:10 | a [element, element 0] | -| array_flow.rb:1622:5:1622:5 | [post] a [element, element 0] | array_flow.rb:1627:10:1627:10 | a [element, element 0] | -| array_flow.rb:1622:5:1622:8 | [post] ...[...] [element 0] | array_flow.rb:1622:5:1622:5 | [post] a [element, element 0] | -| array_flow.rb:1622:15:1622:27 | call to source | array_flow.rb:1622:5:1622:8 | [post] ...[...] [element 0] | -| array_flow.rb:1623:10:1623:10 | a [element, element 0] | array_flow.rb:1623:10:1623:13 | ...[...] [element 0] | -| array_flow.rb:1623:10:1623:13 | ...[...] [element 0] | array_flow.rb:1623:10:1623:16 | ...[...] | -| 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] | -| array_flow.rb:1625:5:1625:8 | [post] ...[...] [element 0] | array_flow.rb:1625:5:1625:5 | [post] a [element 1, element 0] | -| array_flow.rb:1625:15:1625:27 | call to source | array_flow.rb:1625:5:1625:8 | [post] ...[...] [element 0] | -| array_flow.rb:1626:10:1626:10 | a [element 1, element 0] | array_flow.rb:1626:10:1626:13 | ...[...] [element 0] | -| array_flow.rb:1626:10:1626:10 | a [element, element 0] | array_flow.rb:1626:10:1626:13 | ...[...] [element 0] | -| array_flow.rb:1626:10:1626:13 | ...[...] [element 0] | array_flow.rb:1626:10:1626:16 | ...[...] | -| array_flow.rb:1627:10:1627:10 | a [element, element 0] | array_flow.rb:1627:10:1627:13 | ...[...] [element 0] | -| array_flow.rb:1627:10:1627:13 | ...[...] [element 0] | array_flow.rb:1627:10:1627:16 | ...[...] | -| array_flow.rb:1632:5:1632:5 | [post] a [element 0] | array_flow.rb:1641:10:1641:10 | a [element 0] | -| array_flow.rb:1632:5:1632:5 | [post] a [element 0] | array_flow.rb:1643:10:1643:10 | a [element 0] | -| array_flow.rb:1632:12:1632:24 | call to source | array_flow.rb:1632:5:1632:5 | [post] a [element 0] | -| array_flow.rb:1634:5:1634:5 | [post] a [element] | array_flow.rb:1639:10:1639:10 | a [element] | -| array_flow.rb:1634:5:1634:5 | [post] a [element] | array_flow.rb:1641:10:1641:10 | a [element] | -| array_flow.rb:1634:5:1634:5 | [post] a [element] | array_flow.rb:1643:10:1643:10 | a [element] | -| array_flow.rb:1634:16:1634:28 | call to source | array_flow.rb:1634:5:1634:5 | [post] a [element] | -| array_flow.rb:1636:5:1636:5 | [post] a [element] | array_flow.rb:1639:10:1639:10 | a [element] | -| array_flow.rb:1636:5:1636:5 | [post] a [element] | array_flow.rb:1641:10:1641:10 | a [element] | -| array_flow.rb:1636:5:1636:5 | [post] a [element] | array_flow.rb:1643:10:1643:10 | a [element] | -| array_flow.rb:1636:14:1636:26 | call to source | array_flow.rb:1636:5:1636:5 | [post] a [element] | -| array_flow.rb:1638:5:1638:5 | [post] a [element] | array_flow.rb:1639:10:1639:10 | a [element] | -| array_flow.rb:1638:5:1638:5 | [post] a [element] | array_flow.rb:1641:10:1641:10 | a [element] | -| array_flow.rb:1638:5:1638:5 | [post] a [element] | array_flow.rb:1643:10:1643:10 | a [element] | -| array_flow.rb:1638:16:1638:28 | call to source | array_flow.rb:1638:5:1638:5 | [post] a [element] | -| array_flow.rb:1639:10:1639:10 | a [element] | array_flow.rb:1639:10:1639:13 | ...[...] | -| array_flow.rb:1641:10:1641:10 | a [element 0] | array_flow.rb:1641:10:1641:17 | ...[...] | -| array_flow.rb:1641:10:1641:10 | a [element] | array_flow.rb:1641:10:1641:17 | ...[...] | -| array_flow.rb:1643:10:1643:10 | a [element 0] | array_flow.rb:1643:10:1643:15 | ...[...] | -| array_flow.rb:1643:10:1643:10 | a [element] | array_flow.rb:1643:10:1643:15 | ...[...] | -| array_flow.rb:1647:5:1647:5 | a [element 1] | array_flow.rb:1649:10:1649:10 | a [element 1] | -| array_flow.rb:1647:5:1647:5 | a [element 1] | array_flow.rb:1651:10:1651:10 | a [element 1] | -| array_flow.rb:1647:9:1647:32 | ...[...] [element 1] | array_flow.rb:1647:5:1647:5 | a [element 1] | -| array_flow.rb:1647:18:1647:28 | call to source | array_flow.rb:1647:9:1647:32 | ...[...] [element 1] | -| array_flow.rb:1649:10:1649:10 | a [element 1] | array_flow.rb:1649:10:1649:13 | ...[...] | -| array_flow.rb:1651:10:1651:10 | a [element 1] | array_flow.rb:1651:10:1651:13 | ...[...] | -| array_flow.rb:1668:9:1668:10 | a2 [element 1] | array_flow.rb:1670:14:1670:15 | a2 [element 1] | -| array_flow.rb:1668:9:1668:10 | a2 [element 1] | array_flow.rb:1672:14:1672:15 | a2 [element 1] | -| array_flow.rb:1668:14:1668:41 | ...[...] [element 1] | array_flow.rb:1668:9:1668:10 | a2 [element 1] | -| array_flow.rb:1668:25:1668:37 | call to source | array_flow.rb:1668:14:1668:41 | ...[...] [element 1] | -| array_flow.rb:1670:14:1670:15 | a2 [element 1] | array_flow.rb:1670:14:1670:18 | ...[...] | -| array_flow.rb:1672:14:1672:15 | a2 [element 1] | array_flow.rb:1672:14:1672:18 | ...[...] | +| array_flow.rb:2:5:2:5 | a [element 0] | array_flow.rb:3:10:3:10 | a [element 0] | provenance | | +| array_flow.rb:2:5:2:5 | a [element 0] | array_flow.rb:5:10:5:10 | a [element 0] | provenance | | +| array_flow.rb:2:9:2:20 | * ... [element 0] | array_flow.rb:2:5:2:5 | a [element 0] | provenance | | +| array_flow.rb:2:10:2:20 | call to source | array_flow.rb:2:9:2:20 | * ... [element 0] | provenance | | +| array_flow.rb:3:10:3:10 | a [element 0] | array_flow.rb:3:10:3:13 | ...[...] | provenance | | +| array_flow.rb:5:10:5:10 | a [element 0] | array_flow.rb:5:10:5:13 | ...[...] | provenance | | +| array_flow.rb:9:5:9:5 | a [element 1] | array_flow.rb:11:10:11:10 | a [element 1] | provenance | | +| array_flow.rb:9:5:9:5 | a [element 1] | array_flow.rb:13:10:13:10 | a [element 1] | provenance | | +| array_flow.rb:9:13:9:21 | call to source | array_flow.rb:9:5:9:5 | a [element 1] | provenance | | +| array_flow.rb:11:10:11:10 | a [element 1] | array_flow.rb:11:10:11:13 | ...[...] | provenance | | +| array_flow.rb:13:10:13:10 | a [element 1] | array_flow.rb:13:10:13:13 | ...[...] | provenance | | +| array_flow.rb:17:5:17:5 | a [element] | array_flow.rb:18:10:18:10 | a [element] | provenance | | +| array_flow.rb:17:5:17:5 | a [element] | array_flow.rb:19:10:19:10 | a [element] | provenance | | +| array_flow.rb:17:5:17:5 | a [element] | array_flow.rb:21:19:21:19 | a [element] | provenance | | +| array_flow.rb:17:9:17:33 | call to new [element] | array_flow.rb:17:5:17:5 | a [element] | provenance | | +| array_flow.rb:17:22:17:32 | call to source | array_flow.rb:17:9:17:33 | call to new [element] | provenance | | +| array_flow.rb:18:10:18:10 | a [element] | array_flow.rb:18:10:18:13 | ...[...] | provenance | | +| array_flow.rb:19:10:19:10 | a [element] | array_flow.rb:19:10:19:13 | ...[...] | provenance | | +| array_flow.rb:21:5:21:5 | b [element] | array_flow.rb:22:10:22:10 | b [element] | provenance | | +| array_flow.rb:21:5:21:5 | b [element] | array_flow.rb:23:10:23:10 | b [element] | provenance | | +| array_flow.rb:21:9:21:20 | call to new [element] | array_flow.rb:21:5:21:5 | b [element] | provenance | | +| array_flow.rb:21:19:21:19 | a [element] | array_flow.rb:21:9:21:20 | call to new [element] | provenance | | +| array_flow.rb:22:10:22:10 | b [element] | array_flow.rb:22:10:22:13 | ...[...] | provenance | | +| array_flow.rb:23:10:23:10 | b [element] | array_flow.rb:23:10:23:13 | ...[...] | provenance | | +| array_flow.rb:25:5:25:5 | c [element] | array_flow.rb:28:10:28:10 | c [element] | provenance | | +| array_flow.rb:25:5:25:5 | c [element] | array_flow.rb:29:10:29:10 | c [element] | provenance | | +| array_flow.rb:25:9:27:7 | call to new [element] | array_flow.rb:25:5:25:5 | c [element] | provenance | | +| array_flow.rb:26:9:26:19 | call to source | array_flow.rb:25:9:27:7 | call to new [element] | provenance | | +| array_flow.rb:28:10:28:10 | c [element] | array_flow.rb:28:10:28:13 | ...[...] | provenance | | +| array_flow.rb:29:10:29:10 | c [element] | array_flow.rb:29:10:29:13 | ...[...] | provenance | | +| array_flow.rb:33:5:33:5 | a [element 0] | array_flow.rb:34:27:34:27 | a [element 0] | provenance | | +| array_flow.rb:33:10:33:18 | call to source | array_flow.rb:33:5:33:5 | a [element 0] | provenance | | +| array_flow.rb:34:5:34:5 | b [element 0] | array_flow.rb:35:10:35:10 | b [element 0] | provenance | | +| array_flow.rb:34:9:34:28 | call to try_convert [element 0] | array_flow.rb:34:5:34:5 | b [element 0] | provenance | | +| array_flow.rb:34:27:34:27 | a [element 0] | array_flow.rb:34:9:34:28 | call to try_convert [element 0] | provenance | | +| array_flow.rb:35:10:35:10 | b [element 0] | array_flow.rb:35:10:35:13 | ...[...] | provenance | | +| array_flow.rb:40:5:40:5 | a [element 0] | array_flow.rb:42:9:42:9 | a [element 0] | provenance | | +| array_flow.rb:40:10:40:20 | call to source | array_flow.rb:40:5:40:5 | a [element 0] | provenance | | +| array_flow.rb:41:5:41:5 | b [element 2] | array_flow.rb:42:13:42:13 | b [element 2] | provenance | | +| array_flow.rb:41:16:41:26 | call to source | array_flow.rb:41:5:41:5 | b [element 2] | provenance | | +| array_flow.rb:42:5:42:5 | c [element] | array_flow.rb:43:10:43:10 | c [element] | provenance | | +| array_flow.rb:42:5:42:5 | c [element] | array_flow.rb:44:10:44:10 | c [element] | provenance | | +| array_flow.rb:42:9:42:9 | a [element 0] | array_flow.rb:42:9:42:13 | ... & ... [element] | provenance | | +| array_flow.rb:42:9:42:13 | ... & ... [element] | array_flow.rb:42:5:42:5 | c [element] | provenance | | +| array_flow.rb:42:13:42:13 | b [element 2] | array_flow.rb:42:9:42:13 | ... & ... [element] | provenance | | +| array_flow.rb:43:10:43:10 | c [element] | array_flow.rb:43:10:43:13 | ...[...] | provenance | | +| array_flow.rb:44:10:44:10 | c [element] | array_flow.rb:44:10:44:13 | ...[...] | provenance | | +| array_flow.rb:48:5:48:5 | a [element 0] | array_flow.rb:49:9:49:9 | a [element 0] | provenance | | +| array_flow.rb:48:10:48:18 | call to source | array_flow.rb:48:5:48:5 | a [element 0] | provenance | | +| array_flow.rb:49:5:49:5 | b [element] | array_flow.rb:50:10:50:10 | b [element] | provenance | | +| array_flow.rb:49:5:49:5 | b [element] | array_flow.rb:51:10:51:10 | b [element] | provenance | | +| array_flow.rb:49:9:49:9 | a [element 0] | array_flow.rb:49:9:49:13 | ... * ... [element] | provenance | | +| array_flow.rb:49:9:49:13 | ... * ... [element] | array_flow.rb:49:5:49:5 | b [element] | provenance | | +| array_flow.rb:50:10:50:10 | b [element] | array_flow.rb:50:10:50:13 | ...[...] | provenance | | +| array_flow.rb:51:10:51:10 | b [element] | array_flow.rb:51:10:51:13 | ...[...] | provenance | | +| array_flow.rb:55:5:55:5 | a [element 0] | array_flow.rb:57:9:57:9 | a [element 0] | provenance | | +| array_flow.rb:55:10:55:20 | call to source | array_flow.rb:55:5:55:5 | a [element 0] | provenance | | +| array_flow.rb:56:5:56:5 | b [element 1] | array_flow.rb:57:13:57:13 | b [element 1] | provenance | | +| array_flow.rb:56:13:56:23 | call to source | array_flow.rb:56:5:56:5 | b [element 1] | provenance | | +| array_flow.rb:57:5:57:5 | c [element 0] | array_flow.rb:58:10:58:10 | c [element 0] | provenance | | +| array_flow.rb:57:5:57:5 | c [element] | array_flow.rb:58:10:58:10 | c [element] | provenance | | +| array_flow.rb:57:5:57:5 | c [element] | array_flow.rb:59:10:59:10 | c [element] | provenance | | +| array_flow.rb:57:9:57:9 | a [element 0] | array_flow.rb:57:9:57:13 | ... + ... [element 0] | provenance | | +| array_flow.rb:57:9:57:13 | ... + ... [element 0] | array_flow.rb:57:5:57:5 | c [element 0] | provenance | | +| array_flow.rb:57:9:57:13 | ... + ... [element] | array_flow.rb:57:5:57:5 | c [element] | provenance | | +| array_flow.rb:57:13:57:13 | b [element 1] | array_flow.rb:57:9:57:13 | ... + ... [element] | provenance | | +| array_flow.rb:58:10:58:10 | c [element 0] | array_flow.rb:58:10:58:13 | ...[...] | provenance | | +| array_flow.rb:58:10:58:10 | c [element] | array_flow.rb:58:10:58:13 | ...[...] | provenance | | +| array_flow.rb:59:10:59:10 | c [element] | array_flow.rb:59:10:59:13 | ...[...] | provenance | | +| array_flow.rb:63:5:63:5 | a [element 0] | array_flow.rb:65:9:65:9 | a [element 0] | provenance | | +| array_flow.rb:63:10:63:20 | call to source | array_flow.rb:63:5:63:5 | a [element 0] | provenance | | +| array_flow.rb:65:5:65:5 | c [element] | array_flow.rb:66:10:66:10 | c [element] | provenance | | +| array_flow.rb:65:5:65:5 | c [element] | array_flow.rb:67:10:67:10 | c [element] | provenance | | +| array_flow.rb:65:9:65:9 | a [element 0] | array_flow.rb:65:9:65:13 | ... - ... [element] | provenance | | +| array_flow.rb:65:9:65:13 | ... - ... [element] | array_flow.rb:65:5:65:5 | c [element] | provenance | | +| array_flow.rb:66:10:66:10 | c [element] | array_flow.rb:66:10:66:13 | ...[...] | provenance | | +| array_flow.rb:67:10:67:10 | c [element] | array_flow.rb:67:10:67:13 | ...[...] | provenance | | +| array_flow.rb:71:5:71:5 | a [element 0] | array_flow.rb:72:9:72:9 | a [element 0] | provenance | | +| array_flow.rb:71:5:71:5 | a [element 0] | array_flow.rb:73:10:73:10 | a [element 0] | provenance | | +| array_flow.rb:71:10:71:20 | call to source | array_flow.rb:71:5:71:5 | a [element 0] | provenance | | +| array_flow.rb:72:5:72:5 | b [element 0] | array_flow.rb:75:10:75:10 | b [element 0] | provenance | | +| array_flow.rb:72:5:72:5 | b [element] | array_flow.rb:75:10:75:10 | b [element] | provenance | | +| array_flow.rb:72:5:72:5 | b [element] | array_flow.rb:76:10:76:10 | b [element] | provenance | | +| array_flow.rb:72:9:72:9 | [post] a [element] | array_flow.rb:73:10:73:10 | a [element] | provenance | | +| array_flow.rb:72:9:72:9 | [post] a [element] | array_flow.rb:74:10:74:10 | a [element] | provenance | | +| array_flow.rb:72:9:72:9 | a [element 0] | array_flow.rb:72:9:72:24 | ... << ... [element 0] | provenance | | +| array_flow.rb:72:9:72:24 | ... << ... [element 0] | array_flow.rb:72:5:72:5 | b [element 0] | provenance | | +| array_flow.rb:72:9:72:24 | ... << ... [element] | array_flow.rb:72:5:72:5 | b [element] | provenance | | +| array_flow.rb:72:14:72:24 | call to source | array_flow.rb:72:9:72:9 | [post] a [element] | provenance | | +| array_flow.rb:72:14:72:24 | call to source | array_flow.rb:72:9:72:24 | ... << ... [element] | provenance | | +| array_flow.rb:73:10:73:10 | a [element 0] | array_flow.rb:73:10:73:13 | ...[...] | provenance | | +| array_flow.rb:73:10:73:10 | a [element] | array_flow.rb:73:10:73:13 | ...[...] | provenance | | +| array_flow.rb:74:10:74:10 | a [element] | array_flow.rb:74:10:74:13 | ...[...] | provenance | | +| array_flow.rb:75:10:75:10 | b [element 0] | array_flow.rb:75:10:75:13 | ...[...] | provenance | | +| array_flow.rb:75:10:75:10 | b [element] | array_flow.rb:75:10:75:13 | ...[...] | provenance | | +| array_flow.rb:76:10:76:10 | b [element] | array_flow.rb:76:10:76:13 | ...[...] | provenance | | +| array_flow.rb:80:5:80:5 | a [element 1] | array_flow.rb:81:15:81:15 | a [element 1] | provenance | | +| array_flow.rb:80:13:80:21 | call to source | array_flow.rb:80:5:80:5 | a [element 1] | provenance | | +| array_flow.rb:81:8:81:8 | c | array_flow.rb:83:10:83:10 | c | provenance | | +| array_flow.rb:81:15:81:15 | a [element 1] | array_flow.rb:81:8:81:8 | c | provenance | | +| array_flow.rb:88:5:88:5 | a [element 1] | array_flow.rb:89:9:89:9 | a [element 1] | provenance | | +| array_flow.rb:88:13:88:22 | call to source | array_flow.rb:88:5:88:5 | a [element 1] | provenance | | +| array_flow.rb:89:5:89:5 | b [element 1] | array_flow.rb:91:10:91:10 | b [element 1] | provenance | | +| array_flow.rb:89:5:89:5 | b [element 1] | array_flow.rb:92:10:92:10 | b [element 1] | provenance | | +| array_flow.rb:89:9:89:9 | a [element 1] | array_flow.rb:89:9:89:15 | ...[...] [element 1] | provenance | | +| array_flow.rb:89:9:89:15 | ...[...] [element 1] | array_flow.rb:89:5:89:5 | b [element 1] | provenance | | +| array_flow.rb:91:10:91:10 | b [element 1] | array_flow.rb:91:10:91:13 | ...[...] | provenance | | +| array_flow.rb:92:10:92:10 | b [element 1] | array_flow.rb:92:10:92:13 | ...[...] | provenance | | +| array_flow.rb:96:5:96:5 | a [element 1] | array_flow.rb:97:9:97:9 | a [element 1] | provenance | | +| array_flow.rb:96:13:96:22 | call to source | array_flow.rb:96:5:96:5 | a [element 1] | provenance | | +| array_flow.rb:97:5:97:5 | b [element 1] | array_flow.rb:99:10:99:10 | b [element 1] | provenance | | +| array_flow.rb:97:5:97:5 | b [element 1] | array_flow.rb:101:10:101:10 | b [element 1] | provenance | | +| array_flow.rb:97:9:97:9 | a [element 1] | array_flow.rb:97:9:97:15 | ...[...] [element 1] | provenance | | +| array_flow.rb:97:9:97:15 | ...[...] [element 1] | array_flow.rb:97:5:97:5 | b [element 1] | provenance | | +| array_flow.rb:99:10:99:10 | b [element 1] | array_flow.rb:99:10:99:13 | ...[...] | provenance | | +| array_flow.rb:101:10:101:10 | b [element 1] | array_flow.rb:101:10:101:13 | ...[...] | provenance | | +| array_flow.rb:103:5:103:5 | a [element 1] | array_flow.rb:104:9:104:9 | a [element 1] | provenance | | +| array_flow.rb:103:13:103:24 | call to source | array_flow.rb:103:5:103:5 | a [element 1] | provenance | | +| array_flow.rb:104:5:104:5 | b [element 1] | array_flow.rb:106:10:106:10 | b [element 1] | provenance | | +| array_flow.rb:104:9:104:9 | a [element 1] | array_flow.rb:104:9:104:16 | ...[...] [element 1] | provenance | | +| array_flow.rb:104:9:104:16 | ...[...] [element 1] | array_flow.rb:104:5:104:5 | b [element 1] | provenance | | +| array_flow.rb:106:10:106:10 | b [element 1] | array_flow.rb:106:10:106:13 | ...[...] | provenance | | +| array_flow.rb:109:5:109:5 | a [element 1] | array_flow.rb:110:9:110:9 | a [element 1] | provenance | | +| array_flow.rb:109:5:109:5 | a [element 1] | array_flow.rb:114:9:114:9 | a [element 1] | provenance | | +| array_flow.rb:109:5:109:5 | a [element 3] | array_flow.rb:110:9:110:9 | a [element 3] | provenance | | +| array_flow.rb:109:5:109:5 | a [element 3] | array_flow.rb:114:9:114:9 | a [element 3] | provenance | | +| array_flow.rb:109:13:109:24 | call to source | array_flow.rb:109:5:109:5 | a [element 1] | provenance | | +| array_flow.rb:109:30:109:41 | call to source | array_flow.rb:109:5:109:5 | a [element 3] | provenance | | +| array_flow.rb:110:5:110:5 | b [element] | array_flow.rb:111:10:111:10 | b [element] | provenance | | +| array_flow.rb:110:5:110:5 | b [element] | array_flow.rb:112:10:112:10 | b [element] | provenance | | +| array_flow.rb:110:9:110:9 | a [element 1] | array_flow.rb:110:9:110:18 | ...[...] [element] | provenance | | +| array_flow.rb:110:9:110:9 | a [element 3] | array_flow.rb:110:9:110:18 | ...[...] [element] | provenance | | +| array_flow.rb:110:9:110:18 | ...[...] [element] | array_flow.rb:110:5:110:5 | b [element] | provenance | | +| array_flow.rb:111:10:111:10 | b [element] | array_flow.rb:111:10:111:13 | ...[...] | provenance | | +| array_flow.rb:112:10:112:10 | b [element] | array_flow.rb:112:10:112:13 | ...[...] | provenance | | +| array_flow.rb:114:5:114:5 | b [element] | array_flow.rb:115:10:115:10 | b [element] | provenance | | +| array_flow.rb:114:5:114:5 | b [element] | array_flow.rb:116:10:116:10 | b [element] | provenance | | +| array_flow.rb:114:9:114:9 | a [element 1] | array_flow.rb:114:9:114:19 | ...[...] [element] | provenance | | +| array_flow.rb:114:9:114:9 | a [element 3] | array_flow.rb:114:9:114:19 | ...[...] [element] | provenance | | +| array_flow.rb:114:9:114:19 | ...[...] [element] | array_flow.rb:114:5:114:5 | b [element] | provenance | | +| array_flow.rb:115:10:115:10 | b [element] | array_flow.rb:115:10:115:13 | ...[...] | provenance | | +| array_flow.rb:116:10:116:10 | b [element] | array_flow.rb:116:10:116:13 | ...[...] | provenance | | +| array_flow.rb:121:5:121:5 | [post] a [element] | array_flow.rb:122:10:122:10 | a [element] | provenance | | +| array_flow.rb:121:5:121:5 | [post] a [element] | array_flow.rb:123:10:123:10 | a [element] | provenance | | +| array_flow.rb:121:5:121:5 | [post] a [element] | array_flow.rb:124:10:124:10 | a [element] | provenance | | +| array_flow.rb:121:15:121:24 | call to source | array_flow.rb:121:5:121:5 | [post] a [element] | provenance | | +| array_flow.rb:122:10:122:10 | a [element] | array_flow.rb:122:10:122:13 | ...[...] | provenance | | +| array_flow.rb:123:10:123:10 | a [element] | array_flow.rb:123:10:123:13 | ...[...] | provenance | | +| array_flow.rb:124:10:124:10 | a [element] | array_flow.rb:124:10:124:13 | ...[...] | provenance | | +| array_flow.rb:129:5:129:5 | [post] a [element] | array_flow.rb:130:10:130:10 | a [element] | provenance | | +| array_flow.rb:129:5:129:5 | [post] a [element] | array_flow.rb:131:10:131:10 | a [element] | provenance | | +| array_flow.rb:129:5:129:5 | [post] a [element] | array_flow.rb:132:10:132:10 | a [element] | provenance | | +| array_flow.rb:129:19:129:28 | call to source | array_flow.rb:129:5:129:5 | [post] a [element] | provenance | | +| array_flow.rb:130:10:130:10 | a [element] | array_flow.rb:130:10:130:13 | ...[...] | provenance | | +| array_flow.rb:131:10:131:10 | a [element] | array_flow.rb:131:10:131:13 | ...[...] | provenance | | +| array_flow.rb:132:10:132:10 | a [element] | array_flow.rb:132:10:132:13 | ...[...] | provenance | | +| array_flow.rb:137:5:137:5 | [post] a [element] | array_flow.rb:138:10:138:10 | a [element] | provenance | | +| array_flow.rb:137:5:137:5 | [post] a [element] | array_flow.rb:139:10:139:10 | a [element] | provenance | | +| array_flow.rb:137:5:137:5 | [post] a [element] | array_flow.rb:140:10:140:10 | a [element] | provenance | | +| array_flow.rb:137:15:137:24 | call to source | array_flow.rb:137:5:137:5 | [post] a [element] | provenance | | +| array_flow.rb:138:10:138:10 | a [element] | array_flow.rb:138:10:138:13 | ...[...] | provenance | | +| array_flow.rb:139:10:139:10 | a [element] | array_flow.rb:139:10:139:13 | ...[...] | provenance | | +| array_flow.rb:140:10:140:10 | a [element] | array_flow.rb:140:10:140:13 | ...[...] | provenance | | +| array_flow.rb:145:5:145:5 | [post] a [element] | array_flow.rb:146:10:146:10 | a [element] | provenance | | +| array_flow.rb:145:5:145:5 | [post] a [element] | array_flow.rb:147:10:147:10 | a [element] | provenance | | +| array_flow.rb:145:5:145:5 | [post] a [element] | array_flow.rb:148:10:148:10 | a [element] | provenance | | +| array_flow.rb:145:19:145:28 | call to source | array_flow.rb:145:5:145:5 | [post] a [element] | provenance | | +| array_flow.rb:146:10:146:10 | a [element] | array_flow.rb:146:10:146:13 | ...[...] | provenance | | +| array_flow.rb:147:10:147:10 | a [element] | array_flow.rb:147:10:147:13 | ...[...] | provenance | | +| array_flow.rb:148:10:148:10 | a [element] | array_flow.rb:148:10:148:13 | ...[...] | provenance | | +| array_flow.rb:152:5:152:5 | a [element 2] | array_flow.rb:153:5:153:5 | a [element 2] | provenance | | +| array_flow.rb:152:16:152:25 | call to source | array_flow.rb:152:5:152:5 | a [element 2] | provenance | | +| array_flow.rb:153:5:153:5 | a [element 2] | array_flow.rb:153:16:153:16 | x | provenance | | +| array_flow.rb:153:16:153:16 | x | array_flow.rb:154:14:154:14 | x | provenance | | +| array_flow.rb:159:5:159:5 | a [element 2] | array_flow.rb:160:5:160:5 | a [element 2] | provenance | | +| array_flow.rb:159:16:159:25 | call to source | array_flow.rb:159:5:159:5 | a [element 2] | provenance | | +| array_flow.rb:160:5:160:5 | a [element 2] | array_flow.rb:160:16:160:16 | x | provenance | | +| array_flow.rb:160:16:160:16 | x | array_flow.rb:161:14:161:14 | x | provenance | | +| array_flow.rb:166:5:166:5 | a [element 0] | array_flow.rb:167:9:167:9 | a [element 0] | provenance | | +| array_flow.rb:166:5:166:5 | a [element 0] | array_flow.rb:168:10:168:10 | a [element 0] | provenance | | +| array_flow.rb:166:10:166:21 | call to source | array_flow.rb:166:5:166:5 | a [element 0] | provenance | | +| array_flow.rb:167:5:167:5 | b [element 0] | array_flow.rb:170:10:170:10 | b [element 0] | provenance | | +| array_flow.rb:167:5:167:5 | b [element] | array_flow.rb:170:10:170:10 | b [element] | provenance | | +| array_flow.rb:167:5:167:5 | b [element] | array_flow.rb:171:10:171:10 | b [element] | provenance | | +| array_flow.rb:167:9:167:9 | [post] a [element] | array_flow.rb:168:10:168:10 | a [element] | provenance | | +| array_flow.rb:167:9:167:9 | [post] a [element] | array_flow.rb:169:10:169:10 | a [element] | provenance | | +| array_flow.rb:167:9:167:9 | a [element 0] | array_flow.rb:167:9:167:44 | call to append [element 0] | provenance | | +| array_flow.rb:167:9:167:44 | call to append [element 0] | array_flow.rb:167:5:167:5 | b [element 0] | provenance | | +| array_flow.rb:167:9:167:44 | call to append [element] | array_flow.rb:167:5:167:5 | b [element] | provenance | | +| array_flow.rb:167:18:167:29 | call to source | array_flow.rb:167:9:167:9 | [post] a [element] | provenance | | +| array_flow.rb:167:18:167:29 | call to source | array_flow.rb:167:9:167:44 | call to append [element] | provenance | | +| array_flow.rb:167:32:167:43 | call to source | array_flow.rb:167:9:167:9 | [post] a [element] | provenance | | +| array_flow.rb:167:32:167:43 | call to source | array_flow.rb:167:9:167:44 | call to append [element] | provenance | | +| array_flow.rb:168:10:168:10 | a [element 0] | array_flow.rb:168:10:168:13 | ...[...] | provenance | | +| array_flow.rb:168:10:168:10 | a [element] | array_flow.rb:168:10:168:13 | ...[...] | provenance | | +| array_flow.rb:169:10:169:10 | a [element] | array_flow.rb:169:10:169:13 | ...[...] | provenance | | +| array_flow.rb:170:10:170:10 | b [element 0] | array_flow.rb:170:10:170:13 | ...[...] | provenance | | +| array_flow.rb:170:10:170:10 | b [element] | array_flow.rb:170:10:170:13 | ...[...] | provenance | | +| array_flow.rb:171:10:171:10 | b [element] | array_flow.rb:171:10:171:13 | ...[...] | provenance | | +| array_flow.rb:177:5:177:5 | c [element 1] | array_flow.rb:178:16:178:16 | c [element 1] | provenance | | +| array_flow.rb:177:15:177:24 | call to source | array_flow.rb:177:5:177:5 | c [element 1] | provenance | | +| array_flow.rb:178:5:178:5 | d [element 2, element 1] | array_flow.rb:179:11:179:11 | d [element 2, element 1] | provenance | | +| array_flow.rb:178:5:178:5 | d [element 2, element 1] | array_flow.rb:180:11:180:11 | d [element 2, element 1] | provenance | | +| array_flow.rb:178:16:178:16 | c [element 1] | array_flow.rb:178:5:178:5 | d [element 2, element 1] | provenance | | +| array_flow.rb:179:11:179:11 | d [element 2, element 1] | array_flow.rb:179:11:179:22 | call to assoc [element 1] | provenance | | +| array_flow.rb:179:11:179:22 | call to assoc [element 1] | array_flow.rb:179:11:179:25 | ...[...] | provenance | | +| array_flow.rb:179:11:179:25 | ...[...] | array_flow.rb:179:10:179:26 | ( ... ) | provenance | | +| array_flow.rb:180:11:180:11 | d [element 2, element 1] | array_flow.rb:180:11:180:22 | call to assoc [element 1] | provenance | | +| array_flow.rb:180:11:180:22 | call to assoc [element 1] | array_flow.rb:180:11:180:25 | ...[...] | provenance | | +| array_flow.rb:180:11:180:25 | ...[...] | array_flow.rb:180:10:180:26 | ( ... ) | provenance | | +| array_flow.rb:184:5:184:5 | a [element 1] | array_flow.rb:186:10:186:10 | a [element 1] | provenance | | +| array_flow.rb:184:5:184:5 | a [element 1] | array_flow.rb:188:10:188:10 | a [element 1] | provenance | | +| array_flow.rb:184:13:184:22 | call to source | array_flow.rb:184:5:184:5 | a [element 1] | provenance | | +| array_flow.rb:186:10:186:10 | a [element 1] | array_flow.rb:186:10:186:16 | call to at | provenance | | +| array_flow.rb:188:10:188:10 | a [element 1] | array_flow.rb:188:10:188:16 | call to at | provenance | | +| array_flow.rb:192:5:192:5 | a [element 2] | array_flow.rb:193:9:193:9 | a [element 2] | provenance | | +| array_flow.rb:192:16:192:25 | call to source | array_flow.rb:192:5:192:5 | a [element 2] | provenance | | +| array_flow.rb:193:5:193:5 | b | array_flow.rb:196:10:196:10 | b | provenance | | +| array_flow.rb:193:9:193:9 | a [element 2] | array_flow.rb:193:9:195:7 | call to bsearch | provenance | | +| array_flow.rb:193:9:193:9 | a [element 2] | array_flow.rb:193:23:193:23 | x | provenance | | +| array_flow.rb:193:9:195:7 | call to bsearch | array_flow.rb:193:5:193:5 | b | provenance | | +| array_flow.rb:193:23:193:23 | x | array_flow.rb:194:14:194:14 | x | provenance | | +| array_flow.rb:200:5:200:5 | a [element 2] | array_flow.rb:201:9:201:9 | a [element 2] | provenance | | +| array_flow.rb:200:16:200:25 | call to source | array_flow.rb:200:5:200:5 | a [element 2] | provenance | | +| array_flow.rb:201:9:201:9 | a [element 2] | array_flow.rb:201:29:201:29 | x | provenance | | +| array_flow.rb:201:29:201:29 | x | array_flow.rb:202:14:202:14 | x | provenance | | +| array_flow.rb:208:5:208:5 | a [element 2] | array_flow.rb:209:5:209:5 | a [element 2] | provenance | | +| array_flow.rb:208:16:208:25 | call to source | array_flow.rb:208:5:208:5 | a [element 2] | provenance | | +| array_flow.rb:209:5:209:5 | a [element 2] | array_flow.rb:209:17:209:17 | x | provenance | | +| array_flow.rb:209:17:209:17 | x | array_flow.rb:210:14:210:14 | x | provenance | | +| array_flow.rb:215:5:215:5 | a [element 2] | array_flow.rb:216:9:216:9 | a [element 2] | provenance | | +| array_flow.rb:215:5:215:5 | a [element 3] | array_flow.rb:216:9:216:9 | a [element 3] | provenance | | +| array_flow.rb:215:16:215:27 | call to source | array_flow.rb:215:5:215:5 | a [element 2] | provenance | | +| array_flow.rb:215:30:215:41 | call to source | array_flow.rb:215:5:215:5 | a [element 3] | provenance | | +| array_flow.rb:216:9:216:9 | a [element 2] | array_flow.rb:216:27:216:27 | x | provenance | | +| array_flow.rb:216:9:216:9 | a [element 2] | array_flow.rb:216:30:216:30 | y | provenance | | +| array_flow.rb:216:9:216:9 | a [element 3] | array_flow.rb:216:27:216:27 | x | provenance | | +| array_flow.rb:216:9:216:9 | a [element 3] | array_flow.rb:216:30:216:30 | y | provenance | | +| array_flow.rb:216:27:216:27 | x | array_flow.rb:217:14:217:14 | x | provenance | | +| array_flow.rb:216:30:216:30 | y | array_flow.rb:218:14:218:14 | y | provenance | | +| array_flow.rb:231:5:231:5 | a [element 2] | array_flow.rb:232:9:232:9 | a [element 2] | provenance | | +| array_flow.rb:231:16:231:27 | call to source | array_flow.rb:231:5:231:5 | a [element 2] | provenance | | +| array_flow.rb:232:5:232:5 | b [element] | array_flow.rb:236:10:236:10 | b [element] | provenance | | +| array_flow.rb:232:9:232:9 | a [element 2] | array_flow.rb:232:23:232:23 | x | provenance | | +| array_flow.rb:232:9:235:7 | call to collect [element] | array_flow.rb:232:5:232:5 | b [element] | provenance | | +| array_flow.rb:232:23:232:23 | x | array_flow.rb:233:14:233:14 | x | provenance | | +| array_flow.rb:234:9:234:19 | call to source | array_flow.rb:232:9:235:7 | call to collect [element] | provenance | | +| array_flow.rb:236:10:236:10 | b [element] | array_flow.rb:236:10:236:13 | ...[...] | provenance | | +| array_flow.rb:240:5:240:5 | a [element 2] | array_flow.rb:241:9:241:9 | a [element 2] | provenance | | +| array_flow.rb:240:16:240:27 | call to source | array_flow.rb:240:5:240:5 | a [element 2] | provenance | | +| array_flow.rb:241:5:241:5 | b [element] | array_flow.rb:246:10:246:10 | b [element] | provenance | | +| array_flow.rb:241:9:241:9 | [post] a [element] | array_flow.rb:245:10:245:10 | a [element] | provenance | | +| array_flow.rb:241:9:241:9 | a [element 2] | array_flow.rb:241:24:241:24 | x | provenance | | +| array_flow.rb:241:9:244:7 | call to collect! [element] | array_flow.rb:241:5:241:5 | b [element] | provenance | | +| array_flow.rb:241:24:241:24 | x | array_flow.rb:242:14:242:14 | x | provenance | | +| array_flow.rb:243:9:243:19 | call to source | array_flow.rb:241:9:241:9 | [post] a [element] | provenance | | +| array_flow.rb:243:9:243:19 | call to source | array_flow.rb:241:9:244:7 | call to collect! [element] | provenance | | +| array_flow.rb:245:10:245:10 | a [element] | array_flow.rb:245:10:245:13 | ...[...] | provenance | | +| array_flow.rb:246:10:246:10 | b [element] | array_flow.rb:246:10:246:13 | ...[...] | provenance | | +| array_flow.rb:250:5:250:5 | a [element 2] | array_flow.rb:251:9:251:9 | a [element 2] | provenance | | +| array_flow.rb:250:5:250:5 | a [element 2] | array_flow.rb:256:9:256:9 | a [element 2] | provenance | | +| array_flow.rb:250:16:250:27 | call to source | array_flow.rb:250:5:250:5 | a [element 2] | provenance | | +| array_flow.rb:251:5:251:5 | b [element] | array_flow.rb:255:10:255:10 | b [element] | provenance | | +| array_flow.rb:251:9:251:9 | a [element 2] | array_flow.rb:251:9:254:7 | call to collect_concat [element] | provenance | | +| array_flow.rb:251:9:251:9 | a [element 2] | array_flow.rb:251:30:251:30 | x | provenance | | +| array_flow.rb:251:9:254:7 | call to collect_concat [element] | array_flow.rb:251:5:251:5 | b [element] | provenance | | +| array_flow.rb:251:30:251:30 | x | array_flow.rb:252:14:252:14 | x | provenance | | +| array_flow.rb:253:13:253:24 | call to source | array_flow.rb:251:9:254:7 | call to collect_concat [element] | provenance | | +| array_flow.rb:255:10:255:10 | b [element] | array_flow.rb:255:10:255:13 | ...[...] | provenance | | +| array_flow.rb:256:5:256:5 | b [element] | array_flow.rb:260:10:260:10 | b [element] | provenance | | +| array_flow.rb:256:9:256:9 | a [element 2] | array_flow.rb:256:30:256:30 | x | provenance | | +| array_flow.rb:256:9:259:7 | call to collect_concat [element] | array_flow.rb:256:5:256:5 | b [element] | provenance | | +| array_flow.rb:256:30:256:30 | x | array_flow.rb:257:14:257:14 | x | provenance | | +| array_flow.rb:258:9:258:20 | call to source | array_flow.rb:256:9:259:7 | call to collect_concat [element] | provenance | | +| array_flow.rb:260:10:260:10 | b [element] | array_flow.rb:260:10:260:13 | ...[...] | provenance | | +| array_flow.rb:264:5:264:5 | a [element 2] | array_flow.rb:265:9:265:9 | a [element 2] | provenance | | +| array_flow.rb:264:16:264:25 | call to source | array_flow.rb:264:5:264:5 | a [element 2] | provenance | | +| array_flow.rb:265:5:265:5 | b [element 2] | array_flow.rb:269:10:269:10 | b [element 2] | provenance | | +| array_flow.rb:265:9:265:9 | a [element 2] | array_flow.rb:265:9:267:7 | call to combination [element 2] | provenance | | +| array_flow.rb:265:9:265:9 | a [element 2] | array_flow.rb:265:30:265:30 | x [element] | provenance | | +| array_flow.rb:265:9:267:7 | call to combination [element 2] | array_flow.rb:265:5:265:5 | b [element 2] | provenance | | +| array_flow.rb:265:30:265:30 | x [element] | array_flow.rb:266:14:266:14 | x [element] | provenance | | +| array_flow.rb:266:14:266:14 | x [element] | array_flow.rb:266:14:266:17 | ...[...] | provenance | | +| array_flow.rb:269:10:269:10 | b [element 2] | array_flow.rb:269:10:269:13 | ...[...] | provenance | | +| array_flow.rb:273:5:273:5 | a [element 2] | array_flow.rb:274:9:274:9 | a [element 2] | provenance | | +| array_flow.rb:273:16:273:25 | call to source | array_flow.rb:273:5:273:5 | a [element 2] | provenance | | +| array_flow.rb:274:5:274:5 | b [element] | array_flow.rb:275:10:275:10 | b [element] | provenance | | +| array_flow.rb:274:9:274:9 | a [element 2] | array_flow.rb:274:9:274:17 | call to compact [element] | provenance | | +| array_flow.rb:274:9:274:17 | call to compact [element] | array_flow.rb:274:5:274:5 | b [element] | provenance | | +| array_flow.rb:275:10:275:10 | b [element] | array_flow.rb:275:10:275:13 | ...[...] | provenance | | +| array_flow.rb:279:5:279:5 | a [element 2] | array_flow.rb:280:9:280:9 | a [element 2] | provenance | | +| array_flow.rb:279:16:279:25 | call to source | array_flow.rb:279:5:279:5 | a [element 2] | provenance | | +| array_flow.rb:280:5:280:5 | b [element] | array_flow.rb:282:10:282:10 | b [element] | provenance | | +| array_flow.rb:280:9:280:9 | [post] a [element] | array_flow.rb:281:10:281:10 | a [element] | provenance | | +| array_flow.rb:280:9:280:9 | a [element 2] | array_flow.rb:280:9:280:9 | [post] a [element] | provenance | | +| array_flow.rb:280:9:280:9 | a [element 2] | array_flow.rb:280:9:280:18 | call to compact! [element] | provenance | | +| array_flow.rb:280:9:280:18 | call to compact! [element] | array_flow.rb:280:5:280:5 | b [element] | provenance | | +| array_flow.rb:281:10:281:10 | a [element] | array_flow.rb:281:10:281:13 | ...[...] | provenance | | +| array_flow.rb:282:10:282:10 | b [element] | array_flow.rb:282:10:282:13 | ...[...] | provenance | | +| array_flow.rb:286:5:286:5 | a [element 2] | array_flow.rb:290:10:290:10 | a [element 2] | provenance | | +| array_flow.rb:286:16:286:27 | call to source | array_flow.rb:286:5:286:5 | a [element 2] | provenance | | +| array_flow.rb:287:5:287:5 | b [element 2] | array_flow.rb:288:14:288:14 | b [element 2] | provenance | | +| array_flow.rb:287:16:287:27 | call to source | array_flow.rb:287:5:287:5 | b [element 2] | provenance | | +| array_flow.rb:288:5:288:5 | [post] a [element] | array_flow.rb:289:10:289:10 | a [element] | provenance | | +| array_flow.rb:288:5:288:5 | [post] a [element] | array_flow.rb:290:10:290:10 | a [element] | provenance | | +| array_flow.rb:288:14:288:14 | b [element 2] | array_flow.rb:288:5:288:5 | [post] a [element] | provenance | | +| array_flow.rb:289:10:289:10 | a [element] | array_flow.rb:289:10:289:13 | ...[...] | provenance | | +| array_flow.rb:290:10:290:10 | a [element 2] | array_flow.rb:290:10:290:13 | ...[...] | provenance | | +| array_flow.rb:290:10:290:10 | a [element] | array_flow.rb:290:10:290:13 | ...[...] | provenance | | +| array_flow.rb:294:5:294:5 | a [element 2] | array_flow.rb:295:5:295:5 | a [element 2] | provenance | | +| array_flow.rb:294:16:294:25 | call to source | array_flow.rb:294:5:294:5 | a [element 2] | provenance | | +| array_flow.rb:295:5:295:5 | a [element 2] | array_flow.rb:295:17:295:17 | x | provenance | | +| array_flow.rb:295:17:295:17 | x | array_flow.rb:296:14:296:14 | x | provenance | | +| array_flow.rb:301:5:301:5 | a [element 2] | array_flow.rb:302:5:302:5 | a [element 2] | provenance | | +| array_flow.rb:301:16:301:25 | call to source | array_flow.rb:301:5:301:5 | a [element 2] | provenance | | +| array_flow.rb:302:5:302:5 | a [element 2] | array_flow.rb:302:20:302:20 | x | provenance | | +| array_flow.rb:302:20:302:20 | x | array_flow.rb:303:14:303:14 | x | provenance | | +| array_flow.rb:308:5:308:5 | a [element 2] | array_flow.rb:309:9:309:9 | a [element 2] | provenance | | +| array_flow.rb:308:16:308:25 | call to source | array_flow.rb:308:5:308:5 | a [element 2] | provenance | | +| array_flow.rb:309:5:309:5 | b [element 2] | array_flow.rb:312:10:312:10 | b [element 2] | provenance | | +| array_flow.rb:309:9:309:9 | a [element 2] | array_flow.rb:309:9:309:21 | call to deconstruct [element 2] | provenance | | +| array_flow.rb:309:9:309:21 | call to deconstruct [element 2] | array_flow.rb:309:5:309:5 | b [element 2] | provenance | | +| array_flow.rb:312:10:312:10 | b [element 2] | array_flow.rb:312:10:312:13 | ...[...] | provenance | | +| array_flow.rb:316:5:316:5 | a [element 2] | array_flow.rb:317:9:317:9 | a [element 2] | provenance | | +| array_flow.rb:316:16:316:27 | call to source | array_flow.rb:316:5:316:5 | a [element 2] | provenance | | +| array_flow.rb:317:5:317:5 | b | array_flow.rb:318:10:318:10 | b | provenance | | +| array_flow.rb:317:9:317:9 | a [element 2] | array_flow.rb:317:9:317:36 | call to delete | provenance | | +| array_flow.rb:317:9:317:36 | call to delete | array_flow.rb:317:5:317:5 | b | provenance | | +| array_flow.rb:317:23:317:34 | call to source | array_flow.rb:317:9:317:36 | call to delete | provenance | | +| array_flow.rb:325:5:325:5 | a [element 2] | array_flow.rb:326:9:326:9 | a [element 2] | provenance | | +| array_flow.rb:325:5:325:5 | a [element 3] | array_flow.rb:326:9:326:9 | a [element 3] | provenance | | +| array_flow.rb:325:16:325:27 | call to source | array_flow.rb:325:5:325:5 | a [element 2] | provenance | | +| array_flow.rb:325:30:325:41 | call to source | array_flow.rb:325:5:325:5 | a [element 3] | provenance | | +| array_flow.rb:326:5:326:5 | b | array_flow.rb:327:10:327:10 | b | provenance | | +| array_flow.rb:326:9:326:9 | [post] a [element 2] | array_flow.rb:328:10:328:10 | a [element 2] | provenance | | +| array_flow.rb:326:9:326:9 | a [element 2] | array_flow.rb:326:9:326:22 | call to delete_at | provenance | | +| array_flow.rb:326:9:326:9 | a [element 3] | array_flow.rb:326:9:326:9 | [post] a [element 2] | provenance | | +| array_flow.rb:326:9:326:22 | call to delete_at | array_flow.rb:326:5:326:5 | b | provenance | | +| array_flow.rb:328:10:328:10 | a [element 2] | array_flow.rb:328:10:328:13 | ...[...] | provenance | | +| array_flow.rb:330:5:330:5 | a [element 2] | array_flow.rb:331:9:331:9 | a [element 2] | provenance | | +| array_flow.rb:330:5:330:5 | a [element 3] | array_flow.rb:331:9:331:9 | a [element 3] | provenance | | +| array_flow.rb:330:16:330:27 | call to source | array_flow.rb:330:5:330:5 | a [element 2] | provenance | | +| array_flow.rb:330:30:330:41 | call to source | array_flow.rb:330:5:330:5 | a [element 3] | provenance | | +| array_flow.rb:331:5:331:5 | b | array_flow.rb:332:10:332:10 | b | provenance | | +| array_flow.rb:331:9:331:9 | [post] a [element] | array_flow.rb:333:10:333:10 | a [element] | provenance | | +| array_flow.rb:331:9:331:9 | [post] a [element] | array_flow.rb:334:10:334:10 | a [element] | provenance | | +| array_flow.rb:331:9:331:9 | a [element 2] | array_flow.rb:331:9:331:9 | [post] a [element] | provenance | | +| array_flow.rb:331:9:331:9 | a [element 2] | array_flow.rb:331:9:331:22 | call to delete_at | provenance | | +| array_flow.rb:331:9:331:9 | a [element 3] | array_flow.rb:331:9:331:9 | [post] a [element] | provenance | | +| array_flow.rb:331:9:331:9 | a [element 3] | array_flow.rb:331:9:331:22 | call to delete_at | provenance | | +| array_flow.rb:331:9:331:22 | call to delete_at | array_flow.rb:331:5:331:5 | b | provenance | | +| array_flow.rb:333:10:333:10 | a [element] | array_flow.rb:333:10:333:13 | ...[...] | provenance | | +| array_flow.rb:334:10:334:10 | a [element] | array_flow.rb:334:10:334:13 | ...[...] | provenance | | +| array_flow.rb:338:5:338:5 | a [element 2] | array_flow.rb:339:9:339:9 | a [element 2] | provenance | | +| array_flow.rb:338:16:338:25 | call to source | array_flow.rb:338:5:338:5 | a [element 2] | provenance | | +| array_flow.rb:339:5:339:5 | b [element] | array_flow.rb:342:10:342:10 | b [element] | provenance | | +| array_flow.rb:339:9:339:9 | [post] a [element] | array_flow.rb:343:10:343:10 | a [element] | provenance | | +| array_flow.rb:339:9:339:9 | [post] a [element] | array_flow.rb:344:10:344:10 | a [element] | provenance | | +| array_flow.rb:339:9:339:9 | [post] a [element] | array_flow.rb:345:10:345:10 | a [element] | provenance | | +| array_flow.rb:339:9:339:9 | a [element 2] | array_flow.rb:339:9:339:9 | [post] a [element] | provenance | | +| array_flow.rb:339:9:339:9 | a [element 2] | array_flow.rb:339:9:341:7 | call to delete_if [element] | provenance | | +| array_flow.rb:339:9:339:9 | a [element 2] | array_flow.rb:339:25:339:25 | x | provenance | | +| array_flow.rb:339:9:341:7 | call to delete_if [element] | array_flow.rb:339:5:339:5 | b [element] | provenance | | +| array_flow.rb:339:25:339:25 | x | array_flow.rb:340:14:340:14 | x | provenance | | +| array_flow.rb:342:10:342:10 | b [element] | array_flow.rb:342:10:342:13 | ...[...] | provenance | | +| array_flow.rb:343:10:343:10 | a [element] | array_flow.rb:343:10:343:13 | ...[...] | provenance | | +| array_flow.rb:344:10:344:10 | a [element] | array_flow.rb:344:10:344:13 | ...[...] | provenance | | +| array_flow.rb:345:10:345:10 | a [element] | array_flow.rb:345:10:345:13 | ...[...] | provenance | | +| array_flow.rb:349:5:349:5 | a [element 2] | array_flow.rb:350:9:350:9 | a [element 2] | provenance | | +| array_flow.rb:349:16:349:25 | call to source | array_flow.rb:349:5:349:5 | a [element 2] | provenance | | +| array_flow.rb:350:5:350:5 | b [element] | array_flow.rb:351:10:351:10 | b [element] | provenance | | +| array_flow.rb:350:9:350:9 | a [element 2] | array_flow.rb:350:9:350:25 | call to difference [element] | provenance | | +| array_flow.rb:350:9:350:25 | call to difference [element] | array_flow.rb:350:5:350:5 | b [element] | provenance | | +| array_flow.rb:351:10:351:10 | b [element] | array_flow.rb:351:10:351:13 | ...[...] | provenance | | +| array_flow.rb:355:5:355:5 | a [element 2] | array_flow.rb:357:10:357:10 | a [element 2] | provenance | | +| array_flow.rb:355:5:355:5 | a [element 2] | array_flow.rb:358:10:358:10 | a [element 2] | provenance | | +| array_flow.rb:355:5:355:5 | a [element 3, element 1] | array_flow.rb:360:10:360:10 | a [element 3, element 1] | provenance | | +| array_flow.rb:355:16:355:27 | call to source | array_flow.rb:355:5:355:5 | a [element 2] | provenance | | +| array_flow.rb:355:34:355:45 | call to source | array_flow.rb:355:5:355:5 | a [element 3, element 1] | provenance | | +| array_flow.rb:357:10:357:10 | a [element 2] | array_flow.rb:357:10:357:17 | call to dig | provenance | | +| array_flow.rb:358:10:358:10 | a [element 2] | array_flow.rb:358:10:358:17 | call to dig | provenance | | +| array_flow.rb:360:10:360:10 | a [element 3, element 1] | array_flow.rb:360:10:360:19 | call to dig | provenance | | +| array_flow.rb:364:5:364:5 | a [element 2] | array_flow.rb:365:9:365:9 | a [element 2] | provenance | | +| array_flow.rb:364:16:364:27 | call to source | array_flow.rb:364:5:364:5 | a [element 2] | provenance | | +| array_flow.rb:365:5:365:5 | b | array_flow.rb:368:10:368:10 | b | provenance | | +| array_flow.rb:365:9:365:9 | a [element 2] | array_flow.rb:365:9:367:7 | call to detect | provenance | | +| array_flow.rb:365:9:365:9 | a [element 2] | array_flow.rb:365:43:365:43 | x | provenance | | +| array_flow.rb:365:9:367:7 | call to detect | array_flow.rb:365:5:365:5 | b | provenance | | +| array_flow.rb:365:23:365:34 | call to source | array_flow.rb:365:9:367:7 | call to detect | provenance | | +| array_flow.rb:365:43:365:43 | x | array_flow.rb:366:14:366:14 | x | provenance | | +| array_flow.rb:372:5:372:5 | a [element 2] | array_flow.rb:373:9:373:9 | a [element 2] | provenance | | +| array_flow.rb:372:5:372:5 | a [element 2] | array_flow.rb:375:9:375:9 | a [element 2] | provenance | | +| array_flow.rb:372:5:372:5 | a [element 2] | array_flow.rb:380:9:380:9 | a [element 2] | provenance | | +| array_flow.rb:372:5:372:5 | a [element 3] | array_flow.rb:373:9:373:9 | a [element 3] | provenance | | +| array_flow.rb:372:5:372:5 | a [element 3] | array_flow.rb:375:9:375:9 | a [element 3] | provenance | | +| array_flow.rb:372:16:372:27 | call to source | array_flow.rb:372:5:372:5 | a [element 2] | provenance | | +| array_flow.rb:372:30:372:41 | call to source | array_flow.rb:372:5:372:5 | a [element 3] | provenance | | +| array_flow.rb:373:5:373:5 | b [element] | array_flow.rb:374:10:374:10 | b [element] | provenance | | +| array_flow.rb:373:9:373:9 | a [element 2] | array_flow.rb:373:9:373:17 | call to drop [element] | provenance | | +| array_flow.rb:373:9:373:9 | a [element 3] | array_flow.rb:373:9:373:17 | call to drop [element] | provenance | | +| array_flow.rb:373:9:373:17 | call to drop [element] | array_flow.rb:373:5:373:5 | b [element] | provenance | | +| array_flow.rb:374:10:374:10 | b [element] | array_flow.rb:374:10:374:13 | ...[...] | provenance | | +| array_flow.rb:375:5:375:5 | b [element 1] | array_flow.rb:377:10:377:10 | b [element 1] | provenance | | +| array_flow.rb:375:5:375:5 | b [element 1] | array_flow.rb:378:10:378:10 | b [element 1] | provenance | | +| array_flow.rb:375:5:375:5 | b [element 2] | array_flow.rb:378:10:378:10 | b [element 2] | provenance | | +| array_flow.rb:375:9:375:9 | a [element 2] | array_flow.rb:375:9:375:17 | call to drop [element 1] | provenance | | +| array_flow.rb:375:9:375:9 | a [element 3] | array_flow.rb:375:9:375:17 | call to drop [element 2] | provenance | | +| array_flow.rb:375:9:375:17 | call to drop [element 1] | array_flow.rb:375:5:375:5 | b [element 1] | provenance | | +| array_flow.rb:375:9:375:17 | call to drop [element 2] | array_flow.rb:375:5:375:5 | b [element 2] | provenance | | +| array_flow.rb:377:10:377:10 | b [element 1] | array_flow.rb:377:10:377:13 | ...[...] | provenance | | +| array_flow.rb:378:10:378:10 | b [element 1] | array_flow.rb:378:10:378:13 | ...[...] | provenance | | +| array_flow.rb:378:10:378:10 | b [element 2] | array_flow.rb:378:10:378:13 | ...[...] | provenance | | +| array_flow.rb:379:5:379:5 | [post] a [element] | array_flow.rb:380:9:380:9 | a [element] | provenance | | +| array_flow.rb:379:12:379:23 | call to source | array_flow.rb:379:5:379:5 | [post] a [element] | provenance | | +| array_flow.rb:380:5:380:5 | b [element 1] | array_flow.rb:381:10:381:10 | b [element 1] | provenance | | +| array_flow.rb:380:5:380:5 | b [element] | array_flow.rb:381:10:381:10 | b [element] | provenance | | +| array_flow.rb:380:5:380:5 | b [element] | array_flow.rb:382:9:382:9 | b [element] | provenance | | +| array_flow.rb:380:9:380:9 | a [element 2] | array_flow.rb:380:9:380:17 | call to drop [element 1] | provenance | | +| array_flow.rb:380:9:380:9 | a [element] | array_flow.rb:380:9:380:17 | call to drop [element] | provenance | | +| array_flow.rb:380:9:380:17 | call to drop [element 1] | array_flow.rb:380:5:380:5 | b [element 1] | provenance | | +| array_flow.rb:380:9:380:17 | call to drop [element] | array_flow.rb:380:5:380:5 | b [element] | provenance | | +| array_flow.rb:381:10:381:10 | b [element 1] | array_flow.rb:381:10:381:13 | ...[...] | provenance | | +| array_flow.rb:381:10:381:10 | b [element] | array_flow.rb:381:10:381:13 | ...[...] | provenance | | +| array_flow.rb:382:5:382:5 | c [element] | array_flow.rb:383:10:383:10 | c [element] | provenance | | +| array_flow.rb:382:9:382:9 | b [element] | array_flow.rb:382:9:382:19 | call to drop [element] | provenance | | +| array_flow.rb:382:9:382:19 | call to drop [element] | array_flow.rb:382:5:382:5 | c [element] | provenance | | +| array_flow.rb:383:10:383:10 | c [element] | array_flow.rb:383:10:383:13 | ...[...] | provenance | | +| array_flow.rb:387:5:387:5 | a [element 2] | array_flow.rb:388:9:388:9 | a [element 2] | provenance | | +| array_flow.rb:387:5:387:5 | a [element 3] | array_flow.rb:388:9:388:9 | a [element 3] | provenance | | +| array_flow.rb:387:16:387:27 | call to source | array_flow.rb:387:5:387:5 | a [element 2] | provenance | | +| array_flow.rb:387:30:387:41 | call to source | array_flow.rb:387:5:387:5 | a [element 3] | provenance | | +| array_flow.rb:388:5:388:5 | b [element] | array_flow.rb:391:10:391:10 | b [element] | provenance | | +| array_flow.rb:388:9:388:9 | a [element 2] | array_flow.rb:388:9:390:7 | call to drop_while [element] | provenance | | +| array_flow.rb:388:9:388:9 | a [element 2] | array_flow.rb:388:26:388:26 | x | provenance | | +| array_flow.rb:388:9:388:9 | a [element 3] | array_flow.rb:388:9:390:7 | call to drop_while [element] | provenance | | +| array_flow.rb:388:9:388:9 | a [element 3] | array_flow.rb:388:26:388:26 | x | provenance | | +| array_flow.rb:388:9:390:7 | call to drop_while [element] | array_flow.rb:388:5:388:5 | b [element] | provenance | | +| array_flow.rb:388:26:388:26 | x | array_flow.rb:389:14:389:14 | x | provenance | | +| array_flow.rb:391:10:391:10 | b [element] | array_flow.rb:391:10:391:13 | ...[...] | provenance | | +| array_flow.rb:395:5:395:5 | a [element 2] | array_flow.rb:396:9:396:9 | a [element 2] | provenance | | +| array_flow.rb:395:16:395:25 | call to source | array_flow.rb:395:5:395:5 | a [element 2] | provenance | | +| array_flow.rb:396:5:396:5 | b [element 2] | array_flow.rb:399:10:399:10 | b [element 2] | provenance | | +| array_flow.rb:396:9:396:9 | a [element 2] | array_flow.rb:396:9:398:7 | call to each [element 2] | provenance | | +| array_flow.rb:396:9:396:9 | a [element 2] | array_flow.rb:396:20:396:20 | x | provenance | | +| array_flow.rb:396:9:398:7 | call to each [element 2] | array_flow.rb:396:5:396:5 | b [element 2] | provenance | | +| array_flow.rb:396:20:396:20 | x | array_flow.rb:397:14:397:14 | x | provenance | | +| array_flow.rb:399:10:399:10 | b [element 2] | array_flow.rb:399:10:399:13 | ...[...] | provenance | | +| array_flow.rb:403:5:403:5 | a [element 2] | array_flow.rb:404:18:404:18 | a [element 2] | provenance | | +| array_flow.rb:403:16:403:25 | call to source | array_flow.rb:403:5:403:5 | a [element 2] | provenance | | +| array_flow.rb:404:5:404:5 | b [element 2] | array_flow.rb:408:10:408:10 | b [element 2] | provenance | | +| array_flow.rb:404:9:406:7 | [post] { ... } [captured x] | array_flow.rb:407:10:407:10 | x | provenance | | +| array_flow.rb:404:9:406:7 | __synth__0__1 | array_flow.rb:405:14:405:14 | x | provenance | | +| array_flow.rb:404:18:404:18 | a [element 2] | array_flow.rb:404:5:404:5 | b [element 2] | provenance | | +| array_flow.rb:404:18:404:18 | a [element 2] | array_flow.rb:404:9:406:7 | [post] { ... } [captured x] | provenance | | +| array_flow.rb:404:18:404:18 | a [element 2] | array_flow.rb:404:9:406:7 | __synth__0__1 | provenance | | +| array_flow.rb:408:10:408:10 | b [element 2] | array_flow.rb:408:10:408:13 | ...[...] | provenance | | +| array_flow.rb:412:5:412:5 | a [element 2] | array_flow.rb:413:5:413:5 | a [element 2] | provenance | | +| array_flow.rb:412:16:412:25 | call to source | array_flow.rb:412:5:412:5 | a [element 2] | provenance | | +| array_flow.rb:413:5:413:5 | a [element 2] | array_flow.rb:413:24:413:24 | x [element] | provenance | | +| array_flow.rb:413:24:413:24 | x [element] | array_flow.rb:414:15:414:15 | x [element] | provenance | | +| array_flow.rb:414:15:414:15 | x [element] | array_flow.rb:414:15:414:18 | ...[...] | provenance | | +| array_flow.rb:414:15:414:18 | ...[...] | array_flow.rb:414:14:414:19 | ( ... ) | provenance | | +| array_flow.rb:419:5:419:5 | a [element 2] | array_flow.rb:420:9:420:9 | a [element 2] | provenance | | +| array_flow.rb:419:16:419:25 | call to source | array_flow.rb:419:5:419:5 | a [element 2] | provenance | | +| array_flow.rb:420:5:420:5 | b [element 2] | array_flow.rb:423:10:423:10 | b [element 2] | provenance | | +| array_flow.rb:420:9:420:9 | a [element 2] | array_flow.rb:420:9:422:7 | call to each_entry [element 2] | provenance | | +| array_flow.rb:420:9:420:9 | a [element 2] | array_flow.rb:420:26:420:26 | x | provenance | | +| array_flow.rb:420:9:422:7 | call to each_entry [element 2] | array_flow.rb:420:5:420:5 | b [element 2] | provenance | | +| array_flow.rb:420:26:420:26 | x | array_flow.rb:421:14:421:14 | x | provenance | | +| array_flow.rb:423:10:423:10 | b [element 2] | array_flow.rb:423:10:423:13 | ...[...] | provenance | | +| array_flow.rb:427:5:427:5 | a [element 2] | array_flow.rb:428:9:428:9 | a [element 2] | provenance | | +| array_flow.rb:427:16:427:25 | call to source | array_flow.rb:427:5:427:5 | a [element 2] | provenance | | +| array_flow.rb:428:5:428:5 | b [element 2] | array_flow.rb:431:10:431:10 | b [element 2] | provenance | | +| array_flow.rb:428:9:428:9 | a [element 2] | array_flow.rb:428:9:430:7 | call to each_index [element 2] | provenance | | +| array_flow.rb:428:9:430:7 | call to each_index [element 2] | array_flow.rb:428:5:428:5 | b [element 2] | provenance | | +| array_flow.rb:431:10:431:10 | b [element 2] | array_flow.rb:431:10:431:13 | ...[...] | provenance | | +| array_flow.rb:435:5:435:5 | a [element 3] | array_flow.rb:436:5:436:5 | a [element 3] | provenance | | +| array_flow.rb:435:19:435:28 | call to source | array_flow.rb:435:5:435:5 | a [element 3] | provenance | | +| array_flow.rb:436:5:436:5 | a [element 3] | array_flow.rb:436:25:436:25 | x [element] | provenance | | +| array_flow.rb:436:25:436:25 | x [element] | array_flow.rb:437:14:437:14 | x [element] | provenance | | +| array_flow.rb:437:14:437:14 | x [element] | array_flow.rb:437:14:437:17 | ...[...] | provenance | | +| array_flow.rb:442:5:442:5 | a [element 3] | array_flow.rb:443:9:443:9 | a [element 3] | provenance | | +| array_flow.rb:442:19:442:28 | call to source | array_flow.rb:442:5:442:5 | a [element 3] | provenance | | +| array_flow.rb:443:5:443:5 | b [element 3] | array_flow.rb:447:10:447:10 | b [element 3] | provenance | | +| array_flow.rb:443:9:443:9 | a [element 3] | array_flow.rb:443:9:446:7 | call to each_with_index [element 3] | provenance | | +| array_flow.rb:443:9:443:9 | a [element 3] | array_flow.rb:443:31:443:31 | x | provenance | | +| array_flow.rb:443:9:446:7 | call to each_with_index [element 3] | array_flow.rb:443:5:443:5 | b [element 3] | provenance | | +| array_flow.rb:443:31:443:31 | x | array_flow.rb:444:14:444:14 | x | provenance | | +| array_flow.rb:447:10:447:10 | b [element 3] | array_flow.rb:447:10:447:13 | ...[...] | provenance | | +| array_flow.rb:451:5:451:5 | a [element 3] | array_flow.rb:452:9:452:9 | a [element 3] | provenance | | +| array_flow.rb:451:19:451:30 | call to source | array_flow.rb:451:5:451:5 | a [element 3] | provenance | | +| array_flow.rb:452:5:452:5 | b | array_flow.rb:456:10:456:10 | b | provenance | | +| array_flow.rb:452:9:452:9 | a [element 3] | array_flow.rb:452:46:452:46 | x | provenance | | +| array_flow.rb:452:9:455:7 | call to each_with_object | array_flow.rb:452:5:452:5 | b | provenance | | +| array_flow.rb:452:28:452:39 | call to source | array_flow.rb:452:9:455:7 | call to each_with_object | provenance | | +| array_flow.rb:452:28:452:39 | call to source | array_flow.rb:452:48:452:48 | a | provenance | | +| array_flow.rb:452:46:452:46 | x | array_flow.rb:453:14:453:14 | x | provenance | | +| array_flow.rb:452:48:452:48 | a | array_flow.rb:454:14:454:14 | a | provenance | | +| array_flow.rb:460:5:460:5 | a [element 3] | array_flow.rb:461:9:461:9 | a [element 3] | provenance | | +| array_flow.rb:460:19:460:28 | call to source | array_flow.rb:460:5:460:5 | a [element 3] | provenance | | +| array_flow.rb:461:5:461:5 | b [element 3] | array_flow.rb:462:10:462:10 | b [element 3] | provenance | | +| array_flow.rb:461:9:461:9 | a [element 3] | array_flow.rb:461:9:461:17 | call to entries [element 3] | provenance | | +| array_flow.rb:461:9:461:17 | call to entries [element 3] | array_flow.rb:461:5:461:5 | b [element 3] | provenance | | +| array_flow.rb:462:10:462:10 | b [element 3] | array_flow.rb:462:10:462:13 | ...[...] | provenance | | +| array_flow.rb:466:5:466:5 | a [element 3] | array_flow.rb:467:9:467:9 | a [element 3] | provenance | | +| array_flow.rb:466:5:466:5 | a [element 3] | array_flow.rb:471:9:471:9 | a [element 3] | provenance | | +| array_flow.rb:466:5:466:5 | a [element 3] | array_flow.rb:473:9:473:9 | a [element 3] | provenance | | +| array_flow.rb:466:5:466:5 | a [element 3] | array_flow.rb:477:9:477:9 | a [element 3] | provenance | | +| array_flow.rb:466:5:466:5 | a [element 4] | array_flow.rb:467:9:467:9 | a [element 4] | provenance | | +| array_flow.rb:466:5:466:5 | a [element 4] | array_flow.rb:477:9:477:9 | a [element 4] | provenance | | +| array_flow.rb:466:19:466:30 | call to source | array_flow.rb:466:5:466:5 | a [element 3] | provenance | | +| array_flow.rb:466:33:466:44 | call to source | array_flow.rb:466:5:466:5 | a [element 4] | provenance | | +| array_flow.rb:467:5:467:5 | b | array_flow.rb:470:10:470:10 | b | provenance | | +| array_flow.rb:467:9:467:9 | a [element 3] | array_flow.rb:467:9:469:7 | call to fetch | provenance | | +| array_flow.rb:467:9:467:9 | a [element 4] | array_flow.rb:467:9:469:7 | call to fetch | provenance | | +| array_flow.rb:467:9:469:7 | call to fetch | array_flow.rb:467:5:467:5 | b | provenance | | +| array_flow.rb:467:17:467:28 | call to source | array_flow.rb:467:35:467:35 | x | provenance | | +| array_flow.rb:467:35:467:35 | x | array_flow.rb:468:14:468:14 | x | provenance | | +| array_flow.rb:471:5:471:5 | b | array_flow.rb:472:10:472:10 | b | provenance | | +| array_flow.rb:471:9:471:9 | a [element 3] | array_flow.rb:471:9:471:18 | call to fetch | provenance | | +| array_flow.rb:471:9:471:18 | call to fetch | array_flow.rb:471:5:471:5 | b | provenance | | +| array_flow.rb:473:5:473:5 | b | array_flow.rb:474:10:474:10 | b | provenance | | +| array_flow.rb:473:9:473:9 | a [element 3] | array_flow.rb:473:9:473:32 | call to fetch | provenance | | +| array_flow.rb:473:9:473:32 | call to fetch | array_flow.rb:473:5:473:5 | b | provenance | | +| array_flow.rb:473:20:473:31 | call to source | array_flow.rb:473:9:473:32 | call to fetch | provenance | | +| array_flow.rb:475:5:475:5 | b | array_flow.rb:476:10:476:10 | b | provenance | | +| array_flow.rb:475:9:475:34 | call to fetch | array_flow.rb:475:5:475:5 | b | provenance | | +| array_flow.rb:475:22:475:33 | call to source | array_flow.rb:475:9:475:34 | call to fetch | provenance | | +| array_flow.rb:477:5:477:5 | b | array_flow.rb:478:10:478:10 | b | provenance | | +| array_flow.rb:477:9:477:9 | a [element 3] | array_flow.rb:477:9:477:32 | call to fetch | provenance | | +| array_flow.rb:477:9:477:9 | a [element 4] | array_flow.rb:477:9:477:32 | call to fetch | provenance | | +| array_flow.rb:477:9:477:32 | call to fetch | array_flow.rb:477:5:477:5 | b | provenance | | +| array_flow.rb:477:20:477:31 | call to source | array_flow.rb:477:9:477:32 | call to fetch | provenance | | +| array_flow.rb:482:5:482:5 | a [element 3] | array_flow.rb:484:10:484:10 | a [element 3] | provenance | | +| array_flow.rb:482:19:482:30 | call to source | array_flow.rb:482:5:482:5 | a [element 3] | provenance | | +| array_flow.rb:483:5:483:5 | [post] a [element] | array_flow.rb:484:10:484:10 | a [element] | provenance | | +| array_flow.rb:483:12:483:23 | call to source | array_flow.rb:483:5:483:5 | [post] a [element] | provenance | | +| array_flow.rb:484:10:484:10 | a [element 3] | array_flow.rb:484:10:484:13 | ...[...] | provenance | | +| array_flow.rb:484:10:484:10 | a [element] | array_flow.rb:484:10:484:13 | ...[...] | provenance | | +| array_flow.rb:485:5:485:5 | [post] a [element] | array_flow.rb:486:10:486:10 | a [element] | provenance | | +| array_flow.rb:485:12:485:23 | call to source | array_flow.rb:485:5:485:5 | [post] a [element] | provenance | | +| array_flow.rb:486:10:486:10 | a [element] | array_flow.rb:486:10:486:13 | ...[...] | provenance | | +| array_flow.rb:487:5:487:5 | [post] a [element] | array_flow.rb:490:10:490:10 | a [element] | provenance | | +| array_flow.rb:487:5:487:5 | [post] a [element] | array_flow.rb:494:10:494:10 | a [element] | provenance | | +| array_flow.rb:488:9:488:20 | call to source | array_flow.rb:487:5:487:5 | [post] a [element] | provenance | | +| array_flow.rb:490:10:490:10 | a [element] | array_flow.rb:490:10:490:13 | ...[...] | provenance | | +| array_flow.rb:491:5:491:5 | [post] a [element] | array_flow.rb:494:10:494:10 | a [element] | provenance | | +| array_flow.rb:492:9:492:20 | call to source | array_flow.rb:491:5:491:5 | [post] a [element] | provenance | | +| array_flow.rb:494:10:494:10 | a [element] | array_flow.rb:494:10:494:13 | ...[...] | provenance | | +| array_flow.rb:498:5:498:5 | a [element 3] | array_flow.rb:499:9:499:9 | a [element 3] | provenance | | +| array_flow.rb:498:19:498:28 | call to source | array_flow.rb:498:5:498:5 | a [element 3] | provenance | | +| array_flow.rb:499:5:499:5 | b [element] | array_flow.rb:502:10:502:10 | b [element] | provenance | | +| array_flow.rb:499:9:499:9 | a [element 3] | array_flow.rb:499:9:501:7 | call to filter [element] | provenance | | +| array_flow.rb:499:9:499:9 | a [element 3] | array_flow.rb:499:22:499:22 | x | provenance | | +| array_flow.rb:499:9:501:7 | call to filter [element] | array_flow.rb:499:5:499:5 | b [element] | provenance | | +| array_flow.rb:499:22:499:22 | x | array_flow.rb:500:14:500:14 | x | provenance | | +| array_flow.rb:502:10:502:10 | b [element] | array_flow.rb:502:10:502:13 | ...[...] | provenance | | +| array_flow.rb:506:5:506:5 | a [element 3] | array_flow.rb:507:9:507:9 | a [element 3] | provenance | | +| array_flow.rb:506:19:506:28 | call to source | array_flow.rb:506:5:506:5 | a [element 3] | provenance | | +| array_flow.rb:507:5:507:5 | b [element] | array_flow.rb:511:10:511:10 | b [element] | provenance | | +| array_flow.rb:507:9:507:9 | a [element 3] | array_flow.rb:507:9:510:7 | call to filter_map [element] | provenance | | +| array_flow.rb:507:9:507:9 | a [element 3] | array_flow.rb:507:26:507:26 | x | provenance | | +| array_flow.rb:507:9:510:7 | call to filter_map [element] | array_flow.rb:507:5:507:5 | b [element] | provenance | | +| array_flow.rb:507:26:507:26 | x | array_flow.rb:508:14:508:14 | x | provenance | | +| array_flow.rb:511:10:511:10 | b [element] | array_flow.rb:511:10:511:13 | ...[...] | provenance | | +| array_flow.rb:518:5:518:5 | d [element] | array_flow.rb:521:10:521:10 | d [element] | provenance | | +| array_flow.rb:518:9:520:7 | call to filter_map [element] | array_flow.rb:518:5:518:5 | d [element] | provenance | | +| array_flow.rb:519:9:519:20 | call to source | array_flow.rb:518:9:520:7 | call to filter_map [element] | provenance | | +| array_flow.rb:521:10:521:10 | d [element] | array_flow.rb:521:10:521:13 | ...[...] | provenance | | +| array_flow.rb:525:5:525:5 | a [element 3] | array_flow.rb:526:9:526:9 | a [element 3] | provenance | | +| array_flow.rb:525:19:525:28 | call to source | array_flow.rb:525:5:525:5 | a [element 3] | provenance | | +| array_flow.rb:526:5:526:5 | b [element] | array_flow.rb:531:10:531:10 | b [element] | provenance | | +| array_flow.rb:526:9:526:9 | [post] a [element] | array_flow.rb:530:10:530:10 | a [element] | provenance | | +| array_flow.rb:526:9:526:9 | a [element 3] | array_flow.rb:526:9:526:9 | [post] a [element] | provenance | | +| array_flow.rb:526:9:526:9 | a [element 3] | array_flow.rb:526:9:529:7 | call to filter! [element] | provenance | | +| array_flow.rb:526:9:526:9 | a [element 3] | array_flow.rb:526:23:526:23 | x | provenance | | +| array_flow.rb:526:9:529:7 | call to filter! [element] | array_flow.rb:526:5:526:5 | b [element] | provenance | | +| array_flow.rb:526:23:526:23 | x | array_flow.rb:527:14:527:14 | x | provenance | | +| array_flow.rb:530:10:530:10 | a [element] | array_flow.rb:530:10:530:13 | ...[...] | provenance | | +| array_flow.rb:531:10:531:10 | b [element] | array_flow.rb:531:10:531:13 | ...[...] | provenance | | +| array_flow.rb:535:5:535:5 | a [element 3] | array_flow.rb:536:9:536:9 | a [element 3] | provenance | | +| array_flow.rb:535:19:535:30 | call to source | array_flow.rb:535:5:535:5 | a [element 3] | provenance | | +| array_flow.rb:536:5:536:5 | b | array_flow.rb:539:10:539:10 | b | provenance | | +| array_flow.rb:536:9:536:9 | a [element 3] | array_flow.rb:536:9:538:7 | call to find | provenance | | +| array_flow.rb:536:9:536:9 | a [element 3] | array_flow.rb:536:41:536:41 | x | provenance | | +| array_flow.rb:536:9:538:7 | call to find | array_flow.rb:536:5:536:5 | b | provenance | | +| array_flow.rb:536:21:536:32 | call to source | array_flow.rb:536:9:538:7 | call to find | provenance | | +| array_flow.rb:536:41:536:41 | x | array_flow.rb:537:14:537:14 | x | provenance | | +| array_flow.rb:543:5:543:5 | a [element 3] | array_flow.rb:544:9:544:9 | a [element 3] | provenance | | +| array_flow.rb:543:19:543:28 | call to source | array_flow.rb:543:5:543:5 | a [element 3] | provenance | | +| array_flow.rb:544:5:544:5 | b [element] | array_flow.rb:547:10:547:10 | b [element] | provenance | | +| array_flow.rb:544:9:544:9 | a [element 3] | array_flow.rb:544:9:546:7 | call to find_all [element] | provenance | | +| array_flow.rb:544:9:544:9 | a [element 3] | array_flow.rb:544:24:544:24 | x | provenance | | +| array_flow.rb:544:9:546:7 | call to find_all [element] | array_flow.rb:544:5:544:5 | b [element] | provenance | | +| array_flow.rb:544:24:544:24 | x | array_flow.rb:545:14:545:14 | x | provenance | | +| array_flow.rb:547:10:547:10 | b [element] | array_flow.rb:547:10:547:13 | ...[...] | provenance | | +| array_flow.rb:551:5:551:5 | a [element 3] | array_flow.rb:552:5:552:5 | a [element 3] | provenance | | +| array_flow.rb:551:19:551:28 | call to source | array_flow.rb:551:5:551:5 | a [element 3] | provenance | | +| array_flow.rb:552:5:552:5 | a [element 3] | array_flow.rb:552:22:552:22 | x | provenance | | +| array_flow.rb:552:22:552:22 | x | array_flow.rb:553:14:553:14 | x | provenance | | +| array_flow.rb:558:5:558:5 | a [element 0] | array_flow.rb:560:10:560:10 | a [element 0] | provenance | | +| array_flow.rb:558:5:558:5 | a [element 0] | array_flow.rb:561:9:561:9 | a [element 0] | provenance | | +| array_flow.rb:558:5:558:5 | a [element 0] | array_flow.rb:564:9:564:9 | a [element 0] | provenance | | +| array_flow.rb:558:5:558:5 | a [element 3] | array_flow.rb:564:9:564:9 | a [element 3] | provenance | | +| array_flow.rb:558:10:558:21 | call to source | array_flow.rb:558:5:558:5 | a [element 0] | provenance | | +| array_flow.rb:558:30:558:41 | call to source | array_flow.rb:558:5:558:5 | a [element 3] | provenance | | +| array_flow.rb:559:5:559:5 | [post] a [element] | array_flow.rb:560:10:560:10 | a [element] | provenance | | +| array_flow.rb:559:5:559:5 | [post] a [element] | array_flow.rb:561:9:561:9 | a [element] | provenance | | +| array_flow.rb:559:5:559:5 | [post] a [element] | array_flow.rb:564:9:564:9 | a [element] | provenance | | +| array_flow.rb:559:12:559:23 | call to source | array_flow.rb:559:5:559:5 | [post] a [element] | provenance | | +| array_flow.rb:560:10:560:10 | a [element 0] | array_flow.rb:560:10:560:16 | call to first | provenance | | +| array_flow.rb:560:10:560:10 | a [element] | array_flow.rb:560:10:560:16 | call to first | provenance | | +| array_flow.rb:561:5:561:5 | b [element 0] | array_flow.rb:562:10:562:10 | b [element 0] | provenance | | +| array_flow.rb:561:5:561:5 | b [element] | array_flow.rb:562:10:562:10 | b [element] | provenance | | +| array_flow.rb:561:5:561:5 | b [element] | array_flow.rb:563:10:563:10 | b [element] | provenance | | +| array_flow.rb:561:9:561:9 | a [element 0] | array_flow.rb:561:9:561:18 | call to first [element 0] | provenance | | +| array_flow.rb:561:9:561:9 | a [element] | array_flow.rb:561:9:561:18 | call to first [element] | provenance | | +| array_flow.rb:561:9:561:18 | call to first [element 0] | array_flow.rb:561:5:561:5 | b [element 0] | provenance | | +| array_flow.rb:561:9:561:18 | call to first [element] | array_flow.rb:561:5:561:5 | b [element] | provenance | | +| array_flow.rb:562:10:562:10 | b [element 0] | array_flow.rb:562:10:562:13 | ...[...] | provenance | | +| array_flow.rb:562:10:562:10 | b [element] | array_flow.rb:562:10:562:13 | ...[...] | provenance | | +| array_flow.rb:563:10:563:10 | b [element] | array_flow.rb:563:10:563:13 | ...[...] | provenance | | +| array_flow.rb:564:5:564:5 | c [element 0] | array_flow.rb:565:10:565:10 | c [element 0] | provenance | | +| array_flow.rb:564:5:564:5 | c [element 3] | array_flow.rb:566:10:566:10 | c [element 3] | provenance | | +| array_flow.rb:564:5:564:5 | c [element] | array_flow.rb:565:10:565:10 | c [element] | provenance | | +| array_flow.rb:564:5:564:5 | c [element] | array_flow.rb:566:10:566:10 | c [element] | provenance | | +| array_flow.rb:564:9:564:9 | a [element 0] | array_flow.rb:564:9:564:18 | call to first [element 0] | provenance | | +| array_flow.rb:564:9:564:9 | a [element 3] | array_flow.rb:564:9:564:18 | call to first [element 3] | provenance | | +| array_flow.rb:564:9:564:9 | a [element] | array_flow.rb:564:9:564:18 | call to first [element] | provenance | | +| array_flow.rb:564:9:564:18 | call to first [element 0] | array_flow.rb:564:5:564:5 | c [element 0] | provenance | | +| array_flow.rb:564:9:564:18 | call to first [element 3] | array_flow.rb:564:5:564:5 | c [element 3] | provenance | | +| array_flow.rb:564:9:564:18 | call to first [element] | array_flow.rb:564:5:564:5 | c [element] | provenance | | +| array_flow.rb:565:10:565:10 | c [element 0] | array_flow.rb:565:10:565:13 | ...[...] | provenance | | +| array_flow.rb:565:10:565:10 | c [element] | array_flow.rb:565:10:565:13 | ...[...] | provenance | | +| array_flow.rb:566:10:566:10 | c [element 3] | array_flow.rb:566:10:566:13 | ...[...] | provenance | | +| array_flow.rb:566:10:566:10 | c [element] | array_flow.rb:566:10:566:13 | ...[...] | provenance | | +| array_flow.rb:570:5:570:5 | a [element 2] | array_flow.rb:571:9:571:9 | a [element 2] | provenance | | +| array_flow.rb:570:5:570:5 | a [element 2] | array_flow.rb:576:9:576:9 | a [element 2] | provenance | | +| array_flow.rb:570:16:570:27 | call to source | array_flow.rb:570:5:570:5 | a [element 2] | provenance | | +| array_flow.rb:571:5:571:5 | b [element] | array_flow.rb:575:10:575:10 | b [element] | provenance | | +| array_flow.rb:571:9:571:9 | a [element 2] | array_flow.rb:571:9:574:7 | call to flat_map [element] | provenance | | +| array_flow.rb:571:9:571:9 | a [element 2] | array_flow.rb:571:24:571:24 | x | provenance | | +| array_flow.rb:571:9:574:7 | call to flat_map [element] | array_flow.rb:571:5:571:5 | b [element] | provenance | | +| array_flow.rb:571:24:571:24 | x | array_flow.rb:572:14:572:14 | x | provenance | | +| array_flow.rb:573:13:573:24 | call to source | array_flow.rb:571:9:574:7 | call to flat_map [element] | provenance | | +| array_flow.rb:575:10:575:10 | b [element] | array_flow.rb:575:10:575:13 | ...[...] | provenance | | +| array_flow.rb:576:5:576:5 | b [element] | array_flow.rb:580:10:580:10 | b [element] | provenance | | +| array_flow.rb:576:9:576:9 | a [element 2] | array_flow.rb:576:24:576:24 | x | provenance | | +| array_flow.rb:576:9:579:7 | call to flat_map [element] | array_flow.rb:576:5:576:5 | b [element] | provenance | | +| array_flow.rb:576:24:576:24 | x | array_flow.rb:577:14:577:14 | x | provenance | | +| array_flow.rb:578:9:578:20 | call to source | array_flow.rb:576:9:579:7 | call to flat_map [element] | provenance | | +| array_flow.rb:580:10:580:10 | b [element] | array_flow.rb:580:10:580:13 | ...[...] | provenance | | +| array_flow.rb:584:5:584:5 | a [element 2, element 1] | array_flow.rb:585:9:585:9 | a [element 2, element 1] | provenance | | +| array_flow.rb:584:20:584:29 | call to source | array_flow.rb:584:5:584:5 | a [element 2, element 1] | provenance | | +| array_flow.rb:585:5:585:5 | b [element] | array_flow.rb:586:10:586:10 | b [element] | provenance | | +| array_flow.rb:585:9:585:9 | a [element 2, element 1] | array_flow.rb:585:9:585:17 | call to flatten [element] | provenance | | +| array_flow.rb:585:9:585:17 | call to flatten [element] | array_flow.rb:585:5:585:5 | b [element] | provenance | | +| array_flow.rb:586:10:586:10 | b [element] | array_flow.rb:586:10:586:13 | ...[...] | provenance | | +| array_flow.rb:590:5:590:5 | a [element 2, element 1] | array_flow.rb:591:10:591:10 | a [element 2, element 1] | provenance | | +| array_flow.rb:590:5:590:5 | a [element 2, element 1] | array_flow.rb:592:9:592:9 | a [element 2, element 1] | provenance | | +| array_flow.rb:590:20:590:29 | call to source | array_flow.rb:590:5:590:5 | a [element 2, element 1] | provenance | | +| array_flow.rb:591:10:591:10 | a [element 2, element 1] | array_flow.rb:591:10:591:13 | ...[...] [element 1] | provenance | | +| array_flow.rb:591:10:591:13 | ...[...] [element 1] | array_flow.rb:591:10:591:16 | ...[...] | provenance | | +| array_flow.rb:592:5:592:5 | b [element, element 1] | array_flow.rb:596:10:596:10 | b [element, element 1] | provenance | | +| array_flow.rb:592:5:592:5 | b [element] | array_flow.rb:595:10:595:10 | b [element] | provenance | | +| array_flow.rb:592:9:592:9 | [post] a [element, element 1] | array_flow.rb:594:10:594:10 | a [element, element 1] | provenance | | +| array_flow.rb:592:9:592:9 | [post] a [element] | array_flow.rb:593:10:593:10 | a [element] | provenance | | +| array_flow.rb:592:9:592:9 | a [element 2, element 1] | array_flow.rb:592:9:592:9 | [post] a [element, element 1] | provenance | | +| array_flow.rb:592:9:592:9 | a [element 2, element 1] | array_flow.rb:592:9:592:9 | [post] a [element] | provenance | | +| array_flow.rb:592:9:592:9 | a [element 2, element 1] | array_flow.rb:592:9:592:18 | call to flatten! [element, element 1] | provenance | | +| array_flow.rb:592:9:592:9 | a [element 2, element 1] | array_flow.rb:592:9:592:18 | call to flatten! [element] | provenance | | +| array_flow.rb:592:9:592:18 | call to flatten! [element, element 1] | array_flow.rb:592:5:592:5 | b [element, element 1] | provenance | | +| array_flow.rb:592:9:592:18 | call to flatten! [element] | array_flow.rb:592:5:592:5 | b [element] | provenance | | +| array_flow.rb:593:10:593:10 | a [element] | array_flow.rb:593:10:593:13 | ...[...] | provenance | | +| array_flow.rb:594:10:594:10 | a [element, element 1] | array_flow.rb:594:10:594:13 | ...[...] [element 1] | provenance | | +| array_flow.rb:594:10:594:13 | ...[...] [element 1] | array_flow.rb:594:10:594:16 | ...[...] | provenance | | +| array_flow.rb:595:10:595:10 | b [element] | array_flow.rb:595:10:595:13 | ...[...] | provenance | | +| array_flow.rb:596:10:596:10 | b [element, element 1] | array_flow.rb:596:10:596:13 | ...[...] [element 1] | provenance | | +| array_flow.rb:596:10:596:13 | ...[...] [element 1] | array_flow.rb:596:10:596:16 | ...[...] | provenance | | +| array_flow.rb:600:5:600:5 | a [element 3] | array_flow.rb:601:9:601:9 | a [element 3] | provenance | | +| array_flow.rb:600:5:600:5 | a [element 3] | array_flow.rb:603:9:603:9 | a [element 3] | provenance | | +| array_flow.rb:600:19:600:30 | call to source | array_flow.rb:600:5:600:5 | a [element 3] | provenance | | +| array_flow.rb:601:5:601:5 | b [element] | array_flow.rb:602:10:602:10 | b [element] | provenance | | +| array_flow.rb:601:9:601:9 | a [element 3] | array_flow.rb:601:9:601:20 | call to grep [element] | provenance | | +| array_flow.rb:601:9:601:20 | call to grep [element] | array_flow.rb:601:5:601:5 | b [element] | provenance | | +| array_flow.rb:602:10:602:10 | b [element] | array_flow.rb:602:10:602:13 | ...[...] | provenance | | +| array_flow.rb:603:5:603:5 | b [element] | array_flow.rb:607:10:607:10 | b [element] | provenance | | +| array_flow.rb:603:9:603:9 | a [element 3] | array_flow.rb:603:26:603:26 | x | provenance | | +| array_flow.rb:603:9:606:7 | call to grep [element] | array_flow.rb:603:5:603:5 | b [element] | provenance | | +| array_flow.rb:603:26:603:26 | x | array_flow.rb:604:14:604:14 | x | provenance | | +| array_flow.rb:605:9:605:20 | call to source | array_flow.rb:603:9:606:7 | call to grep [element] | provenance | | +| array_flow.rb:607:10:607:10 | b [element] | array_flow.rb:607:10:607:13 | ...[...] | provenance | | +| array_flow.rb:611:5:611:5 | a [element 3] | array_flow.rb:612:9:612:9 | a [element 3] | provenance | | +| array_flow.rb:611:5:611:5 | a [element 3] | array_flow.rb:614:9:614:9 | a [element 3] | provenance | | +| array_flow.rb:611:19:611:30 | call to source | array_flow.rb:611:5:611:5 | a [element 3] | provenance | | +| array_flow.rb:612:5:612:5 | b [element] | array_flow.rb:613:10:613:10 | b [element] | provenance | | +| array_flow.rb:612:9:612:9 | a [element 3] | array_flow.rb:612:9:612:21 | call to grep_v [element] | provenance | | +| array_flow.rb:612:9:612:21 | call to grep_v [element] | array_flow.rb:612:5:612:5 | b [element] | provenance | | +| array_flow.rb:613:10:613:10 | b [element] | array_flow.rb:613:10:613:13 | ...[...] | provenance | | +| array_flow.rb:614:5:614:5 | b [element] | array_flow.rb:618:10:618:10 | b [element] | provenance | | +| array_flow.rb:614:9:614:9 | a [element 3] | array_flow.rb:614:27:614:27 | x | provenance | | +| array_flow.rb:614:9:617:7 | call to grep_v [element] | array_flow.rb:614:5:614:5 | b [element] | provenance | | +| array_flow.rb:614:27:614:27 | x | array_flow.rb:615:14:615:14 | x | provenance | | +| array_flow.rb:616:9:616:20 | call to source | array_flow.rb:614:9:617:7 | call to grep_v [element] | provenance | | +| array_flow.rb:618:10:618:10 | b [element] | array_flow.rb:618:10:618:13 | ...[...] | provenance | | +| array_flow.rb:622:5:622:5 | a [element 3] | array_flow.rb:623:9:623:9 | a [element 3] | provenance | | +| array_flow.rb:622:19:622:30 | call to source | array_flow.rb:622:5:622:5 | a [element 3] | provenance | | +| array_flow.rb:623:9:623:9 | a [element 3] | array_flow.rb:623:24:623:24 | x | provenance | | +| array_flow.rb:623:24:623:24 | x | array_flow.rb:624:14:624:14 | x | provenance | | +| array_flow.rb:631:5:631:5 | a [element 3] | array_flow.rb:632:5:632:5 | a [element 3] | provenance | | +| array_flow.rb:631:19:631:28 | call to source | array_flow.rb:631:5:631:5 | a [element 3] | provenance | | +| array_flow.rb:632:5:632:5 | a [element 3] | array_flow.rb:632:17:632:17 | x | provenance | | +| array_flow.rb:632:17:632:17 | x | array_flow.rb:633:14:633:14 | x | provenance | | +| array_flow.rb:638:5:638:5 | a [element 0] | array_flow.rb:639:9:639:9 | a [element 0] | provenance | | +| array_flow.rb:638:5:638:5 | a [element 0] | array_flow.rb:645:9:645:9 | a [element 0] | provenance | | +| array_flow.rb:638:5:638:5 | a [element 2] | array_flow.rb:639:9:639:9 | a [element 2] | provenance | | +| array_flow.rb:638:5:638:5 | a [element 2] | array_flow.rb:645:9:645:9 | a [element 2] | provenance | | +| array_flow.rb:638:10:638:21 | call to source | array_flow.rb:638:5:638:5 | a [element 0] | provenance | | +| array_flow.rb:638:27:638:38 | call to source | array_flow.rb:638:5:638:5 | a [element 2] | provenance | | +| array_flow.rb:639:5:639:5 | b | array_flow.rb:644:10:644:10 | b | provenance | | +| array_flow.rb:639:9:639:9 | a [element 0] | array_flow.rb:639:22:639:22 | x | provenance | | +| array_flow.rb:639:9:639:9 | a [element 2] | array_flow.rb:639:25:639:25 | y | provenance | | +| array_flow.rb:639:9:643:7 | call to inject | array_flow.rb:639:5:639:5 | b | provenance | | +| array_flow.rb:639:22:639:22 | x | array_flow.rb:640:14:640:14 | x | provenance | | +| array_flow.rb:639:25:639:25 | y | array_flow.rb:641:14:641:14 | y | provenance | | +| array_flow.rb:642:9:642:19 | call to source | array_flow.rb:639:9:643:7 | call to inject | provenance | | +| array_flow.rb:645:5:645:5 | c | array_flow.rb:650:10:650:10 | c | provenance | | +| array_flow.rb:645:9:645:9 | a [element 0] | array_flow.rb:645:28:645:28 | y | provenance | | +| array_flow.rb:645:9:645:9 | a [element 2] | array_flow.rb:645:28:645:28 | y | provenance | | +| array_flow.rb:645:9:649:7 | call to inject | array_flow.rb:645:5:645:5 | c | provenance | | +| array_flow.rb:645:28:645:28 | y | array_flow.rb:647:14:647:14 | y | provenance | | +| array_flow.rb:648:9:648:19 | call to source | array_flow.rb:645:9:649:7 | call to inject | provenance | | +| array_flow.rb:655:5:655:5 | a [element 2] | array_flow.rb:656:9:656:9 | a [element 2] | provenance | | +| array_flow.rb:655:16:655:27 | call to source | array_flow.rb:655:5:655:5 | a [element 2] | provenance | | +| array_flow.rb:656:5:656:5 | b [element 1] | array_flow.rb:663:10:663:10 | b [element 1] | provenance | | +| array_flow.rb:656:5:656:5 | b [element 2] | array_flow.rb:664:10:664:10 | b [element 2] | provenance | | +| array_flow.rb:656:5:656:5 | b [element 4] | array_flow.rb:666:10:666:10 | b [element 4] | provenance | | +| array_flow.rb:656:9:656:9 | [post] a [element 1] | array_flow.rb:658:10:658:10 | a [element 1] | provenance | | +| array_flow.rb:656:9:656:9 | [post] a [element 2] | array_flow.rb:659:10:659:10 | a [element 2] | provenance | | +| array_flow.rb:656:9:656:9 | [post] a [element 4] | array_flow.rb:661:10:661:10 | a [element 4] | provenance | | +| array_flow.rb:656:9:656:9 | a [element 2] | array_flow.rb:656:9:656:9 | [post] a [element 4] | provenance | | +| array_flow.rb:656:9:656:9 | a [element 2] | array_flow.rb:656:9:656:47 | call to insert [element 4] | provenance | | +| array_flow.rb:656:9:656:47 | call to insert [element 1] | array_flow.rb:656:5:656:5 | b [element 1] | provenance | | +| array_flow.rb:656:9:656:47 | call to insert [element 2] | array_flow.rb:656:5:656:5 | b [element 2] | provenance | | +| array_flow.rb:656:9:656:47 | call to insert [element 4] | array_flow.rb:656:5:656:5 | b [element 4] | provenance | | +| array_flow.rb:656:21:656:32 | call to source | array_flow.rb:656:9:656:9 | [post] a [element 1] | provenance | | +| array_flow.rb:656:21:656:32 | call to source | array_flow.rb:656:9:656:47 | call to insert [element 1] | provenance | | +| array_flow.rb:656:35:656:46 | call to source | array_flow.rb:656:9:656:9 | [post] a [element 2] | provenance | | +| array_flow.rb:656:35:656:46 | call to source | array_flow.rb:656:9:656:47 | call to insert [element 2] | provenance | | +| array_flow.rb:658:10:658:10 | a [element 1] | array_flow.rb:658:10:658:13 | ...[...] | provenance | | +| array_flow.rb:659:10:659:10 | a [element 2] | array_flow.rb:659:10:659:13 | ...[...] | provenance | | +| array_flow.rb:661:10:661:10 | a [element 4] | array_flow.rb:661:10:661:13 | ...[...] | provenance | | +| array_flow.rb:663:10:663:10 | b [element 1] | array_flow.rb:663:10:663:13 | ...[...] | provenance | | +| array_flow.rb:664:10:664:10 | b [element 2] | array_flow.rb:664:10:664:13 | ...[...] | provenance | | +| array_flow.rb:666:10:666:10 | b [element 4] | array_flow.rb:666:10:666:13 | ...[...] | provenance | | +| array_flow.rb:669:5:669:5 | c [element 2] | array_flow.rb:670:9:670:9 | c [element 2] | provenance | | +| array_flow.rb:669:16:669:27 | call to source | array_flow.rb:669:5:669:5 | c [element 2] | provenance | | +| array_flow.rb:670:5:670:5 | d [element] | array_flow.rb:672:10:672:10 | d [element] | provenance | | +| array_flow.rb:670:9:670:9 | [post] c [element] | array_flow.rb:671:10:671:10 | c [element] | provenance | | +| array_flow.rb:670:9:670:9 | c [element 2] | array_flow.rb:670:9:670:9 | [post] c [element] | provenance | | +| array_flow.rb:670:9:670:9 | c [element 2] | array_flow.rb:670:9:670:47 | call to insert [element] | provenance | | +| array_flow.rb:670:9:670:47 | call to insert [element] | array_flow.rb:670:5:670:5 | d [element] | provenance | | +| array_flow.rb:670:21:670:32 | call to source | array_flow.rb:670:9:670:9 | [post] c [element] | provenance | | +| array_flow.rb:670:21:670:32 | call to source | array_flow.rb:670:9:670:47 | call to insert [element] | provenance | | +| array_flow.rb:670:35:670:46 | call to source | array_flow.rb:670:9:670:9 | [post] c [element] | provenance | | +| array_flow.rb:670:35:670:46 | call to source | array_flow.rb:670:9:670:47 | call to insert [element] | provenance | | +| array_flow.rb:671:10:671:10 | c [element] | array_flow.rb:671:10:671:13 | ...[...] | provenance | | +| array_flow.rb:672:10:672:10 | d [element] | array_flow.rb:672:10:672:13 | ...[...] | provenance | | +| array_flow.rb:683:5:683:5 | a [element 2] | array_flow.rb:684:9:684:9 | a [element 2] | provenance | | +| array_flow.rb:683:16:683:27 | call to source | array_flow.rb:683:5:683:5 | a [element 2] | provenance | | +| array_flow.rb:684:5:684:5 | b [element] | array_flow.rb:685:10:685:10 | b [element] | provenance | | +| array_flow.rb:684:9:684:9 | a [element 2] | array_flow.rb:684:9:684:60 | call to intersection [element] | provenance | | +| array_flow.rb:684:9:684:60 | call to intersection [element] | array_flow.rb:684:5:684:5 | b [element] | provenance | | +| array_flow.rb:684:31:684:42 | call to source | array_flow.rb:684:9:684:60 | call to intersection [element] | provenance | | +| array_flow.rb:684:47:684:58 | call to source | array_flow.rb:684:9:684:60 | call to intersection [element] | provenance | | +| array_flow.rb:685:10:685:10 | b [element] | array_flow.rb:685:10:685:13 | ...[...] | provenance | | +| array_flow.rb:689:5:689:5 | a [element 2] | array_flow.rb:690:9:690:9 | a [element 2] | provenance | | +| array_flow.rb:689:16:689:25 | call to source | array_flow.rb:689:5:689:5 | a [element 2] | provenance | | +| array_flow.rb:690:5:690:5 | b [element] | array_flow.rb:695:10:695:10 | b [element] | provenance | | +| array_flow.rb:690:9:690:9 | [post] a [element] | array_flow.rb:694:10:694:10 | a [element] | provenance | | +| array_flow.rb:690:9:690:9 | a [element 2] | array_flow.rb:690:9:690:9 | [post] a [element] | provenance | | +| array_flow.rb:690:9:690:9 | a [element 2] | array_flow.rb:690:9:693:7 | call to keep_if [element] | provenance | | +| array_flow.rb:690:9:690:9 | a [element 2] | array_flow.rb:690:23:690:23 | x | provenance | | +| array_flow.rb:690:9:693:7 | call to keep_if [element] | array_flow.rb:690:5:690:5 | b [element] | provenance | | +| array_flow.rb:690:23:690:23 | x | array_flow.rb:691:14:691:14 | x | provenance | | +| array_flow.rb:694:10:694:10 | a [element] | array_flow.rb:694:10:694:13 | ...[...] | provenance | | +| array_flow.rb:695:10:695:10 | b [element] | array_flow.rb:695:10:695:13 | ...[...] | provenance | | +| array_flow.rb:699:5:699:5 | a [element 2] | array_flow.rb:701:10:701:10 | a [element 2] | provenance | | +| array_flow.rb:699:5:699:5 | a [element 2] | array_flow.rb:702:9:702:9 | a [element 2] | provenance | | +| array_flow.rb:699:16:699:27 | call to source | array_flow.rb:699:5:699:5 | a [element 2] | provenance | | +| array_flow.rb:700:5:700:5 | [post] a [element] | array_flow.rb:701:10:701:10 | a [element] | provenance | | +| array_flow.rb:700:5:700:5 | [post] a [element] | array_flow.rb:702:9:702:9 | a [element] | provenance | | +| array_flow.rb:700:12:700:23 | call to source | array_flow.rb:700:5:700:5 | [post] a [element] | provenance | | +| array_flow.rb:701:10:701:10 | a [element 2] | array_flow.rb:701:10:701:15 | call to last | provenance | | +| array_flow.rb:701:10:701:10 | a [element] | array_flow.rb:701:10:701:15 | call to last | provenance | | +| array_flow.rb:702:5:702:5 | b [element] | array_flow.rb:703:10:703:10 | b [element] | provenance | | +| array_flow.rb:702:5:702:5 | b [element] | array_flow.rb:704:10:704:10 | b [element] | provenance | | +| array_flow.rb:702:9:702:9 | a [element 2] | array_flow.rb:702:9:702:17 | call to last [element] | provenance | | +| array_flow.rb:702:9:702:9 | a [element] | array_flow.rb:702:9:702:17 | call to last [element] | provenance | | +| array_flow.rb:702:9:702:17 | call to last [element] | array_flow.rb:702:5:702:5 | b [element] | provenance | | +| array_flow.rb:703:10:703:10 | b [element] | array_flow.rb:703:10:703:13 | ...[...] | provenance | | +| array_flow.rb:704:10:704:10 | b [element] | array_flow.rb:704:10:704:13 | ...[...] | provenance | | +| array_flow.rb:708:5:708:5 | a [element 2] | array_flow.rb:709:9:709:9 | a [element 2] | provenance | | +| array_flow.rb:708:16:708:27 | call to source | array_flow.rb:708:5:708:5 | a [element 2] | provenance | | +| array_flow.rb:709:5:709:5 | b [element] | array_flow.rb:713:10:713:10 | b [element] | provenance | | +| array_flow.rb:709:9:709:9 | a [element 2] | array_flow.rb:709:19:709:19 | x | provenance | | +| array_flow.rb:709:9:712:7 | call to map [element] | array_flow.rb:709:5:709:5 | b [element] | provenance | | +| array_flow.rb:709:19:709:19 | x | array_flow.rb:710:14:710:14 | x | provenance | | +| array_flow.rb:711:9:711:19 | call to source | array_flow.rb:709:9:712:7 | call to map [element] | provenance | | +| array_flow.rb:713:10:713:10 | b [element] | array_flow.rb:713:10:713:13 | ...[...] | provenance | | +| array_flow.rb:717:5:717:5 | a [element 2] | array_flow.rb:718:9:718:9 | a [element 2] | provenance | | +| array_flow.rb:717:16:717:27 | call to source | array_flow.rb:717:5:717:5 | a [element 2] | provenance | | +| array_flow.rb:718:5:718:5 | b [element] | array_flow.rb:722:10:722:10 | b [element] | provenance | | +| array_flow.rb:718:9:718:9 | a [element 2] | array_flow.rb:718:20:718:20 | x | provenance | | +| array_flow.rb:718:9:721:7 | call to map! [element] | array_flow.rb:718:5:718:5 | b [element] | provenance | | +| array_flow.rb:718:20:718:20 | x | array_flow.rb:719:14:719:14 | x | provenance | | +| array_flow.rb:720:9:720:19 | call to source | array_flow.rb:718:9:721:7 | call to map! [element] | provenance | | +| array_flow.rb:722:10:722:10 | b [element] | array_flow.rb:722:10:722:13 | ...[...] | provenance | | +| array_flow.rb:726:5:726:5 | a [element 2] | array_flow.rb:729:9:729:9 | a [element 2] | provenance | | +| array_flow.rb:726:5:726:5 | a [element 2] | array_flow.rb:733:9:733:9 | a [element 2] | provenance | | +| array_flow.rb:726:5:726:5 | a [element 2] | array_flow.rb:737:9:737:9 | a [element 2] | provenance | | +| array_flow.rb:726:5:726:5 | a [element 2] | array_flow.rb:745:9:745:9 | a [element 2] | provenance | | +| array_flow.rb:726:16:726:25 | call to source | array_flow.rb:726:5:726:5 | a [element 2] | provenance | | +| array_flow.rb:729:5:729:5 | b | array_flow.rb:730:10:730:10 | b | provenance | | +| array_flow.rb:729:9:729:9 | a [element 2] | array_flow.rb:729:9:729:13 | call to max | provenance | | +| array_flow.rb:729:9:729:13 | call to max | array_flow.rb:729:5:729:5 | b | provenance | | +| array_flow.rb:733:5:733:5 | c [element] | array_flow.rb:734:10:734:10 | c [element] | provenance | | +| array_flow.rb:733:9:733:9 | a [element 2] | array_flow.rb:733:9:733:16 | call to max [element] | provenance | | +| array_flow.rb:733:9:733:16 | call to max [element] | array_flow.rb:733:5:733:5 | c [element] | provenance | | +| array_flow.rb:734:10:734:10 | c [element] | array_flow.rb:734:10:734:13 | ...[...] | provenance | | +| array_flow.rb:737:5:737:5 | d | array_flow.rb:742:10:742:10 | d | provenance | | +| array_flow.rb:737:9:737:9 | a [element 2] | array_flow.rb:737:9:741:7 | call to max | provenance | | +| array_flow.rb:737:9:737:9 | a [element 2] | array_flow.rb:737:19:737:19 | x | provenance | | +| array_flow.rb:737:9:737:9 | a [element 2] | array_flow.rb:737:22:737:22 | y | provenance | | +| array_flow.rb:737:9:741:7 | call to max | array_flow.rb:737:5:737:5 | d | provenance | | +| array_flow.rb:737:19:737:19 | x | array_flow.rb:738:14:738:14 | x | provenance | | +| array_flow.rb:737:22:737:22 | y | array_flow.rb:739:14:739:14 | y | provenance | | +| array_flow.rb:745:5:745:5 | e [element] | array_flow.rb:750:10:750:10 | e [element] | provenance | | +| array_flow.rb:745:9:745:9 | a [element 2] | array_flow.rb:745:9:749:7 | call to max [element] | provenance | | +| array_flow.rb:745:9:745:9 | a [element 2] | array_flow.rb:745:22:745:22 | x | provenance | | +| array_flow.rb:745:9:745:9 | a [element 2] | array_flow.rb:745:25:745:25 | y | provenance | | +| array_flow.rb:745:9:749:7 | call to max [element] | array_flow.rb:745:5:745:5 | e [element] | provenance | | +| array_flow.rb:745:22:745:22 | x | array_flow.rb:746:14:746:14 | x | provenance | | +| array_flow.rb:745:25:745:25 | y | array_flow.rb:747:14:747:14 | y | provenance | | +| array_flow.rb:750:10:750:10 | e [element] | array_flow.rb:750:10:750:13 | ...[...] | provenance | | +| array_flow.rb:754:5:754:5 | a [element 2] | array_flow.rb:757:9:757:9 | a [element 2] | provenance | | +| array_flow.rb:754:5:754:5 | a [element 2] | array_flow.rb:764:9:764:9 | a [element 2] | provenance | | +| array_flow.rb:754:16:754:25 | call to source | array_flow.rb:754:5:754:5 | a [element 2] | provenance | | +| array_flow.rb:757:5:757:5 | b | array_flow.rb:761:10:761:10 | b | provenance | | +| array_flow.rb:757:9:757:9 | a [element 2] | array_flow.rb:757:9:760:7 | call to max_by | provenance | | +| array_flow.rb:757:9:757:9 | a [element 2] | array_flow.rb:757:22:757:22 | x | provenance | | +| array_flow.rb:757:9:760:7 | call to max_by | array_flow.rb:757:5:757:5 | b | provenance | | +| array_flow.rb:757:22:757:22 | x | array_flow.rb:758:14:758:14 | x | provenance | | +| array_flow.rb:764:5:764:5 | c [element] | array_flow.rb:768:10:768:10 | c [element] | provenance | | +| array_flow.rb:764:9:764:9 | a [element 2] | array_flow.rb:764:9:767:7 | call to max_by [element] | provenance | | +| array_flow.rb:764:9:764:9 | a [element 2] | array_flow.rb:764:25:764:25 | x | provenance | | +| array_flow.rb:764:9:767:7 | call to max_by [element] | array_flow.rb:764:5:764:5 | c [element] | provenance | | +| array_flow.rb:764:25:764:25 | x | array_flow.rb:765:14:765:14 | x | provenance | | +| array_flow.rb:768:10:768:10 | c [element] | array_flow.rb:768:10:768:13 | ...[...] | provenance | | +| array_flow.rb:772:5:772:5 | a [element 2] | array_flow.rb:775:9:775:9 | a [element 2] | provenance | | +| array_flow.rb:772:5:772:5 | a [element 2] | array_flow.rb:779:9:779:9 | a [element 2] | provenance | | +| array_flow.rb:772:5:772:5 | a [element 2] | array_flow.rb:783:9:783:9 | a [element 2] | provenance | | +| array_flow.rb:772:5:772:5 | a [element 2] | array_flow.rb:791:9:791:9 | a [element 2] | provenance | | +| array_flow.rb:772:16:772:25 | call to source | array_flow.rb:772:5:772:5 | a [element 2] | provenance | | +| array_flow.rb:775:5:775:5 | b | array_flow.rb:776:10:776:10 | b | provenance | | +| array_flow.rb:775:9:775:9 | a [element 2] | array_flow.rb:775:9:775:13 | call to min | provenance | | +| array_flow.rb:775:9:775:13 | call to min | array_flow.rb:775:5:775:5 | b | provenance | | +| array_flow.rb:779:5:779:5 | c [element] | array_flow.rb:780:10:780:10 | c [element] | provenance | | +| array_flow.rb:779:9:779:9 | a [element 2] | array_flow.rb:779:9:779:16 | call to min [element] | provenance | | +| array_flow.rb:779:9:779:16 | call to min [element] | array_flow.rb:779:5:779:5 | c [element] | provenance | | +| array_flow.rb:780:10:780:10 | c [element] | array_flow.rb:780:10:780:13 | ...[...] | provenance | | +| array_flow.rb:783:5:783:5 | d | array_flow.rb:788:10:788:10 | d | provenance | | +| array_flow.rb:783:9:783:9 | a [element 2] | array_flow.rb:783:9:787:7 | call to min | provenance | | +| array_flow.rb:783:9:783:9 | a [element 2] | array_flow.rb:783:19:783:19 | x | provenance | | +| array_flow.rb:783:9:783:9 | a [element 2] | array_flow.rb:783:22:783:22 | y | provenance | | +| array_flow.rb:783:9:787:7 | call to min | array_flow.rb:783:5:783:5 | d | provenance | | +| array_flow.rb:783:19:783:19 | x | array_flow.rb:784:14:784:14 | x | provenance | | +| array_flow.rb:783:22:783:22 | y | array_flow.rb:785:14:785:14 | y | provenance | | +| array_flow.rb:791:5:791:5 | e [element] | array_flow.rb:796:10:796:10 | e [element] | provenance | | +| array_flow.rb:791:9:791:9 | a [element 2] | array_flow.rb:791:9:795:7 | call to min [element] | provenance | | +| array_flow.rb:791:9:791:9 | a [element 2] | array_flow.rb:791:22:791:22 | x | provenance | | +| array_flow.rb:791:9:791:9 | a [element 2] | array_flow.rb:791:25:791:25 | y | provenance | | +| array_flow.rb:791:9:795:7 | call to min [element] | array_flow.rb:791:5:791:5 | e [element] | provenance | | +| array_flow.rb:791:22:791:22 | x | array_flow.rb:792:14:792:14 | x | provenance | | +| array_flow.rb:791:25:791:25 | y | array_flow.rb:793:14:793:14 | y | provenance | | +| array_flow.rb:796:10:796:10 | e [element] | array_flow.rb:796:10:796:13 | ...[...] | provenance | | +| array_flow.rb:800:5:800:5 | a [element 2] | array_flow.rb:803:9:803:9 | a [element 2] | provenance | | +| array_flow.rb:800:5:800:5 | a [element 2] | array_flow.rb:810:9:810:9 | a [element 2] | provenance | | +| array_flow.rb:800:16:800:25 | call to source | array_flow.rb:800:5:800:5 | a [element 2] | provenance | | +| array_flow.rb:803:5:803:5 | b | array_flow.rb:807:10:807:10 | b | provenance | | +| array_flow.rb:803:9:803:9 | a [element 2] | array_flow.rb:803:9:806:7 | call to min_by | provenance | | +| array_flow.rb:803:9:803:9 | a [element 2] | array_flow.rb:803:22:803:22 | x | provenance | | +| array_flow.rb:803:9:806:7 | call to min_by | array_flow.rb:803:5:803:5 | b | provenance | | +| array_flow.rb:803:22:803:22 | x | array_flow.rb:804:14:804:14 | x | provenance | | +| array_flow.rb:810:5:810:5 | c [element] | array_flow.rb:814:10:814:10 | c [element] | provenance | | +| array_flow.rb:810:9:810:9 | a [element 2] | array_flow.rb:810:9:813:7 | call to min_by [element] | provenance | | +| array_flow.rb:810:9:810:9 | a [element 2] | array_flow.rb:810:25:810:25 | x | provenance | | +| array_flow.rb:810:9:813:7 | call to min_by [element] | array_flow.rb:810:5:810:5 | c [element] | provenance | | +| array_flow.rb:810:25:810:25 | x | array_flow.rb:811:14:811:14 | x | provenance | | +| array_flow.rb:814:10:814:10 | c [element] | array_flow.rb:814:10:814:13 | ...[...] | provenance | | +| array_flow.rb:818:5:818:5 | a [element 2] | array_flow.rb:820:9:820:9 | a [element 2] | provenance | | +| array_flow.rb:818:5:818:5 | a [element 2] | array_flow.rb:824:9:824:9 | a [element 2] | provenance | | +| array_flow.rb:818:16:818:25 | call to source | array_flow.rb:818:5:818:5 | a [element 2] | provenance | | +| array_flow.rb:820:5:820:5 | b [element] | array_flow.rb:821:10:821:10 | b [element] | provenance | | +| array_flow.rb:820:5:820:5 | b [element] | array_flow.rb:822:10:822:10 | b [element] | provenance | | +| array_flow.rb:820:9:820:9 | a [element 2] | array_flow.rb:820:9:820:16 | call to minmax [element] | provenance | | +| array_flow.rb:820:9:820:16 | call to minmax [element] | array_flow.rb:820:5:820:5 | b [element] | provenance | | +| array_flow.rb:821:10:821:10 | b [element] | array_flow.rb:821:10:821:13 | ...[...] | provenance | | +| array_flow.rb:822:10:822:10 | b [element] | array_flow.rb:822:10:822:13 | ...[...] | provenance | | +| array_flow.rb:824:5:824:5 | c [element] | array_flow.rb:829:10:829:10 | c [element] | provenance | | +| array_flow.rb:824:5:824:5 | c [element] | array_flow.rb:830:10:830:10 | c [element] | provenance | | +| array_flow.rb:824:9:824:9 | a [element 2] | array_flow.rb:824:9:828:7 | call to minmax [element] | provenance | | +| array_flow.rb:824:9:824:9 | a [element 2] | array_flow.rb:824:22:824:22 | x | provenance | | +| array_flow.rb:824:9:824:9 | a [element 2] | array_flow.rb:824:25:824:25 | y | provenance | | +| array_flow.rb:824:9:828:7 | call to minmax [element] | array_flow.rb:824:5:824:5 | c [element] | provenance | | +| array_flow.rb:824:22:824:22 | x | array_flow.rb:825:14:825:14 | x | provenance | | +| array_flow.rb:824:25:824:25 | y | array_flow.rb:826:14:826:14 | y | provenance | | +| array_flow.rb:829:10:829:10 | c [element] | array_flow.rb:829:10:829:13 | ...[...] | provenance | | +| array_flow.rb:830:10:830:10 | c [element] | array_flow.rb:830:10:830:13 | ...[...] | provenance | | +| array_flow.rb:834:5:834:5 | a [element 2] | array_flow.rb:835:9:835:9 | a [element 2] | provenance | | +| array_flow.rb:834:16:834:25 | call to source | array_flow.rb:834:5:834:5 | a [element 2] | provenance | | +| array_flow.rb:835:5:835:5 | b [element] | array_flow.rb:839:10:839:10 | b [element] | provenance | | +| array_flow.rb:835:5:835:5 | b [element] | array_flow.rb:840:10:840:10 | b [element] | provenance | | +| array_flow.rb:835:9:835:9 | a [element 2] | array_flow.rb:835:9:838:7 | call to minmax_by [element] | provenance | | +| array_flow.rb:835:9:835:9 | a [element 2] | array_flow.rb:835:25:835:25 | x | provenance | | +| array_flow.rb:835:9:838:7 | call to minmax_by [element] | array_flow.rb:835:5:835:5 | b [element] | provenance | | +| array_flow.rb:835:25:835:25 | x | array_flow.rb:836:14:836:14 | x | provenance | | +| array_flow.rb:839:10:839:10 | b [element] | array_flow.rb:839:10:839:13 | ...[...] | provenance | | +| array_flow.rb:840:10:840:10 | b [element] | array_flow.rb:840:10:840:13 | ...[...] | provenance | | +| array_flow.rb:844:5:844:5 | a [element 2] | array_flow.rb:845:5:845:5 | a [element 2] | provenance | | +| array_flow.rb:844:16:844:25 | call to source | array_flow.rb:844:5:844:5 | a [element 2] | provenance | | +| array_flow.rb:845:5:845:5 | a [element 2] | array_flow.rb:845:17:845:17 | x | provenance | | +| array_flow.rb:845:17:845:17 | x | array_flow.rb:846:14:846:14 | x | provenance | | +| array_flow.rb:853:5:853:5 | a [element 2] | array_flow.rb:854:5:854:5 | a [element 2] | provenance | | +| array_flow.rb:853:16:853:25 | call to source | array_flow.rb:853:5:853:5 | a [element 2] | provenance | | +| array_flow.rb:854:5:854:5 | a [element 2] | array_flow.rb:854:16:854:16 | x | provenance | | +| array_flow.rb:854:16:854:16 | x | array_flow.rb:855:14:855:14 | x | provenance | | +| array_flow.rb:866:5:866:5 | a [element 2] | array_flow.rb:867:9:867:9 | a [element 2] | provenance | | +| array_flow.rb:866:16:866:25 | call to source | array_flow.rb:866:5:866:5 | a [element 2] | provenance | | +| array_flow.rb:867:5:867:5 | b [element, element] | array_flow.rb:871:10:871:10 | b [element, element] | provenance | | +| array_flow.rb:867:5:867:5 | b [element, element] | array_flow.rb:872:10:872:10 | b [element, element] | provenance | | +| array_flow.rb:867:9:867:9 | a [element 2] | array_flow.rb:867:9:870:7 | call to partition [element, element] | provenance | | +| array_flow.rb:867:9:867:9 | a [element 2] | array_flow.rb:867:25:867:25 | x | provenance | | +| array_flow.rb:867:9:870:7 | call to partition [element, element] | array_flow.rb:867:5:867:5 | b [element, element] | provenance | | +| array_flow.rb:867:25:867:25 | x | array_flow.rb:868:14:868:14 | x | provenance | | +| array_flow.rb:871:10:871:10 | b [element, element] | array_flow.rb:871:10:871:13 | ...[...] [element] | provenance | | +| array_flow.rb:871:10:871:13 | ...[...] [element] | array_flow.rb:871:10:871:16 | ...[...] | provenance | | +| array_flow.rb:872:10:872:10 | b [element, element] | array_flow.rb:872:10:872:13 | ...[...] [element] | provenance | | +| array_flow.rb:872:10:872:13 | ...[...] [element] | array_flow.rb:872:10:872:16 | ...[...] | provenance | | +| array_flow.rb:876:5:876:5 | a [element 2] | array_flow.rb:878:9:878:9 | a [element 2] | provenance | | +| array_flow.rb:876:5:876:5 | a [element 2] | array_flow.rb:886:9:886:9 | a [element 2] | provenance | | +| array_flow.rb:876:5:876:5 | a [element 2] | array_flow.rb:893:9:893:9 | a [element 2] | provenance | | +| array_flow.rb:876:16:876:25 | call to source | array_flow.rb:876:5:876:5 | a [element 2] | provenance | | +| array_flow.rb:878:5:878:5 | b [element 2] | array_flow.rb:884:10:884:10 | b [element 2] | provenance | | +| array_flow.rb:878:9:878:9 | a [element 2] | array_flow.rb:878:9:882:7 | call to permutation [element 2] | provenance | | +| array_flow.rb:878:9:878:9 | a [element 2] | array_flow.rb:878:27:878:27 | x [element] | provenance | | +| array_flow.rb:878:9:882:7 | call to permutation [element 2] | array_flow.rb:878:5:878:5 | b [element 2] | provenance | | +| array_flow.rb:878:27:878:27 | x [element] | array_flow.rb:879:14:879:14 | x [element] | provenance | | +| array_flow.rb:878:27:878:27 | x [element] | array_flow.rb:880:14:880:14 | x [element] | provenance | | +| array_flow.rb:878:27:878:27 | x [element] | array_flow.rb:881:14:881:14 | x [element] | provenance | | +| array_flow.rb:879:14:879:14 | x [element] | array_flow.rb:879:14:879:17 | ...[...] | provenance | | +| array_flow.rb:880:14:880:14 | x [element] | array_flow.rb:880:14:880:17 | ...[...] | provenance | | +| array_flow.rb:881:14:881:14 | x [element] | array_flow.rb:881:14:881:17 | ...[...] | provenance | | +| array_flow.rb:884:10:884:10 | b [element 2] | array_flow.rb:884:10:884:13 | ...[...] | provenance | | +| array_flow.rb:886:5:886:5 | c [element 2] | array_flow.rb:891:10:891:10 | c [element 2] | provenance | | +| array_flow.rb:886:5:886:5 | c [element 2] | array_flow.rb:898:10:898:10 | c [element 2] | provenance | | +| array_flow.rb:886:9:886:9 | a [element 2] | array_flow.rb:886:9:889:7 | call to permutation [element 2] | provenance | | +| array_flow.rb:886:9:886:9 | a [element 2] | array_flow.rb:886:30:886:30 | x [element] | provenance | | +| array_flow.rb:886:9:889:7 | call to permutation [element 2] | array_flow.rb:886:5:886:5 | c [element 2] | provenance | | +| array_flow.rb:886:30:886:30 | x [element] | array_flow.rb:887:14:887:14 | x [element] | provenance | | +| array_flow.rb:886:30:886:30 | x [element] | array_flow.rb:888:14:888:14 | x [element] | provenance | | +| array_flow.rb:887:14:887:14 | x [element] | array_flow.rb:887:14:887:17 | ...[...] | provenance | | +| array_flow.rb:888:14:888:14 | x [element] | array_flow.rb:888:14:888:17 | ...[...] | provenance | | +| array_flow.rb:891:10:891:10 | c [element 2] | array_flow.rb:891:10:891:13 | ...[...] | provenance | | +| array_flow.rb:893:9:893:9 | a [element 2] | array_flow.rb:893:30:893:30 | x [element] | provenance | | +| array_flow.rb:893:30:893:30 | x [element] | array_flow.rb:894:14:894:14 | x [element] | provenance | | +| array_flow.rb:893:30:893:30 | x [element] | array_flow.rb:895:14:895:14 | x [element] | provenance | | +| array_flow.rb:894:14:894:14 | x [element] | array_flow.rb:894:14:894:17 | ...[...] | provenance | | +| array_flow.rb:895:14:895:14 | x [element] | array_flow.rb:895:14:895:17 | ...[...] | provenance | | +| array_flow.rb:898:10:898:10 | c [element 2] | array_flow.rb:898:10:898:13 | ...[...] | provenance | | +| array_flow.rb:905:5:905:5 | a [element 1] | array_flow.rb:906:9:906:9 | a [element 1] | provenance | | +| array_flow.rb:905:5:905:5 | a [element 1] | array_flow.rb:909:10:909:10 | a [element 1] | provenance | | +| array_flow.rb:905:5:905:5 | a [element 3] | array_flow.rb:906:9:906:9 | a [element 3] | provenance | | +| array_flow.rb:905:5:905:5 | a [element 3] | array_flow.rb:911:10:911:10 | a [element 3] | provenance | | +| array_flow.rb:905:13:905:24 | call to source | array_flow.rb:905:5:905:5 | a [element 1] | provenance | | +| array_flow.rb:905:30:905:41 | call to source | array_flow.rb:905:5:905:5 | a [element 3] | provenance | | +| array_flow.rb:906:5:906:5 | b | array_flow.rb:907:10:907:10 | b | provenance | | +| array_flow.rb:906:9:906:9 | a [element 1] | array_flow.rb:906:9:906:13 | call to pop | provenance | | +| array_flow.rb:906:9:906:9 | a [element 3] | array_flow.rb:906:9:906:13 | call to pop | provenance | | +| array_flow.rb:906:9:906:13 | call to pop | array_flow.rb:906:5:906:5 | b | provenance | | +| array_flow.rb:909:10:909:10 | a [element 1] | array_flow.rb:909:10:909:13 | ...[...] | provenance | | +| array_flow.rb:911:10:911:10 | a [element 3] | array_flow.rb:911:10:911:13 | ...[...] | provenance | | +| array_flow.rb:913:5:913:5 | a [element 1] | array_flow.rb:914:9:914:9 | a [element 1] | provenance | | +| array_flow.rb:913:5:913:5 | a [element 1] | array_flow.rb:918:10:918:10 | a [element 1] | provenance | | +| array_flow.rb:913:5:913:5 | a [element 3] | array_flow.rb:914:9:914:9 | a [element 3] | provenance | | +| array_flow.rb:913:5:913:5 | a [element 3] | array_flow.rb:920:10:920:10 | a [element 3] | provenance | | +| array_flow.rb:913:13:913:24 | call to source | array_flow.rb:913:5:913:5 | a [element 1] | provenance | | +| array_flow.rb:913:30:913:41 | call to source | array_flow.rb:913:5:913:5 | a [element 3] | provenance | | +| array_flow.rb:914:5:914:5 | b [element] | array_flow.rb:915:10:915:10 | b [element] | provenance | | +| array_flow.rb:914:5:914:5 | b [element] | array_flow.rb:916:10:916:10 | b [element] | provenance | | +| array_flow.rb:914:9:914:9 | a [element 1] | array_flow.rb:914:9:914:16 | call to pop [element] | provenance | | +| array_flow.rb:914:9:914:9 | a [element 3] | array_flow.rb:914:9:914:16 | call to pop [element] | provenance | | +| array_flow.rb:914:9:914:16 | call to pop [element] | array_flow.rb:914:5:914:5 | b [element] | provenance | | +| array_flow.rb:915:10:915:10 | b [element] | array_flow.rb:915:10:915:13 | ...[...] | provenance | | +| array_flow.rb:916:10:916:10 | b [element] | array_flow.rb:916:10:916:13 | ...[...] | provenance | | +| array_flow.rb:918:10:918:10 | a [element 1] | array_flow.rb:918:10:918:13 | ...[...] | provenance | | +| array_flow.rb:920:10:920:10 | a [element 3] | array_flow.rb:920:10:920:13 | ...[...] | provenance | | +| array_flow.rb:924:5:924:5 | a [element 2] | array_flow.rb:925:5:925:5 | a [element 2] | provenance | | +| array_flow.rb:924:16:924:27 | call to source | array_flow.rb:924:5:924:5 | a [element 2] | provenance | | +| array_flow.rb:925:5:925:5 | [post] a [element 2] | array_flow.rb:928:10:928:10 | a [element 2] | provenance | | +| array_flow.rb:925:5:925:5 | [post] a [element 5] | array_flow.rb:931:10:931:10 | a [element 5] | provenance | | +| array_flow.rb:925:5:925:5 | a [element 2] | array_flow.rb:925:5:925:5 | [post] a [element 5] | provenance | | +| array_flow.rb:925:21:925:32 | call to source | array_flow.rb:925:5:925:5 | [post] a [element 2] | provenance | | +| array_flow.rb:928:10:928:10 | a [element 2] | array_flow.rb:928:10:928:13 | ...[...] | provenance | | +| array_flow.rb:931:10:931:10 | a [element 5] | array_flow.rb:931:10:931:13 | ...[...] | provenance | | +| array_flow.rb:935:5:935:5 | a [element 2] | array_flow.rb:938:9:938:9 | a [element 2] | provenance | | +| array_flow.rb:935:16:935:27 | call to source | array_flow.rb:935:5:935:5 | a [element 2] | provenance | | +| array_flow.rb:936:5:936:5 | b [element 1] | array_flow.rb:938:19:938:19 | b [element 1] | provenance | | +| array_flow.rb:936:13:936:24 | call to source | array_flow.rb:936:5:936:5 | b [element 1] | provenance | | +| array_flow.rb:937:5:937:5 | c [element 0] | array_flow.rb:938:22:938:22 | c [element 0] | provenance | | +| array_flow.rb:937:10:937:21 | call to source | array_flow.rb:937:5:937:5 | c [element 0] | provenance | | +| array_flow.rb:938:5:938:5 | d [element, element] | array_flow.rb:939:10:939:10 | d [element, element] | provenance | | +| array_flow.rb:938:5:938:5 | d [element, element] | array_flow.rb:940:10:940:10 | d [element, element] | provenance | | +| array_flow.rb:938:9:938:9 | a [element 2] | array_flow.rb:938:9:938:22 | call to product [element, element] | provenance | | +| array_flow.rb:938:9:938:22 | call to product [element, element] | array_flow.rb:938:5:938:5 | d [element, element] | provenance | | +| array_flow.rb:938:19:938:19 | b [element 1] | array_flow.rb:938:9:938:22 | call to product [element, element] | provenance | | +| array_flow.rb:938:22:938:22 | c [element 0] | array_flow.rb:938:9:938:22 | call to product [element, element] | provenance | | +| array_flow.rb:939:10:939:10 | d [element, element] | array_flow.rb:939:10:939:13 | ...[...] [element] | provenance | | +| array_flow.rb:939:10:939:13 | ...[...] [element] | array_flow.rb:939:10:939:16 | ...[...] | provenance | | +| array_flow.rb:940:10:940:10 | d [element, element] | array_flow.rb:940:10:940:13 | ...[...] [element] | provenance | | +| array_flow.rb:940:10:940:13 | ...[...] [element] | array_flow.rb:940:10:940:16 | ...[...] | provenance | | +| array_flow.rb:944:5:944:5 | a [element 0] | array_flow.rb:945:9:945:9 | a [element 0] | provenance | | +| array_flow.rb:944:5:944:5 | a [element 0] | array_flow.rb:946:10:946:10 | a [element 0] | provenance | | +| array_flow.rb:944:10:944:21 | call to source | array_flow.rb:944:5:944:5 | a [element 0] | provenance | | +| array_flow.rb:945:5:945:5 | b [element 0] | array_flow.rb:948:10:948:10 | b [element 0] | provenance | | +| array_flow.rb:945:5:945:5 | b [element] | array_flow.rb:948:10:948:10 | b [element] | provenance | | +| array_flow.rb:945:5:945:5 | b [element] | array_flow.rb:949:10:949:10 | b [element] | provenance | | +| array_flow.rb:945:9:945:9 | [post] a [element] | array_flow.rb:946:10:946:10 | a [element] | provenance | | +| array_flow.rb:945:9:945:9 | [post] a [element] | array_flow.rb:947:10:947:10 | a [element] | provenance | | +| array_flow.rb:945:9:945:9 | a [element 0] | array_flow.rb:945:9:945:44 | call to append [element 0] | provenance | | +| array_flow.rb:945:9:945:44 | call to append [element 0] | array_flow.rb:945:5:945:5 | b [element 0] | provenance | | +| array_flow.rb:945:9:945:44 | call to append [element] | array_flow.rb:945:5:945:5 | b [element] | provenance | | +| array_flow.rb:945:18:945:29 | call to source | array_flow.rb:945:9:945:9 | [post] a [element] | provenance | | +| array_flow.rb:945:18:945:29 | call to source | array_flow.rb:945:9:945:44 | call to append [element] | provenance | | +| array_flow.rb:945:32:945:43 | call to source | array_flow.rb:945:9:945:9 | [post] a [element] | provenance | | +| array_flow.rb:945:32:945:43 | call to source | array_flow.rb:945:9:945:44 | call to append [element] | provenance | | +| array_flow.rb:946:10:946:10 | a [element 0] | array_flow.rb:946:10:946:13 | ...[...] | provenance | | +| array_flow.rb:946:10:946:10 | a [element] | array_flow.rb:946:10:946:13 | ...[...] | provenance | | +| array_flow.rb:947:10:947:10 | a [element] | array_flow.rb:947:10:947:13 | ...[...] | provenance | | +| array_flow.rb:948:10:948:10 | b [element 0] | array_flow.rb:948:10:948:13 | ...[...] | provenance | | +| array_flow.rb:948:10:948:10 | b [element] | array_flow.rb:948:10:948:13 | ...[...] | provenance | | +| array_flow.rb:949:10:949:10 | b [element] | array_flow.rb:949:10:949:13 | ...[...] | provenance | | +| array_flow.rb:955:5:955:5 | c [element 0] | array_flow.rb:956:16:956:16 | c [element 0] | provenance | | +| array_flow.rb:955:10:955:19 | call to source | array_flow.rb:955:5:955:5 | c [element 0] | provenance | | +| array_flow.rb:956:5:956:5 | d [element 2, element 0] | array_flow.rb:957:10:957:10 | d [element 2, element 0] | provenance | | +| array_flow.rb:956:5:956:5 | d [element 2, element 0] | array_flow.rb:958:10:958:10 | d [element 2, element 0] | provenance | | +| array_flow.rb:956:16:956:16 | c [element 0] | array_flow.rb:956:5:956:5 | d [element 2, element 0] | provenance | | +| array_flow.rb:957:10:957:10 | d [element 2, element 0] | array_flow.rb:957:10:957:22 | call to rassoc [element 0] | provenance | | +| array_flow.rb:957:10:957:22 | call to rassoc [element 0] | array_flow.rb:957:10:957:25 | ...[...] | provenance | | +| array_flow.rb:958:10:958:10 | d [element 2, element 0] | array_flow.rb:958:10:958:22 | call to rassoc [element 0] | provenance | | +| array_flow.rb:958:10:958:22 | call to rassoc [element 0] | array_flow.rb:958:10:958:25 | ...[...] | provenance | | +| array_flow.rb:962:5:962:5 | a [element 0] | array_flow.rb:963:9:963:9 | a [element 0] | provenance | | +| array_flow.rb:962:5:962:5 | a [element 0] | array_flow.rb:968:9:968:9 | a [element 0] | provenance | | +| array_flow.rb:962:5:962:5 | a [element 2] | array_flow.rb:963:9:963:9 | a [element 2] | provenance | | +| array_flow.rb:962:5:962:5 | a [element 2] | array_flow.rb:968:9:968:9 | a [element 2] | provenance | | +| array_flow.rb:962:10:962:21 | call to source | array_flow.rb:962:5:962:5 | a [element 0] | provenance | | +| array_flow.rb:962:27:962:38 | call to source | array_flow.rb:962:5:962:5 | a [element 2] | provenance | | +| array_flow.rb:963:9:963:9 | a [element 0] | array_flow.rb:963:22:963:22 | x | provenance | | +| array_flow.rb:963:9:963:9 | a [element 2] | array_flow.rb:963:25:963:25 | y | provenance | | +| array_flow.rb:963:22:963:22 | x | array_flow.rb:964:14:964:14 | x | provenance | | +| array_flow.rb:963:25:963:25 | y | array_flow.rb:965:14:965:14 | y | provenance | | +| array_flow.rb:968:9:968:9 | a [element 0] | array_flow.rb:968:28:968:28 | y | provenance | | +| array_flow.rb:968:9:968:9 | a [element 2] | array_flow.rb:968:28:968:28 | y | provenance | | +| array_flow.rb:968:28:968:28 | y | array_flow.rb:970:14:970:14 | y | provenance | | +| array_flow.rb:976:5:976:5 | a [element 2] | array_flow.rb:977:9:977:9 | a [element 2] | provenance | | +| array_flow.rb:976:16:976:25 | call to source | array_flow.rb:976:5:976:5 | a [element 2] | provenance | | +| array_flow.rb:977:5:977:5 | b [element] | array_flow.rb:981:10:981:10 | b [element] | provenance | | +| array_flow.rb:977:9:977:9 | a [element 2] | array_flow.rb:977:9:980:7 | call to reject [element] | provenance | | +| array_flow.rb:977:9:977:9 | a [element 2] | array_flow.rb:977:22:977:22 | x | provenance | | +| array_flow.rb:977:9:980:7 | call to reject [element] | array_flow.rb:977:5:977:5 | b [element] | provenance | | +| array_flow.rb:977:22:977:22 | x | array_flow.rb:978:14:978:14 | x | provenance | | +| array_flow.rb:981:10:981:10 | b [element] | array_flow.rb:981:10:981:13 | ...[...] | provenance | | +| array_flow.rb:985:5:985:5 | a [element 2] | array_flow.rb:986:9:986:9 | a [element 2] | provenance | | +| array_flow.rb:985:16:985:25 | call to source | array_flow.rb:985:5:985:5 | a [element 2] | provenance | | +| array_flow.rb:986:5:986:5 | b [element] | array_flow.rb:991:10:991:10 | b [element] | provenance | | +| array_flow.rb:986:9:986:9 | [post] a [element] | array_flow.rb:990:10:990:10 | a [element] | provenance | | +| array_flow.rb:986:9:986:9 | a [element 2] | array_flow.rb:986:9:986:9 | [post] a [element] | provenance | | +| array_flow.rb:986:9:986:9 | a [element 2] | array_flow.rb:986:9:989:7 | call to reject! [element] | provenance | | +| array_flow.rb:986:9:986:9 | a [element 2] | array_flow.rb:986:23:986:23 | x | provenance | | +| array_flow.rb:986:9:989:7 | call to reject! [element] | array_flow.rb:986:5:986:5 | b [element] | provenance | | +| array_flow.rb:986:23:986:23 | x | array_flow.rb:987:14:987:14 | x | provenance | | +| array_flow.rb:990:10:990:10 | a [element] | array_flow.rb:990:10:990:13 | ...[...] | provenance | | +| array_flow.rb:991:10:991:10 | b [element] | array_flow.rb:991:10:991:13 | ...[...] | provenance | | +| array_flow.rb:995:5:995:5 | a [element 2] | array_flow.rb:996:9:996:9 | a [element 2] | provenance | | +| array_flow.rb:995:16:995:25 | call to source | array_flow.rb:995:5:995:5 | a [element 2] | provenance | | +| array_flow.rb:996:5:996:5 | b [element 2] | array_flow.rb:1001:10:1001:10 | b [element 2] | provenance | | +| array_flow.rb:996:9:996:9 | a [element 2] | array_flow.rb:996:9:999:7 | call to repeated_combination [element 2] | provenance | | +| array_flow.rb:996:9:996:9 | a [element 2] | array_flow.rb:996:39:996:39 | x [element] | provenance | | +| array_flow.rb:996:9:999:7 | call to repeated_combination [element 2] | array_flow.rb:996:5:996:5 | b [element 2] | provenance | | +| array_flow.rb:996:39:996:39 | x [element] | array_flow.rb:997:14:997:14 | x [element] | provenance | | +| array_flow.rb:996:39:996:39 | x [element] | array_flow.rb:998:14:998:14 | x [element] | provenance | | +| array_flow.rb:997:14:997:14 | x [element] | array_flow.rb:997:14:997:17 | ...[...] | provenance | | +| array_flow.rb:998:14:998:14 | x [element] | array_flow.rb:998:14:998:17 | ...[...] | provenance | | +| array_flow.rb:1001:10:1001:10 | b [element 2] | array_flow.rb:1001:10:1001:13 | ...[...] | provenance | | +| array_flow.rb:1005:5:1005:5 | a [element 2] | array_flow.rb:1006:9:1006:9 | a [element 2] | provenance | | +| array_flow.rb:1005:16:1005:25 | call to source | array_flow.rb:1005:5:1005:5 | a [element 2] | provenance | | +| array_flow.rb:1006:5:1006:5 | b [element 2] | array_flow.rb:1011:10:1011:10 | b [element 2] | provenance | | +| array_flow.rb:1006:9:1006:9 | a [element 2] | array_flow.rb:1006:9:1009:7 | call to repeated_permutation [element 2] | provenance | | +| array_flow.rb:1006:9:1006:9 | a [element 2] | array_flow.rb:1006:39:1006:39 | x [element] | provenance | | +| array_flow.rb:1006:9:1009:7 | call to repeated_permutation [element 2] | array_flow.rb:1006:5:1006:5 | b [element 2] | provenance | | +| array_flow.rb:1006:39:1006:39 | x [element] | array_flow.rb:1007:14:1007:14 | x [element] | provenance | | +| array_flow.rb:1006:39:1006:39 | x [element] | array_flow.rb:1008:14:1008:14 | x [element] | provenance | | +| array_flow.rb:1007:14:1007:14 | x [element] | array_flow.rb:1007:14:1007:17 | ...[...] | provenance | | +| array_flow.rb:1008:14:1008:14 | x [element] | array_flow.rb:1008:14:1008:17 | ...[...] | provenance | | +| array_flow.rb:1011:10:1011:10 | b [element 2] | array_flow.rb:1011:10:1011:13 | ...[...] | provenance | | +| array_flow.rb:1017:5:1017:5 | b [element 0] | array_flow.rb:1019:10:1019:10 | b [element 0] | provenance | | +| array_flow.rb:1017:9:1017:9 | [post] a [element 0] | array_flow.rb:1018:10:1018:10 | a [element 0] | provenance | | +| array_flow.rb:1017:9:1017:33 | call to replace [element 0] | array_flow.rb:1017:5:1017:5 | b [element 0] | provenance | | +| array_flow.rb:1017:20:1017:31 | call to source | array_flow.rb:1017:9:1017:9 | [post] a [element 0] | provenance | | +| array_flow.rb:1017:20:1017:31 | call to source | array_flow.rb:1017:9:1017:33 | call to replace [element 0] | provenance | | +| array_flow.rb:1018:10:1018:10 | a [element 0] | array_flow.rb:1018:10:1018:13 | ...[...] | provenance | | +| array_flow.rb:1019:10:1019:10 | b [element 0] | array_flow.rb:1019:10:1019:13 | ...[...] | provenance | | +| array_flow.rb:1023:5:1023:5 | a [element 2] | array_flow.rb:1024:9:1024:9 | a [element 2] | provenance | | +| array_flow.rb:1023:5:1023:5 | a [element 2] | array_flow.rb:1029:10:1029:10 | a [element 2] | provenance | | +| array_flow.rb:1023:5:1023:5 | a [element 3] | array_flow.rb:1024:9:1024:9 | a [element 3] | provenance | | +| array_flow.rb:1023:5:1023:5 | a [element 3] | array_flow.rb:1030:10:1030:10 | a [element 3] | provenance | | +| array_flow.rb:1023:16:1023:28 | call to source | array_flow.rb:1023:5:1023:5 | a [element 2] | provenance | | +| array_flow.rb:1023:31:1023:43 | call to source | array_flow.rb:1023:5:1023:5 | a [element 3] | provenance | | +| array_flow.rb:1024:5:1024:5 | b [element] | array_flow.rb:1025:10:1025:10 | b [element] | provenance | | +| array_flow.rb:1024:5:1024:5 | b [element] | array_flow.rb:1026:10:1026:10 | b [element] | provenance | | +| array_flow.rb:1024:5:1024:5 | b [element] | array_flow.rb:1027:10:1027:10 | b [element] | provenance | | +| array_flow.rb:1024:9:1024:9 | a [element 2] | array_flow.rb:1024:9:1024:17 | call to reverse [element] | provenance | | +| array_flow.rb:1024:9:1024:9 | a [element 3] | array_flow.rb:1024:9:1024:17 | call to reverse [element] | provenance | | +| array_flow.rb:1024:9:1024:17 | call to reverse [element] | array_flow.rb:1024:5:1024:5 | b [element] | provenance | | +| array_flow.rb:1025:10:1025:10 | b [element] | array_flow.rb:1025:10:1025:13 | ...[...] | provenance | | +| array_flow.rb:1026:10:1026:10 | b [element] | array_flow.rb:1026:10:1026:13 | ...[...] | provenance | | +| array_flow.rb:1027:10:1027:10 | b [element] | array_flow.rb:1027:10:1027:13 | ...[...] | provenance | | +| array_flow.rb:1029:10:1029:10 | a [element 2] | array_flow.rb:1029:10:1029:13 | ...[...] | provenance | | +| array_flow.rb:1030:10:1030:10 | a [element 3] | array_flow.rb:1030:10:1030:13 | ...[...] | provenance | | +| array_flow.rb:1034:5:1034:5 | a [element 2] | array_flow.rb:1035:9:1035:9 | a [element 2] | provenance | | +| array_flow.rb:1034:5:1034:5 | a [element 2] | array_flow.rb:1040:10:1040:10 | a [element 2] | provenance | | +| array_flow.rb:1034:5:1034:5 | a [element 3] | array_flow.rb:1035:9:1035:9 | a [element 3] | provenance | | +| array_flow.rb:1034:5:1034:5 | a [element 3] | array_flow.rb:1041:10:1041:10 | a [element 3] | provenance | | +| array_flow.rb:1034:16:1034:28 | call to source | array_flow.rb:1034:5:1034:5 | a [element 2] | provenance | | +| array_flow.rb:1034:31:1034:43 | call to source | array_flow.rb:1034:5:1034:5 | a [element 3] | provenance | | +| array_flow.rb:1035:5:1035:5 | b [element] | array_flow.rb:1036:10:1036:10 | b [element] | provenance | | +| array_flow.rb:1035:5:1035:5 | b [element] | array_flow.rb:1037:10:1037:10 | b [element] | provenance | | +| array_flow.rb:1035:5:1035:5 | b [element] | array_flow.rb:1038:10:1038:10 | b [element] | provenance | | +| array_flow.rb:1035:9:1035:9 | [post] a [element] | array_flow.rb:1039:10:1039:10 | a [element] | provenance | | +| array_flow.rb:1035:9:1035:9 | [post] a [element] | array_flow.rb:1040:10:1040:10 | a [element] | provenance | | +| array_flow.rb:1035:9:1035:9 | [post] a [element] | array_flow.rb:1041:10:1041:10 | a [element] | provenance | | +| array_flow.rb:1035:9:1035:9 | a [element 2] | array_flow.rb:1035:9:1035:9 | [post] a [element] | provenance | | +| array_flow.rb:1035:9:1035:9 | a [element 2] | array_flow.rb:1035:9:1035:18 | call to reverse! [element] | provenance | | +| array_flow.rb:1035:9:1035:9 | a [element 3] | array_flow.rb:1035:9:1035:9 | [post] a [element] | provenance | | +| array_flow.rb:1035:9:1035:9 | a [element 3] | array_flow.rb:1035:9:1035:18 | call to reverse! [element] | provenance | | +| array_flow.rb:1035:9:1035:18 | call to reverse! [element] | array_flow.rb:1035:5:1035:5 | b [element] | provenance | | +| array_flow.rb:1036:10:1036:10 | b [element] | array_flow.rb:1036:10:1036:13 | ...[...] | provenance | | +| array_flow.rb:1037:10:1037:10 | b [element] | array_flow.rb:1037:10:1037:13 | ...[...] | provenance | | +| array_flow.rb:1038:10:1038:10 | b [element] | array_flow.rb:1038:10:1038:13 | ...[...] | provenance | | +| array_flow.rb:1039:10:1039:10 | a [element] | array_flow.rb:1039:10:1039:13 | ...[...] | provenance | | +| array_flow.rb:1040:10:1040:10 | a [element 2] | array_flow.rb:1040:10:1040:13 | ...[...] | provenance | | +| array_flow.rb:1040:10:1040:10 | a [element] | array_flow.rb:1040:10:1040:13 | ...[...] | provenance | | +| array_flow.rb:1041:10:1041:10 | a [element 3] | array_flow.rb:1041:10:1041:13 | ...[...] | provenance | | +| array_flow.rb:1041:10:1041:10 | a [element] | array_flow.rb:1041:10:1041:13 | ...[...] | provenance | | +| array_flow.rb:1045:5:1045:5 | a [element 2] | array_flow.rb:1046:9:1046:9 | a [element 2] | provenance | | +| array_flow.rb:1045:16:1045:26 | call to source | array_flow.rb:1045:5:1045:5 | a [element 2] | provenance | | +| array_flow.rb:1046:5:1046:5 | b [element 2] | array_flow.rb:1049:10:1049:10 | b [element 2] | provenance | | +| array_flow.rb:1046:9:1046:9 | a [element 2] | array_flow.rb:1046:9:1048:7 | call to reverse_each [element 2] | provenance | | +| array_flow.rb:1046:9:1046:9 | a [element 2] | array_flow.rb:1046:28:1046:28 | x | provenance | | +| array_flow.rb:1046:9:1048:7 | call to reverse_each [element 2] | array_flow.rb:1046:5:1046:5 | b [element 2] | provenance | | +| array_flow.rb:1046:28:1046:28 | x | array_flow.rb:1047:14:1047:14 | x | provenance | | +| array_flow.rb:1049:10:1049:10 | b [element 2] | array_flow.rb:1049:10:1049:13 | ...[...] | provenance | | +| array_flow.rb:1053:5:1053:5 | a [element 2] | array_flow.rb:1054:5:1054:5 | a [element 2] | provenance | | +| array_flow.rb:1053:16:1053:26 | call to source | array_flow.rb:1053:5:1053:5 | a [element 2] | provenance | | +| array_flow.rb:1054:5:1054:5 | a [element 2] | array_flow.rb:1054:18:1054:18 | x | provenance | | +| array_flow.rb:1054:18:1054:18 | x | array_flow.rb:1055:14:1055:14 | x | provenance | | +| array_flow.rb:1063:5:1063:5 | a [element 0] | array_flow.rb:1065:9:1065:9 | a [element 0] | provenance | | +| array_flow.rb:1063:5:1063:5 | a [element 0] | array_flow.rb:1071:9:1071:9 | a [element 0] | provenance | | +| array_flow.rb:1063:5:1063:5 | a [element 0] | array_flow.rb:1077:9:1077:9 | a [element 0] | provenance | | +| array_flow.rb:1063:5:1063:5 | a [element 0] | array_flow.rb:1083:9:1083:9 | a [element 0] | provenance | | +| array_flow.rb:1063:5:1063:5 | a [element 2] | array_flow.rb:1065:9:1065:9 | a [element 2] | provenance | | +| array_flow.rb:1063:5:1063:5 | a [element 2] | array_flow.rb:1071:9:1071:9 | a [element 2] | provenance | | +| array_flow.rb:1063:5:1063:5 | a [element 2] | array_flow.rb:1077:9:1077:9 | a [element 2] | provenance | | +| array_flow.rb:1063:5:1063:5 | a [element 2] | array_flow.rb:1083:9:1083:9 | a [element 2] | provenance | | +| array_flow.rb:1063:5:1063:5 | a [element 3] | array_flow.rb:1065:9:1065:9 | a [element 3] | provenance | | +| array_flow.rb:1063:5:1063:5 | a [element 3] | array_flow.rb:1071:9:1071:9 | a [element 3] | provenance | | +| array_flow.rb:1063:5:1063:5 | a [element 3] | array_flow.rb:1077:9:1077:9 | a [element 3] | provenance | | +| array_flow.rb:1063:5:1063:5 | a [element 3] | array_flow.rb:1083:9:1083:9 | a [element 3] | provenance | | +| array_flow.rb:1063:10:1063:22 | call to source | array_flow.rb:1063:5:1063:5 | a [element 0] | provenance | | +| array_flow.rb:1063:28:1063:40 | call to source | array_flow.rb:1063:5:1063:5 | a [element 2] | provenance | | +| array_flow.rb:1063:43:1063:55 | call to source | array_flow.rb:1063:5:1063:5 | a [element 3] | provenance | | +| array_flow.rb:1065:5:1065:5 | b [element 1] | array_flow.rb:1067:10:1067:10 | b [element 1] | provenance | | +| array_flow.rb:1065:5:1065:5 | b [element 2] | array_flow.rb:1068:10:1068:10 | b [element 2] | provenance | | +| array_flow.rb:1065:5:1065:5 | b [element] | array_flow.rb:1066:10:1066:10 | b [element] | provenance | | +| array_flow.rb:1065:5:1065:5 | b [element] | array_flow.rb:1067:10:1067:10 | b [element] | provenance | | +| array_flow.rb:1065:5:1065:5 | b [element] | array_flow.rb:1068:10:1068:10 | b [element] | provenance | | +| array_flow.rb:1065:5:1065:5 | b [element] | array_flow.rb:1069:10:1069:10 | b [element] | provenance | | +| array_flow.rb:1065:9:1065:9 | a [element 0] | array_flow.rb:1065:9:1065:16 | call to rotate [element] | provenance | | +| array_flow.rb:1065:9:1065:9 | a [element 2] | array_flow.rb:1065:9:1065:16 | call to rotate [element 1] | provenance | | +| array_flow.rb:1065:9:1065:9 | a [element 3] | array_flow.rb:1065:9:1065:16 | call to rotate [element 2] | provenance | | +| array_flow.rb:1065:9:1065:16 | call to rotate [element 1] | array_flow.rb:1065:5:1065:5 | b [element 1] | provenance | | +| array_flow.rb:1065:9:1065:16 | call to rotate [element 2] | array_flow.rb:1065:5:1065:5 | b [element 2] | provenance | | +| array_flow.rb:1065:9:1065:16 | call to rotate [element] | array_flow.rb:1065:5:1065:5 | b [element] | provenance | | +| array_flow.rb:1066:10:1066:10 | b [element] | array_flow.rb:1066:10:1066:13 | ...[...] | provenance | | +| array_flow.rb:1067:10:1067:10 | b [element 1] | array_flow.rb:1067:10:1067:13 | ...[...] | provenance | | +| array_flow.rb:1067:10:1067:10 | b [element] | array_flow.rb:1067:10:1067:13 | ...[...] | provenance | | +| array_flow.rb:1068:10:1068:10 | b [element 2] | array_flow.rb:1068:10:1068:13 | ...[...] | provenance | | +| array_flow.rb:1068:10:1068:10 | b [element] | array_flow.rb:1068:10:1068:13 | ...[...] | provenance | | +| array_flow.rb:1069:10:1069:10 | b [element] | array_flow.rb:1069:10:1069:13 | ...[...] | provenance | | +| array_flow.rb:1071:5:1071:5 | b [element 0] | array_flow.rb:1072:10:1072:10 | b [element 0] | provenance | | +| array_flow.rb:1071:5:1071:5 | b [element 1] | array_flow.rb:1073:10:1073:10 | b [element 1] | provenance | | +| array_flow.rb:1071:5:1071:5 | b [element] | array_flow.rb:1072:10:1072:10 | b [element] | provenance | | +| array_flow.rb:1071:5:1071:5 | b [element] | array_flow.rb:1073:10:1073:10 | b [element] | provenance | | +| array_flow.rb:1071:5:1071:5 | b [element] | array_flow.rb:1074:10:1074:10 | b [element] | provenance | | +| array_flow.rb:1071:5:1071:5 | b [element] | array_flow.rb:1075:10:1075:10 | b [element] | provenance | | +| array_flow.rb:1071:9:1071:9 | a [element 0] | array_flow.rb:1071:9:1071:19 | call to rotate [element] | provenance | | +| array_flow.rb:1071:9:1071:9 | a [element 2] | array_flow.rb:1071:9:1071:19 | call to rotate [element 0] | provenance | | +| array_flow.rb:1071:9:1071:9 | a [element 3] | array_flow.rb:1071:9:1071:19 | call to rotate [element 1] | provenance | | +| array_flow.rb:1071:9:1071:19 | call to rotate [element 0] | array_flow.rb:1071:5:1071:5 | b [element 0] | provenance | | +| array_flow.rb:1071:9:1071:19 | call to rotate [element 1] | array_flow.rb:1071:5:1071:5 | b [element 1] | provenance | | +| array_flow.rb:1071:9:1071:19 | call to rotate [element] | array_flow.rb:1071:5:1071:5 | b [element] | provenance | | +| array_flow.rb:1072:10:1072:10 | b [element 0] | array_flow.rb:1072:10:1072:13 | ...[...] | provenance | | +| array_flow.rb:1072:10:1072:10 | b [element] | array_flow.rb:1072:10:1072:13 | ...[...] | provenance | | +| array_flow.rb:1073:10:1073:10 | b [element 1] | array_flow.rb:1073:10:1073:13 | ...[...] | provenance | | +| array_flow.rb:1073:10:1073:10 | b [element] | array_flow.rb:1073:10:1073:13 | ...[...] | provenance | | +| array_flow.rb:1074:10:1074:10 | b [element] | array_flow.rb:1074:10:1074:13 | ...[...] | provenance | | +| array_flow.rb:1075:10:1075:10 | b [element] | array_flow.rb:1075:10:1075:13 | ...[...] | provenance | | +| array_flow.rb:1077:5:1077:5 | b [element 0] | array_flow.rb:1078:10:1078:10 | b [element 0] | provenance | | +| array_flow.rb:1077:5:1077:5 | b [element 2] | array_flow.rb:1080:10:1080:10 | b [element 2] | provenance | | +| array_flow.rb:1077:5:1077:5 | b [element 3] | array_flow.rb:1081:10:1081:10 | b [element 3] | provenance | | +| array_flow.rb:1077:9:1077:9 | a [element 0] | array_flow.rb:1077:9:1077:19 | call to rotate [element 0] | provenance | | +| array_flow.rb:1077:9:1077:9 | a [element 2] | array_flow.rb:1077:9:1077:19 | call to rotate [element 2] | provenance | | +| array_flow.rb:1077:9:1077:9 | a [element 3] | array_flow.rb:1077:9:1077:19 | call to rotate [element 3] | provenance | | +| array_flow.rb:1077:9:1077:19 | call to rotate [element 0] | array_flow.rb:1077:5:1077:5 | b [element 0] | provenance | | +| array_flow.rb:1077:9:1077:19 | call to rotate [element 2] | array_flow.rb:1077:5:1077:5 | b [element 2] | provenance | | +| array_flow.rb:1077:9:1077:19 | call to rotate [element 3] | array_flow.rb:1077:5:1077:5 | b [element 3] | provenance | | +| array_flow.rb:1078:10:1078:10 | b [element 0] | array_flow.rb:1078:10:1078:13 | ...[...] | provenance | | +| array_flow.rb:1080:10:1080:10 | b [element 2] | array_flow.rb:1080:10:1080:13 | ...[...] | provenance | | +| array_flow.rb:1081:10:1081:10 | b [element 3] | array_flow.rb:1081:10:1081:13 | ...[...] | provenance | | +| array_flow.rb:1083:5:1083:5 | b [element] | array_flow.rb:1084:10:1084:10 | b [element] | provenance | | +| array_flow.rb:1083:5:1083:5 | b [element] | array_flow.rb:1085:10:1085:10 | b [element] | provenance | | +| array_flow.rb:1083:5:1083:5 | b [element] | array_flow.rb:1086:10:1086:10 | b [element] | provenance | | +| array_flow.rb:1083:5:1083:5 | b [element] | array_flow.rb:1087:10:1087:10 | b [element] | provenance | | +| array_flow.rb:1083:9:1083:9 | a [element 0] | array_flow.rb:1083:9:1083:19 | call to rotate [element] | provenance | | +| array_flow.rb:1083:9:1083:9 | a [element 2] | array_flow.rb:1083:9:1083:19 | call to rotate [element] | provenance | | +| array_flow.rb:1083:9:1083:9 | a [element 3] | array_flow.rb:1083:9:1083:19 | call to rotate [element] | provenance | | +| array_flow.rb:1083:9:1083:19 | call to rotate [element] | array_flow.rb:1083:5:1083:5 | b [element] | provenance | | +| array_flow.rb:1084:10:1084:10 | b [element] | array_flow.rb:1084:10:1084:13 | ...[...] | provenance | | +| array_flow.rb:1085:10:1085:10 | b [element] | array_flow.rb:1085:10:1085:13 | ...[...] | provenance | | +| array_flow.rb:1086:10:1086:10 | b [element] | array_flow.rb:1086:10:1086:13 | ...[...] | provenance | | +| array_flow.rb:1087:10:1087:10 | b [element] | array_flow.rb:1087:10:1087:13 | ...[...] | provenance | | +| array_flow.rb:1095:5:1095:5 | a [element 0] | array_flow.rb:1096:9:1096:9 | a [element 0] | provenance | | +| array_flow.rb:1095:5:1095:5 | a [element 2] | array_flow.rb:1096:9:1096:9 | a [element 2] | provenance | | +| array_flow.rb:1095:5:1095:5 | a [element 3] | array_flow.rb:1096:9:1096:9 | a [element 3] | provenance | | +| array_flow.rb:1095:10:1095:22 | call to source | array_flow.rb:1095:5:1095:5 | a [element 0] | provenance | | +| array_flow.rb:1095:28:1095:40 | call to source | array_flow.rb:1095:5:1095:5 | a [element 2] | provenance | | +| array_flow.rb:1095:43:1095:55 | call to source | array_flow.rb:1095:5:1095:5 | a [element 3] | provenance | | +| array_flow.rb:1096:5:1096:5 | b [element 1] | array_flow.rb:1102:10:1102:10 | b [element 1] | provenance | | +| array_flow.rb:1096:5:1096:5 | b [element 2] | array_flow.rb:1103:10:1103:10 | b [element 2] | provenance | | +| array_flow.rb:1096:5:1096:5 | b [element] | array_flow.rb:1101:10:1101:10 | b [element] | provenance | | +| array_flow.rb:1096:5:1096:5 | b [element] | array_flow.rb:1102:10:1102:10 | b [element] | provenance | | +| array_flow.rb:1096:5:1096:5 | b [element] | array_flow.rb:1103:10:1103:10 | b [element] | provenance | | +| array_flow.rb:1096:5:1096:5 | b [element] | array_flow.rb:1104:10:1104:10 | b [element] | provenance | | +| array_flow.rb:1096:9:1096:9 | [post] a [element 1] | array_flow.rb:1098:10:1098:10 | a [element 1] | provenance | | +| array_flow.rb:1096:9:1096:9 | [post] a [element 2] | array_flow.rb:1099:10:1099:10 | a [element 2] | provenance | | +| array_flow.rb:1096:9:1096:9 | [post] a [element] | array_flow.rb:1097:10:1097:10 | a [element] | provenance | | +| array_flow.rb:1096:9:1096:9 | [post] a [element] | array_flow.rb:1098:10:1098:10 | a [element] | provenance | | +| array_flow.rb:1096:9:1096:9 | [post] a [element] | array_flow.rb:1099:10:1099:10 | a [element] | provenance | | +| array_flow.rb:1096:9:1096:9 | [post] a [element] | array_flow.rb:1100:10:1100:10 | a [element] | provenance | | +| array_flow.rb:1096:9:1096:9 | a [element 0] | array_flow.rb:1096:9:1096:9 | [post] a [element] | provenance | | +| array_flow.rb:1096:9:1096:9 | a [element 0] | array_flow.rb:1096:9:1096:17 | call to rotate! [element] | provenance | | +| array_flow.rb:1096:9:1096:9 | a [element 2] | array_flow.rb:1096:9:1096:9 | [post] a [element 1] | provenance | | +| array_flow.rb:1096:9:1096:9 | a [element 2] | array_flow.rb:1096:9:1096:17 | call to rotate! [element 1] | provenance | | +| array_flow.rb:1096:9:1096:9 | a [element 3] | array_flow.rb:1096:9:1096:9 | [post] a [element 2] | provenance | | +| array_flow.rb:1096:9:1096:9 | a [element 3] | array_flow.rb:1096:9:1096:17 | call to rotate! [element 2] | provenance | | +| array_flow.rb:1096:9:1096:17 | call to rotate! [element 1] | array_flow.rb:1096:5:1096:5 | b [element 1] | provenance | | +| array_flow.rb:1096:9:1096:17 | call to rotate! [element 2] | array_flow.rb:1096:5:1096:5 | b [element 2] | provenance | | +| array_flow.rb:1096:9:1096:17 | call to rotate! [element] | array_flow.rb:1096:5:1096:5 | b [element] | provenance | | +| array_flow.rb:1097:10:1097:10 | a [element] | array_flow.rb:1097:10:1097:13 | ...[...] | provenance | | +| array_flow.rb:1098:10:1098:10 | a [element 1] | array_flow.rb:1098:10:1098:13 | ...[...] | provenance | | +| array_flow.rb:1098:10:1098:10 | a [element] | array_flow.rb:1098:10:1098:13 | ...[...] | provenance | | +| array_flow.rb:1099:10:1099:10 | a [element 2] | array_flow.rb:1099:10:1099:13 | ...[...] | provenance | | +| array_flow.rb:1099:10:1099:10 | a [element] | array_flow.rb:1099:10:1099:13 | ...[...] | provenance | | +| array_flow.rb:1100:10:1100:10 | a [element] | array_flow.rb:1100:10:1100:13 | ...[...] | provenance | | +| array_flow.rb:1101:10:1101:10 | b [element] | array_flow.rb:1101:10:1101:13 | ...[...] | provenance | | +| array_flow.rb:1102:10:1102:10 | b [element 1] | array_flow.rb:1102:10:1102:13 | ...[...] | provenance | | +| array_flow.rb:1102:10:1102:10 | b [element] | array_flow.rb:1102:10:1102:13 | ...[...] | provenance | | +| array_flow.rb:1103:10:1103:10 | b [element 2] | array_flow.rb:1103:10:1103:13 | ...[...] | provenance | | +| array_flow.rb:1103:10:1103:10 | b [element] | array_flow.rb:1103:10:1103:13 | ...[...] | provenance | | +| array_flow.rb:1104:10:1104:10 | b [element] | array_flow.rb:1104:10:1104:13 | ...[...] | provenance | | +| array_flow.rb:1106:5:1106:5 | a [element 0] | array_flow.rb:1107:9:1107:9 | a [element 0] | provenance | | +| array_flow.rb:1106:5:1106:5 | a [element 2] | array_flow.rb:1107:9:1107:9 | a [element 2] | provenance | | +| array_flow.rb:1106:5:1106:5 | a [element 3] | array_flow.rb:1107:9:1107:9 | a [element 3] | provenance | | +| array_flow.rb:1106:10:1106:22 | call to source | array_flow.rb:1106:5:1106:5 | a [element 0] | provenance | | +| array_flow.rb:1106:28:1106:40 | call to source | array_flow.rb:1106:5:1106:5 | a [element 2] | provenance | | +| array_flow.rb:1106:43:1106:55 | call to source | array_flow.rb:1106:5:1106:5 | a [element 3] | provenance | | +| array_flow.rb:1107:5:1107:5 | b [element 0] | array_flow.rb:1112:10:1112:10 | b [element 0] | provenance | | +| array_flow.rb:1107:5:1107:5 | b [element 1] | array_flow.rb:1113:10:1113:10 | b [element 1] | provenance | | +| array_flow.rb:1107:5:1107:5 | b [element] | array_flow.rb:1112:10:1112:10 | b [element] | provenance | | +| array_flow.rb:1107:5:1107:5 | b [element] | array_flow.rb:1113:10:1113:10 | b [element] | provenance | | +| array_flow.rb:1107:5:1107:5 | b [element] | array_flow.rb:1114:10:1114:10 | b [element] | provenance | | +| array_flow.rb:1107:5:1107:5 | b [element] | array_flow.rb:1115:10:1115:10 | b [element] | provenance | | +| array_flow.rb:1107:9:1107:9 | [post] a [element 0] | array_flow.rb:1108:10:1108:10 | a [element 0] | provenance | | +| array_flow.rb:1107:9:1107:9 | [post] a [element 1] | array_flow.rb:1109:10:1109:10 | a [element 1] | provenance | | +| array_flow.rb:1107:9:1107:9 | [post] a [element] | array_flow.rb:1108:10:1108:10 | a [element] | provenance | | +| array_flow.rb:1107:9:1107:9 | [post] a [element] | array_flow.rb:1109:10:1109:10 | a [element] | provenance | | +| array_flow.rb:1107:9:1107:9 | [post] a [element] | array_flow.rb:1110:10:1110:10 | a [element] | provenance | | +| array_flow.rb:1107:9:1107:9 | [post] a [element] | array_flow.rb:1111:10:1111:10 | a [element] | provenance | | +| array_flow.rb:1107:9:1107:9 | a [element 0] | array_flow.rb:1107:9:1107:9 | [post] a [element] | provenance | | +| array_flow.rb:1107:9:1107:9 | a [element 0] | array_flow.rb:1107:9:1107:20 | call to rotate! [element] | provenance | | +| array_flow.rb:1107:9:1107:9 | a [element 2] | array_flow.rb:1107:9:1107:9 | [post] a [element 0] | provenance | | +| array_flow.rb:1107:9:1107:9 | a [element 2] | array_flow.rb:1107:9:1107:20 | call to rotate! [element 0] | provenance | | +| array_flow.rb:1107:9:1107:9 | a [element 3] | array_flow.rb:1107:9:1107:9 | [post] a [element 1] | provenance | | +| array_flow.rb:1107:9:1107:9 | a [element 3] | array_flow.rb:1107:9:1107:20 | call to rotate! [element 1] | provenance | | +| array_flow.rb:1107:9:1107:20 | call to rotate! [element 0] | array_flow.rb:1107:5:1107:5 | b [element 0] | provenance | | +| array_flow.rb:1107:9:1107:20 | call to rotate! [element 1] | array_flow.rb:1107:5:1107:5 | b [element 1] | provenance | | +| array_flow.rb:1107:9:1107:20 | call to rotate! [element] | array_flow.rb:1107:5:1107:5 | b [element] | provenance | | +| array_flow.rb:1108:10:1108:10 | a [element 0] | array_flow.rb:1108:10:1108:13 | ...[...] | provenance | | +| array_flow.rb:1108:10:1108:10 | a [element] | array_flow.rb:1108:10:1108:13 | ...[...] | provenance | | +| array_flow.rb:1109:10:1109:10 | a [element 1] | array_flow.rb:1109:10:1109:13 | ...[...] | provenance | | +| array_flow.rb:1109:10:1109:10 | a [element] | array_flow.rb:1109:10:1109:13 | ...[...] | provenance | | +| array_flow.rb:1110:10:1110:10 | a [element] | array_flow.rb:1110:10:1110:13 | ...[...] | provenance | | +| array_flow.rb:1111:10:1111:10 | a [element] | array_flow.rb:1111:10:1111:13 | ...[...] | provenance | | +| array_flow.rb:1112:10:1112:10 | b [element 0] | array_flow.rb:1112:10:1112:13 | ...[...] | provenance | | +| array_flow.rb:1112:10:1112:10 | b [element] | array_flow.rb:1112:10:1112:13 | ...[...] | provenance | | +| array_flow.rb:1113:10:1113:10 | b [element 1] | array_flow.rb:1113:10:1113:13 | ...[...] | provenance | | +| array_flow.rb:1113:10:1113:10 | b [element] | array_flow.rb:1113:10:1113:13 | ...[...] | provenance | | +| array_flow.rb:1114:10:1114:10 | b [element] | array_flow.rb:1114:10:1114:13 | ...[...] | provenance | | +| array_flow.rb:1115:10:1115:10 | b [element] | array_flow.rb:1115:10:1115:13 | ...[...] | provenance | | +| array_flow.rb:1117:5:1117:5 | a [element 0] | array_flow.rb:1118:9:1118:9 | a [element 0] | provenance | | +| array_flow.rb:1117:5:1117:5 | a [element 2] | array_flow.rb:1118:9:1118:9 | a [element 2] | provenance | | +| array_flow.rb:1117:5:1117:5 | a [element 3] | array_flow.rb:1118:9:1118:9 | a [element 3] | provenance | | +| array_flow.rb:1117:10:1117:22 | call to source | array_flow.rb:1117:5:1117:5 | a [element 0] | provenance | | +| array_flow.rb:1117:28:1117:40 | call to source | array_flow.rb:1117:5:1117:5 | a [element 2] | provenance | | +| array_flow.rb:1117:43:1117:55 | call to source | array_flow.rb:1117:5:1117:5 | a [element 3] | provenance | | +| array_flow.rb:1118:5:1118:5 | b [element 0] | array_flow.rb:1123:10:1123:10 | b [element 0] | provenance | | +| array_flow.rb:1118:5:1118:5 | b [element 2] | array_flow.rb:1125:10:1125:10 | b [element 2] | provenance | | +| array_flow.rb:1118:5:1118:5 | b [element 3] | array_flow.rb:1126:10:1126:10 | b [element 3] | provenance | | +| array_flow.rb:1118:9:1118:9 | [post] a [element 0] | array_flow.rb:1119:10:1119:10 | a [element 0] | provenance | | +| array_flow.rb:1118:9:1118:9 | [post] a [element 2] | array_flow.rb:1121:10:1121:10 | a [element 2] | provenance | | +| array_flow.rb:1118:9:1118:9 | [post] a [element 3] | array_flow.rb:1122:10:1122:10 | a [element 3] | provenance | | +| array_flow.rb:1118:9:1118:9 | a [element 0] | array_flow.rb:1118:9:1118:9 | [post] a [element 0] | provenance | | +| array_flow.rb:1118:9:1118:9 | a [element 0] | array_flow.rb:1118:9:1118:20 | call to rotate! [element 0] | provenance | | +| array_flow.rb:1118:9:1118:9 | a [element 2] | array_flow.rb:1118:9:1118:9 | [post] a [element 2] | provenance | | +| array_flow.rb:1118:9:1118:9 | a [element 2] | array_flow.rb:1118:9:1118:20 | call to rotate! [element 2] | provenance | | +| array_flow.rb:1118:9:1118:9 | a [element 3] | array_flow.rb:1118:9:1118:9 | [post] a [element 3] | provenance | | +| array_flow.rb:1118:9:1118:9 | a [element 3] | array_flow.rb:1118:9:1118:20 | call to rotate! [element 3] | provenance | | +| array_flow.rb:1118:9:1118:20 | call to rotate! [element 0] | array_flow.rb:1118:5:1118:5 | b [element 0] | provenance | | +| array_flow.rb:1118:9:1118:20 | call to rotate! [element 2] | array_flow.rb:1118:5:1118:5 | b [element 2] | provenance | | +| array_flow.rb:1118:9:1118:20 | call to rotate! [element 3] | array_flow.rb:1118:5:1118:5 | b [element 3] | provenance | | +| array_flow.rb:1119:10:1119:10 | a [element 0] | array_flow.rb:1119:10:1119:13 | ...[...] | provenance | | +| array_flow.rb:1121:10:1121:10 | a [element 2] | array_flow.rb:1121:10:1121:13 | ...[...] | provenance | | +| array_flow.rb:1122:10:1122:10 | a [element 3] | array_flow.rb:1122:10:1122:13 | ...[...] | provenance | | +| array_flow.rb:1123:10:1123:10 | b [element 0] | array_flow.rb:1123:10:1123:13 | ...[...] | provenance | | +| array_flow.rb:1125:10:1125:10 | b [element 2] | array_flow.rb:1125:10:1125:13 | ...[...] | provenance | | +| array_flow.rb:1126:10:1126:10 | b [element 3] | array_flow.rb:1126:10:1126:13 | ...[...] | provenance | | +| array_flow.rb:1128:5:1128:5 | a [element 0] | array_flow.rb:1129:9:1129:9 | a [element 0] | provenance | | +| array_flow.rb:1128:5:1128:5 | a [element 2] | array_flow.rb:1129:9:1129:9 | a [element 2] | provenance | | +| array_flow.rb:1128:5:1128:5 | a [element 3] | array_flow.rb:1129:9:1129:9 | a [element 3] | provenance | | +| array_flow.rb:1128:10:1128:22 | call to source | array_flow.rb:1128:5:1128:5 | a [element 0] | provenance | | +| array_flow.rb:1128:28:1128:40 | call to source | array_flow.rb:1128:5:1128:5 | a [element 2] | provenance | | +| array_flow.rb:1128:43:1128:55 | call to source | array_flow.rb:1128:5:1128:5 | a [element 3] | provenance | | +| array_flow.rb:1129:5:1129:5 | b [element] | array_flow.rb:1134:10:1134:10 | b [element] | provenance | | +| array_flow.rb:1129:5:1129:5 | b [element] | array_flow.rb:1135:10:1135:10 | b [element] | provenance | | +| array_flow.rb:1129:5:1129:5 | b [element] | array_flow.rb:1136:10:1136:10 | b [element] | provenance | | +| array_flow.rb:1129:5:1129:5 | b [element] | array_flow.rb:1137:10:1137:10 | b [element] | provenance | | +| array_flow.rb:1129:9:1129:9 | [post] a [element] | array_flow.rb:1130:10:1130:10 | a [element] | provenance | | +| array_flow.rb:1129:9:1129:9 | [post] a [element] | array_flow.rb:1131:10:1131:10 | a [element] | provenance | | +| array_flow.rb:1129:9:1129:9 | [post] a [element] | array_flow.rb:1132:10:1132:10 | a [element] | provenance | | +| array_flow.rb:1129:9:1129:9 | [post] a [element] | array_flow.rb:1133:10:1133:10 | a [element] | provenance | | +| array_flow.rb:1129:9:1129:9 | a [element 0] | array_flow.rb:1129:9:1129:9 | [post] a [element] | provenance | | +| array_flow.rb:1129:9:1129:9 | a [element 0] | array_flow.rb:1129:9:1129:20 | call to rotate! [element] | provenance | | +| array_flow.rb:1129:9:1129:9 | a [element 2] | array_flow.rb:1129:9:1129:9 | [post] a [element] | provenance | | +| array_flow.rb:1129:9:1129:9 | a [element 2] | array_flow.rb:1129:9:1129:20 | call to rotate! [element] | provenance | | +| array_flow.rb:1129:9:1129:9 | a [element 3] | array_flow.rb:1129:9:1129:9 | [post] a [element] | provenance | | +| array_flow.rb:1129:9:1129:9 | a [element 3] | array_flow.rb:1129:9:1129:20 | call to rotate! [element] | provenance | | +| array_flow.rb:1129:9:1129:20 | call to rotate! [element] | array_flow.rb:1129:5:1129:5 | b [element] | provenance | | +| array_flow.rb:1130:10:1130:10 | a [element] | array_flow.rb:1130:10:1130:13 | ...[...] | provenance | | +| array_flow.rb:1131:10:1131:10 | a [element] | array_flow.rb:1131:10:1131:13 | ...[...] | provenance | | +| array_flow.rb:1132:10:1132:10 | a [element] | array_flow.rb:1132:10:1132:13 | ...[...] | provenance | | +| array_flow.rb:1133:10:1133:10 | a [element] | array_flow.rb:1133:10:1133:13 | ...[...] | provenance | | +| array_flow.rb:1134:10:1134:10 | b [element] | array_flow.rb:1134:10:1134:13 | ...[...] | provenance | | +| array_flow.rb:1135:10:1135:10 | b [element] | array_flow.rb:1135:10:1135:13 | ...[...] | provenance | | +| array_flow.rb:1136:10:1136:10 | b [element] | array_flow.rb:1136:10:1136:13 | ...[...] | provenance | | +| array_flow.rb:1137:10:1137:10 | b [element] | array_flow.rb:1137:10:1137:13 | ...[...] | provenance | | +| array_flow.rb:1141:5:1141:5 | a [element 3] | array_flow.rb:1142:9:1142:9 | a [element 3] | provenance | | +| array_flow.rb:1141:19:1141:29 | call to source | array_flow.rb:1141:5:1141:5 | a [element 3] | provenance | | +| array_flow.rb:1142:5:1142:5 | b [element] | array_flow.rb:1145:10:1145:10 | b [element] | provenance | | +| array_flow.rb:1142:9:1142:9 | a [element 3] | array_flow.rb:1142:9:1144:7 | call to select [element] | provenance | | +| array_flow.rb:1142:9:1142:9 | a [element 3] | array_flow.rb:1142:22:1142:22 | x | provenance | | +| array_flow.rb:1142:9:1144:7 | call to select [element] | array_flow.rb:1142:5:1142:5 | b [element] | provenance | | +| array_flow.rb:1142:22:1142:22 | x | array_flow.rb:1143:14:1143:14 | x | provenance | | +| array_flow.rb:1145:10:1145:10 | b [element] | array_flow.rb:1145:10:1145:13 | ...[...] | provenance | | +| array_flow.rb:1149:5:1149:5 | a [element 2] | array_flow.rb:1150:9:1150:9 | a [element 2] | provenance | | +| array_flow.rb:1149:16:1149:26 | call to source | array_flow.rb:1149:5:1149:5 | a [element 2] | provenance | | +| array_flow.rb:1150:5:1150:5 | b [element] | array_flow.rb:1155:10:1155:10 | b [element] | provenance | | +| array_flow.rb:1150:9:1150:9 | [post] a [element] | array_flow.rb:1154:10:1154:10 | a [element] | provenance | | +| array_flow.rb:1150:9:1150:9 | a [element 2] | array_flow.rb:1150:9:1150:9 | [post] a [element] | provenance | | +| array_flow.rb:1150:9:1150:9 | a [element 2] | array_flow.rb:1150:9:1153:7 | call to select! [element] | provenance | | +| array_flow.rb:1150:9:1150:9 | a [element 2] | array_flow.rb:1150:23:1150:23 | x | provenance | | +| array_flow.rb:1150:9:1153:7 | call to select! [element] | array_flow.rb:1150:5:1150:5 | b [element] | provenance | | +| array_flow.rb:1150:23:1150:23 | x | array_flow.rb:1151:14:1151:14 | x | provenance | | +| array_flow.rb:1154:10:1154:10 | a [element] | array_flow.rb:1154:10:1154:13 | ...[...] | provenance | | +| array_flow.rb:1155:10:1155:10 | b [element] | array_flow.rb:1155:10:1155:13 | ...[...] | provenance | | +| array_flow.rb:1159:5:1159:5 | a [element 0] | array_flow.rb:1160:9:1160:9 | a [element 0] | provenance | | +| array_flow.rb:1159:5:1159:5 | a [element 2] | array_flow.rb:1160:9:1160:9 | a [element 2] | provenance | | +| array_flow.rb:1159:10:1159:22 | call to source | array_flow.rb:1159:5:1159:5 | a [element 0] | provenance | | +| array_flow.rb:1159:28:1159:40 | call to source | array_flow.rb:1159:5:1159:5 | a [element 2] | provenance | | +| array_flow.rb:1160:5:1160:5 | b | array_flow.rb:1161:10:1161:10 | b | provenance | | +| array_flow.rb:1160:9:1160:9 | [post] a [element 1] | array_flow.rb:1163:10:1163:10 | a [element 1] | provenance | | +| array_flow.rb:1160:9:1160:9 | a [element 0] | array_flow.rb:1160:9:1160:15 | call to shift | provenance | | +| array_flow.rb:1160:9:1160:9 | a [element 2] | array_flow.rb:1160:9:1160:9 | [post] a [element 1] | provenance | | +| array_flow.rb:1160:9:1160:15 | call to shift | array_flow.rb:1160:5:1160:5 | b | provenance | | +| array_flow.rb:1163:10:1163:10 | a [element 1] | array_flow.rb:1163:10:1163:13 | ...[...] | provenance | | +| array_flow.rb:1166:5:1166:5 | a [element 0] | array_flow.rb:1167:9:1167:9 | a [element 0] | provenance | | +| array_flow.rb:1166:5:1166:5 | a [element 2] | array_flow.rb:1167:9:1167:9 | a [element 2] | provenance | | +| array_flow.rb:1166:10:1166:22 | call to source | array_flow.rb:1166:5:1166:5 | a [element 0] | provenance | | +| array_flow.rb:1166:28:1166:40 | call to source | array_flow.rb:1166:5:1166:5 | a [element 2] | provenance | | +| array_flow.rb:1167:5:1167:5 | b [element 0] | array_flow.rb:1168:10:1168:10 | b [element 0] | provenance | | +| array_flow.rb:1167:9:1167:9 | [post] a [element 0] | array_flow.rb:1170:10:1170:10 | a [element 0] | provenance | | +| array_flow.rb:1167:9:1167:9 | a [element 0] | array_flow.rb:1167:9:1167:18 | call to shift [element 0] | provenance | | +| array_flow.rb:1167:9:1167:9 | a [element 2] | array_flow.rb:1167:9:1167:9 | [post] a [element 0] | provenance | | +| array_flow.rb:1167:9:1167:18 | call to shift [element 0] | array_flow.rb:1167:5:1167:5 | b [element 0] | provenance | | +| array_flow.rb:1168:10:1168:10 | b [element 0] | array_flow.rb:1168:10:1168:13 | ...[...] | provenance | | +| array_flow.rb:1170:10:1170:10 | a [element 0] | array_flow.rb:1170:10:1170:13 | ...[...] | provenance | | +| array_flow.rb:1174:5:1174:5 | a [element 0] | array_flow.rb:1175:9:1175:9 | a [element 0] | provenance | | +| array_flow.rb:1174:5:1174:5 | a [element 0] | array_flow.rb:1178:10:1178:10 | a [element 0] | provenance | | +| array_flow.rb:1174:5:1174:5 | a [element 2] | array_flow.rb:1175:9:1175:9 | a [element 2] | provenance | | +| array_flow.rb:1174:5:1174:5 | a [element 2] | array_flow.rb:1180:10:1180:10 | a [element 2] | provenance | | +| array_flow.rb:1174:10:1174:22 | call to source | array_flow.rb:1174:5:1174:5 | a [element 0] | provenance | | +| array_flow.rb:1174:28:1174:40 | call to source | array_flow.rb:1174:5:1174:5 | a [element 2] | provenance | | +| array_flow.rb:1175:5:1175:5 | b [element] | array_flow.rb:1176:10:1176:10 | b [element] | provenance | | +| array_flow.rb:1175:5:1175:5 | b [element] | array_flow.rb:1177:10:1177:10 | b [element] | provenance | | +| array_flow.rb:1175:9:1175:9 | [post] a [element] | array_flow.rb:1178:10:1178:10 | a [element] | provenance | | +| array_flow.rb:1175:9:1175:9 | [post] a [element] | array_flow.rb:1179:10:1179:10 | a [element] | provenance | | +| array_flow.rb:1175:9:1175:9 | [post] a [element] | array_flow.rb:1180:10:1180:10 | a [element] | provenance | | +| array_flow.rb:1175:9:1175:9 | a [element 0] | array_flow.rb:1175:9:1175:9 | [post] a [element] | provenance | | +| array_flow.rb:1175:9:1175:9 | a [element 0] | array_flow.rb:1175:9:1175:18 | call to shift [element] | provenance | | +| array_flow.rb:1175:9:1175:9 | a [element 2] | array_flow.rb:1175:9:1175:9 | [post] a [element] | provenance | | +| array_flow.rb:1175:9:1175:9 | a [element 2] | array_flow.rb:1175:9:1175:18 | call to shift [element] | provenance | | +| array_flow.rb:1175:9:1175:18 | call to shift [element] | array_flow.rb:1175:5:1175:5 | b [element] | provenance | | +| array_flow.rb:1176:10:1176:10 | b [element] | array_flow.rb:1176:10:1176:13 | ...[...] | provenance | | +| array_flow.rb:1177:10:1177:10 | b [element] | array_flow.rb:1177:10:1177:13 | ...[...] | provenance | | +| array_flow.rb:1178:10:1178:10 | a [element 0] | array_flow.rb:1178:10:1178:13 | ...[...] | provenance | | +| array_flow.rb:1178:10:1178:10 | a [element] | array_flow.rb:1178:10:1178:13 | ...[...] | provenance | | +| array_flow.rb:1179:10:1179:10 | a [element] | array_flow.rb:1179:10:1179:13 | ...[...] | provenance | | +| array_flow.rb:1180:10:1180:10 | a [element 2] | array_flow.rb:1180:10:1180:13 | ...[...] | provenance | | +| array_flow.rb:1180:10:1180:10 | a [element] | array_flow.rb:1180:10:1180:13 | ...[...] | provenance | | +| array_flow.rb:1184:5:1184:5 | a [element 2] | array_flow.rb:1185:9:1185:9 | a [element 2] | provenance | | +| array_flow.rb:1184:5:1184:5 | a [element 2] | array_flow.rb:1188:10:1188:10 | a [element 2] | provenance | | +| array_flow.rb:1184:16:1184:26 | call to source | array_flow.rb:1184:5:1184:5 | a [element 2] | provenance | | +| array_flow.rb:1185:5:1185:5 | b [element] | array_flow.rb:1189:10:1189:10 | b [element] | provenance | | +| array_flow.rb:1185:5:1185:5 | b [element] | array_flow.rb:1190:10:1190:10 | b [element] | provenance | | +| array_flow.rb:1185:5:1185:5 | b [element] | array_flow.rb:1191:10:1191:10 | b [element] | provenance | | +| array_flow.rb:1185:9:1185:9 | a [element 2] | array_flow.rb:1185:9:1185:17 | call to shuffle [element] | provenance | | +| array_flow.rb:1185:9:1185:17 | call to shuffle [element] | array_flow.rb:1185:5:1185:5 | b [element] | provenance | | +| array_flow.rb:1188:10:1188:10 | a [element 2] | array_flow.rb:1188:10:1188:13 | ...[...] | provenance | | +| array_flow.rb:1189:10:1189:10 | b [element] | array_flow.rb:1189:10:1189:13 | ...[...] | provenance | | +| array_flow.rb:1190:10:1190:10 | b [element] | array_flow.rb:1190:10:1190:13 | ...[...] | provenance | | +| array_flow.rb:1191:10:1191:10 | b [element] | array_flow.rb:1191:10:1191:13 | ...[...] | provenance | | +| array_flow.rb:1195:5:1195:5 | a [element 2] | array_flow.rb:1196:9:1196:9 | a [element 2] | provenance | | +| array_flow.rb:1195:5:1195:5 | a [element 2] | array_flow.rb:1199:10:1199:10 | a [element 2] | provenance | | +| array_flow.rb:1195:16:1195:26 | call to source | array_flow.rb:1195:5:1195:5 | a [element 2] | provenance | | +| array_flow.rb:1196:5:1196:5 | b [element] | array_flow.rb:1200:10:1200:10 | b [element] | provenance | | +| array_flow.rb:1196:5:1196:5 | b [element] | array_flow.rb:1201:10:1201:10 | b [element] | provenance | | +| array_flow.rb:1196:5:1196:5 | b [element] | array_flow.rb:1202:10:1202:10 | b [element] | provenance | | +| array_flow.rb:1196:9:1196:9 | [post] a [element] | array_flow.rb:1197:10:1197:10 | a [element] | provenance | | +| array_flow.rb:1196:9:1196:9 | [post] a [element] | array_flow.rb:1198:10:1198:10 | a [element] | provenance | | +| array_flow.rb:1196:9:1196:9 | [post] a [element] | array_flow.rb:1199:10:1199:10 | a [element] | provenance | | +| array_flow.rb:1196:9:1196:9 | a [element 2] | array_flow.rb:1196:9:1196:9 | [post] a [element] | provenance | | +| array_flow.rb:1196:9:1196:9 | a [element 2] | array_flow.rb:1196:9:1196:18 | call to shuffle! [element] | provenance | | +| array_flow.rb:1196:9:1196:18 | call to shuffle! [element] | array_flow.rb:1196:5:1196:5 | b [element] | provenance | | +| array_flow.rb:1197:10:1197:10 | a [element] | array_flow.rb:1197:10:1197:13 | ...[...] | provenance | | +| array_flow.rb:1198:10:1198:10 | a [element] | array_flow.rb:1198:10:1198:13 | ...[...] | provenance | | +| array_flow.rb:1199:10:1199:10 | a [element 2] | array_flow.rb:1199:10:1199:13 | ...[...] | provenance | | +| array_flow.rb:1199:10:1199:10 | a [element] | array_flow.rb:1199:10:1199:13 | ...[...] | provenance | | +| array_flow.rb:1200:10:1200:10 | b [element] | array_flow.rb:1200:10:1200:13 | ...[...] | provenance | | +| array_flow.rb:1201:10:1201:10 | b [element] | array_flow.rb:1201:10:1201:13 | ...[...] | provenance | | +| array_flow.rb:1202:10:1202:10 | b [element] | array_flow.rb:1202:10:1202:13 | ...[...] | provenance | | +| array_flow.rb:1206:5:1206:5 | a [element 2] | array_flow.rb:1211:9:1211:9 | a [element 2] | provenance | | +| array_flow.rb:1206:5:1206:5 | a [element 2] | array_flow.rb:1214:9:1214:9 | a [element 2] | provenance | | +| array_flow.rb:1206:5:1206:5 | a [element 2] | array_flow.rb:1221:9:1221:9 | a [element 2] | provenance | | +| array_flow.rb:1206:5:1206:5 | a [element 2] | array_flow.rb:1226:9:1226:9 | a [element 2] | provenance | | +| array_flow.rb:1206:5:1206:5 | a [element 2] | array_flow.rb:1230:9:1230:9 | a [element 2] | provenance | | +| array_flow.rb:1206:5:1206:5 | a [element 2] | array_flow.rb:1235:9:1235:9 | a [element 2] | provenance | | +| array_flow.rb:1206:5:1206:5 | a [element 2] | array_flow.rb:1240:9:1240:9 | a [element 2] | provenance | | +| array_flow.rb:1206:5:1206:5 | a [element 2] | array_flow.rb:1244:9:1244:9 | a [element 2] | provenance | | +| array_flow.rb:1206:5:1206:5 | a [element 2] | array_flow.rb:1248:9:1248:9 | a [element 2] | provenance | | +| array_flow.rb:1206:5:1206:5 | a [element 2] | array_flow.rb:1253:9:1253:9 | a [element 2] | provenance | | +| array_flow.rb:1206:5:1206:5 | a [element 4] | array_flow.rb:1208:9:1208:9 | a [element 4] | provenance | | +| array_flow.rb:1206:5:1206:5 | a [element 4] | array_flow.rb:1211:9:1211:9 | a [element 4] | provenance | | +| array_flow.rb:1206:5:1206:5 | a [element 4] | array_flow.rb:1214:9:1214:9 | a [element 4] | provenance | | +| array_flow.rb:1206:5:1206:5 | a [element 4] | array_flow.rb:1221:9:1221:9 | a [element 4] | provenance | | +| array_flow.rb:1206:5:1206:5 | a [element 4] | array_flow.rb:1226:9:1226:9 | a [element 4] | provenance | | +| array_flow.rb:1206:5:1206:5 | a [element 4] | array_flow.rb:1240:9:1240:9 | a [element 4] | provenance | | +| array_flow.rb:1206:5:1206:5 | a [element 4] | array_flow.rb:1244:9:1244:9 | a [element 4] | provenance | | +| array_flow.rb:1206:5:1206:5 | a [element 4] | array_flow.rb:1253:9:1253:9 | a [element 4] | provenance | | +| array_flow.rb:1206:16:1206:28 | call to source | array_flow.rb:1206:5:1206:5 | a [element 2] | provenance | | +| array_flow.rb:1206:34:1206:46 | call to source | array_flow.rb:1206:5:1206:5 | a [element 4] | provenance | | +| array_flow.rb:1208:5:1208:5 | b | array_flow.rb:1209:10:1209:10 | b | provenance | | +| array_flow.rb:1208:9:1208:9 | a [element 4] | array_flow.rb:1208:9:1208:17 | call to slice | provenance | | +| array_flow.rb:1208:9:1208:17 | call to slice | array_flow.rb:1208:5:1208:5 | b | provenance | | +| array_flow.rb:1211:5:1211:5 | b | array_flow.rb:1212:10:1212:10 | b | provenance | | +| array_flow.rb:1211:9:1211:9 | a [element 2] | array_flow.rb:1211:9:1211:19 | call to slice | provenance | | +| array_flow.rb:1211:9:1211:9 | a [element 4] | array_flow.rb:1211:9:1211:19 | call to slice | provenance | | +| array_flow.rb:1211:9:1211:19 | call to slice | array_flow.rb:1211:5:1211:5 | b | provenance | | +| array_flow.rb:1214:5:1214:5 | b | array_flow.rb:1216:10:1216:10 | b | provenance | | +| array_flow.rb:1214:9:1214:9 | a [element 2] | array_flow.rb:1214:9:1214:17 | call to slice | provenance | | +| array_flow.rb:1214:9:1214:9 | a [element 4] | array_flow.rb:1214:9:1214:17 | call to slice | provenance | | +| array_flow.rb:1214:9:1214:17 | call to slice | array_flow.rb:1214:5:1214:5 | b | provenance | | +| array_flow.rb:1221:5:1221:5 | b [element 0] | array_flow.rb:1222:10:1222:10 | b [element 0] | provenance | | +| array_flow.rb:1221:5:1221:5 | b [element 2] | array_flow.rb:1224:10:1224:10 | b [element 2] | provenance | | +| array_flow.rb:1221:9:1221:9 | a [element 2] | array_flow.rb:1221:9:1221:21 | call to slice [element 0] | provenance | | +| array_flow.rb:1221:9:1221:9 | a [element 4] | array_flow.rb:1221:9:1221:21 | call to slice [element 2] | provenance | | +| array_flow.rb:1221:9:1221:21 | call to slice [element 0] | array_flow.rb:1221:5:1221:5 | b [element 0] | provenance | | +| array_flow.rb:1221:9:1221:21 | call to slice [element 2] | array_flow.rb:1221:5:1221:5 | b [element 2] | provenance | | +| array_flow.rb:1222:10:1222:10 | b [element 0] | array_flow.rb:1222:10:1222:13 | ...[...] | provenance | | +| array_flow.rb:1224:10:1224:10 | b [element 2] | array_flow.rb:1224:10:1224:13 | ...[...] | provenance | | +| array_flow.rb:1226:5:1226:5 | b [element] | array_flow.rb:1227:10:1227:10 | b [element] | provenance | | +| array_flow.rb:1226:5:1226:5 | b [element] | array_flow.rb:1228:10:1228:10 | b [element] | provenance | | +| array_flow.rb:1226:9:1226:9 | a [element 2] | array_flow.rb:1226:9:1226:21 | call to slice [element] | provenance | | +| array_flow.rb:1226:9:1226:9 | a [element 4] | array_flow.rb:1226:9:1226:21 | call to slice [element] | provenance | | +| array_flow.rb:1226:9:1226:21 | call to slice [element] | array_flow.rb:1226:5:1226:5 | b [element] | provenance | | +| array_flow.rb:1227:10:1227:10 | b [element] | array_flow.rb:1227:10:1227:13 | ...[...] | provenance | | +| array_flow.rb:1228:10:1228:10 | b [element] | array_flow.rb:1228:10:1228:13 | ...[...] | provenance | | +| array_flow.rb:1230:5:1230:5 | b [element 0] | array_flow.rb:1231:10:1231:10 | b [element 0] | provenance | | +| array_flow.rb:1230:9:1230:9 | a [element 2] | array_flow.rb:1230:9:1230:21 | call to slice [element 0] | provenance | | +| array_flow.rb:1230:9:1230:21 | call to slice [element 0] | array_flow.rb:1230:5:1230:5 | b [element 0] | provenance | | +| array_flow.rb:1231:10:1231:10 | b [element 0] | array_flow.rb:1231:10:1231:13 | ...[...] | provenance | | +| array_flow.rb:1235:5:1235:5 | b [element 0] | array_flow.rb:1236:10:1236:10 | b [element 0] | provenance | | +| array_flow.rb:1235:9:1235:9 | a [element 2] | array_flow.rb:1235:9:1235:22 | call to slice [element 0] | provenance | | +| array_flow.rb:1235:9:1235:22 | call to slice [element 0] | array_flow.rb:1235:5:1235:5 | b [element 0] | provenance | | +| array_flow.rb:1236:10:1236:10 | b [element 0] | array_flow.rb:1236:10:1236:13 | ...[...] | provenance | | +| array_flow.rb:1240:5:1240:5 | b [element] | array_flow.rb:1241:10:1241:10 | b [element] | provenance | | +| array_flow.rb:1240:5:1240:5 | b [element] | array_flow.rb:1242:10:1242:10 | b [element] | provenance | | +| array_flow.rb:1240:9:1240:9 | a [element 2] | array_flow.rb:1240:9:1240:21 | call to slice [element] | provenance | | +| array_flow.rb:1240:9:1240:9 | a [element 4] | array_flow.rb:1240:9:1240:21 | call to slice [element] | provenance | | +| array_flow.rb:1240:9:1240:21 | call to slice [element] | array_flow.rb:1240:5:1240:5 | b [element] | provenance | | +| array_flow.rb:1241:10:1241:10 | b [element] | array_flow.rb:1241:10:1241:13 | ...[...] | provenance | | +| array_flow.rb:1242:10:1242:10 | b [element] | array_flow.rb:1242:10:1242:13 | ...[...] | provenance | | +| array_flow.rb:1244:5:1244:5 | b [element] | array_flow.rb:1245:10:1245:10 | b [element] | provenance | | +| array_flow.rb:1244:5:1244:5 | b [element] | array_flow.rb:1246:10:1246:10 | b [element] | provenance | | +| array_flow.rb:1244:9:1244:9 | a [element 2] | array_flow.rb:1244:9:1244:24 | call to slice [element] | provenance | | +| array_flow.rb:1244:9:1244:9 | a [element 4] | array_flow.rb:1244:9:1244:24 | call to slice [element] | provenance | | +| array_flow.rb:1244:9:1244:24 | call to slice [element] | array_flow.rb:1244:5:1244:5 | b [element] | provenance | | +| array_flow.rb:1245:10:1245:10 | b [element] | array_flow.rb:1245:10:1245:13 | ...[...] | provenance | | +| array_flow.rb:1246:10:1246:10 | b [element] | array_flow.rb:1246:10:1246:13 | ...[...] | provenance | | +| array_flow.rb:1248:5:1248:5 | b [element 2] | array_flow.rb:1251:10:1251:10 | b [element 2] | provenance | | +| array_flow.rb:1248:9:1248:9 | a [element 2] | array_flow.rb:1248:9:1248:20 | call to slice [element 2] | provenance | | +| array_flow.rb:1248:9:1248:20 | call to slice [element 2] | array_flow.rb:1248:5:1248:5 | b [element 2] | provenance | | +| array_flow.rb:1251:10:1251:10 | b [element 2] | array_flow.rb:1251:10:1251:13 | ...[...] | provenance | | +| array_flow.rb:1253:5:1253:5 | b [element] | array_flow.rb:1254:10:1254:10 | b [element] | provenance | | +| array_flow.rb:1253:5:1253:5 | b [element] | array_flow.rb:1255:10:1255:10 | b [element] | provenance | | +| array_flow.rb:1253:5:1253:5 | b [element] | array_flow.rb:1256:10:1256:10 | b [element] | provenance | | +| array_flow.rb:1253:9:1253:9 | a [element 2] | array_flow.rb:1253:9:1253:20 | call to slice [element] | provenance | | +| array_flow.rb:1253:9:1253:9 | a [element 4] | array_flow.rb:1253:9:1253:20 | call to slice [element] | provenance | | +| array_flow.rb:1253:9:1253:20 | call to slice [element] | array_flow.rb:1253:5:1253:5 | b [element] | provenance | | +| array_flow.rb:1254:10:1254:10 | b [element] | array_flow.rb:1254:10:1254:13 | ...[...] | provenance | | +| array_flow.rb:1255:10:1255:10 | b [element] | array_flow.rb:1255:10:1255:13 | ...[...] | provenance | | +| array_flow.rb:1256:10:1256:10 | b [element] | array_flow.rb:1256:10:1256:13 | ...[...] | provenance | | +| array_flow.rb:1260:5:1260:5 | a [element 2] | array_flow.rb:1261:9:1261:9 | a [element 2] | provenance | | +| array_flow.rb:1260:5:1260:5 | a [element 4] | array_flow.rb:1261:9:1261:9 | a [element 4] | provenance | | +| array_flow.rb:1260:16:1260:28 | call to source | array_flow.rb:1260:5:1260:5 | a [element 2] | provenance | | +| array_flow.rb:1260:34:1260:46 | call to source | array_flow.rb:1260:5:1260:5 | a [element 4] | provenance | | +| array_flow.rb:1261:5:1261:5 | b | array_flow.rb:1262:10:1262:10 | b | provenance | | +| array_flow.rb:1261:9:1261:9 | [post] a [element 3] | array_flow.rb:1266:10:1266:10 | a [element 3] | provenance | | +| array_flow.rb:1261:9:1261:9 | a [element 2] | array_flow.rb:1261:9:1261:19 | call to slice! | provenance | | +| array_flow.rb:1261:9:1261:9 | a [element 4] | array_flow.rb:1261:9:1261:9 | [post] a [element 3] | provenance | | +| array_flow.rb:1261:9:1261:19 | call to slice! | array_flow.rb:1261:5:1261:5 | b | provenance | | +| array_flow.rb:1266:10:1266:10 | a [element 3] | array_flow.rb:1266:10:1266:13 | ...[...] | provenance | | +| array_flow.rb:1268:5:1268:5 | a [element 2] | array_flow.rb:1269:9:1269:9 | a [element 2] | provenance | | +| array_flow.rb:1268:5:1268:5 | a [element 4] | array_flow.rb:1269:9:1269:9 | a [element 4] | provenance | | +| array_flow.rb:1268:16:1268:28 | call to source | array_flow.rb:1268:5:1268:5 | a [element 2] | provenance | | +| array_flow.rb:1268:34:1268:46 | call to source | array_flow.rb:1268:5:1268:5 | a [element 4] | provenance | | +| array_flow.rb:1269:5:1269:5 | b | array_flow.rb:1275:10:1275:10 | b | provenance | | +| array_flow.rb:1269:5:1269:5 | b [element] | array_flow.rb:1277:10:1277:10 | b [element] | provenance | | +| array_flow.rb:1269:9:1269:9 | [post] a [element] | array_flow.rb:1270:10:1270:10 | a [element] | provenance | | +| array_flow.rb:1269:9:1269:9 | [post] a [element] | array_flow.rb:1271:10:1271:10 | a [element] | provenance | | +| array_flow.rb:1269:9:1269:9 | [post] a [element] | array_flow.rb:1272:10:1272:10 | a [element] | provenance | | +| array_flow.rb:1269:9:1269:9 | [post] a [element] | array_flow.rb:1273:10:1273:10 | a [element] | provenance | | +| array_flow.rb:1269:9:1269:9 | a [element 2] | array_flow.rb:1269:9:1269:9 | [post] a [element] | provenance | | +| array_flow.rb:1269:9:1269:9 | a [element 2] | array_flow.rb:1269:9:1269:19 | call to slice! | provenance | | +| array_flow.rb:1269:9:1269:9 | a [element 2] | array_flow.rb:1269:9:1269:19 | call to slice! [element] | provenance | | +| array_flow.rb:1269:9:1269:9 | a [element 4] | array_flow.rb:1269:9:1269:9 | [post] a [element] | provenance | | +| array_flow.rb:1269:9:1269:9 | a [element 4] | array_flow.rb:1269:9:1269:19 | call to slice! | provenance | | +| array_flow.rb:1269:9:1269:9 | a [element 4] | array_flow.rb:1269:9:1269:19 | call to slice! [element] | provenance | | +| array_flow.rb:1269:9:1269:19 | call to slice! | array_flow.rb:1269:5:1269:5 | b | provenance | | +| array_flow.rb:1269:9:1269:19 | call to slice! [element] | array_flow.rb:1269:5:1269:5 | b [element] | provenance | | +| array_flow.rb:1270:10:1270:10 | a [element] | array_flow.rb:1270:10:1270:13 | ...[...] | provenance | | +| array_flow.rb:1271:10:1271:10 | a [element] | array_flow.rb:1271:10:1271:13 | ...[...] | provenance | | +| array_flow.rb:1272:10:1272:10 | a [element] | array_flow.rb:1272:10:1272:13 | ...[...] | provenance | | +| array_flow.rb:1273:10:1273:10 | a [element] | array_flow.rb:1273:10:1273:13 | ...[...] | provenance | | +| array_flow.rb:1277:10:1277:10 | b [element] | array_flow.rb:1277:10:1277:13 | ...[...] | provenance | | +| array_flow.rb:1279:5:1279:5 | a [element 2] | array_flow.rb:1280:9:1280:9 | a [element 2] | provenance | | +| array_flow.rb:1279:5:1279:5 | a [element 4] | array_flow.rb:1280:9:1280:9 | a [element 4] | provenance | | +| array_flow.rb:1279:16:1279:28 | call to source | array_flow.rb:1279:5:1279:5 | a [element 2] | provenance | | +| array_flow.rb:1279:34:1279:46 | call to source | array_flow.rb:1279:5:1279:5 | a [element 4] | provenance | | +| array_flow.rb:1280:5:1280:5 | b [element 0] | array_flow.rb:1281:10:1281:10 | b [element 0] | provenance | | +| array_flow.rb:1280:5:1280:5 | b [element 2] | array_flow.rb:1283:10:1283:10 | b [element 2] | provenance | | +| array_flow.rb:1280:9:1280:9 | a [element 2] | array_flow.rb:1280:9:1280:22 | call to slice! [element 0] | provenance | | +| array_flow.rb:1280:9:1280:9 | a [element 4] | array_flow.rb:1280:9:1280:22 | call to slice! [element 2] | provenance | | +| array_flow.rb:1280:9:1280:22 | call to slice! [element 0] | array_flow.rb:1280:5:1280:5 | b [element 0] | provenance | | +| array_flow.rb:1280:9:1280:22 | call to slice! [element 2] | array_flow.rb:1280:5:1280:5 | b [element 2] | provenance | | +| array_flow.rb:1281:10:1281:10 | b [element 0] | array_flow.rb:1281:10:1281:13 | ...[...] | provenance | | +| array_flow.rb:1283:10:1283:10 | b [element 2] | array_flow.rb:1283:10:1283:13 | ...[...] | provenance | | +| array_flow.rb:1290:5:1290:5 | a [element 2] | array_flow.rb:1291:9:1291:9 | a [element 2] | provenance | | +| array_flow.rb:1290:5:1290:5 | a [element 4] | array_flow.rb:1291:9:1291:9 | a [element 4] | provenance | | +| array_flow.rb:1290:16:1290:28 | call to source | array_flow.rb:1290:5:1290:5 | a [element 2] | provenance | | +| array_flow.rb:1290:34:1290:46 | call to source | array_flow.rb:1290:5:1290:5 | a [element 4] | provenance | | +| array_flow.rb:1291:5:1291:5 | b [element 0] | array_flow.rb:1292:10:1292:10 | b [element 0] | provenance | | +| array_flow.rb:1291:9:1291:9 | [post] a [element 2] | array_flow.rb:1297:10:1297:10 | a [element 2] | provenance | | +| array_flow.rb:1291:9:1291:9 | a [element 2] | array_flow.rb:1291:9:1291:22 | call to slice! [element 0] | provenance | | +| array_flow.rb:1291:9:1291:9 | a [element 4] | array_flow.rb:1291:9:1291:9 | [post] a [element 2] | provenance | | +| array_flow.rb:1291:9:1291:22 | call to slice! [element 0] | array_flow.rb:1291:5:1291:5 | b [element 0] | provenance | | +| array_flow.rb:1292:10:1292:10 | b [element 0] | array_flow.rb:1292:10:1292:13 | ...[...] | provenance | | +| array_flow.rb:1297:10:1297:10 | a [element 2] | array_flow.rb:1297:10:1297:13 | ...[...] | provenance | | +| array_flow.rb:1301:5:1301:5 | a [element 2] | array_flow.rb:1302:9:1302:9 | a [element 2] | provenance | | +| array_flow.rb:1301:5:1301:5 | a [element 4] | array_flow.rb:1302:9:1302:9 | a [element 4] | provenance | | +| array_flow.rb:1301:16:1301:28 | call to source | array_flow.rb:1301:5:1301:5 | a [element 2] | provenance | | +| array_flow.rb:1301:34:1301:46 | call to source | array_flow.rb:1301:5:1301:5 | a [element 4] | provenance | | +| array_flow.rb:1302:5:1302:5 | b [element 0] | array_flow.rb:1303:10:1303:10 | b [element 0] | provenance | | +| array_flow.rb:1302:9:1302:9 | [post] a [element 2] | array_flow.rb:1308:10:1308:10 | a [element 2] | provenance | | +| array_flow.rb:1302:9:1302:9 | a [element 2] | array_flow.rb:1302:9:1302:23 | call to slice! [element 0] | provenance | | +| array_flow.rb:1302:9:1302:9 | a [element 4] | array_flow.rb:1302:9:1302:9 | [post] a [element 2] | provenance | | +| array_flow.rb:1302:9:1302:23 | call to slice! [element 0] | array_flow.rb:1302:5:1302:5 | b [element 0] | provenance | | +| array_flow.rb:1303:10:1303:10 | b [element 0] | array_flow.rb:1303:10:1303:13 | ...[...] | provenance | | +| array_flow.rb:1308:10:1308:10 | a [element 2] | array_flow.rb:1308:10:1308:13 | ...[...] | provenance | | +| array_flow.rb:1312:5:1312:5 | a [element 2] | array_flow.rb:1313:9:1313:9 | a [element 2] | provenance | | +| array_flow.rb:1312:5:1312:5 | a [element 4] | array_flow.rb:1313:9:1313:9 | a [element 4] | provenance | | +| array_flow.rb:1312:16:1312:28 | call to source | array_flow.rb:1312:5:1312:5 | a [element 2] | provenance | | +| array_flow.rb:1312:34:1312:46 | call to source | array_flow.rb:1312:5:1312:5 | a [element 4] | provenance | | +| array_flow.rb:1313:5:1313:5 | b [element] | array_flow.rb:1314:10:1314:10 | b [element] | provenance | | +| array_flow.rb:1313:5:1313:5 | b [element] | array_flow.rb:1315:10:1315:10 | b [element] | provenance | | +| array_flow.rb:1313:5:1313:5 | b [element] | array_flow.rb:1316:10:1316:10 | b [element] | provenance | | +| array_flow.rb:1313:9:1313:9 | [post] a [element] | array_flow.rb:1317:10:1317:10 | a [element] | provenance | | +| array_flow.rb:1313:9:1313:9 | [post] a [element] | array_flow.rb:1318:10:1318:10 | a [element] | provenance | | +| array_flow.rb:1313:9:1313:9 | [post] a [element] | array_flow.rb:1319:10:1319:10 | a [element] | provenance | | +| array_flow.rb:1313:9:1313:9 | a [element 2] | array_flow.rb:1313:9:1313:9 | [post] a [element] | provenance | | +| array_flow.rb:1313:9:1313:9 | a [element 2] | array_flow.rb:1313:9:1313:22 | call to slice! [element] | provenance | | +| array_flow.rb:1313:9:1313:9 | a [element 4] | array_flow.rb:1313:9:1313:9 | [post] a [element] | provenance | | +| array_flow.rb:1313:9:1313:9 | a [element 4] | array_flow.rb:1313:9:1313:22 | call to slice! [element] | provenance | | +| array_flow.rb:1313:9:1313:22 | call to slice! [element] | array_flow.rb:1313:5:1313:5 | b [element] | provenance | | +| array_flow.rb:1314:10:1314:10 | b [element] | array_flow.rb:1314:10:1314:13 | ...[...] | provenance | | +| array_flow.rb:1315:10:1315:10 | b [element] | array_flow.rb:1315:10:1315:13 | ...[...] | provenance | | +| array_flow.rb:1316:10:1316:10 | b [element] | array_flow.rb:1316:10:1316:13 | ...[...] | provenance | | +| array_flow.rb:1317:10:1317:10 | a [element] | array_flow.rb:1317:10:1317:13 | ...[...] | provenance | | +| array_flow.rb:1318:10:1318:10 | a [element] | array_flow.rb:1318:10:1318:13 | ...[...] | provenance | | +| array_flow.rb:1319:10:1319:10 | a [element] | array_flow.rb:1319:10:1319:13 | ...[...] | provenance | | +| array_flow.rb:1321:5:1321:5 | a [element 2] | array_flow.rb:1322:9:1322:9 | a [element 2] | provenance | | +| array_flow.rb:1321:5:1321:5 | a [element 4] | array_flow.rb:1322:9:1322:9 | a [element 4] | provenance | | +| array_flow.rb:1321:16:1321:28 | call to source | array_flow.rb:1321:5:1321:5 | a [element 2] | provenance | | +| array_flow.rb:1321:34:1321:46 | call to source | array_flow.rb:1321:5:1321:5 | a [element 4] | provenance | | +| array_flow.rb:1322:5:1322:5 | b [element] | array_flow.rb:1323:10:1323:10 | b [element] | provenance | | +| array_flow.rb:1322:5:1322:5 | b [element] | array_flow.rb:1324:10:1324:10 | b [element] | provenance | | +| array_flow.rb:1322:5:1322:5 | b [element] | array_flow.rb:1325:10:1325:10 | b [element] | provenance | | +| array_flow.rb:1322:9:1322:9 | [post] a [element] | array_flow.rb:1326:10:1326:10 | a [element] | provenance | | +| array_flow.rb:1322:9:1322:9 | [post] a [element] | array_flow.rb:1327:10:1327:10 | a [element] | provenance | | +| array_flow.rb:1322:9:1322:9 | [post] a [element] | array_flow.rb:1328:10:1328:10 | a [element] | provenance | | +| array_flow.rb:1322:9:1322:9 | a [element 2] | array_flow.rb:1322:9:1322:9 | [post] a [element] | provenance | | +| array_flow.rb:1322:9:1322:9 | a [element 2] | array_flow.rb:1322:9:1322:22 | call to slice! [element] | provenance | | +| array_flow.rb:1322:9:1322:9 | a [element 4] | array_flow.rb:1322:9:1322:9 | [post] a [element] | provenance | | +| array_flow.rb:1322:9:1322:9 | a [element 4] | array_flow.rb:1322:9:1322:22 | call to slice! [element] | provenance | | +| array_flow.rb:1322:9:1322:22 | call to slice! [element] | array_flow.rb:1322:5:1322:5 | b [element] | provenance | | +| array_flow.rb:1323:10:1323:10 | b [element] | array_flow.rb:1323:10:1323:13 | ...[...] | provenance | | +| array_flow.rb:1324:10:1324:10 | b [element] | array_flow.rb:1324:10:1324:13 | ...[...] | provenance | | +| array_flow.rb:1325:10:1325:10 | b [element] | array_flow.rb:1325:10:1325:13 | ...[...] | provenance | | +| array_flow.rb:1326:10:1326:10 | a [element] | array_flow.rb:1326:10:1326:13 | ...[...] | provenance | | +| array_flow.rb:1327:10:1327:10 | a [element] | array_flow.rb:1327:10:1327:13 | ...[...] | provenance | | +| array_flow.rb:1328:10:1328:10 | a [element] | array_flow.rb:1328:10:1328:13 | ...[...] | provenance | | +| array_flow.rb:1330:5:1330:5 | a [element 2] | array_flow.rb:1331:9:1331:9 | a [element 2] | provenance | | +| array_flow.rb:1330:5:1330:5 | a [element 4] | array_flow.rb:1331:9:1331:9 | a [element 4] | provenance | | +| array_flow.rb:1330:16:1330:28 | call to source | array_flow.rb:1330:5:1330:5 | a [element 2] | provenance | | +| array_flow.rb:1330:34:1330:46 | call to source | array_flow.rb:1330:5:1330:5 | a [element 4] | provenance | | +| array_flow.rb:1331:5:1331:5 | b [element] | array_flow.rb:1332:10:1332:10 | b [element] | provenance | | +| array_flow.rb:1331:5:1331:5 | b [element] | array_flow.rb:1333:10:1333:10 | b [element] | provenance | | +| array_flow.rb:1331:5:1331:5 | b [element] | array_flow.rb:1334:10:1334:10 | b [element] | provenance | | +| array_flow.rb:1331:9:1331:9 | [post] a [element] | array_flow.rb:1335:10:1335:10 | a [element] | provenance | | +| array_flow.rb:1331:9:1331:9 | [post] a [element] | array_flow.rb:1336:10:1336:10 | a [element] | provenance | | +| array_flow.rb:1331:9:1331:9 | [post] a [element] | array_flow.rb:1337:10:1337:10 | a [element] | provenance | | +| array_flow.rb:1331:9:1331:9 | a [element 2] | array_flow.rb:1331:9:1331:9 | [post] a [element] | provenance | | +| array_flow.rb:1331:9:1331:9 | a [element 2] | array_flow.rb:1331:9:1331:25 | call to slice! [element] | provenance | | +| array_flow.rb:1331:9:1331:9 | a [element 4] | array_flow.rb:1331:9:1331:9 | [post] a [element] | provenance | | +| array_flow.rb:1331:9:1331:9 | a [element 4] | array_flow.rb:1331:9:1331:25 | call to slice! [element] | provenance | | +| array_flow.rb:1331:9:1331:25 | call to slice! [element] | array_flow.rb:1331:5:1331:5 | b [element] | provenance | | +| array_flow.rb:1332:10:1332:10 | b [element] | array_flow.rb:1332:10:1332:13 | ...[...] | provenance | | +| array_flow.rb:1333:10:1333:10 | b [element] | array_flow.rb:1333:10:1333:13 | ...[...] | provenance | | +| array_flow.rb:1334:10:1334:10 | b [element] | array_flow.rb:1334:10:1334:13 | ...[...] | provenance | | +| array_flow.rb:1335:10:1335:10 | a [element] | array_flow.rb:1335:10:1335:13 | ...[...] | provenance | | +| array_flow.rb:1336:10:1336:10 | a [element] | array_flow.rb:1336:10:1336:13 | ...[...] | provenance | | +| array_flow.rb:1337:10:1337:10 | a [element] | array_flow.rb:1337:10:1337:13 | ...[...] | provenance | | +| array_flow.rb:1339:5:1339:5 | a [element 2] | array_flow.rb:1340:9:1340:9 | a [element 2] | provenance | | +| array_flow.rb:1339:5:1339:5 | a [element 4] | array_flow.rb:1340:9:1340:9 | a [element 4] | provenance | | +| array_flow.rb:1339:16:1339:28 | call to source | array_flow.rb:1339:5:1339:5 | a [element 2] | provenance | | +| array_flow.rb:1339:34:1339:46 | call to source | array_flow.rb:1339:5:1339:5 | a [element 4] | provenance | | +| array_flow.rb:1340:5:1340:5 | b [element 2] | array_flow.rb:1343:10:1343:10 | b [element 2] | provenance | | +| array_flow.rb:1340:9:1340:9 | [post] a [element 1] | array_flow.rb:1345:10:1345:10 | a [element 1] | provenance | | +| array_flow.rb:1340:9:1340:9 | a [element 2] | array_flow.rb:1340:9:1340:21 | call to slice! [element 2] | provenance | | +| array_flow.rb:1340:9:1340:9 | a [element 4] | array_flow.rb:1340:9:1340:9 | [post] a [element 1] | provenance | | +| array_flow.rb:1340:9:1340:21 | call to slice! [element 2] | array_flow.rb:1340:5:1340:5 | b [element 2] | provenance | | +| array_flow.rb:1343:10:1343:10 | b [element 2] | array_flow.rb:1343:10:1343:13 | ...[...] | provenance | | +| array_flow.rb:1345:10:1345:10 | a [element 1] | array_flow.rb:1345:10:1345:13 | ...[...] | provenance | | +| array_flow.rb:1348:5:1348:5 | a [element 2] | array_flow.rb:1349:9:1349:9 | a [element 2] | provenance | | +| array_flow.rb:1348:5:1348:5 | a [element 4] | array_flow.rb:1349:9:1349:9 | a [element 4] | provenance | | +| array_flow.rb:1348:16:1348:28 | call to source | array_flow.rb:1348:5:1348:5 | a [element 2] | provenance | | +| array_flow.rb:1348:34:1348:46 | call to source | array_flow.rb:1348:5:1348:5 | a [element 4] | provenance | | +| array_flow.rb:1349:5:1349:5 | b [element] | array_flow.rb:1350:10:1350:10 | b [element] | provenance | | +| array_flow.rb:1349:5:1349:5 | b [element] | array_flow.rb:1351:10:1351:10 | b [element] | provenance | | +| array_flow.rb:1349:5:1349:5 | b [element] | array_flow.rb:1352:10:1352:10 | b [element] | provenance | | +| array_flow.rb:1349:9:1349:9 | [post] a [element] | array_flow.rb:1353:10:1353:10 | a [element] | provenance | | +| array_flow.rb:1349:9:1349:9 | [post] a [element] | array_flow.rb:1354:10:1354:10 | a [element] | provenance | | +| array_flow.rb:1349:9:1349:9 | [post] a [element] | array_flow.rb:1355:10:1355:10 | a [element] | provenance | | +| array_flow.rb:1349:9:1349:9 | a [element 2] | array_flow.rb:1349:9:1349:9 | [post] a [element] | provenance | | +| array_flow.rb:1349:9:1349:9 | a [element 2] | array_flow.rb:1349:9:1349:21 | call to slice! [element] | provenance | | +| array_flow.rb:1349:9:1349:9 | a [element 4] | array_flow.rb:1349:9:1349:9 | [post] a [element] | provenance | | +| array_flow.rb:1349:9:1349:9 | a [element 4] | array_flow.rb:1349:9:1349:21 | call to slice! [element] | provenance | | +| array_flow.rb:1349:9:1349:21 | call to slice! [element] | array_flow.rb:1349:5:1349:5 | b [element] | provenance | | +| array_flow.rb:1350:10:1350:10 | b [element] | array_flow.rb:1350:10:1350:13 | ...[...] | provenance | | +| array_flow.rb:1351:10:1351:10 | b [element] | array_flow.rb:1351:10:1351:13 | ...[...] | provenance | | +| array_flow.rb:1352:10:1352:10 | b [element] | array_flow.rb:1352:10:1352:13 | ...[...] | provenance | | +| array_flow.rb:1353:10:1353:10 | a [element] | array_flow.rb:1353:10:1353:13 | ...[...] | provenance | | +| array_flow.rb:1354:10:1354:10 | a [element] | array_flow.rb:1354:10:1354:13 | ...[...] | provenance | | +| array_flow.rb:1355:10:1355:10 | a [element] | array_flow.rb:1355:10:1355:13 | ...[...] | provenance | | +| array_flow.rb:1359:5:1359:5 | a [element 2] | array_flow.rb:1360:9:1360:9 | a [element 2] | provenance | | +| array_flow.rb:1359:16:1359:26 | call to source | array_flow.rb:1359:5:1359:5 | a [element 2] | provenance | | +| array_flow.rb:1360:9:1360:9 | a [element 2] | array_flow.rb:1360:27:1360:27 | x | provenance | | +| array_flow.rb:1360:27:1360:27 | x | array_flow.rb:1361:14:1361:14 | x | provenance | | +| array_flow.rb:1367:5:1367:5 | a [element 2] | array_flow.rb:1368:9:1368:9 | a [element 2] | provenance | | +| array_flow.rb:1367:16:1367:26 | call to source | array_flow.rb:1367:5:1367:5 | a [element 2] | provenance | | +| array_flow.rb:1368:9:1368:9 | a [element 2] | array_flow.rb:1368:28:1368:28 | x | provenance | | +| array_flow.rb:1368:28:1368:28 | x | array_flow.rb:1369:14:1369:14 | x | provenance | | +| array_flow.rb:1375:5:1375:5 | a [element 2] | array_flow.rb:1376:9:1376:9 | a [element 2] | provenance | | +| array_flow.rb:1375:16:1375:26 | call to source | array_flow.rb:1375:5:1375:5 | a [element 2] | provenance | | +| array_flow.rb:1376:9:1376:9 | a [element 2] | array_flow.rb:1376:26:1376:26 | x | provenance | | +| array_flow.rb:1376:9:1376:9 | a [element 2] | array_flow.rb:1376:29:1376:29 | y | provenance | | +| array_flow.rb:1376:26:1376:26 | x | array_flow.rb:1377:14:1377:14 | x | provenance | | +| array_flow.rb:1376:29:1376:29 | y | array_flow.rb:1378:14:1378:14 | y | provenance | | +| array_flow.rb:1383:5:1383:5 | a [element 2] | array_flow.rb:1384:9:1384:9 | a [element 2] | provenance | | +| array_flow.rb:1383:5:1383:5 | a [element 2] | array_flow.rb:1387:9:1387:9 | a [element 2] | provenance | | +| array_flow.rb:1383:16:1383:26 | call to source | array_flow.rb:1383:5:1383:5 | a [element 2] | provenance | | +| array_flow.rb:1384:5:1384:5 | b [element] | array_flow.rb:1385:10:1385:10 | b [element] | provenance | | +| array_flow.rb:1384:5:1384:5 | b [element] | array_flow.rb:1386:10:1386:10 | b [element] | provenance | | +| array_flow.rb:1384:9:1384:9 | a [element 2] | array_flow.rb:1384:9:1384:14 | call to sort [element] | provenance | | +| array_flow.rb:1384:9:1384:14 | call to sort [element] | array_flow.rb:1384:5:1384:5 | b [element] | provenance | | +| array_flow.rb:1385:10:1385:10 | b [element] | array_flow.rb:1385:10:1385:13 | ...[...] | provenance | | +| array_flow.rb:1386:10:1386:10 | b [element] | array_flow.rb:1386:10:1386:13 | ...[...] | provenance | | +| array_flow.rb:1387:5:1387:5 | c [element] | array_flow.rb:1392:10:1392:10 | c [element] | provenance | | +| array_flow.rb:1387:5:1387:5 | c [element] | array_flow.rb:1393:10:1393:10 | c [element] | provenance | | +| array_flow.rb:1387:9:1387:9 | a [element 2] | array_flow.rb:1387:9:1391:7 | call to sort [element] | provenance | | +| array_flow.rb:1387:9:1387:9 | a [element 2] | array_flow.rb:1387:20:1387:20 | x | provenance | | +| array_flow.rb:1387:9:1387:9 | a [element 2] | array_flow.rb:1387:23:1387:23 | y | provenance | | +| array_flow.rb:1387:9:1391:7 | call to sort [element] | array_flow.rb:1387:5:1387:5 | c [element] | provenance | | +| array_flow.rb:1387:20:1387:20 | x | array_flow.rb:1388:14:1388:14 | x | provenance | | +| array_flow.rb:1387:23:1387:23 | y | array_flow.rb:1389:14:1389:14 | y | provenance | | +| array_flow.rb:1392:10:1392:10 | c [element] | array_flow.rb:1392:10:1392:13 | ...[...] | provenance | | +| array_flow.rb:1393:10:1393:10 | c [element] | array_flow.rb:1393:10:1393:13 | ...[...] | provenance | | +| array_flow.rb:1397:5:1397:5 | a [element 2] | array_flow.rb:1398:9:1398:9 | a [element 2] | provenance | | +| array_flow.rb:1397:16:1397:26 | call to source | array_flow.rb:1397:5:1397:5 | a [element 2] | provenance | | +| array_flow.rb:1398:5:1398:5 | b [element] | array_flow.rb:1399:10:1399:10 | b [element] | provenance | | +| array_flow.rb:1398:5:1398:5 | b [element] | array_flow.rb:1400:10:1400:10 | b [element] | provenance | | +| array_flow.rb:1398:9:1398:9 | [post] a [element] | array_flow.rb:1401:10:1401:10 | a [element] | provenance | | +| array_flow.rb:1398:9:1398:9 | [post] a [element] | array_flow.rb:1402:10:1402:10 | a [element] | provenance | | +| array_flow.rb:1398:9:1398:9 | a [element 2] | array_flow.rb:1398:9:1398:9 | [post] a [element] | provenance | | +| array_flow.rb:1398:9:1398:9 | a [element 2] | array_flow.rb:1398:9:1398:15 | call to sort! [element] | provenance | | +| array_flow.rb:1398:9:1398:15 | call to sort! [element] | array_flow.rb:1398:5:1398:5 | b [element] | provenance | | +| array_flow.rb:1399:10:1399:10 | b [element] | array_flow.rb:1399:10:1399:13 | ...[...] | provenance | | +| array_flow.rb:1400:10:1400:10 | b [element] | array_flow.rb:1400:10:1400:13 | ...[...] | provenance | | +| array_flow.rb:1401:10:1401:10 | a [element] | array_flow.rb:1401:10:1401:13 | ...[...] | provenance | | +| array_flow.rb:1402:10:1402:10 | a [element] | array_flow.rb:1402:10:1402:13 | ...[...] | provenance | | +| array_flow.rb:1404:5:1404:5 | a [element 2] | array_flow.rb:1405:9:1405:9 | a [element 2] | provenance | | +| array_flow.rb:1404:16:1404:26 | call to source | array_flow.rb:1404:5:1404:5 | a [element 2] | provenance | | +| array_flow.rb:1405:5:1405:5 | b [element] | array_flow.rb:1410:10:1410:10 | b [element] | provenance | | +| array_flow.rb:1405:5:1405:5 | b [element] | array_flow.rb:1411:10:1411:10 | b [element] | provenance | | +| array_flow.rb:1405:9:1405:9 | [post] a [element] | array_flow.rb:1412:10:1412:10 | a [element] | provenance | | +| array_flow.rb:1405:9:1405:9 | [post] a [element] | array_flow.rb:1413:10:1413:10 | a [element] | provenance | | +| array_flow.rb:1405:9:1405:9 | a [element 2] | array_flow.rb:1405:9:1405:9 | [post] a [element] | provenance | | +| array_flow.rb:1405:9:1405:9 | a [element 2] | array_flow.rb:1405:9:1409:7 | call to sort! [element] | provenance | | +| array_flow.rb:1405:9:1405:9 | a [element 2] | array_flow.rb:1405:21:1405:21 | x | provenance | | +| array_flow.rb:1405:9:1405:9 | a [element 2] | array_flow.rb:1405:24:1405:24 | y | provenance | | +| array_flow.rb:1405:9:1409:7 | call to sort! [element] | array_flow.rb:1405:5:1405:5 | b [element] | provenance | | +| array_flow.rb:1405:21:1405:21 | x | array_flow.rb:1406:14:1406:14 | x | provenance | | +| array_flow.rb:1405:24:1405:24 | y | array_flow.rb:1407:14:1407:14 | y | provenance | | +| array_flow.rb:1410:10:1410:10 | b [element] | array_flow.rb:1410:10:1410:13 | ...[...] | provenance | | +| array_flow.rb:1411:10:1411:10 | b [element] | array_flow.rb:1411:10:1411:13 | ...[...] | provenance | | +| array_flow.rb:1412:10:1412:10 | a [element] | array_flow.rb:1412:10:1412:13 | ...[...] | provenance | | +| array_flow.rb:1413:10:1413:10 | a [element] | array_flow.rb:1413:10:1413:13 | ...[...] | provenance | | +| array_flow.rb:1417:5:1417:5 | a [element 2] | array_flow.rb:1418:9:1418:9 | a [element 2] | provenance | | +| array_flow.rb:1417:16:1417:26 | call to source | array_flow.rb:1417:5:1417:5 | a [element 2] | provenance | | +| array_flow.rb:1418:5:1418:5 | b [element] | array_flow.rb:1422:10:1422:10 | b [element] | provenance | | +| array_flow.rb:1418:5:1418:5 | b [element] | array_flow.rb:1423:10:1423:10 | b [element] | provenance | | +| array_flow.rb:1418:9:1418:9 | a [element 2] | array_flow.rb:1418:9:1421:7 | call to sort_by [element] | provenance | | +| array_flow.rb:1418:9:1418:9 | a [element 2] | array_flow.rb:1418:23:1418:23 | x | provenance | | +| array_flow.rb:1418:9:1421:7 | call to sort_by [element] | array_flow.rb:1418:5:1418:5 | b [element] | provenance | | +| array_flow.rb:1418:23:1418:23 | x | array_flow.rb:1419:14:1419:14 | x | provenance | | +| array_flow.rb:1422:10:1422:10 | b [element] | array_flow.rb:1422:10:1422:13 | ...[...] | provenance | | +| array_flow.rb:1423:10:1423:10 | b [element] | array_flow.rb:1423:10:1423:13 | ...[...] | provenance | | +| array_flow.rb:1427:5:1427:5 | a [element 2] | array_flow.rb:1428:9:1428:9 | a [element 2] | provenance | | +| array_flow.rb:1427:16:1427:26 | call to source | array_flow.rb:1427:5:1427:5 | a [element 2] | provenance | | +| array_flow.rb:1428:5:1428:5 | b [element] | array_flow.rb:1434:10:1434:10 | b [element] | provenance | | +| array_flow.rb:1428:5:1428:5 | b [element] | array_flow.rb:1435:10:1435:10 | b [element] | provenance | | +| array_flow.rb:1428:9:1428:9 | [post] a [element] | array_flow.rb:1432:10:1432:10 | a [element] | provenance | | +| array_flow.rb:1428:9:1428:9 | [post] a [element] | array_flow.rb:1433:10:1433:10 | a [element] | provenance | | +| array_flow.rb:1428:9:1428:9 | a [element 2] | array_flow.rb:1428:9:1428:9 | [post] a [element] | provenance | | +| array_flow.rb:1428:9:1428:9 | a [element 2] | array_flow.rb:1428:9:1431:7 | call to sort_by! [element] | provenance | | +| array_flow.rb:1428:9:1428:9 | a [element 2] | array_flow.rb:1428:24:1428:24 | x | provenance | | +| array_flow.rb:1428:9:1431:7 | call to sort_by! [element] | array_flow.rb:1428:5:1428:5 | b [element] | provenance | | +| array_flow.rb:1428:24:1428:24 | x | array_flow.rb:1429:14:1429:14 | x | provenance | | +| array_flow.rb:1432:10:1432:10 | a [element] | array_flow.rb:1432:10:1432:13 | ...[...] | provenance | | +| array_flow.rb:1433:10:1433:10 | a [element] | array_flow.rb:1433:10:1433:13 | ...[...] | provenance | | +| array_flow.rb:1434:10:1434:10 | b [element] | array_flow.rb:1434:10:1434:13 | ...[...] | provenance | | +| array_flow.rb:1435:10:1435:10 | b [element] | array_flow.rb:1435:10:1435:13 | ...[...] | provenance | | +| array_flow.rb:1439:5:1439:5 | a [element 2] | array_flow.rb:1440:9:1440:9 | a [element 2] | provenance | | +| array_flow.rb:1439:16:1439:26 | call to source | array_flow.rb:1439:5:1439:5 | a [element 2] | provenance | | +| array_flow.rb:1440:9:1440:9 | a [element 2] | array_flow.rb:1440:19:1440:19 | x | provenance | | +| array_flow.rb:1440:19:1440:19 | x | array_flow.rb:1441:14:1441:14 | x | provenance | | +| array_flow.rb:1447:5:1447:5 | a [element 2] | array_flow.rb:1448:9:1448:9 | a [element 2] | provenance | | +| array_flow.rb:1447:5:1447:5 | a [element 2] | array_flow.rb:1453:9:1453:9 | a [element 2] | provenance | | +| array_flow.rb:1447:5:1447:5 | a [element 2] | array_flow.rb:1459:9:1459:9 | a [element 2] | provenance | | +| array_flow.rb:1447:5:1447:5 | a [element 2] | array_flow.rb:1466:9:1466:9 | a [element 2] | provenance | | +| array_flow.rb:1447:5:1447:5 | a [element 3] | array_flow.rb:1448:9:1448:9 | a [element 3] | provenance | | +| array_flow.rb:1447:5:1447:5 | a [element 3] | array_flow.rb:1459:9:1459:9 | a [element 3] | provenance | | +| array_flow.rb:1447:16:1447:28 | call to source | array_flow.rb:1447:5:1447:5 | a [element 2] | provenance | | +| array_flow.rb:1447:31:1447:43 | call to source | array_flow.rb:1447:5:1447:5 | a [element 3] | provenance | | +| array_flow.rb:1448:5:1448:5 | b [element 2] | array_flow.rb:1451:10:1451:10 | b [element 2] | provenance | | +| array_flow.rb:1448:5:1448:5 | b [element 3] | array_flow.rb:1452:10:1452:10 | b [element 3] | provenance | | +| array_flow.rb:1448:9:1448:9 | a [element 2] | array_flow.rb:1448:9:1448:17 | call to take [element 2] | provenance | | +| array_flow.rb:1448:9:1448:9 | a [element 3] | array_flow.rb:1448:9:1448:17 | call to take [element 3] | provenance | | +| array_flow.rb:1448:9:1448:17 | call to take [element 2] | array_flow.rb:1448:5:1448:5 | b [element 2] | provenance | | +| array_flow.rb:1448:9:1448:17 | call to take [element 3] | array_flow.rb:1448:5:1448:5 | b [element 3] | provenance | | +| array_flow.rb:1451:10:1451:10 | b [element 2] | array_flow.rb:1451:10:1451:13 | ...[...] | provenance | | +| array_flow.rb:1452:10:1452:10 | b [element 3] | array_flow.rb:1452:10:1452:13 | ...[...] | provenance | | +| array_flow.rb:1453:5:1453:5 | b [element 2] | array_flow.rb:1456:10:1456:10 | b [element 2] | provenance | | +| array_flow.rb:1453:5:1453:5 | b [element 2] | array_flow.rb:1458:10:1458:10 | b [element 2] | provenance | | +| array_flow.rb:1453:9:1453:9 | a [element 2] | array_flow.rb:1453:9:1453:17 | call to take [element 2] | provenance | | +| array_flow.rb:1453:9:1453:17 | call to take [element 2] | array_flow.rb:1453:5:1453:5 | b [element 2] | provenance | | +| array_flow.rb:1456:10:1456:10 | b [element 2] | array_flow.rb:1456:10:1456:13 | ...[...] | provenance | | +| array_flow.rb:1458:10:1458:10 | b [element 2] | array_flow.rb:1458:10:1458:13 | ...[...] | provenance | | +| array_flow.rb:1459:5:1459:5 | b [element 2] | array_flow.rb:1462:10:1462:10 | b [element 2] | provenance | | +| array_flow.rb:1459:5:1459:5 | b [element 2] | array_flow.rb:1464:10:1464:10 | b [element 2] | provenance | | +| array_flow.rb:1459:5:1459:5 | b [element 3] | array_flow.rb:1463:10:1463:10 | b [element 3] | provenance | | +| array_flow.rb:1459:5:1459:5 | b [element 3] | array_flow.rb:1464:10:1464:10 | b [element 3] | provenance | | +| array_flow.rb:1459:9:1459:9 | a [element 2] | array_flow.rb:1459:9:1459:19 | call to take [element 2] | provenance | | +| array_flow.rb:1459:9:1459:9 | a [element 3] | array_flow.rb:1459:9:1459:19 | call to take [element 3] | provenance | | +| array_flow.rb:1459:9:1459:19 | call to take [element 2] | array_flow.rb:1459:5:1459:5 | b [element 2] | provenance | | +| array_flow.rb:1459:9:1459:19 | call to take [element 3] | array_flow.rb:1459:5:1459:5 | b [element 3] | provenance | | +| array_flow.rb:1462:10:1462:10 | b [element 2] | array_flow.rb:1462:10:1462:13 | ...[...] | provenance | | +| array_flow.rb:1463:10:1463:10 | b [element 3] | array_flow.rb:1463:10:1463:13 | ...[...] | provenance | | +| array_flow.rb:1464:10:1464:10 | b [element 2] | array_flow.rb:1464:10:1464:13 | ...[...] | provenance | | +| array_flow.rb:1464:10:1464:10 | b [element 3] | array_flow.rb:1464:10:1464:13 | ...[...] | provenance | | +| array_flow.rb:1465:5:1465:5 | [post] a [element] | array_flow.rb:1466:9:1466:9 | a [element] | provenance | | +| array_flow.rb:1465:12:1465:24 | call to source | array_flow.rb:1465:5:1465:5 | [post] a [element] | provenance | | +| array_flow.rb:1466:5:1466:5 | b [element 2] | array_flow.rb:1467:10:1467:10 | b [element 2] | provenance | | +| array_flow.rb:1466:5:1466:5 | b [element] | array_flow.rb:1467:10:1467:10 | b [element] | provenance | | +| array_flow.rb:1466:9:1466:9 | a [element 2] | array_flow.rb:1466:9:1466:17 | call to take [element 2] | provenance | | +| array_flow.rb:1466:9:1466:9 | a [element] | array_flow.rb:1466:9:1466:17 | call to take [element] | provenance | | +| array_flow.rb:1466:9:1466:17 | call to take [element 2] | array_flow.rb:1466:5:1466:5 | b [element 2] | provenance | | +| array_flow.rb:1466:9:1466:17 | call to take [element] | array_flow.rb:1466:5:1466:5 | b [element] | provenance | | +| array_flow.rb:1467:10:1467:10 | b [element 2] | array_flow.rb:1467:10:1467:13 | ...[...] | provenance | | +| array_flow.rb:1467:10:1467:10 | b [element] | array_flow.rb:1467:10:1467:13 | ...[...] | provenance | | +| array_flow.rb:1471:5:1471:5 | a [element 2] | array_flow.rb:1472:9:1472:9 | a [element 2] | provenance | | +| array_flow.rb:1471:16:1471:26 | call to source | array_flow.rb:1471:5:1471:5 | a [element 2] | provenance | | +| array_flow.rb:1472:5:1472:5 | b [element 2] | array_flow.rb:1478:10:1478:10 | b [element 2] | provenance | | +| array_flow.rb:1472:9:1472:9 | a [element 2] | array_flow.rb:1472:9:1475:7 | call to take_while [element 2] | provenance | | +| array_flow.rb:1472:9:1472:9 | a [element 2] | array_flow.rb:1472:26:1472:26 | x | provenance | | +| array_flow.rb:1472:9:1475:7 | call to take_while [element 2] | array_flow.rb:1472:5:1472:5 | b [element 2] | provenance | | +| array_flow.rb:1472:26:1472:26 | x | array_flow.rb:1473:14:1473:14 | x | provenance | | +| array_flow.rb:1478:10:1478:10 | b [element 2] | array_flow.rb:1478:10:1478:13 | ...[...] | provenance | | +| array_flow.rb:1484:5:1484:5 | a [element 3] | array_flow.rb:1485:9:1485:9 | a [element 3] | provenance | | +| array_flow.rb:1484:19:1484:29 | call to source | array_flow.rb:1484:5:1484:5 | a [element 3] | provenance | | +| array_flow.rb:1485:5:1485:5 | b [element 3] | array_flow.rb:1486:10:1486:10 | b [element 3] | provenance | | +| array_flow.rb:1485:9:1485:9 | a [element 3] | array_flow.rb:1485:9:1485:14 | call to to_a [element 3] | provenance | | +| array_flow.rb:1485:9:1485:14 | call to to_a [element 3] | array_flow.rb:1485:5:1485:5 | b [element 3] | provenance | | +| array_flow.rb:1486:10:1486:10 | b [element 3] | array_flow.rb:1486:10:1486:13 | ...[...] | provenance | | +| array_flow.rb:1490:5:1490:5 | a [element 2] | array_flow.rb:1491:9:1491:9 | a [element 2] | provenance | | +| array_flow.rb:1490:16:1490:26 | call to source | array_flow.rb:1490:5:1490:5 | a [element 2] | provenance | | +| array_flow.rb:1491:5:1491:5 | b [element 2] | array_flow.rb:1494:10:1494:10 | b [element 2] | provenance | | +| array_flow.rb:1491:9:1491:9 | a [element 2] | array_flow.rb:1491:9:1491:16 | call to to_ary [element 2] | provenance | | +| array_flow.rb:1491:9:1491:16 | call to to_ary [element 2] | array_flow.rb:1491:5:1491:5 | b [element 2] | provenance | | +| array_flow.rb:1494:10:1494:10 | b [element 2] | array_flow.rb:1494:10:1494:13 | ...[...] | provenance | | +| array_flow.rb:1507:5:1507:5 | a [element 0, element 1] | array_flow.rb:1508:9:1508:9 | a [element 0, element 1] | provenance | | +| array_flow.rb:1507:5:1507:5 | a [element 1, element 1] | array_flow.rb:1508:9:1508:9 | a [element 1, element 1] | provenance | | +| array_flow.rb:1507:5:1507:5 | a [element 2, element 1] | array_flow.rb:1508:9:1508:9 | a [element 2, element 1] | provenance | | +| array_flow.rb:1507:14:1507:26 | call to source | array_flow.rb:1507:5:1507:5 | a [element 0, element 1] | provenance | | +| array_flow.rb:1507:34:1507:46 | call to source | array_flow.rb:1507:5:1507:5 | a [element 1, element 1] | provenance | | +| array_flow.rb:1507:54:1507:66 | call to source | array_flow.rb:1507:5:1507:5 | a [element 2, element 1] | provenance | | +| array_flow.rb:1508:5:1508:5 | b [element 1, element 0] | array_flow.rb:1512:10:1512:10 | b [element 1, element 0] | provenance | | +| array_flow.rb:1508:5:1508:5 | b [element 1, element 1] | array_flow.rb:1513:10:1513:10 | b [element 1, element 1] | provenance | | +| array_flow.rb:1508:5:1508:5 | b [element 1, element 2] | array_flow.rb:1514:10:1514:10 | b [element 1, element 2] | provenance | | +| array_flow.rb:1508:9:1508:9 | a [element 0, element 1] | array_flow.rb:1508:9:1508:19 | call to transpose [element 1, element 0] | provenance | | +| array_flow.rb:1508:9:1508:9 | a [element 1, element 1] | array_flow.rb:1508:9:1508:19 | call to transpose [element 1, element 1] | provenance | | +| array_flow.rb:1508:9:1508:9 | a [element 2, element 1] | array_flow.rb:1508:9:1508:19 | call to transpose [element 1, element 2] | provenance | | +| array_flow.rb:1508:9:1508:19 | call to transpose [element 1, element 0] | array_flow.rb:1508:5:1508:5 | b [element 1, element 0] | provenance | | +| array_flow.rb:1508:9:1508:19 | call to transpose [element 1, element 1] | array_flow.rb:1508:5:1508:5 | b [element 1, element 1] | provenance | | +| array_flow.rb:1508:9:1508:19 | call to transpose [element 1, element 2] | array_flow.rb:1508:5:1508:5 | b [element 1, element 2] | provenance | | +| array_flow.rb:1512:10:1512:10 | b [element 1, element 0] | array_flow.rb:1512:10:1512:13 | ...[...] [element 0] | provenance | | +| array_flow.rb:1512:10:1512:13 | ...[...] [element 0] | array_flow.rb:1512:10:1512:16 | ...[...] | provenance | | +| array_flow.rb:1513:10:1513:10 | b [element 1, element 1] | array_flow.rb:1513:10:1513:13 | ...[...] [element 1] | provenance | | +| array_flow.rb:1513:10:1513:13 | ...[...] [element 1] | array_flow.rb:1513:10:1513:16 | ...[...] | provenance | | +| array_flow.rb:1514:10:1514:10 | b [element 1, element 2] | array_flow.rb:1514:10:1514:13 | ...[...] [element 2] | provenance | | +| array_flow.rb:1514:10:1514:13 | ...[...] [element 2] | array_flow.rb:1514:10:1514:16 | ...[...] | provenance | | +| array_flow.rb:1518:5:1518:5 | a [element 2] | array_flow.rb:1521:9:1521:9 | a [element 2] | provenance | | +| array_flow.rb:1518:16:1518:28 | call to source | array_flow.rb:1518:5:1518:5 | a [element 2] | provenance | | +| array_flow.rb:1519:5:1519:5 | b [element 1] | array_flow.rb:1521:17:1521:17 | b [element 1] | provenance | | +| array_flow.rb:1519:13:1519:25 | call to source | array_flow.rb:1519:5:1519:5 | b [element 1] | provenance | | +| array_flow.rb:1520:5:1520:5 | c [element 1] | array_flow.rb:1521:20:1521:20 | c [element 1] | provenance | | +| array_flow.rb:1520:13:1520:25 | call to source | array_flow.rb:1520:5:1520:5 | c [element 1] | provenance | | +| array_flow.rb:1521:5:1521:5 | d [element] | array_flow.rb:1522:10:1522:10 | d [element] | provenance | | +| array_flow.rb:1521:5:1521:5 | d [element] | array_flow.rb:1523:10:1523:10 | d [element] | provenance | | +| array_flow.rb:1521:5:1521:5 | d [element] | array_flow.rb:1524:10:1524:10 | d [element] | provenance | | +| array_flow.rb:1521:9:1521:9 | a [element 2] | array_flow.rb:1521:9:1521:21 | call to union [element] | provenance | | +| array_flow.rb:1521:9:1521:21 | call to union [element] | array_flow.rb:1521:5:1521:5 | d [element] | provenance | | +| array_flow.rb:1521:17:1521:17 | b [element 1] | array_flow.rb:1521:9:1521:21 | call to union [element] | provenance | | +| array_flow.rb:1521:20:1521:20 | c [element 1] | array_flow.rb:1521:9:1521:21 | call to union [element] | provenance | | +| array_flow.rb:1522:10:1522:10 | d [element] | array_flow.rb:1522:10:1522:13 | ...[...] | provenance | | +| array_flow.rb:1523:10:1523:10 | d [element] | array_flow.rb:1523:10:1523:13 | ...[...] | provenance | | +| array_flow.rb:1524:10:1524:10 | d [element] | array_flow.rb:1524:10:1524:13 | ...[...] | provenance | | +| array_flow.rb:1528:5:1528:5 | a [element 3] | array_flow.rb:1530:9:1530:9 | a [element 3] | provenance | | +| array_flow.rb:1528:5:1528:5 | a [element 3] | array_flow.rb:1534:9:1534:9 | a [element 3] | provenance | | +| array_flow.rb:1528:5:1528:5 | a [element 4] | array_flow.rb:1530:9:1530:9 | a [element 4] | provenance | | +| array_flow.rb:1528:5:1528:5 | a [element 4] | array_flow.rb:1534:9:1534:9 | a [element 4] | provenance | | +| array_flow.rb:1528:19:1528:31 | call to source | array_flow.rb:1528:5:1528:5 | a [element 3] | provenance | | +| array_flow.rb:1528:34:1528:46 | call to source | array_flow.rb:1528:5:1528:5 | a [element 4] | provenance | | +| array_flow.rb:1530:5:1530:5 | b [element] | array_flow.rb:1531:10:1531:10 | b [element] | provenance | | +| array_flow.rb:1530:5:1530:5 | b [element] | array_flow.rb:1532:10:1532:10 | b [element] | provenance | | +| array_flow.rb:1530:9:1530:9 | a [element 3] | array_flow.rb:1530:9:1530:14 | call to uniq [element] | provenance | | +| array_flow.rb:1530:9:1530:9 | a [element 4] | array_flow.rb:1530:9:1530:14 | call to uniq [element] | provenance | | +| array_flow.rb:1530:9:1530:14 | call to uniq [element] | array_flow.rb:1530:5:1530:5 | b [element] | provenance | | +| array_flow.rb:1531:10:1531:10 | b [element] | array_flow.rb:1531:10:1531:13 | ...[...] | provenance | | +| array_flow.rb:1532:10:1532:10 | b [element] | array_flow.rb:1532:10:1532:13 | ...[...] | provenance | | +| array_flow.rb:1534:5:1534:5 | c [element] | array_flow.rb:1538:10:1538:10 | c [element] | provenance | | +| array_flow.rb:1534:9:1534:9 | a [element 3] | array_flow.rb:1534:9:1537:7 | call to uniq [element] | provenance | | +| array_flow.rb:1534:9:1534:9 | a [element 3] | array_flow.rb:1534:20:1534:20 | x | provenance | | +| array_flow.rb:1534:9:1534:9 | a [element 4] | array_flow.rb:1534:9:1537:7 | call to uniq [element] | provenance | | +| array_flow.rb:1534:9:1534:9 | a [element 4] | array_flow.rb:1534:20:1534:20 | x | provenance | | +| array_flow.rb:1534:9:1537:7 | call to uniq [element] | array_flow.rb:1534:5:1534:5 | c [element] | provenance | | +| array_flow.rb:1534:20:1534:20 | x | array_flow.rb:1535:14:1535:14 | x | provenance | | +| array_flow.rb:1538:10:1538:10 | c [element] | array_flow.rb:1538:10:1538:13 | ...[...] | provenance | | +| array_flow.rb:1542:5:1542:5 | a [element 2] | array_flow.rb:1543:9:1543:9 | a [element 2] | provenance | | +| array_flow.rb:1542:5:1542:5 | a [element 3] | array_flow.rb:1543:9:1543:9 | a [element 3] | provenance | | +| array_flow.rb:1542:16:1542:28 | call to source | array_flow.rb:1542:5:1542:5 | a [element 2] | provenance | | +| array_flow.rb:1542:31:1542:43 | call to source | array_flow.rb:1542:5:1542:5 | a [element 3] | provenance | | +| array_flow.rb:1543:5:1543:5 | b [element] | array_flow.rb:1544:10:1544:10 | b [element] | provenance | | +| array_flow.rb:1543:5:1543:5 | b [element] | array_flow.rb:1545:10:1545:10 | b [element] | provenance | | +| array_flow.rb:1543:9:1543:9 | [post] a [element] | array_flow.rb:1546:10:1546:10 | a [element] | provenance | | +| array_flow.rb:1543:9:1543:9 | [post] a [element] | array_flow.rb:1547:10:1547:10 | a [element] | provenance | | +| array_flow.rb:1543:9:1543:9 | a [element 2] | array_flow.rb:1543:9:1543:9 | [post] a [element] | provenance | | +| array_flow.rb:1543:9:1543:9 | a [element 2] | array_flow.rb:1543:9:1543:15 | call to uniq! [element] | provenance | | +| array_flow.rb:1543:9:1543:9 | a [element 3] | array_flow.rb:1543:9:1543:9 | [post] a [element] | provenance | | +| array_flow.rb:1543:9:1543:9 | a [element 3] | array_flow.rb:1543:9:1543:15 | call to uniq! [element] | provenance | | +| array_flow.rb:1543:9:1543:15 | call to uniq! [element] | array_flow.rb:1543:5:1543:5 | b [element] | provenance | | +| array_flow.rb:1544:10:1544:10 | b [element] | array_flow.rb:1544:10:1544:13 | ...[...] | provenance | | +| array_flow.rb:1545:10:1545:10 | b [element] | array_flow.rb:1545:10:1545:13 | ...[...] | provenance | | +| array_flow.rb:1546:10:1546:10 | a [element] | array_flow.rb:1546:10:1546:13 | ...[...] | provenance | | +| array_flow.rb:1547:10:1547:10 | a [element] | array_flow.rb:1547:10:1547:13 | ...[...] | provenance | | +| array_flow.rb:1549:5:1549:5 | a [element 2] | array_flow.rb:1550:9:1550:9 | a [element 2] | provenance | | +| array_flow.rb:1549:5:1549:5 | a [element 3] | array_flow.rb:1550:9:1550:9 | a [element 3] | provenance | | +| array_flow.rb:1549:16:1549:28 | call to source | array_flow.rb:1549:5:1549:5 | a [element 2] | provenance | | +| array_flow.rb:1549:31:1549:43 | call to source | array_flow.rb:1549:5:1549:5 | a [element 3] | provenance | | +| array_flow.rb:1550:5:1550:5 | b [element] | array_flow.rb:1554:10:1554:10 | b [element] | provenance | | +| array_flow.rb:1550:5:1550:5 | b [element] | array_flow.rb:1555:10:1555:10 | b [element] | provenance | | +| array_flow.rb:1550:9:1550:9 | [post] a [element] | array_flow.rb:1556:10:1556:10 | a [element] | provenance | | +| array_flow.rb:1550:9:1550:9 | [post] a [element] | array_flow.rb:1557:10:1557:10 | a [element] | provenance | | +| array_flow.rb:1550:9:1550:9 | a [element 2] | array_flow.rb:1550:9:1550:9 | [post] a [element] | provenance | | +| array_flow.rb:1550:9:1550:9 | a [element 2] | array_flow.rb:1550:9:1553:7 | call to uniq! [element] | provenance | | +| array_flow.rb:1550:9:1550:9 | a [element 2] | array_flow.rb:1550:21:1550:21 | x | provenance | | +| array_flow.rb:1550:9:1550:9 | a [element 3] | array_flow.rb:1550:9:1550:9 | [post] a [element] | provenance | | +| array_flow.rb:1550:9:1550:9 | a [element 3] | array_flow.rb:1550:9:1553:7 | call to uniq! [element] | provenance | | +| array_flow.rb:1550:9:1550:9 | a [element 3] | array_flow.rb:1550:21:1550:21 | x | provenance | | +| array_flow.rb:1550:9:1553:7 | call to uniq! [element] | array_flow.rb:1550:5:1550:5 | b [element] | provenance | | +| array_flow.rb:1550:21:1550:21 | x | array_flow.rb:1551:14:1551:14 | x | provenance | | +| array_flow.rb:1554:10:1554:10 | b [element] | array_flow.rb:1554:10:1554:13 | ...[...] | provenance | | +| array_flow.rb:1555:10:1555:10 | b [element] | array_flow.rb:1555:10:1555:13 | ...[...] | provenance | | +| array_flow.rb:1556:10:1556:10 | a [element] | array_flow.rb:1556:10:1556:13 | ...[...] | provenance | | +| array_flow.rb:1557:10:1557:10 | a [element] | array_flow.rb:1557:10:1557:13 | ...[...] | provenance | | +| array_flow.rb:1561:5:1561:5 | a [element 2] | array_flow.rb:1562:5:1562:5 | a [element 2] | provenance | | +| array_flow.rb:1561:16:1561:28 | call to source | array_flow.rb:1561:5:1561:5 | a [element 2] | provenance | | +| array_flow.rb:1562:5:1562:5 | [post] a [element 2] | array_flow.rb:1565:10:1565:10 | a [element 2] | provenance | | +| array_flow.rb:1562:5:1562:5 | [post] a [element 5] | array_flow.rb:1568:10:1568:10 | a [element 5] | provenance | | +| array_flow.rb:1562:5:1562:5 | a [element 2] | array_flow.rb:1562:5:1562:5 | [post] a [element 5] | provenance | | +| array_flow.rb:1562:21:1562:33 | call to source | array_flow.rb:1562:5:1562:5 | [post] a [element 2] | provenance | | +| array_flow.rb:1565:10:1565:10 | a [element 2] | array_flow.rb:1565:10:1565:13 | ...[...] | provenance | | +| array_flow.rb:1568:10:1568:10 | a [element 5] | array_flow.rb:1568:10:1568:13 | ...[...] | provenance | | +| array_flow.rb:1572:5:1572:5 | a [element 1] | array_flow.rb:1574:9:1574:9 | a [element 1] | provenance | | +| array_flow.rb:1572:5:1572:5 | a [element 1] | array_flow.rb:1580:9:1580:9 | a [element 1] | provenance | | +| array_flow.rb:1572:5:1572:5 | a [element 1] | array_flow.rb:1584:9:1584:9 | a [element 1] | provenance | | +| array_flow.rb:1572:5:1572:5 | a [element 1] | array_flow.rb:1588:9:1588:9 | a [element 1] | provenance | | +| array_flow.rb:1572:5:1572:5 | a [element 3] | array_flow.rb:1580:9:1580:9 | a [element 3] | provenance | | +| array_flow.rb:1572:5:1572:5 | a [element 3] | array_flow.rb:1584:9:1584:9 | a [element 3] | provenance | | +| array_flow.rb:1572:5:1572:5 | a [element 3] | array_flow.rb:1588:9:1588:9 | a [element 3] | provenance | | +| array_flow.rb:1572:13:1572:25 | call to source | array_flow.rb:1572:5:1572:5 | a [element 1] | provenance | | +| array_flow.rb:1572:31:1572:43 | call to source | array_flow.rb:1572:5:1572:5 | a [element 3] | provenance | | +| array_flow.rb:1574:5:1574:5 | b [element 1] | array_flow.rb:1576:10:1576:10 | b [element 1] | provenance | | +| array_flow.rb:1574:5:1574:5 | b [element 3] | array_flow.rb:1578:10:1578:10 | b [element 3] | provenance | | +| array_flow.rb:1574:9:1574:9 | a [element 1] | array_flow.rb:1574:9:1574:31 | call to values_at [element 1] | provenance | | +| array_flow.rb:1574:9:1574:9 | a [element 1] | array_flow.rb:1574:9:1574:31 | call to values_at [element 3] | provenance | | +| array_flow.rb:1574:9:1574:31 | call to values_at [element 1] | array_flow.rb:1574:5:1574:5 | b [element 1] | provenance | | +| array_flow.rb:1574:9:1574:31 | call to values_at [element 3] | array_flow.rb:1574:5:1574:5 | b [element 3] | provenance | | +| array_flow.rb:1576:10:1576:10 | b [element 1] | array_flow.rb:1576:10:1576:13 | ...[...] | provenance | | +| array_flow.rb:1578:10:1578:10 | b [element 3] | array_flow.rb:1578:10:1578:13 | ...[...] | provenance | | +| array_flow.rb:1580:5:1580:5 | b [element] | array_flow.rb:1581:10:1581:10 | b [element] | provenance | | +| array_flow.rb:1580:5:1580:5 | b [element] | array_flow.rb:1582:10:1582:10 | b [element] | provenance | | +| array_flow.rb:1580:9:1580:9 | a [element 1] | array_flow.rb:1580:9:1580:25 | call to values_at [element] | provenance | | +| array_flow.rb:1580:9:1580:9 | a [element 3] | array_flow.rb:1580:9:1580:25 | call to values_at [element] | provenance | | +| array_flow.rb:1580:9:1580:25 | call to values_at [element] | array_flow.rb:1580:5:1580:5 | b [element] | provenance | | +| array_flow.rb:1581:10:1581:10 | b [element] | array_flow.rb:1581:10:1581:13 | ...[...] | provenance | | +| array_flow.rb:1582:10:1582:10 | b [element] | array_flow.rb:1582:10:1582:13 | ...[...] | provenance | | +| array_flow.rb:1584:5:1584:5 | b [element] | array_flow.rb:1585:10:1585:10 | b [element] | provenance | | +| array_flow.rb:1584:5:1584:5 | b [element] | array_flow.rb:1586:10:1586:10 | b [element] | provenance | | +| array_flow.rb:1584:9:1584:9 | a [element 1] | array_flow.rb:1584:9:1584:26 | call to values_at [element] | provenance | | +| array_flow.rb:1584:9:1584:9 | a [element 3] | array_flow.rb:1584:9:1584:26 | call to values_at [element] | provenance | | +| array_flow.rb:1584:9:1584:26 | call to values_at [element] | array_flow.rb:1584:5:1584:5 | b [element] | provenance | | +| array_flow.rb:1585:10:1585:10 | b [element] | array_flow.rb:1585:10:1585:13 | ...[...] | provenance | | +| array_flow.rb:1586:10:1586:10 | b [element] | array_flow.rb:1586:10:1586:13 | ...[...] | provenance | | +| array_flow.rb:1588:5:1588:5 | b [element 1] | array_flow.rb:1590:10:1590:10 | b [element 1] | provenance | | +| array_flow.rb:1588:5:1588:5 | b [element] | array_flow.rb:1589:10:1589:10 | b [element] | provenance | | +| array_flow.rb:1588:5:1588:5 | b [element] | array_flow.rb:1590:10:1590:10 | b [element] | provenance | | +| array_flow.rb:1588:5:1588:5 | b [element] | array_flow.rb:1591:10:1591:10 | b [element] | provenance | | +| array_flow.rb:1588:5:1588:5 | b [element] | array_flow.rb:1592:10:1592:10 | b [element] | provenance | | +| array_flow.rb:1588:9:1588:9 | a [element 1] | array_flow.rb:1588:9:1588:28 | call to values_at [element] | provenance | | +| array_flow.rb:1588:9:1588:9 | a [element 3] | array_flow.rb:1588:9:1588:28 | call to values_at [element 1] | provenance | | +| array_flow.rb:1588:9:1588:9 | a [element 3] | array_flow.rb:1588:9:1588:28 | call to values_at [element] | provenance | | +| array_flow.rb:1588:9:1588:28 | call to values_at [element 1] | array_flow.rb:1588:5:1588:5 | b [element 1] | provenance | | +| array_flow.rb:1588:9:1588:28 | call to values_at [element] | array_flow.rb:1588:5:1588:5 | b [element] | provenance | | +| array_flow.rb:1589:10:1589:10 | b [element] | array_flow.rb:1589:10:1589:13 | ...[...] | provenance | | +| array_flow.rb:1590:10:1590:10 | b [element 1] | array_flow.rb:1590:10:1590:13 | ...[...] | provenance | | +| array_flow.rb:1590:10:1590:10 | b [element] | array_flow.rb:1590:10:1590:13 | ...[...] | provenance | | +| array_flow.rb:1591:10:1591:10 | b [element] | array_flow.rb:1591:10:1591:13 | ...[...] | provenance | | +| array_flow.rb:1592:10:1592:10 | b [element] | array_flow.rb:1592:10:1592:13 | ...[...] | provenance | | +| array_flow.rb:1596:5:1596:5 | a [element 2] | array_flow.rb:1599:9:1599:9 | a [element 2] | provenance | | +| array_flow.rb:1596:5:1596:5 | a [element 2] | array_flow.rb:1604:5:1604:5 | a [element 2] | provenance | | +| array_flow.rb:1596:16:1596:28 | call to source | array_flow.rb:1596:5:1596:5 | a [element 2] | provenance | | +| array_flow.rb:1597:5:1597:5 | b [element 1] | array_flow.rb:1599:15:1599:15 | b [element 1] | provenance | | +| array_flow.rb:1597:5:1597:5 | b [element 1] | array_flow.rb:1604:11:1604:11 | b [element 1] | provenance | | +| array_flow.rb:1597:13:1597:25 | call to source | array_flow.rb:1597:5:1597:5 | b [element 1] | provenance | | +| array_flow.rb:1598:5:1598:5 | c [element 0] | array_flow.rb:1599:18:1599:18 | c [element 0] | provenance | | +| array_flow.rb:1598:5:1598:5 | c [element 0] | array_flow.rb:1604:14:1604:14 | c [element 0] | provenance | | +| array_flow.rb:1598:10:1598:22 | call to source | array_flow.rb:1598:5:1598:5 | c [element 0] | provenance | | +| array_flow.rb:1599:5:1599:5 | d [element 0, element 2] | array_flow.rb:1601:10:1601:10 | d [element 0, element 2] | provenance | | +| array_flow.rb:1599:5:1599:5 | d [element 1, element 1] | array_flow.rb:1602:10:1602:10 | d [element 1, element 1] | provenance | | +| array_flow.rb:1599:5:1599:5 | d [element 2, element 0] | array_flow.rb:1603:10:1603:10 | d [element 2, element 0] | provenance | | +| array_flow.rb:1599:9:1599:9 | a [element 2] | array_flow.rb:1599:9:1599:19 | call to zip [element 2, element 0] | provenance | | +| array_flow.rb:1599:9:1599:19 | call to zip [element 0, element 2] | array_flow.rb:1599:5:1599:5 | d [element 0, element 2] | provenance | | +| array_flow.rb:1599:9:1599:19 | call to zip [element 1, element 1] | array_flow.rb:1599:5:1599:5 | d [element 1, element 1] | provenance | | +| array_flow.rb:1599:9:1599:19 | call to zip [element 2, element 0] | array_flow.rb:1599:5:1599:5 | d [element 2, element 0] | provenance | | +| array_flow.rb:1599:15:1599:15 | b [element 1] | array_flow.rb:1599:9:1599:19 | call to zip [element 1, element 1] | provenance | | +| array_flow.rb:1599:18:1599:18 | c [element 0] | array_flow.rb:1599:9:1599:19 | call to zip [element 0, element 2] | provenance | | +| array_flow.rb:1601:10:1601:10 | d [element 0, element 2] | array_flow.rb:1601:10:1601:13 | ...[...] [element 2] | provenance | | +| array_flow.rb:1601:10:1601:13 | ...[...] [element 2] | array_flow.rb:1601:10:1601:16 | ...[...] | provenance | | +| array_flow.rb:1602:10:1602:10 | d [element 1, element 1] | array_flow.rb:1602:10:1602:13 | ...[...] [element 1] | provenance | | +| array_flow.rb:1602:10:1602:13 | ...[...] [element 1] | array_flow.rb:1602:10:1602:16 | ...[...] | provenance | | +| array_flow.rb:1603:10:1603:10 | d [element 2, element 0] | array_flow.rb:1603:10:1603:13 | ...[...] [element 0] | provenance | | +| array_flow.rb:1603:10:1603:13 | ...[...] [element 0] | array_flow.rb:1603:10:1603:16 | ...[...] | provenance | | +| array_flow.rb:1604:5:1604:5 | a [element 2] | array_flow.rb:1604:21:1604:21 | x [element 0] | provenance | | +| array_flow.rb:1604:11:1604:11 | b [element 1] | array_flow.rb:1604:21:1604:21 | x [element 1] | provenance | | +| array_flow.rb:1604:14:1604:14 | c [element 0] | array_flow.rb:1604:21:1604:21 | x [element 2] | provenance | | +| array_flow.rb:1604:21:1604:21 | x [element 0] | array_flow.rb:1605:14:1605:14 | x [element 0] | provenance | | +| array_flow.rb:1604:21:1604:21 | x [element 1] | array_flow.rb:1606:14:1606:14 | x [element 1] | provenance | | +| array_flow.rb:1604:21:1604:21 | x [element 2] | array_flow.rb:1607:14:1607:14 | x [element 2] | provenance | | +| array_flow.rb:1605:14:1605:14 | x [element 0] | array_flow.rb:1605:14:1605:17 | ...[...] | provenance | | +| array_flow.rb:1606:14:1606:14 | x [element 1] | array_flow.rb:1606:14:1606:17 | ...[...] | provenance | | +| array_flow.rb:1607:14:1607:14 | x [element 2] | array_flow.rb:1607:14:1607:17 | ...[...] | provenance | | +| array_flow.rb:1612:5:1612:5 | a [element 2] | array_flow.rb:1614:9:1614:9 | a [element 2] | provenance | | +| array_flow.rb:1612:16:1612:28 | call to source | array_flow.rb:1612:5:1612:5 | a [element 2] | provenance | | +| array_flow.rb:1613:5:1613:5 | b [element 1] | array_flow.rb:1614:13:1614:13 | b [element 1] | provenance | | +| array_flow.rb:1613:13:1613:25 | call to source | array_flow.rb:1613:5:1613:5 | b [element 1] | provenance | | +| array_flow.rb:1614:5:1614:5 | c [element] | array_flow.rb:1615:10:1615:10 | c [element] | provenance | | +| array_flow.rb:1614:5:1614:5 | c [element] | array_flow.rb:1616:10:1616:10 | c [element] | provenance | | +| array_flow.rb:1614:5:1614:5 | c [element] | array_flow.rb:1617:10:1617:10 | c [element] | provenance | | +| array_flow.rb:1614:9:1614:9 | a [element 2] | array_flow.rb:1614:9:1614:13 | ... \| ... [element] | provenance | | +| array_flow.rb:1614:9:1614:13 | ... \| ... [element] | array_flow.rb:1614:5:1614:5 | c [element] | provenance | | +| array_flow.rb:1614:13:1614:13 | b [element 1] | array_flow.rb:1614:9:1614:13 | ... \| ... [element] | provenance | | +| array_flow.rb:1615:10:1615:10 | c [element] | array_flow.rb:1615:10:1615:13 | ...[...] | provenance | | +| array_flow.rb:1616:10:1616:10 | c [element] | array_flow.rb:1616:10:1616:13 | ...[...] | provenance | | +| array_flow.rb:1617:10:1617:10 | c [element] | array_flow.rb:1617:10:1617:13 | ...[...] | provenance | | +| 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: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: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 | | +| array_flow.rb:1626:10:1626:13 | ...[...] [element 0] | array_flow.rb:1626:10:1626:16 | ...[...] | provenance | | +| array_flow.rb:1627:10:1627:10 | a [element, element 0] | array_flow.rb:1627:10:1627:13 | ...[...] [element 0] | provenance | | +| array_flow.rb:1627:10:1627:13 | ...[...] [element 0] | array_flow.rb:1627:10:1627:16 | ...[...] | provenance | | +| array_flow.rb:1632:5:1632:5 | [post] a [element 0] | array_flow.rb:1641:10:1641:10 | a [element 0] | provenance | | +| array_flow.rb:1632:5:1632:5 | [post] a [element 0] | array_flow.rb:1643:10:1643:10 | a [element 0] | provenance | | +| array_flow.rb:1632:12:1632:24 | call to source | array_flow.rb:1632:5:1632:5 | [post] a [element 0] | provenance | | +| array_flow.rb:1634:5:1634:5 | [post] a [element] | array_flow.rb:1639:10:1639:10 | a [element] | provenance | | +| array_flow.rb:1634:5:1634:5 | [post] a [element] | array_flow.rb:1641:10:1641:10 | a [element] | provenance | | +| array_flow.rb:1634:5:1634:5 | [post] a [element] | array_flow.rb:1643:10:1643:10 | a [element] | provenance | | +| array_flow.rb:1634:16:1634:28 | call to source | array_flow.rb:1634:5:1634:5 | [post] a [element] | provenance | | +| array_flow.rb:1636:5:1636:5 | [post] a [element] | array_flow.rb:1639:10:1639:10 | a [element] | provenance | | +| array_flow.rb:1636:5:1636:5 | [post] a [element] | array_flow.rb:1641:10:1641:10 | a [element] | provenance | | +| array_flow.rb:1636:5:1636:5 | [post] a [element] | array_flow.rb:1643:10:1643:10 | a [element] | provenance | | +| array_flow.rb:1636:14:1636:26 | call to source | array_flow.rb:1636:5:1636:5 | [post] a [element] | provenance | | +| array_flow.rb:1638:5:1638:5 | [post] a [element] | array_flow.rb:1639:10:1639:10 | a [element] | provenance | | +| array_flow.rb:1638:5:1638:5 | [post] a [element] | array_flow.rb:1641:10:1641:10 | a [element] | provenance | | +| array_flow.rb:1638:5:1638:5 | [post] a [element] | array_flow.rb:1643:10:1643:10 | a [element] | provenance | | +| array_flow.rb:1638:16:1638:28 | call to source | array_flow.rb:1638:5:1638:5 | [post] a [element] | provenance | | +| array_flow.rb:1639:10:1639:10 | a [element] | array_flow.rb:1639:10:1639:13 | ...[...] | provenance | | +| array_flow.rb:1641:10:1641:10 | a [element 0] | array_flow.rb:1641:10:1641:17 | ...[...] | provenance | | +| array_flow.rb:1641:10:1641:10 | a [element] | array_flow.rb:1641:10:1641:17 | ...[...] | provenance | | +| array_flow.rb:1643:10:1643:10 | a [element 0] | array_flow.rb:1643:10:1643:15 | ...[...] | provenance | | +| array_flow.rb:1643:10:1643:10 | a [element] | array_flow.rb:1643:10:1643:15 | ...[...] | provenance | | +| array_flow.rb:1647:5:1647:5 | a [element 1] | array_flow.rb:1649:10:1649:10 | a [element 1] | provenance | | +| array_flow.rb:1647:5:1647:5 | a [element 1] | array_flow.rb:1651:10:1651:10 | a [element 1] | provenance | | +| array_flow.rb:1647:9:1647:32 | ...[...] [element 1] | array_flow.rb:1647:5:1647:5 | a [element 1] | provenance | | +| array_flow.rb:1647:18:1647:28 | call to source | array_flow.rb:1647:9:1647:32 | ...[...] [element 1] | provenance | | +| array_flow.rb:1649:10:1649:10 | a [element 1] | array_flow.rb:1649:10:1649:13 | ...[...] | provenance | | +| array_flow.rb:1651:10:1651:10 | a [element 1] | array_flow.rb:1651:10:1651:13 | ...[...] | provenance | | +| array_flow.rb:1668:9:1668:10 | a2 [element 1] | array_flow.rb:1670:14:1670:15 | a2 [element 1] | provenance | | +| array_flow.rb:1668:9:1668:10 | a2 [element 1] | array_flow.rb:1672:14:1672:15 | a2 [element 1] | provenance | | +| array_flow.rb:1668:14:1668:41 | ...[...] [element 1] | array_flow.rb:1668:9:1668:10 | a2 [element 1] | provenance | | +| array_flow.rb:1668:25:1668:37 | call to source | array_flow.rb:1668:14:1668:41 | ...[...] [element 1] | provenance | | +| array_flow.rb:1670:14:1670:15 | a2 [element 1] | array_flow.rb:1670:14:1670:18 | ...[...] | provenance | | +| array_flow.rb:1672:14:1672:15 | a2 [element 1] | array_flow.rb:1672:14:1672:18 | ...[...] | provenance | | nodes | array_flow.rb:2:5:2:5 | a [element 0] | semmle.label | a [element 0] | | array_flow.rb:2:9:2:20 | * ... [element 0] | semmle.label | * ... [element 0] | diff --git a/ruby/ql/test/library-tests/dataflow/call-sensitivity/call-sensitivity.expected b/ruby/ql/test/library-tests/dataflow/call-sensitivity/call-sensitivity.expected index 98330dcaa23..7e55fbf8995 100644 --- a/ruby/ql/test/library-tests/dataflow/call-sensitivity/call-sensitivity.expected +++ b/ruby/ql/test/library-tests/dataflow/call-sensitivity/call-sensitivity.expected @@ -1,102 +1,102 @@ testFailures edges -| call_sensitivity.rb:9:7:9:13 | call to taint | call_sensitivity.rb:9:6:9:14 | ( ... ) | -| call_sensitivity.rb:11:13:11:13 | x | call_sensitivity.rb:12:11:12:11 | x | -| call_sensitivity.rb:12:11:12:11 | x | call_sensitivity.rb:19:22:19:22 | x | -| call_sensitivity.rb:19:9:19:17 | ( ... ) | call_sensitivity.rb:11:13:11:13 | x | -| call_sensitivity.rb:19:10:19:16 | call to taint | call_sensitivity.rb:19:9:19:17 | ( ... ) | -| call_sensitivity.rb:19:22:19:22 | x | call_sensitivity.rb:19:30:19:30 | x | -| call_sensitivity.rb:21:27:21:27 | x | call_sensitivity.rb:22:17:22:17 | x | -| call_sensitivity.rb:21:27:21:27 | x | call_sensitivity.rb:22:17:22:17 | x | -| call_sensitivity.rb:21:27:21:27 | x | call_sensitivity.rb:22:17:22:17 | x | -| call_sensitivity.rb:22:17:22:17 | x | call_sensitivity.rb:31:17:31:17 | x | -| call_sensitivity.rb:22:17:22:17 | x | call_sensitivity.rb:40:23:40:23 | x | -| call_sensitivity.rb:22:17:22:17 | x | call_sensitivity.rb:43:24:43:24 | x | -| call_sensitivity.rb:31:17:31:17 | x | call_sensitivity.rb:31:27:31:27 | x | -| call_sensitivity.rb:32:25:32:32 | call to taint | call_sensitivity.rb:21:27:21:27 | x | -| call_sensitivity.rb:40:23:40:23 | x | call_sensitivity.rb:40:31:40:31 | x | -| call_sensitivity.rb:41:25:41:32 | call to taint | call_sensitivity.rb:21:27:21:27 | x | -| call_sensitivity.rb:43:24:43:24 | x | call_sensitivity.rb:43:32:43:32 | x | -| call_sensitivity.rb:44:26:44:33 | call to taint | call_sensitivity.rb:21:27:21:27 | x | -| call_sensitivity.rb:50:15:50:15 | x | call_sensitivity.rb:51:10:51:10 | x | -| call_sensitivity.rb:54:15:54:15 | x | call_sensitivity.rb:55:13:55:13 | x | -| call_sensitivity.rb:54:15:54:15 | x | call_sensitivity.rb:55:13:55:13 | x | -| call_sensitivity.rb:55:13:55:13 | x | call_sensitivity.rb:50:15:50:15 | x | -| call_sensitivity.rb:55:13:55:13 | x | call_sensitivity.rb:50:15:50:15 | x | -| call_sensitivity.rb:58:20:58:20 | x | call_sensitivity.rb:59:18:59:18 | x | -| call_sensitivity.rb:59:18:59:18 | x | call_sensitivity.rb:54:15:54:15 | x | -| call_sensitivity.rb:62:18:62:18 | y | call_sensitivity.rb:63:15:63:15 | y | -| call_sensitivity.rb:62:18:62:18 | y | call_sensitivity.rb:63:15:63:15 | y | -| call_sensitivity.rb:63:15:63:15 | y | call_sensitivity.rb:50:15:50:15 | x | -| call_sensitivity.rb:63:15:63:15 | y | call_sensitivity.rb:50:15:50:15 | x | -| call_sensitivity.rb:66:20:66:20 | x | call_sensitivity.rb:67:24:67:24 | x | -| call_sensitivity.rb:67:24:67:24 | x | call_sensitivity.rb:62:18:62:18 | y | -| call_sensitivity.rb:70:30:70:30 | x | call_sensitivity.rb:71:10:71:10 | x | -| call_sensitivity.rb:74:18:74:18 | y | call_sensitivity.rb:75:20:77:7 | do ... end [captured y] | -| call_sensitivity.rb:75:20:77:7 | do ... end [captured y] | call_sensitivity.rb:76:17:76:17 | y | -| call_sensitivity.rb:76:17:76:17 | y | call_sensitivity.rb:50:15:50:15 | x | -| call_sensitivity.rb:80:15:80:15 | x | call_sensitivity.rb:81:18:81:18 | x | -| call_sensitivity.rb:81:18:81:18 | x | call_sensitivity.rb:50:15:50:15 | x | -| call_sensitivity.rb:85:18:85:27 | ( ... ) | call_sensitivity.rb:80:15:80:15 | x | -| call_sensitivity.rb:85:19:85:26 | call to taint | call_sensitivity.rb:85:18:85:27 | ( ... ) | -| call_sensitivity.rb:88:30:88:30 | x | call_sensitivity.rb:89:23:89:23 | x | -| call_sensitivity.rb:88:30:88:30 | x | call_sensitivity.rb:89:23:89:23 | x | -| call_sensitivity.rb:89:23:89:23 | x | call_sensitivity.rb:70:30:70:30 | x | -| call_sensitivity.rb:89:23:89:23 | x | call_sensitivity.rb:70:30:70:30 | x | -| call_sensitivity.rb:92:35:92:35 | x | call_sensitivity.rb:93:28:93:28 | x | -| call_sensitivity.rb:93:28:93:28 | x | call_sensitivity.rb:88:30:88:30 | x | -| call_sensitivity.rb:96:33:96:33 | y | call_sensitivity.rb:97:25:97:25 | y | -| call_sensitivity.rb:96:33:96:33 | y | call_sensitivity.rb:97:25:97:25 | y | -| call_sensitivity.rb:97:25:97:25 | y | call_sensitivity.rb:70:30:70:30 | x | -| call_sensitivity.rb:97:25:97:25 | y | call_sensitivity.rb:70:30:70:30 | x | -| call_sensitivity.rb:100:35:100:35 | x | call_sensitivity.rb:101:34:101:34 | x | -| call_sensitivity.rb:101:34:101:34 | x | call_sensitivity.rb:96:33:96:33 | y | -| call_sensitivity.rb:104:18:104:18 | x | call_sensitivity.rb:105:10:105:10 | x | -| call_sensitivity.rb:104:18:104:18 | x | call_sensitivity.rb:105:10:105:10 | x | -| call_sensitivity.rb:104:18:104:18 | x | call_sensitivity.rb:105:10:105:10 | x | -| call_sensitivity.rb:104:18:104:18 | x | call_sensitivity.rb:105:10:105:10 | x | -| call_sensitivity.rb:104:18:104:18 | x | call_sensitivity.rb:106:13:106:13 | x | -| call_sensitivity.rb:104:18:104:18 | x | call_sensitivity.rb:106:13:106:13 | x | -| call_sensitivity.rb:104:18:104:18 | x | call_sensitivity.rb:106:13:106:13 | x | -| call_sensitivity.rb:106:13:106:13 | x | call_sensitivity.rb:50:15:50:15 | x | -| call_sensitivity.rb:106:13:106:13 | x | call_sensitivity.rb:50:15:50:15 | x | -| call_sensitivity.rb:106:13:106:13 | x | call_sensitivity.rb:50:15:50:15 | x | -| call_sensitivity.rb:109:21:109:21 | x | call_sensitivity.rb:110:9:110:9 | x | -| call_sensitivity.rb:110:9:110:9 | x | call_sensitivity.rb:104:18:104:18 | x | -| call_sensitivity.rb:114:11:114:20 | ( ... ) | call_sensitivity.rb:104:18:104:18 | x | -| call_sensitivity.rb:114:12:114:19 | call to taint | call_sensitivity.rb:114:11:114:20 | ( ... ) | -| call_sensitivity.rb:115:11:115:18 | call to taint | call_sensitivity.rb:54:15:54:15 | x | -| call_sensitivity.rb:116:16:116:23 | call to taint | call_sensitivity.rb:58:20:58:20 | x | -| call_sensitivity.rb:117:14:117:22 | call to taint | call_sensitivity.rb:62:18:62:18 | y | -| call_sensitivity.rb:118:16:118:24 | call to taint | call_sensitivity.rb:66:20:66:20 | x | -| call_sensitivity.rb:119:14:119:22 | call to taint | call_sensitivity.rb:74:18:74:18 | y | -| call_sensitivity.rb:121:21:121:28 | call to taint | call_sensitivity.rb:88:30:88:30 | x | -| call_sensitivity.rb:122:26:122:33 | call to taint | call_sensitivity.rb:92:35:92:35 | x | -| call_sensitivity.rb:123:24:123:32 | call to taint | call_sensitivity.rb:96:33:96:33 | y | -| call_sensitivity.rb:124:26:124:33 | call to taint | call_sensitivity.rb:100:35:100:35 | x | -| call_sensitivity.rb:125:12:125:19 | call to taint | call_sensitivity.rb:109:21:109:21 | x | -| call_sensitivity.rb:166:14:166:22 | call to taint | call_sensitivity.rb:74:18:74:18 | y | -| call_sensitivity.rb:174:19:174:19 | x | call_sensitivity.rb:175:12:175:12 | x | -| call_sensitivity.rb:175:12:175:12 | x | call_sensitivity.rb:104:18:104:18 | x | -| call_sensitivity.rb:178:11:178:19 | call to taint | call_sensitivity.rb:174:19:174:19 | x | -| call_sensitivity.rb:187:11:187:20 | ( ... ) | call_sensitivity.rb:104:18:104:18 | x | -| call_sensitivity.rb:187:12:187:19 | call to taint | call_sensitivity.rb:187:11:187:20 | ( ... ) | -| call_sensitivity.rb:189:19:189:19 | x | call_sensitivity.rb:190:9:190:9 | x | -| call_sensitivity.rb:190:9:190:9 | x | call_sensitivity.rb:194:23:194:23 | x | -| call_sensitivity.rb:193:19:193:19 | x | call_sensitivity.rb:194:17:194:17 | x | -| call_sensitivity.rb:194:17:194:17 | x | call_sensitivity.rb:189:19:189:19 | x | -| call_sensitivity.rb:194:23:194:23 | x | call_sensitivity.rb:195:11:195:11 | x | -| call_sensitivity.rb:195:11:195:11 | x | call_sensitivity.rb:199:30:199:30 | x | -| call_sensitivity.rb:195:11:195:11 | x | call_sensitivity.rb:203:26:203:26 | x | -| call_sensitivity.rb:199:15:199:24 | ( ... ) | call_sensitivity.rb:193:19:193:19 | x | -| call_sensitivity.rb:199:16:199:23 | call to taint | call_sensitivity.rb:199:15:199:24 | ( ... ) | -| call_sensitivity.rb:199:30:199:30 | x | call_sensitivity.rb:200:8:200:8 | x | -| call_sensitivity.rb:203:26:203:26 | x | call_sensitivity.rb:204:8:204:8 | x | -| call_sensitivity.rb:207:16:207:16 | y | call_sensitivity.rb:209:9:209:9 | y | -| call_sensitivity.rb:209:9:209:9 | y | call_sensitivity.rb:214:9:214:9 | x | -| call_sensitivity.rb:214:9:214:9 | x | call_sensitivity.rb:215:10:215:10 | x | -| call_sensitivity.rb:222:15:222:24 | ( ... ) | call_sensitivity.rb:207:16:207:16 | y | -| call_sensitivity.rb:222:16:222:23 | call to taint | call_sensitivity.rb:222:15:222:24 | ( ... ) | +| call_sensitivity.rb:9:7:9:13 | call to taint | call_sensitivity.rb:9:6:9:14 | ( ... ) | provenance | | +| call_sensitivity.rb:11:13:11:13 | x | call_sensitivity.rb:12:11:12:11 | x | provenance | | +| call_sensitivity.rb:12:11:12:11 | x | call_sensitivity.rb:19:22:19:22 | x | provenance | | +| call_sensitivity.rb:19:9:19:17 | ( ... ) | call_sensitivity.rb:11:13:11:13 | x | provenance | | +| call_sensitivity.rb:19:10:19:16 | call to taint | call_sensitivity.rb:19:9:19:17 | ( ... ) | provenance | | +| call_sensitivity.rb:19:22:19:22 | x | call_sensitivity.rb:19:30:19:30 | x | provenance | | +| call_sensitivity.rb:21:27:21:27 | x | call_sensitivity.rb:22:17:22:17 | x | provenance | | +| call_sensitivity.rb:21:27:21:27 | x | call_sensitivity.rb:22:17:22:17 | x | provenance | | +| call_sensitivity.rb:21:27:21:27 | x | call_sensitivity.rb:22:17:22:17 | x | provenance | | +| call_sensitivity.rb:22:17:22:17 | x | call_sensitivity.rb:31:17:31:17 | x | provenance | | +| call_sensitivity.rb:22:17:22:17 | x | call_sensitivity.rb:40:23:40:23 | x | provenance | | +| call_sensitivity.rb:22:17:22:17 | x | call_sensitivity.rb:43:24:43:24 | x | provenance | | +| call_sensitivity.rb:31:17:31:17 | x | call_sensitivity.rb:31:27:31:27 | x | provenance | | +| call_sensitivity.rb:32:25:32:32 | call to taint | call_sensitivity.rb:21:27:21:27 | x | provenance | | +| call_sensitivity.rb:40:23:40:23 | x | call_sensitivity.rb:40:31:40:31 | x | provenance | | +| call_sensitivity.rb:41:25:41:32 | call to taint | call_sensitivity.rb:21:27:21:27 | x | provenance | | +| call_sensitivity.rb:43:24:43:24 | x | call_sensitivity.rb:43:32:43:32 | x | provenance | | +| call_sensitivity.rb:44:26:44:33 | call to taint | call_sensitivity.rb:21:27:21:27 | x | provenance | | +| call_sensitivity.rb:50:15:50:15 | x | call_sensitivity.rb:51:10:51:10 | x | provenance | | +| call_sensitivity.rb:54:15:54:15 | x | call_sensitivity.rb:55:13:55:13 | x | provenance | | +| call_sensitivity.rb:54:15:54:15 | x | call_sensitivity.rb:55:13:55:13 | x | provenance | | +| call_sensitivity.rb:55:13:55:13 | x | call_sensitivity.rb:50:15:50:15 | x | provenance | | +| call_sensitivity.rb:55:13:55:13 | x | call_sensitivity.rb:50:15:50:15 | x | provenance | | +| call_sensitivity.rb:58:20:58:20 | x | call_sensitivity.rb:59:18:59:18 | x | provenance | | +| call_sensitivity.rb:59:18:59:18 | x | call_sensitivity.rb:54:15:54:15 | x | provenance | | +| call_sensitivity.rb:62:18:62:18 | y | call_sensitivity.rb:63:15:63:15 | y | provenance | | +| call_sensitivity.rb:62:18:62:18 | y | call_sensitivity.rb:63:15:63:15 | y | provenance | | +| call_sensitivity.rb:63:15:63:15 | y | call_sensitivity.rb:50:15:50:15 | x | provenance | | +| call_sensitivity.rb:63:15:63:15 | y | call_sensitivity.rb:50:15:50:15 | x | provenance | | +| call_sensitivity.rb:66:20:66:20 | x | call_sensitivity.rb:67:24:67:24 | x | provenance | | +| call_sensitivity.rb:67:24:67:24 | x | call_sensitivity.rb:62:18:62:18 | y | provenance | | +| call_sensitivity.rb:70:30:70:30 | x | call_sensitivity.rb:71:10:71:10 | x | provenance | | +| call_sensitivity.rb:74:18:74:18 | y | call_sensitivity.rb:75:20:77:7 | do ... end [captured y] | provenance | | +| call_sensitivity.rb:75:20:77:7 | do ... end [captured y] | call_sensitivity.rb:76:17:76:17 | y | provenance | | +| call_sensitivity.rb:76:17:76:17 | y | call_sensitivity.rb:50:15:50:15 | x | provenance | | +| call_sensitivity.rb:80:15:80:15 | x | call_sensitivity.rb:81:18:81:18 | x | provenance | | +| call_sensitivity.rb:81:18:81:18 | x | call_sensitivity.rb:50:15:50:15 | x | provenance | | +| call_sensitivity.rb:85:18:85:27 | ( ... ) | call_sensitivity.rb:80:15:80:15 | x | provenance | | +| call_sensitivity.rb:85:19:85:26 | call to taint | call_sensitivity.rb:85:18:85:27 | ( ... ) | provenance | | +| call_sensitivity.rb:88:30:88:30 | x | call_sensitivity.rb:89:23:89:23 | x | provenance | | +| call_sensitivity.rb:88:30:88:30 | x | call_sensitivity.rb:89:23:89:23 | x | provenance | | +| call_sensitivity.rb:89:23:89:23 | x | call_sensitivity.rb:70:30:70:30 | x | provenance | | +| call_sensitivity.rb:89:23:89:23 | x | call_sensitivity.rb:70:30:70:30 | x | provenance | | +| call_sensitivity.rb:92:35:92:35 | x | call_sensitivity.rb:93:28:93:28 | x | provenance | | +| call_sensitivity.rb:93:28:93:28 | x | call_sensitivity.rb:88:30:88:30 | x | provenance | | +| call_sensitivity.rb:96:33:96:33 | y | call_sensitivity.rb:97:25:97:25 | y | provenance | | +| call_sensitivity.rb:96:33:96:33 | y | call_sensitivity.rb:97:25:97:25 | y | provenance | | +| call_sensitivity.rb:97:25:97:25 | y | call_sensitivity.rb:70:30:70:30 | x | provenance | | +| call_sensitivity.rb:97:25:97:25 | y | call_sensitivity.rb:70:30:70:30 | x | provenance | | +| call_sensitivity.rb:100:35:100:35 | x | call_sensitivity.rb:101:34:101:34 | x | provenance | | +| call_sensitivity.rb:101:34:101:34 | x | call_sensitivity.rb:96:33:96:33 | y | provenance | | +| call_sensitivity.rb:104:18:104:18 | x | call_sensitivity.rb:105:10:105:10 | x | provenance | | +| call_sensitivity.rb:104:18:104:18 | x | call_sensitivity.rb:105:10:105:10 | x | provenance | | +| call_sensitivity.rb:104:18:104:18 | x | call_sensitivity.rb:105:10:105:10 | x | provenance | | +| call_sensitivity.rb:104:18:104:18 | x | call_sensitivity.rb:105:10:105:10 | x | provenance | | +| call_sensitivity.rb:104:18:104:18 | x | call_sensitivity.rb:106:13:106:13 | x | provenance | | +| call_sensitivity.rb:104:18:104:18 | x | call_sensitivity.rb:106:13:106:13 | x | provenance | | +| call_sensitivity.rb:104:18:104:18 | x | call_sensitivity.rb:106:13:106:13 | x | provenance | | +| call_sensitivity.rb:106:13:106:13 | x | call_sensitivity.rb:50:15:50:15 | x | provenance | | +| call_sensitivity.rb:106:13:106:13 | x | call_sensitivity.rb:50:15:50:15 | x | provenance | | +| call_sensitivity.rb:106:13:106:13 | x | call_sensitivity.rb:50:15:50:15 | x | provenance | | +| call_sensitivity.rb:109:21:109:21 | x | call_sensitivity.rb:110:9:110:9 | x | provenance | | +| call_sensitivity.rb:110:9:110:9 | x | call_sensitivity.rb:104:18:104:18 | x | provenance | | +| call_sensitivity.rb:114:11:114:20 | ( ... ) | call_sensitivity.rb:104:18:104:18 | x | provenance | | +| call_sensitivity.rb:114:12:114:19 | call to taint | call_sensitivity.rb:114:11:114:20 | ( ... ) | provenance | | +| call_sensitivity.rb:115:11:115:18 | call to taint | call_sensitivity.rb:54:15:54:15 | x | provenance | | +| call_sensitivity.rb:116:16:116:23 | call to taint | call_sensitivity.rb:58:20:58:20 | x | provenance | | +| call_sensitivity.rb:117:14:117:22 | call to taint | call_sensitivity.rb:62:18:62:18 | y | provenance | | +| call_sensitivity.rb:118:16:118:24 | call to taint | call_sensitivity.rb:66:20:66:20 | x | provenance | | +| call_sensitivity.rb:119:14:119:22 | call to taint | call_sensitivity.rb:74:18:74:18 | y | provenance | | +| call_sensitivity.rb:121:21:121:28 | call to taint | call_sensitivity.rb:88:30:88:30 | x | provenance | | +| call_sensitivity.rb:122:26:122:33 | call to taint | call_sensitivity.rb:92:35:92:35 | x | provenance | | +| call_sensitivity.rb:123:24:123:32 | call to taint | call_sensitivity.rb:96:33:96:33 | y | provenance | | +| call_sensitivity.rb:124:26:124:33 | call to taint | call_sensitivity.rb:100:35:100:35 | x | provenance | | +| call_sensitivity.rb:125:12:125:19 | call to taint | call_sensitivity.rb:109:21:109:21 | x | provenance | | +| call_sensitivity.rb:166:14:166:22 | call to taint | call_sensitivity.rb:74:18:74:18 | y | provenance | | +| call_sensitivity.rb:174:19:174:19 | x | call_sensitivity.rb:175:12:175:12 | x | provenance | | +| call_sensitivity.rb:175:12:175:12 | x | call_sensitivity.rb:104:18:104:18 | x | provenance | | +| call_sensitivity.rb:178:11:178:19 | call to taint | call_sensitivity.rb:174:19:174:19 | x | provenance | | +| call_sensitivity.rb:187:11:187:20 | ( ... ) | call_sensitivity.rb:104:18:104:18 | x | provenance | | +| call_sensitivity.rb:187:12:187:19 | call to taint | call_sensitivity.rb:187:11:187:20 | ( ... ) | provenance | | +| call_sensitivity.rb:189:19:189:19 | x | call_sensitivity.rb:190:9:190:9 | x | provenance | | +| call_sensitivity.rb:190:9:190:9 | x | call_sensitivity.rb:194:23:194:23 | x | provenance | | +| call_sensitivity.rb:193:19:193:19 | x | call_sensitivity.rb:194:17:194:17 | x | provenance | | +| call_sensitivity.rb:194:17:194:17 | x | call_sensitivity.rb:189:19:189:19 | x | provenance | | +| call_sensitivity.rb:194:23:194:23 | x | call_sensitivity.rb:195:11:195:11 | x | provenance | | +| call_sensitivity.rb:195:11:195:11 | x | call_sensitivity.rb:199:30:199:30 | x | provenance | | +| call_sensitivity.rb:195:11:195:11 | x | call_sensitivity.rb:203:26:203:26 | x | provenance | | +| call_sensitivity.rb:199:15:199:24 | ( ... ) | call_sensitivity.rb:193:19:193:19 | x | provenance | | +| call_sensitivity.rb:199:16:199:23 | call to taint | call_sensitivity.rb:199:15:199:24 | ( ... ) | provenance | | +| call_sensitivity.rb:199:30:199:30 | x | call_sensitivity.rb:200:8:200:8 | x | provenance | | +| call_sensitivity.rb:203:26:203:26 | x | call_sensitivity.rb:204:8:204:8 | x | provenance | | +| call_sensitivity.rb:207:16:207:16 | y | call_sensitivity.rb:209:9:209:9 | y | provenance | | +| call_sensitivity.rb:209:9:209:9 | y | call_sensitivity.rb:214:9:214:9 | x | provenance | | +| call_sensitivity.rb:214:9:214:9 | x | call_sensitivity.rb:215:10:215:10 | x | provenance | | +| call_sensitivity.rb:222:15:222:24 | ( ... ) | call_sensitivity.rb:207:16:207:16 | y | provenance | | +| call_sensitivity.rb:222:16:222:23 | call to taint | call_sensitivity.rb:222:15:222:24 | ( ... ) | provenance | | nodes | call_sensitivity.rb:9:6:9:14 | ( ... ) | semmle.label | ( ... ) | | call_sensitivity.rb:9:7:9:13 | call to taint | semmle.label | call to taint | diff --git a/ruby/ql/test/library-tests/dataflow/erb/erb.expected b/ruby/ql/test/library-tests/dataflow/erb/erb.expected index 1ca2216a559..b78f3c19246 100644 --- a/ruby/ql/test/library-tests/dataflow/erb/erb.expected +++ b/ruby/ql/test/library-tests/dataflow/erb/erb.expected @@ -1,49 +1,49 @@ testFailures edges -| main.rb:3:9:3:9 | x | main.rb:4:26:4:26 | x | -| main.rb:3:13:3:21 | call to source | main.rb:3:9:3:9 | x | -| main.rb:4:9:4:12 | view [@x] | main.rb:5:16:5:19 | view [@x] | -| main.rb:4:16:4:27 | call to new [@x] | main.rb:4:9:4:12 | view [@x] | -| main.rb:4:26:4:26 | x | main.rb:4:16:4:27 | call to new [@x] | -| main.rb:4:26:4:26 | x | view1.rb:5:20:5:20 | x | -| main.rb:5:16:5:19 | view [@x] | view1.html.erb:2:5:8:1 | self in view1.html.erb [@x] | -| main.rb:10:16:10:19 | [post] view [@x] | main.rb:11:9:11:12 | view [@x] | -| main.rb:11:9:11:12 | view [@x] | view2.rb:2:5:4:7 | self in foo [@x] | -| main.rb:15:9:15:9 | x | main.rb:16:26:16:26 | x | -| main.rb:15:13:15:21 | call to source | main.rb:15:9:15:9 | x | -| main.rb:16:9:16:12 | view [@x] | main.rb:17:16:17:19 | view [@x] | -| main.rb:16:16:16:27 | call to new [@x] | main.rb:16:9:16:12 | view [@x] | -| main.rb:16:26:16:26 | x | main.rb:16:16:16:27 | call to new [@x] | -| main.rb:16:26:16:26 | x | view3.rb:2:20:2:20 | x | -| main.rb:17:16:17:19 | view [@x] | view3.html.erb:3:1:4:1 | self in view3.html.erb [@x] | -| view1.html.erb:2:5:2:9 | self [@x] | view1.rb:9:5:11:7 | self in foo [@x] | -| view1.html.erb:2:5:8:1 | self in view1.html.erb [@x] | view1.html.erb:2:5:2:9 | self [@x] | -| view1.html.erb:2:5:8:1 | self in view1.html.erb [@x] | view1.html.erb:7:1:7:5 | self [@x] | -| view1.html.erb:6:1:6:14 | [post] self [@x] | view1.html.erb:7:1:7:5 | self [@x] | -| view1.html.erb:6:5:6:13 | call to source | view1.html.erb:6:1:6:14 | [post] self [@x] | -| view1.html.erb:6:5:6:13 | call to source | view1.rb:13:13:13:13 | x | -| view1.html.erb:7:1:7:5 | self [@x] | view1.rb:9:5:11:7 | self in foo [@x] | -| view1.html.erb:7:1:7:5 | self [@x] | view1.rb:9:5:11:7 | self in foo [@x] | -| view1.rb:5:20:5:20 | x | view1.rb:6:14:6:14 | x | -| view1.rb:6:14:6:14 | x | view1.rb:6:9:6:10 | [post] self [@x] | -| view1.rb:9:5:11:7 | self in foo [@x] | view1.rb:10:14:10:15 | self [@x] | -| view1.rb:10:14:10:15 | self [@x] | view1.rb:10:14:10:15 | @x | -| view1.rb:13:13:13:13 | x | view1.rb:14:14:14:14 | x | -| view1.rb:14:14:14:14 | x | view1.rb:14:9:14:10 | [post] self [@x] | -| view2.html.erb:3:1:3:14 | [post] self [@x] | main.rb:10:16:10:19 | [post] view [@x] | -| view2.html.erb:3:5:3:13 | call to source | view2.html.erb:3:1:3:14 | [post] self [@x] | -| view2.html.erb:3:5:3:13 | call to source | view2.rb:6:13:6:13 | x | -| view2.rb:2:5:4:7 | self in foo [@x] | view2.rb:3:14:3:15 | self [@x] | -| view2.rb:3:14:3:15 | self [@x] | view2.rb:3:14:3:15 | @x | -| view2.rb:6:13:6:13 | x | view2.rb:7:14:7:14 | x | -| view2.rb:7:14:7:14 | x | view2.rb:7:9:7:10 | [post] self [@x] | -| view3.html.erb:3:1:4:1 | self in view3.html.erb [@x] | view3.html.erb:3:6:3:8 | self [@x] | -| view3.html.erb:3:6:3:8 | self [@x] | view3.html.erb:3:6:3:8 | call to get | -| view3.html.erb:3:6:3:8 | self [@x] | view3.rb:6:5:8:7 | self in get [@x] | -| view3.rb:2:20:2:20 | x | view3.rb:3:14:3:14 | x | -| view3.rb:3:14:3:14 | x | view3.rb:3:9:3:10 | [post] self [@x] | -| view3.rb:6:5:8:7 | self in get [@x] | view3.rb:7:9:7:10 | self [@x] | -| view3.rb:7:9:7:10 | self [@x] | view3.rb:7:9:7:10 | @x | +| main.rb:3:9:3:9 | x | main.rb:4:26:4:26 | x | provenance | | +| main.rb:3:13:3:21 | call to source | main.rb:3:9:3:9 | x | provenance | | +| main.rb:4:9:4:12 | view [@x] | main.rb:5:16:5:19 | view [@x] | provenance | | +| main.rb:4:16:4:27 | call to new [@x] | main.rb:4:9:4:12 | view [@x] | provenance | | +| main.rb:4:26:4:26 | x | main.rb:4:16:4:27 | call to new [@x] | provenance | | +| main.rb:4:26:4:26 | x | view1.rb:5:20:5:20 | x | provenance | | +| main.rb:5:16:5:19 | view [@x] | view1.html.erb:2:5:8:1 | self in view1.html.erb [@x] | provenance | | +| main.rb:10:16:10:19 | [post] view [@x] | main.rb:11:9:11:12 | view [@x] | provenance | | +| main.rb:11:9:11:12 | view [@x] | view2.rb:2:5:4:7 | self in foo [@x] | provenance | | +| main.rb:15:9:15:9 | x | main.rb:16:26:16:26 | x | provenance | | +| main.rb:15:13:15:21 | call to source | main.rb:15:9:15:9 | x | provenance | | +| main.rb:16:9:16:12 | view [@x] | main.rb:17:16:17:19 | view [@x] | provenance | | +| main.rb:16:16:16:27 | call to new [@x] | main.rb:16:9:16:12 | view [@x] | provenance | | +| main.rb:16:26:16:26 | x | main.rb:16:16:16:27 | call to new [@x] | provenance | | +| main.rb:16:26:16:26 | x | view3.rb:2:20:2:20 | x | provenance | | +| main.rb:17:16:17:19 | view [@x] | view3.html.erb:3:1:4:1 | self in view3.html.erb [@x] | provenance | | +| view1.html.erb:2:5:2:9 | self [@x] | view1.rb:9:5:11:7 | self in foo [@x] | provenance | | +| view1.html.erb:2:5:8:1 | self in view1.html.erb [@x] | view1.html.erb:2:5:2:9 | self [@x] | provenance | | +| view1.html.erb:2:5:8:1 | self in view1.html.erb [@x] | view1.html.erb:7:1:7:5 | self [@x] | provenance | | +| view1.html.erb:6:1:6:14 | [post] self [@x] | view1.html.erb:7:1:7:5 | self [@x] | provenance | | +| view1.html.erb:6:5:6:13 | call to source | view1.html.erb:6:1:6:14 | [post] self [@x] | provenance | | +| view1.html.erb:6:5:6:13 | call to source | view1.rb:13:13:13:13 | x | provenance | | +| view1.html.erb:7:1:7:5 | self [@x] | view1.rb:9:5:11:7 | self in foo [@x] | provenance | | +| view1.html.erb:7:1:7:5 | self [@x] | view1.rb:9:5:11:7 | self in foo [@x] | provenance | | +| view1.rb:5:20:5:20 | x | view1.rb:6:14:6:14 | x | provenance | | +| view1.rb:6:14:6:14 | x | view1.rb:6:9:6:10 | [post] self [@x] | provenance | | +| 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:14:14:14 | x | view1.rb:14:9:14:10 | [post] self [@x] | provenance | | +| view2.html.erb:3:1:3:14 | [post] self [@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: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 | | +| view3.html.erb:3:6:3:8 | self [@x] | view3.rb:6:5:8:7 | self in get [@x] | provenance | | +| view3.rb:2:20:2:20 | x | view3.rb:3:14:3:14 | x | provenance | | +| view3.rb:3:14:3:14 | x | view3.rb:3:9:3:10 | [post] self [@x] | provenance | | +| view3.rb:6:5:8:7 | self in get [@x] | view3.rb:7:9:7:10 | self [@x] | provenance | | +| view3.rb:7:9:7:10 | self [@x] | view3.rb:7:9:7:10 | @x | provenance | | nodes | main.rb:3:9:3:9 | x | semmle.label | x | | main.rb:3:13:3:21 | call to source | semmle.label | call to source | diff --git a/ruby/ql/test/library-tests/dataflow/flow-summaries/semantics.expected b/ruby/ql/test/library-tests/dataflow/flow-summaries/semantics.expected index 13366c8733c..7f40375e963 100644 --- a/ruby/ql/test/library-tests/dataflow/flow-summaries/semantics.expected +++ b/ruby/ql/test/library-tests/dataflow/flow-summaries/semantics.expected @@ -1,1089 +1,1089 @@ testFailures edges -| semantics.rb:2:5:2:5 | a | semantics.rb:3:9:3:9 | a | -| semantics.rb:2:5:2:5 | a | semantics.rb:3:9:3:9 | a | -| semantics.rb:2:9:2:18 | call to source | semantics.rb:2:5:2:5 | a | -| semantics.rb:2:9:2:18 | call to source | semantics.rb:2:5:2:5 | a | -| semantics.rb:3:5:3:5 | x | semantics.rb:4:10:4:10 | x | -| semantics.rb:3:5:3:5 | x | semantics.rb:4:10:4:10 | x | -| semantics.rb:3:9:3:9 | a | semantics.rb:3:9:3:14 | call to s1 | -| semantics.rb:3:9:3:9 | a | semantics.rb:3:9:3:14 | call to s1 | -| semantics.rb:3:9:3:14 | call to s1 | semantics.rb:3:5:3:5 | x | -| semantics.rb:3:9:3:14 | call to s1 | semantics.rb:3:5:3:5 | x | -| semantics.rb:8:5:8:5 | a | semantics.rb:9:10:9:10 | a | -| semantics.rb:8:5:8:5 | a | semantics.rb:9:10:9:10 | a | -| semantics.rb:8:9:8:18 | call to source | semantics.rb:8:5:8:5 | a | -| semantics.rb:8:9:8:18 | call to source | semantics.rb:8:5:8:5 | a | -| semantics.rb:9:5:9:5 | [post] x | semantics.rb:10:10:10:10 | x | -| semantics.rb:9:5:9:5 | [post] x | semantics.rb:10:10:10:10 | x | -| semantics.rb:9:10:9:10 | a | semantics.rb:9:5:9:5 | [post] x | -| semantics.rb:9:10:9:10 | a | semantics.rb:9:5:9:5 | [post] x | -| semantics.rb:14:5:14:5 | a | semantics.rb:15:8:15:8 | a | -| semantics.rb:14:5:14:5 | a | semantics.rb:15:8:15:8 | a | -| semantics.rb:14:9:14:18 | call to source | semantics.rb:14:5:14:5 | a | -| semantics.rb:14:9:14:18 | call to source | semantics.rb:14:5:14:5 | a | -| semantics.rb:15:8:15:8 | a | semantics.rb:15:11:15:11 | [post] x | -| semantics.rb:15:8:15:8 | a | semantics.rb:15:11:15:11 | [post] x | -| semantics.rb:15:11:15:11 | [post] x | semantics.rb:16:10:16:10 | x | -| semantics.rb:15:11:15:11 | [post] x | semantics.rb:16:10:16:10 | x | -| semantics.rb:22:18:22:32 | call to source | semantics.rb:22:10:22:33 | call to s4 | -| semantics.rb:22:18:22:32 | call to source | semantics.rb:22:10:22:33 | call to s4 | -| semantics.rb:23:23:23:32 | call to source | semantics.rb:23:10:23:33 | call to s4 | -| semantics.rb:23:23:23:32 | call to source | semantics.rb:23:10:23:33 | call to s4 | -| semantics.rb:28:5:28:5 | a | semantics.rb:29:8:29:8 | a | -| semantics.rb:28:5:28:5 | a | semantics.rb:29:8:29:8 | a | -| semantics.rb:28:9:28:18 | call to source | semantics.rb:28:5:28:5 | a | -| semantics.rb:28:9:28:18 | call to source | semantics.rb:28:5:28:5 | a | -| semantics.rb:29:8:29:8 | a | semantics.rb:29:14:29:14 | [post] y | -| semantics.rb:29:8:29:8 | a | semantics.rb:29:14:29:14 | [post] y | -| semantics.rb:29:8:29:8 | a | semantics.rb:29:17:29:17 | [post] z | -| semantics.rb:29:8:29:8 | a | semantics.rb:29:17:29:17 | [post] z | -| semantics.rb:29:14:29:14 | [post] y | semantics.rb:31:10:31:10 | y | -| semantics.rb:29:14:29:14 | [post] y | semantics.rb:31:10:31:10 | y | -| semantics.rb:29:17:29:17 | [post] z | semantics.rb:32:10:32:10 | z | -| semantics.rb:29:17:29:17 | [post] z | semantics.rb:32:10:32:10 | z | -| semantics.rb:40:5:40:5 | a | semantics.rb:41:8:41:8 | a | -| semantics.rb:40:5:40:5 | a | semantics.rb:41:8:41:8 | a | -| semantics.rb:40:9:40:18 | call to source | semantics.rb:40:5:40:5 | a | -| semantics.rb:40:9:40:18 | call to source | semantics.rb:40:5:40:5 | a | -| semantics.rb:41:8:41:8 | a | semantics.rb:41:16:41:16 | [post] x | -| semantics.rb:41:8:41:8 | a | semantics.rb:41:16:41:16 | [post] x | -| semantics.rb:41:16:41:16 | [post] x | semantics.rb:42:10:42:10 | x | -| semantics.rb:41:16:41:16 | [post] x | semantics.rb:42:10:42:10 | x | -| semantics.rb:46:15:46:24 | call to source | semantics.rb:46:10:46:26 | call to s8 | -| semantics.rb:46:15:46:24 | call to source | semantics.rb:46:10:46:26 | call to s8 | -| semantics.rb:48:9:48:18 | call to source | semantics.rb:47:10:49:7 | call to s8 | -| semantics.rb:48:9:48:18 | call to source | semantics.rb:47:10:49:7 | call to s8 | -| semantics.rb:53:8:53:17 | call to source | semantics.rb:53:23:53:23 | x | -| semantics.rb:53:8:53:17 | call to source | semantics.rb:53:23:53:23 | x | -| semantics.rb:53:23:53:23 | x | semantics.rb:53:31:53:31 | x | -| semantics.rb:53:23:53:23 | x | semantics.rb:53:31:53:31 | x | -| semantics.rb:54:8:54:17 | call to source | semantics.rb:54:24:54:24 | x | -| semantics.rb:54:8:54:17 | call to source | semantics.rb:54:24:54:24 | x | -| semantics.rb:54:24:54:24 | x | semantics.rb:55:14:55:14 | x | -| semantics.rb:54:24:54:24 | x | semantics.rb:55:14:55:14 | x | -| semantics.rb:60:5:60:5 | a | semantics.rb:61:14:61:14 | a | -| semantics.rb:60:5:60:5 | a | semantics.rb:61:14:61:14 | a | -| semantics.rb:60:5:60:5 | a | semantics.rb:62:17:62:17 | a | -| semantics.rb:60:5:60:5 | a | semantics.rb:62:17:62:17 | a | -| semantics.rb:60:5:60:5 | a | semantics.rb:63:19:63:19 | a | -| semantics.rb:60:5:60:5 | a | semantics.rb:63:19:63:19 | a | -| semantics.rb:60:5:60:5 | a | semantics.rb:64:27:64:27 | a | -| semantics.rb:60:5:60:5 | a | semantics.rb:64:27:64:27 | a | -| semantics.rb:60:5:60:5 | a | semantics.rb:66:14:66:15 | &... | -| semantics.rb:60:5:60:5 | a | semantics.rb:66:14:66:15 | &... | -| semantics.rb:60:9:60:18 | call to source | semantics.rb:60:5:60:5 | a | -| semantics.rb:60:9:60:18 | call to source | semantics.rb:60:5:60:5 | a | -| semantics.rb:61:10:61:15 | call to s10 [splat position 0] | semantics.rb:61:10:61:15 | call to s10 | -| semantics.rb:61:14:61:14 | a | semantics.rb:61:10:61:15 | call to s10 | -| semantics.rb:61:14:61:14 | a | semantics.rb:61:10:61:15 | call to s10 | -| semantics.rb:61:14:61:14 | a | semantics.rb:61:10:61:15 | call to s10 [splat position 0] | -| semantics.rb:62:10:62:18 | call to s10 [splat position 1] | semantics.rb:62:10:62:18 | call to s10 | -| semantics.rb:62:17:62:17 | a | semantics.rb:62:10:62:18 | call to s10 | -| semantics.rb:62:17:62:17 | a | semantics.rb:62:10:62:18 | call to s10 | -| semantics.rb:62:17:62:17 | a | semantics.rb:62:10:62:18 | call to s10 [splat position 1] | -| semantics.rb:63:19:63:19 | a | semantics.rb:63:10:63:20 | call to s10 | -| semantics.rb:63:19:63:19 | a | semantics.rb:63:10:63:20 | call to s10 | -| semantics.rb:64:27:64:27 | a | semantics.rb:64:10:64:28 | call to s10 | -| semantics.rb:64:27:64:27 | a | semantics.rb:64:10:64:28 | call to s10 | -| semantics.rb:66:14:66:15 | &... | semantics.rb:66:10:66:16 | call to s10 | -| semantics.rb:66:14:66:15 | &... | semantics.rb:66:10:66:16 | call to s10 | -| semantics.rb:80:5:80:5 | a | semantics.rb:81:5:81:5 | a | -| semantics.rb:80:5:80:5 | a | semantics.rb:81:5:81:5 | a | -| semantics.rb:80:9:80:18 | call to source | semantics.rb:80:5:80:5 | a | -| semantics.rb:80:9:80:18 | call to source | semantics.rb:80:5:80:5 | a | -| semantics.rb:81:5:81:5 | a | semantics.rb:81:11:81:11 | [post] x | -| semantics.rb:81:5:81:5 | a | semantics.rb:81:11:81:11 | [post] x | -| semantics.rb:81:5:81:5 | a | semantics.rb:81:14:81:14 | [post] y | -| semantics.rb:81:5:81:5 | a | semantics.rb:81:14:81:14 | [post] y | -| semantics.rb:81:5:81:5 | a | semantics.rb:81:22:81:22 | [post] z | -| semantics.rb:81:5:81:5 | a | semantics.rb:81:22:81:22 | [post] z | -| semantics.rb:81:11:81:11 | [post] x | semantics.rb:82:10:82:10 | x | -| semantics.rb:81:11:81:11 | [post] x | semantics.rb:82:10:82:10 | x | -| semantics.rb:81:14:81:14 | [post] y | semantics.rb:83:10:83:10 | y | -| semantics.rb:81:14:81:14 | [post] y | semantics.rb:83:10:83:10 | y | -| semantics.rb:81:22:81:22 | [post] z | semantics.rb:84:10:84:10 | z | -| semantics.rb:81:22:81:22 | [post] z | semantics.rb:84:10:84:10 | z | -| semantics.rb:89:5:89:5 | a | semantics.rb:91:19:91:19 | a | -| semantics.rb:89:5:89:5 | a | semantics.rb:91:19:91:19 | a | -| semantics.rb:89:5:89:5 | a | semantics.rb:92:27:92:27 | a | -| semantics.rb:89:5:89:5 | a | semantics.rb:92:27:92:27 | a | -| semantics.rb:89:9:89:18 | call to source | semantics.rb:89:5:89:5 | a | -| semantics.rb:89:9:89:18 | call to source | semantics.rb:89:5:89:5 | a | -| semantics.rb:91:19:91:19 | a | semantics.rb:91:10:91:20 | call to s13 | -| semantics.rb:91:19:91:19 | a | semantics.rb:91:10:91:20 | call to s13 | -| semantics.rb:92:27:92:27 | a | semantics.rb:92:10:92:28 | call to s13 | -| semantics.rb:92:27:92:27 | a | semantics.rb:92:10:92:28 | call to s13 | -| semantics.rb:97:5:97:5 | a | semantics.rb:98:5:98:5 | a | -| semantics.rb:97:5:97:5 | a | semantics.rb:98:5:98:5 | a | -| semantics.rb:97:5:97:5 | a | semantics.rb:99:5:99:5 | a | -| semantics.rb:97:5:97:5 | a | semantics.rb:99:5:99:5 | a | -| semantics.rb:97:9:97:18 | call to source | semantics.rb:97:5:97:5 | a | -| semantics.rb:97:9:97:18 | call to source | semantics.rb:97:5:97:5 | a | -| semantics.rb:98:5:98:5 | a | semantics.rb:98:19:98:19 | [post] x | -| semantics.rb:98:5:98:5 | a | semantics.rb:98:19:98:19 | [post] x | -| semantics.rb:98:19:98:19 | [post] x | semantics.rb:101:10:101:10 | x | -| semantics.rb:98:19:98:19 | [post] x | semantics.rb:101:10:101:10 | x | -| semantics.rb:99:5:99:5 | a | semantics.rb:99:16:99:16 | [post] y | -| semantics.rb:99:5:99:5 | a | semantics.rb:99:16:99:16 | [post] y | -| semantics.rb:99:5:99:5 | a | semantics.rb:99:24:99:24 | [post] z | -| semantics.rb:99:5:99:5 | a | semantics.rb:99:24:99:24 | [post] z | -| semantics.rb:99:16:99:16 | [post] y | semantics.rb:102:10:102:10 | y | -| semantics.rb:99:16:99:16 | [post] y | semantics.rb:102:10:102:10 | y | -| semantics.rb:99:24:99:24 | [post] z | semantics.rb:103:10:103:10 | z | -| semantics.rb:99:24:99:24 | [post] z | semantics.rb:103:10:103:10 | z | -| semantics.rb:107:5:107:5 | a | semantics.rb:109:19:109:19 | a | -| semantics.rb:107:5:107:5 | a | semantics.rb:109:19:109:19 | a | -| semantics.rb:107:9:107:18 | call to source | semantics.rb:107:5:107:5 | a | -| semantics.rb:107:9:107:18 | call to source | semantics.rb:107:5:107:5 | a | -| semantics.rb:108:5:108:5 | b | semantics.rb:110:27:110:27 | b | -| semantics.rb:108:5:108:5 | b | semantics.rb:110:27:110:27 | b | -| semantics.rb:108:9:108:18 | call to source | semantics.rb:108:5:108:5 | b | -| semantics.rb:108:9:108:18 | call to source | semantics.rb:108:5:108:5 | b | -| semantics.rb:109:10:109:28 | call to s15 [hash-splat position :foo] | semantics.rb:109:10:109:34 | ...[...] | -| semantics.rb:109:10:109:28 | call to s15 [hash-splat position :foo] | semantics.rb:109:10:109:34 | ...[...] | -| semantics.rb:109:19:109:19 | a | semantics.rb:109:10:109:28 | call to s15 [hash-splat position :foo] | -| semantics.rb:109:19:109:19 | a | semantics.rb:109:10:109:28 | call to s15 [hash-splat position :foo] | -| semantics.rb:110:10:110:28 | call to s15 [hash-splat position :bar] | semantics.rb:110:10:110:34 | ...[...] | -| semantics.rb:110:10:110:28 | call to s15 [hash-splat position :bar] | semantics.rb:110:10:110:34 | ...[...] | -| semantics.rb:110:27:110:27 | b | semantics.rb:110:10:110:28 | call to s15 [hash-splat position :bar] | -| semantics.rb:110:27:110:27 | b | semantics.rb:110:10:110:28 | call to s15 [hash-splat position :bar] | -| semantics.rb:114:5:114:5 | a | semantics.rb:116:14:116:14 | a | -| semantics.rb:114:5:114:5 | a | semantics.rb:116:14:116:14 | a | -| semantics.rb:114:5:114:5 | a | semantics.rb:119:17:119:17 | a | -| semantics.rb:114:5:114:5 | a | semantics.rb:119:17:119:17 | a | -| semantics.rb:114:9:114:18 | call to source | semantics.rb:114:5:114:5 | a | -| semantics.rb:114:9:114:18 | call to source | semantics.rb:114:5:114:5 | a | -| semantics.rb:115:5:115:5 | b | semantics.rb:121:17:121:17 | b | -| semantics.rb:115:5:115:5 | b | semantics.rb:121:17:121:17 | b | -| semantics.rb:115:9:115:18 | call to source | semantics.rb:115:5:115:5 | b | -| semantics.rb:115:9:115:18 | call to source | semantics.rb:115:5:115:5 | b | -| semantics.rb:116:5:116:5 | h [element :a] | semantics.rb:117:16:117:16 | h [element :a] | -| semantics.rb:116:5:116:5 | h [element :a] | semantics.rb:117:16:117:16 | h [element :a] | -| semantics.rb:116:5:116:5 | h [element :a] | semantics.rb:121:22:121:22 | h [element :a] | -| semantics.rb:116:5:116:5 | h [element :a] | semantics.rb:121:22:121:22 | h [element :a] | -| semantics.rb:116:14:116:14 | a | semantics.rb:116:5:116:5 | h [element :a] | -| semantics.rb:116:14:116:14 | a | semantics.rb:116:5:116:5 | h [element :a] | -| semantics.rb:117:14:117:16 | ** ... [element :a] | semantics.rb:117:10:117:17 | call to s16 | -| semantics.rb:117:14:117:16 | ** ... [element :a] | semantics.rb:117:10:117:17 | call to s16 | -| semantics.rb:117:16:117:16 | h [element :a] | semantics.rb:117:14:117:16 | ** ... [element :a] | -| semantics.rb:117:16:117:16 | h [element :a] | semantics.rb:117:14:117:16 | ** ... [element :a] | -| semantics.rb:119:17:119:17 | a | semantics.rb:119:10:119:18 | call to s16 | -| semantics.rb:119:17:119:17 | a | semantics.rb:119:10:119:18 | call to s16 | -| semantics.rb:121:17:121:17 | b | semantics.rb:121:10:121:23 | call to s16 | -| semantics.rb:121:17:121:17 | b | semantics.rb:121:10:121:23 | call to s16 | -| semantics.rb:121:20:121:22 | ** ... [element :a] | semantics.rb:121:10:121:23 | call to s16 | -| semantics.rb:121:20:121:22 | ** ... [element :a] | semantics.rb:121:10:121:23 | call to s16 | -| semantics.rb:121:22:121:22 | h [element :a] | semantics.rb:121:20:121:22 | ** ... [element :a] | -| semantics.rb:121:22:121:22 | h [element :a] | semantics.rb:121:20:121:22 | ** ... [element :a] | -| semantics.rb:125:5:125:5 | a | semantics.rb:127:14:127:14 | a | -| semantics.rb:125:5:125:5 | a | semantics.rb:128:14:128:14 | a | -| semantics.rb:125:5:125:5 | a | semantics.rb:128:14:128:14 | a | -| semantics.rb:125:9:125:18 | call to source | semantics.rb:125:5:125:5 | a | -| semantics.rb:125:9:125:18 | call to source | semantics.rb:125:5:125:5 | a | -| semantics.rb:126:5:126:5 | b | semantics.rb:127:17:127:17 | b | -| semantics.rb:126:5:126:5 | b | semantics.rb:129:17:129:17 | b | -| semantics.rb:126:5:126:5 | b | semantics.rb:129:17:129:17 | b | -| semantics.rb:126:9:126:18 | call to source | semantics.rb:126:5:126:5 | b | -| semantics.rb:126:9:126:18 | call to source | semantics.rb:126:5:126:5 | b | -| semantics.rb:127:10:127:18 | call to s17 [splat position 0] | semantics.rb:127:10:127:18 | call to s17 | -| semantics.rb:127:10:127:18 | call to s17 [splat position 1] | semantics.rb:127:10:127:18 | call to s17 | -| semantics.rb:127:14:127:14 | a | semantics.rb:127:10:127:18 | call to s17 [splat position 0] | -| semantics.rb:127:17:127:17 | b | semantics.rb:127:10:127:18 | call to s17 [splat position 1] | -| semantics.rb:128:10:128:18 | call to s17 [splat position 0] | semantics.rb:128:10:128:21 | ...[...] | -| semantics.rb:128:10:128:18 | call to s17 [splat position 0] | semantics.rb:128:10:128:21 | ...[...] | -| semantics.rb:128:14:128:14 | a | semantics.rb:128:10:128:18 | call to s17 [splat position 0] | -| semantics.rb:128:14:128:14 | a | semantics.rb:128:10:128:18 | call to s17 [splat position 0] | -| semantics.rb:129:10:129:18 | call to s17 [splat position 1] | semantics.rb:129:10:129:21 | ...[...] | -| semantics.rb:129:10:129:18 | call to s17 [splat position 1] | semantics.rb:129:10:129:21 | ...[...] | -| semantics.rb:129:17:129:17 | b | semantics.rb:129:10:129:18 | call to s17 [splat position 1] | -| semantics.rb:129:17:129:17 | b | semantics.rb:129:10:129:18 | call to s17 [splat position 1] | -| semantics.rb:133:5:133:5 | a | semantics.rb:135:12:135:12 | a | -| semantics.rb:133:5:133:5 | a | semantics.rb:135:12:135:12 | a | -| semantics.rb:133:5:133:5 | a | semantics.rb:137:14:137:14 | a | -| semantics.rb:133:5:133:5 | a | semantics.rb:137:14:137:14 | a | -| semantics.rb:133:9:133:18 | call to source | semantics.rb:133:5:133:5 | a | -| semantics.rb:133:9:133:18 | call to source | semantics.rb:133:5:133:5 | a | -| semantics.rb:134:5:134:5 | b | semantics.rb:135:15:135:15 | b | -| semantics.rb:134:5:134:5 | b | semantics.rb:135:15:135:15 | b | -| semantics.rb:134:9:134:18 | call to source | semantics.rb:134:5:134:5 | b | -| semantics.rb:134:9:134:18 | call to source | semantics.rb:134:5:134:5 | b | -| semantics.rb:135:5:135:7 | arr [element 0] | semantics.rb:136:15:136:17 | arr [element 0] | -| semantics.rb:135:5:135:7 | arr [element 0] | semantics.rb:136:15:136:17 | arr [element 0] | -| semantics.rb:135:5:135:7 | arr [element 1] | semantics.rb:136:15:136:17 | arr [element 1] | -| semantics.rb:135:5:135:7 | arr [element 1] | semantics.rb:136:15:136:17 | arr [element 1] | -| semantics.rb:135:12:135:12 | a | semantics.rb:135:5:135:7 | arr [element 0] | -| semantics.rb:135:12:135:12 | a | semantics.rb:135:5:135:7 | arr [element 0] | -| semantics.rb:135:15:135:15 | b | semantics.rb:135:5:135:7 | arr [element 1] | -| semantics.rb:135:15:135:15 | b | semantics.rb:135:5:135:7 | arr [element 1] | -| semantics.rb:136:14:136:17 | * ... [element 0] | semantics.rb:136:10:136:18 | call to s18 | -| semantics.rb:136:14:136:17 | * ... [element 0] | semantics.rb:136:10:136:18 | call to s18 | -| semantics.rb:136:14:136:17 | * ... [element 1] | semantics.rb:136:10:136:18 | call to s18 | -| semantics.rb:136:14:136:17 | * ... [element 1] | semantics.rb:136:10:136:18 | call to s18 | -| semantics.rb:136:15:136:17 | arr [element 0] | semantics.rb:136:14:136:17 | * ... [element 0] | -| semantics.rb:136:15:136:17 | arr [element 0] | semantics.rb:136:14:136:17 | * ... [element 0] | -| semantics.rb:136:15:136:17 | arr [element 1] | semantics.rb:136:14:136:17 | * ... [element 1] | -| semantics.rb:136:15:136:17 | arr [element 1] | semantics.rb:136:14:136:17 | * ... [element 1] | -| semantics.rb:137:14:137:14 | a | semantics.rb:137:10:137:15 | call to s18 | -| semantics.rb:137:14:137:14 | a | semantics.rb:137:10:137:15 | call to s18 | -| semantics.rb:142:5:142:5 | b | semantics.rb:146:5:146:5 | [post] h [element] | -| semantics.rb:142:5:142:5 | b | semantics.rb:146:5:146:5 | [post] h [element] | -| semantics.rb:142:9:142:18 | call to source | semantics.rb:142:5:142:5 | b | -| semantics.rb:142:9:142:18 | call to source | semantics.rb:142:5:142:5 | b | -| semantics.rb:146:5:146:5 | [post] h [element] | semantics.rb:148:14:148:14 | h [element] | -| semantics.rb:146:5:146:5 | [post] h [element] | semantics.rb:148:14:148:14 | h [element] | -| semantics.rb:148:14:148:14 | h [element] | semantics.rb:148:10:148:15 | call to s19 | -| semantics.rb:148:14:148:14 | h [element] | semantics.rb:148:10:148:15 | call to s19 | -| semantics.rb:152:5:152:5 | a | semantics.rb:153:13:153:13 | a | -| semantics.rb:152:5:152:5 | a | semantics.rb:153:13:153:13 | a | -| semantics.rb:152:9:152:18 | call to source | semantics.rb:152:5:152:5 | a | -| semantics.rb:152:9:152:18 | call to source | semantics.rb:152:5:152:5 | a | -| semantics.rb:153:5:153:5 | x [element] | semantics.rb:154:10:154:10 | x [element] | -| semantics.rb:153:5:153:5 | x [element] | semantics.rb:154:10:154:10 | x [element] | -| semantics.rb:153:5:153:5 | x [element] | semantics.rb:155:10:155:10 | x [element] | -| semantics.rb:153:5:153:5 | x [element] | semantics.rb:155:10:155:10 | x [element] | -| semantics.rb:153:9:153:14 | call to s20 [element] | semantics.rb:153:5:153:5 | x [element] | -| semantics.rb:153:9:153:14 | call to s20 [element] | semantics.rb:153:5:153:5 | x [element] | -| semantics.rb:153:13:153:13 | a | semantics.rb:153:9:153:14 | call to s20 [element] | -| semantics.rb:153:13:153:13 | a | semantics.rb:153:9:153:14 | call to s20 [element] | -| semantics.rb:154:10:154:10 | x [element] | semantics.rb:154:10:154:13 | ...[...] | -| semantics.rb:154:10:154:10 | x [element] | semantics.rb:154:10:154:13 | ...[...] | -| semantics.rb:155:10:155:10 | x [element] | semantics.rb:155:10:155:13 | ...[...] | -| semantics.rb:155:10:155:10 | x [element] | semantics.rb:155:10:155:13 | ...[...] | -| semantics.rb:159:5:159:5 | a | semantics.rb:163:5:163:5 | [post] h [element 0] | -| semantics.rb:159:5:159:5 | a | semantics.rb:163:5:163:5 | [post] h [element 0] | -| semantics.rb:159:9:159:18 | call to source | semantics.rb:159:5:159:5 | a | -| semantics.rb:159:9:159:18 | call to source | semantics.rb:159:5:159:5 | a | -| semantics.rb:160:5:160:5 | b | semantics.rb:164:5:164:5 | [post] h [element] | -| semantics.rb:160:5:160:5 | b | semantics.rb:164:5:164:5 | [post] h [element] | -| semantics.rb:160:9:160:18 | call to source | semantics.rb:160:5:160:5 | b | -| semantics.rb:160:9:160:18 | call to source | semantics.rb:160:5:160:5 | b | -| semantics.rb:163:5:163:5 | [post] h [element 0] | semantics.rb:166:14:166:14 | h [element 0] | -| semantics.rb:163:5:163:5 | [post] h [element 0] | semantics.rb:166:14:166:14 | h [element 0] | -| semantics.rb:164:5:164:5 | [post] h [element] | semantics.rb:166:14:166:14 | h [element] | -| semantics.rb:164:5:164:5 | [post] h [element] | semantics.rb:166:14:166:14 | h [element] | -| semantics.rb:166:14:166:14 | h [element 0] | semantics.rb:166:10:166:15 | call to s21 | -| semantics.rb:166:14:166:14 | h [element 0] | semantics.rb:166:10:166:15 | call to s21 | -| semantics.rb:166:14:166:14 | h [element] | semantics.rb:166:10:166:15 | call to s21 | -| semantics.rb:166:14:166:14 | h [element] | semantics.rb:166:10:166:15 | call to s21 | -| semantics.rb:170:5:170:5 | a | semantics.rb:171:13:171:13 | a | -| semantics.rb:170:5:170:5 | a | semantics.rb:171:13:171:13 | a | -| semantics.rb:170:9:170:18 | call to source | semantics.rb:170:5:170:5 | a | -| semantics.rb:170:9:170:18 | call to source | semantics.rb:170:5:170:5 | a | -| semantics.rb:171:5:171:5 | x [element] | semantics.rb:172:10:172:10 | x [element] | -| semantics.rb:171:5:171:5 | x [element] | semantics.rb:172:10:172:10 | x [element] | -| semantics.rb:171:5:171:5 | x [element] | semantics.rb:173:10:173:10 | x [element] | -| semantics.rb:171:5:171:5 | x [element] | semantics.rb:173:10:173:10 | x [element] | -| semantics.rb:171:9:171:14 | call to s22 [element] | semantics.rb:171:5:171:5 | x [element] | -| semantics.rb:171:9:171:14 | call to s22 [element] | semantics.rb:171:5:171:5 | x [element] | -| semantics.rb:171:13:171:13 | a | semantics.rb:171:9:171:14 | call to s22 [element] | -| semantics.rb:171:13:171:13 | a | semantics.rb:171:9:171:14 | call to s22 [element] | -| semantics.rb:172:10:172:10 | x [element] | semantics.rb:172:10:172:13 | ...[...] | -| semantics.rb:172:10:172:10 | x [element] | semantics.rb:172:10:172:13 | ...[...] | -| semantics.rb:173:10:173:10 | x [element] | semantics.rb:173:10:173:13 | ...[...] | -| semantics.rb:173:10:173:10 | x [element] | semantics.rb:173:10:173:13 | ...[...] | -| semantics.rb:177:5:177:5 | a | semantics.rb:180:5:180:5 | [post] h [element 0] | -| semantics.rb:177:5:177:5 | a | semantics.rb:180:5:180:5 | [post] h [element 0] | -| semantics.rb:177:9:177:18 | call to source | semantics.rb:177:5:177:5 | a | -| semantics.rb:177:9:177:18 | call to source | semantics.rb:177:5:177:5 | a | -| semantics.rb:180:5:180:5 | [post] h [element 0] | semantics.rb:181:5:181:5 | h [element 0] | -| semantics.rb:180:5:180:5 | [post] h [element 0] | semantics.rb:181:5:181:5 | h [element 0] | -| semantics.rb:181:5:181:5 | [post] h [element 0] | semantics.rb:182:14:182:14 | h [element 0] | -| semantics.rb:181:5:181:5 | [post] h [element 0] | semantics.rb:182:14:182:14 | h [element 0] | -| semantics.rb:181:5:181:5 | h [element 0] | semantics.rb:181:5:181:5 | [post] h [element 0] | -| semantics.rb:181:5:181:5 | h [element 0] | semantics.rb:181:5:181:5 | [post] h [element 0] | -| semantics.rb:182:14:182:14 | h [element 0] | semantics.rb:182:10:182:15 | call to s23 | -| semantics.rb:182:14:182:14 | h [element 0] | semantics.rb:182:10:182:15 | call to s23 | -| semantics.rb:186:5:186:5 | a | semantics.rb:187:13:187:13 | a | -| semantics.rb:186:5:186:5 | a | semantics.rb:187:13:187:13 | a | -| semantics.rb:186:9:186:18 | call to source | semantics.rb:186:5:186:5 | a | -| semantics.rb:186:9:186:18 | call to source | semantics.rb:186:5:186:5 | a | -| semantics.rb:187:5:187:5 | x [element 0] | semantics.rb:188:10:188:10 | x [element 0] | -| semantics.rb:187:5:187:5 | x [element 0] | semantics.rb:188:10:188:10 | x [element 0] | -| semantics.rb:187:5:187:5 | x [element 0] | semantics.rb:190:10:190:10 | x [element 0] | -| semantics.rb:187:5:187:5 | x [element 0] | semantics.rb:190:10:190:10 | x [element 0] | -| semantics.rb:187:9:187:14 | call to s24 [element 0] | semantics.rb:187:5:187:5 | x [element 0] | -| semantics.rb:187:9:187:14 | call to s24 [element 0] | semantics.rb:187:5:187:5 | x [element 0] | -| semantics.rb:187:13:187:13 | a | semantics.rb:187:9:187:14 | call to s24 [element 0] | -| semantics.rb:187:13:187:13 | a | semantics.rb:187:9:187:14 | call to s24 [element 0] | -| semantics.rb:188:10:188:10 | x [element 0] | semantics.rb:188:10:188:13 | ...[...] | -| semantics.rb:188:10:188:10 | x [element 0] | semantics.rb:188:10:188:13 | ...[...] | -| semantics.rb:190:10:190:10 | x [element 0] | semantics.rb:190:10:190:13 | ...[...] | -| semantics.rb:190:10:190:10 | x [element 0] | semantics.rb:190:10:190:13 | ...[...] | -| semantics.rb:194:5:194:5 | a | semantics.rb:197:5:197:5 | [post] h [element 0] | -| semantics.rb:194:5:194:5 | a | semantics.rb:197:5:197:5 | [post] h [element 0] | -| semantics.rb:194:9:194:18 | call to source | semantics.rb:194:5:194:5 | a | -| semantics.rb:194:9:194:18 | call to source | semantics.rb:194:5:194:5 | a | -| semantics.rb:197:5:197:5 | [post] h [element 0] | semantics.rb:198:5:198:5 | h [element 0] | -| semantics.rb:197:5:197:5 | [post] h [element 0] | semantics.rb:198:5:198:5 | h [element 0] | -| semantics.rb:198:5:198:5 | [post] h [element 0] | semantics.rb:199:14:199:14 | h [element 0] | -| semantics.rb:198:5:198:5 | [post] h [element 0] | semantics.rb:199:14:199:14 | h [element 0] | -| semantics.rb:198:5:198:5 | h [element 0] | semantics.rb:198:5:198:5 | [post] h [element 0] | -| semantics.rb:198:5:198:5 | h [element 0] | semantics.rb:198:5:198:5 | [post] h [element 0] | -| semantics.rb:199:14:199:14 | h [element 0] | semantics.rb:199:10:199:15 | call to s25 | -| semantics.rb:199:14:199:14 | h [element 0] | semantics.rb:199:10:199:15 | call to s25 | -| semantics.rb:203:5:203:5 | a | semantics.rb:204:13:204:13 | a | -| semantics.rb:203:5:203:5 | a | semantics.rb:204:13:204:13 | a | -| semantics.rb:203:9:203:18 | call to source | semantics.rb:203:5:203:5 | a | -| semantics.rb:203:9:203:18 | call to source | semantics.rb:203:5:203:5 | a | -| semantics.rb:204:5:204:5 | x [element 0] | semantics.rb:205:10:205:10 | x [element 0] | -| semantics.rb:204:5:204:5 | x [element 0] | semantics.rb:205:10:205:10 | x [element 0] | -| semantics.rb:204:5:204:5 | x [element 0] | semantics.rb:207:10:207:10 | x [element 0] | -| semantics.rb:204:5:204:5 | x [element 0] | semantics.rb:207:10:207:10 | x [element 0] | -| semantics.rb:204:9:204:14 | call to s26 [element 0] | semantics.rb:204:5:204:5 | x [element 0] | -| semantics.rb:204:9:204:14 | call to s26 [element 0] | semantics.rb:204:5:204:5 | x [element 0] | -| semantics.rb:204:13:204:13 | a | semantics.rb:204:9:204:14 | call to s26 [element 0] | -| semantics.rb:204:13:204:13 | a | semantics.rb:204:9:204:14 | call to s26 [element 0] | -| semantics.rb:205:10:205:10 | x [element 0] | semantics.rb:205:10:205:13 | ...[...] | -| semantics.rb:205:10:205:10 | x [element 0] | semantics.rb:205:10:205:13 | ...[...] | -| semantics.rb:207:10:207:10 | x [element 0] | semantics.rb:207:10:207:13 | ...[...] | -| semantics.rb:207:10:207:10 | x [element 0] | semantics.rb:207:10:207:13 | ...[...] | -| semantics.rb:212:5:212:5 | b | semantics.rb:218:5:218:5 | [post] h [element 1] | -| semantics.rb:212:5:212:5 | b | semantics.rb:218:5:218:5 | [post] h [element 1] | -| semantics.rb:212:9:212:18 | call to source | semantics.rb:212:5:212:5 | b | -| semantics.rb:212:9:212:18 | call to source | semantics.rb:212:5:212:5 | b | -| semantics.rb:213:5:213:5 | c | semantics.rb:219:5:219:5 | [post] h [element 2] | -| semantics.rb:213:5:213:5 | c | semantics.rb:219:5:219:5 | [post] h [element 2] | -| semantics.rb:213:9:213:18 | call to source | semantics.rb:213:5:213:5 | c | -| semantics.rb:213:9:213:18 | call to source | semantics.rb:213:5:213:5 | c | -| semantics.rb:214:5:214:5 | d | semantics.rb:220:5:220:5 | [post] h [element] | -| semantics.rb:214:5:214:5 | d | semantics.rb:220:5:220:5 | [post] h [element] | -| semantics.rb:214:9:214:18 | call to source | semantics.rb:214:5:214:5 | d | -| semantics.rb:214:9:214:18 | call to source | semantics.rb:214:5:214:5 | d | -| semantics.rb:218:5:218:5 | [post] h [element 1] | semantics.rb:219:5:219:5 | h [element 1] | -| semantics.rb:218:5:218:5 | [post] h [element 1] | semantics.rb:219:5:219:5 | h [element 1] | -| semantics.rb:219:5:219:5 | [post] h [element 1] | semantics.rb:222:14:222:14 | h [element 1] | -| semantics.rb:219:5:219:5 | [post] h [element 1] | semantics.rb:222:14:222:14 | h [element 1] | -| semantics.rb:219:5:219:5 | [post] h [element 2] | semantics.rb:222:14:222:14 | h [element 2] | -| semantics.rb:219:5:219:5 | [post] h [element 2] | semantics.rb:222:14:222:14 | h [element 2] | -| semantics.rb:219:5:219:5 | h [element 1] | semantics.rb:219:5:219:5 | [post] h [element 1] | -| semantics.rb:219:5:219:5 | h [element 1] | semantics.rb:219:5:219:5 | [post] h [element 1] | -| semantics.rb:220:5:220:5 | [post] h [element] | semantics.rb:222:14:222:14 | h [element] | -| semantics.rb:220:5:220:5 | [post] h [element] | semantics.rb:222:14:222:14 | h [element] | -| semantics.rb:222:14:222:14 | h [element 1] | semantics.rb:222:10:222:15 | call to s27 | -| semantics.rb:222:14:222:14 | h [element 1] | semantics.rb:222:10:222:15 | call to s27 | -| semantics.rb:222:14:222:14 | h [element 2] | semantics.rb:222:10:222:15 | call to s27 | -| semantics.rb:222:14:222:14 | h [element 2] | semantics.rb:222:10:222:15 | call to s27 | -| semantics.rb:222:14:222:14 | h [element] | semantics.rb:222:10:222:15 | call to s27 | -| semantics.rb:222:14:222:14 | h [element] | semantics.rb:222:10:222:15 | call to s27 | -| semantics.rb:226:5:226:5 | a | semantics.rb:227:13:227:13 | a | -| semantics.rb:226:5:226:5 | a | semantics.rb:227:13:227:13 | a | -| semantics.rb:226:9:226:18 | call to source | semantics.rb:226:5:226:5 | a | -| semantics.rb:226:9:226:18 | call to source | semantics.rb:226:5:226:5 | a | -| semantics.rb:227:5:227:5 | x [element] | semantics.rb:228:10:228:10 | x [element] | -| semantics.rb:227:5:227:5 | x [element] | semantics.rb:228:10:228:10 | x [element] | -| semantics.rb:227:5:227:5 | x [element] | semantics.rb:229:10:229:10 | x [element] | -| semantics.rb:227:5:227:5 | x [element] | semantics.rb:229:10:229:10 | x [element] | -| semantics.rb:227:5:227:5 | x [element] | semantics.rb:230:10:230:10 | x [element] | -| semantics.rb:227:5:227:5 | x [element] | semantics.rb:230:10:230:10 | x [element] | -| semantics.rb:227:5:227:5 | x [element] | semantics.rb:231:10:231:10 | x [element] | -| semantics.rb:227:5:227:5 | x [element] | semantics.rb:231:10:231:10 | x [element] | -| semantics.rb:227:9:227:14 | call to s28 [element] | semantics.rb:227:5:227:5 | x [element] | -| semantics.rb:227:9:227:14 | call to s28 [element] | semantics.rb:227:5:227:5 | x [element] | -| semantics.rb:227:13:227:13 | a | semantics.rb:227:9:227:14 | call to s28 [element] | -| semantics.rb:227:13:227:13 | a | semantics.rb:227:9:227:14 | call to s28 [element] | -| semantics.rb:228:10:228:10 | x [element] | semantics.rb:228:10:228:13 | ...[...] | -| semantics.rb:228:10:228:10 | x [element] | semantics.rb:228:10:228:13 | ...[...] | -| semantics.rb:229:10:229:10 | x [element] | semantics.rb:229:10:229:13 | ...[...] | -| semantics.rb:229:10:229:10 | x [element] | semantics.rb:229:10:229:13 | ...[...] | -| semantics.rb:230:10:230:10 | x [element] | semantics.rb:230:10:230:13 | ...[...] | -| semantics.rb:230:10:230:10 | x [element] | semantics.rb:230:10:230:13 | ...[...] | -| semantics.rb:231:10:231:10 | x [element] | semantics.rb:231:10:231:13 | ...[...] | -| semantics.rb:231:10:231:10 | x [element] | semantics.rb:231:10:231:13 | ...[...] | -| semantics.rb:236:5:236:5 | b | semantics.rb:241:5:241:5 | [post] h [element 1] | -| semantics.rb:236:5:236:5 | b | semantics.rb:241:5:241:5 | [post] h [element 1] | -| semantics.rb:236:9:236:18 | call to source | semantics.rb:236:5:236:5 | b | -| semantics.rb:236:9:236:18 | call to source | semantics.rb:236:5:236:5 | b | -| semantics.rb:237:5:237:5 | c | semantics.rb:242:5:242:5 | [post] h [element 2] | -| semantics.rb:237:5:237:5 | c | semantics.rb:242:5:242:5 | [post] h [element 2] | -| semantics.rb:237:9:237:18 | call to source | semantics.rb:237:5:237:5 | c | -| semantics.rb:237:9:237:18 | call to source | semantics.rb:237:5:237:5 | c | -| semantics.rb:241:5:241:5 | [post] h [element 1] | semantics.rb:242:5:242:5 | h [element 1] | -| semantics.rb:241:5:241:5 | [post] h [element 1] | semantics.rb:242:5:242:5 | h [element 1] | -| semantics.rb:242:5:242:5 | [post] h [element 1] | semantics.rb:245:14:245:14 | h [element 1] | -| semantics.rb:242:5:242:5 | [post] h [element 1] | semantics.rb:245:14:245:14 | h [element 1] | -| semantics.rb:242:5:242:5 | [post] h [element 2] | semantics.rb:245:14:245:14 | h [element 2] | -| semantics.rb:242:5:242:5 | [post] h [element 2] | semantics.rb:245:14:245:14 | h [element 2] | -| semantics.rb:242:5:242:5 | h [element 1] | semantics.rb:242:5:242:5 | [post] h [element 1] | -| semantics.rb:242:5:242:5 | h [element 1] | semantics.rb:242:5:242:5 | [post] h [element 1] | -| semantics.rb:245:14:245:14 | h [element 1] | semantics.rb:245:10:245:15 | call to s29 | -| semantics.rb:245:14:245:14 | h [element 1] | semantics.rb:245:10:245:15 | call to s29 | -| semantics.rb:245:14:245:14 | h [element 2] | semantics.rb:245:10:245:15 | call to s29 | -| semantics.rb:245:14:245:14 | h [element 2] | semantics.rb:245:10:245:15 | call to s29 | -| semantics.rb:249:5:249:5 | a | semantics.rb:250:13:250:13 | a | -| semantics.rb:249:5:249:5 | a | semantics.rb:250:13:250:13 | a | -| semantics.rb:249:9:249:18 | call to source | semantics.rb:249:5:249:5 | a | -| semantics.rb:249:9:249:18 | call to source | semantics.rb:249:5:249:5 | a | -| semantics.rb:250:5:250:5 | x [element] | semantics.rb:251:10:251:10 | x [element] | -| semantics.rb:250:5:250:5 | x [element] | semantics.rb:251:10:251:10 | x [element] | -| semantics.rb:250:5:250:5 | x [element] | semantics.rb:252:10:252:10 | x [element] | -| semantics.rb:250:5:250:5 | x [element] | semantics.rb:252:10:252:10 | x [element] | -| semantics.rb:250:5:250:5 | x [element] | semantics.rb:253:10:253:10 | x [element] | -| semantics.rb:250:5:250:5 | x [element] | semantics.rb:253:10:253:10 | x [element] | -| semantics.rb:250:5:250:5 | x [element] | semantics.rb:254:10:254:10 | x [element] | -| semantics.rb:250:5:250:5 | x [element] | semantics.rb:254:10:254:10 | x [element] | -| semantics.rb:250:9:250:14 | call to s30 [element] | semantics.rb:250:5:250:5 | x [element] | -| semantics.rb:250:9:250:14 | call to s30 [element] | semantics.rb:250:5:250:5 | x [element] | -| semantics.rb:250:13:250:13 | a | semantics.rb:250:9:250:14 | call to s30 [element] | -| semantics.rb:250:13:250:13 | a | semantics.rb:250:9:250:14 | call to s30 [element] | -| semantics.rb:251:10:251:10 | x [element] | semantics.rb:251:10:251:13 | ...[...] | -| semantics.rb:251:10:251:10 | x [element] | semantics.rb:251:10:251:13 | ...[...] | -| semantics.rb:252:10:252:10 | x [element] | semantics.rb:252:10:252:13 | ...[...] | -| semantics.rb:252:10:252:10 | x [element] | semantics.rb:252:10:252:13 | ...[...] | -| semantics.rb:253:10:253:10 | x [element] | semantics.rb:253:10:253:13 | ...[...] | -| semantics.rb:253:10:253:10 | x [element] | semantics.rb:253:10:253:13 | ...[...] | -| semantics.rb:254:10:254:10 | x [element] | semantics.rb:254:10:254:13 | ...[...] | -| semantics.rb:254:10:254:10 | x [element] | semantics.rb:254:10:254:13 | ...[...] | -| semantics.rb:258:5:258:5 | [post] h [element :foo] | semantics.rb:259:5:259:5 | h [element :foo] | -| semantics.rb:258:5:258:5 | [post] h [element :foo] | semantics.rb:259:5:259:5 | h [element :foo] | -| semantics.rb:258:15:258:25 | call to source | semantics.rb:258:5:258:5 | [post] h [element :foo] | -| semantics.rb:258:15:258:25 | call to source | semantics.rb:258:5:258:5 | [post] h [element :foo] | -| semantics.rb:259:5:259:5 | [post] h [element :foo] | semantics.rb:260:5:260:5 | h [element :foo] | -| semantics.rb:259:5:259:5 | [post] h [element :foo] | semantics.rb:260:5:260:5 | h [element :foo] | -| semantics.rb:259:5:259:5 | h [element :foo] | semantics.rb:259:5:259:5 | [post] h [element :foo] | -| semantics.rb:259:5:259:5 | h [element :foo] | semantics.rb:259:5:259:5 | [post] h [element :foo] | -| semantics.rb:260:5:260:5 | [post] h [element :foo] | semantics.rb:263:14:263:14 | h [element :foo] | -| semantics.rb:260:5:260:5 | [post] h [element :foo] | semantics.rb:263:14:263:14 | h [element :foo] | -| semantics.rb:260:5:260:5 | h [element :foo] | semantics.rb:260:5:260:5 | [post] h [element :foo] | -| semantics.rb:260:5:260:5 | h [element :foo] | semantics.rb:260:5:260:5 | [post] h [element :foo] | -| semantics.rb:261:5:261:5 | [post] h [element] | semantics.rb:263:14:263:14 | h [element] | -| semantics.rb:261:5:261:5 | [post] h [element] | semantics.rb:263:14:263:14 | h [element] | -| semantics.rb:261:12:261:22 | call to source | semantics.rb:261:5:261:5 | [post] h [element] | -| semantics.rb:261:12:261:22 | call to source | semantics.rb:261:5:261:5 | [post] h [element] | -| semantics.rb:263:14:263:14 | h [element :foo] | semantics.rb:263:10:263:15 | call to s31 | -| semantics.rb:263:14:263:14 | h [element :foo] | semantics.rb:263:10:263:15 | call to s31 | -| semantics.rb:263:14:263:14 | h [element] | semantics.rb:263:10:263:15 | call to s31 | -| semantics.rb:263:14:263:14 | h [element] | semantics.rb:263:10:263:15 | call to s31 | -| semantics.rb:268:5:268:5 | [post] h [element foo] | semantics.rb:269:5:269:5 | h [element foo] | -| semantics.rb:268:5:268:5 | [post] h [element foo] | semantics.rb:269:5:269:5 | h [element foo] | -| semantics.rb:268:16:268:26 | call to source | semantics.rb:268:5:268:5 | [post] h [element foo] | -| semantics.rb:268:16:268:26 | call to source | semantics.rb:268:5:268:5 | [post] h [element foo] | -| semantics.rb:269:5:269:5 | [post] h [element foo] | semantics.rb:270:5:270:5 | h [element foo] | -| semantics.rb:269:5:269:5 | [post] h [element foo] | semantics.rb:270:5:270:5 | h [element foo] | -| semantics.rb:269:5:269:5 | h [element foo] | semantics.rb:269:5:269:5 | [post] h [element foo] | -| semantics.rb:269:5:269:5 | h [element foo] | semantics.rb:269:5:269:5 | [post] h [element foo] | -| semantics.rb:270:5:270:5 | [post] h [element foo] | semantics.rb:273:14:273:14 | h [element foo] | -| semantics.rb:270:5:270:5 | [post] h [element foo] | semantics.rb:273:14:273:14 | h [element foo] | -| semantics.rb:270:5:270:5 | h [element foo] | semantics.rb:270:5:270:5 | [post] h [element foo] | -| semantics.rb:270:5:270:5 | h [element foo] | semantics.rb:270:5:270:5 | [post] h [element foo] | -| semantics.rb:271:5:271:5 | [post] h [element] | semantics.rb:273:14:273:14 | h [element] | -| semantics.rb:271:5:271:5 | [post] h [element] | semantics.rb:273:14:273:14 | h [element] | -| semantics.rb:271:12:271:22 | call to source | semantics.rb:271:5:271:5 | [post] h [element] | -| semantics.rb:271:12:271:22 | call to source | semantics.rb:271:5:271:5 | [post] h [element] | -| semantics.rb:273:14:273:14 | h [element foo] | semantics.rb:273:10:273:15 | call to s32 | -| semantics.rb:273:14:273:14 | h [element foo] | semantics.rb:273:10:273:15 | call to s32 | -| semantics.rb:273:14:273:14 | h [element] | semantics.rb:273:10:273:15 | call to s32 | -| semantics.rb:273:14:273:14 | h [element] | semantics.rb:273:10:273:15 | call to s32 | -| semantics.rb:281:5:281:5 | [post] h [element] | semantics.rb:282:5:282:5 | h [element] | -| semantics.rb:281:5:281:5 | [post] h [element] | semantics.rb:282:5:282:5 | h [element] | -| semantics.rb:281:12:281:22 | call to source | semantics.rb:281:5:281:5 | [post] h [element] | -| semantics.rb:281:12:281:22 | call to source | semantics.rb:281:5:281:5 | [post] h [element] | -| semantics.rb:282:5:282:5 | [post] h [element nil] | semantics.rb:283:5:283:5 | h [element nil] | -| semantics.rb:282:5:282:5 | [post] h [element nil] | semantics.rb:283:5:283:5 | h [element nil] | -| semantics.rb:282:5:282:5 | [post] h [element] | semantics.rb:283:5:283:5 | h [element] | -| semantics.rb:282:5:282:5 | [post] h [element] | semantics.rb:283:5:283:5 | h [element] | -| semantics.rb:282:5:282:5 | h [element] | semantics.rb:282:5:282:5 | [post] h [element] | -| semantics.rb:282:5:282:5 | h [element] | semantics.rb:282:5:282:5 | [post] h [element] | -| semantics.rb:282:14:282:24 | call to source | semantics.rb:282:5:282:5 | [post] h [element nil] | -| semantics.rb:282:14:282:24 | call to source | semantics.rb:282:5:282:5 | [post] h [element nil] | -| semantics.rb:283:5:283:5 | [post] h [element nil] | semantics.rb:284:5:284:5 | h [element nil] | -| semantics.rb:283:5:283:5 | [post] h [element nil] | semantics.rb:284:5:284:5 | h [element nil] | -| semantics.rb:283:5:283:5 | [post] h [element true] | semantics.rb:284:5:284:5 | h [element true] | -| semantics.rb:283:5:283:5 | [post] h [element true] | semantics.rb:284:5:284:5 | h [element true] | -| semantics.rb:283:5:283:5 | [post] h [element] | semantics.rb:284:5:284:5 | h [element] | -| semantics.rb:283:5:283:5 | [post] h [element] | semantics.rb:284:5:284:5 | h [element] | -| semantics.rb:283:5:283:5 | h [element nil] | semantics.rb:283:5:283:5 | [post] h [element nil] | -| semantics.rb:283:5:283:5 | h [element nil] | semantics.rb:283:5:283:5 | [post] h [element nil] | -| semantics.rb:283:5:283:5 | h [element] | semantics.rb:283:5:283:5 | [post] h [element] | -| semantics.rb:283:5:283:5 | h [element] | semantics.rb:283:5:283:5 | [post] h [element] | -| semantics.rb:283:15:283:25 | call to source | semantics.rb:283:5:283:5 | [post] h [element true] | -| semantics.rb:283:15:283:25 | call to source | semantics.rb:283:5:283:5 | [post] h [element true] | -| semantics.rb:284:5:284:5 | [post] h [element false] | semantics.rb:286:14:286:14 | h [element false] | -| semantics.rb:284:5:284:5 | [post] h [element false] | semantics.rb:286:14:286:14 | h [element false] | -| semantics.rb:284:5:284:5 | [post] h [element nil] | semantics.rb:286:14:286:14 | h [element nil] | -| semantics.rb:284:5:284:5 | [post] h [element nil] | semantics.rb:286:14:286:14 | h [element nil] | -| semantics.rb:284:5:284:5 | [post] h [element true] | semantics.rb:286:14:286:14 | h [element true] | -| semantics.rb:284:5:284:5 | [post] h [element true] | semantics.rb:286:14:286:14 | h [element true] | -| semantics.rb:284:5:284:5 | [post] h [element] | semantics.rb:286:14:286:14 | h [element] | -| semantics.rb:284:5:284:5 | [post] h [element] | semantics.rb:286:14:286:14 | h [element] | -| semantics.rb:284:5:284:5 | h [element nil] | semantics.rb:284:5:284:5 | [post] h [element nil] | -| semantics.rb:284:5:284:5 | h [element nil] | semantics.rb:284:5:284:5 | [post] h [element nil] | -| semantics.rb:284:5:284:5 | h [element true] | semantics.rb:284:5:284:5 | [post] h [element true] | -| semantics.rb:284:5:284:5 | h [element true] | semantics.rb:284:5:284:5 | [post] h [element true] | -| semantics.rb:284:5:284:5 | h [element] | semantics.rb:284:5:284:5 | [post] h [element] | -| semantics.rb:284:5:284:5 | h [element] | semantics.rb:284:5:284:5 | [post] h [element] | -| semantics.rb:284:16:284:26 | call to source | semantics.rb:284:5:284:5 | [post] h [element false] | -| semantics.rb:284:16:284:26 | call to source | semantics.rb:284:5:284:5 | [post] h [element false] | -| semantics.rb:286:14:286:14 | h [element false] | semantics.rb:286:10:286:15 | call to s33 | -| semantics.rb:286:14:286:14 | h [element false] | semantics.rb:286:10:286:15 | call to s33 | -| semantics.rb:286:14:286:14 | h [element nil] | semantics.rb:286:10:286:15 | call to s33 | -| semantics.rb:286:14:286:14 | h [element nil] | semantics.rb:286:10:286:15 | call to s33 | -| semantics.rb:286:14:286:14 | h [element true] | semantics.rb:286:10:286:15 | call to s33 | -| semantics.rb:286:14:286:14 | h [element true] | semantics.rb:286:10:286:15 | call to s33 | -| semantics.rb:286:14:286:14 | h [element] | semantics.rb:286:10:286:15 | call to s33 | -| semantics.rb:286:14:286:14 | h [element] | semantics.rb:286:10:286:15 | call to s33 | -| semantics.rb:290:5:290:5 | x [element :foo] | semantics.rb:291:10:291:10 | x [element :foo] | -| semantics.rb:290:5:290:5 | x [element :foo] | semantics.rb:291:10:291:10 | x [element :foo] | -| semantics.rb:290:5:290:5 | x [element :foo] | semantics.rb:293:10:293:10 | x [element :foo] | -| semantics.rb:290:5:290:5 | x [element :foo] | semantics.rb:293:10:293:10 | x [element :foo] | -| semantics.rb:290:9:290:24 | call to s35 [element :foo] | semantics.rb:290:5:290:5 | x [element :foo] | -| semantics.rb:290:9:290:24 | call to s35 [element :foo] | semantics.rb:290:5:290:5 | x [element :foo] | -| semantics.rb:290:13:290:23 | call to source | semantics.rb:290:9:290:24 | call to s35 [element :foo] | -| semantics.rb:290:13:290:23 | call to source | semantics.rb:290:9:290:24 | call to s35 [element :foo] | -| semantics.rb:291:10:291:10 | x [element :foo] | semantics.rb:291:10:291:16 | ...[...] | -| semantics.rb:291:10:291:10 | x [element :foo] | semantics.rb:291:10:291:16 | ...[...] | -| semantics.rb:293:10:293:10 | x [element :foo] | semantics.rb:293:10:293:13 | ...[...] | -| semantics.rb:293:10:293:10 | x [element :foo] | semantics.rb:293:10:293:13 | ...[...] | -| semantics.rb:297:5:297:5 | x [element foo] | semantics.rb:299:10:299:10 | x [element foo] | -| semantics.rb:297:5:297:5 | x [element foo] | semantics.rb:299:10:299:10 | x [element foo] | -| semantics.rb:297:5:297:5 | x [element foo] | semantics.rb:301:10:301:10 | x [element foo] | -| semantics.rb:297:5:297:5 | x [element foo] | semantics.rb:301:10:301:10 | x [element foo] | -| semantics.rb:297:9:297:24 | call to s36 [element foo] | semantics.rb:297:5:297:5 | x [element foo] | -| semantics.rb:297:9:297:24 | call to s36 [element foo] | semantics.rb:297:5:297:5 | x [element foo] | -| semantics.rb:297:13:297:23 | call to source | semantics.rb:297:9:297:24 | call to s36 [element foo] | -| semantics.rb:297:13:297:23 | call to source | semantics.rb:297:9:297:24 | call to s36 [element foo] | -| semantics.rb:299:10:299:10 | x [element foo] | semantics.rb:299:10:299:17 | ...[...] | -| semantics.rb:299:10:299:10 | x [element foo] | semantics.rb:299:10:299:17 | ...[...] | -| semantics.rb:301:10:301:10 | x [element foo] | semantics.rb:301:10:301:13 | ...[...] | -| semantics.rb:301:10:301:10 | x [element foo] | semantics.rb:301:10:301:13 | ...[...] | -| semantics.rb:305:5:305:5 | x [element true] | semantics.rb:307:10:307:10 | x [element true] | -| semantics.rb:305:5:305:5 | x [element true] | semantics.rb:307:10:307:10 | x [element true] | -| semantics.rb:305:5:305:5 | x [element true] | semantics.rb:309:10:309:10 | x [element true] | -| semantics.rb:305:5:305:5 | x [element true] | semantics.rb:309:10:309:10 | x [element true] | -| semantics.rb:305:9:305:24 | call to s37 [element true] | semantics.rb:305:5:305:5 | x [element true] | -| semantics.rb:305:9:305:24 | call to s37 [element true] | semantics.rb:305:5:305:5 | x [element true] | -| semantics.rb:305:13:305:23 | call to source | semantics.rb:305:9:305:24 | call to s37 [element true] | -| semantics.rb:305:13:305:23 | call to source | semantics.rb:305:9:305:24 | call to s37 [element true] | -| semantics.rb:307:10:307:10 | x [element true] | semantics.rb:307:10:307:16 | ...[...] | -| semantics.rb:307:10:307:10 | x [element true] | semantics.rb:307:10:307:16 | ...[...] | -| semantics.rb:309:10:309:10 | x [element true] | semantics.rb:309:10:309:13 | ...[...] | -| semantics.rb:309:10:309:10 | x [element true] | semantics.rb:309:10:309:13 | ...[...] | -| semantics.rb:313:5:313:5 | [post] h [element foo] | semantics.rb:316:14:316:14 | h [element foo] | -| semantics.rb:313:5:313:5 | [post] h [element foo] | semantics.rb:316:14:316:14 | h [element foo] | -| semantics.rb:313:16:313:26 | call to source | semantics.rb:313:5:313:5 | [post] h [element foo] | -| semantics.rb:313:16:313:26 | call to source | semantics.rb:313:5:313:5 | [post] h [element foo] | -| semantics.rb:316:14:316:14 | h [element foo] | semantics.rb:316:10:316:15 | call to s38 | -| semantics.rb:316:14:316:14 | h [element foo] | semantics.rb:316:10:316:15 | call to s38 | -| semantics.rb:320:5:320:5 | x [element :foo] | semantics.rb:322:10:322:10 | x [element :foo] | -| semantics.rb:320:5:320:5 | x [element :foo] | semantics.rb:322:10:322:10 | x [element :foo] | -| semantics.rb:320:5:320:5 | x [element :foo] | semantics.rb:323:10:323:10 | x [element :foo] | -| semantics.rb:320:5:320:5 | x [element :foo] | semantics.rb:323:10:323:10 | x [element :foo] | -| semantics.rb:320:9:320:24 | call to s39 [element :foo] | semantics.rb:320:5:320:5 | x [element :foo] | -| semantics.rb:320:9:320:24 | call to s39 [element :foo] | semantics.rb:320:5:320:5 | x [element :foo] | -| semantics.rb:320:13:320:23 | call to source | semantics.rb:320:9:320:24 | call to s39 [element :foo] | -| semantics.rb:320:13:320:23 | call to source | semantics.rb:320:9:320:24 | call to s39 [element :foo] | -| semantics.rb:322:10:322:10 | x [element :foo] | semantics.rb:322:10:322:16 | ...[...] | -| semantics.rb:322:10:322:10 | x [element :foo] | semantics.rb:322:10:322:16 | ...[...] | -| semantics.rb:323:10:323:10 | x [element :foo] | semantics.rb:323:10:323:13 | ...[...] | -| semantics.rb:323:10:323:10 | x [element :foo] | semantics.rb:323:10:323:13 | ...[...] | -| semantics.rb:328:5:328:5 | [post] x [@foo] | semantics.rb:330:14:330:14 | x [@foo] | -| semantics.rb:328:5:328:5 | [post] x [@foo] | semantics.rb:330:14:330:14 | x [@foo] | -| semantics.rb:328:13:328:23 | call to source | semantics.rb:328:5:328:5 | [post] x [@foo] | -| semantics.rb:328:13:328:23 | call to source | semantics.rb:328:5:328:5 | [post] x [@foo] | -| semantics.rb:330:14:330:14 | x [@foo] | semantics.rb:330:10:330:15 | call to s40 | -| semantics.rb:330:14:330:14 | x [@foo] | semantics.rb:330:10:330:15 | call to s40 | -| semantics.rb:334:5:334:5 | x [@foo] | semantics.rb:335:10:335:10 | x [@foo] | -| semantics.rb:334:5:334:5 | x [@foo] | semantics.rb:335:10:335:10 | x [@foo] | -| semantics.rb:334:9:334:24 | call to s41 [@foo] | semantics.rb:334:5:334:5 | x [@foo] | -| semantics.rb:334:9:334:24 | call to s41 [@foo] | semantics.rb:334:5:334:5 | x [@foo] | -| semantics.rb:334:13:334:23 | call to source | semantics.rb:334:9:334:24 | call to s41 [@foo] | -| semantics.rb:334:13:334:23 | call to source | semantics.rb:334:9:334:24 | call to s41 [@foo] | -| semantics.rb:335:10:335:10 | x [@foo] | semantics.rb:335:10:335:14 | call to foo | -| semantics.rb:335:10:335:10 | x [@foo] | semantics.rb:335:10:335:14 | call to foo | -| semantics.rb:340:5:340:5 | [post] h [element 0] | semantics.rb:343:13:343:13 | h [element 0] | -| semantics.rb:340:5:340:5 | [post] h [element 0] | semantics.rb:343:13:343:13 | h [element 0] | -| semantics.rb:340:12:340:22 | call to source | semantics.rb:340:5:340:5 | [post] h [element 0] | -| semantics.rb:340:12:340:22 | call to source | semantics.rb:340:5:340:5 | [post] h [element 0] | -| semantics.rb:341:5:341:5 | [post] h [element] | semantics.rb:343:13:343:13 | h [element] | -| semantics.rb:341:5:341:5 | [post] h [element] | semantics.rb:343:13:343:13 | h [element] | -| semantics.rb:341:12:341:22 | call to source | semantics.rb:341:5:341:5 | [post] h [element] | -| semantics.rb:341:12:341:22 | call to source | semantics.rb:341:5:341:5 | [post] h [element] | -| semantics.rb:343:5:343:5 | x [element 0] | semantics.rb:345:10:345:10 | x [element 0] | -| semantics.rb:343:5:343:5 | x [element 0] | semantics.rb:345:10:345:10 | x [element 0] | -| semantics.rb:343:5:343:5 | x [element 0] | semantics.rb:347:10:347:10 | x [element 0] | -| semantics.rb:343:5:343:5 | x [element 0] | semantics.rb:347:10:347:10 | x [element 0] | -| semantics.rb:343:5:343:5 | x [element] | semantics.rb:345:10:345:10 | x [element] | -| semantics.rb:343:5:343:5 | x [element] | semantics.rb:345:10:345:10 | x [element] | -| semantics.rb:343:5:343:5 | x [element] | semantics.rb:346:10:346:10 | x [element] | -| semantics.rb:343:5:343:5 | x [element] | semantics.rb:346:10:346:10 | x [element] | -| semantics.rb:343:5:343:5 | x [element] | semantics.rb:347:10:347:10 | x [element] | -| semantics.rb:343:5:343:5 | x [element] | semantics.rb:347:10:347:10 | x [element] | -| semantics.rb:343:9:343:14 | call to s42 [element 0] | semantics.rb:343:5:343:5 | x [element 0] | -| semantics.rb:343:9:343:14 | call to s42 [element 0] | semantics.rb:343:5:343:5 | x [element 0] | -| semantics.rb:343:9:343:14 | call to s42 [element] | semantics.rb:343:5:343:5 | x [element] | -| semantics.rb:343:9:343:14 | call to s42 [element] | semantics.rb:343:5:343:5 | x [element] | -| semantics.rb:343:13:343:13 | h [element 0] | semantics.rb:343:9:343:14 | call to s42 [element 0] | -| semantics.rb:343:13:343:13 | h [element 0] | semantics.rb:343:9:343:14 | call to s42 [element 0] | -| semantics.rb:343:13:343:13 | h [element] | semantics.rb:343:9:343:14 | call to s42 [element] | -| semantics.rb:343:13:343:13 | h [element] | semantics.rb:343:9:343:14 | call to s42 [element] | -| semantics.rb:345:10:345:10 | x [element 0] | semantics.rb:345:10:345:13 | ...[...] | -| semantics.rb:345:10:345:10 | x [element 0] | semantics.rb:345:10:345:13 | ...[...] | -| semantics.rb:345:10:345:10 | x [element] | semantics.rb:345:10:345:13 | ...[...] | -| semantics.rb:345:10:345:10 | x [element] | semantics.rb:345:10:345:13 | ...[...] | -| semantics.rb:346:10:346:10 | x [element] | semantics.rb:346:10:346:13 | ...[...] | -| semantics.rb:346:10:346:10 | x [element] | semantics.rb:346:10:346:13 | ...[...] | -| semantics.rb:347:10:347:10 | x [element 0] | semantics.rb:347:10:347:13 | ...[...] | -| semantics.rb:347:10:347:10 | x [element 0] | semantics.rb:347:10:347:13 | ...[...] | -| semantics.rb:347:10:347:10 | x [element] | semantics.rb:347:10:347:13 | ...[...] | -| semantics.rb:347:10:347:10 | x [element] | semantics.rb:347:10:347:13 | ...[...] | -| semantics.rb:351:5:351:5 | [post] h [element 0] | semantics.rb:354:13:354:13 | h [element 0] | -| semantics.rb:351:5:351:5 | [post] h [element 0] | semantics.rb:354:13:354:13 | h [element 0] | -| semantics.rb:351:12:351:22 | call to source | semantics.rb:351:5:351:5 | [post] h [element 0] | -| semantics.rb:351:12:351:22 | call to source | semantics.rb:351:5:351:5 | [post] h [element 0] | -| semantics.rb:354:5:354:5 | x [element 0] | semantics.rb:356:10:356:10 | x [element 0] | -| semantics.rb:354:5:354:5 | x [element 0] | semantics.rb:356:10:356:10 | x [element 0] | -| semantics.rb:354:5:354:5 | x [element 0] | semantics.rb:358:10:358:10 | x [element 0] | -| semantics.rb:354:5:354:5 | x [element 0] | semantics.rb:358:10:358:10 | x [element 0] | -| semantics.rb:354:9:354:14 | call to s43 [element 0] | semantics.rb:354:5:354:5 | x [element 0] | -| semantics.rb:354:9:354:14 | call to s43 [element 0] | semantics.rb:354:5:354:5 | x [element 0] | -| semantics.rb:354:13:354:13 | h [element 0] | semantics.rb:354:9:354:14 | call to s43 [element 0] | -| semantics.rb:354:13:354:13 | h [element 0] | semantics.rb:354:9:354:14 | call to s43 [element 0] | -| semantics.rb:356:10:356:10 | x [element 0] | semantics.rb:356:10:356:13 | ...[...] | -| semantics.rb:356:10:356:10 | x [element 0] | semantics.rb:356:10:356:13 | ...[...] | -| semantics.rb:358:10:358:10 | x [element 0] | semantics.rb:358:10:358:13 | ...[...] | -| semantics.rb:358:10:358:10 | x [element 0] | semantics.rb:358:10:358:13 | ...[...] | -| semantics.rb:363:5:363:5 | [post] h [element 1] | semantics.rb:366:9:366:9 | h [element 1] | -| semantics.rb:363:5:363:5 | [post] h [element 1] | semantics.rb:366:9:366:9 | h [element 1] | -| semantics.rb:363:12:363:22 | call to source | semantics.rb:363:5:363:5 | [post] h [element 1] | -| semantics.rb:363:12:363:22 | call to source | semantics.rb:363:5:363:5 | [post] h [element 1] | -| semantics.rb:366:9:366:9 | [post] h [element 1] | semantics.rb:369:10:369:10 | h [element 1] | -| semantics.rb:366:9:366:9 | [post] h [element 1] | semantics.rb:369:10:369:10 | h [element 1] | -| semantics.rb:366:9:366:9 | [post] h [element 1] | semantics.rb:370:10:370:10 | h [element 1] | -| semantics.rb:366:9:366:9 | [post] h [element 1] | semantics.rb:370:10:370:10 | h [element 1] | -| semantics.rb:366:9:366:9 | h [element 1] | semantics.rb:366:9:366:9 | [post] h [element 1] | -| semantics.rb:366:9:366:9 | h [element 1] | semantics.rb:366:9:366:9 | [post] h [element 1] | -| semantics.rb:369:10:369:10 | h [element 1] | semantics.rb:369:10:369:13 | ...[...] | -| semantics.rb:369:10:369:10 | h [element 1] | semantics.rb:369:10:369:13 | ...[...] | -| semantics.rb:370:10:370:10 | h [element 1] | semantics.rb:370:10:370:13 | ...[...] | -| semantics.rb:370:10:370:10 | h [element 1] | semantics.rb:370:10:370:13 | ...[...] | -| semantics.rb:374:5:374:5 | [post] h [element 0] | semantics.rb:375:5:375:5 | h [element 0] | -| semantics.rb:374:5:374:5 | [post] h [element 0] | semantics.rb:375:5:375:5 | h [element 0] | -| semantics.rb:374:12:374:22 | call to source | semantics.rb:374:5:374:5 | [post] h [element 0] | -| semantics.rb:374:12:374:22 | call to source | semantics.rb:374:5:374:5 | [post] h [element 0] | -| semantics.rb:375:5:375:5 | [post] h [element 0] | semantics.rb:378:10:378:10 | h [element 0] | -| semantics.rb:375:5:375:5 | [post] h [element 0] | semantics.rb:378:10:378:10 | h [element 0] | -| semantics.rb:375:5:375:5 | [post] h [element 0] | semantics.rb:380:10:380:10 | h [element 0] | -| semantics.rb:375:5:375:5 | [post] h [element 0] | semantics.rb:380:10:380:10 | h [element 0] | -| semantics.rb:375:5:375:5 | [post] h [element 1] | semantics.rb:379:10:379:10 | h [element 1] | -| semantics.rb:375:5:375:5 | [post] h [element 1] | semantics.rb:379:10:379:10 | h [element 1] | -| semantics.rb:375:5:375:5 | [post] h [element 1] | semantics.rb:380:10:380:10 | h [element 1] | -| semantics.rb:375:5:375:5 | [post] h [element 1] | semantics.rb:380:10:380:10 | h [element 1] | -| semantics.rb:375:5:375:5 | [post] h [element 1] | semantics.rb:382:9:382:9 | h [element 1] | -| semantics.rb:375:5:375:5 | [post] h [element 1] | semantics.rb:382:9:382:9 | h [element 1] | -| semantics.rb:375:5:375:5 | h [element 0] | semantics.rb:375:5:375:5 | [post] h [element 0] | -| semantics.rb:375:5:375:5 | h [element 0] | semantics.rb:375:5:375:5 | [post] h [element 0] | -| semantics.rb:375:12:375:22 | call to source | semantics.rb:375:5:375:5 | [post] h [element 1] | -| semantics.rb:375:12:375:22 | call to source | semantics.rb:375:5:375:5 | [post] h [element 1] | -| semantics.rb:376:5:376:5 | [post] h [element] | semantics.rb:378:10:378:10 | h [element] | -| semantics.rb:376:5:376:5 | [post] h [element] | semantics.rb:378:10:378:10 | h [element] | -| semantics.rb:376:5:376:5 | [post] h [element] | semantics.rb:379:10:379:10 | h [element] | -| semantics.rb:376:5:376:5 | [post] h [element] | semantics.rb:379:10:379:10 | h [element] | -| semantics.rb:376:5:376:5 | [post] h [element] | semantics.rb:380:10:380:10 | h [element] | -| semantics.rb:376:5:376:5 | [post] h [element] | semantics.rb:380:10:380:10 | h [element] | -| semantics.rb:376:5:376:5 | [post] h [element] | semantics.rb:382:9:382:9 | h [element] | -| semantics.rb:376:5:376:5 | [post] h [element] | semantics.rb:382:9:382:9 | h [element] | -| semantics.rb:376:12:376:22 | call to source | semantics.rb:376:5:376:5 | [post] h [element] | -| semantics.rb:376:12:376:22 | call to source | semantics.rb:376:5:376:5 | [post] h [element] | -| semantics.rb:378:10:378:10 | h [element 0] | semantics.rb:378:10:378:13 | ...[...] | -| semantics.rb:378:10:378:10 | h [element 0] | semantics.rb:378:10:378:13 | ...[...] | -| semantics.rb:378:10:378:10 | h [element] | semantics.rb:378:10:378:13 | ...[...] | -| semantics.rb:378:10:378:10 | h [element] | semantics.rb:378:10:378:13 | ...[...] | -| semantics.rb:379:10:379:10 | h [element 1] | semantics.rb:379:10:379:13 | ...[...] | -| semantics.rb:379:10:379:10 | h [element 1] | semantics.rb:379:10:379:13 | ...[...] | -| semantics.rb:379:10:379:10 | h [element] | semantics.rb:379:10:379:13 | ...[...] | -| semantics.rb:379:10:379:10 | h [element] | semantics.rb:379:10:379:13 | ...[...] | -| semantics.rb:380:10:380:10 | h [element 0] | semantics.rb:380:10:380:13 | ...[...] | -| semantics.rb:380:10:380:10 | h [element 0] | semantics.rb:380:10:380:13 | ...[...] | -| semantics.rb:380:10:380:10 | h [element 1] | semantics.rb:380:10:380:13 | ...[...] | -| semantics.rb:380:10:380:10 | h [element 1] | semantics.rb:380:10:380:13 | ...[...] | -| semantics.rb:380:10:380:10 | h [element] | semantics.rb:380:10:380:13 | ...[...] | -| semantics.rb:380:10:380:10 | h [element] | semantics.rb:380:10:380:13 | ...[...] | -| semantics.rb:382:9:382:9 | [post] h [element 1] | semantics.rb:385:10:385:10 | h [element 1] | -| semantics.rb:382:9:382:9 | [post] h [element 1] | semantics.rb:385:10:385:10 | h [element 1] | -| semantics.rb:382:9:382:9 | [post] h [element 1] | semantics.rb:386:10:386:10 | h [element 1] | -| semantics.rb:382:9:382:9 | [post] h [element 1] | semantics.rb:386:10:386:10 | h [element 1] | -| semantics.rb:382:9:382:9 | [post] h [element] | semantics.rb:384:10:384:10 | h [element] | -| semantics.rb:382:9:382:9 | [post] h [element] | semantics.rb:384:10:384:10 | h [element] | -| semantics.rb:382:9:382:9 | [post] h [element] | semantics.rb:385:10:385:10 | h [element] | -| semantics.rb:382:9:382:9 | [post] h [element] | semantics.rb:385:10:385:10 | h [element] | -| semantics.rb:382:9:382:9 | [post] h [element] | semantics.rb:386:10:386:10 | h [element] | -| semantics.rb:382:9:382:9 | [post] h [element] | semantics.rb:386:10:386:10 | h [element] | -| semantics.rb:382:9:382:9 | h [element 1] | semantics.rb:382:9:382:9 | [post] h [element 1] | -| semantics.rb:382:9:382:9 | h [element 1] | semantics.rb:382:9:382:9 | [post] h [element 1] | -| semantics.rb:382:9:382:9 | h [element] | semantics.rb:382:9:382:9 | [post] h [element] | -| semantics.rb:382:9:382:9 | h [element] | semantics.rb:382:9:382:9 | [post] h [element] | -| semantics.rb:384:10:384:10 | h [element] | semantics.rb:384:10:384:13 | ...[...] | -| semantics.rb:384:10:384:10 | h [element] | semantics.rb:384:10:384:13 | ...[...] | -| semantics.rb:385:10:385:10 | h [element 1] | semantics.rb:385:10:385:13 | ...[...] | -| semantics.rb:385:10:385:10 | h [element 1] | semantics.rb:385:10:385:13 | ...[...] | -| semantics.rb:385:10:385:10 | h [element] | semantics.rb:385:10:385:13 | ...[...] | -| semantics.rb:385:10:385:10 | h [element] | semantics.rb:385:10:385:13 | ...[...] | -| semantics.rb:386:10:386:10 | h [element 1] | semantics.rb:386:10:386:13 | ...[...] | -| semantics.rb:386:10:386:10 | h [element 1] | semantics.rb:386:10:386:13 | ...[...] | -| semantics.rb:386:10:386:10 | h [element] | semantics.rb:386:10:386:13 | ...[...] | -| semantics.rb:386:10:386:10 | h [element] | semantics.rb:386:10:386:13 | ...[...] | -| semantics.rb:390:5:390:5 | [post] h [element 0] | semantics.rb:391:5:391:5 | h [element 0] | -| semantics.rb:390:5:390:5 | [post] h [element 0] | semantics.rb:391:5:391:5 | h [element 0] | -| semantics.rb:390:12:390:22 | call to source | semantics.rb:390:5:390:5 | [post] h [element 0] | -| semantics.rb:390:12:390:22 | call to source | semantics.rb:390:5:390:5 | [post] h [element 0] | -| semantics.rb:391:5:391:5 | [post] h [element 0] | semantics.rb:394:10:394:10 | h [element 0] | -| semantics.rb:391:5:391:5 | [post] h [element 0] | semantics.rb:394:10:394:10 | h [element 0] | -| semantics.rb:391:5:391:5 | [post] h [element 0] | semantics.rb:396:10:396:10 | h [element 0] | -| semantics.rb:391:5:391:5 | [post] h [element 0] | semantics.rb:396:10:396:10 | h [element 0] | -| semantics.rb:391:5:391:5 | [post] h [element 1] | semantics.rb:395:10:395:10 | h [element 1] | -| semantics.rb:391:5:391:5 | [post] h [element 1] | semantics.rb:395:10:395:10 | h [element 1] | -| semantics.rb:391:5:391:5 | [post] h [element 1] | semantics.rb:396:10:396:10 | h [element 1] | -| semantics.rb:391:5:391:5 | [post] h [element 1] | semantics.rb:396:10:396:10 | h [element 1] | -| semantics.rb:391:5:391:5 | [post] h [element 1] | semantics.rb:398:13:398:13 | h [element 1] | -| semantics.rb:391:5:391:5 | [post] h [element 1] | semantics.rb:398:13:398:13 | h [element 1] | -| semantics.rb:391:5:391:5 | h [element 0] | semantics.rb:391:5:391:5 | [post] h [element 0] | -| semantics.rb:391:5:391:5 | h [element 0] | semantics.rb:391:5:391:5 | [post] h [element 0] | -| semantics.rb:391:12:391:22 | call to source | semantics.rb:391:5:391:5 | [post] h [element 1] | -| semantics.rb:391:12:391:22 | call to source | semantics.rb:391:5:391:5 | [post] h [element 1] | -| semantics.rb:392:5:392:5 | [post] h [element] | semantics.rb:394:10:394:10 | h [element] | -| semantics.rb:392:5:392:5 | [post] h [element] | semantics.rb:394:10:394:10 | h [element] | -| semantics.rb:392:5:392:5 | [post] h [element] | semantics.rb:395:10:395:10 | h [element] | -| semantics.rb:392:5:392:5 | [post] h [element] | semantics.rb:395:10:395:10 | h [element] | -| semantics.rb:392:5:392:5 | [post] h [element] | semantics.rb:396:10:396:10 | h [element] | -| semantics.rb:392:5:392:5 | [post] h [element] | semantics.rb:396:10:396:10 | h [element] | -| semantics.rb:392:12:392:22 | call to source | semantics.rb:392:5:392:5 | [post] h [element] | -| semantics.rb:392:12:392:22 | call to source | semantics.rb:392:5:392:5 | [post] h [element] | -| semantics.rb:394:10:394:10 | h [element 0] | semantics.rb:394:10:394:13 | ...[...] | -| semantics.rb:394:10:394:10 | h [element 0] | semantics.rb:394:10:394:13 | ...[...] | -| semantics.rb:394:10:394:10 | h [element] | semantics.rb:394:10:394:13 | ...[...] | -| semantics.rb:394:10:394:10 | h [element] | semantics.rb:394:10:394:13 | ...[...] | -| semantics.rb:395:10:395:10 | h [element 1] | semantics.rb:395:10:395:13 | ...[...] | -| semantics.rb:395:10:395:10 | h [element 1] | semantics.rb:395:10:395:13 | ...[...] | -| semantics.rb:395:10:395:10 | h [element] | semantics.rb:395:10:395:13 | ...[...] | -| semantics.rb:395:10:395:10 | h [element] | semantics.rb:395:10:395:13 | ...[...] | -| semantics.rb:396:10:396:10 | h [element 0] | semantics.rb:396:10:396:13 | ...[...] | -| semantics.rb:396:10:396:10 | h [element 0] | semantics.rb:396:10:396:13 | ...[...] | -| semantics.rb:396:10:396:10 | h [element 1] | semantics.rb:396:10:396:13 | ...[...] | -| semantics.rb:396:10:396:10 | h [element 1] | semantics.rb:396:10:396:13 | ...[...] | -| semantics.rb:396:10:396:10 | h [element] | semantics.rb:396:10:396:13 | ...[...] | -| semantics.rb:396:10:396:10 | h [element] | semantics.rb:396:10:396:13 | ...[...] | -| semantics.rb:398:5:398:5 | x [element 1] | semantics.rb:401:10:401:10 | x [element 1] | -| semantics.rb:398:5:398:5 | x [element 1] | semantics.rb:401:10:401:10 | x [element 1] | -| semantics.rb:398:5:398:5 | x [element 1] | semantics.rb:402:10:402:10 | x [element 1] | -| semantics.rb:398:5:398:5 | x [element 1] | semantics.rb:402:10:402:10 | x [element 1] | -| semantics.rb:398:9:398:14 | call to s46 [element 1] | semantics.rb:398:5:398:5 | x [element 1] | -| semantics.rb:398:9:398:14 | call to s46 [element 1] | semantics.rb:398:5:398:5 | x [element 1] | -| semantics.rb:398:13:398:13 | h [element 1] | semantics.rb:398:9:398:14 | call to s46 [element 1] | -| semantics.rb:398:13:398:13 | h [element 1] | semantics.rb:398:9:398:14 | call to s46 [element 1] | -| semantics.rb:401:10:401:10 | x [element 1] | semantics.rb:401:10:401:13 | ...[...] | -| semantics.rb:401:10:401:10 | x [element 1] | semantics.rb:401:10:401:13 | ...[...] | -| semantics.rb:402:10:402:10 | x [element 1] | semantics.rb:402:10:402:13 | ...[...] | -| semantics.rb:402:10:402:10 | x [element 1] | semantics.rb:402:10:402:13 | ...[...] | -| semantics.rb:406:5:406:5 | [post] h [element :foo] | semantics.rb:407:5:407:5 | h [element :foo] | -| semantics.rb:406:5:406:5 | [post] h [element :foo] | semantics.rb:407:5:407:5 | h [element :foo] | -| semantics.rb:406:15:406:25 | call to source | semantics.rb:406:5:406:5 | [post] h [element :foo] | -| semantics.rb:406:15:406:25 | call to source | semantics.rb:406:5:406:5 | [post] h [element :foo] | -| semantics.rb:407:5:407:5 | [post] h [element :bar] | semantics.rb:411:10:411:10 | h [element :bar] | -| semantics.rb:407:5:407:5 | [post] h [element :bar] | semantics.rb:411:10:411:10 | h [element :bar] | -| semantics.rb:407:5:407:5 | [post] h [element :bar] | semantics.rb:413:13:413:13 | h [element :bar] | -| semantics.rb:407:5:407:5 | [post] h [element :bar] | semantics.rb:413:13:413:13 | h [element :bar] | -| semantics.rb:407:5:407:5 | [post] h [element :foo] | semantics.rb:410:10:410:10 | h [element :foo] | -| semantics.rb:407:5:407:5 | [post] h [element :foo] | semantics.rb:410:10:410:10 | h [element :foo] | -| semantics.rb:407:5:407:5 | h [element :foo] | semantics.rb:407:5:407:5 | [post] h [element :foo] | -| semantics.rb:407:5:407:5 | h [element :foo] | semantics.rb:407:5:407:5 | [post] h [element :foo] | -| semantics.rb:407:15:407:25 | call to source | semantics.rb:407:5:407:5 | [post] h [element :bar] | -| semantics.rb:407:15:407:25 | call to source | semantics.rb:407:5:407:5 | [post] h [element :bar] | -| semantics.rb:408:5:408:5 | [post] h [element] | semantics.rb:410:10:410:10 | h [element] | -| semantics.rb:408:5:408:5 | [post] h [element] | semantics.rb:410:10:410:10 | h [element] | -| semantics.rb:408:5:408:5 | [post] h [element] | semantics.rb:411:10:411:10 | h [element] | -| semantics.rb:408:5:408:5 | [post] h [element] | semantics.rb:411:10:411:10 | h [element] | -| semantics.rb:408:12:408:22 | call to source | semantics.rb:408:5:408:5 | [post] h [element] | -| semantics.rb:408:12:408:22 | call to source | semantics.rb:408:5:408:5 | [post] h [element] | -| semantics.rb:410:10:410:10 | h [element :foo] | semantics.rb:410:10:410:16 | ...[...] | -| semantics.rb:410:10:410:10 | h [element :foo] | semantics.rb:410:10:410:16 | ...[...] | -| semantics.rb:410:10:410:10 | h [element] | semantics.rb:410:10:410:16 | ...[...] | -| semantics.rb:410:10:410:10 | h [element] | semantics.rb:410:10:410:16 | ...[...] | -| semantics.rb:411:10:411:10 | h [element :bar] | semantics.rb:411:10:411:16 | ...[...] | -| semantics.rb:411:10:411:10 | h [element :bar] | semantics.rb:411:10:411:16 | ...[...] | -| semantics.rb:411:10:411:10 | h [element] | semantics.rb:411:10:411:16 | ...[...] | -| semantics.rb:411:10:411:10 | h [element] | semantics.rb:411:10:411:16 | ...[...] | -| semantics.rb:413:5:413:5 | x [element :bar] | semantics.rb:416:10:416:10 | x [element :bar] | -| semantics.rb:413:5:413:5 | x [element :bar] | semantics.rb:416:10:416:10 | x [element :bar] | -| semantics.rb:413:9:413:14 | call to s47 [element :bar] | semantics.rb:413:5:413:5 | x [element :bar] | -| semantics.rb:413:9:413:14 | call to s47 [element :bar] | semantics.rb:413:5:413:5 | x [element :bar] | -| semantics.rb:413:13:413:13 | h [element :bar] | semantics.rb:413:9:413:14 | call to s47 [element :bar] | -| semantics.rb:413:13:413:13 | h [element :bar] | semantics.rb:413:9:413:14 | call to s47 [element :bar] | -| semantics.rb:416:10:416:10 | x [element :bar] | semantics.rb:416:10:416:16 | ...[...] | -| semantics.rb:416:10:416:10 | x [element :bar] | semantics.rb:416:10:416:16 | ...[...] | -| semantics.rb:420:5:420:5 | [post] h [element :foo] | semantics.rb:421:5:421:5 | h [element :foo] | -| semantics.rb:420:5:420:5 | [post] h [element :foo] | semantics.rb:421:5:421:5 | h [element :foo] | -| semantics.rb:420:15:420:25 | call to source | semantics.rb:420:5:420:5 | [post] h [element :foo] | -| semantics.rb:420:15:420:25 | call to source | semantics.rb:420:5:420:5 | [post] h [element :foo] | -| semantics.rb:421:5:421:5 | [post] h [element :bar] | semantics.rb:425:10:425:10 | h [element :bar] | -| semantics.rb:421:5:421:5 | [post] h [element :bar] | semantics.rb:425:10:425:10 | h [element :bar] | -| semantics.rb:421:5:421:5 | [post] h [element :bar] | semantics.rb:427:13:427:13 | h [element :bar] | -| semantics.rb:421:5:421:5 | [post] h [element :bar] | semantics.rb:427:13:427:13 | h [element :bar] | -| semantics.rb:421:5:421:5 | [post] h [element :foo] | semantics.rb:424:10:424:10 | h [element :foo] | -| semantics.rb:421:5:421:5 | [post] h [element :foo] | semantics.rb:424:10:424:10 | h [element :foo] | -| semantics.rb:421:5:421:5 | h [element :foo] | semantics.rb:421:5:421:5 | [post] h [element :foo] | -| semantics.rb:421:5:421:5 | h [element :foo] | semantics.rb:421:5:421:5 | [post] h [element :foo] | -| semantics.rb:421:15:421:25 | call to source | semantics.rb:421:5:421:5 | [post] h [element :bar] | -| semantics.rb:421:15:421:25 | call to source | semantics.rb:421:5:421:5 | [post] h [element :bar] | -| semantics.rb:422:5:422:5 | [post] h [element] | semantics.rb:424:10:424:10 | h [element] | -| semantics.rb:422:5:422:5 | [post] h [element] | semantics.rb:424:10:424:10 | h [element] | -| semantics.rb:422:5:422:5 | [post] h [element] | semantics.rb:425:10:425:10 | h [element] | -| semantics.rb:422:5:422:5 | [post] h [element] | semantics.rb:425:10:425:10 | h [element] | -| semantics.rb:422:12:422:22 | call to source | semantics.rb:422:5:422:5 | [post] h [element] | -| semantics.rb:422:12:422:22 | call to source | semantics.rb:422:5:422:5 | [post] h [element] | -| semantics.rb:424:10:424:10 | h [element :foo] | semantics.rb:424:10:424:16 | ...[...] | -| semantics.rb:424:10:424:10 | h [element :foo] | semantics.rb:424:10:424:16 | ...[...] | -| semantics.rb:424:10:424:10 | h [element] | semantics.rb:424:10:424:16 | ...[...] | -| semantics.rb:424:10:424:10 | h [element] | semantics.rb:424:10:424:16 | ...[...] | -| semantics.rb:425:10:425:10 | h [element :bar] | semantics.rb:425:10:425:16 | ...[...] | -| semantics.rb:425:10:425:10 | h [element :bar] | semantics.rb:425:10:425:16 | ...[...] | -| semantics.rb:425:10:425:10 | h [element] | semantics.rb:425:10:425:16 | ...[...] | -| semantics.rb:425:10:425:10 | h [element] | semantics.rb:425:10:425:16 | ...[...] | -| semantics.rb:427:5:427:5 | x [element :bar] | semantics.rb:430:10:430:10 | x [element :bar] | -| semantics.rb:427:5:427:5 | x [element :bar] | semantics.rb:430:10:430:10 | x [element :bar] | -| semantics.rb:427:9:427:14 | call to s48 [element :bar] | semantics.rb:427:5:427:5 | x [element :bar] | -| semantics.rb:427:9:427:14 | call to s48 [element :bar] | semantics.rb:427:5:427:5 | x [element :bar] | -| semantics.rb:427:13:427:13 | h [element :bar] | semantics.rb:427:9:427:14 | call to s48 [element :bar] | -| semantics.rb:427:13:427:13 | h [element :bar] | semantics.rb:427:9:427:14 | call to s48 [element :bar] | -| semantics.rb:430:10:430:10 | x [element :bar] | semantics.rb:430:10:430:16 | ...[...] | -| semantics.rb:430:10:430:10 | x [element :bar] | semantics.rb:430:10:430:16 | ...[...] | -| semantics.rb:434:5:434:5 | [post] h [element :foo] | semantics.rb:435:5:435:5 | h [element :foo] | -| semantics.rb:434:5:434:5 | [post] h [element :foo] | semantics.rb:435:5:435:5 | h [element :foo] | -| semantics.rb:434:15:434:25 | call to source | semantics.rb:434:5:434:5 | [post] h [element :foo] | -| semantics.rb:434:15:434:25 | call to source | semantics.rb:434:5:434:5 | [post] h [element :foo] | -| semantics.rb:435:5:435:5 | [post] h [element :bar] | semantics.rb:439:10:439:10 | h [element :bar] | -| semantics.rb:435:5:435:5 | [post] h [element :bar] | semantics.rb:439:10:439:10 | h [element :bar] | -| semantics.rb:435:5:435:5 | [post] h [element :bar] | semantics.rb:441:13:441:13 | h [element :bar] | -| semantics.rb:435:5:435:5 | [post] h [element :bar] | semantics.rb:441:13:441:13 | h [element :bar] | -| semantics.rb:435:5:435:5 | [post] h [element :foo] | semantics.rb:438:10:438:10 | h [element :foo] | -| semantics.rb:435:5:435:5 | [post] h [element :foo] | semantics.rb:438:10:438:10 | h [element :foo] | -| semantics.rb:435:5:435:5 | h [element :foo] | semantics.rb:435:5:435:5 | [post] h [element :foo] | -| semantics.rb:435:5:435:5 | h [element :foo] | semantics.rb:435:5:435:5 | [post] h [element :foo] | -| semantics.rb:435:15:435:25 | call to source | semantics.rb:435:5:435:5 | [post] h [element :bar] | -| semantics.rb:435:15:435:25 | call to source | semantics.rb:435:5:435:5 | [post] h [element :bar] | -| semantics.rb:436:5:436:5 | [post] h [element] | semantics.rb:438:10:438:10 | h [element] | -| semantics.rb:436:5:436:5 | [post] h [element] | semantics.rb:438:10:438:10 | h [element] | -| semantics.rb:436:5:436:5 | [post] h [element] | semantics.rb:439:10:439:10 | h [element] | -| semantics.rb:436:5:436:5 | [post] h [element] | semantics.rb:439:10:439:10 | h [element] | -| semantics.rb:436:5:436:5 | [post] h [element] | semantics.rb:441:13:441:13 | h [element] | -| semantics.rb:436:5:436:5 | [post] h [element] | semantics.rb:441:13:441:13 | h [element] | -| semantics.rb:436:12:436:22 | call to source | semantics.rb:436:5:436:5 | [post] h [element] | -| semantics.rb:436:12:436:22 | call to source | semantics.rb:436:5:436:5 | [post] h [element] | -| semantics.rb:438:10:438:10 | h [element :foo] | semantics.rb:438:10:438:16 | ...[...] | -| semantics.rb:438:10:438:10 | h [element :foo] | semantics.rb:438:10:438:16 | ...[...] | -| semantics.rb:438:10:438:10 | h [element] | semantics.rb:438:10:438:16 | ...[...] | -| semantics.rb:438:10:438:10 | h [element] | semantics.rb:438:10:438:16 | ...[...] | -| semantics.rb:439:10:439:10 | h [element :bar] | semantics.rb:439:10:439:16 | ...[...] | -| semantics.rb:439:10:439:10 | h [element :bar] | semantics.rb:439:10:439:16 | ...[...] | -| semantics.rb:439:10:439:10 | h [element] | semantics.rb:439:10:439:16 | ...[...] | -| semantics.rb:439:10:439:10 | h [element] | semantics.rb:439:10:439:16 | ...[...] | -| semantics.rb:441:5:441:5 | x [element :bar] | semantics.rb:444:10:444:10 | x [element :bar] | -| semantics.rb:441:5:441:5 | x [element :bar] | semantics.rb:444:10:444:10 | x [element :bar] | -| semantics.rb:441:5:441:5 | x [element] | semantics.rb:443:10:443:10 | x [element] | -| semantics.rb:441:5:441:5 | x [element] | semantics.rb:443:10:443:10 | x [element] | -| semantics.rb:441:5:441:5 | x [element] | semantics.rb:444:10:444:10 | x [element] | -| semantics.rb:441:5:441:5 | x [element] | semantics.rb:444:10:444:10 | x [element] | -| semantics.rb:441:9:441:14 | call to s49 [element :bar] | semantics.rb:441:5:441:5 | x [element :bar] | -| semantics.rb:441:9:441:14 | call to s49 [element :bar] | semantics.rb:441:5:441:5 | x [element :bar] | -| semantics.rb:441:9:441:14 | call to s49 [element] | semantics.rb:441:5:441:5 | x [element] | -| semantics.rb:441:9:441:14 | call to s49 [element] | semantics.rb:441:5:441:5 | x [element] | -| semantics.rb:441:13:441:13 | h [element :bar] | semantics.rb:441:9:441:14 | call to s49 [element :bar] | -| semantics.rb:441:13:441:13 | h [element :bar] | semantics.rb:441:9:441:14 | call to s49 [element :bar] | -| semantics.rb:441:13:441:13 | h [element] | semantics.rb:441:9:441:14 | call to s49 [element] | -| semantics.rb:441:13:441:13 | h [element] | semantics.rb:441:9:441:14 | call to s49 [element] | -| semantics.rb:443:10:443:10 | x [element] | semantics.rb:443:10:443:16 | ...[...] | -| semantics.rb:443:10:443:10 | x [element] | semantics.rb:443:10:443:16 | ...[...] | -| semantics.rb:444:10:444:10 | x [element :bar] | semantics.rb:444:10:444:16 | ...[...] | -| semantics.rb:444:10:444:10 | x [element :bar] | semantics.rb:444:10:444:16 | ...[...] | -| semantics.rb:444:10:444:10 | x [element] | semantics.rb:444:10:444:16 | ...[...] | -| semantics.rb:444:10:444:10 | x [element] | semantics.rb:444:10:444:16 | ...[...] | -| semantics.rb:448:5:448:5 | [post] h [element :foo] | semantics.rb:449:5:449:5 | h [element :foo] | -| semantics.rb:448:5:448:5 | [post] h [element :foo] | semantics.rb:449:5:449:5 | h [element :foo] | -| semantics.rb:448:15:448:25 | call to source | semantics.rb:448:5:448:5 | [post] h [element :foo] | -| semantics.rb:448:15:448:25 | call to source | semantics.rb:448:5:448:5 | [post] h [element :foo] | -| semantics.rb:449:5:449:5 | [post] h [element :bar] | semantics.rb:453:10:453:10 | h [element :bar] | -| semantics.rb:449:5:449:5 | [post] h [element :bar] | semantics.rb:453:10:453:10 | h [element :bar] | -| semantics.rb:449:5:449:5 | [post] h [element :bar] | semantics.rb:455:9:455:9 | h [element :bar] | -| semantics.rb:449:5:449:5 | [post] h [element :bar] | semantics.rb:455:9:455:9 | h [element :bar] | -| semantics.rb:449:5:449:5 | [post] h [element :foo] | semantics.rb:452:10:452:10 | h [element :foo] | -| semantics.rb:449:5:449:5 | [post] h [element :foo] | semantics.rb:452:10:452:10 | h [element :foo] | -| semantics.rb:449:5:449:5 | h [element :foo] | semantics.rb:449:5:449:5 | [post] h [element :foo] | -| semantics.rb:449:5:449:5 | h [element :foo] | semantics.rb:449:5:449:5 | [post] h [element :foo] | -| semantics.rb:449:15:449:25 | call to source | semantics.rb:449:5:449:5 | [post] h [element :bar] | -| semantics.rb:449:15:449:25 | call to source | semantics.rb:449:5:449:5 | [post] h [element :bar] | -| semantics.rb:450:5:450:5 | [post] h [element] | semantics.rb:452:10:452:10 | h [element] | -| semantics.rb:450:5:450:5 | [post] h [element] | semantics.rb:452:10:452:10 | h [element] | -| semantics.rb:450:5:450:5 | [post] h [element] | semantics.rb:453:10:453:10 | h [element] | -| semantics.rb:450:5:450:5 | [post] h [element] | semantics.rb:453:10:453:10 | h [element] | -| semantics.rb:450:12:450:22 | call to source | semantics.rb:450:5:450:5 | [post] h [element] | -| semantics.rb:450:12:450:22 | call to source | semantics.rb:450:5:450:5 | [post] h [element] | -| semantics.rb:452:10:452:10 | h [element :foo] | semantics.rb:452:10:452:16 | ...[...] | -| semantics.rb:452:10:452:10 | h [element :foo] | semantics.rb:452:10:452:16 | ...[...] | -| semantics.rb:452:10:452:10 | h [element] | semantics.rb:452:10:452:16 | ...[...] | -| semantics.rb:452:10:452:10 | h [element] | semantics.rb:452:10:452:16 | ...[...] | -| semantics.rb:453:10:453:10 | h [element :bar] | semantics.rb:453:10:453:16 | ...[...] | -| semantics.rb:453:10:453:10 | h [element :bar] | semantics.rb:453:10:453:16 | ...[...] | -| semantics.rb:453:10:453:10 | h [element] | semantics.rb:453:10:453:16 | ...[...] | -| semantics.rb:453:10:453:10 | h [element] | semantics.rb:453:10:453:16 | ...[...] | -| semantics.rb:455:9:455:9 | [post] h [element :bar] | semantics.rb:458:10:458:10 | h [element :bar] | -| semantics.rb:455:9:455:9 | [post] h [element :bar] | semantics.rb:458:10:458:10 | h [element :bar] | -| semantics.rb:455:9:455:9 | h [element :bar] | semantics.rb:455:9:455:9 | [post] h [element :bar] | -| semantics.rb:455:9:455:9 | h [element :bar] | semantics.rb:455:9:455:9 | [post] h [element :bar] | -| semantics.rb:458:10:458:10 | h [element :bar] | semantics.rb:458:10:458:16 | ...[...] | -| semantics.rb:458:10:458:10 | h [element :bar] | semantics.rb:458:10:458:16 | ...[...] | -| semantics.rb:462:5:462:5 | [post] h [element :foo] | semantics.rb:463:5:463:5 | h [element :foo] | -| semantics.rb:462:5:462:5 | [post] h [element :foo] | semantics.rb:463:5:463:5 | h [element :foo] | -| semantics.rb:462:15:462:25 | call to source | semantics.rb:462:5:462:5 | [post] h [element :foo] | -| semantics.rb:462:15:462:25 | call to source | semantics.rb:462:5:462:5 | [post] h [element :foo] | -| semantics.rb:463:5:463:5 | [post] h [element :bar] | semantics.rb:467:10:467:10 | h [element :bar] | -| semantics.rb:463:5:463:5 | [post] h [element :bar] | semantics.rb:467:10:467:10 | h [element :bar] | -| semantics.rb:463:5:463:5 | [post] h [element :bar] | semantics.rb:469:9:469:9 | h [element :bar] | -| semantics.rb:463:5:463:5 | [post] h [element :bar] | semantics.rb:469:9:469:9 | h [element :bar] | -| semantics.rb:463:5:463:5 | [post] h [element :foo] | semantics.rb:466:10:466:10 | h [element :foo] | -| semantics.rb:463:5:463:5 | [post] h [element :foo] | semantics.rb:466:10:466:10 | h [element :foo] | -| semantics.rb:463:5:463:5 | h [element :foo] | semantics.rb:463:5:463:5 | [post] h [element :foo] | -| semantics.rb:463:5:463:5 | h [element :foo] | semantics.rb:463:5:463:5 | [post] h [element :foo] | -| semantics.rb:463:15:463:25 | call to source | semantics.rb:463:5:463:5 | [post] h [element :bar] | -| semantics.rb:463:15:463:25 | call to source | semantics.rb:463:5:463:5 | [post] h [element :bar] | -| semantics.rb:464:5:464:5 | [post] h [element] | semantics.rb:466:10:466:10 | h [element] | -| semantics.rb:464:5:464:5 | [post] h [element] | semantics.rb:466:10:466:10 | h [element] | -| semantics.rb:464:5:464:5 | [post] h [element] | semantics.rb:467:10:467:10 | h [element] | -| semantics.rb:464:5:464:5 | [post] h [element] | semantics.rb:467:10:467:10 | h [element] | -| semantics.rb:464:5:464:5 | [post] h [element] | semantics.rb:469:9:469:9 | h [element] | -| semantics.rb:464:5:464:5 | [post] h [element] | semantics.rb:469:9:469:9 | h [element] | -| semantics.rb:464:12:464:22 | call to source | semantics.rb:464:5:464:5 | [post] h [element] | -| semantics.rb:464:12:464:22 | call to source | semantics.rb:464:5:464:5 | [post] h [element] | -| semantics.rb:466:10:466:10 | h [element :foo] | semantics.rb:466:10:466:16 | ...[...] | -| semantics.rb:466:10:466:10 | h [element :foo] | semantics.rb:466:10:466:16 | ...[...] | -| semantics.rb:466:10:466:10 | h [element] | semantics.rb:466:10:466:16 | ...[...] | -| semantics.rb:466:10:466:10 | h [element] | semantics.rb:466:10:466:16 | ...[...] | -| semantics.rb:467:10:467:10 | h [element :bar] | semantics.rb:467:10:467:16 | ...[...] | -| semantics.rb:467:10:467:10 | h [element :bar] | semantics.rb:467:10:467:16 | ...[...] | -| semantics.rb:467:10:467:10 | h [element] | semantics.rb:467:10:467:16 | ...[...] | -| semantics.rb:467:10:467:10 | h [element] | semantics.rb:467:10:467:16 | ...[...] | -| semantics.rb:469:9:469:9 | [post] h [element :bar] | semantics.rb:472:10:472:10 | h [element :bar] | -| semantics.rb:469:9:469:9 | [post] h [element :bar] | semantics.rb:472:10:472:10 | h [element :bar] | -| semantics.rb:469:9:469:9 | [post] h [element] | semantics.rb:471:10:471:10 | h [element] | -| semantics.rb:469:9:469:9 | [post] h [element] | semantics.rb:471:10:471:10 | h [element] | -| semantics.rb:469:9:469:9 | [post] h [element] | semantics.rb:472:10:472:10 | h [element] | -| semantics.rb:469:9:469:9 | [post] h [element] | semantics.rb:472:10:472:10 | h [element] | -| semantics.rb:469:9:469:9 | h [element :bar] | semantics.rb:469:9:469:9 | [post] h [element :bar] | -| semantics.rb:469:9:469:9 | h [element :bar] | semantics.rb:469:9:469:9 | [post] h [element :bar] | -| semantics.rb:469:9:469:9 | h [element] | semantics.rb:469:9:469:9 | [post] h [element] | -| semantics.rb:469:9:469:9 | h [element] | semantics.rb:469:9:469:9 | [post] h [element] | -| semantics.rb:471:10:471:10 | h [element] | semantics.rb:471:10:471:16 | ...[...] | -| semantics.rb:471:10:471:10 | h [element] | semantics.rb:471:10:471:16 | ...[...] | -| semantics.rb:472:10:472:10 | h [element :bar] | semantics.rb:472:10:472:16 | ...[...] | -| semantics.rb:472:10:472:10 | h [element :bar] | semantics.rb:472:10:472:16 | ...[...] | -| semantics.rb:472:10:472:10 | h [element] | semantics.rb:472:10:472:16 | ...[...] | -| semantics.rb:472:10:472:10 | h [element] | semantics.rb:472:10:472:16 | ...[...] | -| semantics.rb:476:5:476:5 | [post] h [element :foo] | semantics.rb:477:5:477:5 | h [element :foo] | -| semantics.rb:476:5:476:5 | [post] h [element :foo] | semantics.rb:477:5:477:5 | h [element :foo] | -| semantics.rb:476:15:476:25 | call to source | semantics.rb:476:5:476:5 | [post] h [element :foo] | -| semantics.rb:476:15:476:25 | call to source | semantics.rb:476:5:476:5 | [post] h [element :foo] | -| semantics.rb:477:5:477:5 | [post] h [element :bar] | semantics.rb:481:10:481:10 | h [element :bar] | -| semantics.rb:477:5:477:5 | [post] h [element :bar] | semantics.rb:481:10:481:10 | h [element :bar] | -| semantics.rb:477:5:477:5 | [post] h [element :bar] | semantics.rb:483:5:483:5 | h [element :bar] | -| semantics.rb:477:5:477:5 | [post] h [element :bar] | semantics.rb:483:5:483:5 | h [element :bar] | -| semantics.rb:477:5:477:5 | [post] h [element :foo] | semantics.rb:480:10:480:10 | h [element :foo] | -| semantics.rb:477:5:477:5 | [post] h [element :foo] | semantics.rb:480:10:480:10 | h [element :foo] | -| semantics.rb:477:5:477:5 | h [element :foo] | semantics.rb:477:5:477:5 | [post] h [element :foo] | -| semantics.rb:477:5:477:5 | h [element :foo] | semantics.rb:477:5:477:5 | [post] h [element :foo] | -| semantics.rb:477:15:477:25 | call to source | semantics.rb:477:5:477:5 | [post] h [element :bar] | -| semantics.rb:477:15:477:25 | call to source | semantics.rb:477:5:477:5 | [post] h [element :bar] | -| semantics.rb:478:5:478:5 | [post] h [element] | semantics.rb:480:10:480:10 | h [element] | -| semantics.rb:478:5:478:5 | [post] h [element] | semantics.rb:480:10:480:10 | h [element] | -| semantics.rb:478:5:478:5 | [post] h [element] | semantics.rb:481:10:481:10 | h [element] | -| semantics.rb:478:5:478:5 | [post] h [element] | semantics.rb:481:10:481:10 | h [element] | -| semantics.rb:478:12:478:22 | call to source | semantics.rb:478:5:478:5 | [post] h [element] | -| semantics.rb:478:12:478:22 | call to source | semantics.rb:478:5:478:5 | [post] h [element] | -| semantics.rb:480:10:480:10 | h [element :foo] | semantics.rb:480:10:480:16 | ...[...] | -| semantics.rb:480:10:480:10 | h [element :foo] | semantics.rb:480:10:480:16 | ...[...] | -| semantics.rb:480:10:480:10 | h [element] | semantics.rb:480:10:480:16 | ...[...] | -| semantics.rb:480:10:480:10 | h [element] | semantics.rb:480:10:480:16 | ...[...] | -| semantics.rb:481:10:481:10 | h [element :bar] | semantics.rb:481:10:481:16 | ...[...] | -| semantics.rb:481:10:481:10 | h [element :bar] | semantics.rb:481:10:481:16 | ...[...] | -| semantics.rb:481:10:481:10 | h [element] | semantics.rb:481:10:481:16 | ...[...] | -| semantics.rb:481:10:481:10 | h [element] | semantics.rb:481:10:481:16 | ...[...] | -| semantics.rb:483:5:483:5 | [post] h [element :bar] | semantics.rb:486:10:486:10 | h [element :bar] | -| semantics.rb:483:5:483:5 | [post] h [element :bar] | semantics.rb:486:10:486:10 | h [element :bar] | -| semantics.rb:483:5:483:5 | h [element :bar] | semantics.rb:483:5:483:5 | [post] h [element :bar] | -| semantics.rb:483:5:483:5 | h [element :bar] | semantics.rb:483:5:483:5 | [post] h [element :bar] | -| semantics.rb:486:10:486:10 | h [element :bar] | semantics.rb:486:10:486:16 | ...[...] | -| semantics.rb:486:10:486:10 | h [element :bar] | semantics.rb:486:10:486:16 | ...[...] | -| semantics.rb:490:5:490:5 | [post] h [element :foo] | semantics.rb:491:5:491:5 | h [element :foo] | -| semantics.rb:490:5:490:5 | [post] h [element :foo] | semantics.rb:491:5:491:5 | h [element :foo] | -| semantics.rb:490:15:490:25 | call to source | semantics.rb:490:5:490:5 | [post] h [element :foo] | -| semantics.rb:490:15:490:25 | call to source | semantics.rb:490:5:490:5 | [post] h [element :foo] | -| semantics.rb:491:5:491:5 | [post] h [element :bar] | semantics.rb:495:10:495:10 | h [element :bar] | -| semantics.rb:491:5:491:5 | [post] h [element :bar] | semantics.rb:495:10:495:10 | h [element :bar] | -| semantics.rb:491:5:491:5 | [post] h [element :bar] | semantics.rb:497:9:497:9 | h [element :bar] | -| semantics.rb:491:5:491:5 | [post] h [element :bar] | semantics.rb:497:9:497:9 | h [element :bar] | -| semantics.rb:491:5:491:5 | [post] h [element :foo] | semantics.rb:494:10:494:10 | h [element :foo] | -| semantics.rb:491:5:491:5 | [post] h [element :foo] | semantics.rb:494:10:494:10 | h [element :foo] | -| semantics.rb:491:5:491:5 | h [element :foo] | semantics.rb:491:5:491:5 | [post] h [element :foo] | -| semantics.rb:491:5:491:5 | h [element :foo] | semantics.rb:491:5:491:5 | [post] h [element :foo] | -| semantics.rb:491:15:491:25 | call to source | semantics.rb:491:5:491:5 | [post] h [element :bar] | -| semantics.rb:491:15:491:25 | call to source | semantics.rb:491:5:491:5 | [post] h [element :bar] | -| semantics.rb:492:5:492:5 | [post] h [element] | semantics.rb:494:10:494:10 | h [element] | -| semantics.rb:492:5:492:5 | [post] h [element] | semantics.rb:494:10:494:10 | h [element] | -| semantics.rb:492:5:492:5 | [post] h [element] | semantics.rb:495:10:495:10 | h [element] | -| semantics.rb:492:5:492:5 | [post] h [element] | semantics.rb:495:10:495:10 | h [element] | -| semantics.rb:492:12:492:22 | call to source | semantics.rb:492:5:492:5 | [post] h [element] | -| semantics.rb:492:12:492:22 | call to source | semantics.rb:492:5:492:5 | [post] h [element] | -| semantics.rb:494:10:494:10 | h [element :foo] | semantics.rb:494:10:494:16 | ...[...] | -| semantics.rb:494:10:494:10 | h [element :foo] | semantics.rb:494:10:494:16 | ...[...] | -| semantics.rb:494:10:494:10 | h [element] | semantics.rb:494:10:494:16 | ...[...] | -| semantics.rb:494:10:494:10 | h [element] | semantics.rb:494:10:494:16 | ...[...] | -| semantics.rb:495:10:495:10 | h [element :bar] | semantics.rb:495:10:495:16 | ...[...] | -| semantics.rb:495:10:495:10 | h [element :bar] | semantics.rb:495:10:495:16 | ...[...] | -| semantics.rb:495:10:495:10 | h [element] | semantics.rb:495:10:495:16 | ...[...] | -| semantics.rb:495:10:495:10 | h [element] | semantics.rb:495:10:495:16 | ...[...] | -| semantics.rb:497:5:497:5 | x [element :bar] | semantics.rb:500:10:500:10 | x [element :bar] | -| semantics.rb:497:5:497:5 | x [element :bar] | semantics.rb:500:10:500:10 | x [element :bar] | -| semantics.rb:497:9:497:9 | h [element :bar] | semantics.rb:497:9:497:15 | call to s53 [element :bar] | -| semantics.rb:497:9:497:9 | h [element :bar] | semantics.rb:497:9:497:15 | call to s53 [element :bar] | -| semantics.rb:497:9:497:15 | call to s53 [element :bar] | semantics.rb:497:5:497:5 | x [element :bar] | -| semantics.rb:497:9:497:15 | call to s53 [element :bar] | semantics.rb:497:5:497:5 | x [element :bar] | -| semantics.rb:500:10:500:10 | x [element :bar] | semantics.rb:500:10:500:16 | ...[...] | -| semantics.rb:500:10:500:10 | x [element :bar] | semantics.rb:500:10:500:16 | ...[...] | -| semantics.rb:502:10:502:20 | call to source | semantics.rb:502:10:502:26 | call to s53 | -| semantics.rb:502:10:502:20 | call to source | semantics.rb:502:10:502:26 | call to s53 | -| semantics.rb:506:5:506:5 | [post] h [element :foo] | semantics.rb:507:5:507:5 | h [element :foo] | -| semantics.rb:506:5:506:5 | [post] h [element :foo] | semantics.rb:507:5:507:5 | h [element :foo] | -| semantics.rb:506:15:506:25 | call to source | semantics.rb:506:5:506:5 | [post] h [element :foo] | -| semantics.rb:506:15:506:25 | call to source | semantics.rb:506:5:506:5 | [post] h [element :foo] | -| semantics.rb:507:5:507:5 | [post] h [element :bar] | semantics.rb:511:10:511:10 | h [element :bar] | -| semantics.rb:507:5:507:5 | [post] h [element :bar] | semantics.rb:511:10:511:10 | h [element :bar] | -| semantics.rb:507:5:507:5 | [post] h [element :bar] | semantics.rb:513:9:513:9 | h [element :bar] | -| semantics.rb:507:5:507:5 | [post] h [element :bar] | semantics.rb:513:9:513:9 | h [element :bar] | -| semantics.rb:507:5:507:5 | [post] h [element :foo] | semantics.rb:510:10:510:10 | h [element :foo] | -| semantics.rb:507:5:507:5 | [post] h [element :foo] | semantics.rb:510:10:510:10 | h [element :foo] | -| semantics.rb:507:5:507:5 | h [element :foo] | semantics.rb:507:5:507:5 | [post] h [element :foo] | -| semantics.rb:507:5:507:5 | h [element :foo] | semantics.rb:507:5:507:5 | [post] h [element :foo] | -| semantics.rb:507:15:507:25 | call to source | semantics.rb:507:5:507:5 | [post] h [element :bar] | -| semantics.rb:507:15:507:25 | call to source | semantics.rb:507:5:507:5 | [post] h [element :bar] | -| semantics.rb:508:5:508:5 | [post] h [element] | semantics.rb:510:10:510:10 | h [element] | -| semantics.rb:508:5:508:5 | [post] h [element] | semantics.rb:510:10:510:10 | h [element] | -| semantics.rb:508:5:508:5 | [post] h [element] | semantics.rb:511:10:511:10 | h [element] | -| semantics.rb:508:5:508:5 | [post] h [element] | semantics.rb:511:10:511:10 | h [element] | -| semantics.rb:508:12:508:22 | call to source | semantics.rb:508:5:508:5 | [post] h [element] | -| semantics.rb:508:12:508:22 | call to source | semantics.rb:508:5:508:5 | [post] h [element] | -| semantics.rb:510:10:510:10 | h [element :foo] | semantics.rb:510:10:510:16 | ...[...] | -| semantics.rb:510:10:510:10 | h [element :foo] | semantics.rb:510:10:510:16 | ...[...] | -| semantics.rb:510:10:510:10 | h [element] | semantics.rb:510:10:510:16 | ...[...] | -| semantics.rb:510:10:510:10 | h [element] | semantics.rb:510:10:510:16 | ...[...] | -| semantics.rb:511:10:511:10 | h [element :bar] | semantics.rb:511:10:511:16 | ...[...] | -| semantics.rb:511:10:511:10 | h [element :bar] | semantics.rb:511:10:511:16 | ...[...] | -| semantics.rb:511:10:511:10 | h [element] | semantics.rb:511:10:511:16 | ...[...] | -| semantics.rb:511:10:511:10 | h [element] | semantics.rb:511:10:511:16 | ...[...] | -| semantics.rb:513:5:513:5 | x [element :bar] | semantics.rb:516:10:516:10 | x [element :bar] | -| semantics.rb:513:5:513:5 | x [element :bar] | semantics.rb:516:10:516:10 | x [element :bar] | -| semantics.rb:513:9:513:9 | h [element :bar] | semantics.rb:513:9:513:15 | call to s54 [element :bar] | -| semantics.rb:513:9:513:9 | h [element :bar] | semantics.rb:513:9:513:15 | call to s54 [element :bar] | -| semantics.rb:513:9:513:15 | call to s54 [element :bar] | semantics.rb:513:5:513:5 | x [element :bar] | -| semantics.rb:513:9:513:15 | call to s54 [element :bar] | semantics.rb:513:5:513:5 | x [element :bar] | -| semantics.rb:516:10:516:10 | x [element :bar] | semantics.rb:516:10:516:16 | ...[...] | -| semantics.rb:516:10:516:10 | x [element :bar] | semantics.rb:516:10:516:16 | ...[...] | +| semantics.rb:2:5:2:5 | a | semantics.rb:3:9:3:9 | a | provenance | | +| semantics.rb:2:5:2:5 | a | semantics.rb:3:9:3:9 | a | provenance | | +| semantics.rb:2:9:2:18 | call to source | semantics.rb:2:5:2:5 | a | provenance | | +| semantics.rb:2:9:2:18 | call to source | semantics.rb:2:5:2:5 | a | provenance | | +| semantics.rb:3:5:3:5 | x | semantics.rb:4:10:4:10 | x | provenance | | +| semantics.rb:3:5:3:5 | x | semantics.rb:4:10:4:10 | x | provenance | | +| semantics.rb:3:9:3:9 | a | semantics.rb:3:9:3:14 | call to s1 | provenance | | +| semantics.rb:3:9:3:9 | a | semantics.rb:3:9:3:14 | call to s1 | provenance | | +| semantics.rb:3:9:3:14 | call to s1 | semantics.rb:3:5:3:5 | x | provenance | | +| semantics.rb:3:9:3:14 | call to s1 | semantics.rb:3:5:3:5 | x | provenance | | +| semantics.rb:8:5:8:5 | a | semantics.rb:9:10:9:10 | a | provenance | | +| semantics.rb:8:5:8:5 | a | semantics.rb:9:10:9:10 | a | provenance | | +| semantics.rb:8:9:8:18 | call to source | semantics.rb:8:5:8:5 | a | provenance | | +| semantics.rb:8:9:8:18 | call to source | semantics.rb:8:5:8:5 | a | provenance | | +| semantics.rb:9:5:9:5 | [post] x | semantics.rb:10:10:10:10 | x | provenance | | +| semantics.rb:9:5:9:5 | [post] x | semantics.rb:10:10:10:10 | x | provenance | | +| semantics.rb:9:10:9:10 | a | semantics.rb:9:5:9:5 | [post] x | provenance | | +| semantics.rb:9:10:9:10 | a | semantics.rb:9:5:9:5 | [post] x | provenance | | +| semantics.rb:14:5:14:5 | a | semantics.rb:15:8:15:8 | a | provenance | | +| semantics.rb:14:5:14:5 | a | semantics.rb:15:8:15:8 | a | provenance | | +| semantics.rb:14:9:14:18 | call to source | semantics.rb:14:5:14:5 | a | provenance | | +| semantics.rb:14:9:14:18 | call to source | semantics.rb:14:5:14:5 | a | provenance | | +| semantics.rb:15:8:15:8 | a | semantics.rb:15:11:15:11 | [post] x | provenance | | +| semantics.rb:15:8:15:8 | a | semantics.rb:15:11:15:11 | [post] x | provenance | | +| semantics.rb:15:11:15:11 | [post] x | semantics.rb:16:10:16:10 | x | provenance | | +| semantics.rb:15:11:15:11 | [post] x | semantics.rb:16:10:16:10 | x | provenance | | +| semantics.rb:22:18:22:32 | call to source | semantics.rb:22:10:22:33 | call to s4 | provenance | | +| semantics.rb:22:18:22:32 | call to source | semantics.rb:22:10:22:33 | call to s4 | provenance | | +| semantics.rb:23:23:23:32 | call to source | semantics.rb:23:10:23:33 | call to s4 | provenance | | +| semantics.rb:23:23:23:32 | call to source | semantics.rb:23:10:23:33 | call to s4 | provenance | | +| semantics.rb:28:5:28:5 | a | semantics.rb:29:8:29:8 | a | provenance | | +| semantics.rb:28:5:28:5 | a | semantics.rb:29:8:29:8 | a | provenance | | +| semantics.rb:28:9:28:18 | call to source | semantics.rb:28:5:28:5 | a | provenance | | +| semantics.rb:28:9:28:18 | call to source | semantics.rb:28:5:28:5 | a | provenance | | +| semantics.rb:29:8:29:8 | a | semantics.rb:29:14:29:14 | [post] y | provenance | | +| semantics.rb:29:8:29:8 | a | semantics.rb:29:14:29:14 | [post] y | provenance | | +| semantics.rb:29:8:29:8 | a | semantics.rb:29:17:29:17 | [post] z | provenance | | +| semantics.rb:29:8:29:8 | a | semantics.rb:29:17:29:17 | [post] z | provenance | | +| semantics.rb:29:14:29:14 | [post] y | semantics.rb:31:10:31:10 | y | provenance | | +| semantics.rb:29:14:29:14 | [post] y | semantics.rb:31:10:31:10 | y | provenance | | +| semantics.rb:29:17:29:17 | [post] z | semantics.rb:32:10:32:10 | z | provenance | | +| semantics.rb:29:17:29:17 | [post] z | semantics.rb:32:10:32:10 | z | provenance | | +| semantics.rb:40:5:40:5 | a | semantics.rb:41:8:41:8 | a | provenance | | +| semantics.rb:40:5:40:5 | a | semantics.rb:41:8:41:8 | a | provenance | | +| semantics.rb:40:9:40:18 | call to source | semantics.rb:40:5:40:5 | a | provenance | | +| semantics.rb:40:9:40:18 | call to source | semantics.rb:40:5:40:5 | a | provenance | | +| semantics.rb:41:8:41:8 | a | semantics.rb:41:16:41:16 | [post] x | provenance | | +| semantics.rb:41:8:41:8 | a | semantics.rb:41:16:41:16 | [post] x | provenance | | +| semantics.rb:41:16:41:16 | [post] x | semantics.rb:42:10:42:10 | x | provenance | | +| semantics.rb:41:16:41:16 | [post] x | semantics.rb:42:10:42:10 | x | provenance | | +| semantics.rb:46:15:46:24 | call to source | semantics.rb:46:10:46:26 | call to s8 | provenance | | +| semantics.rb:46:15:46:24 | call to source | semantics.rb:46:10:46:26 | call to s8 | provenance | | +| semantics.rb:48:9:48:18 | call to source | semantics.rb:47:10:49:7 | call to s8 | provenance | | +| semantics.rb:48:9:48:18 | call to source | semantics.rb:47:10:49:7 | call to s8 | provenance | | +| semantics.rb:53:8:53:17 | call to source | semantics.rb:53:23:53:23 | x | provenance | | +| semantics.rb:53:8:53:17 | call to source | semantics.rb:53:23:53:23 | x | provenance | | +| semantics.rb:53:23:53:23 | x | semantics.rb:53:31:53:31 | x | provenance | | +| semantics.rb:53:23:53:23 | x | semantics.rb:53:31:53:31 | x | provenance | | +| semantics.rb:54:8:54:17 | call to source | semantics.rb:54:24:54:24 | x | provenance | | +| semantics.rb:54:8:54:17 | call to source | semantics.rb:54:24:54:24 | x | provenance | | +| semantics.rb:54:24:54:24 | x | semantics.rb:55:14:55:14 | x | provenance | | +| semantics.rb:54:24:54:24 | x | semantics.rb:55:14:55:14 | x | provenance | | +| semantics.rb:60:5:60:5 | a | semantics.rb:61:14:61:14 | a | provenance | | +| semantics.rb:60:5:60:5 | a | semantics.rb:61:14:61:14 | a | provenance | | +| semantics.rb:60:5:60:5 | a | semantics.rb:62:17:62:17 | a | provenance | | +| semantics.rb:60:5:60:5 | a | semantics.rb:62:17:62:17 | a | provenance | | +| semantics.rb:60:5:60:5 | a | semantics.rb:63:19:63:19 | a | provenance | | +| semantics.rb:60:5:60:5 | a | semantics.rb:63:19:63:19 | a | provenance | | +| semantics.rb:60:5:60:5 | a | semantics.rb:64:27:64:27 | a | provenance | | +| semantics.rb:60:5:60:5 | a | semantics.rb:64:27:64:27 | a | provenance | | +| semantics.rb:60:5:60:5 | a | semantics.rb:66:14:66:15 | &... | provenance | | +| semantics.rb:60:5:60:5 | a | semantics.rb:66:14:66:15 | &... | provenance | | +| semantics.rb:60:9:60:18 | call to source | semantics.rb:60:5:60:5 | a | provenance | | +| semantics.rb:60:9:60:18 | call to source | semantics.rb:60:5:60:5 | a | provenance | | +| semantics.rb:61:10:61:15 | call to s10 [splat position 0] | semantics.rb:61:10:61:15 | call to s10 | provenance | | +| semantics.rb:61:14:61:14 | a | semantics.rb:61:10:61:15 | call to s10 | provenance | | +| semantics.rb:61:14:61:14 | a | semantics.rb:61:10:61:15 | call to s10 | provenance | | +| semantics.rb:61:14:61:14 | a | semantics.rb:61:10:61:15 | call to s10 [splat position 0] | provenance | | +| semantics.rb:62:10:62:18 | call to s10 [splat position 1] | semantics.rb:62:10:62:18 | call to s10 | provenance | | +| semantics.rb:62:17:62:17 | a | semantics.rb:62:10:62:18 | call to s10 | provenance | | +| semantics.rb:62:17:62:17 | a | semantics.rb:62:10:62:18 | call to s10 | provenance | | +| semantics.rb:62:17:62:17 | a | semantics.rb:62:10:62:18 | call to s10 [splat position 1] | provenance | | +| semantics.rb:63:19:63:19 | a | semantics.rb:63:10:63:20 | call to s10 | provenance | | +| semantics.rb:63:19:63:19 | a | semantics.rb:63:10:63:20 | call to s10 | provenance | | +| semantics.rb:64:27:64:27 | a | semantics.rb:64:10:64:28 | call to s10 | provenance | | +| semantics.rb:64:27:64:27 | a | semantics.rb:64:10:64:28 | call to s10 | provenance | | +| semantics.rb:66:14:66:15 | &... | semantics.rb:66:10:66:16 | call to s10 | provenance | | +| semantics.rb:66:14:66:15 | &... | semantics.rb:66:10:66:16 | call to s10 | provenance | | +| semantics.rb:80:5:80:5 | a | semantics.rb:81:5:81:5 | a | provenance | | +| semantics.rb:80:5:80:5 | a | semantics.rb:81:5:81:5 | a | provenance | | +| semantics.rb:80:9:80:18 | call to source | semantics.rb:80:5:80:5 | a | provenance | | +| semantics.rb:80:9:80:18 | call to source | semantics.rb:80:5:80:5 | a | provenance | | +| semantics.rb:81:5:81:5 | a | semantics.rb:81:11:81:11 | [post] x | provenance | | +| semantics.rb:81:5:81:5 | a | semantics.rb:81:11:81:11 | [post] x | provenance | | +| semantics.rb:81:5:81:5 | a | semantics.rb:81:14:81:14 | [post] y | provenance | | +| semantics.rb:81:5:81:5 | a | semantics.rb:81:14:81:14 | [post] y | provenance | | +| semantics.rb:81:5:81:5 | a | semantics.rb:81:22:81:22 | [post] z | provenance | | +| semantics.rb:81:5:81:5 | a | semantics.rb:81:22:81:22 | [post] z | provenance | | +| semantics.rb:81:11:81:11 | [post] x | semantics.rb:82:10:82:10 | x | provenance | | +| semantics.rb:81:11:81:11 | [post] x | semantics.rb:82:10:82:10 | x | provenance | | +| semantics.rb:81:14:81:14 | [post] y | semantics.rb:83:10:83:10 | y | provenance | | +| semantics.rb:81:14:81:14 | [post] y | semantics.rb:83:10:83:10 | y | provenance | | +| semantics.rb:81:22:81:22 | [post] z | semantics.rb:84:10:84:10 | z | provenance | | +| semantics.rb:81:22:81:22 | [post] z | semantics.rb:84:10:84:10 | z | provenance | | +| semantics.rb:89:5:89:5 | a | semantics.rb:91:19:91:19 | a | provenance | | +| semantics.rb:89:5:89:5 | a | semantics.rb:91:19:91:19 | a | provenance | | +| semantics.rb:89:5:89:5 | a | semantics.rb:92:27:92:27 | a | provenance | | +| semantics.rb:89:5:89:5 | a | semantics.rb:92:27:92:27 | a | provenance | | +| semantics.rb:89:9:89:18 | call to source | semantics.rb:89:5:89:5 | a | provenance | | +| semantics.rb:89:9:89:18 | call to source | semantics.rb:89:5:89:5 | a | provenance | | +| semantics.rb:91:19:91:19 | a | semantics.rb:91:10:91:20 | call to s13 | provenance | | +| semantics.rb:91:19:91:19 | a | semantics.rb:91:10:91:20 | call to s13 | provenance | | +| semantics.rb:92:27:92:27 | a | semantics.rb:92:10:92:28 | call to s13 | provenance | | +| semantics.rb:92:27:92:27 | a | semantics.rb:92:10:92:28 | call to s13 | provenance | | +| semantics.rb:97:5:97:5 | a | semantics.rb:98:5:98:5 | a | provenance | | +| semantics.rb:97:5:97:5 | a | semantics.rb:98:5:98:5 | a | provenance | | +| semantics.rb:97:5:97:5 | a | semantics.rb:99:5:99:5 | a | provenance | | +| semantics.rb:97:5:97:5 | a | semantics.rb:99:5:99:5 | a | provenance | | +| semantics.rb:97:9:97:18 | call to source | semantics.rb:97:5:97:5 | a | provenance | | +| semantics.rb:97:9:97:18 | call to source | semantics.rb:97:5:97:5 | a | provenance | | +| semantics.rb:98:5:98:5 | a | semantics.rb:98:19:98:19 | [post] x | provenance | | +| semantics.rb:98:5:98:5 | a | semantics.rb:98:19:98:19 | [post] x | provenance | | +| semantics.rb:98:19:98:19 | [post] x | semantics.rb:101:10:101:10 | x | provenance | | +| semantics.rb:98:19:98:19 | [post] x | semantics.rb:101:10:101:10 | x | provenance | | +| semantics.rb:99:5:99:5 | a | semantics.rb:99:16:99:16 | [post] y | provenance | | +| semantics.rb:99:5:99:5 | a | semantics.rb:99:16:99:16 | [post] y | provenance | | +| semantics.rb:99:5:99:5 | a | semantics.rb:99:24:99:24 | [post] z | provenance | | +| semantics.rb:99:5:99:5 | a | semantics.rb:99:24:99:24 | [post] z | provenance | | +| semantics.rb:99:16:99:16 | [post] y | semantics.rb:102:10:102:10 | y | provenance | | +| semantics.rb:99:16:99:16 | [post] y | semantics.rb:102:10:102:10 | y | provenance | | +| semantics.rb:99:24:99:24 | [post] z | semantics.rb:103:10:103:10 | z | provenance | | +| semantics.rb:99:24:99:24 | [post] z | semantics.rb:103:10:103:10 | z | provenance | | +| semantics.rb:107:5:107:5 | a | semantics.rb:109:19:109:19 | a | provenance | | +| semantics.rb:107:5:107:5 | a | semantics.rb:109:19:109:19 | a | provenance | | +| semantics.rb:107:9:107:18 | call to source | semantics.rb:107:5:107:5 | a | provenance | | +| semantics.rb:107:9:107:18 | call to source | semantics.rb:107:5:107:5 | a | provenance | | +| semantics.rb:108:5:108:5 | b | semantics.rb:110:27:110:27 | b | provenance | | +| semantics.rb:108:5:108:5 | b | semantics.rb:110:27:110:27 | b | provenance | | +| semantics.rb:108:9:108:18 | call to source | semantics.rb:108:5:108:5 | b | provenance | | +| semantics.rb:108:9:108:18 | call to source | semantics.rb:108:5:108:5 | b | provenance | | +| semantics.rb:109:10:109:28 | call to s15 [hash-splat position :foo] | semantics.rb:109:10:109:34 | ...[...] | provenance | | +| semantics.rb:109:10:109:28 | call to s15 [hash-splat position :foo] | semantics.rb:109:10:109:34 | ...[...] | provenance | | +| semantics.rb:109:19:109:19 | a | semantics.rb:109:10:109:28 | call to s15 [hash-splat position :foo] | provenance | | +| semantics.rb:109:19:109:19 | a | semantics.rb:109:10:109:28 | call to s15 [hash-splat position :foo] | provenance | | +| semantics.rb:110:10:110:28 | call to s15 [hash-splat position :bar] | semantics.rb:110:10:110:34 | ...[...] | provenance | | +| semantics.rb:110:10:110:28 | call to s15 [hash-splat position :bar] | semantics.rb:110:10:110:34 | ...[...] | provenance | | +| semantics.rb:110:27:110:27 | b | semantics.rb:110:10:110:28 | call to s15 [hash-splat position :bar] | provenance | | +| semantics.rb:110:27:110:27 | b | semantics.rb:110:10:110:28 | call to s15 [hash-splat position :bar] | provenance | | +| semantics.rb:114:5:114:5 | a | semantics.rb:116:14:116:14 | a | provenance | | +| semantics.rb:114:5:114:5 | a | semantics.rb:116:14:116:14 | a | provenance | | +| semantics.rb:114:5:114:5 | a | semantics.rb:119:17:119:17 | a | provenance | | +| semantics.rb:114:5:114:5 | a | semantics.rb:119:17:119:17 | a | provenance | | +| semantics.rb:114:9:114:18 | call to source | semantics.rb:114:5:114:5 | a | provenance | | +| semantics.rb:114:9:114:18 | call to source | semantics.rb:114:5:114:5 | a | provenance | | +| semantics.rb:115:5:115:5 | b | semantics.rb:121:17:121:17 | b | provenance | | +| semantics.rb:115:5:115:5 | b | semantics.rb:121:17:121:17 | b | provenance | | +| semantics.rb:115:9:115:18 | call to source | semantics.rb:115:5:115:5 | b | provenance | | +| semantics.rb:115:9:115:18 | call to source | semantics.rb:115:5:115:5 | b | provenance | | +| semantics.rb:116:5:116:5 | h [element :a] | semantics.rb:117:16:117:16 | h [element :a] | provenance | | +| semantics.rb:116:5:116:5 | h [element :a] | semantics.rb:117:16:117:16 | h [element :a] | provenance | | +| semantics.rb:116:5:116:5 | h [element :a] | semantics.rb:121:22:121:22 | h [element :a] | provenance | | +| semantics.rb:116:5:116:5 | h [element :a] | semantics.rb:121:22:121:22 | h [element :a] | provenance | | +| semantics.rb:116:14:116:14 | a | semantics.rb:116:5:116:5 | h [element :a] | provenance | | +| semantics.rb:116:14:116:14 | a | semantics.rb:116:5:116:5 | h [element :a] | provenance | | +| semantics.rb:117:14:117:16 | ** ... [element :a] | semantics.rb:117:10:117:17 | call to s16 | provenance | | +| semantics.rb:117:14:117:16 | ** ... [element :a] | semantics.rb:117:10:117:17 | call to s16 | provenance | | +| semantics.rb:117:16:117:16 | h [element :a] | semantics.rb:117:14:117:16 | ** ... [element :a] | provenance | | +| semantics.rb:117:16:117:16 | h [element :a] | semantics.rb:117:14:117:16 | ** ... [element :a] | provenance | | +| semantics.rb:119:17:119:17 | a | semantics.rb:119:10:119:18 | call to s16 | provenance | | +| semantics.rb:119:17:119:17 | a | semantics.rb:119:10:119:18 | call to s16 | provenance | | +| semantics.rb:121:17:121:17 | b | semantics.rb:121:10:121:23 | call to s16 | provenance | | +| semantics.rb:121:17:121:17 | b | semantics.rb:121:10:121:23 | call to s16 | provenance | | +| semantics.rb:121:20:121:22 | ** ... [element :a] | semantics.rb:121:10:121:23 | call to s16 | provenance | | +| semantics.rb:121:20:121:22 | ** ... [element :a] | semantics.rb:121:10:121:23 | call to s16 | provenance | | +| semantics.rb:121:22:121:22 | h [element :a] | semantics.rb:121:20:121:22 | ** ... [element :a] | provenance | | +| semantics.rb:121:22:121:22 | h [element :a] | semantics.rb:121:20:121:22 | ** ... [element :a] | provenance | | +| semantics.rb:125:5:125:5 | a | semantics.rb:127:14:127:14 | a | provenance | | +| semantics.rb:125:5:125:5 | a | semantics.rb:128:14:128:14 | a | provenance | | +| semantics.rb:125:5:125:5 | a | semantics.rb:128:14:128:14 | a | provenance | | +| semantics.rb:125:9:125:18 | call to source | semantics.rb:125:5:125:5 | a | provenance | | +| semantics.rb:125:9:125:18 | call to source | semantics.rb:125:5:125:5 | a | provenance | | +| semantics.rb:126:5:126:5 | b | semantics.rb:127:17:127:17 | b | provenance | | +| semantics.rb:126:5:126:5 | b | semantics.rb:129:17:129:17 | b | provenance | | +| semantics.rb:126:5:126:5 | b | semantics.rb:129:17:129:17 | b | provenance | | +| semantics.rb:126:9:126:18 | call to source | semantics.rb:126:5:126:5 | b | provenance | | +| semantics.rb:126:9:126:18 | call to source | semantics.rb:126:5:126:5 | b | provenance | | +| semantics.rb:127:10:127:18 | call to s17 [splat position 0] | semantics.rb:127:10:127:18 | call to s17 | provenance | | +| semantics.rb:127:10:127:18 | call to s17 [splat position 1] | semantics.rb:127:10:127:18 | call to s17 | provenance | | +| semantics.rb:127:14:127:14 | a | semantics.rb:127:10:127:18 | call to s17 [splat position 0] | provenance | | +| semantics.rb:127:17:127:17 | b | semantics.rb:127:10:127:18 | call to s17 [splat position 1] | provenance | | +| semantics.rb:128:10:128:18 | call to s17 [splat position 0] | semantics.rb:128:10:128:21 | ...[...] | provenance | | +| semantics.rb:128:10:128:18 | call to s17 [splat position 0] | semantics.rb:128:10:128:21 | ...[...] | provenance | | +| semantics.rb:128:14:128:14 | a | semantics.rb:128:10:128:18 | call to s17 [splat position 0] | provenance | | +| semantics.rb:128:14:128:14 | a | semantics.rb:128:10:128:18 | call to s17 [splat position 0] | provenance | | +| semantics.rb:129:10:129:18 | call to s17 [splat position 1] | semantics.rb:129:10:129:21 | ...[...] | provenance | | +| semantics.rb:129:10:129:18 | call to s17 [splat position 1] | semantics.rb:129:10:129:21 | ...[...] | provenance | | +| semantics.rb:129:17:129:17 | b | semantics.rb:129:10:129:18 | call to s17 [splat position 1] | provenance | | +| semantics.rb:129:17:129:17 | b | semantics.rb:129:10:129:18 | call to s17 [splat position 1] | provenance | | +| semantics.rb:133:5:133:5 | a | semantics.rb:135:12:135:12 | a | provenance | | +| semantics.rb:133:5:133:5 | a | semantics.rb:135:12:135:12 | a | provenance | | +| semantics.rb:133:5:133:5 | a | semantics.rb:137:14:137:14 | a | provenance | | +| semantics.rb:133:5:133:5 | a | semantics.rb:137:14:137:14 | a | provenance | | +| semantics.rb:133:9:133:18 | call to source | semantics.rb:133:5:133:5 | a | provenance | | +| semantics.rb:133:9:133:18 | call to source | semantics.rb:133:5:133:5 | a | provenance | | +| semantics.rb:134:5:134:5 | b | semantics.rb:135:15:135:15 | b | provenance | | +| semantics.rb:134:5:134:5 | b | semantics.rb:135:15:135:15 | b | provenance | | +| semantics.rb:134:9:134:18 | call to source | semantics.rb:134:5:134:5 | b | provenance | | +| semantics.rb:134:9:134:18 | call to source | semantics.rb:134:5:134:5 | b | provenance | | +| semantics.rb:135:5:135:7 | arr [element 0] | semantics.rb:136:15:136:17 | arr [element 0] | provenance | | +| semantics.rb:135:5:135:7 | arr [element 0] | semantics.rb:136:15:136:17 | arr [element 0] | provenance | | +| semantics.rb:135:5:135:7 | arr [element 1] | semantics.rb:136:15:136:17 | arr [element 1] | provenance | | +| semantics.rb:135:5:135:7 | arr [element 1] | semantics.rb:136:15:136:17 | arr [element 1] | provenance | | +| semantics.rb:135:12:135:12 | a | semantics.rb:135:5:135:7 | arr [element 0] | provenance | | +| semantics.rb:135:12:135:12 | a | semantics.rb:135:5:135:7 | arr [element 0] | provenance | | +| semantics.rb:135:15:135:15 | b | semantics.rb:135:5:135:7 | arr [element 1] | provenance | | +| semantics.rb:135:15:135:15 | b | semantics.rb:135:5:135:7 | arr [element 1] | provenance | | +| semantics.rb:136:14:136:17 | * ... [element 0] | semantics.rb:136:10:136:18 | call to s18 | provenance | | +| semantics.rb:136:14:136:17 | * ... [element 0] | semantics.rb:136:10:136:18 | call to s18 | provenance | | +| semantics.rb:136:14:136:17 | * ... [element 1] | semantics.rb:136:10:136:18 | call to s18 | provenance | | +| semantics.rb:136:14:136:17 | * ... [element 1] | semantics.rb:136:10:136:18 | call to s18 | provenance | | +| semantics.rb:136:15:136:17 | arr [element 0] | semantics.rb:136:14:136:17 | * ... [element 0] | provenance | | +| semantics.rb:136:15:136:17 | arr [element 0] | semantics.rb:136:14:136:17 | * ... [element 0] | provenance | | +| semantics.rb:136:15:136:17 | arr [element 1] | semantics.rb:136:14:136:17 | * ... [element 1] | provenance | | +| semantics.rb:136:15:136:17 | arr [element 1] | semantics.rb:136:14:136:17 | * ... [element 1] | provenance | | +| semantics.rb:137:14:137:14 | a | semantics.rb:137:10:137:15 | call to s18 | provenance | | +| semantics.rb:137:14:137:14 | a | semantics.rb:137:10:137:15 | call to s18 | provenance | | +| semantics.rb:142:5:142:5 | b | semantics.rb:146:5:146:5 | [post] h [element] | provenance | | +| semantics.rb:142:5:142:5 | b | semantics.rb:146:5:146:5 | [post] h [element] | provenance | | +| semantics.rb:142:9:142:18 | call to source | semantics.rb:142:5:142:5 | b | provenance | | +| semantics.rb:142:9:142:18 | call to source | semantics.rb:142:5:142:5 | b | provenance | | +| semantics.rb:146:5:146:5 | [post] h [element] | semantics.rb:148:14:148:14 | h [element] | provenance | | +| semantics.rb:146:5:146:5 | [post] h [element] | semantics.rb:148:14:148:14 | h [element] | provenance | | +| semantics.rb:148:14:148:14 | h [element] | semantics.rb:148:10:148:15 | call to s19 | provenance | | +| semantics.rb:148:14:148:14 | h [element] | semantics.rb:148:10:148:15 | call to s19 | provenance | | +| semantics.rb:152:5:152:5 | a | semantics.rb:153:13:153:13 | a | provenance | | +| semantics.rb:152:5:152:5 | a | semantics.rb:153:13:153:13 | a | provenance | | +| semantics.rb:152:9:152:18 | call to source | semantics.rb:152:5:152:5 | a | provenance | | +| semantics.rb:152:9:152:18 | call to source | semantics.rb:152:5:152:5 | a | provenance | | +| semantics.rb:153:5:153:5 | x [element] | semantics.rb:154:10:154:10 | x [element] | provenance | | +| semantics.rb:153:5:153:5 | x [element] | semantics.rb:154:10:154:10 | x [element] | provenance | | +| semantics.rb:153:5:153:5 | x [element] | semantics.rb:155:10:155:10 | x [element] | provenance | | +| semantics.rb:153:5:153:5 | x [element] | semantics.rb:155:10:155:10 | x [element] | provenance | | +| semantics.rb:153:9:153:14 | call to s20 [element] | semantics.rb:153:5:153:5 | x [element] | provenance | | +| semantics.rb:153:9:153:14 | call to s20 [element] | semantics.rb:153:5:153:5 | x [element] | provenance | | +| semantics.rb:153:13:153:13 | a | semantics.rb:153:9:153:14 | call to s20 [element] | provenance | | +| semantics.rb:153:13:153:13 | a | semantics.rb:153:9:153:14 | call to s20 [element] | provenance | | +| semantics.rb:154:10:154:10 | x [element] | semantics.rb:154:10:154:13 | ...[...] | provenance | | +| semantics.rb:154:10:154:10 | x [element] | semantics.rb:154:10:154:13 | ...[...] | provenance | | +| semantics.rb:155:10:155:10 | x [element] | semantics.rb:155:10:155:13 | ...[...] | provenance | | +| semantics.rb:155:10:155:10 | x [element] | semantics.rb:155:10:155:13 | ...[...] | provenance | | +| semantics.rb:159:5:159:5 | a | semantics.rb:163:5:163:5 | [post] h [element 0] | provenance | | +| semantics.rb:159:5:159:5 | a | semantics.rb:163:5:163:5 | [post] h [element 0] | provenance | | +| semantics.rb:159:9:159:18 | call to source | semantics.rb:159:5:159:5 | a | provenance | | +| semantics.rb:159:9:159:18 | call to source | semantics.rb:159:5:159:5 | a | provenance | | +| semantics.rb:160:5:160:5 | b | semantics.rb:164:5:164:5 | [post] h [element] | provenance | | +| semantics.rb:160:5:160:5 | b | semantics.rb:164:5:164:5 | [post] h [element] | provenance | | +| semantics.rb:160:9:160:18 | call to source | semantics.rb:160:5:160:5 | b | provenance | | +| semantics.rb:160:9:160:18 | call to source | semantics.rb:160:5:160:5 | b | provenance | | +| semantics.rb:163:5:163:5 | [post] h [element 0] | semantics.rb:166:14:166:14 | h [element 0] | provenance | | +| semantics.rb:163:5:163:5 | [post] h [element 0] | semantics.rb:166:14:166:14 | h [element 0] | provenance | | +| semantics.rb:164:5:164:5 | [post] h [element] | semantics.rb:166:14:166:14 | h [element] | provenance | | +| semantics.rb:164:5:164:5 | [post] h [element] | semantics.rb:166:14:166:14 | h [element] | provenance | | +| semantics.rb:166:14:166:14 | h [element 0] | semantics.rb:166:10:166:15 | call to s21 | provenance | | +| semantics.rb:166:14:166:14 | h [element 0] | semantics.rb:166:10:166:15 | call to s21 | provenance | | +| semantics.rb:166:14:166:14 | h [element] | semantics.rb:166:10:166:15 | call to s21 | provenance | | +| semantics.rb:166:14:166:14 | h [element] | semantics.rb:166:10:166:15 | call to s21 | provenance | | +| semantics.rb:170:5:170:5 | a | semantics.rb:171:13:171:13 | a | provenance | | +| semantics.rb:170:5:170:5 | a | semantics.rb:171:13:171:13 | a | provenance | | +| semantics.rb:170:9:170:18 | call to source | semantics.rb:170:5:170:5 | a | provenance | | +| semantics.rb:170:9:170:18 | call to source | semantics.rb:170:5:170:5 | a | provenance | | +| semantics.rb:171:5:171:5 | x [element] | semantics.rb:172:10:172:10 | x [element] | provenance | | +| semantics.rb:171:5:171:5 | x [element] | semantics.rb:172:10:172:10 | x [element] | provenance | | +| semantics.rb:171:5:171:5 | x [element] | semantics.rb:173:10:173:10 | x [element] | provenance | | +| semantics.rb:171:5:171:5 | x [element] | semantics.rb:173:10:173:10 | x [element] | provenance | | +| semantics.rb:171:9:171:14 | call to s22 [element] | semantics.rb:171:5:171:5 | x [element] | provenance | | +| semantics.rb:171:9:171:14 | call to s22 [element] | semantics.rb:171:5:171:5 | x [element] | provenance | | +| semantics.rb:171:13:171:13 | a | semantics.rb:171:9:171:14 | call to s22 [element] | provenance | | +| semantics.rb:171:13:171:13 | a | semantics.rb:171:9:171:14 | call to s22 [element] | provenance | | +| semantics.rb:172:10:172:10 | x [element] | semantics.rb:172:10:172:13 | ...[...] | provenance | | +| semantics.rb:172:10:172:10 | x [element] | semantics.rb:172:10:172:13 | ...[...] | provenance | | +| semantics.rb:173:10:173:10 | x [element] | semantics.rb:173:10:173:13 | ...[...] | provenance | | +| semantics.rb:173:10:173:10 | x [element] | semantics.rb:173:10:173:13 | ...[...] | provenance | | +| semantics.rb:177:5:177:5 | a | semantics.rb:180:5:180:5 | [post] h [element 0] | provenance | | +| semantics.rb:177:5:177:5 | a | semantics.rb:180:5:180:5 | [post] h [element 0] | provenance | | +| semantics.rb:177:9:177:18 | call to source | semantics.rb:177:5:177:5 | a | provenance | | +| semantics.rb:177:9:177:18 | call to source | semantics.rb:177:5:177:5 | a | provenance | | +| semantics.rb:180:5:180:5 | [post] h [element 0] | semantics.rb:181:5:181:5 | h [element 0] | provenance | | +| semantics.rb:180:5:180:5 | [post] h [element 0] | semantics.rb:181:5:181:5 | h [element 0] | provenance | | +| semantics.rb:181:5:181:5 | [post] h [element 0] | semantics.rb:182:14:182:14 | h [element 0] | provenance | | +| semantics.rb:181:5:181:5 | [post] h [element 0] | semantics.rb:182:14:182:14 | h [element 0] | provenance | | +| semantics.rb:181:5:181:5 | h [element 0] | semantics.rb:181:5:181:5 | [post] h [element 0] | provenance | | +| semantics.rb:181:5:181:5 | h [element 0] | semantics.rb:181:5:181:5 | [post] h [element 0] | provenance | | +| semantics.rb:182:14:182:14 | h [element 0] | semantics.rb:182:10:182:15 | call to s23 | provenance | | +| semantics.rb:182:14:182:14 | h [element 0] | semantics.rb:182:10:182:15 | call to s23 | provenance | | +| semantics.rb:186:5:186:5 | a | semantics.rb:187:13:187:13 | a | provenance | | +| semantics.rb:186:5:186:5 | a | semantics.rb:187:13:187:13 | a | provenance | | +| semantics.rb:186:9:186:18 | call to source | semantics.rb:186:5:186:5 | a | provenance | | +| semantics.rb:186:9:186:18 | call to source | semantics.rb:186:5:186:5 | a | provenance | | +| semantics.rb:187:5:187:5 | x [element 0] | semantics.rb:188:10:188:10 | x [element 0] | provenance | | +| semantics.rb:187:5:187:5 | x [element 0] | semantics.rb:188:10:188:10 | x [element 0] | provenance | | +| semantics.rb:187:5:187:5 | x [element 0] | semantics.rb:190:10:190:10 | x [element 0] | provenance | | +| semantics.rb:187:5:187:5 | x [element 0] | semantics.rb:190:10:190:10 | x [element 0] | provenance | | +| semantics.rb:187:9:187:14 | call to s24 [element 0] | semantics.rb:187:5:187:5 | x [element 0] | provenance | | +| semantics.rb:187:9:187:14 | call to s24 [element 0] | semantics.rb:187:5:187:5 | x [element 0] | provenance | | +| semantics.rb:187:13:187:13 | a | semantics.rb:187:9:187:14 | call to s24 [element 0] | provenance | | +| semantics.rb:187:13:187:13 | a | semantics.rb:187:9:187:14 | call to s24 [element 0] | provenance | | +| semantics.rb:188:10:188:10 | x [element 0] | semantics.rb:188:10:188:13 | ...[...] | provenance | | +| semantics.rb:188:10:188:10 | x [element 0] | semantics.rb:188:10:188:13 | ...[...] | provenance | | +| semantics.rb:190:10:190:10 | x [element 0] | semantics.rb:190:10:190:13 | ...[...] | provenance | | +| semantics.rb:190:10:190:10 | x [element 0] | semantics.rb:190:10:190:13 | ...[...] | provenance | | +| semantics.rb:194:5:194:5 | a | semantics.rb:197:5:197:5 | [post] h [element 0] | provenance | | +| semantics.rb:194:5:194:5 | a | semantics.rb:197:5:197:5 | [post] h [element 0] | provenance | | +| semantics.rb:194:9:194:18 | call to source | semantics.rb:194:5:194:5 | a | provenance | | +| semantics.rb:194:9:194:18 | call to source | semantics.rb:194:5:194:5 | a | provenance | | +| semantics.rb:197:5:197:5 | [post] h [element 0] | semantics.rb:198:5:198:5 | h [element 0] | provenance | | +| semantics.rb:197:5:197:5 | [post] h [element 0] | semantics.rb:198:5:198:5 | h [element 0] | provenance | | +| semantics.rb:198:5:198:5 | [post] h [element 0] | semantics.rb:199:14:199:14 | h [element 0] | provenance | | +| semantics.rb:198:5:198:5 | [post] h [element 0] | semantics.rb:199:14:199:14 | h [element 0] | provenance | | +| semantics.rb:198:5:198:5 | h [element 0] | semantics.rb:198:5:198:5 | [post] h [element 0] | provenance | | +| semantics.rb:198:5:198:5 | h [element 0] | semantics.rb:198:5:198:5 | [post] h [element 0] | provenance | | +| semantics.rb:199:14:199:14 | h [element 0] | semantics.rb:199:10:199:15 | call to s25 | provenance | | +| semantics.rb:199:14:199:14 | h [element 0] | semantics.rb:199:10:199:15 | call to s25 | provenance | | +| semantics.rb:203:5:203:5 | a | semantics.rb:204:13:204:13 | a | provenance | | +| semantics.rb:203:5:203:5 | a | semantics.rb:204:13:204:13 | a | provenance | | +| semantics.rb:203:9:203:18 | call to source | semantics.rb:203:5:203:5 | a | provenance | | +| semantics.rb:203:9:203:18 | call to source | semantics.rb:203:5:203:5 | a | provenance | | +| semantics.rb:204:5:204:5 | x [element 0] | semantics.rb:205:10:205:10 | x [element 0] | provenance | | +| semantics.rb:204:5:204:5 | x [element 0] | semantics.rb:205:10:205:10 | x [element 0] | provenance | | +| semantics.rb:204:5:204:5 | x [element 0] | semantics.rb:207:10:207:10 | x [element 0] | provenance | | +| semantics.rb:204:5:204:5 | x [element 0] | semantics.rb:207:10:207:10 | x [element 0] | provenance | | +| semantics.rb:204:9:204:14 | call to s26 [element 0] | semantics.rb:204:5:204:5 | x [element 0] | provenance | | +| semantics.rb:204:9:204:14 | call to s26 [element 0] | semantics.rb:204:5:204:5 | x [element 0] | provenance | | +| semantics.rb:204:13:204:13 | a | semantics.rb:204:9:204:14 | call to s26 [element 0] | provenance | | +| semantics.rb:204:13:204:13 | a | semantics.rb:204:9:204:14 | call to s26 [element 0] | provenance | | +| semantics.rb:205:10:205:10 | x [element 0] | semantics.rb:205:10:205:13 | ...[...] | provenance | | +| semantics.rb:205:10:205:10 | x [element 0] | semantics.rb:205:10:205:13 | ...[...] | provenance | | +| semantics.rb:207:10:207:10 | x [element 0] | semantics.rb:207:10:207:13 | ...[...] | provenance | | +| semantics.rb:207:10:207:10 | x [element 0] | semantics.rb:207:10:207:13 | ...[...] | provenance | | +| semantics.rb:212:5:212:5 | b | semantics.rb:218:5:218:5 | [post] h [element 1] | provenance | | +| semantics.rb:212:5:212:5 | b | semantics.rb:218:5:218:5 | [post] h [element 1] | provenance | | +| semantics.rb:212:9:212:18 | call to source | semantics.rb:212:5:212:5 | b | provenance | | +| semantics.rb:212:9:212:18 | call to source | semantics.rb:212:5:212:5 | b | provenance | | +| semantics.rb:213:5:213:5 | c | semantics.rb:219:5:219:5 | [post] h [element 2] | provenance | | +| semantics.rb:213:5:213:5 | c | semantics.rb:219:5:219:5 | [post] h [element 2] | provenance | | +| semantics.rb:213:9:213:18 | call to source | semantics.rb:213:5:213:5 | c | provenance | | +| semantics.rb:213:9:213:18 | call to source | semantics.rb:213:5:213:5 | c | provenance | | +| semantics.rb:214:5:214:5 | d | semantics.rb:220:5:220:5 | [post] h [element] | provenance | | +| semantics.rb:214:5:214:5 | d | semantics.rb:220:5:220:5 | [post] h [element] | provenance | | +| semantics.rb:214:9:214:18 | call to source | semantics.rb:214:5:214:5 | d | provenance | | +| semantics.rb:214:9:214:18 | call to source | semantics.rb:214:5:214:5 | d | provenance | | +| semantics.rb:218:5:218:5 | [post] h [element 1] | semantics.rb:219:5:219:5 | h [element 1] | provenance | | +| semantics.rb:218:5:218:5 | [post] h [element 1] | semantics.rb:219:5:219:5 | h [element 1] | provenance | | +| semantics.rb:219:5:219:5 | [post] h [element 1] | semantics.rb:222:14:222:14 | h [element 1] | provenance | | +| semantics.rb:219:5:219:5 | [post] h [element 1] | semantics.rb:222:14:222:14 | h [element 1] | provenance | | +| semantics.rb:219:5:219:5 | [post] h [element 2] | semantics.rb:222:14:222:14 | h [element 2] | provenance | | +| semantics.rb:219:5:219:5 | [post] h [element 2] | semantics.rb:222:14:222:14 | h [element 2] | provenance | | +| semantics.rb:219:5:219:5 | h [element 1] | semantics.rb:219:5:219:5 | [post] h [element 1] | provenance | | +| semantics.rb:219:5:219:5 | h [element 1] | semantics.rb:219:5:219:5 | [post] h [element 1] | provenance | | +| semantics.rb:220:5:220:5 | [post] h [element] | semantics.rb:222:14:222:14 | h [element] | provenance | | +| semantics.rb:220:5:220:5 | [post] h [element] | semantics.rb:222:14:222:14 | h [element] | provenance | | +| semantics.rb:222:14:222:14 | h [element 1] | semantics.rb:222:10:222:15 | call to s27 | provenance | | +| semantics.rb:222:14:222:14 | h [element 1] | semantics.rb:222:10:222:15 | call to s27 | provenance | | +| semantics.rb:222:14:222:14 | h [element 2] | semantics.rb:222:10:222:15 | call to s27 | provenance | | +| semantics.rb:222:14:222:14 | h [element 2] | semantics.rb:222:10:222:15 | call to s27 | provenance | | +| semantics.rb:222:14:222:14 | h [element] | semantics.rb:222:10:222:15 | call to s27 | provenance | | +| semantics.rb:222:14:222:14 | h [element] | semantics.rb:222:10:222:15 | call to s27 | provenance | | +| semantics.rb:226:5:226:5 | a | semantics.rb:227:13:227:13 | a | provenance | | +| semantics.rb:226:5:226:5 | a | semantics.rb:227:13:227:13 | a | provenance | | +| semantics.rb:226:9:226:18 | call to source | semantics.rb:226:5:226:5 | a | provenance | | +| semantics.rb:226:9:226:18 | call to source | semantics.rb:226:5:226:5 | a | provenance | | +| semantics.rb:227:5:227:5 | x [element] | semantics.rb:228:10:228:10 | x [element] | provenance | | +| semantics.rb:227:5:227:5 | x [element] | semantics.rb:228:10:228:10 | x [element] | provenance | | +| semantics.rb:227:5:227:5 | x [element] | semantics.rb:229:10:229:10 | x [element] | provenance | | +| semantics.rb:227:5:227:5 | x [element] | semantics.rb:229:10:229:10 | x [element] | provenance | | +| semantics.rb:227:5:227:5 | x [element] | semantics.rb:230:10:230:10 | x [element] | provenance | | +| semantics.rb:227:5:227:5 | x [element] | semantics.rb:230:10:230:10 | x [element] | provenance | | +| semantics.rb:227:5:227:5 | x [element] | semantics.rb:231:10:231:10 | x [element] | provenance | | +| semantics.rb:227:5:227:5 | x [element] | semantics.rb:231:10:231:10 | x [element] | provenance | | +| semantics.rb:227:9:227:14 | call to s28 [element] | semantics.rb:227:5:227:5 | x [element] | provenance | | +| semantics.rb:227:9:227:14 | call to s28 [element] | semantics.rb:227:5:227:5 | x [element] | provenance | | +| semantics.rb:227:13:227:13 | a | semantics.rb:227:9:227:14 | call to s28 [element] | provenance | | +| semantics.rb:227:13:227:13 | a | semantics.rb:227:9:227:14 | call to s28 [element] | provenance | | +| semantics.rb:228:10:228:10 | x [element] | semantics.rb:228:10:228:13 | ...[...] | provenance | | +| semantics.rb:228:10:228:10 | x [element] | semantics.rb:228:10:228:13 | ...[...] | provenance | | +| semantics.rb:229:10:229:10 | x [element] | semantics.rb:229:10:229:13 | ...[...] | provenance | | +| semantics.rb:229:10:229:10 | x [element] | semantics.rb:229:10:229:13 | ...[...] | provenance | | +| semantics.rb:230:10:230:10 | x [element] | semantics.rb:230:10:230:13 | ...[...] | provenance | | +| semantics.rb:230:10:230:10 | x [element] | semantics.rb:230:10:230:13 | ...[...] | provenance | | +| semantics.rb:231:10:231:10 | x [element] | semantics.rb:231:10:231:13 | ...[...] | provenance | | +| semantics.rb:231:10:231:10 | x [element] | semantics.rb:231:10:231:13 | ...[...] | provenance | | +| semantics.rb:236:5:236:5 | b | semantics.rb:241:5:241:5 | [post] h [element 1] | provenance | | +| semantics.rb:236:5:236:5 | b | semantics.rb:241:5:241:5 | [post] h [element 1] | provenance | | +| semantics.rb:236:9:236:18 | call to source | semantics.rb:236:5:236:5 | b | provenance | | +| semantics.rb:236:9:236:18 | call to source | semantics.rb:236:5:236:5 | b | provenance | | +| semantics.rb:237:5:237:5 | c | semantics.rb:242:5:242:5 | [post] h [element 2] | provenance | | +| semantics.rb:237:5:237:5 | c | semantics.rb:242:5:242:5 | [post] h [element 2] | provenance | | +| semantics.rb:237:9:237:18 | call to source | semantics.rb:237:5:237:5 | c | provenance | | +| semantics.rb:237:9:237:18 | call to source | semantics.rb:237:5:237:5 | c | provenance | | +| semantics.rb:241:5:241:5 | [post] h [element 1] | semantics.rb:242:5:242:5 | h [element 1] | provenance | | +| semantics.rb:241:5:241:5 | [post] h [element 1] | semantics.rb:242:5:242:5 | h [element 1] | provenance | | +| semantics.rb:242:5:242:5 | [post] h [element 1] | semantics.rb:245:14:245:14 | h [element 1] | provenance | | +| semantics.rb:242:5:242:5 | [post] h [element 1] | semantics.rb:245:14:245:14 | h [element 1] | provenance | | +| semantics.rb:242:5:242:5 | [post] h [element 2] | semantics.rb:245:14:245:14 | h [element 2] | provenance | | +| semantics.rb:242:5:242:5 | [post] h [element 2] | semantics.rb:245:14:245:14 | h [element 2] | provenance | | +| semantics.rb:242:5:242:5 | h [element 1] | semantics.rb:242:5:242:5 | [post] h [element 1] | provenance | | +| semantics.rb:242:5:242:5 | h [element 1] | semantics.rb:242:5:242:5 | [post] h [element 1] | provenance | | +| semantics.rb:245:14:245:14 | h [element 1] | semantics.rb:245:10:245:15 | call to s29 | provenance | | +| semantics.rb:245:14:245:14 | h [element 1] | semantics.rb:245:10:245:15 | call to s29 | provenance | | +| semantics.rb:245:14:245:14 | h [element 2] | semantics.rb:245:10:245:15 | call to s29 | provenance | | +| semantics.rb:245:14:245:14 | h [element 2] | semantics.rb:245:10:245:15 | call to s29 | provenance | | +| semantics.rb:249:5:249:5 | a | semantics.rb:250:13:250:13 | a | provenance | | +| semantics.rb:249:5:249:5 | a | semantics.rb:250:13:250:13 | a | provenance | | +| semantics.rb:249:9:249:18 | call to source | semantics.rb:249:5:249:5 | a | provenance | | +| semantics.rb:249:9:249:18 | call to source | semantics.rb:249:5:249:5 | a | provenance | | +| semantics.rb:250:5:250:5 | x [element] | semantics.rb:251:10:251:10 | x [element] | provenance | | +| semantics.rb:250:5:250:5 | x [element] | semantics.rb:251:10:251:10 | x [element] | provenance | | +| semantics.rb:250:5:250:5 | x [element] | semantics.rb:252:10:252:10 | x [element] | provenance | | +| semantics.rb:250:5:250:5 | x [element] | semantics.rb:252:10:252:10 | x [element] | provenance | | +| semantics.rb:250:5:250:5 | x [element] | semantics.rb:253:10:253:10 | x [element] | provenance | | +| semantics.rb:250:5:250:5 | x [element] | semantics.rb:253:10:253:10 | x [element] | provenance | | +| semantics.rb:250:5:250:5 | x [element] | semantics.rb:254:10:254:10 | x [element] | provenance | | +| semantics.rb:250:5:250:5 | x [element] | semantics.rb:254:10:254:10 | x [element] | provenance | | +| semantics.rb:250:9:250:14 | call to s30 [element] | semantics.rb:250:5:250:5 | x [element] | provenance | | +| semantics.rb:250:9:250:14 | call to s30 [element] | semantics.rb:250:5:250:5 | x [element] | provenance | | +| semantics.rb:250:13:250:13 | a | semantics.rb:250:9:250:14 | call to s30 [element] | provenance | | +| semantics.rb:250:13:250:13 | a | semantics.rb:250:9:250:14 | call to s30 [element] | provenance | | +| semantics.rb:251:10:251:10 | x [element] | semantics.rb:251:10:251:13 | ...[...] | provenance | | +| semantics.rb:251:10:251:10 | x [element] | semantics.rb:251:10:251:13 | ...[...] | provenance | | +| semantics.rb:252:10:252:10 | x [element] | semantics.rb:252:10:252:13 | ...[...] | provenance | | +| semantics.rb:252:10:252:10 | x [element] | semantics.rb:252:10:252:13 | ...[...] | provenance | | +| semantics.rb:253:10:253:10 | x [element] | semantics.rb:253:10:253:13 | ...[...] | provenance | | +| semantics.rb:253:10:253:10 | x [element] | semantics.rb:253:10:253:13 | ...[...] | provenance | | +| semantics.rb:254:10:254:10 | x [element] | semantics.rb:254:10:254:13 | ...[...] | provenance | | +| semantics.rb:254:10:254:10 | x [element] | semantics.rb:254:10:254:13 | ...[...] | provenance | | +| semantics.rb:258:5:258:5 | [post] h [element :foo] | semantics.rb:259:5:259:5 | h [element :foo] | provenance | | +| semantics.rb:258:5:258:5 | [post] h [element :foo] | semantics.rb:259:5:259:5 | h [element :foo] | provenance | | +| semantics.rb:258:15:258:25 | call to source | semantics.rb:258:5:258:5 | [post] h [element :foo] | provenance | | +| semantics.rb:258:15:258:25 | call to source | semantics.rb:258:5:258:5 | [post] h [element :foo] | provenance | | +| semantics.rb:259:5:259:5 | [post] h [element :foo] | semantics.rb:260:5:260:5 | h [element :foo] | provenance | | +| semantics.rb:259:5:259:5 | [post] h [element :foo] | semantics.rb:260:5:260:5 | h [element :foo] | provenance | | +| semantics.rb:259:5:259:5 | h [element :foo] | semantics.rb:259:5:259:5 | [post] h [element :foo] | provenance | | +| semantics.rb:259:5:259:5 | h [element :foo] | semantics.rb:259:5:259:5 | [post] h [element :foo] | provenance | | +| semantics.rb:260:5:260:5 | [post] h [element :foo] | semantics.rb:263:14:263:14 | h [element :foo] | provenance | | +| semantics.rb:260:5:260:5 | [post] h [element :foo] | semantics.rb:263:14:263:14 | h [element :foo] | provenance | | +| semantics.rb:260:5:260:5 | h [element :foo] | semantics.rb:260:5:260:5 | [post] h [element :foo] | provenance | | +| semantics.rb:260:5:260:5 | h [element :foo] | semantics.rb:260:5:260:5 | [post] h [element :foo] | provenance | | +| semantics.rb:261:5:261:5 | [post] h [element] | semantics.rb:263:14:263:14 | h [element] | provenance | | +| semantics.rb:261:5:261:5 | [post] h [element] | semantics.rb:263:14:263:14 | h [element] | provenance | | +| semantics.rb:261:12:261:22 | call to source | semantics.rb:261:5:261:5 | [post] h [element] | provenance | | +| semantics.rb:261:12:261:22 | call to source | semantics.rb:261:5:261:5 | [post] h [element] | provenance | | +| semantics.rb:263:14:263:14 | h [element :foo] | semantics.rb:263:10:263:15 | call to s31 | provenance | | +| semantics.rb:263:14:263:14 | h [element :foo] | semantics.rb:263:10:263:15 | call to s31 | provenance | | +| semantics.rb:263:14:263:14 | h [element] | semantics.rb:263:10:263:15 | call to s31 | provenance | | +| semantics.rb:263:14:263:14 | h [element] | semantics.rb:263:10:263:15 | call to s31 | provenance | | +| semantics.rb:268:5:268:5 | [post] h [element foo] | semantics.rb:269:5:269:5 | h [element foo] | provenance | | +| semantics.rb:268:5:268:5 | [post] h [element foo] | semantics.rb:269:5:269:5 | h [element foo] | provenance | | +| semantics.rb:268:16:268:26 | call to source | semantics.rb:268:5:268:5 | [post] h [element foo] | provenance | | +| semantics.rb:268:16:268:26 | call to source | semantics.rb:268:5:268:5 | [post] h [element foo] | provenance | | +| semantics.rb:269:5:269:5 | [post] h [element foo] | semantics.rb:270:5:270:5 | h [element foo] | provenance | | +| semantics.rb:269:5:269:5 | [post] h [element foo] | semantics.rb:270:5:270:5 | h [element foo] | provenance | | +| semantics.rb:269:5:269:5 | h [element foo] | semantics.rb:269:5:269:5 | [post] h [element foo] | provenance | | +| semantics.rb:269:5:269:5 | h [element foo] | semantics.rb:269:5:269:5 | [post] h [element foo] | provenance | | +| semantics.rb:270:5:270:5 | [post] h [element foo] | semantics.rb:273:14:273:14 | h [element foo] | provenance | | +| semantics.rb:270:5:270:5 | [post] h [element foo] | semantics.rb:273:14:273:14 | h [element foo] | provenance | | +| semantics.rb:270:5:270:5 | h [element foo] | semantics.rb:270:5:270:5 | [post] h [element foo] | provenance | | +| semantics.rb:270:5:270:5 | h [element foo] | semantics.rb:270:5:270:5 | [post] h [element foo] | provenance | | +| semantics.rb:271:5:271:5 | [post] h [element] | semantics.rb:273:14:273:14 | h [element] | provenance | | +| semantics.rb:271:5:271:5 | [post] h [element] | semantics.rb:273:14:273:14 | h [element] | provenance | | +| semantics.rb:271:12:271:22 | call to source | semantics.rb:271:5:271:5 | [post] h [element] | provenance | | +| semantics.rb:271:12:271:22 | call to source | semantics.rb:271:5:271:5 | [post] h [element] | provenance | | +| semantics.rb:273:14:273:14 | h [element foo] | semantics.rb:273:10:273:15 | call to s32 | provenance | | +| semantics.rb:273:14:273:14 | h [element foo] | semantics.rb:273:10:273:15 | call to s32 | provenance | | +| semantics.rb:273:14:273:14 | h [element] | semantics.rb:273:10:273:15 | call to s32 | provenance | | +| semantics.rb:273:14:273:14 | h [element] | semantics.rb:273:10:273:15 | call to s32 | provenance | | +| semantics.rb:281:5:281:5 | [post] h [element] | semantics.rb:282:5:282:5 | h [element] | provenance | | +| semantics.rb:281:5:281:5 | [post] h [element] | semantics.rb:282:5:282:5 | h [element] | provenance | | +| semantics.rb:281:12:281:22 | call to source | semantics.rb:281:5:281:5 | [post] h [element] | provenance | | +| semantics.rb:281:12:281:22 | call to source | semantics.rb:281:5:281:5 | [post] h [element] | provenance | | +| semantics.rb:282:5:282:5 | [post] h [element nil] | semantics.rb:283:5:283:5 | h [element nil] | provenance | | +| semantics.rb:282:5:282:5 | [post] h [element nil] | semantics.rb:283:5:283:5 | h [element nil] | provenance | | +| semantics.rb:282:5:282:5 | [post] h [element] | semantics.rb:283:5:283:5 | h [element] | provenance | | +| semantics.rb:282:5:282:5 | [post] h [element] | semantics.rb:283:5:283:5 | h [element] | provenance | | +| semantics.rb:282:5:282:5 | h [element] | semantics.rb:282:5:282:5 | [post] h [element] | provenance | | +| semantics.rb:282:5:282:5 | h [element] | semantics.rb:282:5:282:5 | [post] h [element] | provenance | | +| semantics.rb:282:14:282:24 | call to source | semantics.rb:282:5:282:5 | [post] h [element nil] | provenance | | +| semantics.rb:282:14:282:24 | call to source | semantics.rb:282:5:282:5 | [post] h [element nil] | provenance | | +| semantics.rb:283:5:283:5 | [post] h [element nil] | semantics.rb:284:5:284:5 | h [element nil] | provenance | | +| semantics.rb:283:5:283:5 | [post] h [element nil] | semantics.rb:284:5:284:5 | h [element nil] | provenance | | +| semantics.rb:283:5:283:5 | [post] h [element true] | semantics.rb:284:5:284:5 | h [element true] | provenance | | +| semantics.rb:283:5:283:5 | [post] h [element true] | semantics.rb:284:5:284:5 | h [element true] | provenance | | +| semantics.rb:283:5:283:5 | [post] h [element] | semantics.rb:284:5:284:5 | h [element] | provenance | | +| semantics.rb:283:5:283:5 | [post] h [element] | semantics.rb:284:5:284:5 | h [element] | provenance | | +| semantics.rb:283:5:283:5 | h [element nil] | semantics.rb:283:5:283:5 | [post] h [element nil] | provenance | | +| semantics.rb:283:5:283:5 | h [element nil] | semantics.rb:283:5:283:5 | [post] h [element nil] | provenance | | +| semantics.rb:283:5:283:5 | h [element] | semantics.rb:283:5:283:5 | [post] h [element] | provenance | | +| semantics.rb:283:5:283:5 | h [element] | semantics.rb:283:5:283:5 | [post] h [element] | provenance | | +| semantics.rb:283:15:283:25 | call to source | semantics.rb:283:5:283:5 | [post] h [element true] | provenance | | +| semantics.rb:283:15:283:25 | call to source | semantics.rb:283:5:283:5 | [post] h [element true] | provenance | | +| semantics.rb:284:5:284:5 | [post] h [element false] | semantics.rb:286:14:286:14 | h [element false] | provenance | | +| semantics.rb:284:5:284:5 | [post] h [element false] | semantics.rb:286:14:286:14 | h [element false] | provenance | | +| semantics.rb:284:5:284:5 | [post] h [element nil] | semantics.rb:286:14:286:14 | h [element nil] | provenance | | +| semantics.rb:284:5:284:5 | [post] h [element nil] | semantics.rb:286:14:286:14 | h [element nil] | provenance | | +| semantics.rb:284:5:284:5 | [post] h [element true] | semantics.rb:286:14:286:14 | h [element true] | provenance | | +| semantics.rb:284:5:284:5 | [post] h [element true] | semantics.rb:286:14:286:14 | h [element true] | provenance | | +| semantics.rb:284:5:284:5 | [post] h [element] | semantics.rb:286:14:286:14 | h [element] | provenance | | +| semantics.rb:284:5:284:5 | [post] h [element] | semantics.rb:286:14:286:14 | h [element] | provenance | | +| semantics.rb:284:5:284:5 | h [element nil] | semantics.rb:284:5:284:5 | [post] h [element nil] | provenance | | +| semantics.rb:284:5:284:5 | h [element nil] | semantics.rb:284:5:284:5 | [post] h [element nil] | provenance | | +| semantics.rb:284:5:284:5 | h [element true] | semantics.rb:284:5:284:5 | [post] h [element true] | provenance | | +| semantics.rb:284:5:284:5 | h [element true] | semantics.rb:284:5:284:5 | [post] h [element true] | provenance | | +| semantics.rb:284:5:284:5 | h [element] | semantics.rb:284:5:284:5 | [post] h [element] | provenance | | +| semantics.rb:284:5:284:5 | h [element] | semantics.rb:284:5:284:5 | [post] h [element] | provenance | | +| semantics.rb:284:16:284:26 | call to source | semantics.rb:284:5:284:5 | [post] h [element false] | provenance | | +| semantics.rb:284:16:284:26 | call to source | semantics.rb:284:5:284:5 | [post] h [element false] | provenance | | +| semantics.rb:286:14:286:14 | h [element false] | semantics.rb:286:10:286:15 | call to s33 | provenance | | +| semantics.rb:286:14:286:14 | h [element false] | semantics.rb:286:10:286:15 | call to s33 | provenance | | +| semantics.rb:286:14:286:14 | h [element nil] | semantics.rb:286:10:286:15 | call to s33 | provenance | | +| semantics.rb:286:14:286:14 | h [element nil] | semantics.rb:286:10:286:15 | call to s33 | provenance | | +| semantics.rb:286:14:286:14 | h [element true] | semantics.rb:286:10:286:15 | call to s33 | provenance | | +| semantics.rb:286:14:286:14 | h [element true] | semantics.rb:286:10:286:15 | call to s33 | provenance | | +| semantics.rb:286:14:286:14 | h [element] | semantics.rb:286:10:286:15 | call to s33 | provenance | | +| semantics.rb:286:14:286:14 | h [element] | semantics.rb:286:10:286:15 | call to s33 | provenance | | +| semantics.rb:290:5:290:5 | x [element :foo] | semantics.rb:291:10:291:10 | x [element :foo] | provenance | | +| semantics.rb:290:5:290:5 | x [element :foo] | semantics.rb:291:10:291:10 | x [element :foo] | provenance | | +| semantics.rb:290:5:290:5 | x [element :foo] | semantics.rb:293:10:293:10 | x [element :foo] | provenance | | +| semantics.rb:290:5:290:5 | x [element :foo] | semantics.rb:293:10:293:10 | x [element :foo] | provenance | | +| semantics.rb:290:9:290:24 | call to s35 [element :foo] | semantics.rb:290:5:290:5 | x [element :foo] | provenance | | +| semantics.rb:290:9:290:24 | call to s35 [element :foo] | semantics.rb:290:5:290:5 | x [element :foo] | provenance | | +| semantics.rb:290:13:290:23 | call to source | semantics.rb:290:9:290:24 | call to s35 [element :foo] | provenance | | +| semantics.rb:290:13:290:23 | call to source | semantics.rb:290:9:290:24 | call to s35 [element :foo] | provenance | | +| semantics.rb:291:10:291:10 | x [element :foo] | semantics.rb:291:10:291:16 | ...[...] | provenance | | +| semantics.rb:291:10:291:10 | x [element :foo] | semantics.rb:291:10:291:16 | ...[...] | provenance | | +| semantics.rb:293:10:293:10 | x [element :foo] | semantics.rb:293:10:293:13 | ...[...] | provenance | | +| semantics.rb:293:10:293:10 | x [element :foo] | semantics.rb:293:10:293:13 | ...[...] | provenance | | +| semantics.rb:297:5:297:5 | x [element foo] | semantics.rb:299:10:299:10 | x [element foo] | provenance | | +| semantics.rb:297:5:297:5 | x [element foo] | semantics.rb:299:10:299:10 | x [element foo] | provenance | | +| semantics.rb:297:5:297:5 | x [element foo] | semantics.rb:301:10:301:10 | x [element foo] | provenance | | +| semantics.rb:297:5:297:5 | x [element foo] | semantics.rb:301:10:301:10 | x [element foo] | provenance | | +| semantics.rb:297:9:297:24 | call to s36 [element foo] | semantics.rb:297:5:297:5 | x [element foo] | provenance | | +| semantics.rb:297:9:297:24 | call to s36 [element foo] | semantics.rb:297:5:297:5 | x [element foo] | provenance | | +| semantics.rb:297:13:297:23 | call to source | semantics.rb:297:9:297:24 | call to s36 [element foo] | provenance | | +| semantics.rb:297:13:297:23 | call to source | semantics.rb:297:9:297:24 | call to s36 [element foo] | provenance | | +| semantics.rb:299:10:299:10 | x [element foo] | semantics.rb:299:10:299:17 | ...[...] | provenance | | +| semantics.rb:299:10:299:10 | x [element foo] | semantics.rb:299:10:299:17 | ...[...] | provenance | | +| semantics.rb:301:10:301:10 | x [element foo] | semantics.rb:301:10:301:13 | ...[...] | provenance | | +| semantics.rb:301:10:301:10 | x [element foo] | semantics.rb:301:10:301:13 | ...[...] | provenance | | +| semantics.rb:305:5:305:5 | x [element true] | semantics.rb:307:10:307:10 | x [element true] | provenance | | +| semantics.rb:305:5:305:5 | x [element true] | semantics.rb:307:10:307:10 | x [element true] | provenance | | +| semantics.rb:305:5:305:5 | x [element true] | semantics.rb:309:10:309:10 | x [element true] | provenance | | +| semantics.rb:305:5:305:5 | x [element true] | semantics.rb:309:10:309:10 | x [element true] | provenance | | +| semantics.rb:305:9:305:24 | call to s37 [element true] | semantics.rb:305:5:305:5 | x [element true] | provenance | | +| semantics.rb:305:9:305:24 | call to s37 [element true] | semantics.rb:305:5:305:5 | x [element true] | provenance | | +| semantics.rb:305:13:305:23 | call to source | semantics.rb:305:9:305:24 | call to s37 [element true] | provenance | | +| semantics.rb:305:13:305:23 | call to source | semantics.rb:305:9:305:24 | call to s37 [element true] | provenance | | +| semantics.rb:307:10:307:10 | x [element true] | semantics.rb:307:10:307:16 | ...[...] | provenance | | +| semantics.rb:307:10:307:10 | x [element true] | semantics.rb:307:10:307:16 | ...[...] | provenance | | +| semantics.rb:309:10:309:10 | x [element true] | semantics.rb:309:10:309:13 | ...[...] | provenance | | +| semantics.rb:309:10:309:10 | x [element true] | semantics.rb:309:10:309:13 | ...[...] | provenance | | +| semantics.rb:313:5:313:5 | [post] h [element foo] | semantics.rb:316:14:316:14 | h [element foo] | provenance | | +| semantics.rb:313:5:313:5 | [post] h [element foo] | semantics.rb:316:14:316:14 | h [element foo] | provenance | | +| semantics.rb:313:16:313:26 | call to source | semantics.rb:313:5:313:5 | [post] h [element foo] | provenance | | +| semantics.rb:313:16:313:26 | call to source | semantics.rb:313:5:313:5 | [post] h [element foo] | provenance | | +| semantics.rb:316:14:316:14 | h [element foo] | semantics.rb:316:10:316:15 | call to s38 | provenance | | +| semantics.rb:316:14:316:14 | h [element foo] | semantics.rb:316:10:316:15 | call to s38 | provenance | | +| semantics.rb:320:5:320:5 | x [element :foo] | semantics.rb:322:10:322:10 | x [element :foo] | provenance | | +| semantics.rb:320:5:320:5 | x [element :foo] | semantics.rb:322:10:322:10 | x [element :foo] | provenance | | +| semantics.rb:320:5:320:5 | x [element :foo] | semantics.rb:323:10:323:10 | x [element :foo] | provenance | | +| semantics.rb:320:5:320:5 | x [element :foo] | semantics.rb:323:10:323:10 | x [element :foo] | provenance | | +| semantics.rb:320:9:320:24 | call to s39 [element :foo] | semantics.rb:320:5:320:5 | x [element :foo] | provenance | | +| semantics.rb:320:9:320:24 | call to s39 [element :foo] | semantics.rb:320:5:320:5 | x [element :foo] | provenance | | +| semantics.rb:320:13:320:23 | call to source | semantics.rb:320:9:320:24 | call to s39 [element :foo] | provenance | | +| semantics.rb:320:13:320:23 | call to source | semantics.rb:320:9:320:24 | call to s39 [element :foo] | provenance | | +| semantics.rb:322:10:322:10 | x [element :foo] | semantics.rb:322:10:322:16 | ...[...] | provenance | | +| semantics.rb:322:10:322:10 | x [element :foo] | semantics.rb:322:10:322:16 | ...[...] | provenance | | +| semantics.rb:323:10:323:10 | x [element :foo] | semantics.rb:323:10:323:13 | ...[...] | provenance | | +| semantics.rb:323:10:323:10 | x [element :foo] | semantics.rb:323:10:323:13 | ...[...] | provenance | | +| semantics.rb:328:5:328:5 | [post] x [@foo] | semantics.rb:330:14:330:14 | x [@foo] | provenance | | +| semantics.rb:328:5:328:5 | [post] x [@foo] | semantics.rb:330:14:330:14 | x [@foo] | provenance | | +| semantics.rb:328:13:328:23 | call to source | semantics.rb:328:5:328:5 | [post] x [@foo] | provenance | | +| semantics.rb:328:13:328:23 | call to source | semantics.rb:328:5:328:5 | [post] x [@foo] | provenance | | +| semantics.rb:330:14:330:14 | x [@foo] | semantics.rb:330:10:330:15 | call to s40 | provenance | | +| semantics.rb:330:14:330:14 | x [@foo] | semantics.rb:330:10:330:15 | call to s40 | provenance | | +| semantics.rb:334:5:334:5 | x [@foo] | semantics.rb:335:10:335:10 | x [@foo] | provenance | | +| semantics.rb:334:5:334:5 | x [@foo] | semantics.rb:335:10:335:10 | x [@foo] | provenance | | +| semantics.rb:334:9:334:24 | call to s41 [@foo] | semantics.rb:334:5:334:5 | x [@foo] | provenance | | +| semantics.rb:334:9:334:24 | call to s41 [@foo] | semantics.rb:334:5:334:5 | x [@foo] | provenance | | +| semantics.rb:334:13:334:23 | call to source | semantics.rb:334:9:334:24 | call to s41 [@foo] | provenance | | +| semantics.rb:334:13:334:23 | call to source | semantics.rb:334:9:334:24 | call to s41 [@foo] | provenance | | +| semantics.rb:335:10:335:10 | x [@foo] | semantics.rb:335:10:335:14 | call to foo | provenance | | +| semantics.rb:335:10:335:10 | x [@foo] | semantics.rb:335:10:335:14 | call to foo | provenance | | +| semantics.rb:340:5:340:5 | [post] h [element 0] | semantics.rb:343:13:343:13 | h [element 0] | provenance | | +| semantics.rb:340:5:340:5 | [post] h [element 0] | semantics.rb:343:13:343:13 | h [element 0] | provenance | | +| semantics.rb:340:12:340:22 | call to source | semantics.rb:340:5:340:5 | [post] h [element 0] | provenance | | +| semantics.rb:340:12:340:22 | call to source | semantics.rb:340:5:340:5 | [post] h [element 0] | provenance | | +| semantics.rb:341:5:341:5 | [post] h [element] | semantics.rb:343:13:343:13 | h [element] | provenance | | +| semantics.rb:341:5:341:5 | [post] h [element] | semantics.rb:343:13:343:13 | h [element] | provenance | | +| semantics.rb:341:12:341:22 | call to source | semantics.rb:341:5:341:5 | [post] h [element] | provenance | | +| semantics.rb:341:12:341:22 | call to source | semantics.rb:341:5:341:5 | [post] h [element] | provenance | | +| semantics.rb:343:5:343:5 | x [element 0] | semantics.rb:345:10:345:10 | x [element 0] | provenance | | +| semantics.rb:343:5:343:5 | x [element 0] | semantics.rb:345:10:345:10 | x [element 0] | provenance | | +| semantics.rb:343:5:343:5 | x [element 0] | semantics.rb:347:10:347:10 | x [element 0] | provenance | | +| semantics.rb:343:5:343:5 | x [element 0] | semantics.rb:347:10:347:10 | x [element 0] | provenance | | +| semantics.rb:343:5:343:5 | x [element] | semantics.rb:345:10:345:10 | x [element] | provenance | | +| semantics.rb:343:5:343:5 | x [element] | semantics.rb:345:10:345:10 | x [element] | provenance | | +| semantics.rb:343:5:343:5 | x [element] | semantics.rb:346:10:346:10 | x [element] | provenance | | +| semantics.rb:343:5:343:5 | x [element] | semantics.rb:346:10:346:10 | x [element] | provenance | | +| semantics.rb:343:5:343:5 | x [element] | semantics.rb:347:10:347:10 | x [element] | provenance | | +| semantics.rb:343:5:343:5 | x [element] | semantics.rb:347:10:347:10 | x [element] | provenance | | +| semantics.rb:343:9:343:14 | call to s42 [element 0] | semantics.rb:343:5:343:5 | x [element 0] | provenance | | +| semantics.rb:343:9:343:14 | call to s42 [element 0] | semantics.rb:343:5:343:5 | x [element 0] | provenance | | +| semantics.rb:343:9:343:14 | call to s42 [element] | semantics.rb:343:5:343:5 | x [element] | provenance | | +| semantics.rb:343:9:343:14 | call to s42 [element] | semantics.rb:343:5:343:5 | x [element] | provenance | | +| semantics.rb:343:13:343:13 | h [element 0] | semantics.rb:343:9:343:14 | call to s42 [element 0] | provenance | | +| semantics.rb:343:13:343:13 | h [element 0] | semantics.rb:343:9:343:14 | call to s42 [element 0] | provenance | | +| semantics.rb:343:13:343:13 | h [element] | semantics.rb:343:9:343:14 | call to s42 [element] | provenance | | +| semantics.rb:343:13:343:13 | h [element] | semantics.rb:343:9:343:14 | call to s42 [element] | provenance | | +| semantics.rb:345:10:345:10 | x [element 0] | semantics.rb:345:10:345:13 | ...[...] | provenance | | +| semantics.rb:345:10:345:10 | x [element 0] | semantics.rb:345:10:345:13 | ...[...] | provenance | | +| semantics.rb:345:10:345:10 | x [element] | semantics.rb:345:10:345:13 | ...[...] | provenance | | +| semantics.rb:345:10:345:10 | x [element] | semantics.rb:345:10:345:13 | ...[...] | provenance | | +| semantics.rb:346:10:346:10 | x [element] | semantics.rb:346:10:346:13 | ...[...] | provenance | | +| semantics.rb:346:10:346:10 | x [element] | semantics.rb:346:10:346:13 | ...[...] | provenance | | +| semantics.rb:347:10:347:10 | x [element 0] | semantics.rb:347:10:347:13 | ...[...] | provenance | | +| semantics.rb:347:10:347:10 | x [element 0] | semantics.rb:347:10:347:13 | ...[...] | provenance | | +| semantics.rb:347:10:347:10 | x [element] | semantics.rb:347:10:347:13 | ...[...] | provenance | | +| semantics.rb:347:10:347:10 | x [element] | semantics.rb:347:10:347:13 | ...[...] | provenance | | +| semantics.rb:351:5:351:5 | [post] h [element 0] | semantics.rb:354:13:354:13 | h [element 0] | provenance | | +| semantics.rb:351:5:351:5 | [post] h [element 0] | semantics.rb:354:13:354:13 | h [element 0] | provenance | | +| semantics.rb:351:12:351:22 | call to source | semantics.rb:351:5:351:5 | [post] h [element 0] | provenance | | +| semantics.rb:351:12:351:22 | call to source | semantics.rb:351:5:351:5 | [post] h [element 0] | provenance | | +| semantics.rb:354:5:354:5 | x [element 0] | semantics.rb:356:10:356:10 | x [element 0] | provenance | | +| semantics.rb:354:5:354:5 | x [element 0] | semantics.rb:356:10:356:10 | x [element 0] | provenance | | +| semantics.rb:354:5:354:5 | x [element 0] | semantics.rb:358:10:358:10 | x [element 0] | provenance | | +| semantics.rb:354:5:354:5 | x [element 0] | semantics.rb:358:10:358:10 | x [element 0] | provenance | | +| semantics.rb:354:9:354:14 | call to s43 [element 0] | semantics.rb:354:5:354:5 | x [element 0] | provenance | | +| semantics.rb:354:9:354:14 | call to s43 [element 0] | semantics.rb:354:5:354:5 | x [element 0] | provenance | | +| semantics.rb:354:13:354:13 | h [element 0] | semantics.rb:354:9:354:14 | call to s43 [element 0] | provenance | | +| semantics.rb:354:13:354:13 | h [element 0] | semantics.rb:354:9:354:14 | call to s43 [element 0] | provenance | | +| semantics.rb:356:10:356:10 | x [element 0] | semantics.rb:356:10:356:13 | ...[...] | provenance | | +| semantics.rb:356:10:356:10 | x [element 0] | semantics.rb:356:10:356:13 | ...[...] | provenance | | +| semantics.rb:358:10:358:10 | x [element 0] | semantics.rb:358:10:358:13 | ...[...] | provenance | | +| semantics.rb:358:10:358:10 | x [element 0] | semantics.rb:358:10:358:13 | ...[...] | provenance | | +| semantics.rb:363:5:363:5 | [post] h [element 1] | semantics.rb:366:9:366:9 | h [element 1] | provenance | | +| semantics.rb:363:5:363:5 | [post] h [element 1] | semantics.rb:366:9:366:9 | h [element 1] | provenance | | +| semantics.rb:363:12:363:22 | call to source | semantics.rb:363:5:363:5 | [post] h [element 1] | provenance | | +| semantics.rb:363:12:363:22 | call to source | semantics.rb:363:5:363:5 | [post] h [element 1] | provenance | | +| semantics.rb:366:9:366:9 | [post] h [element 1] | semantics.rb:369:10:369:10 | h [element 1] | provenance | | +| semantics.rb:366:9:366:9 | [post] h [element 1] | semantics.rb:369:10:369:10 | h [element 1] | provenance | | +| semantics.rb:366:9:366:9 | [post] h [element 1] | semantics.rb:370:10:370:10 | h [element 1] | provenance | | +| semantics.rb:366:9:366:9 | [post] h [element 1] | semantics.rb:370:10:370:10 | h [element 1] | provenance | | +| semantics.rb:366:9:366:9 | h [element 1] | semantics.rb:366:9:366:9 | [post] h [element 1] | provenance | | +| semantics.rb:366:9:366:9 | h [element 1] | semantics.rb:366:9:366:9 | [post] h [element 1] | provenance | | +| semantics.rb:369:10:369:10 | h [element 1] | semantics.rb:369:10:369:13 | ...[...] | provenance | | +| semantics.rb:369:10:369:10 | h [element 1] | semantics.rb:369:10:369:13 | ...[...] | provenance | | +| semantics.rb:370:10:370:10 | h [element 1] | semantics.rb:370:10:370:13 | ...[...] | provenance | | +| semantics.rb:370:10:370:10 | h [element 1] | semantics.rb:370:10:370:13 | ...[...] | provenance | | +| semantics.rb:374:5:374:5 | [post] h [element 0] | semantics.rb:375:5:375:5 | h [element 0] | provenance | | +| semantics.rb:374:5:374:5 | [post] h [element 0] | semantics.rb:375:5:375:5 | h [element 0] | provenance | | +| semantics.rb:374:12:374:22 | call to source | semantics.rb:374:5:374:5 | [post] h [element 0] | provenance | | +| semantics.rb:374:12:374:22 | call to source | semantics.rb:374:5:374:5 | [post] h [element 0] | provenance | | +| semantics.rb:375:5:375:5 | [post] h [element 0] | semantics.rb:378:10:378:10 | h [element 0] | provenance | | +| semantics.rb:375:5:375:5 | [post] h [element 0] | semantics.rb:378:10:378:10 | h [element 0] | provenance | | +| semantics.rb:375:5:375:5 | [post] h [element 0] | semantics.rb:380:10:380:10 | h [element 0] | provenance | | +| semantics.rb:375:5:375:5 | [post] h [element 0] | semantics.rb:380:10:380:10 | h [element 0] | provenance | | +| semantics.rb:375:5:375:5 | [post] h [element 1] | semantics.rb:379:10:379:10 | h [element 1] | provenance | | +| semantics.rb:375:5:375:5 | [post] h [element 1] | semantics.rb:379:10:379:10 | h [element 1] | provenance | | +| semantics.rb:375:5:375:5 | [post] h [element 1] | semantics.rb:380:10:380:10 | h [element 1] | provenance | | +| semantics.rb:375:5:375:5 | [post] h [element 1] | semantics.rb:380:10:380:10 | h [element 1] | provenance | | +| semantics.rb:375:5:375:5 | [post] h [element 1] | semantics.rb:382:9:382:9 | h [element 1] | provenance | | +| semantics.rb:375:5:375:5 | [post] h [element 1] | semantics.rb:382:9:382:9 | h [element 1] | provenance | | +| semantics.rb:375:5:375:5 | h [element 0] | semantics.rb:375:5:375:5 | [post] h [element 0] | provenance | | +| semantics.rb:375:5:375:5 | h [element 0] | semantics.rb:375:5:375:5 | [post] h [element 0] | provenance | | +| semantics.rb:375:12:375:22 | call to source | semantics.rb:375:5:375:5 | [post] h [element 1] | provenance | | +| semantics.rb:375:12:375:22 | call to source | semantics.rb:375:5:375:5 | [post] h [element 1] | provenance | | +| semantics.rb:376:5:376:5 | [post] h [element] | semantics.rb:378:10:378:10 | h [element] | provenance | | +| semantics.rb:376:5:376:5 | [post] h [element] | semantics.rb:378:10:378:10 | h [element] | provenance | | +| semantics.rb:376:5:376:5 | [post] h [element] | semantics.rb:379:10:379:10 | h [element] | provenance | | +| semantics.rb:376:5:376:5 | [post] h [element] | semantics.rb:379:10:379:10 | h [element] | provenance | | +| semantics.rb:376:5:376:5 | [post] h [element] | semantics.rb:380:10:380:10 | h [element] | provenance | | +| semantics.rb:376:5:376:5 | [post] h [element] | semantics.rb:380:10:380:10 | h [element] | provenance | | +| semantics.rb:376:5:376:5 | [post] h [element] | semantics.rb:382:9:382:9 | h [element] | provenance | | +| semantics.rb:376:5:376:5 | [post] h [element] | semantics.rb:382:9:382:9 | h [element] | provenance | | +| semantics.rb:376:12:376:22 | call to source | semantics.rb:376:5:376:5 | [post] h [element] | provenance | | +| semantics.rb:376:12:376:22 | call to source | semantics.rb:376:5:376:5 | [post] h [element] | provenance | | +| semantics.rb:378:10:378:10 | h [element 0] | semantics.rb:378:10:378:13 | ...[...] | provenance | | +| semantics.rb:378:10:378:10 | h [element 0] | semantics.rb:378:10:378:13 | ...[...] | provenance | | +| semantics.rb:378:10:378:10 | h [element] | semantics.rb:378:10:378:13 | ...[...] | provenance | | +| semantics.rb:378:10:378:10 | h [element] | semantics.rb:378:10:378:13 | ...[...] | provenance | | +| semantics.rb:379:10:379:10 | h [element 1] | semantics.rb:379:10:379:13 | ...[...] | provenance | | +| semantics.rb:379:10:379:10 | h [element 1] | semantics.rb:379:10:379:13 | ...[...] | provenance | | +| semantics.rb:379:10:379:10 | h [element] | semantics.rb:379:10:379:13 | ...[...] | provenance | | +| semantics.rb:379:10:379:10 | h [element] | semantics.rb:379:10:379:13 | ...[...] | provenance | | +| semantics.rb:380:10:380:10 | h [element 0] | semantics.rb:380:10:380:13 | ...[...] | provenance | | +| semantics.rb:380:10:380:10 | h [element 0] | semantics.rb:380:10:380:13 | ...[...] | provenance | | +| semantics.rb:380:10:380:10 | h [element 1] | semantics.rb:380:10:380:13 | ...[...] | provenance | | +| semantics.rb:380:10:380:10 | h [element 1] | semantics.rb:380:10:380:13 | ...[...] | provenance | | +| semantics.rb:380:10:380:10 | h [element] | semantics.rb:380:10:380:13 | ...[...] | provenance | | +| semantics.rb:380:10:380:10 | h [element] | semantics.rb:380:10:380:13 | ...[...] | provenance | | +| semantics.rb:382:9:382:9 | [post] h [element 1] | semantics.rb:385:10:385:10 | h [element 1] | provenance | | +| semantics.rb:382:9:382:9 | [post] h [element 1] | semantics.rb:385:10:385:10 | h [element 1] | provenance | | +| semantics.rb:382:9:382:9 | [post] h [element 1] | semantics.rb:386:10:386:10 | h [element 1] | provenance | | +| semantics.rb:382:9:382:9 | [post] h [element 1] | semantics.rb:386:10:386:10 | h [element 1] | provenance | | +| semantics.rb:382:9:382:9 | [post] h [element] | semantics.rb:384:10:384:10 | h [element] | provenance | | +| semantics.rb:382:9:382:9 | [post] h [element] | semantics.rb:384:10:384:10 | h [element] | provenance | | +| semantics.rb:382:9:382:9 | [post] h [element] | semantics.rb:385:10:385:10 | h [element] | provenance | | +| semantics.rb:382:9:382:9 | [post] h [element] | semantics.rb:385:10:385:10 | h [element] | provenance | | +| semantics.rb:382:9:382:9 | [post] h [element] | semantics.rb:386:10:386:10 | h [element] | provenance | | +| semantics.rb:382:9:382:9 | [post] h [element] | semantics.rb:386:10:386:10 | h [element] | provenance | | +| semantics.rb:382:9:382:9 | h [element 1] | semantics.rb:382:9:382:9 | [post] h [element 1] | provenance | | +| semantics.rb:382:9:382:9 | h [element 1] | semantics.rb:382:9:382:9 | [post] h [element 1] | provenance | | +| semantics.rb:382:9:382:9 | h [element] | semantics.rb:382:9:382:9 | [post] h [element] | provenance | | +| semantics.rb:382:9:382:9 | h [element] | semantics.rb:382:9:382:9 | [post] h [element] | provenance | | +| semantics.rb:384:10:384:10 | h [element] | semantics.rb:384:10:384:13 | ...[...] | provenance | | +| semantics.rb:384:10:384:10 | h [element] | semantics.rb:384:10:384:13 | ...[...] | provenance | | +| semantics.rb:385:10:385:10 | h [element 1] | semantics.rb:385:10:385:13 | ...[...] | provenance | | +| semantics.rb:385:10:385:10 | h [element 1] | semantics.rb:385:10:385:13 | ...[...] | provenance | | +| semantics.rb:385:10:385:10 | h [element] | semantics.rb:385:10:385:13 | ...[...] | provenance | | +| semantics.rb:385:10:385:10 | h [element] | semantics.rb:385:10:385:13 | ...[...] | provenance | | +| semantics.rb:386:10:386:10 | h [element 1] | semantics.rb:386:10:386:13 | ...[...] | provenance | | +| semantics.rb:386:10:386:10 | h [element 1] | semantics.rb:386:10:386:13 | ...[...] | provenance | | +| semantics.rb:386:10:386:10 | h [element] | semantics.rb:386:10:386:13 | ...[...] | provenance | | +| semantics.rb:386:10:386:10 | h [element] | semantics.rb:386:10:386:13 | ...[...] | provenance | | +| semantics.rb:390:5:390:5 | [post] h [element 0] | semantics.rb:391:5:391:5 | h [element 0] | provenance | | +| semantics.rb:390:5:390:5 | [post] h [element 0] | semantics.rb:391:5:391:5 | h [element 0] | provenance | | +| semantics.rb:390:12:390:22 | call to source | semantics.rb:390:5:390:5 | [post] h [element 0] | provenance | | +| semantics.rb:390:12:390:22 | call to source | semantics.rb:390:5:390:5 | [post] h [element 0] | provenance | | +| semantics.rb:391:5:391:5 | [post] h [element 0] | semantics.rb:394:10:394:10 | h [element 0] | provenance | | +| semantics.rb:391:5:391:5 | [post] h [element 0] | semantics.rb:394:10:394:10 | h [element 0] | provenance | | +| semantics.rb:391:5:391:5 | [post] h [element 0] | semantics.rb:396:10:396:10 | h [element 0] | provenance | | +| semantics.rb:391:5:391:5 | [post] h [element 0] | semantics.rb:396:10:396:10 | h [element 0] | provenance | | +| semantics.rb:391:5:391:5 | [post] h [element 1] | semantics.rb:395:10:395:10 | h [element 1] | provenance | | +| semantics.rb:391:5:391:5 | [post] h [element 1] | semantics.rb:395:10:395:10 | h [element 1] | provenance | | +| semantics.rb:391:5:391:5 | [post] h [element 1] | semantics.rb:396:10:396:10 | h [element 1] | provenance | | +| semantics.rb:391:5:391:5 | [post] h [element 1] | semantics.rb:396:10:396:10 | h [element 1] | provenance | | +| semantics.rb:391:5:391:5 | [post] h [element 1] | semantics.rb:398:13:398:13 | h [element 1] | provenance | | +| semantics.rb:391:5:391:5 | [post] h [element 1] | semantics.rb:398:13:398:13 | h [element 1] | provenance | | +| semantics.rb:391:5:391:5 | h [element 0] | semantics.rb:391:5:391:5 | [post] h [element 0] | provenance | | +| semantics.rb:391:5:391:5 | h [element 0] | semantics.rb:391:5:391:5 | [post] h [element 0] | provenance | | +| semantics.rb:391:12:391:22 | call to source | semantics.rb:391:5:391:5 | [post] h [element 1] | provenance | | +| semantics.rb:391:12:391:22 | call to source | semantics.rb:391:5:391:5 | [post] h [element 1] | provenance | | +| semantics.rb:392:5:392:5 | [post] h [element] | semantics.rb:394:10:394:10 | h [element] | provenance | | +| semantics.rb:392:5:392:5 | [post] h [element] | semantics.rb:394:10:394:10 | h [element] | provenance | | +| semantics.rb:392:5:392:5 | [post] h [element] | semantics.rb:395:10:395:10 | h [element] | provenance | | +| semantics.rb:392:5:392:5 | [post] h [element] | semantics.rb:395:10:395:10 | h [element] | provenance | | +| semantics.rb:392:5:392:5 | [post] h [element] | semantics.rb:396:10:396:10 | h [element] | provenance | | +| semantics.rb:392:5:392:5 | [post] h [element] | semantics.rb:396:10:396:10 | h [element] | provenance | | +| semantics.rb:392:12:392:22 | call to source | semantics.rb:392:5:392:5 | [post] h [element] | provenance | | +| semantics.rb:392:12:392:22 | call to source | semantics.rb:392:5:392:5 | [post] h [element] | provenance | | +| semantics.rb:394:10:394:10 | h [element 0] | semantics.rb:394:10:394:13 | ...[...] | provenance | | +| semantics.rb:394:10:394:10 | h [element 0] | semantics.rb:394:10:394:13 | ...[...] | provenance | | +| semantics.rb:394:10:394:10 | h [element] | semantics.rb:394:10:394:13 | ...[...] | provenance | | +| semantics.rb:394:10:394:10 | h [element] | semantics.rb:394:10:394:13 | ...[...] | provenance | | +| semantics.rb:395:10:395:10 | h [element 1] | semantics.rb:395:10:395:13 | ...[...] | provenance | | +| semantics.rb:395:10:395:10 | h [element 1] | semantics.rb:395:10:395:13 | ...[...] | provenance | | +| semantics.rb:395:10:395:10 | h [element] | semantics.rb:395:10:395:13 | ...[...] | provenance | | +| semantics.rb:395:10:395:10 | h [element] | semantics.rb:395:10:395:13 | ...[...] | provenance | | +| semantics.rb:396:10:396:10 | h [element 0] | semantics.rb:396:10:396:13 | ...[...] | provenance | | +| semantics.rb:396:10:396:10 | h [element 0] | semantics.rb:396:10:396:13 | ...[...] | provenance | | +| semantics.rb:396:10:396:10 | h [element 1] | semantics.rb:396:10:396:13 | ...[...] | provenance | | +| semantics.rb:396:10:396:10 | h [element 1] | semantics.rb:396:10:396:13 | ...[...] | provenance | | +| semantics.rb:396:10:396:10 | h [element] | semantics.rb:396:10:396:13 | ...[...] | provenance | | +| semantics.rb:396:10:396:10 | h [element] | semantics.rb:396:10:396:13 | ...[...] | provenance | | +| semantics.rb:398:5:398:5 | x [element 1] | semantics.rb:401:10:401:10 | x [element 1] | provenance | | +| semantics.rb:398:5:398:5 | x [element 1] | semantics.rb:401:10:401:10 | x [element 1] | provenance | | +| semantics.rb:398:5:398:5 | x [element 1] | semantics.rb:402:10:402:10 | x [element 1] | provenance | | +| semantics.rb:398:5:398:5 | x [element 1] | semantics.rb:402:10:402:10 | x [element 1] | provenance | | +| semantics.rb:398:9:398:14 | call to s46 [element 1] | semantics.rb:398:5:398:5 | x [element 1] | provenance | | +| semantics.rb:398:9:398:14 | call to s46 [element 1] | semantics.rb:398:5:398:5 | x [element 1] | provenance | | +| semantics.rb:398:13:398:13 | h [element 1] | semantics.rb:398:9:398:14 | call to s46 [element 1] | provenance | | +| semantics.rb:398:13:398:13 | h [element 1] | semantics.rb:398:9:398:14 | call to s46 [element 1] | provenance | | +| semantics.rb:401:10:401:10 | x [element 1] | semantics.rb:401:10:401:13 | ...[...] | provenance | | +| semantics.rb:401:10:401:10 | x [element 1] | semantics.rb:401:10:401:13 | ...[...] | provenance | | +| semantics.rb:402:10:402:10 | x [element 1] | semantics.rb:402:10:402:13 | ...[...] | provenance | | +| semantics.rb:402:10:402:10 | x [element 1] | semantics.rb:402:10:402:13 | ...[...] | provenance | | +| semantics.rb:406:5:406:5 | [post] h [element :foo] | semantics.rb:407:5:407:5 | h [element :foo] | provenance | | +| semantics.rb:406:5:406:5 | [post] h [element :foo] | semantics.rb:407:5:407:5 | h [element :foo] | provenance | | +| semantics.rb:406:15:406:25 | call to source | semantics.rb:406:5:406:5 | [post] h [element :foo] | provenance | | +| semantics.rb:406:15:406:25 | call to source | semantics.rb:406:5:406:5 | [post] h [element :foo] | provenance | | +| semantics.rb:407:5:407:5 | [post] h [element :bar] | semantics.rb:411:10:411:10 | h [element :bar] | provenance | | +| semantics.rb:407:5:407:5 | [post] h [element :bar] | semantics.rb:411:10:411:10 | h [element :bar] | provenance | | +| semantics.rb:407:5:407:5 | [post] h [element :bar] | semantics.rb:413:13:413:13 | h [element :bar] | provenance | | +| semantics.rb:407:5:407:5 | [post] h [element :bar] | semantics.rb:413:13:413:13 | h [element :bar] | provenance | | +| semantics.rb:407:5:407:5 | [post] h [element :foo] | semantics.rb:410:10:410:10 | h [element :foo] | provenance | | +| semantics.rb:407:5:407:5 | [post] h [element :foo] | semantics.rb:410:10:410:10 | h [element :foo] | provenance | | +| semantics.rb:407:5:407:5 | h [element :foo] | semantics.rb:407:5:407:5 | [post] h [element :foo] | provenance | | +| semantics.rb:407:5:407:5 | h [element :foo] | semantics.rb:407:5:407:5 | [post] h [element :foo] | provenance | | +| semantics.rb:407:15:407:25 | call to source | semantics.rb:407:5:407:5 | [post] h [element :bar] | provenance | | +| semantics.rb:407:15:407:25 | call to source | semantics.rb:407:5:407:5 | [post] h [element :bar] | provenance | | +| semantics.rb:408:5:408:5 | [post] h [element] | semantics.rb:410:10:410:10 | h [element] | provenance | | +| semantics.rb:408:5:408:5 | [post] h [element] | semantics.rb:410:10:410:10 | h [element] | provenance | | +| semantics.rb:408:5:408:5 | [post] h [element] | semantics.rb:411:10:411:10 | h [element] | provenance | | +| semantics.rb:408:5:408:5 | [post] h [element] | semantics.rb:411:10:411:10 | h [element] | provenance | | +| semantics.rb:408:12:408:22 | call to source | semantics.rb:408:5:408:5 | [post] h [element] | provenance | | +| semantics.rb:408:12:408:22 | call to source | semantics.rb:408:5:408:5 | [post] h [element] | provenance | | +| semantics.rb:410:10:410:10 | h [element :foo] | semantics.rb:410:10:410:16 | ...[...] | provenance | | +| semantics.rb:410:10:410:10 | h [element :foo] | semantics.rb:410:10:410:16 | ...[...] | provenance | | +| semantics.rb:410:10:410:10 | h [element] | semantics.rb:410:10:410:16 | ...[...] | provenance | | +| semantics.rb:410:10:410:10 | h [element] | semantics.rb:410:10:410:16 | ...[...] | provenance | | +| semantics.rb:411:10:411:10 | h [element :bar] | semantics.rb:411:10:411:16 | ...[...] | provenance | | +| semantics.rb:411:10:411:10 | h [element :bar] | semantics.rb:411:10:411:16 | ...[...] | provenance | | +| semantics.rb:411:10:411:10 | h [element] | semantics.rb:411:10:411:16 | ...[...] | provenance | | +| semantics.rb:411:10:411:10 | h [element] | semantics.rb:411:10:411:16 | ...[...] | provenance | | +| semantics.rb:413:5:413:5 | x [element :bar] | semantics.rb:416:10:416:10 | x [element :bar] | provenance | | +| semantics.rb:413:5:413:5 | x [element :bar] | semantics.rb:416:10:416:10 | x [element :bar] | provenance | | +| semantics.rb:413:9:413:14 | call to s47 [element :bar] | semantics.rb:413:5:413:5 | x [element :bar] | provenance | | +| semantics.rb:413:9:413:14 | call to s47 [element :bar] | semantics.rb:413:5:413:5 | x [element :bar] | provenance | | +| semantics.rb:413:13:413:13 | h [element :bar] | semantics.rb:413:9:413:14 | call to s47 [element :bar] | provenance | | +| semantics.rb:413:13:413:13 | h [element :bar] | semantics.rb:413:9:413:14 | call to s47 [element :bar] | provenance | | +| semantics.rb:416:10:416:10 | x [element :bar] | semantics.rb:416:10:416:16 | ...[...] | provenance | | +| semantics.rb:416:10:416:10 | x [element :bar] | semantics.rb:416:10:416:16 | ...[...] | provenance | | +| semantics.rb:420:5:420:5 | [post] h [element :foo] | semantics.rb:421:5:421:5 | h [element :foo] | provenance | | +| semantics.rb:420:5:420:5 | [post] h [element :foo] | semantics.rb:421:5:421:5 | h [element :foo] | provenance | | +| semantics.rb:420:15:420:25 | call to source | semantics.rb:420:5:420:5 | [post] h [element :foo] | provenance | | +| semantics.rb:420:15:420:25 | call to source | semantics.rb:420:5:420:5 | [post] h [element :foo] | provenance | | +| semantics.rb:421:5:421:5 | [post] h [element :bar] | semantics.rb:425:10:425:10 | h [element :bar] | provenance | | +| semantics.rb:421:5:421:5 | [post] h [element :bar] | semantics.rb:425:10:425:10 | h [element :bar] | provenance | | +| semantics.rb:421:5:421:5 | [post] h [element :bar] | semantics.rb:427:13:427:13 | h [element :bar] | provenance | | +| semantics.rb:421:5:421:5 | [post] h [element :bar] | semantics.rb:427:13:427:13 | h [element :bar] | provenance | | +| semantics.rb:421:5:421:5 | [post] h [element :foo] | semantics.rb:424:10:424:10 | h [element :foo] | provenance | | +| semantics.rb:421:5:421:5 | [post] h [element :foo] | semantics.rb:424:10:424:10 | h [element :foo] | provenance | | +| semantics.rb:421:5:421:5 | h [element :foo] | semantics.rb:421:5:421:5 | [post] h [element :foo] | provenance | | +| semantics.rb:421:5:421:5 | h [element :foo] | semantics.rb:421:5:421:5 | [post] h [element :foo] | provenance | | +| semantics.rb:421:15:421:25 | call to source | semantics.rb:421:5:421:5 | [post] h [element :bar] | provenance | | +| semantics.rb:421:15:421:25 | call to source | semantics.rb:421:5:421:5 | [post] h [element :bar] | provenance | | +| semantics.rb:422:5:422:5 | [post] h [element] | semantics.rb:424:10:424:10 | h [element] | provenance | | +| semantics.rb:422:5:422:5 | [post] h [element] | semantics.rb:424:10:424:10 | h [element] | provenance | | +| semantics.rb:422:5:422:5 | [post] h [element] | semantics.rb:425:10:425:10 | h [element] | provenance | | +| semantics.rb:422:5:422:5 | [post] h [element] | semantics.rb:425:10:425:10 | h [element] | provenance | | +| semantics.rb:422:12:422:22 | call to source | semantics.rb:422:5:422:5 | [post] h [element] | provenance | | +| semantics.rb:422:12:422:22 | call to source | semantics.rb:422:5:422:5 | [post] h [element] | provenance | | +| semantics.rb:424:10:424:10 | h [element :foo] | semantics.rb:424:10:424:16 | ...[...] | provenance | | +| semantics.rb:424:10:424:10 | h [element :foo] | semantics.rb:424:10:424:16 | ...[...] | provenance | | +| semantics.rb:424:10:424:10 | h [element] | semantics.rb:424:10:424:16 | ...[...] | provenance | | +| semantics.rb:424:10:424:10 | h [element] | semantics.rb:424:10:424:16 | ...[...] | provenance | | +| semantics.rb:425:10:425:10 | h [element :bar] | semantics.rb:425:10:425:16 | ...[...] | provenance | | +| semantics.rb:425:10:425:10 | h [element :bar] | semantics.rb:425:10:425:16 | ...[...] | provenance | | +| semantics.rb:425:10:425:10 | h [element] | semantics.rb:425:10:425:16 | ...[...] | provenance | | +| semantics.rb:425:10:425:10 | h [element] | semantics.rb:425:10:425:16 | ...[...] | provenance | | +| semantics.rb:427:5:427:5 | x [element :bar] | semantics.rb:430:10:430:10 | x [element :bar] | provenance | | +| semantics.rb:427:5:427:5 | x [element :bar] | semantics.rb:430:10:430:10 | x [element :bar] | provenance | | +| semantics.rb:427:9:427:14 | call to s48 [element :bar] | semantics.rb:427:5:427:5 | x [element :bar] | provenance | | +| semantics.rb:427:9:427:14 | call to s48 [element :bar] | semantics.rb:427:5:427:5 | x [element :bar] | provenance | | +| semantics.rb:427:13:427:13 | h [element :bar] | semantics.rb:427:9:427:14 | call to s48 [element :bar] | provenance | | +| semantics.rb:427:13:427:13 | h [element :bar] | semantics.rb:427:9:427:14 | call to s48 [element :bar] | provenance | | +| semantics.rb:430:10:430:10 | x [element :bar] | semantics.rb:430:10:430:16 | ...[...] | provenance | | +| semantics.rb:430:10:430:10 | x [element :bar] | semantics.rb:430:10:430:16 | ...[...] | provenance | | +| semantics.rb:434:5:434:5 | [post] h [element :foo] | semantics.rb:435:5:435:5 | h [element :foo] | provenance | | +| semantics.rb:434:5:434:5 | [post] h [element :foo] | semantics.rb:435:5:435:5 | h [element :foo] | provenance | | +| semantics.rb:434:15:434:25 | call to source | semantics.rb:434:5:434:5 | [post] h [element :foo] | provenance | | +| semantics.rb:434:15:434:25 | call to source | semantics.rb:434:5:434:5 | [post] h [element :foo] | provenance | | +| semantics.rb:435:5:435:5 | [post] h [element :bar] | semantics.rb:439:10:439:10 | h [element :bar] | provenance | | +| semantics.rb:435:5:435:5 | [post] h [element :bar] | semantics.rb:439:10:439:10 | h [element :bar] | provenance | | +| semantics.rb:435:5:435:5 | [post] h [element :bar] | semantics.rb:441:13:441:13 | h [element :bar] | provenance | | +| semantics.rb:435:5:435:5 | [post] h [element :bar] | semantics.rb:441:13:441:13 | h [element :bar] | provenance | | +| semantics.rb:435:5:435:5 | [post] h [element :foo] | semantics.rb:438:10:438:10 | h [element :foo] | provenance | | +| semantics.rb:435:5:435:5 | [post] h [element :foo] | semantics.rb:438:10:438:10 | h [element :foo] | provenance | | +| semantics.rb:435:5:435:5 | h [element :foo] | semantics.rb:435:5:435:5 | [post] h [element :foo] | provenance | | +| semantics.rb:435:5:435:5 | h [element :foo] | semantics.rb:435:5:435:5 | [post] h [element :foo] | provenance | | +| semantics.rb:435:15:435:25 | call to source | semantics.rb:435:5:435:5 | [post] h [element :bar] | provenance | | +| semantics.rb:435:15:435:25 | call to source | semantics.rb:435:5:435:5 | [post] h [element :bar] | provenance | | +| semantics.rb:436:5:436:5 | [post] h [element] | semantics.rb:438:10:438:10 | h [element] | provenance | | +| semantics.rb:436:5:436:5 | [post] h [element] | semantics.rb:438:10:438:10 | h [element] | provenance | | +| semantics.rb:436:5:436:5 | [post] h [element] | semantics.rb:439:10:439:10 | h [element] | provenance | | +| semantics.rb:436:5:436:5 | [post] h [element] | semantics.rb:439:10:439:10 | h [element] | provenance | | +| semantics.rb:436:5:436:5 | [post] h [element] | semantics.rb:441:13:441:13 | h [element] | provenance | | +| semantics.rb:436:5:436:5 | [post] h [element] | semantics.rb:441:13:441:13 | h [element] | provenance | | +| semantics.rb:436:12:436:22 | call to source | semantics.rb:436:5:436:5 | [post] h [element] | provenance | | +| semantics.rb:436:12:436:22 | call to source | semantics.rb:436:5:436:5 | [post] h [element] | provenance | | +| semantics.rb:438:10:438:10 | h [element :foo] | semantics.rb:438:10:438:16 | ...[...] | provenance | | +| semantics.rb:438:10:438:10 | h [element :foo] | semantics.rb:438:10:438:16 | ...[...] | provenance | | +| semantics.rb:438:10:438:10 | h [element] | semantics.rb:438:10:438:16 | ...[...] | provenance | | +| semantics.rb:438:10:438:10 | h [element] | semantics.rb:438:10:438:16 | ...[...] | provenance | | +| semantics.rb:439:10:439:10 | h [element :bar] | semantics.rb:439:10:439:16 | ...[...] | provenance | | +| semantics.rb:439:10:439:10 | h [element :bar] | semantics.rb:439:10:439:16 | ...[...] | provenance | | +| semantics.rb:439:10:439:10 | h [element] | semantics.rb:439:10:439:16 | ...[...] | provenance | | +| semantics.rb:439:10:439:10 | h [element] | semantics.rb:439:10:439:16 | ...[...] | provenance | | +| semantics.rb:441:5:441:5 | x [element :bar] | semantics.rb:444:10:444:10 | x [element :bar] | provenance | | +| semantics.rb:441:5:441:5 | x [element :bar] | semantics.rb:444:10:444:10 | x [element :bar] | provenance | | +| semantics.rb:441:5:441:5 | x [element] | semantics.rb:443:10:443:10 | x [element] | provenance | | +| semantics.rb:441:5:441:5 | x [element] | semantics.rb:443:10:443:10 | x [element] | provenance | | +| semantics.rb:441:5:441:5 | x [element] | semantics.rb:444:10:444:10 | x [element] | provenance | | +| semantics.rb:441:5:441:5 | x [element] | semantics.rb:444:10:444:10 | x [element] | provenance | | +| semantics.rb:441:9:441:14 | call to s49 [element :bar] | semantics.rb:441:5:441:5 | x [element :bar] | provenance | | +| semantics.rb:441:9:441:14 | call to s49 [element :bar] | semantics.rb:441:5:441:5 | x [element :bar] | provenance | | +| semantics.rb:441:9:441:14 | call to s49 [element] | semantics.rb:441:5:441:5 | x [element] | provenance | | +| semantics.rb:441:9:441:14 | call to s49 [element] | semantics.rb:441:5:441:5 | x [element] | provenance | | +| semantics.rb:441:13:441:13 | h [element :bar] | semantics.rb:441:9:441:14 | call to s49 [element :bar] | provenance | | +| semantics.rb:441:13:441:13 | h [element :bar] | semantics.rb:441:9:441:14 | call to s49 [element :bar] | provenance | | +| semantics.rb:441:13:441:13 | h [element] | semantics.rb:441:9:441:14 | call to s49 [element] | provenance | | +| semantics.rb:441:13:441:13 | h [element] | semantics.rb:441:9:441:14 | call to s49 [element] | provenance | | +| semantics.rb:443:10:443:10 | x [element] | semantics.rb:443:10:443:16 | ...[...] | provenance | | +| semantics.rb:443:10:443:10 | x [element] | semantics.rb:443:10:443:16 | ...[...] | provenance | | +| semantics.rb:444:10:444:10 | x [element :bar] | semantics.rb:444:10:444:16 | ...[...] | provenance | | +| semantics.rb:444:10:444:10 | x [element :bar] | semantics.rb:444:10:444:16 | ...[...] | provenance | | +| semantics.rb:444:10:444:10 | x [element] | semantics.rb:444:10:444:16 | ...[...] | provenance | | +| semantics.rb:444:10:444:10 | x [element] | semantics.rb:444:10:444:16 | ...[...] | provenance | | +| semantics.rb:448:5:448:5 | [post] h [element :foo] | semantics.rb:449:5:449:5 | h [element :foo] | provenance | | +| semantics.rb:448:5:448:5 | [post] h [element :foo] | semantics.rb:449:5:449:5 | h [element :foo] | provenance | | +| semantics.rb:448:15:448:25 | call to source | semantics.rb:448:5:448:5 | [post] h [element :foo] | provenance | | +| semantics.rb:448:15:448:25 | call to source | semantics.rb:448:5:448:5 | [post] h [element :foo] | provenance | | +| semantics.rb:449:5:449:5 | [post] h [element :bar] | semantics.rb:453:10:453:10 | h [element :bar] | provenance | | +| semantics.rb:449:5:449:5 | [post] h [element :bar] | semantics.rb:453:10:453:10 | h [element :bar] | provenance | | +| semantics.rb:449:5:449:5 | [post] h [element :bar] | semantics.rb:455:9:455:9 | h [element :bar] | provenance | | +| semantics.rb:449:5:449:5 | [post] h [element :bar] | semantics.rb:455:9:455:9 | h [element :bar] | provenance | | +| semantics.rb:449:5:449:5 | [post] h [element :foo] | semantics.rb:452:10:452:10 | h [element :foo] | provenance | | +| semantics.rb:449:5:449:5 | [post] h [element :foo] | semantics.rb:452:10:452:10 | h [element :foo] | provenance | | +| semantics.rb:449:5:449:5 | h [element :foo] | semantics.rb:449:5:449:5 | [post] h [element :foo] | provenance | | +| semantics.rb:449:5:449:5 | h [element :foo] | semantics.rb:449:5:449:5 | [post] h [element :foo] | provenance | | +| semantics.rb:449:15:449:25 | call to source | semantics.rb:449:5:449:5 | [post] h [element :bar] | provenance | | +| semantics.rb:449:15:449:25 | call to source | semantics.rb:449:5:449:5 | [post] h [element :bar] | provenance | | +| semantics.rb:450:5:450:5 | [post] h [element] | semantics.rb:452:10:452:10 | h [element] | provenance | | +| semantics.rb:450:5:450:5 | [post] h [element] | semantics.rb:452:10:452:10 | h [element] | provenance | | +| semantics.rb:450:5:450:5 | [post] h [element] | semantics.rb:453:10:453:10 | h [element] | provenance | | +| semantics.rb:450:5:450:5 | [post] h [element] | semantics.rb:453:10:453:10 | h [element] | provenance | | +| semantics.rb:450:12:450:22 | call to source | semantics.rb:450:5:450:5 | [post] h [element] | provenance | | +| semantics.rb:450:12:450:22 | call to source | semantics.rb:450:5:450:5 | [post] h [element] | provenance | | +| semantics.rb:452:10:452:10 | h [element :foo] | semantics.rb:452:10:452:16 | ...[...] | provenance | | +| semantics.rb:452:10:452:10 | h [element :foo] | semantics.rb:452:10:452:16 | ...[...] | provenance | | +| semantics.rb:452:10:452:10 | h [element] | semantics.rb:452:10:452:16 | ...[...] | provenance | | +| semantics.rb:452:10:452:10 | h [element] | semantics.rb:452:10:452:16 | ...[...] | provenance | | +| semantics.rb:453:10:453:10 | h [element :bar] | semantics.rb:453:10:453:16 | ...[...] | provenance | | +| semantics.rb:453:10:453:10 | h [element :bar] | semantics.rb:453:10:453:16 | ...[...] | provenance | | +| semantics.rb:453:10:453:10 | h [element] | semantics.rb:453:10:453:16 | ...[...] | provenance | | +| semantics.rb:453:10:453:10 | h [element] | semantics.rb:453:10:453:16 | ...[...] | provenance | | +| semantics.rb:455:9:455:9 | [post] h [element :bar] | semantics.rb:458:10:458:10 | h [element :bar] | provenance | | +| semantics.rb:455:9:455:9 | [post] h [element :bar] | semantics.rb:458:10:458:10 | h [element :bar] | provenance | | +| semantics.rb:455:9:455:9 | h [element :bar] | semantics.rb:455:9:455:9 | [post] h [element :bar] | provenance | | +| semantics.rb:455:9:455:9 | h [element :bar] | semantics.rb:455:9:455:9 | [post] h [element :bar] | provenance | | +| semantics.rb:458:10:458:10 | h [element :bar] | semantics.rb:458:10:458:16 | ...[...] | provenance | | +| semantics.rb:458:10:458:10 | h [element :bar] | semantics.rb:458:10:458:16 | ...[...] | provenance | | +| semantics.rb:462:5:462:5 | [post] h [element :foo] | semantics.rb:463:5:463:5 | h [element :foo] | provenance | | +| semantics.rb:462:5:462:5 | [post] h [element :foo] | semantics.rb:463:5:463:5 | h [element :foo] | provenance | | +| semantics.rb:462:15:462:25 | call to source | semantics.rb:462:5:462:5 | [post] h [element :foo] | provenance | | +| semantics.rb:462:15:462:25 | call to source | semantics.rb:462:5:462:5 | [post] h [element :foo] | provenance | | +| semantics.rb:463:5:463:5 | [post] h [element :bar] | semantics.rb:467:10:467:10 | h [element :bar] | provenance | | +| semantics.rb:463:5:463:5 | [post] h [element :bar] | semantics.rb:467:10:467:10 | h [element :bar] | provenance | | +| semantics.rb:463:5:463:5 | [post] h [element :bar] | semantics.rb:469:9:469:9 | h [element :bar] | provenance | | +| semantics.rb:463:5:463:5 | [post] h [element :bar] | semantics.rb:469:9:469:9 | h [element :bar] | provenance | | +| semantics.rb:463:5:463:5 | [post] h [element :foo] | semantics.rb:466:10:466:10 | h [element :foo] | provenance | | +| semantics.rb:463:5:463:5 | [post] h [element :foo] | semantics.rb:466:10:466:10 | h [element :foo] | provenance | | +| semantics.rb:463:5:463:5 | h [element :foo] | semantics.rb:463:5:463:5 | [post] h [element :foo] | provenance | | +| semantics.rb:463:5:463:5 | h [element :foo] | semantics.rb:463:5:463:5 | [post] h [element :foo] | provenance | | +| semantics.rb:463:15:463:25 | call to source | semantics.rb:463:5:463:5 | [post] h [element :bar] | provenance | | +| semantics.rb:463:15:463:25 | call to source | semantics.rb:463:5:463:5 | [post] h [element :bar] | provenance | | +| semantics.rb:464:5:464:5 | [post] h [element] | semantics.rb:466:10:466:10 | h [element] | provenance | | +| semantics.rb:464:5:464:5 | [post] h [element] | semantics.rb:466:10:466:10 | h [element] | provenance | | +| semantics.rb:464:5:464:5 | [post] h [element] | semantics.rb:467:10:467:10 | h [element] | provenance | | +| semantics.rb:464:5:464:5 | [post] h [element] | semantics.rb:467:10:467:10 | h [element] | provenance | | +| semantics.rb:464:5:464:5 | [post] h [element] | semantics.rb:469:9:469:9 | h [element] | provenance | | +| semantics.rb:464:5:464:5 | [post] h [element] | semantics.rb:469:9:469:9 | h [element] | provenance | | +| semantics.rb:464:12:464:22 | call to source | semantics.rb:464:5:464:5 | [post] h [element] | provenance | | +| semantics.rb:464:12:464:22 | call to source | semantics.rb:464:5:464:5 | [post] h [element] | provenance | | +| semantics.rb:466:10:466:10 | h [element :foo] | semantics.rb:466:10:466:16 | ...[...] | provenance | | +| semantics.rb:466:10:466:10 | h [element :foo] | semantics.rb:466:10:466:16 | ...[...] | provenance | | +| semantics.rb:466:10:466:10 | h [element] | semantics.rb:466:10:466:16 | ...[...] | provenance | | +| semantics.rb:466:10:466:10 | h [element] | semantics.rb:466:10:466:16 | ...[...] | provenance | | +| semantics.rb:467:10:467:10 | h [element :bar] | semantics.rb:467:10:467:16 | ...[...] | provenance | | +| semantics.rb:467:10:467:10 | h [element :bar] | semantics.rb:467:10:467:16 | ...[...] | provenance | | +| semantics.rb:467:10:467:10 | h [element] | semantics.rb:467:10:467:16 | ...[...] | provenance | | +| semantics.rb:467:10:467:10 | h [element] | semantics.rb:467:10:467:16 | ...[...] | provenance | | +| semantics.rb:469:9:469:9 | [post] h [element :bar] | semantics.rb:472:10:472:10 | h [element :bar] | provenance | | +| semantics.rb:469:9:469:9 | [post] h [element :bar] | semantics.rb:472:10:472:10 | h [element :bar] | provenance | | +| semantics.rb:469:9:469:9 | [post] h [element] | semantics.rb:471:10:471:10 | h [element] | provenance | | +| semantics.rb:469:9:469:9 | [post] h [element] | semantics.rb:471:10:471:10 | h [element] | provenance | | +| semantics.rb:469:9:469:9 | [post] h [element] | semantics.rb:472:10:472:10 | h [element] | provenance | | +| semantics.rb:469:9:469:9 | [post] h [element] | semantics.rb:472:10:472:10 | h [element] | provenance | | +| semantics.rb:469:9:469:9 | h [element :bar] | semantics.rb:469:9:469:9 | [post] h [element :bar] | provenance | | +| semantics.rb:469:9:469:9 | h [element :bar] | semantics.rb:469:9:469:9 | [post] h [element :bar] | provenance | | +| semantics.rb:469:9:469:9 | h [element] | semantics.rb:469:9:469:9 | [post] h [element] | provenance | | +| semantics.rb:469:9:469:9 | h [element] | semantics.rb:469:9:469:9 | [post] h [element] | provenance | | +| semantics.rb:471:10:471:10 | h [element] | semantics.rb:471:10:471:16 | ...[...] | provenance | | +| semantics.rb:471:10:471:10 | h [element] | semantics.rb:471:10:471:16 | ...[...] | provenance | | +| semantics.rb:472:10:472:10 | h [element :bar] | semantics.rb:472:10:472:16 | ...[...] | provenance | | +| semantics.rb:472:10:472:10 | h [element :bar] | semantics.rb:472:10:472:16 | ...[...] | provenance | | +| semantics.rb:472:10:472:10 | h [element] | semantics.rb:472:10:472:16 | ...[...] | provenance | | +| semantics.rb:472:10:472:10 | h [element] | semantics.rb:472:10:472:16 | ...[...] | provenance | | +| semantics.rb:476:5:476:5 | [post] h [element :foo] | semantics.rb:477:5:477:5 | h [element :foo] | provenance | | +| semantics.rb:476:5:476:5 | [post] h [element :foo] | semantics.rb:477:5:477:5 | h [element :foo] | provenance | | +| semantics.rb:476:15:476:25 | call to source | semantics.rb:476:5:476:5 | [post] h [element :foo] | provenance | | +| semantics.rb:476:15:476:25 | call to source | semantics.rb:476:5:476:5 | [post] h [element :foo] | provenance | | +| semantics.rb:477:5:477:5 | [post] h [element :bar] | semantics.rb:481:10:481:10 | h [element :bar] | provenance | | +| semantics.rb:477:5:477:5 | [post] h [element :bar] | semantics.rb:481:10:481:10 | h [element :bar] | provenance | | +| semantics.rb:477:5:477:5 | [post] h [element :bar] | semantics.rb:483:5:483:5 | h [element :bar] | provenance | | +| semantics.rb:477:5:477:5 | [post] h [element :bar] | semantics.rb:483:5:483:5 | h [element :bar] | provenance | | +| semantics.rb:477:5:477:5 | [post] h [element :foo] | semantics.rb:480:10:480:10 | h [element :foo] | provenance | | +| semantics.rb:477:5:477:5 | [post] h [element :foo] | semantics.rb:480:10:480:10 | h [element :foo] | provenance | | +| semantics.rb:477:5:477:5 | h [element :foo] | semantics.rb:477:5:477:5 | [post] h [element :foo] | provenance | | +| semantics.rb:477:5:477:5 | h [element :foo] | semantics.rb:477:5:477:5 | [post] h [element :foo] | provenance | | +| semantics.rb:477:15:477:25 | call to source | semantics.rb:477:5:477:5 | [post] h [element :bar] | provenance | | +| semantics.rb:477:15:477:25 | call to source | semantics.rb:477:5:477:5 | [post] h [element :bar] | provenance | | +| semantics.rb:478:5:478:5 | [post] h [element] | semantics.rb:480:10:480:10 | h [element] | provenance | | +| semantics.rb:478:5:478:5 | [post] h [element] | semantics.rb:480:10:480:10 | h [element] | provenance | | +| semantics.rb:478:5:478:5 | [post] h [element] | semantics.rb:481:10:481:10 | h [element] | provenance | | +| semantics.rb:478:5:478:5 | [post] h [element] | semantics.rb:481:10:481:10 | h [element] | provenance | | +| semantics.rb:478:12:478:22 | call to source | semantics.rb:478:5:478:5 | [post] h [element] | provenance | | +| semantics.rb:478:12:478:22 | call to source | semantics.rb:478:5:478:5 | [post] h [element] | provenance | | +| semantics.rb:480:10:480:10 | h [element :foo] | semantics.rb:480:10:480:16 | ...[...] | provenance | | +| semantics.rb:480:10:480:10 | h [element :foo] | semantics.rb:480:10:480:16 | ...[...] | provenance | | +| semantics.rb:480:10:480:10 | h [element] | semantics.rb:480:10:480:16 | ...[...] | provenance | | +| semantics.rb:480:10:480:10 | h [element] | semantics.rb:480:10:480:16 | ...[...] | provenance | | +| semantics.rb:481:10:481:10 | h [element :bar] | semantics.rb:481:10:481:16 | ...[...] | provenance | | +| semantics.rb:481:10:481:10 | h [element :bar] | semantics.rb:481:10:481:16 | ...[...] | provenance | | +| semantics.rb:481:10:481:10 | h [element] | semantics.rb:481:10:481:16 | ...[...] | provenance | | +| semantics.rb:481:10:481:10 | h [element] | semantics.rb:481:10:481:16 | ...[...] | provenance | | +| semantics.rb:483:5:483:5 | [post] h [element :bar] | semantics.rb:486:10:486:10 | h [element :bar] | provenance | | +| semantics.rb:483:5:483:5 | [post] h [element :bar] | semantics.rb:486:10:486:10 | h [element :bar] | provenance | | +| semantics.rb:483:5:483:5 | h [element :bar] | semantics.rb:483:5:483:5 | [post] h [element :bar] | provenance | | +| semantics.rb:483:5:483:5 | h [element :bar] | semantics.rb:483:5:483:5 | [post] h [element :bar] | provenance | | +| semantics.rb:486:10:486:10 | h [element :bar] | semantics.rb:486:10:486:16 | ...[...] | provenance | | +| semantics.rb:486:10:486:10 | h [element :bar] | semantics.rb:486:10:486:16 | ...[...] | provenance | | +| semantics.rb:490:5:490:5 | [post] h [element :foo] | semantics.rb:491:5:491:5 | h [element :foo] | provenance | | +| semantics.rb:490:5:490:5 | [post] h [element :foo] | semantics.rb:491:5:491:5 | h [element :foo] | provenance | | +| semantics.rb:490:15:490:25 | call to source | semantics.rb:490:5:490:5 | [post] h [element :foo] | provenance | | +| semantics.rb:490:15:490:25 | call to source | semantics.rb:490:5:490:5 | [post] h [element :foo] | provenance | | +| semantics.rb:491:5:491:5 | [post] h [element :bar] | semantics.rb:495:10:495:10 | h [element :bar] | provenance | | +| semantics.rb:491:5:491:5 | [post] h [element :bar] | semantics.rb:495:10:495:10 | h [element :bar] | provenance | | +| semantics.rb:491:5:491:5 | [post] h [element :bar] | semantics.rb:497:9:497:9 | h [element :bar] | provenance | | +| semantics.rb:491:5:491:5 | [post] h [element :bar] | semantics.rb:497:9:497:9 | h [element :bar] | provenance | | +| semantics.rb:491:5:491:5 | [post] h [element :foo] | semantics.rb:494:10:494:10 | h [element :foo] | provenance | | +| semantics.rb:491:5:491:5 | [post] h [element :foo] | semantics.rb:494:10:494:10 | h [element :foo] | provenance | | +| semantics.rb:491:5:491:5 | h [element :foo] | semantics.rb:491:5:491:5 | [post] h [element :foo] | provenance | | +| semantics.rb:491:5:491:5 | h [element :foo] | semantics.rb:491:5:491:5 | [post] h [element :foo] | provenance | | +| semantics.rb:491:15:491:25 | call to source | semantics.rb:491:5:491:5 | [post] h [element :bar] | provenance | | +| semantics.rb:491:15:491:25 | call to source | semantics.rb:491:5:491:5 | [post] h [element :bar] | provenance | | +| semantics.rb:492:5:492:5 | [post] h [element] | semantics.rb:494:10:494:10 | h [element] | provenance | | +| semantics.rb:492:5:492:5 | [post] h [element] | semantics.rb:494:10:494:10 | h [element] | provenance | | +| semantics.rb:492:5:492:5 | [post] h [element] | semantics.rb:495:10:495:10 | h [element] | provenance | | +| semantics.rb:492:5:492:5 | [post] h [element] | semantics.rb:495:10:495:10 | h [element] | provenance | | +| semantics.rb:492:12:492:22 | call to source | semantics.rb:492:5:492:5 | [post] h [element] | provenance | | +| semantics.rb:492:12:492:22 | call to source | semantics.rb:492:5:492:5 | [post] h [element] | provenance | | +| semantics.rb:494:10:494:10 | h [element :foo] | semantics.rb:494:10:494:16 | ...[...] | provenance | | +| semantics.rb:494:10:494:10 | h [element :foo] | semantics.rb:494:10:494:16 | ...[...] | provenance | | +| semantics.rb:494:10:494:10 | h [element] | semantics.rb:494:10:494:16 | ...[...] | provenance | | +| semantics.rb:494:10:494:10 | h [element] | semantics.rb:494:10:494:16 | ...[...] | provenance | | +| semantics.rb:495:10:495:10 | h [element :bar] | semantics.rb:495:10:495:16 | ...[...] | provenance | | +| semantics.rb:495:10:495:10 | h [element :bar] | semantics.rb:495:10:495:16 | ...[...] | provenance | | +| semantics.rb:495:10:495:10 | h [element] | semantics.rb:495:10:495:16 | ...[...] | provenance | | +| semantics.rb:495:10:495:10 | h [element] | semantics.rb:495:10:495:16 | ...[...] | provenance | | +| semantics.rb:497:5:497:5 | x [element :bar] | semantics.rb:500:10:500:10 | x [element :bar] | provenance | | +| semantics.rb:497:5:497:5 | x [element :bar] | semantics.rb:500:10:500:10 | x [element :bar] | provenance | | +| semantics.rb:497:9:497:9 | h [element :bar] | semantics.rb:497:9:497:15 | call to s53 [element :bar] | provenance | | +| semantics.rb:497:9:497:9 | h [element :bar] | semantics.rb:497:9:497:15 | call to s53 [element :bar] | provenance | | +| semantics.rb:497:9:497:15 | call to s53 [element :bar] | semantics.rb:497:5:497:5 | x [element :bar] | provenance | | +| semantics.rb:497:9:497:15 | call to s53 [element :bar] | semantics.rb:497:5:497:5 | x [element :bar] | provenance | | +| semantics.rb:500:10:500:10 | x [element :bar] | semantics.rb:500:10:500:16 | ...[...] | provenance | | +| semantics.rb:500:10:500:10 | x [element :bar] | semantics.rb:500:10:500:16 | ...[...] | provenance | | +| semantics.rb:502:10:502:20 | call to source | semantics.rb:502:10:502:26 | call to s53 | provenance | | +| semantics.rb:502:10:502:20 | call to source | semantics.rb:502:10:502:26 | call to s53 | provenance | | +| semantics.rb:506:5:506:5 | [post] h [element :foo] | semantics.rb:507:5:507:5 | h [element :foo] | provenance | | +| semantics.rb:506:5:506:5 | [post] h [element :foo] | semantics.rb:507:5:507:5 | h [element :foo] | provenance | | +| semantics.rb:506:15:506:25 | call to source | semantics.rb:506:5:506:5 | [post] h [element :foo] | provenance | | +| semantics.rb:506:15:506:25 | call to source | semantics.rb:506:5:506:5 | [post] h [element :foo] | provenance | | +| semantics.rb:507:5:507:5 | [post] h [element :bar] | semantics.rb:511:10:511:10 | h [element :bar] | provenance | | +| semantics.rb:507:5:507:5 | [post] h [element :bar] | semantics.rb:511:10:511:10 | h [element :bar] | provenance | | +| semantics.rb:507:5:507:5 | [post] h [element :bar] | semantics.rb:513:9:513:9 | h [element :bar] | provenance | | +| semantics.rb:507:5:507:5 | [post] h [element :bar] | semantics.rb:513:9:513:9 | h [element :bar] | provenance | | +| semantics.rb:507:5:507:5 | [post] h [element :foo] | semantics.rb:510:10:510:10 | h [element :foo] | provenance | | +| semantics.rb:507:5:507:5 | [post] h [element :foo] | semantics.rb:510:10:510:10 | h [element :foo] | provenance | | +| semantics.rb:507:5:507:5 | h [element :foo] | semantics.rb:507:5:507:5 | [post] h [element :foo] | provenance | | +| semantics.rb:507:5:507:5 | h [element :foo] | semantics.rb:507:5:507:5 | [post] h [element :foo] | provenance | | +| semantics.rb:507:15:507:25 | call to source | semantics.rb:507:5:507:5 | [post] h [element :bar] | provenance | | +| semantics.rb:507:15:507:25 | call to source | semantics.rb:507:5:507:5 | [post] h [element :bar] | provenance | | +| semantics.rb:508:5:508:5 | [post] h [element] | semantics.rb:510:10:510:10 | h [element] | provenance | | +| semantics.rb:508:5:508:5 | [post] h [element] | semantics.rb:510:10:510:10 | h [element] | provenance | | +| semantics.rb:508:5:508:5 | [post] h [element] | semantics.rb:511:10:511:10 | h [element] | provenance | | +| semantics.rb:508:5:508:5 | [post] h [element] | semantics.rb:511:10:511:10 | h [element] | provenance | | +| semantics.rb:508:12:508:22 | call to source | semantics.rb:508:5:508:5 | [post] h [element] | provenance | | +| semantics.rb:508:12:508:22 | call to source | semantics.rb:508:5:508:5 | [post] h [element] | provenance | | +| semantics.rb:510:10:510:10 | h [element :foo] | semantics.rb:510:10:510:16 | ...[...] | provenance | | +| semantics.rb:510:10:510:10 | h [element :foo] | semantics.rb:510:10:510:16 | ...[...] | provenance | | +| semantics.rb:510:10:510:10 | h [element] | semantics.rb:510:10:510:16 | ...[...] | provenance | | +| semantics.rb:510:10:510:10 | h [element] | semantics.rb:510:10:510:16 | ...[...] | provenance | | +| semantics.rb:511:10:511:10 | h [element :bar] | semantics.rb:511:10:511:16 | ...[...] | provenance | | +| semantics.rb:511:10:511:10 | h [element :bar] | semantics.rb:511:10:511:16 | ...[...] | provenance | | +| semantics.rb:511:10:511:10 | h [element] | semantics.rb:511:10:511:16 | ...[...] | provenance | | +| semantics.rb:511:10:511:10 | h [element] | semantics.rb:511:10:511:16 | ...[...] | provenance | | +| semantics.rb:513:5:513:5 | x [element :bar] | semantics.rb:516:10:516:10 | x [element :bar] | provenance | | +| semantics.rb:513:5:513:5 | x [element :bar] | semantics.rb:516:10:516:10 | x [element :bar] | provenance | | +| semantics.rb:513:9:513:9 | h [element :bar] | semantics.rb:513:9:513:15 | call to s54 [element :bar] | provenance | | +| semantics.rb:513:9:513:9 | h [element :bar] | semantics.rb:513:9:513:15 | call to s54 [element :bar] | provenance | | +| semantics.rb:513:9:513:15 | call to s54 [element :bar] | semantics.rb:513:5:513:5 | x [element :bar] | provenance | | +| semantics.rb:513:9:513:15 | call to s54 [element :bar] | semantics.rb:513:5:513:5 | x [element :bar] | provenance | | +| semantics.rb:516:10:516:10 | x [element :bar] | semantics.rb:516:10:516:16 | ...[...] | provenance | | +| semantics.rb:516:10:516:10 | x [element :bar] | semantics.rb:516:10:516:16 | ...[...] | provenance | | nodes | semantics.rb:2:5:2:5 | a | semmle.label | a | | semantics.rb:2:5:2:5 | a | semmle.label | a | diff --git a/ruby/ql/test/library-tests/dataflow/global/Flow.expected b/ruby/ql/test/library-tests/dataflow/global/Flow.expected index bd8ad749d7d..b09124590bb 100644 --- a/ruby/ql/test/library-tests/dataflow/global/Flow.expected +++ b/ruby/ql/test/library-tests/dataflow/global/Flow.expected @@ -1,258 +1,258 @@ testFailures edges -| blocks.rb:14:12:14:20 | call to source | blocks.rb:8:10:8:14 | yield ... | -| captured_variables.rb:9:24:9:24 | x | captured_variables.rb:10:10:10:23 | -> { ... } [captured x] | -| captured_variables.rb:9:24:9:24 | x | captured_variables.rb:11:5:11:6 | fn [captured x] | -| captured_variables.rb:10:5:10:6 | fn [captured x] | captured_variables.rb:11:5:11:6 | fn [captured x] | -| captured_variables.rb:10:10:10:23 | -> { ... } [captured x] | captured_variables.rb:10:5:10:6 | fn [captured x] | -| captured_variables.rb:11:5:11:6 | fn [captured x] | captured_variables.rb:10:20:10:20 | x | -| captured_variables.rb:13:20:13:29 | call to taint | captured_variables.rb:9:24:9:24 | x | -| captured_variables.rb:15:28:15:28 | x | captured_variables.rb:16:5:18:5 | -> { ... } [captured x] | -| captured_variables.rb:20:1:20:35 | ( ... ) [captured x] | captured_variables.rb:17:14:17:14 | x | -| captured_variables.rb:20:2:20:34 | call to capture_escape_return1 [captured x] | captured_variables.rb:20:1:20:35 | ( ... ) [captured x] | -| captured_variables.rb:20:25:20:34 | call to taint | captured_variables.rb:15:28:15:28 | x | -| captured_variables.rb:20:25:20:34 | call to taint | captured_variables.rb:20:2:20:34 | call to capture_escape_return1 [captured x] | -| 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:24:14:24:14 | x | -| captured_variables.rb:27:48:27:57 | call to taint | captured_variables.rb:22:28:22:28 | x | -| captured_variables.rb:27:48:27:57 | call to taint | captured_variables.rb:27:25:27:57 | call to capture_escape_return2 [captured x] | -| captured_variables.rb:29:33:29:33 | x | captured_variables.rb:30:10:32:5 | -> { ... } [captured x] | -| captured_variables.rb:29:33:29:33 | x | captured_variables.rb:33:29:33:30 | fn [captured x] | -| captured_variables.rb:30:5:30:6 | fn [captured x] | captured_variables.rb:33:29:33:30 | fn [captured x] | -| captured_variables.rb:30:10:32:5 | -> { ... } [captured x] | captured_variables.rb:30:5:30:6 | fn [captured x] | -| captured_variables.rb:33:29:33:30 | fn [captured x] | captured_variables.rb:31:14:31:14 | x | -| captured_variables.rb:35:29:35:38 | call to taint | captured_variables.rb:29:33:29:33 | x | -| captured_variables.rb:37:13:37:14 | fn [captured x] | captured_variables.rb:38:5:38:6 | fn [captured x] | -| captured_variables.rb:38:5:38:6 | fn [captured x] | captured_variables.rb:42:14:42:14 | x | -| captured_variables.rb:40:31:40:31 | x | captured_variables.rb:41:10:43:5 | -> { ... } [captured x] | -| captured_variables.rb:40:31:40:31 | x | captured_variables.rb:44:13:44:14 | fn [captured x] | -| captured_variables.rb:41:5:41:6 | fn [captured x] | captured_variables.rb:44:13:44:14 | fn [captured x] | -| captured_variables.rb:41:10:43:5 | -> { ... } [captured x] | captured_variables.rb:41:5:41:6 | fn [captured x] | -| captured_variables.rb:44:13:44:14 | fn [captured x] | captured_variables.rb:37:13:37:14 | fn [captured x] | -| captured_variables.rb:46:27:46:36 | call to taint | captured_variables.rb:40:31:40:31 | x | -| captured_variables.rb:48:5:48:12 | call to taint | captured_variables.rb:49:16:52:3 | do ... end [captured x] | -| captured_variables.rb:48:5:48:12 | call to taint | captured_variables.rb:54:6:54:6 | x | -| captured_variables.rb:49:16:52:3 | [post] do ... end [captured x] | captured_variables.rb:54:6:54:6 | x | -| captured_variables.rb:49:16:52:3 | do ... end [captured x] | captured_variables.rb:50:10:50:10 | x | -| captured_variables.rb:51:9:51:16 | call to taint | captured_variables.rb:49:16:52:3 | [post] do ... end [captured x] | -| captured_variables.rb:57:19:57:19 | x | captured_variables.rb:58:18:58:18 | x | -| captured_variables.rb:58:18:58:18 | x | captured_variables.rb:58:9:58:14 | [post] self [@field] | -| captured_variables.rb:60:5:62:7 | self in get_field [@field] | captured_variables.rb:61:16:61:21 | self [@field] | -| captured_variables.rb:61:16:61:21 | @field | captured_variables.rb:61:9:61:21 | return | -| captured_variables.rb:61:16:61:21 | self [@field] | captured_variables.rb:61:16:61:21 | @field | -| captured_variables.rb:66:1:66:3 | [post] foo [@field] | captured_variables.rb:67:16:70:3 | do ... end [captured foo, @field] | -| captured_variables.rb:66:1:66:3 | [post] foo [@field] | captured_variables.rb:72:6:72:8 | foo [@field] | -| captured_variables.rb:66:15:66:22 | call to taint | captured_variables.rb:57:19:57:19 | x | -| captured_variables.rb:66:15:66:22 | call to taint | 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 | -| captured_variables.rb:67:16:70:3 | [post] do ... end [captured foo, @field] | captured_variables.rb:72:6:72:8 | foo [@field] | -| captured_variables.rb:67:16:70:3 | do ... end [captured foo, @field] | captured_variables.rb:68:10:68:12 | 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:68:10:68:12 | foo [@field] | 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] | -| captured_variables.rb:69:5:69:7 | [post] foo [@field] | captured_variables.rb:67:16:70:3 | [post] do ... end [captured foo, @field] | -| captured_variables.rb:69:19:69:26 | call to taint | captured_variables.rb:57:19:57:19 | x | -| captured_variables.rb:69:19:69:26 | call to taint | 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 | -| captured_variables.rb:72:6:72:8 | foo [@field] | captured_variables.rb:60:5:62:7 | self in get_field [@field] | -| captured_variables.rb:72:6:72:8 | foo [@field] | 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] | -| captured_variables.rb:78:20:80:7 | [post] do ... end [captured foo, @field] | captured_variables.rb:83:6:83:8 | foo [@field] | -| captured_variables.rb:79:9:79:11 | [post] foo [@field] | captured_variables.rb:78:20:80:7 | [post] do ... end [captured foo, @field] | -| captured_variables.rb:79:23:79:30 | call to taint | captured_variables.rb:57:19:57:19 | x | -| captured_variables.rb:79:23:79:30 | call to taint | 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 | -| captured_variables.rb:83:6:83:8 | foo [@field] | captured_variables.rb:60:5:62:7 | self in get_field [@field] | -| captured_variables.rb:83:6:83:8 | foo [@field] | 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] | -| captured_variables.rb:85:5:85:12 | call to taint | captured_variables.rb:86:6:89:1 | -> { ... } [captured y] | -| captured_variables.rb:85:5:85:12 | call to taint | captured_variables.rb:90:1:90:2 | fn [captured y] | -| captured_variables.rb:85:5:85:12 | call to taint | captured_variables.rb:91:6:91:6 | y | -| captured_variables.rb:86:1:86:2 | fn [captured y] | captured_variables.rb:90:1:90:2 | fn [captured y] | -| captured_variables.rb:86:6:89:1 | -> { ... } [captured y] | captured_variables.rb:86:1:86:2 | fn [captured y] | -| captured_variables.rb:88:9:88:16 | call to taint | captured_variables.rb:90:1:90:2 | [post] fn [captured y] | -| captured_variables.rb:90:1:90:2 | [post] fn [captured y] | captured_variables.rb:91:6:91:6 | y | -| captured_variables.rb:90:1:90:2 | fn [captured y] | captured_variables.rb:87:10:87:10 | y | -| 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:95:14:95:14 | x | -| captured_variables.rb:98:13:98:20 | call to taint | captured_variables.rb:93:17:93:17 | x | -| captured_variables.rb:98:13:98:20 | call to taint | captured_variables.rb:98:1:98:21 | call to capture_arg [captured x] | -| captured_variables.rb:100:21:100:21 | x | captured_variables.rb:101:11:101:11 | x | -| captured_variables.rb:101:11:101:11 | x | captured_variables.rb:104:31:104:31 | x | -| captured_variables.rb:104:17:104:24 | call to taint | captured_variables.rb:100:21:100:21 | x | -| captured_variables.rb:104:31:104:31 | x | captured_variables.rb:105:10:105:10 | x | -| captured_variables.rb:109:9:109:17 | call to taint | captured_variables.rb:110:14:116:5 | -> { ... } [captured x] | -| captured_variables.rb:109:9:109:17 | call to taint | captured_variables.rb:117:5:117:10 | middle [captured x] | -| captured_variables.rb:109:9:109:17 | call to taint | captured_variables.rb:118:10:118:10 | x | -| captured_variables.rb:110:5:110:10 | middle [captured x] | captured_variables.rb:117:5:117:10 | middle [captured x] | -| captured_variables.rb:110:14:116:5 | -> { ... } [captured x] | captured_variables.rb:110:5:110:10 | middle [captured x] | -| captured_variables.rb:111:9:111:13 | inner [captured x] | captured_variables.rb:115:9:115:13 | inner [captured x] | -| captured_variables.rb:111:17:114:9 | -> { ... } [captured x] | captured_variables.rb:111:9:111:13 | inner [captured x] | -| captured_variables.rb:113:17:113:25 | call to taint | captured_variables.rb:115:9:115:13 | [post] inner [captured x] | -| captured_variables.rb:115:9:115:13 | [post] inner [captured x] | captured_variables.rb:117:5:117:10 | [post] middle [captured x] | -| captured_variables.rb:115:9:115:13 | inner [captured x] | captured_variables.rb:112:18:112:18 | x | -| captured_variables.rb:117:5:117:10 | [post] middle [captured x] | captured_variables.rb:118:10:118:10 | x | -| captured_variables.rb:117:5:117:10 | middle [captured x] | captured_variables.rb:111:17:114:9 | -> { ... } [captured x] | -| captured_variables.rb:117:5:117:10 | middle [captured x] | captured_variables.rb:115:9:115:13 | inner [captured x] | -| captured_variables.rb:147:5:147:6 | [post] self [@x] | captured_variables.rb:153:14:155:7 | do ... end [captured self, @x] | -| captured_variables.rb:147:10:147:18 | call to taint | captured_variables.rb:147:5:147:6 | [post] self [@x] | -| captured_variables.rb:149:5:151:7 | &block [captured self, @x] | captured_variables.rb:154:14:154:15 | self [@x] | -| captured_variables.rb:153:14:155:7 | do ... end [captured self, @x] | captured_variables.rb:149:5:151:7 | &block [captured self, @x] | -| captured_variables.rb:154:14:154:15 | self [@x] | captured_variables.rb:154:14:154:15 | @x | -| captured_variables.rb:160:9:160:10 | [post] self [@x] | captured_variables.rb:174:1:174:24 | call to new [@x] | -| captured_variables.rb:160:14:160:22 | call to taint | captured_variables.rb:160:9:160:10 | [post] self [@x] | -| captured_variables.rb:163:5:165:7 | &block [captured self, @x] | captured_variables.rb:169:18:169:19 | self [@x] | -| captured_variables.rb:167:5:171:7 | self in baz [@x] | captured_variables.rb:168:18:170:11 | do ... end [captured self, @x] | -| captured_variables.rb:168:18:170:11 | do ... end [captured self, @x] | captured_variables.rb:163:5:165:7 | &block [captured self, @x] | -| captured_variables.rb:169:18:169:19 | self [@x] | captured_variables.rb:169:18:169:19 | @x | -| captured_variables.rb:174:1:174:24 | call to new [@x] | captured_variables.rb:167:5:171:7 | self in baz [@x] | -| captured_variables.rb:178:9:178:10 | [post] self [@x] | captured_variables.rb:193:1:193:1 | [post] c [@x] | -| captured_variables.rb:178:14:178:22 | call to taint | captured_variables.rb:178:9:178:10 | [post] self [@x] | -| captured_variables.rb:181:5:183:7 | &block [captured self, @x] | captured_variables.rb:187:18:187:19 | self [@x] | -| captured_variables.rb:185:5:189:7 | self in baz [@x] | captured_variables.rb:186:18:188:11 | do ... end [captured self, @x] | -| captured_variables.rb:186:18:188:11 | do ... end [captured self, @x] | captured_variables.rb:181:5:183:7 | &block [captured self, @x] | -| captured_variables.rb:187:18:187:19 | self [@x] | captured_variables.rb:187:18:187:19 | @x | -| captured_variables.rb:193:1:193:1 | [post] c [@x] | captured_variables.rb:194:1:194:1 | c [@x] | -| captured_variables.rb:194:1:194:1 | c [@x] | captured_variables.rb:185:5:189:7 | self in baz [@x] | -| instance_variables.rb:10:19:10:19 | x | instance_variables.rb:11:18:11:18 | x | -| instance_variables.rb:11:18:11:18 | x | instance_variables.rb:11:9:11:14 | [post] self [@field] | -| instance_variables.rb:13:5:15:7 | self in get_field [@field] | instance_variables.rb:14:16:14:21 | self [@field] | -| instance_variables.rb:14:16:14:21 | @field | instance_variables.rb:14:9:14:21 | return | -| instance_variables.rb:14:16:14:21 | self [@field] | instance_variables.rb:14:16:14:21 | @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:17:9:17:14 | [post] self [@field] | instance_variables.rb:17:9:17:14 | [post] self [@field] | -| instance_variables.rb:19:5:19:8 | [post] self [@foo] | instance_variables.rb:20:10:20:13 | self [@foo] | -| instance_variables.rb:19:12:19:21 | call to taint | instance_variables.rb:19:5:19:8 | [post] self [@foo] | -| instance_variables.rb:20:10:20:13 | self [@foo] | instance_variables.rb:20:10:20:13 | @foo | -| instance_variables.rb:22:20:22:24 | field | instance_variables.rb:23:18:23:22 | field | -| instance_variables.rb:23:18:23:22 | field | instance_variables.rb:23:9:23:14 | [post] self [@field] | -| instance_variables.rb:24:9:24:17 | call to taint | instance_variables.rb:28:9:28:25 | call to initialize | -| instance_variables.rb:27:25:27:29 | field | instance_variables.rb:28:20:28:24 | field | -| instance_variables.rb:28:9:28:25 | call to initialize | instance_variables.rb:119:6:119:37 | call to call_initialize | -| instance_variables.rb:28:20:28:24 | field | instance_variables.rb:22:20:22:24 | field | -| instance_variables.rb:28:20:28:24 | field | instance_variables.rb:28:9:28:25 | [post] self [@field] | -| instance_variables.rb:31:18:31:18 | x | instance_variables.rb:33:13:33:13 | x | -| instance_variables.rb:32:13:32:21 | call to taint | instance_variables.rb:22:20:22:24 | field | -| instance_variables.rb:32:13:32:21 | call to taint | instance_variables.rb:48:20:48:20 | x | -| instance_variables.rb:33:13:33:13 | x | instance_variables.rb:22:20:22:24 | field | -| instance_variables.rb:33:13:33:13 | x | 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] | -| 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:36:10:36:23 | call to new [@field] | instance_variables.rb:36:10:36:33 | call to get_field | -| instance_variables.rb:36:14:36:22 | call to taint | instance_variables.rb:22:20:22:24 | field | -| instance_variables.rb:36:14:36:22 | call to taint | instance_variables.rb:36:10:36:23 | call to new [@field] | -| instance_variables.rb:39:6:39:23 | call to bar [@field] | captured_variables.rb:60:5:62:7 | self in get_field [@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:39:6:39:23 | call to bar [@field] | 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:39:14:39:22 | call to taint | instance_variables.rb:39:6:39:23 | call to bar [@field] | -| instance_variables.rb:43:9:43:17 | call to taint | instance_variables.rb:121:7:121:24 | call to new | -| instance_variables.rb:48:20:48:20 | x | instance_variables.rb:49:14:49:14 | x | -| instance_variables.rb:54:1:54:3 | [post] foo [@field] | instance_variables.rb:55:6:55:8 | foo [@field] | -| instance_variables.rb:54:15:54:23 | call to taint | captured_variables.rb:57:19:57:19 | x | -| instance_variables.rb:54:15:54:23 | call to taint | instance_variables.rb:10:19:10:19 | x | -| instance_variables.rb:54:15:54:23 | call to taint | 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] | -| instance_variables.rb:55:6:55:8 | foo [@field] | instance_variables.rb:13:5:15:7 | self in get_field [@field] | -| instance_variables.rb:55:6:55:8 | foo [@field] | instance_variables.rb:55:6:55:18 | call to get_field | -| instance_variables.rb:58:1:58:3 | [post] bar [@field] | instance_variables.rb:59:6:59:8 | bar [@field] | -| instance_variables.rb:58:15:58:22 | call to taint | captured_variables.rb:57:19:57:19 | x | -| instance_variables.rb:58:15:58:22 | call to taint | instance_variables.rb:10:19:10:19 | x | -| instance_variables.rb:58:15:58:22 | call to taint | 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:59:6:59:8 | bar [@field] | instance_variables.rb:59:6:59:18 | call to inc_field | -| instance_variables.rb:62:1:62:4 | [post] foo1 [@field] | instance_variables.rb:63:6:63:9 | foo1 [@field] | -| instance_variables.rb:62:14:62:22 | call to taint | instance_variables.rb:62:1:62:4 | [post] foo1 [@field] | -| instance_variables.rb:63:6:63:9 | foo1 [@field] | instance_variables.rb:63:6:63:15 | call to field | -| instance_variables.rb:66:1:66:4 | [post] foo2 [@field] | instance_variables.rb:67:6:67:9 | foo2 [@field] | -| instance_variables.rb:66:14:66:22 | call to taint | instance_variables.rb:66:1:66:4 | [post] foo2 [@field] | -| instance_variables.rb:67:6:67:9 | foo2 [@field] | captured_variables.rb:60:5:62:7 | self in get_field [@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:67:6:67:9 | foo2 [@field] | instance_variables.rb:67:6:67:19 | call to get_field | -| instance_variables.rb:70:1:70:4 | [post] foo3 [@field] | instance_variables.rb:71:6:71:9 | foo3 [@field] | -| instance_variables.rb:70:1:70:4 | [post] foo3 [@field] | instance_variables.rb:83:6:83:9 | foo3 [@field] | -| instance_variables.rb:70:16:70:24 | call to taint | captured_variables.rb:57:19:57:19 | x | -| instance_variables.rb:70:16:70:24 | call to taint | instance_variables.rb:10:19:10:19 | x | -| instance_variables.rb:70:16:70:24 | call to taint | instance_variables.rb:70:1:70:4 | [post] foo3 [@field] | -| instance_variables.rb:71:6:71:9 | foo3 [@field] | instance_variables.rb:71:6:71:15 | call to field | -| instance_variables.rb:78:2:78:5 | [post] foo5 [@field] | instance_variables.rb:79:6:79:9 | foo5 [@field] | -| instance_variables.rb:78:2:78:5 | [post] foo5 [@field] | instance_variables.rb:84:6:84:9 | foo5 [@field] | -| instance_variables.rb:78:18:78:26 | call to taint | captured_variables.rb:57:19:57:19 | x | -| instance_variables.rb:78:18:78:26 | call to taint | instance_variables.rb:10:19:10:19 | x | -| instance_variables.rb:78:18:78:26 | call to taint | 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] | -| instance_variables.rb:79:6:79:9 | foo5 [@field] | instance_variables.rb:13:5:15:7 | self in get_field [@field] | -| instance_variables.rb:79:6:79:9 | foo5 [@field] | instance_variables.rb:79:6:79:19 | call to get_field | -| instance_variables.rb:82:15:82:18 | [post] foo6 [@field] | instance_variables.rb:85:6:85:9 | foo6 [@field] | -| instance_variables.rb:82:32:82:40 | call to taint | captured_variables.rb:57:19:57:19 | x | -| instance_variables.rb:82:32:82:40 | call to taint | instance_variables.rb:10:19:10:19 | x | -| instance_variables.rb:82:32:82:40 | call to taint | 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] | -| instance_variables.rb:83:6:83:9 | foo3 [@field] | instance_variables.rb:13:5:15:7 | self in get_field [@field] | -| instance_variables.rb:83:6:83:9 | foo3 [@field] | 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] | -| instance_variables.rb:84:6:84:9 | foo5 [@field] | instance_variables.rb:13:5:15:7 | self in get_field [@field] | -| instance_variables.rb:84:6:84:9 | foo5 [@field] | 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] | -| instance_variables.rb:85:6:85:9 | foo6 [@field] | instance_variables.rb:13:5:15:7 | self in get_field [@field] | -| instance_variables.rb:85:6:85:9 | foo6 [@field] | instance_variables.rb:85:6:85:19 | call to get_field | -| instance_variables.rb:89:15:89:18 | [post] foo7 [@field] | instance_variables.rb:90:6:90:9 | foo7 [@field] | -| instance_variables.rb:89:25:89:28 | [post] foo8 [@field] | instance_variables.rb:91:6:91:9 | foo8 [@field] | -| instance_variables.rb:89:45:89:53 | call to taint | captured_variables.rb:57:19:57:19 | x | -| instance_variables.rb:89:45:89:53 | call to taint | instance_variables.rb:10:19:10:19 | x | -| instance_variables.rb:89:45:89:53 | call to taint | instance_variables.rb:89:15:89:18 | [post] foo7 [@field] | -| instance_variables.rb:89:45:89:53 | call to taint | 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] | -| instance_variables.rb:90:6:90:9 | foo7 [@field] | instance_variables.rb:13:5:15:7 | self in get_field [@field] | -| instance_variables.rb:90:6:90:9 | foo7 [@field] | 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] | -| instance_variables.rb:91:6:91:9 | foo8 [@field] | instance_variables.rb:13:5:15:7 | self in get_field [@field] | -| instance_variables.rb:91:6:91:9 | foo8 [@field] | instance_variables.rb:91:6:91:19 | call to get_field | -| instance_variables.rb:95:22:95:25 | [post] foo9 [@field] | instance_variables.rb:96:6:96:9 | foo9 [@field] | -| instance_variables.rb:95:32:95:36 | [post] foo10 [@field] | instance_variables.rb:97:6:97:10 | foo10 [@field] | -| instance_variables.rb:95:53:95:61 | call to taint | captured_variables.rb:57:19:57:19 | x | -| instance_variables.rb:95:53:95:61 | call to taint | instance_variables.rb:10:19:10:19 | x | -| instance_variables.rb:95:53:95:61 | call to taint | instance_variables.rb:95:22:95:25 | [post] foo9 [@field] | -| instance_variables.rb:95:53:95:61 | call to taint | 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] | -| instance_variables.rb:96:6:96:9 | foo9 [@field] | instance_variables.rb:13:5:15:7 | self in get_field [@field] | -| instance_variables.rb:96:6:96:9 | foo9 [@field] | 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] | -| instance_variables.rb:97:6:97:10 | foo10 [@field] | instance_variables.rb:13:5:15:7 | self in get_field [@field] | -| instance_variables.rb:97:6:97:10 | foo10 [@field] | instance_variables.rb:97:6:97:20 | call to get_field | -| instance_variables.rb:100:5:100:5 | [post] x [@field] | instance_variables.rb:104:14:104:18 | [post] foo11 [@field] | -| instance_variables.rb:100:5:100:5 | [post] x [@field] | instance_variables.rb:108:15:108:19 | [post] foo12 [@field] | -| instance_variables.rb:100:5:100:5 | [post] x [@field] | instance_variables.rb:113:22:113:26 | [post] foo13 [@field] | -| instance_variables.rb:100:17:100:25 | call to taint | captured_variables.rb:57:19:57:19 | x | -| instance_variables.rb:100:17:100:25 | call to taint | instance_variables.rb:10:19:10:19 | x | -| instance_variables.rb:100:17:100:25 | call to taint | instance_variables.rb:100:5:100:5 | [post] x [@field] | -| instance_variables.rb:104:14:104:18 | [post] foo11 [@field] | instance_variables.rb:105:6:105:10 | foo11 [@field] | -| instance_variables.rb:105:6:105:10 | foo11 [@field] | captured_variables.rb:60:5:62:7 | self in get_field [@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:105:6:105:10 | foo11 [@field] | instance_variables.rb:105:6:105:20 | call to get_field | -| instance_variables.rb:108:15:108:19 | [post] foo12 [@field] | instance_variables.rb:109:6:109:10 | foo12 [@field] | -| instance_variables.rb:109:6:109:10 | foo12 [@field] | captured_variables.rb:60:5:62:7 | self in get_field [@field] | -| instance_variables.rb:109:6:109:10 | foo12 [@field] | instance_variables.rb:13:5:15:7 | self in get_field [@field] | -| instance_variables.rb:109:6:109:10 | foo12 [@field] | instance_variables.rb:109:6:109:20 | call to get_field | -| instance_variables.rb:113:22:113:26 | [post] foo13 [@field] | instance_variables.rb:114:6:114:10 | foo13 [@field] | -| instance_variables.rb:114:6:114:10 | foo13 [@field] | captured_variables.rb:60:5:62:7 | self in get_field [@field] | -| instance_variables.rb:114:6:114:10 | foo13 [@field] | instance_variables.rb:13:5:15:7 | self in get_field [@field] | -| instance_variables.rb:114:6:114:10 | foo13 [@field] | instance_variables.rb:114:6:114:20 | call to get_field | -| instance_variables.rb:116:1:116:5 | foo15 [@field] | instance_variables.rb:117:6:117:10 | foo15 [@field] | -| instance_variables.rb:116:9:116:26 | call to new [@field] | instance_variables.rb:116:1:116:5 | foo15 [@field] | -| instance_variables.rb:116:17:116:25 | call to taint | instance_variables.rb:22:20:22:24 | field | -| instance_variables.rb:116:17:116:25 | call to taint | 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] | -| instance_variables.rb:117:6:117:10 | foo15 [@field] | instance_variables.rb:13:5:15:7 | self in get_field [@field] | -| instance_variables.rb:117:6:117:10 | foo15 [@field] | instance_variables.rb:117:6:117:20 | call to get_field | -| instance_variables.rb:119:6:119:10 | [post] foo16 [@field] | instance_variables.rb:120:6:120:10 | foo16 [@field] | -| instance_variables.rb:119:28:119:36 | call to taint | instance_variables.rb:27:25:27:29 | field | -| instance_variables.rb:119:28:119:36 | call to taint | 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] | -| instance_variables.rb:120:6:120:10 | foo16 [@field] | instance_variables.rb:13:5:15:7 | self in get_field [@field] | -| instance_variables.rb:120:6:120:10 | foo16 [@field] | instance_variables.rb:120:6:120:20 | call to get_field | -| instance_variables.rb:121:1:121:3 | bar | instance_variables.rb:122:6:122:8 | bar | -| instance_variables.rb:121:7:121:24 | call to new | instance_variables.rb:121:1:121:3 | bar | +| blocks.rb:14:12:14:20 | call to source | blocks.rb:8:10:8:14 | yield ... | provenance | | +| captured_variables.rb:9:24:9:24 | x | captured_variables.rb:10:10:10:23 | -> { ... } [captured x] | provenance | | +| captured_variables.rb:9:24:9:24 | x | captured_variables.rb:11:5:11:6 | fn [captured x] | provenance | | +| captured_variables.rb:10:5:10:6 | fn [captured x] | captured_variables.rb:11:5:11:6 | fn [captured x] | provenance | | +| captured_variables.rb:10:10:10:23 | -> { ... } [captured x] | captured_variables.rb:10:5:10:6 | fn [captured x] | provenance | | +| captured_variables.rb:11:5:11:6 | fn [captured x] | captured_variables.rb:10:20:10:20 | x | provenance | | +| captured_variables.rb:13:20:13:29 | call to taint | captured_variables.rb:9:24:9:24 | x | provenance | | +| captured_variables.rb:15:28:15:28 | x | captured_variables.rb:16:5:18:5 | -> { ... } [captured x] | provenance | | +| captured_variables.rb:20:1:20:35 | ( ... ) [captured x] | captured_variables.rb:17:14:17:14 | x | provenance | | +| captured_variables.rb:20:2:20:34 | call to capture_escape_return1 [captured x] | captured_variables.rb:20:1:20:35 | ( ... ) [captured x] | provenance | | +| captured_variables.rb:20:25:20:34 | call to taint | captured_variables.rb:15:28:15:28 | x | provenance | | +| captured_variables.rb:20:25:20:34 | call to taint | captured_variables.rb:20:2:20:34 | call to capture_escape_return1 [captured x] | provenance | | +| captured_variables.rb:22:28:22:28 | x | captured_variables.rb:23:5:25:5 | -> { ... } [captured x] | provenance | | +| captured_variables.rb:27:25:27:57 | call to capture_escape_return2 [captured x] | captured_variables.rb:24:14:24:14 | x | provenance | | +| captured_variables.rb:27:48:27:57 | call to taint | captured_variables.rb:22:28:22:28 | x | provenance | | +| captured_variables.rb:27:48:27:57 | call to taint | captured_variables.rb:27:25:27:57 | call to capture_escape_return2 [captured x] | provenance | | +| captured_variables.rb:29:33:29:33 | x | captured_variables.rb:30:10:32:5 | -> { ... } [captured x] | provenance | | +| captured_variables.rb:29:33:29:33 | x | captured_variables.rb:33:29:33:30 | fn [captured x] | provenance | | +| captured_variables.rb:30:5:30:6 | fn [captured x] | captured_variables.rb:33:29:33:30 | fn [captured x] | provenance | | +| captured_variables.rb:30:10:32:5 | -> { ... } [captured x] | captured_variables.rb:30:5:30:6 | fn [captured x] | provenance | | +| captured_variables.rb:33:29:33:30 | fn [captured x] | captured_variables.rb:31:14:31:14 | x | provenance | | +| captured_variables.rb:35:29:35:38 | call to taint | captured_variables.rb:29:33:29:33 | x | provenance | | +| captured_variables.rb:37:13:37:14 | fn [captured x] | captured_variables.rb:38:5:38:6 | fn [captured x] | provenance | | +| captured_variables.rb:38:5:38:6 | fn [captured x] | captured_variables.rb:42:14:42:14 | x | provenance | | +| captured_variables.rb:40:31:40:31 | x | captured_variables.rb:41:10:43:5 | -> { ... } [captured x] | provenance | | +| captured_variables.rb:40:31:40:31 | x | captured_variables.rb:44:13:44:14 | fn [captured x] | provenance | | +| captured_variables.rb:41:5:41:6 | fn [captured x] | captured_variables.rb:44:13:44:14 | fn [captured x] | provenance | | +| captured_variables.rb:41:10:43:5 | -> { ... } [captured x] | captured_variables.rb:41:5:41:6 | fn [captured x] | provenance | | +| captured_variables.rb:44:13:44:14 | fn [captured x] | captured_variables.rb:37:13:37:14 | fn [captured x] | provenance | | +| captured_variables.rb:46:27:46:36 | call to taint | captured_variables.rb:40:31:40:31 | x | provenance | | +| captured_variables.rb:48:5:48:12 | call to taint | captured_variables.rb:49:16:52:3 | do ... end [captured x] | provenance | | +| captured_variables.rb:48:5:48:12 | call to taint | captured_variables.rb:54:6:54:6 | x | provenance | | +| captured_variables.rb:49:16:52:3 | [post] do ... end [captured x] | captured_variables.rb:54:6:54:6 | x | provenance | | +| captured_variables.rb:49:16:52:3 | do ... end [captured x] | captured_variables.rb:50:10:50:10 | 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 | | +| captured_variables.rb:57:19:57:19 | x | captured_variables.rb:58:18:58:18 | x | 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 | | +| captured_variables.rb:61:16:61:21 | self [@field] | captured_variables.rb:61:16:61:21 | @field | provenance | | +| captured_variables.rb:66:1:66:3 | [post] foo [@field] | captured_variables.rb:67:16:70:3 | do ... end [captured foo, @field] | provenance | | +| captured_variables.rb:66:1:66:3 | [post] foo [@field] | captured_variables.rb:72:6:72:8 | foo [@field] | provenance | | +| captured_variables.rb:66:15:66:22 | call to taint | captured_variables.rb:57:19:57:19 | x | provenance | | +| captured_variables.rb:66:15:66:22 | call to taint | captured_variables.rb:66:1:66:3 | [post] foo [@field] | provenance | | +| captured_variables.rb:66:15:66:22 | call to taint | instance_variables.rb:10:19:10:19 | x | provenance | | +| captured_variables.rb:67:16:70:3 | [post] do ... end [captured foo, @field] | captured_variables.rb:72:6:72:8 | foo [@field] | provenance | | +| captured_variables.rb:67:16:70:3 | do ... end [captured foo, @field] | captured_variables.rb:68:10:68:12 | foo [@field] | provenance | | +| captured_variables.rb:68:10:68:12 | foo [@field] | captured_variables.rb:60:5:62:7 | self in get_field [@field] | provenance | | +| captured_variables.rb:68:10:68:12 | foo [@field] | captured_variables.rb:68:10:68:22 | call to get_field | provenance | | +| captured_variables.rb:68:10:68:12 | foo [@field] | instance_variables.rb:13:5:15:7 | self in get_field [@field] | provenance | | +| captured_variables.rb:69:5:69:7 | [post] foo [@field] | captured_variables.rb:67:16:70:3 | [post] do ... end [captured foo, @field] | provenance | | +| captured_variables.rb:69:19:69:26 | call to taint | captured_variables.rb:57:19:57:19 | x | provenance | | +| captured_variables.rb:69:19:69:26 | call to taint | captured_variables.rb:69:5:69:7 | [post] foo [@field] | provenance | | +| captured_variables.rb:69:19:69:26 | call to taint | instance_variables.rb:10:19:10:19 | x | provenance | | +| captured_variables.rb:72:6:72:8 | foo [@field] | captured_variables.rb:60:5:62:7 | self in get_field [@field] | provenance | | +| captured_variables.rb:72:6:72:8 | foo [@field] | captured_variables.rb:72:6:72:18 | call to get_field | provenance | | +| captured_variables.rb:72:6:72:8 | foo [@field] | instance_variables.rb:13:5:15:7 | self in get_field [@field] | provenance | | +| captured_variables.rb:78:20:80:7 | [post] do ... end [captured foo, @field] | captured_variables.rb:83:6:83:8 | foo [@field] | provenance | | +| captured_variables.rb:79:9:79:11 | [post] foo [@field] | captured_variables.rb:78:20:80:7 | [post] do ... end [captured foo, @field] | provenance | | +| captured_variables.rb:79:23:79:30 | call to taint | captured_variables.rb:57:19:57:19 | x | provenance | | +| captured_variables.rb:79:23:79:30 | call to taint | captured_variables.rb:79:9:79:11 | [post] foo [@field] | provenance | | +| captured_variables.rb:79:23:79:30 | call to taint | instance_variables.rb:10:19:10:19 | x | provenance | | +| captured_variables.rb:83:6:83:8 | foo [@field] | captured_variables.rb:60:5:62:7 | self in get_field [@field] | provenance | | +| captured_variables.rb:83:6:83:8 | foo [@field] | captured_variables.rb:83:6:83:18 | call to get_field | provenance | | +| captured_variables.rb:83:6:83:8 | foo [@field] | instance_variables.rb:13:5:15:7 | self in get_field [@field] | provenance | | +| captured_variables.rb:85:5:85:12 | call to taint | captured_variables.rb:86:6:89:1 | -> { ... } [captured y] | provenance | | +| captured_variables.rb:85:5:85:12 | call to taint | captured_variables.rb:90:1:90:2 | fn [captured y] | provenance | | +| captured_variables.rb:85:5:85:12 | call to taint | captured_variables.rb:91:6:91:6 | y | provenance | | +| captured_variables.rb:86:1:86:2 | fn [captured y] | captured_variables.rb:90:1:90:2 | fn [captured y] | provenance | | +| captured_variables.rb:86:6:89:1 | -> { ... } [captured y] | captured_variables.rb:86:1:86:2 | fn [captured y] | provenance | | +| captured_variables.rb:88:9:88:16 | call to taint | captured_variables.rb:90:1:90:2 | [post] fn [captured y] | provenance | | +| captured_variables.rb:90:1:90:2 | [post] fn [captured y] | captured_variables.rb:91:6:91:6 | y | provenance | | +| captured_variables.rb:90:1:90:2 | fn [captured y] | captured_variables.rb:87:10:87:10 | y | provenance | | +| captured_variables.rb:93:17:93:17 | x | captured_variables.rb:94:5:96:5 | -> { ... } [captured x] | provenance | | +| captured_variables.rb:98:1:98:21 | call to capture_arg [captured x] | captured_variables.rb:95:14:95:14 | x | provenance | | +| captured_variables.rb:98:13:98:20 | call to taint | captured_variables.rb:93:17:93:17 | x | provenance | | +| captured_variables.rb:98:13:98:20 | call to taint | captured_variables.rb:98:1:98:21 | call to capture_arg [captured x] | provenance | | +| captured_variables.rb:100:21:100:21 | x | captured_variables.rb:101:11:101:11 | x | provenance | | +| captured_variables.rb:101:11:101:11 | x | captured_variables.rb:104:31:104:31 | x | provenance | | +| captured_variables.rb:104:17:104:24 | call to taint | captured_variables.rb:100:21:100:21 | x | provenance | | +| captured_variables.rb:104:31:104:31 | x | captured_variables.rb:105:10:105:10 | x | provenance | | +| captured_variables.rb:109:9:109:17 | call to taint | captured_variables.rb:110:14:116:5 | -> { ... } [captured x] | provenance | | +| captured_variables.rb:109:9:109:17 | call to taint | captured_variables.rb:117:5:117:10 | middle [captured x] | provenance | | +| captured_variables.rb:109:9:109:17 | call to taint | captured_variables.rb:118:10:118:10 | x | provenance | | +| captured_variables.rb:110:5:110:10 | middle [captured x] | captured_variables.rb:117:5:117:10 | middle [captured x] | provenance | | +| captured_variables.rb:110:14:116:5 | -> { ... } [captured x] | captured_variables.rb:110:5:110:10 | middle [captured x] | provenance | | +| captured_variables.rb:111:9:111:13 | inner [captured x] | captured_variables.rb:115:9:115:13 | inner [captured x] | provenance | | +| captured_variables.rb:111:17:114:9 | -> { ... } [captured x] | captured_variables.rb:111:9:111:13 | inner [captured x] | provenance | | +| captured_variables.rb:113:17:113:25 | call to taint | captured_variables.rb:115:9:115:13 | [post] inner [captured x] | provenance | | +| captured_variables.rb:115:9:115:13 | [post] inner [captured x] | captured_variables.rb:117:5:117:10 | [post] middle [captured x] | provenance | | +| captured_variables.rb:115:9:115:13 | inner [captured x] | captured_variables.rb:112:18:112:18 | x | provenance | | +| captured_variables.rb:117:5:117:10 | [post] middle [captured x] | captured_variables.rb:118:10:118:10 | x | provenance | | +| captured_variables.rb:117:5:117:10 | middle [captured x] | captured_variables.rb:111:17:114:9 | -> { ... } [captured x] | provenance | | +| captured_variables.rb:117:5:117:10 | middle [captured x] | captured_variables.rb:115:9:115:13 | inner [captured x] | provenance | | +| captured_variables.rb:147:5:147:6 | [post] self [@x] | captured_variables.rb:153:14:155:7 | do ... end [captured self, @x] | provenance | | +| captured_variables.rb:147:10:147:18 | call to taint | captured_variables.rb:147:5:147:6 | [post] self [@x] | provenance | | +| captured_variables.rb:149:5:151:7 | &block [captured self, @x] | captured_variables.rb:154:14:154:15 | self [@x] | provenance | | +| captured_variables.rb:153:14:155:7 | do ... end [captured self, @x] | captured_variables.rb:149:5:151:7 | &block [captured self, @x] | provenance | | +| captured_variables.rb:154:14:154:15 | self [@x] | captured_variables.rb:154:14:154:15 | @x | provenance | | +| captured_variables.rb:160:9:160:10 | [post] self [@x] | captured_variables.rb:174:1:174:24 | call to new [@x] | provenance | | +| captured_variables.rb:160:14:160:22 | call to taint | captured_variables.rb:160:9:160:10 | [post] self [@x] | provenance | | +| captured_variables.rb:163:5:165:7 | &block [captured self, @x] | captured_variables.rb:169:18:169:19 | self [@x] | provenance | | +| captured_variables.rb:167:5:171:7 | self in baz [@x] | captured_variables.rb:168:18:170:11 | do ... end [captured self, @x] | provenance | | +| 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:178:9:178:10 | [post] self [@x] | captured_variables.rb:193:1:193:1 | [post] c [@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 | | +| captured_variables.rb:186:18:188:11 | do ... end [captured self, @x] | captured_variables.rb:181:5:183:7 | &block [captured self, @x] | provenance | | +| captured_variables.rb:187:18:187:19 | self [@x] | captured_variables.rb:187:18:187:19 | @x | provenance | | +| captured_variables.rb:193:1:193:1 | [post] c [@x] | captured_variables.rb:194:1:194:1 | c [@x] | provenance | | +| captured_variables.rb:194:1:194:1 | c [@x] | captured_variables.rb:185:5:189:7 | self in baz [@x] | provenance | | +| instance_variables.rb:10:19:10:19 | x | instance_variables.rb:11:18:11:18 | x | 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 | | +| instance_variables.rb:14:16:14:21 | self [@field] | instance_variables.rb:14:16:14:21 | @field | provenance | | +| instance_variables.rb:16:5:18:7 | self in inc_field [@field] | instance_variables.rb:17:9:17:14 | [post] self [@field] | provenance | | +| instance_variables.rb:17:9:17:14 | [post] self [@field] | instance_variables.rb:17:9:17:14 | [post] self [@field] | provenance | | +| instance_variables.rb:19:5:19:8 | [post] self [@foo] | instance_variables.rb:20:10:20:13 | self [@foo] | provenance | | +| 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: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 | 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 | | +| instance_variables.rb:31:18:31:18 | x | instance_variables.rb:33:13:33:13 | x | provenance | | +| instance_variables.rb:32:13:32:21 | call to taint | instance_variables.rb:22:20:22:24 | field | provenance | | +| instance_variables.rb:32:13:32:21 | call to taint | instance_variables.rb:48:20:48:20 | x | provenance | | +| instance_variables.rb:33:13:33:13 | x | instance_variables.rb:22:20:22:24 | field | provenance | | +| instance_variables.rb:33:13:33:13 | x | instance_variables.rb:33:9:33:14 | call to new [@field] | provenance | | +| instance_variables.rb:36:10:36:23 | call to new [@field] | captured_variables.rb:60:5:62:7 | self in get_field [@field] | provenance | | +| instance_variables.rb:36:10:36:23 | call to new [@field] | instance_variables.rb:13:5:15:7 | self in get_field [@field] | provenance | | +| instance_variables.rb:36:10:36:23 | call to new [@field] | instance_variables.rb:36:10:36:33 | call to get_field | provenance | | +| instance_variables.rb:36:14:36:22 | call to taint | instance_variables.rb:22:20:22:24 | field | provenance | | +| instance_variables.rb:36:14:36:22 | call to taint | instance_variables.rb:36:10:36:23 | call to new [@field] | provenance | | +| instance_variables.rb:39:6:39:23 | call to bar [@field] | captured_variables.rb:60:5:62:7 | self in get_field [@field] | provenance | | +| instance_variables.rb:39:6:39:23 | call to bar [@field] | instance_variables.rb:13:5:15:7 | self in get_field [@field] | provenance | | +| instance_variables.rb:39:6:39:23 | call to bar [@field] | instance_variables.rb:39:6:39:33 | call to get_field | provenance | | +| instance_variables.rb:39:14:39:22 | call to taint | instance_variables.rb:31:18:31:18 | x | provenance | | +| instance_variables.rb:39:14:39:22 | call to taint | instance_variables.rb:39:6:39:23 | call to bar [@field] | provenance | | +| instance_variables.rb:43:9:43:17 | call to taint | instance_variables.rb:121:7:121:24 | call to new | provenance | | +| instance_variables.rb:48:20:48:20 | x | instance_variables.rb:49:14:49:14 | x | provenance | | +| instance_variables.rb:54:1:54:3 | [post] foo [@field] | instance_variables.rb:55:6:55:8 | foo [@field] | provenance | | +| instance_variables.rb:54:15:54:23 | call to taint | captured_variables.rb:57:19:57:19 | x | provenance | | +| instance_variables.rb:54:15:54:23 | call to taint | instance_variables.rb:10:19:10:19 | x | provenance | | +| instance_variables.rb:54:15:54:23 | call to taint | instance_variables.rb:54:1:54:3 | [post] foo [@field] | provenance | | +| instance_variables.rb:55:6:55:8 | foo [@field] | captured_variables.rb:60:5:62:7 | self in get_field [@field] | provenance | | +| instance_variables.rb:55:6:55:8 | foo [@field] | instance_variables.rb:13:5:15:7 | self in get_field [@field] | provenance | | +| instance_variables.rb:55:6:55:8 | foo [@field] | instance_variables.rb:55:6:55:18 | call to get_field | provenance | | +| instance_variables.rb:58:1:58:3 | [post] bar [@field] | instance_variables.rb:59:6:59:8 | bar [@field] | provenance | | +| instance_variables.rb:58:15:58:22 | call to taint | captured_variables.rb:57:19:57:19 | x | provenance | | +| instance_variables.rb:58:15:58:22 | call to taint | instance_variables.rb:10:19:10:19 | x | provenance | | +| instance_variables.rb:58:15:58:22 | call to taint | instance_variables.rb:58:1:58:3 | [post] bar [@field] | provenance | | +| instance_variables.rb:59:6:59:8 | bar [@field] | instance_variables.rb:16:5:18:7 | self in inc_field [@field] | provenance | | +| instance_variables.rb:59:6:59:8 | bar [@field] | instance_variables.rb:59:6:59:18 | call to inc_field | provenance | | +| instance_variables.rb:62:1:62:4 | [post] foo1 [@field] | instance_variables.rb:63:6:63:9 | foo1 [@field] | provenance | | +| instance_variables.rb:62:14:62:22 | call to taint | instance_variables.rb:62:1:62:4 | [post] foo1 [@field] | provenance | | +| instance_variables.rb:63:6:63:9 | foo1 [@field] | instance_variables.rb:63:6:63:15 | call to field | provenance | | +| instance_variables.rb:66:1:66:4 | [post] foo2 [@field] | instance_variables.rb:67:6:67:9 | foo2 [@field] | provenance | | +| instance_variables.rb:66:14:66:22 | call to taint | instance_variables.rb:66:1:66:4 | [post] foo2 [@field] | provenance | | +| instance_variables.rb:67:6:67:9 | foo2 [@field] | captured_variables.rb:60:5:62:7 | self in get_field [@field] | provenance | | +| instance_variables.rb:67:6:67:9 | foo2 [@field] | instance_variables.rb:13:5:15:7 | self in get_field [@field] | provenance | | +| instance_variables.rb:67:6:67:9 | foo2 [@field] | instance_variables.rb:67:6:67:19 | call to get_field | provenance | | +| instance_variables.rb:70:1:70:4 | [post] foo3 [@field] | instance_variables.rb:71:6:71:9 | foo3 [@field] | provenance | | +| instance_variables.rb:70:1:70:4 | [post] foo3 [@field] | instance_variables.rb:83:6:83:9 | foo3 [@field] | provenance | | +| instance_variables.rb:70:16:70:24 | call to taint | captured_variables.rb:57:19:57:19 | x | provenance | | +| instance_variables.rb:70:16:70:24 | call to taint | instance_variables.rb:10:19:10:19 | x | provenance | | +| instance_variables.rb:70:16:70:24 | call to taint | instance_variables.rb:70:1:70:4 | [post] foo3 [@field] | provenance | | +| instance_variables.rb:71:6:71:9 | foo3 [@field] | instance_variables.rb:71:6:71:15 | call to field | provenance | | +| instance_variables.rb:78:2:78:5 | [post] foo5 [@field] | instance_variables.rb:79:6:79:9 | foo5 [@field] | provenance | | +| instance_variables.rb:78:2:78:5 | [post] foo5 [@field] | instance_variables.rb:84:6:84:9 | foo5 [@field] | provenance | | +| instance_variables.rb:78:18:78:26 | call to taint | captured_variables.rb:57:19:57:19 | x | provenance | | +| instance_variables.rb:78:18:78:26 | call to taint | instance_variables.rb:10:19:10:19 | x | provenance | | +| instance_variables.rb:78:18:78:26 | call to taint | instance_variables.rb:78:2:78:5 | [post] foo5 [@field] | provenance | | +| instance_variables.rb:79:6:79:9 | foo5 [@field] | captured_variables.rb:60:5:62:7 | self in get_field [@field] | provenance | | +| instance_variables.rb:79:6:79:9 | foo5 [@field] | instance_variables.rb:13:5:15:7 | self in get_field [@field] | provenance | | +| instance_variables.rb:79:6:79:9 | foo5 [@field] | instance_variables.rb:79:6:79:19 | call to get_field | provenance | | +| instance_variables.rb:82:15:82:18 | [post] foo6 [@field] | instance_variables.rb:85:6:85:9 | foo6 [@field] | provenance | | +| instance_variables.rb:82:32:82:40 | call to taint | captured_variables.rb:57:19:57:19 | x | provenance | | +| instance_variables.rb:82:32:82:40 | call to taint | instance_variables.rb:10:19:10:19 | x | provenance | | +| instance_variables.rb:82:32:82:40 | call to taint | instance_variables.rb:82:15:82:18 | [post] foo6 [@field] | provenance | | +| instance_variables.rb:83:6:83:9 | foo3 [@field] | captured_variables.rb:60:5:62:7 | self in get_field [@field] | provenance | | +| instance_variables.rb:83:6:83:9 | foo3 [@field] | instance_variables.rb:13:5:15:7 | self in get_field [@field] | provenance | | +| instance_variables.rb:83:6:83:9 | foo3 [@field] | instance_variables.rb:83:6:83:19 | call to get_field | provenance | | +| instance_variables.rb:84:6:84:9 | foo5 [@field] | captured_variables.rb:60:5:62:7 | self in get_field [@field] | provenance | | +| instance_variables.rb:84:6:84:9 | foo5 [@field] | instance_variables.rb:13:5:15:7 | self in get_field [@field] | provenance | | +| instance_variables.rb:84:6:84:9 | foo5 [@field] | instance_variables.rb:84:6:84:19 | call to get_field | provenance | | +| instance_variables.rb:85:6:85:9 | foo6 [@field] | captured_variables.rb:60:5:62:7 | self in get_field [@field] | provenance | | +| instance_variables.rb:85:6:85:9 | foo6 [@field] | instance_variables.rb:13:5:15:7 | self in get_field [@field] | provenance | | +| instance_variables.rb:85:6:85:9 | foo6 [@field] | instance_variables.rb:85:6:85:19 | call to get_field | provenance | | +| instance_variables.rb:89:15:89:18 | [post] foo7 [@field] | instance_variables.rb:90:6:90:9 | foo7 [@field] | provenance | | +| instance_variables.rb:89:25:89:28 | [post] foo8 [@field] | instance_variables.rb:91:6:91:9 | foo8 [@field] | provenance | | +| instance_variables.rb:89:45:89:53 | call to taint | captured_variables.rb:57:19:57:19 | x | provenance | | +| instance_variables.rb:89:45:89:53 | call to taint | instance_variables.rb:10:19:10:19 | x | provenance | | +| instance_variables.rb:89:45:89:53 | call to taint | instance_variables.rb:89:15:89:18 | [post] foo7 [@field] | provenance | | +| instance_variables.rb:89:45:89:53 | call to taint | instance_variables.rb:89:25:89:28 | [post] foo8 [@field] | provenance | | +| instance_variables.rb:90:6:90:9 | foo7 [@field] | captured_variables.rb:60:5:62:7 | self in get_field [@field] | provenance | | +| instance_variables.rb:90:6:90:9 | foo7 [@field] | instance_variables.rb:13:5:15:7 | self in get_field [@field] | provenance | | +| instance_variables.rb:90:6:90:9 | foo7 [@field] | instance_variables.rb:90:6:90:19 | call to get_field | provenance | | +| instance_variables.rb:91:6:91:9 | foo8 [@field] | captured_variables.rb:60:5:62:7 | self in get_field [@field] | provenance | | +| instance_variables.rb:91:6:91:9 | foo8 [@field] | instance_variables.rb:13:5:15:7 | self in get_field [@field] | provenance | | +| instance_variables.rb:91:6:91:9 | foo8 [@field] | instance_variables.rb:91:6:91:19 | call to get_field | provenance | | +| instance_variables.rb:95:22:95:25 | [post] foo9 [@field] | instance_variables.rb:96:6:96:9 | foo9 [@field] | provenance | | +| instance_variables.rb:95:32:95:36 | [post] foo10 [@field] | instance_variables.rb:97:6:97:10 | foo10 [@field] | provenance | | +| instance_variables.rb:95:53:95:61 | call to taint | captured_variables.rb:57:19:57:19 | x | provenance | | +| instance_variables.rb:95:53:95:61 | call to taint | instance_variables.rb:10:19:10:19 | x | provenance | | +| instance_variables.rb:95:53:95:61 | call to taint | instance_variables.rb:95:22:95:25 | [post] foo9 [@field] | provenance | | +| instance_variables.rb:95:53:95:61 | call to taint | instance_variables.rb:95:32:95:36 | [post] foo10 [@field] | provenance | | +| instance_variables.rb:96:6:96:9 | foo9 [@field] | captured_variables.rb:60:5:62:7 | self in get_field [@field] | provenance | | +| instance_variables.rb:96:6:96:9 | foo9 [@field] | instance_variables.rb:13:5:15:7 | self in get_field [@field] | provenance | | +| instance_variables.rb:96:6:96:9 | foo9 [@field] | instance_variables.rb:96:6:96:19 | call to get_field | provenance | | +| 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:100:5:100:5 | [post] x [@field] | instance_variables.rb:104:14:104:18 | [post] foo11 [@field] | provenance | | +| instance_variables.rb:100:5:100:5 | [post] x [@field] | instance_variables.rb:108:15:108:19 | [post] foo12 [@field] | provenance | | +| instance_variables.rb:100:5:100:5 | [post] x [@field] | instance_variables.rb:113:22:113:26 | [post] foo13 [@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 | | +| instance_variables.rb:104:14:104:18 | [post] foo11 [@field] | instance_variables.rb:105:6:105:10 | foo11 [@field] | provenance | | +| instance_variables.rb:105:6:105:10 | foo11 [@field] | captured_variables.rb:60:5:62:7 | self in get_field [@field] | provenance | | +| instance_variables.rb:105:6:105:10 | foo11 [@field] | instance_variables.rb:13:5:15:7 | self in get_field [@field] | provenance | | +| instance_variables.rb:105:6:105:10 | foo11 [@field] | instance_variables.rb:105:6:105:20 | call to get_field | provenance | | +| instance_variables.rb:108:15:108:19 | [post] foo12 [@field] | instance_variables.rb:109:6:109:10 | foo12 [@field] | provenance | | +| instance_variables.rb:109:6:109:10 | foo12 [@field] | captured_variables.rb:60:5:62:7 | self in get_field [@field] | provenance | | +| instance_variables.rb:109:6:109:10 | foo12 [@field] | instance_variables.rb:13:5:15:7 | self in get_field [@field] | provenance | | +| instance_variables.rb:109:6:109:10 | foo12 [@field] | instance_variables.rb:109:6:109:20 | call to get_field | provenance | | +| instance_variables.rb:113:22:113:26 | [post] foo13 [@field] | instance_variables.rb:114:6:114:10 | foo13 [@field] | provenance | | +| instance_variables.rb:114:6:114:10 | foo13 [@field] | captured_variables.rb:60:5:62:7 | self in get_field [@field] | provenance | | +| instance_variables.rb:114:6:114:10 | foo13 [@field] | instance_variables.rb:13:5:15:7 | self in get_field [@field] | provenance | | +| instance_variables.rb:114:6:114:10 | foo13 [@field] | instance_variables.rb:114:6:114:20 | call to get_field | provenance | | +| instance_variables.rb:116:1:116:5 | foo15 [@field] | instance_variables.rb:117:6:117:10 | foo15 [@field] | provenance | | +| instance_variables.rb:116:9:116:26 | call to new [@field] | instance_variables.rb:116:1:116:5 | foo15 [@field] | provenance | | +| instance_variables.rb:116:17:116:25 | call to taint | instance_variables.rb:22:20:22:24 | field | provenance | | +| instance_variables.rb:116:17:116:25 | call to taint | instance_variables.rb:116:9:116:26 | call to new [@field] | provenance | | +| instance_variables.rb:117:6:117:10 | foo15 [@field] | captured_variables.rb:60:5:62:7 | self in get_field [@field] | provenance | | +| instance_variables.rb:117:6:117:10 | foo15 [@field] | instance_variables.rb:13:5:15:7 | self in get_field [@field] | provenance | | +| instance_variables.rb:117:6:117:10 | foo15 [@field] | instance_variables.rb:117:6:117:20 | call to get_field | provenance | | +| instance_variables.rb:119:6:119:10 | [post] foo16 [@field] | instance_variables.rb:120:6:120:10 | foo16 [@field] | provenance | | +| instance_variables.rb:119:28:119:36 | call to taint | instance_variables.rb:27:25:27:29 | field | provenance | | +| instance_variables.rb:119:28:119:36 | call to taint | instance_variables.rb:119:6:119:10 | [post] foo16 [@field] | provenance | | +| instance_variables.rb:120:6:120:10 | foo16 [@field] | captured_variables.rb:60:5:62:7 | self in get_field [@field] | provenance | | +| instance_variables.rb:120:6:120:10 | foo16 [@field] | instance_variables.rb:13:5:15:7 | self in get_field [@field] | provenance | | +| instance_variables.rb:120:6:120:10 | foo16 [@field] | instance_variables.rb:120:6:120:20 | call to get_field | provenance | | +| instance_variables.rb:121:1:121:3 | bar | instance_variables.rb:122:6:122:8 | bar | provenance | | +| instance_variables.rb:121:7:121:24 | call to new | instance_variables.rb:121:1:121:3 | bar | provenance | | nodes | blocks.rb:8:10:8:14 | yield ... | semmle.label | yield ... | | blocks.rb:14:12:14:20 | call to source | semmle.label | call to source | diff --git a/ruby/ql/test/library-tests/dataflow/hash-flow/hash-flow.expected b/ruby/ql/test/library-tests/dataflow/hash-flow/hash-flow.expected index 00372d87e00..df37ffac47a 100644 --- a/ruby/ql/test/library-tests/dataflow/hash-flow/hash-flow.expected +++ b/ruby/ql/test/library-tests/dataflow/hash-flow/hash-flow.expected @@ -1,981 +1,981 @@ testFailures edges -| hash_flow.rb:10:5:10:8 | hash [element 0] | hash_flow.rb:30:10:30:13 | hash [element 0] | -| hash_flow.rb:10:5:10:8 | hash [element :a] | hash_flow.rb:22:10:22:13 | hash [element :a] | -| hash_flow.rb:10:5:10:8 | hash [element :c] | hash_flow.rb:24:10:24:13 | hash [element :c] | -| hash_flow.rb:10:5:10:8 | hash [element e] | hash_flow.rb:26:10:26:13 | hash [element e] | -| hash_flow.rb:10:5:10:8 | hash [element g] | hash_flow.rb:28:10:28:13 | hash [element g] | -| hash_flow.rb:11:15:11:24 | call to taint | hash_flow.rb:10:5:10:8 | hash [element :a] | -| hash_flow.rb:13:12:13:21 | call to taint | hash_flow.rb:10:5:10:8 | hash [element :c] | -| hash_flow.rb:15:14:15:23 | call to taint | hash_flow.rb:10:5:10:8 | hash [element e] | -| hash_flow.rb:17:16:17:25 | call to taint | hash_flow.rb:10:5:10:8 | hash [element g] | -| hash_flow.rb:19:14:19:23 | call to taint | hash_flow.rb:10:5:10:8 | hash [element 0] | -| hash_flow.rb:22:10:22:13 | hash [element :a] | hash_flow.rb:22:10:22:17 | ...[...] | -| hash_flow.rb:24:10:24:13 | hash [element :c] | hash_flow.rb:24:10:24:17 | ...[...] | -| hash_flow.rb:26:10:26:13 | hash [element e] | hash_flow.rb:26:10:26:18 | ...[...] | -| hash_flow.rb:28:10:28:13 | hash [element g] | hash_flow.rb:28:10:28:18 | ...[...] | -| hash_flow.rb:30:10:30:13 | hash [element 0] | hash_flow.rb:30:10:30:16 | ...[...] | -| hash_flow.rb:38:5:38:8 | [post] hash [element 0] | hash_flow.rb:39:5:39:8 | hash [element 0] | -| hash_flow.rb:38:15:38:24 | call to taint | hash_flow.rb:38:5:38:8 | [post] hash [element 0] | -| hash_flow.rb:39:5:39:8 | [post] hash [element 0] | hash_flow.rb:40:5:40:8 | hash [element 0] | -| hash_flow.rb:39:5:39:8 | hash [element 0] | hash_flow.rb:39:5:39:8 | [post] hash [element 0] | -| hash_flow.rb:40:5:40:8 | [post] hash [element 0] | hash_flow.rb:41:5:41:8 | hash [element 0] | -| hash_flow.rb:40:5:40:8 | [post] hash [element :a] | hash_flow.rb:41:5:41:8 | hash [element :a] | -| hash_flow.rb:40:5:40:8 | hash [element 0] | hash_flow.rb:40:5:40:8 | [post] hash [element 0] | -| hash_flow.rb:40:16:40:25 | call to taint | hash_flow.rb:40:5:40:8 | [post] hash [element :a] | -| hash_flow.rb:41:5:41:8 | [post] hash [element 0] | hash_flow.rb:42:5:42:8 | hash [element 0] | -| hash_flow.rb:41:5:41:8 | [post] hash [element :a] | hash_flow.rb:42:5:42:8 | hash [element :a] | -| hash_flow.rb:41:5:41:8 | hash [element 0] | hash_flow.rb:41:5:41:8 | [post] hash [element 0] | -| hash_flow.rb:41:5:41:8 | hash [element :a] | hash_flow.rb:41:5:41:8 | [post] hash [element :a] | -| hash_flow.rb:42:5:42:8 | [post] hash [element 0] | hash_flow.rb:43:5:43:8 | hash [element 0] | -| hash_flow.rb:42:5:42:8 | [post] hash [element :a] | hash_flow.rb:43:5:43:8 | hash [element :a] | -| hash_flow.rb:42:5:42:8 | [post] hash [element a] | hash_flow.rb:43:5:43:8 | hash [element a] | -| hash_flow.rb:42:5:42:8 | hash [element 0] | hash_flow.rb:42:5:42:8 | [post] hash [element 0] | -| hash_flow.rb:42:5:42:8 | hash [element :a] | hash_flow.rb:42:5:42:8 | [post] hash [element :a] | -| hash_flow.rb:42:17:42:26 | call to taint | hash_flow.rb:42:5:42:8 | [post] hash [element a] | -| hash_flow.rb:43:5:43:8 | [post] hash [element 0] | hash_flow.rb:44:10:44:13 | hash [element 0] | -| hash_flow.rb:43:5:43:8 | [post] hash [element :a] | hash_flow.rb:46:10:46:13 | hash [element :a] | -| hash_flow.rb:43:5:43:8 | [post] hash [element a] | hash_flow.rb:48:10:48:13 | hash [element a] | -| hash_flow.rb:43:5:43:8 | hash [element 0] | hash_flow.rb:43:5:43:8 | [post] hash [element 0] | -| hash_flow.rb:43:5:43:8 | hash [element :a] | hash_flow.rb:43:5:43:8 | [post] hash [element :a] | -| hash_flow.rb:43:5:43:8 | hash [element a] | hash_flow.rb:43:5:43:8 | [post] hash [element a] | -| hash_flow.rb:44:10:44:13 | hash [element 0] | hash_flow.rb:44:10:44:16 | ...[...] | -| hash_flow.rb:46:10:46:13 | hash [element :a] | hash_flow.rb:46:10:46:17 | ...[...] | -| hash_flow.rb:48:10:48:13 | hash [element a] | hash_flow.rb:48:10:48:18 | ...[...] | -| hash_flow.rb:55:5:55:9 | hash1 [element :a] | hash_flow.rb:56:10:56:14 | hash1 [element :a] | -| hash_flow.rb:55:13:55:37 | ...[...] [element :a] | hash_flow.rb:55:5:55:9 | hash1 [element :a] | -| hash_flow.rb:55:21:55:30 | call to taint | hash_flow.rb:55:13:55:37 | ...[...] [element :a] | -| hash_flow.rb:56:10:56:14 | hash1 [element :a] | hash_flow.rb:56:10:56:18 | ...[...] | -| hash_flow.rb:59:5:59:5 | x [element :a] | hash_flow.rb:60:18:60:18 | x [element :a] | -| hash_flow.rb:59:13:59:22 | call to taint | hash_flow.rb:59:5:59:5 | x [element :a] | -| hash_flow.rb:60:5:60:9 | hash2 [element :a] | hash_flow.rb:61:10:61:14 | hash2 [element :a] | -| hash_flow.rb:60:13:60:19 | ...[...] [element :a] | hash_flow.rb:60:5:60:9 | hash2 [element :a] | -| hash_flow.rb:60:18:60:18 | x [element :a] | hash_flow.rb:60:13:60:19 | ...[...] [element :a] | -| hash_flow.rb:61:10:61:14 | hash2 [element :a] | hash_flow.rb:61:10:61:18 | ...[...] | -| hash_flow.rb:64:5:64:9 | hash3 [element] | hash_flow.rb:65:10:65:14 | hash3 [element] | -| hash_flow.rb:64:5:64:9 | hash3 [element] | hash_flow.rb:66:10:66:14 | hash3 [element] | -| hash_flow.rb:64:13:64:45 | ...[...] [element] | hash_flow.rb:64:5:64:9 | hash3 [element] | -| hash_flow.rb:64:24:64:33 | call to taint | hash_flow.rb:64:13:64:45 | ...[...] [element] | -| hash_flow.rb:65:10:65:14 | hash3 [element] | hash_flow.rb:65:10:65:18 | ...[...] | -| hash_flow.rb:66:10:66:14 | hash3 [element] | hash_flow.rb:66:10:66:18 | ...[...] | -| hash_flow.rb:68:5:68:9 | hash4 [element :a] | hash_flow.rb:69:10:69:14 | hash4 [element :a] | -| hash_flow.rb:68:13:68:39 | ...[...] [element :a] | hash_flow.rb:68:5:68:9 | hash4 [element :a] | -| hash_flow.rb:68:22:68:31 | call to taint | hash_flow.rb:68:13:68:39 | ...[...] [element :a] | -| hash_flow.rb:69:10:69:14 | hash4 [element :a] | hash_flow.rb:69:10:69:18 | ...[...] | -| hash_flow.rb:72:5:72:9 | hash5 [element a] | hash_flow.rb:73:10:73:14 | hash5 [element a] | -| hash_flow.rb:72:13:72:45 | ...[...] [element a] | hash_flow.rb:72:5:72:9 | hash5 [element a] | -| hash_flow.rb:72:25:72:34 | call to taint | hash_flow.rb:72:13:72:45 | ...[...] [element a] | -| hash_flow.rb:73:10:73:14 | hash5 [element a] | hash_flow.rb:73:10:73:19 | ...[...] | -| hash_flow.rb:76:5:76:9 | hash6 [element a] | hash_flow.rb:77:10:77:14 | hash6 [element a] | -| hash_flow.rb:76:13:76:47 | ...[...] [element a] | hash_flow.rb:76:5:76:9 | hash6 [element a] | -| hash_flow.rb:76:26:76:35 | call to taint | hash_flow.rb:76:13:76:47 | ...[...] [element a] | -| hash_flow.rb:77:10:77:14 | hash6 [element a] | hash_flow.rb:77:10:77:19 | ...[...] | -| hash_flow.rb:84:5:84:9 | hash1 [element :a] | hash_flow.rb:85:10:85:14 | hash1 [element :a] | -| hash_flow.rb:84:13:84:42 | call to [] [element :a] | hash_flow.rb:84:5:84:9 | hash1 [element :a] | -| hash_flow.rb:84:26:84:35 | call to taint | hash_flow.rb:84:13:84:42 | call to [] [element :a] | -| hash_flow.rb:85:10:85:14 | hash1 [element :a] | hash_flow.rb:85:10:85:18 | ...[...] | -| hash_flow.rb:92:5:92:8 | hash [element :a] | hash_flow.rb:96:30:96:33 | hash [element :a] | -| hash_flow.rb:93:15:93:24 | call to taint | hash_flow.rb:92:5:92:8 | hash [element :a] | -| hash_flow.rb:96:5:96:9 | hash2 [element :a] | hash_flow.rb:97:10:97:14 | hash2 [element :a] | -| hash_flow.rb:96:13:96:34 | call to try_convert [element :a] | hash_flow.rb:96:5:96:9 | hash2 [element :a] | -| hash_flow.rb:96:30:96:33 | hash [element :a] | hash_flow.rb:96:13:96:34 | call to try_convert [element :a] | -| hash_flow.rb:97:10:97:14 | hash2 [element :a] | hash_flow.rb:97:10:97:18 | ...[...] | -| hash_flow.rb:105:5:105:5 | b | hash_flow.rb:106:10:106:10 | b | -| hash_flow.rb:105:21:105:30 | call to taint | hash_flow.rb:105:5:105:5 | b | -| hash_flow.rb:113:5:113:5 | b | hash_flow.rb:115:10:115:10 | b | -| hash_flow.rb:113:9:113:12 | [post] hash [element :a] | hash_flow.rb:114:10:114:13 | hash [element :a] | -| hash_flow.rb:113:9:113:34 | call to store | hash_flow.rb:113:5:113:5 | b | -| hash_flow.rb:113:24:113:33 | call to taint | hash_flow.rb:113:9:113:12 | [post] hash [element :a] | -| hash_flow.rb:113:24:113:33 | call to taint | hash_flow.rb:113:9:113:34 | call to store | -| hash_flow.rb:114:10:114:13 | hash [element :a] | hash_flow.rb:114:10:114:17 | ...[...] | -| hash_flow.rb:118:5:118:5 | c | hash_flow.rb:121:10:121:10 | c | -| hash_flow.rb:118:9:118:12 | [post] hash [element] | hash_flow.rb:119:10:119:13 | hash [element] | -| hash_flow.rb:118:9:118:12 | [post] hash [element] | hash_flow.rb:120:10:120:13 | hash [element] | -| hash_flow.rb:118:9:118:33 | call to store | hash_flow.rb:118:5:118:5 | c | -| hash_flow.rb:118:23:118:32 | call to taint | hash_flow.rb:118:9:118:12 | [post] hash [element] | -| hash_flow.rb:118:23:118:32 | call to taint | hash_flow.rb:118:9:118:33 | call to store | -| hash_flow.rb:119:10:119:13 | hash [element] | hash_flow.rb:119:10:119:17 | ...[...] | -| hash_flow.rb:120:10:120:13 | hash [element] | hash_flow.rb:120:10:120:17 | ...[...] | -| hash_flow.rb:127:5:127:8 | hash [element :a] | hash_flow.rb:131:5:131:8 | hash [element :a] | -| hash_flow.rb:127:5:127:8 | hash [element :a] | hash_flow.rb:134:5:134:8 | hash [element :a] | -| hash_flow.rb:128:15:128:24 | call to taint | hash_flow.rb:127:5:127:8 | hash [element :a] | -| hash_flow.rb:131:5:131:8 | hash [element :a] | hash_flow.rb:131:18:131:29 | key_or_value | -| hash_flow.rb:131:18:131:29 | key_or_value | hash_flow.rb:132:14:132:25 | key_or_value | -| hash_flow.rb:134:5:134:8 | hash [element :a] | hash_flow.rb:134:22:134:26 | value | -| hash_flow.rb:134:22:134:26 | value | hash_flow.rb:136:14:136:18 | value | -| hash_flow.rb:143:5:143:8 | hash [element :a] | hash_flow.rb:147:9:147:12 | hash [element :a] | -| hash_flow.rb:143:5:143:8 | hash [element :a] | hash_flow.rb:151:9:151:12 | hash [element :a] | -| hash_flow.rb:144:15:144:25 | call to taint | hash_flow.rb:143:5:143:8 | hash [element :a] | -| hash_flow.rb:147:5:147:5 | b [element 1] | hash_flow.rb:149:10:149:10 | b [element 1] | -| hash_flow.rb:147:5:147:5 | b [element 1] | hash_flow.rb:150:10:150:10 | b [element 1] | -| hash_flow.rb:147:9:147:12 | hash [element :a] | hash_flow.rb:147:9:147:22 | call to assoc [element 1] | -| hash_flow.rb:147:9:147:22 | call to assoc [element 1] | hash_flow.rb:147:5:147:5 | b [element 1] | -| hash_flow.rb:149:10:149:10 | b [element 1] | hash_flow.rb:149:10:149:13 | ...[...] | -| hash_flow.rb:150:10:150:10 | b [element 1] | hash_flow.rb:150:10:150:13 | ...[...] | -| hash_flow.rb:151:5:151:5 | c [element 1] | hash_flow.rb:152:10:152:10 | c [element 1] | -| hash_flow.rb:151:9:151:12 | hash [element :a] | hash_flow.rb:151:9:151:21 | call to assoc [element 1] | -| hash_flow.rb:151:9:151:21 | call to assoc [element 1] | hash_flow.rb:151:5:151:5 | c [element 1] | -| hash_flow.rb:152:10:152:10 | c [element 1] | hash_flow.rb:152:10:152:13 | ...[...] | -| hash_flow.rb:169:5:169:8 | hash [element :a] | hash_flow.rb:173:9:173:12 | hash [element :a] | -| hash_flow.rb:170:15:170:25 | call to taint | hash_flow.rb:169:5:169:8 | hash [element :a] | -| hash_flow.rb:173:5:173:5 | a [element :a] | hash_flow.rb:174:10:174:10 | a [element :a] | -| hash_flow.rb:173:9:173:12 | hash [element :a] | hash_flow.rb:173:9:173:20 | call to compact [element :a] | -| hash_flow.rb:173:9:173:20 | call to compact [element :a] | hash_flow.rb:173:5:173:5 | a [element :a] | -| hash_flow.rb:174:10:174:10 | a [element :a] | hash_flow.rb:174:10:174:14 | ...[...] | -| hash_flow.rb:181:5:181:8 | hash [element :a] | hash_flow.rb:185:9:185:12 | hash [element :a] | -| hash_flow.rb:182:15:182:25 | call to taint | hash_flow.rb:181:5:181:8 | hash [element :a] | -| hash_flow.rb:185:5:185:5 | a | hash_flow.rb:186:10:186:10 | a | -| hash_flow.rb:185:9:185:12 | hash [element :a] | hash_flow.rb:185:9:185:23 | call to delete | -| hash_flow.rb:185:9:185:23 | call to delete | hash_flow.rb:185:5:185:5 | a | -| hash_flow.rb:193:5:193:8 | hash [element :a] | hash_flow.rb:197:9:197:12 | hash [element :a] | -| hash_flow.rb:194:15:194:25 | call to taint | hash_flow.rb:193:5:193:8 | hash [element :a] | -| hash_flow.rb:197:5:197:5 | a [element :a] | hash_flow.rb:201:10:201:10 | a [element :a] | -| hash_flow.rb:197:9:197:12 | [post] hash [element :a] | hash_flow.rb:202:10:202:13 | hash [element :a] | -| hash_flow.rb:197:9:197:12 | hash [element :a] | hash_flow.rb:197:9:197:12 | [post] hash [element :a] | -| hash_flow.rb:197:9:197:12 | hash [element :a] | hash_flow.rb:197:9:200:7 | call to delete_if [element :a] | -| hash_flow.rb:197:9:197:12 | hash [element :a] | hash_flow.rb:197:33:197:37 | value | -| hash_flow.rb:197:9:200:7 | call to delete_if [element :a] | hash_flow.rb:197:5:197:5 | a [element :a] | -| hash_flow.rb:197:33:197:37 | value | hash_flow.rb:199:14:199:18 | value | -| hash_flow.rb:201:10:201:10 | a [element :a] | hash_flow.rb:201:10:201:14 | ...[...] | -| hash_flow.rb:202:10:202:13 | hash [element :a] | hash_flow.rb:202:10:202:17 | ...[...] | -| hash_flow.rb:209:5:209:8 | hash [element :a] | hash_flow.rb:217:10:217:13 | hash [element :a] | -| hash_flow.rb:209:5:209:8 | hash [element :c, element :d] | hash_flow.rb:219:10:219:13 | hash [element :c, element :d] | -| hash_flow.rb:210:15:210:25 | call to taint | hash_flow.rb:209:5:209:8 | hash [element :a] | -| hash_flow.rb:213:19:213:29 | call to taint | hash_flow.rb:209:5:209:8 | hash [element :c, element :d] | -| hash_flow.rb:217:10:217:13 | hash [element :a] | hash_flow.rb:217:10:217:21 | call to dig | -| hash_flow.rb:219:10:219:13 | hash [element :c, element :d] | hash_flow.rb:219:10:219:24 | call to dig | -| hash_flow.rb:226:5:226:8 | hash [element :a] | hash_flow.rb:230:9:230:12 | hash [element :a] | -| hash_flow.rb:227:15:227:25 | call to taint | hash_flow.rb:226:5:226:8 | hash [element :a] | -| hash_flow.rb:230:5:230:5 | x [element :a] | hash_flow.rb:234:10:234:10 | x [element :a] | -| hash_flow.rb:230:9:230:12 | hash [element :a] | hash_flow.rb:230:9:233:7 | call to each [element :a] | -| hash_flow.rb:230:9:230:12 | hash [element :a] | hash_flow.rb:230:28:230:32 | value | -| hash_flow.rb:230:9:233:7 | call to each [element :a] | hash_flow.rb:230:5:230:5 | x [element :a] | -| hash_flow.rb:230:28:230:32 | value | hash_flow.rb:232:14:232:18 | value | -| hash_flow.rb:234:10:234:10 | x [element :a] | hash_flow.rb:234:10:234:14 | ...[...] | -| hash_flow.rb:241:5:241:8 | hash [element :a] | hash_flow.rb:245:9:245:12 | hash [element :a] | -| hash_flow.rb:242:15:242:25 | call to taint | hash_flow.rb:241:5:241:8 | hash [element :a] | -| hash_flow.rb:245:5:245:5 | x [element :a] | hash_flow.rb:248:10:248:10 | x [element :a] | -| hash_flow.rb:245:9:245:12 | hash [element :a] | hash_flow.rb:245:9:247:7 | call to each_key [element :a] | -| hash_flow.rb:245:9:247:7 | call to each_key [element :a] | hash_flow.rb:245:5:245:5 | x [element :a] | -| hash_flow.rb:248:10:248:10 | x [element :a] | hash_flow.rb:248:10:248:14 | ...[...] | -| hash_flow.rb:255:5:255:8 | hash [element :a] | hash_flow.rb:259:9:259:12 | hash [element :a] | -| hash_flow.rb:256:15:256:25 | call to taint | hash_flow.rb:255:5:255:8 | hash [element :a] | -| hash_flow.rb:259:5:259:5 | x [element :a] | hash_flow.rb:263:10:263:10 | x [element :a] | -| hash_flow.rb:259:9:259:12 | hash [element :a] | hash_flow.rb:259:9:262:7 | call to each_pair [element :a] | -| hash_flow.rb:259:9:259:12 | hash [element :a] | hash_flow.rb:259:33:259:37 | value | -| hash_flow.rb:259:9:262:7 | call to each_pair [element :a] | hash_flow.rb:259:5:259:5 | x [element :a] | -| hash_flow.rb:259:33:259:37 | value | hash_flow.rb:261:14:261:18 | value | -| hash_flow.rb:263:10:263:10 | x [element :a] | hash_flow.rb:263:10:263:14 | ...[...] | -| hash_flow.rb:270:5:270:8 | hash [element :a] | hash_flow.rb:274:9:274:12 | hash [element :a] | -| hash_flow.rb:271:15:271:25 | call to taint | hash_flow.rb:270:5:270:8 | hash [element :a] | -| hash_flow.rb:274:5:274:5 | x [element :a] | hash_flow.rb:277:10:277:10 | x [element :a] | -| hash_flow.rb:274:9:274:12 | hash [element :a] | hash_flow.rb:274:9:276:7 | call to each_value [element :a] | -| hash_flow.rb:274:9:274:12 | hash [element :a] | hash_flow.rb:274:29:274:33 | value | -| hash_flow.rb:274:9:276:7 | call to each_value [element :a] | hash_flow.rb:274:5:274:5 | x [element :a] | -| hash_flow.rb:274:29:274:33 | value | hash_flow.rb:275:14:275:18 | value | -| hash_flow.rb:277:10:277:10 | x [element :a] | hash_flow.rb:277:10:277:14 | ...[...] | -| hash_flow.rb:284:5:284:8 | hash [element :c] | hash_flow.rb:290:9:290:12 | hash [element :c] | -| hash_flow.rb:287:15:287:25 | call to taint | hash_flow.rb:284:5:284:8 | hash [element :c] | -| hash_flow.rb:290:5:290:5 | x [element :c] | hash_flow.rb:293:10:293:10 | x [element :c] | -| hash_flow.rb:290:9:290:12 | hash [element :c] | hash_flow.rb:290:9:290:28 | call to except [element :c] | -| hash_flow.rb:290:9:290:28 | call to except [element :c] | hash_flow.rb:290:5:290:5 | x [element :c] | -| hash_flow.rb:293:10:293:10 | x [element :c] | hash_flow.rb:293:10:293:14 | ...[...] | -| hash_flow.rb:300:5:300:8 | hash [element :a] | hash_flow.rb:305:9:305:12 | hash [element :a] | -| hash_flow.rb:300:5:300:8 | hash [element :a] | hash_flow.rb:309:9:309:12 | hash [element :a] | -| hash_flow.rb:300:5:300:8 | hash [element :a] | hash_flow.rb:311:9:311:12 | hash [element :a] | -| hash_flow.rb:300:5:300:8 | hash [element :a] | hash_flow.rb:315:9:315:12 | hash [element :a] | -| hash_flow.rb:300:5:300:8 | hash [element :c] | hash_flow.rb:305:9:305:12 | hash [element :c] | -| hash_flow.rb:300:5:300:8 | hash [element :c] | hash_flow.rb:315:9:315:12 | hash [element :c] | -| hash_flow.rb:301:15:301:25 | call to taint | hash_flow.rb:300:5:300:8 | hash [element :a] | -| hash_flow.rb:303:15:303:25 | call to taint | hash_flow.rb:300:5:300:8 | hash [element :c] | -| hash_flow.rb:305:5:305:5 | b | hash_flow.rb:308:10:308:10 | b | -| hash_flow.rb:305:9:305:12 | hash [element :a] | hash_flow.rb:305:9:307:7 | call to fetch | -| hash_flow.rb:305:9:305:12 | hash [element :c] | hash_flow.rb:305:9:307:7 | call to fetch | -| hash_flow.rb:305:9:307:7 | call to fetch | hash_flow.rb:305:5:305:5 | b | -| hash_flow.rb:305:20:305:30 | call to taint | hash_flow.rb:305:37:305:37 | x | -| hash_flow.rb:305:37:305:37 | x | hash_flow.rb:306:14:306:14 | x | -| hash_flow.rb:309:5:309:5 | b | hash_flow.rb:310:10:310:10 | b | -| hash_flow.rb:309:9:309:12 | hash [element :a] | hash_flow.rb:309:9:309:22 | call to fetch | -| hash_flow.rb:309:9:309:22 | call to fetch | hash_flow.rb:309:5:309:5 | b | -| hash_flow.rb:311:5:311:5 | b | hash_flow.rb:312:10:312:10 | b | -| hash_flow.rb:311:9:311:12 | hash [element :a] | hash_flow.rb:311:9:311:35 | call to fetch | -| hash_flow.rb:311:9:311:35 | call to fetch | hash_flow.rb:311:5:311:5 | b | -| hash_flow.rb:311:24:311:34 | call to taint | hash_flow.rb:311:9:311:35 | call to fetch | -| hash_flow.rb:313:5:313:5 | b | hash_flow.rb:314:10:314:10 | b | -| hash_flow.rb:313:9:313:35 | call to fetch | hash_flow.rb:313:5:313:5 | b | -| hash_flow.rb:313:24:313:34 | call to taint | hash_flow.rb:313:9:313:35 | call to fetch | -| hash_flow.rb:315:5:315:5 | b | hash_flow.rb:316:10:316:10 | b | -| hash_flow.rb:315:9:315:12 | hash [element :a] | hash_flow.rb:315:9:315:34 | call to fetch | -| hash_flow.rb:315:9:315:12 | hash [element :c] | hash_flow.rb:315:9:315:34 | call to fetch | -| hash_flow.rb:315:9:315:34 | call to fetch | hash_flow.rb:315:5:315:5 | b | -| hash_flow.rb:315:23:315:33 | call to taint | hash_flow.rb:315:9:315:34 | call to fetch | -| hash_flow.rb:322:5:322:8 | hash [element :a] | hash_flow.rb:327:9:327:12 | hash [element :a] | -| hash_flow.rb:322:5:322:8 | hash [element :a] | hash_flow.rb:332:9:332:12 | hash [element :a] | -| hash_flow.rb:322:5:322:8 | hash [element :a] | hash_flow.rb:334:9:334:12 | hash [element :a] | -| hash_flow.rb:322:5:322:8 | hash [element :c] | hash_flow.rb:327:9:327:12 | hash [element :c] | -| hash_flow.rb:322:5:322:8 | hash [element :c] | hash_flow.rb:334:9:334:12 | hash [element :c] | -| hash_flow.rb:323:15:323:25 | call to taint | hash_flow.rb:322:5:322:8 | hash [element :a] | -| hash_flow.rb:325:15:325:25 | call to taint | hash_flow.rb:322:5:322:8 | hash [element :c] | -| hash_flow.rb:327:5:327:5 | b [element] | hash_flow.rb:331:10:331:10 | b [element] | -| hash_flow.rb:327:9:327:12 | hash [element :a] | hash_flow.rb:327:9:330:7 | call to fetch_values [element] | -| hash_flow.rb:327:9:327:12 | hash [element :c] | hash_flow.rb:327:9:330:7 | call to fetch_values [element] | -| hash_flow.rb:327:9:330:7 | call to fetch_values [element] | hash_flow.rb:327:5:327:5 | b [element] | -| hash_flow.rb:327:27:327:37 | call to taint | hash_flow.rb:327:44:327:44 | x | -| hash_flow.rb:327:44:327:44 | x | hash_flow.rb:328:14:328:14 | x | -| hash_flow.rb:329:9:329:19 | call to taint | hash_flow.rb:327:9:330:7 | call to fetch_values [element] | -| hash_flow.rb:331:10:331:10 | b [element] | hash_flow.rb:331:10:331:13 | ...[...] | -| hash_flow.rb:332:5:332:5 | b [element] | hash_flow.rb:333:10:333:10 | b [element] | -| hash_flow.rb:332:9:332:12 | hash [element :a] | hash_flow.rb:332:9:332:29 | call to fetch_values [element] | -| hash_flow.rb:332:9:332:29 | call to fetch_values [element] | hash_flow.rb:332:5:332:5 | b [element] | -| hash_flow.rb:333:10:333:10 | b [element] | hash_flow.rb:333:10:333:13 | ...[...] | -| hash_flow.rb:334:5:334:5 | b [element] | hash_flow.rb:335:10:335:10 | b [element] | -| hash_flow.rb:334:9:334:12 | hash [element :a] | hash_flow.rb:334:9:334:31 | call to fetch_values [element] | -| hash_flow.rb:334:9:334:12 | hash [element :c] | hash_flow.rb:334:9:334:31 | call to fetch_values [element] | -| hash_flow.rb:334:9:334:31 | call to fetch_values [element] | hash_flow.rb:334:5:334:5 | b [element] | -| hash_flow.rb:335:10:335:10 | b [element] | hash_flow.rb:335:10:335:13 | ...[...] | -| hash_flow.rb:341:5:341:8 | hash [element :a] | hash_flow.rb:346:9:346:12 | hash [element :a] | -| hash_flow.rb:341:5:341:8 | hash [element :c] | hash_flow.rb:346:9:346:12 | hash [element :c] | -| hash_flow.rb:342:15:342:25 | call to taint | hash_flow.rb:341:5:341:8 | hash [element :a] | -| hash_flow.rb:344:15:344:25 | call to taint | hash_flow.rb:341:5:341:8 | hash [element :c] | -| hash_flow.rb:346:5:346:5 | b [element :a] | hash_flow.rb:351:11:351:11 | b [element :a] | -| hash_flow.rb:346:9:346:12 | hash [element :a] | hash_flow.rb:346:9:350:7 | call to filter [element :a] | -| hash_flow.rb:346:9:346:12 | hash [element :a] | hash_flow.rb:346:30:346:34 | value | -| hash_flow.rb:346:9:346:12 | hash [element :c] | hash_flow.rb:346:30:346:34 | value | -| hash_flow.rb:346:9:350:7 | call to filter [element :a] | hash_flow.rb:346:5:346:5 | b [element :a] | -| hash_flow.rb:346:30:346:34 | value | hash_flow.rb:348:14:348:18 | value | -| hash_flow.rb:351:11:351:11 | b [element :a] | hash_flow.rb:351:11:351:15 | ...[...] | -| hash_flow.rb:351:11:351:15 | ...[...] | hash_flow.rb:351:10:351:16 | ( ... ) | -| hash_flow.rb:357:5:357:8 | hash [element :a] | hash_flow.rb:362:5:362:8 | hash [element :a] | -| hash_flow.rb:357:5:357:8 | hash [element :c] | hash_flow.rb:362:5:362:8 | hash [element :c] | -| hash_flow.rb:358:15:358:25 | call to taint | hash_flow.rb:357:5:357:8 | hash [element :a] | -| hash_flow.rb:360:15:360:25 | call to taint | hash_flow.rb:357:5:357:8 | hash [element :c] | -| hash_flow.rb:362:5:362:8 | [post] hash [element :a] | hash_flow.rb:367:11:367:14 | hash [element :a] | -| hash_flow.rb:362:5:362:8 | hash [element :a] | hash_flow.rb:362:5:362:8 | [post] hash [element :a] | -| hash_flow.rb:362:5:362:8 | hash [element :a] | hash_flow.rb:362:27:362:31 | value | -| hash_flow.rb:362:5:362:8 | hash [element :c] | hash_flow.rb:362:27:362:31 | value | -| hash_flow.rb:362:27:362:31 | value | hash_flow.rb:364:14:364:18 | value | -| hash_flow.rb:367:11:367:14 | hash [element :a] | hash_flow.rb:367:11:367:18 | ...[...] | -| hash_flow.rb:367:11:367:18 | ...[...] | hash_flow.rb:367:10:367:19 | ( ... ) | -| hash_flow.rb:373:5:373:8 | hash [element :a] | hash_flow.rb:378:9:378:12 | hash [element :a] | -| hash_flow.rb:373:5:373:8 | hash [element :c] | hash_flow.rb:378:9:378:12 | hash [element :c] | -| hash_flow.rb:374:15:374:25 | call to taint | hash_flow.rb:373:5:373:8 | hash [element :a] | -| hash_flow.rb:376:15:376:25 | call to taint | hash_flow.rb:373:5:373:8 | hash [element :c] | -| hash_flow.rb:378:5:378:5 | b [element] | hash_flow.rb:379:11:379:11 | b [element] | -| hash_flow.rb:378:9:378:12 | hash [element :a] | hash_flow.rb:378:9:378:20 | call to flatten [element] | -| hash_flow.rb:378:9:378:12 | hash [element :c] | hash_flow.rb:378:9:378:20 | call to flatten [element] | -| hash_flow.rb:378:9:378:20 | call to flatten [element] | hash_flow.rb:378:5:378:5 | b [element] | -| hash_flow.rb:379:11:379:11 | b [element] | hash_flow.rb:379:11:379:14 | ...[...] | -| hash_flow.rb:379:11:379:14 | ...[...] | hash_flow.rb:379:10:379:15 | ( ... ) | -| hash_flow.rb:385:5:385:8 | hash [element :a] | hash_flow.rb:390:9:390:12 | hash [element :a] | -| hash_flow.rb:385:5:385:8 | hash [element :c] | hash_flow.rb:390:9:390:12 | hash [element :c] | -| hash_flow.rb:386:15:386:25 | call to taint | hash_flow.rb:385:5:385:8 | hash [element :a] | -| hash_flow.rb:388:15:388:25 | call to taint | hash_flow.rb:385:5:385:8 | hash [element :c] | -| hash_flow.rb:390:5:390:5 | b [element :a] | hash_flow.rb:396:11:396:11 | b [element :a] | -| hash_flow.rb:390:9:390:12 | [post] hash [element :a] | hash_flow.rb:395:11:395:14 | hash [element :a] | -| hash_flow.rb:390:9:390:12 | hash [element :a] | hash_flow.rb:390:9:390:12 | [post] hash [element :a] | -| hash_flow.rb:390:9:390:12 | hash [element :a] | hash_flow.rb:390:9:394:7 | call to keep_if [element :a] | -| hash_flow.rb:390:9:390:12 | hash [element :a] | hash_flow.rb:390:31:390:35 | value | -| hash_flow.rb:390:9:390:12 | hash [element :c] | hash_flow.rb:390:31:390:35 | value | -| hash_flow.rb:390:9:394:7 | call to keep_if [element :a] | hash_flow.rb:390:5:390:5 | b [element :a] | -| hash_flow.rb:390:31:390:35 | value | hash_flow.rb:392:14:392:18 | value | -| hash_flow.rb:395:11:395:14 | hash [element :a] | hash_flow.rb:395:11:395:18 | ...[...] | -| hash_flow.rb:395:11:395:18 | ...[...] | hash_flow.rb:395:10:395:19 | ( ... ) | -| hash_flow.rb:396:11:396:11 | b [element :a] | hash_flow.rb:396:11:396:15 | ...[...] | -| hash_flow.rb:396:11:396:15 | ...[...] | hash_flow.rb:396:10:396:16 | ( ... ) | -| hash_flow.rb:402:5:402:9 | hash1 [element :a] | hash_flow.rb:412:12:412:16 | hash1 [element :a] | -| hash_flow.rb:402:5:402:9 | hash1 [element :c] | hash_flow.rb:412:12:412:16 | hash1 [element :c] | -| hash_flow.rb:403:15:403:25 | call to taint | hash_flow.rb:402:5:402:9 | hash1 [element :a] | -| hash_flow.rb:405:15:405:25 | call to taint | hash_flow.rb:402:5:402:9 | hash1 [element :c] | -| hash_flow.rb:407:5:407:9 | hash2 [element :d] | hash_flow.rb:412:24:412:28 | hash2 [element :d] | -| hash_flow.rb:407:5:407:9 | hash2 [element :f] | hash_flow.rb:412:24:412:28 | hash2 [element :f] | -| hash_flow.rb:408:15:408:25 | call to taint | hash_flow.rb:407:5:407:9 | hash2 [element :d] | -| hash_flow.rb:410:15:410:25 | call to taint | hash_flow.rb:407:5:407:9 | hash2 [element :f] | -| hash_flow.rb:412:5:412:8 | hash [element :a] | hash_flow.rb:417:11:417:14 | hash [element :a] | -| hash_flow.rb:412:5:412:8 | hash [element :c] | hash_flow.rb:419:11:419:14 | hash [element :c] | -| hash_flow.rb:412:5:412:8 | hash [element :d] | hash_flow.rb:420:11:420:14 | hash [element :d] | -| hash_flow.rb:412:5:412:8 | hash [element :f] | hash_flow.rb:422:11:422:14 | hash [element :f] | -| hash_flow.rb:412:12:412:16 | hash1 [element :a] | hash_flow.rb:412:12:416:7 | call to merge [element :a] | -| hash_flow.rb:412:12:412:16 | hash1 [element :a] | hash_flow.rb:412:40:412:48 | old_value | -| hash_flow.rb:412:12:412:16 | hash1 [element :a] | hash_flow.rb:412:51:412:59 | new_value | -| hash_flow.rb:412:12:412:16 | hash1 [element :c] | hash_flow.rb:412:12:416:7 | call to merge [element :c] | -| hash_flow.rb:412:12:412:16 | hash1 [element :c] | hash_flow.rb:412:40:412:48 | old_value | -| hash_flow.rb:412:12:412:16 | hash1 [element :c] | hash_flow.rb:412:51:412:59 | new_value | -| hash_flow.rb:412:12:416:7 | call to merge [element :a] | hash_flow.rb:412:5:412:8 | hash [element :a] | -| hash_flow.rb:412:12:416:7 | call to merge [element :c] | hash_flow.rb:412:5:412:8 | hash [element :c] | -| hash_flow.rb:412:12:416:7 | call to merge [element :d] | hash_flow.rb:412:5:412:8 | hash [element :d] | -| hash_flow.rb:412:12:416:7 | call to merge [element :f] | hash_flow.rb:412:5:412:8 | hash [element :f] | -| hash_flow.rb:412:24:412:28 | hash2 [element :d] | hash_flow.rb:412:12:416:7 | call to merge [element :d] | -| hash_flow.rb:412:24:412:28 | hash2 [element :d] | hash_flow.rb:412:40:412:48 | old_value | -| hash_flow.rb:412:24:412:28 | hash2 [element :d] | hash_flow.rb:412:51:412:59 | new_value | -| hash_flow.rb:412:24:412:28 | hash2 [element :f] | hash_flow.rb:412:12:416:7 | call to merge [element :f] | -| hash_flow.rb:412:24:412:28 | hash2 [element :f] | hash_flow.rb:412:40:412:48 | old_value | -| hash_flow.rb:412:24:412:28 | hash2 [element :f] | hash_flow.rb:412:51:412:59 | new_value | -| hash_flow.rb:412:40:412:48 | old_value | hash_flow.rb:414:14:414:22 | old_value | -| hash_flow.rb:412:51:412:59 | new_value | hash_flow.rb:415:14:415:22 | new_value | -| hash_flow.rb:417:11:417:14 | hash [element :a] | hash_flow.rb:417:11:417:18 | ...[...] | -| hash_flow.rb:417:11:417:18 | ...[...] | hash_flow.rb:417:10:417:19 | ( ... ) | -| hash_flow.rb:419:11:419:14 | hash [element :c] | hash_flow.rb:419:11:419:18 | ...[...] | -| hash_flow.rb:419:11:419:18 | ...[...] | hash_flow.rb:419:10:419:19 | ( ... ) | -| hash_flow.rb:420:11:420:14 | hash [element :d] | hash_flow.rb:420:11:420:18 | ...[...] | -| hash_flow.rb:420:11:420:18 | ...[...] | hash_flow.rb:420:10:420:19 | ( ... ) | -| hash_flow.rb:422:11:422:14 | hash [element :f] | hash_flow.rb:422:11:422:18 | ...[...] | -| hash_flow.rb:422:11:422:18 | ...[...] | hash_flow.rb:422:10:422:19 | ( ... ) | -| hash_flow.rb:428:5:428:9 | hash1 [element :a] | hash_flow.rb:438:12:438:16 | hash1 [element :a] | -| hash_flow.rb:428:5:428:9 | hash1 [element :c] | hash_flow.rb:438:12:438:16 | hash1 [element :c] | -| hash_flow.rb:429:15:429:25 | call to taint | hash_flow.rb:428:5:428:9 | hash1 [element :a] | -| hash_flow.rb:431:15:431:25 | call to taint | hash_flow.rb:428:5:428:9 | hash1 [element :c] | -| hash_flow.rb:433:5:433:9 | hash2 [element :d] | hash_flow.rb:438:25:438:29 | hash2 [element :d] | -| hash_flow.rb:433:5:433:9 | hash2 [element :f] | hash_flow.rb:438:25:438:29 | hash2 [element :f] | -| hash_flow.rb:434:15:434:25 | call to taint | hash_flow.rb:433:5:433:9 | hash2 [element :d] | -| hash_flow.rb:436:15:436:25 | call to taint | hash_flow.rb:433:5:433:9 | hash2 [element :f] | -| hash_flow.rb:438:5:438:8 | hash [element :a] | hash_flow.rb:443:11:443:14 | hash [element :a] | -| hash_flow.rb:438:5:438:8 | hash [element :c] | hash_flow.rb:445:11:445:14 | hash [element :c] | -| hash_flow.rb:438:5:438:8 | hash [element :d] | hash_flow.rb:446:11:446:14 | hash [element :d] | -| hash_flow.rb:438:5:438:8 | hash [element :f] | hash_flow.rb:448:11:448:14 | hash [element :f] | -| hash_flow.rb:438:12:438:16 | [post] hash1 [element :a] | hash_flow.rb:450:11:450:15 | hash1 [element :a] | -| hash_flow.rb:438:12:438:16 | [post] hash1 [element :c] | hash_flow.rb:452:11:452:15 | hash1 [element :c] | -| hash_flow.rb:438:12:438:16 | [post] hash1 [element :d] | hash_flow.rb:453:11:453:15 | hash1 [element :d] | -| hash_flow.rb:438:12:438:16 | [post] hash1 [element :f] | hash_flow.rb:455:11:455:15 | hash1 [element :f] | -| hash_flow.rb:438:12:438:16 | hash1 [element :a] | hash_flow.rb:438:12:438:16 | [post] hash1 [element :a] | -| hash_flow.rb:438:12:438:16 | hash1 [element :a] | hash_flow.rb:438:12:442:7 | call to merge! [element :a] | -| hash_flow.rb:438:12:438:16 | hash1 [element :a] | hash_flow.rb:438:41:438:49 | old_value | -| hash_flow.rb:438:12:438:16 | hash1 [element :a] | hash_flow.rb:438:52:438:60 | new_value | -| hash_flow.rb:438:12:438:16 | hash1 [element :c] | hash_flow.rb:438:12:438:16 | [post] hash1 [element :c] | -| hash_flow.rb:438:12:438:16 | hash1 [element :c] | hash_flow.rb:438:12:442:7 | call to merge! [element :c] | -| hash_flow.rb:438:12:438:16 | hash1 [element :c] | hash_flow.rb:438:41:438:49 | old_value | -| hash_flow.rb:438:12:438:16 | hash1 [element :c] | hash_flow.rb:438:52:438:60 | new_value | -| hash_flow.rb:438:12:442:7 | call to merge! [element :a] | hash_flow.rb:438:5:438:8 | hash [element :a] | -| hash_flow.rb:438:12:442:7 | call to merge! [element :c] | hash_flow.rb:438:5:438:8 | hash [element :c] | -| hash_flow.rb:438:12:442:7 | call to merge! [element :d] | hash_flow.rb:438:5:438:8 | hash [element :d] | -| hash_flow.rb:438:12:442:7 | call to merge! [element :f] | hash_flow.rb:438:5:438:8 | hash [element :f] | -| hash_flow.rb:438:25:438:29 | hash2 [element :d] | hash_flow.rb:438:12:438:16 | [post] hash1 [element :d] | -| hash_flow.rb:438:25:438:29 | hash2 [element :d] | hash_flow.rb:438:12:442:7 | call to merge! [element :d] | -| hash_flow.rb:438:25:438:29 | hash2 [element :d] | hash_flow.rb:438:41:438:49 | old_value | -| hash_flow.rb:438:25:438:29 | hash2 [element :d] | hash_flow.rb:438:52:438:60 | new_value | -| hash_flow.rb:438:25:438:29 | hash2 [element :f] | hash_flow.rb:438:12:438:16 | [post] hash1 [element :f] | -| hash_flow.rb:438:25:438:29 | hash2 [element :f] | hash_flow.rb:438:12:442:7 | call to merge! [element :f] | -| hash_flow.rb:438:25:438:29 | hash2 [element :f] | hash_flow.rb:438:41:438:49 | old_value | -| hash_flow.rb:438:25:438:29 | hash2 [element :f] | hash_flow.rb:438:52:438:60 | new_value | -| hash_flow.rb:438:41:438:49 | old_value | hash_flow.rb:440:14:440:22 | old_value | -| hash_flow.rb:438:52:438:60 | new_value | hash_flow.rb:441:14:441:22 | new_value | -| hash_flow.rb:443:11:443:14 | hash [element :a] | hash_flow.rb:443:11:443:18 | ...[...] | -| hash_flow.rb:443:11:443:18 | ...[...] | hash_flow.rb:443:10:443:19 | ( ... ) | -| hash_flow.rb:445:11:445:14 | hash [element :c] | hash_flow.rb:445:11:445:18 | ...[...] | -| hash_flow.rb:445:11:445:18 | ...[...] | hash_flow.rb:445:10:445:19 | ( ... ) | -| hash_flow.rb:446:11:446:14 | hash [element :d] | hash_flow.rb:446:11:446:18 | ...[...] | -| hash_flow.rb:446:11:446:18 | ...[...] | hash_flow.rb:446:10:446:19 | ( ... ) | -| hash_flow.rb:448:11:448:14 | hash [element :f] | hash_flow.rb:448:11:448:18 | ...[...] | -| hash_flow.rb:448:11:448:18 | ...[...] | hash_flow.rb:448:10:448:19 | ( ... ) | -| hash_flow.rb:450:11:450:15 | hash1 [element :a] | hash_flow.rb:450:11:450:19 | ...[...] | -| hash_flow.rb:450:11:450:19 | ...[...] | hash_flow.rb:450:10:450:20 | ( ... ) | -| hash_flow.rb:452:11:452:15 | hash1 [element :c] | hash_flow.rb:452:11:452:19 | ...[...] | -| hash_flow.rb:452:11:452:19 | ...[...] | hash_flow.rb:452:10:452:20 | ( ... ) | -| hash_flow.rb:453:11:453:15 | hash1 [element :d] | hash_flow.rb:453:11:453:19 | ...[...] | -| hash_flow.rb:453:11:453:19 | ...[...] | hash_flow.rb:453:10:453:20 | ( ... ) | -| hash_flow.rb:455:11:455:15 | hash1 [element :f] | hash_flow.rb:455:11:455:19 | ...[...] | -| hash_flow.rb:455:11:455:19 | ...[...] | hash_flow.rb:455:10:455:20 | ( ... ) | -| hash_flow.rb:461:5:461:8 | hash [element :a] | hash_flow.rb:465:9:465:12 | hash [element :a] | -| hash_flow.rb:462:15:462:25 | call to taint | hash_flow.rb:461:5:461:8 | hash [element :a] | -| hash_flow.rb:465:5:465:5 | b [element 1] | hash_flow.rb:467:10:467:10 | b [element 1] | -| hash_flow.rb:465:9:465:12 | hash [element :a] | hash_flow.rb:465:9:465:22 | call to rassoc [element 1] | -| hash_flow.rb:465:9:465:22 | call to rassoc [element 1] | hash_flow.rb:465:5:465:5 | b [element 1] | -| hash_flow.rb:467:10:467:10 | b [element 1] | hash_flow.rb:467:10:467:13 | ...[...] | -| hash_flow.rb:473:5:473:8 | hash [element :a] | hash_flow.rb:477:9:477:12 | hash [element :a] | -| hash_flow.rb:474:15:474:25 | call to taint | hash_flow.rb:473:5:473:8 | hash [element :a] | -| hash_flow.rb:477:5:477:5 | b [element :a] | hash_flow.rb:482:10:482:10 | b [element :a] | -| hash_flow.rb:477:9:477:12 | hash [element :a] | hash_flow.rb:477:9:481:7 | call to reject [element :a] | -| hash_flow.rb:477:9:477:12 | hash [element :a] | hash_flow.rb:477:29:477:33 | value | -| hash_flow.rb:477:9:481:7 | call to reject [element :a] | hash_flow.rb:477:5:477:5 | b [element :a] | -| hash_flow.rb:477:29:477:33 | value | hash_flow.rb:479:14:479:18 | value | -| hash_flow.rb:482:10:482:10 | b [element :a] | hash_flow.rb:482:10:482:14 | ...[...] | -| hash_flow.rb:488:5:488:8 | hash [element :a] | hash_flow.rb:492:9:492:12 | hash [element :a] | -| hash_flow.rb:489:15:489:25 | call to taint | hash_flow.rb:488:5:488:8 | hash [element :a] | -| hash_flow.rb:492:5:492:5 | b [element :a] | hash_flow.rb:497:10:497:10 | b [element :a] | -| hash_flow.rb:492:9:492:12 | [post] hash [element :a] | hash_flow.rb:498:10:498:13 | hash [element :a] | -| hash_flow.rb:492:9:492:12 | hash [element :a] | hash_flow.rb:492:9:492:12 | [post] hash [element :a] | -| hash_flow.rb:492:9:492:12 | hash [element :a] | hash_flow.rb:492:9:496:7 | call to reject! [element :a] | -| hash_flow.rb:492:9:492:12 | hash [element :a] | hash_flow.rb:492:30:492:34 | value | -| hash_flow.rb:492:9:496:7 | call to reject! [element :a] | hash_flow.rb:492:5:492:5 | b [element :a] | -| hash_flow.rb:492:30:492:34 | value | hash_flow.rb:494:14:494:18 | value | -| hash_flow.rb:497:10:497:10 | b [element :a] | hash_flow.rb:497:10:497:14 | ...[...] | -| hash_flow.rb:498:10:498:13 | hash [element :a] | hash_flow.rb:498:10:498:17 | ...[...] | -| hash_flow.rb:504:5:504:8 | hash [element :a] | hash_flow.rb:512:19:512:22 | hash [element :a] | -| hash_flow.rb:504:5:504:8 | hash [element :c] | hash_flow.rb:512:19:512:22 | hash [element :c] | -| hash_flow.rb:505:15:505:25 | call to taint | hash_flow.rb:504:5:504:8 | hash [element :a] | -| hash_flow.rb:507:15:507:25 | call to taint | hash_flow.rb:504:5:504:8 | hash [element :c] | -| hash_flow.rb:512:5:512:9 | [post] hash2 [element :a] | hash_flow.rb:513:11:513:15 | hash2 [element :a] | -| hash_flow.rb:512:5:512:9 | [post] hash2 [element :c] | hash_flow.rb:515:11:515:15 | hash2 [element :c] | -| hash_flow.rb:512:19:512:22 | hash [element :a] | hash_flow.rb:512:5:512:9 | [post] hash2 [element :a] | -| hash_flow.rb:512:19:512:22 | hash [element :c] | hash_flow.rb:512:5:512:9 | [post] hash2 [element :c] | -| hash_flow.rb:513:11:513:15 | hash2 [element :a] | hash_flow.rb:513:11:513:19 | ...[...] | -| hash_flow.rb:513:11:513:19 | ...[...] | hash_flow.rb:513:10:513:20 | ( ... ) | -| hash_flow.rb:515:11:515:15 | hash2 [element :c] | hash_flow.rb:515:11:515:19 | ...[...] | -| hash_flow.rb:515:11:515:19 | ...[...] | hash_flow.rb:515:10:515:20 | ( ... ) | -| hash_flow.rb:519:5:519:8 | hash [element :a] | hash_flow.rb:524:9:524:12 | hash [element :a] | -| hash_flow.rb:519:5:519:8 | hash [element :c] | hash_flow.rb:524:9:524:12 | hash [element :c] | -| hash_flow.rb:520:15:520:25 | call to taint | hash_flow.rb:519:5:519:8 | hash [element :a] | -| hash_flow.rb:522:15:522:25 | call to taint | hash_flow.rb:519:5:519:8 | hash [element :c] | -| hash_flow.rb:524:5:524:5 | b [element :a] | hash_flow.rb:529:11:529:11 | b [element :a] | -| hash_flow.rb:524:9:524:12 | hash [element :a] | hash_flow.rb:524:9:528:7 | call to select [element :a] | -| hash_flow.rb:524:9:524:12 | hash [element :a] | hash_flow.rb:524:30:524:34 | value | -| hash_flow.rb:524:9:524:12 | hash [element :c] | hash_flow.rb:524:30:524:34 | value | -| hash_flow.rb:524:9:528:7 | call to select [element :a] | hash_flow.rb:524:5:524:5 | b [element :a] | -| hash_flow.rb:524:30:524:34 | value | hash_flow.rb:526:14:526:18 | value | -| hash_flow.rb:529:11:529:11 | b [element :a] | hash_flow.rb:529:11:529:15 | ...[...] | -| hash_flow.rb:529:11:529:15 | ...[...] | hash_flow.rb:529:10:529:16 | ( ... ) | -| hash_flow.rb:535:5:535:8 | hash [element :a] | hash_flow.rb:540:5:540:8 | hash [element :a] | -| hash_flow.rb:535:5:535:8 | hash [element :c] | hash_flow.rb:540:5:540:8 | hash [element :c] | -| hash_flow.rb:536:15:536:25 | call to taint | hash_flow.rb:535:5:535:8 | hash [element :a] | -| hash_flow.rb:538:15:538:25 | call to taint | hash_flow.rb:535:5:535:8 | hash [element :c] | -| hash_flow.rb:540:5:540:8 | [post] hash [element :a] | hash_flow.rb:545:11:545:14 | hash [element :a] | -| hash_flow.rb:540:5:540:8 | hash [element :a] | hash_flow.rb:540:5:540:8 | [post] hash [element :a] | -| hash_flow.rb:540:5:540:8 | hash [element :a] | hash_flow.rb:540:27:540:31 | value | -| hash_flow.rb:540:5:540:8 | hash [element :c] | hash_flow.rb:540:27:540:31 | value | -| hash_flow.rb:540:27:540:31 | value | hash_flow.rb:542:14:542:18 | value | -| hash_flow.rb:545:11:545:14 | hash [element :a] | hash_flow.rb:545:11:545:18 | ...[...] | -| hash_flow.rb:545:11:545:18 | ...[...] | hash_flow.rb:545:10:545:19 | ( ... ) | -| hash_flow.rb:551:5:551:8 | hash [element :a] | hash_flow.rb:556:9:556:12 | hash [element :a] | -| hash_flow.rb:551:5:551:8 | hash [element :c] | hash_flow.rb:556:9:556:12 | hash [element :c] | -| hash_flow.rb:552:15:552:25 | call to taint | hash_flow.rb:551:5:551:8 | hash [element :a] | -| hash_flow.rb:554:15:554:25 | call to taint | hash_flow.rb:551:5:551:8 | hash [element :c] | -| hash_flow.rb:556:5:556:5 | b [element 1] | hash_flow.rb:559:11:559:11 | b [element 1] | -| hash_flow.rb:556:9:556:12 | [post] hash [element :a] | hash_flow.rb:557:11:557:14 | hash [element :a] | -| hash_flow.rb:556:9:556:12 | hash [element :a] | hash_flow.rb:556:9:556:12 | [post] hash [element :a] | -| hash_flow.rb:556:9:556:12 | hash [element :a] | hash_flow.rb:556:9:556:18 | call to shift [element 1] | -| hash_flow.rb:556:9:556:12 | hash [element :c] | hash_flow.rb:556:9:556:18 | call to shift [element 1] | -| hash_flow.rb:556:9:556:18 | call to shift [element 1] | hash_flow.rb:556:5:556:5 | b [element 1] | -| hash_flow.rb:557:11:557:14 | hash [element :a] | hash_flow.rb:557:11:557:18 | ...[...] | -| hash_flow.rb:557:11:557:18 | ...[...] | hash_flow.rb:557:10:557:19 | ( ... ) | -| hash_flow.rb:559:11:559:11 | b [element 1] | hash_flow.rb:559:11:559:14 | ...[...] | -| hash_flow.rb:559:11:559:14 | ...[...] | hash_flow.rb:559:10:559:15 | ( ... ) | -| hash_flow.rb:565:5:565:8 | hash [element :a] | hash_flow.rb:570:9:570:12 | hash [element :a] | -| hash_flow.rb:565:5:565:8 | hash [element :a] | hash_flow.rb:575:9:575:12 | hash [element :a] | -| hash_flow.rb:565:5:565:8 | hash [element :c] | hash_flow.rb:575:9:575:12 | hash [element :c] | -| hash_flow.rb:566:15:566:25 | call to taint | hash_flow.rb:565:5:565:8 | hash [element :a] | -| hash_flow.rb:568:15:568:25 | call to taint | hash_flow.rb:565:5:565:8 | hash [element :c] | -| hash_flow.rb:570:5:570:5 | b [element :a] | hash_flow.rb:571:11:571:11 | b [element :a] | -| hash_flow.rb:570:9:570:12 | hash [element :a] | hash_flow.rb:570:9:570:26 | call to slice [element :a] | -| hash_flow.rb:570:9:570:26 | call to slice [element :a] | hash_flow.rb:570:5:570:5 | b [element :a] | -| hash_flow.rb:571:11:571:11 | b [element :a] | hash_flow.rb:571:11:571:15 | ...[...] | -| hash_flow.rb:571:11:571:15 | ...[...] | hash_flow.rb:571:10:571:16 | ( ... ) | -| hash_flow.rb:575:5:575:5 | c [element :a] | hash_flow.rb:576:11:576:11 | c [element :a] | -| hash_flow.rb:575:5:575:5 | c [element :c] | hash_flow.rb:578:11:578:11 | c [element :c] | -| hash_flow.rb:575:9:575:12 | hash [element :a] | hash_flow.rb:575:9:575:25 | call to slice [element :a] | -| hash_flow.rb:575:9:575:12 | hash [element :c] | hash_flow.rb:575:9:575:25 | call to slice [element :c] | -| hash_flow.rb:575:9:575:25 | call to slice [element :a] | hash_flow.rb:575:5:575:5 | c [element :a] | -| hash_flow.rb:575:9:575:25 | call to slice [element :c] | hash_flow.rb:575:5:575:5 | c [element :c] | -| hash_flow.rb:576:11:576:11 | c [element :a] | hash_flow.rb:576:11:576:15 | ...[...] | -| hash_flow.rb:576:11:576:15 | ...[...] | hash_flow.rb:576:10:576:16 | ( ... ) | -| hash_flow.rb:578:11:578:11 | c [element :c] | hash_flow.rb:578:11:578:15 | ...[...] | -| hash_flow.rb:578:11:578:15 | ...[...] | hash_flow.rb:578:10:578:16 | ( ... ) | -| hash_flow.rb:584:5:584:8 | hash [element :a] | hash_flow.rb:589:9:589:12 | hash [element :a] | -| hash_flow.rb:584:5:584:8 | hash [element :c] | hash_flow.rb:589:9:589:12 | hash [element :c] | -| hash_flow.rb:585:15:585:25 | call to taint | hash_flow.rb:584:5:584:8 | hash [element :a] | -| hash_flow.rb:587:15:587:25 | call to taint | hash_flow.rb:584:5:584:8 | hash [element :c] | -| hash_flow.rb:589:5:589:5 | a [element, element 1] | hash_flow.rb:591:11:591:11 | a [element, element 1] | -| hash_flow.rb:589:9:589:12 | hash [element :a] | hash_flow.rb:589:9:589:17 | call to to_a [element, element 1] | -| hash_flow.rb:589:9:589:12 | hash [element :c] | hash_flow.rb:589:9:589:17 | call to to_a [element, element 1] | -| hash_flow.rb:589:9:589:17 | call to to_a [element, element 1] | hash_flow.rb:589:5:589:5 | a [element, element 1] | -| hash_flow.rb:591:11:591:11 | a [element, element 1] | hash_flow.rb:591:11:591:14 | ...[...] [element 1] | -| hash_flow.rb:591:11:591:14 | ...[...] [element 1] | hash_flow.rb:591:11:591:17 | ...[...] | -| hash_flow.rb:591:11:591:17 | ...[...] | hash_flow.rb:591:10:591:18 | ( ... ) | -| hash_flow.rb:597:5:597:8 | hash [element :a] | hash_flow.rb:602:9:602:12 | hash [element :a] | -| hash_flow.rb:597:5:597:8 | hash [element :a] | hash_flow.rb:607:9:607:12 | hash [element :a] | -| hash_flow.rb:597:5:597:8 | hash [element :c] | hash_flow.rb:602:9:602:12 | hash [element :c] | -| hash_flow.rb:597:5:597:8 | hash [element :c] | hash_flow.rb:607:9:607:12 | hash [element :c] | -| hash_flow.rb:598:15:598:25 | call to taint | hash_flow.rb:597:5:597:8 | hash [element :a] | -| hash_flow.rb:600:15:600:25 | call to taint | hash_flow.rb:597:5:597:8 | hash [element :c] | -| hash_flow.rb:602:5:602:5 | a [element :a] | hash_flow.rb:603:11:603:11 | a [element :a] | -| hash_flow.rb:602:5:602:5 | a [element :c] | hash_flow.rb:605:11:605:11 | a [element :c] | -| hash_flow.rb:602:9:602:12 | hash [element :a] | hash_flow.rb:602:9:602:17 | call to to_h [element :a] | -| hash_flow.rb:602:9:602:12 | hash [element :c] | hash_flow.rb:602:9:602:17 | call to to_h [element :c] | -| hash_flow.rb:602:9:602:17 | call to to_h [element :a] | hash_flow.rb:602:5:602:5 | a [element :a] | -| hash_flow.rb:602:9:602:17 | call to to_h [element :c] | hash_flow.rb:602:5:602:5 | a [element :c] | -| hash_flow.rb:603:11:603:11 | a [element :a] | hash_flow.rb:603:11:603:15 | ...[...] | -| hash_flow.rb:603:11:603:15 | ...[...] | hash_flow.rb:603:10:603:16 | ( ... ) | -| hash_flow.rb:605:11:605:11 | a [element :c] | hash_flow.rb:605:11:605:15 | ...[...] | -| hash_flow.rb:605:11:605:15 | ...[...] | hash_flow.rb:605:10:605:16 | ( ... ) | -| hash_flow.rb:607:5:607:5 | b [element] | hash_flow.rb:612:11:612:11 | b [element] | -| hash_flow.rb:607:9:607:12 | hash [element :a] | hash_flow.rb:607:28:607:32 | value | -| hash_flow.rb:607:9:607:12 | hash [element :c] | hash_flow.rb:607:28:607:32 | value | -| hash_flow.rb:607:9:611:7 | call to to_h [element] | hash_flow.rb:607:5:607:5 | b [element] | -| hash_flow.rb:607:28:607:32 | value | hash_flow.rb:609:14:609:18 | value | -| hash_flow.rb:610:14:610:24 | call to taint | hash_flow.rb:607:9:611:7 | call to to_h [element] | -| hash_flow.rb:612:11:612:11 | b [element] | hash_flow.rb:612:11:612:15 | ...[...] | -| hash_flow.rb:612:11:612:15 | ...[...] | hash_flow.rb:612:10:612:16 | ( ... ) | -| hash_flow.rb:618:5:618:8 | hash [element :a] | hash_flow.rb:623:9:623:12 | hash [element :a] | -| hash_flow.rb:618:5:618:8 | hash [element :c] | hash_flow.rb:623:9:623:12 | hash [element :c] | -| hash_flow.rb:619:15:619:25 | call to taint | hash_flow.rb:618:5:618:8 | hash [element :a] | -| hash_flow.rb:621:15:621:25 | call to taint | hash_flow.rb:618:5:618:8 | hash [element :c] | -| hash_flow.rb:623:5:623:5 | a [element] | hash_flow.rb:624:11:624:11 | a [element] | -| hash_flow.rb:623:5:623:5 | a [element] | hash_flow.rb:625:11:625:11 | a [element] | -| hash_flow.rb:623:5:623:5 | a [element] | hash_flow.rb:626:11:626:11 | a [element] | -| hash_flow.rb:623:9:623:12 | hash [element :a] | hash_flow.rb:623:9:623:45 | call to transform_keys [element] | -| hash_flow.rb:623:9:623:12 | hash [element :c] | hash_flow.rb:623:9:623:45 | call to transform_keys [element] | -| hash_flow.rb:623:9:623:45 | call to transform_keys [element] | hash_flow.rb:623:5:623:5 | a [element] | -| hash_flow.rb:624:11:624:11 | a [element] | hash_flow.rb:624:11:624:16 | ...[...] | -| hash_flow.rb:624:11:624:16 | ...[...] | hash_flow.rb:624:10:624:17 | ( ... ) | -| hash_flow.rb:625:11:625:11 | a [element] | hash_flow.rb:625:11:625:16 | ...[...] | -| hash_flow.rb:625:11:625:16 | ...[...] | hash_flow.rb:625:10:625:17 | ( ... ) | -| hash_flow.rb:626:11:626:11 | a [element] | hash_flow.rb:626:11:626:16 | ...[...] | -| hash_flow.rb:626:11:626:16 | ...[...] | hash_flow.rb:626:10:626:17 | ( ... ) | -| hash_flow.rb:632:5:632:8 | hash [element :a] | hash_flow.rb:639:5:639:8 | hash [element :a] | -| hash_flow.rb:632:5:632:8 | hash [element :c] | hash_flow.rb:639:5:639:8 | hash [element :c] | -| hash_flow.rb:633:15:633:25 | call to taint | hash_flow.rb:632:5:632:8 | hash [element :a] | -| hash_flow.rb:635:15:635:25 | call to taint | hash_flow.rb:632:5:632:8 | hash [element :c] | -| hash_flow.rb:637:5:637:8 | [post] hash [element] | hash_flow.rb:639:5:639:8 | hash [element] | -| hash_flow.rb:637:5:637:8 | [post] hash [element] | hash_flow.rb:640:11:640:14 | hash [element] | -| hash_flow.rb:637:5:637:8 | [post] hash [element] | hash_flow.rb:641:11:641:14 | hash [element] | -| hash_flow.rb:637:5:637:8 | [post] hash [element] | hash_flow.rb:642:11:642:14 | hash [element] | -| hash_flow.rb:637:15:637:25 | call to taint | hash_flow.rb:637:5:637:8 | [post] hash [element] | -| hash_flow.rb:639:5:639:8 | [post] hash [element] | hash_flow.rb:640:11:640:14 | hash [element] | -| hash_flow.rb:639:5:639:8 | [post] hash [element] | hash_flow.rb:641:11:641:14 | hash [element] | -| hash_flow.rb:639:5:639:8 | [post] hash [element] | hash_flow.rb:642:11:642:14 | hash [element] | -| hash_flow.rb:639:5:639:8 | hash [element :a] | hash_flow.rb:639:5:639:8 | [post] hash [element] | -| hash_flow.rb:639:5:639:8 | hash [element :c] | hash_flow.rb:639:5:639:8 | [post] hash [element] | -| hash_flow.rb:639:5:639:8 | hash [element] | hash_flow.rb:639:5:639:8 | [post] hash [element] | -| hash_flow.rb:640:11:640:14 | hash [element] | hash_flow.rb:640:11:640:19 | ...[...] | -| hash_flow.rb:640:11:640:19 | ...[...] | hash_flow.rb:640:10:640:20 | ( ... ) | -| hash_flow.rb:641:11:641:14 | hash [element] | hash_flow.rb:641:11:641:19 | ...[...] | -| hash_flow.rb:641:11:641:19 | ...[...] | hash_flow.rb:641:10:641:20 | ( ... ) | -| hash_flow.rb:642:11:642:14 | hash [element] | hash_flow.rb:642:11:642:19 | ...[...] | -| hash_flow.rb:642:11:642:19 | ...[...] | hash_flow.rb:642:10:642:20 | ( ... ) | -| hash_flow.rb:648:5:648:8 | hash [element :a] | hash_flow.rb:653:9:653:12 | hash [element :a] | -| hash_flow.rb:648:5:648:8 | hash [element :a] | hash_flow.rb:657:11:657:14 | hash [element :a] | -| hash_flow.rb:648:5:648:8 | hash [element :c] | hash_flow.rb:653:9:653:12 | hash [element :c] | -| hash_flow.rb:649:15:649:25 | call to taint | hash_flow.rb:648:5:648:8 | hash [element :a] | -| hash_flow.rb:651:15:651:25 | call to taint | hash_flow.rb:648:5:648:8 | hash [element :c] | -| hash_flow.rb:653:5:653:5 | b [element] | hash_flow.rb:658:11:658:11 | b [element] | -| hash_flow.rb:653:9:653:12 | hash [element :a] | hash_flow.rb:653:35:653:39 | value | -| hash_flow.rb:653:9:653:12 | hash [element :c] | hash_flow.rb:653:35:653:39 | value | -| hash_flow.rb:653:9:656:7 | call to transform_values [element] | hash_flow.rb:653:5:653:5 | b [element] | -| hash_flow.rb:653:35:653:39 | value | hash_flow.rb:654:14:654:18 | value | -| hash_flow.rb:655:9:655:19 | call to taint | hash_flow.rb:653:9:656:7 | call to transform_values [element] | -| hash_flow.rb:657:11:657:14 | hash [element :a] | hash_flow.rb:657:11:657:18 | ...[...] | -| hash_flow.rb:657:11:657:18 | ...[...] | hash_flow.rb:657:10:657:19 | ( ... ) | -| hash_flow.rb:658:11:658:11 | b [element] | hash_flow.rb:658:11:658:15 | ...[...] | -| hash_flow.rb:658:11:658:15 | ...[...] | hash_flow.rb:658:10:658:16 | ( ... ) | -| hash_flow.rb:664:5:664:8 | hash [element :a] | hash_flow.rb:669:5:669:8 | hash [element :a] | -| hash_flow.rb:664:5:664:8 | hash [element :c] | hash_flow.rb:669:5:669:8 | hash [element :c] | -| hash_flow.rb:665:15:665:25 | call to taint | hash_flow.rb:664:5:664:8 | hash [element :a] | -| hash_flow.rb:667:15:667:25 | call to taint | hash_flow.rb:664:5:664:8 | hash [element :c] | -| hash_flow.rb:669:5:669:8 | [post] hash [element] | hash_flow.rb:673:11:673:14 | hash [element] | -| hash_flow.rb:669:5:669:8 | hash [element :a] | hash_flow.rb:669:32:669:36 | value | -| hash_flow.rb:669:5:669:8 | hash [element :c] | hash_flow.rb:669:32:669:36 | value | -| hash_flow.rb:669:32:669:36 | value | hash_flow.rb:670:14:670:18 | value | -| hash_flow.rb:671:9:671:19 | call to taint | hash_flow.rb:669:5:669:8 | [post] hash [element] | -| hash_flow.rb:673:11:673:14 | hash [element] | hash_flow.rb:673:11:673:18 | ...[...] | -| hash_flow.rb:673:11:673:18 | ...[...] | hash_flow.rb:673:10:673:19 | ( ... ) | -| hash_flow.rb:679:5:679:9 | hash1 [element :a] | hash_flow.rb:689:12:689:16 | hash1 [element :a] | -| hash_flow.rb:679:5:679:9 | hash1 [element :c] | hash_flow.rb:689:12:689:16 | hash1 [element :c] | -| hash_flow.rb:680:15:680:25 | call to taint | hash_flow.rb:679:5:679:9 | hash1 [element :a] | -| hash_flow.rb:682:15:682:25 | call to taint | hash_flow.rb:679:5:679:9 | hash1 [element :c] | -| hash_flow.rb:684:5:684:9 | hash2 [element :d] | hash_flow.rb:689:25:689:29 | hash2 [element :d] | -| hash_flow.rb:684:5:684:9 | hash2 [element :f] | hash_flow.rb:689:25:689:29 | hash2 [element :f] | -| hash_flow.rb:685:15:685:25 | call to taint | hash_flow.rb:684:5:684:9 | hash2 [element :d] | -| hash_flow.rb:687:15:687:25 | call to taint | hash_flow.rb:684:5:684:9 | hash2 [element :f] | -| hash_flow.rb:689:5:689:8 | hash [element :a] | hash_flow.rb:694:11:694:14 | hash [element :a] | -| hash_flow.rb:689:5:689:8 | hash [element :c] | hash_flow.rb:696:11:696:14 | hash [element :c] | -| hash_flow.rb:689:5:689:8 | hash [element :d] | hash_flow.rb:697:11:697:14 | hash [element :d] | -| hash_flow.rb:689:5:689:8 | hash [element :f] | hash_flow.rb:699:11:699:14 | hash [element :f] | -| hash_flow.rb:689:12:689:16 | [post] hash1 [element :a] | hash_flow.rb:701:11:701:15 | hash1 [element :a] | -| hash_flow.rb:689:12:689:16 | [post] hash1 [element :c] | hash_flow.rb:703:11:703:15 | hash1 [element :c] | -| hash_flow.rb:689:12:689:16 | [post] hash1 [element :d] | hash_flow.rb:704:11:704:15 | hash1 [element :d] | -| hash_flow.rb:689:12:689:16 | [post] hash1 [element :f] | hash_flow.rb:706:11:706:15 | hash1 [element :f] | -| hash_flow.rb:689:12:689:16 | hash1 [element :a] | hash_flow.rb:689:12:689:16 | [post] hash1 [element :a] | -| hash_flow.rb:689:12:689:16 | hash1 [element :a] | hash_flow.rb:689:12:693:7 | call to update [element :a] | -| hash_flow.rb:689:12:689:16 | hash1 [element :a] | hash_flow.rb:689:41:689:49 | old_value | -| hash_flow.rb:689:12:689:16 | hash1 [element :a] | hash_flow.rb:689:52:689:60 | new_value | -| hash_flow.rb:689:12:689:16 | hash1 [element :c] | hash_flow.rb:689:12:689:16 | [post] hash1 [element :c] | -| hash_flow.rb:689:12:689:16 | hash1 [element :c] | hash_flow.rb:689:12:693:7 | call to update [element :c] | -| hash_flow.rb:689:12:689:16 | hash1 [element :c] | hash_flow.rb:689:41:689:49 | old_value | -| hash_flow.rb:689:12:689:16 | hash1 [element :c] | hash_flow.rb:689:52:689:60 | new_value | -| hash_flow.rb:689:12:693:7 | call to update [element :a] | hash_flow.rb:689:5:689:8 | hash [element :a] | -| hash_flow.rb:689:12:693:7 | call to update [element :c] | hash_flow.rb:689:5:689:8 | hash [element :c] | -| hash_flow.rb:689:12:693:7 | call to update [element :d] | hash_flow.rb:689:5:689:8 | hash [element :d] | -| hash_flow.rb:689:12:693:7 | call to update [element :f] | hash_flow.rb:689:5:689:8 | hash [element :f] | -| hash_flow.rb:689:25:689:29 | hash2 [element :d] | hash_flow.rb:689:12:689:16 | [post] hash1 [element :d] | -| hash_flow.rb:689:25:689:29 | hash2 [element :d] | hash_flow.rb:689:12:693:7 | call to update [element :d] | -| hash_flow.rb:689:25:689:29 | hash2 [element :d] | hash_flow.rb:689:41:689:49 | old_value | -| hash_flow.rb:689:25:689:29 | hash2 [element :d] | hash_flow.rb:689:52:689:60 | new_value | -| hash_flow.rb:689:25:689:29 | hash2 [element :f] | hash_flow.rb:689:12:689:16 | [post] hash1 [element :f] | -| hash_flow.rb:689:25:689:29 | hash2 [element :f] | hash_flow.rb:689:12:693:7 | call to update [element :f] | -| hash_flow.rb:689:25:689:29 | hash2 [element :f] | hash_flow.rb:689:41:689:49 | old_value | -| hash_flow.rb:689:25:689:29 | hash2 [element :f] | hash_flow.rb:689:52:689:60 | new_value | -| hash_flow.rb:689:41:689:49 | old_value | hash_flow.rb:691:14:691:22 | old_value | -| hash_flow.rb:689:52:689:60 | new_value | hash_flow.rb:692:14:692:22 | new_value | -| hash_flow.rb:694:11:694:14 | hash [element :a] | hash_flow.rb:694:11:694:18 | ...[...] | -| hash_flow.rb:694:11:694:18 | ...[...] | hash_flow.rb:694:10:694:19 | ( ... ) | -| hash_flow.rb:696:11:696:14 | hash [element :c] | hash_flow.rb:696:11:696:18 | ...[...] | -| hash_flow.rb:696:11:696:18 | ...[...] | hash_flow.rb:696:10:696:19 | ( ... ) | -| hash_flow.rb:697:11:697:14 | hash [element :d] | hash_flow.rb:697:11:697:18 | ...[...] | -| hash_flow.rb:697:11:697:18 | ...[...] | hash_flow.rb:697:10:697:19 | ( ... ) | -| hash_flow.rb:699:11:699:14 | hash [element :f] | hash_flow.rb:699:11:699:18 | ...[...] | -| hash_flow.rb:699:11:699:18 | ...[...] | hash_flow.rb:699:10:699:19 | ( ... ) | -| hash_flow.rb:701:11:701:15 | hash1 [element :a] | hash_flow.rb:701:11:701:19 | ...[...] | -| hash_flow.rb:701:11:701:19 | ...[...] | hash_flow.rb:701:10:701:20 | ( ... ) | -| hash_flow.rb:703:11:703:15 | hash1 [element :c] | hash_flow.rb:703:11:703:19 | ...[...] | -| hash_flow.rb:703:11:703:19 | ...[...] | hash_flow.rb:703:10:703:20 | ( ... ) | -| hash_flow.rb:704:11:704:15 | hash1 [element :d] | hash_flow.rb:704:11:704:19 | ...[...] | -| hash_flow.rb:704:11:704:19 | ...[...] | hash_flow.rb:704:10:704:20 | ( ... ) | -| hash_flow.rb:706:11:706:15 | hash1 [element :f] | hash_flow.rb:706:11:706:19 | ...[...] | -| hash_flow.rb:706:11:706:19 | ...[...] | hash_flow.rb:706:10:706:20 | ( ... ) | -| hash_flow.rb:712:5:712:8 | hash [element :a] | hash_flow.rb:717:9:717:12 | hash [element :a] | -| hash_flow.rb:712:5:712:8 | hash [element :c] | hash_flow.rb:717:9:717:12 | hash [element :c] | -| hash_flow.rb:713:15:713:25 | call to taint | hash_flow.rb:712:5:712:8 | hash [element :a] | -| hash_flow.rb:715:15:715:25 | call to taint | hash_flow.rb:712:5:712:8 | hash [element :c] | -| hash_flow.rb:717:5:717:5 | a [element] | hash_flow.rb:718:11:718:11 | a [element] | -| hash_flow.rb:717:9:717:12 | hash [element :a] | hash_flow.rb:717:9:717:19 | call to values [element] | -| hash_flow.rb:717:9:717:12 | hash [element :c] | hash_flow.rb:717:9:717:19 | call to values [element] | -| hash_flow.rb:717:9:717:19 | call to values [element] | hash_flow.rb:717:5:717:5 | a [element] | -| hash_flow.rb:718:11:718:11 | a [element] | hash_flow.rb:718:11:718:14 | ...[...] | -| hash_flow.rb:718:11:718:14 | ...[...] | hash_flow.rb:718:10:718:15 | ( ... ) | -| hash_flow.rb:724:5:724:8 | hash [element :a] | hash_flow.rb:729:9:729:12 | hash [element :a] | -| hash_flow.rb:724:5:724:8 | hash [element :a] | hash_flow.rb:731:9:731:12 | hash [element :a] | -| hash_flow.rb:724:5:724:8 | hash [element :c] | hash_flow.rb:731:9:731:12 | hash [element :c] | -| hash_flow.rb:725:15:725:25 | call to taint | hash_flow.rb:724:5:724:8 | hash [element :a] | -| hash_flow.rb:727:15:727:25 | call to taint | hash_flow.rb:724:5:724:8 | hash [element :c] | -| hash_flow.rb:729:5:729:5 | b [element 0] | hash_flow.rb:730:10:730:10 | b [element 0] | -| hash_flow.rb:729:9:729:12 | hash [element :a] | hash_flow.rb:729:9:729:26 | call to values_at [element 0] | -| hash_flow.rb:729:9:729:26 | call to values_at [element 0] | hash_flow.rb:729:5:729:5 | b [element 0] | -| hash_flow.rb:730:10:730:10 | b [element 0] | hash_flow.rb:730:10:730:13 | ...[...] | -| hash_flow.rb:731:5:731:5 | b [element] | hash_flow.rb:732:10:732:10 | b [element] | -| hash_flow.rb:731:9:731:12 | hash [element :a] | hash_flow.rb:731:9:731:31 | call to fetch_values [element] | -| hash_flow.rb:731:9:731:12 | hash [element :c] | hash_flow.rb:731:9:731:31 | call to fetch_values [element] | -| hash_flow.rb:731:9:731:31 | call to fetch_values [element] | hash_flow.rb:731:5:731:5 | b [element] | -| hash_flow.rb:732:10:732:10 | b [element] | hash_flow.rb:732:10:732:13 | ...[...] | -| hash_flow.rb:738:5:738:9 | hash1 [element :a] | hash_flow.rb:748:16:748:20 | hash1 [element :a] | -| hash_flow.rb:738:5:738:9 | hash1 [element :c] | hash_flow.rb:748:16:748:20 | hash1 [element :c] | -| hash_flow.rb:739:15:739:25 | call to taint | hash_flow.rb:738:5:738:9 | hash1 [element :a] | -| hash_flow.rb:741:15:741:25 | call to taint | hash_flow.rb:738:5:738:9 | hash1 [element :c] | -| hash_flow.rb:743:5:743:9 | hash2 [element :d] | hash_flow.rb:748:44:748:48 | hash2 [element :d] | -| hash_flow.rb:743:5:743:9 | hash2 [element :f] | hash_flow.rb:748:44:748:48 | hash2 [element :f] | -| hash_flow.rb:744:15:744:25 | call to taint | hash_flow.rb:743:5:743:9 | hash2 [element :d] | -| hash_flow.rb:746:15:746:25 | call to taint | hash_flow.rb:743:5:743:9 | hash2 [element :f] | -| hash_flow.rb:748:5:748:8 | hash [element :a] | hash_flow.rb:749:10:749:13 | hash [element :a] | -| hash_flow.rb:748:5:748:8 | hash [element :c] | hash_flow.rb:751:10:751:13 | hash [element :c] | -| hash_flow.rb:748:5:748:8 | hash [element :d] | hash_flow.rb:752:10:752:13 | hash [element :d] | -| hash_flow.rb:748:5:748:8 | hash [element :f] | hash_flow.rb:754:10:754:13 | hash [element :f] | -| hash_flow.rb:748:5:748:8 | hash [element :g] | hash_flow.rb:755:10:755:13 | hash [element :g] | -| hash_flow.rb:748:14:748:20 | ** ... [element :a] | hash_flow.rb:748:5:748:8 | hash [element :a] | -| hash_flow.rb:748:14:748:20 | ** ... [element :c] | hash_flow.rb:748:5:748:8 | hash [element :c] | -| hash_flow.rb:748:16:748:20 | hash1 [element :a] | hash_flow.rb:748:14:748:20 | ** ... [element :a] | -| hash_flow.rb:748:16:748:20 | hash1 [element :c] | hash_flow.rb:748:14:748:20 | ** ... [element :c] | -| hash_flow.rb:748:29:748:39 | call to taint | hash_flow.rb:748:5:748:8 | hash [element :g] | -| hash_flow.rb:748:42:748:48 | ** ... [element :d] | hash_flow.rb:748:5:748:8 | hash [element :d] | -| hash_flow.rb:748:42:748:48 | ** ... [element :f] | hash_flow.rb:748:5:748:8 | hash [element :f] | -| hash_flow.rb:748:44:748:48 | hash2 [element :d] | hash_flow.rb:748:42:748:48 | ** ... [element :d] | -| hash_flow.rb:748:44:748:48 | hash2 [element :f] | hash_flow.rb:748:42:748:48 | ** ... [element :f] | -| hash_flow.rb:749:10:749:13 | hash [element :a] | hash_flow.rb:749:10:749:17 | ...[...] | -| hash_flow.rb:751:10:751:13 | hash [element :c] | hash_flow.rb:751:10:751:17 | ...[...] | -| hash_flow.rb:752:10:752:13 | hash [element :d] | hash_flow.rb:752:10:752:17 | ...[...] | -| hash_flow.rb:754:10:754:13 | hash [element :f] | hash_flow.rb:754:10:754:17 | ...[...] | -| hash_flow.rb:755:10:755:13 | hash [element :g] | hash_flow.rb:755:10:755:17 | ...[...] | -| hash_flow.rb:762:5:762:8 | hash [element :a] | hash_flow.rb:769:10:769:13 | hash [element :a] | -| hash_flow.rb:762:5:762:8 | hash [element :c] | hash_flow.rb:771:10:771:13 | hash [element :c] | -| hash_flow.rb:762:5:762:8 | hash [element :c] | hash_flow.rb:774:9:774:12 | hash [element :c] | -| hash_flow.rb:762:5:762:8 | hash [element :d] | hash_flow.rb:772:10:772:13 | hash [element :d] | -| hash_flow.rb:763:15:763:25 | call to taint | hash_flow.rb:762:5:762:8 | hash [element :a] | -| hash_flow.rb:765:15:765:25 | call to taint | hash_flow.rb:762:5:762:8 | hash [element :c] | -| hash_flow.rb:766:15:766:25 | call to taint | hash_flow.rb:762:5:762:8 | hash [element :d] | -| hash_flow.rb:769:10:769:13 | hash [element :a] | hash_flow.rb:769:10:769:17 | ...[...] | -| hash_flow.rb:771:10:771:13 | hash [element :c] | hash_flow.rb:771:10:771:17 | ...[...] | -| hash_flow.rb:772:10:772:13 | hash [element :d] | hash_flow.rb:772:10:772:17 | ...[...] | -| hash_flow.rb:774:5:774:5 | x [element :c] | hash_flow.rb:778:10:778:10 | x [element :c] | -| hash_flow.rb:774:9:774:12 | [post] hash [element :c] | hash_flow.rb:783:10:783:13 | hash [element :c] | -| hash_flow.rb:774:9:774:12 | hash [element :c] | hash_flow.rb:774:9:774:12 | [post] hash [element :c] | -| hash_flow.rb:774:9:774:12 | hash [element :c] | hash_flow.rb:774:9:774:31 | call to except! [element :c] | -| hash_flow.rb:774:9:774:31 | call to except! [element :c] | hash_flow.rb:774:5:774:5 | x [element :c] | -| hash_flow.rb:778:10:778:10 | x [element :c] | hash_flow.rb:778:10:778:14 | ...[...] | -| hash_flow.rb:783:10:783:13 | hash [element :c] | hash_flow.rb:783:10:783:17 | ...[...] | -| hash_flow.rb:790:5:790:9 | hash1 [element :a] | hash_flow.rb:800:12:800:16 | hash1 [element :a] | -| hash_flow.rb:790:5:790:9 | hash1 [element :c] | hash_flow.rb:800:12:800:16 | hash1 [element :c] | -| hash_flow.rb:791:15:791:25 | call to taint | hash_flow.rb:790:5:790:9 | hash1 [element :a] | -| hash_flow.rb:793:15:793:25 | call to taint | hash_flow.rb:790:5:790:9 | hash1 [element :c] | -| hash_flow.rb:795:5:795:9 | hash2 [element :d] | hash_flow.rb:800:29:800:33 | hash2 [element :d] | -| hash_flow.rb:795:5:795:9 | hash2 [element :f] | hash_flow.rb:800:29:800:33 | hash2 [element :f] | -| hash_flow.rb:796:15:796:25 | call to taint | hash_flow.rb:795:5:795:9 | hash2 [element :d] | -| hash_flow.rb:798:15:798:25 | call to taint | hash_flow.rb:795:5:795:9 | hash2 [element :f] | -| hash_flow.rb:800:5:800:8 | hash [element :a] | hash_flow.rb:805:11:805:14 | hash [element :a] | -| hash_flow.rb:800:5:800:8 | hash [element :c] | hash_flow.rb:807:11:807:14 | hash [element :c] | -| hash_flow.rb:800:5:800:8 | hash [element :d] | hash_flow.rb:808:11:808:14 | hash [element :d] | -| hash_flow.rb:800:5:800:8 | hash [element :f] | hash_flow.rb:810:11:810:14 | hash [element :f] | -| hash_flow.rb:800:12:800:16 | hash1 [element :a] | hash_flow.rb:800:12:804:7 | call to deep_merge [element :a] | -| hash_flow.rb:800:12:800:16 | hash1 [element :a] | hash_flow.rb:800:45:800:53 | old_value | -| hash_flow.rb:800:12:800:16 | hash1 [element :a] | hash_flow.rb:800:56:800:64 | new_value | -| hash_flow.rb:800:12:800:16 | hash1 [element :c] | hash_flow.rb:800:12:804:7 | call to deep_merge [element :c] | -| hash_flow.rb:800:12:800:16 | hash1 [element :c] | hash_flow.rb:800:45:800:53 | old_value | -| hash_flow.rb:800:12:800:16 | hash1 [element :c] | hash_flow.rb:800:56:800:64 | new_value | -| hash_flow.rb:800:12:804:7 | call to deep_merge [element :a] | hash_flow.rb:800:5:800:8 | hash [element :a] | -| hash_flow.rb:800:12:804:7 | call to deep_merge [element :c] | hash_flow.rb:800:5:800:8 | hash [element :c] | -| hash_flow.rb:800:12:804:7 | call to deep_merge [element :d] | hash_flow.rb:800:5:800:8 | hash [element :d] | -| hash_flow.rb:800:12:804:7 | call to deep_merge [element :f] | hash_flow.rb:800:5:800:8 | hash [element :f] | -| hash_flow.rb:800:29:800:33 | hash2 [element :d] | hash_flow.rb:800:12:804:7 | call to deep_merge [element :d] | -| hash_flow.rb:800:29:800:33 | hash2 [element :d] | hash_flow.rb:800:45:800:53 | old_value | -| hash_flow.rb:800:29:800:33 | hash2 [element :d] | hash_flow.rb:800:56:800:64 | new_value | -| hash_flow.rb:800:29:800:33 | hash2 [element :f] | hash_flow.rb:800:12:804:7 | call to deep_merge [element :f] | -| hash_flow.rb:800:29:800:33 | hash2 [element :f] | hash_flow.rb:800:45:800:53 | old_value | -| hash_flow.rb:800:29:800:33 | hash2 [element :f] | hash_flow.rb:800:56:800:64 | new_value | -| hash_flow.rb:800:45:800:53 | old_value | hash_flow.rb:802:14:802:22 | old_value | -| hash_flow.rb:800:56:800:64 | new_value | hash_flow.rb:803:14:803:22 | new_value | -| hash_flow.rb:805:11:805:14 | hash [element :a] | hash_flow.rb:805:11:805:18 | ...[...] | -| hash_flow.rb:805:11:805:18 | ...[...] | hash_flow.rb:805:10:805:19 | ( ... ) | -| hash_flow.rb:807:11:807:14 | hash [element :c] | hash_flow.rb:807:11:807:18 | ...[...] | -| hash_flow.rb:807:11:807:18 | ...[...] | hash_flow.rb:807:10:807:19 | ( ... ) | -| hash_flow.rb:808:11:808:14 | hash [element :d] | hash_flow.rb:808:11:808:18 | ...[...] | -| hash_flow.rb:808:11:808:18 | ...[...] | hash_flow.rb:808:10:808:19 | ( ... ) | -| hash_flow.rb:810:11:810:14 | hash [element :f] | hash_flow.rb:810:11:810:18 | ...[...] | -| hash_flow.rb:810:11:810:18 | ...[...] | hash_flow.rb:810:10:810:19 | ( ... ) | -| hash_flow.rb:816:5:816:9 | hash1 [element :a] | hash_flow.rb:826:12:826:16 | hash1 [element :a] | -| hash_flow.rb:816:5:816:9 | hash1 [element :c] | hash_flow.rb:826:12:826:16 | hash1 [element :c] | -| hash_flow.rb:817:15:817:25 | call to taint | hash_flow.rb:816:5:816:9 | hash1 [element :a] | -| hash_flow.rb:819:15:819:25 | call to taint | hash_flow.rb:816:5:816:9 | hash1 [element :c] | -| hash_flow.rb:821:5:821:9 | hash2 [element :d] | hash_flow.rb:826:30:826:34 | hash2 [element :d] | -| hash_flow.rb:821:5:821:9 | hash2 [element :f] | hash_flow.rb:826:30:826:34 | hash2 [element :f] | -| hash_flow.rb:822:15:822:25 | call to taint | hash_flow.rb:821:5:821:9 | hash2 [element :d] | -| hash_flow.rb:824:15:824:25 | call to taint | hash_flow.rb:821:5:821:9 | hash2 [element :f] | -| hash_flow.rb:826:5:826:8 | hash [element :a] | hash_flow.rb:831:11:831:14 | hash [element :a] | -| hash_flow.rb:826:5:826:8 | hash [element :c] | hash_flow.rb:833:11:833:14 | hash [element :c] | -| hash_flow.rb:826:5:826:8 | hash [element :d] | hash_flow.rb:834:11:834:14 | hash [element :d] | -| hash_flow.rb:826:5:826:8 | hash [element :f] | hash_flow.rb:836:11:836:14 | hash [element :f] | -| hash_flow.rb:826:12:826:16 | [post] hash1 [element :a] | hash_flow.rb:838:11:838:15 | hash1 [element :a] | -| hash_flow.rb:826:12:826:16 | [post] hash1 [element :c] | hash_flow.rb:840:11:840:15 | hash1 [element :c] | -| hash_flow.rb:826:12:826:16 | [post] hash1 [element :d] | hash_flow.rb:841:11:841:15 | hash1 [element :d] | -| hash_flow.rb:826:12:826:16 | [post] hash1 [element :f] | hash_flow.rb:843:11:843:15 | hash1 [element :f] | -| hash_flow.rb:826:12:826:16 | hash1 [element :a] | hash_flow.rb:826:12:826:16 | [post] hash1 [element :a] | -| hash_flow.rb:826:12:826:16 | hash1 [element :a] | hash_flow.rb:826:12:830:7 | call to deep_merge! [element :a] | -| hash_flow.rb:826:12:826:16 | hash1 [element :a] | hash_flow.rb:826:46:826:54 | old_value | -| hash_flow.rb:826:12:826:16 | hash1 [element :a] | hash_flow.rb:826:57:826:65 | new_value | -| hash_flow.rb:826:12:826:16 | hash1 [element :c] | hash_flow.rb:826:12:826:16 | [post] hash1 [element :c] | -| hash_flow.rb:826:12:826:16 | hash1 [element :c] | hash_flow.rb:826:12:830:7 | call to deep_merge! [element :c] | -| hash_flow.rb:826:12:826:16 | hash1 [element :c] | hash_flow.rb:826:46:826:54 | old_value | -| hash_flow.rb:826:12:826:16 | hash1 [element :c] | hash_flow.rb:826:57:826:65 | new_value | -| hash_flow.rb:826:12:830:7 | call to deep_merge! [element :a] | hash_flow.rb:826:5:826:8 | hash [element :a] | -| hash_flow.rb:826:12:830:7 | call to deep_merge! [element :c] | hash_flow.rb:826:5:826:8 | hash [element :c] | -| hash_flow.rb:826:12:830:7 | call to deep_merge! [element :d] | hash_flow.rb:826:5:826:8 | hash [element :d] | -| hash_flow.rb:826:12:830:7 | call to deep_merge! [element :f] | hash_flow.rb:826:5:826:8 | hash [element :f] | -| hash_flow.rb:826:30:826:34 | hash2 [element :d] | hash_flow.rb:826:12:826:16 | [post] hash1 [element :d] | -| hash_flow.rb:826:30:826:34 | hash2 [element :d] | hash_flow.rb:826:12:830:7 | call to deep_merge! [element :d] | -| hash_flow.rb:826:30:826:34 | hash2 [element :d] | hash_flow.rb:826:46:826:54 | old_value | -| hash_flow.rb:826:30:826:34 | hash2 [element :d] | hash_flow.rb:826:57:826:65 | new_value | -| hash_flow.rb:826:30:826:34 | hash2 [element :f] | hash_flow.rb:826:12:826:16 | [post] hash1 [element :f] | -| hash_flow.rb:826:30:826:34 | hash2 [element :f] | hash_flow.rb:826:12:830:7 | call to deep_merge! [element :f] | -| hash_flow.rb:826:30:826:34 | hash2 [element :f] | hash_flow.rb:826:46:826:54 | old_value | -| hash_flow.rb:826:30:826:34 | hash2 [element :f] | hash_flow.rb:826:57:826:65 | new_value | -| hash_flow.rb:826:46:826:54 | old_value | hash_flow.rb:828:14:828:22 | old_value | -| hash_flow.rb:826:57:826:65 | new_value | hash_flow.rb:829:14:829:22 | new_value | -| hash_flow.rb:831:11:831:14 | hash [element :a] | hash_flow.rb:831:11:831:18 | ...[...] | -| hash_flow.rb:831:11:831:18 | ...[...] | hash_flow.rb:831:10:831:19 | ( ... ) | -| hash_flow.rb:833:11:833:14 | hash [element :c] | hash_flow.rb:833:11:833:18 | ...[...] | -| hash_flow.rb:833:11:833:18 | ...[...] | hash_flow.rb:833:10:833:19 | ( ... ) | -| hash_flow.rb:834:11:834:14 | hash [element :d] | hash_flow.rb:834:11:834:18 | ...[...] | -| hash_flow.rb:834:11:834:18 | ...[...] | hash_flow.rb:834:10:834:19 | ( ... ) | -| hash_flow.rb:836:11:836:14 | hash [element :f] | hash_flow.rb:836:11:836:18 | ...[...] | -| hash_flow.rb:836:11:836:18 | ...[...] | hash_flow.rb:836:10:836:19 | ( ... ) | -| hash_flow.rb:838:11:838:15 | hash1 [element :a] | hash_flow.rb:838:11:838:19 | ...[...] | -| hash_flow.rb:838:11:838:19 | ...[...] | hash_flow.rb:838:10:838:20 | ( ... ) | -| hash_flow.rb:840:11:840:15 | hash1 [element :c] | hash_flow.rb:840:11:840:19 | ...[...] | -| hash_flow.rb:840:11:840:19 | ...[...] | hash_flow.rb:840:10:840:20 | ( ... ) | -| hash_flow.rb:841:11:841:15 | hash1 [element :d] | hash_flow.rb:841:11:841:19 | ...[...] | -| hash_flow.rb:841:11:841:19 | ...[...] | hash_flow.rb:841:10:841:20 | ( ... ) | -| hash_flow.rb:843:11:843:15 | hash1 [element :f] | hash_flow.rb:843:11:843:19 | ...[...] | -| hash_flow.rb:843:11:843:19 | ...[...] | hash_flow.rb:843:10:843:20 | ( ... ) | -| hash_flow.rb:849:5:849:9 | hash1 [element :a] | hash_flow.rb:860:13:860:17 | hash1 [element :a] | -| hash_flow.rb:849:5:849:9 | hash1 [element :a] | hash_flow.rb:869:13:869:17 | hash1 [element :a] | -| hash_flow.rb:849:5:849:9 | hash1 [element :c] | hash_flow.rb:860:13:860:17 | hash1 [element :c] | -| hash_flow.rb:849:5:849:9 | hash1 [element :c] | hash_flow.rb:869:13:869:17 | hash1 [element :c] | -| hash_flow.rb:850:12:850:22 | call to taint | hash_flow.rb:849:5:849:9 | hash1 [element :a] | -| hash_flow.rb:852:12:852:22 | call to taint | hash_flow.rb:849:5:849:9 | hash1 [element :c] | -| hash_flow.rb:854:5:854:9 | hash2 [element :d] | hash_flow.rb:860:33:860:37 | hash2 [element :d] | -| hash_flow.rb:854:5:854:9 | hash2 [element :d] | hash_flow.rb:869:33:869:37 | hash2 [element :d] | -| hash_flow.rb:854:5:854:9 | hash2 [element :f] | hash_flow.rb:860:33:860:37 | hash2 [element :f] | -| hash_flow.rb:854:5:854:9 | hash2 [element :f] | hash_flow.rb:869:33:869:37 | hash2 [element :f] | -| hash_flow.rb:855:12:855:22 | call to taint | hash_flow.rb:854:5:854:9 | hash2 [element :d] | -| hash_flow.rb:857:12:857:22 | call to taint | hash_flow.rb:854:5:854:9 | hash2 [element :f] | -| hash_flow.rb:860:5:860:9 | hash3 [element :a] | hash_flow.rb:861:11:861:15 | hash3 [element :a] | -| hash_flow.rb:860:5:860:9 | hash3 [element :c] | hash_flow.rb:863:11:863:15 | hash3 [element :c] | -| hash_flow.rb:860:5:860:9 | hash3 [element :d] | hash_flow.rb:864:11:864:15 | hash3 [element :d] | -| hash_flow.rb:860:5:860:9 | hash3 [element :f] | hash_flow.rb:866:11:866:15 | hash3 [element :f] | -| hash_flow.rb:860:13:860:17 | hash1 [element :a] | hash_flow.rb:860:13:860:38 | call to reverse_merge [element :a] | -| hash_flow.rb:860:13:860:17 | hash1 [element :c] | hash_flow.rb:860:13:860:38 | call to reverse_merge [element :c] | -| hash_flow.rb:860:13:860:38 | call to reverse_merge [element :a] | hash_flow.rb:860:5:860:9 | hash3 [element :a] | -| hash_flow.rb:860:13:860:38 | call to reverse_merge [element :c] | hash_flow.rb:860:5:860:9 | hash3 [element :c] | -| hash_flow.rb:860:13:860:38 | call to reverse_merge [element :d] | hash_flow.rb:860:5:860:9 | hash3 [element :d] | -| hash_flow.rb:860:13:860:38 | call to reverse_merge [element :f] | hash_flow.rb:860:5:860:9 | hash3 [element :f] | -| hash_flow.rb:860:33:860:37 | hash2 [element :d] | hash_flow.rb:860:13:860:38 | call to reverse_merge [element :d] | -| hash_flow.rb:860:33:860:37 | hash2 [element :f] | hash_flow.rb:860:13:860:38 | call to reverse_merge [element :f] | -| hash_flow.rb:861:11:861:15 | hash3 [element :a] | hash_flow.rb:861:11:861:19 | ...[...] | -| hash_flow.rb:861:11:861:19 | ...[...] | hash_flow.rb:861:10:861:20 | ( ... ) | -| hash_flow.rb:863:11:863:15 | hash3 [element :c] | hash_flow.rb:863:11:863:19 | ...[...] | -| hash_flow.rb:863:11:863:19 | ...[...] | hash_flow.rb:863:10:863:20 | ( ... ) | -| hash_flow.rb:864:11:864:15 | hash3 [element :d] | hash_flow.rb:864:11:864:19 | ...[...] | -| hash_flow.rb:864:11:864:19 | ...[...] | hash_flow.rb:864:10:864:20 | ( ... ) | -| hash_flow.rb:866:11:866:15 | hash3 [element :f] | hash_flow.rb:866:11:866:19 | ...[...] | -| hash_flow.rb:866:11:866:19 | ...[...] | hash_flow.rb:866:10:866:20 | ( ... ) | -| hash_flow.rb:869:5:869:9 | hash4 [element :a] | hash_flow.rb:870:11:870:15 | hash4 [element :a] | -| hash_flow.rb:869:5:869:9 | hash4 [element :c] | hash_flow.rb:872:11:872:15 | hash4 [element :c] | -| hash_flow.rb:869:5:869:9 | hash4 [element :d] | hash_flow.rb:873:11:873:15 | hash4 [element :d] | -| hash_flow.rb:869:5:869:9 | hash4 [element :f] | hash_flow.rb:875:11:875:15 | hash4 [element :f] | -| hash_flow.rb:869:13:869:17 | hash1 [element :a] | hash_flow.rb:869:13:869:38 | call to with_defaults [element :a] | -| hash_flow.rb:869:13:869:17 | hash1 [element :c] | hash_flow.rb:869:13:869:38 | call to with_defaults [element :c] | -| hash_flow.rb:869:13:869:38 | call to with_defaults [element :a] | hash_flow.rb:869:5:869:9 | hash4 [element :a] | -| hash_flow.rb:869:13:869:38 | call to with_defaults [element :c] | hash_flow.rb:869:5:869:9 | hash4 [element :c] | -| hash_flow.rb:869:13:869:38 | call to with_defaults [element :d] | hash_flow.rb:869:5:869:9 | hash4 [element :d] | -| hash_flow.rb:869:13:869:38 | call to with_defaults [element :f] | hash_flow.rb:869:5:869:9 | hash4 [element :f] | -| hash_flow.rb:869:33:869:37 | hash2 [element :d] | hash_flow.rb:869:13:869:38 | call to with_defaults [element :d] | -| hash_flow.rb:869:33:869:37 | hash2 [element :f] | hash_flow.rb:869:13:869:38 | call to with_defaults [element :f] | -| hash_flow.rb:870:11:870:15 | hash4 [element :a] | hash_flow.rb:870:11:870:19 | ...[...] | -| hash_flow.rb:870:11:870:19 | ...[...] | hash_flow.rb:870:10:870:20 | ( ... ) | -| hash_flow.rb:872:11:872:15 | hash4 [element :c] | hash_flow.rb:872:11:872:19 | ...[...] | -| hash_flow.rb:872:11:872:19 | ...[...] | hash_flow.rb:872:10:872:20 | ( ... ) | -| hash_flow.rb:873:11:873:15 | hash4 [element :d] | hash_flow.rb:873:11:873:19 | ...[...] | -| hash_flow.rb:873:11:873:19 | ...[...] | hash_flow.rb:873:10:873:20 | ( ... ) | -| hash_flow.rb:875:11:875:15 | hash4 [element :f] | hash_flow.rb:875:11:875:19 | ...[...] | -| hash_flow.rb:875:11:875:19 | ...[...] | hash_flow.rb:875:10:875:20 | ( ... ) | -| hash_flow.rb:881:5:881:9 | hash1 [element :a] | hash_flow.rb:892:12:892:16 | hash1 [element :a] | -| hash_flow.rb:881:5:881:9 | hash1 [element :c] | hash_flow.rb:892:12:892:16 | hash1 [element :c] | -| hash_flow.rb:882:12:882:22 | call to taint | hash_flow.rb:881:5:881:9 | hash1 [element :a] | -| hash_flow.rb:884:12:884:22 | call to taint | hash_flow.rb:881:5:881:9 | hash1 [element :c] | -| hash_flow.rb:886:5:886:9 | hash2 [element :d] | hash_flow.rb:892:33:892:37 | hash2 [element :d] | -| hash_flow.rb:886:5:886:9 | hash2 [element :f] | hash_flow.rb:892:33:892:37 | hash2 [element :f] | -| hash_flow.rb:887:12:887:22 | call to taint | hash_flow.rb:886:5:886:9 | hash2 [element :d] | -| hash_flow.rb:889:12:889:22 | call to taint | hash_flow.rb:886:5:886:9 | hash2 [element :f] | -| hash_flow.rb:892:5:892:8 | hash [element :a] | hash_flow.rb:893:11:893:14 | hash [element :a] | -| hash_flow.rb:892:5:892:8 | hash [element :c] | hash_flow.rb:895:11:895:14 | hash [element :c] | -| hash_flow.rb:892:5:892:8 | hash [element :d] | hash_flow.rb:896:11:896:14 | hash [element :d] | -| hash_flow.rb:892:5:892:8 | hash [element :f] | hash_flow.rb:898:11:898:14 | hash [element :f] | -| hash_flow.rb:892:12:892:16 | [post] hash1 [element :a] | hash_flow.rb:900:11:900:15 | hash1 [element :a] | -| hash_flow.rb:892:12:892:16 | [post] hash1 [element :c] | hash_flow.rb:902:11:902:15 | hash1 [element :c] | -| hash_flow.rb:892:12:892:16 | [post] hash1 [element :d] | hash_flow.rb:903:11:903:15 | hash1 [element :d] | -| hash_flow.rb:892:12:892:16 | [post] hash1 [element :f] | hash_flow.rb:905:11:905:15 | hash1 [element :f] | -| hash_flow.rb:892:12:892:16 | hash1 [element :a] | hash_flow.rb:892:12:892:16 | [post] hash1 [element :a] | -| hash_flow.rb:892:12:892:16 | hash1 [element :a] | hash_flow.rb:892:12:892:38 | call to reverse_merge! [element :a] | -| hash_flow.rb:892:12:892:16 | hash1 [element :c] | hash_flow.rb:892:12:892:16 | [post] hash1 [element :c] | -| hash_flow.rb:892:12:892:16 | hash1 [element :c] | hash_flow.rb:892:12:892:38 | call to reverse_merge! [element :c] | -| hash_flow.rb:892:12:892:38 | call to reverse_merge! [element :a] | hash_flow.rb:892:5:892:8 | hash [element :a] | -| hash_flow.rb:892:12:892:38 | call to reverse_merge! [element :c] | hash_flow.rb:892:5:892:8 | hash [element :c] | -| hash_flow.rb:892:12:892:38 | call to reverse_merge! [element :d] | hash_flow.rb:892:5:892:8 | hash [element :d] | -| hash_flow.rb:892:12:892:38 | call to reverse_merge! [element :f] | hash_flow.rb:892:5:892:8 | hash [element :f] | -| hash_flow.rb:892:33:892:37 | hash2 [element :d] | hash_flow.rb:892:12:892:16 | [post] hash1 [element :d] | -| hash_flow.rb:892:33:892:37 | hash2 [element :d] | hash_flow.rb:892:12:892:38 | call to reverse_merge! [element :d] | -| hash_flow.rb:892:33:892:37 | hash2 [element :f] | hash_flow.rb:892:12:892:16 | [post] hash1 [element :f] | -| hash_flow.rb:892:33:892:37 | hash2 [element :f] | hash_flow.rb:892:12:892:38 | call to reverse_merge! [element :f] | -| hash_flow.rb:893:11:893:14 | hash [element :a] | hash_flow.rb:893:11:893:18 | ...[...] | -| hash_flow.rb:893:11:893:18 | ...[...] | hash_flow.rb:893:10:893:19 | ( ... ) | -| hash_flow.rb:895:11:895:14 | hash [element :c] | hash_flow.rb:895:11:895:18 | ...[...] | -| hash_flow.rb:895:11:895:18 | ...[...] | hash_flow.rb:895:10:895:19 | ( ... ) | -| hash_flow.rb:896:11:896:14 | hash [element :d] | hash_flow.rb:896:11:896:18 | ...[...] | -| hash_flow.rb:896:11:896:18 | ...[...] | hash_flow.rb:896:10:896:19 | ( ... ) | -| hash_flow.rb:898:11:898:14 | hash [element :f] | hash_flow.rb:898:11:898:18 | ...[...] | -| hash_flow.rb:898:11:898:18 | ...[...] | hash_flow.rb:898:10:898:19 | ( ... ) | -| hash_flow.rb:900:11:900:15 | hash1 [element :a] | hash_flow.rb:900:11:900:19 | ...[...] | -| hash_flow.rb:900:11:900:19 | ...[...] | hash_flow.rb:900:10:900:20 | ( ... ) | -| hash_flow.rb:902:11:902:15 | hash1 [element :c] | hash_flow.rb:902:11:902:19 | ...[...] | -| hash_flow.rb:902:11:902:19 | ...[...] | hash_flow.rb:902:10:902:20 | ( ... ) | -| hash_flow.rb:903:11:903:15 | hash1 [element :d] | hash_flow.rb:903:11:903:19 | ...[...] | -| hash_flow.rb:903:11:903:19 | ...[...] | hash_flow.rb:903:10:903:20 | ( ... ) | -| hash_flow.rb:905:11:905:15 | hash1 [element :f] | hash_flow.rb:905:11:905:19 | ...[...] | -| hash_flow.rb:905:11:905:19 | ...[...] | hash_flow.rb:905:10:905:20 | ( ... ) | -| hash_flow.rb:911:5:911:9 | hash1 [element :a] | hash_flow.rb:922:12:922:16 | hash1 [element :a] | -| hash_flow.rb:911:5:911:9 | hash1 [element :c] | hash_flow.rb:922:12:922:16 | hash1 [element :c] | -| hash_flow.rb:912:12:912:22 | call to taint | hash_flow.rb:911:5:911:9 | hash1 [element :a] | -| hash_flow.rb:914:12:914:22 | call to taint | hash_flow.rb:911:5:911:9 | hash1 [element :c] | -| hash_flow.rb:916:5:916:9 | hash2 [element :d] | hash_flow.rb:922:33:922:37 | hash2 [element :d] | -| hash_flow.rb:916:5:916:9 | hash2 [element :f] | hash_flow.rb:922:33:922:37 | hash2 [element :f] | -| hash_flow.rb:917:12:917:22 | call to taint | hash_flow.rb:916:5:916:9 | hash2 [element :d] | -| hash_flow.rb:919:12:919:22 | call to taint | hash_flow.rb:916:5:916:9 | hash2 [element :f] | -| hash_flow.rb:922:5:922:8 | hash [element :a] | hash_flow.rb:923:11:923:14 | hash [element :a] | -| hash_flow.rb:922:5:922:8 | hash [element :c] | hash_flow.rb:925:11:925:14 | hash [element :c] | -| hash_flow.rb:922:5:922:8 | hash [element :d] | hash_flow.rb:926:11:926:14 | hash [element :d] | -| hash_flow.rb:922:5:922:8 | hash [element :f] | hash_flow.rb:928:11:928:14 | hash [element :f] | -| hash_flow.rb:922:12:922:16 | [post] hash1 [element :a] | hash_flow.rb:930:11:930:15 | hash1 [element :a] | -| hash_flow.rb:922:12:922:16 | [post] hash1 [element :c] | hash_flow.rb:932:11:932:15 | hash1 [element :c] | -| hash_flow.rb:922:12:922:16 | [post] hash1 [element :d] | hash_flow.rb:933:11:933:15 | hash1 [element :d] | -| hash_flow.rb:922:12:922:16 | [post] hash1 [element :f] | hash_flow.rb:935:11:935:15 | hash1 [element :f] | -| hash_flow.rb:922:12:922:16 | hash1 [element :a] | hash_flow.rb:922:12:922:16 | [post] hash1 [element :a] | -| hash_flow.rb:922:12:922:16 | hash1 [element :a] | hash_flow.rb:922:12:922:38 | call to with_defaults! [element :a] | -| hash_flow.rb:922:12:922:16 | hash1 [element :c] | hash_flow.rb:922:12:922:16 | [post] hash1 [element :c] | -| hash_flow.rb:922:12:922:16 | hash1 [element :c] | hash_flow.rb:922:12:922:38 | call to with_defaults! [element :c] | -| hash_flow.rb:922:12:922:38 | call to with_defaults! [element :a] | hash_flow.rb:922:5:922:8 | hash [element :a] | -| hash_flow.rb:922:12:922:38 | call to with_defaults! [element :c] | hash_flow.rb:922:5:922:8 | hash [element :c] | -| hash_flow.rb:922:12:922:38 | call to with_defaults! [element :d] | hash_flow.rb:922:5:922:8 | hash [element :d] | -| hash_flow.rb:922:12:922:38 | call to with_defaults! [element :f] | hash_flow.rb:922:5:922:8 | hash [element :f] | -| hash_flow.rb:922:33:922:37 | hash2 [element :d] | hash_flow.rb:922:12:922:16 | [post] hash1 [element :d] | -| hash_flow.rb:922:33:922:37 | hash2 [element :d] | hash_flow.rb:922:12:922:38 | call to with_defaults! [element :d] | -| hash_flow.rb:922:33:922:37 | hash2 [element :f] | hash_flow.rb:922:12:922:16 | [post] hash1 [element :f] | -| hash_flow.rb:922:33:922:37 | hash2 [element :f] | hash_flow.rb:922:12:922:38 | call to with_defaults! [element :f] | -| hash_flow.rb:923:11:923:14 | hash [element :a] | hash_flow.rb:923:11:923:18 | ...[...] | -| hash_flow.rb:923:11:923:18 | ...[...] | hash_flow.rb:923:10:923:19 | ( ... ) | -| hash_flow.rb:925:11:925:14 | hash [element :c] | hash_flow.rb:925:11:925:18 | ...[...] | -| hash_flow.rb:925:11:925:18 | ...[...] | hash_flow.rb:925:10:925:19 | ( ... ) | -| hash_flow.rb:926:11:926:14 | hash [element :d] | hash_flow.rb:926:11:926:18 | ...[...] | -| hash_flow.rb:926:11:926:18 | ...[...] | hash_flow.rb:926:10:926:19 | ( ... ) | -| hash_flow.rb:928:11:928:14 | hash [element :f] | hash_flow.rb:928:11:928:18 | ...[...] | -| hash_flow.rb:928:11:928:18 | ...[...] | hash_flow.rb:928:10:928:19 | ( ... ) | -| hash_flow.rb:930:11:930:15 | hash1 [element :a] | hash_flow.rb:930:11:930:19 | ...[...] | -| hash_flow.rb:930:11:930:19 | ...[...] | hash_flow.rb:930:10:930:20 | ( ... ) | -| hash_flow.rb:932:11:932:15 | hash1 [element :c] | hash_flow.rb:932:11:932:19 | ...[...] | -| hash_flow.rb:932:11:932:19 | ...[...] | hash_flow.rb:932:10:932:20 | ( ... ) | -| hash_flow.rb:933:11:933:15 | hash1 [element :d] | hash_flow.rb:933:11:933:19 | ...[...] | -| hash_flow.rb:933:11:933:19 | ...[...] | hash_flow.rb:933:10:933:20 | ( ... ) | -| hash_flow.rb:935:11:935:15 | hash1 [element :f] | hash_flow.rb:935:11:935:19 | ...[...] | -| hash_flow.rb:935:11:935:19 | ...[...] | hash_flow.rb:935:10:935:20 | ( ... ) | -| hash_flow.rb:941:5:941:9 | hash1 [element :a] | hash_flow.rb:952:12:952:16 | hash1 [element :a] | -| hash_flow.rb:941:5:941:9 | hash1 [element :c] | hash_flow.rb:952:12:952:16 | hash1 [element :c] | -| hash_flow.rb:942:12:942:22 | call to taint | hash_flow.rb:941:5:941:9 | hash1 [element :a] | -| hash_flow.rb:944:12:944:22 | call to taint | hash_flow.rb:941:5:941:9 | hash1 [element :c] | -| hash_flow.rb:946:5:946:9 | hash2 [element :d] | hash_flow.rb:952:33:952:37 | hash2 [element :d] | -| hash_flow.rb:946:5:946:9 | hash2 [element :f] | hash_flow.rb:952:33:952:37 | hash2 [element :f] | -| hash_flow.rb:947:12:947:22 | call to taint | hash_flow.rb:946:5:946:9 | hash2 [element :d] | -| hash_flow.rb:949:12:949:22 | call to taint | hash_flow.rb:946:5:946:9 | hash2 [element :f] | -| hash_flow.rb:952:5:952:8 | hash [element :a] | hash_flow.rb:953:11:953:14 | hash [element :a] | -| hash_flow.rb:952:5:952:8 | hash [element :c] | hash_flow.rb:955:11:955:14 | hash [element :c] | -| hash_flow.rb:952:5:952:8 | hash [element :d] | hash_flow.rb:956:11:956:14 | hash [element :d] | -| hash_flow.rb:952:5:952:8 | hash [element :f] | hash_flow.rb:958:11:958:14 | hash [element :f] | -| hash_flow.rb:952:12:952:16 | [post] hash1 [element :a] | hash_flow.rb:960:11:960:15 | hash1 [element :a] | -| hash_flow.rb:952:12:952:16 | [post] hash1 [element :c] | hash_flow.rb:962:11:962:15 | hash1 [element :c] | -| hash_flow.rb:952:12:952:16 | [post] hash1 [element :d] | hash_flow.rb:963:11:963:15 | hash1 [element :d] | -| hash_flow.rb:952:12:952:16 | [post] hash1 [element :f] | hash_flow.rb:965:11:965:15 | hash1 [element :f] | -| hash_flow.rb:952:12:952:16 | hash1 [element :a] | hash_flow.rb:952:12:952:16 | [post] hash1 [element :a] | -| hash_flow.rb:952:12:952:16 | hash1 [element :a] | hash_flow.rb:952:12:952:38 | call to with_defaults! [element :a] | -| hash_flow.rb:952:12:952:16 | hash1 [element :c] | hash_flow.rb:952:12:952:16 | [post] hash1 [element :c] | -| hash_flow.rb:952:12:952:16 | hash1 [element :c] | hash_flow.rb:952:12:952:38 | call to with_defaults! [element :c] | -| hash_flow.rb:952:12:952:38 | call to with_defaults! [element :a] | hash_flow.rb:952:5:952:8 | hash [element :a] | -| hash_flow.rb:952:12:952:38 | call to with_defaults! [element :c] | hash_flow.rb:952:5:952:8 | hash [element :c] | -| hash_flow.rb:952:12:952:38 | call to with_defaults! [element :d] | hash_flow.rb:952:5:952:8 | hash [element :d] | -| hash_flow.rb:952:12:952:38 | call to with_defaults! [element :f] | hash_flow.rb:952:5:952:8 | hash [element :f] | -| hash_flow.rb:952:33:952:37 | hash2 [element :d] | hash_flow.rb:952:12:952:16 | [post] hash1 [element :d] | -| hash_flow.rb:952:33:952:37 | hash2 [element :d] | hash_flow.rb:952:12:952:38 | call to with_defaults! [element :d] | -| hash_flow.rb:952:33:952:37 | hash2 [element :f] | hash_flow.rb:952:12:952:16 | [post] hash1 [element :f] | -| hash_flow.rb:952:33:952:37 | hash2 [element :f] | hash_flow.rb:952:12:952:38 | call to with_defaults! [element :f] | -| hash_flow.rb:953:11:953:14 | hash [element :a] | hash_flow.rb:953:11:953:18 | ...[...] | -| hash_flow.rb:953:11:953:18 | ...[...] | hash_flow.rb:953:10:953:19 | ( ... ) | -| hash_flow.rb:955:11:955:14 | hash [element :c] | hash_flow.rb:955:11:955:18 | ...[...] | -| hash_flow.rb:955:11:955:18 | ...[...] | hash_flow.rb:955:10:955:19 | ( ... ) | -| hash_flow.rb:956:11:956:14 | hash [element :d] | hash_flow.rb:956:11:956:18 | ...[...] | -| hash_flow.rb:956:11:956:18 | ...[...] | hash_flow.rb:956:10:956:19 | ( ... ) | -| hash_flow.rb:958:11:958:14 | hash [element :f] | hash_flow.rb:958:11:958:18 | ...[...] | -| hash_flow.rb:958:11:958:18 | ...[...] | hash_flow.rb:958:10:958:19 | ( ... ) | -| hash_flow.rb:960:11:960:15 | hash1 [element :a] | hash_flow.rb:960:11:960:19 | ...[...] | -| hash_flow.rb:960:11:960:19 | ...[...] | hash_flow.rb:960:10:960:20 | ( ... ) | -| hash_flow.rb:962:11:962:15 | hash1 [element :c] | hash_flow.rb:962:11:962:19 | ...[...] | -| hash_flow.rb:962:11:962:19 | ...[...] | hash_flow.rb:962:10:962:20 | ( ... ) | -| hash_flow.rb:963:11:963:15 | hash1 [element :d] | hash_flow.rb:963:11:963:19 | ...[...] | -| hash_flow.rb:963:11:963:19 | ...[...] | hash_flow.rb:963:10:963:20 | ( ... ) | -| hash_flow.rb:965:11:965:15 | hash1 [element :f] | hash_flow.rb:965:11:965:19 | ...[...] | -| hash_flow.rb:965:11:965:19 | ...[...] | hash_flow.rb:965:10:965:20 | ( ... ) | -| hash_flow.rb:971:5:971:5 | h [element :b] | hash_flow.rb:973:10:973:10 | h [element :b] | -| hash_flow.rb:971:5:971:5 | h [element :b] | hash_flow.rb:975:10:975:10 | h [element :b] | -| hash_flow.rb:971:9:971:38 | ...[...] [element :b] | hash_flow.rb:971:5:971:5 | h [element :b] | -| hash_flow.rb:971:23:971:31 | call to taint | hash_flow.rb:971:9:971:38 | ...[...] [element :b] | -| hash_flow.rb:973:10:973:10 | h [element :b] | hash_flow.rb:973:10:973:14 | ...[...] | -| hash_flow.rb:975:10:975:10 | h [element :b] | hash_flow.rb:975:10:975:13 | ...[...] | -| hash_flow.rb:994:9:994:10 | h2 [element :b] | hash_flow.rb:996:14:996:15 | h2 [element :b] | -| hash_flow.rb:994:9:994:10 | h2 [element :b] | hash_flow.rb:998:14:998:15 | h2 [element :b] | -| hash_flow.rb:994:14:994:47 | ...[...] [element :b] | hash_flow.rb:994:9:994:10 | h2 [element :b] | -| hash_flow.rb:994:30:994:40 | call to taint | hash_flow.rb:994:14:994:47 | ...[...] [element :b] | -| hash_flow.rb:996:14:996:15 | h2 [element :b] | hash_flow.rb:996:14:996:19 | ...[...] | -| hash_flow.rb:998:14:998:15 | h2 [element :b] | hash_flow.rb:998:14:998:18 | ...[...] | +| hash_flow.rb:10:5:10:8 | hash [element 0] | hash_flow.rb:30:10:30:13 | hash [element 0] | provenance | | +| hash_flow.rb:10:5:10:8 | hash [element :a] | hash_flow.rb:22:10:22:13 | hash [element :a] | provenance | | +| hash_flow.rb:10:5:10:8 | hash [element :c] | hash_flow.rb:24:10:24:13 | hash [element :c] | provenance | | +| hash_flow.rb:10:5:10:8 | hash [element e] | hash_flow.rb:26:10:26:13 | hash [element e] | provenance | | +| hash_flow.rb:10:5:10:8 | hash [element g] | hash_flow.rb:28:10:28:13 | hash [element g] | provenance | | +| hash_flow.rb:11:15:11:24 | call to taint | hash_flow.rb:10:5:10:8 | hash [element :a] | provenance | | +| hash_flow.rb:13:12:13:21 | call to taint | hash_flow.rb:10:5:10:8 | hash [element :c] | provenance | | +| hash_flow.rb:15:14:15:23 | call to taint | hash_flow.rb:10:5:10:8 | hash [element e] | provenance | | +| hash_flow.rb:17:16:17:25 | call to taint | hash_flow.rb:10:5:10:8 | hash [element g] | provenance | | +| hash_flow.rb:19:14:19:23 | call to taint | hash_flow.rb:10:5:10:8 | hash [element 0] | provenance | | +| hash_flow.rb:22:10:22:13 | hash [element :a] | hash_flow.rb:22:10:22:17 | ...[...] | provenance | | +| hash_flow.rb:24:10:24:13 | hash [element :c] | hash_flow.rb:24:10:24:17 | ...[...] | provenance | | +| hash_flow.rb:26:10:26:13 | hash [element e] | hash_flow.rb:26:10:26:18 | ...[...] | provenance | | +| hash_flow.rb:28:10:28:13 | hash [element g] | hash_flow.rb:28:10:28:18 | ...[...] | provenance | | +| hash_flow.rb:30:10:30:13 | hash [element 0] | hash_flow.rb:30:10:30:16 | ...[...] | provenance | | +| hash_flow.rb:38:5:38:8 | [post] hash [element 0] | hash_flow.rb:39:5:39:8 | hash [element 0] | provenance | | +| hash_flow.rb:38:15:38:24 | call to taint | hash_flow.rb:38:5:38:8 | [post] hash [element 0] | provenance | | +| hash_flow.rb:39:5:39:8 | [post] hash [element 0] | hash_flow.rb:40:5:40:8 | hash [element 0] | provenance | | +| hash_flow.rb:39:5:39:8 | hash [element 0] | hash_flow.rb:39:5:39:8 | [post] hash [element 0] | provenance | | +| hash_flow.rb:40:5:40:8 | [post] hash [element 0] | hash_flow.rb:41:5:41:8 | hash [element 0] | provenance | | +| hash_flow.rb:40:5:40:8 | [post] hash [element :a] | hash_flow.rb:41:5:41:8 | hash [element :a] | provenance | | +| hash_flow.rb:40:5:40:8 | hash [element 0] | hash_flow.rb:40:5:40:8 | [post] hash [element 0] | provenance | | +| hash_flow.rb:40:16:40:25 | call to taint | hash_flow.rb:40:5:40:8 | [post] hash [element :a] | provenance | | +| hash_flow.rb:41:5:41:8 | [post] hash [element 0] | hash_flow.rb:42:5:42:8 | hash [element 0] | provenance | | +| hash_flow.rb:41:5:41:8 | [post] hash [element :a] | hash_flow.rb:42:5:42:8 | hash [element :a] | provenance | | +| hash_flow.rb:41:5:41:8 | hash [element 0] | hash_flow.rb:41:5:41:8 | [post] hash [element 0] | provenance | | +| hash_flow.rb:41:5:41:8 | hash [element :a] | hash_flow.rb:41:5:41:8 | [post] hash [element :a] | provenance | | +| hash_flow.rb:42:5:42:8 | [post] hash [element 0] | hash_flow.rb:43:5:43:8 | hash [element 0] | provenance | | +| hash_flow.rb:42:5:42:8 | [post] hash [element :a] | hash_flow.rb:43:5:43:8 | hash [element :a] | provenance | | +| hash_flow.rb:42:5:42:8 | [post] hash [element a] | hash_flow.rb:43:5:43:8 | hash [element a] | provenance | | +| hash_flow.rb:42:5:42:8 | hash [element 0] | hash_flow.rb:42:5:42:8 | [post] hash [element 0] | provenance | | +| hash_flow.rb:42:5:42:8 | hash [element :a] | hash_flow.rb:42:5:42:8 | [post] hash [element :a] | provenance | | +| hash_flow.rb:42:17:42:26 | call to taint | hash_flow.rb:42:5:42:8 | [post] hash [element a] | provenance | | +| hash_flow.rb:43:5:43:8 | [post] hash [element 0] | hash_flow.rb:44:10:44:13 | hash [element 0] | provenance | | +| hash_flow.rb:43:5:43:8 | [post] hash [element :a] | hash_flow.rb:46:10:46:13 | hash [element :a] | provenance | | +| hash_flow.rb:43:5:43:8 | [post] hash [element a] | hash_flow.rb:48:10:48:13 | hash [element a] | provenance | | +| hash_flow.rb:43:5:43:8 | hash [element 0] | hash_flow.rb:43:5:43:8 | [post] hash [element 0] | provenance | | +| hash_flow.rb:43:5:43:8 | hash [element :a] | hash_flow.rb:43:5:43:8 | [post] hash [element :a] | provenance | | +| hash_flow.rb:43:5:43:8 | hash [element a] | hash_flow.rb:43:5:43:8 | [post] hash [element a] | provenance | | +| hash_flow.rb:44:10:44:13 | hash [element 0] | hash_flow.rb:44:10:44:16 | ...[...] | provenance | | +| hash_flow.rb:46:10:46:13 | hash [element :a] | hash_flow.rb:46:10:46:17 | ...[...] | provenance | | +| hash_flow.rb:48:10:48:13 | hash [element a] | hash_flow.rb:48:10:48:18 | ...[...] | provenance | | +| hash_flow.rb:55:5:55:9 | hash1 [element :a] | hash_flow.rb:56:10:56:14 | hash1 [element :a] | provenance | | +| hash_flow.rb:55:13:55:37 | ...[...] [element :a] | hash_flow.rb:55:5:55:9 | hash1 [element :a] | provenance | | +| hash_flow.rb:55:21:55:30 | call to taint | hash_flow.rb:55:13:55:37 | ...[...] [element :a] | provenance | | +| hash_flow.rb:56:10:56:14 | hash1 [element :a] | hash_flow.rb:56:10:56:18 | ...[...] | provenance | | +| hash_flow.rb:59:5:59:5 | x [element :a] | hash_flow.rb:60:18:60:18 | x [element :a] | provenance | | +| hash_flow.rb:59:13:59:22 | call to taint | hash_flow.rb:59:5:59:5 | x [element :a] | provenance | | +| hash_flow.rb:60:5:60:9 | hash2 [element :a] | hash_flow.rb:61:10:61:14 | hash2 [element :a] | provenance | | +| hash_flow.rb:60:13:60:19 | ...[...] [element :a] | hash_flow.rb:60:5:60:9 | hash2 [element :a] | provenance | | +| hash_flow.rb:60:18:60:18 | x [element :a] | hash_flow.rb:60:13:60:19 | ...[...] [element :a] | provenance | | +| hash_flow.rb:61:10:61:14 | hash2 [element :a] | hash_flow.rb:61:10:61:18 | ...[...] | provenance | | +| hash_flow.rb:64:5:64:9 | hash3 [element] | hash_flow.rb:65:10:65:14 | hash3 [element] | provenance | | +| hash_flow.rb:64:5:64:9 | hash3 [element] | hash_flow.rb:66:10:66:14 | hash3 [element] | provenance | | +| hash_flow.rb:64:13:64:45 | ...[...] [element] | hash_flow.rb:64:5:64:9 | hash3 [element] | provenance | | +| hash_flow.rb:64:24:64:33 | call to taint | hash_flow.rb:64:13:64:45 | ...[...] [element] | provenance | | +| hash_flow.rb:65:10:65:14 | hash3 [element] | hash_flow.rb:65:10:65:18 | ...[...] | provenance | | +| hash_flow.rb:66:10:66:14 | hash3 [element] | hash_flow.rb:66:10:66:18 | ...[...] | provenance | | +| hash_flow.rb:68:5:68:9 | hash4 [element :a] | hash_flow.rb:69:10:69:14 | hash4 [element :a] | provenance | | +| hash_flow.rb:68:13:68:39 | ...[...] [element :a] | hash_flow.rb:68:5:68:9 | hash4 [element :a] | provenance | | +| hash_flow.rb:68:22:68:31 | call to taint | hash_flow.rb:68:13:68:39 | ...[...] [element :a] | provenance | | +| hash_flow.rb:69:10:69:14 | hash4 [element :a] | hash_flow.rb:69:10:69:18 | ...[...] | provenance | | +| hash_flow.rb:72:5:72:9 | hash5 [element a] | hash_flow.rb:73:10:73:14 | hash5 [element a] | provenance | | +| hash_flow.rb:72:13:72:45 | ...[...] [element a] | hash_flow.rb:72:5:72:9 | hash5 [element a] | provenance | | +| hash_flow.rb:72:25:72:34 | call to taint | hash_flow.rb:72:13:72:45 | ...[...] [element a] | provenance | | +| hash_flow.rb:73:10:73:14 | hash5 [element a] | hash_flow.rb:73:10:73:19 | ...[...] | provenance | | +| hash_flow.rb:76:5:76:9 | hash6 [element a] | hash_flow.rb:77:10:77:14 | hash6 [element a] | provenance | | +| hash_flow.rb:76:13:76:47 | ...[...] [element a] | hash_flow.rb:76:5:76:9 | hash6 [element a] | provenance | | +| hash_flow.rb:76:26:76:35 | call to taint | hash_flow.rb:76:13:76:47 | ...[...] [element a] | provenance | | +| hash_flow.rb:77:10:77:14 | hash6 [element a] | hash_flow.rb:77:10:77:19 | ...[...] | provenance | | +| hash_flow.rb:84:5:84:9 | hash1 [element :a] | hash_flow.rb:85:10:85:14 | hash1 [element :a] | provenance | | +| hash_flow.rb:84:13:84:42 | call to [] [element :a] | hash_flow.rb:84:5:84:9 | hash1 [element :a] | provenance | | +| hash_flow.rb:84:26:84:35 | call to taint | hash_flow.rb:84:13:84:42 | call to [] [element :a] | provenance | | +| hash_flow.rb:85:10:85:14 | hash1 [element :a] | hash_flow.rb:85:10:85:18 | ...[...] | provenance | | +| hash_flow.rb:92:5:92:8 | hash [element :a] | hash_flow.rb:96:30:96:33 | hash [element :a] | provenance | | +| hash_flow.rb:93:15:93:24 | call to taint | hash_flow.rb:92:5:92:8 | hash [element :a] | provenance | | +| hash_flow.rb:96:5:96:9 | hash2 [element :a] | hash_flow.rb:97:10:97:14 | hash2 [element :a] | provenance | | +| hash_flow.rb:96:13:96:34 | call to try_convert [element :a] | hash_flow.rb:96:5:96:9 | hash2 [element :a] | provenance | | +| hash_flow.rb:96:30:96:33 | hash [element :a] | hash_flow.rb:96:13:96:34 | call to try_convert [element :a] | provenance | | +| hash_flow.rb:97:10:97:14 | hash2 [element :a] | hash_flow.rb:97:10:97:18 | ...[...] | provenance | | +| hash_flow.rb:105:5:105:5 | b | hash_flow.rb:106:10:106:10 | b | provenance | | +| hash_flow.rb:105:21:105:30 | call to taint | hash_flow.rb:105:5:105:5 | b | provenance | | +| hash_flow.rb:113:5:113:5 | b | hash_flow.rb:115:10:115:10 | b | provenance | | +| hash_flow.rb:113:9:113:12 | [post] hash [element :a] | hash_flow.rb:114:10:114:13 | hash [element :a] | provenance | | +| hash_flow.rb:113:9:113:34 | call to store | hash_flow.rb:113:5:113:5 | b | provenance | | +| hash_flow.rb:113:24:113:33 | call to taint | hash_flow.rb:113:9:113:12 | [post] hash [element :a] | provenance | | +| hash_flow.rb:113:24:113:33 | call to taint | hash_flow.rb:113:9:113:34 | call to store | provenance | | +| hash_flow.rb:114:10:114:13 | hash [element :a] | hash_flow.rb:114:10:114:17 | ...[...] | provenance | | +| hash_flow.rb:118:5:118:5 | c | hash_flow.rb:121:10:121:10 | c | provenance | | +| hash_flow.rb:118:9:118:12 | [post] hash [element] | hash_flow.rb:119:10:119:13 | hash [element] | provenance | | +| hash_flow.rb:118:9:118:12 | [post] hash [element] | hash_flow.rb:120:10:120:13 | hash [element] | provenance | | +| hash_flow.rb:118:9:118:33 | call to store | hash_flow.rb:118:5:118:5 | c | provenance | | +| hash_flow.rb:118:23:118:32 | call to taint | hash_flow.rb:118:9:118:12 | [post] hash [element] | provenance | | +| hash_flow.rb:118:23:118:32 | call to taint | hash_flow.rb:118:9:118:33 | call to store | provenance | | +| hash_flow.rb:119:10:119:13 | hash [element] | hash_flow.rb:119:10:119:17 | ...[...] | provenance | | +| hash_flow.rb:120:10:120:13 | hash [element] | hash_flow.rb:120:10:120:17 | ...[...] | provenance | | +| hash_flow.rb:127:5:127:8 | hash [element :a] | hash_flow.rb:131:5:131:8 | hash [element :a] | provenance | | +| hash_flow.rb:127:5:127:8 | hash [element :a] | hash_flow.rb:134:5:134:8 | hash [element :a] | provenance | | +| hash_flow.rb:128:15:128:24 | call to taint | hash_flow.rb:127:5:127:8 | hash [element :a] | provenance | | +| hash_flow.rb:131:5:131:8 | hash [element :a] | hash_flow.rb:131:18:131:29 | key_or_value | provenance | | +| hash_flow.rb:131:18:131:29 | key_or_value | hash_flow.rb:132:14:132:25 | key_or_value | provenance | | +| hash_flow.rb:134:5:134:8 | hash [element :a] | hash_flow.rb:134:22:134:26 | value | provenance | | +| hash_flow.rb:134:22:134:26 | value | hash_flow.rb:136:14:136:18 | value | provenance | | +| hash_flow.rb:143:5:143:8 | hash [element :a] | hash_flow.rb:147:9:147:12 | hash [element :a] | provenance | | +| hash_flow.rb:143:5:143:8 | hash [element :a] | hash_flow.rb:151:9:151:12 | hash [element :a] | provenance | | +| hash_flow.rb:144:15:144:25 | call to taint | hash_flow.rb:143:5:143:8 | hash [element :a] | provenance | | +| hash_flow.rb:147:5:147:5 | b [element 1] | hash_flow.rb:149:10:149:10 | b [element 1] | provenance | | +| hash_flow.rb:147:5:147:5 | b [element 1] | hash_flow.rb:150:10:150:10 | b [element 1] | provenance | | +| hash_flow.rb:147:9:147:12 | hash [element :a] | hash_flow.rb:147:9:147:22 | call to assoc [element 1] | provenance | | +| hash_flow.rb:147:9:147:22 | call to assoc [element 1] | hash_flow.rb:147:5:147:5 | b [element 1] | provenance | | +| hash_flow.rb:149:10:149:10 | b [element 1] | hash_flow.rb:149:10:149:13 | ...[...] | provenance | | +| hash_flow.rb:150:10:150:10 | b [element 1] | hash_flow.rb:150:10:150:13 | ...[...] | provenance | | +| hash_flow.rb:151:5:151:5 | c [element 1] | hash_flow.rb:152:10:152:10 | c [element 1] | provenance | | +| hash_flow.rb:151:9:151:12 | hash [element :a] | hash_flow.rb:151:9:151:21 | call to assoc [element 1] | provenance | | +| hash_flow.rb:151:9:151:21 | call to assoc [element 1] | hash_flow.rb:151:5:151:5 | c [element 1] | provenance | | +| hash_flow.rb:152:10:152:10 | c [element 1] | hash_flow.rb:152:10:152:13 | ...[...] | provenance | | +| hash_flow.rb:169:5:169:8 | hash [element :a] | hash_flow.rb:173:9:173:12 | hash [element :a] | provenance | | +| hash_flow.rb:170:15:170:25 | call to taint | hash_flow.rb:169:5:169:8 | hash [element :a] | provenance | | +| hash_flow.rb:173:5:173:5 | a [element :a] | hash_flow.rb:174:10:174:10 | a [element :a] | provenance | | +| hash_flow.rb:173:9:173:12 | hash [element :a] | hash_flow.rb:173:9:173:20 | call to compact [element :a] | provenance | | +| hash_flow.rb:173:9:173:20 | call to compact [element :a] | hash_flow.rb:173:5:173:5 | a [element :a] | provenance | | +| hash_flow.rb:174:10:174:10 | a [element :a] | hash_flow.rb:174:10:174:14 | ...[...] | provenance | | +| hash_flow.rb:181:5:181:8 | hash [element :a] | hash_flow.rb:185:9:185:12 | hash [element :a] | provenance | | +| hash_flow.rb:182:15:182:25 | call to taint | hash_flow.rb:181:5:181:8 | hash [element :a] | provenance | | +| hash_flow.rb:185:5:185:5 | a | hash_flow.rb:186:10:186:10 | a | provenance | | +| hash_flow.rb:185:9:185:12 | hash [element :a] | hash_flow.rb:185:9:185:23 | call to delete | provenance | | +| hash_flow.rb:185:9:185:23 | call to delete | hash_flow.rb:185:5:185:5 | a | provenance | | +| hash_flow.rb:193:5:193:8 | hash [element :a] | hash_flow.rb:197:9:197:12 | hash [element :a] | provenance | | +| hash_flow.rb:194:15:194:25 | call to taint | hash_flow.rb:193:5:193:8 | hash [element :a] | provenance | | +| hash_flow.rb:197:5:197:5 | a [element :a] | hash_flow.rb:201:10:201:10 | a [element :a] | provenance | | +| hash_flow.rb:197:9:197:12 | [post] hash [element :a] | hash_flow.rb:202:10:202:13 | hash [element :a] | provenance | | +| hash_flow.rb:197:9:197:12 | hash [element :a] | hash_flow.rb:197:9:197:12 | [post] hash [element :a] | provenance | | +| hash_flow.rb:197:9:197:12 | hash [element :a] | hash_flow.rb:197:9:200:7 | call to delete_if [element :a] | provenance | | +| hash_flow.rb:197:9:197:12 | hash [element :a] | hash_flow.rb:197:33:197:37 | value | provenance | | +| hash_flow.rb:197:9:200:7 | call to delete_if [element :a] | hash_flow.rb:197:5:197:5 | a [element :a] | provenance | | +| hash_flow.rb:197:33:197:37 | value | hash_flow.rb:199:14:199:18 | value | provenance | | +| hash_flow.rb:201:10:201:10 | a [element :a] | hash_flow.rb:201:10:201:14 | ...[...] | provenance | | +| hash_flow.rb:202:10:202:13 | hash [element :a] | hash_flow.rb:202:10:202:17 | ...[...] | provenance | | +| hash_flow.rb:209:5:209:8 | hash [element :a] | hash_flow.rb:217:10:217:13 | hash [element :a] | provenance | | +| hash_flow.rb:209:5:209:8 | hash [element :c, element :d] | hash_flow.rb:219:10:219:13 | hash [element :c, element :d] | provenance | | +| hash_flow.rb:210:15:210:25 | call to taint | hash_flow.rb:209:5:209:8 | hash [element :a] | provenance | | +| hash_flow.rb:213:19:213:29 | call to taint | hash_flow.rb:209:5:209:8 | hash [element :c, element :d] | provenance | | +| hash_flow.rb:217:10:217:13 | hash [element :a] | hash_flow.rb:217:10:217:21 | call to dig | provenance | | +| hash_flow.rb:219:10:219:13 | hash [element :c, element :d] | hash_flow.rb:219:10:219:24 | call to dig | provenance | | +| hash_flow.rb:226:5:226:8 | hash [element :a] | hash_flow.rb:230:9:230:12 | hash [element :a] | provenance | | +| hash_flow.rb:227:15:227:25 | call to taint | hash_flow.rb:226:5:226:8 | hash [element :a] | provenance | | +| hash_flow.rb:230:5:230:5 | x [element :a] | hash_flow.rb:234:10:234:10 | x [element :a] | provenance | | +| hash_flow.rb:230:9:230:12 | hash [element :a] | hash_flow.rb:230:9:233:7 | call to each [element :a] | provenance | | +| hash_flow.rb:230:9:230:12 | hash [element :a] | hash_flow.rb:230:28:230:32 | value | provenance | | +| hash_flow.rb:230:9:233:7 | call to each [element :a] | hash_flow.rb:230:5:230:5 | x [element :a] | provenance | | +| hash_flow.rb:230:28:230:32 | value | hash_flow.rb:232:14:232:18 | value | provenance | | +| hash_flow.rb:234:10:234:10 | x [element :a] | hash_flow.rb:234:10:234:14 | ...[...] | provenance | | +| hash_flow.rb:241:5:241:8 | hash [element :a] | hash_flow.rb:245:9:245:12 | hash [element :a] | provenance | | +| hash_flow.rb:242:15:242:25 | call to taint | hash_flow.rb:241:5:241:8 | hash [element :a] | provenance | | +| hash_flow.rb:245:5:245:5 | x [element :a] | hash_flow.rb:248:10:248:10 | x [element :a] | provenance | | +| hash_flow.rb:245:9:245:12 | hash [element :a] | hash_flow.rb:245:9:247:7 | call to each_key [element :a] | provenance | | +| hash_flow.rb:245:9:247:7 | call to each_key [element :a] | hash_flow.rb:245:5:245:5 | x [element :a] | provenance | | +| hash_flow.rb:248:10:248:10 | x [element :a] | hash_flow.rb:248:10:248:14 | ...[...] | provenance | | +| hash_flow.rb:255:5:255:8 | hash [element :a] | hash_flow.rb:259:9:259:12 | hash [element :a] | provenance | | +| hash_flow.rb:256:15:256:25 | call to taint | hash_flow.rb:255:5:255:8 | hash [element :a] | provenance | | +| hash_flow.rb:259:5:259:5 | x [element :a] | hash_flow.rb:263:10:263:10 | x [element :a] | provenance | | +| hash_flow.rb:259:9:259:12 | hash [element :a] | hash_flow.rb:259:9:262:7 | call to each_pair [element :a] | provenance | | +| hash_flow.rb:259:9:259:12 | hash [element :a] | hash_flow.rb:259:33:259:37 | value | provenance | | +| hash_flow.rb:259:9:262:7 | call to each_pair [element :a] | hash_flow.rb:259:5:259:5 | x [element :a] | provenance | | +| hash_flow.rb:259:33:259:37 | value | hash_flow.rb:261:14:261:18 | value | provenance | | +| hash_flow.rb:263:10:263:10 | x [element :a] | hash_flow.rb:263:10:263:14 | ...[...] | provenance | | +| hash_flow.rb:270:5:270:8 | hash [element :a] | hash_flow.rb:274:9:274:12 | hash [element :a] | provenance | | +| hash_flow.rb:271:15:271:25 | call to taint | hash_flow.rb:270:5:270:8 | hash [element :a] | provenance | | +| hash_flow.rb:274:5:274:5 | x [element :a] | hash_flow.rb:277:10:277:10 | x [element :a] | provenance | | +| hash_flow.rb:274:9:274:12 | hash [element :a] | hash_flow.rb:274:9:276:7 | call to each_value [element :a] | provenance | | +| hash_flow.rb:274:9:274:12 | hash [element :a] | hash_flow.rb:274:29:274:33 | value | provenance | | +| hash_flow.rb:274:9:276:7 | call to each_value [element :a] | hash_flow.rb:274:5:274:5 | x [element :a] | provenance | | +| hash_flow.rb:274:29:274:33 | value | hash_flow.rb:275:14:275:18 | value | provenance | | +| hash_flow.rb:277:10:277:10 | x [element :a] | hash_flow.rb:277:10:277:14 | ...[...] | provenance | | +| hash_flow.rb:284:5:284:8 | hash [element :c] | hash_flow.rb:290:9:290:12 | hash [element :c] | provenance | | +| hash_flow.rb:287:15:287:25 | call to taint | hash_flow.rb:284:5:284:8 | hash [element :c] | provenance | | +| hash_flow.rb:290:5:290:5 | x [element :c] | hash_flow.rb:293:10:293:10 | x [element :c] | provenance | | +| hash_flow.rb:290:9:290:12 | hash [element :c] | hash_flow.rb:290:9:290:28 | call to except [element :c] | provenance | | +| hash_flow.rb:290:9:290:28 | call to except [element :c] | hash_flow.rb:290:5:290:5 | x [element :c] | provenance | | +| hash_flow.rb:293:10:293:10 | x [element :c] | hash_flow.rb:293:10:293:14 | ...[...] | provenance | | +| hash_flow.rb:300:5:300:8 | hash [element :a] | hash_flow.rb:305:9:305:12 | hash [element :a] | provenance | | +| hash_flow.rb:300:5:300:8 | hash [element :a] | hash_flow.rb:309:9:309:12 | hash [element :a] | provenance | | +| hash_flow.rb:300:5:300:8 | hash [element :a] | hash_flow.rb:311:9:311:12 | hash [element :a] | provenance | | +| hash_flow.rb:300:5:300:8 | hash [element :a] | hash_flow.rb:315:9:315:12 | hash [element :a] | provenance | | +| hash_flow.rb:300:5:300:8 | hash [element :c] | hash_flow.rb:305:9:305:12 | hash [element :c] | provenance | | +| hash_flow.rb:300:5:300:8 | hash [element :c] | hash_flow.rb:315:9:315:12 | hash [element :c] | provenance | | +| hash_flow.rb:301:15:301:25 | call to taint | hash_flow.rb:300:5:300:8 | hash [element :a] | provenance | | +| hash_flow.rb:303:15:303:25 | call to taint | hash_flow.rb:300:5:300:8 | hash [element :c] | provenance | | +| hash_flow.rb:305:5:305:5 | b | hash_flow.rb:308:10:308:10 | b | provenance | | +| hash_flow.rb:305:9:305:12 | hash [element :a] | hash_flow.rb:305:9:307:7 | call to fetch | provenance | | +| hash_flow.rb:305:9:305:12 | hash [element :c] | hash_flow.rb:305:9:307:7 | call to fetch | provenance | | +| hash_flow.rb:305:9:307:7 | call to fetch | hash_flow.rb:305:5:305:5 | b | provenance | | +| hash_flow.rb:305:20:305:30 | call to taint | hash_flow.rb:305:37:305:37 | x | provenance | | +| hash_flow.rb:305:37:305:37 | x | hash_flow.rb:306:14:306:14 | x | provenance | | +| hash_flow.rb:309:5:309:5 | b | hash_flow.rb:310:10:310:10 | b | provenance | | +| hash_flow.rb:309:9:309:12 | hash [element :a] | hash_flow.rb:309:9:309:22 | call to fetch | provenance | | +| hash_flow.rb:309:9:309:22 | call to fetch | hash_flow.rb:309:5:309:5 | b | provenance | | +| hash_flow.rb:311:5:311:5 | b | hash_flow.rb:312:10:312:10 | b | provenance | | +| hash_flow.rb:311:9:311:12 | hash [element :a] | hash_flow.rb:311:9:311:35 | call to fetch | provenance | | +| hash_flow.rb:311:9:311:35 | call to fetch | hash_flow.rb:311:5:311:5 | b | provenance | | +| hash_flow.rb:311:24:311:34 | call to taint | hash_flow.rb:311:9:311:35 | call to fetch | provenance | | +| hash_flow.rb:313:5:313:5 | b | hash_flow.rb:314:10:314:10 | b | provenance | | +| hash_flow.rb:313:9:313:35 | call to fetch | hash_flow.rb:313:5:313:5 | b | provenance | | +| hash_flow.rb:313:24:313:34 | call to taint | hash_flow.rb:313:9:313:35 | call to fetch | provenance | | +| hash_flow.rb:315:5:315:5 | b | hash_flow.rb:316:10:316:10 | b | provenance | | +| hash_flow.rb:315:9:315:12 | hash [element :a] | hash_flow.rb:315:9:315:34 | call to fetch | provenance | | +| hash_flow.rb:315:9:315:12 | hash [element :c] | hash_flow.rb:315:9:315:34 | call to fetch | provenance | | +| hash_flow.rb:315:9:315:34 | call to fetch | hash_flow.rb:315:5:315:5 | b | provenance | | +| hash_flow.rb:315:23:315:33 | call to taint | hash_flow.rb:315:9:315:34 | call to fetch | provenance | | +| hash_flow.rb:322:5:322:8 | hash [element :a] | hash_flow.rb:327:9:327:12 | hash [element :a] | provenance | | +| hash_flow.rb:322:5:322:8 | hash [element :a] | hash_flow.rb:332:9:332:12 | hash [element :a] | provenance | | +| hash_flow.rb:322:5:322:8 | hash [element :a] | hash_flow.rb:334:9:334:12 | hash [element :a] | provenance | | +| hash_flow.rb:322:5:322:8 | hash [element :c] | hash_flow.rb:327:9:327:12 | hash [element :c] | provenance | | +| hash_flow.rb:322:5:322:8 | hash [element :c] | hash_flow.rb:334:9:334:12 | hash [element :c] | provenance | | +| hash_flow.rb:323:15:323:25 | call to taint | hash_flow.rb:322:5:322:8 | hash [element :a] | provenance | | +| hash_flow.rb:325:15:325:25 | call to taint | hash_flow.rb:322:5:322:8 | hash [element :c] | provenance | | +| hash_flow.rb:327:5:327:5 | b [element] | hash_flow.rb:331:10:331:10 | b [element] | provenance | | +| hash_flow.rb:327:9:327:12 | hash [element :a] | hash_flow.rb:327:9:330:7 | call to fetch_values [element] | provenance | | +| hash_flow.rb:327:9:327:12 | hash [element :c] | hash_flow.rb:327:9:330:7 | call to fetch_values [element] | provenance | | +| hash_flow.rb:327:9:330:7 | call to fetch_values [element] | hash_flow.rb:327:5:327:5 | b [element] | provenance | | +| hash_flow.rb:327:27:327:37 | call to taint | hash_flow.rb:327:44:327:44 | x | provenance | | +| hash_flow.rb:327:44:327:44 | x | hash_flow.rb:328:14:328:14 | x | provenance | | +| hash_flow.rb:329:9:329:19 | call to taint | hash_flow.rb:327:9:330:7 | call to fetch_values [element] | provenance | | +| hash_flow.rb:331:10:331:10 | b [element] | hash_flow.rb:331:10:331:13 | ...[...] | provenance | | +| hash_flow.rb:332:5:332:5 | b [element] | hash_flow.rb:333:10:333:10 | b [element] | provenance | | +| hash_flow.rb:332:9:332:12 | hash [element :a] | hash_flow.rb:332:9:332:29 | call to fetch_values [element] | provenance | | +| hash_flow.rb:332:9:332:29 | call to fetch_values [element] | hash_flow.rb:332:5:332:5 | b [element] | provenance | | +| hash_flow.rb:333:10:333:10 | b [element] | hash_flow.rb:333:10:333:13 | ...[...] | provenance | | +| hash_flow.rb:334:5:334:5 | b [element] | hash_flow.rb:335:10:335:10 | b [element] | provenance | | +| hash_flow.rb:334:9:334:12 | hash [element :a] | hash_flow.rb:334:9:334:31 | call to fetch_values [element] | provenance | | +| hash_flow.rb:334:9:334:12 | hash [element :c] | hash_flow.rb:334:9:334:31 | call to fetch_values [element] | provenance | | +| hash_flow.rb:334:9:334:31 | call to fetch_values [element] | hash_flow.rb:334:5:334:5 | b [element] | provenance | | +| hash_flow.rb:335:10:335:10 | b [element] | hash_flow.rb:335:10:335:13 | ...[...] | provenance | | +| hash_flow.rb:341:5:341:8 | hash [element :a] | hash_flow.rb:346:9:346:12 | hash [element :a] | provenance | | +| hash_flow.rb:341:5:341:8 | hash [element :c] | hash_flow.rb:346:9:346:12 | hash [element :c] | provenance | | +| hash_flow.rb:342:15:342:25 | call to taint | hash_flow.rb:341:5:341:8 | hash [element :a] | provenance | | +| hash_flow.rb:344:15:344:25 | call to taint | hash_flow.rb:341:5:341:8 | hash [element :c] | provenance | | +| hash_flow.rb:346:5:346:5 | b [element :a] | hash_flow.rb:351:11:351:11 | b [element :a] | provenance | | +| hash_flow.rb:346:9:346:12 | hash [element :a] | hash_flow.rb:346:9:350:7 | call to filter [element :a] | provenance | | +| hash_flow.rb:346:9:346:12 | hash [element :a] | hash_flow.rb:346:30:346:34 | value | provenance | | +| hash_flow.rb:346:9:346:12 | hash [element :c] | hash_flow.rb:346:30:346:34 | value | provenance | | +| hash_flow.rb:346:9:350:7 | call to filter [element :a] | hash_flow.rb:346:5:346:5 | b [element :a] | provenance | | +| hash_flow.rb:346:30:346:34 | value | hash_flow.rb:348:14:348:18 | value | provenance | | +| hash_flow.rb:351:11:351:11 | b [element :a] | hash_flow.rb:351:11:351:15 | ...[...] | provenance | | +| hash_flow.rb:351:11:351:15 | ...[...] | hash_flow.rb:351:10:351:16 | ( ... ) | provenance | | +| hash_flow.rb:357:5:357:8 | hash [element :a] | hash_flow.rb:362:5:362:8 | hash [element :a] | provenance | | +| hash_flow.rb:357:5:357:8 | hash [element :c] | hash_flow.rb:362:5:362:8 | hash [element :c] | provenance | | +| hash_flow.rb:358:15:358:25 | call to taint | hash_flow.rb:357:5:357:8 | hash [element :a] | provenance | | +| hash_flow.rb:360:15:360:25 | call to taint | hash_flow.rb:357:5:357:8 | hash [element :c] | provenance | | +| hash_flow.rb:362:5:362:8 | [post] hash [element :a] | hash_flow.rb:367:11:367:14 | hash [element :a] | provenance | | +| hash_flow.rb:362:5:362:8 | hash [element :a] | hash_flow.rb:362:5:362:8 | [post] hash [element :a] | provenance | | +| hash_flow.rb:362:5:362:8 | hash [element :a] | hash_flow.rb:362:27:362:31 | value | provenance | | +| hash_flow.rb:362:5:362:8 | hash [element :c] | hash_flow.rb:362:27:362:31 | value | provenance | | +| hash_flow.rb:362:27:362:31 | value | hash_flow.rb:364:14:364:18 | value | provenance | | +| hash_flow.rb:367:11:367:14 | hash [element :a] | hash_flow.rb:367:11:367:18 | ...[...] | provenance | | +| hash_flow.rb:367:11:367:18 | ...[...] | hash_flow.rb:367:10:367:19 | ( ... ) | provenance | | +| hash_flow.rb:373:5:373:8 | hash [element :a] | hash_flow.rb:378:9:378:12 | hash [element :a] | provenance | | +| hash_flow.rb:373:5:373:8 | hash [element :c] | hash_flow.rb:378:9:378:12 | hash [element :c] | provenance | | +| hash_flow.rb:374:15:374:25 | call to taint | hash_flow.rb:373:5:373:8 | hash [element :a] | provenance | | +| hash_flow.rb:376:15:376:25 | call to taint | hash_flow.rb:373:5:373:8 | hash [element :c] | provenance | | +| hash_flow.rb:378:5:378:5 | b [element] | hash_flow.rb:379:11:379:11 | b [element] | provenance | | +| hash_flow.rb:378:9:378:12 | hash [element :a] | hash_flow.rb:378:9:378:20 | call to flatten [element] | provenance | | +| hash_flow.rb:378:9:378:12 | hash [element :c] | hash_flow.rb:378:9:378:20 | call to flatten [element] | provenance | | +| hash_flow.rb:378:9:378:20 | call to flatten [element] | hash_flow.rb:378:5:378:5 | b [element] | provenance | | +| hash_flow.rb:379:11:379:11 | b [element] | hash_flow.rb:379:11:379:14 | ...[...] | provenance | | +| hash_flow.rb:379:11:379:14 | ...[...] | hash_flow.rb:379:10:379:15 | ( ... ) | provenance | | +| hash_flow.rb:385:5:385:8 | hash [element :a] | hash_flow.rb:390:9:390:12 | hash [element :a] | provenance | | +| hash_flow.rb:385:5:385:8 | hash [element :c] | hash_flow.rb:390:9:390:12 | hash [element :c] | provenance | | +| hash_flow.rb:386:15:386:25 | call to taint | hash_flow.rb:385:5:385:8 | hash [element :a] | provenance | | +| hash_flow.rb:388:15:388:25 | call to taint | hash_flow.rb:385:5:385:8 | hash [element :c] | provenance | | +| hash_flow.rb:390:5:390:5 | b [element :a] | hash_flow.rb:396:11:396:11 | b [element :a] | provenance | | +| hash_flow.rb:390:9:390:12 | [post] hash [element :a] | hash_flow.rb:395:11:395:14 | hash [element :a] | provenance | | +| hash_flow.rb:390:9:390:12 | hash [element :a] | hash_flow.rb:390:9:390:12 | [post] hash [element :a] | provenance | | +| hash_flow.rb:390:9:390:12 | hash [element :a] | hash_flow.rb:390:9:394:7 | call to keep_if [element :a] | provenance | | +| hash_flow.rb:390:9:390:12 | hash [element :a] | hash_flow.rb:390:31:390:35 | value | provenance | | +| hash_flow.rb:390:9:390:12 | hash [element :c] | hash_flow.rb:390:31:390:35 | value | provenance | | +| hash_flow.rb:390:9:394:7 | call to keep_if [element :a] | hash_flow.rb:390:5:390:5 | b [element :a] | provenance | | +| hash_flow.rb:390:31:390:35 | value | hash_flow.rb:392:14:392:18 | value | provenance | | +| hash_flow.rb:395:11:395:14 | hash [element :a] | hash_flow.rb:395:11:395:18 | ...[...] | provenance | | +| hash_flow.rb:395:11:395:18 | ...[...] | hash_flow.rb:395:10:395:19 | ( ... ) | provenance | | +| hash_flow.rb:396:11:396:11 | b [element :a] | hash_flow.rb:396:11:396:15 | ...[...] | provenance | | +| hash_flow.rb:396:11:396:15 | ...[...] | hash_flow.rb:396:10:396:16 | ( ... ) | provenance | | +| hash_flow.rb:402:5:402:9 | hash1 [element :a] | hash_flow.rb:412:12:412:16 | hash1 [element :a] | provenance | | +| hash_flow.rb:402:5:402:9 | hash1 [element :c] | hash_flow.rb:412:12:412:16 | hash1 [element :c] | provenance | | +| hash_flow.rb:403:15:403:25 | call to taint | hash_flow.rb:402:5:402:9 | hash1 [element :a] | provenance | | +| hash_flow.rb:405:15:405:25 | call to taint | hash_flow.rb:402:5:402:9 | hash1 [element :c] | provenance | | +| hash_flow.rb:407:5:407:9 | hash2 [element :d] | hash_flow.rb:412:24:412:28 | hash2 [element :d] | provenance | | +| hash_flow.rb:407:5:407:9 | hash2 [element :f] | hash_flow.rb:412:24:412:28 | hash2 [element :f] | provenance | | +| hash_flow.rb:408:15:408:25 | call to taint | hash_flow.rb:407:5:407:9 | hash2 [element :d] | provenance | | +| hash_flow.rb:410:15:410:25 | call to taint | hash_flow.rb:407:5:407:9 | hash2 [element :f] | provenance | | +| hash_flow.rb:412:5:412:8 | hash [element :a] | hash_flow.rb:417:11:417:14 | hash [element :a] | provenance | | +| hash_flow.rb:412:5:412:8 | hash [element :c] | hash_flow.rb:419:11:419:14 | hash [element :c] | provenance | | +| hash_flow.rb:412:5:412:8 | hash [element :d] | hash_flow.rb:420:11:420:14 | hash [element :d] | provenance | | +| hash_flow.rb:412:5:412:8 | hash [element :f] | hash_flow.rb:422:11:422:14 | hash [element :f] | provenance | | +| hash_flow.rb:412:12:412:16 | hash1 [element :a] | hash_flow.rb:412:12:416:7 | call to merge [element :a] | provenance | | +| hash_flow.rb:412:12:412:16 | hash1 [element :a] | hash_flow.rb:412:40:412:48 | old_value | provenance | | +| hash_flow.rb:412:12:412:16 | hash1 [element :a] | hash_flow.rb:412:51:412:59 | new_value | provenance | | +| hash_flow.rb:412:12:412:16 | hash1 [element :c] | hash_flow.rb:412:12:416:7 | call to merge [element :c] | provenance | | +| hash_flow.rb:412:12:412:16 | hash1 [element :c] | hash_flow.rb:412:40:412:48 | old_value | provenance | | +| hash_flow.rb:412:12:412:16 | hash1 [element :c] | hash_flow.rb:412:51:412:59 | new_value | provenance | | +| hash_flow.rb:412:12:416:7 | call to merge [element :a] | hash_flow.rb:412:5:412:8 | hash [element :a] | provenance | | +| hash_flow.rb:412:12:416:7 | call to merge [element :c] | hash_flow.rb:412:5:412:8 | hash [element :c] | provenance | | +| hash_flow.rb:412:12:416:7 | call to merge [element :d] | hash_flow.rb:412:5:412:8 | hash [element :d] | provenance | | +| hash_flow.rb:412:12:416:7 | call to merge [element :f] | hash_flow.rb:412:5:412:8 | hash [element :f] | provenance | | +| hash_flow.rb:412:24:412:28 | hash2 [element :d] | hash_flow.rb:412:12:416:7 | call to merge [element :d] | provenance | | +| hash_flow.rb:412:24:412:28 | hash2 [element :d] | hash_flow.rb:412:40:412:48 | old_value | provenance | | +| hash_flow.rb:412:24:412:28 | hash2 [element :d] | hash_flow.rb:412:51:412:59 | new_value | provenance | | +| hash_flow.rb:412:24:412:28 | hash2 [element :f] | hash_flow.rb:412:12:416:7 | call to merge [element :f] | provenance | | +| hash_flow.rb:412:24:412:28 | hash2 [element :f] | hash_flow.rb:412:40:412:48 | old_value | provenance | | +| hash_flow.rb:412:24:412:28 | hash2 [element :f] | hash_flow.rb:412:51:412:59 | new_value | provenance | | +| hash_flow.rb:412:40:412:48 | old_value | hash_flow.rb:414:14:414:22 | old_value | provenance | | +| hash_flow.rb:412:51:412:59 | new_value | hash_flow.rb:415:14:415:22 | new_value | provenance | | +| hash_flow.rb:417:11:417:14 | hash [element :a] | hash_flow.rb:417:11:417:18 | ...[...] | provenance | | +| hash_flow.rb:417:11:417:18 | ...[...] | hash_flow.rb:417:10:417:19 | ( ... ) | provenance | | +| hash_flow.rb:419:11:419:14 | hash [element :c] | hash_flow.rb:419:11:419:18 | ...[...] | provenance | | +| hash_flow.rb:419:11:419:18 | ...[...] | hash_flow.rb:419:10:419:19 | ( ... ) | provenance | | +| hash_flow.rb:420:11:420:14 | hash [element :d] | hash_flow.rb:420:11:420:18 | ...[...] | provenance | | +| hash_flow.rb:420:11:420:18 | ...[...] | hash_flow.rb:420:10:420:19 | ( ... ) | provenance | | +| hash_flow.rb:422:11:422:14 | hash [element :f] | hash_flow.rb:422:11:422:18 | ...[...] | provenance | | +| hash_flow.rb:422:11:422:18 | ...[...] | hash_flow.rb:422:10:422:19 | ( ... ) | provenance | | +| hash_flow.rb:428:5:428:9 | hash1 [element :a] | hash_flow.rb:438:12:438:16 | hash1 [element :a] | provenance | | +| hash_flow.rb:428:5:428:9 | hash1 [element :c] | hash_flow.rb:438:12:438:16 | hash1 [element :c] | provenance | | +| hash_flow.rb:429:15:429:25 | call to taint | hash_flow.rb:428:5:428:9 | hash1 [element :a] | provenance | | +| hash_flow.rb:431:15:431:25 | call to taint | hash_flow.rb:428:5:428:9 | hash1 [element :c] | provenance | | +| hash_flow.rb:433:5:433:9 | hash2 [element :d] | hash_flow.rb:438:25:438:29 | hash2 [element :d] | provenance | | +| hash_flow.rb:433:5:433:9 | hash2 [element :f] | hash_flow.rb:438:25:438:29 | hash2 [element :f] | provenance | | +| hash_flow.rb:434:15:434:25 | call to taint | hash_flow.rb:433:5:433:9 | hash2 [element :d] | provenance | | +| hash_flow.rb:436:15:436:25 | call to taint | hash_flow.rb:433:5:433:9 | hash2 [element :f] | provenance | | +| hash_flow.rb:438:5:438:8 | hash [element :a] | hash_flow.rb:443:11:443:14 | hash [element :a] | provenance | | +| hash_flow.rb:438:5:438:8 | hash [element :c] | hash_flow.rb:445:11:445:14 | hash [element :c] | provenance | | +| hash_flow.rb:438:5:438:8 | hash [element :d] | hash_flow.rb:446:11:446:14 | hash [element :d] | provenance | | +| hash_flow.rb:438:5:438:8 | hash [element :f] | hash_flow.rb:448:11:448:14 | hash [element :f] | provenance | | +| hash_flow.rb:438:12:438:16 | [post] hash1 [element :a] | hash_flow.rb:450:11:450:15 | hash1 [element :a] | provenance | | +| hash_flow.rb:438:12:438:16 | [post] hash1 [element :c] | hash_flow.rb:452:11:452:15 | hash1 [element :c] | provenance | | +| hash_flow.rb:438:12:438:16 | [post] hash1 [element :d] | hash_flow.rb:453:11:453:15 | hash1 [element :d] | provenance | | +| hash_flow.rb:438:12:438:16 | [post] hash1 [element :f] | hash_flow.rb:455:11:455:15 | hash1 [element :f] | provenance | | +| hash_flow.rb:438:12:438:16 | hash1 [element :a] | hash_flow.rb:438:12:438:16 | [post] hash1 [element :a] | provenance | | +| hash_flow.rb:438:12:438:16 | hash1 [element :a] | hash_flow.rb:438:12:442:7 | call to merge! [element :a] | provenance | | +| hash_flow.rb:438:12:438:16 | hash1 [element :a] | hash_flow.rb:438:41:438:49 | old_value | provenance | | +| hash_flow.rb:438:12:438:16 | hash1 [element :a] | hash_flow.rb:438:52:438:60 | new_value | provenance | | +| hash_flow.rb:438:12:438:16 | hash1 [element :c] | hash_flow.rb:438:12:438:16 | [post] hash1 [element :c] | provenance | | +| hash_flow.rb:438:12:438:16 | hash1 [element :c] | hash_flow.rb:438:12:442:7 | call to merge! [element :c] | provenance | | +| hash_flow.rb:438:12:438:16 | hash1 [element :c] | hash_flow.rb:438:41:438:49 | old_value | provenance | | +| hash_flow.rb:438:12:438:16 | hash1 [element :c] | hash_flow.rb:438:52:438:60 | new_value | provenance | | +| hash_flow.rb:438:12:442:7 | call to merge! [element :a] | hash_flow.rb:438:5:438:8 | hash [element :a] | provenance | | +| hash_flow.rb:438:12:442:7 | call to merge! [element :c] | hash_flow.rb:438:5:438:8 | hash [element :c] | provenance | | +| hash_flow.rb:438:12:442:7 | call to merge! [element :d] | hash_flow.rb:438:5:438:8 | hash [element :d] | provenance | | +| hash_flow.rb:438:12:442:7 | call to merge! [element :f] | hash_flow.rb:438:5:438:8 | hash [element :f] | provenance | | +| hash_flow.rb:438:25:438:29 | hash2 [element :d] | hash_flow.rb:438:12:438:16 | [post] hash1 [element :d] | provenance | | +| hash_flow.rb:438:25:438:29 | hash2 [element :d] | hash_flow.rb:438:12:442:7 | call to merge! [element :d] | provenance | | +| hash_flow.rb:438:25:438:29 | hash2 [element :d] | hash_flow.rb:438:41:438:49 | old_value | provenance | | +| hash_flow.rb:438:25:438:29 | hash2 [element :d] | hash_flow.rb:438:52:438:60 | new_value | provenance | | +| hash_flow.rb:438:25:438:29 | hash2 [element :f] | hash_flow.rb:438:12:438:16 | [post] hash1 [element :f] | provenance | | +| hash_flow.rb:438:25:438:29 | hash2 [element :f] | hash_flow.rb:438:12:442:7 | call to merge! [element :f] | provenance | | +| hash_flow.rb:438:25:438:29 | hash2 [element :f] | hash_flow.rb:438:41:438:49 | old_value | provenance | | +| hash_flow.rb:438:25:438:29 | hash2 [element :f] | hash_flow.rb:438:52:438:60 | new_value | provenance | | +| hash_flow.rb:438:41:438:49 | old_value | hash_flow.rb:440:14:440:22 | old_value | provenance | | +| hash_flow.rb:438:52:438:60 | new_value | hash_flow.rb:441:14:441:22 | new_value | provenance | | +| hash_flow.rb:443:11:443:14 | hash [element :a] | hash_flow.rb:443:11:443:18 | ...[...] | provenance | | +| hash_flow.rb:443:11:443:18 | ...[...] | hash_flow.rb:443:10:443:19 | ( ... ) | provenance | | +| hash_flow.rb:445:11:445:14 | hash [element :c] | hash_flow.rb:445:11:445:18 | ...[...] | provenance | | +| hash_flow.rb:445:11:445:18 | ...[...] | hash_flow.rb:445:10:445:19 | ( ... ) | provenance | | +| hash_flow.rb:446:11:446:14 | hash [element :d] | hash_flow.rb:446:11:446:18 | ...[...] | provenance | | +| hash_flow.rb:446:11:446:18 | ...[...] | hash_flow.rb:446:10:446:19 | ( ... ) | provenance | | +| hash_flow.rb:448:11:448:14 | hash [element :f] | hash_flow.rb:448:11:448:18 | ...[...] | provenance | | +| hash_flow.rb:448:11:448:18 | ...[...] | hash_flow.rb:448:10:448:19 | ( ... ) | provenance | | +| hash_flow.rb:450:11:450:15 | hash1 [element :a] | hash_flow.rb:450:11:450:19 | ...[...] | provenance | | +| hash_flow.rb:450:11:450:19 | ...[...] | hash_flow.rb:450:10:450:20 | ( ... ) | provenance | | +| hash_flow.rb:452:11:452:15 | hash1 [element :c] | hash_flow.rb:452:11:452:19 | ...[...] | provenance | | +| hash_flow.rb:452:11:452:19 | ...[...] | hash_flow.rb:452:10:452:20 | ( ... ) | provenance | | +| hash_flow.rb:453:11:453:15 | hash1 [element :d] | hash_flow.rb:453:11:453:19 | ...[...] | provenance | | +| hash_flow.rb:453:11:453:19 | ...[...] | hash_flow.rb:453:10:453:20 | ( ... ) | provenance | | +| hash_flow.rb:455:11:455:15 | hash1 [element :f] | hash_flow.rb:455:11:455:19 | ...[...] | provenance | | +| hash_flow.rb:455:11:455:19 | ...[...] | hash_flow.rb:455:10:455:20 | ( ... ) | provenance | | +| hash_flow.rb:461:5:461:8 | hash [element :a] | hash_flow.rb:465:9:465:12 | hash [element :a] | provenance | | +| hash_flow.rb:462:15:462:25 | call to taint | hash_flow.rb:461:5:461:8 | hash [element :a] | provenance | | +| hash_flow.rb:465:5:465:5 | b [element 1] | hash_flow.rb:467:10:467:10 | b [element 1] | provenance | | +| hash_flow.rb:465:9:465:12 | hash [element :a] | hash_flow.rb:465:9:465:22 | call to rassoc [element 1] | provenance | | +| hash_flow.rb:465:9:465:22 | call to rassoc [element 1] | hash_flow.rb:465:5:465:5 | b [element 1] | provenance | | +| hash_flow.rb:467:10:467:10 | b [element 1] | hash_flow.rb:467:10:467:13 | ...[...] | provenance | | +| hash_flow.rb:473:5:473:8 | hash [element :a] | hash_flow.rb:477:9:477:12 | hash [element :a] | provenance | | +| hash_flow.rb:474:15:474:25 | call to taint | hash_flow.rb:473:5:473:8 | hash [element :a] | provenance | | +| hash_flow.rb:477:5:477:5 | b [element :a] | hash_flow.rb:482:10:482:10 | b [element :a] | provenance | | +| hash_flow.rb:477:9:477:12 | hash [element :a] | hash_flow.rb:477:9:481:7 | call to reject [element :a] | provenance | | +| hash_flow.rb:477:9:477:12 | hash [element :a] | hash_flow.rb:477:29:477:33 | value | provenance | | +| hash_flow.rb:477:9:481:7 | call to reject [element :a] | hash_flow.rb:477:5:477:5 | b [element :a] | provenance | | +| hash_flow.rb:477:29:477:33 | value | hash_flow.rb:479:14:479:18 | value | provenance | | +| hash_flow.rb:482:10:482:10 | b [element :a] | hash_flow.rb:482:10:482:14 | ...[...] | provenance | | +| hash_flow.rb:488:5:488:8 | hash [element :a] | hash_flow.rb:492:9:492:12 | hash [element :a] | provenance | | +| hash_flow.rb:489:15:489:25 | call to taint | hash_flow.rb:488:5:488:8 | hash [element :a] | provenance | | +| hash_flow.rb:492:5:492:5 | b [element :a] | hash_flow.rb:497:10:497:10 | b [element :a] | provenance | | +| hash_flow.rb:492:9:492:12 | [post] hash [element :a] | hash_flow.rb:498:10:498:13 | hash [element :a] | provenance | | +| hash_flow.rb:492:9:492:12 | hash [element :a] | hash_flow.rb:492:9:492:12 | [post] hash [element :a] | provenance | | +| hash_flow.rb:492:9:492:12 | hash [element :a] | hash_flow.rb:492:9:496:7 | call to reject! [element :a] | provenance | | +| hash_flow.rb:492:9:492:12 | hash [element :a] | hash_flow.rb:492:30:492:34 | value | provenance | | +| hash_flow.rb:492:9:496:7 | call to reject! [element :a] | hash_flow.rb:492:5:492:5 | b [element :a] | provenance | | +| hash_flow.rb:492:30:492:34 | value | hash_flow.rb:494:14:494:18 | value | provenance | | +| hash_flow.rb:497:10:497:10 | b [element :a] | hash_flow.rb:497:10:497:14 | ...[...] | provenance | | +| hash_flow.rb:498:10:498:13 | hash [element :a] | hash_flow.rb:498:10:498:17 | ...[...] | provenance | | +| hash_flow.rb:504:5:504:8 | hash [element :a] | hash_flow.rb:512:19:512:22 | hash [element :a] | provenance | | +| hash_flow.rb:504:5:504:8 | hash [element :c] | hash_flow.rb:512:19:512:22 | hash [element :c] | provenance | | +| hash_flow.rb:505:15:505:25 | call to taint | hash_flow.rb:504:5:504:8 | hash [element :a] | provenance | | +| hash_flow.rb:507:15:507:25 | call to taint | hash_flow.rb:504:5:504:8 | hash [element :c] | provenance | | +| hash_flow.rb:512:5:512:9 | [post] hash2 [element :a] | hash_flow.rb:513:11:513:15 | hash2 [element :a] | provenance | | +| hash_flow.rb:512:5:512:9 | [post] hash2 [element :c] | hash_flow.rb:515:11:515:15 | hash2 [element :c] | provenance | | +| hash_flow.rb:512:19:512:22 | hash [element :a] | hash_flow.rb:512:5:512:9 | [post] hash2 [element :a] | provenance | | +| hash_flow.rb:512:19:512:22 | hash [element :c] | hash_flow.rb:512:5:512:9 | [post] hash2 [element :c] | provenance | | +| hash_flow.rb:513:11:513:15 | hash2 [element :a] | hash_flow.rb:513:11:513:19 | ...[...] | provenance | | +| hash_flow.rb:513:11:513:19 | ...[...] | hash_flow.rb:513:10:513:20 | ( ... ) | provenance | | +| hash_flow.rb:515:11:515:15 | hash2 [element :c] | hash_flow.rb:515:11:515:19 | ...[...] | provenance | | +| hash_flow.rb:515:11:515:19 | ...[...] | hash_flow.rb:515:10:515:20 | ( ... ) | provenance | | +| hash_flow.rb:519:5:519:8 | hash [element :a] | hash_flow.rb:524:9:524:12 | hash [element :a] | provenance | | +| hash_flow.rb:519:5:519:8 | hash [element :c] | hash_flow.rb:524:9:524:12 | hash [element :c] | provenance | | +| hash_flow.rb:520:15:520:25 | call to taint | hash_flow.rb:519:5:519:8 | hash [element :a] | provenance | | +| hash_flow.rb:522:15:522:25 | call to taint | hash_flow.rb:519:5:519:8 | hash [element :c] | provenance | | +| hash_flow.rb:524:5:524:5 | b [element :a] | hash_flow.rb:529:11:529:11 | b [element :a] | provenance | | +| hash_flow.rb:524:9:524:12 | hash [element :a] | hash_flow.rb:524:9:528:7 | call to select [element :a] | provenance | | +| hash_flow.rb:524:9:524:12 | hash [element :a] | hash_flow.rb:524:30:524:34 | value | provenance | | +| hash_flow.rb:524:9:524:12 | hash [element :c] | hash_flow.rb:524:30:524:34 | value | provenance | | +| hash_flow.rb:524:9:528:7 | call to select [element :a] | hash_flow.rb:524:5:524:5 | b [element :a] | provenance | | +| hash_flow.rb:524:30:524:34 | value | hash_flow.rb:526:14:526:18 | value | provenance | | +| hash_flow.rb:529:11:529:11 | b [element :a] | hash_flow.rb:529:11:529:15 | ...[...] | provenance | | +| hash_flow.rb:529:11:529:15 | ...[...] | hash_flow.rb:529:10:529:16 | ( ... ) | provenance | | +| hash_flow.rb:535:5:535:8 | hash [element :a] | hash_flow.rb:540:5:540:8 | hash [element :a] | provenance | | +| hash_flow.rb:535:5:535:8 | hash [element :c] | hash_flow.rb:540:5:540:8 | hash [element :c] | provenance | | +| hash_flow.rb:536:15:536:25 | call to taint | hash_flow.rb:535:5:535:8 | hash [element :a] | provenance | | +| hash_flow.rb:538:15:538:25 | call to taint | hash_flow.rb:535:5:535:8 | hash [element :c] | provenance | | +| hash_flow.rb:540:5:540:8 | [post] hash [element :a] | hash_flow.rb:545:11:545:14 | hash [element :a] | provenance | | +| hash_flow.rb:540:5:540:8 | hash [element :a] | hash_flow.rb:540:5:540:8 | [post] hash [element :a] | provenance | | +| hash_flow.rb:540:5:540:8 | hash [element :a] | hash_flow.rb:540:27:540:31 | value | provenance | | +| hash_flow.rb:540:5:540:8 | hash [element :c] | hash_flow.rb:540:27:540:31 | value | provenance | | +| hash_flow.rb:540:27:540:31 | value | hash_flow.rb:542:14:542:18 | value | provenance | | +| hash_flow.rb:545:11:545:14 | hash [element :a] | hash_flow.rb:545:11:545:18 | ...[...] | provenance | | +| hash_flow.rb:545:11:545:18 | ...[...] | hash_flow.rb:545:10:545:19 | ( ... ) | provenance | | +| hash_flow.rb:551:5:551:8 | hash [element :a] | hash_flow.rb:556:9:556:12 | hash [element :a] | provenance | | +| hash_flow.rb:551:5:551:8 | hash [element :c] | hash_flow.rb:556:9:556:12 | hash [element :c] | provenance | | +| hash_flow.rb:552:15:552:25 | call to taint | hash_flow.rb:551:5:551:8 | hash [element :a] | provenance | | +| hash_flow.rb:554:15:554:25 | call to taint | hash_flow.rb:551:5:551:8 | hash [element :c] | provenance | | +| hash_flow.rb:556:5:556:5 | b [element 1] | hash_flow.rb:559:11:559:11 | b [element 1] | provenance | | +| hash_flow.rb:556:9:556:12 | [post] hash [element :a] | hash_flow.rb:557:11:557:14 | hash [element :a] | provenance | | +| hash_flow.rb:556:9:556:12 | hash [element :a] | hash_flow.rb:556:9:556:12 | [post] hash [element :a] | provenance | | +| hash_flow.rb:556:9:556:12 | hash [element :a] | hash_flow.rb:556:9:556:18 | call to shift [element 1] | provenance | | +| hash_flow.rb:556:9:556:12 | hash [element :c] | hash_flow.rb:556:9:556:18 | call to shift [element 1] | provenance | | +| hash_flow.rb:556:9:556:18 | call to shift [element 1] | hash_flow.rb:556:5:556:5 | b [element 1] | provenance | | +| hash_flow.rb:557:11:557:14 | hash [element :a] | hash_flow.rb:557:11:557:18 | ...[...] | provenance | | +| hash_flow.rb:557:11:557:18 | ...[...] | hash_flow.rb:557:10:557:19 | ( ... ) | provenance | | +| hash_flow.rb:559:11:559:11 | b [element 1] | hash_flow.rb:559:11:559:14 | ...[...] | provenance | | +| hash_flow.rb:559:11:559:14 | ...[...] | hash_flow.rb:559:10:559:15 | ( ... ) | provenance | | +| hash_flow.rb:565:5:565:8 | hash [element :a] | hash_flow.rb:570:9:570:12 | hash [element :a] | provenance | | +| hash_flow.rb:565:5:565:8 | hash [element :a] | hash_flow.rb:575:9:575:12 | hash [element :a] | provenance | | +| hash_flow.rb:565:5:565:8 | hash [element :c] | hash_flow.rb:575:9:575:12 | hash [element :c] | provenance | | +| hash_flow.rb:566:15:566:25 | call to taint | hash_flow.rb:565:5:565:8 | hash [element :a] | provenance | | +| hash_flow.rb:568:15:568:25 | call to taint | hash_flow.rb:565:5:565:8 | hash [element :c] | provenance | | +| hash_flow.rb:570:5:570:5 | b [element :a] | hash_flow.rb:571:11:571:11 | b [element :a] | provenance | | +| hash_flow.rb:570:9:570:12 | hash [element :a] | hash_flow.rb:570:9:570:26 | call to slice [element :a] | provenance | | +| hash_flow.rb:570:9:570:26 | call to slice [element :a] | hash_flow.rb:570:5:570:5 | b [element :a] | provenance | | +| hash_flow.rb:571:11:571:11 | b [element :a] | hash_flow.rb:571:11:571:15 | ...[...] | provenance | | +| hash_flow.rb:571:11:571:15 | ...[...] | hash_flow.rb:571:10:571:16 | ( ... ) | provenance | | +| hash_flow.rb:575:5:575:5 | c [element :a] | hash_flow.rb:576:11:576:11 | c [element :a] | provenance | | +| hash_flow.rb:575:5:575:5 | c [element :c] | hash_flow.rb:578:11:578:11 | c [element :c] | provenance | | +| hash_flow.rb:575:9:575:12 | hash [element :a] | hash_flow.rb:575:9:575:25 | call to slice [element :a] | provenance | | +| hash_flow.rb:575:9:575:12 | hash [element :c] | hash_flow.rb:575:9:575:25 | call to slice [element :c] | provenance | | +| hash_flow.rb:575:9:575:25 | call to slice [element :a] | hash_flow.rb:575:5:575:5 | c [element :a] | provenance | | +| hash_flow.rb:575:9:575:25 | call to slice [element :c] | hash_flow.rb:575:5:575:5 | c [element :c] | provenance | | +| hash_flow.rb:576:11:576:11 | c [element :a] | hash_flow.rb:576:11:576:15 | ...[...] | provenance | | +| hash_flow.rb:576:11:576:15 | ...[...] | hash_flow.rb:576:10:576:16 | ( ... ) | provenance | | +| hash_flow.rb:578:11:578:11 | c [element :c] | hash_flow.rb:578:11:578:15 | ...[...] | provenance | | +| hash_flow.rb:578:11:578:15 | ...[...] | hash_flow.rb:578:10:578:16 | ( ... ) | provenance | | +| hash_flow.rb:584:5:584:8 | hash [element :a] | hash_flow.rb:589:9:589:12 | hash [element :a] | provenance | | +| hash_flow.rb:584:5:584:8 | hash [element :c] | hash_flow.rb:589:9:589:12 | hash [element :c] | provenance | | +| hash_flow.rb:585:15:585:25 | call to taint | hash_flow.rb:584:5:584:8 | hash [element :a] | provenance | | +| hash_flow.rb:587:15:587:25 | call to taint | hash_flow.rb:584:5:584:8 | hash [element :c] | provenance | | +| hash_flow.rb:589:5:589:5 | a [element, element 1] | hash_flow.rb:591:11:591:11 | a [element, element 1] | provenance | | +| hash_flow.rb:589:9:589:12 | hash [element :a] | hash_flow.rb:589:9:589:17 | call to to_a [element, element 1] | provenance | | +| hash_flow.rb:589:9:589:12 | hash [element :c] | hash_flow.rb:589:9:589:17 | call to to_a [element, element 1] | provenance | | +| hash_flow.rb:589:9:589:17 | call to to_a [element, element 1] | hash_flow.rb:589:5:589:5 | a [element, element 1] | provenance | | +| hash_flow.rb:591:11:591:11 | a [element, element 1] | hash_flow.rb:591:11:591:14 | ...[...] [element 1] | provenance | | +| hash_flow.rb:591:11:591:14 | ...[...] [element 1] | hash_flow.rb:591:11:591:17 | ...[...] | provenance | | +| hash_flow.rb:591:11:591:17 | ...[...] | hash_flow.rb:591:10:591:18 | ( ... ) | provenance | | +| hash_flow.rb:597:5:597:8 | hash [element :a] | hash_flow.rb:602:9:602:12 | hash [element :a] | provenance | | +| hash_flow.rb:597:5:597:8 | hash [element :a] | hash_flow.rb:607:9:607:12 | hash [element :a] | provenance | | +| hash_flow.rb:597:5:597:8 | hash [element :c] | hash_flow.rb:602:9:602:12 | hash [element :c] | provenance | | +| hash_flow.rb:597:5:597:8 | hash [element :c] | hash_flow.rb:607:9:607:12 | hash [element :c] | provenance | | +| hash_flow.rb:598:15:598:25 | call to taint | hash_flow.rb:597:5:597:8 | hash [element :a] | provenance | | +| hash_flow.rb:600:15:600:25 | call to taint | hash_flow.rb:597:5:597:8 | hash [element :c] | provenance | | +| hash_flow.rb:602:5:602:5 | a [element :a] | hash_flow.rb:603:11:603:11 | a [element :a] | provenance | | +| hash_flow.rb:602:5:602:5 | a [element :c] | hash_flow.rb:605:11:605:11 | a [element :c] | provenance | | +| hash_flow.rb:602:9:602:12 | hash [element :a] | hash_flow.rb:602:9:602:17 | call to to_h [element :a] | provenance | | +| hash_flow.rb:602:9:602:12 | hash [element :c] | hash_flow.rb:602:9:602:17 | call to to_h [element :c] | provenance | | +| hash_flow.rb:602:9:602:17 | call to to_h [element :a] | hash_flow.rb:602:5:602:5 | a [element :a] | provenance | | +| hash_flow.rb:602:9:602:17 | call to to_h [element :c] | hash_flow.rb:602:5:602:5 | a [element :c] | provenance | | +| hash_flow.rb:603:11:603:11 | a [element :a] | hash_flow.rb:603:11:603:15 | ...[...] | provenance | | +| hash_flow.rb:603:11:603:15 | ...[...] | hash_flow.rb:603:10:603:16 | ( ... ) | provenance | | +| hash_flow.rb:605:11:605:11 | a [element :c] | hash_flow.rb:605:11:605:15 | ...[...] | provenance | | +| hash_flow.rb:605:11:605:15 | ...[...] | hash_flow.rb:605:10:605:16 | ( ... ) | provenance | | +| hash_flow.rb:607:5:607:5 | b [element] | hash_flow.rb:612:11:612:11 | b [element] | provenance | | +| hash_flow.rb:607:9:607:12 | hash [element :a] | hash_flow.rb:607:28:607:32 | value | provenance | | +| hash_flow.rb:607:9:607:12 | hash [element :c] | hash_flow.rb:607:28:607:32 | value | provenance | | +| hash_flow.rb:607:9:611:7 | call to to_h [element] | hash_flow.rb:607:5:607:5 | b [element] | provenance | | +| hash_flow.rb:607:28:607:32 | value | hash_flow.rb:609:14:609:18 | value | provenance | | +| hash_flow.rb:610:14:610:24 | call to taint | hash_flow.rb:607:9:611:7 | call to to_h [element] | provenance | | +| hash_flow.rb:612:11:612:11 | b [element] | hash_flow.rb:612:11:612:15 | ...[...] | provenance | | +| hash_flow.rb:612:11:612:15 | ...[...] | hash_flow.rb:612:10:612:16 | ( ... ) | provenance | | +| hash_flow.rb:618:5:618:8 | hash [element :a] | hash_flow.rb:623:9:623:12 | hash [element :a] | provenance | | +| hash_flow.rb:618:5:618:8 | hash [element :c] | hash_flow.rb:623:9:623:12 | hash [element :c] | provenance | | +| hash_flow.rb:619:15:619:25 | call to taint | hash_flow.rb:618:5:618:8 | hash [element :a] | provenance | | +| hash_flow.rb:621:15:621:25 | call to taint | hash_flow.rb:618:5:618:8 | hash [element :c] | provenance | | +| hash_flow.rb:623:5:623:5 | a [element] | hash_flow.rb:624:11:624:11 | a [element] | provenance | | +| hash_flow.rb:623:5:623:5 | a [element] | hash_flow.rb:625:11:625:11 | a [element] | provenance | | +| hash_flow.rb:623:5:623:5 | a [element] | hash_flow.rb:626:11:626:11 | a [element] | provenance | | +| hash_flow.rb:623:9:623:12 | hash [element :a] | hash_flow.rb:623:9:623:45 | call to transform_keys [element] | provenance | | +| hash_flow.rb:623:9:623:12 | hash [element :c] | hash_flow.rb:623:9:623:45 | call to transform_keys [element] | provenance | | +| hash_flow.rb:623:9:623:45 | call to transform_keys [element] | hash_flow.rb:623:5:623:5 | a [element] | provenance | | +| hash_flow.rb:624:11:624:11 | a [element] | hash_flow.rb:624:11:624:16 | ...[...] | provenance | | +| hash_flow.rb:624:11:624:16 | ...[...] | hash_flow.rb:624:10:624:17 | ( ... ) | provenance | | +| hash_flow.rb:625:11:625:11 | a [element] | hash_flow.rb:625:11:625:16 | ...[...] | provenance | | +| hash_flow.rb:625:11:625:16 | ...[...] | hash_flow.rb:625:10:625:17 | ( ... ) | provenance | | +| hash_flow.rb:626:11:626:11 | a [element] | hash_flow.rb:626:11:626:16 | ...[...] | provenance | | +| hash_flow.rb:626:11:626:16 | ...[...] | hash_flow.rb:626:10:626:17 | ( ... ) | provenance | | +| hash_flow.rb:632:5:632:8 | hash [element :a] | hash_flow.rb:639:5:639:8 | hash [element :a] | provenance | | +| hash_flow.rb:632:5:632:8 | hash [element :c] | hash_flow.rb:639:5:639:8 | hash [element :c] | provenance | | +| hash_flow.rb:633:15:633:25 | call to taint | hash_flow.rb:632:5:632:8 | hash [element :a] | provenance | | +| hash_flow.rb:635:15:635:25 | call to taint | hash_flow.rb:632:5:632:8 | hash [element :c] | provenance | | +| hash_flow.rb:637:5:637:8 | [post] hash [element] | hash_flow.rb:639:5:639:8 | hash [element] | provenance | | +| hash_flow.rb:637:5:637:8 | [post] hash [element] | hash_flow.rb:640:11:640:14 | hash [element] | provenance | | +| hash_flow.rb:637:5:637:8 | [post] hash [element] | hash_flow.rb:641:11:641:14 | hash [element] | provenance | | +| hash_flow.rb:637:5:637:8 | [post] hash [element] | hash_flow.rb:642:11:642:14 | hash [element] | provenance | | +| hash_flow.rb:637:15:637:25 | call to taint | hash_flow.rb:637:5:637:8 | [post] hash [element] | provenance | | +| hash_flow.rb:639:5:639:8 | [post] hash [element] | hash_flow.rb:640:11:640:14 | hash [element] | provenance | | +| hash_flow.rb:639:5:639:8 | [post] hash [element] | hash_flow.rb:641:11:641:14 | hash [element] | provenance | | +| hash_flow.rb:639:5:639:8 | [post] hash [element] | hash_flow.rb:642:11:642:14 | hash [element] | provenance | | +| hash_flow.rb:639:5:639:8 | hash [element :a] | hash_flow.rb:639:5:639:8 | [post] hash [element] | provenance | | +| hash_flow.rb:639:5:639:8 | hash [element :c] | hash_flow.rb:639:5:639:8 | [post] hash [element] | provenance | | +| hash_flow.rb:639:5:639:8 | hash [element] | hash_flow.rb:639:5:639:8 | [post] hash [element] | provenance | | +| hash_flow.rb:640:11:640:14 | hash [element] | hash_flow.rb:640:11:640:19 | ...[...] | provenance | | +| hash_flow.rb:640:11:640:19 | ...[...] | hash_flow.rb:640:10:640:20 | ( ... ) | provenance | | +| hash_flow.rb:641:11:641:14 | hash [element] | hash_flow.rb:641:11:641:19 | ...[...] | provenance | | +| hash_flow.rb:641:11:641:19 | ...[...] | hash_flow.rb:641:10:641:20 | ( ... ) | provenance | | +| hash_flow.rb:642:11:642:14 | hash [element] | hash_flow.rb:642:11:642:19 | ...[...] | provenance | | +| hash_flow.rb:642:11:642:19 | ...[...] | hash_flow.rb:642:10:642:20 | ( ... ) | provenance | | +| hash_flow.rb:648:5:648:8 | hash [element :a] | hash_flow.rb:653:9:653:12 | hash [element :a] | provenance | | +| hash_flow.rb:648:5:648:8 | hash [element :a] | hash_flow.rb:657:11:657:14 | hash [element :a] | provenance | | +| hash_flow.rb:648:5:648:8 | hash [element :c] | hash_flow.rb:653:9:653:12 | hash [element :c] | provenance | | +| hash_flow.rb:649:15:649:25 | call to taint | hash_flow.rb:648:5:648:8 | hash [element :a] | provenance | | +| hash_flow.rb:651:15:651:25 | call to taint | hash_flow.rb:648:5:648:8 | hash [element :c] | provenance | | +| hash_flow.rb:653:5:653:5 | b [element] | hash_flow.rb:658:11:658:11 | b [element] | provenance | | +| hash_flow.rb:653:9:653:12 | hash [element :a] | hash_flow.rb:653:35:653:39 | value | provenance | | +| hash_flow.rb:653:9:653:12 | hash [element :c] | hash_flow.rb:653:35:653:39 | value | provenance | | +| hash_flow.rb:653:9:656:7 | call to transform_values [element] | hash_flow.rb:653:5:653:5 | b [element] | provenance | | +| hash_flow.rb:653:35:653:39 | value | hash_flow.rb:654:14:654:18 | value | provenance | | +| hash_flow.rb:655:9:655:19 | call to taint | hash_flow.rb:653:9:656:7 | call to transform_values [element] | provenance | | +| hash_flow.rb:657:11:657:14 | hash [element :a] | hash_flow.rb:657:11:657:18 | ...[...] | provenance | | +| hash_flow.rb:657:11:657:18 | ...[...] | hash_flow.rb:657:10:657:19 | ( ... ) | provenance | | +| hash_flow.rb:658:11:658:11 | b [element] | hash_flow.rb:658:11:658:15 | ...[...] | provenance | | +| hash_flow.rb:658:11:658:15 | ...[...] | hash_flow.rb:658:10:658:16 | ( ... ) | provenance | | +| hash_flow.rb:664:5:664:8 | hash [element :a] | hash_flow.rb:669:5:669:8 | hash [element :a] | provenance | | +| hash_flow.rb:664:5:664:8 | hash [element :c] | hash_flow.rb:669:5:669:8 | hash [element :c] | provenance | | +| hash_flow.rb:665:15:665:25 | call to taint | hash_flow.rb:664:5:664:8 | hash [element :a] | provenance | | +| hash_flow.rb:667:15:667:25 | call to taint | hash_flow.rb:664:5:664:8 | hash [element :c] | provenance | | +| hash_flow.rb:669:5:669:8 | [post] hash [element] | hash_flow.rb:673:11:673:14 | hash [element] | provenance | | +| hash_flow.rb:669:5:669:8 | hash [element :a] | hash_flow.rb:669:32:669:36 | value | provenance | | +| hash_flow.rb:669:5:669:8 | hash [element :c] | hash_flow.rb:669:32:669:36 | value | provenance | | +| hash_flow.rb:669:32:669:36 | value | hash_flow.rb:670:14:670:18 | value | provenance | | +| hash_flow.rb:671:9:671:19 | call to taint | hash_flow.rb:669:5:669:8 | [post] hash [element] | provenance | | +| hash_flow.rb:673:11:673:14 | hash [element] | hash_flow.rb:673:11:673:18 | ...[...] | provenance | | +| hash_flow.rb:673:11:673:18 | ...[...] | hash_flow.rb:673:10:673:19 | ( ... ) | provenance | | +| hash_flow.rb:679:5:679:9 | hash1 [element :a] | hash_flow.rb:689:12:689:16 | hash1 [element :a] | provenance | | +| hash_flow.rb:679:5:679:9 | hash1 [element :c] | hash_flow.rb:689:12:689:16 | hash1 [element :c] | provenance | | +| hash_flow.rb:680:15:680:25 | call to taint | hash_flow.rb:679:5:679:9 | hash1 [element :a] | provenance | | +| hash_flow.rb:682:15:682:25 | call to taint | hash_flow.rb:679:5:679:9 | hash1 [element :c] | provenance | | +| hash_flow.rb:684:5:684:9 | hash2 [element :d] | hash_flow.rb:689:25:689:29 | hash2 [element :d] | provenance | | +| hash_flow.rb:684:5:684:9 | hash2 [element :f] | hash_flow.rb:689:25:689:29 | hash2 [element :f] | provenance | | +| hash_flow.rb:685:15:685:25 | call to taint | hash_flow.rb:684:5:684:9 | hash2 [element :d] | provenance | | +| hash_flow.rb:687:15:687:25 | call to taint | hash_flow.rb:684:5:684:9 | hash2 [element :f] | provenance | | +| hash_flow.rb:689:5:689:8 | hash [element :a] | hash_flow.rb:694:11:694:14 | hash [element :a] | provenance | | +| hash_flow.rb:689:5:689:8 | hash [element :c] | hash_flow.rb:696:11:696:14 | hash [element :c] | provenance | | +| hash_flow.rb:689:5:689:8 | hash [element :d] | hash_flow.rb:697:11:697:14 | hash [element :d] | provenance | | +| hash_flow.rb:689:5:689:8 | hash [element :f] | hash_flow.rb:699:11:699:14 | hash [element :f] | provenance | | +| hash_flow.rb:689:12:689:16 | [post] hash1 [element :a] | hash_flow.rb:701:11:701:15 | hash1 [element :a] | provenance | | +| hash_flow.rb:689:12:689:16 | [post] hash1 [element :c] | hash_flow.rb:703:11:703:15 | hash1 [element :c] | provenance | | +| hash_flow.rb:689:12:689:16 | [post] hash1 [element :d] | hash_flow.rb:704:11:704:15 | hash1 [element :d] | provenance | | +| hash_flow.rb:689:12:689:16 | [post] hash1 [element :f] | hash_flow.rb:706:11:706:15 | hash1 [element :f] | provenance | | +| hash_flow.rb:689:12:689:16 | hash1 [element :a] | hash_flow.rb:689:12:689:16 | [post] hash1 [element :a] | provenance | | +| hash_flow.rb:689:12:689:16 | hash1 [element :a] | hash_flow.rb:689:12:693:7 | call to update [element :a] | provenance | | +| hash_flow.rb:689:12:689:16 | hash1 [element :a] | hash_flow.rb:689:41:689:49 | old_value | provenance | | +| hash_flow.rb:689:12:689:16 | hash1 [element :a] | hash_flow.rb:689:52:689:60 | new_value | provenance | | +| hash_flow.rb:689:12:689:16 | hash1 [element :c] | hash_flow.rb:689:12:689:16 | [post] hash1 [element :c] | provenance | | +| hash_flow.rb:689:12:689:16 | hash1 [element :c] | hash_flow.rb:689:12:693:7 | call to update [element :c] | provenance | | +| hash_flow.rb:689:12:689:16 | hash1 [element :c] | hash_flow.rb:689:41:689:49 | old_value | provenance | | +| hash_flow.rb:689:12:689:16 | hash1 [element :c] | hash_flow.rb:689:52:689:60 | new_value | provenance | | +| hash_flow.rb:689:12:693:7 | call to update [element :a] | hash_flow.rb:689:5:689:8 | hash [element :a] | provenance | | +| hash_flow.rb:689:12:693:7 | call to update [element :c] | hash_flow.rb:689:5:689:8 | hash [element :c] | provenance | | +| hash_flow.rb:689:12:693:7 | call to update [element :d] | hash_flow.rb:689:5:689:8 | hash [element :d] | provenance | | +| hash_flow.rb:689:12:693:7 | call to update [element :f] | hash_flow.rb:689:5:689:8 | hash [element :f] | provenance | | +| hash_flow.rb:689:25:689:29 | hash2 [element :d] | hash_flow.rb:689:12:689:16 | [post] hash1 [element :d] | provenance | | +| hash_flow.rb:689:25:689:29 | hash2 [element :d] | hash_flow.rb:689:12:693:7 | call to update [element :d] | provenance | | +| hash_flow.rb:689:25:689:29 | hash2 [element :d] | hash_flow.rb:689:41:689:49 | old_value | provenance | | +| hash_flow.rb:689:25:689:29 | hash2 [element :d] | hash_flow.rb:689:52:689:60 | new_value | provenance | | +| hash_flow.rb:689:25:689:29 | hash2 [element :f] | hash_flow.rb:689:12:689:16 | [post] hash1 [element :f] | provenance | | +| hash_flow.rb:689:25:689:29 | hash2 [element :f] | hash_flow.rb:689:12:693:7 | call to update [element :f] | provenance | | +| hash_flow.rb:689:25:689:29 | hash2 [element :f] | hash_flow.rb:689:41:689:49 | old_value | provenance | | +| hash_flow.rb:689:25:689:29 | hash2 [element :f] | hash_flow.rb:689:52:689:60 | new_value | provenance | | +| hash_flow.rb:689:41:689:49 | old_value | hash_flow.rb:691:14:691:22 | old_value | provenance | | +| hash_flow.rb:689:52:689:60 | new_value | hash_flow.rb:692:14:692:22 | new_value | provenance | | +| hash_flow.rb:694:11:694:14 | hash [element :a] | hash_flow.rb:694:11:694:18 | ...[...] | provenance | | +| hash_flow.rb:694:11:694:18 | ...[...] | hash_flow.rb:694:10:694:19 | ( ... ) | provenance | | +| hash_flow.rb:696:11:696:14 | hash [element :c] | hash_flow.rb:696:11:696:18 | ...[...] | provenance | | +| hash_flow.rb:696:11:696:18 | ...[...] | hash_flow.rb:696:10:696:19 | ( ... ) | provenance | | +| hash_flow.rb:697:11:697:14 | hash [element :d] | hash_flow.rb:697:11:697:18 | ...[...] | provenance | | +| hash_flow.rb:697:11:697:18 | ...[...] | hash_flow.rb:697:10:697:19 | ( ... ) | provenance | | +| hash_flow.rb:699:11:699:14 | hash [element :f] | hash_flow.rb:699:11:699:18 | ...[...] | provenance | | +| hash_flow.rb:699:11:699:18 | ...[...] | hash_flow.rb:699:10:699:19 | ( ... ) | provenance | | +| hash_flow.rb:701:11:701:15 | hash1 [element :a] | hash_flow.rb:701:11:701:19 | ...[...] | provenance | | +| hash_flow.rb:701:11:701:19 | ...[...] | hash_flow.rb:701:10:701:20 | ( ... ) | provenance | | +| hash_flow.rb:703:11:703:15 | hash1 [element :c] | hash_flow.rb:703:11:703:19 | ...[...] | provenance | | +| hash_flow.rb:703:11:703:19 | ...[...] | hash_flow.rb:703:10:703:20 | ( ... ) | provenance | | +| hash_flow.rb:704:11:704:15 | hash1 [element :d] | hash_flow.rb:704:11:704:19 | ...[...] | provenance | | +| hash_flow.rb:704:11:704:19 | ...[...] | hash_flow.rb:704:10:704:20 | ( ... ) | provenance | | +| hash_flow.rb:706:11:706:15 | hash1 [element :f] | hash_flow.rb:706:11:706:19 | ...[...] | provenance | | +| hash_flow.rb:706:11:706:19 | ...[...] | hash_flow.rb:706:10:706:20 | ( ... ) | provenance | | +| hash_flow.rb:712:5:712:8 | hash [element :a] | hash_flow.rb:717:9:717:12 | hash [element :a] | provenance | | +| hash_flow.rb:712:5:712:8 | hash [element :c] | hash_flow.rb:717:9:717:12 | hash [element :c] | provenance | | +| hash_flow.rb:713:15:713:25 | call to taint | hash_flow.rb:712:5:712:8 | hash [element :a] | provenance | | +| hash_flow.rb:715:15:715:25 | call to taint | hash_flow.rb:712:5:712:8 | hash [element :c] | provenance | | +| hash_flow.rb:717:5:717:5 | a [element] | hash_flow.rb:718:11:718:11 | a [element] | provenance | | +| hash_flow.rb:717:9:717:12 | hash [element :a] | hash_flow.rb:717:9:717:19 | call to values [element] | provenance | | +| hash_flow.rb:717:9:717:12 | hash [element :c] | hash_flow.rb:717:9:717:19 | call to values [element] | provenance | | +| hash_flow.rb:717:9:717:19 | call to values [element] | hash_flow.rb:717:5:717:5 | a [element] | provenance | | +| hash_flow.rb:718:11:718:11 | a [element] | hash_flow.rb:718:11:718:14 | ...[...] | provenance | | +| hash_flow.rb:718:11:718:14 | ...[...] | hash_flow.rb:718:10:718:15 | ( ... ) | provenance | | +| hash_flow.rb:724:5:724:8 | hash [element :a] | hash_flow.rb:729:9:729:12 | hash [element :a] | provenance | | +| hash_flow.rb:724:5:724:8 | hash [element :a] | hash_flow.rb:731:9:731:12 | hash [element :a] | provenance | | +| hash_flow.rb:724:5:724:8 | hash [element :c] | hash_flow.rb:731:9:731:12 | hash [element :c] | provenance | | +| hash_flow.rb:725:15:725:25 | call to taint | hash_flow.rb:724:5:724:8 | hash [element :a] | provenance | | +| hash_flow.rb:727:15:727:25 | call to taint | hash_flow.rb:724:5:724:8 | hash [element :c] | provenance | | +| hash_flow.rb:729:5:729:5 | b [element 0] | hash_flow.rb:730:10:730:10 | b [element 0] | provenance | | +| hash_flow.rb:729:9:729:12 | hash [element :a] | hash_flow.rb:729:9:729:26 | call to values_at [element 0] | provenance | | +| hash_flow.rb:729:9:729:26 | call to values_at [element 0] | hash_flow.rb:729:5:729:5 | b [element 0] | provenance | | +| hash_flow.rb:730:10:730:10 | b [element 0] | hash_flow.rb:730:10:730:13 | ...[...] | provenance | | +| hash_flow.rb:731:5:731:5 | b [element] | hash_flow.rb:732:10:732:10 | b [element] | provenance | | +| hash_flow.rb:731:9:731:12 | hash [element :a] | hash_flow.rb:731:9:731:31 | call to fetch_values [element] | provenance | | +| hash_flow.rb:731:9:731:12 | hash [element :c] | hash_flow.rb:731:9:731:31 | call to fetch_values [element] | provenance | | +| hash_flow.rb:731:9:731:31 | call to fetch_values [element] | hash_flow.rb:731:5:731:5 | b [element] | provenance | | +| hash_flow.rb:732:10:732:10 | b [element] | hash_flow.rb:732:10:732:13 | ...[...] | provenance | | +| hash_flow.rb:738:5:738:9 | hash1 [element :a] | hash_flow.rb:748:16:748:20 | hash1 [element :a] | provenance | | +| hash_flow.rb:738:5:738:9 | hash1 [element :c] | hash_flow.rb:748:16:748:20 | hash1 [element :c] | provenance | | +| hash_flow.rb:739:15:739:25 | call to taint | hash_flow.rb:738:5:738:9 | hash1 [element :a] | provenance | | +| hash_flow.rb:741:15:741:25 | call to taint | hash_flow.rb:738:5:738:9 | hash1 [element :c] | provenance | | +| hash_flow.rb:743:5:743:9 | hash2 [element :d] | hash_flow.rb:748:44:748:48 | hash2 [element :d] | provenance | | +| hash_flow.rb:743:5:743:9 | hash2 [element :f] | hash_flow.rb:748:44:748:48 | hash2 [element :f] | provenance | | +| hash_flow.rb:744:15:744:25 | call to taint | hash_flow.rb:743:5:743:9 | hash2 [element :d] | provenance | | +| hash_flow.rb:746:15:746:25 | call to taint | hash_flow.rb:743:5:743:9 | hash2 [element :f] | provenance | | +| hash_flow.rb:748:5:748:8 | hash [element :a] | hash_flow.rb:749:10:749:13 | hash [element :a] | provenance | | +| hash_flow.rb:748:5:748:8 | hash [element :c] | hash_flow.rb:751:10:751:13 | hash [element :c] | provenance | | +| hash_flow.rb:748:5:748:8 | hash [element :d] | hash_flow.rb:752:10:752:13 | hash [element :d] | provenance | | +| hash_flow.rb:748:5:748:8 | hash [element :f] | hash_flow.rb:754:10:754:13 | hash [element :f] | provenance | | +| hash_flow.rb:748:5:748:8 | hash [element :g] | hash_flow.rb:755:10:755:13 | hash [element :g] | provenance | | +| hash_flow.rb:748:14:748:20 | ** ... [element :a] | hash_flow.rb:748:5:748:8 | hash [element :a] | provenance | | +| hash_flow.rb:748:14:748:20 | ** ... [element :c] | hash_flow.rb:748:5:748:8 | hash [element :c] | provenance | | +| hash_flow.rb:748:16:748:20 | hash1 [element :a] | hash_flow.rb:748:14:748:20 | ** ... [element :a] | provenance | | +| hash_flow.rb:748:16:748:20 | hash1 [element :c] | hash_flow.rb:748:14:748:20 | ** ... [element :c] | provenance | | +| hash_flow.rb:748:29:748:39 | call to taint | hash_flow.rb:748:5:748:8 | hash [element :g] | provenance | | +| hash_flow.rb:748:42:748:48 | ** ... [element :d] | hash_flow.rb:748:5:748:8 | hash [element :d] | provenance | | +| hash_flow.rb:748:42:748:48 | ** ... [element :f] | hash_flow.rb:748:5:748:8 | hash [element :f] | provenance | | +| hash_flow.rb:748:44:748:48 | hash2 [element :d] | hash_flow.rb:748:42:748:48 | ** ... [element :d] | provenance | | +| hash_flow.rb:748:44:748:48 | hash2 [element :f] | hash_flow.rb:748:42:748:48 | ** ... [element :f] | provenance | | +| hash_flow.rb:749:10:749:13 | hash [element :a] | hash_flow.rb:749:10:749:17 | ...[...] | provenance | | +| hash_flow.rb:751:10:751:13 | hash [element :c] | hash_flow.rb:751:10:751:17 | ...[...] | provenance | | +| hash_flow.rb:752:10:752:13 | hash [element :d] | hash_flow.rb:752:10:752:17 | ...[...] | provenance | | +| hash_flow.rb:754:10:754:13 | hash [element :f] | hash_flow.rb:754:10:754:17 | ...[...] | provenance | | +| hash_flow.rb:755:10:755:13 | hash [element :g] | hash_flow.rb:755:10:755:17 | ...[...] | provenance | | +| hash_flow.rb:762:5:762:8 | hash [element :a] | hash_flow.rb:769:10:769:13 | hash [element :a] | provenance | | +| hash_flow.rb:762:5:762:8 | hash [element :c] | hash_flow.rb:771:10:771:13 | hash [element :c] | provenance | | +| hash_flow.rb:762:5:762:8 | hash [element :c] | hash_flow.rb:774:9:774:12 | hash [element :c] | provenance | | +| hash_flow.rb:762:5:762:8 | hash [element :d] | hash_flow.rb:772:10:772:13 | hash [element :d] | provenance | | +| hash_flow.rb:763:15:763:25 | call to taint | hash_flow.rb:762:5:762:8 | hash [element :a] | provenance | | +| hash_flow.rb:765:15:765:25 | call to taint | hash_flow.rb:762:5:762:8 | hash [element :c] | provenance | | +| hash_flow.rb:766:15:766:25 | call to taint | hash_flow.rb:762:5:762:8 | hash [element :d] | provenance | | +| hash_flow.rb:769:10:769:13 | hash [element :a] | hash_flow.rb:769:10:769:17 | ...[...] | provenance | | +| hash_flow.rb:771:10:771:13 | hash [element :c] | hash_flow.rb:771:10:771:17 | ...[...] | provenance | | +| hash_flow.rb:772:10:772:13 | hash [element :d] | hash_flow.rb:772:10:772:17 | ...[...] | provenance | | +| hash_flow.rb:774:5:774:5 | x [element :c] | hash_flow.rb:778:10:778:10 | x [element :c] | provenance | | +| hash_flow.rb:774:9:774:12 | [post] hash [element :c] | hash_flow.rb:783:10:783:13 | hash [element :c] | provenance | | +| hash_flow.rb:774:9:774:12 | hash [element :c] | hash_flow.rb:774:9:774:12 | [post] hash [element :c] | provenance | | +| hash_flow.rb:774:9:774:12 | hash [element :c] | hash_flow.rb:774:9:774:31 | call to except! [element :c] | provenance | | +| hash_flow.rb:774:9:774:31 | call to except! [element :c] | hash_flow.rb:774:5:774:5 | x [element :c] | provenance | | +| hash_flow.rb:778:10:778:10 | x [element :c] | hash_flow.rb:778:10:778:14 | ...[...] | provenance | | +| hash_flow.rb:783:10:783:13 | hash [element :c] | hash_flow.rb:783:10:783:17 | ...[...] | provenance | | +| hash_flow.rb:790:5:790:9 | hash1 [element :a] | hash_flow.rb:800:12:800:16 | hash1 [element :a] | provenance | | +| hash_flow.rb:790:5:790:9 | hash1 [element :c] | hash_flow.rb:800:12:800:16 | hash1 [element :c] | provenance | | +| hash_flow.rb:791:15:791:25 | call to taint | hash_flow.rb:790:5:790:9 | hash1 [element :a] | provenance | | +| hash_flow.rb:793:15:793:25 | call to taint | hash_flow.rb:790:5:790:9 | hash1 [element :c] | provenance | | +| hash_flow.rb:795:5:795:9 | hash2 [element :d] | hash_flow.rb:800:29:800:33 | hash2 [element :d] | provenance | | +| hash_flow.rb:795:5:795:9 | hash2 [element :f] | hash_flow.rb:800:29:800:33 | hash2 [element :f] | provenance | | +| hash_flow.rb:796:15:796:25 | call to taint | hash_flow.rb:795:5:795:9 | hash2 [element :d] | provenance | | +| hash_flow.rb:798:15:798:25 | call to taint | hash_flow.rb:795:5:795:9 | hash2 [element :f] | provenance | | +| hash_flow.rb:800:5:800:8 | hash [element :a] | hash_flow.rb:805:11:805:14 | hash [element :a] | provenance | | +| hash_flow.rb:800:5:800:8 | hash [element :c] | hash_flow.rb:807:11:807:14 | hash [element :c] | provenance | | +| hash_flow.rb:800:5:800:8 | hash [element :d] | hash_flow.rb:808:11:808:14 | hash [element :d] | provenance | | +| hash_flow.rb:800:5:800:8 | hash [element :f] | hash_flow.rb:810:11:810:14 | hash [element :f] | provenance | | +| hash_flow.rb:800:12:800:16 | hash1 [element :a] | hash_flow.rb:800:12:804:7 | call to deep_merge [element :a] | provenance | | +| hash_flow.rb:800:12:800:16 | hash1 [element :a] | hash_flow.rb:800:45:800:53 | old_value | provenance | | +| hash_flow.rb:800:12:800:16 | hash1 [element :a] | hash_flow.rb:800:56:800:64 | new_value | provenance | | +| hash_flow.rb:800:12:800:16 | hash1 [element :c] | hash_flow.rb:800:12:804:7 | call to deep_merge [element :c] | provenance | | +| hash_flow.rb:800:12:800:16 | hash1 [element :c] | hash_flow.rb:800:45:800:53 | old_value | provenance | | +| hash_flow.rb:800:12:800:16 | hash1 [element :c] | hash_flow.rb:800:56:800:64 | new_value | provenance | | +| hash_flow.rb:800:12:804:7 | call to deep_merge [element :a] | hash_flow.rb:800:5:800:8 | hash [element :a] | provenance | | +| hash_flow.rb:800:12:804:7 | call to deep_merge [element :c] | hash_flow.rb:800:5:800:8 | hash [element :c] | provenance | | +| hash_flow.rb:800:12:804:7 | call to deep_merge [element :d] | hash_flow.rb:800:5:800:8 | hash [element :d] | provenance | | +| hash_flow.rb:800:12:804:7 | call to deep_merge [element :f] | hash_flow.rb:800:5:800:8 | hash [element :f] | provenance | | +| hash_flow.rb:800:29:800:33 | hash2 [element :d] | hash_flow.rb:800:12:804:7 | call to deep_merge [element :d] | provenance | | +| hash_flow.rb:800:29:800:33 | hash2 [element :d] | hash_flow.rb:800:45:800:53 | old_value | provenance | | +| hash_flow.rb:800:29:800:33 | hash2 [element :d] | hash_flow.rb:800:56:800:64 | new_value | provenance | | +| hash_flow.rb:800:29:800:33 | hash2 [element :f] | hash_flow.rb:800:12:804:7 | call to deep_merge [element :f] | provenance | | +| hash_flow.rb:800:29:800:33 | hash2 [element :f] | hash_flow.rb:800:45:800:53 | old_value | provenance | | +| hash_flow.rb:800:29:800:33 | hash2 [element :f] | hash_flow.rb:800:56:800:64 | new_value | provenance | | +| hash_flow.rb:800:45:800:53 | old_value | hash_flow.rb:802:14:802:22 | old_value | provenance | | +| hash_flow.rb:800:56:800:64 | new_value | hash_flow.rb:803:14:803:22 | new_value | provenance | | +| hash_flow.rb:805:11:805:14 | hash [element :a] | hash_flow.rb:805:11:805:18 | ...[...] | provenance | | +| hash_flow.rb:805:11:805:18 | ...[...] | hash_flow.rb:805:10:805:19 | ( ... ) | provenance | | +| hash_flow.rb:807:11:807:14 | hash [element :c] | hash_flow.rb:807:11:807:18 | ...[...] | provenance | | +| hash_flow.rb:807:11:807:18 | ...[...] | hash_flow.rb:807:10:807:19 | ( ... ) | provenance | | +| hash_flow.rb:808:11:808:14 | hash [element :d] | hash_flow.rb:808:11:808:18 | ...[...] | provenance | | +| hash_flow.rb:808:11:808:18 | ...[...] | hash_flow.rb:808:10:808:19 | ( ... ) | provenance | | +| hash_flow.rb:810:11:810:14 | hash [element :f] | hash_flow.rb:810:11:810:18 | ...[...] | provenance | | +| hash_flow.rb:810:11:810:18 | ...[...] | hash_flow.rb:810:10:810:19 | ( ... ) | provenance | | +| hash_flow.rb:816:5:816:9 | hash1 [element :a] | hash_flow.rb:826:12:826:16 | hash1 [element :a] | provenance | | +| hash_flow.rb:816:5:816:9 | hash1 [element :c] | hash_flow.rb:826:12:826:16 | hash1 [element :c] | provenance | | +| hash_flow.rb:817:15:817:25 | call to taint | hash_flow.rb:816:5:816:9 | hash1 [element :a] | provenance | | +| hash_flow.rb:819:15:819:25 | call to taint | hash_flow.rb:816:5:816:9 | hash1 [element :c] | provenance | | +| hash_flow.rb:821:5:821:9 | hash2 [element :d] | hash_flow.rb:826:30:826:34 | hash2 [element :d] | provenance | | +| hash_flow.rb:821:5:821:9 | hash2 [element :f] | hash_flow.rb:826:30:826:34 | hash2 [element :f] | provenance | | +| hash_flow.rb:822:15:822:25 | call to taint | hash_flow.rb:821:5:821:9 | hash2 [element :d] | provenance | | +| hash_flow.rb:824:15:824:25 | call to taint | hash_flow.rb:821:5:821:9 | hash2 [element :f] | provenance | | +| hash_flow.rb:826:5:826:8 | hash [element :a] | hash_flow.rb:831:11:831:14 | hash [element :a] | provenance | | +| hash_flow.rb:826:5:826:8 | hash [element :c] | hash_flow.rb:833:11:833:14 | hash [element :c] | provenance | | +| hash_flow.rb:826:5:826:8 | hash [element :d] | hash_flow.rb:834:11:834:14 | hash [element :d] | provenance | | +| hash_flow.rb:826:5:826:8 | hash [element :f] | hash_flow.rb:836:11:836:14 | hash [element :f] | provenance | | +| hash_flow.rb:826:12:826:16 | [post] hash1 [element :a] | hash_flow.rb:838:11:838:15 | hash1 [element :a] | provenance | | +| hash_flow.rb:826:12:826:16 | [post] hash1 [element :c] | hash_flow.rb:840:11:840:15 | hash1 [element :c] | provenance | | +| hash_flow.rb:826:12:826:16 | [post] hash1 [element :d] | hash_flow.rb:841:11:841:15 | hash1 [element :d] | provenance | | +| hash_flow.rb:826:12:826:16 | [post] hash1 [element :f] | hash_flow.rb:843:11:843:15 | hash1 [element :f] | provenance | | +| hash_flow.rb:826:12:826:16 | hash1 [element :a] | hash_flow.rb:826:12:826:16 | [post] hash1 [element :a] | provenance | | +| hash_flow.rb:826:12:826:16 | hash1 [element :a] | hash_flow.rb:826:12:830:7 | call to deep_merge! [element :a] | provenance | | +| hash_flow.rb:826:12:826:16 | hash1 [element :a] | hash_flow.rb:826:46:826:54 | old_value | provenance | | +| hash_flow.rb:826:12:826:16 | hash1 [element :a] | hash_flow.rb:826:57:826:65 | new_value | provenance | | +| hash_flow.rb:826:12:826:16 | hash1 [element :c] | hash_flow.rb:826:12:826:16 | [post] hash1 [element :c] | provenance | | +| hash_flow.rb:826:12:826:16 | hash1 [element :c] | hash_flow.rb:826:12:830:7 | call to deep_merge! [element :c] | provenance | | +| hash_flow.rb:826:12:826:16 | hash1 [element :c] | hash_flow.rb:826:46:826:54 | old_value | provenance | | +| hash_flow.rb:826:12:826:16 | hash1 [element :c] | hash_flow.rb:826:57:826:65 | new_value | provenance | | +| hash_flow.rb:826:12:830:7 | call to deep_merge! [element :a] | hash_flow.rb:826:5:826:8 | hash [element :a] | provenance | | +| hash_flow.rb:826:12:830:7 | call to deep_merge! [element :c] | hash_flow.rb:826:5:826:8 | hash [element :c] | provenance | | +| hash_flow.rb:826:12:830:7 | call to deep_merge! [element :d] | hash_flow.rb:826:5:826:8 | hash [element :d] | provenance | | +| hash_flow.rb:826:12:830:7 | call to deep_merge! [element :f] | hash_flow.rb:826:5:826:8 | hash [element :f] | provenance | | +| hash_flow.rb:826:30:826:34 | hash2 [element :d] | hash_flow.rb:826:12:826:16 | [post] hash1 [element :d] | provenance | | +| hash_flow.rb:826:30:826:34 | hash2 [element :d] | hash_flow.rb:826:12:830:7 | call to deep_merge! [element :d] | provenance | | +| hash_flow.rb:826:30:826:34 | hash2 [element :d] | hash_flow.rb:826:46:826:54 | old_value | provenance | | +| hash_flow.rb:826:30:826:34 | hash2 [element :d] | hash_flow.rb:826:57:826:65 | new_value | provenance | | +| hash_flow.rb:826:30:826:34 | hash2 [element :f] | hash_flow.rb:826:12:826:16 | [post] hash1 [element :f] | provenance | | +| hash_flow.rb:826:30:826:34 | hash2 [element :f] | hash_flow.rb:826:12:830:7 | call to deep_merge! [element :f] | provenance | | +| hash_flow.rb:826:30:826:34 | hash2 [element :f] | hash_flow.rb:826:46:826:54 | old_value | provenance | | +| hash_flow.rb:826:30:826:34 | hash2 [element :f] | hash_flow.rb:826:57:826:65 | new_value | provenance | | +| hash_flow.rb:826:46:826:54 | old_value | hash_flow.rb:828:14:828:22 | old_value | provenance | | +| hash_flow.rb:826:57:826:65 | new_value | hash_flow.rb:829:14:829:22 | new_value | provenance | | +| hash_flow.rb:831:11:831:14 | hash [element :a] | hash_flow.rb:831:11:831:18 | ...[...] | provenance | | +| hash_flow.rb:831:11:831:18 | ...[...] | hash_flow.rb:831:10:831:19 | ( ... ) | provenance | | +| hash_flow.rb:833:11:833:14 | hash [element :c] | hash_flow.rb:833:11:833:18 | ...[...] | provenance | | +| hash_flow.rb:833:11:833:18 | ...[...] | hash_flow.rb:833:10:833:19 | ( ... ) | provenance | | +| hash_flow.rb:834:11:834:14 | hash [element :d] | hash_flow.rb:834:11:834:18 | ...[...] | provenance | | +| hash_flow.rb:834:11:834:18 | ...[...] | hash_flow.rb:834:10:834:19 | ( ... ) | provenance | | +| hash_flow.rb:836:11:836:14 | hash [element :f] | hash_flow.rb:836:11:836:18 | ...[...] | provenance | | +| hash_flow.rb:836:11:836:18 | ...[...] | hash_flow.rb:836:10:836:19 | ( ... ) | provenance | | +| hash_flow.rb:838:11:838:15 | hash1 [element :a] | hash_flow.rb:838:11:838:19 | ...[...] | provenance | | +| hash_flow.rb:838:11:838:19 | ...[...] | hash_flow.rb:838:10:838:20 | ( ... ) | provenance | | +| hash_flow.rb:840:11:840:15 | hash1 [element :c] | hash_flow.rb:840:11:840:19 | ...[...] | provenance | | +| hash_flow.rb:840:11:840:19 | ...[...] | hash_flow.rb:840:10:840:20 | ( ... ) | provenance | | +| hash_flow.rb:841:11:841:15 | hash1 [element :d] | hash_flow.rb:841:11:841:19 | ...[...] | provenance | | +| hash_flow.rb:841:11:841:19 | ...[...] | hash_flow.rb:841:10:841:20 | ( ... ) | provenance | | +| hash_flow.rb:843:11:843:15 | hash1 [element :f] | hash_flow.rb:843:11:843:19 | ...[...] | provenance | | +| hash_flow.rb:843:11:843:19 | ...[...] | hash_flow.rb:843:10:843:20 | ( ... ) | provenance | | +| hash_flow.rb:849:5:849:9 | hash1 [element :a] | hash_flow.rb:860:13:860:17 | hash1 [element :a] | provenance | | +| hash_flow.rb:849:5:849:9 | hash1 [element :a] | hash_flow.rb:869:13:869:17 | hash1 [element :a] | provenance | | +| hash_flow.rb:849:5:849:9 | hash1 [element :c] | hash_flow.rb:860:13:860:17 | hash1 [element :c] | provenance | | +| hash_flow.rb:849:5:849:9 | hash1 [element :c] | hash_flow.rb:869:13:869:17 | hash1 [element :c] | provenance | | +| hash_flow.rb:850:12:850:22 | call to taint | hash_flow.rb:849:5:849:9 | hash1 [element :a] | provenance | | +| hash_flow.rb:852:12:852:22 | call to taint | hash_flow.rb:849:5:849:9 | hash1 [element :c] | provenance | | +| hash_flow.rb:854:5:854:9 | hash2 [element :d] | hash_flow.rb:860:33:860:37 | hash2 [element :d] | provenance | | +| hash_flow.rb:854:5:854:9 | hash2 [element :d] | hash_flow.rb:869:33:869:37 | hash2 [element :d] | provenance | | +| hash_flow.rb:854:5:854:9 | hash2 [element :f] | hash_flow.rb:860:33:860:37 | hash2 [element :f] | provenance | | +| hash_flow.rb:854:5:854:9 | hash2 [element :f] | hash_flow.rb:869:33:869:37 | hash2 [element :f] | provenance | | +| hash_flow.rb:855:12:855:22 | call to taint | hash_flow.rb:854:5:854:9 | hash2 [element :d] | provenance | | +| hash_flow.rb:857:12:857:22 | call to taint | hash_flow.rb:854:5:854:9 | hash2 [element :f] | provenance | | +| hash_flow.rb:860:5:860:9 | hash3 [element :a] | hash_flow.rb:861:11:861:15 | hash3 [element :a] | provenance | | +| hash_flow.rb:860:5:860:9 | hash3 [element :c] | hash_flow.rb:863:11:863:15 | hash3 [element :c] | provenance | | +| hash_flow.rb:860:5:860:9 | hash3 [element :d] | hash_flow.rb:864:11:864:15 | hash3 [element :d] | provenance | | +| hash_flow.rb:860:5:860:9 | hash3 [element :f] | hash_flow.rb:866:11:866:15 | hash3 [element :f] | provenance | | +| hash_flow.rb:860:13:860:17 | hash1 [element :a] | hash_flow.rb:860:13:860:38 | call to reverse_merge [element :a] | provenance | | +| hash_flow.rb:860:13:860:17 | hash1 [element :c] | hash_flow.rb:860:13:860:38 | call to reverse_merge [element :c] | provenance | | +| hash_flow.rb:860:13:860:38 | call to reverse_merge [element :a] | hash_flow.rb:860:5:860:9 | hash3 [element :a] | provenance | | +| hash_flow.rb:860:13:860:38 | call to reverse_merge [element :c] | hash_flow.rb:860:5:860:9 | hash3 [element :c] | provenance | | +| hash_flow.rb:860:13:860:38 | call to reverse_merge [element :d] | hash_flow.rb:860:5:860:9 | hash3 [element :d] | provenance | | +| hash_flow.rb:860:13:860:38 | call to reverse_merge [element :f] | hash_flow.rb:860:5:860:9 | hash3 [element :f] | provenance | | +| hash_flow.rb:860:33:860:37 | hash2 [element :d] | hash_flow.rb:860:13:860:38 | call to reverse_merge [element :d] | provenance | | +| hash_flow.rb:860:33:860:37 | hash2 [element :f] | hash_flow.rb:860:13:860:38 | call to reverse_merge [element :f] | provenance | | +| hash_flow.rb:861:11:861:15 | hash3 [element :a] | hash_flow.rb:861:11:861:19 | ...[...] | provenance | | +| hash_flow.rb:861:11:861:19 | ...[...] | hash_flow.rb:861:10:861:20 | ( ... ) | provenance | | +| hash_flow.rb:863:11:863:15 | hash3 [element :c] | hash_flow.rb:863:11:863:19 | ...[...] | provenance | | +| hash_flow.rb:863:11:863:19 | ...[...] | hash_flow.rb:863:10:863:20 | ( ... ) | provenance | | +| hash_flow.rb:864:11:864:15 | hash3 [element :d] | hash_flow.rb:864:11:864:19 | ...[...] | provenance | | +| hash_flow.rb:864:11:864:19 | ...[...] | hash_flow.rb:864:10:864:20 | ( ... ) | provenance | | +| hash_flow.rb:866:11:866:15 | hash3 [element :f] | hash_flow.rb:866:11:866:19 | ...[...] | provenance | | +| hash_flow.rb:866:11:866:19 | ...[...] | hash_flow.rb:866:10:866:20 | ( ... ) | provenance | | +| hash_flow.rb:869:5:869:9 | hash4 [element :a] | hash_flow.rb:870:11:870:15 | hash4 [element :a] | provenance | | +| hash_flow.rb:869:5:869:9 | hash4 [element :c] | hash_flow.rb:872:11:872:15 | hash4 [element :c] | provenance | | +| hash_flow.rb:869:5:869:9 | hash4 [element :d] | hash_flow.rb:873:11:873:15 | hash4 [element :d] | provenance | | +| hash_flow.rb:869:5:869:9 | hash4 [element :f] | hash_flow.rb:875:11:875:15 | hash4 [element :f] | provenance | | +| hash_flow.rb:869:13:869:17 | hash1 [element :a] | hash_flow.rb:869:13:869:38 | call to with_defaults [element :a] | provenance | | +| hash_flow.rb:869:13:869:17 | hash1 [element :c] | hash_flow.rb:869:13:869:38 | call to with_defaults [element :c] | provenance | | +| hash_flow.rb:869:13:869:38 | call to with_defaults [element :a] | hash_flow.rb:869:5:869:9 | hash4 [element :a] | provenance | | +| hash_flow.rb:869:13:869:38 | call to with_defaults [element :c] | hash_flow.rb:869:5:869:9 | hash4 [element :c] | provenance | | +| hash_flow.rb:869:13:869:38 | call to with_defaults [element :d] | hash_flow.rb:869:5:869:9 | hash4 [element :d] | provenance | | +| hash_flow.rb:869:13:869:38 | call to with_defaults [element :f] | hash_flow.rb:869:5:869:9 | hash4 [element :f] | provenance | | +| hash_flow.rb:869:33:869:37 | hash2 [element :d] | hash_flow.rb:869:13:869:38 | call to with_defaults [element :d] | provenance | | +| hash_flow.rb:869:33:869:37 | hash2 [element :f] | hash_flow.rb:869:13:869:38 | call to with_defaults [element :f] | provenance | | +| hash_flow.rb:870:11:870:15 | hash4 [element :a] | hash_flow.rb:870:11:870:19 | ...[...] | provenance | | +| hash_flow.rb:870:11:870:19 | ...[...] | hash_flow.rb:870:10:870:20 | ( ... ) | provenance | | +| hash_flow.rb:872:11:872:15 | hash4 [element :c] | hash_flow.rb:872:11:872:19 | ...[...] | provenance | | +| hash_flow.rb:872:11:872:19 | ...[...] | hash_flow.rb:872:10:872:20 | ( ... ) | provenance | | +| hash_flow.rb:873:11:873:15 | hash4 [element :d] | hash_flow.rb:873:11:873:19 | ...[...] | provenance | | +| hash_flow.rb:873:11:873:19 | ...[...] | hash_flow.rb:873:10:873:20 | ( ... ) | provenance | | +| hash_flow.rb:875:11:875:15 | hash4 [element :f] | hash_flow.rb:875:11:875:19 | ...[...] | provenance | | +| hash_flow.rb:875:11:875:19 | ...[...] | hash_flow.rb:875:10:875:20 | ( ... ) | provenance | | +| hash_flow.rb:881:5:881:9 | hash1 [element :a] | hash_flow.rb:892:12:892:16 | hash1 [element :a] | provenance | | +| hash_flow.rb:881:5:881:9 | hash1 [element :c] | hash_flow.rb:892:12:892:16 | hash1 [element :c] | provenance | | +| hash_flow.rb:882:12:882:22 | call to taint | hash_flow.rb:881:5:881:9 | hash1 [element :a] | provenance | | +| hash_flow.rb:884:12:884:22 | call to taint | hash_flow.rb:881:5:881:9 | hash1 [element :c] | provenance | | +| hash_flow.rb:886:5:886:9 | hash2 [element :d] | hash_flow.rb:892:33:892:37 | hash2 [element :d] | provenance | | +| hash_flow.rb:886:5:886:9 | hash2 [element :f] | hash_flow.rb:892:33:892:37 | hash2 [element :f] | provenance | | +| hash_flow.rb:887:12:887:22 | call to taint | hash_flow.rb:886:5:886:9 | hash2 [element :d] | provenance | | +| hash_flow.rb:889:12:889:22 | call to taint | hash_flow.rb:886:5:886:9 | hash2 [element :f] | provenance | | +| hash_flow.rb:892:5:892:8 | hash [element :a] | hash_flow.rb:893:11:893:14 | hash [element :a] | provenance | | +| hash_flow.rb:892:5:892:8 | hash [element :c] | hash_flow.rb:895:11:895:14 | hash [element :c] | provenance | | +| hash_flow.rb:892:5:892:8 | hash [element :d] | hash_flow.rb:896:11:896:14 | hash [element :d] | provenance | | +| hash_flow.rb:892:5:892:8 | hash [element :f] | hash_flow.rb:898:11:898:14 | hash [element :f] | provenance | | +| hash_flow.rb:892:12:892:16 | [post] hash1 [element :a] | hash_flow.rb:900:11:900:15 | hash1 [element :a] | provenance | | +| hash_flow.rb:892:12:892:16 | [post] hash1 [element :c] | hash_flow.rb:902:11:902:15 | hash1 [element :c] | provenance | | +| hash_flow.rb:892:12:892:16 | [post] hash1 [element :d] | hash_flow.rb:903:11:903:15 | hash1 [element :d] | provenance | | +| hash_flow.rb:892:12:892:16 | [post] hash1 [element :f] | hash_flow.rb:905:11:905:15 | hash1 [element :f] | provenance | | +| hash_flow.rb:892:12:892:16 | hash1 [element :a] | hash_flow.rb:892:12:892:16 | [post] hash1 [element :a] | provenance | | +| hash_flow.rb:892:12:892:16 | hash1 [element :a] | hash_flow.rb:892:12:892:38 | call to reverse_merge! [element :a] | provenance | | +| hash_flow.rb:892:12:892:16 | hash1 [element :c] | hash_flow.rb:892:12:892:16 | [post] hash1 [element :c] | provenance | | +| hash_flow.rb:892:12:892:16 | hash1 [element :c] | hash_flow.rb:892:12:892:38 | call to reverse_merge! [element :c] | provenance | | +| hash_flow.rb:892:12:892:38 | call to reverse_merge! [element :a] | hash_flow.rb:892:5:892:8 | hash [element :a] | provenance | | +| hash_flow.rb:892:12:892:38 | call to reverse_merge! [element :c] | hash_flow.rb:892:5:892:8 | hash [element :c] | provenance | | +| hash_flow.rb:892:12:892:38 | call to reverse_merge! [element :d] | hash_flow.rb:892:5:892:8 | hash [element :d] | provenance | | +| hash_flow.rb:892:12:892:38 | call to reverse_merge! [element :f] | hash_flow.rb:892:5:892:8 | hash [element :f] | provenance | | +| hash_flow.rb:892:33:892:37 | hash2 [element :d] | hash_flow.rb:892:12:892:16 | [post] hash1 [element :d] | provenance | | +| hash_flow.rb:892:33:892:37 | hash2 [element :d] | hash_flow.rb:892:12:892:38 | call to reverse_merge! [element :d] | provenance | | +| hash_flow.rb:892:33:892:37 | hash2 [element :f] | hash_flow.rb:892:12:892:16 | [post] hash1 [element :f] | provenance | | +| hash_flow.rb:892:33:892:37 | hash2 [element :f] | hash_flow.rb:892:12:892:38 | call to reverse_merge! [element :f] | provenance | | +| hash_flow.rb:893:11:893:14 | hash [element :a] | hash_flow.rb:893:11:893:18 | ...[...] | provenance | | +| hash_flow.rb:893:11:893:18 | ...[...] | hash_flow.rb:893:10:893:19 | ( ... ) | provenance | | +| hash_flow.rb:895:11:895:14 | hash [element :c] | hash_flow.rb:895:11:895:18 | ...[...] | provenance | | +| hash_flow.rb:895:11:895:18 | ...[...] | hash_flow.rb:895:10:895:19 | ( ... ) | provenance | | +| hash_flow.rb:896:11:896:14 | hash [element :d] | hash_flow.rb:896:11:896:18 | ...[...] | provenance | | +| hash_flow.rb:896:11:896:18 | ...[...] | hash_flow.rb:896:10:896:19 | ( ... ) | provenance | | +| hash_flow.rb:898:11:898:14 | hash [element :f] | hash_flow.rb:898:11:898:18 | ...[...] | provenance | | +| hash_flow.rb:898:11:898:18 | ...[...] | hash_flow.rb:898:10:898:19 | ( ... ) | provenance | | +| hash_flow.rb:900:11:900:15 | hash1 [element :a] | hash_flow.rb:900:11:900:19 | ...[...] | provenance | | +| hash_flow.rb:900:11:900:19 | ...[...] | hash_flow.rb:900:10:900:20 | ( ... ) | provenance | | +| hash_flow.rb:902:11:902:15 | hash1 [element :c] | hash_flow.rb:902:11:902:19 | ...[...] | provenance | | +| hash_flow.rb:902:11:902:19 | ...[...] | hash_flow.rb:902:10:902:20 | ( ... ) | provenance | | +| hash_flow.rb:903:11:903:15 | hash1 [element :d] | hash_flow.rb:903:11:903:19 | ...[...] | provenance | | +| hash_flow.rb:903:11:903:19 | ...[...] | hash_flow.rb:903:10:903:20 | ( ... ) | provenance | | +| hash_flow.rb:905:11:905:15 | hash1 [element :f] | hash_flow.rb:905:11:905:19 | ...[...] | provenance | | +| hash_flow.rb:905:11:905:19 | ...[...] | hash_flow.rb:905:10:905:20 | ( ... ) | provenance | | +| hash_flow.rb:911:5:911:9 | hash1 [element :a] | hash_flow.rb:922:12:922:16 | hash1 [element :a] | provenance | | +| hash_flow.rb:911:5:911:9 | hash1 [element :c] | hash_flow.rb:922:12:922:16 | hash1 [element :c] | provenance | | +| hash_flow.rb:912:12:912:22 | call to taint | hash_flow.rb:911:5:911:9 | hash1 [element :a] | provenance | | +| hash_flow.rb:914:12:914:22 | call to taint | hash_flow.rb:911:5:911:9 | hash1 [element :c] | provenance | | +| hash_flow.rb:916:5:916:9 | hash2 [element :d] | hash_flow.rb:922:33:922:37 | hash2 [element :d] | provenance | | +| hash_flow.rb:916:5:916:9 | hash2 [element :f] | hash_flow.rb:922:33:922:37 | hash2 [element :f] | provenance | | +| hash_flow.rb:917:12:917:22 | call to taint | hash_flow.rb:916:5:916:9 | hash2 [element :d] | provenance | | +| hash_flow.rb:919:12:919:22 | call to taint | hash_flow.rb:916:5:916:9 | hash2 [element :f] | provenance | | +| hash_flow.rb:922:5:922:8 | hash [element :a] | hash_flow.rb:923:11:923:14 | hash [element :a] | provenance | | +| hash_flow.rb:922:5:922:8 | hash [element :c] | hash_flow.rb:925:11:925:14 | hash [element :c] | provenance | | +| hash_flow.rb:922:5:922:8 | hash [element :d] | hash_flow.rb:926:11:926:14 | hash [element :d] | provenance | | +| hash_flow.rb:922:5:922:8 | hash [element :f] | hash_flow.rb:928:11:928:14 | hash [element :f] | provenance | | +| hash_flow.rb:922:12:922:16 | [post] hash1 [element :a] | hash_flow.rb:930:11:930:15 | hash1 [element :a] | provenance | | +| hash_flow.rb:922:12:922:16 | [post] hash1 [element :c] | hash_flow.rb:932:11:932:15 | hash1 [element :c] | provenance | | +| hash_flow.rb:922:12:922:16 | [post] hash1 [element :d] | hash_flow.rb:933:11:933:15 | hash1 [element :d] | provenance | | +| hash_flow.rb:922:12:922:16 | [post] hash1 [element :f] | hash_flow.rb:935:11:935:15 | hash1 [element :f] | provenance | | +| hash_flow.rb:922:12:922:16 | hash1 [element :a] | hash_flow.rb:922:12:922:16 | [post] hash1 [element :a] | provenance | | +| hash_flow.rb:922:12:922:16 | hash1 [element :a] | hash_flow.rb:922:12:922:38 | call to with_defaults! [element :a] | provenance | | +| hash_flow.rb:922:12:922:16 | hash1 [element :c] | hash_flow.rb:922:12:922:16 | [post] hash1 [element :c] | provenance | | +| hash_flow.rb:922:12:922:16 | hash1 [element :c] | hash_flow.rb:922:12:922:38 | call to with_defaults! [element :c] | provenance | | +| hash_flow.rb:922:12:922:38 | call to with_defaults! [element :a] | hash_flow.rb:922:5:922:8 | hash [element :a] | provenance | | +| hash_flow.rb:922:12:922:38 | call to with_defaults! [element :c] | hash_flow.rb:922:5:922:8 | hash [element :c] | provenance | | +| hash_flow.rb:922:12:922:38 | call to with_defaults! [element :d] | hash_flow.rb:922:5:922:8 | hash [element :d] | provenance | | +| hash_flow.rb:922:12:922:38 | call to with_defaults! [element :f] | hash_flow.rb:922:5:922:8 | hash [element :f] | provenance | | +| hash_flow.rb:922:33:922:37 | hash2 [element :d] | hash_flow.rb:922:12:922:16 | [post] hash1 [element :d] | provenance | | +| hash_flow.rb:922:33:922:37 | hash2 [element :d] | hash_flow.rb:922:12:922:38 | call to with_defaults! [element :d] | provenance | | +| hash_flow.rb:922:33:922:37 | hash2 [element :f] | hash_flow.rb:922:12:922:16 | [post] hash1 [element :f] | provenance | | +| hash_flow.rb:922:33:922:37 | hash2 [element :f] | hash_flow.rb:922:12:922:38 | call to with_defaults! [element :f] | provenance | | +| hash_flow.rb:923:11:923:14 | hash [element :a] | hash_flow.rb:923:11:923:18 | ...[...] | provenance | | +| hash_flow.rb:923:11:923:18 | ...[...] | hash_flow.rb:923:10:923:19 | ( ... ) | provenance | | +| hash_flow.rb:925:11:925:14 | hash [element :c] | hash_flow.rb:925:11:925:18 | ...[...] | provenance | | +| hash_flow.rb:925:11:925:18 | ...[...] | hash_flow.rb:925:10:925:19 | ( ... ) | provenance | | +| hash_flow.rb:926:11:926:14 | hash [element :d] | hash_flow.rb:926:11:926:18 | ...[...] | provenance | | +| hash_flow.rb:926:11:926:18 | ...[...] | hash_flow.rb:926:10:926:19 | ( ... ) | provenance | | +| hash_flow.rb:928:11:928:14 | hash [element :f] | hash_flow.rb:928:11:928:18 | ...[...] | provenance | | +| hash_flow.rb:928:11:928:18 | ...[...] | hash_flow.rb:928:10:928:19 | ( ... ) | provenance | | +| hash_flow.rb:930:11:930:15 | hash1 [element :a] | hash_flow.rb:930:11:930:19 | ...[...] | provenance | | +| hash_flow.rb:930:11:930:19 | ...[...] | hash_flow.rb:930:10:930:20 | ( ... ) | provenance | | +| hash_flow.rb:932:11:932:15 | hash1 [element :c] | hash_flow.rb:932:11:932:19 | ...[...] | provenance | | +| hash_flow.rb:932:11:932:19 | ...[...] | hash_flow.rb:932:10:932:20 | ( ... ) | provenance | | +| hash_flow.rb:933:11:933:15 | hash1 [element :d] | hash_flow.rb:933:11:933:19 | ...[...] | provenance | | +| hash_flow.rb:933:11:933:19 | ...[...] | hash_flow.rb:933:10:933:20 | ( ... ) | provenance | | +| hash_flow.rb:935:11:935:15 | hash1 [element :f] | hash_flow.rb:935:11:935:19 | ...[...] | provenance | | +| hash_flow.rb:935:11:935:19 | ...[...] | hash_flow.rb:935:10:935:20 | ( ... ) | provenance | | +| hash_flow.rb:941:5:941:9 | hash1 [element :a] | hash_flow.rb:952:12:952:16 | hash1 [element :a] | provenance | | +| hash_flow.rb:941:5:941:9 | hash1 [element :c] | hash_flow.rb:952:12:952:16 | hash1 [element :c] | provenance | | +| hash_flow.rb:942:12:942:22 | call to taint | hash_flow.rb:941:5:941:9 | hash1 [element :a] | provenance | | +| hash_flow.rb:944:12:944:22 | call to taint | hash_flow.rb:941:5:941:9 | hash1 [element :c] | provenance | | +| hash_flow.rb:946:5:946:9 | hash2 [element :d] | hash_flow.rb:952:33:952:37 | hash2 [element :d] | provenance | | +| hash_flow.rb:946:5:946:9 | hash2 [element :f] | hash_flow.rb:952:33:952:37 | hash2 [element :f] | provenance | | +| hash_flow.rb:947:12:947:22 | call to taint | hash_flow.rb:946:5:946:9 | hash2 [element :d] | provenance | | +| hash_flow.rb:949:12:949:22 | call to taint | hash_flow.rb:946:5:946:9 | hash2 [element :f] | provenance | | +| hash_flow.rb:952:5:952:8 | hash [element :a] | hash_flow.rb:953:11:953:14 | hash [element :a] | provenance | | +| hash_flow.rb:952:5:952:8 | hash [element :c] | hash_flow.rb:955:11:955:14 | hash [element :c] | provenance | | +| hash_flow.rb:952:5:952:8 | hash [element :d] | hash_flow.rb:956:11:956:14 | hash [element :d] | provenance | | +| hash_flow.rb:952:5:952:8 | hash [element :f] | hash_flow.rb:958:11:958:14 | hash [element :f] | provenance | | +| hash_flow.rb:952:12:952:16 | [post] hash1 [element :a] | hash_flow.rb:960:11:960:15 | hash1 [element :a] | provenance | | +| hash_flow.rb:952:12:952:16 | [post] hash1 [element :c] | hash_flow.rb:962:11:962:15 | hash1 [element :c] | provenance | | +| hash_flow.rb:952:12:952:16 | [post] hash1 [element :d] | hash_flow.rb:963:11:963:15 | hash1 [element :d] | provenance | | +| hash_flow.rb:952:12:952:16 | [post] hash1 [element :f] | hash_flow.rb:965:11:965:15 | hash1 [element :f] | provenance | | +| hash_flow.rb:952:12:952:16 | hash1 [element :a] | hash_flow.rb:952:12:952:16 | [post] hash1 [element :a] | provenance | | +| hash_flow.rb:952:12:952:16 | hash1 [element :a] | hash_flow.rb:952:12:952:38 | call to with_defaults! [element :a] | provenance | | +| hash_flow.rb:952:12:952:16 | hash1 [element :c] | hash_flow.rb:952:12:952:16 | [post] hash1 [element :c] | provenance | | +| hash_flow.rb:952:12:952:16 | hash1 [element :c] | hash_flow.rb:952:12:952:38 | call to with_defaults! [element :c] | provenance | | +| hash_flow.rb:952:12:952:38 | call to with_defaults! [element :a] | hash_flow.rb:952:5:952:8 | hash [element :a] | provenance | | +| hash_flow.rb:952:12:952:38 | call to with_defaults! [element :c] | hash_flow.rb:952:5:952:8 | hash [element :c] | provenance | | +| hash_flow.rb:952:12:952:38 | call to with_defaults! [element :d] | hash_flow.rb:952:5:952:8 | hash [element :d] | provenance | | +| hash_flow.rb:952:12:952:38 | call to with_defaults! [element :f] | hash_flow.rb:952:5:952:8 | hash [element :f] | provenance | | +| hash_flow.rb:952:33:952:37 | hash2 [element :d] | hash_flow.rb:952:12:952:16 | [post] hash1 [element :d] | provenance | | +| hash_flow.rb:952:33:952:37 | hash2 [element :d] | hash_flow.rb:952:12:952:38 | call to with_defaults! [element :d] | provenance | | +| hash_flow.rb:952:33:952:37 | hash2 [element :f] | hash_flow.rb:952:12:952:16 | [post] hash1 [element :f] | provenance | | +| hash_flow.rb:952:33:952:37 | hash2 [element :f] | hash_flow.rb:952:12:952:38 | call to with_defaults! [element :f] | provenance | | +| hash_flow.rb:953:11:953:14 | hash [element :a] | hash_flow.rb:953:11:953:18 | ...[...] | provenance | | +| hash_flow.rb:953:11:953:18 | ...[...] | hash_flow.rb:953:10:953:19 | ( ... ) | provenance | | +| hash_flow.rb:955:11:955:14 | hash [element :c] | hash_flow.rb:955:11:955:18 | ...[...] | provenance | | +| hash_flow.rb:955:11:955:18 | ...[...] | hash_flow.rb:955:10:955:19 | ( ... ) | provenance | | +| hash_flow.rb:956:11:956:14 | hash [element :d] | hash_flow.rb:956:11:956:18 | ...[...] | provenance | | +| hash_flow.rb:956:11:956:18 | ...[...] | hash_flow.rb:956:10:956:19 | ( ... ) | provenance | | +| hash_flow.rb:958:11:958:14 | hash [element :f] | hash_flow.rb:958:11:958:18 | ...[...] | provenance | | +| hash_flow.rb:958:11:958:18 | ...[...] | hash_flow.rb:958:10:958:19 | ( ... ) | provenance | | +| hash_flow.rb:960:11:960:15 | hash1 [element :a] | hash_flow.rb:960:11:960:19 | ...[...] | provenance | | +| hash_flow.rb:960:11:960:19 | ...[...] | hash_flow.rb:960:10:960:20 | ( ... ) | provenance | | +| hash_flow.rb:962:11:962:15 | hash1 [element :c] | hash_flow.rb:962:11:962:19 | ...[...] | provenance | | +| hash_flow.rb:962:11:962:19 | ...[...] | hash_flow.rb:962:10:962:20 | ( ... ) | provenance | | +| hash_flow.rb:963:11:963:15 | hash1 [element :d] | hash_flow.rb:963:11:963:19 | ...[...] | provenance | | +| hash_flow.rb:963:11:963:19 | ...[...] | hash_flow.rb:963:10:963:20 | ( ... ) | provenance | | +| hash_flow.rb:965:11:965:15 | hash1 [element :f] | hash_flow.rb:965:11:965:19 | ...[...] | provenance | | +| hash_flow.rb:965:11:965:19 | ...[...] | hash_flow.rb:965:10:965:20 | ( ... ) | provenance | | +| hash_flow.rb:971:5:971:5 | h [element :b] | hash_flow.rb:973:10:973:10 | h [element :b] | provenance | | +| hash_flow.rb:971:5:971:5 | h [element :b] | hash_flow.rb:975:10:975:10 | h [element :b] | provenance | | +| hash_flow.rb:971:9:971:38 | ...[...] [element :b] | hash_flow.rb:971:5:971:5 | h [element :b] | provenance | | +| hash_flow.rb:971:23:971:31 | call to taint | hash_flow.rb:971:9:971:38 | ...[...] [element :b] | provenance | | +| hash_flow.rb:973:10:973:10 | h [element :b] | hash_flow.rb:973:10:973:14 | ...[...] | provenance | | +| hash_flow.rb:975:10:975:10 | h [element :b] | hash_flow.rb:975:10:975:13 | ...[...] | provenance | | +| hash_flow.rb:994:9:994:10 | h2 [element :b] | hash_flow.rb:996:14:996:15 | h2 [element :b] | provenance | | +| hash_flow.rb:994:9:994:10 | h2 [element :b] | hash_flow.rb:998:14:998:15 | h2 [element :b] | provenance | | +| hash_flow.rb:994:14:994:47 | ...[...] [element :b] | hash_flow.rb:994:9:994:10 | h2 [element :b] | provenance | | +| hash_flow.rb:994:30:994:40 | call to taint | hash_flow.rb:994:14:994:47 | ...[...] [element :b] | provenance | | +| hash_flow.rb:996:14:996:15 | h2 [element :b] | hash_flow.rb:996:14:996:19 | ...[...] | provenance | | +| hash_flow.rb:998:14:998:15 | h2 [element :b] | hash_flow.rb:998:14:998:18 | ...[...] | provenance | | nodes | hash_flow.rb:10:5:10:8 | hash [element 0] | semmle.label | hash [element 0] | | hash_flow.rb:10:5:10:8 | hash [element :a] | semmle.label | hash [element :a] | diff --git a/ruby/ql/test/library-tests/dataflow/local/InlineFlowTest.expected b/ruby/ql/test/library-tests/dataflow/local/InlineFlowTest.expected index 0efa1cd8b5a..a8722b1fb50 100644 --- a/ruby/ql/test/library-tests/dataflow/local/InlineFlowTest.expected +++ b/ruby/ql/test/library-tests/dataflow/local/InlineFlowTest.expected @@ -1,50 +1,50 @@ testFailures edges -| local_dataflow.rb:78:3:78:3 | z | local_dataflow.rb:89:8:89:8 | z | -| local_dataflow.rb:78:12:78:20 | call to source | local_dataflow.rb:79:13:79:13 | b | -| local_dataflow.rb:78:12:78:20 | call to source | local_dataflow.rb:80:8:80:8 | a | -| local_dataflow.rb:78:12:78:20 | call to source | local_dataflow.rb:81:9:81:9 | c | -| local_dataflow.rb:78:12:78:20 | call to source | local_dataflow.rb:81:13:81:13 | d | -| local_dataflow.rb:78:12:78:20 | call to source | local_dataflow.rb:81:16:81:16 | e | -| local_dataflow.rb:78:12:78:20 | call to source | local_dataflow.rb:85:13:85:13 | f | -| local_dataflow.rb:78:12:78:20 | call to source | local_dataflow.rb:86:18:86:18 | g | -| local_dataflow.rb:78:12:78:20 | call to source | local_dataflow.rb:87:10:87:10 | x | -| local_dataflow.rb:79:13:79:13 | b | local_dataflow.rb:79:25:79:25 | b | -| local_dataflow.rb:80:8:80:8 | a | local_dataflow.rb:80:29:80:29 | a | -| local_dataflow.rb:81:9:81:9 | c | local_dataflow.rb:82:12:82:12 | c | -| local_dataflow.rb:81:13:81:13 | d | local_dataflow.rb:83:12:83:12 | d | -| local_dataflow.rb:81:16:81:16 | e | local_dataflow.rb:84:12:84:12 | e | -| local_dataflow.rb:85:13:85:13 | f | local_dataflow.rb:85:27:85:27 | f | -| local_dataflow.rb:86:18:86:18 | g | local_dataflow.rb:86:33:86:33 | g | -| local_dataflow.rb:87:10:87:10 | x | local_dataflow.rb:78:3:78:3 | z | -| local_dataflow.rb:87:10:87:10 | x | local_dataflow.rb:87:25:87:25 | x | -| local_dataflow.rb:93:3:93:3 | a | local_dataflow.rb:94:8:94:8 | a | -| local_dataflow.rb:93:7:93:15 | call to source | local_dataflow.rb:93:3:93:3 | a | -| local_dataflow.rb:93:20:93:28 | call to source | local_dataflow.rb:93:3:93:3 | a | -| local_dataflow.rb:95:3:95:3 | b | local_dataflow.rb:96:8:96:8 | b | -| local_dataflow.rb:95:8:95:16 | call to source | local_dataflow.rb:95:3:95:3 | b | -| local_dataflow.rb:95:21:95:29 | call to source | local_dataflow.rb:95:3:95:3 | b | -| local_dataflow.rb:98:3:98:3 | a | local_dataflow.rb:99:8:99:8 | a | -| local_dataflow.rb:98:20:98:28 | call to source | local_dataflow.rb:98:3:98:3 | a | -| local_dataflow.rb:100:3:100:3 | b | local_dataflow.rb:101:8:101:8 | b | -| local_dataflow.rb:100:22:100:30 | call to source | local_dataflow.rb:100:3:100:3 | b | -| local_dataflow.rb:103:3:103:3 | a | local_dataflow.rb:104:3:104:3 | a | -| local_dataflow.rb:103:7:103:15 | call to source | local_dataflow.rb:103:3:103:3 | a | -| local_dataflow.rb:104:3:104:3 | a | local_dataflow.rb:105:8:105:8 | a | -| local_dataflow.rb:104:9:104:17 | call to source | local_dataflow.rb:104:3:104:3 | a | -| local_dataflow.rb:107:3:107:3 | b | local_dataflow.rb:108:8:108:8 | b | -| local_dataflow.rb:107:9:107:17 | call to source | local_dataflow.rb:107:3:107:3 | b | -| local_dataflow.rb:112:8:112:16 | call to source | local_dataflow.rb:112:8:112:20 | call to dup | -| local_dataflow.rb:113:8:113:16 | call to source | local_dataflow.rb:113:8:113:20 | call to dup | -| local_dataflow.rb:113:8:113:20 | call to dup | local_dataflow.rb:113:8:113:24 | call to dup | -| local_dataflow.rb:117:8:117:16 | call to source | local_dataflow.rb:117:8:117:23 | call to tap | -| local_dataflow.rb:118:3:118:11 | call to source | local_dataflow.rb:118:20:118:20 | x | -| local_dataflow.rb:118:20:118:20 | x | local_dataflow.rb:118:28:118:28 | x | -| local_dataflow.rb:119:8:119:16 | call to source | local_dataflow.rb:119:8:119:23 | call to tap | -| local_dataflow.rb:119:8:119:23 | call to tap | local_dataflow.rb:119:8:119:30 | call to tap | -| local_dataflow.rb:123:8:123:16 | call to source | local_dataflow.rb:123:8:123:20 | call to dup | -| local_dataflow.rb:123:8:123:20 | call to dup | local_dataflow.rb:123:8:123:45 | call to tap | -| local_dataflow.rb:123:8:123:45 | call to tap | local_dataflow.rb:123:8:123:49 | call to dup | +| local_dataflow.rb:78:3:78:3 | z | local_dataflow.rb:89:8:89:8 | z | provenance | | +| local_dataflow.rb:78:12:78:20 | call to source | local_dataflow.rb:79:13:79:13 | b | provenance | | +| local_dataflow.rb:78:12:78:20 | call to source | local_dataflow.rb:80:8:80:8 | a | provenance | | +| local_dataflow.rb:78:12:78:20 | call to source | local_dataflow.rb:81:9:81:9 | c | provenance | | +| local_dataflow.rb:78:12:78:20 | call to source | local_dataflow.rb:81:13:81:13 | d | provenance | | +| local_dataflow.rb:78:12:78:20 | call to source | local_dataflow.rb:81:16:81:16 | e | provenance | | +| local_dataflow.rb:78:12:78:20 | call to source | local_dataflow.rb:85:13:85:13 | f | provenance | | +| local_dataflow.rb:78:12:78:20 | call to source | local_dataflow.rb:86:18:86:18 | g | provenance | | +| local_dataflow.rb:78:12:78:20 | call to source | local_dataflow.rb:87:10:87:10 | x | provenance | | +| local_dataflow.rb:79:13:79:13 | b | local_dataflow.rb:79:25:79:25 | b | provenance | | +| local_dataflow.rb:80:8:80:8 | a | local_dataflow.rb:80:29:80:29 | a | provenance | | +| local_dataflow.rb:81:9:81:9 | c | local_dataflow.rb:82:12:82:12 | c | provenance | | +| local_dataflow.rb:81:13:81:13 | d | local_dataflow.rb:83:12:83:12 | d | provenance | | +| local_dataflow.rb:81:16:81:16 | e | local_dataflow.rb:84:12:84:12 | e | provenance | | +| local_dataflow.rb:85:13:85:13 | f | local_dataflow.rb:85:27:85:27 | f | provenance | | +| local_dataflow.rb:86:18:86:18 | g | local_dataflow.rb:86:33:86:33 | g | provenance | | +| local_dataflow.rb:87:10:87:10 | x | local_dataflow.rb:78:3:78:3 | z | provenance | | +| local_dataflow.rb:87:10:87:10 | x | local_dataflow.rb:87:25:87:25 | x | provenance | | +| local_dataflow.rb:93:3:93:3 | a | local_dataflow.rb:94:8:94:8 | a | provenance | | +| local_dataflow.rb:93:7:93:15 | call to source | local_dataflow.rb:93:3:93:3 | a | provenance | | +| local_dataflow.rb:93:20:93:28 | call to source | local_dataflow.rb:93:3:93:3 | a | provenance | | +| local_dataflow.rb:95:3:95:3 | b | local_dataflow.rb:96:8:96:8 | b | provenance | | +| local_dataflow.rb:95:8:95:16 | call to source | local_dataflow.rb:95:3:95:3 | b | provenance | | +| local_dataflow.rb:95:21:95:29 | call to source | local_dataflow.rb:95:3:95:3 | b | provenance | | +| local_dataflow.rb:98:3:98:3 | a | local_dataflow.rb:99:8:99:8 | a | provenance | | +| local_dataflow.rb:98:20:98:28 | call to source | local_dataflow.rb:98:3:98:3 | a | provenance | | +| local_dataflow.rb:100:3:100:3 | b | local_dataflow.rb:101:8:101:8 | b | provenance | | +| local_dataflow.rb:100:22:100:30 | call to source | local_dataflow.rb:100:3:100:3 | b | provenance | | +| local_dataflow.rb:103:3:103:3 | a | local_dataflow.rb:104:3:104:3 | a | provenance | | +| local_dataflow.rb:103:7:103:15 | call to source | local_dataflow.rb:103:3:103:3 | a | provenance | | +| local_dataflow.rb:104:3:104:3 | a | local_dataflow.rb:105:8:105:8 | a | provenance | | +| local_dataflow.rb:104:9:104:17 | call to source | local_dataflow.rb:104:3:104:3 | a | provenance | | +| local_dataflow.rb:107:3:107:3 | b | local_dataflow.rb:108:8:108:8 | b | provenance | | +| local_dataflow.rb:107:9:107:17 | call to source | local_dataflow.rb:107:3:107:3 | b | provenance | | +| local_dataflow.rb:112:8:112:16 | call to source | local_dataflow.rb:112:8:112:20 | call to dup | provenance | | +| local_dataflow.rb:113:8:113:16 | call to source | local_dataflow.rb:113:8:113:20 | call to dup | provenance | | +| local_dataflow.rb:113:8:113:20 | call to dup | local_dataflow.rb:113:8:113:24 | call to dup | provenance | | +| local_dataflow.rb:117:8:117:16 | call to source | local_dataflow.rb:117:8:117:23 | call to tap | provenance | | +| local_dataflow.rb:118:3:118:11 | call to source | local_dataflow.rb:118:20:118:20 | x | provenance | | +| local_dataflow.rb:118:20:118:20 | x | local_dataflow.rb:118:28:118:28 | x | provenance | | +| local_dataflow.rb:119:8:119:16 | call to source | local_dataflow.rb:119:8:119:23 | call to tap | provenance | | +| local_dataflow.rb:119:8:119:23 | call to tap | local_dataflow.rb:119:8:119:30 | call to tap | provenance | | +| local_dataflow.rb:123:8:123:16 | call to source | local_dataflow.rb:123:8:123:20 | call to dup | provenance | | +| local_dataflow.rb:123:8:123:20 | call to dup | local_dataflow.rb:123:8:123:45 | call to tap | provenance | | +| local_dataflow.rb:123:8:123:45 | call to tap | local_dataflow.rb:123:8:123:49 | call to dup | provenance | | nodes | local_dataflow.rb:78:3:78:3 | z | semmle.label | z | | local_dataflow.rb:78:12:78:20 | call to source | semmle.label | call to source | 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 7ed1f758682..629c9993984 100644 --- a/ruby/ql/test/library-tests/dataflow/params/params-flow.expected +++ b/ruby/ql/test/library-tests/dataflow/params/params-flow.expected @@ -1,174 +1,174 @@ testFailures edges -| params_flow.rb:9:16:9:17 | p1 | params_flow.rb:10:10:10:11 | p1 | -| params_flow.rb:9:20:9:21 | p2 | params_flow.rb:11:10:11:11 | p2 | -| params_flow.rb:14:12:14:19 | call to taint | params_flow.rb:9:16:9:17 | p1 | -| params_flow.rb:14:22:14:29 | call to taint | params_flow.rb:9:20:9:21 | p2 | -| params_flow.rb:16:13:16:14 | p1 | params_flow.rb:17:10:17:11 | p1 | -| params_flow.rb:16:18:16:19 | p2 | params_flow.rb:18:10:18:11 | p2 | -| params_flow.rb:21:13:21:20 | call to taint | params_flow.rb:16:13:16:14 | p1 | -| params_flow.rb:21:27:21:34 | call to taint | params_flow.rb:16:18:16:19 | p2 | -| params_flow.rb:22:13:22:20 | call to taint | params_flow.rb:16:18:16:19 | p2 | -| params_flow.rb:22:27:22:34 | call to taint | params_flow.rb:16:13:16:14 | p1 | -| params_flow.rb:23:16:23:23 | call to taint | params_flow.rb:16:18:16:19 | p2 | -| params_flow.rb:23:33:23:40 | call to taint | params_flow.rb:16:13:16:14 | p1 | -| params_flow.rb:25:12:25:13 | p1 | params_flow.rb:26:10:26:11 | p1 | -| params_flow.rb:25:17:25:24 | **kwargs [element :p2] | params_flow.rb:28:11:28:16 | kwargs [element :p2] | -| params_flow.rb:25:17:25:24 | **kwargs [element :p3] | params_flow.rb:29:11:29:16 | kwargs [element :p3] | -| params_flow.rb:25:17:25:24 | **kwargs [hash-splat position :p2] | params_flow.rb:28:11:28:16 | kwargs [hash-splat position :p2] | -| params_flow.rb:25:17:25:24 | **kwargs [hash-splat position :p3] | params_flow.rb:29:11:29:16 | kwargs [hash-splat position :p3] | -| params_flow.rb:28:11:28:16 | kwargs [element :p2] | params_flow.rb:28:11:28:21 | ...[...] | -| params_flow.rb:28:11:28:16 | kwargs [hash-splat position :p2] | params_flow.rb:28:11:28:21 | ...[...] | -| params_flow.rb:28:11:28:21 | ...[...] | params_flow.rb:28:10:28:22 | ( ... ) | -| params_flow.rb:29:11:29:16 | kwargs [element :p3] | params_flow.rb:29:11:29:21 | ...[...] | -| params_flow.rb:29:11:29:16 | kwargs [hash-splat position :p3] | params_flow.rb:29:11:29:21 | ...[...] | -| params_flow.rb:29:11:29:21 | ...[...] | params_flow.rb:29:10:29:22 | ( ... ) | -| params_flow.rb:33:12:33:19 | call to taint | params_flow.rb:25:12:25:13 | p1 | -| params_flow.rb:33:26:33:34 | call to taint | params_flow.rb:25:17:25:24 | **kwargs [hash-splat position :p2] | -| params_flow.rb:33:41:33:49 | call to taint | params_flow.rb:25:17:25:24 | **kwargs [hash-splat position :p3] | -| params_flow.rb:34:1:34:4 | args [element :p3] | params_flow.rb:35:25:35:28 | args [element :p3] | -| params_flow.rb:34:14:34:22 | call to taint | params_flow.rb:34:1:34:4 | args [element :p3] | -| params_flow.rb:35:12:35:20 | call to taint | params_flow.rb:25:12:25:13 | p1 | -| params_flow.rb:35:23:35:28 | ** ... [element :p3] | params_flow.rb:25:17:25:24 | **kwargs [element :p3] | -| params_flow.rb:35:25:35:28 | args [element :p3] | params_flow.rb:35:23:35:28 | ** ... [element :p3] | -| params_flow.rb:37:1:37:4 | args [element :p1] | params_flow.rb:38:10:38:13 | args [element :p1] | -| params_flow.rb:37:1:37:4 | args [element :p2] | params_flow.rb:38:10:38:13 | args [element :p2] | -| params_flow.rb:37:16:37:24 | call to taint | params_flow.rb:37:1:37:4 | args [element :p1] | -| params_flow.rb:37:34:37:42 | call to taint | params_flow.rb:37:1:37:4 | args [element :p2] | -| params_flow.rb:38:8:38:13 | ** ... [element :p1] | params_flow.rb:25:12:25:13 | p1 | -| params_flow.rb:38:8:38:13 | ** ... [element :p2] | params_flow.rb:25:17:25:24 | **kwargs [element :p2] | -| params_flow.rb:38:10:38:13 | args [element :p1] | params_flow.rb:38:8:38:13 | ** ... [element :p1] | -| params_flow.rb:38:10:38:13 | args [element :p2] | params_flow.rb:38:8:38:13 | ** ... [element :p2] | -| params_flow.rb:40:1:40:4 | args [element :p1] | params_flow.rb:41:26:41:29 | args [element :p1] | -| params_flow.rb:40:16:40:24 | call to taint | params_flow.rb:40:1:40:4 | args [element :p1] | -| params_flow.rb:41:13:41:21 | call to taint | params_flow.rb:16:18:16:19 | p2 | -| params_flow.rb:41:24:41:29 | ** ... [element :p1] | params_flow.rb:16:13:16:14 | p1 | -| params_flow.rb:41:26:41:29 | args [element :p1] | params_flow.rb:41:24:41:29 | ** ... [element :p1] | -| params_flow.rb:43:1:43:4 | args [element 0] | params_flow.rb:44:24:44:27 | args [element 0] | -| params_flow.rb:43:9:43:17 | call to taint | params_flow.rb:43:1:43:4 | args [element 0] | -| params_flow.rb:44:12:44:20 | call to taint | params_flow.rb:9:16:9:17 | p1 | -| params_flow.rb:44:23:44:27 | * ... [element 0] | params_flow.rb:9:20:9:21 | p2 | -| params_flow.rb:44:24:44:27 | args [element 0] | params_flow.rb:44:23:44:27 | * ... [element 0] | -| params_flow.rb:46:1:46:4 | args [element 0] | params_flow.rb:47:13:47:16 | args [element 0] | -| params_flow.rb:46:1:46:4 | args [element 1] | params_flow.rb:47:13:47:16 | args [element 1] | -| params_flow.rb:46:9:46:17 | call to taint | params_flow.rb:46:1:46:4 | args [element 0] | -| params_flow.rb:46:20:46:28 | call to taint | params_flow.rb:46:1:46:4 | args [element 1] | -| params_flow.rb:47:12:47:16 | * ... [element 0] | params_flow.rb:9:16:9:17 | p1 | -| params_flow.rb:47:12:47:16 | * ... [element 1] | params_flow.rb:9:20:9:21 | p2 | -| params_flow.rb:47:13:47:16 | args [element 0] | params_flow.rb:47:12:47:16 | * ... [element 0] | -| params_flow.rb:47:13:47:16 | args [element 1] | params_flow.rb:47:12:47:16 | * ... [element 1] | -| params_flow.rb:49:13:49:14 | p1 | params_flow.rb:50:10:50:11 | p1 | -| params_flow.rb:49:17:49:24 | *posargs [element 0] | params_flow.rb:51:11:51:17 | posargs [element 0] | -| params_flow.rb:49:17:49:24 | *posargs [element 0] | params_flow.rb:51:11:51:17 | posargs [element 0] | -| params_flow.rb:51:11:51:17 | posargs [element 0] | params_flow.rb:51:11:51:20 | ...[...] | -| params_flow.rb:51:11:51:17 | posargs [element 0] | params_flow.rb:51:11:51:20 | ...[...] | -| params_flow.rb:51:11:51:20 | ...[...] | params_flow.rb:51:10:51:21 | ( ... ) | -| params_flow.rb:55:9:55:17 | call to taint | params_flow.rb:49:13:49:14 | p1 | -| params_flow.rb:55:20:55:28 | call to taint | params_flow.rb:49:17:49:24 | *posargs [element 0] | -| params_flow.rb:57:1:57:4 | args [element 0] | params_flow.rb:58:21:58:24 | args [element 0] | -| params_flow.rb:57:9:57:17 | call to taint | params_flow.rb:57:1:57:4 | args [element 0] | -| params_flow.rb:58:9:58:17 | call to taint | params_flow.rb:49:13:49:14 | p1 | -| params_flow.rb:58:20:58:24 | * ... [element 0] | params_flow.rb:49:17:49:24 | *posargs [element 0] | -| params_flow.rb:58:20:58:24 | * ... [element 0] | params_flow.rb:49:17:49:24 | *posargs [element 0] | -| params_flow.rb:58:21:58:24 | args [element 0] | params_flow.rb:58:20:58:24 | * ... [element 0] | -| params_flow.rb:60:1:60:4 | args [element 0] | params_flow.rb:61:10:61:13 | args [element 0] | -| params_flow.rb:60:1:60:4 | args [element 1] | params_flow.rb:61:10:61:13 | args [element 1] | -| params_flow.rb:60:9:60:17 | call to taint | params_flow.rb:60:1:60:4 | args [element 0] | -| params_flow.rb:60:20:60:28 | call to taint | params_flow.rb:60:1:60:4 | args [element 1] | -| params_flow.rb:61:9:61:13 | * ... [element 0] | params_flow.rb:49:13:49:14 | p1 | -| params_flow.rb:61:9:61:13 | * ... [element 1] | params_flow.rb:49:17:49:24 | *posargs [element 0] | -| params_flow.rb:61:10:61:13 | args [element 0] | params_flow.rb:61:9:61:13 | * ... [element 0] | -| params_flow.rb:61:10:61:13 | args [element 1] | params_flow.rb:61:9:61:13 | * ... [element 1] | -| params_flow.rb:63:1:63:4 | args | params_flow.rb:67:13:67:16 | args | -| params_flow.rb:63:8:63:16 | call to taint | params_flow.rb:63:1:63:4 | args | -| params_flow.rb:64:16:64:17 | *x [element 0] | params_flow.rb:65:10:65:10 | x [element 0] | -| params_flow.rb:65:10:65:10 | x [element 0] | params_flow.rb:65:10:65:13 | ...[...] | -| params_flow.rb:67:12:67:16 | * ... [element 0] | params_flow.rb:64:16:64:17 | *x [element 0] | -| params_flow.rb:67:13:67:16 | args | params_flow.rb:67:12:67:16 | * ... [element 0] | -| params_flow.rb:69:14:69:14 | x | params_flow.rb:70:10:70:10 | x | -| params_flow.rb:69:17:69:17 | y | params_flow.rb:71:10:71:10 | y | -| params_flow.rb:69:24:69:24 | w | params_flow.rb:74:10:74:10 | w | -| params_flow.rb:69:27:69:27 | r | params_flow.rb:75:10:75:10 | r | -| params_flow.rb:78:10:78:18 | call to taint | params_flow.rb:69:14:69:14 | x | -| params_flow.rb:78:21:78:29 | call to taint | params_flow.rb:69:17:69:17 | y | -| params_flow.rb:78:43:78:51 | call to taint | params_flow.rb:69:24:69:24 | w | -| params_flow.rb:78:54:78:62 | call to taint | params_flow.rb:69:27:69:27 | r | -| params_flow.rb:80:1:80:4 | args [element 0] | params_flow.rb:81:22:81:25 | args [element 0] | -| params_flow.rb:80:9:80:17 | call to taint | params_flow.rb:80:1:80:4 | args [element 0] | -| params_flow.rb:81:10:81:18 | call to taint | params_flow.rb:69:14:69:14 | x | -| params_flow.rb:81:21:81:25 | * ... [element 0] | params_flow.rb:69:17:69:17 | y | -| params_flow.rb:81:22:81:25 | args [element 0] | params_flow.rb:81:21:81:25 | * ... [element 0] | -| params_flow.rb:83:14:83:14 | t | params_flow.rb:84:10:84:10 | t | -| params_flow.rb:83:17:83:17 | u | params_flow.rb:85:10:85:10 | u | -| params_flow.rb:83:20:83:20 | v | params_flow.rb:86:10:86:10 | v | -| params_flow.rb:83:23:83:23 | w | params_flow.rb:87:10:87:10 | w | -| params_flow.rb:83:26:83:26 | x | params_flow.rb:88:10:88:10 | x | -| params_flow.rb:83:29:83:29 | y | params_flow.rb:89:10:89:10 | y | -| params_flow.rb:93:1:93:4 | args [element 0] | params_flow.rb:94:33:94:36 | args [element 0] | -| params_flow.rb:93:1:93:4 | args [element 1] | params_flow.rb:94:33:94:36 | args [element 1] | -| params_flow.rb:93:1:93:4 | args [element 2] | params_flow.rb:94:33:94:36 | args [element 2] | -| params_flow.rb:93:1:93:4 | args [element 3] | params_flow.rb:94:33:94:36 | args [element 3] | -| params_flow.rb:93:9:93:17 | call to taint | params_flow.rb:93:1:93:4 | args [element 0] | -| params_flow.rb:93:20:93:28 | call to taint | params_flow.rb:93:1:93:4 | args [element 1] | -| params_flow.rb:93:31:93:39 | call to taint | params_flow.rb:93:1:93:4 | args [element 2] | -| params_flow.rb:93:42:93:50 | call to taint | params_flow.rb:93:1:93:4 | args [element 3] | -| params_flow.rb:94:10:94:18 | call to taint | params_flow.rb:83:14:83:14 | t | -| params_flow.rb:94:21:94:29 | call to taint | params_flow.rb:83:17:83:17 | u | -| params_flow.rb:94:32:94:36 | * ... [element 0] | params_flow.rb:83:20:83:20 | v | -| params_flow.rb:94:32:94:36 | * ... [element 1] | params_flow.rb:83:23:83:23 | w | -| params_flow.rb:94:32:94:36 | * ... [element 2] | params_flow.rb:83:26:83:26 | x | -| params_flow.rb:94:32:94:36 | * ... [element 3] | params_flow.rb:83:29:83:29 | y | -| params_flow.rb:94:33:94:36 | args [element 0] | params_flow.rb:94:32:94:36 | * ... [element 0] | -| params_flow.rb:94:33:94:36 | args [element 1] | params_flow.rb:94:32:94:36 | * ... [element 1] | -| params_flow.rb:94:33:94:36 | args [element 2] | params_flow.rb:94:32:94:36 | * ... [element 2] | -| params_flow.rb:94:33:94:36 | args [element 3] | params_flow.rb:94:32:94:36 | * ... [element 3] | -| params_flow.rb:94:39:94:47 | call to taint | params_flow.rb:83:23:83:23 | w | -| params_flow.rb:96:10:96:18 | call to taint | params_flow.rb:69:14:69:14 | x | -| params_flow.rb:96:21:96:29 | call to taint | params_flow.rb:69:17:69:17 | y | -| params_flow.rb:96:68:96:76 | call to taint | params_flow.rb:69:24:69:24 | w | -| params_flow.rb:96:79:96:87 | call to taint | params_flow.rb:69:27:69:27 | r | -| params_flow.rb:98:19:98:19 | a | params_flow.rb:99:10:99:10 | a | -| params_flow.rb:98:31:98:31 | b | params_flow.rb:102:10:102:10 | b | -| params_flow.rb:105:15:105:23 | call to taint | params_flow.rb:98:19:98:19 | a | -| params_flow.rb:106:15:106:23 | call to taint | params_flow.rb:98:19:98:19 | a | -| params_flow.rb:106:37:106:45 | call to taint | params_flow.rb:98:31:98:31 | b | -| params_flow.rb:108:37:108:37 | a | params_flow.rb:109:10:109:10 | a | -| params_flow.rb:108:40:108:41 | *b [element 0] | params_flow.rb:110:10:110:10 | b [element 0] | -| params_flow.rb:108:44:108:44 | c | params_flow.rb:111:10:111:10 | c | -| params_flow.rb:110:10:110:10 | b [element 0] | params_flow.rb:110:10:110:13 | ...[...] | -| params_flow.rb:114:33:114:41 | call to taint | params_flow.rb:108:37:108:37 | a | -| params_flow.rb:114:44:114:52 | call to taint | params_flow.rb:108:40:108:41 | *b [element 0] | -| params_flow.rb:114:58:114:66 | call to taint | params_flow.rb:108:44:108:44 | c | -| params_flow.rb:117:1:117:1 | [post] x [element] | params_flow.rb:118:13:118:13 | x [element] | -| params_flow.rb:117:19:117:27 | call to taint | params_flow.rb:117:1:117:1 | [post] x [element] | -| params_flow.rb:118:12:118:13 | * ... [element] | params_flow.rb:9:16:9:17 | p1 | -| params_flow.rb:118:12:118:13 | * ... [element] | params_flow.rb:9:20:9:21 | p2 | -| params_flow.rb:118:13:118:13 | x [element] | params_flow.rb:118:12:118:13 | * ... [element] | -| params_flow.rb:130:1:130:4 | args [element 0] | params_flow.rb:131:11:131:14 | args [element 0] | -| params_flow.rb:130:1:130:4 | args [element 1] | params_flow.rb:131:11:131:14 | args [element 1] | -| params_flow.rb:130:9:130:17 | call to taint | params_flow.rb:130:1:130:4 | args [element 0] | -| params_flow.rb:130:20:130:28 | call to taint | params_flow.rb:130:1:130:4 | args [element 1] | -| params_flow.rb:131:10:131:14 | * ... [element 0] | params_flow.rb:83:14:83:14 | t | -| params_flow.rb:131:10:131:14 | * ... [element 1] | params_flow.rb:83:17:83:17 | u | -| params_flow.rb:131:11:131:14 | args [element 0] | params_flow.rb:131:10:131:14 | * ... [element 0] | -| params_flow.rb:131:11:131:14 | args [element 1] | params_flow.rb:131:10:131:14 | * ... [element 1] | -| params_flow.rb:131:17:131:25 | call to taint | params_flow.rb:83:17:83:17 | u | -| params_flow.rb:133:14:133:18 | *args [element 1] | params_flow.rb:134:10:134:13 | args [element 1] | -| params_flow.rb:134:10:134:13 | args [element 1] | params_flow.rb:134:10:134:16 | ...[...] | -| params_flow.rb:137:10:137:43 | * ... [element 1] | params_flow.rb:133:14:133:18 | *args [element 1] | -| params_flow.rb:137:23:137:31 | call to taint | params_flow.rb:137:10:137:43 | * ... [element 1] | -| params_flow.rb:153:28:153:29 | p2 | params_flow.rb:154:18:154:19 | p2 | -| params_flow.rb:154:18:154:19 | p2 | params_flow.rb:154:5:154:6 | [post] p1 [element 0] | -| params_flow.rb:164:23:164:24 | [post] p1 [element 0] | params_flow.rb:165:6:165:7 | p1 [element 0] | -| params_flow.rb:164:31:164:39 | call to taint | params_flow.rb:153:28:153:29 | p2 | -| params_flow.rb:164:31:164:39 | call to taint | params_flow.rb:164:23:164:24 | [post] p1 [element 0] | -| params_flow.rb:165:6:165:7 | p1 [element 0] | params_flow.rb:165:6:165:10 | ...[...] | -| params_flow.rb:181:28:181:29 | p2 | params_flow.rb:182:18:182:19 | p2 | -| params_flow.rb:182:18:182:19 | p2 | params_flow.rb:182:5:182:6 | [post] p1 [element 0] | -| params_flow.rb:192:20:192:21 | [post] p1 [element 0] | params_flow.rb:193:6:193:7 | p1 [element 0] | -| params_flow.rb:192:24:192:32 | call to taint | params_flow.rb:181:28:181:29 | p2 | -| params_flow.rb:192:24:192:32 | call to taint | params_flow.rb:192:20:192:21 | [post] p1 [element 0] | -| params_flow.rb:193:6:193:7 | p1 [element 0] | params_flow.rb:193:6:193:10 | ...[...] | +| params_flow.rb:9:16:9:17 | p1 | params_flow.rb:10:10:10:11 | p1 | provenance | | +| params_flow.rb:9:20:9:21 | p2 | params_flow.rb:11:10:11:11 | p2 | provenance | | +| params_flow.rb:14:12:14:19 | call to taint | params_flow.rb:9:16:9:17 | p1 | provenance | | +| params_flow.rb:14:22:14:29 | call to taint | params_flow.rb:9:20:9:21 | p2 | provenance | | +| params_flow.rb:16:13:16:14 | p1 | params_flow.rb:17:10:17:11 | p1 | provenance | | +| params_flow.rb:16:18:16:19 | p2 | params_flow.rb:18:10:18:11 | p2 | provenance | | +| params_flow.rb:21:13:21:20 | call to taint | params_flow.rb:16:13:16:14 | p1 | provenance | | +| params_flow.rb:21:27:21:34 | call to taint | params_flow.rb:16:18:16:19 | p2 | provenance | | +| params_flow.rb:22:13:22:20 | call to taint | params_flow.rb:16:18:16:19 | p2 | provenance | | +| params_flow.rb:22:27:22:34 | call to taint | params_flow.rb:16:13:16:14 | p1 | provenance | | +| params_flow.rb:23:16:23:23 | call to taint | params_flow.rb:16:18:16:19 | p2 | provenance | | +| params_flow.rb:23:33:23:40 | call to taint | params_flow.rb:16:13:16:14 | p1 | provenance | | +| params_flow.rb:25:12:25:13 | p1 | params_flow.rb:26:10:26:11 | p1 | provenance | | +| params_flow.rb:25:17:25:24 | **kwargs [element :p2] | params_flow.rb:28:11:28:16 | kwargs [element :p2] | provenance | | +| params_flow.rb:25:17:25:24 | **kwargs [element :p3] | params_flow.rb:29:11:29:16 | kwargs [element :p3] | provenance | | +| params_flow.rb:25:17:25:24 | **kwargs [hash-splat position :p2] | params_flow.rb:28:11:28:16 | kwargs [hash-splat position :p2] | provenance | | +| params_flow.rb:25:17:25:24 | **kwargs [hash-splat position :p3] | params_flow.rb:29:11:29:16 | kwargs [hash-splat position :p3] | provenance | | +| params_flow.rb:28:11:28:16 | kwargs [element :p2] | params_flow.rb:28:11:28:21 | ...[...] | provenance | | +| params_flow.rb:28:11:28:16 | kwargs [hash-splat position :p2] | params_flow.rb:28:11:28:21 | ...[...] | provenance | | +| params_flow.rb:28:11:28:21 | ...[...] | params_flow.rb:28:10:28:22 | ( ... ) | provenance | | +| params_flow.rb:29:11:29:16 | kwargs [element :p3] | params_flow.rb:29:11:29:21 | ...[...] | provenance | | +| params_flow.rb:29:11:29:16 | kwargs [hash-splat position :p3] | params_flow.rb:29:11:29:21 | ...[...] | provenance | | +| params_flow.rb:29:11:29:21 | ...[...] | params_flow.rb:29:10:29:22 | ( ... ) | provenance | | +| params_flow.rb:33:12:33:19 | call to taint | params_flow.rb:25:12:25:13 | p1 | provenance | | +| params_flow.rb:33:26:33:34 | call to taint | params_flow.rb:25:17:25:24 | **kwargs [hash-splat position :p2] | provenance | | +| params_flow.rb:33:41:33:49 | call to taint | params_flow.rb:25:17:25:24 | **kwargs [hash-splat position :p3] | provenance | | +| params_flow.rb:34:1:34:4 | args [element :p3] | params_flow.rb:35:25:35:28 | args [element :p3] | provenance | | +| params_flow.rb:34:14:34:22 | call to taint | params_flow.rb:34:1:34:4 | args [element :p3] | provenance | | +| params_flow.rb:35:12:35:20 | call to taint | params_flow.rb:25:12:25:13 | p1 | provenance | | +| params_flow.rb:35:23:35:28 | ** ... [element :p3] | params_flow.rb:25:17:25:24 | **kwargs [element :p3] | provenance | | +| params_flow.rb:35:25:35:28 | args [element :p3] | params_flow.rb:35:23:35:28 | ** ... [element :p3] | provenance | | +| params_flow.rb:37:1:37:4 | args [element :p1] | params_flow.rb:38:10:38:13 | args [element :p1] | provenance | | +| params_flow.rb:37:1:37:4 | args [element :p2] | params_flow.rb:38:10:38:13 | args [element :p2] | provenance | | +| params_flow.rb:37:16:37:24 | call to taint | params_flow.rb:37:1:37:4 | args [element :p1] | provenance | | +| params_flow.rb:37:34:37:42 | call to taint | params_flow.rb:37:1:37:4 | args [element :p2] | provenance | | +| params_flow.rb:38:8:38:13 | ** ... [element :p1] | params_flow.rb:25:12:25:13 | p1 | provenance | | +| params_flow.rb:38:8:38:13 | ** ... [element :p2] | params_flow.rb:25:17:25:24 | **kwargs [element :p2] | provenance | | +| params_flow.rb:38:10:38:13 | args [element :p1] | params_flow.rb:38:8:38:13 | ** ... [element :p1] | provenance | | +| params_flow.rb:38:10:38:13 | args [element :p2] | params_flow.rb:38:8:38:13 | ** ... [element :p2] | provenance | | +| params_flow.rb:40:1:40:4 | args [element :p1] | params_flow.rb:41:26:41:29 | args [element :p1] | provenance | | +| params_flow.rb:40:16:40:24 | call to taint | params_flow.rb:40:1:40:4 | args [element :p1] | provenance | | +| params_flow.rb:41:13:41:21 | call to taint | params_flow.rb:16:18:16:19 | p2 | provenance | | +| params_flow.rb:41:24:41:29 | ** ... [element :p1] | params_flow.rb:16:13:16:14 | p1 | provenance | | +| params_flow.rb:41:26:41:29 | args [element :p1] | params_flow.rb:41:24:41:29 | ** ... [element :p1] | provenance | | +| params_flow.rb:43:1:43:4 | args [element 0] | params_flow.rb:44:24:44:27 | args [element 0] | provenance | | +| params_flow.rb:43:9:43:17 | call to taint | params_flow.rb:43:1:43:4 | args [element 0] | provenance | | +| params_flow.rb:44:12:44:20 | call to taint | params_flow.rb:9:16:9:17 | p1 | provenance | | +| params_flow.rb:44:23:44:27 | * ... [element 0] | params_flow.rb:9:20:9:21 | p2 | provenance | | +| params_flow.rb:44:24:44:27 | args [element 0] | params_flow.rb:44:23:44:27 | * ... [element 0] | provenance | | +| params_flow.rb:46:1:46:4 | args [element 0] | params_flow.rb:47:13:47:16 | args [element 0] | provenance | | +| params_flow.rb:46:1:46:4 | args [element 1] | params_flow.rb:47:13:47:16 | args [element 1] | provenance | | +| params_flow.rb:46:9:46:17 | call to taint | params_flow.rb:46:1:46:4 | args [element 0] | provenance | | +| params_flow.rb:46:20:46:28 | call to taint | params_flow.rb:46:1:46:4 | args [element 1] | provenance | | +| params_flow.rb:47:12:47:16 | * ... [element 0] | params_flow.rb:9:16:9:17 | p1 | provenance | | +| params_flow.rb:47:12:47:16 | * ... [element 1] | params_flow.rb:9:20:9:21 | p2 | provenance | | +| params_flow.rb:47:13:47:16 | args [element 0] | params_flow.rb:47:12:47:16 | * ... [element 0] | provenance | | +| params_flow.rb:47:13:47:16 | args [element 1] | params_flow.rb:47:12:47:16 | * ... [element 1] | provenance | | +| params_flow.rb:49:13:49:14 | p1 | params_flow.rb:50:10:50:11 | p1 | provenance | | +| params_flow.rb:49:17:49:24 | *posargs [element 0] | params_flow.rb:51:11:51:17 | posargs [element 0] | provenance | | +| params_flow.rb:49:17:49:24 | *posargs [element 0] | params_flow.rb:51:11:51:17 | posargs [element 0] | provenance | | +| params_flow.rb:51:11:51:17 | posargs [element 0] | params_flow.rb:51:11:51:20 | ...[...] | provenance | | +| params_flow.rb:51:11:51:17 | posargs [element 0] | params_flow.rb:51:11:51:20 | ...[...] | provenance | | +| params_flow.rb:51:11:51:20 | ...[...] | params_flow.rb:51:10:51:21 | ( ... ) | provenance | | +| params_flow.rb:55:9:55:17 | call to taint | params_flow.rb:49:13:49:14 | p1 | provenance | | +| params_flow.rb:55:20:55:28 | call to taint | params_flow.rb:49:17:49:24 | *posargs [element 0] | provenance | | +| params_flow.rb:57:1:57:4 | args [element 0] | params_flow.rb:58:21:58:24 | args [element 0] | provenance | | +| params_flow.rb:57:9:57:17 | call to taint | params_flow.rb:57:1:57:4 | args [element 0] | provenance | | +| params_flow.rb:58:9:58:17 | call to taint | params_flow.rb:49:13:49:14 | p1 | provenance | | +| params_flow.rb:58:20:58:24 | * ... [element 0] | params_flow.rb:49:17:49:24 | *posargs [element 0] | provenance | | +| params_flow.rb:58:20:58:24 | * ... [element 0] | params_flow.rb:49:17:49:24 | *posargs [element 0] | provenance | | +| params_flow.rb:58:21:58:24 | args [element 0] | params_flow.rb:58:20:58:24 | * ... [element 0] | provenance | | +| params_flow.rb:60:1:60:4 | args [element 0] | params_flow.rb:61:10:61:13 | args [element 0] | provenance | | +| params_flow.rb:60:1:60:4 | args [element 1] | params_flow.rb:61:10:61:13 | args [element 1] | provenance | | +| params_flow.rb:60:9:60:17 | call to taint | params_flow.rb:60:1:60:4 | args [element 0] | provenance | | +| params_flow.rb:60:20:60:28 | call to taint | params_flow.rb:60:1:60:4 | args [element 1] | provenance | | +| params_flow.rb:61:9:61:13 | * ... [element 0] | params_flow.rb:49:13:49:14 | p1 | provenance | | +| params_flow.rb:61:9:61:13 | * ... [element 1] | params_flow.rb:49:17:49:24 | *posargs [element 0] | provenance | | +| params_flow.rb:61:10:61:13 | args [element 0] | params_flow.rb:61:9:61:13 | * ... [element 0] | provenance | | +| params_flow.rb:61:10:61:13 | args [element 1] | params_flow.rb:61:9:61:13 | * ... [element 1] | provenance | | +| params_flow.rb:63:1:63:4 | args | params_flow.rb:67:13:67:16 | args | provenance | | +| params_flow.rb:63:8:63:16 | call to taint | params_flow.rb:63:1:63:4 | args | provenance | | +| params_flow.rb:64:16:64:17 | *x [element 0] | params_flow.rb:65:10:65:10 | x [element 0] | provenance | | +| params_flow.rb:65:10:65:10 | x [element 0] | params_flow.rb:65:10:65:13 | ...[...] | provenance | | +| params_flow.rb:67:12:67:16 | * ... [element 0] | params_flow.rb:64:16:64:17 | *x [element 0] | provenance | | +| params_flow.rb:67:13:67:16 | args | params_flow.rb:67:12:67:16 | * ... [element 0] | provenance | | +| params_flow.rb:69:14:69:14 | x | params_flow.rb:70:10:70:10 | x | provenance | | +| params_flow.rb:69:17:69:17 | y | params_flow.rb:71:10:71:10 | y | provenance | | +| params_flow.rb:69:24:69:24 | w | params_flow.rb:74:10:74:10 | w | provenance | | +| params_flow.rb:69:27:69:27 | r | params_flow.rb:75:10:75:10 | r | provenance | | +| params_flow.rb:78:10:78:18 | call to taint | params_flow.rb:69:14:69:14 | x | provenance | | +| params_flow.rb:78:21:78:29 | call to taint | params_flow.rb:69:17:69:17 | y | provenance | | +| params_flow.rb:78:43:78:51 | call to taint | params_flow.rb:69:24:69:24 | w | provenance | | +| params_flow.rb:78:54:78:62 | call to taint | params_flow.rb:69:27:69:27 | r | provenance | | +| params_flow.rb:80:1:80:4 | args [element 0] | params_flow.rb:81:22:81:25 | args [element 0] | provenance | | +| params_flow.rb:80:9:80:17 | call to taint | params_flow.rb:80:1:80:4 | args [element 0] | provenance | | +| params_flow.rb:81:10:81:18 | call to taint | params_flow.rb:69:14:69:14 | x | provenance | | +| params_flow.rb:81:21:81:25 | * ... [element 0] | params_flow.rb:69:17:69:17 | y | provenance | | +| params_flow.rb:81:22:81:25 | args [element 0] | params_flow.rb:81:21:81:25 | * ... [element 0] | provenance | | +| params_flow.rb:83:14:83:14 | t | params_flow.rb:84:10:84:10 | t | provenance | | +| params_flow.rb:83:17:83:17 | u | params_flow.rb:85:10:85:10 | u | provenance | | +| params_flow.rb:83:20:83:20 | v | params_flow.rb:86:10:86:10 | v | provenance | | +| params_flow.rb:83:23:83:23 | w | params_flow.rb:87:10:87:10 | w | provenance | | +| params_flow.rb:83:26:83:26 | x | params_flow.rb:88:10:88:10 | x | provenance | | +| params_flow.rb:83:29:83:29 | y | params_flow.rb:89:10:89:10 | y | provenance | | +| params_flow.rb:93:1:93:4 | args [element 0] | params_flow.rb:94:33:94:36 | args [element 0] | provenance | | +| params_flow.rb:93:1:93:4 | args [element 1] | params_flow.rb:94:33:94:36 | args [element 1] | provenance | | +| params_flow.rb:93:1:93:4 | args [element 2] | params_flow.rb:94:33:94:36 | args [element 2] | provenance | | +| params_flow.rb:93:1:93:4 | args [element 3] | params_flow.rb:94:33:94:36 | args [element 3] | provenance | | +| params_flow.rb:93:9:93:17 | call to taint | params_flow.rb:93:1:93:4 | args [element 0] | provenance | | +| params_flow.rb:93:20:93:28 | call to taint | params_flow.rb:93:1:93:4 | args [element 1] | provenance | | +| params_flow.rb:93:31:93:39 | call to taint | params_flow.rb:93:1:93:4 | args [element 2] | provenance | | +| params_flow.rb:93:42:93:50 | call to taint | params_flow.rb:93:1:93:4 | args [element 3] | provenance | | +| params_flow.rb:94:10:94:18 | call to taint | params_flow.rb:83:14:83:14 | t | provenance | | +| params_flow.rb:94:21:94:29 | call to taint | params_flow.rb:83:17:83:17 | u | provenance | | +| params_flow.rb:94:32:94:36 | * ... [element 0] | params_flow.rb:83:20:83:20 | v | provenance | | +| params_flow.rb:94:32:94:36 | * ... [element 1] | params_flow.rb:83:23:83:23 | w | provenance | | +| params_flow.rb:94:32:94:36 | * ... [element 2] | params_flow.rb:83:26:83:26 | x | provenance | | +| params_flow.rb:94:32:94:36 | * ... [element 3] | params_flow.rb:83:29:83:29 | y | provenance | | +| params_flow.rb:94:33:94:36 | args [element 0] | params_flow.rb:94:32:94:36 | * ... [element 0] | provenance | | +| params_flow.rb:94:33:94:36 | args [element 1] | params_flow.rb:94:32:94:36 | * ... [element 1] | provenance | | +| params_flow.rb:94:33:94:36 | args [element 2] | params_flow.rb:94:32:94:36 | * ... [element 2] | provenance | | +| params_flow.rb:94:33:94:36 | args [element 3] | params_flow.rb:94:32:94:36 | * ... [element 3] | provenance | | +| params_flow.rb:94:39:94:47 | call to taint | params_flow.rb:83:23:83:23 | w | provenance | | +| params_flow.rb:96:10:96:18 | call to taint | params_flow.rb:69:14:69:14 | x | provenance | | +| params_flow.rb:96:21:96:29 | call to taint | params_flow.rb:69:17:69:17 | y | provenance | | +| params_flow.rb:96:68:96:76 | call to taint | params_flow.rb:69:24:69:24 | w | provenance | | +| params_flow.rb:96:79:96:87 | call to taint | params_flow.rb:69:27:69:27 | r | provenance | | +| params_flow.rb:98:19:98:19 | a | params_flow.rb:99:10:99:10 | a | provenance | | +| params_flow.rb:98:31:98:31 | b | params_flow.rb:102:10:102:10 | b | provenance | | +| params_flow.rb:105:15:105:23 | call to taint | params_flow.rb:98:19:98:19 | a | provenance | | +| params_flow.rb:106:15:106:23 | call to taint | params_flow.rb:98:19:98:19 | a | provenance | | +| params_flow.rb:106:37:106:45 | call to taint | params_flow.rb:98:31:98:31 | b | provenance | | +| params_flow.rb:108:37:108:37 | a | params_flow.rb:109:10:109:10 | a | provenance | | +| params_flow.rb:108:40:108:41 | *b [element 0] | params_flow.rb:110:10:110:10 | b [element 0] | provenance | | +| params_flow.rb:108:44:108:44 | c | params_flow.rb:111:10:111:10 | c | provenance | | +| params_flow.rb:110:10:110:10 | b [element 0] | params_flow.rb:110:10:110:13 | ...[...] | provenance | | +| params_flow.rb:114:33:114:41 | call to taint | params_flow.rb:108:37:108:37 | a | provenance | | +| params_flow.rb:114:44:114:52 | call to taint | params_flow.rb:108:40:108:41 | *b [element 0] | provenance | | +| params_flow.rb:114:58:114:66 | call to taint | params_flow.rb:108:44:108:44 | c | provenance | | +| params_flow.rb:117:1:117:1 | [post] x [element] | params_flow.rb:118:13:118:13 | x [element] | provenance | | +| params_flow.rb:117:19:117:27 | call to taint | params_flow.rb:117:1:117:1 | [post] x [element] | provenance | | +| params_flow.rb:118:12:118:13 | * ... [element] | params_flow.rb:9:16:9:17 | p1 | provenance | | +| params_flow.rb:118:12:118:13 | * ... [element] | params_flow.rb:9:20:9:21 | p2 | provenance | | +| params_flow.rb:118:13:118:13 | x [element] | params_flow.rb:118:12:118:13 | * ... [element] | provenance | | +| params_flow.rb:130:1:130:4 | args [element 0] | params_flow.rb:131:11:131:14 | args [element 0] | provenance | | +| params_flow.rb:130:1:130:4 | args [element 1] | params_flow.rb:131:11:131:14 | args [element 1] | provenance | | +| params_flow.rb:130:9:130:17 | call to taint | params_flow.rb:130:1:130:4 | args [element 0] | provenance | | +| params_flow.rb:130:20:130:28 | call to taint | params_flow.rb:130:1:130:4 | args [element 1] | provenance | | +| params_flow.rb:131:10:131:14 | * ... [element 0] | params_flow.rb:83:14:83:14 | t | provenance | | +| params_flow.rb:131:10:131:14 | * ... [element 1] | params_flow.rb:83:17:83:17 | u | provenance | | +| params_flow.rb:131:11:131:14 | args [element 0] | params_flow.rb:131:10:131:14 | * ... [element 0] | provenance | | +| params_flow.rb:131:11:131:14 | args [element 1] | params_flow.rb:131:10:131:14 | * ... [element 1] | provenance | | +| params_flow.rb:131:17:131:25 | call to taint | params_flow.rb:83:17:83:17 | u | provenance | | +| params_flow.rb:133:14:133:18 | *args [element 1] | params_flow.rb:134:10:134:13 | args [element 1] | provenance | | +| params_flow.rb:134:10:134:13 | args [element 1] | params_flow.rb:134:10:134:16 | ...[...] | provenance | | +| params_flow.rb:137:10:137:43 | * ... [element 1] | params_flow.rb:133:14:133:18 | *args [element 1] | provenance | | +| params_flow.rb:137:23:137:31 | call to taint | params_flow.rb:137:10:137:43 | * ... [element 1] | provenance | | +| params_flow.rb:153:28:153:29 | p2 | params_flow.rb:154:18:154:19 | p2 | 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: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 | | +| params_flow.rb:192:24:192:32 | call to taint | params_flow.rb:192:20:192:21 | [post] p1 [element 0] | provenance | | +| params_flow.rb:193:6:193:7 | p1 [element 0] | params_flow.rb:193:6:193:10 | ...[...] | provenance | | nodes | params_flow.rb:9:16:9:17 | p1 | semmle.label | p1 | | params_flow.rb:9:20:9:21 | p2 | semmle.label | p2 | diff --git a/ruby/ql/test/library-tests/dataflow/ssa-flow/ssa-flow.expected b/ruby/ql/test/library-tests/dataflow/ssa-flow/ssa-flow.expected index c7a8595c464..4fc620f6850 100644 --- a/ruby/ql/test/library-tests/dataflow/ssa-flow/ssa-flow.expected +++ b/ruby/ql/test/library-tests/dataflow/ssa-flow/ssa-flow.expected @@ -1,8 +1,8 @@ testFailures edges -| ssa_flow.rb:12:9:12:9 | [post] a [element 0] | ssa_flow.rb:16:10:16:10 | a [element 0] | -| ssa_flow.rb:12:16:12:23 | call to taint | ssa_flow.rb:12:9:12:9 | [post] a [element 0] | -| ssa_flow.rb:16:10:16:10 | a [element 0] | ssa_flow.rb:16:10:16:13 | ...[...] | +| ssa_flow.rb:12:9:12:9 | [post] a [element 0] | ssa_flow.rb:16:10:16:10 | a [element 0] | provenance | | +| ssa_flow.rb:12:16:12:23 | call to taint | ssa_flow.rb:12:9:12:9 | [post] a [element 0] | provenance | | +| ssa_flow.rb:16:10:16:10 | a [element 0] | ssa_flow.rb:16:10:16:13 | ...[...] | provenance | | nodes | ssa_flow.rb:12:9:12:9 | [post] a [element 0] | semmle.label | [post] a [element 0] | | ssa_flow.rb:12:16:12:23 | call to taint | semmle.label | call to taint | diff --git a/ruby/ql/test/library-tests/dataflow/string-flow/string-flow.expected b/ruby/ql/test/library-tests/dataflow/string-flow/string-flow.expected index ec483b6fc8e..48b62cc592d 100644 --- a/ruby/ql/test/library-tests/dataflow/string-flow/string-flow.expected +++ b/ruby/ql/test/library-tests/dataflow/string-flow/string-flow.expected @@ -2,17 +2,17 @@ testFailures | string_flow.rb:85:10:85:10 | a | Unexpected result: hasValueFlow=a | | string_flow.rb:227:10:227:10 | a | Unexpected result: hasValueFlow=a | edges -| string_flow.rb:2:5:2:5 | a | string_flow.rb:3:21:3:21 | a | -| string_flow.rb:2:9:2:18 | call to source | string_flow.rb:2:5:2:5 | a | -| string_flow.rb:3:21:3:21 | a | string_flow.rb:3:10:3:22 | call to new | -| string_flow.rb:83:5:83:5 | a | string_flow.rb:84:5:84:5 | a | -| string_flow.rb:83:9:83:18 | call to source | string_flow.rb:83:5:83:5 | a | -| string_flow.rb:84:5:84:5 | [post] a | string_flow.rb:85:10:85:10 | a | -| string_flow.rb:84:5:84:5 | a | string_flow.rb:84:5:84:5 | [post] a | -| string_flow.rb:223:5:223:5 | a | string_flow.rb:225:10:225:10 | a | -| string_flow.rb:223:9:223:18 | call to source | string_flow.rb:223:5:223:5 | a | -| string_flow.rb:225:10:225:10 | [post] a | string_flow.rb:227:10:227:10 | a | -| string_flow.rb:225:10:225:10 | a | string_flow.rb:225:10:225:10 | [post] a | +| string_flow.rb:2:5:2:5 | a | string_flow.rb:3:21:3:21 | a | provenance | | +| string_flow.rb:2:9:2:18 | call to source | string_flow.rb:2:5:2:5 | a | provenance | | +| string_flow.rb:3:21:3:21 | a | string_flow.rb:3:10:3:22 | call to new | provenance | | +| string_flow.rb:83:5:83:5 | a | string_flow.rb:84:5:84:5 | a | provenance | | +| string_flow.rb:83:9:83:18 | call to source | string_flow.rb:83:5:83:5 | a | provenance | | +| string_flow.rb:84:5:84:5 | [post] a | string_flow.rb:85:10:85:10 | a | provenance | | +| string_flow.rb:84:5:84:5 | a | string_flow.rb:84:5:84:5 | [post] a | provenance | | +| string_flow.rb:223:5:223:5 | a | string_flow.rb:225:10:225:10 | a | provenance | | +| string_flow.rb:223:9:223:18 | call to source | string_flow.rb:223:5:223:5 | a | provenance | | +| string_flow.rb:225:10:225:10 | [post] a | string_flow.rb:227:10:227:10 | a | provenance | | +| string_flow.rb:225:10:225:10 | a | string_flow.rb:225:10:225:10 | [post] a | provenance | | nodes | string_flow.rb:2:5:2:5 | a | semmle.label | a | | string_flow.rb:2:9:2:18 | call to source | semmle.label | call to source | diff --git a/ruby/ql/test/library-tests/dataflow/summaries/Summaries.expected b/ruby/ql/test/library-tests/dataflow/summaries/Summaries.expected index b8194f74f42..693832e5577 100644 --- a/ruby/ql/test/library-tests/dataflow/summaries/Summaries.expected +++ b/ruby/ql/test/library-tests/dataflow/summaries/Summaries.expected @@ -1,258 +1,258 @@ testFailures edges -| summaries.rb:1:11:1:36 | call to identity | summaries.rb:2:6:2:12 | tainted | -| summaries.rb:1:11:1:36 | call to identity | summaries.rb:2:6:2:12 | tainted | -| summaries.rb:1:11:1:36 | call to identity | summaries.rb:4:24:4:30 | tainted | -| summaries.rb:1:11:1:36 | call to identity | summaries.rb:4:24:4:30 | tainted | -| summaries.rb:1:11:1:36 | call to identity | summaries.rb:16:36:16:42 | tainted | -| summaries.rb:1:11:1:36 | call to identity | summaries.rb:16:36:16:42 | tainted | -| summaries.rb:1:11:1:36 | call to identity | summaries.rb:20:25:20:31 | tainted | -| summaries.rb:1:11:1:36 | call to identity | summaries.rb:26:31:26:37 | tainted | -| summaries.rb:1:11:1:36 | call to identity | summaries.rb:30:24:30:30 | tainted | -| summaries.rb:1:11:1:36 | call to identity | summaries.rb:31:27:31:33 | tainted | -| summaries.rb:1:11:1:36 | call to identity | summaries.rb:34:16:34:22 | tainted | -| summaries.rb:1:11:1:36 | call to identity | summaries.rb:34:16:34:22 | tainted | -| summaries.rb:1:11:1:36 | call to identity | summaries.rb:35:16:35:22 | tainted | -| summaries.rb:1:11:1:36 | call to identity | summaries.rb:35:16:35:22 | tainted | -| summaries.rb:1:11:1:36 | call to identity | summaries.rb:36:21:36:27 | tainted | -| summaries.rb:1:11:1:36 | call to identity | summaries.rb:36:21:36:27 | tainted | -| summaries.rb:1:11:1:36 | call to identity | summaries.rb:37:36:37:42 | tainted | -| summaries.rb:1:11:1:36 | call to identity | summaries.rb:37:36:37:42 | tainted | -| summaries.rb:1:11:1:36 | call to identity | summaries.rb:51:24:51:30 | tainted | -| summaries.rb:1:11:1:36 | call to identity | summaries.rb:56:22:56:28 | tainted | -| summaries.rb:1:11:1:36 | call to identity | summaries.rb:57:17:57:23 | tainted | -| summaries.rb:1:11:1:36 | call to identity | summaries.rb:59:27:59:33 | tainted | -| summaries.rb:1:11:1:36 | call to identity | summaries.rb:63:32:63:38 | tainted | -| summaries.rb:1:11:1:36 | call to identity | summaries.rb:65:23:65:29 | tainted | -| summaries.rb:1:11:1:36 | call to identity | summaries.rb:122:16:122:22 | tainted | -| summaries.rb:1:11:1:36 | call to identity | summaries.rb:128:14:128:20 | tainted | -| summaries.rb:1:11:1:36 | call to identity | summaries.rb:131:16:131:22 | tainted | -| summaries.rb:1:11:1:36 | call to identity | summaries.rb:131:16:131:22 | tainted | -| summaries.rb:1:11:1:36 | call to identity | summaries.rb:131:16:131:22 | tainted | -| summaries.rb:1:11:1:36 | call to identity | summaries.rb:132:21:132:27 | tainted | -| summaries.rb:1:11:1:36 | call to identity | summaries.rb:132:21:132:27 | tainted | -| summaries.rb:1:11:1:36 | call to identity | summaries.rb:135:26:135:32 | tainted | -| summaries.rb:1:11:1:36 | call to identity | summaries.rb:135:26:135:32 | tainted | -| summaries.rb:1:11:1:36 | call to identity | summaries.rb:137:23:137:29 | tainted | -| summaries.rb:1:11:1:36 | call to identity | summaries.rb:137:23:137:29 | tainted | -| summaries.rb:1:11:1:36 | call to identity | summaries.rb:140:19:140:25 | tainted | -| summaries.rb:1:11:1:36 | call to identity | summaries.rb:140:19:140:25 | tainted | -| summaries.rb:1:11:1:36 | call to identity | summaries.rb:141:19:141:25 | tainted | -| summaries.rb:1:11:1:36 | call to identity | summaries.rb:141:19:141:25 | tainted | -| summaries.rb:1:11:1:36 | call to identity | summaries.rb:145:26:145:32 | tainted | -| summaries.rb:1:11:1:36 | call to identity | summaries.rb:145:26:145:32 | tainted | -| summaries.rb:1:11:1:36 | call to identity | summaries.rb:147:16:147:22 | tainted | -| summaries.rb:1:11:1:36 | call to identity | summaries.rb:147:16:147:22 | tainted | -| summaries.rb:1:11:1:36 | call to identity | summaries.rb:150:39:150:45 | tainted | -| summaries.rb:1:11:1:36 | call to identity | summaries.rb:150:39:150:45 | tainted | -| summaries.rb:1:11:1:36 | call to identity | summaries.rb:154:20:154:26 | tainted | -| summaries.rb:1:11:1:36 | call to identity | summaries.rb:154:20:154:26 | tainted | -| summaries.rb:1:11:1:36 | call to identity | summaries.rb:155:28:155:34 | tainted | -| summaries.rb:1:11:1:36 | call to identity | summaries.rb:155:28:155:34 | tainted | -| summaries.rb:1:11:1:36 | call to identity | summaries.rb:156:27:156:33 | tainted | -| summaries.rb:1:11:1:36 | call to identity | summaries.rb:156:27:156:33 | tainted | -| summaries.rb:1:11:1:36 | call to identity | summaries.rb:157:14:160:3 | do ... end [captured tainted] | -| summaries.rb:1:11:1:36 | call to identity | summaries.rb:157:14:160:3 | do ... end [captured tainted] | -| summaries.rb:1:20:1:36 | call to source | summaries.rb:1:11:1:36 | call to identity | -| summaries.rb:1:20:1:36 | call to source | summaries.rb:1:11:1:36 | call to identity | -| summaries.rb:4:1:4:8 | tainted2 | summaries.rb:9:6:9:13 | tainted2 | -| summaries.rb:4:1:4:8 | tainted2 | summaries.rb:9:6:9:13 | tainted2 | -| summaries.rb:4:12:7:3 | call to apply_block | summaries.rb:4:1:4:8 | tainted2 | -| summaries.rb:4:12:7:3 | call to apply_block | summaries.rb:4:1:4:8 | tainted2 | -| summaries.rb:4:24:4:30 | tainted | summaries.rb:4:12:7:3 | call to apply_block | -| summaries.rb:4:24:4:30 | tainted | summaries.rb:4:12:7:3 | call to apply_block | -| summaries.rb:4:24:4:30 | tainted | summaries.rb:4:36:4:36 | x | -| summaries.rb:4:24:4:30 | tainted | summaries.rb:4:36:4:36 | x | -| summaries.rb:4:36:4:36 | x | summaries.rb:5:8:5:8 | x | -| summaries.rb:4:36:4:36 | x | summaries.rb:5:8:5:8 | x | -| summaries.rb:11:17:11:17 | x | summaries.rb:12:8:12:8 | x | -| summaries.rb:11:17:11:17 | x | summaries.rb:12:8:12:8 | x | -| summaries.rb:16:1:16:8 | tainted3 | summaries.rb:18:6:18:13 | tainted3 | -| summaries.rb:16:1:16:8 | tainted3 | summaries.rb:18:6:18:13 | tainted3 | -| summaries.rb:16:12:16:43 | call to apply_lambda | summaries.rb:16:1:16:8 | tainted3 | -| summaries.rb:16:12:16:43 | call to apply_lambda | summaries.rb:16:1:16:8 | tainted3 | -| summaries.rb:16:36:16:42 | tainted | summaries.rb:11:17:11:17 | x | -| summaries.rb:16:36:16:42 | tainted | summaries.rb:11:17:11:17 | x | -| summaries.rb:16:36:16:42 | tainted | summaries.rb:16:12:16:43 | call to apply_lambda | -| summaries.rb:16:36:16:42 | tainted | summaries.rb:16:12:16:43 | call to apply_lambda | -| summaries.rb:20:1:20:8 | tainted4 | summaries.rb:21:6:21:13 | tainted4 | -| summaries.rb:20:12:20:32 | call to firstArg | summaries.rb:20:1:20:8 | tainted4 | -| summaries.rb:20:25:20:31 | tainted | summaries.rb:20:12:20:32 | call to firstArg | -| summaries.rb:26:1:26:8 | tainted5 | summaries.rb:27:6:27:13 | tainted5 | -| summaries.rb:26:12:26:38 | call to secondArg | summaries.rb:26:1:26:8 | tainted5 | -| summaries.rb:26:31:26:37 | tainted | summaries.rb:26:12:26:38 | call to secondArg | -| summaries.rb:30:24:30:30 | tainted | summaries.rb:30:6:30:42 | call to onlyWithBlock | -| summaries.rb:31:27:31:33 | tainted | summaries.rb:31:6:31:34 | call to onlyWithoutBlock | -| summaries.rb:40:3:40:3 | t | summaries.rb:41:24:41:24 | t | -| summaries.rb:40:3:40:3 | t | summaries.rb:42:24:42:24 | t | -| summaries.rb:40:3:40:3 | t | summaries.rb:44:8:44:8 | t | -| summaries.rb:40:7:40:17 | call to source | summaries.rb:40:3:40:3 | t | -| summaries.rb:41:24:41:24 | t | summaries.rb:41:8:41:25 | call to matchedByName | -| summaries.rb:42:24:42:24 | t | summaries.rb:42:8:42:25 | call to matchedByName | -| summaries.rb:44:8:44:8 | t | summaries.rb:44:8:44:27 | call to matchedByNameRcv | -| summaries.rb:48:24:48:41 | call to source | summaries.rb:48:8:48:42 | call to preserveTaint | -| summaries.rb:51:24:51:30 | tainted | summaries.rb:51:6:51:31 | call to namedArg | -| summaries.rb:53:1:53:4 | args [element :foo] | summaries.rb:54:21:54:24 | args [element :foo] | -| summaries.rb:53:15:53:31 | call to source | summaries.rb:53:1:53:4 | args [element :foo] | -| summaries.rb:54:19:54:24 | ** ... [element :foo] | summaries.rb:54:6:54:25 | call to namedArg | -| summaries.rb:54:21:54:24 | args [element :foo] | summaries.rb:54:19:54:24 | ** ... [element :foo] | -| summaries.rb:56:22:56:28 | tainted | summaries.rb:56:6:56:29 | call to anyArg | -| summaries.rb:57:17:57:23 | tainted | summaries.rb:57:6:57:24 | call to anyArg | -| summaries.rb:59:27:59:33 | tainted | summaries.rb:59:6:59:34 | call to anyNamedArg | -| summaries.rb:63:32:63:38 | tainted | summaries.rb:63:6:63:39 | call to anyPositionFromOne | -| summaries.rb:65:23:65:29 | tainted | summaries.rb:65:40:65:40 | x | -| summaries.rb:65:40:65:40 | x | summaries.rb:66:8:66:8 | x | -| summaries.rb:73:24:73:53 | call to source | summaries.rb:73:8:73:54 | call to preserveTaint | -| summaries.rb:76:26:76:56 | call to source | summaries.rb:76:8:76:57 | call to preserveTaint | -| summaries.rb:79:1:79:1 | a [element 1] | summaries.rb:82:6:82:6 | a [element 1] | -| summaries.rb:79:1:79:1 | a [element 1] | summaries.rb:82:6:82:6 | a [element 1] | -| summaries.rb:79:1:79:1 | a [element 1] | summaries.rb:83:6:83:6 | a [element 1] | -| summaries.rb:79:1:79:1 | a [element 1] | summaries.rb:83:6:83:6 | a [element 1] | -| summaries.rb:79:1:79:1 | a [element 1] | summaries.rb:85:6:85:6 | a [element 1] | -| summaries.rb:79:1:79:1 | a [element 1] | summaries.rb:85:6:85:6 | a [element 1] | -| summaries.rb:79:1:79:1 | a [element 1] | summaries.rb:87:5:87:5 | a [element 1] | -| summaries.rb:79:1:79:1 | a [element 1] | summaries.rb:87:5:87:5 | a [element 1] | -| summaries.rb:79:1:79:1 | a [element 1] | summaries.rb:91:5:91:5 | a [element 1] | -| summaries.rb:79:1:79:1 | a [element 1] | summaries.rb:91:5:91:5 | a [element 1] | -| summaries.rb:79:1:79:1 | a [element 2] | summaries.rb:86:6:86:6 | a [element 2] | -| summaries.rb:79:1:79:1 | a [element 2] | summaries.rb:86:6:86:6 | a [element 2] | -| summaries.rb:79:1:79:1 | a [element 2] | summaries.rb:95:1:95:1 | a [element 2] | -| summaries.rb:79:1:79:1 | a [element 2] | summaries.rb:95:1:95:1 | a [element 2] | -| summaries.rb:79:15:79:29 | call to source | summaries.rb:79:1:79:1 | a [element 1] | -| summaries.rb:79:15:79:29 | call to source | summaries.rb:79:1:79:1 | a [element 1] | -| summaries.rb:79:32:79:46 | call to source | summaries.rb:79:1:79:1 | a [element 2] | -| summaries.rb:79:32:79:46 | call to source | summaries.rb:79:1:79:1 | a [element 2] | -| summaries.rb:81:1:81:1 | [post] a [element] | summaries.rb:82:6:82:6 | a [element] | -| summaries.rb:81:1:81:1 | [post] a [element] | summaries.rb:82:6:82:6 | a [element] | -| summaries.rb:81:1:81:1 | [post] a [element] | summaries.rb:84:6:84:6 | a [element] | -| summaries.rb:81:1:81:1 | [post] a [element] | summaries.rb:84:6:84:6 | a [element] | -| summaries.rb:81:1:81:1 | [post] a [element] | summaries.rb:85:6:85:6 | a [element] | -| summaries.rb:81:1:81:1 | [post] a [element] | summaries.rb:85:6:85:6 | a [element] | -| summaries.rb:81:1:81:1 | [post] a [element] | summaries.rb:86:6:86:6 | a [element] | -| summaries.rb:81:1:81:1 | [post] a [element] | summaries.rb:86:6:86:6 | a [element] | -| summaries.rb:81:1:81:1 | [post] a [element] | summaries.rb:87:5:87:5 | a [element] | -| summaries.rb:81:1:81:1 | [post] a [element] | summaries.rb:87:5:87:5 | a [element] | -| summaries.rb:81:1:81:1 | [post] a [element] | summaries.rb:95:1:95:1 | a [element] | -| summaries.rb:81:1:81:1 | [post] a [element] | summaries.rb:95:1:95:1 | a [element] | -| summaries.rb:81:13:81:27 | call to source | summaries.rb:81:1:81:1 | [post] a [element] | -| summaries.rb:81:13:81:27 | call to source | summaries.rb:81:1:81:1 | [post] a [element] | -| summaries.rb:82:6:82:6 | a [element 1] | summaries.rb:82:6:82:24 | call to readElementOne | -| summaries.rb:82:6:82:6 | a [element 1] | summaries.rb:82:6:82:24 | call to readElementOne | -| summaries.rb:82:6:82:6 | a [element] | summaries.rb:82:6:82:24 | call to readElementOne | -| summaries.rb:82:6:82:6 | a [element] | summaries.rb:82:6:82:24 | call to readElementOne | -| summaries.rb:83:6:83:6 | a [element 1] | summaries.rb:83:6:83:31 | call to readExactlyElementOne | -| summaries.rb:83:6:83:6 | a [element 1] | summaries.rb:83:6:83:31 | call to readExactlyElementOne | -| summaries.rb:84:6:84:6 | a [element] | summaries.rb:84:6:84:9 | ...[...] | -| summaries.rb:84:6:84:6 | a [element] | summaries.rb:84:6:84:9 | ...[...] | -| summaries.rb:85:6:85:6 | a [element 1] | summaries.rb:85:6:85:9 | ...[...] | -| summaries.rb:85:6:85:6 | a [element 1] | summaries.rb:85:6:85:9 | ...[...] | -| summaries.rb:85:6:85:6 | a [element] | summaries.rb:85:6:85:9 | ...[...] | -| summaries.rb:85:6:85:6 | a [element] | summaries.rb:85:6:85:9 | ...[...] | -| summaries.rb:86:6:86:6 | a [element 2] | summaries.rb:86:6:86:9 | ...[...] | -| summaries.rb:86:6:86:6 | a [element 2] | summaries.rb:86:6:86:9 | ...[...] | -| summaries.rb:86:6:86:6 | a [element] | summaries.rb:86:6:86:9 | ...[...] | -| summaries.rb:86:6:86:6 | a [element] | summaries.rb:86:6:86:9 | ...[...] | -| summaries.rb:87:1:87:1 | b [element 1] | summaries.rb:89:6:89:6 | b [element 1] | -| summaries.rb:87:1:87:1 | b [element 1] | summaries.rb:89:6:89:6 | b [element 1] | -| summaries.rb:87:1:87:1 | b [element] | summaries.rb:88:6:88:6 | b [element] | -| summaries.rb:87:1:87:1 | b [element] | summaries.rb:88:6:88:6 | b [element] | -| summaries.rb:87:1:87:1 | b [element] | summaries.rb:89:6:89:6 | b [element] | -| summaries.rb:87:1:87:1 | b [element] | summaries.rb:89:6:89:6 | b [element] | -| summaries.rb:87:1:87:1 | b [element] | summaries.rb:90:6:90:6 | b [element] | -| summaries.rb:87:1:87:1 | b [element] | summaries.rb:90:6:90:6 | b [element] | -| summaries.rb:87:5:87:5 | a [element 1] | summaries.rb:87:5:87:22 | call to withElementOne [element 1] | -| summaries.rb:87:5:87:5 | a [element 1] | summaries.rb:87:5:87:22 | call to withElementOne [element 1] | -| summaries.rb:87:5:87:5 | a [element] | summaries.rb:87:5:87:22 | call to withElementOne [element] | -| summaries.rb:87:5:87:5 | a [element] | summaries.rb:87:5:87:22 | call to withElementOne [element] | -| summaries.rb:87:5:87:22 | call to withElementOne [element 1] | summaries.rb:87:1:87:1 | b [element 1] | -| summaries.rb:87:5:87:22 | call to withElementOne [element 1] | summaries.rb:87:1:87:1 | b [element 1] | -| summaries.rb:87:5:87:22 | call to withElementOne [element] | summaries.rb:87:1:87:1 | b [element] | -| summaries.rb:87:5:87:22 | call to withElementOne [element] | summaries.rb:87:1:87:1 | b [element] | -| summaries.rb:88:6:88:6 | b [element] | summaries.rb:88:6:88:9 | ...[...] | -| summaries.rb:88:6:88:6 | b [element] | summaries.rb:88:6:88:9 | ...[...] | -| summaries.rb:89:6:89:6 | b [element 1] | summaries.rb:89:6:89:9 | ...[...] | -| summaries.rb:89:6:89:6 | b [element 1] | summaries.rb:89:6:89:9 | ...[...] | -| summaries.rb:89:6:89:6 | b [element] | summaries.rb:89:6:89:9 | ...[...] | -| summaries.rb:89:6:89:6 | b [element] | summaries.rb:89:6:89:9 | ...[...] | -| summaries.rb:90:6:90:6 | b [element] | summaries.rb:90:6:90:9 | ...[...] | -| summaries.rb:90:6:90:6 | b [element] | summaries.rb:90:6:90:9 | ...[...] | -| summaries.rb:91:1:91:1 | c [element 1] | summaries.rb:93:6:93:6 | c [element 1] | -| summaries.rb:91:1:91:1 | c [element 1] | summaries.rb:93:6:93:6 | c [element 1] | -| summaries.rb:91:5:91:5 | a [element 1] | summaries.rb:91:5:91:29 | call to withExactlyElementOne [element 1] | -| summaries.rb:91:5:91:5 | a [element 1] | summaries.rb:91:5:91:29 | call to withExactlyElementOne [element 1] | -| summaries.rb:91:5:91:29 | call to withExactlyElementOne [element 1] | summaries.rb:91:1:91:1 | c [element 1] | -| summaries.rb:91:5:91:29 | call to withExactlyElementOne [element 1] | summaries.rb:91:1:91:1 | c [element 1] | -| summaries.rb:93:6:93:6 | c [element 1] | summaries.rb:93:6:93:9 | ...[...] | -| summaries.rb:93:6:93:6 | c [element 1] | summaries.rb:93:6:93:9 | ...[...] | -| summaries.rb:95:1:95:1 | [post] a [element 2] | summaries.rb:98:6:98:6 | a [element 2] | -| summaries.rb:95:1:95:1 | [post] a [element 2] | summaries.rb:98:6:98:6 | a [element 2] | -| summaries.rb:95:1:95:1 | [post] a [element 2] | summaries.rb:99:1:99:1 | a [element 2] | -| summaries.rb:95:1:95:1 | [post] a [element 2] | summaries.rb:99:1:99:1 | a [element 2] | -| summaries.rb:95:1:95:1 | [post] a [element] | summaries.rb:96:6:96:6 | a [element] | -| summaries.rb:95:1:95:1 | [post] a [element] | summaries.rb:96:6:96:6 | a [element] | -| summaries.rb:95:1:95:1 | [post] a [element] | summaries.rb:97:6:97:6 | a [element] | -| summaries.rb:95:1:95:1 | [post] a [element] | summaries.rb:97:6:97:6 | a [element] | -| summaries.rb:95:1:95:1 | [post] a [element] | summaries.rb:98:6:98:6 | a [element] | -| summaries.rb:95:1:95:1 | [post] a [element] | summaries.rb:98:6:98:6 | a [element] | -| summaries.rb:95:1:95:1 | a [element 2] | summaries.rb:95:1:95:1 | [post] a [element 2] | -| summaries.rb:95:1:95:1 | a [element 2] | summaries.rb:95:1:95:1 | [post] a [element 2] | -| summaries.rb:95:1:95:1 | a [element] | summaries.rb:95:1:95:1 | [post] a [element] | -| summaries.rb:95:1:95:1 | a [element] | summaries.rb:95:1:95:1 | [post] a [element] | -| summaries.rb:96:6:96:6 | a [element] | summaries.rb:96:6:96:9 | ...[...] | -| summaries.rb:96:6:96:6 | a [element] | summaries.rb:96:6:96:9 | ...[...] | -| summaries.rb:97:6:97:6 | a [element] | summaries.rb:97:6:97:9 | ...[...] | -| summaries.rb:97:6:97:6 | a [element] | summaries.rb:97:6:97:9 | ...[...] | -| summaries.rb:98:6:98:6 | a [element 2] | summaries.rb:98:6:98:9 | ...[...] | -| summaries.rb:98:6:98:6 | a [element 2] | summaries.rb:98:6:98:9 | ...[...] | -| summaries.rb:98:6:98:6 | a [element] | summaries.rb:98:6:98:9 | ...[...] | -| summaries.rb:98:6:98:6 | a [element] | summaries.rb:98:6:98:9 | ...[...] | -| summaries.rb:99:1:99:1 | [post] a [element 2] | summaries.rb:102:6:102:6 | a [element 2] | -| summaries.rb:99:1:99:1 | [post] a [element 2] | summaries.rb:102:6:102:6 | a [element 2] | -| summaries.rb:99:1:99:1 | a [element 2] | summaries.rb:99:1:99:1 | [post] a [element 2] | -| summaries.rb:99:1:99:1 | a [element 2] | summaries.rb:99:1:99:1 | [post] a [element 2] | -| summaries.rb:102:6:102:6 | a [element 2] | summaries.rb:102:6:102:9 | ...[...] | -| summaries.rb:102:6:102:6 | a [element 2] | summaries.rb:102:6:102:9 | ...[...] | -| summaries.rb:103:1:103:1 | [post] d [element 3] | summaries.rb:104:1:104:1 | d [element 3] | -| summaries.rb:103:1:103:1 | [post] d [element 3] | summaries.rb:104:1:104:1 | d [element 3] | -| summaries.rb:103:8:103:22 | call to source | summaries.rb:103:1:103:1 | [post] d [element 3] | -| summaries.rb:103:8:103:22 | call to source | summaries.rb:103:1:103:1 | [post] d [element 3] | -| summaries.rb:104:1:104:1 | [post] d [element 3] | summaries.rb:108:6:108:6 | d [element 3] | -| summaries.rb:104:1:104:1 | [post] d [element 3] | summaries.rb:108:6:108:6 | d [element 3] | -| summaries.rb:104:1:104:1 | d [element 3] | summaries.rb:104:1:104:1 | [post] d [element 3] | -| summaries.rb:104:1:104:1 | d [element 3] | summaries.rb:104:1:104:1 | [post] d [element 3] | -| summaries.rb:108:6:108:6 | d [element 3] | summaries.rb:108:6:108:9 | ...[...] | -| summaries.rb:108:6:108:6 | d [element 3] | summaries.rb:108:6:108:9 | ...[...] | -| summaries.rb:111:1:111:1 | [post] x [@value] | summaries.rb:112:6:112:6 | x [@value] | -| summaries.rb:111:1:111:1 | [post] x [@value] | summaries.rb:112:6:112:6 | x [@value] | -| summaries.rb:111:13:111:26 | call to source | summaries.rb:111:1:111:1 | [post] x [@value] | -| summaries.rb:111:13:111:26 | call to source | summaries.rb:111:1:111:1 | [post] x [@value] | -| summaries.rb:112:6:112:6 | x [@value] | summaries.rb:112:6:112:16 | call to get_value | -| summaries.rb:112:6:112:6 | x [@value] | summaries.rb:112:6:112:16 | call to get_value | -| summaries.rb:122:16:122:22 | [post] tainted | summaries.rb:128:14:128:20 | tainted | -| summaries.rb:122:16:122:22 | [post] tainted | summaries.rb:131:16:131:22 | tainted | -| summaries.rb:122:16:122:22 | [post] tainted | summaries.rb:131:16:131:22 | tainted | -| summaries.rb:122:16:122:22 | [post] tainted | summaries.rb:132:21:132:27 | tainted | -| summaries.rb:122:16:122:22 | [post] tainted | summaries.rb:135:26:135:32 | tainted | -| summaries.rb:122:16:122:22 | [post] tainted | summaries.rb:137:23:137:29 | tainted | -| summaries.rb:122:16:122:22 | [post] tainted | summaries.rb:140:19:140:25 | tainted | -| summaries.rb:122:16:122:22 | [post] tainted | summaries.rb:141:19:141:25 | tainted | -| summaries.rb:122:16:122:22 | [post] tainted | summaries.rb:145:26:145:32 | tainted | -| summaries.rb:122:16:122:22 | [post] tainted | summaries.rb:147:16:147:22 | tainted | -| summaries.rb:122:16:122:22 | [post] tainted | summaries.rb:150:39:150:45 | tainted | -| summaries.rb:122:16:122:22 | [post] tainted | summaries.rb:154:20:154:26 | tainted | -| summaries.rb:122:16:122:22 | [post] tainted | summaries.rb:155:28:155:34 | tainted | -| summaries.rb:122:16:122:22 | [post] tainted | summaries.rb:156:27:156:33 | tainted | -| summaries.rb:122:16:122:22 | [post] tainted | summaries.rb:157:14:160:3 | do ... end [captured tainted] | -| summaries.rb:122:16:122:22 | tainted | summaries.rb:122:16:122:22 | [post] tainted | -| summaries.rb:122:16:122:22 | tainted | summaries.rb:122:25:122:25 | [post] y | -| summaries.rb:122:16:122:22 | tainted | summaries.rb:122:33:122:33 | [post] z | -| summaries.rb:122:25:122:25 | [post] y | summaries.rb:124:6:124:6 | y | -| summaries.rb:122:33:122:33 | [post] z | summaries.rb:125:6:125:6 | z | -| summaries.rb:128:1:128:1 | [post] x | summaries.rb:129:6:129:6 | x | -| summaries.rb:128:14:128:20 | tainted | summaries.rb:128:1:128:1 | [post] x | -| summaries.rb:131:16:131:22 | tainted | summaries.rb:131:1:131:23 | synthetic splat argument | -| summaries.rb:157:14:160:3 | do ... end [captured tainted] | summaries.rb:158:15:158:21 | tainted | -| summaries.rb:157:14:160:3 | do ... end [captured tainted] | summaries.rb:158:15:158:21 | tainted | +| summaries.rb:1:11:1:36 | call to identity | summaries.rb:2:6:2:12 | tainted | provenance | | +| summaries.rb:1:11:1:36 | call to identity | summaries.rb:2:6:2:12 | tainted | provenance | | +| summaries.rb:1:11:1:36 | call to identity | summaries.rb:4:24:4:30 | tainted | provenance | | +| summaries.rb:1:11:1:36 | call to identity | summaries.rb:4:24:4:30 | tainted | provenance | | +| summaries.rb:1:11:1:36 | call to identity | summaries.rb:16:36:16:42 | tainted | provenance | | +| summaries.rb:1:11:1:36 | call to identity | summaries.rb:16:36:16:42 | tainted | provenance | | +| summaries.rb:1:11:1:36 | call to identity | summaries.rb:20:25:20:31 | tainted | provenance | | +| summaries.rb:1:11:1:36 | call to identity | summaries.rb:26:31:26:37 | tainted | provenance | | +| summaries.rb:1:11:1:36 | call to identity | summaries.rb:30:24:30:30 | tainted | provenance | | +| summaries.rb:1:11:1:36 | call to identity | summaries.rb:31:27:31:33 | tainted | provenance | | +| summaries.rb:1:11:1:36 | call to identity | summaries.rb:34:16:34:22 | tainted | provenance | | +| summaries.rb:1:11:1:36 | call to identity | summaries.rb:34:16:34:22 | tainted | provenance | | +| summaries.rb:1:11:1:36 | call to identity | summaries.rb:35:16:35:22 | tainted | provenance | | +| summaries.rb:1:11:1:36 | call to identity | summaries.rb:35:16:35:22 | tainted | provenance | | +| summaries.rb:1:11:1:36 | call to identity | summaries.rb:36:21:36:27 | tainted | provenance | | +| summaries.rb:1:11:1:36 | call to identity | summaries.rb:36:21:36:27 | tainted | provenance | | +| summaries.rb:1:11:1:36 | call to identity | summaries.rb:37:36:37:42 | tainted | provenance | | +| summaries.rb:1:11:1:36 | call to identity | summaries.rb:37:36:37:42 | tainted | provenance | | +| summaries.rb:1:11:1:36 | call to identity | summaries.rb:51:24:51:30 | tainted | provenance | | +| summaries.rb:1:11:1:36 | call to identity | summaries.rb:56:22:56:28 | tainted | provenance | | +| summaries.rb:1:11:1:36 | call to identity | summaries.rb:57:17:57:23 | tainted | provenance | | +| summaries.rb:1:11:1:36 | call to identity | summaries.rb:59:27:59:33 | tainted | provenance | | +| summaries.rb:1:11:1:36 | call to identity | summaries.rb:63:32:63:38 | tainted | provenance | | +| summaries.rb:1:11:1:36 | call to identity | summaries.rb:65:23:65:29 | tainted | provenance | | +| summaries.rb:1:11:1:36 | call to identity | summaries.rb:122:16:122:22 | tainted | provenance | | +| summaries.rb:1:11:1:36 | call to identity | summaries.rb:128:14:128:20 | tainted | provenance | | +| summaries.rb:1:11:1:36 | call to identity | summaries.rb:131:16:131:22 | tainted | provenance | | +| summaries.rb:1:11:1:36 | call to identity | summaries.rb:131:16:131:22 | tainted | provenance | | +| summaries.rb:1:11:1:36 | call to identity | summaries.rb:131:16:131:22 | tainted | provenance | | +| summaries.rb:1:11:1:36 | call to identity | summaries.rb:132:21:132:27 | tainted | provenance | | +| summaries.rb:1:11:1:36 | call to identity | summaries.rb:132:21:132:27 | tainted | provenance | | +| summaries.rb:1:11:1:36 | call to identity | summaries.rb:135:26:135:32 | tainted | provenance | | +| summaries.rb:1:11:1:36 | call to identity | summaries.rb:135:26:135:32 | tainted | provenance | | +| summaries.rb:1:11:1:36 | call to identity | summaries.rb:137:23:137:29 | tainted | provenance | | +| summaries.rb:1:11:1:36 | call to identity | summaries.rb:137:23:137:29 | tainted | provenance | | +| summaries.rb:1:11:1:36 | call to identity | summaries.rb:140:19:140:25 | tainted | provenance | | +| summaries.rb:1:11:1:36 | call to identity | summaries.rb:140:19:140:25 | tainted | provenance | | +| summaries.rb:1:11:1:36 | call to identity | summaries.rb:141:19:141:25 | tainted | provenance | | +| summaries.rb:1:11:1:36 | call to identity | summaries.rb:141:19:141:25 | tainted | provenance | | +| summaries.rb:1:11:1:36 | call to identity | summaries.rb:145:26:145:32 | tainted | provenance | | +| summaries.rb:1:11:1:36 | call to identity | summaries.rb:145:26:145:32 | tainted | provenance | | +| summaries.rb:1:11:1:36 | call to identity | summaries.rb:147:16:147:22 | tainted | provenance | | +| summaries.rb:1:11:1:36 | call to identity | summaries.rb:147:16:147:22 | tainted | provenance | | +| summaries.rb:1:11:1:36 | call to identity | summaries.rb:150:39:150:45 | tainted | provenance | | +| summaries.rb:1:11:1:36 | call to identity | summaries.rb:150:39:150:45 | tainted | provenance | | +| summaries.rb:1:11:1:36 | call to identity | summaries.rb:154:20:154:26 | tainted | provenance | | +| summaries.rb:1:11:1:36 | call to identity | summaries.rb:154:20:154:26 | tainted | provenance | | +| summaries.rb:1:11:1:36 | call to identity | summaries.rb:155:28:155:34 | tainted | provenance | | +| summaries.rb:1:11:1:36 | call to identity | summaries.rb:155:28:155:34 | tainted | provenance | | +| summaries.rb:1:11:1:36 | call to identity | summaries.rb:156:27:156:33 | tainted | provenance | | +| summaries.rb:1:11:1:36 | call to identity | summaries.rb:156:27:156:33 | tainted | provenance | | +| summaries.rb:1:11:1:36 | call to identity | summaries.rb:157:14:160:3 | do ... end [captured tainted] | provenance | | +| summaries.rb:1:11:1:36 | call to identity | summaries.rb:157:14:160:3 | do ... end [captured tainted] | provenance | | +| summaries.rb:1:20:1:36 | call to source | summaries.rb:1:11:1:36 | call to identity | provenance | | +| summaries.rb:1:20:1:36 | call to source | summaries.rb:1:11:1:36 | call to identity | provenance | | +| summaries.rb:4:1:4:8 | tainted2 | summaries.rb:9:6:9:13 | tainted2 | provenance | | +| summaries.rb:4:1:4:8 | tainted2 | summaries.rb:9:6:9:13 | tainted2 | provenance | | +| summaries.rb:4:12:7:3 | call to apply_block | summaries.rb:4:1:4:8 | tainted2 | provenance | | +| summaries.rb:4:12:7:3 | call to apply_block | summaries.rb:4:1:4:8 | tainted2 | provenance | | +| summaries.rb:4:24:4:30 | tainted | summaries.rb:4:12:7:3 | call to apply_block | provenance | | +| summaries.rb:4:24:4:30 | tainted | summaries.rb:4:12:7:3 | call to apply_block | provenance | | +| summaries.rb:4:24:4:30 | tainted | summaries.rb:4:36:4:36 | x | provenance | | +| summaries.rb:4:24:4:30 | tainted | summaries.rb:4:36:4:36 | x | provenance | | +| summaries.rb:4:36:4:36 | x | summaries.rb:5:8:5:8 | x | provenance | | +| summaries.rb:4:36:4:36 | x | summaries.rb:5:8:5:8 | x | provenance | | +| summaries.rb:11:17:11:17 | x | summaries.rb:12:8:12:8 | x | provenance | | +| summaries.rb:11:17:11:17 | x | summaries.rb:12:8:12:8 | x | provenance | | +| summaries.rb:16:1:16:8 | tainted3 | summaries.rb:18:6:18:13 | tainted3 | provenance | | +| summaries.rb:16:1:16:8 | tainted3 | summaries.rb:18:6:18:13 | tainted3 | provenance | | +| summaries.rb:16:12:16:43 | call to apply_lambda | summaries.rb:16:1:16:8 | tainted3 | provenance | | +| summaries.rb:16:12:16:43 | call to apply_lambda | summaries.rb:16:1:16:8 | tainted3 | provenance | | +| summaries.rb:16:36:16:42 | tainted | summaries.rb:11:17:11:17 | x | provenance | | +| summaries.rb:16:36:16:42 | tainted | summaries.rb:11:17:11:17 | x | provenance | | +| summaries.rb:16:36:16:42 | tainted | summaries.rb:16:12:16:43 | call to apply_lambda | provenance | | +| summaries.rb:16:36:16:42 | tainted | summaries.rb:16:12:16:43 | call to apply_lambda | provenance | | +| summaries.rb:20:1:20:8 | tainted4 | summaries.rb:21:6:21:13 | tainted4 | provenance | | +| summaries.rb:20:12:20:32 | call to firstArg | summaries.rb:20:1:20:8 | tainted4 | provenance | | +| summaries.rb:20:25:20:31 | tainted | summaries.rb:20:12:20:32 | call to firstArg | provenance | | +| summaries.rb:26:1:26:8 | tainted5 | summaries.rb:27:6:27:13 | tainted5 | provenance | | +| summaries.rb:26:12:26:38 | call to secondArg | summaries.rb:26:1:26:8 | tainted5 | provenance | | +| summaries.rb:26:31:26:37 | tainted | summaries.rb:26:12:26:38 | call to secondArg | provenance | | +| summaries.rb:30:24:30:30 | tainted | summaries.rb:30:6:30:42 | call to onlyWithBlock | provenance | | +| summaries.rb:31:27:31:33 | tainted | summaries.rb:31:6:31:34 | call to onlyWithoutBlock | provenance | | +| summaries.rb:40:3:40:3 | t | summaries.rb:41:24:41:24 | t | provenance | | +| summaries.rb:40:3:40:3 | t | summaries.rb:42:24:42:24 | t | provenance | | +| summaries.rb:40:3:40:3 | t | summaries.rb:44:8:44:8 | t | provenance | | +| summaries.rb:40:7:40:17 | call to source | summaries.rb:40:3:40:3 | t | provenance | | +| summaries.rb:41:24:41:24 | t | summaries.rb:41:8:41:25 | call to matchedByName | provenance | | +| summaries.rb:42:24:42:24 | t | summaries.rb:42:8:42:25 | call to matchedByName | provenance | | +| summaries.rb:44:8:44:8 | t | summaries.rb:44:8:44:27 | call to matchedByNameRcv | provenance | | +| summaries.rb:48:24:48:41 | call to source | summaries.rb:48:8:48:42 | call to preserveTaint | provenance | | +| summaries.rb:51:24:51:30 | tainted | summaries.rb:51:6:51:31 | call to namedArg | provenance | | +| summaries.rb:53:1:53:4 | args [element :foo] | summaries.rb:54:21:54:24 | args [element :foo] | provenance | | +| summaries.rb:53:15:53:31 | call to source | summaries.rb:53:1:53:4 | args [element :foo] | provenance | | +| summaries.rb:54:19:54:24 | ** ... [element :foo] | summaries.rb:54:6:54:25 | call to namedArg | provenance | | +| summaries.rb:54:21:54:24 | args [element :foo] | summaries.rb:54:19:54:24 | ** ... [element :foo] | provenance | | +| summaries.rb:56:22:56:28 | tainted | summaries.rb:56:6:56:29 | call to anyArg | provenance | | +| summaries.rb:57:17:57:23 | tainted | summaries.rb:57:6:57:24 | call to anyArg | provenance | | +| summaries.rb:59:27:59:33 | tainted | summaries.rb:59:6:59:34 | call to anyNamedArg | provenance | | +| summaries.rb:63:32:63:38 | tainted | summaries.rb:63:6:63:39 | call to anyPositionFromOne | provenance | | +| summaries.rb:65:23:65:29 | tainted | summaries.rb:65:40:65:40 | x | provenance | | +| summaries.rb:65:40:65:40 | x | summaries.rb:66:8:66:8 | x | provenance | | +| summaries.rb:73:24:73:53 | call to source | summaries.rb:73:8:73:54 | call to preserveTaint | provenance | | +| summaries.rb:76:26:76:56 | call to source | summaries.rb:76:8:76:57 | call to preserveTaint | provenance | | +| summaries.rb:79:1:79:1 | a [element 1] | summaries.rb:82:6:82:6 | a [element 1] | provenance | | +| summaries.rb:79:1:79:1 | a [element 1] | summaries.rb:82:6:82:6 | a [element 1] | provenance | | +| summaries.rb:79:1:79:1 | a [element 1] | summaries.rb:83:6:83:6 | a [element 1] | provenance | | +| summaries.rb:79:1:79:1 | a [element 1] | summaries.rb:83:6:83:6 | a [element 1] | provenance | | +| summaries.rb:79:1:79:1 | a [element 1] | summaries.rb:85:6:85:6 | a [element 1] | provenance | | +| summaries.rb:79:1:79:1 | a [element 1] | summaries.rb:85:6:85:6 | a [element 1] | provenance | | +| summaries.rb:79:1:79:1 | a [element 1] | summaries.rb:87:5:87:5 | a [element 1] | provenance | | +| summaries.rb:79:1:79:1 | a [element 1] | summaries.rb:87:5:87:5 | a [element 1] | provenance | | +| summaries.rb:79:1:79:1 | a [element 1] | summaries.rb:91:5:91:5 | a [element 1] | provenance | | +| summaries.rb:79:1:79:1 | a [element 1] | summaries.rb:91:5:91:5 | a [element 1] | provenance | | +| summaries.rb:79:1:79:1 | a [element 2] | summaries.rb:86:6:86:6 | a [element 2] | provenance | | +| summaries.rb:79:1:79:1 | a [element 2] | summaries.rb:86:6:86:6 | a [element 2] | provenance | | +| summaries.rb:79:1:79:1 | a [element 2] | summaries.rb:95:1:95:1 | a [element 2] | provenance | | +| summaries.rb:79:1:79:1 | a [element 2] | summaries.rb:95:1:95:1 | a [element 2] | provenance | | +| summaries.rb:79:15:79:29 | call to source | summaries.rb:79:1:79:1 | a [element 1] | provenance | | +| summaries.rb:79:15:79:29 | call to source | summaries.rb:79:1:79:1 | a [element 1] | provenance | | +| summaries.rb:79:32:79:46 | call to source | summaries.rb:79:1:79:1 | a [element 2] | provenance | | +| summaries.rb:79:32:79:46 | call to source | summaries.rb:79:1:79:1 | a [element 2] | provenance | | +| summaries.rb:81:1:81:1 | [post] a [element] | summaries.rb:82:6:82:6 | a [element] | provenance | | +| summaries.rb:81:1:81:1 | [post] a [element] | summaries.rb:82:6:82:6 | a [element] | provenance | | +| summaries.rb:81:1:81:1 | [post] a [element] | summaries.rb:84:6:84:6 | a [element] | provenance | | +| summaries.rb:81:1:81:1 | [post] a [element] | summaries.rb:84:6:84:6 | a [element] | provenance | | +| summaries.rb:81:1:81:1 | [post] a [element] | summaries.rb:85:6:85:6 | a [element] | provenance | | +| summaries.rb:81:1:81:1 | [post] a [element] | summaries.rb:85:6:85:6 | a [element] | provenance | | +| summaries.rb:81:1:81:1 | [post] a [element] | summaries.rb:86:6:86:6 | a [element] | provenance | | +| summaries.rb:81:1:81:1 | [post] a [element] | summaries.rb:86:6:86:6 | a [element] | provenance | | +| summaries.rb:81:1:81:1 | [post] a [element] | summaries.rb:87:5:87:5 | a [element] | provenance | | +| summaries.rb:81:1:81:1 | [post] a [element] | summaries.rb:87:5:87:5 | a [element] | provenance | | +| summaries.rb:81:1:81:1 | [post] a [element] | summaries.rb:95:1:95:1 | a [element] | provenance | | +| summaries.rb:81:1:81:1 | [post] a [element] | summaries.rb:95:1:95:1 | a [element] | provenance | | +| summaries.rb:81:13:81:27 | call to source | summaries.rb:81:1:81:1 | [post] a [element] | provenance | | +| summaries.rb:81:13:81:27 | call to source | summaries.rb:81:1:81:1 | [post] a [element] | provenance | | +| summaries.rb:82:6:82:6 | a [element 1] | summaries.rb:82:6:82:24 | call to readElementOne | provenance | | +| summaries.rb:82:6:82:6 | a [element 1] | summaries.rb:82:6:82:24 | call to readElementOne | provenance | | +| summaries.rb:82:6:82:6 | a [element] | summaries.rb:82:6:82:24 | call to readElementOne | provenance | | +| summaries.rb:82:6:82:6 | a [element] | summaries.rb:82:6:82:24 | call to readElementOne | provenance | | +| summaries.rb:83:6:83:6 | a [element 1] | summaries.rb:83:6:83:31 | call to readExactlyElementOne | provenance | | +| summaries.rb:83:6:83:6 | a [element 1] | summaries.rb:83:6:83:31 | call to readExactlyElementOne | provenance | | +| summaries.rb:84:6:84:6 | a [element] | summaries.rb:84:6:84:9 | ...[...] | provenance | | +| summaries.rb:84:6:84:6 | a [element] | summaries.rb:84:6:84:9 | ...[...] | provenance | | +| summaries.rb:85:6:85:6 | a [element 1] | summaries.rb:85:6:85:9 | ...[...] | provenance | | +| summaries.rb:85:6:85:6 | a [element 1] | summaries.rb:85:6:85:9 | ...[...] | provenance | | +| summaries.rb:85:6:85:6 | a [element] | summaries.rb:85:6:85:9 | ...[...] | provenance | | +| summaries.rb:85:6:85:6 | a [element] | summaries.rb:85:6:85:9 | ...[...] | provenance | | +| summaries.rb:86:6:86:6 | a [element 2] | summaries.rb:86:6:86:9 | ...[...] | provenance | | +| summaries.rb:86:6:86:6 | a [element 2] | summaries.rb:86:6:86:9 | ...[...] | provenance | | +| summaries.rb:86:6:86:6 | a [element] | summaries.rb:86:6:86:9 | ...[...] | provenance | | +| summaries.rb:86:6:86:6 | a [element] | summaries.rb:86:6:86:9 | ...[...] | provenance | | +| summaries.rb:87:1:87:1 | b [element 1] | summaries.rb:89:6:89:6 | b [element 1] | provenance | | +| summaries.rb:87:1:87:1 | b [element 1] | summaries.rb:89:6:89:6 | b [element 1] | provenance | | +| summaries.rb:87:1:87:1 | b [element] | summaries.rb:88:6:88:6 | b [element] | provenance | | +| summaries.rb:87:1:87:1 | b [element] | summaries.rb:88:6:88:6 | b [element] | provenance | | +| summaries.rb:87:1:87:1 | b [element] | summaries.rb:89:6:89:6 | b [element] | provenance | | +| summaries.rb:87:1:87:1 | b [element] | summaries.rb:89:6:89:6 | b [element] | provenance | | +| summaries.rb:87:1:87:1 | b [element] | summaries.rb:90:6:90:6 | b [element] | provenance | | +| summaries.rb:87:1:87:1 | b [element] | summaries.rb:90:6:90:6 | b [element] | provenance | | +| summaries.rb:87:5:87:5 | a [element 1] | summaries.rb:87:5:87:22 | call to withElementOne [element 1] | provenance | | +| summaries.rb:87:5:87:5 | a [element 1] | summaries.rb:87:5:87:22 | call to withElementOne [element 1] | provenance | | +| summaries.rb:87:5:87:5 | a [element] | summaries.rb:87:5:87:22 | call to withElementOne [element] | provenance | | +| summaries.rb:87:5:87:5 | a [element] | summaries.rb:87:5:87:22 | call to withElementOne [element] | provenance | | +| summaries.rb:87:5:87:22 | call to withElementOne [element 1] | summaries.rb:87:1:87:1 | b [element 1] | provenance | | +| summaries.rb:87:5:87:22 | call to withElementOne [element 1] | summaries.rb:87:1:87:1 | b [element 1] | provenance | | +| summaries.rb:87:5:87:22 | call to withElementOne [element] | summaries.rb:87:1:87:1 | b [element] | provenance | | +| summaries.rb:87:5:87:22 | call to withElementOne [element] | summaries.rb:87:1:87:1 | b [element] | provenance | | +| summaries.rb:88:6:88:6 | b [element] | summaries.rb:88:6:88:9 | ...[...] | provenance | | +| summaries.rb:88:6:88:6 | b [element] | summaries.rb:88:6:88:9 | ...[...] | provenance | | +| summaries.rb:89:6:89:6 | b [element 1] | summaries.rb:89:6:89:9 | ...[...] | provenance | | +| summaries.rb:89:6:89:6 | b [element 1] | summaries.rb:89:6:89:9 | ...[...] | provenance | | +| summaries.rb:89:6:89:6 | b [element] | summaries.rb:89:6:89:9 | ...[...] | provenance | | +| summaries.rb:89:6:89:6 | b [element] | summaries.rb:89:6:89:9 | ...[...] | provenance | | +| summaries.rb:90:6:90:6 | b [element] | summaries.rb:90:6:90:9 | ...[...] | provenance | | +| summaries.rb:90:6:90:6 | b [element] | summaries.rb:90:6:90:9 | ...[...] | provenance | | +| summaries.rb:91:1:91:1 | c [element 1] | summaries.rb:93:6:93:6 | c [element 1] | provenance | | +| summaries.rb:91:1:91:1 | c [element 1] | summaries.rb:93:6:93:6 | c [element 1] | provenance | | +| summaries.rb:91:5:91:5 | a [element 1] | summaries.rb:91:5:91:29 | call to withExactlyElementOne [element 1] | provenance | | +| summaries.rb:91:5:91:5 | a [element 1] | summaries.rb:91:5:91:29 | call to withExactlyElementOne [element 1] | provenance | | +| summaries.rb:91:5:91:29 | call to withExactlyElementOne [element 1] | summaries.rb:91:1:91:1 | c [element 1] | provenance | | +| summaries.rb:91:5:91:29 | call to withExactlyElementOne [element 1] | summaries.rb:91:1:91:1 | c [element 1] | provenance | | +| summaries.rb:93:6:93:6 | c [element 1] | summaries.rb:93:6:93:9 | ...[...] | provenance | | +| summaries.rb:93:6:93:6 | c [element 1] | summaries.rb:93:6:93:9 | ...[...] | provenance | | +| summaries.rb:95:1:95:1 | [post] a [element 2] | summaries.rb:98:6:98:6 | a [element 2] | provenance | | +| summaries.rb:95:1:95:1 | [post] a [element 2] | summaries.rb:98:6:98:6 | a [element 2] | provenance | | +| summaries.rb:95:1:95:1 | [post] a [element 2] | summaries.rb:99:1:99:1 | a [element 2] | provenance | | +| summaries.rb:95:1:95:1 | [post] a [element 2] | summaries.rb:99:1:99:1 | a [element 2] | provenance | | +| summaries.rb:95:1:95:1 | [post] a [element] | summaries.rb:96:6:96:6 | a [element] | provenance | | +| summaries.rb:95:1:95:1 | [post] a [element] | summaries.rb:96:6:96:6 | a [element] | provenance | | +| summaries.rb:95:1:95:1 | [post] a [element] | summaries.rb:97:6:97:6 | a [element] | provenance | | +| summaries.rb:95:1:95:1 | [post] a [element] | summaries.rb:97:6:97:6 | a [element] | provenance | | +| summaries.rb:95:1:95:1 | [post] a [element] | summaries.rb:98:6:98:6 | a [element] | provenance | | +| summaries.rb:95:1:95:1 | [post] a [element] | summaries.rb:98:6:98:6 | a [element] | provenance | | +| summaries.rb:95:1:95:1 | a [element 2] | summaries.rb:95:1:95:1 | [post] a [element 2] | provenance | | +| summaries.rb:95:1:95:1 | a [element 2] | summaries.rb:95:1:95:1 | [post] a [element 2] | provenance | | +| summaries.rb:95:1:95:1 | a [element] | summaries.rb:95:1:95:1 | [post] a [element] | provenance | | +| summaries.rb:95:1:95:1 | a [element] | summaries.rb:95:1:95:1 | [post] a [element] | provenance | | +| summaries.rb:96:6:96:6 | a [element] | summaries.rb:96:6:96:9 | ...[...] | provenance | | +| summaries.rb:96:6:96:6 | a [element] | summaries.rb:96:6:96:9 | ...[...] | provenance | | +| summaries.rb:97:6:97:6 | a [element] | summaries.rb:97:6:97:9 | ...[...] | provenance | | +| summaries.rb:97:6:97:6 | a [element] | summaries.rb:97:6:97:9 | ...[...] | provenance | | +| summaries.rb:98:6:98:6 | a [element 2] | summaries.rb:98:6:98:9 | ...[...] | provenance | | +| summaries.rb:98:6:98:6 | a [element 2] | summaries.rb:98:6:98:9 | ...[...] | provenance | | +| summaries.rb:98:6:98:6 | a [element] | summaries.rb:98:6:98:9 | ...[...] | provenance | | +| summaries.rb:98:6:98:6 | a [element] | summaries.rb:98:6:98:9 | ...[...] | provenance | | +| summaries.rb:99:1:99:1 | [post] a [element 2] | summaries.rb:102:6:102:6 | a [element 2] | provenance | | +| summaries.rb:99:1:99:1 | [post] a [element 2] | summaries.rb:102:6:102:6 | a [element 2] | provenance | | +| summaries.rb:99:1:99:1 | a [element 2] | summaries.rb:99:1:99:1 | [post] a [element 2] | provenance | | +| summaries.rb:99:1:99:1 | a [element 2] | summaries.rb:99:1:99:1 | [post] a [element 2] | provenance | | +| summaries.rb:102:6:102:6 | a [element 2] | summaries.rb:102:6:102:9 | ...[...] | provenance | | +| summaries.rb:102:6:102:6 | a [element 2] | summaries.rb:102:6:102:9 | ...[...] | provenance | | +| summaries.rb:103:1:103:1 | [post] d [element 3] | summaries.rb:104:1:104:1 | d [element 3] | provenance | | +| summaries.rb:103:1:103:1 | [post] d [element 3] | summaries.rb:104:1:104:1 | d [element 3] | provenance | | +| summaries.rb:103:8:103:22 | call to source | summaries.rb:103:1:103:1 | [post] d [element 3] | provenance | | +| summaries.rb:103:8:103:22 | call to source | summaries.rb:103:1:103:1 | [post] d [element 3] | provenance | | +| summaries.rb:104:1:104:1 | [post] d [element 3] | summaries.rb:108:6:108:6 | d [element 3] | provenance | | +| summaries.rb:104:1:104:1 | [post] d [element 3] | summaries.rb:108:6:108:6 | d [element 3] | provenance | | +| summaries.rb:104:1:104:1 | d [element 3] | summaries.rb:104:1:104:1 | [post] d [element 3] | provenance | | +| summaries.rb:104:1:104:1 | d [element 3] | summaries.rb:104:1:104:1 | [post] d [element 3] | provenance | | +| summaries.rb:108:6:108:6 | d [element 3] | summaries.rb:108:6:108:9 | ...[...] | provenance | | +| summaries.rb:108:6:108:6 | d [element 3] | summaries.rb:108:6:108:9 | ...[...] | provenance | | +| summaries.rb:111:1:111:1 | [post] x [@value] | summaries.rb:112:6:112:6 | x [@value] | provenance | | +| summaries.rb:111:1:111:1 | [post] x [@value] | summaries.rb:112:6:112:6 | x [@value] | provenance | | +| summaries.rb:111:13:111:26 | call to source | summaries.rb:111:1:111:1 | [post] x [@value] | provenance | | +| summaries.rb:111:13:111:26 | call to source | summaries.rb:111:1:111:1 | [post] x [@value] | provenance | | +| summaries.rb:112:6:112:6 | x [@value] | summaries.rb:112:6:112:16 | call to get_value | provenance | | +| summaries.rb:112:6:112:6 | x [@value] | summaries.rb:112:6:112:16 | call to get_value | provenance | | +| summaries.rb:122:16:122:22 | [post] tainted | summaries.rb:128:14:128:20 | tainted | provenance | | +| summaries.rb:122:16:122:22 | [post] tainted | summaries.rb:131:16:131:22 | tainted | provenance | | +| summaries.rb:122:16:122:22 | [post] tainted | summaries.rb:131:16:131:22 | tainted | provenance | | +| summaries.rb:122:16:122:22 | [post] tainted | summaries.rb:132:21:132:27 | tainted | provenance | | +| summaries.rb:122:16:122:22 | [post] tainted | summaries.rb:135:26:135:32 | tainted | provenance | | +| summaries.rb:122:16:122:22 | [post] tainted | summaries.rb:137:23:137:29 | tainted | provenance | | +| summaries.rb:122:16:122:22 | [post] tainted | summaries.rb:140:19:140:25 | tainted | provenance | | +| summaries.rb:122:16:122:22 | [post] tainted | summaries.rb:141:19:141:25 | tainted | provenance | | +| summaries.rb:122:16:122:22 | [post] tainted | summaries.rb:145:26:145:32 | tainted | provenance | | +| summaries.rb:122:16:122:22 | [post] tainted | summaries.rb:147:16:147:22 | tainted | provenance | | +| summaries.rb:122:16:122:22 | [post] tainted | summaries.rb:150:39:150:45 | tainted | provenance | | +| summaries.rb:122:16:122:22 | [post] tainted | summaries.rb:154:20:154:26 | tainted | provenance | | +| summaries.rb:122:16:122:22 | [post] tainted | summaries.rb:155:28:155:34 | tainted | provenance | | +| summaries.rb:122:16:122:22 | [post] tainted | summaries.rb:156:27:156:33 | tainted | provenance | | +| summaries.rb:122:16:122:22 | [post] tainted | summaries.rb:157:14:160:3 | do ... end [captured tainted] | provenance | | +| summaries.rb:122:16:122:22 | tainted | summaries.rb:122:16:122:22 | [post] tainted | provenance | | +| summaries.rb:122:16:122:22 | tainted | summaries.rb:122:25:122:25 | [post] y | provenance | | +| summaries.rb:122:16:122:22 | tainted | summaries.rb:122:33:122:33 | [post] z | provenance | | +| summaries.rb:122:25:122:25 | [post] y | summaries.rb:124:6:124:6 | y | provenance | | +| summaries.rb:122:33:122:33 | [post] z | summaries.rb:125:6:125:6 | z | provenance | | +| summaries.rb:128:1:128:1 | [post] x | summaries.rb:129:6:129:6 | x | provenance | | +| summaries.rb:128:14:128:20 | tainted | summaries.rb:128:1:128:1 | [post] x | provenance | | +| summaries.rb:131:16:131:22 | tainted | summaries.rb:131:1:131:23 | synthetic splat argument | provenance | | +| summaries.rb:157:14:160:3 | do ... end [captured tainted] | summaries.rb:158:15:158:21 | tainted | provenance | | +| summaries.rb:157:14:160:3 | do ... end [captured tainted] | summaries.rb:158:15:158:21 | tainted | provenance | | nodes | summaries.rb:1:11:1:36 | call to identity | semmle.label | call to identity | | summaries.rb:1:11:1:36 | call to identity | semmle.label | call to identity | 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 a0349ec9ee3..69946539384 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 @@ -5,102 +5,102 @@ testFailures | filter_flow.rb:71:10:71:17 | call to bar | Unexpected result: hasTaintFlow= | | filter_flow.rb:87:11:87:14 | @foo | Unexpected result: hasTaintFlow= | edges -| filter_flow.rb:14:5:14:8 | [post] self [@foo] | filter_flow.rb:17:3:18:5 | self in b [@foo] | -| filter_flow.rb:14:12:14:17 | call to params | filter_flow.rb:14:12:14:23 | ...[...] | -| filter_flow.rb:14:12:14:23 | ...[...] | filter_flow.rb:14:5:14:8 | [post] self [@foo] | -| filter_flow.rb:17:3:18:5 | self in b [@foo] | filter_flow.rb:20:3:22:5 | self in c [@foo] | -| filter_flow.rb:20:3:22:5 | self in c [@foo] | filter_flow.rb:21:10:21:13 | self [@foo] | -| filter_flow.rb:21:10:21:13 | self [@foo] | filter_flow.rb:21:10:21:13 | @foo | -| filter_flow.rb:30:5:30:8 | [post] self [@foo] | filter_flow.rb:33:3:35:5 | self in b [@foo] | -| filter_flow.rb:30:12:30:17 | call to params | filter_flow.rb:30:12:30:23 | ...[...] | -| filter_flow.rb:30:12:30:23 | ...[...] | filter_flow.rb:30:5:30:8 | [post] self [@foo] | -| filter_flow.rb:33:3:35:5 | self in b [@foo] | filter_flow.rb:37:3:39:5 | self in c [@foo] | -| filter_flow.rb:37:3:39:5 | self in c [@foo] | filter_flow.rb:38:10:38:13 | self [@foo] | -| filter_flow.rb:38:10:38:13 | self [@foo] | filter_flow.rb:38:10:38:13 | @foo | -| filter_flow.rb:47:5:47:8 | [post] self [@foo] | filter_flow.rb:51:3:52:5 | self in b [@foo] | -| filter_flow.rb:47:12:47:17 | call to params | filter_flow.rb:47:12:47:23 | ...[...] | -| filter_flow.rb:47:12:47:23 | ...[...] | filter_flow.rb:47:5:47:8 | [post] self [@foo] | -| filter_flow.rb:51:3:52:5 | self in b [@foo] | filter_flow.rb:54:3:56:5 | self in c [@foo] | -| filter_flow.rb:54:3:56:5 | self in c [@foo] | filter_flow.rb:55:10:55:13 | self [@foo] | -| filter_flow.rb:55:10:55:13 | self [@foo] | filter_flow.rb:55:10:55:13 | @foo | -| filter_flow.rb:64:5:64:8 | [post] @foo [@bar] | filter_flow.rb:64:5:64:8 | [post] self [@foo, @bar] | -| filter_flow.rb:64:5:64:8 | [post] self [@foo, @bar] | filter_flow.rb:67:3:68:5 | self in b [@foo, @bar] | -| filter_flow.rb:64:16:64:21 | call to params | filter_flow.rb:64:16:64:27 | ...[...] | -| filter_flow.rb:64:16:64:27 | ...[...] | filter_flow.rb:64:5:64:8 | [post] @foo [@bar] | -| filter_flow.rb:67:3:68:5 | self in b [@foo, @bar] | filter_flow.rb:70:3:72:5 | self in c [@foo, @bar] | -| filter_flow.rb:70:3:72:5 | self in c [@foo, @bar] | filter_flow.rb:71:10:71:13 | self [@foo, @bar] | -| filter_flow.rb:71:10:71:13 | @foo [@bar] | filter_flow.rb:71:10:71:17 | call to bar | -| filter_flow.rb:71:10:71:13 | self [@foo, @bar] | filter_flow.rb:71:10:71:13 | @foo [@bar] | -| filter_flow.rb:80:5:80:8 | [post] self [@foo] | filter_flow.rb:83:3:84:5 | self in b [@foo] | -| filter_flow.rb:83:3:84:5 | self in b [@foo] | filter_flow.rb:86:3:88:5 | self in c [@foo] | -| filter_flow.rb:86:3:88:5 | self in c [@foo] | filter_flow.rb:87:11:87:14 | self [@foo] | -| filter_flow.rb:87:11:87:14 | self [@foo] | filter_flow.rb:87:11:87:14 | @foo | -| filter_flow.rb:91:5:91:8 | [post] self [@foo] | filter_flow.rb:80:5:80:8 | [post] self [@foo] | -| filter_flow.rb:91:12:91:17 | call to params | filter_flow.rb:91:12:91:23 | ...[...] | -| filter_flow.rb:91:12:91:23 | ...[...] | filter_flow.rb:91:5:91:8 | [post] self [@foo] | -| params_flow.rb:3:10:3:15 | call to params | params_flow.rb:3:10:3:19 | ...[...] | -| params_flow.rb:7:10:7:15 | call to params | params_flow.rb:7:10:7:23 | call to as_json | -| params_flow.rb:15:10:15:15 | call to params | params_flow.rb:15:10:15:33 | call to permit | -| params_flow.rb:19:10:19:15 | call to params | params_flow.rb:19:10:19:34 | call to require | -| params_flow.rb:23:10:23:15 | call to params | params_flow.rb:23:10:23:35 | call to required | -| params_flow.rb:27:10:27:15 | call to params | params_flow.rb:27:10:27:24 | call to deep_dup | -| params_flow.rb:31:10:31:15 | call to params | params_flow.rb:31:10:31:45 | call to deep_transform_keys | -| params_flow.rb:35:10:35:15 | call to params | params_flow.rb:35:10:35:46 | call to deep_transform_keys! | -| params_flow.rb:39:10:39:15 | call to params | params_flow.rb:39:10:39:48 | call to delete_if | -| params_flow.rb:43:10:43:15 | call to params | params_flow.rb:43:10:43:32 | call to extract! | -| params_flow.rb:47:10:47:15 | call to params | params_flow.rb:47:10:47:46 | call to keep_if | -| params_flow.rb:51:10:51:15 | call to params | params_flow.rb:51:10:51:45 | call to select | -| params_flow.rb:55:10:55:15 | call to params | params_flow.rb:55:10:55:46 | call to select! | -| params_flow.rb:59:10:59:15 | call to params | params_flow.rb:59:10:59:45 | call to reject | -| params_flow.rb:63:10:63:15 | call to params | params_flow.rb:63:10:63:46 | call to reject! | -| params_flow.rb:67:10:67:15 | call to params | params_flow.rb:67:10:67:20 | call to to_h | -| params_flow.rb:71:10:71:15 | call to params | params_flow.rb:71:10:71:23 | call to to_hash | -| params_flow.rb:75:10:75:15 | call to params | params_flow.rb:75:10:75:24 | call to to_query | -| params_flow.rb:79:10:79:15 | call to params | params_flow.rb:79:10:79:24 | call to to_param | -| params_flow.rb:83:10:83:15 | call to params | params_flow.rb:83:10:83:27 | call to to_unsafe_h | -| params_flow.rb:87:10:87:15 | call to params | params_flow.rb:87:10:87:30 | call to to_unsafe_hash | -| params_flow.rb:91:10:91:15 | call to params | params_flow.rb:91:10:91:40 | call to transform_keys | -| params_flow.rb:91:10:91:15 | call to params | params_flow.rb:91:10:91:40 | call to transform_keys [element] | -| params_flow.rb:91:10:91:40 | call to transform_keys [element] | params_flow.rb:91:10:91:40 | call to transform_keys | -| params_flow.rb:95:10:95:15 | call to params | params_flow.rb:95:10:95:41 | call to transform_keys! | -| params_flow.rb:99:10:99:15 | call to params | params_flow.rb:99:10:99:42 | call to transform_values | -| params_flow.rb:103:10:103:15 | call to params | params_flow.rb:103:10:103:43 | call to transform_values! | -| params_flow.rb:107:10:107:15 | call to params | params_flow.rb:107:10:107:33 | call to values_at | -| params_flow.rb:107:10:107:15 | call to params | params_flow.rb:107:10:107:33 | call to values_at [element 0] | -| params_flow.rb:107:10:107:15 | call to params | params_flow.rb:107:10:107:33 | call to values_at [element 1] | -| params_flow.rb:107:10:107:33 | call to values_at [element 0] | params_flow.rb:107:10:107:33 | call to values_at | -| params_flow.rb:107:10:107:33 | call to values_at [element 1] | params_flow.rb:107:10:107:33 | call to values_at | -| params_flow.rb:111:10:111:15 | call to params | params_flow.rb:111:10:111:29 | call to merge | -| params_flow.rb:112:10:112:29 | call to merge [splat position 0] | params_flow.rb:112:10:112:29 | call to merge | -| params_flow.rb:112:23:112:28 | call to params | params_flow.rb:112:10:112:29 | call to merge | -| params_flow.rb:112:23:112:28 | call to params | params_flow.rb:112:10:112:29 | call to merge [splat position 0] | -| params_flow.rb:116:10:116:15 | call to params | params_flow.rb:116:10:116:37 | call to reverse_merge | -| params_flow.rb:117:31:117:36 | call to params | params_flow.rb:117:10:117:37 | call to reverse_merge | -| params_flow.rb:121:10:121:15 | call to params | params_flow.rb:121:10:121:43 | call to with_defaults | -| params_flow.rb:122:31:122:36 | call to params | params_flow.rb:122:10:122:37 | call to with_defaults | -| params_flow.rb:126:10:126:15 | call to params | params_flow.rb:126:10:126:30 | call to merge! | -| params_flow.rb:127:10:127:30 | call to merge! [splat position 0] | params_flow.rb:127:10:127:30 | call to merge! | -| params_flow.rb:127:24:127:29 | call to params | params_flow.rb:127:10:127:30 | call to merge! | -| params_flow.rb:127:24:127:29 | call to params | params_flow.rb:127:10:127:30 | call to merge! [splat position 0] | -| params_flow.rb:130:5:130:5 | [post] p | params_flow.rb:131:10:131:10 | p | -| params_flow.rb:130:5:130:5 | [post] p [splat position 0] | params_flow.rb:131:10:131:10 | p | -| params_flow.rb:130:14:130:19 | call to params | params_flow.rb:130:5:130:5 | [post] p | -| params_flow.rb:130:14:130:19 | call to params | params_flow.rb:130:5:130:5 | [post] p [splat position 0] | -| params_flow.rb:135:10:135:15 | call to params | params_flow.rb:135:10:135:38 | call to reverse_merge! | -| params_flow.rb:136:32:136:37 | call to params | params_flow.rb:136:10:136:38 | call to reverse_merge! | -| params_flow.rb:139:5:139:5 | [post] p | params_flow.rb:140:10:140:10 | p | -| params_flow.rb:139:22:139:27 | call to params | params_flow.rb:139:5:139:5 | [post] p | -| params_flow.rb:144:10:144:15 | call to params | params_flow.rb:144:10:144:44 | call to with_defaults! | -| params_flow.rb:145:32:145:37 | call to params | params_flow.rb:145:10:145:38 | call to with_defaults! | -| params_flow.rb:148:5:148:5 | [post] p | params_flow.rb:149:10:149:10 | p | -| params_flow.rb:148:22:148:27 | call to params | params_flow.rb:148:5:148:5 | [post] p | -| params_flow.rb:153:10:153:15 | call to params | params_flow.rb:153:10:153:44 | call to reverse_update | -| params_flow.rb:154:32:154:37 | call to params | params_flow.rb:154:10:154:38 | call to reverse_update | -| params_flow.rb:157:5:157:5 | [post] p | params_flow.rb:158:10:158:10 | p | -| params_flow.rb:157:22:157:27 | call to params | params_flow.rb:157:5:157:5 | [post] p | -| params_flow.rb:166:10:166:15 | call to params | params_flow.rb:166:10:166:19 | ...[...] | -| params_flow.rb:172:10:172:15 | call to params | params_flow.rb:172:10:172:19 | ...[...] | -| params_flow.rb:176:10:176:15 | call to params | params_flow.rb:176:10:176:19 | ...[...] | +| filter_flow.rb:14:5:14:8 | [post] self [@foo] | filter_flow.rb:17:3:18:5 | self in b [@foo] | provenance | | +| filter_flow.rb:14:12:14:17 | call to params | filter_flow.rb:14:12:14:23 | ...[...] | provenance | | +| filter_flow.rb:14:12:14:23 | ...[...] | filter_flow.rb:14:5:14:8 | [post] self [@foo] | provenance | | +| filter_flow.rb:17:3:18:5 | self in b [@foo] | filter_flow.rb:20:3:22:5 | self in c [@foo] | provenance | | +| filter_flow.rb:20:3:22:5 | self in c [@foo] | filter_flow.rb:21:10:21:13 | self [@foo] | provenance | | +| filter_flow.rb:21:10:21:13 | self [@foo] | filter_flow.rb:21:10:21:13 | @foo | provenance | | +| filter_flow.rb:30:5:30:8 | [post] self [@foo] | filter_flow.rb:33:3:35:5 | self in b [@foo] | provenance | | +| filter_flow.rb:30:12:30:17 | call to params | filter_flow.rb:30:12:30:23 | ...[...] | provenance | | +| filter_flow.rb:30:12:30:23 | ...[...] | filter_flow.rb:30:5:30:8 | [post] self [@foo] | provenance | | +| filter_flow.rb:33:3:35:5 | self in b [@foo] | filter_flow.rb:37:3:39:5 | self in c [@foo] | provenance | | +| filter_flow.rb:37:3:39:5 | self in c [@foo] | filter_flow.rb:38:10:38:13 | self [@foo] | provenance | | +| filter_flow.rb:38:10:38:13 | self [@foo] | filter_flow.rb:38:10:38:13 | @foo | provenance | | +| filter_flow.rb:47:5:47:8 | [post] self [@foo] | filter_flow.rb:51:3:52:5 | self in b [@foo] | provenance | | +| filter_flow.rb:47:12:47:17 | call to params | filter_flow.rb:47:12:47:23 | ...[...] | provenance | | +| filter_flow.rb:47:12:47:23 | ...[...] | filter_flow.rb:47:5:47:8 | [post] self [@foo] | provenance | | +| filter_flow.rb:51:3:52:5 | self in b [@foo] | filter_flow.rb:54:3:56:5 | self in c [@foo] | provenance | | +| filter_flow.rb:54:3:56:5 | self in c [@foo] | filter_flow.rb:55:10:55:13 | self [@foo] | provenance | | +| filter_flow.rb:55:10:55:13 | self [@foo] | filter_flow.rb:55:10:55:13 | @foo | provenance | | +| filter_flow.rb:64:5:64:8 | [post] @foo [@bar] | filter_flow.rb:64:5:64:8 | [post] self [@foo, @bar] | provenance | | +| filter_flow.rb:64:5:64:8 | [post] self [@foo, @bar] | filter_flow.rb:67:3:68:5 | self in b [@foo, @bar] | provenance | | +| filter_flow.rb:64:16:64:21 | call to params | filter_flow.rb:64:16:64:27 | ...[...] | provenance | | +| filter_flow.rb:64:16:64:27 | ...[...] | filter_flow.rb:64:5:64:8 | [post] @foo [@bar] | provenance | | +| filter_flow.rb:67:3:68:5 | self in b [@foo, @bar] | filter_flow.rb:70:3:72:5 | self in c [@foo, @bar] | provenance | | +| filter_flow.rb:70:3:72:5 | self in c [@foo, @bar] | filter_flow.rb:71:10:71:13 | self [@foo, @bar] | provenance | | +| filter_flow.rb:71:10:71:13 | @foo [@bar] | filter_flow.rb:71:10:71:17 | call to bar | provenance | | +| filter_flow.rb:71:10:71:13 | self [@foo, @bar] | filter_flow.rb:71:10:71:13 | @foo [@bar] | provenance | | +| filter_flow.rb:80:5:80:8 | [post] self [@foo] | filter_flow.rb:83:3:84:5 | self in b [@foo] | provenance | | +| 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:91:5:91:8 | [post] self [@foo] | filter_flow.rb:80:5:80:8 | [post] self [@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 | | +| params_flow.rb:7:10:7:15 | call to params | params_flow.rb:7:10:7:23 | call to as_json | provenance | | +| params_flow.rb:15:10:15:15 | call to params | params_flow.rb:15:10:15:33 | call to permit | provenance | | +| params_flow.rb:19:10:19:15 | call to params | params_flow.rb:19:10:19:34 | call to require | provenance | | +| params_flow.rb:23:10:23:15 | call to params | params_flow.rb:23:10:23:35 | call to required | provenance | | +| params_flow.rb:27:10:27:15 | call to params | params_flow.rb:27:10:27:24 | call to deep_dup | provenance | | +| params_flow.rb:31:10:31:15 | call to params | params_flow.rb:31:10:31:45 | call to deep_transform_keys | provenance | | +| params_flow.rb:35:10:35:15 | call to params | params_flow.rb:35:10:35:46 | call to deep_transform_keys! | provenance | | +| params_flow.rb:39:10:39:15 | call to params | params_flow.rb:39:10:39:48 | call to delete_if | provenance | | +| params_flow.rb:43:10:43:15 | call to params | params_flow.rb:43:10:43:32 | call to extract! | provenance | | +| params_flow.rb:47:10:47:15 | call to params | params_flow.rb:47:10:47:46 | call to keep_if | provenance | | +| params_flow.rb:51:10:51:15 | call to params | params_flow.rb:51:10:51:45 | call to select | provenance | | +| params_flow.rb:55:10:55:15 | call to params | params_flow.rb:55:10:55:46 | call to select! | provenance | | +| params_flow.rb:59:10:59:15 | call to params | params_flow.rb:59:10:59:45 | call to reject | provenance | | +| params_flow.rb:63:10:63:15 | call to params | params_flow.rb:63:10:63:46 | call to reject! | provenance | | +| params_flow.rb:67:10:67:15 | call to params | params_flow.rb:67:10:67:20 | call to to_h | provenance | | +| params_flow.rb:71:10:71:15 | call to params | params_flow.rb:71:10:71:23 | call to to_hash | provenance | | +| params_flow.rb:75:10:75:15 | call to params | params_flow.rb:75:10:75:24 | call to to_query | provenance | | +| params_flow.rb:79:10:79:15 | call to params | params_flow.rb:79:10:79:24 | call to to_param | provenance | | +| params_flow.rb:83:10:83:15 | call to params | params_flow.rb:83:10:83:27 | call to to_unsafe_h | provenance | | +| params_flow.rb:87:10:87:15 | call to params | params_flow.rb:87:10:87:30 | call to to_unsafe_hash | provenance | | +| params_flow.rb:91:10:91:15 | call to params | params_flow.rb:91:10:91:40 | call to transform_keys | provenance | | +| params_flow.rb:91:10:91:15 | call to params | params_flow.rb:91:10:91:40 | call to transform_keys [element] | provenance | | +| params_flow.rb:91:10:91:40 | call to transform_keys [element] | params_flow.rb:91:10:91:40 | call to transform_keys | provenance | | +| params_flow.rb:95:10:95:15 | call to params | params_flow.rb:95:10:95:41 | call to transform_keys! | provenance | | +| params_flow.rb:99:10:99:15 | call to params | params_flow.rb:99:10:99:42 | call to transform_values | provenance | | +| params_flow.rb:103:10:103:15 | call to params | params_flow.rb:103:10:103:43 | call to transform_values! | provenance | | +| params_flow.rb:107:10:107:15 | call to params | params_flow.rb:107:10:107:33 | call to values_at | provenance | | +| params_flow.rb:107:10:107:15 | call to params | params_flow.rb:107:10:107:33 | call to values_at [element 0] | provenance | | +| params_flow.rb:107:10:107:15 | call to params | params_flow.rb:107:10:107:33 | call to values_at [element 1] | provenance | | +| params_flow.rb:107:10:107:33 | call to values_at [element 0] | params_flow.rb:107:10:107:33 | call to values_at | provenance | | +| params_flow.rb:107:10:107:33 | call to values_at [element 1] | params_flow.rb:107:10:107:33 | call to values_at | provenance | | +| params_flow.rb:111:10:111:15 | call to params | params_flow.rb:111:10:111:29 | call to merge | provenance | | +| params_flow.rb:112:10:112:29 | call to merge [splat position 0] | params_flow.rb:112:10:112:29 | call to merge | provenance | | +| params_flow.rb:112:23:112:28 | call to params | params_flow.rb:112:10:112:29 | call to merge | provenance | | +| params_flow.rb:112:23:112:28 | call to params | params_flow.rb:112:10:112:29 | call to merge [splat position 0] | provenance | | +| params_flow.rb:116:10:116:15 | call to params | params_flow.rb:116:10:116:37 | call to reverse_merge | provenance | | +| params_flow.rb:117:31:117:36 | call to params | params_flow.rb:117:10:117:37 | call to reverse_merge | provenance | | +| params_flow.rb:121:10:121:15 | call to params | params_flow.rb:121:10:121:43 | call to with_defaults | provenance | | +| params_flow.rb:122:31:122:36 | call to params | params_flow.rb:122:10:122:37 | call to with_defaults | provenance | | +| params_flow.rb:126:10:126:15 | call to params | params_flow.rb:126:10:126:30 | call to merge! | provenance | | +| params_flow.rb:127:10:127:30 | call to merge! [splat position 0] | params_flow.rb:127:10:127:30 | call to merge! | provenance | | +| params_flow.rb:127:24:127:29 | call to params | params_flow.rb:127:10:127:30 | call to merge! | provenance | | +| params_flow.rb:127:24:127:29 | call to params | params_flow.rb:127:10:127:30 | call to merge! [splat position 0] | provenance | | +| params_flow.rb:130:5:130:5 | [post] p | params_flow.rb:131:10:131:10 | p | provenance | | +| params_flow.rb:130:5:130:5 | [post] p [splat position 0] | params_flow.rb:131:10:131:10 | p | provenance | | +| params_flow.rb:130:14:130:19 | call to params | params_flow.rb:130:5:130:5 | [post] p | provenance | | +| params_flow.rb:130:14:130:19 | call to params | params_flow.rb:130:5:130:5 | [post] p [splat position 0] | provenance | | +| params_flow.rb:135:10:135:15 | call to params | params_flow.rb:135:10:135:38 | call to reverse_merge! | provenance | | +| params_flow.rb:136:32:136:37 | call to params | params_flow.rb:136:10:136:38 | call to reverse_merge! | provenance | | +| params_flow.rb:139:5:139:5 | [post] p | params_flow.rb:140:10:140:10 | p | provenance | | +| params_flow.rb:139:22:139:27 | call to params | params_flow.rb:139:5:139:5 | [post] p | provenance | | +| params_flow.rb:144:10:144:15 | call to params | params_flow.rb:144:10:144:44 | call to with_defaults! | provenance | | +| params_flow.rb:145:32:145:37 | call to params | params_flow.rb:145:10:145:38 | call to with_defaults! | provenance | | +| params_flow.rb:148:5:148:5 | [post] p | params_flow.rb:149:10:149:10 | p | provenance | | +| params_flow.rb:148:22:148:27 | call to params | params_flow.rb:148:5:148:5 | [post] p | provenance | | +| params_flow.rb:153:10:153:15 | call to params | params_flow.rb:153:10:153:44 | call to reverse_update | provenance | | +| params_flow.rb:154:32:154:37 | call to params | params_flow.rb:154:10:154:38 | call to reverse_update | provenance | | +| params_flow.rb:157:5:157:5 | [post] p | params_flow.rb:158:10:158:10 | p | provenance | | +| params_flow.rb:157:22:157:27 | call to params | params_flow.rb:157:5:157:5 | [post] p | provenance | | +| params_flow.rb:166:10:166:15 | call to params | params_flow.rb:166:10:166:19 | ...[...] | provenance | | +| params_flow.rb:172:10:172:15 | call to params | params_flow.rb:172:10:172:19 | ...[...] | provenance | | +| params_flow.rb:176:10:176:15 | call to params | params_flow.rb:176:10:176:19 | ...[...] | provenance | | nodes | filter_flow.rb:14:5:14:8 | [post] self [@foo] | semmle.label | [post] self [@foo] | | filter_flow.rb:14:12:14:17 | call to params | semmle.label | call to params | diff --git a/ruby/ql/test/library-tests/frameworks/action_mailer/params-flow.expected b/ruby/ql/test/library-tests/frameworks/action_mailer/params-flow.expected index 43d26266352..e69e4a8ebfd 100644 --- a/ruby/ql/test/library-tests/frameworks/action_mailer/params-flow.expected +++ b/ruby/ql/test/library-tests/frameworks/action_mailer/params-flow.expected @@ -1,6 +1,6 @@ testFailures edges -| mailer.rb:3:10:3:15 | call to params | mailer.rb:3:10:3:21 | ...[...] | +| mailer.rb:3:10:3:15 | call to params | mailer.rb:3:10:3:21 | ...[...] | provenance | | nodes | mailer.rb:3:10:3:15 | call to params | semmle.label | call to params | | mailer.rb:3:10:3:21 | ...[...] | semmle.label | ...[...] | diff --git a/ruby/ql/test/library-tests/frameworks/active_support/ActiveSupportDataFlow.expected b/ruby/ql/test/library-tests/frameworks/active_support/ActiveSupportDataFlow.expected index b4178c9bac5..4eadde7fa54 100644 --- a/ruby/ql/test/library-tests/frameworks/active_support/ActiveSupportDataFlow.expected +++ b/ruby/ql/test/library-tests/frameworks/active_support/ActiveSupportDataFlow.expected @@ -1,208 +1,208 @@ testFailures | hash_extensions.rb:126:10:126:19 | call to sole | Unexpected result: hasValueFlow=b | edges -| active_support.rb:180:5:180:5 | x [element 0] | active_support.rb:181:9:181:9 | x [element 0] | -| active_support.rb:180:10:180:17 | call to source | active_support.rb:180:5:180:5 | x [element 0] | -| active_support.rb:181:5:181:5 | y [element] | active_support.rb:182:10:182:10 | y [element] | -| active_support.rb:181:9:181:9 | x [element 0] | active_support.rb:181:9:181:23 | call to compact_blank [element] | -| active_support.rb:181:9:181:23 | call to compact_blank [element] | active_support.rb:181:5:181:5 | y [element] | -| active_support.rb:182:10:182:10 | y [element] | active_support.rb:182:10:182:13 | ...[...] | -| active_support.rb:186:5:186:5 | x [element 0] | active_support.rb:187:9:187:9 | x [element 0] | -| active_support.rb:186:10:186:18 | call to source | active_support.rb:186:5:186:5 | x [element 0] | -| active_support.rb:187:5:187:5 | y [element] | active_support.rb:188:10:188:10 | y [element] | -| active_support.rb:187:9:187:9 | x [element 0] | active_support.rb:187:9:187:21 | call to excluding [element] | -| active_support.rb:187:9:187:21 | call to excluding [element] | active_support.rb:187:5:187:5 | y [element] | -| active_support.rb:188:10:188:10 | y [element] | active_support.rb:188:10:188:13 | ...[...] | -| active_support.rb:192:5:192:5 | x [element 0] | active_support.rb:193:9:193:9 | x [element 0] | -| active_support.rb:192:10:192:18 | call to source | active_support.rb:192:5:192:5 | x [element 0] | -| active_support.rb:193:5:193:5 | y [element] | active_support.rb:194:10:194:10 | y [element] | -| active_support.rb:193:9:193:9 | x [element 0] | active_support.rb:193:9:193:19 | call to without [element] | -| active_support.rb:193:9:193:19 | call to without [element] | active_support.rb:193:5:193:5 | y [element] | -| active_support.rb:194:10:194:10 | y [element] | active_support.rb:194:10:194:13 | ...[...] | -| active_support.rb:198:5:198:5 | x [element 0] | active_support.rb:199:9:199:9 | x [element 0] | -| active_support.rb:198:10:198:18 | call to source | active_support.rb:198:5:198:5 | x [element 0] | -| active_support.rb:199:5:199:5 | y [element] | active_support.rb:200:10:200:10 | y [element] | -| active_support.rb:199:9:199:9 | x [element 0] | active_support.rb:199:9:199:37 | call to in_order_of [element] | -| active_support.rb:199:9:199:37 | call to in_order_of [element] | active_support.rb:199:5:199:5 | y [element] | -| active_support.rb:200:10:200:10 | y [element] | active_support.rb:200:10:200:13 | ...[...] | -| active_support.rb:204:5:204:5 | a [element 0] | active_support.rb:205:9:205:9 | a [element 0] | -| active_support.rb:204:5:204:5 | a [element 0] | active_support.rb:206:10:206:10 | a [element 0] | -| active_support.rb:204:10:204:18 | call to source | active_support.rb:204:5:204:5 | a [element 0] | -| active_support.rb:205:5:205:5 | b [element 0] | active_support.rb:208:10:208:10 | b [element 0] | -| active_support.rb:205:5:205:5 | b [element] | active_support.rb:208:10:208:10 | b [element] | -| active_support.rb:205:5:205:5 | b [element] | active_support.rb:209:10:209:10 | b [element] | -| active_support.rb:205:5:205:5 | b [element] | active_support.rb:210:10:210:10 | b [element] | -| active_support.rb:205:5:205:5 | b [element] | active_support.rb:211:10:211:10 | b [element] | -| active_support.rb:205:9:205:9 | a [element 0] | active_support.rb:205:9:205:41 | call to including [element 0] | -| active_support.rb:205:9:205:41 | call to including [element 0] | active_support.rb:205:5:205:5 | b [element 0] | -| active_support.rb:205:9:205:41 | call to including [element] | active_support.rb:205:5:205:5 | b [element] | -| active_support.rb:205:21:205:29 | call to source | active_support.rb:205:9:205:41 | call to including [element] | -| active_support.rb:205:32:205:40 | call to source | active_support.rb:205:9:205:41 | call to including [element] | -| active_support.rb:206:10:206:10 | a [element 0] | active_support.rb:206:10:206:13 | ...[...] | -| active_support.rb:208:10:208:10 | b [element 0] | active_support.rb:208:10:208:13 | ...[...] | -| active_support.rb:208:10:208:10 | b [element] | active_support.rb:208:10:208:13 | ...[...] | -| active_support.rb:209:10:209:10 | b [element] | active_support.rb:209:10:209:13 | ...[...] | -| active_support.rb:210:10:210:10 | b [element] | active_support.rb:210:10:210:13 | ...[...] | -| active_support.rb:211:10:211:10 | b [element] | active_support.rb:211:10:211:13 | ...[...] | -| active_support.rb:282:3:282:3 | x | active_support.rb:283:8:283:8 | x | -| active_support.rb:282:7:282:16 | call to source | active_support.rb:282:3:282:3 | x | -| active_support.rb:283:8:283:8 | x | active_support.rb:283:8:283:17 | call to presence | -| active_support.rb:285:3:285:3 | y | active_support.rb:286:8:286:8 | y | -| active_support.rb:285:7:285:16 | call to source | active_support.rb:285:3:285:3 | y | -| active_support.rb:286:8:286:8 | y | active_support.rb:286:8:286:17 | call to presence | -| active_support.rb:290:3:290:3 | x | active_support.rb:291:8:291:8 | x | -| active_support.rb:290:7:290:16 | call to source | active_support.rb:290:3:290:3 | x | -| active_support.rb:291:8:291:8 | x | active_support.rb:291:8:291:17 | call to deep_dup | -| hash_extensions.rb:2:5:2:5 | h [element :a] | hash_extensions.rb:3:9:3:9 | h [element :a] | -| hash_extensions.rb:2:14:2:24 | call to source | hash_extensions.rb:2:5:2:5 | h [element :a] | -| hash_extensions.rb:3:5:3:5 | x [element] | hash_extensions.rb:4:10:4:10 | x [element] | -| hash_extensions.rb:3:9:3:9 | h [element :a] | hash_extensions.rb:3:9:3:24 | call to stringify_keys [element] | -| hash_extensions.rb:3:9:3:24 | call to stringify_keys [element] | hash_extensions.rb:3:5:3:5 | x [element] | -| hash_extensions.rb:4:10:4:10 | x [element] | hash_extensions.rb:4:10:4:14 | ...[...] | -| hash_extensions.rb:10:5:10:5 | h [element :a] | hash_extensions.rb:11:9:11:9 | h [element :a] | -| hash_extensions.rb:10:14:10:24 | call to source | hash_extensions.rb:10:5:10:5 | h [element :a] | -| hash_extensions.rb:11:5:11:5 | x [element] | hash_extensions.rb:12:10:12:10 | x [element] | -| hash_extensions.rb:11:9:11:9 | h [element :a] | hash_extensions.rb:11:9:11:20 | call to to_options [element] | -| hash_extensions.rb:11:9:11:20 | call to to_options [element] | hash_extensions.rb:11:5:11:5 | x [element] | -| hash_extensions.rb:12:10:12:10 | x [element] | hash_extensions.rb:12:10:12:14 | ...[...] | -| hash_extensions.rb:18:5:18:5 | h [element :a] | hash_extensions.rb:19:9:19:9 | h [element :a] | -| hash_extensions.rb:18:14:18:24 | call to source | hash_extensions.rb:18:5:18:5 | h [element :a] | -| hash_extensions.rb:19:5:19:5 | x [element] | hash_extensions.rb:20:10:20:10 | x [element] | -| hash_extensions.rb:19:9:19:9 | h [element :a] | hash_extensions.rb:19:9:19:24 | call to symbolize_keys [element] | -| hash_extensions.rb:19:9:19:24 | call to symbolize_keys [element] | hash_extensions.rb:19:5:19:5 | x [element] | -| hash_extensions.rb:20:10:20:10 | x [element] | hash_extensions.rb:20:10:20:14 | ...[...] | -| hash_extensions.rb:26:5:26:5 | h [element :a] | hash_extensions.rb:27:9:27:9 | h [element :a] | -| hash_extensions.rb:26:14:26:24 | call to source | hash_extensions.rb:26:5:26:5 | h [element :a] | -| hash_extensions.rb:27:5:27:5 | x [element] | hash_extensions.rb:28:10:28:10 | x [element] | -| hash_extensions.rb:27:9:27:9 | h [element :a] | hash_extensions.rb:27:9:27:29 | call to deep_stringify_keys [element] | -| hash_extensions.rb:27:9:27:29 | call to deep_stringify_keys [element] | hash_extensions.rb:27:5:27:5 | x [element] | -| hash_extensions.rb:28:10:28:10 | x [element] | hash_extensions.rb:28:10:28:14 | ...[...] | -| hash_extensions.rb:34:5:34:5 | h [element :a] | hash_extensions.rb:35:9:35:9 | h [element :a] | -| hash_extensions.rb:34:14:34:24 | call to source | hash_extensions.rb:34:5:34:5 | h [element :a] | -| hash_extensions.rb:35:5:35:5 | x [element] | hash_extensions.rb:36:10:36:10 | x [element] | -| hash_extensions.rb:35:9:35:9 | h [element :a] | hash_extensions.rb:35:9:35:29 | call to deep_symbolize_keys [element] | -| hash_extensions.rb:35:9:35:29 | call to deep_symbolize_keys [element] | hash_extensions.rb:35:5:35:5 | x [element] | -| hash_extensions.rb:36:10:36:10 | x [element] | hash_extensions.rb:36:10:36:14 | ...[...] | -| hash_extensions.rb:42:5:42:5 | h [element :a] | hash_extensions.rb:43:9:43:9 | h [element :a] | -| hash_extensions.rb:42:14:42:24 | call to source | hash_extensions.rb:42:5:42:5 | h [element :a] | -| hash_extensions.rb:43:5:43:5 | x [element] | hash_extensions.rb:44:10:44:10 | x [element] | -| hash_extensions.rb:43:9:43:9 | h [element :a] | hash_extensions.rb:43:9:43:33 | call to with_indifferent_access [element] | -| hash_extensions.rb:43:9:43:33 | call to with_indifferent_access [element] | hash_extensions.rb:43:5:43:5 | x [element] | -| hash_extensions.rb:44:10:44:10 | x [element] | hash_extensions.rb:44:10:44:14 | ...[...] | -| hash_extensions.rb:50:5:50:5 | h [element :a] | hash_extensions.rb:51:9:51:9 | h [element :a] | -| hash_extensions.rb:50:5:50:5 | h [element :b] | hash_extensions.rb:51:9:51:9 | h [element :b] | -| hash_extensions.rb:50:5:50:5 | h [element :d] | hash_extensions.rb:51:9:51:9 | h [element :d] | -| hash_extensions.rb:50:14:50:23 | call to taint | hash_extensions.rb:50:5:50:5 | h [element :a] | -| hash_extensions.rb:50:29:50:38 | call to taint | hash_extensions.rb:50:5:50:5 | h [element :b] | -| hash_extensions.rb:50:52:50:61 | call to taint | hash_extensions.rb:50:5:50:5 | h [element :d] | -| hash_extensions.rb:51:5:51:5 | x [element :a] | hash_extensions.rb:58:10:58:10 | x [element :a] | -| hash_extensions.rb:51:5:51:5 | x [element :b] | hash_extensions.rb:59:10:59:10 | x [element :b] | -| hash_extensions.rb:51:9:51:9 | [post] h [element :d] | hash_extensions.rb:56:10:56:10 | h [element :d] | -| hash_extensions.rb:51:9:51:9 | h [element :a] | hash_extensions.rb:51:9:51:29 | call to extract! [element :a] | -| hash_extensions.rb:51:9:51:9 | h [element :b] | hash_extensions.rb:51:9:51:29 | call to extract! [element :b] | -| hash_extensions.rb:51:9:51:9 | h [element :d] | hash_extensions.rb:51:9:51:9 | [post] h [element :d] | -| hash_extensions.rb:51:9:51:29 | call to extract! [element :a] | hash_extensions.rb:51:5:51:5 | x [element :a] | -| hash_extensions.rb:51:9:51:29 | call to extract! [element :b] | hash_extensions.rb:51:5:51:5 | x [element :b] | -| hash_extensions.rb:56:10:56:10 | h [element :d] | hash_extensions.rb:56:10:56:14 | ...[...] | -| hash_extensions.rb:58:10:58:10 | x [element :a] | hash_extensions.rb:58:10:58:14 | ...[...] | -| hash_extensions.rb:59:10:59:10 | x [element :b] | hash_extensions.rb:59:10:59:14 | ...[...] | -| hash_extensions.rb:67:5:67:10 | values [element 0] | hash_extensions.rb:68:9:68:14 | values [element 0] | -| hash_extensions.rb:67:5:67:10 | values [element 1] | hash_extensions.rb:68:9:68:14 | values [element 1] | -| hash_extensions.rb:67:5:67:10 | values [element 2] | hash_extensions.rb:68:9:68:14 | values [element 2] | -| hash_extensions.rb:67:15:67:25 | call to source | hash_extensions.rb:67:5:67:10 | values [element 0] | -| hash_extensions.rb:67:28:67:38 | call to source | hash_extensions.rb:67:5:67:10 | values [element 1] | -| hash_extensions.rb:67:41:67:51 | call to source | hash_extensions.rb:67:5:67:10 | values [element 2] | -| hash_extensions.rb:68:5:68:5 | h [element] | hash_extensions.rb:73:10:73:10 | h [element] | -| hash_extensions.rb:68:5:68:5 | h [element] | hash_extensions.rb:74:10:74:10 | h [element] | -| hash_extensions.rb:68:9:68:14 | values [element 0] | hash_extensions.rb:68:9:71:7 | call to index_by [element] | -| hash_extensions.rb:68:9:68:14 | values [element 0] | hash_extensions.rb:68:29:68:33 | value | -| hash_extensions.rb:68:9:68:14 | values [element 1] | hash_extensions.rb:68:9:71:7 | call to index_by [element] | -| hash_extensions.rb:68:9:68:14 | values [element 1] | hash_extensions.rb:68:29:68:33 | value | -| hash_extensions.rb:68:9:68:14 | values [element 2] | hash_extensions.rb:68:9:71:7 | call to index_by [element] | -| hash_extensions.rb:68:9:68:14 | values [element 2] | hash_extensions.rb:68:29:68:33 | value | -| hash_extensions.rb:68:9:71:7 | call to index_by [element] | hash_extensions.rb:68:5:68:5 | h [element] | -| hash_extensions.rb:68:29:68:33 | value | hash_extensions.rb:69:14:69:18 | value | -| hash_extensions.rb:73:10:73:10 | h [element] | hash_extensions.rb:73:10:73:16 | ...[...] | -| hash_extensions.rb:74:10:74:10 | h [element] | hash_extensions.rb:74:10:74:16 | ...[...] | -| hash_extensions.rb:80:5:80:10 | values [element 0] | hash_extensions.rb:81:9:81:14 | values [element 0] | -| hash_extensions.rb:80:5:80:10 | values [element 1] | hash_extensions.rb:81:9:81:14 | values [element 1] | -| hash_extensions.rb:80:5:80:10 | values [element 2] | hash_extensions.rb:81:9:81:14 | values [element 2] | -| hash_extensions.rb:80:15:80:25 | call to source | hash_extensions.rb:80:5:80:10 | values [element 0] | -| hash_extensions.rb:80:28:80:38 | call to source | hash_extensions.rb:80:5:80:10 | values [element 1] | -| hash_extensions.rb:80:41:80:51 | call to source | hash_extensions.rb:80:5:80:10 | values [element 2] | -| hash_extensions.rb:81:5:81:5 | h [element] | hash_extensions.rb:86:10:86:10 | h [element] | -| hash_extensions.rb:81:5:81:5 | h [element] | hash_extensions.rb:87:10:87:10 | h [element] | -| hash_extensions.rb:81:9:81:14 | values [element 0] | hash_extensions.rb:81:31:81:33 | key | -| hash_extensions.rb:81:9:81:14 | values [element 1] | hash_extensions.rb:81:31:81:33 | key | -| hash_extensions.rb:81:9:81:14 | values [element 2] | hash_extensions.rb:81:31:81:33 | key | -| hash_extensions.rb:81:9:84:7 | call to index_with [element] | hash_extensions.rb:81:5:81:5 | h [element] | -| hash_extensions.rb:81:31:81:33 | key | hash_extensions.rb:82:14:82:16 | key | -| hash_extensions.rb:83:9:83:19 | call to source | hash_extensions.rb:81:9:84:7 | call to index_with [element] | -| hash_extensions.rb:86:10:86:10 | h [element] | hash_extensions.rb:86:10:86:16 | ...[...] | -| hash_extensions.rb:87:10:87:10 | h [element] | hash_extensions.rb:87:10:87:16 | ...[...] | -| hash_extensions.rb:89:5:89:5 | j [element] | hash_extensions.rb:91:10:91:10 | j [element] | -| hash_extensions.rb:89:5:89:5 | j [element] | hash_extensions.rb:92:10:92:10 | j [element] | -| hash_extensions.rb:89:9:89:38 | call to index_with [element] | hash_extensions.rb:89:5:89:5 | j [element] | -| hash_extensions.rb:89:27:89:37 | call to source | hash_extensions.rb:89:9:89:38 | call to index_with [element] | -| hash_extensions.rb:91:10:91:10 | j [element] | hash_extensions.rb:91:10:91:16 | ...[...] | -| hash_extensions.rb:92:10:92:10 | j [element] | hash_extensions.rb:92:10:92:16 | ...[...] | -| hash_extensions.rb:98:5:98:10 | values [element 0, element :id] | hash_extensions.rb:99:10:99:15 | values [element 0, element :id] | -| hash_extensions.rb:98:5:98:10 | values [element 0, element :id] | hash_extensions.rb:101:10:101:15 | values [element 0, element :id] | -| hash_extensions.rb:98:5:98:10 | values [element 0, element :id] | hash_extensions.rb:104:10:104:15 | values [element 0, element :id] | -| hash_extensions.rb:98:5:98:10 | values [element 0, element :name] | hash_extensions.rb:100:10:100:15 | values [element 0, element :name] | -| hash_extensions.rb:98:5:98:10 | values [element 0, element :name] | hash_extensions.rb:102:10:102:15 | values [element 0, element :name] | -| hash_extensions.rb:98:5:98:10 | values [element 0, element :name] | hash_extensions.rb:103:10:103:15 | values [element 0, element :name] | -| hash_extensions.rb:98:21:98:31 | call to source | hash_extensions.rb:98:5:98:10 | values [element 0, element :id] | -| hash_extensions.rb:98:40:98:54 | call to source | hash_extensions.rb:98:5:98:10 | values [element 0, element :name] | -| hash_extensions.rb:99:10:99:15 | values [element 0, element :id] | hash_extensions.rb:99:10:99:25 | call to pick | -| hash_extensions.rb:100:10:100:15 | values [element 0, element :name] | hash_extensions.rb:100:10:100:27 | call to pick | -| hash_extensions.rb:101:10:101:15 | values [element 0, element :id] | hash_extensions.rb:101:10:101:32 | call to pick [element 0] | -| hash_extensions.rb:101:10:101:32 | call to pick [element 0] | hash_extensions.rb:101:10:101:35 | ...[...] | -| hash_extensions.rb:102:10:102:15 | values [element 0, element :name] | hash_extensions.rb:102:10:102:32 | call to pick [element 1] | -| hash_extensions.rb:102:10:102:32 | call to pick [element 1] | hash_extensions.rb:102:10:102:35 | ...[...] | -| hash_extensions.rb:103:10:103:15 | values [element 0, element :name] | hash_extensions.rb:103:10:103:32 | call to pick [element 0] | -| hash_extensions.rb:103:10:103:32 | call to pick [element 0] | hash_extensions.rb:103:10:103:35 | ...[...] | -| hash_extensions.rb:104:10:104:15 | values [element 0, element :id] | hash_extensions.rb:104:10:104:32 | call to pick [element 1] | -| hash_extensions.rb:104:10:104:32 | call to pick [element 1] | hash_extensions.rb:104:10:104:35 | ...[...] | -| hash_extensions.rb:110:5:110:10 | values [element 0, element :id] | hash_extensions.rb:112:10:112:15 | values [element 0, element :id] | -| hash_extensions.rb:110:5:110:10 | values [element 0, element :id] | hash_extensions.rb:115:10:115:15 | values [element 0, element :id] | -| hash_extensions.rb:110:5:110:10 | values [element 0, element :name] | hash_extensions.rb:111:10:111:15 | values [element 0, element :name] | -| hash_extensions.rb:110:5:110:10 | values [element 0, element :name] | hash_extensions.rb:113:10:113:15 | values [element 0, element :name] | -| hash_extensions.rb:110:5:110:10 | values [element 0, element :name] | hash_extensions.rb:114:10:114:15 | values [element 0, element :name] | -| hash_extensions.rb:110:5:110:10 | values [element 1, element :id] | hash_extensions.rb:112:10:112:15 | values [element 1, element :id] | -| hash_extensions.rb:110:5:110:10 | values [element 1, element :id] | hash_extensions.rb:115:10:115:15 | values [element 1, element :id] | -| hash_extensions.rb:110:5:110:10 | values [element 1, element :name] | hash_extensions.rb:111:10:111:15 | values [element 1, element :name] | -| hash_extensions.rb:110:5:110:10 | values [element 1, element :name] | hash_extensions.rb:113:10:113:15 | values [element 1, element :name] | -| hash_extensions.rb:110:5:110:10 | values [element 1, element :name] | hash_extensions.rb:114:10:114:15 | values [element 1, element :name] | -| hash_extensions.rb:110:21:110:31 | call to source | hash_extensions.rb:110:5:110:10 | values [element 0, element :id] | -| hash_extensions.rb:110:40:110:54 | call to source | hash_extensions.rb:110:5:110:10 | values [element 0, element :name] | -| hash_extensions.rb:110:65:110:75 | call to source | hash_extensions.rb:110:5:110:10 | values [element 1, element :id] | -| hash_extensions.rb:110:84:110:99 | call to source | hash_extensions.rb:110:5:110:10 | values [element 1, element :name] | -| hash_extensions.rb:111:10:111:15 | values [element 0, element :name] | hash_extensions.rb:111:10:111:28 | call to pluck [element] | -| hash_extensions.rb:111:10:111:15 | values [element 1, element :name] | hash_extensions.rb:111:10:111:28 | call to pluck [element] | -| hash_extensions.rb:111:10:111:28 | call to pluck [element] | hash_extensions.rb:111:10:111:31 | ...[...] | -| hash_extensions.rb:112:10:112:15 | values [element 0, element :id] | hash_extensions.rb:112:10:112:33 | call to pluck [element, element 0] | -| hash_extensions.rb:112:10:112:15 | values [element 1, element :id] | hash_extensions.rb:112:10:112:33 | call to pluck [element, element 0] | -| hash_extensions.rb:112:10:112:33 | call to pluck [element, element 0] | hash_extensions.rb:112:10:112:36 | ...[...] [element 0] | -| hash_extensions.rb:112:10:112:36 | ...[...] [element 0] | hash_extensions.rb:112:10:112:39 | ...[...] | -| hash_extensions.rb:113:10:113:15 | values [element 0, element :name] | hash_extensions.rb:113:10:113:33 | call to pluck [element, element 1] | -| hash_extensions.rb:113:10:113:15 | values [element 1, element :name] | hash_extensions.rb:113:10:113:33 | call to pluck [element, element 1] | -| hash_extensions.rb:113:10:113:33 | call to pluck [element, element 1] | hash_extensions.rb:113:10:113:36 | ...[...] [element 1] | -| hash_extensions.rb:113:10:113:36 | ...[...] [element 1] | hash_extensions.rb:113:10:113:39 | ...[...] | -| hash_extensions.rb:114:10:114:15 | values [element 0, element :name] | hash_extensions.rb:114:10:114:33 | call to pluck [element, element 0] | -| hash_extensions.rb:114:10:114:15 | values [element 1, element :name] | hash_extensions.rb:114:10:114:33 | call to pluck [element, element 0] | -| hash_extensions.rb:114:10:114:33 | call to pluck [element, element 0] | hash_extensions.rb:114:10:114:36 | ...[...] [element 0] | -| hash_extensions.rb:114:10:114:36 | ...[...] [element 0] | hash_extensions.rb:114:10:114:39 | ...[...] | -| hash_extensions.rb:115:10:115:15 | values [element 0, element :id] | hash_extensions.rb:115:10:115:33 | call to pluck [element, element 1] | -| hash_extensions.rb:115:10:115:15 | values [element 1, element :id] | hash_extensions.rb:115:10:115:33 | call to pluck [element, element 1] | -| hash_extensions.rb:115:10:115:33 | call to pluck [element, element 1] | hash_extensions.rb:115:10:115:36 | ...[...] [element 1] | -| hash_extensions.rb:115:10:115:36 | ...[...] [element 1] | hash_extensions.rb:115:10:115:39 | ...[...] | -| hash_extensions.rb:122:5:122:10 | single [element 0] | hash_extensions.rb:125:10:125:15 | single [element 0] | -| hash_extensions.rb:122:15:122:25 | call to source | hash_extensions.rb:122:5:122:10 | single [element 0] | -| hash_extensions.rb:123:5:123:9 | multi [element 0] | hash_extensions.rb:126:10:126:14 | multi [element 0] | -| hash_extensions.rb:123:14:123:24 | call to source | hash_extensions.rb:123:5:123:9 | multi [element 0] | -| hash_extensions.rb:125:10:125:15 | single [element 0] | hash_extensions.rb:125:10:125:20 | call to sole | -| hash_extensions.rb:126:10:126:14 | multi [element 0] | hash_extensions.rb:126:10:126:19 | call to sole | +| active_support.rb:180:5:180:5 | x [element 0] | active_support.rb:181:9:181:9 | x [element 0] | provenance | | +| active_support.rb:180:10:180:17 | call to source | active_support.rb:180:5:180:5 | x [element 0] | provenance | | +| active_support.rb:181:5:181:5 | y [element] | active_support.rb:182:10:182:10 | y [element] | provenance | | +| active_support.rb:181:9:181:9 | x [element 0] | active_support.rb:181:9:181:23 | call to compact_blank [element] | provenance | | +| active_support.rb:181:9:181:23 | call to compact_blank [element] | active_support.rb:181:5:181:5 | y [element] | provenance | | +| active_support.rb:182:10:182:10 | y [element] | active_support.rb:182:10:182:13 | ...[...] | provenance | | +| active_support.rb:186:5:186:5 | x [element 0] | active_support.rb:187:9:187:9 | x [element 0] | provenance | | +| active_support.rb:186:10:186:18 | call to source | active_support.rb:186:5:186:5 | x [element 0] | provenance | | +| active_support.rb:187:5:187:5 | y [element] | active_support.rb:188:10:188:10 | y [element] | provenance | | +| active_support.rb:187:9:187:9 | x [element 0] | active_support.rb:187:9:187:21 | call to excluding [element] | provenance | | +| active_support.rb:187:9:187:21 | call to excluding [element] | active_support.rb:187:5:187:5 | y [element] | provenance | | +| active_support.rb:188:10:188:10 | y [element] | active_support.rb:188:10:188:13 | ...[...] | provenance | | +| active_support.rb:192:5:192:5 | x [element 0] | active_support.rb:193:9:193:9 | x [element 0] | provenance | | +| active_support.rb:192:10:192:18 | call to source | active_support.rb:192:5:192:5 | x [element 0] | provenance | | +| active_support.rb:193:5:193:5 | y [element] | active_support.rb:194:10:194:10 | y [element] | provenance | | +| active_support.rb:193:9:193:9 | x [element 0] | active_support.rb:193:9:193:19 | call to without [element] | provenance | | +| active_support.rb:193:9:193:19 | call to without [element] | active_support.rb:193:5:193:5 | y [element] | provenance | | +| active_support.rb:194:10:194:10 | y [element] | active_support.rb:194:10:194:13 | ...[...] | provenance | | +| active_support.rb:198:5:198:5 | x [element 0] | active_support.rb:199:9:199:9 | x [element 0] | provenance | | +| active_support.rb:198:10:198:18 | call to source | active_support.rb:198:5:198:5 | x [element 0] | provenance | | +| active_support.rb:199:5:199:5 | y [element] | active_support.rb:200:10:200:10 | y [element] | provenance | | +| active_support.rb:199:9:199:9 | x [element 0] | active_support.rb:199:9:199:37 | call to in_order_of [element] | provenance | | +| active_support.rb:199:9:199:37 | call to in_order_of [element] | active_support.rb:199:5:199:5 | y [element] | provenance | | +| active_support.rb:200:10:200:10 | y [element] | active_support.rb:200:10:200:13 | ...[...] | provenance | | +| active_support.rb:204:5:204:5 | a [element 0] | active_support.rb:205:9:205:9 | a [element 0] | provenance | | +| active_support.rb:204:5:204:5 | a [element 0] | active_support.rb:206:10:206:10 | a [element 0] | provenance | | +| active_support.rb:204:10:204:18 | call to source | active_support.rb:204:5:204:5 | a [element 0] | provenance | | +| active_support.rb:205:5:205:5 | b [element 0] | active_support.rb:208:10:208:10 | b [element 0] | provenance | | +| active_support.rb:205:5:205:5 | b [element] | active_support.rb:208:10:208:10 | b [element] | provenance | | +| active_support.rb:205:5:205:5 | b [element] | active_support.rb:209:10:209:10 | b [element] | provenance | | +| active_support.rb:205:5:205:5 | b [element] | active_support.rb:210:10:210:10 | b [element] | provenance | | +| active_support.rb:205:5:205:5 | b [element] | active_support.rb:211:10:211:10 | b [element] | provenance | | +| active_support.rb:205:9:205:9 | a [element 0] | active_support.rb:205:9:205:41 | call to including [element 0] | provenance | | +| active_support.rb:205:9:205:41 | call to including [element 0] | active_support.rb:205:5:205:5 | b [element 0] | provenance | | +| active_support.rb:205:9:205:41 | call to including [element] | active_support.rb:205:5:205:5 | b [element] | provenance | | +| active_support.rb:205:21:205:29 | call to source | active_support.rb:205:9:205:41 | call to including [element] | provenance | | +| active_support.rb:205:32:205:40 | call to source | active_support.rb:205:9:205:41 | call to including [element] | provenance | | +| active_support.rb:206:10:206:10 | a [element 0] | active_support.rb:206:10:206:13 | ...[...] | provenance | | +| active_support.rb:208:10:208:10 | b [element 0] | active_support.rb:208:10:208:13 | ...[...] | provenance | | +| active_support.rb:208:10:208:10 | b [element] | active_support.rb:208:10:208:13 | ...[...] | provenance | | +| active_support.rb:209:10:209:10 | b [element] | active_support.rb:209:10:209:13 | ...[...] | provenance | | +| active_support.rb:210:10:210:10 | b [element] | active_support.rb:210:10:210:13 | ...[...] | provenance | | +| active_support.rb:211:10:211:10 | b [element] | active_support.rb:211:10:211:13 | ...[...] | provenance | | +| active_support.rb:282:3:282:3 | x | active_support.rb:283:8:283:8 | x | provenance | | +| active_support.rb:282:7:282:16 | call to source | active_support.rb:282:3:282:3 | x | provenance | | +| active_support.rb:283:8:283:8 | x | active_support.rb:283:8:283:17 | call to presence | provenance | | +| active_support.rb:285:3:285:3 | y | active_support.rb:286:8:286:8 | y | provenance | | +| active_support.rb:285:7:285:16 | call to source | active_support.rb:285:3:285:3 | y | provenance | | +| active_support.rb:286:8:286:8 | y | active_support.rb:286:8:286:17 | call to presence | provenance | | +| active_support.rb:290:3:290:3 | x | active_support.rb:291:8:291:8 | x | provenance | | +| active_support.rb:290:7:290:16 | call to source | active_support.rb:290:3:290:3 | x | provenance | | +| active_support.rb:291:8:291:8 | x | active_support.rb:291:8:291:17 | call to deep_dup | provenance | | +| hash_extensions.rb:2:5:2:5 | h [element :a] | hash_extensions.rb:3:9:3:9 | h [element :a] | provenance | | +| hash_extensions.rb:2:14:2:24 | call to source | hash_extensions.rb:2:5:2:5 | h [element :a] | provenance | | +| hash_extensions.rb:3:5:3:5 | x [element] | hash_extensions.rb:4:10:4:10 | x [element] | provenance | | +| hash_extensions.rb:3:9:3:9 | h [element :a] | hash_extensions.rb:3:9:3:24 | call to stringify_keys [element] | provenance | | +| hash_extensions.rb:3:9:3:24 | call to stringify_keys [element] | hash_extensions.rb:3:5:3:5 | x [element] | provenance | | +| hash_extensions.rb:4:10:4:10 | x [element] | hash_extensions.rb:4:10:4:14 | ...[...] | provenance | | +| hash_extensions.rb:10:5:10:5 | h [element :a] | hash_extensions.rb:11:9:11:9 | h [element :a] | provenance | | +| hash_extensions.rb:10:14:10:24 | call to source | hash_extensions.rb:10:5:10:5 | h [element :a] | provenance | | +| hash_extensions.rb:11:5:11:5 | x [element] | hash_extensions.rb:12:10:12:10 | x [element] | provenance | | +| hash_extensions.rb:11:9:11:9 | h [element :a] | hash_extensions.rb:11:9:11:20 | call to to_options [element] | provenance | | +| hash_extensions.rb:11:9:11:20 | call to to_options [element] | hash_extensions.rb:11:5:11:5 | x [element] | provenance | | +| hash_extensions.rb:12:10:12:10 | x [element] | hash_extensions.rb:12:10:12:14 | ...[...] | provenance | | +| hash_extensions.rb:18:5:18:5 | h [element :a] | hash_extensions.rb:19:9:19:9 | h [element :a] | provenance | | +| hash_extensions.rb:18:14:18:24 | call to source | hash_extensions.rb:18:5:18:5 | h [element :a] | provenance | | +| hash_extensions.rb:19:5:19:5 | x [element] | hash_extensions.rb:20:10:20:10 | x [element] | provenance | | +| hash_extensions.rb:19:9:19:9 | h [element :a] | hash_extensions.rb:19:9:19:24 | call to symbolize_keys [element] | provenance | | +| hash_extensions.rb:19:9:19:24 | call to symbolize_keys [element] | hash_extensions.rb:19:5:19:5 | x [element] | provenance | | +| hash_extensions.rb:20:10:20:10 | x [element] | hash_extensions.rb:20:10:20:14 | ...[...] | provenance | | +| hash_extensions.rb:26:5:26:5 | h [element :a] | hash_extensions.rb:27:9:27:9 | h [element :a] | provenance | | +| hash_extensions.rb:26:14:26:24 | call to source | hash_extensions.rb:26:5:26:5 | h [element :a] | provenance | | +| hash_extensions.rb:27:5:27:5 | x [element] | hash_extensions.rb:28:10:28:10 | x [element] | provenance | | +| hash_extensions.rb:27:9:27:9 | h [element :a] | hash_extensions.rb:27:9:27:29 | call to deep_stringify_keys [element] | provenance | | +| hash_extensions.rb:27:9:27:29 | call to deep_stringify_keys [element] | hash_extensions.rb:27:5:27:5 | x [element] | provenance | | +| hash_extensions.rb:28:10:28:10 | x [element] | hash_extensions.rb:28:10:28:14 | ...[...] | provenance | | +| hash_extensions.rb:34:5:34:5 | h [element :a] | hash_extensions.rb:35:9:35:9 | h [element :a] | provenance | | +| hash_extensions.rb:34:14:34:24 | call to source | hash_extensions.rb:34:5:34:5 | h [element :a] | provenance | | +| hash_extensions.rb:35:5:35:5 | x [element] | hash_extensions.rb:36:10:36:10 | x [element] | provenance | | +| hash_extensions.rb:35:9:35:9 | h [element :a] | hash_extensions.rb:35:9:35:29 | call to deep_symbolize_keys [element] | provenance | | +| hash_extensions.rb:35:9:35:29 | call to deep_symbolize_keys [element] | hash_extensions.rb:35:5:35:5 | x [element] | provenance | | +| hash_extensions.rb:36:10:36:10 | x [element] | hash_extensions.rb:36:10:36:14 | ...[...] | provenance | | +| hash_extensions.rb:42:5:42:5 | h [element :a] | hash_extensions.rb:43:9:43:9 | h [element :a] | provenance | | +| hash_extensions.rb:42:14:42:24 | call to source | hash_extensions.rb:42:5:42:5 | h [element :a] | provenance | | +| hash_extensions.rb:43:5:43:5 | x [element] | hash_extensions.rb:44:10:44:10 | x [element] | provenance | | +| hash_extensions.rb:43:9:43:9 | h [element :a] | hash_extensions.rb:43:9:43:33 | call to with_indifferent_access [element] | provenance | | +| hash_extensions.rb:43:9:43:33 | call to with_indifferent_access [element] | hash_extensions.rb:43:5:43:5 | x [element] | provenance | | +| hash_extensions.rb:44:10:44:10 | x [element] | hash_extensions.rb:44:10:44:14 | ...[...] | provenance | | +| hash_extensions.rb:50:5:50:5 | h [element :a] | hash_extensions.rb:51:9:51:9 | h [element :a] | provenance | | +| hash_extensions.rb:50:5:50:5 | h [element :b] | hash_extensions.rb:51:9:51:9 | h [element :b] | provenance | | +| hash_extensions.rb:50:5:50:5 | h [element :d] | hash_extensions.rb:51:9:51:9 | h [element :d] | provenance | | +| hash_extensions.rb:50:14:50:23 | call to taint | hash_extensions.rb:50:5:50:5 | h [element :a] | provenance | | +| hash_extensions.rb:50:29:50:38 | call to taint | hash_extensions.rb:50:5:50:5 | h [element :b] | provenance | | +| hash_extensions.rb:50:52:50:61 | call to taint | hash_extensions.rb:50:5:50:5 | h [element :d] | provenance | | +| hash_extensions.rb:51:5:51:5 | x [element :a] | hash_extensions.rb:58:10:58:10 | x [element :a] | provenance | | +| hash_extensions.rb:51:5:51:5 | x [element :b] | hash_extensions.rb:59:10:59:10 | x [element :b] | provenance | | +| hash_extensions.rb:51:9:51:9 | [post] h [element :d] | hash_extensions.rb:56:10:56:10 | h [element :d] | provenance | | +| hash_extensions.rb:51:9:51:9 | h [element :a] | hash_extensions.rb:51:9:51:29 | call to extract! [element :a] | provenance | | +| hash_extensions.rb:51:9:51:9 | h [element :b] | hash_extensions.rb:51:9:51:29 | call to extract! [element :b] | provenance | | +| hash_extensions.rb:51:9:51:9 | h [element :d] | hash_extensions.rb:51:9:51:9 | [post] h [element :d] | provenance | | +| hash_extensions.rb:51:9:51:29 | call to extract! [element :a] | hash_extensions.rb:51:5:51:5 | x [element :a] | provenance | | +| hash_extensions.rb:51:9:51:29 | call to extract! [element :b] | hash_extensions.rb:51:5:51:5 | x [element :b] | provenance | | +| hash_extensions.rb:56:10:56:10 | h [element :d] | hash_extensions.rb:56:10:56:14 | ...[...] | provenance | | +| hash_extensions.rb:58:10:58:10 | x [element :a] | hash_extensions.rb:58:10:58:14 | ...[...] | provenance | | +| hash_extensions.rb:59:10:59:10 | x [element :b] | hash_extensions.rb:59:10:59:14 | ...[...] | provenance | | +| hash_extensions.rb:67:5:67:10 | values [element 0] | hash_extensions.rb:68:9:68:14 | values [element 0] | provenance | | +| hash_extensions.rb:67:5:67:10 | values [element 1] | hash_extensions.rb:68:9:68:14 | values [element 1] | provenance | | +| hash_extensions.rb:67:5:67:10 | values [element 2] | hash_extensions.rb:68:9:68:14 | values [element 2] | provenance | | +| hash_extensions.rb:67:15:67:25 | call to source | hash_extensions.rb:67:5:67:10 | values [element 0] | provenance | | +| hash_extensions.rb:67:28:67:38 | call to source | hash_extensions.rb:67:5:67:10 | values [element 1] | provenance | | +| hash_extensions.rb:67:41:67:51 | call to source | hash_extensions.rb:67:5:67:10 | values [element 2] | provenance | | +| hash_extensions.rb:68:5:68:5 | h [element] | hash_extensions.rb:73:10:73:10 | h [element] | provenance | | +| hash_extensions.rb:68:5:68:5 | h [element] | hash_extensions.rb:74:10:74:10 | h [element] | provenance | | +| hash_extensions.rb:68:9:68:14 | values [element 0] | hash_extensions.rb:68:9:71:7 | call to index_by [element] | provenance | | +| hash_extensions.rb:68:9:68:14 | values [element 0] | hash_extensions.rb:68:29:68:33 | value | provenance | | +| hash_extensions.rb:68:9:68:14 | values [element 1] | hash_extensions.rb:68:9:71:7 | call to index_by [element] | provenance | | +| hash_extensions.rb:68:9:68:14 | values [element 1] | hash_extensions.rb:68:29:68:33 | value | provenance | | +| hash_extensions.rb:68:9:68:14 | values [element 2] | hash_extensions.rb:68:9:71:7 | call to index_by [element] | provenance | | +| hash_extensions.rb:68:9:68:14 | values [element 2] | hash_extensions.rb:68:29:68:33 | value | provenance | | +| hash_extensions.rb:68:9:71:7 | call to index_by [element] | hash_extensions.rb:68:5:68:5 | h [element] | provenance | | +| hash_extensions.rb:68:29:68:33 | value | hash_extensions.rb:69:14:69:18 | value | provenance | | +| hash_extensions.rb:73:10:73:10 | h [element] | hash_extensions.rb:73:10:73:16 | ...[...] | provenance | | +| hash_extensions.rb:74:10:74:10 | h [element] | hash_extensions.rb:74:10:74:16 | ...[...] | provenance | | +| hash_extensions.rb:80:5:80:10 | values [element 0] | hash_extensions.rb:81:9:81:14 | values [element 0] | provenance | | +| hash_extensions.rb:80:5:80:10 | values [element 1] | hash_extensions.rb:81:9:81:14 | values [element 1] | provenance | | +| hash_extensions.rb:80:5:80:10 | values [element 2] | hash_extensions.rb:81:9:81:14 | values [element 2] | provenance | | +| hash_extensions.rb:80:15:80:25 | call to source | hash_extensions.rb:80:5:80:10 | values [element 0] | provenance | | +| hash_extensions.rb:80:28:80:38 | call to source | hash_extensions.rb:80:5:80:10 | values [element 1] | provenance | | +| hash_extensions.rb:80:41:80:51 | call to source | hash_extensions.rb:80:5:80:10 | values [element 2] | provenance | | +| hash_extensions.rb:81:5:81:5 | h [element] | hash_extensions.rb:86:10:86:10 | h [element] | provenance | | +| hash_extensions.rb:81:5:81:5 | h [element] | hash_extensions.rb:87:10:87:10 | h [element] | provenance | | +| hash_extensions.rb:81:9:81:14 | values [element 0] | hash_extensions.rb:81:31:81:33 | key | provenance | | +| hash_extensions.rb:81:9:81:14 | values [element 1] | hash_extensions.rb:81:31:81:33 | key | provenance | | +| hash_extensions.rb:81:9:81:14 | values [element 2] | hash_extensions.rb:81:31:81:33 | key | provenance | | +| hash_extensions.rb:81:9:84:7 | call to index_with [element] | hash_extensions.rb:81:5:81:5 | h [element] | provenance | | +| hash_extensions.rb:81:31:81:33 | key | hash_extensions.rb:82:14:82:16 | key | provenance | | +| hash_extensions.rb:83:9:83:19 | call to source | hash_extensions.rb:81:9:84:7 | call to index_with [element] | provenance | | +| hash_extensions.rb:86:10:86:10 | h [element] | hash_extensions.rb:86:10:86:16 | ...[...] | provenance | | +| hash_extensions.rb:87:10:87:10 | h [element] | hash_extensions.rb:87:10:87:16 | ...[...] | provenance | | +| hash_extensions.rb:89:5:89:5 | j [element] | hash_extensions.rb:91:10:91:10 | j [element] | provenance | | +| hash_extensions.rb:89:5:89:5 | j [element] | hash_extensions.rb:92:10:92:10 | j [element] | provenance | | +| hash_extensions.rb:89:9:89:38 | call to index_with [element] | hash_extensions.rb:89:5:89:5 | j [element] | provenance | | +| hash_extensions.rb:89:27:89:37 | call to source | hash_extensions.rb:89:9:89:38 | call to index_with [element] | provenance | | +| hash_extensions.rb:91:10:91:10 | j [element] | hash_extensions.rb:91:10:91:16 | ...[...] | provenance | | +| hash_extensions.rb:92:10:92:10 | j [element] | hash_extensions.rb:92:10:92:16 | ...[...] | provenance | | +| hash_extensions.rb:98:5:98:10 | values [element 0, element :id] | hash_extensions.rb:99:10:99:15 | values [element 0, element :id] | provenance | | +| hash_extensions.rb:98:5:98:10 | values [element 0, element :id] | hash_extensions.rb:101:10:101:15 | values [element 0, element :id] | provenance | | +| hash_extensions.rb:98:5:98:10 | values [element 0, element :id] | hash_extensions.rb:104:10:104:15 | values [element 0, element :id] | provenance | | +| hash_extensions.rb:98:5:98:10 | values [element 0, element :name] | hash_extensions.rb:100:10:100:15 | values [element 0, element :name] | provenance | | +| hash_extensions.rb:98:5:98:10 | values [element 0, element :name] | hash_extensions.rb:102:10:102:15 | values [element 0, element :name] | provenance | | +| hash_extensions.rb:98:5:98:10 | values [element 0, element :name] | hash_extensions.rb:103:10:103:15 | values [element 0, element :name] | provenance | | +| hash_extensions.rb:98:21:98:31 | call to source | hash_extensions.rb:98:5:98:10 | values [element 0, element :id] | provenance | | +| hash_extensions.rb:98:40:98:54 | call to source | hash_extensions.rb:98:5:98:10 | values [element 0, element :name] | provenance | | +| hash_extensions.rb:99:10:99:15 | values [element 0, element :id] | hash_extensions.rb:99:10:99:25 | call to pick | provenance | | +| hash_extensions.rb:100:10:100:15 | values [element 0, element :name] | hash_extensions.rb:100:10:100:27 | call to pick | provenance | | +| hash_extensions.rb:101:10:101:15 | values [element 0, element :id] | hash_extensions.rb:101:10:101:32 | call to pick [element 0] | provenance | | +| hash_extensions.rb:101:10:101:32 | call to pick [element 0] | hash_extensions.rb:101:10:101:35 | ...[...] | provenance | | +| hash_extensions.rb:102:10:102:15 | values [element 0, element :name] | hash_extensions.rb:102:10:102:32 | call to pick [element 1] | provenance | | +| hash_extensions.rb:102:10:102:32 | call to pick [element 1] | hash_extensions.rb:102:10:102:35 | ...[...] | provenance | | +| hash_extensions.rb:103:10:103:15 | values [element 0, element :name] | hash_extensions.rb:103:10:103:32 | call to pick [element 0] | provenance | | +| hash_extensions.rb:103:10:103:32 | call to pick [element 0] | hash_extensions.rb:103:10:103:35 | ...[...] | provenance | | +| hash_extensions.rb:104:10:104:15 | values [element 0, element :id] | hash_extensions.rb:104:10:104:32 | call to pick [element 1] | provenance | | +| hash_extensions.rb:104:10:104:32 | call to pick [element 1] | hash_extensions.rb:104:10:104:35 | ...[...] | provenance | | +| hash_extensions.rb:110:5:110:10 | values [element 0, element :id] | hash_extensions.rb:112:10:112:15 | values [element 0, element :id] | provenance | | +| hash_extensions.rb:110:5:110:10 | values [element 0, element :id] | hash_extensions.rb:115:10:115:15 | values [element 0, element :id] | provenance | | +| hash_extensions.rb:110:5:110:10 | values [element 0, element :name] | hash_extensions.rb:111:10:111:15 | values [element 0, element :name] | provenance | | +| hash_extensions.rb:110:5:110:10 | values [element 0, element :name] | hash_extensions.rb:113:10:113:15 | values [element 0, element :name] | provenance | | +| hash_extensions.rb:110:5:110:10 | values [element 0, element :name] | hash_extensions.rb:114:10:114:15 | values [element 0, element :name] | provenance | | +| hash_extensions.rb:110:5:110:10 | values [element 1, element :id] | hash_extensions.rb:112:10:112:15 | values [element 1, element :id] | provenance | | +| hash_extensions.rb:110:5:110:10 | values [element 1, element :id] | hash_extensions.rb:115:10:115:15 | values [element 1, element :id] | provenance | | +| hash_extensions.rb:110:5:110:10 | values [element 1, element :name] | hash_extensions.rb:111:10:111:15 | values [element 1, element :name] | provenance | | +| hash_extensions.rb:110:5:110:10 | values [element 1, element :name] | hash_extensions.rb:113:10:113:15 | values [element 1, element :name] | provenance | | +| hash_extensions.rb:110:5:110:10 | values [element 1, element :name] | hash_extensions.rb:114:10:114:15 | values [element 1, element :name] | provenance | | +| hash_extensions.rb:110:21:110:31 | call to source | hash_extensions.rb:110:5:110:10 | values [element 0, element :id] | provenance | | +| hash_extensions.rb:110:40:110:54 | call to source | hash_extensions.rb:110:5:110:10 | values [element 0, element :name] | provenance | | +| hash_extensions.rb:110:65:110:75 | call to source | hash_extensions.rb:110:5:110:10 | values [element 1, element :id] | provenance | | +| hash_extensions.rb:110:84:110:99 | call to source | hash_extensions.rb:110:5:110:10 | values [element 1, element :name] | provenance | | +| hash_extensions.rb:111:10:111:15 | values [element 0, element :name] | hash_extensions.rb:111:10:111:28 | call to pluck [element] | provenance | | +| hash_extensions.rb:111:10:111:15 | values [element 1, element :name] | hash_extensions.rb:111:10:111:28 | call to pluck [element] | provenance | | +| hash_extensions.rb:111:10:111:28 | call to pluck [element] | hash_extensions.rb:111:10:111:31 | ...[...] | provenance | | +| hash_extensions.rb:112:10:112:15 | values [element 0, element :id] | hash_extensions.rb:112:10:112:33 | call to pluck [element, element 0] | provenance | | +| hash_extensions.rb:112:10:112:15 | values [element 1, element :id] | hash_extensions.rb:112:10:112:33 | call to pluck [element, element 0] | provenance | | +| hash_extensions.rb:112:10:112:33 | call to pluck [element, element 0] | hash_extensions.rb:112:10:112:36 | ...[...] [element 0] | provenance | | +| hash_extensions.rb:112:10:112:36 | ...[...] [element 0] | hash_extensions.rb:112:10:112:39 | ...[...] | provenance | | +| hash_extensions.rb:113:10:113:15 | values [element 0, element :name] | hash_extensions.rb:113:10:113:33 | call to pluck [element, element 1] | provenance | | +| hash_extensions.rb:113:10:113:15 | values [element 1, element :name] | hash_extensions.rb:113:10:113:33 | call to pluck [element, element 1] | provenance | | +| hash_extensions.rb:113:10:113:33 | call to pluck [element, element 1] | hash_extensions.rb:113:10:113:36 | ...[...] [element 1] | provenance | | +| hash_extensions.rb:113:10:113:36 | ...[...] [element 1] | hash_extensions.rb:113:10:113:39 | ...[...] | provenance | | +| hash_extensions.rb:114:10:114:15 | values [element 0, element :name] | hash_extensions.rb:114:10:114:33 | call to pluck [element, element 0] | provenance | | +| hash_extensions.rb:114:10:114:15 | values [element 1, element :name] | hash_extensions.rb:114:10:114:33 | call to pluck [element, element 0] | provenance | | +| hash_extensions.rb:114:10:114:33 | call to pluck [element, element 0] | hash_extensions.rb:114:10:114:36 | ...[...] [element 0] | provenance | | +| hash_extensions.rb:114:10:114:36 | ...[...] [element 0] | hash_extensions.rb:114:10:114:39 | ...[...] | provenance | | +| hash_extensions.rb:115:10:115:15 | values [element 0, element :id] | hash_extensions.rb:115:10:115:33 | call to pluck [element, element 1] | provenance | | +| hash_extensions.rb:115:10:115:15 | values [element 1, element :id] | hash_extensions.rb:115:10:115:33 | call to pluck [element, element 1] | provenance | | +| hash_extensions.rb:115:10:115:33 | call to pluck [element, element 1] | hash_extensions.rb:115:10:115:36 | ...[...] [element 1] | provenance | | +| hash_extensions.rb:115:10:115:36 | ...[...] [element 1] | hash_extensions.rb:115:10:115:39 | ...[...] | provenance | | +| hash_extensions.rb:122:5:122:10 | single [element 0] | hash_extensions.rb:125:10:125:15 | single [element 0] | provenance | | +| hash_extensions.rb:122:15:122:25 | call to source | hash_extensions.rb:122:5:122:10 | single [element 0] | provenance | | +| hash_extensions.rb:123:5:123:9 | multi [element 0] | hash_extensions.rb:126:10:126:14 | multi [element 0] | provenance | | +| hash_extensions.rb:123:14:123:24 | call to source | hash_extensions.rb:123:5:123:9 | multi [element 0] | provenance | | +| hash_extensions.rb:125:10:125:15 | single [element 0] | hash_extensions.rb:125:10:125:20 | call to sole | provenance | | +| hash_extensions.rb:126:10:126:14 | multi [element 0] | hash_extensions.rb:126:10:126:19 | call to sole | provenance | | nodes | active_support.rb:180:5:180:5 | x [element 0] | semmle.label | x [element 0] | | active_support.rb:180:10:180:17 | call to source | semmle.label | call to source | diff --git a/ruby/ql/test/library-tests/frameworks/arel/Arel.expected b/ruby/ql/test/library-tests/frameworks/arel/Arel.expected index 1a8eab7e84f..c2242a7e7d9 100644 --- a/ruby/ql/test/library-tests/frameworks/arel/Arel.expected +++ b/ruby/ql/test/library-tests/frameworks/arel/Arel.expected @@ -1,8 +1,8 @@ testFailures edges -| arel.rb:2:3:2:3 | x | arel.rb:3:17:3:17 | x | -| arel.rb:2:7:2:14 | call to source | arel.rb:2:3:2:3 | x | -| arel.rb:3:17:3:17 | x | arel.rb:3:8:3:18 | call to sql | +| arel.rb:2:3:2:3 | x | arel.rb:3:17:3:17 | x | provenance | | +| arel.rb:2:7:2:14 | call to source | arel.rb:2:3:2:3 | x | provenance | | +| arel.rb:3:17:3:17 | x | arel.rb:3:8:3:18 | call to sql | provenance | | nodes | arel.rb:2:3:2:3 | x | semmle.label | x | | arel.rb:2:7:2:14 | call to source | semmle.label | call to source | diff --git a/ruby/ql/test/library-tests/frameworks/json/JsonDataFlow.expected b/ruby/ql/test/library-tests/frameworks/json/JsonDataFlow.expected index b4ba9ce7374..a12400cf123 100644 --- a/ruby/ql/test/library-tests/frameworks/json/JsonDataFlow.expected +++ b/ruby/ql/test/library-tests/frameworks/json/JsonDataFlow.expected @@ -1,15 +1,15 @@ testFailures edges -| json.rb:1:17:1:26 | call to source | json.rb:1:6:1:27 | call to parse | -| json.rb:2:18:2:27 | call to source | json.rb:2:6:2:28 | call to parse! | -| json.rb:3:16:3:25 | call to source | json.rb:3:6:3:26 | call to load | -| json.rb:4:19:4:28 | call to source | json.rb:4:6:4:29 | call to restore | -| json.rb:6:20:6:29 | call to source | json.rb:6:6:6:30 | call to generate | -| json.rb:7:25:7:34 | call to source | json.rb:7:6:7:35 | call to fast_generate | -| json.rb:8:27:8:36 | call to source | json.rb:8:6:8:37 | call to pretty_generate | -| json.rb:9:16:9:25 | call to source | json.rb:9:6:9:26 | call to dump | -| json.rb:10:19:10:28 | call to source | json.rb:10:6:10:29 | call to unparse | -| json.rb:11:24:11:33 | call to source | json.rb:11:6:11:34 | call to fast_unparse | +| json.rb:1:17:1:26 | call to source | json.rb:1:6:1:27 | call to parse | provenance | | +| json.rb:2:18:2:27 | call to source | json.rb:2:6:2:28 | call to parse! | provenance | | +| json.rb:3:16:3:25 | call to source | json.rb:3:6:3:26 | call to load | provenance | | +| json.rb:4:19:4:28 | call to source | json.rb:4:6:4:29 | call to restore | provenance | | +| json.rb:6:20:6:29 | call to source | json.rb:6:6:6:30 | call to generate | provenance | | +| json.rb:7:25:7:34 | call to source | json.rb:7:6:7:35 | call to fast_generate | provenance | | +| json.rb:8:27:8:36 | call to source | json.rb:8:6:8:37 | call to pretty_generate | provenance | | +| json.rb:9:16:9:25 | call to source | json.rb:9:6:9:26 | call to dump | provenance | | +| json.rb:10:19:10:28 | call to source | json.rb:10:6:10:29 | call to unparse | provenance | | +| json.rb:11:24:11:33 | call to source | json.rb:11:6:11:34 | call to fast_unparse | provenance | | nodes | json.rb:1:6:1:27 | call to parse | semmle.label | call to parse | | json.rb:1:17:1:26 | call to source | semmle.label | call to source | diff --git a/ruby/ql/test/library-tests/frameworks/sinatra/Flow.expected b/ruby/ql/test/library-tests/frameworks/sinatra/Flow.expected index 1a3665a31c1..baad7a63b8d 100644 --- a/ruby/ql/test/library-tests/frameworks/sinatra/Flow.expected +++ b/ruby/ql/test/library-tests/frameworks/sinatra/Flow.expected @@ -1,11 +1,11 @@ testFailures | views/index.erb:2:10:2:12 | call to foo | Unexpected result: hasTaintFlow= | edges -| app.rb:75:5:75:8 | [post] self [@foo] | app.rb:76:32:76:35 | self [@foo] | -| app.rb:75:12:75:17 | call to params | app.rb:75:12:75:24 | ...[...] | -| app.rb:75:12:75:24 | ...[...] | app.rb:75:5:75:8 | [post] self [@foo] | -| app.rb:76:32:76:35 | @foo | views/index.erb:2:10:2:12 | call to foo | -| app.rb:76:32:76:35 | self [@foo] | app.rb:76:32:76:35 | @foo | +| app.rb:75:5:75:8 | [post] self [@foo] | app.rb:76:32:76:35 | self [@foo] | provenance | | +| app.rb:75:12:75:17 | call to params | app.rb:75:12:75:24 | ...[...] | provenance | | +| app.rb:75:12:75:24 | ...[...] | app.rb:75:5:75:8 | [post] self [@foo] | provenance | | +| app.rb:76:32:76:35 | @foo | views/index.erb:2:10:2:12 | call to foo | provenance | | +| app.rb:76:32:76:35 | self [@foo] | app.rb:76:32:76:35 | @foo | provenance | | nodes | app.rb:75:5:75:8 | [post] self [@foo] | semmle.label | [post] self [@foo] | | app.rb:75:12:75:17 | call to params | semmle.label | call to params | diff --git a/ruby/ql/test/query-tests/experimental/ImproperLdapAuth/ImproperLdapAuth.expected b/ruby/ql/test/query-tests/experimental/ImproperLdapAuth/ImproperLdapAuth.expected index 17c9a009cbd..1b0e8d4fbb3 100644 --- a/ruby/ql/test/query-tests/experimental/ImproperLdapAuth/ImproperLdapAuth.expected +++ b/ruby/ql/test/query-tests/experimental/ImproperLdapAuth/ImproperLdapAuth.expected @@ -1,10 +1,10 @@ edges -| ImproperLdapAuth.rb:5:5:5:8 | pass | ImproperLdapAuth.rb:15:23:15:26 | pass | -| ImproperLdapAuth.rb:5:12:5:17 | call to params | ImproperLdapAuth.rb:5:12:5:24 | ...[...] | -| ImproperLdapAuth.rb:5:12:5:24 | ...[...] | ImproperLdapAuth.rb:5:5:5:8 | pass | -| ImproperLdapAuth.rb:24:5:24:8 | pass | ImproperLdapAuth.rb:31:24:31:27 | pass | -| ImproperLdapAuth.rb:24:12:24:17 | call to params | ImproperLdapAuth.rb:24:12:24:24 | ...[...] | -| ImproperLdapAuth.rb:24:12:24:24 | ...[...] | ImproperLdapAuth.rb:24:5:24:8 | pass | +| ImproperLdapAuth.rb:5:5:5:8 | pass | ImproperLdapAuth.rb:15:23:15:26 | pass | provenance | | +| ImproperLdapAuth.rb:5:12:5:17 | call to params | ImproperLdapAuth.rb:5:12:5:24 | ...[...] | provenance | | +| ImproperLdapAuth.rb:5:12:5:24 | ...[...] | ImproperLdapAuth.rb:5:5:5:8 | pass | provenance | | +| ImproperLdapAuth.rb:24:5:24:8 | pass | ImproperLdapAuth.rb:31:24:31:27 | pass | provenance | | +| ImproperLdapAuth.rb:24:12:24:17 | call to params | ImproperLdapAuth.rb:24:12:24:24 | ...[...] | provenance | | +| ImproperLdapAuth.rb:24:12:24:24 | ...[...] | ImproperLdapAuth.rb:24:5:24:8 | pass | provenance | | nodes | ImproperLdapAuth.rb:5:5:5:8 | pass | semmle.label | pass | | ImproperLdapAuth.rb:5:12:5:17 | call to params | semmle.label | call to params | diff --git a/ruby/ql/test/query-tests/experimental/LdapInjection/Ldapinjection.expected b/ruby/ql/test/query-tests/experimental/LdapInjection/Ldapinjection.expected index 2c2aa193d77..9eddf82c15c 100644 --- a/ruby/ql/test/query-tests/experimental/LdapInjection/Ldapinjection.expected +++ b/ruby/ql/test/query-tests/experimental/LdapInjection/Ldapinjection.expected @@ -1,16 +1,16 @@ edges -| LdapInjection.rb:5:5:5:6 | dc | LdapInjection.rb:25:23:25:49 | "ou=people,dc=#{...},dc=com" | -| LdapInjection.rb:5:10:5:15 | call to params | LdapInjection.rb:5:10:5:20 | ...[...] | -| LdapInjection.rb:5:10:5:20 | ...[...] | LdapInjection.rb:5:5:5:6 | dc | -| LdapInjection.rb:9:5:9:8 | name | LdapInjection.rb:29:62:29:73 | "cn=#{...}" | -| LdapInjection.rb:9:5:9:8 | name | LdapInjection.rb:33:88:33:91 | name | -| LdapInjection.rb:9:12:9:17 | call to params | LdapInjection.rb:9:12:9:29 | ...[...] | -| LdapInjection.rb:9:12:9:29 | ...[...] | LdapInjection.rb:9:5:9:8 | name | -| LdapInjection.rb:33:88:33:91 | name | LdapInjection.rb:33:87:33:92 | call to [] | -| LdapInjection.rb:33:88:33:91 | name | LdapInjection.rb:37:41:37:44 | name | -| LdapInjection.rb:37:5:37:10 | filter | LdapInjection.rb:38:62:38:67 | filter | -| LdapInjection.rb:37:14:37:45 | call to eq | LdapInjection.rb:37:5:37:10 | filter | -| LdapInjection.rb:37:41:37:44 | name | LdapInjection.rb:37:14:37:45 | call to eq | +| LdapInjection.rb:5:5:5:6 | dc | LdapInjection.rb:25:23:25:49 | "ou=people,dc=#{...},dc=com" | provenance | | +| LdapInjection.rb:5:10:5:15 | call to params | LdapInjection.rb:5:10:5:20 | ...[...] | provenance | | +| LdapInjection.rb:5:10:5:20 | ...[...] | LdapInjection.rb:5:5:5:6 | dc | provenance | | +| LdapInjection.rb:9:5:9:8 | name | LdapInjection.rb:29:62:29:73 | "cn=#{...}" | provenance | | +| LdapInjection.rb:9:5:9:8 | name | LdapInjection.rb:33:88:33:91 | name | provenance | | +| LdapInjection.rb:9:12:9:17 | call to params | LdapInjection.rb:9:12:9:29 | ...[...] | provenance | | +| LdapInjection.rb:9:12:9:29 | ...[...] | LdapInjection.rb:9:5:9:8 | name | provenance | | +| LdapInjection.rb:33:88:33:91 | name | LdapInjection.rb:33:87:33:92 | call to [] | provenance | | +| LdapInjection.rb:33:88:33:91 | name | LdapInjection.rb:37:41:37:44 | name | provenance | | +| LdapInjection.rb:37:5:37:10 | filter | LdapInjection.rb:38:62:38:67 | filter | provenance | | +| LdapInjection.rb:37:14:37:45 | call to eq | LdapInjection.rb:37:5:37:10 | filter | provenance | | +| LdapInjection.rb:37:41:37:44 | name | LdapInjection.rb:37:14:37:45 | call to eq | provenance | | nodes | LdapInjection.rb:5:5:5:6 | dc | semmle.label | dc | | LdapInjection.rb:5:10:5:15 | call to params | semmle.label | call to params | diff --git a/ruby/ql/test/query-tests/experimental/TemplateInjection/TemplateInjection.expected b/ruby/ql/test/query-tests/experimental/TemplateInjection/TemplateInjection.expected index 103dc82bda4..bf51b434062 100644 --- a/ruby/ql/test/query-tests/experimental/TemplateInjection/TemplateInjection.expected +++ b/ruby/ql/test/query-tests/experimental/TemplateInjection/TemplateInjection.expected @@ -1,21 +1,21 @@ edges -| ErbInjection.rb:5:5:5:8 | name | ErbInjection.rb:8:5:8:12 | bad_text | -| ErbInjection.rb:5:5:5:8 | name | ErbInjection.rb:11:11:11:14 | name | -| ErbInjection.rb:5:12:5:17 | call to params | ErbInjection.rb:5:12:5:24 | ...[...] | -| ErbInjection.rb:5:12:5:24 | ...[...] | ErbInjection.rb:5:5:5:8 | name | -| ErbInjection.rb:8:5:8:12 | bad_text | ErbInjection.rb:15:24:15:31 | bad_text | -| ErbInjection.rb:8:5:8:12 | bad_text | ErbInjection.rb:19:20:19:27 | bad_text | -| ErbInjection.rb:8:16:11:14 | ... % ... | ErbInjection.rb:8:5:8:12 | bad_text | -| ErbInjection.rb:11:11:11:14 | name | ErbInjection.rb:8:16:11:14 | ... % ... | -| SlimInjection.rb:5:5:5:8 | name | SlimInjection.rb:11:11:11:14 | name | -| SlimInjection.rb:5:5:5:8 | name | SlimInjection.rb:14:23:14:34 | { ... } [captured bad_text] | -| SlimInjection.rb:5:5:5:8 | name | SlimInjection.rb:23:23:23:35 | { ... } [captured bad2_text] | -| SlimInjection.rb:5:12:5:17 | call to params | SlimInjection.rb:5:12:5:24 | ...[...] | -| SlimInjection.rb:5:12:5:24 | ...[...] | SlimInjection.rb:5:5:5:8 | name | -| SlimInjection.rb:8:16:11:14 | ... % ... | SlimInjection.rb:14:23:14:34 | { ... } [captured bad_text] | -| SlimInjection.rb:11:11:11:14 | name | SlimInjection.rb:8:16:11:14 | ... % ... | -| SlimInjection.rb:14:23:14:34 | { ... } [captured bad_text] | SlimInjection.rb:14:25:14:32 | bad_text | -| SlimInjection.rb:23:23:23:35 | { ... } [captured bad2_text] | SlimInjection.rb:23:25:23:33 | bad2_text | +| ErbInjection.rb:5:5:5:8 | name | ErbInjection.rb:8:5:8:12 | bad_text | provenance | | +| ErbInjection.rb:5:5:5:8 | name | ErbInjection.rb:11:11:11:14 | name | provenance | | +| ErbInjection.rb:5:12:5:17 | call to params | ErbInjection.rb:5:12:5:24 | ...[...] | provenance | | +| ErbInjection.rb:5:12:5:24 | ...[...] | ErbInjection.rb:5:5:5:8 | name | provenance | | +| ErbInjection.rb:8:5:8:12 | bad_text | ErbInjection.rb:15:24:15:31 | bad_text | provenance | | +| ErbInjection.rb:8:5:8:12 | bad_text | ErbInjection.rb:19:20:19:27 | bad_text | provenance | | +| ErbInjection.rb:8:16:11:14 | ... % ... | ErbInjection.rb:8:5:8:12 | bad_text | provenance | | +| ErbInjection.rb:11:11:11:14 | name | ErbInjection.rb:8:16:11:14 | ... % ... | provenance | | +| SlimInjection.rb:5:5:5:8 | name | SlimInjection.rb:11:11:11:14 | name | provenance | | +| SlimInjection.rb:5:5:5:8 | name | SlimInjection.rb:14:23:14:34 | { ... } [captured bad_text] | provenance | | +| SlimInjection.rb:5:5:5:8 | name | SlimInjection.rb:23:23:23:35 | { ... } [captured bad2_text] | provenance | | +| SlimInjection.rb:5:12:5:17 | call to params | SlimInjection.rb:5:12:5:24 | ...[...] | provenance | | +| SlimInjection.rb:5:12:5:24 | ...[...] | SlimInjection.rb:5:5:5:8 | name | provenance | | +| SlimInjection.rb:8:16:11:14 | ... % ... | SlimInjection.rb:14:23:14:34 | { ... } [captured bad_text] | provenance | | +| SlimInjection.rb:11:11:11:14 | name | SlimInjection.rb:8:16:11:14 | ... % ... | provenance | | +| SlimInjection.rb:14:23:14:34 | { ... } [captured bad_text] | SlimInjection.rb:14:25:14:32 | bad_text | provenance | | +| SlimInjection.rb:23:23:23:35 | { ... } [captured bad2_text] | SlimInjection.rb:23:25:23:33 | bad2_text | provenance | | nodes | ErbInjection.rb:5:5:5:8 | name | semmle.label | name | | ErbInjection.rb:5:12:5:17 | call to params | semmle.label | call to params | diff --git a/ruby/ql/test/query-tests/experimental/XPathInjection/XPathInjection.expected b/ruby/ql/test/query-tests/experimental/XPathInjection/XPathInjection.expected index 789eef9f4fc..d6c6f0b34bc 100644 --- a/ruby/ql/test/query-tests/experimental/XPathInjection/XPathInjection.expected +++ b/ruby/ql/test/query-tests/experimental/XPathInjection/XPathInjection.expected @@ -1,20 +1,20 @@ edges -| LibxmlInjection.rb:5:5:5:8 | name | LibxmlInjection.rb:21:31:21:41 | "//#{...}" | -| LibxmlInjection.rb:5:5:5:8 | name | LibxmlInjection.rb:27:25:27:35 | "//#{...}" | -| LibxmlInjection.rb:5:12:5:17 | call to params | LibxmlInjection.rb:5:12:5:29 | ...[...] | -| LibxmlInjection.rb:5:12:5:29 | ...[...] | LibxmlInjection.rb:5:5:5:8 | name | -| NokogiriInjection.rb:5:5:5:8 | name | NokogiriInjection.rb:21:23:21:33 | "//#{...}" | -| NokogiriInjection.rb:5:5:5:8 | name | NokogiriInjection.rb:27:26:27:36 | "//#{...}" | -| NokogiriInjection.rb:5:5:5:8 | name | NokogiriInjection.rb:33:29:33:39 | "//#{...}" | -| NokogiriInjection.rb:5:5:5:8 | name | NokogiriInjection.rb:41:15:41:25 | "//#{...}" | -| NokogiriInjection.rb:5:5:5:8 | name | NokogiriInjection.rb:51:16:51:26 | "//#{...}" | -| NokogiriInjection.rb:5:12:5:17 | call to params | NokogiriInjection.rb:5:12:5:29 | ...[...] | -| NokogiriInjection.rb:5:12:5:29 | ...[...] | NokogiriInjection.rb:5:5:5:8 | name | -| RexmlInjection.rb:5:5:5:8 | name | RexmlInjection.rb:21:40:21:50 | "//#{...}" | -| RexmlInjection.rb:5:5:5:8 | name | RexmlInjection.rb:27:40:27:50 | "//#{...}" | -| RexmlInjection.rb:5:5:5:8 | name | RexmlInjection.rb:35:28:35:38 | "//#{...}" | -| RexmlInjection.rb:5:12:5:17 | call to params | RexmlInjection.rb:5:12:5:29 | ...[...] | -| RexmlInjection.rb:5:12:5:29 | ...[...] | RexmlInjection.rb:5:5:5:8 | name | +| LibxmlInjection.rb:5:5:5:8 | name | LibxmlInjection.rb:21:31:21:41 | "//#{...}" | provenance | | +| LibxmlInjection.rb:5:5:5:8 | name | LibxmlInjection.rb:27:25:27:35 | "//#{...}" | provenance | | +| LibxmlInjection.rb:5:12:5:17 | call to params | LibxmlInjection.rb:5:12:5:29 | ...[...] | provenance | | +| LibxmlInjection.rb:5:12:5:29 | ...[...] | LibxmlInjection.rb:5:5:5:8 | name | provenance | | +| NokogiriInjection.rb:5:5:5:8 | name | NokogiriInjection.rb:21:23:21:33 | "//#{...}" | provenance | | +| NokogiriInjection.rb:5:5:5:8 | name | NokogiriInjection.rb:27:26:27:36 | "//#{...}" | provenance | | +| NokogiriInjection.rb:5:5:5:8 | name | NokogiriInjection.rb:33:29:33:39 | "//#{...}" | provenance | | +| NokogiriInjection.rb:5:5:5:8 | name | NokogiriInjection.rb:41:15:41:25 | "//#{...}" | provenance | | +| NokogiriInjection.rb:5:5:5:8 | name | NokogiriInjection.rb:51:16:51:26 | "//#{...}" | provenance | | +| NokogiriInjection.rb:5:12:5:17 | call to params | NokogiriInjection.rb:5:12:5:29 | ...[...] | provenance | | +| NokogiriInjection.rb:5:12:5:29 | ...[...] | NokogiriInjection.rb:5:5:5:8 | name | provenance | | +| RexmlInjection.rb:5:5:5:8 | name | RexmlInjection.rb:21:40:21:50 | "//#{...}" | provenance | | +| RexmlInjection.rb:5:5:5:8 | name | RexmlInjection.rb:27:40:27:50 | "//#{...}" | provenance | | +| RexmlInjection.rb:5:5:5:8 | name | RexmlInjection.rb:35:28:35:38 | "//#{...}" | provenance | | +| RexmlInjection.rb:5:12:5:17 | call to params | RexmlInjection.rb:5:12:5:29 | ...[...] | provenance | | +| RexmlInjection.rb:5:12:5:29 | ...[...] | RexmlInjection.rb:5:5:5:8 | name | provenance | | nodes | LibxmlInjection.rb:5:5:5:8 | name | semmle.label | name | | LibxmlInjection.rb:5:12:5:17 | call to params | semmle.label | call to params | diff --git a/ruby/ql/test/query-tests/experimental/cwe-022-ZipSlip/ZipSlip.expected b/ruby/ql/test/query-tests/experimental/cwe-022-ZipSlip/ZipSlip.expected index 0c8be5c2463..b7cfcdc42a3 100644 --- a/ruby/ql/test/query-tests/experimental/cwe-022-ZipSlip/ZipSlip.expected +++ b/ruby/ql/test/query-tests/experimental/cwe-022-ZipSlip/ZipSlip.expected @@ -1,36 +1,36 @@ edges -| zip_slip.rb:8:5:8:11 | tarfile | zip_slip.rb:9:5:9:11 | tarfile | -| zip_slip.rb:8:15:8:54 | call to new | zip_slip.rb:8:5:8:11 | tarfile | -| zip_slip.rb:9:5:9:11 | tarfile | zip_slip.rb:9:22:9:26 | entry | -| zip_slip.rb:9:22:9:26 | entry | zip_slip.rb:10:19:10:23 | entry | -| zip_slip.rb:10:19:10:23 | entry | zip_slip.rb:10:19:10:33 | call to full_name | -| zip_slip.rb:20:50:20:56 | tarfile | zip_slip.rb:21:7:21:13 | tarfile | -| zip_slip.rb:21:7:21:13 | tarfile | zip_slip.rb:21:30:21:34 | entry | -| zip_slip.rb:21:30:21:34 | entry | zip_slip.rb:22:21:22:25 | entry | -| zip_slip.rb:22:21:22:25 | entry | zip_slip.rb:22:21:22:35 | call to full_name | -| zip_slip.rb:46:5:46:24 | call to open | zip_slip.rb:46:35:46:39 | entry | -| zip_slip.rb:46:35:46:39 | entry | zip_slip.rb:47:17:47:21 | entry | -| zip_slip.rb:47:17:47:21 | entry | zip_slip.rb:47:17:47:26 | call to name | -| zip_slip.rb:56:30:56:37 | zip_file | zip_slip.rb:57:7:57:14 | zip_file | -| zip_slip.rb:57:7:57:14 | zip_file | zip_slip.rb:57:25:57:29 | entry | -| zip_slip.rb:57:25:57:29 | entry | zip_slip.rb:58:19:58:23 | entry | -| zip_slip.rb:58:19:58:23 | entry | zip_slip.rb:58:19:58:28 | call to name | -| zip_slip.rb:90:5:90:8 | gzip | zip_slip.rb:91:11:91:14 | gzip | -| zip_slip.rb:90:12:90:54 | call to open | zip_slip.rb:90:5:90:8 | gzip | -| zip_slip.rb:91:11:91:14 | gzip | zip_slip.rb:97:42:97:56 | compressed_file | -| zip_slip.rb:97:42:97:56 | compressed_file | zip_slip.rb:98:7:98:21 | compressed_file | -| zip_slip.rb:98:7:98:21 | compressed_file | zip_slip.rb:98:32:98:36 | entry | -| zip_slip.rb:98:32:98:36 | entry | zip_slip.rb:99:22:99:26 | entry | -| zip_slip.rb:99:9:99:18 | entry_path | zip_slip.rb:100:21:100:30 | entry_path | -| zip_slip.rb:99:22:99:26 | entry | zip_slip.rb:99:22:99:36 | call to full_name | -| zip_slip.rb:99:22:99:36 | call to full_name | zip_slip.rb:99:9:99:18 | entry_path | -| zip_slip.rb:123:7:123:8 | gz | zip_slip.rb:124:7:124:8 | gz | -| zip_slip.rb:123:12:123:34 | call to new | zip_slip.rb:123:7:123:8 | gz | -| zip_slip.rb:124:7:124:8 | gz | zip_slip.rb:124:19:124:23 | entry | -| zip_slip.rb:124:19:124:23 | entry | zip_slip.rb:125:22:125:26 | entry | -| zip_slip.rb:125:9:125:18 | entry_path | zip_slip.rb:126:21:126:30 | entry_path | -| zip_slip.rb:125:22:125:26 | entry | zip_slip.rb:125:22:125:36 | call to full_name | -| zip_slip.rb:125:22:125:36 | call to full_name | zip_slip.rb:125:9:125:18 | entry_path | +| zip_slip.rb:8:5:8:11 | tarfile | zip_slip.rb:9:5:9:11 | tarfile | provenance | | +| zip_slip.rb:8:15:8:54 | call to new | zip_slip.rb:8:5:8:11 | tarfile | provenance | | +| zip_slip.rb:9:5:9:11 | tarfile | zip_slip.rb:9:22:9:26 | entry | provenance | | +| zip_slip.rb:9:22:9:26 | entry | zip_slip.rb:10:19:10:23 | entry | provenance | | +| zip_slip.rb:10:19:10:23 | entry | zip_slip.rb:10:19:10:33 | call to full_name | provenance | | +| zip_slip.rb:20:50:20:56 | tarfile | zip_slip.rb:21:7:21:13 | tarfile | provenance | | +| zip_slip.rb:21:7:21:13 | tarfile | zip_slip.rb:21:30:21:34 | entry | provenance | | +| zip_slip.rb:21:30:21:34 | entry | zip_slip.rb:22:21:22:25 | entry | provenance | | +| zip_slip.rb:22:21:22:25 | entry | zip_slip.rb:22:21:22:35 | call to full_name | provenance | | +| zip_slip.rb:46:5:46:24 | call to open | zip_slip.rb:46:35:46:39 | entry | provenance | | +| zip_slip.rb:46:35:46:39 | entry | zip_slip.rb:47:17:47:21 | entry | provenance | | +| zip_slip.rb:47:17:47:21 | entry | zip_slip.rb:47:17:47:26 | call to name | provenance | | +| zip_slip.rb:56:30:56:37 | zip_file | zip_slip.rb:57:7:57:14 | zip_file | provenance | | +| zip_slip.rb:57:7:57:14 | zip_file | zip_slip.rb:57:25:57:29 | entry | provenance | | +| zip_slip.rb:57:25:57:29 | entry | zip_slip.rb:58:19:58:23 | entry | provenance | | +| zip_slip.rb:58:19:58:23 | entry | zip_slip.rb:58:19:58:28 | call to name | provenance | | +| zip_slip.rb:90:5:90:8 | gzip | zip_slip.rb:91:11:91:14 | gzip | provenance | | +| zip_slip.rb:90:12:90:54 | call to open | zip_slip.rb:90:5:90:8 | gzip | provenance | | +| zip_slip.rb:91:11:91:14 | gzip | zip_slip.rb:97:42:97:56 | compressed_file | provenance | | +| zip_slip.rb:97:42:97:56 | compressed_file | zip_slip.rb:98:7:98:21 | compressed_file | provenance | | +| zip_slip.rb:98:7:98:21 | compressed_file | zip_slip.rb:98:32:98:36 | entry | provenance | | +| zip_slip.rb:98:32:98:36 | entry | zip_slip.rb:99:22:99:26 | entry | provenance | | +| zip_slip.rb:99:9:99:18 | entry_path | zip_slip.rb:100:21:100:30 | entry_path | provenance | | +| zip_slip.rb:99:22:99:26 | entry | zip_slip.rb:99:22:99:36 | call to full_name | provenance | | +| zip_slip.rb:99:22:99:36 | call to full_name | zip_slip.rb:99:9:99:18 | entry_path | provenance | | +| zip_slip.rb:123:7:123:8 | gz | zip_slip.rb:124:7:124:8 | gz | provenance | | +| zip_slip.rb:123:12:123:34 | call to new | zip_slip.rb:123:7:123:8 | gz | provenance | | +| zip_slip.rb:124:7:124:8 | gz | zip_slip.rb:124:19:124:23 | entry | provenance | | +| zip_slip.rb:124:19:124:23 | entry | zip_slip.rb:125:22:125:26 | entry | provenance | | +| zip_slip.rb:125:9:125:18 | entry_path | zip_slip.rb:126:21:126:30 | entry_path | provenance | | +| zip_slip.rb:125:22:125:26 | entry | zip_slip.rb:125:22:125:36 | call to full_name | provenance | | +| zip_slip.rb:125:22:125:36 | call to full_name | zip_slip.rb:125:9:125:18 | entry_path | provenance | | nodes | zip_slip.rb:8:5:8:11 | tarfile | semmle.label | tarfile | | zip_slip.rb:8:15:8:54 | call to new | semmle.label | call to new | diff --git a/ruby/ql/test/query-tests/experimental/cwe-176/UnicodeBypassValidation.expected b/ruby/ql/test/query-tests/experimental/cwe-176/UnicodeBypassValidation.expected index b79057a8479..da4709abe45 100644 --- a/ruby/ql/test/query-tests/experimental/cwe-176/UnicodeBypassValidation.expected +++ b/ruby/ql/test/query-tests/experimental/cwe-176/UnicodeBypassValidation.expected @@ -1,34 +1,34 @@ edges -| unicode_normalization.rb:7:5:7:17 | unicode_input | unicode_normalization.rb:8:23:8:35 | unicode_input | -| unicode_normalization.rb:7:5:7:17 | unicode_input | unicode_normalization.rb:9:22:9:34 | unicode_input | -| unicode_normalization.rb:7:21:7:26 | call to params | unicode_normalization.rb:7:21:7:42 | ...[...] | -| unicode_normalization.rb:7:21:7:42 | ...[...] | unicode_normalization.rb:7:5:7:17 | unicode_input | -| unicode_normalization.rb:15:5:15:17 | unicode_input | unicode_normalization.rb:16:27:16:39 | unicode_input | -| unicode_normalization.rb:15:5:15:17 | unicode_input | unicode_normalization.rb:16:27:16:39 | unicode_input | -| unicode_normalization.rb:15:21:15:26 | call to params | unicode_normalization.rb:15:21:15:42 | ...[...] | -| unicode_normalization.rb:15:21:15:26 | call to params | unicode_normalization.rb:15:21:15:42 | ...[...] | -| unicode_normalization.rb:15:21:15:42 | ...[...] | unicode_normalization.rb:15:5:15:17 | unicode_input | -| unicode_normalization.rb:15:21:15:42 | ...[...] | unicode_normalization.rb:15:5:15:17 | unicode_input | -| unicode_normalization.rb:16:5:16:23 | unicode_input_manip | unicode_normalization.rb:17:23:17:41 | unicode_input_manip | -| unicode_normalization.rb:16:5:16:23 | unicode_input_manip | unicode_normalization.rb:18:22:18:40 | unicode_input_manip | -| unicode_normalization.rb:16:27:16:39 | unicode_input | unicode_normalization.rb:16:27:16:59 | call to sub | -| unicode_normalization.rb:16:27:16:39 | unicode_input | unicode_normalization.rb:16:27:16:59 | call to sub | -| unicode_normalization.rb:16:27:16:59 | call to sub | unicode_normalization.rb:16:5:16:23 | unicode_input_manip | -| unicode_normalization.rb:24:5:24:17 | unicode_input | unicode_normalization.rb:25:37:25:49 | unicode_input | -| unicode_normalization.rb:24:21:24:26 | call to params | unicode_normalization.rb:24:21:24:42 | ...[...] | -| unicode_normalization.rb:24:21:24:42 | ...[...] | unicode_normalization.rb:24:5:24:17 | unicode_input | -| unicode_normalization.rb:25:5:25:21 | unicode_html_safe | unicode_normalization.rb:26:23:26:39 | unicode_html_safe | -| unicode_normalization.rb:25:5:25:21 | unicode_html_safe | unicode_normalization.rb:27:22:27:38 | unicode_html_safe | -| unicode_normalization.rb:25:25:25:50 | call to html_escape | unicode_normalization.rb:25:5:25:21 | unicode_html_safe | -| unicode_normalization.rb:25:37:25:49 | unicode_input | unicode_normalization.rb:25:25:25:50 | call to html_escape | -| unicode_normalization.rb:33:5:33:17 | unicode_input | unicode_normalization.rb:34:40:34:52 | unicode_input | -| unicode_normalization.rb:33:21:33:26 | call to params | unicode_normalization.rb:33:21:33:42 | ...[...] | -| unicode_normalization.rb:33:21:33:42 | ...[...] | unicode_normalization.rb:33:5:33:17 | unicode_input | -| unicode_normalization.rb:34:5:34:21 | unicode_html_safe | unicode_normalization.rb:35:23:35:39 | unicode_html_safe | -| unicode_normalization.rb:34:5:34:21 | unicode_html_safe | unicode_normalization.rb:36:22:36:38 | unicode_html_safe | -| unicode_normalization.rb:34:25:34:53 | call to escapeHTML | unicode_normalization.rb:34:25:34:63 | call to html_safe | -| unicode_normalization.rb:34:25:34:63 | call to html_safe | unicode_normalization.rb:34:5:34:21 | unicode_html_safe | -| unicode_normalization.rb:34:40:34:52 | unicode_input | unicode_normalization.rb:34:25:34:53 | call to escapeHTML | +| unicode_normalization.rb:7:5:7:17 | unicode_input | unicode_normalization.rb:8:23:8:35 | unicode_input | provenance | | +| unicode_normalization.rb:7:5:7:17 | unicode_input | unicode_normalization.rb:9:22:9:34 | unicode_input | provenance | | +| unicode_normalization.rb:7:21:7:26 | call to params | unicode_normalization.rb:7:21:7:42 | ...[...] | provenance | | +| unicode_normalization.rb:7:21:7:42 | ...[...] | unicode_normalization.rb:7:5:7:17 | unicode_input | provenance | | +| unicode_normalization.rb:15:5:15:17 | unicode_input | unicode_normalization.rb:16:27:16:39 | unicode_input | provenance | | +| unicode_normalization.rb:15:5:15:17 | unicode_input | unicode_normalization.rb:16:27:16:39 | unicode_input | provenance | | +| unicode_normalization.rb:15:21:15:26 | call to params | unicode_normalization.rb:15:21:15:42 | ...[...] | provenance | | +| unicode_normalization.rb:15:21:15:26 | call to params | unicode_normalization.rb:15:21:15:42 | ...[...] | provenance | | +| unicode_normalization.rb:15:21:15:42 | ...[...] | unicode_normalization.rb:15:5:15:17 | unicode_input | provenance | | +| unicode_normalization.rb:15:21:15:42 | ...[...] | unicode_normalization.rb:15:5:15:17 | unicode_input | provenance | | +| unicode_normalization.rb:16:5:16:23 | unicode_input_manip | unicode_normalization.rb:17:23:17:41 | unicode_input_manip | provenance | | +| unicode_normalization.rb:16:5:16:23 | unicode_input_manip | unicode_normalization.rb:18:22:18:40 | unicode_input_manip | provenance | | +| unicode_normalization.rb:16:27:16:39 | unicode_input | unicode_normalization.rb:16:27:16:59 | call to sub | provenance | | +| unicode_normalization.rb:16:27:16:39 | unicode_input | unicode_normalization.rb:16:27:16:59 | call to sub | provenance | | +| unicode_normalization.rb:16:27:16:59 | call to sub | unicode_normalization.rb:16:5:16:23 | unicode_input_manip | provenance | | +| unicode_normalization.rb:24:5:24:17 | unicode_input | unicode_normalization.rb:25:37:25:49 | unicode_input | provenance | | +| unicode_normalization.rb:24:21:24:26 | call to params | unicode_normalization.rb:24:21:24:42 | ...[...] | provenance | | +| unicode_normalization.rb:24:21:24:42 | ...[...] | unicode_normalization.rb:24:5:24:17 | unicode_input | provenance | | +| unicode_normalization.rb:25:5:25:21 | unicode_html_safe | unicode_normalization.rb:26:23:26:39 | unicode_html_safe | provenance | | +| unicode_normalization.rb:25:5:25:21 | unicode_html_safe | unicode_normalization.rb:27:22:27:38 | unicode_html_safe | provenance | | +| unicode_normalization.rb:25:25:25:50 | call to html_escape | unicode_normalization.rb:25:5:25:21 | unicode_html_safe | provenance | | +| unicode_normalization.rb:25:37:25:49 | unicode_input | unicode_normalization.rb:25:25:25:50 | call to html_escape | provenance | | +| unicode_normalization.rb:33:5:33:17 | unicode_input | unicode_normalization.rb:34:40:34:52 | unicode_input | provenance | | +| unicode_normalization.rb:33:21:33:26 | call to params | unicode_normalization.rb:33:21:33:42 | ...[...] | provenance | | +| unicode_normalization.rb:33:21:33:42 | ...[...] | unicode_normalization.rb:33:5:33:17 | unicode_input | provenance | | +| unicode_normalization.rb:34:5:34:21 | unicode_html_safe | unicode_normalization.rb:35:23:35:39 | unicode_html_safe | provenance | | +| unicode_normalization.rb:34:5:34:21 | unicode_html_safe | unicode_normalization.rb:36:22:36:38 | unicode_html_safe | provenance | | +| unicode_normalization.rb:34:25:34:53 | call to escapeHTML | unicode_normalization.rb:34:25:34:63 | call to html_safe | provenance | | +| unicode_normalization.rb:34:25:34:63 | call to html_safe | unicode_normalization.rb:34:5:34:21 | unicode_html_safe | provenance | | +| unicode_normalization.rb:34:40:34:52 | unicode_input | unicode_normalization.rb:34:25:34:53 | call to escapeHTML | provenance | | nodes | unicode_normalization.rb:7:5:7:17 | unicode_input | semmle.label | unicode_input | | unicode_normalization.rb:7:21:7:26 | call to params | semmle.label | call to params | diff --git a/ruby/ql/test/query-tests/experimental/manually-check-http-verb/ManuallyCheckHttpVerb.expected b/ruby/ql/test/query-tests/experimental/manually-check-http-verb/ManuallyCheckHttpVerb.expected index 1f066c979b4..e0e85b75ebb 100644 --- a/ruby/ql/test/query-tests/experimental/manually-check-http-verb/ManuallyCheckHttpVerb.expected +++ b/ruby/ql/test/query-tests/experimental/manually-check-http-verb/ManuallyCheckHttpVerb.expected @@ -1,16 +1,16 @@ edges -| ManuallyCheckHttpVerb.rb:11:5:11:10 | method | ManuallyCheckHttpVerb.rb:12:8:12:22 | ... == ... | -| ManuallyCheckHttpVerb.rb:11:14:11:24 | call to env | ManuallyCheckHttpVerb.rb:11:14:11:42 | ...[...] | -| ManuallyCheckHttpVerb.rb:11:14:11:42 | ...[...] | ManuallyCheckHttpVerb.rb:11:5:11:10 | method | -| ManuallyCheckHttpVerb.rb:19:5:19:10 | method | ManuallyCheckHttpVerb.rb:20:8:20:22 | ... == ... | -| ManuallyCheckHttpVerb.rb:19:14:19:35 | call to request_method | ManuallyCheckHttpVerb.rb:19:5:19:10 | method | -| ManuallyCheckHttpVerb.rb:27:5:27:10 | method | ManuallyCheckHttpVerb.rb:28:8:28:22 | ... == ... | -| ManuallyCheckHttpVerb.rb:27:14:27:27 | call to method | ManuallyCheckHttpVerb.rb:27:5:27:10 | method | -| ManuallyCheckHttpVerb.rb:35:5:35:10 | method | ManuallyCheckHttpVerb.rb:36:8:36:22 | ... == ... | -| ManuallyCheckHttpVerb.rb:35:14:35:39 | call to raw_request_method | ManuallyCheckHttpVerb.rb:35:5:35:10 | method | -| ManuallyCheckHttpVerb.rb:51:7:51:12 | method | ManuallyCheckHttpVerb.rb:52:10:52:23 | ... == ... | -| ManuallyCheckHttpVerb.rb:51:16:51:44 | call to request_method_symbol | ManuallyCheckHttpVerb.rb:51:7:51:12 | method | -| ManuallyCheckHttpVerb.rb:59:10:59:20 | call to env | ManuallyCheckHttpVerb.rb:59:10:59:38 | ...[...] | +| ManuallyCheckHttpVerb.rb:11:5:11:10 | method | ManuallyCheckHttpVerb.rb:12:8:12:22 | ... == ... | provenance | | +| ManuallyCheckHttpVerb.rb:11:14:11:24 | call to env | ManuallyCheckHttpVerb.rb:11:14:11:42 | ...[...] | provenance | | +| ManuallyCheckHttpVerb.rb:11:14:11:42 | ...[...] | ManuallyCheckHttpVerb.rb:11:5:11:10 | method | provenance | | +| ManuallyCheckHttpVerb.rb:19:5:19:10 | method | ManuallyCheckHttpVerb.rb:20:8:20:22 | ... == ... | provenance | | +| ManuallyCheckHttpVerb.rb:19:14:19:35 | call to request_method | ManuallyCheckHttpVerb.rb:19:5:19:10 | method | provenance | | +| ManuallyCheckHttpVerb.rb:27:5:27:10 | method | ManuallyCheckHttpVerb.rb:28:8:28:22 | ... == ... | provenance | | +| ManuallyCheckHttpVerb.rb:27:14:27:27 | call to method | ManuallyCheckHttpVerb.rb:27:5:27:10 | method | provenance | | +| ManuallyCheckHttpVerb.rb:35:5:35:10 | method | ManuallyCheckHttpVerb.rb:36:8:36:22 | ... == ... | provenance | | +| ManuallyCheckHttpVerb.rb:35:14:35:39 | call to raw_request_method | ManuallyCheckHttpVerb.rb:35:5:35:10 | method | provenance | | +| ManuallyCheckHttpVerb.rb:51:7:51:12 | method | ManuallyCheckHttpVerb.rb:52:10:52:23 | ... == ... | provenance | | +| ManuallyCheckHttpVerb.rb:51:16:51:44 | call to request_method_symbol | ManuallyCheckHttpVerb.rb:51:7:51:12 | method | provenance | | +| ManuallyCheckHttpVerb.rb:59:10:59:20 | call to env | ManuallyCheckHttpVerb.rb:59:10:59:38 | ...[...] | provenance | | nodes | ManuallyCheckHttpVerb.rb:4:8:4:19 | call to get? | semmle.label | call to get? | | ManuallyCheckHttpVerb.rb:11:5:11:10 | method | semmle.label | method | diff --git a/ruby/ql/test/query-tests/experimental/weak-params/WeakParams.expected b/ruby/ql/test/query-tests/experimental/weak-params/WeakParams.expected index d84d761c17a..4f72a24cee7 100644 --- a/ruby/ql/test/query-tests/experimental/weak-params/WeakParams.expected +++ b/ruby/ql/test/query-tests/experimental/weak-params/WeakParams.expected @@ -1,8 +1,8 @@ edges -| WeakParams.rb:5:28:5:53 | call to request_parameters | WeakParams.rb:5:28:5:59 | ...[...] | -| WeakParams.rb:10:28:10:51 | call to query_parameters | WeakParams.rb:10:28:10:57 | ...[...] | -| WeakParams.rb:15:28:15:39 | call to POST | WeakParams.rb:15:28:15:45 | ...[...] | -| WeakParams.rb:20:28:20:38 | call to GET | WeakParams.rb:20:28:20:44 | ...[...] | +| WeakParams.rb:5:28:5:53 | call to request_parameters | WeakParams.rb:5:28:5:59 | ...[...] | provenance | | +| WeakParams.rb:10:28:10:51 | call to query_parameters | WeakParams.rb:10:28:10:57 | ...[...] | provenance | | +| WeakParams.rb:15:28:15:39 | call to POST | WeakParams.rb:15:28:15:45 | ...[...] | provenance | | +| WeakParams.rb:20:28:20:38 | call to GET | WeakParams.rb:20:28:20:44 | ...[...] | provenance | | nodes | WeakParams.rb:5:28:5:53 | call to request_parameters | semmle.label | call to request_parameters | | WeakParams.rb:5:28:5:59 | ...[...] | semmle.label | ...[...] | diff --git a/ruby/ql/test/query-tests/security/cwe-020/MissingFullAnchor/MissingFullAnchor.expected b/ruby/ql/test/query-tests/security/cwe-020/MissingFullAnchor/MissingFullAnchor.expected index f9b1241ea06..4032d044fd8 100644 --- a/ruby/ql/test/query-tests/security/cwe-020/MissingFullAnchor/MissingFullAnchor.expected +++ b/ruby/ql/test/query-tests/security/cwe-020/MissingFullAnchor/MissingFullAnchor.expected @@ -1,7 +1,7 @@ edges -| impl/miss-anchor.rb:2:12:2:15 | name | impl/miss-anchor.rb:3:39:3:42 | name | -| impl/miss-anchor.rb:6:12:6:15 | name | impl/miss-anchor.rb:7:43:7:46 | name | -| impl/miss-anchor.rb:14:12:14:15 | name | impl/miss-anchor.rb:15:47:15:50 | name | +| impl/miss-anchor.rb:2:12:2:15 | name | impl/miss-anchor.rb:3:39:3:42 | name | provenance | | +| impl/miss-anchor.rb:6:12:6:15 | name | impl/miss-anchor.rb:7:43:7:46 | name | provenance | | +| impl/miss-anchor.rb:14:12:14:15 | name | impl/miss-anchor.rb:15:47:15:50 | name | provenance | | nodes | impl/miss-anchor.rb:2:12:2:15 | name | semmle.label | name | | impl/miss-anchor.rb:3:39:3:42 | name | semmle.label | name | diff --git a/ruby/ql/test/query-tests/security/cwe-022/PathInjection.expected b/ruby/ql/test/query-tests/security/cwe-022/PathInjection.expected index a93fdd9f008..fe9751e6585 100644 --- a/ruby/ql/test/query-tests/security/cwe-022/PathInjection.expected +++ b/ruby/ql/test/query-tests/security/cwe-022/PathInjection.expected @@ -1,71 +1,71 @@ edges -| ArchiveApiPathTraversal.rb:5:26:5:31 | call to params | ArchiveApiPathTraversal.rb:5:26:5:42 | ...[...] | -| ArchiveApiPathTraversal.rb:5:26:5:42 | ...[...] | ArchiveApiPathTraversal.rb:49:17:49:27 | destination | -| ArchiveApiPathTraversal.rb:10:11:10:16 | call to params | ArchiveApiPathTraversal.rb:10:11:10:23 | ...[...] | -| ArchiveApiPathTraversal.rb:10:11:10:23 | ...[...] | ArchiveApiPathTraversal.rb:67:13:67:16 | file | -| ArchiveApiPathTraversal.rb:15:9:15:14 | call to params | ArchiveApiPathTraversal.rb:15:9:15:25 | ...[...] | -| ArchiveApiPathTraversal.rb:15:9:15:25 | ...[...] | ArchiveApiPathTraversal.rb:75:11:75:18 | filename | -| ArchiveApiPathTraversal.rb:49:17:49:27 | destination | ArchiveApiPathTraversal.rb:50:36:64:7 | do ... end [captured destination] | -| ArchiveApiPathTraversal.rb:50:36:64:7 | do ... end [captured destination] | ArchiveApiPathTraversal.rb:51:16:63:9 | do ... end [captured destination] | -| ArchiveApiPathTraversal.rb:51:16:63:9 | do ... end [captured destination] | ArchiveApiPathTraversal.rb:52:38:52:48 | destination | -| ArchiveApiPathTraversal.rb:52:9:52:24 | destination_file | ArchiveApiPathTraversal.rb:59:21:59:36 | destination_file | -| ArchiveApiPathTraversal.rb:52:28:52:67 | call to join | ArchiveApiPathTraversal.rb:52:9:52:24 | destination_file | -| ArchiveApiPathTraversal.rb:52:38:52:48 | destination | ArchiveApiPathTraversal.rb:52:28:52:67 | call to join | -| ArchiveApiPathTraversal.rb:67:13:67:16 | file | ArchiveApiPathTraversal.rb:68:20:68:23 | file | -| ArchiveApiPathTraversal.rb:75:11:75:18 | filename | ArchiveApiPathTraversal.rb:76:19:76:26 | filename | -| tainted_path.rb:4:5:4:8 | path | tainted_path.rb:5:26:5:29 | path | -| tainted_path.rb:4:12:4:17 | call to params | tainted_path.rb:4:12:4:24 | ...[...] | -| tainted_path.rb:4:12:4:24 | ...[...] | tainted_path.rb:4:5:4:8 | path | -| tainted_path.rb:10:5:10:8 | path | tainted_path.rb:11:26:11:29 | path | -| tainted_path.rb:10:12:10:43 | call to absolute_path | tainted_path.rb:10:5:10:8 | path | -| tainted_path.rb:10:31:10:36 | call to params | tainted_path.rb:10:31:10:43 | ...[...] | -| tainted_path.rb:10:31:10:43 | ...[...] | tainted_path.rb:10:12:10:43 | call to absolute_path | -| tainted_path.rb:16:5:16:8 | path | tainted_path.rb:17:26:17:29 | path | -| tainted_path.rb:16:15:16:41 | call to dirname | tainted_path.rb:16:5:16:8 | path | -| tainted_path.rb:16:28:16:33 | call to params | tainted_path.rb:16:28:16:40 | ...[...] | -| tainted_path.rb:16:28:16:40 | ...[...] | tainted_path.rb:16:15:16:41 | call to dirname | -| tainted_path.rb:22:5:22:8 | path | tainted_path.rb:23:26:23:29 | path | -| tainted_path.rb:22:12:22:41 | call to expand_path | tainted_path.rb:22:5:22:8 | path | -| tainted_path.rb:22:29:22:34 | call to params | tainted_path.rb:22:29:22:41 | ...[...] | -| tainted_path.rb:22:29:22:41 | ...[...] | tainted_path.rb:22:12:22:41 | call to expand_path | -| tainted_path.rb:28:5:28:8 | path | tainted_path.rb:29:26:29:29 | path | -| tainted_path.rb:28:12:28:34 | call to path | tainted_path.rb:28:5:28:8 | path | -| tainted_path.rb:28:22:28:27 | call to params | tainted_path.rb:28:22:28:34 | ...[...] | -| tainted_path.rb:28:22:28:34 | ...[...] | tainted_path.rb:28:12:28:34 | call to path | -| tainted_path.rb:34:5:34:8 | path | tainted_path.rb:35:26:35:29 | path | -| tainted_path.rb:34:12:34:41 | call to realdirpath | tainted_path.rb:34:5:34:8 | path | -| tainted_path.rb:34:29:34:34 | call to params | tainted_path.rb:34:29:34:41 | ...[...] | -| tainted_path.rb:34:29:34:41 | ...[...] | tainted_path.rb:34:12:34:41 | call to realdirpath | -| tainted_path.rb:40:5:40:8 | path | tainted_path.rb:41:26:41:29 | path | -| tainted_path.rb:40:12:40:38 | call to realpath | tainted_path.rb:40:5:40:8 | path | -| tainted_path.rb:40:26:40:31 | call to params | tainted_path.rb:40:26:40:38 | ...[...] | -| tainted_path.rb:40:26:40:38 | ...[...] | tainted_path.rb:40:12:40:38 | call to realpath | -| tainted_path.rb:47:5:47:8 | path | tainted_path.rb:48:26:48:29 | path | -| tainted_path.rb:47:12:47:63 | call to join | tainted_path.rb:47:5:47:8 | path | -| tainted_path.rb:47:43:47:48 | call to params | tainted_path.rb:47:43:47:55 | ...[...] | -| tainted_path.rb:47:43:47:55 | ...[...] | tainted_path.rb:47:12:47:63 | call to join | -| tainted_path.rb:59:5:59:8 | path | tainted_path.rb:60:26:60:29 | path | -| tainted_path.rb:59:12:59:53 | call to new | tainted_path.rb:59:5:59:8 | path | -| tainted_path.rb:59:40:59:45 | call to params | tainted_path.rb:59:40:59:52 | ...[...] | -| tainted_path.rb:59:40:59:52 | ...[...] | tainted_path.rb:59:12:59:53 | call to new | -| tainted_path.rb:71:5:71:8 | path | tainted_path.rb:72:15:72:18 | path | -| tainted_path.rb:71:12:71:53 | call to new | tainted_path.rb:71:5:71:8 | path | -| tainted_path.rb:71:40:71:45 | call to params | tainted_path.rb:71:40:71:52 | ...[...] | -| tainted_path.rb:71:40:71:52 | ...[...] | tainted_path.rb:71:12:71:53 | call to new | -| tainted_path.rb:77:5:77:8 | path | tainted_path.rb:78:19:78:22 | path | -| tainted_path.rb:77:5:77:8 | path | tainted_path.rb:79:14:79:17 | path | -| tainted_path.rb:77:12:77:53 | call to new | tainted_path.rb:77:5:77:8 | path | -| tainted_path.rb:77:40:77:45 | call to params | tainted_path.rb:77:40:77:52 | ...[...] | -| tainted_path.rb:77:40:77:52 | ...[...] | tainted_path.rb:77:12:77:53 | call to new | -| tainted_path.rb:84:5:84:8 | path | tainted_path.rb:85:10:85:13 | path | -| tainted_path.rb:84:5:84:8 | path | tainted_path.rb:86:25:86:28 | path | -| tainted_path.rb:84:12:84:53 | call to new | tainted_path.rb:84:5:84:8 | path | -| tainted_path.rb:84:40:84:45 | call to params | tainted_path.rb:84:40:84:52 | ...[...] | -| tainted_path.rb:84:40:84:52 | ...[...] | tainted_path.rb:84:12:84:53 | call to new | -| tainted_path.rb:90:5:90:8 | path | tainted_path.rb:92:11:92:14 | path | -| tainted_path.rb:90:12:90:53 | call to new | tainted_path.rb:90:5:90:8 | path | -| tainted_path.rb:90:40:90:45 | call to params | tainted_path.rb:90:40:90:52 | ...[...] | -| tainted_path.rb:90:40:90:52 | ...[...] | tainted_path.rb:90:12:90:53 | call to new | +| ArchiveApiPathTraversal.rb:5:26:5:31 | call to params | ArchiveApiPathTraversal.rb:5:26:5:42 | ...[...] | provenance | | +| ArchiveApiPathTraversal.rb:5:26:5:42 | ...[...] | ArchiveApiPathTraversal.rb:49:17:49:27 | destination | provenance | | +| ArchiveApiPathTraversal.rb:10:11:10:16 | call to params | ArchiveApiPathTraversal.rb:10:11:10:23 | ...[...] | provenance | | +| ArchiveApiPathTraversal.rb:10:11:10:23 | ...[...] | ArchiveApiPathTraversal.rb:67:13:67:16 | file | provenance | | +| ArchiveApiPathTraversal.rb:15:9:15:14 | call to params | ArchiveApiPathTraversal.rb:15:9:15:25 | ...[...] | provenance | | +| ArchiveApiPathTraversal.rb:15:9:15:25 | ...[...] | ArchiveApiPathTraversal.rb:75:11:75:18 | filename | provenance | | +| ArchiveApiPathTraversal.rb:49:17:49:27 | destination | ArchiveApiPathTraversal.rb:50:36:64:7 | do ... end [captured destination] | provenance | | +| ArchiveApiPathTraversal.rb:50:36:64:7 | do ... end [captured destination] | ArchiveApiPathTraversal.rb:51:16:63:9 | do ... end [captured destination] | provenance | | +| ArchiveApiPathTraversal.rb:51:16:63:9 | do ... end [captured destination] | ArchiveApiPathTraversal.rb:52:38:52:48 | destination | provenance | | +| ArchiveApiPathTraversal.rb:52:9:52:24 | destination_file | ArchiveApiPathTraversal.rb:59:21:59:36 | destination_file | provenance | | +| ArchiveApiPathTraversal.rb:52:28:52:67 | call to join | ArchiveApiPathTraversal.rb:52:9:52:24 | destination_file | provenance | | +| ArchiveApiPathTraversal.rb:52:38:52:48 | destination | ArchiveApiPathTraversal.rb:52:28:52:67 | call to join | provenance | | +| ArchiveApiPathTraversal.rb:67:13:67:16 | file | ArchiveApiPathTraversal.rb:68:20:68:23 | file | provenance | | +| ArchiveApiPathTraversal.rb:75:11:75:18 | filename | ArchiveApiPathTraversal.rb:76:19:76:26 | filename | provenance | | +| tainted_path.rb:4:5:4:8 | path | tainted_path.rb:5:26:5:29 | path | provenance | | +| tainted_path.rb:4:12:4:17 | call to params | tainted_path.rb:4:12:4:24 | ...[...] | provenance | | +| tainted_path.rb:4:12:4:24 | ...[...] | tainted_path.rb:4:5:4:8 | path | provenance | | +| tainted_path.rb:10:5:10:8 | path | tainted_path.rb:11:26:11:29 | path | provenance | | +| tainted_path.rb:10:12:10:43 | call to absolute_path | tainted_path.rb:10:5:10:8 | path | provenance | | +| tainted_path.rb:10:31:10:36 | call to params | tainted_path.rb:10:31:10:43 | ...[...] | provenance | | +| tainted_path.rb:10:31:10:43 | ...[...] | tainted_path.rb:10:12:10:43 | call to absolute_path | provenance | | +| tainted_path.rb:16:5:16:8 | path | tainted_path.rb:17:26:17:29 | path | provenance | | +| tainted_path.rb:16:15:16:41 | call to dirname | tainted_path.rb:16:5:16:8 | path | provenance | | +| tainted_path.rb:16:28:16:33 | call to params | tainted_path.rb:16:28:16:40 | ...[...] | provenance | | +| tainted_path.rb:16:28:16:40 | ...[...] | tainted_path.rb:16:15:16:41 | call to dirname | provenance | | +| tainted_path.rb:22:5:22:8 | path | tainted_path.rb:23:26:23:29 | path | provenance | | +| tainted_path.rb:22:12:22:41 | call to expand_path | tainted_path.rb:22:5:22:8 | path | provenance | | +| tainted_path.rb:22:29:22:34 | call to params | tainted_path.rb:22:29:22:41 | ...[...] | provenance | | +| tainted_path.rb:22:29:22:41 | ...[...] | tainted_path.rb:22:12:22:41 | call to expand_path | provenance | | +| tainted_path.rb:28:5:28:8 | path | tainted_path.rb:29:26:29:29 | path | provenance | | +| tainted_path.rb:28:12:28:34 | call to path | tainted_path.rb:28:5:28:8 | path | provenance | | +| tainted_path.rb:28:22:28:27 | call to params | tainted_path.rb:28:22:28:34 | ...[...] | provenance | | +| tainted_path.rb:28:22:28:34 | ...[...] | tainted_path.rb:28:12:28:34 | call to path | provenance | | +| tainted_path.rb:34:5:34:8 | path | tainted_path.rb:35:26:35:29 | path | provenance | | +| tainted_path.rb:34:12:34:41 | call to realdirpath | tainted_path.rb:34:5:34:8 | path | provenance | | +| tainted_path.rb:34:29:34:34 | call to params | tainted_path.rb:34:29:34:41 | ...[...] | provenance | | +| tainted_path.rb:34:29:34:41 | ...[...] | tainted_path.rb:34:12:34:41 | call to realdirpath | provenance | | +| tainted_path.rb:40:5:40:8 | path | tainted_path.rb:41:26:41:29 | path | provenance | | +| tainted_path.rb:40:12:40:38 | call to realpath | tainted_path.rb:40:5:40:8 | path | provenance | | +| tainted_path.rb:40:26:40:31 | call to params | tainted_path.rb:40:26:40:38 | ...[...] | provenance | | +| tainted_path.rb:40:26:40:38 | ...[...] | tainted_path.rb:40:12:40:38 | call to realpath | provenance | | +| tainted_path.rb:47:5:47:8 | path | tainted_path.rb:48:26:48:29 | path | provenance | | +| tainted_path.rb:47:12:47:63 | call to join | tainted_path.rb:47:5:47:8 | path | provenance | | +| tainted_path.rb:47:43:47:48 | call to params | tainted_path.rb:47:43:47:55 | ...[...] | provenance | | +| tainted_path.rb:47:43:47:55 | ...[...] | tainted_path.rb:47:12:47:63 | call to join | provenance | | +| tainted_path.rb:59:5:59:8 | path | tainted_path.rb:60:26:60:29 | path | provenance | | +| tainted_path.rb:59:12:59:53 | call to new | tainted_path.rb:59:5:59:8 | path | provenance | | +| tainted_path.rb:59:40:59:45 | call to params | tainted_path.rb:59:40:59:52 | ...[...] | provenance | | +| tainted_path.rb:59:40:59:52 | ...[...] | tainted_path.rb:59:12:59:53 | call to new | provenance | | +| tainted_path.rb:71:5:71:8 | path | tainted_path.rb:72:15:72:18 | path | provenance | | +| tainted_path.rb:71:12:71:53 | call to new | tainted_path.rb:71:5:71:8 | path | provenance | | +| tainted_path.rb:71:40:71:45 | call to params | tainted_path.rb:71:40:71:52 | ...[...] | provenance | | +| tainted_path.rb:71:40:71:52 | ...[...] | tainted_path.rb:71:12:71:53 | call to new | provenance | | +| tainted_path.rb:77:5:77:8 | path | tainted_path.rb:78:19:78:22 | path | provenance | | +| tainted_path.rb:77:5:77:8 | path | tainted_path.rb:79:14:79:17 | path | provenance | | +| tainted_path.rb:77:12:77:53 | call to new | tainted_path.rb:77:5:77:8 | path | provenance | | +| tainted_path.rb:77:40:77:45 | call to params | tainted_path.rb:77:40:77:52 | ...[...] | provenance | | +| tainted_path.rb:77:40:77:52 | ...[...] | tainted_path.rb:77:12:77:53 | call to new | provenance | | +| tainted_path.rb:84:5:84:8 | path | tainted_path.rb:85:10:85:13 | path | provenance | | +| tainted_path.rb:84:5:84:8 | path | tainted_path.rb:86:25:86:28 | path | provenance | | +| tainted_path.rb:84:12:84:53 | call to new | tainted_path.rb:84:5:84:8 | path | provenance | | +| tainted_path.rb:84:40:84:45 | call to params | tainted_path.rb:84:40:84:52 | ...[...] | provenance | | +| tainted_path.rb:84:40:84:52 | ...[...] | tainted_path.rb:84:12:84:53 | call to new | provenance | | +| tainted_path.rb:90:5:90:8 | path | tainted_path.rb:92:11:92:14 | path | provenance | | +| tainted_path.rb:90:12:90:53 | call to new | tainted_path.rb:90:5:90:8 | path | provenance | | +| tainted_path.rb:90:40:90:45 | call to params | tainted_path.rb:90:40:90:52 | ...[...] | provenance | | +| tainted_path.rb:90:40:90:52 | ...[...] | tainted_path.rb:90:12:90:53 | call to new | provenance | | nodes | ArchiveApiPathTraversal.rb:5:26:5:31 | call to params | semmle.label | call to params | | ArchiveApiPathTraversal.rb:5:26:5:42 | ...[...] | semmle.label | ...[...] | diff --git a/ruby/ql/test/query-tests/security/cwe-078/CommandInjection/CommandInjection.expected b/ruby/ql/test/query-tests/security/cwe-078/CommandInjection/CommandInjection.expected index 24ae9c62320..be4473409b7 100644 --- a/ruby/ql/test/query-tests/security/cwe-078/CommandInjection/CommandInjection.expected +++ b/ruby/ql/test/query-tests/security/cwe-078/CommandInjection/CommandInjection.expected @@ -1,26 +1,26 @@ edges -| CommandInjection.rb:6:9:6:11 | cmd | CommandInjection.rb:7:10:7:15 | #{...} | -| CommandInjection.rb:6:9:6:11 | cmd | CommandInjection.rb:8:16:8:18 | cmd | -| CommandInjection.rb:6:9:6:11 | cmd | CommandInjection.rb:10:14:10:16 | cmd | -| CommandInjection.rb:6:9:6:11 | cmd | CommandInjection.rb:11:17:11:22 | #{...} | -| CommandInjection.rb:6:9:6:11 | cmd | CommandInjection.rb:13:9:13:14 | #{...} | -| CommandInjection.rb:6:9:6:11 | cmd | CommandInjection.rb:29:19:29:24 | #{...} | -| CommandInjection.rb:6:9:6:11 | cmd | CommandInjection.rb:33:24:33:36 | "echo #{...}" | -| CommandInjection.rb:6:9:6:11 | cmd | CommandInjection.rb:34:39:34:51 | "grep #{...}" | -| CommandInjection.rb:6:15:6:20 | call to params | CommandInjection.rb:6:15:6:26 | ...[...] | -| CommandInjection.rb:6:15:6:26 | ...[...] | CommandInjection.rb:6:9:6:11 | cmd | -| CommandInjection.rb:46:9:46:11 | cmd | CommandInjection.rb:50:24:50:36 | "echo #{...}" | -| CommandInjection.rb:46:15:46:20 | call to params | CommandInjection.rb:46:15:46:26 | ...[...] | -| CommandInjection.rb:46:15:46:26 | ...[...] | CommandInjection.rb:46:9:46:11 | cmd | -| CommandInjection.rb:54:7:54:9 | cmd | CommandInjection.rb:59:14:59:16 | cmd | -| CommandInjection.rb:54:13:54:18 | call to params | CommandInjection.rb:54:13:54:24 | ...[...] | -| CommandInjection.rb:54:13:54:24 | ...[...] | CommandInjection.rb:54:7:54:9 | cmd | -| CommandInjection.rb:73:18:73:23 | number | CommandInjection.rb:74:14:74:29 | "echo #{...}" | -| CommandInjection.rb:81:23:81:33 | blah_number | CommandInjection.rb:82:14:82:34 | "echo #{...}" | -| CommandInjection.rb:91:22:91:37 | ...[...] | CommandInjection.rb:91:14:91:39 | "echo #{...}" | -| CommandInjection.rb:103:9:103:12 | file | CommandInjection.rb:104:16:104:28 | "cat #{...}" | -| CommandInjection.rb:103:16:103:21 | call to params | CommandInjection.rb:103:16:103:28 | ...[...] | -| CommandInjection.rb:103:16:103:28 | ...[...] | CommandInjection.rb:103:9:103:12 | file | +| CommandInjection.rb:6:9:6:11 | cmd | CommandInjection.rb:7:10:7:15 | #{...} | provenance | | +| CommandInjection.rb:6:9:6:11 | cmd | CommandInjection.rb:8:16:8:18 | cmd | provenance | | +| CommandInjection.rb:6:9:6:11 | cmd | CommandInjection.rb:10:14:10:16 | cmd | provenance | | +| CommandInjection.rb:6:9:6:11 | cmd | CommandInjection.rb:11:17:11:22 | #{...} | provenance | | +| CommandInjection.rb:6:9:6:11 | cmd | CommandInjection.rb:13:9:13:14 | #{...} | provenance | | +| CommandInjection.rb:6:9:6:11 | cmd | CommandInjection.rb:29:19:29:24 | #{...} | provenance | | +| CommandInjection.rb:6:9:6:11 | cmd | CommandInjection.rb:33:24:33:36 | "echo #{...}" | provenance | | +| CommandInjection.rb:6:9:6:11 | cmd | CommandInjection.rb:34:39:34:51 | "grep #{...}" | provenance | | +| CommandInjection.rb:6:15:6:20 | call to params | CommandInjection.rb:6:15:6:26 | ...[...] | provenance | | +| CommandInjection.rb:6:15:6:26 | ...[...] | CommandInjection.rb:6:9:6:11 | cmd | provenance | | +| CommandInjection.rb:46:9:46:11 | cmd | CommandInjection.rb:50:24:50:36 | "echo #{...}" | provenance | | +| CommandInjection.rb:46:15:46:20 | call to params | CommandInjection.rb:46:15:46:26 | ...[...] | provenance | | +| CommandInjection.rb:46:15:46:26 | ...[...] | CommandInjection.rb:46:9:46:11 | cmd | provenance | | +| CommandInjection.rb:54:7:54:9 | cmd | CommandInjection.rb:59:14:59:16 | cmd | provenance | | +| CommandInjection.rb:54:13:54:18 | call to params | CommandInjection.rb:54:13:54:24 | ...[...] | provenance | | +| CommandInjection.rb:54:13:54:24 | ...[...] | CommandInjection.rb:54:7:54:9 | cmd | provenance | | +| CommandInjection.rb:73:18:73:23 | number | CommandInjection.rb:74:14:74:29 | "echo #{...}" | provenance | | +| CommandInjection.rb:81:23:81:33 | blah_number | CommandInjection.rb:82:14:82:34 | "echo #{...}" | provenance | | +| CommandInjection.rb:91:22:91:37 | ...[...] | CommandInjection.rb:91:14:91:39 | "echo #{...}" | provenance | | +| CommandInjection.rb:103:9:103:12 | file | CommandInjection.rb:104:16:104:28 | "cat #{...}" | provenance | | +| CommandInjection.rb:103:16:103:21 | call to params | CommandInjection.rb:103:16:103:28 | ...[...] | provenance | | +| CommandInjection.rb:103:16:103:28 | ...[...] | CommandInjection.rb:103:9:103:12 | file | provenance | | nodes | CommandInjection.rb:6:9:6:11 | cmd | semmle.label | cmd | | CommandInjection.rb:6:15:6:20 | call to params | semmle.label | call to params | diff --git a/ruby/ql/test/query-tests/security/cwe-078/KernelOpen/KernelOpen.expected b/ruby/ql/test/query-tests/security/cwe-078/KernelOpen/KernelOpen.expected index 506ea30d53c..67e618a3a1f 100644 --- a/ruby/ql/test/query-tests/security/cwe-078/KernelOpen/KernelOpen.expected +++ b/ruby/ql/test/query-tests/security/cwe-078/KernelOpen/KernelOpen.expected @@ -1,17 +1,17 @@ edges -| KernelOpen.rb:3:5:3:8 | file | KernelOpen.rb:4:10:4:13 | file | -| KernelOpen.rb:3:5:3:8 | file | KernelOpen.rb:5:13:5:16 | file | -| KernelOpen.rb:3:5:3:8 | file | KernelOpen.rb:6:14:6:17 | file | -| KernelOpen.rb:3:5:3:8 | file | KernelOpen.rb:7:16:7:19 | file | -| KernelOpen.rb:3:5:3:8 | file | KernelOpen.rb:8:17:8:20 | file | -| KernelOpen.rb:3:5:3:8 | file | KernelOpen.rb:9:16:9:19 | file | -| KernelOpen.rb:3:5:3:8 | file | KernelOpen.rb:10:18:10:21 | file | -| KernelOpen.rb:3:5:3:8 | file | KernelOpen.rb:11:14:11:17 | file | -| KernelOpen.rb:3:5:3:8 | file | KernelOpen.rb:13:23:13:26 | file | -| KernelOpen.rb:3:5:3:8 | file | KernelOpen.rb:26:10:26:13 | file | -| KernelOpen.rb:3:12:3:17 | call to params | KernelOpen.rb:3:12:3:24 | ...[...] | -| KernelOpen.rb:3:12:3:24 | ...[...] | KernelOpen.rb:3:5:3:8 | file | -| KernelOpen.rb:13:23:13:26 | file | KernelOpen.rb:13:13:13:31 | call to join | +| KernelOpen.rb:3:5:3:8 | file | KernelOpen.rb:4:10:4:13 | file | provenance | | +| KernelOpen.rb:3:5:3:8 | file | KernelOpen.rb:5:13:5:16 | file | provenance | | +| KernelOpen.rb:3:5:3:8 | file | KernelOpen.rb:6:14:6:17 | file | provenance | | +| KernelOpen.rb:3:5:3:8 | file | KernelOpen.rb:7:16:7:19 | file | provenance | | +| KernelOpen.rb:3:5:3:8 | file | KernelOpen.rb:8:17:8:20 | file | provenance | | +| KernelOpen.rb:3:5:3:8 | file | KernelOpen.rb:9:16:9:19 | file | provenance | | +| KernelOpen.rb:3:5:3:8 | file | KernelOpen.rb:10:18:10:21 | file | provenance | | +| KernelOpen.rb:3:5:3:8 | file | KernelOpen.rb:11:14:11:17 | file | provenance | | +| KernelOpen.rb:3:5:3:8 | file | KernelOpen.rb:13:23:13:26 | file | provenance | | +| KernelOpen.rb:3:5:3:8 | file | KernelOpen.rb:26:10:26:13 | file | provenance | | +| KernelOpen.rb:3:12:3:17 | call to params | KernelOpen.rb:3:12:3:24 | ...[...] | provenance | | +| KernelOpen.rb:3:12:3:24 | ...[...] | KernelOpen.rb:3:5:3:8 | file | provenance | | +| KernelOpen.rb:13:23:13:26 | file | KernelOpen.rb:13:13:13:31 | call to join | provenance | | nodes | KernelOpen.rb:3:5:3:8 | file | semmle.label | file | | KernelOpen.rb:3:12:3:17 | call to params | semmle.label | call to params | diff --git a/ruby/ql/test/query-tests/security/cwe-078/UnsafeShellCommandConstruction/UnsafeShellCommandConstruction.expected b/ruby/ql/test/query-tests/security/cwe-078/UnsafeShellCommandConstruction/UnsafeShellCommandConstruction.expected index a8ded2881ed..ae05501bfa7 100644 --- a/ruby/ql/test/query-tests/security/cwe-078/UnsafeShellCommandConstruction/UnsafeShellCommandConstruction.expected +++ b/ruby/ql/test/query-tests/security/cwe-078/UnsafeShellCommandConstruction/UnsafeShellCommandConstruction.expected @@ -1,21 +1,21 @@ edges -| impl/sub/notImported.rb:2:12:2:17 | target | impl/sub/notImported.rb:3:19:3:27 | #{...} | -| impl/sub/other2.rb:2:12:2:17 | target | impl/sub/other2.rb:3:19:3:27 | #{...} | -| impl/sub/other.rb:2:12:2:17 | target | impl/sub/other.rb:3:19:3:27 | #{...} | -| impl/unsafeShell.rb:2:12:2:17 | target | impl/unsafeShell.rb:3:19:3:27 | #{...} | -| impl/unsafeShell.rb:6:12:6:12 | x | impl/unsafeShell.rb:7:32:7:32 | x | -| impl/unsafeShell.rb:15:47:15:64 | innocent_file_path | impl/unsafeShell.rb:20:21:20:41 | #{...} | -| impl/unsafeShell.rb:23:15:23:23 | file_path | impl/unsafeShell.rb:26:19:26:30 | #{...} | -| impl/unsafeShell.rb:33:12:33:17 | target | impl/unsafeShell.rb:34:19:34:27 | #{...} | -| impl/unsafeShell.rb:37:10:37:10 | x | impl/unsafeShell.rb:38:19:38:22 | #{...} | -| impl/unsafeShell.rb:47:16:47:21 | target | impl/unsafeShell.rb:48:19:48:27 | #{...} | -| impl/unsafeShell.rb:51:17:51:17 | x | impl/unsafeShell.rb:52:14:52:14 | x | -| impl/unsafeShell.rb:51:17:51:17 | x | impl/unsafeShell.rb:54:29:54:29 | x | -| impl/unsafeShell.rb:57:21:57:21 | x | impl/unsafeShell.rb:58:23:58:23 | x | -| impl/unsafeShell.rb:61:20:61:20 | x | impl/unsafeShell.rb:63:14:63:14 | x | -| impl/unsafeShell.rb:63:5:63:7 | [post] arr [element] | impl/unsafeShell.rb:64:14:64:16 | arr | -| impl/unsafeShell.rb:63:5:63:7 | [post] arr [element] | impl/unsafeShell.rb:68:14:68:16 | arr | -| impl/unsafeShell.rb:63:14:63:14 | x | impl/unsafeShell.rb:63:5:63:7 | [post] arr [element] | +| impl/sub/notImported.rb:2:12:2:17 | target | impl/sub/notImported.rb:3:19:3:27 | #{...} | provenance | | +| impl/sub/other2.rb:2:12:2:17 | target | impl/sub/other2.rb:3:19:3:27 | #{...} | provenance | | +| impl/sub/other.rb:2:12:2:17 | target | impl/sub/other.rb:3:19:3:27 | #{...} | provenance | | +| impl/unsafeShell.rb:2:12:2:17 | target | impl/unsafeShell.rb:3:19:3:27 | #{...} | provenance | | +| impl/unsafeShell.rb:6:12:6:12 | x | impl/unsafeShell.rb:7:32:7:32 | x | provenance | | +| impl/unsafeShell.rb:15:47:15:64 | innocent_file_path | impl/unsafeShell.rb:20:21:20:41 | #{...} | provenance | | +| impl/unsafeShell.rb:23:15:23:23 | file_path | impl/unsafeShell.rb:26:19:26:30 | #{...} | provenance | | +| impl/unsafeShell.rb:33:12:33:17 | target | impl/unsafeShell.rb:34:19:34:27 | #{...} | provenance | | +| impl/unsafeShell.rb:37:10:37:10 | x | impl/unsafeShell.rb:38:19:38:22 | #{...} | provenance | | +| impl/unsafeShell.rb:47:16:47:21 | target | impl/unsafeShell.rb:48:19:48:27 | #{...} | provenance | | +| impl/unsafeShell.rb:51:17:51:17 | x | impl/unsafeShell.rb:52:14:52:14 | x | provenance | | +| impl/unsafeShell.rb:51:17:51:17 | x | impl/unsafeShell.rb:54:29:54:29 | x | provenance | | +| impl/unsafeShell.rb:57:21:57:21 | x | impl/unsafeShell.rb:58:23:58:23 | x | provenance | | +| impl/unsafeShell.rb:61:20:61:20 | x | impl/unsafeShell.rb:63:14:63:14 | x | provenance | | +| impl/unsafeShell.rb:63:5:63:7 | [post] arr [element] | impl/unsafeShell.rb:64:14:64:16 | arr | provenance | | +| impl/unsafeShell.rb:63:5:63:7 | [post] arr [element] | impl/unsafeShell.rb:68:14:68:16 | arr | provenance | | +| impl/unsafeShell.rb:63:14:63:14 | x | impl/unsafeShell.rb:63:5:63:7 | [post] arr [element] | provenance | | nodes | impl/sub/notImported.rb:2:12:2:17 | target | semmle.label | target | | impl/sub/notImported.rb:3:19:3:27 | #{...} | semmle.label | #{...} | diff --git a/ruby/ql/test/query-tests/security/cwe-079/ReflectedXSS.expected b/ruby/ql/test/query-tests/security/cwe-079/ReflectedXSS.expected index 284cd463d02..650168f7bce 100644 --- a/ruby/ql/test/query-tests/security/cwe-079/ReflectedXSS.expected +++ b/ruby/ql/test/query-tests/security/cwe-079/ReflectedXSS.expected @@ -1,46 +1,46 @@ edges -| app/controllers/foo/bars_controller.rb:9:12:9:17 | call to params | app/controllers/foo/bars_controller.rb:9:12:9:29 | ...[...] | -| app/controllers/foo/bars_controller.rb:9:12:9:29 | ...[...] | app/views/foo/bars/show.html.erb:46:5:46:13 | call to user_name | -| app/controllers/foo/bars_controller.rb:13:5:13:14 | [post] self [@user_name] | app/controllers/foo/bars_controller.rb:13:5:13:14 | [post] self [@user_name] | -| app/controllers/foo/bars_controller.rb:13:5:13:14 | [post] self [@user_name] | app/views/foo/bars/show.html.erb:50:5:50:18 | call to user_name_memo | -| app/controllers/foo/bars_controller.rb:13:20:13:25 | call to params | app/controllers/foo/bars_controller.rb:13:20:13:37 | ...[...] | -| app/controllers/foo/bars_controller.rb:13:20:13:37 | ...[...] | app/controllers/foo/bars_controller.rb:13:5:13:14 | [post] self [@user_name] | -| app/controllers/foo/bars_controller.rb:13:20:13:37 | ...[...] | app/views/foo/bars/show.html.erb:50:5:50:18 | call to user_name_memo | -| app/controllers/foo/bars_controller.rb:17:21:17:26 | call to params | app/controllers/foo/bars_controller.rb:17:21:17:36 | ...[...] | -| app/controllers/foo/bars_controller.rb:17:21:17:36 | ...[...] | app/views/foo/bars/show.html.erb:2:18:2:30 | @user_website | -| app/controllers/foo/bars_controller.rb:18:5:18:6 | dt | app/controllers/foo/bars_controller.rb:19:22:19:23 | dt | -| app/controllers/foo/bars_controller.rb:18:10:18:15 | call to params | app/controllers/foo/bars_controller.rb:18:10:18:22 | ...[...] | -| app/controllers/foo/bars_controller.rb:18:10:18:22 | ...[...] | app/controllers/foo/bars_controller.rb:18:5:18:6 | dt | -| app/controllers/foo/bars_controller.rb:19:22:19:23 | dt | app/controllers/foo/bars_controller.rb:26:53:26:54 | dt | -| app/controllers/foo/bars_controller.rb:19:22:19:23 | dt | app/views/foo/bars/show.html.erb:40:3:40:16 | @instance_text | -| app/controllers/foo/bars_controller.rb:24:39:24:44 | call to params | app/controllers/foo/bars_controller.rb:24:39:24:59 | ...[...] | -| app/controllers/foo/bars_controller.rb:24:39:24:59 | ...[...] | app/controllers/foo/bars_controller.rb:24:39:24:59 | ... = ... | -| app/controllers/foo/bars_controller.rb:26:53:26:54 | dt | app/views/foo/bars/show.html.erb:5:9:5:20 | call to display_text | -| app/controllers/foo/bars_controller.rb:26:53:26:54 | dt | app/views/foo/bars/show.html.erb:8:9:8:21 | call to local_assigns [element :display_text] | -| app/controllers/foo/bars_controller.rb:26:53:26:54 | dt | app/views/foo/bars/show.html.erb:12:9:12:21 | call to local_assigns [element :display_text] | -| app/controllers/foo/bars_controller.rb:26:53:26:54 | dt | app/views/foo/bars/show.html.erb:17:15:17:27 | call to local_assigns [element :display_text] | -| app/controllers/foo/bars_controller.rb:26:53:26:54 | dt | app/views/foo/bars/show.html.erb:35:3:35:14 | call to display_text | -| app/controllers/foo/bars_controller.rb:26:53:26:54 | dt | app/views/foo/bars/show.html.erb:43:76:43:87 | call to display_text | -| app/controllers/foo/bars_controller.rb:30:5:30:7 | str | app/controllers/foo/bars_controller.rb:31:5:31:7 | str | -| app/controllers/foo/bars_controller.rb:30:11:30:16 | call to params | app/controllers/foo/bars_controller.rb:30:11:30:28 | ...[...] | -| app/controllers/foo/bars_controller.rb:30:11:30:28 | ...[...] | app/controllers/foo/bars_controller.rb:30:5:30:7 | str | -| app/views/foo/bars/_widget.html.erb:5:9:5:20 | call to display_text [element] | app/views/foo/bars/_widget.html.erb:5:9:5:20 | call to display_text | -| app/views/foo/bars/_widget.html.erb:8:9:8:21 | call to local_assigns [element :display_text, element] | app/views/foo/bars/_widget.html.erb:8:9:8:36 | ...[...] [element] | -| app/views/foo/bars/_widget.html.erb:8:9:8:21 | call to local_assigns [element :display_text] | app/views/foo/bars/_widget.html.erb:8:9:8:36 | ...[...] | -| app/views/foo/bars/_widget.html.erb:8:9:8:36 | ...[...] [element] | app/views/foo/bars/_widget.html.erb:8:9:8:36 | ...[...] | -| app/views/foo/bars/show.html.erb:8:9:8:21 | call to local_assigns [element :display_text] | app/views/foo/bars/show.html.erb:8:9:8:36 | ...[...] | -| app/views/foo/bars/show.html.erb:12:9:12:21 | call to local_assigns [element :display_text] | app/views/foo/bars/show.html.erb:12:9:12:26 | ...[...] | -| app/views/foo/bars/show.html.erb:17:15:17:27 | call to local_assigns [element :display_text] | app/views/foo/bars/show.html.erb:17:15:17:32 | ...[...] | -| app/views/foo/bars/show.html.erb:43:64:43:87 | ... + ... | app/views/foo/bars/_widget.html.erb:5:9:5:20 | call to display_text | -| app/views/foo/bars/show.html.erb:43:64:43:87 | ... + ... | app/views/foo/bars/_widget.html.erb:8:9:8:21 | call to local_assigns [element :display_text] | -| app/views/foo/bars/show.html.erb:43:64:43:87 | ... + ... [element] | app/views/foo/bars/_widget.html.erb:5:9:5:20 | call to display_text [element] | -| app/views/foo/bars/show.html.erb:43:64:43:87 | ... + ... [element] | app/views/foo/bars/_widget.html.erb:8:9:8:21 | call to local_assigns [element :display_text, element] | -| app/views/foo/bars/show.html.erb:43:76:43:87 | call to display_text | app/views/foo/bars/show.html.erb:43:64:43:87 | ... + ... | -| app/views/foo/bars/show.html.erb:43:76:43:87 | call to display_text | app/views/foo/bars/show.html.erb:43:64:43:87 | ... + ... [element] | -| app/views/foo/bars/show.html.erb:53:29:53:34 | call to params | app/views/foo/bars/show.html.erb:53:29:53:44 | ...[...] | -| app/views/foo/bars/show.html.erb:56:13:56:18 | call to params | app/views/foo/bars/show.html.erb:56:13:56:28 | ...[...] | -| app/views/foo/bars/show.html.erb:73:19:73:24 | call to params | app/views/foo/bars/show.html.erb:73:19:73:34 | ...[...] | -| app/views/foo/bars/show.html.erb:76:28:76:33 | call to params | app/views/foo/bars/show.html.erb:76:28:76:39 | ...[...] | +| app/controllers/foo/bars_controller.rb:9:12:9:17 | call to params | app/controllers/foo/bars_controller.rb:9:12:9:29 | ...[...] | provenance | | +| app/controllers/foo/bars_controller.rb:9:12:9:29 | ...[...] | app/views/foo/bars/show.html.erb:46:5:46:13 | call to user_name | provenance | | +| app/controllers/foo/bars_controller.rb:13:5:13:14 | [post] self [@user_name] | app/controllers/foo/bars_controller.rb:13:5:13:14 | [post] self [@user_name] | provenance | | +| app/controllers/foo/bars_controller.rb:13:5:13:14 | [post] self [@user_name] | app/views/foo/bars/show.html.erb:50:5:50:18 | call to user_name_memo | provenance | | +| app/controllers/foo/bars_controller.rb:13:20:13:25 | call to params | app/controllers/foo/bars_controller.rb:13:20:13:37 | ...[...] | provenance | | +| app/controllers/foo/bars_controller.rb:13:20:13:37 | ...[...] | app/controllers/foo/bars_controller.rb:13:5:13:14 | [post] self [@user_name] | provenance | | +| app/controllers/foo/bars_controller.rb:13:20:13:37 | ...[...] | app/views/foo/bars/show.html.erb:50:5:50:18 | call to user_name_memo | provenance | | +| app/controllers/foo/bars_controller.rb:17:21:17:26 | call to params | app/controllers/foo/bars_controller.rb:17:21:17:36 | ...[...] | provenance | | +| app/controllers/foo/bars_controller.rb:17:21:17:36 | ...[...] | app/views/foo/bars/show.html.erb:2:18:2:30 | @user_website | provenance | | +| app/controllers/foo/bars_controller.rb:18:5:18:6 | dt | app/controllers/foo/bars_controller.rb:19:22:19:23 | dt | provenance | | +| app/controllers/foo/bars_controller.rb:18:10:18:15 | call to params | app/controllers/foo/bars_controller.rb:18:10:18:22 | ...[...] | provenance | | +| app/controllers/foo/bars_controller.rb:18:10:18:22 | ...[...] | app/controllers/foo/bars_controller.rb:18:5:18:6 | dt | provenance | | +| app/controllers/foo/bars_controller.rb:19:22:19:23 | dt | app/controllers/foo/bars_controller.rb:26:53:26:54 | dt | provenance | | +| app/controllers/foo/bars_controller.rb:19:22:19:23 | dt | app/views/foo/bars/show.html.erb:40:3:40:16 | @instance_text | provenance | | +| app/controllers/foo/bars_controller.rb:24:39:24:44 | call to params | app/controllers/foo/bars_controller.rb:24:39:24:59 | ...[...] | provenance | | +| app/controllers/foo/bars_controller.rb:24:39:24:59 | ...[...] | app/controllers/foo/bars_controller.rb:24:39:24:59 | ... = ... | provenance | | +| app/controllers/foo/bars_controller.rb:26:53:26:54 | dt | app/views/foo/bars/show.html.erb:5:9:5:20 | call to display_text | provenance | | +| app/controllers/foo/bars_controller.rb:26:53:26:54 | dt | app/views/foo/bars/show.html.erb:8:9:8:21 | call to local_assigns [element :display_text] | provenance | | +| app/controllers/foo/bars_controller.rb:26:53:26:54 | dt | app/views/foo/bars/show.html.erb:12:9:12:21 | call to local_assigns [element :display_text] | provenance | | +| app/controllers/foo/bars_controller.rb:26:53:26:54 | dt | app/views/foo/bars/show.html.erb:17:15:17:27 | call to local_assigns [element :display_text] | provenance | | +| app/controllers/foo/bars_controller.rb:26:53:26:54 | dt | app/views/foo/bars/show.html.erb:35:3:35:14 | call to display_text | provenance | | +| app/controllers/foo/bars_controller.rb:26:53:26:54 | dt | app/views/foo/bars/show.html.erb:43:76:43:87 | call to display_text | provenance | | +| app/controllers/foo/bars_controller.rb:30:5:30:7 | str | app/controllers/foo/bars_controller.rb:31:5:31:7 | str | provenance | | +| app/controllers/foo/bars_controller.rb:30:11:30:16 | call to params | app/controllers/foo/bars_controller.rb:30:11:30:28 | ...[...] | provenance | | +| app/controllers/foo/bars_controller.rb:30:11:30:28 | ...[...] | app/controllers/foo/bars_controller.rb:30:5:30:7 | str | provenance | | +| app/views/foo/bars/_widget.html.erb:5:9:5:20 | call to display_text [element] | app/views/foo/bars/_widget.html.erb:5:9:5:20 | call to display_text | provenance | | +| app/views/foo/bars/_widget.html.erb:8:9:8:21 | call to local_assigns [element :display_text, element] | app/views/foo/bars/_widget.html.erb:8:9:8:36 | ...[...] [element] | provenance | | +| app/views/foo/bars/_widget.html.erb:8:9:8:21 | call to local_assigns [element :display_text] | app/views/foo/bars/_widget.html.erb:8:9:8:36 | ...[...] | provenance | | +| app/views/foo/bars/_widget.html.erb:8:9:8:36 | ...[...] [element] | app/views/foo/bars/_widget.html.erb:8:9:8:36 | ...[...] | provenance | | +| app/views/foo/bars/show.html.erb:8:9:8:21 | call to local_assigns [element :display_text] | app/views/foo/bars/show.html.erb:8:9:8:36 | ...[...] | provenance | | +| app/views/foo/bars/show.html.erb:12:9:12:21 | call to local_assigns [element :display_text] | app/views/foo/bars/show.html.erb:12:9:12:26 | ...[...] | provenance | | +| app/views/foo/bars/show.html.erb:17:15:17:27 | call to local_assigns [element :display_text] | app/views/foo/bars/show.html.erb:17:15:17:32 | ...[...] | provenance | | +| app/views/foo/bars/show.html.erb:43:64:43:87 | ... + ... | app/views/foo/bars/_widget.html.erb:5:9:5:20 | call to display_text | provenance | | +| app/views/foo/bars/show.html.erb:43:64:43:87 | ... + ... | app/views/foo/bars/_widget.html.erb:8:9:8:21 | call to local_assigns [element :display_text] | provenance | | +| app/views/foo/bars/show.html.erb:43:64:43:87 | ... + ... [element] | app/views/foo/bars/_widget.html.erb:5:9:5:20 | call to display_text [element] | provenance | | +| app/views/foo/bars/show.html.erb:43:64:43:87 | ... + ... [element] | app/views/foo/bars/_widget.html.erb:8:9:8:21 | call to local_assigns [element :display_text, element] | provenance | | +| app/views/foo/bars/show.html.erb:43:76:43:87 | call to display_text | app/views/foo/bars/show.html.erb:43:64:43:87 | ... + ... | provenance | | +| app/views/foo/bars/show.html.erb:43:76:43:87 | call to display_text | app/views/foo/bars/show.html.erb:43:64:43:87 | ... + ... [element] | provenance | | +| app/views/foo/bars/show.html.erb:53:29:53:34 | call to params | app/views/foo/bars/show.html.erb:53:29:53:44 | ...[...] | provenance | | +| app/views/foo/bars/show.html.erb:56:13:56:18 | call to params | app/views/foo/bars/show.html.erb:56:13:56:28 | ...[...] | provenance | | +| app/views/foo/bars/show.html.erb:73:19:73:24 | call to params | app/views/foo/bars/show.html.erb:73:19:73:34 | ...[...] | provenance | | +| app/views/foo/bars/show.html.erb:76:28:76:33 | call to params | app/views/foo/bars/show.html.erb:76:28:76:39 | ...[...] | provenance | | nodes | app/controllers/foo/bars_controller.rb:9:12:9:17 | call to params | semmle.label | call to params | | app/controllers/foo/bars_controller.rb:9:12:9:29 | ...[...] | semmle.label | ...[...] | diff --git a/ruby/ql/test/query-tests/security/cwe-079/StoredXSS.expected b/ruby/ql/test/query-tests/security/cwe-079/StoredXSS.expected index 2cf4aff6400..8ae455760c1 100644 --- a/ruby/ql/test/query-tests/security/cwe-079/StoredXSS.expected +++ b/ruby/ql/test/query-tests/security/cwe-079/StoredXSS.expected @@ -1,28 +1,28 @@ edges -| app/controllers/foo/stores_controller.rb:8:5:8:6 | dt | app/controllers/foo/stores_controller.rb:9:22:9:23 | dt | -| app/controllers/foo/stores_controller.rb:8:10:8:29 | call to read | app/controllers/foo/stores_controller.rb:8:5:8:6 | dt | -| app/controllers/foo/stores_controller.rb:9:22:9:23 | dt | app/controllers/foo/stores_controller.rb:13:55:13:56 | dt | -| app/controllers/foo/stores_controller.rb:9:22:9:23 | dt | app/views/foo/stores/show.html.erb:37:3:37:16 | @instance_text | -| app/controllers/foo/stores_controller.rb:13:55:13:56 | dt | app/views/foo/stores/show.html.erb:2:9:2:20 | call to display_text | -| app/controllers/foo/stores_controller.rb:13:55:13:56 | dt | app/views/foo/stores/show.html.erb:5:9:5:21 | call to local_assigns [element :display_text] | -| app/controllers/foo/stores_controller.rb:13:55:13:56 | dt | app/views/foo/stores/show.html.erb:9:9:9:21 | call to local_assigns [element :display_text] | -| app/controllers/foo/stores_controller.rb:13:55:13:56 | dt | app/views/foo/stores/show.html.erb:14:15:14:27 | call to local_assigns [element :display_text] | -| app/controllers/foo/stores_controller.rb:13:55:13:56 | dt | app/views/foo/stores/show.html.erb:32:3:32:14 | call to display_text | -| app/controllers/foo/stores_controller.rb:13:55:13:56 | dt | app/views/foo/stores/show.html.erb:40:76:40:87 | call to display_text | -| app/views/foo/bars/_widget.html.erb:5:9:5:20 | call to display_text [element] | app/views/foo/bars/_widget.html.erb:5:9:5:20 | call to display_text | -| app/views/foo/bars/_widget.html.erb:8:9:8:21 | call to local_assigns [element :display_text, element] | app/views/foo/bars/_widget.html.erb:8:9:8:36 | ...[...] [element] | -| app/views/foo/bars/_widget.html.erb:8:9:8:21 | call to local_assigns [element :display_text] | app/views/foo/bars/_widget.html.erb:8:9:8:36 | ...[...] | -| app/views/foo/bars/_widget.html.erb:8:9:8:36 | ...[...] [element] | app/views/foo/bars/_widget.html.erb:8:9:8:36 | ...[...] | -| app/views/foo/stores/show.html.erb:5:9:5:21 | call to local_assigns [element :display_text] | app/views/foo/stores/show.html.erb:5:9:5:36 | ...[...] | -| app/views/foo/stores/show.html.erb:9:9:9:21 | call to local_assigns [element :display_text] | app/views/foo/stores/show.html.erb:9:9:9:26 | ...[...] | -| app/views/foo/stores/show.html.erb:14:15:14:27 | call to local_assigns [element :display_text] | app/views/foo/stores/show.html.erb:14:15:14:32 | ...[...] | -| app/views/foo/stores/show.html.erb:40:64:40:87 | ... + ... | app/views/foo/bars/_widget.html.erb:5:9:5:20 | call to display_text | -| app/views/foo/stores/show.html.erb:40:64:40:87 | ... + ... | app/views/foo/bars/_widget.html.erb:8:9:8:21 | call to local_assigns [element :display_text] | -| app/views/foo/stores/show.html.erb:40:64:40:87 | ... + ... [element] | app/views/foo/bars/_widget.html.erb:5:9:5:20 | call to display_text [element] | -| app/views/foo/stores/show.html.erb:40:64:40:87 | ... + ... [element] | app/views/foo/bars/_widget.html.erb:8:9:8:21 | call to local_assigns [element :display_text, element] | -| app/views/foo/stores/show.html.erb:40:76:40:87 | call to display_text | app/views/foo/stores/show.html.erb:40:64:40:87 | ... + ... | -| app/views/foo/stores/show.html.erb:40:76:40:87 | call to display_text | app/views/foo/stores/show.html.erb:40:64:40:87 | ... + ... [element] | -| app/views/foo/stores/show.html.erb:86:17:86:28 | call to handle | app/views/foo/stores/show.html.erb:86:3:86:29 | call to sprintf | +| app/controllers/foo/stores_controller.rb:8:5:8:6 | dt | app/controllers/foo/stores_controller.rb:9:22:9:23 | dt | provenance | | +| app/controllers/foo/stores_controller.rb:8:10:8:29 | call to read | app/controllers/foo/stores_controller.rb:8:5:8:6 | dt | provenance | | +| app/controllers/foo/stores_controller.rb:9:22:9:23 | dt | app/controllers/foo/stores_controller.rb:13:55:13:56 | dt | provenance | | +| app/controllers/foo/stores_controller.rb:9:22:9:23 | dt | app/views/foo/stores/show.html.erb:37:3:37:16 | @instance_text | provenance | | +| app/controllers/foo/stores_controller.rb:13:55:13:56 | dt | app/views/foo/stores/show.html.erb:2:9:2:20 | call to display_text | provenance | | +| app/controllers/foo/stores_controller.rb:13:55:13:56 | dt | app/views/foo/stores/show.html.erb:5:9:5:21 | call to local_assigns [element :display_text] | provenance | | +| app/controllers/foo/stores_controller.rb:13:55:13:56 | dt | app/views/foo/stores/show.html.erb:9:9:9:21 | call to local_assigns [element :display_text] | provenance | | +| app/controllers/foo/stores_controller.rb:13:55:13:56 | dt | app/views/foo/stores/show.html.erb:14:15:14:27 | call to local_assigns [element :display_text] | provenance | | +| app/controllers/foo/stores_controller.rb:13:55:13:56 | dt | app/views/foo/stores/show.html.erb:32:3:32:14 | call to display_text | provenance | | +| app/controllers/foo/stores_controller.rb:13:55:13:56 | dt | app/views/foo/stores/show.html.erb:40:76:40:87 | call to display_text | provenance | | +| app/views/foo/bars/_widget.html.erb:5:9:5:20 | call to display_text [element] | app/views/foo/bars/_widget.html.erb:5:9:5:20 | call to display_text | provenance | | +| app/views/foo/bars/_widget.html.erb:8:9:8:21 | call to local_assigns [element :display_text, element] | app/views/foo/bars/_widget.html.erb:8:9:8:36 | ...[...] [element] | provenance | | +| app/views/foo/bars/_widget.html.erb:8:9:8:21 | call to local_assigns [element :display_text] | app/views/foo/bars/_widget.html.erb:8:9:8:36 | ...[...] | provenance | | +| app/views/foo/bars/_widget.html.erb:8:9:8:36 | ...[...] [element] | app/views/foo/bars/_widget.html.erb:8:9:8:36 | ...[...] | provenance | | +| app/views/foo/stores/show.html.erb:5:9:5:21 | call to local_assigns [element :display_text] | app/views/foo/stores/show.html.erb:5:9:5:36 | ...[...] | provenance | | +| app/views/foo/stores/show.html.erb:9:9:9:21 | call to local_assigns [element :display_text] | app/views/foo/stores/show.html.erb:9:9:9:26 | ...[...] | provenance | | +| app/views/foo/stores/show.html.erb:14:15:14:27 | call to local_assigns [element :display_text] | app/views/foo/stores/show.html.erb:14:15:14:32 | ...[...] | provenance | | +| app/views/foo/stores/show.html.erb:40:64:40:87 | ... + ... | app/views/foo/bars/_widget.html.erb:5:9:5:20 | call to display_text | provenance | | +| app/views/foo/stores/show.html.erb:40:64:40:87 | ... + ... | app/views/foo/bars/_widget.html.erb:8:9:8:21 | call to local_assigns [element :display_text] | provenance | | +| app/views/foo/stores/show.html.erb:40:64:40:87 | ... + ... [element] | app/views/foo/bars/_widget.html.erb:5:9:5:20 | call to display_text [element] | provenance | | +| app/views/foo/stores/show.html.erb:40:64:40:87 | ... + ... [element] | app/views/foo/bars/_widget.html.erb:8:9:8:21 | call to local_assigns [element :display_text, element] | provenance | | +| app/views/foo/stores/show.html.erb:40:76:40:87 | call to display_text | app/views/foo/stores/show.html.erb:40:64:40:87 | ... + ... | provenance | | +| app/views/foo/stores/show.html.erb:40:76:40:87 | call to display_text | app/views/foo/stores/show.html.erb:40:64:40:87 | ... + ... [element] | provenance | | +| app/views/foo/stores/show.html.erb:86:17:86:28 | call to handle | app/views/foo/stores/show.html.erb:86:3:86:29 | call to sprintf | provenance | | nodes | app/controllers/foo/stores_controller.rb:8:5:8:6 | dt | semmle.label | dt | | app/controllers/foo/stores_controller.rb:8:10:8:29 | call to read | semmle.label | call to read | diff --git a/ruby/ql/test/query-tests/security/cwe-079/UnsafeHtmlConstruction.expected b/ruby/ql/test/query-tests/security/cwe-079/UnsafeHtmlConstruction.expected index 064d5a2e1dc..b9019c8f1d0 100644 --- a/ruby/ql/test/query-tests/security/cwe-079/UnsafeHtmlConstruction.expected +++ b/ruby/ql/test/query-tests/security/cwe-079/UnsafeHtmlConstruction.expected @@ -1,7 +1,7 @@ edges -| lib/unsafeHtml.rb:2:31:2:34 | name | lib/unsafeHtml.rb:3:10:3:16 | #{...} | -| lib/unsafeHtml.rb:9:27:9:30 | name | lib/unsafeHtml.rb:11:13:11:19 | #{...} | -| lib/unsafeHtml.rb:16:19:16:22 | name | lib/unsafeHtml.rb:17:28:17:31 | name | +| lib/unsafeHtml.rb:2:31:2:34 | name | lib/unsafeHtml.rb:3:10:3:16 | #{...} | provenance | | +| lib/unsafeHtml.rb:9:27:9:30 | name | lib/unsafeHtml.rb:11:13:11:19 | #{...} | provenance | | +| lib/unsafeHtml.rb:16:19:16:22 | name | lib/unsafeHtml.rb:17:28:17:31 | name | provenance | | nodes | lib/unsafeHtml.rb:2:31:2:34 | name | semmle.label | name | | lib/unsafeHtml.rb:3:10:3:16 | #{...} | semmle.label | #{...} | diff --git a/ruby/ql/test/query-tests/security/cwe-089/SqlInjection.expected b/ruby/ql/test/query-tests/security/cwe-089/SqlInjection.expected index 266da5b21fe..1f9b8483f3b 100644 --- a/ruby/ql/test/query-tests/security/cwe-089/SqlInjection.expected +++ b/ruby/ql/test/query-tests/security/cwe-089/SqlInjection.expected @@ -1,83 +1,83 @@ edges -| ActiveRecordInjection.rb:8:25:8:28 | name | ActiveRecordInjection.rb:10:33:10:67 | "name='#{...}' and pass='#{...}'" | -| ActiveRecordInjection.rb:8:31:8:34 | pass | ActiveRecordInjection.rb:10:33:10:67 | "name='#{...}' and pass='#{...}'" | -| ActiveRecordInjection.rb:20:22:20:30 | condition | ActiveRecordInjection.rb:23:16:23:24 | condition | -| ActiveRecordInjection.rb:35:30:35:35 | call to params | ActiveRecordInjection.rb:35:30:35:44 | ...[...] | -| ActiveRecordInjection.rb:39:18:39:23 | call to params | ActiveRecordInjection.rb:39:18:39:32 | ...[...] | -| ActiveRecordInjection.rb:43:29:43:34 | call to params | ActiveRecordInjection.rb:43:29:43:39 | ...[...] | -| ActiveRecordInjection.rb:43:29:43:39 | ...[...] | ActiveRecordInjection.rb:43:20:43:42 | "id = '#{...}'" | -| ActiveRecordInjection.rb:48:30:48:35 | call to params | ActiveRecordInjection.rb:48:30:48:40 | ...[...] | -| ActiveRecordInjection.rb:48:30:48:40 | ...[...] | ActiveRecordInjection.rb:48:21:48:43 | "id = '#{...}'" | -| ActiveRecordInjection.rb:52:22:52:44 | "id = '#{...}'" | ActiveRecordInjection.rb:52:21:52:45 | call to [] | -| ActiveRecordInjection.rb:52:31:52:36 | call to params | ActiveRecordInjection.rb:52:31:52:41 | ...[...] | -| ActiveRecordInjection.rb:52:31:52:41 | ...[...] | ActiveRecordInjection.rb:52:22:52:44 | "id = '#{...}'" | -| ActiveRecordInjection.rb:57:23:57:45 | "id = '#{...}'" | ActiveRecordInjection.rb:57:22:57:46 | call to [] | -| ActiveRecordInjection.rb:57:32:57:37 | call to params | ActiveRecordInjection.rb:57:32:57:42 | ...[...] | -| ActiveRecordInjection.rb:57:32:57:42 | ...[...] | ActiveRecordInjection.rb:57:23:57:45 | "id = '#{...}'" | -| ActiveRecordInjection.rb:62:21:62:26 | call to params | ActiveRecordInjection.rb:62:21:62:35 | ...[...] | -| ActiveRecordInjection.rb:62:21:62:35 | ...[...] | ActiveRecordInjection.rb:61:16:61:21 | <<-SQL | -| ActiveRecordInjection.rb:68:34:68:39 | call to params | ActiveRecordInjection.rb:68:34:68:44 | ...[...] | -| ActiveRecordInjection.rb:68:34:68:44 | ...[...] | ActiveRecordInjection.rb:68:20:68:47 | "user.id = '#{...}'" | -| ActiveRecordInjection.rb:70:23:70:28 | call to params | ActiveRecordInjection.rb:70:23:70:35 | ...[...] | -| ActiveRecordInjection.rb:70:23:70:35 | ...[...] | ActiveRecordInjection.rb:8:25:8:28 | name | -| ActiveRecordInjection.rb:70:38:70:43 | call to params | ActiveRecordInjection.rb:70:38:70:50 | ...[...] | -| ActiveRecordInjection.rb:70:38:70:50 | ...[...] | ActiveRecordInjection.rb:8:31:8:34 | pass | -| ActiveRecordInjection.rb:74:41:74:46 | call to params | ActiveRecordInjection.rb:74:41:74:51 | ...[...] | -| ActiveRecordInjection.rb:74:41:74:51 | ...[...] | ActiveRecordInjection.rb:74:32:74:54 | "id = '#{...}'" | -| ActiveRecordInjection.rb:79:23:79:28 | call to params | ActiveRecordInjection.rb:79:23:79:35 | ...[...] | -| ActiveRecordInjection.rb:83:17:83:22 | call to params | ActiveRecordInjection.rb:83:17:83:31 | ...[...] | -| ActiveRecordInjection.rb:84:19:84:24 | call to params | ActiveRecordInjection.rb:84:19:84:33 | ...[...] | -| ActiveRecordInjection.rb:88:18:88:23 | call to params | ActiveRecordInjection.rb:88:18:88:35 | ...[...] | -| ActiveRecordInjection.rb:92:21:92:26 | call to params | ActiveRecordInjection.rb:92:21:92:35 | ...[...] | -| ActiveRecordInjection.rb:100:31:100:36 | call to params | ActiveRecordInjection.rb:100:31:100:52 | ...[...] | -| ActiveRecordInjection.rb:100:31:100:52 | ...[...] | ActiveRecordInjection.rb:100:20:100:55 | "name = '#{...}'" | -| ActiveRecordInjection.rb:104:30:104:35 | call to params | ActiveRecordInjection.rb:104:30:104:51 | ...[...] | -| ActiveRecordInjection.rb:104:30:104:51 | ...[...] | ActiveRecordInjection.rb:104:19:104:54 | "name = '#{...}'" | -| ActiveRecordInjection.rb:106:18:106:23 | call to params | ActiveRecordInjection.rb:106:18:106:35 | ...[...] | -| ActiveRecordInjection.rb:108:23:108:28 | call to params | ActiveRecordInjection.rb:108:23:108:47 | ...[...] | -| ActiveRecordInjection.rb:114:5:114:6 | ps | ActiveRecordInjection.rb:115:11:115:12 | ps | -| ActiveRecordInjection.rb:114:10:114:15 | call to params | ActiveRecordInjection.rb:114:5:114:6 | ps | -| ActiveRecordInjection.rb:115:5:115:7 | uid | ActiveRecordInjection.rb:116:5:116:9 | uidEq | -| ActiveRecordInjection.rb:115:11:115:12 | ps | ActiveRecordInjection.rb:115:11:115:17 | ...[...] | -| ActiveRecordInjection.rb:115:11:115:17 | ...[...] | ActiveRecordInjection.rb:115:5:115:7 | uid | -| ActiveRecordInjection.rb:116:5:116:9 | uidEq | ActiveRecordInjection.rb:120:20:120:32 | ... + ... | -| ActiveRecordInjection.rb:116:5:116:9 | uidEq | ActiveRecordInjection.rb:120:28:120:32 | uidEq | -| ActiveRecordInjection.rb:120:20:120:32 | ... + ... [element] | ActiveRecordInjection.rb:120:20:120:32 | ... + ... | -| ActiveRecordInjection.rb:120:28:120:32 | uidEq | ActiveRecordInjection.rb:120:20:120:32 | ... + ... [element] | -| ActiveRecordInjection.rb:153:21:153:26 | call to params | ActiveRecordInjection.rb:153:21:153:44 | ...[...] | -| ActiveRecordInjection.rb:153:21:153:26 | call to params | ActiveRecordInjection.rb:153:21:153:44 | ...[...] | -| ActiveRecordInjection.rb:153:21:153:44 | ...[...] | ActiveRecordInjection.rb:20:22:20:30 | condition | -| ActiveRecordInjection.rb:167:59:167:64 | call to params | ActiveRecordInjection.rb:167:59:167:74 | ...[...] | -| ActiveRecordInjection.rb:167:59:167:74 | ...[...] | ActiveRecordInjection.rb:167:27:167:76 | "this is an unsafe annotation:..." | -| ActiveRecordInjection.rb:178:5:178:13 | my_params | ActiveRecordInjection.rb:179:47:179:55 | my_params | -| ActiveRecordInjection.rb:178:17:178:32 | call to permitted_params | ActiveRecordInjection.rb:178:5:178:13 | my_params | -| ActiveRecordInjection.rb:179:5:179:9 | query | ActiveRecordInjection.rb:180:37:180:41 | query | -| ActiveRecordInjection.rb:179:47:179:55 | my_params | ActiveRecordInjection.rb:179:47:179:65 | ...[...] | -| ActiveRecordInjection.rb:179:47:179:65 | ...[...] | ActiveRecordInjection.rb:179:5:179:9 | query | -| ActiveRecordInjection.rb:185:5:185:10 | call to params | ActiveRecordInjection.rb:185:5:185:27 | call to require | -| ActiveRecordInjection.rb:185:5:185:27 | call to require | ActiveRecordInjection.rb:185:5:185:59 | call to permit | -| ActiveRecordInjection.rb:185:5:185:59 | call to permit | ActiveRecordInjection.rb:178:17:178:32 | call to permitted_params | -| ActiveRecordInjection.rb:185:5:185:59 | call to permit | ActiveRecordInjection.rb:189:77:189:92 | call to permitted_params | -| ActiveRecordInjection.rb:185:5:185:59 | call to permit | ActiveRecordInjection.rb:190:69:190:84 | call to permitted_params | -| ActiveRecordInjection.rb:189:77:189:92 | call to permitted_params | ActiveRecordInjection.rb:189:77:189:102 | ...[...] | -| ActiveRecordInjection.rb:189:77:189:102 | ...[...] | ActiveRecordInjection.rb:189:43:189:104 | "SELECT * FROM users WHERE id ..." | -| ActiveRecordInjection.rb:190:69:190:84 | call to permitted_params | ActiveRecordInjection.rb:190:69:190:94 | ...[...] | -| ActiveRecordInjection.rb:190:69:190:94 | ...[...] | ActiveRecordInjection.rb:190:35:190:96 | "SELECT * FROM users WHERE id ..." | -| ArelInjection.rb:4:5:4:8 | name | ArelInjection.rb:6:20:6:61 | "SELECT * FROM users WHERE nam..." | -| ArelInjection.rb:4:12:4:17 | call to params | ArelInjection.rb:4:12:4:29 | ...[...] | -| ArelInjection.rb:4:12:4:29 | ...[...] | ArelInjection.rb:4:5:4:8 | name | -| PgInjection.rb:6:5:6:8 | name | PgInjection.rb:13:5:13:8 | qry1 | -| PgInjection.rb:6:5:6:8 | name | PgInjection.rb:19:5:19:8 | qry2 | -| PgInjection.rb:6:5:6:8 | name | PgInjection.rb:31:5:31:8 | qry3 | -| PgInjection.rb:6:5:6:8 | name | PgInjection.rb:43:5:43:8 | qry3 | -| PgInjection.rb:6:12:6:17 | call to params | PgInjection.rb:6:12:6:24 | ...[...] | -| PgInjection.rb:6:12:6:24 | ...[...] | PgInjection.rb:6:5:6:8 | name | -| PgInjection.rb:13:5:13:8 | qry1 | PgInjection.rb:14:15:14:18 | qry1 | -| PgInjection.rb:13:5:13:8 | qry1 | PgInjection.rb:15:21:15:24 | qry1 | -| PgInjection.rb:19:5:19:8 | qry2 | PgInjection.rb:20:22:20:25 | qry2 | -| PgInjection.rb:19:5:19:8 | qry2 | PgInjection.rb:21:28:21:31 | qry2 | -| PgInjection.rb:31:5:31:8 | qry3 | PgInjection.rb:32:29:32:32 | qry3 | -| PgInjection.rb:43:5:43:8 | qry3 | PgInjection.rb:44:29:44:32 | qry3 | +| ActiveRecordInjection.rb:8:25:8:28 | name | ActiveRecordInjection.rb:10:33:10:67 | "name='#{...}' and pass='#{...}'" | provenance | | +| ActiveRecordInjection.rb:8:31:8:34 | pass | ActiveRecordInjection.rb:10:33:10:67 | "name='#{...}' and pass='#{...}'" | provenance | | +| ActiveRecordInjection.rb:20:22:20:30 | condition | ActiveRecordInjection.rb:23:16:23:24 | condition | provenance | | +| ActiveRecordInjection.rb:35:30:35:35 | call to params | ActiveRecordInjection.rb:35:30:35:44 | ...[...] | provenance | | +| ActiveRecordInjection.rb:39:18:39:23 | call to params | ActiveRecordInjection.rb:39:18:39:32 | ...[...] | provenance | | +| ActiveRecordInjection.rb:43:29:43:34 | call to params | ActiveRecordInjection.rb:43:29:43:39 | ...[...] | provenance | | +| ActiveRecordInjection.rb:43:29:43:39 | ...[...] | ActiveRecordInjection.rb:43:20:43:42 | "id = '#{...}'" | provenance | | +| ActiveRecordInjection.rb:48:30:48:35 | call to params | ActiveRecordInjection.rb:48:30:48:40 | ...[...] | provenance | | +| ActiveRecordInjection.rb:48:30:48:40 | ...[...] | ActiveRecordInjection.rb:48:21:48:43 | "id = '#{...}'" | provenance | | +| ActiveRecordInjection.rb:52:22:52:44 | "id = '#{...}'" | ActiveRecordInjection.rb:52:21:52:45 | call to [] | provenance | | +| ActiveRecordInjection.rb:52:31:52:36 | call to params | ActiveRecordInjection.rb:52:31:52:41 | ...[...] | provenance | | +| ActiveRecordInjection.rb:52:31:52:41 | ...[...] | ActiveRecordInjection.rb:52:22:52:44 | "id = '#{...}'" | provenance | | +| ActiveRecordInjection.rb:57:23:57:45 | "id = '#{...}'" | ActiveRecordInjection.rb:57:22:57:46 | call to [] | provenance | | +| ActiveRecordInjection.rb:57:32:57:37 | call to params | ActiveRecordInjection.rb:57:32:57:42 | ...[...] | provenance | | +| ActiveRecordInjection.rb:57:32:57:42 | ...[...] | ActiveRecordInjection.rb:57:23:57:45 | "id = '#{...}'" | provenance | | +| ActiveRecordInjection.rb:62:21:62:26 | call to params | ActiveRecordInjection.rb:62:21:62:35 | ...[...] | provenance | | +| ActiveRecordInjection.rb:62:21:62:35 | ...[...] | ActiveRecordInjection.rb:61:16:61:21 | <<-SQL | provenance | | +| ActiveRecordInjection.rb:68:34:68:39 | call to params | ActiveRecordInjection.rb:68:34:68:44 | ...[...] | provenance | | +| ActiveRecordInjection.rb:68:34:68:44 | ...[...] | ActiveRecordInjection.rb:68:20:68:47 | "user.id = '#{...}'" | provenance | | +| ActiveRecordInjection.rb:70:23:70:28 | call to params | ActiveRecordInjection.rb:70:23:70:35 | ...[...] | provenance | | +| ActiveRecordInjection.rb:70:23:70:35 | ...[...] | ActiveRecordInjection.rb:8:25:8:28 | name | provenance | | +| ActiveRecordInjection.rb:70:38:70:43 | call to params | ActiveRecordInjection.rb:70:38:70:50 | ...[...] | provenance | | +| ActiveRecordInjection.rb:70:38:70:50 | ...[...] | ActiveRecordInjection.rb:8:31:8:34 | pass | provenance | | +| ActiveRecordInjection.rb:74:41:74:46 | call to params | ActiveRecordInjection.rb:74:41:74:51 | ...[...] | provenance | | +| ActiveRecordInjection.rb:74:41:74:51 | ...[...] | ActiveRecordInjection.rb:74:32:74:54 | "id = '#{...}'" | provenance | | +| ActiveRecordInjection.rb:79:23:79:28 | call to params | ActiveRecordInjection.rb:79:23:79:35 | ...[...] | provenance | | +| ActiveRecordInjection.rb:83:17:83:22 | call to params | ActiveRecordInjection.rb:83:17:83:31 | ...[...] | provenance | | +| ActiveRecordInjection.rb:84:19:84:24 | call to params | ActiveRecordInjection.rb:84:19:84:33 | ...[...] | provenance | | +| ActiveRecordInjection.rb:88:18:88:23 | call to params | ActiveRecordInjection.rb:88:18:88:35 | ...[...] | provenance | | +| ActiveRecordInjection.rb:92:21:92:26 | call to params | ActiveRecordInjection.rb:92:21:92:35 | ...[...] | provenance | | +| ActiveRecordInjection.rb:100:31:100:36 | call to params | ActiveRecordInjection.rb:100:31:100:52 | ...[...] | provenance | | +| ActiveRecordInjection.rb:100:31:100:52 | ...[...] | ActiveRecordInjection.rb:100:20:100:55 | "name = '#{...}'" | provenance | | +| ActiveRecordInjection.rb:104:30:104:35 | call to params | ActiveRecordInjection.rb:104:30:104:51 | ...[...] | provenance | | +| ActiveRecordInjection.rb:104:30:104:51 | ...[...] | ActiveRecordInjection.rb:104:19:104:54 | "name = '#{...}'" | provenance | | +| ActiveRecordInjection.rb:106:18:106:23 | call to params | ActiveRecordInjection.rb:106:18:106:35 | ...[...] | provenance | | +| ActiveRecordInjection.rb:108:23:108:28 | call to params | ActiveRecordInjection.rb:108:23:108:47 | ...[...] | provenance | | +| ActiveRecordInjection.rb:114:5:114:6 | ps | ActiveRecordInjection.rb:115:11:115:12 | ps | provenance | | +| ActiveRecordInjection.rb:114:10:114:15 | call to params | ActiveRecordInjection.rb:114:5:114:6 | ps | provenance | | +| ActiveRecordInjection.rb:115:5:115:7 | uid | ActiveRecordInjection.rb:116:5:116:9 | uidEq | provenance | | +| ActiveRecordInjection.rb:115:11:115:12 | ps | ActiveRecordInjection.rb:115:11:115:17 | ...[...] | provenance | | +| ActiveRecordInjection.rb:115:11:115:17 | ...[...] | ActiveRecordInjection.rb:115:5:115:7 | uid | provenance | | +| ActiveRecordInjection.rb:116:5:116:9 | uidEq | ActiveRecordInjection.rb:120:20:120:32 | ... + ... | provenance | | +| ActiveRecordInjection.rb:116:5:116:9 | uidEq | ActiveRecordInjection.rb:120:28:120:32 | uidEq | provenance | | +| ActiveRecordInjection.rb:120:20:120:32 | ... + ... [element] | ActiveRecordInjection.rb:120:20:120:32 | ... + ... | provenance | | +| ActiveRecordInjection.rb:120:28:120:32 | uidEq | ActiveRecordInjection.rb:120:20:120:32 | ... + ... [element] | provenance | | +| ActiveRecordInjection.rb:153:21:153:26 | call to params | ActiveRecordInjection.rb:153:21:153:44 | ...[...] | provenance | | +| ActiveRecordInjection.rb:153:21:153:26 | call to params | ActiveRecordInjection.rb:153:21:153:44 | ...[...] | provenance | | +| ActiveRecordInjection.rb:153:21:153:44 | ...[...] | ActiveRecordInjection.rb:20:22:20:30 | condition | provenance | | +| ActiveRecordInjection.rb:167:59:167:64 | call to params | ActiveRecordInjection.rb:167:59:167:74 | ...[...] | provenance | | +| ActiveRecordInjection.rb:167:59:167:74 | ...[...] | ActiveRecordInjection.rb:167:27:167:76 | "this is an unsafe annotation:..." | provenance | | +| ActiveRecordInjection.rb:178:5:178:13 | my_params | ActiveRecordInjection.rb:179:47:179:55 | my_params | provenance | | +| ActiveRecordInjection.rb:178:17:178:32 | call to permitted_params | ActiveRecordInjection.rb:178:5:178:13 | my_params | provenance | | +| ActiveRecordInjection.rb:179:5:179:9 | query | ActiveRecordInjection.rb:180:37:180:41 | query | provenance | | +| ActiveRecordInjection.rb:179:47:179:55 | my_params | ActiveRecordInjection.rb:179:47:179:65 | ...[...] | provenance | | +| ActiveRecordInjection.rb:179:47:179:65 | ...[...] | ActiveRecordInjection.rb:179:5:179:9 | query | provenance | | +| ActiveRecordInjection.rb:185:5:185:10 | call to params | ActiveRecordInjection.rb:185:5:185:27 | call to require | provenance | | +| ActiveRecordInjection.rb:185:5:185:27 | call to require | ActiveRecordInjection.rb:185:5:185:59 | call to permit | provenance | | +| ActiveRecordInjection.rb:185:5:185:59 | call to permit | ActiveRecordInjection.rb:178:17:178:32 | call to permitted_params | provenance | | +| ActiveRecordInjection.rb:185:5:185:59 | call to permit | ActiveRecordInjection.rb:189:77:189:92 | call to permitted_params | provenance | | +| ActiveRecordInjection.rb:185:5:185:59 | call to permit | ActiveRecordInjection.rb:190:69:190:84 | call to permitted_params | provenance | | +| ActiveRecordInjection.rb:189:77:189:92 | call to permitted_params | ActiveRecordInjection.rb:189:77:189:102 | ...[...] | provenance | | +| ActiveRecordInjection.rb:189:77:189:102 | ...[...] | ActiveRecordInjection.rb:189:43:189:104 | "SELECT * FROM users WHERE id ..." | provenance | | +| ActiveRecordInjection.rb:190:69:190:84 | call to permitted_params | ActiveRecordInjection.rb:190:69:190:94 | ...[...] | provenance | | +| ActiveRecordInjection.rb:190:69:190:94 | ...[...] | ActiveRecordInjection.rb:190:35:190:96 | "SELECT * FROM users WHERE id ..." | provenance | | +| ArelInjection.rb:4:5:4:8 | name | ArelInjection.rb:6:20:6:61 | "SELECT * FROM users WHERE nam..." | provenance | | +| ArelInjection.rb:4:12:4:17 | call to params | ArelInjection.rb:4:12:4:29 | ...[...] | provenance | | +| ArelInjection.rb:4:12:4:29 | ...[...] | ArelInjection.rb:4:5:4:8 | name | provenance | | +| PgInjection.rb:6:5:6:8 | name | PgInjection.rb:13:5:13:8 | qry1 | provenance | | +| PgInjection.rb:6:5:6:8 | name | PgInjection.rb:19:5:19:8 | qry2 | provenance | | +| PgInjection.rb:6:5:6:8 | name | PgInjection.rb:31:5:31:8 | qry3 | provenance | | +| PgInjection.rb:6:5:6:8 | name | PgInjection.rb:43:5:43:8 | qry3 | provenance | | +| PgInjection.rb:6:12:6:17 | call to params | PgInjection.rb:6:12:6:24 | ...[...] | provenance | | +| PgInjection.rb:6:12:6:24 | ...[...] | PgInjection.rb:6:5:6:8 | name | provenance | | +| PgInjection.rb:13:5:13:8 | qry1 | PgInjection.rb:14:15:14:18 | qry1 | provenance | | +| PgInjection.rb:13:5:13:8 | qry1 | PgInjection.rb:15:21:15:24 | qry1 | provenance | | +| PgInjection.rb:19:5:19:8 | qry2 | PgInjection.rb:20:22:20:25 | qry2 | provenance | | +| PgInjection.rb:19:5:19:8 | qry2 | PgInjection.rb:21:28:21:31 | qry2 | provenance | | +| PgInjection.rb:31:5:31:8 | qry3 | PgInjection.rb:32:29:32:32 | qry3 | provenance | | +| PgInjection.rb:43:5:43:8 | qry3 | PgInjection.rb:44:29:44:32 | qry3 | provenance | | nodes | ActiveRecordInjection.rb:8:25:8:28 | name | semmle.label | name | | ActiveRecordInjection.rb:8:31:8:34 | pass | semmle.label | pass | diff --git a/ruby/ql/test/query-tests/security/cwe-094/CodeInjection/CodeInjection.expected b/ruby/ql/test/query-tests/security/cwe-094/CodeInjection/CodeInjection.expected index 8b9e7e3abed..b3f6dfcd5e5 100644 --- a/ruby/ql/test/query-tests/security/cwe-094/CodeInjection/CodeInjection.expected +++ b/ruby/ql/test/query-tests/security/cwe-094/CodeInjection/CodeInjection.expected @@ -1,50 +1,50 @@ edges -| CodeInjection.rb:5:5:5:8 | code | CodeInjection.rb:8:10:8:13 | code | -| CodeInjection.rb:5:5:5:8 | code | CodeInjection.rb:8:10:8:13 | code | -| CodeInjection.rb:5:5:5:8 | code | CodeInjection.rb:20:20:20:23 | code | -| CodeInjection.rb:5:5:5:8 | code | CodeInjection.rb:20:20:20:23 | code | -| CodeInjection.rb:5:5:5:8 | code | CodeInjection.rb:23:21:23:24 | code | -| CodeInjection.rb:5:5:5:8 | code | CodeInjection.rb:23:21:23:24 | code | -| CodeInjection.rb:5:5:5:8 | code | CodeInjection.rb:29:15:29:18 | code | -| CodeInjection.rb:5:5:5:8 | code | CodeInjection.rb:32:19:32:22 | code | -| CodeInjection.rb:5:5:5:8 | code | CodeInjection.rb:38:24:38:27 | code | -| CodeInjection.rb:5:5:5:8 | code | CodeInjection.rb:38:24:38:27 | code | -| CodeInjection.rb:5:5:5:8 | code | CodeInjection.rb:41:40:41:43 | code | -| CodeInjection.rb:5:12:5:17 | call to params | CodeInjection.rb:5:12:5:24 | ...[...] | -| CodeInjection.rb:5:12:5:17 | call to params | CodeInjection.rb:5:12:5:24 | ...[...] | -| CodeInjection.rb:5:12:5:24 | ...[...] | CodeInjection.rb:5:5:5:8 | code | -| CodeInjection.rb:5:12:5:24 | ...[...] | CodeInjection.rb:5:5:5:8 | code | -| CodeInjection.rb:38:24:38:27 | code | CodeInjection.rb:38:10:38:28 | call to escape | -| CodeInjection.rb:38:24:38:27 | code | CodeInjection.rb:38:10:38:28 | call to escape | -| CodeInjection.rb:78:5:78:8 | code | CodeInjection.rb:80:16:80:19 | code | -| CodeInjection.rb:78:5:78:8 | code | CodeInjection.rb:86:10:86:25 | ... + ... | -| CodeInjection.rb:78:5:78:8 | code | CodeInjection.rb:86:10:86:37 | ... + ... | -| CodeInjection.rb:78:5:78:8 | code | CodeInjection.rb:86:22:86:25 | code | -| CodeInjection.rb:78:5:78:8 | code | CodeInjection.rb:88:10:88:32 | "prefix_#{...}_suffix" | -| CodeInjection.rb:78:5:78:8 | code | CodeInjection.rb:90:10:90:13 | code | -| CodeInjection.rb:78:5:78:8 | code | CodeInjection.rb:90:10:90:13 | code | -| CodeInjection.rb:78:12:78:17 | call to params | CodeInjection.rb:78:12:78:24 | ...[...] | -| CodeInjection.rb:78:12:78:17 | call to params | CodeInjection.rb:78:12:78:24 | ...[...] | -| CodeInjection.rb:78:12:78:24 | ...[...] | CodeInjection.rb:78:5:78:8 | code | -| CodeInjection.rb:78:12:78:24 | ...[...] | CodeInjection.rb:78:5:78:8 | code | -| CodeInjection.rb:86:10:86:25 | ... + ... | CodeInjection.rb:86:10:86:37 | ... + ... | -| CodeInjection.rb:86:10:86:25 | ... + ... [element] | CodeInjection.rb:86:10:86:37 | ... + ... [element] | -| CodeInjection.rb:86:10:86:37 | ... + ... [element] | CodeInjection.rb:86:10:86:37 | ... + ... | -| CodeInjection.rb:86:22:86:25 | code | CodeInjection.rb:86:10:86:25 | ... + ... [element] | -| CodeInjection.rb:101:3:102:5 | self in index [@foo] | CodeInjection.rb:111:3:113:5 | self in baz [@foo] | -| CodeInjection.rb:101:3:102:5 | self in index [@foo] | CodeInjection.rb:111:3:113:5 | self in baz [@foo] | -| CodeInjection.rb:105:5:105:8 | [post] self [@foo] | CodeInjection.rb:108:3:109:5 | self in bar [@foo] | -| CodeInjection.rb:105:5:105:8 | [post] self [@foo] | CodeInjection.rb:108:3:109:5 | self in bar [@foo] | -| CodeInjection.rb:105:12:105:17 | call to params | CodeInjection.rb:105:12:105:23 | ...[...] | -| CodeInjection.rb:105:12:105:17 | call to params | CodeInjection.rb:105:12:105:23 | ...[...] | -| CodeInjection.rb:105:12:105:23 | ...[...] | CodeInjection.rb:105:5:105:8 | [post] self [@foo] | -| CodeInjection.rb:105:12:105:23 | ...[...] | CodeInjection.rb:105:5:105:8 | [post] self [@foo] | -| CodeInjection.rb:108:3:109:5 | self in bar [@foo] | CodeInjection.rb:101:3:102:5 | self in index [@foo] | -| CodeInjection.rb:108:3:109:5 | self in bar [@foo] | CodeInjection.rb:101:3:102:5 | self in index [@foo] | -| CodeInjection.rb:111:3:113:5 | self in baz [@foo] | CodeInjection.rb:112:10:112:13 | self [@foo] | -| CodeInjection.rb:111:3:113:5 | self in baz [@foo] | CodeInjection.rb:112:10:112:13 | self [@foo] | -| CodeInjection.rb:112:10:112:13 | self [@foo] | CodeInjection.rb:112:10:112:13 | @foo | -| CodeInjection.rb:112:10:112:13 | self [@foo] | CodeInjection.rb:112:10:112:13 | @foo | +| CodeInjection.rb:5:5:5:8 | code | CodeInjection.rb:8:10:8:13 | code | provenance | | +| CodeInjection.rb:5:5:5:8 | code | CodeInjection.rb:8:10:8:13 | code | provenance | | +| CodeInjection.rb:5:5:5:8 | code | CodeInjection.rb:20:20:20:23 | code | provenance | | +| CodeInjection.rb:5:5:5:8 | code | CodeInjection.rb:20:20:20:23 | code | provenance | | +| CodeInjection.rb:5:5:5:8 | code | CodeInjection.rb:23:21:23:24 | code | provenance | | +| CodeInjection.rb:5:5:5:8 | code | CodeInjection.rb:23:21:23:24 | code | provenance | | +| CodeInjection.rb:5:5:5:8 | code | CodeInjection.rb:29:15:29:18 | code | provenance | | +| CodeInjection.rb:5:5:5:8 | code | CodeInjection.rb:32:19:32:22 | code | provenance | | +| CodeInjection.rb:5:5:5:8 | code | CodeInjection.rb:38:24:38:27 | code | provenance | | +| CodeInjection.rb:5:5:5:8 | code | CodeInjection.rb:38:24:38:27 | code | provenance | | +| CodeInjection.rb:5:5:5:8 | code | CodeInjection.rb:41:40:41:43 | code | provenance | | +| CodeInjection.rb:5:12:5:17 | call to params | CodeInjection.rb:5:12:5:24 | ...[...] | provenance | | +| CodeInjection.rb:5:12:5:17 | call to params | CodeInjection.rb:5:12:5:24 | ...[...] | provenance | | +| CodeInjection.rb:5:12:5:24 | ...[...] | CodeInjection.rb:5:5:5:8 | code | provenance | | +| CodeInjection.rb:5:12:5:24 | ...[...] | CodeInjection.rb:5:5:5:8 | code | provenance | | +| CodeInjection.rb:38:24:38:27 | code | CodeInjection.rb:38:10:38:28 | call to escape | provenance | | +| CodeInjection.rb:38:24:38:27 | code | CodeInjection.rb:38:10:38:28 | call to escape | provenance | | +| CodeInjection.rb:78:5:78:8 | code | CodeInjection.rb:80:16:80:19 | code | provenance | | +| CodeInjection.rb:78:5:78:8 | code | CodeInjection.rb:86:10:86:25 | ... + ... | provenance | | +| CodeInjection.rb:78:5:78:8 | code | CodeInjection.rb:86:10:86:37 | ... + ... | provenance | | +| CodeInjection.rb:78:5:78:8 | code | CodeInjection.rb:86:22:86:25 | code | provenance | | +| CodeInjection.rb:78:5:78:8 | code | CodeInjection.rb:88:10:88:32 | "prefix_#{...}_suffix" | provenance | | +| CodeInjection.rb:78:5:78:8 | code | CodeInjection.rb:90:10:90:13 | code | provenance | | +| CodeInjection.rb:78:5:78:8 | code | CodeInjection.rb:90:10:90:13 | code | provenance | | +| CodeInjection.rb:78:12:78:17 | call to params | CodeInjection.rb:78:12:78:24 | ...[...] | provenance | | +| CodeInjection.rb:78:12:78:17 | call to params | CodeInjection.rb:78:12:78:24 | ...[...] | provenance | | +| CodeInjection.rb:78:12:78:24 | ...[...] | CodeInjection.rb:78:5:78:8 | code | provenance | | +| CodeInjection.rb:78:12:78:24 | ...[...] | CodeInjection.rb:78:5:78:8 | code | provenance | | +| CodeInjection.rb:86:10:86:25 | ... + ... | CodeInjection.rb:86:10:86:37 | ... + ... | provenance | | +| CodeInjection.rb:86:10:86:25 | ... + ... [element] | CodeInjection.rb:86:10:86:37 | ... + ... [element] | provenance | | +| CodeInjection.rb:86:10:86:37 | ... + ... [element] | CodeInjection.rb:86:10:86:37 | ... + ... | provenance | | +| CodeInjection.rb:86:22:86:25 | code | CodeInjection.rb:86:10:86:25 | ... + ... [element] | provenance | | +| CodeInjection.rb:101:3:102:5 | self in index [@foo] | CodeInjection.rb:111:3:113:5 | self in baz [@foo] | provenance | | +| CodeInjection.rb:101:3:102:5 | self in index [@foo] | CodeInjection.rb:111:3:113:5 | self in baz [@foo] | provenance | | +| CodeInjection.rb:105:5:105:8 | [post] self [@foo] | CodeInjection.rb:108:3:109:5 | self in bar [@foo] | provenance | | +| CodeInjection.rb:105:5:105:8 | [post] self [@foo] | CodeInjection.rb:108:3:109:5 | self in bar [@foo] | provenance | | +| CodeInjection.rb:105:12:105:17 | call to params | CodeInjection.rb:105:12:105:23 | ...[...] | provenance | | +| CodeInjection.rb:105:12:105:17 | call to params | CodeInjection.rb:105:12:105:23 | ...[...] | provenance | | +| CodeInjection.rb:105:12:105:23 | ...[...] | CodeInjection.rb:105:5:105:8 | [post] self [@foo] | provenance | | +| CodeInjection.rb:105:12:105:23 | ...[...] | CodeInjection.rb:105:5:105:8 | [post] self [@foo] | provenance | | +| CodeInjection.rb:108:3:109:5 | self in bar [@foo] | CodeInjection.rb:101:3:102:5 | self in index [@foo] | provenance | | +| CodeInjection.rb:108:3:109:5 | self in bar [@foo] | CodeInjection.rb:101:3:102:5 | self in index [@foo] | provenance | | +| CodeInjection.rb:111:3:113:5 | self in baz [@foo] | CodeInjection.rb:112:10:112:13 | self [@foo] | provenance | | +| CodeInjection.rb:111:3:113:5 | self in baz [@foo] | CodeInjection.rb:112:10:112:13 | self [@foo] | provenance | | +| CodeInjection.rb:112:10:112:13 | self [@foo] | CodeInjection.rb:112:10:112:13 | @foo | provenance | | +| CodeInjection.rb:112:10:112:13 | self [@foo] | CodeInjection.rb:112:10:112:13 | @foo | provenance | | nodes | CodeInjection.rb:5:5:5:8 | code | semmle.label | code | | CodeInjection.rb:5:5:5:8 | code | semmle.label | code | diff --git a/ruby/ql/test/query-tests/security/cwe-094/UnsafeCodeConstruction/UnsafeCodeConstruction.expected b/ruby/ql/test/query-tests/security/cwe-094/UnsafeCodeConstruction/UnsafeCodeConstruction.expected index 716cf5591f9..8af3ed306de 100644 --- a/ruby/ql/test/query-tests/security/cwe-094/UnsafeCodeConstruction/UnsafeCodeConstruction.expected +++ b/ruby/ql/test/query-tests/security/cwe-094/UnsafeCodeConstruction/UnsafeCodeConstruction.expected @@ -1,26 +1,26 @@ edges -| impl/unsafeCode.rb:2:12:2:17 | target | impl/unsafeCode.rb:3:17:3:25 | #{...} | -| impl/unsafeCode.rb:7:12:7:12 | x | impl/unsafeCode.rb:8:30:8:30 | x | -| impl/unsafeCode.rb:12:12:12:12 | x | impl/unsafeCode.rb:13:33:13:33 | x | -| impl/unsafeCode.rb:28:17:28:22 | my_arr | impl/unsafeCode.rb:29:10:29:15 | my_arr | -| impl/unsafeCode.rb:32:21:32:21 | x | impl/unsafeCode.rb:33:12:33:12 | x | -| impl/unsafeCode.rb:33:5:33:7 | arr [element 0] | impl/unsafeCode.rb:34:10:34:12 | arr | -| impl/unsafeCode.rb:33:12:33:12 | x | impl/unsafeCode.rb:33:5:33:7 | arr [element 0] | -| impl/unsafeCode.rb:37:15:37:15 | x | impl/unsafeCode.rb:39:14:39:14 | x | -| impl/unsafeCode.rb:39:5:39:7 | [post] arr [element] | impl/unsafeCode.rb:40:10:40:12 | arr | -| impl/unsafeCode.rb:39:5:39:7 | [post] arr [element] | impl/unsafeCode.rb:44:10:44:12 | arr | -| impl/unsafeCode.rb:39:14:39:14 | x | impl/unsafeCode.rb:39:5:39:7 | [post] arr [element] | -| impl/unsafeCode.rb:47:15:47:15 | x | impl/unsafeCode.rb:49:9:49:12 | #{...} | -| impl/unsafeCode.rb:54:21:54:21 | x | impl/unsafeCode.rb:55:22:55:22 | x | -| impl/unsafeCode.rb:59:21:59:21 | x | impl/unsafeCode.rb:60:17:60:17 | x | -| impl/unsafeCode.rb:59:24:59:24 | y | impl/unsafeCode.rb:63:30:63:30 | y | -| impl/unsafeCode.rb:60:5:60:7 | arr [element 0] | impl/unsafeCode.rb:61:10:61:12 | arr | -| impl/unsafeCode.rb:60:11:60:18 | call to Array [element 0] | impl/unsafeCode.rb:60:5:60:7 | arr [element 0] | -| impl/unsafeCode.rb:60:17:60:17 | x | impl/unsafeCode.rb:60:11:60:18 | call to Array [element 0] | -| impl/unsafeCode.rb:63:5:63:8 | arr2 [element 0] | impl/unsafeCode.rb:64:10:64:13 | arr2 | -| impl/unsafeCode.rb:63:13:63:32 | call to Array [element 1] | impl/unsafeCode.rb:63:13:63:42 | call to join | -| impl/unsafeCode.rb:63:13:63:42 | call to join | impl/unsafeCode.rb:63:5:63:8 | arr2 [element 0] | -| impl/unsafeCode.rb:63:30:63:30 | y | impl/unsafeCode.rb:63:13:63:32 | call to Array [element 1] | +| impl/unsafeCode.rb:2:12:2:17 | target | impl/unsafeCode.rb:3:17:3:25 | #{...} | provenance | | +| impl/unsafeCode.rb:7:12:7:12 | x | impl/unsafeCode.rb:8:30:8:30 | x | provenance | | +| impl/unsafeCode.rb:12:12:12:12 | x | impl/unsafeCode.rb:13:33:13:33 | x | provenance | | +| impl/unsafeCode.rb:28:17:28:22 | my_arr | impl/unsafeCode.rb:29:10:29:15 | my_arr | provenance | | +| impl/unsafeCode.rb:32:21:32:21 | x | impl/unsafeCode.rb:33:12:33:12 | x | provenance | | +| impl/unsafeCode.rb:33:5:33:7 | arr [element 0] | impl/unsafeCode.rb:34:10:34:12 | arr | provenance | | +| impl/unsafeCode.rb:33:12:33:12 | x | impl/unsafeCode.rb:33:5:33:7 | arr [element 0] | provenance | | +| impl/unsafeCode.rb:37:15:37:15 | x | impl/unsafeCode.rb:39:14:39:14 | x | provenance | | +| impl/unsafeCode.rb:39:5:39:7 | [post] arr [element] | impl/unsafeCode.rb:40:10:40:12 | arr | provenance | | +| impl/unsafeCode.rb:39:5:39:7 | [post] arr [element] | impl/unsafeCode.rb:44:10:44:12 | arr | provenance | | +| impl/unsafeCode.rb:39:14:39:14 | x | impl/unsafeCode.rb:39:5:39:7 | [post] arr [element] | provenance | | +| impl/unsafeCode.rb:47:15:47:15 | x | impl/unsafeCode.rb:49:9:49:12 | #{...} | provenance | | +| impl/unsafeCode.rb:54:21:54:21 | x | impl/unsafeCode.rb:55:22:55:22 | x | provenance | | +| impl/unsafeCode.rb:59:21:59:21 | x | impl/unsafeCode.rb:60:17:60:17 | x | provenance | | +| impl/unsafeCode.rb:59:24:59:24 | y | impl/unsafeCode.rb:63:30:63:30 | y | provenance | | +| impl/unsafeCode.rb:60:5:60:7 | arr [element 0] | impl/unsafeCode.rb:61:10:61:12 | arr | provenance | | +| impl/unsafeCode.rb:60:11:60:18 | call to Array [element 0] | impl/unsafeCode.rb:60:5:60:7 | arr [element 0] | provenance | | +| impl/unsafeCode.rb:60:17:60:17 | x | impl/unsafeCode.rb:60:11:60:18 | call to Array [element 0] | provenance | | +| impl/unsafeCode.rb:63:5:63:8 | arr2 [element 0] | impl/unsafeCode.rb:64:10:64:13 | arr2 | provenance | | +| impl/unsafeCode.rb:63:13:63:32 | call to Array [element 1] | impl/unsafeCode.rb:63:13:63:42 | call to join | provenance | | +| impl/unsafeCode.rb:63:13:63:42 | call to join | impl/unsafeCode.rb:63:5:63:8 | arr2 [element 0] | provenance | | +| impl/unsafeCode.rb:63:30:63:30 | y | impl/unsafeCode.rb:63:13:63:32 | call to Array [element 1] | provenance | | nodes | impl/unsafeCode.rb:2:12:2:17 | target | semmle.label | target | | impl/unsafeCode.rb:3:17:3:25 | #{...} | semmle.label | #{...} | diff --git a/ruby/ql/test/query-tests/security/cwe-117/LogInjection.expected b/ruby/ql/test/query-tests/security/cwe-117/LogInjection.expected index e3ea62b535d..e0d5101f150 100644 --- a/ruby/ql/test/query-tests/security/cwe-117/LogInjection.expected +++ b/ruby/ql/test/query-tests/security/cwe-117/LogInjection.expected @@ -1,28 +1,28 @@ edges -| app/controllers/users_controller.rb:15:5:15:15 | unsanitized | app/controllers/users_controller.rb:16:19:16:29 | unsanitized | -| app/controllers/users_controller.rb:15:5:15:15 | unsanitized | app/controllers/users_controller.rb:17:19:17:41 | ... + ... | -| app/controllers/users_controller.rb:15:5:15:15 | unsanitized | app/controllers/users_controller.rb:17:31:17:41 | unsanitized | -| app/controllers/users_controller.rb:15:5:15:15 | unsanitized | app/controllers/users_controller.rb:23:20:23:30 | unsanitized | -| app/controllers/users_controller.rb:15:19:15:24 | call to params | app/controllers/users_controller.rb:15:19:15:30 | ...[...] | -| app/controllers/users_controller.rb:15:19:15:30 | ...[...] | app/controllers/users_controller.rb:15:5:15:15 | unsanitized | -| app/controllers/users_controller.rb:17:19:17:41 | ... + ... [element] | app/controllers/users_controller.rb:17:19:17:41 | ... + ... | -| app/controllers/users_controller.rb:17:31:17:41 | unsanitized | app/controllers/users_controller.rb:17:19:17:41 | ... + ... [element] | -| app/controllers/users_controller.rb:23:20:23:30 | unsanitized | app/controllers/users_controller.rb:23:20:23:44 | call to sub | -| app/controllers/users_controller.rb:23:20:23:44 | call to sub | app/controllers/users_controller.rb:24:18:26:7 | do ... end [captured unsanitized2] | -| app/controllers/users_controller.rb:23:20:23:44 | call to sub | app/controllers/users_controller.rb:27:16:27:39 | ... + ... | -| app/controllers/users_controller.rb:23:20:23:44 | call to sub | app/controllers/users_controller.rb:27:28:27:39 | unsanitized2 | -| app/controllers/users_controller.rb:24:18:26:7 | do ... end [captured unsanitized2] | app/controllers/users_controller.rb:25:7:25:18 | unsanitized2 | -| app/controllers/users_controller.rb:27:16:27:39 | ... + ... [element] | app/controllers/users_controller.rb:27:16:27:39 | ... + ... | -| app/controllers/users_controller.rb:27:28:27:39 | unsanitized2 | app/controllers/users_controller.rb:27:16:27:39 | ... + ... [element] | -| app/controllers/users_controller.rb:33:19:33:25 | call to cookies | app/controllers/users_controller.rb:33:19:33:31 | ...[...] | -| app/controllers/users_controller.rb:33:19:33:31 | ...[...] | app/controllers/users_controller.rb:34:31:34:45 | { ... } [captured unsanitized] | -| app/controllers/users_controller.rb:33:19:33:31 | ...[...] | app/controllers/users_controller.rb:35:31:35:57 | { ... } [captured unsanitized] | -| app/controllers/users_controller.rb:34:31:34:45 | { ... } [captured unsanitized] | app/controllers/users_controller.rb:34:33:34:43 | unsanitized | -| app/controllers/users_controller.rb:35:31:35:57 | { ... } [captured unsanitized] | app/controllers/users_controller.rb:35:45:35:55 | unsanitized | -| app/controllers/users_controller.rb:35:33:35:55 | ... + ... [element] | app/controllers/users_controller.rb:35:33:35:55 | ... + ... | -| app/controllers/users_controller.rb:35:45:35:55 | unsanitized | app/controllers/users_controller.rb:35:33:35:55 | ... + ... | -| app/controllers/users_controller.rb:35:45:35:55 | unsanitized | app/controllers/users_controller.rb:35:33:35:55 | ... + ... [element] | -| app/controllers/users_controller.rb:49:19:49:24 | call to params | app/controllers/users_controller.rb:49:19:49:30 | ...[...] | +| app/controllers/users_controller.rb:15:5:15:15 | unsanitized | app/controllers/users_controller.rb:16:19:16:29 | unsanitized | provenance | | +| app/controllers/users_controller.rb:15:5:15:15 | unsanitized | app/controllers/users_controller.rb:17:19:17:41 | ... + ... | provenance | | +| app/controllers/users_controller.rb:15:5:15:15 | unsanitized | app/controllers/users_controller.rb:17:31:17:41 | unsanitized | provenance | | +| app/controllers/users_controller.rb:15:5:15:15 | unsanitized | app/controllers/users_controller.rb:23:20:23:30 | unsanitized | provenance | | +| app/controllers/users_controller.rb:15:19:15:24 | call to params | app/controllers/users_controller.rb:15:19:15:30 | ...[...] | provenance | | +| app/controllers/users_controller.rb:15:19:15:30 | ...[...] | app/controllers/users_controller.rb:15:5:15:15 | unsanitized | provenance | | +| app/controllers/users_controller.rb:17:19:17:41 | ... + ... [element] | app/controllers/users_controller.rb:17:19:17:41 | ... + ... | provenance | | +| app/controllers/users_controller.rb:17:31:17:41 | unsanitized | app/controllers/users_controller.rb:17:19:17:41 | ... + ... [element] | provenance | | +| app/controllers/users_controller.rb:23:20:23:30 | unsanitized | app/controllers/users_controller.rb:23:20:23:44 | call to sub | provenance | | +| app/controllers/users_controller.rb:23:20:23:44 | call to sub | app/controllers/users_controller.rb:24:18:26:7 | do ... end [captured unsanitized2] | provenance | | +| app/controllers/users_controller.rb:23:20:23:44 | call to sub | app/controllers/users_controller.rb:27:16:27:39 | ... + ... | provenance | | +| app/controllers/users_controller.rb:23:20:23:44 | call to sub | app/controllers/users_controller.rb:27:28:27:39 | unsanitized2 | provenance | | +| app/controllers/users_controller.rb:24:18:26:7 | do ... end [captured unsanitized2] | app/controllers/users_controller.rb:25:7:25:18 | unsanitized2 | provenance | | +| app/controllers/users_controller.rb:27:16:27:39 | ... + ... [element] | app/controllers/users_controller.rb:27:16:27:39 | ... + ... | provenance | | +| app/controllers/users_controller.rb:27:28:27:39 | unsanitized2 | app/controllers/users_controller.rb:27:16:27:39 | ... + ... [element] | provenance | | +| app/controllers/users_controller.rb:33:19:33:25 | call to cookies | app/controllers/users_controller.rb:33:19:33:31 | ...[...] | provenance | | +| app/controllers/users_controller.rb:33:19:33:31 | ...[...] | app/controllers/users_controller.rb:34:31:34:45 | { ... } [captured unsanitized] | provenance | | +| app/controllers/users_controller.rb:33:19:33:31 | ...[...] | app/controllers/users_controller.rb:35:31:35:57 | { ... } [captured unsanitized] | provenance | | +| app/controllers/users_controller.rb:34:31:34:45 | { ... } [captured unsanitized] | app/controllers/users_controller.rb:34:33:34:43 | unsanitized | provenance | | +| app/controllers/users_controller.rb:35:31:35:57 | { ... } [captured unsanitized] | app/controllers/users_controller.rb:35:45:35:55 | unsanitized | provenance | | +| app/controllers/users_controller.rb:35:33:35:55 | ... + ... [element] | app/controllers/users_controller.rb:35:33:35:55 | ... + ... | provenance | | +| app/controllers/users_controller.rb:35:45:35:55 | unsanitized | app/controllers/users_controller.rb:35:33:35:55 | ... + ... | provenance | | +| app/controllers/users_controller.rb:35:45:35:55 | unsanitized | app/controllers/users_controller.rb:35:33:35:55 | ... + ... [element] | provenance | | +| app/controllers/users_controller.rb:49:19:49:24 | call to params | app/controllers/users_controller.rb:49:19:49:30 | ...[...] | provenance | | nodes | app/controllers/users_controller.rb:15:5:15:15 | unsanitized | semmle.label | unsanitized | | app/controllers/users_controller.rb:15:19:15:24 | call to params | semmle.label | call to params | diff --git a/ruby/ql/test/query-tests/security/cwe-1333-polynomial-redos/PolynomialReDoS.expected b/ruby/ql/test/query-tests/security/cwe-1333-polynomial-redos/PolynomialReDoS.expected index ec079020695..79d6c72fa3f 100644 --- a/ruby/ql/test/query-tests/security/cwe-1333-polynomial-redos/PolynomialReDoS.expected +++ b/ruby/ql/test/query-tests/security/cwe-1333-polynomial-redos/PolynomialReDoS.expected @@ -1,51 +1,51 @@ edges -| PolynomialReDoS.rb:4:5:4:8 | name | PolynomialReDoS.rb:10:5:10:8 | name | -| PolynomialReDoS.rb:4:5:4:8 | name | PolynomialReDoS.rb:11:5:11:8 | name | -| PolynomialReDoS.rb:4:5:4:8 | name | PolynomialReDoS.rb:12:5:12:8 | name | -| PolynomialReDoS.rb:4:5:4:8 | name | PolynomialReDoS.rb:13:5:13:8 | name | -| PolynomialReDoS.rb:4:5:4:8 | name | PolynomialReDoS.rb:14:5:14:8 | name | -| PolynomialReDoS.rb:4:5:4:8 | name | PolynomialReDoS.rb:15:5:15:8 | name | -| PolynomialReDoS.rb:4:5:4:8 | name | PolynomialReDoS.rb:16:5:16:8 | name | -| PolynomialReDoS.rb:4:5:4:8 | name | PolynomialReDoS.rb:17:5:17:8 | name | -| PolynomialReDoS.rb:4:5:4:8 | name | PolynomialReDoS.rb:18:5:18:8 | name | -| PolynomialReDoS.rb:4:5:4:8 | name | PolynomialReDoS.rb:19:5:19:8 | name | -| PolynomialReDoS.rb:4:5:4:8 | name | PolynomialReDoS.rb:20:5:20:8 | name | -| PolynomialReDoS.rb:4:5:4:8 | name | PolynomialReDoS.rb:21:5:21:8 | name | -| PolynomialReDoS.rb:4:5:4:8 | name | PolynomialReDoS.rb:22:5:22:8 | name | -| PolynomialReDoS.rb:4:5:4:8 | name | PolynomialReDoS.rb:23:17:23:20 | name | -| PolynomialReDoS.rb:4:5:4:8 | name | PolynomialReDoS.rb:24:18:24:21 | name | -| PolynomialReDoS.rb:4:5:4:8 | name | PolynomialReDoS.rb:42:10:42:13 | name | -| PolynomialReDoS.rb:4:5:4:8 | name | PolynomialReDoS.rb:47:10:47:13 | name | -| PolynomialReDoS.rb:4:12:4:17 | call to params | PolynomialReDoS.rb:4:12:4:24 | ...[...] | -| PolynomialReDoS.rb:4:12:4:24 | ...[...] | PolynomialReDoS.rb:4:5:4:8 | name | -| PolynomialReDoS.rb:27:5:27:5 | a | PolynomialReDoS.rb:28:5:28:5 | a | -| PolynomialReDoS.rb:27:9:27:14 | call to params | PolynomialReDoS.rb:27:9:27:18 | ...[...] | -| PolynomialReDoS.rb:27:9:27:18 | ...[...] | PolynomialReDoS.rb:27:5:27:5 | a | -| PolynomialReDoS.rb:29:5:29:5 | b | PolynomialReDoS.rb:30:5:30:5 | b | -| PolynomialReDoS.rb:29:9:29:14 | call to params | PolynomialReDoS.rb:29:9:29:18 | ...[...] | -| PolynomialReDoS.rb:29:9:29:18 | ...[...] | PolynomialReDoS.rb:29:5:29:5 | b | -| PolynomialReDoS.rb:31:5:31:5 | c | PolynomialReDoS.rb:32:5:32:5 | c | -| PolynomialReDoS.rb:31:9:31:14 | call to params | PolynomialReDoS.rb:31:9:31:18 | ...[...] | -| PolynomialReDoS.rb:31:9:31:18 | ...[...] | PolynomialReDoS.rb:31:5:31:5 | c | -| PolynomialReDoS.rb:54:5:54:8 | name | PolynomialReDoS.rb:56:38:56:41 | name | -| PolynomialReDoS.rb:54:5:54:8 | name | PolynomialReDoS.rb:58:37:58:40 | name | -| PolynomialReDoS.rb:54:12:54:17 | call to params | PolynomialReDoS.rb:54:12:54:24 | ...[...] | -| PolynomialReDoS.rb:54:12:54:24 | ...[...] | PolynomialReDoS.rb:54:5:54:8 | name | -| PolynomialReDoS.rb:56:38:56:41 | name | PolynomialReDoS.rb:61:33:61:37 | input | -| PolynomialReDoS.rb:58:37:58:40 | name | PolynomialReDoS.rb:65:42:65:46 | input | -| PolynomialReDoS.rb:61:33:61:37 | input | PolynomialReDoS.rb:62:5:62:9 | input | -| PolynomialReDoS.rb:65:42:65:46 | input | PolynomialReDoS.rb:66:5:66:9 | input | -| PolynomialReDoS.rb:70:5:70:8 | name | PolynomialReDoS.rb:73:32:73:35 | name | -| PolynomialReDoS.rb:70:12:70:17 | call to params | PolynomialReDoS.rb:70:12:70:24 | ...[...] | -| PolynomialReDoS.rb:70:12:70:24 | ...[...] | PolynomialReDoS.rb:70:5:70:8 | name | -| PolynomialReDoS.rb:73:32:73:35 | name | PolynomialReDoS.rb:76:35:76:39 | input | -| PolynomialReDoS.rb:76:35:76:39 | input | PolynomialReDoS.rb:77:5:77:9 | input | -| PolynomialReDoS.rb:103:5:103:8 | name | PolynomialReDoS.rb:105:5:105:8 | name | -| PolynomialReDoS.rb:103:12:103:17 | call to params | PolynomialReDoS.rb:103:12:103:24 | ...[...] | -| PolynomialReDoS.rb:103:12:103:24 | ...[...] | PolynomialReDoS.rb:103:5:103:8 | name | -| lib/index.rb:2:11:2:11 | x | lib/index.rb:4:13:4:13 | x | -| lib/index.rb:8:13:8:13 | x | lib/index.rb:9:15:9:15 | x | -| lib/index.rb:8:13:8:13 | x | lib/index.rb:11:16:11:16 | x | +| PolynomialReDoS.rb:4:5:4:8 | name | PolynomialReDoS.rb:10:5:10:8 | name | provenance | | +| PolynomialReDoS.rb:4:5:4:8 | name | PolynomialReDoS.rb:11:5:11:8 | name | provenance | | +| PolynomialReDoS.rb:4:5:4:8 | name | PolynomialReDoS.rb:12:5:12:8 | name | provenance | | +| PolynomialReDoS.rb:4:5:4:8 | name | PolynomialReDoS.rb:13:5:13:8 | name | provenance | | +| PolynomialReDoS.rb:4:5:4:8 | name | PolynomialReDoS.rb:14:5:14:8 | name | provenance | | +| PolynomialReDoS.rb:4:5:4:8 | name | PolynomialReDoS.rb:15:5:15:8 | name | provenance | | +| PolynomialReDoS.rb:4:5:4:8 | name | PolynomialReDoS.rb:16:5:16:8 | name | provenance | | +| PolynomialReDoS.rb:4:5:4:8 | name | PolynomialReDoS.rb:17:5:17:8 | name | provenance | | +| PolynomialReDoS.rb:4:5:4:8 | name | PolynomialReDoS.rb:18:5:18:8 | name | provenance | | +| PolynomialReDoS.rb:4:5:4:8 | name | PolynomialReDoS.rb:19:5:19:8 | name | provenance | | +| PolynomialReDoS.rb:4:5:4:8 | name | PolynomialReDoS.rb:20:5:20:8 | name | provenance | | +| PolynomialReDoS.rb:4:5:4:8 | name | PolynomialReDoS.rb:21:5:21:8 | name | provenance | | +| PolynomialReDoS.rb:4:5:4:8 | name | PolynomialReDoS.rb:22:5:22:8 | name | provenance | | +| PolynomialReDoS.rb:4:5:4:8 | name | PolynomialReDoS.rb:23:17:23:20 | name | provenance | | +| PolynomialReDoS.rb:4:5:4:8 | name | PolynomialReDoS.rb:24:18:24:21 | name | provenance | | +| PolynomialReDoS.rb:4:5:4:8 | name | PolynomialReDoS.rb:42:10:42:13 | name | provenance | | +| PolynomialReDoS.rb:4:5:4:8 | name | PolynomialReDoS.rb:47:10:47:13 | name | provenance | | +| PolynomialReDoS.rb:4:12:4:17 | call to params | PolynomialReDoS.rb:4:12:4:24 | ...[...] | provenance | | +| PolynomialReDoS.rb:4:12:4:24 | ...[...] | PolynomialReDoS.rb:4:5:4:8 | name | provenance | | +| PolynomialReDoS.rb:27:5:27:5 | a | PolynomialReDoS.rb:28:5:28:5 | a | provenance | | +| PolynomialReDoS.rb:27:9:27:14 | call to params | PolynomialReDoS.rb:27:9:27:18 | ...[...] | provenance | | +| PolynomialReDoS.rb:27:9:27:18 | ...[...] | PolynomialReDoS.rb:27:5:27:5 | a | provenance | | +| PolynomialReDoS.rb:29:5:29:5 | b | PolynomialReDoS.rb:30:5:30:5 | b | provenance | | +| PolynomialReDoS.rb:29:9:29:14 | call to params | PolynomialReDoS.rb:29:9:29:18 | ...[...] | provenance | | +| PolynomialReDoS.rb:29:9:29:18 | ...[...] | PolynomialReDoS.rb:29:5:29:5 | b | provenance | | +| PolynomialReDoS.rb:31:5:31:5 | c | PolynomialReDoS.rb:32:5:32:5 | c | provenance | | +| PolynomialReDoS.rb:31:9:31:14 | call to params | PolynomialReDoS.rb:31:9:31:18 | ...[...] | provenance | | +| PolynomialReDoS.rb:31:9:31:18 | ...[...] | PolynomialReDoS.rb:31:5:31:5 | c | provenance | | +| PolynomialReDoS.rb:54:5:54:8 | name | PolynomialReDoS.rb:56:38:56:41 | name | provenance | | +| PolynomialReDoS.rb:54:5:54:8 | name | PolynomialReDoS.rb:58:37:58:40 | name | provenance | | +| PolynomialReDoS.rb:54:12:54:17 | call to params | PolynomialReDoS.rb:54:12:54:24 | ...[...] | provenance | | +| PolynomialReDoS.rb:54:12:54:24 | ...[...] | PolynomialReDoS.rb:54:5:54:8 | name | provenance | | +| PolynomialReDoS.rb:56:38:56:41 | name | PolynomialReDoS.rb:61:33:61:37 | input | provenance | | +| PolynomialReDoS.rb:58:37:58:40 | name | PolynomialReDoS.rb:65:42:65:46 | input | provenance | | +| PolynomialReDoS.rb:61:33:61:37 | input | PolynomialReDoS.rb:62:5:62:9 | input | provenance | | +| PolynomialReDoS.rb:65:42:65:46 | input | PolynomialReDoS.rb:66:5:66:9 | input | provenance | | +| PolynomialReDoS.rb:70:5:70:8 | name | PolynomialReDoS.rb:73:32:73:35 | name | provenance | | +| PolynomialReDoS.rb:70:12:70:17 | call to params | PolynomialReDoS.rb:70:12:70:24 | ...[...] | provenance | | +| PolynomialReDoS.rb:70:12:70:24 | ...[...] | PolynomialReDoS.rb:70:5:70:8 | name | provenance | | +| PolynomialReDoS.rb:73:32:73:35 | name | PolynomialReDoS.rb:76:35:76:39 | input | provenance | | +| PolynomialReDoS.rb:76:35:76:39 | input | PolynomialReDoS.rb:77:5:77:9 | input | provenance | | +| PolynomialReDoS.rb:103:5:103:8 | name | PolynomialReDoS.rb:105:5:105:8 | name | provenance | | +| PolynomialReDoS.rb:103:12:103:17 | call to params | PolynomialReDoS.rb:103:12:103:24 | ...[...] | provenance | | +| PolynomialReDoS.rb:103:12:103:24 | ...[...] | PolynomialReDoS.rb:103:5:103:8 | name | provenance | | +| lib/index.rb:2:11:2:11 | x | lib/index.rb:4:13:4:13 | x | provenance | | +| lib/index.rb:8:13:8:13 | x | lib/index.rb:9:15:9:15 | x | provenance | | +| lib/index.rb:8:13:8:13 | x | lib/index.rb:11:16:11:16 | x | provenance | | nodes | PolynomialReDoS.rb:4:5:4:8 | name | semmle.label | name | | PolynomialReDoS.rb:4:12:4:17 | call to params | semmle.label | call to params | diff --git a/ruby/ql/test/query-tests/security/cwe-1333-regexp-injection/RegExpInjection.expected b/ruby/ql/test/query-tests/security/cwe-1333-regexp-injection/RegExpInjection.expected index 3857229d278..dff126abec1 100644 --- a/ruby/ql/test/query-tests/security/cwe-1333-regexp-injection/RegExpInjection.expected +++ b/ruby/ql/test/query-tests/security/cwe-1333-regexp-injection/RegExpInjection.expected @@ -1,25 +1,25 @@ edges -| RegExpInjection.rb:4:5:4:8 | name | RegExpInjection.rb:5:13:5:21 | /#{...}/ | -| RegExpInjection.rb:4:12:4:17 | call to params | RegExpInjection.rb:4:12:4:24 | ...[...] | -| RegExpInjection.rb:4:12:4:24 | ...[...] | RegExpInjection.rb:4:5:4:8 | name | -| RegExpInjection.rb:10:5:10:8 | name | RegExpInjection.rb:11:13:11:27 | /foo#{...}bar/ | -| RegExpInjection.rb:10:12:10:17 | call to params | RegExpInjection.rb:10:12:10:24 | ...[...] | -| RegExpInjection.rb:10:12:10:24 | ...[...] | RegExpInjection.rb:10:5:10:8 | name | -| RegExpInjection.rb:16:5:16:8 | name | RegExpInjection.rb:17:24:17:27 | name | -| RegExpInjection.rb:16:12:16:17 | call to params | RegExpInjection.rb:16:12:16:24 | ...[...] | -| RegExpInjection.rb:16:12:16:24 | ...[...] | RegExpInjection.rb:16:5:16:8 | name | -| RegExpInjection.rb:22:5:22:8 | name | RegExpInjection.rb:23:24:23:33 | ... + ... | -| RegExpInjection.rb:22:5:22:8 | name | RegExpInjection.rb:23:30:23:33 | name | -| RegExpInjection.rb:22:12:22:17 | call to params | RegExpInjection.rb:22:12:22:24 | ...[...] | -| RegExpInjection.rb:22:12:22:24 | ...[...] | RegExpInjection.rb:22:5:22:8 | name | -| RegExpInjection.rb:23:24:23:33 | ... + ... [element] | RegExpInjection.rb:23:24:23:33 | ... + ... | -| RegExpInjection.rb:23:30:23:33 | name | RegExpInjection.rb:23:24:23:33 | ... + ... [element] | -| RegExpInjection.rb:54:5:54:8 | name | RegExpInjection.rb:55:28:55:37 | ... + ... | -| RegExpInjection.rb:54:5:54:8 | name | RegExpInjection.rb:55:34:55:37 | name | -| RegExpInjection.rb:54:12:54:17 | call to params | RegExpInjection.rb:54:12:54:24 | ...[...] | -| RegExpInjection.rb:54:12:54:24 | ...[...] | RegExpInjection.rb:54:5:54:8 | name | -| RegExpInjection.rb:55:28:55:37 | ... + ... [element] | RegExpInjection.rb:55:28:55:37 | ... + ... | -| RegExpInjection.rb:55:34:55:37 | name | RegExpInjection.rb:55:28:55:37 | ... + ... [element] | +| RegExpInjection.rb:4:5:4:8 | name | RegExpInjection.rb:5:13:5:21 | /#{...}/ | provenance | | +| RegExpInjection.rb:4:12:4:17 | call to params | RegExpInjection.rb:4:12:4:24 | ...[...] | provenance | | +| RegExpInjection.rb:4:12:4:24 | ...[...] | RegExpInjection.rb:4:5:4:8 | name | provenance | | +| RegExpInjection.rb:10:5:10:8 | name | RegExpInjection.rb:11:13:11:27 | /foo#{...}bar/ | provenance | | +| RegExpInjection.rb:10:12:10:17 | call to params | RegExpInjection.rb:10:12:10:24 | ...[...] | provenance | | +| RegExpInjection.rb:10:12:10:24 | ...[...] | RegExpInjection.rb:10:5:10:8 | name | provenance | | +| RegExpInjection.rb:16:5:16:8 | name | RegExpInjection.rb:17:24:17:27 | name | provenance | | +| RegExpInjection.rb:16:12:16:17 | call to params | RegExpInjection.rb:16:12:16:24 | ...[...] | provenance | | +| RegExpInjection.rb:16:12:16:24 | ...[...] | RegExpInjection.rb:16:5:16:8 | name | provenance | | +| RegExpInjection.rb:22:5:22:8 | name | RegExpInjection.rb:23:24:23:33 | ... + ... | provenance | | +| RegExpInjection.rb:22:5:22:8 | name | RegExpInjection.rb:23:30:23:33 | name | provenance | | +| RegExpInjection.rb:22:12:22:17 | call to params | RegExpInjection.rb:22:12:22:24 | ...[...] | provenance | | +| RegExpInjection.rb:22:12:22:24 | ...[...] | RegExpInjection.rb:22:5:22:8 | name | provenance | | +| RegExpInjection.rb:23:24:23:33 | ... + ... [element] | RegExpInjection.rb:23:24:23:33 | ... + ... | provenance | | +| RegExpInjection.rb:23:30:23:33 | name | RegExpInjection.rb:23:24:23:33 | ... + ... [element] | provenance | | +| RegExpInjection.rb:54:5:54:8 | name | RegExpInjection.rb:55:28:55:37 | ... + ... | provenance | | +| RegExpInjection.rb:54:5:54:8 | name | RegExpInjection.rb:55:34:55:37 | name | provenance | | +| RegExpInjection.rb:54:12:54:17 | call to params | RegExpInjection.rb:54:12:54:24 | ...[...] | provenance | | +| RegExpInjection.rb:54:12:54:24 | ...[...] | RegExpInjection.rb:54:5:54:8 | name | provenance | | +| RegExpInjection.rb:55:28:55:37 | ... + ... [element] | RegExpInjection.rb:55:28:55:37 | ... + ... | provenance | | +| RegExpInjection.rb:55:34:55:37 | name | RegExpInjection.rb:55:28:55:37 | ... + ... [element] | provenance | | nodes | RegExpInjection.rb:4:5:4:8 | name | semmle.label | name | | RegExpInjection.rb:4:12:4:17 | call to params | semmle.label | call to params | diff --git a/ruby/ql/test/query-tests/security/cwe-134/TaintedFormatString.expected b/ruby/ql/test/query-tests/security/cwe-134/TaintedFormatString.expected index de044832e23..a84a886c778 100644 --- a/ruby/ql/test/query-tests/security/cwe-134/TaintedFormatString.expected +++ b/ruby/ql/test/query-tests/security/cwe-134/TaintedFormatString.expected @@ -1,23 +1,23 @@ edges -| tainted_format_string.rb:4:12:4:17 | call to params | tainted_format_string.rb:4:12:4:26 | ...[...] | -| tainted_format_string.rb:5:19:5:24 | call to params | tainted_format_string.rb:5:19:5:33 | ...[...] | -| tainted_format_string.rb:10:23:10:28 | call to params | tainted_format_string.rb:10:23:10:37 | ...[...] | -| tainted_format_string.rb:11:30:11:35 | call to params | tainted_format_string.rb:11:30:11:44 | ...[...] | -| tainted_format_string.rb:18:23:18:28 | call to params | tainted_format_string.rb:18:23:18:37 | ...[...] | -| tainted_format_string.rb:19:30:19:35 | call to params | tainted_format_string.rb:19:30:19:44 | ...[...] | -| tainted_format_string.rb:21:27:21:32 | call to params | tainted_format_string.rb:21:27:21:41 | ...[...] | -| tainted_format_string.rb:22:20:22:25 | call to params | tainted_format_string.rb:22:20:22:34 | ...[...] | -| tainted_format_string.rb:28:19:28:24 | call to params | tainted_format_string.rb:28:19:28:33 | ...[...] | -| tainted_format_string.rb:33:12:33:46 | ... + ... [element] | tainted_format_string.rb:33:12:33:46 | ... + ... | -| tainted_format_string.rb:33:32:33:37 | call to params | tainted_format_string.rb:33:32:33:46 | ...[...] | -| tainted_format_string.rb:33:32:33:46 | ...[...] | tainted_format_string.rb:33:12:33:46 | ... + ... | -| tainted_format_string.rb:33:32:33:46 | ...[...] | tainted_format_string.rb:33:12:33:46 | ... + ... [element] | -| tainted_format_string.rb:36:30:36:35 | call to params | tainted_format_string.rb:36:30:36:44 | ...[...] | -| tainted_format_string.rb:36:30:36:44 | ...[...] | tainted_format_string.rb:36:12:36:46 | "A log message: #{...}" | -| tainted_format_string.rb:39:22:39:27 | call to params | tainted_format_string.rb:39:22:39:36 | ...[...] | -| tainted_format_string.rb:39:22:39:36 | ...[...] | tainted_format_string.rb:39:5:39:45 | "A log message #{...} %{foo}" | -| tainted_format_string.rb:42:22:42:27 | call to params | tainted_format_string.rb:42:22:42:36 | ...[...] | -| tainted_format_string.rb:42:22:42:36 | ...[...] | tainted_format_string.rb:42:5:42:43 | "A log message #{...} %08x" | +| tainted_format_string.rb:4:12:4:17 | call to params | tainted_format_string.rb:4:12:4:26 | ...[...] | provenance | | +| tainted_format_string.rb:5:19:5:24 | call to params | tainted_format_string.rb:5:19:5:33 | ...[...] | provenance | | +| tainted_format_string.rb:10:23:10:28 | call to params | tainted_format_string.rb:10:23:10:37 | ...[...] | provenance | | +| tainted_format_string.rb:11:30:11:35 | call to params | tainted_format_string.rb:11:30:11:44 | ...[...] | provenance | | +| tainted_format_string.rb:18:23:18:28 | call to params | tainted_format_string.rb:18:23:18:37 | ...[...] | provenance | | +| tainted_format_string.rb:19:30:19:35 | call to params | tainted_format_string.rb:19:30:19:44 | ...[...] | provenance | | +| tainted_format_string.rb:21:27:21:32 | call to params | tainted_format_string.rb:21:27:21:41 | ...[...] | provenance | | +| tainted_format_string.rb:22:20:22:25 | call to params | tainted_format_string.rb:22:20:22:34 | ...[...] | provenance | | +| tainted_format_string.rb:28:19:28:24 | call to params | tainted_format_string.rb:28:19:28:33 | ...[...] | provenance | | +| tainted_format_string.rb:33:12:33:46 | ... + ... [element] | tainted_format_string.rb:33:12:33:46 | ... + ... | provenance | | +| tainted_format_string.rb:33:32:33:37 | call to params | tainted_format_string.rb:33:32:33:46 | ...[...] | provenance | | +| tainted_format_string.rb:33:32:33:46 | ...[...] | tainted_format_string.rb:33:12:33:46 | ... + ... | provenance | | +| tainted_format_string.rb:33:32:33:46 | ...[...] | tainted_format_string.rb:33:12:33:46 | ... + ... [element] | provenance | | +| tainted_format_string.rb:36:30:36:35 | call to params | tainted_format_string.rb:36:30:36:44 | ...[...] | provenance | | +| tainted_format_string.rb:36:30:36:44 | ...[...] | tainted_format_string.rb:36:12:36:46 | "A log message: #{...}" | provenance | | +| tainted_format_string.rb:39:22:39:27 | call to params | tainted_format_string.rb:39:22:39:36 | ...[...] | provenance | | +| tainted_format_string.rb:39:22:39:36 | ...[...] | tainted_format_string.rb:39:5:39:45 | "A log message #{...} %{foo}" | provenance | | +| tainted_format_string.rb:42:22:42:27 | call to params | tainted_format_string.rb:42:22:42:36 | ...[...] | provenance | | +| tainted_format_string.rb:42:22:42:36 | ...[...] | tainted_format_string.rb:42:5:42:43 | "A log message #{...} %08x" | provenance | | nodes | tainted_format_string.rb:4:12:4:17 | call to params | semmle.label | call to params | | tainted_format_string.rb:4:12:4:26 | ...[...] | semmle.label | ...[...] | diff --git a/ruby/ql/test/query-tests/security/cwe-209/StackTraceExposure.expected b/ruby/ql/test/query-tests/security/cwe-209/StackTraceExposure.expected index 59dc2e070ee..00e0b4317de 100644 --- a/ruby/ql/test/query-tests/security/cwe-209/StackTraceExposure.expected +++ b/ruby/ql/test/query-tests/security/cwe-209/StackTraceExposure.expected @@ -1,6 +1,6 @@ edges -| StackTraceExposure.rb:11:5:11:6 | bt | StackTraceExposure.rb:12:18:12:19 | bt | -| StackTraceExposure.rb:11:10:11:17 | call to caller | StackTraceExposure.rb:11:5:11:6 | bt | +| StackTraceExposure.rb:11:5:11:6 | bt | StackTraceExposure.rb:12:18:12:19 | bt | provenance | | +| StackTraceExposure.rb:11:10:11:17 | call to caller | StackTraceExposure.rb:11:5:11:6 | bt | provenance | | nodes | StackTraceExposure.rb:6:18:6:28 | call to backtrace | semmle.label | call to backtrace | | StackTraceExposure.rb:11:5:11:6 | bt | semmle.label | bt | diff --git a/ruby/ql/test/query-tests/security/cwe-312/CleartextLogging.expected b/ruby/ql/test/query-tests/security/cwe-312/CleartextLogging.expected index a35aef72936..cb29945fbee 100644 --- a/ruby/ql/test/query-tests/security/cwe-312/CleartextLogging.expected +++ b/ruby/ql/test/query-tests/security/cwe-312/CleartextLogging.expected @@ -1,43 +1,43 @@ edges -| logging.rb:3:1:3:8 | password | logging.rb:6:20:6:27 | password | -| logging.rb:3:1:3:8 | password | logging.rb:8:21:8:28 | password | -| logging.rb:3:1:3:8 | password | logging.rb:10:21:10:28 | password | -| logging.rb:3:1:3:8 | password | logging.rb:12:21:12:28 | password | -| logging.rb:3:1:3:8 | password | logging.rb:14:23:14:30 | password | -| logging.rb:3:1:3:8 | password | logging.rb:16:20:16:27 | password | -| logging.rb:3:1:3:8 | password | logging.rb:19:33:19:40 | password | -| logging.rb:3:1:3:8 | password | logging.rb:21:44:21:51 | password | -| logging.rb:3:1:3:8 | password | logging.rb:23:33:23:40 | password | -| logging.rb:3:1:3:8 | password | logging.rb:26:18:26:34 | "pw: #{...}" | -| logging.rb:3:1:3:8 | password | logging.rb:28:26:28:33 | password | -| logging.rb:3:12:3:45 | "043697b96909e03ca907599d6420555f" | logging.rb:3:1:3:8 | password | -| logging.rb:30:1:30:4 | hsh1 [element :password] | logging.rb:38:20:38:23 | hsh1 [element :password] | -| logging.rb:30:20:30:53 | "aec5058e61f7f122998b1a30ee2c66b6" | logging.rb:30:1:30:4 | hsh1 [element :password] | -| logging.rb:34:1:34:4 | [post] hsh2 [element :password] | logging.rb:35:1:35:4 | hsh3 [element :password] | -| logging.rb:34:1:34:4 | [post] hsh2 [element :password] | logging.rb:40:20:40:23 | hsh2 [element :password] | -| logging.rb:34:19:34:52 | "beeda625d7306b45784d91ea0336e201" | logging.rb:34:1:34:4 | [post] hsh2 [element :password] | -| logging.rb:35:1:35:4 | hsh3 [element :password] | logging.rb:42:20:42:23 | hsh3 [element :password] | -| logging.rb:38:20:38:23 | hsh1 [element :password] | logging.rb:38:20:38:34 | ...[...] | -| logging.rb:40:20:40:23 | hsh2 [element :password] | logging.rb:40:20:40:34 | ...[...] | -| logging.rb:42:20:42:23 | hsh3 [element :password] | logging.rb:42:20:42:34 | ...[...] | -| logging.rb:64:1:64:31 | password_masked_ineffective_sub | logging.rb:68:35:68:65 | password_masked_ineffective_sub | -| logging.rb:64:35:64:68 | "ca497451f5e883662fb1a37bc9ec7838" | logging.rb:64:1:64:31 | password_masked_ineffective_sub | -| logging.rb:65:1:65:34 | password_masked_ineffective_sub_ex | logging.rb:78:20:78:53 | password_masked_ineffective_sub_ex | -| logging.rb:65:38:65:71 | "ca497451f5e883662fb1a37bc9ec7838" | logging.rb:65:1:65:34 | password_masked_ineffective_sub_ex | -| logging.rb:66:1:66:32 | password_masked_ineffective_gsub | logging.rb:70:36:70:67 | password_masked_ineffective_gsub | -| logging.rb:66:36:66:69 | "a7e3747b19930d4f4b8181047194832f" | logging.rb:66:1:66:32 | password_masked_ineffective_gsub | -| logging.rb:67:1:67:35 | password_masked_ineffective_gsub_ex | logging.rb:80:20:80:54 | password_masked_ineffective_gsub_ex | -| logging.rb:67:39:67:72 | "a7e3747b19930d4f4b8181047194832f" | logging.rb:67:1:67:35 | password_masked_ineffective_gsub_ex | -| logging.rb:68:1:68:31 | password_masked_ineffective_sub | logging.rb:74:20:74:50 | password_masked_ineffective_sub | -| logging.rb:68:35:68:65 | password_masked_ineffective_sub | logging.rb:68:35:68:88 | call to sub | -| logging.rb:68:35:68:88 | call to sub | logging.rb:68:1:68:31 | password_masked_ineffective_sub | -| logging.rb:70:1:70:32 | password_masked_ineffective_gsub | logging.rb:76:20:76:51 | password_masked_ineffective_gsub | -| logging.rb:70:36:70:67 | password_masked_ineffective_gsub | logging.rb:70:36:70:86 | call to gsub | -| logging.rb:70:36:70:86 | call to gsub | logging.rb:70:1:70:32 | password_masked_ineffective_gsub | -| logging.rb:82:9:82:16 | password | logging.rb:84:15:84:22 | password | -| logging.rb:87:1:87:12 | password_arg | logging.rb:88:5:88:16 | password_arg | -| logging.rb:87:16:87:49 | "65f2950df2f0e2c38d7ba2ccca767291" | logging.rb:87:1:87:12 | password_arg | -| logging.rb:88:5:88:16 | password_arg | logging.rb:82:9:82:16 | password | +| logging.rb:3:1:3:8 | password | logging.rb:6:20:6:27 | password | provenance | | +| logging.rb:3:1:3:8 | password | logging.rb:8:21:8:28 | password | provenance | | +| logging.rb:3:1:3:8 | password | logging.rb:10:21:10:28 | password | provenance | | +| logging.rb:3:1:3:8 | password | logging.rb:12:21:12:28 | password | provenance | | +| logging.rb:3:1:3:8 | password | logging.rb:14:23:14:30 | password | provenance | | +| logging.rb:3:1:3:8 | password | logging.rb:16:20:16:27 | password | provenance | | +| logging.rb:3:1:3:8 | password | logging.rb:19:33:19:40 | password | provenance | | +| logging.rb:3:1:3:8 | password | logging.rb:21:44:21:51 | password | provenance | | +| logging.rb:3:1:3:8 | password | logging.rb:23:33:23:40 | password | provenance | | +| logging.rb:3:1:3:8 | password | logging.rb:26:18:26:34 | "pw: #{...}" | provenance | | +| logging.rb:3:1:3:8 | password | logging.rb:28:26:28:33 | password | provenance | | +| logging.rb:3:12:3:45 | "043697b96909e03ca907599d6420555f" | logging.rb:3:1:3:8 | password | provenance | | +| logging.rb:30:1:30:4 | hsh1 [element :password] | logging.rb:38:20:38:23 | hsh1 [element :password] | provenance | | +| logging.rb:30:20:30:53 | "aec5058e61f7f122998b1a30ee2c66b6" | logging.rb:30:1:30:4 | hsh1 [element :password] | provenance | | +| logging.rb:34:1:34:4 | [post] hsh2 [element :password] | logging.rb:35:1:35:4 | hsh3 [element :password] | provenance | | +| logging.rb:34:1:34:4 | [post] hsh2 [element :password] | logging.rb:40:20:40:23 | hsh2 [element :password] | provenance | | +| logging.rb:34:19:34:52 | "beeda625d7306b45784d91ea0336e201" | logging.rb:34:1:34:4 | [post] hsh2 [element :password] | provenance | | +| logging.rb:35:1:35:4 | hsh3 [element :password] | logging.rb:42:20:42:23 | hsh3 [element :password] | provenance | | +| logging.rb:38:20:38:23 | hsh1 [element :password] | logging.rb:38:20:38:34 | ...[...] | provenance | | +| logging.rb:40:20:40:23 | hsh2 [element :password] | logging.rb:40:20:40:34 | ...[...] | provenance | | +| logging.rb:42:20:42:23 | hsh3 [element :password] | logging.rb:42:20:42:34 | ...[...] | provenance | | +| logging.rb:64:1:64:31 | password_masked_ineffective_sub | logging.rb:68:35:68:65 | password_masked_ineffective_sub | provenance | | +| logging.rb:64:35:64:68 | "ca497451f5e883662fb1a37bc9ec7838" | logging.rb:64:1:64:31 | password_masked_ineffective_sub | provenance | | +| logging.rb:65:1:65:34 | password_masked_ineffective_sub_ex | logging.rb:78:20:78:53 | password_masked_ineffective_sub_ex | provenance | | +| logging.rb:65:38:65:71 | "ca497451f5e883662fb1a37bc9ec7838" | logging.rb:65:1:65:34 | password_masked_ineffective_sub_ex | provenance | | +| logging.rb:66:1:66:32 | password_masked_ineffective_gsub | logging.rb:70:36:70:67 | password_masked_ineffective_gsub | provenance | | +| logging.rb:66:36:66:69 | "a7e3747b19930d4f4b8181047194832f" | logging.rb:66:1:66:32 | password_masked_ineffective_gsub | provenance | | +| logging.rb:67:1:67:35 | password_masked_ineffective_gsub_ex | logging.rb:80:20:80:54 | password_masked_ineffective_gsub_ex | provenance | | +| logging.rb:67:39:67:72 | "a7e3747b19930d4f4b8181047194832f" | logging.rb:67:1:67:35 | password_masked_ineffective_gsub_ex | provenance | | +| logging.rb:68:1:68:31 | password_masked_ineffective_sub | logging.rb:74:20:74:50 | password_masked_ineffective_sub | provenance | | +| logging.rb:68:35:68:65 | password_masked_ineffective_sub | logging.rb:68:35:68:88 | call to sub | provenance | | +| logging.rb:68:35:68:88 | call to sub | logging.rb:68:1:68:31 | password_masked_ineffective_sub | provenance | | +| logging.rb:70:1:70:32 | password_masked_ineffective_gsub | logging.rb:76:20:76:51 | password_masked_ineffective_gsub | provenance | | +| logging.rb:70:36:70:67 | password_masked_ineffective_gsub | logging.rb:70:36:70:86 | call to gsub | provenance | | +| logging.rb:70:36:70:86 | call to gsub | logging.rb:70:1:70:32 | password_masked_ineffective_gsub | provenance | | +| logging.rb:82:9:82:16 | password | logging.rb:84:15:84:22 | password | provenance | | +| logging.rb:87:1:87:12 | password_arg | logging.rb:88:5:88:16 | password_arg | provenance | | +| logging.rb:87:16:87:49 | "65f2950df2f0e2c38d7ba2ccca767291" | logging.rb:87:1:87:12 | password_arg | provenance | | +| logging.rb:88:5:88:16 | password_arg | logging.rb:82:9:82:16 | password | provenance | | nodes | logging.rb:3:1:3:8 | password | semmle.label | password | | logging.rb:3:12:3:45 | "043697b96909e03ca907599d6420555f" | semmle.label | "043697b96909e03ca907599d6420555f" | diff --git a/ruby/ql/test/query-tests/security/cwe-312/CleartextStorage.expected b/ruby/ql/test/query-tests/security/cwe-312/CleartextStorage.expected index 9ec7e50e460..f740990bced 100644 --- a/ruby/ql/test/query-tests/security/cwe-312/CleartextStorage.expected +++ b/ruby/ql/test/query-tests/security/cwe-312/CleartextStorage.expected @@ -1,34 +1,34 @@ edges -| app/controllers/users_controller.rb:3:5:3:16 | new_password | app/controllers/users_controller.rb:5:39:5:50 | new_password | -| app/controllers/users_controller.rb:3:5:3:16 | new_password | app/controllers/users_controller.rb:7:41:7:52 | new_password | -| app/controllers/users_controller.rb:3:20:3:53 | "043697b96909e03ca907599d6420555f" | app/controllers/users_controller.rb:3:5:3:16 | new_password | -| app/controllers/users_controller.rb:11:5:11:16 | new_password | app/controllers/users_controller.rb:13:42:13:53 | new_password | -| app/controllers/users_controller.rb:11:5:11:16 | new_password | app/controllers/users_controller.rb:15:49:15:60 | new_password | -| app/controllers/users_controller.rb:11:5:11:16 | new_password | app/controllers/users_controller.rb:15:49:15:60 | new_password | -| app/controllers/users_controller.rb:11:5:11:16 | new_password | app/controllers/users_controller.rb:15:87:15:98 | new_password | -| app/controllers/users_controller.rb:11:20:11:53 | "083c9e1da4cc0c2f5480bb4dbe6ff141" | app/controllers/users_controller.rb:11:5:11:16 | new_password | -| app/controllers/users_controller.rb:15:49:15:60 | new_password | app/controllers/users_controller.rb:15:87:15:98 | new_password | -| app/controllers/users_controller.rb:19:5:19:16 | new_password | app/controllers/users_controller.rb:21:45:21:56 | new_password | -| app/controllers/users_controller.rb:19:5:19:16 | new_password | app/controllers/users_controller.rb:21:45:21:56 | new_password | -| app/controllers/users_controller.rb:19:5:19:16 | new_password | app/controllers/users_controller.rb:21:83:21:94 | new_password | -| app/controllers/users_controller.rb:19:20:19:53 | "504d224a806cf8073cd14ef08242d422" | app/controllers/users_controller.rb:19:5:19:16 | new_password | -| app/controllers/users_controller.rb:21:45:21:56 | new_password | app/controllers/users_controller.rb:21:83:21:94 | new_password | -| app/controllers/users_controller.rb:26:5:26:16 | new_password | app/controllers/users_controller.rb:28:27:28:38 | new_password | -| app/controllers/users_controller.rb:26:5:26:16 | new_password | app/controllers/users_controller.rb:30:28:30:39 | new_password | -| app/controllers/users_controller.rb:26:20:26:53 | "7d6ae08394c3f284506dca70f05995f6" | app/controllers/users_controller.rb:26:5:26:16 | new_password | -| app/controllers/users_controller.rb:35:5:35:16 | new_password | app/controllers/users_controller.rb:37:39:37:50 | new_password | -| app/controllers/users_controller.rb:35:20:35:53 | "ff295f8648a406c37fbe378377320e4c" | app/controllers/users_controller.rb:35:5:35:16 | new_password | -| app/controllers/users_controller.rb:42:5:42:16 | new_password | app/controllers/users_controller.rb:44:21:44:32 | new_password | -| app/controllers/users_controller.rb:42:20:42:53 | "78ffbec583b546bd073efd898f833184" | app/controllers/users_controller.rb:42:5:42:16 | new_password | -| app/controllers/users_controller.rb:58:5:58:16 | new_password | app/controllers/users_controller.rb:61:25:61:53 | "password: #{...}\\n" | -| app/controllers/users_controller.rb:58:5:58:16 | new_password | app/controllers/users_controller.rb:64:35:64:61 | "password: #{...}" | -| app/controllers/users_controller.rb:58:20:58:53 | "0157af7c38cbdd24f1616de4e5321861" | app/controllers/users_controller.rb:58:5:58:16 | new_password | -| app/models/user.rb:3:5:3:16 | new_password | app/models/user.rb:5:27:5:38 | new_password | -| app/models/user.rb:3:20:3:53 | "06c38c6a8a9c11a9d3b209a3193047b4" | app/models/user.rb:3:5:3:16 | new_password | -| app/models/user.rb:9:5:9:16 | new_password | app/models/user.rb:11:22:11:33 | new_password | -| app/models/user.rb:9:20:9:53 | "52652fb5c709fb6b9b5a0194af7c6067" | app/models/user.rb:9:5:9:16 | new_password | -| app/models/user.rb:15:5:15:16 | new_password | app/models/user.rb:17:21:17:32 | new_password | -| app/models/user.rb:15:20:15:53 | "f982bf2531c149a8a1444a951b12e830" | app/models/user.rb:15:5:15:16 | new_password | +| app/controllers/users_controller.rb:3:5:3:16 | new_password | app/controllers/users_controller.rb:5:39:5:50 | new_password | provenance | | +| app/controllers/users_controller.rb:3:5:3:16 | new_password | app/controllers/users_controller.rb:7:41:7:52 | new_password | provenance | | +| app/controllers/users_controller.rb:3:20:3:53 | "043697b96909e03ca907599d6420555f" | app/controllers/users_controller.rb:3:5:3:16 | new_password | provenance | | +| app/controllers/users_controller.rb:11:5:11:16 | new_password | app/controllers/users_controller.rb:13:42:13:53 | new_password | provenance | | +| app/controllers/users_controller.rb:11:5:11:16 | new_password | app/controllers/users_controller.rb:15:49:15:60 | new_password | provenance | | +| app/controllers/users_controller.rb:11:5:11:16 | new_password | app/controllers/users_controller.rb:15:49:15:60 | new_password | provenance | | +| app/controllers/users_controller.rb:11:5:11:16 | new_password | app/controllers/users_controller.rb:15:87:15:98 | new_password | provenance | | +| app/controllers/users_controller.rb:11:20:11:53 | "083c9e1da4cc0c2f5480bb4dbe6ff141" | app/controllers/users_controller.rb:11:5:11:16 | new_password | provenance | | +| app/controllers/users_controller.rb:15:49:15:60 | new_password | app/controllers/users_controller.rb:15:87:15:98 | new_password | provenance | | +| app/controllers/users_controller.rb:19:5:19:16 | new_password | app/controllers/users_controller.rb:21:45:21:56 | new_password | provenance | | +| app/controllers/users_controller.rb:19:5:19:16 | new_password | app/controllers/users_controller.rb:21:45:21:56 | new_password | provenance | | +| app/controllers/users_controller.rb:19:5:19:16 | new_password | app/controllers/users_controller.rb:21:83:21:94 | new_password | provenance | | +| app/controllers/users_controller.rb:19:20:19:53 | "504d224a806cf8073cd14ef08242d422" | app/controllers/users_controller.rb:19:5:19:16 | new_password | provenance | | +| app/controllers/users_controller.rb:21:45:21:56 | new_password | app/controllers/users_controller.rb:21:83:21:94 | new_password | provenance | | +| app/controllers/users_controller.rb:26:5:26:16 | new_password | app/controllers/users_controller.rb:28:27:28:38 | new_password | provenance | | +| app/controllers/users_controller.rb:26:5:26:16 | new_password | app/controllers/users_controller.rb:30:28:30:39 | new_password | provenance | | +| app/controllers/users_controller.rb:26:20:26:53 | "7d6ae08394c3f284506dca70f05995f6" | app/controllers/users_controller.rb:26:5:26:16 | new_password | provenance | | +| app/controllers/users_controller.rb:35:5:35:16 | new_password | app/controllers/users_controller.rb:37:39:37:50 | new_password | provenance | | +| app/controllers/users_controller.rb:35:20:35:53 | "ff295f8648a406c37fbe378377320e4c" | app/controllers/users_controller.rb:35:5:35:16 | new_password | provenance | | +| app/controllers/users_controller.rb:42:5:42:16 | new_password | app/controllers/users_controller.rb:44:21:44:32 | new_password | provenance | | +| app/controllers/users_controller.rb:42:20:42:53 | "78ffbec583b546bd073efd898f833184" | app/controllers/users_controller.rb:42:5:42:16 | new_password | provenance | | +| app/controllers/users_controller.rb:58:5:58:16 | new_password | app/controllers/users_controller.rb:61:25:61:53 | "password: #{...}\\n" | provenance | | +| app/controllers/users_controller.rb:58:5:58:16 | new_password | app/controllers/users_controller.rb:64:35:64:61 | "password: #{...}" | provenance | | +| app/controllers/users_controller.rb:58:20:58:53 | "0157af7c38cbdd24f1616de4e5321861" | app/controllers/users_controller.rb:58:5:58:16 | new_password | provenance | | +| app/models/user.rb:3:5:3:16 | new_password | app/models/user.rb:5:27:5:38 | new_password | provenance | | +| app/models/user.rb:3:20:3:53 | "06c38c6a8a9c11a9d3b209a3193047b4" | app/models/user.rb:3:5:3:16 | new_password | provenance | | +| app/models/user.rb:9:5:9:16 | new_password | app/models/user.rb:11:22:11:33 | new_password | provenance | | +| app/models/user.rb:9:20:9:53 | "52652fb5c709fb6b9b5a0194af7c6067" | app/models/user.rb:9:5:9:16 | new_password | provenance | | +| app/models/user.rb:15:5:15:16 | new_password | app/models/user.rb:17:21:17:32 | new_password | provenance | | +| app/models/user.rb:15:20:15:53 | "f982bf2531c149a8a1444a951b12e830" | app/models/user.rb:15:5:15:16 | new_password | provenance | | nodes | app/controllers/users_controller.rb:3:5:3:16 | new_password | semmle.label | new_password | | app/controllers/users_controller.rb:3:20:3:53 | "043697b96909e03ca907599d6420555f" | semmle.label | "043697b96909e03ca907599d6420555f" | diff --git a/ruby/ql/test/query-tests/security/cwe-502/oj-global-options/UnsafeDeserialization.expected b/ruby/ql/test/query-tests/security/cwe-502/oj-global-options/UnsafeDeserialization.expected index 27bfc08947f..44f54744e4b 100644 --- a/ruby/ql/test/query-tests/security/cwe-502/oj-global-options/UnsafeDeserialization.expected +++ b/ruby/ql/test/query-tests/security/cwe-502/oj-global-options/UnsafeDeserialization.expected @@ -1,7 +1,7 @@ edges -| OjGlobalOptions.rb:13:5:13:13 | json_data | OjGlobalOptions.rb:14:22:14:30 | json_data | -| OjGlobalOptions.rb:13:17:13:22 | call to params | OjGlobalOptions.rb:13:17:13:28 | ...[...] | -| OjGlobalOptions.rb:13:17:13:28 | ...[...] | OjGlobalOptions.rb:13:5:13:13 | json_data | +| OjGlobalOptions.rb:13:5:13:13 | json_data | OjGlobalOptions.rb:14:22:14:30 | json_data | provenance | | +| OjGlobalOptions.rb:13:17:13:22 | call to params | OjGlobalOptions.rb:13:17:13:28 | ...[...] | provenance | | +| OjGlobalOptions.rb:13:17:13:28 | ...[...] | OjGlobalOptions.rb:13:5:13:13 | json_data | provenance | | nodes | OjGlobalOptions.rb:13:5:13:13 | json_data | semmle.label | json_data | | OjGlobalOptions.rb:13:17:13:22 | call to params | semmle.label | call to params | diff --git a/ruby/ql/test/query-tests/security/cwe-502/ox-global-options/UnsafeDeserialization.expected b/ruby/ql/test/query-tests/security/cwe-502/ox-global-options/UnsafeDeserialization.expected index e96275a95ad..4fa7c85df05 100644 --- a/ruby/ql/test/query-tests/security/cwe-502/ox-global-options/UnsafeDeserialization.expected +++ b/ruby/ql/test/query-tests/security/cwe-502/ox-global-options/UnsafeDeserialization.expected @@ -1,7 +1,7 @@ edges -| OxGlobalOptions.rb:6:5:6:12 | xml_data | OxGlobalOptions.rb:7:22:7:29 | xml_data | -| OxGlobalOptions.rb:6:16:6:21 | call to params | OxGlobalOptions.rb:6:16:6:27 | ...[...] | -| OxGlobalOptions.rb:6:16:6:27 | ...[...] | OxGlobalOptions.rb:6:5:6:12 | xml_data | +| OxGlobalOptions.rb:6:5:6:12 | xml_data | OxGlobalOptions.rb:7:22:7:29 | xml_data | provenance | | +| OxGlobalOptions.rb:6:16:6:21 | call to params | OxGlobalOptions.rb:6:16:6:27 | ...[...] | provenance | | +| OxGlobalOptions.rb:6:16:6:27 | ...[...] | OxGlobalOptions.rb:6:5:6:12 | xml_data | provenance | | nodes | OxGlobalOptions.rb:6:5:6:12 | xml_data | semmle.label | xml_data | | OxGlobalOptions.rb:6:16:6:21 | call to params | semmle.label | call to params | diff --git a/ruby/ql/test/query-tests/security/cwe-502/unsafe-deserialization/UnsafeDeserialization.expected b/ruby/ql/test/query-tests/security/cwe-502/unsafe-deserialization/UnsafeDeserialization.expected index 8a17c569e33..bf0376f3959 100644 --- a/ruby/ql/test/query-tests/security/cwe-502/unsafe-deserialization/UnsafeDeserialization.expected +++ b/ruby/ql/test/query-tests/security/cwe-502/unsafe-deserialization/UnsafeDeserialization.expected @@ -1,55 +1,55 @@ edges -| PlistUnsafeDeserialization.rb:5:30:5:35 | call to params | PlistUnsafeDeserialization.rb:5:30:5:49 | ...[...] | -| PlistUnsafeDeserialization.rb:6:30:6:35 | call to params | PlistUnsafeDeserialization.rb:6:30:6:49 | ...[...] | -| UnsafeDeserialization.rb:11:5:11:19 | serialized_data | UnsafeDeserialization.rb:12:27:12:41 | serialized_data | -| UnsafeDeserialization.rb:11:23:11:50 | call to decode64 | UnsafeDeserialization.rb:11:5:11:19 | serialized_data | -| UnsafeDeserialization.rb:11:39:11:44 | call to params | UnsafeDeserialization.rb:11:39:11:50 | ...[...] | -| UnsafeDeserialization.rb:11:39:11:50 | ...[...] | UnsafeDeserialization.rb:11:23:11:50 | call to decode64 | -| UnsafeDeserialization.rb:17:5:17:19 | serialized_data | UnsafeDeserialization.rb:18:30:18:44 | serialized_data | -| UnsafeDeserialization.rb:17:23:17:50 | call to decode64 | UnsafeDeserialization.rb:17:5:17:19 | serialized_data | -| UnsafeDeserialization.rb:17:39:17:44 | call to params | UnsafeDeserialization.rb:17:39:17:50 | ...[...] | -| UnsafeDeserialization.rb:17:39:17:50 | ...[...] | UnsafeDeserialization.rb:17:23:17:50 | call to decode64 | -| UnsafeDeserialization.rb:23:5:23:13 | json_data | UnsafeDeserialization.rb:24:24:24:32 | json_data | -| UnsafeDeserialization.rb:23:17:23:22 | call to params | UnsafeDeserialization.rb:23:17:23:28 | ...[...] | -| UnsafeDeserialization.rb:23:17:23:28 | ...[...] | UnsafeDeserialization.rb:23:5:23:13 | json_data | -| UnsafeDeserialization.rb:29:5:29:13 | json_data | UnsafeDeserialization.rb:30:27:30:35 | json_data | -| UnsafeDeserialization.rb:29:17:29:22 | call to params | UnsafeDeserialization.rb:29:17:29:28 | ...[...] | -| UnsafeDeserialization.rb:29:17:29:28 | ...[...] | UnsafeDeserialization.rb:29:5:29:13 | json_data | -| UnsafeDeserialization.rb:41:5:41:13 | yaml_data | UnsafeDeserialization.rb:42:24:42:32 | yaml_data | -| UnsafeDeserialization.rb:41:17:41:22 | call to params | UnsafeDeserialization.rb:41:17:41:28 | ...[...] | -| UnsafeDeserialization.rb:41:17:41:28 | ...[...] | UnsafeDeserialization.rb:41:5:41:13 | yaml_data | -| UnsafeDeserialization.rb:53:5:53:13 | json_data | UnsafeDeserialization.rb:54:22:54:30 | json_data | -| UnsafeDeserialization.rb:53:5:53:13 | json_data | UnsafeDeserialization.rb:55:22:55:30 | json_data | -| UnsafeDeserialization.rb:53:17:53:22 | call to params | UnsafeDeserialization.rb:53:17:53:28 | ...[...] | -| UnsafeDeserialization.rb:53:17:53:28 | ...[...] | UnsafeDeserialization.rb:53:5:53:13 | json_data | -| UnsafeDeserialization.rb:60:5:60:13 | json_data | UnsafeDeserialization.rb:70:23:70:31 | json_data | -| UnsafeDeserialization.rb:60:17:60:22 | call to params | UnsafeDeserialization.rb:60:17:60:28 | ...[...] | -| UnsafeDeserialization.rb:60:17:60:28 | ...[...] | UnsafeDeserialization.rb:60:5:60:13 | json_data | -| UnsafeDeserialization.rb:81:4:81:12 | json_data | UnsafeDeserialization.rb:82:28:82:36 | json_data | -| UnsafeDeserialization.rb:81:16:81:21 | call to params | UnsafeDeserialization.rb:81:16:81:27 | ...[...] | -| UnsafeDeserialization.rb:81:16:81:27 | ...[...] | UnsafeDeserialization.rb:81:4:81:12 | json_data | -| UnsafeDeserialization.rb:87:4:87:11 | xml_data | UnsafeDeserialization.rb:88:26:88:33 | xml_data | -| UnsafeDeserialization.rb:87:15:87:20 | call to params | UnsafeDeserialization.rb:87:15:87:26 | ...[...] | -| UnsafeDeserialization.rb:87:15:87:26 | ...[...] | UnsafeDeserialization.rb:87:4:87:11 | xml_data | -| UnsafeDeserialization.rb:93:5:93:12 | xml_data | UnsafeDeserialization.rb:94:22:94:29 | xml_data | -| UnsafeDeserialization.rb:93:16:93:21 | call to params | UnsafeDeserialization.rb:93:16:93:27 | ...[...] | -| UnsafeDeserialization.rb:93:16:93:27 | ...[...] | UnsafeDeserialization.rb:93:5:93:12 | xml_data | -| UnsafeDeserialization.rb:109:5:109:7 | xml | UnsafeDeserialization.rb:110:34:110:36 | xml | -| UnsafeDeserialization.rb:109:11:109:16 | call to params | UnsafeDeserialization.rb:109:11:109:22 | ...[...] | -| UnsafeDeserialization.rb:109:11:109:22 | ...[...] | UnsafeDeserialization.rb:109:5:109:7 | xml | -| UnsafeDeserialization.rb:115:5:115:13 | yaml_data | UnsafeDeserialization.rb:116:25:116:33 | yaml_data | -| UnsafeDeserialization.rb:115:17:115:22 | call to params | UnsafeDeserialization.rb:115:17:115:28 | ...[...] | -| UnsafeDeserialization.rb:115:17:115:28 | ...[...] | UnsafeDeserialization.rb:115:5:115:13 | yaml_data | -| YAMLUnsafeDeserialization.rb:5:16:5:21 | call to params | YAMLUnsafeDeserialization.rb:5:16:5:35 | ...[...] | -| YAMLUnsafeDeserialization.rb:11:23:11:28 | call to params | YAMLUnsafeDeserialization.rb:11:23:11:42 | ...[...] | -| YAMLUnsafeDeserialization.rb:12:28:12:33 | call to params | YAMLUnsafeDeserialization.rb:12:28:12:45 | ...[...] | -| YAMLUnsafeDeserialization.rb:13:23:13:28 | call to params | YAMLUnsafeDeserialization.rb:13:23:13:42 | ...[...] | -| YAMLUnsafeDeserialization.rb:14:39:14:44 | call to params | YAMLUnsafeDeserialization.rb:14:39:14:58 | ...[...] | -| YAMLUnsafeDeserialization.rb:14:39:14:58 | ...[...] | YAMLUnsafeDeserialization.rb:15:5:15:24 | call to to_ruby | -| YAMLUnsafeDeserialization.rb:16:17:16:22 | call to params | YAMLUnsafeDeserialization.rb:16:17:16:36 | ...[...] | -| YAMLUnsafeDeserialization.rb:16:17:16:36 | ...[...] | YAMLUnsafeDeserialization.rb:16:5:16:45 | call to to_ruby | -| YAMLUnsafeDeserialization.rb:17:22:17:27 | call to params | YAMLUnsafeDeserialization.rb:17:22:17:39 | ...[...] | -| YAMLUnsafeDeserialization.rb:17:22:17:39 | ...[...] | YAMLUnsafeDeserialization.rb:17:5:17:48 | call to to_ruby | +| PlistUnsafeDeserialization.rb:5:30:5:35 | call to params | PlistUnsafeDeserialization.rb:5:30:5:49 | ...[...] | provenance | | +| PlistUnsafeDeserialization.rb:6:30:6:35 | call to params | PlistUnsafeDeserialization.rb:6:30:6:49 | ...[...] | provenance | | +| UnsafeDeserialization.rb:11:5:11:19 | serialized_data | UnsafeDeserialization.rb:12:27:12:41 | serialized_data | provenance | | +| UnsafeDeserialization.rb:11:23:11:50 | call to decode64 | UnsafeDeserialization.rb:11:5:11:19 | serialized_data | provenance | | +| UnsafeDeserialization.rb:11:39:11:44 | call to params | UnsafeDeserialization.rb:11:39:11:50 | ...[...] | provenance | | +| UnsafeDeserialization.rb:11:39:11:50 | ...[...] | UnsafeDeserialization.rb:11:23:11:50 | call to decode64 | provenance | | +| UnsafeDeserialization.rb:17:5:17:19 | serialized_data | UnsafeDeserialization.rb:18:30:18:44 | serialized_data | provenance | | +| UnsafeDeserialization.rb:17:23:17:50 | call to decode64 | UnsafeDeserialization.rb:17:5:17:19 | serialized_data | provenance | | +| UnsafeDeserialization.rb:17:39:17:44 | call to params | UnsafeDeserialization.rb:17:39:17:50 | ...[...] | provenance | | +| UnsafeDeserialization.rb:17:39:17:50 | ...[...] | UnsafeDeserialization.rb:17:23:17:50 | call to decode64 | provenance | | +| UnsafeDeserialization.rb:23:5:23:13 | json_data | UnsafeDeserialization.rb:24:24:24:32 | json_data | provenance | | +| UnsafeDeserialization.rb:23:17:23:22 | call to params | UnsafeDeserialization.rb:23:17:23:28 | ...[...] | provenance | | +| UnsafeDeserialization.rb:23:17:23:28 | ...[...] | UnsafeDeserialization.rb:23:5:23:13 | json_data | provenance | | +| UnsafeDeserialization.rb:29:5:29:13 | json_data | UnsafeDeserialization.rb:30:27:30:35 | json_data | provenance | | +| UnsafeDeserialization.rb:29:17:29:22 | call to params | UnsafeDeserialization.rb:29:17:29:28 | ...[...] | provenance | | +| UnsafeDeserialization.rb:29:17:29:28 | ...[...] | UnsafeDeserialization.rb:29:5:29:13 | json_data | provenance | | +| UnsafeDeserialization.rb:41:5:41:13 | yaml_data | UnsafeDeserialization.rb:42:24:42:32 | yaml_data | provenance | | +| UnsafeDeserialization.rb:41:17:41:22 | call to params | UnsafeDeserialization.rb:41:17:41:28 | ...[...] | provenance | | +| UnsafeDeserialization.rb:41:17:41:28 | ...[...] | UnsafeDeserialization.rb:41:5:41:13 | yaml_data | provenance | | +| UnsafeDeserialization.rb:53:5:53:13 | json_data | UnsafeDeserialization.rb:54:22:54:30 | json_data | provenance | | +| UnsafeDeserialization.rb:53:5:53:13 | json_data | UnsafeDeserialization.rb:55:22:55:30 | json_data | provenance | | +| UnsafeDeserialization.rb:53:17:53:22 | call to params | UnsafeDeserialization.rb:53:17:53:28 | ...[...] | provenance | | +| UnsafeDeserialization.rb:53:17:53:28 | ...[...] | UnsafeDeserialization.rb:53:5:53:13 | json_data | provenance | | +| UnsafeDeserialization.rb:60:5:60:13 | json_data | UnsafeDeserialization.rb:70:23:70:31 | json_data | provenance | | +| UnsafeDeserialization.rb:60:17:60:22 | call to params | UnsafeDeserialization.rb:60:17:60:28 | ...[...] | provenance | | +| UnsafeDeserialization.rb:60:17:60:28 | ...[...] | UnsafeDeserialization.rb:60:5:60:13 | json_data | provenance | | +| UnsafeDeserialization.rb:81:4:81:12 | json_data | UnsafeDeserialization.rb:82:28:82:36 | json_data | provenance | | +| UnsafeDeserialization.rb:81:16:81:21 | call to params | UnsafeDeserialization.rb:81:16:81:27 | ...[...] | provenance | | +| UnsafeDeserialization.rb:81:16:81:27 | ...[...] | UnsafeDeserialization.rb:81:4:81:12 | json_data | provenance | | +| UnsafeDeserialization.rb:87:4:87:11 | xml_data | UnsafeDeserialization.rb:88:26:88:33 | xml_data | provenance | | +| UnsafeDeserialization.rb:87:15:87:20 | call to params | UnsafeDeserialization.rb:87:15:87:26 | ...[...] | provenance | | +| UnsafeDeserialization.rb:87:15:87:26 | ...[...] | UnsafeDeserialization.rb:87:4:87:11 | xml_data | provenance | | +| UnsafeDeserialization.rb:93:5:93:12 | xml_data | UnsafeDeserialization.rb:94:22:94:29 | xml_data | provenance | | +| UnsafeDeserialization.rb:93:16:93:21 | call to params | UnsafeDeserialization.rb:93:16:93:27 | ...[...] | provenance | | +| UnsafeDeserialization.rb:93:16:93:27 | ...[...] | UnsafeDeserialization.rb:93:5:93:12 | xml_data | provenance | | +| UnsafeDeserialization.rb:109:5:109:7 | xml | UnsafeDeserialization.rb:110:34:110:36 | xml | provenance | | +| UnsafeDeserialization.rb:109:11:109:16 | call to params | UnsafeDeserialization.rb:109:11:109:22 | ...[...] | provenance | | +| UnsafeDeserialization.rb:109:11:109:22 | ...[...] | UnsafeDeserialization.rb:109:5:109:7 | xml | provenance | | +| UnsafeDeserialization.rb:115:5:115:13 | yaml_data | UnsafeDeserialization.rb:116:25:116:33 | yaml_data | provenance | | +| UnsafeDeserialization.rb:115:17:115:22 | call to params | UnsafeDeserialization.rb:115:17:115:28 | ...[...] | provenance | | +| UnsafeDeserialization.rb:115:17:115:28 | ...[...] | UnsafeDeserialization.rb:115:5:115:13 | yaml_data | provenance | | +| YAMLUnsafeDeserialization.rb:5:16:5:21 | call to params | YAMLUnsafeDeserialization.rb:5:16:5:35 | ...[...] | provenance | | +| YAMLUnsafeDeserialization.rb:11:23:11:28 | call to params | YAMLUnsafeDeserialization.rb:11:23:11:42 | ...[...] | provenance | | +| YAMLUnsafeDeserialization.rb:12:28:12:33 | call to params | YAMLUnsafeDeserialization.rb:12:28:12:45 | ...[...] | provenance | | +| YAMLUnsafeDeserialization.rb:13:23:13:28 | call to params | YAMLUnsafeDeserialization.rb:13:23:13:42 | ...[...] | provenance | | +| YAMLUnsafeDeserialization.rb:14:39:14:44 | call to params | YAMLUnsafeDeserialization.rb:14:39:14:58 | ...[...] | provenance | | +| YAMLUnsafeDeserialization.rb:14:39:14:58 | ...[...] | YAMLUnsafeDeserialization.rb:15:5:15:24 | call to to_ruby | provenance | | +| YAMLUnsafeDeserialization.rb:16:17:16:22 | call to params | YAMLUnsafeDeserialization.rb:16:17:16:36 | ...[...] | provenance | | +| YAMLUnsafeDeserialization.rb:16:17:16:36 | ...[...] | YAMLUnsafeDeserialization.rb:16:5:16:45 | call to to_ruby | provenance | | +| YAMLUnsafeDeserialization.rb:17:22:17:27 | call to params | YAMLUnsafeDeserialization.rb:17:22:17:39 | ...[...] | provenance | | +| YAMLUnsafeDeserialization.rb:17:22:17:39 | ...[...] | YAMLUnsafeDeserialization.rb:17:5:17:48 | call to to_ruby | provenance | | nodes | PlistUnsafeDeserialization.rb:5:30:5:35 | call to params | semmle.label | call to params | | PlistUnsafeDeserialization.rb:5:30:5:49 | ...[...] | semmle.label | ...[...] | diff --git a/ruby/ql/test/query-tests/security/cwe-506/HardcodedDataInterpretedAsCode.expected b/ruby/ql/test/query-tests/security/cwe-506/HardcodedDataInterpretedAsCode.expected index 57918d9da20..84a46276371 100644 --- a/ruby/ql/test/query-tests/security/cwe-506/HardcodedDataInterpretedAsCode.expected +++ b/ruby/ql/test/query-tests/security/cwe-506/HardcodedDataInterpretedAsCode.expected @@ -1,15 +1,15 @@ edges -| tst.rb:1:7:1:7 | r | tst.rb:2:4:2:4 | r | -| tst.rb:2:4:2:4 | r | tst.rb:2:3:2:15 | call to pack | -| tst.rb:5:1:5:23 | totally_harmless_string | tst.rb:7:8:7:30 | totally_harmless_string | -| tst.rb:5:27:5:72 | "707574732822636f646520696e6a6..." | tst.rb:5:1:5:23 | totally_harmless_string | -| tst.rb:7:8:7:30 | totally_harmless_string | tst.rb:1:7:1:7 | r | -| tst.rb:7:8:7:30 | totally_harmless_string | tst.rb:7:6:7:31 | call to e | -| tst.rb:10:11:10:24 | "666f6f626172" | tst.rb:1:7:1:7 | r | -| tst.rb:10:11:10:24 | "666f6f626172" | tst.rb:10:9:10:25 | call to e | -| tst.rb:16:1:16:27 | another_questionable_string | tst.rb:17:6:17:32 | another_questionable_string | -| tst.rb:16:31:16:84 | "\\x70\\x75\\x74\\x73\\x28\\x27\\x68\\..." | tst.rb:16:1:16:27 | another_questionable_string | -| tst.rb:17:6:17:32 | another_questionable_string | tst.rb:17:6:17:38 | call to strip | +| tst.rb:1:7:1:7 | r | tst.rb:2:4:2:4 | r | provenance | | +| tst.rb:2:4:2:4 | r | tst.rb:2:3:2:15 | call to pack | provenance | | +| tst.rb:5:1:5:23 | totally_harmless_string | tst.rb:7:8:7:30 | totally_harmless_string | provenance | | +| tst.rb:5:27:5:72 | "707574732822636f646520696e6a6..." | tst.rb:5:1:5:23 | totally_harmless_string | provenance | | +| tst.rb:7:8:7:30 | totally_harmless_string | tst.rb:1:7:1:7 | r | provenance | | +| tst.rb:7:8:7:30 | totally_harmless_string | tst.rb:7:6:7:31 | call to e | provenance | | +| tst.rb:10:11:10:24 | "666f6f626172" | tst.rb:1:7:1:7 | r | provenance | | +| tst.rb:10:11:10:24 | "666f6f626172" | tst.rb:10:9:10:25 | call to e | provenance | | +| tst.rb:16:1:16:27 | another_questionable_string | tst.rb:17:6:17:32 | another_questionable_string | provenance | | +| tst.rb:16:31:16:84 | "\\x70\\x75\\x74\\x73\\x28\\x27\\x68\\..." | tst.rb:16:1:16:27 | another_questionable_string | provenance | | +| tst.rb:17:6:17:32 | another_questionable_string | tst.rb:17:6:17:38 | call to strip | provenance | | nodes | tst.rb:1:7:1:7 | r | semmle.label | r | | tst.rb:2:3:2:15 | call to pack | semmle.label | call to pack | diff --git a/ruby/ql/test/query-tests/security/cwe-601/UrlRedirect.expected b/ruby/ql/test/query-tests/security/cwe-601/UrlRedirect.expected index 8d09e79a571..3dfe8be90bf 100644 --- a/ruby/ql/test/query-tests/security/cwe-601/UrlRedirect.expected +++ b/ruby/ql/test/query-tests/security/cwe-601/UrlRedirect.expected @@ -1,17 +1,17 @@ edges -| UrlRedirect.rb:9:17:9:22 | call to params | UrlRedirect.rb:9:17:9:28 | ...[...] | -| UrlRedirect.rb:14:17:14:22 | call to params | UrlRedirect.rb:14:17:14:43 | call to fetch | -| UrlRedirect.rb:19:17:19:22 | call to params | UrlRedirect.rb:19:17:19:37 | call to to_unsafe_hash | -| UrlRedirect.rb:24:31:24:36 | call to params | UrlRedirect.rb:24:17:24:37 | call to filter_params | -| UrlRedirect.rb:24:31:24:36 | call to params | UrlRedirect.rb:93:21:93:32 | input_params | -| UrlRedirect.rb:34:20:34:25 | call to params | UrlRedirect.rb:34:20:34:31 | ...[...] | -| UrlRedirect.rb:34:20:34:31 | ...[...] | UrlRedirect.rb:34:17:34:37 | "#{...}/foo" | -| UrlRedirect.rb:58:17:58:22 | call to params | UrlRedirect.rb:58:17:58:28 | ...[...] | -| UrlRedirect.rb:63:38:63:43 | call to params | UrlRedirect.rb:63:38:63:49 | ...[...] | -| UrlRedirect.rb:68:38:68:43 | call to params | UrlRedirect.rb:68:38:68:49 | ...[...] | -| UrlRedirect.rb:73:25:73:30 | call to params | UrlRedirect.rb:73:25:73:36 | ...[...] | -| UrlRedirect.rb:93:21:93:32 | input_params | UrlRedirect.rb:94:5:94:16 | input_params | -| UrlRedirect.rb:94:5:94:16 | input_params | UrlRedirect.rb:94:5:94:29 | call to permit | +| UrlRedirect.rb:9:17:9:22 | call to params | UrlRedirect.rb:9:17:9:28 | ...[...] | provenance | | +| UrlRedirect.rb:14:17:14:22 | call to params | UrlRedirect.rb:14:17:14:43 | call to fetch | provenance | | +| UrlRedirect.rb:19:17:19:22 | call to params | UrlRedirect.rb:19:17:19:37 | call to to_unsafe_hash | provenance | | +| UrlRedirect.rb:24:31:24:36 | call to params | UrlRedirect.rb:24:17:24:37 | call to filter_params | provenance | | +| UrlRedirect.rb:24:31:24:36 | call to params | UrlRedirect.rb:93:21:93:32 | input_params | provenance | | +| UrlRedirect.rb:34:20:34:25 | call to params | UrlRedirect.rb:34:20:34:31 | ...[...] | provenance | | +| UrlRedirect.rb:34:20:34:31 | ...[...] | UrlRedirect.rb:34:17:34:37 | "#{...}/foo" | provenance | | +| UrlRedirect.rb:58:17:58:22 | call to params | UrlRedirect.rb:58:17:58:28 | ...[...] | provenance | | +| UrlRedirect.rb:63:38:63:43 | call to params | UrlRedirect.rb:63:38:63:49 | ...[...] | provenance | | +| UrlRedirect.rb:68:38:68:43 | call to params | UrlRedirect.rb:68:38:68:49 | ...[...] | provenance | | +| UrlRedirect.rb:73:25:73:30 | call to params | UrlRedirect.rb:73:25:73:36 | ...[...] | provenance | | +| UrlRedirect.rb:93:21:93:32 | input_params | UrlRedirect.rb:94:5:94:16 | input_params | provenance | | +| UrlRedirect.rb:94:5:94:16 | input_params | UrlRedirect.rb:94:5:94:29 | call to permit | provenance | | nodes | UrlRedirect.rb:4:17:4:22 | call to params | semmle.label | call to params | | UrlRedirect.rb:9:17:9:22 | call to params | semmle.label | call to params | diff --git a/ruby/ql/test/query-tests/security/cwe-611/libxml-backend/Xxe.expected b/ruby/ql/test/query-tests/security/cwe-611/libxml-backend/Xxe.expected index f4af8eaf7c0..d819e92c930 100644 --- a/ruby/ql/test/query-tests/security/cwe-611/libxml-backend/Xxe.expected +++ b/ruby/ql/test/query-tests/security/cwe-611/libxml-backend/Xxe.expected @@ -1,10 +1,10 @@ edges -| LibXmlBackend.rb:16:5:16:11 | content | LibXmlBackend.rb:18:30:18:36 | content | -| LibXmlBackend.rb:16:5:16:11 | content | LibXmlBackend.rb:19:19:19:25 | content | -| LibXmlBackend.rb:16:5:16:11 | content | LibXmlBackend.rb:20:27:20:33 | content | -| LibXmlBackend.rb:16:5:16:11 | content | LibXmlBackend.rb:21:34:21:40 | content | -| LibXmlBackend.rb:16:15:16:20 | call to params | LibXmlBackend.rb:16:15:16:26 | ...[...] | -| LibXmlBackend.rb:16:15:16:26 | ...[...] | LibXmlBackend.rb:16:5:16:11 | content | +| LibXmlBackend.rb:16:5:16:11 | content | LibXmlBackend.rb:18:30:18:36 | content | provenance | | +| LibXmlBackend.rb:16:5:16:11 | content | LibXmlBackend.rb:19:19:19:25 | content | provenance | | +| LibXmlBackend.rb:16:5:16:11 | content | LibXmlBackend.rb:20:27:20:33 | content | provenance | | +| LibXmlBackend.rb:16:5:16:11 | content | LibXmlBackend.rb:21:34:21:40 | content | provenance | | +| LibXmlBackend.rb:16:15:16:20 | call to params | LibXmlBackend.rb:16:15:16:26 | ...[...] | provenance | | +| LibXmlBackend.rb:16:15:16:26 | ...[...] | LibXmlBackend.rb:16:5:16:11 | content | provenance | | nodes | LibXmlBackend.rb:16:5:16:11 | content | semmle.label | content | | LibXmlBackend.rb:16:15:16:20 | call to params | semmle.label | call to params | diff --git a/ruby/ql/test/query-tests/security/cwe-611/xxe/Xxe.expected b/ruby/ql/test/query-tests/security/cwe-611/xxe/Xxe.expected index 9474c258561..44acc636b60 100644 --- a/ruby/ql/test/query-tests/security/cwe-611/xxe/Xxe.expected +++ b/ruby/ql/test/query-tests/security/cwe-611/xxe/Xxe.expected @@ -1,31 +1,31 @@ edges -| LibXmlRuby.rb:3:5:3:11 | content | LibXmlRuby.rb:4:34:4:40 | content | -| LibXmlRuby.rb:3:5:3:11 | content | LibXmlRuby.rb:5:32:5:38 | content | -| LibXmlRuby.rb:3:5:3:11 | content | LibXmlRuby.rb:6:30:6:36 | content | -| LibXmlRuby.rb:3:5:3:11 | content | LibXmlRuby.rb:7:32:7:38 | content | -| LibXmlRuby.rb:3:5:3:11 | content | LibXmlRuby.rb:8:30:8:36 | content | -| LibXmlRuby.rb:3:5:3:11 | content | LibXmlRuby.rb:9:28:9:34 | content | -| LibXmlRuby.rb:3:5:3:11 | content | LibXmlRuby.rb:11:26:11:32 | content | -| LibXmlRuby.rb:3:5:3:11 | content | LibXmlRuby.rb:12:24:12:30 | content | -| LibXmlRuby.rb:3:15:3:20 | call to params | LibXmlRuby.rb:3:15:3:26 | ...[...] | -| LibXmlRuby.rb:3:15:3:26 | ...[...] | LibXmlRuby.rb:3:5:3:11 | content | -| Nokogiri.rb:3:5:3:11 | content | Nokogiri.rb:5:26:5:32 | content | -| Nokogiri.rb:3:5:3:11 | content | Nokogiri.rb:6:26:6:32 | content | -| Nokogiri.rb:3:5:3:11 | content | Nokogiri.rb:7:26:7:32 | content | -| Nokogiri.rb:3:5:3:11 | content | Nokogiri.rb:8:26:8:32 | content | -| Nokogiri.rb:3:5:3:11 | content | Nokogiri.rb:9:26:9:32 | content | -| Nokogiri.rb:3:5:3:11 | content | Nokogiri.rb:11:26:11:32 | content | -| Nokogiri.rb:3:5:3:11 | content | Nokogiri.rb:12:26:12:32 | content | -| Nokogiri.rb:3:5:3:11 | content | Nokogiri.rb:15:26:15:32 | content | -| Nokogiri.rb:3:5:3:11 | content | Nokogiri.rb:16:26:16:32 | content | -| Nokogiri.rb:3:5:3:11 | content | Nokogiri.rb:18:26:18:32 | content | -| Nokogiri.rb:3:5:3:11 | content | Nokogiri.rb:19:26:19:32 | content | -| Nokogiri.rb:3:5:3:11 | content | Nokogiri.rb:22:26:22:32 | content | -| Nokogiri.rb:3:5:3:11 | content | Nokogiri.rb:25:26:25:32 | content | -| Nokogiri.rb:3:5:3:11 | content | Nokogiri.rb:27:26:27:32 | content | -| Nokogiri.rb:3:5:3:11 | content | Nokogiri.rb:28:26:28:32 | content | -| Nokogiri.rb:3:15:3:20 | call to params | Nokogiri.rb:3:15:3:26 | ...[...] | -| Nokogiri.rb:3:15:3:26 | ...[...] | Nokogiri.rb:3:5:3:11 | content | +| LibXmlRuby.rb:3:5:3:11 | content | LibXmlRuby.rb:4:34:4:40 | content | provenance | | +| LibXmlRuby.rb:3:5:3:11 | content | LibXmlRuby.rb:5:32:5:38 | content | provenance | | +| LibXmlRuby.rb:3:5:3:11 | content | LibXmlRuby.rb:6:30:6:36 | content | provenance | | +| LibXmlRuby.rb:3:5:3:11 | content | LibXmlRuby.rb:7:32:7:38 | content | provenance | | +| LibXmlRuby.rb:3:5:3:11 | content | LibXmlRuby.rb:8:30:8:36 | content | provenance | | +| LibXmlRuby.rb:3:5:3:11 | content | LibXmlRuby.rb:9:28:9:34 | content | provenance | | +| LibXmlRuby.rb:3:5:3:11 | content | LibXmlRuby.rb:11:26:11:32 | content | provenance | | +| LibXmlRuby.rb:3:5:3:11 | content | LibXmlRuby.rb:12:24:12:30 | content | provenance | | +| LibXmlRuby.rb:3:15:3:20 | call to params | LibXmlRuby.rb:3:15:3:26 | ...[...] | provenance | | +| LibXmlRuby.rb:3:15:3:26 | ...[...] | LibXmlRuby.rb:3:5:3:11 | content | provenance | | +| Nokogiri.rb:3:5:3:11 | content | Nokogiri.rb:5:26:5:32 | content | provenance | | +| Nokogiri.rb:3:5:3:11 | content | Nokogiri.rb:6:26:6:32 | content | provenance | | +| Nokogiri.rb:3:5:3:11 | content | Nokogiri.rb:7:26:7:32 | content | provenance | | +| Nokogiri.rb:3:5:3:11 | content | Nokogiri.rb:8:26:8:32 | content | provenance | | +| Nokogiri.rb:3:5:3:11 | content | Nokogiri.rb:9:26:9:32 | content | provenance | | +| Nokogiri.rb:3:5:3:11 | content | Nokogiri.rb:11:26:11:32 | content | provenance | | +| Nokogiri.rb:3:5:3:11 | content | Nokogiri.rb:12:26:12:32 | content | provenance | | +| Nokogiri.rb:3:5:3:11 | content | Nokogiri.rb:15:26:15:32 | content | provenance | | +| Nokogiri.rb:3:5:3:11 | content | Nokogiri.rb:16:26:16:32 | content | provenance | | +| Nokogiri.rb:3:5:3:11 | content | Nokogiri.rb:18:26:18:32 | content | provenance | | +| Nokogiri.rb:3:5:3:11 | content | Nokogiri.rb:19:26:19:32 | content | provenance | | +| Nokogiri.rb:3:5:3:11 | content | Nokogiri.rb:22:26:22:32 | content | provenance | | +| Nokogiri.rb:3:5:3:11 | content | Nokogiri.rb:25:26:25:32 | content | provenance | | +| Nokogiri.rb:3:5:3:11 | content | Nokogiri.rb:27:26:27:32 | content | provenance | | +| Nokogiri.rb:3:5:3:11 | content | Nokogiri.rb:28:26:28:32 | content | provenance | | +| Nokogiri.rb:3:15:3:20 | call to params | Nokogiri.rb:3:15:3:26 | ...[...] | provenance | | +| Nokogiri.rb:3:15:3:26 | ...[...] | Nokogiri.rb:3:5:3:11 | content | provenance | | nodes | LibXmlRuby.rb:3:5:3:11 | content | semmle.label | content | | LibXmlRuby.rb:3:15:3:20 | call to params | semmle.label | call to params | diff --git a/ruby/ql/test/query-tests/security/cwe-732/WeakFilePermissions.expected b/ruby/ql/test/query-tests/security/cwe-732/WeakFilePermissions.expected index a4e8218f8c1..fe2f0f98422 100644 --- a/ruby/ql/test/query-tests/security/cwe-732/WeakFilePermissions.expected +++ b/ruby/ql/test/query-tests/security/cwe-732/WeakFilePermissions.expected @@ -1,11 +1,11 @@ edges -| FilePermissions.rb:51:3:51:6 | perm | FilePermissions.rb:53:19:53:22 | perm | -| FilePermissions.rb:51:3:51:6 | perm | FilePermissions.rb:54:3:54:7 | perm2 | -| FilePermissions.rb:51:10:51:13 | 0777 | FilePermissions.rb:51:3:51:6 | perm | -| FilePermissions.rb:54:3:54:7 | perm2 | FilePermissions.rb:56:19:56:23 | perm2 | -| FilePermissions.rb:58:3:58:6 | perm | FilePermissions.rb:59:3:59:7 | perm2 | -| FilePermissions.rb:58:10:58:26 | "u=wrx,g=rwx,o=x" | FilePermissions.rb:58:3:58:6 | perm | -| FilePermissions.rb:59:3:59:7 | perm2 | FilePermissions.rb:61:19:61:23 | perm2 | +| FilePermissions.rb:51:3:51:6 | perm | FilePermissions.rb:53:19:53:22 | perm | provenance | | +| FilePermissions.rb:51:3:51:6 | perm | FilePermissions.rb:54:3:54:7 | perm2 | provenance | | +| FilePermissions.rb:51:10:51:13 | 0777 | FilePermissions.rb:51:3:51:6 | perm | provenance | | +| FilePermissions.rb:54:3:54:7 | perm2 | FilePermissions.rb:56:19:56:23 | perm2 | provenance | | +| FilePermissions.rb:58:3:58:6 | perm | FilePermissions.rb:59:3:59:7 | perm2 | provenance | | +| FilePermissions.rb:58:10:58:26 | "u=wrx,g=rwx,o=x" | FilePermissions.rb:58:3:58:6 | perm | provenance | | +| FilePermissions.rb:59:3:59:7 | perm2 | FilePermissions.rb:61:19:61:23 | perm2 | provenance | | nodes | FilePermissions.rb:5:19:5:22 | 0222 | semmle.label | 0222 | | FilePermissions.rb:7:19:7:22 | 0622 | semmle.label | 0622 | diff --git a/ruby/ql/test/query-tests/security/cwe-798/HardcodedCredentials.expected b/ruby/ql/test/query-tests/security/cwe-798/HardcodedCredentials.expected index 3492e9b41ae..662b6c9575f 100644 --- a/ruby/ql/test/query-tests/security/cwe-798/HardcodedCredentials.expected +++ b/ruby/ql/test/query-tests/security/cwe-798/HardcodedCredentials.expected @@ -1,20 +1,20 @@ edges -| HardcodedCredentials.rb:12:19:12:64 | "4NQX/CqB5Ae98zFUmwj1DMpF7azsh..." | HardcodedCredentials.rb:1:23:1:30 | password | -| HardcodedCredentials.rb:15:30:15:75 | "WLC17dLQ9P8YlQvqm77qplOMm5pd1..." | HardcodedCredentials.rb:1:33:1:36 | cert | -| HardcodedCredentials.rb:18:19:18:72 | ... + ... | HardcodedCredentials.rb:1:23:1:30 | password | -| HardcodedCredentials.rb:18:27:18:72 | "ogH6qSYWGdbR/2WOGYa7eZ/tObL+G..." | HardcodedCredentials.rb:18:19:18:72 | ... + ... | -| HardcodedCredentials.rb:20:1:20:7 | pw_left | HardcodedCredentials.rb:22:6:22:12 | pw_left | -| HardcodedCredentials.rb:20:11:20:76 | "3jOe7sXKX6Tx52qHWUVqh2t9LNsE+..." | HardcodedCredentials.rb:20:1:20:7 | pw_left | -| HardcodedCredentials.rb:21:1:21:8 | pw_right | HardcodedCredentials.rb:22:16:22:23 | pw_right | -| HardcodedCredentials.rb:21:12:21:37 | "4fQuzXef4f2yow8KWvIJTA==" | HardcodedCredentials.rb:21:1:21:8 | pw_right | -| HardcodedCredentials.rb:22:1:22:2 | pw | HardcodedCredentials.rb:23:19:23:20 | pw | -| HardcodedCredentials.rb:22:6:22:12 | pw_left | HardcodedCredentials.rb:22:6:22:23 | ... + ... | -| HardcodedCredentials.rb:22:6:22:23 | ... + ... | HardcodedCredentials.rb:22:1:22:2 | pw | -| HardcodedCredentials.rb:22:16:22:23 | pw_right | HardcodedCredentials.rb:22:6:22:23 | ... + ... | -| HardcodedCredentials.rb:23:19:23:20 | pw | HardcodedCredentials.rb:1:23:1:30 | password | -| HardcodedCredentials.rb:38:40:38:85 | "kdW/xVhiv6y1fQQNevDpUaq+2rfPK..." | HardcodedCredentials.rb:31:18:31:23 | passwd | -| HardcodedCredentials.rb:43:29:43:43 | "user@test.com" | HardcodedCredentials.rb:43:18:43:25 | username | -| HardcodedCredentials.rb:43:57:43:70 | "abcdef123456" | HardcodedCredentials.rb:43:46:43:53 | password | +| HardcodedCredentials.rb:12:19:12:64 | "4NQX/CqB5Ae98zFUmwj1DMpF7azsh..." | HardcodedCredentials.rb:1:23:1:30 | password | provenance | | +| HardcodedCredentials.rb:15:30:15:75 | "WLC17dLQ9P8YlQvqm77qplOMm5pd1..." | HardcodedCredentials.rb:1:33:1:36 | cert | provenance | | +| HardcodedCredentials.rb:18:19:18:72 | ... + ... | HardcodedCredentials.rb:1:23:1:30 | password | provenance | | +| HardcodedCredentials.rb:18:27:18:72 | "ogH6qSYWGdbR/2WOGYa7eZ/tObL+G..." | HardcodedCredentials.rb:18:19:18:72 | ... + ... | provenance | | +| HardcodedCredentials.rb:20:1:20:7 | pw_left | HardcodedCredentials.rb:22:6:22:12 | pw_left | provenance | | +| HardcodedCredentials.rb:20:11:20:76 | "3jOe7sXKX6Tx52qHWUVqh2t9LNsE+..." | HardcodedCredentials.rb:20:1:20:7 | pw_left | provenance | | +| HardcodedCredentials.rb:21:1:21:8 | pw_right | HardcodedCredentials.rb:22:16:22:23 | pw_right | provenance | | +| HardcodedCredentials.rb:21:12:21:37 | "4fQuzXef4f2yow8KWvIJTA==" | HardcodedCredentials.rb:21:1:21:8 | pw_right | provenance | | +| HardcodedCredentials.rb:22:1:22:2 | pw | HardcodedCredentials.rb:23:19:23:20 | pw | provenance | | +| HardcodedCredentials.rb:22:6:22:12 | pw_left | HardcodedCredentials.rb:22:6:22:23 | ... + ... | provenance | | +| HardcodedCredentials.rb:22:6:22:23 | ... + ... | HardcodedCredentials.rb:22:1:22:2 | pw | provenance | | +| HardcodedCredentials.rb:22:16:22:23 | pw_right | HardcodedCredentials.rb:22:6:22:23 | ... + ... | provenance | | +| HardcodedCredentials.rb:23:19:23:20 | pw | HardcodedCredentials.rb:1:23:1:30 | password | provenance | | +| HardcodedCredentials.rb:38:40:38:85 | "kdW/xVhiv6y1fQQNevDpUaq+2rfPK..." | HardcodedCredentials.rb:31:18:31:23 | passwd | provenance | | +| HardcodedCredentials.rb:43:29:43:43 | "user@test.com" | HardcodedCredentials.rb:43:18:43:25 | username | provenance | | +| HardcodedCredentials.rb:43:57:43:70 | "abcdef123456" | HardcodedCredentials.rb:43:46:43:53 | password | provenance | | nodes | HardcodedCredentials.rb:1:23:1:30 | password | semmle.label | password | | HardcodedCredentials.rb:1:33:1:36 | cert | semmle.label | cert | diff --git a/ruby/ql/test/query-tests/security/cwe-807-user-controlled-bypass/ConditionalBypass.expected b/ruby/ql/test/query-tests/security/cwe-807-user-controlled-bypass/ConditionalBypass.expected index c591f922334..897e8276049 100644 --- a/ruby/ql/test/query-tests/security/cwe-807-user-controlled-bypass/ConditionalBypass.expected +++ b/ruby/ql/test/query-tests/security/cwe-807-user-controlled-bypass/ConditionalBypass.expected @@ -1,12 +1,12 @@ edges -| ConditionalBypass.rb:3:5:3:9 | check | ConditionalBypass.rb:6:8:6:12 | check | -| ConditionalBypass.rb:3:13:3:18 | call to params | ConditionalBypass.rb:3:13:3:26 | ...[...] | -| ConditionalBypass.rb:3:13:3:26 | ...[...] | ConditionalBypass.rb:3:5:3:9 | check | -| ConditionalBypass.rb:14:14:14:19 | call to params | ConditionalBypass.rb:14:14:14:27 | ...[...] | -| ConditionalBypass.rb:25:5:25:5 | p | ConditionalBypass.rb:27:8:27:8 | p | -| ConditionalBypass.rb:25:10:25:15 | call to params | ConditionalBypass.rb:25:10:25:22 | ...[...] | -| ConditionalBypass.rb:25:10:25:15 | call to params | ConditionalBypass.rb:25:10:25:22 | ...[...] | -| ConditionalBypass.rb:25:10:25:22 | ...[...] | ConditionalBypass.rb:25:5:25:5 | p | +| ConditionalBypass.rb:3:5:3:9 | check | ConditionalBypass.rb:6:8:6:12 | check | provenance | | +| ConditionalBypass.rb:3:13:3:18 | call to params | ConditionalBypass.rb:3:13:3:26 | ...[...] | provenance | | +| ConditionalBypass.rb:3:13:3:26 | ...[...] | ConditionalBypass.rb:3:5:3:9 | check | provenance | | +| ConditionalBypass.rb:14:14:14:19 | call to params | ConditionalBypass.rb:14:14:14:27 | ...[...] | provenance | | +| ConditionalBypass.rb:25:5:25:5 | p | ConditionalBypass.rb:27:8:27:8 | p | provenance | | +| ConditionalBypass.rb:25:10:25:15 | call to params | ConditionalBypass.rb:25:10:25:22 | ...[...] | provenance | | +| ConditionalBypass.rb:25:10:25:15 | call to params | ConditionalBypass.rb:25:10:25:22 | ...[...] | provenance | | +| ConditionalBypass.rb:25:10:25:22 | ...[...] | ConditionalBypass.rb:25:5:25:5 | p | provenance | | nodes | ConditionalBypass.rb:3:5:3:9 | check | semmle.label | check | | ConditionalBypass.rb:3:13:3:18 | call to params | semmle.label | call to params | diff --git a/ruby/ql/test/query-tests/security/cwe-829/InsecureDownload.expected b/ruby/ql/test/query-tests/security/cwe-829/InsecureDownload.expected index 82fbafcfc89..c025499f2e8 100644 --- a/ruby/ql/test/query-tests/security/cwe-829/InsecureDownload.expected +++ b/ruby/ql/test/query-tests/security/cwe-829/InsecureDownload.expected @@ -1,9 +1,10 @@ +testFailures failures edges -| insecure_download.rb:31:5:31:7 | url | insecure_download.rb:33:15:33:17 | url | -| insecure_download.rb:31:5:31:7 | url | insecure_download.rb:33:15:33:17 | url | -| insecure_download.rb:31:11:31:41 | "http://example.org/unsafe.APK" | insecure_download.rb:31:5:31:7 | url | -| insecure_download.rb:31:11:31:41 | "http://example.org/unsafe.APK" | insecure_download.rb:31:5:31:7 | url | +| insecure_download.rb:31:5:31:7 | url | insecure_download.rb:33:15:33:17 | url | provenance | | +| insecure_download.rb:31:5:31:7 | url | insecure_download.rb:33:15:33:17 | url | provenance | | +| insecure_download.rb:31:11:31:41 | "http://example.org/unsafe.APK" | insecure_download.rb:31:5:31:7 | url | provenance | | +| insecure_download.rb:31:11:31:41 | "http://example.org/unsafe.APK" | insecure_download.rb:31:5:31:7 | url | provenance | | nodes | insecure_download.rb:27:15:27:45 | "http://example.org/unsafe.APK" | semmle.label | "http://example.org/unsafe.APK" | | insecure_download.rb:27:15:27:45 | "http://example.org/unsafe.APK" | semmle.label | "http://example.org/unsafe.APK" | @@ -18,7 +19,6 @@ nodes | insecure_download.rb:43:22:43:56 | "http://example.org/unsafe.unk..." | semmle.label | "http://example.org/unsafe.unk..." | | insecure_download.rb:53:65:53:78 | "/myscript.sh" | semmle.label | "/myscript.sh" | subpaths -testFailures #select | insecure_download.rb:27:15:27:45 | "http://example.org/unsafe.APK" | insecure_download.rb:27:15:27:45 | "http://example.org/unsafe.APK" | insecure_download.rb:27:15:27:45 | "http://example.org/unsafe.APK" | $@ | insecure_download.rb:27:15:27:45 | "http://example.org/unsafe.APK" | "http://example.org/unsafe.APK" | | insecure_download.rb:27:15:27:45 | "http://example.org/unsafe.APK" | insecure_download.rb:27:15:27:45 | "http://example.org/unsafe.APK" | insecure_download.rb:27:15:27:45 | "http://example.org/unsafe.APK" | $@ | insecure_download.rb:27:15:27:45 | "http://example.org/unsafe.APK" | "http://example.org/unsafe.APK" | diff --git a/ruby/ql/test/query-tests/security/cwe-912/HttpToFileAccess.expected b/ruby/ql/test/query-tests/security/cwe-912/HttpToFileAccess.expected index 19b955a9a8d..792b17303b1 100644 --- a/ruby/ql/test/query-tests/security/cwe-912/HttpToFileAccess.expected +++ b/ruby/ql/test/query-tests/security/cwe-912/HttpToFileAccess.expected @@ -1,9 +1,9 @@ edges -| http_to_file_access.rb:3:1:3:4 | resp | http_to_file_access.rb:5:12:5:15 | resp | -| http_to_file_access.rb:3:8:3:52 | call to body | http_to_file_access.rb:3:1:3:4 | resp | -| http_to_file_access.rb:9:7:9:12 | script | http_to_file_access.rb:11:18:11:23 | script | -| http_to_file_access.rb:9:16:9:21 | call to params | http_to_file_access.rb:9:16:9:30 | ...[...] | -| http_to_file_access.rb:9:16:9:30 | ...[...] | http_to_file_access.rb:9:7:9:12 | script | +| http_to_file_access.rb:3:1:3:4 | resp | http_to_file_access.rb:5:12:5:15 | resp | provenance | | +| http_to_file_access.rb:3:8:3:52 | call to body | http_to_file_access.rb:3:1:3:4 | resp | provenance | | +| http_to_file_access.rb:9:7:9:12 | script | http_to_file_access.rb:11:18:11:23 | script | provenance | | +| http_to_file_access.rb:9:16:9:21 | call to params | http_to_file_access.rb:9:16:9:30 | ...[...] | provenance | | +| http_to_file_access.rb:9:16:9:30 | ...[...] | http_to_file_access.rb:9:7:9:12 | script | provenance | | nodes | http_to_file_access.rb:3:1:3:4 | resp | semmle.label | resp | | http_to_file_access.rb:3:8:3:52 | call to body | semmle.label | call to body | diff --git a/ruby/ql/test/query-tests/security/cwe-918/ServerSideRequestForgery.expected b/ruby/ql/test/query-tests/security/cwe-918/ServerSideRequestForgery.expected index 0145d9bddf5..7ca144f69ed 100644 --- a/ruby/ql/test/query-tests/security/cwe-918/ServerSideRequestForgery.expected +++ b/ruby/ql/test/query-tests/security/cwe-918/ServerSideRequestForgery.expected @@ -1,9 +1,9 @@ edges -| ServerSideRequestForgery.rb:10:9:10:28 | users_service_domain | ServerSideRequestForgery.rb:11:31:11:62 | "#{...}/logins" | -| ServerSideRequestForgery.rb:10:32:10:37 | call to params | ServerSideRequestForgery.rb:10:32:10:60 | ...[...] | -| ServerSideRequestForgery.rb:10:32:10:60 | ...[...] | ServerSideRequestForgery.rb:10:9:10:28 | users_service_domain | -| ServerSideRequestForgery.rb:15:33:15:38 | call to params | ServerSideRequestForgery.rb:15:33:15:44 | ...[...] | -| ServerSideRequestForgery.rb:20:45:20:50 | call to params | ServerSideRequestForgery.rb:20:45:20:56 | ...[...] | +| ServerSideRequestForgery.rb:10:9:10:28 | users_service_domain | ServerSideRequestForgery.rb:11:31:11:62 | "#{...}/logins" | provenance | | +| ServerSideRequestForgery.rb:10:32:10:37 | call to params | ServerSideRequestForgery.rb:10:32:10:60 | ...[...] | provenance | | +| ServerSideRequestForgery.rb:10:32:10:60 | ...[...] | ServerSideRequestForgery.rb:10:9:10:28 | users_service_domain | provenance | | +| ServerSideRequestForgery.rb:15:33:15:38 | call to params | ServerSideRequestForgery.rb:15:33:15:44 | ...[...] | provenance | | +| ServerSideRequestForgery.rb:20:45:20:50 | call to params | ServerSideRequestForgery.rb:20:45:20:56 | ...[...] | provenance | | nodes | ServerSideRequestForgery.rb:10:9:10:28 | users_service_domain | semmle.label | users_service_domain | | ServerSideRequestForgery.rb:10:32:10:37 | call to params | semmle.label | call to params | diff --git a/ruby/ql/test/query-tests/security/decompression-api/DecompressionApi.expected b/ruby/ql/test/query-tests/security/decompression-api/DecompressionApi.expected index dbcca414cf1..20be59524bf 100644 --- a/ruby/ql/test/query-tests/security/decompression-api/DecompressionApi.expected +++ b/ruby/ql/test/query-tests/security/decompression-api/DecompressionApi.expected @@ -1,8 +1,8 @@ edges -| decompression_api.rb:4:9:4:12 | path | decompression_api.rb:5:31:5:34 | path | -| decompression_api.rb:4:16:4:21 | call to params | decompression_api.rb:4:16:4:28 | ...[...] | -| decompression_api.rb:4:16:4:28 | ...[...] | decompression_api.rb:4:9:4:12 | path | -| decompression_api.rb:15:31:15:36 | call to params | decompression_api.rb:15:31:15:43 | ...[...] | +| decompression_api.rb:4:9:4:12 | path | decompression_api.rb:5:31:5:34 | path | provenance | | +| decompression_api.rb:4:16:4:21 | call to params | decompression_api.rb:4:16:4:28 | ...[...] | provenance | | +| decompression_api.rb:4:16:4:28 | ...[...] | decompression_api.rb:4:9:4:12 | path | provenance | | +| decompression_api.rb:15:31:15:36 | call to params | decompression_api.rb:15:31:15:43 | ...[...] | provenance | | nodes | decompression_api.rb:4:9:4:12 | path | semmle.label | path | | decompression_api.rb:4:16:4:21 | call to params | semmle.label | call to params | From 7eb5e1833d5c243d54a38598acee74ce058736d3 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Thu, 8 Feb 2024 12:57:24 +0100 Subject: [PATCH 117/378] C++: Add empty provenance column to expected files. --- .../CWE/CWE-078/WordexpTainted.expected | 2 +- .../AllocMultiplicationOverflow.expected | 6 +- .../ArrayAccessProductFlow.expected | 78 +- .../ConstantSizeArrayOffByOne.expected | 140 +- .../tests/PrivateCleartextWrite.expected | 20 +- .../dataflow/fields/ir-path-flow.expected | 1498 ++++++++--------- .../dataflow/fields/path-flow.expected | 1494 ++++++++-------- .../Critical/MemoryFreed/DoubleFree.expected | 24 +- .../MemoryFreed/UseAfterFree.expected | 46 +- .../CastArrayPointerArithmetic.expected | 42 +- .../SAMATE/TaintedPath/TaintedPath.expected | 2 +- .../CWE-022/semmle/tests/TaintedPath.expected | 10 +- .../SAMATE/ExecTainted/ExecTainted.expected | 10 +- .../semmle/ExecTainted/ExecTainted.expected | 132 +- .../CWE/CWE-079/semmle/CgiXss/CgiXss.expected | 18 +- .../CWE-089/SqlTainted/SqlTainted.expected | 16 +- .../UncontrolledProcessOperation.expected | 6 +- .../UncontrolledProcessOperation.expected | 24 +- .../SAMATE/OverrunWriteProductFlow.expected | 116 +- .../semmle/tests/OverflowDestination.expected | 20 +- .../semmle/tests/UnboundedWrite.expected | 26 +- .../semmle/tests/UnboundedWrite.expected | 6 +- .../ImproperArrayIndexValidation.expected | 2 +- .../ImproperArrayIndexValidation.expected | 18 +- .../SAMATE/UncontrolledFormatString.expected | 6 +- .../CWE-134/semmle/argv/argvLocal.expected | 48 +- .../CWE-134/semmle/funcs/funcsLocal.expected | 16 +- .../UncontrolledFormatString.expected | 22 +- .../CWE/CWE-134/semmle/ifs/ifs.expected | 22 +- .../CWE-190/SAMATE/ArithmeticTainted.expected | 2 +- .../SAMATE/ArithmeticUncontrolled.expected | 24 +- .../ArithmeticUncontrolled.expected | 64 +- .../TaintedAllocationSize.expected | 48 +- .../semmle/tainted/ArithmeticTainted.expected | 30 +- .../CWE/CWE-193/InvalidPointerDeref.expected | 204 +-- .../AuthenticationBypass.expected | 12 +- .../tests/CleartextBufferWrite.expected | 2 +- .../semmle/tests/CleartextFileWrite.expected | 12 +- .../tests/CleartextTransmission.expected | 64 +- .../CWE/CWE-319/UseOfHttp/UseOfHttp.expected | 26 +- .../tests/UseAfterFree/UseAfterFree.expected | 24 +- .../PotentiallyExposedSystemData.expected | 2 +- .../semmle/tests/ExposedSystemData.expected | 32 +- .../PotentiallyExposedSystemData.expected | 28 +- .../Security/CWE/CWE-611/XXE.expected | 96 +- .../TaintedCondition.expected | 2 +- 46 files changed, 2271 insertions(+), 2271 deletions(-) diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-078/WordexpTainted.expected b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-078/WordexpTainted.expected index 20bab064242..f35b2230f15 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-078/WordexpTainted.expected +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-078/WordexpTainted.expected @@ -1,5 +1,5 @@ edges -| test.cpp:22:27:22:30 | **argv | test.cpp:29:13:29:20 | *filePath | +| test.cpp:22:27:22:30 | **argv | test.cpp:29:13:29:20 | *filePath | provenance | | nodes | test.cpp:22:27:22:30 | **argv | semmle.label | **argv | | test.cpp:29:13:29:20 | *filePath | semmle.label | *filePath | diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-190/AllocMultiplicationOverflow/AllocMultiplicationOverflow.expected b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-190/AllocMultiplicationOverflow/AllocMultiplicationOverflow.expected index fe7246092b6..94d399f6195 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-190/AllocMultiplicationOverflow/AllocMultiplicationOverflow.expected +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-190/AllocMultiplicationOverflow/AllocMultiplicationOverflow.expected @@ -1,7 +1,7 @@ edges -| test.cpp:22:17:22:21 | ... * ... | test.cpp:23:33:23:37 | size1 | -| test.cpp:37:24:37:27 | size | test.cpp:37:46:37:49 | size | -| test.cpp:45:36:45:40 | ... * ... | test.cpp:37:24:37:27 | size | +| test.cpp:22:17:22:21 | ... * ... | test.cpp:23:33:23:37 | size1 | provenance | | +| test.cpp:37:24:37:27 | size | test.cpp:37:46:37:49 | size | provenance | | +| test.cpp:45:36:45:40 | ... * ... | test.cpp:37:24:37:27 | size | provenance | | nodes | test.cpp:13:33:13:37 | ... * ... | semmle.label | ... * ... | | test.cpp:15:31:15:35 | ... * ... | semmle.label | ... * ... | diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-193/array-access/ArrayAccessProductFlow.expected b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-193/array-access/ArrayAccessProductFlow.expected index eab5aabce63..bb062dac218 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-193/array-access/ArrayAccessProductFlow.expected +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-193/array-access/ArrayAccessProductFlow.expected @@ -1,43 +1,43 @@ edges -| test.cpp:4:17:4:22 | call to malloc | test.cpp:6:9:6:11 | arr | -| test.cpp:4:17:4:22 | call to malloc | test.cpp:10:9:10:11 | arr | -| test.cpp:19:9:19:16 | *mk_array [p] | test.cpp:28:19:28:26 | call to mk_array [p] | -| test.cpp:19:9:19:16 | *mk_array [p] | test.cpp:50:18:50:25 | call to mk_array [p] | -| test.cpp:21:5:21:7 | *arr [post update] [p] | test.cpp:22:5:22:7 | *arr [p] | -| test.cpp:21:5:21:24 | ... = ... | test.cpp:21:5:21:7 | *arr [post update] [p] | -| test.cpp:21:13:21:18 | call to malloc | test.cpp:21:5:21:24 | ... = ... | -| test.cpp:22:5:22:7 | *arr [p] | test.cpp:19:9:19:16 | *mk_array [p] | -| test.cpp:28:19:28:26 | call to mk_array [p] | test.cpp:31:9:31:11 | *arr [p] | -| test.cpp:28:19:28:26 | call to mk_array [p] | test.cpp:35:9:35:11 | *arr [p] | -| test.cpp:31:9:31:11 | *arr [p] | test.cpp:31:13:31:13 | p | -| test.cpp:35:9:35:11 | *arr [p] | test.cpp:35:13:35:13 | p | -| test.cpp:39:27:39:29 | arr [p] | test.cpp:41:9:41:11 | *arr [p] | -| test.cpp:39:27:39:29 | arr [p] | test.cpp:45:9:45:11 | *arr [p] | -| test.cpp:41:9:41:11 | *arr [p] | test.cpp:41:13:41:13 | p | -| test.cpp:45:9:45:11 | *arr [p] | test.cpp:45:13:45:13 | p | -| test.cpp:50:18:50:25 | call to mk_array [p] | test.cpp:39:27:39:29 | arr [p] | -| test.cpp:55:5:55:7 | *arr [post update] [p] | test.cpp:56:5:56:7 | *arr [p] | -| test.cpp:55:5:55:24 | ... = ... | test.cpp:55:5:55:7 | *arr [post update] [p] | -| test.cpp:55:13:55:18 | call to malloc | test.cpp:55:5:55:24 | ... = ... | -| test.cpp:56:5:56:7 | *arr [p] | test.cpp:59:9:59:11 | *arr [p] | -| test.cpp:56:5:56:7 | *arr [p] | test.cpp:63:9:63:11 | *arr [p] | -| test.cpp:59:9:59:11 | *arr [p] | test.cpp:59:13:59:13 | p | -| test.cpp:63:9:63:11 | *arr [p] | test.cpp:63:13:63:13 | p | -| test.cpp:67:10:67:19 | **mk_array_p [p] | test.cpp:76:20:76:29 | *call to mk_array_p [p] | -| test.cpp:67:10:67:19 | **mk_array_p [p] | test.cpp:98:18:98:27 | *call to mk_array_p [p] | -| test.cpp:69:5:69:7 | *arr [post update] [p] | test.cpp:70:5:70:7 | *arr [p] | -| test.cpp:69:5:69:25 | ... = ... | test.cpp:69:5:69:7 | *arr [post update] [p] | -| test.cpp:69:14:69:19 | call to malloc | test.cpp:69:5:69:25 | ... = ... | -| test.cpp:70:5:70:7 | *arr [p] | test.cpp:67:10:67:19 | **mk_array_p [p] | -| test.cpp:76:20:76:29 | *call to mk_array_p [p] | test.cpp:79:9:79:11 | *arr [p] | -| test.cpp:76:20:76:29 | *call to mk_array_p [p] | test.cpp:83:9:83:11 | *arr [p] | -| test.cpp:79:9:79:11 | *arr [p] | test.cpp:79:14:79:14 | p | -| test.cpp:83:9:83:11 | *arr [p] | test.cpp:83:14:83:14 | p | -| test.cpp:87:28:87:30 | *arr [p] | test.cpp:89:9:89:11 | *arr [p] | -| test.cpp:87:28:87:30 | *arr [p] | test.cpp:93:9:93:11 | *arr [p] | -| test.cpp:89:9:89:11 | *arr [p] | test.cpp:89:14:89:14 | p | -| test.cpp:93:9:93:11 | *arr [p] | test.cpp:93:14:93:14 | p | -| test.cpp:98:18:98:27 | *call to mk_array_p [p] | test.cpp:87:28:87:30 | *arr [p] | +| test.cpp:4:17:4:22 | call to malloc | test.cpp:6:9:6:11 | arr | provenance | | +| test.cpp:4:17:4:22 | call to malloc | test.cpp:10:9:10:11 | arr | provenance | | +| test.cpp:19:9:19:16 | *mk_array [p] | test.cpp:28:19:28:26 | call to mk_array [p] | provenance | | +| test.cpp:19:9:19:16 | *mk_array [p] | test.cpp:50:18:50:25 | call to mk_array [p] | provenance | | +| test.cpp:21:5:21:7 | *arr [post update] [p] | test.cpp:22:5:22:7 | *arr [p] | provenance | | +| test.cpp:21:5:21:24 | ... = ... | test.cpp:21:5:21:7 | *arr [post update] [p] | provenance | | +| test.cpp:21:13:21:18 | call to malloc | test.cpp:21:5:21:24 | ... = ... | provenance | | +| test.cpp:22:5:22:7 | *arr [p] | test.cpp:19:9:19:16 | *mk_array [p] | provenance | | +| test.cpp:28:19:28:26 | call to mk_array [p] | test.cpp:31:9:31:11 | *arr [p] | provenance | | +| test.cpp:28:19:28:26 | call to mk_array [p] | test.cpp:35:9:35:11 | *arr [p] | provenance | | +| test.cpp:31:9:31:11 | *arr [p] | test.cpp:31:13:31:13 | p | provenance | | +| test.cpp:35:9:35:11 | *arr [p] | test.cpp:35:13:35:13 | p | provenance | | +| test.cpp:39:27:39:29 | arr [p] | test.cpp:41:9:41:11 | *arr [p] | provenance | | +| test.cpp:39:27:39:29 | arr [p] | test.cpp:45:9:45:11 | *arr [p] | provenance | | +| test.cpp:41:9:41:11 | *arr [p] | test.cpp:41:13:41:13 | p | provenance | | +| test.cpp:45:9:45:11 | *arr [p] | test.cpp:45:13:45:13 | p | provenance | | +| test.cpp:50:18:50:25 | call to mk_array [p] | test.cpp:39:27:39:29 | arr [p] | provenance | | +| test.cpp:55:5:55:7 | *arr [post update] [p] | test.cpp:56:5:56:7 | *arr [p] | provenance | | +| test.cpp:55:5:55:24 | ... = ... | test.cpp:55:5:55:7 | *arr [post update] [p] | provenance | | +| test.cpp:55:13:55:18 | call to malloc | test.cpp:55:5:55:24 | ... = ... | provenance | | +| test.cpp:56:5:56:7 | *arr [p] | test.cpp:59:9:59:11 | *arr [p] | provenance | | +| test.cpp:56:5:56:7 | *arr [p] | test.cpp:63:9:63:11 | *arr [p] | provenance | | +| test.cpp:59:9:59:11 | *arr [p] | test.cpp:59:13:59:13 | p | provenance | | +| test.cpp:63:9:63:11 | *arr [p] | test.cpp:63:13:63:13 | p | provenance | | +| test.cpp:67:10:67:19 | **mk_array_p [p] | test.cpp:76:20:76:29 | *call to mk_array_p [p] | provenance | | +| test.cpp:67:10:67:19 | **mk_array_p [p] | test.cpp:98:18:98:27 | *call to mk_array_p [p] | provenance | | +| test.cpp:69:5:69:7 | *arr [post update] [p] | test.cpp:70:5:70:7 | *arr [p] | provenance | | +| test.cpp:69:5:69:25 | ... = ... | test.cpp:69:5:69:7 | *arr [post update] [p] | provenance | | +| test.cpp:69:14:69:19 | call to malloc | test.cpp:69:5:69:25 | ... = ... | provenance | | +| test.cpp:70:5:70:7 | *arr [p] | test.cpp:67:10:67:19 | **mk_array_p [p] | provenance | | +| test.cpp:76:20:76:29 | *call to mk_array_p [p] | test.cpp:79:9:79:11 | *arr [p] | provenance | | +| test.cpp:76:20:76:29 | *call to mk_array_p [p] | test.cpp:83:9:83:11 | *arr [p] | provenance | | +| test.cpp:79:9:79:11 | *arr [p] | test.cpp:79:14:79:14 | p | provenance | | +| test.cpp:83:9:83:11 | *arr [p] | test.cpp:83:14:83:14 | p | provenance | | +| test.cpp:87:28:87:30 | *arr [p] | test.cpp:89:9:89:11 | *arr [p] | provenance | | +| test.cpp:87:28:87:30 | *arr [p] | test.cpp:93:9:93:11 | *arr [p] | provenance | | +| test.cpp:89:9:89:11 | *arr [p] | test.cpp:89:14:89:14 | p | provenance | | +| test.cpp:93:9:93:11 | *arr [p] | test.cpp:93:14:93:14 | p | provenance | | +| test.cpp:98:18:98:27 | *call to mk_array_p [p] | test.cpp:87:28:87:30 | *arr [p] | provenance | | nodes | test.cpp:4:17:4:22 | call to malloc | semmle.label | call to malloc | | test.cpp:6:9:6:11 | arr | semmle.label | arr | diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-193/constant-size/ConstantSizeArrayOffByOne.expected b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-193/constant-size/ConstantSizeArrayOffByOne.expected index 07fbd84e4af..fee771d8f70 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-193/constant-size/ConstantSizeArrayOffByOne.expected +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-193/constant-size/ConstantSizeArrayOffByOne.expected @@ -1,74 +1,74 @@ edges -| test.cpp:34:10:34:12 | buf | test.cpp:34:5:34:24 | access to array | -| test.cpp:35:10:35:12 | buf | test.cpp:35:5:35:22 | access to array | -| test.cpp:36:10:36:12 | buf | test.cpp:36:5:36:24 | access to array | -| test.cpp:39:14:39:16 | buf | test.cpp:39:9:39:19 | access to array | -| test.cpp:43:14:43:16 | buf | test.cpp:43:9:43:19 | access to array | -| test.cpp:48:10:48:12 | buf | test.cpp:48:5:48:24 | access to array | -| test.cpp:49:10:49:12 | buf | test.cpp:49:5:49:22 | access to array | -| test.cpp:50:10:50:12 | buf | test.cpp:50:5:50:24 | access to array | -| test.cpp:53:14:53:16 | buf | test.cpp:53:9:53:19 | access to array | -| test.cpp:57:14:57:16 | buf | test.cpp:57:9:57:19 | access to array | -| test.cpp:61:14:61:16 | buf | test.cpp:61:9:61:19 | access to array | -| test.cpp:70:33:70:33 | p | test.cpp:71:5:71:17 | access to array | -| test.cpp:70:33:70:33 | p | test.cpp:72:5:72:15 | access to array | -| test.cpp:76:26:76:46 | & ... | test.cpp:66:32:66:32 | p | -| test.cpp:76:32:76:34 | buf | test.cpp:76:26:76:46 | & ... | -| test.cpp:77:26:77:44 | & ... | test.cpp:66:32:66:32 | p | -| test.cpp:77:32:77:34 | buf | test.cpp:77:26:77:44 | & ... | -| test.cpp:79:27:79:34 | buf | test.cpp:70:33:70:33 | p | -| test.cpp:79:32:79:34 | buf | test.cpp:79:27:79:34 | buf | -| test.cpp:85:34:85:36 | buf | test.cpp:87:5:87:31 | access to array | -| test.cpp:85:34:85:36 | buf | test.cpp:88:5:88:27 | access to array | -| test.cpp:96:13:96:15 | arr | test.cpp:96:13:96:18 | access to array | -| test.cpp:111:17:111:19 | arr | test.cpp:111:17:111:22 | access to array | -| test.cpp:111:17:111:19 | arr | test.cpp:115:35:115:40 | access to array | -| test.cpp:111:17:111:19 | arr | test.cpp:119:17:119:22 | access to array | -| test.cpp:115:35:115:37 | arr | test.cpp:111:17:111:22 | access to array | -| test.cpp:115:35:115:37 | arr | test.cpp:115:35:115:40 | access to array | -| test.cpp:115:35:115:37 | arr | test.cpp:119:17:119:22 | access to array | -| test.cpp:119:17:119:19 | arr | test.cpp:111:17:111:22 | access to array | -| test.cpp:119:17:119:19 | arr | test.cpp:115:35:115:40 | access to array | -| test.cpp:119:17:119:19 | arr | test.cpp:119:17:119:22 | access to array | -| test.cpp:128:9:128:11 | arr | test.cpp:128:9:128:14 | access to array | -| test.cpp:134:25:134:27 | arr | test.cpp:136:9:136:16 | ... += ... | -| test.cpp:136:9:136:16 | ... += ... | test.cpp:138:13:138:15 | arr | -| test.cpp:143:18:143:21 | asdf | test.cpp:134:25:134:27 | arr | -| test.cpp:143:18:143:21 | asdf | test.cpp:143:18:143:21 | asdf | -| test.cpp:146:26:146:26 | *p | test.cpp:147:4:147:9 | -- ... | -| test.cpp:156:12:156:14 | buf | test.cpp:156:12:156:18 | ... + ... | -| test.cpp:156:12:156:18 | ... + ... | test.cpp:158:17:158:18 | *& ... | -| test.cpp:158:17:158:18 | *& ... | test.cpp:146:26:146:26 | *p | -| test.cpp:218:23:218:28 | buffer | test.cpp:220:5:220:11 | access to array | -| test.cpp:218:23:218:28 | buffer | test.cpp:221:5:221:11 | access to array | -| test.cpp:229:25:229:29 | array | test.cpp:231:5:231:10 | access to array | -| test.cpp:229:25:229:29 | array | test.cpp:232:5:232:10 | access to array | -| test.cpp:245:30:245:30 | p | test.cpp:261:27:261:30 | access to array | -| test.cpp:245:30:245:30 | p | test.cpp:261:27:261:30 | access to array | -| test.cpp:274:14:274:20 | buffer3 | test.cpp:245:30:245:30 | p | -| test.cpp:274:14:274:20 | buffer3 | test.cpp:274:14:274:20 | buffer3 | -| test.cpp:277:35:277:35 | p | test.cpp:278:14:278:14 | p | -| test.cpp:278:14:278:14 | p | test.cpp:245:30:245:30 | p | -| test.cpp:283:19:283:25 | buffer1 | test.cpp:277:35:277:35 | p | -| test.cpp:283:19:283:25 | buffer1 | test.cpp:283:19:283:25 | buffer1 | -| test.cpp:286:19:286:25 | buffer2 | test.cpp:277:35:277:35 | p | -| test.cpp:286:19:286:25 | buffer2 | test.cpp:286:19:286:25 | buffer2 | -| test.cpp:289:19:289:25 | buffer3 | test.cpp:277:35:277:35 | p | -| test.cpp:289:19:289:25 | buffer3 | test.cpp:289:19:289:25 | buffer3 | -| test.cpp:292:25:292:27 | arr | test.cpp:299:16:299:21 | access to array | -| test.cpp:292:25:292:27 | arr | test.cpp:299:16:299:21 | access to array | -| test.cpp:306:20:306:23 | arr1 | test.cpp:292:25:292:27 | arr | -| test.cpp:306:20:306:23 | arr1 | test.cpp:306:20:306:23 | arr1 | -| test.cpp:309:20:309:23 | arr2 | test.cpp:292:25:292:27 | arr | -| test.cpp:309:20:309:23 | arr2 | test.cpp:309:20:309:23 | arr2 | -| test.cpp:319:19:319:22 | temp | test.cpp:319:19:319:27 | ... + ... | -| test.cpp:319:19:319:22 | temp | test.cpp:324:23:324:32 | ... + ... | -| test.cpp:319:19:319:27 | ... + ... | test.cpp:325:24:325:26 | end | -| test.cpp:322:19:322:22 | temp | test.cpp:322:19:322:27 | ... + ... | -| test.cpp:322:19:322:22 | temp | test.cpp:324:23:324:32 | ... + ... | -| test.cpp:322:19:322:27 | ... + ... | test.cpp:325:24:325:26 | end | -| test.cpp:324:23:324:26 | temp | test.cpp:324:23:324:32 | ... + ... | -| test.cpp:324:23:324:32 | ... + ... | test.cpp:325:15:325:19 | temp2 | +| test.cpp:34:10:34:12 | buf | test.cpp:34:5:34:24 | access to array | provenance | | +| test.cpp:35:10:35:12 | buf | test.cpp:35:5:35:22 | access to array | provenance | | +| test.cpp:36:10:36:12 | buf | test.cpp:36:5:36:24 | access to array | provenance | | +| test.cpp:39:14:39:16 | buf | test.cpp:39:9:39:19 | access to array | provenance | | +| test.cpp:43:14:43:16 | buf | test.cpp:43:9:43:19 | access to array | provenance | | +| test.cpp:48:10:48:12 | buf | test.cpp:48:5:48:24 | access to array | provenance | | +| test.cpp:49:10:49:12 | buf | test.cpp:49:5:49:22 | access to array | provenance | | +| test.cpp:50:10:50:12 | buf | test.cpp:50:5:50:24 | access to array | provenance | | +| test.cpp:53:14:53:16 | buf | test.cpp:53:9:53:19 | access to array | provenance | | +| test.cpp:57:14:57:16 | buf | test.cpp:57:9:57:19 | access to array | provenance | | +| test.cpp:61:14:61:16 | buf | test.cpp:61:9:61:19 | access to array | provenance | | +| test.cpp:70:33:70:33 | p | test.cpp:71:5:71:17 | access to array | provenance | | +| test.cpp:70:33:70:33 | p | test.cpp:72:5:72:15 | access to array | provenance | | +| test.cpp:76:26:76:46 | & ... | test.cpp:66:32:66:32 | p | provenance | | +| test.cpp:76:32:76:34 | buf | test.cpp:76:26:76:46 | & ... | provenance | | +| test.cpp:77:26:77:44 | & ... | test.cpp:66:32:66:32 | p | provenance | | +| test.cpp:77:32:77:34 | buf | test.cpp:77:26:77:44 | & ... | provenance | | +| test.cpp:79:27:79:34 | buf | test.cpp:70:33:70:33 | p | provenance | | +| test.cpp:79:32:79:34 | buf | test.cpp:79:27:79:34 | buf | provenance | | +| test.cpp:85:34:85:36 | buf | test.cpp:87:5:87:31 | access to array | provenance | | +| test.cpp:85:34:85:36 | buf | test.cpp:88:5:88:27 | access to array | provenance | | +| test.cpp:96:13:96:15 | arr | test.cpp:96:13:96:18 | access to array | provenance | | +| test.cpp:111:17:111:19 | arr | test.cpp:111:17:111:22 | access to array | provenance | | +| test.cpp:111:17:111:19 | arr | test.cpp:115:35:115:40 | access to array | provenance | | +| test.cpp:111:17:111:19 | arr | test.cpp:119:17:119:22 | access to array | provenance | | +| test.cpp:115:35:115:37 | arr | test.cpp:111:17:111:22 | access to array | provenance | | +| test.cpp:115:35:115:37 | arr | test.cpp:115:35:115:40 | access to array | provenance | | +| test.cpp:115:35:115:37 | arr | test.cpp:119:17:119:22 | access to array | provenance | | +| test.cpp:119:17:119:19 | arr | test.cpp:111:17:111:22 | access to array | provenance | | +| test.cpp:119:17:119:19 | arr | test.cpp:115:35:115:40 | access to array | provenance | | +| test.cpp:119:17:119:19 | arr | test.cpp:119:17:119:22 | access to array | provenance | | +| test.cpp:128:9:128:11 | arr | test.cpp:128:9:128:14 | access to array | provenance | | +| test.cpp:134:25:134:27 | arr | test.cpp:136:9:136:16 | ... += ... | provenance | | +| test.cpp:136:9:136:16 | ... += ... | test.cpp:138:13:138:15 | arr | provenance | | +| test.cpp:143:18:143:21 | asdf | test.cpp:134:25:134:27 | arr | provenance | | +| test.cpp:143:18:143:21 | asdf | test.cpp:143:18:143:21 | asdf | provenance | | +| test.cpp:146:26:146:26 | *p | test.cpp:147:4:147:9 | -- ... | provenance | | +| test.cpp:156:12:156:14 | buf | test.cpp:156:12:156:18 | ... + ... | provenance | | +| test.cpp:156:12:156:18 | ... + ... | test.cpp:158:17:158:18 | *& ... | provenance | | +| test.cpp:158:17:158:18 | *& ... | test.cpp:146:26:146:26 | *p | provenance | | +| test.cpp:218:23:218:28 | buffer | test.cpp:220:5:220:11 | access to array | provenance | | +| test.cpp:218:23:218:28 | buffer | test.cpp:221:5:221:11 | access to array | provenance | | +| test.cpp:229:25:229:29 | array | test.cpp:231:5:231:10 | access to array | provenance | | +| test.cpp:229:25:229:29 | array | test.cpp:232:5:232:10 | access to array | provenance | | +| test.cpp:245:30:245:30 | p | test.cpp:261:27:261:30 | access to array | provenance | | +| test.cpp:245:30:245:30 | p | test.cpp:261:27:261:30 | access to array | provenance | | +| test.cpp:274:14:274:20 | buffer3 | test.cpp:245:30:245:30 | p | provenance | | +| test.cpp:274:14:274:20 | buffer3 | test.cpp:274:14:274:20 | buffer3 | provenance | | +| test.cpp:277:35:277:35 | p | test.cpp:278:14:278:14 | p | provenance | | +| test.cpp:278:14:278:14 | p | test.cpp:245:30:245:30 | p | provenance | | +| test.cpp:283:19:283:25 | buffer1 | test.cpp:277:35:277:35 | p | provenance | | +| test.cpp:283:19:283:25 | buffer1 | test.cpp:283:19:283:25 | buffer1 | provenance | | +| test.cpp:286:19:286:25 | buffer2 | test.cpp:277:35:277:35 | p | provenance | | +| test.cpp:286:19:286:25 | buffer2 | test.cpp:286:19:286:25 | buffer2 | provenance | | +| test.cpp:289:19:289:25 | buffer3 | test.cpp:277:35:277:35 | p | provenance | | +| test.cpp:289:19:289:25 | buffer3 | test.cpp:289:19:289:25 | buffer3 | provenance | | +| test.cpp:292:25:292:27 | arr | test.cpp:299:16:299:21 | access to array | provenance | | +| test.cpp:292:25:292:27 | arr | test.cpp:299:16:299:21 | access to array | provenance | | +| test.cpp:306:20:306:23 | arr1 | test.cpp:292:25:292:27 | arr | provenance | | +| test.cpp:306:20:306:23 | arr1 | test.cpp:306:20:306:23 | arr1 | provenance | | +| test.cpp:309:20:309:23 | arr2 | test.cpp:292:25:292:27 | arr | provenance | | +| test.cpp:309:20:309:23 | arr2 | test.cpp:309:20:309:23 | arr2 | provenance | | +| test.cpp:319:19:319:22 | temp | test.cpp:319:19:319:27 | ... + ... | provenance | | +| test.cpp:319:19:319:22 | temp | test.cpp:324:23:324:32 | ... + ... | provenance | | +| test.cpp:319:19:319:27 | ... + ... | test.cpp:325:24:325:26 | end | provenance | | +| test.cpp:322:19:322:22 | temp | test.cpp:322:19:322:27 | ... + ... | provenance | | +| test.cpp:322:19:322:22 | temp | test.cpp:324:23:324:32 | ... + ... | provenance | | +| test.cpp:322:19:322:27 | ... + ... | test.cpp:325:24:325:26 | end | provenance | | +| test.cpp:324:23:324:26 | temp | test.cpp:324:23:324:32 | ... + ... | provenance | | +| test.cpp:324:23:324:32 | ... + ... | test.cpp:325:15:325:19 | temp2 | provenance | | nodes | test.cpp:34:5:34:24 | access to array | semmle.label | access to array | | test.cpp:34:10:34:12 | buf | semmle.label | buf | diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-359/semmle/tests/PrivateCleartextWrite.expected b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-359/semmle/tests/PrivateCleartextWrite.expected index 78f724f788c..ae24fbb77c4 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-359/semmle/tests/PrivateCleartextWrite.expected +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-359/semmle/tests/PrivateCleartextWrite.expected @@ -1,14 +1,14 @@ edges -| test.cpp:45:18:45:23 | buffer | test.cpp:45:7:45:10 | *func | -| test.cpp:74:24:74:30 | medical | test.cpp:78:24:78:27 | temp | -| test.cpp:74:24:74:30 | medical | test.cpp:81:22:81:28 | medical | -| test.cpp:77:16:77:22 | medical | test.cpp:78:24:78:27 | temp | -| test.cpp:77:16:77:22 | medical | test.cpp:81:22:81:28 | medical | -| test.cpp:81:17:81:20 | call to func | test.cpp:82:24:82:28 | buff5 | -| test.cpp:81:22:81:28 | medical | test.cpp:45:18:45:23 | buffer | -| test.cpp:81:22:81:28 | medical | test.cpp:81:17:81:20 | call to func | -| test.cpp:96:37:96:46 | theZipcode | test.cpp:99:42:99:51 | theZipcode | -| test.cpp:99:61:99:70 | theZipcode | test.cpp:99:42:99:51 | theZipcode | +| test.cpp:45:18:45:23 | buffer | test.cpp:45:7:45:10 | *func | provenance | | +| test.cpp:74:24:74:30 | medical | test.cpp:78:24:78:27 | temp | provenance | | +| test.cpp:74:24:74:30 | medical | test.cpp:81:22:81:28 | medical | provenance | | +| test.cpp:77:16:77:22 | medical | test.cpp:78:24:78:27 | temp | provenance | | +| test.cpp:77:16:77:22 | medical | test.cpp:81:22:81:28 | medical | provenance | | +| test.cpp:81:17:81:20 | call to func | test.cpp:82:24:82:28 | buff5 | provenance | | +| test.cpp:81:22:81:28 | medical | test.cpp:45:18:45:23 | buffer | provenance | | +| test.cpp:81:22:81:28 | medical | test.cpp:81:17:81:20 | call to func | provenance | | +| test.cpp:96:37:96:46 | theZipcode | test.cpp:99:42:99:51 | theZipcode | provenance | | +| test.cpp:99:61:99:70 | theZipcode | test.cpp:99:42:99:51 | theZipcode | provenance | | nodes | test.cpp:45:7:45:10 | *func | semmle.label | *func | | test.cpp:45:18:45:23 | buffer | semmle.label | buffer | 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 b000ff9d089..770a70f2a1d 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,753 +1,753 @@ edges -| A.cpp:23:10:23:10 | c | A.cpp:25:7:25:17 | ... = ... | -| A.cpp:25:7:25:17 | ... = ... | A.cpp:25:7:25:10 | *this [post update] [c] | -| A.cpp:27:17:27:17 | c | A.cpp:27:22:27:32 | ... = ... | -| A.cpp:27:22:27:32 | ... = ... | A.cpp:27:22:27:25 | *this [post update] [c] | -| A.cpp:28:8:28:10 | *this [c] | A.cpp:28:23:28:26 | *this [c] | -| A.cpp:28:23:28:26 | *this [c] | A.cpp:28:29:28:29 | c | -| A.cpp:28:29:28:29 | c | A.cpp:28:8:28:10 | *get | -| A.cpp:29:23:29:23 | c | A.cpp:31:20:31:20 | c | -| A.cpp:31:14:31:21 | call to B [c] | A.cpp:29:15:29:18 | **make [c] | -| A.cpp:31:20:31:20 | c | A.cpp:23:10:23:10 | c | -| A.cpp:31:20:31:20 | c | A.cpp:31:14:31:21 | call to B [c] | -| A.cpp:41:5:41:6 | insert output argument | A.cpp:43:10:43:12 | *& ... | -| A.cpp:41:15:41:21 | new | A.cpp:41:5:41:6 | insert output argument | -| A.cpp:47:12:47:18 | new | A.cpp:48:20:48:20 | c | -| A.cpp:48:12:48:18 | *call to make [c] | A.cpp:49:10:49:10 | *b [c] | -| A.cpp:48:20:48:20 | c | A.cpp:29:23:29:23 | c | -| A.cpp:48:20:48:20 | c | A.cpp:48:12:48:18 | *call to make [c] | -| A.cpp:49:10:49:10 | *b [c] | A.cpp:49:10:49:13 | c | -| A.cpp:55:5:55:5 | set output argument [c] | A.cpp:56:10:56:10 | *b [c] | -| A.cpp:55:12:55:19 | new | A.cpp:27:17:27:17 | c | -| A.cpp:55:12:55:19 | new | 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:56:10:56:10 | *b [c] | 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:57:11:57:24 | *new [c] | A.cpp:57:10:57:32 | call to get | -| A.cpp:57:11:57:24 | call to B [c] | A.cpp:57:11:57:24 | *new [c] | -| A.cpp:57:17:57:23 | new | A.cpp:23:10:23:10 | c | -| A.cpp:57:17:57:23 | new | A.cpp:57:11:57:24 | call to B [c] | -| A.cpp:57:17:57:23 | new | A.cpp:57:17:57:23 | new | -| A.cpp:64:10:64:15 | *call to setOnB [c] | A.cpp:66:10:66:11 | *b2 [c] | -| A.cpp:64:21:64:28 | new | A.cpp:64:10:64:15 | *call to setOnB [c] | -| A.cpp:64:21:64:28 | new | A.cpp:85:26:85:26 | c | -| A.cpp:66:10:66:11 | *b2 [c] | A.cpp:66:10:66:14 | c | -| A.cpp:73:10:73:19 | *call to setOnBWrap [c] | A.cpp:75:10:75:11 | *b2 [c] | -| A.cpp:73:25:73:32 | new | A.cpp:73:10:73:19 | *call to setOnBWrap [c] | -| A.cpp:73:25:73:32 | new | A.cpp:78:27:78:27 | c | -| A.cpp:75:10:75:11 | *b2 [c] | A.cpp:75:10:75:14 | c | -| A.cpp:78:27:78:27 | c | A.cpp:81:21:81:21 | c | -| A.cpp:81:10:81:15 | *call to setOnB [c] | A.cpp:78:6:78:15 | **setOnBWrap [c] | -| A.cpp:81:21:81:21 | c | A.cpp:81:10:81:15 | *call to setOnB [c] | -| A.cpp:81:21:81:21 | c | A.cpp:85:26:85:26 | c | -| A.cpp:85:26:85:26 | c | A.cpp:90:15:90:15 | c | -| A.cpp:90:7:90:8 | set output argument [c] | A.cpp:85:9:85:14 | **setOnB [c] | -| A.cpp:90:15:90:15 | c | A.cpp:27:17:27:17 | c | -| A.cpp:90:15:90:15 | c | A.cpp:90:7:90:8 | set output argument [c] | -| A.cpp:98:12:98:18 | new | A.cpp:100:5:100:13 | ... = ... | -| A.cpp:100:5:100:6 | *c1 [post update] [a] | A.cpp:101:8:101:9 | *c1 [a] | -| A.cpp:100:5:100:13 | ... = ... | A.cpp:100:5:100:6 | *c1 [post update] [a] | -| A.cpp:101:8:101:9 | *c1 [a] | A.cpp:103:14:103:14 | *c [a] | -| A.cpp:103:14:103:14 | *c [a] | A.cpp:107:12:107:13 | *c1 [a] | -| A.cpp:103:14:103:14 | *c [a] | A.cpp:120:12:120:13 | *c1 [a] | -| A.cpp:107:12:107:13 | *c1 [a] | A.cpp:107:12:107:16 | a | -| A.cpp:120:12:120:13 | *c1 [a] | A.cpp:120:12:120:16 | a | -| A.cpp:126:5:126:5 | set output argument [c] | A.cpp:131:8:131:8 | f7 output argument [c] | -| A.cpp:126:12:126:18 | new | A.cpp:27:17:27:17 | c | -| A.cpp:126:12:126:18 | new | A.cpp:126:5:126:5 | set output argument [c] | -| A.cpp:126:12:126:18 | new | A.cpp:126:12:126:18 | new | -| A.cpp:131:8:131:8 | f7 output argument [c] | A.cpp:132:10:132:10 | *b [c] | -| A.cpp:132:10:132:10 | *b [c] | A.cpp:132:10:132:13 | c | -| A.cpp:140:13:140:13 | b | A.cpp:143:7:143:31 | ... = ... | -| A.cpp:142:7:142:7 | *b [post update] [c] | A.cpp:143:7:143:31 | *... = ... [c] | -| A.cpp:142:7:142:7 | *b [post update] [c] | A.cpp:151:18:151:18 | D output argument [c] | -| A.cpp:142:7:142:20 | ... = ... | A.cpp:142:7:142:7 | *b [post update] [c] | -| A.cpp:142:14:142:20 | new | A.cpp:142:7:142:20 | ... = ... | -| A.cpp:143:7:143:10 | *this [post update] [*b, c] | A.cpp:151:12:151:24 | call to D [*b, c] | -| A.cpp:143:7:143:10 | *this [post update] [b] | A.cpp:151:12:151:24 | call to D [b] | -| A.cpp:143:7:143:31 | *... = ... [c] | A.cpp:143:7:143:10 | *this [post update] [*b, c] | -| A.cpp:143:7:143:31 | ... = ... | A.cpp:143:7:143:10 | *this [post update] [b] | -| A.cpp:143:7:143:31 | ... = ... | A.cpp:143:7:143:10 | *this [post update] [b] | -| A.cpp:143:25:143:31 | new | A.cpp:143:7:143:31 | ... = ... | -| A.cpp:150:12:150:18 | new | A.cpp:151:18:151:18 | b | -| A.cpp:151:12:151:24 | call to D [*b, c] | A.cpp:153:10:153:10 | *d [*b, c] | -| A.cpp:151:12:151:24 | call to D [b] | A.cpp:152:10:152:10 | *d [b] | -| A.cpp:151:18:151:18 | D output argument [c] | A.cpp:154:10:154:10 | *b [c] | -| A.cpp:151:18:151:18 | b | A.cpp:140:13:140:13 | b | -| A.cpp:151:18:151:18 | b | A.cpp:151:12:151:24 | call to D [b] | -| A.cpp:152:10:152:10 | *d [b] | A.cpp:152:10:152:13 | b | -| A.cpp:153:10:153:10 | *d [*b, c] | A.cpp:153:13:153:13 | *b [c] | -| A.cpp:153:13:153:13 | *b [c] | A.cpp:153:10:153:16 | c | -| A.cpp:154:10:154:10 | *b [c] | A.cpp:154:10:154:13 | c | -| A.cpp:159:12:159:18 | new | A.cpp:160:29:160:29 | b | -| A.cpp:160:18:160:60 | call to MyList [head] | A.cpp:161:38:161:39 | *l1 [head] | -| A.cpp:160:29:160:29 | b | A.cpp:160:18:160:60 | call to MyList [head] | -| A.cpp:160:29:160:29 | b | A.cpp:181:15:181:21 | newHead | -| A.cpp:161:18:161:40 | call to MyList [*next, head] | A.cpp:162:38:162:39 | *l2 [*next, head] | -| A.cpp:161:38:161:39 | *l1 [head] | A.cpp:161:18:161:40 | call to MyList [*next, head] | -| A.cpp:161:38:161:39 | *l1 [head] | A.cpp:181:32:181:35 | *next [head] | -| A.cpp:162:18:162:40 | call to MyList [*next, *next, head] | A.cpp:165:10:165:11 | *l3 [*next, *next, head] | -| A.cpp:162:18:162:40 | call to MyList [*next, *next, head] | A.cpp:167:44:167:44 | *l [*next, *next, head] | -| A.cpp:162:38:162:39 | *l2 [*next, head] | A.cpp:162:18:162:40 | call to MyList [*next, *next, head] | -| A.cpp:162:38:162:39 | *l2 [*next, head] | A.cpp:181:32:181:35 | *next [*next, head] | -| A.cpp:165:10:165:11 | *l3 [*next, *next, head] | A.cpp:165:14:165:17 | *next [*next, head] | -| A.cpp:165:14:165:17 | *next [*next, head] | A.cpp:165:20:165:23 | *next [head] | -| A.cpp:165:20:165:23 | *next [head] | A.cpp:165:10:165:29 | head | -| A.cpp:167:44:167:44 | *l [*next, *next, head] | A.cpp:167:47:167:50 | *next [*next, head] | -| A.cpp:167:44:167:44 | *l [*next, head] | A.cpp:167:47:167:50 | *next [head] | -| A.cpp:167:47:167:50 | *next [*next, head] | A.cpp:167:44:167:44 | *l [*next, head] | -| A.cpp:167:47:167:50 | *next [head] | A.cpp:169:12:169:12 | *l [head] | -| A.cpp:169:12:169:12 | *l [head] | A.cpp:169:12:169:18 | head | -| A.cpp:181:15:181:21 | newHead | A.cpp:183:7:183:20 | ... = ... | -| A.cpp:181:32:181:35 | *next [*next, head] | A.cpp:184:7:184:23 | *... = ... [*next, head] | -| A.cpp:181:32:181:35 | *next [head] | A.cpp:184:7:184:23 | *... = ... [head] | -| A.cpp:183:7:183:20 | ... = ... | A.cpp:183:7:183:10 | *this [post update] [head] | -| A.cpp:184:7:184:23 | *... = ... [*next, head] | A.cpp:184:7:184:10 | *this [post update] [*next, *next, head] | -| A.cpp:184:7:184:23 | *... = ... [head] | A.cpp:184:7:184:10 | *this [post update] [*next, head] | -| B.cpp:6:15:6:24 | new | B.cpp:7:25:7:25 | e | -| B.cpp:7:16:7:35 | call to Box1 [elem1] | B.cpp:8:25:8:26 | *b1 [elem1] | -| B.cpp:7:25:7:25 | e | B.cpp:7:16:7:35 | call to Box1 [elem1] | -| B.cpp:7:25:7:25 | e | B.cpp:33:16:33:17 | e1 | -| B.cpp:8:16:8:27 | call to Box2 [*box1, elem1] | B.cpp:9:10:9:11 | *b2 [*box1, elem1] | -| B.cpp:8:25:8:26 | *b1 [elem1] | B.cpp:8:16:8:27 | call to Box2 [*box1, elem1] | -| B.cpp:8:25:8:26 | *b1 [elem1] | B.cpp:44:16:44:17 | *b1 [elem1] | -| B.cpp:9:10:9:11 | *b2 [*box1, elem1] | B.cpp:9:14:9:17 | *box1 [elem1] | -| B.cpp:9:14:9:17 | *box1 [elem1] | B.cpp:9:10:9:24 | elem1 | -| B.cpp:15:15:15:27 | new | B.cpp:16:37:16:37 | e | -| B.cpp:16:16:16:38 | call to Box1 [elem2] | B.cpp:17:25:17:26 | *b1 [elem2] | -| B.cpp:16:37:16:37 | e | B.cpp:16:16:16:38 | call to Box1 [elem2] | -| B.cpp:16:37:16:37 | e | B.cpp:33:26:33:27 | e2 | -| B.cpp:17:16:17:27 | call to Box2 [*box1, elem2] | B.cpp:19:10:19:11 | *b2 [*box1, elem2] | -| B.cpp:17:25:17:26 | *b1 [elem2] | B.cpp:17:16:17:27 | call to Box2 [*box1, elem2] | -| B.cpp:17:25:17:26 | *b1 [elem2] | B.cpp:44:16:44:17 | *b1 [elem2] | -| B.cpp:19:10:19:11 | *b2 [*box1, elem2] | B.cpp:19:14:19:17 | *box1 [elem2] | -| B.cpp:19:14:19:17 | *box1 [elem2] | B.cpp:19:10:19:24 | elem2 | -| B.cpp:33:16:33:17 | e1 | B.cpp:35:7:35:22 | ... = ... | -| B.cpp:33:26:33:27 | e2 | B.cpp:36:7:36:22 | ... = ... | -| B.cpp:35:7:35:22 | ... = ... | B.cpp:35:7:35:10 | *this [post update] [elem1] | -| B.cpp:36:7:36:22 | ... = ... | B.cpp:36:7:36:10 | *this [post update] [elem2] | -| B.cpp:44:16:44:17 | *b1 [elem1] | B.cpp:46:7:46:21 | *... = ... [elem1] | -| B.cpp:44:16:44:17 | *b1 [elem2] | B.cpp:46:7:46:21 | *... = ... [elem2] | -| B.cpp:46:7:46:21 | *... = ... [elem1] | B.cpp:46:7:46:10 | *this [post update] [*box1, elem1] | -| B.cpp:46:7:46:21 | *... = ... [elem2] | B.cpp:46:7:46:10 | *this [post update] [*box1, elem2] | -| C.cpp:18:12:18:18 | call to C [s1] | C.cpp:19:5:19:5 | *c [s1] | -| C.cpp:18:12:18:18 | call to C [s3] | C.cpp:19:5:19:5 | *c [s3] | -| C.cpp:19:5:19:5 | *c [s1] | C.cpp:27:8:27:11 | *this [s1] | -| C.cpp:19:5:19:5 | *c [s3] | C.cpp:27:8:27:11 | *this [s3] | -| C.cpp:22:3:22:3 | *this [post update] [s1] | C.cpp:18:12:18:18 | call to C [s1] | -| C.cpp:22:12:22:21 | new | C.cpp:22:3:22:3 | *this [post update] [s1] | -| C.cpp:22:12:22:21 | new | C.cpp:22:12:22:21 | new | -| C.cpp:24:5:24:8 | *this [post update] [s3] | C.cpp:18:12:18:18 | call to C [s3] | -| C.cpp:24:5:24:25 | ... = ... | C.cpp:24:5:24:8 | *this [post update] [s3] | -| C.cpp:24:16:24:25 | new | C.cpp:24:5:24:25 | ... = ... | -| C.cpp:27:8:27:11 | *this [s1] | C.cpp:29:10:29:11 | *this [s1] | -| C.cpp:27:8:27:11 | *this [s3] | C.cpp:31:10:31:11 | *this [s3] | -| C.cpp:29:10:29:11 | *this [s1] | C.cpp:29:10:29:11 | s1 | -| C.cpp:31:10:31:11 | *this [s3] | C.cpp:31:10:31:11 | s3 | -| D.cpp:10:11:10:17 | *this [elem] | D.cpp:10:30:10:33 | *this [elem] | -| D.cpp:10:30:10:33 | *this [elem] | D.cpp:10:30:10:33 | elem | -| D.cpp:10:30:10:33 | elem | D.cpp:10:11:10:17 | *getElem | -| D.cpp:11:24:11:24 | e | D.cpp:11:29:11:36 | ... = ... | -| D.cpp:11:29:11:36 | ... = ... | D.cpp:11:29:11:32 | *this [post update] [elem] | -| D.cpp:17:11:17:17 | *this [*box, elem] | D.cpp:17:30:17:32 | *this [*box, elem] | -| D.cpp:17:30:17:32 | *box [elem] | D.cpp:17:11:17:17 | **getBox1 [elem] | -| D.cpp:17:30:17:32 | *this [*box, elem] | D.cpp:17:30:17:32 | *box [elem] | -| D.cpp:21:30:21:31 | *b2 [*box, elem] | D.cpp:22:10:22:11 | *b2 [*box, elem] | -| D.cpp:22:10:22:11 | *b2 [*box, elem] | D.cpp:17:11:17:17 | *this [*box, elem] | -| D.cpp:22:10:22:11 | *b2 [*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:22:14:22:20 | *call to getBox1 [elem] | D.cpp:22:10:22:33 | call to getElem | -| D.cpp:28:15:28:24 | new | D.cpp:30:5:30:20 | ... = ... | -| D.cpp:30:5:30:5 | *b [post update] [*box, elem] | D.cpp:31:14:31:14 | *b [*box, elem] | -| D.cpp:30:5:30:20 | ... = ... | D.cpp:30:8:30:10 | *box [post update] [elem] | -| D.cpp:30:8:30:10 | *box [post update] [elem] | D.cpp:30:5:30:5 | *b [post update] [*box, elem] | -| D.cpp:31:14:31:14 | *b [*box, elem] | D.cpp:21:30:21:31 | *b2 [*box, elem] | -| D.cpp:35:15:35:24 | new | D.cpp:37:21:37:21 | e | -| D.cpp:37:5:37:5 | *b [post update] [*box, elem] | D.cpp:38:14:38:14 | *b [*box, elem] | -| D.cpp:37:8:37:10 | setElem output argument [elem] | D.cpp:37:5:37:5 | *b [post update] [*box, elem] | -| D.cpp:37:21:37:21 | e | D.cpp:11:24:11:24 | e | -| D.cpp:37:21:37:21 | e | D.cpp:37:8:37:10 | setElem output argument [elem] | -| D.cpp:38:14:38:14 | *b [*box, elem] | D.cpp:21:30:21:31 | *b2 [*box, elem] | -| D.cpp:42:15:42:24 | new | D.cpp:44:5:44:26 | ... = ... | -| D.cpp:44:5:44:5 | getBox1 output argument [*box, elem] | D.cpp:45:14:45:14 | *b [*box, elem] | -| D.cpp:44:5:44:26 | ... = ... | D.cpp:44:8:44:14 | *call to getBox1 [post update] [elem] | -| D.cpp:44:8:44:14 | *call to getBox1 [post update] [elem] | D.cpp:44:5:44:5 | getBox1 output argument [*box, elem] | -| D.cpp:45:14:45:14 | *b [*box, elem] | D.cpp:21:30:21:31 | *b2 [*box, elem] | -| D.cpp:49:15:49:24 | new | D.cpp:51:27:51:27 | e | -| D.cpp:51:5:51:5 | getBox1 output argument [*box, elem] | D.cpp:52:14:52:14 | *b [*box, elem] | -| D.cpp:51:8:51:14 | setElem output argument [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:51:27:51:27 | e | D.cpp:51:8:51:14 | setElem output argument [elem] | -| D.cpp:52:14:52:14 | *b [*box, elem] | D.cpp:21:30:21:31 | *b2 [*box, elem] | -| D.cpp:56:15:56:24 | new | D.cpp:58:5:58:27 | ... = ... | -| D.cpp:58:5:58:12 | *boxfield [post update] [*box, elem] | D.cpp:58:5:58:12 | *this [post update] [*boxfield, *box, elem] | -| D.cpp:58:5:58:12 | *this [post update] [*boxfield, *box, elem] | D.cpp:59:5:59:7 | *this [*boxfield, *box, elem] | -| D.cpp:58:5:58:27 | ... = ... | D.cpp:58:15:58:17 | *box [post update] [elem] | -| D.cpp:58:15:58:17 | *box [post update] [elem] | D.cpp:58:5:58:12 | *boxfield [post update] [*box, elem] | -| D.cpp:59:5:59:7 | *this [*boxfield, *box, elem] | D.cpp:63:8:63:10 | *this [*boxfield, *box, elem] | -| D.cpp:63:8:63:10 | *this [*boxfield, *box, elem] | D.cpp:64:10:64:17 | *this [*boxfield, *box, elem] | -| D.cpp:64:10:64:17 | *boxfield [*box, elem] | D.cpp:64:20:64:22 | *box [elem] | -| D.cpp:64:10:64:17 | *this [*boxfield, *box, elem] | D.cpp:64:10:64:17 | *boxfield [*box, elem] | -| D.cpp:64:20:64:22 | *box [elem] | D.cpp:64:10:64:28 | elem | -| E.cpp:19:27:19:27 | *p [data, *buffer] | E.cpp:21:10:21:10 | *p [data, *buffer] | -| E.cpp:21:10:21:10 | *p [data, *buffer] | E.cpp:21:13:21:16 | *data [*buffer] | -| E.cpp:21:13:21:16 | *data [*buffer] | E.cpp:21:18:21:23 | *buffer | -| E.cpp:28:21:28:23 | argument_source output argument | E.cpp:31:10:31:12 | *raw | -| E.cpp:29:21:29:21 | *b [post update] [*buffer] | E.cpp:32:10:32:10 | *b [*buffer] | -| E.cpp:29:21:29:29 | argument_source output argument | E.cpp:29:21:29:21 | *b [post update] [*buffer] | -| E.cpp:30:21:30:21 | *p [post update] [data, *buffer] | E.cpp:33:18:33:19 | *& ... [data, *buffer] | -| E.cpp:30:21:30:33 | argument_source output argument | E.cpp:30:23:30:26 | *data [post update] [*buffer] | -| E.cpp:30:23:30:26 | *data [post update] [*buffer] | E.cpp:30:21:30:21 | *p [post update] [data, *buffer] | -| E.cpp:32:10:32:10 | *b [*buffer] | E.cpp:32:13:32:18 | *buffer | -| E.cpp:33:18:33:19 | *& ... [data, *buffer] | E.cpp:19:27:19:27 | *p [data, *buffer] | -| aliasing.cpp:9:3:9:3 | *s [post update] [m1] | aliasing.cpp:25:17:25:19 | pointerSetter output argument [m1] | -| aliasing.cpp:9:3:9:22 | ... = ... | aliasing.cpp:9:3:9:3 | *s [post update] [m1] | -| aliasing.cpp:9:11:9:20 | call to user_input | aliasing.cpp:9:3:9:22 | ... = ... | -| aliasing.cpp:13:3:13:3 | *s [post update] [m1] | aliasing.cpp:26:19:26:20 | referenceSetter output argument [m1] | -| aliasing.cpp:13:3:13:21 | ... = ... | aliasing.cpp:13:3:13:3 | *s [post update] [m1] | -| aliasing.cpp:13:10:13:19 | call to user_input | aliasing.cpp:13:3:13:21 | ... = ... | -| aliasing.cpp:25:17:25:19 | pointerSetter output argument [m1] | aliasing.cpp:29:8:29:9 | *s1 [m1] | -| aliasing.cpp:26:19:26:20 | referenceSetter output argument [m1] | aliasing.cpp:30:8:30:9 | *s2 [m1] | -| aliasing.cpp:29:8:29:9 | *s1 [m1] | aliasing.cpp:29:11:29:12 | m1 | -| aliasing.cpp:30:8:30:9 | *s2 [m1] | aliasing.cpp:30:11:30:12 | m1 | -| aliasing.cpp:60:3:60:4 | *s2 [post update] [m1] | aliasing.cpp:62:8:62:12 | *copy2 [m1] | -| aliasing.cpp:60:3:60:22 | ... = ... | aliasing.cpp:60:3:60:4 | *s2 [post update] [m1] | -| aliasing.cpp:60:11:60:20 | call to user_input | aliasing.cpp:60:3:60:22 | ... = ... | -| aliasing.cpp:62:8:62:12 | *copy2 [m1] | aliasing.cpp:62:14:62:15 | m1 | -| aliasing.cpp:92:3:92:3 | *w [post update] [s, m1] | aliasing.cpp:93:8:93:8 | *w [s, m1] | -| aliasing.cpp:92:3:92:23 | ... = ... | aliasing.cpp:92:5:92:5 | *s [post update] [m1] | -| aliasing.cpp:92:5:92:5 | *s [post update] [m1] | aliasing.cpp:92:3:92:3 | *w [post update] [s, m1] | -| aliasing.cpp:92:12:92:21 | call to user_input | aliasing.cpp:92:3:92:23 | ... = ... | -| aliasing.cpp:93:8:93:8 | *w [s, m1] | aliasing.cpp:93:10:93:10 | *s [m1] | -| aliasing.cpp:93:10:93:10 | *s [m1] | aliasing.cpp:93:12:93:13 | m1 | -| aliasing.cpp:98:3:98:3 | *s [post update] [m1] | aliasing.cpp:101:14:101:19 | *s_copy [m1] | -| aliasing.cpp:98:3:98:21 | ... = ... | aliasing.cpp:98:3:98:3 | *s [post update] [m1] | -| aliasing.cpp:98:10:98:19 | call to user_input | aliasing.cpp:98:3:98:21 | ... = ... | -| aliasing.cpp:101:13:101:22 | *& ... | aliasing.cpp:102:8:102:10 | * ... | -| aliasing.cpp:101:14:101:19 | *s_copy [m1] | aliasing.cpp:101:13:101:22 | *& ... | -| aliasing.cpp:105:23:105:24 | *pa | aliasing.cpp:121:15:121:16 | taint_a_ptr output argument | -| aliasing.cpp:105:23:105:24 | *pa | aliasing.cpp:126:15:126:20 | taint_a_ptr output argument | -| aliasing.cpp:105:23:105:24 | *pa | aliasing.cpp:131:15:131:16 | taint_a_ptr output argument | -| aliasing.cpp:105:23:105:24 | *pa | aliasing.cpp:136:15:136:17 | taint_a_ptr output argument | -| aliasing.cpp:105:23:105:24 | *pa | aliasing.cpp:141:17:141:20 | taint_a_ptr output argument | -| aliasing.cpp:105:23:105:24 | *pa | aliasing.cpp:158:15:158:20 | taint_a_ptr output argument | -| aliasing.cpp:105:23:105:24 | *pa | aliasing.cpp:164:15:164:20 | taint_a_ptr output argument | -| aliasing.cpp:105:23:105:24 | *pa | aliasing.cpp:175:15:175:22 | taint_a_ptr output argument | -| aliasing.cpp:105:23:105:24 | *pa | aliasing.cpp:187:15:187:22 | taint_a_ptr output argument | -| aliasing.cpp:105:23:105:24 | *pa | aliasing.cpp:200:15:200:24 | taint_a_ptr output argument | -| aliasing.cpp:106:9:106:18 | call to user_input | aliasing.cpp:105:23:105:24 | *pa | -| aliasing.cpp:121:15:121:16 | taint_a_ptr output argument | aliasing.cpp:122:8:122:12 | access to array | -| aliasing.cpp:126:15:126:20 | taint_a_ptr output argument | aliasing.cpp:127:8:127:16 | * ... | -| aliasing.cpp:131:15:131:16 | taint_a_ptr output argument | aliasing.cpp:132:8:132:14 | * ... | -| aliasing.cpp:136:15:136:17 | taint_a_ptr output argument | aliasing.cpp:137:8:137:11 | * ... | -| aliasing.cpp:141:15:141:15 | *s [post update] [*data] | aliasing.cpp:143:8:143:8 | *s [*data] | -| aliasing.cpp:141:17:141:20 | taint_a_ptr output argument | aliasing.cpp:141:15:141:15 | *s [post update] [*data] | -| aliasing.cpp:143:8:143:8 | *s [*data] | aliasing.cpp:143:8:143:16 | access to array | -| aliasing.cpp:143:8:143:8 | *s [*data] | aliasing.cpp:143:10:143:13 | *data | -| aliasing.cpp:143:10:143:13 | *data | aliasing.cpp:143:8:143:16 | access to array | -| aliasing.cpp:158:15:158:15 | *s [post update] [data] | aliasing.cpp:159:9:159:9 | *s [data] | -| aliasing.cpp:158:15:158:20 | taint_a_ptr output argument | aliasing.cpp:158:15:158:15 | *s [post update] [data] | -| aliasing.cpp:159:9:159:9 | *s [data] | aliasing.cpp:159:8:159:14 | * ... | -| aliasing.cpp:164:15:164:15 | *s [post update] [data] | aliasing.cpp:165:8:165:8 | *s [data] | -| aliasing.cpp:164:15:164:20 | taint_a_ptr output argument | aliasing.cpp:164:15:164:15 | *s [post update] [data] | -| aliasing.cpp:165:8:165:8 | *s [data] | aliasing.cpp:165:8:165:16 | access to array | -| aliasing.cpp:175:15:175:22 | taint_a_ptr output argument | aliasing.cpp:175:19:175:19 | *s [post update] [m1] | -| aliasing.cpp:175:16:175:17 | *s2 [post update] [s, m1] | aliasing.cpp:176:8:176:9 | *s2 [s, m1] | -| aliasing.cpp:175:19:175:19 | *s [post update] [m1] | aliasing.cpp:175:16:175:17 | *s2 [post update] [s, m1] | -| aliasing.cpp:176:8:176:9 | *s2 [s, m1] | aliasing.cpp:176:11:176:11 | *s [m1] | -| aliasing.cpp:176:11:176:11 | *s [m1] | aliasing.cpp:176:13:176:14 | m1 | -| aliasing.cpp:187:15:187:22 | taint_a_ptr output argument | aliasing.cpp:187:19:187:19 | *s [post update] [m1] | -| aliasing.cpp:187:16:187:17 | *s2 [post update] [s, m1] | aliasing.cpp:189:8:189:11 | *s2_2 [s, m1] | -| aliasing.cpp:187:19:187:19 | *s [post update] [m1] | aliasing.cpp:187:16:187:17 | *s2 [post update] [s, m1] | -| aliasing.cpp:189:8:189:11 | *s2_2 [s, m1] | aliasing.cpp:189:13:189:13 | *s [m1] | -| aliasing.cpp:189:13:189:13 | *s [m1] | aliasing.cpp:189:15:189:16 | m1 | -| aliasing.cpp:200:15:200:24 | taint_a_ptr output argument | aliasing.cpp:200:21:200:21 | *s [post update] [m1] | -| aliasing.cpp:200:16:200:18 | *ps2 [post update] [s, m1] | aliasing.cpp:201:8:201:10 | *ps2 [s, m1] | -| aliasing.cpp:200:21:200:21 | *s [post update] [m1] | aliasing.cpp:200:16:200:18 | *ps2 [post update] [s, m1] | -| aliasing.cpp:201:8:201:10 | *ps2 [s, m1] | aliasing.cpp:201:13:201:13 | *s [m1] | -| aliasing.cpp:201:13:201:13 | *s [m1] | aliasing.cpp:201:15:201:16 | m1 | -| arrays.cpp:6:12:6:21 | call to user_input | arrays.cpp:7:8:7:13 | access to array | -| arrays.cpp:6:12:6:21 | call to user_input | arrays.cpp:8:8:8:13 | access to array | -| arrays.cpp:6:12:6:21 | call to user_input | arrays.cpp:9:8:9:11 | * ... | -| arrays.cpp:6:12:6:21 | call to user_input | arrays.cpp:10:8:10:15 | * ... | -| arrays.cpp:15:14:15:23 | call to user_input | arrays.cpp:16:8:16:13 | access to array | -| arrays.cpp:15:14:15:23 | call to user_input | arrays.cpp:17:8:17:13 | access to array | -| arrays.cpp:36:3:36:3 | *o [post update] [nested, arr, data] | arrays.cpp:37:8:37:8 | *o [nested, arr, data] | -| arrays.cpp:36:3:36:3 | *o [post update] [nested, arr, data] | arrays.cpp:38:8:38:8 | *o [nested, arr, data] | -| arrays.cpp:36:3:36:17 | *access to array [post update] [data] | arrays.cpp:36:5:36:10 | *nested [post update] [arr, data] | -| arrays.cpp:36:3:36:37 | ... = ... | arrays.cpp:36:3:36:17 | *access to array [post update] [data] | -| arrays.cpp:36:5:36:10 | *nested [post update] [arr, data] | arrays.cpp:36:3:36:3 | *o [post update] [nested, arr, data] | -| arrays.cpp:36:26:36:35 | call to user_input | arrays.cpp:36:3:36:37 | ... = ... | -| arrays.cpp:37:8:37:8 | *o [nested, arr, data] | arrays.cpp:37:10:37:15 | *nested [arr, data] | -| arrays.cpp:37:8:37:22 | *access to array [data] | arrays.cpp:37:24:37:27 | data | -| arrays.cpp:37:10:37:15 | *nested [arr, data] | arrays.cpp:37:8:37:22 | *access to array [data] | -| arrays.cpp:38:8:38:8 | *o [nested, arr, data] | arrays.cpp:38:10:38:15 | *nested [arr, data] | -| arrays.cpp:38:8:38:22 | *access to array [data] | arrays.cpp:38:24:38:27 | data | -| arrays.cpp:38:10:38:15 | *nested [arr, data] | arrays.cpp:38:8:38:22 | *access to array [data] | -| arrays.cpp:42:3:42:3 | *o [post update] [*indirect, arr, data] | arrays.cpp:43:8:43:8 | *o [*indirect, arr, data] | -| arrays.cpp:42:3:42:3 | *o [post update] [*indirect, arr, data] | arrays.cpp:44:8:44:8 | *o [*indirect, arr, data] | -| arrays.cpp:42:3:42:20 | *access to array [post update] [data] | arrays.cpp:42:5:42:12 | *indirect [post update] [arr, data] | -| arrays.cpp:42:3:42:40 | ... = ... | arrays.cpp:42:3:42:20 | *access to array [post update] [data] | -| arrays.cpp:42:5:42:12 | *indirect [post update] [arr, data] | arrays.cpp:42:3:42:3 | *o [post update] [*indirect, arr, data] | -| arrays.cpp:42:29:42:38 | call to user_input | arrays.cpp:42:3:42:40 | ... = ... | -| arrays.cpp:43:8:43:8 | *o [*indirect, arr, data] | arrays.cpp:43:10:43:17 | *indirect [arr, data] | -| arrays.cpp:43:8:43:25 | *access to array [data] | arrays.cpp:43:27:43:30 | data | -| arrays.cpp:43:10:43:17 | *indirect [arr, data] | arrays.cpp:43:8:43:25 | *access to array [data] | -| arrays.cpp:44:8:44:8 | *o [*indirect, arr, data] | arrays.cpp:44:10:44:17 | *indirect [arr, data] | -| arrays.cpp:44:8:44:25 | *access to array [data] | arrays.cpp:44:27:44:30 | data | -| arrays.cpp:44:10:44:17 | *indirect [arr, data] | arrays.cpp:44:8:44:25 | *access to array [data] | -| arrays.cpp:48:3:48:3 | *o [post update] [*indirect, *ptr, data] | arrays.cpp:49:8:49:8 | *o [*indirect, *ptr, data] | -| arrays.cpp:48:3:48:3 | *o [post update] [*indirect, *ptr, data] | arrays.cpp:50:8:50:8 | *o [*indirect, *ptr, data] | -| arrays.cpp:48:3:48:20 | *access to array [post update] [data] | arrays.cpp:48:5:48:12 | *indirect [post update] [*ptr, data] | -| arrays.cpp:48:3:48:40 | ... = ... | arrays.cpp:48:3:48:20 | *access to array [post update] [data] | -| arrays.cpp:48:5:48:12 | *indirect [post update] [*ptr, data] | arrays.cpp:48:3:48:3 | *o [post update] [*indirect, *ptr, data] | -| arrays.cpp:48:29:48:38 | call to user_input | arrays.cpp:48:3:48:40 | ... = ... | -| arrays.cpp:49:8:49:8 | *o [*indirect, *ptr, data] | arrays.cpp:49:10:49:17 | *indirect [*ptr, data] | -| arrays.cpp:49:8:49:25 | *access to array [data] | arrays.cpp:49:27:49:30 | data | -| arrays.cpp:49:10:49:17 | *indirect [*ptr, data] | arrays.cpp:49:8:49:25 | *access to array [data] | -| arrays.cpp:49:10:49:17 | *indirect [*ptr, data] | arrays.cpp:49:20:49:22 | *ptr [data] | -| arrays.cpp:49:20:49:22 | *ptr [data] | arrays.cpp:49:8:49:25 | *access to array [data] | -| arrays.cpp:50:8:50:8 | *o [*indirect, *ptr, data] | arrays.cpp:50:10:50:17 | *indirect [*ptr, data] | -| arrays.cpp:50:8:50:25 | *access to array [data] | arrays.cpp:50:27:50:30 | data | -| arrays.cpp:50:10:50:17 | *indirect [*ptr, data] | arrays.cpp:50:8:50:25 | *access to array [data] | -| arrays.cpp:50:10:50:17 | *indirect [*ptr, data] | arrays.cpp:50:20:50:22 | *ptr [data] | -| arrays.cpp:50:20:50:22 | *ptr [data] | arrays.cpp:50:8:50:25 | *access to array [data] | -| by_reference.cpp:11:48:11:52 | value | by_reference.cpp:12:5:12:16 | ... = ... | -| by_reference.cpp:12:5:12:16 | ... = ... | by_reference.cpp:12:5:12:5 | *s [post update] [a] | -| by_reference.cpp:15:26:15:30 | value | by_reference.cpp:16:5:16:19 | ... = ... | -| by_reference.cpp:16:5:16:19 | ... = ... | by_reference.cpp:16:5:16:8 | *this [post update] [a] | -| by_reference.cpp:19:28:19:32 | value | by_reference.cpp:20:23:20:27 | value | -| by_reference.cpp:20:23:20:27 | value | by_reference.cpp:15:26:15:30 | value | -| by_reference.cpp:20:23:20:27 | value | by_reference.cpp:20:5:20:8 | setDirectly output argument [a] | -| by_reference.cpp:23:34:23:38 | value | by_reference.cpp:24:25:24:29 | value | -| by_reference.cpp:24:25:24:29 | value | by_reference.cpp:11:48:11:52 | value | -| by_reference.cpp:24:25:24:29 | value | by_reference.cpp:24:19:24:22 | nonMemberSetA output argument [a] | -| by_reference.cpp:31:46:31:46 | *s [a] | by_reference.cpp:32:12:32:12 | *s [a] | -| by_reference.cpp:32:12:32:12 | *s [a] | by_reference.cpp:32:15:32:15 | a | -| by_reference.cpp:32:15:32:15 | a | by_reference.cpp:31:16:31:28 | *nonMemberGetA | -| by_reference.cpp:35:9:35:19 | *this [a] | by_reference.cpp:36:12:36:15 | *this [a] | -| by_reference.cpp:36:12:36:15 | *this [a] | by_reference.cpp:36:18:36:18 | a | -| by_reference.cpp:36:18:36:18 | a | by_reference.cpp:35:9:35:19 | *getDirectly | -| by_reference.cpp:39:9:39:21 | *this [a] | by_reference.cpp:40:12:40:15 | *this [a] | -| by_reference.cpp:40:12:40:15 | *this [a] | by_reference.cpp:35:9:35:19 | *this [a] | -| by_reference.cpp:40:12:40:15 | *this [a] | by_reference.cpp:40:18:40:28 | call to getDirectly | -| by_reference.cpp:40:18:40:28 | call to getDirectly | by_reference.cpp:39:9:39:21 | *getIndirectly | -| by_reference.cpp:43:9:43:27 | *this [a] | by_reference.cpp:44:26:44:29 | *this [a] | -| by_reference.cpp:44:12:44:24 | call to nonMemberGetA | by_reference.cpp:43:9:43:27 | *getThroughNonMember | -| by_reference.cpp:44:26:44:29 | *this [a] | by_reference.cpp:31:46:31:46 | *s [a] | -| by_reference.cpp:44:26:44:29 | *this [a] | by_reference.cpp:44:12:44:24 | call to nonMemberGetA | -| by_reference.cpp:50:3:50:3 | setDirectly output argument [a] | by_reference.cpp:51:8:51:8 | *s [a] | -| by_reference.cpp:50:17:50:26 | call to user_input | by_reference.cpp:15:26:15:30 | value | -| by_reference.cpp:50:17:50:26 | call to user_input | 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:51:8:51:8 | *s [a] | by_reference.cpp:51:10:51:20 | call to getDirectly | -| by_reference.cpp:56:3:56:3 | setIndirectly output argument [a] | by_reference.cpp:57:8:57:8 | *s [a] | -| by_reference.cpp:56:19:56:28 | call to user_input | by_reference.cpp:19:28:19:32 | value | -| by_reference.cpp:56:19:56:28 | call to user_input | 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:57:8:57:8 | *s [a] | by_reference.cpp:57:10:57:22 | call to getIndirectly | -| by_reference.cpp:62:3:62:3 | setThroughNonMember output argument [a] | by_reference.cpp:63:8:63:8 | *s [a] | -| by_reference.cpp:62:25:62:34 | call to user_input | by_reference.cpp:23:34:23:38 | value | -| by_reference.cpp:62:25:62:34 | call to user_input | 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:63:8:63:8 | *s [a] | by_reference.cpp:63:10:63:28 | call to getThroughNonMember | -| by_reference.cpp:68:17:68:18 | nonMemberSetA output argument [a] | by_reference.cpp:69:22:69:23 | *& ... [a] | -| by_reference.cpp:68:21:68:30 | call to user_input | by_reference.cpp:11:48:11:52 | value | -| by_reference.cpp:68:21:68:30 | call to user_input | 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:69:22:69:23 | *& ... [a] | by_reference.cpp:69:8:69:20 | call to nonMemberGetA | -| by_reference.cpp:84:3:84:7 | *inner [post update] [a] | by_reference.cpp:102:21:102:39 | taint_inner_a_ptr output argument [a] | -| by_reference.cpp:84:3:84:7 | *inner [post update] [a] | by_reference.cpp:103:27:103:35 | taint_inner_a_ptr output argument [a] | -| by_reference.cpp:84:3:84:7 | *inner [post update] [a] | by_reference.cpp:106:21:106:41 | taint_inner_a_ptr output argument [a] | -| by_reference.cpp:84:3:84:7 | *inner [post update] [a] | by_reference.cpp:107:29:107:37 | taint_inner_a_ptr output argument [a] | -| by_reference.cpp:84:3:84:25 | ... = ... | by_reference.cpp:84:3:84:7 | *inner [post update] [a] | -| by_reference.cpp:84:14:84:23 | call to user_input | by_reference.cpp:84:3:84:25 | ... = ... | -| by_reference.cpp:88:3:88:7 | *inner [post update] [a] | by_reference.cpp:122:21:122:38 | taint_inner_a_ref output argument [a] | -| by_reference.cpp:88:3:88:7 | *inner [post update] [a] | by_reference.cpp:123:21:123:36 | taint_inner_a_ref output argument [a] | -| by_reference.cpp:88:3:88:7 | *inner [post update] [a] | by_reference.cpp:126:21:126:40 | taint_inner_a_ref output argument [a] | -| by_reference.cpp:88:3:88:7 | *inner [post update] [a] | by_reference.cpp:127:21:127:38 | taint_inner_a_ref output argument [a] | -| by_reference.cpp:88:3:88:24 | ... = ... | by_reference.cpp:88:3:88:7 | *inner [post update] [a] | -| by_reference.cpp:88:13:88:22 | call to user_input | by_reference.cpp:88:3:88:24 | ... = ... | -| by_reference.cpp:91:25:91:26 | *pa | by_reference.cpp:104:15:104:22 | taint_a_ptr output argument | -| by_reference.cpp:91:25:91:26 | *pa | by_reference.cpp:108:15:108:24 | taint_a_ptr output argument | -| by_reference.cpp:92:9:92:18 | call to user_input | by_reference.cpp:91:25:91:26 | *pa | -| by_reference.cpp:95:25:95:26 | *pa | by_reference.cpp:124:15:124:21 | taint_a_ref output argument | -| by_reference.cpp:95:25:95:26 | *pa | by_reference.cpp:128:15:128:23 | taint_a_ref output argument | -| by_reference.cpp:96:8:96:17 | call to user_input | by_reference.cpp:95:25:95:26 | *pa | -| by_reference.cpp:102:21:102:39 | taint_inner_a_ptr output argument [a] | by_reference.cpp:102:22:102:26 | *outer [post update] [inner_nested, a] | -| by_reference.cpp:102:22:102:26 | *outer [post update] [inner_nested, a] | by_reference.cpp:110:8:110:12 | *outer [inner_nested, a] | -| by_reference.cpp:103:21:103:25 | *outer [post update] [*inner_ptr, a] | by_reference.cpp:111:8:111:12 | *outer [*inner_ptr, a] | -| by_reference.cpp:103:27:103:35 | taint_inner_a_ptr output argument [a] | by_reference.cpp:103:21:103:25 | *outer [post update] [*inner_ptr, a] | -| by_reference.cpp:104:15:104:22 | taint_a_ptr output argument | by_reference.cpp:104:16:104:20 | *outer [post update] [a] | -| by_reference.cpp:104:16:104:20 | *outer [post update] [a] | by_reference.cpp:112:8:112:12 | *outer [a] | -| by_reference.cpp:106:21:106:41 | taint_inner_a_ptr output argument [a] | by_reference.cpp:106:22:106:27 | *pouter [post update] [inner_nested, a] | -| by_reference.cpp:106:22:106:27 | *pouter [post update] [inner_nested, a] | by_reference.cpp:114:8:114:13 | *pouter [inner_nested, a] | -| by_reference.cpp:107:21:107:26 | *pouter [post update] [*inner_ptr, a] | by_reference.cpp:115:8:115:13 | *pouter [*inner_ptr, a] | -| by_reference.cpp:107:29:107:37 | taint_inner_a_ptr output argument [a] | by_reference.cpp:107:21:107:26 | *pouter [post update] [*inner_ptr, a] | -| by_reference.cpp:108:15:108:24 | taint_a_ptr output argument | by_reference.cpp:108:16:108:21 | *pouter [post update] [a] | -| by_reference.cpp:108:16:108:21 | *pouter [post update] [a] | by_reference.cpp:116:8:116:13 | *pouter [a] | -| by_reference.cpp:110:8:110:12 | *outer [inner_nested, a] | by_reference.cpp:110:14:110:25 | *inner_nested [a] | -| by_reference.cpp:110:14:110:25 | *inner_nested [a] | by_reference.cpp:110:27:110:27 | a | -| by_reference.cpp:111:8:111:12 | *outer [*inner_ptr, a] | by_reference.cpp:111:14:111:22 | *inner_ptr [a] | -| by_reference.cpp:111:14:111:22 | *inner_ptr [a] | by_reference.cpp:111:25:111:25 | a | -| by_reference.cpp:112:8:112:12 | *outer [a] | by_reference.cpp:112:14:112:14 | a | -| by_reference.cpp:114:8:114:13 | *pouter [inner_nested, a] | by_reference.cpp:114:16:114:27 | *inner_nested [a] | -| by_reference.cpp:114:16:114:27 | *inner_nested [a] | by_reference.cpp:114:29:114:29 | a | -| by_reference.cpp:115:8:115:13 | *pouter [*inner_ptr, a] | by_reference.cpp:115:16:115:24 | *inner_ptr [a] | -| by_reference.cpp:115:16:115:24 | *inner_ptr [a] | by_reference.cpp:115:27:115:27 | a | -| by_reference.cpp:116:8:116:13 | *pouter [a] | by_reference.cpp:116:16:116:16 | a | -| by_reference.cpp:122:21:122:25 | *outer [post update] [inner_nested, a] | by_reference.cpp:130:8:130:12 | *outer [inner_nested, a] | -| by_reference.cpp:122:21:122:38 | taint_inner_a_ref output argument [a] | by_reference.cpp:122:21:122:25 | *outer [post update] [inner_nested, a] | -| by_reference.cpp:123:21:123:36 | taint_inner_a_ref output argument [a] | by_reference.cpp:123:22:123:26 | *outer [post update] [*inner_ptr, a] | -| by_reference.cpp:123:22:123:26 | *outer [post update] [*inner_ptr, a] | by_reference.cpp:131:8:131:12 | *outer [*inner_ptr, a] | -| by_reference.cpp:124:15:124:19 | *outer [post update] [a] | by_reference.cpp:132:8:132:12 | *outer [a] | -| by_reference.cpp:124:15:124:21 | taint_a_ref output argument | by_reference.cpp:124:15:124:19 | *outer [post update] [a] | -| by_reference.cpp:126:21:126:26 | *pouter [post update] [inner_nested, a] | by_reference.cpp:134:8:134:13 | *pouter [inner_nested, a] | -| by_reference.cpp:126:21:126:40 | taint_inner_a_ref output argument [a] | by_reference.cpp:126:21:126:26 | *pouter [post update] [inner_nested, a] | -| by_reference.cpp:127:21:127:38 | taint_inner_a_ref output argument [a] | by_reference.cpp:127:22:127:27 | *pouter [post update] [*inner_ptr, a] | -| by_reference.cpp:127:22:127:27 | *pouter [post update] [*inner_ptr, a] | by_reference.cpp:135:8:135:13 | *pouter [*inner_ptr, a] | -| by_reference.cpp:128:15:128:20 | *pouter [post update] [a] | by_reference.cpp:136:8:136:13 | *pouter [a] | -| by_reference.cpp:128:15:128:23 | taint_a_ref output argument | by_reference.cpp:128:15:128:20 | *pouter [post update] [a] | -| by_reference.cpp:130:8:130:12 | *outer [inner_nested, a] | by_reference.cpp:130:14:130:25 | *inner_nested [a] | -| by_reference.cpp:130:14:130:25 | *inner_nested [a] | by_reference.cpp:130:27:130:27 | a | -| by_reference.cpp:131:8:131:12 | *outer [*inner_ptr, a] | by_reference.cpp:131:14:131:22 | *inner_ptr [a] | -| by_reference.cpp:131:14:131:22 | *inner_ptr [a] | by_reference.cpp:131:25:131:25 | a | -| by_reference.cpp:132:8:132:12 | *outer [a] | by_reference.cpp:132:14:132:14 | a | -| by_reference.cpp:134:8:134:13 | *pouter [inner_nested, a] | by_reference.cpp:134:16:134:27 | *inner_nested [a] | -| by_reference.cpp:134:16:134:27 | *inner_nested [a] | by_reference.cpp:134:29:134:29 | a | -| by_reference.cpp:135:8:135:13 | *pouter [*inner_ptr, a] | by_reference.cpp:135:16:135:24 | *inner_ptr [a] | -| by_reference.cpp:135:16:135:24 | *inner_ptr [a] | by_reference.cpp:135:27:135:27 | a | -| by_reference.cpp:136:8:136:13 | *pouter [a] | by_reference.cpp:136:16:136:16 | a | -| clearning.cpp:32:3:32:25 | ... = ... | clearning.cpp:32:4:32:4 | *s [post update] [*x] | -| clearning.cpp:32:4:32:4 | *s [post update] [*x] | clearning.cpp:33:5:33:5 | *s [*x] | -| clearning.cpp:32:10:32:19 | call to user_input | clearning.cpp:32:3:32:25 | ... = ... | -| clearning.cpp:33:5:33:5 | *s [*x] | clearning.cpp:34:9:34:9 | *s [*x] | -| clearning.cpp:34:9:34:9 | *s [*x] | clearning.cpp:34:8:34:11 | * ... | -| clearning.cpp:53:3:53:25 | ... = ... | clearning.cpp:53:4:53:4 | *s [post update] [*x] | -| clearning.cpp:53:4:53:4 | *s [post update] [*x] | clearning.cpp:54:3:54:3 | *s [*x] | -| clearning.cpp:53:10:53:19 | call to user_input | clearning.cpp:53:3:53:25 | ... = ... | -| clearning.cpp:54:3:54:3 | *s [*x] | clearning.cpp:54:3:54:7 | *... ++ | -| clearning.cpp:54:3:54:3 | *s [*x] | clearning.cpp:54:5:54:5 | *x | -| clearning.cpp:54:3:54:3 | *s [*x] | clearning.cpp:55:8:55:8 | *s [*x] | -| clearning.cpp:54:3:54:3 | *s [post update] [*x] | clearning.cpp:55:8:55:8 | *s [*x] | -| clearning.cpp:54:3:54:7 | *... ++ | clearning.cpp:54:3:54:3 | *s [post update] [*x] | -| clearning.cpp:54:3:54:7 | *... ++ | clearning.cpp:54:3:54:7 | *... ++ | -| clearning.cpp:54:5:54:5 | *x | clearning.cpp:54:3:54:7 | *... ++ | -| clearning.cpp:55:8:55:8 | *s [*x] | clearning.cpp:55:10:55:10 | *x | -| clearning.cpp:60:3:60:22 | ... = ... | clearning.cpp:60:5:60:5 | *s [post update] [**x] | -| clearning.cpp:60:5:60:5 | *s [post update] [**x] | clearning.cpp:61:3:61:3 | *s [**x] | -| clearning.cpp:60:11:60:20 | call to user_input | clearning.cpp:60:3:60:22 | ... = ... | -| clearning.cpp:61:3:61:3 | *s [**x] | clearning.cpp:61:3:61:7 | **... ++ | -| clearning.cpp:61:3:61:3 | *s [**x] | clearning.cpp:61:5:61:5 | **x | -| clearning.cpp:61:3:61:3 | *s [**x] | clearning.cpp:62:8:62:8 | *s [**x] | -| clearning.cpp:61:3:61:3 | *s [post update] [**x] | clearning.cpp:62:8:62:8 | *s [**x] | -| clearning.cpp:61:3:61:7 | **... ++ | clearning.cpp:61:3:61:3 | *s [post update] [**x] | -| clearning.cpp:61:3:61:7 | **... ++ | clearning.cpp:61:3:61:7 | **... ++ | -| clearning.cpp:61:5:61:5 | **x | clearning.cpp:61:3:61:7 | **... ++ | -| clearning.cpp:62:8:62:8 | *s [**x] | clearning.cpp:62:10:62:10 | **x | -| clearning.cpp:74:18:74:18 | *s [post update] [*val] | clearning.cpp:76:8:76:8 | *s [*val] | -| clearning.cpp:74:20:74:22 | argument_source output argument | clearning.cpp:74:18:74:18 | *s [post update] [*val] | -| clearning.cpp:76:8:76:8 | *s [*val] | clearning.cpp:76:7:76:12 | * ... | -| clearning.cpp:81:18:81:18 | *s [post update] [*val] | clearning.cpp:83:13:83:13 | *s [*val] | -| clearning.cpp:81:20:81:22 | argument_source output argument | clearning.cpp:81:18:81:18 | *s [post update] [*val] | -| clearning.cpp:83:5:83:5 | *s [post update] [*val] | clearning.cpp:84:8:84:8 | *s [*val] | -| clearning.cpp:83:5:83:21 | *... = ... | clearning.cpp:83:5:83:5 | *s [post update] [*val] | -| clearning.cpp:83:13:83:13 | *s [*val] | clearning.cpp:83:13:83:21 | *... + ... | -| clearning.cpp:83:13:83:13 | *s [*val] | clearning.cpp:83:15:83:17 | *val | -| clearning.cpp:83:13:83:21 | *... + ... | clearning.cpp:83:5:83:21 | *... = ... | -| clearning.cpp:83:15:83:17 | *val | clearning.cpp:83:5:83:21 | *... = ... | -| clearning.cpp:84:8:84:8 | *s [*val] | clearning.cpp:84:7:84:12 | * ... | -| clearning.cpp:89:18:89:18 | *s [post update] [*val] | clearning.cpp:90:3:90:3 | *s [*val] | -| clearning.cpp:89:20:89:22 | argument_source output argument | clearning.cpp:89:18:89:18 | *s [post update] [*val] | -| clearning.cpp:90:3:90:3 | *s [*val] | clearning.cpp:90:3:90:9 | *... ++ | -| clearning.cpp:90:3:90:3 | *s [*val] | clearning.cpp:90:5:90:7 | **val | -| clearning.cpp:90:3:90:3 | *s [*val] | clearning.cpp:91:8:91:8 | *s [*val] | -| clearning.cpp:90:3:90:3 | *s [post update] [*val] | clearning.cpp:91:8:91:8 | *s [*val] | -| clearning.cpp:90:3:90:9 | *... ++ | clearning.cpp:90:3:90:3 | *s [post update] [*val] | -| clearning.cpp:90:3:90:9 | *... ++ | clearning.cpp:90:3:90:9 | *... ++ | -| clearning.cpp:90:5:90:7 | **val | clearning.cpp:90:3:90:9 | *... ++ | -| clearning.cpp:91:8:91:8 | *s [*val] | clearning.cpp:91:7:91:12 | * ... | -| clearning.cpp:96:18:96:18 | *s [post update] [*val] | clearning.cpp:97:10:97:10 | *s [*val] | -| clearning.cpp:96:20:96:22 | argument_source output argument | clearning.cpp:96:18:96:18 | *s [post update] [*val] | -| clearning.cpp:97:2:97:2 | *s [post update] [*val] | clearning.cpp:98:8:98:8 | *s [*val] | -| clearning.cpp:97:2:97:18 | *... = ... | clearning.cpp:97:2:97:2 | *s [post update] [*val] | -| clearning.cpp:97:10:97:10 | *s [*val] | clearning.cpp:97:10:97:18 | *... + ... | -| clearning.cpp:97:10:97:10 | *s [*val] | clearning.cpp:97:12:97:14 | *val | -| clearning.cpp:97:10:97:18 | *... + ... | clearning.cpp:97:2:97:18 | *... = ... | -| clearning.cpp:97:12:97:14 | *val | clearning.cpp:97:2:97:18 | *... = ... | -| clearning.cpp:98:8:98:8 | *s [*val] | clearning.cpp:98:7:98:12 | * ... | -| clearning.cpp:103:18:103:18 | *s [post update] [*val] | clearning.cpp:104:2:104:2 | *s [*val] | -| clearning.cpp:103:20:103:22 | argument_source output argument | clearning.cpp:103:18:103:18 | *s [post update] [*val] | -| clearning.cpp:104:2:104:2 | *s [*val] | clearning.cpp:104:2:104:8 | *... ++ | -| clearning.cpp:104:2:104:2 | *s [*val] | clearning.cpp:104:4:104:6 | *val | -| clearning.cpp:104:2:104:2 | *s [*val] | clearning.cpp:105:8:105:8 | *s [*val] | -| clearning.cpp:104:2:104:2 | *s [post update] [*val] | clearning.cpp:105:8:105:8 | *s [*val] | -| clearning.cpp:104:2:104:8 | *... ++ | clearning.cpp:104:2:104:2 | *s [post update] [*val] | -| clearning.cpp:104:2:104:8 | *... ++ | clearning.cpp:104:2:104:8 | *... ++ | -| clearning.cpp:104:4:104:6 | *val | clearning.cpp:104:2:104:8 | *... ++ | -| clearning.cpp:105:8:105:8 | *s [*val] | clearning.cpp:105:7:105:12 | * ... | -| clearning.cpp:110:18:110:18 | *s [post update] [*val] | clearning.cpp:111:4:111:4 | *s [*val] | -| clearning.cpp:110:20:110:22 | argument_source output argument | clearning.cpp:110:18:110:18 | *s [post update] [*val] | -| clearning.cpp:111:2:111:8 | *++ ... | clearning.cpp:111:2:111:8 | *++ ... | -| clearning.cpp:111:2:111:8 | *++ ... | clearning.cpp:111:4:111:4 | *s [post update] [*val] | -| clearning.cpp:111:4:111:4 | *s [*val] | clearning.cpp:111:2:111:8 | *++ ... | -| clearning.cpp:111:4:111:4 | *s [*val] | clearning.cpp:111:6:111:8 | *val | -| clearning.cpp:111:4:111:4 | *s [*val] | clearning.cpp:112:8:112:8 | *s [*val] | -| clearning.cpp:111:4:111:4 | *s [post update] [*val] | clearning.cpp:112:8:112:8 | *s [*val] | -| clearning.cpp:111:6:111:8 | *val | clearning.cpp:111:2:111:8 | *++ ... | -| clearning.cpp:112:8:112:8 | *s [*val] | clearning.cpp:112:7:112:12 | * ... | -| clearning.cpp:117:18:117:18 | *s [post update] [*val] | clearning.cpp:118:2:118:2 | *s [*val] | -| clearning.cpp:117:20:117:22 | argument_source output argument | clearning.cpp:117:18:117:18 | *s [post update] [*val] | -| clearning.cpp:118:2:118:2 | *s [*val] | clearning.cpp:118:2:118:11 | *... += ... | -| clearning.cpp:118:2:118:2 | *s [*val] | clearning.cpp:118:4:118:6 | *val | -| clearning.cpp:118:2:118:2 | *s [*val] | clearning.cpp:119:8:119:8 | *s [*val] | -| clearning.cpp:118:2:118:2 | *s [post update] [*val] | clearning.cpp:119:8:119:8 | *s [*val] | -| clearning.cpp:118:2:118:11 | *... += ... | clearning.cpp:118:2:118:2 | *s [post update] [*val] | -| clearning.cpp:118:2:118:11 | *... += ... | clearning.cpp:118:2:118:11 | *... += ... | -| clearning.cpp:118:4:118:6 | *val | clearning.cpp:118:2:118:11 | *... += ... | -| clearning.cpp:119:8:119:8 | *s [*val] | clearning.cpp:119:7:119:12 | * ... | -| clearning.cpp:151:3:151:3 | *s [post update] [val] | clearning.cpp:152:8:152:8 | *s [val] | -| clearning.cpp:151:3:151:22 | ... = ... | clearning.cpp:151:3:151:3 | *s [post update] [val] | -| clearning.cpp:151:11:151:20 | call to user_input | clearning.cpp:151:3:151:22 | ... = ... | -| clearning.cpp:152:8:152:8 | *s [val] | clearning.cpp:152:10:152:12 | val | -| complex.cpp:9:7:9:7 | *this [a_] | complex.cpp:9:20:9:21 | *this [a_] | -| complex.cpp:9:20:9:21 | *this [a_] | complex.cpp:9:20:9:21 | a_ | -| complex.cpp:9:20:9:21 | a_ | complex.cpp:9:7:9:7 | *a | -| complex.cpp:10:7:10:7 | *this [b_] | complex.cpp:10:20:10:21 | *this [b_] | -| complex.cpp:10:20:10:21 | *this [b_] | complex.cpp:10:20:10:21 | b_ | -| complex.cpp:10:20:10:21 | b_ | complex.cpp:10:7:10:7 | *b | -| complex.cpp:11:17:11:17 | a | complex.cpp:11:22:11:27 | ... = ... | -| complex.cpp:11:22:11:27 | ... = ... | complex.cpp:11:22:11:23 | *this [post update] [a_] | -| complex.cpp:12:17:12:17 | b | complex.cpp:12:22:12:27 | ... = ... | -| complex.cpp:12:22:12:27 | ... = ... | complex.cpp:12:22:12:23 | *this [post update] [b_] | -| complex.cpp:40:17:40:17 | *b [inner, f, a_] | complex.cpp:42:8:42:8 | *b [inner, f, a_] | -| complex.cpp:40:17:40:17 | *b [inner, f, b_] | complex.cpp:43:8:43:8 | *b [inner, f, b_] | -| complex.cpp:42:8:42:8 | *b [inner, f, a_] | complex.cpp:42:10:42:14 | *inner [f, a_] | -| complex.cpp:42:10:42:14 | *inner [f, a_] | complex.cpp:42:16:42:16 | *f [a_] | -| complex.cpp:42:16:42:16 | *f [a_] | complex.cpp:9:7:9:7 | *this [a_] | -| complex.cpp:42:16:42:16 | *f [a_] | complex.cpp:42:18:42:18 | call to a | -| complex.cpp:43:8:43:8 | *b [inner, f, b_] | complex.cpp:43:10:43:14 | *inner [f, b_] | -| complex.cpp:43:10:43:14 | *inner [f, b_] | complex.cpp:43:16:43:16 | *f [b_] | -| complex.cpp:43:16:43:16 | *f [b_] | complex.cpp:10:7:10:7 | *this [b_] | -| complex.cpp:43:16:43:16 | *f [b_] | complex.cpp:43:18:43:18 | call to b | -| complex.cpp:53:3:53:4 | *b1 [post update] [inner, f, a_] | complex.cpp:59:7:59:8 | *b1 [inner, f, a_] | -| complex.cpp:53:6:53:10 | *inner [post update] [f, a_] | complex.cpp:53:3:53:4 | *b1 [post update] [inner, f, a_] | -| complex.cpp:53:12:53:12 | setA output argument [a_] | complex.cpp:53:6:53:10 | *inner [post update] [f, a_] | -| complex.cpp:53:19:53:28 | call to user_input | complex.cpp:11:17:11:17 | a | -| complex.cpp:53:19:53:28 | call to user_input | complex.cpp:53:12:53:12 | setA output argument [a_] | -| complex.cpp:54:3:54:4 | *b2 [post update] [inner, f, b_] | complex.cpp:62:7:62:8 | *b2 [inner, f, b_] | -| complex.cpp:54:6:54:10 | *inner [post update] [f, b_] | complex.cpp:54:3:54:4 | *b2 [post update] [inner, f, b_] | -| complex.cpp:54:12:54:12 | setB output argument [b_] | complex.cpp:54:6:54:10 | *inner [post update] [f, b_] | -| complex.cpp:54:19:54:28 | call to user_input | complex.cpp:12:17:12:17 | b | -| complex.cpp:54:19:54:28 | call to user_input | complex.cpp:54:12:54:12 | setB output argument [b_] | -| complex.cpp:55:3:55:4 | *b3 [post update] [inner, f, a_] | complex.cpp:65:7:65:8 | *b3 [inner, f, a_] | -| complex.cpp:55:6:55:10 | *inner [post update] [f, a_] | complex.cpp:55:3:55:4 | *b3 [post update] [inner, f, a_] | -| complex.cpp:55:12:55:12 | setA output argument [a_] | complex.cpp:55:6:55:10 | *inner [post update] [f, a_] | -| complex.cpp:55:19:55:28 | call to user_input | complex.cpp:11:17:11:17 | a | -| complex.cpp:55:19:55:28 | call to user_input | complex.cpp:55:12:55:12 | setA output argument [a_] | -| complex.cpp:56:3:56:4 | *b3 [post update] [inner, f, b_] | complex.cpp:65:7:65:8 | *b3 [inner, f, b_] | -| complex.cpp:56:6:56:10 | *inner [post update] [f, b_] | complex.cpp:56:3:56:4 | *b3 [post update] [inner, f, b_] | -| complex.cpp:56:12:56:12 | setB output argument [b_] | complex.cpp:56:6:56:10 | *inner [post update] [f, b_] | -| complex.cpp:56:19:56:28 | call to user_input | complex.cpp:12:17:12:17 | b | -| complex.cpp:56:19:56:28 | call to user_input | complex.cpp:56:12:56:12 | setB output argument [b_] | -| complex.cpp:59:7:59:8 | *b1 [inner, f, a_] | complex.cpp:40:17:40:17 | *b [inner, f, a_] | -| complex.cpp:62:7:62:8 | *b2 [inner, f, b_] | complex.cpp:40:17:40:17 | *b [inner, f, b_] | -| complex.cpp:65:7:65:8 | *b3 [inner, f, a_] | complex.cpp:40:17:40:17 | *b [inner, f, a_] | -| complex.cpp:65:7:65:8 | *b3 [inner, f, b_] | complex.cpp:40:17:40:17 | *b [inner, f, b_] | -| conflated.cpp:10:3:10:22 | ... = ... | conflated.cpp:10:4:10:5 | *ra [post update] [*p] | -| conflated.cpp:10:4:10:5 | *ra [post update] [*p] | conflated.cpp:11:9:11:10 | *ra [*p] | -| conflated.cpp:10:11:10:20 | call to user_input | conflated.cpp:10:3:10:22 | ... = ... | -| conflated.cpp:11:9:11:10 | *ra [*p] | conflated.cpp:11:8:11:12 | * ... | -| conflated.cpp:19:19:19:21 | argument_source output argument | conflated.cpp:20:8:20:10 | *raw | -| conflated.cpp:29:3:29:4 | *pa [post update] [x] | conflated.cpp:30:8:30:9 | *pa [x] | -| conflated.cpp:29:3:29:22 | ... = ... | conflated.cpp:29:3:29:4 | *pa [post update] [x] | -| conflated.cpp:29:11:29:20 | call to user_input | conflated.cpp:29:3:29:22 | ... = ... | -| conflated.cpp:30:8:30:9 | *pa [x] | conflated.cpp:30:12:30:12 | x | -| conflated.cpp:36:3:36:4 | *pa [post update] [x] | conflated.cpp:37:8:37:9 | *pa [x] | -| conflated.cpp:36:3:36:22 | ... = ... | conflated.cpp:36:3:36:4 | *pa [post update] [x] | -| conflated.cpp:36:11:36:20 | call to user_input | conflated.cpp:36:3:36:22 | ... = ... | -| conflated.cpp:37:8:37:9 | *pa [x] | conflated.cpp:37:12:37:12 | x | -| conflated.cpp:54:3:54:4 | *ll [post update] [*next, y] | conflated.cpp:55:8:55:9 | *ll [*next, y] | -| conflated.cpp:54:3:54:28 | ... = ... | conflated.cpp:54:7:54:10 | *next [post update] [y] | -| conflated.cpp:54:7:54:10 | *next [post update] [y] | conflated.cpp:54:3:54:4 | *ll [post update] [*next, y] | -| conflated.cpp:54:17:54:26 | call to user_input | conflated.cpp:54:3:54:28 | ... = ... | -| conflated.cpp:55:8:55:9 | *ll [*next, y] | conflated.cpp:55:12:55:15 | *next [y] | -| conflated.cpp:55:12:55:15 | *next [y] | conflated.cpp:55:18:55:18 | y | -| conflated.cpp:60:3:60:4 | *ll [post update] [*next, y] | conflated.cpp:61:8:61:9 | *ll [*next, y] | -| conflated.cpp:60:3:60:28 | ... = ... | conflated.cpp:60:7:60:10 | *next [post update] [y] | -| conflated.cpp:60:7:60:10 | *next [post update] [y] | conflated.cpp:60:3:60:4 | *ll [post update] [*next, y] | -| conflated.cpp:60:17:60:26 | call to user_input | conflated.cpp:60:3:60:28 | ... = ... | -| conflated.cpp:61:8:61:9 | *ll [*next, y] | conflated.cpp:61:12:61:15 | *next [y] | -| conflated.cpp:61:12:61:15 | *next [y] | conflated.cpp:61:18:61:18 | y | -| constructors.cpp:18:9:18:9 | *this [a_] | constructors.cpp:18:22:18:23 | *this [a_] | -| constructors.cpp:18:22:18:23 | *this [a_] | constructors.cpp:18:22:18:23 | a_ | -| constructors.cpp:18:22:18:23 | a_ | constructors.cpp:18:9:18:9 | *a | -| constructors.cpp:19:9:19:9 | *this [b_] | constructors.cpp:19:22:19:23 | *this [b_] | -| constructors.cpp:19:22:19:23 | *this [b_] | constructors.cpp:19:22:19:23 | b_ | -| constructors.cpp:19:22:19:23 | b_ | constructors.cpp:19:9:19:9 | *b | -| constructors.cpp:23:13:23:13 | a | constructors.cpp:23:28:23:28 | a | -| constructors.cpp:23:20:23:20 | b | constructors.cpp:23:35:23:35 | b | -| constructors.cpp:23:28:23:28 | a | constructors.cpp:23:5:23:7 | *this [post update] [a_] | -| constructors.cpp:23:35:23:35 | b | constructors.cpp:23:5:23:7 | *this [post update] [b_] | -| constructors.cpp:26:15:26:15 | *f [a_] | constructors.cpp:28:10:28:10 | *f [a_] | -| constructors.cpp:26:15:26:15 | *f [b_] | constructors.cpp:29:10:29:10 | *f [b_] | -| constructors.cpp:28:10:28:10 | *f [a_] | constructors.cpp:18:9:18:9 | *this [a_] | -| constructors.cpp:28:10:28:10 | *f [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:29:10:29:10 | *f [b_] | constructors.cpp:29:12:29:12 | call to b | -| constructors.cpp:34:9:34:9 | call to Foo [a_] | constructors.cpp:40:9:40:9 | *f [a_] | -| constructors.cpp:34:11:34:20 | call to user_input | constructors.cpp:23:13:23:13 | a | -| constructors.cpp:34:11:34:20 | call to user_input | constructors.cpp:34:9:34:9 | call to Foo [a_] | -| constructors.cpp:35:9:35:9 | call to Foo [b_] | constructors.cpp:43:9:43:9 | *g [b_] | -| constructors.cpp:35:14:35:23 | call to user_input | constructors.cpp:23:20:23:20 | b | -| constructors.cpp:35:14:35:23 | call to user_input | constructors.cpp:35:9:35:9 | call to Foo [b_] | -| constructors.cpp:36:9:36:9 | call to Foo [a_] | constructors.cpp:46:9:46:9 | *h [a_] | -| constructors.cpp:36:9:36:9 | call to Foo [b_] | constructors.cpp:46:9:46:9 | *h [b_] | -| constructors.cpp:36:11:36:20 | call to user_input | constructors.cpp:23:13:23:13 | a | -| constructors.cpp:36:11:36:20 | call to user_input | 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:36:25:36:34 | call to user_input | constructors.cpp:36:9:36:9 | call to Foo [b_] | -| constructors.cpp:40:9:40:9 | *f [a_] | constructors.cpp:26:15:26:15 | *f [a_] | -| constructors.cpp:43:9:43:9 | *g [b_] | constructors.cpp:26:15:26:15 | *f [b_] | -| constructors.cpp:46:9:46:9 | *h [a_] | constructors.cpp:26:15:26:15 | *f [a_] | -| constructors.cpp:46:9:46:9 | *h [b_] | constructors.cpp:26:15:26:15 | *f [b_] | -| qualifiers.cpp:9:21:9:25 | value | qualifiers.cpp:9:30:9:44 | ... = ... | -| qualifiers.cpp:9:30:9:44 | ... = ... | qualifiers.cpp:9:30:9:33 | *this [post update] [a] | -| qualifiers.cpp:12:40:12:44 | value | qualifiers.cpp:12:49:12:64 | ... = ... | -| qualifiers.cpp:12:49:12:64 | ... = ... | qualifiers.cpp:12:49:12:53 | *inner [post update] [a] | -| qualifiers.cpp:13:42:13:46 | value | qualifiers.cpp:13:51:13:65 | ... = ... | -| qualifiers.cpp:13:51:13:65 | ... = ... | qualifiers.cpp:13:51:13:55 | *inner [post update] [a] | -| qualifiers.cpp:22:5:22:9 | getInner output argument [*inner, a] | qualifiers.cpp:23:10:23:14 | *outer [*inner, a] | -| qualifiers.cpp:22:5:22:38 | ... = ... | qualifiers.cpp:22:11:22:18 | *call to getInner [post update] [a] | -| qualifiers.cpp:22:11:22:18 | *call to getInner [post update] [a] | qualifiers.cpp:22:5:22:9 | getInner output argument [*inner, a] | -| qualifiers.cpp:22:27:22:36 | call to user_input | qualifiers.cpp:22:5:22:38 | ... = ... | -| qualifiers.cpp:23:10:23:14 | *outer [*inner, a] | qualifiers.cpp:23:16:23:20 | *inner [a] | -| qualifiers.cpp:23:16:23:20 | *inner [a] | qualifiers.cpp:23:23:23:23 | a | -| qualifiers.cpp:27:5:27:9 | getInner output argument [*inner, a] | qualifiers.cpp:28:10:28:14 | *outer [*inner, a] | -| qualifiers.cpp:27:11:27:18 | setA output argument [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:27:28:27:37 | call to user_input | qualifiers.cpp:27:11:27:18 | setA output argument [a] | -| qualifiers.cpp:28:10:28:14 | *outer [*inner, a] | qualifiers.cpp:28:16:28:20 | *inner [a] | -| qualifiers.cpp:28:16:28:20 | *inner [a] | qualifiers.cpp:28:23:28:23 | a | -| qualifiers.cpp:32:17:32:21 | getInner output argument [*inner, a] | qualifiers.cpp:33:10:33:14 | *outer [*inner, a] | -| qualifiers.cpp:32:23:32:30 | pointerSetA output argument [a] | qualifiers.cpp:32:17:32:21 | getInner output argument [*inner, a] | -| qualifiers.cpp:32:35:32:44 | call to user_input | qualifiers.cpp:12:40:12:44 | value | -| qualifiers.cpp:32:35:32:44 | call to user_input | qualifiers.cpp:32:23:32:30 | pointerSetA output argument [a] | -| qualifiers.cpp:33:10:33:14 | *outer [*inner, a] | qualifiers.cpp:33:16:33:20 | *inner [a] | -| qualifiers.cpp:33:16:33:20 | *inner [a] | qualifiers.cpp:33:23:33:23 | a | -| qualifiers.cpp:37:19:37:35 | referenceSetA output argument [a] | qualifiers.cpp:37:20:37:24 | getInner output argument [*inner, a] | -| qualifiers.cpp:37:20:37:24 | getInner output argument [*inner, a] | qualifiers.cpp:38:10:38:14 | *outer [*inner, a] | -| qualifiers.cpp:37:38:37:47 | call to user_input | qualifiers.cpp:13:42:13:46 | value | -| qualifiers.cpp:37:38:37:47 | call to user_input | qualifiers.cpp:37:19:37:35 | referenceSetA output argument [a] | -| qualifiers.cpp:38:10:38:14 | *outer [*inner, a] | qualifiers.cpp:38:16:38:20 | *inner [a] | -| qualifiers.cpp:38:16:38:20 | *inner [a] | qualifiers.cpp:38:23:38:23 | a | -| qualifiers.cpp:42:5:42:40 | ... = ... | qualifiers.cpp:42:6:42:22 | ** ... [post update] [a] | -| qualifiers.cpp:42:6:42:22 | ** ... [post update] [a] | qualifiers.cpp:42:7:42:11 | getInner output argument [*inner, a] | -| qualifiers.cpp:42:7:42:11 | getInner output argument [*inner, a] | qualifiers.cpp:43:10:43:14 | *outer [*inner, a] | -| qualifiers.cpp:42:29:42:38 | call to user_input | qualifiers.cpp:42:5:42:40 | ... = ... | -| qualifiers.cpp:43:10:43:14 | *outer [*inner, a] | qualifiers.cpp:43:16:43:20 | *inner [a] | -| qualifiers.cpp:43:16:43:20 | *inner [a] | qualifiers.cpp:43:23:43:23 | a | -| qualifiers.cpp:47:5:47:42 | ... = ... | qualifiers.cpp:47:15:47:22 | *call to getInner [post update] [a] | -| qualifiers.cpp:47:6:47:11 | getInner output argument [*inner, a] | qualifiers.cpp:48:10:48:14 | *outer [*inner, a] | -| qualifiers.cpp:47:15:47:22 | *call to getInner [post update] [a] | qualifiers.cpp:47:6:47:11 | getInner output argument [*inner, a] | -| qualifiers.cpp:47:31:47:40 | call to user_input | qualifiers.cpp:47:5:47:42 | ... = ... | -| qualifiers.cpp:48:10:48:14 | *outer [*inner, a] | qualifiers.cpp:48:16:48:20 | *inner [a] | -| qualifiers.cpp:48:16:48:20 | *inner [a] | qualifiers.cpp:48:23:48:23 | a | -| realistic.cpp:53:9:53:11 | *foo [post update] [bar, *baz, userInput, bufferLen] | realistic.cpp:61:21:61:23 | *foo [bar, *baz, userInput, bufferLen] | -| realistic.cpp:53:9:53:18 | *access to array [post update] [*baz, userInput, bufferLen] | realistic.cpp:53:9:53:11 | *foo [post update] [bar, *baz, userInput, bufferLen] | -| realistic.cpp:53:9:53:66 | ... = ... | realistic.cpp:53:25:53:33 | *userInput [post update] [bufferLen] | -| realistic.cpp:53:20:53:22 | *baz [post update] [userInput, bufferLen] | realistic.cpp:53:9:53:18 | *access to array [post update] [*baz, userInput, bufferLen] | -| realistic.cpp:53:25:53:33 | *userInput [post update] [bufferLen] | realistic.cpp:53:20:53:22 | *baz [post update] [userInput, bufferLen] | -| realistic.cpp:53:47:53:66 | call to user_input | realistic.cpp:53:9:53:66 | ... = ... | -| realistic.cpp:61:21:61:23 | *foo [bar, *baz, userInput, bufferLen] | realistic.cpp:61:21:61:30 | *access to array [*baz, userInput, bufferLen] | -| realistic.cpp:61:21:61:30 | *access to array [*baz, userInput, bufferLen] | realistic.cpp:61:32:61:34 | *baz [userInput, bufferLen] | -| realistic.cpp:61:32:61:34 | *baz [userInput, bufferLen] | realistic.cpp:61:37:61:45 | *userInput [bufferLen] | -| realistic.cpp:61:37:61:45 | *userInput [bufferLen] | realistic.cpp:61:14:61:55 | bufferLen | -| simple.cpp:18:9:18:9 | *this [a_] | simple.cpp:18:22:18:23 | *this [a_] | -| simple.cpp:18:22:18:23 | *this [a_] | simple.cpp:18:22:18:23 | a_ | -| simple.cpp:18:22:18:23 | a_ | simple.cpp:18:9:18:9 | *a | -| simple.cpp:19:9:19:9 | *this [b_] | simple.cpp:19:22:19:23 | *this [b_] | -| simple.cpp:19:22:19:23 | *this [b_] | simple.cpp:19:22:19:23 | b_ | -| simple.cpp:19:22:19:23 | b_ | simple.cpp:19:9:19:9 | *b | -| simple.cpp:20:19:20:19 | a | simple.cpp:20:24:20:29 | ... = ... | -| simple.cpp:20:24:20:29 | ... = ... | simple.cpp:20:24:20:25 | *this [post update] [a_] | -| simple.cpp:21:19:21:19 | b | simple.cpp:21:24:21:29 | ... = ... | -| simple.cpp:21:24:21:29 | ... = ... | simple.cpp:21:24:21:25 | *this [post update] [b_] | -| simple.cpp:26:15:26:15 | *f [a_] | simple.cpp:28:10:28:10 | *f [a_] | -| simple.cpp:26:15:26:15 | *f [b_] | simple.cpp:29:10:29:10 | *f [b_] | -| simple.cpp:28:10:28:10 | *f [a_] | simple.cpp:18:9:18:9 | *this [a_] | -| simple.cpp:28:10:28:10 | *f [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:29:10:29:10 | *f [b_] | simple.cpp:29:12:29:12 | call to b | -| simple.cpp:39:5:39:5 | setA output argument [a_] | simple.cpp:45:9:45:9 | *f [a_] | -| simple.cpp:39:12:39:21 | call to user_input | simple.cpp:20:19:20:19 | a | -| simple.cpp:39:12:39:21 | call to user_input | simple.cpp:39:5:39:5 | setA output argument [a_] | -| simple.cpp:40:5:40:5 | setB output argument [b_] | simple.cpp:48:9:48:9 | *g [b_] | -| simple.cpp:40:12:40:21 | call to user_input | simple.cpp:21:19:21:19 | b | -| simple.cpp:40:12:40:21 | call to user_input | simple.cpp:40:5:40:5 | setB output argument [b_] | -| simple.cpp:41:5:41:5 | setA output argument [a_] | simple.cpp:51:9:51:9 | *h [a_] | -| simple.cpp:41:12:41:21 | call to user_input | simple.cpp:20:19:20:19 | a | -| simple.cpp:41:12:41:21 | call to user_input | simple.cpp:41:5:41:5 | setA output argument [a_] | -| simple.cpp:42:5:42:5 | setB output argument [b_] | simple.cpp:51:9:51:9 | *h [b_] | -| simple.cpp:42:12:42:21 | call to user_input | simple.cpp:21:19:21:19 | b | -| simple.cpp:42:12:42:21 | call to user_input | simple.cpp:42:5:42:5 | setB output argument [b_] | -| simple.cpp:45:9:45:9 | *f [a_] | simple.cpp:26:15:26:15 | *f [a_] | -| simple.cpp:48:9:48:9 | *g [b_] | simple.cpp:26:15:26:15 | *f [b_] | -| simple.cpp:51:9:51:9 | *h [a_] | simple.cpp:26:15:26:15 | *f [a_] | -| simple.cpp:51:9:51:9 | *h [b_] | simple.cpp:26:15:26:15 | *f [b_] | -| simple.cpp:65:5:65:5 | *a [post update] [i] | simple.cpp:67:10:67:11 | *a2 [i] | -| simple.cpp:65:5:65:22 | ... = ... | simple.cpp:65:5:65:5 | *a [post update] [i] | -| simple.cpp:65:11:65:20 | call to user_input | simple.cpp:65:5:65:22 | ... = ... | -| simple.cpp:67:10:67:11 | *a2 [i] | simple.cpp:67:13:67:13 | i | -| simple.cpp:78:9:78:15 | *this [f2, f1] | simple.cpp:79:16:79:17 | *this [f2, f1] | -| simple.cpp:79:16:79:17 | *f2 [f1] | simple.cpp:79:19:79:20 | f1 | -| simple.cpp:79:16:79:17 | *this [f2, f1] | simple.cpp:79:16:79:17 | *f2 [f1] | -| simple.cpp:79:19:79:20 | f1 | simple.cpp:78:9:78:15 | *getf2f1 | -| simple.cpp:83:9:83:10 | *f2 [post update] [f1] | simple.cpp:83:9:83:10 | *this [post update] [f2, f1] | -| simple.cpp:83:9:83:10 | *this [post update] [f2, f1] | simple.cpp:84:14:84:20 | *this [f2, f1] | -| simple.cpp:83:9:83:28 | ... = ... | simple.cpp:83:9:83:10 | *f2 [post update] [f1] | -| simple.cpp:83:17:83:26 | call to user_input | simple.cpp:83:9:83:28 | ... = ... | -| simple.cpp:84:14:84:20 | *this [f2, f1] | simple.cpp:78:9:78:15 | *this [f2, f1] | -| simple.cpp:84:14:84:20 | *this [f2, f1] | simple.cpp:84:14:84:20 | call to getf2f1 | -| simple.cpp:92:5:92:5 | *a [post update] [i] | simple.cpp:94:10:94:11 | *a2 [i] | -| simple.cpp:92:5:92:22 | ... = ... | simple.cpp:92:5:92:5 | *a [post update] [i] | -| simple.cpp:92:11:92:20 | call to user_input | simple.cpp:92:5:92:22 | ... = ... | -| simple.cpp:94:10:94:11 | *a2 [i] | simple.cpp:94:13:94:13 | i | -| simple.cpp:103:24:103:24 | x | simple.cpp:104:14:104:14 | x | -| simple.cpp:108:17:108:26 | call to user_input | simple.cpp:109:43:109:43 | x | -| simple.cpp:109:43:109:43 | x | simple.cpp:103:24:103:24 | x | -| struct_init.c:14:24:14:25 | *ab [a] | struct_init.c:15:8:15:9 | *ab [a] | -| struct_init.c:15:8:15:9 | *ab [a] | struct_init.c:15:12:15:12 | a | -| struct_init.c:20:13:20:14 | *definition of ab [a] | struct_init.c:22:8:22:9 | *ab [a] | -| struct_init.c:20:13:20:14 | *definition of ab [a] | struct_init.c:24:10:24:12 | *& ... [a] | -| struct_init.c:20:13:20:14 | *definition of ab [a] | struct_init.c:28:5:28:7 | *& ... [a] | -| struct_init.c:20:13:20:14 | *definition of ab [post update] [a] | struct_init.c:20:13:20:14 | *definition of ab [a] | -| struct_init.c:20:20:20:29 | call to user_input | struct_init.c:20:13:20:14 | *definition of ab [post update] [a] | -| struct_init.c:20:20:20:29 | call to user_input | struct_init.c:20:20:20:29 | call to user_input | -| struct_init.c:22:8:22:9 | *ab [a] | struct_init.c:22:11:22:11 | a | -| struct_init.c:24:10:24:12 | *& ... [a] | struct_init.c:14:24:14:25 | *ab [a] | -| struct_init.c:26:16:26:20 | *definition of outer [nestedAB, a] | struct_init.c:31:8:31:12 | *outer [nestedAB, a] | -| struct_init.c:26:16:26:20 | *definition of outer [nestedAB, a] | struct_init.c:36:11:36:15 | *outer [nestedAB, a] | -| struct_init.c:26:16:26:20 | *definition of outer [post update] [*pointerAB, a] | struct_init.c:33:8:33:12 | *outer [*pointerAB, a] | -| struct_init.c:26:16:26:20 | *definition of outer [post update] [nestedAB, a] | struct_init.c:26:16:26:20 | *definition of outer [nestedAB, a] | -| struct_init.c:26:23:29:3 | *{...} [post update] [a] | struct_init.c:26:16:26:20 | *definition of outer [post update] [nestedAB, a] | -| struct_init.c:27:7:27:16 | call to user_input | struct_init.c:26:23:29:3 | *{...} [post update] [a] | -| struct_init.c:27:7:27:16 | call to user_input | struct_init.c:27:7:27:16 | call to user_input | -| struct_init.c:28:5:28:7 | *& ... [a] | struct_init.c:26:16:26:20 | *definition of outer [post update] [*pointerAB, a] | -| struct_init.c:31:8:31:12 | *outer [nestedAB, a] | struct_init.c:31:14:31:21 | *nestedAB [a] | -| struct_init.c:31:14:31:21 | *nestedAB [a] | struct_init.c:31:23:31:23 | a | -| struct_init.c:33:8:33:12 | *outer [*pointerAB, a] | struct_init.c:33:14:33:22 | *pointerAB [a] | -| struct_init.c:33:14:33:22 | *pointerAB [a] | struct_init.c:33:25:33:25 | a | -| struct_init.c:36:10:36:24 | *& ... [a] | struct_init.c:14:24:14:25 | *ab [a] | -| struct_init.c:36:11:36:15 | *outer [nestedAB, a] | struct_init.c:36:10:36:24 | *& ... [a] | -| struct_init.c:40:13:40:14 | *definition of ab [a] | struct_init.c:43:5:43:7 | *& ... [a] | -| struct_init.c:40:13:40:14 | *definition of ab [post update] [a] | struct_init.c:40:13:40:14 | *definition of ab [a] | -| struct_init.c:40:20:40:29 | call to user_input | struct_init.c:40:13:40:14 | *definition of ab [post update] [a] | -| struct_init.c:40:20:40:29 | call to user_input | struct_init.c:40:20:40:29 | call to user_input | -| struct_init.c:41:16:41:20 | *definition of outer [post update] [*pointerAB, a] | struct_init.c:46:10:46:14 | *outer [*pointerAB, a] | -| struct_init.c:43:5:43:7 | *& ... [a] | struct_init.c:41:16:41:20 | *definition of outer [post update] [*pointerAB, a] | -| struct_init.c:46:10:46:14 | *outer [*pointerAB, a] | struct_init.c:46:16:46:24 | *pointerAB [a] | -| struct_init.c:46:16:46:24 | *pointerAB [a] | struct_init.c:14:24:14:25 | *ab [a] | +| A.cpp:23:10:23:10 | c | A.cpp:25:7:25:17 | ... = ... | 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: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 | | +| A.cpp:28:29:28:29 | c | A.cpp:28:8:28:10 | *get | provenance | | +| A.cpp:29:23:29:23 | c | A.cpp:31:20:31:20 | c | provenance | | +| A.cpp:31:14:31:21 | call to B [c] | A.cpp:29:15:29:18 | **make [c] | provenance | | +| A.cpp:31:20:31:20 | c | A.cpp:23:10:23:10 | c | provenance | | +| A.cpp:31:20:31:20 | c | A.cpp:31:14:31:21 | call to B [c] | provenance | | +| A.cpp:41:5:41:6 | insert output argument | A.cpp:43:10:43:12 | *& ... | provenance | | +| A.cpp:41:15:41:21 | new | A.cpp:41:5:41:6 | insert output argument | provenance | | +| A.cpp:47:12:47:18 | new | A.cpp:48:20:48:20 | c | provenance | | +| A.cpp:48:12:48:18 | *call to make [c] | A.cpp:49:10:49:10 | *b [c] | provenance | | +| A.cpp:48:20:48:20 | c | A.cpp:29:23:29:23 | c | provenance | | +| A.cpp:48:20:48:20 | c | A.cpp:48:12:48:18 | *call to make [c] | provenance | | +| A.cpp:49:10:49:10 | *b [c] | A.cpp:49:10:49:13 | c | provenance | | +| A.cpp:55:5:55:5 | set output argument [c] | A.cpp:56:10:56:10 | *b [c] | provenance | | +| A.cpp:55:12:55:19 | new | A.cpp:27:17:27:17 | c | provenance | | +| A.cpp:55:12:55:19 | new | A.cpp:55:5:55:5 | set output argument [c] | provenance | | +| A.cpp:56:10:56:10 | *b [c] | A.cpp:28:8:28:10 | *this [c] | provenance | | +| A.cpp:56:10:56:10 | *b [c] | A.cpp:56:10:56:17 | call to get | provenance | | +| A.cpp:57:11:57:24 | *new [c] | A.cpp:28:8:28:10 | *this [c] | provenance | | +| A.cpp:57:11:57:24 | *new [c] | A.cpp:57:10:57:32 | call to get | provenance | | +| A.cpp:57:11:57:24 | call to B [c] | A.cpp:57:11:57:24 | *new [c] | provenance | | +| A.cpp:57:17:57:23 | new | A.cpp:23:10:23:10 | c | provenance | | +| A.cpp:57:17:57:23 | new | A.cpp:57:11:57:24 | call to B [c] | provenance | | +| A.cpp:57:17:57:23 | new | A.cpp:57:17:57:23 | new | provenance | | +| A.cpp:64:10:64:15 | *call to setOnB [c] | A.cpp:66:10:66:11 | *b2 [c] | provenance | | +| A.cpp:64:21:64:28 | new | A.cpp:64:10:64:15 | *call to setOnB [c] | provenance | | +| A.cpp:64:21:64:28 | new | A.cpp:85:26:85:26 | c | provenance | | +| A.cpp:66:10:66:11 | *b2 [c] | A.cpp:66:10:66:14 | c | provenance | | +| A.cpp:73:10:73:19 | *call to setOnBWrap [c] | A.cpp:75:10:75:11 | *b2 [c] | provenance | | +| A.cpp:73:25:73:32 | new | A.cpp:73:10:73:19 | *call to setOnBWrap [c] | provenance | | +| A.cpp:73:25:73:32 | new | A.cpp:78:27:78:27 | c | provenance | | +| A.cpp:75:10:75:11 | *b2 [c] | A.cpp:75:10:75:14 | c | provenance | | +| A.cpp:78:27:78:27 | c | A.cpp:81:21:81:21 | c | provenance | | +| A.cpp:81:10:81:15 | *call to setOnB [c] | A.cpp:78:6:78:15 | **setOnBWrap [c] | provenance | | +| A.cpp:81:21:81:21 | c | A.cpp:81:10:81:15 | *call to setOnB [c] | provenance | | +| A.cpp:81:21:81:21 | c | A.cpp:85:26:85:26 | c | provenance | | +| A.cpp:85:26:85:26 | c | A.cpp:90:15:90:15 | c | provenance | | +| A.cpp:90:7:90:8 | set output argument [c] | A.cpp:85:9:85:14 | **setOnB [c] | provenance | | +| A.cpp:90:15:90:15 | c | A.cpp:27:17:27:17 | c | provenance | | +| A.cpp:90:15:90:15 | c | A.cpp:90:7:90:8 | set output argument [c] | provenance | | +| A.cpp:98:12:98:18 | new | A.cpp:100:5:100:13 | ... = ... | provenance | | +| A.cpp:100:5:100:6 | *c1 [post update] [a] | A.cpp:101:8:101:9 | *c1 [a] | provenance | | +| A.cpp:100:5:100:13 | ... = ... | A.cpp:100:5:100:6 | *c1 [post update] [a] | provenance | | +| A.cpp:101:8:101:9 | *c1 [a] | A.cpp:103:14:103:14 | *c [a] | provenance | | +| A.cpp:103:14:103:14 | *c [a] | A.cpp:107:12:107:13 | *c1 [a] | provenance | | +| 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:12:107:16 | a | provenance | | +| A.cpp:120:12:120:13 | *c1 [a] | A.cpp:120:12:120:16 | a | provenance | | +| A.cpp:126:5:126:5 | set output argument [c] | A.cpp:131:8:131:8 | f7 output argument [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:13:140:13 | b | A.cpp:143:7:143:31 | ... = ... | provenance | | +| A.cpp:142:7:142:7 | *b [post update] [c] | A.cpp:143:7:143:31 | *... = ... [c] | provenance | | +| A.cpp:142:7:142:7 | *b [post update] [c] | A.cpp:151:18:151:18 | D output argument [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:151:12:151:24 | call to D [*b, c] | provenance | | +| A.cpp:143:7:143:10 | *this [post update] [b] | A.cpp:151:12:151:24 | call to D [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 | | +| A.cpp:143:25:143:31 | new | A.cpp:143:7:143:31 | ... = ... | provenance | | +| A.cpp:150:12:150:18 | new | A.cpp:151:18:151:18 | b | provenance | | +| A.cpp:151:12:151:24 | call to D [*b, c] | A.cpp:153:10:153:10 | *d [*b, c] | provenance | | +| A.cpp:151:12:151:24 | call to D [b] | A.cpp:152:10:152:10 | *d [b] | provenance | | +| A.cpp:151:18:151:18 | D output argument [c] | A.cpp:154:10:154:10 | *b [c] | provenance | | +| A.cpp:151:18:151:18 | b | A.cpp:140:13:140:13 | b | provenance | | +| A.cpp:151:18:151:18 | b | A.cpp:151:12:151:24 | call to D [b] | provenance | | +| A.cpp:152:10:152:10 | *d [b] | A.cpp:152:10:152:13 | b | provenance | | +| A.cpp:153:10:153:10 | *d [*b, c] | A.cpp:153:13:153:13 | *b [c] | provenance | | +| A.cpp:153:13:153:13 | *b [c] | A.cpp:153:10:153:16 | c | provenance | | +| A.cpp:154:10:154:10 | *b [c] | A.cpp:154:10:154:13 | c | provenance | | +| A.cpp:159:12:159:18 | new | A.cpp:160:29:160:29 | b | provenance | | +| A.cpp:160:18:160:60 | call to MyList [head] | A.cpp:161:38:161:39 | *l1 [head] | provenance | | +| A.cpp:160:29:160:29 | b | A.cpp:160:18:160:60 | call to MyList [head] | provenance | | +| A.cpp:160:29:160:29 | b | A.cpp:181:15:181:21 | newHead | provenance | | +| A.cpp:161:18:161:40 | call to MyList [*next, head] | A.cpp:162:38:162:39 | *l2 [*next, head] | provenance | | +| A.cpp:161:38:161:39 | *l1 [head] | A.cpp:161:18:161:40 | call to MyList [*next, head] | provenance | | +| A.cpp:161:38:161:39 | *l1 [head] | A.cpp:181:32:181:35 | *next [head] | provenance | | +| A.cpp:162:18:162:40 | call to MyList [*next, *next, head] | A.cpp:165:10:165:11 | *l3 [*next, *next, head] | provenance | | +| A.cpp:162:18:162:40 | call to MyList [*next, *next, head] | A.cpp:167:44:167:44 | *l [*next, *next, head] | provenance | | +| A.cpp:162:38:162:39 | *l2 [*next, head] | A.cpp:162:18:162:40 | call to MyList [*next, *next, head] | provenance | | +| A.cpp:162:38:162:39 | *l2 [*next, head] | A.cpp:181:32:181:35 | *next [*next, head] | provenance | | +| A.cpp:165:10:165:11 | *l3 [*next, *next, head] | A.cpp:165:14:165:17 | *next [*next, head] | provenance | | +| A.cpp:165:14:165:17 | *next [*next, head] | A.cpp:165:20:165:23 | *next [head] | provenance | | +| A.cpp:165:20:165:23 | *next [head] | A.cpp:165:10:165:29 | head | provenance | | +| A.cpp:167:44:167:44 | *l [*next, *next, head] | A.cpp:167:47:167:50 | *next [*next, head] | provenance | | +| A.cpp:167:44:167:44 | *l [*next, head] | A.cpp:167:47:167:50 | *next [head] | provenance | | +| A.cpp:167:47:167:50 | *next [*next, head] | A.cpp:167:44:167:44 | *l [*next, head] | provenance | | +| A.cpp:167:47:167:50 | *next [head] | A.cpp:169:12:169:12 | *l [head] | provenance | | +| A.cpp:169:12:169:12 | *l [head] | A.cpp:169:12:169:18 | head | provenance | | +| 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:20 | ... = ... | A.cpp:183:7:183:10 | *this [post update] [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:7:25:7:25 | e | provenance | | +| B.cpp:7:16:7:35 | call to Box1 [elem1] | B.cpp:8:25:8:26 | *b1 [elem1] | provenance | | +| B.cpp:7:25:7:25 | e | B.cpp:7:16:7:35 | call to Box1 [elem1] | provenance | | +| B.cpp:7:25:7:25 | e | B.cpp:33:16:33:17 | e1 | provenance | | +| B.cpp:8:16:8:27 | call to Box2 [*box1, elem1] | B.cpp:9:10:9:11 | *b2 [*box1, elem1] | provenance | | +| B.cpp:8:25:8:26 | *b1 [elem1] | B.cpp:8:16:8:27 | call to Box2 [*box1, elem1] | provenance | | +| B.cpp:8:25:8:26 | *b1 [elem1] | B.cpp:44:16:44:17 | *b1 [elem1] | provenance | | +| B.cpp:9:10:9:11 | *b2 [*box1, elem1] | B.cpp:9:14:9:17 | *box1 [elem1] | provenance | | +| B.cpp:9:14:9:17 | *box1 [elem1] | B.cpp:9:10:9:24 | elem1 | provenance | | +| B.cpp:15:15:15:27 | new | B.cpp:16:37:16:37 | e | provenance | | +| B.cpp:16:16:16:38 | call to Box1 [elem2] | B.cpp:17:25:17:26 | *b1 [elem2] | provenance | | +| B.cpp:16:37:16:37 | e | B.cpp:16:16:16:38 | call to Box1 [elem2] | provenance | | +| B.cpp:16:37:16:37 | e | B.cpp:33:26:33:27 | e2 | provenance | | +| B.cpp:17:16:17:27 | call to Box2 [*box1, elem2] | B.cpp:19:10:19:11 | *b2 [*box1, elem2] | provenance | | +| B.cpp:17:25:17:26 | *b1 [elem2] | B.cpp:17:16:17:27 | call to Box2 [*box1, elem2] | provenance | | +| B.cpp:17:25:17:26 | *b1 [elem2] | B.cpp:44:16:44:17 | *b1 [elem2] | provenance | | +| B.cpp:19:10:19:11 | *b2 [*box1, elem2] | B.cpp:19:14:19:17 | *box1 [elem2] | provenance | | +| 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:22 | ... = ... | B.cpp:35:7:35:10 | *this [post update] [elem1] | 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: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 [post update] [s1] | C.cpp:18:12:18:18 | call to C [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:18:12:18:18 | call to C [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 | | +| C.cpp:27:8:27:11 | *this [s3] | C.cpp:31:10:31:11 | *this [s3] | provenance | | +| C.cpp:29:10:29:11 | *this [s1] | C.cpp:29:10:29:11 | s1 | provenance | | +| C.cpp:31:10:31:11 | *this [s3] | C.cpp:31:10:31:11 | s3 | provenance | | +| 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:10:30:10:33 | elem | D.cpp:10:11:10:17 | *getElem | provenance | | +| D.cpp:11:24:11:24 | e | D.cpp:11:29:11:36 | ... = ... | 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 [elem] | D.cpp:17:11:17:17 | **getBox1 [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 | | +| D.cpp:22:10:22:11 | *b2 [*box, elem] | D.cpp:22:14:22:20 | *call to getBox1 [elem] | provenance | | +| D.cpp:22:14:22:20 | *call to getBox1 [elem] | D.cpp:10:11:10:17 | *this [elem] | provenance | | +| D.cpp:22:14:22:20 | *call to getBox1 [elem] | D.cpp:22:10:22:33 | call to getElem | provenance | | +| D.cpp:28:15:28:24 | new | D.cpp:30:5:30:20 | ... = ... | provenance | | +| D.cpp:30:5:30:5 | *b [post update] [*box, elem] | D.cpp:31:14:31:14 | *b [*box, elem] | provenance | | +| D.cpp:30:5:30:20 | ... = ... | D.cpp:30:8:30:10 | *box [post update] [elem] | provenance | | +| D.cpp:30:8:30:10 | *box [post update] [elem] | D.cpp:30:5:30:5 | *b [post update] [*box, elem] | provenance | | +| D.cpp:31:14:31:14 | *b [*box, elem] | D.cpp:21:30:21:31 | *b2 [*box, elem] | provenance | | +| D.cpp:35:15:35:24 | new | D.cpp:37:21:37:21 | e | provenance | | +| D.cpp:37:5:37:5 | *b [post update] [*box, elem] | D.cpp:38:14:38:14 | *b [*box, elem] | provenance | | +| D.cpp:37:8:37:10 | setElem output argument [elem] | D.cpp:37:5:37:5 | *b [post update] [*box, elem] | provenance | | +| D.cpp:37:21:37:21 | e | D.cpp:11:24:11:24 | e | provenance | | +| D.cpp:37:21:37:21 | e | D.cpp:37:8:37:10 | setElem output argument [elem] | provenance | | +| D.cpp:38:14:38:14 | *b [*box, elem] | D.cpp:21:30:21:31 | *b2 [*box, elem] | provenance | | +| 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: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 | 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: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 | | +| D.cpp:56:15:56:24 | new | D.cpp:58:5:58:27 | ... = ... | provenance | | +| D.cpp:58:5:58:12 | *boxfield [post update] [*box, elem] | D.cpp:58:5:58:12 | *this [post update] [*boxfield, *box, elem] | provenance | | +| D.cpp:58:5:58:12 | *this [post update] [*boxfield, *box, elem] | D.cpp:59:5:59:7 | *this [*boxfield, *box, elem] | provenance | | +| D.cpp:58:5:58:27 | ... = ... | D.cpp:58:15:58:17 | *box [post update] [elem] | provenance | | +| D.cpp:58:15:58:17 | *box [post update] [elem] | D.cpp:58:5:58:12 | *boxfield [post update] [*box, elem] | provenance | | +| D.cpp:59:5:59:7 | *this [*boxfield, *box, elem] | D.cpp:63:8:63:10 | *this [*boxfield, *box, elem] | provenance | | +| D.cpp:63:8:63:10 | *this [*boxfield, *box, elem] | D.cpp:64:10:64:17 | *this [*boxfield, *box, elem] | provenance | | +| D.cpp:64:10:64:17 | *boxfield [*box, elem] | D.cpp:64:20:64:22 | *box [elem] | provenance | | +| D.cpp:64:10:64:17 | *this [*boxfield, *box, elem] | D.cpp:64:10:64:17 | *boxfield [*box, elem] | provenance | | +| D.cpp:64:20:64:22 | *box [elem] | D.cpp:64:10:64:28 | elem | provenance | | +| E.cpp:19:27:19:27 | *p [data, *buffer] | E.cpp:21:10:21:10 | *p [data, *buffer] | provenance | | +| E.cpp:21:10:21:10 | *p [data, *buffer] | E.cpp:21:13:21:16 | *data [*buffer] | provenance | | +| E.cpp:21:13:21:16 | *data [*buffer] | E.cpp:21:18:21:23 | *buffer | provenance | | +| E.cpp:28:21:28:23 | argument_source output argument | E.cpp:31:10:31:12 | *raw | provenance | | +| E.cpp:29:21:29:21 | *b [post update] [*buffer] | E.cpp:32:10:32:10 | *b [*buffer] | provenance | | +| E.cpp:29:21:29:29 | argument_source output argument | E.cpp:29:21:29:21 | *b [post update] [*buffer] | provenance | | +| E.cpp:30:21:30:21 | *p [post update] [data, *buffer] | E.cpp:33:18:33:19 | *& ... [data, *buffer] | provenance | | +| E.cpp:30:21:30:33 | argument_source output argument | E.cpp:30:23:30:26 | *data [post update] [*buffer] | provenance | | +| 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:9:3:9:3 | *s [post update] [m1] | aliasing.cpp:25:17:25:19 | pointerSetter output argument [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:13:3:13:3 | *s [post update] [m1] | aliasing.cpp:26:19:26:20 | referenceSetter output argument [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 | | +| aliasing.cpp:25:17:25:19 | pointerSetter output argument [m1] | aliasing.cpp:29:8:29:9 | *s1 [m1] | provenance | | +| aliasing.cpp:26:19:26:20 | referenceSetter output argument [m1] | aliasing.cpp:30:8:30:9 | *s2 [m1] | provenance | | +| aliasing.cpp:29:8:29:9 | *s1 [m1] | aliasing.cpp:29:11:29:12 | m1 | provenance | | +| aliasing.cpp:30:8:30:9 | *s2 [m1] | aliasing.cpp:30:11:30:12 | m1 | provenance | | +| aliasing.cpp:60:3:60:4 | *s2 [post update] [m1] | aliasing.cpp:62:8:62:12 | *copy2 [m1] | provenance | | +| aliasing.cpp:60:3:60:22 | ... = ... | aliasing.cpp:60:3:60:4 | *s2 [post update] [m1] | provenance | | +| aliasing.cpp:60:11:60:20 | call to user_input | aliasing.cpp:60:3:60:22 | ... = ... | provenance | | +| aliasing.cpp:62:8:62:12 | *copy2 [m1] | aliasing.cpp:62:14:62:15 | m1 | provenance | | +| aliasing.cpp:92:3:92:3 | *w [post update] [s, m1] | aliasing.cpp:93:8:93:8 | *w [s, m1] | provenance | | +| aliasing.cpp:92:3:92:23 | ... = ... | aliasing.cpp:92:5:92:5 | *s [post update] [m1] | provenance | | +| aliasing.cpp:92:5:92:5 | *s [post update] [m1] | aliasing.cpp:92:3:92:3 | *w [post update] [s, m1] | provenance | | +| aliasing.cpp:92:12:92:21 | call to user_input | aliasing.cpp:92:3:92:23 | ... = ... | provenance | | +| aliasing.cpp:93:8:93:8 | *w [s, m1] | aliasing.cpp:93:10:93:10 | *s [m1] | provenance | | +| aliasing.cpp:93:10:93:10 | *s [m1] | aliasing.cpp:93:12:93:13 | m1 | provenance | | +| aliasing.cpp:98:3:98:3 | *s [post update] [m1] | aliasing.cpp:101:14:101:19 | *s_copy [m1] | provenance | | +| aliasing.cpp:98:3:98:21 | ... = ... | aliasing.cpp:98:3:98:3 | *s [post update] [m1] | provenance | | +| aliasing.cpp:98:10:98:19 | call to user_input | aliasing.cpp:98:3:98:21 | ... = ... | provenance | | +| aliasing.cpp:101:13:101:22 | *& ... | aliasing.cpp:102:8:102:10 | * ... | provenance | | +| aliasing.cpp:101:14:101:19 | *s_copy [m1] | aliasing.cpp:101:13:101:22 | *& ... | provenance | | +| aliasing.cpp:105:23:105:24 | *pa | aliasing.cpp:121:15:121:16 | taint_a_ptr output argument | provenance | | +| aliasing.cpp:105:23:105:24 | *pa | aliasing.cpp:126:15:126:20 | taint_a_ptr output argument | provenance | | +| aliasing.cpp:105:23:105:24 | *pa | aliasing.cpp:131:15:131:16 | taint_a_ptr output argument | provenance | | +| aliasing.cpp:105:23:105:24 | *pa | aliasing.cpp:136:15:136:17 | taint_a_ptr output argument | provenance | | +| aliasing.cpp:105:23:105:24 | *pa | aliasing.cpp:141:17:141:20 | taint_a_ptr output argument | provenance | | +| aliasing.cpp:105:23:105:24 | *pa | aliasing.cpp:158:15:158:20 | taint_a_ptr output argument | provenance | | +| aliasing.cpp:105:23:105:24 | *pa | aliasing.cpp:164:15:164:20 | taint_a_ptr output argument | provenance | | +| aliasing.cpp:105:23:105:24 | *pa | aliasing.cpp:175:15:175:22 | taint_a_ptr output argument | provenance | | +| aliasing.cpp:105:23:105:24 | *pa | aliasing.cpp:187:15:187:22 | taint_a_ptr output argument | provenance | | +| aliasing.cpp:105:23:105:24 | *pa | aliasing.cpp:200:15:200:24 | taint_a_ptr output argument | provenance | | +| aliasing.cpp:106:9:106:18 | call to user_input | aliasing.cpp:105:23:105:24 | *pa | provenance | | +| aliasing.cpp:121:15:121:16 | taint_a_ptr output argument | aliasing.cpp:122:8:122:12 | access to array | provenance | | +| aliasing.cpp:126:15:126:20 | taint_a_ptr output argument | aliasing.cpp:127:8:127:16 | * ... | provenance | | +| aliasing.cpp:131:15:131:16 | taint_a_ptr output argument | aliasing.cpp:132:8:132:14 | * ... | provenance | | +| aliasing.cpp:136:15:136:17 | taint_a_ptr output argument | aliasing.cpp:137:8:137:11 | * ... | provenance | | +| aliasing.cpp:141:15:141:15 | *s [post update] [*data] | aliasing.cpp:143:8:143:8 | *s [*data] | provenance | | +| aliasing.cpp:141:17:141:20 | taint_a_ptr output argument | aliasing.cpp:141:15:141:15 | *s [post update] [*data] | provenance | | +| aliasing.cpp:143:8:143:8 | *s [*data] | aliasing.cpp:143:8:143:16 | access to array | provenance | | +| aliasing.cpp:143:8:143:8 | *s [*data] | aliasing.cpp:143:10:143:13 | *data | provenance | | +| aliasing.cpp:143:10:143:13 | *data | aliasing.cpp:143:8:143:16 | access to array | provenance | | +| aliasing.cpp:158:15:158:15 | *s [post update] [data] | aliasing.cpp:159:9:159:9 | *s [data] | provenance | | +| aliasing.cpp:158:15:158:20 | taint_a_ptr output argument | aliasing.cpp:158:15:158:15 | *s [post update] [data] | provenance | | +| aliasing.cpp:159:9:159:9 | *s [data] | aliasing.cpp:159:8:159:14 | * ... | provenance | | +| aliasing.cpp:164:15:164:15 | *s [post update] [data] | aliasing.cpp:165:8:165:8 | *s [data] | provenance | | +| aliasing.cpp:164:15:164:20 | taint_a_ptr output argument | aliasing.cpp:164:15:164:15 | *s [post update] [data] | provenance | | +| aliasing.cpp:165:8:165:8 | *s [data] | aliasing.cpp:165:8:165:16 | access to array | provenance | | +| aliasing.cpp:175:15:175:22 | taint_a_ptr output argument | aliasing.cpp:175:19:175:19 | *s [post update] [m1] | provenance | | +| aliasing.cpp:175:16:175:17 | *s2 [post update] [s, m1] | aliasing.cpp:176:8:176:9 | *s2 [s, m1] | provenance | | +| aliasing.cpp:175:19:175:19 | *s [post update] [m1] | aliasing.cpp:175:16:175:17 | *s2 [post update] [s, m1] | provenance | | +| aliasing.cpp:176:8:176:9 | *s2 [s, m1] | aliasing.cpp:176:11:176:11 | *s [m1] | provenance | | +| aliasing.cpp:176:11:176:11 | *s [m1] | aliasing.cpp:176:13:176:14 | m1 | provenance | | +| aliasing.cpp:187:15:187:22 | taint_a_ptr output argument | aliasing.cpp:187:19:187:19 | *s [post update] [m1] | provenance | | +| aliasing.cpp:187:16:187:17 | *s2 [post update] [s, m1] | aliasing.cpp:189:8:189:11 | *s2_2 [s, m1] | provenance | | +| aliasing.cpp:187:19:187:19 | *s [post update] [m1] | aliasing.cpp:187:16:187:17 | *s2 [post update] [s, m1] | provenance | | +| aliasing.cpp:189:8:189:11 | *s2_2 [s, m1] | aliasing.cpp:189:13:189:13 | *s [m1] | provenance | | +| aliasing.cpp:189:13:189:13 | *s [m1] | aliasing.cpp:189:15:189:16 | m1 | provenance | | +| aliasing.cpp:200:15:200:24 | taint_a_ptr output argument | aliasing.cpp:200:21:200:21 | *s [post update] [m1] | provenance | | +| aliasing.cpp:200:16:200:18 | *ps2 [post update] [s, m1] | aliasing.cpp:201:8:201:10 | *ps2 [s, m1] | provenance | | +| aliasing.cpp:200:21:200:21 | *s [post update] [m1] | aliasing.cpp:200:16:200:18 | *ps2 [post update] [s, m1] | provenance | | +| aliasing.cpp:201:8:201:10 | *ps2 [s, m1] | aliasing.cpp:201:13:201:13 | *s [m1] | provenance | | +| aliasing.cpp:201:13:201:13 | *s [m1] | aliasing.cpp:201:15:201:16 | m1 | provenance | | +| arrays.cpp:6:12:6:21 | call to user_input | arrays.cpp:7:8:7:13 | access to array | provenance | | +| arrays.cpp:6:12:6:21 | call to user_input | arrays.cpp:8:8:8:13 | access to array | provenance | | +| arrays.cpp:6:12:6:21 | call to user_input | arrays.cpp:9:8:9:11 | * ... | provenance | | +| arrays.cpp:6:12:6:21 | call to user_input | arrays.cpp:10:8:10:15 | * ... | provenance | | +| arrays.cpp:15:14:15:23 | call to user_input | arrays.cpp:16:8:16:13 | access to array | provenance | | +| arrays.cpp:15:14:15:23 | call to user_input | arrays.cpp:17:8:17:13 | access to array | provenance | | +| arrays.cpp:36:3:36:3 | *o [post update] [nested, arr, data] | arrays.cpp:37:8:37:8 | *o [nested, arr, data] | provenance | | +| arrays.cpp:36:3:36:3 | *o [post update] [nested, arr, data] | arrays.cpp:38:8:38:8 | *o [nested, arr, data] | provenance | | +| arrays.cpp:36:3:36:17 | *access to array [post update] [data] | arrays.cpp:36:5:36:10 | *nested [post update] [arr, data] | provenance | | +| arrays.cpp:36:3:36:37 | ... = ... | arrays.cpp:36:3:36:17 | *access to array [post update] [data] | provenance | | +| arrays.cpp:36:5:36:10 | *nested [post update] [arr, data] | arrays.cpp:36:3:36:3 | *o [post update] [nested, arr, data] | provenance | | +| arrays.cpp:36:26:36:35 | call to user_input | arrays.cpp:36:3:36:37 | ... = ... | provenance | | +| arrays.cpp:37:8:37:8 | *o [nested, arr, data] | arrays.cpp:37:10:37:15 | *nested [arr, data] | provenance | | +| arrays.cpp:37:8:37:22 | *access to array [data] | arrays.cpp:37:24:37:27 | data | provenance | | +| arrays.cpp:37:10:37:15 | *nested [arr, data] | arrays.cpp:37:8:37:22 | *access to array [data] | provenance | | +| arrays.cpp:38:8:38:8 | *o [nested, arr, data] | arrays.cpp:38:10:38:15 | *nested [arr, data] | provenance | | +| arrays.cpp:38:8:38:22 | *access to array [data] | arrays.cpp:38:24:38:27 | data | provenance | | +| arrays.cpp:38:10:38:15 | *nested [arr, data] | arrays.cpp:38:8:38:22 | *access to array [data] | provenance | | +| arrays.cpp:42:3:42:3 | *o [post update] [*indirect, arr, data] | arrays.cpp:43:8:43:8 | *o [*indirect, arr, data] | provenance | | +| arrays.cpp:42:3:42:3 | *o [post update] [*indirect, arr, data] | arrays.cpp:44:8:44:8 | *o [*indirect, arr, data] | provenance | | +| arrays.cpp:42:3:42:20 | *access to array [post update] [data] | arrays.cpp:42:5:42:12 | *indirect [post update] [arr, data] | provenance | | +| arrays.cpp:42:3:42:40 | ... = ... | arrays.cpp:42:3:42:20 | *access to array [post update] [data] | provenance | | +| arrays.cpp:42:5:42:12 | *indirect [post update] [arr, data] | arrays.cpp:42:3:42:3 | *o [post update] [*indirect, arr, data] | provenance | | +| arrays.cpp:42:29:42:38 | call to user_input | arrays.cpp:42:3:42:40 | ... = ... | provenance | | +| arrays.cpp:43:8:43:8 | *o [*indirect, arr, data] | arrays.cpp:43:10:43:17 | *indirect [arr, data] | provenance | | +| arrays.cpp:43:8:43:25 | *access to array [data] | arrays.cpp:43:27:43:30 | data | provenance | | +| arrays.cpp:43:10:43:17 | *indirect [arr, data] | arrays.cpp:43:8:43:25 | *access to array [data] | provenance | | +| arrays.cpp:44:8:44:8 | *o [*indirect, arr, data] | arrays.cpp:44:10:44:17 | *indirect [arr, data] | provenance | | +| arrays.cpp:44:8:44:25 | *access to array [data] | arrays.cpp:44:27:44:30 | data | provenance | | +| arrays.cpp:44:10:44:17 | *indirect [arr, data] | arrays.cpp:44:8:44:25 | *access to array [data] | provenance | | +| arrays.cpp:48:3:48:3 | *o [post update] [*indirect, *ptr, data] | arrays.cpp:49:8:49:8 | *o [*indirect, *ptr, data] | provenance | | +| arrays.cpp:48:3:48:3 | *o [post update] [*indirect, *ptr, data] | arrays.cpp:50:8:50:8 | *o [*indirect, *ptr, data] | provenance | | +| arrays.cpp:48:3:48:20 | *access to array [post update] [data] | arrays.cpp:48:5:48:12 | *indirect [post update] [*ptr, data] | provenance | | +| arrays.cpp:48:3:48:40 | ... = ... | arrays.cpp:48:3:48:20 | *access to array [post update] [data] | provenance | | +| arrays.cpp:48:5:48:12 | *indirect [post update] [*ptr, data] | arrays.cpp:48:3:48:3 | *o [post update] [*indirect, *ptr, data] | provenance | | +| arrays.cpp:48:29:48:38 | call to user_input | arrays.cpp:48:3:48:40 | ... = ... | provenance | | +| arrays.cpp:49:8:49:8 | *o [*indirect, *ptr, data] | arrays.cpp:49:10:49:17 | *indirect [*ptr, data] | provenance | | +| arrays.cpp:49:8:49:25 | *access to array [data] | arrays.cpp:49:27:49:30 | data | provenance | | +| arrays.cpp:49:10:49:17 | *indirect [*ptr, data] | arrays.cpp:49:8:49:25 | *access to array [data] | provenance | | +| arrays.cpp:49:10:49:17 | *indirect [*ptr, data] | arrays.cpp:49:20:49:22 | *ptr [data] | provenance | | +| arrays.cpp:49:20:49:22 | *ptr [data] | arrays.cpp:49:8:49:25 | *access to array [data] | provenance | | +| arrays.cpp:50:8:50:8 | *o [*indirect, *ptr, data] | arrays.cpp:50:10:50:17 | *indirect [*ptr, data] | provenance | | +| arrays.cpp:50:8:50:25 | *access to array [data] | arrays.cpp:50:27:50:30 | data | provenance | | +| arrays.cpp:50:10:50:17 | *indirect [*ptr, data] | arrays.cpp:50:8:50:25 | *access to array [data] | provenance | | +| 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: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: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: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: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 | | +| by_reference.cpp:32:12:32:12 | *s [a] | by_reference.cpp:32:15:32:15 | a | provenance | | +| by_reference.cpp:32:15:32:15 | a | by_reference.cpp:31:16:31:28 | *nonMemberGetA | provenance | | +| by_reference.cpp:35:9:35:19 | *this [a] | by_reference.cpp:36:12:36:15 | *this [a] | provenance | | +| by_reference.cpp:36:12:36:15 | *this [a] | by_reference.cpp:36:18:36:18 | a | provenance | | +| by_reference.cpp:36:18:36:18 | a | by_reference.cpp:35:9:35:19 | *getDirectly | provenance | | +| by_reference.cpp:39:9:39:21 | *this [a] | by_reference.cpp:40:12:40:15 | *this [a] | provenance | | +| by_reference.cpp:40:12:40:15 | *this [a] | by_reference.cpp:35:9:35:19 | *this [a] | provenance | | +| by_reference.cpp:40:12:40:15 | *this [a] | by_reference.cpp:40:18:40:28 | call to getDirectly | provenance | | +| by_reference.cpp:40:18:40:28 | call to getDirectly | by_reference.cpp:39:9:39:21 | *getIndirectly | provenance | | +| by_reference.cpp:43:9:43:27 | *this [a] | by_reference.cpp:44:26:44:29 | *this [a] | provenance | | +| by_reference.cpp:44:12:44:24 | call to nonMemberGetA | by_reference.cpp:43:9:43:27 | *getThroughNonMember | provenance | | +| by_reference.cpp:44:26:44:29 | *this [a] | by_reference.cpp:31:46:31:46 | *s [a] | provenance | | +| by_reference.cpp:44:26:44:29 | *this [a] | by_reference.cpp:44:12:44:24 | call to nonMemberGetA | provenance | | +| by_reference.cpp:50:3:50:3 | setDirectly output argument [a] | by_reference.cpp:51:8:51:8 | *s [a] | provenance | | +| by_reference.cpp:50:17:50:26 | call to user_input | by_reference.cpp:15:26:15:30 | value | provenance | | +| by_reference.cpp:50:17:50:26 | call to user_input | by_reference.cpp:50:3:50:3 | setDirectly output argument [a] | provenance | | +| by_reference.cpp:51:8:51:8 | *s [a] | by_reference.cpp:35:9:35:19 | *this [a] | provenance | | +| by_reference.cpp:51:8:51:8 | *s [a] | by_reference.cpp:51:10:51:20 | call to getDirectly | provenance | | +| by_reference.cpp:56:3:56:3 | setIndirectly output argument [a] | by_reference.cpp:57:8:57:8 | *s [a] | provenance | | +| by_reference.cpp:56:19:56:28 | call to user_input | by_reference.cpp:19:28:19:32 | value | provenance | | +| by_reference.cpp:56:19:56:28 | call to user_input | by_reference.cpp:56:3:56:3 | setIndirectly output argument [a] | provenance | | +| by_reference.cpp:57:8:57:8 | *s [a] | by_reference.cpp:39:9:39:21 | *this [a] | provenance | | +| by_reference.cpp:57:8:57:8 | *s [a] | by_reference.cpp:57:10:57:22 | call to getIndirectly | provenance | | +| by_reference.cpp:62:3:62:3 | setThroughNonMember output argument [a] | by_reference.cpp:63:8:63:8 | *s [a] | provenance | | +| by_reference.cpp:62:25:62:34 | call to user_input | by_reference.cpp:23:34:23:38 | value | provenance | | +| by_reference.cpp:62:25:62:34 | call to user_input | by_reference.cpp:62:3:62:3 | setThroughNonMember output argument [a] | provenance | | +| by_reference.cpp:63:8:63:8 | *s [a] | by_reference.cpp:43:9:43:27 | *this [a] | provenance | | +| by_reference.cpp:63:8:63:8 | *s [a] | by_reference.cpp:63:10:63:28 | call to getThroughNonMember | provenance | | +| by_reference.cpp:68:17:68:18 | nonMemberSetA output argument [a] | by_reference.cpp:69:22:69:23 | *& ... [a] | provenance | | +| by_reference.cpp:68:21:68:30 | call to user_input | by_reference.cpp:11:48:11:52 | value | provenance | | +| 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:84:3:84:7 | *inner [post update] [a] | by_reference.cpp:102:21:102:39 | taint_inner_a_ptr output argument [a] | provenance | | +| by_reference.cpp:84:3:84:7 | *inner [post update] [a] | by_reference.cpp:103:27:103:35 | taint_inner_a_ptr output argument [a] | provenance | | +| by_reference.cpp:84:3:84:7 | *inner [post update] [a] | by_reference.cpp:106:21:106:41 | taint_inner_a_ptr output argument [a] | provenance | | +| by_reference.cpp:84:3:84:7 | *inner [post update] [a] | by_reference.cpp:107:29:107:37 | taint_inner_a_ptr output argument [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:88:3:88:7 | *inner [post update] [a] | by_reference.cpp:122:21:122:38 | taint_inner_a_ref output argument [a] | provenance | | +| by_reference.cpp:88:3:88:7 | *inner [post update] [a] | by_reference.cpp:123:21:123:36 | taint_inner_a_ref output argument [a] | provenance | | +| by_reference.cpp:88:3:88:7 | *inner [post update] [a] | by_reference.cpp:126:21:126:40 | taint_inner_a_ref output argument [a] | provenance | | +| by_reference.cpp:88:3:88:7 | *inner [post update] [a] | by_reference.cpp:127:21:127:38 | taint_inner_a_ref output argument [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 | taint_a_ptr output argument | provenance | | +| by_reference.cpp:91:25:91:26 | *pa | by_reference.cpp:108:15:108:24 | taint_a_ptr output argument | provenance | | +| by_reference.cpp:92:9:92:18 | call to user_input | by_reference.cpp:91:25:91:26 | *pa | provenance | | +| by_reference.cpp:95:25:95:26 | *pa | by_reference.cpp:124:15:124:21 | taint_a_ref output argument | provenance | | +| by_reference.cpp:95:25:95:26 | *pa | by_reference.cpp:128:15:128:23 | taint_a_ref output argument | provenance | | +| by_reference.cpp:96:8:96:17 | call to user_input | by_reference.cpp:95:25:95:26 | *pa | provenance | | +| by_reference.cpp:102:21:102:39 | taint_inner_a_ptr output argument [a] | by_reference.cpp:102:22:102:26 | *outer [post update] [inner_nested, a] | provenance | | +| by_reference.cpp:102:22:102:26 | *outer [post update] [inner_nested, a] | by_reference.cpp:110:8:110:12 | *outer [inner_nested, a] | provenance | | +| by_reference.cpp:103:21:103:25 | *outer [post update] [*inner_ptr, a] | by_reference.cpp:111:8:111:12 | *outer [*inner_ptr, a] | provenance | | +| by_reference.cpp:103:27:103:35 | taint_inner_a_ptr output argument [a] | by_reference.cpp:103:21:103:25 | *outer [post update] [*inner_ptr, a] | provenance | | +| by_reference.cpp:104:15:104:22 | taint_a_ptr output argument | by_reference.cpp:104:16:104:20 | *outer [post update] [a] | provenance | | +| by_reference.cpp:104:16:104:20 | *outer [post update] [a] | by_reference.cpp:112:8:112:12 | *outer [a] | provenance | | +| by_reference.cpp:106:21:106:41 | taint_inner_a_ptr output argument [a] | by_reference.cpp:106:22:106:27 | *pouter [post update] [inner_nested, a] | provenance | | +| by_reference.cpp:106:22:106:27 | *pouter [post update] [inner_nested, a] | by_reference.cpp:114:8:114:13 | *pouter [inner_nested, a] | provenance | | +| by_reference.cpp:107:21:107:26 | *pouter [post update] [*inner_ptr, a] | by_reference.cpp:115:8:115:13 | *pouter [*inner_ptr, a] | provenance | | +| by_reference.cpp:107:29:107:37 | taint_inner_a_ptr output argument [a] | by_reference.cpp:107:21:107:26 | *pouter [post update] [*inner_ptr, a] | provenance | | +| by_reference.cpp:108:15:108:24 | taint_a_ptr output argument | by_reference.cpp:108:16:108:21 | *pouter [post update] [a] | provenance | | +| by_reference.cpp:108:16:108:21 | *pouter [post update] [a] | by_reference.cpp:116:8:116:13 | *pouter [a] | provenance | | +| by_reference.cpp:110:8:110:12 | *outer [inner_nested, a] | by_reference.cpp:110:14:110:25 | *inner_nested [a] | provenance | | +| by_reference.cpp:110:14:110:25 | *inner_nested [a] | by_reference.cpp:110:27:110:27 | a | provenance | | +| by_reference.cpp:111:8:111:12 | *outer [*inner_ptr, a] | by_reference.cpp:111:14:111:22 | *inner_ptr [a] | provenance | | +| by_reference.cpp:111:14:111:22 | *inner_ptr [a] | by_reference.cpp:111:25:111:25 | a | provenance | | +| by_reference.cpp:112:8:112:12 | *outer [a] | by_reference.cpp:112:14:112:14 | a | provenance | | +| by_reference.cpp:114:8:114:13 | *pouter [inner_nested, a] | by_reference.cpp:114:16:114:27 | *inner_nested [a] | provenance | | +| by_reference.cpp:114:16:114:27 | *inner_nested [a] | by_reference.cpp:114:29:114:29 | a | provenance | | +| by_reference.cpp:115:8:115:13 | *pouter [*inner_ptr, a] | by_reference.cpp:115:16:115:24 | *inner_ptr [a] | provenance | | +| by_reference.cpp:115:16:115:24 | *inner_ptr [a] | by_reference.cpp:115:27:115:27 | a | provenance | | +| by_reference.cpp:116:8:116:13 | *pouter [a] | by_reference.cpp:116:16:116:16 | a | provenance | | +| by_reference.cpp:122:21:122:25 | *outer [post update] [inner_nested, a] | by_reference.cpp:130:8:130:12 | *outer [inner_nested, a] | provenance | | +| by_reference.cpp:122:21:122:38 | taint_inner_a_ref output argument [a] | by_reference.cpp:122:21:122:25 | *outer [post update] [inner_nested, a] | provenance | | +| by_reference.cpp:123:21:123:36 | taint_inner_a_ref output argument [a] | by_reference.cpp:123:22:123:26 | *outer [post update] [*inner_ptr, a] | provenance | | +| by_reference.cpp:123:22:123:26 | *outer [post update] [*inner_ptr, a] | by_reference.cpp:131:8:131:12 | *outer [*inner_ptr, a] | provenance | | +| by_reference.cpp:124:15:124:19 | *outer [post update] [a] | by_reference.cpp:132:8:132:12 | *outer [a] | provenance | | +| by_reference.cpp:124:15:124:21 | taint_a_ref output argument | by_reference.cpp:124:15:124:19 | *outer [post update] [a] | provenance | | +| by_reference.cpp:126:21:126:26 | *pouter [post update] [inner_nested, a] | by_reference.cpp:134:8:134:13 | *pouter [inner_nested, a] | provenance | | +| by_reference.cpp:126:21:126:40 | taint_inner_a_ref output argument [a] | by_reference.cpp:126:21:126:26 | *pouter [post update] [inner_nested, a] | provenance | | +| by_reference.cpp:127:21:127:38 | taint_inner_a_ref output argument [a] | by_reference.cpp:127:22:127:27 | *pouter [post update] [*inner_ptr, a] | provenance | | +| by_reference.cpp:127:22:127:27 | *pouter [post update] [*inner_ptr, a] | by_reference.cpp:135:8:135:13 | *pouter [*inner_ptr, a] | provenance | | +| by_reference.cpp:128:15:128:20 | *pouter [post update] [a] | by_reference.cpp:136:8:136:13 | *pouter [a] | provenance | | +| by_reference.cpp:128:15:128:23 | taint_a_ref output argument | by_reference.cpp:128:15:128:20 | *pouter [post update] [a] | provenance | | +| by_reference.cpp:130:8:130:12 | *outer [inner_nested, a] | by_reference.cpp:130:14:130:25 | *inner_nested [a] | provenance | | +| by_reference.cpp:130:14:130:25 | *inner_nested [a] | by_reference.cpp:130:27:130:27 | a | provenance | | +| by_reference.cpp:131:8:131:12 | *outer [*inner_ptr, a] | by_reference.cpp:131:14:131:22 | *inner_ptr [a] | provenance | | +| by_reference.cpp:131:14:131:22 | *inner_ptr [a] | by_reference.cpp:131:25:131:25 | a | provenance | | +| by_reference.cpp:132:8:132:12 | *outer [a] | by_reference.cpp:132:14:132:14 | a | provenance | | +| by_reference.cpp:134:8:134:13 | *pouter [inner_nested, a] | by_reference.cpp:134:16:134:27 | *inner_nested [a] | provenance | | +| by_reference.cpp:134:16:134:27 | *inner_nested [a] | by_reference.cpp:134:29:134:29 | a | provenance | | +| by_reference.cpp:135:8:135:13 | *pouter [*inner_ptr, a] | by_reference.cpp:135:16:135:24 | *inner_ptr [a] | provenance | | +| by_reference.cpp:135:16:135:24 | *inner_ptr [a] | by_reference.cpp:135:27:135:27 | a | provenance | | +| by_reference.cpp:136:8:136:13 | *pouter [a] | by_reference.cpp:136:16:136:16 | a | provenance | | +| clearning.cpp:32:3:32:25 | ... = ... | clearning.cpp:32:4:32:4 | *s [post update] [*x] | provenance | | +| clearning.cpp:32:4:32:4 | *s [post update] [*x] | clearning.cpp:33:5:33:5 | *s [*x] | provenance | | +| clearning.cpp:32:10:32:19 | call to user_input | clearning.cpp:32:3:32:25 | ... = ... | provenance | | +| clearning.cpp:33:5:33:5 | *s [*x] | clearning.cpp:34:9:34:9 | *s [*x] | provenance | | +| clearning.cpp:34:9:34:9 | *s [*x] | clearning.cpp:34:8:34:11 | * ... | provenance | | +| clearning.cpp:53:3:53:25 | ... = ... | clearning.cpp:53:4:53:4 | *s [post update] [*x] | provenance | | +| clearning.cpp:53:4:53:4 | *s [post update] [*x] | clearning.cpp:54:3:54:3 | *s [*x] | provenance | | +| clearning.cpp:53:10:53:19 | call to user_input | clearning.cpp:53:3:53:25 | ... = ... | provenance | | +| clearning.cpp:54:3:54:3 | *s [*x] | clearning.cpp:54:3:54:7 | *... ++ | provenance | | +| clearning.cpp:54:3:54:3 | *s [*x] | clearning.cpp:54:5:54:5 | *x | provenance | | +| clearning.cpp:54:3:54:3 | *s [*x] | clearning.cpp:55:8:55:8 | *s [*x] | provenance | | +| clearning.cpp:54:3:54:3 | *s [post update] [*x] | clearning.cpp:55:8:55:8 | *s [*x] | provenance | | +| clearning.cpp:54:3:54:7 | *... ++ | clearning.cpp:54:3:54:3 | *s [post update] [*x] | provenance | | +| clearning.cpp:54:3:54:7 | *... ++ | clearning.cpp:54:3:54:7 | *... ++ | provenance | | +| clearning.cpp:54:5:54:5 | *x | clearning.cpp:54:3:54:7 | *... ++ | provenance | | +| clearning.cpp:55:8:55:8 | *s [*x] | clearning.cpp:55:10:55:10 | *x | provenance | | +| clearning.cpp:60:3:60:22 | ... = ... | clearning.cpp:60:5:60:5 | *s [post update] [**x] | provenance | | +| clearning.cpp:60:5:60:5 | *s [post update] [**x] | clearning.cpp:61:3:61:3 | *s [**x] | provenance | | +| clearning.cpp:60:11:60:20 | call to user_input | clearning.cpp:60:3:60:22 | ... = ... | provenance | | +| clearning.cpp:61:3:61:3 | *s [**x] | clearning.cpp:61:3:61:7 | **... ++ | provenance | | +| clearning.cpp:61:3:61:3 | *s [**x] | clearning.cpp:61:5:61:5 | **x | provenance | | +| clearning.cpp:61:3:61:3 | *s [**x] | clearning.cpp:62:8:62:8 | *s [**x] | provenance | | +| clearning.cpp:61:3:61:3 | *s [post update] [**x] | clearning.cpp:62:8:62:8 | *s [**x] | provenance | | +| clearning.cpp:61:3:61:7 | **... ++ | clearning.cpp:61:3:61:3 | *s [post update] [**x] | provenance | | +| clearning.cpp:61:3:61:7 | **... ++ | clearning.cpp:61:3:61:7 | **... ++ | provenance | | +| clearning.cpp:61:5:61:5 | **x | clearning.cpp:61:3:61:7 | **... ++ | provenance | | +| clearning.cpp:62:8:62:8 | *s [**x] | clearning.cpp:62:10:62:10 | **x | provenance | | +| clearning.cpp:74:18:74:18 | *s [post update] [*val] | clearning.cpp:76:8:76:8 | *s [*val] | provenance | | +| clearning.cpp:74:20:74:22 | argument_source output argument | clearning.cpp:74:18:74:18 | *s [post update] [*val] | provenance | | +| clearning.cpp:76:8:76:8 | *s [*val] | clearning.cpp:76:7:76:12 | * ... | provenance | | +| clearning.cpp:81:18:81:18 | *s [post update] [*val] | clearning.cpp:83:13:83:13 | *s [*val] | provenance | | +| clearning.cpp:81:20:81:22 | argument_source output argument | clearning.cpp:81:18:81:18 | *s [post update] [*val] | provenance | | +| clearning.cpp:83:5:83:5 | *s [post update] [*val] | clearning.cpp:84:8:84:8 | *s [*val] | provenance | | +| clearning.cpp:83:5:83:21 | *... = ... | clearning.cpp:83:5:83:5 | *s [post update] [*val] | provenance | | +| clearning.cpp:83:13:83:13 | *s [*val] | clearning.cpp:83:13:83:21 | *... + ... | provenance | | +| clearning.cpp:83:13:83:13 | *s [*val] | clearning.cpp:83:15:83:17 | *val | provenance | | +| clearning.cpp:83:13:83:21 | *... + ... | clearning.cpp:83:5:83:21 | *... = ... | provenance | | +| clearning.cpp:83:15:83:17 | *val | clearning.cpp:83:5:83:21 | *... = ... | provenance | | +| clearning.cpp:84:8:84:8 | *s [*val] | clearning.cpp:84:7:84:12 | * ... | provenance | | +| clearning.cpp:89:18:89:18 | *s [post update] [*val] | clearning.cpp:90:3:90:3 | *s [*val] | provenance | | +| clearning.cpp:89:20:89:22 | argument_source output argument | clearning.cpp:89:18:89:18 | *s [post update] [*val] | provenance | | +| clearning.cpp:90:3:90:3 | *s [*val] | clearning.cpp:90:3:90:9 | *... ++ | provenance | | +| clearning.cpp:90:3:90:3 | *s [*val] | clearning.cpp:90:5:90:7 | **val | provenance | | +| clearning.cpp:90:3:90:3 | *s [*val] | clearning.cpp:91:8:91:8 | *s [*val] | provenance | | +| clearning.cpp:90:3:90:3 | *s [post update] [*val] | clearning.cpp:91:8:91:8 | *s [*val] | provenance | | +| clearning.cpp:90:3:90:9 | *... ++ | clearning.cpp:90:3:90:3 | *s [post update] [*val] | provenance | | +| clearning.cpp:90:3:90:9 | *... ++ | clearning.cpp:90:3:90:9 | *... ++ | provenance | | +| clearning.cpp:90:5:90:7 | **val | clearning.cpp:90:3:90:9 | *... ++ | provenance | | +| clearning.cpp:91:8:91:8 | *s [*val] | clearning.cpp:91:7:91:12 | * ... | provenance | | +| clearning.cpp:96:18:96:18 | *s [post update] [*val] | clearning.cpp:97:10:97:10 | *s [*val] | provenance | | +| clearning.cpp:96:20:96:22 | argument_source output argument | clearning.cpp:96:18:96:18 | *s [post update] [*val] | provenance | | +| clearning.cpp:97:2:97:2 | *s [post update] [*val] | clearning.cpp:98:8:98:8 | *s [*val] | provenance | | +| clearning.cpp:97:2:97:18 | *... = ... | clearning.cpp:97:2:97:2 | *s [post update] [*val] | provenance | | +| clearning.cpp:97:10:97:10 | *s [*val] | clearning.cpp:97:10:97:18 | *... + ... | provenance | | +| clearning.cpp:97:10:97:10 | *s [*val] | clearning.cpp:97:12:97:14 | *val | provenance | | +| clearning.cpp:97:10:97:18 | *... + ... | clearning.cpp:97:2:97:18 | *... = ... | provenance | | +| clearning.cpp:97:12:97:14 | *val | clearning.cpp:97:2:97:18 | *... = ... | provenance | | +| clearning.cpp:98:8:98:8 | *s [*val] | clearning.cpp:98:7:98:12 | * ... | provenance | | +| clearning.cpp:103:18:103:18 | *s [post update] [*val] | clearning.cpp:104:2:104:2 | *s [*val] | provenance | | +| clearning.cpp:103:20:103:22 | argument_source output argument | clearning.cpp:103:18:103:18 | *s [post update] [*val] | provenance | | +| clearning.cpp:104:2:104:2 | *s [*val] | clearning.cpp:104:2:104:8 | *... ++ | provenance | | +| clearning.cpp:104:2:104:2 | *s [*val] | clearning.cpp:104:4:104:6 | *val | provenance | | +| clearning.cpp:104:2:104:2 | *s [*val] | clearning.cpp:105:8:105:8 | *s [*val] | provenance | | +| clearning.cpp:104:2:104:2 | *s [post update] [*val] | clearning.cpp:105:8:105:8 | *s [*val] | provenance | | +| clearning.cpp:104:2:104:8 | *... ++ | clearning.cpp:104:2:104:2 | *s [post update] [*val] | provenance | | +| clearning.cpp:104:2:104:8 | *... ++ | clearning.cpp:104:2:104:8 | *... ++ | provenance | | +| clearning.cpp:104:4:104:6 | *val | clearning.cpp:104:2:104:8 | *... ++ | provenance | | +| clearning.cpp:105:8:105:8 | *s [*val] | clearning.cpp:105:7:105:12 | * ... | provenance | | +| clearning.cpp:110:18:110:18 | *s [post update] [*val] | clearning.cpp:111:4:111:4 | *s [*val] | provenance | | +| clearning.cpp:110:20:110:22 | argument_source output argument | clearning.cpp:110:18:110:18 | *s [post update] [*val] | provenance | | +| clearning.cpp:111:2:111:8 | *++ ... | clearning.cpp:111:2:111:8 | *++ ... | provenance | | +| clearning.cpp:111:2:111:8 | *++ ... | clearning.cpp:111:4:111:4 | *s [post update] [*val] | provenance | | +| clearning.cpp:111:4:111:4 | *s [*val] | clearning.cpp:111:2:111:8 | *++ ... | provenance | | +| clearning.cpp:111:4:111:4 | *s [*val] | clearning.cpp:111:6:111:8 | *val | provenance | | +| clearning.cpp:111:4:111:4 | *s [*val] | clearning.cpp:112:8:112:8 | *s [*val] | provenance | | +| clearning.cpp:111:4:111:4 | *s [post update] [*val] | clearning.cpp:112:8:112:8 | *s [*val] | provenance | | +| clearning.cpp:111:6:111:8 | *val | clearning.cpp:111:2:111:8 | *++ ... | provenance | | +| clearning.cpp:112:8:112:8 | *s [*val] | clearning.cpp:112:7:112:12 | * ... | provenance | | +| clearning.cpp:117:18:117:18 | *s [post update] [*val] | clearning.cpp:118:2:118:2 | *s [*val] | provenance | | +| clearning.cpp:117:20:117:22 | argument_source output argument | clearning.cpp:117:18:117:18 | *s [post update] [*val] | provenance | | +| clearning.cpp:118:2:118:2 | *s [*val] | clearning.cpp:118:2:118:11 | *... += ... | provenance | | +| clearning.cpp:118:2:118:2 | *s [*val] | clearning.cpp:118:4:118:6 | *val | provenance | | +| clearning.cpp:118:2:118:2 | *s [*val] | clearning.cpp:119:8:119:8 | *s [*val] | provenance | | +| clearning.cpp:118:2:118:2 | *s [post update] [*val] | clearning.cpp:119:8:119:8 | *s [*val] | provenance | | +| clearning.cpp:118:2:118:11 | *... += ... | clearning.cpp:118:2:118:2 | *s [post update] [*val] | provenance | | +| clearning.cpp:118:2:118:11 | *... += ... | clearning.cpp:118:2:118:11 | *... += ... | provenance | | +| clearning.cpp:118:4:118:6 | *val | clearning.cpp:118:2:118:11 | *... += ... | provenance | | +| clearning.cpp:119:8:119:8 | *s [*val] | clearning.cpp:119:7:119:12 | * ... | provenance | | +| clearning.cpp:151:3:151:3 | *s [post update] [val] | clearning.cpp:152:8:152:8 | *s [val] | provenance | | +| clearning.cpp:151:3:151:22 | ... = ... | clearning.cpp:151:3:151:3 | *s [post update] [val] | provenance | | +| clearning.cpp:151:11:151:20 | call to user_input | clearning.cpp:151:3:151:22 | ... = ... | provenance | | +| clearning.cpp:152:8:152:8 | *s [val] | clearning.cpp:152:10:152:12 | val | provenance | | +| complex.cpp:9:7:9:7 | *this [a_] | complex.cpp:9:20:9:21 | *this [a_] | provenance | | +| complex.cpp:9:20:9:21 | *this [a_] | complex.cpp:9:20:9:21 | a_ | provenance | | +| complex.cpp:9:20:9:21 | a_ | complex.cpp:9:7:9:7 | *a | provenance | | +| 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:10:20:10:21 | b_ | complex.cpp:10:7:10:7 | *b | provenance | | +| complex.cpp:11:17:11:17 | a | complex.cpp:11:22:11:27 | ... = ... | 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: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 | | +| complex.cpp:42:8:42:8 | *b [inner, f, a_] | complex.cpp:42:10:42:14 | *inner [f, a_] | provenance | | +| complex.cpp:42:10:42:14 | *inner [f, a_] | complex.cpp:42:16:42:16 | *f [a_] | provenance | | +| complex.cpp:42:16:42:16 | *f [a_] | complex.cpp:9:7:9:7 | *this [a_] | provenance | | +| complex.cpp:42:16:42:16 | *f [a_] | complex.cpp:42:18:42:18 | call to a | provenance | | +| complex.cpp:43:8:43:8 | *b [inner, f, b_] | complex.cpp:43:10:43:14 | *inner [f, b_] | provenance | | +| complex.cpp:43:10:43:14 | *inner [f, b_] | complex.cpp:43:16:43:16 | *f [b_] | provenance | | +| complex.cpp:43:16:43:16 | *f [b_] | complex.cpp:10:7:10:7 | *this [b_] | provenance | | +| complex.cpp:43:16:43:16 | *f [b_] | complex.cpp:43:18:43:18 | call to b | provenance | | +| complex.cpp:53:3:53:4 | *b1 [post update] [inner, f, a_] | complex.cpp:59:7:59:8 | *b1 [inner, f, a_] | provenance | | +| complex.cpp:53:6:53:10 | *inner [post update] [f, a_] | complex.cpp:53:3:53:4 | *b1 [post update] [inner, f, a_] | provenance | | +| complex.cpp:53:12:53:12 | setA output argument [a_] | complex.cpp:53:6:53:10 | *inner [post update] [f, a_] | provenance | | +| complex.cpp:53:19:53:28 | call to user_input | complex.cpp:11:17:11:17 | a | provenance | | +| complex.cpp:53:19:53:28 | call to user_input | complex.cpp:53:12:53:12 | setA output argument [a_] | provenance | | +| complex.cpp:54:3:54:4 | *b2 [post update] [inner, f, b_] | complex.cpp:62:7:62:8 | *b2 [inner, f, b_] | provenance | | +| complex.cpp:54:6:54:10 | *inner [post update] [f, b_] | complex.cpp:54:3:54:4 | *b2 [post update] [inner, f, b_] | provenance | | +| complex.cpp:54:12:54:12 | setB output argument [b_] | complex.cpp:54:6:54:10 | *inner [post update] [f, b_] | provenance | | +| complex.cpp:54:19:54:28 | call to user_input | complex.cpp:12:17:12:17 | b | provenance | | +| complex.cpp:54:19:54:28 | call to user_input | complex.cpp:54:12:54:12 | setB output argument [b_] | provenance | | +| complex.cpp:55:3:55:4 | *b3 [post update] [inner, f, a_] | complex.cpp:65:7:65:8 | *b3 [inner, f, a_] | provenance | | +| complex.cpp:55:6:55:10 | *inner [post update] [f, a_] | complex.cpp:55:3:55:4 | *b3 [post update] [inner, f, a_] | provenance | | +| complex.cpp:55:12:55:12 | setA output argument [a_] | complex.cpp:55:6:55:10 | *inner [post update] [f, a_] | provenance | | +| complex.cpp:55:19:55:28 | call to user_input | complex.cpp:11:17:11:17 | a | provenance | | +| complex.cpp:55:19:55:28 | call to user_input | complex.cpp:55:12:55:12 | setA output argument [a_] | provenance | | +| complex.cpp:56:3:56:4 | *b3 [post update] [inner, f, b_] | complex.cpp:65:7:65:8 | *b3 [inner, f, b_] | provenance | | +| complex.cpp:56:6:56:10 | *inner [post update] [f, b_] | complex.cpp:56:3:56:4 | *b3 [post update] [inner, f, b_] | provenance | | +| complex.cpp:56:12:56:12 | setB output argument [b_] | complex.cpp:56:6:56:10 | *inner [post update] [f, b_] | provenance | | +| complex.cpp:56:19:56:28 | call to user_input | complex.cpp:12:17:12:17 | b | provenance | | +| complex.cpp:56:19:56:28 | call to user_input | complex.cpp:56:12:56:12 | setB output argument [b_] | provenance | | +| complex.cpp:59:7:59:8 | *b1 [inner, f, a_] | complex.cpp:40:17:40:17 | *b [inner, f, a_] | provenance | | +| complex.cpp:62:7:62:8 | *b2 [inner, f, b_] | complex.cpp:40:17:40:17 | *b [inner, f, b_] | provenance | | +| complex.cpp:65:7:65:8 | *b3 [inner, f, a_] | complex.cpp:40:17:40:17 | *b [inner, f, a_] | provenance | | +| complex.cpp:65:7:65:8 | *b3 [inner, f, b_] | complex.cpp:40:17:40:17 | *b [inner, f, b_] | provenance | | +| conflated.cpp:10:3:10:22 | ... = ... | conflated.cpp:10:4:10:5 | *ra [post update] [*p] | provenance | | +| conflated.cpp:10:4:10:5 | *ra [post update] [*p] | conflated.cpp:11:9:11:10 | *ra [*p] | provenance | | +| conflated.cpp:10:11:10:20 | call to user_input | conflated.cpp:10:3:10:22 | ... = ... | provenance | | +| conflated.cpp:11:9:11:10 | *ra [*p] | conflated.cpp:11:8:11:12 | * ... | provenance | | +| conflated.cpp:19:19:19:21 | argument_source output argument | conflated.cpp:20:8:20:10 | *raw | provenance | | +| conflated.cpp:29:3:29:4 | *pa [post update] [x] | conflated.cpp:30:8:30:9 | *pa [x] | provenance | | +| conflated.cpp:29:3:29:22 | ... = ... | conflated.cpp:29:3:29:4 | *pa [post update] [x] | provenance | | +| conflated.cpp:29:11:29:20 | call to user_input | conflated.cpp:29:3:29:22 | ... = ... | provenance | | +| conflated.cpp:30:8:30:9 | *pa [x] | conflated.cpp:30:12:30:12 | x | provenance | | +| conflated.cpp:36:3:36:4 | *pa [post update] [x] | conflated.cpp:37:8:37:9 | *pa [x] | provenance | | +| conflated.cpp:36:3:36:22 | ... = ... | conflated.cpp:36:3:36:4 | *pa [post update] [x] | provenance | | +| conflated.cpp:36:11:36:20 | call to user_input | conflated.cpp:36:3:36:22 | ... = ... | provenance | | +| conflated.cpp:37:8:37:9 | *pa [x] | conflated.cpp:37:12:37:12 | x | provenance | | +| conflated.cpp:54:3:54:4 | *ll [post update] [*next, y] | conflated.cpp:55:8:55:9 | *ll [*next, y] | provenance | | +| conflated.cpp:54:3:54:28 | ... = ... | conflated.cpp:54:7:54:10 | *next [post update] [y] | provenance | | +| conflated.cpp:54:7:54:10 | *next [post update] [y] | conflated.cpp:54:3:54:4 | *ll [post update] [*next, y] | provenance | | +| conflated.cpp:54:17:54:26 | call to user_input | conflated.cpp:54:3:54:28 | ... = ... | provenance | | +| conflated.cpp:55:8:55:9 | *ll [*next, y] | conflated.cpp:55:12:55:15 | *next [y] | provenance | | +| conflated.cpp:55:12:55:15 | *next [y] | conflated.cpp:55:18:55:18 | y | provenance | | +| conflated.cpp:60:3:60:4 | *ll [post update] [*next, y] | conflated.cpp:61:8:61:9 | *ll [*next, y] | provenance | | +| conflated.cpp:60:3:60:28 | ... = ... | conflated.cpp:60:7:60:10 | *next [post update] [y] | provenance | | +| conflated.cpp:60:7:60:10 | *next [post update] [y] | conflated.cpp:60:3:60:4 | *ll [post update] [*next, y] | provenance | | +| conflated.cpp:60:17:60:26 | call to user_input | conflated.cpp:60:3:60:28 | ... = ... | provenance | | +| conflated.cpp:61:8:61:9 | *ll [*next, y] | conflated.cpp:61:12:61:15 | *next [y] | provenance | | +| conflated.cpp:61:12:61:15 | *next [y] | conflated.cpp:61:18:61:18 | y | provenance | | +| constructors.cpp:18:9:18:9 | *this [a_] | constructors.cpp:18:22:18:23 | *this [a_] | provenance | | +| constructors.cpp:18:22:18:23 | *this [a_] | constructors.cpp:18:22:18:23 | a_ | provenance | | +| constructors.cpp:18:22:18:23 | a_ | constructors.cpp:18:9:18:9 | *a | provenance | | +| constructors.cpp:19:9:19:9 | *this [b_] | constructors.cpp:19:22:19:23 | *this [b_] | provenance | | +| 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: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 | | +| constructors.cpp:23:35:23:35 | b | constructors.cpp:23:5:23:7 | *this [post update] [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 | | +| constructors.cpp:28:10:28:10 | *f [a_] | constructors.cpp:18:9:18:9 | *this [a_] | provenance | | +| constructors.cpp:28:10:28:10 | *f [a_] | constructors.cpp:28:12:28:12 | call to a | provenance | | +| constructors.cpp:29:10:29:10 | *f [b_] | constructors.cpp:19:9:19:9 | *this [b_] | provenance | | +| constructors.cpp:29:10:29:10 | *f [b_] | constructors.cpp:29:12:29:12 | call to b | provenance | | +| constructors.cpp:34:9:34:9 | call to Foo [a_] | constructors.cpp:40:9:40:9 | *f [a_] | provenance | | +| constructors.cpp:34:11:34:20 | call to user_input | constructors.cpp:23:13:23:13 | a | provenance | | +| constructors.cpp:34:11:34:20 | call to user_input | constructors.cpp:34:9:34:9 | call to Foo [a_] | provenance | | +| constructors.cpp:35:9:35:9 | call to Foo [b_] | constructors.cpp:43:9:43:9 | *g [b_] | provenance | | +| constructors.cpp:35:14:35:23 | call to user_input | constructors.cpp:23:20:23:20 | b | provenance | | +| constructors.cpp:35:14:35:23 | call to user_input | constructors.cpp:35:9:35:9 | call to Foo [b_] | provenance | | +| constructors.cpp:36:9:36:9 | call to Foo [a_] | constructors.cpp:46:9:46:9 | *h [a_] | provenance | | +| constructors.cpp:36:9:36:9 | call to Foo [b_] | constructors.cpp:46:9:46:9 | *h [b_] | provenance | | +| constructors.cpp:36:11:36:20 | call to user_input | constructors.cpp:23:13:23:13 | a | provenance | | +| constructors.cpp:36:11:36:20 | call to user_input | constructors.cpp:36:9:36:9 | call to Foo [a_] | provenance | | +| constructors.cpp:36:25:36:34 | call to user_input | constructors.cpp:23:20:23:20 | b | provenance | | +| constructors.cpp:36:25:36:34 | call to user_input | constructors.cpp:36:9:36:9 | call to Foo [b_] | provenance | | +| constructors.cpp:40:9:40:9 | *f [a_] | constructors.cpp:26:15:26:15 | *f [a_] | provenance | | +| constructors.cpp:43:9:43:9 | *g [b_] | constructors.cpp:26:15:26:15 | *f [b_] | provenance | | +| 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: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: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:65 | ... = ... | qualifiers.cpp:13:51:13:55 | *inner [post update] [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: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: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: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: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: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: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 | | +| realistic.cpp:53:9:53:11 | *foo [post update] [bar, *baz, userInput, bufferLen] | realistic.cpp:61:21:61:23 | *foo [bar, *baz, userInput, bufferLen] | provenance | | +| realistic.cpp:53:9:53:18 | *access to array [post update] [*baz, userInput, bufferLen] | realistic.cpp:53:9:53:11 | *foo [post update] [bar, *baz, userInput, bufferLen] | provenance | | +| realistic.cpp:53:9:53:66 | ... = ... | realistic.cpp:53:25:53:33 | *userInput [post update] [bufferLen] | provenance | | +| realistic.cpp:53:20:53:22 | *baz [post update] [userInput, bufferLen] | realistic.cpp:53:9:53:18 | *access to array [post update] [*baz, userInput, bufferLen] | provenance | | +| realistic.cpp:53:25:53:33 | *userInput [post update] [bufferLen] | realistic.cpp:53:20:53:22 | *baz [post update] [userInput, bufferLen] | provenance | | +| realistic.cpp:53:47:53:66 | call to user_input | realistic.cpp:53:9:53:66 | ... = ... | provenance | | +| realistic.cpp:61:21:61:23 | *foo [bar, *baz, userInput, bufferLen] | realistic.cpp:61:21:61:30 | *access to array [*baz, userInput, bufferLen] | provenance | | +| realistic.cpp:61:21:61:30 | *access to array [*baz, userInput, bufferLen] | realistic.cpp:61:32:61:34 | *baz [userInput, bufferLen] | provenance | | +| realistic.cpp:61:32:61:34 | *baz [userInput, bufferLen] | realistic.cpp:61:37:61:45 | *userInput [bufferLen] | provenance | | +| realistic.cpp:61:37:61:45 | *userInput [bufferLen] | realistic.cpp:61:14:61:55 | bufferLen | provenance | | +| simple.cpp:18:9:18:9 | *this [a_] | simple.cpp:18:22:18:23 | *this [a_] | provenance | | +| simple.cpp:18:22:18:23 | *this [a_] | simple.cpp:18:22:18:23 | a_ | provenance | | +| simple.cpp:18:22:18:23 | a_ | simple.cpp:18:9:18:9 | *a | provenance | | +| 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:19:22:19:23 | b_ | simple.cpp:19:9:19:9 | *b | provenance | | +| simple.cpp:20:19:20:19 | a | simple.cpp:20:24:20:29 | ... = ... | 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: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 | | +| simple.cpp:28:10:28:10 | *f [a_] | simple.cpp:18:9:18:9 | *this [a_] | provenance | | +| simple.cpp:28:10:28:10 | *f [a_] | simple.cpp:28:12:28:12 | call to a | provenance | | +| simple.cpp:29:10:29:10 | *f [b_] | simple.cpp:19:9:19:9 | *this [b_] | provenance | | +| simple.cpp:29:10:29:10 | *f [b_] | simple.cpp:29:12:29:12 | call to b | provenance | | +| simple.cpp:39:5:39:5 | setA output argument [a_] | simple.cpp:45:9:45:9 | *f [a_] | provenance | | +| simple.cpp:39:12:39:21 | call to user_input | simple.cpp:20:19:20:19 | a | provenance | | +| simple.cpp:39:12:39:21 | call to user_input | simple.cpp:39:5:39:5 | setA output argument [a_] | provenance | | +| simple.cpp:40:5:40:5 | setB output argument [b_] | simple.cpp:48:9:48:9 | *g [b_] | provenance | | +| simple.cpp:40:12:40:21 | call to user_input | simple.cpp:21:19:21:19 | b | provenance | | +| simple.cpp:40:12:40:21 | call to user_input | simple.cpp:40:5:40:5 | setB output argument [b_] | provenance | | +| simple.cpp:41:5:41:5 | setA output argument [a_] | simple.cpp:51:9:51:9 | *h [a_] | provenance | | +| simple.cpp:41:12:41:21 | call to user_input | simple.cpp:20:19:20:19 | a | provenance | | +| simple.cpp:41:12:41:21 | call to user_input | simple.cpp:41:5:41:5 | setA output argument [a_] | provenance | | +| simple.cpp:42:5:42:5 | setB output argument [b_] | simple.cpp:51:9:51:9 | *h [b_] | provenance | | +| simple.cpp:42:12:42:21 | call to user_input | simple.cpp:21:19:21:19 | b | provenance | | +| simple.cpp:42:12:42:21 | call to user_input | simple.cpp:42:5:42:5 | setB output argument [b_] | provenance | | +| simple.cpp:45:9:45:9 | *f [a_] | simple.cpp:26:15:26:15 | *f [a_] | provenance | | +| simple.cpp:48:9:48:9 | *g [b_] | simple.cpp:26:15:26:15 | *f [b_] | provenance | | +| simple.cpp:51:9:51:9 | *h [a_] | simple.cpp:26:15:26:15 | *f [a_] | provenance | | +| simple.cpp:51:9:51:9 | *h [b_] | simple.cpp:26:15:26:15 | *f [b_] | provenance | | +| simple.cpp:65:5:65:5 | *a [post update] [i] | simple.cpp:67:10:67:11 | *a2 [i] | provenance | | +| simple.cpp:65:5:65:22 | ... = ... | simple.cpp:65:5:65:5 | *a [post update] [i] | provenance | | +| simple.cpp:65:11:65:20 | call to user_input | simple.cpp:65:5:65:22 | ... = ... | provenance | | +| simple.cpp:67:10:67:11 | *a2 [i] | simple.cpp:67:13:67:13 | i | provenance | | +| simple.cpp:78:9:78:15 | *this [f2, f1] | simple.cpp:79:16:79:17 | *this [f2, f1] | provenance | | +| simple.cpp:79:16:79:17 | *f2 [f1] | simple.cpp:79:19:79:20 | f1 | provenance | | +| simple.cpp:79:16:79:17 | *this [f2, f1] | simple.cpp:79:16:79:17 | *f2 [f1] | provenance | | +| simple.cpp:79:19:79:20 | f1 | simple.cpp:78:9:78:15 | *getf2f1 | provenance | | +| simple.cpp:83:9:83:10 | *f2 [post update] [f1] | simple.cpp:83:9:83:10 | *this [post update] [f2, f1] | provenance | | +| simple.cpp:83:9:83:10 | *this [post update] [f2, f1] | simple.cpp:84:14:84:20 | *this [f2, f1] | provenance | | +| simple.cpp:83:9:83:28 | ... = ... | simple.cpp:83:9:83:10 | *f2 [post update] [f1] | provenance | | +| simple.cpp:83:17:83:26 | call to user_input | simple.cpp:83:9:83:28 | ... = ... | provenance | | +| simple.cpp:84:14:84:20 | *this [f2, f1] | simple.cpp:78:9:78:15 | *this [f2, f1] | provenance | | +| simple.cpp:84:14:84:20 | *this [f2, f1] | simple.cpp:84:14:84:20 | call to getf2f1 | provenance | | +| simple.cpp:92:5:92:5 | *a [post update] [i] | simple.cpp:94:10:94:11 | *a2 [i] | provenance | | +| simple.cpp:92:5:92:22 | ... = ... | simple.cpp:92:5:92:5 | *a [post update] [i] | provenance | | +| simple.cpp:92:11:92:20 | call to user_input | simple.cpp:92:5:92:22 | ... = ... | provenance | | +| simple.cpp:94:10:94:11 | *a2 [i] | simple.cpp:94:13:94:13 | i | provenance | | +| simple.cpp:103:24:103:24 | x | simple.cpp:104:14:104:14 | x | provenance | | +| simple.cpp:108:17:108:26 | call to user_input | simple.cpp:109:43:109:43 | x | provenance | | +| simple.cpp:109:43:109:43 | x | simple.cpp:103:24:103:24 | x | provenance | | +| struct_init.c:14:24:14:25 | *ab [a] | struct_init.c:15:8:15:9 | *ab [a] | provenance | | +| struct_init.c:15:8:15:9 | *ab [a] | struct_init.c:15:12:15:12 | a | provenance | | +| struct_init.c:20:13:20:14 | *definition of ab [a] | struct_init.c:22:8:22:9 | *ab [a] | provenance | | +| struct_init.c:20:13:20:14 | *definition of ab [a] | struct_init.c:24:10:24:12 | *& ... [a] | provenance | | +| struct_init.c:20:13:20:14 | *definition of ab [a] | struct_init.c:28:5:28:7 | *& ... [a] | provenance | | +| struct_init.c:20:13:20:14 | *definition of ab [post update] [a] | struct_init.c:20:13:20:14 | *definition of ab [a] | provenance | | +| struct_init.c:20:20:20:29 | call to user_input | struct_init.c:20:13:20:14 | *definition of ab [post update] [a] | provenance | | +| struct_init.c:20:20:20:29 | call to user_input | struct_init.c:20:20:20:29 | call to user_input | provenance | | +| struct_init.c:22:8:22:9 | *ab [a] | struct_init.c:22:11:22:11 | a | provenance | | +| struct_init.c:24:10:24:12 | *& ... [a] | struct_init.c:14:24:14:25 | *ab [a] | provenance | | +| struct_init.c:26:16:26:20 | *definition of outer [nestedAB, a] | struct_init.c:31:8:31:12 | *outer [nestedAB, a] | provenance | | +| struct_init.c:26:16:26:20 | *definition of outer [nestedAB, a] | struct_init.c:36:11:36:15 | *outer [nestedAB, a] | provenance | | +| struct_init.c:26:16:26:20 | *definition of outer [post update] [*pointerAB, a] | struct_init.c:33:8:33:12 | *outer [*pointerAB, a] | provenance | | +| struct_init.c:26:16:26:20 | *definition of outer [post update] [nestedAB, a] | struct_init.c:26:16:26:20 | *definition of outer [nestedAB, a] | provenance | | +| struct_init.c:26:23:29:3 | *{...} [post update] [a] | struct_init.c:26:16:26:20 | *definition of outer [post update] [nestedAB, a] | provenance | | +| struct_init.c:27:7:27:16 | call to user_input | struct_init.c:26:23:29:3 | *{...} [post update] [a] | provenance | | +| struct_init.c:27:7:27:16 | call to user_input | struct_init.c:27:7:27:16 | call to user_input | provenance | | +| struct_init.c:28:5:28:7 | *& ... [a] | struct_init.c:26:16:26:20 | *definition of outer [post update] [*pointerAB, a] | provenance | | +| struct_init.c:31:8:31:12 | *outer [nestedAB, a] | struct_init.c:31:14:31:21 | *nestedAB [a] | provenance | | +| struct_init.c:31:14:31:21 | *nestedAB [a] | struct_init.c:31:23:31:23 | a | provenance | | +| struct_init.c:33:8:33:12 | *outer [*pointerAB, a] | struct_init.c:33:14:33:22 | *pointerAB [a] | provenance | | +| struct_init.c:33:14:33:22 | *pointerAB [a] | struct_init.c:33:25:33:25 | a | provenance | | +| struct_init.c:36:10:36:24 | *& ... [a] | struct_init.c:14:24:14:25 | *ab [a] | provenance | | +| struct_init.c:36:11:36:15 | *outer [nestedAB, a] | struct_init.c:36:10:36:24 | *& ... [a] | provenance | | +| struct_init.c:40:13:40:14 | *definition of ab [a] | struct_init.c:43:5:43:7 | *& ... [a] | provenance | | +| struct_init.c:40:13:40:14 | *definition of ab [post update] [a] | struct_init.c:40:13:40:14 | *definition of ab [a] | provenance | | +| struct_init.c:40:20:40:29 | call to user_input | struct_init.c:40:13:40:14 | *definition of ab [post update] [a] | provenance | | +| struct_init.c:40:20:40:29 | call to user_input | struct_init.c:40:20:40:29 | call to user_input | provenance | | +| struct_init.c:41:16:41:20 | *definition of outer [post update] [*pointerAB, a] | struct_init.c:46:10:46:14 | *outer [*pointerAB, a] | provenance | | +| struct_init.c:43:5:43:7 | *& ... [a] | struct_init.c:41:16:41:20 | *definition of outer [post update] [*pointerAB, a] | provenance | | +| 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:10:23:10 | c | semmle.label | c | | A.cpp:25:7:25:10 | *this [post update] [c] | semmle.label | *this [post update] [c] | 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 78b3832ea92..3eebd355b14 100644 --- a/cpp/ql/test/library-tests/dataflow/fields/path-flow.expected +++ b/cpp/ql/test/library-tests/dataflow/fields/path-flow.expected @@ -1,751 +1,751 @@ edges -| A.cpp:23:10:23:10 | c | A.cpp:25:7:25:17 | ... = ... | -| A.cpp:25:7:25:17 | ... = ... | A.cpp:25:7:25:10 | this [post update] [c] | -| A.cpp:27:17:27:17 | c | A.cpp:27:22:27:32 | ... = ... | -| A.cpp:27:22:27:32 | ... = ... | A.cpp:27:22:27:25 | this [post update] [c] | -| A.cpp:28:8:28:10 | this [c] | A.cpp:28:23:28:26 | this [c] | -| A.cpp:28:23:28:26 | this [c] | A.cpp:28:29:28:29 | c | -| A.cpp:29:23:29:23 | c | A.cpp:31:20:31:20 | c | -| A.cpp:31:14:31:21 | call to B [c] | A.cpp:31:14:31:21 | new [c] | -| A.cpp:31:20:31:20 | c | A.cpp:23:10:23:10 | c | -| A.cpp:31:20:31:20 | c | A.cpp:31:14:31:21 | call to B [c] | -| A.cpp:41:5:41:6 | ref arg ct | A.cpp:43:11:43:12 | ct | -| A.cpp:41:15:41:21 | new | A.cpp:41:5:41:6 | ref arg ct | -| A.cpp:43:11:43:12 | ct | A.cpp:43:10:43:12 | & ... | -| A.cpp:47:12:47:18 | new | A.cpp:48:20:48:20 | c | -| A.cpp:48:12:48:18 | call to make [c] | A.cpp:49:10:49:10 | b [c] | -| A.cpp:48:20:48:20 | c | A.cpp:29:23:29:23 | c | -| A.cpp:48:20:48:20 | c | A.cpp:48:12:48:18 | call to make [c] | -| A.cpp:49:10:49:10 | b [c] | A.cpp:49:13:49:13 | c | -| A.cpp:55:5:55:5 | ref arg b [c] | A.cpp:56:10:56:10 | b [c] | -| A.cpp:55:12:55:19 | new | A.cpp:27:17:27:17 | c | -| A.cpp:55:12:55:19 | new | 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:56:10:56:10 | b [c] | A.cpp:56:13:56:15 | call to get | -| A.cpp:57:11:57:24 | call to B [c] | A.cpp:57:11:57:24 | new [c] | -| A.cpp:57:11:57:24 | new [c] | A.cpp:28:8:28:10 | this [c] | -| A.cpp:57:11:57:24 | new [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:57:17:57:23 | new | A.cpp:57:11:57:24 | call to B [c] | -| A.cpp:64:10:64:15 | call to setOnB [c] | A.cpp:66:10:66:11 | b2 [c] | -| A.cpp:64:21:64:28 | new | A.cpp:64:10:64:15 | call to setOnB [c] | -| A.cpp:64:21:64:28 | new | A.cpp:85:26:85:26 | c | -| A.cpp:66:10:66:11 | b2 [c] | A.cpp:66:14:66:14 | c | -| A.cpp:73:10:73:19 | call to setOnBWrap [c] | A.cpp:75:10:75:11 | b2 [c] | -| A.cpp:73:25:73:32 | new | A.cpp:73:10:73:19 | call to setOnBWrap [c] | -| A.cpp:73:25:73:32 | new | A.cpp:78:27:78:27 | c | -| A.cpp:75:10:75:11 | b2 [c] | A.cpp:75:14:75:14 | c | -| A.cpp:78:27:78:27 | c | A.cpp:81:21:81:21 | c | -| A.cpp:81:10:81:15 | call to setOnB [c] | A.cpp:82:12:82:24 | ... ? ... : ... [c] | -| A.cpp:81:21:81:21 | c | A.cpp:81:10:81:15 | call to setOnB [c] | -| A.cpp:81:21:81:21 | c | A.cpp:85:26:85:26 | c | -| A.cpp:85:26:85:26 | c | A.cpp:90:15:90:15 | c | -| A.cpp:90:7:90:8 | ref arg b2 [c] | A.cpp:91:14:91:15 | b2 [c] | -| A.cpp:90:15:90:15 | c | A.cpp:27:17:27:17 | c | -| A.cpp:90:15:90:15 | c | A.cpp:90:7:90:8 | ref arg b2 [c] | -| A.cpp:98:12:98:18 | new | A.cpp:100:5:100:13 | ... = ... | -| A.cpp:100:5:100:6 | c1 [post update] [a] | A.cpp:101:8:101:9 | c1 [a] | -| A.cpp:100:5:100:13 | ... = ... | A.cpp:100:5:100:6 | c1 [post update] [a] | -| A.cpp:101:8:101:9 | c1 [a] | A.cpp:103:14:103:14 | c [a] | -| A.cpp:103:14:103:14 | c [a] | A.cpp:107:12:107:13 | c1 [a] | -| A.cpp:103:14:103:14 | c [a] | A.cpp:120:12:120:13 | c1 [a] | -| A.cpp:107:12:107:13 | c1 [a] | A.cpp:107:16:107:16 | a | -| A.cpp:120:12:120:13 | c1 [a] | A.cpp:120:16:120:16 | a | -| A.cpp:124:14:124:14 | b [c] | A.cpp:131:8:131:8 | ref arg b [c] | -| A.cpp:126:5:126:5 | ref arg b [c] | A.cpp:124:14:124:14 | b [c] | -| A.cpp:126:5:126:5 | ref arg b [c] | A.cpp:131:8:131:8 | ref arg b [c] | -| A.cpp:126:12:126:18 | new | A.cpp:27:17:27:17 | c | -| A.cpp:126:12:126:18 | new | A.cpp:126:5:126:5 | ref arg b [c] | -| A.cpp:131:8:131:8 | ref arg b [c] | A.cpp:132:10:132:10 | b [c] | -| A.cpp:132:10:132:10 | b [c] | A.cpp:132:13:132:13 | c | -| A.cpp:140:13:140:13 | b | A.cpp:143:7:143:31 | ... = ... | -| A.cpp:140:13:140:13 | b [c] | A.cpp:151:18:151:18 | ref arg b [c] | -| A.cpp:142:7:142:7 | b [post update] [c] | A.cpp:140:13:140:13 | b [c] | -| A.cpp:142:7:142:7 | b [post update] [c] | A.cpp:143:7:143:31 | ... = ... [c] | -| A.cpp:142:7:142:7 | b [post update] [c] | A.cpp:151:18:151:18 | ref arg b [c] | -| A.cpp:142:7:142:20 | ... = ... | A.cpp:142:7:142:7 | b [post update] [c] | -| A.cpp:142:14:142:20 | new | A.cpp:142:7:142:20 | ... = ... | -| A.cpp:143:7:143:10 | this [post update] [b, c] | A.cpp:151:12:151:24 | call to D [b, c] | -| A.cpp:143:7:143:10 | this [post update] [b] | A.cpp:151:12:151:24 | call to D [b] | -| A.cpp:143:7:143:31 | ... = ... | A.cpp:143:7:143:10 | this [post update] [b] | -| A.cpp:143:7:143:31 | ... = ... | A.cpp:143:7:143:10 | this [post update] [b] | -| A.cpp:143:7:143:31 | ... = ... [c] | A.cpp:143:7:143:10 | this [post update] [b, c] | -| A.cpp:143:25:143:31 | new | A.cpp:143:7:143:31 | ... = ... | -| A.cpp:150:12:150:18 | new | A.cpp:151:18:151:18 | b | -| A.cpp:151:12:151:24 | call to D [b, c] | A.cpp:152:10:152:10 | d [b, c] | -| A.cpp:151:12:151:24 | call to D [b, c] | A.cpp:153:10:153:10 | d [b, c] | -| A.cpp:151:12:151:24 | call to D [b] | A.cpp:152:10:152:10 | d [b] | -| A.cpp:151:18:151:18 | b | A.cpp:140:13:140:13 | b | -| A.cpp:151:18:151:18 | b | A.cpp:151:12:151:24 | call to D [b] | -| A.cpp:151:18:151:18 | ref arg b [c] | A.cpp:154:10:154:10 | b [c] | -| A.cpp:152:10:152:10 | d [b, c] | A.cpp:152:13:152:13 | b [c] | -| A.cpp:152:10:152:10 | d [b] | A.cpp:152:13:152:13 | b | -| A.cpp:152:10:152:10 | d [post update] [b, c] | A.cpp:153:10:153:10 | d [b, c] | -| A.cpp:152:13:152:13 | b [c] | A.cpp:152:13:152:13 | ref arg b [c] | -| A.cpp:152:13:152:13 | b [c] | A.cpp:173:26:173:26 | o [c] | -| A.cpp:152:13:152:13 | ref arg b [c] | A.cpp:152:10:152:10 | d [post update] [b, c] | -| A.cpp:153:10:153:10 | d [b, c] | A.cpp:153:13:153:13 | b [c] | -| A.cpp:153:13:153:13 | b [c] | A.cpp:153:16:153:16 | c | -| A.cpp:154:10:154:10 | b [c] | A.cpp:154:13:154:13 | c | -| A.cpp:159:12:159:18 | new | A.cpp:160:29:160:29 | b | -| A.cpp:160:18:160:60 | call to MyList [head] | A.cpp:161:38:161:39 | l1 [head] | -| A.cpp:160:29:160:29 | b | A.cpp:160:18:160:60 | call to MyList [head] | -| A.cpp:160:29:160:29 | b | A.cpp:181:15:181:21 | newHead | -| A.cpp:161:18:161:40 | call to MyList [next, head] | A.cpp:162:38:162:39 | l2 [next, head] | -| A.cpp:161:38:161:39 | l1 [head] | A.cpp:161:18:161:40 | call to MyList [next, head] | -| A.cpp:161:38:161:39 | l1 [head] | A.cpp:181:32:181:35 | next [head] | -| A.cpp:162:18:162:40 | call to MyList [next, next, head] | A.cpp:165:10:165:11 | l3 [next, next, head] | -| A.cpp:162:18:162:40 | call to MyList [next, next, head] | A.cpp:167:44:167:44 | l [next, next, head] | -| A.cpp:162:38:162:39 | l2 [next, head] | A.cpp:162:18:162:40 | call to MyList [next, next, head] | -| A.cpp:162:38:162:39 | l2 [next, head] | A.cpp:181:32:181:35 | next [next, head] | -| A.cpp:165:10:165:11 | l3 [next, next, head] | A.cpp:165:14:165:17 | next [next, head] | -| A.cpp:165:10:165:11 | l3 [post update] [next, next, head] | A.cpp:167:44:167:44 | l [next, next, head] | -| A.cpp:165:14:165:17 | next [next, head] | A.cpp:165:20:165:23 | next [head] | -| A.cpp:165:14:165:17 | next [post update] [next, head] | A.cpp:165:10:165:11 | l3 [post update] [next, next, head] | -| A.cpp:165:20:165:23 | next [head] | A.cpp:165:26:165:29 | head | -| A.cpp:165:20:165:23 | next [head] | A.cpp:165:26:165:29 | head | -| A.cpp:165:20:165:23 | next [post update] [head] | A.cpp:165:14:165:17 | next [post update] [next, head] | -| A.cpp:165:26:165:29 | head | A.cpp:165:26:165:29 | ref arg head | -| A.cpp:165:26:165:29 | head | A.cpp:173:26:173:26 | o | -| A.cpp:165:26:165:29 | ref arg head | A.cpp:165:20:165:23 | next [post update] [head] | -| A.cpp:167:44:167:44 | l [next, head] | A.cpp:167:47:167:50 | next [head] | -| A.cpp:167:44:167:44 | l [next, next, head] | A.cpp:167:47:167:50 | next [next, head] | -| A.cpp:167:47:167:50 | next [head] | A.cpp:169:12:169:12 | l [head] | -| A.cpp:167:47:167:50 | next [next, head] | A.cpp:167:44:167:44 | l [next, head] | -| A.cpp:169:12:169:12 | l [head] | A.cpp:169:15:169:18 | head | -| A.cpp:173:26:173:26 | o | A.cpp:173:26:173:26 | o | -| A.cpp:173:26:173:26 | o [c] | A.cpp:173:26:173:26 | o [c] | -| A.cpp:181:15:181:21 | newHead | A.cpp:183:7:183:20 | ... = ... | -| A.cpp:181:32:181:35 | next [head] | A.cpp:184:7:184:23 | ... = ... [head] | -| A.cpp:181:32:181:35 | next [next, head] | A.cpp:184:7:184:23 | ... = ... [next, head] | -| A.cpp:183:7:183:20 | ... = ... | A.cpp:183:7:183:10 | this [post update] [head] | -| A.cpp:184:7:184:23 | ... = ... [head] | A.cpp:184:7:184:10 | this [post update] [next, head] | -| A.cpp:184:7:184:23 | ... = ... [next, head] | A.cpp:184:7:184:10 | this [post update] [next, next, head] | -| B.cpp:6:15:6:24 | new | B.cpp:7:25:7:25 | e | -| B.cpp:7:16:7:35 | call to Box1 [elem1] | B.cpp:8:25:8:26 | b1 [elem1] | -| B.cpp:7:25:7:25 | e | B.cpp:7:16:7:35 | call to Box1 [elem1] | -| B.cpp:7:25:7:25 | e | B.cpp:33:16:33:17 | e1 | -| B.cpp:8:16:8:27 | call to Box2 [box1, elem1] | B.cpp:9:10:9:11 | b2 [box1, elem1] | -| B.cpp:8:25:8:26 | b1 [elem1] | B.cpp:8:16:8:27 | call to Box2 [box1, elem1] | -| B.cpp:8:25:8:26 | b1 [elem1] | B.cpp:44:16:44:17 | b1 [elem1] | -| B.cpp:9:10:9:11 | b2 [box1, elem1] | B.cpp:9:14:9:17 | box1 [elem1] | -| B.cpp:9:14:9:17 | box1 [elem1] | B.cpp:9:20:9:24 | elem1 | -| B.cpp:15:15:15:27 | new | B.cpp:16:37:16:37 | e | -| B.cpp:16:16:16:38 | call to Box1 [elem2] | B.cpp:17:25:17:26 | b1 [elem2] | -| B.cpp:16:37:16:37 | e | B.cpp:16:16:16:38 | call to Box1 [elem2] | -| B.cpp:16:37:16:37 | e | B.cpp:33:26:33:27 | e2 | -| B.cpp:17:16:17:27 | call to Box2 [box1, elem2] | B.cpp:19:10:19:11 | b2 [box1, elem2] | -| B.cpp:17:25:17:26 | b1 [elem2] | B.cpp:17:16:17:27 | call to Box2 [box1, elem2] | -| B.cpp:17:25:17:26 | b1 [elem2] | B.cpp:44:16:44:17 | b1 [elem2] | -| B.cpp:19:10:19:11 | b2 [box1, elem2] | B.cpp:19:14:19:17 | box1 [elem2] | -| B.cpp:19:14:19:17 | box1 [elem2] | B.cpp:19:20:19:24 | elem2 | -| B.cpp:33:16:33:17 | e1 | B.cpp:35:7:35:22 | ... = ... | -| B.cpp:33:26:33:27 | e2 | B.cpp:36:7:36:22 | ... = ... | -| B.cpp:35:7:35:22 | ... = ... | B.cpp:35:7:35:10 | this [post update] [elem1] | -| B.cpp:36:7:36:22 | ... = ... | B.cpp:36:7:36:10 | this [post update] [elem2] | -| B.cpp:44:16:44:17 | b1 [elem1] | B.cpp:46:7:46:21 | ... = ... [elem1] | -| B.cpp:44:16:44:17 | b1 [elem2] | B.cpp:46:7:46:21 | ... = ... [elem2] | -| B.cpp:46:7:46:21 | ... = ... [elem1] | B.cpp:46:7:46:10 | this [post update] [box1, elem1] | -| B.cpp:46:7:46:21 | ... = ... [elem2] | B.cpp:46:7:46:10 | this [post update] [box1, elem2] | -| C.cpp:18:12:18:18 | call to C [s1] | C.cpp:19:5:19:5 | c [s1] | -| C.cpp:18:12:18:18 | call to C [s3] | C.cpp:19:5:19:5 | c [s3] | -| C.cpp:19:5:19:5 | c [s1] | C.cpp:27:8:27:11 | this [s1] | -| C.cpp:19:5:19:5 | c [s3] | C.cpp:27:8:27:11 | this [s3] | -| C.cpp:22:9:22:22 | constructor init of field s1 [post-this] [s1] | C.cpp:18:12:18:18 | call to C [s1] | -| C.cpp:22:12:22:21 | new | C.cpp:22:9:22:22 | constructor init of field s1 [post-this] [s1] | -| C.cpp:24:5:24:8 | this [post update] [s3] | C.cpp:18:12:18:18 | call to C [s3] | -| C.cpp:24:5:24:25 | ... = ... | C.cpp:24:5:24:8 | this [post update] [s3] | -| C.cpp:24:16:24:25 | new | C.cpp:24:5:24:25 | ... = ... | -| C.cpp:27:8:27:11 | this [s1] | C.cpp:29:10:29:11 | this [s1] | -| C.cpp:27:8:27:11 | this [s3] | C.cpp:31:10:31:11 | this [s3] | -| C.cpp:29:10:29:11 | this [s1] | C.cpp:29:10:29:11 | s1 | -| C.cpp:31:10:31:11 | this [s3] | C.cpp:31:10:31:11 | s3 | -| D.cpp:10:11:10:17 | this [elem] | D.cpp:10:30:10:33 | this [elem] | -| D.cpp:10:30:10:33 | this [elem] | D.cpp:10:30:10:33 | elem | -| D.cpp:11:24:11:24 | e | D.cpp:11:29:11:36 | ... = ... | -| D.cpp:11:29:11:36 | ... = ... | D.cpp:11:29:11:32 | this [post update] [elem] | -| D.cpp:17:11:17:17 | this [box, elem] | D.cpp:17:30:17:32 | this [box, elem] | -| D.cpp:17:30:17:32 | this [box, elem] | D.cpp:17:30:17:32 | box [elem] | -| D.cpp:21:30:21:31 | b2 [box, elem] | D.cpp:22:10:22:11 | b2 [box, elem] | -| D.cpp:22:10:22:11 | b2 [box, elem] | D.cpp:17:11:17:17 | this [box, elem] | -| D.cpp:22:10:22:11 | b2 [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:22:14:22:20 | call to getBox1 [elem] | D.cpp:22:25:22:31 | call to getElem | -| D.cpp:28:15:28:24 | new | D.cpp:30:5:30:20 | ... = ... | -| D.cpp:30:5:30:5 | b [post update] [box, elem] | D.cpp:31:14:31:14 | b [box, elem] | -| D.cpp:30:5:30:20 | ... = ... | D.cpp:30:8:30:10 | box [post update] [elem] | -| D.cpp:30:8:30:10 | box [post update] [elem] | D.cpp:30:5:30:5 | b [post update] [box, elem] | -| D.cpp:31:14:31:14 | b [box, elem] | D.cpp:21:30:21:31 | b2 [box, elem] | -| D.cpp:35:15:35:24 | new | D.cpp:37:21:37:21 | e | -| D.cpp:37:5:37:5 | b [post update] [box, elem] | D.cpp:38:14:38:14 | b [box, elem] | -| D.cpp:37:8:37:10 | ref arg box [elem] | D.cpp:37:5:37:5 | b [post update] [box, elem] | -| D.cpp:37:21:37:21 | e | D.cpp:11:24:11:24 | e | -| D.cpp:37:21:37:21 | e | D.cpp:37:8:37:10 | ref arg box [elem] | -| D.cpp:38:14:38:14 | b [box, elem] | D.cpp:21:30:21:31 | b2 [box, elem] | -| D.cpp:42:15:42:24 | new | D.cpp:44:5:44:26 | ... = ... | -| D.cpp:44:5:44:5 | ref arg b [box, elem] | D.cpp:45:14:45:14 | b [box, elem] | -| D.cpp:44:5:44:26 | ... = ... | D.cpp:44:8:44:14 | call to getBox1 [post update] [elem] | -| D.cpp:44:8:44:14 | call to getBox1 [post update] [elem] | D.cpp:44:5:44:5 | ref arg b [box, elem] | -| D.cpp:45:14:45:14 | b [box, elem] | D.cpp:21:30:21:31 | b2 [box, elem] | -| D.cpp:49:15:49:24 | new | D.cpp:51:27:51:27 | e | -| D.cpp:51:5:51:5 | ref arg b [box, elem] | D.cpp:52:14:52:14 | b [box, elem] | -| D.cpp:51:8:51:14 | ref arg call to getBox1 [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:51:27:51:27 | e | D.cpp:51:8:51:14 | ref arg call to getBox1 [elem] | -| D.cpp:52:14:52:14 | b [box, elem] | D.cpp:21:30:21:31 | b2 [box, elem] | -| D.cpp:56:15:56:24 | new | D.cpp:58:5:58:27 | ... = ... | -| D.cpp:58:5:58:12 | boxfield [post update] [box, elem] | D.cpp:58:5:58:12 | this [post update] [boxfield, box, elem] | -| D.cpp:58:5:58:12 | this [post update] [boxfield, box, elem] | D.cpp:59:5:59:7 | this [boxfield, box, elem] | -| D.cpp:58:5:58:27 | ... = ... | D.cpp:58:15:58:17 | box [post update] [elem] | -| D.cpp:58:15:58:17 | box [post update] [elem] | D.cpp:58:5:58:12 | boxfield [post update] [box, elem] | -| D.cpp:59:5:59:7 | this [boxfield, box, elem] | D.cpp:63:8:63:10 | this [boxfield, box, elem] | -| D.cpp:63:8:63:10 | this [boxfield, box, elem] | D.cpp:64:10:64:17 | this [boxfield, box, elem] | -| D.cpp:64:10:64:17 | boxfield [box, elem] | D.cpp:64:20:64:22 | box [elem] | -| D.cpp:64:10:64:17 | this [boxfield, box, elem] | D.cpp:64:10:64:17 | boxfield [box, elem] | -| D.cpp:64:20:64:22 | box [elem] | D.cpp:64:25:64:28 | elem | -| E.cpp:19:27:19:27 | p [data, buffer] | E.cpp:21:10:21:10 | p [data, buffer] | -| E.cpp:21:10:21:10 | p [data, buffer] | E.cpp:21:13:21:16 | data [buffer] | -| E.cpp:21:13:21:16 | data [buffer] | E.cpp:21:18:21:23 | buffer | -| E.cpp:28:21:28:23 | ref arg raw | E.cpp:31:10:31:12 | raw | -| E.cpp:29:21:29:21 | b [post update] [buffer] | E.cpp:32:10:32:10 | b [buffer] | -| E.cpp:29:24:29:29 | ref arg buffer | E.cpp:29:21:29:21 | b [post update] [buffer] | -| E.cpp:30:21:30:21 | p [post update] [data, buffer] | E.cpp:33:19:33:19 | p [data, buffer] | -| E.cpp:30:23:30:26 | data [post update] [buffer] | E.cpp:30:21:30:21 | p [post update] [data, buffer] | -| E.cpp:30:28:30:33 | ref arg buffer | E.cpp:30:23:30:26 | data [post update] [buffer] | -| E.cpp:32:10:32:10 | b [buffer] | E.cpp:32:13:32:18 | buffer | -| E.cpp:33:18:33:19 | & ... [data, buffer] | E.cpp:19:27:19:27 | p [data, buffer] | -| E.cpp:33:19:33:19 | p [data, buffer] | E.cpp:33:18:33:19 | & ... [data, buffer] | -| aliasing.cpp:8:23:8:23 | s [m1] | aliasing.cpp:25:17:25:19 | ref arg & ... [m1] | -| aliasing.cpp:9:3:9:3 | s [post update] [m1] | aliasing.cpp:8:23:8:23 | s [m1] | -| aliasing.cpp:9:3:9:3 | s [post update] [m1] | aliasing.cpp:25:17:25:19 | ref arg & ... [m1] | -| aliasing.cpp:9:3:9:22 | ... = ... | aliasing.cpp:9:3:9:3 | s [post update] [m1] | -| aliasing.cpp:9:11:9:20 | call to user_input | aliasing.cpp:9:3:9:22 | ... = ... | -| aliasing.cpp:12:25:12:25 | s [m1] | aliasing.cpp:26:19:26:20 | ref arg s2 [m1] | -| aliasing.cpp:13:3:13:3 | s [post update] [m1] | aliasing.cpp:12:25:12:25 | s [m1] | -| aliasing.cpp:13:3:13:3 | s [post update] [m1] | aliasing.cpp:26:19:26:20 | ref arg s2 [m1] | -| aliasing.cpp:13:3:13:21 | ... = ... | aliasing.cpp:13:3:13:3 | s [post update] [m1] | -| aliasing.cpp:13:10:13:19 | call to user_input | aliasing.cpp:13:3:13:21 | ... = ... | -| aliasing.cpp:25:17:25:19 | ref arg & ... [m1] | aliasing.cpp:29:8:29:9 | s1 [m1] | -| aliasing.cpp:26:19:26:20 | ref arg s2 [m1] | aliasing.cpp:30:8:30:9 | s2 [m1] | -| aliasing.cpp:29:8:29:9 | s1 [m1] | aliasing.cpp:29:11:29:12 | m1 | -| aliasing.cpp:30:8:30:9 | s2 [m1] | aliasing.cpp:30:11:30:12 | m1 | -| aliasing.cpp:60:3:60:4 | s2 [post update] [m1] | aliasing.cpp:62:8:62:12 | copy2 [m1] | -| aliasing.cpp:60:3:60:22 | ... = ... | aliasing.cpp:60:3:60:4 | s2 [post update] [m1] | -| aliasing.cpp:60:11:60:20 | call to user_input | aliasing.cpp:60:3:60:22 | ... = ... | -| aliasing.cpp:62:8:62:12 | copy2 [m1] | aliasing.cpp:62:14:62:15 | m1 | -| aliasing.cpp:92:3:92:3 | w [post update] [s, m1] | aliasing.cpp:93:8:93:8 | w [s, m1] | -| aliasing.cpp:92:3:92:23 | ... = ... | aliasing.cpp:92:5:92:5 | s [post update] [m1] | -| aliasing.cpp:92:5:92:5 | s [post update] [m1] | aliasing.cpp:92:3:92:3 | w [post update] [s, m1] | -| aliasing.cpp:92:12:92:21 | call to user_input | aliasing.cpp:92:3:92:23 | ... = ... | -| aliasing.cpp:93:8:93:8 | w [s, m1] | aliasing.cpp:93:10:93:10 | s [m1] | -| aliasing.cpp:93:10:93:10 | s [m1] | aliasing.cpp:93:12:93:13 | m1 | -| aliasing.cpp:105:23:105:24 | pa | aliasing.cpp:158:17:158:20 | ref arg data | -| aliasing.cpp:105:23:105:24 | pa | aliasing.cpp:164:17:164:20 | ref arg data | -| aliasing.cpp:105:23:105:24 | pa | aliasing.cpp:175:15:175:22 | ref arg & ... | -| aliasing.cpp:105:23:105:24 | pa | aliasing.cpp:187:15:187:22 | ref arg & ... | -| aliasing.cpp:105:23:105:24 | pa | aliasing.cpp:200:15:200:24 | ref arg & ... | -| aliasing.cpp:106:4:106:5 | pa [inner post update] | aliasing.cpp:158:17:158:20 | ref arg data | -| aliasing.cpp:106:4:106:5 | pa [inner post update] | aliasing.cpp:164:17:164:20 | ref arg data | -| aliasing.cpp:106:4:106:5 | pa [inner post update] | aliasing.cpp:175:15:175:22 | ref arg & ... | -| aliasing.cpp:106:4:106:5 | pa [inner post update] | aliasing.cpp:187:15:187:22 | ref arg & ... | -| aliasing.cpp:106:4:106:5 | pa [inner post update] | aliasing.cpp:200:15:200:24 | ref arg & ... | -| aliasing.cpp:106:9:106:18 | call to user_input | aliasing.cpp:105:23:105:24 | pa | -| aliasing.cpp:106:9:106:18 | call to user_input | aliasing.cpp:106:4:106:5 | pa [inner post update] | -| aliasing.cpp:158:15:158:15 | s [post update] [data] | aliasing.cpp:159:9:159:9 | s [data] | -| aliasing.cpp:158:17:158:20 | ref arg data | aliasing.cpp:158:15:158:15 | s [post update] [data] | -| aliasing.cpp:159:9:159:9 | s [data] | aliasing.cpp:159:11:159:14 | data | -| aliasing.cpp:159:11:159:14 | data | aliasing.cpp:159:8:159:14 | * ... | -| aliasing.cpp:164:15:164:15 | s [post update] [data] | aliasing.cpp:165:8:165:8 | s [data] | -| aliasing.cpp:164:17:164:20 | ref arg data | aliasing.cpp:164:15:164:15 | s [post update] [data] | -| aliasing.cpp:165:8:165:8 | s [data] | aliasing.cpp:165:10:165:13 | data | -| aliasing.cpp:165:10:165:13 | data | aliasing.cpp:165:8:165:16 | access to array | -| aliasing.cpp:175:15:175:22 | ref arg & ... | aliasing.cpp:175:21:175:22 | m1 [inner post update] | -| aliasing.cpp:175:16:175:17 | s2 [post update] [s, m1] | aliasing.cpp:176:8:176:9 | s2 [s, m1] | -| aliasing.cpp:175:19:175:19 | s [post update] [m1] | aliasing.cpp:175:16:175:17 | s2 [post update] [s, m1] | -| aliasing.cpp:175:21:175:22 | m1 [inner post update] | aliasing.cpp:175:19:175:19 | s [post update] [m1] | -| aliasing.cpp:176:8:176:9 | s2 [s, m1] | aliasing.cpp:176:11:176:11 | s [m1] | -| aliasing.cpp:176:11:176:11 | s [m1] | aliasing.cpp:176:13:176:14 | m1 | -| aliasing.cpp:187:15:187:22 | ref arg & ... | aliasing.cpp:187:21:187:22 | m1 [inner post update] | -| aliasing.cpp:187:16:187:17 | s2 [post update] [s, m1] | aliasing.cpp:189:8:189:11 | s2_2 [s, m1] | -| aliasing.cpp:187:19:187:19 | s [post update] [m1] | aliasing.cpp:187:16:187:17 | s2 [post update] [s, m1] | -| aliasing.cpp:187:21:187:22 | m1 [inner post update] | aliasing.cpp:187:19:187:19 | s [post update] [m1] | -| aliasing.cpp:189:8:189:11 | s2_2 [s, m1] | aliasing.cpp:189:13:189:13 | s [m1] | -| aliasing.cpp:189:13:189:13 | s [m1] | aliasing.cpp:189:15:189:16 | m1 | -| aliasing.cpp:200:15:200:24 | ref arg & ... | aliasing.cpp:200:23:200:24 | m1 [inner post update] | -| aliasing.cpp:200:16:200:18 | ps2 [post update] [s, m1] | aliasing.cpp:201:8:201:10 | ps2 [s, m1] | -| aliasing.cpp:200:21:200:21 | s [post update] [m1] | aliasing.cpp:200:16:200:18 | ps2 [post update] [s, m1] | -| aliasing.cpp:200:23:200:24 | m1 [inner post update] | aliasing.cpp:200:21:200:21 | s [post update] [m1] | -| aliasing.cpp:201:8:201:10 | ps2 [s, m1] | aliasing.cpp:201:13:201:13 | s [m1] | -| aliasing.cpp:201:13:201:13 | s [m1] | aliasing.cpp:201:15:201:16 | m1 | -| arrays.cpp:6:12:6:21 | call to user_input | arrays.cpp:7:8:7:13 | access to array | -| arrays.cpp:6:12:6:21 | call to user_input | arrays.cpp:8:8:8:13 | access to array | -| arrays.cpp:6:12:6:21 | call to user_input | arrays.cpp:9:8:9:11 | * ... | -| arrays.cpp:6:12:6:21 | call to user_input | arrays.cpp:10:8:10:15 | * ... | -| arrays.cpp:15:14:15:23 | call to user_input | arrays.cpp:16:8:16:13 | access to array | -| arrays.cpp:15:14:15:23 | call to user_input | arrays.cpp:17:8:17:13 | access to array | -| arrays.cpp:36:3:36:3 | o [post update] [nested, arr, data] | arrays.cpp:37:8:37:8 | o [nested, arr, data] | -| arrays.cpp:36:3:36:3 | o [post update] [nested, arr, data] | arrays.cpp:38:8:38:8 | o [nested, arr, data] | -| arrays.cpp:36:3:36:17 | access to array [post update] [data] | arrays.cpp:36:12:36:14 | arr [inner post update] [data] | -| arrays.cpp:36:3:36:37 | ... = ... | arrays.cpp:36:3:36:17 | access to array [post update] [data] | -| arrays.cpp:36:5:36:10 | nested [post update] [arr, data] | arrays.cpp:36:3:36:3 | o [post update] [nested, arr, data] | -| arrays.cpp:36:12:36:14 | arr [inner post update] [data] | arrays.cpp:36:5:36:10 | nested [post update] [arr, data] | -| arrays.cpp:36:26:36:35 | call to user_input | arrays.cpp:36:3:36:37 | ... = ... | -| arrays.cpp:37:8:37:8 | o [nested, arr, data] | arrays.cpp:37:10:37:15 | nested [arr, data] | -| arrays.cpp:37:8:37:8 | o [post update] [nested, arr, data] | arrays.cpp:38:8:38:8 | o [nested, arr, data] | -| arrays.cpp:37:8:37:22 | access to array [data] | arrays.cpp:37:24:37:27 | data | -| arrays.cpp:37:8:37:22 | access to array [data] | arrays.cpp:37:24:37:27 | data | -| arrays.cpp:37:8:37:22 | access to array [post update] [data] | arrays.cpp:37:17:37:19 | arr [inner post update] [data] | -| arrays.cpp:37:10:37:15 | nested [arr, data] | arrays.cpp:37:17:37:19 | arr [data] | -| arrays.cpp:37:10:37:15 | nested [post update] [arr, data] | arrays.cpp:37:8:37:8 | o [post update] [nested, arr, data] | -| arrays.cpp:37:17:37:19 | arr [data] | arrays.cpp:37:8:37:22 | access to array [data] | -| arrays.cpp:37:17:37:19 | arr [inner post update] [data] | arrays.cpp:37:10:37:15 | nested [post update] [arr, data] | -| arrays.cpp:37:24:37:27 | data | arrays.cpp:37:24:37:27 | ref arg data | -| arrays.cpp:37:24:37:27 | data | realistic.cpp:41:17:41:17 | o | -| arrays.cpp:37:24:37:27 | ref arg data | arrays.cpp:37:8:37:22 | access to array [post update] [data] | -| arrays.cpp:38:8:38:8 | o [nested, arr, data] | arrays.cpp:38:10:38:15 | nested [arr, data] | -| arrays.cpp:38:8:38:22 | access to array [data] | arrays.cpp:38:24:38:27 | data | -| arrays.cpp:38:10:38:15 | nested [arr, data] | arrays.cpp:38:17:38:19 | arr [data] | -| arrays.cpp:38:17:38:19 | arr [data] | arrays.cpp:38:8:38:22 | access to array [data] | -| arrays.cpp:42:3:42:3 | o [post update] [indirect, arr, data] | arrays.cpp:43:8:43:8 | o [indirect, arr, data] | -| arrays.cpp:42:3:42:3 | o [post update] [indirect, arr, data] | arrays.cpp:44:8:44:8 | o [indirect, arr, data] | -| arrays.cpp:42:3:42:20 | access to array [post update] [data] | arrays.cpp:42:15:42:17 | arr [inner post update] [data] | -| arrays.cpp:42:3:42:40 | ... = ... | arrays.cpp:42:3:42:20 | access to array [post update] [data] | -| arrays.cpp:42:5:42:12 | indirect [post update] [arr, data] | arrays.cpp:42:3:42:3 | o [post update] [indirect, arr, data] | -| arrays.cpp:42:15:42:17 | arr [inner post update] [data] | arrays.cpp:42:5:42:12 | indirect [post update] [arr, data] | -| arrays.cpp:42:29:42:38 | call to user_input | arrays.cpp:42:3:42:40 | ... = ... | -| arrays.cpp:43:8:43:8 | o [indirect, arr, data] | arrays.cpp:43:10:43:17 | indirect [arr, data] | -| arrays.cpp:43:8:43:8 | o [post update] [indirect, arr, data] | arrays.cpp:44:8:44:8 | o [indirect, arr, data] | -| arrays.cpp:43:8:43:25 | access to array [data] | arrays.cpp:43:27:43:30 | data | -| arrays.cpp:43:8:43:25 | access to array [data] | arrays.cpp:43:27:43:30 | data | -| arrays.cpp:43:8:43:25 | access to array [post update] [data] | arrays.cpp:43:20:43:22 | arr [inner post update] [data] | -| arrays.cpp:43:10:43:17 | indirect [arr, data] | arrays.cpp:43:20:43:22 | arr [data] | -| arrays.cpp:43:10:43:17 | indirect [post update] [arr, data] | arrays.cpp:43:8:43:8 | o [post update] [indirect, arr, data] | -| arrays.cpp:43:20:43:22 | arr [data] | arrays.cpp:43:8:43:25 | access to array [data] | -| arrays.cpp:43:20:43:22 | arr [inner post update] [data] | arrays.cpp:43:10:43:17 | indirect [post update] [arr, data] | -| arrays.cpp:43:27:43:30 | data | arrays.cpp:43:27:43:30 | ref arg data | -| arrays.cpp:43:27:43:30 | data | realistic.cpp:41:17:41:17 | o | -| arrays.cpp:43:27:43:30 | ref arg data | arrays.cpp:43:8:43:25 | access to array [post update] [data] | -| arrays.cpp:44:8:44:8 | o [indirect, arr, data] | arrays.cpp:44:10:44:17 | indirect [arr, data] | -| arrays.cpp:44:8:44:25 | access to array [data] | arrays.cpp:44:27:44:30 | data | -| arrays.cpp:44:10:44:17 | indirect [arr, data] | arrays.cpp:44:20:44:22 | arr [data] | -| arrays.cpp:44:20:44:22 | arr [data] | arrays.cpp:44:8:44:25 | access to array [data] | -| by_reference.cpp:11:48:11:52 | value | by_reference.cpp:12:5:12:16 | ... = ... | -| by_reference.cpp:12:5:12:5 | s [post update] [a] | by_reference.cpp:11:39:11:39 | s [a] | -| by_reference.cpp:12:5:12:16 | ... = ... | by_reference.cpp:12:5:12:5 | s [post update] [a] | -| by_reference.cpp:15:26:15:30 | value | by_reference.cpp:16:5:16:19 | ... = ... | -| by_reference.cpp:16:5:16:19 | ... = ... | by_reference.cpp:16:5:16:8 | this [post update] [a] | -| by_reference.cpp:19:28:19:32 | value | by_reference.cpp:20:23:20:27 | value | -| by_reference.cpp:20:23:20:27 | value | by_reference.cpp:15:26:15:30 | value | -| by_reference.cpp:20:23:20:27 | value | by_reference.cpp:20:5:20:8 | ref arg this [a] | -| by_reference.cpp:23:34:23:38 | value | by_reference.cpp:24:25:24:29 | value | -| by_reference.cpp:24:25:24:29 | value | by_reference.cpp:11:48:11:52 | value | -| by_reference.cpp:24:25:24:29 | value | by_reference.cpp:24:19:24:22 | ref arg this [a] | -| by_reference.cpp:31:46:31:46 | s [a] | by_reference.cpp:32:12:32:12 | s [a] | -| by_reference.cpp:32:12:32:12 | s [a] | by_reference.cpp:32:15:32:15 | a | -| by_reference.cpp:35:9:35:19 | this [a] | by_reference.cpp:36:12:36:15 | this [a] | -| by_reference.cpp:36:12:36:15 | this [a] | by_reference.cpp:36:18:36:18 | a | -| by_reference.cpp:39:9:39:21 | this [a] | by_reference.cpp:40:12:40:15 | this [a] | -| by_reference.cpp:40:12:40:15 | this [a] | by_reference.cpp:35:9:35:19 | this [a] | -| by_reference.cpp:40:12:40:15 | this [a] | by_reference.cpp:40:18:40:28 | call to getDirectly | -| by_reference.cpp:43:9:43:27 | this [a] | by_reference.cpp:44:26:44:29 | this [a] | -| by_reference.cpp:44:26:44:29 | this [a] | by_reference.cpp:31:46:31:46 | s [a] | -| by_reference.cpp:44:26:44:29 | this [a] | by_reference.cpp:44:12:44:24 | call to nonMemberGetA | -| by_reference.cpp:50:3:50:3 | ref arg s [a] | by_reference.cpp:51:8:51:8 | s [a] | -| by_reference.cpp:50:17:50:26 | call to user_input | by_reference.cpp:15:26:15:30 | value | -| by_reference.cpp:50:17:50:26 | call to user_input | 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:51:8:51:8 | s [a] | by_reference.cpp:51:10:51:20 | call to getDirectly | -| by_reference.cpp:56:3:56:3 | ref arg s [a] | by_reference.cpp:57:8:57:8 | s [a] | -| by_reference.cpp:56:19:56:28 | call to user_input | by_reference.cpp:19:28:19:32 | value | -| by_reference.cpp:56:19:56:28 | call to user_input | 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:57:8:57:8 | s [a] | by_reference.cpp:57:10:57:22 | call to getIndirectly | -| by_reference.cpp:62:3:62:3 | ref arg s [a] | by_reference.cpp:63:8:63:8 | s [a] | -| by_reference.cpp:62:25:62:34 | call to user_input | by_reference.cpp:23:34:23:38 | value | -| by_reference.cpp:62:25:62:34 | call to user_input | 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:63:8:63:8 | s [a] | by_reference.cpp:63:10:63:28 | call to getThroughNonMember | -| by_reference.cpp:68:17:68:18 | ref arg & ... [a] | by_reference.cpp:69:23:69:23 | s [a] | -| by_reference.cpp:68:21:68:30 | call to user_input | by_reference.cpp:11:48:11:52 | value | -| by_reference.cpp:68:21:68:30 | call to user_input | 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:69:22:69:23 | & ... [a] | by_reference.cpp:69:8:69:20 | call to nonMemberGetA | -| by_reference.cpp:69:23:69:23 | s [a] | by_reference.cpp:69:22:69:23 | & ... [a] | -| by_reference.cpp:83:31:83:35 | inner [a] | by_reference.cpp:102:21:102:39 | ref arg & ... [a] | -| by_reference.cpp:83:31:83:35 | inner [a] | by_reference.cpp:103:27:103:35 | ref arg inner_ptr [a] | -| by_reference.cpp:83:31:83:35 | inner [a] | by_reference.cpp:106:21:106:41 | ref arg & ... [a] | -| by_reference.cpp:83:31:83:35 | inner [a] | by_reference.cpp:107:29:107:37 | ref arg inner_ptr [a] | -| by_reference.cpp:84:3:84:7 | inner [post update] [a] | by_reference.cpp:83:31:83:35 | inner [a] | -| by_reference.cpp:84:3:84:7 | inner [post update] [a] | by_reference.cpp:102:21:102:39 | ref arg & ... [a] | -| by_reference.cpp:84:3:84:7 | inner [post update] [a] | by_reference.cpp:103:27:103:35 | ref arg inner_ptr [a] | -| by_reference.cpp:84:3:84:7 | inner [post update] [a] | by_reference.cpp:106:21:106:41 | ref arg & ... [a] | -| by_reference.cpp:84:3:84:7 | inner [post update] [a] | by_reference.cpp:107:29:107:37 | ref arg inner_ptr [a] | -| by_reference.cpp:84:3:84:25 | ... = ... | by_reference.cpp:84:3:84:7 | inner [post update] [a] | -| by_reference.cpp:84:14:84:23 | call to user_input | by_reference.cpp:84:3:84:25 | ... = ... | -| by_reference.cpp:87:31:87:35 | inner [a] | by_reference.cpp:122:27:122:38 | ref arg inner_nested [a] | -| by_reference.cpp:87:31:87:35 | inner [a] | by_reference.cpp:123:21:123:36 | ref arg * ... [a] | -| by_reference.cpp:87:31:87:35 | inner [a] | by_reference.cpp:126:29:126:40 | ref arg inner_nested [a] | -| by_reference.cpp:87:31:87:35 | inner [a] | by_reference.cpp:127:21:127:38 | ref arg * ... [a] | -| by_reference.cpp:88:3:88:7 | inner [post update] [a] | by_reference.cpp:87:31:87:35 | inner [a] | -| by_reference.cpp:88:3:88:7 | inner [post update] [a] | by_reference.cpp:122:27:122:38 | ref arg inner_nested [a] | -| by_reference.cpp:88:3:88:7 | inner [post update] [a] | by_reference.cpp:123:21:123:36 | ref arg * ... [a] | -| by_reference.cpp:88:3:88:7 | inner [post update] [a] | by_reference.cpp:126:29:126:40 | ref arg inner_nested [a] | -| by_reference.cpp:88:3:88:7 | inner [post update] [a] | by_reference.cpp:127:21:127:38 | ref arg * ... [a] | -| by_reference.cpp:88:3:88:24 | ... = ... | by_reference.cpp:88:3:88:7 | inner [post update] [a] | -| by_reference.cpp:88:13:88:22 | call to user_input | by_reference.cpp:88:3:88:24 | ... = ... | -| by_reference.cpp:91:25:91:26 | pa | by_reference.cpp:104:15:104:22 | ref arg & ... | -| by_reference.cpp:91:25:91:26 | pa | by_reference.cpp:108:15:108:24 | ref arg & ... | -| by_reference.cpp:92:4:92:5 | pa [inner post update] | by_reference.cpp:104:15:104:22 | ref arg & ... | -| by_reference.cpp:92:4:92:5 | pa [inner post update] | by_reference.cpp:108:15:108:24 | ref arg & ... | -| by_reference.cpp:92:9:92:18 | call to user_input | by_reference.cpp:91:25:91:26 | pa | -| by_reference.cpp:92:9:92:18 | call to user_input | by_reference.cpp:92:4:92:5 | pa [inner post update] | -| by_reference.cpp:95:25:95:26 | pa | by_reference.cpp:124:21:124:21 | ref arg a | -| by_reference.cpp:95:25:95:26 | pa | by_reference.cpp:128:23:128:23 | ref arg a | -| by_reference.cpp:96:8:96:17 | call to user_input | by_reference.cpp:95:25:95:26 | pa | -| by_reference.cpp:102:21:102:39 | ref arg & ... [a] | by_reference.cpp:102:28:102:39 | inner_nested [inner post update] [a] | -| by_reference.cpp:102:22:102:26 | outer [post update] [inner_nested, a] | by_reference.cpp:110:8:110:12 | outer [inner_nested, a] | -| by_reference.cpp:102:28:102:39 | inner_nested [inner post update] [a] | by_reference.cpp:102:22:102:26 | outer [post update] [inner_nested, a] | -| by_reference.cpp:103:21:103:25 | outer [post update] [inner_ptr, a] | by_reference.cpp:111:8:111:12 | outer [inner_ptr, a] | -| by_reference.cpp:103:27:103:35 | ref arg inner_ptr [a] | by_reference.cpp:103:21:103:25 | outer [post update] [inner_ptr, a] | -| by_reference.cpp:104:15:104:22 | ref arg & ... | by_reference.cpp:104:22:104:22 | a [inner post update] | -| by_reference.cpp:104:16:104:20 | outer [post update] [a] | by_reference.cpp:112:8:112:12 | outer [a] | -| by_reference.cpp:104:22:104:22 | a [inner post update] | by_reference.cpp:104:16:104:20 | outer [post update] [a] | -| by_reference.cpp:106:21:106:41 | ref arg & ... [a] | by_reference.cpp:106:30:106:41 | inner_nested [inner post update] [a] | -| by_reference.cpp:106:22:106:27 | pouter [post update] [inner_nested, a] | by_reference.cpp:114:8:114:13 | pouter [inner_nested, a] | -| by_reference.cpp:106:30:106:41 | inner_nested [inner post update] [a] | by_reference.cpp:106:22:106:27 | pouter [post update] [inner_nested, a] | -| by_reference.cpp:107:21:107:26 | pouter [post update] [inner_ptr, a] | by_reference.cpp:115:8:115:13 | pouter [inner_ptr, a] | -| by_reference.cpp:107:29:107:37 | ref arg inner_ptr [a] | by_reference.cpp:107:21:107:26 | pouter [post update] [inner_ptr, a] | -| by_reference.cpp:108:15:108:24 | ref arg & ... | by_reference.cpp:108:24:108:24 | a [inner post update] | -| by_reference.cpp:108:16:108:21 | pouter [post update] [a] | by_reference.cpp:116:8:116:13 | pouter [a] | -| by_reference.cpp:108:24:108:24 | a [inner post update] | by_reference.cpp:108:16:108:21 | pouter [post update] [a] | -| by_reference.cpp:110:8:110:12 | outer [inner_nested, a] | by_reference.cpp:110:14:110:25 | inner_nested [a] | -| by_reference.cpp:110:14:110:25 | inner_nested [a] | by_reference.cpp:110:27:110:27 | a | -| by_reference.cpp:111:8:111:12 | outer [inner_ptr, a] | by_reference.cpp:111:14:111:22 | inner_ptr [a] | -| by_reference.cpp:111:14:111:22 | inner_ptr [a] | by_reference.cpp:111:25:111:25 | a | -| by_reference.cpp:112:8:112:12 | outer [a] | by_reference.cpp:112:14:112:14 | a | -| by_reference.cpp:114:8:114:13 | pouter [inner_nested, a] | by_reference.cpp:114:16:114:27 | inner_nested [a] | -| by_reference.cpp:114:16:114:27 | inner_nested [a] | by_reference.cpp:114:29:114:29 | a | -| by_reference.cpp:115:8:115:13 | pouter [inner_ptr, a] | by_reference.cpp:115:16:115:24 | inner_ptr [a] | -| by_reference.cpp:115:16:115:24 | inner_ptr [a] | by_reference.cpp:115:27:115:27 | a | -| by_reference.cpp:116:8:116:13 | pouter [a] | by_reference.cpp:116:16:116:16 | a | -| by_reference.cpp:122:21:122:25 | outer [post update] [inner_nested, a] | by_reference.cpp:130:8:130:12 | outer [inner_nested, a] | -| by_reference.cpp:122:27:122:38 | ref arg inner_nested [a] | by_reference.cpp:122:21:122:25 | outer [post update] [inner_nested, a] | -| by_reference.cpp:123:21:123:36 | ref arg * ... [a] | by_reference.cpp:123:28:123:36 | inner_ptr [inner post update] [a] | -| by_reference.cpp:123:22:123:26 | outer [post update] [inner_ptr, a] | by_reference.cpp:131:8:131:12 | outer [inner_ptr, a] | -| by_reference.cpp:123:28:123:36 | inner_ptr [inner post update] [a] | by_reference.cpp:123:22:123:26 | outer [post update] [inner_ptr, a] | -| by_reference.cpp:124:15:124:19 | outer [post update] [a] | by_reference.cpp:132:8:132:12 | outer [a] | -| by_reference.cpp:124:21:124:21 | ref arg a | by_reference.cpp:124:15:124:19 | outer [post update] [a] | -| by_reference.cpp:126:21:126:26 | pouter [post update] [inner_nested, a] | by_reference.cpp:134:8:134:13 | pouter [inner_nested, a] | -| by_reference.cpp:126:29:126:40 | ref arg inner_nested [a] | by_reference.cpp:126:21:126:26 | pouter [post update] [inner_nested, a] | -| by_reference.cpp:127:21:127:38 | ref arg * ... [a] | by_reference.cpp:127:30:127:38 | inner_ptr [inner post update] [a] | -| by_reference.cpp:127:22:127:27 | pouter [post update] [inner_ptr, a] | by_reference.cpp:135:8:135:13 | pouter [inner_ptr, a] | -| by_reference.cpp:127:30:127:38 | inner_ptr [inner post update] [a] | by_reference.cpp:127:22:127:27 | pouter [post update] [inner_ptr, a] | -| by_reference.cpp:128:15:128:20 | pouter [post update] [a] | by_reference.cpp:136:8:136:13 | pouter [a] | -| by_reference.cpp:128:23:128:23 | ref arg a | by_reference.cpp:128:15:128:20 | pouter [post update] [a] | -| by_reference.cpp:130:8:130:12 | outer [inner_nested, a] | by_reference.cpp:130:14:130:25 | inner_nested [a] | -| by_reference.cpp:130:14:130:25 | inner_nested [a] | by_reference.cpp:130:27:130:27 | a | -| by_reference.cpp:131:8:131:12 | outer [inner_ptr, a] | by_reference.cpp:131:14:131:22 | inner_ptr [a] | -| by_reference.cpp:131:14:131:22 | inner_ptr [a] | by_reference.cpp:131:25:131:25 | a | -| by_reference.cpp:132:8:132:12 | outer [a] | by_reference.cpp:132:14:132:14 | a | -| by_reference.cpp:134:8:134:13 | pouter [inner_nested, a] | by_reference.cpp:134:16:134:27 | inner_nested [a] | -| by_reference.cpp:134:16:134:27 | inner_nested [a] | by_reference.cpp:134:29:134:29 | a | -| by_reference.cpp:135:8:135:13 | pouter [inner_ptr, a] | by_reference.cpp:135:16:135:24 | inner_ptr [a] | -| by_reference.cpp:135:16:135:24 | inner_ptr [a] | by_reference.cpp:135:27:135:27 | a | -| by_reference.cpp:136:8:136:13 | pouter [a] | by_reference.cpp:136:16:136:16 | a | -| clearning.cpp:53:4:53:4 | s [post update] [x] | clearning.cpp:55:8:55:8 | s [x] | -| clearning.cpp:53:6:53:6 | x [inner post update] | clearning.cpp:53:4:53:4 | s [post update] [x] | -| clearning.cpp:53:10:53:19 | call to user_input | clearning.cpp:53:6:53:6 | x [inner post update] | -| clearning.cpp:55:8:55:8 | s [x] | clearning.cpp:55:10:55:10 | x | -| clearning.cpp:124:2:124:2 | s [post update] [val] | clearning.cpp:126:7:126:7 | s [val] | -| clearning.cpp:124:2:124:25 | ... = ... | clearning.cpp:124:2:124:2 | s [post update] [val] | -| clearning.cpp:124:10:124:19 | call to user_input | clearning.cpp:124:2:124:25 | ... = ... | -| clearning.cpp:126:7:126:7 | s [val] | clearning.cpp:126:9:126:11 | val | -| clearning.cpp:131:2:131:2 | s [post update] [val] | clearning.cpp:133:7:133:7 | s [val] | -| clearning.cpp:131:2:131:25 | ... = ... | clearning.cpp:131:2:131:2 | s [post update] [val] | -| clearning.cpp:131:10:131:19 | call to user_input | clearning.cpp:131:2:131:25 | ... = ... | -| clearning.cpp:133:7:133:7 | s [val] | clearning.cpp:133:9:133:11 | val | -| clearning.cpp:138:2:138:2 | s [post update] [val] | clearning.cpp:140:7:140:7 | s [val] | -| clearning.cpp:138:2:138:25 | ... = ... | clearning.cpp:138:2:138:2 | s [post update] [val] | -| clearning.cpp:138:10:138:19 | call to user_input | clearning.cpp:138:2:138:25 | ... = ... | -| clearning.cpp:140:7:140:7 | s [val] | clearning.cpp:140:9:140:11 | val | -| clearning.cpp:151:3:151:3 | s [post update] [val] | clearning.cpp:152:8:152:8 | s [val] | -| clearning.cpp:151:3:151:22 | ... = ... | clearning.cpp:151:3:151:3 | s [post update] [val] | -| clearning.cpp:151:11:151:20 | call to user_input | clearning.cpp:151:3:151:22 | ... = ... | -| clearning.cpp:152:8:152:8 | s [val] | clearning.cpp:152:10:152:12 | val | -| clearning.cpp:157:3:157:3 | s [post update] [val] | clearning.cpp:159:8:159:8 | s [val] | -| clearning.cpp:157:3:157:22 | ... = ... | clearning.cpp:157:3:157:3 | s [post update] [val] | -| clearning.cpp:157:11:157:20 | call to user_input | clearning.cpp:157:3:157:22 | ... = ... | -| clearning.cpp:159:8:159:8 | s [val] | clearning.cpp:159:10:159:12 | val | -| clearning.cpp:164:3:164:3 | s [post update] [val] | clearning.cpp:166:8:166:8 | s [val] | -| clearning.cpp:164:3:164:22 | ... = ... | clearning.cpp:164:3:164:3 | s [post update] [val] | -| clearning.cpp:164:11:164:20 | call to user_input | clearning.cpp:164:3:164:22 | ... = ... | -| clearning.cpp:166:8:166:8 | s [val] | clearning.cpp:166:10:166:12 | val | -| clearning.cpp:171:3:171:3 | s [post update] [val] | clearning.cpp:173:8:173:8 | s [val] | -| clearning.cpp:171:3:171:22 | ... = ... | clearning.cpp:171:3:171:3 | s [post update] [val] | -| clearning.cpp:171:11:171:20 | call to user_input | clearning.cpp:171:3:171:22 | ... = ... | -| clearning.cpp:173:8:173:8 | s [val] | clearning.cpp:173:10:173:12 | val | -| clearning.cpp:178:3:178:3 | s [post update] [val] | clearning.cpp:180:8:180:8 | s [val] | -| clearning.cpp:178:3:178:22 | ... = ... | clearning.cpp:178:3:178:3 | s [post update] [val] | -| clearning.cpp:178:11:178:20 | call to user_input | clearning.cpp:178:3:178:22 | ... = ... | -| clearning.cpp:180:8:180:8 | s [val] | clearning.cpp:180:10:180:12 | val | -| complex.cpp:9:7:9:7 | this [a_] | complex.cpp:9:20:9:21 | this [a_] | -| complex.cpp:9:20:9:21 | this [a_] | complex.cpp:9:20:9:21 | a_ | -| complex.cpp:10:7:10:7 | this [b_] | complex.cpp:10:20:10:21 | this [b_] | -| complex.cpp:10:20:10:21 | this [b_] | complex.cpp:10:20:10:21 | b_ | -| complex.cpp:11:17:11:17 | a | complex.cpp:11:22:11:27 | ... = ... | -| complex.cpp:11:22:11:27 | ... = ... | complex.cpp:11:22:11:23 | this [post update] [a_] | -| complex.cpp:12:17:12:17 | b | complex.cpp:12:22:12:27 | ... = ... | -| complex.cpp:12:22:12:27 | ... = ... | complex.cpp:12:22:12:23 | this [post update] [b_] | -| complex.cpp:40:17:40:17 | b [inner, f, a_] | complex.cpp:42:8:42:8 | b [inner, f, a_] | -| complex.cpp:40:17:40:17 | b [inner, f, b_] | complex.cpp:43:8:43:8 | b [inner, f, b_] | -| complex.cpp:42:8:42:8 | b [inner, f, a_] | complex.cpp:42:10:42:14 | inner [f, a_] | -| complex.cpp:42:10:42:14 | inner [f, a_] | complex.cpp:42:16:42:16 | f [a_] | -| complex.cpp:42:16:42:16 | f [a_] | complex.cpp:9:7:9:7 | this [a_] | -| complex.cpp:42:16:42:16 | f [a_] | complex.cpp:42:18:42:18 | call to a | -| complex.cpp:43:8:43:8 | b [inner, f, b_] | complex.cpp:43:10:43:14 | inner [f, b_] | -| complex.cpp:43:10:43:14 | inner [f, b_] | complex.cpp:43:16:43:16 | f [b_] | -| complex.cpp:43:16:43:16 | f [b_] | complex.cpp:10:7:10:7 | this [b_] | -| complex.cpp:43:16:43:16 | f [b_] | complex.cpp:43:18:43:18 | call to b | -| complex.cpp:53:3:53:4 | b1 [post update] [inner, f, a_] | complex.cpp:59:7:59:8 | b1 [inner, f, a_] | -| complex.cpp:53:6:53:10 | inner [post update] [f, a_] | complex.cpp:53:3:53:4 | b1 [post update] [inner, f, a_] | -| complex.cpp:53:12:53:12 | ref arg f [a_] | complex.cpp:53:6:53:10 | inner [post update] [f, a_] | -| complex.cpp:53:19:53:28 | call to user_input | complex.cpp:11:17:11:17 | a | -| complex.cpp:53:19:53:28 | call to user_input | complex.cpp:53:12:53:12 | ref arg f [a_] | -| complex.cpp:54:3:54:4 | b2 [post update] [inner, f, b_] | complex.cpp:62:7:62:8 | b2 [inner, f, b_] | -| complex.cpp:54:6:54:10 | inner [post update] [f, b_] | complex.cpp:54:3:54:4 | b2 [post update] [inner, f, b_] | -| complex.cpp:54:12:54:12 | ref arg f [b_] | complex.cpp:54:6:54:10 | inner [post update] [f, b_] | -| complex.cpp:54:19:54:28 | call to user_input | complex.cpp:12:17:12:17 | b | -| complex.cpp:54:19:54:28 | call to user_input | complex.cpp:54:12:54:12 | ref arg f [b_] | -| complex.cpp:55:3:55:4 | b3 [post update] [inner, f, a_] | complex.cpp:65:7:65:8 | b3 [inner, f, a_] | -| complex.cpp:55:6:55:10 | inner [post update] [f, a_] | complex.cpp:55:3:55:4 | b3 [post update] [inner, f, a_] | -| complex.cpp:55:12:55:12 | ref arg f [a_] | complex.cpp:55:6:55:10 | inner [post update] [f, a_] | -| complex.cpp:55:19:55:28 | call to user_input | complex.cpp:11:17:11:17 | a | -| complex.cpp:55:19:55:28 | call to user_input | complex.cpp:55:12:55:12 | ref arg f [a_] | -| complex.cpp:56:3:56:4 | b3 [post update] [inner, f, b_] | complex.cpp:65:7:65:8 | b3 [inner, f, b_] | -| complex.cpp:56:6:56:10 | inner [post update] [f, b_] | complex.cpp:56:3:56:4 | b3 [post update] [inner, f, b_] | -| complex.cpp:56:12:56:12 | ref arg f [b_] | complex.cpp:56:6:56:10 | inner [post update] [f, b_] | -| complex.cpp:56:19:56:28 | call to user_input | complex.cpp:12:17:12:17 | b | -| complex.cpp:56:19:56:28 | call to user_input | complex.cpp:56:12:56:12 | ref arg f [b_] | -| complex.cpp:59:7:59:8 | b1 [inner, f, a_] | complex.cpp:40:17:40:17 | b [inner, f, a_] | -| complex.cpp:62:7:62:8 | b2 [inner, f, b_] | complex.cpp:40:17:40:17 | b [inner, f, b_] | -| complex.cpp:65:7:65:8 | b3 [inner, f, a_] | complex.cpp:40:17:40:17 | b [inner, f, a_] | -| complex.cpp:65:7:65:8 | b3 [inner, f, b_] | complex.cpp:40:17:40:17 | b [inner, f, b_] | -| conflated.cpp:19:19:19:21 | ref arg raw | conflated.cpp:20:8:20:10 | raw | -| conflated.cpp:29:3:29:4 | pa [post update] [x] | conflated.cpp:30:8:30:9 | pa [x] | -| conflated.cpp:29:3:29:22 | ... = ... | conflated.cpp:29:3:29:4 | pa [post update] [x] | -| conflated.cpp:29:11:29:20 | call to user_input | conflated.cpp:29:3:29:22 | ... = ... | -| conflated.cpp:30:8:30:9 | pa [x] | conflated.cpp:30:12:30:12 | x | -| conflated.cpp:36:3:36:4 | pa [post update] [x] | conflated.cpp:37:8:37:9 | pa [x] | -| conflated.cpp:36:3:36:22 | ... = ... | conflated.cpp:36:3:36:4 | pa [post update] [x] | -| conflated.cpp:36:11:36:20 | call to user_input | conflated.cpp:36:3:36:22 | ... = ... | -| conflated.cpp:37:8:37:9 | pa [x] | conflated.cpp:37:12:37:12 | x | -| conflated.cpp:54:3:54:4 | ll [post update] [next, y] | conflated.cpp:55:8:55:9 | ll [next, y] | -| conflated.cpp:54:3:54:28 | ... = ... | conflated.cpp:54:7:54:10 | next [post update] [y] | -| conflated.cpp:54:7:54:10 | next [post update] [y] | conflated.cpp:54:3:54:4 | ll [post update] [next, y] | -| conflated.cpp:54:17:54:26 | call to user_input | conflated.cpp:54:3:54:28 | ... = ... | -| conflated.cpp:55:8:55:9 | ll [next, y] | conflated.cpp:55:12:55:15 | next [y] | -| conflated.cpp:55:12:55:15 | next [y] | conflated.cpp:55:18:55:18 | y | -| conflated.cpp:60:3:60:4 | ll [post update] [next, y] | conflated.cpp:61:8:61:9 | ll [next, y] | -| conflated.cpp:60:3:60:28 | ... = ... | conflated.cpp:60:7:60:10 | next [post update] [y] | -| conflated.cpp:60:7:60:10 | next [post update] [y] | conflated.cpp:60:3:60:4 | ll [post update] [next, y] | -| conflated.cpp:60:17:60:26 | call to user_input | conflated.cpp:60:3:60:28 | ... = ... | -| conflated.cpp:61:8:61:9 | ll [next, y] | conflated.cpp:61:12:61:15 | next [y] | -| conflated.cpp:61:12:61:15 | next [y] | conflated.cpp:61:18:61:18 | y | -| constructors.cpp:18:9:18:9 | this [a_] | constructors.cpp:18:22:18:23 | this [a_] | -| constructors.cpp:18:22:18:23 | this [a_] | constructors.cpp:18:22:18:23 | a_ | -| constructors.cpp:19:9:19:9 | this [b_] | constructors.cpp:19:22:19:23 | this [b_] | -| constructors.cpp:19:22:19:23 | this [b_] | constructors.cpp:19:22:19:23 | b_ | -| constructors.cpp:23:13:23:13 | a | constructors.cpp:23:28:23:28 | a | -| constructors.cpp:23:20:23:20 | b | constructors.cpp:23:35:23:35 | b | -| constructors.cpp:23:28:23:28 | a | constructors.cpp:23:25:23:29 | constructor init of field a_ [post-this] [a_] | -| constructors.cpp:23:35:23:35 | b | constructors.cpp:23:32:23:36 | constructor init of field b_ [post-this] [b_] | -| constructors.cpp:26:15:26:15 | f [a_] | constructors.cpp:28:10:28:10 | f [a_] | -| constructors.cpp:26:15:26:15 | f [b_] | constructors.cpp:29:10:29:10 | f [b_] | -| constructors.cpp:28:10:28:10 | f [a_] | constructors.cpp:18:9:18:9 | this [a_] | -| constructors.cpp:28:10:28:10 | f [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:29:10:29:10 | f [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:34:11:34:20 | call to user_input | constructors.cpp:34:11:34:26 | call to Foo [a_] | -| constructors.cpp:34:11:34:26 | call to Foo [a_] | constructors.cpp:40:9:40:9 | f [a_] | -| constructors.cpp:35:11:35:26 | call to Foo [b_] | constructors.cpp:43:9:43:9 | g [b_] | -| constructors.cpp:35:14:35:23 | call to user_input | constructors.cpp:23:20:23:20 | b | -| constructors.cpp:35:14:35:23 | call to user_input | 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:36:11:36:20 | call to user_input | constructors.cpp:36:11:36:37 | call to Foo [a_] | -| constructors.cpp:36:11:36:37 | call to Foo [a_] | constructors.cpp:46:9:46:9 | h [a_] | -| constructors.cpp:36:11:36:37 | call to Foo [b_] | constructors.cpp:46:9:46:9 | h [b_] | -| constructors.cpp:36:25:36:34 | call to user_input | constructors.cpp:23:20:23:20 | b | -| constructors.cpp:36:25:36:34 | call to user_input | constructors.cpp:36:11:36:37 | call to Foo [b_] | -| constructors.cpp:40:9:40:9 | f [a_] | constructors.cpp:26:15:26:15 | f [a_] | -| constructors.cpp:43:9:43:9 | g [b_] | constructors.cpp:26:15:26:15 | f [b_] | -| constructors.cpp:46:9:46:9 | h [a_] | constructors.cpp:26:15:26:15 | f [a_] | -| constructors.cpp:46:9:46:9 | h [b_] | constructors.cpp:26:15:26:15 | f [b_] | -| qualifiers.cpp:9:21:9:25 | value | qualifiers.cpp:9:30:9:44 | ... = ... | -| qualifiers.cpp:9:30:9:44 | ... = ... | qualifiers.cpp:9:30:9:33 | this [post update] [a] | -| qualifiers.cpp:12:40:12:44 | value | qualifiers.cpp:12:49:12:64 | ... = ... | -| qualifiers.cpp:12:49:12:53 | inner [post update] [a] | qualifiers.cpp:12:27:12:31 | inner [a] | -| qualifiers.cpp:12:49:12:64 | ... = ... | qualifiers.cpp:12:49:12:53 | inner [post update] [a] | -| qualifiers.cpp:13:42:13:46 | value | qualifiers.cpp:13:51:13:65 | ... = ... | -| qualifiers.cpp:13:51:13:55 | inner [post update] [a] | qualifiers.cpp:13:29:13:33 | inner [a] | -| qualifiers.cpp:13:51:13:65 | ... = ... | qualifiers.cpp:13:51:13:55 | inner [post update] [a] | -| qualifiers.cpp:22:5:22:9 | ref arg outer [inner, a] | qualifiers.cpp:23:10:23:14 | outer [inner, a] | -| qualifiers.cpp:22:5:22:38 | ... = ... | qualifiers.cpp:22:11:22:18 | call to getInner [post update] [a] | -| qualifiers.cpp:22:11:22:18 | call to getInner [post update] [a] | qualifiers.cpp:22:5:22:9 | ref arg outer [inner, a] | -| qualifiers.cpp:22:27:22:36 | call to user_input | qualifiers.cpp:22:5:22:38 | ... = ... | -| qualifiers.cpp:23:10:23:14 | outer [inner, a] | qualifiers.cpp:23:16:23:20 | inner [a] | -| qualifiers.cpp:23:16:23:20 | inner [a] | qualifiers.cpp:23:23:23:23 | a | -| qualifiers.cpp:27:5:27:9 | ref arg outer [inner, a] | qualifiers.cpp:28:10:28:14 | outer [inner, a] | -| qualifiers.cpp:27:11:27:18 | ref arg call to getInner [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:27:28:27:37 | call to user_input | qualifiers.cpp:27:11:27:18 | ref arg call to getInner [a] | -| qualifiers.cpp:28:10:28:14 | outer [inner, a] | qualifiers.cpp:28:16:28:20 | inner [a] | -| qualifiers.cpp:28:16:28:20 | inner [a] | qualifiers.cpp:28:23:28:23 | a | -| qualifiers.cpp:32:17:32:21 | ref arg outer [inner, a] | qualifiers.cpp:33:10:33:14 | outer [inner, a] | -| qualifiers.cpp:32:23:32:30 | ref arg call to getInner [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:32:35:32:44 | call to user_input | qualifiers.cpp:32:23:32:30 | ref arg call to getInner [a] | -| qualifiers.cpp:33:10:33:14 | outer [inner, a] | qualifiers.cpp:33:16:33:20 | inner [a] | -| qualifiers.cpp:33:16:33:20 | inner [a] | qualifiers.cpp:33:23:33:23 | a | -| qualifiers.cpp:37:19:37:35 | ref arg * ... [a] | qualifiers.cpp:37:26:37:33 | call to getInner [inner post update] [a] | -| qualifiers.cpp:37:20:37:24 | ref arg outer [inner, a] | qualifiers.cpp:38:10:38:14 | outer [inner, a] | -| qualifiers.cpp:37:26:37:33 | call to getInner [inner post update] [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:37:38:37:47 | call to user_input | qualifiers.cpp:37:19:37:35 | ref arg * ... [a] | -| qualifiers.cpp:38:10:38:14 | outer [inner, a] | qualifiers.cpp:38:16:38:20 | inner [a] | -| qualifiers.cpp:38:16:38:20 | inner [a] | qualifiers.cpp:38:23:38:23 | a | -| qualifiers.cpp:42:5:42:40 | ... = ... | qualifiers.cpp:42:6:42:22 | * ... [post update] [a] | -| qualifiers.cpp:42:6:42:22 | * ... [post update] [a] | qualifiers.cpp:42:13:42:20 | call to getInner [inner post update] [a] | -| qualifiers.cpp:42:7:42:11 | ref arg outer [inner, a] | qualifiers.cpp:43:10:43:14 | outer [inner, a] | -| qualifiers.cpp:42:13:42:20 | call to getInner [inner post update] [a] | qualifiers.cpp:42:7:42:11 | ref arg outer [inner, a] | -| qualifiers.cpp:42:29:42:38 | call to user_input | qualifiers.cpp:42:5:42:40 | ... = ... | -| qualifiers.cpp:43:10:43:14 | outer [inner, a] | qualifiers.cpp:43:16:43:20 | inner [a] | -| qualifiers.cpp:43:16:43:20 | inner [a] | qualifiers.cpp:43:23:43:23 | a | -| qualifiers.cpp:47:5:47:42 | ... = ... | qualifiers.cpp:47:15:47:22 | call to getInner [post update] [a] | -| qualifiers.cpp:47:6:47:11 | ref arg & ... [inner, a] | qualifiers.cpp:48:10:48:14 | outer [inner, a] | -| qualifiers.cpp:47:15:47:22 | call to getInner [post update] [a] | qualifiers.cpp:47:6:47:11 | ref arg & ... [inner, a] | -| qualifiers.cpp:47:31:47:40 | call to user_input | qualifiers.cpp:47:5:47:42 | ... = ... | -| qualifiers.cpp:48:10:48:14 | outer [inner, a] | qualifiers.cpp:48:16:48:20 | inner [a] | -| qualifiers.cpp:48:16:48:20 | inner [a] | qualifiers.cpp:48:23:48:23 | a | -| realistic.cpp:41:17:41:17 | o | realistic.cpp:41:17:41:17 | o | -| realistic.cpp:53:9:53:11 | foo [post update] [bar, baz, userInput, bufferLen] | realistic.cpp:61:21:61:23 | foo [bar, baz, userInput, bufferLen] | -| realistic.cpp:53:9:53:18 | access to array [post update] [baz, userInput, bufferLen] | realistic.cpp:53:13:53:15 | bar [inner post update] [baz, userInput, bufferLen] | -| realistic.cpp:53:9:53:66 | ... = ... | realistic.cpp:53:25:53:33 | userInput [post update] [bufferLen] | -| realistic.cpp:53:13:53:15 | bar [inner post update] [baz, userInput, bufferLen] | realistic.cpp:53:9:53:11 | foo [post update] [bar, baz, userInput, bufferLen] | -| realistic.cpp:53:20:53:22 | baz [post update] [userInput, bufferLen] | realistic.cpp:53:9:53:18 | access to array [post update] [baz, userInput, bufferLen] | -| realistic.cpp:53:25:53:33 | userInput [post update] [bufferLen] | realistic.cpp:53:20:53:22 | baz [post update] [userInput, bufferLen] | -| realistic.cpp:53:55:53:64 | call to user_input | realistic.cpp:53:9:53:66 | ... = ... | -| realistic.cpp:61:21:61:23 | foo [bar, baz, userInput, bufferLen] | realistic.cpp:61:25:61:27 | bar [baz, userInput, bufferLen] | -| realistic.cpp:61:21:61:23 | foo [post update] [bar, baz, userInput, bufferLen] | realistic.cpp:61:21:61:23 | foo [bar, baz, userInput, bufferLen] | -| realistic.cpp:61:21:61:30 | access to array [baz, userInput, bufferLen] | realistic.cpp:61:32:61:34 | baz [userInput, bufferLen] | -| realistic.cpp:61:21:61:30 | access to array [post update] [baz, userInput, bufferLen] | realistic.cpp:61:25:61:27 | bar [inner post update] [baz, userInput, bufferLen] | -| realistic.cpp:61:25:61:27 | bar [baz, userInput, bufferLen] | realistic.cpp:61:21:61:30 | access to array [baz, userInput, bufferLen] | -| realistic.cpp:61:25:61:27 | bar [inner post update] [baz, userInput, bufferLen] | realistic.cpp:61:21:61:23 | foo [post update] [bar, baz, userInput, bufferLen] | -| realistic.cpp:61:32:61:34 | baz [post update] [userInput, bufferLen] | realistic.cpp:61:21:61:30 | access to array [post update] [baz, userInput, bufferLen] | -| realistic.cpp:61:32:61:34 | baz [userInput, bufferLen] | realistic.cpp:61:37:61:45 | userInput [bufferLen] | -| realistic.cpp:61:37:61:45 | userInput [bufferLen] | realistic.cpp:61:47:61:55 | bufferLen | -| realistic.cpp:61:37:61:45 | userInput [bufferLen] | realistic.cpp:61:47:61:55 | bufferLen | -| realistic.cpp:61:37:61:45 | userInput [post update] [bufferLen] | realistic.cpp:61:32:61:34 | baz [post update] [userInput, bufferLen] | -| realistic.cpp:61:47:61:55 | bufferLen | realistic.cpp:41:17:41:17 | o | -| realistic.cpp:61:47:61:55 | bufferLen | realistic.cpp:61:47:61:55 | ref arg bufferLen | -| realistic.cpp:61:47:61:55 | ref arg bufferLen | realistic.cpp:61:37:61:45 | userInput [post update] [bufferLen] | -| simple.cpp:18:9:18:9 | this [a_] | simple.cpp:18:22:18:23 | this [a_] | -| simple.cpp:18:22:18:23 | this [a_] | simple.cpp:18:22:18:23 | a_ | -| simple.cpp:19:9:19:9 | this [b_] | simple.cpp:19:22:19:23 | this [b_] | -| simple.cpp:19:22:19:23 | this [b_] | simple.cpp:19:22:19:23 | b_ | -| simple.cpp:20:19:20:19 | a | simple.cpp:20:24:20:29 | ... = ... | -| simple.cpp:20:24:20:29 | ... = ... | simple.cpp:20:24:20:25 | this [post update] [a_] | -| simple.cpp:21:19:21:19 | b | simple.cpp:21:24:21:29 | ... = ... | -| simple.cpp:21:24:21:29 | ... = ... | simple.cpp:21:24:21:25 | this [post update] [b_] | -| simple.cpp:26:15:26:15 | f [a_] | simple.cpp:28:10:28:10 | f [a_] | -| simple.cpp:26:15:26:15 | f [b_] | simple.cpp:29:10:29:10 | f [b_] | -| simple.cpp:28:10:28:10 | f [a_] | simple.cpp:18:9:18:9 | this [a_] | -| simple.cpp:28:10:28:10 | f [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:29:10:29:10 | f [b_] | simple.cpp:29:12:29:12 | call to b | -| simple.cpp:39:5:39:5 | ref arg f [a_] | simple.cpp:45:9:45:9 | f [a_] | -| simple.cpp:39:12:39:21 | call to user_input | simple.cpp:20:19:20:19 | a | -| simple.cpp:39:12:39:21 | call to user_input | simple.cpp:39:5:39:5 | ref arg f [a_] | -| simple.cpp:40:5:40:5 | ref arg g [b_] | simple.cpp:48:9:48:9 | g [b_] | -| simple.cpp:40:12:40:21 | call to user_input | simple.cpp:21:19:21:19 | b | -| simple.cpp:40:12:40:21 | call to user_input | simple.cpp:40:5:40:5 | ref arg g [b_] | -| simple.cpp:41:5:41:5 | ref arg h [a_] | simple.cpp:51:9:51:9 | h [a_] | -| simple.cpp:41:12:41:21 | call to user_input | simple.cpp:20:19:20:19 | a | -| simple.cpp:41:12:41:21 | call to user_input | simple.cpp:41:5:41:5 | ref arg h [a_] | -| simple.cpp:42:5:42:5 | ref arg h [b_] | simple.cpp:51:9:51:9 | h [b_] | -| simple.cpp:42:12:42:21 | call to user_input | simple.cpp:21:19:21:19 | b | -| simple.cpp:42:12:42:21 | call to user_input | simple.cpp:42:5:42:5 | ref arg h [b_] | -| simple.cpp:45:9:45:9 | f [a_] | simple.cpp:26:15:26:15 | f [a_] | -| simple.cpp:48:9:48:9 | g [b_] | simple.cpp:26:15:26:15 | f [b_] | -| simple.cpp:51:9:51:9 | h [a_] | simple.cpp:26:15:26:15 | f [a_] | -| simple.cpp:51:9:51:9 | h [b_] | simple.cpp:26:15:26:15 | f [b_] | -| simple.cpp:65:5:65:5 | a [post update] [i] | simple.cpp:67:10:67:11 | a2 [i] | -| simple.cpp:65:5:65:22 | ... = ... | simple.cpp:65:5:65:5 | a [post update] [i] | -| simple.cpp:65:11:65:20 | call to user_input | simple.cpp:65:5:65:22 | ... = ... | -| simple.cpp:67:10:67:11 | a2 [i] | simple.cpp:67:13:67:13 | i | -| simple.cpp:78:9:78:15 | this [f2, f1] | simple.cpp:79:16:79:17 | this [f2, f1] | -| simple.cpp:79:16:79:17 | f2 [f1] | simple.cpp:79:19:79:20 | f1 | -| simple.cpp:79:16:79:17 | this [f2, f1] | simple.cpp:79:16:79:17 | f2 [f1] | -| simple.cpp:83:9:83:10 | f2 [post update] [f1] | simple.cpp:83:9:83:10 | this [post update] [f2, f1] | -| simple.cpp:83:9:83:10 | this [post update] [f2, f1] | simple.cpp:84:14:84:20 | this [f2, f1] | -| simple.cpp:83:9:83:28 | ... = ... | simple.cpp:83:9:83:10 | f2 [post update] [f1] | -| simple.cpp:83:17:83:26 | call to user_input | simple.cpp:83:9:83:28 | ... = ... | -| simple.cpp:84:14:84:20 | this [f2, f1] | simple.cpp:78:9:78:15 | this [f2, f1] | -| simple.cpp:84:14:84:20 | this [f2, f1] | simple.cpp:84:14:84:20 | call to getf2f1 | -| simple.cpp:92:5:92:5 | a [post update] [i] | simple.cpp:94:10:94:11 | a2 [i] | -| simple.cpp:92:5:92:22 | ... = ... | simple.cpp:92:5:92:5 | a [post update] [i] | -| simple.cpp:92:11:92:20 | call to user_input | simple.cpp:92:5:92:22 | ... = ... | -| simple.cpp:94:10:94:11 | a2 [i] | simple.cpp:94:13:94:13 | i | -| struct_init.c:14:24:14:25 | ab [a] | struct_init.c:14:24:14:25 | ab [a] | -| struct_init.c:14:24:14:25 | ab [a] | struct_init.c:15:8:15:9 | ab [a] | -| struct_init.c:15:8:15:9 | ab [a] | struct_init.c:15:12:15:12 | a | -| struct_init.c:15:8:15:9 | ab [a] | struct_init.c:15:12:15:12 | a | -| struct_init.c:15:8:15:9 | ab [post update] [a] | struct_init.c:14:24:14:25 | ab [a] | -| struct_init.c:15:12:15:12 | a | realistic.cpp:41:17:41:17 | o | -| struct_init.c:15:12:15:12 | a | struct_init.c:15:12:15:12 | ref arg a | -| struct_init.c:15:12:15:12 | ref arg a | struct_init.c:15:8:15:9 | ab [post update] [a] | -| struct_init.c:20:17:20:36 | {...} [a] | struct_init.c:22:8:22:9 | ab [a] | -| struct_init.c:20:17:20:36 | {...} [a] | struct_init.c:24:11:24:12 | ab [a] | -| struct_init.c:20:17:20:36 | {...} [a] | struct_init.c:28:6:28:7 | ab [a] | -| struct_init.c:20:20:20:29 | call to user_input | struct_init.c:20:17:20:36 | {...} [a] | -| struct_init.c:22:8:22:9 | ab [a] | struct_init.c:22:11:22:11 | a | -| struct_init.c:22:8:22:9 | ab [a] | struct_init.c:22:11:22:11 | a | -| struct_init.c:22:8:22:9 | ab [post update] [a] | struct_init.c:24:11:24:12 | ab [a] | -| struct_init.c:22:8:22:9 | ab [post update] [a] | struct_init.c:28:6:28:7 | ab [a] | -| struct_init.c:22:11:22:11 | a | realistic.cpp:41:17:41:17 | o | -| struct_init.c:22:11:22:11 | a | struct_init.c:22:11:22:11 | ref arg a | -| struct_init.c:22:11:22:11 | ref arg a | struct_init.c:22:8:22:9 | ab [post update] [a] | -| struct_init.c:24:10:24:12 | & ... [a] | struct_init.c:14:24:14:25 | ab [a] | -| struct_init.c:24:10:24:12 | & ... [a] | struct_init.c:24:10:24:12 | ref arg & ... [a] | -| struct_init.c:24:10:24:12 | ref arg & ... [a] | struct_init.c:28:6:28:7 | ab [a] | -| struct_init.c:24:11:24:12 | ab [a] | struct_init.c:24:10:24:12 | & ... [a] | -| struct_init.c:26:23:29:3 | {...} [nestedAB, a] | struct_init.c:31:8:31:12 | outer [nestedAB, a] | -| struct_init.c:26:23:29:3 | {...} [nestedAB, a] | struct_init.c:36:11:36:15 | outer [nestedAB, a] | -| struct_init.c:26:23:29:3 | {...} [pointerAB, a] | struct_init.c:33:8:33:12 | outer [pointerAB, a] | -| struct_init.c:27:5:27:23 | {...} [a] | struct_init.c:26:23:29:3 | {...} [nestedAB, a] | -| struct_init.c:27:7:27:16 | call to user_input | struct_init.c:27:5:27:23 | {...} [a] | -| struct_init.c:28:5:28:7 | & ... [a] | struct_init.c:26:23:29:3 | {...} [pointerAB, a] | -| struct_init.c:28:6:28:7 | ab [a] | struct_init.c:28:5:28:7 | & ... [a] | -| struct_init.c:31:8:31:12 | outer [nestedAB, a] | struct_init.c:31:14:31:21 | nestedAB [a] | -| struct_init.c:31:8:31:12 | outer [post update] [nestedAB, a] | struct_init.c:36:11:36:15 | outer [nestedAB, a] | -| struct_init.c:31:14:31:21 | nestedAB [a] | struct_init.c:31:23:31:23 | a | -| struct_init.c:31:14:31:21 | nestedAB [a] | struct_init.c:31:23:31:23 | a | -| struct_init.c:31:14:31:21 | nestedAB [post update] [a] | struct_init.c:31:8:31:12 | outer [post update] [nestedAB, a] | -| struct_init.c:31:23:31:23 | a | realistic.cpp:41:17:41:17 | o | -| struct_init.c:31:23:31:23 | a | struct_init.c:31:23:31:23 | ref arg a | -| struct_init.c:31:23:31:23 | ref arg a | struct_init.c:31:14:31:21 | nestedAB [post update] [a] | -| struct_init.c:33:8:33:12 | outer [pointerAB, a] | struct_init.c:33:14:33:22 | pointerAB [a] | -| struct_init.c:33:14:33:22 | pointerAB [a] | struct_init.c:33:25:33:25 | a | -| struct_init.c:36:10:36:24 | & ... [a] | struct_init.c:14:24:14:25 | ab [a] | -| struct_init.c:36:11:36:15 | outer [nestedAB, a] | struct_init.c:36:17:36:24 | nestedAB [a] | -| struct_init.c:36:17:36:24 | nestedAB [a] | struct_init.c:36:10:36:24 | & ... [a] | -| struct_init.c:40:17:40:36 | {...} [a] | struct_init.c:43:6:43:7 | ab [a] | -| struct_init.c:40:20:40:29 | call to user_input | struct_init.c:40:17:40:36 | {...} [a] | -| struct_init.c:41:23:44:3 | {...} [pointerAB, a] | struct_init.c:46:10:46:14 | outer [pointerAB, a] | -| struct_init.c:43:5:43:7 | & ... [a] | struct_init.c:41:23:44:3 | {...} [pointerAB, a] | -| struct_init.c:43:6:43:7 | ab [a] | struct_init.c:43:5:43:7 | & ... [a] | -| struct_init.c:46:10:46:14 | outer [pointerAB, a] | struct_init.c:46:16:46:24 | pointerAB [a] | -| struct_init.c:46:16:46:24 | pointerAB [a] | struct_init.c:14:24:14:25 | ab [a] | +| A.cpp:23:10:23:10 | c | A.cpp:25:7:25:17 | ... = ... | 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: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 | | +| A.cpp:29:23:29:23 | c | A.cpp:31:20:31:20 | c | provenance | | +| A.cpp:31:14:31:21 | call to B [c] | A.cpp:31:14:31:21 | new [c] | provenance | | +| A.cpp:31:20:31:20 | c | A.cpp:23:10:23:10 | c | provenance | | +| A.cpp:31:20:31:20 | c | A.cpp:31:14:31:21 | call to B [c] | provenance | | +| A.cpp:41:5:41:6 | ref arg ct | A.cpp:43:11:43:12 | ct | provenance | | +| A.cpp:41:15:41:21 | new | A.cpp:41:5:41:6 | ref arg ct | provenance | | +| A.cpp:43:11:43:12 | ct | A.cpp:43:10:43:12 | & ... | provenance | | +| A.cpp:47:12:47:18 | new | A.cpp:48:20:48:20 | c | provenance | | +| A.cpp:48:12:48:18 | call to make [c] | A.cpp:49:10:49:10 | b [c] | provenance | | +| A.cpp:48:20:48:20 | c | A.cpp:29:23:29:23 | c | provenance | | +| A.cpp:48:20:48:20 | c | A.cpp:48:12:48:18 | call to make [c] | provenance | | +| A.cpp:49:10:49:10 | b [c] | A.cpp:49:13:49:13 | c | provenance | | +| A.cpp:55:5:55:5 | ref arg b [c] | A.cpp:56:10:56:10 | b [c] | provenance | | +| A.cpp:55:12:55:19 | new | A.cpp:27:17:27:17 | c | provenance | | +| A.cpp:55:12:55:19 | new | A.cpp:55:5:55:5 | ref arg b [c] | provenance | | +| A.cpp:56:10:56:10 | b [c] | A.cpp:28:8:28:10 | this [c] | provenance | | +| A.cpp:56:10:56:10 | b [c] | A.cpp:56:13:56:15 | call to get | provenance | | +| A.cpp:57:11:57:24 | call to B [c] | A.cpp:57:11:57:24 | new [c] | provenance | | +| A.cpp:57:11:57:24 | new [c] | A.cpp:28:8:28:10 | this [c] | provenance | | +| A.cpp:57:11:57:24 | new [c] | A.cpp:57:28:57:30 | call to get | provenance | | +| A.cpp:57:17:57:23 | new | A.cpp:23:10:23:10 | c | provenance | | +| A.cpp:57:17:57:23 | new | A.cpp:57:11:57:24 | call to B [c] | provenance | | +| A.cpp:64:10:64:15 | call to setOnB [c] | A.cpp:66:10:66:11 | b2 [c] | provenance | | +| A.cpp:64:21:64:28 | new | A.cpp:64:10:64:15 | call to setOnB [c] | provenance | | +| A.cpp:64:21:64:28 | new | A.cpp:85:26:85:26 | c | provenance | | +| A.cpp:66:10:66:11 | b2 [c] | A.cpp:66:14:66:14 | c | provenance | | +| A.cpp:73:10:73:19 | call to setOnBWrap [c] | A.cpp:75:10:75:11 | b2 [c] | provenance | | +| A.cpp:73:25:73:32 | new | A.cpp:73:10:73:19 | call to setOnBWrap [c] | provenance | | +| A.cpp:73:25:73:32 | new | A.cpp:78:27:78:27 | c | provenance | | +| A.cpp:75:10:75:11 | b2 [c] | A.cpp:75:14:75:14 | c | provenance | | +| A.cpp:78:27:78:27 | c | A.cpp:81:21:81:21 | c | provenance | | +| A.cpp:81:10:81:15 | call to setOnB [c] | A.cpp:82:12:82:24 | ... ? ... : ... [c] | provenance | | +| A.cpp:81:21:81:21 | c | A.cpp:81:10:81:15 | call to setOnB [c] | provenance | | +| A.cpp:81:21:81:21 | c | A.cpp:85:26:85:26 | c | provenance | | +| A.cpp:85:26:85:26 | c | A.cpp:90:15:90:15 | c | provenance | | +| A.cpp:90:7:90:8 | ref arg b2 [c] | A.cpp:91:14:91:15 | b2 [c] | provenance | | +| A.cpp:90:15:90:15 | c | A.cpp:27:17:27:17 | c | provenance | | +| A.cpp:90:15:90:15 | c | A.cpp:90:7:90:8 | ref arg b2 [c] | provenance | | +| A.cpp:98:12:98:18 | new | A.cpp:100:5:100:13 | ... = ... | provenance | | +| A.cpp:100:5:100:6 | c1 [post update] [a] | A.cpp:101:8:101:9 | c1 [a] | provenance | | +| A.cpp:100:5:100:13 | ... = ... | A.cpp:100:5:100:6 | c1 [post update] [a] | provenance | | +| A.cpp:101:8:101:9 | c1 [a] | A.cpp:103:14:103:14 | c [a] | provenance | | +| A.cpp:103:14:103:14 | c [a] | A.cpp:107:12:107:13 | c1 [a] | provenance | | +| 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 [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 [c] | provenance | | +| A.cpp:126:5:126:5 | ref arg b [c] | A.cpp:131:8:131:8 | ref arg 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:13:140:13 | b | A.cpp:143:7:143:31 | ... = ... | 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 [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:7 | b [post update] [c] | A.cpp:151:18:151:18 | ref arg b [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:151:12:151:24 | call to D [b, c] | provenance | | +| A.cpp:143:7:143:10 | this [post update] [b] | A.cpp:151:12:151:24 | call to D [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 | | +| A.cpp:143:25:143:31 | new | A.cpp:143:7:143:31 | ... = ... | provenance | | +| A.cpp:150:12:150:18 | new | A.cpp:151:18:151:18 | b | provenance | | +| A.cpp:151:12:151:24 | call to D [b, c] | A.cpp:152:10:152:10 | d [b, c] | provenance | | +| A.cpp:151:12:151:24 | call to D [b, c] | A.cpp:153:10:153:10 | d [b, c] | provenance | | +| A.cpp:151:12:151:24 | call to D [b] | A.cpp:152:10:152:10 | d [b] | provenance | | +| A.cpp:151:18:151:18 | b | A.cpp:140:13:140:13 | b | provenance | | +| A.cpp:151:18:151:18 | b | A.cpp:151:12:151:24 | call to D [b] | provenance | | +| A.cpp:151:18:151:18 | ref arg b [c] | A.cpp:154:10:154:10 | b [c] | provenance | | +| A.cpp:152:10:152:10 | d [b, c] | A.cpp:152:13:152:13 | b [c] | provenance | | +| A.cpp:152:10:152:10 | d [b] | A.cpp:152:13:152:13 | b | provenance | | +| A.cpp:152:10:152:10 | d [post update] [b, c] | A.cpp:153:10:153:10 | d [b, c] | provenance | | +| A.cpp:152:13:152:13 | b [c] | A.cpp:152:13:152:13 | ref arg b [c] | provenance | | +| A.cpp:152:13:152:13 | b [c] | A.cpp:173:26:173:26 | o [c] | provenance | | +| A.cpp:152:13:152:13 | ref arg b [c] | A.cpp:152:10:152:10 | d [post update] [b, c] | provenance | | +| A.cpp:153:10:153:10 | d [b, c] | A.cpp:153:13:153:13 | b [c] | provenance | | +| A.cpp:153:13:153:13 | b [c] | A.cpp:153:16:153:16 | c | provenance | | +| A.cpp:154:10:154:10 | b [c] | A.cpp:154:13:154:13 | c | provenance | | +| A.cpp:159:12:159:18 | new | A.cpp:160:29:160:29 | b | provenance | | +| A.cpp:160:18:160:60 | call to MyList [head] | A.cpp:161:38:161:39 | l1 [head] | provenance | | +| A.cpp:160:29:160:29 | b | A.cpp:160:18:160:60 | call to MyList [head] | provenance | | +| A.cpp:160:29:160:29 | b | A.cpp:181:15:181:21 | newHead | provenance | | +| A.cpp:161:18:161:40 | call to MyList [next, head] | A.cpp:162:38:162:39 | l2 [next, head] | provenance | | +| A.cpp:161:38:161:39 | l1 [head] | A.cpp:161:18:161:40 | call to MyList [next, head] | provenance | | +| A.cpp:161:38:161:39 | l1 [head] | A.cpp:181:32:181:35 | next [head] | provenance | | +| A.cpp:162:18:162:40 | call to MyList [next, next, head] | A.cpp:165:10:165:11 | l3 [next, next, head] | provenance | | +| A.cpp:162:18:162:40 | call to MyList [next, next, head] | A.cpp:167:44:167:44 | l [next, next, head] | provenance | | +| A.cpp:162:38:162:39 | l2 [next, head] | A.cpp:162:18:162:40 | call to MyList [next, next, head] | provenance | | +| A.cpp:162:38:162:39 | l2 [next, head] | A.cpp:181:32:181:35 | next [next, head] | provenance | | +| A.cpp:165:10:165:11 | l3 [next, next, head] | A.cpp:165:14:165:17 | next [next, head] | provenance | | +| A.cpp:165:10:165:11 | l3 [post update] [next, next, head] | A.cpp:167:44:167:44 | l [next, next, head] | provenance | | +| A.cpp:165:14:165:17 | next [next, head] | A.cpp:165:20:165:23 | next [head] | provenance | | +| A.cpp:165:14:165:17 | next [post update] [next, head] | A.cpp:165:10:165:11 | l3 [post update] [next, next, head] | provenance | | +| A.cpp:165:20:165:23 | next [head] | A.cpp:165:26:165:29 | head | provenance | | +| A.cpp:165:20:165:23 | next [head] | A.cpp:165:26:165:29 | head | provenance | | +| A.cpp:165:20:165:23 | next [post update] [head] | A.cpp:165:14:165:17 | next [post update] [next, head] | provenance | | +| A.cpp:165:26:165:29 | head | A.cpp:165:26:165:29 | ref arg head | provenance | | +| A.cpp:165:26:165:29 | head | A.cpp:173:26:173:26 | o | provenance | | +| A.cpp:165:26:165:29 | ref arg head | A.cpp:165:20:165:23 | next [post update] [head] | provenance | | +| A.cpp:167:44:167:44 | l [next, head] | A.cpp:167:47:167:50 | next [head] | provenance | | +| A.cpp:167:44:167:44 | l [next, next, head] | A.cpp:167:47:167:50 | next [next, head] | provenance | | +| A.cpp:167:47:167:50 | next [head] | A.cpp:169:12:169:12 | l [head] | provenance | | +| A.cpp:167:47:167:50 | next [next, head] | A.cpp:167:44:167:44 | l [next, head] | provenance | | +| A.cpp:169:12:169:12 | l [head] | A.cpp:169:15:169:18 | head | provenance | | +| A.cpp:173:26:173:26 | o | A.cpp:173:26:173:26 | o | provenance | | +| A.cpp:173:26:173:26 | o [c] | A.cpp:173:26:173:26 | o [c] | provenance | | +| 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:20 | ... = ... | A.cpp:183:7:183:10 | this [post update] [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 | | +| B.cpp:7:16:7:35 | call to Box1 [elem1] | B.cpp:8:25:8:26 | b1 [elem1] | provenance | | +| B.cpp:7:25:7:25 | e | B.cpp:7:16:7:35 | call to Box1 [elem1] | provenance | | +| B.cpp:7:25:7:25 | e | B.cpp:33:16:33:17 | e1 | provenance | | +| B.cpp:8:16:8:27 | call to Box2 [box1, elem1] | B.cpp:9:10:9:11 | b2 [box1, elem1] | provenance | | +| B.cpp:8:25:8:26 | b1 [elem1] | B.cpp:8:16:8:27 | call to Box2 [box1, elem1] | provenance | | +| B.cpp:8:25:8:26 | b1 [elem1] | B.cpp:44:16:44:17 | b1 [elem1] | provenance | | +| B.cpp:9:10:9:11 | b2 [box1, elem1] | B.cpp:9:14:9:17 | box1 [elem1] | provenance | | +| B.cpp:9:14:9:17 | box1 [elem1] | B.cpp:9:20:9:24 | elem1 | provenance | | +| B.cpp:15:15:15:27 | new | B.cpp:16:37:16:37 | e | provenance | | +| B.cpp:16:16:16:38 | call to Box1 [elem2] | B.cpp:17:25:17:26 | b1 [elem2] | provenance | | +| B.cpp:16:37:16:37 | e | B.cpp:16:16:16:38 | call to Box1 [elem2] | provenance | | +| B.cpp:16:37:16:37 | e | B.cpp:33:26:33:27 | e2 | provenance | | +| B.cpp:17:16:17:27 | call to Box2 [box1, elem2] | B.cpp:19:10:19:11 | b2 [box1, elem2] | provenance | | +| B.cpp:17:25:17:26 | b1 [elem2] | B.cpp:17:16:17:27 | call to Box2 [box1, elem2] | provenance | | +| B.cpp:17:25:17:26 | b1 [elem2] | B.cpp:44:16:44:17 | b1 [elem2] | provenance | | +| B.cpp:19:10:19:11 | b2 [box1, elem2] | B.cpp:19:14:19:17 | box1 [elem2] | provenance | | +| 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:22 | ... = ... | B.cpp:35:7:35:10 | this [post update] [elem1] | 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: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:9:22:22 | constructor init of field s1 [post-this] [s1] | C.cpp:18:12:18:18 | call to C [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:18:12:18:18 | call to C [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 | | +| C.cpp:27:8:27:11 | this [s3] | C.cpp:31:10:31:11 | this [s3] | provenance | | +| C.cpp:29:10:29:11 | this [s1] | C.cpp:29:10:29:11 | s1 | provenance | | +| C.cpp:31:10:31:11 | this [s3] | C.cpp:31:10:31:11 | s3 | provenance | | +| 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: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 | 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 | | +| D.cpp:22:10:22:11 | b2 [box, elem] | D.cpp:22:14:22:20 | call to getBox1 [elem] | provenance | | +| D.cpp:22:14:22:20 | call to getBox1 [elem] | D.cpp:10:11:10:17 | this [elem] | provenance | | +| D.cpp:22:14:22:20 | call to getBox1 [elem] | D.cpp:22:25:22:31 | call to getElem | provenance | | +| D.cpp:28:15:28:24 | new | D.cpp:30:5:30:20 | ... = ... | provenance | | +| D.cpp:30:5:30:5 | b [post update] [box, elem] | D.cpp:31:14:31:14 | b [box, elem] | provenance | | +| D.cpp:30:5:30:20 | ... = ... | D.cpp:30:8:30:10 | box [post update] [elem] | provenance | | +| D.cpp:30:8:30:10 | box [post update] [elem] | D.cpp:30:5:30:5 | b [post update] [box, elem] | provenance | | +| D.cpp:31:14:31:14 | b [box, elem] | D.cpp:21:30:21:31 | b2 [box, elem] | provenance | | +| D.cpp:35:15:35:24 | new | D.cpp:37:21:37:21 | e | provenance | | +| D.cpp:37:5:37:5 | b [post update] [box, elem] | D.cpp:38:14:38:14 | b [box, elem] | provenance | | +| D.cpp:37:8:37:10 | ref arg box [elem] | D.cpp:37:5:37:5 | b [post update] [box, elem] | provenance | | +| D.cpp:37:21:37:21 | e | D.cpp:11:24:11:24 | e | provenance | | +| D.cpp:37:21:37:21 | e | D.cpp:37:8:37:10 | ref arg box [elem] | provenance | | +| D.cpp:38:14:38:14 | b [box, elem] | D.cpp:21:30:21:31 | b2 [box, elem] | provenance | | +| 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: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: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 | | +| D.cpp:56:15:56:24 | new | D.cpp:58:5:58:27 | ... = ... | provenance | | +| D.cpp:58:5:58:12 | boxfield [post update] [box, elem] | D.cpp:58:5:58:12 | this [post update] [boxfield, box, elem] | provenance | | +| D.cpp:58:5:58:12 | this [post update] [boxfield, box, elem] | D.cpp:59:5:59:7 | this [boxfield, box, elem] | provenance | | +| D.cpp:58:5:58:27 | ... = ... | D.cpp:58:15:58:17 | box [post update] [elem] | provenance | | +| D.cpp:58:15:58:17 | box [post update] [elem] | D.cpp:58:5:58:12 | boxfield [post update] [box, elem] | provenance | | +| D.cpp:59:5:59:7 | this [boxfield, box, elem] | D.cpp:63:8:63:10 | this [boxfield, box, elem] | provenance | | +| D.cpp:63:8:63:10 | this [boxfield, box, elem] | D.cpp:64:10:64:17 | this [boxfield, box, elem] | provenance | | +| D.cpp:64:10:64:17 | boxfield [box, elem] | D.cpp:64:20:64:22 | box [elem] | provenance | | +| D.cpp:64:10:64:17 | this [boxfield, box, elem] | D.cpp:64:10:64:17 | boxfield [box, elem] | provenance | | +| D.cpp:64:20:64:22 | box [elem] | D.cpp:64:25:64:28 | elem | provenance | | +| E.cpp:19:27:19:27 | p [data, buffer] | E.cpp:21:10:21:10 | p [data, buffer] | provenance | | +| E.cpp:21:10:21:10 | p [data, buffer] | E.cpp:21:13:21:16 | data [buffer] | provenance | | +| E.cpp:21:13:21:16 | data [buffer] | E.cpp:21:18:21:23 | buffer | provenance | | +| E.cpp:28:21:28:23 | ref arg raw | E.cpp:31:10:31:12 | raw | provenance | | +| E.cpp:29:21:29:21 | b [post update] [buffer] | E.cpp:32:10:32:10 | b [buffer] | provenance | | +| E.cpp:29:24:29:29 | ref arg buffer | E.cpp:29:21:29:21 | b [post update] [buffer] | provenance | | +| E.cpp:30:21:30:21 | p [post update] [data, buffer] | E.cpp:33:19:33:19 | p [data, buffer] | provenance | | +| E.cpp:30:23:30:26 | data [post update] [buffer] | E.cpp:30:21:30:21 | p [post update] [data, buffer] | provenance | | +| E.cpp:30:28:30:33 | ref arg buffer | E.cpp:30:23:30:26 | data [post update] [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 | | +| 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 [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 [m1] | provenance | | +| aliasing.cpp:9:3:9:3 | s [post update] [m1] | aliasing.cpp:25:17:25:19 | ref arg & ... [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 [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 [m1] | provenance | | +| aliasing.cpp:13:3:13:3 | s [post update] [m1] | aliasing.cpp:26:19:26:20 | ref arg s2 [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 | | +| aliasing.cpp:25:17:25:19 | ref arg & ... [m1] | aliasing.cpp:29:8:29:9 | s1 [m1] | provenance | | +| aliasing.cpp:26:19:26:20 | ref arg s2 [m1] | aliasing.cpp:30:8:30:9 | s2 [m1] | provenance | | +| aliasing.cpp:29:8:29:9 | s1 [m1] | aliasing.cpp:29:11:29:12 | m1 | provenance | | +| aliasing.cpp:30:8:30:9 | s2 [m1] | aliasing.cpp:30:11:30:12 | m1 | provenance | | +| aliasing.cpp:60:3:60:4 | s2 [post update] [m1] | aliasing.cpp:62:8:62:12 | copy2 [m1] | provenance | | +| aliasing.cpp:60:3:60:22 | ... = ... | aliasing.cpp:60:3:60:4 | s2 [post update] [m1] | provenance | | +| aliasing.cpp:60:11:60:20 | call to user_input | aliasing.cpp:60:3:60:22 | ... = ... | provenance | | +| aliasing.cpp:62:8:62:12 | copy2 [m1] | aliasing.cpp:62:14:62:15 | m1 | provenance | | +| aliasing.cpp:92:3:92:3 | w [post update] [s, m1] | aliasing.cpp:93:8:93:8 | w [s, m1] | provenance | | +| aliasing.cpp:92:3:92:23 | ... = ... | aliasing.cpp:92:5:92:5 | s [post update] [m1] | provenance | | +| aliasing.cpp:92:5:92:5 | s [post update] [m1] | aliasing.cpp:92:3:92:3 | w [post update] [s, m1] | provenance | | +| aliasing.cpp:92:12:92:21 | call to user_input | aliasing.cpp:92:3:92:23 | ... = ... | provenance | | +| aliasing.cpp:93:8:93:8 | w [s, m1] | aliasing.cpp:93:10:93:10 | s [m1] | provenance | | +| aliasing.cpp:93:10:93:10 | s [m1] | aliasing.cpp:93:12:93:13 | m1 | provenance | | +| aliasing.cpp:105:23:105:24 | pa | aliasing.cpp:158:17:158:20 | ref arg data | provenance | | +| aliasing.cpp:105:23:105:24 | pa | aliasing.cpp:164:17:164:20 | ref arg data | provenance | | +| 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:106:4:106:5 | pa [inner post update] | aliasing.cpp:158:17:158:20 | ref arg data | provenance | | +| aliasing.cpp:106:4:106:5 | pa [inner post update] | aliasing.cpp:164:17:164:20 | ref arg data | provenance | | +| aliasing.cpp:106:4:106:5 | pa [inner post update] | aliasing.cpp:175:15:175:22 | ref arg & ... | provenance | | +| aliasing.cpp:106:4:106:5 | pa [inner post update] | aliasing.cpp:187:15:187:22 | ref arg & ... | provenance | | +| aliasing.cpp:106:4:106:5 | pa [inner post update] | 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:106:4:106:5 | pa [inner post update] | 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 | | +| aliasing.cpp:159:11:159:14 | data | aliasing.cpp:159:8:159:14 | * ... | provenance | | +| aliasing.cpp:164:15:164:15 | s [post update] [data] | aliasing.cpp:165:8:165:8 | s [data] | provenance | | +| aliasing.cpp:164:17:164:20 | ref arg data | aliasing.cpp:164:15:164:15 | s [post update] [data] | provenance | | +| aliasing.cpp:165:8:165:8 | s [data] | aliasing.cpp:165:10:165:13 | data | provenance | | +| aliasing.cpp:165:10:165:13 | data | aliasing.cpp:165:8:165:16 | access to array | provenance | | +| aliasing.cpp:175:15:175:22 | ref arg & ... | aliasing.cpp:175:21:175:22 | m1 [inner post update] | provenance | | +| aliasing.cpp:175:16:175:17 | s2 [post update] [s, m1] | aliasing.cpp:176:8:176:9 | s2 [s, m1] | provenance | | +| aliasing.cpp:175:19:175:19 | s [post update] [m1] | aliasing.cpp:175:16:175:17 | s2 [post update] [s, m1] | provenance | | +| aliasing.cpp:175:21:175:22 | m1 [inner post update] | aliasing.cpp:175:19:175:19 | s [post update] [m1] | provenance | | +| aliasing.cpp:176:8:176:9 | s2 [s, m1] | aliasing.cpp:176:11:176:11 | s [m1] | provenance | | +| aliasing.cpp:176:11:176:11 | s [m1] | aliasing.cpp:176:13:176:14 | m1 | provenance | | +| aliasing.cpp:187:15:187:22 | ref arg & ... | aliasing.cpp:187:21:187:22 | m1 [inner post update] | provenance | | +| aliasing.cpp:187:16:187:17 | s2 [post update] [s, m1] | aliasing.cpp:189:8:189:11 | s2_2 [s, m1] | provenance | | +| aliasing.cpp:187:19:187:19 | s [post update] [m1] | aliasing.cpp:187:16:187:17 | s2 [post update] [s, m1] | provenance | | +| aliasing.cpp:187:21:187:22 | m1 [inner post update] | aliasing.cpp:187:19:187:19 | s [post update] [m1] | provenance | | +| aliasing.cpp:189:8:189:11 | s2_2 [s, m1] | aliasing.cpp:189:13:189:13 | s [m1] | provenance | | +| aliasing.cpp:189:13:189:13 | s [m1] | aliasing.cpp:189:15:189:16 | m1 | provenance | | +| aliasing.cpp:200:15:200:24 | ref arg & ... | aliasing.cpp:200:23:200:24 | m1 [inner post update] | provenance | | +| aliasing.cpp:200:16:200:18 | ps2 [post update] [s, m1] | aliasing.cpp:201:8:201:10 | ps2 [s, m1] | provenance | | +| aliasing.cpp:200:21:200:21 | s [post update] [m1] | aliasing.cpp:200:16:200:18 | ps2 [post update] [s, m1] | provenance | | +| aliasing.cpp:200:23:200:24 | m1 [inner post update] | aliasing.cpp:200:21:200:21 | s [post update] [m1] | provenance | | +| aliasing.cpp:201:8:201:10 | ps2 [s, m1] | aliasing.cpp:201:13:201:13 | s [m1] | provenance | | +| aliasing.cpp:201:13:201:13 | s [m1] | aliasing.cpp:201:15:201:16 | m1 | provenance | | +| arrays.cpp:6:12:6:21 | call to user_input | arrays.cpp:7:8:7:13 | access to array | provenance | | +| arrays.cpp:6:12:6:21 | call to user_input | arrays.cpp:8:8:8:13 | access to array | provenance | | +| arrays.cpp:6:12:6:21 | call to user_input | arrays.cpp:9:8:9:11 | * ... | provenance | | +| arrays.cpp:6:12:6:21 | call to user_input | arrays.cpp:10:8:10:15 | * ... | provenance | | +| arrays.cpp:15:14:15:23 | call to user_input | arrays.cpp:16:8:16:13 | access to array | provenance | | +| arrays.cpp:15:14:15:23 | call to user_input | arrays.cpp:17:8:17:13 | access to array | provenance | | +| arrays.cpp:36:3:36:3 | o [post update] [nested, arr, data] | arrays.cpp:37:8:37:8 | o [nested, arr, data] | provenance | | +| arrays.cpp:36:3:36:3 | o [post update] [nested, arr, data] | arrays.cpp:38:8:38:8 | o [nested, arr, data] | provenance | | +| arrays.cpp:36:3:36:17 | access to array [post update] [data] | arrays.cpp:36:12:36:14 | arr [inner post update] [data] | provenance | | +| arrays.cpp:36:3:36:37 | ... = ... | arrays.cpp:36:3:36:17 | access to array [post update] [data] | provenance | | +| arrays.cpp:36:5:36:10 | nested [post update] [arr, data] | arrays.cpp:36:3:36:3 | o [post update] [nested, arr, data] | provenance | | +| arrays.cpp:36:12:36:14 | arr [inner post update] [data] | arrays.cpp:36:5:36:10 | nested [post update] [arr, data] | provenance | | +| arrays.cpp:36:26:36:35 | call to user_input | arrays.cpp:36:3:36:37 | ... = ... | provenance | | +| arrays.cpp:37:8:37:8 | o [nested, arr, data] | arrays.cpp:37:10:37:15 | nested [arr, data] | provenance | | +| arrays.cpp:37:8:37:8 | o [post update] [nested, arr, data] | arrays.cpp:38:8:38:8 | o [nested, arr, data] | provenance | | +| arrays.cpp:37:8:37:22 | access to array [data] | arrays.cpp:37:24:37:27 | data | provenance | | +| arrays.cpp:37:8:37:22 | access to array [data] | arrays.cpp:37:24:37:27 | data | provenance | | +| arrays.cpp:37:8:37:22 | access to array [post update] [data] | arrays.cpp:37:17:37:19 | arr [inner post update] [data] | provenance | | +| arrays.cpp:37:10:37:15 | nested [arr, data] | arrays.cpp:37:17:37:19 | arr [data] | provenance | | +| arrays.cpp:37:10:37:15 | nested [post update] [arr, data] | arrays.cpp:37:8:37:8 | o [post update] [nested, arr, data] | provenance | | +| arrays.cpp:37:17:37:19 | arr [data] | arrays.cpp:37:8:37:22 | access to array [data] | provenance | | +| arrays.cpp:37:17:37:19 | arr [inner post update] [data] | arrays.cpp:37:10:37:15 | nested [post update] [arr, data] | provenance | | +| arrays.cpp:37:24:37:27 | data | arrays.cpp:37:24:37:27 | ref arg data | provenance | | +| arrays.cpp:37:24:37:27 | data | realistic.cpp:41:17:41:17 | o | provenance | | +| arrays.cpp:37:24:37:27 | ref arg data | arrays.cpp:37:8:37:22 | access to array [post update] [data] | provenance | | +| arrays.cpp:38:8:38:8 | o [nested, arr, data] | arrays.cpp:38:10:38:15 | nested [arr, data] | provenance | | +| arrays.cpp:38:8:38:22 | access to array [data] | arrays.cpp:38:24:38:27 | data | provenance | | +| arrays.cpp:38:10:38:15 | nested [arr, data] | arrays.cpp:38:17:38:19 | arr [data] | provenance | | +| arrays.cpp:38:17:38:19 | arr [data] | arrays.cpp:38:8:38:22 | access to array [data] | provenance | | +| arrays.cpp:42:3:42:3 | o [post update] [indirect, arr, data] | arrays.cpp:43:8:43:8 | o [indirect, arr, data] | provenance | | +| arrays.cpp:42:3:42:3 | o [post update] [indirect, arr, data] | arrays.cpp:44:8:44:8 | o [indirect, arr, data] | provenance | | +| arrays.cpp:42:3:42:20 | access to array [post update] [data] | arrays.cpp:42:15:42:17 | arr [inner post update] [data] | provenance | | +| arrays.cpp:42:3:42:40 | ... = ... | arrays.cpp:42:3:42:20 | access to array [post update] [data] | provenance | | +| arrays.cpp:42:5:42:12 | indirect [post update] [arr, data] | arrays.cpp:42:3:42:3 | o [post update] [indirect, arr, data] | provenance | | +| arrays.cpp:42:15:42:17 | arr [inner post update] [data] | arrays.cpp:42:5:42:12 | indirect [post update] [arr, data] | provenance | | +| arrays.cpp:42:29:42:38 | call to user_input | arrays.cpp:42:3:42:40 | ... = ... | provenance | | +| arrays.cpp:43:8:43:8 | o [indirect, arr, data] | arrays.cpp:43:10:43:17 | indirect [arr, data] | provenance | | +| arrays.cpp:43:8:43:8 | o [post update] [indirect, arr, data] | arrays.cpp:44:8:44:8 | o [indirect, arr, data] | provenance | | +| arrays.cpp:43:8:43:25 | access to array [data] | arrays.cpp:43:27:43:30 | data | provenance | | +| arrays.cpp:43:8:43:25 | access to array [data] | arrays.cpp:43:27:43:30 | data | provenance | | +| arrays.cpp:43:8:43:25 | access to array [post update] [data] | arrays.cpp:43:20:43:22 | arr [inner post update] [data] | provenance | | +| arrays.cpp:43:10:43:17 | indirect [arr, data] | arrays.cpp:43:20:43:22 | arr [data] | provenance | | +| arrays.cpp:43:10:43:17 | indirect [post update] [arr, data] | arrays.cpp:43:8:43:8 | o [post update] [indirect, arr, data] | provenance | | +| arrays.cpp:43:20:43:22 | arr [data] | arrays.cpp:43:8:43:25 | access to array [data] | provenance | | +| arrays.cpp:43:20:43:22 | arr [inner post update] [data] | arrays.cpp:43:10:43:17 | indirect [post update] [arr, data] | provenance | | +| arrays.cpp:43:27:43:30 | data | arrays.cpp:43:27:43:30 | ref arg data | provenance | | +| arrays.cpp:43:27:43:30 | data | realistic.cpp:41:17:41:17 | o | provenance | | +| arrays.cpp:43:27:43:30 | ref arg data | arrays.cpp:43:8:43:25 | access to array [post update] [data] | provenance | | +| arrays.cpp:44:8:44:8 | o [indirect, arr, data] | arrays.cpp:44:10:44:17 | indirect [arr, data] | provenance | | +| arrays.cpp:44:8:44:25 | access to array [data] | arrays.cpp:44:27:44:30 | data | provenance | | +| 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 [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: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: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: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 | | +| by_reference.cpp:32:12:32:12 | s [a] | by_reference.cpp:32:15:32:15 | a | provenance | | +| by_reference.cpp:35:9:35:19 | this [a] | by_reference.cpp:36:12:36:15 | this [a] | provenance | | +| by_reference.cpp:36:12:36:15 | this [a] | by_reference.cpp:36:18:36:18 | a | provenance | | +| by_reference.cpp:39:9:39:21 | this [a] | by_reference.cpp:40:12:40:15 | this [a] | provenance | | +| by_reference.cpp:40:12:40:15 | this [a] | by_reference.cpp:35:9:35:19 | this [a] | provenance | | +| by_reference.cpp:40:12:40:15 | this [a] | by_reference.cpp:40:18:40:28 | call to getDirectly | provenance | | +| by_reference.cpp:43:9:43:27 | this [a] | by_reference.cpp:44:26:44:29 | this [a] | provenance | | +| by_reference.cpp:44:26:44:29 | this [a] | by_reference.cpp:31:46:31:46 | s [a] | provenance | | +| by_reference.cpp:44:26:44:29 | this [a] | by_reference.cpp:44:12:44:24 | call to nonMemberGetA | provenance | | +| by_reference.cpp:50:3:50:3 | ref arg s [a] | by_reference.cpp:51:8:51:8 | s [a] | provenance | | +| by_reference.cpp:50:17:50:26 | call to user_input | by_reference.cpp:15:26:15:30 | value | provenance | | +| by_reference.cpp:50:17:50:26 | call to user_input | by_reference.cpp:50:3:50:3 | ref arg s [a] | provenance | | +| by_reference.cpp:51:8:51:8 | s [a] | by_reference.cpp:35:9:35:19 | this [a] | provenance | | +| by_reference.cpp:51:8:51:8 | s [a] | by_reference.cpp:51:10:51:20 | call to getDirectly | provenance | | +| by_reference.cpp:56:3:56:3 | ref arg s [a] | by_reference.cpp:57:8:57:8 | s [a] | provenance | | +| by_reference.cpp:56:19:56:28 | call to user_input | by_reference.cpp:19:28:19:32 | value | provenance | | +| by_reference.cpp:56:19:56:28 | call to user_input | by_reference.cpp:56:3:56:3 | ref arg s [a] | provenance | | +| by_reference.cpp:57:8:57:8 | s [a] | by_reference.cpp:39:9:39:21 | this [a] | provenance | | +| by_reference.cpp:57:8:57:8 | s [a] | by_reference.cpp:57:10:57:22 | call to getIndirectly | provenance | | +| by_reference.cpp:62:3:62:3 | ref arg s [a] | by_reference.cpp:63:8:63:8 | s [a] | provenance | | +| by_reference.cpp:62:25:62:34 | call to user_input | by_reference.cpp:23:34:23:38 | value | provenance | | +| by_reference.cpp:62:25:62:34 | call to user_input | by_reference.cpp:62:3:62:3 | ref arg s [a] | provenance | | +| by_reference.cpp:63:8:63:8 | s [a] | by_reference.cpp:43:9:43:27 | this [a] | provenance | | +| by_reference.cpp:63:8:63:8 | s [a] | by_reference.cpp:63:10:63:28 | call to getThroughNonMember | provenance | | +| by_reference.cpp:68:17:68:18 | ref arg & ... [a] | by_reference.cpp:69:23:69:23 | s [a] | provenance | | +| by_reference.cpp:68:21:68:30 | call to user_input | by_reference.cpp:11:48:11:52 | value | provenance | | +| by_reference.cpp:68:21:68:30 | call to user_input | by_reference.cpp:68:17:68:18 | ref arg & ... [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:69:23:69:23 | s [a] | by_reference.cpp:69:22:69:23 | & ... [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 [a] | provenance | | +| by_reference.cpp:84:3:84:7 | inner [post update] [a] | by_reference.cpp:102:21:102:39 | ref arg & ... [a] | provenance | | +| by_reference.cpp:84:3:84:7 | inner [post update] [a] | by_reference.cpp:103:27:103:35 | ref arg inner_ptr [a] | provenance | | +| by_reference.cpp:84:3:84:7 | inner [post update] [a] | by_reference.cpp:106:21:106:41 | ref arg & ... [a] | provenance | | +| by_reference.cpp:84:3:84:7 | inner [post update] [a] | by_reference.cpp:107:29:107:37 | ref arg inner_ptr [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 [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 [a] | provenance | | +| by_reference.cpp:88:3:88:7 | inner [post update] [a] | by_reference.cpp:122:27:122:38 | ref arg inner_nested [a] | provenance | | +| by_reference.cpp:88:3:88:7 | inner [post update] [a] | by_reference.cpp:123:21:123:36 | ref arg * ... [a] | provenance | | +| by_reference.cpp:88:3:88:7 | inner [post update] [a] | by_reference.cpp:126:29:126:40 | ref arg inner_nested [a] | provenance | | +| by_reference.cpp:88:3:88:7 | inner [post update] [a] | by_reference.cpp:127:21:127:38 | ref arg * ... [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:92:4:92:5 | pa [inner post update] | by_reference.cpp:104:15:104:22 | ref arg & ... | provenance | | +| by_reference.cpp:92:4:92:5 | pa [inner post update] | 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:92:4:92:5 | pa [inner post update] | 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 | | +| by_reference.cpp:102:21:102:39 | ref arg & ... [a] | by_reference.cpp:102:28:102:39 | inner_nested [inner post update] [a] | provenance | | +| by_reference.cpp:102:22:102:26 | outer [post update] [inner_nested, a] | by_reference.cpp:110:8:110:12 | outer [inner_nested, a] | provenance | | +| by_reference.cpp:102:28:102:39 | inner_nested [inner post update] [a] | by_reference.cpp:102:22:102:26 | outer [post update] [inner_nested, a] | provenance | | +| by_reference.cpp:103:21:103:25 | outer [post update] [inner_ptr, a] | by_reference.cpp:111:8:111:12 | outer [inner_ptr, a] | provenance | | +| by_reference.cpp:103:27:103:35 | ref arg inner_ptr [a] | by_reference.cpp:103:21:103:25 | outer [post update] [inner_ptr, a] | provenance | | +| by_reference.cpp:104:15:104:22 | ref arg & ... | by_reference.cpp:104:22:104:22 | a [inner post update] | provenance | | +| by_reference.cpp:104:16:104:20 | outer [post update] [a] | by_reference.cpp:112:8:112:12 | outer [a] | provenance | | +| by_reference.cpp:104:22:104:22 | a [inner post update] | by_reference.cpp:104:16:104:20 | outer [post update] [a] | provenance | | +| by_reference.cpp:106:21:106:41 | ref arg & ... [a] | by_reference.cpp:106:30:106:41 | inner_nested [inner post update] [a] | provenance | | +| by_reference.cpp:106:22:106:27 | pouter [post update] [inner_nested, a] | by_reference.cpp:114:8:114:13 | pouter [inner_nested, a] | provenance | | +| by_reference.cpp:106:30:106:41 | inner_nested [inner post update] [a] | by_reference.cpp:106:22:106:27 | pouter [post update] [inner_nested, a] | provenance | | +| by_reference.cpp:107:21:107:26 | pouter [post update] [inner_ptr, a] | by_reference.cpp:115:8:115:13 | pouter [inner_ptr, a] | provenance | | +| by_reference.cpp:107:29:107:37 | ref arg inner_ptr [a] | by_reference.cpp:107:21:107:26 | pouter [post update] [inner_ptr, a] | provenance | | +| by_reference.cpp:108:15:108:24 | ref arg & ... | by_reference.cpp:108:24:108:24 | a [inner post update] | provenance | | +| by_reference.cpp:108:16:108:21 | pouter [post update] [a] | by_reference.cpp:116:8:116:13 | pouter [a] | provenance | | +| by_reference.cpp:108:24:108:24 | a [inner post update] | by_reference.cpp:108:16:108:21 | pouter [post update] [a] | provenance | | +| by_reference.cpp:110:8:110:12 | outer [inner_nested, a] | by_reference.cpp:110:14:110:25 | inner_nested [a] | provenance | | +| by_reference.cpp:110:14:110:25 | inner_nested [a] | by_reference.cpp:110:27:110:27 | a | provenance | | +| by_reference.cpp:111:8:111:12 | outer [inner_ptr, a] | by_reference.cpp:111:14:111:22 | inner_ptr [a] | provenance | | +| by_reference.cpp:111:14:111:22 | inner_ptr [a] | by_reference.cpp:111:25:111:25 | a | provenance | | +| by_reference.cpp:112:8:112:12 | outer [a] | by_reference.cpp:112:14:112:14 | a | provenance | | +| by_reference.cpp:114:8:114:13 | pouter [inner_nested, a] | by_reference.cpp:114:16:114:27 | inner_nested [a] | provenance | | +| by_reference.cpp:114:16:114:27 | inner_nested [a] | by_reference.cpp:114:29:114:29 | a | provenance | | +| by_reference.cpp:115:8:115:13 | pouter [inner_ptr, a] | by_reference.cpp:115:16:115:24 | inner_ptr [a] | provenance | | +| by_reference.cpp:115:16:115:24 | inner_ptr [a] | by_reference.cpp:115:27:115:27 | a | provenance | | +| by_reference.cpp:116:8:116:13 | pouter [a] | by_reference.cpp:116:16:116:16 | a | provenance | | +| by_reference.cpp:122:21:122:25 | outer [post update] [inner_nested, a] | by_reference.cpp:130:8:130:12 | outer [inner_nested, a] | provenance | | +| by_reference.cpp:122:27:122:38 | ref arg inner_nested [a] | by_reference.cpp:122:21:122:25 | outer [post update] [inner_nested, a] | provenance | | +| by_reference.cpp:123:21:123:36 | ref arg * ... [a] | by_reference.cpp:123:28:123:36 | inner_ptr [inner post update] [a] | provenance | | +| by_reference.cpp:123:22:123:26 | outer [post update] [inner_ptr, a] | by_reference.cpp:131:8:131:12 | outer [inner_ptr, a] | provenance | | +| by_reference.cpp:123:28:123:36 | inner_ptr [inner post update] [a] | by_reference.cpp:123:22:123:26 | outer [post update] [inner_ptr, a] | provenance | | +| by_reference.cpp:124:15:124:19 | outer [post update] [a] | by_reference.cpp:132:8:132:12 | outer [a] | provenance | | +| by_reference.cpp:124:21:124:21 | ref arg a | by_reference.cpp:124:15:124:19 | outer [post update] [a] | provenance | | +| by_reference.cpp:126:21:126:26 | pouter [post update] [inner_nested, a] | by_reference.cpp:134:8:134:13 | pouter [inner_nested, a] | provenance | | +| by_reference.cpp:126:29:126:40 | ref arg inner_nested [a] | by_reference.cpp:126:21:126:26 | pouter [post update] [inner_nested, a] | provenance | | +| by_reference.cpp:127:21:127:38 | ref arg * ... [a] | by_reference.cpp:127:30:127:38 | inner_ptr [inner post update] [a] | provenance | | +| by_reference.cpp:127:22:127:27 | pouter [post update] [inner_ptr, a] | by_reference.cpp:135:8:135:13 | pouter [inner_ptr, a] | provenance | | +| by_reference.cpp:127:30:127:38 | inner_ptr [inner post update] [a] | by_reference.cpp:127:22:127:27 | pouter [post update] [inner_ptr, a] | provenance | | +| by_reference.cpp:128:15:128:20 | pouter [post update] [a] | by_reference.cpp:136:8:136:13 | pouter [a] | provenance | | +| by_reference.cpp:128:23:128:23 | ref arg a | by_reference.cpp:128:15:128:20 | pouter [post update] [a] | provenance | | +| by_reference.cpp:130:8:130:12 | outer [inner_nested, a] | by_reference.cpp:130:14:130:25 | inner_nested [a] | provenance | | +| by_reference.cpp:130:14:130:25 | inner_nested [a] | by_reference.cpp:130:27:130:27 | a | provenance | | +| by_reference.cpp:131:8:131:12 | outer [inner_ptr, a] | by_reference.cpp:131:14:131:22 | inner_ptr [a] | provenance | | +| by_reference.cpp:131:14:131:22 | inner_ptr [a] | by_reference.cpp:131:25:131:25 | a | provenance | | +| by_reference.cpp:132:8:132:12 | outer [a] | by_reference.cpp:132:14:132:14 | a | provenance | | +| by_reference.cpp:134:8:134:13 | pouter [inner_nested, a] | by_reference.cpp:134:16:134:27 | inner_nested [a] | provenance | | +| by_reference.cpp:134:16:134:27 | inner_nested [a] | by_reference.cpp:134:29:134:29 | a | provenance | | +| by_reference.cpp:135:8:135:13 | pouter [inner_ptr, a] | by_reference.cpp:135:16:135:24 | inner_ptr [a] | provenance | | +| by_reference.cpp:135:16:135:24 | inner_ptr [a] | by_reference.cpp:135:27:135:27 | a | provenance | | +| by_reference.cpp:136:8:136:13 | pouter [a] | by_reference.cpp:136:16:136:16 | a | provenance | | +| clearning.cpp:53:4:53:4 | s [post update] [x] | clearning.cpp:55:8:55:8 | s [x] | provenance | | +| clearning.cpp:53:6:53:6 | x [inner post update] | clearning.cpp:53:4:53:4 | s [post update] [x] | provenance | | +| clearning.cpp:53:10:53:19 | call to user_input | clearning.cpp:53:6:53:6 | x [inner post update] | provenance | | +| clearning.cpp:55:8:55:8 | s [x] | clearning.cpp:55:10:55:10 | x | provenance | | +| clearning.cpp:124:2:124:2 | s [post update] [val] | clearning.cpp:126:7:126:7 | s [val] | provenance | | +| clearning.cpp:124:2:124:25 | ... = ... | clearning.cpp:124:2:124:2 | s [post update] [val] | provenance | | +| clearning.cpp:124:10:124:19 | call to user_input | clearning.cpp:124:2:124:25 | ... = ... | provenance | | +| clearning.cpp:126:7:126:7 | s [val] | clearning.cpp:126:9:126:11 | val | provenance | | +| clearning.cpp:131:2:131:2 | s [post update] [val] | clearning.cpp:133:7:133:7 | s [val] | provenance | | +| clearning.cpp:131:2:131:25 | ... = ... | clearning.cpp:131:2:131:2 | s [post update] [val] | provenance | | +| clearning.cpp:131:10:131:19 | call to user_input | clearning.cpp:131:2:131:25 | ... = ... | provenance | | +| clearning.cpp:133:7:133:7 | s [val] | clearning.cpp:133:9:133:11 | val | provenance | | +| clearning.cpp:138:2:138:2 | s [post update] [val] | clearning.cpp:140:7:140:7 | s [val] | provenance | | +| clearning.cpp:138:2:138:25 | ... = ... | clearning.cpp:138:2:138:2 | s [post update] [val] | provenance | | +| clearning.cpp:138:10:138:19 | call to user_input | clearning.cpp:138:2:138:25 | ... = ... | provenance | | +| clearning.cpp:140:7:140:7 | s [val] | clearning.cpp:140:9:140:11 | val | provenance | | +| clearning.cpp:151:3:151:3 | s [post update] [val] | clearning.cpp:152:8:152:8 | s [val] | provenance | | +| clearning.cpp:151:3:151:22 | ... = ... | clearning.cpp:151:3:151:3 | s [post update] [val] | provenance | | +| clearning.cpp:151:11:151:20 | call to user_input | clearning.cpp:151:3:151:22 | ... = ... | provenance | | +| clearning.cpp:152:8:152:8 | s [val] | clearning.cpp:152:10:152:12 | val | provenance | | +| clearning.cpp:157:3:157:3 | s [post update] [val] | clearning.cpp:159:8:159:8 | s [val] | provenance | | +| clearning.cpp:157:3:157:22 | ... = ... | clearning.cpp:157:3:157:3 | s [post update] [val] | provenance | | +| clearning.cpp:157:11:157:20 | call to user_input | clearning.cpp:157:3:157:22 | ... = ... | provenance | | +| clearning.cpp:159:8:159:8 | s [val] | clearning.cpp:159:10:159:12 | val | provenance | | +| clearning.cpp:164:3:164:3 | s [post update] [val] | clearning.cpp:166:8:166:8 | s [val] | provenance | | +| clearning.cpp:164:3:164:22 | ... = ... | clearning.cpp:164:3:164:3 | s [post update] [val] | provenance | | +| clearning.cpp:164:11:164:20 | call to user_input | clearning.cpp:164:3:164:22 | ... = ... | provenance | | +| clearning.cpp:166:8:166:8 | s [val] | clearning.cpp:166:10:166:12 | val | provenance | | +| clearning.cpp:171:3:171:3 | s [post update] [val] | clearning.cpp:173:8:173:8 | s [val] | provenance | | +| clearning.cpp:171:3:171:22 | ... = ... | clearning.cpp:171:3:171:3 | s [post update] [val] | provenance | | +| clearning.cpp:171:11:171:20 | call to user_input | clearning.cpp:171:3:171:22 | ... = ... | provenance | | +| clearning.cpp:173:8:173:8 | s [val] | clearning.cpp:173:10:173:12 | val | provenance | | +| clearning.cpp:178:3:178:3 | s [post update] [val] | clearning.cpp:180:8:180:8 | s [val] | provenance | | +| clearning.cpp:178:3:178:22 | ... = ... | clearning.cpp:178:3:178:3 | s [post update] [val] | provenance | | +| clearning.cpp:178:11:178:20 | call to user_input | clearning.cpp:178:3:178:22 | ... = ... | provenance | | +| clearning.cpp:180:8:180:8 | s [val] | clearning.cpp:180:10:180:12 | val | provenance | | +| complex.cpp:9:7:9:7 | this [a_] | complex.cpp:9:20:9:21 | this [a_] | provenance | | +| complex.cpp:9:20:9:21 | this [a_] | complex.cpp:9:20:9:21 | a_ | provenance | | +| 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: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: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 | | +| complex.cpp:42:8:42:8 | b [inner, f, a_] | complex.cpp:42:10:42:14 | inner [f, a_] | provenance | | +| complex.cpp:42:10:42:14 | inner [f, a_] | complex.cpp:42:16:42:16 | f [a_] | provenance | | +| complex.cpp:42:16:42:16 | f [a_] | complex.cpp:9:7:9:7 | this [a_] | provenance | | +| complex.cpp:42:16:42:16 | f [a_] | complex.cpp:42:18:42:18 | call to a | provenance | | +| complex.cpp:43:8:43:8 | b [inner, f, b_] | complex.cpp:43:10:43:14 | inner [f, b_] | provenance | | +| complex.cpp:43:10:43:14 | inner [f, b_] | complex.cpp:43:16:43:16 | f [b_] | provenance | | +| complex.cpp:43:16:43:16 | f [b_] | complex.cpp:10:7:10:7 | this [b_] | provenance | | +| complex.cpp:43:16:43:16 | f [b_] | complex.cpp:43:18:43:18 | call to b | provenance | | +| complex.cpp:53:3:53:4 | b1 [post update] [inner, f, a_] | complex.cpp:59:7:59:8 | b1 [inner, f, a_] | provenance | | +| complex.cpp:53:6:53:10 | inner [post update] [f, a_] | complex.cpp:53:3:53:4 | b1 [post update] [inner, f, a_] | provenance | | +| complex.cpp:53:12:53:12 | ref arg f [a_] | complex.cpp:53:6:53:10 | inner [post update] [f, a_] | provenance | | +| complex.cpp:53:19:53:28 | call to user_input | complex.cpp:11:17:11:17 | a | provenance | | +| complex.cpp:53:19:53:28 | call to user_input | complex.cpp:53:12:53:12 | ref arg f [a_] | provenance | | +| complex.cpp:54:3:54:4 | b2 [post update] [inner, f, b_] | complex.cpp:62:7:62:8 | b2 [inner, f, b_] | provenance | | +| complex.cpp:54:6:54:10 | inner [post update] [f, b_] | complex.cpp:54:3:54:4 | b2 [post update] [inner, f, b_] | provenance | | +| complex.cpp:54:12:54:12 | ref arg f [b_] | complex.cpp:54:6:54:10 | inner [post update] [f, b_] | provenance | | +| complex.cpp:54:19:54:28 | call to user_input | complex.cpp:12:17:12:17 | b | provenance | | +| complex.cpp:54:19:54:28 | call to user_input | complex.cpp:54:12:54:12 | ref arg f [b_] | provenance | | +| complex.cpp:55:3:55:4 | b3 [post update] [inner, f, a_] | complex.cpp:65:7:65:8 | b3 [inner, f, a_] | provenance | | +| complex.cpp:55:6:55:10 | inner [post update] [f, a_] | complex.cpp:55:3:55:4 | b3 [post update] [inner, f, a_] | provenance | | +| complex.cpp:55:12:55:12 | ref arg f [a_] | complex.cpp:55:6:55:10 | inner [post update] [f, a_] | provenance | | +| complex.cpp:55:19:55:28 | call to user_input | complex.cpp:11:17:11:17 | a | provenance | | +| complex.cpp:55:19:55:28 | call to user_input | complex.cpp:55:12:55:12 | ref arg f [a_] | provenance | | +| complex.cpp:56:3:56:4 | b3 [post update] [inner, f, b_] | complex.cpp:65:7:65:8 | b3 [inner, f, b_] | provenance | | +| complex.cpp:56:6:56:10 | inner [post update] [f, b_] | complex.cpp:56:3:56:4 | b3 [post update] [inner, f, b_] | provenance | | +| complex.cpp:56:12:56:12 | ref arg f [b_] | complex.cpp:56:6:56:10 | inner [post update] [f, b_] | provenance | | +| complex.cpp:56:19:56:28 | call to user_input | complex.cpp:12:17:12:17 | b | provenance | | +| complex.cpp:56:19:56:28 | call to user_input | complex.cpp:56:12:56:12 | ref arg f [b_] | provenance | | +| complex.cpp:59:7:59:8 | b1 [inner, f, a_] | complex.cpp:40:17:40:17 | b [inner, f, a_] | provenance | | +| complex.cpp:62:7:62:8 | b2 [inner, f, b_] | complex.cpp:40:17:40:17 | b [inner, f, b_] | provenance | | +| complex.cpp:65:7:65:8 | b3 [inner, f, a_] | complex.cpp:40:17:40:17 | b [inner, f, a_] | provenance | | +| complex.cpp:65:7:65:8 | b3 [inner, f, b_] | complex.cpp:40:17:40:17 | b [inner, f, b_] | provenance | | +| conflated.cpp:19:19:19:21 | ref arg raw | conflated.cpp:20:8:20:10 | raw | provenance | | +| conflated.cpp:29:3:29:4 | pa [post update] [x] | conflated.cpp:30:8:30:9 | pa [x] | provenance | | +| conflated.cpp:29:3:29:22 | ... = ... | conflated.cpp:29:3:29:4 | pa [post update] [x] | provenance | | +| conflated.cpp:29:11:29:20 | call to user_input | conflated.cpp:29:3:29:22 | ... = ... | provenance | | +| conflated.cpp:30:8:30:9 | pa [x] | conflated.cpp:30:12:30:12 | x | provenance | | +| conflated.cpp:36:3:36:4 | pa [post update] [x] | conflated.cpp:37:8:37:9 | pa [x] | provenance | | +| conflated.cpp:36:3:36:22 | ... = ... | conflated.cpp:36:3:36:4 | pa [post update] [x] | provenance | | +| conflated.cpp:36:11:36:20 | call to user_input | conflated.cpp:36:3:36:22 | ... = ... | provenance | | +| conflated.cpp:37:8:37:9 | pa [x] | conflated.cpp:37:12:37:12 | x | provenance | | +| conflated.cpp:54:3:54:4 | ll [post update] [next, y] | conflated.cpp:55:8:55:9 | ll [next, y] | provenance | | +| conflated.cpp:54:3:54:28 | ... = ... | conflated.cpp:54:7:54:10 | next [post update] [y] | provenance | | +| conflated.cpp:54:7:54:10 | next [post update] [y] | conflated.cpp:54:3:54:4 | ll [post update] [next, y] | provenance | | +| conflated.cpp:54:17:54:26 | call to user_input | conflated.cpp:54:3:54:28 | ... = ... | provenance | | +| conflated.cpp:55:8:55:9 | ll [next, y] | conflated.cpp:55:12:55:15 | next [y] | provenance | | +| conflated.cpp:55:12:55:15 | next [y] | conflated.cpp:55:18:55:18 | y | provenance | | +| conflated.cpp:60:3:60:4 | ll [post update] [next, y] | conflated.cpp:61:8:61:9 | ll [next, y] | provenance | | +| conflated.cpp:60:3:60:28 | ... = ... | conflated.cpp:60:7:60:10 | next [post update] [y] | provenance | | +| conflated.cpp:60:7:60:10 | next [post update] [y] | conflated.cpp:60:3:60:4 | ll [post update] [next, y] | provenance | | +| conflated.cpp:60:17:60:26 | call to user_input | conflated.cpp:60:3:60:28 | ... = ... | provenance | | +| conflated.cpp:61:8:61:9 | ll [next, y] | conflated.cpp:61:12:61:15 | next [y] | provenance | | +| conflated.cpp:61:12:61:15 | next [y] | conflated.cpp:61:18:61:18 | y | provenance | | +| constructors.cpp:18:9:18:9 | this [a_] | constructors.cpp:18:22:18:23 | this [a_] | provenance | | +| constructors.cpp:18:22:18:23 | this [a_] | constructors.cpp:18:22:18:23 | a_ | provenance | | +| constructors.cpp:19:9:19:9 | this [b_] | constructors.cpp:19:22:19:23 | this [b_] | provenance | | +| 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:28:23:28 | a | constructors.cpp:23:25:23:29 | constructor init of field a_ [post-this] [a_] | 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 | | +| constructors.cpp:28:10:28:10 | f [a_] | constructors.cpp:18:9:18:9 | this [a_] | provenance | | +| constructors.cpp:28:10:28:10 | f [a_] | constructors.cpp:28:12:28:12 | call to a | provenance | | +| constructors.cpp:29:10:29:10 | f [b_] | constructors.cpp:19:9:19:9 | this [b_] | provenance | | +| constructors.cpp:29:10:29:10 | f [b_] | constructors.cpp:29:12:29:12 | call to b | provenance | | +| constructors.cpp:34:11:34:20 | call to user_input | constructors.cpp:23:13:23:13 | a | provenance | | +| constructors.cpp:34:11:34:20 | call to user_input | constructors.cpp:34:11:34:26 | call to Foo [a_] | provenance | | +| constructors.cpp:34:11:34:26 | call to Foo [a_] | constructors.cpp:40:9:40:9 | f [a_] | provenance | | +| constructors.cpp:35:11:35:26 | call to Foo [b_] | constructors.cpp:43:9:43:9 | g [b_] | provenance | | +| constructors.cpp:35:14:35:23 | call to user_input | constructors.cpp:23:20:23:20 | b | provenance | | +| constructors.cpp:35:14:35:23 | call to user_input | constructors.cpp:35:11:35:26 | call to Foo [b_] | provenance | | +| constructors.cpp:36:11:36:20 | call to user_input | constructors.cpp:23:13:23:13 | a | provenance | | +| constructors.cpp:36:11:36:20 | call to user_input | constructors.cpp:36:11:36:37 | call to Foo [a_] | provenance | | +| constructors.cpp:36:11:36:37 | call to Foo [a_] | constructors.cpp:46:9:46:9 | h [a_] | provenance | | +| constructors.cpp:36:11:36:37 | call to Foo [b_] | constructors.cpp:46:9:46:9 | h [b_] | provenance | | +| constructors.cpp:36:25:36:34 | call to user_input | constructors.cpp:23:20:23:20 | b | provenance | | +| constructors.cpp:36:25:36:34 | call to user_input | constructors.cpp:36:11:36:37 | call to Foo [b_] | provenance | | +| constructors.cpp:40:9:40:9 | f [a_] | constructors.cpp:26:15:26:15 | f [a_] | provenance | | +| constructors.cpp:43:9:43:9 | g [b_] | constructors.cpp:26:15:26:15 | f [b_] | provenance | | +| 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: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 [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 [a] | provenance | | +| qualifiers.cpp:13:51:13:65 | ... = ... | qualifiers.cpp:13:51:13:55 | inner [post update] [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: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: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: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: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: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: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: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: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 | | +| realistic.cpp:41:17:41:17 | o | realistic.cpp:41:17:41:17 | o | provenance | | +| realistic.cpp:53:9:53:11 | foo [post update] [bar, baz, userInput, bufferLen] | realistic.cpp:61:21:61:23 | foo [bar, baz, userInput, bufferLen] | provenance | | +| realistic.cpp:53:9:53:18 | access to array [post update] [baz, userInput, bufferLen] | realistic.cpp:53:13:53:15 | bar [inner post update] [baz, userInput, bufferLen] | provenance | | +| realistic.cpp:53:9:53:66 | ... = ... | realistic.cpp:53:25:53:33 | userInput [post update] [bufferLen] | provenance | | +| realistic.cpp:53:13:53:15 | bar [inner post update] [baz, userInput, bufferLen] | realistic.cpp:53:9:53:11 | foo [post update] [bar, baz, userInput, bufferLen] | provenance | | +| realistic.cpp:53:20:53:22 | baz [post update] [userInput, bufferLen] | realistic.cpp:53:9:53:18 | access to array [post update] [baz, userInput, bufferLen] | provenance | | +| realistic.cpp:53:25:53:33 | userInput [post update] [bufferLen] | realistic.cpp:53:20:53:22 | baz [post update] [userInput, bufferLen] | provenance | | +| realistic.cpp:53:55:53:64 | call to user_input | realistic.cpp:53:9:53:66 | ... = ... | provenance | | +| realistic.cpp:61:21:61:23 | foo [bar, baz, userInput, bufferLen] | realistic.cpp:61:25:61:27 | bar [baz, userInput, bufferLen] | provenance | | +| realistic.cpp:61:21:61:23 | foo [post update] [bar, baz, userInput, bufferLen] | realistic.cpp:61:21:61:23 | foo [bar, baz, userInput, bufferLen] | provenance | | +| realistic.cpp:61:21:61:30 | access to array [baz, userInput, bufferLen] | realistic.cpp:61:32:61:34 | baz [userInput, bufferLen] | provenance | | +| realistic.cpp:61:21:61:30 | access to array [post update] [baz, userInput, bufferLen] | realistic.cpp:61:25:61:27 | bar [inner post update] [baz, userInput, bufferLen] | provenance | | +| realistic.cpp:61:25:61:27 | bar [baz, userInput, bufferLen] | realistic.cpp:61:21:61:30 | access to array [baz, userInput, bufferLen] | provenance | | +| realistic.cpp:61:25:61:27 | bar [inner post update] [baz, userInput, bufferLen] | realistic.cpp:61:21:61:23 | foo [post update] [bar, baz, userInput, bufferLen] | provenance | | +| realistic.cpp:61:32:61:34 | baz [post update] [userInput, bufferLen] | realistic.cpp:61:21:61:30 | access to array [post update] [baz, userInput, bufferLen] | provenance | | +| realistic.cpp:61:32:61:34 | baz [userInput, bufferLen] | realistic.cpp:61:37:61:45 | userInput [bufferLen] | provenance | | +| realistic.cpp:61:37:61:45 | userInput [bufferLen] | realistic.cpp:61:47:61:55 | bufferLen | provenance | | +| realistic.cpp:61:37:61:45 | userInput [bufferLen] | realistic.cpp:61:47:61:55 | bufferLen | provenance | | +| realistic.cpp:61:37:61:45 | userInput [post update] [bufferLen] | realistic.cpp:61:32:61:34 | baz [post update] [userInput, bufferLen] | provenance | | +| realistic.cpp:61:47:61:55 | bufferLen | realistic.cpp:41:17:41:17 | o | provenance | | +| realistic.cpp:61:47:61:55 | bufferLen | realistic.cpp:61:47:61:55 | ref arg bufferLen | provenance | | +| realistic.cpp:61:47:61:55 | ref arg bufferLen | realistic.cpp:61:37:61:45 | userInput [post update] [bufferLen] | provenance | | +| simple.cpp:18:9:18:9 | this [a_] | simple.cpp:18:22:18:23 | this [a_] | provenance | | +| simple.cpp:18:22:18:23 | this [a_] | simple.cpp:18:22:18:23 | a_ | provenance | | +| 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: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: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 | | +| simple.cpp:28:10:28:10 | f [a_] | simple.cpp:18:9:18:9 | this [a_] | provenance | | +| simple.cpp:28:10:28:10 | f [a_] | simple.cpp:28:12:28:12 | call to a | provenance | | +| simple.cpp:29:10:29:10 | f [b_] | simple.cpp:19:9:19:9 | this [b_] | provenance | | +| simple.cpp:29:10:29:10 | f [b_] | simple.cpp:29:12:29:12 | call to b | provenance | | +| simple.cpp:39:5:39:5 | ref arg f [a_] | simple.cpp:45:9:45:9 | f [a_] | provenance | | +| simple.cpp:39:12:39:21 | call to user_input | simple.cpp:20:19:20:19 | a | provenance | | +| simple.cpp:39:12:39:21 | call to user_input | simple.cpp:39:5:39:5 | ref arg f [a_] | provenance | | +| simple.cpp:40:5:40:5 | ref arg g [b_] | simple.cpp:48:9:48:9 | g [b_] | provenance | | +| simple.cpp:40:12:40:21 | call to user_input | simple.cpp:21:19:21:19 | b | provenance | | +| simple.cpp:40:12:40:21 | call to user_input | simple.cpp:40:5:40:5 | ref arg g [b_] | provenance | | +| simple.cpp:41:5:41:5 | ref arg h [a_] | simple.cpp:51:9:51:9 | h [a_] | provenance | | +| simple.cpp:41:12:41:21 | call to user_input | simple.cpp:20:19:20:19 | a | provenance | | +| simple.cpp:41:12:41:21 | call to user_input | simple.cpp:41:5:41:5 | ref arg h [a_] | provenance | | +| simple.cpp:42:5:42:5 | ref arg h [b_] | simple.cpp:51:9:51:9 | h [b_] | provenance | | +| simple.cpp:42:12:42:21 | call to user_input | simple.cpp:21:19:21:19 | b | provenance | | +| simple.cpp:42:12:42:21 | call to user_input | simple.cpp:42:5:42:5 | ref arg h [b_] | provenance | | +| simple.cpp:45:9:45:9 | f [a_] | simple.cpp:26:15:26:15 | f [a_] | provenance | | +| simple.cpp:48:9:48:9 | g [b_] | simple.cpp:26:15:26:15 | f [b_] | provenance | | +| simple.cpp:51:9:51:9 | h [a_] | simple.cpp:26:15:26:15 | f [a_] | provenance | | +| simple.cpp:51:9:51:9 | h [b_] | simple.cpp:26:15:26:15 | f [b_] | provenance | | +| simple.cpp:65:5:65:5 | a [post update] [i] | simple.cpp:67:10:67:11 | a2 [i] | provenance | | +| simple.cpp:65:5:65:22 | ... = ... | simple.cpp:65:5:65:5 | a [post update] [i] | provenance | | +| simple.cpp:65:11:65:20 | call to user_input | simple.cpp:65:5:65:22 | ... = ... | provenance | | +| simple.cpp:67:10:67:11 | a2 [i] | simple.cpp:67:13:67:13 | i | provenance | | +| simple.cpp:78:9:78:15 | this [f2, f1] | simple.cpp:79:16:79:17 | this [f2, f1] | provenance | | +| simple.cpp:79:16:79:17 | f2 [f1] | simple.cpp:79:19:79:20 | f1 | provenance | | +| simple.cpp:79:16:79:17 | this [f2, f1] | simple.cpp:79:16:79:17 | f2 [f1] | provenance | | +| simple.cpp:83:9:83:10 | f2 [post update] [f1] | simple.cpp:83:9:83:10 | this [post update] [f2, f1] | provenance | | +| simple.cpp:83:9:83:10 | this [post update] [f2, f1] | simple.cpp:84:14:84:20 | this [f2, f1] | provenance | | +| simple.cpp:83:9:83:28 | ... = ... | simple.cpp:83:9:83:10 | f2 [post update] [f1] | provenance | | +| simple.cpp:83:17:83:26 | call to user_input | simple.cpp:83:9:83:28 | ... = ... | provenance | | +| simple.cpp:84:14:84:20 | this [f2, f1] | simple.cpp:78:9:78:15 | this [f2, f1] | provenance | | +| simple.cpp:84:14:84:20 | this [f2, f1] | simple.cpp:84:14:84:20 | call to getf2f1 | provenance | | +| simple.cpp:92:5:92:5 | a [post update] [i] | simple.cpp:94:10:94:11 | a2 [i] | provenance | | +| simple.cpp:92:5:92:22 | ... = ... | simple.cpp:92:5:92:5 | a [post update] [i] | provenance | | +| simple.cpp:92:11:92:20 | call to user_input | simple.cpp:92:5:92:22 | ... = ... | provenance | | +| simple.cpp:94:10:94:11 | a2 [i] | simple.cpp:94:13:94:13 | i | provenance | | +| struct_init.c:14:24:14:25 | ab [a] | struct_init.c:14:24:14:25 | ab [a] | provenance | | +| struct_init.c:14:24:14:25 | ab [a] | struct_init.c:15:8:15:9 | ab [a] | provenance | | +| struct_init.c:15:8:15:9 | ab [a] | struct_init.c:15:12:15:12 | a | provenance | | +| struct_init.c:15:8:15:9 | ab [a] | struct_init.c:15:12:15:12 | a | provenance | | +| struct_init.c:15:8:15:9 | ab [post update] [a] | struct_init.c:14:24:14:25 | ab [a] | provenance | | +| struct_init.c:15:12:15:12 | a | realistic.cpp:41:17:41:17 | o | provenance | | +| struct_init.c:15:12:15:12 | a | struct_init.c:15:12:15:12 | ref arg a | provenance | | +| struct_init.c:15:12:15:12 | ref arg a | struct_init.c:15:8:15:9 | ab [post update] [a] | provenance | | +| struct_init.c:20:17:20:36 | {...} [a] | struct_init.c:22:8:22:9 | ab [a] | provenance | | +| struct_init.c:20:17:20:36 | {...} [a] | struct_init.c:24:11:24:12 | ab [a] | provenance | | +| struct_init.c:20:17:20:36 | {...} [a] | struct_init.c:28:6:28:7 | ab [a] | provenance | | +| struct_init.c:20:20:20:29 | call to user_input | struct_init.c:20:17:20:36 | {...} [a] | provenance | | +| struct_init.c:22:8:22:9 | ab [a] | struct_init.c:22:11:22:11 | a | provenance | | +| struct_init.c:22:8:22:9 | ab [a] | struct_init.c:22:11:22:11 | a | provenance | | +| struct_init.c:22:8:22:9 | ab [post update] [a] | struct_init.c:24:11:24:12 | ab [a] | provenance | | +| struct_init.c:22:8:22:9 | ab [post update] [a] | struct_init.c:28:6:28:7 | ab [a] | provenance | | +| struct_init.c:22:11:22:11 | a | realistic.cpp:41:17:41:17 | o | provenance | | +| struct_init.c:22:11:22:11 | a | struct_init.c:22:11:22:11 | ref arg a | provenance | | +| struct_init.c:22:11:22:11 | ref arg a | struct_init.c:22:8:22:9 | ab [post update] [a] | provenance | | +| struct_init.c:24:10:24:12 | & ... [a] | struct_init.c:14:24:14:25 | ab [a] | provenance | | +| struct_init.c:24:10:24:12 | & ... [a] | struct_init.c:24:10:24:12 | ref arg & ... [a] | provenance | | +| struct_init.c:24:10:24:12 | ref arg & ... [a] | struct_init.c:28:6:28:7 | ab [a] | provenance | | +| struct_init.c:24:11:24:12 | ab [a] | struct_init.c:24:10:24:12 | & ... [a] | provenance | | +| struct_init.c:26:23:29:3 | {...} [nestedAB, a] | struct_init.c:31:8:31:12 | outer [nestedAB, a] | provenance | | +| struct_init.c:26:23:29:3 | {...} [nestedAB, a] | struct_init.c:36:11:36:15 | outer [nestedAB, a] | provenance | | +| struct_init.c:26:23:29:3 | {...} [pointerAB, a] | struct_init.c:33:8:33:12 | outer [pointerAB, a] | provenance | | +| struct_init.c:27:5:27:23 | {...} [a] | struct_init.c:26:23:29:3 | {...} [nestedAB, a] | provenance | | +| struct_init.c:27:7:27:16 | call to user_input | struct_init.c:27:5:27:23 | {...} [a] | provenance | | +| struct_init.c:28:5:28:7 | & ... [a] | struct_init.c:26:23:29:3 | {...} [pointerAB, a] | provenance | | +| struct_init.c:28:6:28:7 | ab [a] | struct_init.c:28:5:28:7 | & ... [a] | provenance | | +| struct_init.c:31:8:31:12 | outer [nestedAB, a] | struct_init.c:31:14:31:21 | nestedAB [a] | provenance | | +| struct_init.c:31:8:31:12 | outer [post update] [nestedAB, a] | struct_init.c:36:11:36:15 | outer [nestedAB, a] | provenance | | +| struct_init.c:31:14:31:21 | nestedAB [a] | struct_init.c:31:23:31:23 | a | provenance | | +| struct_init.c:31:14:31:21 | nestedAB [a] | struct_init.c:31:23:31:23 | a | provenance | | +| struct_init.c:31:14:31:21 | nestedAB [post update] [a] | struct_init.c:31:8:31:12 | outer [post update] [nestedAB, a] | provenance | | +| struct_init.c:31:23:31:23 | a | realistic.cpp:41:17:41:17 | o | provenance | | +| struct_init.c:31:23:31:23 | a | struct_init.c:31:23:31:23 | ref arg a | provenance | | +| struct_init.c:31:23:31:23 | ref arg a | struct_init.c:31:14:31:21 | nestedAB [post update] [a] | provenance | | +| struct_init.c:33:8:33:12 | outer [pointerAB, a] | struct_init.c:33:14:33:22 | pointerAB [a] | provenance | | +| struct_init.c:33:14:33:22 | pointerAB [a] | struct_init.c:33:25:33:25 | a | provenance | | +| struct_init.c:36:10:36:24 | & ... [a] | struct_init.c:14:24:14:25 | ab [a] | provenance | | +| struct_init.c:36:11:36:15 | outer [nestedAB, a] | struct_init.c:36:17:36:24 | nestedAB [a] | provenance | | +| struct_init.c:36:17:36:24 | nestedAB [a] | struct_init.c:36:10:36:24 | & ... [a] | provenance | | +| struct_init.c:40:17:40:36 | {...} [a] | struct_init.c:43:6:43:7 | ab [a] | provenance | | +| struct_init.c:40:20:40:29 | call to user_input | struct_init.c:40:17:40:36 | {...} [a] | provenance | | +| struct_init.c:41:23:44:3 | {...} [pointerAB, a] | struct_init.c:46:10:46:14 | outer [pointerAB, a] | provenance | | +| struct_init.c:43:5:43:7 | & ... [a] | struct_init.c:41:23:44:3 | {...} [pointerAB, a] | provenance | | +| struct_init.c:43:6:43:7 | ab [a] | struct_init.c:43:5:43:7 | & ... [a] | provenance | | +| 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:10:23:10 | c | semmle.label | c | | A.cpp:25:7:25:10 | this [post update] [c] | semmle.label | this [post update] [c] | diff --git a/cpp/ql/test/query-tests/Critical/MemoryFreed/DoubleFree.expected b/cpp/ql/test/query-tests/Critical/MemoryFreed/DoubleFree.expected index f30092f0626..b9ac7f0a2d5 100644 --- a/cpp/ql/test/query-tests/Critical/MemoryFreed/DoubleFree.expected +++ b/cpp/ql/test/query-tests/Critical/MemoryFreed/DoubleFree.expected @@ -1,16 +1,16 @@ edges -| test_free.cpp:11:10:11:10 | pointer to free output argument | test_free.cpp:14:10:14:10 | a | -| test_free.cpp:30:10:30:10 | pointer to free output argument | test_free.cpp:31:27:31:27 | a | -| test_free.cpp:35:10:35:10 | pointer to free output argument | test_free.cpp:37:27:37:27 | a | -| test_free.cpp:42:27:42:27 | pointer to free output argument | test_free.cpp:46:10:46:10 | a | -| test_free.cpp:44:27:44:27 | pointer to free output argument | test_free.cpp:46:10:46:10 | a | -| test_free.cpp:50:27:50:27 | pointer to free output argument | test_free.cpp:51:10:51:10 | a | -| test_free.cpp:69:10:69:10 | pointer to free output argument | test_free.cpp:72:14:72:14 | a | -| test_free.cpp:83:12:83:12 | pointer to operator delete output argument | test_free.cpp:85:12:85:12 | a | -| test_free.cpp:101:10:101:10 | pointer to free output argument | test_free.cpp:103:10:103:10 | a | -| test_free.cpp:128:10:128:11 | pointer to free output argument | test_free.cpp:129:10:129:11 | * ... | -| test_free.cpp:152:27:152:27 | pointer to free output argument | test_free.cpp:154:10:154:10 | a | -| test_free.cpp:207:10:207:10 | pointer to free output argument | test_free.cpp:209:10:209:10 | a | +| test_free.cpp:11:10:11:10 | pointer to free output argument | test_free.cpp:14:10:14:10 | a | provenance | | +| test_free.cpp:30:10:30:10 | pointer to free output argument | test_free.cpp:31:27:31:27 | a | provenance | | +| test_free.cpp:35:10:35:10 | pointer to free output argument | test_free.cpp:37:27:37:27 | a | provenance | | +| test_free.cpp:42:27:42:27 | pointer to free output argument | test_free.cpp:46:10:46:10 | a | provenance | | +| test_free.cpp:44:27:44:27 | pointer to free output argument | test_free.cpp:46:10:46:10 | a | provenance | | +| test_free.cpp:50:27:50:27 | pointer to free output argument | test_free.cpp:51:10:51:10 | a | provenance | | +| test_free.cpp:69:10:69:10 | pointer to free output argument | test_free.cpp:72:14:72:14 | a | provenance | | +| test_free.cpp:83:12:83:12 | pointer to operator delete output argument | test_free.cpp:85:12:85:12 | a | provenance | | +| test_free.cpp:101:10:101:10 | pointer to free output argument | test_free.cpp:103:10:103:10 | a | provenance | | +| test_free.cpp:128:10:128:11 | pointer to free output argument | test_free.cpp:129:10:129:11 | * ... | provenance | | +| test_free.cpp:152:27:152:27 | pointer to free output argument | test_free.cpp:154:10:154:10 | a | provenance | | +| test_free.cpp:207:10:207:10 | pointer to free output argument | test_free.cpp:209:10:209:10 | a | provenance | | nodes | test_free.cpp:11:10:11:10 | pointer to free output argument | semmle.label | pointer to free output argument | | test_free.cpp:14:10:14:10 | a | semmle.label | a | diff --git a/cpp/ql/test/query-tests/Critical/MemoryFreed/UseAfterFree.expected b/cpp/ql/test/query-tests/Critical/MemoryFreed/UseAfterFree.expected index bf2ba1ad092..ceed007f683 100644 --- a/cpp/ql/test/query-tests/Critical/MemoryFreed/UseAfterFree.expected +++ b/cpp/ql/test/query-tests/Critical/MemoryFreed/UseAfterFree.expected @@ -1,27 +1,27 @@ edges -| test_free.cpp:11:10:11:10 | pointer to free output argument | test_free.cpp:12:5:12:5 | a | -| test_free.cpp:11:10:11:10 | pointer to free output argument | test_free.cpp:13:5:13:6 | * ... | -| test_free.cpp:42:27:42:27 | pointer to free output argument | test_free.cpp:45:5:45:5 | a | -| test_free.cpp:44:27:44:27 | pointer to free output argument | test_free.cpp:45:5:45:5 | a | -| test_free.cpp:69:10:69:10 | pointer to free output argument | test_free.cpp:71:9:71:9 | a | -| test_free.cpp:83:12:83:12 | pointer to operator delete output argument | test_free.cpp:84:5:84:5 | a | -| test_free.cpp:90:10:90:10 | pointer to free output argument | test_free.cpp:91:5:91:5 | a | -| test_free.cpp:95:10:95:10 | pointer to free output argument | test_free.cpp:96:9:96:9 | a | -| test_free.cpp:101:10:101:10 | pointer to free output argument | test_free.cpp:102:23:102:23 | a | -| test_free.cpp:152:27:152:27 | pointer to free output argument | test_free.cpp:153:5:153:5 | a | -| test_free.cpp:233:14:233:15 | pointer to free output argument | test_free.cpp:236:9:236:10 | * ... | -| test_free.cpp:239:14:239:15 | pointer to free output argument | test_free.cpp:241:9:241:10 | * ... | -| test_free.cpp:245:10:245:11 | pointer to free output argument | test_free.cpp:246:9:246:10 | * ... | -| test_free.cpp:277:8:277:8 | *s [post update] [buf] | test_free.cpp:278:12:278:12 | *s [buf] | -| test_free.cpp:277:8:277:13 | pointer to free output argument | test_free.cpp:277:8:277:8 | *s [post update] [buf] | -| test_free.cpp:278:12:278:12 | *s [buf] | test_free.cpp:278:15:278:17 | buf | -| test_free.cpp:282:8:282:8 | *s [post update] [buf] | test_free.cpp:283:12:283:12 | *s [buf] | -| test_free.cpp:282:8:282:12 | pointer to free output argument | test_free.cpp:282:8:282:8 | *s [post update] [buf] | -| test_free.cpp:283:12:283:12 | *s [buf] | test_free.cpp:283:14:283:16 | buf | -| test_free.cpp:293:8:293:10 | pointer to free output argument | test_free.cpp:294:3:294:13 | ... = ... | -| test_free.cpp:294:3:294:3 | *s [post update] [buf] | test_free.cpp:295:12:295:12 | *s [buf] | -| test_free.cpp:294:3:294:13 | ... = ... | test_free.cpp:294:3:294:3 | *s [post update] [buf] | -| test_free.cpp:295:12:295:12 | *s [buf] | test_free.cpp:295:14:295:16 | buf | +| test_free.cpp:11:10:11:10 | pointer to free output argument | test_free.cpp:12:5:12:5 | a | provenance | | +| test_free.cpp:11:10:11:10 | pointer to free output argument | test_free.cpp:13:5:13:6 | * ... | provenance | | +| test_free.cpp:42:27:42:27 | pointer to free output argument | test_free.cpp:45:5:45:5 | a | provenance | | +| test_free.cpp:44:27:44:27 | pointer to free output argument | test_free.cpp:45:5:45:5 | a | provenance | | +| test_free.cpp:69:10:69:10 | pointer to free output argument | test_free.cpp:71:9:71:9 | a | provenance | | +| test_free.cpp:83:12:83:12 | pointer to operator delete output argument | test_free.cpp:84:5:84:5 | a | provenance | | +| test_free.cpp:90:10:90:10 | pointer to free output argument | test_free.cpp:91:5:91:5 | a | provenance | | +| test_free.cpp:95:10:95:10 | pointer to free output argument | test_free.cpp:96:9:96:9 | a | provenance | | +| test_free.cpp:101:10:101:10 | pointer to free output argument | test_free.cpp:102:23:102:23 | a | provenance | | +| test_free.cpp:152:27:152:27 | pointer to free output argument | test_free.cpp:153:5:153:5 | a | provenance | | +| test_free.cpp:233:14:233:15 | pointer to free output argument | test_free.cpp:236:9:236:10 | * ... | provenance | | +| test_free.cpp:239:14:239:15 | pointer to free output argument | test_free.cpp:241:9:241:10 | * ... | provenance | | +| test_free.cpp:245:10:245:11 | pointer to free output argument | test_free.cpp:246:9:246:10 | * ... | provenance | | +| test_free.cpp:277:8:277:8 | *s [post update] [buf] | test_free.cpp:278:12:278:12 | *s [buf] | provenance | | +| test_free.cpp:277:8:277:13 | pointer to free output argument | test_free.cpp:277:8:277:8 | *s [post update] [buf] | provenance | | +| test_free.cpp:278:12:278:12 | *s [buf] | test_free.cpp:278:15:278:17 | buf | provenance | | +| test_free.cpp:282:8:282:8 | *s [post update] [buf] | test_free.cpp:283:12:283:12 | *s [buf] | provenance | | +| test_free.cpp:282:8:282:12 | pointer to free output argument | test_free.cpp:282:8:282:8 | *s [post update] [buf] | provenance | | +| test_free.cpp:283:12:283:12 | *s [buf] | test_free.cpp:283:14:283:16 | buf | provenance | | +| test_free.cpp:293:8:293:10 | pointer to free output argument | test_free.cpp:294:3:294:13 | ... = ... | provenance | | +| test_free.cpp:294:3:294:3 | *s [post update] [buf] | test_free.cpp:295:12:295:12 | *s [buf] | provenance | | +| test_free.cpp:294:3:294:13 | ... = ... | test_free.cpp:294:3:294:3 | *s [post update] [buf] | provenance | | +| test_free.cpp:295:12:295:12 | *s [buf] | test_free.cpp:295:14:295:16 | buf | provenance | | nodes | test_free.cpp:11:10:11:10 | pointer to free output argument | semmle.label | pointer to free output argument | | test_free.cpp:12:5:12:5 | a | semmle.label | a | diff --git a/cpp/ql/test/query-tests/Likely Bugs/Conversion/CastArrayPointerArithmetic/CastArrayPointerArithmetic.expected b/cpp/ql/test/query-tests/Likely Bugs/Conversion/CastArrayPointerArithmetic/CastArrayPointerArithmetic.expected index c65f76cec0f..3f66b2c20b3 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Conversion/CastArrayPointerArithmetic/CastArrayPointerArithmetic.expected +++ b/cpp/ql/test/query-tests/Likely Bugs/Conversion/CastArrayPointerArithmetic/CastArrayPointerArithmetic.expected @@ -1,25 +1,25 @@ edges -| test.cpp:26:29:26:29 | b | test.cpp:27:2:27:2 | b | -| test.cpp:30:34:30:34 | b | test.cpp:31:2:31:2 | b | -| test.cpp:34:31:34:31 | b | test.cpp:35:2:35:2 | b | -| test.cpp:57:19:57:19 | d | test.cpp:26:29:26:29 | b | -| test.cpp:57:19:57:19 | d | test.cpp:58:25:58:25 | d | -| test.cpp:57:19:57:19 | d | test.cpp:59:21:59:21 | d | -| test.cpp:58:25:58:25 | d | test.cpp:30:34:30:34 | b | -| test.cpp:58:25:58:25 | d | test.cpp:59:21:59:21 | d | -| test.cpp:59:21:59:21 | d | test.cpp:34:31:34:31 | b | -| test.cpp:74:19:74:21 | dss | test.cpp:26:29:26:29 | b | -| test.cpp:74:19:74:21 | dss | test.cpp:75:25:75:27 | dss | -| test.cpp:74:19:74:21 | dss | test.cpp:76:21:76:23 | dss | -| test.cpp:75:25:75:27 | dss | test.cpp:30:34:30:34 | b | -| test.cpp:75:25:75:27 | dss | test.cpp:76:21:76:23 | dss | -| test.cpp:76:21:76:23 | dss | test.cpp:34:31:34:31 | b | -| test.cpp:86:19:86:20 | d2 | test.cpp:26:29:26:29 | b | -| test.cpp:86:19:86:20 | d2 | test.cpp:87:25:87:26 | d2 | -| test.cpp:86:19:86:20 | d2 | test.cpp:88:21:88:22 | d2 | -| test.cpp:87:25:87:26 | d2 | test.cpp:30:34:30:34 | b | -| test.cpp:87:25:87:26 | d2 | test.cpp:88:21:88:22 | d2 | -| test.cpp:88:21:88:22 | d2 | test.cpp:34:31:34:31 | b | +| test.cpp:26:29:26:29 | b | test.cpp:27:2:27:2 | b | provenance | | +| test.cpp:30:34:30:34 | b | test.cpp:31:2:31:2 | b | provenance | | +| test.cpp:34:31:34:31 | b | test.cpp:35:2:35:2 | b | provenance | | +| test.cpp:57:19:57:19 | d | test.cpp:26:29:26:29 | b | provenance | | +| test.cpp:57:19:57:19 | d | test.cpp:58:25:58:25 | d | provenance | | +| test.cpp:57:19:57:19 | d | test.cpp:59:21:59:21 | d | provenance | | +| test.cpp:58:25:58:25 | d | test.cpp:30:34:30:34 | b | provenance | | +| test.cpp:58:25:58:25 | d | test.cpp:59:21:59:21 | d | provenance | | +| test.cpp:59:21:59:21 | d | test.cpp:34:31:34:31 | b | provenance | | +| test.cpp:74:19:74:21 | dss | test.cpp:26:29:26:29 | b | provenance | | +| test.cpp:74:19:74:21 | dss | test.cpp:75:25:75:27 | dss | provenance | | +| test.cpp:74:19:74:21 | dss | test.cpp:76:21:76:23 | dss | provenance | | +| test.cpp:75:25:75:27 | dss | test.cpp:30:34:30:34 | b | provenance | | +| test.cpp:75:25:75:27 | dss | test.cpp:76:21:76:23 | dss | provenance | | +| test.cpp:76:21:76:23 | dss | test.cpp:34:31:34:31 | b | provenance | | +| test.cpp:86:19:86:20 | d2 | test.cpp:26:29:26:29 | b | provenance | | +| test.cpp:86:19:86:20 | d2 | test.cpp:87:25:87:26 | d2 | provenance | | +| test.cpp:86:19:86:20 | d2 | test.cpp:88:21:88:22 | d2 | provenance | | +| test.cpp:87:25:87:26 | d2 | test.cpp:30:34:30:34 | b | provenance | | +| test.cpp:87:25:87:26 | d2 | test.cpp:88:21:88:22 | d2 | provenance | | +| test.cpp:88:21:88:22 | d2 | test.cpp:34:31:34:31 | b | provenance | | nodes | test.cpp:26:29:26:29 | b | semmle.label | b | | test.cpp:27:2:27:2 | b | semmle.label | b | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-022/SAMATE/TaintedPath/TaintedPath.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-022/SAMATE/TaintedPath/TaintedPath.expected index 5cc2f9cf507..dc8bb31748a 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-022/SAMATE/TaintedPath/TaintedPath.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-022/SAMATE/TaintedPath/TaintedPath.expected @@ -1,5 +1,5 @@ edges -| CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp:55:27:55:38 | fgets output argument | CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp:77:23:77:26 | *data | +| CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp:55:27:55:38 | fgets output argument | CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp:77:23:77:26 | *data | provenance | | nodes | CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp:55:27:55:38 | fgets output argument | semmle.label | fgets output argument | | CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp:77:23:77:26 | *data | semmle.label | *data | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-022/semmle/tests/TaintedPath.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-022/semmle/tests/TaintedPath.expected index dd587dd64ed..3b34718d954 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-022/semmle/tests/TaintedPath.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-022/semmle/tests/TaintedPath.expected @@ -1,9 +1,9 @@ edges -| test.c:8:27:8:30 | **argv | test.c:17:11:17:18 | *fileName | -| test.c:8:27:8:30 | **argv | test.c:32:11:32:18 | *fileName | -| test.c:8:27:8:30 | **argv | test.c:57:10:57:16 | *access to array | -| test.c:37:17:37:24 | scanf output argument | test.c:38:11:38:18 | *fileName | -| test.c:43:17:43:24 | scanf output argument | test.c:44:11:44:18 | *fileName | +| test.c:8:27:8:30 | **argv | test.c:17:11:17:18 | *fileName | provenance | | +| test.c:8:27:8:30 | **argv | test.c:32:11:32:18 | *fileName | provenance | | +| test.c:8:27:8:30 | **argv | test.c:57:10:57:16 | *access to array | provenance | | +| test.c:37:17:37:24 | scanf output argument | test.c:38:11:38:18 | *fileName | provenance | | +| test.c:43:17:43:24 | scanf output argument | test.c:44:11:44:18 | *fileName | provenance | | nodes | test.c:8:27:8:30 | **argv | semmle.label | **argv | | test.c:17:11:17:18 | *fileName | semmle.label | *fileName | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-078/SAMATE/ExecTainted/ExecTainted.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-078/SAMATE/ExecTainted/ExecTainted.expected index 4c6c158fb7a..8833a015609 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-078/SAMATE/ExecTainted/ExecTainted.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-078/SAMATE/ExecTainted/ExecTainted.expected @@ -1,9 +1,9 @@ edges -| tests.cpp:26:15:26:23 | **badSource | tests.cpp:51:12:51:20 | *call to badSource | -| tests.cpp:33:34:33:39 | *call to getenv | tests.cpp:38:39:38:49 | *environment | -| tests.cpp:38:25:38:36 | strncat output argument | tests.cpp:26:15:26:23 | **badSource | -| tests.cpp:38:39:38:49 | *environment | tests.cpp:38:25:38:36 | strncat output argument | -| tests.cpp:51:12:51:20 | *call to badSource | tests.cpp:53:16:53:19 | *data | +| tests.cpp:26:15:26:23 | **badSource | tests.cpp:51:12:51:20 | *call to badSource | provenance | | +| tests.cpp:33:34:33:39 | *call to getenv | tests.cpp:38:39:38:49 | *environment | provenance | | +| tests.cpp:38:25:38:36 | strncat output argument | tests.cpp:26:15:26:23 | **badSource | provenance | | +| tests.cpp:38:39:38:49 | *environment | tests.cpp:38:25:38:36 | strncat output argument | provenance | | +| tests.cpp:51:12:51:20 | *call to badSource | tests.cpp:53:16:53:19 | *data | provenance | | nodes | tests.cpp:26:15:26:23 | **badSource | semmle.label | **badSource | | tests.cpp:33:34:33:39 | *call to getenv | semmle.label | *call to getenv | 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 0b53a53adf6..d50edce5f2f 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 @@ -1,70 +1,70 @@ edges -| test.cpp:15:27:15:30 | **argv | test.cpp:22:45:22:52 | *userName | -| test.cpp:22:13:22:20 | sprintf output argument | test.cpp:23:12:23:19 | *command1 | -| test.cpp:22:45:22:52 | *userName | test.cpp:22:13:22:20 | sprintf output argument | -| test.cpp:47:21:47:26 | *call to getenv | test.cpp:50:35:50:43 | *envCflags | -| test.cpp:50:11:50:17 | sprintf output argument | test.cpp:51:10:51:16 | *command | -| test.cpp:50:35:50:43 | *envCflags | test.cpp:50:11:50:17 | sprintf output argument | -| test.cpp:62:9:62:16 | fread output argument | test.cpp:64:20:64:27 | *filename | -| test.cpp:64:11:64:17 | strncat output argument | test.cpp:65:10:65:16 | *command | -| test.cpp:64:20:64:27 | *filename | test.cpp:64:11:64:17 | strncat output argument | -| test.cpp:82:9:82:16 | fread output argument | test.cpp:84:20:84:27 | *filename | -| test.cpp:84:11:84:17 | strncat output argument | test.cpp:85:32:85:38 | *command | -| test.cpp:84:20:84:27 | *filename | test.cpp:84:11:84:17 | strncat output argument | -| test.cpp:91:9:91:16 | fread output argument | test.cpp:93:17:93:24 | *filename | -| test.cpp:93:11:93:14 | strncat output argument | test.cpp:94:45:94:48 | *path | -| test.cpp:93:17:93:24 | *filename | test.cpp:93:11:93:14 | strncat output argument | -| test.cpp:106:20:106:38 | *call to getenv | test.cpp:107:33:107:36 | *path | -| test.cpp:107:31:107:31 | call to operator+ | test.cpp:108:18:108:22 | *call to c_str | -| test.cpp:107:33:107:36 | *path | test.cpp:107:31:107:31 | call to operator+ | -| test.cpp:113:20:113:38 | *call to getenv | test.cpp:114:19:114:22 | *path | -| test.cpp:114:10:114:23 | call to operator+ | test.cpp:114:25:114:29 | *call to c_str | -| test.cpp:114:10:114:23 | call to operator+ | test.cpp:114:25:114:29 | *call to c_str | -| test.cpp:114:17:114:17 | call to operator+ | test.cpp:114:10:114:23 | call to operator+ | -| test.cpp:114:19:114:22 | *path | test.cpp:114:10:114:23 | call to operator+ | -| test.cpp:114:19:114:22 | *path | test.cpp:114:17:114:17 | call to operator+ | -| test.cpp:119:20:119:38 | *call to getenv | test.cpp:120:19:120:22 | *path | -| test.cpp:120:17:120:17 | call to operator+ | test.cpp:120:10:120:30 | *call to data | -| test.cpp:120:19:120:22 | *path | test.cpp:120:17:120:17 | call to operator+ | -| test.cpp:140:9:140:11 | fread output argument | test.cpp:142:31:142:33 | *str | -| test.cpp:142:11:142:17 | sprintf output argument | test.cpp:143:10:143:16 | *command | -| test.cpp:142:31:142:33 | *str | test.cpp:142:11:142:17 | sprintf output argument | -| test.cpp:174:9:174:16 | fread output argument | test.cpp:177:20:177:27 | *filename | -| test.cpp:174:9:174:16 | fread output argument | test.cpp:180:22:180:29 | *filename | -| test.cpp:177:13:177:17 | strncat output argument | test.cpp:178:22:178:26 | *flags | -| test.cpp:177:13:177:17 | strncat output argument | test.cpp:178:22:178:26 | *flags | -| test.cpp:177:20:177:27 | *filename | test.cpp:177:13:177:17 | strncat output argument | -| test.cpp:177:20:177:27 | *filename | test.cpp:177:13:177:17 | strncat output argument | -| test.cpp:178:13:178:19 | strncat output argument | test.cpp:183:32:183:38 | *command | -| test.cpp:178:13:178:19 | strncat output argument | test.cpp:183:32:183:38 | *command | -| test.cpp:178:22:178:26 | *flags | test.cpp:178:13:178:19 | strncat output argument | -| test.cpp:178:22:178:26 | *flags | test.cpp:178:13:178:19 | strncat output argument | -| test.cpp:180:13:180:19 | strncat output argument | test.cpp:183:32:183:38 | *command | -| test.cpp:180:22:180:29 | *filename | test.cpp:180:13:180:19 | strncat output argument | -| test.cpp:186:47:186:54 | *filename | test.cpp:187:18:187:25 | *filename | -| test.cpp:187:11:187:15 | strncat output argument | test.cpp:188:20:188:24 | *flags | -| test.cpp:187:11:187:15 | strncat output argument | test.cpp:188:20:188:24 | *flags | -| test.cpp:187:18:187:25 | *filename | test.cpp:187:11:187:15 | strncat output argument | -| test.cpp:187:18:187:25 | *filename | test.cpp:187:11:187:15 | strncat output argument | -| test.cpp:188:20:188:24 | *flags | test.cpp:188:11:188:17 | strncat output argument | -| test.cpp:188:20:188:24 | *flags | test.cpp:188:11:188:17 | strncat output argument | -| test.cpp:194:9:194:16 | fread output argument | test.cpp:196:26:196:33 | *filename | -| test.cpp:196:10:196:16 | concat output argument | test.cpp:198:32:198:38 | *command | -| test.cpp:196:10:196:16 | concat output argument | test.cpp:198:32:198:38 | *command | -| test.cpp:196:26:196:33 | *filename | test.cpp:186:47:186:54 | *filename | -| test.cpp:196:26:196:33 | *filename | test.cpp:196:10:196:16 | concat output argument | -| test.cpp:196:26:196:33 | *filename | test.cpp:196:10:196:16 | concat output argument | -| test.cpp:218:9:218:16 | fread output argument | test.cpp:220:19:220:26 | *filename | -| test.cpp:220:10:220:16 | strncat output argument | test.cpp:220:10:220:16 | strncat output argument | -| test.cpp:220:10:220:16 | strncat output argument | test.cpp:220:10:220:16 | strncat output argument | -| test.cpp:220:10:220:16 | strncat output argument | test.cpp:220:10:220:16 | strncat output argument | -| test.cpp:220:10:220:16 | strncat output argument | test.cpp:222:32:222:38 | *command | -| test.cpp:220:10:220:16 | strncat output argument | test.cpp:222:32:222:38 | *command | -| test.cpp:220:10:220:16 | strncat output argument | test.cpp:222:32:222:38 | *command | -| test.cpp:220:10:220:16 | strncat output argument | test.cpp:222:32:222:38 | *command | -| test.cpp:220:19:220:26 | *filename | test.cpp:220:10:220:16 | strncat output argument | -| test.cpp:220:19:220:26 | *filename | test.cpp:220:10:220:16 | strncat output argument | -| test.cpp:220:19:220:26 | *filename | test.cpp:220:19:220:26 | *filename | +| test.cpp:15:27:15:30 | **argv | test.cpp:22:45:22:52 | *userName | provenance | | +| test.cpp:22:13:22:20 | sprintf output argument | test.cpp:23:12:23:19 | *command1 | provenance | | +| test.cpp:22:45:22:52 | *userName | test.cpp:22:13:22:20 | sprintf output argument | provenance | | +| test.cpp:47:21:47:26 | *call to getenv | test.cpp:50:35:50:43 | *envCflags | provenance | | +| test.cpp:50:11:50:17 | sprintf output argument | test.cpp:51:10:51:16 | *command | provenance | | +| test.cpp:50:35:50:43 | *envCflags | test.cpp:50:11:50:17 | sprintf output argument | provenance | | +| test.cpp:62:9:62:16 | fread output argument | test.cpp:64:20:64:27 | *filename | provenance | | +| test.cpp:64:11:64:17 | strncat output argument | test.cpp:65:10:65:16 | *command | provenance | | +| test.cpp:64:20:64:27 | *filename | test.cpp:64:11:64:17 | strncat output argument | provenance | | +| test.cpp:82:9:82:16 | fread output argument | test.cpp:84:20:84:27 | *filename | provenance | | +| test.cpp:84:11:84:17 | strncat output argument | test.cpp:85:32:85:38 | *command | provenance | | +| test.cpp:84:20:84:27 | *filename | test.cpp:84:11:84:17 | strncat output argument | provenance | | +| test.cpp:91:9:91:16 | fread output argument | test.cpp:93:17:93:24 | *filename | provenance | | +| test.cpp:93:11:93:14 | strncat output argument | test.cpp:94:45:94:48 | *path | provenance | | +| test.cpp:93:17:93:24 | *filename | test.cpp:93:11:93:14 | strncat output argument | provenance | | +| test.cpp:106:20:106:38 | *call to getenv | test.cpp:107:33:107:36 | *path | provenance | | +| test.cpp:107:31:107:31 | call to operator+ | test.cpp:108:18:108:22 | *call to c_str | provenance | | +| test.cpp:107:33:107:36 | *path | test.cpp:107:31:107:31 | call to operator+ | provenance | | +| test.cpp:113:20:113:38 | *call to getenv | test.cpp:114:19:114:22 | *path | provenance | | +| test.cpp:114:10:114:23 | call to operator+ | test.cpp:114:25:114:29 | *call to c_str | provenance | | +| test.cpp:114:10:114:23 | call to operator+ | test.cpp:114:25:114:29 | *call to c_str | provenance | | +| test.cpp:114:17:114:17 | call to operator+ | test.cpp:114:10:114:23 | call to operator+ | provenance | | +| test.cpp:114:19:114:22 | *path | test.cpp:114:10:114:23 | call to operator+ | provenance | | +| test.cpp:114:19:114:22 | *path | test.cpp:114:17:114:17 | call to operator+ | provenance | | +| test.cpp:119:20:119:38 | *call to getenv | test.cpp:120:19:120:22 | *path | provenance | | +| test.cpp:120:17:120:17 | call to operator+ | test.cpp:120:10:120:30 | *call to data | provenance | | +| test.cpp:120:19:120:22 | *path | test.cpp:120:17:120:17 | call to operator+ | provenance | | +| test.cpp:140:9:140:11 | fread output argument | test.cpp:142:31:142:33 | *str | provenance | | +| test.cpp:142:11:142:17 | sprintf output argument | test.cpp:143:10:143:16 | *command | provenance | | +| test.cpp:142:31:142:33 | *str | test.cpp:142:11:142:17 | sprintf output argument | provenance | | +| test.cpp:174:9:174:16 | fread output argument | test.cpp:177:20:177:27 | *filename | provenance | | +| test.cpp:174:9:174:16 | fread output argument | test.cpp:180:22:180:29 | *filename | provenance | | +| test.cpp:177:13:177:17 | strncat output argument | test.cpp:178:22:178:26 | *flags | provenance | | +| test.cpp:177:13:177:17 | strncat output argument | test.cpp:178:22:178:26 | *flags | provenance | | +| test.cpp:177:20:177:27 | *filename | test.cpp:177:13:177:17 | strncat output argument | provenance | | +| test.cpp:177:20:177:27 | *filename | test.cpp:177:13:177:17 | strncat output argument | provenance | | +| test.cpp:178:13:178:19 | strncat output argument | test.cpp:183:32:183:38 | *command | provenance | | +| test.cpp:178:13:178:19 | strncat output argument | test.cpp:183:32:183:38 | *command | provenance | | +| test.cpp:178:22:178:26 | *flags | test.cpp:178:13:178:19 | strncat output argument | provenance | | +| test.cpp:178:22:178:26 | *flags | test.cpp:178:13:178:19 | strncat output argument | provenance | | +| test.cpp:180:13:180:19 | strncat output argument | test.cpp:183:32:183:38 | *command | provenance | | +| test.cpp:180:22:180:29 | *filename | test.cpp:180:13:180:19 | strncat output argument | provenance | | +| test.cpp:186:47:186:54 | *filename | test.cpp:187:18:187:25 | *filename | provenance | | +| test.cpp:187:11:187:15 | strncat output argument | test.cpp:188:20:188:24 | *flags | provenance | | +| test.cpp:187:11:187:15 | strncat output argument | test.cpp:188:20:188:24 | *flags | provenance | | +| test.cpp:187:18:187:25 | *filename | test.cpp:187:11:187:15 | strncat output argument | provenance | | +| test.cpp:187:18:187:25 | *filename | test.cpp:187:11:187:15 | strncat output argument | provenance | | +| test.cpp:188:20:188:24 | *flags | test.cpp:188:11:188:17 | strncat output argument | provenance | | +| test.cpp:188:20:188:24 | *flags | test.cpp:188:11:188:17 | strncat output argument | provenance | | +| test.cpp:194:9:194:16 | fread output argument | test.cpp:196:26:196:33 | *filename | provenance | | +| test.cpp:196:10:196:16 | concat output argument | test.cpp:198:32:198:38 | *command | provenance | | +| test.cpp:196:10:196:16 | concat output argument | test.cpp:198:32:198:38 | *command | provenance | | +| test.cpp:196:26:196:33 | *filename | test.cpp:186:47:186:54 | *filename | provenance | | +| test.cpp:196:26:196:33 | *filename | test.cpp:196:10:196:16 | concat output argument | provenance | | +| test.cpp:196:26:196:33 | *filename | test.cpp:196:10:196:16 | concat output argument | provenance | | +| test.cpp:218:9:218:16 | fread output argument | test.cpp:220:19:220:26 | *filename | provenance | | +| test.cpp:220:10:220:16 | strncat output argument | test.cpp:220:10:220:16 | strncat output argument | provenance | | +| test.cpp:220:10:220:16 | strncat output argument | test.cpp:220:10:220:16 | strncat output argument | provenance | | +| test.cpp:220:10:220:16 | strncat output argument | test.cpp:220:10:220:16 | strncat output argument | provenance | | +| test.cpp:220:10:220:16 | strncat output argument | test.cpp:222:32:222:38 | *command | provenance | | +| test.cpp:220:10:220:16 | strncat output argument | test.cpp:222:32:222:38 | *command | provenance | | +| test.cpp:220:10:220:16 | strncat output argument | test.cpp:222:32:222:38 | *command | provenance | | +| test.cpp:220:10:220:16 | strncat output argument | test.cpp:222:32:222:38 | *command | provenance | | +| test.cpp:220:19:220:26 | *filename | test.cpp:220:10:220:16 | strncat output argument | provenance | | +| test.cpp:220:19:220:26 | *filename | test.cpp:220:10:220:16 | strncat output argument | provenance | | +| test.cpp:220:19:220:26 | *filename | test.cpp:220:19:220:26 | *filename | provenance | | nodes | test.cpp:15:27:15:30 | **argv | semmle.label | **argv | | test.cpp:22:13:22:20 | sprintf output argument | semmle.label | sprintf output argument | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-079/semmle/CgiXss/CgiXss.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-079/semmle/CgiXss/CgiXss.expected index 48d6c47181e..6a28ffc96ec 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-079/semmle/CgiXss/CgiXss.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-079/semmle/CgiXss/CgiXss.expected @@ -1,13 +1,13 @@ edges -| search.c:14:24:14:28 | *query | search.c:17:8:17:12 | *query | -| search.c:22:24:22:28 | *query | search.c:23:39:23:43 | *query | -| search.c:55:24:55:28 | *query | search.c:62:8:62:17 | *query_text | -| search.c:67:21:67:26 | *call to getenv | search.c:71:17:71:25 | *raw_query | -| search.c:67:21:67:26 | *call to getenv | search.c:73:17:73:25 | *raw_query | -| search.c:67:21:67:26 | *call to getenv | search.c:77:17:77:25 | *raw_query | -| search.c:71:17:71:25 | *raw_query | search.c:14:24:14:28 | *query | -| search.c:73:17:73:25 | *raw_query | search.c:22:24:22:28 | *query | -| search.c:77:17:77:25 | *raw_query | search.c:55:24:55:28 | *query | +| search.c:14:24:14:28 | *query | search.c:17:8:17:12 | *query | provenance | | +| search.c:22:24:22:28 | *query | search.c:23:39:23:43 | *query | provenance | | +| search.c:55:24:55:28 | *query | search.c:62:8:62:17 | *query_text | provenance | | +| search.c:67:21:67:26 | *call to getenv | search.c:71:17:71:25 | *raw_query | provenance | | +| search.c:67:21:67:26 | *call to getenv | search.c:73:17:73:25 | *raw_query | provenance | | +| search.c:67:21:67:26 | *call to getenv | search.c:77:17:77:25 | *raw_query | provenance | | +| search.c:71:17:71:25 | *raw_query | search.c:14:24:14:28 | *query | provenance | | +| search.c:73:17:73:25 | *raw_query | search.c:22:24:22:28 | *query | provenance | | +| search.c:77:17:77:25 | *raw_query | search.c:55:24:55:28 | *query | provenance | | nodes | search.c:14:24:14:28 | *query | semmle.label | *query | | search.c:17:8:17:12 | *query | semmle.label | *query | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-089/SqlTainted/SqlTainted.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-089/SqlTainted/SqlTainted.expected index ee375465396..2300fddefd7 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-089/SqlTainted/SqlTainted.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-089/SqlTainted/SqlTainted.expected @@ -1,12 +1,12 @@ edges -| test.c:14:27:14:30 | **argv | test.c:21:18:21:23 | *query1 | -| test.c:14:27:14:30 | **argv | test.c:35:16:35:23 | *userName | -| test.c:35:16:35:23 | *userName | test.c:40:25:40:32 | *username | -| test.c:38:7:38:20 | **globalUsername | test.c:51:18:51:23 | *query1 | -| test.c:40:25:40:32 | *username | test.c:38:7:38:20 | **globalUsername | -| test.c:75:8:75:16 | gets output argument | test.c:76:17:76:25 | *userInput | -| test.c:75:8:75:16 | gets output argument | test.c:77:20:77:28 | *userInput | -| test.cpp:39:27:39:30 | **argv | test.cpp:43:27:43:33 | *access to array | +| test.c:14:27:14:30 | **argv | test.c:21:18:21:23 | *query1 | provenance | | +| test.c:14:27:14:30 | **argv | test.c:35:16:35:23 | *userName | provenance | | +| test.c:35:16:35:23 | *userName | test.c:40:25:40:32 | *username | provenance | | +| test.c:38:7:38:20 | **globalUsername | test.c:51:18:51:23 | *query1 | provenance | | +| test.c:40:25:40:32 | *username | test.c:38:7:38:20 | **globalUsername | provenance | | +| test.c:75:8:75:16 | gets output argument | test.c:76:17:76:25 | *userInput | provenance | | +| test.c:75:8:75:16 | gets output argument | test.c:77:20:77:28 | *userInput | provenance | | +| test.cpp:39:27:39:30 | **argv | test.cpp:43:27:43:33 | *access to array | provenance | | nodes | test.c:14:27:14:30 | **argv | semmle.label | **argv | | test.c:21:18:21:23 | *query1 | semmle.label | *query1 | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-114/SAMATE/UncontrolledProcessOperation/UncontrolledProcessOperation.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-114/SAMATE/UncontrolledProcessOperation/UncontrolledProcessOperation.expected index 86ecf2ea37c..d49af567a73 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-114/SAMATE/UncontrolledProcessOperation/UncontrolledProcessOperation.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-114/SAMATE/UncontrolledProcessOperation/UncontrolledProcessOperation.expected @@ -1,7 +1,7 @@ edges -| test.cpp:37:73:37:76 | *data | test.cpp:43:32:43:35 | *data | -| test.cpp:64:30:64:35 | *call to getenv | test.cpp:73:24:73:27 | *data | -| test.cpp:73:24:73:27 | *data | test.cpp:37:73:37:76 | *data | +| test.cpp:37:73:37:76 | *data | test.cpp:43:32:43:35 | *data | provenance | | +| test.cpp:64:30:64:35 | *call to getenv | test.cpp:73:24:73:27 | *data | provenance | | +| test.cpp:73:24:73:27 | *data | test.cpp:37:73:37:76 | *data | provenance | | nodes | test.cpp:37:73:37:76 | *data | semmle.label | *data | | test.cpp:43:32:43:35 | *data | semmle.label | *data | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-114/semmle/UncontrolledProcessOperation/UncontrolledProcessOperation.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-114/semmle/UncontrolledProcessOperation/UncontrolledProcessOperation.expected index 9e10928ecda..3f94fe17319 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-114/semmle/UncontrolledProcessOperation/UncontrolledProcessOperation.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-114/semmle/UncontrolledProcessOperation/UncontrolledProcessOperation.expected @@ -1,16 +1,16 @@ edges -| test.cpp:24:30:24:36 | *command | test.cpp:26:10:26:16 | *command | -| test.cpp:29:30:29:36 | *command | test.cpp:31:10:31:16 | *command | -| test.cpp:42:18:42:34 | *call to getenv | test.cpp:24:30:24:36 | *command | -| test.cpp:43:18:43:34 | *call to getenv | test.cpp:29:30:29:36 | *command | -| test.cpp:56:12:56:17 | fgets output argument | test.cpp:62:10:62:15 | *buffer | -| test.cpp:56:12:56:17 | fgets output argument | test.cpp:63:10:63:13 | *data | -| test.cpp:56:12:56:17 | fgets output argument | test.cpp:64:10:64:16 | *dataref | -| test.cpp:56:12:56:17 | fgets output argument | test.cpp:65:10:65:14 | *data2 | -| test.cpp:76:12:76:17 | fgets output argument | test.cpp:78:10:78:15 | *buffer | -| test.cpp:98:17:98:22 | recv output argument | test.cpp:99:15:99:20 | *buffer | -| test.cpp:106:17:106:22 | recv output argument | test.cpp:107:15:107:20 | *buffer | -| test.cpp:113:8:113:12 | *call to fgets | test.cpp:114:9:114:11 | *ptr | +| test.cpp:24:30:24:36 | *command | test.cpp:26:10:26:16 | *command | provenance | | +| test.cpp:29:30:29:36 | *command | test.cpp:31:10:31:16 | *command | provenance | | +| test.cpp:42:18:42:34 | *call to getenv | test.cpp:24:30:24:36 | *command | provenance | | +| test.cpp:43:18:43:34 | *call to getenv | test.cpp:29:30:29:36 | *command | provenance | | +| test.cpp:56:12:56:17 | fgets output argument | test.cpp:62:10:62:15 | *buffer | provenance | | +| test.cpp:56:12:56:17 | fgets output argument | test.cpp:63:10:63:13 | *data | provenance | | +| test.cpp:56:12:56:17 | fgets output argument | test.cpp:64:10:64:16 | *dataref | provenance | | +| test.cpp:56:12:56:17 | fgets output argument | test.cpp:65:10:65:14 | *data2 | provenance | | +| test.cpp:76:12:76:17 | fgets output argument | test.cpp:78:10:78:15 | *buffer | provenance | | +| test.cpp:98:17:98:22 | recv output argument | test.cpp:99:15:99:20 | *buffer | provenance | | +| test.cpp:106:17:106:22 | recv output argument | test.cpp:107:15:107:20 | *buffer | provenance | | +| test.cpp:113:8:113:12 | *call to fgets | test.cpp:114:9:114:11 | *ptr | provenance | | nodes | test.cpp:24:30:24:36 | *command | semmle.label | *command | | test.cpp:26:10:26:16 | *command | semmle.label | *command | 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 499d34d0d40..21e6445c8fd 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 @@ -1,62 +1,62 @@ edges -| test.cpp:16:11:16:21 | **mk_string_t [string] | test.cpp:39:21:39:31 | *call to mk_string_t [string] | -| test.cpp:18:5:18:7 | *str [post update] [string] | test.cpp:19:5:19:7 | *str [string] | -| test.cpp:18:5:18:30 | ... = ... | test.cpp:18:5:18:7 | *str [post update] [string] | -| test.cpp:18:19:18:24 | call to malloc | test.cpp:18:5:18:30 | ... = ... | -| test.cpp:19:5:19:7 | *str [string] | test.cpp:16:11:16:21 | **mk_string_t [string] | -| test.cpp:39:21:39:31 | *call to mk_string_t [string] | test.cpp:42:13:42:15 | *str [string] | -| test.cpp:39:21:39:31 | *call to mk_string_t [string] | test.cpp:72:17:72:19 | *str [string] | -| test.cpp:39:21:39:31 | *call to mk_string_t [string] | test.cpp:80:17:80:19 | *str [string] | -| test.cpp:42:13:42:15 | *str [string] | test.cpp:42:18:42:23 | string | -| test.cpp:72:17:72:19 | *str [string] | test.cpp:72:22:72:27 | string | -| test.cpp:80:17:80:19 | *str [string] | test.cpp:80:22:80:27 | string | -| test.cpp:88:11:88:30 | **mk_string_t_plus_one [string] | test.cpp:96:21:96:40 | *call to mk_string_t_plus_one [string] | -| test.cpp:90:5:90:7 | *str [post update] [string] | test.cpp:91:5:91:7 | *str [string] | -| test.cpp:90:5:90:34 | ... = ... | test.cpp:90:5:90:7 | *str [post update] [string] | -| test.cpp:90:19:90:24 | call to malloc | test.cpp:90:5:90:34 | ... = ... | -| test.cpp:91:5:91:7 | *str [string] | test.cpp:88:11:88:30 | **mk_string_t_plus_one [string] | -| test.cpp:96:21:96:40 | *call to mk_string_t_plus_one [string] | test.cpp:99:13:99:15 | *str [string] | -| test.cpp:96:21:96:40 | *call to mk_string_t_plus_one [string] | test.cpp:129:17:129:19 | *str [string] | -| test.cpp:96:21:96:40 | *call to mk_string_t_plus_one [string] | test.cpp:137:17:137:19 | *str [string] | -| test.cpp:99:13:99:15 | *str [string] | test.cpp:99:18:99:23 | string | -| test.cpp:129:17:129:19 | *str [string] | test.cpp:129:22:129:27 | string | -| test.cpp:137:17:137:19 | *str [string] | test.cpp:137:22:137:27 | string | -| test.cpp:147:5:147:7 | *str [post update] [string] | test.cpp:148:5:148:7 | *str [string] | -| test.cpp:147:5:147:34 | ... = ... | test.cpp:147:5:147:7 | *str [post update] [string] | -| test.cpp:147:19:147:24 | call to malloc | test.cpp:147:5:147:34 | ... = ... | -| test.cpp:148:5:148:7 | *str [string] | test.cpp:152:13:152:15 | *str [string] | -| test.cpp:148:5:148:7 | *str [string] | test.cpp:154:13:154:15 | *str [string] | -| test.cpp:148:5:148:7 | *str [string] | test.cpp:156:13:156:15 | *str [string] | -| test.cpp:148:5:148:7 | *str [string] | test.cpp:175:17:175:19 | *str [string] | -| test.cpp:148:5:148:7 | *str [string] | test.cpp:187:17:187:19 | *str [string] | -| test.cpp:148:5:148:7 | *str [string] | test.cpp:195:17:195:19 | *str [string] | -| test.cpp:148:5:148:7 | *str [string] | test.cpp:199:17:199:19 | *str [string] | -| test.cpp:148:5:148:7 | *str [string] | test.cpp:203:17:203:19 | *str [string] | -| test.cpp:148:5:148:7 | *str [string] | test.cpp:207:17:207:19 | *str [string] | -| test.cpp:152:13:152:15 | *str [string] | test.cpp:152:18:152:23 | string | -| test.cpp:154:13:154:15 | *str [string] | test.cpp:154:18:154:23 | string | -| test.cpp:156:13:156:15 | *str [string] | test.cpp:156:18:156:23 | string | -| test.cpp:175:17:175:19 | *str [string] | test.cpp:175:22:175:27 | string | -| test.cpp:187:17:187:19 | *str [string] | test.cpp:187:22:187:27 | string | -| test.cpp:195:17:195:19 | *str [string] | test.cpp:195:22:195:27 | string | -| test.cpp:199:17:199:19 | *str [string] | test.cpp:199:22:199:27 | string | -| test.cpp:203:17:203:19 | *str [string] | test.cpp:203:22:203:27 | string | -| test.cpp:207:17:207:19 | *str [string] | test.cpp:207:22:207:27 | string | -| test.cpp:214:24:214:24 | p | test.cpp:216:10:216:10 | p | -| test.cpp:220:27:220:54 | call to malloc | test.cpp:222:15:222:20 | buffer | -| test.cpp:222:15:222:20 | buffer | test.cpp:214:24:214:24 | p | -| test.cpp:228:27:228:54 | call to malloc | test.cpp:232:10:232:15 | buffer | -| test.cpp:235:40:235:45 | buffer | test.cpp:236:5:236:26 | ... = ... | -| test.cpp:236:5:236:26 | ... = ... | test.cpp:236:5:236:9 | *p_str [post update] [string] | -| test.cpp:241:20:241:38 | call to malloc | test.cpp:242:22:242:27 | buffer | -| test.cpp:242:16:242:19 | set_string output argument [string] | test.cpp:243:12:243:14 | *str [string] | -| test.cpp:242:22:242:27 | buffer | test.cpp:235:40:235:45 | buffer | -| test.cpp:242:22:242:27 | buffer | test.cpp:242:16:242:19 | set_string output argument [string] | -| test.cpp:243:12:243:14 | *str [string] | test.cpp:243:12:243:21 | string | -| test.cpp:249:14:249:33 | call to my_alloc | test.cpp:250:12:250:12 | p | -| test.cpp:256:9:256:25 | call to malloc | test.cpp:257:12:257:12 | p | -| test.cpp:262:15:262:30 | call to malloc | test.cpp:266:12:266:12 | p | -| test.cpp:264:13:264:30 | call to malloc | test.cpp:266:12:266:12 | p | +| test.cpp:16:11:16:21 | **mk_string_t [string] | test.cpp:39:21:39:31 | *call to mk_string_t [string] | provenance | | +| test.cpp:18:5:18:7 | *str [post update] [string] | test.cpp:19:5:19:7 | *str [string] | provenance | | +| test.cpp:18:5:18:30 | ... = ... | test.cpp:18:5:18:7 | *str [post update] [string] | provenance | | +| test.cpp:18:19:18:24 | call to malloc | test.cpp:18:5:18:30 | ... = ... | provenance | | +| test.cpp:19:5:19:7 | *str [string] | test.cpp:16:11:16:21 | **mk_string_t [string] | provenance | | +| test.cpp:39:21:39:31 | *call to mk_string_t [string] | test.cpp:42:13:42:15 | *str [string] | provenance | | +| test.cpp:39:21:39:31 | *call to mk_string_t [string] | test.cpp:72:17:72:19 | *str [string] | provenance | | +| test.cpp:39:21:39:31 | *call to mk_string_t [string] | test.cpp:80:17:80:19 | *str [string] | provenance | | +| test.cpp:42:13:42:15 | *str [string] | test.cpp:42:18:42:23 | string | provenance | | +| test.cpp:72:17:72:19 | *str [string] | test.cpp:72:22:72:27 | string | provenance | | +| test.cpp:80:17:80:19 | *str [string] | test.cpp:80:22:80:27 | string | provenance | | +| test.cpp:88:11:88:30 | **mk_string_t_plus_one [string] | test.cpp:96:21:96:40 | *call to mk_string_t_plus_one [string] | provenance | | +| test.cpp:90:5:90:7 | *str [post update] [string] | test.cpp:91:5:91:7 | *str [string] | provenance | | +| test.cpp:90:5:90:34 | ... = ... | test.cpp:90:5:90:7 | *str [post update] [string] | provenance | | +| test.cpp:90:19:90:24 | call to malloc | test.cpp:90:5:90:34 | ... = ... | provenance | | +| test.cpp:91:5:91:7 | *str [string] | test.cpp:88:11:88:30 | **mk_string_t_plus_one [string] | provenance | | +| test.cpp:96:21:96:40 | *call to mk_string_t_plus_one [string] | test.cpp:99:13:99:15 | *str [string] | provenance | | +| test.cpp:96:21:96:40 | *call to mk_string_t_plus_one [string] | test.cpp:129:17:129:19 | *str [string] | provenance | | +| test.cpp:96:21:96:40 | *call to mk_string_t_plus_one [string] | test.cpp:137:17:137:19 | *str [string] | provenance | | +| test.cpp:99:13:99:15 | *str [string] | test.cpp:99:18:99:23 | string | provenance | | +| test.cpp:129:17:129:19 | *str [string] | test.cpp:129:22:129:27 | string | provenance | | +| test.cpp:137:17:137:19 | *str [string] | test.cpp:137:22:137:27 | string | provenance | | +| test.cpp:147:5:147:7 | *str [post update] [string] | test.cpp:148:5:148:7 | *str [string] | provenance | | +| test.cpp:147:5:147:34 | ... = ... | test.cpp:147:5:147:7 | *str [post update] [string] | provenance | | +| test.cpp:147:19:147:24 | call to malloc | test.cpp:147:5:147:34 | ... = ... | provenance | | +| test.cpp:148:5:148:7 | *str [string] | test.cpp:152:13:152:15 | *str [string] | provenance | | +| test.cpp:148:5:148:7 | *str [string] | test.cpp:154:13:154:15 | *str [string] | provenance | | +| test.cpp:148:5:148:7 | *str [string] | test.cpp:156:13:156:15 | *str [string] | provenance | | +| test.cpp:148:5:148:7 | *str [string] | test.cpp:175:17:175:19 | *str [string] | provenance | | +| test.cpp:148:5:148:7 | *str [string] | test.cpp:187:17:187:19 | *str [string] | provenance | | +| test.cpp:148:5:148:7 | *str [string] | test.cpp:195:17:195:19 | *str [string] | provenance | | +| test.cpp:148:5:148:7 | *str [string] | test.cpp:199:17:199:19 | *str [string] | provenance | | +| test.cpp:148:5:148:7 | *str [string] | test.cpp:203:17:203:19 | *str [string] | provenance | | +| test.cpp:148:5:148:7 | *str [string] | test.cpp:207:17:207:19 | *str [string] | provenance | | +| test.cpp:152:13:152:15 | *str [string] | test.cpp:152:18:152:23 | string | provenance | | +| test.cpp:154:13:154:15 | *str [string] | test.cpp:154:18:154:23 | string | provenance | | +| test.cpp:156:13:156:15 | *str [string] | test.cpp:156:18:156:23 | string | provenance | | +| test.cpp:175:17:175:19 | *str [string] | test.cpp:175:22:175:27 | string | provenance | | +| test.cpp:187:17:187:19 | *str [string] | test.cpp:187:22:187:27 | string | provenance | | +| test.cpp:195:17:195:19 | *str [string] | test.cpp:195:22:195:27 | string | provenance | | +| test.cpp:199:17:199:19 | *str [string] | test.cpp:199:22:199:27 | string | provenance | | +| test.cpp:203:17:203:19 | *str [string] | test.cpp:203:22:203:27 | string | provenance | | +| test.cpp:207:17:207:19 | *str [string] | test.cpp:207:22:207:27 | string | provenance | | +| test.cpp:214:24:214:24 | p | test.cpp:216:10:216:10 | p | provenance | | +| test.cpp:220:27:220:54 | call to malloc | test.cpp:222:15:222:20 | buffer | provenance | | +| test.cpp:222:15:222:20 | buffer | test.cpp:214:24:214:24 | p | 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:26 | ... = ... | test.cpp:236:5:236:9 | *p_str [post update] [string] | provenance | | +| test.cpp:241:20:241:38 | call to malloc | test.cpp:242:22:242:27 | buffer | provenance | | +| test.cpp:242:16:242:19 | set_string output argument [string] | test.cpp:243:12:243:14 | *str [string] | provenance | | +| test.cpp:242:22:242:27 | buffer | test.cpp:235:40:235:45 | buffer | provenance | | +| test.cpp:242:22:242:27 | buffer | test.cpp:242:16:242:19 | set_string output argument [string] | provenance | | +| test.cpp:243:12:243:14 | *str [string] | test.cpp:243:12:243:21 | string | provenance | | +| test.cpp:249:14:249:33 | call to my_alloc | test.cpp:250:12:250:12 | p | provenance | | +| test.cpp:256:9:256:25 | call to malloc | test.cpp:257:12:257:12 | p | provenance | | +| test.cpp:262:15:262:30 | call to malloc | test.cpp:266:12:266:12 | p | provenance | | +| test.cpp:264:13:264:30 | call to malloc | test.cpp:266:12:266:12 | p | provenance | | nodes | test.cpp:16:11:16:21 | **mk_string_t [string] | semmle.label | **mk_string_t [string] | | test.cpp:18:5:18:7 | *str [post update] [string] | semmle.label | *str [post update] [string] | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-119/semmle/tests/OverflowDestination.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-119/semmle/tests/OverflowDestination.expected index f911d3b3da1..fa6e1c36b53 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-119/semmle/tests/OverflowDestination.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-119/semmle/tests/OverflowDestination.expected @@ -1,14 +1,14 @@ edges -| main.cpp:6:27:6:30 | **argv | main.cpp:7:33:7:36 | **argv | -| main.cpp:7:33:7:36 | **argv | overflowdestination.cpp:23:45:23:48 | **argv | -| overflowdestination.cpp:23:45:23:48 | **argv | overflowdestination.cpp:30:17:30:20 | *arg1 | -| overflowdestination.cpp:43:8:43:10 | fgets output argument | overflowdestination.cpp:46:15:46:17 | *src | -| overflowdestination.cpp:50:52:50:54 | *src | overflowdestination.cpp:53:15:53:17 | *src | -| overflowdestination.cpp:57:52:57:54 | *src | overflowdestination.cpp:64:16:64:19 | *src2 | -| overflowdestination.cpp:73:8:73:10 | fgets output argument | overflowdestination.cpp:75:30:75:32 | *src | -| overflowdestination.cpp:73:8:73:10 | fgets output argument | overflowdestination.cpp:76:30:76:32 | *src | -| overflowdestination.cpp:75:30:75:32 | *src | overflowdestination.cpp:50:52:50:54 | *src | -| overflowdestination.cpp:76:30:76:32 | *src | overflowdestination.cpp:57:52:57:54 | *src | +| main.cpp:6:27:6:30 | **argv | main.cpp:7:33:7:36 | **argv | provenance | | +| main.cpp:7:33:7:36 | **argv | overflowdestination.cpp:23:45:23:48 | **argv | provenance | | +| overflowdestination.cpp:23:45:23:48 | **argv | overflowdestination.cpp:30:17:30:20 | *arg1 | provenance | | +| overflowdestination.cpp:43:8:43:10 | fgets output argument | overflowdestination.cpp:46:15:46:17 | *src | provenance | | +| overflowdestination.cpp:50:52:50:54 | *src | overflowdestination.cpp:53:15:53:17 | *src | provenance | | +| overflowdestination.cpp:57:52:57:54 | *src | overflowdestination.cpp:64:16:64:19 | *src2 | provenance | | +| overflowdestination.cpp:73:8:73:10 | fgets output argument | overflowdestination.cpp:75:30:75:32 | *src | provenance | | +| overflowdestination.cpp:73:8:73:10 | fgets output argument | overflowdestination.cpp:76:30:76:32 | *src | provenance | | +| overflowdestination.cpp:75:30:75:32 | *src | overflowdestination.cpp:50:52:50:54 | *src | provenance | | +| overflowdestination.cpp:76:30:76:32 | *src | overflowdestination.cpp:57:52:57:54 | *src | provenance | | nodes | main.cpp:6:27:6:30 | **argv | semmle.label | **argv | | main.cpp:7:33:7:36 | **argv | semmle.label | **argv | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-119/semmle/tests/UnboundedWrite.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-119/semmle/tests/UnboundedWrite.expected index ac4b606898d..c5cfefdbff0 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-119/semmle/tests/UnboundedWrite.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-119/semmle/tests/UnboundedWrite.expected @@ -1,17 +1,17 @@ edges -| main.cpp:6:27:6:30 | **argv | main.cpp:10:20:10:23 | **argv | -| main.cpp:10:20:10:23 | **argv | tests.cpp:657:32:657:35 | **argv | -| tests.cpp:613:19:613:24 | *source | tests.cpp:615:17:615:22 | *source | -| tests.cpp:622:19:622:24 | *source | tests.cpp:625:2:625:16 | *... = ... | -| tests.cpp:625:2:625:2 | *s [post update] [*home] | tests.cpp:628:14:628:14 | *s [*home] | -| tests.cpp:625:2:625:16 | *... = ... | tests.cpp:625:2:625:2 | *s [post update] [*home] | -| tests.cpp:628:14:628:14 | *s [*home] | tests.cpp:628:14:628:19 | *home | -| tests.cpp:628:14:628:14 | *s [*home] | tests.cpp:628:16:628:19 | *home | -| tests.cpp:628:16:628:19 | *home | tests.cpp:628:14:628:19 | *home | -| tests.cpp:657:32:657:35 | **argv | tests.cpp:682:9:682:15 | *access to array | -| tests.cpp:657:32:657:35 | **argv | tests.cpp:683:9:683:15 | *access to array | -| tests.cpp:682:9:682:15 | *access to array | tests.cpp:613:19:613:24 | *source | -| tests.cpp:683:9:683:15 | *access to array | tests.cpp:622:19:622:24 | *source | +| main.cpp:6:27:6:30 | **argv | main.cpp:10:20:10:23 | **argv | provenance | | +| main.cpp:10:20:10:23 | **argv | tests.cpp:657:32:657:35 | **argv | provenance | | +| tests.cpp:613:19:613:24 | *source | tests.cpp:615:17:615:22 | *source | provenance | | +| tests.cpp:622:19:622:24 | *source | tests.cpp:625:2:625:16 | *... = ... | provenance | | +| tests.cpp:625:2:625:2 | *s [post update] [*home] | tests.cpp:628:14:628:14 | *s [*home] | provenance | | +| tests.cpp:625:2:625:16 | *... = ... | tests.cpp:625:2:625:2 | *s [post update] [*home] | provenance | | +| tests.cpp:628:14:628:14 | *s [*home] | tests.cpp:628:14:628:19 | *home | provenance | | +| tests.cpp:628:14:628:14 | *s [*home] | tests.cpp:628:16:628:19 | *home | provenance | | +| tests.cpp:628:16:628:19 | *home | tests.cpp:628:14:628:19 | *home | provenance | | +| tests.cpp:657:32:657:35 | **argv | tests.cpp:682:9:682:15 | *access to array | provenance | | +| tests.cpp:657:32:657:35 | **argv | tests.cpp:683:9:683:15 | *access to array | provenance | | +| tests.cpp:682:9:682:15 | *access to array | tests.cpp:613:19:613:24 | *source | provenance | | +| tests.cpp:683:9:683:15 | *access to array | tests.cpp:622:19:622:24 | *source | provenance | | nodes | main.cpp:6:27:6:30 | **argv | semmle.label | **argv | | main.cpp:10:20:10:23 | **argv | semmle.label | **argv | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-120/semmle/tests/UnboundedWrite.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-120/semmle/tests/UnboundedWrite.expected index 49c6a7799e7..0ebcbb8cde4 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-120/semmle/tests/UnboundedWrite.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-120/semmle/tests/UnboundedWrite.expected @@ -1,7 +1,7 @@ edges -| tests.c:16:26:16:29 | **argv | tests.c:28:22:28:28 | *access to array | -| tests.c:16:26:16:29 | **argv | tests.c:29:28:29:34 | *access to array | -| tests.c:16:26:16:29 | **argv | tests.c:34:10:34:16 | *access to array | +| tests.c:16:26:16:29 | **argv | tests.c:28:22:28:28 | *access to array | provenance | | +| tests.c:16:26:16:29 | **argv | tests.c:29:28:29:34 | *access to array | provenance | | +| tests.c:16:26:16:29 | **argv | tests.c:34:10:34:16 | *access to array | provenance | | nodes | tests.c:16:26:16:29 | **argv | semmle.label | **argv | | tests.c:28:22:28:28 | *access to array | semmle.label | *access to array | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-129/SAMATE/ImproperArrayIndexValidation/ImproperArrayIndexValidation.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-129/SAMATE/ImproperArrayIndexValidation/ImproperArrayIndexValidation.expected index 35d6e58f458..10286da7a38 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-129/SAMATE/ImproperArrayIndexValidation/ImproperArrayIndexValidation.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-129/SAMATE/ImproperArrayIndexValidation/ImproperArrayIndexValidation.expected @@ -1,5 +1,5 @@ edges -| CWE122_Heap_Based_Buffer_Overflow__c_CWE129_fgets_01.c:30:19:30:29 | fgets output argument | CWE122_Heap_Based_Buffer_Overflow__c_CWE129_fgets_01.c:52:20:52:23 | data | +| CWE122_Heap_Based_Buffer_Overflow__c_CWE129_fgets_01.c:30:19:30:29 | fgets output argument | CWE122_Heap_Based_Buffer_Overflow__c_CWE129_fgets_01.c:52:20:52:23 | data | provenance | | nodes | CWE122_Heap_Based_Buffer_Overflow__c_CWE129_fgets_01.c:30:19:30:29 | fgets output argument | semmle.label | fgets output argument | | CWE122_Heap_Based_Buffer_Overflow__c_CWE129_fgets_01.c:52:20:52:23 | data | semmle.label | data | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-129/semmle/ImproperArrayIndexValidation/ImproperArrayIndexValidation.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-129/semmle/ImproperArrayIndexValidation/ImproperArrayIndexValidation.expected index f766aabda57..141d1351540 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-129/semmle/ImproperArrayIndexValidation/ImproperArrayIndexValidation.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-129/semmle/ImproperArrayIndexValidation/ImproperArrayIndexValidation.expected @@ -1,13 +1,13 @@ edges -| test1.c:7:26:7:29 | **argv | test1.c:9:9:9:9 | i | -| test1.c:7:26:7:29 | **argv | test1.c:11:9:11:9 | i | -| test1.c:7:26:7:29 | **argv | test1.c:13:9:13:9 | i | -| test1.c:9:9:9:9 | i | test1.c:16:16:16:16 | i | -| test1.c:11:9:11:9 | i | test1.c:32:16:32:16 | i | -| test1.c:13:9:13:9 | i | test1.c:48:16:48:16 | i | -| test1.c:16:16:16:16 | i | test1.c:18:16:18:16 | i | -| test1.c:32:16:32:16 | i | test1.c:33:11:33:11 | i | -| test1.c:48:16:48:16 | i | test1.c:53:15:53:15 | j | +| test1.c:7:26:7:29 | **argv | test1.c:9:9:9:9 | i | provenance | | +| test1.c:7:26:7:29 | **argv | test1.c:11:9:11:9 | i | provenance | | +| test1.c:7:26:7:29 | **argv | test1.c:13:9:13:9 | i | provenance | | +| test1.c:9:9:9:9 | i | test1.c:16:16:16:16 | i | provenance | | +| test1.c:11:9:11:9 | i | test1.c:32:16:32:16 | i | provenance | | +| test1.c:13:9:13:9 | i | test1.c:48:16:48:16 | i | provenance | | +| test1.c:16:16:16:16 | i | test1.c:18:16:18:16 | i | provenance | | +| test1.c:32:16:32:16 | i | test1.c:33:11:33:11 | i | provenance | | +| test1.c:48:16:48:16 | i | test1.c:53:15:53:15 | j | provenance | | nodes | test1.c:7:26:7:29 | **argv | semmle.label | **argv | | test1.c:9:9:9:9 | i | semmle.label | i | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/UncontrolledFormatString.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/UncontrolledFormatString.expected index 49b39709080..a977543a8ec 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/UncontrolledFormatString.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/UncontrolledFormatString.expected @@ -1,7 +1,7 @@ edges -| char_connect_socket_w32_vsnprintf_01_bad.c:94:46:94:69 | recv output argument | char_connect_socket_w32_vsnprintf_01_bad.c:125:15:125:18 | *data | -| char_console_fprintf_01_bad.c:30:23:30:35 | fgets output argument | char_console_fprintf_01_bad.c:49:21:49:24 | *data | -| char_environment_fprintf_01_bad.c:27:30:27:35 | *call to getenv | char_environment_fprintf_01_bad.c:36:21:36:24 | *data | +| char_connect_socket_w32_vsnprintf_01_bad.c:94:46:94:69 | recv output argument | char_connect_socket_w32_vsnprintf_01_bad.c:125:15:125:18 | *data | provenance | | +| char_console_fprintf_01_bad.c:30:23:30:35 | fgets output argument | char_console_fprintf_01_bad.c:49:21:49:24 | *data | provenance | | +| char_environment_fprintf_01_bad.c:27:30:27:35 | *call to getenv | char_environment_fprintf_01_bad.c:36:21:36:24 | *data | provenance | | nodes | char_connect_socket_w32_vsnprintf_01_bad.c:94:46:94:69 | recv output argument | semmle.label | recv output argument | | char_connect_socket_w32_vsnprintf_01_bad.c:125:15:125:18 | *data | semmle.label | *data | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/argv/argvLocal.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/argv/argvLocal.expected index 2c2db139baf..8f09b2ee7f5 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/argv/argvLocal.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/argv/argvLocal.expected @@ -1,28 +1,28 @@ edges -| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:95:9:95:15 | *access to array | -| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:96:15:96:21 | *access to array | -| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:101:9:101:10 | *i1 | -| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:102:15:102:16 | *i1 | -| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:106:9:106:13 | *access to array | -| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:107:15:107:19 | *access to array | -| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:110:9:110:11 | ** ... | -| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:111:15:111:17 | ** ... | -| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:116:9:116:10 | *i3 | -| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:117:15:117:16 | *i3 | -| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:121:9:121:10 | *i4 | -| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:122:15:122:16 | *i4 | -| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:127:9:127:10 | *i5 | -| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:128:15:128:16 | *i5 | -| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:131:9:131:14 | *... + ... | -| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:132:15:132:20 | *... + ... | -| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:135:9:135:12 | *... ++ | -| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:136:15:136:18 | *-- ... | -| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:139:9:139:26 | *... ? ... : ... | -| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:140:15:140:32 | *... ? ... : ... | -| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:144:9:144:10 | *i7 | -| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:145:15:145:16 | *i7 | -| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:150:9:150:10 | *i8 | -| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:151:15:151:16 | *i8 | +| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:95:9:95:15 | *access to array | provenance | | +| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:96:15:96:21 | *access to array | provenance | | +| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:101:9:101:10 | *i1 | provenance | | +| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:102:15:102:16 | *i1 | provenance | | +| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:106:9:106:13 | *access to array | provenance | | +| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:107:15:107:19 | *access to array | provenance | | +| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:110:9:110:11 | ** ... | provenance | | +| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:111:15:111:17 | ** ... | provenance | | +| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:116:9:116:10 | *i3 | provenance | | +| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:117:15:117:16 | *i3 | provenance | | +| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:121:9:121:10 | *i4 | provenance | | +| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:122:15:122:16 | *i4 | provenance | | +| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:127:9:127:10 | *i5 | provenance | | +| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:128:15:128:16 | *i5 | provenance | | +| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:131:9:131:14 | *... + ... | provenance | | +| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:132:15:132:20 | *... + ... | provenance | | +| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:135:9:135:12 | *... ++ | provenance | | +| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:136:15:136:18 | *-- ... | provenance | | +| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:139:9:139:26 | *... ? ... : ... | provenance | | +| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:140:15:140:32 | *... ? ... : ... | provenance | | +| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:144:9:144:10 | *i7 | provenance | | +| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:145:15:145:16 | *i7 | provenance | | +| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:150:9:150:10 | *i8 | provenance | | +| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:151:15:151:16 | *i8 | provenance | | nodes | argvLocal.c:13:27:13:30 | **argv | semmle.label | **argv | | argvLocal.c:95:9:95:15 | *access to array | semmle.label | *access to array | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/funcs/funcsLocal.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/funcs/funcsLocal.expected index d8ccacc88cd..20ae8a4b9ba 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/funcs/funcsLocal.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/funcs/funcsLocal.expected @@ -1,12 +1,12 @@ edges -| funcsLocal.c:16:8:16:9 | fread output argument | funcsLocal.c:17:9:17:10 | *i1 | -| funcsLocal.c:16:8:16:9 | fread output argument | funcsLocal.c:58:9:58:10 | *e1 | -| funcsLocal.c:26:8:26:9 | fgets output argument | funcsLocal.c:27:9:27:10 | *i3 | -| funcsLocal.c:31:13:31:17 | *call to fgets | funcsLocal.c:32:9:32:10 | *i4 | -| funcsLocal.c:36:7:36:8 | gets output argument | funcsLocal.c:37:9:37:10 | *i5 | -| funcsLocal.c:41:13:41:16 | *call to gets | funcsLocal.c:42:9:42:10 | *i6 | -| funcsLocal.c:46:7:46:9 | gets output argument | funcsLocal.c:47:9:47:11 | ** ... | -| funcsLocal.c:52:8:52:11 | *call to gets | funcsLocal.c:53:9:53:11 | ** ... | +| funcsLocal.c:16:8:16:9 | fread output argument | funcsLocal.c:17:9:17:10 | *i1 | provenance | | +| funcsLocal.c:16:8:16:9 | fread output argument | funcsLocal.c:58:9:58:10 | *e1 | provenance | | +| funcsLocal.c:26:8:26:9 | fgets output argument | funcsLocal.c:27:9:27:10 | *i3 | provenance | | +| funcsLocal.c:31:13:31:17 | *call to fgets | funcsLocal.c:32:9:32:10 | *i4 | provenance | | +| funcsLocal.c:36:7:36:8 | gets output argument | funcsLocal.c:37:9:37:10 | *i5 | provenance | | +| funcsLocal.c:41:13:41:16 | *call to gets | funcsLocal.c:42:9:42:10 | *i6 | provenance | | +| funcsLocal.c:46:7:46:9 | gets output argument | funcsLocal.c:47:9:47:11 | ** ... | provenance | | +| funcsLocal.c:52:8:52:11 | *call to gets | funcsLocal.c:53:9:53:11 | ** ... | provenance | | nodes | funcsLocal.c:16:8:16:9 | fread output argument | semmle.label | fread output argument | | funcsLocal.c:17:9:17:10 | *i1 | semmle.label | *i1 | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/globalVars/UncontrolledFormatString.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/globalVars/UncontrolledFormatString.expected index 683d57b5b75..087a0a88662 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/globalVars/UncontrolledFormatString.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/globalVars/UncontrolledFormatString.expected @@ -1,15 +1,15 @@ edges -| globalVars.c:8:7:8:10 | **copy | globalVars.c:27:9:27:12 | *copy | -| globalVars.c:8:7:8:10 | **copy | globalVars.c:30:15:30:18 | *copy | -| globalVars.c:8:7:8:10 | **copy | globalVars.c:35:11:35:14 | *copy | -| globalVars.c:9:7:9:11 | **copy2 | globalVars.c:38:9:38:13 | *copy2 | -| globalVars.c:9:7:9:11 | **copy2 | globalVars.c:41:15:41:19 | *copy2 | -| globalVars.c:9:7:9:11 | **copy2 | globalVars.c:50:9:50:13 | *copy2 | -| globalVars.c:11:22:11:25 | **argv | globalVars.c:8:7:8:10 | **copy | -| globalVars.c:15:21:15:23 | *val | globalVars.c:9:7:9:11 | **copy2 | -| globalVars.c:23:27:23:30 | **argv | globalVars.c:24:11:24:14 | **argv | -| globalVars.c:24:11:24:14 | **argv | globalVars.c:11:22:11:25 | **argv | -| globalVars.c:35:11:35:14 | *copy | globalVars.c:15:21:15:23 | *val | +| globalVars.c:8:7:8:10 | **copy | globalVars.c:27:9:27:12 | *copy | provenance | | +| globalVars.c:8:7:8:10 | **copy | globalVars.c:30:15:30:18 | *copy | provenance | | +| globalVars.c:8:7:8:10 | **copy | globalVars.c:35:11:35:14 | *copy | provenance | | +| globalVars.c:9:7:9:11 | **copy2 | globalVars.c:38:9:38:13 | *copy2 | provenance | | +| globalVars.c:9:7:9:11 | **copy2 | globalVars.c:41:15:41:19 | *copy2 | provenance | | +| globalVars.c:9:7:9:11 | **copy2 | globalVars.c:50:9:50:13 | *copy2 | provenance | | +| globalVars.c:11:22:11:25 | **argv | globalVars.c:8:7:8:10 | **copy | provenance | | +| globalVars.c:15:21:15:23 | *val | globalVars.c:9:7:9:11 | **copy2 | provenance | | +| globalVars.c:23:27:23:30 | **argv | globalVars.c:24:11:24:14 | **argv | provenance | | +| globalVars.c:24:11:24:14 | **argv | globalVars.c:11:22:11:25 | **argv | provenance | | +| globalVars.c:35:11:35:14 | *copy | globalVars.c:15:21:15:23 | *val | provenance | | nodes | globalVars.c:8:7:8:10 | **copy | semmle.label | **copy | | globalVars.c:9:7:9:11 | **copy2 | semmle.label | **copy2 | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/ifs/ifs.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/ifs/ifs.expected index 4bcbb79bf7b..6e860511fb2 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/ifs/ifs.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/ifs/ifs.expected @@ -1,15 +1,15 @@ edges -| ifs.c:16:27:16:30 | **argv | ifs.c:62:9:62:10 | *c7 | -| ifs.c:16:27:16:30 | **argv | ifs.c:69:9:69:10 | *c8 | -| ifs.c:16:27:16:30 | **argv | ifs.c:75:9:75:10 | *i1 | -| ifs.c:16:27:16:30 | **argv | ifs.c:81:9:81:10 | *i2 | -| ifs.c:16:27:16:30 | **argv | ifs.c:87:9:87:10 | *i3 | -| ifs.c:16:27:16:30 | **argv | ifs.c:93:9:93:10 | *i4 | -| ifs.c:16:27:16:30 | **argv | ifs.c:99:9:99:10 | *i5 | -| ifs.c:16:27:16:30 | **argv | ifs.c:106:9:106:10 | *i6 | -| ifs.c:16:27:16:30 | **argv | ifs.c:112:9:112:10 | *i7 | -| ifs.c:16:27:16:30 | **argv | ifs.c:118:9:118:10 | *i8 | -| ifs.c:16:27:16:30 | **argv | ifs.c:124:9:124:10 | *i9 | +| ifs.c:16:27:16:30 | **argv | ifs.c:62:9:62:10 | *c7 | provenance | | +| ifs.c:16:27:16:30 | **argv | ifs.c:69:9:69:10 | *c8 | provenance | | +| ifs.c:16:27:16:30 | **argv | ifs.c:75:9:75:10 | *i1 | provenance | | +| ifs.c:16:27:16:30 | **argv | ifs.c:81:9:81:10 | *i2 | provenance | | +| ifs.c:16:27:16:30 | **argv | ifs.c:87:9:87:10 | *i3 | provenance | | +| ifs.c:16:27:16:30 | **argv | ifs.c:93:9:93:10 | *i4 | provenance | | +| ifs.c:16:27:16:30 | **argv | ifs.c:99:9:99:10 | *i5 | provenance | | +| ifs.c:16:27:16:30 | **argv | ifs.c:106:9:106:10 | *i6 | provenance | | +| ifs.c:16:27:16:30 | **argv | ifs.c:112:9:112:10 | *i7 | provenance | | +| ifs.c:16:27:16:30 | **argv | ifs.c:118:9:118:10 | *i8 | provenance | | +| ifs.c:16:27:16:30 | **argv | ifs.c:124:9:124:10 | *i9 | provenance | | nodes | ifs.c:16:27:16:30 | **argv | semmle.label | **argv | | ifs.c:62:9:62:10 | *c7 | semmle.label | *c7 | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/ArithmeticTainted.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/ArithmeticTainted.expected index d266afbe445..a2221ec2fd3 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/ArithmeticTainted.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/ArithmeticTainted.expected @@ -1,5 +1,5 @@ edges -| examples.cpp:63:26:63:30 | fscanf output argument | examples.cpp:66:11:66:14 | data | +| examples.cpp:63:26:63:30 | fscanf output argument | examples.cpp:66:11:66:14 | data | provenance | | nodes | examples.cpp:63:26:63:30 | fscanf output argument | semmle.label | fscanf output argument | | examples.cpp:66:11:66:14 | data | semmle.label | data | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/ArithmeticUncontrolled.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/ArithmeticUncontrolled.expected index 49766a8f25d..7a6244f1d46 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/ArithmeticUncontrolled.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/ArithmeticUncontrolled.expected @@ -1,16 +1,16 @@ edges -| examples.cpp:22:26:22:33 | call to rand | examples.cpp:25:31:25:34 | data | -| examples.cpp:22:26:22:33 | call to rand | examples.cpp:25:31:25:34 | data | -| examples.cpp:22:26:22:33 | call to rand | examples.cpp:25:31:25:34 | data | -| examples.cpp:22:26:22:33 | call to rand | examples.cpp:25:31:25:34 | data | -| examples.cpp:22:26:22:33 | call to rand | examples.cpp:25:31:25:34 | data | -| examples.cpp:22:26:22:33 | call to rand | examples.cpp:25:31:25:34 | data | -| examples.cpp:35:26:35:33 | call to rand | examples.cpp:38:9:38:12 | data | -| examples.cpp:35:26:35:33 | call to rand | examples.cpp:38:9:38:12 | data | -| examples.cpp:35:26:35:33 | call to rand | examples.cpp:38:9:38:12 | data | -| examples.cpp:35:26:35:33 | call to rand | examples.cpp:38:9:38:12 | data | -| examples.cpp:35:26:35:33 | call to rand | examples.cpp:38:9:38:12 | data | -| examples.cpp:35:26:35:33 | call to rand | examples.cpp:38:9:38:12 | data | +| examples.cpp:22:26:22:33 | call to rand | examples.cpp:25:31:25:34 | data | provenance | | +| examples.cpp:22:26:22:33 | call to rand | examples.cpp:25:31:25:34 | data | provenance | | +| examples.cpp:22:26:22:33 | call to rand | examples.cpp:25:31:25:34 | data | provenance | | +| examples.cpp:22:26:22:33 | call to rand | examples.cpp:25:31:25:34 | data | provenance | | +| examples.cpp:22:26:22:33 | call to rand | examples.cpp:25:31:25:34 | data | provenance | | +| examples.cpp:22:26:22:33 | call to rand | examples.cpp:25:31:25:34 | data | provenance | | +| examples.cpp:35:26:35:33 | call to rand | examples.cpp:38:9:38:12 | data | provenance | | +| examples.cpp:35:26:35:33 | call to rand | examples.cpp:38:9:38:12 | data | provenance | | +| examples.cpp:35:26:35:33 | call to rand | examples.cpp:38:9:38:12 | data | provenance | | +| examples.cpp:35:26:35:33 | call to rand | examples.cpp:38:9:38:12 | data | provenance | | +| examples.cpp:35:26:35:33 | call to rand | examples.cpp:38:9:38:12 | data | provenance | | +| examples.cpp:35:26:35:33 | call to rand | examples.cpp:38:9:38:12 | data | provenance | | nodes | examples.cpp:22:26:22:33 | call to rand | semmle.label | call to rand | | examples.cpp:22:26:22:33 | call to rand | semmle.label | call to rand | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/ArithmeticUncontrolled/ArithmeticUncontrolled.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/ArithmeticUncontrolled/ArithmeticUncontrolled.expected index 8d456343b87..ef46be9659a 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/ArithmeticUncontrolled/ArithmeticUncontrolled.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/ArithmeticUncontrolled/ArithmeticUncontrolled.expected @@ -1,36 +1,36 @@ edges -| test.c:18:13:18:16 | call to rand | test.c:21:17:21:17 | r | -| test.c:34:13:34:18 | call to rand | test.c:35:5:35:5 | r | -| test.c:44:13:44:16 | call to rand | test.c:45:5:45:5 | r | -| test.c:75:13:75:19 | call to rand | test.c:77:9:77:9 | r | -| test.c:75:13:75:19 | call to rand | test.c:77:9:77:9 | r | -| test.c:81:14:81:17 | call to rand | test.c:83:9:83:9 | r | -| test.c:81:23:81:26 | call to rand | test.c:83:9:83:9 | r | -| test.c:125:13:125:16 | call to rand | test.c:127:9:127:9 | r | -| test.c:131:13:131:16 | call to rand | test.c:133:5:133:5 | r | -| test.c:137:13:137:16 | call to rand | test.c:139:10:139:10 | r | -| test.c:155:22:155:27 | call to rand | test.c:157:9:157:9 | r | -| test.cpp:6:5:6:12 | *get_rand | test.cpp:24:11:24:18 | call to get_rand | -| test.cpp:8:9:8:12 | call to rand | test.cpp:6:5:6:12 | *get_rand | -| test.cpp:11:21:11:24 | *dest | test.cpp:30:13:30:14 | get_rand2 output argument | -| test.cpp:13:10:13:13 | call to rand | test.cpp:11:21:11:24 | *dest | -| test.cpp:16:21:16:24 | *dest | test.cpp:36:13:36:13 | get_rand3 output argument | -| test.cpp:18:9:18:12 | call to rand | test.cpp:16:21:16:24 | *dest | -| test.cpp:24:11:24:18 | call to get_rand | test.cpp:25:7:25:7 | r | -| test.cpp:30:13:30:14 | get_rand2 output argument | test.cpp:31:7:31:7 | r | -| test.cpp:36:13:36:13 | get_rand3 output argument | test.cpp:37:7:37:7 | r | -| test.cpp:86:10:86:13 | call to rand | test.cpp:90:10:90:10 | x | -| test.cpp:98:10:98:13 | call to rand | test.cpp:102:10:102:10 | x | -| test.cpp:137:10:137:13 | call to rand | test.cpp:146:9:146:9 | y | -| test.cpp:151:10:151:13 | call to rand | test.cpp:154:10:154:10 | b | -| test.cpp:169:11:169:14 | call to rand | test.cpp:171:11:171:16 | y | -| test.cpp:189:10:189:13 | call to rand | test.cpp:196:7:196:7 | x | -| test.cpp:189:10:189:13 | call to rand | test.cpp:198:7:198:7 | x | -| test.cpp:189:10:189:13 | call to rand | test.cpp:199:7:199:7 | x | -| test.cpp:190:10:190:13 | call to rand | test.cpp:204:7:204:7 | y | -| test.cpp:190:10:190:13 | call to rand | test.cpp:205:7:205:7 | y | -| test.cpp:190:10:190:13 | call to rand | test.cpp:208:7:208:7 | y | -| test.cpp:215:11:215:14 | call to rand | test.cpp:219:8:219:8 | x | +| test.c:18:13:18:16 | call to rand | test.c:21:17:21:17 | r | provenance | | +| test.c:34:13:34:18 | call to rand | test.c:35:5:35:5 | r | provenance | | +| test.c:44:13:44:16 | call to rand | test.c:45:5:45:5 | r | provenance | | +| test.c:75:13:75:19 | call to rand | test.c:77:9:77:9 | r | provenance | | +| test.c:75:13:75:19 | call to rand | test.c:77:9:77:9 | r | provenance | | +| test.c:81:14:81:17 | call to rand | test.c:83:9:83:9 | r | provenance | | +| test.c:81:23:81:26 | call to rand | test.c:83:9:83:9 | r | provenance | | +| test.c:125:13:125:16 | call to rand | test.c:127:9:127:9 | r | provenance | | +| test.c:131:13:131:16 | call to rand | test.c:133:5:133:5 | r | provenance | | +| test.c:137:13:137:16 | call to rand | test.c:139:10:139:10 | r | provenance | | +| test.c:155:22:155:27 | call to rand | test.c:157:9:157:9 | r | provenance | | +| test.cpp:6:5:6:12 | *get_rand | test.cpp:24:11:24:18 | call to get_rand | provenance | | +| test.cpp:8:9:8:12 | call to rand | test.cpp:6:5:6:12 | *get_rand | provenance | | +| test.cpp:11:21:11:24 | *dest | test.cpp:30:13:30:14 | get_rand2 output argument | provenance | | +| test.cpp:13:10:13:13 | call to rand | test.cpp:11:21:11:24 | *dest | provenance | | +| test.cpp:16:21:16:24 | *dest | test.cpp:36:13:36:13 | get_rand3 output argument | provenance | | +| test.cpp:18:9:18:12 | call to rand | test.cpp:16:21:16:24 | *dest | provenance | | +| test.cpp:24:11:24:18 | call to get_rand | test.cpp:25:7:25:7 | r | provenance | | +| test.cpp:30:13:30:14 | get_rand2 output argument | test.cpp:31:7:31:7 | r | provenance | | +| test.cpp:36:13:36:13 | get_rand3 output argument | test.cpp:37:7:37:7 | r | provenance | | +| test.cpp:86:10:86:13 | call to rand | test.cpp:90:10:90:10 | x | provenance | | +| test.cpp:98:10:98:13 | call to rand | test.cpp:102:10:102:10 | x | provenance | | +| test.cpp:137:10:137:13 | call to rand | test.cpp:146:9:146:9 | y | provenance | | +| test.cpp:151:10:151:13 | call to rand | test.cpp:154:10:154:10 | b | provenance | | +| test.cpp:169:11:169:14 | call to rand | test.cpp:171:11:171:16 | y | provenance | | +| test.cpp:189:10:189:13 | call to rand | test.cpp:196:7:196:7 | x | provenance | | +| test.cpp:189:10:189:13 | call to rand | test.cpp:198:7:198:7 | x | provenance | | +| test.cpp:189:10:189:13 | call to rand | test.cpp:199:7:199:7 | x | provenance | | +| test.cpp:190:10:190:13 | call to rand | test.cpp:204:7:204:7 | y | provenance | | +| test.cpp:190:10:190:13 | call to rand | test.cpp:205:7:205:7 | y | provenance | | +| test.cpp:190:10:190:13 | call to rand | test.cpp:208:7:208:7 | y | provenance | | +| test.cpp:215:11:215:14 | call to rand | test.cpp:219:8:219:8 | x | provenance | | nodes | test.c:18:13:18:16 | call to rand | semmle.label | call to rand | | test.c:21:17:21:17 | r | semmle.label | r | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/TaintedAllocationSize/TaintedAllocationSize.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/TaintedAllocationSize/TaintedAllocationSize.expected index 56699b308cc..cfcb159b3f1 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/TaintedAllocationSize/TaintedAllocationSize.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/TaintedAllocationSize/TaintedAllocationSize.expected @@ -1,28 +1,28 @@ edges -| test.cpp:39:27:39:30 | **argv | test.cpp:43:38:43:44 | tainted | -| test.cpp:39:27:39:30 | **argv | test.cpp:44:38:44:63 | ... * ... | -| test.cpp:39:27:39:30 | **argv | test.cpp:46:38:46:63 | ... + ... | -| test.cpp:39:27:39:30 | **argv | test.cpp:49:32:49:35 | size | -| test.cpp:39:27:39:30 | **argv | test.cpp:50:17:50:30 | size | -| test.cpp:39:27:39:30 | **argv | test.cpp:53:35:53:60 | ... * ... | -| test.cpp:124:18:124:31 | *call to getenv | test.cpp:128:24:128:41 | ... * ... | -| test.cpp:133:19:133:32 | *call to getenv | test.cpp:135:10:135:27 | ... * ... | -| test.cpp:148:20:148:33 | *call to getenv | test.cpp:152:11:152:28 | ... * ... | -| test.cpp:209:8:209:23 | *get_tainted_size | test.cpp:241:9:241:24 | call to get_tainted_size | -| test.cpp:211:14:211:27 | *call to getenv | test.cpp:209:8:209:23 | *get_tainted_size | -| test.cpp:230:21:230:21 | s | test.cpp:231:21:231:21 | s | -| test.cpp:237:24:237:37 | *call to getenv | test.cpp:239:9:239:18 | local_size | -| test.cpp:237:24:237:37 | *call to getenv | test.cpp:245:11:245:20 | local_size | -| test.cpp:237:24:237:37 | *call to getenv | test.cpp:247:10:247:19 | local_size | -| test.cpp:247:10:247:19 | local_size | test.cpp:230:21:230:21 | s | -| test.cpp:250:20:250:27 | *out_size | test.cpp:289:17:289:20 | get_size output argument | -| test.cpp:250:20:250:27 | *out_size | test.cpp:305:18:305:21 | get_size output argument | -| test.cpp:251:18:251:31 | *call to getenv | test.cpp:250:20:250:27 | *out_size | -| test.cpp:259:20:259:33 | *call to getenv | test.cpp:263:11:263:29 | ... * ... | -| test.cpp:289:17:289:20 | get_size output argument | test.cpp:291:11:291:28 | ... * ... | -| test.cpp:305:18:305:21 | get_size output argument | test.cpp:308:10:308:27 | ... * ... | -| test.cpp:353:18:353:31 | *call to getenv | test.cpp:355:35:355:38 | size | -| test.cpp:353:18:353:31 | *call to getenv | test.cpp:356:35:356:38 | size | +| test.cpp:39:27:39:30 | **argv | test.cpp:43:38:43:44 | tainted | provenance | | +| test.cpp:39:27:39:30 | **argv | test.cpp:44:38:44:63 | ... * ... | provenance | | +| test.cpp:39:27:39:30 | **argv | test.cpp:46:38:46:63 | ... + ... | provenance | | +| test.cpp:39:27:39:30 | **argv | test.cpp:49:32:49:35 | size | provenance | | +| test.cpp:39:27:39:30 | **argv | test.cpp:50:17:50:30 | size | provenance | | +| test.cpp:39:27:39:30 | **argv | test.cpp:53:35:53:60 | ... * ... | provenance | | +| test.cpp:124:18:124:31 | *call to getenv | test.cpp:128:24:128:41 | ... * ... | provenance | | +| test.cpp:133:19:133:32 | *call to getenv | test.cpp:135:10:135:27 | ... * ... | provenance | | +| test.cpp:148:20:148:33 | *call to getenv | test.cpp:152:11:152:28 | ... * ... | provenance | | +| test.cpp:209:8:209:23 | *get_tainted_size | test.cpp:241:9:241:24 | call to get_tainted_size | provenance | | +| test.cpp:211:14:211:27 | *call to getenv | test.cpp:209:8:209:23 | *get_tainted_size | provenance | | +| test.cpp:230:21:230:21 | s | test.cpp:231:21:231:21 | s | provenance | | +| test.cpp:237:24:237:37 | *call to getenv | test.cpp:239:9:239:18 | local_size | provenance | | +| test.cpp:237:24:237:37 | *call to getenv | test.cpp:245:11:245:20 | local_size | provenance | | +| test.cpp:237:24:237:37 | *call to getenv | test.cpp:247:10:247:19 | local_size | provenance | | +| test.cpp:247:10:247:19 | local_size | test.cpp:230:21:230:21 | s | provenance | | +| test.cpp:250:20:250:27 | *out_size | test.cpp:289:17:289:20 | get_size output argument | provenance | | +| test.cpp:250:20:250:27 | *out_size | test.cpp:305:18:305:21 | get_size output argument | provenance | | +| test.cpp:251:18:251:31 | *call to getenv | test.cpp:250:20:250:27 | *out_size | provenance | | +| test.cpp:259:20:259:33 | *call to getenv | test.cpp:263:11:263:29 | ... * ... | provenance | | +| test.cpp:289:17:289:20 | get_size output argument | test.cpp:291:11:291:28 | ... * ... | provenance | | +| test.cpp:305:18:305:21 | get_size output argument | test.cpp:308:10:308:27 | ... * ... | provenance | | +| test.cpp:353:18:353:31 | *call to getenv | test.cpp:355:35:355:38 | size | provenance | | +| test.cpp:353:18:353:31 | *call to getenv | test.cpp:356:35:356:38 | size | provenance | | nodes | test.cpp:39:27:39:30 | **argv | semmle.label | **argv | | test.cpp:43:38:43:44 | tainted | semmle.label | tainted | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/tainted/ArithmeticTainted.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/tainted/ArithmeticTainted.expected index 5c7755d3bd1..80123131652 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/tainted/ArithmeticTainted.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/tainted/ArithmeticTainted.expected @@ -1,19 +1,19 @@ edges -| test2.cpp:12:21:12:21 | v | test2.cpp:14:11:14:11 | v | -| test2.cpp:25:22:25:23 | fscanf output argument | test2.cpp:27:13:27:13 | v | -| test2.cpp:27:13:27:13 | v | test2.cpp:12:21:12:21 | v | -| test2.cpp:36:9:36:14 | fgets output argument | test2.cpp:39:9:39:11 | num | -| test2.cpp:36:9:36:14 | fgets output argument | test2.cpp:40:3:40:5 | num | -| test3.c:10:27:10:30 | **argv | test.c:14:15:14:28 | maxConnections | -| test3.c:10:27:10:30 | **argv | test.c:44:7:44:10 | len2 | -| test3.c:10:27:10:30 | **argv | test.c:54:7:54:10 | len3 | -| test5.cpp:5:5:5:17 | *getTaintedInt | test5.cpp:17:6:17:18 | call to getTaintedInt | -| test5.cpp:5:5:5:17 | *getTaintedInt | test5.cpp:18:6:18:18 | call to getTaintedInt | -| test5.cpp:9:7:9:9 | gets output argument | test5.cpp:5:5:5:17 | *getTaintedInt | -| test5.cpp:18:6:18:18 | call to getTaintedInt | test5.cpp:19:6:19:6 | y | -| test.c:10:27:10:30 | **argv | test.c:14:15:14:28 | maxConnections | -| test.c:10:27:10:30 | **argv | test.c:44:7:44:10 | len2 | -| test.c:10:27:10:30 | **argv | test.c:54:7:54:10 | len3 | +| test2.cpp:12:21:12:21 | v | test2.cpp:14:11:14:11 | v | provenance | | +| test2.cpp:25:22:25:23 | fscanf output argument | test2.cpp:27:13:27:13 | v | provenance | | +| test2.cpp:27:13:27:13 | v | test2.cpp:12:21:12:21 | v | provenance | | +| test2.cpp:36:9:36:14 | fgets output argument | test2.cpp:39:9:39:11 | num | provenance | | +| test2.cpp:36:9:36:14 | fgets output argument | test2.cpp:40:3:40:5 | num | provenance | | +| test3.c:10:27:10:30 | **argv | test.c:14:15:14:28 | maxConnections | provenance | | +| test3.c:10:27:10:30 | **argv | test.c:44:7:44:10 | len2 | provenance | | +| test3.c:10:27:10:30 | **argv | test.c:54:7:54:10 | len3 | provenance | | +| test5.cpp:5:5:5:17 | *getTaintedInt | test5.cpp:17:6:17:18 | call to getTaintedInt | provenance | | +| test5.cpp:5:5:5:17 | *getTaintedInt | test5.cpp:18:6:18:18 | call to getTaintedInt | provenance | | +| test5.cpp:9:7:9:9 | gets output argument | test5.cpp:5:5:5:17 | *getTaintedInt | provenance | | +| test5.cpp:18:6:18:18 | call to getTaintedInt | test5.cpp:19:6:19:6 | y | provenance | | +| test.c:10:27:10:30 | **argv | test.c:14:15:14:28 | maxConnections | provenance | | +| test.c:10:27:10:30 | **argv | test.c:44:7:44:10 | len2 | provenance | | +| test.c:10:27:10:30 | **argv | test.c:54:7:54:10 | len3 | provenance | | nodes | test2.cpp:12:21:12:21 | v | semmle.label | v | | test2.cpp:14:11:14:11 | v | semmle.label | v | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-193/InvalidPointerDeref.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-193/InvalidPointerDeref.expected index 2a94ba30908..43e865d894b 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-193/InvalidPointerDeref.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-193/InvalidPointerDeref.expected @@ -1,106 +1,106 @@ edges -| test.cpp:4:15:4:33 | call to malloc | test.cpp:5:15:5:22 | ... + ... | -| test.cpp:5:15:5:22 | ... + ... | test.cpp:5:15:5:22 | ... + ... | -| test.cpp:5:15:5:22 | ... + ... | test.cpp:6:14:6:15 | * ... | -| test.cpp:5:15:5:22 | ... + ... | test.cpp:6:14:6:15 | * ... | -| test.cpp:5:15:5:22 | ... + ... | test.cpp:6:14:6:15 | * ... | -| test.cpp:5:15:5:22 | ... + ... | test.cpp:6:14:6:15 | * ... | -| test.cpp:5:15:5:22 | ... + ... | test.cpp:8:14:8:21 | * ... | -| test.cpp:5:15:5:22 | ... + ... | test.cpp:8:14:8:21 | * ... | -| test.cpp:6:14:6:15 | * ... | test.cpp:8:14:8:21 | * ... | -| test.cpp:16:15:16:33 | call to malloc | test.cpp:20:14:20:21 | * ... | -| test.cpp:28:15:28:37 | call to malloc | test.cpp:29:15:29:28 | ... + ... | -| test.cpp:29:15:29:28 | ... + ... | test.cpp:29:15:29:28 | ... + ... | -| test.cpp:29:15:29:28 | ... + ... | test.cpp:30:14:30:15 | * ... | -| test.cpp:29:15:29:28 | ... + ... | test.cpp:30:14:30:15 | * ... | -| test.cpp:29:15:29:28 | ... + ... | test.cpp:30:14:30:15 | * ... | -| test.cpp:29:15:29:28 | ... + ... | test.cpp:30:14:30:15 | * ... | -| test.cpp:29:15:29:28 | ... + ... | test.cpp:32:14:32:21 | * ... | -| test.cpp:29:15:29:28 | ... + ... | test.cpp:32:14:32:21 | * ... | -| test.cpp:30:14:30:15 | * ... | test.cpp:32:14:32:21 | * ... | -| test.cpp:51:33:51:35 | *end | test.cpp:60:34:60:37 | mk_array output argument | -| test.cpp:52:19:52:37 | call to malloc | test.cpp:53:12:53:23 | ... + ... | -| test.cpp:53:12:53:23 | ... + ... | test.cpp:51:33:51:35 | *end | -| test.cpp:60:34:60:37 | mk_array output argument | test.cpp:67:9:67:14 | ... = ... | -| test.cpp:205:15:205:33 | call to malloc | test.cpp:206:17:206:23 | ... + ... | -| test.cpp:206:17:206:23 | ... + ... | test.cpp:206:17:206:23 | ... + ... | -| test.cpp:206:17:206:23 | ... + ... | test.cpp:213:5:213:13 | ... = ... | -| test.cpp:206:17:206:23 | ... + ... | test.cpp:213:5:213:13 | ... = ... | -| test.cpp:260:13:260:24 | new[] | test.cpp:261:14:261:21 | ... + ... | -| test.cpp:261:14:261:21 | ... + ... | test.cpp:261:14:261:21 | ... + ... | -| test.cpp:261:14:261:21 | ... + ... | test.cpp:264:13:264:14 | * ... | -| test.cpp:261:14:261:21 | ... + ... | test.cpp:264:13:264:14 | * ... | -| test.cpp:261:14:261:21 | ... + ... | test.cpp:264:13:264:14 | * ... | -| test.cpp:261:14:261:21 | ... + ... | test.cpp:264:13:264:14 | * ... | -| test.cpp:264:13:264:14 | * ... | test.cpp:264:13:264:14 | * ... | -| test.cpp:264:13:264:14 | * ... | test.cpp:264:13:264:14 | * ... | -| test.cpp:270:13:270:24 | new[] | test.cpp:271:14:271:21 | ... + ... | -| test.cpp:271:14:271:21 | ... + ... | test.cpp:271:14:271:21 | ... + ... | -| test.cpp:271:14:271:21 | ... + ... | test.cpp:274:5:274:10 | ... = ... | -| test.cpp:271:14:271:21 | ... + ... | test.cpp:274:5:274:10 | ... = ... | -| test.cpp:355:14:355:27 | new[] | test.cpp:356:15:356:23 | ... + ... | -| test.cpp:356:15:356:23 | ... + ... | test.cpp:356:15:356:23 | ... + ... | -| test.cpp:356:15:356:23 | ... + ... | test.cpp:358:14:358:26 | * ... | -| test.cpp:356:15:356:23 | ... + ... | test.cpp:358:14:358:26 | * ... | -| test.cpp:356:15:356:23 | ... + ... | test.cpp:359:14:359:32 | * ... | -| test.cpp:356:15:356:23 | ... + ... | test.cpp:359:14:359:32 | * ... | -| test.cpp:377:14:377:27 | new[] | test.cpp:378:15:378:23 | ... + ... | -| test.cpp:378:15:378:23 | ... + ... | test.cpp:378:15:378:23 | ... + ... | -| test.cpp:378:15:378:23 | ... + ... | test.cpp:384:13:384:16 | * ... | -| test.cpp:378:15:378:23 | ... + ... | test.cpp:384:13:384:16 | * ... | -| test.cpp:410:14:410:27 | new[] | test.cpp:411:15:411:23 | & ... | -| test.cpp:410:14:410:27 | new[] | test.cpp:415:7:415:15 | ... = ... | -| test.cpp:411:15:411:23 | & ... | test.cpp:411:15:411:23 | & ... | -| test.cpp:411:15:411:23 | & ... | test.cpp:415:7:415:15 | ... = ... | -| test.cpp:411:15:411:23 | & ... | test.cpp:415:7:415:15 | ... = ... | -| test.cpp:421:14:421:27 | new[] | test.cpp:422:15:422:23 | & ... | -| test.cpp:421:14:421:27 | new[] | test.cpp:426:7:426:15 | ... = ... | -| test.cpp:422:15:422:23 | & ... | test.cpp:422:15:422:23 | & ... | -| test.cpp:422:15:422:23 | & ... | test.cpp:426:7:426:15 | ... = ... | -| test.cpp:422:15:422:23 | & ... | test.cpp:426:7:426:15 | ... = ... | -| test.cpp:432:14:432:27 | new[] | test.cpp:433:15:433:23 | & ... | -| test.cpp:432:14:432:27 | new[] | test.cpp:438:7:438:15 | ... = ... | -| test.cpp:433:15:433:23 | & ... | test.cpp:433:15:433:23 | & ... | -| test.cpp:433:15:433:23 | & ... | test.cpp:438:7:438:15 | ... = ... | -| test.cpp:433:15:433:23 | & ... | test.cpp:438:7:438:15 | ... = ... | -| test.cpp:444:14:444:27 | new[] | test.cpp:445:15:445:23 | & ... | -| test.cpp:444:14:444:27 | new[] | test.cpp:450:7:450:15 | ... = ... | -| test.cpp:445:15:445:23 | & ... | test.cpp:445:15:445:23 | & ... | -| test.cpp:445:15:445:23 | & ... | test.cpp:450:7:450:15 | ... = ... | -| test.cpp:445:15:445:23 | & ... | test.cpp:450:7:450:15 | ... = ... | -| test.cpp:480:14:480:27 | new[] | test.cpp:481:15:481:23 | & ... | -| test.cpp:480:14:480:27 | new[] | test.cpp:486:7:486:15 | ... = ... | -| test.cpp:481:15:481:23 | & ... | test.cpp:481:15:481:23 | & ... | -| test.cpp:481:15:481:23 | & ... | test.cpp:486:7:486:15 | ... = ... | -| test.cpp:481:15:481:23 | & ... | test.cpp:486:7:486:15 | ... = ... | -| test.cpp:543:14:543:27 | new[] | test.cpp:548:5:548:19 | ... = ... | -| test.cpp:554:14:554:27 | new[] | test.cpp:559:5:559:19 | ... = ... | -| test.cpp:642:14:642:31 | new[] | test.cpp:647:5:647:19 | ... = ... | -| test.cpp:730:12:730:28 | new[] | test.cpp:732:16:732:26 | ... + ... | -| test.cpp:732:16:732:26 | ... + ... | test.cpp:732:16:732:26 | ... + ... | -| test.cpp:732:16:732:26 | ... + ... | test.cpp:733:5:733:12 | ... = ... | -| test.cpp:732:16:732:26 | ... + ... | test.cpp:733:5:733:12 | ... = ... | -| test.cpp:754:18:754:31 | new[] | test.cpp:767:16:767:29 | access to array | -| test.cpp:754:18:754:31 | new[] | test.cpp:767:16:767:29 | access to array | -| test.cpp:754:18:754:31 | new[] | test.cpp:772:16:772:29 | access to array | -| test.cpp:754:18:754:31 | new[] | test.cpp:772:16:772:29 | access to array | -| test.cpp:781:14:781:27 | new[] | test.cpp:786:18:786:27 | access to array | -| test.cpp:792:60:792:62 | *end | test.cpp:800:40:800:43 | mk_array_no_field_flow output argument | -| test.cpp:792:60:792:62 | *end | test.cpp:832:40:832:43 | mk_array_no_field_flow output argument | -| test.cpp:793:14:793:32 | call to malloc | test.cpp:794:12:794:24 | ... + ... | -| test.cpp:794:12:794:24 | ... + ... | test.cpp:792:60:792:62 | *end | -| test.cpp:800:40:800:43 | mk_array_no_field_flow output argument | test.cpp:807:7:807:12 | ... = ... | -| test.cpp:815:52:815:54 | end | test.cpp:815:52:815:54 | end | -| test.cpp:815:52:815:54 | end | test.cpp:821:7:821:12 | ... = ... | -| test.cpp:815:52:815:54 | end | test.cpp:821:7:821:12 | ... = ... | -| test.cpp:832:40:832:43 | mk_array_no_field_flow output argument | test.cpp:833:37:833:39 | end | -| test.cpp:833:37:833:39 | end | test.cpp:815:52:815:54 | end | -| test.cpp:841:18:841:35 | call to malloc | test.cpp:842:3:842:20 | ... = ... | -| test.cpp:848:20:848:37 | call to malloc | test.cpp:849:5:849:22 | ... = ... | -| test.cpp:856:12:856:35 | call to malloc | test.cpp:857:16:857:29 | ... + ... | -| test.cpp:857:16:857:29 | ... + ... | test.cpp:857:16:857:29 | ... + ... | -| test.cpp:857:16:857:29 | ... + ... | test.cpp:860:5:860:11 | ... = ... | -| test.cpp:857:16:857:29 | ... + ... | test.cpp:860:5:860:11 | ... = ... | +| test.cpp:4:15:4:33 | call to malloc | test.cpp:5:15:5:22 | ... + ... | provenance | | +| test.cpp:5:15:5:22 | ... + ... | test.cpp:5:15:5:22 | ... + ... | provenance | | +| test.cpp:5:15:5:22 | ... + ... | test.cpp:6:14:6:15 | * ... | provenance | | +| test.cpp:5:15:5:22 | ... + ... | test.cpp:6:14:6:15 | * ... | provenance | | +| test.cpp:5:15:5:22 | ... + ... | test.cpp:6:14:6:15 | * ... | provenance | | +| test.cpp:5:15:5:22 | ... + ... | test.cpp:6:14:6:15 | * ... | provenance | | +| test.cpp:5:15:5:22 | ... + ... | test.cpp:8:14:8:21 | * ... | provenance | | +| test.cpp:5:15:5:22 | ... + ... | test.cpp:8:14:8:21 | * ... | provenance | | +| test.cpp:6:14:6:15 | * ... | test.cpp:8:14:8:21 | * ... | provenance | | +| test.cpp:16:15:16:33 | call to malloc | test.cpp:20:14:20:21 | * ... | provenance | | +| test.cpp:28:15:28:37 | call to malloc | test.cpp:29:15:29:28 | ... + ... | provenance | | +| test.cpp:29:15:29:28 | ... + ... | test.cpp:29:15:29:28 | ... + ... | provenance | | +| test.cpp:29:15:29:28 | ... + ... | test.cpp:30:14:30:15 | * ... | provenance | | +| test.cpp:29:15:29:28 | ... + ... | test.cpp:30:14:30:15 | * ... | provenance | | +| test.cpp:29:15:29:28 | ... + ... | test.cpp:30:14:30:15 | * ... | provenance | | +| test.cpp:29:15:29:28 | ... + ... | test.cpp:30:14:30:15 | * ... | provenance | | +| test.cpp:29:15:29:28 | ... + ... | test.cpp:32:14:32:21 | * ... | provenance | | +| test.cpp:29:15:29:28 | ... + ... | test.cpp:32:14:32:21 | * ... | provenance | | +| test.cpp:30:14:30:15 | * ... | test.cpp:32:14:32:21 | * ... | provenance | | +| test.cpp:51:33:51:35 | *end | test.cpp:60:34:60:37 | mk_array output argument | provenance | | +| test.cpp:52:19:52:37 | call to malloc | test.cpp:53:12:53:23 | ... + ... | provenance | | +| test.cpp:53:12:53:23 | ... + ... | test.cpp:51:33:51:35 | *end | provenance | | +| test.cpp:60:34:60:37 | mk_array output argument | test.cpp:67:9:67:14 | ... = ... | provenance | | +| test.cpp:205:15:205:33 | call to malloc | test.cpp:206:17:206:23 | ... + ... | provenance | | +| test.cpp:206:17:206:23 | ... + ... | test.cpp:206:17:206:23 | ... + ... | provenance | | +| test.cpp:206:17:206:23 | ... + ... | test.cpp:213:5:213:13 | ... = ... | provenance | | +| test.cpp:206:17:206:23 | ... + ... | test.cpp:213:5:213:13 | ... = ... | provenance | | +| test.cpp:260:13:260:24 | new[] | test.cpp:261:14:261:21 | ... + ... | provenance | | +| test.cpp:261:14:261:21 | ... + ... | test.cpp:261:14:261:21 | ... + ... | provenance | | +| test.cpp:261:14:261:21 | ... + ... | test.cpp:264:13:264:14 | * ... | provenance | | +| test.cpp:261:14:261:21 | ... + ... | test.cpp:264:13:264:14 | * ... | provenance | | +| test.cpp:261:14:261:21 | ... + ... | test.cpp:264:13:264:14 | * ... | provenance | | +| test.cpp:261:14:261:21 | ... + ... | test.cpp:264:13:264:14 | * ... | provenance | | +| test.cpp:264:13:264:14 | * ... | test.cpp:264:13:264:14 | * ... | provenance | | +| test.cpp:264:13:264:14 | * ... | test.cpp:264:13:264:14 | * ... | provenance | | +| test.cpp:270:13:270:24 | new[] | test.cpp:271:14:271:21 | ... + ... | provenance | | +| test.cpp:271:14:271:21 | ... + ... | test.cpp:271:14:271:21 | ... + ... | provenance | | +| test.cpp:271:14:271:21 | ... + ... | test.cpp:274:5:274:10 | ... = ... | provenance | | +| test.cpp:271:14:271:21 | ... + ... | test.cpp:274:5:274:10 | ... = ... | provenance | | +| test.cpp:355:14:355:27 | new[] | test.cpp:356:15:356:23 | ... + ... | provenance | | +| test.cpp:356:15:356:23 | ... + ... | test.cpp:356:15:356:23 | ... + ... | provenance | | +| test.cpp:356:15:356:23 | ... + ... | test.cpp:358:14:358:26 | * ... | provenance | | +| test.cpp:356:15:356:23 | ... + ... | test.cpp:358:14:358:26 | * ... | provenance | | +| test.cpp:356:15:356:23 | ... + ... | test.cpp:359:14:359:32 | * ... | provenance | | +| test.cpp:356:15:356:23 | ... + ... | test.cpp:359:14:359:32 | * ... | provenance | | +| test.cpp:377:14:377:27 | new[] | test.cpp:378:15:378:23 | ... + ... | provenance | | +| test.cpp:378:15:378:23 | ... + ... | test.cpp:378:15:378:23 | ... + ... | provenance | | +| test.cpp:378:15:378:23 | ... + ... | test.cpp:384:13:384:16 | * ... | provenance | | +| test.cpp:378:15:378:23 | ... + ... | test.cpp:384:13:384:16 | * ... | provenance | | +| test.cpp:410:14:410:27 | new[] | test.cpp:411:15:411:23 | & ... | provenance | | +| test.cpp:410:14:410:27 | new[] | test.cpp:415:7:415:15 | ... = ... | provenance | | +| test.cpp:411:15:411:23 | & ... | test.cpp:411:15:411:23 | & ... | provenance | | +| test.cpp:411:15:411:23 | & ... | test.cpp:415:7:415:15 | ... = ... | provenance | | +| test.cpp:411:15:411:23 | & ... | test.cpp:415:7:415:15 | ... = ... | provenance | | +| test.cpp:421:14:421:27 | new[] | test.cpp:422:15:422:23 | & ... | provenance | | +| test.cpp:421:14:421:27 | new[] | test.cpp:426:7:426:15 | ... = ... | provenance | | +| test.cpp:422:15:422:23 | & ... | test.cpp:422:15:422:23 | & ... | provenance | | +| test.cpp:422:15:422:23 | & ... | test.cpp:426:7:426:15 | ... = ... | provenance | | +| test.cpp:422:15:422:23 | & ... | test.cpp:426:7:426:15 | ... = ... | provenance | | +| test.cpp:432:14:432:27 | new[] | test.cpp:433:15:433:23 | & ... | provenance | | +| test.cpp:432:14:432:27 | new[] | test.cpp:438:7:438:15 | ... = ... | provenance | | +| test.cpp:433:15:433:23 | & ... | test.cpp:433:15:433:23 | & ... | provenance | | +| test.cpp:433:15:433:23 | & ... | test.cpp:438:7:438:15 | ... = ... | provenance | | +| test.cpp:433:15:433:23 | & ... | test.cpp:438:7:438:15 | ... = ... | provenance | | +| test.cpp:444:14:444:27 | new[] | test.cpp:445:15:445:23 | & ... | provenance | | +| test.cpp:444:14:444:27 | new[] | test.cpp:450:7:450:15 | ... = ... | provenance | | +| test.cpp:445:15:445:23 | & ... | test.cpp:445:15:445:23 | & ... | provenance | | +| test.cpp:445:15:445:23 | & ... | test.cpp:450:7:450:15 | ... = ... | provenance | | +| test.cpp:445:15:445:23 | & ... | test.cpp:450:7:450:15 | ... = ... | provenance | | +| test.cpp:480:14:480:27 | new[] | test.cpp:481:15:481:23 | & ... | provenance | | +| test.cpp:480:14:480:27 | new[] | test.cpp:486:7:486:15 | ... = ... | provenance | | +| test.cpp:481:15:481:23 | & ... | test.cpp:481:15:481:23 | & ... | provenance | | +| test.cpp:481:15:481:23 | & ... | test.cpp:486:7:486:15 | ... = ... | provenance | | +| test.cpp:481:15:481:23 | & ... | test.cpp:486:7:486:15 | ... = ... | provenance | | +| test.cpp:543:14:543:27 | new[] | test.cpp:548:5:548:19 | ... = ... | provenance | | +| test.cpp:554:14:554:27 | new[] | test.cpp:559:5:559:19 | ... = ... | provenance | | +| test.cpp:642:14:642:31 | new[] | test.cpp:647:5:647:19 | ... = ... | provenance | | +| test.cpp:730:12:730:28 | new[] | test.cpp:732:16:732:26 | ... + ... | provenance | | +| test.cpp:732:16:732:26 | ... + ... | test.cpp:732:16:732:26 | ... + ... | provenance | | +| test.cpp:732:16:732:26 | ... + ... | test.cpp:733:5:733:12 | ... = ... | provenance | | +| test.cpp:732:16:732:26 | ... + ... | test.cpp:733:5:733:12 | ... = ... | provenance | | +| test.cpp:754:18:754:31 | new[] | test.cpp:767:16:767:29 | access to array | provenance | | +| test.cpp:754:18:754:31 | new[] | test.cpp:767:16:767:29 | access to array | provenance | | +| test.cpp:754:18:754:31 | new[] | test.cpp:772:16:772:29 | access to array | provenance | | +| test.cpp:754:18:754:31 | new[] | test.cpp:772:16:772:29 | access to array | provenance | | +| test.cpp:781:14:781:27 | new[] | test.cpp:786:18:786:27 | access to array | provenance | | +| test.cpp:792:60:792:62 | *end | test.cpp:800:40:800:43 | mk_array_no_field_flow output argument | provenance | | +| test.cpp:792:60:792:62 | *end | test.cpp:832:40:832:43 | mk_array_no_field_flow output argument | provenance | | +| test.cpp:793:14:793:32 | call to malloc | test.cpp:794:12:794:24 | ... + ... | provenance | | +| test.cpp:794:12:794:24 | ... + ... | test.cpp:792:60:792:62 | *end | provenance | | +| test.cpp:800:40:800:43 | mk_array_no_field_flow output argument | test.cpp:807:7:807:12 | ... = ... | provenance | | +| test.cpp:815:52:815:54 | end | test.cpp:815:52:815:54 | end | provenance | | +| test.cpp:815:52:815:54 | end | test.cpp:821:7:821:12 | ... = ... | provenance | | +| test.cpp:815:52:815:54 | end | test.cpp:821:7:821:12 | ... = ... | provenance | | +| test.cpp:832:40:832:43 | mk_array_no_field_flow output argument | test.cpp:833:37:833:39 | end | provenance | | +| test.cpp:833:37:833:39 | end | test.cpp:815:52:815:54 | end | provenance | | +| test.cpp:841:18:841:35 | call to malloc | test.cpp:842:3:842:20 | ... = ... | provenance | | +| test.cpp:848:20:848:37 | call to malloc | test.cpp:849:5:849:22 | ... = ... | provenance | | +| test.cpp:856:12:856:35 | call to malloc | test.cpp:857:16:857:29 | ... + ... | provenance | | +| test.cpp:857:16:857:29 | ... + ... | test.cpp:857:16:857:29 | ... + ... | provenance | | +| test.cpp:857:16:857:29 | ... + ... | test.cpp:860:5:860:11 | ... = ... | provenance | | +| test.cpp:857:16:857:29 | ... + ... | test.cpp:860:5:860:11 | ... = ... | provenance | | nodes | test.cpp:4:15:4:33 | call to malloc | semmle.label | call to malloc | | test.cpp:5:15:5:22 | ... + ... | semmle.label | ... + ... | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-290/semmle/AuthenticationBypass/AuthenticationBypass.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-290/semmle/AuthenticationBypass/AuthenticationBypass.expected index 800e2d06c44..f5fa846e7a8 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-290/semmle/AuthenticationBypass/AuthenticationBypass.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-290/semmle/AuthenticationBypass/AuthenticationBypass.expected @@ -1,10 +1,10 @@ edges -| test.cpp:16:25:16:42 | *call to getenv | test.cpp:20:14:20:20 | *address | -| test.cpp:27:25:27:42 | *call to getenv | test.cpp:31:14:31:20 | *address | -| test.cpp:38:25:38:42 | *call to getenv | test.cpp:42:14:42:20 | *address | -| test.cpp:49:25:49:42 | *call to getenv | test.cpp:52:14:52:20 | *address | -| test.cpp:49:25:49:42 | *call to getenv | test.cpp:56:14:56:20 | *address | -| test.cpp:49:25:49:42 | *call to getenv | test.cpp:60:14:60:20 | *address | +| test.cpp:16:25:16:42 | *call to getenv | test.cpp:20:14:20:20 | *address | provenance | | +| test.cpp:27:25:27:42 | *call to getenv | test.cpp:31:14:31:20 | *address | provenance | | +| test.cpp:38:25:38:42 | *call to getenv | test.cpp:42:14:42:20 | *address | provenance | | +| test.cpp:49:25:49:42 | *call to getenv | test.cpp:52:14:52:20 | *address | provenance | | +| test.cpp:49:25:49:42 | *call to getenv | test.cpp:56:14:56:20 | *address | provenance | | +| test.cpp:49:25:49:42 | *call to getenv | test.cpp:60:14:60:20 | *address | provenance | | nodes | test.cpp:16:25:16:42 | *call to getenv | semmle.label | *call to getenv | | test.cpp:20:14:20:20 | *address | semmle.label | *address | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-311/semmle/tests/CleartextBufferWrite.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-311/semmle/tests/CleartextBufferWrite.expected index 6864309a63e..edd3a273cc6 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-311/semmle/tests/CleartextBufferWrite.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-311/semmle/tests/CleartextBufferWrite.expected @@ -1,5 +1,5 @@ edges -| test.cpp:53:27:53:30 | **argv | test.cpp:58:25:58:29 | *input | +| test.cpp:53:27:53:30 | **argv | test.cpp:58:25:58:29 | *input | provenance | | nodes | test2.cpp:110:3:110:6 | *call to gets | semmle.label | *call to gets | | test.cpp:53:27:53:30 | **argv | semmle.label | **argv | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-311/semmle/tests/CleartextFileWrite.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-311/semmle/tests/CleartextFileWrite.expected index c2ff01e3e0c..ddeb3fed32f 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-311/semmle/tests/CleartextFileWrite.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-311/semmle/tests/CleartextFileWrite.expected @@ -1,10 +1,10 @@ edges -| test2.cpp:62:18:62:25 | password | test2.cpp:65:31:65:34 | cpy1 | -| test2.cpp:72:15:72:24 | password | test2.cpp:73:30:73:32 | *buf | -| test2.cpp:72:15:72:24 | password | test2.cpp:76:30:76:32 | *buf | -| test2.cpp:98:45:98:52 | password | test2.cpp:99:27:99:32 | *buffer | -| test.cpp:70:38:70:48 | thePassword | test.cpp:73:43:73:53 | thePassword | -| test.cpp:73:63:73:73 | thePassword | test.cpp:73:43:73:53 | thePassword | +| test2.cpp:62:18:62:25 | password | test2.cpp:65:31:65:34 | cpy1 | provenance | | +| test2.cpp:72:15:72:24 | password | test2.cpp:73:30:73:32 | *buf | provenance | | +| test2.cpp:72:15:72:24 | password | test2.cpp:76:30:76:32 | *buf | provenance | | +| test2.cpp:98:45:98:52 | password | test2.cpp:99:27:99:32 | *buffer | provenance | | +| test.cpp:70:38:70:48 | thePassword | test.cpp:73:43:73:53 | thePassword | provenance | | +| test.cpp:73:63:73:73 | thePassword | test.cpp:73:43:73:53 | thePassword | provenance | | nodes | test2.cpp:43:36:43:43 | password | semmle.label | password | | test2.cpp:44:37:44:45 | thepasswd | semmle.label | thepasswd | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-311/semmle/tests/CleartextTransmission.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-311/semmle/tests/CleartextTransmission.expected index 364da5b663b..8be2ec60f4a 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-311/semmle/tests/CleartextTransmission.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-311/semmle/tests/CleartextTransmission.expected @@ -1,36 +1,36 @@ edges -| test3.cpp:74:21:74:29 | password1 | test3.cpp:76:15:76:17 | ptr | -| test3.cpp:81:15:81:22 | password | test3.cpp:83:15:83:17 | ptr | -| test3.cpp:112:20:112:25 | buffer | test3.cpp:114:14:114:19 | buffer | -| test3.cpp:117:28:117:33 | buffer | test3.cpp:117:13:117:14 | *id | -| test3.cpp:124:7:124:20 | *get_global_str | test3.cpp:144:16:144:29 | call to get_global_str | -| test3.cpp:126:9:126:23 | global_password | test3.cpp:124:7:124:20 | *get_global_str | -| test3.cpp:134:11:134:18 | password | test3.cpp:112:20:112:25 | buffer | -| test3.cpp:138:21:138:22 | call to id | test3.cpp:140:15:140:17 | ptr | -| test3.cpp:138:24:138:32 | password1 | test3.cpp:117:28:117:33 | buffer | -| test3.cpp:138:24:138:32 | password1 | test3.cpp:138:21:138:22 | call to id | -| test3.cpp:144:16:144:29 | call to get_global_str | test3.cpp:146:15:146:18 | data | -| test3.cpp:157:19:157:26 | password | test3.cpp:159:15:159:20 | *buffer | -| test3.cpp:270:16:270:23 | password | test3.cpp:272:15:272:18 | *data | -| test3.cpp:278:20:278:23 | data | test3.cpp:280:14:280:17 | data | -| test3.cpp:283:20:283:23 | data | test3.cpp:285:14:285:17 | data | -| test3.cpp:288:20:288:23 | data | test3.cpp:290:14:290:17 | data | -| test3.cpp:293:20:293:23 | data | test3.cpp:295:14:295:17 | data | -| test3.cpp:298:20:298:23 | data | test3.cpp:300:14:300:17 | data | -| test3.cpp:313:11:313:19 | password1 | test3.cpp:278:20:278:23 | data | -| test3.cpp:314:11:314:19 | password1 | test3.cpp:283:20:283:23 | data | -| test3.cpp:316:11:316:19 | password1 | test3.cpp:283:20:283:23 | data | -| test3.cpp:317:11:317:19 | password1 | test3.cpp:288:20:288:23 | data | -| test3.cpp:322:16:322:24 | password2 | test3.cpp:324:11:324:14 | data | -| test3.cpp:322:16:322:24 | password2 | test3.cpp:325:11:325:14 | data | -| test3.cpp:324:11:324:14 | data | test3.cpp:293:20:293:23 | data | -| test3.cpp:325:11:325:14 | data | test3.cpp:298:20:298:23 | data | -| test3.cpp:526:44:526:54 | my_latitude | test3.cpp:527:15:527:20 | *buffer | -| test3.cpp:532:45:532:58 | home_longitude | test3.cpp:533:15:533:20 | *buffer | -| test3.cpp:551:47:551:58 | salaryString | test3.cpp:552:15:552:20 | *buffer | -| test3.cpp:556:19:556:30 | salaryString | test3.cpp:559:15:559:20 | *buffer | -| test3.cpp:571:8:571:21 | call to get_home_phone | test3.cpp:572:14:572:16 | str | -| test3.cpp:577:8:577:23 | call to get_home_address | test3.cpp:578:14:578:16 | str | +| test3.cpp:74:21:74:29 | password1 | test3.cpp:76:15:76:17 | ptr | provenance | | +| test3.cpp:81:15:81:22 | password | test3.cpp:83:15:83:17 | ptr | provenance | | +| test3.cpp:112:20:112:25 | buffer | test3.cpp:114:14:114:19 | buffer | provenance | | +| test3.cpp:117:28:117:33 | buffer | test3.cpp:117:13:117:14 | *id | provenance | | +| test3.cpp:124:7:124:20 | *get_global_str | test3.cpp:144:16:144:29 | call to get_global_str | provenance | | +| test3.cpp:126:9:126:23 | global_password | test3.cpp:124:7:124:20 | *get_global_str | provenance | | +| test3.cpp:134:11:134:18 | password | test3.cpp:112:20:112:25 | buffer | provenance | | +| test3.cpp:138:21:138:22 | call to id | test3.cpp:140:15:140:17 | ptr | provenance | | +| test3.cpp:138:24:138:32 | password1 | test3.cpp:117:28:117:33 | buffer | provenance | | +| test3.cpp:138:24:138:32 | password1 | test3.cpp:138:21:138:22 | call to id | provenance | | +| test3.cpp:144:16:144:29 | call to get_global_str | test3.cpp:146:15:146:18 | data | provenance | | +| test3.cpp:157:19:157:26 | password | test3.cpp:159:15:159:20 | *buffer | provenance | | +| test3.cpp:270:16:270:23 | password | test3.cpp:272:15:272:18 | *data | provenance | | +| test3.cpp:278:20:278:23 | data | test3.cpp:280:14:280:17 | data | provenance | | +| test3.cpp:283:20:283:23 | data | test3.cpp:285:14:285:17 | data | provenance | | +| test3.cpp:288:20:288:23 | data | test3.cpp:290:14:290:17 | data | provenance | | +| test3.cpp:293:20:293:23 | data | test3.cpp:295:14:295:17 | data | provenance | | +| test3.cpp:298:20:298:23 | data | test3.cpp:300:14:300:17 | data | provenance | | +| test3.cpp:313:11:313:19 | password1 | test3.cpp:278:20:278:23 | data | provenance | | +| test3.cpp:314:11:314:19 | password1 | test3.cpp:283:20:283:23 | data | provenance | | +| test3.cpp:316:11:316:19 | password1 | test3.cpp:283:20:283:23 | data | provenance | | +| test3.cpp:317:11:317:19 | password1 | test3.cpp:288:20:288:23 | data | provenance | | +| test3.cpp:322:16:322:24 | password2 | test3.cpp:324:11:324:14 | data | provenance | | +| test3.cpp:322:16:322:24 | password2 | test3.cpp:325:11:325:14 | data | provenance | | +| test3.cpp:324:11:324:14 | data | test3.cpp:293:20:293:23 | data | provenance | | +| test3.cpp:325:11:325:14 | data | test3.cpp:298:20:298:23 | data | provenance | | +| test3.cpp:526:44:526:54 | my_latitude | test3.cpp:527:15:527:20 | *buffer | provenance | | +| test3.cpp:532:45:532:58 | home_longitude | test3.cpp:533:15:533:20 | *buffer | provenance | | +| test3.cpp:551:47:551:58 | salaryString | test3.cpp:552:15:552:20 | *buffer | provenance | | +| test3.cpp:556:19:556:30 | salaryString | test3.cpp:559:15:559:20 | *buffer | provenance | | +| test3.cpp:571:8:571:21 | call to get_home_phone | test3.cpp:572:14:572:16 | str | provenance | | +| test3.cpp:577:8:577:23 | call to get_home_address | test3.cpp:578:14:578:16 | str | provenance | | nodes | test3.cpp:22:15:22:23 | password1 | semmle.label | password1 | | test3.cpp:26:15:26:23 | password2 | semmle.label | password2 | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-319/UseOfHttp/UseOfHttp.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-319/UseOfHttp/UseOfHttp.expected index 49620af742f..fa12a3030f1 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-319/UseOfHttp/UseOfHttp.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-319/UseOfHttp/UseOfHttp.expected @@ -1,17 +1,17 @@ edges -| test.cpp:11:26:11:28 | *url | test.cpp:15:30:15:32 | *url | -| test.cpp:24:13:24:17 | **url_g | test.cpp:38:11:38:15 | *url_g | -| test.cpp:24:21:24:40 | *http://example.com | test.cpp:24:13:24:17 | **url_g | -| test.cpp:28:10:28:29 | *http://example.com | test.cpp:11:26:11:28 | *url | -| test.cpp:35:23:35:42 | *http://example.com | test.cpp:39:11:39:15 | *url_l | -| test.cpp:36:26:36:45 | *http://example.com | test.cpp:40:11:40:17 | *access to array | -| test.cpp:38:11:38:15 | *url_g | test.cpp:11:26:11:28 | *url | -| test.cpp:39:11:39:15 | *url_l | test.cpp:11:26:11:28 | *url | -| test.cpp:40:11:40:17 | *access to array | test.cpp:11:26:11:28 | *url | -| test.cpp:46:18:46:26 | *http:// | test.cpp:49:11:49:16 | *buffer | -| test.cpp:49:11:49:16 | *buffer | test.cpp:11:26:11:28 | *url | -| test.cpp:110:21:110:40 | *http://example.com | test.cpp:121:11:121:13 | *ptr | -| test.cpp:121:11:121:13 | *ptr | test.cpp:11:26:11:28 | *url | +| test.cpp:11:26:11:28 | *url | test.cpp:15:30:15:32 | *url | provenance | | +| test.cpp:24:13:24:17 | **url_g | test.cpp:38:11:38:15 | *url_g | provenance | | +| test.cpp:24:21:24:40 | *http://example.com | test.cpp:24:13:24:17 | **url_g | provenance | | +| test.cpp:28:10:28:29 | *http://example.com | test.cpp:11:26:11:28 | *url | provenance | | +| test.cpp:35:23:35:42 | *http://example.com | test.cpp:39:11:39:15 | *url_l | provenance | | +| test.cpp:36:26:36:45 | *http://example.com | test.cpp:40:11:40:17 | *access to array | provenance | | +| test.cpp:38:11:38:15 | *url_g | test.cpp:11:26:11:28 | *url | provenance | | +| test.cpp:39:11:39:15 | *url_l | test.cpp:11:26:11:28 | *url | provenance | | +| test.cpp:40:11:40:17 | *access to array | test.cpp:11:26:11:28 | *url | provenance | | +| test.cpp:46:18:46:26 | *http:// | test.cpp:49:11:49:16 | *buffer | provenance | | +| test.cpp:49:11:49:16 | *buffer | test.cpp:11:26:11:28 | *url | provenance | | +| test.cpp:110:21:110:40 | *http://example.com | test.cpp:121:11:121:13 | *ptr | provenance | | +| test.cpp:121:11:121:13 | *ptr | test.cpp:11:26:11:28 | *url | provenance | | nodes | test.cpp:11:26:11:28 | *url | semmle.label | *url | | test.cpp:15:30:15:32 | *url | semmle.label | *url | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-416/semmle/tests/UseAfterFree/UseAfterFree.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-416/semmle/tests/UseAfterFree/UseAfterFree.expected index 07758344bf3..22cb3f2fe81 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-416/semmle/tests/UseAfterFree/UseAfterFree.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-416/semmle/tests/UseAfterFree/UseAfterFree.expected @@ -1,16 +1,16 @@ edges -| test.cpp:39:7:39:10 | pointer to free output argument | test.cpp:41:6:41:9 | data | -| test.cpp:75:7:75:10 | pointer to free output argument | test.cpp:79:7:79:10 | data | -| test.cpp:106:7:106:10 | pointer to free output argument | test.cpp:108:6:108:9 | data | -| test.cpp:116:7:116:10 | pointer to free output argument | test.cpp:119:6:119:9 | data | -| test.cpp:127:7:127:10 | pointer to free output argument | test.cpp:130:6:130:9 | data | -| test.cpp:164:9:164:9 | pointer to operator delete output argument | test.cpp:165:2:165:2 | c | -| test.cpp:164:9:164:9 | pointer to operator delete output argument | test.cpp:166:3:166:4 | * ... | -| test.cpp:181:7:181:10 | pointer to free output argument | test.cpp:186:6:186:9 | data | -| test.cpp:192:7:192:10 | pointer to free output argument | test.cpp:197:6:197:9 | data | -| test.cpp:203:7:203:10 | pointer to free output argument | test.cpp:209:6:209:9 | data | -| test.cpp:207:8:207:11 | pointer to free output argument | test.cpp:209:6:209:9 | data | -| test.cpp:216:9:216:9 | pointer to operator delete output argument | test.cpp:217:6:217:6 | x | +| test.cpp:39:7:39:10 | pointer to free output argument | test.cpp:41:6:41:9 | data | provenance | | +| test.cpp:75:7:75:10 | pointer to free output argument | test.cpp:79:7:79:10 | data | provenance | | +| test.cpp:106:7:106:10 | pointer to free output argument | test.cpp:108:6:108:9 | data | provenance | | +| test.cpp:116:7:116:10 | pointer to free output argument | test.cpp:119:6:119:9 | data | provenance | | +| test.cpp:127:7:127:10 | pointer to free output argument | test.cpp:130:6:130:9 | data | provenance | | +| test.cpp:164:9:164:9 | pointer to operator delete output argument | test.cpp:165:2:165:2 | c | provenance | | +| test.cpp:164:9:164:9 | pointer to operator delete output argument | test.cpp:166:3:166:4 | * ... | provenance | | +| test.cpp:181:7:181:10 | pointer to free output argument | test.cpp:186:6:186:9 | data | provenance | | +| test.cpp:192:7:192:10 | pointer to free output argument | test.cpp:197:6:197:9 | data | provenance | | +| test.cpp:203:7:203:10 | pointer to free output argument | test.cpp:209:6:209:9 | data | provenance | | +| test.cpp:207:8:207:11 | pointer to free output argument | test.cpp:209:6:209:9 | data | provenance | | +| test.cpp:216:9:216:9 | pointer to operator delete output argument | test.cpp:217:6:217:6 | x | provenance | | nodes | test.cpp:39:7:39:10 | pointer to free output argument | semmle.label | pointer to free output argument | | test.cpp:41:6:41:9 | data | semmle.label | data | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-497/SAMATE/PotentiallyExposedSystemData.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-497/SAMATE/PotentiallyExposedSystemData.expected index 6746c557288..3fc58925ff7 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-497/SAMATE/PotentiallyExposedSystemData.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-497/SAMATE/PotentiallyExposedSystemData.expected @@ -1,5 +1,5 @@ edges -| tests.c:57:21:57:28 | *password | tests.c:70:70:70:77 | *password | +| tests.c:57:21:57:28 | *password | tests.c:70:70:70:77 | *password | provenance | | nodes | tests.c:57:21:57:28 | *password | semmle.label | *password | | tests.c:70:70:70:77 | *password | semmle.label | *password | 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 9c5a5a9f270..82fd2be33f8 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 @@ -1,20 +1,20 @@ edges -| tests2.cpp:50:13:50:19 | **global1 | tests2.cpp:82:14:82:20 | *global1 | -| tests2.cpp:50:23:50:43 | *call to mysql_get_client_info | tests2.cpp:50:13:50:19 | **global1 | -| tests2.cpp:78:18:78:38 | *call to mysql_get_client_info | tests2.cpp:81:14:81:19 | *buffer | -| tests2.cpp:91:42:91:45 | *str1 | tests2.cpp:93:14:93:17 | *str1 | -| tests2.cpp:101:8:101:15 | *call to getpwuid | tests2.cpp:102:14:102:15 | *pw | -| tests2.cpp:109:3:109:4 | *c1 [post update] [*ptr] | tests2.cpp:111:14:111:15 | *c1 [*ptr] | -| tests2.cpp:109:3:109:36 | *... = ... | tests2.cpp:109:3:109:4 | *c1 [post update] [*ptr] | -| tests2.cpp:109:12:109:17 | *call to getenv | tests2.cpp:109:3:109:36 | *... = ... | -| tests2.cpp:111:14:111:15 | *c1 [*ptr] | tests2.cpp:111:14:111:19 | *ptr | -| tests2.cpp:111:14:111:15 | *c1 [*ptr] | tests2.cpp:111:17:111:19 | *ptr | -| tests2.cpp:111:17:111:19 | *ptr | tests2.cpp:111:14:111:19 | *ptr | -| tests_sockets.cpp:26:15:26:20 | *call to getenv | tests_sockets.cpp:39:19:39:22 | *path | -| tests_sockets.cpp:26:15:26:20 | *call to getenv | tests_sockets.cpp:43:20:43:23 | *path | -| tests_sockets.cpp:63:15:63:20 | *call to getenv | tests_sockets.cpp:76:19:76:22 | *path | -| tests_sockets.cpp:63:15:63:20 | *call to getenv | tests_sockets.cpp:80:20:80:23 | *path | -| tests_sysconf.cpp:36:21:36:27 | confstr output argument | tests_sysconf.cpp:39:19:39:25 | *pathbuf | +| tests2.cpp:50:13:50:19 | **global1 | tests2.cpp:82:14:82:20 | *global1 | provenance | | +| tests2.cpp:50:23:50:43 | *call to mysql_get_client_info | tests2.cpp:50:13:50:19 | **global1 | provenance | | +| tests2.cpp:78:18:78:38 | *call to mysql_get_client_info | tests2.cpp:81:14:81:19 | *buffer | provenance | | +| tests2.cpp:91:42:91:45 | *str1 | tests2.cpp:93:14:93:17 | *str1 | provenance | | +| tests2.cpp:101:8:101:15 | *call to getpwuid | tests2.cpp:102:14:102:15 | *pw | provenance | | +| tests2.cpp:109:3:109:4 | *c1 [post update] [*ptr] | tests2.cpp:111:14:111:15 | *c1 [*ptr] | provenance | | +| tests2.cpp:109:3:109:36 | *... = ... | tests2.cpp:109:3:109:4 | *c1 [post update] [*ptr] | provenance | | +| tests2.cpp:109:12:109:17 | *call to getenv | tests2.cpp:109:3:109:36 | *... = ... | provenance | | +| 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 | | +| tests_sockets.cpp:26:15:26:20 | *call to getenv | tests_sockets.cpp:39:19:39:22 | *path | provenance | | +| tests_sockets.cpp:26:15:26:20 | *call to getenv | tests_sockets.cpp:43:20:43:23 | *path | provenance | | +| tests_sockets.cpp:63:15:63:20 | *call to getenv | tests_sockets.cpp:76:19:76:22 | *path | provenance | | +| tests_sockets.cpp:63:15:63:20 | *call to getenv | tests_sockets.cpp:80:20:80:23 | *path | provenance | | +| tests_sysconf.cpp:36:21:36:27 | confstr output argument | tests_sysconf.cpp:39:19:39:25 | *pathbuf | provenance | | nodes | tests2.cpp:50:13:50:19 | **global1 | semmle.label | **global1 | | tests2.cpp:50:23:50:43 | *call to mysql_get_client_info | semmle.label | *call to mysql_get_client_info | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-497/semmle/tests/PotentiallyExposedSystemData.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-497/semmle/tests/PotentiallyExposedSystemData.expected index 5178a401939..32e7895b794 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-497/semmle/tests/PotentiallyExposedSystemData.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-497/semmle/tests/PotentiallyExposedSystemData.expected @@ -1,18 +1,18 @@ edges -| tests.cpp:62:7:62:18 | **global_token | tests.cpp:71:27:71:38 | *global_token | -| tests.cpp:62:7:62:18 | **global_token | tests.cpp:73:27:73:31 | *maybe | -| tests.cpp:62:22:62:27 | *call to getenv | tests.cpp:62:7:62:18 | **global_token | -| tests.cpp:86:29:86:31 | *msg | tests.cpp:88:15:88:17 | *msg | -| tests.cpp:97:13:97:34 | *call to getenv | tests.cpp:86:29:86:31 | *msg | -| tests.cpp:107:30:107:32 | *msg | tests.cpp:111:15:111:17 | *tmp | -| tests.cpp:114:30:114:32 | *msg | tests.cpp:119:7:119:12 | *buffer | -| tests.cpp:122:30:122:32 | *msg | tests.cpp:124:15:124:17 | *msg | -| tests.cpp:131:14:131:35 | *call to getenv | tests.cpp:107:30:107:32 | *msg | -| tests.cpp:132:14:132:35 | *call to getenv | tests.cpp:114:30:114:32 | *msg | -| tests.cpp:133:14:133:35 | *call to getenv | tests.cpp:122:30:122:32 | *msg | -| tests.cpp:139:17:139:22 | *call to getenv | tests.cpp:141:15:141:20 | *secret | -| tests_passwd.cpp:16:8:16:15 | *call to getpwnam | tests_passwd.cpp:18:29:18:31 | *pwd | -| tests_passwd.cpp:16:8:16:15 | *call to getpwnam | tests_passwd.cpp:19:26:19:28 | *pwd | +| tests.cpp:62:7:62:18 | **global_token | tests.cpp:71:27:71:38 | *global_token | provenance | | +| tests.cpp:62:7:62:18 | **global_token | tests.cpp:73:27:73:31 | *maybe | provenance | | +| tests.cpp:62:22:62:27 | *call to getenv | tests.cpp:62:7:62:18 | **global_token | provenance | | +| tests.cpp:86:29:86:31 | *msg | tests.cpp:88:15:88:17 | *msg | provenance | | +| tests.cpp:97:13:97:34 | *call to getenv | tests.cpp:86:29:86:31 | *msg | provenance | | +| tests.cpp:107:30:107:32 | *msg | tests.cpp:111:15:111:17 | *tmp | provenance | | +| tests.cpp:114:30:114:32 | *msg | tests.cpp:119:7:119:12 | *buffer | provenance | | +| tests.cpp:122:30:122:32 | *msg | tests.cpp:124:15:124:17 | *msg | provenance | | +| tests.cpp:131:14:131:35 | *call to getenv | tests.cpp:107:30:107:32 | *msg | provenance | | +| tests.cpp:132:14:132:35 | *call to getenv | tests.cpp:114:30:114:32 | *msg | provenance | | +| tests.cpp:133:14:133:35 | *call to getenv | tests.cpp:122:30:122:32 | *msg | provenance | | +| tests.cpp:139:17:139:22 | *call to getenv | tests.cpp:141:15:141:20 | *secret | provenance | | +| tests_passwd.cpp:16:8:16:15 | *call to getpwnam | tests_passwd.cpp:18:29:18:31 | *pwd | provenance | | +| tests_passwd.cpp:16:8:16:15 | *call to getpwnam | tests_passwd.cpp:19:26:19:28 | *pwd | provenance | | nodes | tests.cpp:48:15:48:36 | *call to getenv | semmle.label | *call to getenv | | tests.cpp:49:15:49:36 | *call to getenv | semmle.label | *call to getenv | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-611/XXE.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-611/XXE.expected index 4efc0e59620..70386662fe8 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-611/XXE.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-611/XXE.expected @@ -1,52 +1,52 @@ edges -| tests2.cpp:20:17:20:31 | call to SAXParser | tests2.cpp:22:2:22:2 | *p | -| tests2.cpp:33:17:33:31 | call to SAXParser | tests2.cpp:37:2:37:2 | *p | -| tests2.cpp:49:12:49:12 | call to SAXParser | tests2.cpp:51:2:51:2 | *p | -| tests3.cpp:23:21:23:53 | *call to createXMLReader | tests3.cpp:25:2:25:2 | *p | -| tests3.cpp:35:16:35:20 | **p_3_3 | tests3.cpp:38:2:38:6 | *p_3_3 | -| tests3.cpp:35:24:35:56 | *call to createXMLReader | tests3.cpp:35:16:35:20 | **p_3_3 | -| tests3.cpp:48:16:48:20 | **p_3_5 | tests3.cpp:56:2:56:6 | *p_3_5 | -| tests3.cpp:48:24:48:56 | *call to createXMLReader | tests3.cpp:48:16:48:20 | **p_3_5 | -| tests3.cpp:60:21:60:53 | *call to createXMLReader | tests3.cpp:63:2:63:2 | *p | -| tests3.cpp:67:21:67:53 | *call to createXMLReader | tests3.cpp:70:2:70:2 | *p | -| tests5.cpp:27:25:27:38 | *call to createLSParser | tests5.cpp:29:2:29:2 | *p | -| tests5.cpp:40:25:40:38 | *call to createLSParser | tests5.cpp:43:2:43:2 | *p | -| tests5.cpp:55:25:55:38 | *call to createLSParser | tests5.cpp:59:2:59:2 | *p | -| tests5.cpp:63:21:63:24 | **g_p2 | tests5.cpp:77:2:77:5 | *g_p2 | -| tests5.cpp:70:17:70:30 | *call to createLSParser | tests5.cpp:63:21:63:24 | **g_p2 | -| tests5.cpp:81:25:81:38 | *call to createLSParser | tests5.cpp:83:2:83:2 | *p | -| tests5.cpp:81:25:81:38 | *call to createLSParser | tests5.cpp:83:2:83:2 | *p | -| tests5.cpp:83:2:83:2 | *p | tests5.cpp:85:2:85:2 | *p | -| tests5.cpp:85:2:85:2 | *p | tests5.cpp:86:2:86:2 | *p | -| tests5.cpp:86:2:86:2 | *p | tests5.cpp:88:2:88:2 | *p | -| tests5.cpp:88:2:88:2 | *p | tests5.cpp:89:2:89:2 | *p | -| tests.cpp:15:23:15:43 | call to XercesDOMParser | tests.cpp:17:2:17:2 | *p | -| tests.cpp:28:23:28:43 | call to XercesDOMParser | tests.cpp:31:2:31:2 | *p | -| tests.cpp:35:23:35:43 | call to XercesDOMParser | tests.cpp:37:2:37:2 | *p | -| tests.cpp:37:2:37:2 | *p | tests.cpp:37:2:37:2 | *p | -| tests.cpp:37:2:37:2 | *p | tests.cpp:38:2:38:2 | *p | -| tests.cpp:38:2:38:2 | *p | tests.cpp:38:2:38:2 | *p | -| tests.cpp:38:2:38:2 | *p | tests.cpp:39:2:39:2 | *p | -| tests.cpp:51:23:51:43 | call to XercesDOMParser | tests.cpp:53:2:53:2 | *p | -| tests.cpp:53:2:53:2 | *p | tests.cpp:53:2:53:2 | *p | -| tests.cpp:53:2:53:2 | *p | tests.cpp:55:2:55:2 | *p | -| tests.cpp:55:2:55:2 | *p | tests.cpp:55:2:55:2 | *p | -| tests.cpp:55:2:55:2 | *p | tests.cpp:56:2:56:2 | *p | -| tests.cpp:55:2:55:2 | *p | tests.cpp:57:2:57:2 | *p | -| tests.cpp:57:2:57:2 | *p | tests.cpp:57:2:57:2 | *p | -| tests.cpp:57:2:57:2 | *p | tests.cpp:59:2:59:2 | *p | -| tests.cpp:59:2:59:2 | *p | tests.cpp:59:2:59:2 | *p | -| tests.cpp:59:2:59:2 | *p | tests.cpp:60:2:60:2 | *p | -| tests.cpp:66:23:66:43 | call to XercesDOMParser | tests.cpp:69:2:69:2 | *p | -| tests.cpp:73:23:73:43 | call to XercesDOMParser | tests.cpp:80:2:80:2 | *p | -| tests.cpp:85:24:85:44 | call to XercesDOMParser | tests.cpp:88:3:88:3 | *q | -| tests.cpp:100:24:100:44 | call to XercesDOMParser | tests.cpp:104:3:104:3 | *q | -| tests.cpp:112:39:112:39 | *p | tests.cpp:113:2:113:2 | *p | -| tests.cpp:116:39:116:39 | *p | tests.cpp:117:2:117:2 | *p | -| tests.cpp:122:23:122:43 | call to XercesDOMParser | tests.cpp:126:18:126:18 | *q | -| tests.cpp:122:23:122:43 | call to XercesDOMParser | tests.cpp:128:18:128:18 | *q | -| tests.cpp:126:18:126:18 | *q | tests.cpp:112:39:112:39 | *p | -| tests.cpp:128:18:128:18 | *q | tests.cpp:116:39:116:39 | *p | +| tests2.cpp:20:17:20:31 | call to SAXParser | tests2.cpp:22:2:22:2 | *p | provenance | | +| tests2.cpp:33:17:33:31 | call to SAXParser | tests2.cpp:37:2:37:2 | *p | provenance | | +| tests2.cpp:49:12:49:12 | call to SAXParser | tests2.cpp:51:2:51:2 | *p | provenance | | +| tests3.cpp:23:21:23:53 | *call to createXMLReader | tests3.cpp:25:2:25:2 | *p | provenance | | +| tests3.cpp:35:16:35:20 | **p_3_3 | tests3.cpp:38:2:38:6 | *p_3_3 | provenance | | +| tests3.cpp:35:24:35:56 | *call to createXMLReader | tests3.cpp:35:16:35:20 | **p_3_3 | provenance | | +| tests3.cpp:48:16:48:20 | **p_3_5 | tests3.cpp:56:2:56:6 | *p_3_5 | provenance | | +| tests3.cpp:48:24:48:56 | *call to createXMLReader | tests3.cpp:48:16:48:20 | **p_3_5 | provenance | | +| tests3.cpp:60:21:60:53 | *call to createXMLReader | tests3.cpp:63:2:63:2 | *p | provenance | | +| tests3.cpp:67:21:67:53 | *call to createXMLReader | tests3.cpp:70:2:70:2 | *p | provenance | | +| tests5.cpp:27:25:27:38 | *call to createLSParser | tests5.cpp:29:2:29:2 | *p | provenance | | +| tests5.cpp:40:25:40:38 | *call to createLSParser | tests5.cpp:43:2:43:2 | *p | provenance | | +| tests5.cpp:55:25:55:38 | *call to createLSParser | tests5.cpp:59:2:59:2 | *p | provenance | | +| tests5.cpp:63:21:63:24 | **g_p2 | tests5.cpp:77:2:77:5 | *g_p2 | provenance | | +| tests5.cpp:70:17:70:30 | *call to createLSParser | tests5.cpp:63:21:63:24 | **g_p2 | provenance | | +| tests5.cpp:81:25:81:38 | *call to createLSParser | tests5.cpp:83:2:83:2 | *p | provenance | | +| tests5.cpp:81:25:81:38 | *call to createLSParser | tests5.cpp:83:2:83:2 | *p | provenance | | +| tests5.cpp:83:2:83:2 | *p | tests5.cpp:85:2:85:2 | *p | provenance | | +| tests5.cpp:85:2:85:2 | *p | tests5.cpp:86:2:86:2 | *p | provenance | | +| tests5.cpp:86:2:86:2 | *p | tests5.cpp:88:2:88:2 | *p | provenance | | +| tests5.cpp:88:2:88:2 | *p | tests5.cpp:89:2:89:2 | *p | provenance | | +| tests.cpp:15:23:15:43 | call to XercesDOMParser | tests.cpp:17:2:17:2 | *p | provenance | | +| tests.cpp:28:23:28:43 | call to XercesDOMParser | tests.cpp:31:2:31:2 | *p | provenance | | +| tests.cpp:35:23:35:43 | call to XercesDOMParser | tests.cpp:37:2:37:2 | *p | provenance | | +| tests.cpp:37:2:37:2 | *p | tests.cpp:37:2:37:2 | *p | provenance | | +| tests.cpp:37:2:37:2 | *p | tests.cpp:38:2:38:2 | *p | provenance | | +| tests.cpp:38:2:38:2 | *p | tests.cpp:38:2:38:2 | *p | provenance | | +| tests.cpp:38:2:38:2 | *p | tests.cpp:39:2:39:2 | *p | provenance | | +| tests.cpp:51:23:51:43 | call to XercesDOMParser | tests.cpp:53:2:53:2 | *p | provenance | | +| tests.cpp:53:2:53:2 | *p | tests.cpp:53:2:53:2 | *p | provenance | | +| tests.cpp:53:2:53:2 | *p | tests.cpp:55:2:55:2 | *p | provenance | | +| tests.cpp:55:2:55:2 | *p | tests.cpp:55:2:55:2 | *p | provenance | | +| tests.cpp:55:2:55:2 | *p | tests.cpp:56:2:56:2 | *p | provenance | | +| tests.cpp:55:2:55:2 | *p | tests.cpp:57:2:57:2 | *p | provenance | | +| tests.cpp:57:2:57:2 | *p | tests.cpp:57:2:57:2 | *p | provenance | | +| tests.cpp:57:2:57:2 | *p | tests.cpp:59:2:59:2 | *p | provenance | | +| tests.cpp:59:2:59:2 | *p | tests.cpp:59:2:59:2 | *p | provenance | | +| tests.cpp:59:2:59:2 | *p | tests.cpp:60:2:60:2 | *p | provenance | | +| tests.cpp:66:23:66:43 | call to XercesDOMParser | tests.cpp:69:2:69:2 | *p | provenance | | +| tests.cpp:73:23:73:43 | call to XercesDOMParser | tests.cpp:80:2:80:2 | *p | provenance | | +| tests.cpp:85:24:85:44 | call to XercesDOMParser | tests.cpp:88:3:88:3 | *q | provenance | | +| tests.cpp:100:24:100:44 | call to XercesDOMParser | tests.cpp:104:3:104:3 | *q | provenance | | +| tests.cpp:112:39:112:39 | *p | tests.cpp:113:2:113:2 | *p | provenance | | +| tests.cpp:116:39:116:39 | *p | tests.cpp:117:2:117:2 | *p | provenance | | +| tests.cpp:122:23:122:43 | call to XercesDOMParser | tests.cpp:126:18:126:18 | *q | provenance | | +| tests.cpp:122:23:122:43 | call to XercesDOMParser | tests.cpp:128:18:128:18 | *q | provenance | | +| tests.cpp:126:18:126:18 | *q | tests.cpp:112:39:112:39 | *p | provenance | | +| tests.cpp:128:18:128:18 | *q | tests.cpp:116:39:116:39 | *p | provenance | | nodes | tests2.cpp:20:17:20:31 | call to SAXParser | semmle.label | call to SAXParser | | tests2.cpp:22:2:22:2 | *p | semmle.label | *p | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-807/semmle/TaintedCondition/TaintedCondition.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-807/semmle/TaintedCondition/TaintedCondition.expected index f587e772b65..9b02e597ba2 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-807/semmle/TaintedCondition/TaintedCondition.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-807/semmle/TaintedCondition/TaintedCondition.expected @@ -1,5 +1,5 @@ edges -| test.cpp:20:29:20:47 | *call to getenv | test.cpp:24:10:24:35 | ! ... | +| test.cpp:20:29:20:47 | *call to getenv | test.cpp:24:10:24:35 | ! ... | provenance | | nodes | test.cpp:20:29:20:47 | *call to getenv | semmle.label | *call to getenv | | test.cpp:24:10:24:35 | ! ... | semmle.label | ! ... | From 0eaf117f370f88f7dc1cfcd5df6c6b334df08fb2 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Thu, 8 Feb 2024 12:59:11 +0100 Subject: [PATCH 118/378] Kotlin: Add empty provenance column to expected files. --- .../kotlin_java_static_fields/test.expected | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/java/ql/integration-tests/all-platforms/kotlin/kotlin_java_static_fields/test.expected b/java/ql/integration-tests/all-platforms/kotlin/kotlin_java_static_fields/test.expected index 9f16308bdfc..68f05e908f6 100644 --- a/java/ql/integration-tests/all-platforms/kotlin/kotlin_java_static_fields/test.expected +++ b/java/ql/integration-tests/all-platforms/kotlin/kotlin_java_static_fields/test.expected @@ -1,12 +1,12 @@ edges -| hasFields.kt:5:5:5:34 | constField : String | ReadsFields.java:5:10:5:29 | HasFields.constField | -| hasFields.kt:5:28:5:34 | "taint" : String | hasFields.kt:5:5:5:34 | constField : String | -| hasFields.kt:7:5:7:38 | lateinitField : String | ReadsFields.java:6:10:6:32 | HasFields.lateinitField | -| hasFields.kt:7:14:7:38 | : String | hasFields.kt:7:5:7:38 | lateinitField : String | -| hasFields.kt:7:14:7:38 | : String | hasFields.kt:7:14:7:38 | : String | -| hasFields.kt:9:5:9:50 | jvmFieldAnnotatedField : String | ReadsFields.java:7:10:7:41 | HasFields.jvmFieldAnnotatedField | -| hasFields.kt:9:44:9:50 | "taint" : String | hasFields.kt:9:5:9:50 | jvmFieldAnnotatedField : String | -| hasFields.kt:14:22:14:26 | "taint" : String | hasFields.kt:7:14:7:38 | : String | +| hasFields.kt:5:5:5:34 | constField : String | ReadsFields.java:5:10:5:29 | HasFields.constField | provenance | | +| hasFields.kt:5:28:5:34 | "taint" : String | hasFields.kt:5:5:5:34 | constField : String | provenance | | +| hasFields.kt:7:5:7:38 | lateinitField : String | ReadsFields.java:6:10:6:32 | HasFields.lateinitField | provenance | | +| hasFields.kt:7:14:7:38 | : String | hasFields.kt:7:5:7:38 | lateinitField : String | provenance | | +| hasFields.kt:7:14:7:38 | : String | hasFields.kt:7:14:7:38 | : String | provenance | | +| hasFields.kt:9:5:9:50 | jvmFieldAnnotatedField : String | ReadsFields.java:7:10:7:41 | HasFields.jvmFieldAnnotatedField | provenance | | +| hasFields.kt:9:44:9:50 | "taint" : String | hasFields.kt:9:5:9:50 | jvmFieldAnnotatedField : String | provenance | | +| hasFields.kt:14:22:14:26 | "taint" : String | hasFields.kt:7:14:7:38 | : String | provenance | | nodes | ReadsFields.java:5:10:5:29 | HasFields.constField | semmle.label | HasFields.constField | | ReadsFields.java:6:10:6:32 | HasFields.lateinitField | semmle.label | HasFields.lateinitField | From 817aa7655fee36ed93aab75256518d3f9c78b904 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Thu, 8 Feb 2024 13:02:20 +0100 Subject: [PATCH 119/378] Python: Remove redundant IncludePostUpdateFlow and PhaseDependentFlow application. --- .../semmle/python/dataflow/new/internal/DataFlowPrivate.qll | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll index c9fb086ea49..55252e22c32 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll @@ -474,7 +474,7 @@ import StepRelationTransformations predicate simpleLocalFlowStep(Node nodeFrom, Node nodeTo) { simpleLocalFlowStepForTypetracking(nodeFrom, nodeTo) or - summaryFlowSteps(nodeFrom, nodeTo) + summaryLocalStep(nodeFrom, nodeTo) or variableCaptureLocalFlowStep(nodeFrom, nodeTo) } @@ -495,10 +495,6 @@ private predicate summaryLocalStep(Node nodeFrom, Node nodeTo) { nodeTo.(FlowSummaryNode).getSummaryNode(), true) } -predicate summaryFlowSteps(Node nodeFrom, Node nodeTo) { - IncludePostUpdateFlow::step/2>::step(nodeFrom, nodeTo) -} - predicate variableCaptureLocalFlowStep(Node nodeFrom, Node nodeTo) { // Blindly applying use-use flow can result in a node that steps to itself, for // example in while-loops. To uphold dataflow consistency checks, we don't want From 088a0a54baab1e2af295c74ca790404729b14605 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Thu, 8 Feb 2024 15:01:19 +0100 Subject: [PATCH 120/378] Python: Add empty provenance column to expected files. --- .../dataflow/summaries/summaries.expected | 80 +++--- .../Security/CWE-022-TarSlip/TarSlip.expected | 170 ++++++------ .../Security/CWE-022-TarSlip/ZipSlip.expected | 30 +-- .../UnsafeUnpack.expected | 164 ++++++------ .../TemplateInjection.expected | 84 +++--- .../CWE-074-paramiko/paramiko.expected | 8 +- .../Security/CWE-079/EmailXss.expected | 72 +++--- .../XsltInjection.expected | 102 ++++---- .../Security/CWE-113/HeaderInjection.expected | 34 +-- .../Security/CWE-1236/CsvInjection.expected | 24 +- .../CWE-176/UnicodeBypassValidation.expected | 26 +- .../PossibleTimingAttackAgainstHash.expected | 6 +- ...eTimingAttackAgainstSensitiveInfo.expected | 2 +- .../ConstantSecretKey.expected | 30 +-- ...sageOfClientSideEncryptionVersion.expected | 82 +++--- ...ientSuppliedIpUsedInSecurityCheck.expected | 12 +- .../CWE-522/LdapInsecureAuth.expected | 20 +- .../Security/CWE-614/CookieInjection.expected | 24 +- .../django-orm/ReflectedXss.expected | 98 +++---- .../modeling-example/NaiveModel.expected | 30 +-- .../modeling-example/ProperModel.expected | 78 +++--- ...odificationOfParameterWithDefault.expected | 82 +++--- .../UntrustedDataToExternalAPI.expected | 64 ++--- .../PathInjection.expected | 244 +++++++++--------- .../Security/CWE-022-TarSlip/TarSlip.expected | 44 ++-- .../CommandInjection.expected | 28 +- .../CommandInjection.expected | 92 +++---- .../UnsafeShellCommandConstruction.expected | 22 +- .../ReflectedXss.expected | 24 +- .../SqlInjection.expected | 32 +-- .../LdapInjection.expected | 108 ++++---- .../CodeInjection.expected | 28 +- .../LogInjection.expected | 42 +-- .../StackTraceExposure.expected | 18 +- .../PamAuthorization.expected | 18 +- .../CleartextLogging.expected | 20 +- .../CleartextStorage.expected | 8 +- .../CleartextStorage.expected | 16 +- .../WeakSensitiveDataHashing.expected | 56 ++-- .../UnsafeDeserialization.expected | 20 +- .../CWE-601-UrlRedirect/UrlRedirect.expected | 136 +++++----- .../Security/CWE-611-Xxe/Xxe.expected | 14 +- .../XpathInjection.expected | 56 ++-- .../PolynomialReDoS.expected | 24 +- .../RegexInjection.expected | 20 +- .../Security/CWE-776-XmlBomb/XmlBomb.expected | 8 +- .../HardcodedCredentials.expected | 8 +- .../FullServerSideRequestForgery.expected | 104 ++++---- .../PartialServerSideRequestForgery.expected | 204 +++++++-------- .../NoSqlInjection.expected | 234 ++++++++--------- 50 files changed, 1475 insertions(+), 1475 deletions(-) diff --git a/python/ql/test/experimental/dataflow/summaries/summaries.expected b/python/ql/test/experimental/dataflow/summaries/summaries.expected index d7b64ceaf1f..a1f354a654f 100644 --- a/python/ql/test/experimental/dataflow/summaries/summaries.expected +++ b/python/ql/test/experimental/dataflow/summaries/summaries.expected @@ -1,44 +1,44 @@ edges -| summaries.py:32:1:32:7 | ControlFlowNode for tainted | summaries.py:33:6:33:12 | ControlFlowNode for tainted | -| summaries.py:32:11:32:26 | ControlFlowNode for identity() | summaries.py:32:1:32:7 | ControlFlowNode for tainted | -| summaries.py:32:20:32:25 | ControlFlowNode for SOURCE | summaries.py:32:11:32:26 | ControlFlowNode for identity() | -| summaries.py:36:1:36:14 | ControlFlowNode for tainted_lambda | summaries.py:37:6:37:19 | ControlFlowNode for tainted_lambda | -| summaries.py:36:18:36:54 | ControlFlowNode for apply_lambda() | summaries.py:36:1:36:14 | ControlFlowNode for tainted_lambda | -| summaries.py:36:48:36:53 | ControlFlowNode for SOURCE | summaries.py:36:18:36:54 | ControlFlowNode for apply_lambda() | -| summaries.py:44:1:44:12 | ControlFlowNode for tainted_list | summaries.py:45:6:45:20 | ControlFlowNode for Subscript | -| summaries.py:44:1:44:12 | ControlFlowNode for tainted_list [List element] | summaries.py:45:6:45:17 | ControlFlowNode for tainted_list [List element] | -| summaries.py:44:16:44:33 | ControlFlowNode for reversed() | summaries.py:44:1:44:12 | ControlFlowNode for tainted_list | -| summaries.py:44:16:44:33 | ControlFlowNode for reversed() [List element] | summaries.py:44:1:44:12 | ControlFlowNode for tainted_list [List element] | -| summaries.py:44:25:44:32 | ControlFlowNode for List | summaries.py:44:16:44:33 | ControlFlowNode for reversed() | -| summaries.py:44:25:44:32 | ControlFlowNode for List [List element] | summaries.py:44:16:44:33 | ControlFlowNode for reversed() [List element] | -| summaries.py:44:26:44:31 | ControlFlowNode for SOURCE | summaries.py:44:25:44:32 | ControlFlowNode for List | -| summaries.py:44:26:44:31 | ControlFlowNode for SOURCE | summaries.py:44:25:44:32 | ControlFlowNode for List [List element] | -| summaries.py:45:6:45:17 | ControlFlowNode for tainted_list [List element] | summaries.py:45:6:45:20 | ControlFlowNode for Subscript | -| summaries.py:51:1:51:14 | ControlFlowNode for tainted_mapped [List element] | summaries.py:52:6:52:19 | ControlFlowNode for tainted_mapped [List element] | -| summaries.py:51:18:51:46 | ControlFlowNode for list_map() [List element] | summaries.py:51:1:51:14 | ControlFlowNode for tainted_mapped [List element] | -| summaries.py:51:38:51:45 | ControlFlowNode for List [List element] | summaries.py:51:18:51:46 | ControlFlowNode for list_map() [List element] | -| summaries.py:51:39:51:44 | ControlFlowNode for SOURCE | summaries.py:51:38:51:45 | ControlFlowNode for List [List element] | -| summaries.py:52:6:52:19 | ControlFlowNode for tainted_mapped [List element] | summaries.py:52:6:52:22 | ControlFlowNode for Subscript | -| summaries.py:57:1:57:23 | ControlFlowNode for tainted_mapped_explicit [List element] | summaries.py:58:6:58:28 | ControlFlowNode for tainted_mapped_explicit [List element] | -| summaries.py:57:27:57:63 | ControlFlowNode for list_map() [List element] | summaries.py:57:1:57:23 | ControlFlowNode for tainted_mapped_explicit [List element] | -| summaries.py:57:55:57:62 | ControlFlowNode for List [List element] | summaries.py:57:27:57:63 | ControlFlowNode for list_map() [List element] | -| summaries.py:57:56:57:61 | ControlFlowNode for SOURCE | summaries.py:57:55:57:62 | ControlFlowNode for List [List element] | -| summaries.py:58:6:58:28 | ControlFlowNode for tainted_mapped_explicit [List element] | summaries.py:58:6:58:31 | ControlFlowNode for Subscript | -| summaries.py:60:1:60:22 | ControlFlowNode for tainted_mapped_summary [List element] | summaries.py:61:6:61:27 | ControlFlowNode for tainted_mapped_summary [List element] | -| summaries.py:60:26:60:53 | ControlFlowNode for list_map() [List element] | summaries.py:60:1:60:22 | ControlFlowNode for tainted_mapped_summary [List element] | -| summaries.py:60:45:60:52 | ControlFlowNode for List [List element] | summaries.py:60:26:60:53 | ControlFlowNode for list_map() [List element] | -| summaries.py:60:46:60:51 | ControlFlowNode for SOURCE | summaries.py:60:45:60:52 | ControlFlowNode for List [List element] | -| summaries.py:61:6:61:27 | ControlFlowNode for tainted_mapped_summary [List element] | summaries.py:61:6:61:30 | ControlFlowNode for Subscript | -| summaries.py:63:1:63:12 | ControlFlowNode for tainted_list [List element] | summaries.py:64:6:64:17 | ControlFlowNode for tainted_list [List element] | -| summaries.py:63:16:63:41 | ControlFlowNode for append_to_list() [List element] | summaries.py:63:1:63:12 | ControlFlowNode for tainted_list [List element] | -| summaries.py:63:35:63:40 | ControlFlowNode for SOURCE | summaries.py:63:16:63:41 | ControlFlowNode for append_to_list() [List element] | -| summaries.py:64:6:64:17 | ControlFlowNode for tainted_list [List element] | summaries.py:64:6:64:20 | ControlFlowNode for Subscript | -| summaries.py:67:1:67:18 | ControlFlowNode for tainted_resultlist | summaries.py:68:6:68:26 | ControlFlowNode for Subscript | -| summaries.py:67:1:67:18 | ControlFlowNode for tainted_resultlist [List element] | summaries.py:68:6:68:23 | ControlFlowNode for tainted_resultlist [List element] | -| summaries.py:67:22:67:39 | ControlFlowNode for json_loads() [List element] | summaries.py:67:1:67:18 | ControlFlowNode for tainted_resultlist [List element] | -| summaries.py:67:33:67:38 | ControlFlowNode for SOURCE | summaries.py:67:1:67:18 | ControlFlowNode for tainted_resultlist | -| summaries.py:67:33:67:38 | ControlFlowNode for SOURCE | summaries.py:67:22:67:39 | ControlFlowNode for json_loads() [List element] | -| summaries.py:68:6:68:23 | ControlFlowNode for tainted_resultlist [List element] | summaries.py:68:6:68:26 | ControlFlowNode for Subscript | +| summaries.py:32:1:32:7 | ControlFlowNode for tainted | summaries.py:33:6:33:12 | ControlFlowNode for tainted | provenance | | +| summaries.py:32:11:32:26 | ControlFlowNode for identity() | summaries.py:32:1:32:7 | ControlFlowNode for tainted | provenance | | +| summaries.py:32:20:32:25 | ControlFlowNode for SOURCE | summaries.py:32:11:32:26 | ControlFlowNode for identity() | provenance | | +| summaries.py:36:1:36:14 | ControlFlowNode for tainted_lambda | summaries.py:37:6:37:19 | ControlFlowNode for tainted_lambda | provenance | | +| summaries.py:36:18:36:54 | ControlFlowNode for apply_lambda() | summaries.py:36:1:36:14 | ControlFlowNode for tainted_lambda | provenance | | +| summaries.py:36:48:36:53 | ControlFlowNode for SOURCE | summaries.py:36:18:36:54 | ControlFlowNode for apply_lambda() | provenance | | +| summaries.py:44:1:44:12 | ControlFlowNode for tainted_list | summaries.py:45:6:45:20 | ControlFlowNode for Subscript | provenance | | +| summaries.py:44:1:44:12 | ControlFlowNode for tainted_list [List element] | summaries.py:45:6:45:17 | ControlFlowNode for tainted_list [List element] | provenance | | +| summaries.py:44:16:44:33 | ControlFlowNode for reversed() | summaries.py:44:1:44:12 | ControlFlowNode for tainted_list | provenance | | +| summaries.py:44:16:44:33 | ControlFlowNode for reversed() [List element] | summaries.py:44:1:44:12 | ControlFlowNode for tainted_list [List element] | provenance | | +| summaries.py:44:25:44:32 | ControlFlowNode for List | summaries.py:44:16:44:33 | ControlFlowNode for reversed() | provenance | | +| summaries.py:44:25:44:32 | ControlFlowNode for List [List element] | summaries.py:44:16:44:33 | ControlFlowNode for reversed() [List element] | provenance | | +| summaries.py:44:26:44:31 | ControlFlowNode for SOURCE | summaries.py:44:25:44:32 | ControlFlowNode for List | provenance | | +| summaries.py:44:26:44:31 | ControlFlowNode for SOURCE | summaries.py:44:25:44:32 | ControlFlowNode for List [List element] | provenance | | +| summaries.py:45:6:45:17 | ControlFlowNode for tainted_list [List element] | summaries.py:45:6:45:20 | ControlFlowNode for Subscript | provenance | | +| summaries.py:51:1:51:14 | ControlFlowNode for tainted_mapped [List element] | summaries.py:52:6:52:19 | ControlFlowNode for tainted_mapped [List element] | provenance | | +| summaries.py:51:18:51:46 | ControlFlowNode for list_map() [List element] | summaries.py:51:1:51:14 | ControlFlowNode for tainted_mapped [List element] | provenance | | +| summaries.py:51:38:51:45 | ControlFlowNode for List [List element] | summaries.py:51:18:51:46 | ControlFlowNode for list_map() [List element] | provenance | | +| summaries.py:51:39:51:44 | ControlFlowNode for SOURCE | summaries.py:51:38:51:45 | ControlFlowNode for List [List element] | provenance | | +| summaries.py:52:6:52:19 | ControlFlowNode for tainted_mapped [List element] | summaries.py:52:6:52:22 | ControlFlowNode for Subscript | provenance | | +| summaries.py:57:1:57:23 | ControlFlowNode for tainted_mapped_explicit [List element] | summaries.py:58:6:58:28 | ControlFlowNode for tainted_mapped_explicit [List element] | provenance | | +| summaries.py:57:27:57:63 | ControlFlowNode for list_map() [List element] | summaries.py:57:1:57:23 | ControlFlowNode for tainted_mapped_explicit [List element] | provenance | | +| summaries.py:57:55:57:62 | ControlFlowNode for List [List element] | summaries.py:57:27:57:63 | ControlFlowNode for list_map() [List element] | provenance | | +| summaries.py:57:56:57:61 | ControlFlowNode for SOURCE | summaries.py:57:55:57:62 | ControlFlowNode for List [List element] | provenance | | +| summaries.py:58:6:58:28 | ControlFlowNode for tainted_mapped_explicit [List element] | summaries.py:58:6:58:31 | ControlFlowNode for Subscript | provenance | | +| summaries.py:60:1:60:22 | ControlFlowNode for tainted_mapped_summary [List element] | summaries.py:61:6:61:27 | ControlFlowNode for tainted_mapped_summary [List element] | provenance | | +| summaries.py:60:26:60:53 | ControlFlowNode for list_map() [List element] | summaries.py:60:1:60:22 | ControlFlowNode for tainted_mapped_summary [List element] | provenance | | +| summaries.py:60:45:60:52 | ControlFlowNode for List [List element] | summaries.py:60:26:60:53 | ControlFlowNode for list_map() [List element] | provenance | | +| summaries.py:60:46:60:51 | ControlFlowNode for SOURCE | summaries.py:60:45:60:52 | ControlFlowNode for List [List element] | provenance | | +| summaries.py:61:6:61:27 | ControlFlowNode for tainted_mapped_summary [List element] | summaries.py:61:6:61:30 | ControlFlowNode for Subscript | provenance | | +| summaries.py:63:1:63:12 | ControlFlowNode for tainted_list [List element] | summaries.py:64:6:64:17 | ControlFlowNode for tainted_list [List element] | provenance | | +| summaries.py:63:16:63:41 | ControlFlowNode for append_to_list() [List element] | summaries.py:63:1:63:12 | ControlFlowNode for tainted_list [List element] | provenance | | +| summaries.py:63:35:63:40 | ControlFlowNode for SOURCE | summaries.py:63:16:63:41 | ControlFlowNode for append_to_list() [List element] | provenance | | +| summaries.py:64:6:64:17 | ControlFlowNode for tainted_list [List element] | summaries.py:64:6:64:20 | ControlFlowNode for Subscript | provenance | | +| summaries.py:67:1:67:18 | ControlFlowNode for tainted_resultlist | summaries.py:68:6:68:26 | ControlFlowNode for Subscript | provenance | | +| summaries.py:67:1:67:18 | ControlFlowNode for tainted_resultlist [List element] | summaries.py:68:6:68:23 | ControlFlowNode for tainted_resultlist [List element] | provenance | | +| summaries.py:67:22:67:39 | ControlFlowNode for json_loads() [List element] | summaries.py:67:1:67:18 | ControlFlowNode for tainted_resultlist [List element] | provenance | | +| summaries.py:67:33:67:38 | ControlFlowNode for SOURCE | summaries.py:67:1:67:18 | ControlFlowNode for tainted_resultlist | provenance | | +| summaries.py:67:33:67:38 | ControlFlowNode for SOURCE | summaries.py:67:22:67:39 | ControlFlowNode for json_loads() [List element] | provenance | | +| summaries.py:68:6:68:23 | ControlFlowNode for tainted_resultlist [List element] | summaries.py:68:6:68:26 | ControlFlowNode for Subscript | provenance | | nodes | summaries.py:32:1:32:7 | ControlFlowNode for tainted | semmle.label | ControlFlowNode for tainted | | summaries.py:32:11:32:26 | ControlFlowNode for identity() | semmle.label | ControlFlowNode for identity() | diff --git a/python/ql/test/experimental/query-tests/Security/CWE-022-TarSlip/TarSlip.expected b/python/ql/test/experimental/query-tests/Security/CWE-022-TarSlip/TarSlip.expected index d785d0e5460..b96f44e358b 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-022-TarSlip/TarSlip.expected +++ b/python/ql/test/experimental/query-tests/Security/CWE-022-TarSlip/TarSlip.expected @@ -1,89 +1,89 @@ edges -| TarSlipImprov.py:15:1:15:3 | ControlFlowNode for tar | TarSlipImprov.py:17:5:17:10 | ControlFlowNode for member | -| TarSlipImprov.py:15:7:15:39 | ControlFlowNode for Attribute() | TarSlipImprov.py:15:1:15:3 | ControlFlowNode for tar | -| TarSlipImprov.py:17:5:17:10 | ControlFlowNode for member | TarSlipImprov.py:20:19:20:24 | ControlFlowNode for member | -| TarSlipImprov.py:20:5:20:10 | [post] ControlFlowNode for result | TarSlipImprov.py:22:35:22:40 | ControlFlowNode for result | -| TarSlipImprov.py:20:19:20:24 | ControlFlowNode for member | TarSlipImprov.py:20:5:20:10 | [post] ControlFlowNode for result | -| TarSlipImprov.py:26:21:26:27 | ControlFlowNode for tarfile | TarSlipImprov.py:28:9:28:14 | ControlFlowNode for member | -| TarSlipImprov.py:28:9:28:14 | ControlFlowNode for member | TarSlipImprov.py:35:23:35:28 | ControlFlowNode for member | -| TarSlipImprov.py:35:9:35:14 | [post] ControlFlowNode for result | TarSlipImprov.py:36:12:36:17 | ControlFlowNode for result | -| TarSlipImprov.py:35:23:35:28 | ControlFlowNode for member | TarSlipImprov.py:35:9:35:14 | [post] ControlFlowNode for result | -| TarSlipImprov.py:38:1:38:3 | ControlFlowNode for tar | TarSlipImprov.py:39:65:39:67 | ControlFlowNode for tar | -| TarSlipImprov.py:38:7:38:39 | ControlFlowNode for Attribute() | TarSlipImprov.py:38:1:38:3 | ControlFlowNode for tar | -| TarSlipImprov.py:39:65:39:67 | ControlFlowNode for tar | TarSlipImprov.py:26:21:26:27 | ControlFlowNode for tarfile | -| TarSlipImprov.py:39:65:39:67 | ControlFlowNode for tar | TarSlipImprov.py:39:49:39:68 | ControlFlowNode for members_filter1() | -| TarSlipImprov.py:43:6:43:38 | ControlFlowNode for Attribute() | TarSlipImprov.py:43:43:43:45 | ControlFlowNode for tar | -| TarSlipImprov.py:43:43:43:45 | ControlFlowNode for tar | TarSlipImprov.py:44:9:44:13 | ControlFlowNode for entry | -| TarSlipImprov.py:44:9:44:13 | ControlFlowNode for entry | TarSlipImprov.py:47:21:47:25 | ControlFlowNode for entry | -| TarSlipImprov.py:54:6:54:38 | ControlFlowNode for Attribute() | TarSlipImprov.py:54:43:54:45 | ControlFlowNode for tar | -| TarSlipImprov.py:54:43:54:45 | ControlFlowNode for tar | TarSlipImprov.py:56:9:56:13 | ControlFlowNode for entry | -| TarSlipImprov.py:56:9:56:13 | ControlFlowNode for entry | TarSlipImprov.py:58:21:58:25 | ControlFlowNode for entry | -| TarSlipImprov.py:88:6:88:43 | ControlFlowNode for Attribute() | TarSlipImprov.py:88:48:88:50 | ControlFlowNode for tar | -| TarSlipImprov.py:88:48:88:50 | ControlFlowNode for tar | TarSlipImprov.py:91:5:91:7 | ControlFlowNode for tar | -| TarSlipImprov.py:111:1:111:3 | ControlFlowNode for tar | TarSlipImprov.py:115:9:115:11 | ControlFlowNode for tar | -| TarSlipImprov.py:111:7:111:39 | ControlFlowNode for Attribute() | TarSlipImprov.py:111:1:111:3 | ControlFlowNode for tar | -| TarSlipImprov.py:123:6:123:29 | ControlFlowNode for Attribute() | TarSlipImprov.py:123:34:123:36 | ControlFlowNode for tar | -| TarSlipImprov.py:123:34:123:36 | ControlFlowNode for tar | TarSlipImprov.py:124:9:124:13 | ControlFlowNode for entry | -| TarSlipImprov.py:124:9:124:13 | ControlFlowNode for entry | TarSlipImprov.py:125:36:125:40 | ControlFlowNode for entry | -| TarSlipImprov.py:129:6:129:26 | ControlFlowNode for Attribute() | TarSlipImprov.py:129:31:129:33 | ControlFlowNode for tar | -| TarSlipImprov.py:129:31:129:33 | ControlFlowNode for tar | TarSlipImprov.py:130:5:130:7 | ControlFlowNode for tar | -| TarSlipImprov.py:133:1:133:3 | ControlFlowNode for tar | TarSlipImprov.py:134:1:134:3 | ControlFlowNode for tar | -| TarSlipImprov.py:133:7:133:39 | ControlFlowNode for Attribute() | TarSlipImprov.py:133:1:133:3 | ControlFlowNode for tar | -| TarSlipImprov.py:141:6:141:29 | ControlFlowNode for Attribute() | TarSlipImprov.py:141:34:141:36 | ControlFlowNode for tar | -| TarSlipImprov.py:141:34:141:36 | ControlFlowNode for tar | TarSlipImprov.py:142:9:142:13 | ControlFlowNode for entry | -| TarSlipImprov.py:142:9:142:13 | ControlFlowNode for entry | TarSlipImprov.py:143:36:143:40 | ControlFlowNode for entry | -| TarSlipImprov.py:151:14:151:50 | ControlFlowNode for closing() | TarSlipImprov.py:151:55:151:56 | ControlFlowNode for tf | -| TarSlipImprov.py:151:22:151:49 | ControlFlowNode for Attribute() | TarSlipImprov.py:151:14:151:50 | ControlFlowNode for closing() | -| TarSlipImprov.py:151:55:151:56 | ControlFlowNode for tf | TarSlipImprov.py:152:19:152:20 | ControlFlowNode for tf | -| TarSlipImprov.py:152:19:152:20 | ControlFlowNode for tf | TarSlipImprov.py:157:18:157:40 | ControlFlowNode for py2_tarxz() | -| TarSlipImprov.py:157:9:157:14 | ControlFlowNode for tar_cm | TarSlipImprov.py:162:20:162:23 | ControlFlowNode for tarc | -| TarSlipImprov.py:157:18:157:40 | ControlFlowNode for py2_tarxz() | TarSlipImprov.py:157:9:157:14 | ControlFlowNode for tar_cm | -| TarSlipImprov.py:159:9:159:14 | ControlFlowNode for tar_cm | TarSlipImprov.py:162:20:162:23 | ControlFlowNode for tarc | -| TarSlipImprov.py:159:18:159:52 | ControlFlowNode for closing() | TarSlipImprov.py:159:9:159:14 | ControlFlowNode for tar_cm | -| TarSlipImprov.py:159:26:159:51 | ControlFlowNode for Attribute() | TarSlipImprov.py:159:18:159:52 | ControlFlowNode for closing() | -| TarSlipImprov.py:162:20:162:23 | ControlFlowNode for tarc | TarSlipImprov.py:169:9:169:12 | ControlFlowNode for tarc | -| TarSlipImprov.py:176:6:176:31 | ControlFlowNode for Attribute() | TarSlipImprov.py:176:36:176:38 | ControlFlowNode for tar | -| TarSlipImprov.py:176:36:176:38 | ControlFlowNode for tar | TarSlipImprov.py:177:9:177:13 | ControlFlowNode for entry | -| TarSlipImprov.py:177:9:177:13 | ControlFlowNode for entry | TarSlipImprov.py:178:36:178:40 | ControlFlowNode for entry | -| TarSlipImprov.py:182:6:182:31 | ControlFlowNode for Attribute() | TarSlipImprov.py:182:36:182:38 | ControlFlowNode for tar | -| TarSlipImprov.py:182:36:182:38 | ControlFlowNode for tar | TarSlipImprov.py:183:9:183:13 | ControlFlowNode for entry | -| TarSlipImprov.py:183:9:183:13 | ControlFlowNode for entry | TarSlipImprov.py:184:21:184:25 | ControlFlowNode for entry | -| TarSlipImprov.py:188:1:188:3 | ControlFlowNode for tar | TarSlipImprov.py:189:1:189:3 | ControlFlowNode for tar | -| TarSlipImprov.py:188:7:188:27 | ControlFlowNode for Attribute() | TarSlipImprov.py:188:1:188:3 | ControlFlowNode for tar | -| TarSlipImprov.py:193:6:193:31 | ControlFlowNode for Attribute() | TarSlipImprov.py:193:36:193:38 | ControlFlowNode for tar | -| TarSlipImprov.py:193:36:193:38 | ControlFlowNode for tar | TarSlipImprov.py:194:49:194:51 | ControlFlowNode for tar | -| TarSlipImprov.py:210:6:210:43 | ControlFlowNode for Attribute() | TarSlipImprov.py:210:48:210:50 | ControlFlowNode for tar | -| TarSlipImprov.py:210:48:210:50 | ControlFlowNode for tar | TarSlipImprov.py:211:5:211:7 | ControlFlowNode for tar | -| TarSlipImprov.py:231:6:231:38 | ControlFlowNode for Attribute() | TarSlipImprov.py:231:43:231:52 | ControlFlowNode for corpus_tar | -| TarSlipImprov.py:231:43:231:52 | ControlFlowNode for corpus_tar | TarSlipImprov.py:233:9:233:9 | ControlFlowNode for f | -| TarSlipImprov.py:233:9:233:9 | ControlFlowNode for f | TarSlipImprov.py:235:28:235:28 | ControlFlowNode for f | -| TarSlipImprov.py:235:13:235:19 | [post] ControlFlowNode for members | TarSlipImprov.py:236:44:236:50 | ControlFlowNode for members | -| TarSlipImprov.py:235:28:235:28 | ControlFlowNode for f | TarSlipImprov.py:235:13:235:19 | [post] ControlFlowNode for members | -| TarSlipImprov.py:258:6:258:26 | ControlFlowNode for Attribute() | TarSlipImprov.py:258:31:258:33 | ControlFlowNode for tar | -| TarSlipImprov.py:258:31:258:33 | ControlFlowNode for tar | TarSlipImprov.py:259:9:259:13 | ControlFlowNode for entry | -| TarSlipImprov.py:259:9:259:13 | ControlFlowNode for entry | TarSlipImprov.py:261:25:261:29 | ControlFlowNode for entry | -| TarSlipImprov.py:264:6:264:38 | ControlFlowNode for Attribute() | TarSlipImprov.py:264:43:264:45 | ControlFlowNode for tar | -| TarSlipImprov.py:264:43:264:45 | ControlFlowNode for tar | TarSlipImprov.py:265:9:265:13 | ControlFlowNode for entry | -| TarSlipImprov.py:265:9:265:13 | ControlFlowNode for entry | TarSlipImprov.py:268:21:268:25 | ControlFlowNode for entry | -| TarSlipImprov.py:271:6:271:39 | ControlFlowNode for Attribute() | TarSlipImprov.py:271:44:271:46 | ControlFlowNode for tar | -| TarSlipImprov.py:271:44:271:46 | ControlFlowNode for tar | TarSlipImprov.py:272:9:272:13 | ControlFlowNode for entry | -| TarSlipImprov.py:272:9:272:13 | ControlFlowNode for entry | TarSlipImprov.py:274:25:274:29 | ControlFlowNode for entry | -| TarSlipImprov.py:276:6:276:38 | ControlFlowNode for Attribute() | TarSlipImprov.py:276:43:276:45 | ControlFlowNode for tar | -| TarSlipImprov.py:276:43:276:45 | ControlFlowNode for tar | TarSlipImprov.py:277:9:277:13 | ControlFlowNode for entry | -| TarSlipImprov.py:277:9:277:13 | ControlFlowNode for entry | TarSlipImprov.py:280:21:280:25 | ControlFlowNode for entry | -| TarSlipImprov.py:283:6:283:51 | ControlFlowNode for Attribute() | TarSlipImprov.py:283:56:283:58 | ControlFlowNode for tar | -| TarSlipImprov.py:283:56:283:58 | ControlFlowNode for tar | TarSlipImprov.py:284:5:284:7 | ControlFlowNode for tar | -| TarSlipImprov.py:287:1:287:3 | ControlFlowNode for tar | TarSlipImprov.py:288:49:288:51 | ControlFlowNode for tar | -| TarSlipImprov.py:287:7:287:28 | ControlFlowNode for Attribute() | TarSlipImprov.py:287:1:287:3 | ControlFlowNode for tar | -| TarSlipImprov.py:292:1:292:3 | ControlFlowNode for tar | TarSlipImprov.py:293:1:293:3 | ControlFlowNode for tar | -| TarSlipImprov.py:292:7:292:39 | ControlFlowNode for Attribute() | TarSlipImprov.py:292:1:292:3 | ControlFlowNode for tar | -| TarSlipImprov.py:300:6:300:51 | ControlFlowNode for Attribute() | TarSlipImprov.py:300:56:300:58 | ControlFlowNode for tar | -| TarSlipImprov.py:300:56:300:58 | ControlFlowNode for tar | TarSlipImprov.py:301:49:301:51 | ControlFlowNode for tar | -| TarSlipImprov.py:304:1:304:3 | ControlFlowNode for tar | TarSlipImprov.py:306:5:306:10 | ControlFlowNode for member | -| TarSlipImprov.py:304:7:304:39 | ControlFlowNode for Attribute() | TarSlipImprov.py:304:1:304:3 | ControlFlowNode for tar | -| TarSlipImprov.py:306:5:306:10 | ControlFlowNode for member | TarSlipImprov.py:309:19:309:24 | ControlFlowNode for member | -| TarSlipImprov.py:309:5:309:10 | [post] ControlFlowNode for result | TarSlipImprov.py:310:49:310:54 | ControlFlowNode for result | -| TarSlipImprov.py:309:19:309:24 | ControlFlowNode for member | TarSlipImprov.py:309:5:309:10 | [post] ControlFlowNode for result | +| TarSlipImprov.py:15:1:15:3 | ControlFlowNode for tar | TarSlipImprov.py:17:5:17:10 | ControlFlowNode for member | provenance | | +| TarSlipImprov.py:15:7:15:39 | ControlFlowNode for Attribute() | TarSlipImprov.py:15:1:15:3 | ControlFlowNode for tar | provenance | | +| TarSlipImprov.py:17:5:17:10 | ControlFlowNode for member | TarSlipImprov.py:20:19:20:24 | ControlFlowNode for member | provenance | | +| TarSlipImprov.py:20:5:20:10 | [post] ControlFlowNode for result | TarSlipImprov.py:22:35:22:40 | ControlFlowNode for result | provenance | | +| TarSlipImprov.py:20:19:20:24 | ControlFlowNode for member | TarSlipImprov.py:20:5:20:10 | [post] ControlFlowNode for result | provenance | | +| TarSlipImprov.py:26:21:26:27 | ControlFlowNode for tarfile | TarSlipImprov.py:28:9:28:14 | ControlFlowNode for member | provenance | | +| TarSlipImprov.py:28:9:28:14 | ControlFlowNode for member | TarSlipImprov.py:35:23:35:28 | ControlFlowNode for member | provenance | | +| TarSlipImprov.py:35:9:35:14 | [post] ControlFlowNode for result | TarSlipImprov.py:36:12:36:17 | ControlFlowNode for result | provenance | | +| TarSlipImprov.py:35:23:35:28 | ControlFlowNode for member | TarSlipImprov.py:35:9:35:14 | [post] ControlFlowNode for result | provenance | | +| TarSlipImprov.py:38:1:38:3 | ControlFlowNode for tar | TarSlipImprov.py:39:65:39:67 | ControlFlowNode for tar | provenance | | +| TarSlipImprov.py:38:7:38:39 | ControlFlowNode for Attribute() | TarSlipImprov.py:38:1:38:3 | ControlFlowNode for tar | provenance | | +| TarSlipImprov.py:39:65:39:67 | ControlFlowNode for tar | TarSlipImprov.py:26:21:26:27 | ControlFlowNode for tarfile | provenance | | +| TarSlipImprov.py:39:65:39:67 | ControlFlowNode for tar | TarSlipImprov.py:39:49:39:68 | ControlFlowNode for members_filter1() | provenance | | +| TarSlipImprov.py:43:6:43:38 | ControlFlowNode for Attribute() | TarSlipImprov.py:43:43:43:45 | ControlFlowNode for tar | provenance | | +| TarSlipImprov.py:43:43:43:45 | ControlFlowNode for tar | TarSlipImprov.py:44:9:44:13 | ControlFlowNode for entry | provenance | | +| TarSlipImprov.py:44:9:44:13 | ControlFlowNode for entry | TarSlipImprov.py:47:21:47:25 | ControlFlowNode for entry | provenance | | +| TarSlipImprov.py:54:6:54:38 | ControlFlowNode for Attribute() | TarSlipImprov.py:54:43:54:45 | ControlFlowNode for tar | provenance | | +| TarSlipImprov.py:54:43:54:45 | ControlFlowNode for tar | TarSlipImprov.py:56:9:56:13 | ControlFlowNode for entry | provenance | | +| TarSlipImprov.py:56:9:56:13 | ControlFlowNode for entry | TarSlipImprov.py:58:21:58:25 | ControlFlowNode for entry | provenance | | +| TarSlipImprov.py:88:6:88:43 | ControlFlowNode for Attribute() | TarSlipImprov.py:88:48:88:50 | ControlFlowNode for tar | provenance | | +| TarSlipImprov.py:88:48:88:50 | ControlFlowNode for tar | TarSlipImprov.py:91:5:91:7 | ControlFlowNode for tar | provenance | | +| TarSlipImprov.py:111:1:111:3 | ControlFlowNode for tar | TarSlipImprov.py:115:9:115:11 | ControlFlowNode for tar | provenance | | +| TarSlipImprov.py:111:7:111:39 | ControlFlowNode for Attribute() | TarSlipImprov.py:111:1:111:3 | ControlFlowNode for tar | provenance | | +| TarSlipImprov.py:123:6:123:29 | ControlFlowNode for Attribute() | TarSlipImprov.py:123:34:123:36 | ControlFlowNode for tar | provenance | | +| TarSlipImprov.py:123:34:123:36 | ControlFlowNode for tar | TarSlipImprov.py:124:9:124:13 | ControlFlowNode for entry | provenance | | +| TarSlipImprov.py:124:9:124:13 | ControlFlowNode for entry | TarSlipImprov.py:125:36:125:40 | ControlFlowNode for entry | provenance | | +| TarSlipImprov.py:129:6:129:26 | ControlFlowNode for Attribute() | TarSlipImprov.py:129:31:129:33 | ControlFlowNode for tar | provenance | | +| TarSlipImprov.py:129:31:129:33 | ControlFlowNode for tar | TarSlipImprov.py:130:5:130:7 | ControlFlowNode for tar | provenance | | +| TarSlipImprov.py:133:1:133:3 | ControlFlowNode for tar | TarSlipImprov.py:134:1:134:3 | ControlFlowNode for tar | provenance | | +| TarSlipImprov.py:133:7:133:39 | ControlFlowNode for Attribute() | TarSlipImprov.py:133:1:133:3 | ControlFlowNode for tar | provenance | | +| TarSlipImprov.py:141:6:141:29 | ControlFlowNode for Attribute() | TarSlipImprov.py:141:34:141:36 | ControlFlowNode for tar | provenance | | +| TarSlipImprov.py:141:34:141:36 | ControlFlowNode for tar | TarSlipImprov.py:142:9:142:13 | ControlFlowNode for entry | provenance | | +| TarSlipImprov.py:142:9:142:13 | ControlFlowNode for entry | TarSlipImprov.py:143:36:143:40 | ControlFlowNode for entry | provenance | | +| TarSlipImprov.py:151:14:151:50 | ControlFlowNode for closing() | TarSlipImprov.py:151:55:151:56 | ControlFlowNode for tf | provenance | | +| TarSlipImprov.py:151:22:151:49 | ControlFlowNode for Attribute() | TarSlipImprov.py:151:14:151:50 | ControlFlowNode for closing() | provenance | | +| TarSlipImprov.py:151:55:151:56 | ControlFlowNode for tf | TarSlipImprov.py:152:19:152:20 | ControlFlowNode for tf | provenance | | +| TarSlipImprov.py:152:19:152:20 | ControlFlowNode for tf | TarSlipImprov.py:157:18:157:40 | ControlFlowNode for py2_tarxz() | provenance | | +| TarSlipImprov.py:157:9:157:14 | ControlFlowNode for tar_cm | TarSlipImprov.py:162:20:162:23 | ControlFlowNode for tarc | provenance | | +| TarSlipImprov.py:157:18:157:40 | ControlFlowNode for py2_tarxz() | TarSlipImprov.py:157:9:157:14 | ControlFlowNode for tar_cm | provenance | | +| TarSlipImprov.py:159:9:159:14 | ControlFlowNode for tar_cm | TarSlipImprov.py:162:20:162:23 | ControlFlowNode for tarc | provenance | | +| TarSlipImprov.py:159:18:159:52 | ControlFlowNode for closing() | TarSlipImprov.py:159:9:159:14 | ControlFlowNode for tar_cm | provenance | | +| TarSlipImprov.py:159:26:159:51 | ControlFlowNode for Attribute() | TarSlipImprov.py:159:18:159:52 | ControlFlowNode for closing() | provenance | | +| TarSlipImprov.py:162:20:162:23 | ControlFlowNode for tarc | TarSlipImprov.py:169:9:169:12 | ControlFlowNode for tarc | provenance | | +| TarSlipImprov.py:176:6:176:31 | ControlFlowNode for Attribute() | TarSlipImprov.py:176:36:176:38 | ControlFlowNode for tar | provenance | | +| TarSlipImprov.py:176:36:176:38 | ControlFlowNode for tar | TarSlipImprov.py:177:9:177:13 | ControlFlowNode for entry | provenance | | +| TarSlipImprov.py:177:9:177:13 | ControlFlowNode for entry | TarSlipImprov.py:178:36:178:40 | ControlFlowNode for entry | provenance | | +| TarSlipImprov.py:182:6:182:31 | ControlFlowNode for Attribute() | TarSlipImprov.py:182:36:182:38 | ControlFlowNode for tar | provenance | | +| TarSlipImprov.py:182:36:182:38 | ControlFlowNode for tar | TarSlipImprov.py:183:9:183:13 | ControlFlowNode for entry | provenance | | +| TarSlipImprov.py:183:9:183:13 | ControlFlowNode for entry | TarSlipImprov.py:184:21:184:25 | ControlFlowNode for entry | provenance | | +| TarSlipImprov.py:188:1:188:3 | ControlFlowNode for tar | TarSlipImprov.py:189:1:189:3 | ControlFlowNode for tar | provenance | | +| TarSlipImprov.py:188:7:188:27 | ControlFlowNode for Attribute() | TarSlipImprov.py:188:1:188:3 | ControlFlowNode for tar | provenance | | +| TarSlipImprov.py:193:6:193:31 | ControlFlowNode for Attribute() | TarSlipImprov.py:193:36:193:38 | ControlFlowNode for tar | provenance | | +| TarSlipImprov.py:193:36:193:38 | ControlFlowNode for tar | TarSlipImprov.py:194:49:194:51 | ControlFlowNode for tar | provenance | | +| TarSlipImprov.py:210:6:210:43 | ControlFlowNode for Attribute() | TarSlipImprov.py:210:48:210:50 | ControlFlowNode for tar | provenance | | +| TarSlipImprov.py:210:48:210:50 | ControlFlowNode for tar | TarSlipImprov.py:211:5:211:7 | ControlFlowNode for tar | provenance | | +| TarSlipImprov.py:231:6:231:38 | ControlFlowNode for Attribute() | TarSlipImprov.py:231:43:231:52 | ControlFlowNode for corpus_tar | provenance | | +| TarSlipImprov.py:231:43:231:52 | ControlFlowNode for corpus_tar | TarSlipImprov.py:233:9:233:9 | ControlFlowNode for f | provenance | | +| TarSlipImprov.py:233:9:233:9 | ControlFlowNode for f | TarSlipImprov.py:235:28:235:28 | ControlFlowNode for f | provenance | | +| TarSlipImprov.py:235:13:235:19 | [post] ControlFlowNode for members | TarSlipImprov.py:236:44:236:50 | ControlFlowNode for members | provenance | | +| TarSlipImprov.py:235:28:235:28 | ControlFlowNode for f | TarSlipImprov.py:235:13:235:19 | [post] ControlFlowNode for members | provenance | | +| TarSlipImprov.py:258:6:258:26 | ControlFlowNode for Attribute() | TarSlipImprov.py:258:31:258:33 | ControlFlowNode for tar | provenance | | +| TarSlipImprov.py:258:31:258:33 | ControlFlowNode for tar | TarSlipImprov.py:259:9:259:13 | ControlFlowNode for entry | provenance | | +| TarSlipImprov.py:259:9:259:13 | ControlFlowNode for entry | TarSlipImprov.py:261:25:261:29 | ControlFlowNode for entry | provenance | | +| TarSlipImprov.py:264:6:264:38 | ControlFlowNode for Attribute() | TarSlipImprov.py:264:43:264:45 | ControlFlowNode for tar | provenance | | +| TarSlipImprov.py:264:43:264:45 | ControlFlowNode for tar | TarSlipImprov.py:265:9:265:13 | ControlFlowNode for entry | provenance | | +| TarSlipImprov.py:265:9:265:13 | ControlFlowNode for entry | TarSlipImprov.py:268:21:268:25 | ControlFlowNode for entry | provenance | | +| TarSlipImprov.py:271:6:271:39 | ControlFlowNode for Attribute() | TarSlipImprov.py:271:44:271:46 | ControlFlowNode for tar | provenance | | +| TarSlipImprov.py:271:44:271:46 | ControlFlowNode for tar | TarSlipImprov.py:272:9:272:13 | ControlFlowNode for entry | provenance | | +| TarSlipImprov.py:272:9:272:13 | ControlFlowNode for entry | TarSlipImprov.py:274:25:274:29 | ControlFlowNode for entry | provenance | | +| TarSlipImprov.py:276:6:276:38 | ControlFlowNode for Attribute() | TarSlipImprov.py:276:43:276:45 | ControlFlowNode for tar | provenance | | +| TarSlipImprov.py:276:43:276:45 | ControlFlowNode for tar | TarSlipImprov.py:277:9:277:13 | ControlFlowNode for entry | provenance | | +| TarSlipImprov.py:277:9:277:13 | ControlFlowNode for entry | TarSlipImprov.py:280:21:280:25 | ControlFlowNode for entry | provenance | | +| TarSlipImprov.py:283:6:283:51 | ControlFlowNode for Attribute() | TarSlipImprov.py:283:56:283:58 | ControlFlowNode for tar | provenance | | +| TarSlipImprov.py:283:56:283:58 | ControlFlowNode for tar | TarSlipImprov.py:284:5:284:7 | ControlFlowNode for tar | provenance | | +| TarSlipImprov.py:287:1:287:3 | ControlFlowNode for tar | TarSlipImprov.py:288:49:288:51 | ControlFlowNode for tar | provenance | | +| TarSlipImprov.py:287:7:287:28 | ControlFlowNode for Attribute() | TarSlipImprov.py:287:1:287:3 | ControlFlowNode for tar | provenance | | +| TarSlipImprov.py:292:1:292:3 | ControlFlowNode for tar | TarSlipImprov.py:293:1:293:3 | ControlFlowNode for tar | provenance | | +| TarSlipImprov.py:292:7:292:39 | ControlFlowNode for Attribute() | TarSlipImprov.py:292:1:292:3 | ControlFlowNode for tar | provenance | | +| TarSlipImprov.py:300:6:300:51 | ControlFlowNode for Attribute() | TarSlipImprov.py:300:56:300:58 | ControlFlowNode for tar | provenance | | +| TarSlipImprov.py:300:56:300:58 | ControlFlowNode for tar | TarSlipImprov.py:301:49:301:51 | ControlFlowNode for tar | provenance | | +| TarSlipImprov.py:304:1:304:3 | ControlFlowNode for tar | TarSlipImprov.py:306:5:306:10 | ControlFlowNode for member | provenance | | +| TarSlipImprov.py:304:7:304:39 | ControlFlowNode for Attribute() | TarSlipImprov.py:304:1:304:3 | ControlFlowNode for tar | provenance | | +| TarSlipImprov.py:306:5:306:10 | ControlFlowNode for member | TarSlipImprov.py:309:19:309:24 | ControlFlowNode for member | provenance | | +| TarSlipImprov.py:309:5:309:10 | [post] ControlFlowNode for result | TarSlipImprov.py:310:49:310:54 | ControlFlowNode for result | provenance | | +| TarSlipImprov.py:309:19:309:24 | ControlFlowNode for member | TarSlipImprov.py:309:5:309:10 | [post] ControlFlowNode for result | provenance | | nodes | TarSlipImprov.py:15:1:15:3 | ControlFlowNode for tar | semmle.label | ControlFlowNode for tar | | TarSlipImprov.py:15:7:15:39 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | diff --git a/python/ql/test/experimental/query-tests/Security/CWE-022-TarSlip/ZipSlip.expected b/python/ql/test/experimental/query-tests/Security/CWE-022-TarSlip/ZipSlip.expected index e99928a05b8..6b618335d81 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-022-TarSlip/ZipSlip.expected +++ b/python/ql/test/experimental/query-tests/Security/CWE-022-TarSlip/ZipSlip.expected @@ -1,19 +1,19 @@ edges -| zipslip_bad.py:8:10:8:31 | ControlFlowNode for Attribute() | zipslip_bad.py:8:36:8:39 | ControlFlowNode for zipf | -| zipslip_bad.py:8:36:8:39 | ControlFlowNode for zipf | zipslip_bad.py:10:13:10:17 | ControlFlowNode for entry | -| zipslip_bad.py:10:13:10:17 | ControlFlowNode for entry | zipslip_bad.py:11:25:11:29 | ControlFlowNode for entry | -| zipslip_bad.py:14:10:14:28 | ControlFlowNode for Attribute() | zipslip_bad.py:14:33:14:36 | ControlFlowNode for zipf | -| zipslip_bad.py:14:33:14:36 | ControlFlowNode for zipf | zipslip_bad.py:16:13:16:17 | ControlFlowNode for entry | -| zipslip_bad.py:16:13:16:17 | ControlFlowNode for entry | zipslip_bad.py:17:26:17:30 | ControlFlowNode for entry | -| zipslip_bad.py:20:10:20:27 | ControlFlowNode for Attribute() | zipslip_bad.py:20:32:20:35 | ControlFlowNode for zipf | -| zipslip_bad.py:20:32:20:35 | ControlFlowNode for zipf | zipslip_bad.py:22:13:22:17 | ControlFlowNode for entry | -| zipslip_bad.py:22:13:22:17 | ControlFlowNode for entry | zipslip_bad.py:23:29:23:33 | ControlFlowNode for entry | -| zipslip_bad.py:27:10:27:22 | ControlFlowNode for Attribute() | zipslip_bad.py:27:27:27:34 | ControlFlowNode for filelist | -| zipslip_bad.py:27:27:27:34 | ControlFlowNode for filelist | zipslip_bad.py:29:13:29:13 | ControlFlowNode for x | -| zipslip_bad.py:29:13:29:13 | ControlFlowNode for x | zipslip_bad.py:30:25:30:25 | ControlFlowNode for x | -| zipslip_bad.py:34:5:34:12 | ControlFlowNode for filelist | zipslip_bad.py:35:9:35:9 | ControlFlowNode for x | -| zipslip_bad.py:34:16:34:28 | ControlFlowNode for Attribute() | zipslip_bad.py:34:5:34:12 | ControlFlowNode for filelist | -| zipslip_bad.py:35:9:35:9 | ControlFlowNode for x | zipslip_bad.py:37:32:37:32 | ControlFlowNode for x | +| zipslip_bad.py:8:10:8:31 | ControlFlowNode for Attribute() | zipslip_bad.py:8:36:8:39 | ControlFlowNode for zipf | provenance | | +| zipslip_bad.py:8:36:8:39 | ControlFlowNode for zipf | zipslip_bad.py:10:13:10:17 | ControlFlowNode for entry | provenance | | +| zipslip_bad.py:10:13:10:17 | ControlFlowNode for entry | zipslip_bad.py:11:25:11:29 | ControlFlowNode for entry | provenance | | +| zipslip_bad.py:14:10:14:28 | ControlFlowNode for Attribute() | zipslip_bad.py:14:33:14:36 | ControlFlowNode for zipf | provenance | | +| zipslip_bad.py:14:33:14:36 | ControlFlowNode for zipf | zipslip_bad.py:16:13:16:17 | ControlFlowNode for entry | provenance | | +| zipslip_bad.py:16:13:16:17 | ControlFlowNode for entry | zipslip_bad.py:17:26:17:30 | ControlFlowNode for entry | provenance | | +| zipslip_bad.py:20:10:20:27 | ControlFlowNode for Attribute() | zipslip_bad.py:20:32:20:35 | ControlFlowNode for zipf | provenance | | +| zipslip_bad.py:20:32:20:35 | ControlFlowNode for zipf | zipslip_bad.py:22:13:22:17 | ControlFlowNode for entry | provenance | | +| zipslip_bad.py:22:13:22:17 | ControlFlowNode for entry | zipslip_bad.py:23:29:23:33 | ControlFlowNode for entry | provenance | | +| zipslip_bad.py:27:10:27:22 | ControlFlowNode for Attribute() | zipslip_bad.py:27:27:27:34 | ControlFlowNode for filelist | provenance | | +| zipslip_bad.py:27:27:27:34 | ControlFlowNode for filelist | zipslip_bad.py:29:13:29:13 | ControlFlowNode for x | provenance | | +| zipslip_bad.py:29:13:29:13 | ControlFlowNode for x | zipslip_bad.py:30:25:30:25 | ControlFlowNode for x | provenance | | +| zipslip_bad.py:34:5:34:12 | ControlFlowNode for filelist | zipslip_bad.py:35:9:35:9 | ControlFlowNode for x | provenance | | +| zipslip_bad.py:34:16:34:28 | ControlFlowNode for Attribute() | zipslip_bad.py:34:5:34:12 | ControlFlowNode for filelist | provenance | | +| zipslip_bad.py:35:9:35:9 | ControlFlowNode for x | zipslip_bad.py:37:32:37:32 | ControlFlowNode for x | provenance | | nodes | zipslip_bad.py:8:10:8:31 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | zipslip_bad.py:8:36:8:39 | ControlFlowNode for zipf | semmle.label | ControlFlowNode for zipf | diff --git a/python/ql/test/experimental/query-tests/Security/CWE-022-UnsafeUnpacking/UnsafeUnpack.expected b/python/ql/test/experimental/query-tests/Security/CWE-022-UnsafeUnpacking/UnsafeUnpack.expected index 742eecdb92e..f5af1aac647 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-022-UnsafeUnpacking/UnsafeUnpack.expected +++ b/python/ql/test/experimental/query-tests/Security/CWE-022-UnsafeUnpacking/UnsafeUnpack.expected @@ -1,86 +1,86 @@ edges -| UnsafeUnpack.py:5:26:5:32 | ControlFlowNode for ImportMember | UnsafeUnpack.py:5:26:5:32 | ControlFlowNode for request | -| UnsafeUnpack.py:5:26:5:32 | ControlFlowNode for request | UnsafeUnpack.py:11:18:11:24 | ControlFlowNode for request | -| UnsafeUnpack.py:11:7:11:14 | ControlFlowNode for filename | UnsafeUnpack.py:13:24:13:58 | ControlFlowNode for Attribute() | -| UnsafeUnpack.py:11:18:11:24 | ControlFlowNode for request | UnsafeUnpack.py:11:18:11:29 | ControlFlowNode for Attribute | -| UnsafeUnpack.py:11:18:11:29 | ControlFlowNode for Attribute | UnsafeUnpack.py:11:18:11:49 | ControlFlowNode for Attribute() | -| UnsafeUnpack.py:11:18:11:49 | ControlFlowNode for Attribute() | UnsafeUnpack.py:11:7:11:14 | ControlFlowNode for filename | -| UnsafeUnpack.py:13:13:13:20 | ControlFlowNode for response | UnsafeUnpack.py:17:27:17:34 | ControlFlowNode for response | -| UnsafeUnpack.py:13:24:13:58 | ControlFlowNode for Attribute() | UnsafeUnpack.py:13:13:13:20 | ControlFlowNode for response | -| UnsafeUnpack.py:16:23:16:29 | ControlFlowNode for tarpath | UnsafeUnpack.py:19:35:19:41 | ControlFlowNode for tarpath | -| UnsafeUnpack.py:17:19:17:19 | ControlFlowNode for f | UnsafeUnpack.py:16:23:16:29 | ControlFlowNode for tarpath | -| UnsafeUnpack.py:17:27:17:34 | ControlFlowNode for response | UnsafeUnpack.py:17:27:17:38 | ControlFlowNode for Attribute | -| UnsafeUnpack.py:17:27:17:38 | ControlFlowNode for Attribute | UnsafeUnpack.py:17:27:17:45 | ControlFlowNode for Attribute() | -| UnsafeUnpack.py:17:27:17:45 | ControlFlowNode for Attribute() | UnsafeUnpack.py:17:19:17:19 | ControlFlowNode for f | -| UnsafeUnpack.py:33:50:33:65 | ControlFlowNode for local_ziped_path | UnsafeUnpack.py:34:23:34:38 | ControlFlowNode for local_ziped_path | -| UnsafeUnpack.py:47:20:47:34 | ControlFlowNode for compressed_file | UnsafeUnpack.py:48:23:48:37 | ControlFlowNode for compressed_file | -| UnsafeUnpack.py:51:1:51:15 | ControlFlowNode for compressed_file | UnsafeUnpack.py:52:23:52:37 | ControlFlowNode for compressed_file | -| UnsafeUnpack.py:51:19:51:36 | ControlFlowNode for Attribute() | UnsafeUnpack.py:51:1:51:15 | ControlFlowNode for compressed_file | -| UnsafeUnpack.py:65:1:65:15 | ControlFlowNode for compressed_file | UnsafeUnpack.py:66:23:66:37 | ControlFlowNode for compressed_file | -| UnsafeUnpack.py:65:19:65:31 | ControlFlowNode for Attribute | UnsafeUnpack.py:65:1:65:15 | ControlFlowNode for compressed_file | -| UnsafeUnpack.py:79:1:79:12 | ControlFlowNode for url_filename | UnsafeUnpack.py:81:12:81:50 | ControlFlowNode for Attribute() | -| UnsafeUnpack.py:79:1:79:12 | ControlFlowNode for url_filename | UnsafeUnpack.py:171:12:171:50 | ControlFlowNode for Attribute() | -| UnsafeUnpack.py:79:16:79:28 | ControlFlowNode for Attribute | UnsafeUnpack.py:79:1:79:12 | ControlFlowNode for url_filename | -| UnsafeUnpack.py:81:1:81:8 | ControlFlowNode for response | UnsafeUnpack.py:85:15:85:22 | ControlFlowNode for response | -| UnsafeUnpack.py:81:12:81:50 | ControlFlowNode for Attribute() | UnsafeUnpack.py:81:1:81:8 | ControlFlowNode for response | -| UnsafeUnpack.py:84:11:84:17 | ControlFlowNode for tarpath | UnsafeUnpack.py:87:23:87:29 | ControlFlowNode for tarpath | -| UnsafeUnpack.py:85:7:85:7 | ControlFlowNode for f | UnsafeUnpack.py:84:11:84:17 | ControlFlowNode for tarpath | -| UnsafeUnpack.py:85:15:85:22 | ControlFlowNode for response | UnsafeUnpack.py:85:15:85:26 | ControlFlowNode for Attribute | -| UnsafeUnpack.py:85:15:85:26 | ControlFlowNode for Attribute | UnsafeUnpack.py:85:15:85:33 | ControlFlowNode for Attribute() | -| UnsafeUnpack.py:85:15:85:33 | ControlFlowNode for Attribute() | UnsafeUnpack.py:85:7:85:7 | ControlFlowNode for f | -| UnsafeUnpack.py:102:23:102:30 | ControlFlowNode for savepath | UnsafeUnpack.py:105:35:105:42 | ControlFlowNode for savepath | -| UnsafeUnpack.py:103:23:103:27 | ControlFlowNode for chunk | UnsafeUnpack.py:104:37:104:41 | ControlFlowNode for chunk | -| UnsafeUnpack.py:103:32:103:44 | ControlFlowNode for Attribute | UnsafeUnpack.py:103:32:103:54 | ControlFlowNode for Subscript | -| UnsafeUnpack.py:103:32:103:54 | ControlFlowNode for Subscript | UnsafeUnpack.py:103:32:103:63 | ControlFlowNode for Attribute() | -| UnsafeUnpack.py:103:32:103:63 | ControlFlowNode for Attribute() | UnsafeUnpack.py:103:23:103:27 | ControlFlowNode for chunk | -| UnsafeUnpack.py:104:25:104:29 | ControlFlowNode for wfile | UnsafeUnpack.py:102:23:102:30 | ControlFlowNode for savepath | -| UnsafeUnpack.py:104:37:104:41 | ControlFlowNode for chunk | UnsafeUnpack.py:104:25:104:29 | ControlFlowNode for wfile | -| UnsafeUnpack.py:108:13:108:18 | ControlFlowNode for myfile | UnsafeUnpack.py:111:27:111:32 | ControlFlowNode for myfile | -| UnsafeUnpack.py:108:22:108:34 | ControlFlowNode for Attribute | UnsafeUnpack.py:108:22:108:48 | ControlFlowNode for Attribute() | -| UnsafeUnpack.py:108:22:108:48 | ControlFlowNode for Attribute() | UnsafeUnpack.py:108:13:108:18 | ControlFlowNode for myfile | -| UnsafeUnpack.py:110:18:110:26 | ControlFlowNode for file_path | UnsafeUnpack.py:112:35:112:43 | ControlFlowNode for file_path | -| UnsafeUnpack.py:111:19:111:19 | ControlFlowNode for f | UnsafeUnpack.py:110:18:110:26 | ControlFlowNode for file_path | -| UnsafeUnpack.py:111:27:111:32 | ControlFlowNode for myfile | UnsafeUnpack.py:111:27:111:39 | ControlFlowNode for Attribute() | -| UnsafeUnpack.py:111:27:111:39 | ControlFlowNode for Attribute() | UnsafeUnpack.py:111:19:111:19 | ControlFlowNode for f | -| UnsafeUnpack.py:116:17:116:21 | ControlFlowNode for ufile | UnsafeUnpack.py:118:38:118:42 | ControlFlowNode for ufile | -| UnsafeUnpack.py:116:27:116:39 | ControlFlowNode for Attribute | UnsafeUnpack.py:116:27:116:49 | ControlFlowNode for Attribute() | -| UnsafeUnpack.py:116:27:116:49 | ControlFlowNode for Attribute() | UnsafeUnpack.py:116:17:116:21 | ControlFlowNode for ufile | -| UnsafeUnpack.py:118:19:118:26 | ControlFlowNode for filename | UnsafeUnpack.py:119:48:119:55 | ControlFlowNode for filename | -| UnsafeUnpack.py:118:30:118:55 | ControlFlowNode for Attribute() | UnsafeUnpack.py:118:19:118:26 | ControlFlowNode for filename | -| UnsafeUnpack.py:118:38:118:42 | ControlFlowNode for ufile | UnsafeUnpack.py:118:38:118:47 | ControlFlowNode for Attribute | -| UnsafeUnpack.py:118:38:118:47 | ControlFlowNode for Attribute | UnsafeUnpack.py:118:30:118:55 | ControlFlowNode for Attribute() | -| UnsafeUnpack.py:119:19:119:36 | ControlFlowNode for uploaded_file_path | UnsafeUnpack.py:120:41:120:58 | ControlFlowNode for uploaded_file_path | -| UnsafeUnpack.py:119:40:119:56 | ControlFlowNode for Attribute() | UnsafeUnpack.py:119:19:119:36 | ControlFlowNode for uploaded_file_path | -| UnsafeUnpack.py:119:48:119:55 | ControlFlowNode for filename | UnsafeUnpack.py:119:40:119:56 | ControlFlowNode for Attribute() | -| UnsafeUnpack.py:140:1:140:19 | ControlFlowNode for unsafe_filename_tar | UnsafeUnpack.py:141:22:141:40 | ControlFlowNode for unsafe_filename_tar | -| UnsafeUnpack.py:140:23:140:35 | ControlFlowNode for Attribute | UnsafeUnpack.py:140:1:140:19 | ControlFlowNode for unsafe_filename_tar | -| UnsafeUnpack.py:141:6:141:51 | ControlFlowNode for Attribute() | UnsafeUnpack.py:141:56:141:58 | ControlFlowNode for tar | -| UnsafeUnpack.py:141:22:141:40 | ControlFlowNode for unsafe_filename_tar | UnsafeUnpack.py:141:6:141:51 | ControlFlowNode for Attribute() | -| UnsafeUnpack.py:141:56:141:58 | ControlFlowNode for tar | UnsafeUnpack.py:142:49:142:51 | ControlFlowNode for tar | -| UnsafeUnpack.py:157:23:157:30 | ControlFlowNode for savepath | UnsafeUnpack.py:161:38:161:45 | ControlFlowNode for savepath | -| UnsafeUnpack.py:158:23:158:27 | ControlFlowNode for chunk | UnsafeUnpack.py:159:37:159:41 | ControlFlowNode for chunk | -| UnsafeUnpack.py:158:32:158:44 | ControlFlowNode for Attribute | UnsafeUnpack.py:158:32:158:54 | ControlFlowNode for Subscript | -| UnsafeUnpack.py:158:32:158:54 | ControlFlowNode for Subscript | UnsafeUnpack.py:158:32:158:63 | ControlFlowNode for Attribute() | -| UnsafeUnpack.py:158:32:158:63 | ControlFlowNode for Attribute() | UnsafeUnpack.py:158:23:158:27 | ControlFlowNode for chunk | -| UnsafeUnpack.py:159:25:159:29 | ControlFlowNode for wfile | UnsafeUnpack.py:157:23:157:30 | ControlFlowNode for savepath | -| UnsafeUnpack.py:159:37:159:41 | ControlFlowNode for chunk | UnsafeUnpack.py:159:25:159:29 | ControlFlowNode for wfile | -| UnsafeUnpack.py:161:19:161:21 | ControlFlowNode for tar | UnsafeUnpack.py:163:33:163:35 | ControlFlowNode for tar | -| UnsafeUnpack.py:161:25:161:46 | ControlFlowNode for Attribute() | UnsafeUnpack.py:161:19:161:21 | ControlFlowNode for tar | -| UnsafeUnpack.py:161:38:161:45 | ControlFlowNode for savepath | UnsafeUnpack.py:161:25:161:46 | ControlFlowNode for Attribute() | -| UnsafeUnpack.py:163:23:163:28 | ControlFlowNode for member | UnsafeUnpack.py:166:37:166:42 | ControlFlowNode for member | -| UnsafeUnpack.py:163:33:163:35 | ControlFlowNode for tar | UnsafeUnpack.py:163:23:163:28 | ControlFlowNode for member | -| UnsafeUnpack.py:166:23:166:28 | [post] ControlFlowNode for result | UnsafeUnpack.py:167:67:167:72 | ControlFlowNode for result | -| UnsafeUnpack.py:166:37:166:42 | ControlFlowNode for member | UnsafeUnpack.py:166:23:166:28 | [post] ControlFlowNode for result | -| UnsafeUnpack.py:171:1:171:8 | ControlFlowNode for response | UnsafeUnpack.py:174:15:174:22 | ControlFlowNode for response | -| UnsafeUnpack.py:171:12:171:50 | ControlFlowNode for Attribute() | UnsafeUnpack.py:171:1:171:8 | ControlFlowNode for response | -| UnsafeUnpack.py:173:11:173:17 | ControlFlowNode for tarpath | UnsafeUnpack.py:176:17:176:23 | ControlFlowNode for tarpath | -| UnsafeUnpack.py:174:7:174:7 | ControlFlowNode for f | UnsafeUnpack.py:173:11:173:17 | ControlFlowNode for tarpath | -| UnsafeUnpack.py:174:15:174:22 | ControlFlowNode for response | UnsafeUnpack.py:174:15:174:26 | ControlFlowNode for Attribute | -| UnsafeUnpack.py:174:15:174:26 | ControlFlowNode for Attribute | UnsafeUnpack.py:174:15:174:33 | ControlFlowNode for Attribute() | -| UnsafeUnpack.py:174:15:174:33 | ControlFlowNode for Attribute() | UnsafeUnpack.py:174:7:174:7 | ControlFlowNode for f | -| UnsafeUnpack.py:176:17:176:23 | ControlFlowNode for tarpath | UnsafeUnpack.py:176:1:176:34 | ControlFlowNode for Attribute() | -| UnsafeUnpack.py:194:53:194:55 | ControlFlowNode for tmp | UnsafeUnpack.py:201:29:201:31 | ControlFlowNode for tmp | -| UnsafeUnpack.py:201:29:201:31 | ControlFlowNode for tmp | UnsafeUnpack.py:201:29:201:36 | ControlFlowNode for Attribute | +| UnsafeUnpack.py:5:26:5:32 | ControlFlowNode for ImportMember | UnsafeUnpack.py:5:26:5:32 | ControlFlowNode for request | provenance | | +| UnsafeUnpack.py:5:26:5:32 | ControlFlowNode for request | UnsafeUnpack.py:11:18:11:24 | ControlFlowNode for request | provenance | | +| UnsafeUnpack.py:11:7:11:14 | ControlFlowNode for filename | UnsafeUnpack.py:13:24:13:58 | ControlFlowNode for Attribute() | provenance | | +| UnsafeUnpack.py:11:18:11:24 | ControlFlowNode for request | UnsafeUnpack.py:11:18:11:29 | ControlFlowNode for Attribute | provenance | | +| UnsafeUnpack.py:11:18:11:29 | ControlFlowNode for Attribute | UnsafeUnpack.py:11:18:11:49 | ControlFlowNode for Attribute() | provenance | | +| UnsafeUnpack.py:11:18:11:49 | ControlFlowNode for Attribute() | UnsafeUnpack.py:11:7:11:14 | ControlFlowNode for filename | provenance | | +| UnsafeUnpack.py:13:13:13:20 | ControlFlowNode for response | UnsafeUnpack.py:17:27:17:34 | ControlFlowNode for response | provenance | | +| UnsafeUnpack.py:13:24:13:58 | ControlFlowNode for Attribute() | UnsafeUnpack.py:13:13:13:20 | ControlFlowNode for response | provenance | | +| UnsafeUnpack.py:16:23:16:29 | ControlFlowNode for tarpath | UnsafeUnpack.py:19:35:19:41 | ControlFlowNode for tarpath | provenance | | +| UnsafeUnpack.py:17:19:17:19 | ControlFlowNode for f | UnsafeUnpack.py:16:23:16:29 | ControlFlowNode for tarpath | provenance | | +| UnsafeUnpack.py:17:27:17:34 | ControlFlowNode for response | UnsafeUnpack.py:17:27:17:38 | ControlFlowNode for Attribute | provenance | | +| UnsafeUnpack.py:17:27:17:38 | ControlFlowNode for Attribute | UnsafeUnpack.py:17:27:17:45 | ControlFlowNode for Attribute() | provenance | | +| UnsafeUnpack.py:17:27:17:45 | ControlFlowNode for Attribute() | UnsafeUnpack.py:17:19:17:19 | ControlFlowNode for f | provenance | | +| UnsafeUnpack.py:33:50:33:65 | ControlFlowNode for local_ziped_path | UnsafeUnpack.py:34:23:34:38 | ControlFlowNode for local_ziped_path | provenance | | +| UnsafeUnpack.py:47:20:47:34 | ControlFlowNode for compressed_file | UnsafeUnpack.py:48:23:48:37 | ControlFlowNode for compressed_file | provenance | | +| UnsafeUnpack.py:51:1:51:15 | ControlFlowNode for compressed_file | UnsafeUnpack.py:52:23:52:37 | ControlFlowNode for compressed_file | provenance | | +| UnsafeUnpack.py:51:19:51:36 | ControlFlowNode for Attribute() | UnsafeUnpack.py:51:1:51:15 | ControlFlowNode for compressed_file | provenance | | +| UnsafeUnpack.py:65:1:65:15 | ControlFlowNode for compressed_file | UnsafeUnpack.py:66:23:66:37 | ControlFlowNode for compressed_file | provenance | | +| UnsafeUnpack.py:65:19:65:31 | ControlFlowNode for Attribute | UnsafeUnpack.py:65:1:65:15 | ControlFlowNode for compressed_file | provenance | | +| UnsafeUnpack.py:79:1:79:12 | ControlFlowNode for url_filename | UnsafeUnpack.py:81:12:81:50 | ControlFlowNode for Attribute() | provenance | | +| UnsafeUnpack.py:79:1:79:12 | ControlFlowNode for url_filename | UnsafeUnpack.py:171:12:171:50 | ControlFlowNode for Attribute() | provenance | | +| UnsafeUnpack.py:79:16:79:28 | ControlFlowNode for Attribute | UnsafeUnpack.py:79:1:79:12 | ControlFlowNode for url_filename | provenance | | +| UnsafeUnpack.py:81:1:81:8 | ControlFlowNode for response | UnsafeUnpack.py:85:15:85:22 | ControlFlowNode for response | provenance | | +| UnsafeUnpack.py:81:12:81:50 | ControlFlowNode for Attribute() | UnsafeUnpack.py:81:1:81:8 | ControlFlowNode for response | provenance | | +| UnsafeUnpack.py:84:11:84:17 | ControlFlowNode for tarpath | UnsafeUnpack.py:87:23:87:29 | ControlFlowNode for tarpath | provenance | | +| UnsafeUnpack.py:85:7:85:7 | ControlFlowNode for f | UnsafeUnpack.py:84:11:84:17 | ControlFlowNode for tarpath | provenance | | +| UnsafeUnpack.py:85:15:85:22 | ControlFlowNode for response | UnsafeUnpack.py:85:15:85:26 | ControlFlowNode for Attribute | provenance | | +| UnsafeUnpack.py:85:15:85:26 | ControlFlowNode for Attribute | UnsafeUnpack.py:85:15:85:33 | ControlFlowNode for Attribute() | provenance | | +| UnsafeUnpack.py:85:15:85:33 | ControlFlowNode for Attribute() | UnsafeUnpack.py:85:7:85:7 | ControlFlowNode for f | provenance | | +| UnsafeUnpack.py:102:23:102:30 | ControlFlowNode for savepath | UnsafeUnpack.py:105:35:105:42 | ControlFlowNode for savepath | provenance | | +| UnsafeUnpack.py:103:23:103:27 | ControlFlowNode for chunk | UnsafeUnpack.py:104:37:104:41 | ControlFlowNode for chunk | provenance | | +| UnsafeUnpack.py:103:32:103:44 | ControlFlowNode for Attribute | UnsafeUnpack.py:103:32:103:54 | ControlFlowNode for Subscript | provenance | | +| UnsafeUnpack.py:103:32:103:54 | ControlFlowNode for Subscript | UnsafeUnpack.py:103:32:103:63 | ControlFlowNode for Attribute() | provenance | | +| UnsafeUnpack.py:103:32:103:63 | ControlFlowNode for Attribute() | UnsafeUnpack.py:103:23:103:27 | ControlFlowNode for chunk | provenance | | +| UnsafeUnpack.py:104:25:104:29 | ControlFlowNode for wfile | UnsafeUnpack.py:102:23:102:30 | ControlFlowNode for savepath | provenance | | +| UnsafeUnpack.py:104:37:104:41 | ControlFlowNode for chunk | UnsafeUnpack.py:104:25:104:29 | ControlFlowNode for wfile | provenance | | +| UnsafeUnpack.py:108:13:108:18 | ControlFlowNode for myfile | UnsafeUnpack.py:111:27:111:32 | ControlFlowNode for myfile | provenance | | +| UnsafeUnpack.py:108:22:108:34 | ControlFlowNode for Attribute | UnsafeUnpack.py:108:22:108:48 | ControlFlowNode for Attribute() | provenance | | +| UnsafeUnpack.py:108:22:108:48 | ControlFlowNode for Attribute() | UnsafeUnpack.py:108:13:108:18 | ControlFlowNode for myfile | provenance | | +| UnsafeUnpack.py:110:18:110:26 | ControlFlowNode for file_path | UnsafeUnpack.py:112:35:112:43 | ControlFlowNode for file_path | provenance | | +| UnsafeUnpack.py:111:19:111:19 | ControlFlowNode for f | UnsafeUnpack.py:110:18:110:26 | ControlFlowNode for file_path | provenance | | +| UnsafeUnpack.py:111:27:111:32 | ControlFlowNode for myfile | UnsafeUnpack.py:111:27:111:39 | ControlFlowNode for Attribute() | provenance | | +| UnsafeUnpack.py:111:27:111:39 | ControlFlowNode for Attribute() | UnsafeUnpack.py:111:19:111:19 | ControlFlowNode for f | provenance | | +| UnsafeUnpack.py:116:17:116:21 | ControlFlowNode for ufile | UnsafeUnpack.py:118:38:118:42 | ControlFlowNode for ufile | provenance | | +| UnsafeUnpack.py:116:27:116:39 | ControlFlowNode for Attribute | UnsafeUnpack.py:116:27:116:49 | ControlFlowNode for Attribute() | provenance | | +| UnsafeUnpack.py:116:27:116:49 | ControlFlowNode for Attribute() | UnsafeUnpack.py:116:17:116:21 | ControlFlowNode for ufile | provenance | | +| UnsafeUnpack.py:118:19:118:26 | ControlFlowNode for filename | UnsafeUnpack.py:119:48:119:55 | ControlFlowNode for filename | provenance | | +| UnsafeUnpack.py:118:30:118:55 | ControlFlowNode for Attribute() | UnsafeUnpack.py:118:19:118:26 | ControlFlowNode for filename | provenance | | +| UnsafeUnpack.py:118:38:118:42 | ControlFlowNode for ufile | UnsafeUnpack.py:118:38:118:47 | ControlFlowNode for Attribute | provenance | | +| UnsafeUnpack.py:118:38:118:47 | ControlFlowNode for Attribute | UnsafeUnpack.py:118:30:118:55 | ControlFlowNode for Attribute() | provenance | | +| UnsafeUnpack.py:119:19:119:36 | ControlFlowNode for uploaded_file_path | UnsafeUnpack.py:120:41:120:58 | ControlFlowNode for uploaded_file_path | provenance | | +| UnsafeUnpack.py:119:40:119:56 | ControlFlowNode for Attribute() | UnsafeUnpack.py:119:19:119:36 | ControlFlowNode for uploaded_file_path | provenance | | +| UnsafeUnpack.py:119:48:119:55 | ControlFlowNode for filename | UnsafeUnpack.py:119:40:119:56 | ControlFlowNode for Attribute() | provenance | | +| UnsafeUnpack.py:140:1:140:19 | ControlFlowNode for unsafe_filename_tar | UnsafeUnpack.py:141:22:141:40 | ControlFlowNode for unsafe_filename_tar | provenance | | +| UnsafeUnpack.py:140:23:140:35 | ControlFlowNode for Attribute | UnsafeUnpack.py:140:1:140:19 | ControlFlowNode for unsafe_filename_tar | provenance | | +| UnsafeUnpack.py:141:6:141:51 | ControlFlowNode for Attribute() | UnsafeUnpack.py:141:56:141:58 | ControlFlowNode for tar | provenance | | +| UnsafeUnpack.py:141:22:141:40 | ControlFlowNode for unsafe_filename_tar | UnsafeUnpack.py:141:6:141:51 | ControlFlowNode for Attribute() | provenance | | +| UnsafeUnpack.py:141:56:141:58 | ControlFlowNode for tar | UnsafeUnpack.py:142:49:142:51 | ControlFlowNode for tar | provenance | | +| UnsafeUnpack.py:157:23:157:30 | ControlFlowNode for savepath | UnsafeUnpack.py:161:38:161:45 | ControlFlowNode for savepath | provenance | | +| UnsafeUnpack.py:158:23:158:27 | ControlFlowNode for chunk | UnsafeUnpack.py:159:37:159:41 | ControlFlowNode for chunk | provenance | | +| UnsafeUnpack.py:158:32:158:44 | ControlFlowNode for Attribute | UnsafeUnpack.py:158:32:158:54 | ControlFlowNode for Subscript | provenance | | +| UnsafeUnpack.py:158:32:158:54 | ControlFlowNode for Subscript | UnsafeUnpack.py:158:32:158:63 | ControlFlowNode for Attribute() | provenance | | +| UnsafeUnpack.py:158:32:158:63 | ControlFlowNode for Attribute() | UnsafeUnpack.py:158:23:158:27 | ControlFlowNode for chunk | provenance | | +| UnsafeUnpack.py:159:25:159:29 | ControlFlowNode for wfile | UnsafeUnpack.py:157:23:157:30 | ControlFlowNode for savepath | provenance | | +| UnsafeUnpack.py:159:37:159:41 | ControlFlowNode for chunk | UnsafeUnpack.py:159:25:159:29 | ControlFlowNode for wfile | provenance | | +| UnsafeUnpack.py:161:19:161:21 | ControlFlowNode for tar | UnsafeUnpack.py:163:33:163:35 | ControlFlowNode for tar | provenance | | +| UnsafeUnpack.py:161:25:161:46 | ControlFlowNode for Attribute() | UnsafeUnpack.py:161:19:161:21 | ControlFlowNode for tar | provenance | | +| UnsafeUnpack.py:161:38:161:45 | ControlFlowNode for savepath | UnsafeUnpack.py:161:25:161:46 | ControlFlowNode for Attribute() | provenance | | +| UnsafeUnpack.py:163:23:163:28 | ControlFlowNode for member | UnsafeUnpack.py:166:37:166:42 | ControlFlowNode for member | provenance | | +| UnsafeUnpack.py:163:33:163:35 | ControlFlowNode for tar | UnsafeUnpack.py:163:23:163:28 | ControlFlowNode for member | provenance | | +| UnsafeUnpack.py:166:23:166:28 | [post] ControlFlowNode for result | UnsafeUnpack.py:167:67:167:72 | ControlFlowNode for result | provenance | | +| UnsafeUnpack.py:166:37:166:42 | ControlFlowNode for member | UnsafeUnpack.py:166:23:166:28 | [post] ControlFlowNode for result | provenance | | +| UnsafeUnpack.py:171:1:171:8 | ControlFlowNode for response | UnsafeUnpack.py:174:15:174:22 | ControlFlowNode for response | provenance | | +| UnsafeUnpack.py:171:12:171:50 | ControlFlowNode for Attribute() | UnsafeUnpack.py:171:1:171:8 | ControlFlowNode for response | provenance | | +| UnsafeUnpack.py:173:11:173:17 | ControlFlowNode for tarpath | UnsafeUnpack.py:176:17:176:23 | ControlFlowNode for tarpath | provenance | | +| UnsafeUnpack.py:174:7:174:7 | ControlFlowNode for f | UnsafeUnpack.py:173:11:173:17 | ControlFlowNode for tarpath | provenance | | +| UnsafeUnpack.py:174:15:174:22 | ControlFlowNode for response | UnsafeUnpack.py:174:15:174:26 | ControlFlowNode for Attribute | provenance | | +| UnsafeUnpack.py:174:15:174:26 | ControlFlowNode for Attribute | UnsafeUnpack.py:174:15:174:33 | ControlFlowNode for Attribute() | provenance | | +| UnsafeUnpack.py:174:15:174:33 | ControlFlowNode for Attribute() | UnsafeUnpack.py:174:7:174:7 | ControlFlowNode for f | provenance | | +| UnsafeUnpack.py:176:17:176:23 | ControlFlowNode for tarpath | UnsafeUnpack.py:176:1:176:34 | ControlFlowNode for Attribute() | provenance | | +| UnsafeUnpack.py:194:53:194:55 | ControlFlowNode for tmp | UnsafeUnpack.py:201:29:201:31 | ControlFlowNode for tmp | provenance | | +| UnsafeUnpack.py:201:29:201:31 | ControlFlowNode for tmp | UnsafeUnpack.py:201:29:201:36 | ControlFlowNode for Attribute | provenance | | nodes | UnsafeUnpack.py:5:26:5:32 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | | UnsafeUnpack.py:5:26:5:32 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | diff --git a/python/ql/test/experimental/query-tests/Security/CWE-074-TemplateInjection/TemplateInjection.expected b/python/ql/test/experimental/query-tests/Security/CWE-074-TemplateInjection/TemplateInjection.expected index 0bfa6affc39..2754b5b8c06 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-074-TemplateInjection/TemplateInjection.expected +++ b/python/ql/test/experimental/query-tests/Security/CWE-074-TemplateInjection/TemplateInjection.expected @@ -1,46 +1,46 @@ edges -| AirspeedSsti.py:2:26:2:32 | ControlFlowNode for ImportMember | AirspeedSsti.py:2:26:2:32 | ControlFlowNode for request | -| AirspeedSsti.py:2:26:2:32 | ControlFlowNode for request | AirspeedSsti.py:10:16:10:22 | ControlFlowNode for request | -| AirspeedSsti.py:10:5:10:12 | ControlFlowNode for template | AirspeedSsti.py:11:30:11:37 | ControlFlowNode for template | -| AirspeedSsti.py:10:16:10:22 | ControlFlowNode for request | AirspeedSsti.py:10:16:10:27 | ControlFlowNode for Attribute | -| AirspeedSsti.py:10:16:10:27 | ControlFlowNode for Attribute | AirspeedSsti.py:10:16:10:43 | ControlFlowNode for Attribute() | -| AirspeedSsti.py:10:16:10:43 | ControlFlowNode for Attribute() | AirspeedSsti.py:10:5:10:12 | ControlFlowNode for template | -| CheetahSinks.py:1:26:1:32 | ControlFlowNode for ImportMember | CheetahSinks.py:1:26:1:32 | ControlFlowNode for request | -| CheetahSinks.py:1:26:1:32 | ControlFlowNode for request | CheetahSinks.py:10:16:10:22 | ControlFlowNode for request | -| CheetahSinks.py:1:26:1:32 | ControlFlowNode for request | CheetahSinks.py:21:16:21:22 | ControlFlowNode for request | -| CheetahSinks.py:10:5:10:12 | ControlFlowNode for template | CheetahSinks.py:11:21:11:28 | ControlFlowNode for template | -| CheetahSinks.py:10:16:10:22 | ControlFlowNode for request | CheetahSinks.py:10:16:10:27 | ControlFlowNode for Attribute | -| CheetahSinks.py:10:16:10:27 | ControlFlowNode for Attribute | CheetahSinks.py:10:16:10:43 | ControlFlowNode for Attribute() | -| CheetahSinks.py:10:16:10:43 | ControlFlowNode for Attribute() | CheetahSinks.py:10:5:10:12 | ControlFlowNode for template | -| CheetahSinks.py:21:5:21:12 | ControlFlowNode for template | CheetahSinks.py:22:20:22:27 | ControlFlowNode for template | -| CheetahSinks.py:21:16:21:22 | ControlFlowNode for request | CheetahSinks.py:21:16:21:27 | ControlFlowNode for Attribute | -| CheetahSinks.py:21:16:21:27 | ControlFlowNode for Attribute | CheetahSinks.py:21:16:21:43 | ControlFlowNode for Attribute() | -| CheetahSinks.py:21:16:21:43 | ControlFlowNode for Attribute() | CheetahSinks.py:21:5:21:12 | ControlFlowNode for template | -| ChevronSsti.py:1:26:1:32 | ControlFlowNode for ImportMember | ChevronSsti.py:1:26:1:32 | ControlFlowNode for request | -| ChevronSsti.py:1:26:1:32 | ControlFlowNode for request | ChevronSsti.py:10:16:10:22 | ControlFlowNode for request | -| ChevronSsti.py:10:5:10:12 | ControlFlowNode for template | ChevronSsti.py:11:27:11:34 | ControlFlowNode for template | -| ChevronSsti.py:10:16:10:22 | ControlFlowNode for request | ChevronSsti.py:10:16:10:27 | ControlFlowNode for Attribute | -| ChevronSsti.py:10:16:10:27 | ControlFlowNode for Attribute | ChevronSsti.py:10:16:10:43 | ControlFlowNode for Attribute() | -| ChevronSsti.py:10:16:10:43 | ControlFlowNode for Attribute() | ChevronSsti.py:10:5:10:12 | ControlFlowNode for template | -| DjangoTemplates.py:6:8:6:14 | ControlFlowNode for request | DjangoTemplates.py:8:5:8:12 | ControlFlowNode for template | -| DjangoTemplates.py:8:5:8:12 | ControlFlowNode for template | DjangoTemplates.py:9:18:9:25 | ControlFlowNode for template | -| FlaskTemplate.py:1:26:1:32 | ControlFlowNode for ImportMember | FlaskTemplate.py:1:26:1:32 | ControlFlowNode for request | -| FlaskTemplate.py:1:26:1:32 | ControlFlowNode for request | FlaskTemplate.py:10:8:10:14 | ControlFlowNode for request | -| FlaskTemplate.py:1:26:1:32 | ControlFlowNode for request | FlaskTemplate.py:11:39:11:45 | ControlFlowNode for request | -| FlaskTemplate.py:1:26:1:32 | ControlFlowNode for request | FlaskTemplate.py:17:41:17:47 | ControlFlowNode for request | -| FlaskTemplate.py:10:8:10:14 | ControlFlowNode for request | FlaskTemplate.py:11:39:11:50 | ControlFlowNode for Attribute | -| FlaskTemplate.py:11:39:11:45 | ControlFlowNode for request | FlaskTemplate.py:11:39:11:50 | ControlFlowNode for Attribute | -| FlaskTemplate.py:11:39:11:50 | ControlFlowNode for Attribute | FlaskTemplate.py:11:39:11:66 | ControlFlowNode for Attribute() | -| FlaskTemplate.py:17:41:17:47 | ControlFlowNode for request | FlaskTemplate.py:17:41:17:52 | ControlFlowNode for Attribute | -| FlaskTemplate.py:17:41:17:52 | ControlFlowNode for Attribute | FlaskTemplate.py:17:41:17:68 | ControlFlowNode for Attribute() | -| JinjaSsti.py:7:7:7:13 | ControlFlowNode for request | JinjaSsti.py:9:5:9:12 | ControlFlowNode for template | -| JinjaSsti.py:9:5:9:12 | ControlFlowNode for template | JinjaSsti.py:10:25:10:32 | ControlFlowNode for template | -| JinjaSsti.py:16:7:16:13 | ControlFlowNode for request | JinjaSsti.py:19:5:19:12 | ControlFlowNode for template | -| JinjaSsti.py:19:5:19:12 | ControlFlowNode for template | JinjaSsti.py:20:28:20:35 | ControlFlowNode for template | -| MakoSsti.py:6:10:6:16 | ControlFlowNode for request | MakoSsti.py:8:5:8:12 | ControlFlowNode for template | -| MakoSsti.py:8:5:8:12 | ControlFlowNode for template | MakoSsti.py:9:27:9:34 | ControlFlowNode for template | -| TRender.py:5:13:5:19 | ControlFlowNode for request | TRender.py:6:5:6:12 | ControlFlowNode for template | -| TRender.py:6:5:6:12 | ControlFlowNode for template | TRender.py:7:24:7:31 | ControlFlowNode for template | +| AirspeedSsti.py:2:26:2:32 | ControlFlowNode for ImportMember | AirspeedSsti.py:2:26:2:32 | ControlFlowNode for request | provenance | | +| AirspeedSsti.py:2:26:2:32 | ControlFlowNode for request | AirspeedSsti.py:10:16:10:22 | ControlFlowNode for request | provenance | | +| AirspeedSsti.py:10:5:10:12 | ControlFlowNode for template | AirspeedSsti.py:11:30:11:37 | ControlFlowNode for template | provenance | | +| AirspeedSsti.py:10:16:10:22 | ControlFlowNode for request | AirspeedSsti.py:10:16:10:27 | ControlFlowNode for Attribute | provenance | | +| AirspeedSsti.py:10:16:10:27 | ControlFlowNode for Attribute | AirspeedSsti.py:10:16:10:43 | ControlFlowNode for Attribute() | provenance | | +| AirspeedSsti.py:10:16:10:43 | ControlFlowNode for Attribute() | AirspeedSsti.py:10:5:10:12 | ControlFlowNode for template | provenance | | +| CheetahSinks.py:1:26:1:32 | ControlFlowNode for ImportMember | CheetahSinks.py:1:26:1:32 | ControlFlowNode for request | provenance | | +| CheetahSinks.py:1:26:1:32 | ControlFlowNode for request | CheetahSinks.py:10:16:10:22 | ControlFlowNode for request | provenance | | +| CheetahSinks.py:1:26:1:32 | ControlFlowNode for request | CheetahSinks.py:21:16:21:22 | ControlFlowNode for request | provenance | | +| CheetahSinks.py:10:5:10:12 | ControlFlowNode for template | CheetahSinks.py:11:21:11:28 | ControlFlowNode for template | provenance | | +| CheetahSinks.py:10:16:10:22 | ControlFlowNode for request | CheetahSinks.py:10:16:10:27 | ControlFlowNode for Attribute | provenance | | +| CheetahSinks.py:10:16:10:27 | ControlFlowNode for Attribute | CheetahSinks.py:10:16:10:43 | ControlFlowNode for Attribute() | provenance | | +| CheetahSinks.py:10:16:10:43 | ControlFlowNode for Attribute() | CheetahSinks.py:10:5:10:12 | ControlFlowNode for template | provenance | | +| CheetahSinks.py:21:5:21:12 | ControlFlowNode for template | CheetahSinks.py:22:20:22:27 | ControlFlowNode for template | provenance | | +| CheetahSinks.py:21:16:21:22 | ControlFlowNode for request | CheetahSinks.py:21:16:21:27 | ControlFlowNode for Attribute | provenance | | +| CheetahSinks.py:21:16:21:27 | ControlFlowNode for Attribute | CheetahSinks.py:21:16:21:43 | ControlFlowNode for Attribute() | provenance | | +| CheetahSinks.py:21:16:21:43 | ControlFlowNode for Attribute() | CheetahSinks.py:21:5:21:12 | ControlFlowNode for template | provenance | | +| ChevronSsti.py:1:26:1:32 | ControlFlowNode for ImportMember | ChevronSsti.py:1:26:1:32 | ControlFlowNode for request | provenance | | +| ChevronSsti.py:1:26:1:32 | ControlFlowNode for request | ChevronSsti.py:10:16:10:22 | ControlFlowNode for request | provenance | | +| ChevronSsti.py:10:5:10:12 | ControlFlowNode for template | ChevronSsti.py:11:27:11:34 | ControlFlowNode for template | provenance | | +| ChevronSsti.py:10:16:10:22 | ControlFlowNode for request | ChevronSsti.py:10:16:10:27 | ControlFlowNode for Attribute | provenance | | +| ChevronSsti.py:10:16:10:27 | ControlFlowNode for Attribute | ChevronSsti.py:10:16:10:43 | ControlFlowNode for Attribute() | provenance | | +| ChevronSsti.py:10:16:10:43 | ControlFlowNode for Attribute() | ChevronSsti.py:10:5:10:12 | ControlFlowNode for template | provenance | | +| DjangoTemplates.py:6:8:6:14 | ControlFlowNode for request | DjangoTemplates.py:8:5:8:12 | ControlFlowNode for template | provenance | | +| DjangoTemplates.py:8:5:8:12 | ControlFlowNode for template | DjangoTemplates.py:9:18:9:25 | ControlFlowNode for template | provenance | | +| FlaskTemplate.py:1:26:1:32 | ControlFlowNode for ImportMember | FlaskTemplate.py:1:26:1:32 | ControlFlowNode for request | provenance | | +| FlaskTemplate.py:1:26:1:32 | ControlFlowNode for request | FlaskTemplate.py:10:8:10:14 | ControlFlowNode for request | provenance | | +| FlaskTemplate.py:1:26:1:32 | ControlFlowNode for request | FlaskTemplate.py:11:39:11:45 | ControlFlowNode for request | provenance | | +| FlaskTemplate.py:1:26:1:32 | ControlFlowNode for request | FlaskTemplate.py:17:41:17:47 | ControlFlowNode for request | provenance | | +| FlaskTemplate.py:10:8:10:14 | ControlFlowNode for request | FlaskTemplate.py:11:39:11:50 | ControlFlowNode for Attribute | provenance | | +| FlaskTemplate.py:11:39:11:45 | ControlFlowNode for request | FlaskTemplate.py:11:39:11:50 | ControlFlowNode for Attribute | provenance | | +| FlaskTemplate.py:11:39:11:50 | ControlFlowNode for Attribute | FlaskTemplate.py:11:39:11:66 | ControlFlowNode for Attribute() | provenance | | +| FlaskTemplate.py:17:41:17:47 | ControlFlowNode for request | FlaskTemplate.py:17:41:17:52 | ControlFlowNode for Attribute | provenance | | +| FlaskTemplate.py:17:41:17:52 | ControlFlowNode for Attribute | FlaskTemplate.py:17:41:17:68 | ControlFlowNode for Attribute() | provenance | | +| JinjaSsti.py:7:7:7:13 | ControlFlowNode for request | JinjaSsti.py:9:5:9:12 | ControlFlowNode for template | provenance | | +| JinjaSsti.py:9:5:9:12 | ControlFlowNode for template | JinjaSsti.py:10:25:10:32 | ControlFlowNode for template | provenance | | +| JinjaSsti.py:16:7:16:13 | ControlFlowNode for request | JinjaSsti.py:19:5:19:12 | ControlFlowNode for template | provenance | | +| JinjaSsti.py:19:5:19:12 | ControlFlowNode for template | JinjaSsti.py:20:28:20:35 | ControlFlowNode for template | provenance | | +| MakoSsti.py:6:10:6:16 | ControlFlowNode for request | MakoSsti.py:8:5:8:12 | ControlFlowNode for template | provenance | | +| MakoSsti.py:8:5:8:12 | ControlFlowNode for template | MakoSsti.py:9:27:9:34 | ControlFlowNode for template | provenance | | +| TRender.py:5:13:5:19 | ControlFlowNode for request | TRender.py:6:5:6:12 | ControlFlowNode for template | provenance | | +| TRender.py:6:5:6:12 | ControlFlowNode for template | TRender.py:7:24:7:31 | ControlFlowNode for template | provenance | | nodes | AirspeedSsti.py:2:26:2:32 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | | AirspeedSsti.py:2:26:2:32 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | diff --git a/python/ql/test/experimental/query-tests/Security/CWE-074-paramiko/paramiko.expected b/python/ql/test/experimental/query-tests/Security/CWE-074-paramiko/paramiko.expected index b31006425a6..d7793ad996d 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-074-paramiko/paramiko.expected +++ b/python/ql/test/experimental/query-tests/Security/CWE-074-paramiko/paramiko.expected @@ -1,8 +1,8 @@ edges -| paramiko.py:15:21:15:23 | ControlFlowNode for cmd | paramiko.py:16:62:16:64 | ControlFlowNode for cmd | -| paramiko.py:20:21:20:23 | ControlFlowNode for cmd | paramiko.py:21:70:21:72 | ControlFlowNode for cmd | -| paramiko.py:25:21:25:23 | ControlFlowNode for cmd | paramiko.py:26:136:26:138 | ControlFlowNode for cmd | -| paramiko.py:26:136:26:138 | ControlFlowNode for cmd | paramiko.py:26:114:26:139 | ControlFlowNode for Attribute() | +| paramiko.py:15:21:15:23 | ControlFlowNode for cmd | paramiko.py:16:62:16:64 | ControlFlowNode for cmd | provenance | | +| paramiko.py:20:21:20:23 | ControlFlowNode for cmd | paramiko.py:21:70:21:72 | ControlFlowNode for cmd | provenance | | +| paramiko.py:25:21:25:23 | ControlFlowNode for cmd | paramiko.py:26:136:26:138 | ControlFlowNode for cmd | provenance | | +| paramiko.py:26:136:26:138 | ControlFlowNode for cmd | paramiko.py:26:114:26:139 | ControlFlowNode for Attribute() | provenance | | nodes | paramiko.py:15:21:15:23 | ControlFlowNode for cmd | semmle.label | ControlFlowNode for cmd | | paramiko.py:16:62:16:64 | ControlFlowNode for cmd | semmle.label | ControlFlowNode for cmd | diff --git a/python/ql/test/experimental/query-tests/Security/CWE-079/EmailXss.expected b/python/ql/test/experimental/query-tests/Security/CWE-079/EmailXss.expected index 00172d78319..8581fcda227 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-079/EmailXss.expected +++ b/python/ql/test/experimental/query-tests/Security/CWE-079/EmailXss.expected @@ -1,40 +1,40 @@ edges -| flask_mail.py:1:19:1:25 | ControlFlowNode for ImportMember | flask_mail.py:1:19:1:25 | ControlFlowNode for request | -| flask_mail.py:1:19:1:25 | ControlFlowNode for request | flask_mail.py:13:22:13:28 | ControlFlowNode for request | -| flask_mail.py:1:19:1:25 | ControlFlowNode for request | flask_mail.py:18:14:18:20 | ControlFlowNode for request | -| flask_mail.py:1:19:1:25 | ControlFlowNode for request | flask_mail.py:31:24:31:30 | ControlFlowNode for request | -| flask_mail.py:13:22:13:28 | ControlFlowNode for request | flask_mail.py:13:22:13:41 | ControlFlowNode for Subscript | -| flask_mail.py:13:22:13:28 | ControlFlowNode for request | flask_mail.py:18:14:18:33 | ControlFlowNode for Subscript | -| flask_mail.py:18:14:18:20 | ControlFlowNode for request | flask_mail.py:18:14:18:33 | ControlFlowNode for Subscript | -| flask_mail.py:31:24:31:30 | ControlFlowNode for request | flask_mail.py:31:24:31:43 | ControlFlowNode for Subscript | -| sendgrid_mail.py:1:19:1:25 | ControlFlowNode for ImportMember | sendgrid_mail.py:1:19:1:25 | ControlFlowNode for request | -| sendgrid_mail.py:1:19:1:25 | ControlFlowNode for request | sendgrid_mail.py:14:22:14:28 | ControlFlowNode for request | -| sendgrid_mail.py:1:19:1:25 | ControlFlowNode for request | sendgrid_mail.py:26:34:26:40 | ControlFlowNode for request | -| sendgrid_mail.py:1:19:1:25 | ControlFlowNode for request | sendgrid_mail.py:37:41:37:47 | ControlFlowNode for request | -| sendgrid_mail.py:14:22:14:28 | ControlFlowNode for request | sendgrid_mail.py:14:22:14:49 | ControlFlowNode for Subscript | -| sendgrid_mail.py:26:34:26:40 | ControlFlowNode for request | sendgrid_mail.py:26:34:26:61 | ControlFlowNode for Subscript | -| sendgrid_mail.py:26:34:26:61 | ControlFlowNode for Subscript | sendgrid_mail.py:26:22:26:62 | ControlFlowNode for HtmlContent() | -| sendgrid_mail.py:37:41:37:47 | ControlFlowNode for request | sendgrid_mail.py:37:41:37:68 | ControlFlowNode for Subscript | -| sendgrid_via_mail_send_post_request_body_bad.py:3:19:3:25 | ControlFlowNode for ImportMember | sendgrid_via_mail_send_post_request_body_bad.py:3:19:3:25 | ControlFlowNode for request | -| sendgrid_via_mail_send_post_request_body_bad.py:3:19:3:25 | ControlFlowNode for request | sendgrid_via_mail_send_post_request_body_bad.py:16:51:16:57 | ControlFlowNode for request | -| sendgrid_via_mail_send_post_request_body_bad.py:3:19:3:25 | ControlFlowNode for request | sendgrid_via_mail_send_post_request_body_bad.py:27:50:27:56 | ControlFlowNode for request | -| sendgrid_via_mail_send_post_request_body_bad.py:3:19:3:25 | ControlFlowNode for request | sendgrid_via_mail_send_post_request_body_bad.py:41:50:41:56 | ControlFlowNode for request | -| sendgrid_via_mail_send_post_request_body_bad.py:16:51:16:57 | ControlFlowNode for request | sendgrid_via_mail_send_post_request_body_bad.py:16:26:16:79 | ControlFlowNode for Attribute() | -| sendgrid_via_mail_send_post_request_body_bad.py:16:51:16:57 | ControlFlowNode for request | sendgrid_via_mail_send_post_request_body_bad.py:27:25:27:77 | ControlFlowNode for Attribute() | -| sendgrid_via_mail_send_post_request_body_bad.py:16:51:16:57 | ControlFlowNode for request | sendgrid_via_mail_send_post_request_body_bad.py:41:25:41:79 | ControlFlowNode for Attribute() | -| sendgrid_via_mail_send_post_request_body_bad.py:27:50:27:56 | ControlFlowNode for request | sendgrid_via_mail_send_post_request_body_bad.py:27:25:27:77 | ControlFlowNode for Attribute() | -| sendgrid_via_mail_send_post_request_body_bad.py:27:50:27:56 | ControlFlowNode for request | sendgrid_via_mail_send_post_request_body_bad.py:41:25:41:79 | ControlFlowNode for Attribute() | -| sendgrid_via_mail_send_post_request_body_bad.py:41:50:41:56 | ControlFlowNode for request | sendgrid_via_mail_send_post_request_body_bad.py:41:25:41:79 | ControlFlowNode for Attribute() | -| smtplib_bad_subparts.py:2:26:2:32 | ControlFlowNode for ImportMember | smtplib_bad_subparts.py:2:26:2:32 | ControlFlowNode for request | -| smtplib_bad_subparts.py:2:26:2:32 | ControlFlowNode for request | smtplib_bad_subparts.py:17:12:17:18 | ControlFlowNode for request | -| smtplib_bad_subparts.py:17:5:17:8 | ControlFlowNode for name | smtplib_bad_subparts.py:20:5:20:8 | ControlFlowNode for html | -| smtplib_bad_subparts.py:17:12:17:18 | ControlFlowNode for request | smtplib_bad_subparts.py:17:5:17:8 | ControlFlowNode for name | -| smtplib_bad_subparts.py:20:5:20:8 | ControlFlowNode for html | smtplib_bad_subparts.py:24:22:24:25 | ControlFlowNode for html | -| smtplib_bad_via_attach.py:2:26:2:32 | ControlFlowNode for ImportMember | smtplib_bad_via_attach.py:2:26:2:32 | ControlFlowNode for request | -| smtplib_bad_via_attach.py:2:26:2:32 | ControlFlowNode for request | smtplib_bad_via_attach.py:20:12:20:18 | ControlFlowNode for request | -| smtplib_bad_via_attach.py:20:5:20:8 | ControlFlowNode for name | smtplib_bad_via_attach.py:23:5:23:8 | ControlFlowNode for html | -| smtplib_bad_via_attach.py:20:12:20:18 | ControlFlowNode for request | smtplib_bad_via_attach.py:20:5:20:8 | ControlFlowNode for name | -| smtplib_bad_via_attach.py:23:5:23:8 | ControlFlowNode for html | smtplib_bad_via_attach.py:27:22:27:25 | ControlFlowNode for html | +| flask_mail.py:1:19:1:25 | ControlFlowNode for ImportMember | flask_mail.py:1:19:1:25 | ControlFlowNode for request | provenance | | +| flask_mail.py:1:19:1:25 | ControlFlowNode for request | flask_mail.py:13:22:13:28 | ControlFlowNode for request | provenance | | +| flask_mail.py:1:19:1:25 | ControlFlowNode for request | flask_mail.py:18:14:18:20 | ControlFlowNode for request | provenance | | +| flask_mail.py:1:19:1:25 | ControlFlowNode for request | flask_mail.py:31:24:31:30 | ControlFlowNode for request | provenance | | +| flask_mail.py:13:22:13:28 | ControlFlowNode for request | flask_mail.py:13:22:13:41 | ControlFlowNode for Subscript | provenance | | +| flask_mail.py:13:22:13:28 | ControlFlowNode for request | flask_mail.py:18:14:18:33 | ControlFlowNode for Subscript | provenance | | +| flask_mail.py:18:14:18:20 | ControlFlowNode for request | flask_mail.py:18:14:18:33 | ControlFlowNode for Subscript | provenance | | +| flask_mail.py:31:24:31:30 | ControlFlowNode for request | flask_mail.py:31:24:31:43 | ControlFlowNode for Subscript | provenance | | +| sendgrid_mail.py:1:19:1:25 | ControlFlowNode for ImportMember | sendgrid_mail.py:1:19:1:25 | ControlFlowNode for request | provenance | | +| sendgrid_mail.py:1:19:1:25 | ControlFlowNode for request | sendgrid_mail.py:14:22:14:28 | ControlFlowNode for request | provenance | | +| sendgrid_mail.py:1:19:1:25 | ControlFlowNode for request | sendgrid_mail.py:26:34:26:40 | ControlFlowNode for request | provenance | | +| sendgrid_mail.py:1:19:1:25 | ControlFlowNode for request | sendgrid_mail.py:37:41:37:47 | ControlFlowNode for request | provenance | | +| sendgrid_mail.py:14:22:14:28 | ControlFlowNode for request | sendgrid_mail.py:14:22:14:49 | ControlFlowNode for Subscript | provenance | | +| sendgrid_mail.py:26:34:26:40 | ControlFlowNode for request | sendgrid_mail.py:26:34:26:61 | ControlFlowNode for Subscript | provenance | | +| sendgrid_mail.py:26:34:26:61 | ControlFlowNode for Subscript | sendgrid_mail.py:26:22:26:62 | ControlFlowNode for HtmlContent() | provenance | | +| sendgrid_mail.py:37:41:37:47 | ControlFlowNode for request | sendgrid_mail.py:37:41:37:68 | ControlFlowNode for Subscript | provenance | | +| sendgrid_via_mail_send_post_request_body_bad.py:3:19:3:25 | ControlFlowNode for ImportMember | sendgrid_via_mail_send_post_request_body_bad.py:3:19:3:25 | ControlFlowNode for request | provenance | | +| sendgrid_via_mail_send_post_request_body_bad.py:3:19:3:25 | ControlFlowNode for request | sendgrid_via_mail_send_post_request_body_bad.py:16:51:16:57 | ControlFlowNode for request | provenance | | +| sendgrid_via_mail_send_post_request_body_bad.py:3:19:3:25 | ControlFlowNode for request | sendgrid_via_mail_send_post_request_body_bad.py:27:50:27:56 | ControlFlowNode for request | provenance | | +| sendgrid_via_mail_send_post_request_body_bad.py:3:19:3:25 | ControlFlowNode for request | sendgrid_via_mail_send_post_request_body_bad.py:41:50:41:56 | ControlFlowNode for request | provenance | | +| sendgrid_via_mail_send_post_request_body_bad.py:16:51:16:57 | ControlFlowNode for request | sendgrid_via_mail_send_post_request_body_bad.py:16:26:16:79 | ControlFlowNode for Attribute() | provenance | | +| sendgrid_via_mail_send_post_request_body_bad.py:16:51:16:57 | ControlFlowNode for request | sendgrid_via_mail_send_post_request_body_bad.py:27:25:27:77 | ControlFlowNode for Attribute() | provenance | | +| sendgrid_via_mail_send_post_request_body_bad.py:16:51:16:57 | ControlFlowNode for request | sendgrid_via_mail_send_post_request_body_bad.py:41:25:41:79 | ControlFlowNode for Attribute() | provenance | | +| sendgrid_via_mail_send_post_request_body_bad.py:27:50:27:56 | ControlFlowNode for request | sendgrid_via_mail_send_post_request_body_bad.py:27:25:27:77 | ControlFlowNode for Attribute() | provenance | | +| sendgrid_via_mail_send_post_request_body_bad.py:27:50:27:56 | ControlFlowNode for request | sendgrid_via_mail_send_post_request_body_bad.py:41:25:41:79 | ControlFlowNode for Attribute() | provenance | | +| sendgrid_via_mail_send_post_request_body_bad.py:41:50:41:56 | ControlFlowNode for request | sendgrid_via_mail_send_post_request_body_bad.py:41:25:41:79 | ControlFlowNode for Attribute() | provenance | | +| smtplib_bad_subparts.py:2:26:2:32 | ControlFlowNode for ImportMember | smtplib_bad_subparts.py:2:26:2:32 | ControlFlowNode for request | provenance | | +| smtplib_bad_subparts.py:2:26:2:32 | ControlFlowNode for request | smtplib_bad_subparts.py:17:12:17:18 | ControlFlowNode for request | provenance | | +| smtplib_bad_subparts.py:17:5:17:8 | ControlFlowNode for name | smtplib_bad_subparts.py:20:5:20:8 | ControlFlowNode for html | provenance | | +| smtplib_bad_subparts.py:17:12:17:18 | ControlFlowNode for request | smtplib_bad_subparts.py:17:5:17:8 | ControlFlowNode for name | provenance | | +| smtplib_bad_subparts.py:20:5:20:8 | ControlFlowNode for html | smtplib_bad_subparts.py:24:22:24:25 | ControlFlowNode for html | provenance | | +| smtplib_bad_via_attach.py:2:26:2:32 | ControlFlowNode for ImportMember | smtplib_bad_via_attach.py:2:26:2:32 | ControlFlowNode for request | provenance | | +| smtplib_bad_via_attach.py:2:26:2:32 | ControlFlowNode for request | smtplib_bad_via_attach.py:20:12:20:18 | ControlFlowNode for request | provenance | | +| smtplib_bad_via_attach.py:20:5:20:8 | ControlFlowNode for name | smtplib_bad_via_attach.py:23:5:23:8 | ControlFlowNode for html | provenance | | +| smtplib_bad_via_attach.py:20:12:20:18 | ControlFlowNode for request | smtplib_bad_via_attach.py:20:5:20:8 | ControlFlowNode for name | provenance | | +| smtplib_bad_via_attach.py:23:5:23:8 | ControlFlowNode for html | smtplib_bad_via_attach.py:27:22:27:25 | ControlFlowNode for html | provenance | | nodes | django_mail.py:14:48:14:82 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | django_mail.py:23:30:23:64 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | diff --git a/python/ql/test/experimental/query-tests/Security/CWE-091-XsltInjection/XsltInjection.expected b/python/ql/test/experimental/query-tests/Security/CWE-091-XsltInjection/XsltInjection.expected index fba2ae1acdc..5f899a4d1a1 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-091-XsltInjection/XsltInjection.expected +++ b/python/ql/test/experimental/query-tests/Security/CWE-091-XsltInjection/XsltInjection.expected @@ -1,55 +1,55 @@ edges -| xslt.py:3:26:3:32 | ControlFlowNode for ImportMember | xslt.py:3:26:3:32 | ControlFlowNode for request | -| xslt.py:3:26:3:32 | ControlFlowNode for request | xslt.py:10:17:10:23 | ControlFlowNode for request | -| xslt.py:10:5:10:13 | ControlFlowNode for xsltQuery | xslt.py:11:27:11:35 | ControlFlowNode for xsltQuery | -| xslt.py:10:17:10:23 | ControlFlowNode for request | xslt.py:10:17:10:28 | ControlFlowNode for Attribute | -| xslt.py:10:17:10:28 | ControlFlowNode for Attribute | xslt.py:10:17:10:43 | ControlFlowNode for Attribute() | -| xslt.py:10:17:10:43 | ControlFlowNode for Attribute() | xslt.py:10:5:10:13 | ControlFlowNode for xsltQuery | -| xslt.py:11:5:11:13 | ControlFlowNode for xslt_root | xslt.py:14:29:14:37 | ControlFlowNode for xslt_root | -| xslt.py:11:17:11:36 | ControlFlowNode for Attribute() | xslt.py:11:5:11:13 | ControlFlowNode for xslt_root | -| xslt.py:11:27:11:35 | ControlFlowNode for xsltQuery | xslt.py:11:17:11:36 | ControlFlowNode for Attribute() | -| xsltInjection.py:3:26:3:32 | ControlFlowNode for ImportMember | xsltInjection.py:3:26:3:32 | ControlFlowNode for request | -| xsltInjection.py:3:26:3:32 | ControlFlowNode for request | xsltInjection.py:10:17:10:23 | ControlFlowNode for request | -| xsltInjection.py:3:26:3:32 | ControlFlowNode for request | xsltInjection.py:17:17:17:23 | ControlFlowNode for request | -| xsltInjection.py:3:26:3:32 | ControlFlowNode for request | xsltInjection.py:26:17:26:23 | ControlFlowNode for request | -| xsltInjection.py:3:26:3:32 | ControlFlowNode for request | xsltInjection.py:35:17:35:23 | ControlFlowNode for request | -| xsltInjection.py:3:26:3:32 | ControlFlowNode for request | xsltInjection.py:44:17:44:23 | ControlFlowNode for request | -| xsltInjection.py:10:5:10:13 | ControlFlowNode for xsltQuery | xsltInjection.py:11:27:11:35 | ControlFlowNode for xsltQuery | -| xsltInjection.py:10:17:10:23 | ControlFlowNode for request | xsltInjection.py:10:17:10:28 | ControlFlowNode for Attribute | -| xsltInjection.py:10:17:10:28 | ControlFlowNode for Attribute | xsltInjection.py:10:17:10:43 | ControlFlowNode for Attribute() | -| xsltInjection.py:10:17:10:43 | ControlFlowNode for Attribute() | xsltInjection.py:10:5:10:13 | ControlFlowNode for xsltQuery | -| xsltInjection.py:11:5:11:13 | ControlFlowNode for xslt_root | xsltInjection.py:12:28:12:36 | ControlFlowNode for xslt_root | -| xsltInjection.py:11:17:11:36 | ControlFlowNode for Attribute() | xsltInjection.py:11:5:11:13 | ControlFlowNode for xslt_root | -| xsltInjection.py:11:27:11:35 | ControlFlowNode for xsltQuery | xsltInjection.py:11:17:11:36 | ControlFlowNode for Attribute() | -| xsltInjection.py:17:5:17:13 | ControlFlowNode for xsltQuery | xsltInjection.py:18:27:18:35 | ControlFlowNode for xsltQuery | -| xsltInjection.py:17:17:17:23 | ControlFlowNode for request | xsltInjection.py:17:17:17:28 | ControlFlowNode for Attribute | -| xsltInjection.py:17:17:17:28 | ControlFlowNode for Attribute | xsltInjection.py:17:17:17:43 | ControlFlowNode for Attribute() | -| xsltInjection.py:17:17:17:43 | ControlFlowNode for Attribute() | xsltInjection.py:17:5:17:13 | ControlFlowNode for xsltQuery | -| xsltInjection.py:18:5:18:13 | ControlFlowNode for xslt_root | xsltInjection.py:21:29:21:37 | ControlFlowNode for xslt_root | -| xsltInjection.py:18:17:18:36 | ControlFlowNode for Attribute() | xsltInjection.py:18:5:18:13 | ControlFlowNode for xslt_root | -| xsltInjection.py:18:27:18:35 | ControlFlowNode for xsltQuery | xsltInjection.py:18:17:18:36 | ControlFlowNode for Attribute() | -| xsltInjection.py:26:5:26:13 | ControlFlowNode for xsltQuery | xsltInjection.py:27:27:27:35 | ControlFlowNode for xsltQuery | -| xsltInjection.py:26:17:26:23 | ControlFlowNode for request | xsltInjection.py:26:17:26:28 | ControlFlowNode for Attribute | -| xsltInjection.py:26:17:26:28 | ControlFlowNode for Attribute | xsltInjection.py:26:17:26:43 | ControlFlowNode for Attribute() | -| xsltInjection.py:26:17:26:43 | ControlFlowNode for Attribute() | xsltInjection.py:26:5:26:13 | ControlFlowNode for xsltQuery | -| xsltInjection.py:27:5:27:13 | ControlFlowNode for xslt_root | xsltInjection.py:31:24:31:32 | ControlFlowNode for xslt_root | -| xsltInjection.py:27:17:27:36 | ControlFlowNode for Attribute() | xsltInjection.py:27:5:27:13 | ControlFlowNode for xslt_root | -| xsltInjection.py:27:27:27:35 | ControlFlowNode for xsltQuery | xsltInjection.py:27:17:27:36 | ControlFlowNode for Attribute() | -| xsltInjection.py:35:5:35:13 | ControlFlowNode for xsltQuery | xsltInjection.py:36:34:36:42 | ControlFlowNode for xsltQuery | -| xsltInjection.py:35:17:35:23 | ControlFlowNode for request | xsltInjection.py:35:17:35:28 | ControlFlowNode for Attribute | -| xsltInjection.py:35:17:35:28 | ControlFlowNode for Attribute | xsltInjection.py:35:17:35:43 | ControlFlowNode for Attribute() | -| xsltInjection.py:35:17:35:43 | ControlFlowNode for Attribute() | xsltInjection.py:35:5:35:13 | ControlFlowNode for xsltQuery | -| xsltInjection.py:36:5:36:13 | ControlFlowNode for xslt_root | xsltInjection.py:40:24:40:32 | ControlFlowNode for xslt_root | -| xsltInjection.py:36:17:36:43 | ControlFlowNode for Attribute() | xsltInjection.py:36:5:36:13 | ControlFlowNode for xslt_root | -| xsltInjection.py:36:34:36:42 | ControlFlowNode for xsltQuery | xsltInjection.py:36:17:36:43 | ControlFlowNode for Attribute() | -| xsltInjection.py:44:5:44:13 | ControlFlowNode for xsltQuery | xsltInjection.py:45:5:45:15 | ControlFlowNode for xsltStrings | -| xsltInjection.py:44:17:44:23 | ControlFlowNode for request | xsltInjection.py:44:17:44:28 | ControlFlowNode for Attribute | -| xsltInjection.py:44:17:44:28 | ControlFlowNode for Attribute | xsltInjection.py:44:17:44:43 | ControlFlowNode for Attribute() | -| xsltInjection.py:44:17:44:43 | ControlFlowNode for Attribute() | xsltInjection.py:44:5:44:13 | ControlFlowNode for xsltQuery | -| xsltInjection.py:45:5:45:15 | ControlFlowNode for xsltStrings | xsltInjection.py:46:38:46:48 | ControlFlowNode for xsltStrings | -| xsltInjection.py:46:5:46:13 | ControlFlowNode for xslt_root | xsltInjection.py:50:24:50:32 | ControlFlowNode for xslt_root | -| xsltInjection.py:46:17:46:49 | ControlFlowNode for Attribute() | xsltInjection.py:46:5:46:13 | ControlFlowNode for xslt_root | -| xsltInjection.py:46:38:46:48 | ControlFlowNode for xsltStrings | xsltInjection.py:46:17:46:49 | ControlFlowNode for Attribute() | +| xslt.py:3:26:3:32 | ControlFlowNode for ImportMember | xslt.py:3:26:3:32 | ControlFlowNode for request | provenance | | +| xslt.py:3:26:3:32 | ControlFlowNode for request | xslt.py:10:17:10:23 | ControlFlowNode for request | provenance | | +| xslt.py:10:5:10:13 | ControlFlowNode for xsltQuery | xslt.py:11:27:11:35 | ControlFlowNode for xsltQuery | provenance | | +| xslt.py:10:17:10:23 | ControlFlowNode for request | xslt.py:10:17:10:28 | ControlFlowNode for Attribute | provenance | | +| xslt.py:10:17:10:28 | ControlFlowNode for Attribute | xslt.py:10:17:10:43 | ControlFlowNode for Attribute() | provenance | | +| xslt.py:10:17:10:43 | ControlFlowNode for Attribute() | xslt.py:10:5:10:13 | ControlFlowNode for xsltQuery | provenance | | +| xslt.py:11:5:11:13 | ControlFlowNode for xslt_root | xslt.py:14:29:14:37 | ControlFlowNode for xslt_root | provenance | | +| xslt.py:11:17:11:36 | ControlFlowNode for Attribute() | xslt.py:11:5:11:13 | ControlFlowNode for xslt_root | provenance | | +| xslt.py:11:27:11:35 | ControlFlowNode for xsltQuery | xslt.py:11:17:11:36 | ControlFlowNode for Attribute() | provenance | | +| xsltInjection.py:3:26:3:32 | ControlFlowNode for ImportMember | xsltInjection.py:3:26:3:32 | ControlFlowNode for request | provenance | | +| xsltInjection.py:3:26:3:32 | ControlFlowNode for request | xsltInjection.py:10:17:10:23 | ControlFlowNode for request | provenance | | +| xsltInjection.py:3:26:3:32 | ControlFlowNode for request | xsltInjection.py:17:17:17:23 | ControlFlowNode for request | provenance | | +| xsltInjection.py:3:26:3:32 | ControlFlowNode for request | xsltInjection.py:26:17:26:23 | ControlFlowNode for request | provenance | | +| xsltInjection.py:3:26:3:32 | ControlFlowNode for request | xsltInjection.py:35:17:35:23 | ControlFlowNode for request | provenance | | +| xsltInjection.py:3:26:3:32 | ControlFlowNode for request | xsltInjection.py:44:17:44:23 | ControlFlowNode for request | provenance | | +| xsltInjection.py:10:5:10:13 | ControlFlowNode for xsltQuery | xsltInjection.py:11:27:11:35 | ControlFlowNode for xsltQuery | provenance | | +| xsltInjection.py:10:17:10:23 | ControlFlowNode for request | xsltInjection.py:10:17:10:28 | ControlFlowNode for Attribute | provenance | | +| xsltInjection.py:10:17:10:28 | ControlFlowNode for Attribute | xsltInjection.py:10:17:10:43 | ControlFlowNode for Attribute() | provenance | | +| xsltInjection.py:10:17:10:43 | ControlFlowNode for Attribute() | xsltInjection.py:10:5:10:13 | ControlFlowNode for xsltQuery | provenance | | +| xsltInjection.py:11:5:11:13 | ControlFlowNode for xslt_root | xsltInjection.py:12:28:12:36 | ControlFlowNode for xslt_root | provenance | | +| xsltInjection.py:11:17:11:36 | ControlFlowNode for Attribute() | xsltInjection.py:11:5:11:13 | ControlFlowNode for xslt_root | provenance | | +| xsltInjection.py:11:27:11:35 | ControlFlowNode for xsltQuery | xsltInjection.py:11:17:11:36 | ControlFlowNode for Attribute() | provenance | | +| xsltInjection.py:17:5:17:13 | ControlFlowNode for xsltQuery | xsltInjection.py:18:27:18:35 | ControlFlowNode for xsltQuery | provenance | | +| xsltInjection.py:17:17:17:23 | ControlFlowNode for request | xsltInjection.py:17:17:17:28 | ControlFlowNode for Attribute | provenance | | +| xsltInjection.py:17:17:17:28 | ControlFlowNode for Attribute | xsltInjection.py:17:17:17:43 | ControlFlowNode for Attribute() | provenance | | +| xsltInjection.py:17:17:17:43 | ControlFlowNode for Attribute() | xsltInjection.py:17:5:17:13 | ControlFlowNode for xsltQuery | provenance | | +| xsltInjection.py:18:5:18:13 | ControlFlowNode for xslt_root | xsltInjection.py:21:29:21:37 | ControlFlowNode for xslt_root | provenance | | +| xsltInjection.py:18:17:18:36 | ControlFlowNode for Attribute() | xsltInjection.py:18:5:18:13 | ControlFlowNode for xslt_root | provenance | | +| xsltInjection.py:18:27:18:35 | ControlFlowNode for xsltQuery | xsltInjection.py:18:17:18:36 | ControlFlowNode for Attribute() | provenance | | +| xsltInjection.py:26:5:26:13 | ControlFlowNode for xsltQuery | xsltInjection.py:27:27:27:35 | ControlFlowNode for xsltQuery | provenance | | +| xsltInjection.py:26:17:26:23 | ControlFlowNode for request | xsltInjection.py:26:17:26:28 | ControlFlowNode for Attribute | provenance | | +| xsltInjection.py:26:17:26:28 | ControlFlowNode for Attribute | xsltInjection.py:26:17:26:43 | ControlFlowNode for Attribute() | provenance | | +| xsltInjection.py:26:17:26:43 | ControlFlowNode for Attribute() | xsltInjection.py:26:5:26:13 | ControlFlowNode for xsltQuery | provenance | | +| xsltInjection.py:27:5:27:13 | ControlFlowNode for xslt_root | xsltInjection.py:31:24:31:32 | ControlFlowNode for xslt_root | provenance | | +| xsltInjection.py:27:17:27:36 | ControlFlowNode for Attribute() | xsltInjection.py:27:5:27:13 | ControlFlowNode for xslt_root | provenance | | +| xsltInjection.py:27:27:27:35 | ControlFlowNode for xsltQuery | xsltInjection.py:27:17:27:36 | ControlFlowNode for Attribute() | provenance | | +| xsltInjection.py:35:5:35:13 | ControlFlowNode for xsltQuery | xsltInjection.py:36:34:36:42 | ControlFlowNode for xsltQuery | provenance | | +| xsltInjection.py:35:17:35:23 | ControlFlowNode for request | xsltInjection.py:35:17:35:28 | ControlFlowNode for Attribute | provenance | | +| xsltInjection.py:35:17:35:28 | ControlFlowNode for Attribute | xsltInjection.py:35:17:35:43 | ControlFlowNode for Attribute() | provenance | | +| xsltInjection.py:35:17:35:43 | ControlFlowNode for Attribute() | xsltInjection.py:35:5:35:13 | ControlFlowNode for xsltQuery | provenance | | +| xsltInjection.py:36:5:36:13 | ControlFlowNode for xslt_root | xsltInjection.py:40:24:40:32 | ControlFlowNode for xslt_root | provenance | | +| xsltInjection.py:36:17:36:43 | ControlFlowNode for Attribute() | xsltInjection.py:36:5:36:13 | ControlFlowNode for xslt_root | provenance | | +| xsltInjection.py:36:34:36:42 | ControlFlowNode for xsltQuery | xsltInjection.py:36:17:36:43 | ControlFlowNode for Attribute() | provenance | | +| xsltInjection.py:44:5:44:13 | ControlFlowNode for xsltQuery | xsltInjection.py:45:5:45:15 | ControlFlowNode for xsltStrings | provenance | | +| xsltInjection.py:44:17:44:23 | ControlFlowNode for request | xsltInjection.py:44:17:44:28 | ControlFlowNode for Attribute | provenance | | +| xsltInjection.py:44:17:44:28 | ControlFlowNode for Attribute | xsltInjection.py:44:17:44:43 | ControlFlowNode for Attribute() | provenance | | +| xsltInjection.py:44:17:44:43 | ControlFlowNode for Attribute() | xsltInjection.py:44:5:44:13 | ControlFlowNode for xsltQuery | provenance | | +| xsltInjection.py:45:5:45:15 | ControlFlowNode for xsltStrings | xsltInjection.py:46:38:46:48 | ControlFlowNode for xsltStrings | provenance | | +| xsltInjection.py:46:5:46:13 | ControlFlowNode for xslt_root | xsltInjection.py:50:24:50:32 | ControlFlowNode for xslt_root | provenance | | +| xsltInjection.py:46:17:46:49 | ControlFlowNode for Attribute() | xsltInjection.py:46:5:46:13 | ControlFlowNode for xslt_root | provenance | | +| xsltInjection.py:46:38:46:48 | ControlFlowNode for xsltStrings | xsltInjection.py:46:17:46:49 | ControlFlowNode for Attribute() | provenance | | nodes | xslt.py:3:26:3:32 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | | xslt.py:3:26:3:32 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | diff --git a/python/ql/test/experimental/query-tests/Security/CWE-113/HeaderInjection.expected b/python/ql/test/experimental/query-tests/Security/CWE-113/HeaderInjection.expected index 55a7c5de999..67144ed1199 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-113/HeaderInjection.expected +++ b/python/ql/test/experimental/query-tests/Security/CWE-113/HeaderInjection.expected @@ -1,21 +1,21 @@ edges -| django_bad.py:5:5:5:14 | ControlFlowNode for rfs_header | django_bad.py:7:40:7:49 | ControlFlowNode for rfs_header | -| django_bad.py:5:18:5:58 | ControlFlowNode for Attribute() | django_bad.py:5:5:5:14 | ControlFlowNode for rfs_header | -| django_bad.py:12:5:12:14 | ControlFlowNode for rfs_header | django_bad.py:14:30:14:39 | ControlFlowNode for rfs_header | -| django_bad.py:12:18:12:58 | ControlFlowNode for Attribute() | django_bad.py:12:5:12:14 | ControlFlowNode for rfs_header | -| flask_bad.py:1:29:1:35 | ControlFlowNode for ImportMember | flask_bad.py:1:29:1:35 | ControlFlowNode for request | -| flask_bad.py:1:29:1:35 | ControlFlowNode for request | flask_bad.py:9:18:9:24 | ControlFlowNode for request | -| flask_bad.py:1:29:1:35 | ControlFlowNode for request | flask_bad.py:19:18:19:24 | ControlFlowNode for request | -| flask_bad.py:1:29:1:35 | ControlFlowNode for request | flask_bad.py:27:18:27:24 | ControlFlowNode for request | -| flask_bad.py:1:29:1:35 | ControlFlowNode for request | flask_bad.py:35:18:35:24 | ControlFlowNode for request | -| flask_bad.py:9:5:9:14 | ControlFlowNode for rfs_header | flask_bad.py:12:31:12:40 | ControlFlowNode for rfs_header | -| flask_bad.py:9:18:9:24 | ControlFlowNode for request | flask_bad.py:9:5:9:14 | ControlFlowNode for rfs_header | -| flask_bad.py:19:5:19:14 | ControlFlowNode for rfs_header | flask_bad.py:21:38:21:47 | ControlFlowNode for rfs_header | -| flask_bad.py:19:18:19:24 | ControlFlowNode for request | flask_bad.py:19:5:19:14 | ControlFlowNode for rfs_header | -| flask_bad.py:27:5:27:14 | ControlFlowNode for rfs_header | flask_bad.py:29:34:29:43 | ControlFlowNode for rfs_header | -| flask_bad.py:27:18:27:24 | ControlFlowNode for request | flask_bad.py:27:5:27:14 | ControlFlowNode for rfs_header | -| flask_bad.py:35:5:35:14 | ControlFlowNode for rfs_header | flask_bad.py:38:24:38:33 | ControlFlowNode for rfs_header | -| flask_bad.py:35:18:35:24 | ControlFlowNode for request | flask_bad.py:35:5:35:14 | ControlFlowNode for rfs_header | +| django_bad.py:5:5:5:14 | ControlFlowNode for rfs_header | django_bad.py:7:40:7:49 | ControlFlowNode for rfs_header | provenance | | +| django_bad.py:5:18:5:58 | ControlFlowNode for Attribute() | django_bad.py:5:5:5:14 | ControlFlowNode for rfs_header | provenance | | +| django_bad.py:12:5:12:14 | ControlFlowNode for rfs_header | django_bad.py:14:30:14:39 | ControlFlowNode for rfs_header | provenance | | +| django_bad.py:12:18:12:58 | ControlFlowNode for Attribute() | django_bad.py:12:5:12:14 | ControlFlowNode for rfs_header | provenance | | +| flask_bad.py:1:29:1:35 | ControlFlowNode for ImportMember | flask_bad.py:1:29:1:35 | ControlFlowNode for request | provenance | | +| flask_bad.py:1:29:1:35 | ControlFlowNode for request | flask_bad.py:9:18:9:24 | ControlFlowNode for request | provenance | | +| flask_bad.py:1:29:1:35 | ControlFlowNode for request | flask_bad.py:19:18:19:24 | ControlFlowNode for request | provenance | | +| flask_bad.py:1:29:1:35 | ControlFlowNode for request | flask_bad.py:27:18:27:24 | ControlFlowNode for request | provenance | | +| flask_bad.py:1:29:1:35 | ControlFlowNode for request | flask_bad.py:35:18:35:24 | ControlFlowNode for request | provenance | | +| flask_bad.py:9:5:9:14 | ControlFlowNode for rfs_header | flask_bad.py:12:31:12:40 | ControlFlowNode for rfs_header | provenance | | +| flask_bad.py:9:18:9:24 | ControlFlowNode for request | flask_bad.py:9:5:9:14 | ControlFlowNode for rfs_header | provenance | | +| flask_bad.py:19:5:19:14 | ControlFlowNode for rfs_header | flask_bad.py:21:38:21:47 | ControlFlowNode for rfs_header | provenance | | +| flask_bad.py:19:18:19:24 | ControlFlowNode for request | flask_bad.py:19:5:19:14 | ControlFlowNode for rfs_header | provenance | | +| flask_bad.py:27:5:27:14 | ControlFlowNode for rfs_header | flask_bad.py:29:34:29:43 | ControlFlowNode for rfs_header | provenance | | +| flask_bad.py:27:18:27:24 | ControlFlowNode for request | flask_bad.py:27:5:27:14 | ControlFlowNode for rfs_header | provenance | | +| flask_bad.py:35:5:35:14 | ControlFlowNode for rfs_header | flask_bad.py:38:24:38:33 | ControlFlowNode for rfs_header | provenance | | +| flask_bad.py:35:18:35:24 | ControlFlowNode for request | flask_bad.py:35:5:35:14 | ControlFlowNode for rfs_header | provenance | | nodes | django_bad.py:5:5:5:14 | ControlFlowNode for rfs_header | semmle.label | ControlFlowNode for rfs_header | | django_bad.py:5:18:5:58 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | diff --git a/python/ql/test/experimental/query-tests/Security/CWE-1236/CsvInjection.expected b/python/ql/test/experimental/query-tests/Security/CWE-1236/CsvInjection.expected index 2fb925fb664..170dda187e9 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-1236/CsvInjection.expected +++ b/python/ql/test/experimental/query-tests/Security/CWE-1236/CsvInjection.expected @@ -1,16 +1,16 @@ edges -| csv_bad.py:9:19:9:25 | ControlFlowNode for ImportMember | csv_bad.py:9:19:9:25 | ControlFlowNode for request | -| csv_bad.py:9:19:9:25 | ControlFlowNode for request | csv_bad.py:16:16:16:22 | ControlFlowNode for request | -| csv_bad.py:9:19:9:25 | ControlFlowNode for request | csv_bad.py:24:16:24:22 | ControlFlowNode for request | -| csv_bad.py:16:5:16:12 | ControlFlowNode for csv_data | csv_bad.py:18:24:18:31 | ControlFlowNode for csv_data | -| csv_bad.py:16:5:16:12 | ControlFlowNode for csv_data | csv_bad.py:19:25:19:32 | ControlFlowNode for csv_data | -| csv_bad.py:16:16:16:22 | ControlFlowNode for request | csv_bad.py:16:16:16:27 | ControlFlowNode for Attribute | -| csv_bad.py:16:16:16:27 | ControlFlowNode for Attribute | csv_bad.py:16:16:16:38 | ControlFlowNode for Attribute() | -| csv_bad.py:16:16:16:38 | ControlFlowNode for Attribute() | csv_bad.py:16:5:16:12 | ControlFlowNode for csv_data | -| csv_bad.py:24:5:24:12 | ControlFlowNode for csv_data | csv_bad.py:25:46:25:53 | ControlFlowNode for csv_data | -| csv_bad.py:24:16:24:22 | ControlFlowNode for request | csv_bad.py:24:16:24:27 | ControlFlowNode for Attribute | -| csv_bad.py:24:16:24:27 | ControlFlowNode for Attribute | csv_bad.py:24:16:24:38 | ControlFlowNode for Attribute() | -| csv_bad.py:24:16:24:38 | ControlFlowNode for Attribute() | csv_bad.py:24:5:24:12 | ControlFlowNode for csv_data | +| csv_bad.py:9:19:9:25 | ControlFlowNode for ImportMember | csv_bad.py:9:19:9:25 | ControlFlowNode for request | provenance | | +| csv_bad.py:9:19:9:25 | ControlFlowNode for request | csv_bad.py:16:16:16:22 | ControlFlowNode for request | provenance | | +| csv_bad.py:9:19:9:25 | ControlFlowNode for request | csv_bad.py:24:16:24:22 | ControlFlowNode for request | provenance | | +| csv_bad.py:16:5:16:12 | ControlFlowNode for csv_data | csv_bad.py:18:24:18:31 | ControlFlowNode for csv_data | provenance | | +| csv_bad.py:16:5:16:12 | ControlFlowNode for csv_data | csv_bad.py:19:25:19:32 | ControlFlowNode for csv_data | provenance | | +| csv_bad.py:16:16:16:22 | ControlFlowNode for request | csv_bad.py:16:16:16:27 | ControlFlowNode for Attribute | provenance | | +| csv_bad.py:16:16:16:27 | ControlFlowNode for Attribute | csv_bad.py:16:16:16:38 | ControlFlowNode for Attribute() | provenance | | +| csv_bad.py:16:16:16:38 | ControlFlowNode for Attribute() | csv_bad.py:16:5:16:12 | ControlFlowNode for csv_data | provenance | | +| csv_bad.py:24:5:24:12 | ControlFlowNode for csv_data | csv_bad.py:25:46:25:53 | ControlFlowNode for csv_data | provenance | | +| csv_bad.py:24:16:24:22 | ControlFlowNode for request | csv_bad.py:24:16:24:27 | ControlFlowNode for Attribute | provenance | | +| csv_bad.py:24:16:24:27 | ControlFlowNode for Attribute | csv_bad.py:24:16:24:38 | ControlFlowNode for Attribute() | provenance | | +| csv_bad.py:24:16:24:38 | ControlFlowNode for Attribute() | csv_bad.py:24:5:24:12 | ControlFlowNode for csv_data | provenance | | nodes | csv_bad.py:9:19:9:25 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | | csv_bad.py:9:19:9:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | diff --git a/python/ql/test/experimental/query-tests/Security/CWE-176/UnicodeBypassValidation.expected b/python/ql/test/experimental/query-tests/Security/CWE-176/UnicodeBypassValidation.expected index 24f62f1a107..aabdf46044e 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-176/UnicodeBypassValidation.expected +++ b/python/ql/test/experimental/query-tests/Security/CWE-176/UnicodeBypassValidation.expected @@ -1,17 +1,17 @@ edges -| samples.py:2:26:2:32 | ControlFlowNode for ImportMember | samples.py:2:26:2:32 | ControlFlowNode for request | -| samples.py:2:26:2:32 | ControlFlowNode for request | samples.py:9:25:9:31 | ControlFlowNode for request | -| samples.py:2:26:2:32 | ControlFlowNode for request | samples.py:16:25:16:31 | ControlFlowNode for request | -| samples.py:9:5:9:14 | ControlFlowNode for user_input | samples.py:10:59:10:68 | ControlFlowNode for user_input | -| samples.py:9:18:9:47 | ControlFlowNode for escape() | samples.py:9:5:9:14 | ControlFlowNode for user_input | -| samples.py:9:25:9:31 | ControlFlowNode for request | samples.py:9:25:9:36 | ControlFlowNode for Attribute | -| samples.py:9:25:9:36 | ControlFlowNode for Attribute | samples.py:9:25:9:46 | ControlFlowNode for Attribute() | -| samples.py:9:25:9:46 | ControlFlowNode for Attribute() | samples.py:9:18:9:47 | ControlFlowNode for escape() | -| samples.py:16:5:16:14 | ControlFlowNode for user_input | samples.py:20:62:20:71 | ControlFlowNode for user_input | -| samples.py:16:18:16:47 | ControlFlowNode for escape() | samples.py:16:5:16:14 | ControlFlowNode for user_input | -| samples.py:16:25:16:31 | ControlFlowNode for request | samples.py:16:25:16:36 | ControlFlowNode for Attribute | -| samples.py:16:25:16:36 | ControlFlowNode for Attribute | samples.py:16:25:16:46 | ControlFlowNode for Attribute() | -| samples.py:16:25:16:46 | ControlFlowNode for Attribute() | samples.py:16:18:16:47 | ControlFlowNode for escape() | +| samples.py:2:26:2:32 | ControlFlowNode for ImportMember | samples.py:2:26:2:32 | ControlFlowNode for request | provenance | | +| samples.py:2:26:2:32 | ControlFlowNode for request | samples.py:9:25:9:31 | ControlFlowNode for request | provenance | | +| samples.py:2:26:2:32 | ControlFlowNode for request | samples.py:16:25:16:31 | ControlFlowNode for request | provenance | | +| samples.py:9:5:9:14 | ControlFlowNode for user_input | samples.py:10:59:10:68 | ControlFlowNode for user_input | provenance | | +| samples.py:9:18:9:47 | ControlFlowNode for escape() | samples.py:9:5:9:14 | ControlFlowNode for user_input | provenance | | +| samples.py:9:25:9:31 | ControlFlowNode for request | samples.py:9:25:9:36 | ControlFlowNode for Attribute | provenance | | +| samples.py:9:25:9:36 | ControlFlowNode for Attribute | samples.py:9:25:9:46 | ControlFlowNode for Attribute() | provenance | | +| samples.py:9:25:9:46 | ControlFlowNode for Attribute() | samples.py:9:18:9:47 | ControlFlowNode for escape() | provenance | | +| samples.py:16:5:16:14 | ControlFlowNode for user_input | samples.py:20:62:20:71 | ControlFlowNode for user_input | provenance | | +| samples.py:16:18:16:47 | ControlFlowNode for escape() | samples.py:16:5:16:14 | ControlFlowNode for user_input | provenance | | +| samples.py:16:25:16:31 | ControlFlowNode for request | samples.py:16:25:16:36 | ControlFlowNode for Attribute | provenance | | +| samples.py:16:25:16:36 | ControlFlowNode for Attribute | samples.py:16:25:16:46 | ControlFlowNode for Attribute() | provenance | | +| samples.py:16:25:16:46 | ControlFlowNode for Attribute() | samples.py:16:18:16:47 | ControlFlowNode for escape() | provenance | | nodes | samples.py:2:26:2:32 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | | samples.py:2:26:2:32 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | diff --git a/python/ql/test/experimental/query-tests/Security/CWE-208/TimingAttackAgainstHash/PossibleTimingAttackAgainstHash.expected b/python/ql/test/experimental/query-tests/Security/CWE-208/TimingAttackAgainstHash/PossibleTimingAttackAgainstHash.expected index c0fbf3b7eab..8846e908798 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-208/TimingAttackAgainstHash/PossibleTimingAttackAgainstHash.expected +++ b/python/ql/test/experimental/query-tests/Security/CWE-208/TimingAttackAgainstHash/PossibleTimingAttackAgainstHash.expected @@ -1,7 +1,7 @@ edges -| TimingAttackAgainstHash.py:26:5:26:13 | ControlFlowNode for signature | TimingAttackAgainstHash.py:27:24:27:32 | ControlFlowNode for signature | -| TimingAttackAgainstHash.py:26:17:26:41 | ControlFlowNode for Attribute() | TimingAttackAgainstHash.py:26:5:26:13 | ControlFlowNode for signature | -| TimingAttackAgainstHash.py:30:12:30:47 | ControlFlowNode for Attribute() | TimingAttackAgainstHash.py:37:19:37:48 | ControlFlowNode for sign() | +| TimingAttackAgainstHash.py:26:5:26:13 | ControlFlowNode for signature | TimingAttackAgainstHash.py:27:24:27:32 | ControlFlowNode for signature | provenance | | +| TimingAttackAgainstHash.py:26:17:26:41 | ControlFlowNode for Attribute() | TimingAttackAgainstHash.py:26:5:26:13 | ControlFlowNode for signature | provenance | | +| TimingAttackAgainstHash.py:30:12:30:47 | ControlFlowNode for Attribute() | TimingAttackAgainstHash.py:37:19:37:48 | ControlFlowNode for sign() | provenance | | nodes | TimingAttackAgainstHash.py:26:5:26:13 | ControlFlowNode for signature | semmle.label | ControlFlowNode for signature | | TimingAttackAgainstHash.py:26:17:26:41 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | diff --git a/python/ql/test/experimental/query-tests/Security/CWE-208/TimingAttackAgainstSensitiveInfo/PossibleTimingAttackAgainstSensitiveInfo.expected b/python/ql/test/experimental/query-tests/Security/CWE-208/TimingAttackAgainstSensitiveInfo/PossibleTimingAttackAgainstSensitiveInfo.expected index 724913de062..80b07434896 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-208/TimingAttackAgainstSensitiveInfo/PossibleTimingAttackAgainstSensitiveInfo.expected +++ b/python/ql/test/experimental/query-tests/Security/CWE-208/TimingAttackAgainstSensitiveInfo/PossibleTimingAttackAgainstSensitiveInfo.expected @@ -1,5 +1,5 @@ edges -| TimingAttackAgainstSensitiveInfo.py:15:9:15:16 | ControlFlowNode for password | TimingAttackAgainstSensitiveInfo.py:16:16:16:23 | ControlFlowNode for password | +| TimingAttackAgainstSensitiveInfo.py:15:9:15:16 | ControlFlowNode for password | TimingAttackAgainstSensitiveInfo.py:16:16:16:23 | ControlFlowNode for password | provenance | | nodes | TimingAttackAgainstSensitiveInfo.py:15:9:15:16 | ControlFlowNode for password | semmle.label | ControlFlowNode for password | | TimingAttackAgainstSensitiveInfo.py:16:16:16:23 | ControlFlowNode for password | semmle.label | ControlFlowNode for password | diff --git a/python/ql/test/experimental/query-tests/Security/CWE-287-ConstantSecretKey/ConstantSecretKey.expected b/python/ql/test/experimental/query-tests/Security/CWE-287-ConstantSecretKey/ConstantSecretKey.expected index eebb4f2cf1f..d339e0adc21 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-287-ConstantSecretKey/ConstantSecretKey.expected +++ b/python/ql/test/experimental/query-tests/Security/CWE-287-ConstantSecretKey/ConstantSecretKey.expected @@ -1,19 +1,19 @@ edges -| app_unsafe.py:4:1:4:9 | ControlFlowNode for aConstant | app_unsafe.py:5:28:5:36 | ControlFlowNode for aConstant | -| app_unsafe.py:4:1:4:9 | ControlFlowNode for aConstant | app_unsafe.py:6:18:6:26 | ControlFlowNode for aConstant | -| app_unsafe.py:4:1:4:9 | ControlFlowNode for aConstant | app_unsafe.py:7:30:7:38 | ControlFlowNode for aConstant | -| app_unsafe.py:4:1:4:9 | ControlFlowNode for aConstant | app_unsafe.py:8:36:8:44 | ControlFlowNode for aConstant | -| app_unsafe.py:4:13:4:23 | ControlFlowNode for Str | app_unsafe.py:4:1:4:9 | ControlFlowNode for aConstant | -| config.py:7:1:7:9 | ControlFlowNode for aConstant | config.py:12:18:12:26 | ControlFlowNode for aConstant | -| config.py:7:1:7:9 | ControlFlowNode for aConstant | config.py:12:18:12:26 | ControlFlowNode for aConstant | -| config.py:7:1:7:9 | ControlFlowNode for aConstant | config.py:17:38:17:46 | ControlFlowNode for aConstant | -| config.py:7:1:7:9 | ControlFlowNode for aConstant | config.py:18:43:18:51 | ControlFlowNode for aConstant | -| config.py:7:13:7:23 | ControlFlowNode for Str | config.py:7:1:7:9 | ControlFlowNode for aConstant | -| config.py:12:18:12:26 | ControlFlowNode for aConstant | config.py:17:38:17:46 | ControlFlowNode for aConstant | -| config.py:12:18:12:26 | ControlFlowNode for aConstant | config.py:18:43:18:51 | ControlFlowNode for aConstant | -| config.py:17:38:17:46 | ControlFlowNode for aConstant | config.py:17:18:17:47 | ControlFlowNode for Attribute() | -| config.py:17:38:17:46 | ControlFlowNode for aConstant | config.py:18:43:18:51 | ControlFlowNode for aConstant | -| config.py:18:43:18:51 | ControlFlowNode for aConstant | config.py:18:18:18:52 | ControlFlowNode for Attribute() | +| app_unsafe.py:4:1:4:9 | ControlFlowNode for aConstant | app_unsafe.py:5:28:5:36 | ControlFlowNode for aConstant | provenance | | +| app_unsafe.py:4:1:4:9 | ControlFlowNode for aConstant | app_unsafe.py:6:18:6:26 | ControlFlowNode for aConstant | provenance | | +| app_unsafe.py:4:1:4:9 | ControlFlowNode for aConstant | app_unsafe.py:7:30:7:38 | ControlFlowNode for aConstant | provenance | | +| app_unsafe.py:4:1:4:9 | ControlFlowNode for aConstant | app_unsafe.py:8:36:8:44 | ControlFlowNode for aConstant | provenance | | +| app_unsafe.py:4:13:4:23 | ControlFlowNode for Str | app_unsafe.py:4:1:4:9 | ControlFlowNode for aConstant | provenance | | +| config.py:7:1:7:9 | ControlFlowNode for aConstant | config.py:12:18:12:26 | ControlFlowNode for aConstant | provenance | | +| config.py:7:1:7:9 | ControlFlowNode for aConstant | config.py:12:18:12:26 | ControlFlowNode for aConstant | provenance | | +| config.py:7:1:7:9 | ControlFlowNode for aConstant | config.py:17:38:17:46 | ControlFlowNode for aConstant | provenance | | +| config.py:7:1:7:9 | ControlFlowNode for aConstant | config.py:18:43:18:51 | ControlFlowNode for aConstant | provenance | | +| config.py:7:13:7:23 | ControlFlowNode for Str | config.py:7:1:7:9 | ControlFlowNode for aConstant | provenance | | +| config.py:12:18:12:26 | ControlFlowNode for aConstant | config.py:17:38:17:46 | ControlFlowNode for aConstant | provenance | | +| config.py:12:18:12:26 | ControlFlowNode for aConstant | config.py:18:43:18:51 | ControlFlowNode for aConstant | provenance | | +| config.py:17:38:17:46 | ControlFlowNode for aConstant | config.py:17:18:17:47 | ControlFlowNode for Attribute() | provenance | | +| config.py:17:38:17:46 | ControlFlowNode for aConstant | config.py:18:43:18:51 | ControlFlowNode for aConstant | provenance | | +| config.py:18:43:18:51 | ControlFlowNode for aConstant | config.py:18:18:18:52 | ControlFlowNode for Attribute() | provenance | | nodes | app_safe.py:5:28:5:37 | ControlFlowNode for Str | semmle.label | ControlFlowNode for Str | | app_unsafe.py:4:1:4:9 | ControlFlowNode for aConstant | semmle.label | ControlFlowNode for aConstant | diff --git a/python/ql/test/experimental/query-tests/Security/CWE-327-UnsafeUsageOfClientSideEncryptionVersion/UnsafeUsageOfClientSideEncryptionVersion.expected b/python/ql/test/experimental/query-tests/Security/CWE-327-UnsafeUsageOfClientSideEncryptionVersion/UnsafeUsageOfClientSideEncryptionVersion.expected index 0bed45a110f..d97d5510dfa 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-327-UnsafeUsageOfClientSideEncryptionVersion/UnsafeUsageOfClientSideEncryptionVersion.expected +++ b/python/ql/test/experimental/query-tests/Security/CWE-327-UnsafeUsageOfClientSideEncryptionVersion/UnsafeUsageOfClientSideEncryptionVersion.expected @@ -1,45 +1,45 @@ edges -| test.py:3:1:3:3 | ControlFlowNode for BSC | test.py:7:19:7:21 | ControlFlowNode for BSC | -| test.py:3:1:3:3 | ControlFlowNode for BSC | test.py:35:19:35:21 | ControlFlowNode for BSC | -| test.py:3:1:3:3 | ControlFlowNode for BSC | test.py:66:19:66:21 | ControlFlowNode for BSC | -| test.py:3:7:3:51 | ControlFlowNode for Attribute() | test.py:3:1:3:3 | ControlFlowNode for BSC | -| test.py:7:5:7:15 | ControlFlowNode for blob_client | test.py:8:5:8:15 | ControlFlowNode for blob_client | -| test.py:7:19:7:21 | ControlFlowNode for BSC | test.py:7:19:7:42 | ControlFlowNode for Attribute() | -| test.py:7:19:7:42 | ControlFlowNode for Attribute() | test.py:7:5:7:15 | ControlFlowNode for blob_client | -| test.py:8:5:8:15 | ControlFlowNode for blob_client | test.py:9:5:9:15 | ControlFlowNode for blob_client | -| test.py:9:5:9:15 | ControlFlowNode for blob_client | test.py:9:5:9:15 | [post] ControlFlowNode for blob_client | -| test.py:9:5:9:15 | [post] ControlFlowNode for blob_client | test.py:11:9:11:19 | ControlFlowNode for blob_client | -| test.py:15:5:15:23 | ControlFlowNode for blob_service_client | test.py:16:5:16:23 | ControlFlowNode for blob_service_client | -| test.py:15:27:15:71 | ControlFlowNode for Attribute() | test.py:15:5:15:23 | ControlFlowNode for blob_service_client | -| test.py:16:5:16:23 | ControlFlowNode for blob_service_client | test.py:17:5:17:23 | ControlFlowNode for blob_service_client | -| test.py:17:5:17:23 | ControlFlowNode for blob_service_client | test.py:17:5:17:23 | [post] ControlFlowNode for blob_service_client | -| test.py:17:5:17:23 | [post] ControlFlowNode for blob_service_client | test.py:19:19:19:37 | ControlFlowNode for blob_service_client | -| test.py:19:5:19:15 | ControlFlowNode for blob_client | test.py:21:9:21:19 | ControlFlowNode for blob_client | -| test.py:19:19:19:37 | ControlFlowNode for blob_service_client | test.py:19:19:19:58 | ControlFlowNode for Attribute() | -| test.py:19:19:19:58 | ControlFlowNode for Attribute() | test.py:19:5:19:15 | ControlFlowNode for blob_client | -| test.py:25:5:25:20 | ControlFlowNode for container_client | test.py:26:5:26:20 | ControlFlowNode for container_client | -| test.py:25:24:25:66 | ControlFlowNode for Attribute() | test.py:25:5:25:20 | ControlFlowNode for container_client | -| test.py:26:5:26:20 | ControlFlowNode for container_client | test.py:27:5:27:20 | ControlFlowNode for container_client | -| test.py:27:5:27:20 | ControlFlowNode for container_client | test.py:27:5:27:20 | [post] ControlFlowNode for container_client | -| test.py:27:5:27:20 | [post] ControlFlowNode for container_client | test.py:29:19:29:34 | ControlFlowNode for container_client | -| test.py:29:5:29:15 | ControlFlowNode for blob_client | test.py:31:9:31:19 | ControlFlowNode for blob_client | -| test.py:29:19:29:34 | ControlFlowNode for container_client | test.py:29:19:29:55 | ControlFlowNode for Attribute() | -| test.py:29:19:29:55 | ControlFlowNode for Attribute() | test.py:29:5:29:15 | ControlFlowNode for blob_client | -| test.py:35:5:35:15 | ControlFlowNode for blob_client | test.py:36:5:36:15 | ControlFlowNode for blob_client | -| test.py:35:19:35:21 | ControlFlowNode for BSC | test.py:35:19:35:42 | ControlFlowNode for Attribute() | -| test.py:35:19:35:42 | ControlFlowNode for Attribute() | test.py:35:5:35:15 | ControlFlowNode for blob_client | -| test.py:36:5:36:15 | ControlFlowNode for blob_client | test.py:37:5:37:15 | ControlFlowNode for blob_client | -| test.py:37:5:37:15 | ControlFlowNode for blob_client | test.py:37:5:37:15 | [post] ControlFlowNode for blob_client | -| test.py:37:5:37:15 | [post] ControlFlowNode for blob_client | test.py:43:9:43:19 | ControlFlowNode for blob_client | -| test.py:66:5:66:15 | ControlFlowNode for blob_client | test.py:67:5:67:15 | ControlFlowNode for blob_client | -| test.py:66:19:66:21 | ControlFlowNode for BSC | test.py:66:19:66:42 | ControlFlowNode for Attribute() | -| test.py:66:19:66:42 | ControlFlowNode for Attribute() | test.py:66:5:66:15 | ControlFlowNode for blob_client | -| test.py:67:5:67:15 | ControlFlowNode for blob_client | test.py:68:5:68:15 | ControlFlowNode for blob_client | -| test.py:68:5:68:15 | ControlFlowNode for blob_client | test.py:68:5:68:15 | [post] ControlFlowNode for blob_client | -| test.py:68:5:68:15 | [post] ControlFlowNode for blob_client | test.py:69:12:69:22 | ControlFlowNode for blob_client | -| test.py:69:12:69:22 | ControlFlowNode for blob_client | test.py:73:10:73:33 | ControlFlowNode for get_unsafe_blob_client() | -| test.py:73:5:73:6 | ControlFlowNode for bc | test.py:75:9:75:10 | ControlFlowNode for bc | -| test.py:73:10:73:33 | ControlFlowNode for get_unsafe_blob_client() | test.py:73:5:73:6 | ControlFlowNode for bc | +| test.py:3:1:3:3 | ControlFlowNode for BSC | test.py:7:19:7:21 | ControlFlowNode for BSC | provenance | | +| test.py:3:1:3:3 | ControlFlowNode for BSC | test.py:35:19:35:21 | ControlFlowNode for BSC | provenance | | +| test.py:3:1:3:3 | ControlFlowNode for BSC | test.py:66:19:66:21 | ControlFlowNode for BSC | provenance | | +| test.py:3:7:3:51 | ControlFlowNode for Attribute() | test.py:3:1:3:3 | ControlFlowNode for BSC | provenance | | +| test.py:7:5:7:15 | ControlFlowNode for blob_client | test.py:8:5:8:15 | ControlFlowNode for blob_client | provenance | | +| test.py:7:19:7:21 | ControlFlowNode for BSC | test.py:7:19:7:42 | ControlFlowNode for Attribute() | provenance | | +| test.py:7:19:7:42 | ControlFlowNode for Attribute() | test.py:7:5:7:15 | ControlFlowNode for blob_client | provenance | | +| test.py:8:5:8:15 | ControlFlowNode for blob_client | test.py:9:5:9:15 | ControlFlowNode for blob_client | provenance | | +| test.py:9:5:9:15 | ControlFlowNode for blob_client | test.py:9:5:9:15 | [post] ControlFlowNode for blob_client | provenance | | +| test.py:9:5:9:15 | [post] ControlFlowNode for blob_client | test.py:11:9:11:19 | ControlFlowNode for blob_client | provenance | | +| test.py:15:5:15:23 | ControlFlowNode for blob_service_client | test.py:16:5:16:23 | ControlFlowNode for blob_service_client | provenance | | +| test.py:15:27:15:71 | ControlFlowNode for Attribute() | test.py:15:5:15:23 | ControlFlowNode for blob_service_client | provenance | | +| test.py:16:5:16:23 | ControlFlowNode for blob_service_client | test.py:17:5:17:23 | ControlFlowNode for blob_service_client | provenance | | +| test.py:17:5:17:23 | ControlFlowNode for blob_service_client | test.py:17:5:17:23 | [post] ControlFlowNode for blob_service_client | provenance | | +| test.py:17:5:17:23 | [post] ControlFlowNode for blob_service_client | test.py:19:19:19:37 | ControlFlowNode for blob_service_client | provenance | | +| test.py:19:5:19:15 | ControlFlowNode for blob_client | test.py:21:9:21:19 | ControlFlowNode for blob_client | provenance | | +| test.py:19:19:19:37 | ControlFlowNode for blob_service_client | test.py:19:19:19:58 | ControlFlowNode for Attribute() | provenance | | +| test.py:19:19:19:58 | ControlFlowNode for Attribute() | test.py:19:5:19:15 | ControlFlowNode for blob_client | provenance | | +| test.py:25:5:25:20 | ControlFlowNode for container_client | test.py:26:5:26:20 | ControlFlowNode for container_client | provenance | | +| test.py:25:24:25:66 | ControlFlowNode for Attribute() | test.py:25:5:25:20 | ControlFlowNode for container_client | provenance | | +| test.py:26:5:26:20 | ControlFlowNode for container_client | test.py:27:5:27:20 | ControlFlowNode for container_client | provenance | | +| test.py:27:5:27:20 | ControlFlowNode for container_client | test.py:27:5:27:20 | [post] ControlFlowNode for container_client | provenance | | +| test.py:27:5:27:20 | [post] ControlFlowNode for container_client | test.py:29:19:29:34 | ControlFlowNode for container_client | provenance | | +| test.py:29:5:29:15 | ControlFlowNode for blob_client | test.py:31:9:31:19 | ControlFlowNode for blob_client | provenance | | +| test.py:29:19:29:34 | ControlFlowNode for container_client | test.py:29:19:29:55 | ControlFlowNode for Attribute() | provenance | | +| test.py:29:19:29:55 | ControlFlowNode for Attribute() | test.py:29:5:29:15 | ControlFlowNode for blob_client | provenance | | +| test.py:35:5:35:15 | ControlFlowNode for blob_client | test.py:36:5:36:15 | ControlFlowNode for blob_client | provenance | | +| test.py:35:19:35:21 | ControlFlowNode for BSC | test.py:35:19:35:42 | ControlFlowNode for Attribute() | provenance | | +| test.py:35:19:35:42 | ControlFlowNode for Attribute() | test.py:35:5:35:15 | ControlFlowNode for blob_client | provenance | | +| test.py:36:5:36:15 | ControlFlowNode for blob_client | test.py:37:5:37:15 | ControlFlowNode for blob_client | provenance | | +| test.py:37:5:37:15 | ControlFlowNode for blob_client | test.py:37:5:37:15 | [post] ControlFlowNode for blob_client | provenance | | +| test.py:37:5:37:15 | [post] ControlFlowNode for blob_client | test.py:43:9:43:19 | ControlFlowNode for blob_client | provenance | | +| test.py:66:5:66:15 | ControlFlowNode for blob_client | test.py:67:5:67:15 | ControlFlowNode for blob_client | provenance | | +| test.py:66:19:66:21 | ControlFlowNode for BSC | test.py:66:19:66:42 | ControlFlowNode for Attribute() | provenance | | +| test.py:66:19:66:42 | ControlFlowNode for Attribute() | test.py:66:5:66:15 | ControlFlowNode for blob_client | provenance | | +| test.py:67:5:67:15 | ControlFlowNode for blob_client | test.py:68:5:68:15 | ControlFlowNode for blob_client | provenance | | +| test.py:68:5:68:15 | ControlFlowNode for blob_client | test.py:68:5:68:15 | [post] ControlFlowNode for blob_client | provenance | | +| test.py:68:5:68:15 | [post] ControlFlowNode for blob_client | test.py:69:12:69:22 | ControlFlowNode for blob_client | provenance | | +| test.py:69:12:69:22 | ControlFlowNode for blob_client | test.py:73:10:73:33 | ControlFlowNode for get_unsafe_blob_client() | provenance | | +| test.py:73:5:73:6 | ControlFlowNode for bc | test.py:75:9:75:10 | ControlFlowNode for bc | provenance | | +| test.py:73:10:73:33 | ControlFlowNode for get_unsafe_blob_client() | test.py:73:5:73:6 | ControlFlowNode for bc | provenance | | nodes | test.py:3:1:3:3 | ControlFlowNode for BSC | semmle.label | ControlFlowNode for BSC | | test.py:3:7:3:51 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | diff --git a/python/ql/test/experimental/query-tests/Security/CWE-348/ClientSuppliedIpUsedInSecurityCheck.expected b/python/ql/test/experimental/query-tests/Security/CWE-348/ClientSuppliedIpUsedInSecurityCheck.expected index 5bfe6e64917..1d529f3b3ea 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-348/ClientSuppliedIpUsedInSecurityCheck.expected +++ b/python/ql/test/experimental/query-tests/Security/CWE-348/ClientSuppliedIpUsedInSecurityCheck.expected @@ -1,10 +1,10 @@ edges -| flask_bad.py:13:5:13:13 | ControlFlowNode for client_ip | flask_bad.py:14:12:14:20 | ControlFlowNode for client_ip | -| flask_bad.py:13:17:13:54 | ControlFlowNode for Attribute() | flask_bad.py:13:5:13:13 | ControlFlowNode for client_ip | -| flask_bad.py:20:5:20:13 | ControlFlowNode for client_ip | flask_bad.py:21:12:21:20 | ControlFlowNode for client_ip | -| flask_bad.py:20:17:20:54 | ControlFlowNode for Attribute() | flask_bad.py:20:5:20:13 | ControlFlowNode for client_ip | -| tornado_bad.py:22:13:22:21 | ControlFlowNode for client_ip | tornado_bad.py:23:16:23:24 | ControlFlowNode for client_ip | -| tornado_bad.py:22:25:22:69 | ControlFlowNode for Attribute() | tornado_bad.py:22:13:22:21 | ControlFlowNode for client_ip | +| flask_bad.py:13:5:13:13 | ControlFlowNode for client_ip | flask_bad.py:14:12:14:20 | ControlFlowNode for client_ip | provenance | | +| flask_bad.py:13:17:13:54 | ControlFlowNode for Attribute() | flask_bad.py:13:5:13:13 | ControlFlowNode for client_ip | provenance | | +| flask_bad.py:20:5:20:13 | ControlFlowNode for client_ip | flask_bad.py:21:12:21:20 | ControlFlowNode for client_ip | provenance | | +| flask_bad.py:20:17:20:54 | ControlFlowNode for Attribute() | flask_bad.py:20:5:20:13 | ControlFlowNode for client_ip | provenance | | +| tornado_bad.py:22:13:22:21 | ControlFlowNode for client_ip | tornado_bad.py:23:16:23:24 | ControlFlowNode for client_ip | provenance | | +| tornado_bad.py:22:25:22:69 | ControlFlowNode for Attribute() | tornado_bad.py:22:13:22:21 | ControlFlowNode for client_ip | provenance | | nodes | flask_bad.py:13:5:13:13 | ControlFlowNode for client_ip | semmle.label | ControlFlowNode for client_ip | | flask_bad.py:13:17:13:54 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | diff --git a/python/ql/test/experimental/query-tests/Security/CWE-522/LdapInsecureAuth.expected b/python/ql/test/experimental/query-tests/Security/CWE-522/LdapInsecureAuth.expected index a4c97c8ead7..6ca5069e476 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-522/LdapInsecureAuth.expected +++ b/python/ql/test/experimental/query-tests/Security/CWE-522/LdapInsecureAuth.expected @@ -1,14 +1,14 @@ edges -| ldap3_remote.py:2:19:2:25 | ControlFlowNode for ImportMember | ldap3_remote.py:2:19:2:25 | ControlFlowNode for request | -| ldap3_remote.py:2:19:2:25 | ControlFlowNode for request | ldap3_remote.py:138:21:138:27 | ControlFlowNode for request | -| ldap3_remote.py:101:5:101:8 | ControlFlowNode for host | ldap3_remote.py:102:18:102:21 | ControlFlowNode for host | -| ldap3_remote.py:101:12:101:49 | ControlFlowNode for BinaryExpr | ldap3_remote.py:101:5:101:8 | ControlFlowNode for host | -| ldap3_remote.py:114:5:114:8 | ControlFlowNode for host | ldap3_remote.py:115:18:115:21 | ControlFlowNode for host | -| ldap3_remote.py:114:12:114:49 | ControlFlowNode for BinaryExpr | ldap3_remote.py:114:5:114:8 | ControlFlowNode for host | -| ldap3_remote.py:126:5:126:8 | ControlFlowNode for host | ldap3_remote.py:127:18:127:21 | ControlFlowNode for host | -| ldap3_remote.py:126:12:126:31 | ControlFlowNode for BinaryExpr | ldap3_remote.py:126:5:126:8 | ControlFlowNode for host | -| ldap3_remote.py:138:5:138:8 | ControlFlowNode for host | ldap3_remote.py:139:18:139:21 | ControlFlowNode for host | -| ldap3_remote.py:138:21:138:27 | ControlFlowNode for request | ldap3_remote.py:138:5:138:8 | ControlFlowNode for host | +| ldap3_remote.py:2:19:2:25 | ControlFlowNode for ImportMember | ldap3_remote.py:2:19:2:25 | ControlFlowNode for request | provenance | | +| ldap3_remote.py:2:19:2:25 | ControlFlowNode for request | ldap3_remote.py:138:21:138:27 | ControlFlowNode for request | provenance | | +| ldap3_remote.py:101:5:101:8 | ControlFlowNode for host | ldap3_remote.py:102:18:102:21 | ControlFlowNode for host | provenance | | +| ldap3_remote.py:101:12:101:49 | ControlFlowNode for BinaryExpr | ldap3_remote.py:101:5:101:8 | ControlFlowNode for host | provenance | | +| ldap3_remote.py:114:5:114:8 | ControlFlowNode for host | ldap3_remote.py:115:18:115:21 | ControlFlowNode for host | provenance | | +| ldap3_remote.py:114:12:114:49 | ControlFlowNode for BinaryExpr | ldap3_remote.py:114:5:114:8 | ControlFlowNode for host | provenance | | +| ldap3_remote.py:126:5:126:8 | ControlFlowNode for host | ldap3_remote.py:127:18:127:21 | ControlFlowNode for host | provenance | | +| ldap3_remote.py:126:12:126:31 | ControlFlowNode for BinaryExpr | ldap3_remote.py:126:5:126:8 | ControlFlowNode for host | provenance | | +| ldap3_remote.py:138:5:138:8 | ControlFlowNode for host | ldap3_remote.py:139:18:139:21 | ControlFlowNode for host | provenance | | +| ldap3_remote.py:138:21:138:27 | ControlFlowNode for request | ldap3_remote.py:138:5:138:8 | ControlFlowNode for host | provenance | | nodes | ldap2_remote.py:45:41:45:60 | ControlFlowNode for BinaryExpr | semmle.label | ControlFlowNode for BinaryExpr | | ldap2_remote.py:56:41:56:60 | ControlFlowNode for BinaryExpr | semmle.label | ControlFlowNode for BinaryExpr | diff --git a/python/ql/test/experimental/query-tests/Security/CWE-614/CookieInjection.expected b/python/ql/test/experimental/query-tests/Security/CWE-614/CookieInjection.expected index afc8302354e..36e0074c784 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-614/CookieInjection.expected +++ b/python/ql/test/experimental/query-tests/Security/CWE-614/CookieInjection.expected @@ -1,16 +1,16 @@ edges -| django_bad.py:27:33:27:67 | ControlFlowNode for Attribute() | django_bad.py:27:30:27:124 | ControlFlowNode for Fstring | -| django_bad.py:27:71:27:106 | ControlFlowNode for Attribute() | django_bad.py:27:30:27:124 | ControlFlowNode for Fstring | -| flask_bad.py:1:26:1:32 | ControlFlowNode for ImportMember | flask_bad.py:1:26:1:32 | ControlFlowNode for request | -| flask_bad.py:1:26:1:32 | ControlFlowNode for request | flask_bad.py:24:21:24:27 | ControlFlowNode for request | -| flask_bad.py:1:26:1:32 | ControlFlowNode for request | flask_bad.py:24:49:24:55 | ControlFlowNode for request | -| flask_bad.py:1:26:1:32 | ControlFlowNode for request | flask_bad.py:32:37:32:43 | ControlFlowNode for request | -| flask_bad.py:1:26:1:32 | ControlFlowNode for request | flask_bad.py:32:60:32:66 | ControlFlowNode for request | -| flask_bad.py:24:21:24:27 | ControlFlowNode for request | flask_bad.py:24:21:24:40 | ControlFlowNode for Subscript | -| flask_bad.py:24:21:24:27 | ControlFlowNode for request | flask_bad.py:24:49:24:69 | ControlFlowNode for Subscript | -| flask_bad.py:24:49:24:55 | ControlFlowNode for request | flask_bad.py:24:49:24:69 | ControlFlowNode for Subscript | -| flask_bad.py:32:37:32:43 | ControlFlowNode for request | flask_bad.py:32:34:32:98 | ControlFlowNode for Fstring | -| flask_bad.py:32:60:32:66 | ControlFlowNode for request | flask_bad.py:32:34:32:98 | ControlFlowNode for Fstring | +| django_bad.py:27:33:27:67 | ControlFlowNode for Attribute() | django_bad.py:27:30:27:124 | ControlFlowNode for Fstring | provenance | | +| django_bad.py:27:71:27:106 | ControlFlowNode for Attribute() | django_bad.py:27:30:27:124 | ControlFlowNode for Fstring | provenance | | +| flask_bad.py:1:26:1:32 | ControlFlowNode for ImportMember | flask_bad.py:1:26:1:32 | ControlFlowNode for request | provenance | | +| flask_bad.py:1:26:1:32 | ControlFlowNode for request | flask_bad.py:24:21:24:27 | ControlFlowNode for request | provenance | | +| flask_bad.py:1:26:1:32 | ControlFlowNode for request | flask_bad.py:24:49:24:55 | ControlFlowNode for request | provenance | | +| flask_bad.py:1:26:1:32 | ControlFlowNode for request | flask_bad.py:32:37:32:43 | ControlFlowNode for request | provenance | | +| flask_bad.py:1:26:1:32 | ControlFlowNode for request | flask_bad.py:32:60:32:66 | ControlFlowNode for request | provenance | | +| flask_bad.py:24:21:24:27 | ControlFlowNode for request | flask_bad.py:24:21:24:40 | ControlFlowNode for Subscript | provenance | | +| flask_bad.py:24:21:24:27 | ControlFlowNode for request | flask_bad.py:24:49:24:69 | ControlFlowNode for Subscript | provenance | | +| flask_bad.py:24:49:24:55 | ControlFlowNode for request | flask_bad.py:24:49:24:69 | ControlFlowNode for Subscript | provenance | | +| flask_bad.py:32:37:32:43 | ControlFlowNode for request | flask_bad.py:32:34:32:98 | ControlFlowNode for Fstring | provenance | | +| flask_bad.py:32:60:32:66 | ControlFlowNode for request | flask_bad.py:32:34:32:98 | ControlFlowNode for Fstring | provenance | | nodes | django_bad.py:19:21:19:55 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | django_bad.py:20:21:20:56 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | diff --git a/python/ql/test/library-tests/frameworks/django-orm/ReflectedXss.expected b/python/ql/test/library-tests/frameworks/django-orm/ReflectedXss.expected index 2c888521d47..b93c133cd5a 100644 --- a/python/ql/test/library-tests/frameworks/django-orm/ReflectedXss.expected +++ b/python/ql/test/library-tests/frameworks/django-orm/ReflectedXss.expected @@ -1,53 +1,53 @@ edges -| testapp/orm_security_tests.py:15:1:15:27 | [orm-model] Class Person [Attribute age] | testapp/orm_security_tests.py:42:23:42:42 | ControlFlowNode for Attribute() [List element, Attribute age] | -| testapp/orm_security_tests.py:15:1:15:27 | [orm-model] Class Person [Attribute age] | testapp/orm_security_tests.py:51:14:51:53 | ControlFlowNode for Attribute() [Attribute age] | -| testapp/orm_security_tests.py:15:1:15:27 | [orm-model] Class Person [Attribute name] | testapp/orm_security_tests.py:42:23:42:42 | ControlFlowNode for Attribute() [List element, Attribute name] | -| testapp/orm_security_tests.py:15:1:15:27 | [orm-model] Class Person [Attribute name] | testapp/orm_security_tests.py:47:14:47:53 | ControlFlowNode for Attribute() [Attribute name] | -| testapp/orm_security_tests.py:19:12:19:18 | ControlFlowNode for request | testapp/orm_security_tests.py:22:23:22:42 | ControlFlowNode for Subscript | -| testapp/orm_security_tests.py:19:12:19:18 | ControlFlowNode for request | testapp/orm_security_tests.py:23:22:23:40 | ControlFlowNode for Subscript | -| testapp/orm_security_tests.py:22:9:22:14 | [post] ControlFlowNode for person [Attribute name] | testapp/orm_security_tests.py:23:9:23:14 | ControlFlowNode for person [Attribute name] | -| testapp/orm_security_tests.py:22:23:22:42 | ControlFlowNode for Subscript | testapp/orm_security_tests.py:22:9:22:14 | [post] ControlFlowNode for person [Attribute name] | -| testapp/orm_security_tests.py:23:9:23:14 | ControlFlowNode for person [Attribute name] | testapp/orm_security_tests.py:28:9:28:14 | ControlFlowNode for person [Attribute name] | -| testapp/orm_security_tests.py:23:9:23:14 | [post] ControlFlowNode for person [Attribute age] | testapp/orm_security_tests.py:28:9:28:14 | ControlFlowNode for person [Attribute age] | -| testapp/orm_security_tests.py:23:22:23:40 | ControlFlowNode for Subscript | testapp/orm_security_tests.py:23:9:23:14 | [post] ControlFlowNode for person [Attribute age] | -| testapp/orm_security_tests.py:28:9:28:14 | ControlFlowNode for person [Attribute age] | testapp/orm_security_tests.py:15:1:15:27 | [orm-model] Class Person [Attribute age] | -| testapp/orm_security_tests.py:28:9:28:14 | ControlFlowNode for person [Attribute name] | testapp/orm_security_tests.py:15:1:15:27 | [orm-model] Class Person [Attribute name] | -| testapp/orm_security_tests.py:42:13:42:18 | ControlFlowNode for person [Attribute age] | testapp/orm_security_tests.py:43:62:43:67 | ControlFlowNode for person [Attribute age] | -| testapp/orm_security_tests.py:42:13:42:18 | ControlFlowNode for person [Attribute name] | testapp/orm_security_tests.py:43:49:43:54 | ControlFlowNode for person [Attribute name] | -| testapp/orm_security_tests.py:42:23:42:42 | ControlFlowNode for Attribute() [List element, Attribute age] | testapp/orm_security_tests.py:42:13:42:18 | ControlFlowNode for person [Attribute age] | -| testapp/orm_security_tests.py:42:23:42:42 | ControlFlowNode for Attribute() [List element, Attribute name] | testapp/orm_security_tests.py:42:13:42:18 | ControlFlowNode for person [Attribute name] | -| testapp/orm_security_tests.py:43:13:43:21 | ControlFlowNode for resp_text | testapp/orm_security_tests.py:43:13:43:21 | ControlFlowNode for resp_text | -| testapp/orm_security_tests.py:43:13:43:21 | ControlFlowNode for resp_text | testapp/orm_security_tests.py:44:29:44:37 | ControlFlowNode for resp_text | -| testapp/orm_security_tests.py:43:49:43:54 | ControlFlowNode for person [Attribute name] | testapp/orm_security_tests.py:43:49:43:59 | ControlFlowNode for Attribute | -| testapp/orm_security_tests.py:43:49:43:59 | ControlFlowNode for Attribute | testapp/orm_security_tests.py:43:13:43:21 | ControlFlowNode for resp_text | -| testapp/orm_security_tests.py:43:62:43:67 | ControlFlowNode for person [Attribute age] | testapp/orm_security_tests.py:43:62:43:71 | ControlFlowNode for Attribute | -| testapp/orm_security_tests.py:43:62:43:71 | ControlFlowNode for Attribute | testapp/orm_security_tests.py:43:13:43:21 | ControlFlowNode for resp_text | -| testapp/orm_security_tests.py:47:5:47:10 | ControlFlowNode for person [Attribute name] | testapp/orm_security_tests.py:48:46:48:51 | ControlFlowNode for person [Attribute name] | -| testapp/orm_security_tests.py:47:14:47:53 | ControlFlowNode for Attribute() [Attribute name] | testapp/orm_security_tests.py:47:5:47:10 | ControlFlowNode for person [Attribute name] | -| testapp/orm_security_tests.py:48:46:48:51 | ControlFlowNode for person [Attribute name] | testapp/orm_security_tests.py:48:46:48:56 | ControlFlowNode for Attribute | -| testapp/orm_security_tests.py:48:46:48:56 | ControlFlowNode for Attribute | testapp/orm_security_tests.py:48:25:48:57 | ControlFlowNode for Attribute() | -| testapp/orm_security_tests.py:51:5:51:10 | ControlFlowNode for person [Attribute age] | testapp/orm_security_tests.py:55:45:55:50 | ControlFlowNode for person [Attribute age] | -| testapp/orm_security_tests.py:51:14:51:53 | ControlFlowNode for Attribute() [Attribute age] | testapp/orm_security_tests.py:51:5:51:10 | ControlFlowNode for person [Attribute age] | -| testapp/orm_security_tests.py:55:45:55:50 | ControlFlowNode for person [Attribute age] | testapp/orm_security_tests.py:55:45:55:54 | ControlFlowNode for Attribute | -| testapp/orm_security_tests.py:55:45:55:54 | ControlFlowNode for Attribute | testapp/orm_security_tests.py:55:25:55:55 | ControlFlowNode for Attribute() | -| testapp/orm_security_tests.py:92:1:92:44 | [orm-model] Class CommentValidatorNotUsed [Attribute text] | testapp/orm_security_tests.py:101:15:101:52 | ControlFlowNode for Attribute() [Attribute text] | -| testapp/orm_security_tests.py:95:37:95:43 | ControlFlowNode for request | testapp/orm_security_tests.py:96:44:96:63 | ControlFlowNode for Subscript | -| testapp/orm_security_tests.py:96:5:96:11 | ControlFlowNode for comment [Attribute text] | testapp/orm_security_tests.py:97:5:97:11 | ControlFlowNode for comment [Attribute text] | -| testapp/orm_security_tests.py:96:15:96:64 | ControlFlowNode for CommentValidatorNotUsed() [Attribute text] | testapp/orm_security_tests.py:96:5:96:11 | ControlFlowNode for comment [Attribute text] | -| testapp/orm_security_tests.py:96:44:96:63 | ControlFlowNode for Subscript | testapp/orm_security_tests.py:96:15:96:64 | ControlFlowNode for CommentValidatorNotUsed() [Attribute text] | -| testapp/orm_security_tests.py:97:5:97:11 | ControlFlowNode for comment [Attribute text] | testapp/orm_security_tests.py:92:1:92:44 | [orm-model] Class CommentValidatorNotUsed [Attribute text] | -| testapp/orm_security_tests.py:101:5:101:11 | ControlFlowNode for comment [Attribute text] | testapp/orm_security_tests.py:102:25:102:31 | ControlFlowNode for comment [Attribute text] | -| testapp/orm_security_tests.py:101:15:101:52 | ControlFlowNode for Attribute() [Attribute text] | testapp/orm_security_tests.py:101:5:101:11 | ControlFlowNode for comment [Attribute text] | -| testapp/orm_security_tests.py:102:25:102:31 | ControlFlowNode for comment [Attribute text] | testapp/orm_security_tests.py:102:25:102:36 | ControlFlowNode for Attribute | -| testapp/orm_security_tests.py:111:1:111:41 | [orm-model] Class CommentValidatorUsed [Attribute text] | testapp/orm_security_tests.py:120:15:120:49 | ControlFlowNode for Attribute() [Attribute text] | -| testapp/orm_security_tests.py:114:33:114:39 | ControlFlowNode for request | testapp/orm_security_tests.py:115:41:115:60 | ControlFlowNode for Subscript | -| testapp/orm_security_tests.py:115:5:115:11 | ControlFlowNode for comment [Attribute text] | testapp/orm_security_tests.py:117:5:117:11 | ControlFlowNode for comment [Attribute text] | -| testapp/orm_security_tests.py:115:15:115:61 | ControlFlowNode for CommentValidatorUsed() [Attribute text] | testapp/orm_security_tests.py:115:5:115:11 | ControlFlowNode for comment [Attribute text] | -| testapp/orm_security_tests.py:115:41:115:60 | ControlFlowNode for Subscript | testapp/orm_security_tests.py:115:15:115:61 | ControlFlowNode for CommentValidatorUsed() [Attribute text] | -| testapp/orm_security_tests.py:117:5:117:11 | ControlFlowNode for comment [Attribute text] | testapp/orm_security_tests.py:111:1:111:41 | [orm-model] Class CommentValidatorUsed [Attribute text] | -| testapp/orm_security_tests.py:120:5:120:11 | ControlFlowNode for comment [Attribute text] | testapp/orm_security_tests.py:121:25:121:31 | ControlFlowNode for comment [Attribute text] | -| testapp/orm_security_tests.py:120:15:120:49 | ControlFlowNode for Attribute() [Attribute text] | testapp/orm_security_tests.py:120:5:120:11 | ControlFlowNode for comment [Attribute text] | -| testapp/orm_security_tests.py:121:25:121:31 | ControlFlowNode for comment [Attribute text] | testapp/orm_security_tests.py:121:25:121:36 | ControlFlowNode for Attribute | +| testapp/orm_security_tests.py:15:1:15:27 | [orm-model] Class Person [Attribute age] | testapp/orm_security_tests.py:42:23:42:42 | ControlFlowNode for Attribute() [List element, Attribute age] | provenance | | +| testapp/orm_security_tests.py:15:1:15:27 | [orm-model] Class Person [Attribute age] | testapp/orm_security_tests.py:51:14:51:53 | ControlFlowNode for Attribute() [Attribute age] | provenance | | +| testapp/orm_security_tests.py:15:1:15:27 | [orm-model] Class Person [Attribute name] | testapp/orm_security_tests.py:42:23:42:42 | ControlFlowNode for Attribute() [List element, Attribute name] | provenance | | +| testapp/orm_security_tests.py:15:1:15:27 | [orm-model] Class Person [Attribute name] | testapp/orm_security_tests.py:47:14:47:53 | ControlFlowNode for Attribute() [Attribute name] | provenance | | +| testapp/orm_security_tests.py:19:12:19:18 | ControlFlowNode for request | testapp/orm_security_tests.py:22:23:22:42 | ControlFlowNode for Subscript | provenance | | +| testapp/orm_security_tests.py:19:12:19:18 | ControlFlowNode for request | testapp/orm_security_tests.py:23:22:23:40 | ControlFlowNode for Subscript | provenance | | +| testapp/orm_security_tests.py:22:9:22:14 | [post] ControlFlowNode for person [Attribute name] | testapp/orm_security_tests.py:23:9:23:14 | ControlFlowNode for person [Attribute name] | provenance | | +| testapp/orm_security_tests.py:22:23:22:42 | ControlFlowNode for Subscript | testapp/orm_security_tests.py:22:9:22:14 | [post] ControlFlowNode for person [Attribute name] | provenance | | +| testapp/orm_security_tests.py:23:9:23:14 | ControlFlowNode for person [Attribute name] | testapp/orm_security_tests.py:28:9:28:14 | ControlFlowNode for person [Attribute name] | provenance | | +| testapp/orm_security_tests.py:23:9:23:14 | [post] ControlFlowNode for person [Attribute age] | testapp/orm_security_tests.py:28:9:28:14 | ControlFlowNode for person [Attribute age] | provenance | | +| testapp/orm_security_tests.py:23:22:23:40 | ControlFlowNode for Subscript | testapp/orm_security_tests.py:23:9:23:14 | [post] ControlFlowNode for person [Attribute age] | provenance | | +| testapp/orm_security_tests.py:28:9:28:14 | ControlFlowNode for person [Attribute age] | testapp/orm_security_tests.py:15:1:15:27 | [orm-model] Class Person [Attribute age] | provenance | | +| testapp/orm_security_tests.py:28:9:28:14 | ControlFlowNode for person [Attribute name] | testapp/orm_security_tests.py:15:1:15:27 | [orm-model] Class Person [Attribute name] | provenance | | +| testapp/orm_security_tests.py:42:13:42:18 | ControlFlowNode for person [Attribute age] | testapp/orm_security_tests.py:43:62:43:67 | ControlFlowNode for person [Attribute age] | provenance | | +| testapp/orm_security_tests.py:42:13:42:18 | ControlFlowNode for person [Attribute name] | testapp/orm_security_tests.py:43:49:43:54 | ControlFlowNode for person [Attribute name] | provenance | | +| testapp/orm_security_tests.py:42:23:42:42 | ControlFlowNode for Attribute() [List element, Attribute age] | testapp/orm_security_tests.py:42:13:42:18 | ControlFlowNode for person [Attribute age] | provenance | | +| testapp/orm_security_tests.py:42:23:42:42 | ControlFlowNode for Attribute() [List element, Attribute name] | testapp/orm_security_tests.py:42:13:42:18 | ControlFlowNode for person [Attribute name] | provenance | | +| testapp/orm_security_tests.py:43:13:43:21 | ControlFlowNode for resp_text | testapp/orm_security_tests.py:43:13:43:21 | ControlFlowNode for resp_text | provenance | | +| testapp/orm_security_tests.py:43:13:43:21 | ControlFlowNode for resp_text | testapp/orm_security_tests.py:44:29:44:37 | ControlFlowNode for resp_text | provenance | | +| testapp/orm_security_tests.py:43:49:43:54 | ControlFlowNode for person [Attribute name] | testapp/orm_security_tests.py:43:49:43:59 | ControlFlowNode for Attribute | provenance | | +| testapp/orm_security_tests.py:43:49:43:59 | ControlFlowNode for Attribute | testapp/orm_security_tests.py:43:13:43:21 | ControlFlowNode for resp_text | provenance | | +| testapp/orm_security_tests.py:43:62:43:67 | ControlFlowNode for person [Attribute age] | testapp/orm_security_tests.py:43:62:43:71 | ControlFlowNode for Attribute | provenance | | +| testapp/orm_security_tests.py:43:62:43:71 | ControlFlowNode for Attribute | testapp/orm_security_tests.py:43:13:43:21 | ControlFlowNode for resp_text | provenance | | +| testapp/orm_security_tests.py:47:5:47:10 | ControlFlowNode for person [Attribute name] | testapp/orm_security_tests.py:48:46:48:51 | ControlFlowNode for person [Attribute name] | provenance | | +| testapp/orm_security_tests.py:47:14:47:53 | ControlFlowNode for Attribute() [Attribute name] | testapp/orm_security_tests.py:47:5:47:10 | ControlFlowNode for person [Attribute name] | provenance | | +| testapp/orm_security_tests.py:48:46:48:51 | ControlFlowNode for person [Attribute name] | testapp/orm_security_tests.py:48:46:48:56 | ControlFlowNode for Attribute | provenance | | +| testapp/orm_security_tests.py:48:46:48:56 | ControlFlowNode for Attribute | testapp/orm_security_tests.py:48:25:48:57 | ControlFlowNode for Attribute() | provenance | | +| testapp/orm_security_tests.py:51:5:51:10 | ControlFlowNode for person [Attribute age] | testapp/orm_security_tests.py:55:45:55:50 | ControlFlowNode for person [Attribute age] | provenance | | +| testapp/orm_security_tests.py:51:14:51:53 | ControlFlowNode for Attribute() [Attribute age] | testapp/orm_security_tests.py:51:5:51:10 | ControlFlowNode for person [Attribute age] | provenance | | +| testapp/orm_security_tests.py:55:45:55:50 | ControlFlowNode for person [Attribute age] | testapp/orm_security_tests.py:55:45:55:54 | ControlFlowNode for Attribute | provenance | | +| testapp/orm_security_tests.py:55:45:55:54 | ControlFlowNode for Attribute | testapp/orm_security_tests.py:55:25:55:55 | ControlFlowNode for Attribute() | provenance | | +| testapp/orm_security_tests.py:92:1:92:44 | [orm-model] Class CommentValidatorNotUsed [Attribute text] | testapp/orm_security_tests.py:101:15:101:52 | ControlFlowNode for Attribute() [Attribute text] | provenance | | +| testapp/orm_security_tests.py:95:37:95:43 | ControlFlowNode for request | testapp/orm_security_tests.py:96:44:96:63 | ControlFlowNode for Subscript | provenance | | +| testapp/orm_security_tests.py:96:5:96:11 | ControlFlowNode for comment [Attribute text] | testapp/orm_security_tests.py:97:5:97:11 | ControlFlowNode for comment [Attribute text] | provenance | | +| testapp/orm_security_tests.py:96:15:96:64 | ControlFlowNode for CommentValidatorNotUsed() [Attribute text] | testapp/orm_security_tests.py:96:5:96:11 | ControlFlowNode for comment [Attribute text] | provenance | | +| testapp/orm_security_tests.py:96:44:96:63 | ControlFlowNode for Subscript | testapp/orm_security_tests.py:96:15:96:64 | ControlFlowNode for CommentValidatorNotUsed() [Attribute text] | provenance | | +| testapp/orm_security_tests.py:97:5:97:11 | ControlFlowNode for comment [Attribute text] | testapp/orm_security_tests.py:92:1:92:44 | [orm-model] Class CommentValidatorNotUsed [Attribute text] | provenance | | +| testapp/orm_security_tests.py:101:5:101:11 | ControlFlowNode for comment [Attribute text] | testapp/orm_security_tests.py:102:25:102:31 | ControlFlowNode for comment [Attribute text] | provenance | | +| testapp/orm_security_tests.py:101:15:101:52 | ControlFlowNode for Attribute() [Attribute text] | testapp/orm_security_tests.py:101:5:101:11 | ControlFlowNode for comment [Attribute text] | provenance | | +| testapp/orm_security_tests.py:102:25:102:31 | ControlFlowNode for comment [Attribute text] | testapp/orm_security_tests.py:102:25:102:36 | ControlFlowNode for Attribute | provenance | | +| testapp/orm_security_tests.py:111:1:111:41 | [orm-model] Class CommentValidatorUsed [Attribute text] | testapp/orm_security_tests.py:120:15:120:49 | ControlFlowNode for Attribute() [Attribute text] | provenance | | +| testapp/orm_security_tests.py:114:33:114:39 | ControlFlowNode for request | testapp/orm_security_tests.py:115:41:115:60 | ControlFlowNode for Subscript | provenance | | +| testapp/orm_security_tests.py:115:5:115:11 | ControlFlowNode for comment [Attribute text] | testapp/orm_security_tests.py:117:5:117:11 | ControlFlowNode for comment [Attribute text] | provenance | | +| testapp/orm_security_tests.py:115:15:115:61 | ControlFlowNode for CommentValidatorUsed() [Attribute text] | testapp/orm_security_tests.py:115:5:115:11 | ControlFlowNode for comment [Attribute text] | provenance | | +| testapp/orm_security_tests.py:115:41:115:60 | ControlFlowNode for Subscript | testapp/orm_security_tests.py:115:15:115:61 | ControlFlowNode for CommentValidatorUsed() [Attribute text] | provenance | | +| testapp/orm_security_tests.py:117:5:117:11 | ControlFlowNode for comment [Attribute text] | testapp/orm_security_tests.py:111:1:111:41 | [orm-model] Class CommentValidatorUsed [Attribute text] | provenance | | +| testapp/orm_security_tests.py:120:5:120:11 | ControlFlowNode for comment [Attribute text] | testapp/orm_security_tests.py:121:25:121:31 | ControlFlowNode for comment [Attribute text] | provenance | | +| testapp/orm_security_tests.py:120:15:120:49 | ControlFlowNode for Attribute() [Attribute text] | testapp/orm_security_tests.py:120:5:120:11 | ControlFlowNode for comment [Attribute text] | provenance | | +| testapp/orm_security_tests.py:121:25:121:31 | ControlFlowNode for comment [Attribute text] | testapp/orm_security_tests.py:121:25:121:36 | ControlFlowNode for Attribute | provenance | | nodes | testapp/orm_security_tests.py:15:1:15:27 | [orm-model] Class Person [Attribute age] | semmle.label | [orm-model] Class Person [Attribute age] | | testapp/orm_security_tests.py:15:1:15:27 | [orm-model] Class Person [Attribute name] | semmle.label | [orm-model] Class Person [Attribute name] | diff --git a/python/ql/test/library-tests/frameworks/modeling-example/NaiveModel.expected b/python/ql/test/library-tests/frameworks/modeling-example/NaiveModel.expected index 77d13352758..b1347bde3fb 100644 --- a/python/ql/test/library-tests/frameworks/modeling-example/NaiveModel.expected +++ b/python/ql/test/library-tests/frameworks/modeling-example/NaiveModel.expected @@ -1,19 +1,19 @@ edges -| test.py:21:11:21:18 | ControlFlowNode for source() | test.py:22:10:22:24 | ControlFlowNode for Attribute() | -| test.py:29:11:29:18 | ControlFlowNode for source() | test.py:32:5:32:7 | ControlFlowNode for val | -| test.py:32:5:32:7 | ControlFlowNode for val | test.py:33:10:33:12 | ControlFlowNode for val | -| test.py:40:5:40:7 | ControlFlowNode for val | test.py:41:10:41:12 | ControlFlowNode for val | -| test.py:40:11:40:25 | ControlFlowNode for Attribute() | test.py:40:5:40:7 | ControlFlowNode for val | -| test.py:45:11:45:18 | ControlFlowNode for source() | test.py:40:11:40:25 | ControlFlowNode for Attribute() | -| test.py:53:5:53:7 | ControlFlowNode for val | test.py:54:10:54:12 | ControlFlowNode for val | -| test.py:53:11:53:25 | ControlFlowNode for Attribute() | test.py:53:5:53:7 | ControlFlowNode for val | -| test.py:70:11:70:18 | ControlFlowNode for source() | test.py:53:11:53:25 | ControlFlowNode for Attribute() | -| test.py:78:5:78:7 | ControlFlowNode for val | test.py:79:10:79:12 | ControlFlowNode for val | -| test.py:78:11:78:14 | ControlFlowNode for bm() | test.py:78:5:78:7 | ControlFlowNode for val | -| test.py:83:11:83:18 | ControlFlowNode for source() | test.py:78:11:78:14 | ControlFlowNode for bm() | -| test.py:90:5:90:7 | ControlFlowNode for val | test.py:91:10:91:12 | ControlFlowNode for val | -| test.py:90:11:90:14 | ControlFlowNode for bm() | test.py:90:5:90:7 | ControlFlowNode for val | -| test.py:107:11:107:18 | ControlFlowNode for source() | test.py:90:11:90:14 | ControlFlowNode for bm() | +| test.py:21:11:21:18 | ControlFlowNode for source() | test.py:22:10:22:24 | ControlFlowNode for Attribute() | provenance | | +| test.py:29:11:29:18 | ControlFlowNode for source() | test.py:32:5:32:7 | ControlFlowNode for val | provenance | | +| test.py:32:5:32:7 | ControlFlowNode for val | test.py:33:10:33:12 | ControlFlowNode for val | provenance | | +| test.py:40:5:40:7 | ControlFlowNode for val | test.py:41:10:41:12 | ControlFlowNode for val | provenance | | +| test.py:40:11:40:25 | ControlFlowNode for Attribute() | test.py:40:5:40:7 | ControlFlowNode for val | provenance | | +| test.py:45:11:45:18 | ControlFlowNode for source() | test.py:40:11:40:25 | ControlFlowNode for Attribute() | provenance | | +| test.py:53:5:53:7 | ControlFlowNode for val | test.py:54:10:54:12 | ControlFlowNode for val | provenance | | +| test.py:53:11:53:25 | ControlFlowNode for Attribute() | test.py:53:5:53:7 | ControlFlowNode for val | provenance | | +| test.py:70:11:70:18 | ControlFlowNode for source() | test.py:53:11:53:25 | ControlFlowNode for Attribute() | provenance | | +| test.py:78:5:78:7 | ControlFlowNode for val | test.py:79:10:79:12 | ControlFlowNode for val | provenance | | +| test.py:78:11:78:14 | ControlFlowNode for bm() | test.py:78:5:78:7 | ControlFlowNode for val | provenance | | +| test.py:83:11:83:18 | ControlFlowNode for source() | test.py:78:11:78:14 | ControlFlowNode for bm() | provenance | | +| test.py:90:5:90:7 | ControlFlowNode for val | test.py:91:10:91:12 | ControlFlowNode for val | provenance | | +| test.py:90:11:90:14 | ControlFlowNode for bm() | test.py:90:5:90:7 | ControlFlowNode for val | provenance | | +| test.py:107:11:107:18 | ControlFlowNode for source() | test.py:90:11:90:14 | ControlFlowNode for bm() | provenance | | nodes | test.py:21:11:21:18 | ControlFlowNode for source() | semmle.label | ControlFlowNode for source() | | test.py:22:10:22:24 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | diff --git a/python/ql/test/library-tests/frameworks/modeling-example/ProperModel.expected b/python/ql/test/library-tests/frameworks/modeling-example/ProperModel.expected index 004af2780c0..1d3e3343113 100644 --- a/python/ql/test/library-tests/frameworks/modeling-example/ProperModel.expected +++ b/python/ql/test/library-tests/frameworks/modeling-example/ProperModel.expected @@ -1,43 +1,43 @@ edges -| test.py:21:5:21:7 | ControlFlowNode for src | test.py:22:10:22:24 | ControlFlowNode for Attribute() | -| test.py:21:11:21:18 | ControlFlowNode for source() | test.py:21:5:21:7 | ControlFlowNode for src | -| test.py:29:5:29:7 | ControlFlowNode for src | test.py:30:5:30:7 | ControlFlowNode for foo | -| test.py:29:11:29:18 | ControlFlowNode for source() | test.py:29:5:29:7 | ControlFlowNode for src | -| test.py:30:5:30:7 | ControlFlowNode for foo | test.py:31:5:31:16 | ControlFlowNode for bound_method | -| test.py:31:5:31:16 | ControlFlowNode for bound_method | test.py:32:5:32:7 | ControlFlowNode for val | -| test.py:32:5:32:7 | ControlFlowNode for val | test.py:33:10:33:12 | ControlFlowNode for val | -| test.py:39:15:39:17 | ControlFlowNode for arg | test.py:40:5:40:7 | ControlFlowNode for val | -| test.py:40:5:40:7 | ControlFlowNode for val | test.py:41:10:41:12 | ControlFlowNode for val | -| test.py:45:5:45:7 | ControlFlowNode for src | test.py:46:15:46:17 | ControlFlowNode for src | -| test.py:45:11:45:18 | ControlFlowNode for source() | test.py:45:5:45:7 | ControlFlowNode for src | -| test.py:46:15:46:17 | ControlFlowNode for src | test.py:39:15:39:17 | ControlFlowNode for arg | -| test.py:52:24:52:26 | ControlFlowNode for arg | test.py:53:5:53:7 | ControlFlowNode for val | -| test.py:53:5:53:7 | ControlFlowNode for val | test.py:54:10:54:12 | ControlFlowNode for val | -| test.py:57:33:57:35 | ControlFlowNode for arg | test.py:58:24:58:26 | ControlFlowNode for arg | -| test.py:58:24:58:26 | ControlFlowNode for arg | test.py:52:24:52:26 | ControlFlowNode for arg | -| test.py:61:33:61:35 | ControlFlowNode for arg | test.py:62:33:62:35 | ControlFlowNode for arg | -| test.py:62:33:62:35 | ControlFlowNode for arg | test.py:57:33:57:35 | ControlFlowNode for arg | -| test.py:65:33:65:35 | ControlFlowNode for arg | test.py:66:33:66:35 | ControlFlowNode for arg | -| test.py:66:33:66:35 | ControlFlowNode for arg | test.py:61:33:61:35 | ControlFlowNode for arg | -| test.py:70:5:70:7 | ControlFlowNode for src | test.py:71:33:71:35 | ControlFlowNode for src | -| test.py:70:11:70:18 | ControlFlowNode for source() | test.py:70:5:70:7 | ControlFlowNode for src | -| test.py:71:33:71:35 | ControlFlowNode for src | test.py:65:33:65:35 | ControlFlowNode for arg | -| test.py:77:23:77:24 | ControlFlowNode for bm | test.py:78:5:78:7 | ControlFlowNode for val | -| test.py:78:5:78:7 | ControlFlowNode for val | test.py:79:10:79:12 | ControlFlowNode for val | -| test.py:83:5:83:7 | ControlFlowNode for src | test.py:84:23:84:35 | ControlFlowNode for Attribute | -| test.py:83:11:83:18 | ControlFlowNode for source() | test.py:83:5:83:7 | ControlFlowNode for src | -| test.py:84:23:84:35 | ControlFlowNode for Attribute | test.py:77:23:77:24 | ControlFlowNode for bm | -| test.py:89:37:89:38 | ControlFlowNode for bm | test.py:90:5:90:7 | ControlFlowNode for val | -| test.py:90:5:90:7 | ControlFlowNode for val | test.py:91:10:91:12 | ControlFlowNode for val | -| test.py:94:46:94:47 | ControlFlowNode for bm | test.py:95:37:95:38 | ControlFlowNode for bm | -| test.py:95:37:95:38 | ControlFlowNode for bm | test.py:89:37:89:38 | ControlFlowNode for bm | -| test.py:98:46:98:47 | ControlFlowNode for bm | test.py:99:46:99:47 | ControlFlowNode for bm | -| test.py:99:46:99:47 | ControlFlowNode for bm | test.py:94:46:94:47 | ControlFlowNode for bm | -| test.py:102:46:102:47 | ControlFlowNode for bm | test.py:103:46:103:47 | ControlFlowNode for bm | -| test.py:103:46:103:47 | ControlFlowNode for bm | test.py:98:46:98:47 | ControlFlowNode for bm | -| test.py:107:5:107:7 | ControlFlowNode for src | test.py:108:46:108:58 | ControlFlowNode for Attribute | -| test.py:107:11:107:18 | ControlFlowNode for source() | test.py:107:5:107:7 | ControlFlowNode for src | -| test.py:108:46:108:58 | ControlFlowNode for Attribute | test.py:102:46:102:47 | ControlFlowNode for bm | +| test.py:21:5:21:7 | ControlFlowNode for src | test.py:22:10:22:24 | ControlFlowNode for Attribute() | provenance | | +| test.py:21:11:21:18 | ControlFlowNode for source() | test.py:21:5:21:7 | ControlFlowNode for src | provenance | | +| test.py:29:5:29:7 | ControlFlowNode for src | test.py:30:5:30:7 | ControlFlowNode for foo | provenance | | +| test.py:29:11:29:18 | ControlFlowNode for source() | test.py:29:5:29:7 | ControlFlowNode for src | provenance | | +| test.py:30:5:30:7 | ControlFlowNode for foo | test.py:31:5:31:16 | ControlFlowNode for bound_method | provenance | | +| test.py:31:5:31:16 | ControlFlowNode for bound_method | test.py:32:5:32:7 | ControlFlowNode for val | provenance | | +| test.py:32:5:32:7 | ControlFlowNode for val | test.py:33:10:33:12 | ControlFlowNode for val | provenance | | +| test.py:39:15:39:17 | ControlFlowNode for arg | test.py:40:5:40:7 | ControlFlowNode for val | provenance | | +| test.py:40:5:40:7 | ControlFlowNode for val | test.py:41:10:41:12 | ControlFlowNode for val | provenance | | +| test.py:45:5:45:7 | ControlFlowNode for src | test.py:46:15:46:17 | ControlFlowNode for src | provenance | | +| test.py:45:11:45:18 | ControlFlowNode for source() | test.py:45:5:45:7 | ControlFlowNode for src | provenance | | +| test.py:46:15:46:17 | ControlFlowNode for src | test.py:39:15:39:17 | ControlFlowNode for arg | provenance | | +| test.py:52:24:52:26 | ControlFlowNode for arg | test.py:53:5:53:7 | ControlFlowNode for val | provenance | | +| test.py:53:5:53:7 | ControlFlowNode for val | test.py:54:10:54:12 | ControlFlowNode for val | provenance | | +| test.py:57:33:57:35 | ControlFlowNode for arg | test.py:58:24:58:26 | ControlFlowNode for arg | provenance | | +| test.py:58:24:58:26 | ControlFlowNode for arg | test.py:52:24:52:26 | ControlFlowNode for arg | provenance | | +| test.py:61:33:61:35 | ControlFlowNode for arg | test.py:62:33:62:35 | ControlFlowNode for arg | provenance | | +| test.py:62:33:62:35 | ControlFlowNode for arg | test.py:57:33:57:35 | ControlFlowNode for arg | provenance | | +| test.py:65:33:65:35 | ControlFlowNode for arg | test.py:66:33:66:35 | ControlFlowNode for arg | provenance | | +| test.py:66:33:66:35 | ControlFlowNode for arg | test.py:61:33:61:35 | ControlFlowNode for arg | provenance | | +| test.py:70:5:70:7 | ControlFlowNode for src | test.py:71:33:71:35 | ControlFlowNode for src | provenance | | +| test.py:70:11:70:18 | ControlFlowNode for source() | test.py:70:5:70:7 | ControlFlowNode for src | provenance | | +| test.py:71:33:71:35 | ControlFlowNode for src | test.py:65:33:65:35 | ControlFlowNode for arg | provenance | | +| test.py:77:23:77:24 | ControlFlowNode for bm | test.py:78:5:78:7 | ControlFlowNode for val | provenance | | +| test.py:78:5:78:7 | ControlFlowNode for val | test.py:79:10:79:12 | ControlFlowNode for val | provenance | | +| test.py:83:5:83:7 | ControlFlowNode for src | test.py:84:23:84:35 | ControlFlowNode for Attribute | provenance | | +| test.py:83:11:83:18 | ControlFlowNode for source() | test.py:83:5:83:7 | ControlFlowNode for src | provenance | | +| test.py:84:23:84:35 | ControlFlowNode for Attribute | test.py:77:23:77:24 | ControlFlowNode for bm | provenance | | +| test.py:89:37:89:38 | ControlFlowNode for bm | test.py:90:5:90:7 | ControlFlowNode for val | provenance | | +| test.py:90:5:90:7 | ControlFlowNode for val | test.py:91:10:91:12 | ControlFlowNode for val | provenance | | +| test.py:94:46:94:47 | ControlFlowNode for bm | test.py:95:37:95:38 | ControlFlowNode for bm | provenance | | +| test.py:95:37:95:38 | ControlFlowNode for bm | test.py:89:37:89:38 | ControlFlowNode for bm | provenance | | +| test.py:98:46:98:47 | ControlFlowNode for bm | test.py:99:46:99:47 | ControlFlowNode for bm | provenance | | +| test.py:99:46:99:47 | ControlFlowNode for bm | test.py:94:46:94:47 | ControlFlowNode for bm | provenance | | +| test.py:102:46:102:47 | ControlFlowNode for bm | test.py:103:46:103:47 | ControlFlowNode for bm | provenance | | +| test.py:103:46:103:47 | ControlFlowNode for bm | test.py:98:46:98:47 | ControlFlowNode for bm | provenance | | +| test.py:107:5:107:7 | ControlFlowNode for src | test.py:108:46:108:58 | ControlFlowNode for Attribute | provenance | | +| test.py:107:11:107:18 | ControlFlowNode for source() | test.py:107:5:107:7 | ControlFlowNode for src | provenance | | +| test.py:108:46:108:58 | ControlFlowNode for Attribute | test.py:102:46:102:47 | ControlFlowNode for bm | provenance | | nodes | test.py:21:5:21:7 | ControlFlowNode for src | semmle.label | ControlFlowNode for src | | test.py:21:11:21:18 | ControlFlowNode for source() | semmle.label | ControlFlowNode for source() | diff --git a/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/ModificationOfParameterWithDefault.expected b/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/ModificationOfParameterWithDefault.expected index b33afdac80d..2bed4495c43 100644 --- a/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/ModificationOfParameterWithDefault.expected +++ b/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/ModificationOfParameterWithDefault.expected @@ -1,45 +1,45 @@ edges -| test.py:2:12:2:12 | ControlFlowNode for l | test.py:3:5:3:5 | ControlFlowNode for l | -| test.py:7:11:7:11 | ControlFlowNode for l | test.py:8:5:8:5 | ControlFlowNode for l | -| test.py:12:14:12:14 | ControlFlowNode for l | test.py:13:9:13:9 | ControlFlowNode for l | -| test.py:17:15:17:15 | ControlFlowNode for l | test.py:18:5:18:5 | ControlFlowNode for l | -| test.py:22:15:22:15 | ControlFlowNode for l | test.py:23:5:23:5 | ControlFlowNode for l | -| test.py:27:12:27:12 | ControlFlowNode for l | test.py:28:5:28:5 | ControlFlowNode for l | -| test.py:38:13:38:13 | ControlFlowNode for l | test.py:39:5:39:5 | ControlFlowNode for l | -| test.py:43:14:43:14 | ControlFlowNode for l | test.py:44:13:44:13 | ControlFlowNode for l | -| test.py:44:13:44:13 | ControlFlowNode for l | test.py:38:13:38:13 | ControlFlowNode for l | -| test.py:48:14:48:14 | ControlFlowNode for l | test.py:49:5:49:5 | ControlFlowNode for l | -| test.py:53:10:53:10 | ControlFlowNode for d | test.py:54:5:54:5 | ControlFlowNode for d | -| test.py:58:19:58:19 | ControlFlowNode for d | test.py:59:5:59:5 | ControlFlowNode for d | -| test.py:63:28:63:28 | ControlFlowNode for d | test.py:64:5:64:5 | ControlFlowNode for d | -| test.py:67:14:67:14 | ControlFlowNode for d | test.py:68:5:68:5 | ControlFlowNode for d | -| test.py:72:19:72:19 | ControlFlowNode for d | test.py:73:14:73:14 | ControlFlowNode for d | -| test.py:73:14:73:14 | ControlFlowNode for d | test.py:67:14:67:14 | ControlFlowNode for d | -| test.py:77:17:77:17 | ControlFlowNode for d | test.py:78:5:78:5 | ControlFlowNode for d | -| test.py:82:26:82:26 | ControlFlowNode for d | test.py:83:5:83:5 | ControlFlowNode for d | -| test.py:87:35:87:35 | ControlFlowNode for d | test.py:88:5:88:5 | ControlFlowNode for d | -| test.py:91:21:91:21 | ControlFlowNode for d | test.py:92:5:92:5 | ControlFlowNode for d | -| test.py:96:26:96:26 | ControlFlowNode for d | test.py:97:21:97:21 | ControlFlowNode for d | -| test.py:97:21:97:21 | ControlFlowNode for d | test.py:91:21:91:21 | ControlFlowNode for d | -| test.py:108:14:108:14 | ControlFlowNode for d | test.py:109:9:109:9 | ControlFlowNode for d | -| test.py:113:20:113:20 | ControlFlowNode for d | test.py:115:5:115:5 | ControlFlowNode for d | -| test.py:119:29:119:29 | ControlFlowNode for d | test.py:121:5:121:5 | ControlFlowNode for d | -| test.py:124:15:124:15 | ControlFlowNode for l | test.py:128:9:128:9 | ControlFlowNode for l | -| test.py:131:23:131:23 | ControlFlowNode for l | test.py:135:9:135:9 | ControlFlowNode for l | -| test.py:138:15:138:15 | ControlFlowNode for l | test.py:140:9:140:9 | ControlFlowNode for l | -| test.py:145:23:145:23 | ControlFlowNode for l | test.py:147:9:147:9 | ControlFlowNode for l | -| test.py:153:25:153:25 | ControlFlowNode for x | test.py:154:5:154:5 | ControlFlowNode for x | -| test.py:156:21:156:21 | ControlFlowNode for x | test.py:157:5:157:5 | ControlFlowNode for x | -| test.py:159:27:159:27 | ControlFlowNode for y | test.py:160:25:160:25 | ControlFlowNode for y | -| test.py:159:27:159:27 | ControlFlowNode for y | test.py:161:21:161:21 | ControlFlowNode for y | -| test.py:160:25:160:25 | ControlFlowNode for y | test.py:153:25:153:25 | ControlFlowNode for x | -| test.py:161:21:161:21 | ControlFlowNode for y | test.py:156:21:156:21 | ControlFlowNode for x | -| test.py:181:28:181:28 | ControlFlowNode for x | test.py:185:9:185:9 | ControlFlowNode for x | -| test.py:181:28:181:28 | ControlFlowNode for x | test.py:187:9:187:9 | ControlFlowNode for x | -| test.py:194:18:194:18 | ControlFlowNode for x | test.py:195:28:195:28 | ControlFlowNode for x | -| test.py:195:28:195:28 | ControlFlowNode for x | test.py:181:28:181:28 | ControlFlowNode for x | -| test.py:197:18:197:18 | ControlFlowNode for x | test.py:198:28:198:28 | ControlFlowNode for x | -| test.py:198:28:198:28 | ControlFlowNode for x | test.py:181:28:181:28 | ControlFlowNode for x | +| test.py:2:12:2:12 | ControlFlowNode for l | test.py:3:5:3:5 | ControlFlowNode for l | provenance | | +| test.py:7:11:7:11 | ControlFlowNode for l | test.py:8:5:8:5 | ControlFlowNode for l | provenance | | +| test.py:12:14:12:14 | ControlFlowNode for l | test.py:13:9:13:9 | ControlFlowNode for l | provenance | | +| test.py:17:15:17:15 | ControlFlowNode for l | test.py:18:5:18:5 | ControlFlowNode for l | provenance | | +| test.py:22:15:22:15 | ControlFlowNode for l | test.py:23:5:23:5 | ControlFlowNode for l | provenance | | +| test.py:27:12:27:12 | ControlFlowNode for l | test.py:28:5:28:5 | ControlFlowNode for l | provenance | | +| test.py:38:13:38:13 | ControlFlowNode for l | test.py:39:5:39:5 | ControlFlowNode for l | provenance | | +| test.py:43:14:43:14 | ControlFlowNode for l | test.py:44:13:44:13 | ControlFlowNode for l | provenance | | +| test.py:44:13:44:13 | ControlFlowNode for l | test.py:38:13:38:13 | ControlFlowNode for l | provenance | | +| test.py:48:14:48:14 | ControlFlowNode for l | test.py:49:5:49:5 | ControlFlowNode for l | provenance | | +| test.py:53:10:53:10 | ControlFlowNode for d | test.py:54:5:54:5 | ControlFlowNode for d | provenance | | +| test.py:58:19:58:19 | ControlFlowNode for d | test.py:59:5:59:5 | ControlFlowNode for d | provenance | | +| test.py:63:28:63:28 | ControlFlowNode for d | test.py:64:5:64:5 | ControlFlowNode for d | provenance | | +| test.py:67:14:67:14 | ControlFlowNode for d | test.py:68:5:68:5 | ControlFlowNode for d | provenance | | +| test.py:72:19:72:19 | ControlFlowNode for d | test.py:73:14:73:14 | ControlFlowNode for d | provenance | | +| test.py:73:14:73:14 | ControlFlowNode for d | test.py:67:14:67:14 | ControlFlowNode for d | provenance | | +| test.py:77:17:77:17 | ControlFlowNode for d | test.py:78:5:78:5 | ControlFlowNode for d | provenance | | +| test.py:82:26:82:26 | ControlFlowNode for d | test.py:83:5:83:5 | ControlFlowNode for d | provenance | | +| test.py:87:35:87:35 | ControlFlowNode for d | test.py:88:5:88:5 | ControlFlowNode for d | provenance | | +| test.py:91:21:91:21 | ControlFlowNode for d | test.py:92:5:92:5 | ControlFlowNode for d | provenance | | +| test.py:96:26:96:26 | ControlFlowNode for d | test.py:97:21:97:21 | ControlFlowNode for d | provenance | | +| test.py:97:21:97:21 | ControlFlowNode for d | test.py:91:21:91:21 | ControlFlowNode for d | provenance | | +| test.py:108:14:108:14 | ControlFlowNode for d | test.py:109:9:109:9 | ControlFlowNode for d | provenance | | +| test.py:113:20:113:20 | ControlFlowNode for d | test.py:115:5:115:5 | ControlFlowNode for d | provenance | | +| test.py:119:29:119:29 | ControlFlowNode for d | test.py:121:5:121:5 | ControlFlowNode for d | provenance | | +| test.py:124:15:124:15 | ControlFlowNode for l | test.py:128:9:128:9 | ControlFlowNode for l | provenance | | +| test.py:131:23:131:23 | ControlFlowNode for l | test.py:135:9:135:9 | ControlFlowNode for l | provenance | | +| test.py:138:15:138:15 | ControlFlowNode for l | test.py:140:9:140:9 | ControlFlowNode for l | provenance | | +| test.py:145:23:145:23 | ControlFlowNode for l | test.py:147:9:147:9 | ControlFlowNode for l | provenance | | +| test.py:153:25:153:25 | ControlFlowNode for x | test.py:154:5:154:5 | ControlFlowNode for x | provenance | | +| test.py:156:21:156:21 | ControlFlowNode for x | test.py:157:5:157:5 | ControlFlowNode for x | provenance | | +| test.py:159:27:159:27 | ControlFlowNode for y | test.py:160:25:160:25 | ControlFlowNode for y | provenance | | +| test.py:159:27:159:27 | ControlFlowNode for y | test.py:161:21:161:21 | ControlFlowNode for y | provenance | | +| test.py:160:25:160:25 | ControlFlowNode for y | test.py:153:25:153:25 | ControlFlowNode for x | provenance | | +| test.py:161:21:161:21 | ControlFlowNode for y | test.py:156:21:156:21 | ControlFlowNode for x | provenance | | +| test.py:181:28:181:28 | ControlFlowNode for x | test.py:185:9:185:9 | ControlFlowNode for x | provenance | | +| test.py:181:28:181:28 | ControlFlowNode for x | test.py:187:9:187:9 | ControlFlowNode for x | provenance | | +| test.py:194:18:194:18 | ControlFlowNode for x | test.py:195:28:195:28 | ControlFlowNode for x | provenance | | +| test.py:195:28:195:28 | ControlFlowNode for x | test.py:181:28:181:28 | ControlFlowNode for x | provenance | | +| test.py:197:18:197:18 | ControlFlowNode for x | test.py:198:28:198:28 | ControlFlowNode for x | provenance | | +| test.py:198:28:198:28 | ControlFlowNode for x | test.py:181:28:181:28 | ControlFlowNode for x | provenance | | nodes | test.py:2:12:2:12 | ControlFlowNode for l | semmle.label | ControlFlowNode for l | | test.py:3:5:3:5 | ControlFlowNode for l | semmle.label | ControlFlowNode for l | diff --git a/python/ql/test/query-tests/Security/CWE-020-ExternalAPIs/UntrustedDataToExternalAPI.expected b/python/ql/test/query-tests/Security/CWE-020-ExternalAPIs/UntrustedDataToExternalAPI.expected index 0f63973da06..1f820cfa5e1 100644 --- a/python/ql/test/query-tests/Security/CWE-020-ExternalAPIs/UntrustedDataToExternalAPI.expected +++ b/python/ql/test/query-tests/Security/CWE-020-ExternalAPIs/UntrustedDataToExternalAPI.expected @@ -1,36 +1,36 @@ edges -| test.py:5:26:5:32 | ControlFlowNode for ImportMember | test.py:5:26:5:32 | ControlFlowNode for request | -| test.py:5:26:5:32 | ControlFlowNode for request | test.py:13:16:13:22 | ControlFlowNode for request | -| test.py:5:26:5:32 | ControlFlowNode for request | test.py:23:16:23:22 | ControlFlowNode for request | -| test.py:5:26:5:32 | ControlFlowNode for request | test.py:34:12:34:18 | ControlFlowNode for request | -| test.py:5:26:5:32 | ControlFlowNode for request | test.py:42:12:42:18 | ControlFlowNode for request | -| test.py:5:26:5:32 | ControlFlowNode for request | test.py:54:12:54:18 | ControlFlowNode for request | -| test.py:13:5:13:12 | ControlFlowNode for data_raw | test.py:14:5:14:8 | ControlFlowNode for data | -| test.py:13:16:13:22 | ControlFlowNode for request | test.py:13:16:13:27 | ControlFlowNode for Attribute | -| test.py:13:16:13:27 | ControlFlowNode for Attribute | test.py:13:16:13:39 | ControlFlowNode for Attribute() | -| test.py:13:16:13:39 | ControlFlowNode for Attribute() | test.py:13:5:13:12 | ControlFlowNode for data_raw | -| test.py:14:5:14:8 | ControlFlowNode for data | test.py:15:36:15:39 | ControlFlowNode for data | -| test.py:23:5:23:12 | ControlFlowNode for data_raw | test.py:24:5:24:8 | ControlFlowNode for data | -| test.py:23:16:23:22 | ControlFlowNode for request | test.py:23:16:23:27 | ControlFlowNode for Attribute | -| test.py:23:16:23:27 | ControlFlowNode for Attribute | test.py:23:16:23:39 | ControlFlowNode for Attribute() | -| test.py:23:16:23:39 | ControlFlowNode for Attribute() | test.py:23:5:23:12 | ControlFlowNode for data_raw | -| test.py:24:5:24:8 | ControlFlowNode for data | test.py:25:44:25:47 | ControlFlowNode for data | -| test.py:34:5:34:8 | ControlFlowNode for data | test.py:35:10:35:13 | ControlFlowNode for data | -| test.py:34:5:34:8 | ControlFlowNode for data | test.py:36:13:36:16 | ControlFlowNode for data | -| test.py:34:12:34:18 | ControlFlowNode for request | test.py:34:12:34:23 | ControlFlowNode for Attribute | -| test.py:34:12:34:23 | ControlFlowNode for Attribute | test.py:34:12:34:35 | ControlFlowNode for Attribute() | -| test.py:34:12:34:35 | ControlFlowNode for Attribute() | test.py:34:5:34:8 | ControlFlowNode for data | -| test.py:42:5:42:8 | ControlFlowNode for data | test.py:43:22:43:25 | ControlFlowNode for data | -| test.py:42:5:42:8 | ControlFlowNode for data | test.py:44:25:44:28 | ControlFlowNode for data | -| test.py:42:12:42:18 | ControlFlowNode for request | test.py:42:12:42:23 | ControlFlowNode for Attribute | -| test.py:42:12:42:23 | ControlFlowNode for Attribute | test.py:42:12:42:35 | ControlFlowNode for Attribute() | -| test.py:42:12:42:35 | ControlFlowNode for Attribute() | test.py:42:5:42:8 | ControlFlowNode for data | -| test.py:47:17:47:19 | ControlFlowNode for arg | test.py:50:32:50:34 | ControlFlowNode for arg | -| test.py:54:5:54:8 | ControlFlowNode for data | test.py:55:17:55:20 | ControlFlowNode for data | -| test.py:54:12:54:18 | ControlFlowNode for request | test.py:54:12:54:23 | ControlFlowNode for Attribute | -| test.py:54:12:54:23 | ControlFlowNode for Attribute | test.py:54:12:54:35 | ControlFlowNode for Attribute() | -| test.py:54:12:54:35 | ControlFlowNode for Attribute() | test.py:54:5:54:8 | ControlFlowNode for data | -| test.py:55:17:55:20 | ControlFlowNode for data | test.py:47:17:47:19 | ControlFlowNode for arg | +| test.py:5:26:5:32 | ControlFlowNode for ImportMember | test.py:5:26:5:32 | ControlFlowNode for request | provenance | | +| test.py:5:26:5:32 | ControlFlowNode for request | test.py:13:16:13:22 | ControlFlowNode for request | provenance | | +| test.py:5:26:5:32 | ControlFlowNode for request | test.py:23:16:23:22 | ControlFlowNode for request | provenance | | +| test.py:5:26:5:32 | ControlFlowNode for request | test.py:34:12:34:18 | ControlFlowNode for request | provenance | | +| test.py:5:26:5:32 | ControlFlowNode for request | test.py:42:12:42:18 | ControlFlowNode for request | provenance | | +| test.py:5:26:5:32 | ControlFlowNode for request | test.py:54:12:54:18 | ControlFlowNode for request | provenance | | +| test.py:13:5:13:12 | ControlFlowNode for data_raw | test.py:14:5:14:8 | ControlFlowNode for data | provenance | | +| test.py:13:16:13:22 | ControlFlowNode for request | test.py:13:16:13:27 | ControlFlowNode for Attribute | provenance | | +| test.py:13:16:13:27 | ControlFlowNode for Attribute | test.py:13:16:13:39 | ControlFlowNode for Attribute() | provenance | | +| test.py:13:16:13:39 | ControlFlowNode for Attribute() | test.py:13:5:13:12 | ControlFlowNode for data_raw | provenance | | +| test.py:14:5:14:8 | ControlFlowNode for data | test.py:15:36:15:39 | ControlFlowNode for data | provenance | | +| test.py:23:5:23:12 | ControlFlowNode for data_raw | test.py:24:5:24:8 | ControlFlowNode for data | provenance | | +| test.py:23:16:23:22 | ControlFlowNode for request | test.py:23:16:23:27 | ControlFlowNode for Attribute | provenance | | +| test.py:23:16:23:27 | ControlFlowNode for Attribute | test.py:23:16:23:39 | ControlFlowNode for Attribute() | provenance | | +| test.py:23:16:23:39 | ControlFlowNode for Attribute() | test.py:23:5:23:12 | ControlFlowNode for data_raw | provenance | | +| test.py:24:5:24:8 | ControlFlowNode for data | test.py:25:44:25:47 | ControlFlowNode for data | provenance | | +| test.py:34:5:34:8 | ControlFlowNode for data | test.py:35:10:35:13 | ControlFlowNode for data | provenance | | +| test.py:34:5:34:8 | ControlFlowNode for data | test.py:36:13:36:16 | ControlFlowNode for data | provenance | | +| test.py:34:12:34:18 | ControlFlowNode for request | test.py:34:12:34:23 | ControlFlowNode for Attribute | provenance | | +| test.py:34:12:34:23 | ControlFlowNode for Attribute | test.py:34:12:34:35 | ControlFlowNode for Attribute() | provenance | | +| test.py:34:12:34:35 | ControlFlowNode for Attribute() | test.py:34:5:34:8 | ControlFlowNode for data | provenance | | +| test.py:42:5:42:8 | ControlFlowNode for data | test.py:43:22:43:25 | ControlFlowNode for data | provenance | | +| test.py:42:5:42:8 | ControlFlowNode for data | test.py:44:25:44:28 | ControlFlowNode for data | provenance | | +| test.py:42:12:42:18 | ControlFlowNode for request | test.py:42:12:42:23 | ControlFlowNode for Attribute | provenance | | +| test.py:42:12:42:23 | ControlFlowNode for Attribute | test.py:42:12:42:35 | ControlFlowNode for Attribute() | provenance | | +| test.py:42:12:42:35 | ControlFlowNode for Attribute() | test.py:42:5:42:8 | ControlFlowNode for data | provenance | | +| test.py:47:17:47:19 | ControlFlowNode for arg | test.py:50:32:50:34 | ControlFlowNode for arg | provenance | | +| test.py:54:5:54:8 | ControlFlowNode for data | test.py:55:17:55:20 | ControlFlowNode for data | provenance | | +| test.py:54:12:54:18 | ControlFlowNode for request | test.py:54:12:54:23 | ControlFlowNode for Attribute | provenance | | +| test.py:54:12:54:23 | ControlFlowNode for Attribute | test.py:54:12:54:35 | ControlFlowNode for Attribute() | provenance | | +| test.py:54:12:54:35 | ControlFlowNode for Attribute() | test.py:54:5:54:8 | ControlFlowNode for data | provenance | | +| test.py:55:17:55:20 | ControlFlowNode for data | test.py:47:17:47:19 | ControlFlowNode for arg | provenance | | nodes | test.py:5:26:5:32 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | | test.py:5:26:5:32 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | diff --git a/python/ql/test/query-tests/Security/CWE-022-PathInjection/PathInjection.expected b/python/ql/test/query-tests/Security/CWE-022-PathInjection/PathInjection.expected index 2099e5e9d85..4fe7b60580c 100644 --- a/python/ql/test/query-tests/Security/CWE-022-PathInjection/PathInjection.expected +++ b/python/ql/test/query-tests/Security/CWE-022-PathInjection/PathInjection.expected @@ -1,126 +1,126 @@ edges -| flask_path_injection.py:1:26:1:32 | ControlFlowNode for ImportMember | flask_path_injection.py:1:26:1:32 | ControlFlowNode for request | -| flask_path_injection.py:1:26:1:32 | ControlFlowNode for request | flask_path_injection.py:19:15:19:21 | ControlFlowNode for request | -| flask_path_injection.py:19:5:19:11 | ControlFlowNode for dirname | flask_path_injection.py:21:32:21:38 | ControlFlowNode for dirname | -| flask_path_injection.py:19:15:19:21 | ControlFlowNode for request | flask_path_injection.py:19:15:19:26 | ControlFlowNode for Attribute | -| flask_path_injection.py:19:15:19:26 | ControlFlowNode for Attribute | flask_path_injection.py:19:15:19:45 | ControlFlowNode for Attribute() | -| flask_path_injection.py:19:15:19:45 | ControlFlowNode for Attribute() | flask_path_injection.py:19:5:19:11 | ControlFlowNode for dirname | -| path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | path_injection.py:3:26:3:32 | ControlFlowNode for request | -| path_injection.py:3:26:3:32 | ControlFlowNode for request | path_injection.py:12:16:12:22 | ControlFlowNode for request | -| path_injection.py:3:26:3:32 | ControlFlowNode for request | path_injection.py:19:16:19:22 | ControlFlowNode for request | -| path_injection.py:3:26:3:32 | ControlFlowNode for request | path_injection.py:27:16:27:22 | ControlFlowNode for request | -| path_injection.py:3:26:3:32 | ControlFlowNode for request | path_injection.py:46:16:46:22 | ControlFlowNode for request | -| path_injection.py:3:26:3:32 | ControlFlowNode for request | path_injection.py:63:16:63:22 | ControlFlowNode for request | -| path_injection.py:3:26:3:32 | ControlFlowNode for request | path_injection.py:84:16:84:22 | ControlFlowNode for request | -| path_injection.py:3:26:3:32 | ControlFlowNode for request | path_injection.py:107:16:107:22 | ControlFlowNode for request | -| path_injection.py:3:26:3:32 | ControlFlowNode for request | path_injection.py:118:16:118:22 | ControlFlowNode for request | -| path_injection.py:3:26:3:32 | ControlFlowNode for request | path_injection.py:129:16:129:22 | ControlFlowNode for request | -| path_injection.py:3:26:3:32 | ControlFlowNode for request | path_injection.py:138:16:138:22 | ControlFlowNode for request | -| path_injection.py:3:26:3:32 | ControlFlowNode for request | path_injection.py:149:16:149:22 | ControlFlowNode for request | -| path_injection.py:12:5:12:12 | ControlFlowNode for filename | path_injection.py:13:14:13:47 | ControlFlowNode for Attribute() | -| path_injection.py:12:16:12:22 | ControlFlowNode for request | path_injection.py:12:16:12:27 | ControlFlowNode for Attribute | -| path_injection.py:12:16:12:27 | ControlFlowNode for Attribute | path_injection.py:12:16:12:47 | ControlFlowNode for Attribute() | -| path_injection.py:12:16:12:47 | ControlFlowNode for Attribute() | path_injection.py:12:5:12:12 | ControlFlowNode for filename | -| path_injection.py:19:5:19:12 | ControlFlowNode for filename | path_injection.py:20:30:20:63 | ControlFlowNode for Attribute() | -| path_injection.py:19:16:19:22 | ControlFlowNode for request | path_injection.py:19:16:19:27 | ControlFlowNode for Attribute | -| path_injection.py:19:16:19:27 | ControlFlowNode for Attribute | path_injection.py:19:16:19:47 | ControlFlowNode for Attribute() | -| path_injection.py:19:16:19:47 | ControlFlowNode for Attribute() | path_injection.py:19:5:19:12 | ControlFlowNode for filename | -| path_injection.py:20:5:20:9 | ControlFlowNode for npath | path_injection.py:21:14:21:18 | ControlFlowNode for npath | -| path_injection.py:20:13:20:64 | ControlFlowNode for Attribute() | path_injection.py:20:5:20:9 | ControlFlowNode for npath | -| path_injection.py:20:30:20:63 | ControlFlowNode for Attribute() | path_injection.py:20:13:20:64 | ControlFlowNode for Attribute() | -| path_injection.py:27:5:27:12 | ControlFlowNode for filename | path_injection.py:28:30:28:63 | ControlFlowNode for Attribute() | -| path_injection.py:27:16:27:22 | ControlFlowNode for request | path_injection.py:27:16:27:27 | ControlFlowNode for Attribute | -| path_injection.py:27:16:27:27 | ControlFlowNode for Attribute | path_injection.py:27:16:27:47 | ControlFlowNode for Attribute() | -| path_injection.py:27:16:27:47 | ControlFlowNode for Attribute() | path_injection.py:27:5:27:12 | ControlFlowNode for filename | -| path_injection.py:28:5:28:9 | ControlFlowNode for npath | path_injection.py:31:14:31:18 | ControlFlowNode for npath | -| path_injection.py:28:13:28:64 | ControlFlowNode for Attribute() | path_injection.py:28:5:28:9 | ControlFlowNode for npath | -| path_injection.py:28:30:28:63 | ControlFlowNode for Attribute() | path_injection.py:28:13:28:64 | ControlFlowNode for Attribute() | -| path_injection.py:46:5:46:12 | ControlFlowNode for filename | path_injection.py:47:30:47:63 | ControlFlowNode for Attribute() | -| path_injection.py:46:16:46:22 | ControlFlowNode for request | path_injection.py:46:16:46:27 | ControlFlowNode for Attribute | -| path_injection.py:46:16:46:27 | ControlFlowNode for Attribute | path_injection.py:46:16:46:47 | ControlFlowNode for Attribute() | -| path_injection.py:46:16:46:47 | ControlFlowNode for Attribute() | path_injection.py:46:5:46:12 | ControlFlowNode for filename | -| path_injection.py:47:5:47:9 | ControlFlowNode for npath | path_injection.py:48:14:48:18 | ControlFlowNode for npath | -| path_injection.py:47:13:47:64 | ControlFlowNode for Attribute() | path_injection.py:47:5:47:9 | ControlFlowNode for npath | -| path_injection.py:47:30:47:63 | ControlFlowNode for Attribute() | path_injection.py:47:13:47:64 | ControlFlowNode for Attribute() | -| path_injection.py:63:5:63:12 | ControlFlowNode for filename | path_injection.py:64:29:64:62 | ControlFlowNode for Attribute() | -| path_injection.py:63:16:63:22 | ControlFlowNode for request | path_injection.py:63:16:63:27 | ControlFlowNode for Attribute | -| path_injection.py:63:16:63:27 | ControlFlowNode for Attribute | path_injection.py:63:16:63:47 | ControlFlowNode for Attribute() | -| path_injection.py:63:16:63:47 | ControlFlowNode for Attribute() | path_injection.py:63:5:63:12 | ControlFlowNode for filename | -| path_injection.py:64:5:64:9 | ControlFlowNode for npath | path_injection.py:65:14:65:18 | ControlFlowNode for npath | -| path_injection.py:64:13:64:63 | ControlFlowNode for Attribute() | path_injection.py:64:5:64:9 | ControlFlowNode for npath | -| path_injection.py:64:29:64:62 | ControlFlowNode for Attribute() | path_injection.py:64:13:64:63 | ControlFlowNode for Attribute() | -| path_injection.py:84:5:84:12 | ControlFlowNode for filename | path_injection.py:85:5:85:24 | ControlFlowNode for possibly_unsafe_path | -| path_injection.py:84:16:84:22 | ControlFlowNode for request | path_injection.py:84:16:84:27 | ControlFlowNode for Attribute | -| path_injection.py:84:16:84:27 | ControlFlowNode for Attribute | path_injection.py:84:16:84:47 | ControlFlowNode for Attribute() | -| path_injection.py:84:16:84:47 | ControlFlowNode for Attribute() | path_injection.py:84:5:84:12 | ControlFlowNode for filename | -| path_injection.py:85:5:85:24 | ControlFlowNode for possibly_unsafe_path | path_injection.py:86:24:86:43 | ControlFlowNode for possibly_unsafe_path | -| path_injection.py:86:24:86:43 | ControlFlowNode for possibly_unsafe_path | path_injection.py:87:18:87:37 | ControlFlowNode for possibly_unsafe_path | -| path_injection.py:91:20:91:25 | ControlFlowNode for foo_id | path_injection.py:93:5:93:8 | ControlFlowNode for path | -| path_injection.py:93:5:93:8 | ControlFlowNode for path | path_injection.py:94:14:94:17 | ControlFlowNode for path | -| path_injection.py:98:20:98:22 | ControlFlowNode for foo | path_injection.py:101:5:101:8 | ControlFlowNode for path | -| path_injection.py:101:5:101:8 | ControlFlowNode for path | path_injection.py:102:14:102:17 | ControlFlowNode for path | -| path_injection.py:107:5:107:12 | ControlFlowNode for filename | path_injection.py:108:5:108:8 | ControlFlowNode for path | -| path_injection.py:107:16:107:22 | ControlFlowNode for request | path_injection.py:107:16:107:27 | ControlFlowNode for Attribute | -| path_injection.py:107:16:107:27 | ControlFlowNode for Attribute | path_injection.py:107:16:107:47 | ControlFlowNode for Attribute() | -| path_injection.py:107:16:107:47 | ControlFlowNode for Attribute() | path_injection.py:107:5:107:12 | ControlFlowNode for filename | -| path_injection.py:108:5:108:8 | ControlFlowNode for path | path_injection.py:113:14:113:17 | ControlFlowNode for path | -| path_injection.py:118:5:118:12 | ControlFlowNode for filename | path_injection.py:119:5:119:8 | ControlFlowNode for path | -| path_injection.py:118:16:118:22 | ControlFlowNode for request | path_injection.py:118:16:118:27 | ControlFlowNode for Attribute | -| path_injection.py:118:16:118:27 | ControlFlowNode for Attribute | path_injection.py:118:16:118:47 | ControlFlowNode for Attribute() | -| path_injection.py:118:16:118:47 | ControlFlowNode for Attribute() | path_injection.py:118:5:118:12 | ControlFlowNode for filename | -| path_injection.py:119:5:119:8 | ControlFlowNode for path | path_injection.py:124:14:124:17 | ControlFlowNode for path | -| path_injection.py:129:5:129:12 | ControlFlowNode for filename | path_injection.py:130:5:130:8 | ControlFlowNode for path | -| path_injection.py:129:16:129:22 | ControlFlowNode for request | path_injection.py:129:16:129:27 | ControlFlowNode for Attribute | -| path_injection.py:129:16:129:27 | ControlFlowNode for Attribute | path_injection.py:129:16:129:47 | ControlFlowNode for Attribute() | -| path_injection.py:129:16:129:47 | ControlFlowNode for Attribute() | path_injection.py:129:5:129:12 | ControlFlowNode for filename | -| path_injection.py:130:5:130:8 | ControlFlowNode for path | path_injection.py:131:5:131:13 | ControlFlowNode for sanitized | -| path_injection.py:131:5:131:13 | ControlFlowNode for sanitized | path_injection.py:132:14:132:22 | ControlFlowNode for sanitized | -| path_injection.py:138:5:138:12 | ControlFlowNode for filename | path_injection.py:139:5:139:8 | ControlFlowNode for path | -| path_injection.py:138:16:138:22 | ControlFlowNode for request | path_injection.py:138:16:138:27 | ControlFlowNode for Attribute | -| path_injection.py:138:16:138:27 | ControlFlowNode for Attribute | path_injection.py:138:16:138:47 | ControlFlowNode for Attribute() | -| path_injection.py:138:16:138:47 | ControlFlowNode for Attribute() | path_injection.py:138:5:138:12 | ControlFlowNode for filename | -| path_injection.py:139:5:139:8 | ControlFlowNode for path | path_injection.py:140:47:140:50 | ControlFlowNode for path | -| path_injection.py:140:47:140:50 | ControlFlowNode for path | path_injection.py:142:14:142:17 | ControlFlowNode for path | -| path_injection.py:149:5:149:12 | ControlFlowNode for filename | path_injection.py:151:9:151:12 | ControlFlowNode for path | -| path_injection.py:149:16:149:22 | ControlFlowNode for request | path_injection.py:149:16:149:27 | ControlFlowNode for Attribute | -| path_injection.py:149:16:149:27 | ControlFlowNode for Attribute | path_injection.py:149:16:149:47 | ControlFlowNode for Attribute() | -| path_injection.py:149:16:149:47 | ControlFlowNode for Attribute() | path_injection.py:149:5:149:12 | ControlFlowNode for filename | -| path_injection.py:151:9:151:12 | ControlFlowNode for path | path_injection.py:152:18:152:21 | ControlFlowNode for path | -| pathlib_use.py:3:26:3:32 | ControlFlowNode for ImportMember | pathlib_use.py:3:26:3:32 | ControlFlowNode for request | -| pathlib_use.py:3:26:3:32 | ControlFlowNode for request | pathlib_use.py:12:16:12:22 | ControlFlowNode for request | -| pathlib_use.py:12:5:12:12 | ControlFlowNode for filename | pathlib_use.py:13:5:13:5 | ControlFlowNode for p | -| pathlib_use.py:12:5:12:12 | ControlFlowNode for filename | pathlib_use.py:16:5:16:6 | ControlFlowNode for p2 | -| pathlib_use.py:12:16:12:22 | ControlFlowNode for request | pathlib_use.py:12:16:12:27 | ControlFlowNode for Attribute | -| pathlib_use.py:12:16:12:27 | ControlFlowNode for Attribute | pathlib_use.py:12:16:12:47 | ControlFlowNode for Attribute() | -| pathlib_use.py:12:16:12:47 | ControlFlowNode for Attribute() | pathlib_use.py:12:5:12:12 | ControlFlowNode for filename | -| pathlib_use.py:13:5:13:5 | ControlFlowNode for p | pathlib_use.py:14:5:14:5 | ControlFlowNode for p | -| pathlib_use.py:16:5:16:6 | ControlFlowNode for p2 | pathlib_use.py:17:5:17:6 | ControlFlowNode for p2 | -| test.py:3:26:3:32 | ControlFlowNode for ImportMember | test.py:3:26:3:32 | ControlFlowNode for request | -| test.py:3:26:3:32 | ControlFlowNode for request | test.py:9:12:9:18 | ControlFlowNode for request | -| test.py:9:12:9:18 | ControlFlowNode for request | test.py:9:12:9:23 | ControlFlowNode for Attribute | -| test.py:9:12:9:23 | ControlFlowNode for Attribute | test.py:9:12:9:39 | ControlFlowNode for Attribute() | -| test.py:9:12:9:39 | ControlFlowNode for Attribute() | test.py:18:9:18:16 | ControlFlowNode for source() | -| test.py:9:12:9:39 | ControlFlowNode for Attribute() | test.py:24:9:24:16 | ControlFlowNode for source() | -| test.py:9:12:9:39 | ControlFlowNode for Attribute() | test.py:31:9:31:16 | ControlFlowNode for source() | -| test.py:9:12:9:39 | ControlFlowNode for Attribute() | test.py:46:9:46:16 | ControlFlowNode for source() | -| test.py:12:15:12:15 | ControlFlowNode for x | test.py:13:29:13:29 | ControlFlowNode for x | -| test.py:13:29:13:29 | ControlFlowNode for x | test.py:13:12:13:30 | ControlFlowNode for Attribute() | -| test.py:18:5:18:5 | ControlFlowNode for x | test.py:19:10:19:10 | ControlFlowNode for x | -| test.py:18:9:18:16 | ControlFlowNode for source() | test.py:18:5:18:5 | ControlFlowNode for x | -| test.py:24:5:24:5 | ControlFlowNode for x | test.py:25:19:25:19 | ControlFlowNode for x | -| test.py:24:9:24:16 | ControlFlowNode for source() | test.py:24:5:24:5 | ControlFlowNode for x | -| test.py:25:5:25:5 | ControlFlowNode for y | test.py:26:10:26:10 | ControlFlowNode for y | -| test.py:25:9:25:20 | ControlFlowNode for normalize() | test.py:25:5:25:5 | ControlFlowNode for y | -| test.py:25:19:25:19 | ControlFlowNode for x | test.py:12:15:12:15 | ControlFlowNode for x | -| test.py:25:19:25:19 | ControlFlowNode for x | test.py:25:9:25:20 | ControlFlowNode for normalize() | -| test.py:31:5:31:5 | ControlFlowNode for x | test.py:33:14:33:14 | ControlFlowNode for x | -| test.py:31:9:31:16 | ControlFlowNode for source() | test.py:31:5:31:5 | ControlFlowNode for x | -| test.py:46:5:46:5 | ControlFlowNode for x | test.py:48:23:48:23 | ControlFlowNode for x | -| test.py:46:9:46:16 | ControlFlowNode for source() | test.py:46:5:46:5 | ControlFlowNode for x | -| test.py:48:9:48:9 | ControlFlowNode for y | test.py:49:14:49:14 | ControlFlowNode for y | -| test.py:48:13:48:24 | ControlFlowNode for normalize() | test.py:48:9:48:9 | ControlFlowNode for y | -| test.py:48:23:48:23 | ControlFlowNode for x | test.py:12:15:12:15 | ControlFlowNode for x | -| test.py:48:23:48:23 | ControlFlowNode for x | test.py:48:13:48:24 | ControlFlowNode for normalize() | +| flask_path_injection.py:1:26:1:32 | ControlFlowNode for ImportMember | flask_path_injection.py:1:26:1:32 | ControlFlowNode for request | provenance | | +| flask_path_injection.py:1:26:1:32 | ControlFlowNode for request | flask_path_injection.py:19:15:19:21 | ControlFlowNode for request | provenance | | +| flask_path_injection.py:19:5:19:11 | ControlFlowNode for dirname | flask_path_injection.py:21:32:21:38 | ControlFlowNode for dirname | provenance | | +| flask_path_injection.py:19:15:19:21 | ControlFlowNode for request | flask_path_injection.py:19:15:19:26 | ControlFlowNode for Attribute | provenance | | +| flask_path_injection.py:19:15:19:26 | ControlFlowNode for Attribute | flask_path_injection.py:19:15:19:45 | ControlFlowNode for Attribute() | provenance | | +| flask_path_injection.py:19:15:19:45 | ControlFlowNode for Attribute() | flask_path_injection.py:19:5:19:11 | ControlFlowNode for dirname | provenance | | +| path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | path_injection.py:3:26:3:32 | ControlFlowNode for request | provenance | | +| path_injection.py:3:26:3:32 | ControlFlowNode for request | path_injection.py:12:16:12:22 | ControlFlowNode for request | provenance | | +| path_injection.py:3:26:3:32 | ControlFlowNode for request | path_injection.py:19:16:19:22 | ControlFlowNode for request | provenance | | +| path_injection.py:3:26:3:32 | ControlFlowNode for request | path_injection.py:27:16:27:22 | ControlFlowNode for request | provenance | | +| path_injection.py:3:26:3:32 | ControlFlowNode for request | path_injection.py:46:16:46:22 | ControlFlowNode for request | provenance | | +| path_injection.py:3:26:3:32 | ControlFlowNode for request | path_injection.py:63:16:63:22 | ControlFlowNode for request | provenance | | +| path_injection.py:3:26:3:32 | ControlFlowNode for request | path_injection.py:84:16:84:22 | ControlFlowNode for request | provenance | | +| path_injection.py:3:26:3:32 | ControlFlowNode for request | path_injection.py:107:16:107:22 | ControlFlowNode for request | provenance | | +| path_injection.py:3:26:3:32 | ControlFlowNode for request | path_injection.py:118:16:118:22 | ControlFlowNode for request | provenance | | +| path_injection.py:3:26:3:32 | ControlFlowNode for request | path_injection.py:129:16:129:22 | ControlFlowNode for request | provenance | | +| path_injection.py:3:26:3:32 | ControlFlowNode for request | path_injection.py:138:16:138:22 | ControlFlowNode for request | provenance | | +| path_injection.py:3:26:3:32 | ControlFlowNode for request | path_injection.py:149:16:149:22 | ControlFlowNode for request | provenance | | +| path_injection.py:12:5:12:12 | ControlFlowNode for filename | path_injection.py:13:14:13:47 | ControlFlowNode for Attribute() | provenance | | +| path_injection.py:12:16:12:22 | ControlFlowNode for request | path_injection.py:12:16:12:27 | ControlFlowNode for Attribute | provenance | | +| path_injection.py:12:16:12:27 | ControlFlowNode for Attribute | path_injection.py:12:16:12:47 | ControlFlowNode for Attribute() | provenance | | +| path_injection.py:12:16:12:47 | ControlFlowNode for Attribute() | path_injection.py:12:5:12:12 | ControlFlowNode for filename | provenance | | +| path_injection.py:19:5:19:12 | ControlFlowNode for filename | path_injection.py:20:30:20:63 | ControlFlowNode for Attribute() | provenance | | +| path_injection.py:19:16:19:22 | ControlFlowNode for request | path_injection.py:19:16:19:27 | ControlFlowNode for Attribute | provenance | | +| path_injection.py:19:16:19:27 | ControlFlowNode for Attribute | path_injection.py:19:16:19:47 | ControlFlowNode for Attribute() | provenance | | +| path_injection.py:19:16:19:47 | ControlFlowNode for Attribute() | path_injection.py:19:5:19:12 | ControlFlowNode for filename | provenance | | +| path_injection.py:20:5:20:9 | ControlFlowNode for npath | path_injection.py:21:14:21:18 | ControlFlowNode for npath | provenance | | +| path_injection.py:20:13:20:64 | ControlFlowNode for Attribute() | path_injection.py:20:5:20:9 | ControlFlowNode for npath | provenance | | +| path_injection.py:20:30:20:63 | ControlFlowNode for Attribute() | path_injection.py:20:13:20:64 | ControlFlowNode for Attribute() | provenance | | +| path_injection.py:27:5:27:12 | ControlFlowNode for filename | path_injection.py:28:30:28:63 | ControlFlowNode for Attribute() | provenance | | +| path_injection.py:27:16:27:22 | ControlFlowNode for request | path_injection.py:27:16:27:27 | ControlFlowNode for Attribute | provenance | | +| path_injection.py:27:16:27:27 | ControlFlowNode for Attribute | path_injection.py:27:16:27:47 | ControlFlowNode for Attribute() | provenance | | +| path_injection.py:27:16:27:47 | ControlFlowNode for Attribute() | path_injection.py:27:5:27:12 | ControlFlowNode for filename | provenance | | +| path_injection.py:28:5:28:9 | ControlFlowNode for npath | path_injection.py:31:14:31:18 | ControlFlowNode for npath | provenance | | +| path_injection.py:28:13:28:64 | ControlFlowNode for Attribute() | path_injection.py:28:5:28:9 | ControlFlowNode for npath | provenance | | +| path_injection.py:28:30:28:63 | ControlFlowNode for Attribute() | path_injection.py:28:13:28:64 | ControlFlowNode for Attribute() | provenance | | +| path_injection.py:46:5:46:12 | ControlFlowNode for filename | path_injection.py:47:30:47:63 | ControlFlowNode for Attribute() | provenance | | +| path_injection.py:46:16:46:22 | ControlFlowNode for request | path_injection.py:46:16:46:27 | ControlFlowNode for Attribute | provenance | | +| path_injection.py:46:16:46:27 | ControlFlowNode for Attribute | path_injection.py:46:16:46:47 | ControlFlowNode for Attribute() | provenance | | +| path_injection.py:46:16:46:47 | ControlFlowNode for Attribute() | path_injection.py:46:5:46:12 | ControlFlowNode for filename | provenance | | +| path_injection.py:47:5:47:9 | ControlFlowNode for npath | path_injection.py:48:14:48:18 | ControlFlowNode for npath | provenance | | +| path_injection.py:47:13:47:64 | ControlFlowNode for Attribute() | path_injection.py:47:5:47:9 | ControlFlowNode for npath | provenance | | +| path_injection.py:47:30:47:63 | ControlFlowNode for Attribute() | path_injection.py:47:13:47:64 | ControlFlowNode for Attribute() | provenance | | +| path_injection.py:63:5:63:12 | ControlFlowNode for filename | path_injection.py:64:29:64:62 | ControlFlowNode for Attribute() | provenance | | +| path_injection.py:63:16:63:22 | ControlFlowNode for request | path_injection.py:63:16:63:27 | ControlFlowNode for Attribute | provenance | | +| path_injection.py:63:16:63:27 | ControlFlowNode for Attribute | path_injection.py:63:16:63:47 | ControlFlowNode for Attribute() | provenance | | +| path_injection.py:63:16:63:47 | ControlFlowNode for Attribute() | path_injection.py:63:5:63:12 | ControlFlowNode for filename | provenance | | +| path_injection.py:64:5:64:9 | ControlFlowNode for npath | path_injection.py:65:14:65:18 | ControlFlowNode for npath | provenance | | +| path_injection.py:64:13:64:63 | ControlFlowNode for Attribute() | path_injection.py:64:5:64:9 | ControlFlowNode for npath | provenance | | +| path_injection.py:64:29:64:62 | ControlFlowNode for Attribute() | path_injection.py:64:13:64:63 | ControlFlowNode for Attribute() | provenance | | +| path_injection.py:84:5:84:12 | ControlFlowNode for filename | path_injection.py:85:5:85:24 | ControlFlowNode for possibly_unsafe_path | provenance | | +| path_injection.py:84:16:84:22 | ControlFlowNode for request | path_injection.py:84:16:84:27 | ControlFlowNode for Attribute | provenance | | +| path_injection.py:84:16:84:27 | ControlFlowNode for Attribute | path_injection.py:84:16:84:47 | ControlFlowNode for Attribute() | provenance | | +| path_injection.py:84:16:84:47 | ControlFlowNode for Attribute() | path_injection.py:84:5:84:12 | ControlFlowNode for filename | provenance | | +| path_injection.py:85:5:85:24 | ControlFlowNode for possibly_unsafe_path | path_injection.py:86:24:86:43 | ControlFlowNode for possibly_unsafe_path | provenance | | +| path_injection.py:86:24:86:43 | ControlFlowNode for possibly_unsafe_path | path_injection.py:87:18:87:37 | ControlFlowNode for possibly_unsafe_path | provenance | | +| path_injection.py:91:20:91:25 | ControlFlowNode for foo_id | path_injection.py:93:5:93:8 | ControlFlowNode for path | provenance | | +| path_injection.py:93:5:93:8 | ControlFlowNode for path | path_injection.py:94:14:94:17 | ControlFlowNode for path | provenance | | +| path_injection.py:98:20:98:22 | ControlFlowNode for foo | path_injection.py:101:5:101:8 | ControlFlowNode for path | provenance | | +| path_injection.py:101:5:101:8 | ControlFlowNode for path | path_injection.py:102:14:102:17 | ControlFlowNode for path | provenance | | +| path_injection.py:107:5:107:12 | ControlFlowNode for filename | path_injection.py:108:5:108:8 | ControlFlowNode for path | provenance | | +| path_injection.py:107:16:107:22 | ControlFlowNode for request | path_injection.py:107:16:107:27 | ControlFlowNode for Attribute | provenance | | +| path_injection.py:107:16:107:27 | ControlFlowNode for Attribute | path_injection.py:107:16:107:47 | ControlFlowNode for Attribute() | provenance | | +| path_injection.py:107:16:107:47 | ControlFlowNode for Attribute() | path_injection.py:107:5:107:12 | ControlFlowNode for filename | provenance | | +| path_injection.py:108:5:108:8 | ControlFlowNode for path | path_injection.py:113:14:113:17 | ControlFlowNode for path | provenance | | +| path_injection.py:118:5:118:12 | ControlFlowNode for filename | path_injection.py:119:5:119:8 | ControlFlowNode for path | provenance | | +| path_injection.py:118:16:118:22 | ControlFlowNode for request | path_injection.py:118:16:118:27 | ControlFlowNode for Attribute | provenance | | +| path_injection.py:118:16:118:27 | ControlFlowNode for Attribute | path_injection.py:118:16:118:47 | ControlFlowNode for Attribute() | provenance | | +| path_injection.py:118:16:118:47 | ControlFlowNode for Attribute() | path_injection.py:118:5:118:12 | ControlFlowNode for filename | provenance | | +| path_injection.py:119:5:119:8 | ControlFlowNode for path | path_injection.py:124:14:124:17 | ControlFlowNode for path | provenance | | +| path_injection.py:129:5:129:12 | ControlFlowNode for filename | path_injection.py:130:5:130:8 | ControlFlowNode for path | provenance | | +| path_injection.py:129:16:129:22 | ControlFlowNode for request | path_injection.py:129:16:129:27 | ControlFlowNode for Attribute | provenance | | +| path_injection.py:129:16:129:27 | ControlFlowNode for Attribute | path_injection.py:129:16:129:47 | ControlFlowNode for Attribute() | provenance | | +| path_injection.py:129:16:129:47 | ControlFlowNode for Attribute() | path_injection.py:129:5:129:12 | ControlFlowNode for filename | provenance | | +| path_injection.py:130:5:130:8 | ControlFlowNode for path | path_injection.py:131:5:131:13 | ControlFlowNode for sanitized | provenance | | +| path_injection.py:131:5:131:13 | ControlFlowNode for sanitized | path_injection.py:132:14:132:22 | ControlFlowNode for sanitized | provenance | | +| path_injection.py:138:5:138:12 | ControlFlowNode for filename | path_injection.py:139:5:139:8 | ControlFlowNode for path | provenance | | +| path_injection.py:138:16:138:22 | ControlFlowNode for request | path_injection.py:138:16:138:27 | ControlFlowNode for Attribute | provenance | | +| path_injection.py:138:16:138:27 | ControlFlowNode for Attribute | path_injection.py:138:16:138:47 | ControlFlowNode for Attribute() | provenance | | +| path_injection.py:138:16:138:47 | ControlFlowNode for Attribute() | path_injection.py:138:5:138:12 | ControlFlowNode for filename | provenance | | +| path_injection.py:139:5:139:8 | ControlFlowNode for path | path_injection.py:140:47:140:50 | ControlFlowNode for path | provenance | | +| path_injection.py:140:47:140:50 | ControlFlowNode for path | path_injection.py:142:14:142:17 | ControlFlowNode for path | provenance | | +| path_injection.py:149:5:149:12 | ControlFlowNode for filename | path_injection.py:151:9:151:12 | ControlFlowNode for path | provenance | | +| path_injection.py:149:16:149:22 | ControlFlowNode for request | path_injection.py:149:16:149:27 | ControlFlowNode for Attribute | provenance | | +| path_injection.py:149:16:149:27 | ControlFlowNode for Attribute | path_injection.py:149:16:149:47 | ControlFlowNode for Attribute() | provenance | | +| path_injection.py:149:16:149:47 | ControlFlowNode for Attribute() | path_injection.py:149:5:149:12 | ControlFlowNode for filename | provenance | | +| path_injection.py:151:9:151:12 | ControlFlowNode for path | path_injection.py:152:18:152:21 | ControlFlowNode for path | provenance | | +| pathlib_use.py:3:26:3:32 | ControlFlowNode for ImportMember | pathlib_use.py:3:26:3:32 | ControlFlowNode for request | provenance | | +| pathlib_use.py:3:26:3:32 | ControlFlowNode for request | pathlib_use.py:12:16:12:22 | ControlFlowNode for request | provenance | | +| pathlib_use.py:12:5:12:12 | ControlFlowNode for filename | pathlib_use.py:13:5:13:5 | ControlFlowNode for p | provenance | | +| pathlib_use.py:12:5:12:12 | ControlFlowNode for filename | pathlib_use.py:16:5:16:6 | ControlFlowNode for p2 | provenance | | +| pathlib_use.py:12:16:12:22 | ControlFlowNode for request | pathlib_use.py:12:16:12:27 | ControlFlowNode for Attribute | provenance | | +| pathlib_use.py:12:16:12:27 | ControlFlowNode for Attribute | pathlib_use.py:12:16:12:47 | ControlFlowNode for Attribute() | provenance | | +| pathlib_use.py:12:16:12:47 | ControlFlowNode for Attribute() | pathlib_use.py:12:5:12:12 | ControlFlowNode for filename | provenance | | +| pathlib_use.py:13:5:13:5 | ControlFlowNode for p | pathlib_use.py:14:5:14:5 | ControlFlowNode for p | provenance | | +| pathlib_use.py:16:5:16:6 | ControlFlowNode for p2 | pathlib_use.py:17:5:17:6 | ControlFlowNode for p2 | provenance | | +| test.py:3:26:3:32 | ControlFlowNode for ImportMember | test.py:3:26:3:32 | ControlFlowNode for request | provenance | | +| test.py:3:26:3:32 | ControlFlowNode for request | test.py:9:12:9:18 | ControlFlowNode for request | provenance | | +| test.py:9:12:9:18 | ControlFlowNode for request | test.py:9:12:9:23 | ControlFlowNode for Attribute | provenance | | +| test.py:9:12:9:23 | ControlFlowNode for Attribute | test.py:9:12:9:39 | ControlFlowNode for Attribute() | provenance | | +| test.py:9:12:9:39 | ControlFlowNode for Attribute() | test.py:18:9:18:16 | ControlFlowNode for source() | provenance | | +| test.py:9:12:9:39 | ControlFlowNode for Attribute() | test.py:24:9:24:16 | ControlFlowNode for source() | provenance | | +| test.py:9:12:9:39 | ControlFlowNode for Attribute() | test.py:31:9:31:16 | ControlFlowNode for source() | provenance | | +| test.py:9:12:9:39 | ControlFlowNode for Attribute() | test.py:46:9:46:16 | ControlFlowNode for source() | provenance | | +| test.py:12:15:12:15 | ControlFlowNode for x | test.py:13:29:13:29 | ControlFlowNode for x | provenance | | +| test.py:13:29:13:29 | ControlFlowNode for x | test.py:13:12:13:30 | ControlFlowNode for Attribute() | provenance | | +| test.py:18:5:18:5 | ControlFlowNode for x | test.py:19:10:19:10 | ControlFlowNode for x | provenance | | +| test.py:18:9:18:16 | ControlFlowNode for source() | test.py:18:5:18:5 | ControlFlowNode for x | provenance | | +| test.py:24:5:24:5 | ControlFlowNode for x | test.py:25:19:25:19 | ControlFlowNode for x | provenance | | +| test.py:24:9:24:16 | ControlFlowNode for source() | test.py:24:5:24:5 | ControlFlowNode for x | provenance | | +| test.py:25:5:25:5 | ControlFlowNode for y | test.py:26:10:26:10 | ControlFlowNode for y | provenance | | +| test.py:25:9:25:20 | ControlFlowNode for normalize() | test.py:25:5:25:5 | ControlFlowNode for y | provenance | | +| test.py:25:19:25:19 | ControlFlowNode for x | test.py:12:15:12:15 | ControlFlowNode for x | provenance | | +| test.py:25:19:25:19 | ControlFlowNode for x | test.py:25:9:25:20 | ControlFlowNode for normalize() | provenance | | +| test.py:31:5:31:5 | ControlFlowNode for x | test.py:33:14:33:14 | ControlFlowNode for x | provenance | | +| test.py:31:9:31:16 | ControlFlowNode for source() | test.py:31:5:31:5 | ControlFlowNode for x | provenance | | +| test.py:46:5:46:5 | ControlFlowNode for x | test.py:48:23:48:23 | ControlFlowNode for x | provenance | | +| test.py:46:9:46:16 | ControlFlowNode for source() | test.py:46:5:46:5 | ControlFlowNode for x | provenance | | +| test.py:48:9:48:9 | ControlFlowNode for y | test.py:49:14:49:14 | ControlFlowNode for y | provenance | | +| test.py:48:13:48:24 | ControlFlowNode for normalize() | test.py:48:9:48:9 | ControlFlowNode for y | provenance | | +| test.py:48:23:48:23 | ControlFlowNode for x | test.py:12:15:12:15 | ControlFlowNode for x | provenance | | +| test.py:48:23:48:23 | ControlFlowNode for x | test.py:48:13:48:24 | ControlFlowNode for normalize() | provenance | | nodes | flask_path_injection.py:1:26:1:32 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | | flask_path_injection.py:1:26:1:32 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | diff --git a/python/ql/test/query-tests/Security/CWE-022-TarSlip/TarSlip.expected b/python/ql/test/query-tests/Security/CWE-022-TarSlip/TarSlip.expected index 2fb4890c82e..6f98ea1aae2 100644 --- a/python/ql/test/query-tests/Security/CWE-022-TarSlip/TarSlip.expected +++ b/python/ql/test/query-tests/Security/CWE-022-TarSlip/TarSlip.expected @@ -1,26 +1,26 @@ edges -| tarslip.py:14:1:14:3 | ControlFlowNode for tar | tarslip.py:15:1:15:3 | ControlFlowNode for tar | -| tarslip.py:14:7:14:39 | ControlFlowNode for Attribute() | tarslip.py:14:1:14:3 | ControlFlowNode for tar | -| tarslip.py:18:1:18:3 | ControlFlowNode for tar | tarslip.py:19:5:19:9 | ControlFlowNode for entry | -| tarslip.py:18:7:18:39 | ControlFlowNode for Attribute() | tarslip.py:18:1:18:3 | ControlFlowNode for tar | -| tarslip.py:19:5:19:9 | ControlFlowNode for entry | tarslip.py:20:17:20:21 | ControlFlowNode for entry | -| tarslip.py:35:1:35:3 | ControlFlowNode for tar | tarslip.py:36:5:36:9 | ControlFlowNode for entry | -| tarslip.py:35:7:35:39 | ControlFlowNode for Attribute() | tarslip.py:35:1:35:3 | ControlFlowNode for tar | -| tarslip.py:36:5:36:9 | ControlFlowNode for entry | tarslip.py:39:17:39:21 | ControlFlowNode for entry | -| tarslip.py:42:1:42:3 | ControlFlowNode for tar | tarslip.py:43:24:43:26 | ControlFlowNode for tar | -| tarslip.py:42:7:42:39 | ControlFlowNode for Attribute() | tarslip.py:42:1:42:3 | ControlFlowNode for tar | -| tarslip.py:58:1:58:3 | ControlFlowNode for tar | tarslip.py:59:5:59:9 | ControlFlowNode for entry | -| tarslip.py:58:7:58:39 | ControlFlowNode for Attribute() | tarslip.py:58:1:58:3 | ControlFlowNode for tar | -| tarslip.py:59:5:59:9 | ControlFlowNode for entry | tarslip.py:61:21:61:25 | ControlFlowNode for entry | -| tarslip.py:90:1:90:3 | ControlFlowNode for tar | tarslip.py:91:1:91:3 | ControlFlowNode for tar | -| tarslip.py:90:7:90:39 | ControlFlowNode for Attribute() | tarslip.py:90:1:90:3 | ControlFlowNode for tar | -| tarslip.py:94:1:94:3 | ControlFlowNode for tar | tarslip.py:95:5:95:9 | ControlFlowNode for entry | -| tarslip.py:94:7:94:39 | ControlFlowNode for Attribute() | tarslip.py:94:1:94:3 | ControlFlowNode for tar | -| tarslip.py:95:5:95:9 | ControlFlowNode for entry | tarslip.py:96:17:96:21 | ControlFlowNode for entry | -| tarslip.py:109:1:109:3 | ControlFlowNode for tar | tarslip.py:110:1:110:3 | ControlFlowNode for tar | -| tarslip.py:109:7:109:39 | ControlFlowNode for Attribute() | tarslip.py:109:1:109:3 | ControlFlowNode for tar | -| tarslip.py:112:1:112:3 | ControlFlowNode for tar | tarslip.py:113:24:113:26 | ControlFlowNode for tar | -| tarslip.py:112:7:112:39 | ControlFlowNode for Attribute() | tarslip.py:112:1:112:3 | ControlFlowNode for tar | +| tarslip.py:14:1:14:3 | ControlFlowNode for tar | tarslip.py:15:1:15:3 | ControlFlowNode for tar | provenance | | +| tarslip.py:14:7:14:39 | ControlFlowNode for Attribute() | tarslip.py:14:1:14:3 | ControlFlowNode for tar | provenance | | +| tarslip.py:18:1:18:3 | ControlFlowNode for tar | tarslip.py:19:5:19:9 | ControlFlowNode for entry | provenance | | +| tarslip.py:18:7:18:39 | ControlFlowNode for Attribute() | tarslip.py:18:1:18:3 | ControlFlowNode for tar | provenance | | +| tarslip.py:19:5:19:9 | ControlFlowNode for entry | tarslip.py:20:17:20:21 | ControlFlowNode for entry | provenance | | +| tarslip.py:35:1:35:3 | ControlFlowNode for tar | tarslip.py:36:5:36:9 | ControlFlowNode for entry | provenance | | +| tarslip.py:35:7:35:39 | ControlFlowNode for Attribute() | tarslip.py:35:1:35:3 | ControlFlowNode for tar | provenance | | +| tarslip.py:36:5:36:9 | ControlFlowNode for entry | tarslip.py:39:17:39:21 | ControlFlowNode for entry | provenance | | +| tarslip.py:42:1:42:3 | ControlFlowNode for tar | tarslip.py:43:24:43:26 | ControlFlowNode for tar | provenance | | +| tarslip.py:42:7:42:39 | ControlFlowNode for Attribute() | tarslip.py:42:1:42:3 | ControlFlowNode for tar | provenance | | +| tarslip.py:58:1:58:3 | ControlFlowNode for tar | tarslip.py:59:5:59:9 | ControlFlowNode for entry | provenance | | +| tarslip.py:58:7:58:39 | ControlFlowNode for Attribute() | tarslip.py:58:1:58:3 | ControlFlowNode for tar | provenance | | +| tarslip.py:59:5:59:9 | ControlFlowNode for entry | tarslip.py:61:21:61:25 | ControlFlowNode for entry | provenance | | +| tarslip.py:90:1:90:3 | ControlFlowNode for tar | tarslip.py:91:1:91:3 | ControlFlowNode for tar | provenance | | +| tarslip.py:90:7:90:39 | ControlFlowNode for Attribute() | tarslip.py:90:1:90:3 | ControlFlowNode for tar | provenance | | +| tarslip.py:94:1:94:3 | ControlFlowNode for tar | tarslip.py:95:5:95:9 | ControlFlowNode for entry | provenance | | +| tarslip.py:94:7:94:39 | ControlFlowNode for Attribute() | tarslip.py:94:1:94:3 | ControlFlowNode for tar | provenance | | +| tarslip.py:95:5:95:9 | ControlFlowNode for entry | tarslip.py:96:17:96:21 | ControlFlowNode for entry | provenance | | +| tarslip.py:109:1:109:3 | ControlFlowNode for tar | tarslip.py:110:1:110:3 | ControlFlowNode for tar | provenance | | +| tarslip.py:109:7:109:39 | ControlFlowNode for Attribute() | tarslip.py:109:1:109:3 | ControlFlowNode for tar | provenance | | +| tarslip.py:112:1:112:3 | ControlFlowNode for tar | tarslip.py:113:24:113:26 | ControlFlowNode for tar | provenance | | +| tarslip.py:112:7:112:39 | ControlFlowNode for Attribute() | tarslip.py:112:1:112:3 | ControlFlowNode for tar | provenance | | nodes | tarslip.py:14:1:14:3 | ControlFlowNode for tar | semmle.label | ControlFlowNode for tar | | tarslip.py:14:7:14:39 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | diff --git a/python/ql/test/query-tests/Security/CWE-078-CommandInjection-py2/CommandInjection.expected b/python/ql/test/query-tests/Security/CWE-078-CommandInjection-py2/CommandInjection.expected index 021f917ec0b..469559c0258 100644 --- a/python/ql/test/query-tests/Security/CWE-078-CommandInjection-py2/CommandInjection.expected +++ b/python/ql/test/query-tests/Security/CWE-078-CommandInjection-py2/CommandInjection.expected @@ -1,18 +1,18 @@ edges -| command_injection.py:5:26:5:32 | ControlFlowNode for ImportMember | command_injection.py:5:26:5:32 | ControlFlowNode for request | -| command_injection.py:5:26:5:32 | ControlFlowNode for request | command_injection.py:18:13:18:19 | ControlFlowNode for request | -| command_injection.py:18:5:18:9 | ControlFlowNode for files | command_injection.py:19:15:19:27 | ControlFlowNode for BinaryExpr | -| command_injection.py:18:5:18:9 | ControlFlowNode for files | command_injection.py:20:15:20:27 | ControlFlowNode for BinaryExpr | -| command_injection.py:18:5:18:9 | ControlFlowNode for files | command_injection.py:21:15:21:27 | ControlFlowNode for BinaryExpr | -| command_injection.py:18:5:18:9 | ControlFlowNode for files | command_injection.py:23:20:23:32 | ControlFlowNode for BinaryExpr | -| command_injection.py:18:5:18:9 | ControlFlowNode for files | command_injection.py:25:19:25:31 | ControlFlowNode for BinaryExpr | -| command_injection.py:18:5:18:9 | ControlFlowNode for files | command_injection.py:26:19:26:31 | ControlFlowNode for BinaryExpr | -| command_injection.py:18:5:18:9 | ControlFlowNode for files | command_injection.py:27:19:27:31 | ControlFlowNode for BinaryExpr | -| command_injection.py:18:5:18:9 | ControlFlowNode for files | command_injection.py:28:19:28:31 | ControlFlowNode for BinaryExpr | -| command_injection.py:18:5:18:9 | ControlFlowNode for files | command_injection.py:29:19:29:31 | ControlFlowNode for BinaryExpr | -| command_injection.py:18:13:18:19 | ControlFlowNode for request | command_injection.py:18:13:18:24 | ControlFlowNode for Attribute | -| command_injection.py:18:13:18:24 | ControlFlowNode for Attribute | command_injection.py:18:13:18:41 | ControlFlowNode for Attribute() | -| command_injection.py:18:13:18:41 | ControlFlowNode for Attribute() | command_injection.py:18:5:18:9 | ControlFlowNode for files | +| command_injection.py:5:26:5:32 | ControlFlowNode for ImportMember | command_injection.py:5:26:5:32 | ControlFlowNode for request | provenance | | +| command_injection.py:5:26:5:32 | ControlFlowNode for request | command_injection.py:18:13:18:19 | ControlFlowNode for request | provenance | | +| command_injection.py:18:5:18:9 | ControlFlowNode for files | command_injection.py:19:15:19:27 | ControlFlowNode for BinaryExpr | provenance | | +| command_injection.py:18:5:18:9 | ControlFlowNode for files | command_injection.py:20:15:20:27 | ControlFlowNode for BinaryExpr | provenance | | +| command_injection.py:18:5:18:9 | ControlFlowNode for files | command_injection.py:21:15:21:27 | ControlFlowNode for BinaryExpr | provenance | | +| command_injection.py:18:5:18:9 | ControlFlowNode for files | command_injection.py:23:20:23:32 | ControlFlowNode for BinaryExpr | provenance | | +| command_injection.py:18:5:18:9 | ControlFlowNode for files | command_injection.py:25:19:25:31 | ControlFlowNode for BinaryExpr | provenance | | +| command_injection.py:18:5:18:9 | ControlFlowNode for files | command_injection.py:26:19:26:31 | ControlFlowNode for BinaryExpr | provenance | | +| command_injection.py:18:5:18:9 | ControlFlowNode for files | command_injection.py:27:19:27:31 | ControlFlowNode for BinaryExpr | provenance | | +| command_injection.py:18:5:18:9 | ControlFlowNode for files | command_injection.py:28:19:28:31 | ControlFlowNode for BinaryExpr | provenance | | +| command_injection.py:18:5:18:9 | ControlFlowNode for files | command_injection.py:29:19:29:31 | ControlFlowNode for BinaryExpr | provenance | | +| command_injection.py:18:13:18:19 | ControlFlowNode for request | command_injection.py:18:13:18:24 | ControlFlowNode for Attribute | provenance | | +| command_injection.py:18:13:18:24 | ControlFlowNode for Attribute | command_injection.py:18:13:18:41 | ControlFlowNode for Attribute() | provenance | | +| command_injection.py:18:13:18:41 | ControlFlowNode for Attribute() | command_injection.py:18:5:18:9 | ControlFlowNode for files | provenance | | nodes | command_injection.py:5:26:5:32 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | | command_injection.py:5:26:5:32 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | diff --git a/python/ql/test/query-tests/Security/CWE-078-CommandInjection/CommandInjection.expected b/python/ql/test/query-tests/Security/CWE-078-CommandInjection/CommandInjection.expected index b968144d763..3031876928f 100644 --- a/python/ql/test/query-tests/Security/CWE-078-CommandInjection/CommandInjection.expected +++ b/python/ql/test/query-tests/Security/CWE-078-CommandInjection/CommandInjection.expected @@ -1,50 +1,50 @@ edges -| command_injection.py:5:26:5:32 | ControlFlowNode for ImportMember | command_injection.py:5:26:5:32 | ControlFlowNode for request | -| command_injection.py:5:26:5:32 | ControlFlowNode for request | command_injection.py:11:13:11:19 | ControlFlowNode for request | -| command_injection.py:5:26:5:32 | ControlFlowNode for request | command_injection.py:18:13:18:19 | ControlFlowNode for request | -| command_injection.py:5:26:5:32 | ControlFlowNode for request | command_injection.py:25:11:25:17 | ControlFlowNode for request | -| command_injection.py:5:26:5:32 | ControlFlowNode for request | command_injection.py:31:13:31:19 | ControlFlowNode for request | -| command_injection.py:5:26:5:32 | ControlFlowNode for request | command_injection.py:38:15:38:21 | ControlFlowNode for request | -| command_injection.py:5:26:5:32 | ControlFlowNode for request | command_injection.py:54:15:54:21 | ControlFlowNode for request | -| command_injection.py:5:26:5:32 | ControlFlowNode for request | command_injection.py:71:12:71:18 | ControlFlowNode for request | -| command_injection.py:5:26:5:32 | ControlFlowNode for request | command_injection.py:78:12:78:18 | ControlFlowNode for request | -| command_injection.py:11:5:11:9 | ControlFlowNode for files | command_injection.py:13:15:13:27 | ControlFlowNode for BinaryExpr | -| command_injection.py:11:13:11:19 | ControlFlowNode for request | command_injection.py:11:13:11:24 | ControlFlowNode for Attribute | -| command_injection.py:11:13:11:24 | ControlFlowNode for Attribute | command_injection.py:11:13:11:41 | ControlFlowNode for Attribute() | -| command_injection.py:11:13:11:41 | ControlFlowNode for Attribute() | command_injection.py:11:5:11:9 | ControlFlowNode for files | -| command_injection.py:18:5:18:9 | ControlFlowNode for files | command_injection.py:20:22:20:34 | ControlFlowNode for BinaryExpr | -| command_injection.py:18:13:18:19 | ControlFlowNode for request | command_injection.py:18:13:18:24 | ControlFlowNode for Attribute | -| command_injection.py:18:13:18:24 | ControlFlowNode for Attribute | command_injection.py:18:13:18:41 | ControlFlowNode for Attribute() | -| command_injection.py:18:13:18:41 | ControlFlowNode for Attribute() | command_injection.py:18:5:18:9 | ControlFlowNode for files | -| command_injection.py:25:5:25:7 | ControlFlowNode for cmd | command_injection.py:26:23:26:25 | ControlFlowNode for cmd | -| command_injection.py:25:11:25:17 | ControlFlowNode for request | command_injection.py:25:11:25:22 | ControlFlowNode for Attribute | -| command_injection.py:25:11:25:22 | ControlFlowNode for Attribute | command_injection.py:25:11:25:37 | ControlFlowNode for Attribute() | -| command_injection.py:25:11:25:37 | ControlFlowNode for Attribute() | command_injection.py:25:5:25:7 | ControlFlowNode for cmd | -| command_injection.py:31:5:31:9 | ControlFlowNode for files | command_injection.py:33:14:33:26 | ControlFlowNode for BinaryExpr | -| command_injection.py:31:13:31:19 | ControlFlowNode for request | command_injection.py:31:13:31:24 | ControlFlowNode for Attribute | -| command_injection.py:31:13:31:24 | ControlFlowNode for Attribute | command_injection.py:31:13:31:41 | ControlFlowNode for Attribute() | -| command_injection.py:31:13:31:41 | ControlFlowNode for Attribute() | command_injection.py:31:5:31:9 | ControlFlowNode for files | -| command_injection.py:38:5:38:11 | ControlFlowNode for command | command_injection.py:41:15:41:21 | ControlFlowNode for command | -| command_injection.py:38:5:38:11 | ControlFlowNode for command | command_injection.py:42:15:42:21 | ControlFlowNode for command | -| command_injection.py:38:15:38:21 | ControlFlowNode for request | command_injection.py:38:15:38:26 | ControlFlowNode for Attribute | -| command_injection.py:38:15:38:26 | ControlFlowNode for Attribute | command_injection.py:38:15:38:45 | ControlFlowNode for Attribute() | -| command_injection.py:38:15:38:45 | ControlFlowNode for Attribute() | command_injection.py:38:5:38:11 | ControlFlowNode for command | -| command_injection.py:54:5:54:11 | ControlFlowNode for command | command_injection.py:55:15:55:21 | ControlFlowNode for command | -| command_injection.py:54:5:54:11 | ControlFlowNode for command | command_injection.py:56:14:56:20 | ControlFlowNode for command | -| command_injection.py:54:5:54:11 | ControlFlowNode for command | command_injection.py:57:21:57:27 | ControlFlowNode for command | -| command_injection.py:54:5:54:11 | ControlFlowNode for command | command_injection.py:58:27:58:33 | ControlFlowNode for command | -| command_injection.py:54:5:54:11 | ControlFlowNode for command | command_injection.py:59:20:59:26 | ControlFlowNode for command | -| command_injection.py:54:15:54:21 | ControlFlowNode for request | command_injection.py:54:15:54:26 | ControlFlowNode for Attribute | -| command_injection.py:54:15:54:26 | ControlFlowNode for Attribute | command_injection.py:54:15:54:45 | ControlFlowNode for Attribute() | -| command_injection.py:54:15:54:45 | ControlFlowNode for Attribute() | command_injection.py:54:5:54:11 | ControlFlowNode for command | -| command_injection.py:71:5:71:8 | ControlFlowNode for path | command_injection.py:73:19:73:30 | ControlFlowNode for BinaryExpr | -| command_injection.py:71:12:71:18 | ControlFlowNode for request | command_injection.py:71:12:71:23 | ControlFlowNode for Attribute | -| command_injection.py:71:12:71:23 | ControlFlowNode for Attribute | command_injection.py:71:12:71:39 | ControlFlowNode for Attribute() | -| command_injection.py:71:12:71:39 | ControlFlowNode for Attribute() | command_injection.py:71:5:71:8 | ControlFlowNode for path | -| command_injection.py:78:5:78:8 | ControlFlowNode for path | command_injection.py:80:19:80:30 | ControlFlowNode for BinaryExpr | -| command_injection.py:78:12:78:18 | ControlFlowNode for request | command_injection.py:78:12:78:23 | ControlFlowNode for Attribute | -| command_injection.py:78:12:78:23 | ControlFlowNode for Attribute | command_injection.py:78:12:78:39 | ControlFlowNode for Attribute() | -| command_injection.py:78:12:78:39 | ControlFlowNode for Attribute() | command_injection.py:78:5:78:8 | ControlFlowNode for path | +| command_injection.py:5:26:5:32 | ControlFlowNode for ImportMember | command_injection.py:5:26:5:32 | ControlFlowNode for request | provenance | | +| command_injection.py:5:26:5:32 | ControlFlowNode for request | command_injection.py:11:13:11:19 | ControlFlowNode for request | provenance | | +| command_injection.py:5:26:5:32 | ControlFlowNode for request | command_injection.py:18:13:18:19 | ControlFlowNode for request | provenance | | +| command_injection.py:5:26:5:32 | ControlFlowNode for request | command_injection.py:25:11:25:17 | ControlFlowNode for request | provenance | | +| command_injection.py:5:26:5:32 | ControlFlowNode for request | command_injection.py:31:13:31:19 | ControlFlowNode for request | provenance | | +| command_injection.py:5:26:5:32 | ControlFlowNode for request | command_injection.py:38:15:38:21 | ControlFlowNode for request | provenance | | +| command_injection.py:5:26:5:32 | ControlFlowNode for request | command_injection.py:54:15:54:21 | ControlFlowNode for request | provenance | | +| command_injection.py:5:26:5:32 | ControlFlowNode for request | command_injection.py:71:12:71:18 | ControlFlowNode for request | provenance | | +| command_injection.py:5:26:5:32 | ControlFlowNode for request | command_injection.py:78:12:78:18 | ControlFlowNode for request | provenance | | +| command_injection.py:11:5:11:9 | ControlFlowNode for files | command_injection.py:13:15:13:27 | ControlFlowNode for BinaryExpr | provenance | | +| command_injection.py:11:13:11:19 | ControlFlowNode for request | command_injection.py:11:13:11:24 | ControlFlowNode for Attribute | provenance | | +| command_injection.py:11:13:11:24 | ControlFlowNode for Attribute | command_injection.py:11:13:11:41 | ControlFlowNode for Attribute() | provenance | | +| command_injection.py:11:13:11:41 | ControlFlowNode for Attribute() | command_injection.py:11:5:11:9 | ControlFlowNode for files | provenance | | +| command_injection.py:18:5:18:9 | ControlFlowNode for files | command_injection.py:20:22:20:34 | ControlFlowNode for BinaryExpr | provenance | | +| command_injection.py:18:13:18:19 | ControlFlowNode for request | command_injection.py:18:13:18:24 | ControlFlowNode for Attribute | provenance | | +| command_injection.py:18:13:18:24 | ControlFlowNode for Attribute | command_injection.py:18:13:18:41 | ControlFlowNode for Attribute() | provenance | | +| command_injection.py:18:13:18:41 | ControlFlowNode for Attribute() | command_injection.py:18:5:18:9 | ControlFlowNode for files | provenance | | +| command_injection.py:25:5:25:7 | ControlFlowNode for cmd | command_injection.py:26:23:26:25 | ControlFlowNode for cmd | provenance | | +| command_injection.py:25:11:25:17 | ControlFlowNode for request | command_injection.py:25:11:25:22 | ControlFlowNode for Attribute | provenance | | +| command_injection.py:25:11:25:22 | ControlFlowNode for Attribute | command_injection.py:25:11:25:37 | ControlFlowNode for Attribute() | provenance | | +| command_injection.py:25:11:25:37 | ControlFlowNode for Attribute() | command_injection.py:25:5:25:7 | ControlFlowNode for cmd | provenance | | +| command_injection.py:31:5:31:9 | ControlFlowNode for files | command_injection.py:33:14:33:26 | ControlFlowNode for BinaryExpr | provenance | | +| command_injection.py:31:13:31:19 | ControlFlowNode for request | command_injection.py:31:13:31:24 | ControlFlowNode for Attribute | provenance | | +| command_injection.py:31:13:31:24 | ControlFlowNode for Attribute | command_injection.py:31:13:31:41 | ControlFlowNode for Attribute() | provenance | | +| command_injection.py:31:13:31:41 | ControlFlowNode for Attribute() | command_injection.py:31:5:31:9 | ControlFlowNode for files | provenance | | +| command_injection.py:38:5:38:11 | ControlFlowNode for command | command_injection.py:41:15:41:21 | ControlFlowNode for command | provenance | | +| command_injection.py:38:5:38:11 | ControlFlowNode for command | command_injection.py:42:15:42:21 | ControlFlowNode for command | provenance | | +| command_injection.py:38:15:38:21 | ControlFlowNode for request | command_injection.py:38:15:38:26 | ControlFlowNode for Attribute | provenance | | +| command_injection.py:38:15:38:26 | ControlFlowNode for Attribute | command_injection.py:38:15:38:45 | ControlFlowNode for Attribute() | provenance | | +| command_injection.py:38:15:38:45 | ControlFlowNode for Attribute() | command_injection.py:38:5:38:11 | ControlFlowNode for command | provenance | | +| command_injection.py:54:5:54:11 | ControlFlowNode for command | command_injection.py:55:15:55:21 | ControlFlowNode for command | provenance | | +| command_injection.py:54:5:54:11 | ControlFlowNode for command | command_injection.py:56:14:56:20 | ControlFlowNode for command | provenance | | +| command_injection.py:54:5:54:11 | ControlFlowNode for command | command_injection.py:57:21:57:27 | ControlFlowNode for command | provenance | | +| command_injection.py:54:5:54:11 | ControlFlowNode for command | command_injection.py:58:27:58:33 | ControlFlowNode for command | provenance | | +| command_injection.py:54:5:54:11 | ControlFlowNode for command | command_injection.py:59:20:59:26 | ControlFlowNode for command | provenance | | +| command_injection.py:54:15:54:21 | ControlFlowNode for request | command_injection.py:54:15:54:26 | ControlFlowNode for Attribute | provenance | | +| command_injection.py:54:15:54:26 | ControlFlowNode for Attribute | command_injection.py:54:15:54:45 | ControlFlowNode for Attribute() | provenance | | +| command_injection.py:54:15:54:45 | ControlFlowNode for Attribute() | command_injection.py:54:5:54:11 | ControlFlowNode for command | provenance | | +| command_injection.py:71:5:71:8 | ControlFlowNode for path | command_injection.py:73:19:73:30 | ControlFlowNode for BinaryExpr | provenance | | +| command_injection.py:71:12:71:18 | ControlFlowNode for request | command_injection.py:71:12:71:23 | ControlFlowNode for Attribute | provenance | | +| command_injection.py:71:12:71:23 | ControlFlowNode for Attribute | command_injection.py:71:12:71:39 | ControlFlowNode for Attribute() | provenance | | +| command_injection.py:71:12:71:39 | ControlFlowNode for Attribute() | command_injection.py:71:5:71:8 | ControlFlowNode for path | provenance | | +| command_injection.py:78:5:78:8 | ControlFlowNode for path | command_injection.py:80:19:80:30 | ControlFlowNode for BinaryExpr | provenance | | +| command_injection.py:78:12:78:18 | ControlFlowNode for request | command_injection.py:78:12:78:23 | ControlFlowNode for Attribute | provenance | | +| command_injection.py:78:12:78:23 | ControlFlowNode for Attribute | command_injection.py:78:12:78:39 | ControlFlowNode for Attribute() | provenance | | +| command_injection.py:78:12:78:39 | ControlFlowNode for Attribute() | command_injection.py:78:5:78:8 | ControlFlowNode for path | provenance | | nodes | command_injection.py:5:26:5:32 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | | command_injection.py:5:26:5:32 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | diff --git a/python/ql/test/query-tests/Security/CWE-078-UnsafeShellCommandConstruction/UnsafeShellCommandConstruction.expected b/python/ql/test/query-tests/Security/CWE-078-UnsafeShellCommandConstruction/UnsafeShellCommandConstruction.expected index 88015c57ebf..e53508f61a5 100644 --- a/python/ql/test/query-tests/Security/CWE-078-UnsafeShellCommandConstruction/UnsafeShellCommandConstruction.expected +++ b/python/ql/test/query-tests/Security/CWE-078-UnsafeShellCommandConstruction/UnsafeShellCommandConstruction.expected @@ -1,15 +1,15 @@ edges -| src/unsafe_shell_test.py:4:22:4:25 | ControlFlowNode for name | src/unsafe_shell_test.py:5:25:5:28 | ControlFlowNode for name | -| src/unsafe_shell_test.py:4:22:4:25 | ControlFlowNode for name | src/unsafe_shell_test.py:8:23:8:26 | ControlFlowNode for name | -| src/unsafe_shell_test.py:4:22:4:25 | ControlFlowNode for name | src/unsafe_shell_test.py:11:25:11:38 | ControlFlowNode for Attribute() | -| src/unsafe_shell_test.py:4:22:4:25 | ControlFlowNode for name | src/unsafe_shell_test.py:14:25:14:40 | ControlFlowNode for Attribute() | -| src/unsafe_shell_test.py:4:22:4:25 | ControlFlowNode for name | src/unsafe_shell_test.py:17:32:17:35 | ControlFlowNode for name | -| src/unsafe_shell_test.py:4:22:4:25 | ControlFlowNode for name | src/unsafe_shell_test.py:20:27:20:30 | ControlFlowNode for name | -| src/unsafe_shell_test.py:26:20:26:23 | ControlFlowNode for name | src/unsafe_shell_test.py:29:30:29:33 | ControlFlowNode for name | -| src/unsafe_shell_test.py:36:22:36:25 | ControlFlowNode for name | src/unsafe_shell_test.py:39:30:39:33 | ControlFlowNode for name | -| src/unsafe_shell_test.py:36:22:36:25 | ControlFlowNode for name | src/unsafe_shell_test.py:44:20:44:23 | ControlFlowNode for name | -| src/unsafe_shell_test.py:41:24:41:24 | ControlFlowNode for x | src/unsafe_shell_test.py:42:34:42:34 | ControlFlowNode for x | -| src/unsafe_shell_test.py:44:20:44:23 | ControlFlowNode for name | src/unsafe_shell_test.py:41:24:41:24 | ControlFlowNode for x | +| src/unsafe_shell_test.py:4:22:4:25 | ControlFlowNode for name | src/unsafe_shell_test.py:5:25:5:28 | ControlFlowNode for name | provenance | | +| src/unsafe_shell_test.py:4:22:4:25 | ControlFlowNode for name | src/unsafe_shell_test.py:8:23:8:26 | ControlFlowNode for name | provenance | | +| src/unsafe_shell_test.py:4:22:4:25 | ControlFlowNode for name | src/unsafe_shell_test.py:11:25:11:38 | ControlFlowNode for Attribute() | provenance | | +| src/unsafe_shell_test.py:4:22:4:25 | ControlFlowNode for name | src/unsafe_shell_test.py:14:25:14:40 | ControlFlowNode for Attribute() | provenance | | +| src/unsafe_shell_test.py:4:22:4:25 | ControlFlowNode for name | src/unsafe_shell_test.py:17:32:17:35 | ControlFlowNode for name | provenance | | +| src/unsafe_shell_test.py:4:22:4:25 | ControlFlowNode for name | src/unsafe_shell_test.py:20:27:20:30 | ControlFlowNode for name | provenance | | +| src/unsafe_shell_test.py:26:20:26:23 | ControlFlowNode for name | src/unsafe_shell_test.py:29:30:29:33 | ControlFlowNode for name | provenance | | +| src/unsafe_shell_test.py:36:22:36:25 | ControlFlowNode for name | src/unsafe_shell_test.py:39:30:39:33 | ControlFlowNode for name | provenance | | +| src/unsafe_shell_test.py:36:22:36:25 | ControlFlowNode for name | src/unsafe_shell_test.py:44:20:44:23 | ControlFlowNode for name | provenance | | +| src/unsafe_shell_test.py:41:24:41:24 | ControlFlowNode for x | src/unsafe_shell_test.py:42:34:42:34 | ControlFlowNode for x | provenance | | +| src/unsafe_shell_test.py:44:20:44:23 | ControlFlowNode for name | src/unsafe_shell_test.py:41:24:41:24 | ControlFlowNode for x | provenance | | nodes | src/unsafe_shell_test.py:4:22:4:25 | ControlFlowNode for name | semmle.label | ControlFlowNode for name | | src/unsafe_shell_test.py:5:25:5:28 | ControlFlowNode for name | semmle.label | ControlFlowNode for name | diff --git a/python/ql/test/query-tests/Security/CWE-079-ReflectedXss/ReflectedXss.expected b/python/ql/test/query-tests/Security/CWE-079-ReflectedXss/ReflectedXss.expected index a779dea257f..26ac3070184 100644 --- a/python/ql/test/query-tests/Security/CWE-079-ReflectedXss/ReflectedXss.expected +++ b/python/ql/test/query-tests/Security/CWE-079-ReflectedXss/ReflectedXss.expected @@ -1,16 +1,16 @@ edges -| reflected_xss.py:2:26:2:32 | ControlFlowNode for ImportMember | reflected_xss.py:2:26:2:32 | ControlFlowNode for request | -| reflected_xss.py:2:26:2:32 | ControlFlowNode for request | reflected_xss.py:9:18:9:24 | ControlFlowNode for request | -| reflected_xss.py:2:26:2:32 | ControlFlowNode for request | reflected_xss.py:21:23:21:29 | ControlFlowNode for request | -| reflected_xss.py:2:26:2:32 | ControlFlowNode for request | reflected_xss.py:27:23:27:29 | ControlFlowNode for request | -| reflected_xss.py:9:5:9:14 | ControlFlowNode for first_name | reflected_xss.py:10:26:10:53 | ControlFlowNode for BinaryExpr | -| reflected_xss.py:9:18:9:24 | ControlFlowNode for request | reflected_xss.py:9:18:9:29 | ControlFlowNode for Attribute | -| reflected_xss.py:9:18:9:29 | ControlFlowNode for Attribute | reflected_xss.py:9:18:9:45 | ControlFlowNode for Attribute() | -| reflected_xss.py:9:18:9:45 | ControlFlowNode for Attribute() | reflected_xss.py:9:5:9:14 | ControlFlowNode for first_name | -| reflected_xss.py:21:5:21:8 | ControlFlowNode for data | reflected_xss.py:22:26:22:41 | ControlFlowNode for Attribute() | -| reflected_xss.py:21:23:21:29 | ControlFlowNode for request | reflected_xss.py:21:5:21:8 | ControlFlowNode for data | -| reflected_xss.py:27:5:27:8 | ControlFlowNode for data | reflected_xss.py:28:26:28:41 | ControlFlowNode for Attribute() | -| reflected_xss.py:27:23:27:29 | ControlFlowNode for request | reflected_xss.py:27:5:27:8 | ControlFlowNode for data | +| reflected_xss.py:2:26:2:32 | ControlFlowNode for ImportMember | reflected_xss.py:2:26:2:32 | ControlFlowNode for request | provenance | | +| reflected_xss.py:2:26:2:32 | ControlFlowNode for request | reflected_xss.py:9:18:9:24 | ControlFlowNode for request | provenance | | +| reflected_xss.py:2:26:2:32 | ControlFlowNode for request | reflected_xss.py:21:23:21:29 | ControlFlowNode for request | provenance | | +| reflected_xss.py:2:26:2:32 | ControlFlowNode for request | reflected_xss.py:27:23:27:29 | ControlFlowNode for request | provenance | | +| reflected_xss.py:9:5:9:14 | ControlFlowNode for first_name | reflected_xss.py:10:26:10:53 | ControlFlowNode for BinaryExpr | provenance | | +| reflected_xss.py:9:18:9:24 | ControlFlowNode for request | reflected_xss.py:9:18:9:29 | ControlFlowNode for Attribute | provenance | | +| reflected_xss.py:9:18:9:29 | ControlFlowNode for Attribute | reflected_xss.py:9:18:9:45 | ControlFlowNode for Attribute() | provenance | | +| reflected_xss.py:9:18:9:45 | ControlFlowNode for Attribute() | reflected_xss.py:9:5:9:14 | ControlFlowNode for first_name | provenance | | +| reflected_xss.py:21:5:21:8 | ControlFlowNode for data | reflected_xss.py:22:26:22:41 | ControlFlowNode for Attribute() | provenance | | +| reflected_xss.py:21:23:21:29 | ControlFlowNode for request | reflected_xss.py:21:5:21:8 | ControlFlowNode for data | provenance | | +| reflected_xss.py:27:5:27:8 | ControlFlowNode for data | reflected_xss.py:28:26:28:41 | ControlFlowNode for Attribute() | provenance | | +| reflected_xss.py:27:23:27:29 | ControlFlowNode for request | reflected_xss.py:27:5:27:8 | ControlFlowNode for data | provenance | | nodes | reflected_xss.py:2:26:2:32 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | | reflected_xss.py:2:26:2:32 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | diff --git a/python/ql/test/query-tests/Security/CWE-089-SqlInjection/SqlInjection.expected b/python/ql/test/query-tests/Security/CWE-089-SqlInjection/SqlInjection.expected index 46379fcbbc4..9ff8b1d718c 100644 --- a/python/ql/test/query-tests/Security/CWE-089-SqlInjection/SqlInjection.expected +++ b/python/ql/test/query-tests/Security/CWE-089-SqlInjection/SqlInjection.expected @@ -1,20 +1,20 @@ edges -| sql_injection.py:14:15:14:22 | ControlFlowNode for username | sql_injection.py:21:24:21:77 | ControlFlowNode for BinaryExpr | -| sql_injection.py:14:15:14:22 | ControlFlowNode for username | sql_injection.py:24:38:24:95 | ControlFlowNode for BinaryExpr | -| sql_injection.py:14:15:14:22 | ControlFlowNode for username | sql_injection.py:25:26:25:83 | ControlFlowNode for BinaryExpr | -| sql_injection.py:14:15:14:22 | ControlFlowNode for username | sql_injection.py:26:28:26:85 | ControlFlowNode for BinaryExpr | -| sqlalchemy_textclause.py:23:15:23:22 | ControlFlowNode for username | sqlalchemy_textclause.py:27:28:27:87 | ControlFlowNode for Attribute() | -| sqlalchemy_textclause.py:23:15:23:22 | ControlFlowNode for username | sqlalchemy_textclause.py:31:50:31:72 | ControlFlowNode for Attribute() | -| sqlalchemy_textclause.py:23:15:23:22 | ControlFlowNode for username | sqlalchemy_textclause.py:41:26:41:33 | ControlFlowNode for username | -| sqlalchemy_textclause.py:23:15:23:22 | ControlFlowNode for username | sqlalchemy_textclause.py:42:31:42:38 | ControlFlowNode for username | -| sqlalchemy_textclause.py:23:15:23:22 | ControlFlowNode for username | sqlalchemy_textclause.py:43:30:43:37 | ControlFlowNode for username | -| sqlalchemy_textclause.py:23:15:23:22 | ControlFlowNode for username | sqlalchemy_textclause.py:44:35:44:42 | ControlFlowNode for username | -| sqlalchemy_textclause.py:23:15:23:22 | ControlFlowNode for username | sqlalchemy_textclause.py:45:41:45:48 | ControlFlowNode for username | -| sqlalchemy_textclause.py:23:15:23:22 | ControlFlowNode for username | sqlalchemy_textclause.py:46:46:46:53 | ControlFlowNode for username | -| sqlalchemy_textclause.py:23:15:23:22 | ControlFlowNode for username | sqlalchemy_textclause.py:47:47:47:54 | ControlFlowNode for username | -| sqlalchemy_textclause.py:23:15:23:22 | ControlFlowNode for username | sqlalchemy_textclause.py:48:52:48:59 | ControlFlowNode for username | -| sqlalchemy_textclause.py:23:15:23:22 | ControlFlowNode for username | sqlalchemy_textclause.py:50:18:50:25 | ControlFlowNode for username | -| sqlalchemy_textclause.py:23:15:23:22 | ControlFlowNode for username | sqlalchemy_textclause.py:51:24:51:31 | ControlFlowNode for username | +| sql_injection.py:14:15:14:22 | ControlFlowNode for username | sql_injection.py:21:24:21:77 | ControlFlowNode for BinaryExpr | provenance | | +| sql_injection.py:14:15:14:22 | ControlFlowNode for username | sql_injection.py:24:38:24:95 | ControlFlowNode for BinaryExpr | provenance | | +| sql_injection.py:14:15:14:22 | ControlFlowNode for username | sql_injection.py:25:26:25:83 | ControlFlowNode for BinaryExpr | provenance | | +| sql_injection.py:14:15:14:22 | ControlFlowNode for username | sql_injection.py:26:28:26:85 | ControlFlowNode for BinaryExpr | provenance | | +| sqlalchemy_textclause.py:23:15:23:22 | ControlFlowNode for username | sqlalchemy_textclause.py:27:28:27:87 | ControlFlowNode for Attribute() | provenance | | +| sqlalchemy_textclause.py:23:15:23:22 | ControlFlowNode for username | sqlalchemy_textclause.py:31:50:31:72 | ControlFlowNode for Attribute() | provenance | | +| sqlalchemy_textclause.py:23:15:23:22 | ControlFlowNode for username | sqlalchemy_textclause.py:41:26:41:33 | ControlFlowNode for username | provenance | | +| sqlalchemy_textclause.py:23:15:23:22 | ControlFlowNode for username | sqlalchemy_textclause.py:42:31:42:38 | ControlFlowNode for username | provenance | | +| sqlalchemy_textclause.py:23:15:23:22 | ControlFlowNode for username | sqlalchemy_textclause.py:43:30:43:37 | ControlFlowNode for username | provenance | | +| sqlalchemy_textclause.py:23:15:23:22 | ControlFlowNode for username | sqlalchemy_textclause.py:44:35:44:42 | ControlFlowNode for username | provenance | | +| sqlalchemy_textclause.py:23:15:23:22 | ControlFlowNode for username | sqlalchemy_textclause.py:45:41:45:48 | ControlFlowNode for username | provenance | | +| sqlalchemy_textclause.py:23:15:23:22 | ControlFlowNode for username | sqlalchemy_textclause.py:46:46:46:53 | ControlFlowNode for username | provenance | | +| sqlalchemy_textclause.py:23:15:23:22 | ControlFlowNode for username | sqlalchemy_textclause.py:47:47:47:54 | ControlFlowNode for username | provenance | | +| sqlalchemy_textclause.py:23:15:23:22 | ControlFlowNode for username | sqlalchemy_textclause.py:48:52:48:59 | ControlFlowNode for username | provenance | | +| sqlalchemy_textclause.py:23:15:23:22 | ControlFlowNode for username | sqlalchemy_textclause.py:50:18:50:25 | ControlFlowNode for username | provenance | | +| sqlalchemy_textclause.py:23:15:23:22 | ControlFlowNode for username | sqlalchemy_textclause.py:51:24:51:31 | ControlFlowNode for username | provenance | | nodes | sql_injection.py:14:15:14:22 | ControlFlowNode for username | semmle.label | ControlFlowNode for username | | sql_injection.py:21:24:21:77 | ControlFlowNode for BinaryExpr | semmle.label | ControlFlowNode for BinaryExpr | diff --git a/python/ql/test/query-tests/Security/CWE-090-LdapInjection/LdapInjection.expected b/python/ql/test/query-tests/Security/CWE-090-LdapInjection/LdapInjection.expected index 3461b853756..295e2e88955 100644 --- a/python/ql/test/query-tests/Security/CWE-090-LdapInjection/LdapInjection.expected +++ b/python/ql/test/query-tests/Security/CWE-090-LdapInjection/LdapInjection.expected @@ -1,58 +1,58 @@ edges -| ldap3_bad.py:1:19:1:25 | ControlFlowNode for ImportMember | ldap3_bad.py:1:19:1:25 | ControlFlowNode for request | -| ldap3_bad.py:1:19:1:25 | ControlFlowNode for ImportMember | ldap3_bad.py:1:19:1:25 | ControlFlowNode for request | -| ldap3_bad.py:1:19:1:25 | ControlFlowNode for request | ldap3_bad.py:13:17:13:23 | ControlFlowNode for request | -| ldap3_bad.py:1:19:1:25 | ControlFlowNode for request | ldap3_bad.py:13:17:13:23 | ControlFlowNode for request | -| ldap3_bad.py:1:19:1:25 | ControlFlowNode for request | ldap3_bad.py:14:21:14:27 | ControlFlowNode for request | -| ldap3_bad.py:1:19:1:25 | ControlFlowNode for request | ldap3_bad.py:30:17:30:23 | ControlFlowNode for request | -| ldap3_bad.py:1:19:1:25 | ControlFlowNode for request | ldap3_bad.py:30:17:30:23 | ControlFlowNode for request | -| ldap3_bad.py:1:19:1:25 | ControlFlowNode for request | ldap3_bad.py:31:21:31:27 | ControlFlowNode for request | -| ldap3_bad.py:13:5:13:13 | ControlFlowNode for unsafe_dc | ldap3_bad.py:16:5:16:6 | ControlFlowNode for dn | -| ldap3_bad.py:13:17:13:23 | ControlFlowNode for request | ldap3_bad.py:13:5:13:13 | ControlFlowNode for unsafe_dc | -| ldap3_bad.py:13:17:13:23 | ControlFlowNode for request | ldap3_bad.py:14:5:14:17 | ControlFlowNode for unsafe_filter | -| ldap3_bad.py:14:5:14:17 | ControlFlowNode for unsafe_filter | ldap3_bad.py:17:5:17:17 | ControlFlowNode for search_filter | -| ldap3_bad.py:14:21:14:27 | ControlFlowNode for request | ldap3_bad.py:14:5:14:17 | ControlFlowNode for unsafe_filter | -| ldap3_bad.py:16:5:16:6 | ControlFlowNode for dn | ldap3_bad.py:21:17:21:18 | ControlFlowNode for dn | -| ldap3_bad.py:17:5:17:17 | ControlFlowNode for search_filter | ldap3_bad.py:21:21:21:33 | ControlFlowNode for search_filter | -| ldap3_bad.py:30:5:30:13 | ControlFlowNode for unsafe_dc | ldap3_bad.py:33:5:33:6 | ControlFlowNode for dn | -| ldap3_bad.py:30:17:30:23 | ControlFlowNode for request | ldap3_bad.py:30:5:30:13 | ControlFlowNode for unsafe_dc | -| ldap3_bad.py:30:17:30:23 | ControlFlowNode for request | ldap3_bad.py:31:5:31:17 | ControlFlowNode for unsafe_filter | -| ldap3_bad.py:31:5:31:17 | ControlFlowNode for unsafe_filter | ldap3_bad.py:34:5:34:17 | ControlFlowNode for search_filter | -| ldap3_bad.py:31:21:31:27 | ControlFlowNode for request | ldap3_bad.py:31:5:31:17 | ControlFlowNode for unsafe_filter | -| ldap3_bad.py:33:5:33:6 | ControlFlowNode for dn | ldap3_bad.py:38:9:38:10 | ControlFlowNode for dn | -| ldap3_bad.py:34:5:34:17 | ControlFlowNode for search_filter | ldap3_bad.py:38:13:38:25 | ControlFlowNode for search_filter | -| ldap_bad.py:1:19:1:25 | ControlFlowNode for ImportMember | ldap_bad.py:1:19:1:25 | ControlFlowNode for request | -| ldap_bad.py:1:19:1:25 | ControlFlowNode for ImportMember | ldap_bad.py:1:19:1:25 | ControlFlowNode for request | -| ldap_bad.py:1:19:1:25 | ControlFlowNode for request | ldap_bad.py:13:17:13:23 | ControlFlowNode for request | -| ldap_bad.py:1:19:1:25 | ControlFlowNode for request | ldap_bad.py:13:17:13:23 | ControlFlowNode for request | -| ldap_bad.py:1:19:1:25 | ControlFlowNode for request | ldap_bad.py:14:21:14:27 | ControlFlowNode for request | -| ldap_bad.py:1:19:1:25 | ControlFlowNode for request | ldap_bad.py:30:17:30:23 | ControlFlowNode for request | -| ldap_bad.py:1:19:1:25 | ControlFlowNode for request | ldap_bad.py:30:17:30:23 | ControlFlowNode for request | -| ldap_bad.py:1:19:1:25 | ControlFlowNode for request | ldap_bad.py:31:21:31:27 | ControlFlowNode for request | -| ldap_bad.py:1:19:1:25 | ControlFlowNode for request | ldap_bad.py:47:17:47:23 | ControlFlowNode for request | -| ldap_bad.py:1:19:1:25 | ControlFlowNode for request | ldap_bad.py:47:17:47:23 | ControlFlowNode for request | -| ldap_bad.py:1:19:1:25 | ControlFlowNode for request | ldap_bad.py:48:21:48:27 | ControlFlowNode for request | -| ldap_bad.py:13:5:13:13 | ControlFlowNode for unsafe_dc | ldap_bad.py:16:5:16:6 | ControlFlowNode for dn | -| ldap_bad.py:13:17:13:23 | ControlFlowNode for request | ldap_bad.py:13:5:13:13 | ControlFlowNode for unsafe_dc | -| ldap_bad.py:13:17:13:23 | ControlFlowNode for request | ldap_bad.py:14:5:14:17 | ControlFlowNode for unsafe_filter | -| ldap_bad.py:14:5:14:17 | ControlFlowNode for unsafe_filter | ldap_bad.py:17:5:17:17 | ControlFlowNode for search_filter | -| ldap_bad.py:14:21:14:27 | ControlFlowNode for request | ldap_bad.py:14:5:14:17 | ControlFlowNode for unsafe_filter | -| ldap_bad.py:16:5:16:6 | ControlFlowNode for dn | ldap_bad.py:21:9:21:10 | ControlFlowNode for dn | -| ldap_bad.py:17:5:17:17 | ControlFlowNode for search_filter | ldap_bad.py:21:33:21:45 | ControlFlowNode for search_filter | -| ldap_bad.py:30:5:30:13 | ControlFlowNode for unsafe_dc | ldap_bad.py:33:5:33:6 | ControlFlowNode for dn | -| ldap_bad.py:30:17:30:23 | ControlFlowNode for request | ldap_bad.py:30:5:30:13 | ControlFlowNode for unsafe_dc | -| ldap_bad.py:30:17:30:23 | ControlFlowNode for request | ldap_bad.py:31:5:31:17 | ControlFlowNode for unsafe_filter | -| ldap_bad.py:31:5:31:17 | ControlFlowNode for unsafe_filter | ldap_bad.py:34:5:34:17 | ControlFlowNode for search_filter | -| ldap_bad.py:31:21:31:27 | ControlFlowNode for request | ldap_bad.py:31:5:31:17 | ControlFlowNode for unsafe_filter | -| ldap_bad.py:33:5:33:6 | ControlFlowNode for dn | ldap_bad.py:37:9:37:10 | ControlFlowNode for dn | -| ldap_bad.py:34:5:34:17 | ControlFlowNode for search_filter | ldap_bad.py:37:33:37:45 | ControlFlowNode for search_filter | -| ldap_bad.py:47:5:47:13 | ControlFlowNode for unsafe_dc | ldap_bad.py:50:5:50:6 | ControlFlowNode for dn | -| ldap_bad.py:47:17:47:23 | ControlFlowNode for request | ldap_bad.py:47:5:47:13 | ControlFlowNode for unsafe_dc | -| ldap_bad.py:47:17:47:23 | ControlFlowNode for request | ldap_bad.py:48:5:48:17 | ControlFlowNode for unsafe_filter | -| ldap_bad.py:48:5:48:17 | ControlFlowNode for unsafe_filter | ldap_bad.py:51:5:51:17 | ControlFlowNode for search_filter | -| ldap_bad.py:48:21:48:27 | ControlFlowNode for request | ldap_bad.py:48:5:48:17 | ControlFlowNode for unsafe_filter | -| ldap_bad.py:50:5:50:6 | ControlFlowNode for dn | ldap_bad.py:55:9:55:10 | ControlFlowNode for dn | -| ldap_bad.py:51:5:51:17 | ControlFlowNode for search_filter | ldap_bad.py:55:43:55:55 | ControlFlowNode for search_filter | +| ldap3_bad.py:1:19:1:25 | ControlFlowNode for ImportMember | ldap3_bad.py:1:19:1:25 | ControlFlowNode for request | provenance | | +| ldap3_bad.py:1:19:1:25 | ControlFlowNode for ImportMember | ldap3_bad.py:1:19:1:25 | ControlFlowNode for request | provenance | | +| ldap3_bad.py:1:19:1:25 | ControlFlowNode for request | ldap3_bad.py:13:17:13:23 | ControlFlowNode for request | provenance | | +| ldap3_bad.py:1:19:1:25 | ControlFlowNode for request | ldap3_bad.py:13:17:13:23 | ControlFlowNode for request | provenance | | +| ldap3_bad.py:1:19:1:25 | ControlFlowNode for request | ldap3_bad.py:14:21:14:27 | ControlFlowNode for request | provenance | | +| ldap3_bad.py:1:19:1:25 | ControlFlowNode for request | ldap3_bad.py:30:17:30:23 | ControlFlowNode for request | provenance | | +| ldap3_bad.py:1:19:1:25 | ControlFlowNode for request | ldap3_bad.py:30:17:30:23 | ControlFlowNode for request | provenance | | +| ldap3_bad.py:1:19:1:25 | ControlFlowNode for request | ldap3_bad.py:31:21:31:27 | ControlFlowNode for request | provenance | | +| ldap3_bad.py:13:5:13:13 | ControlFlowNode for unsafe_dc | ldap3_bad.py:16:5:16:6 | ControlFlowNode for dn | provenance | | +| ldap3_bad.py:13:17:13:23 | ControlFlowNode for request | ldap3_bad.py:13:5:13:13 | ControlFlowNode for unsafe_dc | provenance | | +| ldap3_bad.py:13:17:13:23 | ControlFlowNode for request | ldap3_bad.py:14:5:14:17 | ControlFlowNode for unsafe_filter | provenance | | +| ldap3_bad.py:14:5:14:17 | ControlFlowNode for unsafe_filter | ldap3_bad.py:17:5:17:17 | ControlFlowNode for search_filter | provenance | | +| ldap3_bad.py:14:21:14:27 | ControlFlowNode for request | ldap3_bad.py:14:5:14:17 | ControlFlowNode for unsafe_filter | provenance | | +| ldap3_bad.py:16:5:16:6 | ControlFlowNode for dn | ldap3_bad.py:21:17:21:18 | ControlFlowNode for dn | provenance | | +| ldap3_bad.py:17:5:17:17 | ControlFlowNode for search_filter | ldap3_bad.py:21:21:21:33 | ControlFlowNode for search_filter | provenance | | +| ldap3_bad.py:30:5:30:13 | ControlFlowNode for unsafe_dc | ldap3_bad.py:33:5:33:6 | ControlFlowNode for dn | provenance | | +| ldap3_bad.py:30:17:30:23 | ControlFlowNode for request | ldap3_bad.py:30:5:30:13 | ControlFlowNode for unsafe_dc | provenance | | +| ldap3_bad.py:30:17:30:23 | ControlFlowNode for request | ldap3_bad.py:31:5:31:17 | ControlFlowNode for unsafe_filter | provenance | | +| ldap3_bad.py:31:5:31:17 | ControlFlowNode for unsafe_filter | ldap3_bad.py:34:5:34:17 | ControlFlowNode for search_filter | provenance | | +| ldap3_bad.py:31:21:31:27 | ControlFlowNode for request | ldap3_bad.py:31:5:31:17 | ControlFlowNode for unsafe_filter | provenance | | +| ldap3_bad.py:33:5:33:6 | ControlFlowNode for dn | ldap3_bad.py:38:9:38:10 | ControlFlowNode for dn | provenance | | +| ldap3_bad.py:34:5:34:17 | ControlFlowNode for search_filter | ldap3_bad.py:38:13:38:25 | ControlFlowNode for search_filter | provenance | | +| ldap_bad.py:1:19:1:25 | ControlFlowNode for ImportMember | ldap_bad.py:1:19:1:25 | ControlFlowNode for request | provenance | | +| ldap_bad.py:1:19:1:25 | ControlFlowNode for ImportMember | ldap_bad.py:1:19:1:25 | ControlFlowNode for request | provenance | | +| ldap_bad.py:1:19:1:25 | ControlFlowNode for request | ldap_bad.py:13:17:13:23 | ControlFlowNode for request | provenance | | +| ldap_bad.py:1:19:1:25 | ControlFlowNode for request | ldap_bad.py:13:17:13:23 | ControlFlowNode for request | provenance | | +| ldap_bad.py:1:19:1:25 | ControlFlowNode for request | ldap_bad.py:14:21:14:27 | ControlFlowNode for request | provenance | | +| ldap_bad.py:1:19:1:25 | ControlFlowNode for request | ldap_bad.py:30:17:30:23 | ControlFlowNode for request | provenance | | +| ldap_bad.py:1:19:1:25 | ControlFlowNode for request | ldap_bad.py:30:17:30:23 | ControlFlowNode for request | provenance | | +| ldap_bad.py:1:19:1:25 | ControlFlowNode for request | ldap_bad.py:31:21:31:27 | ControlFlowNode for request | provenance | | +| ldap_bad.py:1:19:1:25 | ControlFlowNode for request | ldap_bad.py:47:17:47:23 | ControlFlowNode for request | provenance | | +| ldap_bad.py:1:19:1:25 | ControlFlowNode for request | ldap_bad.py:47:17:47:23 | ControlFlowNode for request | provenance | | +| ldap_bad.py:1:19:1:25 | ControlFlowNode for request | ldap_bad.py:48:21:48:27 | ControlFlowNode for request | provenance | | +| ldap_bad.py:13:5:13:13 | ControlFlowNode for unsafe_dc | ldap_bad.py:16:5:16:6 | ControlFlowNode for dn | provenance | | +| ldap_bad.py:13:17:13:23 | ControlFlowNode for request | ldap_bad.py:13:5:13:13 | ControlFlowNode for unsafe_dc | provenance | | +| ldap_bad.py:13:17:13:23 | ControlFlowNode for request | ldap_bad.py:14:5:14:17 | ControlFlowNode for unsafe_filter | provenance | | +| ldap_bad.py:14:5:14:17 | ControlFlowNode for unsafe_filter | ldap_bad.py:17:5:17:17 | ControlFlowNode for search_filter | provenance | | +| ldap_bad.py:14:21:14:27 | ControlFlowNode for request | ldap_bad.py:14:5:14:17 | ControlFlowNode for unsafe_filter | provenance | | +| ldap_bad.py:16:5:16:6 | ControlFlowNode for dn | ldap_bad.py:21:9:21:10 | ControlFlowNode for dn | provenance | | +| ldap_bad.py:17:5:17:17 | ControlFlowNode for search_filter | ldap_bad.py:21:33:21:45 | ControlFlowNode for search_filter | provenance | | +| ldap_bad.py:30:5:30:13 | ControlFlowNode for unsafe_dc | ldap_bad.py:33:5:33:6 | ControlFlowNode for dn | provenance | | +| ldap_bad.py:30:17:30:23 | ControlFlowNode for request | ldap_bad.py:30:5:30:13 | ControlFlowNode for unsafe_dc | provenance | | +| ldap_bad.py:30:17:30:23 | ControlFlowNode for request | ldap_bad.py:31:5:31:17 | ControlFlowNode for unsafe_filter | provenance | | +| ldap_bad.py:31:5:31:17 | ControlFlowNode for unsafe_filter | ldap_bad.py:34:5:34:17 | ControlFlowNode for search_filter | provenance | | +| ldap_bad.py:31:21:31:27 | ControlFlowNode for request | ldap_bad.py:31:5:31:17 | ControlFlowNode for unsafe_filter | provenance | | +| ldap_bad.py:33:5:33:6 | ControlFlowNode for dn | ldap_bad.py:37:9:37:10 | ControlFlowNode for dn | provenance | | +| ldap_bad.py:34:5:34:17 | ControlFlowNode for search_filter | ldap_bad.py:37:33:37:45 | ControlFlowNode for search_filter | provenance | | +| ldap_bad.py:47:5:47:13 | ControlFlowNode for unsafe_dc | ldap_bad.py:50:5:50:6 | ControlFlowNode for dn | provenance | | +| ldap_bad.py:47:17:47:23 | ControlFlowNode for request | ldap_bad.py:47:5:47:13 | ControlFlowNode for unsafe_dc | provenance | | +| ldap_bad.py:47:17:47:23 | ControlFlowNode for request | ldap_bad.py:48:5:48:17 | ControlFlowNode for unsafe_filter | provenance | | +| ldap_bad.py:48:5:48:17 | ControlFlowNode for unsafe_filter | ldap_bad.py:51:5:51:17 | ControlFlowNode for search_filter | provenance | | +| ldap_bad.py:48:21:48:27 | ControlFlowNode for request | ldap_bad.py:48:5:48:17 | ControlFlowNode for unsafe_filter | provenance | | +| ldap_bad.py:50:5:50:6 | ControlFlowNode for dn | ldap_bad.py:55:9:55:10 | ControlFlowNode for dn | provenance | | +| ldap_bad.py:51:5:51:17 | ControlFlowNode for search_filter | ldap_bad.py:55:43:55:55 | ControlFlowNode for search_filter | provenance | | nodes | ldap3_bad.py:1:19:1:25 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | | ldap3_bad.py:1:19:1:25 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | diff --git a/python/ql/test/query-tests/Security/CWE-094-CodeInjection/CodeInjection.expected b/python/ql/test/query-tests/Security/CWE-094-CodeInjection/CodeInjection.expected index 2de776c3b28..ff55d168906 100644 --- a/python/ql/test/query-tests/Security/CWE-094-CodeInjection/CodeInjection.expected +++ b/python/ql/test/query-tests/Security/CWE-094-CodeInjection/CodeInjection.expected @@ -1,18 +1,18 @@ edges -| code_injection.py:1:26:1:32 | ControlFlowNode for ImportMember | code_injection.py:1:26:1:32 | ControlFlowNode for request | -| code_injection.py:1:26:1:32 | ControlFlowNode for request | code_injection.py:6:12:6:18 | ControlFlowNode for request | -| code_injection.py:1:26:1:32 | ControlFlowNode for request | code_injection.py:18:16:18:22 | ControlFlowNode for request | -| code_injection.py:6:5:6:8 | ControlFlowNode for code | code_injection.py:7:10:7:13 | ControlFlowNode for code | -| code_injection.py:6:5:6:8 | ControlFlowNode for code | code_injection.py:8:10:8:13 | ControlFlowNode for code | -| code_injection.py:6:5:6:8 | ControlFlowNode for code | code_injection.py:9:5:9:7 | ControlFlowNode for cmd | -| code_injection.py:6:12:6:18 | ControlFlowNode for request | code_injection.py:6:12:6:23 | ControlFlowNode for Attribute | -| code_injection.py:6:12:6:23 | ControlFlowNode for Attribute | code_injection.py:6:12:6:35 | ControlFlowNode for Attribute() | -| code_injection.py:6:12:6:35 | ControlFlowNode for Attribute() | code_injection.py:6:5:6:8 | ControlFlowNode for code | -| code_injection.py:9:5:9:7 | ControlFlowNode for cmd | code_injection.py:10:10:10:12 | ControlFlowNode for cmd | -| code_injection.py:18:5:18:12 | ControlFlowNode for obj_name | code_injection.py:21:20:21:27 | ControlFlowNode for obj_name | -| code_injection.py:18:16:18:22 | ControlFlowNode for request | code_injection.py:18:16:18:27 | ControlFlowNode for Attribute | -| code_injection.py:18:16:18:27 | ControlFlowNode for Attribute | code_injection.py:18:16:18:38 | ControlFlowNode for Attribute() | -| code_injection.py:18:16:18:38 | ControlFlowNode for Attribute() | code_injection.py:18:5:18:12 | ControlFlowNode for obj_name | +| code_injection.py:1:26:1:32 | ControlFlowNode for ImportMember | code_injection.py:1:26:1:32 | ControlFlowNode for request | provenance | | +| code_injection.py:1:26:1:32 | ControlFlowNode for request | code_injection.py:6:12:6:18 | ControlFlowNode for request | provenance | | +| code_injection.py:1:26:1:32 | ControlFlowNode for request | code_injection.py:18:16:18:22 | ControlFlowNode for request | provenance | | +| code_injection.py:6:5:6:8 | ControlFlowNode for code | code_injection.py:7:10:7:13 | ControlFlowNode for code | provenance | | +| code_injection.py:6:5:6:8 | ControlFlowNode for code | code_injection.py:8:10:8:13 | ControlFlowNode for code | provenance | | +| code_injection.py:6:5:6:8 | ControlFlowNode for code | code_injection.py:9:5:9:7 | ControlFlowNode for cmd | provenance | | +| code_injection.py:6:12:6:18 | ControlFlowNode for request | code_injection.py:6:12:6:23 | ControlFlowNode for Attribute | provenance | | +| code_injection.py:6:12:6:23 | ControlFlowNode for Attribute | code_injection.py:6:12:6:35 | ControlFlowNode for Attribute() | provenance | | +| code_injection.py:6:12:6:35 | ControlFlowNode for Attribute() | code_injection.py:6:5:6:8 | ControlFlowNode for code | provenance | | +| code_injection.py:9:5:9:7 | ControlFlowNode for cmd | code_injection.py:10:10:10:12 | ControlFlowNode for cmd | provenance | | +| code_injection.py:18:5:18:12 | ControlFlowNode for obj_name | code_injection.py:21:20:21:27 | ControlFlowNode for obj_name | provenance | | +| code_injection.py:18:16:18:22 | ControlFlowNode for request | code_injection.py:18:16:18:27 | ControlFlowNode for Attribute | provenance | | +| code_injection.py:18:16:18:27 | ControlFlowNode for Attribute | code_injection.py:18:16:18:38 | ControlFlowNode for Attribute() | provenance | | +| code_injection.py:18:16:18:38 | ControlFlowNode for Attribute() | code_injection.py:18:5:18:12 | ControlFlowNode for obj_name | provenance | | nodes | code_injection.py:1:26:1:32 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | | code_injection.py:1:26:1:32 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | diff --git a/python/ql/test/query-tests/Security/CWE-117-LogInjection/LogInjection.expected b/python/ql/test/query-tests/Security/CWE-117-LogInjection/LogInjection.expected index 1d8c78d35b7..d0e05dd2421 100644 --- a/python/ql/test/query-tests/Security/CWE-117-LogInjection/LogInjection.expected +++ b/python/ql/test/query-tests/Security/CWE-117-LogInjection/LogInjection.expected @@ -1,25 +1,25 @@ edges -| LogInjectionBad.py:7:19:7:25 | ControlFlowNode for ImportMember | LogInjectionBad.py:7:19:7:25 | ControlFlowNode for request | -| LogInjectionBad.py:7:19:7:25 | ControlFlowNode for request | LogInjectionBad.py:17:12:17:18 | ControlFlowNode for request | -| LogInjectionBad.py:7:19:7:25 | ControlFlowNode for request | LogInjectionBad.py:23:12:23:18 | ControlFlowNode for request | -| LogInjectionBad.py:7:19:7:25 | ControlFlowNode for request | LogInjectionBad.py:29:12:29:18 | ControlFlowNode for request | -| LogInjectionBad.py:7:19:7:25 | ControlFlowNode for request | LogInjectionBad.py:35:12:35:18 | ControlFlowNode for request | -| LogInjectionBad.py:17:5:17:8 | ControlFlowNode for name | LogInjectionBad.py:18:21:18:40 | ControlFlowNode for BinaryExpr | -| LogInjectionBad.py:17:12:17:18 | ControlFlowNode for request | LogInjectionBad.py:17:12:17:23 | ControlFlowNode for Attribute | -| LogInjectionBad.py:17:12:17:23 | ControlFlowNode for Attribute | LogInjectionBad.py:17:12:17:35 | ControlFlowNode for Attribute() | -| LogInjectionBad.py:17:12:17:35 | ControlFlowNode for Attribute() | LogInjectionBad.py:17:5:17:8 | ControlFlowNode for name | -| LogInjectionBad.py:23:5:23:8 | ControlFlowNode for name | LogInjectionBad.py:24:18:24:37 | ControlFlowNode for BinaryExpr | -| LogInjectionBad.py:23:12:23:18 | ControlFlowNode for request | LogInjectionBad.py:23:12:23:23 | ControlFlowNode for Attribute | -| LogInjectionBad.py:23:12:23:23 | ControlFlowNode for Attribute | LogInjectionBad.py:23:12:23:35 | ControlFlowNode for Attribute() | -| LogInjectionBad.py:23:12:23:35 | ControlFlowNode for Attribute() | LogInjectionBad.py:23:5:23:8 | ControlFlowNode for name | -| LogInjectionBad.py:29:5:29:8 | ControlFlowNode for name | LogInjectionBad.py:30:25:30:44 | ControlFlowNode for BinaryExpr | -| LogInjectionBad.py:29:12:29:18 | ControlFlowNode for request | LogInjectionBad.py:29:12:29:23 | ControlFlowNode for Attribute | -| LogInjectionBad.py:29:12:29:23 | ControlFlowNode for Attribute | LogInjectionBad.py:29:12:29:35 | ControlFlowNode for Attribute() | -| LogInjectionBad.py:29:12:29:35 | ControlFlowNode for Attribute() | LogInjectionBad.py:29:5:29:8 | ControlFlowNode for name | -| LogInjectionBad.py:35:5:35:8 | ControlFlowNode for name | LogInjectionBad.py:37:19:37:38 | ControlFlowNode for BinaryExpr | -| LogInjectionBad.py:35:12:35:18 | ControlFlowNode for request | LogInjectionBad.py:35:12:35:23 | ControlFlowNode for Attribute | -| LogInjectionBad.py:35:12:35:23 | ControlFlowNode for Attribute | LogInjectionBad.py:35:12:35:35 | ControlFlowNode for Attribute() | -| LogInjectionBad.py:35:12:35:35 | ControlFlowNode for Attribute() | LogInjectionBad.py:35:5:35:8 | ControlFlowNode for name | +| LogInjectionBad.py:7:19:7:25 | ControlFlowNode for ImportMember | LogInjectionBad.py:7:19:7:25 | ControlFlowNode for request | provenance | | +| LogInjectionBad.py:7:19:7:25 | ControlFlowNode for request | LogInjectionBad.py:17:12:17:18 | ControlFlowNode for request | provenance | | +| LogInjectionBad.py:7:19:7:25 | ControlFlowNode for request | LogInjectionBad.py:23:12:23:18 | ControlFlowNode for request | provenance | | +| LogInjectionBad.py:7:19:7:25 | ControlFlowNode for request | LogInjectionBad.py:29:12:29:18 | ControlFlowNode for request | provenance | | +| LogInjectionBad.py:7:19:7:25 | ControlFlowNode for request | LogInjectionBad.py:35:12:35:18 | ControlFlowNode for request | provenance | | +| LogInjectionBad.py:17:5:17:8 | ControlFlowNode for name | LogInjectionBad.py:18:21:18:40 | ControlFlowNode for BinaryExpr | provenance | | +| LogInjectionBad.py:17:12:17:18 | ControlFlowNode for request | LogInjectionBad.py:17:12:17:23 | ControlFlowNode for Attribute | provenance | | +| LogInjectionBad.py:17:12:17:23 | ControlFlowNode for Attribute | LogInjectionBad.py:17:12:17:35 | ControlFlowNode for Attribute() | provenance | | +| LogInjectionBad.py:17:12:17:35 | ControlFlowNode for Attribute() | LogInjectionBad.py:17:5:17:8 | ControlFlowNode for name | provenance | | +| LogInjectionBad.py:23:5:23:8 | ControlFlowNode for name | LogInjectionBad.py:24:18:24:37 | ControlFlowNode for BinaryExpr | provenance | | +| LogInjectionBad.py:23:12:23:18 | ControlFlowNode for request | LogInjectionBad.py:23:12:23:23 | ControlFlowNode for Attribute | provenance | | +| LogInjectionBad.py:23:12:23:23 | ControlFlowNode for Attribute | LogInjectionBad.py:23:12:23:35 | ControlFlowNode for Attribute() | provenance | | +| LogInjectionBad.py:23:12:23:35 | ControlFlowNode for Attribute() | LogInjectionBad.py:23:5:23:8 | ControlFlowNode for name | provenance | | +| LogInjectionBad.py:29:5:29:8 | ControlFlowNode for name | LogInjectionBad.py:30:25:30:44 | ControlFlowNode for BinaryExpr | provenance | | +| LogInjectionBad.py:29:12:29:18 | ControlFlowNode for request | LogInjectionBad.py:29:12:29:23 | ControlFlowNode for Attribute | provenance | | +| LogInjectionBad.py:29:12:29:23 | ControlFlowNode for Attribute | LogInjectionBad.py:29:12:29:35 | ControlFlowNode for Attribute() | provenance | | +| LogInjectionBad.py:29:12:29:35 | ControlFlowNode for Attribute() | LogInjectionBad.py:29:5:29:8 | ControlFlowNode for name | provenance | | +| LogInjectionBad.py:35:5:35:8 | ControlFlowNode for name | LogInjectionBad.py:37:19:37:38 | ControlFlowNode for BinaryExpr | provenance | | +| LogInjectionBad.py:35:12:35:18 | ControlFlowNode for request | LogInjectionBad.py:35:12:35:23 | ControlFlowNode for Attribute | provenance | | +| LogInjectionBad.py:35:12:35:23 | ControlFlowNode for Attribute | LogInjectionBad.py:35:12:35:35 | ControlFlowNode for Attribute() | provenance | | +| LogInjectionBad.py:35:12:35:35 | ControlFlowNode for Attribute() | LogInjectionBad.py:35:5:35:8 | ControlFlowNode for name | provenance | | nodes | LogInjectionBad.py:7:19:7:25 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | | LogInjectionBad.py:7:19:7:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | diff --git a/python/ql/test/query-tests/Security/CWE-209-StackTraceExposure/StackTraceExposure.expected b/python/ql/test/query-tests/Security/CWE-209-StackTraceExposure/StackTraceExposure.expected index 20857567c49..b1023db5e62 100644 --- a/python/ql/test/query-tests/Security/CWE-209-StackTraceExposure/StackTraceExposure.expected +++ b/python/ql/test/query-tests/Security/CWE-209-StackTraceExposure/StackTraceExposure.expected @@ -1,13 +1,13 @@ edges -| test.py:23:25:23:25 | ControlFlowNode for e | test.py:24:16:24:16 | ControlFlowNode for e | -| test.py:31:25:31:25 | ControlFlowNode for e | test.py:32:16:32:16 | ControlFlowNode for e | -| test.py:32:16:32:16 | ControlFlowNode for e | test.py:32:16:32:30 | ControlFlowNode for Attribute | -| test.py:49:9:49:11 | ControlFlowNode for err | test.py:50:29:50:31 | ControlFlowNode for err | -| test.py:49:15:49:36 | ControlFlowNode for Attribute() | test.py:49:9:49:11 | ControlFlowNode for err | -| test.py:50:29:50:31 | ControlFlowNode for err | test.py:50:16:50:32 | ControlFlowNode for format_error() | -| test.py:50:29:50:31 | ControlFlowNode for err | test.py:52:18:52:20 | ControlFlowNode for msg | -| test.py:52:18:52:20 | ControlFlowNode for msg | test.py:53:12:53:27 | ControlFlowNode for BinaryExpr | -| test.py:65:25:65:25 | ControlFlowNode for e | test.py:66:24:66:40 | ControlFlowNode for Dict | +| test.py:23:25:23:25 | ControlFlowNode for e | test.py:24:16:24:16 | ControlFlowNode for e | provenance | | +| test.py:31:25:31:25 | ControlFlowNode for e | test.py:32:16:32:16 | ControlFlowNode for e | provenance | | +| test.py:32:16:32:16 | ControlFlowNode for e | test.py:32:16:32:30 | ControlFlowNode for Attribute | provenance | | +| test.py:49:9:49:11 | ControlFlowNode for err | test.py:50:29:50:31 | ControlFlowNode for err | provenance | | +| test.py:49:15:49:36 | ControlFlowNode for Attribute() | test.py:49:9:49:11 | ControlFlowNode for err | provenance | | +| test.py:50:29:50:31 | ControlFlowNode for err | test.py:50:16:50:32 | ControlFlowNode for format_error() | provenance | | +| test.py:50:29:50:31 | ControlFlowNode for err | test.py:52:18:52:20 | ControlFlowNode for msg | provenance | | +| test.py:52:18:52:20 | ControlFlowNode for msg | test.py:53:12:53:27 | ControlFlowNode for BinaryExpr | provenance | | +| test.py:65:25:65:25 | ControlFlowNode for e | test.py:66:24:66:40 | ControlFlowNode for Dict | provenance | | nodes | test.py:16:16:16:37 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | test.py:23:25:23:25 | ControlFlowNode for e | semmle.label | ControlFlowNode for e | diff --git a/python/ql/test/query-tests/Security/CWE-285-PamAuthorization/PamAuthorization.expected b/python/ql/test/query-tests/Security/CWE-285-PamAuthorization/PamAuthorization.expected index 8f69b8c32e3..132383876f6 100644 --- a/python/ql/test/query-tests/Security/CWE-285-PamAuthorization/PamAuthorization.expected +++ b/python/ql/test/query-tests/Security/CWE-285-PamAuthorization/PamAuthorization.expected @@ -1,13 +1,13 @@ edges -| pam_test.py:4:26:4:32 | ControlFlowNode for ImportMember | pam_test.py:4:26:4:32 | ControlFlowNode for request | -| pam_test.py:4:26:4:32 | ControlFlowNode for request | pam_test.py:71:16:71:22 | ControlFlowNode for request | -| pam_test.py:71:5:71:12 | ControlFlowNode for username | pam_test.py:74:33:74:40 | ControlFlowNode for username | -| pam_test.py:71:16:71:22 | ControlFlowNode for request | pam_test.py:71:16:71:27 | ControlFlowNode for Attribute | -| pam_test.py:71:16:71:27 | ControlFlowNode for Attribute | pam_test.py:71:16:71:47 | ControlFlowNode for Attribute() | -| pam_test.py:71:16:71:47 | ControlFlowNode for Attribute() | pam_test.py:71:5:71:12 | ControlFlowNode for username | -| pam_test.py:74:33:74:40 | ControlFlowNode for username | pam_test.py:74:62:74:67 | ControlFlowNode for handle | -| pam_test.py:74:62:74:67 | ControlFlowNode for handle | pam_test.py:76:31:76:36 | ControlFlowNode for handle | -| pam_test.py:76:31:76:36 | ControlFlowNode for handle | pam_test.py:76:14:76:40 | ControlFlowNode for pam_authenticate() | +| pam_test.py:4:26:4:32 | ControlFlowNode for ImportMember | pam_test.py:4:26:4:32 | ControlFlowNode for request | provenance | | +| pam_test.py:4:26:4:32 | ControlFlowNode for request | pam_test.py:71:16:71:22 | ControlFlowNode for request | provenance | | +| pam_test.py:71:5:71:12 | ControlFlowNode for username | pam_test.py:74:33:74:40 | ControlFlowNode for username | provenance | | +| pam_test.py:71:16:71:22 | ControlFlowNode for request | pam_test.py:71:16:71:27 | ControlFlowNode for Attribute | provenance | | +| pam_test.py:71:16:71:27 | ControlFlowNode for Attribute | pam_test.py:71:16:71:47 | ControlFlowNode for Attribute() | provenance | | +| pam_test.py:71:16:71:47 | ControlFlowNode for Attribute() | pam_test.py:71:5:71:12 | ControlFlowNode for username | provenance | | +| pam_test.py:74:33:74:40 | ControlFlowNode for username | pam_test.py:74:62:74:67 | ControlFlowNode for handle | provenance | | +| pam_test.py:74:62:74:67 | ControlFlowNode for handle | pam_test.py:76:31:76:36 | ControlFlowNode for handle | provenance | | +| pam_test.py:76:31:76:36 | ControlFlowNode for handle | pam_test.py:76:14:76:40 | ControlFlowNode for pam_authenticate() | provenance | | nodes | pam_test.py:4:26:4:32 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | | pam_test.py:4:26:4:32 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | diff --git a/python/ql/test/query-tests/Security/CWE-312-CleartextLogging/CleartextLogging.expected b/python/ql/test/query-tests/Security/CWE-312-CleartextLogging/CleartextLogging.expected index f579afece00..f4b5ef93204 100644 --- a/python/ql/test/query-tests/Security/CWE-312-CleartextLogging/CleartextLogging.expected +++ b/python/ql/test/query-tests/Security/CWE-312-CleartextLogging/CleartextLogging.expected @@ -1,14 +1,14 @@ edges -| test.py:19:5:19:12 | ControlFlowNode for password | test.py:20:48:20:55 | ControlFlowNode for password | -| test.py:19:5:19:12 | ControlFlowNode for password | test.py:22:58:22:65 | ControlFlowNode for password | -| test.py:19:5:19:12 | ControlFlowNode for password | test.py:23:58:23:65 | ControlFlowNode for password | -| test.py:19:5:19:12 | ControlFlowNode for password | test.py:27:40:27:47 | ControlFlowNode for password | -| test.py:19:5:19:12 | ControlFlowNode for password | test.py:30:58:30:65 | ControlFlowNode for password | -| test.py:19:16:19:29 | ControlFlowNode for get_password() | test.py:19:5:19:12 | ControlFlowNode for password | -| test.py:44:5:44:5 | ControlFlowNode for x | test.py:45:11:45:11 | ControlFlowNode for x | -| test.py:44:9:44:25 | ControlFlowNode for Attribute() | test.py:44:5:44:5 | ControlFlowNode for x | -| test.py:70:5:70:10 | ControlFlowNode for config | test.py:74:11:74:31 | ControlFlowNode for Subscript | -| test.py:72:21:72:37 | ControlFlowNode for Attribute | test.py:70:5:70:10 | ControlFlowNode for config | +| test.py:19:5:19:12 | ControlFlowNode for password | test.py:20:48:20:55 | ControlFlowNode for password | provenance | | +| test.py:19:5:19:12 | ControlFlowNode for password | test.py:22:58:22:65 | ControlFlowNode for password | provenance | | +| test.py:19:5:19:12 | ControlFlowNode for password | test.py:23:58:23:65 | ControlFlowNode for password | provenance | | +| test.py:19:5:19:12 | ControlFlowNode for password | test.py:27:40:27:47 | ControlFlowNode for password | provenance | | +| test.py:19:5:19:12 | ControlFlowNode for password | test.py:30:58:30:65 | ControlFlowNode for password | provenance | | +| test.py:19:16:19:29 | ControlFlowNode for get_password() | test.py:19:5:19:12 | ControlFlowNode for password | provenance | | +| test.py:44:5:44:5 | ControlFlowNode for x | test.py:45:11:45:11 | ControlFlowNode for x | provenance | | +| test.py:44:9:44:25 | ControlFlowNode for Attribute() | test.py:44:5:44:5 | ControlFlowNode for x | provenance | | +| test.py:70:5:70:10 | ControlFlowNode for config | test.py:74:11:74:31 | ControlFlowNode for Subscript | provenance | | +| test.py:72:21:72:37 | ControlFlowNode for Attribute | test.py:70:5:70:10 | ControlFlowNode for config | provenance | | nodes | test.py:19:5:19:12 | ControlFlowNode for password | semmle.label | ControlFlowNode for password | | test.py:19:16:19:29 | ControlFlowNode for get_password() | semmle.label | ControlFlowNode for get_password() | diff --git a/python/ql/test/query-tests/Security/CWE-312-CleartextStorage-py3/CleartextStorage.expected b/python/ql/test/query-tests/Security/CWE-312-CleartextStorage-py3/CleartextStorage.expected index 03ff729bf7d..6b252ea7833 100644 --- a/python/ql/test/query-tests/Security/CWE-312-CleartextStorage-py3/CleartextStorage.expected +++ b/python/ql/test/query-tests/Security/CWE-312-CleartextStorage-py3/CleartextStorage.expected @@ -1,8 +1,8 @@ edges -| test.py:9:5:9:8 | ControlFlowNode for cert | test.py:12:21:12:24 | ControlFlowNode for cert | -| test.py:9:5:9:8 | ControlFlowNode for cert | test.py:13:22:13:41 | ControlFlowNode for Attribute() | -| test.py:9:5:9:8 | ControlFlowNode for cert | test.py:15:26:15:29 | ControlFlowNode for cert | -| test.py:9:12:9:21 | ControlFlowNode for get_cert() | test.py:9:5:9:8 | ControlFlowNode for cert | +| test.py:9:5:9:8 | ControlFlowNode for cert | test.py:12:21:12:24 | ControlFlowNode for cert | provenance | | +| test.py:9:5:9:8 | ControlFlowNode for cert | test.py:13:22:13:41 | ControlFlowNode for Attribute() | provenance | | +| test.py:9:5:9:8 | ControlFlowNode for cert | test.py:15:26:15:29 | ControlFlowNode for cert | provenance | | +| test.py:9:12:9:21 | ControlFlowNode for get_cert() | test.py:9:5:9:8 | ControlFlowNode for cert | provenance | | nodes | test.py:9:5:9:8 | ControlFlowNode for cert | semmle.label | ControlFlowNode for cert | | test.py:9:12:9:21 | ControlFlowNode for get_cert() | semmle.label | ControlFlowNode for get_cert() | diff --git a/python/ql/test/query-tests/Security/CWE-312-CleartextStorage/CleartextStorage.expected b/python/ql/test/query-tests/Security/CWE-312-CleartextStorage/CleartextStorage.expected index 0afd9a578b0..eac0bd37b1b 100644 --- a/python/ql/test/query-tests/Security/CWE-312-CleartextStorage/CleartextStorage.expected +++ b/python/ql/test/query-tests/Security/CWE-312-CleartextStorage/CleartextStorage.expected @@ -1,12 +1,12 @@ edges -| password_in_cookie.py:7:5:7:12 | ControlFlowNode for password | password_in_cookie.py:9:33:9:40 | ControlFlowNode for password | -| password_in_cookie.py:7:16:7:43 | ControlFlowNode for Attribute() | password_in_cookie.py:7:5:7:12 | ControlFlowNode for password | -| password_in_cookie.py:14:5:14:12 | ControlFlowNode for password | password_in_cookie.py:16:33:16:40 | ControlFlowNode for password | -| password_in_cookie.py:14:16:14:43 | ControlFlowNode for Attribute() | password_in_cookie.py:14:5:14:12 | ControlFlowNode for password | -| test.py:6:5:6:8 | ControlFlowNode for cert | test.py:8:20:8:23 | ControlFlowNode for cert | -| test.py:6:5:6:8 | ControlFlowNode for cert | test.py:9:9:9:13 | ControlFlowNode for lines | -| test.py:6:12:6:21 | ControlFlowNode for get_cert() | test.py:6:5:6:8 | ControlFlowNode for cert | -| test.py:9:9:9:13 | ControlFlowNode for lines | test.py:10:25:10:29 | ControlFlowNode for lines | +| password_in_cookie.py:7:5:7:12 | ControlFlowNode for password | password_in_cookie.py:9:33:9:40 | ControlFlowNode for password | provenance | | +| password_in_cookie.py:7:16:7:43 | ControlFlowNode for Attribute() | password_in_cookie.py:7:5:7:12 | ControlFlowNode for password | provenance | | +| password_in_cookie.py:14:5:14:12 | ControlFlowNode for password | password_in_cookie.py:16:33:16:40 | ControlFlowNode for password | provenance | | +| password_in_cookie.py:14:16:14:43 | ControlFlowNode for Attribute() | password_in_cookie.py:14:5:14:12 | ControlFlowNode for password | provenance | | +| test.py:6:5:6:8 | ControlFlowNode for cert | test.py:8:20:8:23 | ControlFlowNode for cert | provenance | | +| test.py:6:5:6:8 | ControlFlowNode for cert | test.py:9:9:9:13 | ControlFlowNode for lines | provenance | | +| test.py:6:12:6:21 | ControlFlowNode for get_cert() | test.py:6:5:6:8 | ControlFlowNode for cert | provenance | | +| test.py:9:9:9:13 | ControlFlowNode for lines | test.py:10:25:10:29 | ControlFlowNode for lines | provenance | | nodes | password_in_cookie.py:7:5:7:12 | ControlFlowNode for password | semmle.label | ControlFlowNode for password | | password_in_cookie.py:7:16:7:43 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | diff --git a/python/ql/test/query-tests/Security/CWE-327-WeakSensitiveDataHashing/WeakSensitiveDataHashing.expected b/python/ql/test/query-tests/Security/CWE-327-WeakSensitiveDataHashing/WeakSensitiveDataHashing.expected index dd3a65bc8fa..ac27f304de8 100644 --- a/python/ql/test/query-tests/Security/CWE-327-WeakSensitiveDataHashing/WeakSensitiveDataHashing.expected +++ b/python/ql/test/query-tests/Security/CWE-327-WeakSensitiveDataHashing/WeakSensitiveDataHashing.expected @@ -1,32 +1,32 @@ edges -| test_cryptodome.py:2:23:2:34 | ControlFlowNode for ImportMember | test_cryptodome.py:2:23:2:34 | ControlFlowNode for get_password | -| test_cryptodome.py:2:23:2:34 | ControlFlowNode for get_password | test_cryptodome.py:13:17:13:28 | ControlFlowNode for get_password | -| test_cryptodome.py:2:23:2:34 | ControlFlowNode for get_password | test_cryptodome.py:20:17:20:28 | ControlFlowNode for get_password | -| test_cryptodome.py:2:37:2:51 | ControlFlowNode for ImportMember | test_cryptodome.py:2:37:2:51 | ControlFlowNode for get_certificate | -| test_cryptodome.py:2:37:2:51 | ControlFlowNode for get_certificate | test_cryptodome.py:6:17:6:31 | ControlFlowNode for get_certificate | -| test_cryptodome.py:6:5:6:13 | ControlFlowNode for dangerous | test_cryptodome.py:8:19:8:27 | ControlFlowNode for dangerous | -| test_cryptodome.py:6:17:6:31 | ControlFlowNode for get_certificate | test_cryptodome.py:6:17:6:33 | ControlFlowNode for get_certificate() | -| test_cryptodome.py:6:17:6:33 | ControlFlowNode for get_certificate() | test_cryptodome.py:6:5:6:13 | ControlFlowNode for dangerous | -| test_cryptodome.py:13:5:13:13 | ControlFlowNode for dangerous | test_cryptodome.py:15:19:15:27 | ControlFlowNode for dangerous | -| test_cryptodome.py:13:17:13:28 | ControlFlowNode for get_password | test_cryptodome.py:13:17:13:30 | ControlFlowNode for get_password() | -| test_cryptodome.py:13:17:13:30 | ControlFlowNode for get_password() | test_cryptodome.py:13:5:13:13 | ControlFlowNode for dangerous | -| test_cryptodome.py:20:5:20:13 | ControlFlowNode for dangerous | test_cryptodome.py:24:19:24:27 | ControlFlowNode for dangerous | -| test_cryptodome.py:20:17:20:28 | ControlFlowNode for get_password | test_cryptodome.py:20:17:20:30 | ControlFlowNode for get_password() | -| test_cryptodome.py:20:17:20:30 | ControlFlowNode for get_password() | test_cryptodome.py:20:5:20:13 | ControlFlowNode for dangerous | -| test_cryptography.py:3:23:3:34 | ControlFlowNode for ImportMember | test_cryptography.py:3:23:3:34 | ControlFlowNode for get_password | -| test_cryptography.py:3:23:3:34 | ControlFlowNode for get_password | test_cryptography.py:15:17:15:28 | ControlFlowNode for get_password | -| test_cryptography.py:3:23:3:34 | ControlFlowNode for get_password | test_cryptography.py:23:17:23:28 | ControlFlowNode for get_password | -| test_cryptography.py:3:37:3:51 | ControlFlowNode for ImportMember | test_cryptography.py:3:37:3:51 | ControlFlowNode for get_certificate | -| test_cryptography.py:3:37:3:51 | ControlFlowNode for get_certificate | test_cryptography.py:7:17:7:31 | ControlFlowNode for get_certificate | -| test_cryptography.py:7:5:7:13 | ControlFlowNode for dangerous | test_cryptography.py:9:19:9:27 | ControlFlowNode for dangerous | -| test_cryptography.py:7:17:7:31 | ControlFlowNode for get_certificate | test_cryptography.py:7:17:7:33 | ControlFlowNode for get_certificate() | -| test_cryptography.py:7:17:7:33 | ControlFlowNode for get_certificate() | test_cryptography.py:7:5:7:13 | ControlFlowNode for dangerous | -| test_cryptography.py:15:5:15:13 | ControlFlowNode for dangerous | test_cryptography.py:17:19:17:27 | ControlFlowNode for dangerous | -| test_cryptography.py:15:17:15:28 | ControlFlowNode for get_password | test_cryptography.py:15:17:15:30 | ControlFlowNode for get_password() | -| test_cryptography.py:15:17:15:30 | ControlFlowNode for get_password() | test_cryptography.py:15:5:15:13 | ControlFlowNode for dangerous | -| test_cryptography.py:23:5:23:13 | ControlFlowNode for dangerous | test_cryptography.py:27:19:27:27 | ControlFlowNode for dangerous | -| test_cryptography.py:23:17:23:28 | ControlFlowNode for get_password | test_cryptography.py:23:17:23:30 | ControlFlowNode for get_password() | -| test_cryptography.py:23:17:23:30 | ControlFlowNode for get_password() | test_cryptography.py:23:5:23:13 | ControlFlowNode for dangerous | +| test_cryptodome.py:2:23:2:34 | ControlFlowNode for ImportMember | test_cryptodome.py:2:23:2:34 | ControlFlowNode for get_password | provenance | | +| test_cryptodome.py:2:23:2:34 | ControlFlowNode for get_password | test_cryptodome.py:13:17:13:28 | ControlFlowNode for get_password | provenance | | +| test_cryptodome.py:2:23:2:34 | ControlFlowNode for get_password | test_cryptodome.py:20:17:20:28 | ControlFlowNode for get_password | provenance | | +| test_cryptodome.py:2:37:2:51 | ControlFlowNode for ImportMember | test_cryptodome.py:2:37:2:51 | ControlFlowNode for get_certificate | provenance | | +| test_cryptodome.py:2:37:2:51 | ControlFlowNode for get_certificate | test_cryptodome.py:6:17:6:31 | ControlFlowNode for get_certificate | provenance | | +| test_cryptodome.py:6:5:6:13 | ControlFlowNode for dangerous | test_cryptodome.py:8:19:8:27 | ControlFlowNode for dangerous | provenance | | +| test_cryptodome.py:6:17:6:31 | ControlFlowNode for get_certificate | test_cryptodome.py:6:17:6:33 | ControlFlowNode for get_certificate() | provenance | | +| test_cryptodome.py:6:17:6:33 | ControlFlowNode for get_certificate() | test_cryptodome.py:6:5:6:13 | ControlFlowNode for dangerous | provenance | | +| test_cryptodome.py:13:5:13:13 | ControlFlowNode for dangerous | test_cryptodome.py:15:19:15:27 | ControlFlowNode for dangerous | provenance | | +| test_cryptodome.py:13:17:13:28 | ControlFlowNode for get_password | test_cryptodome.py:13:17:13:30 | ControlFlowNode for get_password() | provenance | | +| test_cryptodome.py:13:17:13:30 | ControlFlowNode for get_password() | test_cryptodome.py:13:5:13:13 | ControlFlowNode for dangerous | provenance | | +| test_cryptodome.py:20:5:20:13 | ControlFlowNode for dangerous | test_cryptodome.py:24:19:24:27 | ControlFlowNode for dangerous | provenance | | +| test_cryptodome.py:20:17:20:28 | ControlFlowNode for get_password | test_cryptodome.py:20:17:20:30 | ControlFlowNode for get_password() | provenance | | +| test_cryptodome.py:20:17:20:30 | ControlFlowNode for get_password() | test_cryptodome.py:20:5:20:13 | ControlFlowNode for dangerous | provenance | | +| test_cryptography.py:3:23:3:34 | ControlFlowNode for ImportMember | test_cryptography.py:3:23:3:34 | ControlFlowNode for get_password | provenance | | +| test_cryptography.py:3:23:3:34 | ControlFlowNode for get_password | test_cryptography.py:15:17:15:28 | ControlFlowNode for get_password | provenance | | +| test_cryptography.py:3:23:3:34 | ControlFlowNode for get_password | test_cryptography.py:23:17:23:28 | ControlFlowNode for get_password | provenance | | +| test_cryptography.py:3:37:3:51 | ControlFlowNode for ImportMember | test_cryptography.py:3:37:3:51 | ControlFlowNode for get_certificate | provenance | | +| test_cryptography.py:3:37:3:51 | ControlFlowNode for get_certificate | test_cryptography.py:7:17:7:31 | ControlFlowNode for get_certificate | provenance | | +| test_cryptography.py:7:5:7:13 | ControlFlowNode for dangerous | test_cryptography.py:9:19:9:27 | ControlFlowNode for dangerous | provenance | | +| test_cryptography.py:7:17:7:31 | ControlFlowNode for get_certificate | test_cryptography.py:7:17:7:33 | ControlFlowNode for get_certificate() | provenance | | +| test_cryptography.py:7:17:7:33 | ControlFlowNode for get_certificate() | test_cryptography.py:7:5:7:13 | ControlFlowNode for dangerous | provenance | | +| test_cryptography.py:15:5:15:13 | ControlFlowNode for dangerous | test_cryptography.py:17:19:17:27 | ControlFlowNode for dangerous | provenance | | +| test_cryptography.py:15:17:15:28 | ControlFlowNode for get_password | test_cryptography.py:15:17:15:30 | ControlFlowNode for get_password() | provenance | | +| test_cryptography.py:15:17:15:30 | ControlFlowNode for get_password() | test_cryptography.py:15:5:15:13 | ControlFlowNode for dangerous | provenance | | +| test_cryptography.py:23:5:23:13 | ControlFlowNode for dangerous | test_cryptography.py:27:19:27:27 | ControlFlowNode for dangerous | provenance | | +| test_cryptography.py:23:17:23:28 | ControlFlowNode for get_password | test_cryptography.py:23:17:23:30 | ControlFlowNode for get_password() | provenance | | +| test_cryptography.py:23:17:23:30 | ControlFlowNode for get_password() | test_cryptography.py:23:5:23:13 | ControlFlowNode for dangerous | provenance | | nodes | test_cryptodome.py:2:23:2:34 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | | test_cryptodome.py:2:23:2:34 | ControlFlowNode for get_password | semmle.label | ControlFlowNode for get_password | diff --git a/python/ql/test/query-tests/Security/CWE-502-UnsafeDeserialization/UnsafeDeserialization.expected b/python/ql/test/query-tests/Security/CWE-502-UnsafeDeserialization/UnsafeDeserialization.expected index 2980b6fbb1b..44fb2a8e961 100644 --- a/python/ql/test/query-tests/Security/CWE-502-UnsafeDeserialization/UnsafeDeserialization.expected +++ b/python/ql/test/query-tests/Security/CWE-502-UnsafeDeserialization/UnsafeDeserialization.expected @@ -1,14 +1,14 @@ edges -| unsafe_deserialization.py:8:26:8:32 | ControlFlowNode for ImportMember | unsafe_deserialization.py:8:26:8:32 | ControlFlowNode for request | -| unsafe_deserialization.py:8:26:8:32 | ControlFlowNode for request | unsafe_deserialization.py:14:15:14:21 | ControlFlowNode for request | -| unsafe_deserialization.py:14:5:14:11 | ControlFlowNode for payload | unsafe_deserialization.py:15:18:15:24 | ControlFlowNode for payload | -| unsafe_deserialization.py:14:5:14:11 | ControlFlowNode for payload | unsafe_deserialization.py:16:15:16:21 | ControlFlowNode for payload | -| unsafe_deserialization.py:14:5:14:11 | ControlFlowNode for payload | unsafe_deserialization.py:18:19:18:25 | ControlFlowNode for payload | -| unsafe_deserialization.py:14:5:14:11 | ControlFlowNode for payload | unsafe_deserialization.py:21:16:21:22 | ControlFlowNode for payload | -| unsafe_deserialization.py:14:5:14:11 | ControlFlowNode for payload | unsafe_deserialization.py:24:24:24:30 | ControlFlowNode for payload | -| unsafe_deserialization.py:14:15:14:21 | ControlFlowNode for request | unsafe_deserialization.py:14:15:14:26 | ControlFlowNode for Attribute | -| unsafe_deserialization.py:14:15:14:26 | ControlFlowNode for Attribute | unsafe_deserialization.py:14:15:14:41 | ControlFlowNode for Attribute() | -| unsafe_deserialization.py:14:15:14:41 | ControlFlowNode for Attribute() | unsafe_deserialization.py:14:5:14:11 | ControlFlowNode for payload | +| unsafe_deserialization.py:8:26:8:32 | ControlFlowNode for ImportMember | unsafe_deserialization.py:8:26:8:32 | ControlFlowNode for request | provenance | | +| unsafe_deserialization.py:8:26:8:32 | ControlFlowNode for request | unsafe_deserialization.py:14:15:14:21 | ControlFlowNode for request | provenance | | +| unsafe_deserialization.py:14:5:14:11 | ControlFlowNode for payload | unsafe_deserialization.py:15:18:15:24 | ControlFlowNode for payload | provenance | | +| unsafe_deserialization.py:14:5:14:11 | ControlFlowNode for payload | unsafe_deserialization.py:16:15:16:21 | ControlFlowNode for payload | provenance | | +| unsafe_deserialization.py:14:5:14:11 | ControlFlowNode for payload | unsafe_deserialization.py:18:19:18:25 | ControlFlowNode for payload | provenance | | +| unsafe_deserialization.py:14:5:14:11 | ControlFlowNode for payload | unsafe_deserialization.py:21:16:21:22 | ControlFlowNode for payload | provenance | | +| unsafe_deserialization.py:14:5:14:11 | ControlFlowNode for payload | unsafe_deserialization.py:24:24:24:30 | ControlFlowNode for payload | provenance | | +| unsafe_deserialization.py:14:15:14:21 | ControlFlowNode for request | unsafe_deserialization.py:14:15:14:26 | ControlFlowNode for Attribute | provenance | | +| unsafe_deserialization.py:14:15:14:26 | ControlFlowNode for Attribute | unsafe_deserialization.py:14:15:14:41 | ControlFlowNode for Attribute() | provenance | | +| unsafe_deserialization.py:14:15:14:41 | ControlFlowNode for Attribute() | unsafe_deserialization.py:14:5:14:11 | ControlFlowNode for payload | provenance | | nodes | unsafe_deserialization.py:8:26:8:32 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | | unsafe_deserialization.py:8:26:8:32 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | diff --git a/python/ql/test/query-tests/Security/CWE-601-UrlRedirect/UrlRedirect.expected b/python/ql/test/query-tests/Security/CWE-601-UrlRedirect/UrlRedirect.expected index cff78889b88..d77c850b2a4 100644 --- a/python/ql/test/query-tests/Security/CWE-601-UrlRedirect/UrlRedirect.expected +++ b/python/ql/test/query-tests/Security/CWE-601-UrlRedirect/UrlRedirect.expected @@ -1,72 +1,72 @@ edges -| test.py:1:26:1:32 | ControlFlowNode for ImportMember | test.py:1:26:1:32 | ControlFlowNode for request | -| test.py:1:26:1:32 | ControlFlowNode for request | test.py:7:14:7:20 | ControlFlowNode for request | -| test.py:1:26:1:32 | ControlFlowNode for request | test.py:30:17:30:23 | ControlFlowNode for request | -| test.py:1:26:1:32 | ControlFlowNode for request | test.py:37:17:37:23 | ControlFlowNode for request | -| test.py:1:26:1:32 | ControlFlowNode for request | test.py:44:17:44:23 | ControlFlowNode for request | -| test.py:1:26:1:32 | ControlFlowNode for request | test.py:60:17:60:23 | ControlFlowNode for request | -| test.py:1:26:1:32 | ControlFlowNode for request | test.py:67:17:67:23 | ControlFlowNode for request | -| test.py:1:26:1:32 | ControlFlowNode for request | test.py:74:17:74:23 | ControlFlowNode for request | -| test.py:1:26:1:32 | ControlFlowNode for request | test.py:81:17:81:23 | ControlFlowNode for request | -| test.py:1:26:1:32 | ControlFlowNode for request | test.py:90:17:90:23 | ControlFlowNode for request | -| test.py:1:26:1:32 | ControlFlowNode for request | test.py:111:17:111:23 | ControlFlowNode for request | -| test.py:1:26:1:32 | ControlFlowNode for request | test.py:137:17:137:23 | ControlFlowNode for request | -| test.py:1:26:1:32 | ControlFlowNode for request | test.py:145:17:145:23 | ControlFlowNode for request | -| test.py:7:5:7:10 | ControlFlowNode for target | test.py:8:21:8:26 | ControlFlowNode for target | -| test.py:7:14:7:20 | ControlFlowNode for request | test.py:7:14:7:25 | ControlFlowNode for Attribute | -| test.py:7:14:7:25 | ControlFlowNode for Attribute | test.py:7:14:7:43 | ControlFlowNode for Attribute() | -| test.py:7:14:7:43 | ControlFlowNode for Attribute() | test.py:7:5:7:10 | ControlFlowNode for target | -| test.py:30:5:30:13 | ControlFlowNode for untrusted | test.py:31:5:31:8 | ControlFlowNode for safe | -| test.py:30:17:30:23 | ControlFlowNode for request | test.py:30:17:30:28 | ControlFlowNode for Attribute | -| test.py:30:17:30:28 | ControlFlowNode for Attribute | test.py:30:17:30:46 | ControlFlowNode for Attribute() | -| test.py:30:17:30:46 | ControlFlowNode for Attribute() | test.py:30:5:30:13 | ControlFlowNode for untrusted | -| test.py:31:5:31:8 | ControlFlowNode for safe | test.py:32:21:32:24 | ControlFlowNode for safe | -| test.py:37:5:37:13 | ControlFlowNode for untrusted | test.py:38:5:38:8 | ControlFlowNode for safe | -| test.py:37:17:37:23 | ControlFlowNode for request | test.py:37:17:37:28 | ControlFlowNode for Attribute | -| test.py:37:17:37:28 | ControlFlowNode for Attribute | test.py:37:17:37:46 | ControlFlowNode for Attribute() | -| test.py:37:17:37:46 | ControlFlowNode for Attribute() | test.py:37:5:37:13 | ControlFlowNode for untrusted | -| test.py:38:5:38:8 | ControlFlowNode for safe | test.py:39:21:39:24 | ControlFlowNode for safe | -| test.py:44:5:44:13 | ControlFlowNode for untrusted | test.py:45:5:45:8 | ControlFlowNode for safe | -| test.py:44:17:44:23 | ControlFlowNode for request | test.py:44:17:44:28 | ControlFlowNode for Attribute | -| test.py:44:17:44:28 | ControlFlowNode for Attribute | test.py:44:17:44:46 | ControlFlowNode for Attribute() | -| test.py:44:17:44:46 | ControlFlowNode for Attribute() | test.py:44:5:44:13 | ControlFlowNode for untrusted | -| test.py:45:5:45:8 | ControlFlowNode for safe | test.py:46:21:46:24 | ControlFlowNode for safe | -| test.py:60:5:60:13 | ControlFlowNode for untrusted | test.py:61:5:61:10 | ControlFlowNode for unsafe | -| test.py:60:17:60:23 | ControlFlowNode for request | test.py:60:17:60:28 | ControlFlowNode for Attribute | -| test.py:60:17:60:28 | ControlFlowNode for Attribute | test.py:60:17:60:46 | ControlFlowNode for Attribute() | -| test.py:60:17:60:46 | ControlFlowNode for Attribute() | test.py:60:5:60:13 | ControlFlowNode for untrusted | -| test.py:61:5:61:10 | ControlFlowNode for unsafe | test.py:62:21:62:26 | ControlFlowNode for unsafe | -| test.py:67:5:67:13 | ControlFlowNode for untrusted | test.py:68:5:68:10 | ControlFlowNode for unsafe | -| test.py:67:17:67:23 | ControlFlowNode for request | test.py:67:17:67:28 | ControlFlowNode for Attribute | -| test.py:67:17:67:28 | ControlFlowNode for Attribute | test.py:67:17:67:46 | ControlFlowNode for Attribute() | -| test.py:67:17:67:46 | ControlFlowNode for Attribute() | test.py:67:5:67:13 | ControlFlowNode for untrusted | -| test.py:68:5:68:10 | ControlFlowNode for unsafe | test.py:69:21:69:26 | ControlFlowNode for unsafe | -| test.py:74:5:74:13 | ControlFlowNode for untrusted | test.py:75:5:75:10 | ControlFlowNode for unsafe | -| test.py:74:17:74:23 | ControlFlowNode for request | test.py:74:17:74:28 | ControlFlowNode for Attribute | -| test.py:74:17:74:28 | ControlFlowNode for Attribute | test.py:74:17:74:46 | ControlFlowNode for Attribute() | -| test.py:74:17:74:46 | ControlFlowNode for Attribute() | test.py:74:5:74:13 | ControlFlowNode for untrusted | -| test.py:75:5:75:10 | ControlFlowNode for unsafe | test.py:76:21:76:26 | ControlFlowNode for unsafe | -| test.py:81:5:81:13 | ControlFlowNode for untrusted | test.py:82:5:82:10 | ControlFlowNode for unsafe | -| test.py:81:17:81:23 | ControlFlowNode for request | test.py:81:17:81:28 | ControlFlowNode for Attribute | -| test.py:81:17:81:28 | ControlFlowNode for Attribute | test.py:81:17:81:46 | ControlFlowNode for Attribute() | -| test.py:81:17:81:46 | ControlFlowNode for Attribute() | test.py:81:5:81:13 | ControlFlowNode for untrusted | -| test.py:82:5:82:10 | ControlFlowNode for unsafe | test.py:83:21:83:26 | ControlFlowNode for unsafe | -| test.py:90:5:90:13 | ControlFlowNode for untrusted | test.py:93:18:93:26 | ControlFlowNode for untrusted | -| test.py:90:17:90:23 | ControlFlowNode for request | test.py:90:17:90:28 | ControlFlowNode for Attribute | -| test.py:90:17:90:28 | ControlFlowNode for Attribute | test.py:90:17:90:46 | ControlFlowNode for Attribute() | -| test.py:90:17:90:46 | ControlFlowNode for Attribute() | test.py:90:5:90:13 | ControlFlowNode for untrusted | -| test.py:111:5:111:13 | ControlFlowNode for untrusted | test.py:114:25:114:33 | ControlFlowNode for untrusted | -| test.py:111:17:111:23 | ControlFlowNode for request | test.py:111:17:111:28 | ControlFlowNode for Attribute | -| test.py:111:17:111:28 | ControlFlowNode for Attribute | test.py:111:17:111:46 | ControlFlowNode for Attribute() | -| test.py:111:17:111:46 | ControlFlowNode for Attribute() | test.py:111:5:111:13 | ControlFlowNode for untrusted | -| test.py:137:5:137:13 | ControlFlowNode for untrusted | test.py:140:25:140:33 | ControlFlowNode for untrusted | -| test.py:137:17:137:23 | ControlFlowNode for request | test.py:137:17:137:28 | ControlFlowNode for Attribute | -| test.py:137:17:137:28 | ControlFlowNode for Attribute | test.py:137:17:137:46 | ControlFlowNode for Attribute() | -| test.py:137:17:137:46 | ControlFlowNode for Attribute() | test.py:137:5:137:13 | ControlFlowNode for untrusted | -| test.py:145:5:145:13 | ControlFlowNode for untrusted | test.py:148:25:148:33 | ControlFlowNode for untrusted | -| test.py:145:17:145:23 | ControlFlowNode for request | test.py:145:17:145:28 | ControlFlowNode for Attribute | -| test.py:145:17:145:28 | ControlFlowNode for Attribute | test.py:145:17:145:46 | ControlFlowNode for Attribute() | -| test.py:145:17:145:46 | ControlFlowNode for Attribute() | test.py:145:5:145:13 | ControlFlowNode for untrusted | +| test.py:1:26:1:32 | ControlFlowNode for ImportMember | test.py:1:26:1:32 | ControlFlowNode for request | provenance | | +| test.py:1:26:1:32 | ControlFlowNode for request | test.py:7:14:7:20 | ControlFlowNode for request | provenance | | +| test.py:1:26:1:32 | ControlFlowNode for request | test.py:30:17:30:23 | ControlFlowNode for request | provenance | | +| test.py:1:26:1:32 | ControlFlowNode for request | test.py:37:17:37:23 | ControlFlowNode for request | provenance | | +| test.py:1:26:1:32 | ControlFlowNode for request | test.py:44:17:44:23 | ControlFlowNode for request | provenance | | +| test.py:1:26:1:32 | ControlFlowNode for request | test.py:60:17:60:23 | ControlFlowNode for request | provenance | | +| test.py:1:26:1:32 | ControlFlowNode for request | test.py:67:17:67:23 | ControlFlowNode for request | provenance | | +| test.py:1:26:1:32 | ControlFlowNode for request | test.py:74:17:74:23 | ControlFlowNode for request | provenance | | +| test.py:1:26:1:32 | ControlFlowNode for request | test.py:81:17:81:23 | ControlFlowNode for request | provenance | | +| test.py:1:26:1:32 | ControlFlowNode for request | test.py:90:17:90:23 | ControlFlowNode for request | provenance | | +| test.py:1:26:1:32 | ControlFlowNode for request | test.py:111:17:111:23 | ControlFlowNode for request | provenance | | +| test.py:1:26:1:32 | ControlFlowNode for request | test.py:137:17:137:23 | ControlFlowNode for request | provenance | | +| test.py:1:26:1:32 | ControlFlowNode for request | test.py:145:17:145:23 | ControlFlowNode for request | provenance | | +| test.py:7:5:7:10 | ControlFlowNode for target | test.py:8:21:8:26 | ControlFlowNode for target | provenance | | +| test.py:7:14:7:20 | ControlFlowNode for request | test.py:7:14:7:25 | ControlFlowNode for Attribute | provenance | | +| test.py:7:14:7:25 | ControlFlowNode for Attribute | test.py:7:14:7:43 | ControlFlowNode for Attribute() | provenance | | +| test.py:7:14:7:43 | ControlFlowNode for Attribute() | test.py:7:5:7:10 | ControlFlowNode for target | provenance | | +| test.py:30:5:30:13 | ControlFlowNode for untrusted | test.py:31:5:31:8 | ControlFlowNode for safe | provenance | | +| test.py:30:17:30:23 | ControlFlowNode for request | test.py:30:17:30:28 | ControlFlowNode for Attribute | provenance | | +| test.py:30:17:30:28 | ControlFlowNode for Attribute | test.py:30:17:30:46 | ControlFlowNode for Attribute() | provenance | | +| test.py:30:17:30:46 | ControlFlowNode for Attribute() | test.py:30:5:30:13 | ControlFlowNode for untrusted | provenance | | +| test.py:31:5:31:8 | ControlFlowNode for safe | test.py:32:21:32:24 | ControlFlowNode for safe | provenance | | +| test.py:37:5:37:13 | ControlFlowNode for untrusted | test.py:38:5:38:8 | ControlFlowNode for safe | provenance | | +| test.py:37:17:37:23 | ControlFlowNode for request | test.py:37:17:37:28 | ControlFlowNode for Attribute | provenance | | +| test.py:37:17:37:28 | ControlFlowNode for Attribute | test.py:37:17:37:46 | ControlFlowNode for Attribute() | provenance | | +| test.py:37:17:37:46 | ControlFlowNode for Attribute() | test.py:37:5:37:13 | ControlFlowNode for untrusted | provenance | | +| test.py:38:5:38:8 | ControlFlowNode for safe | test.py:39:21:39:24 | ControlFlowNode for safe | provenance | | +| test.py:44:5:44:13 | ControlFlowNode for untrusted | test.py:45:5:45:8 | ControlFlowNode for safe | provenance | | +| test.py:44:17:44:23 | ControlFlowNode for request | test.py:44:17:44:28 | ControlFlowNode for Attribute | provenance | | +| test.py:44:17:44:28 | ControlFlowNode for Attribute | test.py:44:17:44:46 | ControlFlowNode for Attribute() | provenance | | +| test.py:44:17:44:46 | ControlFlowNode for Attribute() | test.py:44:5:44:13 | ControlFlowNode for untrusted | provenance | | +| test.py:45:5:45:8 | ControlFlowNode for safe | test.py:46:21:46:24 | ControlFlowNode for safe | provenance | | +| test.py:60:5:60:13 | ControlFlowNode for untrusted | test.py:61:5:61:10 | ControlFlowNode for unsafe | provenance | | +| test.py:60:17:60:23 | ControlFlowNode for request | test.py:60:17:60:28 | ControlFlowNode for Attribute | provenance | | +| test.py:60:17:60:28 | ControlFlowNode for Attribute | test.py:60:17:60:46 | ControlFlowNode for Attribute() | provenance | | +| test.py:60:17:60:46 | ControlFlowNode for Attribute() | test.py:60:5:60:13 | ControlFlowNode for untrusted | provenance | | +| test.py:61:5:61:10 | ControlFlowNode for unsafe | test.py:62:21:62:26 | ControlFlowNode for unsafe | provenance | | +| test.py:67:5:67:13 | ControlFlowNode for untrusted | test.py:68:5:68:10 | ControlFlowNode for unsafe | provenance | | +| test.py:67:17:67:23 | ControlFlowNode for request | test.py:67:17:67:28 | ControlFlowNode for Attribute | provenance | | +| test.py:67:17:67:28 | ControlFlowNode for Attribute | test.py:67:17:67:46 | ControlFlowNode for Attribute() | provenance | | +| test.py:67:17:67:46 | ControlFlowNode for Attribute() | test.py:67:5:67:13 | ControlFlowNode for untrusted | provenance | | +| test.py:68:5:68:10 | ControlFlowNode for unsafe | test.py:69:21:69:26 | ControlFlowNode for unsafe | provenance | | +| test.py:74:5:74:13 | ControlFlowNode for untrusted | test.py:75:5:75:10 | ControlFlowNode for unsafe | provenance | | +| test.py:74:17:74:23 | ControlFlowNode for request | test.py:74:17:74:28 | ControlFlowNode for Attribute | provenance | | +| test.py:74:17:74:28 | ControlFlowNode for Attribute | test.py:74:17:74:46 | ControlFlowNode for Attribute() | provenance | | +| test.py:74:17:74:46 | ControlFlowNode for Attribute() | test.py:74:5:74:13 | ControlFlowNode for untrusted | provenance | | +| test.py:75:5:75:10 | ControlFlowNode for unsafe | test.py:76:21:76:26 | ControlFlowNode for unsafe | provenance | | +| test.py:81:5:81:13 | ControlFlowNode for untrusted | test.py:82:5:82:10 | ControlFlowNode for unsafe | provenance | | +| test.py:81:17:81:23 | ControlFlowNode for request | test.py:81:17:81:28 | ControlFlowNode for Attribute | provenance | | +| test.py:81:17:81:28 | ControlFlowNode for Attribute | test.py:81:17:81:46 | ControlFlowNode for Attribute() | provenance | | +| test.py:81:17:81:46 | ControlFlowNode for Attribute() | test.py:81:5:81:13 | ControlFlowNode for untrusted | provenance | | +| test.py:82:5:82:10 | ControlFlowNode for unsafe | test.py:83:21:83:26 | ControlFlowNode for unsafe | provenance | | +| test.py:90:5:90:13 | ControlFlowNode for untrusted | test.py:93:18:93:26 | ControlFlowNode for untrusted | provenance | | +| test.py:90:17:90:23 | ControlFlowNode for request | test.py:90:17:90:28 | ControlFlowNode for Attribute | provenance | | +| test.py:90:17:90:28 | ControlFlowNode for Attribute | test.py:90:17:90:46 | ControlFlowNode for Attribute() | provenance | | +| test.py:90:17:90:46 | ControlFlowNode for Attribute() | test.py:90:5:90:13 | ControlFlowNode for untrusted | provenance | | +| test.py:111:5:111:13 | ControlFlowNode for untrusted | test.py:114:25:114:33 | ControlFlowNode for untrusted | provenance | | +| test.py:111:17:111:23 | ControlFlowNode for request | test.py:111:17:111:28 | ControlFlowNode for Attribute | provenance | | +| test.py:111:17:111:28 | ControlFlowNode for Attribute | test.py:111:17:111:46 | ControlFlowNode for Attribute() | provenance | | +| test.py:111:17:111:46 | ControlFlowNode for Attribute() | test.py:111:5:111:13 | ControlFlowNode for untrusted | provenance | | +| test.py:137:5:137:13 | ControlFlowNode for untrusted | test.py:140:25:140:33 | ControlFlowNode for untrusted | provenance | | +| test.py:137:17:137:23 | ControlFlowNode for request | test.py:137:17:137:28 | ControlFlowNode for Attribute | provenance | | +| test.py:137:17:137:28 | ControlFlowNode for Attribute | test.py:137:17:137:46 | ControlFlowNode for Attribute() | provenance | | +| test.py:137:17:137:46 | ControlFlowNode for Attribute() | test.py:137:5:137:13 | ControlFlowNode for untrusted | provenance | | +| test.py:145:5:145:13 | ControlFlowNode for untrusted | test.py:148:25:148:33 | ControlFlowNode for untrusted | provenance | | +| test.py:145:17:145:23 | ControlFlowNode for request | test.py:145:17:145:28 | ControlFlowNode for Attribute | provenance | | +| test.py:145:17:145:28 | ControlFlowNode for Attribute | test.py:145:17:145:46 | ControlFlowNode for Attribute() | provenance | | +| test.py:145:17:145:46 | ControlFlowNode for Attribute() | test.py:145:5:145:13 | ControlFlowNode for untrusted | provenance | | nodes | test.py:1:26:1:32 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | | test.py:1:26:1:32 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | diff --git a/python/ql/test/query-tests/Security/CWE-611-Xxe/Xxe.expected b/python/ql/test/query-tests/Security/CWE-611-Xxe/Xxe.expected index 6d1b03c5c37..9f37afb885e 100644 --- a/python/ql/test/query-tests/Security/CWE-611-Xxe/Xxe.expected +++ b/python/ql/test/query-tests/Security/CWE-611-Xxe/Xxe.expected @@ -1,11 +1,11 @@ edges -| test.py:1:26:1:32 | ControlFlowNode for ImportMember | test.py:1:26:1:32 | ControlFlowNode for request | -| test.py:1:26:1:32 | ControlFlowNode for request | test.py:9:19:9:25 | ControlFlowNode for request | -| test.py:1:26:1:32 | ControlFlowNode for request | test.py:20:19:20:25 | ControlFlowNode for request | -| test.py:9:5:9:15 | ControlFlowNode for xml_content | test.py:10:34:10:44 | ControlFlowNode for xml_content | -| test.py:9:19:9:25 | ControlFlowNode for request | test.py:9:5:9:15 | ControlFlowNode for xml_content | -| test.py:20:5:20:15 | ControlFlowNode for xml_content | test.py:31:34:31:44 | ControlFlowNode for xml_content | -| test.py:20:19:20:25 | ControlFlowNode for request | test.py:20:5:20:15 | ControlFlowNode for xml_content | +| test.py:1:26:1:32 | ControlFlowNode for ImportMember | test.py:1:26:1:32 | ControlFlowNode for request | provenance | | +| test.py:1:26:1:32 | ControlFlowNode for request | test.py:9:19:9:25 | ControlFlowNode for request | provenance | | +| test.py:1:26:1:32 | ControlFlowNode for request | test.py:20:19:20:25 | ControlFlowNode for request | provenance | | +| test.py:9:5:9:15 | ControlFlowNode for xml_content | test.py:10:34:10:44 | ControlFlowNode for xml_content | provenance | | +| test.py:9:19:9:25 | ControlFlowNode for request | test.py:9:5:9:15 | ControlFlowNode for xml_content | provenance | | +| test.py:20:5:20:15 | ControlFlowNode for xml_content | test.py:31:34:31:44 | ControlFlowNode for xml_content | provenance | | +| test.py:20:19:20:25 | ControlFlowNode for request | test.py:20:5:20:15 | ControlFlowNode for xml_content | provenance | | nodes | test.py:1:26:1:32 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | | test.py:1:26:1:32 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | diff --git a/python/ql/test/query-tests/Security/CWE-643-XPathInjection/XpathInjection.expected b/python/ql/test/query-tests/Security/CWE-643-XPathInjection/XpathInjection.expected index 0e8e826b7a7..efd2576dd71 100644 --- a/python/ql/test/query-tests/Security/CWE-643-XPathInjection/XpathInjection.expected +++ b/python/ql/test/query-tests/Security/CWE-643-XPathInjection/XpathInjection.expected @@ -1,32 +1,32 @@ edges -| xpathBad.py:9:7:9:13 | ControlFlowNode for request | xpathBad.py:10:5:10:9 | ControlFlowNode for value | -| xpathBad.py:10:5:10:9 | ControlFlowNode for value | xpathBad.py:13:20:13:43 | ControlFlowNode for BinaryExpr | -| xpathFlow.py:2:26:2:32 | ControlFlowNode for ImportMember | xpathFlow.py:2:26:2:32 | ControlFlowNode for request | -| xpathFlow.py:2:26:2:32 | ControlFlowNode for request | xpathFlow.py:11:18:11:24 | ControlFlowNode for request | -| xpathFlow.py:2:26:2:32 | ControlFlowNode for request | xpathFlow.py:20:18:20:24 | ControlFlowNode for request | -| xpathFlow.py:2:26:2:32 | ControlFlowNode for request | xpathFlow.py:30:18:30:24 | ControlFlowNode for request | -| xpathFlow.py:2:26:2:32 | ControlFlowNode for request | xpathFlow.py:39:18:39:24 | ControlFlowNode for request | -| xpathFlow.py:2:26:2:32 | ControlFlowNode for request | xpathFlow.py:47:18:47:24 | ControlFlowNode for request | -| xpathFlow.py:11:5:11:14 | ControlFlowNode for xpathQuery | xpathFlow.py:14:20:14:29 | ControlFlowNode for xpathQuery | -| xpathFlow.py:11:18:11:24 | ControlFlowNode for request | xpathFlow.py:11:18:11:29 | ControlFlowNode for Attribute | -| xpathFlow.py:11:18:11:29 | ControlFlowNode for Attribute | xpathFlow.py:11:18:11:44 | ControlFlowNode for Attribute() | -| xpathFlow.py:11:18:11:44 | ControlFlowNode for Attribute() | xpathFlow.py:11:5:11:14 | ControlFlowNode for xpathQuery | -| xpathFlow.py:20:5:20:14 | ControlFlowNode for xpathQuery | xpathFlow.py:23:29:23:38 | ControlFlowNode for xpathQuery | -| xpathFlow.py:20:18:20:24 | ControlFlowNode for request | xpathFlow.py:20:18:20:29 | ControlFlowNode for Attribute | -| xpathFlow.py:20:18:20:29 | ControlFlowNode for Attribute | xpathFlow.py:20:18:20:44 | ControlFlowNode for Attribute() | -| xpathFlow.py:20:18:20:44 | ControlFlowNode for Attribute() | xpathFlow.py:20:5:20:14 | ControlFlowNode for xpathQuery | -| xpathFlow.py:30:5:30:14 | ControlFlowNode for xpathQuery | xpathFlow.py:32:29:32:38 | ControlFlowNode for xpathQuery | -| xpathFlow.py:30:18:30:24 | ControlFlowNode for request | xpathFlow.py:30:18:30:29 | ControlFlowNode for Attribute | -| xpathFlow.py:30:18:30:29 | ControlFlowNode for Attribute | xpathFlow.py:30:18:30:44 | ControlFlowNode for Attribute() | -| xpathFlow.py:30:18:30:44 | ControlFlowNode for Attribute() | xpathFlow.py:30:5:30:14 | ControlFlowNode for xpathQuery | -| xpathFlow.py:39:5:39:14 | ControlFlowNode for xpathQuery | xpathFlow.py:41:31:41:40 | ControlFlowNode for xpathQuery | -| xpathFlow.py:39:18:39:24 | ControlFlowNode for request | xpathFlow.py:39:18:39:29 | ControlFlowNode for Attribute | -| xpathFlow.py:39:18:39:29 | ControlFlowNode for Attribute | xpathFlow.py:39:18:39:44 | ControlFlowNode for Attribute() | -| xpathFlow.py:39:18:39:44 | ControlFlowNode for Attribute() | xpathFlow.py:39:5:39:14 | ControlFlowNode for xpathQuery | -| xpathFlow.py:47:5:47:14 | ControlFlowNode for xpathQuery | xpathFlow.py:49:29:49:38 | ControlFlowNode for xpathQuery | -| xpathFlow.py:47:18:47:24 | ControlFlowNode for request | xpathFlow.py:47:18:47:29 | ControlFlowNode for Attribute | -| xpathFlow.py:47:18:47:29 | ControlFlowNode for Attribute | xpathFlow.py:47:18:47:44 | ControlFlowNode for Attribute() | -| xpathFlow.py:47:18:47:44 | ControlFlowNode for Attribute() | xpathFlow.py:47:5:47:14 | ControlFlowNode for xpathQuery | +| xpathBad.py:9:7:9:13 | ControlFlowNode for request | xpathBad.py:10:5:10:9 | ControlFlowNode for value | provenance | | +| xpathBad.py:10:5:10:9 | ControlFlowNode for value | xpathBad.py:13:20:13:43 | ControlFlowNode for BinaryExpr | provenance | | +| xpathFlow.py:2:26:2:32 | ControlFlowNode for ImportMember | xpathFlow.py:2:26:2:32 | ControlFlowNode for request | provenance | | +| xpathFlow.py:2:26:2:32 | ControlFlowNode for request | xpathFlow.py:11:18:11:24 | ControlFlowNode for request | provenance | | +| xpathFlow.py:2:26:2:32 | ControlFlowNode for request | xpathFlow.py:20:18:20:24 | ControlFlowNode for request | provenance | | +| xpathFlow.py:2:26:2:32 | ControlFlowNode for request | xpathFlow.py:30:18:30:24 | ControlFlowNode for request | provenance | | +| xpathFlow.py:2:26:2:32 | ControlFlowNode for request | xpathFlow.py:39:18:39:24 | ControlFlowNode for request | provenance | | +| xpathFlow.py:2:26:2:32 | ControlFlowNode for request | xpathFlow.py:47:18:47:24 | ControlFlowNode for request | provenance | | +| xpathFlow.py:11:5:11:14 | ControlFlowNode for xpathQuery | xpathFlow.py:14:20:14:29 | ControlFlowNode for xpathQuery | provenance | | +| xpathFlow.py:11:18:11:24 | ControlFlowNode for request | xpathFlow.py:11:18:11:29 | ControlFlowNode for Attribute | provenance | | +| xpathFlow.py:11:18:11:29 | ControlFlowNode for Attribute | xpathFlow.py:11:18:11:44 | ControlFlowNode for Attribute() | provenance | | +| xpathFlow.py:11:18:11:44 | ControlFlowNode for Attribute() | xpathFlow.py:11:5:11:14 | ControlFlowNode for xpathQuery | provenance | | +| xpathFlow.py:20:5:20:14 | ControlFlowNode for xpathQuery | xpathFlow.py:23:29:23:38 | ControlFlowNode for xpathQuery | provenance | | +| xpathFlow.py:20:18:20:24 | ControlFlowNode for request | xpathFlow.py:20:18:20:29 | ControlFlowNode for Attribute | provenance | | +| xpathFlow.py:20:18:20:29 | ControlFlowNode for Attribute | xpathFlow.py:20:18:20:44 | ControlFlowNode for Attribute() | provenance | | +| xpathFlow.py:20:18:20:44 | ControlFlowNode for Attribute() | xpathFlow.py:20:5:20:14 | ControlFlowNode for xpathQuery | provenance | | +| xpathFlow.py:30:5:30:14 | ControlFlowNode for xpathQuery | xpathFlow.py:32:29:32:38 | ControlFlowNode for xpathQuery | provenance | | +| xpathFlow.py:30:18:30:24 | ControlFlowNode for request | xpathFlow.py:30:18:30:29 | ControlFlowNode for Attribute | provenance | | +| xpathFlow.py:30:18:30:29 | ControlFlowNode for Attribute | xpathFlow.py:30:18:30:44 | ControlFlowNode for Attribute() | provenance | | +| xpathFlow.py:30:18:30:44 | ControlFlowNode for Attribute() | xpathFlow.py:30:5:30:14 | ControlFlowNode for xpathQuery | provenance | | +| xpathFlow.py:39:5:39:14 | ControlFlowNode for xpathQuery | xpathFlow.py:41:31:41:40 | ControlFlowNode for xpathQuery | provenance | | +| xpathFlow.py:39:18:39:24 | ControlFlowNode for request | xpathFlow.py:39:18:39:29 | ControlFlowNode for Attribute | provenance | | +| xpathFlow.py:39:18:39:29 | ControlFlowNode for Attribute | xpathFlow.py:39:18:39:44 | ControlFlowNode for Attribute() | provenance | | +| xpathFlow.py:39:18:39:44 | ControlFlowNode for Attribute() | xpathFlow.py:39:5:39:14 | ControlFlowNode for xpathQuery | provenance | | +| xpathFlow.py:47:5:47:14 | ControlFlowNode for xpathQuery | xpathFlow.py:49:29:49:38 | ControlFlowNode for xpathQuery | provenance | | +| xpathFlow.py:47:18:47:24 | ControlFlowNode for request | xpathFlow.py:47:18:47:29 | ControlFlowNode for Attribute | provenance | | +| xpathFlow.py:47:18:47:29 | ControlFlowNode for Attribute | xpathFlow.py:47:18:47:44 | ControlFlowNode for Attribute() | provenance | | +| xpathFlow.py:47:18:47:44 | ControlFlowNode for Attribute() | xpathFlow.py:47:5:47:14 | ControlFlowNode for xpathQuery | provenance | | nodes | xpathBad.py:9:7:9:13 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | xpathBad.py:10:5:10:9 | ControlFlowNode for value | semmle.label | ControlFlowNode for value | diff --git a/python/ql/test/query-tests/Security/CWE-730-PolynomialReDoS/PolynomialReDoS.expected b/python/ql/test/query-tests/Security/CWE-730-PolynomialReDoS/PolynomialReDoS.expected index d26a768c1a6..6a8e36aef70 100644 --- a/python/ql/test/query-tests/Security/CWE-730-PolynomialReDoS/PolynomialReDoS.expected +++ b/python/ql/test/query-tests/Security/CWE-730-PolynomialReDoS/PolynomialReDoS.expected @@ -1,16 +1,16 @@ edges -| test.py:2:26:2:32 | ControlFlowNode for ImportMember | test.py:2:26:2:32 | ControlFlowNode for request | -| test.py:2:26:2:32 | ControlFlowNode for request | test.py:7:12:7:18 | ControlFlowNode for request | -| test.py:7:5:7:8 | ControlFlowNode for text | test.py:8:30:8:33 | ControlFlowNode for text | -| test.py:7:5:7:8 | ControlFlowNode for text | test.py:9:32:9:35 | ControlFlowNode for text | -| test.py:7:5:7:8 | ControlFlowNode for text | test.py:12:17:12:20 | ControlFlowNode for text | -| test.py:7:5:7:8 | ControlFlowNode for text | test.py:18:28:18:31 | ControlFlowNode for text | -| test.py:7:5:7:8 | ControlFlowNode for text | test.py:21:18:21:21 | ControlFlowNode for text | -| test.py:7:12:7:18 | ControlFlowNode for request | test.py:7:12:7:23 | ControlFlowNode for Attribute | -| test.py:7:12:7:23 | ControlFlowNode for Attribute | test.py:7:12:7:35 | ControlFlowNode for Attribute() | -| test.py:7:12:7:35 | ControlFlowNode for Attribute() | test.py:7:5:7:8 | ControlFlowNode for text | -| test.py:14:33:14:39 | ControlFlowNode for my_text | test.py:16:24:16:30 | ControlFlowNode for my_text | -| test.py:18:28:18:31 | ControlFlowNode for text | test.py:14:33:14:39 | ControlFlowNode for my_text | +| test.py:2:26:2:32 | ControlFlowNode for ImportMember | test.py:2:26:2:32 | ControlFlowNode for request | provenance | | +| test.py:2:26:2:32 | ControlFlowNode for request | test.py:7:12:7:18 | ControlFlowNode for request | provenance | | +| test.py:7:5:7:8 | ControlFlowNode for text | test.py:8:30:8:33 | ControlFlowNode for text | provenance | | +| test.py:7:5:7:8 | ControlFlowNode for text | test.py:9:32:9:35 | ControlFlowNode for text | provenance | | +| test.py:7:5:7:8 | ControlFlowNode for text | test.py:12:17:12:20 | ControlFlowNode for text | provenance | | +| test.py:7:5:7:8 | ControlFlowNode for text | test.py:18:28:18:31 | ControlFlowNode for text | provenance | | +| test.py:7:5:7:8 | ControlFlowNode for text | test.py:21:18:21:21 | ControlFlowNode for text | provenance | | +| test.py:7:12:7:18 | ControlFlowNode for request | test.py:7:12:7:23 | ControlFlowNode for Attribute | provenance | | +| test.py:7:12:7:23 | ControlFlowNode for Attribute | test.py:7:12:7:35 | ControlFlowNode for Attribute() | provenance | | +| test.py:7:12:7:35 | ControlFlowNode for Attribute() | test.py:7:5:7:8 | ControlFlowNode for text | provenance | | +| test.py:14:33:14:39 | ControlFlowNode for my_text | test.py:16:24:16:30 | ControlFlowNode for my_text | provenance | | +| test.py:18:28:18:31 | ControlFlowNode for text | test.py:14:33:14:39 | ControlFlowNode for my_text | provenance | | nodes | test.py:2:26:2:32 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | | test.py:2:26:2:32 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | diff --git a/python/ql/test/query-tests/Security/CWE-730-RegexInjection/RegexInjection.expected b/python/ql/test/query-tests/Security/CWE-730-RegexInjection/RegexInjection.expected index 12913198622..48bbda48416 100644 --- a/python/ql/test/query-tests/Security/CWE-730-RegexInjection/RegexInjection.expected +++ b/python/ql/test/query-tests/Security/CWE-730-RegexInjection/RegexInjection.expected @@ -1,14 +1,14 @@ edges -| re_bad.py:1:19:1:25 | ControlFlowNode for ImportMember | re_bad.py:1:19:1:25 | ControlFlowNode for request | -| re_bad.py:1:19:1:25 | ControlFlowNode for request | re_bad.py:13:22:13:28 | ControlFlowNode for request | -| re_bad.py:1:19:1:25 | ControlFlowNode for request | re_bad.py:24:22:24:28 | ControlFlowNode for request | -| re_bad.py:1:19:1:25 | ControlFlowNode for request | re_bad.py:36:22:36:28 | ControlFlowNode for request | -| re_bad.py:13:5:13:18 | ControlFlowNode for unsafe_pattern | re_bad.py:14:15:14:28 | ControlFlowNode for unsafe_pattern | -| re_bad.py:13:22:13:28 | ControlFlowNode for request | re_bad.py:13:5:13:18 | ControlFlowNode for unsafe_pattern | -| re_bad.py:24:5:24:18 | ControlFlowNode for unsafe_pattern | re_bad.py:25:35:25:48 | ControlFlowNode for unsafe_pattern | -| re_bad.py:24:22:24:28 | ControlFlowNode for request | re_bad.py:24:5:24:18 | ControlFlowNode for unsafe_pattern | -| re_bad.py:36:5:36:18 | ControlFlowNode for unsafe_pattern | re_bad.py:37:16:37:29 | ControlFlowNode for unsafe_pattern | -| re_bad.py:36:22:36:28 | ControlFlowNode for request | re_bad.py:36:5:36:18 | ControlFlowNode for unsafe_pattern | +| re_bad.py:1:19:1:25 | ControlFlowNode for ImportMember | re_bad.py:1:19:1:25 | ControlFlowNode for request | provenance | | +| re_bad.py:1:19:1:25 | ControlFlowNode for request | re_bad.py:13:22:13:28 | ControlFlowNode for request | provenance | | +| re_bad.py:1:19:1:25 | ControlFlowNode for request | re_bad.py:24:22:24:28 | ControlFlowNode for request | provenance | | +| re_bad.py:1:19:1:25 | ControlFlowNode for request | re_bad.py:36:22:36:28 | ControlFlowNode for request | provenance | | +| re_bad.py:13:5:13:18 | ControlFlowNode for unsafe_pattern | re_bad.py:14:15:14:28 | ControlFlowNode for unsafe_pattern | provenance | | +| re_bad.py:13:22:13:28 | ControlFlowNode for request | re_bad.py:13:5:13:18 | ControlFlowNode for unsafe_pattern | provenance | | +| re_bad.py:24:5:24:18 | ControlFlowNode for unsafe_pattern | re_bad.py:25:35:25:48 | ControlFlowNode for unsafe_pattern | provenance | | +| re_bad.py:24:22:24:28 | ControlFlowNode for request | re_bad.py:24:5:24:18 | ControlFlowNode for unsafe_pattern | provenance | | +| re_bad.py:36:5:36:18 | ControlFlowNode for unsafe_pattern | re_bad.py:37:16:37:29 | ControlFlowNode for unsafe_pattern | provenance | | +| re_bad.py:36:22:36:28 | ControlFlowNode for request | re_bad.py:36:5:36:18 | ControlFlowNode for unsafe_pattern | provenance | | nodes | re_bad.py:1:19:1:25 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | | re_bad.py:1:19:1:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | diff --git a/python/ql/test/query-tests/Security/CWE-776-XmlBomb/XmlBomb.expected b/python/ql/test/query-tests/Security/CWE-776-XmlBomb/XmlBomb.expected index 59a175e8ae6..944856ca0db 100644 --- a/python/ql/test/query-tests/Security/CWE-776-XmlBomb/XmlBomb.expected +++ b/python/ql/test/query-tests/Security/CWE-776-XmlBomb/XmlBomb.expected @@ -1,8 +1,8 @@ edges -| test.py:1:26:1:32 | ControlFlowNode for ImportMember | test.py:1:26:1:32 | ControlFlowNode for request | -| test.py:1:26:1:32 | ControlFlowNode for request | test.py:19:19:19:25 | ControlFlowNode for request | -| test.py:19:5:19:15 | ControlFlowNode for xml_content | test.py:30:34:30:44 | ControlFlowNode for xml_content | -| test.py:19:19:19:25 | ControlFlowNode for request | test.py:19:5:19:15 | ControlFlowNode for xml_content | +| test.py:1:26:1:32 | ControlFlowNode for ImportMember | test.py:1:26:1:32 | ControlFlowNode for request | provenance | | +| test.py:1:26:1:32 | ControlFlowNode for request | test.py:19:19:19:25 | ControlFlowNode for request | provenance | | +| test.py:19:5:19:15 | ControlFlowNode for xml_content | test.py:30:34:30:44 | ControlFlowNode for xml_content | provenance | | +| test.py:19:19:19:25 | ControlFlowNode for request | test.py:19:5:19:15 | ControlFlowNode for xml_content | provenance | | nodes | test.py:1:26:1:32 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | | test.py:1:26:1:32 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | diff --git a/python/ql/test/query-tests/Security/CWE-798-HardcodedCredentials/HardcodedCredentials.expected b/python/ql/test/query-tests/Security/CWE-798-HardcodedCredentials/HardcodedCredentials.expected index 78ebc9bd049..5f494e9ba7a 100644 --- a/python/ql/test/query-tests/Security/CWE-798-HardcodedCredentials/HardcodedCredentials.expected +++ b/python/ql/test/query-tests/Security/CWE-798-HardcodedCredentials/HardcodedCredentials.expected @@ -1,8 +1,8 @@ edges -| test.py:5:1:5:8 | ControlFlowNode for USERNAME | test.py:14:18:14:25 | ControlFlowNode for USERNAME | -| test.py:5:12:5:24 | ControlFlowNode for Str | test.py:5:1:5:8 | ControlFlowNode for USERNAME | -| test.py:6:1:6:8 | ControlFlowNode for PASSWORD | test.py:15:18:15:25 | ControlFlowNode for PASSWORD | -| test.py:6:12:6:25 | ControlFlowNode for Str | test.py:6:1:6:8 | ControlFlowNode for PASSWORD | +| test.py:5:1:5:8 | ControlFlowNode for USERNAME | test.py:14:18:14:25 | ControlFlowNode for USERNAME | provenance | | +| test.py:5:12:5:24 | ControlFlowNode for Str | test.py:5:1:5:8 | ControlFlowNode for USERNAME | provenance | | +| test.py:6:1:6:8 | ControlFlowNode for PASSWORD | test.py:15:18:15:25 | ControlFlowNode for PASSWORD | provenance | | +| test.py:6:12:6:25 | ControlFlowNode for Str | test.py:6:1:6:8 | ControlFlowNode for PASSWORD | provenance | | nodes | test.py:5:1:5:8 | ControlFlowNode for USERNAME | semmle.label | ControlFlowNode for USERNAME | | test.py:5:12:5:24 | ControlFlowNode for Str | semmle.label | ControlFlowNode for Str | diff --git a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/FullServerSideRequestForgery.expected b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/FullServerSideRequestForgery.expected index c6b1c77d40e..cc0a986aedb 100644 --- a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/FullServerSideRequestForgery.expected +++ b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/FullServerSideRequestForgery.expected @@ -1,56 +1,56 @@ edges -| full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:1:19:1:25 | ControlFlowNode for request | -| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:7:18:7:24 | ControlFlowNode for request | -| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:37:18:37:24 | ControlFlowNode for request | -| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:57:18:57:24 | ControlFlowNode for request | -| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:71:18:71:24 | ControlFlowNode for request | -| full_partial_test.py:7:5:7:14 | ControlFlowNode for user_input | full_partial_test.py:10:18:10:27 | ControlFlowNode for user_input | -| full_partial_test.py:7:5:7:14 | ControlFlowNode for user_input | full_partial_test.py:12:5:12:7 | ControlFlowNode for url | -| full_partial_test.py:7:5:7:14 | ControlFlowNode for user_input | full_partial_test.py:18:5:18:7 | ControlFlowNode for url | -| full_partial_test.py:7:5:7:14 | ControlFlowNode for user_input | full_partial_test.py:22:5:22:7 | ControlFlowNode for url | -| full_partial_test.py:7:18:7:24 | ControlFlowNode for request | full_partial_test.py:7:5:7:14 | ControlFlowNode for user_input | -| full_partial_test.py:12:5:12:7 | ControlFlowNode for url | full_partial_test.py:13:18:13:20 | ControlFlowNode for url | -| full_partial_test.py:18:5:18:7 | ControlFlowNode for url | full_partial_test.py:19:18:19:20 | ControlFlowNode for url | -| full_partial_test.py:22:5:22:7 | ControlFlowNode for url | full_partial_test.py:23:18:23:20 | ControlFlowNode for url | -| full_partial_test.py:37:5:37:14 | ControlFlowNode for user_input | full_partial_test.py:41:5:41:7 | ControlFlowNode for url | -| full_partial_test.py:37:5:37:14 | ControlFlowNode for user_input | full_partial_test.py:44:5:44:7 | ControlFlowNode for url | -| full_partial_test.py:37:5:37:14 | ControlFlowNode for user_input | full_partial_test.py:47:5:47:7 | ControlFlowNode for url | -| full_partial_test.py:37:5:37:14 | ControlFlowNode for user_input | full_partial_test.py:50:5:50:7 | ControlFlowNode for url | -| full_partial_test.py:37:5:37:14 | ControlFlowNode for user_input | full_partial_test.py:53:5:53:7 | ControlFlowNode for url | -| full_partial_test.py:37:18:37:24 | ControlFlowNode for request | full_partial_test.py:37:5:37:14 | ControlFlowNode for user_input | -| full_partial_test.py:41:5:41:7 | ControlFlowNode for url | full_partial_test.py:42:18:42:20 | ControlFlowNode for url | -| full_partial_test.py:44:5:44:7 | ControlFlowNode for url | full_partial_test.py:45:18:45:20 | ControlFlowNode for url | -| full_partial_test.py:47:5:47:7 | ControlFlowNode for url | full_partial_test.py:48:18:48:20 | ControlFlowNode for url | -| full_partial_test.py:50:5:50:7 | ControlFlowNode for url | full_partial_test.py:51:18:51:20 | ControlFlowNode for url | -| full_partial_test.py:53:5:53:7 | ControlFlowNode for url | full_partial_test.py:54:18:54:20 | ControlFlowNode for url | -| full_partial_test.py:57:5:57:14 | ControlFlowNode for user_input | full_partial_test.py:61:5:61:7 | ControlFlowNode for url | -| full_partial_test.py:57:5:57:14 | ControlFlowNode for user_input | full_partial_test.py:64:5:64:7 | ControlFlowNode for url | -| full_partial_test.py:57:18:57:24 | ControlFlowNode for request | full_partial_test.py:57:5:57:14 | ControlFlowNode for user_input | -| full_partial_test.py:61:5:61:7 | ControlFlowNode for url | full_partial_test.py:62:18:62:20 | ControlFlowNode for url | -| full_partial_test.py:64:5:64:7 | ControlFlowNode for url | full_partial_test.py:65:18:65:20 | ControlFlowNode for url | -| full_partial_test.py:71:5:71:14 | ControlFlowNode for user_input | full_partial_test.py:75:5:75:7 | ControlFlowNode for url | -| full_partial_test.py:71:5:71:14 | ControlFlowNode for user_input | full_partial_test.py:78:5:78:7 | ControlFlowNode for url | -| full_partial_test.py:71:5:71:14 | ControlFlowNode for user_input | full_partial_test.py:81:5:81:7 | ControlFlowNode for url | -| full_partial_test.py:71:18:71:24 | ControlFlowNode for request | full_partial_test.py:71:5:71:14 | ControlFlowNode for user_input | -| full_partial_test.py:75:5:75:7 | ControlFlowNode for url | full_partial_test.py:76:18:76:20 | ControlFlowNode for url | -| full_partial_test.py:78:5:78:7 | ControlFlowNode for url | full_partial_test.py:79:18:79:20 | ControlFlowNode for url | -| full_partial_test.py:81:5:81:7 | ControlFlowNode for url | full_partial_test.py:82:18:82:20 | ControlFlowNode for url | -| test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | test_http_client.py:1:26:1:32 | ControlFlowNode for request | -| test_http_client.py:1:26:1:32 | ControlFlowNode for request | test_http_client.py:9:19:9:25 | ControlFlowNode for request | -| test_http_client.py:1:26:1:32 | ControlFlowNode for request | test_http_client.py:10:19:10:25 | ControlFlowNode for request | -| test_http_client.py:9:5:9:15 | ControlFlowNode for unsafe_host | test_http_client.py:13:27:13:37 | ControlFlowNode for unsafe_host | -| test_http_client.py:9:5:9:15 | ControlFlowNode for unsafe_host | test_http_client.py:18:27:18:37 | ControlFlowNode for unsafe_host | -| test_http_client.py:9:5:9:15 | ControlFlowNode for unsafe_host | test_http_client.py:25:27:25:37 | ControlFlowNode for unsafe_host | -| test_http_client.py:9:19:9:25 | ControlFlowNode for request | test_http_client.py:9:5:9:15 | ControlFlowNode for unsafe_host | -| test_http_client.py:9:19:9:25 | ControlFlowNode for request | test_http_client.py:10:5:10:15 | ControlFlowNode for unsafe_path | -| test_http_client.py:10:5:10:15 | ControlFlowNode for unsafe_path | test_http_client.py:14:25:14:35 | ControlFlowNode for unsafe_path | -| test_http_client.py:10:5:10:15 | ControlFlowNode for unsafe_path | test_http_client.py:19:25:19:35 | ControlFlowNode for unsafe_path | -| test_http_client.py:10:5:10:15 | ControlFlowNode for unsafe_path | test_http_client.py:29:25:29:35 | ControlFlowNode for unsafe_path | -| test_http_client.py:10:19:10:25 | ControlFlowNode for request | test_http_client.py:10:5:10:15 | ControlFlowNode for unsafe_path | -| test_requests.py:1:19:1:25 | ControlFlowNode for ImportMember | test_requests.py:1:19:1:25 | ControlFlowNode for request | -| test_requests.py:1:19:1:25 | ControlFlowNode for request | test_requests.py:6:18:6:24 | ControlFlowNode for request | -| test_requests.py:6:5:6:14 | ControlFlowNode for user_input | test_requests.py:8:18:8:27 | ControlFlowNode for user_input | -| test_requests.py:6:18:6:24 | ControlFlowNode for request | test_requests.py:6:5:6:14 | ControlFlowNode for user_input | +| full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:1:19:1:25 | ControlFlowNode for request | provenance | | +| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:7:18:7:24 | ControlFlowNode for request | provenance | | +| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:37:18:37:24 | ControlFlowNode for request | provenance | | +| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:57:18:57:24 | ControlFlowNode for request | provenance | | +| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:71:18:71:24 | ControlFlowNode for request | provenance | | +| full_partial_test.py:7:5:7:14 | ControlFlowNode for user_input | full_partial_test.py:10:18:10:27 | ControlFlowNode for user_input | provenance | | +| full_partial_test.py:7:5:7:14 | ControlFlowNode for user_input | full_partial_test.py:12:5:12:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:7:5:7:14 | ControlFlowNode for user_input | full_partial_test.py:18:5:18:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:7:5:7:14 | ControlFlowNode for user_input | full_partial_test.py:22:5:22:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:7:18:7:24 | ControlFlowNode for request | full_partial_test.py:7:5:7:14 | ControlFlowNode for user_input | provenance | | +| full_partial_test.py:12:5:12:7 | ControlFlowNode for url | full_partial_test.py:13:18:13:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:18:5:18:7 | ControlFlowNode for url | full_partial_test.py:19:18:19:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:22:5:22:7 | ControlFlowNode for url | full_partial_test.py:23:18:23:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:37:5:37:14 | ControlFlowNode for user_input | full_partial_test.py:41:5:41:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:37:5:37:14 | ControlFlowNode for user_input | full_partial_test.py:44:5:44:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:37:5:37:14 | ControlFlowNode for user_input | full_partial_test.py:47:5:47:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:37:5:37:14 | ControlFlowNode for user_input | full_partial_test.py:50:5:50:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:37:5:37:14 | ControlFlowNode for user_input | full_partial_test.py:53:5:53:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:37:18:37:24 | ControlFlowNode for request | full_partial_test.py:37:5:37:14 | ControlFlowNode for user_input | provenance | | +| full_partial_test.py:41:5:41:7 | ControlFlowNode for url | full_partial_test.py:42:18:42:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:44:5:44:7 | ControlFlowNode for url | full_partial_test.py:45:18:45:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:47:5:47:7 | ControlFlowNode for url | full_partial_test.py:48:18:48:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:50:5:50:7 | ControlFlowNode for url | full_partial_test.py:51:18:51:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:53:5:53:7 | ControlFlowNode for url | full_partial_test.py:54:18:54:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:57:5:57:14 | ControlFlowNode for user_input | full_partial_test.py:61:5:61:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:57:5:57:14 | ControlFlowNode for user_input | full_partial_test.py:64:5:64:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:57:18:57:24 | ControlFlowNode for request | full_partial_test.py:57:5:57:14 | ControlFlowNode for user_input | provenance | | +| full_partial_test.py:61:5:61:7 | ControlFlowNode for url | full_partial_test.py:62:18:62:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:64:5:64:7 | ControlFlowNode for url | full_partial_test.py:65:18:65:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:71:5:71:14 | ControlFlowNode for user_input | full_partial_test.py:75:5:75:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:71:5:71:14 | ControlFlowNode for user_input | full_partial_test.py:78:5:78:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:71:5:71:14 | ControlFlowNode for user_input | full_partial_test.py:81:5:81:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:71:18:71:24 | ControlFlowNode for request | full_partial_test.py:71:5:71:14 | ControlFlowNode for user_input | provenance | | +| full_partial_test.py:75:5:75:7 | ControlFlowNode for url | full_partial_test.py:76:18:76:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:78:5:78:7 | ControlFlowNode for url | full_partial_test.py:79:18:79:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:81:5:81:7 | ControlFlowNode for url | full_partial_test.py:82:18:82:20 | ControlFlowNode for url | provenance | | +| test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | test_http_client.py:1:26:1:32 | ControlFlowNode for request | provenance | | +| test_http_client.py:1:26:1:32 | ControlFlowNode for request | test_http_client.py:9:19:9:25 | ControlFlowNode for request | provenance | | +| test_http_client.py:1:26:1:32 | ControlFlowNode for request | test_http_client.py:10:19:10:25 | ControlFlowNode for request | provenance | | +| test_http_client.py:9:5:9:15 | ControlFlowNode for unsafe_host | test_http_client.py:13:27:13:37 | ControlFlowNode for unsafe_host | provenance | | +| test_http_client.py:9:5:9:15 | ControlFlowNode for unsafe_host | test_http_client.py:18:27:18:37 | ControlFlowNode for unsafe_host | provenance | | +| test_http_client.py:9:5:9:15 | ControlFlowNode for unsafe_host | test_http_client.py:25:27:25:37 | ControlFlowNode for unsafe_host | provenance | | +| test_http_client.py:9:19:9:25 | ControlFlowNode for request | test_http_client.py:9:5:9:15 | ControlFlowNode for unsafe_host | provenance | | +| test_http_client.py:9:19:9:25 | ControlFlowNode for request | test_http_client.py:10:5:10:15 | ControlFlowNode for unsafe_path | provenance | | +| test_http_client.py:10:5:10:15 | ControlFlowNode for unsafe_path | test_http_client.py:14:25:14:35 | ControlFlowNode for unsafe_path | provenance | | +| test_http_client.py:10:5:10:15 | ControlFlowNode for unsafe_path | test_http_client.py:19:25:19:35 | ControlFlowNode for unsafe_path | provenance | | +| test_http_client.py:10:5:10:15 | ControlFlowNode for unsafe_path | test_http_client.py:29:25:29:35 | ControlFlowNode for unsafe_path | provenance | | +| test_http_client.py:10:19:10:25 | ControlFlowNode for request | test_http_client.py:10:5:10:15 | ControlFlowNode for unsafe_path | provenance | | +| test_requests.py:1:19:1:25 | ControlFlowNode for ImportMember | test_requests.py:1:19:1:25 | ControlFlowNode for request | provenance | | +| test_requests.py:1:19:1:25 | ControlFlowNode for request | test_requests.py:6:18:6:24 | ControlFlowNode for request | provenance | | +| test_requests.py:6:5:6:14 | ControlFlowNode for user_input | test_requests.py:8:18:8:27 | ControlFlowNode for user_input | provenance | | +| test_requests.py:6:18:6:24 | ControlFlowNode for request | test_requests.py:6:5:6:14 | ControlFlowNode for user_input | provenance | | nodes | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | | full_partial_test.py:1:19:1:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | diff --git a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/PartialServerSideRequestForgery.expected b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/PartialServerSideRequestForgery.expected index 1960ec4b80d..33f6bc363e4 100644 --- a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/PartialServerSideRequestForgery.expected +++ b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/PartialServerSideRequestForgery.expected @@ -1,106 +1,106 @@ edges -| full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:1:19:1:25 | ControlFlowNode for request | -| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:7:18:7:24 | ControlFlowNode for request | -| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:8:17:8:23 | ControlFlowNode for request | -| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:37:18:37:24 | ControlFlowNode for request | -| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:38:17:38:23 | ControlFlowNode for request | -| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:57:18:57:24 | ControlFlowNode for request | -| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:58:17:58:23 | ControlFlowNode for request | -| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:71:18:71:24 | ControlFlowNode for request | -| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:72:17:72:23 | ControlFlowNode for request | -| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:86:18:86:24 | ControlFlowNode for request | -| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:92:18:92:24 | ControlFlowNode for request | -| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:98:18:98:24 | ControlFlowNode for request | -| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:104:18:104:24 | ControlFlowNode for request | -| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:110:18:110:24 | ControlFlowNode for request | -| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:119:18:119:24 | ControlFlowNode for request | -| full_partial_test.py:7:5:7:14 | ControlFlowNode for user_input | full_partial_test.py:10:18:10:27 | ControlFlowNode for user_input | -| full_partial_test.py:7:5:7:14 | ControlFlowNode for user_input | full_partial_test.py:12:5:12:7 | ControlFlowNode for url | -| full_partial_test.py:7:5:7:14 | ControlFlowNode for user_input | full_partial_test.py:18:5:18:7 | ControlFlowNode for url | -| full_partial_test.py:7:5:7:14 | ControlFlowNode for user_input | full_partial_test.py:22:5:22:7 | ControlFlowNode for url | -| full_partial_test.py:7:18:7:24 | ControlFlowNode for request | full_partial_test.py:7:5:7:14 | ControlFlowNode for user_input | -| full_partial_test.py:7:18:7:24 | ControlFlowNode for request | full_partial_test.py:8:5:8:13 | ControlFlowNode for query_val | -| full_partial_test.py:8:5:8:13 | ControlFlowNode for query_val | full_partial_test.py:22:5:22:7 | ControlFlowNode for url | -| full_partial_test.py:8:17:8:23 | ControlFlowNode for request | full_partial_test.py:8:5:8:13 | ControlFlowNode for query_val | -| full_partial_test.py:12:5:12:7 | ControlFlowNode for url | full_partial_test.py:13:18:13:20 | ControlFlowNode for url | -| full_partial_test.py:18:5:18:7 | ControlFlowNode for url | full_partial_test.py:19:18:19:20 | ControlFlowNode for url | -| full_partial_test.py:22:5:22:7 | ControlFlowNode for url | full_partial_test.py:23:18:23:20 | ControlFlowNode for url | -| full_partial_test.py:37:5:37:14 | ControlFlowNode for user_input | full_partial_test.py:41:5:41:7 | ControlFlowNode for url | -| full_partial_test.py:37:5:37:14 | ControlFlowNode for user_input | full_partial_test.py:44:5:44:7 | ControlFlowNode for url | -| full_partial_test.py:37:5:37:14 | ControlFlowNode for user_input | full_partial_test.py:47:5:47:7 | ControlFlowNode for url | -| full_partial_test.py:37:5:37:14 | ControlFlowNode for user_input | full_partial_test.py:50:5:50:7 | ControlFlowNode for url | -| full_partial_test.py:37:5:37:14 | ControlFlowNode for user_input | full_partial_test.py:53:5:53:7 | ControlFlowNode for url | -| full_partial_test.py:37:18:37:24 | ControlFlowNode for request | full_partial_test.py:37:5:37:14 | ControlFlowNode for user_input | -| full_partial_test.py:37:18:37:24 | ControlFlowNode for request | full_partial_test.py:38:5:38:13 | ControlFlowNode for query_val | -| full_partial_test.py:38:5:38:13 | ControlFlowNode for query_val | full_partial_test.py:47:5:47:7 | ControlFlowNode for url | -| full_partial_test.py:38:17:38:23 | ControlFlowNode for request | full_partial_test.py:38:5:38:13 | ControlFlowNode for query_val | -| full_partial_test.py:41:5:41:7 | ControlFlowNode for url | full_partial_test.py:42:18:42:20 | ControlFlowNode for url | -| full_partial_test.py:44:5:44:7 | ControlFlowNode for url | full_partial_test.py:45:18:45:20 | ControlFlowNode for url | -| full_partial_test.py:47:5:47:7 | ControlFlowNode for url | full_partial_test.py:48:18:48:20 | ControlFlowNode for url | -| full_partial_test.py:50:5:50:7 | ControlFlowNode for url | full_partial_test.py:51:18:51:20 | ControlFlowNode for url | -| full_partial_test.py:53:5:53:7 | ControlFlowNode for url | full_partial_test.py:54:18:54:20 | ControlFlowNode for url | -| full_partial_test.py:57:5:57:14 | ControlFlowNode for user_input | full_partial_test.py:61:5:61:7 | ControlFlowNode for url | -| full_partial_test.py:57:5:57:14 | ControlFlowNode for user_input | full_partial_test.py:64:5:64:7 | ControlFlowNode for url | -| full_partial_test.py:57:5:57:14 | ControlFlowNode for user_input | full_partial_test.py:67:5:67:7 | ControlFlowNode for url | -| full_partial_test.py:57:18:57:24 | ControlFlowNode for request | full_partial_test.py:57:5:57:14 | ControlFlowNode for user_input | -| full_partial_test.py:57:18:57:24 | ControlFlowNode for request | full_partial_test.py:58:5:58:13 | ControlFlowNode for query_val | -| full_partial_test.py:58:5:58:13 | ControlFlowNode for query_val | full_partial_test.py:67:5:67:7 | ControlFlowNode for url | -| full_partial_test.py:58:17:58:23 | ControlFlowNode for request | full_partial_test.py:58:5:58:13 | ControlFlowNode for query_val | -| full_partial_test.py:61:5:61:7 | ControlFlowNode for url | full_partial_test.py:62:18:62:20 | ControlFlowNode for url | -| full_partial_test.py:64:5:64:7 | ControlFlowNode for url | full_partial_test.py:65:18:65:20 | ControlFlowNode for url | -| full_partial_test.py:67:5:67:7 | ControlFlowNode for url | full_partial_test.py:68:18:68:20 | ControlFlowNode for url | -| full_partial_test.py:71:5:71:14 | ControlFlowNode for user_input | full_partial_test.py:75:5:75:7 | ControlFlowNode for url | -| full_partial_test.py:71:5:71:14 | ControlFlowNode for user_input | full_partial_test.py:78:5:78:7 | ControlFlowNode for url | -| full_partial_test.py:71:5:71:14 | ControlFlowNode for user_input | full_partial_test.py:81:5:81:7 | ControlFlowNode for url | -| full_partial_test.py:71:18:71:24 | ControlFlowNode for request | full_partial_test.py:71:5:71:14 | ControlFlowNode for user_input | -| full_partial_test.py:71:18:71:24 | ControlFlowNode for request | full_partial_test.py:72:5:72:13 | ControlFlowNode for query_val | -| full_partial_test.py:72:5:72:13 | ControlFlowNode for query_val | full_partial_test.py:81:5:81:7 | ControlFlowNode for url | -| full_partial_test.py:72:17:72:23 | ControlFlowNode for request | full_partial_test.py:72:5:72:13 | ControlFlowNode for query_val | -| full_partial_test.py:75:5:75:7 | ControlFlowNode for url | full_partial_test.py:76:18:76:20 | ControlFlowNode for url | -| full_partial_test.py:78:5:78:7 | ControlFlowNode for url | full_partial_test.py:79:18:79:20 | ControlFlowNode for url | -| full_partial_test.py:81:5:81:7 | ControlFlowNode for url | full_partial_test.py:82:18:82:20 | ControlFlowNode for url | -| full_partial_test.py:86:5:86:14 | ControlFlowNode for user_input | full_partial_test.py:88:5:88:7 | ControlFlowNode for url | -| full_partial_test.py:86:18:86:24 | ControlFlowNode for request | full_partial_test.py:86:5:86:14 | ControlFlowNode for user_input | -| full_partial_test.py:88:5:88:7 | ControlFlowNode for url | full_partial_test.py:89:18:89:20 | ControlFlowNode for url | -| full_partial_test.py:92:5:92:14 | ControlFlowNode for user_input | full_partial_test.py:94:5:94:7 | ControlFlowNode for url | -| full_partial_test.py:92:18:92:24 | ControlFlowNode for request | full_partial_test.py:92:5:92:14 | ControlFlowNode for user_input | -| full_partial_test.py:94:5:94:7 | ControlFlowNode for url | full_partial_test.py:95:18:95:20 | ControlFlowNode for url | -| full_partial_test.py:98:5:98:14 | ControlFlowNode for user_input | full_partial_test.py:100:5:100:7 | ControlFlowNode for url | -| full_partial_test.py:98:18:98:24 | ControlFlowNode for request | full_partial_test.py:98:5:98:14 | ControlFlowNode for user_input | -| full_partial_test.py:100:5:100:7 | ControlFlowNode for url | full_partial_test.py:101:18:101:20 | ControlFlowNode for url | -| full_partial_test.py:104:5:104:14 | ControlFlowNode for user_input | full_partial_test.py:106:5:106:7 | ControlFlowNode for url | -| full_partial_test.py:104:18:104:24 | ControlFlowNode for request | full_partial_test.py:104:5:104:14 | ControlFlowNode for user_input | -| full_partial_test.py:106:5:106:7 | ControlFlowNode for url | full_partial_test.py:107:18:107:20 | ControlFlowNode for url | -| full_partial_test.py:110:5:110:14 | ControlFlowNode for user_input | full_partial_test.py:115:5:115:7 | ControlFlowNode for url | -| full_partial_test.py:110:18:110:24 | ControlFlowNode for request | full_partial_test.py:110:5:110:14 | ControlFlowNode for user_input | -| full_partial_test.py:115:5:115:7 | ControlFlowNode for url | full_partial_test.py:116:18:116:20 | ControlFlowNode for url | -| full_partial_test.py:119:5:119:14 | ControlFlowNode for user_input | full_partial_test.py:121:5:121:7 | ControlFlowNode for url | -| full_partial_test.py:119:18:119:24 | ControlFlowNode for request | full_partial_test.py:119:5:119:14 | ControlFlowNode for user_input | -| full_partial_test.py:121:5:121:7 | ControlFlowNode for url | full_partial_test.py:122:18:122:20 | ControlFlowNode for url | -| test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | test_http_client.py:1:26:1:32 | ControlFlowNode for request | -| test_http_client.py:1:26:1:32 | ControlFlowNode for request | test_http_client.py:9:19:9:25 | ControlFlowNode for request | -| test_http_client.py:1:26:1:32 | ControlFlowNode for request | test_http_client.py:10:19:10:25 | ControlFlowNode for request | -| test_http_client.py:1:26:1:32 | ControlFlowNode for request | test_http_client.py:11:18:11:24 | ControlFlowNode for request | -| test_http_client.py:9:5:9:15 | ControlFlowNode for unsafe_host | test_http_client.py:13:27:13:37 | ControlFlowNode for unsafe_host | -| test_http_client.py:9:5:9:15 | ControlFlowNode for unsafe_host | test_http_client.py:18:27:18:37 | ControlFlowNode for unsafe_host | -| test_http_client.py:9:5:9:15 | ControlFlowNode for unsafe_host | test_http_client.py:25:27:25:37 | ControlFlowNode for unsafe_host | -| test_http_client.py:9:19:9:25 | ControlFlowNode for request | test_http_client.py:9:5:9:15 | ControlFlowNode for unsafe_host | -| test_http_client.py:9:19:9:25 | ControlFlowNode for request | test_http_client.py:10:5:10:15 | ControlFlowNode for unsafe_path | -| test_http_client.py:9:19:9:25 | ControlFlowNode for request | test_http_client.py:11:5:11:14 | ControlFlowNode for user_input | -| test_http_client.py:10:5:10:15 | ControlFlowNode for unsafe_path | test_http_client.py:14:25:14:35 | ControlFlowNode for unsafe_path | -| test_http_client.py:10:5:10:15 | ControlFlowNode for unsafe_path | test_http_client.py:19:25:19:35 | ControlFlowNode for unsafe_path | -| test_http_client.py:10:5:10:15 | ControlFlowNode for unsafe_path | test_http_client.py:29:25:29:35 | ControlFlowNode for unsafe_path | -| test_http_client.py:10:19:10:25 | ControlFlowNode for request | test_http_client.py:10:5:10:15 | ControlFlowNode for unsafe_path | -| test_http_client.py:10:19:10:25 | ControlFlowNode for request | test_http_client.py:11:5:11:14 | ControlFlowNode for user_input | -| test_http_client.py:11:5:11:14 | ControlFlowNode for user_input | test_http_client.py:31:5:31:8 | ControlFlowNode for path | -| test_http_client.py:11:5:11:14 | ControlFlowNode for user_input | test_http_client.py:35:5:35:8 | ControlFlowNode for path | -| test_http_client.py:11:18:11:24 | ControlFlowNode for request | test_http_client.py:11:5:11:14 | ControlFlowNode for user_input | -| test_http_client.py:31:5:31:8 | ControlFlowNode for path | test_http_client.py:33:25:33:28 | ControlFlowNode for path | -| test_http_client.py:35:5:35:8 | ControlFlowNode for path | test_http_client.py:37:25:37:28 | ControlFlowNode for path | -| test_requests.py:1:19:1:25 | ControlFlowNode for ImportMember | test_requests.py:1:19:1:25 | ControlFlowNode for request | -| test_requests.py:1:19:1:25 | ControlFlowNode for request | test_requests.py:6:18:6:24 | ControlFlowNode for request | -| test_requests.py:6:5:6:14 | ControlFlowNode for user_input | test_requests.py:8:18:8:27 | ControlFlowNode for user_input | -| test_requests.py:6:18:6:24 | ControlFlowNode for request | test_requests.py:6:5:6:14 | ControlFlowNode for user_input | +| full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:1:19:1:25 | ControlFlowNode for request | provenance | | +| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:7:18:7:24 | ControlFlowNode for request | provenance | | +| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:8:17:8:23 | ControlFlowNode for request | provenance | | +| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:37:18:37:24 | ControlFlowNode for request | provenance | | +| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:38:17:38:23 | ControlFlowNode for request | provenance | | +| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:57:18:57:24 | ControlFlowNode for request | provenance | | +| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:58:17:58:23 | ControlFlowNode for request | provenance | | +| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:71:18:71:24 | ControlFlowNode for request | provenance | | +| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:72:17:72:23 | ControlFlowNode for request | provenance | | +| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:86:18:86:24 | ControlFlowNode for request | provenance | | +| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:92:18:92:24 | ControlFlowNode for request | provenance | | +| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:98:18:98:24 | ControlFlowNode for request | provenance | | +| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:104:18:104:24 | ControlFlowNode for request | provenance | | +| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:110:18:110:24 | ControlFlowNode for request | provenance | | +| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:119:18:119:24 | ControlFlowNode for request | provenance | | +| full_partial_test.py:7:5:7:14 | ControlFlowNode for user_input | full_partial_test.py:10:18:10:27 | ControlFlowNode for user_input | provenance | | +| full_partial_test.py:7:5:7:14 | ControlFlowNode for user_input | full_partial_test.py:12:5:12:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:7:5:7:14 | ControlFlowNode for user_input | full_partial_test.py:18:5:18:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:7:5:7:14 | ControlFlowNode for user_input | full_partial_test.py:22:5:22:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:7:18:7:24 | ControlFlowNode for request | full_partial_test.py:7:5:7:14 | ControlFlowNode for user_input | provenance | | +| full_partial_test.py:7:18:7:24 | ControlFlowNode for request | full_partial_test.py:8:5:8:13 | ControlFlowNode for query_val | provenance | | +| full_partial_test.py:8:5:8:13 | ControlFlowNode for query_val | full_partial_test.py:22:5:22:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:8:17:8:23 | ControlFlowNode for request | full_partial_test.py:8:5:8:13 | ControlFlowNode for query_val | provenance | | +| full_partial_test.py:12:5:12:7 | ControlFlowNode for url | full_partial_test.py:13:18:13:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:18:5:18:7 | ControlFlowNode for url | full_partial_test.py:19:18:19:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:22:5:22:7 | ControlFlowNode for url | full_partial_test.py:23:18:23:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:37:5:37:14 | ControlFlowNode for user_input | full_partial_test.py:41:5:41:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:37:5:37:14 | ControlFlowNode for user_input | full_partial_test.py:44:5:44:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:37:5:37:14 | ControlFlowNode for user_input | full_partial_test.py:47:5:47:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:37:5:37:14 | ControlFlowNode for user_input | full_partial_test.py:50:5:50:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:37:5:37:14 | ControlFlowNode for user_input | full_partial_test.py:53:5:53:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:37:18:37:24 | ControlFlowNode for request | full_partial_test.py:37:5:37:14 | ControlFlowNode for user_input | provenance | | +| full_partial_test.py:37:18:37:24 | ControlFlowNode for request | full_partial_test.py:38:5:38:13 | ControlFlowNode for query_val | provenance | | +| full_partial_test.py:38:5:38:13 | ControlFlowNode for query_val | full_partial_test.py:47:5:47:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:38:17:38:23 | ControlFlowNode for request | full_partial_test.py:38:5:38:13 | ControlFlowNode for query_val | provenance | | +| full_partial_test.py:41:5:41:7 | ControlFlowNode for url | full_partial_test.py:42:18:42:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:44:5:44:7 | ControlFlowNode for url | full_partial_test.py:45:18:45:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:47:5:47:7 | ControlFlowNode for url | full_partial_test.py:48:18:48:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:50:5:50:7 | ControlFlowNode for url | full_partial_test.py:51:18:51:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:53:5:53:7 | ControlFlowNode for url | full_partial_test.py:54:18:54:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:57:5:57:14 | ControlFlowNode for user_input | full_partial_test.py:61:5:61:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:57:5:57:14 | ControlFlowNode for user_input | full_partial_test.py:64:5:64:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:57:5:57:14 | ControlFlowNode for user_input | full_partial_test.py:67:5:67:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:57:18:57:24 | ControlFlowNode for request | full_partial_test.py:57:5:57:14 | ControlFlowNode for user_input | provenance | | +| full_partial_test.py:57:18:57:24 | ControlFlowNode for request | full_partial_test.py:58:5:58:13 | ControlFlowNode for query_val | provenance | | +| full_partial_test.py:58:5:58:13 | ControlFlowNode for query_val | full_partial_test.py:67:5:67:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:58:17:58:23 | ControlFlowNode for request | full_partial_test.py:58:5:58:13 | ControlFlowNode for query_val | provenance | | +| full_partial_test.py:61:5:61:7 | ControlFlowNode for url | full_partial_test.py:62:18:62:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:64:5:64:7 | ControlFlowNode for url | full_partial_test.py:65:18:65:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:67:5:67:7 | ControlFlowNode for url | full_partial_test.py:68:18:68:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:71:5:71:14 | ControlFlowNode for user_input | full_partial_test.py:75:5:75:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:71:5:71:14 | ControlFlowNode for user_input | full_partial_test.py:78:5:78:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:71:5:71:14 | ControlFlowNode for user_input | full_partial_test.py:81:5:81:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:71:18:71:24 | ControlFlowNode for request | full_partial_test.py:71:5:71:14 | ControlFlowNode for user_input | provenance | | +| full_partial_test.py:71:18:71:24 | ControlFlowNode for request | full_partial_test.py:72:5:72:13 | ControlFlowNode for query_val | provenance | | +| full_partial_test.py:72:5:72:13 | ControlFlowNode for query_val | full_partial_test.py:81:5:81:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:72:17:72:23 | ControlFlowNode for request | full_partial_test.py:72:5:72:13 | ControlFlowNode for query_val | provenance | | +| full_partial_test.py:75:5:75:7 | ControlFlowNode for url | full_partial_test.py:76:18:76:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:78:5:78:7 | ControlFlowNode for url | full_partial_test.py:79:18:79:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:81:5:81:7 | ControlFlowNode for url | full_partial_test.py:82:18:82:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:86:5:86:14 | ControlFlowNode for user_input | full_partial_test.py:88:5:88:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:86:18:86:24 | ControlFlowNode for request | full_partial_test.py:86:5:86:14 | ControlFlowNode for user_input | provenance | | +| full_partial_test.py:88:5:88:7 | ControlFlowNode for url | full_partial_test.py:89:18:89:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:92:5:92:14 | ControlFlowNode for user_input | full_partial_test.py:94:5:94:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:92:18:92:24 | ControlFlowNode for request | full_partial_test.py:92:5:92:14 | ControlFlowNode for user_input | provenance | | +| full_partial_test.py:94:5:94:7 | ControlFlowNode for url | full_partial_test.py:95:18:95:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:98:5:98:14 | ControlFlowNode for user_input | full_partial_test.py:100:5:100:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:98:18:98:24 | ControlFlowNode for request | full_partial_test.py:98:5:98:14 | ControlFlowNode for user_input | provenance | | +| full_partial_test.py:100:5:100:7 | ControlFlowNode for url | full_partial_test.py:101:18:101:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:104:5:104:14 | ControlFlowNode for user_input | full_partial_test.py:106:5:106:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:104:18:104:24 | ControlFlowNode for request | full_partial_test.py:104:5:104:14 | ControlFlowNode for user_input | provenance | | +| full_partial_test.py:106:5:106:7 | ControlFlowNode for url | full_partial_test.py:107:18:107:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:110:5:110:14 | ControlFlowNode for user_input | full_partial_test.py:115:5:115:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:110:18:110:24 | ControlFlowNode for request | full_partial_test.py:110:5:110:14 | ControlFlowNode for user_input | provenance | | +| full_partial_test.py:115:5:115:7 | ControlFlowNode for url | full_partial_test.py:116:18:116:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:119:5:119:14 | ControlFlowNode for user_input | full_partial_test.py:121:5:121:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:119:18:119:24 | ControlFlowNode for request | full_partial_test.py:119:5:119:14 | ControlFlowNode for user_input | provenance | | +| full_partial_test.py:121:5:121:7 | ControlFlowNode for url | full_partial_test.py:122:18:122:20 | ControlFlowNode for url | provenance | | +| test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | test_http_client.py:1:26:1:32 | ControlFlowNode for request | provenance | | +| test_http_client.py:1:26:1:32 | ControlFlowNode for request | test_http_client.py:9:19:9:25 | ControlFlowNode for request | provenance | | +| test_http_client.py:1:26:1:32 | ControlFlowNode for request | test_http_client.py:10:19:10:25 | ControlFlowNode for request | provenance | | +| test_http_client.py:1:26:1:32 | ControlFlowNode for request | test_http_client.py:11:18:11:24 | ControlFlowNode for request | provenance | | +| test_http_client.py:9:5:9:15 | ControlFlowNode for unsafe_host | test_http_client.py:13:27:13:37 | ControlFlowNode for unsafe_host | provenance | | +| test_http_client.py:9:5:9:15 | ControlFlowNode for unsafe_host | test_http_client.py:18:27:18:37 | ControlFlowNode for unsafe_host | provenance | | +| test_http_client.py:9:5:9:15 | ControlFlowNode for unsafe_host | test_http_client.py:25:27:25:37 | ControlFlowNode for unsafe_host | provenance | | +| test_http_client.py:9:19:9:25 | ControlFlowNode for request | test_http_client.py:9:5:9:15 | ControlFlowNode for unsafe_host | provenance | | +| test_http_client.py:9:19:9:25 | ControlFlowNode for request | test_http_client.py:10:5:10:15 | ControlFlowNode for unsafe_path | provenance | | +| test_http_client.py:9:19:9:25 | ControlFlowNode for request | test_http_client.py:11:5:11:14 | ControlFlowNode for user_input | provenance | | +| test_http_client.py:10:5:10:15 | ControlFlowNode for unsafe_path | test_http_client.py:14:25:14:35 | ControlFlowNode for unsafe_path | provenance | | +| test_http_client.py:10:5:10:15 | ControlFlowNode for unsafe_path | test_http_client.py:19:25:19:35 | ControlFlowNode for unsafe_path | provenance | | +| test_http_client.py:10:5:10:15 | ControlFlowNode for unsafe_path | test_http_client.py:29:25:29:35 | ControlFlowNode for unsafe_path | provenance | | +| test_http_client.py:10:19:10:25 | ControlFlowNode for request | test_http_client.py:10:5:10:15 | ControlFlowNode for unsafe_path | provenance | | +| test_http_client.py:10:19:10:25 | ControlFlowNode for request | test_http_client.py:11:5:11:14 | ControlFlowNode for user_input | provenance | | +| test_http_client.py:11:5:11:14 | ControlFlowNode for user_input | test_http_client.py:31:5:31:8 | ControlFlowNode for path | provenance | | +| test_http_client.py:11:5:11:14 | ControlFlowNode for user_input | test_http_client.py:35:5:35:8 | ControlFlowNode for path | provenance | | +| test_http_client.py:11:18:11:24 | ControlFlowNode for request | test_http_client.py:11:5:11:14 | ControlFlowNode for user_input | provenance | | +| test_http_client.py:31:5:31:8 | ControlFlowNode for path | test_http_client.py:33:25:33:28 | ControlFlowNode for path | provenance | | +| test_http_client.py:35:5:35:8 | ControlFlowNode for path | test_http_client.py:37:25:37:28 | ControlFlowNode for path | provenance | | +| test_requests.py:1:19:1:25 | ControlFlowNode for ImportMember | test_requests.py:1:19:1:25 | ControlFlowNode for request | provenance | | +| test_requests.py:1:19:1:25 | ControlFlowNode for request | test_requests.py:6:18:6:24 | ControlFlowNode for request | provenance | | +| test_requests.py:6:5:6:14 | ControlFlowNode for user_input | test_requests.py:8:18:8:27 | ControlFlowNode for user_input | provenance | | +| test_requests.py:6:18:6:24 | ControlFlowNode for request | test_requests.py:6:5:6:14 | ControlFlowNode for user_input | provenance | | nodes | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | | full_partial_test.py:1:19:1:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | diff --git a/python/ql/test/query-tests/Security/CWE-943-NoSqlInjection/NoSqlInjection.expected b/python/ql/test/query-tests/Security/CWE-943-NoSqlInjection/NoSqlInjection.expected index e10f3312dd2..9604e8b92c6 100644 --- a/python/ql/test/query-tests/Security/CWE-943-NoSqlInjection/NoSqlInjection.expected +++ b/python/ql/test/query-tests/Security/CWE-943-NoSqlInjection/NoSqlInjection.expected @@ -1,121 +1,121 @@ edges -| PoC/server.py:1:26:1:32 | ControlFlowNode for ImportMember | PoC/server.py:1:26:1:32 | ControlFlowNode for request | -| PoC/server.py:1:26:1:32 | ControlFlowNode for request | PoC/server.py:26:21:26:27 | ControlFlowNode for request | -| PoC/server.py:1:26:1:32 | ControlFlowNode for request | PoC/server.py:43:14:43:20 | ControlFlowNode for request | -| PoC/server.py:1:26:1:32 | ControlFlowNode for request | PoC/server.py:52:14:52:20 | ControlFlowNode for request | -| PoC/server.py:1:26:1:32 | ControlFlowNode for request | PoC/server.py:77:14:77:20 | ControlFlowNode for request | -| PoC/server.py:1:26:1:32 | ControlFlowNode for request | PoC/server.py:98:14:98:20 | ControlFlowNode for request | -| PoC/server.py:26:5:26:17 | ControlFlowNode for author_string | PoC/server.py:27:25:27:37 | ControlFlowNode for author_string | -| PoC/server.py:26:21:26:27 | ControlFlowNode for request | PoC/server.py:26:5:26:17 | ControlFlowNode for author_string | -| PoC/server.py:27:5:27:10 | ControlFlowNode for author | PoC/server.py:30:27:30:44 | ControlFlowNode for Dict | -| PoC/server.py:27:5:27:10 | ControlFlowNode for author | PoC/server.py:31:34:31:51 | ControlFlowNode for Dict | -| PoC/server.py:27:14:27:38 | ControlFlowNode for Attribute() | PoC/server.py:27:5:27:10 | ControlFlowNode for author | -| PoC/server.py:27:25:27:37 | ControlFlowNode for author_string | PoC/server.py:27:14:27:38 | ControlFlowNode for Attribute() | -| PoC/server.py:43:5:43:10 | ControlFlowNode for author | PoC/server.py:47:38:47:67 | ControlFlowNode for BinaryExpr | -| PoC/server.py:43:14:43:20 | ControlFlowNode for request | PoC/server.py:43:5:43:10 | ControlFlowNode for author | -| PoC/server.py:47:38:47:67 | ControlFlowNode for BinaryExpr | PoC/server.py:47:27:47:68 | ControlFlowNode for Dict | -| PoC/server.py:52:5:52:10 | ControlFlowNode for author | PoC/server.py:54:17:54:70 | ControlFlowNode for BinaryExpr | -| PoC/server.py:52:14:52:20 | ControlFlowNode for request | PoC/server.py:52:5:52:10 | ControlFlowNode for author | -| PoC/server.py:53:5:53:10 | ControlFlowNode for search | PoC/server.py:61:27:61:58 | ControlFlowNode for Dict | -| PoC/server.py:53:14:57:5 | ControlFlowNode for Dict | PoC/server.py:53:5:53:10 | ControlFlowNode for search | -| PoC/server.py:54:17:54:70 | ControlFlowNode for BinaryExpr | PoC/server.py:53:14:57:5 | ControlFlowNode for Dict | -| PoC/server.py:77:5:77:10 | ControlFlowNode for author | PoC/server.py:80:23:80:101 | ControlFlowNode for BinaryExpr | -| PoC/server.py:77:14:77:20 | ControlFlowNode for request | PoC/server.py:77:5:77:10 | ControlFlowNode for author | -| PoC/server.py:78:5:78:15 | ControlFlowNode for accumulator | PoC/server.py:84:5:84:9 | ControlFlowNode for group | -| PoC/server.py:78:19:83:5 | ControlFlowNode for Dict | PoC/server.py:78:5:78:15 | ControlFlowNode for accumulator | -| PoC/server.py:80:23:80:101 | ControlFlowNode for BinaryExpr | PoC/server.py:78:19:83:5 | ControlFlowNode for Dict | -| PoC/server.py:84:5:84:9 | ControlFlowNode for group | PoC/server.py:91:29:91:47 | ControlFlowNode for Dict | -| PoC/server.py:84:5:84:9 | ControlFlowNode for group | PoC/server.py:92:38:92:56 | ControlFlowNode for Dict | -| PoC/server.py:98:5:98:10 | ControlFlowNode for author | PoC/server.py:99:5:99:10 | ControlFlowNode for mapper | -| PoC/server.py:98:14:98:20 | ControlFlowNode for request | PoC/server.py:98:5:98:10 | ControlFlowNode for author | -| PoC/server.py:99:5:99:10 | ControlFlowNode for mapper | PoC/server.py:102:9:102:14 | ControlFlowNode for mapper | -| flask_mongoengine_bad.py:1:26:1:32 | ControlFlowNode for ImportMember | flask_mongoengine_bad.py:1:26:1:32 | ControlFlowNode for request | -| flask_mongoengine_bad.py:1:26:1:32 | ControlFlowNode for request | flask_mongoengine_bad.py:19:21:19:27 | ControlFlowNode for request | -| flask_mongoengine_bad.py:1:26:1:32 | ControlFlowNode for request | flask_mongoengine_bad.py:26:21:26:27 | ControlFlowNode for request | -| flask_mongoengine_bad.py:19:5:19:17 | ControlFlowNode for unsafe_search | flask_mongoengine_bad.py:20:30:20:42 | ControlFlowNode for unsafe_search | -| flask_mongoengine_bad.py:19:21:19:27 | ControlFlowNode for request | flask_mongoengine_bad.py:19:5:19:17 | ControlFlowNode for unsafe_search | -| flask_mongoengine_bad.py:20:5:20:15 | ControlFlowNode for json_search | flask_mongoengine_bad.py:22:34:22:44 | ControlFlowNode for json_search | -| flask_mongoengine_bad.py:20:19:20:43 | ControlFlowNode for Attribute() | flask_mongoengine_bad.py:20:5:20:15 | ControlFlowNode for json_search | -| flask_mongoengine_bad.py:20:30:20:42 | ControlFlowNode for unsafe_search | flask_mongoengine_bad.py:20:19:20:43 | ControlFlowNode for Attribute() | -| flask_mongoengine_bad.py:26:5:26:17 | ControlFlowNode for unsafe_search | flask_mongoengine_bad.py:27:30:27:42 | ControlFlowNode for unsafe_search | -| flask_mongoengine_bad.py:26:21:26:27 | ControlFlowNode for request | flask_mongoengine_bad.py:26:5:26:17 | ControlFlowNode for unsafe_search | -| flask_mongoengine_bad.py:27:5:27:15 | ControlFlowNode for json_search | flask_mongoengine_bad.py:30:39:30:59 | ControlFlowNode for Dict | -| flask_mongoengine_bad.py:27:19:27:43 | ControlFlowNode for Attribute() | flask_mongoengine_bad.py:27:5:27:15 | ControlFlowNode for json_search | -| flask_mongoengine_bad.py:27:30:27:42 | ControlFlowNode for unsafe_search | flask_mongoengine_bad.py:27:19:27:43 | ControlFlowNode for Attribute() | -| flask_pymongo_bad.py:1:26:1:32 | ControlFlowNode for ImportMember | flask_pymongo_bad.py:1:26:1:32 | ControlFlowNode for request | -| flask_pymongo_bad.py:1:26:1:32 | ControlFlowNode for request | flask_pymongo_bad.py:11:21:11:27 | ControlFlowNode for request | -| flask_pymongo_bad.py:11:5:11:17 | ControlFlowNode for unsafe_search | flask_pymongo_bad.py:12:30:12:42 | ControlFlowNode for unsafe_search | -| flask_pymongo_bad.py:11:21:11:27 | ControlFlowNode for request | flask_pymongo_bad.py:11:5:11:17 | ControlFlowNode for unsafe_search | -| flask_pymongo_bad.py:12:5:12:15 | ControlFlowNode for json_search | flask_pymongo_bad.py:14:31:14:51 | ControlFlowNode for Dict | -| flask_pymongo_bad.py:12:19:12:43 | ControlFlowNode for Attribute() | flask_pymongo_bad.py:12:5:12:15 | ControlFlowNode for json_search | -| flask_pymongo_bad.py:12:30:12:42 | ControlFlowNode for unsafe_search | flask_pymongo_bad.py:12:19:12:43 | ControlFlowNode for Attribute() | -| mongoengine_bad.py:1:26:1:32 | ControlFlowNode for ImportMember | mongoengine_bad.py:1:26:1:32 | ControlFlowNode for request | -| mongoengine_bad.py:1:26:1:32 | ControlFlowNode for request | mongoengine_bad.py:18:21:18:27 | ControlFlowNode for request | -| mongoengine_bad.py:1:26:1:32 | ControlFlowNode for request | mongoengine_bad.py:26:21:26:27 | ControlFlowNode for request | -| mongoengine_bad.py:1:26:1:32 | ControlFlowNode for request | mongoengine_bad.py:34:21:34:27 | ControlFlowNode for request | -| mongoengine_bad.py:1:26:1:32 | ControlFlowNode for request | mongoengine_bad.py:42:21:42:27 | ControlFlowNode for request | -| mongoengine_bad.py:1:26:1:32 | ControlFlowNode for request | mongoengine_bad.py:50:21:50:27 | ControlFlowNode for request | -| mongoengine_bad.py:1:26:1:32 | ControlFlowNode for request | mongoengine_bad.py:57:21:57:27 | ControlFlowNode for request | -| mongoengine_bad.py:18:5:18:17 | ControlFlowNode for unsafe_search | mongoengine_bad.py:19:30:19:42 | ControlFlowNode for unsafe_search | -| mongoengine_bad.py:18:21:18:27 | ControlFlowNode for request | mongoengine_bad.py:18:5:18:17 | ControlFlowNode for unsafe_search | -| mongoengine_bad.py:19:5:19:15 | ControlFlowNode for json_search | mongoengine_bad.py:22:26:22:46 | ControlFlowNode for Dict | -| mongoengine_bad.py:19:19:19:43 | ControlFlowNode for Attribute() | mongoengine_bad.py:19:5:19:15 | ControlFlowNode for json_search | -| mongoengine_bad.py:19:30:19:42 | ControlFlowNode for unsafe_search | mongoengine_bad.py:19:19:19:43 | ControlFlowNode for Attribute() | -| mongoengine_bad.py:26:5:26:17 | ControlFlowNode for unsafe_search | mongoengine_bad.py:27:30:27:42 | ControlFlowNode for unsafe_search | -| mongoengine_bad.py:26:21:26:27 | ControlFlowNode for request | mongoengine_bad.py:26:5:26:17 | ControlFlowNode for unsafe_search | -| mongoengine_bad.py:27:5:27:15 | ControlFlowNode for json_search | mongoengine_bad.py:30:26:30:46 | ControlFlowNode for Dict | -| mongoengine_bad.py:27:19:27:43 | ControlFlowNode for Attribute() | mongoengine_bad.py:27:5:27:15 | ControlFlowNode for json_search | -| mongoengine_bad.py:27:30:27:42 | ControlFlowNode for unsafe_search | mongoengine_bad.py:27:19:27:43 | ControlFlowNode for Attribute() | -| mongoengine_bad.py:34:5:34:17 | ControlFlowNode for unsafe_search | mongoengine_bad.py:35:30:35:42 | ControlFlowNode for unsafe_search | -| mongoengine_bad.py:34:21:34:27 | ControlFlowNode for request | mongoengine_bad.py:34:5:34:17 | ControlFlowNode for unsafe_search | -| mongoengine_bad.py:35:5:35:15 | ControlFlowNode for json_search | mongoengine_bad.py:38:26:38:46 | ControlFlowNode for Dict | -| mongoengine_bad.py:35:19:35:43 | ControlFlowNode for Attribute() | mongoengine_bad.py:35:5:35:15 | ControlFlowNode for json_search | -| mongoengine_bad.py:35:30:35:42 | ControlFlowNode for unsafe_search | mongoengine_bad.py:35:19:35:43 | ControlFlowNode for Attribute() | -| mongoengine_bad.py:42:5:42:17 | ControlFlowNode for unsafe_search | mongoengine_bad.py:43:30:43:42 | ControlFlowNode for unsafe_search | -| mongoengine_bad.py:42:21:42:27 | ControlFlowNode for request | mongoengine_bad.py:42:5:42:17 | ControlFlowNode for unsafe_search | -| mongoengine_bad.py:43:5:43:15 | ControlFlowNode for json_search | mongoengine_bad.py:46:26:46:46 | ControlFlowNode for Dict | -| mongoengine_bad.py:43:19:43:43 | ControlFlowNode for Attribute() | mongoengine_bad.py:43:5:43:15 | ControlFlowNode for json_search | -| mongoengine_bad.py:43:30:43:42 | ControlFlowNode for unsafe_search | mongoengine_bad.py:43:19:43:43 | ControlFlowNode for Attribute() | -| mongoengine_bad.py:50:5:50:17 | ControlFlowNode for unsafe_search | mongoengine_bad.py:51:30:51:42 | ControlFlowNode for unsafe_search | -| mongoengine_bad.py:50:21:50:27 | ControlFlowNode for request | mongoengine_bad.py:50:5:50:17 | ControlFlowNode for unsafe_search | -| mongoengine_bad.py:51:5:51:15 | ControlFlowNode for json_search | mongoengine_bad.py:53:34:53:44 | ControlFlowNode for json_search | -| mongoengine_bad.py:51:19:51:43 | ControlFlowNode for Attribute() | mongoengine_bad.py:51:5:51:15 | ControlFlowNode for json_search | -| mongoengine_bad.py:51:30:51:42 | ControlFlowNode for unsafe_search | mongoengine_bad.py:51:19:51:43 | ControlFlowNode for Attribute() | -| mongoengine_bad.py:57:5:57:17 | ControlFlowNode for unsafe_search | mongoengine_bad.py:58:30:58:42 | ControlFlowNode for unsafe_search | -| mongoengine_bad.py:57:21:57:27 | ControlFlowNode for request | mongoengine_bad.py:57:5:57:17 | ControlFlowNode for unsafe_search | -| mongoengine_bad.py:58:5:58:15 | ControlFlowNode for json_search | mongoengine_bad.py:61:29:61:49 | ControlFlowNode for Dict | -| mongoengine_bad.py:58:19:58:43 | ControlFlowNode for Attribute() | mongoengine_bad.py:58:5:58:15 | ControlFlowNode for json_search | -| mongoengine_bad.py:58:30:58:42 | ControlFlowNode for unsafe_search | mongoengine_bad.py:58:19:58:43 | ControlFlowNode for Attribute() | -| pymongo_test.py:1:26:1:32 | ControlFlowNode for ImportMember | pymongo_test.py:1:26:1:32 | ControlFlowNode for request | -| pymongo_test.py:1:26:1:32 | ControlFlowNode for request | pymongo_test.py:12:21:12:27 | ControlFlowNode for request | -| pymongo_test.py:1:26:1:32 | ControlFlowNode for request | pymongo_test.py:29:27:29:33 | ControlFlowNode for request | -| pymongo_test.py:1:26:1:32 | ControlFlowNode for request | pymongo_test.py:39:27:39:33 | ControlFlowNode for request | -| pymongo_test.py:1:26:1:32 | ControlFlowNode for request | pymongo_test.py:52:26:52:32 | ControlFlowNode for request | -| pymongo_test.py:12:5:12:17 | ControlFlowNode for unsafe_search | pymongo_test.py:13:30:13:42 | ControlFlowNode for unsafe_search | -| pymongo_test.py:12:21:12:27 | ControlFlowNode for request | pymongo_test.py:12:5:12:17 | ControlFlowNode for unsafe_search | -| pymongo_test.py:13:5:13:15 | ControlFlowNode for json_search | pymongo_test.py:15:42:15:62 | ControlFlowNode for Dict | -| pymongo_test.py:13:19:13:43 | ControlFlowNode for Attribute() | pymongo_test.py:13:5:13:15 | ControlFlowNode for json_search | -| pymongo_test.py:13:30:13:42 | ControlFlowNode for unsafe_search | pymongo_test.py:13:19:13:43 | ControlFlowNode for Attribute() | -| pymongo_test.py:29:5:29:12 | ControlFlowNode for event_id | pymongo_test.py:33:45:33:72 | ControlFlowNode for Fstring | -| pymongo_test.py:29:16:29:51 | ControlFlowNode for Attribute() | pymongo_test.py:29:5:29:12 | ControlFlowNode for event_id | -| pymongo_test.py:29:27:29:33 | ControlFlowNode for request | pymongo_test.py:29:27:29:50 | ControlFlowNode for Subscript | -| pymongo_test.py:29:27:29:50 | ControlFlowNode for Subscript | pymongo_test.py:29:16:29:51 | ControlFlowNode for Attribute() | -| pymongo_test.py:33:45:33:72 | ControlFlowNode for Fstring | pymongo_test.py:33:34:33:73 | ControlFlowNode for Dict | -| pymongo_test.py:39:5:39:12 | ControlFlowNode for event_id | pymongo_test.py:43:45:43:72 | ControlFlowNode for Fstring | -| pymongo_test.py:39:16:39:51 | ControlFlowNode for Attribute() | pymongo_test.py:39:5:39:12 | ControlFlowNode for event_id | -| pymongo_test.py:39:27:39:33 | ControlFlowNode for request | pymongo_test.py:39:27:39:50 | ControlFlowNode for Subscript | -| pymongo_test.py:39:27:39:50 | ControlFlowNode for Subscript | pymongo_test.py:39:16:39:51 | ControlFlowNode for Attribute() | -| pymongo_test.py:43:45:43:72 | ControlFlowNode for Fstring | pymongo_test.py:43:34:43:73 | ControlFlowNode for Dict | -| pymongo_test.py:52:5:52:11 | ControlFlowNode for decoded | pymongo_test.py:55:17:55:23 | ControlFlowNode for decoded | -| pymongo_test.py:52:15:52:50 | ControlFlowNode for Attribute() | pymongo_test.py:52:5:52:11 | ControlFlowNode for decoded | -| pymongo_test.py:52:26:52:32 | ControlFlowNode for request | pymongo_test.py:52:26:52:49 | ControlFlowNode for Subscript | -| pymongo_test.py:52:26:52:49 | ControlFlowNode for Subscript | pymongo_test.py:52:15:52:50 | ControlFlowNode for Attribute() | -| pymongo_test.py:54:5:54:10 | ControlFlowNode for search | pymongo_test.py:59:25:59:56 | ControlFlowNode for Dict | -| pymongo_test.py:54:14:58:5 | ControlFlowNode for Dict | pymongo_test.py:54:5:54:10 | ControlFlowNode for search | -| pymongo_test.py:55:17:55:23 | ControlFlowNode for decoded | pymongo_test.py:54:14:58:5 | ControlFlowNode for Dict | -| pymongo_test.py:55:17:55:23 | ControlFlowNode for decoded | pymongo_test.py:61:25:61:57 | ControlFlowNode for Dict | -| pymongo_test.py:55:17:55:23 | ControlFlowNode for decoded | pymongo_test.py:62:25:62:42 | ControlFlowNode for Dict | -| pymongo_test.py:55:17:55:23 | ControlFlowNode for decoded | pymongo_test.py:63:25:63:31 | ControlFlowNode for decoded | +| PoC/server.py:1:26:1:32 | ControlFlowNode for ImportMember | PoC/server.py:1:26:1:32 | ControlFlowNode for request | provenance | | +| PoC/server.py:1:26:1:32 | ControlFlowNode for request | PoC/server.py:26:21:26:27 | ControlFlowNode for request | provenance | | +| PoC/server.py:1:26:1:32 | ControlFlowNode for request | PoC/server.py:43:14:43:20 | ControlFlowNode for request | provenance | | +| PoC/server.py:1:26:1:32 | ControlFlowNode for request | PoC/server.py:52:14:52:20 | ControlFlowNode for request | provenance | | +| PoC/server.py:1:26:1:32 | ControlFlowNode for request | PoC/server.py:77:14:77:20 | ControlFlowNode for request | provenance | | +| PoC/server.py:1:26:1:32 | ControlFlowNode for request | PoC/server.py:98:14:98:20 | ControlFlowNode for request | provenance | | +| PoC/server.py:26:5:26:17 | ControlFlowNode for author_string | PoC/server.py:27:25:27:37 | ControlFlowNode for author_string | provenance | | +| PoC/server.py:26:21:26:27 | ControlFlowNode for request | PoC/server.py:26:5:26:17 | ControlFlowNode for author_string | provenance | | +| PoC/server.py:27:5:27:10 | ControlFlowNode for author | PoC/server.py:30:27:30:44 | ControlFlowNode for Dict | provenance | | +| PoC/server.py:27:5:27:10 | ControlFlowNode for author | PoC/server.py:31:34:31:51 | ControlFlowNode for Dict | provenance | | +| PoC/server.py:27:14:27:38 | ControlFlowNode for Attribute() | PoC/server.py:27:5:27:10 | ControlFlowNode for author | provenance | | +| PoC/server.py:27:25:27:37 | ControlFlowNode for author_string | PoC/server.py:27:14:27:38 | ControlFlowNode for Attribute() | provenance | | +| PoC/server.py:43:5:43:10 | ControlFlowNode for author | PoC/server.py:47:38:47:67 | ControlFlowNode for BinaryExpr | provenance | | +| PoC/server.py:43:14:43:20 | ControlFlowNode for request | PoC/server.py:43:5:43:10 | ControlFlowNode for author | provenance | | +| PoC/server.py:47:38:47:67 | ControlFlowNode for BinaryExpr | PoC/server.py:47:27:47:68 | ControlFlowNode for Dict | provenance | | +| PoC/server.py:52:5:52:10 | ControlFlowNode for author | PoC/server.py:54:17:54:70 | ControlFlowNode for BinaryExpr | provenance | | +| PoC/server.py:52:14:52:20 | ControlFlowNode for request | PoC/server.py:52:5:52:10 | ControlFlowNode for author | provenance | | +| PoC/server.py:53:5:53:10 | ControlFlowNode for search | PoC/server.py:61:27:61:58 | ControlFlowNode for Dict | provenance | | +| PoC/server.py:53:14:57:5 | ControlFlowNode for Dict | PoC/server.py:53:5:53:10 | ControlFlowNode for search | provenance | | +| PoC/server.py:54:17:54:70 | ControlFlowNode for BinaryExpr | PoC/server.py:53:14:57:5 | ControlFlowNode for Dict | provenance | | +| PoC/server.py:77:5:77:10 | ControlFlowNode for author | PoC/server.py:80:23:80:101 | ControlFlowNode for BinaryExpr | provenance | | +| PoC/server.py:77:14:77:20 | ControlFlowNode for request | PoC/server.py:77:5:77:10 | ControlFlowNode for author | provenance | | +| PoC/server.py:78:5:78:15 | ControlFlowNode for accumulator | PoC/server.py:84:5:84:9 | ControlFlowNode for group | provenance | | +| PoC/server.py:78:19:83:5 | ControlFlowNode for Dict | PoC/server.py:78:5:78:15 | ControlFlowNode for accumulator | provenance | | +| PoC/server.py:80:23:80:101 | ControlFlowNode for BinaryExpr | PoC/server.py:78:19:83:5 | ControlFlowNode for Dict | provenance | | +| PoC/server.py:84:5:84:9 | ControlFlowNode for group | PoC/server.py:91:29:91:47 | ControlFlowNode for Dict | provenance | | +| PoC/server.py:84:5:84:9 | ControlFlowNode for group | PoC/server.py:92:38:92:56 | ControlFlowNode for Dict | provenance | | +| PoC/server.py:98:5:98:10 | ControlFlowNode for author | PoC/server.py:99:5:99:10 | ControlFlowNode for mapper | provenance | | +| PoC/server.py:98:14:98:20 | ControlFlowNode for request | PoC/server.py:98:5:98:10 | ControlFlowNode for author | provenance | | +| PoC/server.py:99:5:99:10 | ControlFlowNode for mapper | PoC/server.py:102:9:102:14 | ControlFlowNode for mapper | provenance | | +| flask_mongoengine_bad.py:1:26:1:32 | ControlFlowNode for ImportMember | flask_mongoengine_bad.py:1:26:1:32 | ControlFlowNode for request | provenance | | +| flask_mongoengine_bad.py:1:26:1:32 | ControlFlowNode for request | flask_mongoengine_bad.py:19:21:19:27 | ControlFlowNode for request | provenance | | +| flask_mongoengine_bad.py:1:26:1:32 | ControlFlowNode for request | flask_mongoengine_bad.py:26:21:26:27 | ControlFlowNode for request | provenance | | +| flask_mongoengine_bad.py:19:5:19:17 | ControlFlowNode for unsafe_search | flask_mongoengine_bad.py:20:30:20:42 | ControlFlowNode for unsafe_search | provenance | | +| flask_mongoengine_bad.py:19:21:19:27 | ControlFlowNode for request | flask_mongoengine_bad.py:19:5:19:17 | ControlFlowNode for unsafe_search | provenance | | +| flask_mongoengine_bad.py:20:5:20:15 | ControlFlowNode for json_search | flask_mongoengine_bad.py:22:34:22:44 | ControlFlowNode for json_search | provenance | | +| flask_mongoengine_bad.py:20:19:20:43 | ControlFlowNode for Attribute() | flask_mongoengine_bad.py:20:5:20:15 | ControlFlowNode for json_search | provenance | | +| flask_mongoengine_bad.py:20:30:20:42 | ControlFlowNode for unsafe_search | flask_mongoengine_bad.py:20:19:20:43 | ControlFlowNode for Attribute() | provenance | | +| flask_mongoengine_bad.py:26:5:26:17 | ControlFlowNode for unsafe_search | flask_mongoengine_bad.py:27:30:27:42 | ControlFlowNode for unsafe_search | provenance | | +| flask_mongoengine_bad.py:26:21:26:27 | ControlFlowNode for request | flask_mongoengine_bad.py:26:5:26:17 | ControlFlowNode for unsafe_search | provenance | | +| flask_mongoengine_bad.py:27:5:27:15 | ControlFlowNode for json_search | flask_mongoengine_bad.py:30:39:30:59 | ControlFlowNode for Dict | provenance | | +| flask_mongoengine_bad.py:27:19:27:43 | ControlFlowNode for Attribute() | flask_mongoengine_bad.py:27:5:27:15 | ControlFlowNode for json_search | provenance | | +| flask_mongoengine_bad.py:27:30:27:42 | ControlFlowNode for unsafe_search | flask_mongoengine_bad.py:27:19:27:43 | ControlFlowNode for Attribute() | provenance | | +| flask_pymongo_bad.py:1:26:1:32 | ControlFlowNode for ImportMember | flask_pymongo_bad.py:1:26:1:32 | ControlFlowNode for request | provenance | | +| flask_pymongo_bad.py:1:26:1:32 | ControlFlowNode for request | flask_pymongo_bad.py:11:21:11:27 | ControlFlowNode for request | provenance | | +| flask_pymongo_bad.py:11:5:11:17 | ControlFlowNode for unsafe_search | flask_pymongo_bad.py:12:30:12:42 | ControlFlowNode for unsafe_search | provenance | | +| flask_pymongo_bad.py:11:21:11:27 | ControlFlowNode for request | flask_pymongo_bad.py:11:5:11:17 | ControlFlowNode for unsafe_search | provenance | | +| flask_pymongo_bad.py:12:5:12:15 | ControlFlowNode for json_search | flask_pymongo_bad.py:14:31:14:51 | ControlFlowNode for Dict | provenance | | +| flask_pymongo_bad.py:12:19:12:43 | ControlFlowNode for Attribute() | flask_pymongo_bad.py:12:5:12:15 | ControlFlowNode for json_search | provenance | | +| flask_pymongo_bad.py:12:30:12:42 | ControlFlowNode for unsafe_search | flask_pymongo_bad.py:12:19:12:43 | ControlFlowNode for Attribute() | provenance | | +| mongoengine_bad.py:1:26:1:32 | ControlFlowNode for ImportMember | mongoengine_bad.py:1:26:1:32 | ControlFlowNode for request | provenance | | +| mongoengine_bad.py:1:26:1:32 | ControlFlowNode for request | mongoengine_bad.py:18:21:18:27 | ControlFlowNode for request | provenance | | +| mongoengine_bad.py:1:26:1:32 | ControlFlowNode for request | mongoengine_bad.py:26:21:26:27 | ControlFlowNode for request | provenance | | +| mongoengine_bad.py:1:26:1:32 | ControlFlowNode for request | mongoengine_bad.py:34:21:34:27 | ControlFlowNode for request | provenance | | +| mongoengine_bad.py:1:26:1:32 | ControlFlowNode for request | mongoengine_bad.py:42:21:42:27 | ControlFlowNode for request | provenance | | +| mongoengine_bad.py:1:26:1:32 | ControlFlowNode for request | mongoengine_bad.py:50:21:50:27 | ControlFlowNode for request | provenance | | +| mongoengine_bad.py:1:26:1:32 | ControlFlowNode for request | mongoengine_bad.py:57:21:57:27 | ControlFlowNode for request | provenance | | +| mongoengine_bad.py:18:5:18:17 | ControlFlowNode for unsafe_search | mongoengine_bad.py:19:30:19:42 | ControlFlowNode for unsafe_search | provenance | | +| mongoengine_bad.py:18:21:18:27 | ControlFlowNode for request | mongoengine_bad.py:18:5:18:17 | ControlFlowNode for unsafe_search | provenance | | +| mongoengine_bad.py:19:5:19:15 | ControlFlowNode for json_search | mongoengine_bad.py:22:26:22:46 | ControlFlowNode for Dict | provenance | | +| mongoengine_bad.py:19:19:19:43 | ControlFlowNode for Attribute() | mongoengine_bad.py:19:5:19:15 | ControlFlowNode for json_search | provenance | | +| mongoengine_bad.py:19:30:19:42 | ControlFlowNode for unsafe_search | mongoengine_bad.py:19:19:19:43 | ControlFlowNode for Attribute() | provenance | | +| mongoengine_bad.py:26:5:26:17 | ControlFlowNode for unsafe_search | mongoengine_bad.py:27:30:27:42 | ControlFlowNode for unsafe_search | provenance | | +| mongoengine_bad.py:26:21:26:27 | ControlFlowNode for request | mongoengine_bad.py:26:5:26:17 | ControlFlowNode for unsafe_search | provenance | | +| mongoengine_bad.py:27:5:27:15 | ControlFlowNode for json_search | mongoengine_bad.py:30:26:30:46 | ControlFlowNode for Dict | provenance | | +| mongoengine_bad.py:27:19:27:43 | ControlFlowNode for Attribute() | mongoengine_bad.py:27:5:27:15 | ControlFlowNode for json_search | provenance | | +| mongoengine_bad.py:27:30:27:42 | ControlFlowNode for unsafe_search | mongoengine_bad.py:27:19:27:43 | ControlFlowNode for Attribute() | provenance | | +| mongoengine_bad.py:34:5:34:17 | ControlFlowNode for unsafe_search | mongoengine_bad.py:35:30:35:42 | ControlFlowNode for unsafe_search | provenance | | +| mongoengine_bad.py:34:21:34:27 | ControlFlowNode for request | mongoengine_bad.py:34:5:34:17 | ControlFlowNode for unsafe_search | provenance | | +| mongoengine_bad.py:35:5:35:15 | ControlFlowNode for json_search | mongoengine_bad.py:38:26:38:46 | ControlFlowNode for Dict | provenance | | +| mongoengine_bad.py:35:19:35:43 | ControlFlowNode for Attribute() | mongoengine_bad.py:35:5:35:15 | ControlFlowNode for json_search | provenance | | +| mongoengine_bad.py:35:30:35:42 | ControlFlowNode for unsafe_search | mongoengine_bad.py:35:19:35:43 | ControlFlowNode for Attribute() | provenance | | +| mongoengine_bad.py:42:5:42:17 | ControlFlowNode for unsafe_search | mongoengine_bad.py:43:30:43:42 | ControlFlowNode for unsafe_search | provenance | | +| mongoengine_bad.py:42:21:42:27 | ControlFlowNode for request | mongoengine_bad.py:42:5:42:17 | ControlFlowNode for unsafe_search | provenance | | +| mongoengine_bad.py:43:5:43:15 | ControlFlowNode for json_search | mongoengine_bad.py:46:26:46:46 | ControlFlowNode for Dict | provenance | | +| mongoengine_bad.py:43:19:43:43 | ControlFlowNode for Attribute() | mongoengine_bad.py:43:5:43:15 | ControlFlowNode for json_search | provenance | | +| mongoengine_bad.py:43:30:43:42 | ControlFlowNode for unsafe_search | mongoengine_bad.py:43:19:43:43 | ControlFlowNode for Attribute() | provenance | | +| mongoengine_bad.py:50:5:50:17 | ControlFlowNode for unsafe_search | mongoengine_bad.py:51:30:51:42 | ControlFlowNode for unsafe_search | provenance | | +| mongoengine_bad.py:50:21:50:27 | ControlFlowNode for request | mongoengine_bad.py:50:5:50:17 | ControlFlowNode for unsafe_search | provenance | | +| mongoengine_bad.py:51:5:51:15 | ControlFlowNode for json_search | mongoengine_bad.py:53:34:53:44 | ControlFlowNode for json_search | provenance | | +| mongoengine_bad.py:51:19:51:43 | ControlFlowNode for Attribute() | mongoengine_bad.py:51:5:51:15 | ControlFlowNode for json_search | provenance | | +| mongoengine_bad.py:51:30:51:42 | ControlFlowNode for unsafe_search | mongoengine_bad.py:51:19:51:43 | ControlFlowNode for Attribute() | provenance | | +| mongoengine_bad.py:57:5:57:17 | ControlFlowNode for unsafe_search | mongoengine_bad.py:58:30:58:42 | ControlFlowNode for unsafe_search | provenance | | +| mongoengine_bad.py:57:21:57:27 | ControlFlowNode for request | mongoengine_bad.py:57:5:57:17 | ControlFlowNode for unsafe_search | provenance | | +| mongoengine_bad.py:58:5:58:15 | ControlFlowNode for json_search | mongoengine_bad.py:61:29:61:49 | ControlFlowNode for Dict | provenance | | +| mongoengine_bad.py:58:19:58:43 | ControlFlowNode for Attribute() | mongoengine_bad.py:58:5:58:15 | ControlFlowNode for json_search | provenance | | +| mongoengine_bad.py:58:30:58:42 | ControlFlowNode for unsafe_search | mongoengine_bad.py:58:19:58:43 | ControlFlowNode for Attribute() | provenance | | +| pymongo_test.py:1:26:1:32 | ControlFlowNode for ImportMember | pymongo_test.py:1:26:1:32 | ControlFlowNode for request | provenance | | +| pymongo_test.py:1:26:1:32 | ControlFlowNode for request | pymongo_test.py:12:21:12:27 | ControlFlowNode for request | provenance | | +| pymongo_test.py:1:26:1:32 | ControlFlowNode for request | pymongo_test.py:29:27:29:33 | ControlFlowNode for request | provenance | | +| pymongo_test.py:1:26:1:32 | ControlFlowNode for request | pymongo_test.py:39:27:39:33 | ControlFlowNode for request | provenance | | +| pymongo_test.py:1:26:1:32 | ControlFlowNode for request | pymongo_test.py:52:26:52:32 | ControlFlowNode for request | provenance | | +| pymongo_test.py:12:5:12:17 | ControlFlowNode for unsafe_search | pymongo_test.py:13:30:13:42 | ControlFlowNode for unsafe_search | provenance | | +| pymongo_test.py:12:21:12:27 | ControlFlowNode for request | pymongo_test.py:12:5:12:17 | ControlFlowNode for unsafe_search | provenance | | +| pymongo_test.py:13:5:13:15 | ControlFlowNode for json_search | pymongo_test.py:15:42:15:62 | ControlFlowNode for Dict | provenance | | +| pymongo_test.py:13:19:13:43 | ControlFlowNode for Attribute() | pymongo_test.py:13:5:13:15 | ControlFlowNode for json_search | provenance | | +| pymongo_test.py:13:30:13:42 | ControlFlowNode for unsafe_search | pymongo_test.py:13:19:13:43 | ControlFlowNode for Attribute() | provenance | | +| pymongo_test.py:29:5:29:12 | ControlFlowNode for event_id | pymongo_test.py:33:45:33:72 | ControlFlowNode for Fstring | provenance | | +| pymongo_test.py:29:16:29:51 | ControlFlowNode for Attribute() | pymongo_test.py:29:5:29:12 | ControlFlowNode for event_id | provenance | | +| pymongo_test.py:29:27:29:33 | ControlFlowNode for request | pymongo_test.py:29:27:29:50 | ControlFlowNode for Subscript | provenance | | +| pymongo_test.py:29:27:29:50 | ControlFlowNode for Subscript | pymongo_test.py:29:16:29:51 | ControlFlowNode for Attribute() | provenance | | +| pymongo_test.py:33:45:33:72 | ControlFlowNode for Fstring | pymongo_test.py:33:34:33:73 | ControlFlowNode for Dict | provenance | | +| pymongo_test.py:39:5:39:12 | ControlFlowNode for event_id | pymongo_test.py:43:45:43:72 | ControlFlowNode for Fstring | provenance | | +| pymongo_test.py:39:16:39:51 | ControlFlowNode for Attribute() | pymongo_test.py:39:5:39:12 | ControlFlowNode for event_id | provenance | | +| pymongo_test.py:39:27:39:33 | ControlFlowNode for request | pymongo_test.py:39:27:39:50 | ControlFlowNode for Subscript | provenance | | +| pymongo_test.py:39:27:39:50 | ControlFlowNode for Subscript | pymongo_test.py:39:16:39:51 | ControlFlowNode for Attribute() | provenance | | +| pymongo_test.py:43:45:43:72 | ControlFlowNode for Fstring | pymongo_test.py:43:34:43:73 | ControlFlowNode for Dict | provenance | | +| pymongo_test.py:52:5:52:11 | ControlFlowNode for decoded | pymongo_test.py:55:17:55:23 | ControlFlowNode for decoded | provenance | | +| pymongo_test.py:52:15:52:50 | ControlFlowNode for Attribute() | pymongo_test.py:52:5:52:11 | ControlFlowNode for decoded | provenance | | +| pymongo_test.py:52:26:52:32 | ControlFlowNode for request | pymongo_test.py:52:26:52:49 | ControlFlowNode for Subscript | provenance | | +| pymongo_test.py:52:26:52:49 | ControlFlowNode for Subscript | pymongo_test.py:52:15:52:50 | ControlFlowNode for Attribute() | provenance | | +| pymongo_test.py:54:5:54:10 | ControlFlowNode for search | pymongo_test.py:59:25:59:56 | ControlFlowNode for Dict | provenance | | +| pymongo_test.py:54:14:58:5 | ControlFlowNode for Dict | pymongo_test.py:54:5:54:10 | ControlFlowNode for search | provenance | | +| pymongo_test.py:55:17:55:23 | ControlFlowNode for decoded | pymongo_test.py:54:14:58:5 | ControlFlowNode for Dict | provenance | | +| pymongo_test.py:55:17:55:23 | ControlFlowNode for decoded | pymongo_test.py:61:25:61:57 | ControlFlowNode for Dict | provenance | | +| pymongo_test.py:55:17:55:23 | ControlFlowNode for decoded | pymongo_test.py:62:25:62:42 | ControlFlowNode for Dict | provenance | | +| pymongo_test.py:55:17:55:23 | ControlFlowNode for decoded | pymongo_test.py:63:25:63:31 | ControlFlowNode for decoded | provenance | | nodes | PoC/server.py:1:26:1:32 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | | PoC/server.py:1:26:1:32 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | From 4fcb90298d7a27225577f6c4fdd507e5639f1921 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Thu, 8 Feb 2024 15:18:07 +0100 Subject: [PATCH 121/378] Dataflow: Add change note. --- shared/dataflow/change-notes/2024-02-08-edges-provenance.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 shared/dataflow/change-notes/2024-02-08-edges-provenance.md diff --git a/shared/dataflow/change-notes/2024-02-08-edges-provenance.md b/shared/dataflow/change-notes/2024-02-08-edges-provenance.md new file mode 100644 index 00000000000..4cf0fd39d4b --- /dev/null +++ b/shared/dataflow/change-notes/2024-02-08-edges-provenance.md @@ -0,0 +1,4 @@ +--- +category: breaking +--- +* The `edges` predicate contained in `PathGraph` now contains two additional columns for propagating model provenance information. This is primarily an internal change without any impact on any APIs, except for specialised queries making use of `MergePathGraph` in conjunction with custom `PathGraph` implementations. Such queries will need to be updated to reference the two new columns. This is expected to be very rare, as `MergePathGraph` is an advanced feature, but it is a breaking change for any such affected queries. From 9785ce49364355bec17f37029621c18a344a0d35 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Fri, 9 Feb 2024 12:29:56 +0100 Subject: [PATCH 122/378] C#: Actually cache module `Cached` --- .../semmle/code/csharp/dataflow/internal/DataFlowDispatch.qll | 1 + 1 file changed, 1 insertion(+) diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowDispatch.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowDispatch.qll index e9782315711..3616a6cbce6 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowDispatch.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowDispatch.qll @@ -89,6 +89,7 @@ class DataFlowSummarizedCallable instanceof FlowSummary::SummarizedCallable { string toString() { result = super.toString() } } +cached private module Cached { /** * The following heuristic is used to rank when to use source code or when to use summaries for DataFlowCallables. From 1b91695934f7f9af4ca9827b9297100f2c96d407 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Fri, 9 Feb 2024 11:57:23 +0000 Subject: [PATCH 123/378] Kotlin 2: Accept some location changes in library-tests/methods --- java/ql/test-kotlin2/library-tests/methods/methods.expected | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/java/ql/test-kotlin2/library-tests/methods/methods.expected b/java/ql/test-kotlin2/library-tests/methods/methods.expected index b1550468e0a..36fb999e4ae 100644 --- a/java/ql/test-kotlin2/library-tests/methods/methods.expected +++ b/java/ql/test-kotlin2/library-tests/methods/methods.expected @@ -12,9 +12,9 @@ methods | dataClass.kt:1:1:1:47 | DataClass | dataClass.kt:1:34:1:46 | component2 | component2() | final, public | Compiler generated | | dataClass.kt:1:1:1:47 | DataClass | dataClass.kt:1:34:1:46 | getY | getY() | final, public | Compiler generated | | dataClass.kt:1:1:1:47 | DataClass | dataClass.kt:1:34:1:46 | setY | setY(java.lang.String) | final, public | Compiler generated | -| delegates.kt:3:1:12:1 | MyClass | delegates.kt:4:5:6:5 | getLazyProp | getLazyProp() | final, public | Compiler generated | -| delegates.kt:3:1:12:1 | MyClass | delegates.kt:8:5:11:5 | getObservableProp | getObservableProp() | final, public | Compiler generated | +| delegates.kt:3:1:12:1 | MyClass | delegates.kt:4:21:6:5 | getLazyProp | getLazyProp() | final, public | Compiler generated | | delegates.kt:3:1:12:1 | MyClass | delegates.kt:8:5:11:5 | setObservableProp | setObservableProp(java.lang.String) | final, public | Compiler generated | +| delegates.kt:3:1:12:1 | MyClass | delegates.kt:8:35:11:5 | getObservableProp | getObservableProp() | final, public | Compiler generated | | delegates.kt:4:21:6:5 | new KProperty1(...) { ... } | delegates.kt:4:21:6:5 | get | get(MyClass) | override, public | | | delegates.kt:4:21:6:5 | new KProperty1(...) { ... } | delegates.kt:4:21:6:5 | invoke | invoke(MyClass) | override, public | | | delegates.kt:4:26:6:5 | new Function0(...) { ... } | delegates.kt:4:26:6:5 | invoke | invoke() | final, override, public | | From b836260b9a8da6a8d8f0bc2b9ece323a1985b975 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Fri, 9 Feb 2024 13:15:02 +0000 Subject: [PATCH 124/378] Kotlin 2: Accept some test changes I'm not sure these are an improvement, but they bring Kotlin 2 back in line with Kotlin 1. --- .../test-kotlin2/library-tests/methods/methods.expected | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/java/ql/test-kotlin2/library-tests/methods/methods.expected b/java/ql/test-kotlin2/library-tests/methods/methods.expected index 36fb999e4ae..330c5b2f919 100644 --- a/java/ql/test-kotlin2/library-tests/methods/methods.expected +++ b/java/ql/test-kotlin2/library-tests/methods/methods.expected @@ -2,14 +2,14 @@ methods | clinit.kt:0:0:0:0 | ClinitKt | clinit.kt:0:0:0:0 | | () | static | Compiler generated | | clinit.kt:0:0:0:0 | ClinitKt | clinit.kt:3:1:3:24 | getTopLevelInt | getTopLevelInt() | final, public, static | Compiler generated | | clinit.kt:0:0:0:0 | ClinitKt | clinit.kt:3:1:3:24 | setTopLevelInt | setTopLevelInt(int) | final, public, static | Compiler generated | +| dataClass.kt:1:1:1:47 | DataClass | dataClass.kt:0:0:0:0 | component1 | component1() | final, public | Compiler generated | +| dataClass.kt:1:1:1:47 | DataClass | dataClass.kt:0:0:0:0 | component2 | component2() | final, public | Compiler generated | +| dataClass.kt:1:1:1:47 | DataClass | dataClass.kt:0:0:0:0 | copy | copy(int,java.lang.String) | final, public | Compiler generated | +| dataClass.kt:1:1:1:47 | DataClass | dataClass.kt:0:0:0:0 | copy$default | copy$default(DataClass,int,java.lang.String,int,java.lang.Object) | public, static | Compiler generated | | dataClass.kt:1:1:1:47 | DataClass | dataClass.kt:0:0:0:0 | equals | equals(java.lang.Object) | override, public | Compiler generated | | dataClass.kt:1:1:1:47 | DataClass | dataClass.kt:0:0:0:0 | hashCode | hashCode() | override, public | Compiler generated | | dataClass.kt:1:1:1:47 | DataClass | dataClass.kt:0:0:0:0 | toString | toString() | override, public | Compiler generated | -| dataClass.kt:1:1:1:47 | DataClass | dataClass.kt:1:1:1:47 | copy | copy(int,java.lang.String) | final, public | Compiler generated | -| dataClass.kt:1:1:1:47 | DataClass | dataClass.kt:1:1:1:47 | copy$default | copy$default(DataClass,int,java.lang.String,int,java.lang.Object) | public, static | Compiler generated | -| dataClass.kt:1:1:1:47 | DataClass | dataClass.kt:1:22:1:31 | component1 | component1() | final, public | Compiler generated | | dataClass.kt:1:1:1:47 | DataClass | dataClass.kt:1:22:1:31 | getX | getX() | final, public | Compiler generated | -| dataClass.kt:1:1:1:47 | DataClass | dataClass.kt:1:34:1:46 | component2 | component2() | final, public | Compiler generated | | dataClass.kt:1:1:1:47 | DataClass | dataClass.kt:1:34:1:46 | getY | getY() | final, public | Compiler generated | | dataClass.kt:1:1:1:47 | DataClass | dataClass.kt:1:34:1:46 | setY | setY(java.lang.String) | final, public | Compiler generated | | delegates.kt:3:1:12:1 | MyClass | delegates.kt:4:21:6:5 | getLazyProp | getLazyProp() | final, public | Compiler generated | From be4413ffc894af6ff8fe32695681980bdd2438e7 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Fri, 9 Feb 2024 13:19:26 +0000 Subject: [PATCH 125/378] Kotlin 2: Accept changes in library-tests/methods/parameters.expected These mostly make things consistent with Kotlin 1. --- .../library-tests/methods/parameters.expected | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/java/ql/test-kotlin2/library-tests/methods/parameters.expected b/java/ql/test-kotlin2/library-tests/methods/parameters.expected index f4c60ab6ac4..76538cae775 100644 --- a/java/ql/test-kotlin2/library-tests/methods/parameters.expected +++ b/java/ql/test-kotlin2/library-tests/methods/parameters.expected @@ -1,12 +1,12 @@ | clinit.kt:3:1:3:24 | setTopLevelInt | clinit.kt:3:1:3:24 | | 0 | +| dataClass.kt:0:0:0:0 | copy | dataClass.kt:0:0:0:0 | x | 0 | +| dataClass.kt:0:0:0:0 | copy | dataClass.kt:0:0:0:0 | y | 1 | +| dataClass.kt:0:0:0:0 | copy$default | dataClass.kt:0:0:0:0 | p0 | 0 | +| dataClass.kt:0:0:0:0 | copy$default | dataClass.kt:0:0:0:0 | p1 | 1 | +| dataClass.kt:0:0:0:0 | copy$default | dataClass.kt:0:0:0:0 | p2 | 2 | +| dataClass.kt:0:0:0:0 | copy$default | dataClass.kt:0:0:0:0 | p3 | 3 | +| dataClass.kt:0:0:0:0 | copy$default | dataClass.kt:0:0:0:0 | p4 | 4 | | dataClass.kt:0:0:0:0 | equals | dataClass.kt:0:0:0:0 | other | 0 | -| dataClass.kt:1:1:1:47 | copy | dataClass.kt:1:22:1:31 | x | 0 | -| dataClass.kt:1:1:1:47 | copy | dataClass.kt:1:34:1:46 | y | 1 | -| dataClass.kt:1:1:1:47 | copy$default | dataClass.kt:1:1:1:47 | p0 | 0 | -| dataClass.kt:1:1:1:47 | copy$default | dataClass.kt:1:1:1:47 | p1 | 1 | -| dataClass.kt:1:1:1:47 | copy$default | dataClass.kt:1:1:1:47 | p2 | 2 | -| dataClass.kt:1:1:1:47 | copy$default | dataClass.kt:1:1:1:47 | p3 | 3 | -| dataClass.kt:1:1:1:47 | copy$default | dataClass.kt:1:1:1:47 | p4 | 4 | | dataClass.kt:1:34:1:46 | setY | dataClass.kt:1:34:1:46 | | 0 | | delegates.kt:4:21:6:5 | get | delegates.kt:4:21:6:5 | a0 | 0 | | delegates.kt:4:21:6:5 | invoke | delegates.kt:4:21:6:5 | a0 | 0 | From 0547c877c2d02a2abaffc42cbef2fc8b02c933bc Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Fri, 9 Feb 2024 13:34:56 +0000 Subject: [PATCH 126/378] Kotlin 2: Accept some location changes in library-tests/methods/exprs.expected --- .../library-tests/methods/exprs.expected | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/java/ql/test-kotlin2/library-tests/methods/exprs.expected b/java/ql/test-kotlin2/library-tests/methods/exprs.expected index 7c494f6e392..83068826c19 100644 --- a/java/ql/test-kotlin2/library-tests/methods/exprs.expected +++ b/java/ql/test-kotlin2/library-tests/methods/exprs.expected @@ -277,19 +277,19 @@ | enumClass.kt:8:3:11:4 | VAL | TypeAccess | | enumClass.kt:8:3:11:4 | new EnumWithFunctions(...) | ClassInstanceExpr | | enumClass.kt:8:3:11:4 | new VAL(...) | ClassInstanceExpr | -| enumClass.kt:9:14:9:30 | int | TypeAccess | +| enumClass.kt:9:5:9:30 | int | TypeAccess | | enumClass.kt:9:20:9:25 | int | TypeAccess | | enumClass.kt:9:30:9:30 | i | VarAccess | -| enumClass.kt:10:14:10:42 | int | TypeAccess | +| enumClass.kt:10:5:10:42 | int | TypeAccess | | enumClass.kt:10:20:10:25 | int | TypeAccess | | enumClass.kt:10:30:10:33 | this | ThisAccess | | enumClass.kt:10:30:10:38 | f(...) | MethodCall | | enumClass.kt:10:30:10:42 | ... + ... | AddExpr | | enumClass.kt:10:37:10:37 | i | VarAccess | | enumClass.kt:10:42:10:42 | i | VarAccess | -| enumClass.kt:13:12:13:29 | int | TypeAccess | +| enumClass.kt:13:3:13:29 | int | TypeAccess | | enumClass.kt:13:18:13:23 | int | TypeAccess | -| enumClass.kt:14:12:14:29 | int | TypeAccess | +| enumClass.kt:14:3:14:29 | int | TypeAccess | | enumClass.kt:14:18:14:23 | int | TypeAccess | | methods2.kt:4:1:5:1 | Unit | TypeAccess | | methods2.kt:4:26:4:31 | int | TypeAccess | @@ -341,15 +341,15 @@ | methods4.kt:7:5:7:34 | Unit | TypeAccess | | methods4.kt:7:11:7:29 | InsideNestedTest | TypeAccess | | methods5.kt:3:1:11:1 | Unit | TypeAccess | -| methods5.kt:4:7:4:7 | x | LocalVariableDeclExpr | +| methods5.kt:4:3:4:11 | x | LocalVariableDeclExpr | | methods5.kt:4:11:4:11 | 5 | IntegerLiteral | | methods5.kt:5:3:5:27 | int | TypeAccess | | methods5.kt:5:13:5:18 | int | TypeAccess | | methods5.kt:5:23:5:23 | i | VarAccess | | methods5.kt:5:23:5:27 | ... + ... | AddExpr | | methods5.kt:5:27:5:27 | x | VarAccess | -| methods5.kt:6:3:6:3 | x | VarAccess | | methods5.kt:6:3:6:7 | ...=... | AssignExpr | +| methods5.kt:6:3:6:7 | x | VarAccess | | methods5.kt:6:7:6:7 | 6 | IntegerLiteral | | methods5.kt:7:3:7:15 | | ImplicitCoercionToUnitExpr | | methods5.kt:7:3:7:15 | Object | TypeAccess | @@ -358,8 +358,8 @@ | methods5.kt:7:3:7:15 | a(...) | MethodCall | | methods5.kt:7:3:7:15 | new (...) | ClassInstanceExpr | | methods5.kt:7:13:7:14 | 42 | IntegerLiteral | -| methods5.kt:8:3:8:3 | x | VarAccess | | methods5.kt:8:3:8:7 | ...=... | AssignExpr | +| methods5.kt:8:3:8:7 | x | VarAccess | | methods5.kt:8:7:8:7 | 7 | IntegerLiteral | | methods5.kt:9:3:9:32 | int | TypeAccess | | methods5.kt:9:12:9:17 | C1 | TypeAccess | @@ -376,7 +376,7 @@ | methods5.kt:10:13:10:18 | | ImplicitCoercionToUnitExpr | | methods5.kt:10:13:10:18 | Unit | TypeAccess | | methods5.kt:10:16:10:17 | 42 | IntegerLiteral | -| methods6.kt:3:9:4:1 | Unit | TypeAccess | +| methods6.kt:3:1:4:1 | Unit | TypeAccess | | methods.kt:2:1:3:1 | Unit | TypeAccess | | methods.kt:2:20:2:25 | int | TypeAccess | | methods.kt:2:28:2:33 | int | TypeAccess | @@ -394,9 +394,9 @@ | methods.kt:11:9:11:28 | topLevelMethod(...) | MethodCall | | methods.kt:11:24:11:24 | b | VarAccess | | methods.kt:11:27:11:27 | 4 | IntegerLiteral | -| methods.kt:14:12:14:29 | Unit | TypeAccess | -| methods.kt:15:15:15:35 | Unit | TypeAccess | -| methods.kt:16:13:16:31 | Unit | TypeAccess | -| methods.kt:17:14:17:33 | Unit | TypeAccess | +| methods.kt:14:5:14:29 | Unit | TypeAccess | +| methods.kt:15:5:15:35 | Unit | TypeAccess | +| methods.kt:16:5:16:31 | Unit | TypeAccess | +| methods.kt:17:5:17:33 | Unit | TypeAccess | | methods.kt:18:5:18:36 | Unit | TypeAccess | -| methods.kt:19:12:19:29 | Unit | TypeAccess | +| methods.kt:19:5:19:29 | Unit | TypeAccess | From 0c43ad45b4ab610af401ec1314da699f0021fd73 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Wed, 7 Feb 2024 13:51:22 +0100 Subject: [PATCH 127/378] Ruby: Add another captured variable data flow test --- .../dataflow/global/Flow.expected | 12 ++++++++++ .../dataflow/global/captured_variables.rb | 22 +++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/ruby/ql/test/library-tests/dataflow/global/Flow.expected b/ruby/ql/test/library-tests/dataflow/global/Flow.expected index b09124590bb..bf06c6d591d 100644 --- a/ruby/ql/test/library-tests/dataflow/global/Flow.expected +++ b/ruby/ql/test/library-tests/dataflow/global/Flow.expected @@ -1,4 +1,5 @@ testFailures +| captured_variables.rb:212:14:212:14 | x | Unexpected result: hasValueFlow=17 | edges | blocks.rb:14:12:14:20 | call to source | blocks.rb:8:10:8:14 | yield ... | provenance | | | captured_variables.rb:9:24:9:24 | x | captured_variables.rb:10:10:10:23 | -> { ... } [captured x] | provenance | | @@ -114,6 +115,9 @@ edges | captured_variables.rb:187:18:187:19 | self [@x] | captured_variables.rb:187:18:187:19 | @x | provenance | | | captured_variables.rb:193:1:193:1 | [post] c [@x] | captured_variables.rb:194:1:194:1 | c [@x] | provenance | | | captured_variables.rb:194:1:194:1 | c [@x] | captured_variables.rb:185:5:189:7 | self in baz [@x] | provenance | | +| captured_variables.rb:197:9:197:17 | call to taint | captured_variables.rb:199:10:199:10 | x | provenance | | +| captured_variables.rb:206:13:206:21 | call to taint | captured_variables.rb:208:14:208:14 | x | provenance | | +| captured_variables.rb:206:13:206:21 | call to taint | captured_variables.rb:212:14:212:14 | x | provenance | | | instance_variables.rb:10:19:10:19 | x | instance_variables.rb:11:18:11:18 | x | 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 | | @@ -368,6 +372,11 @@ nodes | captured_variables.rb:187:18:187:19 | self [@x] | semmle.label | self [@x] | | captured_variables.rb:193:1:193:1 | [post] c [@x] | semmle.label | [post] c [@x] | | captured_variables.rb:194:1:194:1 | c [@x] | semmle.label | c [@x] | +| captured_variables.rb:197:9:197:17 | call to taint | semmle.label | call to taint | +| captured_variables.rb:199:10:199:10 | x | semmle.label | x | +| captured_variables.rb:206:13:206:21 | call to taint | semmle.label | call to taint | +| captured_variables.rb:208:14:208:14 | x | semmle.label | x | +| captured_variables.rb:212:14:212:14 | x | semmle.label | x | | 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 | @@ -575,6 +584,9 @@ subpaths | captured_variables.rb:154:14:154:15 | @x | captured_variables.rb:147:10:147:18 | call to taint | captured_variables.rb:154:14:154:15 | @x | $@ | captured_variables.rb:147:10:147:18 | call to taint | call to taint | | captured_variables.rb:169:18:169:19 | @x | captured_variables.rb:160:14:160:22 | call to taint | captured_variables.rb:169:18:169:19 | @x | $@ | captured_variables.rb:160:14:160:22 | call to taint | call to taint | | captured_variables.rb:187:18:187:19 | @x | captured_variables.rb:178:14:178:22 | call to taint | captured_variables.rb:187:18:187:19 | @x | $@ | captured_variables.rb:178:14:178:22 | call to taint | call to taint | +| captured_variables.rb:199:10:199:10 | x | captured_variables.rb:197:9:197:17 | call to taint | captured_variables.rb:199:10:199:10 | x | $@ | captured_variables.rb:197:9:197:17 | call to taint | call to taint | +| captured_variables.rb:208:14:208:14 | x | captured_variables.rb:206:13:206:21 | call to taint | captured_variables.rb:208:14:208:14 | x | $@ | captured_variables.rb:206:13:206:21 | call to taint | call to taint | +| captured_variables.rb:212:14:212:14 | x | captured_variables.rb:206:13:206:21 | call to taint | captured_variables.rb:212:14:212:14 | x | $@ | captured_variables.rb:206:13:206:21 | call to taint | call to taint | | instance_variables.rb:20:10:20:13 | @foo | instance_variables.rb:19:12:19:21 | call to taint | instance_variables.rb:20:10:20:13 | @foo | $@ | instance_variables.rb:19:12:19:21 | call to taint | call to taint | | instance_variables.rb:36:10:36:33 | call to get_field | instance_variables.rb:36:14:36:22 | call to taint | instance_variables.rb:36:10:36:33 | call to get_field | $@ | instance_variables.rb:36:14:36:22 | call to taint | call to taint | | instance_variables.rb:39:6:39:33 | call to get_field | instance_variables.rb:39:14:39:22 | call to taint | instance_variables.rb:39:6:39:33 | call to get_field | $@ | instance_variables.rb:39:14:39:22 | call to taint | call to taint | diff --git a/ruby/ql/test/library-tests/dataflow/global/captured_variables.rb b/ruby/ql/test/library-tests/dataflow/global/captured_variables.rb index e0ecc1da2c5..63e2188fcee 100644 --- a/ruby/ql/test/library-tests/dataflow/global/captured_variables.rb +++ b/ruby/ql/test/library-tests/dataflow/global/captured_variables.rb @@ -192,3 +192,25 @@ end c = CaptureInstanceSelf2.new c.foo c.baz + +class CaptureOverwrite + x = taint(16) + + sink(x) # $ hasValueFlow=16 + + x = nil + + sink(x) + + fn = -> { + x = taint(17) + + sink(x) # $ hasValueFlow=17 + + x = nil + + sink(x) + } + + fn.call() +end From 1ea7717714e8984b4d9f16db8b797765459d9a1a Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Wed, 7 Feb 2024 14:06:08 +0100 Subject: [PATCH 128/378] Capture flow: Take overwrites in nested scopes into account --- .../code/java/dataflow/internal/DataFlowPrivate.qll | 6 ++++++ .../python/dataflow/new/internal/DataFlowPrivate.qll | 2 ++ .../python/dataflow/new/internal/VariableCapture.qll | 4 ++++ .../codeql/ruby/dataflow/internal/DataFlowPrivate.qll | 6 ++++++ .../test/library-tests/dataflow/global/Flow.expected | 4 ---- shared/dataflow/codeql/dataflow/VariableCapture.qll | 10 ++++++++++ 6 files changed, 28 insertions(+), 4 deletions(-) diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll index 2442671ac52..b14bbb0ab9b 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll @@ -178,6 +178,10 @@ private predicate captureReadStep(Node node1, CapturedVariableContent c, Node no CaptureFlow::readStep(asClosureNode(node1), c.getVariable(), asClosureNode(node2)) } +private predicate captureClearsContent(Node node, CapturedVariableContent c) { + CaptureFlow::clearsContent(asClosureNode(node), c.getVariable()) +} + predicate captureValueStep(Node node1, Node node2) { CaptureFlow::localFlowStep(asClosureNode(node1), asClosureNode(node2)) } @@ -311,6 +315,8 @@ predicate clearsContent(Node n, ContentSet c) { ) or FlowSummaryImpl::Private::Steps::summaryClearsContent(n.(FlowSummaryNode).getSummaryNode(), c) + or + captureClearsContent(n, c) } /** diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll index 55252e22c32..c11e0cde64d 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll @@ -979,6 +979,8 @@ predicate clearsContent(Node n, ContentSet c) { FlowSummaryImpl::Private::Steps::summaryClearsContent(n.(FlowSummaryNode).getSummaryNode(), c) or dictSplatParameterNodeClearStep(n, c) + or + VariableCapture::clearsContent(n, c) } /** diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/VariableCapture.qll b/python/ql/lib/semmle/python/dataflow/new/internal/VariableCapture.qll index dd4d3f03867..f1ba86344a4 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/VariableCapture.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/VariableCapture.qll @@ -144,6 +144,10 @@ predicate readStep(Node nodeFrom, CapturedVariableContent c, Node nodeTo) { Flow::readStep(asClosureNode(nodeFrom), c.getVariable(), asClosureNode(nodeTo)) } +predicate clearsContent(Node node, CapturedVariableContent c) { + Flow::clearsContent(asClosureNode(node), c.getVariable()) +} + predicate valueStep(Node nodeFrom, Node nodeTo) { Flow::localFlowStep(asClosureNode(nodeFrom), asClosureNode(nodeTo)) } diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll index ded1ba91246..dca2a310c9f 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll @@ -453,6 +453,10 @@ module VariableCapture { Flow::localFlowStep(asClosureNode(node1), asClosureNode(node2)) } + predicate clearsContent(Node node, Content::CapturedVariableContent c) { + Flow::clearsContent(asClosureNode(node), c.getVariable()) + } + class CapturedSsaDefinitionExt extends SsaImpl::DefinitionExt { CapturedSsaDefinitionExt() { this.getSourceVariable() instanceof CapturedVariable } } @@ -1930,6 +1934,8 @@ predicate clearsContent(Node n, ContentSet c) { c.isKnownOrUnknownElement(TKnownElementContent(cv)) and cv.isSymbol(name) ) + or + VariableCapture::clearsContent(n, any(Content::CapturedVariableContent v | c.isSingleton(v))) } /** diff --git a/ruby/ql/test/library-tests/dataflow/global/Flow.expected b/ruby/ql/test/library-tests/dataflow/global/Flow.expected index bf06c6d591d..5f019f306d3 100644 --- a/ruby/ql/test/library-tests/dataflow/global/Flow.expected +++ b/ruby/ql/test/library-tests/dataflow/global/Flow.expected @@ -1,5 +1,4 @@ testFailures -| captured_variables.rb:212:14:212:14 | x | Unexpected result: hasValueFlow=17 | edges | blocks.rb:14:12:14:20 | call to source | blocks.rb:8:10:8:14 | yield ... | provenance | | | captured_variables.rb:9:24:9:24 | x | captured_variables.rb:10:10:10:23 | -> { ... } [captured x] | provenance | | @@ -117,7 +116,6 @@ edges | captured_variables.rb:194:1:194:1 | c [@x] | captured_variables.rb:185:5:189:7 | self in baz [@x] | provenance | | | captured_variables.rb:197:9:197:17 | call to taint | captured_variables.rb:199:10:199:10 | x | provenance | | | captured_variables.rb:206:13:206:21 | call to taint | captured_variables.rb:208:14:208:14 | x | provenance | | -| captured_variables.rb:206:13:206:21 | call to taint | captured_variables.rb:212:14:212:14 | x | provenance | | | instance_variables.rb:10:19:10:19 | x | instance_variables.rb:11:18:11:18 | x | 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 | | @@ -376,7 +374,6 @@ nodes | captured_variables.rb:199:10:199:10 | x | semmle.label | x | | captured_variables.rb:206:13:206:21 | call to taint | semmle.label | call to taint | | captured_variables.rb:208:14:208:14 | x | semmle.label | x | -| captured_variables.rb:212:14:212:14 | x | semmle.label | x | | 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 | @@ -586,7 +583,6 @@ subpaths | captured_variables.rb:187:18:187:19 | @x | captured_variables.rb:178:14:178:22 | call to taint | captured_variables.rb:187:18:187:19 | @x | $@ | captured_variables.rb:178:14:178:22 | call to taint | call to taint | | captured_variables.rb:199:10:199:10 | x | captured_variables.rb:197:9:197:17 | call to taint | captured_variables.rb:199:10:199:10 | x | $@ | captured_variables.rb:197:9:197:17 | call to taint | call to taint | | captured_variables.rb:208:14:208:14 | x | captured_variables.rb:206:13:206:21 | call to taint | captured_variables.rb:208:14:208:14 | x | $@ | captured_variables.rb:206:13:206:21 | call to taint | call to taint | -| captured_variables.rb:212:14:212:14 | x | captured_variables.rb:206:13:206:21 | call to taint | captured_variables.rb:212:14:212:14 | x | $@ | captured_variables.rb:206:13:206:21 | call to taint | call to taint | | instance_variables.rb:20:10:20:13 | @foo | instance_variables.rb:19:12:19:21 | call to taint | instance_variables.rb:20:10:20:13 | @foo | $@ | instance_variables.rb:19:12:19:21 | call to taint | call to taint | | instance_variables.rb:36:10:36:33 | call to get_field | instance_variables.rb:36:14:36:22 | call to taint | instance_variables.rb:36:10:36:33 | call to get_field | $@ | instance_variables.rb:36:14:36:22 | call to taint | call to taint | | instance_variables.rb:39:6:39:33 | call to get_field | instance_variables.rb:39:14:39:22 | call to taint | instance_variables.rb:39:6:39:33 | call to get_field | $@ | instance_variables.rb:39:14:39:22 | call to taint | call to taint | diff --git a/shared/dataflow/codeql/dataflow/VariableCapture.qll b/shared/dataflow/codeql/dataflow/VariableCapture.qll index 6e1ae6bf104..e90bf481442 100644 --- a/shared/dataflow/codeql/dataflow/VariableCapture.qll +++ b/shared/dataflow/codeql/dataflow/VariableCapture.qll @@ -232,6 +232,9 @@ signature module OutputSig I> { /** Holds if this-to-this summaries are expected for `c`. */ predicate heuristicAllowInstanceParameterReturnInSelf(I::Callable c); + + /** Holds if captured variable `v` is cleared at `node`. */ + predicate clearsContent(ClosureNode node, I::CapturedVariable v); } /** @@ -959,4 +962,11 @@ module Flow Input> implements OutputSig ) ) } + + predicate clearsContent(ClosureNode node, CapturedVariable v) { + exists(BasicBlock bb, int i | + captureWrite(v, bb, i, false, _) and + node = TSynthThisQualifier(bb, i, false) + ) + } } From 37d774176b9b80bf75744766769152edbd019bb9 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Wed, 7 Feb 2024 19:52:36 +0100 Subject: [PATCH 129/378] Ruby: Fix SSA inconsistency --- .../codeql/ruby/dataflow/internal/SsaImpl.qll | 41 +++++++++++-------- .../test/library-tests/variables/ssa.expected | 1 - 2 files changed, 24 insertions(+), 18 deletions(-) diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/SsaImpl.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/SsaImpl.qll index e1a3607a43e..8839c30b949 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/SsaImpl.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/SsaImpl.qll @@ -143,23 +143,23 @@ private predicate hasCapturedRead(Variable v, Cfg::CfgScope scope) { } /** - * Holds if `v` is written inside basic block `bb`, which is in the immediate - * outer scope of `scope`. + * Holds if `v` is written inside basic block `bb` at index `i`, which is in + * the immediate outer scope of `scope`. */ pragma[noinline] -private predicate variableWriteInOuterScope(Cfg::BasicBlock bb, LocalVariable v, Cfg::CfgScope scope) { - SsaInput::variableWrite(bb, _, v, _) and +private predicate variableWriteInOuterScope( + Cfg::BasicBlock bb, int i, LocalVariable v, Cfg::CfgScope scope +) { + SsaInput::variableWrite(bb, i, v, _) and scope.getOuterCfgScope() = bb.getScope() } pragma[noinline] -private predicate proceedsVariableWriteWithCapturedRead( - Cfg::BasicBlock bb, LocalVariable v, Cfg::CfgScope scope +private predicate hasVariableWriteWithCapturedRead( + Cfg::BasicBlock bb, int i, LocalVariable v, Cfg::CfgScope scope ) { hasCapturedRead(v, scope) and - variableWriteInOuterScope(bb, v, scope) - or - proceedsVariableWriteWithCapturedRead(bb.getAPredecessor(), v, scope) + variableWriteInOuterScope(bb, i, v, scope) } /** @@ -168,7 +168,10 @@ private predicate proceedsVariableWriteWithCapturedRead( */ private predicate capturedCallRead(CallCfgNode call, Cfg::BasicBlock bb, int i, LocalVariable v) { exists(Cfg::CfgScope scope | - proceedsVariableWriteWithCapturedRead(bb, v, scope) and + ( + hasVariableWriteWithCapturedRead(bb, any(int j | j < i), v, scope) or + hasVariableWriteWithCapturedRead(bb.getAPredecessor+(), _, v, scope) + ) and call = bb.getNode(i) | // If the read happens inside a block, we restrict to the call that @@ -199,23 +202,23 @@ private predicate hasCapturedWrite(Variable v, Cfg::CfgScope scope) { } /** - * Holds if `v` is read inside basic block `bb`, which is in the immediate - * outer scope of `scope`. + * Holds if `v` is read inside basic block `bb` at index `i`, which is in the + * immediate outer scope of `scope`. */ pragma[noinline] private predicate variableReadActualInOuterScope( - Cfg::BasicBlock bb, LocalVariable v, Cfg::CfgScope scope + Cfg::BasicBlock bb, int i, LocalVariable v, Cfg::CfgScope scope ) { - variableReadActual(bb, _, v) and + variableReadActual(bb, i, v) and bb.getScope() = scope.getOuterCfgScope() } pragma[noinline] private predicate hasVariableReadWithCapturedWrite( - Cfg::BasicBlock bb, LocalVariable v, Cfg::CfgScope scope + Cfg::BasicBlock bb, int i, LocalVariable v, Cfg::CfgScope scope ) { hasCapturedWrite(v, scope) and - variableReadActualInOuterScope(bb, v, scope) + variableReadActualInOuterScope(bb, i, v, scope) } pragma[noinline] @@ -324,7 +327,11 @@ private module Cached { cached predicate capturedCallWrite(CallCfgNode call, Cfg::BasicBlock bb, int i, LocalVariable v) { exists(Cfg::CfgScope scope | - hasVariableReadWithCapturedWrite(bb.getASuccessor*(), v, scope) and + ( + hasVariableReadWithCapturedWrite(bb, any(int j | j > i), v, scope) + or + hasVariableReadWithCapturedWrite(bb.getASuccessor+(), _, v, scope) + ) and call = bb.getNode(i) | // If the write happens inside a block, we restrict to the call that diff --git a/ruby/ql/test/library-tests/variables/ssa.expected b/ruby/ql/test/library-tests/variables/ssa.expected index 91ea3085ec8..a729af328ce 100644 --- a/ruby/ql/test/library-tests/variables/ssa.expected +++ b/ruby/ql/test/library-tests/variables/ssa.expected @@ -90,7 +90,6 @@ definition | scopes.rb:2:9:6:3 | self | scopes.rb:1:1:49:4 | self | | scopes.rb:4:4:4:4 | a | scopes.rb:4:4:4:4 | a | | scopes.rb:7:1:7:1 | a | scopes.rb:7:1:7:1 | a | -| scopes.rb:9:1:18:3 | a | scopes.rb:7:1:7:1 | a | | scopes.rb:9:9:18:3 | a | scopes.rb:7:1:7:1 | a | | scopes.rb:9:9:18:3 | self | scopes.rb:1:1:49:4 | self | | scopes.rb:11:4:11:4 | a | scopes.rb:7:1:7:1 | a | From ab758d5f1edf6cf30c1ac470f37645bf45f81ea8 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Fri, 9 Feb 2024 13:53:05 +0000 Subject: [PATCH 130/378] Kotlin 2: Accept loc changes in library-tests/parameter-defaults/defaults.expected --- .../library-tests/parameter-defaults/defaults.expected | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/java/ql/test-kotlin2/library-tests/parameter-defaults/defaults.expected b/java/ql/test-kotlin2/library-tests/parameter-defaults/defaults.expected index 5648ac7cf00..2e7d2920d78 100644 --- a/java/ql/test-kotlin2/library-tests/parameter-defaults/defaults.expected +++ b/java/ql/test-kotlin2/library-tests/parameter-defaults/defaults.expected @@ -1,17 +1,17 @@ | test.kt:5:3:7:3 | f | test.kt:5:3:7:3 | f$default | | test.kt:19:3:22:3 | f | test.kt:19:3:22:3 | f$default | -| test.kt:34:14:36:3 | f | test.kt:34:14:36:3 | f$default | +| test.kt:34:3:36:3 | f | test.kt:34:3:36:3 | f$default | | test.kt:56:3:58:3 | test | test.kt:56:3:58:3 | test$default | -| test.kt:68:1:80:1 | TestConstructor | test.kt:68:1:80:1 | TestConstructor | +| test.kt:68:22:68:75 | TestConstructor | test.kt:68:22:68:75 | TestConstructor | | test.kt:86:5:88:5 | f | test.kt:86:5:88:5 | f$default | | test.kt:106:7:108:7 | f | test.kt:106:7:108:7 | f$default | | test.kt:124:3:126:3 | f | test.kt:124:3:126:3 | f$default | | test.kt:135:3:135:43 | testReturn | test.kt:135:3:135:43 | testReturn$default | | test.kt:145:3:147:3 | f | test.kt:145:3:147:3 | f$default | | test.kt:158:3:158:35 | f | test.kt:158:3:158:35 | f$default | -| test.kt:159:12:159:44 | g$main | test.kt:159:12:159:44 | g$main$default | -| test.kt:160:13:160:45 | h | test.kt:160:13:160:45 | h$default | -| test.kt:161:11:161:43 | i | test.kt:161:11:161:43 | i$default | +| test.kt:159:3:159:44 | g$main | test.kt:159:3:159:44 | g$main$default | +| test.kt:160:3:160:45 | h | test.kt:160:3:160:45 | h$default | +| test.kt:161:3:161:43 | i | test.kt:161:3:161:43 | i$default | | test.kt:171:3:171:97 | f | test.kt:171:3:171:97 | f$default | | test.kt:179:3:179:46 | f | test.kt:179:3:179:46 | f$default | | test.kt:180:3:180:34 | f | test.kt:180:3:180:34 | f$default | From 16aed188210f3a48a999e2e8112b9056f43eefeb Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Fri, 9 Feb 2024 13:53:36 +0000 Subject: [PATCH 131/378] Address reviews - Elaborate on docs and update severity --- .../lib/semmle/code/java/security/AndroidLocalAuthQuery.qll | 2 +- .../CWE/CWE-287/AndroidInsecureLocalAuthentication.qhelp | 5 +++-- .../CWE/CWE-287/AndroidInsecureLocalAuthentication.ql | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/java/ql/lib/semmle/code/java/security/AndroidLocalAuthQuery.qll b/java/ql/lib/semmle/code/java/security/AndroidLocalAuthQuery.qll index 46b391559f1..ca725a041d5 100644 --- a/java/ql/lib/semmle/code/java/security/AndroidLocalAuthQuery.qll +++ b/java/ql/lib/semmle/code/java/security/AndroidLocalAuthQuery.qll @@ -21,7 +21,7 @@ class AuthenticationSuccessCallback extends Method { this.hasName("onAuthenticationSucceeded") } - /** Gets the parameter containing the `authenticationResult` */ + /** Gets the parameter containing the `authenticationResult`. */ Parameter getResultParameter() { result = this.getParameter(0) } /** Gets a use of the result parameter that's used in a `super` call to the base `AuthenticationCallback` class. */ diff --git a/java/ql/src/Security/CWE/CWE-287/AndroidInsecureLocalAuthentication.qhelp b/java/ql/src/Security/CWE/CWE-287/AndroidInsecureLocalAuthentication.qhelp index b54a2add853..e65f00826bf 100644 --- a/java/ql/src/Security/CWE/CWE-287/AndroidInsecureLocalAuthentication.qhelp +++ b/java/ql/src/Security/CWE/CWE-287/AndroidInsecureLocalAuthentication.qhelp @@ -6,7 +6,8 @@

    Biometric local authentication such as fingerprint recognition can be used to protect sensitive data or actions within an application. -However, if this authentication does not make use of a KeyStore-backed key, it is able to be bypassed by a privileged malicious application or an attacker with physical access. +However, if this authentication does not make use of a KeyStore-backed key, it is able to be bypassed by a privileged malicious application or an attacker with physical access, +using application hooking tools such as Frida.

    @@ -20,7 +21,7 @@ in a way that is required for the sensitive parts of the application to function

    In the following (bad) case, no CryptoObject is required for the biometric prompt to grant access, so it can be bypassed.

    -

    In he following (good) case, a secret key is generated in the Android KeyStore that is required for the application to grant access.

    +

    In the following (good) case, a secret key is generated in the Android KeyStore that is required for the application to grant access by decrypting data.

    diff --git a/java/ql/src/Security/CWE/CWE-287/AndroidInsecureLocalAuthentication.ql b/java/ql/src/Security/CWE/CWE-287/AndroidInsecureLocalAuthentication.ql index 57f256bb40d..92256a2b779 100644 --- a/java/ql/src/Security/CWE/CWE-287/AndroidInsecureLocalAuthentication.ql +++ b/java/ql/src/Security/CWE/CWE-287/AndroidInsecureLocalAuthentication.ql @@ -3,7 +3,7 @@ * @description Local authentication that does not make use of a `CryptoObject` can be bypassed. * @kind problem * @problem.severity warning - * @security-severity 9.3 + * @security-severity 4.4 * @precision high * @id java/android/insecure-local-authentication * @tags security From 3cba1764e2aefd9f87a8170c448517bcabd5f32d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 12 Feb 2024 00:16:45 +0000 Subject: [PATCH 132/378] Add changed framework coverage reports --- .../library-coverage/coverage.csv | 18 +++++++++--------- .../library-coverage/coverage.rst | 8 ++++---- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/java/documentation/library-coverage/coverage.csv b/java/documentation/library-coverage/coverage.csv index 05fc3c67ada..5b3af5e9040 100644 --- a/java/documentation/library-coverage/coverage.csv +++ b/java/documentation/library-coverage/coverage.csv @@ -76,13 +76,13 @@ jakarta.ws.rs.core,2,,149,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,94,55 jakarta.xml.bind.attachment,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,, java.awt,1,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,3 java.beans,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -java.io,50,1,46,,,,,,,,,22,,,,,,,,,,,,,,,28,,,,,,,,,,,,,,,,,,,,,1,,44,2 -java.lang,33,3,101,,13,,,,,,1,,,,,,,,,,,,8,,,,6,,,4,,,1,,,,,,,,,,,,,,3,,,58,43 -java.net,21,3,23,,,,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,19,,,,,,,,,,,,,3,23, -java.nio,49,,36,,,,,,,,,5,,,,,,,,,,,,,,,43,,,,,,,,,1,,,,,,,,,,,,,,36, +java.io,51,1,46,,,,,,,,,22,,,,,,,,,,,,,,,29,,,,,,,,,,,,,,,,,,,,,1,,44,2 +java.lang,38,3,101,,13,,,,,,1,,,,,,,,,,,,8,,,,11,,,4,,,1,,,,,,,,,,,,,,3,,,58,43 +java.net,22,3,24,,,,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,20,,,,,,,,,,,,,3,24, +java.nio,44,,38,,,,,,,,,5,,,,,,,,,,,,,,,38,,,,,,,,,1,,,,,,,,,,,,,,38, java.security,21,,,,,11,10,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, java.sql,15,1,2,,,,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,,9,,,,,,,,1,,,,2, -java.util,47,2,519,,,,,,,,,1,,,,,,,,,,,34,,,,2,,,,5,2,,1,2,,,,,,,,,,,,2,,,45,474 +java.util,47,2,520,,,,,,,,,1,,,,,,,,,,,34,,,,2,,,,5,2,,1,2,,,,,,,,,,,,2,,,46,474 javafx.scene.web,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,, javax.activation,2,,7,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,1,,,,,,,,,,,,,,7, javax.crypto,19,,4,,,12,3,,2,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4, @@ -125,7 +125,7 @@ org.apache.commons.collections4,,,800,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, org.apache.commons.compress.archivers.tar,,,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4, org.apache.commons.exec,10,,,,6,,,,,,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, org.apache.commons.httpclient.util,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -org.apache.commons.io,117,,562,,,,,,,,,4,,,,,,,,,,,,,,,98,,,,,,,,,15,,,,,,,,,,,,,,548,14 +org.apache.commons.io,118,,562,,,,,,,,,4,,,,,,,,,,,,,,,99,,,,,,,,,15,,,,,,,,,,,,,,548,14 org.apache.commons.jelly,6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6,,,,,,,,,,,,,,, org.apache.commons.jexl2,15,,,,,,,,,,,,,,,,,,15,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, org.apache.commons.jexl3,15,,,,,,,,,,,,,,,,,,15,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, @@ -147,7 +147,7 @@ org.apache.cxf.tools.corba.utils,4,,,,,,,,,,,,,,,,,,,,,,,,,,4,,,,,,,,,,,,,,,,,,, org.apache.cxf.tools.util,10,,,,,,,,,,,,,,,,,,,,,,,,,,10,,,,,,,,,,,,,,,,,,,,,,,, org.apache.cxf.transform,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,,,,,,,, org.apache.directory.ldap.client.api,1,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -org.apache.hadoop.fs,,,10,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,10, +org.apache.hadoop.fs,3,,11,,,,,,,,,,,,,,,,,,,,,,,,3,,,,,,,,,,,,,,,,,,,,,,,11, org.apache.hadoop.hive.metastore,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,,,,,,,,,,,,, org.apache.hadoop.hive.ql.exec,1,,1,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,1, org.apache.hadoop.hive.ql.metadata,1,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,, @@ -178,10 +178,10 @@ org.apache.velocity.runtime,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,,,,,,,,,,,, org.codehaus.cargo.container.installer,3,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,1,,,,,,,,,,,,,,, org.codehaus.groovy.control,1,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, org.dom4j,20,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,20,,,,,,,,, -org.eclipse.jetty.client,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,, +org.eclipse.jetty.client,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,,,, org.fusesource.leveldbjni,1,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,, org.geogebra.web.full.main,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,, -org.gradle.api.file,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2, +org.gradle.api.file,,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3, org.hibernate,7,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,7,,,,,,,,,,,,, org.influxdb,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,, org.jboss.logging,324,,,,,,,,,,,,,,,,,,,,,,324,,,,,,,,,,,,,,,,,,,,,,,,,,,, diff --git a/java/documentation/library-coverage/coverage.rst b/java/documentation/library-coverage/coverage.rst index 78130e9d9c2..3e0edb7dfac 100644 --- a/java/documentation/library-coverage/coverage.rst +++ b/java/documentation/library-coverage/coverage.rst @@ -10,7 +10,7 @@ Java framework & library support Android,``android.*``,52,481,180,,3,67,,, Android extensions,``androidx.*``,5,183,60,,,,,, `Apache Commons Collections `_,"``org.apache.commons.collections``, ``org.apache.commons.collections4``",,1600,,,,,,, - `Apache Commons IO `_,``org.apache.commons.io``,,562,117,98,,,,,15 + `Apache Commons IO `_,``org.apache.commons.io``,,562,118,99,,,,,15 `Apache Commons Lang `_,``org.apache.commons.lang3``,,425,6,,,,,, `Apache Commons Text `_,``org.apache.commons.text``,,272,,,,,,, `Apache HttpComponents `_,"``org.apache.hc.core5.*``, ``org.apache.http``",5,183,122,,3,,,,119 @@ -18,10 +18,10 @@ Java framework & library support `Google Guava `_,``com.google.common.*``,,730,43,9,,,,, JBoss Logging,``org.jboss.logging``,,,324,,,,,, `JSON-java `_,``org.json``,,236,,,,,,, - Java Standard Library,``java.*``,10,731,237,79,,9,,,24 + Java Standard Library,``java.*``,10,735,239,80,,9,,,25 Java extensions,"``javax.*``, ``jakarta.*``",67,688,80,5,4,2,1,1,4 Kotlin Standard Library,``kotlin*``,,1849,16,14,,,,,2 `Spring `_,``org.springframework.*``,38,481,118,5,,28,14,,35 - Others,"``actions.osgi``, ``antlr``, ``ch.ethz.ssh2``, ``cn.hutool.core.codec``, ``com.alibaba.druid.sql``, ``com.alibaba.fastjson2``, ``com.amazonaws.auth``, ``com.auth0.jwt.algorithms``, ``com.azure.identity``, ``com.esotericsoftware.kryo.io``, ``com.esotericsoftware.kryo5.io``, ``com.fasterxml.jackson.core``, ``com.fasterxml.jackson.databind``, ``com.google.gson``, ``com.hubspot.jinjava``, ``com.jcraft.jsch``, ``com.microsoft.sqlserver.jdbc``, ``com.mitchellbosecke.pebble``, ``com.mongodb``, ``com.opensymphony.xwork2``, ``com.rabbitmq.client``, ``com.sshtools.j2ssh.authentication``, ``com.sun.crypto.provider``, ``com.sun.jndi.ldap``, ``com.sun.net.httpserver``, ``com.sun.net.ssl``, ``com.sun.rowset``, ``com.sun.security.auth.module``, ``com.sun.security.ntlm``, ``com.sun.security.sasl.digest``, ``com.thoughtworks.xstream``, ``com.trilead.ssh2``, ``com.unboundid.ldap.sdk``, ``com.zaxxer.hikari``, ``flexjson``, ``freemarker.cache``, ``freemarker.template``, ``groovy.lang``, ``groovy.text``, ``groovy.util``, ``hudson``, ``io.jsonwebtoken``, ``io.netty.bootstrap``, ``io.netty.buffer``, ``io.netty.channel``, ``io.netty.handler.codec``, ``io.netty.handler.ssl``, ``io.netty.handler.stream``, ``io.netty.resolver``, ``io.netty.util``, ``javafx.scene.web``, ``jenkins``, ``jodd.json``, ``liquibase.database.jvm``, ``liquibase.statement.core``, ``net.schmizz.sshj``, ``net.sf.json``, ``net.sf.saxon.s9api``, ``ognl``, ``okhttp3``, ``org.acegisecurity``, ``org.antlr.runtime``, ``org.apache.commons.codec``, ``org.apache.commons.compress.archivers.tar``, ``org.apache.commons.exec``, ``org.apache.commons.httpclient.util``, ``org.apache.commons.jelly``, ``org.apache.commons.jexl2``, ``org.apache.commons.jexl3``, ``org.apache.commons.lang``, ``org.apache.commons.logging``, ``org.apache.commons.net``, ``org.apache.commons.ognl``, ``org.apache.cxf.catalog``, ``org.apache.cxf.common.classloader``, ``org.apache.cxf.common.jaxb``, ``org.apache.cxf.common.logging``, ``org.apache.cxf.configuration.jsse``, ``org.apache.cxf.helpers``, ``org.apache.cxf.resource``, ``org.apache.cxf.staxutils``, ``org.apache.cxf.tools.corba.utils``, ``org.apache.cxf.tools.util``, ``org.apache.cxf.transform``, ``org.apache.directory.ldap.client.api``, ``org.apache.hadoop.fs``, ``org.apache.hadoop.hive.metastore``, ``org.apache.hadoop.hive.ql.exec``, ``org.apache.hadoop.hive.ql.metadata``, ``org.apache.hc.client5.http.async.methods``, ``org.apache.hc.client5.http.classic.methods``, ``org.apache.hc.client5.http.fluent``, ``org.apache.hive.hcatalog.templeton``, ``org.apache.ibatis.jdbc``, ``org.apache.ibatis.mapping``, ``org.apache.log4j``, ``org.apache.shiro.codec``, ``org.apache.shiro.jndi``, ``org.apache.shiro.mgt``, ``org.apache.sshd.client.session``, ``org.apache.struts.beanvalidation.validation.interceptor``, ``org.apache.struts2``, ``org.apache.tools.ant``, ``org.apache.tools.zip``, ``org.apache.velocity.app``, ``org.apache.velocity.runtime``, ``org.codehaus.cargo.container.installer``, ``org.codehaus.groovy.control``, ``org.dom4j``, ``org.eclipse.jetty.client``, ``org.fusesource.leveldbjni``, ``org.geogebra.web.full.main``, ``org.gradle.api.file``, ``org.hibernate``, ``org.influxdb``, ``org.jdbi.v3.core``, ``org.jenkins.ui.icon``, ``org.jenkins.ui.symbol``, ``org.jooq``, ``org.keycloak.models.map.storage``, ``org.kohsuke.stapler``, ``org.mvel2``, ``org.openjdk.jmh.runner.options``, ``org.owasp.esapi``, ``org.pac4j.jwt.config.encryption``, ``org.pac4j.jwt.config.signature``, ``org.scijava.log``, ``org.slf4j``, ``org.thymeleaf``, ``org.xml.sax``, ``org.xmlpull.v1``, ``org.yaml.snakeyaml``, ``play.libs.ws``, ``play.mvc``, ``ratpack.core.form``, ``ratpack.core.handling``, ``ratpack.core.http``, ``ratpack.exec``, ``ratpack.form``, ``ratpack.func``, ``ratpack.handling``, ``ratpack.http``, ``ratpack.util``, ``retrofit2``, ``sun.jvmstat.perfdata.monitor.protocol.local``, ``sun.jvmstat.perfdata.monitor.protocol.rmi``, ``sun.misc``, ``sun.net.ftp``, ``sun.net.www.protocol.http``, ``sun.security.acl``, ``sun.security.jgss.krb5``, ``sun.security.krb5``, ``sun.security.pkcs``, ``sun.security.pkcs11``, ``sun.security.provider``, ``sun.security.ssl``, ``sun.security.x509``, ``sun.tools.jconsole``",131,10516,889,121,6,22,18,,208 - Totals,,308,18945,2551,331,16,128,33,1,407 + Others,"``actions.osgi``, ``antlr``, ``ch.ethz.ssh2``, ``cn.hutool.core.codec``, ``com.alibaba.druid.sql``, ``com.alibaba.fastjson2``, ``com.amazonaws.auth``, ``com.auth0.jwt.algorithms``, ``com.azure.identity``, ``com.esotericsoftware.kryo.io``, ``com.esotericsoftware.kryo5.io``, ``com.fasterxml.jackson.core``, ``com.fasterxml.jackson.databind``, ``com.google.gson``, ``com.hubspot.jinjava``, ``com.jcraft.jsch``, ``com.microsoft.sqlserver.jdbc``, ``com.mitchellbosecke.pebble``, ``com.mongodb``, ``com.opensymphony.xwork2``, ``com.rabbitmq.client``, ``com.sshtools.j2ssh.authentication``, ``com.sun.crypto.provider``, ``com.sun.jndi.ldap``, ``com.sun.net.httpserver``, ``com.sun.net.ssl``, ``com.sun.rowset``, ``com.sun.security.auth.module``, ``com.sun.security.ntlm``, ``com.sun.security.sasl.digest``, ``com.thoughtworks.xstream``, ``com.trilead.ssh2``, ``com.unboundid.ldap.sdk``, ``com.zaxxer.hikari``, ``flexjson``, ``freemarker.cache``, ``freemarker.template``, ``groovy.lang``, ``groovy.text``, ``groovy.util``, ``hudson``, ``io.jsonwebtoken``, ``io.netty.bootstrap``, ``io.netty.buffer``, ``io.netty.channel``, ``io.netty.handler.codec``, ``io.netty.handler.ssl``, ``io.netty.handler.stream``, ``io.netty.resolver``, ``io.netty.util``, ``javafx.scene.web``, ``jenkins``, ``jodd.json``, ``liquibase.database.jvm``, ``liquibase.statement.core``, ``net.schmizz.sshj``, ``net.sf.json``, ``net.sf.saxon.s9api``, ``ognl``, ``okhttp3``, ``org.acegisecurity``, ``org.antlr.runtime``, ``org.apache.commons.codec``, ``org.apache.commons.compress.archivers.tar``, ``org.apache.commons.exec``, ``org.apache.commons.httpclient.util``, ``org.apache.commons.jelly``, ``org.apache.commons.jexl2``, ``org.apache.commons.jexl3``, ``org.apache.commons.lang``, ``org.apache.commons.logging``, ``org.apache.commons.net``, ``org.apache.commons.ognl``, ``org.apache.cxf.catalog``, ``org.apache.cxf.common.classloader``, ``org.apache.cxf.common.jaxb``, ``org.apache.cxf.common.logging``, ``org.apache.cxf.configuration.jsse``, ``org.apache.cxf.helpers``, ``org.apache.cxf.resource``, ``org.apache.cxf.staxutils``, ``org.apache.cxf.tools.corba.utils``, ``org.apache.cxf.tools.util``, ``org.apache.cxf.transform``, ``org.apache.directory.ldap.client.api``, ``org.apache.hadoop.fs``, ``org.apache.hadoop.hive.metastore``, ``org.apache.hadoop.hive.ql.exec``, ``org.apache.hadoop.hive.ql.metadata``, ``org.apache.hc.client5.http.async.methods``, ``org.apache.hc.client5.http.classic.methods``, ``org.apache.hc.client5.http.fluent``, ``org.apache.hive.hcatalog.templeton``, ``org.apache.ibatis.jdbc``, ``org.apache.ibatis.mapping``, ``org.apache.log4j``, ``org.apache.shiro.codec``, ``org.apache.shiro.jndi``, ``org.apache.shiro.mgt``, ``org.apache.sshd.client.session``, ``org.apache.struts.beanvalidation.validation.interceptor``, ``org.apache.struts2``, ``org.apache.tools.ant``, ``org.apache.tools.zip``, ``org.apache.velocity.app``, ``org.apache.velocity.runtime``, ``org.codehaus.cargo.container.installer``, ``org.codehaus.groovy.control``, ``org.dom4j``, ``org.eclipse.jetty.client``, ``org.fusesource.leveldbjni``, ``org.geogebra.web.full.main``, ``org.gradle.api.file``, ``org.hibernate``, ``org.influxdb``, ``org.jdbi.v3.core``, ``org.jenkins.ui.icon``, ``org.jenkins.ui.symbol``, ``org.jooq``, ``org.keycloak.models.map.storage``, ``org.kohsuke.stapler``, ``org.mvel2``, ``org.openjdk.jmh.runner.options``, ``org.owasp.esapi``, ``org.pac4j.jwt.config.encryption``, ``org.pac4j.jwt.config.signature``, ``org.scijava.log``, ``org.slf4j``, ``org.thymeleaf``, ``org.xml.sax``, ``org.xmlpull.v1``, ``org.yaml.snakeyaml``, ``play.libs.ws``, ``play.mvc``, ``ratpack.core.form``, ``ratpack.core.handling``, ``ratpack.core.http``, ``ratpack.exec``, ``ratpack.form``, ``ratpack.func``, ``ratpack.handling``, ``ratpack.http``, ``ratpack.util``, ``retrofit2``, ``sun.jvmstat.perfdata.monitor.protocol.local``, ``sun.jvmstat.perfdata.monitor.protocol.rmi``, ``sun.misc``, ``sun.net.ftp``, ``sun.net.www.protocol.http``, ``sun.security.acl``, ``sun.security.jgss.krb5``, ``sun.security.krb5``, ``sun.security.pkcs``, ``sun.security.pkcs11``, ``sun.security.provider``, ``sun.security.ssl``, ``sun.security.x509``, ``sun.tools.jconsole``",131,10518,893,124,6,22,18,,209 + Totals,,308,18951,2558,336,16,128,33,1,409 From 3212f80bea6ce77ae5a6cee00339f8e2a8256769 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Feb 2024 03:38:19 +0000 Subject: [PATCH 133/378] Bump chrono from 0.4.33 to 0.4.34 in /ql Bumps [chrono](https://github.com/chronotope/chrono) from 0.4.33 to 0.4.34. - [Release notes](https://github.com/chronotope/chrono/releases) - [Changelog](https://github.com/chronotope/chrono/blob/main/CHANGELOG.md) - [Commits](https://github.com/chronotope/chrono/compare/v0.4.33...v0.4.34) --- updated-dependencies: - dependency-name: chrono dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- ql/Cargo.lock | Bin 34042 -> 34042 bytes ql/buramu/Cargo.toml | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/ql/Cargo.lock b/ql/Cargo.lock index 211cfe14d7a7e56cec62f4fefc999f2abaed3da5..6ea3f99faf5a892ffe3c3edc328b7047b4f8f366 100644 GIT binary patch delta 82 zcmey>$@Hs}X~QAj$rn=t>`jxB4Gc}qOiYq2jZ#c4EDh2Ulgv#lEK^M^Q;ZDLEX*xa mOp`4w4Gb;JER4)kOpH>KO$`k#4J}O!Owx=kHV5*pECT>+cNqr& delta 83 zcmV~$u@QhE37fchw0yi`)jnb|t783} Date: Mon, 12 Feb 2024 09:44:23 +0100 Subject: [PATCH 134/378] Add change note --- java/ql/src/change-notes/2024-02-12-relative-exec-severity.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 java/ql/src/change-notes/2024-02-12-relative-exec-severity.md diff --git a/java/ql/src/change-notes/2024-02-12-relative-exec-severity.md b/java/ql/src/change-notes/2024-02-12-relative-exec-severity.md new file mode 100644 index 00000000000..ce54d7fc645 --- /dev/null +++ b/java/ql/src/change-notes/2024-02-12-relative-exec-severity.md @@ -0,0 +1,4 @@ +--- +category: queryMetadata +--- +* The `security-severity` score of the query `java/relative-path-command` has been reduced to better adjust it to the specific conditions needed for exploitation. From 51a5c2bbbaa2f6f50a217c6a4de4b62b8086c8d4 Mon Sep 17 00:00:00 2001 From: Harry Maclean Date: Mon, 12 Feb 2024 09:16:13 +0000 Subject: [PATCH 135/378] Ruby: Address doc review comments --- .../customizing-library-models-for-ruby.rst | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/codeql/codeql-language-guides/customizing-library-models-for-ruby.rst b/docs/codeql/codeql-language-guides/customizing-library-models-for-ruby.rst index 6bc80472596..8de04d882da 100644 --- a/docs/codeql/codeql-language-guides/customizing-library-models-for-ruby.rst +++ b/docs/codeql/codeql-language-guides/customizing-library-models-for-ruby.rst @@ -23,7 +23,7 @@ A data extension for Ruby is a YAML file of the form: - - ... -The CodeQL library for JavaScript exposes the following extensible predicates: +The CodeQL library for Ruby exposes the following extensible predicates: - **sourceModel**\(type, path, kind) - **sinkModel**\(type, path, kind) @@ -66,10 +66,10 @@ For this example, you can use the following data extension: - **command-injection** indicates that this is considered a sink for the command injection query. -Example: Taint sources from `sinatra` block parameters +Example: Taint sources from 'sinatra' block parameters ------------------------------------------------------ -In this example, we'll show how the `x` parameter below could be marked as a remote flow source: +In this example, we'll show how the 'x' parameter below could be marked as a remote flow source: .. code-block:: ruby @@ -160,7 +160,7 @@ model to indicate that **Mysql2::EM::Client** is a subclass of **Mysql2::Client* Example: Adding flow through 'URI.decode_uri_component' ------------------------------------------------------- -In this example, we'll show how to add flow through calls to `URI.decode_uri_component`: +In this example, we'll show how to add flow through calls to 'URI.decode_uri_component': .. code-block:: ruby @@ -176,7 +176,7 @@ We can model this using the following data extension: extensible: summaryModel data: - [ - "URI", + "URI!", "Method[decode_uri_component]", "Argument[0]", "ReturnValue", @@ -187,7 +187,7 @@ We can model this using the following data extension: - Since we're adding flow through a method call, we add a tuple to the **summaryModel** extensible predicate. - The first column, **"URI!"**, begins the search for relevant calls at references to the **URI** class. - The **!** suffix indicates that we are looking for the class itself, rather than instances of the class. -- The second column, **Member[decode_uri_component]**, is a path leading to the method calls we wish to model. +- The second column, **Method[decode_uri_component]**, is a path leading to the method calls we wish to model. In this case, we select references to the **decode_uri_component** method from the **URI** class. - The third column, **Argument[0]**, indicates the input of the flow. In this case, the first argument to the method call. - The fourth column, **ReturnValue**, indicates the output of the flow. In this case, the return value of the method call. @@ -393,11 +393,11 @@ Unlike sources, sinks tend to be highly query-specific, rarely affecting more th Not every query supports customizable sinks. If the following sinks are not suitable for your use case, you should add a new query. - **code-injection**: A sink that can be used to inject code, such as in calls to **eval**. -- **command-injection**: A sink that can be used to inject shell commands, such as in calls to **child_process.spawn**. -- **path-injection**: A sink that can be used for path injection in a file system access, such as in calls to **fs.readFile**. -- **sql-injection**: A sink that can be used for SQL injection, such as in a MySQL **query** call. +- **command-injection**: A sink that can be used to inject shell commands, such as in calls to **Process.spawn**. +- **path-injection**: A sink that can be used for path injection in a file system access, such as in calls to **File.open**. +- **sql-injection**: A sink that can be used for SQL injection, such as in an ActiveRecord **where** call. - **url-redirection**: A sink that can be used to redirect the user to a malicious URL. -- **log-injection**: A sink that can be used for log injection, such as in a **console.log** call. +- **log-injection**: A sink that can be used for log injection, such as in a **Rails.logger** call. Summary kinds ~~~~~~~~~~~~~ From 933a8e648db8f5f918baafbf8b4effa83e904b3a Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Mon, 12 Feb 2024 10:27:05 +0100 Subject: [PATCH 136/378] Add integration test for missing nuget package sources --- .../Assemblies.expected | 0 .../Assemblies.ql | 14 ++++++++++++++ .../nuget.config | 7 +++++++ .../proj/Program.cs | 6 ++++++ .../proj/global.json | 5 +++++ .../proj/packages.config | 4 ++++ .../proj/test.csproj | 4 ++++ .../skip-on-platform-osx-arm | 1 + .../test.py | 3 +++ 9 files changed, 44 insertions(+) create mode 100644 csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/Assemblies.expected create mode 100644 csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/Assemblies.ql create mode 100644 csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/nuget.config create mode 100644 csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/proj/Program.cs create mode 100644 csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/proj/global.json create mode 100644 csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/proj/packages.config create mode 100644 csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/proj/test.csproj create mode 100644 csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/skip-on-platform-osx-arm create mode 100644 csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/test.py diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/Assemblies.expected b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/Assemblies.expected new file mode 100644 index 00000000000..e69de29bb2d diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/Assemblies.ql b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/Assemblies.ql new file mode 100644 index 00000000000..e07e7c55e7d --- /dev/null +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/Assemblies.ql @@ -0,0 +1,14 @@ +import csharp + +private string getPath(Assembly a) { + not a.getCompilation().getOutputAssembly() = a and + exists(string s | s = a.getFile().getAbsolutePath() | + result = + s.substring(s.indexOf("test-db/working/") + "test-db/working/".length() + 16 + + "/legacypackages".length(), s.length()) + // TODO: include all other assemblies from the test results. Initially disable because mono installations were problematic on ARM runners. + ) +} + +from Assembly a +select getPath(a) diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/nuget.config b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/nuget.config new file mode 100644 index 00000000000..7cf2791d738 --- /dev/null +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/nuget.config @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/proj/Program.cs b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/proj/Program.cs new file mode 100644 index 00000000000..39a9e95bb6e --- /dev/null +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/proj/Program.cs @@ -0,0 +1,6 @@ +class Program +{ + static void Main(string[] args) + { + } +} \ No newline at end of file diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/proj/global.json b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/proj/global.json new file mode 100644 index 00000000000..5c3fd64fbd1 --- /dev/null +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/proj/global.json @@ -0,0 +1,5 @@ +{ + "sdk": { + "version": "8.0.101" + } +} diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/proj/packages.config b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/proj/packages.config new file mode 100644 index 00000000000..90071d0ca8c --- /dev/null +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/proj/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/proj/test.csproj b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/proj/test.csproj new file mode 100644 index 00000000000..f7600103d99 --- /dev/null +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/proj/test.csproj @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/skip-on-platform-osx-arm b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/skip-on-platform-osx-arm new file mode 100644 index 00000000000..6ebb8d63fcc --- /dev/null +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/skip-on-platform-osx-arm @@ -0,0 +1 @@ +Skipping the test on the ARM runners, as we're running into trouble with Mono and nuget. diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/test.py b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/test.py new file mode 100644 index 00000000000..4916763ec62 --- /dev/null +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/test.py @@ -0,0 +1,3 @@ +from create_database_utils import * + +run_codeql_database_create([], source="proj", lang="csharp", extra_args=["--extractor-option=buildless=true", "--extractor-option=cil=false"]) From 26cea33cc654fed10b90c07e53db6fe2ef8e12de Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Fri, 9 Feb 2024 23:01:00 +0100 Subject: [PATCH 137/378] C# - Add default nuget feed if there's none --- .../DependencyManager.cs | 14 ++- .../NugetPackages.cs | 118 +++++++++++++++++- .../Assemblies.expected | 1 + 3 files changed, 122 insertions(+), 11 deletions(-) diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs index cd071c307bf..01c3a022432 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs @@ -169,13 +169,15 @@ namespace Semmle.Extraction.CSharp.DependencyFetching { try { - var nuget = new NugetPackages(sourceDir.FullName, legacyPackageDirectory, logger); - var count = nuget.InstallPackages(); - - if (nuget.PackageCount > 0) + using (var nuget = new NugetPackages(sourceDir.FullName, legacyPackageDirectory, logger)) { - CompilationInfos.Add(("packages.config files", nuget.PackageCount.ToString())); - CompilationInfos.Add(("Successfully restored packages.config files", count.ToString())); + var count = nuget.InstallPackages(); + + if (nuget.PackageCount > 0) + { + CompilationInfos.Add(("packages.config files", nuget.PackageCount.ToString())); + CompilationInfos.Add(("Successfully restored packages.config files", count.ToString())); + } } var nugetPackageDlls = legacyPackageDirectory.DirInfo.GetFiles("*.dll", new EnumerationOptions { RecurseSubdirectories = true }); diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/NugetPackages.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/NugetPackages.cs index db0f20bc8cb..015e1c4b1f8 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/NugetPackages.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/NugetPackages.cs @@ -1,8 +1,8 @@ using System; +using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; -using Microsoft.Build.Framework; using Semmle.Util; namespace Semmle.Extraction.CSharp.DependencyFetching @@ -12,7 +12,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching /// Locates packages in a source tree and downloads all of the /// referenced assemblies to a temp folder. /// - internal class NugetPackages + internal class NugetPackages : IDisposable { private readonly string? nugetExe; private readonly Util.Logging.ILogger logger; @@ -24,6 +24,9 @@ namespace Semmle.Extraction.CSharp.DependencyFetching public int PackageCount => packageFiles.Length; + private readonly string? backupNugetConfig; + private readonly string? nugetConfigPath; + /// /// The computed packages directory. /// This will be in the Temp location @@ -47,6 +50,41 @@ namespace Semmle.Extraction.CSharp.DependencyFetching { logger.LogInfo($"Found {packageFiles.Length} packages.config files, trying to use nuget.exe for package restore"); nugetExe = ResolveNugetExe(sourceDir); + if (HasNoPackageSource()) + { + // We only modify or add a top level nuget.config file + nugetConfigPath = Path.Combine(sourceDir, "nuget.config"); + try + { + if (File.Exists(nugetConfigPath)) + { + var tempFolderPath = FileUtils.GetTemporaryWorkingDirectory(out var _); + + do + { + backupNugetConfig = Path.Combine(tempFolderPath, Path.GetRandomFileName()); + } + while (File.Exists(backupNugetConfig)); + File.Copy(nugetConfigPath, backupNugetConfig, true); + } + else + { + File.WriteAllText(nugetConfigPath, + """ + + + + + + """); + } + AddDefaultPackageSource(nugetConfigPath); + } + catch (Exception e) + { + logger.LogError($"Failed to add default package source to {nugetConfigPath}: {e}"); + } + } } else { @@ -118,15 +156,15 @@ namespace Semmle.Extraction.CSharp.DependencyFetching */ string exe, args; - if (Util.Win32.IsWindows()) + if (Win32.IsWindows()) { exe = nugetExe!; - args = string.Format("install -OutputDirectory {0} {1}", packageDirectory, package); + args = $"install -OutputDirectory {packageDirectory} {package}"; } else { exe = "mono"; - args = string.Format("{0} install -OutputDirectory {1} {2}", nugetExe, packageDirectory, package); + args = $"{nugetExe} install -OutputDirectory {packageDirectory} {package}"; } var pi = new ProcessStartInfo(exe, args) @@ -159,5 +197,75 @@ namespace Semmle.Extraction.CSharp.DependencyFetching { return packageFiles.Count(package => TryRestoreNugetPackage(package.FullName)); } + + private bool HasNoPackageSource() + { + if (Win32.IsWindows()) + { + return false; + } + + try + { + logger.LogInfo("Checking if default package source is available..."); + RunMonoNugetCommand("sources list -ForceEnglishOutput", out var stdout); + if (stdout.All(line => line != "No sources found.")) + { + return false; + } + + return true; + } + catch (Exception e) + { + logger.LogWarning($"Failed to check if default package source is added: {e}"); + return false; + } + } + + private void RunMonoNugetCommand(string command, out IList stdout) + { + var exe = "mono"; + var args = $"{nugetExe} {command}"; + var pi = new ProcessStartInfo(exe, args) + { + RedirectStandardOutput = true, + RedirectStandardError = true, + UseShellExecute = false + }; + + var threadId = Environment.CurrentManagedThreadId; + void onOut(string s) => logger.LogInfo(s, threadId); + void onError(string s) => logger.LogError(s, threadId); + pi.ReadOutput(out stdout, onOut, onError); + } + + private void AddDefaultPackageSource(string nugetConfig) + { + logger.LogInfo("Adding default package source..."); + RunMonoNugetCommand($"sources add -Name DefaultNugetOrg -Source https://api.nuget.org/v3/index.json -ConfigFile \"{nugetConfig}\"", out var _); + } + + public void Dispose() + { + if (nugetConfigPath is null) + { + return; + } + + try + { + File.Delete(nugetConfigPath); + + if (backupNugetConfig is not null) + { + File.Move(backupNugetConfig, nugetConfigPath); + } + } + catch (Exception exc) + { + logger.LogError($"Failed to restore original nuget.config file: {exc}"); + } + } } } diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/Assemblies.expected b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/Assemblies.expected index e69de29bb2d..720c83eff16 100644 --- a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/Assemblies.expected +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/Assemblies.expected @@ -0,0 +1 @@ +| /Newtonsoft.Json.6.0.4/lib/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.dll | From 5be3993405a88607b0b2aab2da0bd792ad9914d6 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Mon, 12 Feb 2024 09:46:52 +0100 Subject: [PATCH 138/378] Preserve nuget.config file casing after cleanup --- .../NugetPackages.cs | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/NugetPackages.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/NugetPackages.cs index 015e1c4b1f8..a4bc3e4bf60 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/NugetPackages.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/NugetPackages.cs @@ -255,12 +255,24 @@ namespace Semmle.Extraction.CSharp.DependencyFetching try { - File.Delete(nugetConfigPath); - - if (backupNugetConfig is not null) + if (backupNugetConfig is null) { - File.Move(backupNugetConfig, nugetConfigPath); + logger.LogInfo("Removing nuget.config file"); + File.Delete(nugetConfigPath); + return; } + + logger.LogInfo("Reverting nuget.config file content"); + // The content of the original nuget.config file is reverted without changing the file's attributes or casing: + using (var backup = File.OpenRead(backupNugetConfig)) + using (var current = File.OpenWrite(nugetConfigPath)) + { + current.SetLength(0); + backup.CopyTo(current); + } + + logger.LogInfo("Deleting backup nuget.config file"); + File.Delete(backupNugetConfig); } catch (Exception exc) { From 6779c667f62c0f17cd1730152a47a61a38dc43c9 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Mon, 12 Feb 2024 04:59:53 -0500 Subject: [PATCH 139/378] Limit xl runner jobs to github org --- .github/workflows/compile-queries.yml | 1 + .github/workflows/csharp-qltest.yml | 1 + .github/workflows/go-tests-other-os.yml | 1 + .github/workflows/go-tests.yml | 1 + .github/workflows/ql-for-ql-build.yml | 1 + .github/workflows/ruby-build.yml | 1 + .github/workflows/ruby-qltest.yml | 1 + .github/workflows/swift.yml | 8 ++++++-- 8 files changed, 13 insertions(+), 2 deletions(-) diff --git a/.github/workflows/compile-queries.yml b/.github/workflows/compile-queries.yml index c44aa56a753..bc8a9f8666d 100644 --- a/.github/workflows/compile-queries.yml +++ b/.github/workflows/compile-queries.yml @@ -10,6 +10,7 @@ on: jobs: compile-queries: + if: github.repository_owner == 'github' runs-on: ubuntu-latest-xl steps: diff --git a/.github/workflows/csharp-qltest.yml b/.github/workflows/csharp-qltest.yml index f9e1db3f4c7..cc9520de0e2 100644 --- a/.github/workflows/csharp-qltest.yml +++ b/.github/workflows/csharp-qltest.yml @@ -46,6 +46,7 @@ jobs: xargs codeql execute upgrades testdb diff -q testdb/semmlecode.csharp.dbscheme downgrades/initial/semmlecode.csharp.dbscheme qltest: + if: github.repository_owner == 'github' runs-on: ubuntu-latest-xl strategy: fail-fast: false diff --git a/.github/workflows/go-tests-other-os.yml b/.github/workflows/go-tests-other-os.yml index 8b0395fad90..9c489d38600 100644 --- a/.github/workflows/go-tests-other-os.yml +++ b/.github/workflows/go-tests-other-os.yml @@ -46,6 +46,7 @@ jobs: make test cache="${{ steps.query-cache.outputs.cache-dir }}" test-win: + if: github.repository_owner == 'github' name: Test Windows runs-on: windows-latest-xl steps: diff --git a/.github/workflows/go-tests.yml b/.github/workflows/go-tests.yml index 9d518ac70b6..9a6b2bde7d7 100644 --- a/.github/workflows/go-tests.yml +++ b/.github/workflows/go-tests.yml @@ -19,6 +19,7 @@ env: GO_VERSION: '~1.21.0' jobs: test-linux: + if: github.repository_owner == 'github' name: Test Linux (Ubuntu) runs-on: ubuntu-latest-xl steps: diff --git a/.github/workflows/ql-for-ql-build.yml b/.github/workflows/ql-for-ql-build.yml index e8ac1fa0f17..c5d237fc0d3 100644 --- a/.github/workflows/ql-for-ql-build.yml +++ b/.github/workflows/ql-for-ql-build.yml @@ -11,6 +11,7 @@ env: jobs: analyze: + if: github.repository_owner == 'github' runs-on: ubuntu-latest-xl steps: ### Build the queries ### diff --git a/.github/workflows/ruby-build.yml b/.github/workflows/ruby-build.yml index 392c6ff8302..61734647069 100644 --- a/.github/workflows/ruby-build.yml +++ b/.github/workflows/ruby-build.yml @@ -111,6 +111,7 @@ jobs: ruby/extractor/target/release/codeql-extractor-ruby.exe retention-days: 1 compile-queries: + if: github.repository_owner == 'github' runs-on: ubuntu-latest-xl steps: - uses: actions/checkout@v4 diff --git a/.github/workflows/ruby-qltest.yml b/.github/workflows/ruby-qltest.yml index 19d5325091f..fbac0488b51 100644 --- a/.github/workflows/ruby-qltest.yml +++ b/.github/workflows/ruby-qltest.yml @@ -50,6 +50,7 @@ jobs: xargs codeql execute upgrades testdb diff -q testdb/ruby.dbscheme downgrades/initial/ruby.dbscheme qltest: + if: github.repository_owner == 'github' runs-on: ubuntu-latest-xl strategy: fail-fast: false diff --git a/.github/workflows/swift.yml b/.github/workflows/swift.yml index ff9cd29e238..a461fbfdf8c 100644 --- a/.github/workflows/swift.yml +++ b/.github/workflows/swift.yml @@ -37,36 +37,40 @@ jobs: # not using a matrix as you cannot depend on a specific job in a matrix, and we want to start linux checks # without waiting for the macOS build build-and-test-macos: + if: github.repository_owner == 'github' runs-on: macos-12-xl steps: - uses: actions/checkout@v4 - uses: ./swift/actions/build-and-test build-and-test-linux: + if: github.repository_owner == 'github' runs-on: ubuntu-latest-xl steps: - uses: actions/checkout@v4 - uses: ./swift/actions/build-and-test qltests-linux: + if: github.repository_owner == 'github' needs: build-and-test-linux runs-on: ubuntu-latest-xl steps: - uses: actions/checkout@v4 - uses: ./swift/actions/run-ql-tests qltests-macos: - if : ${{ github.event_name == 'pull_request' }} + if: ${{ github.repository_owner == 'github' && github.event_name == 'pull_request' }} needs: build-and-test-macos runs-on: macos-12-xl steps: - uses: actions/checkout@v4 - uses: ./swift/actions/run-ql-tests integration-tests-linux: + if: github.repository_owner == 'github' needs: build-and-test-linux runs-on: ubuntu-latest-xl steps: - uses: actions/checkout@v4 - uses: ./swift/actions/run-integration-tests integration-tests-macos: - if : ${{ github.event_name == 'pull_request' }} + if: ${{ github.repository_owner == 'github' && github.event_name == 'pull_request' }} needs: build-and-test-macos runs-on: macos-12-xl timeout-minutes: 60 From d3fea4044ed0ad4d3e44b2c49c9b8f5f1782732a Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Mon, 12 Feb 2024 10:27:56 +0000 Subject: [PATCH 140/378] Apply suggestions from documentation review Co-authored-by: Ben Ahmady <32935794+subatoi@users.noreply.github.com> --- .../CWE/CWE-287/AndroidInsecureLocalAuthentication.qhelp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/java/ql/src/Security/CWE/CWE-287/AndroidInsecureLocalAuthentication.qhelp b/java/ql/src/Security/CWE/CWE-287/AndroidInsecureLocalAuthentication.qhelp index e65f00826bf..672e1a1a1ab 100644 --- a/java/ql/src/Security/CWE/CWE-287/AndroidInsecureLocalAuthentication.qhelp +++ b/java/ql/src/Security/CWE/CWE-287/AndroidInsecureLocalAuthentication.qhelp @@ -6,14 +6,13 @@

    Biometric local authentication such as fingerprint recognition can be used to protect sensitive data or actions within an application. -However, if this authentication does not make use of a KeyStore-backed key, it is able to be bypassed by a privileged malicious application or an attacker with physical access, -using application hooking tools such as Frida. +However, if this authentication does not use a KeyStore-backed key, it can be bypassed by a privileged malicious application, or by an attacker with physical access using application hooking tools such as Frida.

    -Generate a secure key in the Android KeyStore and ensure that the onAuthenticaionSuccess callback for a biometric prompt uses it +Generate a secure key in the Android KeyStore. Ensure that the onAuthenticationSuccess callback for a biometric prompt uses it in a way that is required for the sensitive parts of the application to function, such as by using it to decrypt sensitive data or credentials.

    @@ -21,7 +20,7 @@ in a way that is required for the sensitive parts of the application to function

    In the following (bad) case, no CryptoObject is required for the biometric prompt to grant access, so it can be bypassed.

    -

    In the following (good) case, a secret key is generated in the Android KeyStore that is required for the application to grant access by decrypting data.

    +

    In the following (good) case, a secret key is generated in the Android KeyStore. The application requires this secret key for access, using it to decrypt data.

    From 6d01ba67f7f644f8603261faf07ec761568a0f0b Mon Sep 17 00:00:00 2001 From: Asger F Date: Mon, 12 Feb 2024 11:39:29 +0100 Subject: [PATCH 141/378] JS: Check isPrivateLike in isExported instead --- .../ql/lib/semmle/javascript/endpoints/EndpointNaming.qll | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll b/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll index c01683535cf..e94515f44b7 100644 --- a/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll +++ b/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll @@ -49,7 +49,8 @@ private predicate isExported(API::Node node) { or exists(API::Node pred | isExported(pred) and - memberEdge(pred, node) + memberEdge(pred, node) and + not isPrivateLike(node) ) } @@ -82,7 +83,6 @@ private API::Node getASuccessor(API::Node node, string name, int badness) { isExported(node) and exists(string member | result = node.getMember(member) and - not isPrivateLike(node) and if member = "default" then if defaultExportCanBeInterpretedAsNamespaceExport(node) From 0fbe530d9e6dc4cfea85b677d29b516847054775 Mon Sep 17 00:00:00 2001 From: Asger F Date: Mon, 12 Feb 2024 11:39:40 +0100 Subject: [PATCH 142/378] JS: Fix some broken comments --- .../ql/lib/semmle/javascript/endpoints/EndpointNaming.qll | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll b/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll index e94515f44b7..6f6b8fc2ac3 100644 --- a/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll +++ b/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll @@ -121,7 +121,9 @@ private API::Node getPreferredPredecessor(API::Node node, string name, int badne } /** - * Holds if values escpin + * Holds if `(package, name)` is a potential name to associate with `sink`. + * + * `badness` is bound to the associated badness of the name. */ private predicate sinkHasNameCandidate(API::Node sink, string package, string name, int badness) { sink = API::moduleExport(package) and @@ -137,7 +139,7 @@ private predicate sinkHasNameCandidate(API::Node sink, string package, string na } /** - * Holds if `(package, name)` is the primary name to associate with `node`. + * Holds if `(package, name)` is the primary name to associate with `sink`. * * `badness` is bound to the associated badness of the name. */ From 8d3a19aaad6e3e69aba6bd940a5813dbb843aaa4 Mon Sep 17 00:00:00 2001 From: Asger F Date: Mon, 12 Feb 2024 11:44:52 +0100 Subject: [PATCH 143/378] JS: Fix termination criteria Previously it was theoretically possible to create a cycle of preferred predecessors, since badness had higher precedence than depth. We now require the preferred predecessor to have lower depth. With this criteria we can remove the arbitray cap on badness. --- .../semmle/javascript/endpoints/EndpointNaming.qll | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll b/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll index 6f6b8fc2ac3..79c35e33996 100644 --- a/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll +++ b/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll @@ -110,7 +110,14 @@ private API::Node getPreferredPredecessor(API::Node node, string name, int badne not isPackageExport(node) and // Rank predecessors by name-badness, export-distance, and name. // Since min() can only return a single value, we need a separate min() call per column. - badness = min(int b | exists(getAPredecessor(node, _, b)) | b) and + badness = + min(API::Node pred, int b | + pred = getAPredecessor(node, _, b) and + // ensure the preferred predecessor is strictly closer to a root export, even if it means accepting more badness + distanceFromPackageExport(pred) < distanceFromPackageExport(node) + | + b + ) and result = min(API::Node pred, string name1 | pred = getAPredecessor(node, name1, badness) @@ -133,7 +140,7 @@ private predicate sinkHasNameCandidate(API::Node sink, string package, string na exists(API::Node baseNode, string baseName, int baseBadness, string step, int stepBadness | sinkHasNameCandidate(baseNode, package, baseName, baseBadness) and baseNode = getPreferredPredecessor(sink, step, stepBadness) and - badness = (baseBadness + stepBadness).minimum(20) and + badness = baseBadness + stepBadness and name = join(baseName, step) ) } From 70b6ae6876b8104965660963fdebd674c044c3c6 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Mon, 12 Feb 2024 11:59:19 +0100 Subject: [PATCH 144/378] Add comments to nuget.config file restore --- .../NugetPackages.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/NugetPackages.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/NugetPackages.cs index a4bc3e4bf60..2183daf09cc 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/NugetPackages.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/NugetPackages.cs @@ -267,8 +267,8 @@ namespace Semmle.Extraction.CSharp.DependencyFetching using (var backup = File.OpenRead(backupNugetConfig)) using (var current = File.OpenWrite(nugetConfigPath)) { - current.SetLength(0); - backup.CopyTo(current); + current.SetLength(0); // Truncate file + backup.CopyTo(current); // Restore original content } logger.LogInfo("Deleting backup nuget.config file"); From 888f47c6c88a5376764c4036d8c5bc4d329be7e0 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Mon, 12 Feb 2024 12:02:41 +0100 Subject: [PATCH 145/378] Remove `cil=false` extractor option from integration tests --- csharp/ql/integration-tests/all-platforms/autobuild/test.py | 2 +- csharp/ql/integration-tests/all-platforms/cshtml/test.py | 2 +- .../integration-tests/all-platforms/cshtml_standalone/test.py | 2 +- .../all-platforms/cshtml_standalone_disabled/test.py | 2 +- .../all-platforms/cshtml_standalone_flowsteps/test.py | 2 +- .../all-platforms/cshtml_standalone_net6/test.py | 2 +- .../all-platforms/diag_recursive_generics/test.py | 2 +- csharp/ql/integration-tests/all-platforms/standalone/test.py | 2 +- .../all-platforms/standalone_dependencies_net48/test.py | 2 +- csharp/ql/integration-tests/linux-only/compiler_args/test.py | 2 +- .../standalone_dependencies_non_utf8_filename/test.py | 2 +- .../posix-only/standalone_dependencies/test.py | 2 +- .../posix-only/standalone_dependencies_multi_target/test.py | 2 +- .../posix-only/standalone_dependencies_nuget/test.py | 2 +- .../standalone_dependencies_nuget_config_error/test.py | 2 +- .../posix-only/standalone_dependencies_nuget_no_sources/test.py | 2 +- csharp/ql/integration-tests/posix-only/warn_as_error/test.py | 2 +- .../windows-only/standalone_dependencies/test.py | 2 +- 18 files changed, 18 insertions(+), 18 deletions(-) diff --git a/csharp/ql/integration-tests/all-platforms/autobuild/test.py b/csharp/ql/integration-tests/all-platforms/autobuild/test.py index 6a1f8864145..89c7dbf7113 100644 --- a/csharp/ql/integration-tests/all-platforms/autobuild/test.py +++ b/csharp/ql/integration-tests/all-platforms/autobuild/test.py @@ -1,3 +1,3 @@ from create_database_utils import * -run_codeql_database_create([], lang="csharp", extra_args=["--extractor-option=cil=false"]) +run_codeql_database_create([], lang="csharp") diff --git a/csharp/ql/integration-tests/all-platforms/cshtml/test.py b/csharp/ql/integration-tests/all-platforms/cshtml/test.py index 24cc83b4f2d..b9be34f1efb 100644 --- a/csharp/ql/integration-tests/all-platforms/cshtml/test.py +++ b/csharp/ql/integration-tests/all-platforms/cshtml/test.py @@ -1,3 +1,3 @@ from create_database_utils import * -run_codeql_database_create(['dotnet build'], lang="csharp", extra_args=["--extractor-option=cil=false"]) +run_codeql_database_create(['dotnet build'], lang="csharp") diff --git a/csharp/ql/integration-tests/all-platforms/cshtml_standalone/test.py b/csharp/ql/integration-tests/all-platforms/cshtml_standalone/test.py index c0647f00385..b1f535c1727 100644 --- a/csharp/ql/integration-tests/all-platforms/cshtml_standalone/test.py +++ b/csharp/ql/integration-tests/all-platforms/cshtml_standalone/test.py @@ -1,4 +1,4 @@ import os from create_database_utils import * -run_codeql_database_create(lang="csharp", extra_args=["--extractor-option=buildless=true", "--extractor-option=cil=false"]) +run_codeql_database_create(lang="csharp", extra_args=["--extractor-option=buildless=true"]) diff --git a/csharp/ql/integration-tests/all-platforms/cshtml_standalone_disabled/test.py b/csharp/ql/integration-tests/all-platforms/cshtml_standalone_disabled/test.py index dfce788f220..c00c6f6e2e8 100644 --- a/csharp/ql/integration-tests/all-platforms/cshtml_standalone_disabled/test.py +++ b/csharp/ql/integration-tests/all-platforms/cshtml_standalone_disabled/test.py @@ -2,4 +2,4 @@ import os from create_database_utils import * os.environ['CODEQL_EXTRACTOR_CSHARP_STANDALONE_EXTRACT_WEB_VIEWS'] = 'false' -run_codeql_database_create(lang="csharp", extra_args=["--extractor-option=buildless=true", "--extractor-option=cil=false"]) +run_codeql_database_create(lang="csharp", extra_args=["--extractor-option=buildless=true"]) diff --git a/csharp/ql/integration-tests/all-platforms/cshtml_standalone_flowsteps/test.py b/csharp/ql/integration-tests/all-platforms/cshtml_standalone_flowsteps/test.py index c0647f00385..b1f535c1727 100644 --- a/csharp/ql/integration-tests/all-platforms/cshtml_standalone_flowsteps/test.py +++ b/csharp/ql/integration-tests/all-platforms/cshtml_standalone_flowsteps/test.py @@ -1,4 +1,4 @@ import os from create_database_utils import * -run_codeql_database_create(lang="csharp", extra_args=["--extractor-option=buildless=true", "--extractor-option=cil=false"]) +run_codeql_database_create(lang="csharp", extra_args=["--extractor-option=buildless=true"]) diff --git a/csharp/ql/integration-tests/all-platforms/cshtml_standalone_net6/test.py b/csharp/ql/integration-tests/all-platforms/cshtml_standalone_net6/test.py index c0647f00385..b1f535c1727 100644 --- a/csharp/ql/integration-tests/all-platforms/cshtml_standalone_net6/test.py +++ b/csharp/ql/integration-tests/all-platforms/cshtml_standalone_net6/test.py @@ -1,4 +1,4 @@ import os from create_database_utils import * -run_codeql_database_create(lang="csharp", extra_args=["--extractor-option=buildless=true", "--extractor-option=cil=false"]) +run_codeql_database_create(lang="csharp", extra_args=["--extractor-option=buildless=true"]) diff --git a/csharp/ql/integration-tests/all-platforms/diag_recursive_generics/test.py b/csharp/ql/integration-tests/all-platforms/diag_recursive_generics/test.py index 24cc83b4f2d..b9be34f1efb 100644 --- a/csharp/ql/integration-tests/all-platforms/diag_recursive_generics/test.py +++ b/csharp/ql/integration-tests/all-platforms/diag_recursive_generics/test.py @@ -1,3 +1,3 @@ from create_database_utils import * -run_codeql_database_create(['dotnet build'], lang="csharp", extra_args=["--extractor-option=cil=false"]) +run_codeql_database_create(['dotnet build'], lang="csharp") diff --git a/csharp/ql/integration-tests/all-platforms/standalone/test.py b/csharp/ql/integration-tests/all-platforms/standalone/test.py index 58074b430b2..72f47e38d22 100644 --- a/csharp/ql/integration-tests/all-platforms/standalone/test.py +++ b/csharp/ql/integration-tests/all-platforms/standalone/test.py @@ -1,3 +1,3 @@ from create_database_utils import * -run_codeql_database_create([], lang="csharp", extra_args=["--extractor-option=buildless=true", "--extractor-option=cil=false"]) +run_codeql_database_create([], lang="csharp", extra_args=["--extractor-option=buildless=true"]) diff --git a/csharp/ql/integration-tests/all-platforms/standalone_dependencies_net48/test.py b/csharp/ql/integration-tests/all-platforms/standalone_dependencies_net48/test.py index 58074b430b2..72f47e38d22 100644 --- a/csharp/ql/integration-tests/all-platforms/standalone_dependencies_net48/test.py +++ b/csharp/ql/integration-tests/all-platforms/standalone_dependencies_net48/test.py @@ -1,3 +1,3 @@ from create_database_utils import * -run_codeql_database_create([], lang="csharp", extra_args=["--extractor-option=buildless=true", "--extractor-option=cil=false"]) +run_codeql_database_create([], lang="csharp", extra_args=["--extractor-option=buildless=true"]) diff --git a/csharp/ql/integration-tests/linux-only/compiler_args/test.py b/csharp/ql/integration-tests/linux-only/compiler_args/test.py index 6a1f8864145..89c7dbf7113 100644 --- a/csharp/ql/integration-tests/linux-only/compiler_args/test.py +++ b/csharp/ql/integration-tests/linux-only/compiler_args/test.py @@ -1,3 +1,3 @@ from create_database_utils import * -run_codeql_database_create([], lang="csharp", extra_args=["--extractor-option=cil=false"]) +run_codeql_database_create([], lang="csharp") diff --git a/csharp/ql/integration-tests/linux-only/standalone_dependencies_non_utf8_filename/test.py b/csharp/ql/integration-tests/linux-only/standalone_dependencies_non_utf8_filename/test.py index 2a7f375abba..7173ed4c6c2 100644 --- a/csharp/ql/integration-tests/linux-only/standalone_dependencies_non_utf8_filename/test.py +++ b/csharp/ql/integration-tests/linux-only/standalone_dependencies_non_utf8_filename/test.py @@ -5,4 +5,4 @@ path = b'\xd2abcd.cs' with open(path, 'w') as file: file.write('class X { }\n') -run_codeql_database_create([], lang="csharp", extra_args=["--extractor-option=buildless=true", "--extractor-option=cil=false"]) +run_codeql_database_create([], lang="csharp", extra_args=["--extractor-option=buildless=true"]) diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies/test.py b/csharp/ql/integration-tests/posix-only/standalone_dependencies/test.py index 58074b430b2..72f47e38d22 100644 --- a/csharp/ql/integration-tests/posix-only/standalone_dependencies/test.py +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies/test.py @@ -1,3 +1,3 @@ from create_database_utils import * -run_codeql_database_create([], lang="csharp", extra_args=["--extractor-option=buildless=true", "--extractor-option=cil=false"]) +run_codeql_database_create([], lang="csharp", extra_args=["--extractor-option=buildless=true"]) diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_multi_target/test.py b/csharp/ql/integration-tests/posix-only/standalone_dependencies_multi_target/test.py index 58074b430b2..72f47e38d22 100644 --- a/csharp/ql/integration-tests/posix-only/standalone_dependencies_multi_target/test.py +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_multi_target/test.py @@ -1,3 +1,3 @@ from create_database_utils import * -run_codeql_database_create([], lang="csharp", extra_args=["--extractor-option=buildless=true", "--extractor-option=cil=false"]) +run_codeql_database_create([], lang="csharp", extra_args=["--extractor-option=buildless=true"]) diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget/test.py b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget/test.py index 58074b430b2..72f47e38d22 100644 --- a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget/test.py +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget/test.py @@ -1,3 +1,3 @@ from create_database_utils import * -run_codeql_database_create([], lang="csharp", extra_args=["--extractor-option=buildless=true", "--extractor-option=cil=false"]) +run_codeql_database_create([], lang="csharp", extra_args=["--extractor-option=buildless=true"]) diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error/test.py b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error/test.py index 58074b430b2..72f47e38d22 100644 --- a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error/test.py +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error/test.py @@ -1,3 +1,3 @@ from create_database_utils import * -run_codeql_database_create([], lang="csharp", extra_args=["--extractor-option=buildless=true", "--extractor-option=cil=false"]) +run_codeql_database_create([], lang="csharp", extra_args=["--extractor-option=buildless=true"]) diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/test.py b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/test.py index 4916763ec62..9142835c65f 100644 --- a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/test.py +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/test.py @@ -1,3 +1,3 @@ from create_database_utils import * -run_codeql_database_create([], source="proj", lang="csharp", extra_args=["--extractor-option=buildless=true", "--extractor-option=cil=false"]) +run_codeql_database_create([], source="proj", lang="csharp", extra_args=["--extractor-option=buildless=true"]) diff --git a/csharp/ql/integration-tests/posix-only/warn_as_error/test.py b/csharp/ql/integration-tests/posix-only/warn_as_error/test.py index a0a7904259a..60f5c6422b7 100644 --- a/csharp/ql/integration-tests/posix-only/warn_as_error/test.py +++ b/csharp/ql/integration-tests/posix-only/warn_as_error/test.py @@ -2,6 +2,6 @@ import os from create_database_utils import * from diagnostics_test_utils import * -run_codeql_database_create(["./build.sh"], lang="csharp", extra_args=["--extractor-option=cil=false"]) +run_codeql_database_create(["./build.sh"], lang="csharp") check_diagnostics() diff --git a/csharp/ql/integration-tests/windows-only/standalone_dependencies/test.py b/csharp/ql/integration-tests/windows-only/standalone_dependencies/test.py index 58074b430b2..72f47e38d22 100644 --- a/csharp/ql/integration-tests/windows-only/standalone_dependencies/test.py +++ b/csharp/ql/integration-tests/windows-only/standalone_dependencies/test.py @@ -1,3 +1,3 @@ from create_database_utils import * -run_codeql_database_create([], lang="csharp", extra_args=["--extractor-option=buildless=true", "--extractor-option=cil=false"]) +run_codeql_database_create([], lang="csharp", extra_args=["--extractor-option=buildless=true"]) From afe3c5ea8d19cfe585541b00abac11075a94f864 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Fri, 2 Feb 2024 11:15:05 +0100 Subject: [PATCH 146/378] C#: Re-arrange the code in constructor data flow test and update expected output. --- .../library-tests/dataflow/fields/C_ctor.cs | 56 +++++---- .../dataflow/fields/FieldFlow.expected | 112 +++++++++--------- 2 files changed, 83 insertions(+), 85 deletions(-) diff --git a/csharp/ql/test/library-tests/dataflow/fields/C_ctor.cs b/csharp/ql/test/library-tests/dataflow/fields/C_ctor.cs index 346c24068bb..9ddb3f10567 100644 --- a/csharp/ql/test/library-tests/dataflow/fields/C_ctor.cs +++ b/csharp/ql/test/library-tests/dataflow/fields/C_ctor.cs @@ -1,42 +1,40 @@ -public class C_no_ctor +public class Constructors { - private Elem s1 = Util.Source(1); - - void M1() + public class C_no_ctor { - C_no_ctor c = new C_no_ctor(); - c.M2(); + private object s1 = Source(1); + + void M1() + { + C_no_ctor c = new C_no_ctor(); + c.M2(); + } + + public void M2() + { + Sink(s1); // $ hasValueFlow=1 + } } - public void M2() + public class C_with_ctor { - Util.Sink(s1); // $ hasValueFlow=1 - } -} + private object s1 = Source(1); -public class C_with_ctor -{ - private Elem s1 = Util.Source(1); + void M1() + { + C_with_ctor c = new C_with_ctor(); + c.M2(); + } - void M1() - { - C_with_ctor c = new C_with_ctor(); - c.M2(); + public C_with_ctor() { } + + public void M2() + { + Sink(s1); // $ hasValueFlow=1 + } } - public C_with_ctor() { } - - public void M2() - { - Util.Sink(s1); // $ hasValueFlow=1 - } -} - -class Util -{ public static void Sink(object o) { } public static T Source(object source) => throw null; } - -public class Elem { } diff --git a/csharp/ql/test/library-tests/dataflow/fields/FieldFlow.expected b/csharp/ql/test/library-tests/dataflow/fields/FieldFlow.expected index 4b4f70a46a8..bb94e9c6187 100644 --- a/csharp/ql/test/library-tests/dataflow/fields/FieldFlow.expected +++ b/csharp/ql/test/library-tests/dataflow/fields/FieldFlow.expected @@ -308,30 +308,30 @@ edges | C.cs:25:14:25:15 | this access : C [field s3] : Elem | C.cs:25:14:25:15 | access to field s3 | provenance | | | C.cs:27:14:27:15 | this access : C [property s5] : Elem | C.cs:27:14:27:15 | access to property s5 | provenance | | | C.cs:27:14:27:15 | this access : C [property s5] : Elem | C.cs:27:14:27:15 | access to property s5 | provenance | | -| C_ctor.cs:3:18:3:19 | [post] this access : C_no_ctor [field s1] : Elem | C_ctor.cs:7:23:7:37 | object creation of type C_no_ctor : C_no_ctor [field s1] : Elem | provenance | | -| C_ctor.cs:3:18:3:19 | [post] this access : C_no_ctor [field s1] : Elem | C_ctor.cs:7:23:7:37 | object creation of type C_no_ctor : C_no_ctor [field s1] : Elem | provenance | | -| C_ctor.cs:3:23:3:42 | call to method Source : Elem | C_ctor.cs:3:18:3:19 | [post] this access : C_no_ctor [field s1] : Elem | provenance | | -| C_ctor.cs:3:23:3:42 | call to method Source : Elem | C_ctor.cs:3:18:3:19 | [post] this access : C_no_ctor [field s1] : Elem | provenance | | -| C_ctor.cs:7:23:7:37 | object creation of type C_no_ctor : C_no_ctor [field s1] : Elem | C_ctor.cs:8:9:8:9 | access to local variable c : C_no_ctor [field s1] : Elem | provenance | | -| C_ctor.cs:7:23:7:37 | object creation of type C_no_ctor : C_no_ctor [field s1] : Elem | C_ctor.cs:8:9:8:9 | access to local variable c : C_no_ctor [field s1] : Elem | provenance | | -| C_ctor.cs:8:9:8:9 | access to local variable c : C_no_ctor [field s1] : Elem | C_ctor.cs:11:17:11:18 | this : C_no_ctor [field s1] : Elem | provenance | | -| C_ctor.cs:8:9:8:9 | access to local variable c : C_no_ctor [field s1] : Elem | C_ctor.cs:11:17:11:18 | this : C_no_ctor [field s1] : Elem | provenance | | -| C_ctor.cs:11:17:11:18 | this : C_no_ctor [field s1] : Elem | C_ctor.cs:13:19:13:20 | this access : C_no_ctor [field s1] : Elem | provenance | | -| C_ctor.cs:11:17:11:18 | this : C_no_ctor [field s1] : Elem | C_ctor.cs:13:19:13:20 | this access : C_no_ctor [field s1] : Elem | provenance | | -| C_ctor.cs:13:19:13:20 | this access : C_no_ctor [field s1] : Elem | C_ctor.cs:13:19:13:20 | access to field s1 | provenance | | -| C_ctor.cs:13:19:13:20 | this access : C_no_ctor [field s1] : Elem | C_ctor.cs:13:19:13:20 | access to field s1 | provenance | | -| C_ctor.cs:19:18:19:19 | [post] this access : C_with_ctor [field s1] : Elem | C_ctor.cs:23:25:23:41 | object creation of type C_with_ctor : C_with_ctor [field s1] : Elem | provenance | | -| C_ctor.cs:19:18:19:19 | [post] this access : C_with_ctor [field s1] : Elem | C_ctor.cs:23:25:23:41 | object creation of type C_with_ctor : C_with_ctor [field s1] : Elem | provenance | | -| C_ctor.cs:19:23:19:42 | call to method Source : Elem | C_ctor.cs:19:18:19:19 | [post] this access : C_with_ctor [field s1] : Elem | provenance | | -| C_ctor.cs:19:23:19:42 | call to method Source : Elem | C_ctor.cs:19:18:19:19 | [post] this access : C_with_ctor [field s1] : Elem | provenance | | -| C_ctor.cs:23:25:23:41 | object creation of type C_with_ctor : C_with_ctor [field s1] : Elem | C_ctor.cs:24:9:24:9 | access to local variable c : C_with_ctor [field s1] : Elem | provenance | | -| C_ctor.cs:23:25:23:41 | object creation of type C_with_ctor : C_with_ctor [field s1] : Elem | C_ctor.cs:24:9:24:9 | access to local variable c : C_with_ctor [field s1] : Elem | provenance | | -| C_ctor.cs:24:9:24:9 | access to local variable c : C_with_ctor [field s1] : Elem | C_ctor.cs:29:17:29:18 | this : C_with_ctor [field s1] : Elem | provenance | | -| C_ctor.cs:24:9:24:9 | access to local variable c : C_with_ctor [field s1] : Elem | C_ctor.cs:29:17:29:18 | this : C_with_ctor [field s1] : Elem | provenance | | -| C_ctor.cs:29:17:29:18 | this : C_with_ctor [field s1] : Elem | C_ctor.cs:31:19:31:20 | this access : C_with_ctor [field s1] : Elem | provenance | | -| C_ctor.cs:29:17:29:18 | this : C_with_ctor [field s1] : Elem | C_ctor.cs:31:19:31:20 | this access : C_with_ctor [field s1] : Elem | provenance | | -| C_ctor.cs:31:19:31:20 | this access : C_with_ctor [field s1] : Elem | C_ctor.cs:31:19:31:20 | access to field s1 | provenance | | -| C_ctor.cs:31:19:31:20 | this access : C_with_ctor [field s1] : Elem | C_ctor.cs:31:19:31:20 | access to field s1 | provenance | | +| C_ctor.cs:5:24:5:25 | [post] this access : C_no_ctor [field s1] : Object | C_ctor.cs:9:27:9:41 | object creation of type C_no_ctor : C_no_ctor [field s1] : Object | provenance | | +| C_ctor.cs:5:24:5:25 | [post] this access : C_no_ctor [field s1] : Object | C_ctor.cs:9:27:9:41 | object creation of type C_no_ctor : C_no_ctor [field s1] : Object | provenance | | +| C_ctor.cs:5:29:5:45 | call to method Source : Object | C_ctor.cs:5:24:5:25 | [post] this access : C_no_ctor [field s1] : Object | provenance | | +| C_ctor.cs:5:29:5:45 | call to method Source : Object | C_ctor.cs:5:24:5:25 | [post] this access : C_no_ctor [field s1] : Object | provenance | | +| C_ctor.cs:9:27:9:41 | object creation of type C_no_ctor : C_no_ctor [field s1] : Object | C_ctor.cs:10:13:10:13 | access to local variable c : C_no_ctor [field s1] : Object | provenance | | +| C_ctor.cs:9:27:9:41 | object creation of type C_no_ctor : C_no_ctor [field s1] : Object | C_ctor.cs:10:13:10:13 | access to local variable c : C_no_ctor [field s1] : Object | provenance | | +| C_ctor.cs:10:13:10:13 | access to local variable c : C_no_ctor [field s1] : Object | C_ctor.cs:13:21:13:22 | this : C_no_ctor [field s1] : Object | provenance | | +| C_ctor.cs:10:13:10:13 | access to local variable c : C_no_ctor [field s1] : Object | C_ctor.cs:13:21:13:22 | this : C_no_ctor [field s1] : Object | provenance | | +| C_ctor.cs:13:21:13:22 | this : C_no_ctor [field s1] : Object | C_ctor.cs:15:18:15:19 | this access : C_no_ctor [field s1] : Object | provenance | | +| C_ctor.cs:13:21:13:22 | this : C_no_ctor [field s1] : Object | C_ctor.cs:15:18:15:19 | this access : C_no_ctor [field s1] : Object | provenance | | +| C_ctor.cs:15:18:15:19 | this access : C_no_ctor [field s1] : Object | C_ctor.cs:15:18:15:19 | access to field s1 | provenance | | +| C_ctor.cs:15:18:15:19 | this access : C_no_ctor [field s1] : Object | C_ctor.cs:15:18:15:19 | access to field s1 | provenance | | +| C_ctor.cs:21:24:21:25 | [post] this access : C_with_ctor [field s1] : Object | C_ctor.cs:25:29:25:45 | object creation of type C_with_ctor : C_with_ctor [field s1] : Object | provenance | | +| C_ctor.cs:21:24:21:25 | [post] this access : C_with_ctor [field s1] : Object | C_ctor.cs:25:29:25:45 | object creation of type C_with_ctor : C_with_ctor [field s1] : Object | provenance | | +| C_ctor.cs:21:29:21:45 | call to method Source : Object | C_ctor.cs:21:24:21:25 | [post] this access : C_with_ctor [field s1] : Object | provenance | | +| C_ctor.cs:21:29:21:45 | call to method Source : Object | C_ctor.cs:21:24:21:25 | [post] this access : C_with_ctor [field s1] : Object | provenance | | +| C_ctor.cs:25:29:25:45 | object creation of type C_with_ctor : C_with_ctor [field s1] : Object | C_ctor.cs:26:13:26:13 | access to local variable c : C_with_ctor [field s1] : Object | provenance | | +| C_ctor.cs:25:29:25:45 | object creation of type C_with_ctor : C_with_ctor [field s1] : Object | C_ctor.cs:26:13:26:13 | access to local variable c : C_with_ctor [field s1] : Object | provenance | | +| C_ctor.cs:26:13:26:13 | access to local variable c : C_with_ctor [field s1] : Object | C_ctor.cs:31:21:31:22 | this : C_with_ctor [field s1] : Object | provenance | | +| C_ctor.cs:26:13:26:13 | access to local variable c : C_with_ctor [field s1] : Object | C_ctor.cs:31:21:31:22 | this : C_with_ctor [field s1] : Object | provenance | | +| C_ctor.cs:31:21:31:22 | this : C_with_ctor [field s1] : Object | C_ctor.cs:33:18:33:19 | this access : C_with_ctor [field s1] : Object | provenance | | +| C_ctor.cs:31:21:31:22 | this : C_with_ctor [field s1] : Object | C_ctor.cs:33:18:33:19 | this access : C_with_ctor [field s1] : Object | provenance | | +| C_ctor.cs:33:18:33:19 | this access : C_with_ctor [field s1] : Object | C_ctor.cs:33:18:33:19 | access to field s1 | provenance | | +| C_ctor.cs:33:18:33:19 | this access : C_with_ctor [field s1] : Object | C_ctor.cs:33:18:33:19 | access to field s1 | provenance | | | D.cs:8:9:8:11 | this : D [field trivialPropField] : Object | D.cs:8:22:8:25 | this access : D [field trivialPropField] : Object | provenance | | | D.cs:8:9:8:11 | this : D [field trivialPropField] : Object | D.cs:8:22:8:25 | this access : D [field trivialPropField] : Object | provenance | | | D.cs:8:22:8:25 | this access : D [field trivialPropField] : Object | D.cs:8:22:8:42 | access to field trivialPropField : Object | provenance | | @@ -1281,34 +1281,34 @@ nodes | C.cs:27:14:27:15 | this access : C [property s5] : Elem | semmle.label | this access : C [property s5] : Elem | | C.cs:28:14:28:15 | access to property s6 | semmle.label | access to property s6 | | C.cs:28:14:28:15 | access to property s6 | semmle.label | access to property s6 | -| C_ctor.cs:3:18:3:19 | [post] this access : C_no_ctor [field s1] : Elem | semmle.label | [post] this access : C_no_ctor [field s1] : Elem | -| C_ctor.cs:3:18:3:19 | [post] this access : C_no_ctor [field s1] : Elem | semmle.label | [post] this access : C_no_ctor [field s1] : Elem | -| C_ctor.cs:3:23:3:42 | call to method Source : Elem | semmle.label | call to method Source : Elem | -| C_ctor.cs:3:23:3:42 | call to method Source : Elem | semmle.label | call to method Source : Elem | -| C_ctor.cs:7:23:7:37 | object creation of type C_no_ctor : C_no_ctor [field s1] : Elem | semmle.label | object creation of type C_no_ctor : C_no_ctor [field s1] : Elem | -| C_ctor.cs:7:23:7:37 | object creation of type C_no_ctor : C_no_ctor [field s1] : Elem | semmle.label | object creation of type C_no_ctor : C_no_ctor [field s1] : Elem | -| C_ctor.cs:8:9:8:9 | access to local variable c : C_no_ctor [field s1] : Elem | semmle.label | access to local variable c : C_no_ctor [field s1] : Elem | -| C_ctor.cs:8:9:8:9 | access to local variable c : C_no_ctor [field s1] : Elem | semmle.label | access to local variable c : C_no_ctor [field s1] : Elem | -| C_ctor.cs:11:17:11:18 | this : C_no_ctor [field s1] : Elem | semmle.label | this : C_no_ctor [field s1] : Elem | -| C_ctor.cs:11:17:11:18 | this : C_no_ctor [field s1] : Elem | semmle.label | this : C_no_ctor [field s1] : Elem | -| C_ctor.cs:13:19:13:20 | access to field s1 | semmle.label | access to field s1 | -| C_ctor.cs:13:19:13:20 | access to field s1 | semmle.label | access to field s1 | -| C_ctor.cs:13:19:13:20 | this access : C_no_ctor [field s1] : Elem | semmle.label | this access : C_no_ctor [field s1] : Elem | -| C_ctor.cs:13:19:13:20 | this access : C_no_ctor [field s1] : Elem | semmle.label | this access : C_no_ctor [field s1] : Elem | -| C_ctor.cs:19:18:19:19 | [post] this access : C_with_ctor [field s1] : Elem | semmle.label | [post] this access : C_with_ctor [field s1] : Elem | -| C_ctor.cs:19:18:19:19 | [post] this access : C_with_ctor [field s1] : Elem | semmle.label | [post] this access : C_with_ctor [field s1] : Elem | -| C_ctor.cs:19:23:19:42 | call to method Source : Elem | semmle.label | call to method Source : Elem | -| C_ctor.cs:19:23:19:42 | call to method Source : Elem | semmle.label | call to method Source : Elem | -| C_ctor.cs:23:25:23:41 | object creation of type C_with_ctor : C_with_ctor [field s1] : Elem | semmle.label | object creation of type C_with_ctor : C_with_ctor [field s1] : Elem | -| C_ctor.cs:23:25:23:41 | object creation of type C_with_ctor : C_with_ctor [field s1] : Elem | semmle.label | object creation of type C_with_ctor : C_with_ctor [field s1] : Elem | -| C_ctor.cs:24:9:24:9 | access to local variable c : C_with_ctor [field s1] : Elem | semmle.label | access to local variable c : C_with_ctor [field s1] : Elem | -| C_ctor.cs:24:9:24:9 | access to local variable c : C_with_ctor [field s1] : Elem | semmle.label | access to local variable c : C_with_ctor [field s1] : Elem | -| C_ctor.cs:29:17:29:18 | this : C_with_ctor [field s1] : Elem | semmle.label | this : C_with_ctor [field s1] : Elem | -| C_ctor.cs:29:17:29:18 | this : C_with_ctor [field s1] : Elem | semmle.label | this : C_with_ctor [field s1] : Elem | -| C_ctor.cs:31:19:31:20 | access to field s1 | semmle.label | access to field s1 | -| C_ctor.cs:31:19:31:20 | access to field s1 | semmle.label | access to field s1 | -| C_ctor.cs:31:19:31:20 | this access : C_with_ctor [field s1] : Elem | semmle.label | this access : C_with_ctor [field s1] : Elem | -| C_ctor.cs:31:19:31:20 | this access : C_with_ctor [field s1] : Elem | semmle.label | this access : C_with_ctor [field s1] : Elem | +| C_ctor.cs:5:24:5:25 | [post] this access : C_no_ctor [field s1] : Object | semmle.label | [post] this access : C_no_ctor [field s1] : Object | +| C_ctor.cs:5:24:5:25 | [post] this access : C_no_ctor [field s1] : Object | semmle.label | [post] this access : C_no_ctor [field s1] : Object | +| C_ctor.cs:5:29:5:45 | call to method Source : Object | semmle.label | call to method Source : Object | +| C_ctor.cs:5:29:5:45 | call to method Source : Object | semmle.label | call to method Source : Object | +| C_ctor.cs:9:27:9:41 | object creation of type C_no_ctor : C_no_ctor [field s1] : Object | semmle.label | object creation of type C_no_ctor : C_no_ctor [field s1] : Object | +| C_ctor.cs:9:27:9:41 | object creation of type C_no_ctor : C_no_ctor [field s1] : Object | semmle.label | object creation of type C_no_ctor : C_no_ctor [field s1] : Object | +| C_ctor.cs:10:13:10:13 | access to local variable c : C_no_ctor [field s1] : Object | semmle.label | access to local variable c : C_no_ctor [field s1] : Object | +| C_ctor.cs:10:13:10:13 | access to local variable c : C_no_ctor [field s1] : Object | semmle.label | access to local variable c : C_no_ctor [field s1] : Object | +| C_ctor.cs:13:21:13:22 | this : C_no_ctor [field s1] : Object | semmle.label | this : C_no_ctor [field s1] : Object | +| C_ctor.cs:13:21:13:22 | this : C_no_ctor [field s1] : Object | semmle.label | this : C_no_ctor [field s1] : Object | +| C_ctor.cs:15:18:15:19 | access to field s1 | semmle.label | access to field s1 | +| C_ctor.cs:15:18:15:19 | access to field s1 | semmle.label | access to field s1 | +| C_ctor.cs:15:18:15:19 | this access : C_no_ctor [field s1] : Object | semmle.label | this access : C_no_ctor [field s1] : Object | +| C_ctor.cs:15:18:15:19 | this access : C_no_ctor [field s1] : Object | semmle.label | this access : C_no_ctor [field s1] : Object | +| C_ctor.cs:21:24:21:25 | [post] this access : C_with_ctor [field s1] : Object | semmle.label | [post] this access : C_with_ctor [field s1] : Object | +| C_ctor.cs:21:24:21:25 | [post] this access : C_with_ctor [field s1] : Object | semmle.label | [post] this access : C_with_ctor [field s1] : Object | +| C_ctor.cs:21:29:21:45 | call to method Source : Object | semmle.label | call to method Source : Object | +| C_ctor.cs:21:29:21:45 | call to method Source : Object | semmle.label | call to method Source : Object | +| C_ctor.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 | +| C_ctor.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 | +| C_ctor.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 | +| C_ctor.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 | +| C_ctor.cs:31:21:31:22 | this : C_with_ctor [field s1] : Object | semmle.label | this : C_with_ctor [field s1] : Object | +| C_ctor.cs:31:21:31:22 | this : C_with_ctor [field s1] : Object | semmle.label | this : C_with_ctor [field s1] : Object | +| C_ctor.cs:33:18:33:19 | access to field s1 | semmle.label | access to field s1 | +| C_ctor.cs:33:18:33:19 | access to field s1 | semmle.label | access to field s1 | +| C_ctor.cs:33:18:33:19 | this access : C_with_ctor [field s1] : Object | semmle.label | this access : C_with_ctor [field s1] : Object | +| C_ctor.cs:33:18:33:19 | this access : C_with_ctor [field s1] : Object | semmle.label | this access : C_with_ctor [field s1] : Object | | D.cs:8:9:8:11 | this : D [field trivialPropField] : Object | semmle.label | this : D [field trivialPropField] : Object | | D.cs:8:9:8:11 | this : D [field trivialPropField] : Object | semmle.label | this : D [field trivialPropField] : Object | | D.cs:8:22:8:25 | this access : D [field trivialPropField] : Object | semmle.label | this access : D [field trivialPropField] : Object | @@ -2121,10 +2121,10 @@ subpaths | C.cs:27:14:27:15 | access to property s5 | C.cs:7:37:7:51 | call to method Source : Elem | C.cs:27:14:27:15 | access to property s5 | $@ | C.cs:7:37:7:51 | call to method Source : Elem | call to method Source : Elem | | C.cs:28:14:28:15 | access to property s6 | C.cs:8:30:8:44 | call to method Source : Elem | C.cs:28:14:28:15 | access to property s6 | $@ | C.cs:8:30:8:44 | call to method Source : Elem | call to method Source : Elem | | C.cs:28:14:28:15 | access to property s6 | C.cs:8:30:8:44 | call to method Source : Elem | C.cs:28:14:28:15 | access to property s6 | $@ | C.cs:8:30:8:44 | call to method Source : Elem | call to method Source : Elem | -| C_ctor.cs:13:19:13:20 | access to field s1 | C_ctor.cs:3:23:3:42 | call to method Source : Elem | C_ctor.cs:13:19:13:20 | access to field s1 | $@ | C_ctor.cs:3:23:3:42 | call to method Source : Elem | call to method Source : Elem | -| C_ctor.cs:13:19:13:20 | access to field s1 | C_ctor.cs:3:23:3:42 | call to method Source : Elem | C_ctor.cs:13:19:13:20 | access to field s1 | $@ | C_ctor.cs:3:23:3:42 | call to method Source : Elem | call to method Source : Elem | -| C_ctor.cs:31:19:31:20 | access to field s1 | C_ctor.cs:19:23:19:42 | call to method Source : Elem | C_ctor.cs:31:19:31:20 | access to field s1 | $@ | C_ctor.cs:19:23:19:42 | call to method Source : Elem | call to method Source : Elem | -| C_ctor.cs:31:19:31:20 | access to field s1 | C_ctor.cs:19:23:19:42 | call to method Source : Elem | C_ctor.cs:31:19:31:20 | access to field s1 | $@ | C_ctor.cs:19:23:19:42 | call to method Source : Elem | call to method Source : Elem | +| C_ctor.cs:15:18:15:19 | access to field s1 | C_ctor.cs:5:29:5:45 | call to method Source : Object | C_ctor.cs:15:18:15:19 | access to field s1 | $@ | C_ctor.cs:5:29:5:45 | call to method Source : Object | call to method Source : Object | +| C_ctor.cs:15:18:15:19 | access to field s1 | C_ctor.cs:5:29:5:45 | call to method Source : Object | C_ctor.cs:15:18:15:19 | access to field s1 | $@ | C_ctor.cs:5:29:5:45 | call to method Source : Object | call to method Source : Object | +| C_ctor.cs:33:18:33:19 | access to field s1 | C_ctor.cs:21:29:21:45 | call to method Source : Object | C_ctor.cs:33:18:33:19 | access to field s1 | $@ | C_ctor.cs:21:29:21:45 | call to method Source : Object | call to method Source : Object | +| C_ctor.cs:33:18:33:19 | access to field s1 | C_ctor.cs:21:29:21:45 | call to method Source : Object | C_ctor.cs:33:18:33:19 | access to field s1 | $@ | C_ctor.cs:21:29:21:45 | call to method Source : Object | call to method Source : Object | | D.cs:32:14:32:23 | access to property AutoProp | D.cs:29:17:29:33 | call to method Source : Object | D.cs:32:14:32:23 | access to property AutoProp | $@ | D.cs:29:17:29:33 | call to method Source : Object | call to method Source : Object | | D.cs:32:14:32:23 | access to property AutoProp | D.cs:29:17:29:33 | call to method Source : Object | D.cs:32:14:32:23 | access to property AutoProp | $@ | D.cs:29:17:29:33 | call to method Source : Object | call to method Source : Object | | D.cs:39:14:39:26 | access to property TrivialProp | D.cs:37:26:37:42 | call to method Source : Object | D.cs:39:14:39:26 | access to property TrivialProp | $@ | D.cs:37:26:37:42 | call to method Source : Object | call to method Source : Object | From 86212b24ba0c72ccb88a0ec8999b20b698f2aa95 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Fri, 2 Feb 2024 11:20:44 +0100 Subject: [PATCH 147/378] C#: Move constructor data flow tests to a separate folder. --- .../constructors/ConstructorFlow.expected | 61 +++++++++++++++++++ .../dataflow/constructors/ConstructorFlow.ql | 12 ++++ .../Constructors.cs} | 0 .../dataflow/fields/FieldFlow.expected | 56 ----------------- 4 files changed, 73 insertions(+), 56 deletions(-) create mode 100644 csharp/ql/test/library-tests/dataflow/constructors/ConstructorFlow.expected create mode 100644 csharp/ql/test/library-tests/dataflow/constructors/ConstructorFlow.ql rename csharp/ql/test/library-tests/dataflow/{fields/C_ctor.cs => constructors/Constructors.cs} (100%) diff --git a/csharp/ql/test/library-tests/dataflow/constructors/ConstructorFlow.expected b/csharp/ql/test/library-tests/dataflow/constructors/ConstructorFlow.expected new file mode 100644 index 00000000000..0230ad08227 --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/constructors/ConstructorFlow.expected @@ -0,0 +1,61 @@ +testFailures +edges +| Constructors.cs:5:24:5:25 | [post] this access : C_no_ctor [field s1] : Object | Constructors.cs:9:27:9:41 | object creation of type C_no_ctor : C_no_ctor [field s1] : Object | +| Constructors.cs:5:24:5:25 | [post] this access : C_no_ctor [field s1] : Object | Constructors.cs:9:27:9:41 | object creation of type C_no_ctor : C_no_ctor [field s1] : Object | +| Constructors.cs:5:29:5:45 | call to method Source : Object | Constructors.cs:5:24:5:25 | [post] this access : C_no_ctor [field s1] : Object | +| Constructors.cs:5:29:5:45 | call to method Source : Object | Constructors.cs:5:24:5:25 | [post] this access : C_no_ctor [field s1] : Object | +| Constructors.cs:9:27:9:41 | object creation of type C_no_ctor : C_no_ctor [field s1] : Object | Constructors.cs:10:13:10:13 | access to local variable c : C_no_ctor [field s1] : Object | +| Constructors.cs:9:27:9:41 | object creation of type C_no_ctor : C_no_ctor [field s1] : Object | Constructors.cs:10:13:10:13 | access to local variable c : C_no_ctor [field s1] : Object | +| 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 | +| 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 | +| 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 | +| 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 | +| Constructors.cs:15:18:15:19 | this access : C_no_ctor [field s1] : Object | Constructors.cs:15:18:15:19 | access to field s1 | +| Constructors.cs:15:18:15:19 | this access : C_no_ctor [field s1] : Object | Constructors.cs:15:18:15:19 | access to field s1 | +| Constructors.cs:21:24:21:25 | [post] this access : 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 | +| Constructors.cs:21:24:21:25 | [post] this access : 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 | +| 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 | +| 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 | +| Constructors.cs:25:29:25:45 | 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 | +| Constructors.cs:25:29:25:45 | 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 | +| 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 | +| 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 | +| 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 | +| 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 | +| Constructors.cs:33:18:33:19 | this access : C_with_ctor [field s1] : Object | Constructors.cs:33:18:33:19 | access to field s1 | +| Constructors.cs:33:18:33:19 | this access : C_with_ctor [field s1] : Object | Constructors.cs:33:18:33:19 | access to field s1 | +nodes +| Constructors.cs:5:24:5:25 | [post] this access : C_no_ctor [field s1] : Object | semmle.label | [post] this access : C_no_ctor [field s1] : Object | +| Constructors.cs:5:24:5:25 | [post] this access : C_no_ctor [field s1] : Object | semmle.label | [post] this access : C_no_ctor [field s1] : Object | +| Constructors.cs:5:29:5:45 | call to method Source : Object | semmle.label | call to method Source : Object | +| Constructors.cs:5:29:5:45 | call to method Source : Object | semmle.label | call to method Source : Object | +| Constructors.cs:9:27:9:41 | object creation of type C_no_ctor : C_no_ctor [field s1] : Object | semmle.label | object creation of type C_no_ctor : C_no_ctor [field s1] : Object | +| Constructors.cs:9:27:9:41 | object creation of type C_no_ctor : C_no_ctor [field s1] : Object | semmle.label | object creation of type C_no_ctor : C_no_ctor [field s1] : Object | +| Constructors.cs:10:13:10:13 | access to local variable c : C_no_ctor [field s1] : Object | semmle.label | access to local variable c : C_no_ctor [field s1] : Object | +| Constructors.cs:10:13:10:13 | access to local variable c : C_no_ctor [field s1] : Object | semmle.label | access to local variable c : C_no_ctor [field s1] : Object | +| Constructors.cs:13:21:13:22 | this : C_no_ctor [field s1] : Object | semmle.label | this : C_no_ctor [field s1] : Object | +| Constructors.cs:13:21:13:22 | this : C_no_ctor [field s1] : Object | semmle.label | this : C_no_ctor [field s1] : Object | +| Constructors.cs:15:18:15:19 | access to field s1 | semmle.label | access to field s1 | +| Constructors.cs:15:18:15:19 | access to field s1 | semmle.label | access to field s1 | +| Constructors.cs:15:18:15:19 | this access : C_no_ctor [field s1] : Object | semmle.label | this access : C_no_ctor [field s1] : Object | +| Constructors.cs:15:18:15:19 | this access : C_no_ctor [field s1] : Object | semmle.label | this access : C_no_ctor [field s1] : Object | +| Constructors.cs:21:24:21:25 | [post] this access : C_with_ctor [field s1] : Object | semmle.label | [post] this access : C_with_ctor [field s1] : Object | +| Constructors.cs:21:24:21:25 | [post] this access : C_with_ctor [field s1] : Object | semmle.label | [post] this access : C_with_ctor [field s1] : Object | +| Constructors.cs:21:29:21:45 | call to method Source : Object | semmle.label | call to method Source : Object | +| Constructors.cs:21:29:21:45 | call to method Source : Object | semmle.label | call to method Source : 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: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: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:31:21:31:22 | this : C_with_ctor [field s1] : Object | semmle.label | this : 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 | 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:33:18:33:19 | this access : C_with_ctor [field s1] : Object | semmle.label | this access : C_with_ctor [field s1] : Object | +subpaths +#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 | +| 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 | +| Constructors.cs:33:18:33:19 | access to field s1 | Constructors.cs:21:29:21:45 | call to method Source : Object | Constructors.cs:33:18:33:19 | access to field s1 | $@ | Constructors.cs:21:29:21:45 | call to method Source : Object | call to method Source : Object | +| Constructors.cs:33:18:33:19 | access to field s1 | Constructors.cs:21:29:21:45 | call to method Source : Object | Constructors.cs:33:18:33:19 | access to field s1 | $@ | Constructors.cs:21:29:21:45 | call to method Source : Object | call to method Source : Object | diff --git a/csharp/ql/test/library-tests/dataflow/constructors/ConstructorFlow.ql b/csharp/ql/test/library-tests/dataflow/constructors/ConstructorFlow.ql new file mode 100644 index 00000000000..9336e1b28be --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/constructors/ConstructorFlow.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/fields/C_ctor.cs b/csharp/ql/test/library-tests/dataflow/constructors/Constructors.cs similarity index 100% rename from csharp/ql/test/library-tests/dataflow/fields/C_ctor.cs rename to csharp/ql/test/library-tests/dataflow/constructors/Constructors.cs diff --git a/csharp/ql/test/library-tests/dataflow/fields/FieldFlow.expected b/csharp/ql/test/library-tests/dataflow/fields/FieldFlow.expected index bb94e9c6187..b5c1624c251 100644 --- a/csharp/ql/test/library-tests/dataflow/fields/FieldFlow.expected +++ b/csharp/ql/test/library-tests/dataflow/fields/FieldFlow.expected @@ -308,30 +308,6 @@ edges | C.cs:25:14:25:15 | this access : C [field s3] : Elem | C.cs:25:14:25:15 | access to field s3 | provenance | | | C.cs:27:14:27:15 | this access : C [property s5] : Elem | C.cs:27:14:27:15 | access to property s5 | provenance | | | C.cs:27:14:27:15 | this access : C [property s5] : Elem | C.cs:27:14:27:15 | access to property s5 | provenance | | -| C_ctor.cs:5:24:5:25 | [post] this access : C_no_ctor [field s1] : Object | C_ctor.cs:9:27:9:41 | object creation of type C_no_ctor : C_no_ctor [field s1] : Object | provenance | | -| C_ctor.cs:5:24:5:25 | [post] this access : C_no_ctor [field s1] : Object | C_ctor.cs:9:27:9:41 | object creation of type C_no_ctor : C_no_ctor [field s1] : Object | provenance | | -| C_ctor.cs:5:29:5:45 | call to method Source : Object | C_ctor.cs:5:24:5:25 | [post] this access : C_no_ctor [field s1] : Object | provenance | | -| C_ctor.cs:5:29:5:45 | call to method Source : Object | C_ctor.cs:5:24:5:25 | [post] this access : C_no_ctor [field s1] : Object | provenance | | -| C_ctor.cs:9:27:9:41 | object creation of type C_no_ctor : C_no_ctor [field s1] : Object | C_ctor.cs:10:13:10:13 | access to local variable c : C_no_ctor [field s1] : Object | provenance | | -| C_ctor.cs:9:27:9:41 | object creation of type C_no_ctor : C_no_ctor [field s1] : Object | C_ctor.cs:10:13:10:13 | access to local variable c : C_no_ctor [field s1] : Object | provenance | | -| C_ctor.cs:10:13:10:13 | access to local variable c : C_no_ctor [field s1] : Object | C_ctor.cs:13:21:13:22 | this : C_no_ctor [field s1] : Object | provenance | | -| C_ctor.cs:10:13:10:13 | access to local variable c : C_no_ctor [field s1] : Object | C_ctor.cs:13:21:13:22 | this : C_no_ctor [field s1] : Object | provenance | | -| C_ctor.cs:13:21:13:22 | this : C_no_ctor [field s1] : Object | C_ctor.cs:15:18:15:19 | this access : C_no_ctor [field s1] : Object | provenance | | -| C_ctor.cs:13:21:13:22 | this : C_no_ctor [field s1] : Object | C_ctor.cs:15:18:15:19 | this access : C_no_ctor [field s1] : Object | provenance | | -| C_ctor.cs:15:18:15:19 | this access : C_no_ctor [field s1] : Object | C_ctor.cs:15:18:15:19 | access to field s1 | provenance | | -| C_ctor.cs:15:18:15:19 | this access : C_no_ctor [field s1] : Object | C_ctor.cs:15:18:15:19 | access to field s1 | provenance | | -| C_ctor.cs:21:24:21:25 | [post] this access : C_with_ctor [field s1] : Object | C_ctor.cs:25:29:25:45 | object creation of type C_with_ctor : C_with_ctor [field s1] : Object | provenance | | -| C_ctor.cs:21:24:21:25 | [post] this access : C_with_ctor [field s1] : Object | C_ctor.cs:25:29:25:45 | object creation of type C_with_ctor : C_with_ctor [field s1] : Object | provenance | | -| C_ctor.cs:21:29:21:45 | call to method Source : Object | C_ctor.cs:21:24:21:25 | [post] this access : C_with_ctor [field s1] : Object | provenance | | -| C_ctor.cs:21:29:21:45 | call to method Source : Object | C_ctor.cs:21:24:21:25 | [post] this access : C_with_ctor [field s1] : Object | provenance | | -| C_ctor.cs:25:29:25:45 | object creation of type C_with_ctor : C_with_ctor [field s1] : Object | C_ctor.cs:26:13:26:13 | access to local variable c : C_with_ctor [field s1] : Object | provenance | | -| C_ctor.cs:25:29:25:45 | object creation of type C_with_ctor : C_with_ctor [field s1] : Object | C_ctor.cs:26:13:26:13 | access to local variable c : C_with_ctor [field s1] : Object | provenance | | -| C_ctor.cs:26:13:26:13 | access to local variable c : C_with_ctor [field s1] : Object | C_ctor.cs:31:21:31:22 | this : C_with_ctor [field s1] : Object | provenance | | -| C_ctor.cs:26:13:26:13 | access to local variable c : C_with_ctor [field s1] : Object | C_ctor.cs:31:21:31:22 | this : C_with_ctor [field s1] : Object | provenance | | -| C_ctor.cs:31:21:31:22 | this : C_with_ctor [field s1] : Object | C_ctor.cs:33:18:33:19 | this access : C_with_ctor [field s1] : Object | provenance | | -| C_ctor.cs:31:21:31:22 | this : C_with_ctor [field s1] : Object | C_ctor.cs:33:18:33:19 | this access : C_with_ctor [field s1] : Object | provenance | | -| C_ctor.cs:33:18:33:19 | this access : C_with_ctor [field s1] : Object | C_ctor.cs:33:18:33:19 | access to field s1 | provenance | | -| C_ctor.cs:33:18:33:19 | this access : C_with_ctor [field s1] : Object | C_ctor.cs:33:18:33:19 | access to field s1 | provenance | | | D.cs:8:9:8:11 | this : D [field trivialPropField] : Object | D.cs:8:22:8:25 | this access : D [field trivialPropField] : Object | provenance | | | D.cs:8:9:8:11 | this : D [field trivialPropField] : Object | D.cs:8:22:8:25 | this access : D [field trivialPropField] : Object | provenance | | | D.cs:8:22:8:25 | this access : D [field trivialPropField] : Object | D.cs:8:22:8:42 | access to field trivialPropField : Object | provenance | | @@ -1281,34 +1257,6 @@ nodes | C.cs:27:14:27:15 | this access : C [property s5] : Elem | semmle.label | this access : C [property s5] : Elem | | C.cs:28:14:28:15 | access to property s6 | semmle.label | access to property s6 | | C.cs:28:14:28:15 | access to property s6 | semmle.label | access to property s6 | -| C_ctor.cs:5:24:5:25 | [post] this access : C_no_ctor [field s1] : Object | semmle.label | [post] this access : C_no_ctor [field s1] : Object | -| C_ctor.cs:5:24:5:25 | [post] this access : C_no_ctor [field s1] : Object | semmle.label | [post] this access : C_no_ctor [field s1] : Object | -| C_ctor.cs:5:29:5:45 | call to method Source : Object | semmle.label | call to method Source : Object | -| C_ctor.cs:5:29:5:45 | call to method Source : Object | semmle.label | call to method Source : Object | -| C_ctor.cs:9:27:9:41 | object creation of type C_no_ctor : C_no_ctor [field s1] : Object | semmle.label | object creation of type C_no_ctor : C_no_ctor [field s1] : Object | -| C_ctor.cs:9:27:9:41 | object creation of type C_no_ctor : C_no_ctor [field s1] : Object | semmle.label | object creation of type C_no_ctor : C_no_ctor [field s1] : Object | -| C_ctor.cs:10:13:10:13 | access to local variable c : C_no_ctor [field s1] : Object | semmle.label | access to local variable c : C_no_ctor [field s1] : Object | -| C_ctor.cs:10:13:10:13 | access to local variable c : C_no_ctor [field s1] : Object | semmle.label | access to local variable c : C_no_ctor [field s1] : Object | -| C_ctor.cs:13:21:13:22 | this : C_no_ctor [field s1] : Object | semmle.label | this : C_no_ctor [field s1] : Object | -| C_ctor.cs:13:21:13:22 | this : C_no_ctor [field s1] : Object | semmle.label | this : C_no_ctor [field s1] : Object | -| C_ctor.cs:15:18:15:19 | access to field s1 | semmle.label | access to field s1 | -| C_ctor.cs:15:18:15:19 | access to field s1 | semmle.label | access to field s1 | -| C_ctor.cs:15:18:15:19 | this access : C_no_ctor [field s1] : Object | semmle.label | this access : C_no_ctor [field s1] : Object | -| C_ctor.cs:15:18:15:19 | this access : C_no_ctor [field s1] : Object | semmle.label | this access : C_no_ctor [field s1] : Object | -| C_ctor.cs:21:24:21:25 | [post] this access : C_with_ctor [field s1] : Object | semmle.label | [post] this access : C_with_ctor [field s1] : Object | -| C_ctor.cs:21:24:21:25 | [post] this access : C_with_ctor [field s1] : Object | semmle.label | [post] this access : C_with_ctor [field s1] : Object | -| C_ctor.cs:21:29:21:45 | call to method Source : Object | semmle.label | call to method Source : Object | -| C_ctor.cs:21:29:21:45 | call to method Source : Object | semmle.label | call to method Source : Object | -| C_ctor.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 | -| C_ctor.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 | -| C_ctor.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 | -| C_ctor.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 | -| C_ctor.cs:31:21:31:22 | this : C_with_ctor [field s1] : Object | semmle.label | this : C_with_ctor [field s1] : Object | -| C_ctor.cs:31:21:31:22 | this : C_with_ctor [field s1] : Object | semmle.label | this : C_with_ctor [field s1] : Object | -| C_ctor.cs:33:18:33:19 | access to field s1 | semmle.label | access to field s1 | -| C_ctor.cs:33:18:33:19 | access to field s1 | semmle.label | access to field s1 | -| C_ctor.cs:33:18:33:19 | this access : C_with_ctor [field s1] : Object | semmle.label | this access : C_with_ctor [field s1] : Object | -| C_ctor.cs:33:18:33:19 | this access : C_with_ctor [field s1] : Object | semmle.label | this access : C_with_ctor [field s1] : Object | | D.cs:8:9:8:11 | this : D [field trivialPropField] : Object | semmle.label | this : D [field trivialPropField] : Object | | D.cs:8:9:8:11 | this : D [field trivialPropField] : Object | semmle.label | this : D [field trivialPropField] : Object | | D.cs:8:22:8:25 | this access : D [field trivialPropField] : Object | semmle.label | this access : D [field trivialPropField] : Object | @@ -2121,10 +2069,6 @@ subpaths | C.cs:27:14:27:15 | access to property s5 | C.cs:7:37:7:51 | call to method Source : Elem | C.cs:27:14:27:15 | access to property s5 | $@ | C.cs:7:37:7:51 | call to method Source : Elem | call to method Source : Elem | | C.cs:28:14:28:15 | access to property s6 | C.cs:8:30:8:44 | call to method Source : Elem | C.cs:28:14:28:15 | access to property s6 | $@ | C.cs:8:30:8:44 | call to method Source : Elem | call to method Source : Elem | | C.cs:28:14:28:15 | access to property s6 | C.cs:8:30:8:44 | call to method Source : Elem | C.cs:28:14:28:15 | access to property s6 | $@ | C.cs:8:30:8:44 | call to method Source : Elem | call to method Source : Elem | -| C_ctor.cs:15:18:15:19 | access to field s1 | C_ctor.cs:5:29:5:45 | call to method Source : Object | C_ctor.cs:15:18:15:19 | access to field s1 | $@ | C_ctor.cs:5:29:5:45 | call to method Source : Object | call to method Source : Object | -| C_ctor.cs:15:18:15:19 | access to field s1 | C_ctor.cs:5:29:5:45 | call to method Source : Object | C_ctor.cs:15:18:15:19 | access to field s1 | $@ | C_ctor.cs:5:29:5:45 | call to method Source : Object | call to method Source : Object | -| C_ctor.cs:33:18:33:19 | access to field s1 | C_ctor.cs:21:29:21:45 | call to method Source : Object | C_ctor.cs:33:18:33:19 | access to field s1 | $@ | C_ctor.cs:21:29:21:45 | call to method Source : Object | call to method Source : Object | -| C_ctor.cs:33:18:33:19 | access to field s1 | C_ctor.cs:21:29:21:45 | call to method Source : Object | C_ctor.cs:33:18:33:19 | access to field s1 | $@ | C_ctor.cs:21:29:21:45 | call to method Source : Object | call to method Source : Object | | D.cs:32:14:32:23 | access to property AutoProp | D.cs:29:17:29:33 | call to method Source : Object | D.cs:32:14:32:23 | access to property AutoProp | $@ | D.cs:29:17:29:33 | call to method Source : Object | call to method Source : Object | | D.cs:32:14:32:23 | access to property AutoProp | D.cs:29:17:29:33 | call to method Source : Object | D.cs:32:14:32:23 | access to property AutoProp | $@ | D.cs:29:17:29:33 | call to method Source : Object | call to method Source : Object | | D.cs:39:14:39:26 | access to property TrivialProp | D.cs:37:26:37:42 | call to method Source : Object | D.cs:39:14:39:26 | access to property TrivialProp | $@ | D.cs:37:26:37:42 | call to method Source : Object | call to method Source : Object | From f5d4c49b162dfa653a2ff8880898424962ed600f Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Fri, 2 Feb 2024 11:53:43 +0100 Subject: [PATCH 148/378] C#: Add some more constructor dataflow tests. --- .../constructors/ConstructorFlow.expected | 38 ++++++++++++++ .../dataflow/constructors/Constructors.cs | 49 +++++++++++++++++++ 2 files changed, 87 insertions(+) diff --git a/csharp/ql/test/library-tests/dataflow/constructors/ConstructorFlow.expected b/csharp/ql/test/library-tests/dataflow/constructors/ConstructorFlow.expected index 0230ad08227..128f24c07aa 100644 --- a/csharp/ql/test/library-tests/dataflow/constructors/ConstructorFlow.expected +++ b/csharp/ql/test/library-tests/dataflow/constructors/ConstructorFlow.expected @@ -1,4 +1,8 @@ testFailures +| Constructors.cs:70:25:70:43 | // ... | Missing result:hasValueFlow=2 | +| Constructors.cs:71:25:71:43 | // ... | Missing result:hasValueFlow=3 | +| Constructors.cs:72:25:72:43 | // ... | Missing result:hasValueFlow=2 | +| Constructors.cs:83:25:83:43 | // ... | Missing result:hasValueFlow=4 | edges | Constructors.cs:5:24:5:25 | [post] this access : C_no_ctor [field s1] : Object | Constructors.cs:9:27:9:41 | object creation of type C_no_ctor : C_no_ctor [field s1] : Object | | Constructors.cs:5:24:5:25 | [post] this access : C_no_ctor [field s1] : Object | Constructors.cs:9:27:9:41 | object creation of type C_no_ctor : C_no_ctor [field s1] : Object | @@ -24,6 +28,20 @@ edges | 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 | | Constructors.cs:33:18:33:19 | this access : C_with_ctor [field s1] : Object | Constructors.cs:33:18:33:19 | access to field s1 | | Constructors.cs:33:18:33:19 | this access : C_with_ctor [field s1] : Object | Constructors.cs:33:18:33:19 | access to field s1 | +| Constructors.cs:41:26:41:26 | o : Object | Constructors.cs:41:38:41:38 | access to parameter o : Object | +| Constructors.cs:41:26:41:26 | o : Object | Constructors.cs:41:38:41:38 | access to parameter o : Object | +| Constructors.cs:41:38:41:38 | access to parameter o : Object | Constructors.cs:41:32:41:34 | [post] this access : C1 [field Obj] : Object | +| Constructors.cs:41:38:41:38 | access to parameter o : Object | Constructors.cs:41:32:41:34 | [post] this access : C1 [field Obj] : Object | +| Constructors.cs:60:17:60:33 | call to method Source : Object | Constructors.cs:61:25:61:25 | access to local variable o : Object | +| Constructors.cs:60:17:60:33 | call to method Source : Object | Constructors.cs:61:25:61:25 | access to local variable o : Object | +| Constructors.cs:61:18:61:26 | object creation of type C1 : C1 [field Obj] : Object | Constructors.cs:62:14:62:15 | access to local variable c1 : C1 [field Obj] : Object | +| Constructors.cs:61:18:61:26 | object creation of type C1 : C1 [field Obj] : Object | Constructors.cs:62:14:62:15 | access to local variable c1 : C1 [field Obj] : Object | +| Constructors.cs:61:25:61:25 | access to local variable o : Object | Constructors.cs:41:26:41:26 | o : Object | +| Constructors.cs:61:25:61:25 | access to local variable o : Object | Constructors.cs:41:26:41:26 | o : Object | +| Constructors.cs:61:25:61:25 | access to local variable o : Object | Constructors.cs:61:18:61:26 | object creation of type C1 : C1 [field Obj] : Object | +| Constructors.cs:61:25:61:25 | access to local variable o : Object | Constructors.cs:61:18:61:26 | object creation of type C1 : C1 [field Obj] : Object | +| Constructors.cs:62:14:62:15 | access to local variable c1 : C1 [field Obj] : Object | Constructors.cs:62:14:62:19 | access to field Obj | +| Constructors.cs:62:14:62:15 | access to local variable c1 : C1 [field Obj] : Object | Constructors.cs:62:14:62:19 | access to field Obj | nodes | Constructors.cs:5:24:5:25 | [post] this access : C_no_ctor [field s1] : Object | semmle.label | [post] this access : C_no_ctor [field s1] : Object | | Constructors.cs:5:24:5:25 | [post] this access : C_no_ctor [field s1] : Object | semmle.label | [post] this access : C_no_ctor [field s1] : Object | @@ -53,9 +71,29 @@ nodes | 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: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:26:41:26 | o : Object | semmle.label | o : 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: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:41:38:41:38 | access to parameter o : Object | semmle.label | access to parameter o : Object | +| Constructors.cs:60:17:60:33 | call to method Source : Object | semmle.label | call to method Source : Object | +| Constructors.cs:60:17:60:33 | call to method Source : Object | semmle.label | call to method Source : Object | +| Constructors.cs:61:18:61:26 | object creation of type C1 : C1 [field Obj] : Object | semmle.label | object creation of type C1 : C1 [field Obj] : Object | +| Constructors.cs:61:18:61:26 | object creation of type C1 : C1 [field Obj] : Object | semmle.label | object creation of type C1 : C1 [field Obj] : Object | +| Constructors.cs:61:25:61:25 | access to local variable o : Object | semmle.label | access to local variable o : Object | +| Constructors.cs:61:25:61:25 | access to local variable o : Object | semmle.label | access to local variable o : Object | +| Constructors.cs:62:14:62:15 | access to local variable c1 : C1 [field Obj] : Object | semmle.label | access to local variable c1 : C1 [field Obj] : Object | +| Constructors.cs:62:14:62:15 | access to local variable c1 : C1 [field Obj] : Object | semmle.label | access to local variable c1 : C1 [field Obj] : Object | +| Constructors.cs:62:14:62:19 | access to field Obj | semmle.label | access to field Obj | +| Constructors.cs:62:14:62:19 | access to field Obj | semmle.label | access to field Obj | subpaths +| Constructors.cs:61:25:61:25 | access to local variable o : Object | Constructors.cs:41:26:41:26 | o : Object | Constructors.cs:41:32:41:34 | [post] this access : C1 [field Obj] : Object | Constructors.cs:61:18:61:26 | object creation of type C1 : C1 [field Obj] : Object | +| Constructors.cs:61:25:61:25 | access to local variable o : Object | Constructors.cs:41:26:41:26 | o : Object | Constructors.cs:41:32:41:34 | [post] this access : C1 [field Obj] : Object | Constructors.cs:61:18:61:26 | object creation of type C1 : C1 [field Obj] : Object | #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 | | 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 | | Constructors.cs:33:18:33:19 | access to field s1 | Constructors.cs:21:29:21:45 | call to method Source : Object | Constructors.cs:33:18:33:19 | access to field s1 | $@ | Constructors.cs:21:29:21:45 | call to method Source : Object | call to method Source : Object | | Constructors.cs:33:18:33:19 | access to field s1 | Constructors.cs:21:29:21:45 | call to method Source : Object | Constructors.cs:33:18:33:19 | access to field s1 | $@ | Constructors.cs:21:29:21:45 | call to method Source : Object | call to method Source : Object | +| Constructors.cs:62:14:62:19 | access to field Obj | Constructors.cs:60:17:60:33 | call to method Source : Object | Constructors.cs:62:14:62:19 | access to field Obj | $@ | Constructors.cs:60:17:60:33 | call to method Source : Object | call to method Source : Object | +| Constructors.cs:62:14:62:19 | access to field Obj | Constructors.cs:60:17:60:33 | call to method Source : Object | Constructors.cs:62:14:62:19 | access to field Obj | $@ | Constructors.cs:60:17:60:33 | call to method Source : Object | call to method Source : Object | diff --git a/csharp/ql/test/library-tests/dataflow/constructors/Constructors.cs b/csharp/ql/test/library-tests/dataflow/constructors/Constructors.cs index 9ddb3f10567..de9a4c8d12a 100644 --- a/csharp/ql/test/library-tests/dataflow/constructors/Constructors.cs +++ b/csharp/ql/test/library-tests/dataflow/constructors/Constructors.cs @@ -34,6 +34,55 @@ public class Constructors } } + public class C1 + { + public object Obj; + + public C1(object o) => Obj = o; + } + + public class C2(object o21param, object o22param) + { + public object Obj21 = o21param; + + public object Obj22 => o22param; + + public object Obj23 => Obj21; + + public void SetObj(object o) + { + o22param = o; + } + } + + public void M1() + { + var o = Source(1); + var c1 = new C1(o); + Sink(c1.Obj); // $ hasValueFlow=1 + } + + public void M2() + { + var o21 = Source(2); + var o22 = Source(3); + var c2 = new C2(o21, o22); + Sink(c2.Obj21); // $ hasValueFlow=2 + Sink(c2.Obj22); // $ hasValueFlow=3 + Sink(c2.Obj23); // $ hasValueFlow=2 + } + + public void M3() + { + var c2 = new C2(new object(), new object()); + Sink(c2.Obj21); // No flow + Sink(c2.Obj22); // No flow + Sink(c2.Obj23); // No flow + var taint = Source(4); + c2.SetObj(taint); + Sink(c2.Obj22); // $ hasValueFlow=4 + } + public static void Sink(object o) { } public static T Source(object source) => throw null; From 42f465666738a2c7d1613c8ff052bca7e28861ae Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Thu, 8 Feb 2024 16:07:37 +0100 Subject: [PATCH 149/378] C#: Data flow for primary constructors. --- csharp/ql/lib/semmle/code/csharp/Callable.qll | 23 ++ .../dataflow/internal/DataFlowPrivate.qll | 197 +++++++++++++++++- .../dataflow/internal/DataFlowPublic.qll | 17 ++ 3 files changed, 233 insertions(+), 4 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/Callable.qll b/csharp/ql/lib/semmle/code/csharp/Callable.qll index dd67d2667e3..829cc3bf63e 100644 --- a/csharp/ql/lib/semmle/code/csharp/Callable.qll +++ b/csharp/ql/lib/semmle/code/csharp/Callable.qll @@ -370,6 +370,15 @@ class Constructor extends DotNet::Constructor, Callable, Member, Attributable, @ predicate isParameterless() { this.getNumberOfParameters() = 0 } override string getUndecoratedName() { result = ".ctor" } + + /** + * Holds if this a primary constructor in source code. + */ + predicate isPrimary() { + not this.hasBody() and + this.getDeclaringType().fromSource() and + this.fromSource() + } } /** @@ -406,6 +415,20 @@ class InstanceConstructor extends Constructor { override string getAPrimaryQlClass() { result = "InstanceConstructor" } } +/** + * A primary constructor, for example `public class C(object o)` on line 1 in + * ```csharp + * public class C(object o) { + * ... + * } + * ``` + */ +class PrimaryConstructor extends Constructor { + PrimaryConstructor() { this.isPrimary() } + + override string getAPrimaryQlClass() { result = "PrimaryConstructor" } +} + /** * A destructor, for example `~C() { }` on line 2 in * diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll index 3ed1f65bd75..995173c9ed0 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll @@ -21,6 +21,7 @@ private import semmle.code.csharp.frameworks.system.threading.Tasks private import semmle.code.cil.Ssa::Ssa as CilSsa private import semmle.code.cil.internal.SsaImpl as CilSsaImpl private import codeql.util.Unit +private import codeql.util.Boolean /** Gets the callable in which this node occurs. */ DataFlowCallable nodeGetEnclosingCallable(Node n) { @@ -37,6 +38,21 @@ predicate isArgumentNode(ArgumentNode arg, DataFlowCall c, ArgumentPosition pos) arg.argumentOf(c, pos) } +/** + * Gets the control flow node used for data flow purposes for the primary constructor + * parameter access `pa`. + */ +private ControlFlow::Node getPrimaryConstructorParameterCfn(ParameterAccess pa) { + pa.getTarget().getCallable() instanceof PrimaryConstructor and + ( + pa instanceof ParameterRead and + result = pa.getAControlFlowNode() + or + pa instanceof ParameterWrite and + exists(AssignExpr ae | pa = ae.getLValue() and result = ae.getAControlFlowNode()) + ) +} + abstract class NodeImpl extends Node { /** Do not call: use `getEnclosingCallable()` instead. */ abstract DataFlowCallable getEnclosingCallableImpl(); @@ -124,9 +140,21 @@ private module ThisFlow { n.(InstanceParameterNode).getCallable() = cfn.(ControlFlow::Nodes::EntryNode).getCallable() or n.asExprAtNode(cfn) = any(Expr e | e instanceof ThisAccess or e instanceof BaseAccess) + or + exists(InstanceParameterAccessNode pan | pan = n | + pan.getUnderlyingControlFlowNode() = cfn and pan.isPreUpdate() + ) } - private predicate thisAccess(Node n, BasicBlock bb, int i) { thisAccess(n, bb.getNode(i)) } + private predicate thisAccess(Node n, BasicBlock bb, int i) { + thisAccess(n, bb.getNode(i)) + or + exists(Parameter p | n.(PrimaryConstructorThisAccessNode).getParameter() = p | + bb.getCallable() = p.getCallable() and + i = p.getPosition() + 1 and + not n instanceof PostUpdateNode + ) + } private predicate thisRank(Node n, BasicBlock bb, int rankix) { exists(int i | @@ -925,7 +953,17 @@ private module Cached { TParamsArgumentNode(ControlFlow::Node callCfn) { callCfn = any(Call c | isParamsArg(c, _, _)).getAControlFlowNode() } or - TFlowInsensitiveFieldNode(FieldOrProperty f) { f.isFieldLike() } + TFlowInsensitiveFieldNode(FieldOrProperty f) { f.isFieldLike() } or + TInstanceParameterAccessNode(ControlFlow::Node cfn, boolean isPostUpdate) { + exists(ParameterAccess pa | cfn = getPrimaryConstructorParameterCfn(pa) | + isPostUpdate = false + or + pa instanceof ParameterWrite and isPostUpdate = true + ) + } or + TPrimaryConstructorThisAccessNode(Parameter p, Boolean isPostUpdate) { + p.getCallable() instanceof PrimaryConstructor + } /** * Holds if data flows from `nodeFrom` to `nodeTo` in exactly one local @@ -961,14 +999,20 @@ private module Cached { TFieldContent(Field f) { f.isUnboundDeclaration() } or TPropertyContent(Property p) { p.isUnboundDeclaration() } or TElementContent() or - TSyntheticFieldContent(SyntheticField f) + TSyntheticFieldContent(SyntheticField f) or + TPrimaryConstructorParameterContent(Parameter p) { + p.getCallable() instanceof PrimaryConstructor + } cached newtype TContentApprox = TFieldApproxContent(string firstChar) { firstChar = approximateFieldContent(_) } or TPropertyApproxContent(string firstChar) { firstChar = approximatePropertyContent(_) } or TElementApproxContent() or - TSyntheticFieldApproxContent() + TSyntheticFieldApproxContent() or + TPrimaryConstructorParameterApproxContent(string firstChar) { + firstChar = approximatePrimaryConstructorParameterContent(_) + } pragma[nomagic] private predicate commonSubTypeGeneral(DataFlowTypeOrUnifiable t1, RelevantGvnType t2) { @@ -1037,6 +1081,10 @@ predicate nodeIsHidden(Node n) { n.asExpr() = any(WithExpr we).getInitializer() or n instanceof FlowInsensitiveFieldNode + or + n instanceof InstanceParameterAccessNode + or + n instanceof PrimaryConstructorThisAccessNode } /** A CIL SSA definition, viewed as a node in a data flow graph. */ @@ -1745,6 +1793,77 @@ class FlowSummaryNode extends NodeImpl, TFlowSummaryNode { override string toStringImpl() { result = this.getSummaryNode().toString() } } +/** + * A data-flow node used to model reading and writing of primary constructor parameters. + */ +class InstanceParameterAccessNode extends NodeImpl, TInstanceParameterAccessNode { + private ControlFlow::Node cfn; + private boolean isPostUpdate; + private Parameter p; + + InstanceParameterAccessNode() { + this = TInstanceParameterAccessNode(cfn, isPostUpdate) and + exists(ParameterAccess pa | cfn = getPrimaryConstructorParameterCfn(pa) and pa.getTarget() = p) + } + + override DataFlowCallable getEnclosingCallableImpl() { + result.asCallable() = cfn.getEnclosingCallable() + } + + override Type getTypeImpl() { result = cfn.getEnclosingCallable().getDeclaringType() } + + override ControlFlow::Nodes::ElementNode getControlFlowNodeImpl() { none() } + + override Location getLocationImpl() { result = cfn.getLocation() } + + override string toStringImpl() { result = "this" } + + /** + * Gets the underlying control flow node. + */ + ControlFlow::Node getUnderlyingControlFlowNode() { result = cfn } + + /** + * Gets the primary constructor parameter that this is a this access to. + */ + Parameter getParameter() { result = p } + + /** + * Holds if the this parameter access node corresponds to a pre-update node. + */ + predicate isPreUpdate() { isPostUpdate = false } +} + +/** + * A data-flow node used to synthesize the body of a primary constructor. + */ +class PrimaryConstructorThisAccessNode extends NodeImpl, TPrimaryConstructorThisAccessNode { + private Parameter p; + private boolean isPostUpdate; + + PrimaryConstructorThisAccessNode() { this = TPrimaryConstructorThisAccessNode(p, isPostUpdate) } + + override DataFlowCallable getEnclosingCallableImpl() { result.asCallable() = p.getCallable() } + + override Type getTypeImpl() { result = p.getCallable().getDeclaringType() } + + override ControlFlow::Nodes::ElementNode getControlFlowNodeImpl() { none() } + + override Location getLocationImpl() { result = p.getLocation() } + + override string toStringImpl() { result = "this" } + + /** + * Gets the primary constructor parameter that this is a this access to. + */ + Parameter getParameter() { result = p } + + /** + * Holds if this is a this access for a primary constructor parameter write. + */ + predicate isPostUpdate() { isPostUpdate = true } +} + /** A field or a property. */ class FieldOrProperty extends Assignable, Modifiable { FieldOrProperty() { @@ -1881,6 +2000,16 @@ private PropertyContent getResultContent() { result.getProperty() = any(SystemThreadingTasksTaskTClass c_).getResultProperty() } +private predicate primaryConstructorParameterStore(Node node1, ContentSet c, Node node2) { + exists(AssignExpr ae, ParameterWrite pa, PrimaryConstructor constructor | + ae.getLValue() = pa and + pa.getTarget() = constructor.getAParameter() and + node1.asExpr() = ae.getRValue() and + node2 = TInstanceParameterAccessNode(ae.getAControlFlowNode(), true) and + c.(PrimaryConstructorParameterContent).getParameter() = pa.getTarget() + ) +} + /** * Holds if data can flow from `node1` to `node2` via an assignment to * content `c`. @@ -1918,6 +2047,14 @@ predicate storeStep(Node node1, ContentSet c, Node node2) { c = getResultContent() ) or + primaryConstructorParameterStore(node1, c, node2) + or + exists(Parameter p | + node1 = TExplicitParameterNode(p) and + node2 = TPrimaryConstructorThisAccessNode(p, true) and + c.(PrimaryConstructorParameterContent).getParameter() = p + ) + or FlowSummaryImpl::Private::Steps::summaryStoreStep(node1.(FlowSummaryNode).getSummaryNode(), c, node2.(FlowSummaryNode).getSummaryNode()) } @@ -2010,6 +2147,12 @@ predicate readStep(Node node1, ContentSet c, Node node2) { node2.asExpr().(AwaitExpr).getExpr() = node1.asExpr() and c = getResultContent() or + exists(InstanceParameterAccessNode n | n = node1 | + n.getUnderlyingControlFlowNode() = node2.(ExprNode).getControlFlowNode() and + n.getParameter() = c.(PrimaryConstructorParameterContent).getParameter() + ) and + node2.asExpr() instanceof ParameterRead + or // node1 = (..., node2, ...) // node1.ItemX flows to node2 exists(TupleExpr te, int i, Expr item | @@ -2072,6 +2215,10 @@ predicate clearsContent(Node n, ContentSet c) { c.(FieldContent).getField() = f.getUnboundDeclaration() and not f.isRef() ) + or + exists(Node n1 | + primaryConstructorParameterStore(_, c, n1) and n = n1.(PostUpdateNode).getPreUpdateNode() + ) } /** @@ -2361,6 +2508,32 @@ module PostUpdateNodes { override Node getPreUpdateNode() { result.(FlowSummaryNode).getSummaryNode() = preUpdateNode } } + + private class InstanceParameterAccessPostUpdateNode extends PostUpdateNode, + InstanceParameterAccessNode + { + private ControlFlow::Node cfg; + + InstanceParameterAccessPostUpdateNode() { this = TInstanceParameterAccessNode(cfg, true) } + + override Node getPreUpdateNode() { result = TInstanceParameterAccessNode(cfg, false) } + + override string toStringImpl() { result = "[post] this" } + } + + private class PrimaryConstructorThisAccessPostUpdateNode extends PostUpdateNode, + PrimaryConstructorThisAccessNode + { + private Parameter p; + + PrimaryConstructorThisAccessPostUpdateNode() { + this = TPrimaryConstructorThisAccessNode(p, true) + } + + override Node getPreUpdateNode() { result = TPrimaryConstructorThisAccessNode(p, false) } + + override string toStringImpl() { result = "[post] this" } + } } private import PostUpdateNodes @@ -2537,6 +2710,11 @@ class ContentApprox extends TContentApprox { this = TElementApproxContent() and result = "element" or this = TSyntheticFieldApproxContent() and result = "approximated synthetic field" + or + exists(string firstChar | + this = TPrimaryConstructorParameterApproxContent(firstChar) and + result = "approximated parameter field " + firstChar + ) } } @@ -2550,6 +2728,14 @@ private string approximatePropertyContent(PropertyContent pc) { result = pc.getProperty().getName().prefix(1) } +/** + * Gets a string for approximating the name of a synthetic field corresponding + * to a primary constructor parameter. + */ +private string approximatePrimaryConstructorParameterContent(PrimaryConstructorParameterContent pc) { + result = pc.getParameter().getName().prefix(1) +} + /** Gets an approximated value for content `c`. */ pragma[nomagic] ContentApprox getContentApprox(Content c) { @@ -2560,6 +2746,9 @@ ContentApprox getContentApprox(Content c) { c instanceof ElementContent and result = TElementApproxContent() or c instanceof SyntheticFieldContent and result = TSyntheticFieldApproxContent() + or + result = + TPrimaryConstructorParameterApproxContent(approximatePrimaryConstructorParameterContent(c)) } /** diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPublic.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPublic.qll index c686f226452..13562e78128 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPublic.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPublic.qll @@ -239,6 +239,23 @@ class PropertyContent extends Content, TPropertyContent { override Location getLocation() { result = p.getLocation() } } +/** + * A reference to a synthetic field corresponding to a + * primary constructor parameter. + */ +class PrimaryConstructorParameterContent extends Content, TPrimaryConstructorParameterContent { + private Parameter p; + + PrimaryConstructorParameterContent() { this = TPrimaryConstructorParameterContent(p) } + + /** Gets the underlying parameter. */ + Parameter getParameter() { result = p } + + override string toString() { result = "parameter field " + p.getName() } + + override Location getLocation() { result = p.getLocation() } +} + /** A reference to an element in a collection. */ class ElementContent extends Content, TElementContent { override string toString() { result = "element" } From ff296793172d5caf7a935201ac796edde77cdfc3 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Fri, 9 Feb 2024 15:54:52 +0100 Subject: [PATCH 150/378] C#: Update expected test output. --- .../constructors/ConstructorFlow.expected | 208 ++++++++++++++---- 1 file changed, 166 insertions(+), 42 deletions(-) diff --git a/csharp/ql/test/library-tests/dataflow/constructors/ConstructorFlow.expected b/csharp/ql/test/library-tests/dataflow/constructors/ConstructorFlow.expected index 128f24c07aa..94a885204ca 100644 --- a/csharp/ql/test/library-tests/dataflow/constructors/ConstructorFlow.expected +++ b/csharp/ql/test/library-tests/dataflow/constructors/ConstructorFlow.expected @@ -1,47 +1,95 @@ testFailures -| Constructors.cs:70:25:70:43 | // ... | Missing result:hasValueFlow=2 | -| Constructors.cs:71:25:71:43 | // ... | Missing result:hasValueFlow=3 | -| Constructors.cs:72:25:72:43 | // ... | Missing result:hasValueFlow=2 | -| Constructors.cs:83:25:83:43 | // ... | Missing result:hasValueFlow=4 | edges -| Constructors.cs:5:24:5:25 | [post] this access : C_no_ctor [field s1] : Object | Constructors.cs:9:27:9:41 | object creation of type C_no_ctor : C_no_ctor [field s1] : Object | -| Constructors.cs:5:24:5:25 | [post] this access : C_no_ctor [field s1] : Object | Constructors.cs:9:27:9:41 | object creation of type C_no_ctor : C_no_ctor [field s1] : Object | -| Constructors.cs:5:29:5:45 | call to method Source : Object | Constructors.cs:5:24:5:25 | [post] this access : C_no_ctor [field s1] : Object | -| Constructors.cs:5:29:5:45 | call to method Source : Object | Constructors.cs:5:24:5:25 | [post] this access : C_no_ctor [field s1] : Object | -| Constructors.cs:9:27:9:41 | object creation of type C_no_ctor : C_no_ctor [field s1] : Object | Constructors.cs:10:13:10:13 | access to local variable c : C_no_ctor [field s1] : Object | -| Constructors.cs:9:27:9:41 | object creation of type C_no_ctor : C_no_ctor [field s1] : Object | Constructors.cs:10:13:10:13 | access to local variable c : C_no_ctor [field s1] : Object | -| 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 | -| 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 | -| 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 | -| 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 | -| Constructors.cs:15:18:15:19 | this access : C_no_ctor [field s1] : Object | Constructors.cs:15:18:15:19 | access to field s1 | -| Constructors.cs:15:18:15:19 | this access : C_no_ctor [field s1] : Object | Constructors.cs:15:18:15:19 | access to field s1 | -| Constructors.cs:21:24:21:25 | [post] this access : 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 | -| Constructors.cs:21:24:21:25 | [post] this access : 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 | -| 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 | -| 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 | -| Constructors.cs:25:29:25:45 | 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 | -| Constructors.cs:25:29:25:45 | 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 | -| 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 | -| 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 | -| 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 | -| 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 | -| Constructors.cs:33:18:33:19 | this access : C_with_ctor [field s1] : Object | Constructors.cs:33:18:33:19 | access to field s1 | -| Constructors.cs:33:18:33:19 | this access : C_with_ctor [field s1] : Object | Constructors.cs:33:18:33:19 | access to field s1 | -| Constructors.cs:41:26:41:26 | o : Object | Constructors.cs:41:38:41:38 | access to parameter o : Object | -| Constructors.cs:41:26:41:26 | o : Object | Constructors.cs:41:38:41:38 | access to parameter o : Object | -| Constructors.cs:41:38:41:38 | access to parameter o : Object | Constructors.cs:41:32:41:34 | [post] this access : C1 [field Obj] : Object | -| Constructors.cs:41:38:41:38 | access to parameter o : Object | Constructors.cs:41:32:41:34 | [post] this access : C1 [field Obj] : Object | -| Constructors.cs:60:17:60:33 | call to method Source : Object | Constructors.cs:61:25:61:25 | access to local variable o : Object | -| Constructors.cs:60:17:60:33 | call to method Source : Object | Constructors.cs:61:25:61:25 | access to local variable o : Object | -| Constructors.cs:61:18:61:26 | object creation of type C1 : C1 [field Obj] : Object | Constructors.cs:62:14:62:15 | access to local variable c1 : C1 [field Obj] : Object | -| Constructors.cs:61:18:61:26 | object creation of type C1 : C1 [field Obj] : Object | Constructors.cs:62:14:62:15 | access to local variable c1 : C1 [field Obj] : Object | -| Constructors.cs:61:25:61:25 | access to local variable o : Object | Constructors.cs:41:26:41:26 | o : Object | -| Constructors.cs:61:25:61:25 | access to local variable o : Object | Constructors.cs:41:26:41:26 | o : Object | -| Constructors.cs:61:25:61:25 | access to local variable o : Object | Constructors.cs:61:18:61:26 | object creation of type C1 : C1 [field Obj] : Object | -| Constructors.cs:61:25:61:25 | access to local variable o : Object | Constructors.cs:61:18:61:26 | object creation of type C1 : C1 [field Obj] : Object | -| Constructors.cs:62:14:62:15 | access to local variable c1 : C1 [field Obj] : Object | Constructors.cs:62:14:62:19 | access to field Obj | -| Constructors.cs:62:14:62:15 | access to local variable c1 : C1 [field Obj] : Object | Constructors.cs:62:14:62:19 | access to field Obj | +| Constructors.cs:5:24:5:25 | [post] this access : C_no_ctor [field s1] : Object | Constructors.cs:9:27:9:41 | object creation of type C_no_ctor : C_no_ctor [field s1] : Object | provenance | | +| Constructors.cs:5:24:5:25 | [post] this access : C_no_ctor [field s1] : Object | Constructors.cs:9:27:9:41 | object creation of type C_no_ctor : C_no_ctor [field s1] : Object | provenance | | +| Constructors.cs:5:29:5:45 | call to method Source : Object | Constructors.cs:5:24:5:25 | [post] this access : C_no_ctor [field s1] : Object | provenance | | +| Constructors.cs:5:29:5:45 | call to method Source : Object | Constructors.cs:5:24:5:25 | [post] this access : C_no_ctor [field s1] : Object | provenance | | +| Constructors.cs:9:27:9:41 | object creation of type C_no_ctor : C_no_ctor [field s1] : Object | Constructors.cs:10:13:10:13 | access to local variable c : C_no_ctor [field s1] : Object | provenance | | +| Constructors.cs:9:27:9:41 | object creation of type C_no_ctor : C_no_ctor [field s1] : Object | Constructors.cs:10:13:10:13 | access to local variable c : C_no_ctor [field s1] : Object | provenance | | +| 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: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: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: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:25:29:25:45 | object creation of type C_with_ctor : C_with_ctor [field s1] : Object | provenance | | +| Constructors.cs:21:24:21:25 | [post] this access : 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: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: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:29:25:45 | 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 | provenance | | +| Constructors.cs:25:29:25:45 | 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 | 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: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: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: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: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:26:41:26 | o : Object | Constructors.cs:41:38:41:38 | access to parameter o : 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: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:31:46:38 | access to 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: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: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 field o22param] : Object | Constructors.cs:48:32:48:39 | access to parameter o22param : Object | provenance | | +| Constructors.cs:48:32:48:39 | this : C2 [parameter field 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 : 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: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:24:54:24 | access to parameter o : Object | provenance | | +| Constructors.cs:52:35:52:35 | o : Object | Constructors.cs:54:24:54:24 | access to parameter o : Object | provenance | | +| Constructors.cs:60:17:60:33 | call to method Source : Object | Constructors.cs:61:25:61:25 | access to local variable o : Object | provenance | | +| Constructors.cs:60:17:60:33 | call to method Source : Object | Constructors.cs:61:25:61:25 | access to local variable o : Object | provenance | | +| Constructors.cs:61:18:61:26 | object creation of type C1 : C1 [field Obj] : Object | Constructors.cs:62:14:62:15 | access to local variable c1 : C1 [field Obj] : Object | provenance | | +| Constructors.cs:61:18:61:26 | object creation of type C1 : C1 [field Obj] : Object | Constructors.cs:62:14:62:15 | access to local variable c1 : C1 [field Obj] : Object | provenance | | +| Constructors.cs:61:25:61:25 | access to local variable o : Object | Constructors.cs:41:26:41:26 | o : Object | provenance | | +| Constructors.cs:61:25:61:25 | access to local variable o : Object | Constructors.cs:41:26:41:26 | o : Object | provenance | | +| Constructors.cs:61:25:61:25 | access to local variable o : Object | Constructors.cs:61:18:61:26 | object creation of type C1 : C1 [field Obj] : Object | provenance | | +| Constructors.cs:61:25:61:25 | access to local variable o : Object | Constructors.cs:61:18:61:26 | object creation of type C1 : C1 [field Obj] : Object | provenance | | +| Constructors.cs:62:14:62:15 | access to local variable c1 : C1 [field Obj] : Object | Constructors.cs:62:14:62:19 | access to field Obj | provenance | | +| Constructors.cs:62:14:62:15 | access to local variable c1 : C1 [field Obj] : Object | Constructors.cs:62:14:62:19 | access to field Obj | provenance | | +| Constructors.cs:67:19:67:35 | call to method Source : Object | Constructors.cs:69:25:69:27 | access to local variable o21 : Object | provenance | | +| Constructors.cs:67:19:67:35 | call to method Source : Object | Constructors.cs:69:25:69:27 | access to local variable o21 : Object | provenance | | +| Constructors.cs:68:19:68:35 | call to method Source : Object | Constructors.cs:69:30:69:32 | access to local variable o22 : Object | provenance | | +| Constructors.cs:68:19:68:35 | call to method Source : Object | Constructors.cs:69:30:69:32 | access to local variable o22 : Object | provenance | | +| Constructors.cs:69:18:69:33 | object creation of type C2 : C2 [field Obj21] : Object | Constructors.cs:70:14:70:15 | access to local variable c2 : C2 [field Obj21] : Object | provenance | | +| Constructors.cs:69:18:69:33 | object creation of type C2 : C2 [field Obj21] : Object | Constructors.cs:70:14:70:15 | access to local variable c2 : C2 [field Obj21] : Object | provenance | | +| Constructors.cs:69:18:69:33 | object creation of type C2 : C2 [field Obj21] : Object | Constructors.cs:72:14:72:15 | access to local variable c2 : C2 [field Obj21] : Object | provenance | | +| Constructors.cs:69:18:69:33 | object creation of type C2 : C2 [field Obj21] : Object | Constructors.cs:72:14:72:15 | access to local variable c2 : C2 [field Obj21] : Object | provenance | | +| Constructors.cs:69:18:69:33 | object creation of type C2 : C2 [parameter field o22param] : Object | Constructors.cs:71:14:71:15 | access to local variable c2 : C2 [parameter field o22param] : Object | provenance | | +| Constructors.cs:69:18:69:33 | object creation of type C2 : C2 [parameter field o22param] : Object | Constructors.cs:71:14:71:15 | access to local variable c2 : C2 [parameter field o22param] : Object | provenance | | +| Constructors.cs:69:25:69:27 | access to local variable o21 : Object | Constructors.cs:44:28:44:35 | o21param : Object | provenance | | +| Constructors.cs:69:25:69:27 | access to local variable o21 : Object | Constructors.cs:44:28:44:35 | o21param : Object | provenance | | +| Constructors.cs:69:25:69:27 | access to local variable o21 : Object | Constructors.cs:69:18:69:33 | object creation of type C2 : C2 [field Obj21] : Object | provenance | | +| Constructors.cs:69:25:69:27 | access to local variable o21 : Object | Constructors.cs:69:18:69:33 | object creation of type C2 : C2 [field Obj21] : Object | provenance | | +| Constructors.cs:69:30:69:32 | access to local variable o22 : Object | Constructors.cs:44:45:44:52 | o22param : Object | provenance | | +| Constructors.cs:69:30:69:32 | access to local variable o22 : Object | Constructors.cs:44:45:44:52 | o22param : Object | provenance | | +| Constructors.cs:69:30:69:32 | access to local variable o22 : Object | Constructors.cs:69:18:69:33 | object creation of type C2 : C2 [parameter field o22param] : Object | provenance | | +| Constructors.cs:69:30:69:32 | access to local variable o22 : Object | Constructors.cs:69:18:69:33 | object creation of type C2 : C2 [parameter field o22param] : Object | provenance | | +| Constructors.cs:70:14:70:15 | access to local variable c2 : C2 [field Obj21] : Object | Constructors.cs:70:14:70:21 | access to field Obj21 | provenance | | +| Constructors.cs:70:14:70:15 | access to local variable c2 : C2 [field Obj21] : Object | Constructors.cs:70:14:70:21 | access to field Obj21 | provenance | | +| Constructors.cs:71:14:71:15 | access to local variable c2 : C2 [parameter field o22param] : Object | Constructors.cs:48:32:48:39 | this : C2 [parameter field o22param] : Object | provenance | | +| Constructors.cs:71:14:71:15 | access to local variable c2 : C2 [parameter field o22param] : Object | Constructors.cs:48:32:48:39 | this : C2 [parameter field o22param] : Object | provenance | | +| Constructors.cs:71:14:71:15 | access to local variable c2 : C2 [parameter field o22param] : Object | Constructors.cs:71:14:71:21 | access to property Obj22 | provenance | | +| Constructors.cs:71:14:71:15 | access to local variable c2 : C2 [parameter field o22param] : Object | Constructors.cs:71:14:71:21 | access to property Obj22 | provenance | | +| Constructors.cs:72:14:72:15 | access to local variable c2 : C2 [field Obj21] : Object | Constructors.cs:50:32:50:36 | this : C2 [field Obj21] : Object | provenance | | +| Constructors.cs:72:14:72:15 | access to local variable c2 : C2 [field Obj21] : Object | Constructors.cs:50:32:50:36 | this : C2 [field Obj21] : Object | provenance | | +| Constructors.cs:72:14:72:15 | access to local variable c2 : C2 [field Obj21] : Object | Constructors.cs:72:14:72:21 | access to property Obj23 | provenance | | +| Constructors.cs:72:14:72:15 | access to local variable c2 : C2 [field Obj21] : Object | Constructors.cs:72:14:72:21 | access to property Obj23 | provenance | | +| Constructors.cs:81:21:81:37 | call to method Source : Object | Constructors.cs:82:19:82:23 | access to local variable taint : Object | provenance | | +| Constructors.cs:81:21:81:37 | call to method Source : Object | Constructors.cs:82:19:82:23 | access to local variable taint : Object | provenance | | +| Constructors.cs:82:9:82:10 | [post] access to local variable c2 : C2 [parameter field o22param] : Object | Constructors.cs:83:14:83:15 | access to local variable c2 : C2 [parameter field o22param] : Object | provenance | | +| Constructors.cs:82:9:82:10 | [post] access to local variable c2 : C2 [parameter field o22param] : Object | Constructors.cs:83:14:83:15 | access to local variable c2 : C2 [parameter field o22param] : Object | provenance | | +| Constructors.cs:82:19:82:23 | access to local variable taint : Object | Constructors.cs:52:35:52:35 | o : Object | provenance | | +| Constructors.cs:82:19:82:23 | access to local variable taint : Object | Constructors.cs:52:35:52:35 | o : Object | provenance | | +| Constructors.cs:82:19:82:23 | access to local variable taint : Object | Constructors.cs:82:9:82:10 | [post] access to local variable c2 : C2 [parameter field o22param] : Object | provenance | | +| Constructors.cs:82:19:82:23 | access to local variable taint : Object | Constructors.cs:82:9:82:10 | [post] access to local variable c2 : C2 [parameter field o22param] : Object | provenance | | +| Constructors.cs:83:14:83:15 | access to local variable c2 : C2 [parameter field o22param] : Object | Constructors.cs:48:32:48:39 | this : C2 [parameter field o22param] : Object | provenance | | +| Constructors.cs:83:14:83:15 | access to local variable c2 : C2 [parameter field o22param] : Object | Constructors.cs:48:32:48:39 | this : C2 [parameter field o22param] : Object | provenance | | +| Constructors.cs:83:14:83:15 | access to local variable c2 : C2 [parameter field o22param] : Object | Constructors.cs:83:14:83:21 | access to property Obj22 | provenance | | +| Constructors.cs:83:14:83:15 | access to local variable c2 : C2 [parameter field o22param] : Object | Constructors.cs:83:14:83:21 | access to property Obj22 | provenance | | nodes | Constructors.cs:5:24:5:25 | [post] this access : C_no_ctor [field s1] : Object | semmle.label | [post] this access : C_no_ctor [field s1] : Object | | Constructors.cs:5:24:5:25 | [post] this access : C_no_ctor [field s1] : Object | semmle.label | [post] this access : C_no_ctor [field s1] : Object | @@ -77,6 +125,28 @@ nodes | 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:41:38:41:38 | access to parameter o : Object | semmle.label | access to parameter o : Object | +| Constructors.cs:44:28:44:35 | o21param : Object | semmle.label | o21param : 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: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 | +| Constructors.cs:46:23:46:27 | [post] this access : C2 [field Obj21] : Object | semmle.label | [post] this access : C2 [field Obj21] : Object | +| Constructors.cs:46:31:46:38 | access to parameter o21param : Object | semmle.label | access to parameter o21param : Object | +| Constructors.cs:46:31:46:38 | access to parameter o21param : Object | semmle.label | access to parameter o21param : Object | +| Constructors.cs:48:32:48:39 | access to parameter o22param : Object | semmle.label | access to parameter o22param : Object | +| Constructors.cs:48:32:48:39 | access to parameter o22param : Object | semmle.label | access to parameter o22param : Object | +| Constructors.cs:48:32:48:39 | this : C2 [parameter field o22param] : Object | semmle.label | this : C2 [parameter field o22param] : Object | +| Constructors.cs:48:32:48:39 | this : C2 [parameter field o22param] : Object | semmle.label | this : C2 [parameter field o22param] : Object | +| Constructors.cs:50:32:50:36 | access to field Obj21 : Object | semmle.label | access to field Obj21 : Object | +| 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 : 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:50:32:50:36 | this access : C2 [field Obj21] : Object | semmle.label | this access : C2 [field Obj21] : Object | +| Constructors.cs:52:35:52:35 | o : Object | semmle.label | o : Object | +| Constructors.cs:52:35:52:35 | o : Object | semmle.label | o : Object | +| Constructors.cs:54:24:54:24 | access to parameter o : Object | semmle.label | access to parameter o : Object | +| Constructors.cs:54:24:54:24 | access to parameter o : Object | semmle.label | access to parameter o : Object | | Constructors.cs:60:17:60:33 | call to method Source : Object | semmle.label | call to method Source : Object | | Constructors.cs:60:17:60:33 | call to method Source : Object | semmle.label | call to method Source : Object | | Constructors.cs:61:18:61:26 | object creation of type C1 : C1 [field Obj] : Object | semmle.label | object creation of type C1 : C1 [field Obj] : Object | @@ -87,9 +157,55 @@ nodes | Constructors.cs:62:14:62:15 | access to local variable c1 : C1 [field Obj] : Object | semmle.label | access to local variable c1 : C1 [field Obj] : Object | | Constructors.cs:62:14:62:19 | access to field Obj | semmle.label | access to field Obj | | Constructors.cs:62:14:62:19 | access to field Obj | semmle.label | access to field Obj | +| Constructors.cs:67:19:67:35 | call to method Source : Object | semmle.label | call to method Source : Object | +| Constructors.cs:67:19:67:35 | call to method Source : Object | semmle.label | call to method Source : Object | +| Constructors.cs:68:19:68:35 | call to method Source : Object | semmle.label | call to method Source : Object | +| Constructors.cs:68:19:68:35 | call to method Source : Object | semmle.label | call to method Source : Object | +| Constructors.cs:69:18:69:33 | object creation of type C2 : C2 [field Obj21] : Object | semmle.label | object creation of type C2 : C2 [field Obj21] : Object | +| Constructors.cs:69:18:69:33 | object creation of type C2 : C2 [field Obj21] : Object | semmle.label | object creation of type C2 : C2 [field Obj21] : Object | +| Constructors.cs:69:18:69:33 | object creation of type C2 : C2 [parameter field o22param] : Object | semmle.label | object creation of type C2 : C2 [parameter field o22param] : Object | +| Constructors.cs:69:18:69:33 | object creation of type C2 : C2 [parameter field o22param] : Object | semmle.label | object creation of type C2 : C2 [parameter field o22param] : Object | +| Constructors.cs:69:25:69:27 | access to local variable o21 : Object | semmle.label | access to local variable o21 : Object | +| Constructors.cs:69:25:69:27 | access to local variable o21 : Object | semmle.label | access to local variable o21 : Object | +| Constructors.cs:69:30:69:32 | access to local variable o22 : Object | semmle.label | access to local variable o22 : Object | +| Constructors.cs:69:30:69:32 | access to local variable o22 : Object | semmle.label | access to local variable o22 : Object | +| Constructors.cs:70:14:70:15 | access to local variable c2 : C2 [field Obj21] : Object | semmle.label | access to local variable c2 : C2 [field Obj21] : Object | +| Constructors.cs:70:14:70:15 | access to local variable c2 : C2 [field Obj21] : Object | semmle.label | access to local variable c2 : C2 [field Obj21] : Object | +| Constructors.cs:70:14:70:21 | access to field Obj21 | semmle.label | access to field Obj21 | +| Constructors.cs:70:14:70:21 | access to field Obj21 | semmle.label | access to field Obj21 | +| Constructors.cs:71:14:71:15 | access to local variable c2 : C2 [parameter field o22param] : Object | semmle.label | access to local variable c2 : C2 [parameter field o22param] : Object | +| Constructors.cs:71:14:71:15 | access to local variable c2 : C2 [parameter field o22param] : Object | semmle.label | access to local variable c2 : C2 [parameter field o22param] : Object | +| Constructors.cs:71:14:71:21 | access to property Obj22 | semmle.label | access to property Obj22 | +| Constructors.cs:71:14:71:21 | access to property Obj22 | semmle.label | access to property Obj22 | +| Constructors.cs:72:14:72:15 | access to local variable c2 : C2 [field Obj21] : Object | semmle.label | access to local variable c2 : C2 [field Obj21] : Object | +| Constructors.cs:72:14:72:15 | access to local variable c2 : C2 [field Obj21] : Object | semmle.label | access to local variable c2 : C2 [field Obj21] : Object | +| Constructors.cs:72:14:72:21 | access to property Obj23 | semmle.label | access to property Obj23 | +| Constructors.cs:72:14:72:21 | access to property Obj23 | semmle.label | access to property Obj23 | +| Constructors.cs:81:21:81:37 | call to method Source : Object | semmle.label | call to method Source : Object | +| Constructors.cs:81:21:81:37 | call to method Source : Object | semmle.label | call to method Source : Object | +| Constructors.cs:82:9:82:10 | [post] access to local variable c2 : C2 [parameter field o22param] : Object | semmle.label | [post] access to local variable c2 : C2 [parameter field o22param] : Object | +| Constructors.cs:82:9:82:10 | [post] access to local variable c2 : C2 [parameter field o22param] : Object | semmle.label | [post] access to local variable c2 : C2 [parameter field o22param] : Object | +| Constructors.cs:82:19:82:23 | access to local variable taint : Object | semmle.label | access to local variable taint : Object | +| Constructors.cs:82:19:82:23 | access to local variable taint : Object | semmle.label | access to local variable taint : Object | +| Constructors.cs:83:14:83:15 | access to local variable c2 : C2 [parameter field o22param] : Object | semmle.label | access to local variable c2 : C2 [parameter field o22param] : Object | +| Constructors.cs:83:14:83:15 | access to local variable c2 : C2 [parameter field o22param] : Object | semmle.label | access to local variable c2 : C2 [parameter field o22param] : Object | +| Constructors.cs:83:14:83:21 | access to property Obj22 | semmle.label | access to property Obj22 | +| Constructors.cs:83:14:83:21 | access to property Obj22 | semmle.label | access to property Obj22 | subpaths | Constructors.cs:61:25:61:25 | access to local variable o : Object | Constructors.cs:41:26:41:26 | o : Object | Constructors.cs:41:32:41:34 | [post] this access : C1 [field Obj] : Object | Constructors.cs:61:18:61:26 | object creation of type C1 : C1 [field Obj] : Object | | Constructors.cs:61:25:61:25 | access to local variable o : Object | Constructors.cs:41:26:41:26 | o : Object | Constructors.cs:41:32:41:34 | [post] this access : C1 [field Obj] : Object | Constructors.cs:61:18:61:26 | object creation of type C1 : C1 [field Obj] : Object | +| Constructors.cs:69:25:69:27 | access to local variable o21 : Object | Constructors.cs:44:28:44:35 | o21param : Object | Constructors.cs:46:23:46:27 | [post] this access : C2 [field Obj21] : Object | Constructors.cs:69:18:69:33 | object creation of type C2 : C2 [field Obj21] : Object | +| Constructors.cs:69:25:69:27 | access to local variable o21 : Object | Constructors.cs:44:28:44:35 | o21param : Object | Constructors.cs:46:23:46:27 | [post] this access : C2 [field Obj21] : Object | Constructors.cs:69:18:69:33 | object creation of type C2 : C2 [field Obj21] : Object | +| Constructors.cs:69:30:69:32 | access to local variable o22 : Object | Constructors.cs:44:45:44:52 | o22param : Object | Constructors.cs:44:45:44:52 | o22param : Object | Constructors.cs:69:18:69:33 | object creation of type C2 : C2 [parameter field o22param] : Object | +| Constructors.cs:69:30:69:32 | access to local variable o22 : Object | Constructors.cs:44:45:44:52 | o22param : Object | Constructors.cs:44:45:44:52 | o22param : Object | Constructors.cs:69:18:69:33 | object creation of type C2 : C2 [parameter field o22param] : Object | +| Constructors.cs:71:14:71:15 | access to local variable c2 : C2 [parameter field o22param] : Object | Constructors.cs:48:32:48:39 | this : C2 [parameter field o22param] : Object | Constructors.cs:48:32:48:39 | access to parameter o22param : Object | Constructors.cs:71:14:71:21 | access to property Obj22 | +| Constructors.cs:71:14:71:15 | access to local variable c2 : C2 [parameter field o22param] : Object | Constructors.cs:48:32:48:39 | this : C2 [parameter field o22param] : Object | Constructors.cs:48:32:48:39 | access to parameter o22param : Object | Constructors.cs:71:14:71:21 | access to property Obj22 | +| Constructors.cs:72:14:72: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:72:14:72:21 | access to property Obj23 | +| Constructors.cs:72:14:72: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:72:14:72:21 | access to property Obj23 | +| Constructors.cs:82:19:82:23 | access to local variable taint : Object | Constructors.cs:52:35:52:35 | o : Object | Constructors.cs:54:24:54:24 | access to parameter o : Object | Constructors.cs:82:9:82:10 | [post] access to local variable c2 : C2 [parameter field o22param] : Object | +| Constructors.cs:82:19:82:23 | access to local variable taint : Object | Constructors.cs:52:35:52:35 | o : Object | Constructors.cs:54:24:54:24 | access to parameter o : Object | Constructors.cs:82:9:82:10 | [post] access to local variable c2 : C2 [parameter field o22param] : Object | +| Constructors.cs:83:14:83:15 | access to local variable c2 : C2 [parameter field o22param] : Object | Constructors.cs:48:32:48:39 | this : C2 [parameter field o22param] : Object | Constructors.cs:48:32:48:39 | access to parameter o22param : Object | Constructors.cs:83:14:83:21 | access to property Obj22 | +| Constructors.cs:83:14:83:15 | access to local variable c2 : C2 [parameter field o22param] : Object | Constructors.cs:48:32:48:39 | this : C2 [parameter field o22param] : Object | Constructors.cs:48:32:48:39 | access to parameter o22param : Object | Constructors.cs:83:14:83:21 | access to property Obj22 | #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 | | 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 | @@ -97,3 +213,11 @@ subpaths | Constructors.cs:33:18:33:19 | access to field s1 | Constructors.cs:21:29:21:45 | call to method Source : Object | Constructors.cs:33:18:33:19 | access to field s1 | $@ | Constructors.cs:21:29:21:45 | call to method Source : Object | call to method Source : Object | | Constructors.cs:62:14:62:19 | access to field Obj | Constructors.cs:60:17:60:33 | call to method Source : Object | Constructors.cs:62:14:62:19 | access to field Obj | $@ | Constructors.cs:60:17:60:33 | call to method Source : Object | call to method Source : Object | | Constructors.cs:62:14:62:19 | access to field Obj | Constructors.cs:60:17:60:33 | call to method Source : Object | Constructors.cs:62:14:62:19 | access to field Obj | $@ | Constructors.cs:60:17:60:33 | call to method Source : Object | call to method Source : Object | +| Constructors.cs:70:14:70:21 | access to field Obj21 | Constructors.cs:67:19:67:35 | call to method Source : Object | Constructors.cs:70:14:70:21 | access to field Obj21 | $@ | Constructors.cs:67:19:67:35 | call to method Source : Object | call to method Source : Object | +| Constructors.cs:70:14:70:21 | access to field Obj21 | Constructors.cs:67:19:67:35 | call to method Source : Object | Constructors.cs:70:14:70:21 | access to field Obj21 | $@ | Constructors.cs:67:19:67:35 | call to method Source : Object | call to method Source : Object | +| Constructors.cs:71:14:71:21 | access to property Obj22 | Constructors.cs:68:19:68:35 | call to method Source : Object | Constructors.cs:71:14:71:21 | access to property Obj22 | $@ | Constructors.cs:68:19:68:35 | call to method Source : Object | call to method Source : Object | +| Constructors.cs:71:14:71:21 | access to property Obj22 | Constructors.cs:68:19:68:35 | call to method Source : Object | Constructors.cs:71:14:71:21 | access to property Obj22 | $@ | Constructors.cs:68:19:68:35 | call to method Source : Object | call to method Source : Object | +| Constructors.cs:72:14:72:21 | access to property Obj23 | Constructors.cs:67:19:67:35 | call to method Source : Object | Constructors.cs:72:14:72:21 | access to property Obj23 | $@ | Constructors.cs:67:19:67:35 | call to method Source : Object | call to method Source : Object | +| Constructors.cs:72:14:72:21 | access to property Obj23 | Constructors.cs:67:19:67:35 | call to method Source : Object | Constructors.cs:72:14:72:21 | access to property Obj23 | $@ | Constructors.cs:67:19:67:35 | call to method Source : Object | call to method Source : Object | +| Constructors.cs:83:14:83:21 | access to property Obj22 | Constructors.cs:81:21:81:37 | call to method Source : Object | Constructors.cs:83:14:83:21 | access to property Obj22 | $@ | Constructors.cs:81:21:81:37 | call to method Source : Object | call to method Source : Object | +| Constructors.cs:83:14:83:21 | access to property Obj22 | Constructors.cs:81:21:81:37 | call to method Source : Object | Constructors.cs:83:14:83:21 | access to property Obj22 | $@ | Constructors.cs:81:21:81:37 | call to method Source : Object | call to method Source : Object | From 4083348b3ed44d5486d9a993a5f5e415fc2e37b8 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Tue, 30 Jan 2024 16:52:14 +0100 Subject: [PATCH 151/378] C#: Add a primary constructor QL library test. --- .../constructors/PrimaryConstructor.expected | 2 ++ .../constructors/PrimaryConstructor.ql | 8 ++++++ .../constructors/PrintAst.expected | 27 +++++++++++++++++++ .../constructors/constructors.cs | 10 +++++++ 4 files changed, 47 insertions(+) create mode 100644 csharp/ql/test/library-tests/constructors/PrimaryConstructor.expected create mode 100644 csharp/ql/test/library-tests/constructors/PrimaryConstructor.ql diff --git a/csharp/ql/test/library-tests/constructors/PrimaryConstructor.expected b/csharp/ql/test/library-tests/constructors/PrimaryConstructor.expected new file mode 100644 index 00000000000..af59b035810 --- /dev/null +++ b/csharp/ql/test/library-tests/constructors/PrimaryConstructor.expected @@ -0,0 +1,2 @@ +| constructors.cs:23:18:23:19 | C1 | +| constructors.cs:28:18:28:19 | C2 | diff --git a/csharp/ql/test/library-tests/constructors/PrimaryConstructor.ql b/csharp/ql/test/library-tests/constructors/PrimaryConstructor.ql new file mode 100644 index 00000000000..428b8d14559 --- /dev/null +++ b/csharp/ql/test/library-tests/constructors/PrimaryConstructor.ql @@ -0,0 +1,8 @@ +/** + * @name Test for primary constructors + */ + +import csharp + +from PrimaryConstructor c +select c diff --git a/csharp/ql/test/library-tests/constructors/PrintAst.expected b/csharp/ql/test/library-tests/constructors/PrintAst.expected index 83a9235de1a..bd949312d8f 100644 --- a/csharp/ql/test/library-tests/constructors/PrintAst.expected +++ b/csharp/ql/test/library-tests/constructors/PrintAst.expected @@ -17,3 +17,30 @@ constructors.cs: # 16| -1: [TypeMention] int # 16| 0: [LocalVariableAccess] access to local variable i # 16| 1: [IntLiteral] 0 +# 21| [NamespaceDeclaration] namespace ... { ... } +# 23| 1: [Class] C1 +# 23| 4: [InstanceConstructor,PrimaryConstructor] C1 +#-----| 2: (Parameters) +# 23| 0: [Parameter] o +# 23| -1: [TypeMention] object +# 23| 1: [Parameter] s +# 23| -1: [TypeMention] string +# 25| 5: [InstanceConstructor] C1 +#-----| 2: (Parameters) +# 25| 0: [Parameter] o +# 25| -1: [TypeMention] object +# 25| 3: [ConstructorInitializer] call to constructor C1 +# 25| 0: [ParameterAccess] access to parameter o +# 25| 1: [StringLiteralUtf16] "default" +# 25| 4: [BlockStmt] {...} +# 28| 2: [Class] C2 +#-----| 3: (Base types) +# 28| 0: [TypeMention] C1 +# 28| 4: [InstanceConstructor,PrimaryConstructor] C2 +#-----| 2: (Parameters) +# 28| 0: [Parameter] o +# 28| -1: [TypeMention] object +# 28| 1: [Parameter] s +# 28| -1: [TypeMention] string +# 28| 2: [Parameter] i +# 28| -1: [TypeMention] int diff --git a/csharp/ql/test/library-tests/constructors/constructors.cs b/csharp/ql/test/library-tests/constructors/constructors.cs index d8619a0edb9..33867d8ebc7 100644 --- a/csharp/ql/test/library-tests/constructors/constructors.cs +++ b/csharp/ql/test/library-tests/constructors/constructors.cs @@ -17,3 +17,13 @@ namespace Constructors } } } + +namespace PrimaryConstructors +{ + public class C1(object o, string s) + { + public C1(object o) : this(o, "default") { } + } + + public class C2(object o, string s, int i) : C1(o, s) { } +} From aed508014258fb220be6f9ea0d077d5221ca9cb3 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Mon, 12 Feb 2024 13:13:33 +0100 Subject: [PATCH 152/378] C#: Add primary constructor change note. --- csharp/ql/lib/change-notes/2024-02-12-primary-constructors.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 csharp/ql/lib/change-notes/2024-02-12-primary-constructors.md diff --git a/csharp/ql/lib/change-notes/2024-02-12-primary-constructors.md b/csharp/ql/lib/change-notes/2024-02-12-primary-constructors.md new file mode 100644 index 00000000000..672b1aeb351 --- /dev/null +++ b/csharp/ql/lib/change-notes/2024-02-12-primary-constructors.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* C# 12: The QL and data flow library now support primary constructors. From 5af58d24e09daedd898f4edfdb50b3be1a48f2ac Mon Sep 17 00:00:00 2001 From: Harry Maclean Date: Mon, 5 Feb 2024 16:10:57 +0000 Subject: [PATCH 153/378] Ruby: Recognise raw Erb output as XSS sink --- ruby/ql/lib/codeql/ruby/ast/Erb.qll | 24 ++++++++++++++++--- ruby/ql/lib/codeql/ruby/ast/internal/Erb.qll | 11 +++++++-- ruby/ql/lib/codeql/ruby/security/XSS.qll | 12 ++++++++++ .../security/cwe-079/ReflectedXSS.expected | 3 +++ .../cwe-079/app/views/foo/bars/show.html.erb | 3 +++ 5 files changed, 48 insertions(+), 5 deletions(-) diff --git a/ruby/ql/lib/codeql/ruby/ast/Erb.qll b/ruby/ql/lib/codeql/ruby/ast/Erb.qll index 88d882ca210..d3586ba7823 100644 --- a/ruby/ql/lib/codeql/ruby/ast/Erb.qll +++ b/ruby/ql/lib/codeql/ruby/ast/Erb.qll @@ -252,14 +252,32 @@ class ErbGraphqlDirective extends ErbDirective { class ErbOutputDirective extends ErbDirective { private Erb::OutputDirective g; - ErbOutputDirective() { this = TOutputDirective(g) } + ErbOutputDirective() { this = TOutputDirective(g) or this = TRawOutputDirective(g) } override ErbCode getToken() { toGenerated(result) = g.getChild() } + /** + * Holds if this is a raw Erb output directive. + * ```erb + * <%== foo %> + * ``` + */ + predicate isRaw() { this = TRawOutputDirective(g) } + final override string toString() { - result = "<%=" + this.getToken().toString() + "%>" + this.isRaw() and + ( + result = "<%==" + this.getToken().toString() + "%>" + or + not exists(this.getToken()) and result = "<%==%>" + ) or - not exists(this.getToken()) and result = "<%=%>" + not this.isRaw() and + ( + result = "<%=" + this.getToken().toString() + "%>" + or + not exists(this.getToken()) and result = "<%=%>" + ) } final override string getAPrimaryQlClass() { result = "ErbOutputDirective" } diff --git a/ruby/ql/lib/codeql/ruby/ast/internal/Erb.qll b/ruby/ql/lib/codeql/ruby/ast/internal/Erb.qll index 7a69bf5b783..a26eb2482b6 100644 --- a/ruby/ql/lib/codeql/ruby/ast/internal/Erb.qll +++ b/ruby/ql/lib/codeql/ruby/ast/internal/Erb.qll @@ -9,12 +9,17 @@ private module Cached { TCommentDirective(Erb::CommentDirective g) or TDirective(Erb::Directive g) or TGraphqlDirective(Erb::GraphqlDirective g) or - TOutputDirective(Erb::OutputDirective g) or + TOutputDirective(Erb::OutputDirective g) { getOpeningTag(g) != "<%==" } or + TRawOutputDirective(Erb::OutputDirective g) { getOpeningTag(g) = "<%==" } or TTemplate(Erb::Template g) or TToken(Erb::Token g) or TComment(Erb::Comment g) or TCode(Erb::Code g) + private string getOpeningTag(Erb::OutputDirective g) { + erb_tokeninfo(any(Erb::Token t | erb_ast_node_info(t, g, 0, _)), 0, result) + } + /** * Gets the underlying TreeSitter entity for a given erb AST node. */ @@ -24,6 +29,7 @@ private module Cached { n = TDirective(result) or n = TGraphqlDirective(result) or n = TOutputDirective(result) or + n = TRawOutputDirective(result) or n = TTemplate(result) or n = TToken(result) or n = TComment(result) or @@ -38,6 +44,7 @@ import Cached TAstNode fromGenerated(Erb::AstNode n) { n = toGenerated(result) } -class TDirectiveNode = TCommentDirective or TDirective or TGraphqlDirective or TOutputDirective; +class TDirectiveNode = + TCommentDirective or TDirective or TGraphqlDirective or TOutputDirective or TRawOutputDirective; class TTokenNode = TToken or TComment or TCode; diff --git a/ruby/ql/lib/codeql/ruby/security/XSS.qll b/ruby/ql/lib/codeql/ruby/security/XSS.qll index c731e8fc245..26aa90fe831 100644 --- a/ruby/ql/lib/codeql/ruby/security/XSS.qll +++ b/ruby/ql/lib/codeql/ruby/security/XSS.qll @@ -48,6 +48,18 @@ private module Shared { MethodCall getCall() { result = call } } + /** + * A value interpolated using a raw erb output directive, which does not perform HTML escaping. + * ```erb + * <%== sink %> + * ``` + */ + class ErbRawOutputDirective extends Sink { + ErbRawOutputDirective() { + exists(ErbOutputDirective d | d.isRaw() | this.asExpr().getExpr() = d.getTerminalStmt()) + } + } + /** * An `html_safe` call marking the output as not requiring HTML escaping, * considered as a flow sink. diff --git a/ruby/ql/test/query-tests/security/cwe-079/ReflectedXSS.expected b/ruby/ql/test/query-tests/security/cwe-079/ReflectedXSS.expected index 650168f7bce..71f40d81a34 100644 --- a/ruby/ql/test/query-tests/security/cwe-079/ReflectedXSS.expected +++ b/ruby/ql/test/query-tests/security/cwe-079/ReflectedXSS.expected @@ -21,6 +21,7 @@ edges | app/controllers/foo/bars_controller.rb:26:53:26:54 | dt | app/views/foo/bars/show.html.erb:17:15:17:27 | call to local_assigns [element :display_text] | provenance | | | app/controllers/foo/bars_controller.rb:26:53:26:54 | dt | app/views/foo/bars/show.html.erb:35:3:35:14 | call to display_text | provenance | | | app/controllers/foo/bars_controller.rb:26:53:26:54 | dt | app/views/foo/bars/show.html.erb:43:76:43:87 | call to display_text | provenance | | +| app/controllers/foo/bars_controller.rb:26:53:26:54 | dt | app/views/foo/bars/show.html.erb:82:6:82:17 | call to display_text | provenance | | | app/controllers/foo/bars_controller.rb:30:5:30:7 | str | app/controllers/foo/bars_controller.rb:31:5:31:7 | str | provenance | | | app/controllers/foo/bars_controller.rb:30:11:30:16 | call to params | app/controllers/foo/bars_controller.rb:30:11:30:28 | ...[...] | provenance | | | app/controllers/foo/bars_controller.rb:30:11:30:28 | ...[...] | app/controllers/foo/bars_controller.rb:30:5:30:7 | str | provenance | | @@ -90,6 +91,7 @@ nodes | app/views/foo/bars/show.html.erb:73:19:73:34 | ...[...] | semmle.label | ...[...] | | app/views/foo/bars/show.html.erb:76:28:76:33 | call to params | semmle.label | call to params | | app/views/foo/bars/show.html.erb:76:28:76:39 | ...[...] | semmle.label | ...[...] | +| app/views/foo/bars/show.html.erb:82:6:82:17 | call to display_text | semmle.label | call to display_text | subpaths #select | app/controllers/foo/bars_controller.rb:24:39:24:59 | ... = ... | app/controllers/foo/bars_controller.rb:24:39:24:44 | call to params | app/controllers/foo/bars_controller.rb:24:39:24:59 | ... = ... | Cross-site scripting vulnerability due to a $@. | app/controllers/foo/bars_controller.rb:24:39:24:44 | call to params | user-provided value | @@ -109,3 +111,4 @@ subpaths | app/views/foo/bars/show.html.erb:56:13:56:28 | ...[...] | app/views/foo/bars/show.html.erb:56:13:56:18 | call to params | app/views/foo/bars/show.html.erb:56:13:56:28 | ...[...] | Cross-site scripting vulnerability due to a $@. | app/views/foo/bars/show.html.erb:56:13:56:18 | call to params | user-provided value | | app/views/foo/bars/show.html.erb:73:19:73:34 | ...[...] | app/views/foo/bars/show.html.erb:73:19:73:24 | call to params | app/views/foo/bars/show.html.erb:73:19:73:34 | ...[...] | Cross-site scripting vulnerability due to a $@. | app/views/foo/bars/show.html.erb:73:19:73:24 | call to params | user-provided value | | app/views/foo/bars/show.html.erb:76:28:76:39 | ...[...] | app/views/foo/bars/show.html.erb:76:28:76:33 | call to params | app/views/foo/bars/show.html.erb:76:28:76:39 | ...[...] | Cross-site scripting vulnerability due to a $@. | app/views/foo/bars/show.html.erb:76:28:76:33 | call to params | user-provided value | +| app/views/foo/bars/show.html.erb:82:6:82:17 | call to display_text | app/controllers/foo/bars_controller.rb:18:10:18:15 | call to params | app/views/foo/bars/show.html.erb:82:6:82:17 | call to display_text | Cross-site scripting vulnerability due to a $@. | app/controllers/foo/bars_controller.rb:18:10:18:15 | call to params | user-provided value | diff --git a/ruby/ql/test/query-tests/security/cwe-079/app/views/foo/bars/show.html.erb b/ruby/ql/test/query-tests/security/cwe-079/app/views/foo/bars/show.html.erb index be1ae02691f..21c463eddbb 100644 --- a/ruby/ql/test/query-tests/security/cwe-079/app/views/foo/bars/show.html.erb +++ b/ruby/ql/test/query-tests/security/cwe-079/app/views/foo/bars/show.html.erb @@ -77,3 +77,6 @@ <%# GOOD: input is sanitized %> <%= sanitize(params[:comment]).html_safe %> + +<%# BAD: A local rendered raw as a local variable %> +<%== display_text %> From c79a3eb6aece78ec4d7a230d9e6ab303851f7a03 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Wed, 7 Feb 2024 16:37:40 +0000 Subject: [PATCH 154/378] Add query for insecure key generation --- .../java/security/AndroidLocalAuthQuery.qll | 19 +++++++++++++++++ .../CWE/CWE-287/AndroidInsecureKeys.ql | 21 +++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 java/ql/src/Security/CWE/CWE-287/AndroidInsecureKeys.ql diff --git a/java/ql/lib/semmle/code/java/security/AndroidLocalAuthQuery.qll b/java/ql/lib/semmle/code/java/security/AndroidLocalAuthQuery.qll index ca725a041d5..14476e737d9 100644 --- a/java/ql/lib/semmle/code/java/security/AndroidLocalAuthQuery.qll +++ b/java/ql/lib/semmle/code/java/security/AndroidLocalAuthQuery.qll @@ -1,6 +1,7 @@ /** Definitions for the insecure local authentication query. */ import java +import semmle.code.java.dataflow.DataFlow /** A base class that is used as a callback for biometric authentication. */ private class AuthenticationCallbackClass extends Class { @@ -40,3 +41,21 @@ class AuthenticationSuccessCallback extends Method { not result = this.getASuperResultUse() } } + +/** A call that sets a parameter for key generation that is insecure for use with biometric authentication. */ +class InsecureBiometricKeyParam extends MethodCall { + InsecureBiometricKeyParam() { + exists(string name, CompileTimeConstantExpr val | + this.getMethod() + .hasQualifiedName("android.security.keystore", "KeyGenParameterSpec$Builder", name) and + DataFlow::localExprFlow(val, this.getArgument(0)) and + ( + name = ["setUserAuthenticationRequired", "setInvalidatedByBiometricEnrollment"] and + val.getBooleanValue() = false + or + name = "setUserAuthenticationValidityDurationSeconds" and + val.getIntValue() != -1 + ) + ) + } +} diff --git a/java/ql/src/Security/CWE/CWE-287/AndroidInsecureKeys.ql b/java/ql/src/Security/CWE/CWE-287/AndroidInsecureKeys.ql new file mode 100644 index 00000000000..00156283045 --- /dev/null +++ b/java/ql/src/Security/CWE/CWE-287/AndroidInsecureKeys.ql @@ -0,0 +1,21 @@ +/** + * @name Insecurely generated keys for local authentication + * @description Keys used for local biometric authentication should be generated with secure parameters. + * @kind problem + * @problem.severity warning + * @security-severity 9.3 + * @precision medium + * @id java/android/insecure-local-key-gen + * @tags security + * external/cwe/cwe-287 + */ + +import java +import semmle.code.java.security.AndroidLocalAuthQuery + +/** Holds if the application contains an instance of a key being used for local biometric authentication. */ +predicate usesLocalAuth() { exists(AuthenticationSuccessCallback cb | exists(cb.getAResultUse())) } + +from InsecureBiometricKeyParam call +where usesLocalAuth() +select call, "This key is not secure for biometric authentication." From d8985f9f5bc489f2c15049249e00a7d4ea34a945 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Thu, 8 Feb 2024 10:32:56 +0000 Subject: [PATCH 155/378] Move tests for local auth to a folder --- java/ql/lib/semmle/code/java/security/AndroidLocalAuthQuery.qll | 2 +- .../CWE-287/{ => InsecureLocalAuth}/InsecureLocalAuth.expected | 0 .../CWE-287/{ => InsecureLocalAuth}/InsecureLocalAuth.ql | 0 .../security/CWE-287/{ => InsecureLocalAuth}/Test.java | 0 .../security/CWE-287/{ => InsecureLocalAuth}/Test2.java | 0 .../security/CWE-287/{ => InsecureLocalAuth}/options | 2 +- 6 files changed, 2 insertions(+), 2 deletions(-) rename java/ql/test/query-tests/security/CWE-287/{ => InsecureLocalAuth}/InsecureLocalAuth.expected (100%) rename java/ql/test/query-tests/security/CWE-287/{ => InsecureLocalAuth}/InsecureLocalAuth.ql (100%) rename java/ql/test/query-tests/security/CWE-287/{ => InsecureLocalAuth}/Test.java (100%) rename java/ql/test/query-tests/security/CWE-287/{ => InsecureLocalAuth}/Test2.java (100%) rename java/ql/test/query-tests/security/CWE-287/{ => InsecureLocalAuth}/options (67%) diff --git a/java/ql/lib/semmle/code/java/security/AndroidLocalAuthQuery.qll b/java/ql/lib/semmle/code/java/security/AndroidLocalAuthQuery.qll index 14476e737d9..004741aabfc 100644 --- a/java/ql/lib/semmle/code/java/security/AndroidLocalAuthQuery.qll +++ b/java/ql/lib/semmle/code/java/security/AndroidLocalAuthQuery.qll @@ -1,7 +1,7 @@ /** Definitions for the insecure local authentication query. */ import java -import semmle.code.java.dataflow.DataFlow +private import semmle.code.java.dataflow.DataFlow /** A base class that is used as a callback for biometric authentication. */ private class AuthenticationCallbackClass extends Class { diff --git a/java/ql/test/query-tests/security/CWE-287/InsecureLocalAuth.expected b/java/ql/test/query-tests/security/CWE-287/InsecureLocalAuth/InsecureLocalAuth.expected similarity index 100% rename from java/ql/test/query-tests/security/CWE-287/InsecureLocalAuth.expected rename to java/ql/test/query-tests/security/CWE-287/InsecureLocalAuth/InsecureLocalAuth.expected diff --git a/java/ql/test/query-tests/security/CWE-287/InsecureLocalAuth.ql b/java/ql/test/query-tests/security/CWE-287/InsecureLocalAuth/InsecureLocalAuth.ql similarity index 100% rename from java/ql/test/query-tests/security/CWE-287/InsecureLocalAuth.ql rename to java/ql/test/query-tests/security/CWE-287/InsecureLocalAuth/InsecureLocalAuth.ql diff --git a/java/ql/test/query-tests/security/CWE-287/Test.java b/java/ql/test/query-tests/security/CWE-287/InsecureLocalAuth/Test.java similarity index 100% rename from java/ql/test/query-tests/security/CWE-287/Test.java rename to java/ql/test/query-tests/security/CWE-287/InsecureLocalAuth/Test.java diff --git a/java/ql/test/query-tests/security/CWE-287/Test2.java b/java/ql/test/query-tests/security/CWE-287/InsecureLocalAuth/Test2.java similarity index 100% rename from java/ql/test/query-tests/security/CWE-287/Test2.java rename to java/ql/test/query-tests/security/CWE-287/InsecureLocalAuth/Test2.java diff --git a/java/ql/test/query-tests/security/CWE-287/options b/java/ql/test/query-tests/security/CWE-287/InsecureLocalAuth/options similarity index 67% rename from java/ql/test/query-tests/security/CWE-287/options rename to java/ql/test/query-tests/security/CWE-287/InsecureLocalAuth/options index dacd3cb21df..33cdc1ea940 100644 --- a/java/ql/test/query-tests/security/CWE-287/options +++ b/java/ql/test/query-tests/security/CWE-287/InsecureLocalAuth/options @@ -1 +1 @@ -//semmle-extractor-options: --javac-args -cp ${testdir}/../../../stubs/google-android-9.0.0 +//semmle-extractor-options: --javac-args -cp ${testdir}/../../../../stubs/google-android-9.0.0 From 2eb93b7a3b5875bc1186d686a7ab60aa94bd13f1 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Thu, 8 Feb 2024 11:11:48 +0000 Subject: [PATCH 156/378] Add unit tests --- .../java/security/AndroidLocalAuthQuery.qll | 7 +- .../CWE/CWE-287/AndroidInsecureKeys.ql | 5 +- .../InsecureKeys/Test1/InsecureKeys.expected | 2 + .../InsecureKeys/Test1/InsecureKeys.ql | 19 +++++ .../CWE-287/InsecureKeys/Test1/Test.java | 21 +++++ .../CWE-287/InsecureKeys/Test1/options | 1 + .../InsecureKeys/Test2/InsecureKeys.expected | 2 + .../InsecureKeys/Test2/InsecureKeys.ql | 19 +++++ .../CWE-287/InsecureKeys/Test2/Test.java | 13 ++++ .../CWE-287/InsecureKeys/Test2/options | 1 + .../keystore/KeyGenParameterSpec.java | 76 +++++++++++++++++++ .../security/keystore/KeyProperties.java | 54 +++++++++++++ 12 files changed, 214 insertions(+), 6 deletions(-) create mode 100644 java/ql/test/query-tests/security/CWE-287/InsecureKeys/Test1/InsecureKeys.expected create mode 100644 java/ql/test/query-tests/security/CWE-287/InsecureKeys/Test1/InsecureKeys.ql create mode 100644 java/ql/test/query-tests/security/CWE-287/InsecureKeys/Test1/Test.java create mode 100644 java/ql/test/query-tests/security/CWE-287/InsecureKeys/Test1/options create mode 100644 java/ql/test/query-tests/security/CWE-287/InsecureKeys/Test2/InsecureKeys.expected create mode 100644 java/ql/test/query-tests/security/CWE-287/InsecureKeys/Test2/InsecureKeys.ql create mode 100644 java/ql/test/query-tests/security/CWE-287/InsecureKeys/Test2/Test.java create mode 100644 java/ql/test/query-tests/security/CWE-287/InsecureKeys/Test2/options create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/security/keystore/KeyGenParameterSpec.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/security/keystore/KeyProperties.java diff --git a/java/ql/lib/semmle/code/java/security/AndroidLocalAuthQuery.qll b/java/ql/lib/semmle/code/java/security/AndroidLocalAuthQuery.qll index 004741aabfc..4a31dc2568d 100644 --- a/java/ql/lib/semmle/code/java/security/AndroidLocalAuthQuery.qll +++ b/java/ql/lib/semmle/code/java/security/AndroidLocalAuthQuery.qll @@ -43,8 +43,8 @@ class AuthenticationSuccessCallback extends Method { } /** A call that sets a parameter for key generation that is insecure for use with biometric authentication. */ -class InsecureBiometricKeyParam extends MethodCall { - InsecureBiometricKeyParam() { +class InsecureBiometricKeyParamCall extends MethodCall { + InsecureBiometricKeyParamCall() { exists(string name, CompileTimeConstantExpr val | this.getMethod() .hasQualifiedName("android.security.keystore", "KeyGenParameterSpec$Builder", name) and @@ -59,3 +59,6 @@ class InsecureBiometricKeyParam extends MethodCall { ) } } + +/** Holds if the application contains an instance of a key being used for local biometric authentication. */ +predicate usesLocalAuth() { exists(AuthenticationSuccessCallback cb | exists(cb.getAResultUse())) } diff --git a/java/ql/src/Security/CWE/CWE-287/AndroidInsecureKeys.ql b/java/ql/src/Security/CWE/CWE-287/AndroidInsecureKeys.ql index 00156283045..0e85229c29b 100644 --- a/java/ql/src/Security/CWE/CWE-287/AndroidInsecureKeys.ql +++ b/java/ql/src/Security/CWE/CWE-287/AndroidInsecureKeys.ql @@ -13,9 +13,6 @@ import java import semmle.code.java.security.AndroidLocalAuthQuery -/** Holds if the application contains an instance of a key being used for local biometric authentication. */ -predicate usesLocalAuth() { exists(AuthenticationSuccessCallback cb | exists(cb.getAResultUse())) } - -from InsecureBiometricKeyParam call +from InsecureBiometricKeyParamCall call where usesLocalAuth() select call, "This key is not secure for biometric authentication." diff --git a/java/ql/test/query-tests/security/CWE-287/InsecureKeys/Test1/InsecureKeys.expected b/java/ql/test/query-tests/security/CWE-287/InsecureKeys/Test1/InsecureKeys.expected new file mode 100644 index 00000000000..8ec8033d086 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-287/InsecureKeys/Test1/InsecureKeys.expected @@ -0,0 +1,2 @@ +testFailures +failures diff --git a/java/ql/test/query-tests/security/CWE-287/InsecureKeys/Test1/InsecureKeys.ql b/java/ql/test/query-tests/security/CWE-287/InsecureKeys/Test1/InsecureKeys.ql new file mode 100644 index 00000000000..eec3b62dfc2 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-287/InsecureKeys/Test1/InsecureKeys.ql @@ -0,0 +1,19 @@ +import java +import TestUtilities.InlineExpectationsTest +import semmle.code.java.dataflow.DataFlow +import semmle.code.java.security.AndroidLocalAuthQuery + +module InsecureKeysTest implements TestSig { + string getARelevantTag() { result = "insecure-key" } + + predicate hasActualResult(Location location, string element, string tag, string value) { + tag = "insecure-key" and + exists(InsecureBiometricKeyParamCall call | usesLocalAuth() | + call.getLocation() = location and + element = call.toString() and + value = "" + ) + } +} + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-287/InsecureKeys/Test1/Test.java b/java/ql/test/query-tests/security/CWE-287/InsecureKeys/Test1/Test.java new file mode 100644 index 00000000000..5fc2c83eea9 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-287/InsecureKeys/Test1/Test.java @@ -0,0 +1,21 @@ +import android.security.keystore.KeyGenParameterSpec; +import android.hardware.biometrics.BiometricPrompt; +import android.security.keystore.KeyProperties; + +class Test { + void test() { + KeyGenParameterSpec.Builder builder = new KeyGenParameterSpec.Builder("MySecretKey", KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT); + builder.setUserAuthenticationRequired(false); // $insecure-key + builder.setInvalidatedByBiometricEnrollment(false); // $insecure-key + builder.setUserAuthenticationValidityDurationSeconds(30); // $insecure-key + } +} + +class Callback extends BiometricPrompt.AuthenticationCallback { + public static void useKey(BiometricPrompt.CryptoObject key) {} + + @Override + public void onAuthenticationSucceeded(BiometricPrompt.AuthenticationResult result) { + useKey(result.getCryptoObject()); + } +} \ No newline at end of file diff --git a/java/ql/test/query-tests/security/CWE-287/InsecureKeys/Test1/options b/java/ql/test/query-tests/security/CWE-287/InsecureKeys/Test1/options new file mode 100644 index 00000000000..7039c596a23 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-287/InsecureKeys/Test1/options @@ -0,0 +1 @@ +//semmle-extractor-options: --javac-args -cp ${testdir}/../../../../../stubs/google-android-9.0.0 diff --git a/java/ql/test/query-tests/security/CWE-287/InsecureKeys/Test2/InsecureKeys.expected b/java/ql/test/query-tests/security/CWE-287/InsecureKeys/Test2/InsecureKeys.expected new file mode 100644 index 00000000000..8ec8033d086 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-287/InsecureKeys/Test2/InsecureKeys.expected @@ -0,0 +1,2 @@ +testFailures +failures diff --git a/java/ql/test/query-tests/security/CWE-287/InsecureKeys/Test2/InsecureKeys.ql b/java/ql/test/query-tests/security/CWE-287/InsecureKeys/Test2/InsecureKeys.ql new file mode 100644 index 00000000000..eec3b62dfc2 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-287/InsecureKeys/Test2/InsecureKeys.ql @@ -0,0 +1,19 @@ +import java +import TestUtilities.InlineExpectationsTest +import semmle.code.java.dataflow.DataFlow +import semmle.code.java.security.AndroidLocalAuthQuery + +module InsecureKeysTest implements TestSig { + string getARelevantTag() { result = "insecure-key" } + + predicate hasActualResult(Location location, string element, string tag, string value) { + tag = "insecure-key" and + exists(InsecureBiometricKeyParamCall call | usesLocalAuth() | + call.getLocation() = location and + element = call.toString() and + value = "" + ) + } +} + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-287/InsecureKeys/Test2/Test.java b/java/ql/test/query-tests/security/CWE-287/InsecureKeys/Test2/Test.java new file mode 100644 index 00000000000..e65b50da888 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-287/InsecureKeys/Test2/Test.java @@ -0,0 +1,13 @@ +import android.security.keystore.KeyGenParameterSpec; +import android.hardware.biometrics.BiometricPrompt; +import android.security.keystore.KeyProperties; + +class Test { + void test() { + KeyGenParameterSpec.Builder builder = new KeyGenParameterSpec.Builder("MySecretKey", KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT); + // No alert as there is no use of biometric authentication in this application. + builder.setUserAuthenticationRequired(false); + builder.setInvalidatedByBiometricEnrollment(false); + builder.setUserAuthenticationValidityDurationSeconds(30); + } +} \ No newline at end of file diff --git a/java/ql/test/query-tests/security/CWE-287/InsecureKeys/Test2/options b/java/ql/test/query-tests/security/CWE-287/InsecureKeys/Test2/options new file mode 100644 index 00000000000..7039c596a23 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-287/InsecureKeys/Test2/options @@ -0,0 +1 @@ +//semmle-extractor-options: --javac-args -cp ${testdir}/../../../../../stubs/google-android-9.0.0 diff --git a/java/ql/test/stubs/google-android-9.0.0/android/security/keystore/KeyGenParameterSpec.java b/java/ql/test/stubs/google-android-9.0.0/android/security/keystore/KeyGenParameterSpec.java new file mode 100644 index 00000000000..7998d48428e --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/security/keystore/KeyGenParameterSpec.java @@ -0,0 +1,76 @@ +// Generated automatically from android.security.keystore.KeyGenParameterSpec for testing purposes + +package android.security.keystore; + +import java.math.BigInteger; +import java.security.spec.AlgorithmParameterSpec; +import java.util.Date; +import javax.security.auth.x500.X500Principal; + +public class KeyGenParameterSpec implements AlgorithmParameterSpec +{ + public AlgorithmParameterSpec getAlgorithmParameterSpec(){ return null; } + public BigInteger getCertificateSerialNumber(){ return null; } + public Date getCertificateNotAfter(){ return null; } + public Date getCertificateNotBefore(){ return null; } + public Date getKeyValidityForConsumptionEnd(){ return null; } + public Date getKeyValidityForOriginationEnd(){ return null; } + public Date getKeyValidityStart(){ return null; } + public String getAttestKeyAlias(){ return null; } + public String getKeystoreAlias(){ return null; } + public String[] getBlockModes(){ return null; } + public String[] getDigests(){ return null; } + public String[] getEncryptionPaddings(){ return null; } + public String[] getSignaturePaddings(){ return null; } + public X500Principal getCertificateSubject(){ return null; } + public boolean isDevicePropertiesAttestationIncluded(){ return false; } + public boolean isDigestsSpecified(){ return false; } + public boolean isInvalidatedByBiometricEnrollment(){ return false; } + public boolean isRandomizedEncryptionRequired(){ return false; } + public boolean isStrongBoxBacked(){ return false; } + public boolean isUnlockedDeviceRequired(){ return false; } + public boolean isUserAuthenticationRequired(){ return false; } + public boolean isUserAuthenticationValidWhileOnBody(){ return false; } + public boolean isUserConfirmationRequired(){ return false; } + public boolean isUserPresenceRequired(){ return false; } + public byte[] getAttestationChallenge(){ return null; } + public int getKeySize(){ return 0; } + public int getMaxUsageCount(){ return 0; } + public int getPurposes(){ return 0; } + public int getUserAuthenticationType(){ return 0; } + public int getUserAuthenticationValidityDurationSeconds(){ return 0; } + static public class Builder + { + protected Builder() {} + public Builder(String p0, int p1){} + public KeyGenParameterSpec build(){ return null; } + public KeyGenParameterSpec.Builder setAlgorithmParameterSpec(AlgorithmParameterSpec p0){ return null; } + public KeyGenParameterSpec.Builder setAttestKeyAlias(String p0){ return null; } + public KeyGenParameterSpec.Builder setAttestationChallenge(byte[] p0){ return null; } + public KeyGenParameterSpec.Builder setBlockModes(String... p0){ return null; } + public KeyGenParameterSpec.Builder setCertificateNotAfter(Date p0){ return null; } + public KeyGenParameterSpec.Builder setCertificateNotBefore(Date p0){ return null; } + public KeyGenParameterSpec.Builder setCertificateSerialNumber(BigInteger p0){ return null; } + public KeyGenParameterSpec.Builder setCertificateSubject(X500Principal p0){ return null; } + public KeyGenParameterSpec.Builder setDevicePropertiesAttestationIncluded(boolean p0){ return null; } + public KeyGenParameterSpec.Builder setDigests(String... p0){ return null; } + public KeyGenParameterSpec.Builder setEncryptionPaddings(String... p0){ return null; } + public KeyGenParameterSpec.Builder setInvalidatedByBiometricEnrollment(boolean p0){ return null; } + public KeyGenParameterSpec.Builder setIsStrongBoxBacked(boolean p0){ return null; } + public KeyGenParameterSpec.Builder setKeySize(int p0){ return null; } + public KeyGenParameterSpec.Builder setKeyValidityEnd(Date p0){ return null; } + public KeyGenParameterSpec.Builder setKeyValidityForConsumptionEnd(Date p0){ return null; } + public KeyGenParameterSpec.Builder setKeyValidityForOriginationEnd(Date p0){ return null; } + public KeyGenParameterSpec.Builder setKeyValidityStart(Date p0){ return null; } + public KeyGenParameterSpec.Builder setMaxUsageCount(int p0){ return null; } + public KeyGenParameterSpec.Builder setRandomizedEncryptionRequired(boolean p0){ return null; } + public KeyGenParameterSpec.Builder setSignaturePaddings(String... p0){ return null; } + public KeyGenParameterSpec.Builder setUnlockedDeviceRequired(boolean p0){ return null; } + public KeyGenParameterSpec.Builder setUserAuthenticationParameters(int p0, int p1){ return null; } + public KeyGenParameterSpec.Builder setUserAuthenticationRequired(boolean p0){ return null; } + public KeyGenParameterSpec.Builder setUserAuthenticationValidWhileOnBody(boolean p0){ return null; } + public KeyGenParameterSpec.Builder setUserAuthenticationValidityDurationSeconds(int p0){ return null; } + public KeyGenParameterSpec.Builder setUserConfirmationRequired(boolean p0){ return null; } + public KeyGenParameterSpec.Builder setUserPresenceRequired(boolean p0){ return null; } + } +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/security/keystore/KeyProperties.java b/java/ql/test/stubs/google-android-9.0.0/android/security/keystore/KeyProperties.java new file mode 100644 index 00000000000..b9e7a912698 --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/security/keystore/KeyProperties.java @@ -0,0 +1,54 @@ +// Generated automatically from android.security.keystore.KeyProperties for testing purposes + +package android.security.keystore; + + +abstract public class KeyProperties +{ + protected KeyProperties() {} + public static String BLOCK_MODE_CBC = null; + public static String BLOCK_MODE_CTR = null; + public static String BLOCK_MODE_ECB = null; + public static String BLOCK_MODE_GCM = null; + public static String DIGEST_MD5 = null; + public static String DIGEST_NONE = null; + public static String DIGEST_SHA1 = null; + public static String DIGEST_SHA224 = null; + public static String DIGEST_SHA256 = null; + public static String DIGEST_SHA384 = null; + public static String DIGEST_SHA512 = null; + public static String ENCRYPTION_PADDING_NONE = null; + public static String ENCRYPTION_PADDING_PKCS7 = null; + public static String ENCRYPTION_PADDING_RSA_OAEP = null; + public static String ENCRYPTION_PADDING_RSA_PKCS1 = null; + public static String KEY_ALGORITHM_3DES = null; + public static String KEY_ALGORITHM_AES = null; + public static String KEY_ALGORITHM_EC = null; + public static String KEY_ALGORITHM_HMAC_SHA1 = null; + public static String KEY_ALGORITHM_HMAC_SHA224 = null; + public static String KEY_ALGORITHM_HMAC_SHA256 = null; + public static String KEY_ALGORITHM_HMAC_SHA384 = null; + public static String KEY_ALGORITHM_HMAC_SHA512 = null; + public static String KEY_ALGORITHM_RSA = null; + public static String SIGNATURE_PADDING_RSA_PKCS1 = null; + public static String SIGNATURE_PADDING_RSA_PSS = null; + public static int AUTH_BIOMETRIC_STRONG = 0; + public static int AUTH_DEVICE_CREDENTIAL = 0; + public static int ORIGIN_GENERATED = 0; + public static int ORIGIN_IMPORTED = 0; + public static int ORIGIN_SECURELY_IMPORTED = 0; + public static int ORIGIN_UNKNOWN = 0; + public static int PURPOSE_AGREE_KEY = 0; + public static int PURPOSE_ATTEST_KEY = 0; + public static int PURPOSE_DECRYPT = 0; + public static int PURPOSE_ENCRYPT = 0; + public static int PURPOSE_SIGN = 0; + public static int PURPOSE_VERIFY = 0; + public static int PURPOSE_WRAP_KEY = 0; + public static int SECURITY_LEVEL_SOFTWARE = 0; + public static int SECURITY_LEVEL_STRONGBOX = 0; + public static int SECURITY_LEVEL_TRUSTED_ENVIRONMENT = 0; + public static int SECURITY_LEVEL_UNKNOWN = 0; + public static int SECURITY_LEVEL_UNKNOWN_SECURE = 0; + public static int UNRESTRICTED_USAGE_COUNT = 0; +} From 16a7d68780180cf36835c5659c5506a5c31ba94b Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Mon, 12 Feb 2024 13:57:31 +0000 Subject: [PATCH 157/378] Add documentation --- .../CWE/CWE-287/AndroidInsecureKeys.qhelp | 40 +++++++++++++++++++ .../CWE/CWE-287/AndroidInsecureKeysGood.java | 16 ++++++++ 2 files changed, 56 insertions(+) create mode 100644 java/ql/src/Security/CWE/CWE-287/AndroidInsecureKeys.qhelp create mode 100644 java/ql/src/Security/CWE/CWE-287/AndroidInsecureKeysGood.java diff --git a/java/ql/src/Security/CWE/CWE-287/AndroidInsecureKeys.qhelp b/java/ql/src/Security/CWE/CWE-287/AndroidInsecureKeys.qhelp new file mode 100644 index 00000000000..7b7a86ca667 --- /dev/null +++ b/java/ql/src/Security/CWE/CWE-287/AndroidInsecureKeys.qhelp @@ -0,0 +1,40 @@ + + + + +

    +Biometric authentication such as fingerprint recognition can be used alongside cryptographic keys stored in the Android KeyStore to protect sensitive parts of the application. However, +when a key generated for this purpose has certain parameters set insecurely, it can allow an attacker with physical access to bypass the +authentication check, using application hooking tools such as Frida. +

    +
    + + +

    +When generating a key for use with biometric authentication, ensure that the following parameters of KeyGenParameterSpec.Builder are set: +

    +
      +
    • setUserAuthenticationRequired should be set to true; otherwise the key can be used without user authentication.
    • +
    • setInvalidatedByBiometricEnrollment should be set to true (the default); otherwise an attacker can use the key by enrolling additional biometrics on the device.
    • +
    • setUserAuthenticationValidityDurationSeconds, if used, should be set to -1; otherwise non-biometric (less secure) credentials can be used to access the key. setUserAuthenticationParameters is instead recommended to explicitly set both the timeout and the types of credentials that may be used.
    • +
    + +
    + + +

    The following example demonstrates a key that is configured with secure paramaters:

    + +
    + + +
  • +WithSecure: How Secure is your Android Keystore Authentication? +
  • +
  • +Android Developers: KeyGenParameterSpec.Builder +
  • + +
    +
    diff --git a/java/ql/src/Security/CWE/CWE-287/AndroidInsecureKeysGood.java b/java/ql/src/Security/CWE/CWE-287/AndroidInsecureKeysGood.java new file mode 100644 index 00000000000..843f020fdbe --- /dev/null +++ b/java/ql/src/Security/CWE/CWE-287/AndroidInsecureKeysGood.java @@ -0,0 +1,16 @@ +private void generateSecretKey() { + KeyGenParameterSpec keyGenParameterSpec = new KeyGenParameterSpec.Builder( + "MySecretKey", + KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT) + .setBlockModes(KeyProperties.BLOCK_MODE_CBC) + .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_PKCS7) + // GOOD: Secure parameters are used to generate a key for biometric authentication. + .setUserAuthenticationRequired(true) + .setInvalidatedByBiometricEnrollment(true) + .setUserAuthenticationParamters(0, KeyProperties.AUTH_BIOMETRIC_STRONG) + .build(); + KeyGenerator keyGenerator = KeyGenerator.getInstance( + KeyProperties.KEY_ALGORITHM_AES, "AndroidKeyStore"); + keyGenerator.init(keyGenParameterSpec); + keyGenerator.generateKey(); +} \ No newline at end of file From 3a4a841844d66263adb051d07afb8a0ea0bb5041 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Mon, 12 Feb 2024 14:01:27 +0000 Subject: [PATCH 158/378] Add change note + update severity --- java/ql/src/Security/CWE/CWE-287/AndroidInsecureKeys.ql | 2 +- java/ql/src/change-notes/2024-02-12-android-insecure-keys.md | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 java/ql/src/change-notes/2024-02-12-android-insecure-keys.md diff --git a/java/ql/src/Security/CWE/CWE-287/AndroidInsecureKeys.ql b/java/ql/src/Security/CWE/CWE-287/AndroidInsecureKeys.ql index 0e85229c29b..c8090f23c1d 100644 --- a/java/ql/src/Security/CWE/CWE-287/AndroidInsecureKeys.ql +++ b/java/ql/src/Security/CWE/CWE-287/AndroidInsecureKeys.ql @@ -3,7 +3,7 @@ * @description Keys used for local biometric authentication should be generated with secure parameters. * @kind problem * @problem.severity warning - * @security-severity 9.3 + * @security-severity 4.4 * @precision medium * @id java/android/insecure-local-key-gen * @tags security diff --git a/java/ql/src/change-notes/2024-02-12-android-insecure-keys.md b/java/ql/src/change-notes/2024-02-12-android-insecure-keys.md new file mode 100644 index 00000000000..1de07727796 --- /dev/null +++ b/java/ql/src/change-notes/2024-02-12-android-insecure-keys.md @@ -0,0 +1,4 @@ +--- +category: newQuery +--- +* Added a new query `java/android/insecure-local-key-gen` for finding instances of keys generated for biometric authentication in an insecure way. \ No newline at end of file From 68b920f3300f1e4890cc236a3474083347ea4a19 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Mon, 12 Feb 2024 15:09:36 +0100 Subject: [PATCH 159/378] C#: Update other tests expected output. --- .../test/library-tests/csharp9/PrintAst.expected | 14 +++++++------- .../dataflow/tuples/PrintAst.expected | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/csharp/ql/test/library-tests/csharp9/PrintAst.expected b/csharp/ql/test/library-tests/csharp9/PrintAst.expected index feef948d70b..7bc97c98d70 100644 --- a/csharp/ql/test/library-tests/csharp9/PrintAst.expected +++ b/csharp/ql/test/library-tests/csharp9/PrintAst.expected @@ -878,7 +878,7 @@ Record.cs: # 27| 1: [Parameter] right # 27| 14: [Property] EqualityContract # 27| 3: [Getter] get_EqualityContract -# 27| 15: [InstanceConstructor] Person1 +# 27| 15: [InstanceConstructor,PrimaryConstructor] Person1 #-----| 2: (Parameters) # 27| 0: [Parameter] FirstName # 27| -1: [TypeMention] string @@ -905,7 +905,7 @@ Record.cs: # 29| 1: [Parameter] right # 29| 15: [Property] EqualityContract # 29| 3: [Getter] get_EqualityContract -# 29| 16: [InstanceConstructor] Teacher1 +# 29| 16: [InstanceConstructor,PrimaryConstructor] Teacher1 #-----| 2: (Parameters) # 29| 0: [Parameter] FirstName # 29| -1: [TypeMention] string @@ -929,7 +929,7 @@ Record.cs: # 32| 1: [Parameter] right # 32| 15: [Property] EqualityContract # 32| 3: [Getter] get_EqualityContract -# 32| 16: [InstanceConstructor] Student1 +# 32| 16: [InstanceConstructor,PrimaryConstructor] Student1 #-----| 2: (Parameters) # 32| 0: [Parameter] FirstName # 32| -1: [TypeMention] string @@ -953,7 +953,7 @@ Record.cs: # 35| 1: [Parameter] right # 35| 14: [Property] EqualityContract # 35| 3: [Getter] get_EqualityContract -# 35| 15: [InstanceConstructor] Pet +# 35| 15: [InstanceConstructor,PrimaryConstructor] Pet #-----| 2: (Parameters) # 35| 0: [Parameter] Name # 35| -1: [TypeMention] string @@ -977,7 +977,7 @@ Record.cs: #-----| 2: (Parameters) # 41| 0: [Parameter] left # 41| 1: [Parameter] right -# 41| 14: [InstanceConstructor] Dog +# 41| 14: [InstanceConstructor,PrimaryConstructor] Dog #-----| 2: (Parameters) # 41| 0: [Parameter] Name # 41| -1: [TypeMention] string @@ -1018,7 +1018,7 @@ Record.cs: # 54| 1: [Parameter] right # 54| 14: [Property] EqualityContract # 54| 3: [Getter] get_EqualityContract -# 54| 15: [InstanceConstructor] R1 +# 54| 15: [InstanceConstructor,PrimaryConstructor] R1 #-----| 2: (Parameters) # 54| 0: [Parameter] A # 54| -1: [TypeMention] string @@ -1038,7 +1038,7 @@ Record.cs: # 56| 1: [Parameter] right # 56| 15: [Property] EqualityContract # 56| 3: [Getter] get_EqualityContract -# 56| 16: [InstanceConstructor] R2 +# 56| 16: [InstanceConstructor,PrimaryConstructor] R2 #-----| 2: (Parameters) # 56| 0: [Parameter] A # 56| -1: [TypeMention] string diff --git a/csharp/ql/test/library-tests/dataflow/tuples/PrintAst.expected b/csharp/ql/test/library-tests/dataflow/tuples/PrintAst.expected index bbe5e6d22c5..7cbddb9d3d5 100644 --- a/csharp/ql/test/library-tests/dataflow/tuples/PrintAst.expected +++ b/csharp/ql/test/library-tests/dataflow/tuples/PrintAst.expected @@ -363,7 +363,7 @@ Tuples.cs: # 95| 1: [Parameter] right # 95| 14: [Property] EqualityContract # 95| 3: [Getter] get_EqualityContract -# 95| 15: [InstanceConstructor] R1 +# 95| 15: [InstanceConstructor,PrimaryConstructor] R1 #-----| 2: (Parameters) # 95| 0: [Parameter] i # 95| -1: [TypeMention] string From 27ebebc24bd72370ed4c8b4f3a140fb04c14f066 Mon Sep 17 00:00:00 2001 From: Cornelius Riemenschneider Date: Mon, 12 Feb 2024 17:10:35 +0100 Subject: [PATCH 160/378] Python: Update BUILD.bazel files. This allows us to (later) build the whole python language pack with bazel. --- python/BUILD.bazel | 19 +++++++++++++++++++ python/downgrades/BUILD.bazel | 12 ++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 python/downgrades/BUILD.bazel diff --git a/python/BUILD.bazel b/python/BUILD.bazel index 7905f5b4927..e6d1387e4c2 100644 --- a/python/BUILD.bazel +++ b/python/BUILD.bazel @@ -1,3 +1,5 @@ +load("@rules_pkg//:mappings.bzl", "pkg_filegroup", "pkg_files") + package(default_visibility = ["//visibility:public"]) alias( @@ -9,3 +11,20 @@ alias( name = "dbscheme-stats", actual = "//python/ql/lib:dbscheme-stats", ) + +pkg_files( + name = "dbscheme-group", + srcs = [ + ":dbscheme", + ":dbscheme-stats", + ], + strip_prefix = None, +) + +pkg_filegroup( + name = "db-files", + srcs = [ + ":dbscheme-group", + "//python/downgrades", + ], +) diff --git a/python/downgrades/BUILD.bazel b/python/downgrades/BUILD.bazel new file mode 100644 index 00000000000..924ff12ff30 --- /dev/null +++ b/python/downgrades/BUILD.bazel @@ -0,0 +1,12 @@ +load("@rules_pkg//:mappings.bzl", "pkg_files", "strip_prefix") + +pkg_files( + name = "downgrades", + srcs = glob( + ["**"], + exclude = ["BUILD.bazel"], + ), + prefix = "downgrades", + strip_prefix = strip_prefix.from_pkg(), + visibility = ["//python:__pkg__"], +) From 8635b5d31662a2a959b3b2036284538719f1c514 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Mon, 12 Feb 2024 16:44:38 +0000 Subject: [PATCH 161/378] C++: Add test with missing flow. --- cpp/ql/test/library-tests/dataflow/dataflow-tests/test.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/test.cpp b/cpp/ql/test/library-tests/dataflow/dataflow-tests/test.cpp index 8dcefb20b95..da2176ece8e 100644 --- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/test.cpp +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/test.cpp @@ -1037,4 +1037,11 @@ namespace test_gettext { sink(translated); // clean indirect_sink(translated); // clean } +} + +void* memset(void*, int, size_t); + +void memset_test(char* buf) { // $ ast-def=buf + memset(buf, source(), 10); + sink(*buf); // $ MISSING: ast ir } \ No newline at end of file From 70c7c1a5e7e911d7ff40ea868bbf8054483843f2 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Mon, 12 Feb 2024 16:51:16 +0000 Subject: [PATCH 162/378] C++: Add flow from the fill character to the output pointer. --- .../code/cpp/models/implementations/Memset.qll | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/cpp/ql/lib/semmle/code/cpp/models/implementations/Memset.qll b/cpp/ql/lib/semmle/code/cpp/models/implementations/Memset.qll index a540c0a88b6..965ac8daf3b 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/implementations/Memset.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/implementations/Memset.qll @@ -22,11 +22,28 @@ private class MemsetFunctionModel extends ArrayFunction, DataFlowFunction, Alias ]) } + /** + * Gets the index of the parameter that specifies the fill character to insert, if any. + */ + private int getFillCharParameterIndex() { + ( + this.hasGlobalOrStdOrBslName("memset") + or + this.hasGlobalOrStdName("wmemset") + or + this.hasGlobalName(["__builtin_memset", "__builtin_memset_chk"]) + ) and + result = 1 + } + override predicate hasArrayOutput(int bufParam) { bufParam = 0 } override predicate hasDataFlow(FunctionInput input, FunctionOutput output) { input.isParameter(0) and output.isReturnValue() + or + input.isParameter(this.getFillCharParameterIndex()) and + (output.isParameterDeref(0) or output.isReturnValueDeref()) } override predicate hasArrayWithVariableSize(int bufParam, int countParam) { From a7993996394ab0306f1b45d3cd4493deacb53e15 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Mon, 12 Feb 2024 16:51:25 +0000 Subject: [PATCH 163/378] C++: Accept test changes. --- .../dataflow/dataflow-tests/dataflow-consistency.expected | 1 + .../dataflow/dataflow-tests/dataflow-ir-consistency.expected | 1 + .../dataflow/dataflow-tests/test-source-sink.expected | 1 + cpp/ql/test/library-tests/dataflow/dataflow-tests/test.cpp | 2 +- 4 files changed, 4 insertions(+), 1 deletion(-) diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/dataflow-consistency.expected b/cpp/ql/test/library-tests/dataflow/dataflow-tests/dataflow-consistency.expected index af91d22d4bf..8b2b371a4e2 100644 --- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/dataflow-consistency.expected +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/dataflow-consistency.expected @@ -165,6 +165,7 @@ postWithInFlow | test.cpp:931:5:931:18 | global_pointer [post update] | PostUpdateNode should not be the target of local flow. | | test.cpp:932:5:932:19 | * ... [post update] | PostUpdateNode should not be the target of local flow. | | test.cpp:932:6:932:19 | global_pointer [inner post update] | PostUpdateNode should not be the target of local flow. | +| test.cpp:1045:9:1045:11 | ref arg buf | PostUpdateNode should not be the target of local flow. | viableImplInCallContextTooLarge uniqueParameterNodeAtPosition uniqueParameterNodePosition diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/dataflow-ir-consistency.expected b/cpp/ql/test/library-tests/dataflow/dataflow-tests/dataflow-ir-consistency.expected index 93792f406aa..cc0903c1efb 100644 --- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/dataflow-ir-consistency.expected +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/dataflow-ir-consistency.expected @@ -25,6 +25,7 @@ postWithInFlow | test.cpp:391:10:391:13 | memcpy output argument | PostUpdateNode should not be the target of local flow. | | test.cpp:400:10:400:13 | memcpy output argument | PostUpdateNode should not be the target of local flow. | | test.cpp:407:10:407:13 | memcpy output argument | PostUpdateNode should not be the target of local flow. | +| test.cpp:1045:9:1045:11 | memset output argument | PostUpdateNode should not be the target of local flow. | viableImplInCallContextTooLarge uniqueParameterNodeAtPosition uniqueParameterNodePosition diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/test-source-sink.expected b/cpp/ql/test/library-tests/dataflow/dataflow-tests/test-source-sink.expected index 6c56bee2699..2d33f47ba60 100644 --- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/test-source-sink.expected +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/test-source-sink.expected @@ -309,6 +309,7 @@ irFlow | test.cpp:994:18:994:32 | *call to indirect_source | test.cpp:1003:19:1003:28 | *translated | | test.cpp:1021:18:1021:32 | *call to indirect_source | test.cpp:1027:19:1027:28 | *translated | | test.cpp:1021:18:1021:32 | *call to indirect_source | test.cpp:1031:19:1031:28 | *translated | +| test.cpp:1045:14:1045:19 | call to source | test.cpp:1046:7:1046:10 | * ... | | true_upon_entry.cpp:9:11:9:16 | call to source | true_upon_entry.cpp:13:8:13:8 | x | | true_upon_entry.cpp:17:11:17:16 | call to source | true_upon_entry.cpp:21:8:21:8 | x | | true_upon_entry.cpp:27:9:27:14 | call to source | true_upon_entry.cpp:29:8:29:8 | x | diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/test.cpp b/cpp/ql/test/library-tests/dataflow/dataflow-tests/test.cpp index da2176ece8e..e29619a6800 100644 --- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/test.cpp +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/test.cpp @@ -1043,5 +1043,5 @@ void* memset(void*, int, size_t); void memset_test(char* buf) { // $ ast-def=buf memset(buf, source(), 10); - sink(*buf); // $ MISSING: ast ir + sink(*buf); // $ ir MISSING: ast } \ No newline at end of file From a12816174675ade71ebfc1fab5fde235249d3d53 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Mon, 12 Feb 2024 16:59:42 -0500 Subject: [PATCH 164/378] Use `!cancelled` in qhelp-pr-preview workflow --- .github/workflows/qhelp-pr-preview.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/qhelp-pr-preview.yml b/.github/workflows/qhelp-pr-preview.yml index 8b20fbe00c9..db267175d4e 100644 --- a/.github/workflows/qhelp-pr-preview.yml +++ b/.github/workflows/qhelp-pr-preview.yml @@ -77,7 +77,7 @@ jobs: done < "${RUNNER_TEMP}/paths.txt" >> comment_body.txt exit "${EXIT_CODE}" - - if: always() + - if: ${{ !cancelled() }} uses: actions/upload-artifact@v3 with: name: comment From a3008083ea0664b1889d36f135a62051a08a5b97 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 13 Feb 2024 03:58:21 +0000 Subject: [PATCH 165/378] Bump the extractor-dependencies group in /go/extractor with 1 update Bumps the extractor-dependencies group in /go/extractor with 1 update: [golang.org/x/tools](https://github.com/golang/tools). Updates `golang.org/x/tools` from 0.17.0 to 0.18.0 - [Release notes](https://github.com/golang/tools/releases) - [Commits](https://github.com/golang/tools/compare/v0.17.0...v0.18.0) --- updated-dependencies: - dependency-name: golang.org/x/tools dependency-type: direct:production update-type: version-update:semver-minor dependency-group: extractor-dependencies ... Signed-off-by: dependabot[bot] --- go/extractor/go.mod | 2 +- go/extractor/go.sum | 4 +- .../golang.org/x/tools/go/packages/doc.go | 40 ++++++---- .../x/tools/go/packages/external.go | 77 ++++++++++++++----- .../golang.org/x/tools/go/packages/golist.go | 35 ++++----- .../x/tools/go/packages/packages.go | 46 ++--------- .../x/tools/internal/gcimporter/iimport.go | 7 ++ go/extractor/vendor/modules.txt | 2 +- 8 files changed, 117 insertions(+), 96 deletions(-) diff --git a/go/extractor/go.mod b/go/extractor/go.mod index d4a00dcd158..c1aa66b49b3 100644 --- a/go/extractor/go.mod +++ b/go/extractor/go.mod @@ -4,5 +4,5 @@ go 1.21 require ( golang.org/x/mod v0.15.0 - golang.org/x/tools v0.17.0 + golang.org/x/tools v0.18.0 ) diff --git a/go/extractor/go.sum b/go/extractor/go.sum index f3a7decbd45..dab099e92a0 100644 --- a/go/extractor/go.sum +++ b/go/extractor/go.sum @@ -2,5 +2,5 @@ golang.org/x/mod v0.15.0 h1:SernR4v+D55NyBH2QiEQrlBAnj1ECL6AGrA5+dPaMY8= golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/tools v0.17.0 h1:FvmRgNOcs3kOa+T20R1uhfP9F6HgG2mfxDv1vrx1Htc= -golang.org/x/tools v0.17.0/go.mod h1:xsh6VxdV005rRVaS6SSAf9oiAqljS7UZUacMZ8Bnsps= +golang.org/x/tools v0.18.0 h1:k8NLag8AGHnn+PHbl7g43CtqZAwG60vZkLqgyZgIHgQ= +golang.org/x/tools v0.18.0/go.mod h1:GL7B4CwcLLeo59yx/9UWWuNOW1n3VZ4f5axWfML7Lcg= diff --git a/go/extractor/vendor/golang.org/x/tools/go/packages/doc.go b/go/extractor/vendor/golang.org/x/tools/go/packages/doc.go index b2a0b7c6a67..a8d7b06ac09 100644 --- a/go/extractor/vendor/golang.org/x/tools/go/packages/doc.go +++ b/go/extractor/vendor/golang.org/x/tools/go/packages/doc.go @@ -15,22 +15,10 @@ Load passes most patterns directly to the underlying build tool. The default build tool is the go command. Its supported patterns are described at https://pkg.go.dev/cmd/go#hdr-Package_lists_and_patterns. +Other build systems may be supported by providing a "driver"; +see [The driver protocol]. -Load may be used in Go projects that use alternative build systems, by -installing an appropriate "driver" program for the build system and -specifying its location in the GOPACKAGESDRIVER environment variable. -For example, -https://github.com/bazelbuild/rules_go/wiki/Editor-and-tool-integration -explains how to use the driver for Bazel. -The driver program is responsible for interpreting patterns in its -preferred notation and reporting information about the packages that -they identify. -(See driverRequest and driverResponse types for the JSON -schema used by the protocol. -Though the protocol is supported, these types are currently unexported; -see #64608 for a proposal to publish them.) - -Regardless of driver, all patterns with the prefix "query=", where query is a +All patterns with the prefix "query=", where query is a non-empty string of letters from [a-z], are reserved and may be interpreted as query operators. @@ -86,7 +74,29 @@ for details. Most tools should pass their command-line arguments (after any flags) uninterpreted to [Load], so that it can interpret them according to the conventions of the underlying build system. + See the Example function for typical usage. + +# The driver protocol + +[Load] may be used to load Go packages even in Go projects that use +alternative build systems, by installing an appropriate "driver" +program for the build system and specifying its location in the +GOPACKAGESDRIVER environment variable. +For example, +https://github.com/bazelbuild/rules_go/wiki/Editor-and-tool-integration +explains how to use the driver for Bazel. + +The driver program is responsible for interpreting patterns in its +preferred notation and reporting information about the packages that +those patterns identify. Drivers must also support the special "file=" +and "pattern=" patterns described above. + +The patterns are provided as positional command-line arguments. A +JSON-encoded [DriverRequest] message providing additional information +is written to the driver's standard input. The driver must write a +JSON-encoded [DriverResponse] message to its standard output. (This +message differs from the JSON schema produced by 'go list'.) */ package packages // import "golang.org/x/tools/go/packages" diff --git a/go/extractor/vendor/golang.org/x/tools/go/packages/external.go b/go/extractor/vendor/golang.org/x/tools/go/packages/external.go index 7db1d1293ab..4335c1eb14c 100644 --- a/go/extractor/vendor/golang.org/x/tools/go/packages/external.go +++ b/go/extractor/vendor/golang.org/x/tools/go/packages/external.go @@ -2,12 +2,11 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// This file enables an external tool to intercept package requests. -// If the tool is present then its results are used in preference to -// the go list command. - package packages +// This file defines the protocol that enables an external "driver" +// tool to supply package metadata in place of 'go list'. + import ( "bytes" "encoding/json" @@ -17,31 +16,71 @@ import ( "strings" ) -// The Driver Protocol +// DriverRequest defines the schema of a request for package metadata +// from an external driver program. The JSON-encoded DriverRequest +// message is provided to the driver program's standard input. The +// query patterns are provided as command-line arguments. // -// The driver, given the inputs to a call to Load, returns metadata about the packages specified. -// This allows for different build systems to support go/packages by telling go/packages how the -// packages' source is organized. -// The driver is a binary, either specified by the GOPACKAGESDRIVER environment variable or in -// the path as gopackagesdriver. It's given the inputs to load in its argv. See the package -// documentation in doc.go for the full description of the patterns that need to be supported. -// A driver receives as a JSON-serialized driverRequest struct in standard input and will -// produce a JSON-serialized driverResponse (see definition in packages.go) in its standard output. - -// driverRequest is used to provide the portion of Load's Config that is needed by a driver. -type driverRequest struct { +// See the package documentation for an overview. +type DriverRequest struct { Mode LoadMode `json:"mode"` + // Env specifies the environment the underlying build system should be run in. Env []string `json:"env"` + // BuildFlags are flags that should be passed to the underlying build system. BuildFlags []string `json:"build_flags"` + // Tests specifies whether the patterns should also return test packages. Tests bool `json:"tests"` + // Overlay maps file paths (relative to the driver's working directory) to the byte contents // of overlay files. Overlay map[string][]byte `json:"overlay"` } +// DriverResponse defines the schema of a response from an external +// driver program, providing the results of a query for package +// metadata. The driver program must write a JSON-encoded +// DriverResponse message to its standard output. +// +// See the package documentation for an overview. +type DriverResponse struct { + // NotHandled is returned if the request can't be handled by the current + // driver. If an external driver returns a response with NotHandled, the + // rest of the DriverResponse is ignored, and go/packages will fallback + // to the next driver. If go/packages is extended in the future to support + // lists of multiple drivers, go/packages will fall back to the next driver. + NotHandled bool + + // Compiler and Arch are the arguments pass of types.SizesFor + // to get a types.Sizes to use when type checking. + Compiler string + Arch string + + // Roots is the set of package IDs that make up the root packages. + // We have to encode this separately because when we encode a single package + // we cannot know if it is one of the roots as that requires knowledge of the + // graph it is part of. + Roots []string `json:",omitempty"` + + // Packages is the full set of packages in the graph. + // The packages are not connected into a graph. + // The Imports if populated will be stubs that only have their ID set. + // Imports will be connected and then type and syntax information added in a + // later pass (see refine). + Packages []*Package + + // GoVersion is the minor version number used by the driver + // (e.g. the go command on the PATH) when selecting .go files. + // Zero means unknown. + GoVersion int +} + +// driver is the type for functions that query the build system for the +// packages named by the patterns. +type driver func(cfg *Config, patterns ...string) (*DriverResponse, error) + // findExternalDriver returns the file path of a tool that supplies // the build system package structure, or "" if not found." // If GOPACKAGESDRIVER is set in the environment findExternalTool returns its @@ -64,8 +103,8 @@ func findExternalDriver(cfg *Config) driver { return nil } } - return func(cfg *Config, words ...string) (*driverResponse, error) { - req, err := json.Marshal(driverRequest{ + return func(cfg *Config, words ...string) (*DriverResponse, error) { + req, err := json.Marshal(DriverRequest{ Mode: cfg.Mode, Env: cfg.Env, BuildFlags: cfg.BuildFlags, @@ -92,7 +131,7 @@ func findExternalDriver(cfg *Config) driver { fmt.Fprintf(os.Stderr, "%s stderr: <<%s>>\n", cmdDebugStr(cmd), stderr) } - var response driverResponse + var response DriverResponse if err := json.Unmarshal(buf.Bytes(), &response); err != nil { return nil, err } diff --git a/go/extractor/vendor/golang.org/x/tools/go/packages/golist.go b/go/extractor/vendor/golang.org/x/tools/go/packages/golist.go index cd375fbc3c2..22305d9c90a 100644 --- a/go/extractor/vendor/golang.org/x/tools/go/packages/golist.go +++ b/go/extractor/vendor/golang.org/x/tools/go/packages/golist.go @@ -35,23 +35,23 @@ type goTooOldError struct { error } -// responseDeduper wraps a driverResponse, deduplicating its contents. +// responseDeduper wraps a DriverResponse, deduplicating its contents. type responseDeduper struct { seenRoots map[string]bool seenPackages map[string]*Package - dr *driverResponse + dr *DriverResponse } func newDeduper() *responseDeduper { return &responseDeduper{ - dr: &driverResponse{}, + dr: &DriverResponse{}, seenRoots: map[string]bool{}, seenPackages: map[string]*Package{}, } } -// addAll fills in r with a driverResponse. -func (r *responseDeduper) addAll(dr *driverResponse) { +// addAll fills in r with a DriverResponse. +func (r *responseDeduper) addAll(dr *DriverResponse) { for _, pkg := range dr.Packages { r.addPackage(pkg) } @@ -128,7 +128,7 @@ func (state *golistState) mustGetEnv() map[string]string { // goListDriver uses the go list command to interpret the patterns and produce // the build system package structure. // See driver for more details. -func goListDriver(cfg *Config, patterns ...string) (*driverResponse, error) { +func goListDriver(cfg *Config, patterns ...string) (_ *DriverResponse, err error) { // Make sure that any asynchronous go commands are killed when we return. parentCtx := cfg.Context if parentCtx == nil { @@ -146,16 +146,18 @@ func goListDriver(cfg *Config, patterns ...string) (*driverResponse, error) { } // Fill in response.Sizes asynchronously if necessary. - var sizeserr error - var sizeswg sync.WaitGroup if cfg.Mode&NeedTypesSizes != 0 || cfg.Mode&NeedTypes != 0 { - sizeswg.Add(1) + errCh := make(chan error) go func() { compiler, arch, err := packagesdriver.GetSizesForArgsGolist(ctx, state.cfgInvocation(), cfg.gocmdRunner) - sizeserr = err response.dr.Compiler = compiler response.dr.Arch = arch - sizeswg.Done() + errCh <- err + }() + defer func() { + if sizesErr := <-errCh; sizesErr != nil { + err = sizesErr + } }() } @@ -208,10 +210,7 @@ extractQueries: } } - sizeswg.Wait() - if sizeserr != nil { - return nil, sizeserr - } + // (We may yet return an error due to defer.) return response.dr, nil } @@ -266,7 +265,7 @@ func (state *golistState) runContainsQueries(response *responseDeduper, queries // adhocPackage attempts to load or construct an ad-hoc package for a given // query, if the original call to the driver produced inadequate results. -func (state *golistState) adhocPackage(pattern, query string) (*driverResponse, error) { +func (state *golistState) adhocPackage(pattern, query string) (*DriverResponse, error) { response, err := state.createDriverResponse(query) if err != nil { return nil, err @@ -357,7 +356,7 @@ func otherFiles(p *jsonPackage) [][]string { // createDriverResponse uses the "go list" command to expand the pattern // words and return a response for the specified packages. -func (state *golistState) createDriverResponse(words ...string) (*driverResponse, error) { +func (state *golistState) createDriverResponse(words ...string) (*DriverResponse, error) { // go list uses the following identifiers in ImportPath and Imports: // // "p" -- importable package or main (command) @@ -384,7 +383,7 @@ func (state *golistState) createDriverResponse(words ...string) (*driverResponse pkgs := make(map[string]*Package) additionalErrors := make(map[string][]Error) // Decode the JSON and convert it to Package form. - response := &driverResponse{ + response := &DriverResponse{ GoVersion: goVersion, } for dec := json.NewDecoder(buf); dec.More(); { diff --git a/go/extractor/vendor/golang.org/x/tools/go/packages/packages.go b/go/extractor/vendor/golang.org/x/tools/go/packages/packages.go index 81e9e6a727d..f33b0afc22c 100644 --- a/go/extractor/vendor/golang.org/x/tools/go/packages/packages.go +++ b/go/extractor/vendor/golang.org/x/tools/go/packages/packages.go @@ -206,43 +206,6 @@ type Config struct { Overlay map[string][]byte } -// driver is the type for functions that query the build system for the -// packages named by the patterns. -type driver func(cfg *Config, patterns ...string) (*driverResponse, error) - -// driverResponse contains the results for a driver query. -type driverResponse struct { - // NotHandled is returned if the request can't be handled by the current - // driver. If an external driver returns a response with NotHandled, the - // rest of the driverResponse is ignored, and go/packages will fallback - // to the next driver. If go/packages is extended in the future to support - // lists of multiple drivers, go/packages will fall back to the next driver. - NotHandled bool - - // Compiler and Arch are the arguments pass of types.SizesFor - // to get a types.Sizes to use when type checking. - Compiler string - Arch string - - // Roots is the set of package IDs that make up the root packages. - // We have to encode this separately because when we encode a single package - // we cannot know if it is one of the roots as that requires knowledge of the - // graph it is part of. - Roots []string `json:",omitempty"` - - // Packages is the full set of packages in the graph. - // The packages are not connected into a graph. - // The Imports if populated will be stubs that only have their ID set. - // Imports will be connected and then type and syntax information added in a - // later pass (see refine). - Packages []*Package - - // GoVersion is the minor version number used by the driver - // (e.g. the go command on the PATH) when selecting .go files. - // Zero means unknown. - GoVersion int -} - // Load loads and returns the Go packages named by the given patterns. // // Config specifies loading options; @@ -291,7 +254,7 @@ func Load(cfg *Config, patterns ...string) ([]*Package, error) { // no external driver, or the driver returns a response with NotHandled set, // defaultDriver will fall back to the go list driver. // The boolean result indicates that an external driver handled the request. -func defaultDriver(cfg *Config, patterns ...string) (*driverResponse, bool, error) { +func defaultDriver(cfg *Config, patterns ...string) (*DriverResponse, bool, error) { if driver := findExternalDriver(cfg); driver != nil { response, err := driver(cfg, patterns...) if err != nil { @@ -303,7 +266,10 @@ func defaultDriver(cfg *Config, patterns ...string) (*driverResponse, bool, erro } response, err := goListDriver(cfg, patterns...) - return response, false, err + if err != nil { + return nil, false, err + } + return response, false, nil } // A Package describes a loaded Go package. @@ -648,7 +614,7 @@ func newLoader(cfg *Config) *loader { // refine connects the supplied packages into a graph and then adds type // and syntax information as requested by the LoadMode. -func (ld *loader) refine(response *driverResponse) ([]*Package, error) { +func (ld *loader) refine(response *DriverResponse) ([]*Package, error) { roots := response.Roots rootMap := make(map[string]int, len(roots)) for i, root := range roots { diff --git a/go/extractor/vendor/golang.org/x/tools/internal/gcimporter/iimport.go b/go/extractor/vendor/golang.org/x/tools/internal/gcimporter/iimport.go index 9bde15e3bc6..9fffa9ad05c 100644 --- a/go/extractor/vendor/golang.org/x/tools/internal/gcimporter/iimport.go +++ b/go/extractor/vendor/golang.org/x/tools/internal/gcimporter/iimport.go @@ -224,6 +224,7 @@ func iimportCommon(fset *token.FileSet, getPackages GetPackagesFunc, data []byte // Gather the relevant packages from the manifest. items := make([]GetPackagesItem, r.uint64()) + uniquePkgPaths := make(map[string]bool) for i := range items { pkgPathOff := r.uint64() pkgPath := p.stringAt(pkgPathOff) @@ -248,6 +249,12 @@ func iimportCommon(fset *token.FileSet, getPackages GetPackagesFunc, data []byte } items[i].nameIndex = nameIndex + + uniquePkgPaths[pkgPath] = true + } + // Debugging #63822; hypothesis: there are duplicate PkgPaths. + if len(uniquePkgPaths) != len(items) { + reportf("found duplicate PkgPaths while reading export data manifest: %v", items) } // Request packages all at once from the client, diff --git a/go/extractor/vendor/modules.txt b/go/extractor/vendor/modules.txt index fa3a89a509d..5687615f62c 100644 --- a/go/extractor/vendor/modules.txt +++ b/go/extractor/vendor/modules.txt @@ -4,7 +4,7 @@ golang.org/x/mod/internal/lazyregexp golang.org/x/mod/modfile golang.org/x/mod/module golang.org/x/mod/semver -# golang.org/x/tools v0.17.0 +# golang.org/x/tools v0.18.0 ## explicit; go 1.18 golang.org/x/tools/go/gcexportdata golang.org/x/tools/go/internal/packagesdriver From 104a8d980c3978464c728bc225b9f4a4f8f96b34 Mon Sep 17 00:00:00 2001 From: Max Schaefer Date: Tue, 13 Feb 2024 08:18:13 +0000 Subject: [PATCH 166/378] Automodel: Make description of some negative characteristics more explicit. --- .../src/AutomodelApplicationModeCharacteristics.qll | 6 +++--- .../automodel/src/AutomodelFrameworkModeCharacteristics.qll | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/java/ql/automodel/src/AutomodelApplicationModeCharacteristics.qll b/java/ql/automodel/src/AutomodelApplicationModeCharacteristics.qll index d203e6ca5d0..9e787bff069 100644 --- a/java/ql/automodel/src/AutomodelApplicationModeCharacteristics.qll +++ b/java/ql/automodel/src/AutomodelApplicationModeCharacteristics.qll @@ -465,7 +465,7 @@ predicate isPositiveExample( * TODO: this might filter too much, it's possible that methods with more than one parameter contain interesting sinks */ private class UnexploitableIsCharacteristic extends CharacteristicsImpl::NotASinkCharacteristic { - UnexploitableIsCharacteristic() { this = "unexploitable (is-style boolean method)" } + UnexploitableIsCharacteristic() { this = "argument of is-style boolean method" } override predicate appliesToEndpoint(Endpoint e) { e.getCallable().getName().matches("is%") and @@ -483,7 +483,7 @@ private class UnexploitableIsCharacteristic extends CharacteristicsImpl::NotASin * dangerous/interesting thing, so we want the latter to be modeled as the sink. */ private class UnexploitableExistsCharacteristic extends CharacteristicsImpl::NotASinkCharacteristic { - UnexploitableExistsCharacteristic() { this = "unexploitable (existence-checking boolean method)" } + UnexploitableExistsCharacteristic() { this = "argument of existence-checking boolean method" } override predicate appliesToEndpoint(Endpoint e) { exists(Callable callable | callable = e.getCallable() | @@ -499,7 +499,7 @@ private class UnexploitableExistsCharacteristic extends CharacteristicsImpl::Not */ private class ExceptionCharacteristic extends CharacteristicsImpl::NeitherSourceNorSinkCharacteristic { - ExceptionCharacteristic() { this = "exception" } + ExceptionCharacteristic() { this = "argument/result of exception-related method" } override predicate appliesToEndpoint(Endpoint e) { e.getCallable().getDeclaringType().getASupertype*() instanceof TypeThrowable and diff --git a/java/ql/automodel/src/AutomodelFrameworkModeCharacteristics.qll b/java/ql/automodel/src/AutomodelFrameworkModeCharacteristics.qll index 6981e0369b5..312563d3a68 100644 --- a/java/ql/automodel/src/AutomodelFrameworkModeCharacteristics.qll +++ b/java/ql/automodel/src/AutomodelFrameworkModeCharacteristics.qll @@ -404,7 +404,7 @@ predicate isPositiveExample( */ private class UnexploitableIsCharacteristic extends CharacteristicsImpl::NeitherSourceNorSinkCharacteristic { - UnexploitableIsCharacteristic() { this = "unexploitable (is-style boolean method)" } + UnexploitableIsCharacteristic() { this = "argument of is-style boolean method" } override predicate appliesToEndpoint(Endpoint e) { e.getCallable().getName().matches("is%") and @@ -430,7 +430,7 @@ private class UnexploitableIsCharacteristic extends CharacteristicsImpl::Neither */ private class UnexploitableExistsCharacteristic extends CharacteristicsImpl::NeitherSourceNorSinkCharacteristic { - UnexploitableExistsCharacteristic() { this = "unexploitable (existence-checking boolean method)" } + UnexploitableExistsCharacteristic() { this = "argument of existence-checking boolean method" } override predicate appliesToEndpoint(Endpoint e) { exists(Callable callable | @@ -454,7 +454,7 @@ private class UnexploitableExistsCharacteristic extends CharacteristicsImpl::Nei */ private class ExceptionCharacteristic extends CharacteristicsImpl::NeitherSourceNorSinkCharacteristic { - ExceptionCharacteristic() { this = "exception" } + ExceptionCharacteristic() { this = "argument/result of exception-related method" } override predicate appliesToEndpoint(Endpoint e) { e.getCallable().getDeclaringType().getASupertype*() instanceof TypeThrowable and From baa3c35d6f46a13081d67cb4560aa5367f74b5d6 Mon Sep 17 00:00:00 2001 From: Asger F Date: Tue, 13 Feb 2024 09:24:00 +0100 Subject: [PATCH 167/378] JS: Refactor aliasing relation --- .../javascript/endpoints/EndpointNaming.qll | 37 +++++++++++-------- .../EndpointNaming/EndpointNaming.ql | 16 +++++++- .../library-tests/EndpointNaming/pack2/lib.js | 2 +- .../EndpointNaming/pack2/main.js | 2 +- .../library-tests/EndpointNaming/pack3/lib.js | 2 +- .../EndpointNaming/pack3/main.js | 2 +- .../library-tests/EndpointNaming/pack8/foo.js | 4 +- 7 files changed, 42 insertions(+), 23 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll b/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll index 79c35e33996..d3d19996c48 100644 --- a/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll +++ b/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll @@ -168,7 +168,7 @@ predicate sinkHasPrimaryName(API::Node sink, string package, string name) { * * This means it is a valid name for it, but was not chosen as the primary name. */ -predicate sinkHasAlias(API::Node sink, string package, string name) { +private predicate sinkHasAlias(API::Node sink, string package, string name) { not sinkHasPrimaryName(sink, package, name) and ( exists(string baseName, string step | @@ -239,15 +239,6 @@ predicate classObjectHasPrimaryName(DataFlow::ClassNode cls, string package, str classObjectHasPrimaryName(cls, package, name, _) } -/** Holds if `(package, name)` is an alias for the class object of `cls`. */ -predicate classObjectHasAlias(DataFlow::ClassNode cls, string package, string name) { - not classObjectHasPrimaryName(cls, package, name) and - exists(int badness | - classObjectHasNameCandidate(cls, package, name, badness) and - badness < 100 - ) -} - /** Holds if an instance of `cls` can be exposed to client code. */ private predicate hasEscapingInstance(DataFlow::ClassNode cls) { cls.getAnInstanceReference().flowsTo(any(API::Node n).asSink()) @@ -362,14 +353,28 @@ predicate functionHasPrimaryName(DataFlow::FunctionNode function, string package } /** - * Holds if `(package, name)` is an alias for the given `function`. + * Holds if `(aliasPackage, aliasName)` is an alias for `(primaryPackage, primaryName)`, + * defined at `aliasDef`. */ -predicate functionHasAlias(DataFlow::FunctionNode function, string package, string name) { - not functionHasPrimaryName(function, package, name) and - exists(int badness | - functionHasNameCandidate(function, package, name, badness) and - badness < 100 +predicate aliasDefinition( + string primaryPackage, string primaryName, string aliasPackage, string aliasName, + API::Node aliasDef +) { + exists(DataFlow::SourceNode source | + classObjectHasPrimaryName(source, primaryPackage, primaryName) + or + functionHasPrimaryName(source, primaryPackage, primaryName) + | + aliasDef.getAValueReachingSink() = source and + sinkHasPrimaryName(aliasDef, aliasPackage, aliasName, _) and + not ( + primaryPackage = aliasPackage and + primaryName = aliasName + ) ) + or + sinkHasPrimaryName(aliasDef, primaryPackage, primaryName) and + sinkHasAlias(aliasDef, aliasPackage, aliasName) } /** diff --git a/javascript/ql/test/library-tests/EndpointNaming/EndpointNaming.ql b/javascript/ql/test/library-tests/EndpointNaming/EndpointNaming.ql index 102ebb721a8..d0c03af1c3a 100644 --- a/javascript/ql/test/library-tests/EndpointNaming/EndpointNaming.ql +++ b/javascript/ql/test/library-tests/EndpointNaming/EndpointNaming.ql @@ -12,6 +12,8 @@ module TestConfig implements TestSig { result = "class" or result = "method" + or + result = "alias" } predicate hasActualResult(Location location, string element, string tag, string value) { @@ -27,7 +29,6 @@ module TestConfig implements TestSig { EndpointNaming::classInstanceHasPrimaryName(cls, package, name) ) or - element = "" and exists(DataFlow::FunctionNode function | not function.getFunction() = any(ConstructorDeclaration decl | decl.isSynthetic()).getBody() and location = function.getFunction().getLocation() and @@ -35,6 +36,19 @@ module TestConfig implements TestSig { EndpointNaming::functionHasPrimaryName(function, package, name) ) ) + or + element = "" and + tag = "alias" and + exists( + API::Node aliasDef, string primaryPackage, string primaryName, string aliasPackage, + string aliasName + | + EndpointNaming::aliasDefinition(primaryPackage, primaryName, aliasPackage, aliasName, aliasDef) and + value = + EndpointNaming::renderName(aliasPackage, aliasName) + "==" + + EndpointNaming::renderName(primaryPackage, primaryName) and + location = aliasDef.asSink().asExpr().getLocation() + ) } } diff --git a/javascript/ql/test/library-tests/EndpointNaming/pack2/lib.js b/javascript/ql/test/library-tests/EndpointNaming/pack2/lib.js index ed996a3350e..559dd4877a3 100644 --- a/javascript/ql/test/library-tests/EndpointNaming/pack2/lib.js +++ b/javascript/ql/test/library-tests/EndpointNaming/pack2/lib.js @@ -2,5 +2,5 @@ class AmbiguousClass { instanceMethod(foo) {} // $ method=(pack2).lib.LibClass.prototype.instanceMethod } // $ class=(pack2).lib.LibClass instance=(pack2).lib.LibClass.prototype -export default AmbiguousClass; +export default AmbiguousClass; // $ alias=(pack2).lib.default==(pack2).lib.LibClass export { AmbiguousClass as LibClass } diff --git a/javascript/ql/test/library-tests/EndpointNaming/pack2/main.js b/javascript/ql/test/library-tests/EndpointNaming/pack2/main.js index e40015de73f..5906a1170dd 100644 --- a/javascript/ql/test/library-tests/EndpointNaming/pack2/main.js +++ b/javascript/ql/test/library-tests/EndpointNaming/pack2/main.js @@ -2,7 +2,7 @@ class AmbiguousClass { instanceMethod() {} // $ method=(pack2).MainClass.prototype.instanceMethod } // $ class=(pack2).MainClass instance=(pack2).MainClass.prototype -export default AmbiguousClass; +export default AmbiguousClass; // $ alias=(pack2).default==(pack2).MainClass export { AmbiguousClass as MainClass } import * as lib from "./lib"; diff --git a/javascript/ql/test/library-tests/EndpointNaming/pack3/lib.js b/javascript/ql/test/library-tests/EndpointNaming/pack3/lib.js index 9ef8c57437d..c99db7724bf 100644 --- a/javascript/ql/test/library-tests/EndpointNaming/pack3/lib.js +++ b/javascript/ql/test/library-tests/EndpointNaming/pack3/lib.js @@ -1 +1 @@ -export default function(x,y,z) {} // $ method=(pack3).libFunction +export default function(x,y,z) {} // $ method=(pack3).libFunction alias=(pack3).libFunction.default==(pack3).libFunction diff --git a/javascript/ql/test/library-tests/EndpointNaming/pack3/main.js b/javascript/ql/test/library-tests/EndpointNaming/pack3/main.js index 3f49675b492..98016d68737 100644 --- a/javascript/ql/test/library-tests/EndpointNaming/pack3/main.js +++ b/javascript/ql/test/library-tests/EndpointNaming/pack3/main.js @@ -1,6 +1,6 @@ function ambiguousFunction(x, y, z) {} // $ method=(pack3).namedFunction -export default ambiguousFunction; +export default ambiguousFunction; // $ alias=(pack3).default==(pack3).namedFunction export { ambiguousFunction as namedFunction }; import libFunction from "./lib"; diff --git a/javascript/ql/test/library-tests/EndpointNaming/pack8/foo.js b/javascript/ql/test/library-tests/EndpointNaming/pack8/foo.js index b141c3c81e7..de14ea27b89 100644 --- a/javascript/ql/test/library-tests/EndpointNaming/pack8/foo.js +++ b/javascript/ql/test/library-tests/EndpointNaming/pack8/foo.js @@ -1,5 +1,5 @@ class Foo {} // $ class=(pack8).Foo instance=(pack8).Foo.prototype module.exports = Foo; -module.exports.default = Foo; -module.exports.Foo = Foo; +module.exports.default = Foo; // $ alias=(pack8).Foo.default==(pack8).Foo +module.exports.Foo = Foo; // $ alias=(pack8).Foo.Foo==(pack8).Foo From 543e183d997d737fa98cba41d0970e55dbbebe20 Mon Sep 17 00:00:00 2001 From: Asger F Date: Tue, 13 Feb 2024 09:29:15 +0100 Subject: [PATCH 168/378] JS: Describe 1-step aliasing rule --- .../ql/lib/semmle/javascript/endpoints/EndpointNaming.qll | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll b/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll index d3d19996c48..257003f5708 100644 --- a/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll +++ b/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll @@ -355,6 +355,14 @@ predicate functionHasPrimaryName(DataFlow::FunctionNode function, string package /** * Holds if `(aliasPackage, aliasName)` is an alias for `(primaryPackage, primaryName)`, * defined at `aliasDef`. + * + * Only the last component of an access path is reported as an alias, the prefix always + * uses the primary name for that access path. The aliases for the prefix are reported + * as separate tuples. + * + * For example, we might report that `a.b.C` is an alias for `a.b.c`, and that `a.B` is an alias for `a.b`. + * By combining the two aliasing facts, we may conclude that `a.B.C` is an alias for `a.b.c`, but this fact is not + * reported separately. */ predicate aliasDefinition( string primaryPackage, string primaryName, string aliasPackage, string aliasName, From 6598a669a1e206d8f911de79b332f9104f8ba6a1 Mon Sep 17 00:00:00 2001 From: Asger F Date: Tue, 13 Feb 2024 09:30:35 +0100 Subject: [PATCH 169/378] JS: Use set literal --- .../library-tests/EndpointNaming/EndpointNaming.ql | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/javascript/ql/test/library-tests/EndpointNaming/EndpointNaming.ql b/javascript/ql/test/library-tests/EndpointNaming/EndpointNaming.ql index d0c03af1c3a..84efa963534 100644 --- a/javascript/ql/test/library-tests/EndpointNaming/EndpointNaming.ql +++ b/javascript/ql/test/library-tests/EndpointNaming/EndpointNaming.ql @@ -6,15 +6,7 @@ import testUtilities.InlineExpectationsTest import EndpointNaming::Debug module TestConfig implements TestSig { - string getARelevantTag() { - result = "instance" - or - result = "class" - or - result = "method" - or - result = "alias" - } + string getARelevantTag() { result = ["instance", "class", "method", "alias"] } predicate hasActualResult(Location location, string element, string tag, string value) { exists(string package, string name | From 11040d628b74b03d88775124079b17319e8533f9 Mon Sep 17 00:00:00 2001 From: Harry Maclean Date: Mon, 12 Feb 2024 13:31:52 +0000 Subject: [PATCH 170/378] Ruby: Add changenote --- ruby/ql/lib/change-notes/2024-02-12-raw-erb-output.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 ruby/ql/lib/change-notes/2024-02-12-raw-erb-output.md diff --git a/ruby/ql/lib/change-notes/2024-02-12-raw-erb-output.md b/ruby/ql/lib/change-notes/2024-02-12-raw-erb-output.md new file mode 100644 index 00000000000..f99d37bef62 --- /dev/null +++ b/ruby/ql/lib/change-notes/2024-02-12-raw-erb-output.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Raw output ERB tags of the form `<%== ... %>` are now recognised as cross-site scripting sinks. From 6cc5c09769e7b29c6c9c0f5a8eb2abde8774501f Mon Sep 17 00:00:00 2001 From: Harry Maclean Date: Mon, 12 Feb 2024 17:53:57 +0000 Subject: [PATCH 171/378] Ruby: Simplify ErbOutputDirective --- ruby/ql/lib/codeql/ruby/ast/Erb.qll | 6 ++++-- ruby/ql/lib/codeql/ruby/ast/internal/Erb.qll | 11 ++--------- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/ruby/ql/lib/codeql/ruby/ast/Erb.qll b/ruby/ql/lib/codeql/ruby/ast/Erb.qll index d3586ba7823..4dbcca73425 100644 --- a/ruby/ql/lib/codeql/ruby/ast/Erb.qll +++ b/ruby/ql/lib/codeql/ruby/ast/Erb.qll @@ -252,7 +252,7 @@ class ErbGraphqlDirective extends ErbDirective { class ErbOutputDirective extends ErbDirective { private Erb::OutputDirective g; - ErbOutputDirective() { this = TOutputDirective(g) or this = TRawOutputDirective(g) } + ErbOutputDirective() { this = TOutputDirective(g) } override ErbCode getToken() { toGenerated(result) = g.getChild() } @@ -262,7 +262,9 @@ class ErbOutputDirective extends ErbDirective { * <%== foo %> * ``` */ - predicate isRaw() { this = TRawOutputDirective(g) } + predicate isRaw() { + exists(Erb::Token t | t.getParentIndex() = 0 and t.getParent() = g and t.getValue() = "<%==") + } final override string toString() { this.isRaw() and diff --git a/ruby/ql/lib/codeql/ruby/ast/internal/Erb.qll b/ruby/ql/lib/codeql/ruby/ast/internal/Erb.qll index a26eb2482b6..7a69bf5b783 100644 --- a/ruby/ql/lib/codeql/ruby/ast/internal/Erb.qll +++ b/ruby/ql/lib/codeql/ruby/ast/internal/Erb.qll @@ -9,17 +9,12 @@ private module Cached { TCommentDirective(Erb::CommentDirective g) or TDirective(Erb::Directive g) or TGraphqlDirective(Erb::GraphqlDirective g) or - TOutputDirective(Erb::OutputDirective g) { getOpeningTag(g) != "<%==" } or - TRawOutputDirective(Erb::OutputDirective g) { getOpeningTag(g) = "<%==" } or + TOutputDirective(Erb::OutputDirective g) or TTemplate(Erb::Template g) or TToken(Erb::Token g) or TComment(Erb::Comment g) or TCode(Erb::Code g) - private string getOpeningTag(Erb::OutputDirective g) { - erb_tokeninfo(any(Erb::Token t | erb_ast_node_info(t, g, 0, _)), 0, result) - } - /** * Gets the underlying TreeSitter entity for a given erb AST node. */ @@ -29,7 +24,6 @@ private module Cached { n = TDirective(result) or n = TGraphqlDirective(result) or n = TOutputDirective(result) or - n = TRawOutputDirective(result) or n = TTemplate(result) or n = TToken(result) or n = TComment(result) or @@ -44,7 +38,6 @@ import Cached TAstNode fromGenerated(Erb::AstNode n) { n = toGenerated(result) } -class TDirectiveNode = - TCommentDirective or TDirective or TGraphqlDirective or TOutputDirective or TRawOutputDirective; +class TDirectiveNode = TCommentDirective or TDirective or TGraphqlDirective or TOutputDirective; class TTokenNode = TToken or TComment or TCode; From b509645e02c1417c2745b5a6a2e7260a0f32f51a Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Tue, 13 Feb 2024 10:18:31 +0100 Subject: [PATCH 172/378] C++: Bump language version in IR tests to C++20 --- cpp/ql/test/library-tests/ir/ir/ir.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/test/library-tests/ir/ir/ir.cpp b/cpp/ql/test/library-tests/ir/ir/ir.cpp index ce03076f0c3..74f7f931146 100644 --- a/cpp/ql/test/library-tests/ir/ir/ir.cpp +++ b/cpp/ql/test/library-tests/ir/ir/ir.cpp @@ -2120,4 +2120,4 @@ void call_as_child_of_ConditionDeclExpr() { if(HasOperatorBool b = HasOperatorBool()) {} } -// semmle-extractor-options: -std=c++17 --clang +// semmle-extractor-options: -std=c++20 --clang From 8aeb75675a57b43be73461d1a5405c9c937dbaff Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Tue, 13 Feb 2024 10:35:12 +0100 Subject: [PATCH 173/378] C++: Add constructor and destructor for `vector` to IR test --- .../library-tests/ir/ir/PrintAST.expected | 11524 ++++++++-------- .../library-tests/ir/ir/aliased_ir.expected | 10310 +++++++------- cpp/ql/test/library-tests/ir/ir/ir.cpp | 2 + .../ir/ir/operand_locations.expected | 9052 ++++++------ .../ir/ir/raw_consistency.expected | 2 +- .../test/library-tests/ir/ir/raw_ir.expected | 9282 ++++++------- 6 files changed, 20090 insertions(+), 20082 deletions(-) diff --git a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected index 41fb6a467b0..2ffe94e2b84 100644 --- a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected +++ b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected @@ -9386,10 +9386,10 @@ ir.cpp: # 1059| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const vector & -# 1059| [MoveAssignmentOperator] vector& vector::operator=(vector&&) +# 1059| [CopyConstructor] void vector::vector(vector const&) # 1059| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [RValueReferenceType] vector && +#-----| Type = [LValueReferenceType] const vector & # 1060| [CopyAssignmentOperator] vector::iterator& vector::iterator::operator=(vector::iterator const public&) # 1060| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) @@ -9414,1208 +9414,1178 @@ ir.cpp: # 1065| : # 1065| getParameter(0): [Parameter] right # 1065| Type = [NestedStruct] iterator -# 1068| [ConstMemberFunction] vector::iterator vector::begin() const +# 1068| [Constructor] void vector::vector(T) # 1068| : -# 1068| [ConstMemberFunction] vector::iterator vector::begin() const -# 1068| : -# 1069| [ConstMemberFunction] vector::iterator vector::end() const +# 1068| getParameter(0): [Parameter] (unnamed parameter 0) +# 1068| Type = [TemplateParameter] T +# 1069| [Destructor] void vector::~vector() # 1069| : -# 1069| [ConstMemberFunction] vector::iterator vector::end() const -# 1069| : -# 1073| [Operator,TemplateFunction,TopLevelFunction] bool operator==(iterator, iterator) -# 1073| : -# 1073| getParameter(0): [Parameter] left -# 1073| Type = [TemplateParameter] iterator -# 1073| getParameter(1): [Parameter] right -# 1073| Type = [TemplateParameter] iterator -# 1075| [Operator,TemplateFunction,TopLevelFunction] bool operator!=(iterator, iterator) +# 1070| [ConstMemberFunction] vector::iterator vector::begin() const +# 1070| : +# 1070| [ConstMemberFunction] vector::iterator vector::begin() const +# 1070| : +# 1071| [ConstMemberFunction] vector::iterator vector::end() const +# 1071| : +# 1071| [ConstMemberFunction] vector::iterator vector::end() const +# 1071| : +# 1075| [Operator,TemplateFunction,TopLevelFunction] bool operator==(iterator, iterator) # 1075| : # 1075| getParameter(0): [Parameter] left # 1075| Type = [TemplateParameter] iterator # 1075| getParameter(1): [Parameter] right # 1075| Type = [TemplateParameter] iterator -# 1077| [TopLevelFunction] void RangeBasedFor(vector const&) +# 1077| [Operator,TemplateFunction,TopLevelFunction] bool operator!=(iterator, iterator) # 1077| : -# 1077| getParameter(0): [Parameter] v -# 1077| Type = [LValueReferenceType] const vector & -# 1077| getEntryPoint(): [BlockStmt] { ... } -# 1078| getStmt(0): [RangeBasedForStmt] for(...:...) ... -# 1078| getChild(0): [DeclStmt] declaration -# 1078| getBeginEndDeclaration(): [DeclStmt] declaration -# 1078| getCondition(): [FunctionCall] call to operator!= -# 1078| Type = [BoolType] bool -# 1078| ValueCategory = prvalue -# 1078| getQualifier(): [VariableAccess] (__begin) -# 1078| Type = [NestedStruct] iterator -# 1078| ValueCategory = lvalue -# 1078| getArgument(0): [VariableAccess] (__end) -# 1078| Type = [NestedStruct] iterator -# 1078| ValueCategory = prvalue(load) +# 1077| getParameter(0): [Parameter] left +# 1077| Type = [TemplateParameter] iterator +# 1077| getParameter(1): [Parameter] right +# 1077| Type = [TemplateParameter] iterator +# 1079| [TopLevelFunction] void RangeBasedFor(vector const&) +# 1079| : +# 1079| getParameter(0): [Parameter] v +# 1079| Type = [LValueReferenceType] const vector & +# 1079| getEntryPoint(): [BlockStmt] { ... } +# 1080| getStmt(0): [RangeBasedForStmt] for(...:...) ... +# 1080| getChild(0): [DeclStmt] declaration +# 1080| getBeginEndDeclaration(): [DeclStmt] declaration +# 1080| getCondition(): [FunctionCall] call to operator!= +# 1080| Type = [BoolType] bool +# 1080| ValueCategory = prvalue +# 1080| getQualifier(): [VariableAccess] (__begin) +# 1080| Type = [NestedStruct] iterator +# 1080| ValueCategory = lvalue +# 1080| getArgument(0): [VariableAccess] (__end) +# 1080| Type = [NestedStruct] iterator +# 1080| ValueCategory = prvalue(load) #-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... #-----| Conversion = [GlvalueConversion] glvalue conversion #-----| Type = [SpecifiedType] const iterator #-----| ValueCategory = lvalue -# 1078| getUpdate(): [FunctionCall] call to operator++ -# 1078| Type = [LValueReferenceType] iterator & -# 1078| ValueCategory = prvalue -# 1078| getQualifier(): [VariableAccess] (__begin) -# 1078| Type = [NestedStruct] iterator -# 1078| ValueCategory = lvalue -# 1078| getChild(4): [DeclStmt] declaration -# 1078| getStmt(): [BlockStmt] { ... } -# 1079| getStmt(0): [IfStmt] if (...) ... -# 1079| getCondition(): [GTExpr] ... > ... -# 1079| Type = [BoolType] bool -# 1079| ValueCategory = prvalue -# 1079| getGreaterOperand(): [VariableAccess] e -# 1079| Type = [IntType] int -# 1079| ValueCategory = prvalue(load) -# 1079| getLesserOperand(): [Literal] 0 -# 1079| Type = [IntType] int -# 1079| Value = [Literal] 0 -# 1079| ValueCategory = prvalue -# 1079| getThen(): [BlockStmt] { ... } -# 1080| getStmt(0): [ContinueStmt] continue; -# 1078| getStmt(1): [LabelStmt] label ...: -# 1078| getUpdate().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1078| Type = [NestedStruct] iterator -# 1078| ValueCategory = lvalue -# 1084| getStmt(1): [RangeBasedForStmt] for(...:...) ... -# 1084| getChild(0): [DeclStmt] declaration -# 1084| getBeginEndDeclaration(): [DeclStmt] declaration -# 1084| getCondition(): [FunctionCall] call to operator!= -# 1084| Type = [BoolType] bool -# 1084| ValueCategory = prvalue -# 1084| getQualifier(): [VariableAccess] (__begin) -# 1084| Type = [NestedStruct] iterator -# 1084| ValueCategory = lvalue -# 1084| getArgument(0): [VariableAccess] (__end) -# 1084| Type = [NestedStruct] iterator -# 1084| ValueCategory = prvalue(load) +# 1080| getUpdate(): [FunctionCall] call to operator++ +# 1080| Type = [LValueReferenceType] iterator & +# 1080| ValueCategory = prvalue +# 1080| getQualifier(): [VariableAccess] (__begin) +# 1080| Type = [NestedStruct] iterator +# 1080| ValueCategory = lvalue +# 1080| getChild(4): [DeclStmt] declaration +# 1080| getStmt(): [BlockStmt] { ... } +# 1081| getStmt(0): [IfStmt] if (...) ... +# 1081| getCondition(): [GTExpr] ... > ... +# 1081| Type = [BoolType] bool +# 1081| ValueCategory = prvalue +# 1081| getGreaterOperand(): [VariableAccess] e +# 1081| Type = [IntType] int +# 1081| ValueCategory = prvalue(load) +# 1081| getLesserOperand(): [Literal] 0 +# 1081| Type = [IntType] int +# 1081| Value = [Literal] 0 +# 1081| ValueCategory = prvalue +# 1081| getThen(): [BlockStmt] { ... } +# 1082| getStmt(0): [ContinueStmt] continue; +# 1080| getStmt(1): [LabelStmt] label ...: +# 1080| getUpdate().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1080| Type = [NestedStruct] iterator +# 1080| ValueCategory = lvalue +# 1086| getStmt(1): [RangeBasedForStmt] for(...:...) ... +# 1086| getChild(0): [DeclStmt] declaration +# 1086| getBeginEndDeclaration(): [DeclStmt] declaration +# 1086| getCondition(): [FunctionCall] call to operator!= +# 1086| Type = [BoolType] bool +# 1086| ValueCategory = prvalue +# 1086| getQualifier(): [VariableAccess] (__begin) +# 1086| Type = [NestedStruct] iterator +# 1086| ValueCategory = lvalue +# 1086| getArgument(0): [VariableAccess] (__end) +# 1086| Type = [NestedStruct] iterator +# 1086| ValueCategory = prvalue(load) #-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... #-----| Conversion = [GlvalueConversion] glvalue conversion #-----| Type = [SpecifiedType] const iterator #-----| ValueCategory = lvalue -# 1084| getUpdate(): [FunctionCall] call to operator++ -# 1084| Type = [LValueReferenceType] iterator & -# 1084| ValueCategory = prvalue -# 1084| getQualifier(): [VariableAccess] (__begin) -# 1084| Type = [NestedStruct] iterator -# 1084| ValueCategory = lvalue -# 1084| getChild(4): [DeclStmt] declaration -# 1084| getStmt(): [BlockStmt] { ... } -# 1085| getStmt(0): [IfStmt] if (...) ... -# 1085| getCondition(): [LTExpr] ... < ... -# 1085| Type = [BoolType] bool -# 1085| ValueCategory = prvalue -# 1085| getLesserOperand(): [VariableAccess] e -# 1085| Type = [LValueReferenceType] const int & -# 1085| ValueCategory = prvalue(load) -# 1085| getGreaterOperand(): [Literal] 5 -# 1085| Type = [IntType] int -# 1085| Value = [Literal] 5 -# 1085| ValueCategory = prvalue -# 1085| getLesserOperand().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1085| Type = [IntType] int -# 1085| ValueCategory = prvalue(load) -# 1085| getThen(): [BlockStmt] { ... } -# 1086| getStmt(0): [BreakStmt] break; -# 1084| getUpdate().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1084| Type = [NestedStruct] iterator -# 1084| ValueCategory = lvalue -# 1088| getStmt(2): [LabelStmt] label ...: -# 1089| getStmt(3): [ReturnStmt] return ... -# 1108| [TopLevelFunction] int AsmStmt(int) -# 1108| : -# 1108| getParameter(0): [Parameter] x -# 1108| Type = [IntType] int -# 1108| getEntryPoint(): [BlockStmt] { ... } -# 1109| getStmt(0): [AsmStmt] asm statement -# 1110| getStmt(1): [ReturnStmt] return ... -# 1110| getExpr(): [VariableAccess] x -# 1110| Type = [IntType] int -# 1110| ValueCategory = prvalue(load) -# 1113| [TopLevelFunction] void AsmStmtWithOutputs(unsigned int&, unsigned int, unsigned int&, unsigned int) -# 1113| : -# 1113| getParameter(0): [Parameter] a -# 1113| Type = [LValueReferenceType] unsigned int & -# 1113| getParameter(1): [Parameter] b -# 1113| Type = [IntType] unsigned int -# 1113| getParameter(2): [Parameter] c -# 1113| Type = [LValueReferenceType] unsigned int & -# 1113| getParameter(3): [Parameter] d -# 1113| Type = [IntType] unsigned int -# 1114| getEntryPoint(): [BlockStmt] { ... } -# 1115| getStmt(0): [AsmStmt] asm statement -# 1118| getChild(0): [VariableAccess] a -# 1118| Type = [LValueReferenceType] unsigned int & -# 1118| ValueCategory = prvalue(load) -# 1118| getChild(1): [VariableAccess] b -# 1118| Type = [IntType] unsigned int -# 1118| ValueCategory = lvalue -# 1118| getChild(2): [VariableAccess] c -# 1118| Type = [LValueReferenceType] unsigned int & -# 1118| ValueCategory = prvalue(load) -# 1118| getChild(3): [VariableAccess] d -# 1118| Type = [IntType] unsigned int -# 1118| ValueCategory = prvalue(load) -# 1118| getChild(0).getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1118| Type = [IntType] unsigned int -# 1118| ValueCategory = lvalue -# 1118| getChild(2).getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1118| Type = [IntType] unsigned int -# 1118| ValueCategory = prvalue(load) -# 1120| getStmt(1): [ReturnStmt] return ... -# 1122| [TopLevelFunction] void ExternDeclarations() -# 1122| : -# 1123| getEntryPoint(): [BlockStmt] { ... } -# 1124| getStmt(0): [DeclStmt] declaration -# 1124| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of g -# 1124| Type = [IntType] int -# 1125| getStmt(1): [DeclStmt] declaration -# 1125| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 1125| Type = [IntType] int -# 1126| getStmt(2): [DeclStmt] declaration -# 1126| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 1086| getUpdate(): [FunctionCall] call to operator++ +# 1086| Type = [LValueReferenceType] iterator & +# 1086| ValueCategory = prvalue +# 1086| getQualifier(): [VariableAccess] (__begin) +# 1086| Type = [NestedStruct] iterator +# 1086| ValueCategory = lvalue +# 1086| getChild(4): [DeclStmt] declaration +# 1086| getStmt(): [BlockStmt] { ... } +# 1087| getStmt(0): [IfStmt] if (...) ... +# 1087| getCondition(): [LTExpr] ... < ... +# 1087| Type = [BoolType] bool +# 1087| ValueCategory = prvalue +# 1087| getLesserOperand(): [VariableAccess] e +# 1087| Type = [LValueReferenceType] const int & +# 1087| ValueCategory = prvalue(load) +# 1087| getGreaterOperand(): [Literal] 5 +# 1087| Type = [IntType] int +# 1087| Value = [Literal] 5 +# 1087| ValueCategory = prvalue +# 1087| getLesserOperand().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1087| Type = [IntType] int +# 1087| ValueCategory = prvalue(load) +# 1087| getThen(): [BlockStmt] { ... } +# 1088| getStmt(0): [BreakStmt] break; +# 1086| getUpdate().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1086| Type = [NestedStruct] iterator +# 1086| ValueCategory = lvalue +# 1090| getStmt(2): [LabelStmt] label ...: +# 1091| getStmt(3): [ReturnStmt] return ... +# 1110| [TopLevelFunction] int AsmStmt(int) +# 1110| : +# 1110| getParameter(0): [Parameter] x +# 1110| Type = [IntType] int +# 1110| getEntryPoint(): [BlockStmt] { ... } +# 1111| getStmt(0): [AsmStmt] asm statement +# 1112| getStmt(1): [ReturnStmt] return ... +# 1112| getExpr(): [VariableAccess] x +# 1112| Type = [IntType] int +# 1112| ValueCategory = prvalue(load) +# 1115| [TopLevelFunction] void AsmStmtWithOutputs(unsigned int&, unsigned int, unsigned int&, unsigned int) +# 1115| : +# 1115| getParameter(0): [Parameter] a +# 1115| Type = [LValueReferenceType] unsigned int & +# 1115| getParameter(1): [Parameter] b +# 1115| Type = [IntType] unsigned int +# 1115| getParameter(2): [Parameter] c +# 1115| Type = [LValueReferenceType] unsigned int & +# 1115| getParameter(3): [Parameter] d +# 1115| Type = [IntType] unsigned int +# 1116| getEntryPoint(): [BlockStmt] { ... } +# 1117| getStmt(0): [AsmStmt] asm statement +# 1120| getChild(0): [VariableAccess] a +# 1120| Type = [LValueReferenceType] unsigned int & +# 1120| ValueCategory = prvalue(load) +# 1120| getChild(1): [VariableAccess] b +# 1120| Type = [IntType] unsigned int +# 1120| ValueCategory = lvalue +# 1120| getChild(2): [VariableAccess] c +# 1120| Type = [LValueReferenceType] unsigned int & +# 1120| ValueCategory = prvalue(load) +# 1120| getChild(3): [VariableAccess] d +# 1120| Type = [IntType] unsigned int +# 1120| ValueCategory = prvalue(load) +# 1120| getChild(0).getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1120| Type = [IntType] unsigned int +# 1120| ValueCategory = lvalue +# 1120| getChild(2).getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1120| Type = [IntType] unsigned int +# 1120| ValueCategory = prvalue(load) +# 1122| getStmt(1): [ReturnStmt] return ... +# 1124| [TopLevelFunction] void ExternDeclarations() +# 1124| : +# 1125| getEntryPoint(): [BlockStmt] { ... } +# 1126| getStmt(0): [DeclStmt] declaration +# 1126| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of g # 1126| Type = [IntType] int -# 1126| getDeclarationEntry(1): [FunctionDeclarationEntry] declaration of f -# 1126| Type = [IntType] int -# 1127| getStmt(3): [DeclStmt] declaration -# 1127| getDeclarationEntry(0): [FunctionDeclarationEntry] declaration of z +# 1127| getStmt(1): [DeclStmt] declaration +# 1127| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x # 1127| Type = [IntType] int -# 1127| getDeclarationEntry(1): [FunctionDeclarationEntry] declaration of w -# 1127| Type = [IntType] int -# 1127| getDeclarationEntry(2): [VariableDeclarationEntry] definition of h -# 1127| Type = [IntType] int -# 1128| getStmt(4): [DeclStmt] declaration -# 1128| getDeclarationEntry(0): [TypeDeclarationEntry] declaration of d -# 1128| Type = [CTypedefType,LocalTypedefType] d -# 1129| getStmt(5): [ReturnStmt] return ... -# 1126| [TopLevelFunction] int f(float) -# 1126| : -# 1126| getParameter(0): [Parameter] (unnamed parameter 0) -# 1126| Type = [FloatType] float -# 1127| [TopLevelFunction] int z(float) -# 1127| : -# 1127| getParameter(0): [Parameter] (unnamed parameter 0) -# 1127| Type = [FloatType] float -# 1127| [TopLevelFunction] int w(float) -# 1127| : -# 1127| getParameter(0): [Parameter] (unnamed parameter 0) -# 1127| Type = [FloatType] float -# 1137| [TopLevelFunction] void ExternDeclarationsInMacro() -# 1137| : -# 1138| getEntryPoint(): [BlockStmt] { ... } -# 1139| getStmt(0): [DeclStmt] declaration -# 1139| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of g -# 1139| Type = [IntType] int -# 1139| getStmt(1): [ForStmt] for(...;...;...) ... -# 1139| getInitialization(): [DeclStmt] declaration -# 1139| getDeclarationEntry(0): [VariableDeclarationEntry] definition of i -# 1139| Type = [IntType] int -# 1139| getVariable().getInitializer(): [Initializer] initializer for i -# 1139| getExpr(): [Literal] 0 -# 1139| Type = [IntType] int -# 1139| Value = [Literal] 0 -# 1139| ValueCategory = prvalue -# 1139| getCondition(): [LTExpr] ... < ... -# 1139| Type = [BoolType] bool -# 1139| ValueCategory = prvalue -# 1139| getLesserOperand(): [VariableAccess] i -# 1139| Type = [IntType] int -# 1139| ValueCategory = prvalue(load) -# 1139| getGreaterOperand(): [Literal] 10 -# 1139| Type = [IntType] int -# 1139| Value = [Literal] 10 -# 1139| ValueCategory = prvalue -# 1139| getUpdate(): [PrefixIncrExpr] ++ ... -# 1139| Type = [IntType] int -# 1139| ValueCategory = lvalue -# 1139| getOperand(): [VariableAccess] i -# 1139| Type = [IntType] int -# 1139| ValueCategory = lvalue -# 1139| getStmt(): [BlockStmt] { ... } -# 1139| getStmt(0): [DeclStmt] declaration -# 1139| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of g -# 1139| Type = [IntType] int -# 1139| getStmt(2): [EmptyStmt] ; -# 1140| getStmt(3): [ReturnStmt] return ... -# 1142| [TopLevelFunction] void TryCatchNoCatchAny(bool) -# 1142| : -# 1142| getParameter(0): [Parameter] b -# 1142| Type = [BoolType] bool -# 1142| getEntryPoint(): [BlockStmt] { ... } -# 1143| getStmt(0): [TryStmt] try { ... } -# 1143| getStmt(): [BlockStmt] { ... } -# 1144| getStmt(0): [DeclStmt] declaration -# 1144| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 1144| Type = [IntType] int -# 1144| getVariable().getInitializer(): [Initializer] initializer for x -# 1144| getExpr(): [Literal] 5 -# 1144| Type = [IntType] int -# 1144| Value = [Literal] 5 -# 1144| ValueCategory = prvalue -# 1145| getStmt(1): [IfStmt] if (...) ... -# 1145| getCondition(): [VariableAccess] b -# 1145| Type = [BoolType] bool -# 1145| ValueCategory = prvalue(load) -# 1145| getThen(): [BlockStmt] { ... } -# 1146| getStmt(0): [ExprStmt] ExprStmt -# 1146| getExpr(): [ThrowExpr] throw ... -# 1146| Type = [PointerType] const char * +# 1128| getStmt(2): [DeclStmt] declaration +# 1128| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 1128| Type = [IntType] int +# 1128| getDeclarationEntry(1): [FunctionDeclarationEntry] declaration of f +# 1128| Type = [IntType] int +# 1129| getStmt(3): [DeclStmt] declaration +# 1129| getDeclarationEntry(0): [FunctionDeclarationEntry] declaration of z +# 1129| Type = [IntType] int +# 1129| getDeclarationEntry(1): [FunctionDeclarationEntry] declaration of w +# 1129| Type = [IntType] int +# 1129| getDeclarationEntry(2): [VariableDeclarationEntry] definition of h +# 1129| Type = [IntType] int +# 1130| getStmt(4): [DeclStmt] declaration +# 1130| getDeclarationEntry(0): [TypeDeclarationEntry] declaration of d +# 1130| Type = [CTypedefType,LocalTypedefType] d +# 1131| getStmt(5): [ReturnStmt] return ... +# 1128| [TopLevelFunction] int f(float) +# 1128| : +# 1128| getParameter(0): [Parameter] (unnamed parameter 0) +# 1128| Type = [FloatType] float +# 1129| [TopLevelFunction] int z(float) +# 1129| : +# 1129| getParameter(0): [Parameter] (unnamed parameter 0) +# 1129| Type = [FloatType] float +# 1129| [TopLevelFunction] int w(float) +# 1129| : +# 1129| getParameter(0): [Parameter] (unnamed parameter 0) +# 1129| Type = [FloatType] float +# 1139| [TopLevelFunction] void ExternDeclarationsInMacro() +# 1139| : +# 1140| getEntryPoint(): [BlockStmt] { ... } +# 1141| getStmt(0): [DeclStmt] declaration +# 1141| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of g +# 1141| Type = [IntType] int +# 1141| getStmt(1): [ForStmt] for(...;...;...) ... +# 1141| getInitialization(): [DeclStmt] declaration +# 1141| getDeclarationEntry(0): [VariableDeclarationEntry] definition of i +# 1141| Type = [IntType] int +# 1141| getVariable().getInitializer(): [Initializer] initializer for i +# 1141| getExpr(): [Literal] 0 +# 1141| Type = [IntType] int +# 1141| Value = [Literal] 0 +# 1141| ValueCategory = prvalue +# 1141| getCondition(): [LTExpr] ... < ... +# 1141| Type = [BoolType] bool +# 1141| ValueCategory = prvalue +# 1141| getLesserOperand(): [VariableAccess] i +# 1141| Type = [IntType] int +# 1141| ValueCategory = prvalue(load) +# 1141| getGreaterOperand(): [Literal] 10 +# 1141| Type = [IntType] int +# 1141| Value = [Literal] 10 +# 1141| ValueCategory = prvalue +# 1141| getUpdate(): [PrefixIncrExpr] ++ ... +# 1141| Type = [IntType] int +# 1141| ValueCategory = lvalue +# 1141| getOperand(): [VariableAccess] i +# 1141| Type = [IntType] int +# 1141| ValueCategory = lvalue +# 1141| getStmt(): [BlockStmt] { ... } +# 1141| getStmt(0): [DeclStmt] declaration +# 1141| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of g +# 1141| Type = [IntType] int +# 1141| getStmt(2): [EmptyStmt] ; +# 1142| getStmt(3): [ReturnStmt] return ... +# 1144| [TopLevelFunction] void TryCatchNoCatchAny(bool) +# 1144| : +# 1144| getParameter(0): [Parameter] b +# 1144| Type = [BoolType] bool +# 1144| getEntryPoint(): [BlockStmt] { ... } +# 1145| getStmt(0): [TryStmt] try { ... } +# 1145| getStmt(): [BlockStmt] { ... } +# 1146| getStmt(0): [DeclStmt] declaration +# 1146| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 1146| Type = [IntType] int +# 1146| getVariable().getInitializer(): [Initializer] initializer for x +# 1146| getExpr(): [Literal] 5 +# 1146| Type = [IntType] int +# 1146| Value = [Literal] 5 # 1146| ValueCategory = prvalue -# 1146| getExpr(): string literal -# 1146| Type = [ArrayType] const char[15] -# 1146| Value = [StringLiteral] "string literal" -# 1146| ValueCategory = lvalue -# 1146| getExpr().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 1146| Type = [PointerType] const char * -# 1146| ValueCategory = prvalue -# 1148| getElse(): [IfStmt] if (...) ... -# 1148| getCondition(): [LTExpr] ... < ... -# 1148| Type = [BoolType] bool -# 1148| ValueCategory = prvalue -# 1148| getLesserOperand(): [VariableAccess] x -# 1148| Type = [IntType] int -# 1148| ValueCategory = prvalue(load) -# 1148| getGreaterOperand(): [Literal] 2 -# 1148| Type = [IntType] int -# 1148| Value = [Literal] 2 +# 1147| getStmt(1): [IfStmt] if (...) ... +# 1147| getCondition(): [VariableAccess] b +# 1147| Type = [BoolType] bool +# 1147| ValueCategory = prvalue(load) +# 1147| getThen(): [BlockStmt] { ... } +# 1148| getStmt(0): [ExprStmt] ExprStmt +# 1148| getExpr(): [ThrowExpr] throw ... +# 1148| Type = [PointerType] const char * # 1148| ValueCategory = prvalue -# 1148| getThen(): [BlockStmt] { ... } -# 1149| getStmt(0): [ExprStmt] ExprStmt -# 1149| getExpr(): [AssignExpr] ... = ... -# 1149| Type = [IntType] int -# 1149| ValueCategory = lvalue -# 1149| getLValue(): [VariableAccess] x -# 1149| Type = [IntType] int -# 1149| ValueCategory = lvalue -# 1149| getRValue(): [ConditionalExpr] ... ? ... : ... -# 1149| Type = [IntType] int -# 1149| ValueCategory = prvalue -# 1149| getCondition(): [VariableAccess] b -# 1149| Type = [BoolType] bool -# 1149| ValueCategory = prvalue(load) -# 1149| getThen(): [Literal] 7 -# 1149| Type = [IntType] int -# 1149| Value = [Literal] 7 -# 1149| ValueCategory = prvalue -# 1149| getElse(): [ThrowExpr] throw ... -# 1149| Type = [Struct] String -# 1149| ValueCategory = prvalue -# 1149| getExpr(): [ConstructorCall] call to String -# 1149| Type = [VoidType] void -# 1149| ValueCategory = prvalue -# 1149| getArgument(0): String object -# 1149| Type = [ArrayType] const char[14] -# 1149| Value = [StringLiteral] "String object" -# 1149| ValueCategory = lvalue -# 1149| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 1149| Type = [PointerType] const char * -# 1149| ValueCategory = prvalue -# 1151| getStmt(2): [ExprStmt] ExprStmt -# 1151| getExpr(): [AssignExpr] ... = ... -# 1151| Type = [IntType] int -# 1151| ValueCategory = lvalue -# 1151| getLValue(): [VariableAccess] x -# 1151| Type = [IntType] int -# 1151| ValueCategory = lvalue -# 1151| getRValue(): [Literal] 7 -# 1151| Type = [IntType] int -# 1151| Value = [Literal] 7 -# 1151| ValueCategory = prvalue -# 1153| getChild(1): [Handler] -# 1153| getBlock(): [CatchBlock] { ... } -# 1154| getStmt(0): [ExprStmt] ExprStmt -# 1154| getExpr(): [ThrowExpr] throw ... -# 1154| Type = [Struct] String -# 1154| ValueCategory = prvalue -# 1154| getExpr(): [ConstructorCall] call to String -# 1154| Type = [VoidType] void -# 1154| ValueCategory = prvalue -# 1154| getArgument(0): [VariableAccess] s -# 1154| Type = [PointerType] const char * -# 1154| ValueCategory = prvalue(load) -# 1156| getChild(2): [Handler] -# 1156| getBlock(): [CatchBlock] { ... } -# 1158| getStmt(1): [ReturnStmt] return ... -# 1162| [TopLevelFunction] void VectorTypes(int) -# 1162| : -# 1162| getParameter(0): [Parameter] i -# 1162| Type = [IntType] int -# 1162| getEntryPoint(): [BlockStmt] { ... } -# 1163| getStmt(0): [DeclStmt] declaration -# 1163| getDeclarationEntry(0): [VariableDeclarationEntry] definition of vi4 -# 1163| Type = [SpecifiedType] __attribute((vector_size(16UL))) int -# 1163| getVariable().getInitializer(): [Initializer] initializer for vi4 -# 1163| getExpr(): [VectorAggregateLiteral] {...} -# 1163| Type = [GNUVectorType] __attribute((vector_size(16UL))) int -# 1163| ValueCategory = prvalue -# 1163| getAnElementExpr(0): [Literal] 0 -# 1163| Type = [IntType] int -# 1163| Value = [Literal] 0 -# 1163| ValueCategory = prvalue -# 1163| getAnElementExpr(1): [Literal] 1 -# 1163| Type = [IntType] int -# 1163| Value = [Literal] 1 -# 1163| ValueCategory = prvalue -# 1163| getAnElementExpr(2): [Literal] 2 -# 1163| Type = [IntType] int -# 1163| Value = [Literal] 2 -# 1163| ValueCategory = prvalue -# 1163| getAnElementExpr(3): [Literal] 3 -# 1163| Type = [IntType] int -# 1163| Value = [Literal] 3 -# 1163| ValueCategory = prvalue -# 1164| getStmt(1): [DeclStmt] declaration -# 1164| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 1164| Type = [IntType] int -# 1164| getVariable().getInitializer(): [Initializer] initializer for x -# 1164| getExpr(): [ArrayExpr] access to array -# 1164| Type = [IntType] int -# 1164| ValueCategory = prvalue(load) -# 1164| getArrayBase(): [VariableAccess] vi4 -# 1164| Type = [SpecifiedType] __attribute((vector_size(16UL))) int -# 1164| ValueCategory = lvalue -# 1164| getArrayOffset(): [VariableAccess] i -# 1164| Type = [IntType] int -# 1164| ValueCategory = prvalue(load) -# 1165| getStmt(2): [ExprStmt] ExprStmt -# 1165| getExpr(): [AssignExpr] ... = ... -# 1165| Type = [IntType] int -# 1165| ValueCategory = lvalue -# 1165| getLValue(): [ArrayExpr] access to array -# 1165| Type = [IntType] int -# 1165| ValueCategory = lvalue -# 1165| getArrayBase(): [VariableAccess] vi4 -# 1165| Type = [SpecifiedType] __attribute((vector_size(16UL))) int -# 1165| ValueCategory = lvalue -# 1165| getArrayOffset(): [VariableAccess] i -# 1165| Type = [IntType] int -# 1165| ValueCategory = prvalue(load) -# 1165| getRValue(): [VariableAccess] x -# 1165| Type = [IntType] int -# 1165| ValueCategory = prvalue(load) -# 1166| getStmt(3): [DeclStmt] declaration -# 1166| getDeclarationEntry(0): [VariableDeclarationEntry] definition of vi4_shuffle -# 1166| Type = [SpecifiedType] __attribute((vector_size(16UL))) int -# 1166| getVariable().getInitializer(): [Initializer] initializer for vi4_shuffle -# 1166| getExpr(): [BuiltInOperationBuiltInShuffleVector] __builtin_shufflevector -# 1166| Type = [GNUVectorType] __attribute((vector_size(16))) int -# 1166| ValueCategory = prvalue -# 1166| getChild(0): [VariableAccess] vi4 +# 1148| getExpr(): string literal +# 1148| Type = [ArrayType] const char[15] +# 1148| Value = [StringLiteral] "string literal" +# 1148| ValueCategory = lvalue +# 1148| getExpr().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 1148| Type = [PointerType] const char * +# 1148| ValueCategory = prvalue +# 1150| getElse(): [IfStmt] if (...) ... +# 1150| getCondition(): [LTExpr] ... < ... +# 1150| Type = [BoolType] bool +# 1150| ValueCategory = prvalue +# 1150| getLesserOperand(): [VariableAccess] x +# 1150| Type = [IntType] int +# 1150| ValueCategory = prvalue(load) +# 1150| getGreaterOperand(): [Literal] 2 +# 1150| Type = [IntType] int +# 1150| Value = [Literal] 2 +# 1150| ValueCategory = prvalue +# 1150| getThen(): [BlockStmt] { ... } +# 1151| getStmt(0): [ExprStmt] ExprStmt +# 1151| getExpr(): [AssignExpr] ... = ... +# 1151| Type = [IntType] int +# 1151| ValueCategory = lvalue +# 1151| getLValue(): [VariableAccess] x +# 1151| Type = [IntType] int +# 1151| ValueCategory = lvalue +# 1151| getRValue(): [ConditionalExpr] ... ? ... : ... +# 1151| Type = [IntType] int +# 1151| ValueCategory = prvalue +# 1151| getCondition(): [VariableAccess] b +# 1151| Type = [BoolType] bool +# 1151| ValueCategory = prvalue(load) +# 1151| getThen(): [Literal] 7 +# 1151| Type = [IntType] int +# 1151| Value = [Literal] 7 +# 1151| ValueCategory = prvalue +# 1151| getElse(): [ThrowExpr] throw ... +# 1151| Type = [Struct] String +# 1151| ValueCategory = prvalue +# 1151| getExpr(): [ConstructorCall] call to String +# 1151| Type = [VoidType] void +# 1151| ValueCategory = prvalue +# 1151| getArgument(0): String object +# 1151| Type = [ArrayType] const char[14] +# 1151| Value = [StringLiteral] "String object" +# 1151| ValueCategory = lvalue +# 1151| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 1151| Type = [PointerType] const char * +# 1151| ValueCategory = prvalue +# 1153| getStmt(2): [ExprStmt] ExprStmt +# 1153| getExpr(): [AssignExpr] ... = ... +# 1153| Type = [IntType] int +# 1153| ValueCategory = lvalue +# 1153| getLValue(): [VariableAccess] x +# 1153| Type = [IntType] int +# 1153| ValueCategory = lvalue +# 1153| getRValue(): [Literal] 7 +# 1153| Type = [IntType] int +# 1153| Value = [Literal] 7 +# 1153| ValueCategory = prvalue +# 1155| getChild(1): [Handler] +# 1155| getBlock(): [CatchBlock] { ... } +# 1156| getStmt(0): [ExprStmt] ExprStmt +# 1156| getExpr(): [ThrowExpr] throw ... +# 1156| Type = [Struct] String +# 1156| ValueCategory = prvalue +# 1156| getExpr(): [ConstructorCall] call to String +# 1156| Type = [VoidType] void +# 1156| ValueCategory = prvalue +# 1156| getArgument(0): [VariableAccess] s +# 1156| Type = [PointerType] const char * +# 1156| ValueCategory = prvalue(load) +# 1158| getChild(2): [Handler] +# 1158| getBlock(): [CatchBlock] { ... } +# 1160| getStmt(1): [ReturnStmt] return ... +# 1164| [TopLevelFunction] void VectorTypes(int) +# 1164| : +# 1164| getParameter(0): [Parameter] i +# 1164| Type = [IntType] int +# 1164| getEntryPoint(): [BlockStmt] { ... } +# 1165| getStmt(0): [DeclStmt] declaration +# 1165| getDeclarationEntry(0): [VariableDeclarationEntry] definition of vi4 +# 1165| Type = [SpecifiedType] __attribute((vector_size(16UL))) int +# 1165| getVariable().getInitializer(): [Initializer] initializer for vi4 +# 1165| getExpr(): [VectorAggregateLiteral] {...} +# 1165| Type = [GNUVectorType] __attribute((vector_size(16UL))) int +# 1165| ValueCategory = prvalue +# 1165| getAnElementExpr(0): [Literal] 0 +# 1165| Type = [IntType] int +# 1165| Value = [Literal] 0 +# 1165| ValueCategory = prvalue +# 1165| getAnElementExpr(1): [Literal] 1 +# 1165| Type = [IntType] int +# 1165| Value = [Literal] 1 +# 1165| ValueCategory = prvalue +# 1165| getAnElementExpr(2): [Literal] 2 +# 1165| Type = [IntType] int +# 1165| Value = [Literal] 2 +# 1165| ValueCategory = prvalue +# 1165| getAnElementExpr(3): [Literal] 3 +# 1165| Type = [IntType] int +# 1165| Value = [Literal] 3 +# 1165| ValueCategory = prvalue +# 1166| getStmt(1): [DeclStmt] declaration +# 1166| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 1166| Type = [IntType] int +# 1166| getVariable().getInitializer(): [Initializer] initializer for x +# 1166| getExpr(): [ArrayExpr] access to array +# 1166| Type = [IntType] int +# 1166| ValueCategory = prvalue(load) +# 1166| getArrayBase(): [VariableAccess] vi4 # 1166| Type = [SpecifiedType] __attribute((vector_size(16UL))) int +# 1166| ValueCategory = lvalue +# 1166| getArrayOffset(): [VariableAccess] i +# 1166| Type = [IntType] int # 1166| ValueCategory = prvalue(load) -# 1166| getChild(1): [VariableAccess] vi4 -# 1166| Type = [SpecifiedType] __attribute((vector_size(16UL))) int -# 1166| ValueCategory = prvalue(load) -# 1166| getChild(2): [AddExpr] ... + ... -# 1166| Type = [IntType] int -# 1166| Value = [AddExpr] 3 -# 1166| ValueCategory = prvalue -# 1166| getLeftOperand(): [Literal] 3 -# 1166| Type = [IntType] int -# 1166| Value = [Literal] 3 -# 1166| ValueCategory = prvalue -# 1166| getRightOperand(): [Literal] 0 -# 1166| Type = [IntType] int -# 1166| Value = [Literal] 0 -# 1166| ValueCategory = prvalue -# 1166| getChild(3): [Literal] 2 -# 1166| Type = [IntType] int -# 1166| Value = [Literal] 2 -# 1166| ValueCategory = prvalue -# 1166| getChild(4): [Literal] 1 -# 1166| Type = [IntType] int -# 1166| Value = [Literal] 1 -# 1166| ValueCategory = prvalue -# 1166| getChild(5): [Literal] 0 -# 1166| Type = [IntType] int -# 1166| Value = [Literal] 0 -# 1166| ValueCategory = prvalue -# 1167| getStmt(4): [ExprStmt] ExprStmt +# 1167| getStmt(2): [ExprStmt] ExprStmt # 1167| getExpr(): [AssignExpr] ... = ... -# 1167| Type = [SpecifiedType] __attribute((vector_size(16UL))) int +# 1167| Type = [IntType] int # 1167| ValueCategory = lvalue -# 1167| getLValue(): [VariableAccess] vi4 -# 1167| Type = [SpecifiedType] __attribute((vector_size(16UL))) int +# 1167| getLValue(): [ArrayExpr] access to array +# 1167| Type = [IntType] int # 1167| ValueCategory = lvalue -# 1167| getRValue(): [AddExpr] ... + ... -# 1167| Type = [GNUVectorType] __attribute((vector_size(16UL))) int -# 1167| ValueCategory = prvalue -# 1167| getLeftOperand(): [VariableAccess] vi4 +# 1167| getArrayBase(): [VariableAccess] vi4 # 1167| Type = [SpecifiedType] __attribute((vector_size(16UL))) int +# 1167| ValueCategory = lvalue +# 1167| getArrayOffset(): [VariableAccess] i +# 1167| Type = [IntType] int # 1167| ValueCategory = prvalue(load) -# 1167| getRightOperand(): [VariableAccess] vi4_shuffle -# 1167| Type = [SpecifiedType] __attribute((vector_size(16UL))) int -# 1167| ValueCategory = prvalue(load) -# 1168| getStmt(5): [ReturnStmt] return ... -# 1170| [TopLevelFunction] void* memcpy(void*, void*, int) -# 1170| : -# 1170| getParameter(0): [Parameter] dst -# 1170| Type = [VoidPointerType] void * -# 1170| getParameter(1): [Parameter] src -# 1170| Type = [VoidPointerType] void * -# 1170| getParameter(2): [Parameter] size -# 1170| Type = [IntType] int -# 1172| [TopLevelFunction] int ModeledCallTarget(int) +# 1167| getRValue(): [VariableAccess] x +# 1167| Type = [IntType] int +# 1167| ValueCategory = prvalue(load) +# 1168| getStmt(3): [DeclStmt] declaration +# 1168| getDeclarationEntry(0): [VariableDeclarationEntry] definition of vi4_shuffle +# 1168| Type = [SpecifiedType] __attribute((vector_size(16UL))) int +# 1168| getVariable().getInitializer(): [Initializer] initializer for vi4_shuffle +# 1168| getExpr(): [BuiltInOperationBuiltInShuffleVector] __builtin_shufflevector +# 1168| Type = [GNUVectorType] __attribute((vector_size(16))) int +# 1168| ValueCategory = prvalue +# 1168| getChild(0): [VariableAccess] vi4 +# 1168| Type = [SpecifiedType] __attribute((vector_size(16UL))) int +# 1168| ValueCategory = prvalue(load) +# 1168| getChild(1): [VariableAccess] vi4 +# 1168| Type = [SpecifiedType] __attribute((vector_size(16UL))) int +# 1168| ValueCategory = prvalue(load) +# 1168| getChild(2): [AddExpr] ... + ... +# 1168| Type = [IntType] int +# 1168| Value = [AddExpr] 3 +# 1168| ValueCategory = prvalue +# 1168| getLeftOperand(): [Literal] 3 +# 1168| Type = [IntType] int +# 1168| Value = [Literal] 3 +# 1168| ValueCategory = prvalue +# 1168| getRightOperand(): [Literal] 0 +# 1168| Type = [IntType] int +# 1168| Value = [Literal] 0 +# 1168| ValueCategory = prvalue +# 1168| getChild(3): [Literal] 2 +# 1168| Type = [IntType] int +# 1168| Value = [Literal] 2 +# 1168| ValueCategory = prvalue +# 1168| getChild(4): [Literal] 1 +# 1168| Type = [IntType] int +# 1168| Value = [Literal] 1 +# 1168| ValueCategory = prvalue +# 1168| getChild(5): [Literal] 0 +# 1168| Type = [IntType] int +# 1168| Value = [Literal] 0 +# 1168| ValueCategory = prvalue +# 1169| getStmt(4): [ExprStmt] ExprStmt +# 1169| getExpr(): [AssignExpr] ... = ... +# 1169| Type = [SpecifiedType] __attribute((vector_size(16UL))) int +# 1169| ValueCategory = lvalue +# 1169| getLValue(): [VariableAccess] vi4 +# 1169| Type = [SpecifiedType] __attribute((vector_size(16UL))) int +# 1169| ValueCategory = lvalue +# 1169| getRValue(): [AddExpr] ... + ... +# 1169| Type = [GNUVectorType] __attribute((vector_size(16UL))) int +# 1169| ValueCategory = prvalue +# 1169| getLeftOperand(): [VariableAccess] vi4 +# 1169| Type = [SpecifiedType] __attribute((vector_size(16UL))) int +# 1169| ValueCategory = prvalue(load) +# 1169| getRightOperand(): [VariableAccess] vi4_shuffle +# 1169| Type = [SpecifiedType] __attribute((vector_size(16UL))) int +# 1169| ValueCategory = prvalue(load) +# 1170| getStmt(5): [ReturnStmt] return ... +# 1172| [TopLevelFunction] void* memcpy(void*, void*, int) # 1172| : -# 1172| getParameter(0): [Parameter] x +# 1172| getParameter(0): [Parameter] dst +# 1172| Type = [VoidPointerType] void * +# 1172| getParameter(1): [Parameter] src +# 1172| Type = [VoidPointerType] void * +# 1172| getParameter(2): [Parameter] size # 1172| Type = [IntType] int -# 1172| getEntryPoint(): [BlockStmt] { ... } -# 1173| getStmt(0): [DeclStmt] declaration -# 1173| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y -# 1173| Type = [IntType] int -# 1174| getStmt(1): [ExprStmt] ExprStmt -# 1174| getExpr(): [FunctionCall] call to memcpy -# 1174| Type = [VoidPointerType] void * -# 1174| ValueCategory = prvalue -# 1174| getArgument(0): [AddressOfExpr] & ... -# 1174| Type = [IntPointerType] int * -# 1174| ValueCategory = prvalue -# 1174| getOperand(): [VariableAccess] y -# 1174| Type = [IntType] int -# 1174| ValueCategory = lvalue -# 1174| getArgument(1): [AddressOfExpr] & ... -# 1174| Type = [IntPointerType] int * -# 1174| ValueCategory = prvalue -# 1174| getOperand(): [VariableAccess] x -# 1174| Type = [IntType] int -# 1174| ValueCategory = lvalue -# 1174| getArgument(2): [SizeofTypeOperator] sizeof(int) -# 1174| Type = [LongType] unsigned long -# 1174| Value = [SizeofTypeOperator] 4 -# 1174| ValueCategory = prvalue -# 1174| getArgument(0).getFullyConverted(): [CStyleCast] (void *)... -# 1174| Conversion = [PointerConversion] pointer conversion -# 1174| Type = [VoidPointerType] void * -# 1174| ValueCategory = prvalue -# 1174| getArgument(1).getFullyConverted(): [CStyleCast] (void *)... -# 1174| Conversion = [PointerConversion] pointer conversion -# 1174| Type = [VoidPointerType] void * -# 1174| ValueCategory = prvalue -# 1174| getArgument(2).getFullyConverted(): [CStyleCast] (int)... -# 1174| Conversion = [IntegralConversion] integral conversion -# 1174| Type = [IntType] int -# 1174| Value = [CStyleCast] 4 -# 1174| ValueCategory = prvalue -# 1175| getStmt(2): [ReturnStmt] return ... -# 1175| getExpr(): [VariableAccess] y +# 1174| [TopLevelFunction] int ModeledCallTarget(int) +# 1174| : +# 1174| getParameter(0): [Parameter] x +# 1174| Type = [IntType] int +# 1174| getEntryPoint(): [BlockStmt] { ... } +# 1175| getStmt(0): [DeclStmt] declaration +# 1175| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y # 1175| Type = [IntType] int -# 1175| ValueCategory = prvalue(load) -# 1178| [TopLevelFunction] String ReturnObjectImpl() -# 1178| : -# 1178| getEntryPoint(): [BlockStmt] { ... } -# 1179| getStmt(0): [ReturnStmt] return ... -# 1179| getExpr(): [ConstructorCall] call to String -# 1179| Type = [VoidType] void -# 1179| ValueCategory = prvalue -# 1179| getArgument(0): foo -# 1179| Type = [ArrayType] const char[4] -# 1179| Value = [StringLiteral] "foo" -# 1179| ValueCategory = lvalue -# 1179| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 1179| Type = [PointerType] const char * -# 1179| ValueCategory = prvalue -# 1182| [TopLevelFunction] void switch1Case(int) -# 1182| : -# 1182| getParameter(0): [Parameter] x -# 1182| Type = [IntType] int -# 1182| getEntryPoint(): [BlockStmt] { ... } -# 1183| getStmt(0): [DeclStmt] declaration -# 1183| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y -# 1183| Type = [IntType] int -# 1183| getVariable().getInitializer(): [Initializer] initializer for y -# 1183| getExpr(): [Literal] 0 -# 1183| Type = [IntType] int -# 1183| Value = [Literal] 0 -# 1183| ValueCategory = prvalue -# 1184| getStmt(1): [SwitchStmt] switch (...) ... -# 1184| getExpr(): [VariableAccess] x -# 1184| Type = [IntType] int -# 1184| ValueCategory = prvalue(load) -# 1184| getStmt(): [BlockStmt] { ... } -# 1185| getStmt(0): [SwitchCase] case ...: -# 1185| getExpr(): [Literal] 1 +# 1176| getStmt(1): [ExprStmt] ExprStmt +# 1176| getExpr(): [FunctionCall] call to memcpy +# 1176| Type = [VoidPointerType] void * +# 1176| ValueCategory = prvalue +# 1176| getArgument(0): [AddressOfExpr] & ... +# 1176| Type = [IntPointerType] int * +# 1176| ValueCategory = prvalue +# 1176| getOperand(): [VariableAccess] y +# 1176| Type = [IntType] int +# 1176| ValueCategory = lvalue +# 1176| getArgument(1): [AddressOfExpr] & ... +# 1176| Type = [IntPointerType] int * +# 1176| ValueCategory = prvalue +# 1176| getOperand(): [VariableAccess] x +# 1176| Type = [IntType] int +# 1176| ValueCategory = lvalue +# 1176| getArgument(2): [SizeofTypeOperator] sizeof(int) +# 1176| Type = [LongType] unsigned long +# 1176| Value = [SizeofTypeOperator] 4 +# 1176| ValueCategory = prvalue +# 1176| getArgument(0).getFullyConverted(): [CStyleCast] (void *)... +# 1176| Conversion = [PointerConversion] pointer conversion +# 1176| Type = [VoidPointerType] void * +# 1176| ValueCategory = prvalue +# 1176| getArgument(1).getFullyConverted(): [CStyleCast] (void *)... +# 1176| Conversion = [PointerConversion] pointer conversion +# 1176| Type = [VoidPointerType] void * +# 1176| ValueCategory = prvalue +# 1176| getArgument(2).getFullyConverted(): [CStyleCast] (int)... +# 1176| Conversion = [IntegralConversion] integral conversion +# 1176| Type = [IntType] int +# 1176| Value = [CStyleCast] 4 +# 1176| ValueCategory = prvalue +# 1177| getStmt(2): [ReturnStmt] return ... +# 1177| getExpr(): [VariableAccess] y +# 1177| Type = [IntType] int +# 1177| ValueCategory = prvalue(load) +# 1180| [TopLevelFunction] String ReturnObjectImpl() +# 1180| : +# 1180| getEntryPoint(): [BlockStmt] { ... } +# 1181| getStmt(0): [ReturnStmt] return ... +# 1181| getExpr(): [ConstructorCall] call to String +# 1181| Type = [VoidType] void +# 1181| ValueCategory = prvalue +# 1181| getArgument(0): foo +# 1181| Type = [ArrayType] const char[4] +# 1181| Value = [StringLiteral] "foo" +# 1181| ValueCategory = lvalue +# 1181| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 1181| Type = [PointerType] const char * +# 1181| ValueCategory = prvalue +# 1184| [TopLevelFunction] void switch1Case(int) +# 1184| : +# 1184| getParameter(0): [Parameter] x +# 1184| Type = [IntType] int +# 1184| getEntryPoint(): [BlockStmt] { ... } +# 1185| getStmt(0): [DeclStmt] declaration +# 1185| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 1185| Type = [IntType] int +# 1185| getVariable().getInitializer(): [Initializer] initializer for y +# 1185| getExpr(): [Literal] 0 # 1185| Type = [IntType] int -# 1185| Value = [Literal] 1 +# 1185| Value = [Literal] 0 # 1185| ValueCategory = prvalue -# 1186| getStmt(1): [ExprStmt] ExprStmt -# 1186| getExpr(): [AssignExpr] ... = ... -# 1186| Type = [IntType] int -# 1186| ValueCategory = lvalue -# 1186| getLValue(): [VariableAccess] y -# 1186| Type = [IntType] int -# 1186| ValueCategory = lvalue -# 1186| getRValue(): [Literal] 2 -# 1186| Type = [IntType] int -# 1186| Value = [Literal] 2 -# 1186| ValueCategory = prvalue -# 1188| getStmt(2): [DeclStmt] declaration -# 1188| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z -# 1188| Type = [IntType] int -# 1188| getVariable().getInitializer(): [Initializer] initializer for z -# 1188| getExpr(): [VariableAccess] y +# 1186| getStmt(1): [SwitchStmt] switch (...) ... +# 1186| getExpr(): [VariableAccess] x +# 1186| Type = [IntType] int +# 1186| ValueCategory = prvalue(load) +# 1186| getStmt(): [BlockStmt] { ... } +# 1187| getStmt(0): [SwitchCase] case ...: +# 1187| getExpr(): [Literal] 1 +# 1187| Type = [IntType] int +# 1187| Value = [Literal] 1 +# 1187| ValueCategory = prvalue +# 1188| getStmt(1): [ExprStmt] ExprStmt +# 1188| getExpr(): [AssignExpr] ... = ... # 1188| Type = [IntType] int -# 1188| ValueCategory = prvalue(load) -# 1189| getStmt(3): [ReturnStmt] return ... -# 1191| [TopLevelFunction] void switch2Case_fallthrough(int) -# 1191| : -# 1191| getParameter(0): [Parameter] x -# 1191| Type = [IntType] int -# 1191| getEntryPoint(): [BlockStmt] { ... } -# 1192| getStmt(0): [DeclStmt] declaration -# 1192| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y -# 1192| Type = [IntType] int -# 1192| getVariable().getInitializer(): [Initializer] initializer for y -# 1192| getExpr(): [Literal] 0 -# 1192| Type = [IntType] int -# 1192| Value = [Literal] 0 -# 1192| ValueCategory = prvalue -# 1193| getStmt(1): [SwitchStmt] switch (...) ... -# 1193| getExpr(): [VariableAccess] x -# 1193| Type = [IntType] int -# 1193| ValueCategory = prvalue(load) -# 1193| getStmt(): [BlockStmt] { ... } -# 1194| getStmt(0): [SwitchCase] case ...: -# 1194| getExpr(): [Literal] 1 +# 1188| ValueCategory = lvalue +# 1188| getLValue(): [VariableAccess] y +# 1188| Type = [IntType] int +# 1188| ValueCategory = lvalue +# 1188| getRValue(): [Literal] 2 +# 1188| Type = [IntType] int +# 1188| Value = [Literal] 2 +# 1188| ValueCategory = prvalue +# 1190| getStmt(2): [DeclStmt] declaration +# 1190| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z +# 1190| Type = [IntType] int +# 1190| getVariable().getInitializer(): [Initializer] initializer for z +# 1190| getExpr(): [VariableAccess] y +# 1190| Type = [IntType] int +# 1190| ValueCategory = prvalue(load) +# 1191| getStmt(3): [ReturnStmt] return ... +# 1193| [TopLevelFunction] void switch2Case_fallthrough(int) +# 1193| : +# 1193| getParameter(0): [Parameter] x +# 1193| Type = [IntType] int +# 1193| getEntryPoint(): [BlockStmt] { ... } +# 1194| getStmt(0): [DeclStmt] declaration +# 1194| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 1194| Type = [IntType] int +# 1194| getVariable().getInitializer(): [Initializer] initializer for y +# 1194| getExpr(): [Literal] 0 # 1194| Type = [IntType] int -# 1194| Value = [Literal] 1 +# 1194| Value = [Literal] 0 # 1194| ValueCategory = prvalue -# 1195| getStmt(1): [ExprStmt] ExprStmt -# 1195| getExpr(): [AssignExpr] ... = ... -# 1195| Type = [IntType] int -# 1195| ValueCategory = lvalue -# 1195| getLValue(): [VariableAccess] y -# 1195| Type = [IntType] int -# 1195| ValueCategory = lvalue -# 1195| getRValue(): [Literal] 2 -# 1195| Type = [IntType] int -# 1195| Value = [Literal] 2 -# 1195| ValueCategory = prvalue -# 1196| getStmt(2): [SwitchCase] case ...: -# 1196| getExpr(): [Literal] 2 +# 1195| getStmt(1): [SwitchStmt] switch (...) ... +# 1195| getExpr(): [VariableAccess] x +# 1195| Type = [IntType] int +# 1195| ValueCategory = prvalue(load) +# 1195| getStmt(): [BlockStmt] { ... } +# 1196| getStmt(0): [SwitchCase] case ...: +# 1196| getExpr(): [Literal] 1 # 1196| Type = [IntType] int -# 1196| Value = [Literal] 2 +# 1196| Value = [Literal] 1 # 1196| ValueCategory = prvalue -# 1197| getStmt(3): [ExprStmt] ExprStmt +# 1197| getStmt(1): [ExprStmt] ExprStmt # 1197| getExpr(): [AssignExpr] ... = ... # 1197| Type = [IntType] int # 1197| ValueCategory = lvalue # 1197| getLValue(): [VariableAccess] y # 1197| Type = [IntType] int # 1197| ValueCategory = lvalue -# 1197| getRValue(): [Literal] 3 +# 1197| getRValue(): [Literal] 2 # 1197| Type = [IntType] int -# 1197| Value = [Literal] 3 +# 1197| Value = [Literal] 2 # 1197| ValueCategory = prvalue -# 1199| getStmt(2): [DeclStmt] declaration -# 1199| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z -# 1199| Type = [IntType] int -# 1199| getVariable().getInitializer(): [Initializer] initializer for z -# 1199| getExpr(): [VariableAccess] y +# 1198| getStmt(2): [SwitchCase] case ...: +# 1198| getExpr(): [Literal] 2 +# 1198| Type = [IntType] int +# 1198| Value = [Literal] 2 +# 1198| ValueCategory = prvalue +# 1199| getStmt(3): [ExprStmt] ExprStmt +# 1199| getExpr(): [AssignExpr] ... = ... # 1199| Type = [IntType] int -# 1199| ValueCategory = prvalue(load) -# 1200| getStmt(3): [ReturnStmt] return ... -# 1202| [TopLevelFunction] void switch2Case(int) -# 1202| : -# 1202| getParameter(0): [Parameter] x -# 1202| Type = [IntType] int -# 1202| getEntryPoint(): [BlockStmt] { ... } -# 1203| getStmt(0): [DeclStmt] declaration -# 1203| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y -# 1203| Type = [IntType] int -# 1203| getVariable().getInitializer(): [Initializer] initializer for y -# 1203| getExpr(): [Literal] 0 -# 1203| Type = [IntType] int -# 1203| Value = [Literal] 0 -# 1203| ValueCategory = prvalue -# 1204| getStmt(1): [SwitchStmt] switch (...) ... -# 1204| getExpr(): [VariableAccess] x -# 1204| Type = [IntType] int -# 1204| ValueCategory = prvalue(load) -# 1204| getStmt(): [BlockStmt] { ... } -# 1205| getStmt(0): [SwitchCase] case ...: -# 1205| getExpr(): [Literal] 1 +# 1199| ValueCategory = lvalue +# 1199| getLValue(): [VariableAccess] y +# 1199| Type = [IntType] int +# 1199| ValueCategory = lvalue +# 1199| getRValue(): [Literal] 3 +# 1199| Type = [IntType] int +# 1199| Value = [Literal] 3 +# 1199| ValueCategory = prvalue +# 1201| getStmt(2): [DeclStmt] declaration +# 1201| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z +# 1201| Type = [IntType] int +# 1201| getVariable().getInitializer(): [Initializer] initializer for z +# 1201| getExpr(): [VariableAccess] y +# 1201| Type = [IntType] int +# 1201| ValueCategory = prvalue(load) +# 1202| getStmt(3): [ReturnStmt] return ... +# 1204| [TopLevelFunction] void switch2Case(int) +# 1204| : +# 1204| getParameter(0): [Parameter] x +# 1204| Type = [IntType] int +# 1204| getEntryPoint(): [BlockStmt] { ... } +# 1205| getStmt(0): [DeclStmt] declaration +# 1205| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 1205| Type = [IntType] int +# 1205| getVariable().getInitializer(): [Initializer] initializer for y +# 1205| getExpr(): [Literal] 0 # 1205| Type = [IntType] int -# 1205| Value = [Literal] 1 +# 1205| Value = [Literal] 0 # 1205| ValueCategory = prvalue -# 1206| getStmt(1): [ExprStmt] ExprStmt -# 1206| getExpr(): [AssignExpr] ... = ... -# 1206| Type = [IntType] int -# 1206| ValueCategory = lvalue -# 1206| getLValue(): [VariableAccess] y -# 1206| Type = [IntType] int -# 1206| ValueCategory = lvalue -# 1206| getRValue(): [Literal] 2 -# 1206| Type = [IntType] int -# 1206| Value = [Literal] 2 -# 1206| ValueCategory = prvalue -# 1207| getStmt(2): [BreakStmt] break; -# 1208| getStmt(3): [SwitchCase] case ...: -# 1208| getExpr(): [Literal] 2 +# 1206| getStmt(1): [SwitchStmt] switch (...) ... +# 1206| getExpr(): [VariableAccess] x +# 1206| Type = [IntType] int +# 1206| ValueCategory = prvalue(load) +# 1206| getStmt(): [BlockStmt] { ... } +# 1207| getStmt(0): [SwitchCase] case ...: +# 1207| getExpr(): [Literal] 1 +# 1207| Type = [IntType] int +# 1207| Value = [Literal] 1 +# 1207| ValueCategory = prvalue +# 1208| getStmt(1): [ExprStmt] ExprStmt +# 1208| getExpr(): [AssignExpr] ... = ... # 1208| Type = [IntType] int -# 1208| Value = [Literal] 2 -# 1208| ValueCategory = prvalue -# 1209| getStmt(4): [ExprStmt] ExprStmt -# 1209| getExpr(): [AssignExpr] ... = ... -# 1209| Type = [IntType] int -# 1209| ValueCategory = lvalue -# 1209| getLValue(): [VariableAccess] y -# 1209| Type = [IntType] int -# 1209| ValueCategory = lvalue -# 1209| getRValue(): [Literal] 3 -# 1209| Type = [IntType] int -# 1209| Value = [Literal] 3 -# 1209| ValueCategory = prvalue -# 1210| getStmt(2): [LabelStmt] label ...: -# 1211| getStmt(3): [DeclStmt] declaration -# 1211| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z -# 1211| Type = [IntType] int -# 1211| getVariable().getInitializer(): [Initializer] initializer for z -# 1211| getExpr(): [VariableAccess] y +# 1208| ValueCategory = lvalue +# 1208| getLValue(): [VariableAccess] y +# 1208| Type = [IntType] int +# 1208| ValueCategory = lvalue +# 1208| getRValue(): [Literal] 2 +# 1208| Type = [IntType] int +# 1208| Value = [Literal] 2 +# 1208| ValueCategory = prvalue +# 1209| getStmt(2): [BreakStmt] break; +# 1210| getStmt(3): [SwitchCase] case ...: +# 1210| getExpr(): [Literal] 2 +# 1210| Type = [IntType] int +# 1210| Value = [Literal] 2 +# 1210| ValueCategory = prvalue +# 1211| getStmt(4): [ExprStmt] ExprStmt +# 1211| getExpr(): [AssignExpr] ... = ... # 1211| Type = [IntType] int -# 1211| ValueCategory = prvalue(load) -# 1212| getStmt(4): [ReturnStmt] return ... -# 1214| [TopLevelFunction] void switch2Case_default(int) -# 1214| : -# 1214| getParameter(0): [Parameter] x -# 1214| Type = [IntType] int -# 1214| getEntryPoint(): [BlockStmt] { ... } -# 1215| getStmt(0): [DeclStmt] declaration -# 1215| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y -# 1215| Type = [IntType] int -# 1215| getVariable().getInitializer(): [Initializer] initializer for y -# 1215| getExpr(): [Literal] 0 -# 1215| Type = [IntType] int -# 1215| Value = [Literal] 0 -# 1215| ValueCategory = prvalue -# 1216| getStmt(1): [SwitchStmt] switch (...) ... -# 1216| getExpr(): [VariableAccess] x -# 1216| Type = [IntType] int -# 1216| ValueCategory = prvalue(load) -# 1216| getStmt(): [BlockStmt] { ... } -# 1217| getStmt(0): [SwitchCase] case ...: -# 1217| getExpr(): [Literal] 1 +# 1211| ValueCategory = lvalue +# 1211| getLValue(): [VariableAccess] y +# 1211| Type = [IntType] int +# 1211| ValueCategory = lvalue +# 1211| getRValue(): [Literal] 3 +# 1211| Type = [IntType] int +# 1211| Value = [Literal] 3 +# 1211| ValueCategory = prvalue +# 1212| getStmt(2): [LabelStmt] label ...: +# 1213| getStmt(3): [DeclStmt] declaration +# 1213| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z +# 1213| Type = [IntType] int +# 1213| getVariable().getInitializer(): [Initializer] initializer for z +# 1213| getExpr(): [VariableAccess] y +# 1213| Type = [IntType] int +# 1213| ValueCategory = prvalue(load) +# 1214| getStmt(4): [ReturnStmt] return ... +# 1216| [TopLevelFunction] void switch2Case_default(int) +# 1216| : +# 1216| getParameter(0): [Parameter] x +# 1216| Type = [IntType] int +# 1216| getEntryPoint(): [BlockStmt] { ... } +# 1217| getStmt(0): [DeclStmt] declaration +# 1217| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 1217| Type = [IntType] int +# 1217| getVariable().getInitializer(): [Initializer] initializer for y +# 1217| getExpr(): [Literal] 0 # 1217| Type = [IntType] int -# 1217| Value = [Literal] 1 +# 1217| Value = [Literal] 0 # 1217| ValueCategory = prvalue -# 1218| getStmt(1): [ExprStmt] ExprStmt -# 1218| getExpr(): [AssignExpr] ... = ... -# 1218| Type = [IntType] int -# 1218| ValueCategory = lvalue -# 1218| getLValue(): [VariableAccess] y -# 1218| Type = [IntType] int -# 1218| ValueCategory = lvalue -# 1218| getRValue(): [Literal] 2 -# 1218| Type = [IntType] int -# 1218| Value = [Literal] 2 -# 1218| ValueCategory = prvalue -# 1219| getStmt(2): [BreakStmt] break; -# 1221| getStmt(3): [SwitchCase] case ...: -# 1221| getExpr(): [Literal] 2 -# 1221| Type = [IntType] int -# 1221| Value = [Literal] 2 -# 1221| ValueCategory = prvalue -# 1222| getStmt(4): [ExprStmt] ExprStmt -# 1222| getExpr(): [AssignExpr] ... = ... -# 1222| Type = [IntType] int -# 1222| ValueCategory = lvalue -# 1222| getLValue(): [VariableAccess] y -# 1222| Type = [IntType] int -# 1222| ValueCategory = lvalue -# 1222| getRValue(): [Literal] 3 -# 1222| Type = [IntType] int -# 1222| Value = [Literal] 3 -# 1222| ValueCategory = prvalue -# 1223| getStmt(5): [BreakStmt] break; -# 1225| getStmt(6): [SwitchCase] default: -# 1226| getStmt(7): [ExprStmt] ExprStmt -# 1226| getExpr(): [AssignExpr] ... = ... -# 1226| Type = [IntType] int -# 1226| ValueCategory = lvalue -# 1226| getLValue(): [VariableAccess] y -# 1226| Type = [IntType] int -# 1226| ValueCategory = lvalue -# 1226| getRValue(): [Literal] 4 -# 1226| Type = [IntType] int -# 1226| Value = [Literal] 4 -# 1226| ValueCategory = prvalue -# 1227| getStmt(2): [LabelStmt] label ...: -# 1228| getStmt(3): [DeclStmt] declaration -# 1228| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z -# 1228| Type = [IntType] int -# 1228| getVariable().getInitializer(): [Initializer] initializer for z -# 1228| getExpr(): [VariableAccess] y +# 1218| getStmt(1): [SwitchStmt] switch (...) ... +# 1218| getExpr(): [VariableAccess] x +# 1218| Type = [IntType] int +# 1218| ValueCategory = prvalue(load) +# 1218| getStmt(): [BlockStmt] { ... } +# 1219| getStmt(0): [SwitchCase] case ...: +# 1219| getExpr(): [Literal] 1 +# 1219| Type = [IntType] int +# 1219| Value = [Literal] 1 +# 1219| ValueCategory = prvalue +# 1220| getStmt(1): [ExprStmt] ExprStmt +# 1220| getExpr(): [AssignExpr] ... = ... +# 1220| Type = [IntType] int +# 1220| ValueCategory = lvalue +# 1220| getLValue(): [VariableAccess] y +# 1220| Type = [IntType] int +# 1220| ValueCategory = lvalue +# 1220| getRValue(): [Literal] 2 +# 1220| Type = [IntType] int +# 1220| Value = [Literal] 2 +# 1220| ValueCategory = prvalue +# 1221| getStmt(2): [BreakStmt] break; +# 1223| getStmt(3): [SwitchCase] case ...: +# 1223| getExpr(): [Literal] 2 +# 1223| Type = [IntType] int +# 1223| Value = [Literal] 2 +# 1223| ValueCategory = prvalue +# 1224| getStmt(4): [ExprStmt] ExprStmt +# 1224| getExpr(): [AssignExpr] ... = ... +# 1224| Type = [IntType] int +# 1224| ValueCategory = lvalue +# 1224| getLValue(): [VariableAccess] y +# 1224| Type = [IntType] int +# 1224| ValueCategory = lvalue +# 1224| getRValue(): [Literal] 3 +# 1224| Type = [IntType] int +# 1224| Value = [Literal] 3 +# 1224| ValueCategory = prvalue +# 1225| getStmt(5): [BreakStmt] break; +# 1227| getStmt(6): [SwitchCase] default: +# 1228| getStmt(7): [ExprStmt] ExprStmt +# 1228| getExpr(): [AssignExpr] ... = ... # 1228| Type = [IntType] int -# 1228| ValueCategory = prvalue(load) -# 1229| getStmt(4): [ReturnStmt] return ... -# 1231| [TopLevelFunction] int staticLocalInit(int) -# 1231| : -# 1231| getParameter(0): [Parameter] x -# 1231| Type = [IntType] int -# 1231| getEntryPoint(): [BlockStmt] { ... } -# 1232| getStmt(0): [DeclStmt] declaration -# 1232| getDeclarationEntry(0): [VariableDeclarationEntry] definition of a -# 1232| Type = [IntType] int -# 1232| getVariable().getInitializer(): [Initializer] initializer for a -# 1232| getExpr(): [Literal] 0 -# 1232| Type = [IntType] int -# 1232| Value = [Literal] 0 -# 1232| ValueCategory = prvalue -# 1233| getStmt(1): [DeclStmt] declaration -# 1233| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b -# 1233| Type = [IntType] int -# 1233| getVariable().getInitializer(): [Initializer] initializer for b -# 1233| getExpr(): [SizeofExprOperator] sizeof() -# 1233| Type = [LongType] unsigned long -# 1233| Value = [SizeofExprOperator] 4 -# 1233| ValueCategory = prvalue -# 1233| getExprOperand(): [VariableAccess] x -# 1233| Type = [IntType] int -# 1233| ValueCategory = lvalue -# 1233| getExprOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 1233| Type = [IntType] int -# 1233| ValueCategory = lvalue -# 1233| getExpr().getFullyConverted(): [CStyleCast] (int)... -# 1233| Conversion = [IntegralConversion] integral conversion -# 1233| Type = [IntType] int -# 1233| Value = [CStyleCast] 4 -# 1233| ValueCategory = prvalue -# 1234| getStmt(2): [DeclStmt] declaration -# 1234| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c +# 1228| ValueCategory = lvalue +# 1228| getLValue(): [VariableAccess] y +# 1228| Type = [IntType] int +# 1228| ValueCategory = lvalue +# 1228| getRValue(): [Literal] 4 +# 1228| Type = [IntType] int +# 1228| Value = [Literal] 4 +# 1228| ValueCategory = prvalue +# 1229| getStmt(2): [LabelStmt] label ...: +# 1230| getStmt(3): [DeclStmt] declaration +# 1230| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z +# 1230| Type = [IntType] int +# 1230| getVariable().getInitializer(): [Initializer] initializer for z +# 1230| getExpr(): [VariableAccess] y +# 1230| Type = [IntType] int +# 1230| ValueCategory = prvalue(load) +# 1231| getStmt(4): [ReturnStmt] return ... +# 1233| [TopLevelFunction] int staticLocalInit(int) +# 1233| : +# 1233| getParameter(0): [Parameter] x +# 1233| Type = [IntType] int +# 1233| getEntryPoint(): [BlockStmt] { ... } +# 1234| getStmt(0): [DeclStmt] declaration +# 1234| getDeclarationEntry(0): [VariableDeclarationEntry] definition of a # 1234| Type = [IntType] int -# 1234| getVariable().getInitializer(): [Initializer] initializer for c -# 1234| getExpr(): [VariableAccess] x +# 1234| getVariable().getInitializer(): [Initializer] initializer for a +# 1234| getExpr(): [Literal] 0 # 1234| Type = [IntType] int -# 1234| ValueCategory = prvalue(load) -# 1235| getStmt(3): [DeclStmt] declaration -# 1235| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d +# 1234| Value = [Literal] 0 +# 1234| ValueCategory = prvalue +# 1235| getStmt(1): [DeclStmt] declaration +# 1235| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b # 1235| Type = [IntType] int -# 1237| getStmt(4): [ReturnStmt] return ... -# 1237| getExpr(): [AddExpr] ... + ... +# 1235| getVariable().getInitializer(): [Initializer] initializer for b +# 1235| getExpr(): [SizeofExprOperator] sizeof() +# 1235| Type = [LongType] unsigned long +# 1235| Value = [SizeofExprOperator] 4 +# 1235| ValueCategory = prvalue +# 1235| getExprOperand(): [VariableAccess] x +# 1235| Type = [IntType] int +# 1235| ValueCategory = lvalue +# 1235| getExprOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 1235| Type = [IntType] int +# 1235| ValueCategory = lvalue +# 1235| getExpr().getFullyConverted(): [CStyleCast] (int)... +# 1235| Conversion = [IntegralConversion] integral conversion +# 1235| Type = [IntType] int +# 1235| Value = [CStyleCast] 4 +# 1235| ValueCategory = prvalue +# 1236| getStmt(2): [DeclStmt] declaration +# 1236| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c +# 1236| Type = [IntType] int +# 1236| getVariable().getInitializer(): [Initializer] initializer for c +# 1236| getExpr(): [VariableAccess] x +# 1236| Type = [IntType] int +# 1236| ValueCategory = prvalue(load) +# 1237| getStmt(3): [DeclStmt] declaration +# 1237| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d # 1237| Type = [IntType] int -# 1237| ValueCategory = prvalue -# 1237| getLeftOperand(): [AddExpr] ... + ... -# 1237| Type = [IntType] int -# 1237| ValueCategory = prvalue -# 1237| getLeftOperand(): [AddExpr] ... + ... -# 1237| Type = [IntType] int -# 1237| ValueCategory = prvalue -# 1237| getLeftOperand(): [VariableAccess] a -# 1237| Type = [IntType] int -# 1237| ValueCategory = prvalue(load) -# 1237| getRightOperand(): [VariableAccess] b -# 1237| Type = [IntType] int -# 1237| ValueCategory = prvalue(load) -# 1237| getRightOperand(): [VariableAccess] c -# 1237| Type = [IntType] int -# 1237| ValueCategory = prvalue(load) -# 1237| getRightOperand(): [VariableAccess] d -# 1237| Type = [IntType] int -# 1237| ValueCategory = prvalue(load) -# 1240| [TopLevelFunction] void staticLocalWithConstructor(char const*) -# 1240| : -# 1240| getParameter(0): [Parameter] dynamic -# 1240| Type = [PointerType] const char * -# 1240| getEntryPoint(): [BlockStmt] { ... } -# 1241| getStmt(0): [DeclStmt] declaration -# 1241| getDeclarationEntry(0): [VariableDeclarationEntry] definition of a -# 1241| Type = [Struct] String +# 1239| getStmt(4): [ReturnStmt] return ... +# 1239| getExpr(): [AddExpr] ... + ... +# 1239| Type = [IntType] int +# 1239| ValueCategory = prvalue +# 1239| getLeftOperand(): [AddExpr] ... + ... +# 1239| Type = [IntType] int +# 1239| ValueCategory = prvalue +# 1239| getLeftOperand(): [AddExpr] ... + ... +# 1239| Type = [IntType] int +# 1239| ValueCategory = prvalue +# 1239| getLeftOperand(): [VariableAccess] a +# 1239| Type = [IntType] int +# 1239| ValueCategory = prvalue(load) +# 1239| getRightOperand(): [VariableAccess] b +# 1239| Type = [IntType] int +# 1239| ValueCategory = prvalue(load) +# 1239| getRightOperand(): [VariableAccess] c +# 1239| Type = [IntType] int +# 1239| ValueCategory = prvalue(load) +# 1239| getRightOperand(): [VariableAccess] d +# 1239| Type = [IntType] int +# 1239| ValueCategory = prvalue(load) +# 1242| [TopLevelFunction] void staticLocalWithConstructor(char const*) +# 1242| : +# 1242| getParameter(0): [Parameter] dynamic +# 1242| Type = [PointerType] const char * +# 1242| getEntryPoint(): [BlockStmt] { ... } +# 1243| getStmt(0): [DeclStmt] declaration +# 1243| getDeclarationEntry(0): [VariableDeclarationEntry] definition of a +# 1243| Type = [Struct] String #-----| getVariable().getInitializer(): [Initializer] initializer for a #-----| getExpr(): [ConstructorCall] call to String #-----| Type = [VoidType] void #-----| ValueCategory = prvalue -# 1242| getStmt(1): [DeclStmt] declaration -# 1242| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b -# 1242| Type = [Struct] String -# 1242| getVariable().getInitializer(): [Initializer] initializer for b -# 1242| getExpr(): [ConstructorCall] call to String -# 1242| Type = [VoidType] void -# 1242| ValueCategory = prvalue -# 1242| getArgument(0): static -# 1242| Type = [ArrayType] const char[7] -# 1242| Value = [StringLiteral] "static" -# 1242| ValueCategory = lvalue -# 1242| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 1242| Type = [PointerType] const char * -# 1242| ValueCategory = prvalue -# 1243| getStmt(2): [DeclStmt] declaration -# 1243| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c -# 1243| Type = [Struct] String -# 1243| getVariable().getInitializer(): [Initializer] initializer for c -# 1243| getExpr(): [ConstructorCall] call to String -# 1243| Type = [VoidType] void -# 1243| ValueCategory = prvalue -# 1243| getArgument(0): [VariableAccess] dynamic -# 1243| Type = [PointerType] const char * -# 1243| ValueCategory = prvalue(load) -# 1244| getStmt(3): [ReturnStmt] return ... -# 1244| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1244| Type = [VoidType] void -# 1244| ValueCategory = prvalue -# 1244| getQualifier(): [VariableAccess] c -# 1244| Type = [Struct] String -# 1244| ValueCategory = lvalue -# 1244| getImplicitDestructorCall(1): [DestructorCall] call to ~String -# 1244| Type = [VoidType] void -# 1244| ValueCategory = prvalue -# 1244| getQualifier(): [VariableAccess] b -# 1244| Type = [Struct] String -# 1244| ValueCategory = lvalue -# 1244| getImplicitDestructorCall(2): [DestructorCall] call to ~String -# 1244| Type = [VoidType] void -# 1244| ValueCategory = prvalue -# 1244| getQualifier(): [VariableAccess] a -# 1244| Type = [Struct] String -# 1244| ValueCategory = lvalue -# 1248| [TopLevelFunction] char* strcpy(char*, char const*) -# 1248| : -# 1248| getParameter(0): [Parameter] destination -# 1248| Type = [CharPointerType] char * -# 1248| getParameter(1): [Parameter] source -# 1248| Type = [PointerType] const char * -# 1249| [TopLevelFunction] char* strcat(char*, char const*) -# 1249| : -# 1249| getParameter(0): [Parameter] destination -# 1249| Type = [CharPointerType] char * -# 1249| getParameter(1): [Parameter] source -# 1249| Type = [PointerType] const char * -# 1251| [TopLevelFunction] void test_strings(char*, char*) +# 1244| getStmt(1): [DeclStmt] declaration +# 1244| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b +# 1244| Type = [Struct] String +# 1244| getVariable().getInitializer(): [Initializer] initializer for b +# 1244| getExpr(): [ConstructorCall] call to String +# 1244| Type = [VoidType] void +# 1244| ValueCategory = prvalue +# 1244| getArgument(0): static +# 1244| Type = [ArrayType] const char[7] +# 1244| Value = [StringLiteral] "static" +# 1244| ValueCategory = lvalue +# 1244| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 1244| Type = [PointerType] const char * +# 1244| ValueCategory = prvalue +# 1245| getStmt(2): [DeclStmt] declaration +# 1245| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c +# 1245| Type = [Struct] String +# 1245| getVariable().getInitializer(): [Initializer] initializer for c +# 1245| getExpr(): [ConstructorCall] call to String +# 1245| Type = [VoidType] void +# 1245| ValueCategory = prvalue +# 1245| getArgument(0): [VariableAccess] dynamic +# 1245| Type = [PointerType] const char * +# 1245| ValueCategory = prvalue(load) +# 1246| getStmt(3): [ReturnStmt] return ... +# 1246| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 1246| Type = [VoidType] void +# 1246| ValueCategory = prvalue +# 1246| getQualifier(): [VariableAccess] c +# 1246| Type = [Struct] String +# 1246| ValueCategory = lvalue +# 1246| getImplicitDestructorCall(1): [DestructorCall] call to ~String +# 1246| Type = [VoidType] void +# 1246| ValueCategory = prvalue +# 1246| getQualifier(): [VariableAccess] b +# 1246| Type = [Struct] String +# 1246| ValueCategory = lvalue +# 1246| getImplicitDestructorCall(2): [DestructorCall] call to ~String +# 1246| Type = [VoidType] void +# 1246| ValueCategory = prvalue +# 1246| getQualifier(): [VariableAccess] a +# 1246| Type = [Struct] String +# 1246| ValueCategory = lvalue +# 1250| [TopLevelFunction] char* strcpy(char*, char const*) +# 1250| : +# 1250| getParameter(0): [Parameter] destination +# 1250| Type = [CharPointerType] char * +# 1250| getParameter(1): [Parameter] source +# 1250| Type = [PointerType] const char * +# 1251| [TopLevelFunction] char* strcat(char*, char const*) # 1251| : -# 1251| getParameter(0): [Parameter] s1 +# 1251| getParameter(0): [Parameter] destination # 1251| Type = [CharPointerType] char * -# 1251| getParameter(1): [Parameter] s2 -# 1251| Type = [CharPointerType] char * -# 1251| getEntryPoint(): [BlockStmt] { ... } -# 1252| getStmt(0): [DeclStmt] declaration -# 1252| getDeclarationEntry(0): [VariableDeclarationEntry] definition of buffer -# 1252| Type = [ArrayType] char[1024] -# 1252| getVariable().getInitializer(): [Initializer] initializer for buffer -# 1252| getExpr(): [ArrayAggregateLiteral] {...} -# 1252| Type = [ArrayType] char[1024] -# 1252| ValueCategory = prvalue -# 1252| getAnElementExpr(0): [Literal] 0 -# 1252| Type = [IntType] int -# 1252| Value = [Literal] 0 -# 1252| ValueCategory = prvalue -# 1252| getAnElementExpr(0).getFullyConverted(): [CStyleCast] (char)... -# 1252| Conversion = [IntegralConversion] integral conversion -# 1252| Type = [PlainCharType] char -# 1252| Value = [CStyleCast] 0 -# 1252| ValueCategory = prvalue -# 1254| getStmt(1): [ExprStmt] ExprStmt -# 1254| getExpr(): [FunctionCall] call to strcpy -# 1254| Type = [CharPointerType] char * -# 1254| ValueCategory = prvalue -# 1254| getArgument(0): [VariableAccess] buffer -# 1254| Type = [ArrayType] char[1024] -# 1254| ValueCategory = lvalue -# 1254| getArgument(1): [VariableAccess] s1 -# 1254| Type = [CharPointerType] char * -# 1254| ValueCategory = prvalue(load) -# 1254| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 1254| Type = [CharPointerType] char * -# 1254| ValueCategory = prvalue -# 1254| getArgument(1).getFullyConverted(): [CStyleCast] (const char *)... -# 1254| Conversion = [PointerConversion] pointer conversion -# 1254| Type = [PointerType] const char * -# 1254| ValueCategory = prvalue -# 1255| getStmt(2): [ExprStmt] ExprStmt -# 1255| getExpr(): [FunctionCall] call to strcat -# 1255| Type = [CharPointerType] char * -# 1255| ValueCategory = prvalue -# 1255| getArgument(0): [VariableAccess] buffer -# 1255| Type = [ArrayType] char[1024] -# 1255| ValueCategory = lvalue -# 1255| getArgument(1): [VariableAccess] s2 -# 1255| Type = [CharPointerType] char * -# 1255| ValueCategory = prvalue(load) -# 1255| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 1255| Type = [CharPointerType] char * -# 1255| ValueCategory = prvalue -# 1255| getArgument(1).getFullyConverted(): [CStyleCast] (const char *)... -# 1255| Conversion = [PointerConversion] pointer conversion -# 1255| Type = [PointerType] const char * -# 1255| ValueCategory = prvalue -# 1256| getStmt(3): [ReturnStmt] return ... -# 1258| [CopyAssignmentOperator] A& A::operator=(A const&) -# 1258| : +# 1251| getParameter(1): [Parameter] source +# 1251| Type = [PointerType] const char * +# 1253| [TopLevelFunction] void test_strings(char*, char*) +# 1253| : +# 1253| getParameter(0): [Parameter] s1 +# 1253| Type = [CharPointerType] char * +# 1253| getParameter(1): [Parameter] s2 +# 1253| Type = [CharPointerType] char * +# 1253| getEntryPoint(): [BlockStmt] { ... } +# 1254| getStmt(0): [DeclStmt] declaration +# 1254| getDeclarationEntry(0): [VariableDeclarationEntry] definition of buffer +# 1254| Type = [ArrayType] char[1024] +# 1254| getVariable().getInitializer(): [Initializer] initializer for buffer +# 1254| getExpr(): [ArrayAggregateLiteral] {...} +# 1254| Type = [ArrayType] char[1024] +# 1254| ValueCategory = prvalue +# 1254| getAnElementExpr(0): [Literal] 0 +# 1254| Type = [IntType] int +# 1254| Value = [Literal] 0 +# 1254| ValueCategory = prvalue +# 1254| getAnElementExpr(0).getFullyConverted(): [CStyleCast] (char)... +# 1254| Conversion = [IntegralConversion] integral conversion +# 1254| Type = [PlainCharType] char +# 1254| Value = [CStyleCast] 0 +# 1254| ValueCategory = prvalue +# 1256| getStmt(1): [ExprStmt] ExprStmt +# 1256| getExpr(): [FunctionCall] call to strcpy +# 1256| Type = [CharPointerType] char * +# 1256| ValueCategory = prvalue +# 1256| getArgument(0): [VariableAccess] buffer +# 1256| Type = [ArrayType] char[1024] +# 1256| ValueCategory = lvalue +# 1256| getArgument(1): [VariableAccess] s1 +# 1256| Type = [CharPointerType] char * +# 1256| ValueCategory = prvalue(load) +# 1256| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 1256| Type = [CharPointerType] char * +# 1256| ValueCategory = prvalue +# 1256| getArgument(1).getFullyConverted(): [CStyleCast] (const char *)... +# 1256| Conversion = [PointerConversion] pointer conversion +# 1256| Type = [PointerType] const char * +# 1256| ValueCategory = prvalue +# 1257| getStmt(2): [ExprStmt] ExprStmt +# 1257| getExpr(): [FunctionCall] call to strcat +# 1257| Type = [CharPointerType] char * +# 1257| ValueCategory = prvalue +# 1257| getArgument(0): [VariableAccess] buffer +# 1257| Type = [ArrayType] char[1024] +# 1257| ValueCategory = lvalue +# 1257| getArgument(1): [VariableAccess] s2 +# 1257| Type = [CharPointerType] char * +# 1257| ValueCategory = prvalue(load) +# 1257| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 1257| Type = [CharPointerType] char * +# 1257| ValueCategory = prvalue +# 1257| getArgument(1).getFullyConverted(): [CStyleCast] (const char *)... +# 1257| Conversion = [PointerConversion] pointer conversion +# 1257| Type = [PointerType] const char * +# 1257| ValueCategory = prvalue +# 1258| getStmt(3): [ReturnStmt] return ... +# 1260| [CopyAssignmentOperator] A& A::operator=(A const&) +# 1260| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const A & -# 1258| [MoveAssignmentOperator] A& A::operator=(A&&) -# 1258| : +# 1260| [MoveAssignmentOperator] A& A::operator=(A&&) +# 1260| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] A && -# 1261| [MemberFunction] void A::static_member(A*, int) -# 1261| : -# 1261| getParameter(0): [Parameter] a -# 1261| Type = [PointerType] A * -# 1261| getParameter(1): [Parameter] x -# 1261| Type = [IntType] int -# 1261| getEntryPoint(): [BlockStmt] { ... } -# 1262| getStmt(0): [ExprStmt] ExprStmt -# 1262| getExpr(): [AssignExpr] ... = ... -# 1262| Type = [IntType] int -# 1262| ValueCategory = lvalue -# 1262| getLValue(): [PointerFieldAccess] member -# 1262| Type = [IntType] int -# 1262| ValueCategory = lvalue -# 1262| getQualifier(): [VariableAccess] a -# 1262| Type = [PointerType] A * -# 1262| ValueCategory = prvalue(load) -# 1262| getRValue(): [VariableAccess] x -# 1262| Type = [IntType] int -# 1262| ValueCategory = prvalue(load) -# 1263| getStmt(1): [ReturnStmt] return ... -# 1265| [MemberFunction] void A::static_member_without_def() -# 1265| : -# 1268| [TopLevelFunction] A* getAnInstanceOfA() -# 1268| : -# 1270| [TopLevelFunction] void test_static_member_functions(int, A*) +# 1263| [MemberFunction] void A::static_member(A*, int) +# 1263| : +# 1263| getParameter(0): [Parameter] a +# 1263| Type = [PointerType] A * +# 1263| getParameter(1): [Parameter] x +# 1263| Type = [IntType] int +# 1263| getEntryPoint(): [BlockStmt] { ... } +# 1264| getStmt(0): [ExprStmt] ExprStmt +# 1264| getExpr(): [AssignExpr] ... = ... +# 1264| Type = [IntType] int +# 1264| ValueCategory = lvalue +# 1264| getLValue(): [PointerFieldAccess] member +# 1264| Type = [IntType] int +# 1264| ValueCategory = lvalue +# 1264| getQualifier(): [VariableAccess] a +# 1264| Type = [PointerType] A * +# 1264| ValueCategory = prvalue(load) +# 1264| getRValue(): [VariableAccess] x +# 1264| Type = [IntType] int +# 1264| ValueCategory = prvalue(load) +# 1265| getStmt(1): [ReturnStmt] return ... +# 1267| [MemberFunction] void A::static_member_without_def() +# 1267| : +# 1270| [TopLevelFunction] A* getAnInstanceOfA() # 1270| : -# 1270| getParameter(0): [Parameter] int_arg -# 1270| Type = [IntType] int -# 1270| getParameter(1): [Parameter] a_arg -# 1270| Type = [PointerType] A * -# 1270| getEntryPoint(): [BlockStmt] { ... } -# 1271| getStmt(0): [DeclStmt] declaration -# 1271| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c -# 1271| Type = [Class] C -# 1271| getVariable().getInitializer(): [Initializer] initializer for c -# 1271| getExpr(): [ConstructorCall] call to C -# 1271| Type = [VoidType] void -# 1271| ValueCategory = prvalue -# 1272| getStmt(1): [ExprStmt] ExprStmt -# 1272| getExpr(): [FunctionCall] call to StaticMemberFunction -# 1272| Type = [IntType] int -# 1272| ValueCategory = prvalue -# 1272| getQualifier(): [VariableAccess] c -# 1272| Type = [Class] C -# 1272| ValueCategory = lvalue -# 1272| getArgument(0): [Literal] 10 -# 1272| Type = [IntType] int -# 1272| Value = [Literal] 10 -# 1272| ValueCategory = prvalue -# 1273| getStmt(2): [ExprStmt] ExprStmt -# 1273| getExpr(): [FunctionCall] call to StaticMemberFunction -# 1273| Type = [IntType] int -# 1273| ValueCategory = prvalue -# 1273| getArgument(0): [Literal] 10 -# 1273| Type = [IntType] int -# 1273| Value = [Literal] 10 -# 1273| ValueCategory = prvalue -# 1275| getStmt(3): [DeclStmt] declaration -# 1275| getDeclarationEntry(0): [VariableDeclarationEntry] definition of a -# 1275| Type = [Struct] A -# 1276| getStmt(4): [ExprStmt] ExprStmt -# 1276| getExpr(): [FunctionCall] call to static_member -# 1276| Type = [VoidType] void -# 1276| ValueCategory = prvalue -# 1276| getQualifier(): [VariableAccess] a -# 1276| Type = [Struct] A -# 1276| ValueCategory = lvalue -# 1276| getArgument(0): [AddressOfExpr] & ... -# 1276| Type = [PointerType] A * -# 1276| ValueCategory = prvalue -# 1276| getOperand(): [VariableAccess] a -# 1276| Type = [Struct] A -# 1276| ValueCategory = lvalue -# 1276| getArgument(1): [VariableAccess] int_arg -# 1276| Type = [IntType] int -# 1276| ValueCategory = prvalue(load) -# 1277| getStmt(5): [ExprStmt] ExprStmt -# 1277| getExpr(): [FunctionCall] call to static_member -# 1277| Type = [VoidType] void -# 1277| ValueCategory = prvalue -# 1277| getArgument(0): [AddressOfExpr] & ... -# 1277| Type = [PointerType] A * -# 1277| ValueCategory = prvalue -# 1277| getOperand(): [VariableAccess] a -# 1277| Type = [Struct] A -# 1277| ValueCategory = lvalue -# 1277| getArgument(1): [VariableAccess] int_arg -# 1277| Type = [IntType] int -# 1277| ValueCategory = prvalue(load) -# 1279| getStmt(6): [ExprStmt] ExprStmt +# 1272| [TopLevelFunction] void test_static_member_functions(int, A*) +# 1272| : +# 1272| getParameter(0): [Parameter] int_arg +# 1272| Type = [IntType] int +# 1272| getParameter(1): [Parameter] a_arg +# 1272| Type = [PointerType] A * +# 1272| getEntryPoint(): [BlockStmt] { ... } +# 1273| getStmt(0): [DeclStmt] declaration +# 1273| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c +# 1273| Type = [Class] C +# 1273| getVariable().getInitializer(): [Initializer] initializer for c +# 1273| getExpr(): [ConstructorCall] call to C +# 1273| Type = [VoidType] void +# 1273| ValueCategory = prvalue +# 1274| getStmt(1): [ExprStmt] ExprStmt +# 1274| getExpr(): [FunctionCall] call to StaticMemberFunction +# 1274| Type = [IntType] int +# 1274| ValueCategory = prvalue +# 1274| getQualifier(): [VariableAccess] c +# 1274| Type = [Class] C +# 1274| ValueCategory = lvalue +# 1274| getArgument(0): [Literal] 10 +# 1274| Type = [IntType] int +# 1274| Value = [Literal] 10 +# 1274| ValueCategory = prvalue +# 1275| getStmt(2): [ExprStmt] ExprStmt +# 1275| getExpr(): [FunctionCall] call to StaticMemberFunction +# 1275| Type = [IntType] int +# 1275| ValueCategory = prvalue +# 1275| getArgument(0): [Literal] 10 +# 1275| Type = [IntType] int +# 1275| Value = [Literal] 10 +# 1275| ValueCategory = prvalue +# 1277| getStmt(3): [DeclStmt] declaration +# 1277| getDeclarationEntry(0): [VariableDeclarationEntry] definition of a +# 1277| Type = [Struct] A +# 1278| getStmt(4): [ExprStmt] ExprStmt +# 1278| getExpr(): [FunctionCall] call to static_member +# 1278| Type = [VoidType] void +# 1278| ValueCategory = prvalue +# 1278| getQualifier(): [VariableAccess] a +# 1278| Type = [Struct] A +# 1278| ValueCategory = lvalue +# 1278| getArgument(0): [AddressOfExpr] & ... +# 1278| Type = [PointerType] A * +# 1278| ValueCategory = prvalue +# 1278| getOperand(): [VariableAccess] a +# 1278| Type = [Struct] A +# 1278| ValueCategory = lvalue +# 1278| getArgument(1): [VariableAccess] int_arg +# 1278| Type = [IntType] int +# 1278| ValueCategory = prvalue(load) +# 1279| getStmt(5): [ExprStmt] ExprStmt # 1279| getExpr(): [FunctionCall] call to static_member # 1279| Type = [VoidType] void # 1279| ValueCategory = prvalue -# 1279| getQualifier(): [AddressOfExpr] & ... +# 1279| getArgument(0): [AddressOfExpr] & ... # 1279| Type = [PointerType] A * # 1279| ValueCategory = prvalue # 1279| getOperand(): [VariableAccess] a # 1279| Type = [Struct] A # 1279| ValueCategory = lvalue -# 1279| getArgument(0): [VariableAccess] a_arg -# 1279| Type = [PointerType] A * -# 1279| ValueCategory = prvalue(load) -# 1279| getArgument(1): [AddExpr] ... + ... +# 1279| getArgument(1): [VariableAccess] int_arg # 1279| Type = [IntType] int -# 1279| ValueCategory = prvalue -# 1279| getLeftOperand(): [VariableAccess] int_arg -# 1279| Type = [IntType] int -# 1279| ValueCategory = prvalue(load) -# 1279| getRightOperand(): [Literal] 2 -# 1279| Type = [IntType] int -# 1279| Value = [Literal] 2 -# 1279| ValueCategory = prvalue -# 1279| getQualifier().getFullyConverted(): [ParenthesisExpr] (...) -# 1279| Type = [PointerType] A * -# 1279| ValueCategory = prvalue -# 1280| getStmt(7): [ExprStmt] ExprStmt -# 1280| getExpr(): [FunctionCall] call to static_member -# 1280| Type = [VoidType] void -# 1280| ValueCategory = prvalue -# 1280| getQualifier(): [PointerDereferenceExpr] * ... -# 1280| Type = [Struct] A -# 1280| ValueCategory = lvalue -# 1280| getOperand(): [VariableAccess] a_arg -# 1280| Type = [PointerType] A * -# 1280| ValueCategory = prvalue(load) -# 1280| getArgument(0): [AddressOfExpr] & ... -# 1280| Type = [PointerType] A * -# 1280| ValueCategory = prvalue -# 1280| getOperand(): [VariableAccess] a -# 1280| Type = [Struct] A -# 1280| ValueCategory = lvalue -# 1280| getArgument(1): [Literal] 99 -# 1280| Type = [IntType] int -# 1280| Value = [Literal] 99 -# 1280| ValueCategory = prvalue -# 1280| getQualifier().getFullyConverted(): [ParenthesisExpr] (...) -# 1280| Type = [Struct] A -# 1280| ValueCategory = lvalue -# 1281| getStmt(8): [ExprStmt] ExprStmt +# 1279| ValueCategory = prvalue(load) +# 1281| getStmt(6): [ExprStmt] ExprStmt # 1281| getExpr(): [FunctionCall] call to static_member # 1281| Type = [VoidType] void # 1281| ValueCategory = prvalue -# 1281| getQualifier(): [VariableAccess] a_arg +# 1281| getQualifier(): [AddressOfExpr] & ... # 1281| Type = [PointerType] A * -# 1281| ValueCategory = prvalue(load) +# 1281| ValueCategory = prvalue +# 1281| getOperand(): [VariableAccess] a +# 1281| Type = [Struct] A +# 1281| ValueCategory = lvalue # 1281| getArgument(0): [VariableAccess] a_arg # 1281| Type = [PointerType] A * # 1281| ValueCategory = prvalue(load) -# 1281| getArgument(1): [UnaryMinusExpr] - ... +# 1281| getArgument(1): [AddExpr] ... + ... # 1281| Type = [IntType] int -# 1281| Value = [UnaryMinusExpr] -1 # 1281| ValueCategory = prvalue -# 1281| getOperand(): [Literal] 1 +# 1281| getLeftOperand(): [VariableAccess] int_arg # 1281| Type = [IntType] int -# 1281| Value = [Literal] 1 +# 1281| ValueCategory = prvalue(load) +# 1281| getRightOperand(): [Literal] 2 +# 1281| Type = [IntType] int +# 1281| Value = [Literal] 2 # 1281| ValueCategory = prvalue -# 1283| getStmt(9): [ExprStmt] ExprStmt -# 1283| getExpr(): [FunctionCall] call to static_member_without_def +# 1281| getQualifier().getFullyConverted(): [ParenthesisExpr] (...) +# 1281| Type = [PointerType] A * +# 1281| ValueCategory = prvalue +# 1282| getStmt(7): [ExprStmt] ExprStmt +# 1282| getExpr(): [FunctionCall] call to static_member +# 1282| Type = [VoidType] void +# 1282| ValueCategory = prvalue +# 1282| getQualifier(): [PointerDereferenceExpr] * ... +# 1282| Type = [Struct] A +# 1282| ValueCategory = lvalue +# 1282| getOperand(): [VariableAccess] a_arg +# 1282| Type = [PointerType] A * +# 1282| ValueCategory = prvalue(load) +# 1282| getArgument(0): [AddressOfExpr] & ... +# 1282| Type = [PointerType] A * +# 1282| ValueCategory = prvalue +# 1282| getOperand(): [VariableAccess] a +# 1282| Type = [Struct] A +# 1282| ValueCategory = lvalue +# 1282| getArgument(1): [Literal] 99 +# 1282| Type = [IntType] int +# 1282| Value = [Literal] 99 +# 1282| ValueCategory = prvalue +# 1282| getQualifier().getFullyConverted(): [ParenthesisExpr] (...) +# 1282| Type = [Struct] A +# 1282| ValueCategory = lvalue +# 1283| getStmt(8): [ExprStmt] ExprStmt +# 1283| getExpr(): [FunctionCall] call to static_member # 1283| Type = [VoidType] void # 1283| ValueCategory = prvalue -# 1283| getQualifier(): [VariableAccess] a -# 1283| Type = [Struct] A -# 1283| ValueCategory = lvalue -# 1284| getStmt(10): [ExprStmt] ExprStmt -# 1284| getExpr(): [FunctionCall] call to static_member_without_def -# 1284| Type = [VoidType] void -# 1284| ValueCategory = prvalue -# 1286| getStmt(11): [ExprStmt] ExprStmt +# 1283| getQualifier(): [VariableAccess] a_arg +# 1283| Type = [PointerType] A * +# 1283| ValueCategory = prvalue(load) +# 1283| getArgument(0): [VariableAccess] a_arg +# 1283| Type = [PointerType] A * +# 1283| ValueCategory = prvalue(load) +# 1283| getArgument(1): [UnaryMinusExpr] - ... +# 1283| Type = [IntType] int +# 1283| Value = [UnaryMinusExpr] -1 +# 1283| ValueCategory = prvalue +# 1283| getOperand(): [Literal] 1 +# 1283| Type = [IntType] int +# 1283| Value = [Literal] 1 +# 1283| ValueCategory = prvalue +# 1285| getStmt(9): [ExprStmt] ExprStmt +# 1285| getExpr(): [FunctionCall] call to static_member_without_def +# 1285| Type = [VoidType] void +# 1285| ValueCategory = prvalue +# 1285| getQualifier(): [VariableAccess] a +# 1285| Type = [Struct] A +# 1285| ValueCategory = lvalue +# 1286| getStmt(10): [ExprStmt] ExprStmt # 1286| getExpr(): [FunctionCall] call to static_member_without_def # 1286| Type = [VoidType] void # 1286| ValueCategory = prvalue -# 1286| getQualifier(): [FunctionCall] call to getAnInstanceOfA -# 1286| Type = [PointerType] A * -# 1286| ValueCategory = prvalue -# 1287| getStmt(12): [ReturnStmt] return ... -# 1287| getImplicitDestructorCall(0): [DestructorCall] call to ~C -# 1287| Type = [VoidType] void -# 1287| ValueCategory = prvalue -# 1287| getQualifier(): [VariableAccess] c -# 1287| Type = [Class] C -# 1287| ValueCategory = lvalue -# 1289| [TopLevelFunction] int missingReturnValue(bool, int) -# 1289| : -# 1289| getParameter(0): [Parameter] b -# 1289| Type = [BoolType] bool -# 1289| getParameter(1): [Parameter] x -# 1289| Type = [IntType] int -# 1289| getEntryPoint(): [BlockStmt] { ... } -# 1290| getStmt(0): [IfStmt] if (...) ... -# 1290| getCondition(): [VariableAccess] b -# 1290| Type = [BoolType] bool -# 1290| ValueCategory = prvalue(load) -# 1290| getThen(): [BlockStmt] { ... } -# 1291| getStmt(0): [ReturnStmt] return ... -# 1291| getExpr(): [VariableAccess] x -# 1291| Type = [IntType] int -# 1291| ValueCategory = prvalue(load) -# 1293| getStmt(1): [ReturnStmt] return ... -# 1295| [TopLevelFunction] void returnVoid(int, int) -# 1295| : -# 1295| getParameter(0): [Parameter] x -# 1295| Type = [IntType] int -# 1295| getParameter(1): [Parameter] y -# 1295| Type = [IntType] int -# 1295| getEntryPoint(): [BlockStmt] { ... } -# 1296| getStmt(0): [ReturnStmt] return ... -# 1296| getExpr(): [FunctionCall] call to IntegerOps -# 1296| Type = [VoidType] void -# 1296| ValueCategory = prvalue -# 1296| getArgument(0): [VariableAccess] x -# 1296| Type = [IntType] int -# 1296| ValueCategory = prvalue(load) -# 1296| getArgument(1): [VariableAccess] y -# 1296| Type = [IntType] int -# 1296| ValueCategory = prvalue(load) -# 1299| [TopLevelFunction] void gccBinaryConditional(bool, int, long) -# 1299| : -# 1299| getParameter(0): [Parameter] b -# 1299| Type = [BoolType] bool -# 1299| getParameter(1): [Parameter] x -# 1299| Type = [IntType] int -# 1299| getParameter(2): [Parameter] y -# 1299| Type = [LongType] long -# 1299| getEntryPoint(): [BlockStmt] { ... } -# 1300| getStmt(0): [DeclStmt] declaration -# 1300| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z -# 1300| Type = [IntType] int -# 1300| getVariable().getInitializer(): [Initializer] initializer for z -# 1300| getExpr(): [VariableAccess] x -# 1300| Type = [IntType] int -# 1300| ValueCategory = prvalue(load) -# 1301| getStmt(1): [ExprStmt] ExprStmt -# 1301| getExpr(): [AssignExpr] ... = ... -# 1301| Type = [IntType] int -# 1301| ValueCategory = lvalue -# 1301| getLValue(): [VariableAccess] z -# 1301| Type = [IntType] int -# 1301| ValueCategory = lvalue -# 1301| getRValue(): [ConditionalExpr] ... ? ... : ... -# 1301| Type = [IntType] int -# 1301| ValueCategory = prvalue(load) -# 1301| getCondition(): [VariableAccess] b -# 1301| Type = [BoolType] bool -# 1301| ValueCategory = prvalue(load) -# 1301| getElse(): [VariableAccess] x -# 1301| Type = [IntType] int -# 1301| ValueCategory = prvalue(load) -# 1302| getStmt(2): [ExprStmt] ExprStmt -# 1302| getExpr(): [AssignExpr] ... = ... +# 1288| getStmt(11): [ExprStmt] ExprStmt +# 1288| getExpr(): [FunctionCall] call to static_member_without_def +# 1288| Type = [VoidType] void +# 1288| ValueCategory = prvalue +# 1288| getQualifier(): [FunctionCall] call to getAnInstanceOfA +# 1288| Type = [PointerType] A * +# 1288| ValueCategory = prvalue +# 1289| getStmt(12): [ReturnStmt] return ... +# 1289| getImplicitDestructorCall(0): [DestructorCall] call to ~C +# 1289| Type = [VoidType] void +# 1289| ValueCategory = prvalue +# 1289| getQualifier(): [VariableAccess] c +# 1289| Type = [Class] C +# 1289| ValueCategory = lvalue +# 1291| [TopLevelFunction] int missingReturnValue(bool, int) +# 1291| : +# 1291| getParameter(0): [Parameter] b +# 1291| Type = [BoolType] bool +# 1291| getParameter(1): [Parameter] x +# 1291| Type = [IntType] int +# 1291| getEntryPoint(): [BlockStmt] { ... } +# 1292| getStmt(0): [IfStmt] if (...) ... +# 1292| getCondition(): [VariableAccess] b +# 1292| Type = [BoolType] bool +# 1292| ValueCategory = prvalue(load) +# 1292| getThen(): [BlockStmt] { ... } +# 1293| getStmt(0): [ReturnStmt] return ... +# 1293| getExpr(): [VariableAccess] x +# 1293| Type = [IntType] int +# 1293| ValueCategory = prvalue(load) +# 1295| getStmt(1): [ReturnStmt] return ... +# 1297| [TopLevelFunction] void returnVoid(int, int) +# 1297| : +# 1297| getParameter(0): [Parameter] x +# 1297| Type = [IntType] int +# 1297| getParameter(1): [Parameter] y +# 1297| Type = [IntType] int +# 1297| getEntryPoint(): [BlockStmt] { ... } +# 1298| getStmt(0): [ReturnStmt] return ... +# 1298| getExpr(): [FunctionCall] call to IntegerOps +# 1298| Type = [VoidType] void +# 1298| ValueCategory = prvalue +# 1298| getArgument(0): [VariableAccess] x +# 1298| Type = [IntType] int +# 1298| ValueCategory = prvalue(load) +# 1298| getArgument(1): [VariableAccess] y +# 1298| Type = [IntType] int +# 1298| ValueCategory = prvalue(load) +# 1301| [TopLevelFunction] void gccBinaryConditional(bool, int, long) +# 1301| : +# 1301| getParameter(0): [Parameter] b +# 1301| Type = [BoolType] bool +# 1301| getParameter(1): [Parameter] x +# 1301| Type = [IntType] int +# 1301| getParameter(2): [Parameter] y +# 1301| Type = [LongType] long +# 1301| getEntryPoint(): [BlockStmt] { ... } +# 1302| getStmt(0): [DeclStmt] declaration +# 1302| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z # 1302| Type = [IntType] int -# 1302| ValueCategory = lvalue -# 1302| getLValue(): [VariableAccess] z -# 1302| Type = [IntType] int -# 1302| ValueCategory = lvalue -# 1302| getRValue(): [ConditionalExpr] ... ? ... : ... -# 1302| Type = [LongType] long -# 1302| ValueCategory = prvalue(load) -# 1302| getCondition(): [VariableAccess] b -# 1302| Type = [BoolType] bool +# 1302| getVariable().getInitializer(): [Initializer] initializer for z +# 1302| getExpr(): [VariableAccess] x +# 1302| Type = [IntType] int # 1302| ValueCategory = prvalue(load) -# 1302| getElse(): [VariableAccess] y -# 1302| Type = [LongType] long -# 1302| ValueCategory = prvalue(load) -# 1302| getRValue().getFullyConverted(): [CStyleCast] (int)... -# 1302| Conversion = [IntegralConversion] integral conversion -# 1302| Type = [IntType] int -# 1302| ValueCategory = prvalue -# 1303| getStmt(3): [ExprStmt] ExprStmt +# 1303| getStmt(1): [ExprStmt] ExprStmt # 1303| getExpr(): [AssignExpr] ... = ... # 1303| Type = [IntType] int # 1303| ValueCategory = lvalue @@ -10625,17 +10595,13 @@ ir.cpp: # 1303| getRValue(): [ConditionalExpr] ... ? ... : ... # 1303| Type = [IntType] int # 1303| ValueCategory = prvalue(load) -# 1303| getCondition(): [VariableAccess] x -# 1303| Type = [IntType] int +# 1303| getCondition(): [VariableAccess] b +# 1303| Type = [BoolType] bool # 1303| ValueCategory = prvalue(load) # 1303| getElse(): [VariableAccess] x # 1303| Type = [IntType] int # 1303| ValueCategory = prvalue(load) -# 1303| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1303| Conversion = [BoolConversion] conversion to bool -# 1303| Type = [BoolType] bool -# 1303| ValueCategory = prvalue -# 1304| getStmt(4): [ExprStmt] ExprStmt +# 1304| getStmt(2): [ExprStmt] ExprStmt # 1304| getExpr(): [AssignExpr] ... = ... # 1304| Type = [IntType] int # 1304| ValueCategory = lvalue @@ -10645,21 +10611,17 @@ ir.cpp: # 1304| getRValue(): [ConditionalExpr] ... ? ... : ... # 1304| Type = [LongType] long # 1304| ValueCategory = prvalue(load) -# 1304| getCondition(): [VariableAccess] x -# 1304| Type = [IntType] int +# 1304| getCondition(): [VariableAccess] b +# 1304| Type = [BoolType] bool # 1304| ValueCategory = prvalue(load) # 1304| getElse(): [VariableAccess] y # 1304| Type = [LongType] long # 1304| ValueCategory = prvalue(load) -# 1304| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1304| Conversion = [BoolConversion] conversion to bool -# 1304| Type = [BoolType] bool -# 1304| ValueCategory = prvalue # 1304| getRValue().getFullyConverted(): [CStyleCast] (int)... # 1304| Conversion = [IntegralConversion] integral conversion # 1304| Type = [IntType] int # 1304| ValueCategory = prvalue -# 1305| getStmt(5): [ExprStmt] ExprStmt +# 1305| getStmt(3): [ExprStmt] ExprStmt # 1305| getExpr(): [AssignExpr] ... = ... # 1305| Type = [IntType] int # 1305| ValueCategory = lvalue @@ -10667,10 +10629,10 @@ ir.cpp: # 1305| Type = [IntType] int # 1305| ValueCategory = lvalue # 1305| getRValue(): [ConditionalExpr] ... ? ... : ... -# 1305| Type = [LongType] long +# 1305| Type = [IntType] int # 1305| ValueCategory = prvalue(load) -# 1305| getCondition(): [VariableAccess] y -# 1305| Type = [LongType] long +# 1305| getCondition(): [VariableAccess] x +# 1305| Type = [IntType] int # 1305| ValueCategory = prvalue(load) # 1305| getElse(): [VariableAccess] x # 1305| Type = [IntType] int @@ -10679,15 +10641,7 @@ ir.cpp: # 1305| Conversion = [BoolConversion] conversion to bool # 1305| Type = [BoolType] bool # 1305| ValueCategory = prvalue -# 1305| getElse().getFullyConverted(): [CStyleCast] (long)... -# 1305| Conversion = [IntegralConversion] integral conversion -# 1305| Type = [LongType] long -# 1305| ValueCategory = prvalue -# 1305| getRValue().getFullyConverted(): [CStyleCast] (int)... -# 1305| Conversion = [IntegralConversion] integral conversion -# 1305| Type = [IntType] int -# 1305| ValueCategory = prvalue -# 1306| getStmt(6): [ExprStmt] ExprStmt +# 1306| getStmt(4): [ExprStmt] ExprStmt # 1306| getExpr(): [AssignExpr] ... = ... # 1306| Type = [IntType] int # 1306| ValueCategory = lvalue @@ -10697,8 +10651,8 @@ ir.cpp: # 1306| getRValue(): [ConditionalExpr] ... ? ... : ... # 1306| Type = [LongType] long # 1306| ValueCategory = prvalue(load) -# 1306| getCondition(): [VariableAccess] y -# 1306| Type = [LongType] long +# 1306| getCondition(): [VariableAccess] x +# 1306| Type = [IntType] int # 1306| ValueCategory = prvalue(load) # 1306| getElse(): [VariableAccess] y # 1306| Type = [LongType] long @@ -10711,7 +10665,35 @@ ir.cpp: # 1306| Conversion = [IntegralConversion] integral conversion # 1306| Type = [IntType] int # 1306| ValueCategory = prvalue -# 1308| getStmt(7): [ExprStmt] ExprStmt +# 1307| getStmt(5): [ExprStmt] ExprStmt +# 1307| getExpr(): [AssignExpr] ... = ... +# 1307| Type = [IntType] int +# 1307| ValueCategory = lvalue +# 1307| getLValue(): [VariableAccess] z +# 1307| Type = [IntType] int +# 1307| ValueCategory = lvalue +# 1307| getRValue(): [ConditionalExpr] ... ? ... : ... +# 1307| Type = [LongType] long +# 1307| ValueCategory = prvalue(load) +# 1307| getCondition(): [VariableAccess] y +# 1307| Type = [LongType] long +# 1307| ValueCategory = prvalue(load) +# 1307| getElse(): [VariableAccess] x +# 1307| Type = [IntType] int +# 1307| ValueCategory = prvalue(load) +# 1307| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 1307| Conversion = [BoolConversion] conversion to bool +# 1307| Type = [BoolType] bool +# 1307| ValueCategory = prvalue +# 1307| getElse().getFullyConverted(): [CStyleCast] (long)... +# 1307| Conversion = [IntegralConversion] integral conversion +# 1307| Type = [LongType] long +# 1307| ValueCategory = prvalue +# 1307| getRValue().getFullyConverted(): [CStyleCast] (int)... +# 1307| Conversion = [IntegralConversion] integral conversion +# 1307| Type = [IntType] int +# 1307| ValueCategory = prvalue +# 1308| getStmt(6): [ExprStmt] ExprStmt # 1308| getExpr(): [AssignExpr] ... = ... # 1308| Type = [IntType] int # 1308| ValueCategory = lvalue @@ -10719,319 +10701,303 @@ ir.cpp: # 1308| Type = [IntType] int # 1308| ValueCategory = lvalue # 1308| getRValue(): [ConditionalExpr] ... ? ... : ... -# 1308| Type = [IntType] int +# 1308| Type = [LongType] long # 1308| ValueCategory = prvalue(load) -# 1308| getCondition(): [LogicalOrExpr] ... || ... -# 1308| Type = [BoolType] bool -# 1308| ValueCategory = prvalue -# 1308| getLeftOperand(): [LogicalAndExpr] ... && ... -# 1308| Type = [BoolType] bool -# 1308| ValueCategory = prvalue -# 1308| getLeftOperand(): [VariableAccess] x -# 1308| Type = [IntType] int -# 1308| ValueCategory = prvalue(load) -# 1308| getRightOperand(): [VariableAccess] b -# 1308| Type = [BoolType] bool -# 1308| ValueCategory = prvalue(load) -# 1308| getLeftOperand().getFullyConverted(): [CStyleCast] (bool)... -# 1308| Conversion = [BoolConversion] conversion to bool -# 1308| Type = [BoolType] bool -# 1308| ValueCategory = prvalue -# 1308| getRightOperand(): [VariableAccess] y -# 1308| Type = [LongType] long -# 1308| ValueCategory = prvalue(load) -# 1308| getRightOperand().getFullyConverted(): [CStyleCast] (bool)... -# 1308| Conversion = [BoolConversion] conversion to bool -# 1308| Type = [BoolType] bool -# 1308| ValueCategory = prvalue -# 1308| getElse(): [VariableAccess] x -# 1308| Type = [IntType] int +# 1308| getCondition(): [VariableAccess] y +# 1308| Type = [LongType] long # 1308| ValueCategory = prvalue(load) -# 1308| getCondition().getFullyConverted(): [ParenthesisExpr] (...) +# 1308| getElse(): [VariableAccess] y +# 1308| Type = [LongType] long +# 1308| ValueCategory = prvalue(load) +# 1308| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 1308| Conversion = [BoolConversion] conversion to bool # 1308| Type = [BoolType] bool # 1308| ValueCategory = prvalue -# 1309| getStmt(8): [ReturnStmt] return ... -# 1311| [TopLevelFunction] bool predicateA() -# 1311| : -# 1312| [TopLevelFunction] bool predicateB() -# 1312| : -# 1314| [TopLevelFunction] int shortCircuitConditional(int, int) +# 1308| getRValue().getFullyConverted(): [CStyleCast] (int)... +# 1308| Conversion = [IntegralConversion] integral conversion +# 1308| Type = [IntType] int +# 1308| ValueCategory = prvalue +# 1310| getStmt(7): [ExprStmt] ExprStmt +# 1310| getExpr(): [AssignExpr] ... = ... +# 1310| Type = [IntType] int +# 1310| ValueCategory = lvalue +# 1310| getLValue(): [VariableAccess] z +# 1310| Type = [IntType] int +# 1310| ValueCategory = lvalue +# 1310| getRValue(): [ConditionalExpr] ... ? ... : ... +# 1310| Type = [IntType] int +# 1310| ValueCategory = prvalue(load) +# 1310| getCondition(): [LogicalOrExpr] ... || ... +# 1310| Type = [BoolType] bool +# 1310| ValueCategory = prvalue +# 1310| getLeftOperand(): [LogicalAndExpr] ... && ... +# 1310| Type = [BoolType] bool +# 1310| ValueCategory = prvalue +# 1310| getLeftOperand(): [VariableAccess] x +# 1310| Type = [IntType] int +# 1310| ValueCategory = prvalue(load) +# 1310| getRightOperand(): [VariableAccess] b +# 1310| Type = [BoolType] bool +# 1310| ValueCategory = prvalue(load) +# 1310| getLeftOperand().getFullyConverted(): [CStyleCast] (bool)... +# 1310| Conversion = [BoolConversion] conversion to bool +# 1310| Type = [BoolType] bool +# 1310| ValueCategory = prvalue +# 1310| getRightOperand(): [VariableAccess] y +# 1310| Type = [LongType] long +# 1310| ValueCategory = prvalue(load) +# 1310| getRightOperand().getFullyConverted(): [CStyleCast] (bool)... +# 1310| Conversion = [BoolConversion] conversion to bool +# 1310| Type = [BoolType] bool +# 1310| ValueCategory = prvalue +# 1310| getElse(): [VariableAccess] x +# 1310| Type = [IntType] int +# 1310| ValueCategory = prvalue(load) +# 1310| getCondition().getFullyConverted(): [ParenthesisExpr] (...) +# 1310| Type = [BoolType] bool +# 1310| ValueCategory = prvalue +# 1311| getStmt(8): [ReturnStmt] return ... +# 1313| [TopLevelFunction] bool predicateA() +# 1313| : +# 1314| [TopLevelFunction] bool predicateB() # 1314| : -# 1314| getParameter(0): [Parameter] x -# 1314| Type = [IntType] int -# 1314| getParameter(1): [Parameter] y -# 1314| Type = [IntType] int -# 1314| getEntryPoint(): [BlockStmt] { ... } -# 1315| getStmt(0): [ReturnStmt] return ... -# 1315| getExpr(): [ConditionalExpr] ... ? ... : ... -# 1315| Type = [IntType] int -# 1315| ValueCategory = prvalue(load) -# 1315| getCondition(): [LogicalAndExpr] ... && ... -# 1315| Type = [BoolType] bool -# 1315| ValueCategory = prvalue -# 1315| getLeftOperand(): [FunctionCall] call to predicateA -# 1315| Type = [BoolType] bool -# 1315| ValueCategory = prvalue -# 1315| getRightOperand(): [FunctionCall] call to predicateB -# 1315| Type = [BoolType] bool -# 1315| ValueCategory = prvalue -# 1315| getThen(): [VariableAccess] x -# 1315| Type = [IntType] int -# 1315| ValueCategory = prvalue(load) -# 1315| getElse(): [VariableAccess] y -# 1315| Type = [IntType] int -# 1315| ValueCategory = prvalue(load) -# 1318| [Operator,TopLevelFunction] void* operator new(size_t, void*) -# 1318| : -# 1318| getParameter(0): [Parameter] (unnamed parameter 0) -# 1318| Type = [CTypedefType,Size_t] size_t -# 1318| getParameter(1): [Parameter] (unnamed parameter 1) -# 1318| Type = [VoidPointerType] void * -# 1320| [TopLevelFunction] void f(int*) +# 1316| [TopLevelFunction] int shortCircuitConditional(int, int) +# 1316| : +# 1316| getParameter(0): [Parameter] x +# 1316| Type = [IntType] int +# 1316| getParameter(1): [Parameter] y +# 1316| Type = [IntType] int +# 1316| getEntryPoint(): [BlockStmt] { ... } +# 1317| getStmt(0): [ReturnStmt] return ... +# 1317| getExpr(): [ConditionalExpr] ... ? ... : ... +# 1317| Type = [IntType] int +# 1317| ValueCategory = prvalue(load) +# 1317| getCondition(): [LogicalAndExpr] ... && ... +# 1317| Type = [BoolType] bool +# 1317| ValueCategory = prvalue +# 1317| getLeftOperand(): [FunctionCall] call to predicateA +# 1317| Type = [BoolType] bool +# 1317| ValueCategory = prvalue +# 1317| getRightOperand(): [FunctionCall] call to predicateB +# 1317| Type = [BoolType] bool +# 1317| ValueCategory = prvalue +# 1317| getThen(): [VariableAccess] x +# 1317| Type = [IntType] int +# 1317| ValueCategory = prvalue(load) +# 1317| getElse(): [VariableAccess] y +# 1317| Type = [IntType] int +# 1317| ValueCategory = prvalue(load) +# 1320| [Operator,TopLevelFunction] void* operator new(size_t, void*) # 1320| : -# 1320| getParameter(0): [Parameter] p -# 1320| Type = [IntPointerType] int * -# 1321| getEntryPoint(): [BlockStmt] { ... } -# 1322| getStmt(0): [ExprStmt] ExprStmt -# 1322| getExpr(): [NewExpr] new -# 1322| Type = [IntPointerType] int * -# 1322| ValueCategory = prvalue -# 1322| getAllocatorCall(): [FunctionCall] call to operator new -# 1322| Type = [VoidPointerType] void * -# 1322| ValueCategory = prvalue -# 1322| getArgument(0): [ErrorExpr] -# 1322| Type = [LongType] unsigned long -# 1322| ValueCategory = prvalue -# 1322| getArgument(1): [VariableAccess] p -# 1322| Type = [IntPointerType] int * -# 1322| ValueCategory = prvalue(load) -# 1322| getArgument(1).getFullyConverted(): [CStyleCast] (void *)... -# 1322| Conversion = [PointerConversion] pointer conversion -# 1322| Type = [VoidPointerType] void * -# 1322| ValueCategory = prvalue -# 1323| getStmt(1): [ReturnStmt] return ... -# 1326| [FunctionTemplateInstantiation,TopLevelFunction] Point defaultConstruct() -# 1326| : -# 1326| getEntryPoint(): [BlockStmt] { ... } -# 1327| getStmt(0): [ReturnStmt] return ... -# 1327| getExpr(): [Literal] 0 -# 1327| Type = [Struct] Point -# 1327| Value = [Literal] 0 -# 1327| ValueCategory = prvalue -# 1326| [FunctionTemplateInstantiation,TopLevelFunction] String defaultConstruct() -# 1326| : -# 1326| getEntryPoint(): [BlockStmt] { ... } -# 1327| getStmt(0): [ReturnStmt] return ... -# 1327| getExpr(): [ConstructorCall] call to String -# 1327| Type = [VoidType] void -# 1327| ValueCategory = prvalue -# 1326| [TemplateFunction,TopLevelFunction] T defaultConstruct() -# 1326| : -# 1326| getEntryPoint(): [BlockStmt] { ... } -# 1327| getStmt(0): [ReturnStmt] return ... -# 1327| getExpr(): [Literal] 0 -# 1327| Type = [TemplateParameter] T -# 1327| Value = [Literal] 0 -# 1327| ValueCategory = prvalue -# 1327| getExpr().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 1327| Type = [TemplateParameter] T -# 1327| ValueCategory = prvalue(load) -# 1326| [FunctionTemplateInstantiation,TopLevelFunction] copy_constructor defaultConstruct() -# 1326| : -# 1326| getEntryPoint(): [BlockStmt] { ... } -# 1327| getStmt(0): [ReturnStmt] return ... -# 1327| getExpr(): [ConstructorCall] call to copy_constructor -# 1327| Type = [VoidType] void -# 1327| ValueCategory = prvalue -# 1326| [FunctionTemplateInstantiation,TopLevelFunction] destructor_only defaultConstruct() -# 1326| : -# 1326| getEntryPoint(): [BlockStmt] { ... } -# 1327| getStmt(0): [ReturnStmt] return ... -# 1327| getExpr(): [Literal] 0 -# 1327| Type = [Class] destructor_only -# 1327| Value = [Literal] 0 -# 1327| ValueCategory = prvalue -# 1330| [CopyAssignmentOperator] constructor_only& constructor_only::operator=(constructor_only const&) -# 1330| : +# 1320| getParameter(0): [Parameter] (unnamed parameter 0) +# 1320| Type = [CTypedefType,Size_t] size_t +# 1320| getParameter(1): [Parameter] (unnamed parameter 1) +# 1320| Type = [VoidPointerType] void * +# 1322| [TopLevelFunction] void f(int*) +# 1322| : +# 1322| getParameter(0): [Parameter] p +# 1322| Type = [IntPointerType] int * +# 1323| getEntryPoint(): [BlockStmt] { ... } +# 1324| getStmt(0): [ExprStmt] ExprStmt +# 1324| getExpr(): [NewExpr] new +# 1324| Type = [IntPointerType] int * +# 1324| ValueCategory = prvalue +# 1324| getAllocatorCall(): [FunctionCall] call to operator new +# 1324| Type = [VoidPointerType] void * +# 1324| ValueCategory = prvalue +# 1324| getArgument(0): [ErrorExpr] +# 1324| Type = [LongType] unsigned long +# 1324| ValueCategory = prvalue +# 1324| getArgument(1): [VariableAccess] p +# 1324| Type = [IntPointerType] int * +# 1324| ValueCategory = prvalue(load) +# 1324| getArgument(1).getFullyConverted(): [CStyleCast] (void *)... +# 1324| Conversion = [PointerConversion] pointer conversion +# 1324| Type = [VoidPointerType] void * +# 1324| ValueCategory = prvalue +# 1325| getStmt(1): [ReturnStmt] return ... +# 1328| [FunctionTemplateInstantiation,TopLevelFunction] Point defaultConstruct() +# 1328| : +# 1328| getEntryPoint(): [BlockStmt] { ... } +# 1329| getStmt(0): [ReturnStmt] return ... +# 1329| getExpr(): [Literal] 0 +# 1329| Type = [Struct] Point +# 1329| Value = [Literal] 0 +# 1329| ValueCategory = prvalue +# 1328| [FunctionTemplateInstantiation,TopLevelFunction] String defaultConstruct() +# 1328| : +# 1328| getEntryPoint(): [BlockStmt] { ... } +# 1329| getStmt(0): [ReturnStmt] return ... +# 1329| getExpr(): [ConstructorCall] call to String +# 1329| Type = [VoidType] void +# 1329| ValueCategory = prvalue +# 1328| [TemplateFunction,TopLevelFunction] T defaultConstruct() +# 1328| : +# 1328| getEntryPoint(): [BlockStmt] { ... } +# 1329| getStmt(0): [ReturnStmt] return ... +# 1329| getExpr(): [Literal] 0 +# 1329| Type = [TemplateParameter] T +# 1329| Value = [Literal] 0 +# 1329| ValueCategory = prvalue +# 1329| getExpr().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 1329| Type = [TemplateParameter] T +# 1329| ValueCategory = prvalue(load) +# 1328| [FunctionTemplateInstantiation,TopLevelFunction] copy_constructor defaultConstruct() +# 1328| : +# 1328| getEntryPoint(): [BlockStmt] { ... } +# 1329| getStmt(0): [ReturnStmt] return ... +# 1329| getExpr(): [ConstructorCall] call to copy_constructor +# 1329| Type = [VoidType] void +# 1329| ValueCategory = prvalue +# 1328| [FunctionTemplateInstantiation,TopLevelFunction] destructor_only defaultConstruct() +# 1328| : +# 1328| getEntryPoint(): [BlockStmt] { ... } +# 1329| getStmt(0): [ReturnStmt] return ... +# 1329| getExpr(): [Literal] 0 +# 1329| Type = [Class] destructor_only +# 1329| Value = [Literal] 0 +# 1329| ValueCategory = prvalue +# 1332| [CopyAssignmentOperator] constructor_only& constructor_only::operator=(constructor_only const&) +# 1332| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const constructor_only & -# 1330| [MoveAssignmentOperator] constructor_only& constructor_only::operator=(constructor_only&&) -# 1330| : +# 1332| [MoveAssignmentOperator] constructor_only& constructor_only::operator=(constructor_only&&) +# 1332| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] constructor_only && -# 1330| [CopyConstructor] void constructor_only::constructor_only(constructor_only const&) -# 1330| : +# 1332| [CopyConstructor] void constructor_only::constructor_only(constructor_only const&) +# 1332| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const constructor_only & -# 1330| [MoveConstructor] void constructor_only::constructor_only(constructor_only&&) -# 1330| : +# 1332| [MoveConstructor] void constructor_only::constructor_only(constructor_only&&) +# 1332| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] constructor_only && -# 1335| [Constructor] void constructor_only::constructor_only(int) -# 1335| : -# 1335| getParameter(0): [Parameter] x -# 1335| Type = [IntType] int -# 1338| [CopyAssignmentOperator] copy_constructor& copy_constructor::operator=(copy_constructor const&) -# 1338| : +# 1337| [Constructor] void constructor_only::constructor_only(int) +# 1337| : +# 1337| getParameter(0): [Parameter] x +# 1337| Type = [IntType] int +# 1340| [CopyAssignmentOperator] copy_constructor& copy_constructor::operator=(copy_constructor const&) +# 1340| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const copy_constructor & -# 1343| [Constructor] void copy_constructor::copy_constructor() -# 1343| : -# 1344| [CopyConstructor] void copy_constructor::copy_constructor(copy_constructor const&) -# 1344| : -# 1344| getParameter(0): [Parameter] (unnamed parameter 0) -# 1344| Type = [LValueReferenceType] const copy_constructor & -# 1346| [MemberFunction] void copy_constructor::method() +# 1345| [Constructor] void copy_constructor::copy_constructor() +# 1345| : +# 1346| [CopyConstructor] void copy_constructor::copy_constructor(copy_constructor const&) # 1346| : -# 1349| [CopyAssignmentOperator] destructor_only& destructor_only::operator=(destructor_only const&) -# 1349| : +# 1346| getParameter(0): [Parameter] (unnamed parameter 0) +# 1346| Type = [LValueReferenceType] const copy_constructor & +# 1348| [MemberFunction] void copy_constructor::method() +# 1348| : +# 1351| [CopyAssignmentOperator] destructor_only& destructor_only::operator=(destructor_only const&) +# 1351| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const destructor_only & -# 1349| [Constructor] void destructor_only::destructor_only() -# 1349| : -# 1351| [Destructor] void destructor_only::~destructor_only() +# 1351| [Constructor] void destructor_only::destructor_only() # 1351| : -# 1353| [MemberFunction] void destructor_only::method() +# 1353| [Destructor] void destructor_only::~destructor_only() # 1353| : -# 1357| [FunctionTemplateInstantiation,TopLevelFunction] void acceptRef(Point const&) -# 1357| : -# 1357| getParameter(0): [Parameter] v -# 1357| Type = [LValueReferenceType] const Point & -# 1357| [FunctionTemplateInstantiation,TopLevelFunction] void acceptRef(String const&) -# 1357| : -# 1357| getParameter(0): [Parameter] v -# 1357| Type = [LValueReferenceType] const String & -# 1357| [TemplateFunction,TopLevelFunction] void acceptRef(T const&) -# 1357| : -# 1357| getParameter(0): [Parameter] v -# 1357| Type = [LValueReferenceType] const T & -# 1357| [FunctionTemplateInstantiation,TopLevelFunction] void acceptRef(copy_constructor const&) -# 1357| : -# 1357| getParameter(0): [Parameter] v -# 1357| Type = [LValueReferenceType] const copy_constructor & -# 1357| [FunctionTemplateInstantiation,TopLevelFunction] void acceptRef(destructor_only const&) -# 1357| : -# 1357| getParameter(0): [Parameter] v -# 1357| Type = [LValueReferenceType] const destructor_only & -# 1360| [FunctionTemplateInstantiation,TopLevelFunction] void acceptValue(Point) -# 1360| : -# 1360| getParameter(0): [Parameter] v -# 1360| Type = [Struct] Point -# 1360| [FunctionTemplateInstantiation,TopLevelFunction] void acceptValue(String) -# 1360| : -# 1360| getParameter(0): [Parameter] v -# 1360| Type = [Struct] String -# 1360| [TemplateFunction,TopLevelFunction] void acceptValue(T) -# 1360| : -# 1360| getParameter(0): [Parameter] v -# 1360| Type = [TemplateParameter] T -# 1360| [FunctionTemplateInstantiation,TopLevelFunction] void acceptValue(copy_constructor) -# 1360| : -# 1360| getParameter(0): [Parameter] v -# 1360| Type = [Class] copy_constructor -# 1360| [FunctionTemplateInstantiation,TopLevelFunction] void acceptValue(destructor_only) -# 1360| : -# 1360| getParameter(0): [Parameter] v -# 1360| Type = [Class] destructor_only -# 1363| [FunctionTemplateInstantiation,TopLevelFunction] POD_Derived returnValue() -# 1363| : -# 1363| [FunctionTemplateInstantiation,TopLevelFunction] POD_Middle returnValue() -# 1363| : -# 1363| [FunctionTemplateInstantiation,TopLevelFunction] Point returnValue() -# 1363| : -# 1363| [FunctionTemplateInstantiation,TopLevelFunction] String returnValue() -# 1363| : -# 1363| [TemplateFunction,TopLevelFunction] T returnValue() -# 1363| : -# 1363| [FunctionTemplateInstantiation,TopLevelFunction] UnusualFields returnValue() -# 1363| : -# 1363| [FunctionTemplateInstantiation,TopLevelFunction] copy_constructor returnValue() -# 1363| : -# 1363| [FunctionTemplateInstantiation,TopLevelFunction] destructor_only returnValue() -# 1363| : -# 1365| [TopLevelFunction] void temporary_string() +# 1355| [MemberFunction] void destructor_only::method() +# 1355| : +# 1359| [FunctionTemplateInstantiation,TopLevelFunction] void acceptRef(Point const&) +# 1359| : +# 1359| getParameter(0): [Parameter] v +# 1359| Type = [LValueReferenceType] const Point & +# 1359| [FunctionTemplateInstantiation,TopLevelFunction] void acceptRef(String const&) +# 1359| : +# 1359| getParameter(0): [Parameter] v +# 1359| Type = [LValueReferenceType] const String & +# 1359| [TemplateFunction,TopLevelFunction] void acceptRef(T const&) +# 1359| : +# 1359| getParameter(0): [Parameter] v +# 1359| Type = [LValueReferenceType] const T & +# 1359| [FunctionTemplateInstantiation,TopLevelFunction] void acceptRef(copy_constructor const&) +# 1359| : +# 1359| getParameter(0): [Parameter] v +# 1359| Type = [LValueReferenceType] const copy_constructor & +# 1359| [FunctionTemplateInstantiation,TopLevelFunction] void acceptRef(destructor_only const&) +# 1359| : +# 1359| getParameter(0): [Parameter] v +# 1359| Type = [LValueReferenceType] const destructor_only & +# 1362| [FunctionTemplateInstantiation,TopLevelFunction] void acceptValue(Point) +# 1362| : +# 1362| getParameter(0): [Parameter] v +# 1362| Type = [Struct] Point +# 1362| [FunctionTemplateInstantiation,TopLevelFunction] void acceptValue(String) +# 1362| : +# 1362| getParameter(0): [Parameter] v +# 1362| Type = [Struct] String +# 1362| [TemplateFunction,TopLevelFunction] void acceptValue(T) +# 1362| : +# 1362| getParameter(0): [Parameter] v +# 1362| Type = [TemplateParameter] T +# 1362| [FunctionTemplateInstantiation,TopLevelFunction] void acceptValue(copy_constructor) +# 1362| : +# 1362| getParameter(0): [Parameter] v +# 1362| Type = [Class] copy_constructor +# 1362| [FunctionTemplateInstantiation,TopLevelFunction] void acceptValue(destructor_only) +# 1362| : +# 1362| getParameter(0): [Parameter] v +# 1362| Type = [Class] destructor_only +# 1365| [FunctionTemplateInstantiation,TopLevelFunction] POD_Derived returnValue() # 1365| : -# 1365| getEntryPoint(): [BlockStmt] { ... } -# 1366| getStmt(0): [DeclStmt] declaration -# 1366| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s -# 1366| Type = [Struct] String -# 1366| getVariable().getInitializer(): [Initializer] initializer for s -# 1366| getExpr(): [FunctionCall] call to returnValue -# 1366| Type = [Struct] String -# 1366| ValueCategory = prvalue -# 1367| getStmt(1): [DeclStmt] declaration -# 1367| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rs -# 1367| Type = [LValueReferenceType] const String & -# 1367| getVariable().getInitializer(): [Initializer] initializer for rs -# 1367| getExpr(): [FunctionCall] call to returnValue -# 1367| Type = [Struct] String -# 1367| ValueCategory = prvalue -# 1367| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1367| Type = [LValueReferenceType] const String & -# 1367| ValueCategory = prvalue -# 1367| getExpr(): [CStyleCast] (const String)... -# 1367| Conversion = [GlvalueConversion] glvalue conversion -# 1367| Type = [SpecifiedType] const String -# 1367| ValueCategory = lvalue -# 1367| getExpr(): [TemporaryObjectExpr] temporary object -# 1367| Type = [Struct] String -# 1367| ValueCategory = lvalue -# 1369| getStmt(2): [ExprStmt] ExprStmt -# 1369| getExpr(): [FunctionCall] call to acceptRef -# 1369| Type = [VoidType] void -# 1369| ValueCategory = prvalue -# 1369| getArgument(0): [VariableAccess] s -# 1369| Type = [Struct] String -# 1369| ValueCategory = lvalue -# 1369| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 1369| Type = [LValueReferenceType] const String & -# 1369| ValueCategory = prvalue -# 1369| getExpr(): [CStyleCast] (const String)... -# 1369| Conversion = [GlvalueConversion] glvalue conversion -# 1369| Type = [SpecifiedType] const String -# 1369| ValueCategory = lvalue -# 1370| getStmt(3): [ExprStmt] ExprStmt -# 1370| getExpr(): [FunctionCall] call to acceptRef -# 1370| Type = [VoidType] void -# 1370| ValueCategory = prvalue -# 1370| getArgument(0): [ConstructorCall] call to String -# 1370| Type = [VoidType] void -# 1370| ValueCategory = prvalue -# 1370| getArgument(0): foo -# 1370| Type = [ArrayType] const char[4] -# 1370| Value = [StringLiteral] "foo" -# 1370| ValueCategory = lvalue -# 1370| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 1370| Type = [PointerType] const char * -# 1370| ValueCategory = prvalue -# 1370| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 1370| Type = [LValueReferenceType] const String & -# 1370| ValueCategory = prvalue -# 1370| getExpr(): [TemporaryObjectExpr] temporary object -# 1370| Type = [SpecifiedType] const String -# 1370| ValueCategory = lvalue -# 1371| getStmt(4): [ExprStmt] ExprStmt -# 1371| getExpr(): [FunctionCall] call to acceptValue +# 1365| [FunctionTemplateInstantiation,TopLevelFunction] POD_Middle returnValue() +# 1365| : +# 1365| [FunctionTemplateInstantiation,TopLevelFunction] Point returnValue() +# 1365| : +# 1365| [FunctionTemplateInstantiation,TopLevelFunction] String returnValue() +# 1365| : +# 1365| [TemplateFunction,TopLevelFunction] T returnValue() +# 1365| : +# 1365| [FunctionTemplateInstantiation,TopLevelFunction] UnusualFields returnValue() +# 1365| : +# 1365| [FunctionTemplateInstantiation,TopLevelFunction] copy_constructor returnValue() +# 1365| : +# 1365| [FunctionTemplateInstantiation,TopLevelFunction] destructor_only returnValue() +# 1365| : +# 1367| [TopLevelFunction] void temporary_string() +# 1367| : +# 1367| getEntryPoint(): [BlockStmt] { ... } +# 1368| getStmt(0): [DeclStmt] declaration +# 1368| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s +# 1368| Type = [Struct] String +# 1368| getVariable().getInitializer(): [Initializer] initializer for s +# 1368| getExpr(): [FunctionCall] call to returnValue +# 1368| Type = [Struct] String +# 1368| ValueCategory = prvalue +# 1369| getStmt(1): [DeclStmt] declaration +# 1369| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rs +# 1369| Type = [LValueReferenceType] const String & +# 1369| getVariable().getInitializer(): [Initializer] initializer for rs +# 1369| getExpr(): [FunctionCall] call to returnValue +# 1369| Type = [Struct] String +# 1369| ValueCategory = prvalue +# 1369| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1369| Type = [LValueReferenceType] const String & +# 1369| ValueCategory = prvalue +# 1369| getExpr(): [CStyleCast] (const String)... +# 1369| Conversion = [GlvalueConversion] glvalue conversion +# 1369| Type = [SpecifiedType] const String +# 1369| ValueCategory = lvalue +# 1369| getExpr(): [TemporaryObjectExpr] temporary object +# 1369| Type = [Struct] String +# 1369| ValueCategory = lvalue +# 1371| getStmt(2): [ExprStmt] ExprStmt +# 1371| getExpr(): [FunctionCall] call to acceptRef # 1371| Type = [VoidType] void # 1371| ValueCategory = prvalue -# 1371| getArgument(0): [ConstructorCall] call to String -# 1371| Type = [VoidType] void -# 1371| ValueCategory = prvalue -# 1371| getArgument(0): [VariableAccess] s -# 1371| Type = [Struct] String -# 1371| ValueCategory = lvalue -# 1371| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 1371| Type = [LValueReferenceType] const String & -# 1371| ValueCategory = prvalue -# 1371| getExpr(): [CStyleCast] (const String)... -# 1371| Conversion = [GlvalueConversion] glvalue conversion -# 1371| Type = [SpecifiedType] const String -# 1371| ValueCategory = lvalue -# 1371| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object +# 1371| getArgument(0): [VariableAccess] s # 1371| Type = [Struct] String # 1371| ValueCategory = lvalue -# 1372| getStmt(5): [ExprStmt] ExprStmt -# 1372| getExpr(): [FunctionCall] call to acceptValue +# 1371| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 1371| Type = [LValueReferenceType] const String & +# 1371| ValueCategory = prvalue +# 1371| getExpr(): [CStyleCast] (const String)... +# 1371| Conversion = [GlvalueConversion] glvalue conversion +# 1371| Type = [SpecifiedType] const String +# 1371| ValueCategory = lvalue +# 1372| getStmt(3): [ExprStmt] ExprStmt +# 1372| getExpr(): [FunctionCall] call to acceptRef # 1372| Type = [VoidType] void # 1372| ValueCategory = prvalue # 1372| getArgument(0): [ConstructorCall] call to String @@ -11044,468 +11010,508 @@ ir.cpp: # 1372| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion # 1372| Type = [PointerType] const char * # 1372| ValueCategory = prvalue -# 1372| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object -# 1372| Type = [Struct] String -# 1372| ValueCategory = lvalue -# 1373| getStmt(6): [ExprStmt] ExprStmt -# 1373| getExpr(): [FunctionCall] call to c_str -# 1373| Type = [PointerType] const char * +# 1372| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 1372| Type = [LValueReferenceType] const String & +# 1372| ValueCategory = prvalue +# 1372| getExpr(): [TemporaryObjectExpr] temporary object +# 1372| Type = [SpecifiedType] const String +# 1372| ValueCategory = lvalue +# 1373| getStmt(4): [ExprStmt] ExprStmt +# 1373| getExpr(): [FunctionCall] call to acceptValue +# 1373| Type = [VoidType] void # 1373| ValueCategory = prvalue -# 1373| getQualifier(): [ConstructorCall] call to String +# 1373| getArgument(0): [ConstructorCall] call to String # 1373| Type = [VoidType] void # 1373| ValueCategory = prvalue -# 1373| getQualifier().getFullyConverted(): [CStyleCast] (const String)... -# 1373| Conversion = [PrvalueAdjustmentConversion] prvalue adjustment conversion -# 1373| Type = [SpecifiedType] const String -# 1373| ValueCategory = prvalue -# 1373| getExpr(): [TemporaryObjectExpr] temporary object +# 1373| getArgument(0): [VariableAccess] s # 1373| Type = [Struct] String -# 1373| ValueCategory = prvalue(load) -# 1374| getStmt(7): [ExprStmt] ExprStmt -# 1374| getExpr(): [FunctionCall] call to c_str -# 1374| Type = [PointerType] const char * +# 1373| ValueCategory = lvalue +# 1373| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 1373| Type = [LValueReferenceType] const String & +# 1373| ValueCategory = prvalue +# 1373| getExpr(): [CStyleCast] (const String)... +# 1373| Conversion = [GlvalueConversion] glvalue conversion +# 1373| Type = [SpecifiedType] const String +# 1373| ValueCategory = lvalue +# 1373| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object +# 1373| Type = [Struct] String +# 1373| ValueCategory = lvalue +# 1374| getStmt(5): [ExprStmt] ExprStmt +# 1374| getExpr(): [FunctionCall] call to acceptValue +# 1374| Type = [VoidType] void # 1374| ValueCategory = prvalue -# 1374| getQualifier(): [FunctionCall] call to returnValue +# 1374| getArgument(0): [ConstructorCall] call to String +# 1374| Type = [VoidType] void +# 1374| ValueCategory = prvalue +# 1374| getArgument(0): foo +# 1374| Type = [ArrayType] const char[4] +# 1374| Value = [StringLiteral] "foo" +# 1374| ValueCategory = lvalue +# 1374| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 1374| Type = [PointerType] const char * +# 1374| ValueCategory = prvalue +# 1374| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object # 1374| Type = [Struct] String -# 1374| ValueCategory = prvalue -# 1374| getQualifier().getFullyConverted(): [CStyleCast] (const String)... -# 1374| Conversion = [PrvalueAdjustmentConversion] prvalue adjustment conversion -# 1374| Type = [SpecifiedType] const String -# 1374| ValueCategory = prvalue -# 1374| getExpr(): [TemporaryObjectExpr] temporary object -# 1374| Type = [Struct] String -# 1374| ValueCategory = prvalue(load) -# 1376| getStmt(8): [ExprStmt] ExprStmt -# 1376| getExpr(): [FunctionCall] call to defaultConstruct -# 1376| Type = [Struct] String +# 1374| ValueCategory = lvalue +# 1375| getStmt(6): [ExprStmt] ExprStmt +# 1375| getExpr(): [FunctionCall] call to c_str +# 1375| Type = [PointerType] const char * +# 1375| ValueCategory = prvalue +# 1375| getQualifier(): [ConstructorCall] call to String +# 1375| Type = [VoidType] void +# 1375| ValueCategory = prvalue +# 1375| getQualifier().getFullyConverted(): [CStyleCast] (const String)... +# 1375| Conversion = [PrvalueAdjustmentConversion] prvalue adjustment conversion +# 1375| Type = [SpecifiedType] const String +# 1375| ValueCategory = prvalue +# 1375| getExpr(): [TemporaryObjectExpr] temporary object +# 1375| Type = [Struct] String +# 1375| ValueCategory = prvalue(load) +# 1376| getStmt(7): [ExprStmt] ExprStmt +# 1376| getExpr(): [FunctionCall] call to c_str +# 1376| Type = [PointerType] const char * # 1376| ValueCategory = prvalue -# 1376| getExpr().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 1376| Type = [Struct] String -# 1376| ValueCategory = prvalue -# 1377| getStmt(9): [ReturnStmt] return ... -# 1377| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1377| Type = [VoidType] void -# 1377| ValueCategory = prvalue -# 1377| getQualifier(): [VariableAccess] s -# 1377| Type = [Struct] String -# 1377| ValueCategory = lvalue -# 1379| [TopLevelFunction] void temporary_destructor_only() -# 1379| : -# 1379| getEntryPoint(): [BlockStmt] { ... } -# 1380| getStmt(0): [DeclStmt] declaration -# 1380| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d -# 1380| Type = [Class] destructor_only -# 1380| getVariable().getInitializer(): [Initializer] initializer for d -# 1380| getExpr(): [FunctionCall] call to returnValue -# 1380| Type = [Class] destructor_only -# 1380| ValueCategory = prvalue -# 1381| getStmt(1): [DeclStmt] declaration -# 1381| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rd -# 1381| Type = [LValueReferenceType] const destructor_only & -# 1381| getVariable().getInitializer(): [Initializer] initializer for rd -# 1381| getExpr(): [FunctionCall] call to returnValue -# 1381| Type = [Class] destructor_only -# 1381| ValueCategory = prvalue -# 1381| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1381| Type = [LValueReferenceType] const destructor_only & -# 1381| ValueCategory = prvalue -# 1381| getExpr(): [CStyleCast] (const destructor_only)... -# 1381| Conversion = [GlvalueConversion] glvalue conversion -# 1381| Type = [SpecifiedType] const destructor_only -# 1381| ValueCategory = lvalue -# 1381| getExpr(): [TemporaryObjectExpr] temporary object -# 1381| Type = [Class] destructor_only -# 1381| ValueCategory = lvalue -# 1382| getStmt(2): [DeclStmt] declaration -# 1382| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d2 +# 1376| getQualifier(): [FunctionCall] call to returnValue +# 1376| Type = [Struct] String +# 1376| ValueCategory = prvalue +# 1376| getQualifier().getFullyConverted(): [CStyleCast] (const String)... +# 1376| Conversion = [PrvalueAdjustmentConversion] prvalue adjustment conversion +# 1376| Type = [SpecifiedType] const String +# 1376| ValueCategory = prvalue +# 1376| getExpr(): [TemporaryObjectExpr] temporary object +# 1376| Type = [Struct] String +# 1376| ValueCategory = prvalue(load) +# 1378| getStmt(8): [ExprStmt] ExprStmt +# 1378| getExpr(): [FunctionCall] call to defaultConstruct +# 1378| Type = [Struct] String +# 1378| ValueCategory = prvalue +# 1378| getExpr().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 1378| Type = [Struct] String +# 1378| ValueCategory = prvalue +# 1379| getStmt(9): [ReturnStmt] return ... +# 1379| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 1379| Type = [VoidType] void +# 1379| ValueCategory = prvalue +# 1379| getQualifier(): [VariableAccess] s +# 1379| Type = [Struct] String +# 1379| ValueCategory = lvalue +# 1381| [TopLevelFunction] void temporary_destructor_only() +# 1381| : +# 1381| getEntryPoint(): [BlockStmt] { ... } +# 1382| getStmt(0): [DeclStmt] declaration +# 1382| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d # 1382| Type = [Class] destructor_only -# 1383| getStmt(3): [ExprStmt] ExprStmt -# 1383| getExpr(): [FunctionCall] call to acceptRef -# 1383| Type = [VoidType] void -# 1383| ValueCategory = prvalue -# 1383| getArgument(0): [VariableAccess] d -# 1383| Type = [Class] destructor_only -# 1383| ValueCategory = lvalue -# 1383| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 1383| Type = [LValueReferenceType] const destructor_only & -# 1383| ValueCategory = prvalue -# 1383| getExpr(): [CStyleCast] (const destructor_only)... -# 1383| Conversion = [GlvalueConversion] glvalue conversion -# 1383| Type = [SpecifiedType] const destructor_only -# 1383| ValueCategory = lvalue -# 1384| getStmt(4): [ExprStmt] ExprStmt -# 1384| getExpr(): [FunctionCall] call to acceptValue -# 1384| Type = [VoidType] void -# 1384| ValueCategory = prvalue -# 1384| getArgument(0): [VariableAccess] d -# 1384| Type = [Class] destructor_only -# 1384| ValueCategory = prvalue(load) -# 1384| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object -# 1384| Type = [Class] destructor_only -# 1384| ValueCategory = lvalue -# 1385| getStmt(5): [ExprStmt] ExprStmt -# 1385| getExpr(): [FunctionCall] call to method +# 1382| getVariable().getInitializer(): [Initializer] initializer for d +# 1382| getExpr(): [FunctionCall] call to returnValue +# 1382| Type = [Class] destructor_only +# 1382| ValueCategory = prvalue +# 1383| getStmt(1): [DeclStmt] declaration +# 1383| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rd +# 1383| Type = [LValueReferenceType] const destructor_only & +# 1383| getVariable().getInitializer(): [Initializer] initializer for rd +# 1383| getExpr(): [FunctionCall] call to returnValue +# 1383| Type = [Class] destructor_only +# 1383| ValueCategory = prvalue +# 1383| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1383| Type = [LValueReferenceType] const destructor_only & +# 1383| ValueCategory = prvalue +# 1383| getExpr(): [CStyleCast] (const destructor_only)... +# 1383| Conversion = [GlvalueConversion] glvalue conversion +# 1383| Type = [SpecifiedType] const destructor_only +# 1383| ValueCategory = lvalue +# 1383| getExpr(): [TemporaryObjectExpr] temporary object +# 1383| Type = [Class] destructor_only +# 1383| ValueCategory = lvalue +# 1384| getStmt(2): [DeclStmt] declaration +# 1384| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d2 +# 1384| Type = [Class] destructor_only +# 1385| getStmt(3): [ExprStmt] ExprStmt +# 1385| getExpr(): [FunctionCall] call to acceptRef # 1385| Type = [VoidType] void # 1385| ValueCategory = prvalue -# 1385| getQualifier(): [Literal] 0 +# 1385| getArgument(0): [VariableAccess] d # 1385| Type = [Class] destructor_only -# 1385| Value = [Literal] 0 +# 1385| ValueCategory = lvalue +# 1385| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 1385| Type = [LValueReferenceType] const destructor_only & # 1385| ValueCategory = prvalue -# 1385| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 1385| Type = [Class] destructor_only -# 1385| ValueCategory = prvalue(load) -# 1386| getStmt(6): [ExprStmt] ExprStmt -# 1386| getExpr(): [FunctionCall] call to method +# 1385| getExpr(): [CStyleCast] (const destructor_only)... +# 1385| Conversion = [GlvalueConversion] glvalue conversion +# 1385| Type = [SpecifiedType] const destructor_only +# 1385| ValueCategory = lvalue +# 1386| getStmt(4): [ExprStmt] ExprStmt +# 1386| getExpr(): [FunctionCall] call to acceptValue # 1386| Type = [VoidType] void # 1386| ValueCategory = prvalue -# 1386| getQualifier(): [FunctionCall] call to returnValue -# 1386| Type = [Class] destructor_only -# 1386| ValueCategory = prvalue -# 1386| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 1386| getArgument(0): [VariableAccess] d # 1386| Type = [Class] destructor_only # 1386| ValueCategory = prvalue(load) -# 1388| getStmt(7): [ExprStmt] ExprStmt -# 1388| getExpr(): [FunctionCall] call to defaultConstruct -# 1388| Type = [Class] destructor_only +# 1386| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object +# 1386| Type = [Class] destructor_only +# 1386| ValueCategory = lvalue +# 1387| getStmt(5): [ExprStmt] ExprStmt +# 1387| getExpr(): [FunctionCall] call to method +# 1387| Type = [VoidType] void +# 1387| ValueCategory = prvalue +# 1387| getQualifier(): [Literal] 0 +# 1387| Type = [Class] destructor_only +# 1387| Value = [Literal] 0 +# 1387| ValueCategory = prvalue +# 1387| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 1387| Type = [Class] destructor_only +# 1387| ValueCategory = prvalue(load) +# 1388| getStmt(6): [ExprStmt] ExprStmt +# 1388| getExpr(): [FunctionCall] call to method +# 1388| Type = [VoidType] void # 1388| ValueCategory = prvalue -# 1388| getExpr().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 1388| Type = [Class] destructor_only -# 1388| ValueCategory = prvalue -# 1389| getStmt(8): [ReturnStmt] return ... -# 1389| getImplicitDestructorCall(0): [DestructorCall] call to ~destructor_only -# 1389| Type = [VoidType] void -# 1389| ValueCategory = prvalue -# 1389| getQualifier(): [VariableAccess] d2 -# 1389| Type = [Class] destructor_only -# 1389| ValueCategory = lvalue -# 1389| getImplicitDestructorCall(1): [DestructorCall] call to ~destructor_only -# 1389| Type = [VoidType] void -# 1389| ValueCategory = prvalue -# 1389| getQualifier(): [VariableAccess] d -# 1389| Type = [Class] destructor_only -# 1389| ValueCategory = lvalue -# 1391| [TopLevelFunction] void temporary_copy_constructor() -# 1391| : -# 1391| getEntryPoint(): [BlockStmt] { ... } -# 1392| getStmt(0): [DeclStmt] declaration -# 1392| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d -# 1392| Type = [Class] copy_constructor -# 1392| getVariable().getInitializer(): [Initializer] initializer for d -# 1392| getExpr(): [FunctionCall] call to returnValue -# 1392| Type = [Class] copy_constructor -# 1392| ValueCategory = prvalue -# 1393| getStmt(1): [DeclStmt] declaration -# 1393| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rd -# 1393| Type = [LValueReferenceType] const copy_constructor & -# 1393| getVariable().getInitializer(): [Initializer] initializer for rd -# 1393| getExpr(): [FunctionCall] call to returnValue -# 1393| Type = [Class] copy_constructor -# 1393| ValueCategory = prvalue -# 1393| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1393| Type = [LValueReferenceType] const copy_constructor & -# 1393| ValueCategory = prvalue -# 1393| getExpr(): [CStyleCast] (const copy_constructor)... -# 1393| Conversion = [GlvalueConversion] glvalue conversion -# 1393| Type = [SpecifiedType] const copy_constructor -# 1393| ValueCategory = lvalue -# 1393| getExpr(): [TemporaryObjectExpr] temporary object -# 1393| Type = [Class] copy_constructor -# 1393| ValueCategory = lvalue -# 1394| getStmt(2): [DeclStmt] declaration -# 1394| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d2 +# 1388| getQualifier(): [FunctionCall] call to returnValue +# 1388| Type = [Class] destructor_only +# 1388| ValueCategory = prvalue +# 1388| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 1388| Type = [Class] destructor_only +# 1388| ValueCategory = prvalue(load) +# 1390| getStmt(7): [ExprStmt] ExprStmt +# 1390| getExpr(): [FunctionCall] call to defaultConstruct +# 1390| Type = [Class] destructor_only +# 1390| ValueCategory = prvalue +# 1390| getExpr().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 1390| Type = [Class] destructor_only +# 1390| ValueCategory = prvalue +# 1391| getStmt(8): [ReturnStmt] return ... +# 1391| getImplicitDestructorCall(0): [DestructorCall] call to ~destructor_only +# 1391| Type = [VoidType] void +# 1391| ValueCategory = prvalue +# 1391| getQualifier(): [VariableAccess] d2 +# 1391| Type = [Class] destructor_only +# 1391| ValueCategory = lvalue +# 1391| getImplicitDestructorCall(1): [DestructorCall] call to ~destructor_only +# 1391| Type = [VoidType] void +# 1391| ValueCategory = prvalue +# 1391| getQualifier(): [VariableAccess] d +# 1391| Type = [Class] destructor_only +# 1391| ValueCategory = lvalue +# 1393| [TopLevelFunction] void temporary_copy_constructor() +# 1393| : +# 1393| getEntryPoint(): [BlockStmt] { ... } +# 1394| getStmt(0): [DeclStmt] declaration +# 1394| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d # 1394| Type = [Class] copy_constructor -# 1394| getVariable().getInitializer(): [Initializer] initializer for d2 -# 1394| getExpr(): [ConstructorCall] call to copy_constructor -# 1394| Type = [VoidType] void +# 1394| getVariable().getInitializer(): [Initializer] initializer for d +# 1394| getExpr(): [FunctionCall] call to returnValue +# 1394| Type = [Class] copy_constructor # 1394| ValueCategory = prvalue -# 1395| getStmt(3): [ExprStmt] ExprStmt -# 1395| getExpr(): [FunctionCall] call to acceptRef -# 1395| Type = [VoidType] void -# 1395| ValueCategory = prvalue -# 1395| getArgument(0): [VariableAccess] d -# 1395| Type = [Class] copy_constructor -# 1395| ValueCategory = lvalue -# 1395| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 1395| Type = [LValueReferenceType] const copy_constructor & -# 1395| ValueCategory = prvalue -# 1395| getExpr(): [CStyleCast] (const copy_constructor)... -# 1395| Conversion = [GlvalueConversion] glvalue conversion -# 1395| Type = [SpecifiedType] const copy_constructor -# 1395| ValueCategory = lvalue -# 1396| getStmt(4): [ExprStmt] ExprStmt -# 1396| getExpr(): [FunctionCall] call to acceptValue -# 1396| Type = [VoidType] void -# 1396| ValueCategory = prvalue -# 1396| getArgument(0): [ConstructorCall] call to copy_constructor -# 1396| Type = [VoidType] void -# 1396| ValueCategory = prvalue -# 1396| getArgument(0): [VariableAccess] d -# 1396| Type = [Class] copy_constructor -# 1396| ValueCategory = lvalue -# 1396| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 1396| Type = [LValueReferenceType] const copy_constructor & +# 1395| getStmt(1): [DeclStmt] declaration +# 1395| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rd +# 1395| Type = [LValueReferenceType] const copy_constructor & +# 1395| getVariable().getInitializer(): [Initializer] initializer for rd +# 1395| getExpr(): [FunctionCall] call to returnValue +# 1395| Type = [Class] copy_constructor +# 1395| ValueCategory = prvalue +# 1395| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1395| Type = [LValueReferenceType] const copy_constructor & +# 1395| ValueCategory = prvalue +# 1395| getExpr(): [CStyleCast] (const copy_constructor)... +# 1395| Conversion = [GlvalueConversion] glvalue conversion +# 1395| Type = [SpecifiedType] const copy_constructor +# 1395| ValueCategory = lvalue +# 1395| getExpr(): [TemporaryObjectExpr] temporary object +# 1395| Type = [Class] copy_constructor +# 1395| ValueCategory = lvalue +# 1396| getStmt(2): [DeclStmt] declaration +# 1396| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d2 +# 1396| Type = [Class] copy_constructor +# 1396| getVariable().getInitializer(): [Initializer] initializer for d2 +# 1396| getExpr(): [ConstructorCall] call to copy_constructor +# 1396| Type = [VoidType] void # 1396| ValueCategory = prvalue -# 1396| getExpr(): [CStyleCast] (const copy_constructor)... -# 1396| Conversion = [GlvalueConversion] glvalue conversion -# 1396| Type = [SpecifiedType] const copy_constructor -# 1396| ValueCategory = lvalue -# 1396| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object -# 1396| Type = [Class] copy_constructor -# 1396| ValueCategory = lvalue -# 1397| getStmt(5): [ExprStmt] ExprStmt -# 1397| getExpr(): [FunctionCall] call to method +# 1397| getStmt(3): [ExprStmt] ExprStmt +# 1397| getExpr(): [FunctionCall] call to acceptRef # 1397| Type = [VoidType] void # 1397| ValueCategory = prvalue -# 1397| getQualifier(): [ConstructorCall] call to copy_constructor -# 1397| Type = [VoidType] void -# 1397| ValueCategory = prvalue -# 1397| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 1397| getArgument(0): [VariableAccess] d # 1397| Type = [Class] copy_constructor -# 1397| ValueCategory = prvalue(load) -# 1398| getStmt(6): [ExprStmt] ExprStmt -# 1398| getExpr(): [FunctionCall] call to method +# 1397| ValueCategory = lvalue +# 1397| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 1397| Type = [LValueReferenceType] const copy_constructor & +# 1397| ValueCategory = prvalue +# 1397| getExpr(): [CStyleCast] (const copy_constructor)... +# 1397| Conversion = [GlvalueConversion] glvalue conversion +# 1397| Type = [SpecifiedType] const copy_constructor +# 1397| ValueCategory = lvalue +# 1398| getStmt(4): [ExprStmt] ExprStmt +# 1398| getExpr(): [FunctionCall] call to acceptValue # 1398| Type = [VoidType] void # 1398| ValueCategory = prvalue -# 1398| getQualifier(): [FunctionCall] call to returnValue -# 1398| Type = [Class] copy_constructor +# 1398| getArgument(0): [ConstructorCall] call to copy_constructor +# 1398| Type = [VoidType] void # 1398| ValueCategory = prvalue -# 1398| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 1398| getArgument(0): [VariableAccess] d +# 1398| Type = [Class] copy_constructor +# 1398| ValueCategory = lvalue +# 1398| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 1398| Type = [LValueReferenceType] const copy_constructor & +# 1398| ValueCategory = prvalue +# 1398| getExpr(): [CStyleCast] (const copy_constructor)... +# 1398| Conversion = [GlvalueConversion] glvalue conversion +# 1398| Type = [SpecifiedType] const copy_constructor +# 1398| ValueCategory = lvalue +# 1398| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object # 1398| Type = [Class] copy_constructor -# 1398| ValueCategory = prvalue(load) -# 1399| getStmt(7): [ExprStmt] ExprStmt -# 1399| getExpr(): [FunctionCall] call to defaultConstruct -# 1399| Type = [Class] copy_constructor +# 1398| ValueCategory = lvalue +# 1399| getStmt(5): [ExprStmt] ExprStmt +# 1399| getExpr(): [FunctionCall] call to method +# 1399| Type = [VoidType] void # 1399| ValueCategory = prvalue -# 1399| getExpr().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 1399| Type = [Class] copy_constructor -# 1399| ValueCategory = prvalue -# 1401| getStmt(8): [DeclStmt] declaration -# 1401| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y -# 1401| Type = [IntType] int -# 1401| getVariable().getInitializer(): [Initializer] initializer for y -# 1401| getExpr(): [ValueFieldAccess] y -# 1401| Type = [IntType] int -# 1401| ValueCategory = prvalue -# 1401| getQualifier(): [FunctionCall] call to returnValue -# 1401| Type = [Class] copy_constructor -# 1401| ValueCategory = prvalue -# 1401| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 1401| Type = [Class] copy_constructor -# 1401| ValueCategory = prvalue(load) -# 1402| getStmt(9): [ReturnStmt] return ... -# 1404| [TopLevelFunction] void temporary_point() -# 1404| : -# 1404| getEntryPoint(): [BlockStmt] { ... } -# 1405| getStmt(0): [DeclStmt] declaration -# 1405| getDeclarationEntry(0): [VariableDeclarationEntry] definition of p -# 1405| Type = [Struct] Point -# 1405| getVariable().getInitializer(): [Initializer] initializer for p -# 1405| getExpr(): [FunctionCall] call to returnValue -# 1405| Type = [Struct] Point -# 1405| ValueCategory = prvalue -# 1406| getStmt(1): [DeclStmt] declaration -# 1406| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rp -# 1406| Type = [LValueReferenceType] const Point & -# 1406| getVariable().getInitializer(): [Initializer] initializer for rp -# 1406| getExpr(): [FunctionCall] call to returnValue -# 1406| Type = [Struct] Point -# 1406| ValueCategory = prvalue -# 1406| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1406| Type = [LValueReferenceType] const Point & -# 1406| ValueCategory = prvalue -# 1406| getExpr(): [CStyleCast] (const Point)... -# 1406| Conversion = [GlvalueConversion] glvalue conversion -# 1406| Type = [SpecifiedType] const Point -# 1406| ValueCategory = lvalue -# 1406| getExpr(): [TemporaryObjectExpr] temporary object -# 1406| Type = [Struct] Point -# 1406| ValueCategory = lvalue -# 1408| getStmt(2): [ExprStmt] ExprStmt -# 1408| getExpr(): [FunctionCall] call to acceptRef -# 1408| Type = [VoidType] void -# 1408| ValueCategory = prvalue -# 1408| getArgument(0): [VariableAccess] p -# 1408| Type = [Struct] Point -# 1408| ValueCategory = lvalue -# 1408| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 1408| Type = [LValueReferenceType] const Point & -# 1408| ValueCategory = prvalue -# 1408| getExpr(): [CStyleCast] (const Point)... -# 1408| Conversion = [GlvalueConversion] glvalue conversion -# 1408| Type = [SpecifiedType] const Point -# 1408| ValueCategory = lvalue -# 1409| getStmt(3): [ExprStmt] ExprStmt -# 1409| getExpr(): [FunctionCall] call to acceptValue -# 1409| Type = [VoidType] void -# 1409| ValueCategory = prvalue -# 1409| getArgument(0): [VariableAccess] p -# 1409| Type = [Struct] Point -# 1409| ValueCategory = prvalue(load) -# 1410| getStmt(4): [ExprStmt] ExprStmt -# 1410| getExpr(): [ValueFieldAccess] x -# 1410| Type = [IntType] int -# 1410| Value = [ValueFieldAccess] 0 +# 1399| getQualifier(): [ConstructorCall] call to copy_constructor +# 1399| Type = [VoidType] void +# 1399| ValueCategory = prvalue +# 1399| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 1399| Type = [Class] copy_constructor +# 1399| ValueCategory = prvalue(load) +# 1400| getStmt(6): [ExprStmt] ExprStmt +# 1400| getExpr(): [FunctionCall] call to method +# 1400| Type = [VoidType] void +# 1400| ValueCategory = prvalue +# 1400| getQualifier(): [FunctionCall] call to returnValue +# 1400| Type = [Class] copy_constructor +# 1400| ValueCategory = prvalue +# 1400| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 1400| Type = [Class] copy_constructor +# 1400| ValueCategory = prvalue(load) +# 1401| getStmt(7): [ExprStmt] ExprStmt +# 1401| getExpr(): [FunctionCall] call to defaultConstruct +# 1401| Type = [Class] copy_constructor +# 1401| ValueCategory = prvalue +# 1401| getExpr().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 1401| Type = [Class] copy_constructor +# 1401| ValueCategory = prvalue +# 1403| getStmt(8): [DeclStmt] declaration +# 1403| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 1403| Type = [IntType] int +# 1403| getVariable().getInitializer(): [Initializer] initializer for y +# 1403| getExpr(): [ValueFieldAccess] y +# 1403| Type = [IntType] int +# 1403| ValueCategory = prvalue +# 1403| getQualifier(): [FunctionCall] call to returnValue +# 1403| Type = [Class] copy_constructor +# 1403| ValueCategory = prvalue +# 1403| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 1403| Type = [Class] copy_constructor +# 1403| ValueCategory = prvalue(load) +# 1404| getStmt(9): [ReturnStmt] return ... +# 1406| [TopLevelFunction] void temporary_point() +# 1406| : +# 1406| getEntryPoint(): [BlockStmt] { ... } +# 1407| getStmt(0): [DeclStmt] declaration +# 1407| getDeclarationEntry(0): [VariableDeclarationEntry] definition of p +# 1407| Type = [Struct] Point +# 1407| getVariable().getInitializer(): [Initializer] initializer for p +# 1407| getExpr(): [FunctionCall] call to returnValue +# 1407| Type = [Struct] Point +# 1407| ValueCategory = prvalue +# 1408| getStmt(1): [DeclStmt] declaration +# 1408| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rp +# 1408| Type = [LValueReferenceType] const Point & +# 1408| getVariable().getInitializer(): [Initializer] initializer for rp +# 1408| getExpr(): [FunctionCall] call to returnValue +# 1408| Type = [Struct] Point +# 1408| ValueCategory = prvalue +# 1408| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1408| Type = [LValueReferenceType] const Point & +# 1408| ValueCategory = prvalue +# 1408| getExpr(): [CStyleCast] (const Point)... +# 1408| Conversion = [GlvalueConversion] glvalue conversion +# 1408| Type = [SpecifiedType] const Point +# 1408| ValueCategory = lvalue +# 1408| getExpr(): [TemporaryObjectExpr] temporary object +# 1408| Type = [Struct] Point +# 1408| ValueCategory = lvalue +# 1410| getStmt(2): [ExprStmt] ExprStmt +# 1410| getExpr(): [FunctionCall] call to acceptRef +# 1410| Type = [VoidType] void # 1410| ValueCategory = prvalue -# 1410| getQualifier(): [Literal] 0 +# 1410| getArgument(0): [VariableAccess] p # 1410| Type = [Struct] Point -# 1410| Value = [Literal] 0 +# 1410| ValueCategory = lvalue +# 1410| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 1410| Type = [LValueReferenceType] const Point & # 1410| ValueCategory = prvalue -# 1410| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 1410| Type = [Struct] Point -# 1410| ValueCategory = prvalue(load) -# 1411| getStmt(5): [DeclStmt] declaration -# 1411| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y -# 1411| Type = [IntType] int -# 1411| getVariable().getInitializer(): [Initializer] initializer for y -# 1411| getExpr(): [ValueFieldAccess] y -# 1411| Type = [IntType] int -# 1411| ValueCategory = prvalue -# 1411| getQualifier(): [FunctionCall] call to returnValue -# 1411| Type = [Struct] Point -# 1411| ValueCategory = prvalue -# 1413| getStmt(6): [ExprStmt] ExprStmt -# 1413| getExpr(): [FunctionCall] call to defaultConstruct -# 1413| Type = [Struct] Point -# 1413| ValueCategory = prvalue -# 1414| getStmt(7): [ReturnStmt] return ... -# 1416| [CopyAssignmentOperator] UnusualFields& UnusualFields::operator=(UnusualFields const&) -# 1416| : +# 1410| getExpr(): [CStyleCast] (const Point)... +# 1410| Conversion = [GlvalueConversion] glvalue conversion +# 1410| Type = [SpecifiedType] const Point +# 1410| ValueCategory = lvalue +# 1411| getStmt(3): [ExprStmt] ExprStmt +# 1411| getExpr(): [FunctionCall] call to acceptValue +# 1411| Type = [VoidType] void +# 1411| ValueCategory = prvalue +# 1411| getArgument(0): [VariableAccess] p +# 1411| Type = [Struct] Point +# 1411| ValueCategory = prvalue(load) +# 1412| getStmt(4): [ExprStmt] ExprStmt +# 1412| getExpr(): [ValueFieldAccess] x +# 1412| Type = [IntType] int +# 1412| Value = [ValueFieldAccess] 0 +# 1412| ValueCategory = prvalue +# 1412| getQualifier(): [Literal] 0 +# 1412| Type = [Struct] Point +# 1412| Value = [Literal] 0 +# 1412| ValueCategory = prvalue +# 1412| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 1412| Type = [Struct] Point +# 1412| ValueCategory = prvalue(load) +# 1413| getStmt(5): [DeclStmt] declaration +# 1413| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 1413| Type = [IntType] int +# 1413| getVariable().getInitializer(): [Initializer] initializer for y +# 1413| getExpr(): [ValueFieldAccess] y +# 1413| Type = [IntType] int +# 1413| ValueCategory = prvalue +# 1413| getQualifier(): [FunctionCall] call to returnValue +# 1413| Type = [Struct] Point +# 1413| ValueCategory = prvalue +# 1415| getStmt(6): [ExprStmt] ExprStmt +# 1415| getExpr(): [FunctionCall] call to defaultConstruct +# 1415| Type = [Struct] Point +# 1415| ValueCategory = prvalue +# 1416| getStmt(7): [ReturnStmt] return ... +# 1418| [CopyAssignmentOperator] UnusualFields& UnusualFields::operator=(UnusualFields const&) +# 1418| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const UnusualFields & -# 1416| [Constructor] void UnusualFields::UnusualFields() -# 1416| : -# 1416| [CopyConstructor] void UnusualFields::UnusualFields(UnusualFields const&) -# 1416| : +# 1418| [Constructor] void UnusualFields::UnusualFields() +# 1418| : +# 1418| [CopyConstructor] void UnusualFields::UnusualFields(UnusualFields const&) +# 1418| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const UnusualFields & -# 1416| [MoveConstructor] void UnusualFields::UnusualFields(UnusualFields&&) -# 1416| : +# 1418| [MoveConstructor] void UnusualFields::UnusualFields(UnusualFields&&) +# 1418| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] UnusualFields && -# 1421| [TopLevelFunction] void temporary_unusual_fields() -# 1421| : -# 1421| getEntryPoint(): [BlockStmt] { ... } -# 1422| getStmt(0): [DeclStmt] declaration -# 1422| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rx -# 1422| Type = [LValueReferenceType] const int & -# 1422| getVariable().getInitializer(): [Initializer] initializer for rx -# 1422| getExpr(): [ValueFieldAccess] r -# 1422| Type = [LValueReferenceType] int & -# 1422| ValueCategory = prvalue -# 1422| getQualifier(): [FunctionCall] call to returnValue -# 1422| Type = [Struct] UnusualFields -# 1422| ValueCategory = prvalue -# 1422| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1422| Type = [LValueReferenceType] const int & -# 1422| ValueCategory = prvalue -# 1422| getExpr(): [CStyleCast] (const int)... -# 1422| Conversion = [GlvalueConversion] glvalue conversion -# 1422| Type = [SpecifiedType] const int -# 1422| ValueCategory = lvalue -# 1422| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1422| Type = [IntType] int -# 1422| ValueCategory = lvalue -# 1423| getStmt(1): [DeclStmt] declaration -# 1423| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 1423| Type = [IntType] int -# 1423| getVariable().getInitializer(): [Initializer] initializer for x -# 1423| getExpr(): [ValueFieldAccess] r -# 1423| Type = [LValueReferenceType] int & -# 1423| ValueCategory = prvalue -# 1423| getQualifier(): [FunctionCall] call to returnValue -# 1423| Type = [Struct] UnusualFields -# 1423| ValueCategory = prvalue -# 1423| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1423| Type = [IntType] int -# 1423| ValueCategory = prvalue(load) -# 1425| getStmt(2): [DeclStmt] declaration -# 1425| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rf -# 1425| Type = [LValueReferenceType] const float & -# 1425| getVariable().getInitializer(): [Initializer] initializer for rf -# 1425| getExpr(): [ArrayExpr] access to array -# 1425| Type = [FloatType] float -# 1425| ValueCategory = lvalue -# 1425| getArrayBase(): [ValueFieldAccess] a -# 1425| Type = [ArrayType] float[10] -# 1425| ValueCategory = prvalue -# 1425| getQualifier(): [FunctionCall] call to returnValue -# 1425| Type = [Struct] UnusualFields -# 1425| ValueCategory = prvalue -# 1425| getArrayOffset(): [Literal] 3 -# 1425| Type = [IntType] int -# 1425| Value = [Literal] 3 -# 1425| ValueCategory = prvalue -# 1425| getArrayBase().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 1425| Type = [PointerType] float * -# 1425| ValueCategory = prvalue -# 1425| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1425| Type = [LValueReferenceType] const float & +# 1423| [TopLevelFunction] void temporary_unusual_fields() +# 1423| : +# 1423| getEntryPoint(): [BlockStmt] { ... } +# 1424| getStmt(0): [DeclStmt] declaration +# 1424| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rx +# 1424| Type = [LValueReferenceType] const int & +# 1424| getVariable().getInitializer(): [Initializer] initializer for rx +# 1424| getExpr(): [ValueFieldAccess] r +# 1424| Type = [LValueReferenceType] int & +# 1424| ValueCategory = prvalue +# 1424| getQualifier(): [FunctionCall] call to returnValue +# 1424| Type = [Struct] UnusualFields +# 1424| ValueCategory = prvalue +# 1424| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1424| Type = [LValueReferenceType] const int & +# 1424| ValueCategory = prvalue +# 1424| getExpr(): [CStyleCast] (const int)... +# 1424| Conversion = [GlvalueConversion] glvalue conversion +# 1424| Type = [SpecifiedType] const int +# 1424| ValueCategory = lvalue +# 1424| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1424| Type = [IntType] int +# 1424| ValueCategory = lvalue +# 1425| getStmt(1): [DeclStmt] declaration +# 1425| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 1425| Type = [IntType] int +# 1425| getVariable().getInitializer(): [Initializer] initializer for x +# 1425| getExpr(): [ValueFieldAccess] r +# 1425| Type = [LValueReferenceType] int & # 1425| ValueCategory = prvalue -# 1425| getExpr(): [CStyleCast] (const float)... -# 1425| Conversion = [GlvalueConversion] glvalue conversion -# 1425| Type = [SpecifiedType] const float -# 1425| ValueCategory = lvalue -# 1426| getStmt(3): [DeclStmt] declaration -# 1426| getDeclarationEntry(0): [VariableDeclarationEntry] definition of f -# 1426| Type = [FloatType] float -# 1426| getVariable().getInitializer(): [Initializer] initializer for f -# 1426| getExpr(): [ArrayExpr] access to array -# 1426| Type = [FloatType] float -# 1426| ValueCategory = prvalue(load) -# 1426| getArrayBase(): [ValueFieldAccess] a -# 1426| Type = [ArrayType] float[10] -# 1426| ValueCategory = prvalue -# 1426| getQualifier(): [FunctionCall] call to returnValue -# 1426| Type = [Struct] UnusualFields -# 1426| ValueCategory = prvalue -# 1426| getArrayOffset(): [Literal] 5 -# 1426| Type = [IntType] int -# 1426| Value = [Literal] 5 -# 1426| ValueCategory = prvalue -# 1426| getArrayBase().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 1426| Type = [PointerType] float * -# 1426| ValueCategory = prvalue -# 1427| getStmt(4): [ReturnStmt] return ... -# 1429| [CopyAssignmentOperator] POD_Base& POD_Base::operator=(POD_Base const&) -# 1429| : +# 1425| getQualifier(): [FunctionCall] call to returnValue +# 1425| Type = [Struct] UnusualFields +# 1425| ValueCategory = prvalue +# 1425| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1425| Type = [IntType] int +# 1425| ValueCategory = prvalue(load) +# 1427| getStmt(2): [DeclStmt] declaration +# 1427| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rf +# 1427| Type = [LValueReferenceType] const float & +# 1427| getVariable().getInitializer(): [Initializer] initializer for rf +# 1427| getExpr(): [ArrayExpr] access to array +# 1427| Type = [FloatType] float +# 1427| ValueCategory = lvalue +# 1427| getArrayBase(): [ValueFieldAccess] a +# 1427| Type = [ArrayType] float[10] +# 1427| ValueCategory = prvalue +# 1427| getQualifier(): [FunctionCall] call to returnValue +# 1427| Type = [Struct] UnusualFields +# 1427| ValueCategory = prvalue +# 1427| getArrayOffset(): [Literal] 3 +# 1427| Type = [IntType] int +# 1427| Value = [Literal] 3 +# 1427| ValueCategory = prvalue +# 1427| getArrayBase().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 1427| Type = [PointerType] float * +# 1427| ValueCategory = prvalue +# 1427| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1427| Type = [LValueReferenceType] const float & +# 1427| ValueCategory = prvalue +# 1427| getExpr(): [CStyleCast] (const float)... +# 1427| Conversion = [GlvalueConversion] glvalue conversion +# 1427| Type = [SpecifiedType] const float +# 1427| ValueCategory = lvalue +# 1428| getStmt(3): [DeclStmt] declaration +# 1428| getDeclarationEntry(0): [VariableDeclarationEntry] definition of f +# 1428| Type = [FloatType] float +# 1428| getVariable().getInitializer(): [Initializer] initializer for f +# 1428| getExpr(): [ArrayExpr] access to array +# 1428| Type = [FloatType] float +# 1428| ValueCategory = prvalue(load) +# 1428| getArrayBase(): [ValueFieldAccess] a +# 1428| Type = [ArrayType] float[10] +# 1428| ValueCategory = prvalue +# 1428| getQualifier(): [FunctionCall] call to returnValue +# 1428| Type = [Struct] UnusualFields +# 1428| ValueCategory = prvalue +# 1428| getArrayOffset(): [Literal] 5 +# 1428| Type = [IntType] int +# 1428| Value = [Literal] 5 +# 1428| ValueCategory = prvalue +# 1428| getArrayBase().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 1428| Type = [PointerType] float * +# 1428| ValueCategory = prvalue +# 1429| getStmt(4): [ReturnStmt] return ... +# 1431| [CopyAssignmentOperator] POD_Base& POD_Base::operator=(POD_Base const&) +# 1431| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const POD_Base & -# 1429| [MoveAssignmentOperator] POD_Base& POD_Base::operator=(POD_Base&&) -# 1429| : +# 1431| [MoveAssignmentOperator] POD_Base& POD_Base::operator=(POD_Base&&) +# 1431| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] POD_Base && -# 1432| [ConstMemberFunction] float POD_Base::f() const -# 1432| : -# 1435| [CopyAssignmentOperator] POD_Middle& POD_Middle::operator=(POD_Middle const&) -# 1435| : +# 1434| [ConstMemberFunction] float POD_Base::f() const +# 1434| : +# 1437| [CopyAssignmentOperator] POD_Middle& POD_Middle::operator=(POD_Middle const&) +# 1437| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const POD_Middle & -# 1435| [MoveAssignmentOperator] POD_Middle& POD_Middle::operator=(POD_Middle&&) -# 1435| : +# 1437| [MoveAssignmentOperator] POD_Middle& POD_Middle::operator=(POD_Middle&&) +# 1437| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] POD_Middle && -# 1435| [Constructor] void POD_Middle::POD_Middle() -# 1435| : -# 1439| [CopyAssignmentOperator] POD_Derived& POD_Derived::operator=(POD_Derived const&) -# 1439| : +# 1437| [Constructor] void POD_Middle::POD_Middle() +# 1437| : +# 1441| [CopyAssignmentOperator] POD_Derived& POD_Derived::operator=(POD_Derived const&) +# 1441| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const POD_Derived & -# 1439| [MoveAssignmentOperator] POD_Derived& POD_Derived::operator=(POD_Derived&&) -# 1439| : +# 1441| [MoveAssignmentOperator] POD_Derived& POD_Derived::operator=(POD_Derived&&) +# 1441| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] POD_Derived && -# 1439| [Constructor] void POD_Derived::POD_Derived() -# 1439| : -# 1443| [TopLevelFunction] void temporary_hierarchy() -# 1443| : -# 1443| getEntryPoint(): [BlockStmt] { ... } -# 1444| getStmt(0): [DeclStmt] declaration -# 1444| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b -# 1444| Type = [Struct] POD_Base -# 1444| getVariable().getInitializer(): [Initializer] initializer for b -# 1444| getExpr(): [FunctionCall] call to returnValue -# 1444| Type = [Struct] POD_Middle -# 1444| ValueCategory = prvalue +# 1441| [Constructor] void POD_Derived::POD_Derived() +# 1441| : +# 1445| [TopLevelFunction] void temporary_hierarchy() +# 1445| : +# 1445| getEntryPoint(): [BlockStmt] { ... } +# 1446| getStmt(0): [DeclStmt] declaration +# 1446| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b +# 1446| Type = [Struct] POD_Base +# 1446| getVariable().getInitializer(): [Initializer] initializer for b +# 1446| getExpr(): [FunctionCall] call to returnValue +# 1446| Type = [Struct] POD_Middle +# 1446| ValueCategory = prvalue #-----| getExpr().getFullyConverted(): [CStyleCast] (POD_Base)... #-----| Conversion = [BaseClassConversion] base class conversion #-----| Type = [Struct] POD_Base @@ -11513,40 +11519,40 @@ ir.cpp: #-----| getExpr(): [TemporaryObjectExpr] temporary object #-----| Type = [Struct] POD_Middle #-----| ValueCategory = xvalue -# 1445| getStmt(1): [ExprStmt] ExprStmt -# 1445| getExpr(): [AssignExpr] ... = ... -# 1445| Type = [Struct] POD_Base -# 1445| ValueCategory = lvalue -# 1445| getLValue(): [VariableAccess] b -# 1445| Type = [Struct] POD_Base -# 1445| ValueCategory = lvalue -# 1445| getRValue(): [FunctionCall] call to returnValue -# 1445| Type = [Struct] POD_Derived -# 1445| ValueCategory = prvalue -# 1445| getRValue().getFullyConverted(): [CStyleCast] (POD_Base)... -# 1445| Conversion = [BaseClassConversion] base class conversion -# 1445| Type = [Struct] POD_Base -# 1445| ValueCategory = prvalue(load) -# 1445| getExpr(): [CStyleCast] (POD_Middle)... -# 1445| Conversion = [BaseClassConversion] base class conversion -# 1445| Type = [Struct] POD_Middle -# 1445| ValueCategory = lvalue -# 1445| getExpr(): [TemporaryObjectExpr] temporary object -# 1445| Type = [Struct] POD_Derived -# 1445| ValueCategory = lvalue -# 1445| getExpr(): [ParenthesisExpr] (...) -# 1445| Type = [Struct] POD_Derived -# 1445| ValueCategory = prvalue -# 1446| getStmt(2): [DeclStmt] declaration -# 1446| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 1446| Type = [IntType] int -# 1446| getVariable().getInitializer(): [Initializer] initializer for x -# 1446| getExpr(): [ValueFieldAccess] x -# 1446| Type = [IntType] int -# 1446| ValueCategory = prvalue(load) -# 1446| getQualifier(): [FunctionCall] call to returnValue -# 1446| Type = [Struct] POD_Derived -# 1446| ValueCategory = prvalue +# 1447| getStmt(1): [ExprStmt] ExprStmt +# 1447| getExpr(): [AssignExpr] ... = ... +# 1447| Type = [Struct] POD_Base +# 1447| ValueCategory = lvalue +# 1447| getLValue(): [VariableAccess] b +# 1447| Type = [Struct] POD_Base +# 1447| ValueCategory = lvalue +# 1447| getRValue(): [FunctionCall] call to returnValue +# 1447| Type = [Struct] POD_Derived +# 1447| ValueCategory = prvalue +# 1447| getRValue().getFullyConverted(): [CStyleCast] (POD_Base)... +# 1447| Conversion = [BaseClassConversion] base class conversion +# 1447| Type = [Struct] POD_Base +# 1447| ValueCategory = prvalue(load) +# 1447| getExpr(): [CStyleCast] (POD_Middle)... +# 1447| Conversion = [BaseClassConversion] base class conversion +# 1447| Type = [Struct] POD_Middle +# 1447| ValueCategory = lvalue +# 1447| getExpr(): [TemporaryObjectExpr] temporary object +# 1447| Type = [Struct] POD_Derived +# 1447| ValueCategory = lvalue +# 1447| getExpr(): [ParenthesisExpr] (...) +# 1447| Type = [Struct] POD_Derived +# 1447| ValueCategory = prvalue +# 1448| getStmt(2): [DeclStmt] declaration +# 1448| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 1448| Type = [IntType] int +# 1448| getVariable().getInitializer(): [Initializer] initializer for x +# 1448| getExpr(): [ValueFieldAccess] x +# 1448| Type = [IntType] int +# 1448| ValueCategory = prvalue(load) +# 1448| getQualifier(): [FunctionCall] call to returnValue +# 1448| Type = [Struct] POD_Derived +# 1448| ValueCategory = prvalue #-----| getQualifier().getFullyConverted(): [CStyleCast] (POD_Base)... #-----| Conversion = [BaseClassConversion] base class conversion #-----| Type = [Struct] POD_Base @@ -11558,16 +11564,16 @@ ir.cpp: #-----| getExpr(): [TemporaryObjectExpr] temporary object #-----| Type = [Struct] POD_Derived #-----| ValueCategory = xvalue -# 1447| getStmt(3): [DeclStmt] declaration -# 1447| getDeclarationEntry(0): [VariableDeclarationEntry] definition of f -# 1447| Type = [FloatType] float -# 1447| getVariable().getInitializer(): [Initializer] initializer for f -# 1447| getExpr(): [FunctionCall] call to f -# 1447| Type = [FloatType] float -# 1447| ValueCategory = prvalue -# 1447| getQualifier(): [FunctionCall] call to returnValue -# 1447| Type = [Struct] POD_Derived -# 1447| ValueCategory = prvalue +# 1449| getStmt(3): [DeclStmt] declaration +# 1449| getDeclarationEntry(0): [VariableDeclarationEntry] definition of f +# 1449| Type = [FloatType] float +# 1449| getVariable().getInitializer(): [Initializer] initializer for f +# 1449| getExpr(): [FunctionCall] call to f +# 1449| Type = [FloatType] float +# 1449| ValueCategory = prvalue +# 1449| getQualifier(): [FunctionCall] call to returnValue +# 1449| Type = [Struct] POD_Derived +# 1449| ValueCategory = prvalue #-----| getQualifier().getFullyConverted(): [CStyleCast] (const POD_Base)... #-----| Conversion = [GlvalueConversion] glvalue conversion #-----| Type = [SpecifiedType] const POD_Base @@ -11583,99 +11589,99 @@ ir.cpp: #-----| getExpr(): [TemporaryObjectExpr] temporary object #-----| Type = [Struct] POD_Derived #-----| ValueCategory = xvalue -# 1447| getExpr(): [ParenthesisExpr] (...) -# 1447| Type = [Struct] POD_Derived -# 1447| ValueCategory = prvalue -# 1448| getStmt(4): [ReturnStmt] return ... -# 1450| [CopyAssignmentOperator] Inheritance_Test_B& Inheritance_Test_B::operator=(Inheritance_Test_B const&) -# 1450| : +# 1449| getExpr(): [ParenthesisExpr] (...) +# 1449| Type = [Struct] POD_Derived +# 1449| ValueCategory = prvalue +# 1450| getStmt(4): [ReturnStmt] return ... +# 1452| [CopyAssignmentOperator] Inheritance_Test_B& Inheritance_Test_B::operator=(Inheritance_Test_B const&) +# 1452| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const Inheritance_Test_B & -# 1450| [Constructor] void Inheritance_Test_B::Inheritance_Test_B() -# 1450| : -# 1451| [Destructor] void Inheritance_Test_B::~Inheritance_Test_B() -# 1451| : -# 1451| getEntryPoint(): [BlockStmt] { ... } -# 1451| getStmt(0): [ReturnStmt] return ... -# 1451| : -# 1454| [CopyAssignmentOperator] Inheritance_Test_A& Inheritance_Test_A::operator=(Inheritance_Test_A const&) -# 1454| : +# 1452| [Constructor] void Inheritance_Test_B::Inheritance_Test_B() +# 1452| : +# 1453| [Destructor] void Inheritance_Test_B::~Inheritance_Test_B() +# 1453| : +# 1453| getEntryPoint(): [BlockStmt] { ... } +# 1453| getStmt(0): [ReturnStmt] return ... +# 1453| : +# 1456| [CopyAssignmentOperator] Inheritance_Test_A& Inheritance_Test_A::operator=(Inheritance_Test_A const&) +# 1456| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const Inheritance_Test_A & -# 1454| [MoveAssignmentOperator] Inheritance_Test_A& Inheritance_Test_A::operator=(Inheritance_Test_A&&) -# 1454| : +# 1456| [MoveAssignmentOperator] Inheritance_Test_A& Inheritance_Test_A::operator=(Inheritance_Test_A&&) +# 1456| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] Inheritance_Test_A && -# 1454| [CopyConstructor] void Inheritance_Test_A::Inheritance_Test_A(Inheritance_Test_A const&) -# 1454| : +# 1456| [CopyConstructor] void Inheritance_Test_A::Inheritance_Test_A(Inheritance_Test_A const&) +# 1456| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const Inheritance_Test_A & -# 1454| [MoveConstructor] void Inheritance_Test_A::Inheritance_Test_A(Inheritance_Test_A&&) -# 1454| : +# 1456| [MoveConstructor] void Inheritance_Test_A::Inheritance_Test_A(Inheritance_Test_A&&) +# 1456| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] Inheritance_Test_A && -# 1454| [Destructor] void Inheritance_Test_A::~Inheritance_Test_A() -# 1454| : -# 1457| [Constructor] void Inheritance_Test_A::Inheritance_Test_A() -# 1457| : -# 1457| : -# 1457| getInitializer(0): (no string representation) -# 1457| Type = [Struct] Inheritance_Test_B -# 1457| ValueCategory = prvalue -# 1457| getInitializer(1): [ConstructorFieldInit] constructor init of field x -# 1457| Type = [IntType] int -# 1457| ValueCategory = prvalue -# 1457| getExpr(): [Literal] 42 -# 1457| Type = [IntType] int -# 1457| Value = [Literal] 42 -# 1457| ValueCategory = prvalue -# 1457| getEntryPoint(): [BlockStmt] { ... } -# 1458| getStmt(0): [ExprStmt] ExprStmt -# 1458| getExpr(): [AssignExpr] ... = ... -# 1458| Type = [IntType] int -# 1458| ValueCategory = lvalue -# 1458| getLValue(): [ImplicitThisFieldAccess,PointerFieldAccess] y -# 1458| Type = [IntType] int -# 1458| ValueCategory = lvalue -# 1458| getQualifier(): [ThisExpr] this -# 1458| Type = [PointerType] Inheritance_Test_A * -# 1458| ValueCategory = prvalue(load) -# 1458| getRValue(): [Literal] 3 -# 1458| Type = [IntType] int -# 1458| Value = [Literal] 3 -# 1458| ValueCategory = prvalue -# 1459| getStmt(1): [ReturnStmt] return ... -# 1462| [TopLevelFunction] void array_structured_binding() -# 1462| : -# 1462| getEntryPoint(): [BlockStmt] { ... } -# 1463| getStmt(0): [DeclStmt] declaration -# 1463| getDeclarationEntry(0): [VariableDeclarationEntry] definition of xs -# 1463| Type = [ArrayType] int[2] -# 1463| getVariable().getInitializer(): [Initializer] initializer for xs -# 1463| getExpr(): [ArrayAggregateLiteral] {...} -# 1463| Type = [ArrayType] int[2] -# 1463| ValueCategory = prvalue -# 1463| getAnElementExpr(0): [Literal] 1 -# 1463| Type = [IntType] int -# 1463| Value = [Literal] 1 -# 1463| ValueCategory = prvalue -# 1463| getAnElementExpr(1): [Literal] 2 -# 1463| Type = [IntType] int -# 1463| Value = [Literal] 2 -# 1463| ValueCategory = prvalue -# 1465| getStmt(1): [BlockStmt] { ... } -# 1466| getStmt(0): [DeclStmt] declaration -# 1466| getDeclarationEntry(0): (no string representation) -# 1466| Type = [LValueReferenceType] int(&)[2] -# 1466| getVariable().getInitializer(): [Initializer] initializer for (unnamed local variable) -# 1466| getExpr(): [VariableAccess] xs -# 1466| Type = [ArrayType] int[2] -# 1466| ValueCategory = lvalue -# 1466| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1466| Type = [LValueReferenceType] int(&)[2] -# 1466| ValueCategory = prvalue -# 1466| getDeclarationEntry(1): [VariableDeclarationEntry] definition of x0 -# 1466| Type = [IntType] int +# 1456| [Destructor] void Inheritance_Test_A::~Inheritance_Test_A() +# 1456| : +# 1459| [Constructor] void Inheritance_Test_A::Inheritance_Test_A() +# 1459| : +# 1459| : +# 1459| getInitializer(0): (no string representation) +# 1459| Type = [Struct] Inheritance_Test_B +# 1459| ValueCategory = prvalue +# 1459| getInitializer(1): [ConstructorFieldInit] constructor init of field x +# 1459| Type = [IntType] int +# 1459| ValueCategory = prvalue +# 1459| getExpr(): [Literal] 42 +# 1459| Type = [IntType] int +# 1459| Value = [Literal] 42 +# 1459| ValueCategory = prvalue +# 1459| getEntryPoint(): [BlockStmt] { ... } +# 1460| getStmt(0): [ExprStmt] ExprStmt +# 1460| getExpr(): [AssignExpr] ... = ... +# 1460| Type = [IntType] int +# 1460| ValueCategory = lvalue +# 1460| getLValue(): [ImplicitThisFieldAccess,PointerFieldAccess] y +# 1460| Type = [IntType] int +# 1460| ValueCategory = lvalue +# 1460| getQualifier(): [ThisExpr] this +# 1460| Type = [PointerType] Inheritance_Test_A * +# 1460| ValueCategory = prvalue(load) +# 1460| getRValue(): [Literal] 3 +# 1460| Type = [IntType] int +# 1460| Value = [Literal] 3 +# 1460| ValueCategory = prvalue +# 1461| getStmt(1): [ReturnStmt] return ... +# 1464| [TopLevelFunction] void array_structured_binding() +# 1464| : +# 1464| getEntryPoint(): [BlockStmt] { ... } +# 1465| getStmt(0): [DeclStmt] declaration +# 1465| getDeclarationEntry(0): [VariableDeclarationEntry] definition of xs +# 1465| Type = [ArrayType] int[2] +# 1465| getVariable().getInitializer(): [Initializer] initializer for xs +# 1465| getExpr(): [ArrayAggregateLiteral] {...} +# 1465| Type = [ArrayType] int[2] +# 1465| ValueCategory = prvalue +# 1465| getAnElementExpr(0): [Literal] 1 +# 1465| Type = [IntType] int +# 1465| Value = [Literal] 1 +# 1465| ValueCategory = prvalue +# 1465| getAnElementExpr(1): [Literal] 2 +# 1465| Type = [IntType] int +# 1465| Value = [Literal] 2 +# 1465| ValueCategory = prvalue +# 1467| getStmt(1): [BlockStmt] { ... } +# 1468| getStmt(0): [DeclStmt] declaration +# 1468| getDeclarationEntry(0): (no string representation) +# 1468| Type = [LValueReferenceType] int(&)[2] +# 1468| getVariable().getInitializer(): [Initializer] initializer for (unnamed local variable) +# 1468| getExpr(): [VariableAccess] xs +# 1468| Type = [ArrayType] int[2] +# 1468| ValueCategory = lvalue +# 1468| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1468| Type = [LValueReferenceType] int(&)[2] +# 1468| ValueCategory = prvalue +# 1468| getDeclarationEntry(1): [VariableDeclarationEntry] definition of x0 +# 1468| Type = [IntType] int #-----| getVariable().getInitializer(): [Initializer] initializer for x0 #-----| getExpr(): [ArrayExpr] access to array #-----| Type = [IntType] int @@ -11693,8 +11699,8 @@ ir.cpp: #-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) #-----| Type = [ArrayType] int[2] #-----| ValueCategory = lvalue -# 1466| getDeclarationEntry(2): [VariableDeclarationEntry] definition of x1 -# 1466| Type = [IntType] int +# 1468| getDeclarationEntry(2): [VariableDeclarationEntry] definition of x1 +# 1468| Type = [IntType] int #-----| getVariable().getInitializer(): [Initializer] initializer for x1 #-----| getExpr(): [ArrayExpr] access to array #-----| Type = [IntType] int @@ -11712,1345 +11718,1307 @@ ir.cpp: #-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) #-----| Type = [ArrayType] int[2] #-----| ValueCategory = lvalue -# 1467| getStmt(1): [ExprStmt] ExprStmt -# 1467| getExpr(): [AssignExpr] ... = ... -# 1467| Type = [IntType] int -# 1467| ValueCategory = lvalue -# 1467| getLValue(): [VariableAccess] x1 -# 1467| Type = [IntType] int -# 1467| ValueCategory = lvalue -# 1467| getRValue(): [Literal] 3 -# 1467| Type = [IntType] int -# 1467| Value = [Literal] 3 -# 1467| ValueCategory = prvalue -# 1468| getStmt(2): [DeclStmt] declaration -# 1468| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rx1 -# 1468| Type = [LValueReferenceType] int & -# 1468| getVariable().getInitializer(): [Initializer] initializer for rx1 -# 1468| getExpr(): [VariableAccess] x1 -# 1468| Type = [IntType] int -# 1468| ValueCategory = lvalue -# 1468| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1468| Type = [LValueReferenceType] int & -# 1468| ValueCategory = prvalue -# 1469| getStmt(3): [DeclStmt] declaration -# 1469| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 1469| getStmt(1): [ExprStmt] ExprStmt +# 1469| getExpr(): [AssignExpr] ... = ... # 1469| Type = [IntType] int -# 1469| getVariable().getInitializer(): [Initializer] initializer for x -# 1469| getExpr(): [VariableAccess] x1 -# 1469| Type = [IntType] int -# 1469| ValueCategory = prvalue(load) -# 1472| getStmt(2): [BlockStmt] { ... } -# 1473| getStmt(0): [DeclStmt] declaration -# 1473| getDeclarationEntry(0): [VariableDeclarationEntry] definition of unnamed_local_variable -# 1473| Type = [LValueReferenceType] int(&)[2] -# 1473| getVariable().getInitializer(): [Initializer] initializer for unnamed_local_variable -# 1473| getExpr(): [VariableAccess] xs -# 1473| Type = [ArrayType] int[2] -# 1473| ValueCategory = lvalue -# 1473| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1473| Type = [LValueReferenceType] int(&)[2] -# 1473| ValueCategory = prvalue -# 1474| getStmt(1): [DeclStmt] declaration -# 1474| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x0 -# 1474| Type = [LValueReferenceType] int & -# 1474| getVariable().getInitializer(): [Initializer] initializer for x0 -# 1474| getExpr(): [ArrayExpr] access to array -# 1474| Type = [IntType] int -# 1474| ValueCategory = lvalue -# 1474| getArrayBase(): [VariableAccess] unnamed_local_variable -# 1474| Type = [LValueReferenceType] int(&)[2] -# 1474| ValueCategory = prvalue(load) -# 1474| getArrayOffset(): [Literal] 0 -# 1474| Type = [IntType] int -# 1474| Value = [Literal] 0 -# 1474| ValueCategory = prvalue -# 1474| getArrayBase().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 1474| Type = [IntPointerType] int * -# 1474| ValueCategory = prvalue -# 1474| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1474| Type = [ArrayType] int[2] -# 1474| ValueCategory = lvalue -# 1474| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1474| Type = [LValueReferenceType] int & -# 1474| ValueCategory = prvalue -# 1475| getStmt(2): [DeclStmt] declaration -# 1475| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x1 -# 1475| Type = [LValueReferenceType] int & -# 1475| getVariable().getInitializer(): [Initializer] initializer for x1 -# 1475| getExpr(): [ArrayExpr] access to array -# 1475| Type = [IntType] int +# 1469| ValueCategory = lvalue +# 1469| getLValue(): [VariableAccess] x1 +# 1469| Type = [IntType] int +# 1469| ValueCategory = lvalue +# 1469| getRValue(): [Literal] 3 +# 1469| Type = [IntType] int +# 1469| Value = [Literal] 3 +# 1469| ValueCategory = prvalue +# 1470| getStmt(2): [DeclStmt] declaration +# 1470| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rx1 +# 1470| Type = [LValueReferenceType] int & +# 1470| getVariable().getInitializer(): [Initializer] initializer for rx1 +# 1470| getExpr(): [VariableAccess] x1 +# 1470| Type = [IntType] int +# 1470| ValueCategory = lvalue +# 1470| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1470| Type = [LValueReferenceType] int & +# 1470| ValueCategory = prvalue +# 1471| getStmt(3): [DeclStmt] declaration +# 1471| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 1471| Type = [IntType] int +# 1471| getVariable().getInitializer(): [Initializer] initializer for x +# 1471| getExpr(): [VariableAccess] x1 +# 1471| Type = [IntType] int +# 1471| ValueCategory = prvalue(load) +# 1474| getStmt(2): [BlockStmt] { ... } +# 1475| getStmt(0): [DeclStmt] declaration +# 1475| getDeclarationEntry(0): [VariableDeclarationEntry] definition of unnamed_local_variable +# 1475| Type = [LValueReferenceType] int(&)[2] +# 1475| getVariable().getInitializer(): [Initializer] initializer for unnamed_local_variable +# 1475| getExpr(): [VariableAccess] xs +# 1475| Type = [ArrayType] int[2] # 1475| ValueCategory = lvalue -# 1475| getArrayBase(): [VariableAccess] unnamed_local_variable -# 1475| Type = [LValueReferenceType] int(&)[2] -# 1475| ValueCategory = prvalue(load) -# 1475| getArrayOffset(): [Literal] 1 -# 1475| Type = [IntType] int -# 1475| Value = [Literal] 1 -# 1475| ValueCategory = prvalue -# 1475| getArrayBase().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 1475| Type = [IntPointerType] int * -# 1475| ValueCategory = prvalue -# 1475| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1475| Type = [ArrayType] int[2] -# 1475| ValueCategory = lvalue # 1475| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1475| Type = [LValueReferenceType] int & +# 1475| Type = [LValueReferenceType] int(&)[2] # 1475| ValueCategory = prvalue -# 1476| getStmt(3): [ExprStmt] ExprStmt -# 1476| getExpr(): [AssignExpr] ... = ... -# 1476| Type = [IntType] int -# 1476| ValueCategory = lvalue -# 1476| getLValue(): [VariableAccess] x1 -# 1476| Type = [LValueReferenceType] int & -# 1476| ValueCategory = prvalue(load) -# 1476| getRValue(): [Literal] 3 -# 1476| Type = [IntType] int -# 1476| Value = [Literal] 3 -# 1476| ValueCategory = prvalue -# 1476| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1476| Type = [IntType] int -# 1476| ValueCategory = lvalue -# 1477| getStmt(4): [DeclStmt] declaration -# 1477| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rx1 +# 1476| getStmt(1): [DeclStmt] declaration +# 1476| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x0 +# 1476| Type = [LValueReferenceType] int & +# 1476| getVariable().getInitializer(): [Initializer] initializer for x0 +# 1476| getExpr(): [ArrayExpr] access to array +# 1476| Type = [IntType] int +# 1476| ValueCategory = lvalue +# 1476| getArrayBase(): [VariableAccess] unnamed_local_variable +# 1476| Type = [LValueReferenceType] int(&)[2] +# 1476| ValueCategory = prvalue(load) +# 1476| getArrayOffset(): [Literal] 0 +# 1476| Type = [IntType] int +# 1476| Value = [Literal] 0 +# 1476| ValueCategory = prvalue +# 1476| getArrayBase().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 1476| Type = [IntPointerType] int * +# 1476| ValueCategory = prvalue +# 1476| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1476| Type = [ArrayType] int[2] +# 1476| ValueCategory = lvalue +# 1476| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1476| Type = [LValueReferenceType] int & +# 1476| ValueCategory = prvalue +# 1477| getStmt(2): [DeclStmt] declaration +# 1477| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x1 # 1477| Type = [LValueReferenceType] int & -# 1477| getVariable().getInitializer(): [Initializer] initializer for rx1 -# 1477| getExpr(): [VariableAccess] x1 -# 1477| Type = [LValueReferenceType] int & -# 1477| ValueCategory = prvalue(load) +# 1477| getVariable().getInitializer(): [Initializer] initializer for x1 +# 1477| getExpr(): [ArrayExpr] access to array +# 1477| Type = [IntType] int +# 1477| ValueCategory = lvalue +# 1477| getArrayBase(): [VariableAccess] unnamed_local_variable +# 1477| Type = [LValueReferenceType] int(&)[2] +# 1477| ValueCategory = prvalue(load) +# 1477| getArrayOffset(): [Literal] 1 +# 1477| Type = [IntType] int +# 1477| Value = [Literal] 1 +# 1477| ValueCategory = prvalue +# 1477| getArrayBase().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 1477| Type = [IntPointerType] int * +# 1477| ValueCategory = prvalue +# 1477| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1477| Type = [ArrayType] int[2] +# 1477| ValueCategory = lvalue # 1477| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) # 1477| Type = [LValueReferenceType] int & # 1477| ValueCategory = prvalue -# 1477| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1477| Type = [IntType] int -# 1477| ValueCategory = lvalue -# 1478| getStmt(5): [DeclStmt] declaration -# 1478| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 1478| getStmt(3): [ExprStmt] ExprStmt +# 1478| getExpr(): [AssignExpr] ... = ... # 1478| Type = [IntType] int -# 1478| getVariable().getInitializer(): [Initializer] initializer for x -# 1478| getExpr(): [VariableAccess] x1 -# 1478| Type = [LValueReferenceType] int & -# 1478| ValueCategory = prvalue(load) -# 1478| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1478| Type = [IntType] int -# 1478| ValueCategory = prvalue(load) -# 1480| getStmt(3): [ReturnStmt] return ... -# 1482| [CopyAssignmentOperator] StructuredBindingDataMemberMemberStruct& StructuredBindingDataMemberMemberStruct::operator=(StructuredBindingDataMemberMemberStruct const&) -# 1482| : +# 1478| ValueCategory = lvalue +# 1478| getLValue(): [VariableAccess] x1 +# 1478| Type = [LValueReferenceType] int & +# 1478| ValueCategory = prvalue(load) +# 1478| getRValue(): [Literal] 3 +# 1478| Type = [IntType] int +# 1478| Value = [Literal] 3 +# 1478| ValueCategory = prvalue +# 1478| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1478| Type = [IntType] int +# 1478| ValueCategory = lvalue +# 1479| getStmt(4): [DeclStmt] declaration +# 1479| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rx1 +# 1479| Type = [LValueReferenceType] int & +# 1479| getVariable().getInitializer(): [Initializer] initializer for rx1 +# 1479| getExpr(): [VariableAccess] x1 +# 1479| Type = [LValueReferenceType] int & +# 1479| ValueCategory = prvalue(load) +# 1479| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1479| Type = [LValueReferenceType] int & +# 1479| ValueCategory = prvalue +# 1479| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1479| Type = [IntType] int +# 1479| ValueCategory = lvalue +# 1480| getStmt(5): [DeclStmt] declaration +# 1480| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 1480| Type = [IntType] int +# 1480| getVariable().getInitializer(): [Initializer] initializer for x +# 1480| getExpr(): [VariableAccess] x1 +# 1480| Type = [LValueReferenceType] int & +# 1480| ValueCategory = prvalue(load) +# 1480| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1480| Type = [IntType] int +# 1480| ValueCategory = prvalue(load) +# 1482| getStmt(3): [ReturnStmt] return ... +# 1484| [CopyAssignmentOperator] StructuredBindingDataMemberMemberStruct& StructuredBindingDataMemberMemberStruct::operator=(StructuredBindingDataMemberMemberStruct const&) +# 1484| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const StructuredBindingDataMemberMemberStruct & -# 1482| [MoveAssignmentOperator] StructuredBindingDataMemberMemberStruct& StructuredBindingDataMemberMemberStruct::operator=(StructuredBindingDataMemberMemberStruct&&) -# 1482| : +# 1484| [MoveAssignmentOperator] StructuredBindingDataMemberMemberStruct& StructuredBindingDataMemberMemberStruct::operator=(StructuredBindingDataMemberMemberStruct&&) +# 1484| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] StructuredBindingDataMemberMemberStruct && -# 1482| [Constructor] void StructuredBindingDataMemberMemberStruct::StructuredBindingDataMemberMemberStruct() -# 1482| : -# 1482| : -# 1482| getInitializer(0): [ConstructorFieldInit] constructor init of field x -# 1482| Type = [IntType] int -# 1482| ValueCategory = prvalue -# 1482| getEntryPoint(): [BlockStmt] { ... } -# 1482| getStmt(0): [ReturnStmt] return ... -# 1482| [CopyConstructor] void StructuredBindingDataMemberMemberStruct::StructuredBindingDataMemberMemberStruct(StructuredBindingDataMemberMemberStruct const&) -# 1482| : +# 1484| [Constructor] void StructuredBindingDataMemberMemberStruct::StructuredBindingDataMemberMemberStruct() +# 1484| : +# 1484| : +# 1484| getInitializer(0): [ConstructorFieldInit] constructor init of field x +# 1484| Type = [IntType] int +# 1484| ValueCategory = prvalue +# 1484| getEntryPoint(): [BlockStmt] { ... } +# 1484| getStmt(0): [ReturnStmt] return ... +# 1484| [CopyConstructor] void StructuredBindingDataMemberMemberStruct::StructuredBindingDataMemberMemberStruct(StructuredBindingDataMemberMemberStruct const&) +# 1484| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const StructuredBindingDataMemberMemberStruct & -# 1482| [MoveConstructor] void StructuredBindingDataMemberMemberStruct::StructuredBindingDataMemberMemberStruct(StructuredBindingDataMemberMemberStruct&&) -# 1482| : +# 1484| [MoveConstructor] void StructuredBindingDataMemberMemberStruct::StructuredBindingDataMemberMemberStruct(StructuredBindingDataMemberMemberStruct&&) +# 1484| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] StructuredBindingDataMemberMemberStruct && -# 1486| [CopyAssignmentOperator] StructuredBindingDataMemberStruct& StructuredBindingDataMemberStruct::operator=(StructuredBindingDataMemberStruct const&) -# 1486| : +# 1488| [CopyAssignmentOperator] StructuredBindingDataMemberStruct& StructuredBindingDataMemberStruct::operator=(StructuredBindingDataMemberStruct const&) +# 1488| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const StructuredBindingDataMemberStruct & -# 1486| [Constructor] void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct() -# 1486| : -# 1486| : -# 1486| getInitializer(0): [ConstructorFieldInit] constructor init of field i -# 1486| Type = [IntType] int -# 1486| ValueCategory = prvalue -# 1486| getInitializer(1): [ConstructorFieldInit] constructor init of field d -# 1486| Type = [DoubleType] double -# 1486| ValueCategory = prvalue -# 1486| getInitializer(2): [ConstructorFieldInit] constructor init of field r -# 1486| Type = [LValueReferenceType] int & -# 1486| ValueCategory = prvalue -# 1486| getInitializer(3): [ConstructorFieldInit] constructor init of field p -# 1486| Type = [IntPointerType] int * -# 1486| ValueCategory = prvalue -# 1486| getInitializer(4): [ConstructorFieldInit] constructor init of field xs -# 1486| Type = [CTypedefType,NestedTypedefType] ArrayType -# 1486| ValueCategory = prvalue -# 1486| getInitializer(5): [ConstructorFieldInit] constructor init of field r_alt -# 1486| Type = [CTypedefType,NestedTypedefType] RefType -# 1486| ValueCategory = prvalue -# 1486| getInitializer(6): [ConstructorFieldInit] constructor init of field m -# 1486| Type = [Struct] StructuredBindingDataMemberMemberStruct -# 1486| ValueCategory = prvalue -# 1486| getExpr(): [ConstructorCall] call to StructuredBindingDataMemberMemberStruct -# 1486| Type = [VoidType] void -# 1486| ValueCategory = prvalue -# 1486| getEntryPoint(): [BlockStmt] { ... } -# 1486| getStmt(0): [ReturnStmt] return ... -# 1486| [CopyConstructor] void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct(StructuredBindingDataMemberStruct const&) -# 1486| : +# 1488| [Constructor] void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct() +# 1488| : +# 1488| : +# 1488| getInitializer(0): [ConstructorFieldInit] constructor init of field i +# 1488| Type = [IntType] int +# 1488| ValueCategory = prvalue +# 1488| getInitializer(1): [ConstructorFieldInit] constructor init of field d +# 1488| Type = [DoubleType] double +# 1488| ValueCategory = prvalue +# 1488| getInitializer(2): [ConstructorFieldInit] constructor init of field r +# 1488| Type = [LValueReferenceType] int & +# 1488| ValueCategory = prvalue +# 1488| getInitializer(3): [ConstructorFieldInit] constructor init of field p +# 1488| Type = [IntPointerType] int * +# 1488| ValueCategory = prvalue +# 1488| getInitializer(4): [ConstructorFieldInit] constructor init of field xs +# 1488| Type = [CTypedefType,NestedTypedefType] ArrayType +# 1488| ValueCategory = prvalue +# 1488| getInitializer(5): [ConstructorFieldInit] constructor init of field r_alt +# 1488| Type = [CTypedefType,NestedTypedefType] RefType +# 1488| ValueCategory = prvalue +# 1488| getInitializer(6): [ConstructorFieldInit] constructor init of field m +# 1488| Type = [Struct] StructuredBindingDataMemberMemberStruct +# 1488| ValueCategory = prvalue +# 1488| getExpr(): [ConstructorCall] call to StructuredBindingDataMemberMemberStruct +# 1488| Type = [VoidType] void +# 1488| ValueCategory = prvalue +# 1488| getEntryPoint(): [BlockStmt] { ... } +# 1488| getStmt(0): [ReturnStmt] return ... +# 1488| [CopyConstructor] void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct(StructuredBindingDataMemberStruct const&) +# 1488| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const StructuredBindingDataMemberStruct & -# 1486| : -# 1486| getInitializer(0): [ConstructorFieldInit] constructor init of field i -# 1486| Type = [IntType] int -# 1486| ValueCategory = prvalue -# 1486| getExpr(): [ReferenceFieldAccess] i -# 1486| Type = [IntType] int -# 1486| ValueCategory = prvalue(load) -# 1486| getQualifier(): [VariableAccess] (unnamed parameter 0) -# 1486| Type = [LValueReferenceType] const StructuredBindingDataMemberStruct & -# 1486| ValueCategory = prvalue(load) -# 1486| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1486| Type = [SpecifiedType] const StructuredBindingDataMemberStruct -# 1486| ValueCategory = lvalue -# 1486| getInitializer(1): [ConstructorFieldInit] constructor init of field d -# 1486| Type = [DoubleType] double -# 1486| ValueCategory = prvalue -# 1486| getExpr(): [ReferenceFieldAccess] d -# 1486| Type = [DoubleType] double -# 1486| ValueCategory = prvalue(load) -# 1486| getQualifier(): [VariableAccess] (unnamed parameter 0) -# 1486| Type = [LValueReferenceType] const StructuredBindingDataMemberStruct & -# 1486| ValueCategory = prvalue(load) -# 1486| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1486| Type = [SpecifiedType] const StructuredBindingDataMemberStruct -# 1486| ValueCategory = lvalue -# 1486| getInitializer(2): [ConstructorFieldInit] constructor init of field b -# 1486| Type = [IntType] unsigned int -# 1486| ValueCategory = prvalue -# 1486| getExpr(): [ReferenceFieldAccess] b -# 1486| Type = [IntType] unsigned int -# 1486| ValueCategory = prvalue(load) -# 1486| getQualifier(): [VariableAccess] (unnamed parameter 0) -# 1486| Type = [LValueReferenceType] const StructuredBindingDataMemberStruct & -# 1486| ValueCategory = prvalue(load) -# 1486| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1486| Type = [SpecifiedType] const StructuredBindingDataMemberStruct -# 1486| ValueCategory = lvalue -# 1486| getInitializer(3): [ConstructorFieldInit] constructor init of field r -# 1486| Type = [LValueReferenceType] int & -# 1486| ValueCategory = prvalue -# 1486| getExpr(): [ReferenceFieldAccess] r -# 1486| Type = [LValueReferenceType] int & -# 1486| ValueCategory = prvalue(load) -# 1486| getQualifier(): [VariableAccess] (unnamed parameter 0) -# 1486| Type = [LValueReferenceType] const StructuredBindingDataMemberStruct & -# 1486| ValueCategory = prvalue(load) -# 1486| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1486| Type = [SpecifiedType] const StructuredBindingDataMemberStruct -# 1486| ValueCategory = lvalue -# 1486| getInitializer(4): [ConstructorFieldInit] constructor init of field p -# 1486| Type = [IntPointerType] int * -# 1486| ValueCategory = prvalue -# 1486| getExpr(): [ReferenceFieldAccess] p -# 1486| Type = [IntPointerType] int * -# 1486| ValueCategory = prvalue(load) -# 1486| getQualifier(): [VariableAccess] (unnamed parameter 0) -# 1486| Type = [LValueReferenceType] const StructuredBindingDataMemberStruct & -# 1486| ValueCategory = prvalue(load) -# 1486| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1486| Type = [SpecifiedType] const StructuredBindingDataMemberStruct -# 1486| ValueCategory = lvalue -# 1486| getInitializer(5): [ConstructorFieldInit] constructor init of field xs -# 1486| Type = [CTypedefType,NestedTypedefType] ArrayType -# 1486| ValueCategory = prvalue -# 1486| getExpr(): [ReferenceFieldAccess] xs -# 1486| Type = [CTypedefType,NestedTypedefType] ArrayType -# 1486| ValueCategory = prvalue(load) -# 1486| getQualifier(): [VariableAccess] (unnamed parameter 0) -# 1486| Type = [LValueReferenceType] const StructuredBindingDataMemberStruct & -# 1486| ValueCategory = prvalue(load) -# 1486| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1486| Type = [SpecifiedType] const StructuredBindingDataMemberStruct -# 1486| ValueCategory = lvalue -# 1486| getInitializer(6): [ConstructorFieldInit] constructor init of field r_alt -# 1486| Type = [CTypedefType,NestedTypedefType] RefType -# 1486| ValueCategory = prvalue -# 1486| getExpr(): [ReferenceFieldAccess] r_alt -# 1486| Type = [CTypedefType,NestedTypedefType] RefType -# 1486| ValueCategory = prvalue(load) -# 1486| getQualifier(): [VariableAccess] (unnamed parameter 0) -# 1486| Type = [LValueReferenceType] const StructuredBindingDataMemberStruct & -# 1486| ValueCategory = prvalue(load) -# 1486| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1486| Type = [SpecifiedType] const StructuredBindingDataMemberStruct -# 1486| ValueCategory = lvalue -# 1486| getInitializer(7): [ConstructorFieldInit] constructor init of field m -# 1486| Type = [Struct] StructuredBindingDataMemberMemberStruct -# 1486| ValueCategory = prvalue -# 1486| getExpr(): [ReferenceFieldAccess] m -# 1486| Type = [Struct] StructuredBindingDataMemberMemberStruct -# 1486| ValueCategory = prvalue(load) -# 1486| getQualifier(): [VariableAccess] (unnamed parameter 0) -# 1486| Type = [LValueReferenceType] const StructuredBindingDataMemberStruct & -# 1486| ValueCategory = prvalue(load) -# 1486| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1486| Type = [SpecifiedType] const StructuredBindingDataMemberStruct -# 1486| ValueCategory = lvalue -# 1486| getEntryPoint(): [BlockStmt] { ... } -# 1486| getStmt(0): [ReturnStmt] return ... -# 1486| [MoveConstructor] void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct(StructuredBindingDataMemberStruct&&) -# 1486| : +# 1488| : +# 1488| getInitializer(0): [ConstructorFieldInit] constructor init of field i +# 1488| Type = [IntType] int +# 1488| ValueCategory = prvalue +# 1488| getExpr(): [ReferenceFieldAccess] i +# 1488| Type = [IntType] int +# 1488| ValueCategory = prvalue(load) +# 1488| getQualifier(): [VariableAccess] (unnamed parameter 0) +# 1488| Type = [LValueReferenceType] const StructuredBindingDataMemberStruct & +# 1488| ValueCategory = prvalue(load) +# 1488| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1488| Type = [SpecifiedType] const StructuredBindingDataMemberStruct +# 1488| ValueCategory = lvalue +# 1488| getInitializer(1): [ConstructorFieldInit] constructor init of field d +# 1488| Type = [DoubleType] double +# 1488| ValueCategory = prvalue +# 1488| getExpr(): [ReferenceFieldAccess] d +# 1488| Type = [DoubleType] double +# 1488| ValueCategory = prvalue(load) +# 1488| getQualifier(): [VariableAccess] (unnamed parameter 0) +# 1488| Type = [LValueReferenceType] const StructuredBindingDataMemberStruct & +# 1488| ValueCategory = prvalue(load) +# 1488| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1488| Type = [SpecifiedType] const StructuredBindingDataMemberStruct +# 1488| ValueCategory = lvalue +# 1488| getInitializer(2): [ConstructorFieldInit] constructor init of field b +# 1488| Type = [IntType] unsigned int +# 1488| ValueCategory = prvalue +# 1488| getExpr(): [ReferenceFieldAccess] b +# 1488| Type = [IntType] unsigned int +# 1488| ValueCategory = prvalue(load) +# 1488| getQualifier(): [VariableAccess] (unnamed parameter 0) +# 1488| Type = [LValueReferenceType] const StructuredBindingDataMemberStruct & +# 1488| ValueCategory = prvalue(load) +# 1488| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1488| Type = [SpecifiedType] const StructuredBindingDataMemberStruct +# 1488| ValueCategory = lvalue +# 1488| getInitializer(3): [ConstructorFieldInit] constructor init of field r +# 1488| Type = [LValueReferenceType] int & +# 1488| ValueCategory = prvalue +# 1488| getExpr(): [ReferenceFieldAccess] r +# 1488| Type = [LValueReferenceType] int & +# 1488| ValueCategory = prvalue(load) +# 1488| getQualifier(): [VariableAccess] (unnamed parameter 0) +# 1488| Type = [LValueReferenceType] const StructuredBindingDataMemberStruct & +# 1488| ValueCategory = prvalue(load) +# 1488| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1488| Type = [SpecifiedType] const StructuredBindingDataMemberStruct +# 1488| ValueCategory = lvalue +# 1488| getInitializer(4): [ConstructorFieldInit] constructor init of field p +# 1488| Type = [IntPointerType] int * +# 1488| ValueCategory = prvalue +# 1488| getExpr(): [ReferenceFieldAccess] p +# 1488| Type = [IntPointerType] int * +# 1488| ValueCategory = prvalue(load) +# 1488| getQualifier(): [VariableAccess] (unnamed parameter 0) +# 1488| Type = [LValueReferenceType] const StructuredBindingDataMemberStruct & +# 1488| ValueCategory = prvalue(load) +# 1488| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1488| Type = [SpecifiedType] const StructuredBindingDataMemberStruct +# 1488| ValueCategory = lvalue +# 1488| getInitializer(5): [ConstructorFieldInit] constructor init of field xs +# 1488| Type = [CTypedefType,NestedTypedefType] ArrayType +# 1488| ValueCategory = prvalue +# 1488| getExpr(): [ReferenceFieldAccess] xs +# 1488| Type = [CTypedefType,NestedTypedefType] ArrayType +# 1488| ValueCategory = prvalue(load) +# 1488| getQualifier(): [VariableAccess] (unnamed parameter 0) +# 1488| Type = [LValueReferenceType] const StructuredBindingDataMemberStruct & +# 1488| ValueCategory = prvalue(load) +# 1488| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1488| Type = [SpecifiedType] const StructuredBindingDataMemberStruct +# 1488| ValueCategory = lvalue +# 1488| getInitializer(6): [ConstructorFieldInit] constructor init of field r_alt +# 1488| Type = [CTypedefType,NestedTypedefType] RefType +# 1488| ValueCategory = prvalue +# 1488| getExpr(): [ReferenceFieldAccess] r_alt +# 1488| Type = [CTypedefType,NestedTypedefType] RefType +# 1488| ValueCategory = prvalue(load) +# 1488| getQualifier(): [VariableAccess] (unnamed parameter 0) +# 1488| Type = [LValueReferenceType] const StructuredBindingDataMemberStruct & +# 1488| ValueCategory = prvalue(load) +# 1488| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1488| Type = [SpecifiedType] const StructuredBindingDataMemberStruct +# 1488| ValueCategory = lvalue +# 1488| getInitializer(7): [ConstructorFieldInit] constructor init of field m +# 1488| Type = [Struct] StructuredBindingDataMemberMemberStruct +# 1488| ValueCategory = prvalue +# 1488| getExpr(): [ReferenceFieldAccess] m +# 1488| Type = [Struct] StructuredBindingDataMemberMemberStruct +# 1488| ValueCategory = prvalue(load) +# 1488| getQualifier(): [VariableAccess] (unnamed parameter 0) +# 1488| Type = [LValueReferenceType] const StructuredBindingDataMemberStruct & +# 1488| ValueCategory = prvalue(load) +# 1488| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1488| Type = [SpecifiedType] const StructuredBindingDataMemberStruct +# 1488| ValueCategory = lvalue +# 1488| getEntryPoint(): [BlockStmt] { ... } +# 1488| getStmt(0): [ReturnStmt] return ... +# 1488| [MoveConstructor] void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct(StructuredBindingDataMemberStruct&&) +# 1488| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] StructuredBindingDataMemberStruct && -# 1499| [TopLevelFunction] void data_member_structured_binding() -# 1499| : -# 1499| getEntryPoint(): [BlockStmt] { ... } -# 1500| getStmt(0): [DeclStmt] declaration -# 1500| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s -# 1500| Type = [Struct] StructuredBindingDataMemberStruct -# 1500| getVariable().getInitializer(): [Initializer] initializer for s -# 1500| getExpr(): [ConstructorCall] call to StructuredBindingDataMemberStruct -# 1500| Type = [VoidType] void -# 1500| ValueCategory = prvalue -# 1502| getStmt(1): [BlockStmt] { ... } -# 1503| getStmt(0): [DeclStmt] declaration -# 1503| getDeclarationEntry(0): (no string representation) -# 1503| Type = [Struct] StructuredBindingDataMemberStruct -# 1503| getVariable().getInitializer(): [Initializer] initializer for (unnamed local variable) -# 1503| getExpr(): [VariableAccess] s -# 1503| Type = [Struct] StructuredBindingDataMemberStruct -# 1503| ValueCategory = prvalue(load) -# 1503| getDeclarationEntry(1): [VariableDeclarationEntry] definition of i -# 1503| Type = [IntType] int +# 1501| [TopLevelFunction] void data_member_structured_binding() +# 1501| : +# 1501| getEntryPoint(): [BlockStmt] { ... } +# 1502| getStmt(0): [DeclStmt] declaration +# 1502| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s +# 1502| Type = [Struct] StructuredBindingDataMemberStruct +# 1502| getVariable().getInitializer(): [Initializer] initializer for s +# 1502| getExpr(): [ConstructorCall] call to StructuredBindingDataMemberStruct +# 1502| Type = [VoidType] void +# 1502| ValueCategory = prvalue +# 1504| getStmt(1): [BlockStmt] { ... } +# 1505| getStmt(0): [DeclStmt] declaration +# 1505| getDeclarationEntry(0): (no string representation) +# 1505| Type = [Struct] StructuredBindingDataMemberStruct +# 1505| getVariable().getInitializer(): [Initializer] initializer for (unnamed local variable) +# 1505| getExpr(): [VariableAccess] s +# 1505| Type = [Struct] StructuredBindingDataMemberStruct +# 1505| ValueCategory = prvalue(load) +# 1505| getDeclarationEntry(1): [VariableDeclarationEntry] definition of i +# 1505| Type = [IntType] int #-----| getVariable().getInitializer(): [Initializer] initializer for i -# 1503| getExpr(): [ValueFieldAccess] i -# 1503| Type = [IntType] int -# 1503| ValueCategory = lvalue -# 1503| getQualifier(): [VariableAccess] (unnamed local variable) -# 1503| Type = [Struct] StructuredBindingDataMemberStruct -# 1503| ValueCategory = lvalue -# 1503| getDeclarationEntry(2): [VariableDeclarationEntry] definition of d -# 1503| Type = [DoubleType] double +# 1505| getExpr(): [ValueFieldAccess] i +# 1505| Type = [IntType] int +# 1505| ValueCategory = lvalue +# 1505| getQualifier(): [VariableAccess] (unnamed local variable) +# 1505| Type = [Struct] StructuredBindingDataMemberStruct +# 1505| ValueCategory = lvalue +# 1505| getDeclarationEntry(2): [VariableDeclarationEntry] definition of d +# 1505| Type = [DoubleType] double #-----| getVariable().getInitializer(): [Initializer] initializer for d -# 1503| getExpr(): [ValueFieldAccess] d -# 1503| Type = [DoubleType] double -# 1503| ValueCategory = lvalue -# 1503| getQualifier(): [VariableAccess] (unnamed local variable) -# 1503| Type = [Struct] StructuredBindingDataMemberStruct -# 1503| ValueCategory = lvalue -# 1503| getDeclarationEntry(3): [VariableDeclarationEntry] definition of b -# 1503| Type = [IntType] unsigned int -#-----| getVariable().getInitializer(): [Initializer] initializer for b -# 1503| getExpr(): [ValueFieldAccess] b -# 1503| Type = [IntType] unsigned int -# 1503| ValueCategory = lvalue -# 1503| getQualifier(): [VariableAccess] (unnamed local variable) -# 1503| Type = [Struct] StructuredBindingDataMemberStruct -# 1503| ValueCategory = lvalue -# 1503| getDeclarationEntry(4): [VariableDeclarationEntry] definition of r -# 1503| Type = [IntType] int -#-----| getVariable().getInitializer(): [Initializer] initializer for r -# 1503| getExpr(): [ValueFieldAccess] r -# 1503| Type = [LValueReferenceType] int & -# 1503| ValueCategory = prvalue(load) -# 1503| getQualifier(): [VariableAccess] (unnamed local variable) -# 1503| Type = [Struct] StructuredBindingDataMemberStruct -# 1503| ValueCategory = lvalue -# 1503| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1503| Type = [IntType] int -# 1503| ValueCategory = lvalue -# 1503| getDeclarationEntry(5): [VariableDeclarationEntry] definition of p -# 1503| Type = [IntPointerType] int * -#-----| getVariable().getInitializer(): [Initializer] initializer for p -# 1503| getExpr(): [ValueFieldAccess] p -# 1503| Type = [IntPointerType] int * -# 1503| ValueCategory = lvalue -# 1503| getQualifier(): [VariableAccess] (unnamed local variable) -# 1503| Type = [Struct] StructuredBindingDataMemberStruct -# 1503| ValueCategory = lvalue -# 1503| getDeclarationEntry(6): [VariableDeclarationEntry] definition of xs -# 1503| Type = [CTypedefType,NestedTypedefType] ArrayType -#-----| getVariable().getInitializer(): [Initializer] initializer for xs -# 1503| getExpr(): [ValueFieldAccess] xs -# 1503| Type = [CTypedefType,NestedTypedefType] ArrayType -# 1503| ValueCategory = lvalue -# 1503| getQualifier(): [VariableAccess] (unnamed local variable) -# 1503| Type = [Struct] StructuredBindingDataMemberStruct -# 1503| ValueCategory = lvalue -# 1503| getDeclarationEntry(7): [VariableDeclarationEntry] definition of r_alt -# 1503| Type = [IntType] int -#-----| getVariable().getInitializer(): [Initializer] initializer for r_alt -# 1503| getExpr(): [ValueFieldAccess] r_alt -# 1503| Type = [CTypedefType,NestedTypedefType] RefType -# 1503| ValueCategory = prvalue(load) -# 1503| getQualifier(): [VariableAccess] (unnamed local variable) -# 1503| Type = [Struct] StructuredBindingDataMemberStruct -# 1503| ValueCategory = lvalue -# 1503| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1503| Type = [IntType] int -# 1503| ValueCategory = lvalue -# 1503| getDeclarationEntry(8): [VariableDeclarationEntry] definition of m -# 1503| Type = [Struct] StructuredBindingDataMemberMemberStruct -#-----| getVariable().getInitializer(): [Initializer] initializer for m -# 1503| getExpr(): [ValueFieldAccess] m -# 1503| Type = [Struct] StructuredBindingDataMemberMemberStruct -# 1503| ValueCategory = lvalue -# 1503| getQualifier(): [VariableAccess] (unnamed local variable) -# 1503| Type = [Struct] StructuredBindingDataMemberStruct -# 1503| ValueCategory = lvalue -# 1504| getStmt(1): [ExprStmt] ExprStmt -# 1504| getExpr(): [AssignExpr] ... = ... -# 1504| Type = [DoubleType] double -# 1504| ValueCategory = lvalue -# 1504| getLValue(): [VariableAccess] d -# 1504| Type = [DoubleType] double -# 1504| ValueCategory = lvalue -# 1504| getRValue(): [Literal] 4.0 -# 1504| Type = [DoubleType] double -# 1504| Value = [Literal] 4.0 -# 1504| ValueCategory = prvalue -# 1505| getStmt(2): [DeclStmt] declaration -# 1505| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rd -# 1505| Type = [LValueReferenceType] double & -# 1505| getVariable().getInitializer(): [Initializer] initializer for rd -# 1505| getExpr(): [VariableAccess] d +# 1505| getExpr(): [ValueFieldAccess] d # 1505| Type = [DoubleType] double # 1505| ValueCategory = lvalue -# 1505| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1505| Type = [LValueReferenceType] double & -# 1505| ValueCategory = prvalue -# 1506| getStmt(3): [DeclStmt] declaration -# 1506| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v -# 1506| Type = [IntType] int -# 1506| getVariable().getInitializer(): [Initializer] initializer for v -# 1506| getExpr(): [VariableAccess] i -# 1506| Type = [IntType] int -# 1506| ValueCategory = prvalue(load) -# 1507| getStmt(4): [ExprStmt] ExprStmt -# 1507| getExpr(): [AssignExpr] ... = ... -# 1507| Type = [IntType] int -# 1507| ValueCategory = lvalue -# 1507| getLValue(): [VariableAccess] r -# 1507| Type = [IntType] int -# 1507| ValueCategory = lvalue -# 1507| getRValue(): [Literal] 5 -# 1507| Type = [IntType] int -# 1507| Value = [Literal] 5 -# 1507| ValueCategory = prvalue -# 1508| getStmt(5): [ExprStmt] ExprStmt -# 1508| getExpr(): [AssignExpr] ... = ... +# 1505| getQualifier(): [VariableAccess] (unnamed local variable) +# 1505| Type = [Struct] StructuredBindingDataMemberStruct +# 1505| ValueCategory = lvalue +# 1505| getDeclarationEntry(3): [VariableDeclarationEntry] definition of b +# 1505| Type = [IntType] unsigned int +#-----| getVariable().getInitializer(): [Initializer] initializer for b +# 1505| getExpr(): [ValueFieldAccess] b +# 1505| Type = [IntType] unsigned int +# 1505| ValueCategory = lvalue +# 1505| getQualifier(): [VariableAccess] (unnamed local variable) +# 1505| Type = [Struct] StructuredBindingDataMemberStruct +# 1505| ValueCategory = lvalue +# 1505| getDeclarationEntry(4): [VariableDeclarationEntry] definition of r +# 1505| Type = [IntType] int +#-----| getVariable().getInitializer(): [Initializer] initializer for r +# 1505| getExpr(): [ValueFieldAccess] r +# 1505| Type = [LValueReferenceType] int & +# 1505| ValueCategory = prvalue(load) +# 1505| getQualifier(): [VariableAccess] (unnamed local variable) +# 1505| Type = [Struct] StructuredBindingDataMemberStruct +# 1505| ValueCategory = lvalue +# 1505| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1505| Type = [IntType] int +# 1505| ValueCategory = lvalue +# 1505| getDeclarationEntry(5): [VariableDeclarationEntry] definition of p +# 1505| Type = [IntPointerType] int * +#-----| getVariable().getInitializer(): [Initializer] initializer for p +# 1505| getExpr(): [ValueFieldAccess] p +# 1505| Type = [IntPointerType] int * +# 1505| ValueCategory = lvalue +# 1505| getQualifier(): [VariableAccess] (unnamed local variable) +# 1505| Type = [Struct] StructuredBindingDataMemberStruct +# 1505| ValueCategory = lvalue +# 1505| getDeclarationEntry(6): [VariableDeclarationEntry] definition of xs +# 1505| Type = [CTypedefType,NestedTypedefType] ArrayType +#-----| getVariable().getInitializer(): [Initializer] initializer for xs +# 1505| getExpr(): [ValueFieldAccess] xs +# 1505| Type = [CTypedefType,NestedTypedefType] ArrayType +# 1505| ValueCategory = lvalue +# 1505| getQualifier(): [VariableAccess] (unnamed local variable) +# 1505| Type = [Struct] StructuredBindingDataMemberStruct +# 1505| ValueCategory = lvalue +# 1505| getDeclarationEntry(7): [VariableDeclarationEntry] definition of r_alt +# 1505| Type = [IntType] int +#-----| getVariable().getInitializer(): [Initializer] initializer for r_alt +# 1505| getExpr(): [ValueFieldAccess] r_alt +# 1505| Type = [CTypedefType,NestedTypedefType] RefType +# 1505| ValueCategory = prvalue(load) +# 1505| getQualifier(): [VariableAccess] (unnamed local variable) +# 1505| Type = [Struct] StructuredBindingDataMemberStruct +# 1505| ValueCategory = lvalue +# 1505| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1505| Type = [IntType] int +# 1505| ValueCategory = lvalue +# 1505| getDeclarationEntry(8): [VariableDeclarationEntry] definition of m +# 1505| Type = [Struct] StructuredBindingDataMemberMemberStruct +#-----| getVariable().getInitializer(): [Initializer] initializer for m +# 1505| getExpr(): [ValueFieldAccess] m +# 1505| Type = [Struct] StructuredBindingDataMemberMemberStruct +# 1505| ValueCategory = lvalue +# 1505| getQualifier(): [VariableAccess] (unnamed local variable) +# 1505| Type = [Struct] StructuredBindingDataMemberStruct +# 1505| ValueCategory = lvalue +# 1506| getStmt(1): [ExprStmt] ExprStmt +# 1506| getExpr(): [AssignExpr] ... = ... +# 1506| Type = [DoubleType] double +# 1506| ValueCategory = lvalue +# 1506| getLValue(): [VariableAccess] d +# 1506| Type = [DoubleType] double +# 1506| ValueCategory = lvalue +# 1506| getRValue(): [Literal] 4.0 +# 1506| Type = [DoubleType] double +# 1506| Value = [Literal] 4.0 +# 1506| ValueCategory = prvalue +# 1507| getStmt(2): [DeclStmt] declaration +# 1507| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rd +# 1507| Type = [LValueReferenceType] double & +# 1507| getVariable().getInitializer(): [Initializer] initializer for rd +# 1507| getExpr(): [VariableAccess] d +# 1507| Type = [DoubleType] double +# 1507| ValueCategory = lvalue +# 1507| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1507| Type = [LValueReferenceType] double & +# 1507| ValueCategory = prvalue +# 1508| getStmt(3): [DeclStmt] declaration +# 1508| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v # 1508| Type = [IntType] int -# 1508| ValueCategory = lvalue -# 1508| getLValue(): [PointerDereferenceExpr] * ... -# 1508| Type = [IntType] int -# 1508| ValueCategory = lvalue -# 1508| getOperand(): [VariableAccess] p -# 1508| Type = [IntPointerType] int * +# 1508| getVariable().getInitializer(): [Initializer] initializer for v +# 1508| getExpr(): [VariableAccess] i +# 1508| Type = [IntType] int # 1508| ValueCategory = prvalue(load) -# 1508| getRValue(): [Literal] 6 -# 1508| Type = [IntType] int -# 1508| Value = [Literal] 6 -# 1508| ValueCategory = prvalue -# 1509| getStmt(6): [DeclStmt] declaration -# 1509| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rr -# 1509| Type = [LValueReferenceType] int & -# 1509| getVariable().getInitializer(): [Initializer] initializer for rr -# 1509| getExpr(): [VariableAccess] r -# 1509| Type = [IntType] int -# 1509| ValueCategory = lvalue -# 1509| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1509| Type = [LValueReferenceType] int & -# 1509| ValueCategory = prvalue -# 1510| getStmt(7): [DeclStmt] declaration -# 1510| getDeclarationEntry(0): [VariableDeclarationEntry] definition of pr -# 1510| Type = [IntPointerType] int * -# 1510| getVariable().getInitializer(): [Initializer] initializer for pr -# 1510| getExpr(): [AddressOfExpr] & ... +# 1509| getStmt(4): [ExprStmt] ExprStmt +# 1509| getExpr(): [AssignExpr] ... = ... +# 1509| Type = [IntType] int +# 1509| ValueCategory = lvalue +# 1509| getLValue(): [VariableAccess] r +# 1509| Type = [IntType] int +# 1509| ValueCategory = lvalue +# 1509| getRValue(): [Literal] 5 +# 1509| Type = [IntType] int +# 1509| Value = [Literal] 5 +# 1509| ValueCategory = prvalue +# 1510| getStmt(5): [ExprStmt] ExprStmt +# 1510| getExpr(): [AssignExpr] ... = ... +# 1510| Type = [IntType] int +# 1510| ValueCategory = lvalue +# 1510| getLValue(): [PointerDereferenceExpr] * ... +# 1510| Type = [IntType] int +# 1510| ValueCategory = lvalue +# 1510| getOperand(): [VariableAccess] p # 1510| Type = [IntPointerType] int * -# 1510| ValueCategory = prvalue -# 1510| getOperand(): [VariableAccess] r -# 1510| Type = [IntType] int -# 1510| ValueCategory = lvalue -# 1511| getStmt(8): [DeclStmt] declaration -# 1511| getDeclarationEntry(0): [VariableDeclarationEntry] definition of w -# 1511| Type = [IntType] int -# 1511| getVariable().getInitializer(): [Initializer] initializer for w +# 1510| ValueCategory = prvalue(load) +# 1510| getRValue(): [Literal] 6 +# 1510| Type = [IntType] int +# 1510| Value = [Literal] 6 +# 1510| ValueCategory = prvalue +# 1511| getStmt(6): [DeclStmt] declaration +# 1511| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rr +# 1511| Type = [LValueReferenceType] int & +# 1511| getVariable().getInitializer(): [Initializer] initializer for rr # 1511| getExpr(): [VariableAccess] r # 1511| Type = [IntType] int -# 1511| ValueCategory = prvalue(load) -# 1514| getStmt(2): [BlockStmt] { ... } -# 1515| getStmt(0): [DeclStmt] declaration -# 1515| getDeclarationEntry(0): [VariableDeclarationEntry] definition of unnamed_local_variable -# 1515| Type = [Struct] StructuredBindingDataMemberStruct -# 1515| getVariable().getInitializer(): [Initializer] initializer for unnamed_local_variable -# 1515| getExpr(): [VariableAccess] s -# 1515| Type = [Struct] StructuredBindingDataMemberStruct -# 1515| ValueCategory = prvalue(load) -# 1516| getStmt(1): [DeclStmt] declaration -# 1516| getDeclarationEntry(0): [VariableDeclarationEntry] definition of i -# 1516| Type = [LValueReferenceType] int & -# 1516| getVariable().getInitializer(): [Initializer] initializer for i -# 1516| getExpr(): [ValueFieldAccess] i -# 1516| Type = [IntType] int -# 1516| ValueCategory = lvalue -# 1516| getQualifier(): [VariableAccess] unnamed_local_variable -# 1516| Type = [Struct] StructuredBindingDataMemberStruct -# 1516| ValueCategory = lvalue -# 1516| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1516| Type = [LValueReferenceType] int & -# 1516| ValueCategory = prvalue -# 1517| getStmt(2): [DeclStmt] declaration -# 1517| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d -# 1517| Type = [LValueReferenceType] double & -# 1517| getVariable().getInitializer(): [Initializer] initializer for d -# 1517| getExpr(): [ValueFieldAccess] d -# 1517| Type = [DoubleType] double -# 1517| ValueCategory = lvalue -# 1517| getQualifier(): [VariableAccess] unnamed_local_variable -# 1517| Type = [Struct] StructuredBindingDataMemberStruct -# 1517| ValueCategory = lvalue -# 1517| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1517| Type = [LValueReferenceType] double & -# 1517| ValueCategory = prvalue -# 1519| getStmt(3): [DeclStmt] declaration -# 1519| getDeclarationEntry(0): [VariableDeclarationEntry] definition of r -# 1519| Type = [LValueReferenceType] int & -# 1519| getVariable().getInitializer(): [Initializer] initializer for r -# 1519| getExpr(): [ValueFieldAccess] r -# 1519| Type = [LValueReferenceType] int & -# 1519| ValueCategory = prvalue(load) +# 1511| ValueCategory = lvalue +# 1511| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1511| Type = [LValueReferenceType] int & +# 1511| ValueCategory = prvalue +# 1512| getStmt(7): [DeclStmt] declaration +# 1512| getDeclarationEntry(0): [VariableDeclarationEntry] definition of pr +# 1512| Type = [IntPointerType] int * +# 1512| getVariable().getInitializer(): [Initializer] initializer for pr +# 1512| getExpr(): [AddressOfExpr] & ... +# 1512| Type = [IntPointerType] int * +# 1512| ValueCategory = prvalue +# 1512| getOperand(): [VariableAccess] r +# 1512| Type = [IntType] int +# 1512| ValueCategory = lvalue +# 1513| getStmt(8): [DeclStmt] declaration +# 1513| getDeclarationEntry(0): [VariableDeclarationEntry] definition of w +# 1513| Type = [IntType] int +# 1513| getVariable().getInitializer(): [Initializer] initializer for w +# 1513| getExpr(): [VariableAccess] r +# 1513| Type = [IntType] int +# 1513| ValueCategory = prvalue(load) +# 1516| getStmt(2): [BlockStmt] { ... } +# 1517| getStmt(0): [DeclStmt] declaration +# 1517| getDeclarationEntry(0): [VariableDeclarationEntry] definition of unnamed_local_variable +# 1517| Type = [Struct] StructuredBindingDataMemberStruct +# 1517| getVariable().getInitializer(): [Initializer] initializer for unnamed_local_variable +# 1517| getExpr(): [VariableAccess] s +# 1517| Type = [Struct] StructuredBindingDataMemberStruct +# 1517| ValueCategory = prvalue(load) +# 1518| getStmt(1): [DeclStmt] declaration +# 1518| getDeclarationEntry(0): [VariableDeclarationEntry] definition of i +# 1518| Type = [LValueReferenceType] int & +# 1518| getVariable().getInitializer(): [Initializer] initializer for i +# 1518| getExpr(): [ValueFieldAccess] i +# 1518| Type = [IntType] int +# 1518| ValueCategory = lvalue +# 1518| getQualifier(): [VariableAccess] unnamed_local_variable +# 1518| Type = [Struct] StructuredBindingDataMemberStruct +# 1518| ValueCategory = lvalue +# 1518| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1518| Type = [LValueReferenceType] int & +# 1518| ValueCategory = prvalue +# 1519| getStmt(2): [DeclStmt] declaration +# 1519| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d +# 1519| Type = [LValueReferenceType] double & +# 1519| getVariable().getInitializer(): [Initializer] initializer for d +# 1519| getExpr(): [ValueFieldAccess] d +# 1519| Type = [DoubleType] double +# 1519| ValueCategory = lvalue # 1519| getQualifier(): [VariableAccess] unnamed_local_variable # 1519| Type = [Struct] StructuredBindingDataMemberStruct # 1519| ValueCategory = lvalue # 1519| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1519| Type = [LValueReferenceType] int & +# 1519| Type = [LValueReferenceType] double & # 1519| ValueCategory = prvalue -# 1519| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1519| Type = [IntType] int -# 1519| ValueCategory = lvalue -# 1520| getStmt(4): [DeclStmt] declaration -# 1520| getDeclarationEntry(0): [VariableDeclarationEntry] definition of p -# 1520| Type = [LValueReferenceType] int *& -# 1520| getVariable().getInitializer(): [Initializer] initializer for p -# 1520| getExpr(): [ValueFieldAccess] p -# 1520| Type = [IntPointerType] int * -# 1520| ValueCategory = lvalue -# 1520| getQualifier(): [VariableAccess] unnamed_local_variable -# 1520| Type = [Struct] StructuredBindingDataMemberStruct -# 1520| ValueCategory = lvalue -# 1520| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1520| Type = [LValueReferenceType] int *& -# 1520| ValueCategory = prvalue -# 1521| getStmt(5): [ExprStmt] ExprStmt -# 1521| getExpr(): [AssignExpr] ... = ... -# 1521| Type = [DoubleType] double -# 1521| ValueCategory = lvalue -# 1521| getLValue(): [VariableAccess] d -# 1521| Type = [LValueReferenceType] double & -# 1521| ValueCategory = prvalue(load) -# 1521| getRValue(): [Literal] 4.0 -# 1521| Type = [DoubleType] double -# 1521| Value = [Literal] 4.0 -# 1521| ValueCategory = prvalue -# 1521| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1521| Type = [DoubleType] double -# 1521| ValueCategory = lvalue -# 1522| getStmt(6): [DeclStmt] declaration -# 1522| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rd -# 1522| Type = [LValueReferenceType] double & -# 1522| getVariable().getInitializer(): [Initializer] initializer for rd -# 1522| getExpr(): [VariableAccess] d -# 1522| Type = [LValueReferenceType] double & -# 1522| ValueCategory = prvalue(load) -# 1522| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1522| Type = [LValueReferenceType] double & -# 1522| ValueCategory = prvalue -# 1522| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1522| Type = [DoubleType] double +# 1521| getStmt(3): [DeclStmt] declaration +# 1521| getDeclarationEntry(0): [VariableDeclarationEntry] definition of r +# 1521| Type = [LValueReferenceType] int & +# 1521| getVariable().getInitializer(): [Initializer] initializer for r +# 1521| getExpr(): [ValueFieldAccess] r +# 1521| Type = [LValueReferenceType] int & +# 1521| ValueCategory = prvalue(load) +# 1521| getQualifier(): [VariableAccess] unnamed_local_variable +# 1521| Type = [Struct] StructuredBindingDataMemberStruct +# 1521| ValueCategory = lvalue +# 1521| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1521| Type = [LValueReferenceType] int & +# 1521| ValueCategory = prvalue +# 1521| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1521| Type = [IntType] int +# 1521| ValueCategory = lvalue +# 1522| getStmt(4): [DeclStmt] declaration +# 1522| getDeclarationEntry(0): [VariableDeclarationEntry] definition of p +# 1522| Type = [LValueReferenceType] int *& +# 1522| getVariable().getInitializer(): [Initializer] initializer for p +# 1522| getExpr(): [ValueFieldAccess] p +# 1522| Type = [IntPointerType] int * +# 1522| ValueCategory = lvalue +# 1522| getQualifier(): [VariableAccess] unnamed_local_variable +# 1522| Type = [Struct] StructuredBindingDataMemberStruct # 1522| ValueCategory = lvalue -# 1523| getStmt(7): [DeclStmt] declaration -# 1523| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v -# 1523| Type = [IntType] int -# 1523| getVariable().getInitializer(): [Initializer] initializer for v -# 1523| getExpr(): [VariableAccess] i -# 1523| Type = [LValueReferenceType] int & -# 1523| ValueCategory = prvalue(load) -# 1523| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1523| Type = [IntType] int -# 1523| ValueCategory = prvalue(load) -# 1524| getStmt(8): [ExprStmt] ExprStmt -# 1524| getExpr(): [AssignExpr] ... = ... -# 1524| Type = [IntType] int -# 1524| ValueCategory = lvalue -# 1524| getLValue(): [VariableAccess] r -# 1524| Type = [LValueReferenceType] int & -# 1524| ValueCategory = prvalue(load) -# 1524| getRValue(): [Literal] 5 -# 1524| Type = [IntType] int -# 1524| Value = [Literal] 5 -# 1524| ValueCategory = prvalue -# 1524| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1524| Type = [IntType] int -# 1524| ValueCategory = lvalue -# 1525| getStmt(9): [ExprStmt] ExprStmt -# 1525| getExpr(): [AssignExpr] ... = ... +# 1522| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1522| Type = [LValueReferenceType] int *& +# 1522| ValueCategory = prvalue +# 1523| getStmt(5): [ExprStmt] ExprStmt +# 1523| getExpr(): [AssignExpr] ... = ... +# 1523| Type = [DoubleType] double +# 1523| ValueCategory = lvalue +# 1523| getLValue(): [VariableAccess] d +# 1523| Type = [LValueReferenceType] double & +# 1523| ValueCategory = prvalue(load) +# 1523| getRValue(): [Literal] 4.0 +# 1523| Type = [DoubleType] double +# 1523| Value = [Literal] 4.0 +# 1523| ValueCategory = prvalue +# 1523| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1523| Type = [DoubleType] double +# 1523| ValueCategory = lvalue +# 1524| getStmt(6): [DeclStmt] declaration +# 1524| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rd +# 1524| Type = [LValueReferenceType] double & +# 1524| getVariable().getInitializer(): [Initializer] initializer for rd +# 1524| getExpr(): [VariableAccess] d +# 1524| Type = [LValueReferenceType] double & +# 1524| ValueCategory = prvalue(load) +# 1524| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1524| Type = [LValueReferenceType] double & +# 1524| ValueCategory = prvalue +# 1524| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1524| Type = [DoubleType] double +# 1524| ValueCategory = lvalue +# 1525| getStmt(7): [DeclStmt] declaration +# 1525| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v # 1525| Type = [IntType] int -# 1525| ValueCategory = lvalue -# 1525| getLValue(): [PointerDereferenceExpr] * ... -# 1525| Type = [IntType] int -# 1525| ValueCategory = lvalue -# 1525| getOperand(): [VariableAccess] p -# 1525| Type = [LValueReferenceType] int *& +# 1525| getVariable().getInitializer(): [Initializer] initializer for v +# 1525| getExpr(): [VariableAccess] i +# 1525| Type = [LValueReferenceType] int & # 1525| ValueCategory = prvalue(load) -# 1525| getOperand().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1525| Type = [IntPointerType] int * +# 1525| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1525| Type = [IntType] int # 1525| ValueCategory = prvalue(load) -# 1525| getRValue(): [Literal] 6 -# 1525| Type = [IntType] int -# 1525| Value = [Literal] 6 -# 1525| ValueCategory = prvalue -# 1526| getStmt(10): [DeclStmt] declaration -# 1526| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rr -# 1526| Type = [LValueReferenceType] int & -# 1526| getVariable().getInitializer(): [Initializer] initializer for rr -# 1526| getExpr(): [VariableAccess] r -# 1526| Type = [LValueReferenceType] int & -# 1526| ValueCategory = prvalue(load) -# 1526| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1526| Type = [LValueReferenceType] int & -# 1526| ValueCategory = prvalue -# 1526| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1526| Type = [IntType] int -# 1526| ValueCategory = lvalue -# 1527| getStmt(11): [DeclStmt] declaration -# 1527| getDeclarationEntry(0): [VariableDeclarationEntry] definition of pr -# 1527| Type = [IntPointerType] int * -# 1527| getVariable().getInitializer(): [Initializer] initializer for pr -# 1527| getExpr(): [AddressOfExpr] & ... +# 1526| getStmt(8): [ExprStmt] ExprStmt +# 1526| getExpr(): [AssignExpr] ... = ... +# 1526| Type = [IntType] int +# 1526| ValueCategory = lvalue +# 1526| getLValue(): [VariableAccess] r +# 1526| Type = [LValueReferenceType] int & +# 1526| ValueCategory = prvalue(load) +# 1526| getRValue(): [Literal] 5 +# 1526| Type = [IntType] int +# 1526| Value = [Literal] 5 +# 1526| ValueCategory = prvalue +# 1526| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1526| Type = [IntType] int +# 1526| ValueCategory = lvalue +# 1527| getStmt(9): [ExprStmt] ExprStmt +# 1527| getExpr(): [AssignExpr] ... = ... +# 1527| Type = [IntType] int +# 1527| ValueCategory = lvalue +# 1527| getLValue(): [PointerDereferenceExpr] * ... +# 1527| Type = [IntType] int +# 1527| ValueCategory = lvalue +# 1527| getOperand(): [VariableAccess] p +# 1527| Type = [LValueReferenceType] int *& +# 1527| ValueCategory = prvalue(load) +# 1527| getOperand().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) # 1527| Type = [IntPointerType] int * -# 1527| ValueCategory = prvalue -# 1527| getOperand(): [VariableAccess] r -# 1527| Type = [LValueReferenceType] int & -# 1527| ValueCategory = prvalue(load) -# 1527| getOperand().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1527| Type = [IntType] int -# 1527| ValueCategory = lvalue -# 1528| getStmt(12): [DeclStmt] declaration -# 1528| getDeclarationEntry(0): [VariableDeclarationEntry] definition of w -# 1528| Type = [IntType] int -# 1528| getVariable().getInitializer(): [Initializer] initializer for w +# 1527| ValueCategory = prvalue(load) +# 1527| getRValue(): [Literal] 6 +# 1527| Type = [IntType] int +# 1527| Value = [Literal] 6 +# 1527| ValueCategory = prvalue +# 1528| getStmt(10): [DeclStmt] declaration +# 1528| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rr +# 1528| Type = [LValueReferenceType] int & +# 1528| getVariable().getInitializer(): [Initializer] initializer for rr # 1528| getExpr(): [VariableAccess] r # 1528| Type = [LValueReferenceType] int & # 1528| ValueCategory = prvalue(load) -# 1528| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1528| Type = [IntType] int -# 1528| ValueCategory = prvalue(load) -# 1530| getStmt(3): [ReturnStmt] return ... -# 1539| [CopyAssignmentOperator] StructuredBindingTupleRefGet& StructuredBindingTupleRefGet::operator=(StructuredBindingTupleRefGet const&) -# 1539| : +# 1528| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1528| Type = [LValueReferenceType] int & +# 1528| ValueCategory = prvalue +# 1528| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1528| Type = [IntType] int +# 1528| ValueCategory = lvalue +# 1529| getStmt(11): [DeclStmt] declaration +# 1529| getDeclarationEntry(0): [VariableDeclarationEntry] definition of pr +# 1529| Type = [IntPointerType] int * +# 1529| getVariable().getInitializer(): [Initializer] initializer for pr +# 1529| getExpr(): [AddressOfExpr] & ... +# 1529| Type = [IntPointerType] int * +# 1529| ValueCategory = prvalue +# 1529| getOperand(): [VariableAccess] r +# 1529| Type = [LValueReferenceType] int & +# 1529| ValueCategory = prvalue(load) +# 1529| getOperand().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1529| Type = [IntType] int +# 1529| ValueCategory = lvalue +# 1530| getStmt(12): [DeclStmt] declaration +# 1530| getDeclarationEntry(0): [VariableDeclarationEntry] definition of w +# 1530| Type = [IntType] int +# 1530| getVariable().getInitializer(): [Initializer] initializer for w +# 1530| getExpr(): [VariableAccess] r +# 1530| Type = [LValueReferenceType] int & +# 1530| ValueCategory = prvalue(load) +# 1530| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1530| Type = [IntType] int +# 1530| ValueCategory = prvalue(load) +# 1532| getStmt(3): [ReturnStmt] return ... +# 1541| [CopyAssignmentOperator] StructuredBindingTupleRefGet& StructuredBindingTupleRefGet::operator=(StructuredBindingTupleRefGet const&) +# 1541| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const StructuredBindingTupleRefGet & -# 1539| [Constructor] void StructuredBindingTupleRefGet::StructuredBindingTupleRefGet() -# 1539| : -# 1539| : -# 1539| getInitializer(0): [ConstructorFieldInit] constructor init of field i -# 1539| Type = [IntType] int -# 1539| ValueCategory = prvalue -# 1539| getInitializer(1): [ConstructorFieldInit] constructor init of field d -# 1539| Type = [DoubleType] double -# 1539| ValueCategory = prvalue -# 1539| getInitializer(2): [ConstructorFieldInit] constructor init of field r -# 1539| Type = [LValueReferenceType] int & -# 1539| ValueCategory = prvalue -# 1539| getEntryPoint(): [BlockStmt] { ... } -# 1539| getStmt(0): [ReturnStmt] return ... -# 1539| [CopyConstructor] void StructuredBindingTupleRefGet::StructuredBindingTupleRefGet(StructuredBindingTupleRefGet const&) -# 1539| : +# 1541| [Constructor] void StructuredBindingTupleRefGet::StructuredBindingTupleRefGet() +# 1541| : +# 1541| : +# 1541| getInitializer(0): [ConstructorFieldInit] constructor init of field i +# 1541| Type = [IntType] int +# 1541| ValueCategory = prvalue +# 1541| getInitializer(1): [ConstructorFieldInit] constructor init of field d +# 1541| Type = [DoubleType] double +# 1541| ValueCategory = prvalue +# 1541| getInitializer(2): [ConstructorFieldInit] constructor init of field r +# 1541| Type = [LValueReferenceType] int & +# 1541| ValueCategory = prvalue +# 1541| getEntryPoint(): [BlockStmt] { ... } +# 1541| getStmt(0): [ReturnStmt] return ... +# 1541| [CopyConstructor] void StructuredBindingTupleRefGet::StructuredBindingTupleRefGet(StructuredBindingTupleRefGet const&) +# 1541| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const StructuredBindingTupleRefGet & -# 1539| : -# 1539| getInitializer(0): [ConstructorFieldInit] constructor init of field i -# 1539| Type = [IntType] int -# 1539| ValueCategory = prvalue -# 1539| getExpr(): [ReferenceFieldAccess] i -# 1539| Type = [IntType] int -# 1539| ValueCategory = prvalue(load) -# 1539| getQualifier(): [VariableAccess] (unnamed parameter 0) -# 1539| Type = [LValueReferenceType] const StructuredBindingTupleRefGet & -# 1539| ValueCategory = prvalue(load) -# 1539| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1539| Type = [SpecifiedType] const StructuredBindingTupleRefGet -# 1539| ValueCategory = lvalue -# 1539| getInitializer(1): [ConstructorFieldInit] constructor init of field d -# 1539| Type = [DoubleType] double -# 1539| ValueCategory = prvalue -# 1539| getExpr(): [ReferenceFieldAccess] d -# 1539| Type = [DoubleType] double -# 1539| ValueCategory = prvalue(load) -# 1539| getQualifier(): [VariableAccess] (unnamed parameter 0) -# 1539| Type = [LValueReferenceType] const StructuredBindingTupleRefGet & -# 1539| ValueCategory = prvalue(load) -# 1539| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1539| Type = [SpecifiedType] const StructuredBindingTupleRefGet -# 1539| ValueCategory = lvalue -# 1539| getInitializer(2): [ConstructorFieldInit] constructor init of field r -# 1539| Type = [LValueReferenceType] int & -# 1539| ValueCategory = prvalue -# 1539| getExpr(): [ReferenceFieldAccess] r -# 1539| Type = [LValueReferenceType] int & -# 1539| ValueCategory = prvalue(load) -# 1539| getQualifier(): [VariableAccess] (unnamed parameter 0) -# 1539| Type = [LValueReferenceType] const StructuredBindingTupleRefGet & -# 1539| ValueCategory = prvalue(load) -# 1539| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1539| Type = [SpecifiedType] const StructuredBindingTupleRefGet -# 1539| ValueCategory = lvalue -# 1539| getEntryPoint(): [BlockStmt] { ... } -# 1539| getStmt(0): [ReturnStmt] return ... -# 1539| [MoveConstructor] void StructuredBindingTupleRefGet::StructuredBindingTupleRefGet(StructuredBindingTupleRefGet&&) -# 1539| : +# 1541| : +# 1541| getInitializer(0): [ConstructorFieldInit] constructor init of field i +# 1541| Type = [IntType] int +# 1541| ValueCategory = prvalue +# 1541| getExpr(): [ReferenceFieldAccess] i +# 1541| Type = [IntType] int +# 1541| ValueCategory = prvalue(load) +# 1541| getQualifier(): [VariableAccess] (unnamed parameter 0) +# 1541| Type = [LValueReferenceType] const StructuredBindingTupleRefGet & +# 1541| ValueCategory = prvalue(load) +# 1541| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1541| Type = [SpecifiedType] const StructuredBindingTupleRefGet +# 1541| ValueCategory = lvalue +# 1541| getInitializer(1): [ConstructorFieldInit] constructor init of field d +# 1541| Type = [DoubleType] double +# 1541| ValueCategory = prvalue +# 1541| getExpr(): [ReferenceFieldAccess] d +# 1541| Type = [DoubleType] double +# 1541| ValueCategory = prvalue(load) +# 1541| getQualifier(): [VariableAccess] (unnamed parameter 0) +# 1541| Type = [LValueReferenceType] const StructuredBindingTupleRefGet & +# 1541| ValueCategory = prvalue(load) +# 1541| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1541| Type = [SpecifiedType] const StructuredBindingTupleRefGet +# 1541| ValueCategory = lvalue +# 1541| getInitializer(2): [ConstructorFieldInit] constructor init of field r +# 1541| Type = [LValueReferenceType] int & +# 1541| ValueCategory = prvalue +# 1541| getExpr(): [ReferenceFieldAccess] r +# 1541| Type = [LValueReferenceType] int & +# 1541| ValueCategory = prvalue(load) +# 1541| getQualifier(): [VariableAccess] (unnamed parameter 0) +# 1541| Type = [LValueReferenceType] const StructuredBindingTupleRefGet & +# 1541| ValueCategory = prvalue(load) +# 1541| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1541| Type = [SpecifiedType] const StructuredBindingTupleRefGet +# 1541| ValueCategory = lvalue +# 1541| getEntryPoint(): [BlockStmt] { ... } +# 1541| getStmt(0): [ReturnStmt] return ... +# 1541| [MoveConstructor] void StructuredBindingTupleRefGet::StructuredBindingTupleRefGet(StructuredBindingTupleRefGet&&) +# 1541| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] StructuredBindingTupleRefGet && -# 1545| [MemberFunction,TemplateFunction] type& StructuredBindingTupleRefGet::get() -# 1545| : -# 1549| [CopyAssignmentOperator] std::tuple_size& std::tuple_size::operator=(std::tuple_size const&) -# 1549| : +# 1547| [MemberFunction,TemplateFunction] type& StructuredBindingTupleRefGet::get() +# 1547| : +# 1551| [CopyAssignmentOperator] std::tuple_size& std::tuple_size::operator=(std::tuple_size const&) +# 1551| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const tuple_size & -# 1549| [MoveAssignmentOperator] std::tuple_size& std::tuple_size::operator=(std::tuple_size&&) -# 1549| : +# 1551| [MoveAssignmentOperator] std::tuple_size& std::tuple_size::operator=(std::tuple_size&&) +# 1551| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] tuple_size && -# 1554| [CopyAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element const&) -# 1554| : +# 1556| [CopyAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element const&) +# 1556| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const tuple_element<0, StructuredBindingTupleRefGet> & -# 1554| [MoveAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element&&) -# 1554| : +# 1556| [MoveAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element&&) +# 1556| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] tuple_element<0, StructuredBindingTupleRefGet> && -# 1558| [CopyAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element const&) -# 1558| : +# 1560| [CopyAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element const&) +# 1560| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const tuple_element<1, StructuredBindingTupleRefGet> & -# 1558| [MoveAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element&&) -# 1558| : +# 1560| [MoveAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element&&) +# 1560| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] tuple_element<1, StructuredBindingTupleRefGet> && -# 1562| [CopyAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element const&) -# 1562| : +# 1564| [CopyAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element const&) +# 1564| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const tuple_element<2, StructuredBindingTupleRefGet> & -# 1562| [MoveAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element&&) -# 1562| : +# 1564| [MoveAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element&&) +# 1564| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] tuple_element<2, StructuredBindingTupleRefGet> && -# 1567| [FunctionTemplateSpecialization,MemberFunction] std::tuple_element::type& StructuredBindingTupleRefGet::get() -# 1567| : -# 1567| getEntryPoint(): [BlockStmt] { ... } -# 1568| getStmt(0): [ReturnStmt] return ... -# 1568| getExpr(): [ImplicitThisFieldAccess,PointerFieldAccess] i -# 1568| Type = [IntType] int -# 1568| ValueCategory = lvalue -# 1568| getQualifier(): [ThisExpr] this -# 1568| Type = [PointerType] StructuredBindingTupleRefGet * -# 1568| ValueCategory = prvalue(load) +# 1569| [FunctionTemplateSpecialization,MemberFunction] std::tuple_element::type& StructuredBindingTupleRefGet::get() +# 1569| : +# 1569| getEntryPoint(): [BlockStmt] { ... } +# 1570| getStmt(0): [ReturnStmt] return ... +# 1570| getExpr(): [ImplicitThisFieldAccess,PointerFieldAccess] i +# 1570| Type = [IntType] int +# 1570| ValueCategory = lvalue +# 1570| getQualifier(): [ThisExpr] this +# 1570| Type = [PointerType] StructuredBindingTupleRefGet * +# 1570| ValueCategory = prvalue(load) #-----| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) #-----| Type = [LValueReferenceType] int & #-----| ValueCategory = prvalue -# 1571| [FunctionTemplateSpecialization,MemberFunction] std::tuple_element::type& StructuredBindingTupleRefGet::get() -# 1571| : -# 1571| getEntryPoint(): [BlockStmt] { ... } -# 1572| getStmt(0): [ReturnStmt] return ... -# 1572| getExpr(): [ImplicitThisFieldAccess,PointerFieldAccess] d -# 1572| Type = [DoubleType] double -# 1572| ValueCategory = lvalue -# 1572| getQualifier(): [ThisExpr] this -# 1572| Type = [PointerType] StructuredBindingTupleRefGet * -# 1572| ValueCategory = prvalue(load) +# 1573| [FunctionTemplateSpecialization,MemberFunction] std::tuple_element::type& StructuredBindingTupleRefGet::get() +# 1573| : +# 1573| getEntryPoint(): [BlockStmt] { ... } +# 1574| getStmt(0): [ReturnStmt] return ... +# 1574| getExpr(): [ImplicitThisFieldAccess,PointerFieldAccess] d +# 1574| Type = [DoubleType] double +# 1574| ValueCategory = lvalue +# 1574| getQualifier(): [ThisExpr] this +# 1574| Type = [PointerType] StructuredBindingTupleRefGet * +# 1574| ValueCategory = prvalue(load) #-----| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) #-----| Type = [LValueReferenceType] double & #-----| ValueCategory = prvalue -# 1575| [FunctionTemplateSpecialization,MemberFunction] std::tuple_element::type StructuredBindingTupleRefGet::get() -# 1575| : -# 1575| getEntryPoint(): [BlockStmt] { ... } -# 1576| getStmt(0): [ReturnStmt] return ... -# 1576| getExpr(): [ImplicitThisFieldAccess,PointerFieldAccess] r -# 1576| Type = [LValueReferenceType] int & -# 1576| ValueCategory = prvalue(load) -# 1576| getQualifier(): [ThisExpr] this -# 1576| Type = [PointerType] StructuredBindingTupleRefGet * -# 1576| ValueCategory = prvalue(load) -# 1576| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1576| Type = [LValueReferenceType] int & -# 1576| ValueCategory = prvalue -# 1576| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1576| Type = [IntType] int -# 1576| ValueCategory = lvalue -# 1579| [TopLevelFunction] void tuple_structured_binding_ref_get() -# 1579| : -# 1579| getEntryPoint(): [BlockStmt] { ... } -# 1580| getStmt(0): [DeclStmt] declaration -# 1580| getDeclarationEntry(0): [VariableDeclarationEntry] definition of t -# 1580| Type = [Struct] StructuredBindingTupleRefGet -# 1580| getVariable().getInitializer(): [Initializer] initializer for t -# 1580| getExpr(): [ConstructorCall] call to StructuredBindingTupleRefGet -# 1580| Type = [VoidType] void -# 1580| ValueCategory = prvalue -# 1582| getStmt(1): [BlockStmt] { ... } -# 1583| getStmt(0): [DeclStmt] declaration -# 1583| getDeclarationEntry(0): (no string representation) -# 1583| Type = [Struct] StructuredBindingTupleRefGet -# 1583| getVariable().getInitializer(): [Initializer] initializer for (unnamed local variable) -# 1583| getExpr(): [VariableAccess] t -# 1583| Type = [Struct] StructuredBindingTupleRefGet -# 1583| ValueCategory = prvalue(load) -# 1583| getDeclarationEntry(1): [VariableDeclarationEntry] definition of i -# 1583| Type = [LValueReferenceType] type & -#-----| getVariable().getInitializer(): [Initializer] initializer for i -# 1583| getExpr(): [FunctionCall] call to get -# 1583| Type = [LValueReferenceType] type & -# 1583| ValueCategory = prvalue -# 1583| getQualifier(): [VariableAccess] (unnamed local variable) -# 1583| Type = [Struct] StructuredBindingTupleRefGet -# 1583| ValueCategory = xvalue -# 1583| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1583| Type = [LValueReferenceType] type & -# 1583| ValueCategory = prvalue -# 1583| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1583| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1583| ValueCategory = lvalue -# 1583| getDeclarationEntry(2): [VariableDeclarationEntry] definition of d -# 1583| Type = [LValueReferenceType] type & -#-----| getVariable().getInitializer(): [Initializer] initializer for d -# 1583| getExpr(): [FunctionCall] call to get -# 1583| Type = [LValueReferenceType] type & -# 1583| ValueCategory = prvalue -# 1583| getQualifier(): [VariableAccess] (unnamed local variable) -# 1583| Type = [Struct] StructuredBindingTupleRefGet -# 1583| ValueCategory = xvalue -# 1583| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1583| Type = [LValueReferenceType] type & -# 1583| ValueCategory = prvalue -# 1583| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1583| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1583| ValueCategory = lvalue -# 1583| getDeclarationEntry(3): [VariableDeclarationEntry] definition of r -# 1583| Type = [NestedTypedefType,UsingAliasTypedefType] type -#-----| getVariable().getInitializer(): [Initializer] initializer for r -# 1583| getExpr(): [FunctionCall] call to get -# 1583| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1583| ValueCategory = prvalue -# 1583| getQualifier(): [VariableAccess] (unnamed local variable) -# 1583| Type = [Struct] StructuredBindingTupleRefGet -# 1583| ValueCategory = xvalue -# 1583| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1583| Type = [LValueReferenceType] int & -# 1583| ValueCategory = prvalue -# 1583| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1583| Type = [IntType] int -# 1583| ValueCategory = lvalue -# 1584| getStmt(1): [ExprStmt] ExprStmt -# 1584| getExpr(): [AssignExpr] ... = ... -# 1584| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1584| ValueCategory = lvalue -# 1584| getLValue(): [VariableAccess] d -# 1584| Type = [LValueReferenceType] type & -# 1584| ValueCategory = prvalue(load) -# 1584| getRValue(): [Literal] 4.0 -# 1584| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1584| Value = [Literal] 4.0 -# 1584| ValueCategory = prvalue -# 1584| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1584| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1584| ValueCategory = lvalue -# 1585| getStmt(2): [DeclStmt] declaration -# 1585| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rd -# 1585| Type = [LValueReferenceType] double & -# 1585| getVariable().getInitializer(): [Initializer] initializer for rd -# 1585| getExpr(): [VariableAccess] d -# 1585| Type = [LValueReferenceType] type & +# 1577| [FunctionTemplateSpecialization,MemberFunction] std::tuple_element::type StructuredBindingTupleRefGet::get() +# 1577| : +# 1577| getEntryPoint(): [BlockStmt] { ... } +# 1578| getStmt(0): [ReturnStmt] return ... +# 1578| getExpr(): [ImplicitThisFieldAccess,PointerFieldAccess] r +# 1578| Type = [LValueReferenceType] int & +# 1578| ValueCategory = prvalue(load) +# 1578| getQualifier(): [ThisExpr] this +# 1578| Type = [PointerType] StructuredBindingTupleRefGet * +# 1578| ValueCategory = prvalue(load) +# 1578| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1578| Type = [LValueReferenceType] int & +# 1578| ValueCategory = prvalue +# 1578| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1578| Type = [IntType] int +# 1578| ValueCategory = lvalue +# 1581| [TopLevelFunction] void tuple_structured_binding_ref_get() +# 1581| : +# 1581| getEntryPoint(): [BlockStmt] { ... } +# 1582| getStmt(0): [DeclStmt] declaration +# 1582| getDeclarationEntry(0): [VariableDeclarationEntry] definition of t +# 1582| Type = [Struct] StructuredBindingTupleRefGet +# 1582| getVariable().getInitializer(): [Initializer] initializer for t +# 1582| getExpr(): [ConstructorCall] call to StructuredBindingTupleRefGet +# 1582| Type = [VoidType] void +# 1582| ValueCategory = prvalue +# 1584| getStmt(1): [BlockStmt] { ... } +# 1585| getStmt(0): [DeclStmt] declaration +# 1585| getDeclarationEntry(0): (no string representation) +# 1585| Type = [Struct] StructuredBindingTupleRefGet +# 1585| getVariable().getInitializer(): [Initializer] initializer for (unnamed local variable) +# 1585| getExpr(): [VariableAccess] t +# 1585| Type = [Struct] StructuredBindingTupleRefGet # 1585| ValueCategory = prvalue(load) +# 1585| getDeclarationEntry(1): [VariableDeclarationEntry] definition of i +# 1585| Type = [LValueReferenceType] type & +#-----| getVariable().getInitializer(): [Initializer] initializer for i +# 1585| getExpr(): [FunctionCall] call to get +# 1585| Type = [LValueReferenceType] type & +# 1585| ValueCategory = prvalue +# 1585| getQualifier(): [VariableAccess] (unnamed local variable) +# 1585| Type = [Struct] StructuredBindingTupleRefGet +# 1585| ValueCategory = xvalue # 1585| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) # 1585| Type = [LValueReferenceType] type & # 1585| ValueCategory = prvalue # 1585| getExpr(): [ReferenceDereferenceExpr] (reference dereference) # 1585| Type = [NestedTypedefType,UsingAliasTypedefType] type # 1585| ValueCategory = lvalue -# 1586| getStmt(3): [DeclStmt] declaration -# 1586| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v -# 1586| Type = [IntType] int -# 1586| getVariable().getInitializer(): [Initializer] initializer for v -# 1586| getExpr(): [VariableAccess] i -# 1586| Type = [LValueReferenceType] type & -# 1586| ValueCategory = prvalue(load) -# 1586| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1586| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1586| ValueCategory = prvalue(load) -# 1587| getStmt(4): [ExprStmt] ExprStmt -# 1587| getExpr(): [AssignExpr] ... = ... -# 1587| Type = [IntType] int -# 1587| ValueCategory = lvalue -# 1587| getLValue(): [VariableAccess] r -# 1587| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1587| ValueCategory = prvalue(load) -# 1587| getRValue(): [Literal] 5 -# 1587| Type = [IntType] int -# 1587| Value = [Literal] 5 -# 1587| ValueCategory = prvalue -# 1587| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1587| Type = [IntType] int -# 1587| ValueCategory = lvalue -# 1588| getStmt(5): [DeclStmt] declaration -# 1588| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rr -# 1588| Type = [LValueReferenceType] int & -# 1588| getVariable().getInitializer(): [Initializer] initializer for rr -# 1588| getExpr(): [VariableAccess] r +# 1585| getDeclarationEntry(2): [VariableDeclarationEntry] definition of d +# 1585| Type = [LValueReferenceType] type & +#-----| getVariable().getInitializer(): [Initializer] initializer for d +# 1585| getExpr(): [FunctionCall] call to get +# 1585| Type = [LValueReferenceType] type & +# 1585| ValueCategory = prvalue +# 1585| getQualifier(): [VariableAccess] (unnamed local variable) +# 1585| Type = [Struct] StructuredBindingTupleRefGet +# 1585| ValueCategory = xvalue +# 1585| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1585| Type = [LValueReferenceType] type & +# 1585| ValueCategory = prvalue +# 1585| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1585| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1585| ValueCategory = lvalue +# 1585| getDeclarationEntry(3): [VariableDeclarationEntry] definition of r +# 1585| Type = [NestedTypedefType,UsingAliasTypedefType] type +#-----| getVariable().getInitializer(): [Initializer] initializer for r +# 1585| getExpr(): [FunctionCall] call to get +# 1585| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1585| ValueCategory = prvalue +# 1585| getQualifier(): [VariableAccess] (unnamed local variable) +# 1585| Type = [Struct] StructuredBindingTupleRefGet +# 1585| ValueCategory = xvalue +# 1585| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1585| Type = [LValueReferenceType] int & +# 1585| ValueCategory = prvalue +# 1585| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1585| Type = [IntType] int +# 1585| ValueCategory = lvalue +# 1586| getStmt(1): [ExprStmt] ExprStmt +# 1586| getExpr(): [AssignExpr] ... = ... +# 1586| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1586| ValueCategory = lvalue +# 1586| getLValue(): [VariableAccess] d +# 1586| Type = [LValueReferenceType] type & +# 1586| ValueCategory = prvalue(load) +# 1586| getRValue(): [Literal] 4.0 +# 1586| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1586| Value = [Literal] 4.0 +# 1586| ValueCategory = prvalue +# 1586| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1586| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1586| ValueCategory = lvalue +# 1587| getStmt(2): [DeclStmt] declaration +# 1587| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rd +# 1587| Type = [LValueReferenceType] double & +# 1587| getVariable().getInitializer(): [Initializer] initializer for rd +# 1587| getExpr(): [VariableAccess] d +# 1587| Type = [LValueReferenceType] type & +# 1587| ValueCategory = prvalue(load) +# 1587| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1587| Type = [LValueReferenceType] type & +# 1587| ValueCategory = prvalue +# 1587| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1587| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1587| ValueCategory = lvalue +# 1588| getStmt(3): [DeclStmt] declaration +# 1588| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v +# 1588| Type = [IntType] int +# 1588| getVariable().getInitializer(): [Initializer] initializer for v +# 1588| getExpr(): [VariableAccess] i +# 1588| Type = [LValueReferenceType] type & +# 1588| ValueCategory = prvalue(load) +# 1588| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) # 1588| Type = [NestedTypedefType,UsingAliasTypedefType] type # 1588| ValueCategory = prvalue(load) -# 1588| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1588| Type = [LValueReferenceType] int & -# 1588| ValueCategory = prvalue -# 1588| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1588| Type = [IntType] int -# 1588| ValueCategory = lvalue -# 1589| getStmt(6): [DeclStmt] declaration -# 1589| getDeclarationEntry(0): [VariableDeclarationEntry] definition of w +# 1589| getStmt(4): [ExprStmt] ExprStmt +# 1589| getExpr(): [AssignExpr] ... = ... # 1589| Type = [IntType] int -# 1589| getVariable().getInitializer(): [Initializer] initializer for w -# 1589| getExpr(): [VariableAccess] r -# 1589| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1589| ValueCategory = prvalue(load) -# 1589| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1589| Type = [IntType] int -# 1589| ValueCategory = prvalue(load) -# 1592| getStmt(2): [BlockStmt] { ... } -# 1593| getStmt(0): [DeclStmt] declaration -# 1593| getDeclarationEntry(0): [VariableDeclarationEntry] definition of unnamed_local_variable -# 1593| Type = [Struct] StructuredBindingTupleRefGet -# 1593| getVariable().getInitializer(): [Initializer] initializer for unnamed_local_variable -# 1593| getExpr(): [VariableAccess] t -# 1593| Type = [Struct] StructuredBindingTupleRefGet -# 1593| ValueCategory = prvalue(load) -# 1594| getStmt(1): [DeclStmt] declaration -# 1594| getDeclarationEntry(0): [VariableDeclarationEntry] definition of i -# 1594| Type = [LValueReferenceType] type & -# 1594| getVariable().getInitializer(): [Initializer] initializer for i -# 1594| getExpr(): [FunctionCall] call to get -# 1594| Type = [LValueReferenceType] type & -# 1594| ValueCategory = prvalue -# 1594| getQualifier(): [VariableAccess] unnamed_local_variable -# 1594| Type = [Struct] StructuredBindingTupleRefGet -# 1594| ValueCategory = lvalue -# 1594| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1594| Type = [LValueReferenceType] type & -# 1594| ValueCategory = prvalue -# 1594| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1594| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1594| ValueCategory = lvalue -# 1595| getStmt(2): [DeclStmt] declaration -# 1595| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d -# 1595| Type = [LValueReferenceType] type & -# 1595| getVariable().getInitializer(): [Initializer] initializer for d -# 1595| getExpr(): [FunctionCall] call to get -# 1595| Type = [LValueReferenceType] type & -# 1595| ValueCategory = prvalue -# 1595| getQualifier(): [VariableAccess] unnamed_local_variable -# 1595| Type = [Struct] StructuredBindingTupleRefGet -# 1595| ValueCategory = lvalue -# 1595| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1595| Type = [LValueReferenceType] type & -# 1595| ValueCategory = prvalue -# 1595| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1595| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1595| ValueCategory = lvalue -# 1596| getStmt(3): [DeclStmt] declaration -# 1596| getDeclarationEntry(0): [VariableDeclarationEntry] definition of r -# 1596| Type = [LValueReferenceType] int & -# 1596| getVariable().getInitializer(): [Initializer] initializer for r +# 1589| ValueCategory = lvalue +# 1589| getLValue(): [VariableAccess] r +# 1589| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1589| ValueCategory = prvalue(load) +# 1589| getRValue(): [Literal] 5 +# 1589| Type = [IntType] int +# 1589| Value = [Literal] 5 +# 1589| ValueCategory = prvalue +# 1589| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1589| Type = [IntType] int +# 1589| ValueCategory = lvalue +# 1590| getStmt(5): [DeclStmt] declaration +# 1590| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rr +# 1590| Type = [LValueReferenceType] int & +# 1590| getVariable().getInitializer(): [Initializer] initializer for rr +# 1590| getExpr(): [VariableAccess] r +# 1590| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1590| ValueCategory = prvalue(load) +# 1590| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1590| Type = [LValueReferenceType] int & +# 1590| ValueCategory = prvalue +# 1590| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1590| Type = [IntType] int +# 1590| ValueCategory = lvalue +# 1591| getStmt(6): [DeclStmt] declaration +# 1591| getDeclarationEntry(0): [VariableDeclarationEntry] definition of w +# 1591| Type = [IntType] int +# 1591| getVariable().getInitializer(): [Initializer] initializer for w +# 1591| getExpr(): [VariableAccess] r +# 1591| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1591| ValueCategory = prvalue(load) +# 1591| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1591| Type = [IntType] int +# 1591| ValueCategory = prvalue(load) +# 1594| getStmt(2): [BlockStmt] { ... } +# 1595| getStmt(0): [DeclStmt] declaration +# 1595| getDeclarationEntry(0): [VariableDeclarationEntry] definition of unnamed_local_variable +# 1595| Type = [Struct] StructuredBindingTupleRefGet +# 1595| getVariable().getInitializer(): [Initializer] initializer for unnamed_local_variable +# 1595| getExpr(): [VariableAccess] t +# 1595| Type = [Struct] StructuredBindingTupleRefGet +# 1595| ValueCategory = prvalue(load) +# 1596| getStmt(1): [DeclStmt] declaration +# 1596| getDeclarationEntry(0): [VariableDeclarationEntry] definition of i +# 1596| Type = [LValueReferenceType] type & +# 1596| getVariable().getInitializer(): [Initializer] initializer for i # 1596| getExpr(): [FunctionCall] call to get -# 1596| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1596| Type = [LValueReferenceType] type & # 1596| ValueCategory = prvalue # 1596| getQualifier(): [VariableAccess] unnamed_local_variable # 1596| Type = [Struct] StructuredBindingTupleRefGet # 1596| ValueCategory = lvalue # 1596| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1596| Type = [LValueReferenceType] int & +# 1596| Type = [LValueReferenceType] type & # 1596| ValueCategory = prvalue # 1596| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1596| Type = [IntType] int +# 1596| Type = [NestedTypedefType,UsingAliasTypedefType] type # 1596| ValueCategory = lvalue -# 1597| getStmt(4): [ExprStmt] ExprStmt -# 1597| getExpr(): [AssignExpr] ... = ... -# 1597| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1597| ValueCategory = lvalue -# 1597| getLValue(): [VariableAccess] d -# 1597| Type = [LValueReferenceType] type & -# 1597| ValueCategory = prvalue(load) -# 1597| getRValue(): [Literal] 4.0 -# 1597| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1597| Value = [Literal] 4.0 -# 1597| ValueCategory = prvalue -# 1597| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1597| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1597| ValueCategory = lvalue -# 1598| getStmt(5): [DeclStmt] declaration -# 1598| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rd -# 1598| Type = [LValueReferenceType] double & -# 1598| getVariable().getInitializer(): [Initializer] initializer for rd -# 1598| getExpr(): [VariableAccess] d -# 1598| Type = [LValueReferenceType] type & -# 1598| ValueCategory = prvalue(load) +# 1597| getStmt(2): [DeclStmt] declaration +# 1597| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d +# 1597| Type = [LValueReferenceType] type & +# 1597| getVariable().getInitializer(): [Initializer] initializer for d +# 1597| getExpr(): [FunctionCall] call to get +# 1597| Type = [LValueReferenceType] type & +# 1597| ValueCategory = prvalue +# 1597| getQualifier(): [VariableAccess] unnamed_local_variable +# 1597| Type = [Struct] StructuredBindingTupleRefGet +# 1597| ValueCategory = lvalue +# 1597| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1597| Type = [LValueReferenceType] type & +# 1597| ValueCategory = prvalue +# 1597| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1597| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1597| ValueCategory = lvalue +# 1598| getStmt(3): [DeclStmt] declaration +# 1598| getDeclarationEntry(0): [VariableDeclarationEntry] definition of r +# 1598| Type = [LValueReferenceType] int & +# 1598| getVariable().getInitializer(): [Initializer] initializer for r +# 1598| getExpr(): [FunctionCall] call to get +# 1598| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1598| ValueCategory = prvalue +# 1598| getQualifier(): [VariableAccess] unnamed_local_variable +# 1598| Type = [Struct] StructuredBindingTupleRefGet +# 1598| ValueCategory = lvalue # 1598| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1598| Type = [LValueReferenceType] type & +# 1598| Type = [LValueReferenceType] int & # 1598| ValueCategory = prvalue # 1598| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1598| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1598| Type = [IntType] int # 1598| ValueCategory = lvalue -# 1599| getStmt(6): [DeclStmt] declaration -# 1599| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v -# 1599| Type = [IntType] int -# 1599| getVariable().getInitializer(): [Initializer] initializer for v -# 1599| getExpr(): [VariableAccess] i -# 1599| Type = [LValueReferenceType] type & -# 1599| ValueCategory = prvalue(load) -# 1599| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1599| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1599| ValueCategory = prvalue(load) -# 1600| getStmt(7): [ExprStmt] ExprStmt -# 1600| getExpr(): [AssignExpr] ... = ... -# 1600| Type = [IntType] int -# 1600| ValueCategory = lvalue -# 1600| getLValue(): [VariableAccess] r -# 1600| Type = [LValueReferenceType] int & -# 1600| ValueCategory = prvalue(load) -# 1600| getRValue(): [Literal] 5 -# 1600| Type = [IntType] int -# 1600| Value = [Literal] 5 -# 1600| ValueCategory = prvalue -# 1600| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1600| Type = [IntType] int -# 1600| ValueCategory = lvalue -# 1601| getStmt(8): [DeclStmt] declaration -# 1601| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rr -# 1601| Type = [LValueReferenceType] int & -# 1601| getVariable().getInitializer(): [Initializer] initializer for rr -# 1601| getExpr(): [VariableAccess] r -# 1601| Type = [LValueReferenceType] int & +# 1599| getStmt(4): [ExprStmt] ExprStmt +# 1599| getExpr(): [AssignExpr] ... = ... +# 1599| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1599| ValueCategory = lvalue +# 1599| getLValue(): [VariableAccess] d +# 1599| Type = [LValueReferenceType] type & +# 1599| ValueCategory = prvalue(load) +# 1599| getRValue(): [Literal] 4.0 +# 1599| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1599| Value = [Literal] 4.0 +# 1599| ValueCategory = prvalue +# 1599| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1599| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1599| ValueCategory = lvalue +# 1600| getStmt(5): [DeclStmt] declaration +# 1600| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rd +# 1600| Type = [LValueReferenceType] double & +# 1600| getVariable().getInitializer(): [Initializer] initializer for rd +# 1600| getExpr(): [VariableAccess] d +# 1600| Type = [LValueReferenceType] type & +# 1600| ValueCategory = prvalue(load) +# 1600| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1600| Type = [LValueReferenceType] type & +# 1600| ValueCategory = prvalue +# 1600| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1600| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1600| ValueCategory = lvalue +# 1601| getStmt(6): [DeclStmt] declaration +# 1601| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v +# 1601| Type = [IntType] int +# 1601| getVariable().getInitializer(): [Initializer] initializer for v +# 1601| getExpr(): [VariableAccess] i +# 1601| Type = [LValueReferenceType] type & # 1601| ValueCategory = prvalue(load) -# 1601| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1601| Type = [LValueReferenceType] int & -# 1601| ValueCategory = prvalue -# 1601| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1601| Type = [IntType] int -# 1601| ValueCategory = lvalue -# 1602| getStmt(9): [DeclStmt] declaration -# 1602| getDeclarationEntry(0): [VariableDeclarationEntry] definition of w +# 1601| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1601| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1601| ValueCategory = prvalue(load) +# 1602| getStmt(7): [ExprStmt] ExprStmt +# 1602| getExpr(): [AssignExpr] ... = ... # 1602| Type = [IntType] int -# 1602| getVariable().getInitializer(): [Initializer] initializer for w -# 1602| getExpr(): [VariableAccess] r -# 1602| Type = [LValueReferenceType] int & -# 1602| ValueCategory = prvalue(load) -# 1602| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1602| Type = [IntType] int -# 1602| ValueCategory = prvalue(load) -# 1604| getStmt(3): [ReturnStmt] return ... -# 1606| [CopyAssignmentOperator] StructuredBindingTupleNoRefGet& StructuredBindingTupleNoRefGet::operator=(StructuredBindingTupleNoRefGet const&) -# 1606| : +# 1602| ValueCategory = lvalue +# 1602| getLValue(): [VariableAccess] r +# 1602| Type = [LValueReferenceType] int & +# 1602| ValueCategory = prvalue(load) +# 1602| getRValue(): [Literal] 5 +# 1602| Type = [IntType] int +# 1602| Value = [Literal] 5 +# 1602| ValueCategory = prvalue +# 1602| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1602| Type = [IntType] int +# 1602| ValueCategory = lvalue +# 1603| getStmt(8): [DeclStmt] declaration +# 1603| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rr +# 1603| Type = [LValueReferenceType] int & +# 1603| getVariable().getInitializer(): [Initializer] initializer for rr +# 1603| getExpr(): [VariableAccess] r +# 1603| Type = [LValueReferenceType] int & +# 1603| ValueCategory = prvalue(load) +# 1603| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1603| Type = [LValueReferenceType] int & +# 1603| ValueCategory = prvalue +# 1603| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1603| Type = [IntType] int +# 1603| ValueCategory = lvalue +# 1604| getStmt(9): [DeclStmt] declaration +# 1604| getDeclarationEntry(0): [VariableDeclarationEntry] definition of w +# 1604| Type = [IntType] int +# 1604| getVariable().getInitializer(): [Initializer] initializer for w +# 1604| getExpr(): [VariableAccess] r +# 1604| Type = [LValueReferenceType] int & +# 1604| ValueCategory = prvalue(load) +# 1604| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1604| Type = [IntType] int +# 1604| ValueCategory = prvalue(load) +# 1606| getStmt(3): [ReturnStmt] return ... +# 1608| [CopyAssignmentOperator] StructuredBindingTupleNoRefGet& StructuredBindingTupleNoRefGet::operator=(StructuredBindingTupleNoRefGet const&) +# 1608| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const StructuredBindingTupleNoRefGet & -# 1606| [Constructor] void StructuredBindingTupleNoRefGet::StructuredBindingTupleNoRefGet() -# 1606| : -# 1606| : -# 1606| getInitializer(0): [ConstructorFieldInit] constructor init of field i -# 1606| Type = [IntType] int -# 1606| ValueCategory = prvalue -# 1606| getInitializer(1): [ConstructorFieldInit] constructor init of field r -# 1606| Type = [LValueReferenceType] int & -# 1606| ValueCategory = prvalue -# 1606| getEntryPoint(): [BlockStmt] { ... } -# 1606| getStmt(0): [ReturnStmt] return ... -# 1606| [CopyConstructor] void StructuredBindingTupleNoRefGet::StructuredBindingTupleNoRefGet(StructuredBindingTupleNoRefGet const&) -# 1606| : +# 1608| [Constructor] void StructuredBindingTupleNoRefGet::StructuredBindingTupleNoRefGet() +# 1608| : +# 1608| : +# 1608| getInitializer(0): [ConstructorFieldInit] constructor init of field i +# 1608| Type = [IntType] int +# 1608| ValueCategory = prvalue +# 1608| getInitializer(1): [ConstructorFieldInit] constructor init of field r +# 1608| Type = [LValueReferenceType] int & +# 1608| ValueCategory = prvalue +# 1608| getEntryPoint(): [BlockStmt] { ... } +# 1608| getStmt(0): [ReturnStmt] return ... +# 1608| [CopyConstructor] void StructuredBindingTupleNoRefGet::StructuredBindingTupleNoRefGet(StructuredBindingTupleNoRefGet const&) +# 1608| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const StructuredBindingTupleNoRefGet & -# 1606| [MoveConstructor] void StructuredBindingTupleNoRefGet::StructuredBindingTupleNoRefGet(StructuredBindingTupleNoRefGet&&) -# 1606| : +# 1608| [MoveConstructor] void StructuredBindingTupleNoRefGet::StructuredBindingTupleNoRefGet(StructuredBindingTupleNoRefGet&&) +# 1608| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] StructuredBindingTupleNoRefGet && -# 1611| [MemberFunction,TemplateFunction] type StructuredBindingTupleNoRefGet::get() -# 1611| : -# 1615| [CopyAssignmentOperator] std::tuple_size& std::tuple_size::operator=(std::tuple_size const&) -# 1615| : +# 1613| [MemberFunction,TemplateFunction] type StructuredBindingTupleNoRefGet::get() +# 1613| : +# 1617| [CopyAssignmentOperator] std::tuple_size& std::tuple_size::operator=(std::tuple_size const&) +# 1617| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const tuple_size & -# 1615| [MoveAssignmentOperator] std::tuple_size& std::tuple_size::operator=(std::tuple_size&&) -# 1615| : +# 1617| [MoveAssignmentOperator] std::tuple_size& std::tuple_size::operator=(std::tuple_size&&) +# 1617| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] tuple_size && -# 1620| [CopyAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element const&) -# 1620| : +# 1622| [CopyAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element const&) +# 1622| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const tuple_element<0, StructuredBindingTupleNoRefGet> & -# 1620| [MoveAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element&&) -# 1620| : +# 1622| [MoveAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element&&) +# 1622| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] tuple_element<0, StructuredBindingTupleNoRefGet> && -# 1624| [CopyAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element const&) -# 1624| : +# 1626| [CopyAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element const&) +# 1626| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const tuple_element<1, StructuredBindingTupleNoRefGet> & -# 1624| [MoveAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element&&) -# 1624| : +# 1626| [MoveAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element&&) +# 1626| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] tuple_element<1, StructuredBindingTupleNoRefGet> && -# 1628| [CopyAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element const&) -# 1628| : +# 1630| [CopyAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element const&) +# 1630| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const tuple_element<2, StructuredBindingTupleNoRefGet> & -# 1628| [MoveAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element&&) -# 1628| : +# 1630| [MoveAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element&&) +# 1630| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] tuple_element<2, StructuredBindingTupleNoRefGet> && -# 1633| [FunctionTemplateSpecialization,MemberFunction] std::tuple_element::type StructuredBindingTupleNoRefGet::get() -# 1633| : -# 1633| getEntryPoint(): [BlockStmt] { ... } -# 1634| getStmt(0): [ReturnStmt] return ... -# 1634| getExpr(): [ImplicitThisFieldAccess,PointerFieldAccess] i -# 1634| Type = [IntType] int -# 1634| ValueCategory = prvalue(load) -# 1634| getQualifier(): [ThisExpr] this -# 1634| Type = [PointerType] StructuredBindingTupleNoRefGet * -# 1634| ValueCategory = prvalue(load) -# 1637| [FunctionTemplateSpecialization,MemberFunction] std::tuple_element::type StructuredBindingTupleNoRefGet::get() -# 1637| : -# 1637| getEntryPoint(): [BlockStmt] { ... } -# 1638| getStmt(0): [ReturnStmt] return ... -# 1638| getExpr(): [ImplicitThisFieldAccess,PointerFieldAccess] r -# 1638| Type = [LValueReferenceType] int & -# 1638| ValueCategory = prvalue(load) -# 1638| getQualifier(): [ThisExpr] this -# 1638| Type = [PointerType] StructuredBindingTupleNoRefGet * -# 1638| ValueCategory = prvalue(load) -# 1638| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1638| Type = [LValueReferenceType] int & -# 1638| ValueCategory = prvalue -# 1638| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1638| Type = [IntType] int -# 1638| ValueCategory = lvalue -# 1641| [FunctionTemplateSpecialization,MemberFunction] std::tuple_element::type StructuredBindingTupleNoRefGet::get() -# 1641| : -# 1641| getEntryPoint(): [BlockStmt] { ... } -# 1642| getStmt(0): [ReturnStmt] return ... -# 1642| getExpr(): [Literal] 5 -# 1642| Type = [IntType] int -# 1642| Value = [Literal] 5 -# 1642| ValueCategory = prvalue -# 1642| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1642| Type = [LValueReferenceType] int & -# 1642| ValueCategory = prvalue -# 1642| getExpr(): [TemporaryObjectExpr] temporary object -# 1642| Type = [IntType] int -# 1642| ValueCategory = lvalue -# 1645| [TopLevelFunction] void tuple_structured_binding_no_ref_get() -# 1645| : -# 1645| getEntryPoint(): [BlockStmt] { ... } -# 1646| getStmt(0): [DeclStmt] declaration -# 1646| getDeclarationEntry(0): [VariableDeclarationEntry] definition of t -# 1646| Type = [Struct] StructuredBindingTupleNoRefGet -# 1646| getVariable().getInitializer(): [Initializer] initializer for t -# 1646| getExpr(): [ConstructorCall] call to StructuredBindingTupleNoRefGet -# 1646| Type = [VoidType] void -# 1646| ValueCategory = prvalue -# 1648| getStmt(1): [BlockStmt] { ... } -# 1649| getStmt(0): [DeclStmt] declaration -# 1649| getDeclarationEntry(0): (no string representation) -# 1649| Type = [LValueReferenceType] StructuredBindingTupleNoRefGet & -# 1649| getVariable().getInitializer(): [Initializer] initializer for (unnamed local variable) -# 1649| getExpr(): [VariableAccess] t -# 1649| Type = [Struct] StructuredBindingTupleNoRefGet -# 1649| ValueCategory = lvalue -# 1649| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1649| Type = [LValueReferenceType] StructuredBindingTupleNoRefGet & -# 1649| ValueCategory = prvalue -# 1649| getDeclarationEntry(1): [VariableDeclarationEntry] definition of i -# 1649| Type = [RValueReferenceType] type && +# 1635| [FunctionTemplateSpecialization,MemberFunction] std::tuple_element::type StructuredBindingTupleNoRefGet::get() +# 1635| : +# 1635| getEntryPoint(): [BlockStmt] { ... } +# 1636| getStmt(0): [ReturnStmt] return ... +# 1636| getExpr(): [ImplicitThisFieldAccess,PointerFieldAccess] i +# 1636| Type = [IntType] int +# 1636| ValueCategory = prvalue(load) +# 1636| getQualifier(): [ThisExpr] this +# 1636| Type = [PointerType] StructuredBindingTupleNoRefGet * +# 1636| ValueCategory = prvalue(load) +# 1639| [FunctionTemplateSpecialization,MemberFunction] std::tuple_element::type StructuredBindingTupleNoRefGet::get() +# 1639| : +# 1639| getEntryPoint(): [BlockStmt] { ... } +# 1640| getStmt(0): [ReturnStmt] return ... +# 1640| getExpr(): [ImplicitThisFieldAccess,PointerFieldAccess] r +# 1640| Type = [LValueReferenceType] int & +# 1640| ValueCategory = prvalue(load) +# 1640| getQualifier(): [ThisExpr] this +# 1640| Type = [PointerType] StructuredBindingTupleNoRefGet * +# 1640| ValueCategory = prvalue(load) +# 1640| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1640| Type = [LValueReferenceType] int & +# 1640| ValueCategory = prvalue +# 1640| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1640| Type = [IntType] int +# 1640| ValueCategory = lvalue +# 1643| [FunctionTemplateSpecialization,MemberFunction] std::tuple_element::type StructuredBindingTupleNoRefGet::get() +# 1643| : +# 1643| getEntryPoint(): [BlockStmt] { ... } +# 1644| getStmt(0): [ReturnStmt] return ... +# 1644| getExpr(): [Literal] 5 +# 1644| Type = [IntType] int +# 1644| Value = [Literal] 5 +# 1644| ValueCategory = prvalue +# 1644| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1644| Type = [LValueReferenceType] int & +# 1644| ValueCategory = prvalue +# 1644| getExpr(): [TemporaryObjectExpr] temporary object +# 1644| Type = [IntType] int +# 1644| ValueCategory = lvalue +# 1647| [TopLevelFunction] void tuple_structured_binding_no_ref_get() +# 1647| : +# 1647| getEntryPoint(): [BlockStmt] { ... } +# 1648| getStmt(0): [DeclStmt] declaration +# 1648| getDeclarationEntry(0): [VariableDeclarationEntry] definition of t +# 1648| Type = [Struct] StructuredBindingTupleNoRefGet +# 1648| getVariable().getInitializer(): [Initializer] initializer for t +# 1648| getExpr(): [ConstructorCall] call to StructuredBindingTupleNoRefGet +# 1648| Type = [VoidType] void +# 1648| ValueCategory = prvalue +# 1650| getStmt(1): [BlockStmt] { ... } +# 1651| getStmt(0): [DeclStmt] declaration +# 1651| getDeclarationEntry(0): (no string representation) +# 1651| Type = [LValueReferenceType] StructuredBindingTupleNoRefGet & +# 1651| getVariable().getInitializer(): [Initializer] initializer for (unnamed local variable) +# 1651| getExpr(): [VariableAccess] t +# 1651| Type = [Struct] StructuredBindingTupleNoRefGet +# 1651| ValueCategory = lvalue +# 1651| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1651| Type = [LValueReferenceType] StructuredBindingTupleNoRefGet & +# 1651| ValueCategory = prvalue +# 1651| getDeclarationEntry(1): [VariableDeclarationEntry] definition of i +# 1651| Type = [RValueReferenceType] type && #-----| getVariable().getInitializer(): [Initializer] initializer for i -# 1649| getExpr(): [FunctionCall] call to get -# 1649| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1649| ValueCategory = prvalue -# 1649| getQualifier(): [VariableAccess] (unnamed local variable) -# 1649| Type = [LValueReferenceType] StructuredBindingTupleNoRefGet & -# 1649| ValueCategory = prvalue(load) -# 1649| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1649| Type = [Struct] StructuredBindingTupleNoRefGet -# 1649| ValueCategory = lvalue -# 1649| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1649| Type = [LValueReferenceType] type & -# 1649| ValueCategory = prvalue -# 1649| getExpr(): [TemporaryObjectExpr] temporary object -# 1649| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1649| ValueCategory = lvalue -# 1649| getDeclarationEntry(2): [VariableDeclarationEntry] definition of r -# 1649| Type = [NestedTypedefType,UsingAliasTypedefType] type -#-----| getVariable().getInitializer(): [Initializer] initializer for r -# 1649| getExpr(): [FunctionCall] call to get -# 1649| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1649| ValueCategory = prvalue -# 1649| getQualifier(): [VariableAccess] (unnamed local variable) -# 1649| Type = [LValueReferenceType] StructuredBindingTupleNoRefGet & -# 1649| ValueCategory = prvalue(load) -# 1649| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1649| Type = [Struct] StructuredBindingTupleNoRefGet -# 1649| ValueCategory = lvalue -# 1649| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1649| Type = [LValueReferenceType] int & -# 1649| ValueCategory = prvalue -# 1649| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1649| Type = [IntType] int -# 1649| ValueCategory = lvalue -# 1649| getDeclarationEntry(3): [VariableDeclarationEntry] definition of rv -# 1649| Type = [NestedTypedefType,UsingAliasTypedefType] type -#-----| getVariable().getInitializer(): [Initializer] initializer for rv -# 1649| getExpr(): [FunctionCall] call to get -# 1649| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1649| ValueCategory = prvalue -# 1649| getQualifier(): [VariableAccess] (unnamed local variable) -# 1649| Type = [LValueReferenceType] StructuredBindingTupleNoRefGet & -# 1649| ValueCategory = prvalue(load) -# 1649| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1649| Type = [Struct] StructuredBindingTupleNoRefGet -# 1649| ValueCategory = lvalue -# 1649| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1649| Type = [LValueReferenceType] int & -# 1649| ValueCategory = prvalue -# 1649| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1649| Type = [IntType] int -# 1649| ValueCategory = xvalue -# 1650| getStmt(1): [ExprStmt] ExprStmt -# 1650| getExpr(): [AssignExpr] ... = ... -# 1650| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1650| ValueCategory = lvalue -# 1650| getLValue(): [VariableAccess] i -# 1650| Type = [RValueReferenceType] type && -# 1650| ValueCategory = prvalue(load) -# 1650| getRValue(): [Literal] 4 -# 1650| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1650| Value = [Literal] 4 -# 1650| ValueCategory = prvalue -# 1650| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1650| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1650| ValueCategory = lvalue -# 1651| getStmt(2): [DeclStmt] declaration -# 1651| getDeclarationEntry(0): [VariableDeclarationEntry] definition of ri -# 1651| Type = [LValueReferenceType] int & -# 1651| getVariable().getInitializer(): [Initializer] initializer for ri -# 1651| getExpr(): [VariableAccess] i -# 1651| Type = [RValueReferenceType] type && -# 1651| ValueCategory = prvalue(load) +# 1651| getExpr(): [FunctionCall] call to get +# 1651| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1651| ValueCategory = prvalue +# 1651| getQualifier(): [VariableAccess] (unnamed local variable) +# 1651| Type = [LValueReferenceType] StructuredBindingTupleNoRefGet & +# 1651| ValueCategory = prvalue(load) +# 1651| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1651| Type = [Struct] StructuredBindingTupleNoRefGet +# 1651| ValueCategory = lvalue # 1651| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) # 1651| Type = [LValueReferenceType] type & # 1651| ValueCategory = prvalue -# 1651| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1651| getExpr(): [TemporaryObjectExpr] temporary object # 1651| Type = [NestedTypedefType,UsingAliasTypedefType] type # 1651| ValueCategory = lvalue -# 1652| getStmt(3): [DeclStmt] declaration -# 1652| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v -# 1652| Type = [IntType] int -# 1652| getVariable().getInitializer(): [Initializer] initializer for v -# 1652| getExpr(): [VariableAccess] i -# 1652| Type = [RValueReferenceType] type && -# 1652| ValueCategory = prvalue(load) -# 1652| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1652| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1652| ValueCategory = prvalue(load) -# 1653| getStmt(4): [ExprStmt] ExprStmt -# 1653| getExpr(): [AssignExpr] ... = ... -# 1653| Type = [IntType] int -# 1653| ValueCategory = lvalue -# 1653| getLValue(): [VariableAccess] r -# 1653| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1653| ValueCategory = prvalue(load) -# 1653| getRValue(): [Literal] 5 -# 1653| Type = [IntType] int -# 1653| Value = [Literal] 5 -# 1653| ValueCategory = prvalue -# 1653| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1653| Type = [IntType] int -# 1653| ValueCategory = lvalue -# 1654| getStmt(5): [DeclStmt] declaration -# 1654| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rr -# 1654| Type = [LValueReferenceType] int & -# 1654| getVariable().getInitializer(): [Initializer] initializer for rr -# 1654| getExpr(): [VariableAccess] r +# 1651| getDeclarationEntry(2): [VariableDeclarationEntry] definition of r +# 1651| Type = [NestedTypedefType,UsingAliasTypedefType] type +#-----| getVariable().getInitializer(): [Initializer] initializer for r +# 1651| getExpr(): [FunctionCall] call to get +# 1651| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1651| ValueCategory = prvalue +# 1651| getQualifier(): [VariableAccess] (unnamed local variable) +# 1651| Type = [LValueReferenceType] StructuredBindingTupleNoRefGet & +# 1651| ValueCategory = prvalue(load) +# 1651| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1651| Type = [Struct] StructuredBindingTupleNoRefGet +# 1651| ValueCategory = lvalue +# 1651| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1651| Type = [LValueReferenceType] int & +# 1651| ValueCategory = prvalue +# 1651| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1651| Type = [IntType] int +# 1651| ValueCategory = lvalue +# 1651| getDeclarationEntry(3): [VariableDeclarationEntry] definition of rv +# 1651| Type = [NestedTypedefType,UsingAliasTypedefType] type +#-----| getVariable().getInitializer(): [Initializer] initializer for rv +# 1651| getExpr(): [FunctionCall] call to get +# 1651| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1651| ValueCategory = prvalue +# 1651| getQualifier(): [VariableAccess] (unnamed local variable) +# 1651| Type = [LValueReferenceType] StructuredBindingTupleNoRefGet & +# 1651| ValueCategory = prvalue(load) +# 1651| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1651| Type = [Struct] StructuredBindingTupleNoRefGet +# 1651| ValueCategory = lvalue +# 1651| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1651| Type = [LValueReferenceType] int & +# 1651| ValueCategory = prvalue +# 1651| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1651| Type = [IntType] int +# 1651| ValueCategory = xvalue +# 1652| getStmt(1): [ExprStmt] ExprStmt +# 1652| getExpr(): [AssignExpr] ... = ... +# 1652| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1652| ValueCategory = lvalue +# 1652| getLValue(): [VariableAccess] i +# 1652| Type = [RValueReferenceType] type && +# 1652| ValueCategory = prvalue(load) +# 1652| getRValue(): [Literal] 4 +# 1652| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1652| Value = [Literal] 4 +# 1652| ValueCategory = prvalue +# 1652| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1652| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1652| ValueCategory = lvalue +# 1653| getStmt(2): [DeclStmt] declaration +# 1653| getDeclarationEntry(0): [VariableDeclarationEntry] definition of ri +# 1653| Type = [LValueReferenceType] int & +# 1653| getVariable().getInitializer(): [Initializer] initializer for ri +# 1653| getExpr(): [VariableAccess] i +# 1653| Type = [RValueReferenceType] type && +# 1653| ValueCategory = prvalue(load) +# 1653| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1653| Type = [LValueReferenceType] type & +# 1653| ValueCategory = prvalue +# 1653| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1653| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1653| ValueCategory = lvalue +# 1654| getStmt(3): [DeclStmt] declaration +# 1654| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v +# 1654| Type = [IntType] int +# 1654| getVariable().getInitializer(): [Initializer] initializer for v +# 1654| getExpr(): [VariableAccess] i +# 1654| Type = [RValueReferenceType] type && +# 1654| ValueCategory = prvalue(load) +# 1654| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) # 1654| Type = [NestedTypedefType,UsingAliasTypedefType] type # 1654| ValueCategory = prvalue(load) -# 1654| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1654| Type = [LValueReferenceType] int & -# 1654| ValueCategory = prvalue -# 1654| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1654| Type = [IntType] int -# 1654| ValueCategory = lvalue -# 1655| getStmt(6): [DeclStmt] declaration -# 1655| getDeclarationEntry(0): [VariableDeclarationEntry] definition of w +# 1655| getStmt(4): [ExprStmt] ExprStmt +# 1655| getExpr(): [AssignExpr] ... = ... # 1655| Type = [IntType] int -# 1655| getVariable().getInitializer(): [Initializer] initializer for w -# 1655| getExpr(): [VariableAccess] r -# 1655| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1655| ValueCategory = prvalue(load) -# 1655| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1655| Type = [IntType] int -# 1655| ValueCategory = prvalue(load) -# 1658| getStmt(2): [BlockStmt] { ... } -# 1659| getStmt(0): [DeclStmt] declaration -# 1659| getDeclarationEntry(0): [VariableDeclarationEntry] definition of unnamed_local_variable -# 1659| Type = [LValueReferenceType] StructuredBindingTupleNoRefGet & -# 1659| getVariable().getInitializer(): [Initializer] initializer for unnamed_local_variable -# 1659| getExpr(): [VariableAccess] t -# 1659| Type = [Struct] StructuredBindingTupleNoRefGet -# 1659| ValueCategory = lvalue -# 1659| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1659| Type = [LValueReferenceType] StructuredBindingTupleNoRefGet & -# 1659| ValueCategory = prvalue -# 1660| getStmt(1): [DeclStmt] declaration -# 1660| getDeclarationEntry(0): [VariableDeclarationEntry] definition of i -# 1660| Type = [RValueReferenceType] type && -# 1660| getVariable().getInitializer(): [Initializer] initializer for i -# 1660| getExpr(): [FunctionCall] call to get -# 1660| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1660| ValueCategory = prvalue -# 1660| getQualifier(): [VariableAccess] unnamed_local_variable -# 1660| Type = [LValueReferenceType] StructuredBindingTupleNoRefGet & -# 1660| ValueCategory = prvalue(load) -# 1660| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1660| Type = [Struct] StructuredBindingTupleNoRefGet -# 1660| ValueCategory = lvalue -# 1660| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1660| Type = [LValueReferenceType] type & -# 1660| ValueCategory = prvalue -# 1660| getExpr(): [TemporaryObjectExpr] temporary object -# 1660| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1660| ValueCategory = lvalue -# 1661| getStmt(2): [DeclStmt] declaration -# 1661| getDeclarationEntry(0): [VariableDeclarationEntry] definition of r -# 1661| Type = [LValueReferenceType] int & -# 1661| getVariable().getInitializer(): [Initializer] initializer for r -# 1661| getExpr(): [FunctionCall] call to get -# 1661| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1661| ValueCategory = prvalue -# 1661| getQualifier(): [VariableAccess] unnamed_local_variable -# 1661| Type = [LValueReferenceType] StructuredBindingTupleNoRefGet & -# 1661| ValueCategory = prvalue(load) -# 1661| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1661| Type = [Struct] StructuredBindingTupleNoRefGet -# 1661| ValueCategory = lvalue +# 1655| ValueCategory = lvalue +# 1655| getLValue(): [VariableAccess] r +# 1655| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1655| ValueCategory = prvalue(load) +# 1655| getRValue(): [Literal] 5 +# 1655| Type = [IntType] int +# 1655| Value = [Literal] 5 +# 1655| ValueCategory = prvalue +# 1655| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1655| Type = [IntType] int +# 1655| ValueCategory = lvalue +# 1656| getStmt(5): [DeclStmt] declaration +# 1656| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rr +# 1656| Type = [LValueReferenceType] int & +# 1656| getVariable().getInitializer(): [Initializer] initializer for rr +# 1656| getExpr(): [VariableAccess] r +# 1656| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1656| ValueCategory = prvalue(load) +# 1656| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1656| Type = [LValueReferenceType] int & +# 1656| ValueCategory = prvalue +# 1656| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1656| Type = [IntType] int +# 1656| ValueCategory = lvalue +# 1657| getStmt(6): [DeclStmt] declaration +# 1657| getDeclarationEntry(0): [VariableDeclarationEntry] definition of w +# 1657| Type = [IntType] int +# 1657| getVariable().getInitializer(): [Initializer] initializer for w +# 1657| getExpr(): [VariableAccess] r +# 1657| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1657| ValueCategory = prvalue(load) +# 1657| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1657| Type = [IntType] int +# 1657| ValueCategory = prvalue(load) +# 1660| getStmt(2): [BlockStmt] { ... } +# 1661| getStmt(0): [DeclStmt] declaration +# 1661| getDeclarationEntry(0): [VariableDeclarationEntry] definition of unnamed_local_variable +# 1661| Type = [LValueReferenceType] StructuredBindingTupleNoRefGet & +# 1661| getVariable().getInitializer(): [Initializer] initializer for unnamed_local_variable +# 1661| getExpr(): [VariableAccess] t +# 1661| Type = [Struct] StructuredBindingTupleNoRefGet +# 1661| ValueCategory = lvalue # 1661| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1661| Type = [LValueReferenceType] int & +# 1661| Type = [LValueReferenceType] StructuredBindingTupleNoRefGet & # 1661| ValueCategory = prvalue -# 1661| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1661| Type = [IntType] int -# 1661| ValueCategory = lvalue -# 1662| getStmt(3): [DeclStmt] declaration -# 1662| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rv -# 1662| Type = [RValueReferenceType] int && -# 1662| getVariable().getInitializer(): [Initializer] initializer for rv +# 1662| getStmt(1): [DeclStmt] declaration +# 1662| getDeclarationEntry(0): [VariableDeclarationEntry] definition of i +# 1662| Type = [RValueReferenceType] type && +# 1662| getVariable().getInitializer(): [Initializer] initializer for i # 1662| getExpr(): [FunctionCall] call to get # 1662| Type = [NestedTypedefType,UsingAliasTypedefType] type # 1662| ValueCategory = prvalue @@ -13061,113 +13029,151 @@ ir.cpp: # 1662| Type = [Struct] StructuredBindingTupleNoRefGet # 1662| ValueCategory = lvalue # 1662| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1662| Type = [LValueReferenceType] int & +# 1662| Type = [LValueReferenceType] type & # 1662| ValueCategory = prvalue -# 1662| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1662| Type = [IntType] int -# 1662| ValueCategory = xvalue -# 1663| getStmt(4): [ExprStmt] ExprStmt -# 1663| getExpr(): [AssignExpr] ... = ... -# 1663| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1663| ValueCategory = lvalue -# 1663| getLValue(): [VariableAccess] i -# 1663| Type = [RValueReferenceType] type && -# 1663| ValueCategory = prvalue(load) -# 1663| getRValue(): [Literal] 4 -# 1663| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1663| Value = [Literal] 4 -# 1663| ValueCategory = prvalue -# 1663| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1663| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1663| ValueCategory = lvalue -# 1664| getStmt(5): [DeclStmt] declaration -# 1664| getDeclarationEntry(0): [VariableDeclarationEntry] definition of ri -# 1664| Type = [LValueReferenceType] int & -# 1664| getVariable().getInitializer(): [Initializer] initializer for ri -# 1664| getExpr(): [VariableAccess] i -# 1664| Type = [RValueReferenceType] type && -# 1664| ValueCategory = prvalue(load) +# 1662| getExpr(): [TemporaryObjectExpr] temporary object +# 1662| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1662| ValueCategory = lvalue +# 1663| getStmt(2): [DeclStmt] declaration +# 1663| getDeclarationEntry(0): [VariableDeclarationEntry] definition of r +# 1663| Type = [LValueReferenceType] int & +# 1663| getVariable().getInitializer(): [Initializer] initializer for r +# 1663| getExpr(): [FunctionCall] call to get +# 1663| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1663| ValueCategory = prvalue +# 1663| getQualifier(): [VariableAccess] unnamed_local_variable +# 1663| Type = [LValueReferenceType] StructuredBindingTupleNoRefGet & +# 1663| ValueCategory = prvalue(load) +# 1663| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1663| Type = [Struct] StructuredBindingTupleNoRefGet +# 1663| ValueCategory = lvalue +# 1663| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1663| Type = [LValueReferenceType] int & +# 1663| ValueCategory = prvalue +# 1663| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1663| Type = [IntType] int +# 1663| ValueCategory = lvalue +# 1664| getStmt(3): [DeclStmt] declaration +# 1664| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rv +# 1664| Type = [RValueReferenceType] int && +# 1664| getVariable().getInitializer(): [Initializer] initializer for rv +# 1664| getExpr(): [FunctionCall] call to get +# 1664| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1664| ValueCategory = prvalue +# 1664| getQualifier(): [VariableAccess] unnamed_local_variable +# 1664| Type = [LValueReferenceType] StructuredBindingTupleNoRefGet & +# 1664| ValueCategory = prvalue(load) +# 1664| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1664| Type = [Struct] StructuredBindingTupleNoRefGet +# 1664| ValueCategory = lvalue # 1664| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1664| Type = [LValueReferenceType] type & +# 1664| Type = [LValueReferenceType] int & # 1664| ValueCategory = prvalue # 1664| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1664| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1664| ValueCategory = lvalue -# 1665| getStmt(6): [DeclStmt] declaration -# 1665| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v -# 1665| Type = [IntType] int -# 1665| getVariable().getInitializer(): [Initializer] initializer for v -# 1665| getExpr(): [VariableAccess] i -# 1665| Type = [RValueReferenceType] type && -# 1665| ValueCategory = prvalue(load) -# 1665| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1665| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1665| ValueCategory = prvalue(load) -# 1666| getStmt(7): [ExprStmt] ExprStmt -# 1666| getExpr(): [AssignExpr] ... = ... -# 1666| Type = [IntType] int -# 1666| ValueCategory = lvalue -# 1666| getLValue(): [VariableAccess] r -# 1666| Type = [LValueReferenceType] int & -# 1666| ValueCategory = prvalue(load) -# 1666| getRValue(): [Literal] 5 -# 1666| Type = [IntType] int -# 1666| Value = [Literal] 5 -# 1666| ValueCategory = prvalue -# 1666| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1666| Type = [IntType] int -# 1666| ValueCategory = lvalue -# 1667| getStmt(8): [DeclStmt] declaration -# 1667| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rr -# 1667| Type = [LValueReferenceType] int & -# 1667| getVariable().getInitializer(): [Initializer] initializer for rr -# 1667| getExpr(): [VariableAccess] r -# 1667| Type = [LValueReferenceType] int & +# 1664| Type = [IntType] int +# 1664| ValueCategory = xvalue +# 1665| getStmt(4): [ExprStmt] ExprStmt +# 1665| getExpr(): [AssignExpr] ... = ... +# 1665| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1665| ValueCategory = lvalue +# 1665| getLValue(): [VariableAccess] i +# 1665| Type = [RValueReferenceType] type && +# 1665| ValueCategory = prvalue(load) +# 1665| getRValue(): [Literal] 4 +# 1665| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1665| Value = [Literal] 4 +# 1665| ValueCategory = prvalue +# 1665| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1665| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1665| ValueCategory = lvalue +# 1666| getStmt(5): [DeclStmt] declaration +# 1666| getDeclarationEntry(0): [VariableDeclarationEntry] definition of ri +# 1666| Type = [LValueReferenceType] int & +# 1666| getVariable().getInitializer(): [Initializer] initializer for ri +# 1666| getExpr(): [VariableAccess] i +# 1666| Type = [RValueReferenceType] type && +# 1666| ValueCategory = prvalue(load) +# 1666| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1666| Type = [LValueReferenceType] type & +# 1666| ValueCategory = prvalue +# 1666| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1666| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1666| ValueCategory = lvalue +# 1667| getStmt(6): [DeclStmt] declaration +# 1667| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v +# 1667| Type = [IntType] int +# 1667| getVariable().getInitializer(): [Initializer] initializer for v +# 1667| getExpr(): [VariableAccess] i +# 1667| Type = [RValueReferenceType] type && # 1667| ValueCategory = prvalue(load) -# 1667| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1667| Type = [LValueReferenceType] int & -# 1667| ValueCategory = prvalue -# 1667| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1667| Type = [IntType] int -# 1667| ValueCategory = lvalue -# 1668| getStmt(9): [DeclStmt] declaration -# 1668| getDeclarationEntry(0): [VariableDeclarationEntry] definition of w +# 1667| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1667| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1667| ValueCategory = prvalue(load) +# 1668| getStmt(7): [ExprStmt] ExprStmt +# 1668| getExpr(): [AssignExpr] ... = ... # 1668| Type = [IntType] int -# 1668| getVariable().getInitializer(): [Initializer] initializer for w -# 1668| getExpr(): [VariableAccess] r -# 1668| Type = [LValueReferenceType] int & -# 1668| ValueCategory = prvalue(load) -# 1668| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1668| Type = [IntType] int -# 1668| ValueCategory = prvalue(load) -# 1670| getStmt(3): [ReturnStmt] return ... -# 1672| [TopLevelFunction] void array_structured_binding_non_ref_init() -# 1672| : -# 1672| getEntryPoint(): [BlockStmt] { ... } -# 1673| getStmt(0): [DeclStmt] declaration -# 1673| getDeclarationEntry(0): [VariableDeclarationEntry] definition of xs -# 1673| Type = [ArrayType] int[2] -# 1673| getVariable().getInitializer(): [Initializer] initializer for xs -# 1673| getExpr(): [ArrayAggregateLiteral] {...} -# 1673| Type = [ArrayType] int[2] -# 1673| ValueCategory = prvalue -# 1673| getAnElementExpr(0): [Literal] 1 -# 1673| Type = [IntType] int -# 1673| Value = [Literal] 1 -# 1673| ValueCategory = prvalue -# 1673| getAnElementExpr(1): [Literal] 2 -# 1673| Type = [IntType] int -# 1673| Value = [Literal] 2 -# 1673| ValueCategory = prvalue -# 1674| getStmt(1): [DeclStmt] declaration -# 1674| getDeclarationEntry(0): (no string representation) -# 1674| Type = [ArrayType] int[2] -# 1674| getVariable().getInitializer(): [Initializer] initializer for (unnamed local variable) -# 1674| getExpr(): [VariableAccess] xs -# 1674| Type = [ArrayType] int[2] -# 1674| ValueCategory = prvalue(load) -# 1674| getDeclarationEntry(1): [VariableDeclarationEntry] definition of x0 -# 1674| Type = [IntType] int +# 1668| ValueCategory = lvalue +# 1668| getLValue(): [VariableAccess] r +# 1668| Type = [LValueReferenceType] int & +# 1668| ValueCategory = prvalue(load) +# 1668| getRValue(): [Literal] 5 +# 1668| Type = [IntType] int +# 1668| Value = [Literal] 5 +# 1668| ValueCategory = prvalue +# 1668| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1668| Type = [IntType] int +# 1668| ValueCategory = lvalue +# 1669| getStmt(8): [DeclStmt] declaration +# 1669| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rr +# 1669| Type = [LValueReferenceType] int & +# 1669| getVariable().getInitializer(): [Initializer] initializer for rr +# 1669| getExpr(): [VariableAccess] r +# 1669| Type = [LValueReferenceType] int & +# 1669| ValueCategory = prvalue(load) +# 1669| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1669| Type = [LValueReferenceType] int & +# 1669| ValueCategory = prvalue +# 1669| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1669| Type = [IntType] int +# 1669| ValueCategory = lvalue +# 1670| getStmt(9): [DeclStmt] declaration +# 1670| getDeclarationEntry(0): [VariableDeclarationEntry] definition of w +# 1670| Type = [IntType] int +# 1670| getVariable().getInitializer(): [Initializer] initializer for w +# 1670| getExpr(): [VariableAccess] r +# 1670| Type = [LValueReferenceType] int & +# 1670| ValueCategory = prvalue(load) +# 1670| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1670| Type = [IntType] int +# 1670| ValueCategory = prvalue(load) +# 1672| getStmt(3): [ReturnStmt] return ... +# 1674| [TopLevelFunction] void array_structured_binding_non_ref_init() +# 1674| : +# 1674| getEntryPoint(): [BlockStmt] { ... } +# 1675| getStmt(0): [DeclStmt] declaration +# 1675| getDeclarationEntry(0): [VariableDeclarationEntry] definition of xs +# 1675| Type = [ArrayType] int[2] +# 1675| getVariable().getInitializer(): [Initializer] initializer for xs +# 1675| getExpr(): [ArrayAggregateLiteral] {...} +# 1675| Type = [ArrayType] int[2] +# 1675| ValueCategory = prvalue +# 1675| getAnElementExpr(0): [Literal] 1 +# 1675| Type = [IntType] int +# 1675| Value = [Literal] 1 +# 1675| ValueCategory = prvalue +# 1675| getAnElementExpr(1): [Literal] 2 +# 1675| Type = [IntType] int +# 1675| Value = [Literal] 2 +# 1675| ValueCategory = prvalue +# 1676| getStmt(1): [DeclStmt] declaration +# 1676| getDeclarationEntry(0): (no string representation) +# 1676| Type = [ArrayType] int[2] +# 1676| getVariable().getInitializer(): [Initializer] initializer for (unnamed local variable) +# 1676| getExpr(): [VariableAccess] xs +# 1676| Type = [ArrayType] int[2] +# 1676| ValueCategory = prvalue(load) +# 1676| getDeclarationEntry(1): [VariableDeclarationEntry] definition of x0 +# 1676| Type = [IntType] int #-----| getVariable().getInitializer(): [Initializer] initializer for x0 #-----| getExpr(): [ArrayExpr] access to array #-----| Type = [IntType] int @@ -13182,8 +13188,8 @@ ir.cpp: #-----| getArrayBase().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion #-----| Type = [IntPointerType] int * #-----| ValueCategory = prvalue -# 1674| getDeclarationEntry(2): [VariableDeclarationEntry] definition of x1 -# 1674| Type = [IntType] int +# 1676| getDeclarationEntry(2): [VariableDeclarationEntry] definition of x1 +# 1676| Type = [IntType] int #-----| getVariable().getInitializer(): [Initializer] initializer for x1 #-----| getExpr(): [ArrayExpr] access to array #-----| Type = [IntType] int @@ -13198,351 +13204,351 @@ ir.cpp: #-----| getArrayBase().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion #-----| Type = [IntPointerType] int * #-----| ValueCategory = prvalue -# 1675| getStmt(2): [ReturnStmt] return ... -# 1677| [CopyAssignmentOperator] CapturedLambdaMyObj& CapturedLambdaMyObj::operator=(CapturedLambdaMyObj const&) -# 1677| : +# 1677| getStmt(2): [ReturnStmt] return ... +# 1679| [CopyAssignmentOperator] CapturedLambdaMyObj& CapturedLambdaMyObj::operator=(CapturedLambdaMyObj const&) +# 1679| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const CapturedLambdaMyObj & -# 1677| [MoveAssignmentOperator] CapturedLambdaMyObj& CapturedLambdaMyObj::operator=(CapturedLambdaMyObj&&) -# 1677| : +# 1679| [MoveAssignmentOperator] CapturedLambdaMyObj& CapturedLambdaMyObj::operator=(CapturedLambdaMyObj&&) +# 1679| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] CapturedLambdaMyObj && -# 1677| [CopyConstructor] void CapturedLambdaMyObj::CapturedLambdaMyObj(CapturedLambdaMyObj const&) -# 1677| : +# 1679| [CopyConstructor] void CapturedLambdaMyObj::CapturedLambdaMyObj(CapturedLambdaMyObj const&) +# 1679| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const CapturedLambdaMyObj & -# 1677| [MoveConstructor] void CapturedLambdaMyObj::CapturedLambdaMyObj(CapturedLambdaMyObj&&) -# 1677| : +# 1679| [MoveConstructor] void CapturedLambdaMyObj::CapturedLambdaMyObj(CapturedLambdaMyObj&&) +# 1679| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] CapturedLambdaMyObj && -# 1680| [Constructor] void CapturedLambdaMyObj::CapturedLambdaMyObj() -# 1680| : -# 1680| : -# 1680| getEntryPoint(): [BlockStmt] { ... } -# 1680| getStmt(0): [ReturnStmt] return ... -# 1683| [TopLevelFunction] void captured_lambda(int, int&, int&&) -# 1683| : -# 1683| getParameter(0): [Parameter] x -# 1683| Type = [IntType] int -# 1683| getParameter(1): [Parameter] y -# 1683| Type = [LValueReferenceType] int & -# 1683| getParameter(2): [Parameter] z -# 1683| Type = [RValueReferenceType] int && -# 1684| getEntryPoint(): [BlockStmt] { ... } -# 1685| getStmt(0): [DeclStmt] declaration -# 1685| getDeclarationEntry(0): [VariableDeclarationEntry] definition of obj1 -# 1685| Type = [LValueReferenceType] const CapturedLambdaMyObj & -# 1685| getVariable().getInitializer(): [Initializer] initializer for obj1 -# 1685| getExpr(): [ConstructorCall] call to CapturedLambdaMyObj -# 1685| Type = [VoidType] void -# 1685| ValueCategory = prvalue -# 1685| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1685| Type = [LValueReferenceType] const CapturedLambdaMyObj & -# 1685| ValueCategory = prvalue -# 1685| getExpr(): [CStyleCast] (const CapturedLambdaMyObj)... -# 1685| Conversion = [GlvalueConversion] glvalue conversion -# 1685| Type = [SpecifiedType] const CapturedLambdaMyObj -# 1685| ValueCategory = lvalue -# 1685| getExpr(): [TemporaryObjectExpr] temporary object -# 1685| Type = [Class] CapturedLambdaMyObj -# 1685| ValueCategory = lvalue -# 1686| getStmt(1): [DeclStmt] declaration -# 1686| getDeclarationEntry(0): [VariableDeclarationEntry] definition of obj2 -# 1686| Type = [Class] CapturedLambdaMyObj -# 1686| getVariable().getInitializer(): [Initializer] initializer for obj2 -# 1686| getExpr(): [ConstructorCall] call to CapturedLambdaMyObj -# 1686| Type = [VoidType] void -# 1686| ValueCategory = prvalue -# 1688| getStmt(2): [DeclStmt] declaration -# 1688| getDeclarationEntry(0): [VariableDeclarationEntry] definition of lambda_outer -# 1688| Type = [Closure,LocalClass] decltype([...](...){...}) -# 1688| getVariable().getInitializer(): [Initializer] initializer for lambda_outer -# 1688| getExpr(): [LambdaExpression] [...](...){...} -# 1688| Type = [Closure,LocalClass] decltype([...](...){...}) +# 1682| [Constructor] void CapturedLambdaMyObj::CapturedLambdaMyObj() +# 1682| : +# 1682| : +# 1682| getEntryPoint(): [BlockStmt] { ... } +# 1682| getStmt(0): [ReturnStmt] return ... +# 1685| [TopLevelFunction] void captured_lambda(int, int&, int&&) +# 1685| : +# 1685| getParameter(0): [Parameter] x +# 1685| Type = [IntType] int +# 1685| getParameter(1): [Parameter] y +# 1685| Type = [LValueReferenceType] int & +# 1685| getParameter(2): [Parameter] z +# 1685| Type = [RValueReferenceType] int && +# 1686| getEntryPoint(): [BlockStmt] { ... } +# 1687| getStmt(0): [DeclStmt] declaration +# 1687| getDeclarationEntry(0): [VariableDeclarationEntry] definition of obj1 +# 1687| Type = [LValueReferenceType] const CapturedLambdaMyObj & +# 1687| getVariable().getInitializer(): [Initializer] initializer for obj1 +# 1687| getExpr(): [ConstructorCall] call to CapturedLambdaMyObj +# 1687| Type = [VoidType] void +# 1687| ValueCategory = prvalue +# 1687| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1687| Type = [LValueReferenceType] const CapturedLambdaMyObj & +# 1687| ValueCategory = prvalue +# 1687| getExpr(): [CStyleCast] (const CapturedLambdaMyObj)... +# 1687| Conversion = [GlvalueConversion] glvalue conversion +# 1687| Type = [SpecifiedType] const CapturedLambdaMyObj +# 1687| ValueCategory = lvalue +# 1687| getExpr(): [TemporaryObjectExpr] temporary object +# 1687| Type = [Class] CapturedLambdaMyObj +# 1687| ValueCategory = lvalue +# 1688| getStmt(1): [DeclStmt] declaration +# 1688| getDeclarationEntry(0): [VariableDeclarationEntry] definition of obj2 +# 1688| Type = [Class] CapturedLambdaMyObj +# 1688| getVariable().getInitializer(): [Initializer] initializer for obj2 +# 1688| getExpr(): [ConstructorCall] call to CapturedLambdaMyObj +# 1688| Type = [VoidType] void # 1688| ValueCategory = prvalue -# 1688| getInitializer(): [ClassAggregateLiteral] {...} -# 1688| Type = [Closure,LocalClass] decltype([...](...){...}) -# 1688| ValueCategory = prvalue -# 1688| getAFieldExpr(obj1): [VariableAccess] obj1 -# 1688| Type = [LValueReferenceType] const CapturedLambdaMyObj & -# 1688| ValueCategory = prvalue(load) -# 1688| getAFieldExpr(obj2): [VariableAccess] obj2 -# 1688| Type = [Class] CapturedLambdaMyObj -# 1688| ValueCategory = prvalue(load) -# 1688| getAFieldExpr(x): [VariableAccess] x -# 1688| Type = [IntType] int -# 1688| ValueCategory = prvalue(load) -# 1688| getAFieldExpr(y): [VariableAccess] y -# 1688| Type = [LValueReferenceType] int & -# 1688| ValueCategory = prvalue(load) -# 1688| getAFieldExpr(z): [VariableAccess] z -# 1688| Type = [RValueReferenceType] int && -# 1688| ValueCategory = prvalue(load) +# 1690| getStmt(2): [DeclStmt] declaration +# 1690| getDeclarationEntry(0): [VariableDeclarationEntry] definition of lambda_outer +# 1690| Type = [Closure,LocalClass] decltype([...](...){...}) +# 1690| getVariable().getInitializer(): [Initializer] initializer for lambda_outer +# 1690| getExpr(): [LambdaExpression] [...](...){...} +# 1690| Type = [Closure,LocalClass] decltype([...](...){...}) +# 1690| ValueCategory = prvalue +# 1690| getInitializer(): [ClassAggregateLiteral] {...} +# 1690| Type = [Closure,LocalClass] decltype([...](...){...}) +# 1690| ValueCategory = prvalue +# 1690| getAFieldExpr(obj1): [VariableAccess] obj1 +# 1690| Type = [LValueReferenceType] const CapturedLambdaMyObj & +# 1690| ValueCategory = prvalue(load) +# 1690| getAFieldExpr(obj2): [VariableAccess] obj2 +# 1690| Type = [Class] CapturedLambdaMyObj +# 1690| ValueCategory = prvalue(load) +# 1690| getAFieldExpr(x): [VariableAccess] x +# 1690| Type = [IntType] int +# 1690| ValueCategory = prvalue(load) +# 1690| getAFieldExpr(y): [VariableAccess] y +# 1690| Type = [LValueReferenceType] int & +# 1690| ValueCategory = prvalue(load) +# 1690| getAFieldExpr(z): [VariableAccess] z +# 1690| Type = [RValueReferenceType] int && +# 1690| ValueCategory = prvalue(load) #-----| getAFieldExpr(obj1).getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) #-----| Type = [SpecifiedType] const CapturedLambdaMyObj #-----| ValueCategory = prvalue(load) -# 1690| getAFieldExpr(y).getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1690| Type = [IntType] int -# 1690| ValueCategory = prvalue(load) -# 1690| getAFieldExpr(z).getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1690| Type = [IntType] int -# 1690| ValueCategory = prvalue(load) -# 1691| getStmt(3): [ReturnStmt] return ... -# 1688| [CopyAssignmentOperator] (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1688, col. 25)& (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1688, col. 25)::operator=((void captured_lambda(int, int&, int&&))::(lambda [] type at line 1688, col. 25) const&) -# 1688| : +# 1692| getAFieldExpr(y).getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1692| Type = [IntType] int +# 1692| ValueCategory = prvalue(load) +# 1692| getAFieldExpr(z).getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1692| Type = [IntType] int +# 1692| ValueCategory = prvalue(load) +# 1693| getStmt(3): [ReturnStmt] return ... +# 1690| [CopyAssignmentOperator] (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25)& (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25)::operator=((void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25) const&) +# 1690| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const lambda [] type at line 1688, col. 25 & -# 1688| [CopyConstructor] void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1688, col. 25)::(unnamed constructor)((void captured_lambda(int, int&, int&&))::(lambda [] type at line 1688, col. 25) const&) -# 1688| : +#-----| Type = [LValueReferenceType] const lambda [] type at line 1690, col. 25 & +# 1690| [CopyConstructor] void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25)::(unnamed constructor)((void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25) const&) +# 1690| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const lambda [] type at line 1688, col. 25 & -# 1688| [MoveConstructor] void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1688, col. 25)::(unnamed constructor)((void captured_lambda(int, int&, int&&))::(lambda [] type at line 1688, col. 25)&&) -# 1688| : +#-----| Type = [LValueReferenceType] const lambda [] type at line 1690, col. 25 & +# 1690| [MoveConstructor] void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25)::(unnamed constructor)((void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25)&&) +# 1690| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [RValueReferenceType] lambda [] type at line 1688, col. 25 && -# 1688| [Constructor] void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1688, col. 25)::(unnamed constructor)() -# 1688| : -# 1688| [ConstMemberFunction] void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1688, col. 25)::operator()() const -# 1688| : -# 1688| getEntryPoint(): [BlockStmt] { ... } -# 1689| getStmt(0): [DeclStmt] declaration -# 1689| getDeclarationEntry(0): [VariableDeclarationEntry] definition of lambda_inner -# 1689| Type = [Closure,LocalClass] decltype([...](...){...}) -# 1689| getVariable().getInitializer(): [Initializer] initializer for lambda_inner -# 1689| getExpr(): [LambdaExpression] [...](...){...} -# 1689| Type = [Closure,LocalClass] decltype([...](...){...}) -# 1689| ValueCategory = prvalue -# 1689| getInitializer(): [ClassAggregateLiteral] {...} -# 1689| Type = [Closure,LocalClass] decltype([...](...){...}) -# 1689| ValueCategory = prvalue -# 1689| getAFieldExpr(obj1): [PointerFieldAccess] obj1 -# 1689| Type = [SpecifiedType] const CapturedLambdaMyObj -# 1689| ValueCategory = prvalue(load) -# 1689| getQualifier(): [ThisExpr] this -# 1689| Type = [PointerType] lambda [] type at line 1689, col. 29 * -# 1689| ValueCategory = prvalue(load) -# 1689| getAFieldExpr(obj2): [PointerFieldAccess] obj2 -# 1689| Type = [Class] CapturedLambdaMyObj -# 1689| ValueCategory = prvalue(load) -# 1689| getQualifier(): [ThisExpr] this -# 1689| Type = [PointerType] lambda [] type at line 1689, col. 29 * -# 1689| ValueCategory = prvalue(load) -# 1689| getAFieldExpr(x): [PointerFieldAccess] x -# 1689| Type = [IntType] int -# 1689| ValueCategory = prvalue(load) -# 1689| getQualifier(): [ThisExpr] this -# 1689| Type = [PointerType] const lambda [] type at line 1688, col. 25 * -# 1689| ValueCategory = prvalue(load) -# 1689| getAFieldExpr(y): [PointerFieldAccess] y -# 1689| Type = [IntType] int -# 1689| ValueCategory = prvalue(load) -# 1689| getQualifier(): [ThisExpr] this -# 1689| Type = [PointerType] const lambda [] type at line 1688, col. 25 * -# 1689| ValueCategory = prvalue(load) -# 1689| getAFieldExpr(z): [PointerFieldAccess] z -# 1689| Type = [IntType] int -# 1689| ValueCategory = prvalue(load) -# 1689| getQualifier(): [ThisExpr] this -# 1689| Type = [PointerType] const lambda [] type at line 1688, col. 25 * -# 1689| ValueCategory = prvalue(load) -# 1690| getStmt(1): [ReturnStmt] return ... -# 1689| [CopyAssignmentOperator] (void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1688, col. 25)::operator()() const)::(lambda [] type at line 1689, col. 29)& (void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1688, col. 25)::operator()() const)::(lambda [] type at line 1689, col. 29)::operator=((void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1688, col. 25)::operator()() const)::(lambda [] type at line 1689, col. 29) const&) -# 1689| : +#-----| Type = [RValueReferenceType] lambda [] type at line 1690, col. 25 && +# 1690| [Constructor] void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25)::(unnamed constructor)() +# 1690| : +# 1690| [ConstMemberFunction] void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25)::operator()() const +# 1690| : +# 1690| getEntryPoint(): [BlockStmt] { ... } +# 1691| getStmt(0): [DeclStmt] declaration +# 1691| getDeclarationEntry(0): [VariableDeclarationEntry] definition of lambda_inner +# 1691| Type = [Closure,LocalClass] decltype([...](...){...}) +# 1691| getVariable().getInitializer(): [Initializer] initializer for lambda_inner +# 1691| getExpr(): [LambdaExpression] [...](...){...} +# 1691| Type = [Closure,LocalClass] decltype([...](...){...}) +# 1691| ValueCategory = prvalue +# 1691| getInitializer(): [ClassAggregateLiteral] {...} +# 1691| Type = [Closure,LocalClass] decltype([...](...){...}) +# 1691| ValueCategory = prvalue +# 1691| getAFieldExpr(obj1): [PointerFieldAccess] obj1 +# 1691| Type = [SpecifiedType] const CapturedLambdaMyObj +# 1691| ValueCategory = prvalue(load) +# 1691| getQualifier(): [ThisExpr] this +# 1691| Type = [PointerType] lambda [] type at line 1691, col. 29 * +# 1691| ValueCategory = prvalue(load) +# 1691| getAFieldExpr(obj2): [PointerFieldAccess] obj2 +# 1691| Type = [Class] CapturedLambdaMyObj +# 1691| ValueCategory = prvalue(load) +# 1691| getQualifier(): [ThisExpr] this +# 1691| Type = [PointerType] lambda [] type at line 1691, col. 29 * +# 1691| ValueCategory = prvalue(load) +# 1691| getAFieldExpr(x): [PointerFieldAccess] x +# 1691| Type = [IntType] int +# 1691| ValueCategory = prvalue(load) +# 1691| getQualifier(): [ThisExpr] this +# 1691| Type = [PointerType] const lambda [] type at line 1690, col. 25 * +# 1691| ValueCategory = prvalue(load) +# 1691| getAFieldExpr(y): [PointerFieldAccess] y +# 1691| Type = [IntType] int +# 1691| ValueCategory = prvalue(load) +# 1691| getQualifier(): [ThisExpr] this +# 1691| Type = [PointerType] const lambda [] type at line 1690, col. 25 * +# 1691| ValueCategory = prvalue(load) +# 1691| getAFieldExpr(z): [PointerFieldAccess] z +# 1691| Type = [IntType] int +# 1691| ValueCategory = prvalue(load) +# 1691| getQualifier(): [ThisExpr] this +# 1691| Type = [PointerType] const lambda [] type at line 1690, col. 25 * +# 1691| ValueCategory = prvalue(load) +# 1692| getStmt(1): [ReturnStmt] return ... +# 1691| [CopyAssignmentOperator] (void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25)::operator()() const)::(lambda [] type at line 1691, col. 29)& (void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25)::operator()() const)::(lambda [] type at line 1691, col. 29)::operator=((void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25)::operator()() const)::(lambda [] type at line 1691, col. 29) const&) +# 1691| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const lambda [] type at line 1689, col. 29 & -# 1689| [CopyConstructor] void (void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1688, col. 25)::operator()() const)::(lambda [] type at line 1689, col. 29)::(unnamed constructor)((void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1688, col. 25)::operator()() const)::(lambda [] type at line 1689, col. 29) const&) -# 1689| : +#-----| Type = [LValueReferenceType] const lambda [] type at line 1691, col. 29 & +# 1691| [CopyConstructor] void (void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25)::operator()() const)::(lambda [] type at line 1691, col. 29)::(unnamed constructor)((void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25)::operator()() const)::(lambda [] type at line 1691, col. 29) const&) +# 1691| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const lambda [] type at line 1689, col. 29 & -# 1689| [MoveConstructor] void (void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1688, col. 25)::operator()() const)::(lambda [] type at line 1689, col. 29)::(unnamed constructor)((void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1688, col. 25)::operator()() const)::(lambda [] type at line 1689, col. 29)&&) -# 1689| : +#-----| Type = [LValueReferenceType] const lambda [] type at line 1691, col. 29 & +# 1691| [MoveConstructor] void (void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25)::operator()() const)::(lambda [] type at line 1691, col. 29)::(unnamed constructor)((void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25)::operator()() const)::(lambda [] type at line 1691, col. 29)&&) +# 1691| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [RValueReferenceType] lambda [] type at line 1689, col. 29 && -# 1689| [Constructor] void (void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1688, col. 25)::operator()() const)::(lambda [] type at line 1689, col. 29)::(unnamed constructor)() -# 1689| : -# 1689| [ConstMemberFunction] void (void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1688, col. 25)::operator()() const)::(lambda [] type at line 1689, col. 29)::operator()() const -# 1689| : -# 1689| getEntryPoint(): [BlockStmt] { ... } -# 1689| getStmt(0): [EmptyStmt] ; -# 1689| getStmt(1): [ReturnStmt] return ... -# 1693| [TopLevelFunction] int goto_on_same_line() -# 1693| : -# 1693| getEntryPoint(): [BlockStmt] { ... } -# 1694| getStmt(0): [DeclStmt] declaration -# 1694| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 1694| Type = [IntType] int -# 1694| getVariable().getInitializer(): [Initializer] initializer for x -# 1694| getExpr(): [Literal] 42 -# 1694| Type = [IntType] int -# 1694| Value = [Literal] 42 -# 1694| ValueCategory = prvalue -# 1695| getStmt(1): [GotoStmt] goto ... -# 1695| getStmt(2): [LabelStmt] label ...: -# 1696| getStmt(3): [ReturnStmt] return ... -# 1696| getExpr(): [VariableAccess] x +#-----| Type = [RValueReferenceType] lambda [] type at line 1691, col. 29 && +# 1691| [Constructor] void (void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25)::operator()() const)::(lambda [] type at line 1691, col. 29)::(unnamed constructor)() +# 1691| : +# 1691| [ConstMemberFunction] void (void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25)::operator()() const)::(lambda [] type at line 1691, col. 29)::operator()() const +# 1691| : +# 1691| getEntryPoint(): [BlockStmt] { ... } +# 1691| getStmt(0): [EmptyStmt] ; +# 1691| getStmt(1): [ReturnStmt] return ... +# 1695| [TopLevelFunction] int goto_on_same_line() +# 1695| : +# 1695| getEntryPoint(): [BlockStmt] { ... } +# 1696| getStmt(0): [DeclStmt] declaration +# 1696| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x # 1696| Type = [IntType] int -# 1696| ValueCategory = prvalue(load) -# 1699| [CopyAssignmentOperator] TrivialLambdaClass& TrivialLambdaClass::operator=(TrivialLambdaClass const&) -# 1699| : +# 1696| getVariable().getInitializer(): [Initializer] initializer for x +# 1696| getExpr(): [Literal] 42 +# 1696| Type = [IntType] int +# 1696| Value = [Literal] 42 +# 1696| ValueCategory = prvalue +# 1697| getStmt(1): [GotoStmt] goto ... +# 1697| getStmt(2): [LabelStmt] label ...: +# 1698| getStmt(3): [ReturnStmt] return ... +# 1698| getExpr(): [VariableAccess] x +# 1698| Type = [IntType] int +# 1698| ValueCategory = prvalue(load) +# 1701| [CopyAssignmentOperator] TrivialLambdaClass& TrivialLambdaClass::operator=(TrivialLambdaClass const&) +# 1701| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const TrivialLambdaClass & -# 1699| [MoveAssignmentOperator] TrivialLambdaClass& TrivialLambdaClass::operator=(TrivialLambdaClass&&) -# 1699| : +# 1701| [MoveAssignmentOperator] TrivialLambdaClass& TrivialLambdaClass::operator=(TrivialLambdaClass&&) +# 1701| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] TrivialLambdaClass && -# 1701| [ConstMemberFunction] void TrivialLambdaClass::m() const -# 1701| : -# 1701| getEntryPoint(): [BlockStmt] { ... } -# 1702| getStmt(0): [DeclStmt] declaration -# 1702| getDeclarationEntry(0): [VariableDeclarationEntry] definition of l_m_outer -# 1702| Type = [Closure,LocalClass] decltype([...](...){...}) -# 1702| getVariable().getInitializer(): [Initializer] initializer for l_m_outer -# 1702| getExpr(): [LambdaExpression] [...](...){...} -# 1702| Type = [Closure,LocalClass] decltype([...](...){...}) -# 1702| ValueCategory = prvalue -# 1702| getInitializer(): [ClassAggregateLiteral] {...} -# 1702| Type = [Closure,LocalClass] decltype([...](...){...}) -# 1702| ValueCategory = prvalue -# 1702| getAFieldExpr((captured this)): [PointerDereferenceExpr] * ... -# 1702| Type = [SpecifiedType] const TrivialLambdaClass -# 1702| ValueCategory = prvalue(load) -# 1702| getOperand(): [ThisExpr] this -# 1702| Type = [SpecifiedType] const TrivialLambdaClass *const -# 1702| ValueCategory = prvalue(load) +# 1703| [ConstMemberFunction] void TrivialLambdaClass::m() const +# 1703| : +# 1703| getEntryPoint(): [BlockStmt] { ... } +# 1704| getStmt(0): [DeclStmt] declaration +# 1704| getDeclarationEntry(0): [VariableDeclarationEntry] definition of l_m_outer +# 1704| Type = [Closure,LocalClass] decltype([...](...){...}) +# 1704| getVariable().getInitializer(): [Initializer] initializer for l_m_outer +# 1704| getExpr(): [LambdaExpression] [...](...){...} +# 1704| Type = [Closure,LocalClass] decltype([...](...){...}) +# 1704| ValueCategory = prvalue +# 1704| getInitializer(): [ClassAggregateLiteral] {...} +# 1704| Type = [Closure,LocalClass] decltype([...](...){...}) +# 1704| ValueCategory = prvalue +# 1704| getAFieldExpr((captured this)): [PointerDereferenceExpr] * ... +# 1704| Type = [SpecifiedType] const TrivialLambdaClass +# 1704| ValueCategory = prvalue(load) +# 1704| getOperand(): [ThisExpr] this +# 1704| Type = [SpecifiedType] const TrivialLambdaClass *const +# 1704| ValueCategory = prvalue(load) +# 1711| getStmt(1): [ReturnStmt] return ... +# 1704| [CopyAssignmentOperator] (void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26)& (void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26)::operator=((void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26) const&) +# 1704| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const lambda [] type at line 1704, col. 26 & +# 1704| [CopyConstructor] void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26)::(unnamed constructor)((void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26) const&) +# 1704| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const lambda [] type at line 1704, col. 26 & +# 1704| [MoveConstructor] void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26)::(unnamed constructor)((void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26)&&) +# 1704| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [RValueReferenceType] lambda [] type at line 1704, col. 26 && +# 1704| [Constructor] void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26)::(unnamed constructor)() +# 1704| : +# 1704| [ConstMemberFunction] void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26)::operator()() const +# 1704| : +# 1704| getEntryPoint(): [BlockStmt] { ... } +# 1705| getStmt(0): [ExprStmt] ExprStmt +# 1705| getExpr(): [FunctionCall] call to m +# 1705| Type = [VoidType] void +# 1705| ValueCategory = prvalue +# 1705| getQualifier(): [AddressOfExpr] & ... +# 1705| Type = [PointerType] const TrivialLambdaClass * +# 1705| ValueCategory = prvalue +# 1705| getOperand(): [ImplicitThisFieldAccess,PointerFieldAccess] (captured this) +# 1705| Type = [SpecifiedType] const TrivialLambdaClass +# 1705| ValueCategory = lvalue +# 1705| getQualifier(): [ThisExpr] this +# 1705| Type = [PointerType] const lambda [] type at line 1704, col. 26 * +# 1705| ValueCategory = prvalue(load) +# 1707| getStmt(1): [DeclStmt] declaration +# 1707| getDeclarationEntry(0): [VariableDeclarationEntry] definition of l_m_inner +# 1707| Type = [Closure,LocalClass] decltype([...](...){...}) +# 1707| getVariable().getInitializer(): [Initializer] initializer for l_m_inner +# 1707| getExpr(): [LambdaExpression] [...](...){...} +# 1707| Type = [Closure,LocalClass] decltype([...](...){...}) +# 1707| ValueCategory = prvalue +# 1707| getInitializer(): [ClassAggregateLiteral] {...} +# 1707| Type = [Closure,LocalClass] decltype([...](...){...}) +# 1707| ValueCategory = prvalue +# 1707| getAFieldExpr((captured this)): [PointerFieldAccess] (captured this) +# 1707| Type = [SpecifiedType] const TrivialLambdaClass +# 1707| ValueCategory = prvalue(load) +# 1707| getQualifier(): [ThisExpr] this +# 1707| Type = [PointerType] lambda [] type at line 1707, col. 30 * +# 1707| ValueCategory = prvalue(load) +# 1710| getStmt(2): [ReturnStmt] return ... +# 1707| [CopyAssignmentOperator] (void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26)::operator()() const)::(lambda [] type at line 1707, col. 30)& (void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26)::operator()() const)::(lambda [] type at line 1707, col. 30)::operator=((void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26)::operator()() const)::(lambda [] type at line 1707, col. 30) const&) +# 1707| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const lambda [] type at line 1707, col. 30 & +# 1707| [CopyConstructor] void (void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26)::operator()() const)::(lambda [] type at line 1707, col. 30)::(unnamed constructor)((void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26)::operator()() const)::(lambda [] type at line 1707, col. 30) const&) +# 1707| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const lambda [] type at line 1707, col. 30 & +# 1707| [MoveConstructor] void (void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26)::operator()() const)::(lambda [] type at line 1707, col. 30)::(unnamed constructor)((void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26)::operator()() const)::(lambda [] type at line 1707, col. 30)&&) +# 1707| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [RValueReferenceType] lambda [] type at line 1707, col. 30 && +# 1707| [Constructor] void (void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26)::operator()() const)::(lambda [] type at line 1707, col. 30)::(unnamed constructor)() +# 1707| : +# 1707| [ConstMemberFunction] void (void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26)::operator()() const)::(lambda [] type at line 1707, col. 30)::operator()() const +# 1707| : +# 1707| getEntryPoint(): [BlockStmt] { ... } +# 1708| getStmt(0): [ExprStmt] ExprStmt +# 1708| getExpr(): [FunctionCall] call to m +# 1708| Type = [VoidType] void +# 1708| ValueCategory = prvalue +# 1708| getQualifier(): [AddressOfExpr] & ... +# 1708| Type = [PointerType] const TrivialLambdaClass * +# 1708| ValueCategory = prvalue +# 1708| getOperand(): [ImplicitThisFieldAccess,PointerFieldAccess] (captured this) +# 1708| Type = [SpecifiedType] const TrivialLambdaClass +# 1708| ValueCategory = lvalue +# 1708| getQualifier(): [ThisExpr] this +# 1708| Type = [PointerType] const lambda [] type at line 1707, col. 30 * +# 1708| ValueCategory = prvalue(load) # 1709| getStmt(1): [ReturnStmt] return ... -# 1702| [CopyAssignmentOperator] (void TrivialLambdaClass::m() const)::(lambda [] type at line 1702, col. 26)& (void TrivialLambdaClass::m() const)::(lambda [] type at line 1702, col. 26)::operator=((void TrivialLambdaClass::m() const)::(lambda [] type at line 1702, col. 26) const&) -# 1702| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const lambda [] type at line 1702, col. 26 & -# 1702| [CopyConstructor] void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1702, col. 26)::(unnamed constructor)((void TrivialLambdaClass::m() const)::(lambda [] type at line 1702, col. 26) const&) -# 1702| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const lambda [] type at line 1702, col. 26 & -# 1702| [MoveConstructor] void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1702, col. 26)::(unnamed constructor)((void TrivialLambdaClass::m() const)::(lambda [] type at line 1702, col. 26)&&) -# 1702| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [RValueReferenceType] lambda [] type at line 1702, col. 26 && -# 1702| [Constructor] void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1702, col. 26)::(unnamed constructor)() -# 1702| : -# 1702| [ConstMemberFunction] void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1702, col. 26)::operator()() const -# 1702| : -# 1702| getEntryPoint(): [BlockStmt] { ... } -# 1703| getStmt(0): [ExprStmt] ExprStmt -# 1703| getExpr(): [FunctionCall] call to m -# 1703| Type = [VoidType] void -# 1703| ValueCategory = prvalue -# 1703| getQualifier(): [AddressOfExpr] & ... -# 1703| Type = [PointerType] const TrivialLambdaClass * -# 1703| ValueCategory = prvalue -# 1703| getOperand(): [ImplicitThisFieldAccess,PointerFieldAccess] (captured this) -# 1703| Type = [SpecifiedType] const TrivialLambdaClass -# 1703| ValueCategory = lvalue -# 1703| getQualifier(): [ThisExpr] this -# 1703| Type = [PointerType] const lambda [] type at line 1702, col. 26 * -# 1703| ValueCategory = prvalue(load) -# 1705| getStmt(1): [DeclStmt] declaration -# 1705| getDeclarationEntry(0): [VariableDeclarationEntry] definition of l_m_inner -# 1705| Type = [Closure,LocalClass] decltype([...](...){...}) -# 1705| getVariable().getInitializer(): [Initializer] initializer for l_m_inner -# 1705| getExpr(): [LambdaExpression] [...](...){...} -# 1705| Type = [Closure,LocalClass] decltype([...](...){...}) -# 1705| ValueCategory = prvalue -# 1705| getInitializer(): [ClassAggregateLiteral] {...} -# 1705| Type = [Closure,LocalClass] decltype([...](...){...}) -# 1705| ValueCategory = prvalue -# 1705| getAFieldExpr((captured this)): [PointerFieldAccess] (captured this) -# 1705| Type = [SpecifiedType] const TrivialLambdaClass -# 1705| ValueCategory = prvalue(load) -# 1705| getQualifier(): [ThisExpr] this -# 1705| Type = [PointerType] lambda [] type at line 1705, col. 30 * -# 1705| ValueCategory = prvalue(load) -# 1708| getStmt(2): [ReturnStmt] return ... -# 1705| [CopyAssignmentOperator] (void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1702, col. 26)::operator()() const)::(lambda [] type at line 1705, col. 30)& (void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1702, col. 26)::operator()() const)::(lambda [] type at line 1705, col. 30)::operator=((void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1702, col. 26)::operator()() const)::(lambda [] type at line 1705, col. 30) const&) -# 1705| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const lambda [] type at line 1705, col. 30 & -# 1705| [CopyConstructor] void (void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1702, col. 26)::operator()() const)::(lambda [] type at line 1705, col. 30)::(unnamed constructor)((void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1702, col. 26)::operator()() const)::(lambda [] type at line 1705, col. 30) const&) -# 1705| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const lambda [] type at line 1705, col. 30 & -# 1705| [MoveConstructor] void (void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1702, col. 26)::operator()() const)::(lambda [] type at line 1705, col. 30)::(unnamed constructor)((void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1702, col. 26)::operator()() const)::(lambda [] type at line 1705, col. 30)&&) -# 1705| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [RValueReferenceType] lambda [] type at line 1705, col. 30 && -# 1705| [Constructor] void (void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1702, col. 26)::operator()() const)::(lambda [] type at line 1705, col. 30)::(unnamed constructor)() -# 1705| : -# 1705| [ConstMemberFunction] void (void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1702, col. 26)::operator()() const)::(lambda [] type at line 1705, col. 30)::operator()() const -# 1705| : -# 1705| getEntryPoint(): [BlockStmt] { ... } -# 1706| getStmt(0): [ExprStmt] ExprStmt -# 1706| getExpr(): [FunctionCall] call to m -# 1706| Type = [VoidType] void -# 1706| ValueCategory = prvalue -# 1706| getQualifier(): [AddressOfExpr] & ... -# 1706| Type = [PointerType] const TrivialLambdaClass * -# 1706| ValueCategory = prvalue -# 1706| getOperand(): [ImplicitThisFieldAccess,PointerFieldAccess] (captured this) -# 1706| Type = [SpecifiedType] const TrivialLambdaClass -# 1706| ValueCategory = lvalue -# 1706| getQualifier(): [ThisExpr] this -# 1706| Type = [PointerType] const lambda [] type at line 1705, col. 30 * -# 1706| ValueCategory = prvalue(load) -# 1707| getStmt(1): [ReturnStmt] return ... -# 1712| [TopLevelFunction] void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&) -# 1712| : -# 1712| getParameter(0): [Parameter] p1 -# 1712| Type = [Class] TrivialLambdaClass -# 1712| getParameter(1): [Parameter] p2 -# 1712| Type = [LValueReferenceType] TrivialLambdaClass & -# 1712| getParameter(2): [Parameter] p3 -# 1712| Type = [RValueReferenceType] TrivialLambdaClass && -# 1712| getEntryPoint(): [BlockStmt] { ... } -# 1713| getStmt(0): [DeclStmt] declaration -# 1713| getDeclarationEntry(0): [VariableDeclarationEntry] definition of l1 -# 1713| Type = [SpecifiedType] const TrivialLambdaClass -# 1714| getStmt(1): [DeclStmt] declaration -# 1714| getDeclarationEntry(0): [VariableDeclarationEntry] definition of l2 -# 1714| Type = [LValueReferenceType] const TrivialLambdaClass & -# 1714| getVariable().getInitializer(): [Initializer] initializer for l2 -# 1714| getExpr(): [Literal] 0 -# 1714| Type = [Class] TrivialLambdaClass -# 1714| Value = [Literal] 0 -# 1714| ValueCategory = prvalue -# 1714| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1714| Type = [LValueReferenceType] const TrivialLambdaClass & -# 1714| ValueCategory = prvalue -# 1714| getExpr(): [CStyleCast] (const TrivialLambdaClass)... -# 1714| Conversion = [GlvalueConversion] glvalue conversion -# 1714| Type = [SpecifiedType] const TrivialLambdaClass -# 1714| ValueCategory = lvalue -# 1714| getExpr(): [TemporaryObjectExpr] temporary object -# 1714| Type = [Class] TrivialLambdaClass -# 1714| ValueCategory = lvalue -# 1716| getStmt(2): [DeclStmt] declaration -# 1716| getDeclarationEntry(0): [VariableDeclarationEntry] definition of l_outer1 -# 1716| Type = [Closure,LocalClass] decltype([...](...){...}) -# 1716| getVariable().getInitializer(): [Initializer] initializer for l_outer1 -# 1716| getExpr(): [LambdaExpression] [...](...){...} -# 1716| Type = [Closure,LocalClass] decltype([...](...){...}) +# 1714| [TopLevelFunction] void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&) +# 1714| : +# 1714| getParameter(0): [Parameter] p1 +# 1714| Type = [Class] TrivialLambdaClass +# 1714| getParameter(1): [Parameter] p2 +# 1714| Type = [LValueReferenceType] TrivialLambdaClass & +# 1714| getParameter(2): [Parameter] p3 +# 1714| Type = [RValueReferenceType] TrivialLambdaClass && +# 1714| getEntryPoint(): [BlockStmt] { ... } +# 1715| getStmt(0): [DeclStmt] declaration +# 1715| getDeclarationEntry(0): [VariableDeclarationEntry] definition of l1 +# 1715| Type = [SpecifiedType] const TrivialLambdaClass +# 1716| getStmt(1): [DeclStmt] declaration +# 1716| getDeclarationEntry(0): [VariableDeclarationEntry] definition of l2 +# 1716| Type = [LValueReferenceType] const TrivialLambdaClass & +# 1716| getVariable().getInitializer(): [Initializer] initializer for l2 +# 1716| getExpr(): [Literal] 0 +# 1716| Type = [Class] TrivialLambdaClass +# 1716| Value = [Literal] 0 # 1716| ValueCategory = prvalue -# 1716| getInitializer(): [ClassAggregateLiteral] {...} -# 1716| Type = [Closure,LocalClass] decltype([...](...){...}) -# 1716| ValueCategory = prvalue -# 1716| getAFieldExpr(p1): [VariableAccess] p1 +# 1716| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1716| Type = [LValueReferenceType] const TrivialLambdaClass & +# 1716| ValueCategory = prvalue +# 1716| getExpr(): [CStyleCast] (const TrivialLambdaClass)... +# 1716| Conversion = [GlvalueConversion] glvalue conversion +# 1716| Type = [SpecifiedType] const TrivialLambdaClass +# 1716| ValueCategory = lvalue +# 1716| getExpr(): [TemporaryObjectExpr] temporary object # 1716| Type = [Class] TrivialLambdaClass -# 1716| ValueCategory = prvalue(load) -# 1716| getAFieldExpr(p2): [VariableAccess] p2 -# 1716| Type = [LValueReferenceType] TrivialLambdaClass & -# 1716| ValueCategory = prvalue(load) -# 1716| getAFieldExpr(p3): [VariableAccess] p3 -# 1716| Type = [RValueReferenceType] TrivialLambdaClass && -# 1716| ValueCategory = prvalue(load) -# 1716| getAFieldExpr(l1): [VariableAccess] l1 -# 1716| Type = [SpecifiedType] const TrivialLambdaClass -# 1716| ValueCategory = prvalue(load) -# 1716| getAFieldExpr(l2): [VariableAccess] l2 -# 1716| Type = [LValueReferenceType] const TrivialLambdaClass & -# 1716| ValueCategory = prvalue(load) +# 1716| ValueCategory = lvalue +# 1718| getStmt(2): [DeclStmt] declaration +# 1718| getDeclarationEntry(0): [VariableDeclarationEntry] definition of l_outer1 +# 1718| Type = [Closure,LocalClass] decltype([...](...){...}) +# 1718| getVariable().getInitializer(): [Initializer] initializer for l_outer1 +# 1718| getExpr(): [LambdaExpression] [...](...){...} +# 1718| Type = [Closure,LocalClass] decltype([...](...){...}) +# 1718| ValueCategory = prvalue +# 1718| getInitializer(): [ClassAggregateLiteral] {...} +# 1718| Type = [Closure,LocalClass] decltype([...](...){...}) +# 1718| ValueCategory = prvalue +# 1718| getAFieldExpr(p1): [VariableAccess] p1 +# 1718| Type = [Class] TrivialLambdaClass +# 1718| ValueCategory = prvalue(load) +# 1718| getAFieldExpr(p2): [VariableAccess] p2 +# 1718| Type = [LValueReferenceType] TrivialLambdaClass & +# 1718| ValueCategory = prvalue(load) +# 1718| getAFieldExpr(p3): [VariableAccess] p3 +# 1718| Type = [RValueReferenceType] TrivialLambdaClass && +# 1718| ValueCategory = prvalue(load) +# 1718| getAFieldExpr(l1): [VariableAccess] l1 +# 1718| Type = [SpecifiedType] const TrivialLambdaClass +# 1718| ValueCategory = prvalue(load) +# 1718| getAFieldExpr(l2): [VariableAccess] l2 +# 1718| Type = [LValueReferenceType] const TrivialLambdaClass & +# 1718| ValueCategory = prvalue(load) #-----| getAFieldExpr(p2).getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) #-----| Type = [Class] TrivialLambdaClass #-----| ValueCategory = prvalue(load) @@ -13552,723 +13558,723 @@ ir.cpp: #-----| getAFieldExpr(l2).getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) #-----| Type = [SpecifiedType] const TrivialLambdaClass #-----| ValueCategory = prvalue(load) -# 1719| getStmt(3): [ReturnStmt] return ... -# 1716| [CopyAssignmentOperator] (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1716, col. 21)& (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1716, col. 21)::operator=((void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1716, col. 21) const&) -# 1716| : +# 1721| getStmt(3): [ReturnStmt] return ... +# 1718| [CopyAssignmentOperator] (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21)& (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21)::operator=((void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21) const&) +# 1718| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const lambda [] type at line 1716, col. 21 & -# 1716| [CopyConstructor] void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1716, col. 21)::(unnamed constructor)((void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1716, col. 21) const&) -# 1716| : +#-----| Type = [LValueReferenceType] const lambda [] type at line 1718, col. 21 & +# 1718| [CopyConstructor] void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21)::(unnamed constructor)((void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21) const&) +# 1718| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const lambda [] type at line 1716, col. 21 & -# 1716| [MoveConstructor] void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1716, col. 21)::(unnamed constructor)((void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1716, col. 21)&&) -# 1716| : +#-----| Type = [LValueReferenceType] const lambda [] type at line 1718, col. 21 & +# 1718| [MoveConstructor] void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21)::(unnamed constructor)((void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21)&&) +# 1718| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [RValueReferenceType] lambda [] type at line 1716, col. 21 && -# 1716| [Constructor] void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1716, col. 21)::(unnamed constructor)() -# 1716| : -# 1716| [ConstMemberFunction] void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1716, col. 21)::operator()() const -# 1716| : -# 1716| getEntryPoint(): [BlockStmt] { ... } -# 1717| getStmt(0): [DeclStmt] declaration -# 1717| getDeclarationEntry(0): [VariableDeclarationEntry] definition of l_inner1 -# 1717| Type = [Closure,LocalClass] decltype([...](...){...}) -# 1717| getVariable().getInitializer(): [Initializer] initializer for l_inner1 -# 1717| getExpr(): [LambdaExpression] [...](...){...} -# 1717| Type = [Closure,LocalClass] decltype([...](...){...}) -# 1717| ValueCategory = prvalue -# 1717| getInitializer(): [ClassAggregateLiteral] {...} -# 1717| Type = [Closure,LocalClass] decltype([...](...){...}) -# 1717| ValueCategory = prvalue -# 1717| getAFieldExpr(p1): [PointerFieldAccess] p1 -# 1717| Type = [Class] TrivialLambdaClass -# 1717| ValueCategory = prvalue(load) -# 1717| getQualifier(): [ThisExpr] this -# 1717| Type = [PointerType] lambda [] type at line 1717, col. 25 * -# 1717| ValueCategory = prvalue(load) -# 1718| getStmt(1): [ReturnStmt] return ... -# 1717| [CopyAssignmentOperator] (void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1716, col. 21)::operator()() const)::(lambda [] type at line 1717, col. 25)& (void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1716, col. 21)::operator()() const)::(lambda [] type at line 1717, col. 25)::operator=((void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1716, col. 21)::operator()() const)::(lambda [] type at line 1717, col. 25) const&) -# 1717| : +#-----| Type = [RValueReferenceType] lambda [] type at line 1718, col. 21 && +# 1718| [Constructor] void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21)::(unnamed constructor)() +# 1718| : +# 1718| [ConstMemberFunction] void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21)::operator()() const +# 1718| : +# 1718| getEntryPoint(): [BlockStmt] { ... } +# 1719| getStmt(0): [DeclStmt] declaration +# 1719| getDeclarationEntry(0): [VariableDeclarationEntry] definition of l_inner1 +# 1719| Type = [Closure,LocalClass] decltype([...](...){...}) +# 1719| getVariable().getInitializer(): [Initializer] initializer for l_inner1 +# 1719| getExpr(): [LambdaExpression] [...](...){...} +# 1719| Type = [Closure,LocalClass] decltype([...](...){...}) +# 1719| ValueCategory = prvalue +# 1719| getInitializer(): [ClassAggregateLiteral] {...} +# 1719| Type = [Closure,LocalClass] decltype([...](...){...}) +# 1719| ValueCategory = prvalue +# 1719| getAFieldExpr(p1): [PointerFieldAccess] p1 +# 1719| Type = [Class] TrivialLambdaClass +# 1719| ValueCategory = prvalue(load) +# 1719| getQualifier(): [ThisExpr] this +# 1719| Type = [PointerType] lambda [] type at line 1719, col. 25 * +# 1719| ValueCategory = prvalue(load) +# 1720| getStmt(1): [ReturnStmt] return ... +# 1719| [CopyAssignmentOperator] (void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21)::operator()() const)::(lambda [] type at line 1719, col. 25)& (void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21)::operator()() const)::(lambda [] type at line 1719, col. 25)::operator=((void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21)::operator()() const)::(lambda [] type at line 1719, col. 25) const&) +# 1719| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const lambda [] type at line 1717, col. 25 & -# 1717| [CopyConstructor] void (void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1716, col. 21)::operator()() const)::(lambda [] type at line 1717, col. 25)::(unnamed constructor)((void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1716, col. 21)::operator()() const)::(lambda [] type at line 1717, col. 25) const&) -# 1717| : +#-----| Type = [LValueReferenceType] const lambda [] type at line 1719, col. 25 & +# 1719| [CopyConstructor] void (void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21)::operator()() const)::(lambda [] type at line 1719, col. 25)::(unnamed constructor)((void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21)::operator()() const)::(lambda [] type at line 1719, col. 25) const&) +# 1719| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const lambda [] type at line 1717, col. 25 & -# 1717| [MoveConstructor] void (void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1716, col. 21)::operator()() const)::(lambda [] type at line 1717, col. 25)::(unnamed constructor)((void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1716, col. 21)::operator()() const)::(lambda [] type at line 1717, col. 25)&&) -# 1717| : +#-----| Type = [LValueReferenceType] const lambda [] type at line 1719, col. 25 & +# 1719| [MoveConstructor] void (void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21)::operator()() const)::(lambda [] type at line 1719, col. 25)::(unnamed constructor)((void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21)::operator()() const)::(lambda [] type at line 1719, col. 25)&&) +# 1719| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [RValueReferenceType] lambda [] type at line 1717, col. 25 && -# 1717| [Constructor] void (void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1716, col. 21)::operator()() const)::(lambda [] type at line 1717, col. 25)::(unnamed constructor)() -# 1717| : -# 1717| [ConstMemberFunction] void (void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1716, col. 21)::operator()() const)::(lambda [] type at line 1717, col. 25)::operator()() const -# 1717| : -# 1717| getEntryPoint(): [BlockStmt] { ... } -# 1717| getStmt(0): [ReturnStmt] return ... -# 1721| [CopyAssignmentOperator] CopyConstructorWithImplicitArgumentClass& CopyConstructorWithImplicitArgumentClass::operator=(CopyConstructorWithImplicitArgumentClass const&) -# 1721| : +#-----| Type = [RValueReferenceType] lambda [] type at line 1719, col. 25 && +# 1719| [Constructor] void (void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21)::operator()() const)::(lambda [] type at line 1719, col. 25)::(unnamed constructor)() +# 1719| : +# 1719| [ConstMemberFunction] void (void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21)::operator()() const)::(lambda [] type at line 1719, col. 25)::operator()() const +# 1719| : +# 1719| getEntryPoint(): [BlockStmt] { ... } +# 1719| getStmt(0): [ReturnStmt] return ... +# 1723| [CopyAssignmentOperator] CopyConstructorWithImplicitArgumentClass& CopyConstructorWithImplicitArgumentClass::operator=(CopyConstructorWithImplicitArgumentClass const&) +# 1723| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const CopyConstructorWithImplicitArgumentClass & -# 1724| [Constructor] void CopyConstructorWithImplicitArgumentClass::CopyConstructorWithImplicitArgumentClass() -# 1724| : -# 1724| : -# 1724| getEntryPoint(): [BlockStmt] { ... } -# 1724| getStmt(0): [ReturnStmt] return ... -# 1725| [CopyConstructor] void CopyConstructorWithImplicitArgumentClass::CopyConstructorWithImplicitArgumentClass(CopyConstructorWithImplicitArgumentClass const&) -# 1725| : -# 1725| getParameter(0): [Parameter] c -# 1725| Type = [LValueReferenceType] const CopyConstructorWithImplicitArgumentClass & -# 1725| : -# 1725| getEntryPoint(): [BlockStmt] { ... } -# 1726| getStmt(0): [ExprStmt] ExprStmt -# 1726| getExpr(): [AssignExpr] ... = ... -# 1726| Type = [IntType] int -# 1726| ValueCategory = lvalue -# 1726| getLValue(): [ImplicitThisFieldAccess,PointerFieldAccess] x -# 1726| Type = [IntType] int -# 1726| ValueCategory = lvalue -# 1726| getQualifier(): [ThisExpr] this -# 1726| Type = [PointerType] CopyConstructorWithImplicitArgumentClass * -# 1726| ValueCategory = prvalue(load) -# 1726| getRValue(): [ReferenceFieldAccess] x -# 1726| Type = [IntType] int -# 1726| ValueCategory = prvalue(load) -# 1726| getQualifier(): [VariableAccess] c -# 1726| Type = [LValueReferenceType] const CopyConstructorWithImplicitArgumentClass & -# 1726| ValueCategory = prvalue(load) -# 1726| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1726| Type = [SpecifiedType] const CopyConstructorWithImplicitArgumentClass -# 1726| ValueCategory = lvalue -# 1727| getStmt(1): [ReturnStmt] return ... -# 1730| [CopyAssignmentOperator] CopyConstructorWithBitwiseCopyClass& CopyConstructorWithBitwiseCopyClass::operator=(CopyConstructorWithBitwiseCopyClass const&) -# 1730| : +# 1726| [Constructor] void CopyConstructorWithImplicitArgumentClass::CopyConstructorWithImplicitArgumentClass() +# 1726| : +# 1726| : +# 1726| getEntryPoint(): [BlockStmt] { ... } +# 1726| getStmt(0): [ReturnStmt] return ... +# 1727| [CopyConstructor] void CopyConstructorWithImplicitArgumentClass::CopyConstructorWithImplicitArgumentClass(CopyConstructorWithImplicitArgumentClass const&) +# 1727| : +# 1727| getParameter(0): [Parameter] c +# 1727| Type = [LValueReferenceType] const CopyConstructorWithImplicitArgumentClass & +# 1727| : +# 1727| getEntryPoint(): [BlockStmt] { ... } +# 1728| getStmt(0): [ExprStmt] ExprStmt +# 1728| getExpr(): [AssignExpr] ... = ... +# 1728| Type = [IntType] int +# 1728| ValueCategory = lvalue +# 1728| getLValue(): [ImplicitThisFieldAccess,PointerFieldAccess] x +# 1728| Type = [IntType] int +# 1728| ValueCategory = lvalue +# 1728| getQualifier(): [ThisExpr] this +# 1728| Type = [PointerType] CopyConstructorWithImplicitArgumentClass * +# 1728| ValueCategory = prvalue(load) +# 1728| getRValue(): [ReferenceFieldAccess] x +# 1728| Type = [IntType] int +# 1728| ValueCategory = prvalue(load) +# 1728| getQualifier(): [VariableAccess] c +# 1728| Type = [LValueReferenceType] const CopyConstructorWithImplicitArgumentClass & +# 1728| ValueCategory = prvalue(load) +# 1728| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1728| Type = [SpecifiedType] const CopyConstructorWithImplicitArgumentClass +# 1728| ValueCategory = lvalue +# 1729| getStmt(1): [ReturnStmt] return ... +# 1732| [CopyAssignmentOperator] CopyConstructorWithBitwiseCopyClass& CopyConstructorWithBitwiseCopyClass::operator=(CopyConstructorWithBitwiseCopyClass const&) +# 1732| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const CopyConstructorWithBitwiseCopyClass & -# 1730| [MoveAssignmentOperator] CopyConstructorWithBitwiseCopyClass& CopyConstructorWithBitwiseCopyClass::operator=(CopyConstructorWithBitwiseCopyClass&&) -# 1730| : +# 1732| [MoveAssignmentOperator] CopyConstructorWithBitwiseCopyClass& CopyConstructorWithBitwiseCopyClass::operator=(CopyConstructorWithBitwiseCopyClass&&) +# 1732| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] CopyConstructorWithBitwiseCopyClass && -# 1730| [CopyConstructor] void CopyConstructorWithBitwiseCopyClass::CopyConstructorWithBitwiseCopyClass(CopyConstructorWithBitwiseCopyClass const&) -# 1730| : +# 1732| [CopyConstructor] void CopyConstructorWithBitwiseCopyClass::CopyConstructorWithBitwiseCopyClass(CopyConstructorWithBitwiseCopyClass const&) +# 1732| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const CopyConstructorWithBitwiseCopyClass & -# 1730| [MoveConstructor] void CopyConstructorWithBitwiseCopyClass::CopyConstructorWithBitwiseCopyClass(CopyConstructorWithBitwiseCopyClass&&) -# 1730| : +# 1732| [MoveConstructor] void CopyConstructorWithBitwiseCopyClass::CopyConstructorWithBitwiseCopyClass(CopyConstructorWithBitwiseCopyClass&&) +# 1732| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] CopyConstructorWithBitwiseCopyClass && -# 1733| [Constructor] void CopyConstructorWithBitwiseCopyClass::CopyConstructorWithBitwiseCopyClass() -# 1733| : -# 1733| : -# 1733| getEntryPoint(): [BlockStmt] { ... } -# 1733| getStmt(0): [ReturnStmt] return ... -# 1736| [CopyAssignmentOperator] CopyConstructorTestNonVirtualClass& CopyConstructorTestNonVirtualClass::operator=(CopyConstructorTestNonVirtualClass const&) -# 1736| : +# 1735| [Constructor] void CopyConstructorWithBitwiseCopyClass::CopyConstructorWithBitwiseCopyClass() +# 1735| : +# 1735| : +# 1735| getEntryPoint(): [BlockStmt] { ... } +# 1735| getStmt(0): [ReturnStmt] return ... +# 1738| [CopyAssignmentOperator] CopyConstructorTestNonVirtualClass& CopyConstructorTestNonVirtualClass::operator=(CopyConstructorTestNonVirtualClass const&) +# 1738| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const CopyConstructorTestNonVirtualClass & -# 1736| [MoveAssignmentOperator] CopyConstructorTestNonVirtualClass& CopyConstructorTestNonVirtualClass::operator=(CopyConstructorTestNonVirtualClass&&) -# 1736| : +# 1738| [MoveAssignmentOperator] CopyConstructorTestNonVirtualClass& CopyConstructorTestNonVirtualClass::operator=(CopyConstructorTestNonVirtualClass&&) +# 1738| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] CopyConstructorTestNonVirtualClass && -# 1736| [CopyConstructor] void CopyConstructorTestNonVirtualClass::CopyConstructorTestNonVirtualClass(CopyConstructorTestNonVirtualClass const&) -# 1736| : +# 1738| [CopyConstructor] void CopyConstructorTestNonVirtualClass::CopyConstructorTestNonVirtualClass(CopyConstructorTestNonVirtualClass const&) +# 1738| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const CopyConstructorTestNonVirtualClass & -# 1736| : -# 1736| getInitializer(0): [ConstructorDirectInit] call to CopyConstructorWithImplicitArgumentClass -# 1736| Type = [VoidType] void -# 1736| ValueCategory = prvalue -# 1736| getArgument(0): [VariableAccess] (unnamed parameter 0) -# 1736| Type = [LValueReferenceType] const CopyConstructorTestNonVirtualClass & -# 1736| ValueCategory = prvalue(load) -# 1736| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 1736| Type = [LValueReferenceType] const CopyConstructorWithImplicitArgumentClass & -# 1736| ValueCategory = prvalue -# 1736| getExpr(): [CStyleCast] (const CopyConstructorWithImplicitArgumentClass)... -# 1736| Conversion = [BaseClassConversion] base class conversion -# 1736| Type = [SpecifiedType] const CopyConstructorWithImplicitArgumentClass -# 1736| ValueCategory = lvalue -# 1736| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1736| Type = [SpecifiedType] const CopyConstructorTestNonVirtualClass -# 1736| ValueCategory = lvalue -# 1736| getInitializer(1): (no string representation) -# 1736| Type = [VirtualBaseClass] CopyConstructorWithBitwiseCopyClass -# 1736| ValueCategory = prvalue -# 1736| getEntryPoint(): [BlockStmt] { ... } -# 1736| getStmt(0): [ReturnStmt] return ... -# 1736| [MoveConstructor] void CopyConstructorTestNonVirtualClass::CopyConstructorTestNonVirtualClass(CopyConstructorTestNonVirtualClass&&) -# 1736| : +# 1738| : +# 1738| getInitializer(0): [ConstructorDirectInit] call to CopyConstructorWithImplicitArgumentClass +# 1738| Type = [VoidType] void +# 1738| ValueCategory = prvalue +# 1738| getArgument(0): [VariableAccess] (unnamed parameter 0) +# 1738| Type = [LValueReferenceType] const CopyConstructorTestNonVirtualClass & +# 1738| ValueCategory = prvalue(load) +# 1738| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 1738| Type = [LValueReferenceType] const CopyConstructorWithImplicitArgumentClass & +# 1738| ValueCategory = prvalue +# 1738| getExpr(): [CStyleCast] (const CopyConstructorWithImplicitArgumentClass)... +# 1738| Conversion = [BaseClassConversion] base class conversion +# 1738| Type = [SpecifiedType] const CopyConstructorWithImplicitArgumentClass +# 1738| ValueCategory = lvalue +# 1738| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1738| Type = [SpecifiedType] const CopyConstructorTestNonVirtualClass +# 1738| ValueCategory = lvalue +# 1738| getInitializer(1): (no string representation) +# 1738| Type = [VirtualBaseClass] CopyConstructorWithBitwiseCopyClass +# 1738| ValueCategory = prvalue +# 1738| getEntryPoint(): [BlockStmt] { ... } +# 1738| getStmt(0): [ReturnStmt] return ... +# 1738| [MoveConstructor] void CopyConstructorTestNonVirtualClass::CopyConstructorTestNonVirtualClass(CopyConstructorTestNonVirtualClass&&) +# 1738| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] CopyConstructorTestNonVirtualClass && -# 1740| [Constructor] void CopyConstructorTestNonVirtualClass::CopyConstructorTestNonVirtualClass() -# 1740| : -# 1740| : -# 1740| getInitializer(0): [ConstructorDirectInit] call to CopyConstructorWithImplicitArgumentClass -# 1740| Type = [VoidType] void -# 1740| ValueCategory = prvalue -# 1740| getInitializer(1): [ConstructorDirectInit] call to CopyConstructorWithBitwiseCopyClass -# 1740| Type = [VoidType] void -# 1740| ValueCategory = prvalue -# 1740| getEntryPoint(): [BlockStmt] { ... } -# 1740| getStmt(0): [ReturnStmt] return ... -# 1743| [CopyAssignmentOperator] CopyConstructorTestVirtualClass& CopyConstructorTestVirtualClass::operator=(CopyConstructorTestVirtualClass const&) -# 1743| : +# 1742| [Constructor] void CopyConstructorTestNonVirtualClass::CopyConstructorTestNonVirtualClass() +# 1742| : +# 1742| : +# 1742| getInitializer(0): [ConstructorDirectInit] call to CopyConstructorWithImplicitArgumentClass +# 1742| Type = [VoidType] void +# 1742| ValueCategory = prvalue +# 1742| getInitializer(1): [ConstructorDirectInit] call to CopyConstructorWithBitwiseCopyClass +# 1742| Type = [VoidType] void +# 1742| ValueCategory = prvalue +# 1742| getEntryPoint(): [BlockStmt] { ... } +# 1742| getStmt(0): [ReturnStmt] return ... +# 1745| [CopyAssignmentOperator] CopyConstructorTestVirtualClass& CopyConstructorTestVirtualClass::operator=(CopyConstructorTestVirtualClass const&) +# 1745| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const CopyConstructorTestVirtualClass & -# 1743| [MoveAssignmentOperator] CopyConstructorTestVirtualClass& CopyConstructorTestVirtualClass::operator=(CopyConstructorTestVirtualClass&&) -# 1743| : +# 1745| [MoveAssignmentOperator] CopyConstructorTestVirtualClass& CopyConstructorTestVirtualClass::operator=(CopyConstructorTestVirtualClass&&) +# 1745| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] CopyConstructorTestVirtualClass && -# 1743| [CopyConstructor] void CopyConstructorTestVirtualClass::CopyConstructorTestVirtualClass(CopyConstructorTestVirtualClass const&) -# 1743| : +# 1745| [CopyConstructor] void CopyConstructorTestVirtualClass::CopyConstructorTestVirtualClass(CopyConstructorTestVirtualClass const&) +# 1745| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const CopyConstructorTestVirtualClass & -# 1743| : -# 1743| getInitializer(0): [ConstructorVirtualInit] call to CopyConstructorWithImplicitArgumentClass -# 1743| Type = [VoidType] void -# 1743| ValueCategory = prvalue -# 1743| getArgument(0): [VariableAccess] (unnamed parameter 0) -# 1743| Type = [LValueReferenceType] const CopyConstructorTestVirtualClass & -# 1743| ValueCategory = prvalue(load) -# 1743| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 1743| Type = [LValueReferenceType] const CopyConstructorWithImplicitArgumentClass & -# 1743| ValueCategory = prvalue -# 1743| getExpr(): [CStyleCast] (const CopyConstructorWithImplicitArgumentClass)... -# 1743| Conversion = [BaseClassConversion] base class conversion -# 1743| Type = [SpecifiedType] const CopyConstructorWithImplicitArgumentClass -# 1743| ValueCategory = lvalue -# 1743| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1743| Type = [SpecifiedType] const CopyConstructorTestVirtualClass -# 1743| ValueCategory = lvalue -# 1743| getInitializer(1): (no string representation) -# 1743| Type = [VirtualBaseClass] CopyConstructorWithBitwiseCopyClass -# 1743| ValueCategory = prvalue -# 1743| getEntryPoint(): [BlockStmt] { ... } -# 1743| getStmt(0): [ReturnStmt] return ... -# 1743| [MoveConstructor] void CopyConstructorTestVirtualClass::CopyConstructorTestVirtualClass(CopyConstructorTestVirtualClass&&) -# 1743| : +# 1745| : +# 1745| getInitializer(0): [ConstructorVirtualInit] call to CopyConstructorWithImplicitArgumentClass +# 1745| Type = [VoidType] void +# 1745| ValueCategory = prvalue +# 1745| getArgument(0): [VariableAccess] (unnamed parameter 0) +# 1745| Type = [LValueReferenceType] const CopyConstructorTestVirtualClass & +# 1745| ValueCategory = prvalue(load) +# 1745| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 1745| Type = [LValueReferenceType] const CopyConstructorWithImplicitArgumentClass & +# 1745| ValueCategory = prvalue +# 1745| getExpr(): [CStyleCast] (const CopyConstructorWithImplicitArgumentClass)... +# 1745| Conversion = [BaseClassConversion] base class conversion +# 1745| Type = [SpecifiedType] const CopyConstructorWithImplicitArgumentClass +# 1745| ValueCategory = lvalue +# 1745| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1745| Type = [SpecifiedType] const CopyConstructorTestVirtualClass +# 1745| ValueCategory = lvalue +# 1745| getInitializer(1): (no string representation) +# 1745| Type = [VirtualBaseClass] CopyConstructorWithBitwiseCopyClass +# 1745| ValueCategory = prvalue +# 1745| getEntryPoint(): [BlockStmt] { ... } +# 1745| getStmt(0): [ReturnStmt] return ... +# 1745| [MoveConstructor] void CopyConstructorTestVirtualClass::CopyConstructorTestVirtualClass(CopyConstructorTestVirtualClass&&) +# 1745| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] CopyConstructorTestVirtualClass && -# 1747| [Constructor] void CopyConstructorTestVirtualClass::CopyConstructorTestVirtualClass() -# 1747| : -# 1747| : -# 1747| getInitializer(0): [ConstructorVirtualInit] call to CopyConstructorWithImplicitArgumentClass -# 1747| Type = [VoidType] void -# 1747| ValueCategory = prvalue -# 1747| getInitializer(1): [ConstructorVirtualInit] call to CopyConstructorWithBitwiseCopyClass -# 1747| Type = [VoidType] void -# 1747| ValueCategory = prvalue -# 1747| getEntryPoint(): [BlockStmt] { ... } -# 1747| getStmt(0): [ReturnStmt] return ... -# 1750| [TopLevelFunction] int implicit_copy_constructor_test(CopyConstructorTestNonVirtualClass const&, CopyConstructorTestVirtualClass const&) -# 1750| : -# 1751| getParameter(0): [Parameter] x -# 1751| Type = [LValueReferenceType] const CopyConstructorTestNonVirtualClass & -# 1752| getParameter(1): [Parameter] y -# 1752| Type = [LValueReferenceType] const CopyConstructorTestVirtualClass & -# 1752| getEntryPoint(): [BlockStmt] { ... } -# 1753| getStmt(0): [DeclStmt] declaration -# 1753| getDeclarationEntry(0): [VariableDeclarationEntry] definition of cx -# 1753| Type = [Class] CopyConstructorTestNonVirtualClass -# 1753| getVariable().getInitializer(): [Initializer] initializer for cx -# 1753| getExpr(): [ConstructorCall] call to CopyConstructorTestNonVirtualClass -# 1753| Type = [VoidType] void -# 1753| ValueCategory = prvalue -# 1753| getArgument(0): [VariableAccess] x -# 1753| Type = [LValueReferenceType] const CopyConstructorTestNonVirtualClass & -# 1753| ValueCategory = prvalue(load) -# 1753| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 1753| Type = [LValueReferenceType] const CopyConstructorTestNonVirtualClass & -# 1753| ValueCategory = prvalue -# 1753| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1753| Type = [SpecifiedType] const CopyConstructorTestNonVirtualClass -# 1753| ValueCategory = lvalue -# 1754| getStmt(1): [DeclStmt] declaration -# 1754| getDeclarationEntry(0): [VariableDeclarationEntry] definition of cy -# 1754| Type = [Class] CopyConstructorTestVirtualClass -# 1754| getVariable().getInitializer(): [Initializer] initializer for cy -# 1754| getExpr(): [ConstructorCall] call to CopyConstructorTestVirtualClass -# 1754| Type = [VoidType] void -# 1754| ValueCategory = prvalue -# 1754| getArgument(0): [VariableAccess] y -# 1754| Type = [LValueReferenceType] const CopyConstructorTestVirtualClass & -# 1754| ValueCategory = prvalue(load) -# 1754| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 1754| Type = [LValueReferenceType] const CopyConstructorTestVirtualClass & -# 1754| ValueCategory = prvalue -# 1754| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1754| Type = [SpecifiedType] const CopyConstructorTestVirtualClass -# 1754| ValueCategory = lvalue -# 1755| getStmt(2): [ReturnStmt] return ... -# 1757| [TopLevelFunction] void if_initialization(int) -# 1757| : -# 1757| getParameter(0): [Parameter] x -# 1757| Type = [IntType] int -# 1757| getEntryPoint(): [BlockStmt] { ... } -# 1758| getStmt(0): [IfStmt] if (...) ... -# 1758| getInitialization(): [DeclStmt] declaration -# 1758| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y -# 1758| Type = [IntType] int -# 1758| getVariable().getInitializer(): [Initializer] initializer for y -# 1758| getExpr(): [VariableAccess] x -# 1758| Type = [IntType] int -# 1758| ValueCategory = prvalue(load) -# 1758| getCondition(): [AddExpr] ... + ... -# 1758| Type = [IntType] int -# 1758| ValueCategory = prvalue -# 1758| getLeftOperand(): [VariableAccess] x -# 1758| Type = [IntType] int -# 1758| ValueCategory = prvalue(load) -# 1758| getRightOperand(): [Literal] 1 -# 1758| Type = [IntType] int -# 1758| Value = [Literal] 1 -# 1758| ValueCategory = prvalue -# 1758| getThen(): [BlockStmt] { ... } -# 1759| getStmt(0): [ExprStmt] ExprStmt -# 1759| getExpr(): [AssignExpr] ... = ... -# 1759| Type = [IntType] int -# 1759| ValueCategory = lvalue -# 1759| getLValue(): [VariableAccess] x -# 1759| Type = [IntType] int -# 1759| ValueCategory = lvalue -# 1759| getRValue(): [AddExpr] ... + ... -# 1759| Type = [IntType] int -# 1759| ValueCategory = prvalue -# 1759| getLeftOperand(): [VariableAccess] x -# 1759| Type = [IntType] int -# 1759| ValueCategory = prvalue(load) -# 1759| getRightOperand(): [VariableAccess] y -# 1759| Type = [IntType] int -# 1759| ValueCategory = prvalue(load) -# 1758| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1758| Conversion = [BoolConversion] conversion to bool -# 1758| Type = [BoolType] bool -# 1758| ValueCategory = prvalue -# 1762| getStmt(1): [DeclStmt] declaration -# 1762| getDeclarationEntry(0): [VariableDeclarationEntry] definition of w -# 1762| Type = [IntType] int -# 1763| getStmt(2): [IfStmt] if (...) ... -# 1763| getInitialization(): [ExprStmt] ExprStmt -# 1763| getExpr(): [AssignExpr] ... = ... -# 1763| Type = [IntType] int -# 1763| ValueCategory = lvalue -# 1763| getLValue(): [VariableAccess] w -# 1763| Type = [IntType] int -# 1763| ValueCategory = lvalue -# 1763| getRValue(): [VariableAccess] x -# 1763| Type = [IntType] int -# 1763| ValueCategory = prvalue(load) -# 1763| getCondition(): [AddExpr] ... + ... -# 1763| Type = [IntType] int -# 1763| ValueCategory = prvalue -# 1763| getLeftOperand(): [VariableAccess] x -# 1763| Type = [IntType] int -# 1763| ValueCategory = prvalue(load) -# 1763| getRightOperand(): [Literal] 1 -# 1763| Type = [IntType] int -# 1763| Value = [Literal] 1 -# 1763| ValueCategory = prvalue -# 1763| getThen(): [BlockStmt] { ... } -# 1764| getStmt(0): [ExprStmt] ExprStmt -# 1764| getExpr(): [AssignExpr] ... = ... -# 1764| Type = [IntType] int -# 1764| ValueCategory = lvalue -# 1764| getLValue(): [VariableAccess] x -# 1764| Type = [IntType] int -# 1764| ValueCategory = lvalue -# 1764| getRValue(): [AddExpr] ... + ... -# 1764| Type = [IntType] int -# 1764| ValueCategory = prvalue -# 1764| getLeftOperand(): [VariableAccess] x -# 1764| Type = [IntType] int -# 1764| ValueCategory = prvalue(load) -# 1764| getRightOperand(): [VariableAccess] w -# 1764| Type = [IntType] int -# 1764| ValueCategory = prvalue(load) -# 1763| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1763| Conversion = [BoolConversion] conversion to bool -# 1763| Type = [BoolType] bool -# 1763| ValueCategory = prvalue -# 1767| getStmt(3): [IfStmt] if (...) ... -# 1767| getInitialization(): [ExprStmt] ExprStmt -# 1767| getExpr(): [AssignExpr] ... = ... -# 1767| Type = [IntType] int -# 1767| ValueCategory = lvalue -# 1767| getLValue(): [VariableAccess] w -# 1767| Type = [IntType] int -# 1767| ValueCategory = lvalue -# 1767| getRValue(): [VariableAccess] x -# 1767| Type = [IntType] int -# 1767| ValueCategory = prvalue(load) -# 1767| getCondition(): [ConditionDeclExpr] (condition decl) -# 1767| Type = [BoolType] bool -# 1767| ValueCategory = prvalue -# 1767| getVariableAccess(): [VariableAccess] w2 -# 1767| Type = [IntType] int -# 1767| ValueCategory = prvalue(load) -# 1767| getVariableAccess().getFullyConverted(): [CStyleCast] (bool)... -# 1767| Conversion = [BoolConversion] conversion to bool -# 1767| Type = [BoolType] bool -# 1767| ValueCategory = prvalue -# 1767| getThen(): [BlockStmt] { ... } -# 1768| getStmt(0): [ExprStmt] ExprStmt -# 1768| getExpr(): [AssignExpr] ... = ... -# 1768| Type = [IntType] int -# 1768| ValueCategory = lvalue -# 1768| getLValue(): [VariableAccess] x -# 1768| Type = [IntType] int -# 1768| ValueCategory = lvalue -# 1768| getRValue(): [AddExpr] ... + ... -# 1768| Type = [IntType] int -# 1768| ValueCategory = prvalue -# 1768| getLeftOperand(): [VariableAccess] x -# 1768| Type = [IntType] int -# 1768| ValueCategory = prvalue(load) -# 1768| getRightOperand(): [VariableAccess] w -# 1768| Type = [IntType] int -# 1768| ValueCategory = prvalue(load) -# 1771| getStmt(4): [IfStmt] if (...) ... -# 1771| getInitialization(): [DeclStmt] declaration -# 1771| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v -# 1771| Type = [IntType] int -# 1771| getVariable().getInitializer(): [Initializer] initializer for v -# 1771| getExpr(): [VariableAccess] x -# 1771| Type = [IntType] int -# 1771| ValueCategory = prvalue(load) -# 1771| getCondition(): [ConditionDeclExpr] (condition decl) -# 1771| Type = [BoolType] bool -# 1771| ValueCategory = prvalue -# 1771| getVariableAccess(): [VariableAccess] v2 -# 1771| Type = [IntType] int -# 1771| ValueCategory = prvalue(load) -# 1771| getVariableAccess().getFullyConverted(): [CStyleCast] (bool)... -# 1771| Conversion = [BoolConversion] conversion to bool -# 1771| Type = [BoolType] bool -# 1771| ValueCategory = prvalue -# 1771| getThen(): [BlockStmt] { ... } -# 1772| getStmt(0): [ExprStmt] ExprStmt -# 1772| getExpr(): [AssignExpr] ... = ... -# 1772| Type = [IntType] int -# 1772| ValueCategory = lvalue -# 1772| getLValue(): [VariableAccess] x -# 1772| Type = [IntType] int -# 1772| ValueCategory = lvalue -# 1772| getRValue(): [AddExpr] ... + ... -# 1772| Type = [IntType] int -# 1772| ValueCategory = prvalue -# 1772| getLeftOperand(): [VariableAccess] x -# 1772| Type = [IntType] int -# 1772| ValueCategory = prvalue(load) -# 1772| getRightOperand(): [VariableAccess] v -# 1772| Type = [IntType] int -# 1772| ValueCategory = prvalue(load) -# 1775| getStmt(5): [DeclStmt] declaration -# 1775| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z -# 1775| Type = [IntType] int -# 1775| getVariable().getInitializer(): [Initializer] initializer for z -# 1775| getExpr(): [VariableAccess] x -# 1775| Type = [IntType] int -# 1775| ValueCategory = prvalue(load) -# 1776| getStmt(6): [IfStmt] if (...) ... -# 1776| getCondition(): [VariableAccess] z -# 1776| Type = [IntType] int -# 1776| ValueCategory = prvalue(load) -# 1776| getThen(): [BlockStmt] { ... } -# 1777| getStmt(0): [ExprStmt] ExprStmt -# 1777| getExpr(): [AssignExpr] ... = ... +# 1749| [Constructor] void CopyConstructorTestVirtualClass::CopyConstructorTestVirtualClass() +# 1749| : +# 1749| : +# 1749| getInitializer(0): [ConstructorVirtualInit] call to CopyConstructorWithImplicitArgumentClass +# 1749| Type = [VoidType] void +# 1749| ValueCategory = prvalue +# 1749| getInitializer(1): [ConstructorVirtualInit] call to CopyConstructorWithBitwiseCopyClass +# 1749| Type = [VoidType] void +# 1749| ValueCategory = prvalue +# 1749| getEntryPoint(): [BlockStmt] { ... } +# 1749| getStmt(0): [ReturnStmt] return ... +# 1752| [TopLevelFunction] int implicit_copy_constructor_test(CopyConstructorTestNonVirtualClass const&, CopyConstructorTestVirtualClass const&) +# 1752| : +# 1753| getParameter(0): [Parameter] x +# 1753| Type = [LValueReferenceType] const CopyConstructorTestNonVirtualClass & +# 1754| getParameter(1): [Parameter] y +# 1754| Type = [LValueReferenceType] const CopyConstructorTestVirtualClass & +# 1754| getEntryPoint(): [BlockStmt] { ... } +# 1755| getStmt(0): [DeclStmt] declaration +# 1755| getDeclarationEntry(0): [VariableDeclarationEntry] definition of cx +# 1755| Type = [Class] CopyConstructorTestNonVirtualClass +# 1755| getVariable().getInitializer(): [Initializer] initializer for cx +# 1755| getExpr(): [ConstructorCall] call to CopyConstructorTestNonVirtualClass +# 1755| Type = [VoidType] void +# 1755| ValueCategory = prvalue +# 1755| getArgument(0): [VariableAccess] x +# 1755| Type = [LValueReferenceType] const CopyConstructorTestNonVirtualClass & +# 1755| ValueCategory = prvalue(load) +# 1755| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 1755| Type = [LValueReferenceType] const CopyConstructorTestNonVirtualClass & +# 1755| ValueCategory = prvalue +# 1755| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1755| Type = [SpecifiedType] const CopyConstructorTestNonVirtualClass +# 1755| ValueCategory = lvalue +# 1756| getStmt(1): [DeclStmt] declaration +# 1756| getDeclarationEntry(0): [VariableDeclarationEntry] definition of cy +# 1756| Type = [Class] CopyConstructorTestVirtualClass +# 1756| getVariable().getInitializer(): [Initializer] initializer for cy +# 1756| getExpr(): [ConstructorCall] call to CopyConstructorTestVirtualClass +# 1756| Type = [VoidType] void +# 1756| ValueCategory = prvalue +# 1756| getArgument(0): [VariableAccess] y +# 1756| Type = [LValueReferenceType] const CopyConstructorTestVirtualClass & +# 1756| ValueCategory = prvalue(load) +# 1756| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 1756| Type = [LValueReferenceType] const CopyConstructorTestVirtualClass & +# 1756| ValueCategory = prvalue +# 1756| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1756| Type = [SpecifiedType] const CopyConstructorTestVirtualClass +# 1756| ValueCategory = lvalue +# 1757| getStmt(2): [ReturnStmt] return ... +# 1759| [TopLevelFunction] void if_initialization(int) +# 1759| : +# 1759| getParameter(0): [Parameter] x +# 1759| Type = [IntType] int +# 1759| getEntryPoint(): [BlockStmt] { ... } +# 1760| getStmt(0): [IfStmt] if (...) ... +# 1760| getInitialization(): [DeclStmt] declaration +# 1760| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 1760| Type = [IntType] int +# 1760| getVariable().getInitializer(): [Initializer] initializer for y +# 1760| getExpr(): [VariableAccess] x +# 1760| Type = [IntType] int +# 1760| ValueCategory = prvalue(load) +# 1760| getCondition(): [AddExpr] ... + ... +# 1760| Type = [IntType] int +# 1760| ValueCategory = prvalue +# 1760| getLeftOperand(): [VariableAccess] x +# 1760| Type = [IntType] int +# 1760| ValueCategory = prvalue(load) +# 1760| getRightOperand(): [Literal] 1 +# 1760| Type = [IntType] int +# 1760| Value = [Literal] 1 +# 1760| ValueCategory = prvalue +# 1760| getThen(): [BlockStmt] { ... } +# 1761| getStmt(0): [ExprStmt] ExprStmt +# 1761| getExpr(): [AssignExpr] ... = ... +# 1761| Type = [IntType] int +# 1761| ValueCategory = lvalue +# 1761| getLValue(): [VariableAccess] x +# 1761| Type = [IntType] int +# 1761| ValueCategory = lvalue +# 1761| getRValue(): [AddExpr] ... + ... +# 1761| Type = [IntType] int +# 1761| ValueCategory = prvalue +# 1761| getLeftOperand(): [VariableAccess] x +# 1761| Type = [IntType] int +# 1761| ValueCategory = prvalue(load) +# 1761| getRightOperand(): [VariableAccess] y +# 1761| Type = [IntType] int +# 1761| ValueCategory = prvalue(load) +# 1760| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 1760| Conversion = [BoolConversion] conversion to bool +# 1760| Type = [BoolType] bool +# 1760| ValueCategory = prvalue +# 1764| getStmt(1): [DeclStmt] declaration +# 1764| getDeclarationEntry(0): [VariableDeclarationEntry] definition of w +# 1764| Type = [IntType] int +# 1765| getStmt(2): [IfStmt] if (...) ... +# 1765| getInitialization(): [ExprStmt] ExprStmt +# 1765| getExpr(): [AssignExpr] ... = ... +# 1765| Type = [IntType] int +# 1765| ValueCategory = lvalue +# 1765| getLValue(): [VariableAccess] w +# 1765| Type = [IntType] int +# 1765| ValueCategory = lvalue +# 1765| getRValue(): [VariableAccess] x +# 1765| Type = [IntType] int +# 1765| ValueCategory = prvalue(load) +# 1765| getCondition(): [AddExpr] ... + ... +# 1765| Type = [IntType] int +# 1765| ValueCategory = prvalue +# 1765| getLeftOperand(): [VariableAccess] x +# 1765| Type = [IntType] int +# 1765| ValueCategory = prvalue(load) +# 1765| getRightOperand(): [Literal] 1 +# 1765| Type = [IntType] int +# 1765| Value = [Literal] 1 +# 1765| ValueCategory = prvalue +# 1765| getThen(): [BlockStmt] { ... } +# 1766| getStmt(0): [ExprStmt] ExprStmt +# 1766| getExpr(): [AssignExpr] ... = ... +# 1766| Type = [IntType] int +# 1766| ValueCategory = lvalue +# 1766| getLValue(): [VariableAccess] x +# 1766| Type = [IntType] int +# 1766| ValueCategory = lvalue +# 1766| getRValue(): [AddExpr] ... + ... +# 1766| Type = [IntType] int +# 1766| ValueCategory = prvalue +# 1766| getLeftOperand(): [VariableAccess] x +# 1766| Type = [IntType] int +# 1766| ValueCategory = prvalue(load) +# 1766| getRightOperand(): [VariableAccess] w +# 1766| Type = [IntType] int +# 1766| ValueCategory = prvalue(load) +# 1765| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 1765| Conversion = [BoolConversion] conversion to bool +# 1765| Type = [BoolType] bool +# 1765| ValueCategory = prvalue +# 1769| getStmt(3): [IfStmt] if (...) ... +# 1769| getInitialization(): [ExprStmt] ExprStmt +# 1769| getExpr(): [AssignExpr] ... = ... +# 1769| Type = [IntType] int +# 1769| ValueCategory = lvalue +# 1769| getLValue(): [VariableAccess] w +# 1769| Type = [IntType] int +# 1769| ValueCategory = lvalue +# 1769| getRValue(): [VariableAccess] x +# 1769| Type = [IntType] int +# 1769| ValueCategory = prvalue(load) +# 1769| getCondition(): [ConditionDeclExpr] (condition decl) +# 1769| Type = [BoolType] bool +# 1769| ValueCategory = prvalue +# 1769| getVariableAccess(): [VariableAccess] w2 +# 1769| Type = [IntType] int +# 1769| ValueCategory = prvalue(load) +# 1769| getVariableAccess().getFullyConverted(): [CStyleCast] (bool)... +# 1769| Conversion = [BoolConversion] conversion to bool +# 1769| Type = [BoolType] bool +# 1769| ValueCategory = prvalue +# 1769| getThen(): [BlockStmt] { ... } +# 1770| getStmt(0): [ExprStmt] ExprStmt +# 1770| getExpr(): [AssignExpr] ... = ... +# 1770| Type = [IntType] int +# 1770| ValueCategory = lvalue +# 1770| getLValue(): [VariableAccess] x +# 1770| Type = [IntType] int +# 1770| ValueCategory = lvalue +# 1770| getRValue(): [AddExpr] ... + ... +# 1770| Type = [IntType] int +# 1770| ValueCategory = prvalue +# 1770| getLeftOperand(): [VariableAccess] x +# 1770| Type = [IntType] int +# 1770| ValueCategory = prvalue(load) +# 1770| getRightOperand(): [VariableAccess] w +# 1770| Type = [IntType] int +# 1770| ValueCategory = prvalue(load) +# 1773| getStmt(4): [IfStmt] if (...) ... +# 1773| getInitialization(): [DeclStmt] declaration +# 1773| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v +# 1773| Type = [IntType] int +# 1773| getVariable().getInitializer(): [Initializer] initializer for v +# 1773| getExpr(): [VariableAccess] x +# 1773| Type = [IntType] int +# 1773| ValueCategory = prvalue(load) +# 1773| getCondition(): [ConditionDeclExpr] (condition decl) +# 1773| Type = [BoolType] bool +# 1773| ValueCategory = prvalue +# 1773| getVariableAccess(): [VariableAccess] v2 +# 1773| Type = [IntType] int +# 1773| ValueCategory = prvalue(load) +# 1773| getVariableAccess().getFullyConverted(): [CStyleCast] (bool)... +# 1773| Conversion = [BoolConversion] conversion to bool +# 1773| Type = [BoolType] bool +# 1773| ValueCategory = prvalue +# 1773| getThen(): [BlockStmt] { ... } +# 1774| getStmt(0): [ExprStmt] ExprStmt +# 1774| getExpr(): [AssignExpr] ... = ... +# 1774| Type = [IntType] int +# 1774| ValueCategory = lvalue +# 1774| getLValue(): [VariableAccess] x +# 1774| Type = [IntType] int +# 1774| ValueCategory = lvalue +# 1774| getRValue(): [AddExpr] ... + ... +# 1774| Type = [IntType] int +# 1774| ValueCategory = prvalue +# 1774| getLeftOperand(): [VariableAccess] x +# 1774| Type = [IntType] int +# 1774| ValueCategory = prvalue(load) +# 1774| getRightOperand(): [VariableAccess] v +# 1774| Type = [IntType] int +# 1774| ValueCategory = prvalue(load) +# 1777| getStmt(5): [DeclStmt] declaration +# 1777| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z +# 1777| Type = [IntType] int +# 1777| getVariable().getInitializer(): [Initializer] initializer for z +# 1777| getExpr(): [VariableAccess] x # 1777| Type = [IntType] int -# 1777| ValueCategory = lvalue -# 1777| getLValue(): [VariableAccess] x -# 1777| Type = [IntType] int -# 1777| ValueCategory = lvalue -# 1777| getRValue(): [AddExpr] ... + ... -# 1777| Type = [IntType] int -# 1777| ValueCategory = prvalue -# 1777| getLeftOperand(): [VariableAccess] x -# 1777| Type = [IntType] int -# 1777| ValueCategory = prvalue(load) -# 1777| getRightOperand(): [VariableAccess] z -# 1777| Type = [IntType] int -# 1777| ValueCategory = prvalue(load) -# 1776| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1776| Conversion = [BoolConversion] conversion to bool -# 1776| Type = [BoolType] bool -# 1776| ValueCategory = prvalue -# 1780| getStmt(7): [IfStmt] if (...) ... -# 1780| getCondition(): [ConditionDeclExpr] (condition decl) -# 1780| Type = [BoolType] bool -# 1780| ValueCategory = prvalue -# 1780| getVariableAccess(): [VariableAccess] z2 -# 1780| Type = [IntType] int -# 1780| ValueCategory = prvalue(load) -# 1780| getVariableAccess().getFullyConverted(): [CStyleCast] (bool)... -# 1780| Conversion = [BoolConversion] conversion to bool -# 1780| Type = [BoolType] bool -# 1780| ValueCategory = prvalue -# 1780| getThen(): [BlockStmt] { ... } -# 1781| getStmt(0): [ExprStmt] ExprStmt -# 1781| getExpr(): [AssignAddExpr] ... += ... -# 1781| Type = [IntType] int -# 1781| ValueCategory = lvalue -# 1781| getLValue(): [VariableAccess] x -# 1781| Type = [IntType] int -# 1781| ValueCategory = lvalue -# 1781| getRValue(): [VariableAccess] z2 -# 1781| Type = [IntType] int -# 1781| ValueCategory = prvalue(load) -# 1783| getStmt(8): [ReturnStmt] return ... -# 1785| [TopLevelFunction] void switch_initialization(int) -# 1785| : -# 1785| getParameter(0): [Parameter] x -# 1785| Type = [IntType] int -# 1785| getEntryPoint(): [BlockStmt] { ... } -# 1786| getStmt(0): [SwitchStmt] switch (...) ... -# 1786| getInitialization(): [DeclStmt] declaration -# 1786| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y -# 1786| Type = [IntType] int -# 1786| getVariable().getInitializer(): [Initializer] initializer for y -# 1786| getExpr(): [VariableAccess] x -# 1786| Type = [IntType] int -# 1786| ValueCategory = prvalue(load) -# 1786| getExpr(): [AddExpr] ... + ... -# 1786| Type = [IntType] int -# 1786| ValueCategory = prvalue -# 1786| getLeftOperand(): [VariableAccess] x -# 1786| Type = [IntType] int -# 1786| ValueCategory = prvalue(load) -# 1786| getRightOperand(): [Literal] 1 -# 1786| Type = [IntType] int -# 1786| Value = [Literal] 1 -# 1786| ValueCategory = prvalue -# 1786| getStmt(): [BlockStmt] { ... } -# 1787| getStmt(0): [SwitchCase] default: -# 1788| getStmt(1): [ExprStmt] ExprStmt -# 1788| getExpr(): [AssignExpr] ... = ... -# 1788| Type = [IntType] int -# 1788| ValueCategory = lvalue -# 1788| getLValue(): [VariableAccess] x +# 1777| ValueCategory = prvalue(load) +# 1778| getStmt(6): [IfStmt] if (...) ... +# 1778| getCondition(): [VariableAccess] z +# 1778| Type = [IntType] int +# 1778| ValueCategory = prvalue(load) +# 1778| getThen(): [BlockStmt] { ... } +# 1779| getStmt(0): [ExprStmt] ExprStmt +# 1779| getExpr(): [AssignExpr] ... = ... +# 1779| Type = [IntType] int +# 1779| ValueCategory = lvalue +# 1779| getLValue(): [VariableAccess] x +# 1779| Type = [IntType] int +# 1779| ValueCategory = lvalue +# 1779| getRValue(): [AddExpr] ... + ... +# 1779| Type = [IntType] int +# 1779| ValueCategory = prvalue +# 1779| getLeftOperand(): [VariableAccess] x +# 1779| Type = [IntType] int +# 1779| ValueCategory = prvalue(load) +# 1779| getRightOperand(): [VariableAccess] z +# 1779| Type = [IntType] int +# 1779| ValueCategory = prvalue(load) +# 1778| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 1778| Conversion = [BoolConversion] conversion to bool +# 1778| Type = [BoolType] bool +# 1778| ValueCategory = prvalue +# 1782| getStmt(7): [IfStmt] if (...) ... +# 1782| getCondition(): [ConditionDeclExpr] (condition decl) +# 1782| Type = [BoolType] bool +# 1782| ValueCategory = prvalue +# 1782| getVariableAccess(): [VariableAccess] z2 +# 1782| Type = [IntType] int +# 1782| ValueCategory = prvalue(load) +# 1782| getVariableAccess().getFullyConverted(): [CStyleCast] (bool)... +# 1782| Conversion = [BoolConversion] conversion to bool +# 1782| Type = [BoolType] bool +# 1782| ValueCategory = prvalue +# 1782| getThen(): [BlockStmt] { ... } +# 1783| getStmt(0): [ExprStmt] ExprStmt +# 1783| getExpr(): [AssignAddExpr] ... += ... +# 1783| Type = [IntType] int +# 1783| ValueCategory = lvalue +# 1783| getLValue(): [VariableAccess] x +# 1783| Type = [IntType] int +# 1783| ValueCategory = lvalue +# 1783| getRValue(): [VariableAccess] z2 +# 1783| Type = [IntType] int +# 1783| ValueCategory = prvalue(load) +# 1785| getStmt(8): [ReturnStmt] return ... +# 1787| [TopLevelFunction] void switch_initialization(int) +# 1787| : +# 1787| getParameter(0): [Parameter] x +# 1787| Type = [IntType] int +# 1787| getEntryPoint(): [BlockStmt] { ... } +# 1788| getStmt(0): [SwitchStmt] switch (...) ... +# 1788| getInitialization(): [DeclStmt] declaration +# 1788| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 1788| Type = [IntType] int +# 1788| getVariable().getInitializer(): [Initializer] initializer for y +# 1788| getExpr(): [VariableAccess] x # 1788| Type = [IntType] int -# 1788| ValueCategory = lvalue -# 1788| getRValue(): [AddExpr] ... + ... -# 1788| Type = [IntType] int -# 1788| ValueCategory = prvalue -# 1788| getLeftOperand(): [VariableAccess] x -# 1788| Type = [IntType] int -# 1788| ValueCategory = prvalue(load) -# 1788| getRightOperand(): [VariableAccess] y -# 1788| Type = [IntType] int -# 1788| ValueCategory = prvalue(load) -# 1791| getStmt(1): [DeclStmt] declaration -# 1791| getDeclarationEntry(0): [VariableDeclarationEntry] definition of w -# 1791| Type = [IntType] int -# 1792| getStmt(2): [SwitchStmt] switch (...) ... -# 1792| getInitialization(): [ExprStmt] ExprStmt -# 1792| getExpr(): [AssignExpr] ... = ... -# 1792| Type = [IntType] int -# 1792| ValueCategory = lvalue -# 1792| getLValue(): [VariableAccess] w -# 1792| Type = [IntType] int -# 1792| ValueCategory = lvalue -# 1792| getRValue(): [VariableAccess] x -# 1792| Type = [IntType] int -# 1792| ValueCategory = prvalue(load) -# 1792| getExpr(): [AddExpr] ... + ... -# 1792| Type = [IntType] int -# 1792| ValueCategory = prvalue -# 1792| getLeftOperand(): [VariableAccess] x -# 1792| Type = [IntType] int -# 1792| ValueCategory = prvalue(load) -# 1792| getRightOperand(): [Literal] 1 -# 1792| Type = [IntType] int -# 1792| Value = [Literal] 1 -# 1792| ValueCategory = prvalue -# 1792| getStmt(): [BlockStmt] { ... } -# 1793| getStmt(0): [SwitchCase] default: -# 1794| getStmt(1): [ExprStmt] ExprStmt -# 1794| getExpr(): [AssignExpr] ... = ... +# 1788| ValueCategory = prvalue(load) +# 1788| getExpr(): [AddExpr] ... + ... +# 1788| Type = [IntType] int +# 1788| ValueCategory = prvalue +# 1788| getLeftOperand(): [VariableAccess] x +# 1788| Type = [IntType] int +# 1788| ValueCategory = prvalue(load) +# 1788| getRightOperand(): [Literal] 1 +# 1788| Type = [IntType] int +# 1788| Value = [Literal] 1 +# 1788| ValueCategory = prvalue +# 1788| getStmt(): [BlockStmt] { ... } +# 1789| getStmt(0): [SwitchCase] default: +# 1790| getStmt(1): [ExprStmt] ExprStmt +# 1790| getExpr(): [AssignExpr] ... = ... +# 1790| Type = [IntType] int +# 1790| ValueCategory = lvalue +# 1790| getLValue(): [VariableAccess] x +# 1790| Type = [IntType] int +# 1790| ValueCategory = lvalue +# 1790| getRValue(): [AddExpr] ... + ... +# 1790| Type = [IntType] int +# 1790| ValueCategory = prvalue +# 1790| getLeftOperand(): [VariableAccess] x +# 1790| Type = [IntType] int +# 1790| ValueCategory = prvalue(load) +# 1790| getRightOperand(): [VariableAccess] y +# 1790| Type = [IntType] int +# 1790| ValueCategory = prvalue(load) +# 1793| getStmt(1): [DeclStmt] declaration +# 1793| getDeclarationEntry(0): [VariableDeclarationEntry] definition of w +# 1793| Type = [IntType] int +# 1794| getStmt(2): [SwitchStmt] switch (...) ... +# 1794| getInitialization(): [ExprStmt] ExprStmt +# 1794| getExpr(): [AssignExpr] ... = ... +# 1794| Type = [IntType] int +# 1794| ValueCategory = lvalue +# 1794| getLValue(): [VariableAccess] w # 1794| Type = [IntType] int # 1794| ValueCategory = lvalue -# 1794| getLValue(): [VariableAccess] x -# 1794| Type = [IntType] int -# 1794| ValueCategory = lvalue -# 1794| getRValue(): [AddExpr] ... + ... -# 1794| Type = [IntType] int -# 1794| ValueCategory = prvalue -# 1794| getLeftOperand(): [VariableAccess] x -# 1794| Type = [IntType] int -# 1794| ValueCategory = prvalue(load) -# 1794| getRightOperand(): [VariableAccess] w -# 1794| Type = [IntType] int -# 1794| ValueCategory = prvalue(load) -# 1797| getStmt(3): [SwitchStmt] switch (...) ... -# 1797| getInitialization(): [ExprStmt] ExprStmt -# 1797| getExpr(): [AssignExpr] ... = ... -# 1797| Type = [IntType] int -# 1797| ValueCategory = lvalue -# 1797| getLValue(): [VariableAccess] w -# 1797| Type = [IntType] int -# 1797| ValueCategory = lvalue -# 1797| getRValue(): [VariableAccess] x -# 1797| Type = [IntType] int -# 1797| ValueCategory = prvalue(load) -# 1797| getExpr(): [ConditionDeclExpr] (condition decl) -# 1797| Type = [IntType] int -# 1797| ValueCategory = prvalue -# 1797| getVariableAccess(): [VariableAccess] w2 -# 1797| Type = [IntType] int -# 1797| ValueCategory = prvalue(load) -# 1797| getStmt(): [BlockStmt] { ... } -# 1798| getStmt(0): [SwitchCase] default: -# 1799| getStmt(1): [ExprStmt] ExprStmt -# 1799| getExpr(): [AssignExpr] ... = ... +# 1794| getRValue(): [VariableAccess] x +# 1794| Type = [IntType] int +# 1794| ValueCategory = prvalue(load) +# 1794| getExpr(): [AddExpr] ... + ... +# 1794| Type = [IntType] int +# 1794| ValueCategory = prvalue +# 1794| getLeftOperand(): [VariableAccess] x +# 1794| Type = [IntType] int +# 1794| ValueCategory = prvalue(load) +# 1794| getRightOperand(): [Literal] 1 +# 1794| Type = [IntType] int +# 1794| Value = [Literal] 1 +# 1794| ValueCategory = prvalue +# 1794| getStmt(): [BlockStmt] { ... } +# 1795| getStmt(0): [SwitchCase] default: +# 1796| getStmt(1): [ExprStmt] ExprStmt +# 1796| getExpr(): [AssignExpr] ... = ... +# 1796| Type = [IntType] int +# 1796| ValueCategory = lvalue +# 1796| getLValue(): [VariableAccess] x +# 1796| Type = [IntType] int +# 1796| ValueCategory = lvalue +# 1796| getRValue(): [AddExpr] ... + ... +# 1796| Type = [IntType] int +# 1796| ValueCategory = prvalue +# 1796| getLeftOperand(): [VariableAccess] x +# 1796| Type = [IntType] int +# 1796| ValueCategory = prvalue(load) +# 1796| getRightOperand(): [VariableAccess] w +# 1796| Type = [IntType] int +# 1796| ValueCategory = prvalue(load) +# 1799| getStmt(3): [SwitchStmt] switch (...) ... +# 1799| getInitialization(): [ExprStmt] ExprStmt +# 1799| getExpr(): [AssignExpr] ... = ... +# 1799| Type = [IntType] int +# 1799| ValueCategory = lvalue +# 1799| getLValue(): [VariableAccess] w # 1799| Type = [IntType] int # 1799| ValueCategory = lvalue -# 1799| getLValue(): [VariableAccess] x -# 1799| Type = [IntType] int -# 1799| ValueCategory = lvalue -# 1799| getRValue(): [AddExpr] ... + ... -# 1799| Type = [IntType] int -# 1799| ValueCategory = prvalue -# 1799| getLeftOperand(): [VariableAccess] x -# 1799| Type = [IntType] int -# 1799| ValueCategory = prvalue(load) -# 1799| getRightOperand(): [VariableAccess] w -# 1799| Type = [IntType] int -# 1799| ValueCategory = prvalue(load) -# 1802| getStmt(4): [SwitchStmt] switch (...) ... -# 1802| getInitialization(): [DeclStmt] declaration -# 1802| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v -# 1802| Type = [IntType] int -# 1802| getVariable().getInitializer(): [Initializer] initializer for v -# 1802| getExpr(): [VariableAccess] x -# 1802| Type = [IntType] int -# 1802| ValueCategory = prvalue(load) -# 1802| getExpr(): [ConditionDeclExpr] (condition decl) -# 1802| Type = [IntType] int -# 1802| ValueCategory = prvalue -# 1802| getVariableAccess(): [VariableAccess] v2 -# 1802| Type = [IntType] int -# 1802| ValueCategory = prvalue(load) -# 1802| getStmt(): [BlockStmt] { ... } -# 1803| getStmt(0): [SwitchCase] default: -# 1804| getStmt(1): [ExprStmt] ExprStmt -# 1804| getExpr(): [AssignExpr] ... = ... -# 1804| Type = [IntType] int -# 1804| ValueCategory = lvalue -# 1804| getLValue(): [VariableAccess] x +# 1799| getRValue(): [VariableAccess] x +# 1799| Type = [IntType] int +# 1799| ValueCategory = prvalue(load) +# 1799| getExpr(): [ConditionDeclExpr] (condition decl) +# 1799| Type = [IntType] int +# 1799| ValueCategory = prvalue +# 1799| getVariableAccess(): [VariableAccess] w2 +# 1799| Type = [IntType] int +# 1799| ValueCategory = prvalue(load) +# 1799| getStmt(): [BlockStmt] { ... } +# 1800| getStmt(0): [SwitchCase] default: +# 1801| getStmt(1): [ExprStmt] ExprStmt +# 1801| getExpr(): [AssignExpr] ... = ... +# 1801| Type = [IntType] int +# 1801| ValueCategory = lvalue +# 1801| getLValue(): [VariableAccess] x +# 1801| Type = [IntType] int +# 1801| ValueCategory = lvalue +# 1801| getRValue(): [AddExpr] ... + ... +# 1801| Type = [IntType] int +# 1801| ValueCategory = prvalue +# 1801| getLeftOperand(): [VariableAccess] x +# 1801| Type = [IntType] int +# 1801| ValueCategory = prvalue(load) +# 1801| getRightOperand(): [VariableAccess] w +# 1801| Type = [IntType] int +# 1801| ValueCategory = prvalue(load) +# 1804| getStmt(4): [SwitchStmt] switch (...) ... +# 1804| getInitialization(): [DeclStmt] declaration +# 1804| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v +# 1804| Type = [IntType] int +# 1804| getVariable().getInitializer(): [Initializer] initializer for v +# 1804| getExpr(): [VariableAccess] x # 1804| Type = [IntType] int -# 1804| ValueCategory = lvalue -# 1804| getRValue(): [AddExpr] ... + ... -# 1804| Type = [IntType] int -# 1804| ValueCategory = prvalue -# 1804| getLeftOperand(): [VariableAccess] x -# 1804| Type = [IntType] int -# 1804| ValueCategory = prvalue(load) -# 1804| getRightOperand(): [VariableAccess] v -# 1804| Type = [IntType] int -# 1804| ValueCategory = prvalue(load) -# 1807| getStmt(5): [DeclStmt] declaration -# 1807| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z -# 1807| Type = [IntType] int -# 1807| getVariable().getInitializer(): [Initializer] initializer for z -# 1807| getExpr(): [VariableAccess] x -# 1807| Type = [IntType] int -# 1807| ValueCategory = prvalue(load) -# 1808| getStmt(6): [SwitchStmt] switch (...) ... -# 1808| getExpr(): [VariableAccess] z -# 1808| Type = [IntType] int -# 1808| ValueCategory = prvalue(load) -# 1808| getStmt(): [BlockStmt] { ... } -# 1809| getStmt(0): [SwitchCase] default: -# 1810| getStmt(1): [ExprStmt] ExprStmt -# 1810| getExpr(): [AssignExpr] ... = ... -# 1810| Type = [IntType] int -# 1810| ValueCategory = lvalue -# 1810| getLValue(): [VariableAccess] x -# 1810| Type = [IntType] int -# 1810| ValueCategory = lvalue -# 1810| getRValue(): [AddExpr] ... + ... -# 1810| Type = [IntType] int -# 1810| ValueCategory = prvalue -# 1810| getLeftOperand(): [VariableAccess] x -# 1810| Type = [IntType] int -# 1810| ValueCategory = prvalue(load) -# 1810| getRightOperand(): [VariableAccess] z -# 1810| Type = [IntType] int -# 1810| ValueCategory = prvalue(load) -# 1813| getStmt(7): [SwitchStmt] switch (...) ... -# 1813| getExpr(): [ConditionDeclExpr] (condition decl) -# 1813| Type = [IntType] int -# 1813| ValueCategory = prvalue -# 1813| getVariableAccess(): [VariableAccess] z2 -# 1813| Type = [IntType] int -# 1813| ValueCategory = prvalue(load) -# 1813| getStmt(): [BlockStmt] { ... } -# 1814| getStmt(0): [SwitchCase] default: -# 1815| getStmt(1): [ExprStmt] ExprStmt -# 1815| getExpr(): [AssignAddExpr] ... += ... -# 1815| Type = [IntType] int -# 1815| ValueCategory = lvalue -# 1815| getLValue(): [VariableAccess] x -# 1815| Type = [IntType] int -# 1815| ValueCategory = lvalue -# 1815| getRValue(): [VariableAccess] z2 -# 1815| Type = [IntType] int -# 1815| ValueCategory = prvalue(load) -# 1817| getStmt(8): [ReturnStmt] return ... -# 1821| [GlobalVariable] int global_2 -# 1821| getInitializer(): [Initializer] initializer for global_2 -# 1821| getExpr(): [Literal] 1 -# 1821| Type = [IntType] int -# 1821| Value = [Literal] 1 -# 1821| ValueCategory = prvalue -# 1823| [GlobalVariable] int const global_3 -# 1823| getInitializer(): [Initializer] initializer for global_3 -# 1823| getExpr(): [Literal] 2 +# 1804| ValueCategory = prvalue(load) +# 1804| getExpr(): [ConditionDeclExpr] (condition decl) +# 1804| Type = [IntType] int +# 1804| ValueCategory = prvalue +# 1804| getVariableAccess(): [VariableAccess] v2 +# 1804| Type = [IntType] int +# 1804| ValueCategory = prvalue(load) +# 1804| getStmt(): [BlockStmt] { ... } +# 1805| getStmt(0): [SwitchCase] default: +# 1806| getStmt(1): [ExprStmt] ExprStmt +# 1806| getExpr(): [AssignExpr] ... = ... +# 1806| Type = [IntType] int +# 1806| ValueCategory = lvalue +# 1806| getLValue(): [VariableAccess] x +# 1806| Type = [IntType] int +# 1806| ValueCategory = lvalue +# 1806| getRValue(): [AddExpr] ... + ... +# 1806| Type = [IntType] int +# 1806| ValueCategory = prvalue +# 1806| getLeftOperand(): [VariableAccess] x +# 1806| Type = [IntType] int +# 1806| ValueCategory = prvalue(load) +# 1806| getRightOperand(): [VariableAccess] v +# 1806| Type = [IntType] int +# 1806| ValueCategory = prvalue(load) +# 1809| getStmt(5): [DeclStmt] declaration +# 1809| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z +# 1809| Type = [IntType] int +# 1809| getVariable().getInitializer(): [Initializer] initializer for z +# 1809| getExpr(): [VariableAccess] x +# 1809| Type = [IntType] int +# 1809| ValueCategory = prvalue(load) +# 1810| getStmt(6): [SwitchStmt] switch (...) ... +# 1810| getExpr(): [VariableAccess] z +# 1810| Type = [IntType] int +# 1810| ValueCategory = prvalue(load) +# 1810| getStmt(): [BlockStmt] { ... } +# 1811| getStmt(0): [SwitchCase] default: +# 1812| getStmt(1): [ExprStmt] ExprStmt +# 1812| getExpr(): [AssignExpr] ... = ... +# 1812| Type = [IntType] int +# 1812| ValueCategory = lvalue +# 1812| getLValue(): [VariableAccess] x +# 1812| Type = [IntType] int +# 1812| ValueCategory = lvalue +# 1812| getRValue(): [AddExpr] ... + ... +# 1812| Type = [IntType] int +# 1812| ValueCategory = prvalue +# 1812| getLeftOperand(): [VariableAccess] x +# 1812| Type = [IntType] int +# 1812| ValueCategory = prvalue(load) +# 1812| getRightOperand(): [VariableAccess] z +# 1812| Type = [IntType] int +# 1812| ValueCategory = prvalue(load) +# 1815| getStmt(7): [SwitchStmt] switch (...) ... +# 1815| getExpr(): [ConditionDeclExpr] (condition decl) +# 1815| Type = [IntType] int +# 1815| ValueCategory = prvalue +# 1815| getVariableAccess(): [VariableAccess] z2 +# 1815| Type = [IntType] int +# 1815| ValueCategory = prvalue(load) +# 1815| getStmt(): [BlockStmt] { ... } +# 1816| getStmt(0): [SwitchCase] default: +# 1817| getStmt(1): [ExprStmt] ExprStmt +# 1817| getExpr(): [AssignAddExpr] ... += ... +# 1817| Type = [IntType] int +# 1817| ValueCategory = lvalue +# 1817| getLValue(): [VariableAccess] x +# 1817| Type = [IntType] int +# 1817| ValueCategory = lvalue +# 1817| getRValue(): [VariableAccess] z2 +# 1817| Type = [IntType] int +# 1817| ValueCategory = prvalue(load) +# 1819| getStmt(8): [ReturnStmt] return ... +# 1823| [GlobalVariable] int global_2 +# 1823| getInitializer(): [Initializer] initializer for global_2 +# 1823| getExpr(): [Literal] 1 # 1823| Type = [IntType] int -# 1823| Value = [Literal] 2 +# 1823| Value = [Literal] 1 # 1823| ValueCategory = prvalue -# 1825| [GlobalVariable] constructor_only global_4 -# 1825| getInitializer(): [Initializer] initializer for global_4 -# 1825| getExpr(): [ConstructorCall] call to constructor_only -# 1825| Type = [VoidType] void +# 1825| [GlobalVariable] int const global_3 +# 1825| getInitializer(): [Initializer] initializer for global_3 +# 1825| getExpr(): [Literal] 2 +# 1825| Type = [IntType] int +# 1825| Value = [Literal] 2 # 1825| ValueCategory = prvalue -# 1825| getArgument(0): [Literal] 1 -# 1825| Type = [IntType] int -# 1825| Value = [Literal] 1 -# 1825| ValueCategory = prvalue -# 1827| [GlobalVariable] constructor_only global_5 -# 1827| getInitializer(): [Initializer] initializer for global_5 +# 1827| [GlobalVariable] constructor_only global_4 +# 1827| getInitializer(): [Initializer] initializer for global_4 # 1827| getExpr(): [ConstructorCall] call to constructor_only # 1827| Type = [VoidType] void # 1827| ValueCategory = prvalue -# 1827| getArgument(0): [Literal] 2 +# 1827| getArgument(0): [Literal] 1 # 1827| Type = [IntType] int -# 1827| Value = [Literal] 2 +# 1827| Value = [Literal] 1 # 1827| ValueCategory = prvalue -# 1829| [GlobalVariable] char* global_string -# 1829| getInitializer(): [Initializer] initializer for global_string -# 1829| getExpr(): global string -# 1829| Type = [ArrayType] const char[14] -# 1829| Value = [StringLiteral] "global string" -# 1829| ValueCategory = lvalue -# 1829| getExpr().getFullyConverted(): [CStyleCast] (char *)... -# 1829| Conversion = [PointerConversion] pointer conversion -# 1829| Type = [CharPointerType] char * +# 1829| [GlobalVariable] constructor_only global_5 +# 1829| getInitializer(): [Initializer] initializer for global_5 +# 1829| getExpr(): [ConstructorCall] call to constructor_only +# 1829| Type = [VoidType] void # 1829| ValueCategory = prvalue -# 1829| getExpr(): [ArrayToPointerConversion] array to pointer conversion -# 1829| Type = [PointerType] const char * +# 1829| getArgument(0): [Literal] 2 +# 1829| Type = [IntType] int +# 1829| Value = [Literal] 2 # 1829| ValueCategory = prvalue -# 1831| [GlobalVariable] int global_6 -# 1831| getInitializer(): [Initializer] initializer for global_6 -# 1831| getExpr(): [VariableAccess] global_2 -# 1831| Type = [IntType] int -# 1831| ValueCategory = prvalue(load) -# 1834| [CopyAssignmentOperator] block_assignment::A& block_assignment::A::operator=(block_assignment::A const&) -# 1834| : +# 1831| [GlobalVariable] char* global_string +# 1831| getInitializer(): [Initializer] initializer for global_string +# 1831| getExpr(): global string +# 1831| Type = [ArrayType] const char[14] +# 1831| Value = [StringLiteral] "global string" +# 1831| ValueCategory = lvalue +# 1831| getExpr().getFullyConverted(): [CStyleCast] (char *)... +# 1831| Conversion = [PointerConversion] pointer conversion +# 1831| Type = [CharPointerType] char * +# 1831| ValueCategory = prvalue +# 1831| getExpr(): [ArrayToPointerConversion] array to pointer conversion +# 1831| Type = [PointerType] const char * +# 1831| ValueCategory = prvalue +# 1833| [GlobalVariable] int global_6 +# 1833| getInitializer(): [Initializer] initializer for global_6 +# 1833| getExpr(): [VariableAccess] global_2 +# 1833| Type = [IntType] int +# 1833| ValueCategory = prvalue(load) +# 1836| [CopyAssignmentOperator] block_assignment::A& block_assignment::A::operator=(block_assignment::A const&) +# 1836| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const A & -# 1834| [MoveAssignmentOperator] block_assignment::A& block_assignment::A::operator=(block_assignment::A&&) -# 1834| : +# 1836| [MoveAssignmentOperator] block_assignment::A& block_assignment::A::operator=(block_assignment::A&&) +# 1836| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] A && #-----| getEntryPoint(): [BlockStmt] { ... } @@ -14301,43 +14307,43 @@ ir.cpp: #-----| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) #-----| Type = [LValueReferenceType] A & #-----| ValueCategory = prvalue -# 1834| [Constructor] void block_assignment::A::A() -# 1834| : -# 1834| [CopyConstructor] void block_assignment::A::A(block_assignment::A const&) -# 1834| : +# 1836| [Constructor] void block_assignment::A::A() +# 1836| : +# 1836| [CopyConstructor] void block_assignment::A::A(block_assignment::A const&) +# 1836| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const A & -# 1834| [MoveConstructor] void block_assignment::A::A(block_assignment::A&&) -# 1834| : +# 1836| [MoveConstructor] void block_assignment::A::A(block_assignment::A&&) +# 1836| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] A && -# 1836| [VirtualFunction] void block_assignment::A::f() -# 1836| : -# 1839| [CopyAssignmentOperator] block_assignment::B& block_assignment::B::operator=(block_assignment::B const&) -# 1839| : +# 1838| [VirtualFunction] void block_assignment::A::f() +# 1838| : +# 1841| [CopyAssignmentOperator] block_assignment::B& block_assignment::B::operator=(block_assignment::B const&) +# 1841| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const B & -# 1839| [MoveAssignmentOperator] block_assignment::B& block_assignment::B::operator=(block_assignment::B&&) -# 1839| : +# 1841| [MoveAssignmentOperator] block_assignment::B& block_assignment::B::operator=(block_assignment::B&&) +# 1841| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] B && #-----| getEntryPoint(): [BlockStmt] { ... } #-----| getStmt(0): [ExprStmt] ExprStmt -# 1839| getExpr(): [FunctionCall] call to operator= -# 1839| Type = [LValueReferenceType] A & -# 1839| ValueCategory = prvalue -# 1839| getQualifier(): [ThisExpr] this -# 1839| Type = [PointerType] B * -# 1839| ValueCategory = prvalue(load) -# 1839| getArgument(0): [PointerDereferenceExpr] * ... -# 1839| Type = [Class] A -# 1839| ValueCategory = xvalue -# 1839| getOperand(): [AddressOfExpr] & ... -# 1839| Type = [PointerType] B * -# 1839| ValueCategory = prvalue -# 1839| getOperand(): [VariableAccess] (unnamed parameter 0) -# 1839| Type = [RValueReferenceType] B && -# 1839| ValueCategory = prvalue(load) +# 1841| getExpr(): [FunctionCall] call to operator= +# 1841| Type = [LValueReferenceType] A & +# 1841| ValueCategory = prvalue +# 1841| getQualifier(): [ThisExpr] this +# 1841| Type = [PointerType] B * +# 1841| ValueCategory = prvalue(load) +# 1841| getArgument(0): [PointerDereferenceExpr] * ... +# 1841| Type = [Class] A +# 1841| ValueCategory = xvalue +# 1841| getOperand(): [AddressOfExpr] & ... +# 1841| Type = [PointerType] B * +# 1841| ValueCategory = prvalue +# 1841| getOperand(): [VariableAccess] (unnamed parameter 0) +# 1841| Type = [RValueReferenceType] B && +# 1841| ValueCategory = prvalue(load) #-----| getOperand().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) #-----| Type = [Struct] B #-----| ValueCategory = lvalue @@ -14365,746 +14371,708 @@ ir.cpp: #-----| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) #-----| Type = [LValueReferenceType] B & #-----| ValueCategory = prvalue -# 1839| [CopyConstructor] void block_assignment::B::B(block_assignment::B const&) -# 1839| : +# 1841| [CopyConstructor] void block_assignment::B::B(block_assignment::B const&) +# 1841| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const B & -# 1839| [MoveConstructor] void block_assignment::B::B(block_assignment::B&&) -# 1839| : +# 1841| [MoveConstructor] void block_assignment::B::B(block_assignment::B&&) +# 1841| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] B && -# 1840| [Constructor] void block_assignment::B::B(block_assignment::A*) -# 1840| : -# 1840| getParameter(0): [Parameter] (unnamed parameter 0) -# 1840| Type = [PointerType] A * -# 1843| [TopLevelFunction] void block_assignment::foo() -# 1843| : -# 1843| getEntryPoint(): [BlockStmt] { ... } -# 1844| getStmt(0): [DeclStmt] declaration -# 1844| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v -# 1844| Type = [Struct] B -# 1844| getVariable().getInitializer(): [Initializer] initializer for v -# 1844| getExpr(): [ConstructorCall] call to B -# 1844| Type = [VoidType] void -# 1844| ValueCategory = prvalue -# 1844| getArgument(0): [Literal] 0 -# 1844| Type = [IntType] int -# 1844| Value = [Literal] 0 -# 1844| ValueCategory = prvalue -# 1844| getArgument(0).getFullyConverted(): [CStyleCast] (A *)... -# 1844| Conversion = [IntegralToPointerConversion] integral to pointer conversion -# 1844| Type = [PointerType] A * -# 1844| Value = [CStyleCast] 0 -# 1844| ValueCategory = prvalue -# 1845| getStmt(1): [ExprStmt] ExprStmt -# 1845| getExpr(): [FunctionCall] call to operator= -# 1845| Type = [LValueReferenceType] B & -# 1845| ValueCategory = prvalue -# 1845| getQualifier(): [VariableAccess] v -# 1845| Type = [Struct] B -# 1845| ValueCategory = lvalue -# 1845| getArgument(0): [ConstructorCall] call to B -# 1845| Type = [VoidType] void -# 1845| ValueCategory = prvalue -# 1845| getArgument(0): [Literal] 0 -# 1845| Type = [IntType] int -# 1845| Value = [Literal] 0 -# 1845| ValueCategory = prvalue -# 1845| getArgument(0).getFullyConverted(): [CStyleCast] (A *)... -# 1845| Conversion = [IntegralToPointerConversion] integral to pointer conversion -# 1845| Type = [PointerType] A * -# 1845| Value = [CStyleCast] 0 -# 1845| ValueCategory = prvalue -# 1845| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 1845| Type = [LValueReferenceType] B & -# 1845| ValueCategory = prvalue -# 1845| getExpr(): [TemporaryObjectExpr] temporary object -# 1845| Type = [Struct] B -# 1845| ValueCategory = lvalue -# 1845| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1845| Type = [Struct] B -# 1845| ValueCategory = lvalue -# 1846| getStmt(2): [ReturnStmt] return ... -# 1849| [TopLevelFunction] void magicvars() -# 1849| : -# 1849| getEntryPoint(): [BlockStmt] { ... } -# 1850| getStmt(0): [DeclStmt] declaration -# 1850| getDeclarationEntry(0): [VariableDeclarationEntry] definition of pf -# 1850| Type = [PointerType] const char * -# 1850| getVariable().getInitializer(): [Initializer] initializer for pf -# 1850| getExpr(): [VariableAccess] __PRETTY_FUNCTION__ -# 1850| Type = [ArrayType] const char[17] -# 1850| ValueCategory = lvalue -# 1850| getExpr().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 1850| Type = [PointerType] const char * -# 1850| ValueCategory = prvalue -# 1851| getStmt(1): [DeclStmt] declaration -# 1851| getDeclarationEntry(0): [VariableDeclarationEntry] definition of strfunc -# 1851| Type = [PointerType] const char * -# 1851| getVariable().getInitializer(): [Initializer] initializer for strfunc -# 1851| getExpr(): [VariableAccess] __func__ -# 1851| Type = [ArrayType] const char[10] -# 1851| ValueCategory = lvalue -# 1851| getExpr().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 1851| Type = [PointerType] const char * -# 1851| ValueCategory = prvalue -# 1852| getStmt(2): [ReturnStmt] return ... -# 1855| [CopyAssignmentOperator] missing_declaration_entries::S& missing_declaration_entries::S::operator=(missing_declaration_entries::S const&) -# 1855| : +# 1842| [Constructor] void block_assignment::B::B(block_assignment::A*) +# 1842| : +# 1842| getParameter(0): [Parameter] (unnamed parameter 0) +# 1842| Type = [PointerType] A * +# 1845| [TopLevelFunction] void block_assignment::foo() +# 1845| : +# 1845| getEntryPoint(): [BlockStmt] { ... } +# 1846| getStmt(0): [DeclStmt] declaration +# 1846| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v +# 1846| Type = [Struct] B +# 1846| getVariable().getInitializer(): [Initializer] initializer for v +# 1846| getExpr(): [ConstructorCall] call to B +# 1846| Type = [VoidType] void +# 1846| ValueCategory = prvalue +# 1846| getArgument(0): [Literal] 0 +# 1846| Type = [IntType] int +# 1846| Value = [Literal] 0 +# 1846| ValueCategory = prvalue +# 1846| getArgument(0).getFullyConverted(): [CStyleCast] (A *)... +# 1846| Conversion = [IntegralToPointerConversion] integral to pointer conversion +# 1846| Type = [PointerType] A * +# 1846| Value = [CStyleCast] 0 +# 1846| ValueCategory = prvalue +# 1847| getStmt(1): [ExprStmt] ExprStmt +# 1847| getExpr(): [FunctionCall] call to operator= +# 1847| Type = [LValueReferenceType] B & +# 1847| ValueCategory = prvalue +# 1847| getQualifier(): [VariableAccess] v +# 1847| Type = [Struct] B +# 1847| ValueCategory = lvalue +# 1847| getArgument(0): [ConstructorCall] call to B +# 1847| Type = [VoidType] void +# 1847| ValueCategory = prvalue +# 1847| getArgument(0): [Literal] 0 +# 1847| Type = [IntType] int +# 1847| Value = [Literal] 0 +# 1847| ValueCategory = prvalue +# 1847| getArgument(0).getFullyConverted(): [CStyleCast] (A *)... +# 1847| Conversion = [IntegralToPointerConversion] integral to pointer conversion +# 1847| Type = [PointerType] A * +# 1847| Value = [CStyleCast] 0 +# 1847| ValueCategory = prvalue +# 1847| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 1847| Type = [LValueReferenceType] B & +# 1847| ValueCategory = prvalue +# 1847| getExpr(): [TemporaryObjectExpr] temporary object +# 1847| Type = [Struct] B +# 1847| ValueCategory = lvalue +# 1847| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1847| Type = [Struct] B +# 1847| ValueCategory = lvalue +# 1848| getStmt(2): [ReturnStmt] return ... +# 1851| [TopLevelFunction] void magicvars() +# 1851| : +# 1851| getEntryPoint(): [BlockStmt] { ... } +# 1852| getStmt(0): [DeclStmt] declaration +# 1852| getDeclarationEntry(0): [VariableDeclarationEntry] definition of pf +# 1852| Type = [PointerType] const char * +# 1852| getVariable().getInitializer(): [Initializer] initializer for pf +# 1852| getExpr(): [VariableAccess] __PRETTY_FUNCTION__ +# 1852| Type = [ArrayType] const char[17] +# 1852| ValueCategory = lvalue +# 1852| getExpr().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 1852| Type = [PointerType] const char * +# 1852| ValueCategory = prvalue +# 1853| getStmt(1): [DeclStmt] declaration +# 1853| getDeclarationEntry(0): [VariableDeclarationEntry] definition of strfunc +# 1853| Type = [PointerType] const char * +# 1853| getVariable().getInitializer(): [Initializer] initializer for strfunc +# 1853| getExpr(): [VariableAccess] __func__ +# 1853| Type = [ArrayType] const char[10] +# 1853| ValueCategory = lvalue +# 1853| getExpr().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 1853| Type = [PointerType] const char * +# 1853| ValueCategory = prvalue +# 1854| getStmt(2): [ReturnStmt] return ... +# 1857| [CopyAssignmentOperator] missing_declaration_entries::S& missing_declaration_entries::S::operator=(missing_declaration_entries::S const&) +# 1857| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const S & -# 1855| [MoveAssignmentOperator] missing_declaration_entries::S& missing_declaration_entries::S::operator=(missing_declaration_entries::S&&) -# 1855| : +# 1857| [MoveAssignmentOperator] missing_declaration_entries::S& missing_declaration_entries::S::operator=(missing_declaration_entries::S&&) +# 1857| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] S && -# 1859| [CopyAssignmentOperator] missing_declaration_entries::Bar1& missing_declaration_entries::Bar1::operator=(missing_declaration_entries::Bar1 const&) -# 1859| : +# 1861| [CopyAssignmentOperator] missing_declaration_entries::Bar1& missing_declaration_entries::Bar1::operator=(missing_declaration_entries::Bar1 const&) +# 1861| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const Bar1 & -# 1859| [MoveAssignmentOperator] missing_declaration_entries::Bar1& missing_declaration_entries::Bar1::operator=(missing_declaration_entries::Bar1&&) -# 1859| : +# 1861| [MoveAssignmentOperator] missing_declaration_entries::Bar1& missing_declaration_entries::Bar1::operator=(missing_declaration_entries::Bar1&&) +# 1861| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] Bar1 && -# 1862| [MemberFunction] void* missing_declaration_entries::Bar1::missing_type_decl_entry(missing_declaration_entries::Bar1::pointer) -# 1862| : -# 1862| getParameter(0): [Parameter] p -# 1862| Type = [CTypedefType,NestedTypedefType] pointer -# 1862| getEntryPoint(): [BlockStmt] { ... } -# 1863| getStmt(0): [DeclStmt] declaration -# 1863| getDeclarationEntry(0): [TypeDeclarationEntry] declaration of _Res -# 1863| Type = [CTypedefType,LocalTypedefType] _Res -# 1864| getStmt(1): [ReturnStmt] return ... -# 1864| getExpr(): [VariableAccess] p -# 1864| Type = [CTypedefType,NestedTypedefType] pointer -# 1864| ValueCategory = prvalue(load) -# 1864| getExpr().getFullyConverted(): [CStyleCast] (void *)... -# 1864| Conversion = [PointerConversion] pointer conversion -# 1864| Type = [VoidPointerType] void * -# 1864| ValueCategory = prvalue -# 1862| [MemberFunction] void* missing_declaration_entries::Bar1::missing_type_decl_entry(missing_declaration_entries::Bar1::pointer) -# 1862| : -# 1862| getParameter(0): [Parameter] p -# 1862| Type = [CTypedefType,NestedTypedefType] pointer -# 1862| getEntryPoint(): [BlockStmt] { ... } -# 1863| getStmt(0): [DeclStmt] declaration -# 1864| getStmt(1): [ReturnStmt] return ... -# 1864| getExpr(): [VariableAccess] p -# 1864| Type = [CTypedefType,NestedTypedefType] pointer -# 1864| ValueCategory = prvalue(load) -# 1864| getExpr().getFullyConverted(): [CStyleCast] (void *)... -# 1864| Conversion = [PointerConversion] pointer conversion -# 1864| Type = [VoidPointerType] void * -# 1864| ValueCategory = prvalue -# 1868| [TopLevelFunction] void missing_declaration_entries::test1() -# 1868| : -# 1868| getEntryPoint(): [BlockStmt] { ... } -# 1869| getStmt(0): [DeclStmt] declaration -# 1869| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b -# 1869| Type = [ClassTemplateInstantiation,Struct] Bar1 -# 1870| getStmt(1): [ExprStmt] ExprStmt -# 1870| getExpr(): [FunctionCall] call to missing_type_decl_entry -# 1870| Type = [VoidPointerType] void * -# 1870| ValueCategory = prvalue -# 1870| getQualifier(): [VariableAccess] b -# 1870| Type = [ClassTemplateInstantiation,Struct] Bar1 -# 1870| ValueCategory = lvalue -# 1870| getArgument(0): [Literal] 0 -# 1870| Type = [NullPointerType] decltype(nullptr) -# 1870| Value = [Literal] 0 -# 1870| ValueCategory = prvalue -# 1870| getArgument(0).getFullyConverted(): [CStyleCast] (pointer)... -# 1870| Conversion = [PointerConversion] pointer conversion -# 1870| Type = [CTypedefType,NestedTypedefType] pointer -# 1870| Value = [CStyleCast] 0 -# 1870| ValueCategory = prvalue -# 1871| getStmt(2): [ReturnStmt] return ... -# 1873| [CopyAssignmentOperator] missing_declaration_entries::Bar2& missing_declaration_entries::Bar2::operator=(missing_declaration_entries::Bar2 const&) -# 1873| : +# 1864| [MemberFunction] void* missing_declaration_entries::Bar1::missing_type_decl_entry(missing_declaration_entries::Bar1::pointer) +# 1864| : +# 1864| getParameter(0): [Parameter] p +# 1864| Type = [CTypedefType,NestedTypedefType] pointer +# 1864| getEntryPoint(): [BlockStmt] { ... } +# 1865| getStmt(0): [DeclStmt] declaration +# 1865| getDeclarationEntry(0): [TypeDeclarationEntry] declaration of _Res +# 1865| Type = [CTypedefType,LocalTypedefType] _Res +# 1866| getStmt(1): [ReturnStmt] return ... +# 1866| getExpr(): [VariableAccess] p +# 1866| Type = [CTypedefType,NestedTypedefType] pointer +# 1866| ValueCategory = prvalue(load) +# 1866| getExpr().getFullyConverted(): [CStyleCast] (void *)... +# 1866| Conversion = [PointerConversion] pointer conversion +# 1866| Type = [VoidPointerType] void * +# 1866| ValueCategory = prvalue +# 1864| [MemberFunction] void* missing_declaration_entries::Bar1::missing_type_decl_entry(missing_declaration_entries::Bar1::pointer) +# 1864| : +# 1864| getParameter(0): [Parameter] p +# 1864| Type = [CTypedefType,NestedTypedefType] pointer +# 1864| getEntryPoint(): [BlockStmt] { ... } +# 1865| getStmt(0): [DeclStmt] declaration +# 1866| getStmt(1): [ReturnStmt] return ... +# 1866| getExpr(): [VariableAccess] p +# 1866| Type = [CTypedefType,NestedTypedefType] pointer +# 1866| ValueCategory = prvalue(load) +# 1866| getExpr().getFullyConverted(): [CStyleCast] (void *)... +# 1866| Conversion = [PointerConversion] pointer conversion +# 1866| Type = [VoidPointerType] void * +# 1866| ValueCategory = prvalue +# 1870| [TopLevelFunction] void missing_declaration_entries::test1() +# 1870| : +# 1870| getEntryPoint(): [BlockStmt] { ... } +# 1871| getStmt(0): [DeclStmt] declaration +# 1871| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b +# 1871| Type = [ClassTemplateInstantiation,Struct] Bar1 +# 1872| getStmt(1): [ExprStmt] ExprStmt +# 1872| getExpr(): [FunctionCall] call to missing_type_decl_entry +# 1872| Type = [VoidPointerType] void * +# 1872| ValueCategory = prvalue +# 1872| getQualifier(): [VariableAccess] b +# 1872| Type = [ClassTemplateInstantiation,Struct] Bar1 +# 1872| ValueCategory = lvalue +# 1872| getArgument(0): [Literal] 0 +# 1872| Type = [NullPointerType] decltype(nullptr) +# 1872| Value = [Literal] 0 +# 1872| ValueCategory = prvalue +# 1872| getArgument(0).getFullyConverted(): [CStyleCast] (pointer)... +# 1872| Conversion = [PointerConversion] pointer conversion +# 1872| Type = [CTypedefType,NestedTypedefType] pointer +# 1872| Value = [CStyleCast] 0 +# 1872| ValueCategory = prvalue +# 1873| getStmt(2): [ReturnStmt] return ... +# 1875| [CopyAssignmentOperator] missing_declaration_entries::Bar2& missing_declaration_entries::Bar2::operator=(missing_declaration_entries::Bar2 const&) +# 1875| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const Bar2 & -# 1873| [MoveAssignmentOperator] missing_declaration_entries::Bar2& missing_declaration_entries::Bar2::operator=(missing_declaration_entries::Bar2&&) -# 1873| : +# 1875| [MoveAssignmentOperator] missing_declaration_entries::Bar2& missing_declaration_entries::Bar2::operator=(missing_declaration_entries::Bar2&&) +# 1875| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] Bar2 && -# 1875| [MemberFunction] int missing_declaration_entries::Bar2::two_missing_variable_declaration_entries() -# 1875| : -# 1875| getEntryPoint(): [BlockStmt] { ... } -# 1876| getStmt(0): [DeclStmt] declaration -# 1876| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 1876| Type = [ArrayType] int[10] -# 1876| getDeclarationEntry(1): [VariableDeclarationEntry] definition of y -# 1876| Type = [ArrayType] int[10] -# 1877| getStmt(1): [ExprStmt] ExprStmt -# 1877| getExpr(): [AssignExpr] ... = ... -# 1877| Type = [IntType] int -# 1877| ValueCategory = lvalue -# 1877| getLValue(): [PointerDereferenceExpr] * ... -# 1877| Type = [IntType] int -# 1877| ValueCategory = lvalue -# 1877| getOperand(): [VariableAccess] x -# 1877| Type = [ArrayType] int[10] -# 1877| ValueCategory = lvalue -# 1877| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 1877| Type = [IntPointerType] int * -# 1877| ValueCategory = prvalue -# 1877| getRValue(): [Literal] 10 -# 1877| Type = [IntType] int -# 1877| Value = [Literal] 10 -# 1877| ValueCategory = prvalue -# 1878| getStmt(2): [ExprStmt] ExprStmt -# 1878| getExpr(): [AssignExpr] ... = ... -# 1878| Type = [IntType] int -# 1878| ValueCategory = lvalue -# 1878| getLValue(): [PointerDereferenceExpr] * ... -# 1878| Type = [IntType] int -# 1878| ValueCategory = lvalue -# 1878| getOperand(): [VariableAccess] y -# 1878| Type = [ArrayType] int[10] -# 1878| ValueCategory = lvalue -# 1878| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 1878| Type = [IntPointerType] int * -# 1878| ValueCategory = prvalue -# 1878| getRValue(): [Literal] 10 -# 1878| Type = [IntType] int -# 1878| Value = [Literal] 10 -# 1878| ValueCategory = prvalue -# 1879| getStmt(3): [ReturnStmt] return ... -# 1879| getExpr(): [AddExpr] ... + ... +# 1877| [MemberFunction] int missing_declaration_entries::Bar2::two_missing_variable_declaration_entries() +# 1877| : +# 1877| getEntryPoint(): [BlockStmt] { ... } +# 1878| getStmt(0): [DeclStmt] declaration +# 1878| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 1878| Type = [ArrayType] int[10] +# 1878| getDeclarationEntry(1): [VariableDeclarationEntry] definition of y +# 1878| Type = [ArrayType] int[10] +# 1879| getStmt(1): [ExprStmt] ExprStmt +# 1879| getExpr(): [AssignExpr] ... = ... # 1879| Type = [IntType] int -# 1879| ValueCategory = prvalue -# 1879| getLeftOperand(): [PointerDereferenceExpr] * ... +# 1879| ValueCategory = lvalue +# 1879| getLValue(): [PointerDereferenceExpr] * ... # 1879| Type = [IntType] int -# 1879| ValueCategory = prvalue(load) +# 1879| ValueCategory = lvalue # 1879| getOperand(): [VariableAccess] x # 1879| Type = [ArrayType] int[10] # 1879| ValueCategory = lvalue # 1879| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion # 1879| Type = [IntPointerType] int * # 1879| ValueCategory = prvalue -# 1879| getRightOperand(): [PointerDereferenceExpr] * ... +# 1879| getRValue(): [Literal] 10 # 1879| Type = [IntType] int -# 1879| ValueCategory = prvalue(load) -# 1879| getOperand(): [VariableAccess] y -# 1879| Type = [ArrayType] int[10] -# 1879| ValueCategory = lvalue -# 1879| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 1879| Type = [IntPointerType] int * -# 1879| ValueCategory = prvalue -# 1875| [MemberFunction] int missing_declaration_entries::Bar2::two_missing_variable_declaration_entries() -# 1875| : -# 1875| getEntryPoint(): [BlockStmt] { ... } -# 1876| getStmt(0): [DeclStmt] declaration -# 1877| getStmt(1): [ExprStmt] ExprStmt -# 1877| getExpr(): [AssignExpr] ... = ... -# 1877| Type = [IntType] int -# 1877| ValueCategory = lvalue -# 1877| getLValue(): [PointerDereferenceExpr] * ... -# 1877| Type = [IntType] int -# 1877| ValueCategory = lvalue -# 1877| getOperand(): [VariableAccess] x -# 1877| Type = [ArrayType] int[10] -# 1877| ValueCategory = lvalue -# 1877| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 1877| Type = [IntPointerType] int * -# 1877| ValueCategory = prvalue -# 1877| getRValue(): [Literal] 10 -# 1877| Type = [IntType] int -# 1877| Value = [Literal] 10 -# 1877| ValueCategory = prvalue -# 1878| getStmt(2): [ExprStmt] ExprStmt -# 1878| getExpr(): [AssignExpr] ... = ... -# 1878| Type = [IntType] int -# 1878| ValueCategory = lvalue -# 1878| getLValue(): [PointerDereferenceExpr] * ... -# 1878| Type = [IntType] int -# 1878| ValueCategory = lvalue -# 1878| getOperand(): [VariableAccess] y -# 1878| Type = [ArrayType] int[10] -# 1878| ValueCategory = lvalue -# 1878| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 1878| Type = [IntPointerType] int * -# 1878| ValueCategory = prvalue -# 1878| getRValue(): [Literal] 10 -# 1878| Type = [IntType] int -# 1878| Value = [Literal] 10 -# 1878| ValueCategory = prvalue -# 1879| getStmt(3): [ReturnStmt] return ... -# 1879| getExpr(): [AddExpr] ... + ... +# 1879| Value = [Literal] 10 +# 1879| ValueCategory = prvalue +# 1880| getStmt(2): [ExprStmt] ExprStmt +# 1880| getExpr(): [AssignExpr] ... = ... +# 1880| Type = [IntType] int +# 1880| ValueCategory = lvalue +# 1880| getLValue(): [PointerDereferenceExpr] * ... +# 1880| Type = [IntType] int +# 1880| ValueCategory = lvalue +# 1880| getOperand(): [VariableAccess] y +# 1880| Type = [ArrayType] int[10] +# 1880| ValueCategory = lvalue +# 1880| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 1880| Type = [IntPointerType] int * +# 1880| ValueCategory = prvalue +# 1880| getRValue(): [Literal] 10 +# 1880| Type = [IntType] int +# 1880| Value = [Literal] 10 +# 1880| ValueCategory = prvalue +# 1881| getStmt(3): [ReturnStmt] return ... +# 1881| getExpr(): [AddExpr] ... + ... +# 1881| Type = [IntType] int +# 1881| ValueCategory = prvalue +# 1881| getLeftOperand(): [PointerDereferenceExpr] * ... +# 1881| Type = [IntType] int +# 1881| ValueCategory = prvalue(load) +# 1881| getOperand(): [VariableAccess] x +# 1881| Type = [ArrayType] int[10] +# 1881| ValueCategory = lvalue +# 1881| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 1881| Type = [IntPointerType] int * +# 1881| ValueCategory = prvalue +# 1881| getRightOperand(): [PointerDereferenceExpr] * ... +# 1881| Type = [IntType] int +# 1881| ValueCategory = prvalue(load) +# 1881| getOperand(): [VariableAccess] y +# 1881| Type = [ArrayType] int[10] +# 1881| ValueCategory = lvalue +# 1881| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 1881| Type = [IntPointerType] int * +# 1881| ValueCategory = prvalue +# 1877| [MemberFunction] int missing_declaration_entries::Bar2::two_missing_variable_declaration_entries() +# 1877| : +# 1877| getEntryPoint(): [BlockStmt] { ... } +# 1878| getStmt(0): [DeclStmt] declaration +# 1879| getStmt(1): [ExprStmt] ExprStmt +# 1879| getExpr(): [AssignExpr] ... = ... # 1879| Type = [IntType] int -# 1879| ValueCategory = prvalue -# 1879| getLeftOperand(): [PointerDereferenceExpr] * ... +# 1879| ValueCategory = lvalue +# 1879| getLValue(): [PointerDereferenceExpr] * ... # 1879| Type = [IntType] int -# 1879| ValueCategory = prvalue(load) +# 1879| ValueCategory = lvalue # 1879| getOperand(): [VariableAccess] x # 1879| Type = [ArrayType] int[10] # 1879| ValueCategory = lvalue # 1879| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion # 1879| Type = [IntPointerType] int * # 1879| ValueCategory = prvalue -# 1879| getRightOperand(): [PointerDereferenceExpr] * ... +# 1879| getRValue(): [Literal] 10 # 1879| Type = [IntType] int -# 1879| ValueCategory = prvalue(load) -# 1879| getOperand(): [VariableAccess] y -# 1879| Type = [ArrayType] int[10] -# 1879| ValueCategory = lvalue -# 1879| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 1879| Type = [IntPointerType] int * -# 1879| ValueCategory = prvalue -# 1883| [TopLevelFunction] void missing_declaration_entries::test2() -# 1883| : -# 1883| getEntryPoint(): [BlockStmt] { ... } -# 1884| getStmt(0): [DeclStmt] declaration -# 1884| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b -# 1884| Type = [ClassTemplateInstantiation,Struct] Bar2 -# 1885| getStmt(1): [ExprStmt] ExprStmt -# 1885| getExpr(): [FunctionCall] call to two_missing_variable_declaration_entries -# 1885| Type = [IntType] int -# 1885| ValueCategory = prvalue -# 1885| getQualifier(): [VariableAccess] b -# 1885| Type = [ClassTemplateInstantiation,Struct] Bar2 -# 1885| ValueCategory = lvalue -# 1886| getStmt(2): [ReturnStmt] return ... -# 1889| [GlobalVariable] char global_template -# 1889| getInitializer(): [Initializer] initializer for global_template -# 1889| getExpr(): [Literal] 42 -# 1889| Type = [IntType] int -# 1889| Value = [Literal] 42 -# 1889| ValueCategory = prvalue -# 1889| getExpr().getFullyConverted(): [CStyleCast] (char)... -# 1889| Conversion = [IntegralConversion] integral conversion -# 1889| Type = [PlainCharType] char -# 1889| Value = [CStyleCast] 42 -# 1889| ValueCategory = prvalue -# 1889| [GlobalVariable] int global_template -# 1889| getInitializer(): [Initializer] initializer for global_template -# 1889| getExpr(): [Literal] 42 -# 1889| Type = [IntType] int -# 1889| Value = [Literal] 42 -# 1889| ValueCategory = prvalue -# 1891| [TopLevelFunction] int test_global_template_int() -# 1891| : -# 1891| getEntryPoint(): [BlockStmt] { ... } -# 1892| getStmt(0): [DeclStmt] declaration -# 1892| getDeclarationEntry(0): [VariableDeclarationEntry] definition of local_int -# 1892| Type = [IntType] int -# 1892| getVariable().getInitializer(): [Initializer] initializer for local_int -# 1892| getExpr(): [VariableAccess] global_template -# 1892| Type = [IntType] int -# 1892| ValueCategory = prvalue(load) -# 1893| getStmt(1): [DeclStmt] declaration -# 1893| getDeclarationEntry(0): [VariableDeclarationEntry] definition of local_char -# 1893| Type = [PlainCharType] char -# 1893| getVariable().getInitializer(): [Initializer] initializer for local_char -# 1893| getExpr(): [VariableAccess] global_template -# 1893| Type = [PlainCharType] char -# 1893| ValueCategory = prvalue(load) -# 1894| getStmt(2): [ReturnStmt] return ... -# 1894| getExpr(): [AddExpr] ... + ... +# 1879| Value = [Literal] 10 +# 1879| ValueCategory = prvalue +# 1880| getStmt(2): [ExprStmt] ExprStmt +# 1880| getExpr(): [AssignExpr] ... = ... +# 1880| Type = [IntType] int +# 1880| ValueCategory = lvalue +# 1880| getLValue(): [PointerDereferenceExpr] * ... +# 1880| Type = [IntType] int +# 1880| ValueCategory = lvalue +# 1880| getOperand(): [VariableAccess] y +# 1880| Type = [ArrayType] int[10] +# 1880| ValueCategory = lvalue +# 1880| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 1880| Type = [IntPointerType] int * +# 1880| ValueCategory = prvalue +# 1880| getRValue(): [Literal] 10 +# 1880| Type = [IntType] int +# 1880| Value = [Literal] 10 +# 1880| ValueCategory = prvalue +# 1881| getStmt(3): [ReturnStmt] return ... +# 1881| getExpr(): [AddExpr] ... + ... +# 1881| Type = [IntType] int +# 1881| ValueCategory = prvalue +# 1881| getLeftOperand(): [PointerDereferenceExpr] * ... +# 1881| Type = [IntType] int +# 1881| ValueCategory = prvalue(load) +# 1881| getOperand(): [VariableAccess] x +# 1881| Type = [ArrayType] int[10] +# 1881| ValueCategory = lvalue +# 1881| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 1881| Type = [IntPointerType] int * +# 1881| ValueCategory = prvalue +# 1881| getRightOperand(): [PointerDereferenceExpr] * ... +# 1881| Type = [IntType] int +# 1881| ValueCategory = prvalue(load) +# 1881| getOperand(): [VariableAccess] y +# 1881| Type = [ArrayType] int[10] +# 1881| ValueCategory = lvalue +# 1881| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 1881| Type = [IntPointerType] int * +# 1881| ValueCategory = prvalue +# 1885| [TopLevelFunction] void missing_declaration_entries::test2() +# 1885| : +# 1885| getEntryPoint(): [BlockStmt] { ... } +# 1886| getStmt(0): [DeclStmt] declaration +# 1886| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b +# 1886| Type = [ClassTemplateInstantiation,Struct] Bar2 +# 1887| getStmt(1): [ExprStmt] ExprStmt +# 1887| getExpr(): [FunctionCall] call to two_missing_variable_declaration_entries +# 1887| Type = [IntType] int +# 1887| ValueCategory = prvalue +# 1887| getQualifier(): [VariableAccess] b +# 1887| Type = [ClassTemplateInstantiation,Struct] Bar2 +# 1887| ValueCategory = lvalue +# 1888| getStmt(2): [ReturnStmt] return ... +# 1891| [GlobalVariable] char global_template +# 1891| getInitializer(): [Initializer] initializer for global_template +# 1891| getExpr(): [Literal] 42 +# 1891| Type = [IntType] int +# 1891| Value = [Literal] 42 +# 1891| ValueCategory = prvalue +# 1891| getExpr().getFullyConverted(): [CStyleCast] (char)... +# 1891| Conversion = [IntegralConversion] integral conversion +# 1891| Type = [PlainCharType] char +# 1891| Value = [CStyleCast] 42 +# 1891| ValueCategory = prvalue +# 1891| [GlobalVariable] int global_template +# 1891| getInitializer(): [Initializer] initializer for global_template +# 1891| getExpr(): [Literal] 42 +# 1891| Type = [IntType] int +# 1891| Value = [Literal] 42 +# 1891| ValueCategory = prvalue +# 1893| [TopLevelFunction] int test_global_template_int() +# 1893| : +# 1893| getEntryPoint(): [BlockStmt] { ... } +# 1894| getStmt(0): [DeclStmt] declaration +# 1894| getDeclarationEntry(0): [VariableDeclarationEntry] definition of local_int # 1894| Type = [IntType] int -# 1894| ValueCategory = prvalue -# 1894| getLeftOperand(): [VariableAccess] local_int -# 1894| Type = [IntType] int -# 1894| ValueCategory = prvalue(load) -# 1894| getRightOperand(): [VariableAccess] local_char -# 1894| Type = [PlainCharType] char -# 1894| ValueCategory = prvalue(load) -# 1894| getRightOperand().getFullyConverted(): [CStyleCast] (int)... -# 1894| Conversion = [IntegralConversion] integral conversion -# 1894| Type = [IntType] int -# 1894| ValueCategory = prvalue -# 1897| [TopLevelFunction] void noreturnFunc() -# 1897| : -# 1899| [TopLevelFunction] int noreturnTest(int) +# 1894| getVariable().getInitializer(): [Initializer] initializer for local_int +# 1894| getExpr(): [VariableAccess] global_template +# 1894| Type = [IntType] int +# 1894| ValueCategory = prvalue(load) +# 1895| getStmt(1): [DeclStmt] declaration +# 1895| getDeclarationEntry(0): [VariableDeclarationEntry] definition of local_char +# 1895| Type = [PlainCharType] char +# 1895| getVariable().getInitializer(): [Initializer] initializer for local_char +# 1895| getExpr(): [VariableAccess] global_template +# 1895| Type = [PlainCharType] char +# 1895| ValueCategory = prvalue(load) +# 1896| getStmt(2): [ReturnStmt] return ... +# 1896| getExpr(): [AddExpr] ... + ... +# 1896| Type = [IntType] int +# 1896| ValueCategory = prvalue +# 1896| getLeftOperand(): [VariableAccess] local_int +# 1896| Type = [IntType] int +# 1896| ValueCategory = prvalue(load) +# 1896| getRightOperand(): [VariableAccess] local_char +# 1896| Type = [PlainCharType] char +# 1896| ValueCategory = prvalue(load) +# 1896| getRightOperand().getFullyConverted(): [CStyleCast] (int)... +# 1896| Conversion = [IntegralConversion] integral conversion +# 1896| Type = [IntType] int +# 1896| ValueCategory = prvalue +# 1899| [TopLevelFunction] void noreturnFunc() # 1899| : -# 1899| getParameter(0): [Parameter] x -# 1899| Type = [IntType] int -# 1899| getEntryPoint(): [BlockStmt] { ... } -# 1900| getStmt(0): [IfStmt] if (...) ... -# 1900| getCondition(): [LTExpr] ... < ... -# 1900| Type = [BoolType] bool -# 1900| ValueCategory = prvalue -# 1900| getLesserOperand(): [VariableAccess] x -# 1900| Type = [IntType] int -# 1900| ValueCategory = prvalue(load) -# 1900| getGreaterOperand(): [Literal] 10 -# 1900| Type = [IntType] int -# 1900| Value = [Literal] 10 -# 1900| ValueCategory = prvalue -# 1900| getThen(): [BlockStmt] { ... } -# 1901| getStmt(0): [ReturnStmt] return ... -# 1901| getExpr(): [VariableAccess] x -# 1901| Type = [IntType] int -# 1901| ValueCategory = prvalue(load) -# 1902| getElse(): [BlockStmt] { ... } -# 1903| getStmt(0): [ExprStmt] ExprStmt -# 1903| getExpr(): [FunctionCall] call to noreturnFunc -# 1903| Type = [VoidType] void -# 1903| ValueCategory = prvalue -# 1905| getStmt(1): [ReturnStmt] return ... -# 1907| [TopLevelFunction] int noreturnTest2(int) -# 1907| : -# 1907| getParameter(0): [Parameter] x -# 1907| Type = [IntType] int -# 1907| getEntryPoint(): [BlockStmt] { ... } -# 1908| getStmt(0): [IfStmt] if (...) ... -# 1908| getCondition(): [LTExpr] ... < ... -# 1908| Type = [BoolType] bool -# 1908| ValueCategory = prvalue -# 1908| getLesserOperand(): [VariableAccess] x -# 1908| Type = [IntType] int -# 1908| ValueCategory = prvalue(load) -# 1908| getGreaterOperand(): [Literal] 10 -# 1908| Type = [IntType] int -# 1908| Value = [Literal] 10 -# 1908| ValueCategory = prvalue -# 1908| getThen(): [BlockStmt] { ... } -# 1909| getStmt(0): [ExprStmt] ExprStmt -# 1909| getExpr(): [FunctionCall] call to noreturnFunc -# 1909| Type = [VoidType] void -# 1909| ValueCategory = prvalue -# 1911| getStmt(1): [ReturnStmt] return ... -# 1911| getExpr(): [VariableAccess] x -# 1911| Type = [IntType] int -# 1911| ValueCategory = prvalue(load) -# 1914| [TopLevelFunction] int static_function(int) -# 1914| : -# 1914| getParameter(0): [Parameter] x -# 1914| Type = [IntType] int -# 1914| getEntryPoint(): [BlockStmt] { ... } -# 1915| getStmt(0): [ReturnStmt] return ... -# 1915| getExpr(): [VariableAccess] x -# 1915| Type = [IntType] int -# 1915| ValueCategory = prvalue(load) -# 1918| [TopLevelFunction] void test_static_functions_with_assignments() -# 1918| : -# 1918| getEntryPoint(): [BlockStmt] { ... } -# 1919| getStmt(0): [DeclStmt] declaration -# 1919| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c -# 1919| Type = [Class] C -# 1919| getVariable().getInitializer(): [Initializer] initializer for c -# 1919| getExpr(): [ConstructorCall] call to C -# 1919| Type = [VoidType] void -# 1919| ValueCategory = prvalue -# 1920| getStmt(1): [DeclStmt] declaration -# 1920| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 1920| Type = [IntType] int -# 1921| getStmt(2): [ExprStmt] ExprStmt -# 1921| getExpr(): [AssignExpr] ... = ... -# 1921| Type = [IntType] int -# 1921| ValueCategory = lvalue -# 1921| getLValue(): [VariableAccess] x -# 1921| Type = [IntType] int -# 1921| ValueCategory = lvalue -# 1921| getRValue(): [FunctionCall] call to StaticMemberFunction -# 1921| Type = [IntType] int -# 1921| ValueCategory = prvalue -# 1921| getQualifier(): [VariableAccess] c -# 1921| Type = [Class] C -# 1921| ValueCategory = lvalue -# 1921| getArgument(0): [Literal] 10 -# 1921| Type = [IntType] int -# 1921| Value = [Literal] 10 +# 1901| [TopLevelFunction] int noreturnTest(int) +# 1901| : +# 1901| getParameter(0): [Parameter] x +# 1901| Type = [IntType] int +# 1901| getEntryPoint(): [BlockStmt] { ... } +# 1902| getStmt(0): [IfStmt] if (...) ... +# 1902| getCondition(): [LTExpr] ... < ... +# 1902| Type = [BoolType] bool +# 1902| ValueCategory = prvalue +# 1902| getLesserOperand(): [VariableAccess] x +# 1902| Type = [IntType] int +# 1902| ValueCategory = prvalue(load) +# 1902| getGreaterOperand(): [Literal] 10 +# 1902| Type = [IntType] int +# 1902| Value = [Literal] 10 +# 1902| ValueCategory = prvalue +# 1902| getThen(): [BlockStmt] { ... } +# 1903| getStmt(0): [ReturnStmt] return ... +# 1903| getExpr(): [VariableAccess] x +# 1903| Type = [IntType] int +# 1903| ValueCategory = prvalue(load) +# 1904| getElse(): [BlockStmt] { ... } +# 1905| getStmt(0): [ExprStmt] ExprStmt +# 1905| getExpr(): [FunctionCall] call to noreturnFunc +# 1905| Type = [VoidType] void +# 1905| ValueCategory = prvalue +# 1907| getStmt(1): [ReturnStmt] return ... +# 1909| [TopLevelFunction] int noreturnTest2(int) +# 1909| : +# 1909| getParameter(0): [Parameter] x +# 1909| Type = [IntType] int +# 1909| getEntryPoint(): [BlockStmt] { ... } +# 1910| getStmt(0): [IfStmt] if (...) ... +# 1910| getCondition(): [LTExpr] ... < ... +# 1910| Type = [BoolType] bool +# 1910| ValueCategory = prvalue +# 1910| getLesserOperand(): [VariableAccess] x +# 1910| Type = [IntType] int +# 1910| ValueCategory = prvalue(load) +# 1910| getGreaterOperand(): [Literal] 10 +# 1910| Type = [IntType] int +# 1910| Value = [Literal] 10 +# 1910| ValueCategory = prvalue +# 1910| getThen(): [BlockStmt] { ... } +# 1911| getStmt(0): [ExprStmt] ExprStmt +# 1911| getExpr(): [FunctionCall] call to noreturnFunc +# 1911| Type = [VoidType] void +# 1911| ValueCategory = prvalue +# 1913| getStmt(1): [ReturnStmt] return ... +# 1913| getExpr(): [VariableAccess] x +# 1913| Type = [IntType] int +# 1913| ValueCategory = prvalue(load) +# 1916| [TopLevelFunction] int static_function(int) +# 1916| : +# 1916| getParameter(0): [Parameter] x +# 1916| Type = [IntType] int +# 1916| getEntryPoint(): [BlockStmt] { ... } +# 1917| getStmt(0): [ReturnStmt] return ... +# 1917| getExpr(): [VariableAccess] x +# 1917| Type = [IntType] int +# 1917| ValueCategory = prvalue(load) +# 1920| [TopLevelFunction] void test_static_functions_with_assignments() +# 1920| : +# 1920| getEntryPoint(): [BlockStmt] { ... } +# 1921| getStmt(0): [DeclStmt] declaration +# 1921| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c +# 1921| Type = [Class] C +# 1921| getVariable().getInitializer(): [Initializer] initializer for c +# 1921| getExpr(): [ConstructorCall] call to C +# 1921| Type = [VoidType] void # 1921| ValueCategory = prvalue -# 1922| getStmt(3): [DeclStmt] declaration -# 1922| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 1922| getStmt(1): [DeclStmt] declaration +# 1922| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x # 1922| Type = [IntType] int -# 1923| getStmt(4): [ExprStmt] ExprStmt +# 1923| getStmt(2): [ExprStmt] ExprStmt # 1923| getExpr(): [AssignExpr] ... = ... # 1923| Type = [IntType] int # 1923| ValueCategory = lvalue -# 1923| getLValue(): [VariableAccess] y +# 1923| getLValue(): [VariableAccess] x # 1923| Type = [IntType] int # 1923| ValueCategory = lvalue # 1923| getRValue(): [FunctionCall] call to StaticMemberFunction # 1923| Type = [IntType] int # 1923| ValueCategory = prvalue +# 1923| getQualifier(): [VariableAccess] c +# 1923| Type = [Class] C +# 1923| ValueCategory = lvalue # 1923| getArgument(0): [Literal] 10 # 1923| Type = [IntType] int # 1923| Value = [Literal] 10 # 1923| ValueCategory = prvalue -# 1924| getStmt(5): [DeclStmt] declaration -# 1924| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z +# 1924| getStmt(3): [DeclStmt] declaration +# 1924| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y # 1924| Type = [IntType] int -# 1925| getStmt(6): [ExprStmt] ExprStmt +# 1925| getStmt(4): [ExprStmt] ExprStmt # 1925| getExpr(): [AssignExpr] ... = ... # 1925| Type = [IntType] int # 1925| ValueCategory = lvalue -# 1925| getLValue(): [VariableAccess] z +# 1925| getLValue(): [VariableAccess] y # 1925| Type = [IntType] int # 1925| ValueCategory = lvalue -# 1925| getRValue(): [FunctionCall] call to static_function +# 1925| getRValue(): [FunctionCall] call to StaticMemberFunction # 1925| Type = [IntType] int # 1925| ValueCategory = prvalue # 1925| getArgument(0): [Literal] 10 # 1925| Type = [IntType] int # 1925| Value = [Literal] 10 # 1925| ValueCategory = prvalue -# 1926| getStmt(7): [ReturnStmt] return ... -# 1926| getImplicitDestructorCall(0): [DestructorCall] call to ~C -# 1926| Type = [VoidType] void -# 1926| ValueCategory = prvalue -# 1926| getQualifier(): [VariableAccess] c -# 1926| Type = [Class] C -# 1926| ValueCategory = lvalue -# 1928| [TopLevelFunction] void test_double_assign() -# 1928| : -# 1928| getEntryPoint(): [BlockStmt] { ... } -# 1929| getStmt(0): [DeclStmt] declaration -# 1929| getDeclarationEntry(0): [VariableDeclarationEntry] definition of i -# 1929| Type = [IntType] int -# 1929| getDeclarationEntry(1): [VariableDeclarationEntry] definition of j -# 1929| Type = [IntType] int -# 1930| getStmt(1): [ExprStmt] ExprStmt -# 1930| getExpr(): [AssignExpr] ... = ... -# 1930| Type = [IntType] int -# 1930| ValueCategory = lvalue -# 1930| getLValue(): [VariableAccess] i -# 1930| Type = [IntType] int -# 1930| ValueCategory = lvalue -# 1930| getRValue(): [AssignExpr] ... = ... -# 1930| Type = [IntType] int -# 1930| ValueCategory = prvalue(load) -# 1930| getLValue(): [VariableAccess] j -# 1930| Type = [IntType] int -# 1930| ValueCategory = lvalue -# 1930| getRValue(): [Literal] 40 -# 1930| Type = [IntType] int -# 1930| Value = [Literal] 40 -# 1930| ValueCategory = prvalue -# 1931| getStmt(2): [ReturnStmt] return ... -# 1933| [TopLevelFunction] void test_assign_with_assign_operation() -# 1933| : -# 1933| getEntryPoint(): [BlockStmt] { ... } -# 1934| getStmt(0): [DeclStmt] declaration -# 1934| getDeclarationEntry(0): [VariableDeclarationEntry] definition of i -# 1934| Type = [IntType] int -# 1934| getDeclarationEntry(1): [VariableDeclarationEntry] definition of j -# 1934| Type = [IntType] int -# 1934| getVariable().getInitializer(): [Initializer] initializer for j -# 1934| getExpr(): [Literal] 0 -# 1934| Type = [IntType] int -# 1934| Value = [Literal] 0 -# 1934| ValueCategory = prvalue -# 1935| getStmt(1): [ExprStmt] ExprStmt -# 1935| getExpr(): [AssignExpr] ... = ... -# 1935| Type = [IntType] int -# 1935| ValueCategory = lvalue -# 1935| getLValue(): [VariableAccess] i -# 1935| Type = [IntType] int -# 1935| ValueCategory = lvalue -# 1935| getRValue(): [AssignAddExpr] ... += ... -# 1935| Type = [IntType] int -# 1935| ValueCategory = prvalue(load) -# 1935| getLValue(): [VariableAccess] j -# 1935| Type = [IntType] int -# 1935| ValueCategory = lvalue -# 1935| getRValue(): [Literal] 40 -# 1935| Type = [IntType] int -# 1935| Value = [Literal] 40 -# 1935| ValueCategory = prvalue -# 1935| getRValue().getFullyConverted(): [ParenthesisExpr] (...) -# 1935| Type = [IntType] int -# 1935| ValueCategory = prvalue(load) -# 1936| getStmt(2): [ReturnStmt] return ... -# 1938| [CopyAssignmentOperator] D& D::operator=(D const&) -# 1938| : +# 1926| getStmt(5): [DeclStmt] declaration +# 1926| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z +# 1926| Type = [IntType] int +# 1927| getStmt(6): [ExprStmt] ExprStmt +# 1927| getExpr(): [AssignExpr] ... = ... +# 1927| Type = [IntType] int +# 1927| ValueCategory = lvalue +# 1927| getLValue(): [VariableAccess] z +# 1927| Type = [IntType] int +# 1927| ValueCategory = lvalue +# 1927| getRValue(): [FunctionCall] call to static_function +# 1927| Type = [IntType] int +# 1927| ValueCategory = prvalue +# 1927| getArgument(0): [Literal] 10 +# 1927| Type = [IntType] int +# 1927| Value = [Literal] 10 +# 1927| ValueCategory = prvalue +# 1928| getStmt(7): [ReturnStmt] return ... +# 1928| getImplicitDestructorCall(0): [DestructorCall] call to ~C +# 1928| Type = [VoidType] void +# 1928| ValueCategory = prvalue +# 1928| getQualifier(): [VariableAccess] c +# 1928| Type = [Class] C +# 1928| ValueCategory = lvalue +# 1930| [TopLevelFunction] void test_double_assign() +# 1930| : +# 1930| getEntryPoint(): [BlockStmt] { ... } +# 1931| getStmt(0): [DeclStmt] declaration +# 1931| getDeclarationEntry(0): [VariableDeclarationEntry] definition of i +# 1931| Type = [IntType] int +# 1931| getDeclarationEntry(1): [VariableDeclarationEntry] definition of j +# 1931| Type = [IntType] int +# 1932| getStmt(1): [ExprStmt] ExprStmt +# 1932| getExpr(): [AssignExpr] ... = ... +# 1932| Type = [IntType] int +# 1932| ValueCategory = lvalue +# 1932| getLValue(): [VariableAccess] i +# 1932| Type = [IntType] int +# 1932| ValueCategory = lvalue +# 1932| getRValue(): [AssignExpr] ... = ... +# 1932| Type = [IntType] int +# 1932| ValueCategory = prvalue(load) +# 1932| getLValue(): [VariableAccess] j +# 1932| Type = [IntType] int +# 1932| ValueCategory = lvalue +# 1932| getRValue(): [Literal] 40 +# 1932| Type = [IntType] int +# 1932| Value = [Literal] 40 +# 1932| ValueCategory = prvalue +# 1933| getStmt(2): [ReturnStmt] return ... +# 1935| [TopLevelFunction] void test_assign_with_assign_operation() +# 1935| : +# 1935| getEntryPoint(): [BlockStmt] { ... } +# 1936| getStmt(0): [DeclStmt] declaration +# 1936| getDeclarationEntry(0): [VariableDeclarationEntry] definition of i +# 1936| Type = [IntType] int +# 1936| getDeclarationEntry(1): [VariableDeclarationEntry] definition of j +# 1936| Type = [IntType] int +# 1936| getVariable().getInitializer(): [Initializer] initializer for j +# 1936| getExpr(): [Literal] 0 +# 1936| Type = [IntType] int +# 1936| Value = [Literal] 0 +# 1936| ValueCategory = prvalue +# 1937| getStmt(1): [ExprStmt] ExprStmt +# 1937| getExpr(): [AssignExpr] ... = ... +# 1937| Type = [IntType] int +# 1937| ValueCategory = lvalue +# 1937| getLValue(): [VariableAccess] i +# 1937| Type = [IntType] int +# 1937| ValueCategory = lvalue +# 1937| getRValue(): [AssignAddExpr] ... += ... +# 1937| Type = [IntType] int +# 1937| ValueCategory = prvalue(load) +# 1937| getLValue(): [VariableAccess] j +# 1937| Type = [IntType] int +# 1937| ValueCategory = lvalue +# 1937| getRValue(): [Literal] 40 +# 1937| Type = [IntType] int +# 1937| Value = [Literal] 40 +# 1937| ValueCategory = prvalue +# 1937| getRValue().getFullyConverted(): [ParenthesisExpr] (...) +# 1937| Type = [IntType] int +# 1937| ValueCategory = prvalue(load) +# 1938| getStmt(2): [ReturnStmt] return ... +# 1940| [CopyAssignmentOperator] D& D::operator=(D const&) +# 1940| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const D & -# 1938| [MoveAssignmentOperator] D& D::operator=(D&&) -# 1938| : +# 1940| [MoveAssignmentOperator] D& D::operator=(D&&) +# 1940| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] D && -# 1942| [MemberFunction] D& D::ReferenceStaticMemberFunction() -# 1942| : -# 1942| getEntryPoint(): [BlockStmt] { ... } -# 1943| getStmt(0): [ReturnStmt] return ... -# 1943| getExpr(): [VariableAccess] x -# 1943| Type = [Class] D -# 1943| ValueCategory = lvalue -# 1943| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1943| Type = [LValueReferenceType] D & -# 1943| ValueCategory = prvalue -# 1945| [MemberFunction] D D::ObjectStaticMemberFunction() -# 1945| : -# 1945| getEntryPoint(): [BlockStmt] { ... } -# 1946| getStmt(0): [ReturnStmt] return ... -# 1946| getExpr(): [VariableAccess] x -# 1946| Type = [Class] D -# 1946| ValueCategory = prvalue(load) -# 1950| [TopLevelFunction] void test_static_member_functions_with_reference_return() -# 1950| : -# 1950| getEntryPoint(): [BlockStmt] { ... } -# 1951| getStmt(0): [DeclStmt] declaration -# 1951| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d -# 1951| Type = [Class] D -# 1953| getStmt(1): [ExprStmt] ExprStmt -# 1953| getExpr(): [FunctionCall] call to ReferenceStaticMemberFunction -# 1953| Type = [LValueReferenceType] D & -# 1953| ValueCategory = prvalue -# 1953| getQualifier(): [VariableAccess] d -# 1953| Type = [Class] D -# 1953| ValueCategory = lvalue -# 1953| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1944| [MemberFunction] D& D::ReferenceStaticMemberFunction() +# 1944| : +# 1944| getEntryPoint(): [BlockStmt] { ... } +# 1945| getStmt(0): [ReturnStmt] return ... +# 1945| getExpr(): [VariableAccess] x +# 1945| Type = [Class] D +# 1945| ValueCategory = lvalue +# 1945| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1945| Type = [LValueReferenceType] D & +# 1945| ValueCategory = prvalue +# 1947| [MemberFunction] D D::ObjectStaticMemberFunction() +# 1947| : +# 1947| getEntryPoint(): [BlockStmt] { ... } +# 1948| getStmt(0): [ReturnStmt] return ... +# 1948| getExpr(): [VariableAccess] x +# 1948| Type = [Class] D +# 1948| ValueCategory = prvalue(load) +# 1952| [TopLevelFunction] void test_static_member_functions_with_reference_return() +# 1952| : +# 1952| getEntryPoint(): [BlockStmt] { ... } +# 1953| getStmt(0): [DeclStmt] declaration +# 1953| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d # 1953| Type = [Class] D -# 1953| ValueCategory = lvalue -# 1954| getStmt(2): [ExprStmt] ExprStmt -# 1954| getExpr(): [FunctionCall] call to ReferenceStaticMemberFunction -# 1954| Type = [LValueReferenceType] D & -# 1954| ValueCategory = prvalue -# 1954| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1954| Type = [Class] D -# 1954| ValueCategory = lvalue -# 1955| getStmt(3): [ExprStmt] ExprStmt -# 1955| getExpr(): [FunctionCall] call to ObjectStaticMemberFunction -# 1955| Type = [Class] D +# 1955| getStmt(1): [ExprStmt] ExprStmt +# 1955| getExpr(): [FunctionCall] call to ReferenceStaticMemberFunction +# 1955| Type = [LValueReferenceType] D & # 1955| ValueCategory = prvalue # 1955| getQualifier(): [VariableAccess] d # 1955| Type = [Class] D # 1955| ValueCategory = lvalue -# 1956| getStmt(4): [ExprStmt] ExprStmt -# 1956| getExpr(): [FunctionCall] call to ObjectStaticMemberFunction -# 1956| Type = [Class] D +# 1955| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1955| Type = [Class] D +# 1955| ValueCategory = lvalue +# 1956| getStmt(2): [ExprStmt] ExprStmt +# 1956| getExpr(): [FunctionCall] call to ReferenceStaticMemberFunction +# 1956| Type = [LValueReferenceType] D & # 1956| ValueCategory = prvalue -# 1958| getStmt(5): [DeclStmt] declaration -# 1958| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 1956| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1956| Type = [Class] D +# 1956| ValueCategory = lvalue +# 1957| getStmt(3): [ExprStmt] ExprStmt +# 1957| getExpr(): [FunctionCall] call to ObjectStaticMemberFunction +# 1957| Type = [Class] D +# 1957| ValueCategory = prvalue +# 1957| getQualifier(): [VariableAccess] d +# 1957| Type = [Class] D +# 1957| ValueCategory = lvalue +# 1958| getStmt(4): [ExprStmt] ExprStmt +# 1958| getExpr(): [FunctionCall] call to ObjectStaticMemberFunction # 1958| Type = [Class] D -# 1959| getStmt(6): [ExprStmt] ExprStmt -# 1959| getExpr(): [AssignExpr] ... = ... -# 1959| Type = [Class] D -# 1959| ValueCategory = lvalue -# 1959| getLValue(): [VariableAccess] x -# 1959| Type = [Class] D -# 1959| ValueCategory = lvalue -# 1959| getRValue(): [FunctionCall] call to ReferenceStaticMemberFunction -# 1959| Type = [LValueReferenceType] D & -# 1959| ValueCategory = prvalue -# 1959| getQualifier(): [VariableAccess] d -# 1959| Type = [Class] D -# 1959| ValueCategory = lvalue -# 1959| getRValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1959| Type = [Class] D -# 1959| ValueCategory = prvalue(load) -# 1960| getStmt(7): [DeclStmt] declaration -# 1960| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 1958| ValueCategory = prvalue +# 1960| getStmt(5): [DeclStmt] declaration +# 1960| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x # 1960| Type = [Class] D -# 1961| getStmt(8): [ExprStmt] ExprStmt +# 1961| getStmt(6): [ExprStmt] ExprStmt # 1961| getExpr(): [AssignExpr] ... = ... # 1961| Type = [Class] D # 1961| ValueCategory = lvalue -# 1961| getLValue(): [VariableAccess] y +# 1961| getLValue(): [VariableAccess] x # 1961| Type = [Class] D # 1961| ValueCategory = lvalue # 1961| getRValue(): [FunctionCall] call to ReferenceStaticMemberFunction # 1961| Type = [LValueReferenceType] D & # 1961| ValueCategory = prvalue +# 1961| getQualifier(): [VariableAccess] d +# 1961| Type = [Class] D +# 1961| ValueCategory = lvalue # 1961| getRValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) # 1961| Type = [Class] D # 1961| ValueCategory = prvalue(load) -# 1962| getStmt(9): [DeclStmt] declaration -# 1962| getDeclarationEntry(0): [VariableDeclarationEntry] definition of j +# 1962| getStmt(7): [DeclStmt] declaration +# 1962| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y # 1962| Type = [Class] D -# 1963| getStmt(10): [ExprStmt] ExprStmt +# 1963| getStmt(8): [ExprStmt] ExprStmt # 1963| getExpr(): [AssignExpr] ... = ... # 1963| Type = [Class] D # 1963| ValueCategory = lvalue -# 1963| getLValue(): [VariableAccess] j +# 1963| getLValue(): [VariableAccess] y # 1963| Type = [Class] D # 1963| ValueCategory = lvalue -# 1963| getRValue(): [FunctionCall] call to ObjectStaticMemberFunction -# 1963| Type = [Class] D +# 1963| getRValue(): [FunctionCall] call to ReferenceStaticMemberFunction +# 1963| Type = [LValueReferenceType] D & # 1963| ValueCategory = prvalue -# 1963| getQualifier(): [VariableAccess] d -# 1963| Type = [Class] D -# 1963| ValueCategory = lvalue -# 1964| getStmt(11): [DeclStmt] declaration -# 1964| getDeclarationEntry(0): [VariableDeclarationEntry] definition of k +# 1963| getRValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1963| Type = [Class] D +# 1963| ValueCategory = prvalue(load) +# 1964| getStmt(9): [DeclStmt] declaration +# 1964| getDeclarationEntry(0): [VariableDeclarationEntry] definition of j # 1964| Type = [Class] D -# 1965| getStmt(12): [ExprStmt] ExprStmt +# 1965| getStmt(10): [ExprStmt] ExprStmt # 1965| getExpr(): [AssignExpr] ... = ... # 1965| Type = [Class] D # 1965| ValueCategory = lvalue -# 1965| getLValue(): [VariableAccess] k +# 1965| getLValue(): [VariableAccess] j # 1965| Type = [Class] D # 1965| ValueCategory = lvalue # 1965| getRValue(): [FunctionCall] call to ObjectStaticMemberFunction # 1965| Type = [Class] D # 1965| ValueCategory = prvalue -# 1966| getStmt(13): [ReturnStmt] return ... -# 1968| [TopLevelFunction] void test_volatile() -# 1968| : -# 1968| getEntryPoint(): [BlockStmt] { ... } -# 1969| getStmt(0): [DeclStmt] declaration -# 1969| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 1969| Type = [SpecifiedType] volatile int -# 1970| getStmt(1): [ExprStmt] ExprStmt -# 1970| getExpr(): [VariableAccess] x -# 1970| Type = [IntType] int -# 1970| ValueCategory = prvalue(load) -# 1971| getStmt(2): [ReturnStmt] return ... -# 1973| [CopyAssignmentOperator] ValCat& ValCat::operator=(ValCat const&) -# 1973| : +# 1965| getQualifier(): [VariableAccess] d +# 1965| Type = [Class] D +# 1965| ValueCategory = lvalue +# 1966| getStmt(11): [DeclStmt] declaration +# 1966| getDeclarationEntry(0): [VariableDeclarationEntry] definition of k +# 1966| Type = [Class] D +# 1967| getStmt(12): [ExprStmt] ExprStmt +# 1967| getExpr(): [AssignExpr] ... = ... +# 1967| Type = [Class] D +# 1967| ValueCategory = lvalue +# 1967| getLValue(): [VariableAccess] k +# 1967| Type = [Class] D +# 1967| ValueCategory = lvalue +# 1967| getRValue(): [FunctionCall] call to ObjectStaticMemberFunction +# 1967| Type = [Class] D +# 1967| ValueCategory = prvalue +# 1968| getStmt(13): [ReturnStmt] return ... +# 1970| [TopLevelFunction] void test_volatile() +# 1970| : +# 1970| getEntryPoint(): [BlockStmt] { ... } +# 1971| getStmt(0): [DeclStmt] declaration +# 1971| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 1971| Type = [SpecifiedType] volatile int +# 1972| getStmt(1): [ExprStmt] ExprStmt +# 1972| getExpr(): [VariableAccess] x +# 1972| Type = [IntType] int +# 1972| ValueCategory = prvalue(load) +# 1973| getStmt(2): [ReturnStmt] return ... +# 1975| [CopyAssignmentOperator] ValCat& ValCat::operator=(ValCat const&) +# 1975| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const ValCat & -# 1973| [MoveAssignmentOperator] ValCat& ValCat::operator=(ValCat&&) -# 1973| : +# 1975| [MoveAssignmentOperator] ValCat& ValCat::operator=(ValCat&&) +# 1975| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] ValCat && -# 1974| [MemberFunction] ValCat& ValCat::lvalue() -# 1974| : -# 1975| [MemberFunction] ValCat&& ValCat::xvalue() -# 1975| : -# 1976| [MemberFunction] ValCat ValCat::prvalue() +# 1976| [MemberFunction] ValCat& ValCat::lvalue() # 1976| : -# 1979| [TopLevelFunction] void value_category_test() -# 1979| : -# 1979| getEntryPoint(): [BlockStmt] { ... } -# 1980| getStmt(0): [DeclStmt] declaration -# 1980| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c -# 1980| Type = [Struct] ValCat -# 1982| getStmt(1): [ExprStmt] ExprStmt -# 1982| getExpr(): [AssignExpr] ... = ... +# 1977| [MemberFunction] ValCat&& ValCat::xvalue() +# 1977| : +# 1978| [MemberFunction] ValCat ValCat::prvalue() +# 1978| : +# 1981| [TopLevelFunction] void value_category_test() +# 1981| : +# 1981| getEntryPoint(): [BlockStmt] { ... } +# 1982| getStmt(0): [DeclStmt] declaration +# 1982| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c # 1982| Type = [Struct] ValCat -# 1982| ValueCategory = lvalue -# 1982| getLValue(): [FunctionCall] call to lvalue -# 1982| Type = [LValueReferenceType] ValCat & -# 1982| ValueCategory = prvalue -# 1982| getQualifier(): [VariableAccess] c -# 1982| Type = [Struct] ValCat -# 1982| ValueCategory = lvalue -# 1982| getRValue(): [ClassAggregateLiteral] {...} -# 1982| Type = [Struct] ValCat -# 1982| ValueCategory = prvalue -# 1982| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1982| Type = [Struct] ValCat -# 1982| ValueCategory = lvalue -#-----| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object -#-----| Type = [Struct] ValCat -#-----| ValueCategory = prvalue(load) -# 1983| getStmt(2): [ExprStmt] ExprStmt -# 1983| getExpr(): [AssignExpr] ... = ... -# 1983| Type = [Struct] ValCat -# 1983| ValueCategory = lvalue -# 1983| getLValue(): [FunctionCall] call to xvalue -# 1983| Type = [RValueReferenceType] ValCat && -# 1983| ValueCategory = prvalue -# 1983| getQualifier(): [VariableAccess] c -# 1983| Type = [Struct] ValCat -# 1983| ValueCategory = lvalue -# 1983| getRValue(): [ClassAggregateLiteral] {...} -# 1983| Type = [Struct] ValCat -# 1983| ValueCategory = prvalue -# 1983| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1983| Type = [Struct] ValCat -# 1983| ValueCategory = lvalue -#-----| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object -#-----| Type = [Struct] ValCat -#-----| ValueCategory = prvalue(load) -# 1984| getStmt(3): [ExprStmt] ExprStmt +# 1984| getStmt(1): [ExprStmt] ExprStmt # 1984| getExpr(): [AssignExpr] ... = ... # 1984| Type = [Struct] ValCat # 1984| ValueCategory = lvalue -# 1984| getLValue(): [FunctionCall] call to prvalue -# 1984| Type = [Struct] ValCat +# 1984| getLValue(): [FunctionCall] call to lvalue +# 1984| Type = [LValueReferenceType] ValCat & # 1984| ValueCategory = prvalue # 1984| getQualifier(): [VariableAccess] c # 1984| Type = [Struct] ValCat @@ -15112,19 +15080,22 @@ ir.cpp: # 1984| getRValue(): [ClassAggregateLiteral] {...} # 1984| Type = [Struct] ValCat # 1984| ValueCategory = prvalue -# 1984| getLValue().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 1984| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) # 1984| Type = [Struct] ValCat # 1984| ValueCategory = lvalue #-----| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object #-----| Type = [Struct] ValCat #-----| ValueCategory = prvalue(load) -# 1985| getStmt(4): [ExprStmt] ExprStmt +# 1985| getStmt(2): [ExprStmt] ExprStmt # 1985| getExpr(): [AssignExpr] ... = ... # 1985| Type = [Struct] ValCat # 1985| ValueCategory = lvalue -# 1985| getLValue(): [FunctionCall] call to lvalue -# 1985| Type = [LValueReferenceType] ValCat & +# 1985| getLValue(): [FunctionCall] call to xvalue +# 1985| Type = [RValueReferenceType] ValCat && # 1985| ValueCategory = prvalue +# 1985| getQualifier(): [VariableAccess] c +# 1985| Type = [Struct] ValCat +# 1985| ValueCategory = lvalue # 1985| getRValue(): [ClassAggregateLiteral] {...} # 1985| Type = [Struct] ValCat # 1985| ValueCategory = prvalue @@ -15134,127 +15105,123 @@ ir.cpp: #-----| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object #-----| Type = [Struct] ValCat #-----| ValueCategory = prvalue(load) -# 1986| getStmt(5): [ExprStmt] ExprStmt +# 1986| getStmt(3): [ExprStmt] ExprStmt # 1986| getExpr(): [AssignExpr] ... = ... # 1986| Type = [Struct] ValCat # 1986| ValueCategory = lvalue -# 1986| getLValue(): [FunctionCall] call to xvalue -# 1986| Type = [RValueReferenceType] ValCat && +# 1986| getLValue(): [FunctionCall] call to prvalue +# 1986| Type = [Struct] ValCat # 1986| ValueCategory = prvalue +# 1986| getQualifier(): [VariableAccess] c +# 1986| Type = [Struct] ValCat +# 1986| ValueCategory = lvalue # 1986| getRValue(): [ClassAggregateLiteral] {...} # 1986| Type = [Struct] ValCat # 1986| ValueCategory = prvalue -# 1986| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1986| getLValue().getFullyConverted(): [TemporaryObjectExpr] temporary object # 1986| Type = [Struct] ValCat # 1986| ValueCategory = lvalue #-----| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object #-----| Type = [Struct] ValCat #-----| ValueCategory = prvalue(load) -# 1987| getStmt(6): [ExprStmt] ExprStmt +# 1987| getStmt(4): [ExprStmt] ExprStmt # 1987| getExpr(): [AssignExpr] ... = ... # 1987| Type = [Struct] ValCat # 1987| ValueCategory = lvalue -# 1987| getLValue(): [FunctionCall] call to prvalue -# 1987| Type = [Struct] ValCat +# 1987| getLValue(): [FunctionCall] call to lvalue +# 1987| Type = [LValueReferenceType] ValCat & # 1987| ValueCategory = prvalue # 1987| getRValue(): [ClassAggregateLiteral] {...} # 1987| Type = [Struct] ValCat # 1987| ValueCategory = prvalue -# 1987| getLValue().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 1987| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) # 1987| Type = [Struct] ValCat # 1987| ValueCategory = lvalue #-----| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object #-----| Type = [Struct] ValCat #-----| ValueCategory = prvalue(load) -# 1988| getStmt(7): [ReturnStmt] return ... -# 1990| [TopLevelFunction] void SetStaticFuncPtr() -# 1990| : -# 1990| getEntryPoint(): [BlockStmt] { ... } -# 1991| getStmt(0): [DeclStmt] declaration -# 1991| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c -# 1991| Type = [Class] C -# 1991| getVariable().getInitializer(): [Initializer] initializer for c -# 1991| getExpr(): [ConstructorCall] call to C -# 1991| Type = [VoidType] void -# 1991| ValueCategory = prvalue -# 1992| getStmt(1): [DeclStmt] declaration -# 1992| getDeclarationEntry(0): [VariableDeclarationEntry] definition of pfn -# 1992| Type = [FunctionPointerType] ..(*)(..) -# 1992| getVariable().getInitializer(): [Initializer] initializer for pfn -# 1992| getExpr(): [FunctionAccess] StaticMemberFunction -# 1992| Type = [FunctionPointerType] ..(*)(..) -# 1992| ValueCategory = prvalue(load) -# 1993| getStmt(2): [ExprStmt] ExprStmt -# 1993| getExpr(): [AssignExpr] ... = ... -# 1993| Type = [FunctionPointerType] ..(*)(..) -# 1993| ValueCategory = lvalue -# 1993| getLValue(): [VariableAccess] pfn -# 1993| Type = [FunctionPointerType] ..(*)(..) -# 1993| ValueCategory = lvalue -# 1993| getRValue(): [FunctionAccess] StaticMemberFunction -# 1993| Type = [FunctionPointerType] ..(*)(..) -# 1993| ValueCategory = prvalue(load) -# 1993| getQualifier(): [VariableAccess] c -# 1993| Type = [Class] C -# 1993| ValueCategory = lvalue -# 1994| getStmt(3): [ReturnStmt] return ... -# 1994| getImplicitDestructorCall(0): [DestructorCall] call to ~C -# 1994| Type = [VoidType] void -# 1994| ValueCategory = prvalue -# 1994| getQualifier(): [VariableAccess] c -# 1994| Type = [Class] C -# 1994| ValueCategory = lvalue -# 1996| [TopLevelFunction] void TernaryTestInt(bool, int, int, int) -# 1996| : -# 1996| getParameter(0): [Parameter] a -# 1996| Type = [BoolType] bool -# 1996| getParameter(1): [Parameter] x -# 1996| Type = [IntType] int -# 1996| getParameter(2): [Parameter] y -# 1996| Type = [IntType] int -# 1996| getParameter(3): [Parameter] z -# 1996| Type = [IntType] int -# 1996| getEntryPoint(): [BlockStmt] { ... } -# 1997| getStmt(0): [ExprStmt] ExprStmt -# 1997| getExpr(): [AssignExpr] ... = ... -# 1997| Type = [IntType] int -# 1997| ValueCategory = lvalue -# 1997| getLValue(): [VariableAccess] z -# 1997| Type = [IntType] int -# 1997| ValueCategory = lvalue -# 1997| getRValue(): [ConditionalExpr] ... ? ... : ... -# 1997| Type = [IntType] int -# 1997| ValueCategory = prvalue(load) -# 1997| getCondition(): [VariableAccess] a -# 1997| Type = [BoolType] bool -# 1997| ValueCategory = prvalue(load) -# 1997| getThen(): [VariableAccess] x -# 1997| Type = [IntType] int -# 1997| ValueCategory = prvalue(load) -# 1997| getElse(): [VariableAccess] y -# 1997| Type = [IntType] int -# 1997| ValueCategory = prvalue(load) -# 1998| getStmt(1): [ExprStmt] ExprStmt -# 1998| getExpr(): [AssignExpr] ... = ... -# 1998| Type = [IntType] int -# 1998| ValueCategory = lvalue -# 1998| getLValue(): [VariableAccess] z -# 1998| Type = [IntType] int -# 1998| ValueCategory = lvalue -# 1998| getRValue(): [ConditionalExpr] ... ? ... : ... -# 1998| Type = [IntType] int -# 1998| ValueCategory = prvalue(load) -# 1998| getCondition(): [VariableAccess] a -# 1998| Type = [BoolType] bool -# 1998| ValueCategory = prvalue(load) -# 1998| getThen(): [VariableAccess] x -# 1998| Type = [IntType] int -# 1998| ValueCategory = prvalue(load) -# 1998| getElse(): [Literal] 5 -# 1998| Type = [IntType] int -# 1998| Value = [Literal] 5 -# 1998| ValueCategory = prvalue -# 1999| getStmt(2): [ExprStmt] ExprStmt +# 1988| getStmt(5): [ExprStmt] ExprStmt +# 1988| getExpr(): [AssignExpr] ... = ... +# 1988| Type = [Struct] ValCat +# 1988| ValueCategory = lvalue +# 1988| getLValue(): [FunctionCall] call to xvalue +# 1988| Type = [RValueReferenceType] ValCat && +# 1988| ValueCategory = prvalue +# 1988| getRValue(): [ClassAggregateLiteral] {...} +# 1988| Type = [Struct] ValCat +# 1988| ValueCategory = prvalue +# 1988| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1988| Type = [Struct] ValCat +# 1988| ValueCategory = lvalue +#-----| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object +#-----| Type = [Struct] ValCat +#-----| ValueCategory = prvalue(load) +# 1989| getStmt(6): [ExprStmt] ExprStmt +# 1989| getExpr(): [AssignExpr] ... = ... +# 1989| Type = [Struct] ValCat +# 1989| ValueCategory = lvalue +# 1989| getLValue(): [FunctionCall] call to prvalue +# 1989| Type = [Struct] ValCat +# 1989| ValueCategory = prvalue +# 1989| getRValue(): [ClassAggregateLiteral] {...} +# 1989| Type = [Struct] ValCat +# 1989| ValueCategory = prvalue +# 1989| getLValue().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 1989| Type = [Struct] ValCat +# 1989| ValueCategory = lvalue +#-----| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object +#-----| Type = [Struct] ValCat +#-----| ValueCategory = prvalue(load) +# 1990| getStmt(7): [ReturnStmt] return ... +# 1992| [TopLevelFunction] void SetStaticFuncPtr() +# 1992| : +# 1992| getEntryPoint(): [BlockStmt] { ... } +# 1993| getStmt(0): [DeclStmt] declaration +# 1993| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c +# 1993| Type = [Class] C +# 1993| getVariable().getInitializer(): [Initializer] initializer for c +# 1993| getExpr(): [ConstructorCall] call to C +# 1993| Type = [VoidType] void +# 1993| ValueCategory = prvalue +# 1994| getStmt(1): [DeclStmt] declaration +# 1994| getDeclarationEntry(0): [VariableDeclarationEntry] definition of pfn +# 1994| Type = [FunctionPointerType] ..(*)(..) +# 1994| getVariable().getInitializer(): [Initializer] initializer for pfn +# 1994| getExpr(): [FunctionAccess] StaticMemberFunction +# 1994| Type = [FunctionPointerType] ..(*)(..) +# 1994| ValueCategory = prvalue(load) +# 1995| getStmt(2): [ExprStmt] ExprStmt +# 1995| getExpr(): [AssignExpr] ... = ... +# 1995| Type = [FunctionPointerType] ..(*)(..) +# 1995| ValueCategory = lvalue +# 1995| getLValue(): [VariableAccess] pfn +# 1995| Type = [FunctionPointerType] ..(*)(..) +# 1995| ValueCategory = lvalue +# 1995| getRValue(): [FunctionAccess] StaticMemberFunction +# 1995| Type = [FunctionPointerType] ..(*)(..) +# 1995| ValueCategory = prvalue(load) +# 1995| getQualifier(): [VariableAccess] c +# 1995| Type = [Class] C +# 1995| ValueCategory = lvalue +# 1996| getStmt(3): [ReturnStmt] return ... +# 1996| getImplicitDestructorCall(0): [DestructorCall] call to ~C +# 1996| Type = [VoidType] void +# 1996| ValueCategory = prvalue +# 1996| getQualifier(): [VariableAccess] c +# 1996| Type = [Class] C +# 1996| ValueCategory = lvalue +# 1998| [TopLevelFunction] void TernaryTestInt(bool, int, int, int) +# 1998| : +# 1998| getParameter(0): [Parameter] a +# 1998| Type = [BoolType] bool +# 1998| getParameter(1): [Parameter] x +# 1998| Type = [IntType] int +# 1998| getParameter(2): [Parameter] y +# 1998| Type = [IntType] int +# 1998| getParameter(3): [Parameter] z +# 1998| Type = [IntType] int +# 1998| getEntryPoint(): [BlockStmt] { ... } +# 1999| getStmt(0): [ExprStmt] ExprStmt # 1999| getExpr(): [AssignExpr] ... = ... # 1999| Type = [IntType] int # 1999| ValueCategory = lvalue @@ -15263,110 +15230,101 @@ ir.cpp: # 1999| ValueCategory = lvalue # 1999| getRValue(): [ConditionalExpr] ... ? ... : ... # 1999| Type = [IntType] int -# 1999| ValueCategory = prvalue +# 1999| ValueCategory = prvalue(load) # 1999| getCondition(): [VariableAccess] a # 1999| Type = [BoolType] bool # 1999| ValueCategory = prvalue(load) -# 1999| getThen(): [Literal] 3 +# 1999| getThen(): [VariableAccess] x # 1999| Type = [IntType] int -# 1999| Value = [Literal] 3 -# 1999| ValueCategory = prvalue -# 1999| getElse(): [Literal] 5 +# 1999| ValueCategory = prvalue(load) +# 1999| getElse(): [VariableAccess] y # 1999| Type = [IntType] int -# 1999| Value = [Literal] 5 -# 1999| ValueCategory = prvalue -# 2000| getStmt(3): [ExprStmt] ExprStmt +# 1999| ValueCategory = prvalue(load) +# 2000| getStmt(1): [ExprStmt] ExprStmt # 2000| getExpr(): [AssignExpr] ... = ... # 2000| Type = [IntType] int # 2000| ValueCategory = lvalue -# 2000| getLValue(): [ConditionalExpr] ... ? ... : ... +# 2000| getLValue(): [VariableAccess] z # 2000| Type = [IntType] int # 2000| ValueCategory = lvalue +# 2000| getRValue(): [ConditionalExpr] ... ? ... : ... +# 2000| Type = [IntType] int +# 2000| ValueCategory = prvalue(load) # 2000| getCondition(): [VariableAccess] a # 2000| Type = [BoolType] bool # 2000| ValueCategory = prvalue(load) # 2000| getThen(): [VariableAccess] x # 2000| Type = [IntType] int -# 2000| ValueCategory = lvalue -# 2000| getElse(): [VariableAccess] y +# 2000| ValueCategory = prvalue(load) +# 2000| getElse(): [Literal] 5 # 2000| Type = [IntType] int -# 2000| ValueCategory = lvalue -# 2000| getRValue(): [Literal] 7 -# 2000| Type = [IntType] int -# 2000| Value = [Literal] 7 -# 2000| ValueCategory = prvalue -# 2000| getLValue().getFullyConverted(): [ParenthesisExpr] (...) -# 2000| Type = [IntType] int -# 2000| ValueCategory = lvalue -# 2001| getStmt(4): [ReturnStmt] return ... -# 2003| [CopyAssignmentOperator] TernaryPodObj& TernaryPodObj::operator=(TernaryPodObj const&) -# 2003| : +# 2000| Value = [Literal] 5 +# 2000| ValueCategory = prvalue +# 2001| getStmt(2): [ExprStmt] ExprStmt +# 2001| getExpr(): [AssignExpr] ... = ... +# 2001| Type = [IntType] int +# 2001| ValueCategory = lvalue +# 2001| getLValue(): [VariableAccess] z +# 2001| Type = [IntType] int +# 2001| ValueCategory = lvalue +# 2001| getRValue(): [ConditionalExpr] ... ? ... : ... +# 2001| Type = [IntType] int +# 2001| ValueCategory = prvalue +# 2001| getCondition(): [VariableAccess] a +# 2001| Type = [BoolType] bool +# 2001| ValueCategory = prvalue(load) +# 2001| getThen(): [Literal] 3 +# 2001| Type = [IntType] int +# 2001| Value = [Literal] 3 +# 2001| ValueCategory = prvalue +# 2001| getElse(): [Literal] 5 +# 2001| Type = [IntType] int +# 2001| Value = [Literal] 5 +# 2001| ValueCategory = prvalue +# 2002| getStmt(3): [ExprStmt] ExprStmt +# 2002| getExpr(): [AssignExpr] ... = ... +# 2002| Type = [IntType] int +# 2002| ValueCategory = lvalue +# 2002| getLValue(): [ConditionalExpr] ... ? ... : ... +# 2002| Type = [IntType] int +# 2002| ValueCategory = lvalue +# 2002| getCondition(): [VariableAccess] a +# 2002| Type = [BoolType] bool +# 2002| ValueCategory = prvalue(load) +# 2002| getThen(): [VariableAccess] x +# 2002| Type = [IntType] int +# 2002| ValueCategory = lvalue +# 2002| getElse(): [VariableAccess] y +# 2002| Type = [IntType] int +# 2002| ValueCategory = lvalue +# 2002| getRValue(): [Literal] 7 +# 2002| Type = [IntType] int +# 2002| Value = [Literal] 7 +# 2002| ValueCategory = prvalue +# 2002| getLValue().getFullyConverted(): [ParenthesisExpr] (...) +# 2002| Type = [IntType] int +# 2002| ValueCategory = lvalue +# 2003| getStmt(4): [ReturnStmt] return ... +# 2005| [CopyAssignmentOperator] TernaryPodObj& TernaryPodObj::operator=(TernaryPodObj const&) +# 2005| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const TernaryPodObj & -# 2003| [MoveAssignmentOperator] TernaryPodObj& TernaryPodObj::operator=(TernaryPodObj&&) -# 2003| : +# 2005| [MoveAssignmentOperator] TernaryPodObj& TernaryPodObj::operator=(TernaryPodObj&&) +# 2005| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] TernaryPodObj && -# 2006| [TopLevelFunction] void TernaryTestPodObj(bool, TernaryPodObj, TernaryPodObj, TernaryPodObj) -# 2006| : -# 2006| getParameter(0): [Parameter] a -# 2006| Type = [BoolType] bool -# 2006| getParameter(1): [Parameter] x -# 2006| Type = [Struct] TernaryPodObj -# 2006| getParameter(2): [Parameter] y -# 2006| Type = [Struct] TernaryPodObj -# 2006| getParameter(3): [Parameter] z -# 2006| Type = [Struct] TernaryPodObj -# 2006| getEntryPoint(): [BlockStmt] { ... } -# 2007| getStmt(0): [ExprStmt] ExprStmt -# 2007| getExpr(): [AssignExpr] ... = ... -# 2007| Type = [Struct] TernaryPodObj -# 2007| ValueCategory = lvalue -# 2007| getLValue(): [VariableAccess] z -# 2007| Type = [Struct] TernaryPodObj -# 2007| ValueCategory = lvalue -# 2007| getRValue(): [ConditionalExpr] ... ? ... : ... -# 2007| Type = [Struct] TernaryPodObj -# 2007| ValueCategory = prvalue(load) -# 2007| getCondition(): [VariableAccess] a -# 2007| Type = [BoolType] bool -# 2007| ValueCategory = prvalue(load) -# 2007| getThen(): [VariableAccess] x -# 2007| Type = [Struct] TernaryPodObj -# 2007| ValueCategory = prvalue(load) -# 2007| getElse(): [VariableAccess] y -# 2007| Type = [Struct] TernaryPodObj -# 2007| ValueCategory = prvalue(load) -# 2008| getStmt(1): [ExprStmt] ExprStmt -# 2008| getExpr(): [AssignExpr] ... = ... -# 2008| Type = [Struct] TernaryPodObj -# 2008| ValueCategory = lvalue -# 2008| getLValue(): [VariableAccess] z -# 2008| Type = [Struct] TernaryPodObj -# 2008| ValueCategory = lvalue -# 2008| getRValue(): [ConditionalExpr] ... ? ... : ... -# 2008| Type = [Struct] TernaryPodObj -# 2008| ValueCategory = prvalue -# 2008| getCondition(): [VariableAccess] a -# 2008| Type = [BoolType] bool -# 2008| ValueCategory = prvalue(load) -# 2008| getThen(): [VariableAccess] x -# 2008| Type = [Struct] TernaryPodObj -# 2008| ValueCategory = prvalue(load) -# 2008| getElse(): [Literal] 0 -# 2008| Type = [Struct] TernaryPodObj -# 2008| Value = [Literal] 0 -# 2008| ValueCategory = prvalue -# 2008| getThen().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2008| Type = [Struct] TernaryPodObj -# 2008| ValueCategory = prvalue(load) -# 2008| getElse().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2008| Type = [Struct] TernaryPodObj -# 2008| ValueCategory = prvalue(load) -# 2008| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2008| Type = [Struct] TernaryPodObj -# 2008| ValueCategory = prvalue(load) -# 2009| getStmt(2): [ExprStmt] ExprStmt +# 2008| [TopLevelFunction] void TernaryTestPodObj(bool, TernaryPodObj, TernaryPodObj, TernaryPodObj) +# 2008| : +# 2008| getParameter(0): [Parameter] a +# 2008| Type = [BoolType] bool +# 2008| getParameter(1): [Parameter] x +# 2008| Type = [Struct] TernaryPodObj +# 2008| getParameter(2): [Parameter] y +# 2008| Type = [Struct] TernaryPodObj +# 2008| getParameter(3): [Parameter] z +# 2008| Type = [Struct] TernaryPodObj +# 2008| getEntryPoint(): [BlockStmt] { ... } +# 2009| getStmt(0): [ExprStmt] ExprStmt # 2009| getExpr(): [AssignExpr] ... = ... # 2009| Type = [Struct] TernaryPodObj # 2009| ValueCategory = lvalue @@ -15375,62 +15333,110 @@ ir.cpp: # 2009| ValueCategory = lvalue # 2009| getRValue(): [ConditionalExpr] ... ? ... : ... # 2009| Type = [Struct] TernaryPodObj -# 2009| ValueCategory = prvalue +# 2009| ValueCategory = prvalue(load) # 2009| getCondition(): [VariableAccess] a # 2009| Type = [BoolType] bool # 2009| ValueCategory = prvalue(load) -# 2009| getThen(): [Literal] 0 -# 2009| Type = [Struct] TernaryPodObj -# 2009| Value = [Literal] 0 -# 2009| ValueCategory = prvalue -# 2009| getElse(): [Literal] 0 -# 2009| Type = [Struct] TernaryPodObj -# 2009| Value = [Literal] 0 -# 2009| ValueCategory = prvalue -# 2009| getThen().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2009| getThen(): [VariableAccess] x # 2009| Type = [Struct] TernaryPodObj # 2009| ValueCategory = prvalue(load) -# 2009| getElse().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2009| getElse(): [VariableAccess] y # 2009| Type = [Struct] TernaryPodObj # 2009| ValueCategory = prvalue(load) -# 2009| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2009| Type = [Struct] TernaryPodObj -# 2009| ValueCategory = prvalue(load) -# 2010| getStmt(3): [ExprStmt] ExprStmt +# 2010| getStmt(1): [ExprStmt] ExprStmt # 2010| getExpr(): [AssignExpr] ... = ... # 2010| Type = [Struct] TernaryPodObj # 2010| ValueCategory = lvalue -# 2010| getLValue(): [AssignExpr] ... = ... +# 2010| getLValue(): [VariableAccess] z # 2010| Type = [Struct] TernaryPodObj # 2010| ValueCategory = lvalue -# 2010| getLValue(): [VariableAccess] z -# 2010| Type = [Struct] TernaryPodObj -# 2010| ValueCategory = lvalue -# 2010| getRValue(): [ConditionalExpr] ... ? ... : ... +# 2010| getRValue(): [ConditionalExpr] ... ? ... : ... +# 2010| Type = [Struct] TernaryPodObj +# 2010| ValueCategory = prvalue +# 2010| getCondition(): [VariableAccess] a +# 2010| Type = [BoolType] bool +# 2010| ValueCategory = prvalue(load) +# 2010| getThen(): [VariableAccess] x +# 2010| Type = [Struct] TernaryPodObj +# 2010| ValueCategory = prvalue(load) +# 2010| getElse(): [Literal] 0 +# 2010| Type = [Struct] TernaryPodObj +# 2010| Value = [Literal] 0 +# 2010| ValueCategory = prvalue +# 2010| getThen().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2010| Type = [Struct] TernaryPodObj +# 2010| ValueCategory = prvalue(load) +# 2010| getElse().getFullyConverted(): [TemporaryObjectExpr] temporary object # 2010| Type = [Struct] TernaryPodObj # 2010| ValueCategory = prvalue(load) -# 2010| getCondition(): [VariableAccess] a -# 2010| Type = [BoolType] bool -# 2010| ValueCategory = prvalue(load) -# 2010| getThen(): [VariableAccess] x -# 2010| Type = [Struct] TernaryPodObj -# 2010| ValueCategory = prvalue(load) -# 2010| getElse(): [VariableAccess] y -# 2010| Type = [Struct] TernaryPodObj -# 2010| ValueCategory = prvalue(load) -# 2010| getRValue(): [Literal] 0 -# 2010| Type = [Struct] TernaryPodObj -# 2010| Value = [Literal] 0 -# 2010| ValueCategory = prvalue -# 2010| getLValue().getFullyConverted(): [ParenthesisExpr] (...) -# 2010| Type = [Struct] TernaryPodObj -# 2010| ValueCategory = lvalue # 2010| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object # 2010| Type = [Struct] TernaryPodObj # 2010| ValueCategory = prvalue(load) -# 2011| getStmt(4): [ReturnStmt] return ... -# 2013| [CopyAssignmentOperator] TernaryNonPodObj& TernaryNonPodObj::operator=(TernaryNonPodObj const&) -# 2013| : +# 2011| getStmt(2): [ExprStmt] ExprStmt +# 2011| getExpr(): [AssignExpr] ... = ... +# 2011| Type = [Struct] TernaryPodObj +# 2011| ValueCategory = lvalue +# 2011| getLValue(): [VariableAccess] z +# 2011| Type = [Struct] TernaryPodObj +# 2011| ValueCategory = lvalue +# 2011| getRValue(): [ConditionalExpr] ... ? ... : ... +# 2011| Type = [Struct] TernaryPodObj +# 2011| ValueCategory = prvalue +# 2011| getCondition(): [VariableAccess] a +# 2011| Type = [BoolType] bool +# 2011| ValueCategory = prvalue(load) +# 2011| getThen(): [Literal] 0 +# 2011| Type = [Struct] TernaryPodObj +# 2011| Value = [Literal] 0 +# 2011| ValueCategory = prvalue +# 2011| getElse(): [Literal] 0 +# 2011| Type = [Struct] TernaryPodObj +# 2011| Value = [Literal] 0 +# 2011| ValueCategory = prvalue +# 2011| getThen().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2011| Type = [Struct] TernaryPodObj +# 2011| ValueCategory = prvalue(load) +# 2011| getElse().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2011| Type = [Struct] TernaryPodObj +# 2011| ValueCategory = prvalue(load) +# 2011| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2011| Type = [Struct] TernaryPodObj +# 2011| ValueCategory = prvalue(load) +# 2012| getStmt(3): [ExprStmt] ExprStmt +# 2012| getExpr(): [AssignExpr] ... = ... +# 2012| Type = [Struct] TernaryPodObj +# 2012| ValueCategory = lvalue +# 2012| getLValue(): [AssignExpr] ... = ... +# 2012| Type = [Struct] TernaryPodObj +# 2012| ValueCategory = lvalue +# 2012| getLValue(): [VariableAccess] z +# 2012| Type = [Struct] TernaryPodObj +# 2012| ValueCategory = lvalue +# 2012| getRValue(): [ConditionalExpr] ... ? ... : ... +# 2012| Type = [Struct] TernaryPodObj +# 2012| ValueCategory = prvalue(load) +# 2012| getCondition(): [VariableAccess] a +# 2012| Type = [BoolType] bool +# 2012| ValueCategory = prvalue(load) +# 2012| getThen(): [VariableAccess] x +# 2012| Type = [Struct] TernaryPodObj +# 2012| ValueCategory = prvalue(load) +# 2012| getElse(): [VariableAccess] y +# 2012| Type = [Struct] TernaryPodObj +# 2012| ValueCategory = prvalue(load) +# 2012| getRValue(): [Literal] 0 +# 2012| Type = [Struct] TernaryPodObj +# 2012| Value = [Literal] 0 +# 2012| ValueCategory = prvalue +# 2012| getLValue().getFullyConverted(): [ParenthesisExpr] (...) +# 2012| Type = [Struct] TernaryPodObj +# 2012| ValueCategory = lvalue +# 2012| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2012| Type = [Struct] TernaryPodObj +# 2012| ValueCategory = prvalue(load) +# 2013| getStmt(4): [ReturnStmt] return ... +# 2015| [CopyAssignmentOperator] TernaryNonPodObj& TernaryNonPodObj::operator=(TernaryNonPodObj const&) +# 2015| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const TernaryNonPodObj & #-----| getEntryPoint(): [BlockStmt] { ... } @@ -15444,112 +15450,35 @@ ir.cpp: #-----| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) #-----| Type = [LValueReferenceType] TernaryNonPodObj & #-----| ValueCategory = prvalue -# 2013| [Constructor] void TernaryNonPodObj::TernaryNonPodObj() -# 2013| : -# 2013| : -# 2013| getEntryPoint(): [BlockStmt] { ... } -# 2013| getStmt(0): [ReturnStmt] return ... -# 2013| [CopyConstructor] void TernaryNonPodObj::TernaryNonPodObj(TernaryNonPodObj const&) -# 2013| : +# 2015| [Constructor] void TernaryNonPodObj::TernaryNonPodObj() +# 2015| : +# 2015| : +# 2015| getEntryPoint(): [BlockStmt] { ... } +# 2015| getStmt(0): [ReturnStmt] return ... +# 2015| [CopyConstructor] void TernaryNonPodObj::TernaryNonPodObj(TernaryNonPodObj const&) +# 2015| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const TernaryNonPodObj & -# 2013| : -# 2013| getEntryPoint(): [BlockStmt] { ... } -# 2013| getStmt(0): [ReturnStmt] return ... -# 2014| [Destructor,VirtualFunction] void TernaryNonPodObj::~TernaryNonPodObj() -# 2014| : -# 2014| getEntryPoint(): [BlockStmt] { ... } -# 2014| getStmt(0): [ReturnStmt] return ... -# 2014| : -# 2017| [TopLevelFunction] void TernaryTestNonPodObj(bool, TernaryNonPodObj, TernaryNonPodObj, TernaryNonPodObj) -# 2017| : -# 2017| getParameter(0): [Parameter] a -# 2017| Type = [BoolType] bool -# 2017| getParameter(1): [Parameter] x -# 2017| Type = [Struct] TernaryNonPodObj -# 2017| getParameter(2): [Parameter] y -# 2017| Type = [Struct] TernaryNonPodObj -# 2017| getParameter(3): [Parameter] z -# 2017| Type = [Struct] TernaryNonPodObj -# 2017| getEntryPoint(): [BlockStmt] { ... } -# 2018| getStmt(0): [ExprStmt] ExprStmt -# 2018| getExpr(): [FunctionCall] call to operator= -# 2018| Type = [LValueReferenceType] TernaryNonPodObj & -# 2018| ValueCategory = prvalue -# 2018| getQualifier(): [VariableAccess] z -# 2018| Type = [Struct] TernaryNonPodObj -# 2018| ValueCategory = lvalue -# 2018| getArgument(0): [ConditionalExpr] ... ? ... : ... -# 2018| Type = [Struct] TernaryNonPodObj -# 2018| ValueCategory = lvalue -# 2018| getCondition(): [VariableAccess] a -# 2018| Type = [BoolType] bool -# 2018| ValueCategory = prvalue(load) -# 2018| getThen(): [VariableAccess] x -# 2018| Type = [Struct] TernaryNonPodObj -# 2018| ValueCategory = lvalue -# 2018| getElse(): [VariableAccess] y -# 2018| Type = [Struct] TernaryNonPodObj -# 2018| ValueCategory = lvalue -# 2018| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 2018| Type = [LValueReferenceType] const TernaryNonPodObj & -# 2018| ValueCategory = prvalue -# 2018| getExpr(): [CStyleCast] (const TernaryNonPodObj)... -# 2018| Conversion = [GlvalueConversion] glvalue conversion -# 2018| Type = [SpecifiedType] const TernaryNonPodObj -# 2018| ValueCategory = lvalue -# 2018| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2018| Type = [Struct] TernaryNonPodObj -# 2018| ValueCategory = lvalue -# 2019| getStmt(1): [ExprStmt] ExprStmt -# 2019| getExpr(): [FunctionCall] call to operator= -# 2019| Type = [LValueReferenceType] TernaryNonPodObj & -# 2019| ValueCategory = prvalue -# 2019| getQualifier(): [VariableAccess] z -# 2019| Type = [Struct] TernaryNonPodObj -# 2019| ValueCategory = lvalue -# 2019| getArgument(0): [ConditionalExpr] ... ? ... : ... -# 2019| Type = [Struct] TernaryNonPodObj -# 2019| ValueCategory = prvalue -# 2019| getCondition(): [VariableAccess] a -# 2019| Type = [BoolType] bool -# 2019| ValueCategory = prvalue(load) -# 2019| getThen(): [ConstructorCall] call to TernaryNonPodObj -# 2019| Type = [VoidType] void -# 2019| ValueCategory = prvalue -# 2019| getArgument(0): [VariableAccess] x -# 2019| Type = [Struct] TernaryNonPodObj -# 2019| ValueCategory = lvalue -# 2019| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 2019| Type = [LValueReferenceType] const TernaryNonPodObj & -# 2019| ValueCategory = prvalue -# 2019| getExpr(): [CStyleCast] (const TernaryNonPodObj)... -# 2019| Conversion = [GlvalueConversion] glvalue conversion -# 2019| Type = [SpecifiedType] const TernaryNonPodObj -# 2019| ValueCategory = lvalue -# 2019| getElse(): [ConstructorCall] call to TernaryNonPodObj -# 2019| Type = [VoidType] void -# 2019| ValueCategory = prvalue -# 2019| getThen().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2019| Type = [Struct] TernaryNonPodObj -# 2019| ValueCategory = prvalue(load) -# 2019| getElse().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2019| Type = [Struct] TernaryNonPodObj -# 2019| ValueCategory = prvalue(load) -# 2019| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 2019| Type = [LValueReferenceType] const TernaryNonPodObj & -# 2019| ValueCategory = prvalue -# 2019| getExpr(): [CStyleCast] (const TernaryNonPodObj)... -# 2019| Conversion = [GlvalueConversion] glvalue conversion -# 2019| Type = [SpecifiedType] const TernaryNonPodObj -# 2019| ValueCategory = lvalue -# 2019| getExpr(): [TemporaryObjectExpr] temporary object -# 2019| Type = [Struct] TernaryNonPodObj -# 2019| ValueCategory = lvalue -# 2019| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2019| Type = [Struct] TernaryNonPodObj -# 2019| ValueCategory = lvalue -# 2020| getStmt(2): [ExprStmt] ExprStmt +# 2015| : +# 2015| getEntryPoint(): [BlockStmt] { ... } +# 2015| getStmt(0): [ReturnStmt] return ... +# 2016| [Destructor,VirtualFunction] void TernaryNonPodObj::~TernaryNonPodObj() +# 2016| : +# 2016| getEntryPoint(): [BlockStmt] { ... } +# 2016| getStmt(0): [ReturnStmt] return ... +# 2016| : +# 2019| [TopLevelFunction] void TernaryTestNonPodObj(bool, TernaryNonPodObj, TernaryNonPodObj, TernaryNonPodObj) +# 2019| : +# 2019| getParameter(0): [Parameter] a +# 2019| Type = [BoolType] bool +# 2019| getParameter(1): [Parameter] x +# 2019| Type = [Struct] TernaryNonPodObj +# 2019| getParameter(2): [Parameter] y +# 2019| Type = [Struct] TernaryNonPodObj +# 2019| getParameter(3): [Parameter] z +# 2019| Type = [Struct] TernaryNonPodObj +# 2019| getEntryPoint(): [BlockStmt] { ... } +# 2020| getStmt(0): [ExprStmt] ExprStmt # 2020| getExpr(): [FunctionCall] call to operator= # 2020| Type = [LValueReferenceType] TernaryNonPodObj & # 2020| ValueCategory = prvalue @@ -15558,22 +15487,16 @@ ir.cpp: # 2020| ValueCategory = lvalue # 2020| getArgument(0): [ConditionalExpr] ... ? ... : ... # 2020| Type = [Struct] TernaryNonPodObj -# 2020| ValueCategory = prvalue +# 2020| ValueCategory = lvalue # 2020| getCondition(): [VariableAccess] a # 2020| Type = [BoolType] bool # 2020| ValueCategory = prvalue(load) -# 2020| getThen(): [ConstructorCall] call to TernaryNonPodObj -# 2020| Type = [VoidType] void -# 2020| ValueCategory = prvalue -# 2020| getElse(): [ConstructorCall] call to TernaryNonPodObj -# 2020| Type = [VoidType] void -# 2020| ValueCategory = prvalue -# 2020| getThen().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2020| getThen(): [VariableAccess] x # 2020| Type = [Struct] TernaryNonPodObj -# 2020| ValueCategory = prvalue(load) -# 2020| getElse().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2020| ValueCategory = lvalue +# 2020| getElse(): [VariableAccess] y # 2020| Type = [Struct] TernaryNonPodObj -# 2020| ValueCategory = prvalue(load) +# 2020| ValueCategory = lvalue # 2020| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) # 2020| Type = [LValueReferenceType] const TernaryNonPodObj & # 2020| ValueCategory = prvalue @@ -15581,50 +15504,44 @@ ir.cpp: # 2020| Conversion = [GlvalueConversion] glvalue conversion # 2020| Type = [SpecifiedType] const TernaryNonPodObj # 2020| ValueCategory = lvalue -# 2020| getExpr(): [TemporaryObjectExpr] temporary object -# 2020| Type = [Struct] TernaryNonPodObj -# 2020| ValueCategory = lvalue # 2020| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) # 2020| Type = [Struct] TernaryNonPodObj # 2020| ValueCategory = lvalue -# 2021| getStmt(3): [ExprStmt] ExprStmt +# 2021| getStmt(1): [ExprStmt] ExprStmt # 2021| getExpr(): [FunctionCall] call to operator= # 2021| Type = [LValueReferenceType] TernaryNonPodObj & # 2021| ValueCategory = prvalue -# 2021| getQualifier(): [FunctionCall] call to operator= -# 2021| Type = [LValueReferenceType] TernaryNonPodObj & -# 2021| ValueCategory = prvalue -# 2021| getQualifier(): [VariableAccess] z -# 2021| Type = [Struct] TernaryNonPodObj -# 2021| ValueCategory = lvalue -# 2021| getArgument(0): [ConditionalExpr] ... ? ... : ... -# 2021| Type = [Struct] TernaryNonPodObj -# 2021| ValueCategory = lvalue -# 2021| getCondition(): [VariableAccess] a -# 2021| Type = [BoolType] bool -# 2021| ValueCategory = prvalue(load) -# 2021| getThen(): [VariableAccess] x -# 2021| Type = [Struct] TernaryNonPodObj -# 2021| ValueCategory = lvalue -# 2021| getElse(): [VariableAccess] y -# 2021| Type = [Struct] TernaryNonPodObj -# 2021| ValueCategory = lvalue -# 2021| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 2021| Type = [LValueReferenceType] const TernaryNonPodObj & -# 2021| ValueCategory = prvalue -# 2021| getExpr(): [CStyleCast] (const TernaryNonPodObj)... -# 2021| Conversion = [GlvalueConversion] glvalue conversion -# 2021| Type = [SpecifiedType] const TernaryNonPodObj -# 2021| ValueCategory = lvalue -# 2021| getArgument(0): [ConstructorCall] call to TernaryNonPodObj -# 2021| Type = [VoidType] void -# 2021| ValueCategory = prvalue -# 2021| getQualifier().getFullyConverted(): [ParenthesisExpr] (...) +# 2021| getQualifier(): [VariableAccess] z # 2021| Type = [Struct] TernaryNonPodObj # 2021| ValueCategory = lvalue -# 2021| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 2021| getArgument(0): [ConditionalExpr] ... ? ... : ... +# 2021| Type = [Struct] TernaryNonPodObj +# 2021| ValueCategory = prvalue +# 2021| getCondition(): [VariableAccess] a +# 2021| Type = [BoolType] bool +# 2021| ValueCategory = prvalue(load) +# 2021| getThen(): [ConstructorCall] call to TernaryNonPodObj +# 2021| Type = [VoidType] void +# 2021| ValueCategory = prvalue +# 2021| getArgument(0): [VariableAccess] x +# 2021| Type = [Struct] TernaryNonPodObj +# 2021| ValueCategory = lvalue +# 2021| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 2021| Type = [LValueReferenceType] const TernaryNonPodObj & +# 2021| ValueCategory = prvalue +# 2021| getExpr(): [CStyleCast] (const TernaryNonPodObj)... +# 2021| Conversion = [GlvalueConversion] glvalue conversion +# 2021| Type = [SpecifiedType] const TernaryNonPodObj +# 2021| ValueCategory = lvalue +# 2021| getElse(): [ConstructorCall] call to TernaryNonPodObj +# 2021| Type = [VoidType] void +# 2021| ValueCategory = prvalue +# 2021| getThen().getFullyConverted(): [TemporaryObjectExpr] temporary object # 2021| Type = [Struct] TernaryNonPodObj -# 2021| ValueCategory = lvalue +# 2021| ValueCategory = prvalue(load) +# 2021| getElse().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2021| Type = [Struct] TernaryNonPodObj +# 2021| ValueCategory = prvalue(load) # 2021| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) # 2021| Type = [LValueReferenceType] const TernaryNonPodObj & # 2021| ValueCategory = prvalue @@ -15638,525 +15555,614 @@ ir.cpp: # 2021| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) # 2021| Type = [Struct] TernaryNonPodObj # 2021| ValueCategory = lvalue -# 2022| getStmt(4): [ReturnStmt] return ... -# 2024| [TopLevelFunction] void CommaTestHelper(unsigned int) -# 2024| : -# 2024| getParameter(0): [Parameter] (unnamed parameter 0) -# 2024| Type = [IntType] unsigned int -# 2026| [TopLevelFunction] unsigned int CommaTest(unsigned int) +# 2022| getStmt(2): [ExprStmt] ExprStmt +# 2022| getExpr(): [FunctionCall] call to operator= +# 2022| Type = [LValueReferenceType] TernaryNonPodObj & +# 2022| ValueCategory = prvalue +# 2022| getQualifier(): [VariableAccess] z +# 2022| Type = [Struct] TernaryNonPodObj +# 2022| ValueCategory = lvalue +# 2022| getArgument(0): [ConditionalExpr] ... ? ... : ... +# 2022| Type = [Struct] TernaryNonPodObj +# 2022| ValueCategory = prvalue +# 2022| getCondition(): [VariableAccess] a +# 2022| Type = [BoolType] bool +# 2022| ValueCategory = prvalue(load) +# 2022| getThen(): [ConstructorCall] call to TernaryNonPodObj +# 2022| Type = [VoidType] void +# 2022| ValueCategory = prvalue +# 2022| getElse(): [ConstructorCall] call to TernaryNonPodObj +# 2022| Type = [VoidType] void +# 2022| ValueCategory = prvalue +# 2022| getThen().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2022| Type = [Struct] TernaryNonPodObj +# 2022| ValueCategory = prvalue(load) +# 2022| getElse().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2022| Type = [Struct] TernaryNonPodObj +# 2022| ValueCategory = prvalue(load) +# 2022| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 2022| Type = [LValueReferenceType] const TernaryNonPodObj & +# 2022| ValueCategory = prvalue +# 2022| getExpr(): [CStyleCast] (const TernaryNonPodObj)... +# 2022| Conversion = [GlvalueConversion] glvalue conversion +# 2022| Type = [SpecifiedType] const TernaryNonPodObj +# 2022| ValueCategory = lvalue +# 2022| getExpr(): [TemporaryObjectExpr] temporary object +# 2022| Type = [Struct] TernaryNonPodObj +# 2022| ValueCategory = lvalue +# 2022| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2022| Type = [Struct] TernaryNonPodObj +# 2022| ValueCategory = lvalue +# 2023| getStmt(3): [ExprStmt] ExprStmt +# 2023| getExpr(): [FunctionCall] call to operator= +# 2023| Type = [LValueReferenceType] TernaryNonPodObj & +# 2023| ValueCategory = prvalue +# 2023| getQualifier(): [FunctionCall] call to operator= +# 2023| Type = [LValueReferenceType] TernaryNonPodObj & +# 2023| ValueCategory = prvalue +# 2023| getQualifier(): [VariableAccess] z +# 2023| Type = [Struct] TernaryNonPodObj +# 2023| ValueCategory = lvalue +# 2023| getArgument(0): [ConditionalExpr] ... ? ... : ... +# 2023| Type = [Struct] TernaryNonPodObj +# 2023| ValueCategory = lvalue +# 2023| getCondition(): [VariableAccess] a +# 2023| Type = [BoolType] bool +# 2023| ValueCategory = prvalue(load) +# 2023| getThen(): [VariableAccess] x +# 2023| Type = [Struct] TernaryNonPodObj +# 2023| ValueCategory = lvalue +# 2023| getElse(): [VariableAccess] y +# 2023| Type = [Struct] TernaryNonPodObj +# 2023| ValueCategory = lvalue +# 2023| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 2023| Type = [LValueReferenceType] const TernaryNonPodObj & +# 2023| ValueCategory = prvalue +# 2023| getExpr(): [CStyleCast] (const TernaryNonPodObj)... +# 2023| Conversion = [GlvalueConversion] glvalue conversion +# 2023| Type = [SpecifiedType] const TernaryNonPodObj +# 2023| ValueCategory = lvalue +# 2023| getArgument(0): [ConstructorCall] call to TernaryNonPodObj +# 2023| Type = [VoidType] void +# 2023| ValueCategory = prvalue +# 2023| getQualifier().getFullyConverted(): [ParenthesisExpr] (...) +# 2023| Type = [Struct] TernaryNonPodObj +# 2023| ValueCategory = lvalue +# 2023| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 2023| Type = [Struct] TernaryNonPodObj +# 2023| ValueCategory = lvalue +# 2023| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 2023| Type = [LValueReferenceType] const TernaryNonPodObj & +# 2023| ValueCategory = prvalue +# 2023| getExpr(): [CStyleCast] (const TernaryNonPodObj)... +# 2023| Conversion = [GlvalueConversion] glvalue conversion +# 2023| Type = [SpecifiedType] const TernaryNonPodObj +# 2023| ValueCategory = lvalue +# 2023| getExpr(): [TemporaryObjectExpr] temporary object +# 2023| Type = [Struct] TernaryNonPodObj +# 2023| ValueCategory = lvalue +# 2023| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2023| Type = [Struct] TernaryNonPodObj +# 2023| ValueCategory = lvalue +# 2024| getStmt(4): [ReturnStmt] return ... +# 2026| [TopLevelFunction] void CommaTestHelper(unsigned int) # 2026| : -# 2026| getParameter(0): [Parameter] x +# 2026| getParameter(0): [Parameter] (unnamed parameter 0) # 2026| Type = [IntType] unsigned int -# 2026| getEntryPoint(): [BlockStmt] { ... } -# 2027| getStmt(0): [DeclStmt] declaration -# 2027| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y -# 2027| Type = [IntType] unsigned int -# 2028| getStmt(1): [ExprStmt] ExprStmt -# 2028| getExpr(): [AssignExpr] ... = ... -# 2028| Type = [IntType] unsigned int -# 2028| ValueCategory = lvalue -# 2028| getLValue(): [VariableAccess] y -# 2028| Type = [IntType] unsigned int -# 2028| ValueCategory = lvalue -# 2028| getRValue(): [ConditionalExpr] ... ? ... : ... -# 2028| Type = [IntType] unsigned int -# 2028| ValueCategory = prvalue(load) -# 2028| getCondition(): [LTExpr] ... < ... -# 2028| Type = [BoolType] bool -# 2028| ValueCategory = prvalue -# 2028| getLesserOperand(): [VariableAccess] x -# 2028| Type = [IntType] unsigned int -# 2028| ValueCategory = prvalue(load) -# 2028| getGreaterOperand(): [Literal] 100 -# 2028| Type = [IntType] int -# 2028| Value = [Literal] 100 -# 2028| ValueCategory = prvalue -# 2028| getGreaterOperand().getFullyConverted(): [CStyleCast] (unsigned int)... -# 2028| Conversion = [IntegralConversion] integral conversion -# 2028| Type = [IntType] unsigned int -# 2028| Value = [CStyleCast] 100 -# 2028| ValueCategory = prvalue -# 2029| getThen(): [CommaExpr] ... , ... -# 2029| Type = [IntType] unsigned int -# 2029| ValueCategory = prvalue(load) -# 2029| getLeftOperand(): [FunctionCall] call to CommaTestHelper -# 2029| Type = [VoidType] void -# 2029| ValueCategory = prvalue -# 2029| getArgument(0): [VariableAccess] x -# 2029| Type = [IntType] unsigned int -# 2029| ValueCategory = prvalue(load) -# 2029| getRightOperand(): [VariableAccess] x -# 2029| Type = [IntType] unsigned int -# 2029| ValueCategory = prvalue(load) -# 2030| getElse(): [CommaExpr] ... , ... -# 2030| Type = [IntType] int +# 2028| [TopLevelFunction] unsigned int CommaTest(unsigned int) +# 2028| : +# 2028| getParameter(0): [Parameter] x +# 2028| Type = [IntType] unsigned int +# 2028| getEntryPoint(): [BlockStmt] { ... } +# 2029| getStmt(0): [DeclStmt] declaration +# 2029| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 2029| Type = [IntType] unsigned int +# 2030| getStmt(1): [ExprStmt] ExprStmt +# 2030| getExpr(): [AssignExpr] ... = ... +# 2030| Type = [IntType] unsigned int +# 2030| ValueCategory = lvalue +# 2030| getLValue(): [VariableAccess] y +# 2030| Type = [IntType] unsigned int +# 2030| ValueCategory = lvalue +# 2030| getRValue(): [ConditionalExpr] ... ? ... : ... +# 2030| Type = [IntType] unsigned int +# 2030| ValueCategory = prvalue(load) +# 2030| getCondition(): [LTExpr] ... < ... +# 2030| Type = [BoolType] bool # 2030| ValueCategory = prvalue -# 2030| getLeftOperand(): [FunctionCall] call to CommaTestHelper -# 2030| Type = [VoidType] void -# 2030| ValueCategory = prvalue -# 2030| getArgument(0): [VariableAccess] x -# 2030| Type = [IntType] unsigned int -# 2030| ValueCategory = prvalue(load) -# 2030| getRightOperand(): [Literal] 10 +# 2030| getLesserOperand(): [VariableAccess] x +# 2030| Type = [IntType] unsigned int +# 2030| ValueCategory = prvalue(load) +# 2030| getGreaterOperand(): [Literal] 100 # 2030| Type = [IntType] int -# 2030| Value = [Literal] 10 +# 2030| Value = [Literal] 100 # 2030| ValueCategory = prvalue -# 2029| getThen().getFullyConverted(): [ParenthesisExpr] (...) -# 2029| Type = [IntType] unsigned int -# 2029| ValueCategory = prvalue(load) -# 2030| getElse().getFullyConverted(): [CStyleCast] (unsigned int)... -# 2030| Conversion = [IntegralConversion] integral conversion -# 2030| Type = [IntType] unsigned int -# 2030| ValueCategory = prvalue -# 2030| getExpr(): [ParenthesisExpr] (...) -# 2030| Type = [IntType] int +# 2030| getGreaterOperand().getFullyConverted(): [CStyleCast] (unsigned int)... +# 2030| Conversion = [IntegralConversion] integral conversion +# 2030| Type = [IntType] unsigned int +# 2030| Value = [CStyleCast] 100 # 2030| ValueCategory = prvalue -# 2031| getStmt(2): [ReturnStmt] return ... -# 2033| [TopLevelFunction] void NewDeleteMem() -# 2033| : -# 2033| getEntryPoint(): [BlockStmt] { ... } -# 2034| getStmt(0): [DeclStmt] declaration -# 2034| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 2034| Type = [IntPointerType] int * -# 2034| getVariable().getInitializer(): [Initializer] initializer for x -# 2034| getExpr(): [NewExpr] new -# 2034| Type = [IntPointerType] int * -# 2034| ValueCategory = prvalue -# 2035| getStmt(1): [ExprStmt] ExprStmt -# 2035| getExpr(): [AssignExpr] ... = ... -# 2035| Type = [IntType] int -# 2035| ValueCategory = lvalue -# 2035| getLValue(): [PointerDereferenceExpr] * ... -# 2035| Type = [IntType] int -# 2035| ValueCategory = lvalue -# 2035| getOperand(): [VariableAccess] x -# 2035| Type = [IntPointerType] int * -# 2035| ValueCategory = prvalue(load) -# 2035| getRValue(): [Literal] 6 -# 2035| Type = [IntType] int -# 2035| Value = [Literal] 6 -# 2035| ValueCategory = prvalue -# 2036| getStmt(2): [ExprStmt] ExprStmt -# 2036| getExpr(): [DeleteExpr] delete -# 2036| Type = [VoidType] void -# 2036| ValueCategory = prvalue -# 2036| getExpr(): [VariableAccess] x -# 2036| Type = [IntPointerType] int * -# 2036| ValueCategory = prvalue(load) -# 2037| getStmt(3): [ReturnStmt] return ... -# 2039| [CopyAssignmentOperator] Base2& Base2::operator=(Base2 const&) -# 2039| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const Base2 & -# 2039| [Constructor] void Base2::Base2() -# 2039| : -# 2039| : -# 2039| getEntryPoint(): [BlockStmt] { ... } -# 2039| getStmt(0): [ReturnStmt] return ... -# 2039| [CopyConstructor] void Base2::Base2(Base2 const&) -# 2039| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const Base2 & -# 2041| [MemberFunction] void Base2::operator delete(void*) +# 2031| getThen(): [CommaExpr] ... , ... +# 2031| Type = [IntType] unsigned int +# 2031| ValueCategory = prvalue(load) +# 2031| getLeftOperand(): [FunctionCall] call to CommaTestHelper +# 2031| Type = [VoidType] void +# 2031| ValueCategory = prvalue +# 2031| getArgument(0): [VariableAccess] x +# 2031| Type = [IntType] unsigned int +# 2031| ValueCategory = prvalue(load) +# 2031| getRightOperand(): [VariableAccess] x +# 2031| Type = [IntType] unsigned int +# 2031| ValueCategory = prvalue(load) +# 2032| getElse(): [CommaExpr] ... , ... +# 2032| Type = [IntType] int +# 2032| ValueCategory = prvalue +# 2032| getLeftOperand(): [FunctionCall] call to CommaTestHelper +# 2032| Type = [VoidType] void +# 2032| ValueCategory = prvalue +# 2032| getArgument(0): [VariableAccess] x +# 2032| Type = [IntType] unsigned int +# 2032| ValueCategory = prvalue(load) +# 2032| getRightOperand(): [Literal] 10 +# 2032| Type = [IntType] int +# 2032| Value = [Literal] 10 +# 2032| ValueCategory = prvalue +# 2031| getThen().getFullyConverted(): [ParenthesisExpr] (...) +# 2031| Type = [IntType] unsigned int +# 2031| ValueCategory = prvalue(load) +# 2032| getElse().getFullyConverted(): [CStyleCast] (unsigned int)... +# 2032| Conversion = [IntegralConversion] integral conversion +# 2032| Type = [IntType] unsigned int +# 2032| ValueCategory = prvalue +# 2032| getExpr(): [ParenthesisExpr] (...) +# 2032| Type = [IntType] int +# 2032| ValueCategory = prvalue +# 2033| getStmt(2): [ReturnStmt] return ... +# 2035| [TopLevelFunction] void NewDeleteMem() +# 2035| : +# 2035| getEntryPoint(): [BlockStmt] { ... } +# 2036| getStmt(0): [DeclStmt] declaration +# 2036| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2036| Type = [IntPointerType] int * +# 2036| getVariable().getInitializer(): [Initializer] initializer for x +# 2036| getExpr(): [NewExpr] new +# 2036| Type = [IntPointerType] int * +# 2036| ValueCategory = prvalue +# 2037| getStmt(1): [ExprStmt] ExprStmt +# 2037| getExpr(): [AssignExpr] ... = ... +# 2037| Type = [IntType] int +# 2037| ValueCategory = lvalue +# 2037| getLValue(): [PointerDereferenceExpr] * ... +# 2037| Type = [IntType] int +# 2037| ValueCategory = lvalue +# 2037| getOperand(): [VariableAccess] x +# 2037| Type = [IntPointerType] int * +# 2037| ValueCategory = prvalue(load) +# 2037| getRValue(): [Literal] 6 +# 2037| Type = [IntType] int +# 2037| Value = [Literal] 6 +# 2037| ValueCategory = prvalue +# 2038| getStmt(2): [ExprStmt] ExprStmt +# 2038| getExpr(): [DeleteExpr] delete +# 2038| Type = [VoidType] void +# 2038| ValueCategory = prvalue +# 2038| getExpr(): [VariableAccess] x +# 2038| Type = [IntPointerType] int * +# 2038| ValueCategory = prvalue(load) +# 2039| getStmt(3): [ReturnStmt] return ... +# 2041| [CopyAssignmentOperator] Base2& Base2::operator=(Base2 const&) # 2041| : -# 2041| getParameter(0): [Parameter] p -# 2041| Type = [VoidPointerType] void * +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const Base2 & +# 2041| [Constructor] void Base2::Base2() +# 2041| : +# 2041| : # 2041| getEntryPoint(): [BlockStmt] { ... } -# 2042| getStmt(0): [ReturnStmt] return ... -# 2043| [Destructor,VirtualFunction] void Base2::~Base2() +# 2041| getStmt(0): [ReturnStmt] return ... +# 2041| [CopyConstructor] void Base2::Base2(Base2 const&) +# 2041| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const Base2 & +# 2043| [MemberFunction] void Base2::operator delete(void*) # 2043| : +# 2043| getParameter(0): [Parameter] p +# 2043| Type = [VoidPointerType] void * # 2043| getEntryPoint(): [BlockStmt] { ... } -# 2043| getStmt(0): [ReturnStmt] return ... -# 2043| : -# 2046| [CopyAssignmentOperator] Derived2& Derived2::operator=(Derived2 const&) -# 2046| : +# 2044| getStmt(0): [ReturnStmt] return ... +# 2045| [Destructor,VirtualFunction] void Base2::~Base2() +# 2045| : +# 2045| getEntryPoint(): [BlockStmt] { ... } +# 2045| getStmt(0): [ReturnStmt] return ... +# 2045| : +# 2048| [CopyAssignmentOperator] Derived2& Derived2::operator=(Derived2 const&) +# 2048| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const Derived2 & -# 2046| [Constructor] void Derived2::Derived2() -# 2046| : -# 2046| : -# 2046| getInitializer(0): [ConstructorDirectInit] call to Base2 -# 2046| Type = [VoidType] void -# 2046| ValueCategory = prvalue -# 2046| getEntryPoint(): [BlockStmt] { ... } -# 2046| getStmt(0): [ReturnStmt] return ... -# 2046| [CopyConstructor] void Derived2::Derived2(Derived2 const&) -# 2046| : +# 2048| [Constructor] void Derived2::Derived2() +# 2048| : +# 2048| : +# 2048| getInitializer(0): [ConstructorDirectInit] call to Base2 +# 2048| Type = [VoidType] void +# 2048| ValueCategory = prvalue +# 2048| getEntryPoint(): [BlockStmt] { ... } +# 2048| getStmt(0): [ReturnStmt] return ... +# 2048| [CopyConstructor] void Derived2::Derived2(Derived2 const&) +# 2048| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const Derived2 & -# 2049| [Destructor,VirtualFunction] void Derived2::~Derived2() -# 2049| : -# 2049| getEntryPoint(): [BlockStmt] { ... } -# 2049| getStmt(0): [ReturnStmt] return ... -# 2049| : -# 2049| getDestruction(0): [DestructorDirectDestruction] call to ~Base2 -# 2049| Type = [VoidType] void -# 2049| ValueCategory = prvalue -# 2051| [MemberFunction] void Derived2::operator delete(void*) +# 2051| [Destructor,VirtualFunction] void Derived2::~Derived2() # 2051| : -# 2051| getParameter(0): [Parameter] p -# 2051| Type = [VoidPointerType] void * # 2051| getEntryPoint(): [BlockStmt] { ... } -# 2052| getStmt(0): [ReturnStmt] return ... -# 2056| [TopLevelFunction] int virtual_delete() -# 2056| : -# 2057| getEntryPoint(): [BlockStmt] { ... } -# 2058| getStmt(0): [DeclStmt] declaration -# 2058| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b1 -# 2058| Type = [PointerType] Base2 * -# 2058| getVariable().getInitializer(): [Initializer] initializer for b1 -# 2058| getExpr(): [NewExpr] new -# 2058| Type = [PointerType] Base2 * -# 2058| ValueCategory = prvalue -# 2058| getInitializer(): [ConstructorCall] call to Base2 -# 2058| Type = [VoidType] void -# 2058| ValueCategory = prvalue -# 2059| getStmt(1): [ExprStmt] ExprStmt -# 2059| getExpr(): [DeleteExpr] delete -# 2059| Type = [VoidType] void -# 2059| ValueCategory = prvalue -# 2059| getDeallocatorCall(): [FunctionCall] call to operator delete -# 2059| Type = [VoidType] void -# 2059| ValueCategory = prvalue -# 2059| getDestructorCall(): [DestructorCall] call to ~Base2 -# 2059| Type = [VoidType] void -# 2059| ValueCategory = prvalue -# 2059| getQualifier(): [VariableAccess] b1 -# 2059| Type = [PointerType] Base2 * -# 2059| ValueCategory = prvalue(load) -# 2061| getStmt(2): [DeclStmt] declaration -# 2061| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b2 -# 2061| Type = [PointerType] Base2 * -# 2061| getVariable().getInitializer(): [Initializer] initializer for b2 -# 2061| getExpr(): [NewExpr] new -# 2061| Type = [PointerType] Derived2 * -# 2061| ValueCategory = prvalue -# 2061| getInitializer(): [ConstructorCall] call to Derived2 -# 2061| Type = [VoidType] void -# 2061| ValueCategory = prvalue -# 2061| getExpr().getFullyConverted(): [CStyleCast] (Base2 *)... -# 2061| Conversion = [BaseClassConversion] base class conversion +# 2051| getStmt(0): [ReturnStmt] return ... +# 2051| : +# 2051| getDestruction(0): [DestructorDirectDestruction] call to ~Base2 +# 2051| Type = [VoidType] void +# 2051| ValueCategory = prvalue +# 2053| [MemberFunction] void Derived2::operator delete(void*) +# 2053| : +# 2053| getParameter(0): [Parameter] p +# 2053| Type = [VoidPointerType] void * +# 2053| getEntryPoint(): [BlockStmt] { ... } +# 2054| getStmt(0): [ReturnStmt] return ... +# 2058| [TopLevelFunction] int virtual_delete() +# 2058| : +# 2059| getEntryPoint(): [BlockStmt] { ... } +# 2060| getStmt(0): [DeclStmt] declaration +# 2060| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b1 +# 2060| Type = [PointerType] Base2 * +# 2060| getVariable().getInitializer(): [Initializer] initializer for b1 +# 2060| getExpr(): [NewExpr] new +# 2060| Type = [PointerType] Base2 * +# 2060| ValueCategory = prvalue +# 2060| getInitializer(): [ConstructorCall] call to Base2 +# 2060| Type = [VoidType] void +# 2060| ValueCategory = prvalue +# 2061| getStmt(1): [ExprStmt] ExprStmt +# 2061| getExpr(): [DeleteExpr] delete +# 2061| Type = [VoidType] void +# 2061| ValueCategory = prvalue +# 2061| getDeallocatorCall(): [FunctionCall] call to operator delete +# 2061| Type = [VoidType] void +# 2061| ValueCategory = prvalue +# 2061| getDestructorCall(): [DestructorCall] call to ~Base2 +# 2061| Type = [VoidType] void +# 2061| ValueCategory = prvalue +# 2061| getQualifier(): [VariableAccess] b1 # 2061| Type = [PointerType] Base2 * -# 2061| ValueCategory = prvalue -# 2062| getStmt(3): [ExprStmt] ExprStmt -# 2062| getExpr(): [DeleteExpr] delete -# 2062| Type = [VoidType] void -# 2062| ValueCategory = prvalue -# 2062| getDeallocatorCall(): [FunctionCall] call to operator delete -# 2062| Type = [VoidType] void -# 2062| ValueCategory = prvalue -# 2062| getDestructorCall(): [DestructorCall] call to ~Base2 -# 2062| Type = [VoidType] void -# 2062| ValueCategory = prvalue -# 2062| getQualifier(): [VariableAccess] b2 -# 2062| Type = [PointerType] Base2 * -# 2062| ValueCategory = prvalue(load) -# 2064| getStmt(4): [DeclStmt] declaration -# 2064| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d -# 2064| Type = [PointerType] Derived2 * -# 2064| getVariable().getInitializer(): [Initializer] initializer for d -# 2064| getExpr(): [NewExpr] new -# 2064| Type = [PointerType] Derived2 * -# 2064| ValueCategory = prvalue -# 2064| getInitializer(): [ConstructorCall] call to Derived2 -# 2064| Type = [VoidType] void -# 2064| ValueCategory = prvalue -# 2065| getStmt(5): [ExprStmt] ExprStmt -# 2065| getExpr(): [DeleteExpr] delete -# 2065| Type = [VoidType] void -# 2065| ValueCategory = prvalue -# 2065| getDeallocatorCall(): [FunctionCall] call to operator delete -# 2065| Type = [VoidType] void -# 2065| ValueCategory = prvalue -# 2065| getDestructorCall(): [DestructorCall] call to ~Derived2 -# 2065| Type = [VoidType] void -# 2065| ValueCategory = prvalue -# 2065| getQualifier(): [VariableAccess] d -# 2065| Type = [PointerType] Derived2 * -# 2065| ValueCategory = prvalue(load) -# 2066| getStmt(6): [ReturnStmt] return ... -# 2068| [TopLevelFunction] void test_constant_folding_use(int) -# 2068| : -# 2068| getParameter(0): [Parameter] (unnamed parameter 0) -# 2068| Type = [IntType] int -# 2070| [TopLevelFunction] void test_constant_folding() +# 2061| ValueCategory = prvalue(load) +# 2063| getStmt(2): [DeclStmt] declaration +# 2063| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b2 +# 2063| Type = [PointerType] Base2 * +# 2063| getVariable().getInitializer(): [Initializer] initializer for b2 +# 2063| getExpr(): [NewExpr] new +# 2063| Type = [PointerType] Derived2 * +# 2063| ValueCategory = prvalue +# 2063| getInitializer(): [ConstructorCall] call to Derived2 +# 2063| Type = [VoidType] void +# 2063| ValueCategory = prvalue +# 2063| getExpr().getFullyConverted(): [CStyleCast] (Base2 *)... +# 2063| Conversion = [BaseClassConversion] base class conversion +# 2063| Type = [PointerType] Base2 * +# 2063| ValueCategory = prvalue +# 2064| getStmt(3): [ExprStmt] ExprStmt +# 2064| getExpr(): [DeleteExpr] delete +# 2064| Type = [VoidType] void +# 2064| ValueCategory = prvalue +# 2064| getDeallocatorCall(): [FunctionCall] call to operator delete +# 2064| Type = [VoidType] void +# 2064| ValueCategory = prvalue +# 2064| getDestructorCall(): [DestructorCall] call to ~Base2 +# 2064| Type = [VoidType] void +# 2064| ValueCategory = prvalue +# 2064| getQualifier(): [VariableAccess] b2 +# 2064| Type = [PointerType] Base2 * +# 2064| ValueCategory = prvalue(load) +# 2066| getStmt(4): [DeclStmt] declaration +# 2066| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d +# 2066| Type = [PointerType] Derived2 * +# 2066| getVariable().getInitializer(): [Initializer] initializer for d +# 2066| getExpr(): [NewExpr] new +# 2066| Type = [PointerType] Derived2 * +# 2066| ValueCategory = prvalue +# 2066| getInitializer(): [ConstructorCall] call to Derived2 +# 2066| Type = [VoidType] void +# 2066| ValueCategory = prvalue +# 2067| getStmt(5): [ExprStmt] ExprStmt +# 2067| getExpr(): [DeleteExpr] delete +# 2067| Type = [VoidType] void +# 2067| ValueCategory = prvalue +# 2067| getDeallocatorCall(): [FunctionCall] call to operator delete +# 2067| Type = [VoidType] void +# 2067| ValueCategory = prvalue +# 2067| getDestructorCall(): [DestructorCall] call to ~Derived2 +# 2067| Type = [VoidType] void +# 2067| ValueCategory = prvalue +# 2067| getQualifier(): [VariableAccess] d +# 2067| Type = [PointerType] Derived2 * +# 2067| ValueCategory = prvalue(load) +# 2068| getStmt(6): [ReturnStmt] return ... +# 2070| [TopLevelFunction] void test_constant_folding_use(int) # 2070| : -# 2070| getEntryPoint(): [BlockStmt] { ... } -# 2071| getStmt(0): [DeclStmt] declaration -# 2071| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 2071| Type = [SpecifiedType] const int -# 2071| getVariable().getInitializer(): [Initializer] initializer for x -# 2071| getExpr(): [Literal] 116 -# 2071| Type = [IntType] int -# 2071| Value = [Literal] 116 -# 2071| ValueCategory = prvalue -# 2072| getStmt(1): [ExprStmt] ExprStmt -# 2072| getExpr(): [FunctionCall] call to test_constant_folding_use -# 2072| Type = [VoidType] void -# 2072| ValueCategory = prvalue -# 2072| getArgument(0): [VariableAccess] x -# 2072| Type = [IntType] int -# 2072| Value = [VariableAccess] 116 -# 2072| ValueCategory = prvalue(load) -# 2073| getStmt(2): [ReturnStmt] return ... -# 2075| [TopLevelFunction] void exit(int) -# 2075| : -# 2075| getParameter(0): [Parameter] code -# 2075| Type = [IntType] int -# 2077| [TopLevelFunction] int NonExit() +# 2070| getParameter(0): [Parameter] (unnamed parameter 0) +# 2070| Type = [IntType] int +# 2072| [TopLevelFunction] void test_constant_folding() +# 2072| : +# 2072| getEntryPoint(): [BlockStmt] { ... } +# 2073| getStmt(0): [DeclStmt] declaration +# 2073| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2073| Type = [SpecifiedType] const int +# 2073| getVariable().getInitializer(): [Initializer] initializer for x +# 2073| getExpr(): [Literal] 116 +# 2073| Type = [IntType] int +# 2073| Value = [Literal] 116 +# 2073| ValueCategory = prvalue +# 2074| getStmt(1): [ExprStmt] ExprStmt +# 2074| getExpr(): [FunctionCall] call to test_constant_folding_use +# 2074| Type = [VoidType] void +# 2074| ValueCategory = prvalue +# 2074| getArgument(0): [VariableAccess] x +# 2074| Type = [IntType] int +# 2074| Value = [VariableAccess] 116 +# 2074| ValueCategory = prvalue(load) +# 2075| getStmt(2): [ReturnStmt] return ... +# 2077| [TopLevelFunction] void exit(int) # 2077| : -# 2077| getEntryPoint(): [BlockStmt] { ... } -# 2078| getStmt(0): [DeclStmt] declaration -# 2078| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 2078| Type = [IntType] int -# 2078| getVariable().getInitializer(): [Initializer] initializer for x -# 2078| getExpr(): [FunctionCall] call to Add -# 2078| Type = [IntType] int -# 2078| ValueCategory = prvalue -# 2078| getArgument(0): [Literal] 3 -# 2078| Type = [IntType] int -# 2078| Value = [Literal] 3 -# 2078| ValueCategory = prvalue -# 2078| getArgument(1): [Literal] 4 -# 2078| Type = [IntType] int -# 2078| Value = [Literal] 4 -# 2078| ValueCategory = prvalue -# 2079| getStmt(1): [IfStmt] if (...) ... -# 2079| getCondition(): [EQExpr] ... == ... -# 2079| Type = [BoolType] bool -# 2079| ValueCategory = prvalue -# 2079| getLeftOperand(): [VariableAccess] x -# 2079| Type = [IntType] int -# 2079| ValueCategory = prvalue(load) -# 2079| getRightOperand(): [Literal] 7 -# 2079| Type = [IntType] int -# 2079| Value = [Literal] 7 -# 2079| ValueCategory = prvalue -# 2080| getThen(): [ExprStmt] ExprStmt -# 2080| getExpr(): [FunctionCall] call to exit -# 2080| Type = [VoidType] void -# 2080| ValueCategory = prvalue -# 2080| getArgument(0): [Literal] 3 +# 2077| getParameter(0): [Parameter] code +# 2077| Type = [IntType] int +# 2079| [TopLevelFunction] int NonExit() +# 2079| : +# 2079| getEntryPoint(): [BlockStmt] { ... } +# 2080| getStmt(0): [DeclStmt] declaration +# 2080| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2080| Type = [IntType] int +# 2080| getVariable().getInitializer(): [Initializer] initializer for x +# 2080| getExpr(): [FunctionCall] call to Add # 2080| Type = [IntType] int -# 2080| Value = [Literal] 3 # 2080| ValueCategory = prvalue -# 2081| getStmt(2): [ExprStmt] ExprStmt -# 2081| getExpr(): [FunctionCall] call to VoidFunc -# 2081| Type = [VoidType] void +# 2080| getArgument(0): [Literal] 3 +# 2080| Type = [IntType] int +# 2080| Value = [Literal] 3 +# 2080| ValueCategory = prvalue +# 2080| getArgument(1): [Literal] 4 +# 2080| Type = [IntType] int +# 2080| Value = [Literal] 4 +# 2080| ValueCategory = prvalue +# 2081| getStmt(1): [IfStmt] if (...) ... +# 2081| getCondition(): [EQExpr] ... == ... +# 2081| Type = [BoolType] bool # 2081| ValueCategory = prvalue -# 2082| getStmt(3): [ReturnStmt] return ... -# 2082| getExpr(): [VariableAccess] x -# 2082| Type = [IntType] int -# 2082| ValueCategory = prvalue(load) -# 2085| [TopLevelFunction] void CallsNonExit() -# 2085| : -# 2085| getEntryPoint(): [BlockStmt] { ... } -# 2086| getStmt(0): [ExprStmt] ExprStmt -# 2086| getExpr(): [FunctionCall] call to VoidFunc -# 2086| Type = [VoidType] void -# 2086| ValueCategory = prvalue -# 2087| getStmt(1): [ExprStmt] ExprStmt -# 2087| getExpr(): [FunctionCall] call to exit -# 2087| Type = [VoidType] void -# 2087| ValueCategory = prvalue -# 2087| getArgument(0): [Literal] 3 -# 2087| Type = [IntType] int -# 2087| Value = [Literal] 3 -# 2087| ValueCategory = prvalue -# 2088| getStmt(2): [ReturnStmt] return ... -# 2090| [TopLevelFunction] int TransNonExit() -# 2090| : -# 2090| getEntryPoint(): [BlockStmt] { ... } -# 2091| getStmt(0): [DeclStmt] declaration -# 2091| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 2091| Type = [IntType] int -# 2091| getVariable().getInitializer(): [Initializer] initializer for x -# 2091| getExpr(): [FunctionCall] call to Add -# 2091| Type = [IntType] int -# 2091| ValueCategory = prvalue -# 2091| getArgument(0): [Literal] 3 -# 2091| Type = [IntType] int -# 2091| Value = [Literal] 3 -# 2091| ValueCategory = prvalue -# 2091| getArgument(1): [Literal] 4 -# 2091| Type = [IntType] int -# 2091| Value = [Literal] 4 -# 2091| ValueCategory = prvalue -# 2092| getStmt(1): [IfStmt] if (...) ... -# 2092| getCondition(): [EQExpr] ... == ... -# 2092| Type = [BoolType] bool -# 2092| ValueCategory = prvalue -# 2092| getLeftOperand(): [VariableAccess] x -# 2092| Type = [IntType] int -# 2092| ValueCategory = prvalue(load) -# 2092| getRightOperand(): [Literal] 7 -# 2092| Type = [IntType] int -# 2092| Value = [Literal] 7 -# 2092| ValueCategory = prvalue -# 2093| getThen(): [ExprStmt] ExprStmt -# 2093| getExpr(): [FunctionCall] call to CallsNonExit -# 2093| Type = [VoidType] void -# 2093| ValueCategory = prvalue -# 2094| getStmt(2): [ExprStmt] ExprStmt -# 2094| getExpr(): [FunctionCall] call to VoidFunc -# 2094| Type = [VoidType] void +# 2081| getLeftOperand(): [VariableAccess] x +# 2081| Type = [IntType] int +# 2081| ValueCategory = prvalue(load) +# 2081| getRightOperand(): [Literal] 7 +# 2081| Type = [IntType] int +# 2081| Value = [Literal] 7 +# 2081| ValueCategory = prvalue +# 2082| getThen(): [ExprStmt] ExprStmt +# 2082| getExpr(): [FunctionCall] call to exit +# 2082| Type = [VoidType] void +# 2082| ValueCategory = prvalue +# 2082| getArgument(0): [Literal] 3 +# 2082| Type = [IntType] int +# 2082| Value = [Literal] 3 +# 2082| ValueCategory = prvalue +# 2083| getStmt(2): [ExprStmt] ExprStmt +# 2083| getExpr(): [FunctionCall] call to VoidFunc +# 2083| Type = [VoidType] void +# 2083| ValueCategory = prvalue +# 2084| getStmt(3): [ReturnStmt] return ... +# 2084| getExpr(): [VariableAccess] x +# 2084| Type = [IntType] int +# 2084| ValueCategory = prvalue(load) +# 2087| [TopLevelFunction] void CallsNonExit() +# 2087| : +# 2087| getEntryPoint(): [BlockStmt] { ... } +# 2088| getStmt(0): [ExprStmt] ExprStmt +# 2088| getExpr(): [FunctionCall] call to VoidFunc +# 2088| Type = [VoidType] void +# 2088| ValueCategory = prvalue +# 2089| getStmt(1): [ExprStmt] ExprStmt +# 2089| getExpr(): [FunctionCall] call to exit +# 2089| Type = [VoidType] void +# 2089| ValueCategory = prvalue +# 2089| getArgument(0): [Literal] 3 +# 2089| Type = [IntType] int +# 2089| Value = [Literal] 3 +# 2089| ValueCategory = prvalue +# 2090| getStmt(2): [ReturnStmt] return ... +# 2092| [TopLevelFunction] int TransNonExit() +# 2092| : +# 2092| getEntryPoint(): [BlockStmt] { ... } +# 2093| getStmt(0): [DeclStmt] declaration +# 2093| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2093| Type = [IntType] int +# 2093| getVariable().getInitializer(): [Initializer] initializer for x +# 2093| getExpr(): [FunctionCall] call to Add +# 2093| Type = [IntType] int +# 2093| ValueCategory = prvalue +# 2093| getArgument(0): [Literal] 3 +# 2093| Type = [IntType] int +# 2093| Value = [Literal] 3 +# 2093| ValueCategory = prvalue +# 2093| getArgument(1): [Literal] 4 +# 2093| Type = [IntType] int +# 2093| Value = [Literal] 4 +# 2093| ValueCategory = prvalue +# 2094| getStmt(1): [IfStmt] if (...) ... +# 2094| getCondition(): [EQExpr] ... == ... +# 2094| Type = [BoolType] bool # 2094| ValueCategory = prvalue -# 2095| getStmt(3): [ReturnStmt] return ... -# 2095| getExpr(): [VariableAccess] x -# 2095| Type = [IntType] int -# 2095| ValueCategory = prvalue(load) -# 2098| [TopLevelFunction] void newArrayCorrectType(size_t) -# 2098| : -# 2098| getParameter(0): [Parameter] n -# 2098| Type = [CTypedefType,Size_t] size_t -# 2098| getEntryPoint(): [BlockStmt] { ... } -# 2099| getStmt(0): [ExprStmt] ExprStmt -# 2099| getExpr(): [NewArrayExpr] new[] -# 2099| Type = [IntPointerType] int * -# 2099| ValueCategory = prvalue -# 2099| getExtent(): [VariableAccess] n -# 2099| Type = [CTypedefType,Size_t] size_t -# 2099| ValueCategory = prvalue(load) -# 2100| getStmt(1): [ExprStmt] ExprStmt -# 2100| getExpr(): [NewArrayExpr] new[] -# 2100| Type = [IntPointerType] int * -# 2100| ValueCategory = prvalue -# 2100| getAllocatorCall(): [FunctionCall] call to operator new[] -# 2100| Type = [VoidPointerType] void * -# 2100| ValueCategory = prvalue -# 2100| getArgument(0): [ErrorExpr] -# 2100| Type = [LongType] unsigned long -# 2100| ValueCategory = prvalue -# 2100| getArgument(1): [Literal] 1.0 -# 2100| Type = [FloatType] float -# 2100| Value = [Literal] 1.0 -# 2100| ValueCategory = prvalue -# 2100| getExtent(): [VariableAccess] n -# 2100| Type = [CTypedefType,Size_t] size_t -# 2100| ValueCategory = prvalue(load) -# 2101| getStmt(2): [ExprStmt] ExprStmt +# 2094| getLeftOperand(): [VariableAccess] x +# 2094| Type = [IntType] int +# 2094| ValueCategory = prvalue(load) +# 2094| getRightOperand(): [Literal] 7 +# 2094| Type = [IntType] int +# 2094| Value = [Literal] 7 +# 2094| ValueCategory = prvalue +# 2095| getThen(): [ExprStmt] ExprStmt +# 2095| getExpr(): [FunctionCall] call to CallsNonExit +# 2095| Type = [VoidType] void +# 2095| ValueCategory = prvalue +# 2096| getStmt(2): [ExprStmt] ExprStmt +# 2096| getExpr(): [FunctionCall] call to VoidFunc +# 2096| Type = [VoidType] void +# 2096| ValueCategory = prvalue +# 2097| getStmt(3): [ReturnStmt] return ... +# 2097| getExpr(): [VariableAccess] x +# 2097| Type = [IntType] int +# 2097| ValueCategory = prvalue(load) +# 2100| [TopLevelFunction] void newArrayCorrectType(size_t) +# 2100| : +# 2100| getParameter(0): [Parameter] n +# 2100| Type = [CTypedefType,Size_t] size_t +# 2100| getEntryPoint(): [BlockStmt] { ... } +# 2101| getStmt(0): [ExprStmt] ExprStmt # 2101| getExpr(): [NewArrayExpr] new[] -# 2101| Type = [PointerType] String * +# 2101| Type = [IntPointerType] int * # 2101| ValueCategory = prvalue -# 2101| getInitializer(): [ArrayAggregateLiteral] {...} -# 2101| Type = [ArrayType] String[] -# 2101| ValueCategory = prvalue -# 2101| getAnElementExpr(0): [ConstructorCall] call to String -# 2101| Type = [VoidType] void -# 2101| ValueCategory = prvalue # 2101| getExtent(): [VariableAccess] n # 2101| Type = [CTypedefType,Size_t] size_t # 2101| ValueCategory = prvalue(load) -# 2102| getStmt(3): [ExprStmt] ExprStmt +# 2102| getStmt(1): [ExprStmt] ExprStmt # 2102| getExpr(): [NewArrayExpr] new[] -# 2102| Type = [PointerType] Overaligned * +# 2102| Type = [IntPointerType] int * # 2102| ValueCategory = prvalue +# 2102| getAllocatorCall(): [FunctionCall] call to operator new[] +# 2102| Type = [VoidPointerType] void * +# 2102| ValueCategory = prvalue +# 2102| getArgument(0): [ErrorExpr] +# 2102| Type = [LongType] unsigned long +# 2102| ValueCategory = prvalue +# 2102| getArgument(1): [Literal] 1.0 +# 2102| Type = [FloatType] float +# 2102| Value = [Literal] 1.0 +# 2102| ValueCategory = prvalue # 2102| getExtent(): [VariableAccess] n # 2102| Type = [CTypedefType,Size_t] size_t # 2102| ValueCategory = prvalue(load) -# 2102| getAlignmentArgument(): [Literal] 128 -# 2102| Type = [ScopedEnum] align_val_t -# 2102| Value = [Literal] 128 -# 2102| ValueCategory = prvalue -# 2103| getStmt(4): [ExprStmt] ExprStmt +# 2103| getStmt(2): [ExprStmt] ExprStmt # 2103| getExpr(): [NewArrayExpr] new[] -# 2103| Type = [PointerType] DefaultCtorWithDefaultParam * +# 2103| Type = [PointerType] String * # 2103| ValueCategory = prvalue # 2103| getInitializer(): [ArrayAggregateLiteral] {...} -# 2103| Type = [ArrayType] DefaultCtorWithDefaultParam[] +# 2103| Type = [ArrayType] String[] # 2103| ValueCategory = prvalue -# 2103| getAnElementExpr(0): [ConstructorCall] call to DefaultCtorWithDefaultParam +# 2103| getAnElementExpr(0): [ConstructorCall] call to String # 2103| Type = [VoidType] void # 2103| ValueCategory = prvalue # 2103| getExtent(): [VariableAccess] n # 2103| Type = [CTypedefType,Size_t] size_t # 2103| ValueCategory = prvalue(load) -# 2104| getStmt(5): [ExprStmt] ExprStmt +# 2104| getStmt(3): [ExprStmt] ExprStmt # 2104| getExpr(): [NewArrayExpr] new[] -# 2104| Type = [IntPointerType] int * +# 2104| Type = [PointerType] Overaligned * # 2104| ValueCategory = prvalue -# 2104| getInitializer(): [ArrayAggregateLiteral] {...} -# 2104| Type = [ArrayType] int[3] -# 2104| ValueCategory = prvalue -# 2104| getAnElementExpr(0): [Literal] 0 -# 2104| Type = [IntType] int -# 2104| Value = [Literal] 0 -# 2104| ValueCategory = prvalue -# 2104| getAnElementExpr(1): [Literal] 1 -# 2104| Type = [IntType] int -# 2104| Value = [Literal] 1 -# 2104| ValueCategory = prvalue -# 2104| getAnElementExpr(2): [Literal] 2 -# 2104| Type = [IntType] int -# 2104| Value = [Literal] 2 -# 2104| ValueCategory = prvalue # 2104| getExtent(): [VariableAccess] n # 2104| Type = [CTypedefType,Size_t] size_t # 2104| ValueCategory = prvalue(load) -# 2105| getStmt(6): [ReturnStmt] return ... -# 2107| [TopLevelFunction] double strtod(char const*, char**) -# 2107| : -# 2107| getParameter(0): [Parameter] str -# 2107| Type = [PointerType] const char * -# 2107| getParameter(1): [Parameter] endptr -# 2107| Type = [PointerType] char ** -# 2109| [TopLevelFunction] char* test_strtod(char*) +# 2104| getAlignmentArgument(): [Literal] 128 +# 2104| Type = [ScopedEnum] align_val_t +# 2104| Value = [Literal] 128 +# 2104| ValueCategory = prvalue +# 2105| getStmt(4): [ExprStmt] ExprStmt +# 2105| getExpr(): [NewArrayExpr] new[] +# 2105| Type = [PointerType] DefaultCtorWithDefaultParam * +# 2105| ValueCategory = prvalue +# 2105| getInitializer(): [ArrayAggregateLiteral] {...} +# 2105| Type = [ArrayType] DefaultCtorWithDefaultParam[] +# 2105| ValueCategory = prvalue +# 2105| getAnElementExpr(0): [ConstructorCall] call to DefaultCtorWithDefaultParam +# 2105| Type = [VoidType] void +# 2105| ValueCategory = prvalue +# 2105| getExtent(): [VariableAccess] n +# 2105| Type = [CTypedefType,Size_t] size_t +# 2105| ValueCategory = prvalue(load) +# 2106| getStmt(5): [ExprStmt] ExprStmt +# 2106| getExpr(): [NewArrayExpr] new[] +# 2106| Type = [IntPointerType] int * +# 2106| ValueCategory = prvalue +# 2106| getInitializer(): [ArrayAggregateLiteral] {...} +# 2106| Type = [ArrayType] int[3] +# 2106| ValueCategory = prvalue +# 2106| getAnElementExpr(0): [Literal] 0 +# 2106| Type = [IntType] int +# 2106| Value = [Literal] 0 +# 2106| ValueCategory = prvalue +# 2106| getAnElementExpr(1): [Literal] 1 +# 2106| Type = [IntType] int +# 2106| Value = [Literal] 1 +# 2106| ValueCategory = prvalue +# 2106| getAnElementExpr(2): [Literal] 2 +# 2106| Type = [IntType] int +# 2106| Value = [Literal] 2 +# 2106| ValueCategory = prvalue +# 2106| getExtent(): [VariableAccess] n +# 2106| Type = [CTypedefType,Size_t] size_t +# 2106| ValueCategory = prvalue(load) +# 2107| getStmt(6): [ReturnStmt] return ... +# 2109| [TopLevelFunction] double strtod(char const*, char**) # 2109| : -# 2109| getParameter(0): [Parameter] s -# 2109| Type = [CharPointerType] char * -# 2109| getEntryPoint(): [BlockStmt] { ... } -# 2110| getStmt(0): [DeclStmt] declaration -# 2110| getDeclarationEntry(0): [VariableDeclarationEntry] definition of end -# 2110| Type = [CharPointerType] char * -# 2111| getStmt(1): [DeclStmt] declaration -# 2111| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d -# 2111| Type = [DoubleType] double -# 2111| getVariable().getInitializer(): [Initializer] initializer for d -# 2111| getExpr(): [FunctionCall] call to strtod -# 2111| Type = [DoubleType] double -# 2111| ValueCategory = prvalue -# 2111| getArgument(0): [VariableAccess] s -# 2111| Type = [CharPointerType] char * -# 2111| ValueCategory = prvalue(load) -# 2111| getArgument(1): [AddressOfExpr] & ... -# 2111| Type = [PointerType] char ** -# 2111| ValueCategory = prvalue -# 2111| getOperand(): [VariableAccess] end -# 2111| Type = [CharPointerType] char * -# 2111| ValueCategory = lvalue -# 2111| getArgument(0).getFullyConverted(): [CStyleCast] (const char *)... -# 2111| Conversion = [PointerConversion] pointer conversion -# 2111| Type = [PointerType] const char * -# 2111| ValueCategory = prvalue -# 2112| getStmt(2): [ReturnStmt] return ... -# 2112| getExpr(): [VariableAccess] end +# 2109| getParameter(0): [Parameter] str +# 2109| Type = [PointerType] const char * +# 2109| getParameter(1): [Parameter] endptr +# 2109| Type = [PointerType] char ** +# 2111| [TopLevelFunction] char* test_strtod(char*) +# 2111| : +# 2111| getParameter(0): [Parameter] s +# 2111| Type = [CharPointerType] char * +# 2111| getEntryPoint(): [BlockStmt] { ... } +# 2112| getStmt(0): [DeclStmt] declaration +# 2112| getDeclarationEntry(0): [VariableDeclarationEntry] definition of end # 2112| Type = [CharPointerType] char * -# 2112| ValueCategory = prvalue(load) -# 2115| [CopyAssignmentOperator] HasOperatorBool& HasOperatorBool::operator=(HasOperatorBool const&) -# 2115| : +# 2113| getStmt(1): [DeclStmt] declaration +# 2113| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d +# 2113| Type = [DoubleType] double +# 2113| getVariable().getInitializer(): [Initializer] initializer for d +# 2113| getExpr(): [FunctionCall] call to strtod +# 2113| Type = [DoubleType] double +# 2113| ValueCategory = prvalue +# 2113| getArgument(0): [VariableAccess] s +# 2113| Type = [CharPointerType] char * +# 2113| ValueCategory = prvalue(load) +# 2113| getArgument(1): [AddressOfExpr] & ... +# 2113| Type = [PointerType] char ** +# 2113| ValueCategory = prvalue +# 2113| getOperand(): [VariableAccess] end +# 2113| Type = [CharPointerType] char * +# 2113| ValueCategory = lvalue +# 2113| getArgument(0).getFullyConverted(): [CStyleCast] (const char *)... +# 2113| Conversion = [PointerConversion] pointer conversion +# 2113| Type = [PointerType] const char * +# 2113| ValueCategory = prvalue +# 2114| getStmt(2): [ReturnStmt] return ... +# 2114| getExpr(): [VariableAccess] end +# 2114| Type = [CharPointerType] char * +# 2114| ValueCategory = prvalue(load) +# 2117| [CopyAssignmentOperator] HasOperatorBool& HasOperatorBool::operator=(HasOperatorBool const&) +# 2117| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const HasOperatorBool & -# 2115| [MoveAssignmentOperator] HasOperatorBool& HasOperatorBool::operator=(HasOperatorBool&&) -# 2115| : +# 2117| [MoveAssignmentOperator] HasOperatorBool& HasOperatorBool::operator=(HasOperatorBool&&) +# 2117| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] HasOperatorBool && -# 2116| [ConversionOperator] bool HasOperatorBool::operator bool() -# 2116| : -# 2119| [TopLevelFunction] void call_as_child_of_ConditionDeclExpr() -# 2119| : -# 2119| getEntryPoint(): [BlockStmt] { ... } -# 2120| getStmt(0): [IfStmt] if (...) ... -# 2120| getCondition(): [ConditionDeclExpr] (condition decl) -# 2120| Type = [BoolType] bool -# 2120| ValueCategory = prvalue -# 2120| getChild(0): [FunctionCall] call to operator bool -# 2120| Type = [BoolType] bool -# 2120| ValueCategory = prvalue -# 2120| getQualifier(): [VariableAccess] b -# 2120| Type = [Struct] HasOperatorBool -# 2120| ValueCategory = prvalue(load) -# 2120| getThen(): [BlockStmt] { ... } -# 2121| getStmt(1): [ReturnStmt] return ... +# 2118| [ConversionOperator] bool HasOperatorBool::operator bool() +# 2118| : +# 2121| [TopLevelFunction] void call_as_child_of_ConditionDeclExpr() +# 2121| : +# 2121| getEntryPoint(): [BlockStmt] { ... } +# 2122| getStmt(0): [IfStmt] if (...) ... +# 2122| getCondition(): [ConditionDeclExpr] (condition decl) +# 2122| Type = [BoolType] bool +# 2122| ValueCategory = prvalue +# 2122| getChild(0): [FunctionCall] call to operator bool +# 2122| Type = [BoolType] bool +# 2122| ValueCategory = prvalue +# 2122| getQualifier(): [VariableAccess] b +# 2122| Type = [Struct] HasOperatorBool +# 2122| ValueCategory = prvalue(load) +# 2122| getThen(): [BlockStmt] { ... } +# 2123| getStmt(1): [ReturnStmt] return ... perf-regression.cpp: # 4| [CopyAssignmentOperator] Big& Big::operator=(Big const&) # 4| : diff --git a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected index f21ffad9dbb..ebb6e63062f 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected @@ -6687,3951 +6687,3935 @@ ir.cpp: # 1054| v1054_43(void) = AliasedUse : ~m1054_20 # 1054| v1054_44(void) = ExitFunction : -# 1077| void RangeBasedFor(vector const&) -# 1077| Block 0 -# 1077| v1077_1(void) = EnterFunction : -# 1077| m1077_2(unknown) = AliasedDefinition : -# 1077| m1077_3(unknown) = InitializeNonLocal : -# 1077| m1077_4(unknown) = Chi : total:m1077_2, partial:m1077_3 -# 1077| r1077_5(glval &>) = VariableAddress[v] : -# 1077| m1077_6(vector &) = InitializeParameter[v] : &:r1077_5 -# 1077| r1077_7(vector &) = Load[v] : &:r1077_5, m1077_6 -# 1077| m1077_8(unknown) = InitializeIndirection[v] : &:r1077_7 -# 1078| r1078_1(glval &>) = VariableAddress[(__range)] : -# 1078| r1078_2(glval &>) = VariableAddress[v] : -# 1078| r1078_3(vector &) = Load[v] : &:r1078_2, m1077_6 -# 1078| r1078_4(glval>) = CopyValue : r1078_3 -# 1078| r1078_5(vector &) = CopyValue : r1078_4 -# 1078| m1078_6(vector &) = Store[(__range)] : &:r1078_1, r1078_5 -# 1078| r1078_7(glval) = VariableAddress[(__begin)] : -# 1078| r1078_8(glval &>) = VariableAddress[(__range)] : -# 1078| r1078_9(vector &) = Load[(__range)] : &:r1078_8, m1078_6 -#-----| r0_1(glval>) = CopyValue : r1078_9 -# 1078| r1078_10(glval) = FunctionAddress[begin] : -# 1078| r1078_11(iterator) = Call[begin] : func:r1078_10, this:r0_1 -# 1078| m1078_12(unknown) = ^CallSideEffect : ~m1077_4 -# 1078| m1078_13(unknown) = Chi : total:m1077_4, partial:m1078_12 -#-----| v0_2(void) = ^IndirectReadSideEffect[-1] : &:r0_1, ~m1077_8 -# 1078| m1078_14(iterator) = Store[(__begin)] : &:r1078_7, r1078_11 -# 1078| r1078_15(glval) = VariableAddress[(__end)] : -# 1078| r1078_16(glval &>) = VariableAddress[(__range)] : -# 1078| r1078_17(vector &) = Load[(__range)] : &:r1078_16, m1078_6 -#-----| r0_3(glval>) = CopyValue : r1078_17 -# 1078| r1078_18(glval) = FunctionAddress[end] : -# 1078| r1078_19(iterator) = Call[end] : func:r1078_18, this:r0_3 -# 1078| m1078_20(unknown) = ^CallSideEffect : ~m1078_13 -# 1078| m1078_21(unknown) = Chi : total:m1078_13, partial:m1078_20 -#-----| v0_4(void) = ^IndirectReadSideEffect[-1] : &:r0_3, ~m1077_8 -# 1078| m1078_22(iterator) = Store[(__end)] : &:r1078_15, r1078_19 +# 1079| void RangeBasedFor(vector const&) +# 1079| Block 0 +# 1079| v1079_1(void) = EnterFunction : +# 1079| m1079_2(unknown) = AliasedDefinition : +# 1079| m1079_3(unknown) = InitializeNonLocal : +# 1079| m1079_4(unknown) = Chi : total:m1079_2, partial:m1079_3 +# 1079| r1079_5(glval &>) = VariableAddress[v] : +# 1079| m1079_6(vector &) = InitializeParameter[v] : &:r1079_5 +# 1079| r1079_7(vector &) = Load[v] : &:r1079_5, m1079_6 +# 1079| m1079_8(unknown) = InitializeIndirection[v] : &:r1079_7 +# 1080| r1080_1(glval &>) = VariableAddress[(__range)] : +# 1080| r1080_2(glval &>) = VariableAddress[v] : +# 1080| r1080_3(vector &) = Load[v] : &:r1080_2, m1079_6 +# 1080| r1080_4(glval>) = CopyValue : r1080_3 +# 1080| r1080_5(vector &) = CopyValue : r1080_4 +# 1080| m1080_6(vector &) = Store[(__range)] : &:r1080_1, r1080_5 +# 1080| r1080_7(glval) = VariableAddress[(__begin)] : +# 1080| r1080_8(glval &>) = VariableAddress[(__range)] : +# 1080| r1080_9(vector &) = Load[(__range)] : &:r1080_8, m1080_6 +#-----| r0_1(glval>) = CopyValue : r1080_9 +# 1080| r1080_10(glval) = FunctionAddress[begin] : +# 1080| r1080_11(iterator) = Call[begin] : func:r1080_10, this:r0_1 +# 1080| m1080_12(unknown) = ^CallSideEffect : ~m1079_4 +# 1080| m1080_13(unknown) = Chi : total:m1079_4, partial:m1080_12 +#-----| v0_2(void) = ^IndirectReadSideEffect[-1] : &:r0_1, ~m1079_8 +# 1080| m1080_14(iterator) = Store[(__begin)] : &:r1080_7, r1080_11 +# 1080| r1080_15(glval) = VariableAddress[(__end)] : +# 1080| r1080_16(glval &>) = VariableAddress[(__range)] : +# 1080| r1080_17(vector &) = Load[(__range)] : &:r1080_16, m1080_6 +#-----| r0_3(glval>) = CopyValue : r1080_17 +# 1080| r1080_18(glval) = FunctionAddress[end] : +# 1080| r1080_19(iterator) = Call[end] : func:r1080_18, this:r0_3 +# 1080| m1080_20(unknown) = ^CallSideEffect : ~m1080_13 +# 1080| m1080_21(unknown) = Chi : total:m1080_13, partial:m1080_20 +#-----| v0_4(void) = ^IndirectReadSideEffect[-1] : &:r0_3, ~m1079_8 +# 1080| m1080_22(iterator) = Store[(__end)] : &:r1080_15, r1080_19 #-----| Goto -> Block 1 -# 1078| Block 1 -# 1078| m1078_23(iterator) = Phi : from 0:m1078_14, from 4:m1078_49 -# 1078| m1078_24(unknown) = Phi : from 0:~m1078_21, from 4:~m1078_46 -# 1078| r1078_25(glval) = VariableAddress[(__begin)] : -#-----| r0_5(glval) = Convert : r1078_25 -# 1078| r1078_26(glval) = FunctionAddress[operator!=] : -# 1078| r1078_27(glval) = VariableAddress[(__end)] : -# 1078| r1078_28(iterator) = Load[(__end)] : &:r1078_27, m1078_22 -# 1078| r1078_29(bool) = Call[operator!=] : func:r1078_26, this:r0_5, 0:r1078_28 -# 1078| m1078_30(unknown) = ^CallSideEffect : ~m1078_24 -# 1078| m1078_31(unknown) = Chi : total:m1078_24, partial:m1078_30 -#-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, m1078_23 -# 1078| v1078_32(void) = ConditionalBranch : r1078_29 +# 1080| Block 1 +# 1080| m1080_23(iterator) = Phi : from 0:m1080_14, from 4:m1080_49 +# 1080| m1080_24(unknown) = Phi : from 0:~m1080_21, from 4:~m1080_46 +# 1080| r1080_25(glval) = VariableAddress[(__begin)] : +#-----| r0_5(glval) = Convert : r1080_25 +# 1080| r1080_26(glval) = FunctionAddress[operator!=] : +# 1080| r1080_27(glval) = VariableAddress[(__end)] : +# 1080| r1080_28(iterator) = Load[(__end)] : &:r1080_27, m1080_22 +# 1080| r1080_29(bool) = Call[operator!=] : func:r1080_26, this:r0_5, 0:r1080_28 +# 1080| m1080_30(unknown) = ^CallSideEffect : ~m1080_24 +# 1080| m1080_31(unknown) = Chi : total:m1080_24, partial:m1080_30 +#-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, m1080_23 +# 1080| v1080_32(void) = ConditionalBranch : r1080_29 #-----| False -> Block 5 #-----| True -> Block 2 -# 1078| Block 2 -# 1078| r1078_33(glval) = VariableAddress[e] : -# 1078| r1078_34(glval) = VariableAddress[(__begin)] : -#-----| r0_7(glval) = Convert : r1078_34 -# 1078| r1078_35(glval) = FunctionAddress[operator*] : -# 1078| r1078_36(int &) = Call[operator*] : func:r1078_35, this:r0_7 -# 1078| m1078_37(unknown) = ^CallSideEffect : ~m1078_31 -# 1078| m1078_38(unknown) = Chi : total:m1078_31, partial:m1078_37 -#-----| v0_8(void) = ^IndirectReadSideEffect[-1] : &:r0_7, m1078_23 -# 1078| r1078_39(int) = Load[?] : &:r1078_36, ~m1078_38 -# 1078| m1078_40(int) = Store[e] : &:r1078_33, r1078_39 -# 1079| r1079_1(glval) = VariableAddress[e] : -# 1079| r1079_2(int) = Load[e] : &:r1079_1, m1078_40 -# 1079| r1079_3(int) = Constant[0] : -# 1079| r1079_4(bool) = CompareGT : r1079_2, r1079_3 -# 1079| v1079_5(void) = ConditionalBranch : r1079_4 +# 1080| Block 2 +# 1080| r1080_33(glval) = VariableAddress[e] : +# 1080| r1080_34(glval) = VariableAddress[(__begin)] : +#-----| r0_7(glval) = Convert : r1080_34 +# 1080| r1080_35(glval) = FunctionAddress[operator*] : +# 1080| r1080_36(int &) = Call[operator*] : func:r1080_35, this:r0_7 +# 1080| m1080_37(unknown) = ^CallSideEffect : ~m1080_31 +# 1080| m1080_38(unknown) = Chi : total:m1080_31, partial:m1080_37 +#-----| v0_8(void) = ^IndirectReadSideEffect[-1] : &:r0_7, m1080_23 +# 1080| r1080_39(int) = Load[?] : &:r1080_36, ~m1080_38 +# 1080| m1080_40(int) = Store[e] : &:r1080_33, r1080_39 +# 1081| r1081_1(glval) = VariableAddress[e] : +# 1081| r1081_2(int) = Load[e] : &:r1081_1, m1080_40 +# 1081| r1081_3(int) = Constant[0] : +# 1081| r1081_4(bool) = CompareGT : r1081_2, r1081_3 +# 1081| v1081_5(void) = ConditionalBranch : r1081_4 #-----| False -> Block 4 #-----| True -> Block 3 -# 1080| Block 3 -# 1080| v1080_1(void) = NoOp : +# 1082| Block 3 +# 1082| v1082_1(void) = NoOp : #-----| Goto -> Block 4 -# 1078| Block 4 -# 1078| v1078_41(void) = NoOp : -# 1078| r1078_42(glval) = VariableAddress[(__begin)] : -# 1078| r1078_43(glval) = FunctionAddress[operator++] : -# 1078| r1078_44(iterator &) = Call[operator++] : func:r1078_43, this:r1078_42 -# 1078| m1078_45(unknown) = ^CallSideEffect : ~m1078_38 -# 1078| m1078_46(unknown) = Chi : total:m1078_38, partial:m1078_45 -# 1078| v1078_47(void) = ^IndirectReadSideEffect[-1] : &:r1078_42, m1078_23 -# 1078| m1078_48(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r1078_42 -# 1078| m1078_49(iterator) = Chi : total:m1078_23, partial:m1078_48 -# 1078| r1078_50(glval) = CopyValue : r1078_44 +# 1080| Block 4 +# 1080| v1080_41(void) = NoOp : +# 1080| r1080_42(glval) = VariableAddress[(__begin)] : +# 1080| r1080_43(glval) = FunctionAddress[operator++] : +# 1080| r1080_44(iterator &) = Call[operator++] : func:r1080_43, this:r1080_42 +# 1080| m1080_45(unknown) = ^CallSideEffect : ~m1080_38 +# 1080| m1080_46(unknown) = Chi : total:m1080_38, partial:m1080_45 +# 1080| v1080_47(void) = ^IndirectReadSideEffect[-1] : &:r1080_42, m1080_23 +# 1080| m1080_48(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r1080_42 +# 1080| m1080_49(iterator) = Chi : total:m1080_23, partial:m1080_48 +# 1080| r1080_50(glval) = CopyValue : r1080_44 #-----| Goto (back edge) -> Block 1 -# 1084| Block 5 -# 1084| r1084_1(glval &>) = VariableAddress[(__range)] : -# 1084| r1084_2(glval &>) = VariableAddress[v] : -# 1084| r1084_3(vector &) = Load[v] : &:r1084_2, m1077_6 -# 1084| r1084_4(glval>) = CopyValue : r1084_3 -# 1084| r1084_5(vector &) = CopyValue : r1084_4 -# 1084| m1084_6(vector &) = Store[(__range)] : &:r1084_1, r1084_5 -# 1084| r1084_7(glval) = VariableAddress[(__begin)] : -# 1084| r1084_8(glval &>) = VariableAddress[(__range)] : -# 1084| r1084_9(vector &) = Load[(__range)] : &:r1084_8, m1084_6 -#-----| r0_9(glval>) = CopyValue : r1084_9 -# 1084| r1084_10(glval) = FunctionAddress[begin] : -# 1084| r1084_11(iterator) = Call[begin] : func:r1084_10, this:r0_9 -# 1084| m1084_12(unknown) = ^CallSideEffect : ~m1078_31 -# 1084| m1084_13(unknown) = Chi : total:m1078_31, partial:m1084_12 -#-----| v0_10(void) = ^IndirectReadSideEffect[-1] : &:r0_9, ~m1077_8 -# 1084| m1084_14(iterator) = Store[(__begin)] : &:r1084_7, r1084_11 -# 1084| r1084_15(glval) = VariableAddress[(__end)] : -# 1084| r1084_16(glval &>) = VariableAddress[(__range)] : -# 1084| r1084_17(vector &) = Load[(__range)] : &:r1084_16, m1084_6 -#-----| r0_11(glval>) = CopyValue : r1084_17 -# 1084| r1084_18(glval) = FunctionAddress[end] : -# 1084| r1084_19(iterator) = Call[end] : func:r1084_18, this:r0_11 -# 1084| m1084_20(unknown) = ^CallSideEffect : ~m1084_13 -# 1084| m1084_21(unknown) = Chi : total:m1084_13, partial:m1084_20 -#-----| v0_12(void) = ^IndirectReadSideEffect[-1] : &:r0_11, ~m1077_8 -# 1084| m1084_22(iterator) = Store[(__end)] : &:r1084_15, r1084_19 +# 1086| Block 5 +# 1086| r1086_1(glval &>) = VariableAddress[(__range)] : +# 1086| r1086_2(glval &>) = VariableAddress[v] : +# 1086| r1086_3(vector &) = Load[v] : &:r1086_2, m1079_6 +# 1086| r1086_4(glval>) = CopyValue : r1086_3 +# 1086| r1086_5(vector &) = CopyValue : r1086_4 +# 1086| m1086_6(vector &) = Store[(__range)] : &:r1086_1, r1086_5 +# 1086| r1086_7(glval) = VariableAddress[(__begin)] : +# 1086| r1086_8(glval &>) = VariableAddress[(__range)] : +# 1086| r1086_9(vector &) = Load[(__range)] : &:r1086_8, m1086_6 +#-----| r0_9(glval>) = CopyValue : r1086_9 +# 1086| r1086_10(glval) = FunctionAddress[begin] : +# 1086| r1086_11(iterator) = Call[begin] : func:r1086_10, this:r0_9 +# 1086| m1086_12(unknown) = ^CallSideEffect : ~m1080_31 +# 1086| m1086_13(unknown) = Chi : total:m1080_31, partial:m1086_12 +#-----| v0_10(void) = ^IndirectReadSideEffect[-1] : &:r0_9, ~m1079_8 +# 1086| m1086_14(iterator) = Store[(__begin)] : &:r1086_7, r1086_11 +# 1086| r1086_15(glval) = VariableAddress[(__end)] : +# 1086| r1086_16(glval &>) = VariableAddress[(__range)] : +# 1086| r1086_17(vector &) = Load[(__range)] : &:r1086_16, m1086_6 +#-----| r0_11(glval>) = CopyValue : r1086_17 +# 1086| r1086_18(glval) = FunctionAddress[end] : +# 1086| r1086_19(iterator) = Call[end] : func:r1086_18, this:r0_11 +# 1086| m1086_20(unknown) = ^CallSideEffect : ~m1086_13 +# 1086| m1086_21(unknown) = Chi : total:m1086_13, partial:m1086_20 +#-----| v0_12(void) = ^IndirectReadSideEffect[-1] : &:r0_11, ~m1079_8 +# 1086| m1086_22(iterator) = Store[(__end)] : &:r1086_15, r1086_19 #-----| Goto -> Block 6 -# 1084| Block 6 -# 1084| m1084_23(iterator) = Phi : from 5:m1084_14, from 7:m1084_40 -# 1084| m1084_24(unknown) = Phi : from 5:~m1084_21, from 7:~m1084_37 -# 1084| r1084_25(glval) = VariableAddress[(__begin)] : -#-----| r0_13(glval) = Convert : r1084_25 -# 1084| r1084_26(glval) = FunctionAddress[operator!=] : -# 1084| r1084_27(glval) = VariableAddress[(__end)] : -# 1084| r1084_28(iterator) = Load[(__end)] : &:r1084_27, m1084_22 -# 1084| r1084_29(bool) = Call[operator!=] : func:r1084_26, this:r0_13, 0:r1084_28 -# 1084| m1084_30(unknown) = ^CallSideEffect : ~m1084_24 -# 1084| m1084_31(unknown) = Chi : total:m1084_24, partial:m1084_30 -#-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_13, m1084_23 -# 1084| v1084_32(void) = ConditionalBranch : r1084_29 +# 1086| Block 6 +# 1086| m1086_23(iterator) = Phi : from 5:m1086_14, from 7:m1086_40 +# 1086| m1086_24(unknown) = Phi : from 5:~m1086_21, from 7:~m1086_37 +# 1086| r1086_25(glval) = VariableAddress[(__begin)] : +#-----| r0_13(glval) = Convert : r1086_25 +# 1086| r1086_26(glval) = FunctionAddress[operator!=] : +# 1086| r1086_27(glval) = VariableAddress[(__end)] : +# 1086| r1086_28(iterator) = Load[(__end)] : &:r1086_27, m1086_22 +# 1086| r1086_29(bool) = Call[operator!=] : func:r1086_26, this:r0_13, 0:r1086_28 +# 1086| m1086_30(unknown) = ^CallSideEffect : ~m1086_24 +# 1086| m1086_31(unknown) = Chi : total:m1086_24, partial:m1086_30 +#-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_13, m1086_23 +# 1086| v1086_32(void) = ConditionalBranch : r1086_29 #-----| False -> Block 10 #-----| True -> Block 8 -# 1084| Block 7 -# 1084| r1084_33(glval) = VariableAddress[(__begin)] : -# 1084| r1084_34(glval) = FunctionAddress[operator++] : -# 1084| r1084_35(iterator &) = Call[operator++] : func:r1084_34, this:r1084_33 -# 1084| m1084_36(unknown) = ^CallSideEffect : ~m1084_47 -# 1084| m1084_37(unknown) = Chi : total:m1084_47, partial:m1084_36 -# 1084| v1084_38(void) = ^IndirectReadSideEffect[-1] : &:r1084_33, m1084_23 -# 1084| m1084_39(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r1084_33 -# 1084| m1084_40(iterator) = Chi : total:m1084_23, partial:m1084_39 -# 1084| r1084_41(glval) = CopyValue : r1084_35 +# 1086| Block 7 +# 1086| r1086_33(glval) = VariableAddress[(__begin)] : +# 1086| r1086_34(glval) = FunctionAddress[operator++] : +# 1086| r1086_35(iterator &) = Call[operator++] : func:r1086_34, this:r1086_33 +# 1086| m1086_36(unknown) = ^CallSideEffect : ~m1086_47 +# 1086| m1086_37(unknown) = Chi : total:m1086_47, partial:m1086_36 +# 1086| v1086_38(void) = ^IndirectReadSideEffect[-1] : &:r1086_33, m1086_23 +# 1086| m1086_39(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r1086_33 +# 1086| m1086_40(iterator) = Chi : total:m1086_23, partial:m1086_39 +# 1086| r1086_41(glval) = CopyValue : r1086_35 #-----| Goto (back edge) -> Block 6 -# 1084| Block 8 -# 1084| r1084_42(glval) = VariableAddress[e] : -# 1084| r1084_43(glval) = VariableAddress[(__begin)] : -#-----| r0_15(glval) = Convert : r1084_43 -# 1084| r1084_44(glval) = FunctionAddress[operator*] : -# 1084| r1084_45(int &) = Call[operator*] : func:r1084_44, this:r0_15 -# 1084| m1084_46(unknown) = ^CallSideEffect : ~m1084_31 -# 1084| m1084_47(unknown) = Chi : total:m1084_31, partial:m1084_46 -#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, m1084_23 -# 1084| r1084_48(glval) = CopyValue : r1084_45 -# 1084| r1084_49(glval) = Convert : r1084_48 -# 1084| r1084_50(int &) = CopyValue : r1084_49 -# 1084| m1084_51(int &) = Store[e] : &:r1084_42, r1084_50 -# 1085| r1085_1(glval) = VariableAddress[e] : -# 1085| r1085_2(int &) = Load[e] : &:r1085_1, m1084_51 -# 1085| r1085_3(int) = Load[?] : &:r1085_2, ~m1084_47 -# 1085| r1085_4(int) = Constant[5] : -# 1085| r1085_5(bool) = CompareLT : r1085_3, r1085_4 -# 1085| v1085_6(void) = ConditionalBranch : r1085_5 +# 1086| Block 8 +# 1086| r1086_42(glval) = VariableAddress[e] : +# 1086| r1086_43(glval) = VariableAddress[(__begin)] : +#-----| r0_15(glval) = Convert : r1086_43 +# 1086| r1086_44(glval) = FunctionAddress[operator*] : +# 1086| r1086_45(int &) = Call[operator*] : func:r1086_44, this:r0_15 +# 1086| m1086_46(unknown) = ^CallSideEffect : ~m1086_31 +# 1086| m1086_47(unknown) = Chi : total:m1086_31, partial:m1086_46 +#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, m1086_23 +# 1086| r1086_48(glval) = CopyValue : r1086_45 +# 1086| r1086_49(glval) = Convert : r1086_48 +# 1086| r1086_50(int &) = CopyValue : r1086_49 +# 1086| m1086_51(int &) = Store[e] : &:r1086_42, r1086_50 +# 1087| r1087_1(glval) = VariableAddress[e] : +# 1087| r1087_2(int &) = Load[e] : &:r1087_1, m1086_51 +# 1087| r1087_3(int) = Load[?] : &:r1087_2, ~m1086_47 +# 1087| r1087_4(int) = Constant[5] : +# 1087| r1087_5(bool) = CompareLT : r1087_3, r1087_4 +# 1087| v1087_6(void) = ConditionalBranch : r1087_5 #-----| False -> Block 7 #-----| True -> Block 9 -# 1086| Block 9 -# 1086| v1086_1(void) = NoOp : +# 1088| Block 9 +# 1088| v1088_1(void) = NoOp : #-----| Goto -> Block 10 -# 1088| Block 10 -# 1088| m1088_1(unknown) = Phi : from 6:~m1084_31, from 9:~m1084_47 -# 1088| v1088_2(void) = NoOp : -# 1089| v1089_1(void) = NoOp : -# 1077| v1077_9(void) = ReturnIndirection[v] : &:r1077_7, m1077_8 -# 1077| v1077_10(void) = ReturnVoid : -# 1077| v1077_11(void) = AliasedUse : ~m1088_1 -# 1077| v1077_12(void) = ExitFunction : +# 1090| Block 10 +# 1090| m1090_1(unknown) = Phi : from 6:~m1086_31, from 9:~m1086_47 +# 1090| v1090_2(void) = NoOp : +# 1091| v1091_1(void) = NoOp : +# 1079| v1079_9(void) = ReturnIndirection[v] : &:r1079_7, m1079_8 +# 1079| v1079_10(void) = ReturnVoid : +# 1079| v1079_11(void) = AliasedUse : ~m1090_1 +# 1079| v1079_12(void) = ExitFunction : -# 1108| int AsmStmt(int) -# 1108| Block 0 -# 1108| v1108_1(void) = EnterFunction : -# 1108| m1108_2(unknown) = AliasedDefinition : -# 1108| m1108_3(unknown) = InitializeNonLocal : -# 1108| m1108_4(unknown) = Chi : total:m1108_2, partial:m1108_3 -# 1108| r1108_5(glval) = VariableAddress[x] : -# 1108| m1108_6(int) = InitializeParameter[x] : &:r1108_5 -# 1109| m1109_1(unknown) = InlineAsm : ~m1108_4 -# 1109| m1109_2(unknown) = Chi : total:m1108_4, partial:m1109_1 -# 1110| r1110_1(glval) = VariableAddress[#return] : -# 1110| r1110_2(glval) = VariableAddress[x] : -# 1110| r1110_3(int) = Load[x] : &:r1110_2, m1108_6 -# 1110| m1110_4(int) = Store[#return] : &:r1110_1, r1110_3 -# 1108| r1108_7(glval) = VariableAddress[#return] : -# 1108| v1108_8(void) = ReturnValue : &:r1108_7, m1110_4 -# 1108| v1108_9(void) = AliasedUse : ~m1109_2 -# 1108| v1108_10(void) = ExitFunction : +# 1110| int AsmStmt(int) +# 1110| Block 0 +# 1110| v1110_1(void) = EnterFunction : +# 1110| m1110_2(unknown) = AliasedDefinition : +# 1110| m1110_3(unknown) = InitializeNonLocal : +# 1110| m1110_4(unknown) = Chi : total:m1110_2, partial:m1110_3 +# 1110| r1110_5(glval) = VariableAddress[x] : +# 1110| m1110_6(int) = InitializeParameter[x] : &:r1110_5 +# 1111| m1111_1(unknown) = InlineAsm : ~m1110_4 +# 1111| m1111_2(unknown) = Chi : total:m1110_4, partial:m1111_1 +# 1112| r1112_1(glval) = VariableAddress[#return] : +# 1112| r1112_2(glval) = VariableAddress[x] : +# 1112| r1112_3(int) = Load[x] : &:r1112_2, m1110_6 +# 1112| m1112_4(int) = Store[#return] : &:r1112_1, r1112_3 +# 1110| r1110_7(glval) = VariableAddress[#return] : +# 1110| v1110_8(void) = ReturnValue : &:r1110_7, m1112_4 +# 1110| v1110_9(void) = AliasedUse : ~m1111_2 +# 1110| v1110_10(void) = ExitFunction : -# 1113| void AsmStmtWithOutputs(unsigned int&, unsigned int, unsigned int&, unsigned int) -# 1113| Block 0 -# 1113| v1113_1(void) = EnterFunction : -# 1113| m1113_2(unknown) = AliasedDefinition : -# 1113| m1113_3(unknown) = InitializeNonLocal : -# 1113| m1113_4(unknown) = Chi : total:m1113_2, partial:m1113_3 -# 1113| r1113_5(glval) = VariableAddress[a] : -# 1113| m1113_6(unsigned int &) = InitializeParameter[a] : &:r1113_5 -# 1113| r1113_7(unsigned int &) = Load[a] : &:r1113_5, m1113_6 -# 1113| m1113_8(unknown) = InitializeIndirection[a] : &:r1113_7 -# 1113| r1113_9(glval) = VariableAddress[b] : -# 1113| m1113_10(unsigned int) = InitializeParameter[b] : &:r1113_9 -# 1113| r1113_11(glval) = VariableAddress[c] : -# 1113| m1113_12(unsigned int &) = InitializeParameter[c] : &:r1113_11 -# 1113| r1113_13(unsigned int &) = Load[c] : &:r1113_11, m1113_12 -# 1113| m1113_14(unknown) = InitializeIndirection[c] : &:r1113_13 -# 1113| r1113_15(glval) = VariableAddress[d] : -# 1113| m1113_16(unsigned int) = InitializeParameter[d] : &:r1113_15 -# 1118| r1118_1(glval) = VariableAddress[a] : -# 1118| r1118_2(unsigned int &) = Load[a] : &:r1118_1, m1113_6 -# 1118| r1118_3(glval) = CopyValue : r1118_2 -# 1118| r1118_4(glval) = VariableAddress[b] : -# 1118| r1118_5(glval) = VariableAddress[c] : -# 1118| r1118_6(unsigned int &) = Load[c] : &:r1118_5, m1113_12 -# 1118| r1118_7(unsigned int) = Load[?] : &:r1118_6, ~m1113_14 -# 1118| r1118_8(glval) = VariableAddress[d] : -# 1118| r1118_9(unsigned int) = Load[d] : &:r1118_8, m1113_16 -# 1115| m1115_1(unknown) = InlineAsm : ~m1113_4, 0:r1118_3, 1:r1118_4, 2:r1118_7, 3:r1118_9 -# 1115| m1115_2(unknown) = Chi : total:m1113_4, partial:m1115_1 -# 1120| v1120_1(void) = NoOp : -# 1113| v1113_17(void) = ReturnIndirection[a] : &:r1113_7, m1113_8 -# 1113| v1113_18(void) = ReturnIndirection[c] : &:r1113_13, m1113_14 -# 1113| v1113_19(void) = ReturnVoid : -# 1113| v1113_20(void) = AliasedUse : ~m1115_2 -# 1113| v1113_21(void) = ExitFunction : +# 1115| void AsmStmtWithOutputs(unsigned int&, unsigned int, unsigned int&, unsigned int) +# 1115| Block 0 +# 1115| v1115_1(void) = EnterFunction : +# 1115| m1115_2(unknown) = AliasedDefinition : +# 1115| m1115_3(unknown) = InitializeNonLocal : +# 1115| m1115_4(unknown) = Chi : total:m1115_2, partial:m1115_3 +# 1115| r1115_5(glval) = VariableAddress[a] : +# 1115| m1115_6(unsigned int &) = InitializeParameter[a] : &:r1115_5 +# 1115| r1115_7(unsigned int &) = Load[a] : &:r1115_5, m1115_6 +# 1115| m1115_8(unknown) = InitializeIndirection[a] : &:r1115_7 +# 1115| r1115_9(glval) = VariableAddress[b] : +# 1115| m1115_10(unsigned int) = InitializeParameter[b] : &:r1115_9 +# 1115| r1115_11(glval) = VariableAddress[c] : +# 1115| m1115_12(unsigned int &) = InitializeParameter[c] : &:r1115_11 +# 1115| r1115_13(unsigned int &) = Load[c] : &:r1115_11, m1115_12 +# 1115| m1115_14(unknown) = InitializeIndirection[c] : &:r1115_13 +# 1115| r1115_15(glval) = VariableAddress[d] : +# 1115| m1115_16(unsigned int) = InitializeParameter[d] : &:r1115_15 +# 1120| r1120_1(glval) = VariableAddress[a] : +# 1120| r1120_2(unsigned int &) = Load[a] : &:r1120_1, m1115_6 +# 1120| r1120_3(glval) = CopyValue : r1120_2 +# 1120| r1120_4(glval) = VariableAddress[b] : +# 1120| r1120_5(glval) = VariableAddress[c] : +# 1120| r1120_6(unsigned int &) = Load[c] : &:r1120_5, m1115_12 +# 1120| r1120_7(unsigned int) = Load[?] : &:r1120_6, ~m1115_14 +# 1120| r1120_8(glval) = VariableAddress[d] : +# 1120| r1120_9(unsigned int) = Load[d] : &:r1120_8, m1115_16 +# 1117| m1117_1(unknown) = InlineAsm : ~m1115_4, 0:r1120_3, 1:r1120_4, 2:r1120_7, 3:r1120_9 +# 1117| m1117_2(unknown) = Chi : total:m1115_4, partial:m1117_1 +# 1122| v1122_1(void) = NoOp : +# 1115| v1115_17(void) = ReturnIndirection[a] : &:r1115_7, m1115_8 +# 1115| v1115_18(void) = ReturnIndirection[c] : &:r1115_13, m1115_14 +# 1115| v1115_19(void) = ReturnVoid : +# 1115| v1115_20(void) = AliasedUse : ~m1117_2 +# 1115| v1115_21(void) = ExitFunction : -# 1122| void ExternDeclarations() -# 1122| Block 0 -# 1122| v1122_1(void) = EnterFunction : -# 1122| m1122_2(unknown) = AliasedDefinition : -# 1122| m1122_3(unknown) = InitializeNonLocal : -# 1122| m1122_4(unknown) = Chi : total:m1122_2, partial:m1122_3 -# 1125| r1125_1(glval) = VariableAddress[x] : -# 1125| m1125_2(int) = Uninitialized[x] : &:r1125_1 -# 1126| r1126_1(glval) = VariableAddress[y] : -# 1126| m1126_2(int) = Uninitialized[y] : &:r1126_1 -# 1127| r1127_1(glval) = VariableAddress[h] : -# 1127| m1127_2(int) = Uninitialized[h] : &:r1127_1 -# 1129| v1129_1(void) = NoOp : -# 1122| v1122_5(void) = ReturnVoid : -# 1122| v1122_6(void) = AliasedUse : m1122_3 -# 1122| v1122_7(void) = ExitFunction : +# 1124| void ExternDeclarations() +# 1124| Block 0 +# 1124| v1124_1(void) = EnterFunction : +# 1124| m1124_2(unknown) = AliasedDefinition : +# 1124| m1124_3(unknown) = InitializeNonLocal : +# 1124| m1124_4(unknown) = Chi : total:m1124_2, partial:m1124_3 +# 1127| r1127_1(glval) = VariableAddress[x] : +# 1127| m1127_2(int) = Uninitialized[x] : &:r1127_1 +# 1128| r1128_1(glval) = VariableAddress[y] : +# 1128| m1128_2(int) = Uninitialized[y] : &:r1128_1 +# 1129| r1129_1(glval) = VariableAddress[h] : +# 1129| m1129_2(int) = Uninitialized[h] : &:r1129_1 +# 1131| v1131_1(void) = NoOp : +# 1124| v1124_5(void) = ReturnVoid : +# 1124| v1124_6(void) = AliasedUse : m1124_3 +# 1124| v1124_7(void) = ExitFunction : -# 1137| void ExternDeclarationsInMacro() -# 1137| Block 0 -# 1137| v1137_1(void) = EnterFunction : -# 1137| m1137_2(unknown) = AliasedDefinition : -# 1137| m1137_3(unknown) = InitializeNonLocal : -# 1137| m1137_4(unknown) = Chi : total:m1137_2, partial:m1137_3 -# 1139| r1139_1(glval) = VariableAddress[i] : -# 1139| r1139_2(int) = Constant[0] : -# 1139| m1139_3(int) = Store[i] : &:r1139_1, r1139_2 +# 1139| void ExternDeclarationsInMacro() +# 1139| Block 0 +# 1139| v1139_1(void) = EnterFunction : +# 1139| m1139_2(unknown) = AliasedDefinition : +# 1139| m1139_3(unknown) = InitializeNonLocal : +# 1139| m1139_4(unknown) = Chi : total:m1139_2, partial:m1139_3 +# 1141| r1141_1(glval) = VariableAddress[i] : +# 1141| r1141_2(int) = Constant[0] : +# 1141| m1141_3(int) = Store[i] : &:r1141_1, r1141_2 #-----| Goto -> Block 1 -# 1139| Block 1 -# 1139| m1139_4(int) = Phi : from 0:m1139_3, from 2:m1139_14 -# 1139| r1139_5(glval) = VariableAddress[i] : -# 1139| r1139_6(int) = Load[i] : &:r1139_5, m1139_4 -# 1139| r1139_7(int) = Constant[10] : -# 1139| r1139_8(bool) = CompareLT : r1139_6, r1139_7 -# 1139| v1139_9(void) = ConditionalBranch : r1139_8 +# 1141| Block 1 +# 1141| m1141_4(int) = Phi : from 0:m1141_3, from 2:m1141_14 +# 1141| r1141_5(glval) = VariableAddress[i] : +# 1141| r1141_6(int) = Load[i] : &:r1141_5, m1141_4 +# 1141| r1141_7(int) = Constant[10] : +# 1141| r1141_8(bool) = CompareLT : r1141_6, r1141_7 +# 1141| v1141_9(void) = ConditionalBranch : r1141_8 #-----| False -> Block 3 #-----| True -> Block 2 -# 1139| Block 2 -# 1139| r1139_10(glval) = VariableAddress[i] : -# 1139| r1139_11(int) = Load[i] : &:r1139_10, m1139_4 -# 1139| r1139_12(int) = Constant[1] : -# 1139| r1139_13(int) = Add : r1139_11, r1139_12 -# 1139| m1139_14(int) = Store[i] : &:r1139_10, r1139_13 +# 1141| Block 2 +# 1141| r1141_10(glval) = VariableAddress[i] : +# 1141| r1141_11(int) = Load[i] : &:r1141_10, m1141_4 +# 1141| r1141_12(int) = Constant[1] : +# 1141| r1141_13(int) = Add : r1141_11, r1141_12 +# 1141| m1141_14(int) = Store[i] : &:r1141_10, r1141_13 #-----| Goto (back edge) -> Block 1 -# 1139| Block 3 -# 1139| v1139_15(void) = NoOp : -# 1140| v1140_1(void) = NoOp : -# 1137| v1137_5(void) = ReturnVoid : -# 1137| v1137_6(void) = AliasedUse : m1137_3 -# 1137| v1137_7(void) = ExitFunction : +# 1141| Block 3 +# 1141| v1141_15(void) = NoOp : +# 1142| v1142_1(void) = NoOp : +# 1139| v1139_5(void) = ReturnVoid : +# 1139| v1139_6(void) = AliasedUse : m1139_3 +# 1139| v1139_7(void) = ExitFunction : -# 1142| void TryCatchNoCatchAny(bool) -# 1142| Block 0 -# 1142| v1142_1(void) = EnterFunction : -# 1142| m1142_2(unknown) = AliasedDefinition : -# 1142| m1142_3(unknown) = InitializeNonLocal : -# 1142| m1142_4(unknown) = Chi : total:m1142_2, partial:m1142_3 -# 1142| r1142_5(glval) = VariableAddress[b] : -# 1142| m1142_6(bool) = InitializeParameter[b] : &:r1142_5 -# 1144| r1144_1(glval) = VariableAddress[x] : -# 1144| r1144_2(int) = Constant[5] : -# 1144| m1144_3(int) = Store[x] : &:r1144_1, r1144_2 -# 1145| r1145_1(glval) = VariableAddress[b] : -# 1145| r1145_2(bool) = Load[b] : &:r1145_1, m1142_6 -# 1145| v1145_3(void) = ConditionalBranch : r1145_2 +# 1144| void TryCatchNoCatchAny(bool) +# 1144| Block 0 +# 1144| v1144_1(void) = EnterFunction : +# 1144| m1144_2(unknown) = AliasedDefinition : +# 1144| m1144_3(unknown) = InitializeNonLocal : +# 1144| m1144_4(unknown) = Chi : total:m1144_2, partial:m1144_3 +# 1144| r1144_5(glval) = VariableAddress[b] : +# 1144| m1144_6(bool) = InitializeParameter[b] : &:r1144_5 +# 1146| r1146_1(glval) = VariableAddress[x] : +# 1146| r1146_2(int) = Constant[5] : +# 1146| m1146_3(int) = Store[x] : &:r1146_1, r1146_2 +# 1147| r1147_1(glval) = VariableAddress[b] : +# 1147| r1147_2(bool) = Load[b] : &:r1147_1, m1144_6 +# 1147| v1147_3(void) = ConditionalBranch : r1147_2 #-----| False -> Block 4 #-----| True -> Block 3 -# 1142| Block 1 -# 1142| m1142_7(unknown) = Phi : from 2:~m1142_10, from 10:~m1142_4 -# 1142| v1142_8(void) = AliasedUse : ~m1142_7 -# 1142| v1142_9(void) = ExitFunction : +# 1144| Block 1 +# 1144| m1144_7(unknown) = Phi : from 2:~m1144_10, from 10:~m1144_4 +# 1144| v1144_8(void) = AliasedUse : ~m1144_7 +# 1144| v1144_9(void) = ExitFunction : -# 1142| Block 2 -# 1142| m1142_10(unknown) = Phi : from 7:~m1154_8, from 8:~m1142_4 -# 1142| v1142_11(void) = Unwind : +# 1144| Block 2 +# 1144| m1144_10(unknown) = Phi : from 7:~m1156_8, from 8:~m1144_4 +# 1144| v1144_11(void) = Unwind : #-----| Goto -> Block 1 -# 1146| Block 3 -# 1146| r1146_1(glval) = VariableAddress[#throw1146:7] : -# 1146| r1146_2(glval) = StringConstant["string literal"] : -# 1146| r1146_3(char *) = Convert : r1146_2 -# 1146| m1146_4(char *) = Store[#throw1146:7] : &:r1146_1, r1146_3 -# 1146| v1146_5(void) = ThrowValue : &:r1146_1, m1146_4 +# 1148| Block 3 +# 1148| r1148_1(glval) = VariableAddress[#throw1148:7] : +# 1148| r1148_2(glval) = StringConstant["string literal"] : +# 1148| r1148_3(char *) = Convert : r1148_2 +# 1148| m1148_4(char *) = Store[#throw1148:7] : &:r1148_1, r1148_3 +# 1148| v1148_5(void) = ThrowValue : &:r1148_1, m1148_4 #-----| Exception -> Block 6 -# 1148| Block 4 -# 1148| r1148_1(glval) = VariableAddress[x] : -# 1148| r1148_2(int) = Load[x] : &:r1148_1, m1144_3 -# 1148| r1148_3(int) = Constant[2] : -# 1148| r1148_4(bool) = CompareLT : r1148_2, r1148_3 -# 1148| v1148_5(void) = ConditionalBranch : r1148_4 +# 1150| Block 4 +# 1150| r1150_1(glval) = VariableAddress[x] : +# 1150| r1150_2(int) = Load[x] : &:r1150_1, m1146_3 +# 1150| r1150_3(int) = Constant[2] : +# 1150| r1150_4(bool) = CompareLT : r1150_2, r1150_3 +# 1150| v1150_5(void) = ConditionalBranch : r1150_4 #-----| False -> Block 5 #-----| True -> Block 11 -# 1151| Block 5 -# 1151| r1151_1(int) = Constant[7] : -# 1151| r1151_2(glval) = VariableAddress[x] : -# 1151| m1151_3(int) = Store[x] : &:r1151_2, r1151_1 +# 1153| Block 5 +# 1153| r1153_1(int) = Constant[7] : +# 1153| r1153_2(glval) = VariableAddress[x] : +# 1153| m1153_3(int) = Store[x] : &:r1153_2, r1153_1 #-----| Goto -> Block 10 -# 1153| Block 6 -# 1153| v1153_1(void) = CatchByType[const char *] : +# 1155| Block 6 +# 1155| v1155_1(void) = CatchByType[const char *] : #-----| Exception -> Block 8 #-----| Goto -> Block 7 -# 1153| Block 7 -# 1153| r1153_2(glval) = VariableAddress[s] : -# 1153| m1153_3(char *) = InitializeParameter[s] : &:r1153_2 -# 1153| r1153_4(char *) = Load[s] : &:r1153_2, m1153_3 -# 1153| m1153_5(unknown) = InitializeIndirection[s] : &:r1153_4 -# 1154| r1154_1(glval) = VariableAddress[#throw1154:5] : -# 1154| m1154_2(String) = Uninitialized[#throw1154:5] : &:r1154_1 -# 1154| r1154_3(glval) = FunctionAddress[String] : -# 1154| r1154_4(glval) = VariableAddress[s] : -# 1154| r1154_5(char *) = Load[s] : &:r1154_4, m1153_3 -# 1154| v1154_6(void) = Call[String] : func:r1154_3, this:r1154_1, 0:r1154_5 -# 1154| m1154_7(unknown) = ^CallSideEffect : ~m1142_4 -# 1154| m1154_8(unknown) = Chi : total:m1142_4, partial:m1154_7 -# 1154| v1154_9(void) = ^BufferReadSideEffect[0] : &:r1154_5, ~m1153_5 -# 1154| m1154_10(String) = ^IndirectMayWriteSideEffect[-1] : &:r1154_1 -# 1154| m1154_11(String) = Chi : total:m1154_2, partial:m1154_10 -# 1154| v1154_12(void) = ThrowValue : &:r1154_1, m1154_11 +# 1155| Block 7 +# 1155| r1155_2(glval) = VariableAddress[s] : +# 1155| m1155_3(char *) = InitializeParameter[s] : &:r1155_2 +# 1155| r1155_4(char *) = Load[s] : &:r1155_2, m1155_3 +# 1155| m1155_5(unknown) = InitializeIndirection[s] : &:r1155_4 +# 1156| r1156_1(glval) = VariableAddress[#throw1156:5] : +# 1156| m1156_2(String) = Uninitialized[#throw1156:5] : &:r1156_1 +# 1156| r1156_3(glval) = FunctionAddress[String] : +# 1156| r1156_4(glval) = VariableAddress[s] : +# 1156| r1156_5(char *) = Load[s] : &:r1156_4, m1155_3 +# 1156| v1156_6(void) = Call[String] : func:r1156_3, this:r1156_1, 0:r1156_5 +# 1156| m1156_7(unknown) = ^CallSideEffect : ~m1144_4 +# 1156| m1156_8(unknown) = Chi : total:m1144_4, partial:m1156_7 +# 1156| v1156_9(void) = ^BufferReadSideEffect[0] : &:r1156_5, ~m1155_5 +# 1156| m1156_10(String) = ^IndirectMayWriteSideEffect[-1] : &:r1156_1 +# 1156| m1156_11(String) = Chi : total:m1156_2, partial:m1156_10 +# 1156| v1156_12(void) = ThrowValue : &:r1156_1, m1156_11 #-----| Exception -> Block 2 -# 1156| Block 8 -# 1156| v1156_1(void) = CatchByType[const String &] : +# 1158| Block 8 +# 1158| v1158_1(void) = CatchByType[const String &] : #-----| Exception -> Block 2 #-----| Goto -> Block 9 -# 1156| Block 9 -# 1156| r1156_2(glval) = VariableAddress[e] : -# 1156| m1156_3(String &) = InitializeParameter[e] : &:r1156_2 -# 1156| r1156_4(String &) = Load[e] : &:r1156_2, m1156_3 -# 1156| m1156_5(unknown) = InitializeIndirection[e] : &:r1156_4 -# 1156| v1156_6(void) = NoOp : +# 1158| Block 9 +# 1158| r1158_2(glval) = VariableAddress[e] : +# 1158| m1158_3(String &) = InitializeParameter[e] : &:r1158_2 +# 1158| r1158_4(String &) = Load[e] : &:r1158_2, m1158_3 +# 1158| m1158_5(unknown) = InitializeIndirection[e] : &:r1158_4 +# 1158| v1158_6(void) = NoOp : #-----| Goto -> Block 10 -# 1158| Block 10 -# 1158| v1158_1(void) = NoOp : -# 1142| v1142_12(void) = ReturnVoid : +# 1160| Block 10 +# 1160| v1160_1(void) = NoOp : +# 1144| v1144_12(void) = ReturnVoid : #-----| Goto -> Block 1 -# 1142| Block 11 -# 1142| v1142_13(void) = Unreached : +# 1144| Block 11 +# 1144| v1144_13(void) = Unreached : -# 1162| void VectorTypes(int) -# 1162| Block 0 -# 1162| v1162_1(void) = EnterFunction : -# 1162| m1162_2(unknown) = AliasedDefinition : -# 1162| m1162_3(unknown) = InitializeNonLocal : -# 1162| m1162_4(unknown) = Chi : total:m1162_2, partial:m1162_3 -# 1162| r1162_5(glval) = VariableAddress[i] : -# 1162| m1162_6(int) = InitializeParameter[i] : &:r1162_5 -# 1163| r1163_1(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : -# 1163| m1163_2(__attribute((vector_size(16UL))) int) = Uninitialized[vi4] : &:r1163_1 -# 1163| r1163_3(int) = Constant[0] : -# 1163| r1163_4(glval) = PointerAdd[4] : r1163_1, r1163_3 -# 1163| r1163_5(int) = Constant[0] : -# 1163| m1163_6(int) = Store[?] : &:r1163_4, r1163_5 -# 1163| m1163_7(__attribute((vector_size(16UL))) int) = Chi : total:m1163_2, partial:m1163_6 -# 1163| r1163_8(int) = Constant[1] : -# 1163| r1163_9(glval) = PointerAdd[4] : r1163_1, r1163_8 -# 1163| r1163_10(int) = Constant[1] : -# 1163| m1163_11(int) = Store[?] : &:r1163_9, r1163_10 -# 1163| m1163_12(__attribute((vector_size(16UL))) int) = Chi : total:m1163_7, partial:m1163_11 -# 1163| r1163_13(int) = Constant[2] : -# 1163| r1163_14(glval) = PointerAdd[4] : r1163_1, r1163_13 -# 1163| r1163_15(int) = Constant[2] : -# 1163| m1163_16(int) = Store[?] : &:r1163_14, r1163_15 -# 1163| m1163_17(__attribute((vector_size(16UL))) int) = Chi : total:m1163_12, partial:m1163_16 -# 1163| r1163_18(int) = Constant[3] : -# 1163| r1163_19(glval) = PointerAdd[4] : r1163_1, r1163_18 -# 1163| r1163_20(int) = Constant[3] : -# 1163| m1163_21(int) = Store[?] : &:r1163_19, r1163_20 -# 1163| m1163_22(__attribute((vector_size(16UL))) int) = Chi : total:m1163_17, partial:m1163_21 -# 1164| r1164_1(glval) = VariableAddress[x] : -# 1164| r1164_2(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : -# 1164| r1164_3(glval) = VariableAddress[i] : -# 1164| r1164_4(int) = Load[i] : &:r1164_3, m1162_6 -# 1164| r1164_5(glval) = PointerAdd[4] : r1164_2, r1164_4 -# 1164| r1164_6(int) = Load[?] : &:r1164_5, ~m1163_22 -# 1164| m1164_7(int) = Store[x] : &:r1164_1, r1164_6 -# 1165| r1165_1(glval) = VariableAddress[x] : -# 1165| r1165_2(int) = Load[x] : &:r1165_1, m1164_7 -# 1165| r1165_3(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : -# 1165| r1165_4(glval) = VariableAddress[i] : -# 1165| r1165_5(int) = Load[i] : &:r1165_4, m1162_6 -# 1165| r1165_6(glval) = PointerAdd[4] : r1165_3, r1165_5 -# 1165| m1165_7(int) = Store[?] : &:r1165_6, r1165_2 -# 1165| m1165_8(__attribute((vector_size(16UL))) int) = Chi : total:m1163_22, partial:m1165_7 -# 1166| r1166_1(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4_shuffle] : +# 1164| void VectorTypes(int) +# 1164| Block 0 +# 1164| v1164_1(void) = EnterFunction : +# 1164| m1164_2(unknown) = AliasedDefinition : +# 1164| m1164_3(unknown) = InitializeNonLocal : +# 1164| m1164_4(unknown) = Chi : total:m1164_2, partial:m1164_3 +# 1164| r1164_5(glval) = VariableAddress[i] : +# 1164| m1164_6(int) = InitializeParameter[i] : &:r1164_5 +# 1165| r1165_1(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : +# 1165| m1165_2(__attribute((vector_size(16UL))) int) = Uninitialized[vi4] : &:r1165_1 +# 1165| r1165_3(int) = Constant[0] : +# 1165| r1165_4(glval) = PointerAdd[4] : r1165_1, r1165_3 +# 1165| r1165_5(int) = Constant[0] : +# 1165| m1165_6(int) = Store[?] : &:r1165_4, r1165_5 +# 1165| m1165_7(__attribute((vector_size(16UL))) int) = Chi : total:m1165_2, partial:m1165_6 +# 1165| r1165_8(int) = Constant[1] : +# 1165| r1165_9(glval) = PointerAdd[4] : r1165_1, r1165_8 +# 1165| r1165_10(int) = Constant[1] : +# 1165| m1165_11(int) = Store[?] : &:r1165_9, r1165_10 +# 1165| m1165_12(__attribute((vector_size(16UL))) int) = Chi : total:m1165_7, partial:m1165_11 +# 1165| r1165_13(int) = Constant[2] : +# 1165| r1165_14(glval) = PointerAdd[4] : r1165_1, r1165_13 +# 1165| r1165_15(int) = Constant[2] : +# 1165| m1165_16(int) = Store[?] : &:r1165_14, r1165_15 +# 1165| m1165_17(__attribute((vector_size(16UL))) int) = Chi : total:m1165_12, partial:m1165_16 +# 1165| r1165_18(int) = Constant[3] : +# 1165| r1165_19(glval) = PointerAdd[4] : r1165_1, r1165_18 +# 1165| r1165_20(int) = Constant[3] : +# 1165| m1165_21(int) = Store[?] : &:r1165_19, r1165_20 +# 1165| m1165_22(__attribute((vector_size(16UL))) int) = Chi : total:m1165_17, partial:m1165_21 +# 1166| r1166_1(glval) = VariableAddress[x] : # 1166| r1166_2(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : -# 1166| r1166_3(__attribute((vector_size(16UL))) int) = Load[vi4] : &:r1166_2, m1165_8 -# 1166| r1166_4(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : -# 1166| r1166_5(__attribute((vector_size(16UL))) int) = Load[vi4] : &:r1166_4, m1165_8 -# 1166| r1166_6(int) = Constant[3] : -# 1166| r1166_7(int) = Constant[2] : -# 1166| r1166_8(int) = Constant[1] : -# 1166| r1166_9(int) = Constant[0] : -# 1166| r1166_10(__attribute((vector_size(16))) int) = BuiltIn[__builtin_shufflevector] : 0:r1166_3, 1:r1166_5, 2:r1166_6, 3:r1166_7, 4:r1166_8, 5:r1166_9 -# 1166| m1166_11(__attribute((vector_size(16UL))) int) = Store[vi4_shuffle] : &:r1166_1, r1166_10 -# 1167| r1167_1(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : -# 1167| r1167_2(__attribute((vector_size(16UL))) int) = Load[vi4] : &:r1167_1, m1165_8 -# 1167| r1167_3(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4_shuffle] : -# 1167| r1167_4(__attribute((vector_size(16UL))) int) = Load[vi4_shuffle] : &:r1167_3, m1166_11 -# 1167| r1167_5(__attribute((vector_size(16UL))) int) = Add : r1167_2, r1167_4 -# 1167| r1167_6(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : -# 1167| m1167_7(__attribute((vector_size(16UL))) int) = Store[vi4] : &:r1167_6, r1167_5 -# 1168| v1168_1(void) = NoOp : -# 1162| v1162_7(void) = ReturnVoid : -# 1162| v1162_8(void) = AliasedUse : m1162_3 -# 1162| v1162_9(void) = ExitFunction : +# 1166| r1166_3(glval) = VariableAddress[i] : +# 1166| r1166_4(int) = Load[i] : &:r1166_3, m1164_6 +# 1166| r1166_5(glval) = PointerAdd[4] : r1166_2, r1166_4 +# 1166| r1166_6(int) = Load[?] : &:r1166_5, ~m1165_22 +# 1166| m1166_7(int) = Store[x] : &:r1166_1, r1166_6 +# 1167| r1167_1(glval) = VariableAddress[x] : +# 1167| r1167_2(int) = Load[x] : &:r1167_1, m1166_7 +# 1167| r1167_3(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : +# 1167| r1167_4(glval) = VariableAddress[i] : +# 1167| r1167_5(int) = Load[i] : &:r1167_4, m1164_6 +# 1167| r1167_6(glval) = PointerAdd[4] : r1167_3, r1167_5 +# 1167| m1167_7(int) = Store[?] : &:r1167_6, r1167_2 +# 1167| m1167_8(__attribute((vector_size(16UL))) int) = Chi : total:m1165_22, partial:m1167_7 +# 1168| r1168_1(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4_shuffle] : +# 1168| r1168_2(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : +# 1168| r1168_3(__attribute((vector_size(16UL))) int) = Load[vi4] : &:r1168_2, m1167_8 +# 1168| r1168_4(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : +# 1168| r1168_5(__attribute((vector_size(16UL))) int) = Load[vi4] : &:r1168_4, m1167_8 +# 1168| r1168_6(int) = Constant[3] : +# 1168| r1168_7(int) = Constant[2] : +# 1168| r1168_8(int) = Constant[1] : +# 1168| r1168_9(int) = Constant[0] : +# 1168| r1168_10(__attribute((vector_size(16))) int) = BuiltIn[__builtin_shufflevector] : 0:r1168_3, 1:r1168_5, 2:r1168_6, 3:r1168_7, 4:r1168_8, 5:r1168_9 +# 1168| m1168_11(__attribute((vector_size(16UL))) int) = Store[vi4_shuffle] : &:r1168_1, r1168_10 +# 1169| r1169_1(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : +# 1169| r1169_2(__attribute((vector_size(16UL))) int) = Load[vi4] : &:r1169_1, m1167_8 +# 1169| r1169_3(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4_shuffle] : +# 1169| r1169_4(__attribute((vector_size(16UL))) int) = Load[vi4_shuffle] : &:r1169_3, m1168_11 +# 1169| r1169_5(__attribute((vector_size(16UL))) int) = Add : r1169_2, r1169_4 +# 1169| r1169_6(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : +# 1169| m1169_7(__attribute((vector_size(16UL))) int) = Store[vi4] : &:r1169_6, r1169_5 +# 1170| v1170_1(void) = NoOp : +# 1164| v1164_7(void) = ReturnVoid : +# 1164| v1164_8(void) = AliasedUse : m1164_3 +# 1164| v1164_9(void) = ExitFunction : -# 1172| int ModeledCallTarget(int) -# 1172| Block 0 -# 1172| v1172_1(void) = EnterFunction : -# 1172| m1172_2(unknown) = AliasedDefinition : -# 1172| m1172_3(unknown) = InitializeNonLocal : -# 1172| m1172_4(unknown) = Chi : total:m1172_2, partial:m1172_3 -# 1172| r1172_5(glval) = VariableAddress[x] : -# 1172| m1172_6(int) = InitializeParameter[x] : &:r1172_5 -# 1173| r1173_1(glval) = VariableAddress[y] : -# 1173| m1173_2(int) = Uninitialized[y] : &:r1173_1 -# 1174| r1174_1(glval) = FunctionAddress[memcpy] : -# 1174| r1174_2(glval) = VariableAddress[y] : -# 1174| r1174_3(int *) = CopyValue : r1174_2 -# 1174| r1174_4(void *) = Convert : r1174_3 +# 1174| int ModeledCallTarget(int) +# 1174| Block 0 +# 1174| v1174_1(void) = EnterFunction : +# 1174| m1174_2(unknown) = AliasedDefinition : +# 1174| m1174_3(unknown) = InitializeNonLocal : +# 1174| m1174_4(unknown) = Chi : total:m1174_2, partial:m1174_3 # 1174| r1174_5(glval) = VariableAddress[x] : -# 1174| r1174_6(int *) = CopyValue : r1174_5 -# 1174| r1174_7(void *) = Convert : r1174_6 -# 1174| r1174_8(int) = Constant[4] : -# 1174| r1174_9(void *) = Call[memcpy] : func:r1174_1, 0:r1174_4, 1:r1174_7, 2:r1174_8 -# 1174| v1174_10(void) = ^SizedBufferReadSideEffect[1] : &:r1174_7, r1174_8, ~m1172_6 -# 1174| m1174_11(unknown) = ^SizedBufferMustWriteSideEffect[0] : &:r1174_4, r1174_8 -# 1174| m1174_12(int) = Chi : total:m1173_2, partial:m1174_11 -# 1175| r1175_1(glval) = VariableAddress[#return] : -# 1175| r1175_2(glval) = VariableAddress[y] : -# 1175| r1175_3(int) = Load[y] : &:r1175_2, m1174_12 -# 1175| m1175_4(int) = Store[#return] : &:r1175_1, r1175_3 -# 1172| r1172_7(glval) = VariableAddress[#return] : -# 1172| v1172_8(void) = ReturnValue : &:r1172_7, m1175_4 -# 1172| v1172_9(void) = AliasedUse : m1172_3 -# 1172| v1172_10(void) = ExitFunction : +# 1174| m1174_6(int) = InitializeParameter[x] : &:r1174_5 +# 1175| r1175_1(glval) = VariableAddress[y] : +# 1175| m1175_2(int) = Uninitialized[y] : &:r1175_1 +# 1176| r1176_1(glval) = FunctionAddress[memcpy] : +# 1176| r1176_2(glval) = VariableAddress[y] : +# 1176| r1176_3(int *) = CopyValue : r1176_2 +# 1176| r1176_4(void *) = Convert : r1176_3 +# 1176| r1176_5(glval) = VariableAddress[x] : +# 1176| r1176_6(int *) = CopyValue : r1176_5 +# 1176| r1176_7(void *) = Convert : r1176_6 +# 1176| r1176_8(int) = Constant[4] : +# 1176| r1176_9(void *) = Call[memcpy] : func:r1176_1, 0:r1176_4, 1:r1176_7, 2:r1176_8 +# 1176| v1176_10(void) = ^SizedBufferReadSideEffect[1] : &:r1176_7, r1176_8, ~m1174_6 +# 1176| m1176_11(unknown) = ^SizedBufferMustWriteSideEffect[0] : &:r1176_4, r1176_8 +# 1176| m1176_12(int) = Chi : total:m1175_2, partial:m1176_11 +# 1177| r1177_1(glval) = VariableAddress[#return] : +# 1177| r1177_2(glval) = VariableAddress[y] : +# 1177| r1177_3(int) = Load[y] : &:r1177_2, m1176_12 +# 1177| m1177_4(int) = Store[#return] : &:r1177_1, r1177_3 +# 1174| r1174_7(glval) = VariableAddress[#return] : +# 1174| v1174_8(void) = ReturnValue : &:r1174_7, m1177_4 +# 1174| v1174_9(void) = AliasedUse : m1174_3 +# 1174| v1174_10(void) = ExitFunction : -# 1178| String ReturnObjectImpl() -# 1178| Block 0 -# 1178| v1178_1(void) = EnterFunction : -# 1178| m1178_2(unknown) = AliasedDefinition : -# 1178| m1178_3(unknown) = InitializeNonLocal : -# 1178| m1178_4(unknown) = Chi : total:m1178_2, partial:m1178_3 -# 1179| r1179_1(glval) = VariableAddress[#return] : -# 1179| m1179_2(String) = Uninitialized[#return] : &:r1179_1 -# 1179| r1179_3(glval) = FunctionAddress[String] : -# 1179| r1179_4(glval) = StringConstant["foo"] : -# 1179| r1179_5(char *) = Convert : r1179_4 -# 1179| v1179_6(void) = Call[String] : func:r1179_3, this:r1179_1, 0:r1179_5 -# 1179| m1179_7(unknown) = ^CallSideEffect : ~m1178_4 -# 1179| m1179_8(unknown) = Chi : total:m1178_4, partial:m1179_7 -# 1179| v1179_9(void) = ^BufferReadSideEffect[0] : &:r1179_5, ~m1178_3 -# 1179| m1179_10(String) = ^IndirectMayWriteSideEffect[-1] : &:r1179_1 -# 1179| m1179_11(String) = Chi : total:m1179_2, partial:m1179_10 -# 1178| r1178_5(glval) = VariableAddress[#return] : -# 1178| v1178_6(void) = ReturnValue : &:r1178_5, m1179_11 -# 1178| v1178_7(void) = AliasedUse : ~m1179_8 -# 1178| v1178_8(void) = ExitFunction : +# 1180| String ReturnObjectImpl() +# 1180| Block 0 +# 1180| v1180_1(void) = EnterFunction : +# 1180| m1180_2(unknown) = AliasedDefinition : +# 1180| m1180_3(unknown) = InitializeNonLocal : +# 1180| m1180_4(unknown) = Chi : total:m1180_2, partial:m1180_3 +# 1181| r1181_1(glval) = VariableAddress[#return] : +# 1181| m1181_2(String) = Uninitialized[#return] : &:r1181_1 +# 1181| r1181_3(glval) = FunctionAddress[String] : +# 1181| r1181_4(glval) = StringConstant["foo"] : +# 1181| r1181_5(char *) = Convert : r1181_4 +# 1181| v1181_6(void) = Call[String] : func:r1181_3, this:r1181_1, 0:r1181_5 +# 1181| m1181_7(unknown) = ^CallSideEffect : ~m1180_4 +# 1181| m1181_8(unknown) = Chi : total:m1180_4, partial:m1181_7 +# 1181| v1181_9(void) = ^BufferReadSideEffect[0] : &:r1181_5, ~m1180_3 +# 1181| m1181_10(String) = ^IndirectMayWriteSideEffect[-1] : &:r1181_1 +# 1181| m1181_11(String) = Chi : total:m1181_2, partial:m1181_10 +# 1180| r1180_5(glval) = VariableAddress[#return] : +# 1180| v1180_6(void) = ReturnValue : &:r1180_5, m1181_11 +# 1180| v1180_7(void) = AliasedUse : ~m1181_8 +# 1180| v1180_8(void) = ExitFunction : -# 1182| void switch1Case(int) -# 1182| Block 0 -# 1182| v1182_1(void) = EnterFunction : -# 1182| m1182_2(unknown) = AliasedDefinition : -# 1182| m1182_3(unknown) = InitializeNonLocal : -# 1182| m1182_4(unknown) = Chi : total:m1182_2, partial:m1182_3 -# 1182| r1182_5(glval) = VariableAddress[x] : -# 1182| m1182_6(int) = InitializeParameter[x] : &:r1182_5 -# 1183| r1183_1(glval) = VariableAddress[y] : -# 1183| r1183_2(int) = Constant[0] : -# 1183| m1183_3(int) = Store[y] : &:r1183_1, r1183_2 -# 1184| r1184_1(glval) = VariableAddress[x] : -# 1184| r1184_2(int) = Load[x] : &:r1184_1, m1182_6 -# 1184| v1184_3(void) = Switch : r1184_2 +# 1184| void switch1Case(int) +# 1184| Block 0 +# 1184| v1184_1(void) = EnterFunction : +# 1184| m1184_2(unknown) = AliasedDefinition : +# 1184| m1184_3(unknown) = InitializeNonLocal : +# 1184| m1184_4(unknown) = Chi : total:m1184_2, partial:m1184_3 +# 1184| r1184_5(glval) = VariableAddress[x] : +# 1184| m1184_6(int) = InitializeParameter[x] : &:r1184_5 +# 1185| r1185_1(glval) = VariableAddress[y] : +# 1185| r1185_2(int) = Constant[0] : +# 1185| m1185_3(int) = Store[y] : &:r1185_1, r1185_2 +# 1186| r1186_1(glval) = VariableAddress[x] : +# 1186| r1186_2(int) = Load[x] : &:r1186_1, m1184_6 +# 1186| v1186_3(void) = Switch : r1186_2 #-----| Case[1] -> Block 1 #-----| Default -> Block 2 -# 1185| Block 1 -# 1185| v1185_1(void) = NoOp : -# 1186| r1186_1(int) = Constant[2] : -# 1186| r1186_2(glval) = VariableAddress[y] : -# 1186| m1186_3(int) = Store[y] : &:r1186_2, r1186_1 +# 1187| Block 1 +# 1187| v1187_1(void) = NoOp : +# 1188| r1188_1(int) = Constant[2] : +# 1188| r1188_2(glval) = VariableAddress[y] : +# 1188| m1188_3(int) = Store[y] : &:r1188_2, r1188_1 #-----| Goto -> Block 2 -# 1188| Block 2 -# 1188| m1188_1(int) = Phi : from 0:m1183_3, from 1:m1186_3 -# 1188| r1188_2(glval) = VariableAddress[z] : -# 1188| r1188_3(glval) = VariableAddress[y] : -# 1188| r1188_4(int) = Load[y] : &:r1188_3, m1188_1 -# 1188| m1188_5(int) = Store[z] : &:r1188_2, r1188_4 -# 1189| v1189_1(void) = NoOp : -# 1182| v1182_7(void) = ReturnVoid : -# 1182| v1182_8(void) = AliasedUse : m1182_3 -# 1182| v1182_9(void) = ExitFunction : +# 1190| Block 2 +# 1190| m1190_1(int) = Phi : from 0:m1185_3, from 1:m1188_3 +# 1190| r1190_2(glval) = VariableAddress[z] : +# 1190| r1190_3(glval) = VariableAddress[y] : +# 1190| r1190_4(int) = Load[y] : &:r1190_3, m1190_1 +# 1190| m1190_5(int) = Store[z] : &:r1190_2, r1190_4 +# 1191| v1191_1(void) = NoOp : +# 1184| v1184_7(void) = ReturnVoid : +# 1184| v1184_8(void) = AliasedUse : m1184_3 +# 1184| v1184_9(void) = ExitFunction : -# 1191| void switch2Case_fallthrough(int) -# 1191| Block 0 -# 1191| v1191_1(void) = EnterFunction : -# 1191| m1191_2(unknown) = AliasedDefinition : -# 1191| m1191_3(unknown) = InitializeNonLocal : -# 1191| m1191_4(unknown) = Chi : total:m1191_2, partial:m1191_3 -# 1191| r1191_5(glval) = VariableAddress[x] : -# 1191| m1191_6(int) = InitializeParameter[x] : &:r1191_5 -# 1192| r1192_1(glval) = VariableAddress[y] : -# 1192| r1192_2(int) = Constant[0] : -# 1192| m1192_3(int) = Store[y] : &:r1192_1, r1192_2 -# 1193| r1193_1(glval) = VariableAddress[x] : -# 1193| r1193_2(int) = Load[x] : &:r1193_1, m1191_6 -# 1193| v1193_3(void) = Switch : r1193_2 +# 1193| void switch2Case_fallthrough(int) +# 1193| Block 0 +# 1193| v1193_1(void) = EnterFunction : +# 1193| m1193_2(unknown) = AliasedDefinition : +# 1193| m1193_3(unknown) = InitializeNonLocal : +# 1193| m1193_4(unknown) = Chi : total:m1193_2, partial:m1193_3 +# 1193| r1193_5(glval) = VariableAddress[x] : +# 1193| m1193_6(int) = InitializeParameter[x] : &:r1193_5 +# 1194| r1194_1(glval) = VariableAddress[y] : +# 1194| r1194_2(int) = Constant[0] : +# 1194| m1194_3(int) = Store[y] : &:r1194_1, r1194_2 +# 1195| r1195_1(glval) = VariableAddress[x] : +# 1195| r1195_2(int) = Load[x] : &:r1195_1, m1193_6 +# 1195| v1195_3(void) = Switch : r1195_2 #-----| Case[1] -> Block 1 #-----| Case[2] -> Block 2 #-----| Default -> Block 3 -# 1194| Block 1 -# 1194| v1194_1(void) = NoOp : -# 1195| r1195_1(int) = Constant[2] : -# 1195| r1195_2(glval) = VariableAddress[y] : -# 1195| m1195_3(int) = Store[y] : &:r1195_2, r1195_1 -#-----| Goto -> Block 2 - -# 1196| Block 2 +# 1196| Block 1 # 1196| v1196_1(void) = NoOp : -# 1197| r1197_1(int) = Constant[3] : +# 1197| r1197_1(int) = Constant[2] : # 1197| r1197_2(glval) = VariableAddress[y] : # 1197| m1197_3(int) = Store[y] : &:r1197_2, r1197_1 +#-----| Goto -> Block 2 + +# 1198| Block 2 +# 1198| v1198_1(void) = NoOp : +# 1199| r1199_1(int) = Constant[3] : +# 1199| r1199_2(glval) = VariableAddress[y] : +# 1199| m1199_3(int) = Store[y] : &:r1199_2, r1199_1 #-----| Goto -> Block 3 -# 1199| Block 3 -# 1199| m1199_1(int) = Phi : from 0:m1192_3, from 2:m1197_3 -# 1199| r1199_2(glval) = VariableAddress[z] : -# 1199| r1199_3(glval) = VariableAddress[y] : -# 1199| r1199_4(int) = Load[y] : &:r1199_3, m1199_1 -# 1199| m1199_5(int) = Store[z] : &:r1199_2, r1199_4 -# 1200| v1200_1(void) = NoOp : -# 1191| v1191_7(void) = ReturnVoid : -# 1191| v1191_8(void) = AliasedUse : m1191_3 -# 1191| v1191_9(void) = ExitFunction : +# 1201| Block 3 +# 1201| m1201_1(int) = Phi : from 0:m1194_3, from 2:m1199_3 +# 1201| r1201_2(glval) = VariableAddress[z] : +# 1201| r1201_3(glval) = VariableAddress[y] : +# 1201| r1201_4(int) = Load[y] : &:r1201_3, m1201_1 +# 1201| m1201_5(int) = Store[z] : &:r1201_2, r1201_4 +# 1202| v1202_1(void) = NoOp : +# 1193| v1193_7(void) = ReturnVoid : +# 1193| v1193_8(void) = AliasedUse : m1193_3 +# 1193| v1193_9(void) = ExitFunction : -# 1202| void switch2Case(int) -# 1202| Block 0 -# 1202| v1202_1(void) = EnterFunction : -# 1202| m1202_2(unknown) = AliasedDefinition : -# 1202| m1202_3(unknown) = InitializeNonLocal : -# 1202| m1202_4(unknown) = Chi : total:m1202_2, partial:m1202_3 -# 1202| r1202_5(glval) = VariableAddress[x] : -# 1202| m1202_6(int) = InitializeParameter[x] : &:r1202_5 -# 1203| r1203_1(glval) = VariableAddress[y] : -# 1203| r1203_2(int) = Constant[0] : -# 1203| m1203_3(int) = Store[y] : &:r1203_1, r1203_2 -# 1204| r1204_1(glval) = VariableAddress[x] : -# 1204| r1204_2(int) = Load[x] : &:r1204_1, m1202_6 -# 1204| v1204_3(void) = Switch : r1204_2 +# 1204| void switch2Case(int) +# 1204| Block 0 +# 1204| v1204_1(void) = EnterFunction : +# 1204| m1204_2(unknown) = AliasedDefinition : +# 1204| m1204_3(unknown) = InitializeNonLocal : +# 1204| m1204_4(unknown) = Chi : total:m1204_2, partial:m1204_3 +# 1204| r1204_5(glval) = VariableAddress[x] : +# 1204| m1204_6(int) = InitializeParameter[x] : &:r1204_5 +# 1205| r1205_1(glval) = VariableAddress[y] : +# 1205| r1205_2(int) = Constant[0] : +# 1205| m1205_3(int) = Store[y] : &:r1205_1, r1205_2 +# 1206| r1206_1(glval) = VariableAddress[x] : +# 1206| r1206_2(int) = Load[x] : &:r1206_1, m1204_6 +# 1206| v1206_3(void) = Switch : r1206_2 #-----| Case[1] -> Block 1 #-----| Case[2] -> Block 2 #-----| Default -> Block 3 -# 1205| Block 1 -# 1205| v1205_1(void) = NoOp : -# 1206| r1206_1(int) = Constant[2] : -# 1206| r1206_2(glval) = VariableAddress[y] : -# 1206| m1206_3(int) = Store[y] : &:r1206_2, r1206_1 +# 1207| Block 1 # 1207| v1207_1(void) = NoOp : +# 1208| r1208_1(int) = Constant[2] : +# 1208| r1208_2(glval) = VariableAddress[y] : +# 1208| m1208_3(int) = Store[y] : &:r1208_2, r1208_1 +# 1209| v1209_1(void) = NoOp : #-----| Goto -> Block 3 -# 1208| Block 2 -# 1208| v1208_1(void) = NoOp : -# 1209| r1209_1(int) = Constant[3] : -# 1209| r1209_2(glval) = VariableAddress[y] : -# 1209| m1209_3(int) = Store[y] : &:r1209_2, r1209_1 -#-----| Goto -> Block 3 - -# 1210| Block 3 -# 1210| m1210_1(int) = Phi : from 0:m1203_3, from 1:m1206_3, from 2:m1209_3 -# 1210| v1210_2(void) = NoOp : -# 1211| r1211_1(glval) = VariableAddress[z] : +# 1210| Block 2 +# 1210| v1210_1(void) = NoOp : +# 1211| r1211_1(int) = Constant[3] : # 1211| r1211_2(glval) = VariableAddress[y] : -# 1211| r1211_3(int) = Load[y] : &:r1211_2, m1210_1 -# 1211| m1211_4(int) = Store[z] : &:r1211_1, r1211_3 -# 1212| v1212_1(void) = NoOp : -# 1202| v1202_7(void) = ReturnVoid : -# 1202| v1202_8(void) = AliasedUse : m1202_3 -# 1202| v1202_9(void) = ExitFunction : +# 1211| m1211_3(int) = Store[y] : &:r1211_2, r1211_1 +#-----| Goto -> Block 3 -# 1214| void switch2Case_default(int) -# 1214| Block 0 -# 1214| v1214_1(void) = EnterFunction : -# 1214| m1214_2(unknown) = AliasedDefinition : -# 1214| m1214_3(unknown) = InitializeNonLocal : -# 1214| m1214_4(unknown) = Chi : total:m1214_2, partial:m1214_3 -# 1214| r1214_5(glval) = VariableAddress[x] : -# 1214| m1214_6(int) = InitializeParameter[x] : &:r1214_5 -# 1215| r1215_1(glval) = VariableAddress[y] : -# 1215| r1215_2(int) = Constant[0] : -# 1215| m1215_3(int) = Store[y] : &:r1215_1, r1215_2 -# 1216| r1216_1(glval) = VariableAddress[x] : -# 1216| r1216_2(int) = Load[x] : &:r1216_1, m1214_6 -# 1216| v1216_3(void) = Switch : r1216_2 +# 1212| Block 3 +# 1212| m1212_1(int) = Phi : from 0:m1205_3, from 1:m1208_3, from 2:m1211_3 +# 1212| v1212_2(void) = NoOp : +# 1213| r1213_1(glval) = VariableAddress[z] : +# 1213| r1213_2(glval) = VariableAddress[y] : +# 1213| r1213_3(int) = Load[y] : &:r1213_2, m1212_1 +# 1213| m1213_4(int) = Store[z] : &:r1213_1, r1213_3 +# 1214| v1214_1(void) = NoOp : +# 1204| v1204_7(void) = ReturnVoid : +# 1204| v1204_8(void) = AliasedUse : m1204_3 +# 1204| v1204_9(void) = ExitFunction : + +# 1216| void switch2Case_default(int) +# 1216| Block 0 +# 1216| v1216_1(void) = EnterFunction : +# 1216| m1216_2(unknown) = AliasedDefinition : +# 1216| m1216_3(unknown) = InitializeNonLocal : +# 1216| m1216_4(unknown) = Chi : total:m1216_2, partial:m1216_3 +# 1216| r1216_5(glval) = VariableAddress[x] : +# 1216| m1216_6(int) = InitializeParameter[x] : &:r1216_5 +# 1217| r1217_1(glval) = VariableAddress[y] : +# 1217| r1217_2(int) = Constant[0] : +# 1217| m1217_3(int) = Store[y] : &:r1217_1, r1217_2 +# 1218| r1218_1(glval) = VariableAddress[x] : +# 1218| r1218_2(int) = Load[x] : &:r1218_1, m1216_6 +# 1218| v1218_3(void) = Switch : r1218_2 #-----| Case[1] -> Block 1 #-----| Case[2] -> Block 2 #-----| Default -> Block 3 -# 1217| Block 1 -# 1217| v1217_1(void) = NoOp : -# 1218| r1218_1(int) = Constant[2] : -# 1218| r1218_2(glval) = VariableAddress[y] : -# 1218| m1218_3(int) = Store[y] : &:r1218_2, r1218_1 +# 1219| Block 1 # 1219| v1219_1(void) = NoOp : -#-----| Goto -> Block 4 - -# 1221| Block 2 +# 1220| r1220_1(int) = Constant[2] : +# 1220| r1220_2(glval) = VariableAddress[y] : +# 1220| m1220_3(int) = Store[y] : &:r1220_2, r1220_1 # 1221| v1221_1(void) = NoOp : -# 1222| r1222_1(int) = Constant[3] : -# 1222| r1222_2(glval) = VariableAddress[y] : -# 1222| m1222_3(int) = Store[y] : &:r1222_2, r1222_1 +#-----| Goto -> Block 4 + +# 1223| Block 2 # 1223| v1223_1(void) = NoOp : -#-----| Goto -> Block 4 - -# 1225| Block 3 +# 1224| r1224_1(int) = Constant[3] : +# 1224| r1224_2(glval) = VariableAddress[y] : +# 1224| m1224_3(int) = Store[y] : &:r1224_2, r1224_1 # 1225| v1225_1(void) = NoOp : -# 1226| r1226_1(int) = Constant[4] : -# 1226| r1226_2(glval) = VariableAddress[y] : -# 1226| m1226_3(int) = Store[y] : &:r1226_2, r1226_1 #-----| Goto -> Block 4 -# 1227| Block 4 -# 1227| m1227_1(int) = Phi : from 1:m1218_3, from 2:m1222_3, from 3:m1226_3 -# 1227| v1227_2(void) = NoOp : -# 1228| r1228_1(glval) = VariableAddress[z] : +# 1227| Block 3 +# 1227| v1227_1(void) = NoOp : +# 1228| r1228_1(int) = Constant[4] : # 1228| r1228_2(glval) = VariableAddress[y] : -# 1228| r1228_3(int) = Load[y] : &:r1228_2, m1227_1 -# 1228| m1228_4(int) = Store[z] : &:r1228_1, r1228_3 -# 1229| v1229_1(void) = NoOp : -# 1214| v1214_7(void) = ReturnVoid : -# 1214| v1214_8(void) = AliasedUse : m1214_3 -# 1214| v1214_9(void) = ExitFunction : +# 1228| m1228_3(int) = Store[y] : &:r1228_2, r1228_1 +#-----| Goto -> Block 4 -# 1231| int staticLocalInit(int) -# 1231| Block 0 -# 1231| v1231_1(void) = EnterFunction : -# 1231| m1231_2(unknown) = AliasedDefinition : -# 1231| m1231_3(unknown) = InitializeNonLocal : -# 1231| m1231_4(unknown) = Chi : total:m1231_2, partial:m1231_3 -# 1231| r1231_5(glval) = VariableAddress[x] : -# 1231| m1231_6(int) = InitializeParameter[x] : &:r1231_5 -# 1234| r1234_1(glval) = VariableAddress[c#init] : -# 1234| r1234_2(bool) = Load[c#init] : &:r1234_1, ~m1231_3 -# 1234| v1234_3(void) = ConditionalBranch : r1234_2 -#-----| False -> Block 1 -#-----| True -> Block 2 +# 1229| Block 4 +# 1229| m1229_1(int) = Phi : from 1:m1220_3, from 2:m1224_3, from 3:m1228_3 +# 1229| v1229_2(void) = NoOp : +# 1230| r1230_1(glval) = VariableAddress[z] : +# 1230| r1230_2(glval) = VariableAddress[y] : +# 1230| r1230_3(int) = Load[y] : &:r1230_2, m1229_1 +# 1230| m1230_4(int) = Store[z] : &:r1230_1, r1230_3 +# 1231| v1231_1(void) = NoOp : +# 1216| v1216_7(void) = ReturnVoid : +# 1216| v1216_8(void) = AliasedUse : m1216_3 +# 1216| v1216_9(void) = ExitFunction : -# 1234| Block 1 -# 1234| r1234_4(glval) = VariableAddress[c] : -# 1234| r1234_5(glval) = VariableAddress[x] : -# 1234| r1234_6(int) = Load[x] : &:r1234_5, m1231_6 -# 1234| m1234_7(int) = Store[c] : &:r1234_4, r1234_6 -# 1234| m1234_8(unknown) = Chi : total:m1231_4, partial:m1234_7 -# 1234| r1234_9(bool) = Constant[1] : -# 1234| m1234_10(bool) = Store[c#init] : &:r1234_1, r1234_9 -# 1234| m1234_11(unknown) = Chi : total:m1234_8, partial:m1234_10 -#-----| Goto -> Block 2 - -# 1237| Block 2 -# 1237| m1237_1(int) = Phi : from 0:~m1231_3, from 1:m1234_7 -# 1237| m1237_2(unknown) = Phi : from 0:~m1231_4, from 1:~m1234_11 -# 1237| r1237_3(glval) = VariableAddress[#return] : -# 1237| r1237_4(glval) = VariableAddress[a] : -# 1237| r1237_5(int) = Load[a] : &:r1237_4, ~m1237_2 -# 1237| r1237_6(glval) = VariableAddress[b] : -# 1237| r1237_7(int) = Load[b] : &:r1237_6, ~m1237_2 -# 1237| r1237_8(int) = Add : r1237_5, r1237_7 -# 1237| r1237_9(glval) = VariableAddress[c] : -# 1237| r1237_10(int) = Load[c] : &:r1237_9, m1237_1 -# 1237| r1237_11(int) = Add : r1237_8, r1237_10 -# 1237| r1237_12(glval) = VariableAddress[d] : -# 1237| r1237_13(int) = Load[d] : &:r1237_12, ~m1237_2 -# 1237| r1237_14(int) = Add : r1237_11, r1237_13 -# 1237| m1237_15(int) = Store[#return] : &:r1237_3, r1237_14 -# 1231| r1231_7(glval) = VariableAddress[#return] : -# 1231| v1231_8(void) = ReturnValue : &:r1231_7, m1237_15 -# 1231| v1231_9(void) = AliasedUse : ~m1237_2 -# 1231| v1231_10(void) = ExitFunction : - -# 1232| int a -# 1232| Block 0 -# 1232| v1232_1(void) = EnterFunction : -# 1232| m1232_2(unknown) = AliasedDefinition : -# 1232| r1232_3(glval) = VariableAddress[a] : -# 1232| r1232_4(int) = Constant[0] : -# 1232| m1232_5(int) = Store[a] : &:r1232_3, r1232_4 -# 1232| m1232_6(unknown) = Chi : total:m1232_2, partial:m1232_5 -# 1232| v1232_7(void) = ReturnVoid : -# 1232| v1232_8(void) = AliasedUse : ~m1232_6 -# 1232| v1232_9(void) = ExitFunction : - -# 1233| int b +# 1233| int staticLocalInit(int) # 1233| Block 0 -# 1233| v1233_1(void) = EnterFunction : -# 1233| m1233_2(unknown) = AliasedDefinition : -# 1233| r1233_3(glval) = VariableAddress[b] : -# 1233| r1233_4(int) = Constant[4] : -# 1233| m1233_5(int) = Store[b] : &:r1233_3, r1233_4 -# 1233| m1233_6(unknown) = Chi : total:m1233_2, partial:m1233_5 -# 1233| v1233_7(void) = ReturnVoid : -# 1233| v1233_8(void) = AliasedUse : ~m1233_6 -# 1233| v1233_9(void) = ExitFunction : - -# 1240| void staticLocalWithConstructor(char const*) -# 1240| Block 0 -# 1240| v1240_1(void) = EnterFunction : -# 1240| m1240_2(unknown) = AliasedDefinition : -# 1240| m1240_3(unknown) = InitializeNonLocal : -# 1240| m1240_4(unknown) = Chi : total:m1240_2, partial:m1240_3 -# 1240| r1240_5(glval) = VariableAddress[dynamic] : -# 1240| m1240_6(char *) = InitializeParameter[dynamic] : &:r1240_5 -# 1240| r1240_7(char *) = Load[dynamic] : &:r1240_5, m1240_6 -# 1240| m1240_8(unknown) = InitializeIndirection[dynamic] : &:r1240_7 -# 1241| r1241_1(glval) = VariableAddress[a#init] : -# 1241| r1241_2(bool) = Load[a#init] : &:r1241_1, ~m1240_3 -# 1241| v1241_3(void) = ConditionalBranch : r1241_2 +# 1233| v1233_1(void) = EnterFunction : +# 1233| m1233_2(unknown) = AliasedDefinition : +# 1233| m1233_3(unknown) = InitializeNonLocal : +# 1233| m1233_4(unknown) = Chi : total:m1233_2, partial:m1233_3 +# 1233| r1233_5(glval) = VariableAddress[x] : +# 1233| m1233_6(int) = InitializeParameter[x] : &:r1233_5 +# 1236| r1236_1(glval) = VariableAddress[c#init] : +# 1236| r1236_2(bool) = Load[c#init] : &:r1236_1, ~m1233_3 +# 1236| v1236_3(void) = ConditionalBranch : r1236_2 #-----| False -> Block 1 #-----| True -> Block 2 -# 1241| Block 1 -# 1241| r1241_4(glval) = VariableAddress[a] : -#-----| r0_1(glval) = FunctionAddress[String] : -#-----| v0_2(void) = Call[String] : func:r0_1, this:r1241_4 -#-----| m0_3(unknown) = ^CallSideEffect : ~m1240_4 -#-----| m0_4(unknown) = Chi : total:m1240_4, partial:m0_3 -#-----| m0_5(String) = ^IndirectMayWriteSideEffect[-1] : &:r1241_4 -#-----| m0_6(unknown) = Chi : total:m0_4, partial:m0_5 -# 1241| r1241_5(bool) = Constant[1] : -# 1241| m1241_6(bool) = Store[a#init] : &:r1241_1, r1241_5 -# 1241| m1241_7(unknown) = Chi : total:m0_6, partial:m1241_6 +# 1236| Block 1 +# 1236| r1236_4(glval) = VariableAddress[c] : +# 1236| r1236_5(glval) = VariableAddress[x] : +# 1236| r1236_6(int) = Load[x] : &:r1236_5, m1233_6 +# 1236| m1236_7(int) = Store[c] : &:r1236_4, r1236_6 +# 1236| m1236_8(unknown) = Chi : total:m1233_4, partial:m1236_7 +# 1236| r1236_9(bool) = Constant[1] : +# 1236| m1236_10(bool) = Store[c#init] : &:r1236_1, r1236_9 +# 1236| m1236_11(unknown) = Chi : total:m1236_8, partial:m1236_10 #-----| Goto -> Block 2 -# 1242| Block 2 -# 1242| m1242_1(unknown) = Phi : from 0:~m1240_4, from 1:~m1241_7 -# 1242| r1242_2(glval) = VariableAddress[b#init] : -# 1242| r1242_3(bool) = Load[b#init] : &:r1242_2, ~m1242_1 -# 1242| v1242_4(void) = ConditionalBranch : r1242_3 +# 1239| Block 2 +# 1239| m1239_1(int) = Phi : from 0:~m1233_3, from 1:m1236_7 +# 1239| m1239_2(unknown) = Phi : from 0:~m1233_4, from 1:~m1236_11 +# 1239| r1239_3(glval) = VariableAddress[#return] : +# 1239| r1239_4(glval) = VariableAddress[a] : +# 1239| r1239_5(int) = Load[a] : &:r1239_4, ~m1239_2 +# 1239| r1239_6(glval) = VariableAddress[b] : +# 1239| r1239_7(int) = Load[b] : &:r1239_6, ~m1239_2 +# 1239| r1239_8(int) = Add : r1239_5, r1239_7 +# 1239| r1239_9(glval) = VariableAddress[c] : +# 1239| r1239_10(int) = Load[c] : &:r1239_9, m1239_1 +# 1239| r1239_11(int) = Add : r1239_8, r1239_10 +# 1239| r1239_12(glval) = VariableAddress[d] : +# 1239| r1239_13(int) = Load[d] : &:r1239_12, ~m1239_2 +# 1239| r1239_14(int) = Add : r1239_11, r1239_13 +# 1239| m1239_15(int) = Store[#return] : &:r1239_3, r1239_14 +# 1233| r1233_7(glval) = VariableAddress[#return] : +# 1233| v1233_8(void) = ReturnValue : &:r1233_7, m1239_15 +# 1233| v1233_9(void) = AliasedUse : ~m1239_2 +# 1233| v1233_10(void) = ExitFunction : + +# 1234| int a +# 1234| Block 0 +# 1234| v1234_1(void) = EnterFunction : +# 1234| m1234_2(unknown) = AliasedDefinition : +# 1234| r1234_3(glval) = VariableAddress[a] : +# 1234| r1234_4(int) = Constant[0] : +# 1234| m1234_5(int) = Store[a] : &:r1234_3, r1234_4 +# 1234| m1234_6(unknown) = Chi : total:m1234_2, partial:m1234_5 +# 1234| v1234_7(void) = ReturnVoid : +# 1234| v1234_8(void) = AliasedUse : ~m1234_6 +# 1234| v1234_9(void) = ExitFunction : + +# 1235| int b +# 1235| Block 0 +# 1235| v1235_1(void) = EnterFunction : +# 1235| m1235_2(unknown) = AliasedDefinition : +# 1235| r1235_3(glval) = VariableAddress[b] : +# 1235| r1235_4(int) = Constant[4] : +# 1235| m1235_5(int) = Store[b] : &:r1235_3, r1235_4 +# 1235| m1235_6(unknown) = Chi : total:m1235_2, partial:m1235_5 +# 1235| v1235_7(void) = ReturnVoid : +# 1235| v1235_8(void) = AliasedUse : ~m1235_6 +# 1235| v1235_9(void) = ExitFunction : + +# 1242| void staticLocalWithConstructor(char const*) +# 1242| Block 0 +# 1242| v1242_1(void) = EnterFunction : +# 1242| m1242_2(unknown) = AliasedDefinition : +# 1242| m1242_3(unknown) = InitializeNonLocal : +# 1242| m1242_4(unknown) = Chi : total:m1242_2, partial:m1242_3 +# 1242| r1242_5(glval) = VariableAddress[dynamic] : +# 1242| m1242_6(char *) = InitializeParameter[dynamic] : &:r1242_5 +# 1242| r1242_7(char *) = Load[dynamic] : &:r1242_5, m1242_6 +# 1242| m1242_8(unknown) = InitializeIndirection[dynamic] : &:r1242_7 +# 1243| r1243_1(glval) = VariableAddress[a#init] : +# 1243| r1243_2(bool) = Load[a#init] : &:r1243_1, ~m1242_3 +# 1243| v1243_3(void) = ConditionalBranch : r1243_2 +#-----| False -> Block 1 +#-----| True -> Block 2 + +# 1243| Block 1 +# 1243| r1243_4(glval) = VariableAddress[a] : +#-----| r0_1(glval) = FunctionAddress[String] : +#-----| v0_2(void) = Call[String] : func:r0_1, this:r1243_4 +#-----| m0_3(unknown) = ^CallSideEffect : ~m1242_4 +#-----| m0_4(unknown) = Chi : total:m1242_4, partial:m0_3 +#-----| m0_5(String) = ^IndirectMayWriteSideEffect[-1] : &:r1243_4 +#-----| m0_6(unknown) = Chi : total:m0_4, partial:m0_5 +# 1243| r1243_5(bool) = Constant[1] : +# 1243| m1243_6(bool) = Store[a#init] : &:r1243_1, r1243_5 +# 1243| m1243_7(unknown) = Chi : total:m0_6, partial:m1243_6 +#-----| Goto -> Block 2 + +# 1244| Block 2 +# 1244| m1244_1(unknown) = Phi : from 0:~m1242_4, from 1:~m1243_7 +# 1244| r1244_2(glval) = VariableAddress[b#init] : +# 1244| r1244_3(bool) = Load[b#init] : &:r1244_2, ~m1244_1 +# 1244| v1244_4(void) = ConditionalBranch : r1244_3 #-----| False -> Block 3 #-----| True -> Block 4 -# 1242| Block 3 -# 1242| r1242_5(glval) = VariableAddress[b] : -# 1242| r1242_6(glval) = FunctionAddress[String] : -# 1242| r1242_7(glval) = StringConstant["static"] : -# 1242| r1242_8(char *) = Convert : r1242_7 -# 1242| v1242_9(void) = Call[String] : func:r1242_6, this:r1242_5, 0:r1242_8 -# 1242| m1242_10(unknown) = ^CallSideEffect : ~m1242_1 -# 1242| m1242_11(unknown) = Chi : total:m1242_1, partial:m1242_10 -# 1242| v1242_12(void) = ^BufferReadSideEffect[0] : &:r1242_8, ~m1240_3 -# 1242| m1242_13(String) = ^IndirectMayWriteSideEffect[-1] : &:r1242_5 -# 1242| m1242_14(unknown) = Chi : total:m1242_11, partial:m1242_13 -# 1242| r1242_15(bool) = Constant[1] : -# 1242| m1242_16(bool) = Store[b#init] : &:r1242_2, r1242_15 -# 1242| m1242_17(unknown) = Chi : total:m1242_14, partial:m1242_16 +# 1244| Block 3 +# 1244| r1244_5(glval) = VariableAddress[b] : +# 1244| r1244_6(glval) = FunctionAddress[String] : +# 1244| r1244_7(glval) = StringConstant["static"] : +# 1244| r1244_8(char *) = Convert : r1244_7 +# 1244| v1244_9(void) = Call[String] : func:r1244_6, this:r1244_5, 0:r1244_8 +# 1244| m1244_10(unknown) = ^CallSideEffect : ~m1244_1 +# 1244| m1244_11(unknown) = Chi : total:m1244_1, partial:m1244_10 +# 1244| v1244_12(void) = ^BufferReadSideEffect[0] : &:r1244_8, ~m1242_3 +# 1244| m1244_13(String) = ^IndirectMayWriteSideEffect[-1] : &:r1244_5 +# 1244| m1244_14(unknown) = Chi : total:m1244_11, partial:m1244_13 +# 1244| r1244_15(bool) = Constant[1] : +# 1244| m1244_16(bool) = Store[b#init] : &:r1244_2, r1244_15 +# 1244| m1244_17(unknown) = Chi : total:m1244_14, partial:m1244_16 #-----| Goto -> Block 4 -# 1243| Block 4 -# 1243| m1243_1(unknown) = Phi : from 2:~m1242_1, from 3:~m1242_17 -# 1243| r1243_2(glval) = VariableAddress[c#init] : -# 1243| r1243_3(bool) = Load[c#init] : &:r1243_2, ~m1243_1 -# 1243| v1243_4(void) = ConditionalBranch : r1243_3 +# 1245| Block 4 +# 1245| m1245_1(unknown) = Phi : from 2:~m1244_1, from 3:~m1244_17 +# 1245| r1245_2(glval) = VariableAddress[c#init] : +# 1245| r1245_3(bool) = Load[c#init] : &:r1245_2, ~m1245_1 +# 1245| v1245_4(void) = ConditionalBranch : r1245_3 #-----| False -> Block 5 #-----| True -> Block 6 -# 1243| Block 5 -# 1243| r1243_5(glval) = VariableAddress[c] : -# 1243| r1243_6(glval) = FunctionAddress[String] : -# 1243| r1243_7(glval) = VariableAddress[dynamic] : -# 1243| r1243_8(char *) = Load[dynamic] : &:r1243_7, m1240_6 -# 1243| v1243_9(void) = Call[String] : func:r1243_6, this:r1243_5, 0:r1243_8 -# 1243| m1243_10(unknown) = ^CallSideEffect : ~m1243_1 -# 1243| m1243_11(unknown) = Chi : total:m1243_1, partial:m1243_10 -# 1243| v1243_12(void) = ^BufferReadSideEffect[0] : &:r1243_8, ~m1240_8 -# 1243| m1243_13(String) = ^IndirectMayWriteSideEffect[-1] : &:r1243_5 -# 1243| m1243_14(unknown) = Chi : total:m1243_11, partial:m1243_13 -# 1243| r1243_15(bool) = Constant[1] : -# 1243| m1243_16(bool) = Store[c#init] : &:r1243_2, r1243_15 -# 1243| m1243_17(unknown) = Chi : total:m1243_14, partial:m1243_16 +# 1245| Block 5 +# 1245| r1245_5(glval) = VariableAddress[c] : +# 1245| r1245_6(glval) = FunctionAddress[String] : +# 1245| r1245_7(glval) = VariableAddress[dynamic] : +# 1245| r1245_8(char *) = Load[dynamic] : &:r1245_7, m1242_6 +# 1245| v1245_9(void) = Call[String] : func:r1245_6, this:r1245_5, 0:r1245_8 +# 1245| m1245_10(unknown) = ^CallSideEffect : ~m1245_1 +# 1245| m1245_11(unknown) = Chi : total:m1245_1, partial:m1245_10 +# 1245| v1245_12(void) = ^BufferReadSideEffect[0] : &:r1245_8, ~m1242_8 +# 1245| m1245_13(String) = ^IndirectMayWriteSideEffect[-1] : &:r1245_5 +# 1245| m1245_14(unknown) = Chi : total:m1245_11, partial:m1245_13 +# 1245| r1245_15(bool) = Constant[1] : +# 1245| m1245_16(bool) = Store[c#init] : &:r1245_2, r1245_15 +# 1245| m1245_17(unknown) = Chi : total:m1245_14, partial:m1245_16 #-----| Goto -> Block 6 -# 1244| Block 6 -# 1244| m1244_1(unknown) = Phi : from 4:~m1243_1, from 5:~m1243_17 -# 1244| v1244_2(void) = NoOp : -# 1240| v1240_9(void) = ReturnIndirection[dynamic] : &:r1240_7, m1240_8 -# 1240| v1240_10(void) = ReturnVoid : -# 1240| v1240_11(void) = AliasedUse : ~m1244_1 -# 1240| v1240_12(void) = ExitFunction : +# 1246| Block 6 +# 1246| m1246_1(unknown) = Phi : from 4:~m1245_1, from 5:~m1245_17 +# 1246| v1246_2(void) = NoOp : +# 1242| v1242_9(void) = ReturnIndirection[dynamic] : &:r1242_7, m1242_8 +# 1242| v1242_10(void) = ReturnVoid : +# 1242| v1242_11(void) = AliasedUse : ~m1246_1 +# 1242| v1242_12(void) = ExitFunction : -# 1251| void test_strings(char*, char*) -# 1251| Block 0 -# 1251| v1251_1(void) = EnterFunction : -# 1251| m1251_2(unknown) = AliasedDefinition : -# 1251| m1251_3(unknown) = InitializeNonLocal : -# 1251| m1251_4(unknown) = Chi : total:m1251_2, partial:m1251_3 -# 1251| r1251_5(glval) = VariableAddress[s1] : -# 1251| m1251_6(char *) = InitializeParameter[s1] : &:r1251_5 -# 1251| r1251_7(char *) = Load[s1] : &:r1251_5, m1251_6 -# 1251| m1251_8(unknown) = InitializeIndirection[s1] : &:r1251_7 -# 1251| r1251_9(glval) = VariableAddress[s2] : -# 1251| m1251_10(char *) = InitializeParameter[s2] : &:r1251_9 -# 1251| r1251_11(char *) = Load[s2] : &:r1251_9, m1251_10 -# 1251| m1251_12(unknown) = InitializeIndirection[s2] : &:r1251_11 -# 1252| r1252_1(glval) = VariableAddress[buffer] : -# 1252| m1252_2(char[1024]) = Uninitialized[buffer] : &:r1252_1 -# 1252| r1252_3(int) = Constant[0] : -# 1252| r1252_4(glval) = PointerAdd[1] : r1252_1, r1252_3 -# 1252| r1252_5(char) = Constant[0] : -# 1252| m1252_6(char) = Store[?] : &:r1252_4, r1252_5 -# 1252| m1252_7(char[1024]) = Chi : total:m1252_2, partial:m1252_6 -# 1252| r1252_8(int) = Constant[1] : -# 1252| r1252_9(glval) = PointerAdd[1] : r1252_1, r1252_8 -# 1252| r1252_10(unknown[1023]) = Constant[0] : -# 1252| m1252_11(unknown[1023]) = Store[?] : &:r1252_9, r1252_10 -# 1252| m1252_12(char[1024]) = Chi : total:m1252_7, partial:m1252_11 -# 1254| r1254_1(glval) = FunctionAddress[strcpy] : -# 1254| r1254_2(glval) = VariableAddress[buffer] : -# 1254| r1254_3(char *) = Convert : r1254_2 -# 1254| r1254_4(glval) = VariableAddress[s1] : -# 1254| r1254_5(char *) = Load[s1] : &:r1254_4, m1251_6 -# 1254| r1254_6(char *) = Convert : r1254_5 -# 1254| r1254_7(char *) = Call[strcpy] : func:r1254_1, 0:r1254_3, 1:r1254_6 -# 1254| v1254_8(void) = ^BufferReadSideEffect[1] : &:r1254_6, ~m1251_8 -# 1254| m1254_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r1254_3 -# 1254| m1254_10(char[1024]) = Chi : total:m1252_12, partial:m1254_9 -# 1255| r1255_1(glval) = FunctionAddress[strcat] : -# 1255| r1255_2(glval) = VariableAddress[buffer] : -# 1255| r1255_3(char *) = Convert : r1255_2 -# 1255| r1255_4(glval) = VariableAddress[s2] : -# 1255| r1255_5(char *) = Load[s2] : &:r1255_4, m1251_10 -# 1255| r1255_6(char *) = Convert : r1255_5 -# 1255| r1255_7(char *) = Call[strcat] : func:r1255_1, 0:r1255_3, 1:r1255_6 -# 1255| v1255_8(void) = ^BufferReadSideEffect[0] : &:r1255_3, ~m1254_10 -# 1255| v1255_9(void) = ^BufferReadSideEffect[1] : &:r1255_6, ~m1251_12 -# 1255| m1255_10(unknown) = ^BufferMayWriteSideEffect[0] : &:r1255_3 -# 1255| m1255_11(char[1024]) = Chi : total:m1254_10, partial:m1255_10 -# 1256| v1256_1(void) = NoOp : -# 1251| v1251_13(void) = ReturnIndirection[s1] : &:r1251_7, m1251_8 -# 1251| v1251_14(void) = ReturnIndirection[s2] : &:r1251_11, m1251_12 -# 1251| v1251_15(void) = ReturnVoid : -# 1251| v1251_16(void) = AliasedUse : m1251_3 -# 1251| v1251_17(void) = ExitFunction : +# 1253| void test_strings(char*, char*) +# 1253| Block 0 +# 1253| v1253_1(void) = EnterFunction : +# 1253| m1253_2(unknown) = AliasedDefinition : +# 1253| m1253_3(unknown) = InitializeNonLocal : +# 1253| m1253_4(unknown) = Chi : total:m1253_2, partial:m1253_3 +# 1253| r1253_5(glval) = VariableAddress[s1] : +# 1253| m1253_6(char *) = InitializeParameter[s1] : &:r1253_5 +# 1253| r1253_7(char *) = Load[s1] : &:r1253_5, m1253_6 +# 1253| m1253_8(unknown) = InitializeIndirection[s1] : &:r1253_7 +# 1253| r1253_9(glval) = VariableAddress[s2] : +# 1253| m1253_10(char *) = InitializeParameter[s2] : &:r1253_9 +# 1253| r1253_11(char *) = Load[s2] : &:r1253_9, m1253_10 +# 1253| m1253_12(unknown) = InitializeIndirection[s2] : &:r1253_11 +# 1254| r1254_1(glval) = VariableAddress[buffer] : +# 1254| m1254_2(char[1024]) = Uninitialized[buffer] : &:r1254_1 +# 1254| r1254_3(int) = Constant[0] : +# 1254| r1254_4(glval) = PointerAdd[1] : r1254_1, r1254_3 +# 1254| r1254_5(char) = Constant[0] : +# 1254| m1254_6(char) = Store[?] : &:r1254_4, r1254_5 +# 1254| m1254_7(char[1024]) = Chi : total:m1254_2, partial:m1254_6 +# 1254| r1254_8(int) = Constant[1] : +# 1254| r1254_9(glval) = PointerAdd[1] : r1254_1, r1254_8 +# 1254| r1254_10(unknown[1023]) = Constant[0] : +# 1254| m1254_11(unknown[1023]) = Store[?] : &:r1254_9, r1254_10 +# 1254| m1254_12(char[1024]) = Chi : total:m1254_7, partial:m1254_11 +# 1256| r1256_1(glval) = FunctionAddress[strcpy] : +# 1256| r1256_2(glval) = VariableAddress[buffer] : +# 1256| r1256_3(char *) = Convert : r1256_2 +# 1256| r1256_4(glval) = VariableAddress[s1] : +# 1256| r1256_5(char *) = Load[s1] : &:r1256_4, m1253_6 +# 1256| r1256_6(char *) = Convert : r1256_5 +# 1256| r1256_7(char *) = Call[strcpy] : func:r1256_1, 0:r1256_3, 1:r1256_6 +# 1256| v1256_8(void) = ^BufferReadSideEffect[1] : &:r1256_6, ~m1253_8 +# 1256| m1256_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r1256_3 +# 1256| m1256_10(char[1024]) = Chi : total:m1254_12, partial:m1256_9 +# 1257| r1257_1(glval) = FunctionAddress[strcat] : +# 1257| r1257_2(glval) = VariableAddress[buffer] : +# 1257| r1257_3(char *) = Convert : r1257_2 +# 1257| r1257_4(glval) = VariableAddress[s2] : +# 1257| r1257_5(char *) = Load[s2] : &:r1257_4, m1253_10 +# 1257| r1257_6(char *) = Convert : r1257_5 +# 1257| r1257_7(char *) = Call[strcat] : func:r1257_1, 0:r1257_3, 1:r1257_6 +# 1257| v1257_8(void) = ^BufferReadSideEffect[0] : &:r1257_3, ~m1256_10 +# 1257| v1257_9(void) = ^BufferReadSideEffect[1] : &:r1257_6, ~m1253_12 +# 1257| m1257_10(unknown) = ^BufferMayWriteSideEffect[0] : &:r1257_3 +# 1257| m1257_11(char[1024]) = Chi : total:m1256_10, partial:m1257_10 +# 1258| v1258_1(void) = NoOp : +# 1253| v1253_13(void) = ReturnIndirection[s1] : &:r1253_7, m1253_8 +# 1253| v1253_14(void) = ReturnIndirection[s2] : &:r1253_11, m1253_12 +# 1253| v1253_15(void) = ReturnVoid : +# 1253| v1253_16(void) = AliasedUse : m1253_3 +# 1253| v1253_17(void) = ExitFunction : -# 1261| void A::static_member(A*, int) -# 1261| Block 0 -# 1261| v1261_1(void) = EnterFunction : -# 1261| m1261_2(unknown) = AliasedDefinition : -# 1261| m1261_3(unknown) = InitializeNonLocal : -# 1261| m1261_4(unknown) = Chi : total:m1261_2, partial:m1261_3 -# 1261| r1261_5(glval) = VariableAddress[a] : -# 1261| m1261_6(A *) = InitializeParameter[a] : &:r1261_5 -# 1261| r1261_7(A *) = Load[a] : &:r1261_5, m1261_6 -# 1261| m1261_8(unknown) = InitializeIndirection[a] : &:r1261_7 -# 1261| r1261_9(glval) = VariableAddress[x] : -# 1261| m1261_10(int) = InitializeParameter[x] : &:r1261_9 -# 1262| r1262_1(glval) = VariableAddress[x] : -# 1262| r1262_2(int) = Load[x] : &:r1262_1, m1261_10 -# 1262| r1262_3(glval) = VariableAddress[a] : -# 1262| r1262_4(A *) = Load[a] : &:r1262_3, m1261_6 -# 1262| r1262_5(glval) = FieldAddress[member] : r1262_4 -# 1262| m1262_6(int) = Store[?] : &:r1262_5, r1262_2 -# 1262| m1262_7(unknown) = Chi : total:m1261_8, partial:m1262_6 -# 1263| v1263_1(void) = NoOp : -# 1261| v1261_11(void) = ReturnIndirection[a] : &:r1261_7, m1262_7 -# 1261| v1261_12(void) = ReturnVoid : -# 1261| v1261_13(void) = AliasedUse : m1261_3 -# 1261| v1261_14(void) = ExitFunction : +# 1263| void A::static_member(A*, int) +# 1263| Block 0 +# 1263| v1263_1(void) = EnterFunction : +# 1263| m1263_2(unknown) = AliasedDefinition : +# 1263| m1263_3(unknown) = InitializeNonLocal : +# 1263| m1263_4(unknown) = Chi : total:m1263_2, partial:m1263_3 +# 1263| r1263_5(glval) = VariableAddress[a] : +# 1263| m1263_6(A *) = InitializeParameter[a] : &:r1263_5 +# 1263| r1263_7(A *) = Load[a] : &:r1263_5, m1263_6 +# 1263| m1263_8(unknown) = InitializeIndirection[a] : &:r1263_7 +# 1263| r1263_9(glval) = VariableAddress[x] : +# 1263| m1263_10(int) = InitializeParameter[x] : &:r1263_9 +# 1264| r1264_1(glval) = VariableAddress[x] : +# 1264| r1264_2(int) = Load[x] : &:r1264_1, m1263_10 +# 1264| r1264_3(glval) = VariableAddress[a] : +# 1264| r1264_4(A *) = Load[a] : &:r1264_3, m1263_6 +# 1264| r1264_5(glval) = FieldAddress[member] : r1264_4 +# 1264| m1264_6(int) = Store[?] : &:r1264_5, r1264_2 +# 1264| m1264_7(unknown) = Chi : total:m1263_8, partial:m1264_6 +# 1265| v1265_1(void) = NoOp : +# 1263| v1263_11(void) = ReturnIndirection[a] : &:r1263_7, m1264_7 +# 1263| v1263_12(void) = ReturnVoid : +# 1263| v1263_13(void) = AliasedUse : m1263_3 +# 1263| v1263_14(void) = ExitFunction : -# 1270| void test_static_member_functions(int, A*) -# 1270| Block 0 -# 1270| v1270_1(void) = EnterFunction : -# 1270| m1270_2(unknown) = AliasedDefinition : -# 1270| m1270_3(unknown) = InitializeNonLocal : -# 1270| m1270_4(unknown) = Chi : total:m1270_2, partial:m1270_3 -# 1270| r1270_5(glval) = VariableAddress[int_arg] : -# 1270| m1270_6(int) = InitializeParameter[int_arg] : &:r1270_5 -# 1270| r1270_7(glval) = VariableAddress[a_arg] : -# 1270| m1270_8(A *) = InitializeParameter[a_arg] : &:r1270_7 -# 1270| r1270_9(A *) = Load[a_arg] : &:r1270_7, m1270_8 -# 1270| m1270_10(unknown) = InitializeIndirection[a_arg] : &:r1270_9 -# 1271| r1271_1(glval) = VariableAddress[c] : -# 1271| m1271_2(C) = Uninitialized[c] : &:r1271_1 -# 1271| r1271_3(glval) = FunctionAddress[C] : -# 1271| v1271_4(void) = Call[C] : func:r1271_3, this:r1271_1 -# 1271| m1271_5(unknown) = ^CallSideEffect : ~m1270_4 -# 1271| m1271_6(unknown) = Chi : total:m1270_4, partial:m1271_5 -# 1271| m1271_7(C) = ^IndirectMayWriteSideEffect[-1] : &:r1271_1 -# 1271| m1271_8(C) = Chi : total:m1271_2, partial:m1271_7 -# 1272| r1272_1(glval) = VariableAddress[c] : -# 1272| r1272_2(glval) = FunctionAddress[StaticMemberFunction] : -# 1272| r1272_3(int) = Constant[10] : -# 1272| r1272_4(int) = Call[StaticMemberFunction] : func:r1272_2, 0:r1272_3 -# 1272| m1272_5(unknown) = ^CallSideEffect : ~m1271_6 -# 1272| m1272_6(unknown) = Chi : total:m1271_6, partial:m1272_5 -# 1273| r1273_1(glval) = FunctionAddress[StaticMemberFunction] : -# 1273| r1273_2(int) = Constant[10] : -# 1273| r1273_3(int) = Call[StaticMemberFunction] : func:r1273_1, 0:r1273_2 -# 1273| m1273_4(unknown) = ^CallSideEffect : ~m1272_6 -# 1273| m1273_5(unknown) = Chi : total:m1272_6, partial:m1273_4 -# 1275| r1275_1(glval) = VariableAddress[a] : -# 1275| m1275_2(A) = Uninitialized[a] : &:r1275_1 -# 1276| r1276_1(glval) = VariableAddress[a] : -# 1276| r1276_2(glval) = FunctionAddress[static_member] : -# 1276| r1276_3(glval) = VariableAddress[a] : -# 1276| r1276_4(A *) = CopyValue : r1276_3 -# 1276| r1276_5(glval) = VariableAddress[int_arg] : -# 1276| r1276_6(int) = Load[int_arg] : &:r1276_5, m1270_6 -# 1276| v1276_7(void) = Call[static_member] : func:r1276_2, 0:r1276_4, 1:r1276_6 -# 1276| m1276_8(unknown) = ^CallSideEffect : ~m1273_5 -# 1276| m1276_9(unknown) = Chi : total:m1273_5, partial:m1276_8 -# 1276| v1276_10(void) = ^BufferReadSideEffect[0] : &:r1276_4, ~m1275_2 -# 1276| m1276_11(unknown) = ^BufferMayWriteSideEffect[0] : &:r1276_4 -# 1276| m1276_12(A) = Chi : total:m1275_2, partial:m1276_11 -# 1277| r1277_1(glval) = FunctionAddress[static_member] : -# 1277| r1277_2(glval) = VariableAddress[a] : -# 1277| r1277_3(A *) = CopyValue : r1277_2 -# 1277| r1277_4(glval) = VariableAddress[int_arg] : -# 1277| r1277_5(int) = Load[int_arg] : &:r1277_4, m1270_6 -# 1277| v1277_6(void) = Call[static_member] : func:r1277_1, 0:r1277_3, 1:r1277_5 -# 1277| m1277_7(unknown) = ^CallSideEffect : ~m1276_9 -# 1277| m1277_8(unknown) = Chi : total:m1276_9, partial:m1277_7 -# 1277| v1277_9(void) = ^BufferReadSideEffect[0] : &:r1277_3, ~m1276_12 -# 1277| m1277_10(unknown) = ^BufferMayWriteSideEffect[0] : &:r1277_3 -# 1277| m1277_11(A) = Chi : total:m1276_12, partial:m1277_10 -# 1279| r1279_1(glval) = VariableAddress[a] : -# 1279| r1279_2(A *) = CopyValue : r1279_1 -# 1279| r1279_3(glval) = FunctionAddress[static_member] : -# 1279| r1279_4(glval) = VariableAddress[a_arg] : -# 1279| r1279_5(A *) = Load[a_arg] : &:r1279_4, m1270_8 -# 1279| r1279_6(glval) = VariableAddress[int_arg] : -# 1279| r1279_7(int) = Load[int_arg] : &:r1279_6, m1270_6 -# 1279| r1279_8(int) = Constant[2] : -# 1279| r1279_9(int) = Add : r1279_7, r1279_8 -# 1279| v1279_10(void) = Call[static_member] : func:r1279_3, 0:r1279_5, 1:r1279_9 -# 1279| m1279_11(unknown) = ^CallSideEffect : ~m1277_8 -# 1279| m1279_12(unknown) = Chi : total:m1277_8, partial:m1279_11 -# 1279| v1279_13(void) = ^BufferReadSideEffect[0] : &:r1279_5, ~m1270_10 -# 1279| m1279_14(unknown) = ^BufferMayWriteSideEffect[0] : &:r1279_5 -# 1279| m1279_15(unknown) = Chi : total:m1270_10, partial:m1279_14 -# 1280| r1280_1(glval) = VariableAddress[a_arg] : -# 1280| r1280_2(A *) = Load[a_arg] : &:r1280_1, m1270_8 -# 1280| r1280_3(glval) = CopyValue : r1280_2 -# 1280| r1280_4(glval) = FunctionAddress[static_member] : -# 1280| r1280_5(glval) = VariableAddress[a] : -# 1280| r1280_6(A *) = CopyValue : r1280_5 -# 1280| r1280_7(int) = Constant[99] : -# 1280| v1280_8(void) = Call[static_member] : func:r1280_4, 0:r1280_6, 1:r1280_7 -# 1280| m1280_9(unknown) = ^CallSideEffect : ~m1279_12 -# 1280| m1280_10(unknown) = Chi : total:m1279_12, partial:m1280_9 -# 1280| v1280_11(void) = ^BufferReadSideEffect[0] : &:r1280_6, ~m1277_11 -# 1280| m1280_12(unknown) = ^BufferMayWriteSideEffect[0] : &:r1280_6 -# 1280| m1280_13(A) = Chi : total:m1277_11, partial:m1280_12 -# 1281| r1281_1(glval) = VariableAddress[a_arg] : -# 1281| r1281_2(A *) = Load[a_arg] : &:r1281_1, m1270_8 +# 1272| void test_static_member_functions(int, A*) +# 1272| Block 0 +# 1272| v1272_1(void) = EnterFunction : +# 1272| m1272_2(unknown) = AliasedDefinition : +# 1272| m1272_3(unknown) = InitializeNonLocal : +# 1272| m1272_4(unknown) = Chi : total:m1272_2, partial:m1272_3 +# 1272| r1272_5(glval) = VariableAddress[int_arg] : +# 1272| m1272_6(int) = InitializeParameter[int_arg] : &:r1272_5 +# 1272| r1272_7(glval) = VariableAddress[a_arg] : +# 1272| m1272_8(A *) = InitializeParameter[a_arg] : &:r1272_7 +# 1272| r1272_9(A *) = Load[a_arg] : &:r1272_7, m1272_8 +# 1272| m1272_10(unknown) = InitializeIndirection[a_arg] : &:r1272_9 +# 1273| r1273_1(glval) = VariableAddress[c] : +# 1273| m1273_2(C) = Uninitialized[c] : &:r1273_1 +# 1273| r1273_3(glval) = FunctionAddress[C] : +# 1273| v1273_4(void) = Call[C] : func:r1273_3, this:r1273_1 +# 1273| m1273_5(unknown) = ^CallSideEffect : ~m1272_4 +# 1273| m1273_6(unknown) = Chi : total:m1272_4, partial:m1273_5 +# 1273| m1273_7(C) = ^IndirectMayWriteSideEffect[-1] : &:r1273_1 +# 1273| m1273_8(C) = Chi : total:m1273_2, partial:m1273_7 +# 1274| r1274_1(glval) = VariableAddress[c] : +# 1274| r1274_2(glval) = FunctionAddress[StaticMemberFunction] : +# 1274| r1274_3(int) = Constant[10] : +# 1274| r1274_4(int) = Call[StaticMemberFunction] : func:r1274_2, 0:r1274_3 +# 1274| m1274_5(unknown) = ^CallSideEffect : ~m1273_6 +# 1274| m1274_6(unknown) = Chi : total:m1273_6, partial:m1274_5 +# 1275| r1275_1(glval) = FunctionAddress[StaticMemberFunction] : +# 1275| r1275_2(int) = Constant[10] : +# 1275| r1275_3(int) = Call[StaticMemberFunction] : func:r1275_1, 0:r1275_2 +# 1275| m1275_4(unknown) = ^CallSideEffect : ~m1274_6 +# 1275| m1275_5(unknown) = Chi : total:m1274_6, partial:m1275_4 +# 1277| r1277_1(glval) = VariableAddress[a] : +# 1277| m1277_2(A) = Uninitialized[a] : &:r1277_1 +# 1278| r1278_1(glval) = VariableAddress[a] : +# 1278| r1278_2(glval) = FunctionAddress[static_member] : +# 1278| r1278_3(glval) = VariableAddress[a] : +# 1278| r1278_4(A *) = CopyValue : r1278_3 +# 1278| r1278_5(glval) = VariableAddress[int_arg] : +# 1278| r1278_6(int) = Load[int_arg] : &:r1278_5, m1272_6 +# 1278| v1278_7(void) = Call[static_member] : func:r1278_2, 0:r1278_4, 1:r1278_6 +# 1278| m1278_8(unknown) = ^CallSideEffect : ~m1275_5 +# 1278| m1278_9(unknown) = Chi : total:m1275_5, partial:m1278_8 +# 1278| v1278_10(void) = ^BufferReadSideEffect[0] : &:r1278_4, ~m1277_2 +# 1278| m1278_11(unknown) = ^BufferMayWriteSideEffect[0] : &:r1278_4 +# 1278| m1278_12(A) = Chi : total:m1277_2, partial:m1278_11 +# 1279| r1279_1(glval) = FunctionAddress[static_member] : +# 1279| r1279_2(glval) = VariableAddress[a] : +# 1279| r1279_3(A *) = CopyValue : r1279_2 +# 1279| r1279_4(glval) = VariableAddress[int_arg] : +# 1279| r1279_5(int) = Load[int_arg] : &:r1279_4, m1272_6 +# 1279| v1279_6(void) = Call[static_member] : func:r1279_1, 0:r1279_3, 1:r1279_5 +# 1279| m1279_7(unknown) = ^CallSideEffect : ~m1278_9 +# 1279| m1279_8(unknown) = Chi : total:m1278_9, partial:m1279_7 +# 1279| v1279_9(void) = ^BufferReadSideEffect[0] : &:r1279_3, ~m1278_12 +# 1279| m1279_10(unknown) = ^BufferMayWriteSideEffect[0] : &:r1279_3 +# 1279| m1279_11(A) = Chi : total:m1278_12, partial:m1279_10 +# 1281| r1281_1(glval) = VariableAddress[a] : +# 1281| r1281_2(A *) = CopyValue : r1281_1 # 1281| r1281_3(glval) = FunctionAddress[static_member] : # 1281| r1281_4(glval) = VariableAddress[a_arg] : -# 1281| r1281_5(A *) = Load[a_arg] : &:r1281_4, m1270_8 -# 1281| r1281_6(int) = Constant[-1] : -# 1281| v1281_7(void) = Call[static_member] : func:r1281_3, 0:r1281_5, 1:r1281_6 -# 1281| m1281_8(unknown) = ^CallSideEffect : ~m1280_10 -# 1281| m1281_9(unknown) = Chi : total:m1280_10, partial:m1281_8 -# 1281| v1281_10(void) = ^BufferReadSideEffect[0] : &:r1281_5, ~m1279_15 -# 1281| m1281_11(unknown) = ^BufferMayWriteSideEffect[0] : &:r1281_5 -# 1281| m1281_12(unknown) = Chi : total:m1279_15, partial:m1281_11 -# 1283| r1283_1(glval) = VariableAddress[a] : -# 1283| r1283_2(glval) = FunctionAddress[static_member_without_def] : -# 1283| v1283_3(void) = Call[static_member_without_def] : func:r1283_2 -# 1283| m1283_4(unknown) = ^CallSideEffect : ~m1281_9 -# 1283| m1283_5(unknown) = Chi : total:m1281_9, partial:m1283_4 -# 1284| r1284_1(glval) = FunctionAddress[static_member_without_def] : -# 1284| v1284_2(void) = Call[static_member_without_def] : func:r1284_1 -# 1284| m1284_3(unknown) = ^CallSideEffect : ~m1283_5 -# 1284| m1284_4(unknown) = Chi : total:m1283_5, partial:m1284_3 -# 1286| r1286_1(glval) = FunctionAddress[getAnInstanceOfA] : -# 1286| r1286_2(A *) = Call[getAnInstanceOfA] : func:r1286_1 -# 1286| m1286_3(unknown) = ^CallSideEffect : ~m1284_4 -# 1286| m1286_4(unknown) = Chi : total:m1284_4, partial:m1286_3 -# 1286| r1286_5(glval) = FunctionAddress[static_member_without_def] : -# 1286| v1286_6(void) = Call[static_member_without_def] : func:r1286_5 -# 1286| m1286_7(unknown) = ^CallSideEffect : ~m1286_4 -# 1286| m1286_8(unknown) = Chi : total:m1286_4, partial:m1286_7 -# 1287| v1287_1(void) = NoOp : -# 1270| v1270_11(void) = ReturnIndirection[a_arg] : &:r1270_9, m1281_12 -# 1270| v1270_12(void) = ReturnVoid : -# 1270| v1270_13(void) = AliasedUse : ~m1286_8 -# 1270| v1270_14(void) = ExitFunction : +# 1281| r1281_5(A *) = Load[a_arg] : &:r1281_4, m1272_8 +# 1281| r1281_6(glval) = VariableAddress[int_arg] : +# 1281| r1281_7(int) = Load[int_arg] : &:r1281_6, m1272_6 +# 1281| r1281_8(int) = Constant[2] : +# 1281| r1281_9(int) = Add : r1281_7, r1281_8 +# 1281| v1281_10(void) = Call[static_member] : func:r1281_3, 0:r1281_5, 1:r1281_9 +# 1281| m1281_11(unknown) = ^CallSideEffect : ~m1279_8 +# 1281| m1281_12(unknown) = Chi : total:m1279_8, partial:m1281_11 +# 1281| v1281_13(void) = ^BufferReadSideEffect[0] : &:r1281_5, ~m1272_10 +# 1281| m1281_14(unknown) = ^BufferMayWriteSideEffect[0] : &:r1281_5 +# 1281| m1281_15(unknown) = Chi : total:m1272_10, partial:m1281_14 +# 1282| r1282_1(glval) = VariableAddress[a_arg] : +# 1282| r1282_2(A *) = Load[a_arg] : &:r1282_1, m1272_8 +# 1282| r1282_3(glval) = CopyValue : r1282_2 +# 1282| r1282_4(glval) = FunctionAddress[static_member] : +# 1282| r1282_5(glval) = VariableAddress[a] : +# 1282| r1282_6(A *) = CopyValue : r1282_5 +# 1282| r1282_7(int) = Constant[99] : +# 1282| v1282_8(void) = Call[static_member] : func:r1282_4, 0:r1282_6, 1:r1282_7 +# 1282| m1282_9(unknown) = ^CallSideEffect : ~m1281_12 +# 1282| m1282_10(unknown) = Chi : total:m1281_12, partial:m1282_9 +# 1282| v1282_11(void) = ^BufferReadSideEffect[0] : &:r1282_6, ~m1279_11 +# 1282| m1282_12(unknown) = ^BufferMayWriteSideEffect[0] : &:r1282_6 +# 1282| m1282_13(A) = Chi : total:m1279_11, partial:m1282_12 +# 1283| r1283_1(glval) = VariableAddress[a_arg] : +# 1283| r1283_2(A *) = Load[a_arg] : &:r1283_1, m1272_8 +# 1283| r1283_3(glval) = FunctionAddress[static_member] : +# 1283| r1283_4(glval) = VariableAddress[a_arg] : +# 1283| r1283_5(A *) = Load[a_arg] : &:r1283_4, m1272_8 +# 1283| r1283_6(int) = Constant[-1] : +# 1283| v1283_7(void) = Call[static_member] : func:r1283_3, 0:r1283_5, 1:r1283_6 +# 1283| m1283_8(unknown) = ^CallSideEffect : ~m1282_10 +# 1283| m1283_9(unknown) = Chi : total:m1282_10, partial:m1283_8 +# 1283| v1283_10(void) = ^BufferReadSideEffect[0] : &:r1283_5, ~m1281_15 +# 1283| m1283_11(unknown) = ^BufferMayWriteSideEffect[0] : &:r1283_5 +# 1283| m1283_12(unknown) = Chi : total:m1281_15, partial:m1283_11 +# 1285| r1285_1(glval) = VariableAddress[a] : +# 1285| r1285_2(glval) = FunctionAddress[static_member_without_def] : +# 1285| v1285_3(void) = Call[static_member_without_def] : func:r1285_2 +# 1285| m1285_4(unknown) = ^CallSideEffect : ~m1283_9 +# 1285| m1285_5(unknown) = Chi : total:m1283_9, partial:m1285_4 +# 1286| r1286_1(glval) = FunctionAddress[static_member_without_def] : +# 1286| v1286_2(void) = Call[static_member_without_def] : func:r1286_1 +# 1286| m1286_3(unknown) = ^CallSideEffect : ~m1285_5 +# 1286| m1286_4(unknown) = Chi : total:m1285_5, partial:m1286_3 +# 1288| r1288_1(glval) = FunctionAddress[getAnInstanceOfA] : +# 1288| r1288_2(A *) = Call[getAnInstanceOfA] : func:r1288_1 +# 1288| m1288_3(unknown) = ^CallSideEffect : ~m1286_4 +# 1288| m1288_4(unknown) = Chi : total:m1286_4, partial:m1288_3 +# 1288| r1288_5(glval) = FunctionAddress[static_member_without_def] : +# 1288| v1288_6(void) = Call[static_member_without_def] : func:r1288_5 +# 1288| m1288_7(unknown) = ^CallSideEffect : ~m1288_4 +# 1288| m1288_8(unknown) = Chi : total:m1288_4, partial:m1288_7 +# 1289| v1289_1(void) = NoOp : +# 1272| v1272_11(void) = ReturnIndirection[a_arg] : &:r1272_9, m1283_12 +# 1272| v1272_12(void) = ReturnVoid : +# 1272| v1272_13(void) = AliasedUse : ~m1288_8 +# 1272| v1272_14(void) = ExitFunction : -# 1289| int missingReturnValue(bool, int) -# 1289| Block 0 -# 1289| v1289_1(void) = EnterFunction : -# 1289| m1289_2(unknown) = AliasedDefinition : -# 1289| m1289_3(unknown) = InitializeNonLocal : -# 1289| m1289_4(unknown) = Chi : total:m1289_2, partial:m1289_3 -# 1289| r1289_5(glval) = VariableAddress[b] : -# 1289| m1289_6(bool) = InitializeParameter[b] : &:r1289_5 -# 1289| r1289_7(glval) = VariableAddress[x] : -# 1289| m1289_8(int) = InitializeParameter[x] : &:r1289_7 -# 1290| r1290_1(glval) = VariableAddress[b] : -# 1290| r1290_2(bool) = Load[b] : &:r1290_1, m1289_6 -# 1290| v1290_3(void) = ConditionalBranch : r1290_2 +# 1291| int missingReturnValue(bool, int) +# 1291| Block 0 +# 1291| v1291_1(void) = EnterFunction : +# 1291| m1291_2(unknown) = AliasedDefinition : +# 1291| m1291_3(unknown) = InitializeNonLocal : +# 1291| m1291_4(unknown) = Chi : total:m1291_2, partial:m1291_3 +# 1291| r1291_5(glval) = VariableAddress[b] : +# 1291| m1291_6(bool) = InitializeParameter[b] : &:r1291_5 +# 1291| r1291_7(glval) = VariableAddress[x] : +# 1291| m1291_8(int) = InitializeParameter[x] : &:r1291_7 +# 1292| r1292_1(glval) = VariableAddress[b] : +# 1292| r1292_2(bool) = Load[b] : &:r1292_1, m1291_6 +# 1292| v1292_3(void) = ConditionalBranch : r1292_2 #-----| False -> Block 3 #-----| True -> Block 2 -# 1289| Block 1 -# 1289| m1289_9(int) = Phi : from 2:m1291_4, from 3:m1293_2 -# 1289| r1289_10(glval) = VariableAddress[#return] : -# 1289| v1289_11(void) = ReturnValue : &:r1289_10, m1289_9 -# 1289| v1289_12(void) = AliasedUse : m1289_3 -# 1289| v1289_13(void) = ExitFunction : +# 1291| Block 1 +# 1291| m1291_9(int) = Phi : from 2:m1293_4, from 3:m1295_2 +# 1291| r1291_10(glval) = VariableAddress[#return] : +# 1291| v1291_11(void) = ReturnValue : &:r1291_10, m1291_9 +# 1291| v1291_12(void) = AliasedUse : m1291_3 +# 1291| v1291_13(void) = ExitFunction : -# 1291| Block 2 -# 1291| r1291_1(glval) = VariableAddress[#return] : -# 1291| r1291_2(glval) = VariableAddress[x] : -# 1291| r1291_3(int) = Load[x] : &:r1291_2, m1289_8 -# 1291| m1291_4(int) = Store[#return] : &:r1291_1, r1291_3 -#-----| Goto -> Block 1 - -# 1293| Block 3 +# 1293| Block 2 # 1293| r1293_1(glval) = VariableAddress[#return] : -# 1293| m1293_2(int) = Uninitialized[#return] : &:r1293_1 +# 1293| r1293_2(glval) = VariableAddress[x] : +# 1293| r1293_3(int) = Load[x] : &:r1293_2, m1291_8 +# 1293| m1293_4(int) = Store[#return] : &:r1293_1, r1293_3 #-----| Goto -> Block 1 -# 1295| void returnVoid(int, int) -# 1295| Block 0 -# 1295| v1295_1(void) = EnterFunction : -# 1295| m1295_2(unknown) = AliasedDefinition : -# 1295| m1295_3(unknown) = InitializeNonLocal : -# 1295| m1295_4(unknown) = Chi : total:m1295_2, partial:m1295_3 -# 1295| r1295_5(glval) = VariableAddress[x] : -# 1295| m1295_6(int) = InitializeParameter[x] : &:r1295_5 -# 1295| r1295_7(glval) = VariableAddress[y] : -# 1295| m1295_8(int) = InitializeParameter[y] : &:r1295_7 -# 1296| r1296_1(glval) = FunctionAddress[IntegerOps] : -# 1296| r1296_2(glval) = VariableAddress[x] : -# 1296| r1296_3(int) = Load[x] : &:r1296_2, m1295_6 -# 1296| r1296_4(glval) = VariableAddress[y] : -# 1296| r1296_5(int) = Load[y] : &:r1296_4, m1295_8 -# 1296| v1296_6(void) = Call[IntegerOps] : func:r1296_1, 0:r1296_3, 1:r1296_5 -# 1296| m1296_7(unknown) = ^CallSideEffect : ~m1295_4 -# 1296| m1296_8(unknown) = Chi : total:m1295_4, partial:m1296_7 -# 1296| v1296_9(void) = NoOp : -# 1295| v1295_9(void) = ReturnVoid : -# 1295| v1295_10(void) = AliasedUse : ~m1296_8 -# 1295| v1295_11(void) = ExitFunction : +# 1295| Block 3 +# 1295| r1295_1(glval) = VariableAddress[#return] : +# 1295| m1295_2(int) = Uninitialized[#return] : &:r1295_1 +#-----| Goto -> Block 1 -# 1299| void gccBinaryConditional(bool, int, long) -# 1299| Block 0 -# 1299| v1299_1(void) = EnterFunction : -# 1299| m1299_2(unknown) = AliasedDefinition : -# 1299| m1299_3(unknown) = InitializeNonLocal : -# 1299| m1299_4(unknown) = Chi : total:m1299_2, partial:m1299_3 -# 1299| r1299_5(glval) = VariableAddress[b] : -# 1299| m1299_6(bool) = InitializeParameter[b] : &:r1299_5 -# 1299| r1299_7(glval) = VariableAddress[x] : -# 1299| m1299_8(int) = InitializeParameter[x] : &:r1299_7 -# 1299| r1299_9(glval) = VariableAddress[y] : -# 1299| m1299_10(long) = InitializeParameter[y] : &:r1299_9 -# 1300| r1300_1(glval) = VariableAddress[z] : -# 1300| r1300_2(glval) = VariableAddress[x] : -# 1300| r1300_3(int) = Load[x] : &:r1300_2, m1299_8 -# 1300| m1300_4(int) = Store[z] : &:r1300_1, r1300_3 -# 1301| r1301_1(glval) = VariableAddress[b] : -# 1301| r1301_2(bool) = Load[b] : &:r1301_1, m1299_6 -# 1301| v1301_3(void) = ConditionalBranch : r1301_2 +# 1297| void returnVoid(int, int) +# 1297| Block 0 +# 1297| v1297_1(void) = EnterFunction : +# 1297| m1297_2(unknown) = AliasedDefinition : +# 1297| m1297_3(unknown) = InitializeNonLocal : +# 1297| m1297_4(unknown) = Chi : total:m1297_2, partial:m1297_3 +# 1297| r1297_5(glval) = VariableAddress[x] : +# 1297| m1297_6(int) = InitializeParameter[x] : &:r1297_5 +# 1297| r1297_7(glval) = VariableAddress[y] : +# 1297| m1297_8(int) = InitializeParameter[y] : &:r1297_7 +# 1298| r1298_1(glval) = FunctionAddress[IntegerOps] : +# 1298| r1298_2(glval) = VariableAddress[x] : +# 1298| r1298_3(int) = Load[x] : &:r1298_2, m1297_6 +# 1298| r1298_4(glval) = VariableAddress[y] : +# 1298| r1298_5(int) = Load[y] : &:r1298_4, m1297_8 +# 1298| v1298_6(void) = Call[IntegerOps] : func:r1298_1, 0:r1298_3, 1:r1298_5 +# 1298| m1298_7(unknown) = ^CallSideEffect : ~m1297_4 +# 1298| m1298_8(unknown) = Chi : total:m1297_4, partial:m1298_7 +# 1298| v1298_9(void) = NoOp : +# 1297| v1297_9(void) = ReturnVoid : +# 1297| v1297_10(void) = AliasedUse : ~m1298_8 +# 1297| v1297_11(void) = ExitFunction : + +# 1301| void gccBinaryConditional(bool, int, long) +# 1301| Block 0 +# 1301| v1301_1(void) = EnterFunction : +# 1301| m1301_2(unknown) = AliasedDefinition : +# 1301| m1301_3(unknown) = InitializeNonLocal : +# 1301| m1301_4(unknown) = Chi : total:m1301_2, partial:m1301_3 +# 1301| r1301_5(glval) = VariableAddress[b] : +# 1301| m1301_6(bool) = InitializeParameter[b] : &:r1301_5 +# 1301| r1301_7(glval) = VariableAddress[x] : +# 1301| m1301_8(int) = InitializeParameter[x] : &:r1301_7 +# 1301| r1301_9(glval) = VariableAddress[y] : +# 1301| m1301_10(long) = InitializeParameter[y] : &:r1301_9 +# 1302| r1302_1(glval) = VariableAddress[z] : +# 1302| r1302_2(glval) = VariableAddress[x] : +# 1302| r1302_3(int) = Load[x] : &:r1302_2, m1301_8 +# 1302| m1302_4(int) = Store[z] : &:r1302_1, r1302_3 +# 1303| r1303_1(glval) = VariableAddress[b] : +# 1303| r1303_2(bool) = Load[b] : &:r1303_1, m1301_6 +# 1303| v1303_3(void) = ConditionalBranch : r1303_2 #-----| False -> Block 3 #-----| True -> Block 2 -# 1301| Block 1 -# 1301| m1301_4(int) = Phi : from 2:m1301_10, from 3:m1301_14 -# 1301| r1301_5(glval) = VariableAddress[#temp1301:9] : -# 1301| r1301_6(int) = Load[#temp1301:9] : &:r1301_5, m1301_4 -# 1301| r1301_7(glval) = VariableAddress[z] : -# 1301| m1301_8(int) = Store[z] : &:r1301_7, r1301_6 -# 1302| r1302_1(glval) = VariableAddress[b] : -# 1302| r1302_2(bool) = Load[b] : &:r1302_1, m1299_6 -# 1302| v1302_3(void) = ConditionalBranch : r1302_2 +# 1303| Block 1 +# 1303| m1303_4(int) = Phi : from 2:m1303_10, from 3:m1303_14 +# 1303| r1303_5(glval) = VariableAddress[#temp1303:9] : +# 1303| r1303_6(int) = Load[#temp1303:9] : &:r1303_5, m1303_4 +# 1303| r1303_7(glval) = VariableAddress[z] : +# 1303| m1303_8(int) = Store[z] : &:r1303_7, r1303_6 +# 1304| r1304_1(glval) = VariableAddress[b] : +# 1304| r1304_2(bool) = Load[b] : &:r1304_1, m1301_6 +# 1304| v1304_3(void) = ConditionalBranch : r1304_2 #-----| False -> Block 6 #-----| True -> Block 5 -# 1301| Block 2 -# 1301| r1301_9(glval) = VariableAddress[#temp1301:9] : -# 1301| m1301_10(int) = Store[#temp1301:9] : &:r1301_9, r1301_2 +# 1303| Block 2 +# 1303| r1303_9(glval) = VariableAddress[#temp1303:9] : +# 1303| m1303_10(int) = Store[#temp1303:9] : &:r1303_9, r1303_2 #-----| Goto -> Block 1 -# 1301| Block 3 -# 1301| r1301_11(glval) = VariableAddress[x] : -# 1301| r1301_12(int) = Load[x] : &:r1301_11, m1299_8 -# 1301| r1301_13(glval) = VariableAddress[#temp1301:9] : -# 1301| m1301_14(int) = Store[#temp1301:9] : &:r1301_13, r1301_12 +# 1303| Block 3 +# 1303| r1303_11(glval) = VariableAddress[x] : +# 1303| r1303_12(int) = Load[x] : &:r1303_11, m1301_8 +# 1303| r1303_13(glval) = VariableAddress[#temp1303:9] : +# 1303| m1303_14(int) = Store[#temp1303:9] : &:r1303_13, r1303_12 #-----| Goto -> Block 1 -# 1302| Block 4 -# 1302| m1302_4(long) = Phi : from 5:m1302_11, from 6:m1302_15 -# 1302| r1302_5(glval) = VariableAddress[#temp1302:9] : -# 1302| r1302_6(long) = Load[#temp1302:9] : &:r1302_5, m1302_4 -# 1302| r1302_7(int) = Convert : r1302_6 -# 1302| r1302_8(glval) = VariableAddress[z] : -# 1302| m1302_9(int) = Store[z] : &:r1302_8, r1302_7 -# 1303| r1303_1(glval) = VariableAddress[x] : -# 1303| r1303_2(int) = Load[x] : &:r1303_1, m1299_8 -# 1303| r1303_3(int) = Constant[0] : -# 1303| r1303_4(bool) = CompareNE : r1303_2, r1303_3 -# 1303| v1303_5(void) = ConditionalBranch : r1303_4 +# 1304| Block 4 +# 1304| m1304_4(long) = Phi : from 5:m1304_11, from 6:m1304_15 +# 1304| r1304_5(glval) = VariableAddress[#temp1304:9] : +# 1304| r1304_6(long) = Load[#temp1304:9] : &:r1304_5, m1304_4 +# 1304| r1304_7(int) = Convert : r1304_6 +# 1304| r1304_8(glval) = VariableAddress[z] : +# 1304| m1304_9(int) = Store[z] : &:r1304_8, r1304_7 +# 1305| r1305_1(glval) = VariableAddress[x] : +# 1305| r1305_2(int) = Load[x] : &:r1305_1, m1301_8 +# 1305| r1305_3(int) = Constant[0] : +# 1305| r1305_4(bool) = CompareNE : r1305_2, r1305_3 +# 1305| v1305_5(void) = ConditionalBranch : r1305_4 #-----| False -> Block 9 #-----| True -> Block 8 -# 1302| Block 5 -# 1302| r1302_10(glval) = VariableAddress[#temp1302:9] : -# 1302| m1302_11(long) = Store[#temp1302:9] : &:r1302_10, r1302_2 +# 1304| Block 5 +# 1304| r1304_10(glval) = VariableAddress[#temp1304:9] : +# 1304| m1304_11(long) = Store[#temp1304:9] : &:r1304_10, r1304_2 #-----| Goto -> Block 4 -# 1302| Block 6 -# 1302| r1302_12(glval) = VariableAddress[y] : -# 1302| r1302_13(long) = Load[y] : &:r1302_12, m1299_10 -# 1302| r1302_14(glval) = VariableAddress[#temp1302:9] : -# 1302| m1302_15(long) = Store[#temp1302:9] : &:r1302_14, r1302_13 +# 1304| Block 6 +# 1304| r1304_12(glval) = VariableAddress[y] : +# 1304| r1304_13(long) = Load[y] : &:r1304_12, m1301_10 +# 1304| r1304_14(glval) = VariableAddress[#temp1304:9] : +# 1304| m1304_15(long) = Store[#temp1304:9] : &:r1304_14, r1304_13 #-----| Goto -> Block 4 -# 1303| Block 7 -# 1303| m1303_6(int) = Phi : from 8:m1303_12, from 9:m1303_16 -# 1303| r1303_7(glval) = VariableAddress[#temp1303:9] : -# 1303| r1303_8(int) = Load[#temp1303:9] : &:r1303_7, m1303_6 -# 1303| r1303_9(glval) = VariableAddress[z] : -# 1303| m1303_10(int) = Store[z] : &:r1303_9, r1303_8 -# 1304| r1304_1(glval) = VariableAddress[x] : -# 1304| r1304_2(int) = Load[x] : &:r1304_1, m1299_8 -# 1304| r1304_3(int) = Constant[0] : -# 1304| r1304_4(bool) = CompareNE : r1304_2, r1304_3 -# 1304| v1304_5(void) = ConditionalBranch : r1304_4 +# 1305| Block 7 +# 1305| m1305_6(int) = Phi : from 8:m1305_12, from 9:m1305_16 +# 1305| r1305_7(glval) = VariableAddress[#temp1305:9] : +# 1305| r1305_8(int) = Load[#temp1305:9] : &:r1305_7, m1305_6 +# 1305| r1305_9(glval) = VariableAddress[z] : +# 1305| m1305_10(int) = Store[z] : &:r1305_9, r1305_8 +# 1306| r1306_1(glval) = VariableAddress[x] : +# 1306| r1306_2(int) = Load[x] : &:r1306_1, m1301_8 +# 1306| r1306_3(int) = Constant[0] : +# 1306| r1306_4(bool) = CompareNE : r1306_2, r1306_3 +# 1306| v1306_5(void) = ConditionalBranch : r1306_4 #-----| False -> Block 12 #-----| True -> Block 11 -# 1303| Block 8 -# 1303| r1303_11(glval) = VariableAddress[#temp1303:9] : -# 1303| m1303_12(int) = Store[#temp1303:9] : &:r1303_11, r1303_2 +# 1305| Block 8 +# 1305| r1305_11(glval) = VariableAddress[#temp1305:9] : +# 1305| m1305_12(int) = Store[#temp1305:9] : &:r1305_11, r1305_2 #-----| Goto -> Block 7 -# 1303| Block 9 -# 1303| r1303_13(glval) = VariableAddress[x] : -# 1303| r1303_14(int) = Load[x] : &:r1303_13, m1299_8 -# 1303| r1303_15(glval) = VariableAddress[#temp1303:9] : -# 1303| m1303_16(int) = Store[#temp1303:9] : &:r1303_15, r1303_14 +# 1305| Block 9 +# 1305| r1305_13(glval) = VariableAddress[x] : +# 1305| r1305_14(int) = Load[x] : &:r1305_13, m1301_8 +# 1305| r1305_15(glval) = VariableAddress[#temp1305:9] : +# 1305| m1305_16(int) = Store[#temp1305:9] : &:r1305_15, r1305_14 #-----| Goto -> Block 7 -# 1304| Block 10 -# 1304| m1304_6(long) = Phi : from 11:m1304_13, from 12:m1304_17 -# 1304| r1304_7(glval) = VariableAddress[#temp1304:9] : -# 1304| r1304_8(long) = Load[#temp1304:9] : &:r1304_7, m1304_6 -# 1304| r1304_9(int) = Convert : r1304_8 -# 1304| r1304_10(glval) = VariableAddress[z] : -# 1304| m1304_11(int) = Store[z] : &:r1304_10, r1304_9 -# 1305| r1305_1(glval) = VariableAddress[y] : -# 1305| r1305_2(long) = Load[y] : &:r1305_1, m1299_10 -# 1305| r1305_3(long) = Constant[0] : -# 1305| r1305_4(bool) = CompareNE : r1305_2, r1305_3 -# 1305| v1305_5(void) = ConditionalBranch : r1305_4 -#-----| False -> Block 15 -#-----| True -> Block 14 - -# 1304| Block 11 -# 1304| r1304_12(glval) = VariableAddress[#temp1304:9] : -# 1304| m1304_13(long) = Store[#temp1304:9] : &:r1304_12, r1304_2 -#-----| Goto -> Block 10 - -# 1304| Block 12 -# 1304| r1304_14(glval) = VariableAddress[y] : -# 1304| r1304_15(long) = Load[y] : &:r1304_14, m1299_10 -# 1304| r1304_16(glval) = VariableAddress[#temp1304:9] : -# 1304| m1304_17(long) = Store[#temp1304:9] : &:r1304_16, r1304_15 -#-----| Goto -> Block 10 - -# 1305| Block 13 -# 1305| m1305_6(long) = Phi : from 14:m1305_13, from 15:m1305_18 -# 1305| r1305_7(glval) = VariableAddress[#temp1305:9] : -# 1305| r1305_8(long) = Load[#temp1305:9] : &:r1305_7, m1305_6 -# 1305| r1305_9(int) = Convert : r1305_8 -# 1305| r1305_10(glval) = VariableAddress[z] : -# 1305| m1305_11(int) = Store[z] : &:r1305_10, r1305_9 -# 1306| r1306_1(glval) = VariableAddress[y] : -# 1306| r1306_2(long) = Load[y] : &:r1306_1, m1299_10 -# 1306| r1306_3(long) = Constant[0] : -# 1306| r1306_4(bool) = CompareNE : r1306_2, r1306_3 -# 1306| v1306_5(void) = ConditionalBranch : r1306_4 -#-----| False -> Block 18 -#-----| True -> Block 17 - -# 1305| Block 14 -# 1305| r1305_12(glval) = VariableAddress[#temp1305:9] : -# 1305| m1305_13(long) = Store[#temp1305:9] : &:r1305_12, r1305_2 -#-----| Goto -> Block 13 - -# 1305| Block 15 -# 1305| r1305_14(glval) = VariableAddress[x] : -# 1305| r1305_15(int) = Load[x] : &:r1305_14, m1299_8 -# 1305| r1305_16(long) = Convert : r1305_15 -# 1305| r1305_17(glval) = VariableAddress[#temp1305:9] : -# 1305| m1305_18(long) = Store[#temp1305:9] : &:r1305_17, r1305_16 -#-----| Goto -> Block 13 - -# 1306| Block 16 -# 1306| m1306_6(long) = Phi : from 17:m1306_13, from 18:m1306_17 +# 1306| Block 10 +# 1306| m1306_6(long) = Phi : from 11:m1306_13, from 12:m1306_17 # 1306| r1306_7(glval) = VariableAddress[#temp1306:9] : # 1306| r1306_8(long) = Load[#temp1306:9] : &:r1306_7, m1306_6 # 1306| r1306_9(int) = Convert : r1306_8 # 1306| r1306_10(glval) = VariableAddress[z] : # 1306| m1306_11(int) = Store[z] : &:r1306_10, r1306_9 -# 1308| r1308_1(glval) = VariableAddress[x] : -# 1308| r1308_2(int) = Load[x] : &:r1308_1, m1299_8 -# 1308| r1308_3(int) = Constant[0] : +# 1307| r1307_1(glval) = VariableAddress[y] : +# 1307| r1307_2(long) = Load[y] : &:r1307_1, m1301_10 +# 1307| r1307_3(long) = Constant[0] : +# 1307| r1307_4(bool) = CompareNE : r1307_2, r1307_3 +# 1307| v1307_5(void) = ConditionalBranch : r1307_4 +#-----| False -> Block 15 +#-----| True -> Block 14 + +# 1306| Block 11 +# 1306| r1306_12(glval) = VariableAddress[#temp1306:9] : +# 1306| m1306_13(long) = Store[#temp1306:9] : &:r1306_12, r1306_2 +#-----| Goto -> Block 10 + +# 1306| Block 12 +# 1306| r1306_14(glval) = VariableAddress[y] : +# 1306| r1306_15(long) = Load[y] : &:r1306_14, m1301_10 +# 1306| r1306_16(glval) = VariableAddress[#temp1306:9] : +# 1306| m1306_17(long) = Store[#temp1306:9] : &:r1306_16, r1306_15 +#-----| Goto -> Block 10 + +# 1307| Block 13 +# 1307| m1307_6(long) = Phi : from 14:m1307_13, from 15:m1307_18 +# 1307| r1307_7(glval) = VariableAddress[#temp1307:9] : +# 1307| r1307_8(long) = Load[#temp1307:9] : &:r1307_7, m1307_6 +# 1307| r1307_9(int) = Convert : r1307_8 +# 1307| r1307_10(glval) = VariableAddress[z] : +# 1307| m1307_11(int) = Store[z] : &:r1307_10, r1307_9 +# 1308| r1308_1(glval) = VariableAddress[y] : +# 1308| r1308_2(long) = Load[y] : &:r1308_1, m1301_10 +# 1308| r1308_3(long) = Constant[0] : # 1308| r1308_4(bool) = CompareNE : r1308_2, r1308_3 # 1308| v1308_5(void) = ConditionalBranch : r1308_4 +#-----| False -> Block 18 +#-----| True -> Block 17 + +# 1307| Block 14 +# 1307| r1307_12(glval) = VariableAddress[#temp1307:9] : +# 1307| m1307_13(long) = Store[#temp1307:9] : &:r1307_12, r1307_2 +#-----| Goto -> Block 13 + +# 1307| Block 15 +# 1307| r1307_14(glval) = VariableAddress[x] : +# 1307| r1307_15(int) = Load[x] : &:r1307_14, m1301_8 +# 1307| r1307_16(long) = Convert : r1307_15 +# 1307| r1307_17(glval) = VariableAddress[#temp1307:9] : +# 1307| m1307_18(long) = Store[#temp1307:9] : &:r1307_17, r1307_16 +#-----| Goto -> Block 13 + +# 1308| Block 16 +# 1308| m1308_6(long) = Phi : from 17:m1308_13, from 18:m1308_17 +# 1308| r1308_7(glval) = VariableAddress[#temp1308:9] : +# 1308| r1308_8(long) = Load[#temp1308:9] : &:r1308_7, m1308_6 +# 1308| r1308_9(int) = Convert : r1308_8 +# 1308| r1308_10(glval) = VariableAddress[z] : +# 1308| m1308_11(int) = Store[z] : &:r1308_10, r1308_9 +# 1310| r1310_1(glval) = VariableAddress[x] : +# 1310| r1310_2(int) = Load[x] : &:r1310_1, m1301_8 +# 1310| r1310_3(int) = Constant[0] : +# 1310| r1310_4(bool) = CompareNE : r1310_2, r1310_3 +# 1310| v1310_5(void) = ConditionalBranch : r1310_4 #-----| False -> Block 25 #-----| True -> Block 24 -# 1306| Block 17 -# 1306| r1306_12(glval) = VariableAddress[#temp1306:9] : -# 1306| m1306_13(long) = Store[#temp1306:9] : &:r1306_12, r1306_2 +# 1308| Block 17 +# 1308| r1308_12(glval) = VariableAddress[#temp1308:9] : +# 1308| m1308_13(long) = Store[#temp1308:9] : &:r1308_12, r1308_2 #-----| Goto -> Block 16 -# 1306| Block 18 -# 1306| r1306_14(glval) = VariableAddress[y] : -# 1306| r1306_15(long) = Load[y] : &:r1306_14, m1299_10 -# 1306| r1306_16(glval) = VariableAddress[#temp1306:9] : -# 1306| m1306_17(long) = Store[#temp1306:9] : &:r1306_16, r1306_15 +# 1308| Block 18 +# 1308| r1308_14(glval) = VariableAddress[y] : +# 1308| r1308_15(long) = Load[y] : &:r1308_14, m1301_10 +# 1308| r1308_16(glval) = VariableAddress[#temp1308:9] : +# 1308| m1308_17(long) = Store[#temp1308:9] : &:r1308_16, r1308_15 #-----| Goto -> Block 16 -# 1308| Block 19 -# 1308| m1308_6(int) = Phi : from 20:m1308_12, from 26:m1308_34 -# 1308| r1308_7(glval) = VariableAddress[#temp1308:9] : -# 1308| r1308_8(int) = Load[#temp1308:9] : &:r1308_7, m1308_6 -# 1308| r1308_9(glval) = VariableAddress[z] : -# 1308| m1308_10(int) = Store[z] : &:r1308_9, r1308_8 -# 1309| v1309_1(void) = NoOp : -# 1299| v1299_11(void) = ReturnVoid : -# 1299| v1299_12(void) = AliasedUse : m1299_3 -# 1299| v1299_13(void) = ExitFunction : +# 1310| Block 19 +# 1310| m1310_6(int) = Phi : from 20:m1310_12, from 26:m1310_34 +# 1310| r1310_7(glval) = VariableAddress[#temp1310:9] : +# 1310| r1310_8(int) = Load[#temp1310:9] : &:r1310_7, m1310_6 +# 1310| r1310_9(glval) = VariableAddress[z] : +# 1310| m1310_10(int) = Store[z] : &:r1310_9, r1310_8 +# 1311| v1311_1(void) = NoOp : +# 1301| v1301_11(void) = ReturnVoid : +# 1301| v1301_12(void) = AliasedUse : m1301_3 +# 1301| v1301_13(void) = ExitFunction : -# 1308| Block 20 -# 1308| r1308_11(glval) = VariableAddress[#temp1308:9] : -# 1308| m1308_12(int) = Store[#temp1308:9] : &:r1308_11, r1308_18 +# 1310| Block 20 +# 1310| r1310_11(glval) = VariableAddress[#temp1310:9] : +# 1310| m1310_12(int) = Store[#temp1310:9] : &:r1310_11, r1310_18 #-----| Goto -> Block 19 -# 1308| Block 21 -# 1308| r1308_13(glval) = VariableAddress[#temp1308:10] : -# 1308| r1308_14(bool) = Constant[0] : -# 1308| m1308_15(bool) = Store[#temp1308:10] : &:r1308_13, r1308_14 +# 1310| Block 21 +# 1310| r1310_13(glval) = VariableAddress[#temp1310:10] : +# 1310| r1310_14(bool) = Constant[0] : +# 1310| m1310_15(bool) = Store[#temp1310:10] : &:r1310_13, r1310_14 #-----| Goto -> Block 22 -# 1308| Block 22 -# 1308| m1308_16(bool) = Phi : from 21:m1308_15, from 23:m1308_22 -# 1308| r1308_17(glval) = VariableAddress[#temp1308:10] : -# 1308| r1308_18(bool) = Load[#temp1308:10] : &:r1308_17, m1308_16 -# 1308| v1308_19(void) = ConditionalBranch : r1308_18 +# 1310| Block 22 +# 1310| m1310_16(bool) = Phi : from 21:m1310_15, from 23:m1310_22 +# 1310| r1310_17(glval) = VariableAddress[#temp1310:10] : +# 1310| r1310_18(bool) = Load[#temp1310:10] : &:r1310_17, m1310_16 +# 1310| v1310_19(void) = ConditionalBranch : r1310_18 #-----| False -> Block 26 #-----| True -> Block 20 -# 1308| Block 23 -# 1308| r1308_20(glval) = VariableAddress[#temp1308:10] : -# 1308| r1308_21(bool) = Constant[1] : -# 1308| m1308_22(bool) = Store[#temp1308:10] : &:r1308_20, r1308_21 +# 1310| Block 23 +# 1310| r1310_20(glval) = VariableAddress[#temp1310:10] : +# 1310| r1310_21(bool) = Constant[1] : +# 1310| m1310_22(bool) = Store[#temp1310:10] : &:r1310_20, r1310_21 #-----| Goto -> Block 22 -# 1308| Block 24 -# 1308| r1308_23(glval) = VariableAddress[b] : -# 1308| r1308_24(bool) = Load[b] : &:r1308_23, m1299_6 -# 1308| v1308_25(void) = ConditionalBranch : r1308_24 +# 1310| Block 24 +# 1310| r1310_23(glval) = VariableAddress[b] : +# 1310| r1310_24(bool) = Load[b] : &:r1310_23, m1301_6 +# 1310| v1310_25(void) = ConditionalBranch : r1310_24 #-----| False -> Block 25 #-----| True -> Block 23 -# 1308| Block 25 -# 1308| r1308_26(glval) = VariableAddress[y] : -# 1308| r1308_27(long) = Load[y] : &:r1308_26, m1299_10 -# 1308| r1308_28(long) = Constant[0] : -# 1308| r1308_29(bool) = CompareNE : r1308_27, r1308_28 -# 1308| v1308_30(void) = ConditionalBranch : r1308_29 +# 1310| Block 25 +# 1310| r1310_26(glval) = VariableAddress[y] : +# 1310| r1310_27(long) = Load[y] : &:r1310_26, m1301_10 +# 1310| r1310_28(long) = Constant[0] : +# 1310| r1310_29(bool) = CompareNE : r1310_27, r1310_28 +# 1310| v1310_30(void) = ConditionalBranch : r1310_29 #-----| False -> Block 21 #-----| True -> Block 23 -# 1308| Block 26 -# 1308| r1308_31(glval) = VariableAddress[x] : -# 1308| r1308_32(int) = Load[x] : &:r1308_31, m1299_8 -# 1308| r1308_33(glval) = VariableAddress[#temp1308:9] : -# 1308| m1308_34(int) = Store[#temp1308:9] : &:r1308_33, r1308_32 +# 1310| Block 26 +# 1310| r1310_31(glval) = VariableAddress[x] : +# 1310| r1310_32(int) = Load[x] : &:r1310_31, m1301_8 +# 1310| r1310_33(glval) = VariableAddress[#temp1310:9] : +# 1310| m1310_34(int) = Store[#temp1310:9] : &:r1310_33, r1310_32 #-----| Goto -> Block 19 -# 1314| int shortCircuitConditional(int, int) -# 1314| Block 0 -# 1314| v1314_1(void) = EnterFunction : -# 1314| m1314_2(unknown) = AliasedDefinition : -# 1314| m1314_3(unknown) = InitializeNonLocal : -# 1314| m1314_4(unknown) = Chi : total:m1314_2, partial:m1314_3 -# 1314| r1314_5(glval) = VariableAddress[x] : -# 1314| m1314_6(int) = InitializeParameter[x] : &:r1314_5 -# 1314| r1314_7(glval) = VariableAddress[y] : -# 1314| m1314_8(int) = InitializeParameter[y] : &:r1314_7 -# 1315| r1315_1(glval) = VariableAddress[#return] : -# 1315| r1315_2(glval) = FunctionAddress[predicateA] : -# 1315| r1315_3(bool) = Call[predicateA] : func:r1315_2 -# 1315| m1315_4(unknown) = ^CallSideEffect : ~m1314_4 -# 1315| m1315_5(unknown) = Chi : total:m1314_4, partial:m1315_4 -# 1315| v1315_6(void) = ConditionalBranch : r1315_3 +# 1316| int shortCircuitConditional(int, int) +# 1316| Block 0 +# 1316| v1316_1(void) = EnterFunction : +# 1316| m1316_2(unknown) = AliasedDefinition : +# 1316| m1316_3(unknown) = InitializeNonLocal : +# 1316| m1316_4(unknown) = Chi : total:m1316_2, partial:m1316_3 +# 1316| r1316_5(glval) = VariableAddress[x] : +# 1316| m1316_6(int) = InitializeParameter[x] : &:r1316_5 +# 1316| r1316_7(glval) = VariableAddress[y] : +# 1316| m1316_8(int) = InitializeParameter[y] : &:r1316_7 +# 1317| r1317_1(glval) = VariableAddress[#return] : +# 1317| r1317_2(glval) = FunctionAddress[predicateA] : +# 1317| r1317_3(bool) = Call[predicateA] : func:r1317_2 +# 1317| m1317_4(unknown) = ^CallSideEffect : ~m1316_4 +# 1317| m1317_5(unknown) = Chi : total:m1316_4, partial:m1317_4 +# 1317| v1317_6(void) = ConditionalBranch : r1317_3 #-----| False -> Block 4 #-----| True -> Block 2 -# 1315| Block 1 -# 1315| m1315_7(unknown) = Phi : from 3:~m1315_15, from 4:~m1315_21 -# 1315| m1315_8(int) = Phi : from 3:m1315_20, from 4:m1315_25 -# 1315| r1315_9(glval) = VariableAddress[#temp1315:12] : -# 1315| r1315_10(int) = Load[#temp1315:12] : &:r1315_9, m1315_8 -# 1315| m1315_11(int) = Store[#return] : &:r1315_1, r1315_10 -# 1314| r1314_9(glval) = VariableAddress[#return] : -# 1314| v1314_10(void) = ReturnValue : &:r1314_9, m1315_11 -# 1314| v1314_11(void) = AliasedUse : ~m1315_7 -# 1314| v1314_12(void) = ExitFunction : +# 1317| Block 1 +# 1317| m1317_7(unknown) = Phi : from 3:~m1317_15, from 4:~m1317_21 +# 1317| m1317_8(int) = Phi : from 3:m1317_20, from 4:m1317_25 +# 1317| r1317_9(glval) = VariableAddress[#temp1317:12] : +# 1317| r1317_10(int) = Load[#temp1317:12] : &:r1317_9, m1317_8 +# 1317| m1317_11(int) = Store[#return] : &:r1317_1, r1317_10 +# 1316| r1316_9(glval) = VariableAddress[#return] : +# 1316| v1316_10(void) = ReturnValue : &:r1316_9, m1317_11 +# 1316| v1316_11(void) = AliasedUse : ~m1317_7 +# 1316| v1316_12(void) = ExitFunction : -# 1315| Block 2 -# 1315| r1315_12(glval) = FunctionAddress[predicateB] : -# 1315| r1315_13(bool) = Call[predicateB] : func:r1315_12 -# 1315| m1315_14(unknown) = ^CallSideEffect : ~m1315_5 -# 1315| m1315_15(unknown) = Chi : total:m1315_5, partial:m1315_14 -# 1315| v1315_16(void) = ConditionalBranch : r1315_13 +# 1317| Block 2 +# 1317| r1317_12(glval) = FunctionAddress[predicateB] : +# 1317| r1317_13(bool) = Call[predicateB] : func:r1317_12 +# 1317| m1317_14(unknown) = ^CallSideEffect : ~m1317_5 +# 1317| m1317_15(unknown) = Chi : total:m1317_5, partial:m1317_14 +# 1317| v1317_16(void) = ConditionalBranch : r1317_13 #-----| False -> Block 4 #-----| True -> Block 3 -# 1315| Block 3 -# 1315| r1315_17(glval) = VariableAddress[x] : -# 1315| r1315_18(int) = Load[x] : &:r1315_17, m1314_6 -# 1315| r1315_19(glval) = VariableAddress[#temp1315:12] : -# 1315| m1315_20(int) = Store[#temp1315:12] : &:r1315_19, r1315_18 +# 1317| Block 3 +# 1317| r1317_17(glval) = VariableAddress[x] : +# 1317| r1317_18(int) = Load[x] : &:r1317_17, m1316_6 +# 1317| r1317_19(glval) = VariableAddress[#temp1317:12] : +# 1317| m1317_20(int) = Store[#temp1317:12] : &:r1317_19, r1317_18 #-----| Goto -> Block 1 -# 1315| Block 4 -# 1315| m1315_21(unknown) = Phi : from 0:~m1315_5, from 2:~m1315_15 -# 1315| r1315_22(glval) = VariableAddress[y] : -# 1315| r1315_23(int) = Load[y] : &:r1315_22, m1314_8 -# 1315| r1315_24(glval) = VariableAddress[#temp1315:12] : -# 1315| m1315_25(int) = Store[#temp1315:12] : &:r1315_24, r1315_23 +# 1317| Block 4 +# 1317| m1317_21(unknown) = Phi : from 0:~m1317_5, from 2:~m1317_15 +# 1317| r1317_22(glval) = VariableAddress[y] : +# 1317| r1317_23(int) = Load[y] : &:r1317_22, m1316_8 +# 1317| r1317_24(glval) = VariableAddress[#temp1317:12] : +# 1317| m1317_25(int) = Store[#temp1317:12] : &:r1317_24, r1317_23 #-----| Goto -> Block 1 -# 1320| void f(int*) -# 1320| Block 0 -# 1320| v1320_1(void) = EnterFunction : -# 1320| m1320_2(unknown) = AliasedDefinition : -# 1320| m1320_3(unknown) = InitializeNonLocal : -# 1320| m1320_4(unknown) = Chi : total:m1320_2, partial:m1320_3 -# 1320| r1320_5(glval) = VariableAddress[p] : -# 1320| m1320_6(int *) = InitializeParameter[p] : &:r1320_5 -# 1320| r1320_7(int *) = Load[p] : &:r1320_5, m1320_6 -# 1320| m1320_8(unknown) = InitializeIndirection[p] : &:r1320_7 -# 1322| r1322_1(glval) = FunctionAddress[operator new] : -# 1322| r1322_2(unsigned long) = Constant[4] : -# 1322| r1322_3(glval) = VariableAddress[p] : -# 1322| r1322_4(int *) = Load[p] : &:r1322_3, m1320_6 -# 1322| r1322_5(void *) = Convert : r1322_4 -# 1322| r1322_6(void *) = Call[operator new] : func:r1322_1, 0:r1322_2, 1:r1322_5 -# 1322| m1322_7(unknown) = ^CallSideEffect : ~m1320_4 -# 1322| m1322_8(unknown) = Chi : total:m1320_4, partial:m1322_7 -# 1322| m1322_9(unknown) = ^InitializeDynamicAllocation : &:r1322_6 -# 1322| r1322_10(int *) = Convert : r1322_6 -# 1323| v1323_1(void) = NoOp : -# 1320| v1320_9(void) = ReturnIndirection[p] : &:r1320_7, m1320_8 -# 1320| v1320_10(void) = ReturnVoid : -# 1320| v1320_11(void) = AliasedUse : ~m1322_8 -# 1320| v1320_12(void) = ExitFunction : +# 1322| void f(int*) +# 1322| Block 0 +# 1322| v1322_1(void) = EnterFunction : +# 1322| m1322_2(unknown) = AliasedDefinition : +# 1322| m1322_3(unknown) = InitializeNonLocal : +# 1322| m1322_4(unknown) = Chi : total:m1322_2, partial:m1322_3 +# 1322| r1322_5(glval) = VariableAddress[p] : +# 1322| m1322_6(int *) = InitializeParameter[p] : &:r1322_5 +# 1322| r1322_7(int *) = Load[p] : &:r1322_5, m1322_6 +# 1322| m1322_8(unknown) = InitializeIndirection[p] : &:r1322_7 +# 1324| r1324_1(glval) = FunctionAddress[operator new] : +# 1324| r1324_2(unsigned long) = Constant[4] : +# 1324| r1324_3(glval) = VariableAddress[p] : +# 1324| r1324_4(int *) = Load[p] : &:r1324_3, m1322_6 +# 1324| r1324_5(void *) = Convert : r1324_4 +# 1324| r1324_6(void *) = Call[operator new] : func:r1324_1, 0:r1324_2, 1:r1324_5 +# 1324| m1324_7(unknown) = ^CallSideEffect : ~m1322_4 +# 1324| m1324_8(unknown) = Chi : total:m1322_4, partial:m1324_7 +# 1324| m1324_9(unknown) = ^InitializeDynamicAllocation : &:r1324_6 +# 1324| r1324_10(int *) = Convert : r1324_6 +# 1325| v1325_1(void) = NoOp : +# 1322| v1322_9(void) = ReturnIndirection[p] : &:r1322_7, m1322_8 +# 1322| v1322_10(void) = ReturnVoid : +# 1322| v1322_11(void) = AliasedUse : ~m1324_8 +# 1322| v1322_12(void) = ExitFunction : -# 1326| Point defaultConstruct() -# 1326| Block 0 -# 1326| v1326_1(void) = EnterFunction : -# 1326| m1326_2(unknown) = AliasedDefinition : -# 1326| m1326_3(unknown) = InitializeNonLocal : -# 1326| m1326_4(unknown) = Chi : total:m1326_2, partial:m1326_3 -# 1327| r1327_1(glval) = VariableAddress[#return] : -# 1327| r1327_2(Point) = Constant[0] : -# 1327| m1327_3(Point) = Store[#return] : &:r1327_1, r1327_2 -# 1326| r1326_5(glval) = VariableAddress[#return] : -# 1326| v1326_6(void) = ReturnValue : &:r1326_5, m1327_3 -# 1326| v1326_7(void) = AliasedUse : m1326_3 -# 1326| v1326_8(void) = ExitFunction : +# 1328| Point defaultConstruct() +# 1328| Block 0 +# 1328| v1328_1(void) = EnterFunction : +# 1328| m1328_2(unknown) = AliasedDefinition : +# 1328| m1328_3(unknown) = InitializeNonLocal : +# 1328| m1328_4(unknown) = Chi : total:m1328_2, partial:m1328_3 +# 1329| r1329_1(glval) = VariableAddress[#return] : +# 1329| r1329_2(Point) = Constant[0] : +# 1329| m1329_3(Point) = Store[#return] : &:r1329_1, r1329_2 +# 1328| r1328_5(glval) = VariableAddress[#return] : +# 1328| v1328_6(void) = ReturnValue : &:r1328_5, m1329_3 +# 1328| v1328_7(void) = AliasedUse : m1328_3 +# 1328| v1328_8(void) = ExitFunction : -# 1326| String defaultConstruct() -# 1326| Block 0 -# 1326| v1326_1(void) = EnterFunction : -# 1326| m1326_2(unknown) = AliasedDefinition : -# 1326| m1326_3(unknown) = InitializeNonLocal : -# 1326| m1326_4(unknown) = Chi : total:m1326_2, partial:m1326_3 -# 1327| r1327_1(glval) = VariableAddress[#return] : -# 1327| m1327_2(String) = Uninitialized[#return] : &:r1327_1 -# 1327| r1327_3(glval) = FunctionAddress[String] : -# 1327| v1327_4(void) = Call[String] : func:r1327_3, this:r1327_1 -# 1327| m1327_5(unknown) = ^CallSideEffect : ~m1326_4 -# 1327| m1327_6(unknown) = Chi : total:m1326_4, partial:m1327_5 -# 1327| m1327_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r1327_1 -# 1327| m1327_8(String) = Chi : total:m1327_2, partial:m1327_7 -# 1326| r1326_5(glval) = VariableAddress[#return] : -# 1326| v1326_6(void) = ReturnValue : &:r1326_5, m1327_8 -# 1326| v1326_7(void) = AliasedUse : ~m1327_6 -# 1326| v1326_8(void) = ExitFunction : +# 1328| String defaultConstruct() +# 1328| Block 0 +# 1328| v1328_1(void) = EnterFunction : +# 1328| m1328_2(unknown) = AliasedDefinition : +# 1328| m1328_3(unknown) = InitializeNonLocal : +# 1328| m1328_4(unknown) = Chi : total:m1328_2, partial:m1328_3 +# 1329| r1329_1(glval) = VariableAddress[#return] : +# 1329| m1329_2(String) = Uninitialized[#return] : &:r1329_1 +# 1329| r1329_3(glval) = FunctionAddress[String] : +# 1329| v1329_4(void) = Call[String] : func:r1329_3, this:r1329_1 +# 1329| m1329_5(unknown) = ^CallSideEffect : ~m1328_4 +# 1329| m1329_6(unknown) = Chi : total:m1328_4, partial:m1329_5 +# 1329| m1329_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r1329_1 +# 1329| m1329_8(String) = Chi : total:m1329_2, partial:m1329_7 +# 1328| r1328_5(glval) = VariableAddress[#return] : +# 1328| v1328_6(void) = ReturnValue : &:r1328_5, m1329_8 +# 1328| v1328_7(void) = AliasedUse : ~m1329_6 +# 1328| v1328_8(void) = ExitFunction : -# 1326| copy_constructor defaultConstruct() -# 1326| Block 0 -# 1326| v1326_1(void) = EnterFunction : -# 1326| m1326_2(unknown) = AliasedDefinition : -# 1326| m1326_3(unknown) = InitializeNonLocal : -# 1326| m1326_4(unknown) = Chi : total:m1326_2, partial:m1326_3 -# 1327| r1327_1(glval) = VariableAddress[#return] : -# 1327| m1327_2(copy_constructor) = Uninitialized[#return] : &:r1327_1 -# 1327| r1327_3(glval) = FunctionAddress[copy_constructor] : -# 1327| v1327_4(void) = Call[copy_constructor] : func:r1327_3, this:r1327_1 -# 1327| m1327_5(unknown) = ^CallSideEffect : ~m1326_4 -# 1327| m1327_6(unknown) = Chi : total:m1326_4, partial:m1327_5 -# 1327| m1327_7(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1327_1 -# 1327| m1327_8(copy_constructor) = Chi : total:m1327_2, partial:m1327_7 -# 1326| r1326_5(glval) = VariableAddress[#return] : -# 1326| v1326_6(void) = ReturnValue : &:r1326_5, m1327_8 -# 1326| v1326_7(void) = AliasedUse : ~m1327_6 -# 1326| v1326_8(void) = ExitFunction : +# 1328| copy_constructor defaultConstruct() +# 1328| Block 0 +# 1328| v1328_1(void) = EnterFunction : +# 1328| m1328_2(unknown) = AliasedDefinition : +# 1328| m1328_3(unknown) = InitializeNonLocal : +# 1328| m1328_4(unknown) = Chi : total:m1328_2, partial:m1328_3 +# 1329| r1329_1(glval) = VariableAddress[#return] : +# 1329| m1329_2(copy_constructor) = Uninitialized[#return] : &:r1329_1 +# 1329| r1329_3(glval) = FunctionAddress[copy_constructor] : +# 1329| v1329_4(void) = Call[copy_constructor] : func:r1329_3, this:r1329_1 +# 1329| m1329_5(unknown) = ^CallSideEffect : ~m1328_4 +# 1329| m1329_6(unknown) = Chi : total:m1328_4, partial:m1329_5 +# 1329| m1329_7(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1329_1 +# 1329| m1329_8(copy_constructor) = Chi : total:m1329_2, partial:m1329_7 +# 1328| r1328_5(glval) = VariableAddress[#return] : +# 1328| v1328_6(void) = ReturnValue : &:r1328_5, m1329_8 +# 1328| v1328_7(void) = AliasedUse : ~m1329_6 +# 1328| v1328_8(void) = ExitFunction : -# 1326| destructor_only defaultConstruct() -# 1326| Block 0 -# 1326| v1326_1(void) = EnterFunction : -# 1326| m1326_2(unknown) = AliasedDefinition : -# 1326| m1326_3(unknown) = InitializeNonLocal : -# 1326| m1326_4(unknown) = Chi : total:m1326_2, partial:m1326_3 -# 1327| r1327_1(glval) = VariableAddress[#return] : -# 1327| r1327_2(destructor_only) = Constant[0] : -# 1327| m1327_3(destructor_only) = Store[#return] : &:r1327_1, r1327_2 -# 1326| r1326_5(glval) = VariableAddress[#return] : -# 1326| v1326_6(void) = ReturnValue : &:r1326_5, m1327_3 -# 1326| v1326_7(void) = AliasedUse : m1326_3 -# 1326| v1326_8(void) = ExitFunction : +# 1328| destructor_only defaultConstruct() +# 1328| Block 0 +# 1328| v1328_1(void) = EnterFunction : +# 1328| m1328_2(unknown) = AliasedDefinition : +# 1328| m1328_3(unknown) = InitializeNonLocal : +# 1328| m1328_4(unknown) = Chi : total:m1328_2, partial:m1328_3 +# 1329| r1329_1(glval) = VariableAddress[#return] : +# 1329| r1329_2(destructor_only) = Constant[0] : +# 1329| m1329_3(destructor_only) = Store[#return] : &:r1329_1, r1329_2 +# 1328| r1328_5(glval) = VariableAddress[#return] : +# 1328| v1328_6(void) = ReturnValue : &:r1328_5, m1329_3 +# 1328| v1328_7(void) = AliasedUse : m1328_3 +# 1328| v1328_8(void) = ExitFunction : -# 1365| void temporary_string() -# 1365| Block 0 -# 1365| v1365_1(void) = EnterFunction : -# 1365| m1365_2(unknown) = AliasedDefinition : -# 1365| m1365_3(unknown) = InitializeNonLocal : -# 1365| m1365_4(unknown) = Chi : total:m1365_2, partial:m1365_3 -# 1366| r1366_1(glval) = VariableAddress[s] : -# 1366| r1366_2(glval) = FunctionAddress[returnValue] : -# 1366| r1366_3(String) = Call[returnValue] : func:r1366_2 -# 1366| m1366_4(unknown) = ^CallSideEffect : ~m1365_4 -# 1366| m1366_5(unknown) = Chi : total:m1365_4, partial:m1366_4 -# 1366| m1366_6(String) = Store[s] : &:r1366_1, r1366_3 -# 1367| r1367_1(glval) = VariableAddress[rs] : -# 1367| r1367_2(glval) = VariableAddress[#temp1367:24] : -# 1367| r1367_3(glval) = FunctionAddress[returnValue] : -# 1367| r1367_4(String) = Call[returnValue] : func:r1367_3 -# 1367| m1367_5(unknown) = ^CallSideEffect : ~m1366_5 -# 1367| m1367_6(unknown) = Chi : total:m1366_5, partial:m1367_5 -# 1367| m1367_7(String) = Store[#temp1367:24] : &:r1367_2, r1367_4 -# 1367| r1367_8(glval) = Convert : r1367_2 -# 1367| r1367_9(String &) = CopyValue : r1367_8 -# 1367| m1367_10(String &) = Store[rs] : &:r1367_1, r1367_9 -# 1369| r1369_1(glval) = FunctionAddress[acceptRef] : -# 1369| r1369_2(glval) = VariableAddress[s] : -# 1369| r1369_3(glval) = Convert : r1369_2 -# 1369| r1369_4(String &) = CopyValue : r1369_3 -# 1369| v1369_5(void) = Call[acceptRef] : func:r1369_1, 0:r1369_4 -# 1369| m1369_6(unknown) = ^CallSideEffect : ~m1367_6 -# 1369| m1369_7(unknown) = Chi : total:m1367_6, partial:m1369_6 -# 1369| v1369_8(void) = ^BufferReadSideEffect[0] : &:r1369_4, ~m1366_6 -# 1370| r1370_1(glval) = FunctionAddress[acceptRef] : -# 1370| r1370_2(glval) = VariableAddress[#temp1370:23] : -# 1370| m1370_3(String) = Uninitialized[#temp1370:23] : &:r1370_2 -# 1370| r1370_4(glval) = FunctionAddress[String] : -# 1370| r1370_5(glval) = StringConstant["foo"] : -# 1370| r1370_6(char *) = Convert : r1370_5 -# 1370| v1370_7(void) = Call[String] : func:r1370_4, this:r1370_2, 0:r1370_6 -# 1370| m1370_8(unknown) = ^CallSideEffect : ~m1369_7 -# 1370| m1370_9(unknown) = Chi : total:m1369_7, partial:m1370_8 -# 1370| v1370_10(void) = ^BufferReadSideEffect[0] : &:r1370_6, ~m1365_3 -# 1370| m1370_11(String) = ^IndirectMayWriteSideEffect[-1] : &:r1370_2 -# 1370| m1370_12(String) = Chi : total:m1370_3, partial:m1370_11 -# 1370| r1370_13(String &) = CopyValue : r1370_2 -# 1370| v1370_14(void) = Call[acceptRef] : func:r1370_1, 0:r1370_13 -# 1370| m1370_15(unknown) = ^CallSideEffect : ~m1370_9 -# 1370| m1370_16(unknown) = Chi : total:m1370_9, partial:m1370_15 -# 1370| v1370_17(void) = ^BufferReadSideEffect[0] : &:r1370_13, ~m1370_12 -# 1371| r1371_1(glval) = FunctionAddress[acceptValue] : -# 1371| r1371_2(glval) = VariableAddress[#temp1371:17] : -# 1371| m1371_3(String) = Uninitialized[#temp1371:17] : &:r1371_2 -# 1371| r1371_4(glval) = FunctionAddress[String] : -# 1371| r1371_5(glval) = VariableAddress[s] : -# 1371| r1371_6(glval) = Convert : r1371_5 -# 1371| r1371_7(String &) = CopyValue : r1371_6 -# 1371| v1371_8(void) = Call[String] : func:r1371_4, this:r1371_2, 0:r1371_7 -# 1371| m1371_9(unknown) = ^CallSideEffect : ~m1370_16 -# 1371| m1371_10(unknown) = Chi : total:m1370_16, partial:m1371_9 -# 1371| v1371_11(void) = ^BufferReadSideEffect[0] : &:r1371_7, ~m1366_6 -# 1371| m1371_12(String) = ^IndirectMayWriteSideEffect[-1] : &:r1371_2 -# 1371| m1371_13(String) = Chi : total:m1371_3, partial:m1371_12 -# 1371| r1371_14(String) = Load[#temp1371:17] : &:r1371_2, m1371_13 -# 1371| v1371_15(void) = Call[acceptValue] : func:r1371_1, 0:r1371_14 -# 1371| m1371_16(unknown) = ^CallSideEffect : ~m1371_10 -# 1371| m1371_17(unknown) = Chi : total:m1371_10, partial:m1371_16 -# 1372| r1372_1(glval) = FunctionAddress[acceptValue] : -# 1372| r1372_2(glval) = VariableAddress[#temp1372:25] : -# 1372| m1372_3(String) = Uninitialized[#temp1372:25] : &:r1372_2 +# 1367| void temporary_string() +# 1367| Block 0 +# 1367| v1367_1(void) = EnterFunction : +# 1367| m1367_2(unknown) = AliasedDefinition : +# 1367| m1367_3(unknown) = InitializeNonLocal : +# 1367| m1367_4(unknown) = Chi : total:m1367_2, partial:m1367_3 +# 1368| r1368_1(glval) = VariableAddress[s] : +# 1368| r1368_2(glval) = FunctionAddress[returnValue] : +# 1368| r1368_3(String) = Call[returnValue] : func:r1368_2 +# 1368| m1368_4(unknown) = ^CallSideEffect : ~m1367_4 +# 1368| m1368_5(unknown) = Chi : total:m1367_4, partial:m1368_4 +# 1368| m1368_6(String) = Store[s] : &:r1368_1, r1368_3 +# 1369| r1369_1(glval) = VariableAddress[rs] : +# 1369| r1369_2(glval) = VariableAddress[#temp1369:24] : +# 1369| r1369_3(glval) = FunctionAddress[returnValue] : +# 1369| r1369_4(String) = Call[returnValue] : func:r1369_3 +# 1369| m1369_5(unknown) = ^CallSideEffect : ~m1368_5 +# 1369| m1369_6(unknown) = Chi : total:m1368_5, partial:m1369_5 +# 1369| m1369_7(String) = Store[#temp1369:24] : &:r1369_2, r1369_4 +# 1369| r1369_8(glval) = Convert : r1369_2 +# 1369| r1369_9(String &) = CopyValue : r1369_8 +# 1369| m1369_10(String &) = Store[rs] : &:r1369_1, r1369_9 +# 1371| r1371_1(glval) = FunctionAddress[acceptRef] : +# 1371| r1371_2(glval) = VariableAddress[s] : +# 1371| r1371_3(glval) = Convert : r1371_2 +# 1371| r1371_4(String &) = CopyValue : r1371_3 +# 1371| v1371_5(void) = Call[acceptRef] : func:r1371_1, 0:r1371_4 +# 1371| m1371_6(unknown) = ^CallSideEffect : ~m1369_6 +# 1371| m1371_7(unknown) = Chi : total:m1369_6, partial:m1371_6 +# 1371| v1371_8(void) = ^BufferReadSideEffect[0] : &:r1371_4, ~m1368_6 +# 1372| r1372_1(glval) = FunctionAddress[acceptRef] : +# 1372| r1372_2(glval) = VariableAddress[#temp1372:23] : +# 1372| m1372_3(String) = Uninitialized[#temp1372:23] : &:r1372_2 # 1372| r1372_4(glval) = FunctionAddress[String] : # 1372| r1372_5(glval) = StringConstant["foo"] : # 1372| r1372_6(char *) = Convert : r1372_5 # 1372| v1372_7(void) = Call[String] : func:r1372_4, this:r1372_2, 0:r1372_6 -# 1372| m1372_8(unknown) = ^CallSideEffect : ~m1371_17 -# 1372| m1372_9(unknown) = Chi : total:m1371_17, partial:m1372_8 -# 1372| v1372_10(void) = ^BufferReadSideEffect[0] : &:r1372_6, ~m1365_3 +# 1372| m1372_8(unknown) = ^CallSideEffect : ~m1371_7 +# 1372| m1372_9(unknown) = Chi : total:m1371_7, partial:m1372_8 +# 1372| v1372_10(void) = ^BufferReadSideEffect[0] : &:r1372_6, ~m1367_3 # 1372| m1372_11(String) = ^IndirectMayWriteSideEffect[-1] : &:r1372_2 # 1372| m1372_12(String) = Chi : total:m1372_3, partial:m1372_11 -# 1372| r1372_13(String) = Load[#temp1372:25] : &:r1372_2, m1372_12 -# 1372| v1372_14(void) = Call[acceptValue] : func:r1372_1, 0:r1372_13 +# 1372| r1372_13(String &) = CopyValue : r1372_2 +# 1372| v1372_14(void) = Call[acceptRef] : func:r1372_1, 0:r1372_13 # 1372| m1372_15(unknown) = ^CallSideEffect : ~m1372_9 # 1372| m1372_16(unknown) = Chi : total:m1372_9, partial:m1372_15 -# 1373| r1373_1(glval) = VariableAddress[#temp1373:5] : -# 1373| m1373_2(String) = Uninitialized[#temp1373:5] : &:r1373_1 -# 1373| r1373_3(glval) = FunctionAddress[String] : -# 1373| v1373_4(void) = Call[String] : func:r1373_3, this:r1373_1 -# 1373| m1373_5(unknown) = ^CallSideEffect : ~m1372_16 -# 1373| m1373_6(unknown) = Chi : total:m1372_16, partial:m1373_5 -# 1373| m1373_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r1373_1 -# 1373| m1373_8(String) = Chi : total:m1373_2, partial:m1373_7 -# 1373| r1373_9(glval) = Convert : r1373_1 -# 1373| r1373_10(glval) = FunctionAddress[c_str] : -# 1373| r1373_11(char *) = Call[c_str] : func:r1373_10, this:r1373_9 -# 1373| m1373_12(unknown) = ^CallSideEffect : ~m1373_6 -# 1373| m1373_13(unknown) = Chi : total:m1373_6, partial:m1373_12 -# 1373| v1373_14(void) = ^IndirectReadSideEffect[-1] : &:r1373_9, m1373_8 -# 1374| r1374_1(glval) = VariableAddress[#temp1374:5] : -# 1374| r1374_2(glval) = FunctionAddress[returnValue] : -# 1374| r1374_3(String) = Call[returnValue] : func:r1374_2 -# 1374| m1374_4(unknown) = ^CallSideEffect : ~m1373_13 -# 1374| m1374_5(unknown) = Chi : total:m1373_13, partial:m1374_4 -# 1374| m1374_6(String) = Store[#temp1374:5] : &:r1374_1, r1374_3 -# 1374| r1374_7(glval) = Convert : r1374_1 -# 1374| r1374_8(glval) = FunctionAddress[c_str] : -# 1374| r1374_9(char *) = Call[c_str] : func:r1374_8, this:r1374_7 -# 1374| m1374_10(unknown) = ^CallSideEffect : ~m1374_5 -# 1374| m1374_11(unknown) = Chi : total:m1374_5, partial:m1374_10 -# 1374| v1374_12(void) = ^IndirectReadSideEffect[-1] : &:r1374_7, m1374_6 +# 1372| v1372_17(void) = ^BufferReadSideEffect[0] : &:r1372_13, ~m1372_12 +# 1373| r1373_1(glval) = FunctionAddress[acceptValue] : +# 1373| r1373_2(glval) = VariableAddress[#temp1373:17] : +# 1373| m1373_3(String) = Uninitialized[#temp1373:17] : &:r1373_2 +# 1373| r1373_4(glval) = FunctionAddress[String] : +# 1373| r1373_5(glval) = VariableAddress[s] : +# 1373| r1373_6(glval) = Convert : r1373_5 +# 1373| r1373_7(String &) = CopyValue : r1373_6 +# 1373| v1373_8(void) = Call[String] : func:r1373_4, this:r1373_2, 0:r1373_7 +# 1373| m1373_9(unknown) = ^CallSideEffect : ~m1372_16 +# 1373| m1373_10(unknown) = Chi : total:m1372_16, partial:m1373_9 +# 1373| v1373_11(void) = ^BufferReadSideEffect[0] : &:r1373_7, ~m1368_6 +# 1373| m1373_12(String) = ^IndirectMayWriteSideEffect[-1] : &:r1373_2 +# 1373| m1373_13(String) = Chi : total:m1373_3, partial:m1373_12 +# 1373| r1373_14(String) = Load[#temp1373:17] : &:r1373_2, m1373_13 +# 1373| v1373_15(void) = Call[acceptValue] : func:r1373_1, 0:r1373_14 +# 1373| m1373_16(unknown) = ^CallSideEffect : ~m1373_10 +# 1373| m1373_17(unknown) = Chi : total:m1373_10, partial:m1373_16 +# 1374| r1374_1(glval) = FunctionAddress[acceptValue] : +# 1374| r1374_2(glval) = VariableAddress[#temp1374:25] : +# 1374| m1374_3(String) = Uninitialized[#temp1374:25] : &:r1374_2 +# 1374| r1374_4(glval) = FunctionAddress[String] : +# 1374| r1374_5(glval) = StringConstant["foo"] : +# 1374| r1374_6(char *) = Convert : r1374_5 +# 1374| v1374_7(void) = Call[String] : func:r1374_4, this:r1374_2, 0:r1374_6 +# 1374| m1374_8(unknown) = ^CallSideEffect : ~m1373_17 +# 1374| m1374_9(unknown) = Chi : total:m1373_17, partial:m1374_8 +# 1374| v1374_10(void) = ^BufferReadSideEffect[0] : &:r1374_6, ~m1367_3 +# 1374| m1374_11(String) = ^IndirectMayWriteSideEffect[-1] : &:r1374_2 +# 1374| m1374_12(String) = Chi : total:m1374_3, partial:m1374_11 +# 1374| r1374_13(String) = Load[#temp1374:25] : &:r1374_2, m1374_12 +# 1374| v1374_14(void) = Call[acceptValue] : func:r1374_1, 0:r1374_13 +# 1374| m1374_15(unknown) = ^CallSideEffect : ~m1374_9 +# 1374| m1374_16(unknown) = Chi : total:m1374_9, partial:m1374_15 +# 1375| r1375_1(glval) = VariableAddress[#temp1375:5] : +# 1375| m1375_2(String) = Uninitialized[#temp1375:5] : &:r1375_1 +# 1375| r1375_3(glval) = FunctionAddress[String] : +# 1375| v1375_4(void) = Call[String] : func:r1375_3, this:r1375_1 +# 1375| m1375_5(unknown) = ^CallSideEffect : ~m1374_16 +# 1375| m1375_6(unknown) = Chi : total:m1374_16, partial:m1375_5 +# 1375| m1375_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r1375_1 +# 1375| m1375_8(String) = Chi : total:m1375_2, partial:m1375_7 +# 1375| r1375_9(glval) = Convert : r1375_1 +# 1375| r1375_10(glval) = FunctionAddress[c_str] : +# 1375| r1375_11(char *) = Call[c_str] : func:r1375_10, this:r1375_9 +# 1375| m1375_12(unknown) = ^CallSideEffect : ~m1375_6 +# 1375| m1375_13(unknown) = Chi : total:m1375_6, partial:m1375_12 +# 1375| v1375_14(void) = ^IndirectReadSideEffect[-1] : &:r1375_9, m1375_8 # 1376| r1376_1(glval) = VariableAddress[#temp1376:5] : -# 1376| r1376_2(glval) = FunctionAddress[defaultConstruct] : -# 1376| r1376_3(String) = Call[defaultConstruct] : func:r1376_2 -# 1376| m1376_4(unknown) = ^CallSideEffect : ~m1374_11 -# 1376| m1376_5(unknown) = Chi : total:m1374_11, partial:m1376_4 +# 1376| r1376_2(glval) = FunctionAddress[returnValue] : +# 1376| r1376_3(String) = Call[returnValue] : func:r1376_2 +# 1376| m1376_4(unknown) = ^CallSideEffect : ~m1375_13 +# 1376| m1376_5(unknown) = Chi : total:m1375_13, partial:m1376_4 # 1376| m1376_6(String) = Store[#temp1376:5] : &:r1376_1, r1376_3 -# 1377| v1377_1(void) = NoOp : -# 1365| v1365_5(void) = ReturnVoid : -# 1365| v1365_6(void) = AliasedUse : ~m1376_5 -# 1365| v1365_7(void) = ExitFunction : +# 1376| r1376_7(glval) = Convert : r1376_1 +# 1376| r1376_8(glval) = FunctionAddress[c_str] : +# 1376| r1376_9(char *) = Call[c_str] : func:r1376_8, this:r1376_7 +# 1376| m1376_10(unknown) = ^CallSideEffect : ~m1376_5 +# 1376| m1376_11(unknown) = Chi : total:m1376_5, partial:m1376_10 +# 1376| v1376_12(void) = ^IndirectReadSideEffect[-1] : &:r1376_7, m1376_6 +# 1378| r1378_1(glval) = VariableAddress[#temp1378:5] : +# 1378| r1378_2(glval) = FunctionAddress[defaultConstruct] : +# 1378| r1378_3(String) = Call[defaultConstruct] : func:r1378_2 +# 1378| m1378_4(unknown) = ^CallSideEffect : ~m1376_11 +# 1378| m1378_5(unknown) = Chi : total:m1376_11, partial:m1378_4 +# 1378| m1378_6(String) = Store[#temp1378:5] : &:r1378_1, r1378_3 +# 1379| v1379_1(void) = NoOp : +# 1367| v1367_5(void) = ReturnVoid : +# 1367| v1367_6(void) = AliasedUse : ~m1378_5 +# 1367| v1367_7(void) = ExitFunction : -# 1379| void temporary_destructor_only() -# 1379| Block 0 -# 1379| v1379_1(void) = EnterFunction : -# 1379| m1379_2(unknown) = AliasedDefinition : -# 1379| m1379_3(unknown) = InitializeNonLocal : -# 1379| m1379_4(unknown) = Chi : total:m1379_2, partial:m1379_3 -# 1380| r1380_1(glval) = VariableAddress[d] : -# 1380| r1380_2(glval) = FunctionAddress[returnValue] : -# 1380| r1380_3(destructor_only) = Call[returnValue] : func:r1380_2 -# 1380| m1380_4(unknown) = ^CallSideEffect : ~m1379_4 -# 1380| m1380_5(unknown) = Chi : total:m1379_4, partial:m1380_4 -# 1380| m1380_6(destructor_only) = Store[d] : &:r1380_1, r1380_3 -# 1381| r1381_1(glval) = VariableAddress[rd] : -# 1381| r1381_2(glval) = VariableAddress[#temp1381:33] : -# 1381| r1381_3(glval) = FunctionAddress[returnValue] : -# 1381| r1381_4(destructor_only) = Call[returnValue] : func:r1381_3 -# 1381| m1381_5(unknown) = ^CallSideEffect : ~m1380_5 -# 1381| m1381_6(unknown) = Chi : total:m1380_5, partial:m1381_5 -# 1381| m1381_7(destructor_only) = Store[#temp1381:33] : &:r1381_2, r1381_4 -# 1381| r1381_8(glval) = Convert : r1381_2 -# 1381| r1381_9(destructor_only &) = CopyValue : r1381_8 -# 1381| m1381_10(destructor_only &) = Store[rd] : &:r1381_1, r1381_9 -# 1382| r1382_1(glval) = VariableAddress[d2] : -# 1382| m1382_2(destructor_only) = Uninitialized[d2] : &:r1382_1 -# 1383| r1383_1(glval) = FunctionAddress[acceptRef] : -# 1383| r1383_2(glval) = VariableAddress[d] : -# 1383| r1383_3(glval) = Convert : r1383_2 -# 1383| r1383_4(destructor_only &) = CopyValue : r1383_3 -# 1383| v1383_5(void) = Call[acceptRef] : func:r1383_1, 0:r1383_4 -# 1383| m1383_6(unknown) = ^CallSideEffect : ~m1381_6 -# 1383| m1383_7(unknown) = Chi : total:m1381_6, partial:m1383_6 -# 1383| v1383_8(void) = ^BufferReadSideEffect[0] : &:r1383_4, ~m1380_6 -# 1384| r1384_1(glval) = FunctionAddress[acceptValue] : -# 1384| r1384_2(glval) = VariableAddress[#temp1384:17] : -# 1384| r1384_3(glval) = VariableAddress[d] : -# 1384| r1384_4(destructor_only) = Load[d] : &:r1384_3, m1380_6 -# 1384| m1384_5(destructor_only) = Store[#temp1384:17] : &:r1384_2, r1384_4 -# 1384| r1384_6(destructor_only) = Load[#temp1384:17] : &:r1384_2, m1384_5 -# 1384| v1384_7(void) = Call[acceptValue] : func:r1384_1, 0:r1384_6 -# 1384| m1384_8(unknown) = ^CallSideEffect : ~m1383_7 -# 1384| m1384_9(unknown) = Chi : total:m1383_7, partial:m1384_8 -# 1385| r1385_1(glval) = VariableAddress[#temp1385:5] : -# 1385| r1385_2(destructor_only) = Constant[0] : -# 1385| m1385_3(destructor_only) = Store[#temp1385:5] : &:r1385_1, r1385_2 -# 1385| r1385_4(glval) = FunctionAddress[method] : -# 1385| v1385_5(void) = Call[method] : func:r1385_4, this:r1385_1 -# 1385| m1385_6(unknown) = ^CallSideEffect : ~m1384_9 -# 1385| m1385_7(unknown) = Chi : total:m1384_9, partial:m1385_6 -# 1385| v1385_8(void) = ^IndirectReadSideEffect[-1] : &:r1385_1, m1385_3 -# 1385| m1385_9(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1385_1 -# 1385| m1385_10(destructor_only) = Chi : total:m1385_3, partial:m1385_9 -# 1386| r1386_1(glval) = VariableAddress[#temp1386:5] : -# 1386| r1386_2(glval) = FunctionAddress[returnValue] : -# 1386| r1386_3(destructor_only) = Call[returnValue] : func:r1386_2 -# 1386| m1386_4(unknown) = ^CallSideEffect : ~m1385_7 -# 1386| m1386_5(unknown) = Chi : total:m1385_7, partial:m1386_4 -# 1386| m1386_6(destructor_only) = Store[#temp1386:5] : &:r1386_1, r1386_3 -# 1386| r1386_7(glval) = FunctionAddress[method] : -# 1386| v1386_8(void) = Call[method] : func:r1386_7, this:r1386_1 -# 1386| m1386_9(unknown) = ^CallSideEffect : ~m1386_5 -# 1386| m1386_10(unknown) = Chi : total:m1386_5, partial:m1386_9 -# 1386| v1386_11(void) = ^IndirectReadSideEffect[-1] : &:r1386_1, m1386_6 -# 1386| m1386_12(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1386_1 -# 1386| m1386_13(destructor_only) = Chi : total:m1386_6, partial:m1386_12 +# 1381| void temporary_destructor_only() +# 1381| Block 0 +# 1381| v1381_1(void) = EnterFunction : +# 1381| m1381_2(unknown) = AliasedDefinition : +# 1381| m1381_3(unknown) = InitializeNonLocal : +# 1381| m1381_4(unknown) = Chi : total:m1381_2, partial:m1381_3 +# 1382| r1382_1(glval) = VariableAddress[d] : +# 1382| r1382_2(glval) = FunctionAddress[returnValue] : +# 1382| r1382_3(destructor_only) = Call[returnValue] : func:r1382_2 +# 1382| m1382_4(unknown) = ^CallSideEffect : ~m1381_4 +# 1382| m1382_5(unknown) = Chi : total:m1381_4, partial:m1382_4 +# 1382| m1382_6(destructor_only) = Store[d] : &:r1382_1, r1382_3 +# 1383| r1383_1(glval) = VariableAddress[rd] : +# 1383| r1383_2(glval) = VariableAddress[#temp1383:33] : +# 1383| r1383_3(glval) = FunctionAddress[returnValue] : +# 1383| r1383_4(destructor_only) = Call[returnValue] : func:r1383_3 +# 1383| m1383_5(unknown) = ^CallSideEffect : ~m1382_5 +# 1383| m1383_6(unknown) = Chi : total:m1382_5, partial:m1383_5 +# 1383| m1383_7(destructor_only) = Store[#temp1383:33] : &:r1383_2, r1383_4 +# 1383| r1383_8(glval) = Convert : r1383_2 +# 1383| r1383_9(destructor_only &) = CopyValue : r1383_8 +# 1383| m1383_10(destructor_only &) = Store[rd] : &:r1383_1, r1383_9 +# 1384| r1384_1(glval) = VariableAddress[d2] : +# 1384| m1384_2(destructor_only) = Uninitialized[d2] : &:r1384_1 +# 1385| r1385_1(glval) = FunctionAddress[acceptRef] : +# 1385| r1385_2(glval) = VariableAddress[d] : +# 1385| r1385_3(glval) = Convert : r1385_2 +# 1385| r1385_4(destructor_only &) = CopyValue : r1385_3 +# 1385| v1385_5(void) = Call[acceptRef] : func:r1385_1, 0:r1385_4 +# 1385| m1385_6(unknown) = ^CallSideEffect : ~m1383_6 +# 1385| m1385_7(unknown) = Chi : total:m1383_6, partial:m1385_6 +# 1385| v1385_8(void) = ^BufferReadSideEffect[0] : &:r1385_4, ~m1382_6 +# 1386| r1386_1(glval) = FunctionAddress[acceptValue] : +# 1386| r1386_2(glval) = VariableAddress[#temp1386:17] : +# 1386| r1386_3(glval) = VariableAddress[d] : +# 1386| r1386_4(destructor_only) = Load[d] : &:r1386_3, m1382_6 +# 1386| m1386_5(destructor_only) = Store[#temp1386:17] : &:r1386_2, r1386_4 +# 1386| r1386_6(destructor_only) = Load[#temp1386:17] : &:r1386_2, m1386_5 +# 1386| v1386_7(void) = Call[acceptValue] : func:r1386_1, 0:r1386_6 +# 1386| m1386_8(unknown) = ^CallSideEffect : ~m1385_7 +# 1386| m1386_9(unknown) = Chi : total:m1385_7, partial:m1386_8 +# 1387| r1387_1(glval) = VariableAddress[#temp1387:5] : +# 1387| r1387_2(destructor_only) = Constant[0] : +# 1387| m1387_3(destructor_only) = Store[#temp1387:5] : &:r1387_1, r1387_2 +# 1387| r1387_4(glval) = FunctionAddress[method] : +# 1387| v1387_5(void) = Call[method] : func:r1387_4, this:r1387_1 +# 1387| m1387_6(unknown) = ^CallSideEffect : ~m1386_9 +# 1387| m1387_7(unknown) = Chi : total:m1386_9, partial:m1387_6 +# 1387| v1387_8(void) = ^IndirectReadSideEffect[-1] : &:r1387_1, m1387_3 +# 1387| m1387_9(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1387_1 +# 1387| m1387_10(destructor_only) = Chi : total:m1387_3, partial:m1387_9 # 1388| r1388_1(glval) = VariableAddress[#temp1388:5] : -# 1388| r1388_2(glval) = FunctionAddress[defaultConstruct] : -# 1388| r1388_3(destructor_only) = Call[defaultConstruct] : func:r1388_2 -# 1388| m1388_4(unknown) = ^CallSideEffect : ~m1386_10 -# 1388| m1388_5(unknown) = Chi : total:m1386_10, partial:m1388_4 +# 1388| r1388_2(glval) = FunctionAddress[returnValue] : +# 1388| r1388_3(destructor_only) = Call[returnValue] : func:r1388_2 +# 1388| m1388_4(unknown) = ^CallSideEffect : ~m1387_7 +# 1388| m1388_5(unknown) = Chi : total:m1387_7, partial:m1388_4 # 1388| m1388_6(destructor_only) = Store[#temp1388:5] : &:r1388_1, r1388_3 -# 1389| v1389_1(void) = NoOp : -# 1379| v1379_5(void) = ReturnVoid : -# 1379| v1379_6(void) = AliasedUse : ~m1388_5 -# 1379| v1379_7(void) = ExitFunction : +# 1388| r1388_7(glval) = FunctionAddress[method] : +# 1388| v1388_8(void) = Call[method] : func:r1388_7, this:r1388_1 +# 1388| m1388_9(unknown) = ^CallSideEffect : ~m1388_5 +# 1388| m1388_10(unknown) = Chi : total:m1388_5, partial:m1388_9 +# 1388| v1388_11(void) = ^IndirectReadSideEffect[-1] : &:r1388_1, m1388_6 +# 1388| m1388_12(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1388_1 +# 1388| m1388_13(destructor_only) = Chi : total:m1388_6, partial:m1388_12 +# 1390| r1390_1(glval) = VariableAddress[#temp1390:5] : +# 1390| r1390_2(glval) = FunctionAddress[defaultConstruct] : +# 1390| r1390_3(destructor_only) = Call[defaultConstruct] : func:r1390_2 +# 1390| m1390_4(unknown) = ^CallSideEffect : ~m1388_10 +# 1390| m1390_5(unknown) = Chi : total:m1388_10, partial:m1390_4 +# 1390| m1390_6(destructor_only) = Store[#temp1390:5] : &:r1390_1, r1390_3 +# 1391| v1391_1(void) = NoOp : +# 1381| v1381_5(void) = ReturnVoid : +# 1381| v1381_6(void) = AliasedUse : ~m1390_5 +# 1381| v1381_7(void) = ExitFunction : -# 1391| void temporary_copy_constructor() -# 1391| Block 0 -# 1391| v1391_1(void) = EnterFunction : -# 1391| m1391_2(unknown) = AliasedDefinition : -# 1391| m1391_3(unknown) = InitializeNonLocal : -# 1391| m1391_4(unknown) = Chi : total:m1391_2, partial:m1391_3 -# 1392| r1392_1(glval) = VariableAddress[d] : -# 1392| r1392_2(glval) = FunctionAddress[returnValue] : -# 1392| r1392_3(copy_constructor) = Call[returnValue] : func:r1392_2 -# 1392| m1392_4(unknown) = ^CallSideEffect : ~m1391_4 -# 1392| m1392_5(unknown) = Chi : total:m1391_4, partial:m1392_4 -# 1392| m1392_6(copy_constructor) = Store[d] : &:r1392_1, r1392_3 -# 1393| r1393_1(glval) = VariableAddress[rd] : -# 1393| r1393_2(glval) = VariableAddress[#temp1393:34] : -# 1393| r1393_3(glval) = FunctionAddress[returnValue] : -# 1393| r1393_4(copy_constructor) = Call[returnValue] : func:r1393_3 -# 1393| m1393_5(unknown) = ^CallSideEffect : ~m1392_5 -# 1393| m1393_6(unknown) = Chi : total:m1392_5, partial:m1393_5 -# 1393| m1393_7(copy_constructor) = Store[#temp1393:34] : &:r1393_2, r1393_4 -# 1393| r1393_8(glval) = Convert : r1393_2 -# 1393| r1393_9(copy_constructor &) = CopyValue : r1393_8 -# 1393| m1393_10(copy_constructor &) = Store[rd] : &:r1393_1, r1393_9 -# 1394| r1394_1(glval) = VariableAddress[d2] : -# 1394| m1394_2(copy_constructor) = Uninitialized[d2] : &:r1394_1 -# 1394| r1394_3(glval) = FunctionAddress[copy_constructor] : -# 1394| v1394_4(void) = Call[copy_constructor] : func:r1394_3, this:r1394_1 -# 1394| m1394_5(unknown) = ^CallSideEffect : ~m1393_6 -# 1394| m1394_6(unknown) = Chi : total:m1393_6, partial:m1394_5 -# 1394| m1394_7(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1394_1 -# 1394| m1394_8(copy_constructor) = Chi : total:m1394_2, partial:m1394_7 -# 1395| r1395_1(glval) = FunctionAddress[acceptRef] : -# 1395| r1395_2(glval) = VariableAddress[d] : -# 1395| r1395_3(glval) = Convert : r1395_2 -# 1395| r1395_4(copy_constructor &) = CopyValue : r1395_3 -# 1395| v1395_5(void) = Call[acceptRef] : func:r1395_1, 0:r1395_4 -# 1395| m1395_6(unknown) = ^CallSideEffect : ~m1394_6 -# 1395| m1395_7(unknown) = Chi : total:m1394_6, partial:m1395_6 -# 1395| v1395_8(void) = ^BufferReadSideEffect[0] : &:r1395_4, ~m1392_6 -# 1396| r1396_1(glval) = FunctionAddress[acceptValue] : -# 1396| r1396_2(glval) = VariableAddress[#temp1396:17] : -# 1396| m1396_3(copy_constructor) = Uninitialized[#temp1396:17] : &:r1396_2 -# 1396| r1396_4(glval) = FunctionAddress[copy_constructor] : -# 1396| r1396_5(glval) = VariableAddress[d] : -# 1396| r1396_6(glval) = Convert : r1396_5 -# 1396| r1396_7(copy_constructor &) = CopyValue : r1396_6 -# 1396| v1396_8(void) = Call[copy_constructor] : func:r1396_4, this:r1396_2, 0:r1396_7 -# 1396| m1396_9(unknown) = ^CallSideEffect : ~m1395_7 -# 1396| m1396_10(unknown) = Chi : total:m1395_7, partial:m1396_9 -# 1396| v1396_11(void) = ^BufferReadSideEffect[0] : &:r1396_7, ~m1392_6 -# 1396| m1396_12(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1396_2 -# 1396| m1396_13(copy_constructor) = Chi : total:m1396_3, partial:m1396_12 -# 1396| r1396_14(copy_constructor) = Load[#temp1396:17] : &:r1396_2, m1396_13 -# 1396| v1396_15(void) = Call[acceptValue] : func:r1396_1, 0:r1396_14 -# 1396| m1396_16(unknown) = ^CallSideEffect : ~m1396_10 -# 1396| m1396_17(unknown) = Chi : total:m1396_10, partial:m1396_16 -# 1397| r1397_1(glval) = VariableAddress[#temp1397:5] : -# 1397| m1397_2(copy_constructor) = Uninitialized[#temp1397:5] : &:r1397_1 -# 1397| r1397_3(glval) = FunctionAddress[copy_constructor] : -# 1397| v1397_4(void) = Call[copy_constructor] : func:r1397_3, this:r1397_1 -# 1397| m1397_5(unknown) = ^CallSideEffect : ~m1396_17 -# 1397| m1397_6(unknown) = Chi : total:m1396_17, partial:m1397_5 -# 1397| m1397_7(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1397_1 -# 1397| m1397_8(copy_constructor) = Chi : total:m1397_2, partial:m1397_7 -# 1397| r1397_9(glval) = FunctionAddress[method] : -# 1397| v1397_10(void) = Call[method] : func:r1397_9, this:r1397_1 -# 1397| m1397_11(unknown) = ^CallSideEffect : ~m1397_6 -# 1397| m1397_12(unknown) = Chi : total:m1397_6, partial:m1397_11 -# 1397| v1397_13(void) = ^IndirectReadSideEffect[-1] : &:r1397_1, m1397_8 -# 1397| m1397_14(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1397_1 -# 1397| m1397_15(copy_constructor) = Chi : total:m1397_8, partial:m1397_14 -# 1398| r1398_1(glval) = VariableAddress[#temp1398:5] : -# 1398| r1398_2(glval) = FunctionAddress[returnValue] : -# 1398| r1398_3(copy_constructor) = Call[returnValue] : func:r1398_2 -# 1398| m1398_4(unknown) = ^CallSideEffect : ~m1397_12 -# 1398| m1398_5(unknown) = Chi : total:m1397_12, partial:m1398_4 -# 1398| m1398_6(copy_constructor) = Store[#temp1398:5] : &:r1398_1, r1398_3 -# 1398| r1398_7(glval) = FunctionAddress[method] : -# 1398| v1398_8(void) = Call[method] : func:r1398_7, this:r1398_1 -# 1398| m1398_9(unknown) = ^CallSideEffect : ~m1398_5 -# 1398| m1398_10(unknown) = Chi : total:m1398_5, partial:m1398_9 -# 1398| v1398_11(void) = ^IndirectReadSideEffect[-1] : &:r1398_1, m1398_6 -# 1398| m1398_12(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1398_1 -# 1398| m1398_13(copy_constructor) = Chi : total:m1398_6, partial:m1398_12 +# 1393| void temporary_copy_constructor() +# 1393| Block 0 +# 1393| v1393_1(void) = EnterFunction : +# 1393| m1393_2(unknown) = AliasedDefinition : +# 1393| m1393_3(unknown) = InitializeNonLocal : +# 1393| m1393_4(unknown) = Chi : total:m1393_2, partial:m1393_3 +# 1394| r1394_1(glval) = VariableAddress[d] : +# 1394| r1394_2(glval) = FunctionAddress[returnValue] : +# 1394| r1394_3(copy_constructor) = Call[returnValue] : func:r1394_2 +# 1394| m1394_4(unknown) = ^CallSideEffect : ~m1393_4 +# 1394| m1394_5(unknown) = Chi : total:m1393_4, partial:m1394_4 +# 1394| m1394_6(copy_constructor) = Store[d] : &:r1394_1, r1394_3 +# 1395| r1395_1(glval) = VariableAddress[rd] : +# 1395| r1395_2(glval) = VariableAddress[#temp1395:34] : +# 1395| r1395_3(glval) = FunctionAddress[returnValue] : +# 1395| r1395_4(copy_constructor) = Call[returnValue] : func:r1395_3 +# 1395| m1395_5(unknown) = ^CallSideEffect : ~m1394_5 +# 1395| m1395_6(unknown) = Chi : total:m1394_5, partial:m1395_5 +# 1395| m1395_7(copy_constructor) = Store[#temp1395:34] : &:r1395_2, r1395_4 +# 1395| r1395_8(glval) = Convert : r1395_2 +# 1395| r1395_9(copy_constructor &) = CopyValue : r1395_8 +# 1395| m1395_10(copy_constructor &) = Store[rd] : &:r1395_1, r1395_9 +# 1396| r1396_1(glval) = VariableAddress[d2] : +# 1396| m1396_2(copy_constructor) = Uninitialized[d2] : &:r1396_1 +# 1396| r1396_3(glval) = FunctionAddress[copy_constructor] : +# 1396| v1396_4(void) = Call[copy_constructor] : func:r1396_3, this:r1396_1 +# 1396| m1396_5(unknown) = ^CallSideEffect : ~m1395_6 +# 1396| m1396_6(unknown) = Chi : total:m1395_6, partial:m1396_5 +# 1396| m1396_7(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1396_1 +# 1396| m1396_8(copy_constructor) = Chi : total:m1396_2, partial:m1396_7 +# 1397| r1397_1(glval) = FunctionAddress[acceptRef] : +# 1397| r1397_2(glval) = VariableAddress[d] : +# 1397| r1397_3(glval) = Convert : r1397_2 +# 1397| r1397_4(copy_constructor &) = CopyValue : r1397_3 +# 1397| v1397_5(void) = Call[acceptRef] : func:r1397_1, 0:r1397_4 +# 1397| m1397_6(unknown) = ^CallSideEffect : ~m1396_6 +# 1397| m1397_7(unknown) = Chi : total:m1396_6, partial:m1397_6 +# 1397| v1397_8(void) = ^BufferReadSideEffect[0] : &:r1397_4, ~m1394_6 +# 1398| r1398_1(glval) = FunctionAddress[acceptValue] : +# 1398| r1398_2(glval) = VariableAddress[#temp1398:17] : +# 1398| m1398_3(copy_constructor) = Uninitialized[#temp1398:17] : &:r1398_2 +# 1398| r1398_4(glval) = FunctionAddress[copy_constructor] : +# 1398| r1398_5(glval) = VariableAddress[d] : +# 1398| r1398_6(glval) = Convert : r1398_5 +# 1398| r1398_7(copy_constructor &) = CopyValue : r1398_6 +# 1398| v1398_8(void) = Call[copy_constructor] : func:r1398_4, this:r1398_2, 0:r1398_7 +# 1398| m1398_9(unknown) = ^CallSideEffect : ~m1397_7 +# 1398| m1398_10(unknown) = Chi : total:m1397_7, partial:m1398_9 +# 1398| v1398_11(void) = ^BufferReadSideEffect[0] : &:r1398_7, ~m1394_6 +# 1398| m1398_12(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1398_2 +# 1398| m1398_13(copy_constructor) = Chi : total:m1398_3, partial:m1398_12 +# 1398| r1398_14(copy_constructor) = Load[#temp1398:17] : &:r1398_2, m1398_13 +# 1398| v1398_15(void) = Call[acceptValue] : func:r1398_1, 0:r1398_14 +# 1398| m1398_16(unknown) = ^CallSideEffect : ~m1398_10 +# 1398| m1398_17(unknown) = Chi : total:m1398_10, partial:m1398_16 # 1399| r1399_1(glval) = VariableAddress[#temp1399:5] : -# 1399| r1399_2(glval) = FunctionAddress[defaultConstruct] : -# 1399| r1399_3(copy_constructor) = Call[defaultConstruct] : func:r1399_2 -# 1399| m1399_4(unknown) = ^CallSideEffect : ~m1398_10 -# 1399| m1399_5(unknown) = Chi : total:m1398_10, partial:m1399_4 -# 1399| m1399_6(copy_constructor) = Store[#temp1399:5] : &:r1399_1, r1399_3 -# 1401| r1401_1(glval) = VariableAddress[y] : -# 1401| r1401_2(glval) = VariableAddress[#temp1401:13] : -# 1401| r1401_3(glval) = FunctionAddress[returnValue] : -# 1401| r1401_4(copy_constructor) = Call[returnValue] : func:r1401_3 -# 1401| m1401_5(unknown) = ^CallSideEffect : ~m1399_5 -# 1401| m1401_6(unknown) = Chi : total:m1399_5, partial:m1401_5 -# 1401| m1401_7(copy_constructor) = Store[#temp1401:13] : &:r1401_2, r1401_4 -# 1401| r1401_8(glval) = FieldAddress[y] : r1401_2 -# 1401| r1401_9(int) = Load[?] : &:r1401_8, ~m1401_7 -# 1401| m1401_10(int) = Store[y] : &:r1401_1, r1401_9 -# 1402| v1402_1(void) = NoOp : -# 1391| v1391_5(void) = ReturnVoid : -# 1391| v1391_6(void) = AliasedUse : ~m1401_6 -# 1391| v1391_7(void) = ExitFunction : +# 1399| m1399_2(copy_constructor) = Uninitialized[#temp1399:5] : &:r1399_1 +# 1399| r1399_3(glval) = FunctionAddress[copy_constructor] : +# 1399| v1399_4(void) = Call[copy_constructor] : func:r1399_3, this:r1399_1 +# 1399| m1399_5(unknown) = ^CallSideEffect : ~m1398_17 +# 1399| m1399_6(unknown) = Chi : total:m1398_17, partial:m1399_5 +# 1399| m1399_7(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1399_1 +# 1399| m1399_8(copy_constructor) = Chi : total:m1399_2, partial:m1399_7 +# 1399| r1399_9(glval) = FunctionAddress[method] : +# 1399| v1399_10(void) = Call[method] : func:r1399_9, this:r1399_1 +# 1399| m1399_11(unknown) = ^CallSideEffect : ~m1399_6 +# 1399| m1399_12(unknown) = Chi : total:m1399_6, partial:m1399_11 +# 1399| v1399_13(void) = ^IndirectReadSideEffect[-1] : &:r1399_1, m1399_8 +# 1399| m1399_14(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1399_1 +# 1399| m1399_15(copy_constructor) = Chi : total:m1399_8, partial:m1399_14 +# 1400| r1400_1(glval) = VariableAddress[#temp1400:5] : +# 1400| r1400_2(glval) = FunctionAddress[returnValue] : +# 1400| r1400_3(copy_constructor) = Call[returnValue] : func:r1400_2 +# 1400| m1400_4(unknown) = ^CallSideEffect : ~m1399_12 +# 1400| m1400_5(unknown) = Chi : total:m1399_12, partial:m1400_4 +# 1400| m1400_6(copy_constructor) = Store[#temp1400:5] : &:r1400_1, r1400_3 +# 1400| r1400_7(glval) = FunctionAddress[method] : +# 1400| v1400_8(void) = Call[method] : func:r1400_7, this:r1400_1 +# 1400| m1400_9(unknown) = ^CallSideEffect : ~m1400_5 +# 1400| m1400_10(unknown) = Chi : total:m1400_5, partial:m1400_9 +# 1400| v1400_11(void) = ^IndirectReadSideEffect[-1] : &:r1400_1, m1400_6 +# 1400| m1400_12(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1400_1 +# 1400| m1400_13(copy_constructor) = Chi : total:m1400_6, partial:m1400_12 +# 1401| r1401_1(glval) = VariableAddress[#temp1401:5] : +# 1401| r1401_2(glval) = FunctionAddress[defaultConstruct] : +# 1401| r1401_3(copy_constructor) = Call[defaultConstruct] : func:r1401_2 +# 1401| m1401_4(unknown) = ^CallSideEffect : ~m1400_10 +# 1401| m1401_5(unknown) = Chi : total:m1400_10, partial:m1401_4 +# 1401| m1401_6(copy_constructor) = Store[#temp1401:5] : &:r1401_1, r1401_3 +# 1403| r1403_1(glval) = VariableAddress[y] : +# 1403| r1403_2(glval) = VariableAddress[#temp1403:13] : +# 1403| r1403_3(glval) = FunctionAddress[returnValue] : +# 1403| r1403_4(copy_constructor) = Call[returnValue] : func:r1403_3 +# 1403| m1403_5(unknown) = ^CallSideEffect : ~m1401_5 +# 1403| m1403_6(unknown) = Chi : total:m1401_5, partial:m1403_5 +# 1403| m1403_7(copy_constructor) = Store[#temp1403:13] : &:r1403_2, r1403_4 +# 1403| r1403_8(glval) = FieldAddress[y] : r1403_2 +# 1403| r1403_9(int) = Load[?] : &:r1403_8, ~m1403_7 +# 1403| m1403_10(int) = Store[y] : &:r1403_1, r1403_9 +# 1404| v1404_1(void) = NoOp : +# 1393| v1393_5(void) = ReturnVoid : +# 1393| v1393_6(void) = AliasedUse : ~m1403_6 +# 1393| v1393_7(void) = ExitFunction : -# 1404| void temporary_point() -# 1404| Block 0 -# 1404| v1404_1(void) = EnterFunction : -# 1404| m1404_2(unknown) = AliasedDefinition : -# 1404| m1404_3(unknown) = InitializeNonLocal : -# 1404| m1404_4(unknown) = Chi : total:m1404_2, partial:m1404_3 -# 1405| r1405_1(glval) = VariableAddress[p] : -# 1405| r1405_2(glval) = FunctionAddress[returnValue] : -# 1405| r1405_3(Point) = Call[returnValue] : func:r1405_2 -# 1405| m1405_4(unknown) = ^CallSideEffect : ~m1404_4 -# 1405| m1405_5(unknown) = Chi : total:m1404_4, partial:m1405_4 -# 1405| m1405_6(Point) = Store[p] : &:r1405_1, r1405_3 -# 1406| r1406_1(glval) = VariableAddress[rp] : -# 1406| r1406_2(glval) = VariableAddress[#temp1406:23] : -# 1406| r1406_3(glval) = FunctionAddress[returnValue] : -# 1406| r1406_4(Point) = Call[returnValue] : func:r1406_3 -# 1406| m1406_5(unknown) = ^CallSideEffect : ~m1405_5 -# 1406| m1406_6(unknown) = Chi : total:m1405_5, partial:m1406_5 -# 1406| m1406_7(Point) = Store[#temp1406:23] : &:r1406_2, r1406_4 -# 1406| r1406_8(glval) = Convert : r1406_2 -# 1406| r1406_9(Point &) = CopyValue : r1406_8 -# 1406| m1406_10(Point &) = Store[rp] : &:r1406_1, r1406_9 -# 1408| r1408_1(glval) = FunctionAddress[acceptRef] : -# 1408| r1408_2(glval) = VariableAddress[p] : -# 1408| r1408_3(glval) = Convert : r1408_2 -# 1408| r1408_4(Point &) = CopyValue : r1408_3 -# 1408| v1408_5(void) = Call[acceptRef] : func:r1408_1, 0:r1408_4 -# 1408| m1408_6(unknown) = ^CallSideEffect : ~m1406_6 -# 1408| m1408_7(unknown) = Chi : total:m1406_6, partial:m1408_6 -# 1408| v1408_8(void) = ^BufferReadSideEffect[0] : &:r1408_4, ~m1405_6 -# 1409| r1409_1(glval) = FunctionAddress[acceptValue] : -# 1409| r1409_2(glval) = VariableAddress[p] : -# 1409| r1409_3(Point) = Load[p] : &:r1409_2, m1405_6 -# 1409| v1409_4(void) = Call[acceptValue] : func:r1409_1, 0:r1409_3 -# 1409| m1409_5(unknown) = ^CallSideEffect : ~m1408_7 -# 1409| m1409_6(unknown) = Chi : total:m1408_7, partial:m1409_5 -# 1410| r1410_1(int) = Constant[0] : -# 1411| r1411_1(glval) = VariableAddress[y] : -# 1411| r1411_2(glval) = FunctionAddress[returnValue] : -# 1411| r1411_3(Point) = Call[returnValue] : func:r1411_2 -# 1411| m1411_4(unknown) = ^CallSideEffect : ~m1409_6 -# 1411| m1411_5(unknown) = Chi : total:m1409_6, partial:m1411_4 -# 1411| r1411_6(glval) = VariableAddress[#temp1411:13] : -# 1411| m1411_7(Point) = Store[#temp1411:13] : &:r1411_6, r1411_3 -# 1411| r1411_8(glval) = FieldAddress[y] : r1411_6 -# 1411| r1411_9(int) = Load[?] : &:r1411_8, ~m1411_7 -# 1411| m1411_10(int) = Store[y] : &:r1411_1, r1411_9 -# 1413| r1413_1(glval) = FunctionAddress[defaultConstruct] : -# 1413| r1413_2(Point) = Call[defaultConstruct] : func:r1413_1 -# 1413| m1413_3(unknown) = ^CallSideEffect : ~m1411_5 -# 1413| m1413_4(unknown) = Chi : total:m1411_5, partial:m1413_3 -# 1414| v1414_1(void) = NoOp : -# 1404| v1404_5(void) = ReturnVoid : -# 1404| v1404_6(void) = AliasedUse : ~m1413_4 -# 1404| v1404_7(void) = ExitFunction : +# 1406| void temporary_point() +# 1406| Block 0 +# 1406| v1406_1(void) = EnterFunction : +# 1406| m1406_2(unknown) = AliasedDefinition : +# 1406| m1406_3(unknown) = InitializeNonLocal : +# 1406| m1406_4(unknown) = Chi : total:m1406_2, partial:m1406_3 +# 1407| r1407_1(glval) = VariableAddress[p] : +# 1407| r1407_2(glval) = FunctionAddress[returnValue] : +# 1407| r1407_3(Point) = Call[returnValue] : func:r1407_2 +# 1407| m1407_4(unknown) = ^CallSideEffect : ~m1406_4 +# 1407| m1407_5(unknown) = Chi : total:m1406_4, partial:m1407_4 +# 1407| m1407_6(Point) = Store[p] : &:r1407_1, r1407_3 +# 1408| r1408_1(glval) = VariableAddress[rp] : +# 1408| r1408_2(glval) = VariableAddress[#temp1408:23] : +# 1408| r1408_3(glval) = FunctionAddress[returnValue] : +# 1408| r1408_4(Point) = Call[returnValue] : func:r1408_3 +# 1408| m1408_5(unknown) = ^CallSideEffect : ~m1407_5 +# 1408| m1408_6(unknown) = Chi : total:m1407_5, partial:m1408_5 +# 1408| m1408_7(Point) = Store[#temp1408:23] : &:r1408_2, r1408_4 +# 1408| r1408_8(glval) = Convert : r1408_2 +# 1408| r1408_9(Point &) = CopyValue : r1408_8 +# 1408| m1408_10(Point &) = Store[rp] : &:r1408_1, r1408_9 +# 1410| r1410_1(glval) = FunctionAddress[acceptRef] : +# 1410| r1410_2(glval) = VariableAddress[p] : +# 1410| r1410_3(glval) = Convert : r1410_2 +# 1410| r1410_4(Point &) = CopyValue : r1410_3 +# 1410| v1410_5(void) = Call[acceptRef] : func:r1410_1, 0:r1410_4 +# 1410| m1410_6(unknown) = ^CallSideEffect : ~m1408_6 +# 1410| m1410_7(unknown) = Chi : total:m1408_6, partial:m1410_6 +# 1410| v1410_8(void) = ^BufferReadSideEffect[0] : &:r1410_4, ~m1407_6 +# 1411| r1411_1(glval) = FunctionAddress[acceptValue] : +# 1411| r1411_2(glval) = VariableAddress[p] : +# 1411| r1411_3(Point) = Load[p] : &:r1411_2, m1407_6 +# 1411| v1411_4(void) = Call[acceptValue] : func:r1411_1, 0:r1411_3 +# 1411| m1411_5(unknown) = ^CallSideEffect : ~m1410_7 +# 1411| m1411_6(unknown) = Chi : total:m1410_7, partial:m1411_5 +# 1412| r1412_1(int) = Constant[0] : +# 1413| r1413_1(glval) = VariableAddress[y] : +# 1413| r1413_2(glval) = FunctionAddress[returnValue] : +# 1413| r1413_3(Point) = Call[returnValue] : func:r1413_2 +# 1413| m1413_4(unknown) = ^CallSideEffect : ~m1411_6 +# 1413| m1413_5(unknown) = Chi : total:m1411_6, partial:m1413_4 +# 1413| r1413_6(glval) = VariableAddress[#temp1413:13] : +# 1413| m1413_7(Point) = Store[#temp1413:13] : &:r1413_6, r1413_3 +# 1413| r1413_8(glval) = FieldAddress[y] : r1413_6 +# 1413| r1413_9(int) = Load[?] : &:r1413_8, ~m1413_7 +# 1413| m1413_10(int) = Store[y] : &:r1413_1, r1413_9 +# 1415| r1415_1(glval) = FunctionAddress[defaultConstruct] : +# 1415| r1415_2(Point) = Call[defaultConstruct] : func:r1415_1 +# 1415| m1415_3(unknown) = ^CallSideEffect : ~m1413_5 +# 1415| m1415_4(unknown) = Chi : total:m1413_5, partial:m1415_3 +# 1416| v1416_1(void) = NoOp : +# 1406| v1406_5(void) = ReturnVoid : +# 1406| v1406_6(void) = AliasedUse : ~m1415_4 +# 1406| v1406_7(void) = ExitFunction : -# 1421| void temporary_unusual_fields() -# 1421| Block 0 -# 1421| v1421_1(void) = EnterFunction : -# 1421| m1421_2(unknown) = AliasedDefinition : -# 1421| m1421_3(unknown) = InitializeNonLocal : -# 1421| m1421_4(unknown) = Chi : total:m1421_2, partial:m1421_3 -# 1422| r1422_1(glval) = VariableAddress[rx] : -# 1422| r1422_2(glval) = FunctionAddress[returnValue] : -# 1422| r1422_3(UnusualFields) = Call[returnValue] : func:r1422_2 -# 1422| m1422_4(unknown) = ^CallSideEffect : ~m1421_4 -# 1422| m1422_5(unknown) = Chi : total:m1421_4, partial:m1422_4 -# 1422| r1422_6(glval) = VariableAddress[#temp1422:21] : -# 1422| m1422_7(UnusualFields) = Store[#temp1422:21] : &:r1422_6, r1422_3 -# 1422| r1422_8(glval) = FieldAddress[r] : r1422_6 -# 1422| r1422_9(int &) = Load[?] : &:r1422_8, ~m1422_7 -# 1422| r1422_10(glval) = CopyValue : r1422_9 -# 1422| r1422_11(glval) = Convert : r1422_10 -# 1422| r1422_12(int &) = CopyValue : r1422_11 -# 1422| m1422_13(int &) = Store[rx] : &:r1422_1, r1422_12 -# 1423| r1423_1(glval) = VariableAddress[x] : -# 1423| r1423_2(glval) = FunctionAddress[returnValue] : -# 1423| r1423_3(UnusualFields) = Call[returnValue] : func:r1423_2 -# 1423| m1423_4(unknown) = ^CallSideEffect : ~m1422_5 -# 1423| m1423_5(unknown) = Chi : total:m1422_5, partial:m1423_4 -# 1423| r1423_6(glval) = VariableAddress[#temp1423:13] : -# 1423| m1423_7(UnusualFields) = Store[#temp1423:13] : &:r1423_6, r1423_3 -# 1423| r1423_8(glval) = FieldAddress[r] : r1423_6 -# 1423| r1423_9(int &) = Load[?] : &:r1423_8, ~m1423_7 -# 1423| r1423_10(int) = Load[?] : &:r1423_9, ~m1423_5 -# 1423| m1423_11(int) = Store[x] : &:r1423_1, r1423_10 -# 1425| r1425_1(glval) = VariableAddress[rf] : +# 1423| void temporary_unusual_fields() +# 1423| Block 0 +# 1423| v1423_1(void) = EnterFunction : +# 1423| m1423_2(unknown) = AliasedDefinition : +# 1423| m1423_3(unknown) = InitializeNonLocal : +# 1423| m1423_4(unknown) = Chi : total:m1423_2, partial:m1423_3 +# 1424| r1424_1(glval) = VariableAddress[rx] : +# 1424| r1424_2(glval) = FunctionAddress[returnValue] : +# 1424| r1424_3(UnusualFields) = Call[returnValue] : func:r1424_2 +# 1424| m1424_4(unknown) = ^CallSideEffect : ~m1423_4 +# 1424| m1424_5(unknown) = Chi : total:m1423_4, partial:m1424_4 +# 1424| r1424_6(glval) = VariableAddress[#temp1424:21] : +# 1424| m1424_7(UnusualFields) = Store[#temp1424:21] : &:r1424_6, r1424_3 +# 1424| r1424_8(glval) = FieldAddress[r] : r1424_6 +# 1424| r1424_9(int &) = Load[?] : &:r1424_8, ~m1424_7 +# 1424| r1424_10(glval) = CopyValue : r1424_9 +# 1424| r1424_11(glval) = Convert : r1424_10 +# 1424| r1424_12(int &) = CopyValue : r1424_11 +# 1424| m1424_13(int &) = Store[rx] : &:r1424_1, r1424_12 +# 1425| r1425_1(glval) = VariableAddress[x] : # 1425| r1425_2(glval) = FunctionAddress[returnValue] : # 1425| r1425_3(UnusualFields) = Call[returnValue] : func:r1425_2 -# 1425| m1425_4(unknown) = ^CallSideEffect : ~m1423_5 -# 1425| m1425_5(unknown) = Chi : total:m1423_5, partial:m1425_4 -# 1425| r1425_6(glval) = VariableAddress[#temp1425:23] : -# 1425| m1425_7(UnusualFields) = Store[#temp1425:23] : &:r1425_6, r1425_3 -# 1425| r1425_8(glval) = FieldAddress[a] : r1425_6 -# 1425| r1425_9(float *) = Convert : r1425_8 -# 1425| r1425_10(int) = Constant[3] : -# 1425| r1425_11(glval) = PointerAdd[4] : r1425_9, r1425_10 -# 1425| r1425_12(glval) = Convert : r1425_11 -# 1425| r1425_13(float &) = CopyValue : r1425_12 -# 1425| m1425_14(float &) = Store[rf] : &:r1425_1, r1425_13 -# 1426| r1426_1(glval) = VariableAddress[f] : -# 1426| r1426_2(glval) = FunctionAddress[returnValue] : -# 1426| r1426_3(UnusualFields) = Call[returnValue] : func:r1426_2 -# 1426| m1426_4(unknown) = ^CallSideEffect : ~m1425_5 -# 1426| m1426_5(unknown) = Chi : total:m1425_5, partial:m1426_4 -# 1426| r1426_6(glval) = VariableAddress[#temp1426:15] : -# 1426| m1426_7(UnusualFields) = Store[#temp1426:15] : &:r1426_6, r1426_3 -# 1426| r1426_8(glval) = FieldAddress[a] : r1426_6 -# 1426| r1426_9(float *) = Convert : r1426_8 -# 1426| r1426_10(int) = Constant[5] : -# 1426| r1426_11(glval) = PointerAdd[4] : r1426_9, r1426_10 -# 1426| r1426_12(float) = Load[?] : &:r1426_11, ~m1426_7 -# 1426| m1426_13(float) = Store[f] : &:r1426_1, r1426_12 -# 1427| v1427_1(void) = NoOp : -# 1421| v1421_5(void) = ReturnVoid : -# 1421| v1421_6(void) = AliasedUse : ~m1426_5 -# 1421| v1421_7(void) = ExitFunction : +# 1425| m1425_4(unknown) = ^CallSideEffect : ~m1424_5 +# 1425| m1425_5(unknown) = Chi : total:m1424_5, partial:m1425_4 +# 1425| r1425_6(glval) = VariableAddress[#temp1425:13] : +# 1425| m1425_7(UnusualFields) = Store[#temp1425:13] : &:r1425_6, r1425_3 +# 1425| r1425_8(glval) = FieldAddress[r] : r1425_6 +# 1425| r1425_9(int &) = Load[?] : &:r1425_8, ~m1425_7 +# 1425| r1425_10(int) = Load[?] : &:r1425_9, ~m1425_5 +# 1425| m1425_11(int) = Store[x] : &:r1425_1, r1425_10 +# 1427| r1427_1(glval) = VariableAddress[rf] : +# 1427| r1427_2(glval) = FunctionAddress[returnValue] : +# 1427| r1427_3(UnusualFields) = Call[returnValue] : func:r1427_2 +# 1427| m1427_4(unknown) = ^CallSideEffect : ~m1425_5 +# 1427| m1427_5(unknown) = Chi : total:m1425_5, partial:m1427_4 +# 1427| r1427_6(glval) = VariableAddress[#temp1427:23] : +# 1427| m1427_7(UnusualFields) = Store[#temp1427:23] : &:r1427_6, r1427_3 +# 1427| r1427_8(glval) = FieldAddress[a] : r1427_6 +# 1427| r1427_9(float *) = Convert : r1427_8 +# 1427| r1427_10(int) = Constant[3] : +# 1427| r1427_11(glval) = PointerAdd[4] : r1427_9, r1427_10 +# 1427| r1427_12(glval) = Convert : r1427_11 +# 1427| r1427_13(float &) = CopyValue : r1427_12 +# 1427| m1427_14(float &) = Store[rf] : &:r1427_1, r1427_13 +# 1428| r1428_1(glval) = VariableAddress[f] : +# 1428| r1428_2(glval) = FunctionAddress[returnValue] : +# 1428| r1428_3(UnusualFields) = Call[returnValue] : func:r1428_2 +# 1428| m1428_4(unknown) = ^CallSideEffect : ~m1427_5 +# 1428| m1428_5(unknown) = Chi : total:m1427_5, partial:m1428_4 +# 1428| r1428_6(glval) = VariableAddress[#temp1428:15] : +# 1428| m1428_7(UnusualFields) = Store[#temp1428:15] : &:r1428_6, r1428_3 +# 1428| r1428_8(glval) = FieldAddress[a] : r1428_6 +# 1428| r1428_9(float *) = Convert : r1428_8 +# 1428| r1428_10(int) = Constant[5] : +# 1428| r1428_11(glval) = PointerAdd[4] : r1428_9, r1428_10 +# 1428| r1428_12(float) = Load[?] : &:r1428_11, ~m1428_7 +# 1428| m1428_13(float) = Store[f] : &:r1428_1, r1428_12 +# 1429| v1429_1(void) = NoOp : +# 1423| v1423_5(void) = ReturnVoid : +# 1423| v1423_6(void) = AliasedUse : ~m1428_5 +# 1423| v1423_7(void) = ExitFunction : -# 1443| void temporary_hierarchy() -# 1443| Block 0 -# 1443| v1443_1(void) = EnterFunction : -# 1443| m1443_2(unknown) = AliasedDefinition : -# 1443| m1443_3(unknown) = InitializeNonLocal : -# 1443| m1443_4(unknown) = Chi : total:m1443_2, partial:m1443_3 -# 1444| r1444_1(glval) = VariableAddress[b] : +# 1445| void temporary_hierarchy() +# 1445| Block 0 +# 1445| v1445_1(void) = EnterFunction : +# 1445| m1445_2(unknown) = AliasedDefinition : +# 1445| m1445_3(unknown) = InitializeNonLocal : +# 1445| m1445_4(unknown) = Chi : total:m1445_2, partial:m1445_3 +# 1446| r1446_1(glval) = VariableAddress[b] : #-----| r0_1(glval) = VariableAddress[#temp0:0] : -# 1444| r1444_2(glval) = FunctionAddress[returnValue] : -# 1444| r1444_3(POD_Middle) = Call[returnValue] : func:r1444_2 -# 1444| m1444_4(unknown) = ^CallSideEffect : ~m1443_4 -# 1444| m1444_5(unknown) = Chi : total:m1443_4, partial:m1444_4 -# 1444| m1444_6(POD_Middle) = Store[#temp0:0] : &:r0_1, r1444_3 -#-----| r0_2(glval) = ConvertToNonVirtualBase[POD_Middle : POD_Base] : r0_1 -#-----| r0_3(POD_Base) = Load[?] : &:r0_2, ~m1444_6 -#-----| m0_4(POD_Base) = Store[b] : &:r1444_1, r0_3 -# 1445| r1445_1(glval) = VariableAddress[#temp1445:9] : -# 1445| r1445_2(glval) = FunctionAddress[returnValue] : -# 1445| r1445_3(POD_Derived) = Call[returnValue] : func:r1445_2 -# 1445| m1445_4(unknown) = ^CallSideEffect : ~m1444_5 -# 1445| m1445_5(unknown) = Chi : total:m1444_5, partial:m1445_4 -# 1445| m1445_6(POD_Derived) = Store[#temp1445:9] : &:r1445_1, r1445_3 -# 1445| r1445_7(glval) = ConvertToNonVirtualBase[POD_Derived : POD_Middle] : r1445_1 -# 1445| r1445_8(glval) = ConvertToNonVirtualBase[POD_Middle : POD_Base] : r1445_7 -# 1445| r1445_9(POD_Base) = Load[?] : &:r1445_8, ~m1445_6 -# 1445| r1445_10(glval) = VariableAddress[b] : -# 1445| m1445_11(POD_Base) = Store[b] : &:r1445_10, r1445_9 -# 1446| r1446_1(glval) = VariableAddress[x] : -#-----| r0_5(glval) = VariableAddress[#temp0:0] : # 1446| r1446_2(glval) = FunctionAddress[returnValue] : -# 1446| r1446_3(POD_Derived) = Call[returnValue] : func:r1446_2 -# 1446| m1446_4(unknown) = ^CallSideEffect : ~m1445_5 -# 1446| m1446_5(unknown) = Chi : total:m1445_5, partial:m1446_4 -# 1446| m1446_6(POD_Derived) = Store[#temp0:0] : &:r0_5, r1446_3 -#-----| r0_6(glval) = ConvertToNonVirtualBase[POD_Derived : POD_Middle] : r0_5 -#-----| r0_7(glval) = ConvertToNonVirtualBase[POD_Middle : POD_Base] : r0_6 -# 1446| r1446_7(glval) = FieldAddress[x] : r0_7 -# 1446| r1446_8(int) = Load[?] : &:r1446_7, ~m1446_6 -# 1446| m1446_9(int) = Store[x] : &:r1446_1, r1446_8 -# 1447| r1447_1(glval) = VariableAddress[f] : -#-----| r0_8(glval) = VariableAddress[#temp0:0] : +# 1446| r1446_3(POD_Middle) = Call[returnValue] : func:r1446_2 +# 1446| m1446_4(unknown) = ^CallSideEffect : ~m1445_4 +# 1446| m1446_5(unknown) = Chi : total:m1445_4, partial:m1446_4 +# 1446| m1446_6(POD_Middle) = Store[#temp0:0] : &:r0_1, r1446_3 +#-----| r0_2(glval) = ConvertToNonVirtualBase[POD_Middle : POD_Base] : r0_1 +#-----| r0_3(POD_Base) = Load[?] : &:r0_2, ~m1446_6 +#-----| m0_4(POD_Base) = Store[b] : &:r1446_1, r0_3 +# 1447| r1447_1(glval) = VariableAddress[#temp1447:9] : # 1447| r1447_2(glval) = FunctionAddress[returnValue] : # 1447| r1447_3(POD_Derived) = Call[returnValue] : func:r1447_2 # 1447| m1447_4(unknown) = ^CallSideEffect : ~m1446_5 # 1447| m1447_5(unknown) = Chi : total:m1446_5, partial:m1447_4 -# 1447| m1447_6(POD_Derived) = Store[#temp0:0] : &:r0_8, r1447_3 +# 1447| m1447_6(POD_Derived) = Store[#temp1447:9] : &:r1447_1, r1447_3 +# 1447| r1447_7(glval) = ConvertToNonVirtualBase[POD_Derived : POD_Middle] : r1447_1 +# 1447| r1447_8(glval) = ConvertToNonVirtualBase[POD_Middle : POD_Base] : r1447_7 +# 1447| r1447_9(POD_Base) = Load[?] : &:r1447_8, ~m1447_6 +# 1447| r1447_10(glval) = VariableAddress[b] : +# 1447| m1447_11(POD_Base) = Store[b] : &:r1447_10, r1447_9 +# 1448| r1448_1(glval) = VariableAddress[x] : +#-----| r0_5(glval) = VariableAddress[#temp0:0] : +# 1448| r1448_2(glval) = FunctionAddress[returnValue] : +# 1448| r1448_3(POD_Derived) = Call[returnValue] : func:r1448_2 +# 1448| m1448_4(unknown) = ^CallSideEffect : ~m1447_5 +# 1448| m1448_5(unknown) = Chi : total:m1447_5, partial:m1448_4 +# 1448| m1448_6(POD_Derived) = Store[#temp0:0] : &:r0_5, r1448_3 +#-----| r0_6(glval) = ConvertToNonVirtualBase[POD_Derived : POD_Middle] : r0_5 +#-----| r0_7(glval) = ConvertToNonVirtualBase[POD_Middle : POD_Base] : r0_6 +# 1448| r1448_7(glval) = FieldAddress[x] : r0_7 +# 1448| r1448_8(int) = Load[?] : &:r1448_7, ~m1448_6 +# 1448| m1448_9(int) = Store[x] : &:r1448_1, r1448_8 +# 1449| r1449_1(glval) = VariableAddress[f] : +#-----| r0_8(glval) = VariableAddress[#temp0:0] : +# 1449| r1449_2(glval) = FunctionAddress[returnValue] : +# 1449| r1449_3(POD_Derived) = Call[returnValue] : func:r1449_2 +# 1449| m1449_4(unknown) = ^CallSideEffect : ~m1448_5 +# 1449| m1449_5(unknown) = Chi : total:m1448_5, partial:m1449_4 +# 1449| m1449_6(POD_Derived) = Store[#temp0:0] : &:r0_8, r1449_3 #-----| r0_9(glval) = ConvertToNonVirtualBase[POD_Derived : POD_Middle] : r0_8 #-----| r0_10(glval) = ConvertToNonVirtualBase[POD_Middle : POD_Base] : r0_9 #-----| r0_11(glval) = Convert : r0_10 -# 1447| r1447_7(glval) = FunctionAddress[f] : -# 1447| r1447_8(float) = Call[f] : func:r1447_7, this:r0_11 -# 1447| m1447_9(unknown) = ^CallSideEffect : ~m1447_5 -# 1447| m1447_10(unknown) = Chi : total:m1447_5, partial:m1447_9 -#-----| v0_12(void) = ^IndirectReadSideEffect[-1] : &:r0_11, ~m1447_6 -# 1447| m1447_11(float) = Store[f] : &:r1447_1, r1447_8 -# 1448| v1448_1(void) = NoOp : -# 1443| v1443_5(void) = ReturnVoid : -# 1443| v1443_6(void) = AliasedUse : ~m1447_10 -# 1443| v1443_7(void) = ExitFunction : +# 1449| r1449_7(glval) = FunctionAddress[f] : +# 1449| r1449_8(float) = Call[f] : func:r1449_7, this:r0_11 +# 1449| m1449_9(unknown) = ^CallSideEffect : ~m1449_5 +# 1449| m1449_10(unknown) = Chi : total:m1449_5, partial:m1449_9 +#-----| v0_12(void) = ^IndirectReadSideEffect[-1] : &:r0_11, ~m1449_6 +# 1449| m1449_11(float) = Store[f] : &:r1449_1, r1449_8 +# 1450| v1450_1(void) = NoOp : +# 1445| v1445_5(void) = ReturnVoid : +# 1445| v1445_6(void) = AliasedUse : ~m1449_10 +# 1445| v1445_7(void) = ExitFunction : -# 1451| void Inheritance_Test_B::~Inheritance_Test_B() -# 1451| Block 0 -# 1451| v1451_1(void) = EnterFunction : -# 1451| m1451_2(unknown) = AliasedDefinition : -# 1451| m1451_3(unknown) = InitializeNonLocal : -# 1451| m1451_4(unknown) = Chi : total:m1451_2, partial:m1451_3 -# 1451| r1451_5(glval) = VariableAddress[#this] : -# 1451| m1451_6(glval) = InitializeParameter[#this] : &:r1451_5 -# 1451| r1451_7(glval) = Load[#this] : &:r1451_5, m1451_6 -# 1451| m1451_8(Inheritance_Test_B) = InitializeIndirection[#this] : &:r1451_7 -# 1451| v1451_9(void) = NoOp : -# 1451| v1451_10(void) = ReturnIndirection[#this] : &:r1451_7, m1451_8 -# 1451| v1451_11(void) = ReturnVoid : -# 1451| v1451_12(void) = AliasedUse : m1451_3 -# 1451| v1451_13(void) = ExitFunction : +# 1453| void Inheritance_Test_B::~Inheritance_Test_B() +# 1453| Block 0 +# 1453| v1453_1(void) = EnterFunction : +# 1453| m1453_2(unknown) = AliasedDefinition : +# 1453| m1453_3(unknown) = InitializeNonLocal : +# 1453| m1453_4(unknown) = Chi : total:m1453_2, partial:m1453_3 +# 1453| r1453_5(glval) = VariableAddress[#this] : +# 1453| m1453_6(glval) = InitializeParameter[#this] : &:r1453_5 +# 1453| r1453_7(glval) = Load[#this] : &:r1453_5, m1453_6 +# 1453| m1453_8(Inheritance_Test_B) = InitializeIndirection[#this] : &:r1453_7 +# 1453| v1453_9(void) = NoOp : +# 1453| v1453_10(void) = ReturnIndirection[#this] : &:r1453_7, m1453_8 +# 1453| v1453_11(void) = ReturnVoid : +# 1453| v1453_12(void) = AliasedUse : m1453_3 +# 1453| v1453_13(void) = ExitFunction : -# 1457| void Inheritance_Test_A::Inheritance_Test_A() -# 1457| Block 0 -# 1457| v1457_1(void) = EnterFunction : -# 1457| m1457_2(unknown) = AliasedDefinition : -# 1457| m1457_3(unknown) = InitializeNonLocal : -# 1457| m1457_4(unknown) = Chi : total:m1457_2, partial:m1457_3 -# 1457| r1457_5(glval) = VariableAddress[#this] : -# 1457| m1457_6(glval) = InitializeParameter[#this] : &:r1457_5 -# 1457| r1457_7(glval) = Load[#this] : &:r1457_5, m1457_6 -# 1457| m1457_8(Inheritance_Test_A) = InitializeIndirection[#this] : &:r1457_7 -# 1457| r1457_9(glval) = FieldAddress[x] : m1457_6 -# 1457| r1457_10(int) = Constant[42] : -# 1457| m1457_11(int) = Store[?] : &:r1457_9, r1457_10 -# 1457| m1457_12(unknown) = Chi : total:m1457_8, partial:m1457_11 -# 1458| r1458_1(int) = Constant[3] : -# 1458| r1458_2(glval) = VariableAddress[#this] : -# 1458| r1458_3(Inheritance_Test_A *) = Load[#this] : &:r1458_2, m1457_6 -# 1458| r1458_4(glval) = FieldAddress[y] : r1458_3 -# 1458| m1458_5(int) = Store[?] : &:r1458_4, r1458_1 -# 1458| m1458_6(unknown) = Chi : total:m1457_12, partial:m1458_5 -# 1459| v1459_1(void) = NoOp : -# 1457| v1457_13(void) = ReturnIndirection[#this] : &:r1457_7, m1458_6 -# 1457| v1457_14(void) = ReturnVoid : -# 1457| v1457_15(void) = AliasedUse : m1457_3 -# 1457| v1457_16(void) = ExitFunction : +# 1459| void Inheritance_Test_A::Inheritance_Test_A() +# 1459| Block 0 +# 1459| v1459_1(void) = EnterFunction : +# 1459| m1459_2(unknown) = AliasedDefinition : +# 1459| m1459_3(unknown) = InitializeNonLocal : +# 1459| m1459_4(unknown) = Chi : total:m1459_2, partial:m1459_3 +# 1459| r1459_5(glval) = VariableAddress[#this] : +# 1459| m1459_6(glval) = InitializeParameter[#this] : &:r1459_5 +# 1459| r1459_7(glval) = Load[#this] : &:r1459_5, m1459_6 +# 1459| m1459_8(Inheritance_Test_A) = InitializeIndirection[#this] : &:r1459_7 +# 1459| r1459_9(glval) = FieldAddress[x] : m1459_6 +# 1459| r1459_10(int) = Constant[42] : +# 1459| m1459_11(int) = Store[?] : &:r1459_9, r1459_10 +# 1459| m1459_12(unknown) = Chi : total:m1459_8, partial:m1459_11 +# 1460| r1460_1(int) = Constant[3] : +# 1460| r1460_2(glval) = VariableAddress[#this] : +# 1460| r1460_3(Inheritance_Test_A *) = Load[#this] : &:r1460_2, m1459_6 +# 1460| r1460_4(glval) = FieldAddress[y] : r1460_3 +# 1460| m1460_5(int) = Store[?] : &:r1460_4, r1460_1 +# 1460| m1460_6(unknown) = Chi : total:m1459_12, partial:m1460_5 +# 1461| v1461_1(void) = NoOp : +# 1459| v1459_13(void) = ReturnIndirection[#this] : &:r1459_7, m1460_6 +# 1459| v1459_14(void) = ReturnVoid : +# 1459| v1459_15(void) = AliasedUse : m1459_3 +# 1459| v1459_16(void) = ExitFunction : -# 1462| void array_structured_binding() -# 1462| Block 0 -# 1462| v1462_1(void) = EnterFunction : -# 1462| m1462_2(unknown) = AliasedDefinition : -# 1462| m1462_3(unknown) = InitializeNonLocal : -# 1462| m1462_4(unknown) = Chi : total:m1462_2, partial:m1462_3 -# 1463| r1463_1(glval) = VariableAddress[xs] : -# 1463| m1463_2(int[2]) = Uninitialized[xs] : &:r1463_1 -# 1463| r1463_3(int) = Constant[0] : -# 1463| r1463_4(glval) = PointerAdd[4] : r1463_1, r1463_3 -# 1463| r1463_5(int) = Constant[1] : -# 1463| m1463_6(int) = Store[?] : &:r1463_4, r1463_5 -# 1463| m1463_7(int[2]) = Chi : total:m1463_2, partial:m1463_6 -# 1463| r1463_8(int) = Constant[1] : -# 1463| r1463_9(glval) = PointerAdd[4] : r1463_1, r1463_8 -# 1463| r1463_10(int) = Constant[2] : -# 1463| m1463_11(int) = Store[?] : &:r1463_9, r1463_10 -# 1463| m1463_12(int[2]) = Chi : total:m1463_7, partial:m1463_11 -# 1466| r1466_1(glval) = VariableAddress[(unnamed local variable)] : -# 1466| r1466_2(glval) = VariableAddress[xs] : -# 1466| r1466_3(int(&)[2]) = CopyValue : r1466_2 -# 1466| m1466_4(int(&)[2]) = Store[(unnamed local variable)] : &:r1466_1, r1466_3 -# 1466| r1466_5(glval) = VariableAddress[x0] : +# 1464| void array_structured_binding() +# 1464| Block 0 +# 1464| v1464_1(void) = EnterFunction : +# 1464| m1464_2(unknown) = AliasedDefinition : +# 1464| m1464_3(unknown) = InitializeNonLocal : +# 1464| m1464_4(unknown) = Chi : total:m1464_2, partial:m1464_3 +# 1465| r1465_1(glval) = VariableAddress[xs] : +# 1465| m1465_2(int[2]) = Uninitialized[xs] : &:r1465_1 +# 1465| r1465_3(int) = Constant[0] : +# 1465| r1465_4(glval) = PointerAdd[4] : r1465_1, r1465_3 +# 1465| r1465_5(int) = Constant[1] : +# 1465| m1465_6(int) = Store[?] : &:r1465_4, r1465_5 +# 1465| m1465_7(int[2]) = Chi : total:m1465_2, partial:m1465_6 +# 1465| r1465_8(int) = Constant[1] : +# 1465| r1465_9(glval) = PointerAdd[4] : r1465_1, r1465_8 +# 1465| r1465_10(int) = Constant[2] : +# 1465| m1465_11(int) = Store[?] : &:r1465_9, r1465_10 +# 1465| m1465_12(int[2]) = Chi : total:m1465_7, partial:m1465_11 +# 1468| r1468_1(glval) = VariableAddress[(unnamed local variable)] : +# 1468| r1468_2(glval) = VariableAddress[xs] : +# 1468| r1468_3(int(&)[2]) = CopyValue : r1468_2 +# 1468| m1468_4(int(&)[2]) = Store[(unnamed local variable)] : &:r1468_1, r1468_3 +# 1468| r1468_5(glval) = VariableAddress[x0] : #-----| r0_1(glval) = VariableAddress[(unnamed local variable)] : -#-----| r0_2(int(&)[2]) = Load[(unnamed local variable)] : &:r0_1, m1466_4 +#-----| r0_2(int(&)[2]) = Load[(unnamed local variable)] : &:r0_1, m1468_4 #-----| r0_3(glval) = CopyValue : r0_2 #-----| r0_4(int *) = Convert : r0_3 #-----| r0_5(unsigned long) = Constant[0] : #-----| r0_6(glval) = PointerAdd[4] : r0_4, r0_5 -#-----| m0_7(int &) = Store[x0] : &:r1466_5, r0_6 -# 1466| r1466_6(glval) = VariableAddress[x1] : +#-----| m0_7(int &) = Store[x0] : &:r1468_5, r0_6 +# 1468| r1468_6(glval) = VariableAddress[x1] : #-----| r0_8(glval) = VariableAddress[(unnamed local variable)] : -#-----| r0_9(int(&)[2]) = Load[(unnamed local variable)] : &:r0_8, m1466_4 +#-----| r0_9(int(&)[2]) = Load[(unnamed local variable)] : &:r0_8, m1468_4 #-----| r0_10(glval) = CopyValue : r0_9 #-----| r0_11(int *) = Convert : r0_10 #-----| r0_12(unsigned long) = Constant[1] : #-----| r0_13(glval) = PointerAdd[4] : r0_11, r0_12 -#-----| m0_14(int &) = Store[x1] : &:r1466_6, r0_13 -# 1467| r1467_1(int) = Constant[3] : -# 1467| r1467_2(glval) = VariableAddress[x1] : -# 1467| r1467_3(int &) = Load[x1] : &:r1467_2, m0_14 -# 1467| m1467_4(int) = Store[?] : &:r1467_3, r1467_1 -# 1467| m1467_5(int[2]) = Chi : total:m1463_12, partial:m1467_4 -# 1468| r1468_1(glval) = VariableAddress[rx1] : -# 1468| r1468_2(glval) = VariableAddress[x1] : -# 1468| r1468_3(int &) = Load[x1] : &:r1468_2, m0_14 -# 1468| r1468_4(int &) = CopyValue : r1468_3 -# 1468| m1468_5(int &) = Store[rx1] : &:r1468_1, r1468_4 -# 1469| r1469_1(glval) = VariableAddress[x] : +#-----| m0_14(int &) = Store[x1] : &:r1468_6, r0_13 +# 1469| r1469_1(int) = Constant[3] : # 1469| r1469_2(glval) = VariableAddress[x1] : # 1469| r1469_3(int &) = Load[x1] : &:r1469_2, m0_14 -# 1469| r1469_4(int) = Load[?] : &:r1469_3, m1467_4 -# 1469| m1469_5(int) = Store[x] : &:r1469_1, r1469_4 -# 1473| r1473_1(glval) = VariableAddress[unnamed_local_variable] : -# 1473| r1473_2(glval) = VariableAddress[xs] : -# 1473| r1473_3(int(&)[2]) = CopyValue : r1473_2 -# 1473| m1473_4(int(&)[2]) = Store[unnamed_local_variable] : &:r1473_1, r1473_3 -# 1474| r1474_1(glval) = VariableAddress[x0] : -# 1474| r1474_2(glval) = VariableAddress[unnamed_local_variable] : -# 1474| r1474_3(int(&)[2]) = Load[unnamed_local_variable] : &:r1474_2, m1473_4 -# 1474| r1474_4(glval) = CopyValue : r1474_3 -# 1474| r1474_5(int *) = Convert : r1474_4 -# 1474| r1474_6(int) = Constant[0] : -# 1474| r1474_7(glval) = PointerAdd[4] : r1474_5, r1474_6 -# 1474| r1474_8(int &) = CopyValue : r1474_7 -# 1474| m1474_9(int &) = Store[x0] : &:r1474_1, r1474_8 -# 1475| r1475_1(glval) = VariableAddress[x1] : -# 1475| r1475_2(glval) = VariableAddress[unnamed_local_variable] : -# 1475| r1475_3(int(&)[2]) = Load[unnamed_local_variable] : &:r1475_2, m1473_4 -# 1475| r1475_4(glval) = CopyValue : r1475_3 -# 1475| r1475_5(int *) = Convert : r1475_4 -# 1475| r1475_6(int) = Constant[1] : -# 1475| r1475_7(glval) = PointerAdd[4] : r1475_5, r1475_6 -# 1475| r1475_8(int &) = CopyValue : r1475_7 -# 1475| m1475_9(int &) = Store[x1] : &:r1475_1, r1475_8 -# 1476| r1476_1(int) = Constant[3] : -# 1476| r1476_2(glval) = VariableAddress[x1] : -# 1476| r1476_3(int &) = Load[x1] : &:r1476_2, m1475_9 -# 1476| r1476_4(glval) = CopyValue : r1476_3 -# 1476| m1476_5(int) = Store[?] : &:r1476_4, r1476_1 -# 1476| m1476_6(int[2]) = Chi : total:m1467_5, partial:m1476_5 -# 1477| r1477_1(glval) = VariableAddress[rx1] : -# 1477| r1477_2(glval) = VariableAddress[x1] : -# 1477| r1477_3(int &) = Load[x1] : &:r1477_2, m1475_9 -# 1477| r1477_4(glval) = CopyValue : r1477_3 -# 1477| r1477_5(int &) = CopyValue : r1477_4 -# 1477| m1477_6(int &) = Store[rx1] : &:r1477_1, r1477_5 -# 1478| r1478_1(glval) = VariableAddress[x] : +# 1469| m1469_4(int) = Store[?] : &:r1469_3, r1469_1 +# 1469| m1469_5(int[2]) = Chi : total:m1465_12, partial:m1469_4 +# 1470| r1470_1(glval) = VariableAddress[rx1] : +# 1470| r1470_2(glval) = VariableAddress[x1] : +# 1470| r1470_3(int &) = Load[x1] : &:r1470_2, m0_14 +# 1470| r1470_4(int &) = CopyValue : r1470_3 +# 1470| m1470_5(int &) = Store[rx1] : &:r1470_1, r1470_4 +# 1471| r1471_1(glval) = VariableAddress[x] : +# 1471| r1471_2(glval) = VariableAddress[x1] : +# 1471| r1471_3(int &) = Load[x1] : &:r1471_2, m0_14 +# 1471| r1471_4(int) = Load[?] : &:r1471_3, m1469_4 +# 1471| m1471_5(int) = Store[x] : &:r1471_1, r1471_4 +# 1475| r1475_1(glval) = VariableAddress[unnamed_local_variable] : +# 1475| r1475_2(glval) = VariableAddress[xs] : +# 1475| r1475_3(int(&)[2]) = CopyValue : r1475_2 +# 1475| m1475_4(int(&)[2]) = Store[unnamed_local_variable] : &:r1475_1, r1475_3 +# 1476| r1476_1(glval) = VariableAddress[x0] : +# 1476| r1476_2(glval) = VariableAddress[unnamed_local_variable] : +# 1476| r1476_3(int(&)[2]) = Load[unnamed_local_variable] : &:r1476_2, m1475_4 +# 1476| r1476_4(glval) = CopyValue : r1476_3 +# 1476| r1476_5(int *) = Convert : r1476_4 +# 1476| r1476_6(int) = Constant[0] : +# 1476| r1476_7(glval) = PointerAdd[4] : r1476_5, r1476_6 +# 1476| r1476_8(int &) = CopyValue : r1476_7 +# 1476| m1476_9(int &) = Store[x0] : &:r1476_1, r1476_8 +# 1477| r1477_1(glval) = VariableAddress[x1] : +# 1477| r1477_2(glval) = VariableAddress[unnamed_local_variable] : +# 1477| r1477_3(int(&)[2]) = Load[unnamed_local_variable] : &:r1477_2, m1475_4 +# 1477| r1477_4(glval) = CopyValue : r1477_3 +# 1477| r1477_5(int *) = Convert : r1477_4 +# 1477| r1477_6(int) = Constant[1] : +# 1477| r1477_7(glval) = PointerAdd[4] : r1477_5, r1477_6 +# 1477| r1477_8(int &) = CopyValue : r1477_7 +# 1477| m1477_9(int &) = Store[x1] : &:r1477_1, r1477_8 +# 1478| r1478_1(int) = Constant[3] : # 1478| r1478_2(glval) = VariableAddress[x1] : -# 1478| r1478_3(int &) = Load[x1] : &:r1478_2, m1475_9 -# 1478| r1478_4(int) = Load[?] : &:r1478_3, m1476_5 -# 1478| m1478_5(int) = Store[x] : &:r1478_1, r1478_4 -# 1480| v1480_1(void) = NoOp : -# 1462| v1462_5(void) = ReturnVoid : -# 1462| v1462_6(void) = AliasedUse : m1462_3 -# 1462| v1462_7(void) = ExitFunction : +# 1478| r1478_3(int &) = Load[x1] : &:r1478_2, m1477_9 +# 1478| r1478_4(glval) = CopyValue : r1478_3 +# 1478| m1478_5(int) = Store[?] : &:r1478_4, r1478_1 +# 1478| m1478_6(int[2]) = Chi : total:m1469_5, partial:m1478_5 +# 1479| r1479_1(glval) = VariableAddress[rx1] : +# 1479| r1479_2(glval) = VariableAddress[x1] : +# 1479| r1479_3(int &) = Load[x1] : &:r1479_2, m1477_9 +# 1479| r1479_4(glval) = CopyValue : r1479_3 +# 1479| r1479_5(int &) = CopyValue : r1479_4 +# 1479| m1479_6(int &) = Store[rx1] : &:r1479_1, r1479_5 +# 1480| r1480_1(glval) = VariableAddress[x] : +# 1480| r1480_2(glval) = VariableAddress[x1] : +# 1480| r1480_3(int &) = Load[x1] : &:r1480_2, m1477_9 +# 1480| r1480_4(int) = Load[?] : &:r1480_3, m1478_5 +# 1480| m1480_5(int) = Store[x] : &:r1480_1, r1480_4 +# 1482| v1482_1(void) = NoOp : +# 1464| v1464_5(void) = ReturnVoid : +# 1464| v1464_6(void) = AliasedUse : m1464_3 +# 1464| v1464_7(void) = ExitFunction : -# 1482| void StructuredBindingDataMemberMemberStruct::StructuredBindingDataMemberMemberStruct() -# 1482| Block 0 -# 1482| v1482_1(void) = EnterFunction : -# 1482| m1482_2(unknown) = AliasedDefinition : -# 1482| m1482_3(unknown) = InitializeNonLocal : -# 1482| m1482_4(unknown) = Chi : total:m1482_2, partial:m1482_3 -# 1482| r1482_5(glval) = VariableAddress[#this] : -# 1482| m1482_6(glval) = InitializeParameter[#this] : &:r1482_5 -# 1482| r1482_7(glval) = Load[#this] : &:r1482_5, m1482_6 -# 1482| m1482_8(StructuredBindingDataMemberMemberStruct) = InitializeIndirection[#this] : &:r1482_7 -# 1482| v1482_9(void) = NoOp : -# 1482| v1482_10(void) = ReturnIndirection[#this] : &:r1482_7, m1482_8 -# 1482| v1482_11(void) = ReturnVoid : -# 1482| v1482_12(void) = AliasedUse : m1482_3 -# 1482| v1482_13(void) = ExitFunction : +# 1484| void StructuredBindingDataMemberMemberStruct::StructuredBindingDataMemberMemberStruct() +# 1484| Block 0 +# 1484| v1484_1(void) = EnterFunction : +# 1484| m1484_2(unknown) = AliasedDefinition : +# 1484| m1484_3(unknown) = InitializeNonLocal : +# 1484| m1484_4(unknown) = Chi : total:m1484_2, partial:m1484_3 +# 1484| r1484_5(glval) = VariableAddress[#this] : +# 1484| m1484_6(glval) = InitializeParameter[#this] : &:r1484_5 +# 1484| r1484_7(glval) = Load[#this] : &:r1484_5, m1484_6 +# 1484| m1484_8(StructuredBindingDataMemberMemberStruct) = InitializeIndirection[#this] : &:r1484_7 +# 1484| v1484_9(void) = NoOp : +# 1484| v1484_10(void) = ReturnIndirection[#this] : &:r1484_7, m1484_8 +# 1484| v1484_11(void) = ReturnVoid : +# 1484| v1484_12(void) = AliasedUse : m1484_3 +# 1484| v1484_13(void) = ExitFunction : -# 1486| void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct() -# 1486| Block 0 -# 1486| v1486_1(void) = EnterFunction : -# 1486| m1486_2(unknown) = AliasedDefinition : -# 1486| m1486_3(unknown) = InitializeNonLocal : -# 1486| m1486_4(unknown) = Chi : total:m1486_2, partial:m1486_3 -# 1486| r1486_5(glval) = VariableAddress[#this] : -# 1486| m1486_6(glval) = InitializeParameter[#this] : &:r1486_5 -# 1486| r1486_7(glval) = Load[#this] : &:r1486_5, m1486_6 -# 1486| m1486_8(StructuredBindingDataMemberStruct) = InitializeIndirection[#this] : &:r1486_7 -# 1486| v1486_9(void) = NoOp : -# 1486| v1486_10(void) = ReturnIndirection[#this] : &:r1486_7, m1486_8 -# 1486| v1486_11(void) = ReturnVoid : -# 1486| v1486_12(void) = AliasedUse : m1486_3 -# 1486| v1486_13(void) = ExitFunction : +# 1488| void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct() +# 1488| Block 0 +# 1488| v1488_1(void) = EnterFunction : +# 1488| m1488_2(unknown) = AliasedDefinition : +# 1488| m1488_3(unknown) = InitializeNonLocal : +# 1488| m1488_4(unknown) = Chi : total:m1488_2, partial:m1488_3 +# 1488| r1488_5(glval) = VariableAddress[#this] : +# 1488| m1488_6(glval) = InitializeParameter[#this] : &:r1488_5 +# 1488| r1488_7(glval) = Load[#this] : &:r1488_5, m1488_6 +# 1488| m1488_8(StructuredBindingDataMemberStruct) = InitializeIndirection[#this] : &:r1488_7 +# 1488| v1488_9(void) = NoOp : +# 1488| v1488_10(void) = ReturnIndirection[#this] : &:r1488_7, m1488_8 +# 1488| v1488_11(void) = ReturnVoid : +# 1488| v1488_12(void) = AliasedUse : m1488_3 +# 1488| v1488_13(void) = ExitFunction : -# 1486| void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct(StructuredBindingDataMemberStruct const&) -# 1486| Block 0 -# 1486| v1486_1(void) = EnterFunction : -# 1486| m1486_2(unknown) = AliasedDefinition : -# 1486| m1486_3(unknown) = InitializeNonLocal : -# 1486| m1486_4(unknown) = Chi : total:m1486_2, partial:m1486_3 -# 1486| r1486_5(glval) = VariableAddress[#this] : -# 1486| m1486_6(glval) = InitializeParameter[#this] : &:r1486_5 -# 1486| r1486_7(glval) = Load[#this] : &:r1486_5, m1486_6 -# 1486| m1486_8(StructuredBindingDataMemberStruct) = InitializeIndirection[#this] : &:r1486_7 +# 1488| void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct(StructuredBindingDataMemberStruct const&) +# 1488| Block 0 +# 1488| v1488_1(void) = EnterFunction : +# 1488| m1488_2(unknown) = AliasedDefinition : +# 1488| m1488_3(unknown) = InitializeNonLocal : +# 1488| m1488_4(unknown) = Chi : total:m1488_2, partial:m1488_3 +# 1488| r1488_5(glval) = VariableAddress[#this] : +# 1488| m1488_6(glval) = InitializeParameter[#this] : &:r1488_5 +# 1488| r1488_7(glval) = Load[#this] : &:r1488_5, m1488_6 +# 1488| m1488_8(StructuredBindingDataMemberStruct) = InitializeIndirection[#this] : &:r1488_7 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| m0_2(StructuredBindingDataMemberStruct &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r0_1, m0_2 #-----| m0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 1486| r1486_9(glval) = FieldAddress[i] : m1486_6 -# 1486| r1486_10(glval) = VariableAddress[(unnamed parameter 0)] : -# 1486| r1486_11(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1486_10, m0_2 -# 1486| r1486_12(glval) = CopyValue : r1486_11 -# 1486| r1486_13(glval) = FieldAddress[i] : r1486_12 -# 1486| r1486_14(int) = Load[?] : &:r1486_13, ~m0_4 -# 1486| m1486_15(int) = Store[?] : &:r1486_9, r1486_14 -# 1486| m1486_16(unknown) = Chi : total:m1486_8, partial:m1486_15 -# 1486| r1486_17(glval) = FieldAddress[d] : m1486_6 -# 1486| r1486_18(glval) = VariableAddress[(unnamed parameter 0)] : -# 1486| r1486_19(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1486_18, m0_2 -# 1486| r1486_20(glval) = CopyValue : r1486_19 -# 1486| r1486_21(glval) = FieldAddress[d] : r1486_20 -# 1486| r1486_22(double) = Load[?] : &:r1486_21, ~m0_4 -# 1486| m1486_23(double) = Store[?] : &:r1486_17, r1486_22 -# 1486| m1486_24(unknown) = Chi : total:m1486_16, partial:m1486_23 -# 1486| r1486_25(glval) = FieldAddress[b] : m1486_6 -# 1486| r1486_26(glval) = VariableAddress[(unnamed parameter 0)] : -# 1486| r1486_27(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1486_26, m0_2 -# 1486| r1486_28(glval) = CopyValue : r1486_27 -# 1486| r1486_29(glval) = FieldAddress[b] : r1486_28 -# 1486| r1486_30(unsigned int) = Load[?] : &:r1486_29, ~m0_4 -# 1486| m1486_31(unsigned int) = Store[?] : &:r1486_25, r1486_30 -# 1486| m1486_32(unknown) = Chi : total:m1486_24, partial:m1486_31 -# 1486| r1486_33(glval) = FieldAddress[r] : m1486_6 -# 1486| r1486_34(glval) = VariableAddress[(unnamed parameter 0)] : -# 1486| r1486_35(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1486_34, m0_2 -# 1486| r1486_36(glval) = CopyValue : r1486_35 -# 1486| r1486_37(glval) = FieldAddress[r] : r1486_36 -# 1486| r1486_38(int &) = Load[?] : &:r1486_37, ~m0_4 -# 1486| m1486_39(int &) = Store[?] : &:r1486_33, r1486_38 -# 1486| m1486_40(unknown) = Chi : total:m1486_32, partial:m1486_39 -# 1486| r1486_41(glval) = FieldAddress[p] : m1486_6 -# 1486| r1486_42(glval) = VariableAddress[(unnamed parameter 0)] : -# 1486| r1486_43(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1486_42, m0_2 -# 1486| r1486_44(glval) = CopyValue : r1486_43 -# 1486| r1486_45(glval) = FieldAddress[p] : r1486_44 -# 1486| r1486_46(int *) = Load[?] : &:r1486_45, ~m0_4 -# 1486| m1486_47(int *) = Store[?] : &:r1486_41, r1486_46 -# 1486| m1486_48(unknown) = Chi : total:m1486_40, partial:m1486_47 -# 1486| r1486_49(glval) = FieldAddress[xs] : m1486_6 -# 1486| r1486_50(glval) = VariableAddress[(unnamed parameter 0)] : -# 1486| r1486_51(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1486_50, m0_2 -# 1486| r1486_52(glval) = CopyValue : r1486_51 -# 1486| r1486_53(glval) = FieldAddress[xs] : r1486_52 -# 1486| r1486_54(int[2]) = Load[?] : &:r1486_53, ~m0_4 -# 1486| m1486_55(int[2]) = Store[?] : &:r1486_49, r1486_54 -# 1486| m1486_56(unknown) = Chi : total:m1486_48, partial:m1486_55 -# 1486| r1486_57(glval) = FieldAddress[r_alt] : m1486_6 -# 1486| r1486_58(glval) = VariableAddress[(unnamed parameter 0)] : -# 1486| r1486_59(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1486_58, m0_2 -# 1486| r1486_60(glval) = CopyValue : r1486_59 -# 1486| r1486_61(glval) = FieldAddress[r_alt] : r1486_60 -# 1486| r1486_62(int &) = Load[?] : &:r1486_61, ~m0_4 -# 1486| m1486_63(int &) = Store[?] : &:r1486_57, r1486_62 -# 1486| m1486_64(unknown) = Chi : total:m1486_56, partial:m1486_63 -# 1486| r1486_65(glval) = FieldAddress[m] : m1486_6 -# 1486| r1486_66(glval) = VariableAddress[(unnamed parameter 0)] : -# 1486| r1486_67(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1486_66, m0_2 -# 1486| r1486_68(glval) = CopyValue : r1486_67 -# 1486| r1486_69(glval) = FieldAddress[m] : r1486_68 -# 1486| r1486_70(StructuredBindingDataMemberMemberStruct) = Load[?] : &:r1486_69, ~m0_4 -# 1486| m1486_71(StructuredBindingDataMemberMemberStruct) = Store[?] : &:r1486_65, r1486_70 -# 1486| m1486_72(unknown) = Chi : total:m1486_64, partial:m1486_71 -# 1486| v1486_73(void) = NoOp : -# 1486| v1486_74(void) = ReturnIndirection[#this] : &:r1486_7, m1486_72 +# 1488| r1488_9(glval) = FieldAddress[i] : m1488_6 +# 1488| r1488_10(glval) = VariableAddress[(unnamed parameter 0)] : +# 1488| r1488_11(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_10, m0_2 +# 1488| r1488_12(glval) = CopyValue : r1488_11 +# 1488| r1488_13(glval) = FieldAddress[i] : r1488_12 +# 1488| r1488_14(int) = Load[?] : &:r1488_13, ~m0_4 +# 1488| m1488_15(int) = Store[?] : &:r1488_9, r1488_14 +# 1488| m1488_16(unknown) = Chi : total:m1488_8, partial:m1488_15 +# 1488| r1488_17(glval) = FieldAddress[d] : m1488_6 +# 1488| r1488_18(glval) = VariableAddress[(unnamed parameter 0)] : +# 1488| r1488_19(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_18, m0_2 +# 1488| r1488_20(glval) = CopyValue : r1488_19 +# 1488| r1488_21(glval) = FieldAddress[d] : r1488_20 +# 1488| r1488_22(double) = Load[?] : &:r1488_21, ~m0_4 +# 1488| m1488_23(double) = Store[?] : &:r1488_17, r1488_22 +# 1488| m1488_24(unknown) = Chi : total:m1488_16, partial:m1488_23 +# 1488| r1488_25(glval) = FieldAddress[b] : m1488_6 +# 1488| r1488_26(glval) = VariableAddress[(unnamed parameter 0)] : +# 1488| r1488_27(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_26, m0_2 +# 1488| r1488_28(glval) = CopyValue : r1488_27 +# 1488| r1488_29(glval) = FieldAddress[b] : r1488_28 +# 1488| r1488_30(unsigned int) = Load[?] : &:r1488_29, ~m0_4 +# 1488| m1488_31(unsigned int) = Store[?] : &:r1488_25, r1488_30 +# 1488| m1488_32(unknown) = Chi : total:m1488_24, partial:m1488_31 +# 1488| r1488_33(glval) = FieldAddress[r] : m1488_6 +# 1488| r1488_34(glval) = VariableAddress[(unnamed parameter 0)] : +# 1488| r1488_35(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_34, m0_2 +# 1488| r1488_36(glval) = CopyValue : r1488_35 +# 1488| r1488_37(glval) = FieldAddress[r] : r1488_36 +# 1488| r1488_38(int &) = Load[?] : &:r1488_37, ~m0_4 +# 1488| m1488_39(int &) = Store[?] : &:r1488_33, r1488_38 +# 1488| m1488_40(unknown) = Chi : total:m1488_32, partial:m1488_39 +# 1488| r1488_41(glval) = FieldAddress[p] : m1488_6 +# 1488| r1488_42(glval) = VariableAddress[(unnamed parameter 0)] : +# 1488| r1488_43(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_42, m0_2 +# 1488| r1488_44(glval) = CopyValue : r1488_43 +# 1488| r1488_45(glval) = FieldAddress[p] : r1488_44 +# 1488| r1488_46(int *) = Load[?] : &:r1488_45, ~m0_4 +# 1488| m1488_47(int *) = Store[?] : &:r1488_41, r1488_46 +# 1488| m1488_48(unknown) = Chi : total:m1488_40, partial:m1488_47 +# 1488| r1488_49(glval) = FieldAddress[xs] : m1488_6 +# 1488| r1488_50(glval) = VariableAddress[(unnamed parameter 0)] : +# 1488| r1488_51(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_50, m0_2 +# 1488| r1488_52(glval) = CopyValue : r1488_51 +# 1488| r1488_53(glval) = FieldAddress[xs] : r1488_52 +# 1488| r1488_54(int[2]) = Load[?] : &:r1488_53, ~m0_4 +# 1488| m1488_55(int[2]) = Store[?] : &:r1488_49, r1488_54 +# 1488| m1488_56(unknown) = Chi : total:m1488_48, partial:m1488_55 +# 1488| r1488_57(glval) = FieldAddress[r_alt] : m1488_6 +# 1488| r1488_58(glval) = VariableAddress[(unnamed parameter 0)] : +# 1488| r1488_59(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_58, m0_2 +# 1488| r1488_60(glval) = CopyValue : r1488_59 +# 1488| r1488_61(glval) = FieldAddress[r_alt] : r1488_60 +# 1488| r1488_62(int &) = Load[?] : &:r1488_61, ~m0_4 +# 1488| m1488_63(int &) = Store[?] : &:r1488_57, r1488_62 +# 1488| m1488_64(unknown) = Chi : total:m1488_56, partial:m1488_63 +# 1488| r1488_65(glval) = FieldAddress[m] : m1488_6 +# 1488| r1488_66(glval) = VariableAddress[(unnamed parameter 0)] : +# 1488| r1488_67(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_66, m0_2 +# 1488| r1488_68(glval) = CopyValue : r1488_67 +# 1488| r1488_69(glval) = FieldAddress[m] : r1488_68 +# 1488| r1488_70(StructuredBindingDataMemberMemberStruct) = Load[?] : &:r1488_69, ~m0_4 +# 1488| m1488_71(StructuredBindingDataMemberMemberStruct) = Store[?] : &:r1488_65, r1488_70 +# 1488| m1488_72(unknown) = Chi : total:m1488_64, partial:m1488_71 +# 1488| v1488_73(void) = NoOp : +# 1488| v1488_74(void) = ReturnIndirection[#this] : &:r1488_7, m1488_72 #-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, m0_4 -# 1486| v1486_75(void) = ReturnVoid : -# 1486| v1486_76(void) = AliasedUse : m1486_3 -# 1486| v1486_77(void) = ExitFunction : +# 1488| v1488_75(void) = ReturnVoid : +# 1488| v1488_76(void) = AliasedUse : m1488_3 +# 1488| v1488_77(void) = ExitFunction : -# 1499| void data_member_structured_binding() -# 1499| Block 0 -# 1499| v1499_1(void) = EnterFunction : -# 1499| m1499_2(unknown) = AliasedDefinition : -# 1499| m1499_3(unknown) = InitializeNonLocal : -# 1499| m1499_4(unknown) = Chi : total:m1499_2, partial:m1499_3 -# 1500| r1500_1(glval) = VariableAddress[s] : -# 1500| m1500_2(StructuredBindingDataMemberStruct) = Uninitialized[s] : &:r1500_1 -# 1500| r1500_3(glval) = FunctionAddress[StructuredBindingDataMemberStruct] : -# 1500| v1500_4(void) = Call[StructuredBindingDataMemberStruct] : func:r1500_3, this:r1500_1 -# 1500| m1500_5(unknown) = ^CallSideEffect : ~m1499_4 -# 1500| m1500_6(unknown) = Chi : total:m1499_4, partial:m1500_5 -# 1500| m1500_7(StructuredBindingDataMemberStruct) = ^IndirectMayWriteSideEffect[-1] : &:r1500_1 -# 1500| m1500_8(StructuredBindingDataMemberStruct) = Chi : total:m1500_2, partial:m1500_7 -# 1503| r1503_1(glval) = VariableAddress[(unnamed local variable)] : -# 1503| r1503_2(glval) = VariableAddress[s] : -# 1503| r1503_3(StructuredBindingDataMemberStruct) = Load[s] : &:r1503_2, m1500_8 -# 1503| m1503_4(StructuredBindingDataMemberStruct) = Store[(unnamed local variable)] : &:r1503_1, r1503_3 -# 1503| r1503_5(glval) = VariableAddress[i] : -# 1503| r1503_6(glval) = VariableAddress[(unnamed local variable)] : -# 1503| r1503_7(glval) = FieldAddress[i] : r1503_6 -# 1503| m1503_8(int &) = Store[i] : &:r1503_5, r1503_7 -# 1503| r1503_9(glval) = VariableAddress[d] : -# 1503| r1503_10(glval) = VariableAddress[(unnamed local variable)] : -# 1503| r1503_11(glval) = FieldAddress[d] : r1503_10 -# 1503| m1503_12(double &) = Store[d] : &:r1503_9, r1503_11 -# 1503| r1503_13(glval) = VariableAddress[b] : -# 1503| r1503_14(glval) = VariableAddress[(unnamed local variable)] : -# 1503| r1503_15(glval) = FieldAddress[b] : r1503_14 -# 1503| m1503_16(unsigned int &) = Store[b] : &:r1503_13, r1503_15 -# 1503| r1503_17(glval) = VariableAddress[r] : -# 1503| r1503_18(glval) = VariableAddress[(unnamed local variable)] : -# 1503| r1503_19(glval) = FieldAddress[r] : r1503_18 -# 1503| r1503_20(int &) = Load[?] : &:r1503_19, ~m1503_4 -# 1503| r1503_21(glval) = CopyValue : r1503_20 -# 1503| m1503_22(int &) = Store[r] : &:r1503_17, r1503_21 -# 1503| r1503_23(glval) = VariableAddress[p] : -# 1503| r1503_24(glval) = VariableAddress[(unnamed local variable)] : -# 1503| r1503_25(glval) = FieldAddress[p] : r1503_24 -# 1503| m1503_26(int *&) = Store[p] : &:r1503_23, r1503_25 -# 1503| r1503_27(glval) = VariableAddress[xs] : -# 1503| r1503_28(glval) = VariableAddress[(unnamed local variable)] : -# 1503| r1503_29(glval) = FieldAddress[xs] : r1503_28 -# 1503| m1503_30(int(&)[2]) = Store[xs] : &:r1503_27, r1503_29 -# 1503| r1503_31(glval) = VariableAddress[r_alt] : -# 1503| r1503_32(glval) = VariableAddress[(unnamed local variable)] : -# 1503| r1503_33(glval) = FieldAddress[r_alt] : r1503_32 -# 1503| r1503_34(int &) = Load[?] : &:r1503_33, ~m1503_4 -# 1503| r1503_35(glval) = CopyValue : r1503_34 -# 1503| m1503_36(int &) = Store[r_alt] : &:r1503_31, r1503_35 -# 1503| r1503_37(glval) = VariableAddress[m] : -# 1503| r1503_38(glval) = VariableAddress[(unnamed local variable)] : -# 1503| r1503_39(glval) = FieldAddress[m] : r1503_38 -# 1503| m1503_40(StructuredBindingDataMemberMemberStruct &) = Store[m] : &:r1503_37, r1503_39 -# 1504| r1504_1(double) = Constant[4.0] : -# 1504| r1504_2(glval) = VariableAddress[d] : -# 1504| r1504_3(double &) = Load[d] : &:r1504_2, m1503_12 -# 1504| m1504_4(double) = Store[?] : &:r1504_3, r1504_1 -# 1504| m1504_5(StructuredBindingDataMemberStruct) = Chi : total:m1503_4, partial:m1504_4 -# 1505| r1505_1(glval) = VariableAddress[rd] : -# 1505| r1505_2(glval) = VariableAddress[d] : -# 1505| r1505_3(double &) = Load[d] : &:r1505_2, m1503_12 -# 1505| r1505_4(double &) = CopyValue : r1505_3 -# 1505| m1505_5(double &) = Store[rd] : &:r1505_1, r1505_4 -# 1506| r1506_1(glval) = VariableAddress[v] : -# 1506| r1506_2(glval) = VariableAddress[i] : -# 1506| r1506_3(int &) = Load[i] : &:r1506_2, m1503_8 -# 1506| r1506_4(int) = Load[?] : &:r1506_3, ~m1503_4 -# 1506| m1506_5(int) = Store[v] : &:r1506_1, r1506_4 -# 1507| r1507_1(int) = Constant[5] : -# 1507| r1507_2(glval) = VariableAddress[r] : -# 1507| r1507_3(int &) = Load[r] : &:r1507_2, m1503_22 -# 1507| m1507_4(int) = Store[?] : &:r1507_3, r1507_1 -# 1507| m1507_5(unknown) = Chi : total:m1500_6, partial:m1507_4 -# 1508| r1508_1(int) = Constant[6] : -# 1508| r1508_2(glval) = VariableAddress[p] : -# 1508| r1508_3(int *&) = Load[p] : &:r1508_2, m1503_26 -# 1508| r1508_4(int *) = Load[?] : &:r1508_3, ~m1503_4 -# 1508| r1508_5(glval) = CopyValue : r1508_4 -# 1508| m1508_6(int) = Store[?] : &:r1508_5, r1508_1 -# 1508| m1508_7(unknown) = Chi : total:m1507_5, partial:m1508_6 -# 1509| r1509_1(glval) = VariableAddress[rr] : +# 1501| void data_member_structured_binding() +# 1501| Block 0 +# 1501| v1501_1(void) = EnterFunction : +# 1501| m1501_2(unknown) = AliasedDefinition : +# 1501| m1501_3(unknown) = InitializeNonLocal : +# 1501| m1501_4(unknown) = Chi : total:m1501_2, partial:m1501_3 +# 1502| r1502_1(glval) = VariableAddress[s] : +# 1502| m1502_2(StructuredBindingDataMemberStruct) = Uninitialized[s] : &:r1502_1 +# 1502| r1502_3(glval) = FunctionAddress[StructuredBindingDataMemberStruct] : +# 1502| v1502_4(void) = Call[StructuredBindingDataMemberStruct] : func:r1502_3, this:r1502_1 +# 1502| m1502_5(unknown) = ^CallSideEffect : ~m1501_4 +# 1502| m1502_6(unknown) = Chi : total:m1501_4, partial:m1502_5 +# 1502| m1502_7(StructuredBindingDataMemberStruct) = ^IndirectMayWriteSideEffect[-1] : &:r1502_1 +# 1502| m1502_8(StructuredBindingDataMemberStruct) = Chi : total:m1502_2, partial:m1502_7 +# 1505| r1505_1(glval) = VariableAddress[(unnamed local variable)] : +# 1505| r1505_2(glval) = VariableAddress[s] : +# 1505| r1505_3(StructuredBindingDataMemberStruct) = Load[s] : &:r1505_2, m1502_8 +# 1505| m1505_4(StructuredBindingDataMemberStruct) = Store[(unnamed local variable)] : &:r1505_1, r1505_3 +# 1505| r1505_5(glval) = VariableAddress[i] : +# 1505| r1505_6(glval) = VariableAddress[(unnamed local variable)] : +# 1505| r1505_7(glval) = FieldAddress[i] : r1505_6 +# 1505| m1505_8(int &) = Store[i] : &:r1505_5, r1505_7 +# 1505| r1505_9(glval) = VariableAddress[d] : +# 1505| r1505_10(glval) = VariableAddress[(unnamed local variable)] : +# 1505| r1505_11(glval) = FieldAddress[d] : r1505_10 +# 1505| m1505_12(double &) = Store[d] : &:r1505_9, r1505_11 +# 1505| r1505_13(glval) = VariableAddress[b] : +# 1505| r1505_14(glval) = VariableAddress[(unnamed local variable)] : +# 1505| r1505_15(glval) = FieldAddress[b] : r1505_14 +# 1505| m1505_16(unsigned int &) = Store[b] : &:r1505_13, r1505_15 +# 1505| r1505_17(glval) = VariableAddress[r] : +# 1505| r1505_18(glval) = VariableAddress[(unnamed local variable)] : +# 1505| r1505_19(glval) = FieldAddress[r] : r1505_18 +# 1505| r1505_20(int &) = Load[?] : &:r1505_19, ~m1505_4 +# 1505| r1505_21(glval) = CopyValue : r1505_20 +# 1505| m1505_22(int &) = Store[r] : &:r1505_17, r1505_21 +# 1505| r1505_23(glval) = VariableAddress[p] : +# 1505| r1505_24(glval) = VariableAddress[(unnamed local variable)] : +# 1505| r1505_25(glval) = FieldAddress[p] : r1505_24 +# 1505| m1505_26(int *&) = Store[p] : &:r1505_23, r1505_25 +# 1505| r1505_27(glval) = VariableAddress[xs] : +# 1505| r1505_28(glval) = VariableAddress[(unnamed local variable)] : +# 1505| r1505_29(glval) = FieldAddress[xs] : r1505_28 +# 1505| m1505_30(int(&)[2]) = Store[xs] : &:r1505_27, r1505_29 +# 1505| r1505_31(glval) = VariableAddress[r_alt] : +# 1505| r1505_32(glval) = VariableAddress[(unnamed local variable)] : +# 1505| r1505_33(glval) = FieldAddress[r_alt] : r1505_32 +# 1505| r1505_34(int &) = Load[?] : &:r1505_33, ~m1505_4 +# 1505| r1505_35(glval) = CopyValue : r1505_34 +# 1505| m1505_36(int &) = Store[r_alt] : &:r1505_31, r1505_35 +# 1505| r1505_37(glval) = VariableAddress[m] : +# 1505| r1505_38(glval) = VariableAddress[(unnamed local variable)] : +# 1505| r1505_39(glval) = FieldAddress[m] : r1505_38 +# 1505| m1505_40(StructuredBindingDataMemberMemberStruct &) = Store[m] : &:r1505_37, r1505_39 +# 1506| r1506_1(double) = Constant[4.0] : +# 1506| r1506_2(glval) = VariableAddress[d] : +# 1506| r1506_3(double &) = Load[d] : &:r1506_2, m1505_12 +# 1506| m1506_4(double) = Store[?] : &:r1506_3, r1506_1 +# 1506| m1506_5(StructuredBindingDataMemberStruct) = Chi : total:m1505_4, partial:m1506_4 +# 1507| r1507_1(glval) = VariableAddress[rd] : +# 1507| r1507_2(glval) = VariableAddress[d] : +# 1507| r1507_3(double &) = Load[d] : &:r1507_2, m1505_12 +# 1507| r1507_4(double &) = CopyValue : r1507_3 +# 1507| m1507_5(double &) = Store[rd] : &:r1507_1, r1507_4 +# 1508| r1508_1(glval) = VariableAddress[v] : +# 1508| r1508_2(glval) = VariableAddress[i] : +# 1508| r1508_3(int &) = Load[i] : &:r1508_2, m1505_8 +# 1508| r1508_4(int) = Load[?] : &:r1508_3, ~m1505_4 +# 1508| m1508_5(int) = Store[v] : &:r1508_1, r1508_4 +# 1509| r1509_1(int) = Constant[5] : # 1509| r1509_2(glval) = VariableAddress[r] : -# 1509| r1509_3(int &) = Load[r] : &:r1509_2, m1503_22 -# 1509| r1509_4(int &) = CopyValue : r1509_3 -# 1509| m1509_5(int &) = Store[rr] : &:r1509_1, r1509_4 -# 1510| r1510_1(glval) = VariableAddress[pr] : -# 1510| r1510_2(glval) = VariableAddress[r] : -# 1510| r1510_3(int &) = Load[r] : &:r1510_2, m1503_22 -# 1510| r1510_4(int *) = CopyValue : r1510_3 -# 1510| m1510_5(int *) = Store[pr] : &:r1510_1, r1510_4 -# 1511| r1511_1(glval) = VariableAddress[w] : +# 1509| r1509_3(int &) = Load[r] : &:r1509_2, m1505_22 +# 1509| m1509_4(int) = Store[?] : &:r1509_3, r1509_1 +# 1509| m1509_5(unknown) = Chi : total:m1502_6, partial:m1509_4 +# 1510| r1510_1(int) = Constant[6] : +# 1510| r1510_2(glval) = VariableAddress[p] : +# 1510| r1510_3(int *&) = Load[p] : &:r1510_2, m1505_26 +# 1510| r1510_4(int *) = Load[?] : &:r1510_3, ~m1505_4 +# 1510| r1510_5(glval) = CopyValue : r1510_4 +# 1510| m1510_6(int) = Store[?] : &:r1510_5, r1510_1 +# 1510| m1510_7(unknown) = Chi : total:m1509_5, partial:m1510_6 +# 1511| r1511_1(glval) = VariableAddress[rr] : # 1511| r1511_2(glval) = VariableAddress[r] : -# 1511| r1511_3(int &) = Load[r] : &:r1511_2, m1503_22 -# 1511| r1511_4(int) = Load[?] : &:r1511_3, ~m1508_7 -# 1511| m1511_5(int) = Store[w] : &:r1511_1, r1511_4 -# 1515| r1515_1(glval) = VariableAddress[unnamed_local_variable] : -# 1515| r1515_2(glval) = VariableAddress[s] : -# 1515| r1515_3(StructuredBindingDataMemberStruct) = Load[s] : &:r1515_2, m1500_8 -# 1515| m1515_4(StructuredBindingDataMemberStruct) = Store[unnamed_local_variable] : &:r1515_1, r1515_3 -# 1516| r1516_1(glval) = VariableAddress[i] : -# 1516| r1516_2(glval) = VariableAddress[unnamed_local_variable] : -# 1516| r1516_3(glval) = FieldAddress[i] : r1516_2 -# 1516| r1516_4(int &) = CopyValue : r1516_3 -# 1516| m1516_5(int &) = Store[i] : &:r1516_1, r1516_4 -# 1517| r1517_1(glval) = VariableAddress[d] : -# 1517| r1517_2(glval) = VariableAddress[unnamed_local_variable] : -# 1517| r1517_3(glval) = FieldAddress[d] : r1517_2 -# 1517| r1517_4(double &) = CopyValue : r1517_3 -# 1517| m1517_5(double &) = Store[d] : &:r1517_1, r1517_4 -# 1519| r1519_1(glval) = VariableAddress[r] : +# 1511| r1511_3(int &) = Load[r] : &:r1511_2, m1505_22 +# 1511| r1511_4(int &) = CopyValue : r1511_3 +# 1511| m1511_5(int &) = Store[rr] : &:r1511_1, r1511_4 +# 1512| r1512_1(glval) = VariableAddress[pr] : +# 1512| r1512_2(glval) = VariableAddress[r] : +# 1512| r1512_3(int &) = Load[r] : &:r1512_2, m1505_22 +# 1512| r1512_4(int *) = CopyValue : r1512_3 +# 1512| m1512_5(int *) = Store[pr] : &:r1512_1, r1512_4 +# 1513| r1513_1(glval) = VariableAddress[w] : +# 1513| r1513_2(glval) = VariableAddress[r] : +# 1513| r1513_3(int &) = Load[r] : &:r1513_2, m1505_22 +# 1513| r1513_4(int) = Load[?] : &:r1513_3, ~m1510_7 +# 1513| m1513_5(int) = Store[w] : &:r1513_1, r1513_4 +# 1517| r1517_1(glval) = VariableAddress[unnamed_local_variable] : +# 1517| r1517_2(glval) = VariableAddress[s] : +# 1517| r1517_3(StructuredBindingDataMemberStruct) = Load[s] : &:r1517_2, m1502_8 +# 1517| m1517_4(StructuredBindingDataMemberStruct) = Store[unnamed_local_variable] : &:r1517_1, r1517_3 +# 1518| r1518_1(glval) = VariableAddress[i] : +# 1518| r1518_2(glval) = VariableAddress[unnamed_local_variable] : +# 1518| r1518_3(glval) = FieldAddress[i] : r1518_2 +# 1518| r1518_4(int &) = CopyValue : r1518_3 +# 1518| m1518_5(int &) = Store[i] : &:r1518_1, r1518_4 +# 1519| r1519_1(glval) = VariableAddress[d] : # 1519| r1519_2(glval) = VariableAddress[unnamed_local_variable] : -# 1519| r1519_3(glval) = FieldAddress[r] : r1519_2 -# 1519| r1519_4(int &) = Load[?] : &:r1519_3, ~m1515_4 -# 1519| r1519_5(glval) = CopyValue : r1519_4 -# 1519| r1519_6(int &) = CopyValue : r1519_5 -# 1519| m1519_7(int &) = Store[r] : &:r1519_1, r1519_6 -# 1520| r1520_1(glval) = VariableAddress[p] : -# 1520| r1520_2(glval) = VariableAddress[unnamed_local_variable] : -# 1520| r1520_3(glval) = FieldAddress[p] : r1520_2 -# 1520| r1520_4(int *&) = CopyValue : r1520_3 -# 1520| m1520_5(int *&) = Store[p] : &:r1520_1, r1520_4 -# 1521| r1521_1(double) = Constant[4.0] : -# 1521| r1521_2(glval) = VariableAddress[d] : -# 1521| r1521_3(double &) = Load[d] : &:r1521_2, m1517_5 -# 1521| r1521_4(glval) = CopyValue : r1521_3 -# 1521| m1521_5(double) = Store[?] : &:r1521_4, r1521_1 -# 1521| m1521_6(StructuredBindingDataMemberStruct) = Chi : total:m1515_4, partial:m1521_5 -# 1522| r1522_1(glval) = VariableAddress[rd] : -# 1522| r1522_2(glval) = VariableAddress[d] : -# 1522| r1522_3(double &) = Load[d] : &:r1522_2, m1517_5 -# 1522| r1522_4(glval) = CopyValue : r1522_3 -# 1522| r1522_5(double &) = CopyValue : r1522_4 -# 1522| m1522_6(double &) = Store[rd] : &:r1522_1, r1522_5 -# 1523| r1523_1(glval) = VariableAddress[v] : -# 1523| r1523_2(glval) = VariableAddress[i] : -# 1523| r1523_3(int &) = Load[i] : &:r1523_2, m1516_5 -# 1523| r1523_4(int) = Load[?] : &:r1523_3, ~m1515_4 -# 1523| m1523_5(int) = Store[v] : &:r1523_1, r1523_4 -# 1524| r1524_1(int) = Constant[5] : -# 1524| r1524_2(glval) = VariableAddress[r] : -# 1524| r1524_3(int &) = Load[r] : &:r1524_2, m1519_7 -# 1524| r1524_4(glval) = CopyValue : r1524_3 -# 1524| m1524_5(int) = Store[?] : &:r1524_4, r1524_1 -# 1524| m1524_6(unknown) = Chi : total:m1508_7, partial:m1524_5 -# 1525| r1525_1(int) = Constant[6] : -# 1525| r1525_2(glval) = VariableAddress[p] : -# 1525| r1525_3(int *&) = Load[p] : &:r1525_2, m1520_5 -# 1525| r1525_4(int *) = Load[?] : &:r1525_3, ~m1515_4 -# 1525| r1525_5(glval) = CopyValue : r1525_4 -# 1525| m1525_6(int) = Store[?] : &:r1525_5, r1525_1 -# 1525| m1525_7(unknown) = Chi : total:m1524_6, partial:m1525_6 -# 1526| r1526_1(glval) = VariableAddress[rr] : +# 1519| r1519_3(glval) = FieldAddress[d] : r1519_2 +# 1519| r1519_4(double &) = CopyValue : r1519_3 +# 1519| m1519_5(double &) = Store[d] : &:r1519_1, r1519_4 +# 1521| r1521_1(glval) = VariableAddress[r] : +# 1521| r1521_2(glval) = VariableAddress[unnamed_local_variable] : +# 1521| r1521_3(glval) = FieldAddress[r] : r1521_2 +# 1521| r1521_4(int &) = Load[?] : &:r1521_3, ~m1517_4 +# 1521| r1521_5(glval) = CopyValue : r1521_4 +# 1521| r1521_6(int &) = CopyValue : r1521_5 +# 1521| m1521_7(int &) = Store[r] : &:r1521_1, r1521_6 +# 1522| r1522_1(glval) = VariableAddress[p] : +# 1522| r1522_2(glval) = VariableAddress[unnamed_local_variable] : +# 1522| r1522_3(glval) = FieldAddress[p] : r1522_2 +# 1522| r1522_4(int *&) = CopyValue : r1522_3 +# 1522| m1522_5(int *&) = Store[p] : &:r1522_1, r1522_4 +# 1523| r1523_1(double) = Constant[4.0] : +# 1523| r1523_2(glval) = VariableAddress[d] : +# 1523| r1523_3(double &) = Load[d] : &:r1523_2, m1519_5 +# 1523| r1523_4(glval) = CopyValue : r1523_3 +# 1523| m1523_5(double) = Store[?] : &:r1523_4, r1523_1 +# 1523| m1523_6(StructuredBindingDataMemberStruct) = Chi : total:m1517_4, partial:m1523_5 +# 1524| r1524_1(glval) = VariableAddress[rd] : +# 1524| r1524_2(glval) = VariableAddress[d] : +# 1524| r1524_3(double &) = Load[d] : &:r1524_2, m1519_5 +# 1524| r1524_4(glval) = CopyValue : r1524_3 +# 1524| r1524_5(double &) = CopyValue : r1524_4 +# 1524| m1524_6(double &) = Store[rd] : &:r1524_1, r1524_5 +# 1525| r1525_1(glval) = VariableAddress[v] : +# 1525| r1525_2(glval) = VariableAddress[i] : +# 1525| r1525_3(int &) = Load[i] : &:r1525_2, m1518_5 +# 1525| r1525_4(int) = Load[?] : &:r1525_3, ~m1517_4 +# 1525| m1525_5(int) = Store[v] : &:r1525_1, r1525_4 +# 1526| r1526_1(int) = Constant[5] : # 1526| r1526_2(glval) = VariableAddress[r] : -# 1526| r1526_3(int &) = Load[r] : &:r1526_2, m1519_7 +# 1526| r1526_3(int &) = Load[r] : &:r1526_2, m1521_7 # 1526| r1526_4(glval) = CopyValue : r1526_3 -# 1526| r1526_5(int &) = CopyValue : r1526_4 -# 1526| m1526_6(int &) = Store[rr] : &:r1526_1, r1526_5 -# 1527| r1527_1(glval) = VariableAddress[pr] : -# 1527| r1527_2(glval) = VariableAddress[r] : -# 1527| r1527_3(int &) = Load[r] : &:r1527_2, m1519_7 -# 1527| r1527_4(glval) = CopyValue : r1527_3 -# 1527| r1527_5(int *) = CopyValue : r1527_4 -# 1527| m1527_6(int *) = Store[pr] : &:r1527_1, r1527_5 -# 1528| r1528_1(glval) = VariableAddress[w] : +# 1526| m1526_5(int) = Store[?] : &:r1526_4, r1526_1 +# 1526| m1526_6(unknown) = Chi : total:m1510_7, partial:m1526_5 +# 1527| r1527_1(int) = Constant[6] : +# 1527| r1527_2(glval) = VariableAddress[p] : +# 1527| r1527_3(int *&) = Load[p] : &:r1527_2, m1522_5 +# 1527| r1527_4(int *) = Load[?] : &:r1527_3, ~m1517_4 +# 1527| r1527_5(glval) = CopyValue : r1527_4 +# 1527| m1527_6(int) = Store[?] : &:r1527_5, r1527_1 +# 1527| m1527_7(unknown) = Chi : total:m1526_6, partial:m1527_6 +# 1528| r1528_1(glval) = VariableAddress[rr] : # 1528| r1528_2(glval) = VariableAddress[r] : -# 1528| r1528_3(int &) = Load[r] : &:r1528_2, m1519_7 -# 1528| r1528_4(int) = Load[?] : &:r1528_3, ~m1525_7 -# 1528| m1528_5(int) = Store[w] : &:r1528_1, r1528_4 -# 1530| v1530_1(void) = NoOp : -# 1499| v1499_5(void) = ReturnVoid : -# 1499| v1499_6(void) = AliasedUse : ~m1525_7 -# 1499| v1499_7(void) = ExitFunction : +# 1528| r1528_3(int &) = Load[r] : &:r1528_2, m1521_7 +# 1528| r1528_4(glval) = CopyValue : r1528_3 +# 1528| r1528_5(int &) = CopyValue : r1528_4 +# 1528| m1528_6(int &) = Store[rr] : &:r1528_1, r1528_5 +# 1529| r1529_1(glval) = VariableAddress[pr] : +# 1529| r1529_2(glval) = VariableAddress[r] : +# 1529| r1529_3(int &) = Load[r] : &:r1529_2, m1521_7 +# 1529| r1529_4(glval) = CopyValue : r1529_3 +# 1529| r1529_5(int *) = CopyValue : r1529_4 +# 1529| m1529_6(int *) = Store[pr] : &:r1529_1, r1529_5 +# 1530| r1530_1(glval) = VariableAddress[w] : +# 1530| r1530_2(glval) = VariableAddress[r] : +# 1530| r1530_3(int &) = Load[r] : &:r1530_2, m1521_7 +# 1530| r1530_4(int) = Load[?] : &:r1530_3, ~m1527_7 +# 1530| m1530_5(int) = Store[w] : &:r1530_1, r1530_4 +# 1532| v1532_1(void) = NoOp : +# 1501| v1501_5(void) = ReturnVoid : +# 1501| v1501_6(void) = AliasedUse : ~m1527_7 +# 1501| v1501_7(void) = ExitFunction : -# 1539| void StructuredBindingTupleRefGet::StructuredBindingTupleRefGet() -# 1539| Block 0 -# 1539| v1539_1(void) = EnterFunction : -# 1539| m1539_2(unknown) = AliasedDefinition : -# 1539| m1539_3(unknown) = InitializeNonLocal : -# 1539| m1539_4(unknown) = Chi : total:m1539_2, partial:m1539_3 -# 1539| r1539_5(glval) = VariableAddress[#this] : -# 1539| m1539_6(glval) = InitializeParameter[#this] : &:r1539_5 -# 1539| r1539_7(glval) = Load[#this] : &:r1539_5, m1539_6 -# 1539| m1539_8(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1539_7 -# 1539| v1539_9(void) = NoOp : -# 1539| v1539_10(void) = ReturnIndirection[#this] : &:r1539_7, m1539_8 -# 1539| v1539_11(void) = ReturnVoid : -# 1539| v1539_12(void) = AliasedUse : m1539_3 -# 1539| v1539_13(void) = ExitFunction : +# 1541| void StructuredBindingTupleRefGet::StructuredBindingTupleRefGet() +# 1541| Block 0 +# 1541| v1541_1(void) = EnterFunction : +# 1541| m1541_2(unknown) = AliasedDefinition : +# 1541| m1541_3(unknown) = InitializeNonLocal : +# 1541| m1541_4(unknown) = Chi : total:m1541_2, partial:m1541_3 +# 1541| r1541_5(glval) = VariableAddress[#this] : +# 1541| m1541_6(glval) = InitializeParameter[#this] : &:r1541_5 +# 1541| r1541_7(glval) = Load[#this] : &:r1541_5, m1541_6 +# 1541| m1541_8(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1541_7 +# 1541| v1541_9(void) = NoOp : +# 1541| v1541_10(void) = ReturnIndirection[#this] : &:r1541_7, m1541_8 +# 1541| v1541_11(void) = ReturnVoid : +# 1541| v1541_12(void) = AliasedUse : m1541_3 +# 1541| v1541_13(void) = ExitFunction : -# 1539| void StructuredBindingTupleRefGet::StructuredBindingTupleRefGet(StructuredBindingTupleRefGet const&) -# 1539| Block 0 -# 1539| v1539_1(void) = EnterFunction : -# 1539| m1539_2(unknown) = AliasedDefinition : -# 1539| m1539_3(unknown) = InitializeNonLocal : -# 1539| m1539_4(unknown) = Chi : total:m1539_2, partial:m1539_3 -# 1539| r1539_5(glval) = VariableAddress[#this] : -# 1539| m1539_6(glval) = InitializeParameter[#this] : &:r1539_5 -# 1539| r1539_7(glval) = Load[#this] : &:r1539_5, m1539_6 -# 1539| m1539_8(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1539_7 +# 1541| void StructuredBindingTupleRefGet::StructuredBindingTupleRefGet(StructuredBindingTupleRefGet const&) +# 1541| Block 0 +# 1541| v1541_1(void) = EnterFunction : +# 1541| m1541_2(unknown) = AliasedDefinition : +# 1541| m1541_3(unknown) = InitializeNonLocal : +# 1541| m1541_4(unknown) = Chi : total:m1541_2, partial:m1541_3 +# 1541| r1541_5(glval) = VariableAddress[#this] : +# 1541| m1541_6(glval) = InitializeParameter[#this] : &:r1541_5 +# 1541| r1541_7(glval) = Load[#this] : &:r1541_5, m1541_6 +# 1541| m1541_8(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1541_7 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| m0_2(StructuredBindingTupleRefGet &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r0_1, m0_2 #-----| m0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 1539| r1539_9(glval) = FieldAddress[i] : m1539_6 -# 1539| r1539_10(glval) = VariableAddress[(unnamed parameter 0)] : -# 1539| r1539_11(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r1539_10, m0_2 -# 1539| r1539_12(glval) = CopyValue : r1539_11 -# 1539| r1539_13(glval) = FieldAddress[i] : r1539_12 -# 1539| r1539_14(int) = Load[?] : &:r1539_13, ~m0_4 -# 1539| m1539_15(int) = Store[?] : &:r1539_9, r1539_14 -# 1539| m1539_16(unknown) = Chi : total:m1539_8, partial:m1539_15 -# 1539| r1539_17(glval) = FieldAddress[d] : m1539_6 -# 1539| r1539_18(glval) = VariableAddress[(unnamed parameter 0)] : -# 1539| r1539_19(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r1539_18, m0_2 -# 1539| r1539_20(glval) = CopyValue : r1539_19 -# 1539| r1539_21(glval) = FieldAddress[d] : r1539_20 -# 1539| r1539_22(double) = Load[?] : &:r1539_21, ~m0_4 -# 1539| m1539_23(double) = Store[?] : &:r1539_17, r1539_22 -# 1539| m1539_24(unknown) = Chi : total:m1539_16, partial:m1539_23 -# 1539| r1539_25(glval) = FieldAddress[r] : m1539_6 -# 1539| r1539_26(glval) = VariableAddress[(unnamed parameter 0)] : -# 1539| r1539_27(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r1539_26, m0_2 -# 1539| r1539_28(glval) = CopyValue : r1539_27 -# 1539| r1539_29(glval) = FieldAddress[r] : r1539_28 -# 1539| r1539_30(int &) = Load[?] : &:r1539_29, ~m0_4 -# 1539| m1539_31(int &) = Store[?] : &:r1539_25, r1539_30 -# 1539| m1539_32(unknown) = Chi : total:m1539_24, partial:m1539_31 -# 1539| v1539_33(void) = NoOp : -# 1539| v1539_34(void) = ReturnIndirection[#this] : &:r1539_7, m1539_32 +# 1541| r1541_9(glval) = FieldAddress[i] : m1541_6 +# 1541| r1541_10(glval) = VariableAddress[(unnamed parameter 0)] : +# 1541| r1541_11(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r1541_10, m0_2 +# 1541| r1541_12(glval) = CopyValue : r1541_11 +# 1541| r1541_13(glval) = FieldAddress[i] : r1541_12 +# 1541| r1541_14(int) = Load[?] : &:r1541_13, ~m0_4 +# 1541| m1541_15(int) = Store[?] : &:r1541_9, r1541_14 +# 1541| m1541_16(unknown) = Chi : total:m1541_8, partial:m1541_15 +# 1541| r1541_17(glval) = FieldAddress[d] : m1541_6 +# 1541| r1541_18(glval) = VariableAddress[(unnamed parameter 0)] : +# 1541| r1541_19(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r1541_18, m0_2 +# 1541| r1541_20(glval) = CopyValue : r1541_19 +# 1541| r1541_21(glval) = FieldAddress[d] : r1541_20 +# 1541| r1541_22(double) = Load[?] : &:r1541_21, ~m0_4 +# 1541| m1541_23(double) = Store[?] : &:r1541_17, r1541_22 +# 1541| m1541_24(unknown) = Chi : total:m1541_16, partial:m1541_23 +# 1541| r1541_25(glval) = FieldAddress[r] : m1541_6 +# 1541| r1541_26(glval) = VariableAddress[(unnamed parameter 0)] : +# 1541| r1541_27(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r1541_26, m0_2 +# 1541| r1541_28(glval) = CopyValue : r1541_27 +# 1541| r1541_29(glval) = FieldAddress[r] : r1541_28 +# 1541| r1541_30(int &) = Load[?] : &:r1541_29, ~m0_4 +# 1541| m1541_31(int &) = Store[?] : &:r1541_25, r1541_30 +# 1541| m1541_32(unknown) = Chi : total:m1541_24, partial:m1541_31 +# 1541| v1541_33(void) = NoOp : +# 1541| v1541_34(void) = ReturnIndirection[#this] : &:r1541_7, m1541_32 #-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, m0_4 -# 1539| v1539_35(void) = ReturnVoid : -# 1539| v1539_36(void) = AliasedUse : m1539_3 -# 1539| v1539_37(void) = ExitFunction : +# 1541| v1541_35(void) = ReturnVoid : +# 1541| v1541_36(void) = AliasedUse : m1541_3 +# 1541| v1541_37(void) = ExitFunction : -# 1567| std::tuple_element::type& StructuredBindingTupleRefGet::get() -# 1567| Block 0 -# 1567| v1567_1(void) = EnterFunction : -# 1567| m1567_2(unknown) = AliasedDefinition : -# 1567| m1567_3(unknown) = InitializeNonLocal : -# 1567| m1567_4(unknown) = Chi : total:m1567_2, partial:m1567_3 -# 1567| r1567_5(glval) = VariableAddress[#this] : -# 1567| m1567_6(glval) = InitializeParameter[#this] : &:r1567_5 -# 1567| r1567_7(glval) = Load[#this] : &:r1567_5, m1567_6 -# 1567| m1567_8(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1567_7 -# 1568| r1568_1(glval) = VariableAddress[#return] : -# 1568| r1568_2(glval) = VariableAddress[#this] : -# 1568| r1568_3(StructuredBindingTupleRefGet *) = Load[#this] : &:r1568_2, m1567_6 -# 1568| r1568_4(glval) = FieldAddress[i] : r1568_3 -#-----| r0_1(int &) = CopyValue : r1568_4 -#-----| m0_2(int &) = Store[#return] : &:r1568_1, r0_1 -# 1567| v1567_9(void) = ReturnIndirection[#this] : &:r1567_7, m1567_8 -# 1567| r1567_10(glval) = VariableAddress[#return] : -# 1567| v1567_11(void) = ReturnValue : &:r1567_10, m0_2 -# 1567| v1567_12(void) = AliasedUse : m1567_3 -# 1567| v1567_13(void) = ExitFunction : +# 1569| std::tuple_element::type& StructuredBindingTupleRefGet::get() +# 1569| Block 0 +# 1569| v1569_1(void) = EnterFunction : +# 1569| m1569_2(unknown) = AliasedDefinition : +# 1569| m1569_3(unknown) = InitializeNonLocal : +# 1569| m1569_4(unknown) = Chi : total:m1569_2, partial:m1569_3 +# 1569| r1569_5(glval) = VariableAddress[#this] : +# 1569| m1569_6(glval) = InitializeParameter[#this] : &:r1569_5 +# 1569| r1569_7(glval) = Load[#this] : &:r1569_5, m1569_6 +# 1569| m1569_8(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1569_7 +# 1570| r1570_1(glval) = VariableAddress[#return] : +# 1570| r1570_2(glval) = VariableAddress[#this] : +# 1570| r1570_3(StructuredBindingTupleRefGet *) = Load[#this] : &:r1570_2, m1569_6 +# 1570| r1570_4(glval) = FieldAddress[i] : r1570_3 +#-----| r0_1(int &) = CopyValue : r1570_4 +#-----| m0_2(int &) = Store[#return] : &:r1570_1, r0_1 +# 1569| v1569_9(void) = ReturnIndirection[#this] : &:r1569_7, m1569_8 +# 1569| r1569_10(glval) = VariableAddress[#return] : +# 1569| v1569_11(void) = ReturnValue : &:r1569_10, m0_2 +# 1569| v1569_12(void) = AliasedUse : m1569_3 +# 1569| v1569_13(void) = ExitFunction : -# 1571| std::tuple_element::type& StructuredBindingTupleRefGet::get() -# 1571| Block 0 -# 1571| v1571_1(void) = EnterFunction : -# 1571| m1571_2(unknown) = AliasedDefinition : -# 1571| m1571_3(unknown) = InitializeNonLocal : -# 1571| m1571_4(unknown) = Chi : total:m1571_2, partial:m1571_3 -# 1571| r1571_5(glval) = VariableAddress[#this] : -# 1571| m1571_6(glval) = InitializeParameter[#this] : &:r1571_5 -# 1571| r1571_7(glval) = Load[#this] : &:r1571_5, m1571_6 -# 1571| m1571_8(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1571_7 -# 1572| r1572_1(glval) = VariableAddress[#return] : -# 1572| r1572_2(glval) = VariableAddress[#this] : -# 1572| r1572_3(StructuredBindingTupleRefGet *) = Load[#this] : &:r1572_2, m1571_6 -# 1572| r1572_4(glval) = FieldAddress[d] : r1572_3 -#-----| r0_1(double &) = CopyValue : r1572_4 -#-----| m0_2(double &) = Store[#return] : &:r1572_1, r0_1 -# 1571| v1571_9(void) = ReturnIndirection[#this] : &:r1571_7, m1571_8 -# 1571| r1571_10(glval) = VariableAddress[#return] : -# 1571| v1571_11(void) = ReturnValue : &:r1571_10, m0_2 -# 1571| v1571_12(void) = AliasedUse : m1571_3 -# 1571| v1571_13(void) = ExitFunction : +# 1573| std::tuple_element::type& StructuredBindingTupleRefGet::get() +# 1573| Block 0 +# 1573| v1573_1(void) = EnterFunction : +# 1573| m1573_2(unknown) = AliasedDefinition : +# 1573| m1573_3(unknown) = InitializeNonLocal : +# 1573| m1573_4(unknown) = Chi : total:m1573_2, partial:m1573_3 +# 1573| r1573_5(glval) = VariableAddress[#this] : +# 1573| m1573_6(glval) = InitializeParameter[#this] : &:r1573_5 +# 1573| r1573_7(glval) = Load[#this] : &:r1573_5, m1573_6 +# 1573| m1573_8(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1573_7 +# 1574| r1574_1(glval) = VariableAddress[#return] : +# 1574| r1574_2(glval) = VariableAddress[#this] : +# 1574| r1574_3(StructuredBindingTupleRefGet *) = Load[#this] : &:r1574_2, m1573_6 +# 1574| r1574_4(glval) = FieldAddress[d] : r1574_3 +#-----| r0_1(double &) = CopyValue : r1574_4 +#-----| m0_2(double &) = Store[#return] : &:r1574_1, r0_1 +# 1573| v1573_9(void) = ReturnIndirection[#this] : &:r1573_7, m1573_8 +# 1573| r1573_10(glval) = VariableAddress[#return] : +# 1573| v1573_11(void) = ReturnValue : &:r1573_10, m0_2 +# 1573| v1573_12(void) = AliasedUse : m1573_3 +# 1573| v1573_13(void) = ExitFunction : -# 1575| std::tuple_element::type StructuredBindingTupleRefGet::get() -# 1575| Block 0 -# 1575| v1575_1(void) = EnterFunction : -# 1575| m1575_2(unknown) = AliasedDefinition : -# 1575| m1575_3(unknown) = InitializeNonLocal : -# 1575| m1575_4(unknown) = Chi : total:m1575_2, partial:m1575_3 -# 1575| r1575_5(glval) = VariableAddress[#this] : -# 1575| m1575_6(glval) = InitializeParameter[#this] : &:r1575_5 -# 1575| r1575_7(glval) = Load[#this] : &:r1575_5, m1575_6 -# 1575| m1575_8(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1575_7 -# 1576| r1576_1(glval) = VariableAddress[#return] : -# 1576| r1576_2(glval) = VariableAddress[#this] : -# 1576| r1576_3(StructuredBindingTupleRefGet *) = Load[#this] : &:r1576_2, m1575_6 -# 1576| r1576_4(glval) = FieldAddress[r] : r1576_3 -# 1576| r1576_5(int &) = Load[?] : &:r1576_4, ~m1575_8 -# 1576| r1576_6(glval) = CopyValue : r1576_5 -# 1576| r1576_7(int &) = CopyValue : r1576_6 -# 1576| m1576_8(int &) = Store[#return] : &:r1576_1, r1576_7 -# 1575| v1575_9(void) = ReturnIndirection[#this] : &:r1575_7, m1575_8 -# 1575| r1575_10(glval) = VariableAddress[#return] : -# 1575| v1575_11(void) = ReturnValue : &:r1575_10, m1576_8 -# 1575| v1575_12(void) = AliasedUse : m1575_3 -# 1575| v1575_13(void) = ExitFunction : +# 1577| std::tuple_element::type StructuredBindingTupleRefGet::get() +# 1577| Block 0 +# 1577| v1577_1(void) = EnterFunction : +# 1577| m1577_2(unknown) = AliasedDefinition : +# 1577| m1577_3(unknown) = InitializeNonLocal : +# 1577| m1577_4(unknown) = Chi : total:m1577_2, partial:m1577_3 +# 1577| r1577_5(glval) = VariableAddress[#this] : +# 1577| m1577_6(glval) = InitializeParameter[#this] : &:r1577_5 +# 1577| r1577_7(glval) = Load[#this] : &:r1577_5, m1577_6 +# 1577| m1577_8(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1577_7 +# 1578| r1578_1(glval) = VariableAddress[#return] : +# 1578| r1578_2(glval) = VariableAddress[#this] : +# 1578| r1578_3(StructuredBindingTupleRefGet *) = Load[#this] : &:r1578_2, m1577_6 +# 1578| r1578_4(glval) = FieldAddress[r] : r1578_3 +# 1578| r1578_5(int &) = Load[?] : &:r1578_4, ~m1577_8 +# 1578| r1578_6(glval) = CopyValue : r1578_5 +# 1578| r1578_7(int &) = CopyValue : r1578_6 +# 1578| m1578_8(int &) = Store[#return] : &:r1578_1, r1578_7 +# 1577| v1577_9(void) = ReturnIndirection[#this] : &:r1577_7, m1577_8 +# 1577| r1577_10(glval) = VariableAddress[#return] : +# 1577| v1577_11(void) = ReturnValue : &:r1577_10, m1578_8 +# 1577| v1577_12(void) = AliasedUse : m1577_3 +# 1577| v1577_13(void) = ExitFunction : -# 1579| void tuple_structured_binding_ref_get() -# 1579| Block 0 -# 1579| v1579_1(void) = EnterFunction : -# 1579| m1579_2(unknown) = AliasedDefinition : -# 1579| m1579_3(unknown) = InitializeNonLocal : -# 1579| m1579_4(unknown) = Chi : total:m1579_2, partial:m1579_3 -# 1580| r1580_1(glval) = VariableAddress[t] : -# 1580| m1580_2(StructuredBindingTupleRefGet) = Uninitialized[t] : &:r1580_1 -# 1580| r1580_3(glval) = FunctionAddress[StructuredBindingTupleRefGet] : -# 1580| v1580_4(void) = Call[StructuredBindingTupleRefGet] : func:r1580_3, this:r1580_1 -# 1580| m1580_5(unknown) = ^CallSideEffect : ~m1579_4 -# 1580| m1580_6(unknown) = Chi : total:m1579_4, partial:m1580_5 -# 1580| m1580_7(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1580_1 -# 1580| m1580_8(StructuredBindingTupleRefGet) = Chi : total:m1580_2, partial:m1580_7 -# 1583| r1583_1(glval) = VariableAddress[(unnamed local variable)] : -# 1583| r1583_2(glval) = VariableAddress[t] : -# 1583| r1583_3(StructuredBindingTupleRefGet) = Load[t] : &:r1583_2, m1580_8 -# 1583| m1583_4(StructuredBindingTupleRefGet) = Store[(unnamed local variable)] : &:r1583_1, r1583_3 -# 1583| r1583_5(glval) = VariableAddress[i] : -# 1583| r1583_6(glval) = VariableAddress[(unnamed local variable)] : -# 1583| r1583_7(glval) = FunctionAddress[get] : -# 1583| r1583_8(int &) = Call[get] : func:r1583_7, this:r1583_6 -# 1583| m1583_9(unknown) = ^CallSideEffect : ~m1580_6 -# 1583| m1583_10(unknown) = Chi : total:m1580_6, partial:m1583_9 -# 1583| v1583_11(void) = ^IndirectReadSideEffect[-1] : &:r1583_6, m1583_4 -# 1583| m1583_12(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1583_6 -# 1583| m1583_13(StructuredBindingTupleRefGet) = Chi : total:m1583_4, partial:m1583_12 -# 1583| r1583_14(glval) = CopyValue : r1583_8 -# 1583| r1583_15(int &) = CopyValue : r1583_14 -# 1583| m1583_16(int &) = Store[i] : &:r1583_5, r1583_15 -# 1583| r1583_17(glval) = VariableAddress[d] : -# 1583| r1583_18(glval) = VariableAddress[(unnamed local variable)] : -# 1583| r1583_19(glval) = FunctionAddress[get] : -# 1583| r1583_20(double &) = Call[get] : func:r1583_19, this:r1583_18 -# 1583| m1583_21(unknown) = ^CallSideEffect : ~m1583_10 -# 1583| m1583_22(unknown) = Chi : total:m1583_10, partial:m1583_21 -# 1583| v1583_23(void) = ^IndirectReadSideEffect[-1] : &:r1583_18, m1583_13 -# 1583| m1583_24(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1583_18 -# 1583| m1583_25(StructuredBindingTupleRefGet) = Chi : total:m1583_13, partial:m1583_24 -# 1583| r1583_26(glval) = CopyValue : r1583_20 -# 1583| r1583_27(double &) = CopyValue : r1583_26 -# 1583| m1583_28(double &) = Store[d] : &:r1583_17, r1583_27 -# 1583| r1583_29(glval) = VariableAddress[r] : -# 1583| r1583_30(glval) = VariableAddress[(unnamed local variable)] : -# 1583| r1583_31(glval) = FunctionAddress[get] : -# 1583| r1583_32(int &) = Call[get] : func:r1583_31, this:r1583_30 -# 1583| m1583_33(unknown) = ^CallSideEffect : ~m1583_22 -# 1583| m1583_34(unknown) = Chi : total:m1583_22, partial:m1583_33 -# 1583| v1583_35(void) = ^IndirectReadSideEffect[-1] : &:r1583_30, m1583_25 -# 1583| m1583_36(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1583_30 -# 1583| m1583_37(StructuredBindingTupleRefGet) = Chi : total:m1583_25, partial:m1583_36 -# 1583| r1583_38(glval) = CopyValue : r1583_32 -# 1583| r1583_39(int &) = CopyValue : r1583_38 -# 1583| m1583_40(int &) = Store[r] : &:r1583_29, r1583_39 -# 1584| r1584_1(double) = Constant[4.0] : -# 1584| r1584_2(glval) = VariableAddress[d] : -# 1584| r1584_3(double &) = Load[d] : &:r1584_2, m1583_28 -# 1584| r1584_4(glval) = CopyValue : r1584_3 -# 1584| m1584_5(double) = Store[?] : &:r1584_4, r1584_1 -# 1584| m1584_6(StructuredBindingTupleRefGet) = Chi : total:m1583_37, partial:m1584_5 -# 1585| r1585_1(glval) = VariableAddress[rd] : -# 1585| r1585_2(glval) = VariableAddress[d] : -# 1585| r1585_3(double &) = Load[d] : &:r1585_2, m1583_28 -# 1585| r1585_4(glval) = CopyValue : r1585_3 -# 1585| r1585_5(double &) = CopyValue : r1585_4 -# 1585| m1585_6(double &) = Store[rd] : &:r1585_1, r1585_5 -# 1586| r1586_1(glval) = VariableAddress[v] : -# 1586| r1586_2(glval) = VariableAddress[i] : -# 1586| r1586_3(int &) = Load[i] : &:r1586_2, m1583_16 -# 1586| r1586_4(int) = Load[?] : &:r1586_3, ~m1583_37 -# 1586| m1586_5(int) = Store[v] : &:r1586_1, r1586_4 -# 1587| r1587_1(int) = Constant[5] : -# 1587| r1587_2(glval) = VariableAddress[r] : -# 1587| r1587_3(int &) = Load[r] : &:r1587_2, m1583_40 -# 1587| r1587_4(glval) = CopyValue : r1587_3 -# 1587| m1587_5(int) = Store[?] : &:r1587_4, r1587_1 -# 1587| m1587_6(unknown) = Chi : total:m1583_34, partial:m1587_5 -# 1588| r1588_1(glval) = VariableAddress[rr] : -# 1588| r1588_2(glval) = VariableAddress[r] : -# 1588| r1588_3(int &) = Load[r] : &:r1588_2, m1583_40 -# 1588| r1588_4(glval) = CopyValue : r1588_3 -# 1588| r1588_5(int &) = CopyValue : r1588_4 -# 1588| m1588_6(int &) = Store[rr] : &:r1588_1, r1588_5 -# 1589| r1589_1(glval) = VariableAddress[w] : +# 1581| void tuple_structured_binding_ref_get() +# 1581| Block 0 +# 1581| v1581_1(void) = EnterFunction : +# 1581| m1581_2(unknown) = AliasedDefinition : +# 1581| m1581_3(unknown) = InitializeNonLocal : +# 1581| m1581_4(unknown) = Chi : total:m1581_2, partial:m1581_3 +# 1582| r1582_1(glval) = VariableAddress[t] : +# 1582| m1582_2(StructuredBindingTupleRefGet) = Uninitialized[t] : &:r1582_1 +# 1582| r1582_3(glval) = FunctionAddress[StructuredBindingTupleRefGet] : +# 1582| v1582_4(void) = Call[StructuredBindingTupleRefGet] : func:r1582_3, this:r1582_1 +# 1582| m1582_5(unknown) = ^CallSideEffect : ~m1581_4 +# 1582| m1582_6(unknown) = Chi : total:m1581_4, partial:m1582_5 +# 1582| m1582_7(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1582_1 +# 1582| m1582_8(StructuredBindingTupleRefGet) = Chi : total:m1582_2, partial:m1582_7 +# 1585| r1585_1(glval) = VariableAddress[(unnamed local variable)] : +# 1585| r1585_2(glval) = VariableAddress[t] : +# 1585| r1585_3(StructuredBindingTupleRefGet) = Load[t] : &:r1585_2, m1582_8 +# 1585| m1585_4(StructuredBindingTupleRefGet) = Store[(unnamed local variable)] : &:r1585_1, r1585_3 +# 1585| r1585_5(glval) = VariableAddress[i] : +# 1585| r1585_6(glval) = VariableAddress[(unnamed local variable)] : +# 1585| r1585_7(glval) = FunctionAddress[get] : +# 1585| r1585_8(int &) = Call[get] : func:r1585_7, this:r1585_6 +# 1585| m1585_9(unknown) = ^CallSideEffect : ~m1582_6 +# 1585| m1585_10(unknown) = Chi : total:m1582_6, partial:m1585_9 +# 1585| v1585_11(void) = ^IndirectReadSideEffect[-1] : &:r1585_6, m1585_4 +# 1585| m1585_12(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1585_6 +# 1585| m1585_13(StructuredBindingTupleRefGet) = Chi : total:m1585_4, partial:m1585_12 +# 1585| r1585_14(glval) = CopyValue : r1585_8 +# 1585| r1585_15(int &) = CopyValue : r1585_14 +# 1585| m1585_16(int &) = Store[i] : &:r1585_5, r1585_15 +# 1585| r1585_17(glval) = VariableAddress[d] : +# 1585| r1585_18(glval) = VariableAddress[(unnamed local variable)] : +# 1585| r1585_19(glval) = FunctionAddress[get] : +# 1585| r1585_20(double &) = Call[get] : func:r1585_19, this:r1585_18 +# 1585| m1585_21(unknown) = ^CallSideEffect : ~m1585_10 +# 1585| m1585_22(unknown) = Chi : total:m1585_10, partial:m1585_21 +# 1585| v1585_23(void) = ^IndirectReadSideEffect[-1] : &:r1585_18, m1585_13 +# 1585| m1585_24(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1585_18 +# 1585| m1585_25(StructuredBindingTupleRefGet) = Chi : total:m1585_13, partial:m1585_24 +# 1585| r1585_26(glval) = CopyValue : r1585_20 +# 1585| r1585_27(double &) = CopyValue : r1585_26 +# 1585| m1585_28(double &) = Store[d] : &:r1585_17, r1585_27 +# 1585| r1585_29(glval) = VariableAddress[r] : +# 1585| r1585_30(glval) = VariableAddress[(unnamed local variable)] : +# 1585| r1585_31(glval) = FunctionAddress[get] : +# 1585| r1585_32(int &) = Call[get] : func:r1585_31, this:r1585_30 +# 1585| m1585_33(unknown) = ^CallSideEffect : ~m1585_22 +# 1585| m1585_34(unknown) = Chi : total:m1585_22, partial:m1585_33 +# 1585| v1585_35(void) = ^IndirectReadSideEffect[-1] : &:r1585_30, m1585_25 +# 1585| m1585_36(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1585_30 +# 1585| m1585_37(StructuredBindingTupleRefGet) = Chi : total:m1585_25, partial:m1585_36 +# 1585| r1585_38(glval) = CopyValue : r1585_32 +# 1585| r1585_39(int &) = CopyValue : r1585_38 +# 1585| m1585_40(int &) = Store[r] : &:r1585_29, r1585_39 +# 1586| r1586_1(double) = Constant[4.0] : +# 1586| r1586_2(glval) = VariableAddress[d] : +# 1586| r1586_3(double &) = Load[d] : &:r1586_2, m1585_28 +# 1586| r1586_4(glval) = CopyValue : r1586_3 +# 1586| m1586_5(double) = Store[?] : &:r1586_4, r1586_1 +# 1586| m1586_6(StructuredBindingTupleRefGet) = Chi : total:m1585_37, partial:m1586_5 +# 1587| r1587_1(glval) = VariableAddress[rd] : +# 1587| r1587_2(glval) = VariableAddress[d] : +# 1587| r1587_3(double &) = Load[d] : &:r1587_2, m1585_28 +# 1587| r1587_4(glval) = CopyValue : r1587_3 +# 1587| r1587_5(double &) = CopyValue : r1587_4 +# 1587| m1587_6(double &) = Store[rd] : &:r1587_1, r1587_5 +# 1588| r1588_1(glval) = VariableAddress[v] : +# 1588| r1588_2(glval) = VariableAddress[i] : +# 1588| r1588_3(int &) = Load[i] : &:r1588_2, m1585_16 +# 1588| r1588_4(int) = Load[?] : &:r1588_3, ~m1585_37 +# 1588| m1588_5(int) = Store[v] : &:r1588_1, r1588_4 +# 1589| r1589_1(int) = Constant[5] : # 1589| r1589_2(glval) = VariableAddress[r] : -# 1589| r1589_3(int &) = Load[r] : &:r1589_2, m1583_40 -# 1589| r1589_4(int) = Load[?] : &:r1589_3, ~m1587_6 -# 1589| m1589_5(int) = Store[w] : &:r1589_1, r1589_4 -# 1593| r1593_1(glval) = VariableAddress[unnamed_local_variable] : -# 1593| r1593_2(glval) = VariableAddress[t] : -# 1593| r1593_3(StructuredBindingTupleRefGet) = Load[t] : &:r1593_2, m1580_8 -# 1593| m1593_4(StructuredBindingTupleRefGet) = Store[unnamed_local_variable] : &:r1593_1, r1593_3 -# 1594| r1594_1(glval) = VariableAddress[i] : -# 1594| r1594_2(glval) = VariableAddress[unnamed_local_variable] : -# 1594| r1594_3(glval) = FunctionAddress[get] : -# 1594| r1594_4(int &) = Call[get] : func:r1594_3, this:r1594_2 -# 1594| m1594_5(unknown) = ^CallSideEffect : ~m1587_6 -# 1594| m1594_6(unknown) = Chi : total:m1587_6, partial:m1594_5 -# 1594| v1594_7(void) = ^IndirectReadSideEffect[-1] : &:r1594_2, m1593_4 -# 1594| m1594_8(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1594_2 -# 1594| m1594_9(StructuredBindingTupleRefGet) = Chi : total:m1593_4, partial:m1594_8 -# 1594| r1594_10(glval) = CopyValue : r1594_4 -# 1594| r1594_11(int &) = CopyValue : r1594_10 -# 1594| m1594_12(int &) = Store[i] : &:r1594_1, r1594_11 -# 1595| r1595_1(glval) = VariableAddress[d] : -# 1595| r1595_2(glval) = VariableAddress[unnamed_local_variable] : -# 1595| r1595_3(glval) = FunctionAddress[get] : -# 1595| r1595_4(double &) = Call[get] : func:r1595_3, this:r1595_2 -# 1595| m1595_5(unknown) = ^CallSideEffect : ~m1594_6 -# 1595| m1595_6(unknown) = Chi : total:m1594_6, partial:m1595_5 -# 1595| v1595_7(void) = ^IndirectReadSideEffect[-1] : &:r1595_2, m1594_9 -# 1595| m1595_8(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1595_2 -# 1595| m1595_9(StructuredBindingTupleRefGet) = Chi : total:m1594_9, partial:m1595_8 -# 1595| r1595_10(glval) = CopyValue : r1595_4 -# 1595| r1595_11(double &) = CopyValue : r1595_10 -# 1595| m1595_12(double &) = Store[d] : &:r1595_1, r1595_11 -# 1596| r1596_1(glval) = VariableAddress[r] : +# 1589| r1589_3(int &) = Load[r] : &:r1589_2, m1585_40 +# 1589| r1589_4(glval) = CopyValue : r1589_3 +# 1589| m1589_5(int) = Store[?] : &:r1589_4, r1589_1 +# 1589| m1589_6(unknown) = Chi : total:m1585_34, partial:m1589_5 +# 1590| r1590_1(glval) = VariableAddress[rr] : +# 1590| r1590_2(glval) = VariableAddress[r] : +# 1590| r1590_3(int &) = Load[r] : &:r1590_2, m1585_40 +# 1590| r1590_4(glval) = CopyValue : r1590_3 +# 1590| r1590_5(int &) = CopyValue : r1590_4 +# 1590| m1590_6(int &) = Store[rr] : &:r1590_1, r1590_5 +# 1591| r1591_1(glval) = VariableAddress[w] : +# 1591| r1591_2(glval) = VariableAddress[r] : +# 1591| r1591_3(int &) = Load[r] : &:r1591_2, m1585_40 +# 1591| r1591_4(int) = Load[?] : &:r1591_3, ~m1589_6 +# 1591| m1591_5(int) = Store[w] : &:r1591_1, r1591_4 +# 1595| r1595_1(glval) = VariableAddress[unnamed_local_variable] : +# 1595| r1595_2(glval) = VariableAddress[t] : +# 1595| r1595_3(StructuredBindingTupleRefGet) = Load[t] : &:r1595_2, m1582_8 +# 1595| m1595_4(StructuredBindingTupleRefGet) = Store[unnamed_local_variable] : &:r1595_1, r1595_3 +# 1596| r1596_1(glval) = VariableAddress[i] : # 1596| r1596_2(glval) = VariableAddress[unnamed_local_variable] : # 1596| r1596_3(glval) = FunctionAddress[get] : # 1596| r1596_4(int &) = Call[get] : func:r1596_3, this:r1596_2 -# 1596| m1596_5(unknown) = ^CallSideEffect : ~m1595_6 -# 1596| m1596_6(unknown) = Chi : total:m1595_6, partial:m1596_5 -# 1596| v1596_7(void) = ^IndirectReadSideEffect[-1] : &:r1596_2, m1595_9 +# 1596| m1596_5(unknown) = ^CallSideEffect : ~m1589_6 +# 1596| m1596_6(unknown) = Chi : total:m1589_6, partial:m1596_5 +# 1596| v1596_7(void) = ^IndirectReadSideEffect[-1] : &:r1596_2, m1595_4 # 1596| m1596_8(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1596_2 -# 1596| m1596_9(StructuredBindingTupleRefGet) = Chi : total:m1595_9, partial:m1596_8 +# 1596| m1596_9(StructuredBindingTupleRefGet) = Chi : total:m1595_4, partial:m1596_8 # 1596| r1596_10(glval) = CopyValue : r1596_4 # 1596| r1596_11(int &) = CopyValue : r1596_10 -# 1596| m1596_12(int &) = Store[r] : &:r1596_1, r1596_11 -# 1597| r1597_1(double) = Constant[4.0] : -# 1597| r1597_2(glval) = VariableAddress[d] : -# 1597| r1597_3(double &) = Load[d] : &:r1597_2, m1595_12 -# 1597| r1597_4(glval) = CopyValue : r1597_3 -# 1597| m1597_5(double) = Store[?] : &:r1597_4, r1597_1 -# 1597| m1597_6(StructuredBindingTupleRefGet) = Chi : total:m1596_9, partial:m1597_5 -# 1598| r1598_1(glval) = VariableAddress[rd] : -# 1598| r1598_2(glval) = VariableAddress[d] : -# 1598| r1598_3(double &) = Load[d] : &:r1598_2, m1595_12 -# 1598| r1598_4(glval) = CopyValue : r1598_3 -# 1598| r1598_5(double &) = CopyValue : r1598_4 -# 1598| m1598_6(double &) = Store[rd] : &:r1598_1, r1598_5 -# 1599| r1599_1(glval) = VariableAddress[v] : -# 1599| r1599_2(glval) = VariableAddress[i] : -# 1599| r1599_3(int &) = Load[i] : &:r1599_2, m1594_12 -# 1599| r1599_4(int) = Load[?] : &:r1599_3, ~m1596_9 -# 1599| m1599_5(int) = Store[v] : &:r1599_1, r1599_4 -# 1600| r1600_1(int) = Constant[5] : -# 1600| r1600_2(glval) = VariableAddress[r] : -# 1600| r1600_3(int &) = Load[r] : &:r1600_2, m1596_12 -# 1600| r1600_4(glval) = CopyValue : r1600_3 -# 1600| m1600_5(int) = Store[?] : &:r1600_4, r1600_1 -# 1600| m1600_6(unknown) = Chi : total:m1596_6, partial:m1600_5 -# 1601| r1601_1(glval) = VariableAddress[rr] : -# 1601| r1601_2(glval) = VariableAddress[r] : -# 1601| r1601_3(int &) = Load[r] : &:r1601_2, m1596_12 -# 1601| r1601_4(glval) = CopyValue : r1601_3 -# 1601| r1601_5(int &) = CopyValue : r1601_4 -# 1601| m1601_6(int &) = Store[rr] : &:r1601_1, r1601_5 -# 1602| r1602_1(glval) = VariableAddress[w] : +# 1596| m1596_12(int &) = Store[i] : &:r1596_1, r1596_11 +# 1597| r1597_1(glval) = VariableAddress[d] : +# 1597| r1597_2(glval) = VariableAddress[unnamed_local_variable] : +# 1597| r1597_3(glval) = FunctionAddress[get] : +# 1597| r1597_4(double &) = Call[get] : func:r1597_3, this:r1597_2 +# 1597| m1597_5(unknown) = ^CallSideEffect : ~m1596_6 +# 1597| m1597_6(unknown) = Chi : total:m1596_6, partial:m1597_5 +# 1597| v1597_7(void) = ^IndirectReadSideEffect[-1] : &:r1597_2, m1596_9 +# 1597| m1597_8(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1597_2 +# 1597| m1597_9(StructuredBindingTupleRefGet) = Chi : total:m1596_9, partial:m1597_8 +# 1597| r1597_10(glval) = CopyValue : r1597_4 +# 1597| r1597_11(double &) = CopyValue : r1597_10 +# 1597| m1597_12(double &) = Store[d] : &:r1597_1, r1597_11 +# 1598| r1598_1(glval) = VariableAddress[r] : +# 1598| r1598_2(glval) = VariableAddress[unnamed_local_variable] : +# 1598| r1598_3(glval) = FunctionAddress[get] : +# 1598| r1598_4(int &) = Call[get] : func:r1598_3, this:r1598_2 +# 1598| m1598_5(unknown) = ^CallSideEffect : ~m1597_6 +# 1598| m1598_6(unknown) = Chi : total:m1597_6, partial:m1598_5 +# 1598| v1598_7(void) = ^IndirectReadSideEffect[-1] : &:r1598_2, m1597_9 +# 1598| m1598_8(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1598_2 +# 1598| m1598_9(StructuredBindingTupleRefGet) = Chi : total:m1597_9, partial:m1598_8 +# 1598| r1598_10(glval) = CopyValue : r1598_4 +# 1598| r1598_11(int &) = CopyValue : r1598_10 +# 1598| m1598_12(int &) = Store[r] : &:r1598_1, r1598_11 +# 1599| r1599_1(double) = Constant[4.0] : +# 1599| r1599_2(glval) = VariableAddress[d] : +# 1599| r1599_3(double &) = Load[d] : &:r1599_2, m1597_12 +# 1599| r1599_4(glval) = CopyValue : r1599_3 +# 1599| m1599_5(double) = Store[?] : &:r1599_4, r1599_1 +# 1599| m1599_6(StructuredBindingTupleRefGet) = Chi : total:m1598_9, partial:m1599_5 +# 1600| r1600_1(glval) = VariableAddress[rd] : +# 1600| r1600_2(glval) = VariableAddress[d] : +# 1600| r1600_3(double &) = Load[d] : &:r1600_2, m1597_12 +# 1600| r1600_4(glval) = CopyValue : r1600_3 +# 1600| r1600_5(double &) = CopyValue : r1600_4 +# 1600| m1600_6(double &) = Store[rd] : &:r1600_1, r1600_5 +# 1601| r1601_1(glval) = VariableAddress[v] : +# 1601| r1601_2(glval) = VariableAddress[i] : +# 1601| r1601_3(int &) = Load[i] : &:r1601_2, m1596_12 +# 1601| r1601_4(int) = Load[?] : &:r1601_3, ~m1598_9 +# 1601| m1601_5(int) = Store[v] : &:r1601_1, r1601_4 +# 1602| r1602_1(int) = Constant[5] : # 1602| r1602_2(glval) = VariableAddress[r] : -# 1602| r1602_3(int &) = Load[r] : &:r1602_2, m1596_12 -# 1602| r1602_4(int) = Load[?] : &:r1602_3, ~m1600_6 -# 1602| m1602_5(int) = Store[w] : &:r1602_1, r1602_4 -# 1604| v1604_1(void) = NoOp : -# 1579| v1579_5(void) = ReturnVoid : -# 1579| v1579_6(void) = AliasedUse : ~m1600_6 -# 1579| v1579_7(void) = ExitFunction : +# 1602| r1602_3(int &) = Load[r] : &:r1602_2, m1598_12 +# 1602| r1602_4(glval) = CopyValue : r1602_3 +# 1602| m1602_5(int) = Store[?] : &:r1602_4, r1602_1 +# 1602| m1602_6(unknown) = Chi : total:m1598_6, partial:m1602_5 +# 1603| r1603_1(glval) = VariableAddress[rr] : +# 1603| r1603_2(glval) = VariableAddress[r] : +# 1603| r1603_3(int &) = Load[r] : &:r1603_2, m1598_12 +# 1603| r1603_4(glval) = CopyValue : r1603_3 +# 1603| r1603_5(int &) = CopyValue : r1603_4 +# 1603| m1603_6(int &) = Store[rr] : &:r1603_1, r1603_5 +# 1604| r1604_1(glval) = VariableAddress[w] : +# 1604| r1604_2(glval) = VariableAddress[r] : +# 1604| r1604_3(int &) = Load[r] : &:r1604_2, m1598_12 +# 1604| r1604_4(int) = Load[?] : &:r1604_3, ~m1602_6 +# 1604| m1604_5(int) = Store[w] : &:r1604_1, r1604_4 +# 1606| v1606_1(void) = NoOp : +# 1581| v1581_5(void) = ReturnVoid : +# 1581| v1581_6(void) = AliasedUse : ~m1602_6 +# 1581| v1581_7(void) = ExitFunction : -# 1606| void StructuredBindingTupleNoRefGet::StructuredBindingTupleNoRefGet() -# 1606| Block 0 -# 1606| v1606_1(void) = EnterFunction : -# 1606| m1606_2(unknown) = AliasedDefinition : -# 1606| m1606_3(unknown) = InitializeNonLocal : -# 1606| m1606_4(unknown) = Chi : total:m1606_2, partial:m1606_3 -# 1606| r1606_5(glval) = VariableAddress[#this] : -# 1606| m1606_6(glval) = InitializeParameter[#this] : &:r1606_5 -# 1606| r1606_7(glval) = Load[#this] : &:r1606_5, m1606_6 -# 1606| m1606_8(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1606_7 -# 1606| v1606_9(void) = NoOp : -# 1606| v1606_10(void) = ReturnIndirection[#this] : &:r1606_7, m1606_8 -# 1606| v1606_11(void) = ReturnVoid : -# 1606| v1606_12(void) = AliasedUse : m1606_3 -# 1606| v1606_13(void) = ExitFunction : +# 1608| void StructuredBindingTupleNoRefGet::StructuredBindingTupleNoRefGet() +# 1608| Block 0 +# 1608| v1608_1(void) = EnterFunction : +# 1608| m1608_2(unknown) = AliasedDefinition : +# 1608| m1608_3(unknown) = InitializeNonLocal : +# 1608| m1608_4(unknown) = Chi : total:m1608_2, partial:m1608_3 +# 1608| r1608_5(glval) = VariableAddress[#this] : +# 1608| m1608_6(glval) = InitializeParameter[#this] : &:r1608_5 +# 1608| r1608_7(glval) = Load[#this] : &:r1608_5, m1608_6 +# 1608| m1608_8(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1608_7 +# 1608| v1608_9(void) = NoOp : +# 1608| v1608_10(void) = ReturnIndirection[#this] : &:r1608_7, m1608_8 +# 1608| v1608_11(void) = ReturnVoid : +# 1608| v1608_12(void) = AliasedUse : m1608_3 +# 1608| v1608_13(void) = ExitFunction : -# 1633| std::tuple_element::type StructuredBindingTupleNoRefGet::get() -# 1633| Block 0 -# 1633| v1633_1(void) = EnterFunction : -# 1633| m1633_2(unknown) = AliasedDefinition : -# 1633| m1633_3(unknown) = InitializeNonLocal : -# 1633| m1633_4(unknown) = Chi : total:m1633_2, partial:m1633_3 -# 1633| r1633_5(glval) = VariableAddress[#this] : -# 1633| m1633_6(glval) = InitializeParameter[#this] : &:r1633_5 -# 1633| r1633_7(glval) = Load[#this] : &:r1633_5, m1633_6 -# 1633| m1633_8(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1633_7 -# 1634| r1634_1(glval) = VariableAddress[#return] : -# 1634| r1634_2(glval) = VariableAddress[#this] : -# 1634| r1634_3(StructuredBindingTupleNoRefGet *) = Load[#this] : &:r1634_2, m1633_6 -# 1634| r1634_4(glval) = FieldAddress[i] : r1634_3 -# 1634| r1634_5(int) = Load[?] : &:r1634_4, ~m1633_8 -# 1634| m1634_6(int) = Store[#return] : &:r1634_1, r1634_5 -# 1633| v1633_9(void) = ReturnIndirection[#this] : &:r1633_7, m1633_8 -# 1633| r1633_10(glval) = VariableAddress[#return] : -# 1633| v1633_11(void) = ReturnValue : &:r1633_10, m1634_6 -# 1633| v1633_12(void) = AliasedUse : m1633_3 -# 1633| v1633_13(void) = ExitFunction : +# 1635| std::tuple_element::type StructuredBindingTupleNoRefGet::get() +# 1635| Block 0 +# 1635| v1635_1(void) = EnterFunction : +# 1635| m1635_2(unknown) = AliasedDefinition : +# 1635| m1635_3(unknown) = InitializeNonLocal : +# 1635| m1635_4(unknown) = Chi : total:m1635_2, partial:m1635_3 +# 1635| r1635_5(glval) = VariableAddress[#this] : +# 1635| m1635_6(glval) = InitializeParameter[#this] : &:r1635_5 +# 1635| r1635_7(glval) = Load[#this] : &:r1635_5, m1635_6 +# 1635| m1635_8(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1635_7 +# 1636| r1636_1(glval) = VariableAddress[#return] : +# 1636| r1636_2(glval) = VariableAddress[#this] : +# 1636| r1636_3(StructuredBindingTupleNoRefGet *) = Load[#this] : &:r1636_2, m1635_6 +# 1636| r1636_4(glval) = FieldAddress[i] : r1636_3 +# 1636| r1636_5(int) = Load[?] : &:r1636_4, ~m1635_8 +# 1636| m1636_6(int) = Store[#return] : &:r1636_1, r1636_5 +# 1635| v1635_9(void) = ReturnIndirection[#this] : &:r1635_7, m1635_8 +# 1635| r1635_10(glval) = VariableAddress[#return] : +# 1635| v1635_11(void) = ReturnValue : &:r1635_10, m1636_6 +# 1635| v1635_12(void) = AliasedUse : m1635_3 +# 1635| v1635_13(void) = ExitFunction : -# 1637| std::tuple_element::type StructuredBindingTupleNoRefGet::get() -# 1637| Block 0 -# 1637| v1637_1(void) = EnterFunction : -# 1637| m1637_2(unknown) = AliasedDefinition : -# 1637| m1637_3(unknown) = InitializeNonLocal : -# 1637| m1637_4(unknown) = Chi : total:m1637_2, partial:m1637_3 -# 1637| r1637_5(glval) = VariableAddress[#this] : -# 1637| m1637_6(glval) = InitializeParameter[#this] : &:r1637_5 -# 1637| r1637_7(glval) = Load[#this] : &:r1637_5, m1637_6 -# 1637| m1637_8(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1637_7 -# 1638| r1638_1(glval) = VariableAddress[#return] : -# 1638| r1638_2(glval) = VariableAddress[#this] : -# 1638| r1638_3(StructuredBindingTupleNoRefGet *) = Load[#this] : &:r1638_2, m1637_6 -# 1638| r1638_4(glval) = FieldAddress[r] : r1638_3 -# 1638| r1638_5(int &) = Load[?] : &:r1638_4, ~m1637_8 -# 1638| r1638_6(glval) = CopyValue : r1638_5 -# 1638| r1638_7(int &) = CopyValue : r1638_6 -# 1638| m1638_8(int &) = Store[#return] : &:r1638_1, r1638_7 -# 1637| v1637_9(void) = ReturnIndirection[#this] : &:r1637_7, m1637_8 -# 1637| r1637_10(glval) = VariableAddress[#return] : -# 1637| v1637_11(void) = ReturnValue : &:r1637_10, m1638_8 -# 1637| v1637_12(void) = AliasedUse : m1637_3 -# 1637| v1637_13(void) = ExitFunction : +# 1639| std::tuple_element::type StructuredBindingTupleNoRefGet::get() +# 1639| Block 0 +# 1639| v1639_1(void) = EnterFunction : +# 1639| m1639_2(unknown) = AliasedDefinition : +# 1639| m1639_3(unknown) = InitializeNonLocal : +# 1639| m1639_4(unknown) = Chi : total:m1639_2, partial:m1639_3 +# 1639| r1639_5(glval) = VariableAddress[#this] : +# 1639| m1639_6(glval) = InitializeParameter[#this] : &:r1639_5 +# 1639| r1639_7(glval) = Load[#this] : &:r1639_5, m1639_6 +# 1639| m1639_8(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1639_7 +# 1640| r1640_1(glval) = VariableAddress[#return] : +# 1640| r1640_2(glval) = VariableAddress[#this] : +# 1640| r1640_3(StructuredBindingTupleNoRefGet *) = Load[#this] : &:r1640_2, m1639_6 +# 1640| r1640_4(glval) = FieldAddress[r] : r1640_3 +# 1640| r1640_5(int &) = Load[?] : &:r1640_4, ~m1639_8 +# 1640| r1640_6(glval) = CopyValue : r1640_5 +# 1640| r1640_7(int &) = CopyValue : r1640_6 +# 1640| m1640_8(int &) = Store[#return] : &:r1640_1, r1640_7 +# 1639| v1639_9(void) = ReturnIndirection[#this] : &:r1639_7, m1639_8 +# 1639| r1639_10(glval) = VariableAddress[#return] : +# 1639| v1639_11(void) = ReturnValue : &:r1639_10, m1640_8 +# 1639| v1639_12(void) = AliasedUse : m1639_3 +# 1639| v1639_13(void) = ExitFunction : -# 1641| std::tuple_element::type StructuredBindingTupleNoRefGet::get() -# 1641| Block 0 -# 1641| v1641_1(void) = EnterFunction : -# 1641| m1641_2(unknown) = AliasedDefinition : -# 1641| m1641_3(unknown) = InitializeNonLocal : -# 1641| m1641_4(unknown) = Chi : total:m1641_2, partial:m1641_3 -# 1641| r1641_5(glval) = VariableAddress[#this] : -# 1641| m1641_6(glval) = InitializeParameter[#this] : &:r1641_5 -# 1641| r1641_7(glval) = Load[#this] : &:r1641_5, m1641_6 -# 1641| m1641_8(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1641_7 -# 1642| r1642_1(glval) = VariableAddress[#return] : -# 1642| r1642_2(glval) = VariableAddress[#temp1642:12] : -# 1642| r1642_3(int) = Constant[5] : -# 1642| m1642_4(int) = Store[#temp1642:12] : &:r1642_2, r1642_3 -# 1642| r1642_5(int &) = CopyValue : r1642_2 -# 1642| m1642_6(int &&) = Store[#return] : &:r1642_1, r1642_5 -# 1641| v1641_9(void) = ReturnIndirection[#this] : &:r1641_7, m1641_8 -# 1641| r1641_10(glval) = VariableAddress[#return] : -# 1641| v1641_11(void) = ReturnValue : &:r1641_10, m1642_6 -# 1641| v1641_12(void) = AliasedUse : m1641_3 -# 1641| v1641_13(void) = ExitFunction : +# 1643| std::tuple_element::type StructuredBindingTupleNoRefGet::get() +# 1643| Block 0 +# 1643| v1643_1(void) = EnterFunction : +# 1643| m1643_2(unknown) = AliasedDefinition : +# 1643| m1643_3(unknown) = InitializeNonLocal : +# 1643| m1643_4(unknown) = Chi : total:m1643_2, partial:m1643_3 +# 1643| r1643_5(glval) = VariableAddress[#this] : +# 1643| m1643_6(glval) = InitializeParameter[#this] : &:r1643_5 +# 1643| r1643_7(glval) = Load[#this] : &:r1643_5, m1643_6 +# 1643| m1643_8(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1643_7 +# 1644| r1644_1(glval) = VariableAddress[#return] : +# 1644| r1644_2(glval) = VariableAddress[#temp1644:12] : +# 1644| r1644_3(int) = Constant[5] : +# 1644| m1644_4(int) = Store[#temp1644:12] : &:r1644_2, r1644_3 +# 1644| r1644_5(int &) = CopyValue : r1644_2 +# 1644| m1644_6(int &&) = Store[#return] : &:r1644_1, r1644_5 +# 1643| v1643_9(void) = ReturnIndirection[#this] : &:r1643_7, m1643_8 +# 1643| r1643_10(glval) = VariableAddress[#return] : +# 1643| v1643_11(void) = ReturnValue : &:r1643_10, m1644_6 +# 1643| v1643_12(void) = AliasedUse : m1643_3 +# 1643| v1643_13(void) = ExitFunction : -# 1645| void tuple_structured_binding_no_ref_get() -# 1645| Block 0 -# 1645| v1645_1(void) = EnterFunction : -# 1645| m1645_2(unknown) = AliasedDefinition : -# 1645| m1645_3(unknown) = InitializeNonLocal : -# 1645| m1645_4(unknown) = Chi : total:m1645_2, partial:m1645_3 -# 1646| r1646_1(glval) = VariableAddress[t] : -# 1646| m1646_2(StructuredBindingTupleNoRefGet) = Uninitialized[t] : &:r1646_1 -# 1646| r1646_3(glval) = FunctionAddress[StructuredBindingTupleNoRefGet] : -# 1646| v1646_4(void) = Call[StructuredBindingTupleNoRefGet] : func:r1646_3, this:r1646_1 -# 1646| m1646_5(unknown) = ^CallSideEffect : ~m1645_4 -# 1646| m1646_6(unknown) = Chi : total:m1645_4, partial:m1646_5 -# 1646| m1646_7(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1646_1 -# 1646| m1646_8(StructuredBindingTupleNoRefGet) = Chi : total:m1646_2, partial:m1646_7 -# 1649| r1649_1(glval) = VariableAddress[(unnamed local variable)] : -# 1649| r1649_2(glval) = VariableAddress[t] : -# 1649| r1649_3(StructuredBindingTupleNoRefGet &) = CopyValue : r1649_2 -# 1649| m1649_4(StructuredBindingTupleNoRefGet &) = Store[(unnamed local variable)] : &:r1649_1, r1649_3 -# 1649| r1649_5(glval) = VariableAddress[i] : -# 1649| r1649_6(glval) = VariableAddress[#temp1649:16] : -# 1649| r1649_7(glval) = VariableAddress[(unnamed local variable)] : -# 1649| r1649_8(StructuredBindingTupleNoRefGet &) = Load[(unnamed local variable)] : &:r1649_7, m1649_4 -# 1649| r1649_9(glval) = CopyValue : r1649_8 -# 1649| r1649_10(glval) = FunctionAddress[get] : -# 1649| r1649_11(int) = Call[get] : func:r1649_10, this:r1649_9 -# 1649| m1649_12(unknown) = ^CallSideEffect : ~m1646_6 -# 1649| m1649_13(unknown) = Chi : total:m1646_6, partial:m1649_12 -# 1649| v1649_14(void) = ^IndirectReadSideEffect[-1] : &:r1649_9, m1646_8 -# 1649| m1649_15(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1649_9 -# 1649| m1649_16(StructuredBindingTupleNoRefGet) = Chi : total:m1646_8, partial:m1649_15 -# 1649| m1649_17(int) = Store[#temp1649:16] : &:r1649_6, r1649_11 -# 1649| r1649_18(int &) = CopyValue : r1649_6 -# 1649| m1649_19(int &&) = Store[i] : &:r1649_5, r1649_18 -# 1649| r1649_20(glval) = VariableAddress[r] : -# 1649| r1649_21(glval) = VariableAddress[(unnamed local variable)] : -# 1649| r1649_22(StructuredBindingTupleNoRefGet &) = Load[(unnamed local variable)] : &:r1649_21, m1649_4 -# 1649| r1649_23(glval) = CopyValue : r1649_22 -# 1649| r1649_24(glval) = FunctionAddress[get] : -# 1649| r1649_25(int &) = Call[get] : func:r1649_24, this:r1649_23 -# 1649| m1649_26(unknown) = ^CallSideEffect : ~m1649_13 -# 1649| m1649_27(unknown) = Chi : total:m1649_13, partial:m1649_26 -# 1649| v1649_28(void) = ^IndirectReadSideEffect[-1] : &:r1649_23, m1649_16 -# 1649| m1649_29(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1649_23 -# 1649| m1649_30(StructuredBindingTupleNoRefGet) = Chi : total:m1649_16, partial:m1649_29 -# 1649| r1649_31(glval) = CopyValue : r1649_25 -# 1649| r1649_32(int &) = CopyValue : r1649_31 -# 1649| m1649_33(int &) = Store[r] : &:r1649_20, r1649_32 -# 1649| r1649_34(glval) = VariableAddress[rv] : -# 1649| r1649_35(glval) = VariableAddress[(unnamed local variable)] : -# 1649| r1649_36(StructuredBindingTupleNoRefGet &) = Load[(unnamed local variable)] : &:r1649_35, m1649_4 -# 1649| r1649_37(glval) = CopyValue : r1649_36 -# 1649| r1649_38(glval) = FunctionAddress[get] : -# 1649| r1649_39(int &&) = Call[get] : func:r1649_38, this:r1649_37 -# 1649| m1649_40(unknown) = ^CallSideEffect : ~m1649_27 -# 1649| m1649_41(unknown) = Chi : total:m1649_27, partial:m1649_40 -# 1649| v1649_42(void) = ^IndirectReadSideEffect[-1] : &:r1649_37, m1649_30 -# 1649| m1649_43(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1649_37 -# 1649| m1649_44(StructuredBindingTupleNoRefGet) = Chi : total:m1649_30, partial:m1649_43 -# 1649| r1649_45(glval) = CopyValue : r1649_39 -# 1649| r1649_46(int &) = CopyValue : r1649_45 -# 1649| m1649_47(int &&) = Store[rv] : &:r1649_34, r1649_46 -# 1650| r1650_1(int) = Constant[4] : -# 1650| r1650_2(glval) = VariableAddress[i] : -# 1650| r1650_3(int &&) = Load[i] : &:r1650_2, m1649_19 -# 1650| r1650_4(glval) = CopyValue : r1650_3 -# 1650| m1650_5(int) = Store[?] : &:r1650_4, r1650_1 -# 1651| r1651_1(glval) = VariableAddress[ri] : -# 1651| r1651_2(glval) = VariableAddress[i] : -# 1651| r1651_3(int &&) = Load[i] : &:r1651_2, m1649_19 -# 1651| r1651_4(glval) = CopyValue : r1651_3 -# 1651| r1651_5(int &) = CopyValue : r1651_4 -# 1651| m1651_6(int &) = Store[ri] : &:r1651_1, r1651_5 -# 1652| r1652_1(glval) = VariableAddress[v] : +# 1647| void tuple_structured_binding_no_ref_get() +# 1647| Block 0 +# 1647| v1647_1(void) = EnterFunction : +# 1647| m1647_2(unknown) = AliasedDefinition : +# 1647| m1647_3(unknown) = InitializeNonLocal : +# 1647| m1647_4(unknown) = Chi : total:m1647_2, partial:m1647_3 +# 1648| r1648_1(glval) = VariableAddress[t] : +# 1648| m1648_2(StructuredBindingTupleNoRefGet) = Uninitialized[t] : &:r1648_1 +# 1648| r1648_3(glval) = FunctionAddress[StructuredBindingTupleNoRefGet] : +# 1648| v1648_4(void) = Call[StructuredBindingTupleNoRefGet] : func:r1648_3, this:r1648_1 +# 1648| m1648_5(unknown) = ^CallSideEffect : ~m1647_4 +# 1648| m1648_6(unknown) = Chi : total:m1647_4, partial:m1648_5 +# 1648| m1648_7(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1648_1 +# 1648| m1648_8(StructuredBindingTupleNoRefGet) = Chi : total:m1648_2, partial:m1648_7 +# 1651| r1651_1(glval) = VariableAddress[(unnamed local variable)] : +# 1651| r1651_2(glval) = VariableAddress[t] : +# 1651| r1651_3(StructuredBindingTupleNoRefGet &) = CopyValue : r1651_2 +# 1651| m1651_4(StructuredBindingTupleNoRefGet &) = Store[(unnamed local variable)] : &:r1651_1, r1651_3 +# 1651| r1651_5(glval) = VariableAddress[i] : +# 1651| r1651_6(glval) = VariableAddress[#temp1651:16] : +# 1651| r1651_7(glval) = VariableAddress[(unnamed local variable)] : +# 1651| r1651_8(StructuredBindingTupleNoRefGet &) = Load[(unnamed local variable)] : &:r1651_7, m1651_4 +# 1651| r1651_9(glval) = CopyValue : r1651_8 +# 1651| r1651_10(glval) = FunctionAddress[get] : +# 1651| r1651_11(int) = Call[get] : func:r1651_10, this:r1651_9 +# 1651| m1651_12(unknown) = ^CallSideEffect : ~m1648_6 +# 1651| m1651_13(unknown) = Chi : total:m1648_6, partial:m1651_12 +# 1651| v1651_14(void) = ^IndirectReadSideEffect[-1] : &:r1651_9, m1648_8 +# 1651| m1651_15(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1651_9 +# 1651| m1651_16(StructuredBindingTupleNoRefGet) = Chi : total:m1648_8, partial:m1651_15 +# 1651| m1651_17(int) = Store[#temp1651:16] : &:r1651_6, r1651_11 +# 1651| r1651_18(int &) = CopyValue : r1651_6 +# 1651| m1651_19(int &&) = Store[i] : &:r1651_5, r1651_18 +# 1651| r1651_20(glval) = VariableAddress[r] : +# 1651| r1651_21(glval) = VariableAddress[(unnamed local variable)] : +# 1651| r1651_22(StructuredBindingTupleNoRefGet &) = Load[(unnamed local variable)] : &:r1651_21, m1651_4 +# 1651| r1651_23(glval) = CopyValue : r1651_22 +# 1651| r1651_24(glval) = FunctionAddress[get] : +# 1651| r1651_25(int &) = Call[get] : func:r1651_24, this:r1651_23 +# 1651| m1651_26(unknown) = ^CallSideEffect : ~m1651_13 +# 1651| m1651_27(unknown) = Chi : total:m1651_13, partial:m1651_26 +# 1651| v1651_28(void) = ^IndirectReadSideEffect[-1] : &:r1651_23, m1651_16 +# 1651| m1651_29(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1651_23 +# 1651| m1651_30(StructuredBindingTupleNoRefGet) = Chi : total:m1651_16, partial:m1651_29 +# 1651| r1651_31(glval) = CopyValue : r1651_25 +# 1651| r1651_32(int &) = CopyValue : r1651_31 +# 1651| m1651_33(int &) = Store[r] : &:r1651_20, r1651_32 +# 1651| r1651_34(glval) = VariableAddress[rv] : +# 1651| r1651_35(glval) = VariableAddress[(unnamed local variable)] : +# 1651| r1651_36(StructuredBindingTupleNoRefGet &) = Load[(unnamed local variable)] : &:r1651_35, m1651_4 +# 1651| r1651_37(glval) = CopyValue : r1651_36 +# 1651| r1651_38(glval) = FunctionAddress[get] : +# 1651| r1651_39(int &&) = Call[get] : func:r1651_38, this:r1651_37 +# 1651| m1651_40(unknown) = ^CallSideEffect : ~m1651_27 +# 1651| m1651_41(unknown) = Chi : total:m1651_27, partial:m1651_40 +# 1651| v1651_42(void) = ^IndirectReadSideEffect[-1] : &:r1651_37, m1651_30 +# 1651| m1651_43(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1651_37 +# 1651| m1651_44(StructuredBindingTupleNoRefGet) = Chi : total:m1651_30, partial:m1651_43 +# 1651| r1651_45(glval) = CopyValue : r1651_39 +# 1651| r1651_46(int &) = CopyValue : r1651_45 +# 1651| m1651_47(int &&) = Store[rv] : &:r1651_34, r1651_46 +# 1652| r1652_1(int) = Constant[4] : # 1652| r1652_2(glval) = VariableAddress[i] : -# 1652| r1652_3(int &&) = Load[i] : &:r1652_2, m1649_19 -# 1652| r1652_4(int) = Load[?] : &:r1652_3, m1650_5 -# 1652| m1652_5(int) = Store[v] : &:r1652_1, r1652_4 -# 1653| r1653_1(int) = Constant[5] : -# 1653| r1653_2(glval) = VariableAddress[r] : -# 1653| r1653_3(int &) = Load[r] : &:r1653_2, m1649_33 +# 1652| r1652_3(int &&) = Load[i] : &:r1652_2, m1651_19 +# 1652| r1652_4(glval) = CopyValue : r1652_3 +# 1652| m1652_5(int) = Store[?] : &:r1652_4, r1652_1 +# 1653| r1653_1(glval) = VariableAddress[ri] : +# 1653| r1653_2(glval) = VariableAddress[i] : +# 1653| r1653_3(int &&) = Load[i] : &:r1653_2, m1651_19 # 1653| r1653_4(glval) = CopyValue : r1653_3 -# 1653| m1653_5(int) = Store[?] : &:r1653_4, r1653_1 -# 1653| m1653_6(unknown) = Chi : total:m1649_41, partial:m1653_5 -# 1654| r1654_1(glval) = VariableAddress[rr] : -# 1654| r1654_2(glval) = VariableAddress[r] : -# 1654| r1654_3(int &) = Load[r] : &:r1654_2, m1649_33 -# 1654| r1654_4(glval) = CopyValue : r1654_3 -# 1654| r1654_5(int &) = CopyValue : r1654_4 -# 1654| m1654_6(int &) = Store[rr] : &:r1654_1, r1654_5 -# 1655| r1655_1(glval) = VariableAddress[w] : +# 1653| r1653_5(int &) = CopyValue : r1653_4 +# 1653| m1653_6(int &) = Store[ri] : &:r1653_1, r1653_5 +# 1654| r1654_1(glval) = VariableAddress[v] : +# 1654| r1654_2(glval) = VariableAddress[i] : +# 1654| r1654_3(int &&) = Load[i] : &:r1654_2, m1651_19 +# 1654| r1654_4(int) = Load[?] : &:r1654_3, m1652_5 +# 1654| m1654_5(int) = Store[v] : &:r1654_1, r1654_4 +# 1655| r1655_1(int) = Constant[5] : # 1655| r1655_2(glval) = VariableAddress[r] : -# 1655| r1655_3(int &) = Load[r] : &:r1655_2, m1649_33 -# 1655| r1655_4(int) = Load[?] : &:r1655_3, ~m1653_6 -# 1655| m1655_5(int) = Store[w] : &:r1655_1, r1655_4 -# 1659| r1659_1(glval) = VariableAddress[unnamed_local_variable] : -# 1659| r1659_2(glval) = VariableAddress[t] : -# 1659| r1659_3(StructuredBindingTupleNoRefGet &) = CopyValue : r1659_2 -# 1659| m1659_4(StructuredBindingTupleNoRefGet &) = Store[unnamed_local_variable] : &:r1659_1, r1659_3 -# 1660| r1660_1(glval) = VariableAddress[i] : -# 1660| r1660_2(glval) = VariableAddress[#temp1660:20] : -# 1660| r1660_3(glval) = VariableAddress[unnamed_local_variable] : -# 1660| r1660_4(StructuredBindingTupleNoRefGet &) = Load[unnamed_local_variable] : &:r1660_3, m1659_4 -# 1660| r1660_5(glval) = CopyValue : r1660_4 -# 1660| r1660_6(glval) = FunctionAddress[get] : -# 1660| r1660_7(int) = Call[get] : func:r1660_6, this:r1660_5 -# 1660| m1660_8(unknown) = ^CallSideEffect : ~m1653_6 -# 1660| m1660_9(unknown) = Chi : total:m1653_6, partial:m1660_8 -# 1660| v1660_10(void) = ^IndirectReadSideEffect[-1] : &:r1660_5, m1649_44 -# 1660| m1660_11(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1660_5 -# 1660| m1660_12(StructuredBindingTupleNoRefGet) = Chi : total:m1649_44, partial:m1660_11 -# 1660| m1660_13(int) = Store[#temp1660:20] : &:r1660_2, r1660_7 -# 1660| r1660_14(int &) = CopyValue : r1660_2 -# 1660| m1660_15(int &&) = Store[i] : &:r1660_1, r1660_14 -# 1661| r1661_1(glval) = VariableAddress[r] : -# 1661| r1661_2(glval) = VariableAddress[unnamed_local_variable] : -# 1661| r1661_3(StructuredBindingTupleNoRefGet &) = Load[unnamed_local_variable] : &:r1661_2, m1659_4 -# 1661| r1661_4(glval) = CopyValue : r1661_3 -# 1661| r1661_5(glval) = FunctionAddress[get] : -# 1661| r1661_6(int &) = Call[get] : func:r1661_5, this:r1661_4 -# 1661| m1661_7(unknown) = ^CallSideEffect : ~m1660_9 -# 1661| m1661_8(unknown) = Chi : total:m1660_9, partial:m1661_7 -# 1661| v1661_9(void) = ^IndirectReadSideEffect[-1] : &:r1661_4, m1660_12 -# 1661| m1661_10(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1661_4 -# 1661| m1661_11(StructuredBindingTupleNoRefGet) = Chi : total:m1660_12, partial:m1661_10 -# 1661| r1661_12(glval) = CopyValue : r1661_6 -# 1661| r1661_13(int &) = CopyValue : r1661_12 -# 1661| m1661_14(int &) = Store[r] : &:r1661_1, r1661_13 -# 1662| r1662_1(glval) = VariableAddress[rv] : -# 1662| r1662_2(glval) = VariableAddress[unnamed_local_variable] : -# 1662| r1662_3(StructuredBindingTupleNoRefGet &) = Load[unnamed_local_variable] : &:r1662_2, m1659_4 -# 1662| r1662_4(glval) = CopyValue : r1662_3 -# 1662| r1662_5(glval) = FunctionAddress[get] : -# 1662| r1662_6(int &&) = Call[get] : func:r1662_5, this:r1662_4 -# 1662| m1662_7(unknown) = ^CallSideEffect : ~m1661_8 -# 1662| m1662_8(unknown) = Chi : total:m1661_8, partial:m1662_7 -# 1662| v1662_9(void) = ^IndirectReadSideEffect[-1] : &:r1662_4, m1661_11 -# 1662| m1662_10(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1662_4 -# 1662| m1662_11(StructuredBindingTupleNoRefGet) = Chi : total:m1661_11, partial:m1662_10 -# 1662| r1662_12(glval) = CopyValue : r1662_6 -# 1662| r1662_13(int &) = CopyValue : r1662_12 -# 1662| m1662_14(int &&) = Store[rv] : &:r1662_1, r1662_13 -# 1663| r1663_1(int) = Constant[4] : -# 1663| r1663_2(glval) = VariableAddress[i] : -# 1663| r1663_3(int &&) = Load[i] : &:r1663_2, m1660_15 -# 1663| r1663_4(glval) = CopyValue : r1663_3 -# 1663| m1663_5(int) = Store[?] : &:r1663_4, r1663_1 -# 1664| r1664_1(glval) = VariableAddress[ri] : -# 1664| r1664_2(glval) = VariableAddress[i] : -# 1664| r1664_3(int &&) = Load[i] : &:r1664_2, m1660_15 -# 1664| r1664_4(glval) = CopyValue : r1664_3 -# 1664| r1664_5(int &) = CopyValue : r1664_4 -# 1664| m1664_6(int &) = Store[ri] : &:r1664_1, r1664_5 -# 1665| r1665_1(glval) = VariableAddress[v] : +# 1655| r1655_3(int &) = Load[r] : &:r1655_2, m1651_33 +# 1655| r1655_4(glval) = CopyValue : r1655_3 +# 1655| m1655_5(int) = Store[?] : &:r1655_4, r1655_1 +# 1655| m1655_6(unknown) = Chi : total:m1651_41, partial:m1655_5 +# 1656| r1656_1(glval) = VariableAddress[rr] : +# 1656| r1656_2(glval) = VariableAddress[r] : +# 1656| r1656_3(int &) = Load[r] : &:r1656_2, m1651_33 +# 1656| r1656_4(glval) = CopyValue : r1656_3 +# 1656| r1656_5(int &) = CopyValue : r1656_4 +# 1656| m1656_6(int &) = Store[rr] : &:r1656_1, r1656_5 +# 1657| r1657_1(glval) = VariableAddress[w] : +# 1657| r1657_2(glval) = VariableAddress[r] : +# 1657| r1657_3(int &) = Load[r] : &:r1657_2, m1651_33 +# 1657| r1657_4(int) = Load[?] : &:r1657_3, ~m1655_6 +# 1657| m1657_5(int) = Store[w] : &:r1657_1, r1657_4 +# 1661| r1661_1(glval) = VariableAddress[unnamed_local_variable] : +# 1661| r1661_2(glval) = VariableAddress[t] : +# 1661| r1661_3(StructuredBindingTupleNoRefGet &) = CopyValue : r1661_2 +# 1661| m1661_4(StructuredBindingTupleNoRefGet &) = Store[unnamed_local_variable] : &:r1661_1, r1661_3 +# 1662| r1662_1(glval) = VariableAddress[i] : +# 1662| r1662_2(glval) = VariableAddress[#temp1662:20] : +# 1662| r1662_3(glval) = VariableAddress[unnamed_local_variable] : +# 1662| r1662_4(StructuredBindingTupleNoRefGet &) = Load[unnamed_local_variable] : &:r1662_3, m1661_4 +# 1662| r1662_5(glval) = CopyValue : r1662_4 +# 1662| r1662_6(glval) = FunctionAddress[get] : +# 1662| r1662_7(int) = Call[get] : func:r1662_6, this:r1662_5 +# 1662| m1662_8(unknown) = ^CallSideEffect : ~m1655_6 +# 1662| m1662_9(unknown) = Chi : total:m1655_6, partial:m1662_8 +# 1662| v1662_10(void) = ^IndirectReadSideEffect[-1] : &:r1662_5, m1651_44 +# 1662| m1662_11(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1662_5 +# 1662| m1662_12(StructuredBindingTupleNoRefGet) = Chi : total:m1651_44, partial:m1662_11 +# 1662| m1662_13(int) = Store[#temp1662:20] : &:r1662_2, r1662_7 +# 1662| r1662_14(int &) = CopyValue : r1662_2 +# 1662| m1662_15(int &&) = Store[i] : &:r1662_1, r1662_14 +# 1663| r1663_1(glval) = VariableAddress[r] : +# 1663| r1663_2(glval) = VariableAddress[unnamed_local_variable] : +# 1663| r1663_3(StructuredBindingTupleNoRefGet &) = Load[unnamed_local_variable] : &:r1663_2, m1661_4 +# 1663| r1663_4(glval) = CopyValue : r1663_3 +# 1663| r1663_5(glval) = FunctionAddress[get] : +# 1663| r1663_6(int &) = Call[get] : func:r1663_5, this:r1663_4 +# 1663| m1663_7(unknown) = ^CallSideEffect : ~m1662_9 +# 1663| m1663_8(unknown) = Chi : total:m1662_9, partial:m1663_7 +# 1663| v1663_9(void) = ^IndirectReadSideEffect[-1] : &:r1663_4, m1662_12 +# 1663| m1663_10(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1663_4 +# 1663| m1663_11(StructuredBindingTupleNoRefGet) = Chi : total:m1662_12, partial:m1663_10 +# 1663| r1663_12(glval) = CopyValue : r1663_6 +# 1663| r1663_13(int &) = CopyValue : r1663_12 +# 1663| m1663_14(int &) = Store[r] : &:r1663_1, r1663_13 +# 1664| r1664_1(glval) = VariableAddress[rv] : +# 1664| r1664_2(glval) = VariableAddress[unnamed_local_variable] : +# 1664| r1664_3(StructuredBindingTupleNoRefGet &) = Load[unnamed_local_variable] : &:r1664_2, m1661_4 +# 1664| r1664_4(glval) = CopyValue : r1664_3 +# 1664| r1664_5(glval) = FunctionAddress[get] : +# 1664| r1664_6(int &&) = Call[get] : func:r1664_5, this:r1664_4 +# 1664| m1664_7(unknown) = ^CallSideEffect : ~m1663_8 +# 1664| m1664_8(unknown) = Chi : total:m1663_8, partial:m1664_7 +# 1664| v1664_9(void) = ^IndirectReadSideEffect[-1] : &:r1664_4, m1663_11 +# 1664| m1664_10(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1664_4 +# 1664| m1664_11(StructuredBindingTupleNoRefGet) = Chi : total:m1663_11, partial:m1664_10 +# 1664| r1664_12(glval) = CopyValue : r1664_6 +# 1664| r1664_13(int &) = CopyValue : r1664_12 +# 1664| m1664_14(int &&) = Store[rv] : &:r1664_1, r1664_13 +# 1665| r1665_1(int) = Constant[4] : # 1665| r1665_2(glval) = VariableAddress[i] : -# 1665| r1665_3(int &&) = Load[i] : &:r1665_2, m1660_15 -# 1665| r1665_4(int) = Load[?] : &:r1665_3, m1663_5 -# 1665| m1665_5(int) = Store[v] : &:r1665_1, r1665_4 -# 1666| r1666_1(int) = Constant[5] : -# 1666| r1666_2(glval) = VariableAddress[r] : -# 1666| r1666_3(int &) = Load[r] : &:r1666_2, m1661_14 +# 1665| r1665_3(int &&) = Load[i] : &:r1665_2, m1662_15 +# 1665| r1665_4(glval) = CopyValue : r1665_3 +# 1665| m1665_5(int) = Store[?] : &:r1665_4, r1665_1 +# 1666| r1666_1(glval) = VariableAddress[ri] : +# 1666| r1666_2(glval) = VariableAddress[i] : +# 1666| r1666_3(int &&) = Load[i] : &:r1666_2, m1662_15 # 1666| r1666_4(glval) = CopyValue : r1666_3 -# 1666| m1666_5(int) = Store[?] : &:r1666_4, r1666_1 -# 1666| m1666_6(unknown) = Chi : total:m1662_8, partial:m1666_5 -# 1667| r1667_1(glval) = VariableAddress[rr] : -# 1667| r1667_2(glval) = VariableAddress[r] : -# 1667| r1667_3(int &) = Load[r] : &:r1667_2, m1661_14 -# 1667| r1667_4(glval) = CopyValue : r1667_3 -# 1667| r1667_5(int &) = CopyValue : r1667_4 -# 1667| m1667_6(int &) = Store[rr] : &:r1667_1, r1667_5 -# 1668| r1668_1(glval) = VariableAddress[w] : +# 1666| r1666_5(int &) = CopyValue : r1666_4 +# 1666| m1666_6(int &) = Store[ri] : &:r1666_1, r1666_5 +# 1667| r1667_1(glval) = VariableAddress[v] : +# 1667| r1667_2(glval) = VariableAddress[i] : +# 1667| r1667_3(int &&) = Load[i] : &:r1667_2, m1662_15 +# 1667| r1667_4(int) = Load[?] : &:r1667_3, m1665_5 +# 1667| m1667_5(int) = Store[v] : &:r1667_1, r1667_4 +# 1668| r1668_1(int) = Constant[5] : # 1668| r1668_2(glval) = VariableAddress[r] : -# 1668| r1668_3(int &) = Load[r] : &:r1668_2, m1661_14 -# 1668| r1668_4(int) = Load[?] : &:r1668_3, ~m1666_6 -# 1668| m1668_5(int) = Store[w] : &:r1668_1, r1668_4 -# 1670| v1670_1(void) = NoOp : -# 1645| v1645_5(void) = ReturnVoid : -# 1645| v1645_6(void) = AliasedUse : ~m1666_6 -# 1645| v1645_7(void) = ExitFunction : +# 1668| r1668_3(int &) = Load[r] : &:r1668_2, m1663_14 +# 1668| r1668_4(glval) = CopyValue : r1668_3 +# 1668| m1668_5(int) = Store[?] : &:r1668_4, r1668_1 +# 1668| m1668_6(unknown) = Chi : total:m1664_8, partial:m1668_5 +# 1669| r1669_1(glval) = VariableAddress[rr] : +# 1669| r1669_2(glval) = VariableAddress[r] : +# 1669| r1669_3(int &) = Load[r] : &:r1669_2, m1663_14 +# 1669| r1669_4(glval) = CopyValue : r1669_3 +# 1669| r1669_5(int &) = CopyValue : r1669_4 +# 1669| m1669_6(int &) = Store[rr] : &:r1669_1, r1669_5 +# 1670| r1670_1(glval) = VariableAddress[w] : +# 1670| r1670_2(glval) = VariableAddress[r] : +# 1670| r1670_3(int &) = Load[r] : &:r1670_2, m1663_14 +# 1670| r1670_4(int) = Load[?] : &:r1670_3, ~m1668_6 +# 1670| m1670_5(int) = Store[w] : &:r1670_1, r1670_4 +# 1672| v1672_1(void) = NoOp : +# 1647| v1647_5(void) = ReturnVoid : +# 1647| v1647_6(void) = AliasedUse : ~m1668_6 +# 1647| v1647_7(void) = ExitFunction : -# 1672| void array_structured_binding_non_ref_init() -# 1672| Block 0 -# 1672| v1672_1(void) = EnterFunction : -# 1672| m1672_2(unknown) = AliasedDefinition : -# 1672| m1672_3(unknown) = InitializeNonLocal : -# 1672| m1672_4(unknown) = Chi : total:m1672_2, partial:m1672_3 -# 1673| r1673_1(glval) = VariableAddress[xs] : -# 1673| m1673_2(int[2]) = Uninitialized[xs] : &:r1673_1 -# 1673| r1673_3(int) = Constant[0] : -# 1673| r1673_4(glval) = PointerAdd[4] : r1673_1, r1673_3 -# 1673| r1673_5(int) = Constant[1] : -# 1673| m1673_6(int) = Store[?] : &:r1673_4, r1673_5 -# 1673| m1673_7(int[2]) = Chi : total:m1673_2, partial:m1673_6 -# 1673| r1673_8(int) = Constant[1] : -# 1673| r1673_9(glval) = PointerAdd[4] : r1673_1, r1673_8 -# 1673| r1673_10(int) = Constant[2] : -# 1673| m1673_11(int) = Store[?] : &:r1673_9, r1673_10 -# 1673| m1673_12(int[2]) = Chi : total:m1673_7, partial:m1673_11 -# 1674| r1674_1(glval) = VariableAddress[(unnamed local variable)] : -# 1674| r1674_2(glval) = VariableAddress[xs] : -# 1674| r1674_3(int[2]) = Load[xs] : &:r1674_2, m1673_12 -# 1674| m1674_4(int[2]) = Store[(unnamed local variable)] : &:r1674_1, r1674_3 -# 1674| r1674_5(glval) = VariableAddress[x0] : +# 1674| void array_structured_binding_non_ref_init() +# 1674| Block 0 +# 1674| v1674_1(void) = EnterFunction : +# 1674| m1674_2(unknown) = AliasedDefinition : +# 1674| m1674_3(unknown) = InitializeNonLocal : +# 1674| m1674_4(unknown) = Chi : total:m1674_2, partial:m1674_3 +# 1675| r1675_1(glval) = VariableAddress[xs] : +# 1675| m1675_2(int[2]) = Uninitialized[xs] : &:r1675_1 +# 1675| r1675_3(int) = Constant[0] : +# 1675| r1675_4(glval) = PointerAdd[4] : r1675_1, r1675_3 +# 1675| r1675_5(int) = Constant[1] : +# 1675| m1675_6(int) = Store[?] : &:r1675_4, r1675_5 +# 1675| m1675_7(int[2]) = Chi : total:m1675_2, partial:m1675_6 +# 1675| r1675_8(int) = Constant[1] : +# 1675| r1675_9(glval) = PointerAdd[4] : r1675_1, r1675_8 +# 1675| r1675_10(int) = Constant[2] : +# 1675| m1675_11(int) = Store[?] : &:r1675_9, r1675_10 +# 1675| m1675_12(int[2]) = Chi : total:m1675_7, partial:m1675_11 +# 1676| r1676_1(glval) = VariableAddress[(unnamed local variable)] : +# 1676| r1676_2(glval) = VariableAddress[xs] : +# 1676| r1676_3(int[2]) = Load[xs] : &:r1676_2, m1675_12 +# 1676| m1676_4(int[2]) = Store[(unnamed local variable)] : &:r1676_1, r1676_3 +# 1676| r1676_5(glval) = VariableAddress[x0] : #-----| r0_1(glval) = VariableAddress[(unnamed local variable)] : #-----| r0_2(int *) = Convert : r0_1 #-----| r0_3(unsigned long) = Constant[0] : #-----| r0_4(glval) = PointerAdd[4] : r0_2, r0_3 -#-----| m0_5(int &) = Store[x0] : &:r1674_5, r0_4 -# 1674| r1674_6(glval) = VariableAddress[x1] : +#-----| m0_5(int &) = Store[x0] : &:r1676_5, r0_4 +# 1676| r1676_6(glval) = VariableAddress[x1] : #-----| r0_6(glval) = VariableAddress[(unnamed local variable)] : #-----| r0_7(int *) = Convert : r0_6 #-----| r0_8(unsigned long) = Constant[1] : #-----| r0_9(glval) = PointerAdd[4] : r0_7, r0_8 -#-----| m0_10(int &) = Store[x1] : &:r1674_6, r0_9 -# 1675| v1675_1(void) = NoOp : -# 1672| v1672_5(void) = ReturnVoid : -# 1672| v1672_6(void) = AliasedUse : m1672_3 -# 1672| v1672_7(void) = ExitFunction : +#-----| m0_10(int &) = Store[x1] : &:r1676_6, r0_9 +# 1677| v1677_1(void) = NoOp : +# 1674| v1674_5(void) = ReturnVoid : +# 1674| v1674_6(void) = AliasedUse : m1674_3 +# 1674| v1674_7(void) = ExitFunction : -# 1680| void CapturedLambdaMyObj::CapturedLambdaMyObj() -# 1680| Block 0 -# 1680| v1680_1(void) = EnterFunction : -# 1680| m1680_2(unknown) = AliasedDefinition : -# 1680| m1680_3(unknown) = InitializeNonLocal : -# 1680| m1680_4(unknown) = Chi : total:m1680_2, partial:m1680_3 -# 1680| r1680_5(glval) = VariableAddress[#this] : -# 1680| m1680_6(glval) = InitializeParameter[#this] : &:r1680_5 -# 1680| r1680_7(glval) = Load[#this] : &:r1680_5, m1680_6 -# 1680| m1680_8(CapturedLambdaMyObj) = InitializeIndirection[#this] : &:r1680_7 -# 1680| v1680_9(void) = NoOp : -# 1680| v1680_10(void) = ReturnIndirection[#this] : &:r1680_7, m1680_8 -# 1680| v1680_11(void) = ReturnVoid : -# 1680| v1680_12(void) = AliasedUse : m1680_3 -# 1680| v1680_13(void) = ExitFunction : +# 1682| void CapturedLambdaMyObj::CapturedLambdaMyObj() +# 1682| Block 0 +# 1682| v1682_1(void) = EnterFunction : +# 1682| m1682_2(unknown) = AliasedDefinition : +# 1682| m1682_3(unknown) = InitializeNonLocal : +# 1682| m1682_4(unknown) = Chi : total:m1682_2, partial:m1682_3 +# 1682| r1682_5(glval) = VariableAddress[#this] : +# 1682| m1682_6(glval) = InitializeParameter[#this] : &:r1682_5 +# 1682| r1682_7(glval) = Load[#this] : &:r1682_5, m1682_6 +# 1682| m1682_8(CapturedLambdaMyObj) = InitializeIndirection[#this] : &:r1682_7 +# 1682| v1682_9(void) = NoOp : +# 1682| v1682_10(void) = ReturnIndirection[#this] : &:r1682_7, m1682_8 +# 1682| v1682_11(void) = ReturnVoid : +# 1682| v1682_12(void) = AliasedUse : m1682_3 +# 1682| v1682_13(void) = ExitFunction : -# 1683| void captured_lambda(int, int&, int&&) -# 1683| Block 0 -# 1683| v1683_1(void) = EnterFunction : -# 1683| m1683_2(unknown) = AliasedDefinition : -# 1683| m1683_3(unknown) = InitializeNonLocal : -# 1683| m1683_4(unknown) = Chi : total:m1683_2, partial:m1683_3 -# 1683| r1683_5(glval) = VariableAddress[x] : -# 1683| m1683_6(int) = InitializeParameter[x] : &:r1683_5 -# 1683| r1683_7(glval) = VariableAddress[y] : -# 1683| m1683_8(int &) = InitializeParameter[y] : &:r1683_7 -# 1683| r1683_9(int &) = Load[y] : &:r1683_7, m1683_8 -# 1683| m1683_10(unknown) = InitializeIndirection[y] : &:r1683_9 -# 1683| r1683_11(glval) = VariableAddress[z] : -# 1683| m1683_12(int &&) = InitializeParameter[z] : &:r1683_11 -# 1683| r1683_13(int &&) = Load[z] : &:r1683_11, m1683_12 -# 1683| m1683_14(unknown) = InitializeIndirection[z] : &:r1683_13 -# 1685| r1685_1(glval) = VariableAddress[obj1] : -# 1685| r1685_2(glval) = VariableAddress[#temp1685:24] : -# 1685| m1685_3(CapturedLambdaMyObj) = Uninitialized[#temp1685:24] : &:r1685_2 -# 1685| r1685_4(glval) = FunctionAddress[CapturedLambdaMyObj] : -# 1685| v1685_5(void) = Call[CapturedLambdaMyObj] : func:r1685_4, this:r1685_2 -# 1685| m1685_6(unknown) = ^CallSideEffect : ~m1683_4 -# 1685| m1685_7(unknown) = Chi : total:m1683_4, partial:m1685_6 -# 1685| m1685_8(CapturedLambdaMyObj) = ^IndirectMayWriteSideEffect[-1] : &:r1685_2 -# 1685| m1685_9(CapturedLambdaMyObj) = Chi : total:m1685_3, partial:m1685_8 -# 1685| r1685_10(glval) = Convert : r1685_2 -# 1685| r1685_11(CapturedLambdaMyObj &) = CopyValue : r1685_10 -# 1685| m1685_12(CapturedLambdaMyObj &) = Store[obj1] : &:r1685_1, r1685_11 -# 1686| r1686_1(glval) = VariableAddress[obj2] : -# 1686| m1686_2(CapturedLambdaMyObj) = Uninitialized[obj2] : &:r1686_1 -# 1686| r1686_3(glval) = FunctionAddress[CapturedLambdaMyObj] : -# 1686| v1686_4(void) = Call[CapturedLambdaMyObj] : func:r1686_3, this:r1686_1 -# 1686| m1686_5(unknown) = ^CallSideEffect : ~m1685_7 -# 1686| m1686_6(unknown) = Chi : total:m1685_7, partial:m1686_5 -# 1686| m1686_7(CapturedLambdaMyObj) = ^IndirectMayWriteSideEffect[-1] : &:r1686_1 -# 1686| m1686_8(CapturedLambdaMyObj) = Chi : total:m1686_2, partial:m1686_7 -# 1688| r1688_1(glval) = VariableAddress[lambda_outer] : -# 1688| r1688_2(glval) = VariableAddress[#temp1688:24] : -# 1688| m1688_3(decltype([...](...){...})) = Uninitialized[#temp1688:24] : &:r1688_2 -# 1688| r1688_4(glval) = FieldAddress[obj1] : r1688_2 -# 1688| r1688_5(glval) = VariableAddress[obj1] : -# 1688| r1688_6(CapturedLambdaMyObj &) = Load[obj1] : &:r1688_5, m1685_12 -#-----| r0_1(CapturedLambdaMyObj) = Load[?] : &:r1688_6, m1685_9 -#-----| m0_2(CapturedLambdaMyObj) = Store[?] : &:r1688_4, r0_1 -#-----| m0_3(decltype([...](...){...})) = Chi : total:m1688_3, partial:m0_2 -# 1688| r1688_7(glval) = FieldAddress[obj2] : r1688_2 -# 1688| r1688_8(glval) = VariableAddress[obj2] : -# 1688| r1688_9(CapturedLambdaMyObj) = Load[obj2] : &:r1688_8, m1686_8 -# 1688| m1688_10(CapturedLambdaMyObj) = Store[?] : &:r1688_7, r1688_9 -# 1688| m1688_11(decltype([...](...){...})) = Chi : total:m0_3, partial:m1688_10 -# 1688| r1688_12(glval) = FieldAddress[x] : r1688_2 -# 1688| r1688_13(glval) = VariableAddress[x] : -# 1688| r1688_14(int) = Load[x] : &:r1688_13, m1683_6 -# 1688| m1688_15(int) = Store[?] : &:r1688_12, r1688_14 -# 1688| m1688_16(decltype([...](...){...})) = Chi : total:m1688_11, partial:m1688_15 -# 1688| r1688_17(glval) = FieldAddress[y] : r1688_2 -# 1688| r1688_18(glval) = VariableAddress[y] : -# 1688| r1688_19(int &) = Load[y] : &:r1688_18, m1683_8 -# 1690| r1690_1(int) = Load[?] : &:r1688_19, ~m1683_10 -# 1690| m1690_2(int) = Store[?] : &:r1688_17, r1690_1 -# 1690| m1690_3(decltype([...](...){...})) = Chi : total:m1688_16, partial:m1690_2 -# 1688| r1688_20(glval) = FieldAddress[z] : r1688_2 -# 1688| r1688_21(glval) = VariableAddress[z] : -# 1688| r1688_22(int &&) = Load[z] : &:r1688_21, m1683_12 -# 1690| r1690_4(int) = Load[?] : &:r1688_22, ~m1683_14 -# 1690| m1690_5(int) = Store[?] : &:r1688_20, r1690_4 -# 1690| m1690_6(decltype([...](...){...})) = Chi : total:m1690_3, partial:m1690_5 -# 1688| r1688_23(decltype([...](...){...})) = Load[#temp1688:24] : &:r1688_2, m1690_6 -# 1688| m1688_24(decltype([...](...){...})) = Store[lambda_outer] : &:r1688_1, r1688_23 -# 1691| v1691_1(void) = NoOp : -# 1683| v1683_15(void) = ReturnIndirection[y] : &:r1683_9, m1683_10 -# 1683| v1683_16(void) = ReturnIndirection[z] : &:r1683_13, m1683_14 -# 1683| v1683_17(void) = ReturnVoid : -# 1683| v1683_18(void) = AliasedUse : ~m1686_6 -# 1683| v1683_19(void) = ExitFunction : +# 1685| void captured_lambda(int, int&, int&&) +# 1685| Block 0 +# 1685| v1685_1(void) = EnterFunction : +# 1685| m1685_2(unknown) = AliasedDefinition : +# 1685| m1685_3(unknown) = InitializeNonLocal : +# 1685| m1685_4(unknown) = Chi : total:m1685_2, partial:m1685_3 +# 1685| r1685_5(glval) = VariableAddress[x] : +# 1685| m1685_6(int) = InitializeParameter[x] : &:r1685_5 +# 1685| r1685_7(glval) = VariableAddress[y] : +# 1685| m1685_8(int &) = InitializeParameter[y] : &:r1685_7 +# 1685| r1685_9(int &) = Load[y] : &:r1685_7, m1685_8 +# 1685| m1685_10(unknown) = InitializeIndirection[y] : &:r1685_9 +# 1685| r1685_11(glval) = VariableAddress[z] : +# 1685| m1685_12(int &&) = InitializeParameter[z] : &:r1685_11 +# 1685| r1685_13(int &&) = Load[z] : &:r1685_11, m1685_12 +# 1685| m1685_14(unknown) = InitializeIndirection[z] : &:r1685_13 +# 1687| r1687_1(glval) = VariableAddress[obj1] : +# 1687| r1687_2(glval) = VariableAddress[#temp1687:24] : +# 1687| m1687_3(CapturedLambdaMyObj) = Uninitialized[#temp1687:24] : &:r1687_2 +# 1687| r1687_4(glval) = FunctionAddress[CapturedLambdaMyObj] : +# 1687| v1687_5(void) = Call[CapturedLambdaMyObj] : func:r1687_4, this:r1687_2 +# 1687| m1687_6(unknown) = ^CallSideEffect : ~m1685_4 +# 1687| m1687_7(unknown) = Chi : total:m1685_4, partial:m1687_6 +# 1687| m1687_8(CapturedLambdaMyObj) = ^IndirectMayWriteSideEffect[-1] : &:r1687_2 +# 1687| m1687_9(CapturedLambdaMyObj) = Chi : total:m1687_3, partial:m1687_8 +# 1687| r1687_10(glval) = Convert : r1687_2 +# 1687| r1687_11(CapturedLambdaMyObj &) = CopyValue : r1687_10 +# 1687| m1687_12(CapturedLambdaMyObj &) = Store[obj1] : &:r1687_1, r1687_11 +# 1688| r1688_1(glval) = VariableAddress[obj2] : +# 1688| m1688_2(CapturedLambdaMyObj) = Uninitialized[obj2] : &:r1688_1 +# 1688| r1688_3(glval) = FunctionAddress[CapturedLambdaMyObj] : +# 1688| v1688_4(void) = Call[CapturedLambdaMyObj] : func:r1688_3, this:r1688_1 +# 1688| m1688_5(unknown) = ^CallSideEffect : ~m1687_7 +# 1688| m1688_6(unknown) = Chi : total:m1687_7, partial:m1688_5 +# 1688| m1688_7(CapturedLambdaMyObj) = ^IndirectMayWriteSideEffect[-1] : &:r1688_1 +# 1688| m1688_8(CapturedLambdaMyObj) = Chi : total:m1688_2, partial:m1688_7 +# 1690| r1690_1(glval) = VariableAddress[lambda_outer] : +# 1690| r1690_2(glval) = VariableAddress[#temp1690:24] : +# 1690| m1690_3(decltype([...](...){...})) = Uninitialized[#temp1690:24] : &:r1690_2 +# 1690| r1690_4(glval) = FieldAddress[obj1] : r1690_2 +# 1690| r1690_5(glval) = VariableAddress[obj1] : +# 1690| r1690_6(CapturedLambdaMyObj &) = Load[obj1] : &:r1690_5, m1687_12 +#-----| r0_1(CapturedLambdaMyObj) = Load[?] : &:r1690_6, m1687_9 +#-----| m0_2(CapturedLambdaMyObj) = Store[?] : &:r1690_4, r0_1 +#-----| m0_3(decltype([...](...){...})) = Chi : total:m1690_3, partial:m0_2 +# 1690| r1690_7(glval) = FieldAddress[obj2] : r1690_2 +# 1690| r1690_8(glval) = VariableAddress[obj2] : +# 1690| r1690_9(CapturedLambdaMyObj) = Load[obj2] : &:r1690_8, m1688_8 +# 1690| m1690_10(CapturedLambdaMyObj) = Store[?] : &:r1690_7, r1690_9 +# 1690| m1690_11(decltype([...](...){...})) = Chi : total:m0_3, partial:m1690_10 +# 1690| r1690_12(glval) = FieldAddress[x] : r1690_2 +# 1690| r1690_13(glval) = VariableAddress[x] : +# 1690| r1690_14(int) = Load[x] : &:r1690_13, m1685_6 +# 1690| m1690_15(int) = Store[?] : &:r1690_12, r1690_14 +# 1690| m1690_16(decltype([...](...){...})) = Chi : total:m1690_11, partial:m1690_15 +# 1690| r1690_17(glval) = FieldAddress[y] : r1690_2 +# 1690| r1690_18(glval) = VariableAddress[y] : +# 1690| r1690_19(int &) = Load[y] : &:r1690_18, m1685_8 +# 1692| r1692_1(int) = Load[?] : &:r1690_19, ~m1685_10 +# 1692| m1692_2(int) = Store[?] : &:r1690_17, r1692_1 +# 1692| m1692_3(decltype([...](...){...})) = Chi : total:m1690_16, partial:m1692_2 +# 1690| r1690_20(glval) = FieldAddress[z] : r1690_2 +# 1690| r1690_21(glval) = VariableAddress[z] : +# 1690| r1690_22(int &&) = Load[z] : &:r1690_21, m1685_12 +# 1692| r1692_4(int) = Load[?] : &:r1690_22, ~m1685_14 +# 1692| m1692_5(int) = Store[?] : &:r1690_20, r1692_4 +# 1692| m1692_6(decltype([...](...){...})) = Chi : total:m1692_3, partial:m1692_5 +# 1690| r1690_23(decltype([...](...){...})) = Load[#temp1690:24] : &:r1690_2, m1692_6 +# 1690| m1690_24(decltype([...](...){...})) = Store[lambda_outer] : &:r1690_1, r1690_23 +# 1693| v1693_1(void) = NoOp : +# 1685| v1685_15(void) = ReturnIndirection[y] : &:r1685_9, m1685_10 +# 1685| v1685_16(void) = ReturnIndirection[z] : &:r1685_13, m1685_14 +# 1685| v1685_17(void) = ReturnVoid : +# 1685| v1685_18(void) = AliasedUse : ~m1688_6 +# 1685| v1685_19(void) = ExitFunction : -# 1688| void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1688, col. 25)::operator()() const -# 1688| Block 0 -# 1688| v1688_1(void) = EnterFunction : -# 1688| m1688_2(unknown) = AliasedDefinition : -# 1688| m1688_3(unknown) = InitializeNonLocal : -# 1688| m1688_4(unknown) = Chi : total:m1688_2, partial:m1688_3 -# 1688| r1688_5(glval) = VariableAddress[#this] : -# 1688| m1688_6(glval) = InitializeParameter[#this] : &:r1688_5 -# 1688| r1688_7(glval) = Load[#this] : &:r1688_5, m1688_6 -# 1688| m1688_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1688_7 -# 1689| r1689_1(glval) = VariableAddress[lambda_inner] : -# 1689| r1689_2(glval) = VariableAddress[#temp1689:28] : -# 1689| m1689_3(decltype([...](...){...})) = Uninitialized[#temp1689:28] : &:r1689_2 -# 1689| r1689_4(glval) = FieldAddress[obj1] : r1689_2 -# 1689| r1689_5(glval) = VariableAddress[#this] : -# 1689| r1689_6(lambda [] type at line 1689, col. 29 *) = Load[#this] : &:r1689_5, m1688_6 -# 1689| r1689_7(glval) = FieldAddress[obj1] : r1689_6 -# 1689| r1689_8(CapturedLambdaMyObj) = Load[?] : &:r1689_7, ~m1688_8 -# 1689| m1689_9(CapturedLambdaMyObj) = Store[?] : &:r1689_4, r1689_8 -# 1689| m1689_10(decltype([...](...){...})) = Chi : total:m1689_3, partial:m1689_9 -# 1689| r1689_11(glval) = FieldAddress[obj2] : r1689_2 -# 1689| r1689_12(glval) = VariableAddress[#this] : -# 1689| r1689_13(lambda [] type at line 1689, col. 29 *) = Load[#this] : &:r1689_12, m1688_6 -# 1689| r1689_14(glval) = FieldAddress[obj2] : r1689_13 -# 1689| r1689_15(CapturedLambdaMyObj) = Load[?] : &:r1689_14, ~m1688_8 -# 1689| m1689_16(CapturedLambdaMyObj) = Store[?] : &:r1689_11, r1689_15 -# 1689| m1689_17(decltype([...](...){...})) = Chi : total:m1689_10, partial:m1689_16 -# 1689| r1689_18(glval) = FieldAddress[x] : r1689_2 -# 1689| r1689_19(glval) = VariableAddress[#this] : -# 1689| r1689_20(lambda [] type at line 1688, col. 25 *) = Load[#this] : &:r1689_19, m1688_6 -# 1689| r1689_21(glval) = FieldAddress[x] : r1689_20 -# 1689| r1689_22(int) = Load[?] : &:r1689_21, ~m1688_8 -# 1689| m1689_23(int) = Store[?] : &:r1689_18, r1689_22 -# 1689| m1689_24(decltype([...](...){...})) = Chi : total:m1689_17, partial:m1689_23 -# 1689| r1689_25(glval) = FieldAddress[y] : r1689_2 -# 1689| r1689_26(glval) = VariableAddress[#this] : -# 1689| r1689_27(lambda [] type at line 1688, col. 25 *) = Load[#this] : &:r1689_26, m1688_6 -# 1689| r1689_28(glval) = FieldAddress[y] : r1689_27 -# 1689| r1689_29(int) = Load[?] : &:r1689_28, ~m1688_8 -# 1689| m1689_30(int) = Store[?] : &:r1689_25, r1689_29 -# 1689| m1689_31(decltype([...](...){...})) = Chi : total:m1689_24, partial:m1689_30 -# 1689| r1689_32(glval) = FieldAddress[z] : r1689_2 -# 1689| r1689_33(glval) = VariableAddress[#this] : -# 1689| r1689_34(lambda [] type at line 1688, col. 25 *) = Load[#this] : &:r1689_33, m1688_6 -# 1689| r1689_35(glval) = FieldAddress[z] : r1689_34 -# 1689| r1689_36(int) = Load[?] : &:r1689_35, ~m1688_8 -# 1689| m1689_37(int) = Store[?] : &:r1689_32, r1689_36 -# 1689| m1689_38(decltype([...](...){...})) = Chi : total:m1689_31, partial:m1689_37 -# 1689| r1689_39(decltype([...](...){...})) = Load[#temp1689:28] : &:r1689_2, m1689_38 -# 1689| m1689_40(decltype([...](...){...})) = Store[lambda_inner] : &:r1689_1, r1689_39 -# 1690| v1690_1(void) = NoOp : -# 1688| v1688_9(void) = ReturnIndirection[#this] : &:r1688_7, m1688_8 -# 1688| v1688_10(void) = ReturnVoid : -# 1688| v1688_11(void) = AliasedUse : m1688_3 -# 1688| v1688_12(void) = ExitFunction : +# 1690| void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25)::operator()() const +# 1690| Block 0 +# 1690| v1690_1(void) = EnterFunction : +# 1690| m1690_2(unknown) = AliasedDefinition : +# 1690| m1690_3(unknown) = InitializeNonLocal : +# 1690| m1690_4(unknown) = Chi : total:m1690_2, partial:m1690_3 +# 1690| r1690_5(glval) = VariableAddress[#this] : +# 1690| m1690_6(glval) = InitializeParameter[#this] : &:r1690_5 +# 1690| r1690_7(glval) = Load[#this] : &:r1690_5, m1690_6 +# 1690| m1690_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1690_7 +# 1691| r1691_1(glval) = VariableAddress[lambda_inner] : +# 1691| r1691_2(glval) = VariableAddress[#temp1691:28] : +# 1691| m1691_3(decltype([...](...){...})) = Uninitialized[#temp1691:28] : &:r1691_2 +# 1691| r1691_4(glval) = FieldAddress[obj1] : r1691_2 +# 1691| r1691_5(glval) = VariableAddress[#this] : +# 1691| r1691_6(lambda [] type at line 1691, col. 29 *) = Load[#this] : &:r1691_5, m1690_6 +# 1691| r1691_7(glval) = FieldAddress[obj1] : r1691_6 +# 1691| r1691_8(CapturedLambdaMyObj) = Load[?] : &:r1691_7, ~m1690_8 +# 1691| m1691_9(CapturedLambdaMyObj) = Store[?] : &:r1691_4, r1691_8 +# 1691| m1691_10(decltype([...](...){...})) = Chi : total:m1691_3, partial:m1691_9 +# 1691| r1691_11(glval) = FieldAddress[obj2] : r1691_2 +# 1691| r1691_12(glval) = VariableAddress[#this] : +# 1691| r1691_13(lambda [] type at line 1691, col. 29 *) = Load[#this] : &:r1691_12, m1690_6 +# 1691| r1691_14(glval) = FieldAddress[obj2] : r1691_13 +# 1691| r1691_15(CapturedLambdaMyObj) = Load[?] : &:r1691_14, ~m1690_8 +# 1691| m1691_16(CapturedLambdaMyObj) = Store[?] : &:r1691_11, r1691_15 +# 1691| m1691_17(decltype([...](...){...})) = Chi : total:m1691_10, partial:m1691_16 +# 1691| r1691_18(glval) = FieldAddress[x] : r1691_2 +# 1691| r1691_19(glval) = VariableAddress[#this] : +# 1691| r1691_20(lambda [] type at line 1690, col. 25 *) = Load[#this] : &:r1691_19, m1690_6 +# 1691| r1691_21(glval) = FieldAddress[x] : r1691_20 +# 1691| r1691_22(int) = Load[?] : &:r1691_21, ~m1690_8 +# 1691| m1691_23(int) = Store[?] : &:r1691_18, r1691_22 +# 1691| m1691_24(decltype([...](...){...})) = Chi : total:m1691_17, partial:m1691_23 +# 1691| r1691_25(glval) = FieldAddress[y] : r1691_2 +# 1691| r1691_26(glval) = VariableAddress[#this] : +# 1691| r1691_27(lambda [] type at line 1690, col. 25 *) = Load[#this] : &:r1691_26, m1690_6 +# 1691| r1691_28(glval) = FieldAddress[y] : r1691_27 +# 1691| r1691_29(int) = Load[?] : &:r1691_28, ~m1690_8 +# 1691| m1691_30(int) = Store[?] : &:r1691_25, r1691_29 +# 1691| m1691_31(decltype([...](...){...})) = Chi : total:m1691_24, partial:m1691_30 +# 1691| r1691_32(glval) = FieldAddress[z] : r1691_2 +# 1691| r1691_33(glval) = VariableAddress[#this] : +# 1691| r1691_34(lambda [] type at line 1690, col. 25 *) = Load[#this] : &:r1691_33, m1690_6 +# 1691| r1691_35(glval) = FieldAddress[z] : r1691_34 +# 1691| r1691_36(int) = Load[?] : &:r1691_35, ~m1690_8 +# 1691| m1691_37(int) = Store[?] : &:r1691_32, r1691_36 +# 1691| m1691_38(decltype([...](...){...})) = Chi : total:m1691_31, partial:m1691_37 +# 1691| r1691_39(decltype([...](...){...})) = Load[#temp1691:28] : &:r1691_2, m1691_38 +# 1691| m1691_40(decltype([...](...){...})) = Store[lambda_inner] : &:r1691_1, r1691_39 +# 1692| v1692_1(void) = NoOp : +# 1690| v1690_9(void) = ReturnIndirection[#this] : &:r1690_7, m1690_8 +# 1690| v1690_10(void) = ReturnVoid : +# 1690| v1690_11(void) = AliasedUse : m1690_3 +# 1690| v1690_12(void) = ExitFunction : -# 1689| void (void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1688, col. 25)::operator()() const)::(lambda [] type at line 1689, col. 29)::operator()() const -# 1689| Block 0 -# 1689| v1689_1(void) = EnterFunction : -# 1689| m1689_2(unknown) = AliasedDefinition : -# 1689| m1689_3(unknown) = InitializeNonLocal : -# 1689| m1689_4(unknown) = Chi : total:m1689_2, partial:m1689_3 -# 1689| r1689_5(glval) = VariableAddress[#this] : -# 1689| m1689_6(glval) = InitializeParameter[#this] : &:r1689_5 -# 1689| r1689_7(glval) = Load[#this] : &:r1689_5, m1689_6 -# 1689| m1689_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1689_7 -# 1689| v1689_9(void) = NoOp : -# 1689| v1689_10(void) = NoOp : -# 1689| v1689_11(void) = ReturnIndirection[#this] : &:r1689_7, m1689_8 -# 1689| v1689_12(void) = ReturnVoid : -# 1689| v1689_13(void) = AliasedUse : m1689_3 -# 1689| v1689_14(void) = ExitFunction : +# 1691| void (void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25)::operator()() const)::(lambda [] type at line 1691, col. 29)::operator()() const +# 1691| Block 0 +# 1691| v1691_1(void) = EnterFunction : +# 1691| m1691_2(unknown) = AliasedDefinition : +# 1691| m1691_3(unknown) = InitializeNonLocal : +# 1691| m1691_4(unknown) = Chi : total:m1691_2, partial:m1691_3 +# 1691| r1691_5(glval) = VariableAddress[#this] : +# 1691| m1691_6(glval) = InitializeParameter[#this] : &:r1691_5 +# 1691| r1691_7(glval) = Load[#this] : &:r1691_5, m1691_6 +# 1691| m1691_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1691_7 +# 1691| v1691_9(void) = NoOp : +# 1691| v1691_10(void) = NoOp : +# 1691| v1691_11(void) = ReturnIndirection[#this] : &:r1691_7, m1691_8 +# 1691| v1691_12(void) = ReturnVoid : +# 1691| v1691_13(void) = AliasedUse : m1691_3 +# 1691| v1691_14(void) = ExitFunction : -# 1693| int goto_on_same_line() -# 1693| Block 0 -# 1693| v1693_1(void) = EnterFunction : -# 1693| m1693_2(unknown) = AliasedDefinition : -# 1693| m1693_3(unknown) = InitializeNonLocal : -# 1693| m1693_4(unknown) = Chi : total:m1693_2, partial:m1693_3 -# 1694| r1694_1(glval) = VariableAddress[x] : -# 1694| r1694_2(int) = Constant[42] : -# 1694| m1694_3(int) = Store[x] : &:r1694_1, r1694_2 -# 1695| v1695_1(void) = NoOp : -# 1695| v1695_2(void) = NoOp : -# 1696| r1696_1(glval) = VariableAddress[#return] : -# 1696| r1696_2(glval) = VariableAddress[x] : -# 1696| r1696_3(int) = Load[x] : &:r1696_2, m1694_3 -# 1696| m1696_4(int) = Store[#return] : &:r1696_1, r1696_3 -# 1693| r1693_5(glval) = VariableAddress[#return] : -# 1693| v1693_6(void) = ReturnValue : &:r1693_5, m1696_4 -# 1693| v1693_7(void) = AliasedUse : m1693_3 -# 1693| v1693_8(void) = ExitFunction : +# 1695| int goto_on_same_line() +# 1695| Block 0 +# 1695| v1695_1(void) = EnterFunction : +# 1695| m1695_2(unknown) = AliasedDefinition : +# 1695| m1695_3(unknown) = InitializeNonLocal : +# 1695| m1695_4(unknown) = Chi : total:m1695_2, partial:m1695_3 +# 1696| r1696_1(glval) = VariableAddress[x] : +# 1696| r1696_2(int) = Constant[42] : +# 1696| m1696_3(int) = Store[x] : &:r1696_1, r1696_2 +# 1697| v1697_1(void) = NoOp : +# 1697| v1697_2(void) = NoOp : +# 1698| r1698_1(glval) = VariableAddress[#return] : +# 1698| r1698_2(glval) = VariableAddress[x] : +# 1698| r1698_3(int) = Load[x] : &:r1698_2, m1696_3 +# 1698| m1698_4(int) = Store[#return] : &:r1698_1, r1698_3 +# 1695| r1695_5(glval) = VariableAddress[#return] : +# 1695| v1695_6(void) = ReturnValue : &:r1695_5, m1698_4 +# 1695| v1695_7(void) = AliasedUse : m1695_3 +# 1695| v1695_8(void) = ExitFunction : -# 1701| void TrivialLambdaClass::m() const -# 1701| Block 0 -# 1701| v1701_1(void) = EnterFunction : -# 1701| m1701_2(unknown) = AliasedDefinition : -# 1701| m1701_3(unknown) = InitializeNonLocal : -# 1701| m1701_4(unknown) = Chi : total:m1701_2, partial:m1701_3 -# 1701| r1701_5(glval) = VariableAddress[#this] : -# 1701| m1701_6(glval) = InitializeParameter[#this] : &:r1701_5 -# 1701| r1701_7(glval) = Load[#this] : &:r1701_5, m1701_6 -# 1701| m1701_8(TrivialLambdaClass) = InitializeIndirection[#this] : &:r1701_7 -# 1702| r1702_1(glval) = VariableAddress[l_m_outer] : -# 1702| r1702_2(glval) = VariableAddress[#temp1702:25] : -# 1702| m1702_3(decltype([...](...){...})) = Uninitialized[#temp1702:25] : &:r1702_2 -# 1702| r1702_4(glval) = FieldAddress[(captured this)] : r1702_2 -# 1702| r1702_5(glval) = VariableAddress[#this] : -# 1702| r1702_6(TrivialLambdaClass *) = Load[#this] : &:r1702_5, m1701_6 -# 1702| r1702_7(TrivialLambdaClass) = Load[?] : &:r1702_6, ~m1701_8 -# 1702| m1702_8(TrivialLambdaClass) = Store[?] : &:r1702_4, r1702_7 -# 1702| r1702_9(decltype([...](...){...})) = Load[#temp1702:25] : &:r1702_2, ~m1702_8 -# 1702| m1702_10(decltype([...](...){...})) = Store[l_m_outer] : &:r1702_1, r1702_9 -# 1709| v1709_1(void) = NoOp : -# 1701| v1701_9(void) = ReturnIndirection[#this] : &:r1701_7, m1701_8 -# 1701| v1701_10(void) = ReturnVoid : -# 1701| v1701_11(void) = AliasedUse : m1701_3 -# 1701| v1701_12(void) = ExitFunction : +# 1703| void TrivialLambdaClass::m() const +# 1703| Block 0 +# 1703| v1703_1(void) = EnterFunction : +# 1703| m1703_2(unknown) = AliasedDefinition : +# 1703| m1703_3(unknown) = InitializeNonLocal : +# 1703| m1703_4(unknown) = Chi : total:m1703_2, partial:m1703_3 +# 1703| r1703_5(glval) = VariableAddress[#this] : +# 1703| m1703_6(glval) = InitializeParameter[#this] : &:r1703_5 +# 1703| r1703_7(glval) = Load[#this] : &:r1703_5, m1703_6 +# 1703| m1703_8(TrivialLambdaClass) = InitializeIndirection[#this] : &:r1703_7 +# 1704| r1704_1(glval) = VariableAddress[l_m_outer] : +# 1704| r1704_2(glval) = VariableAddress[#temp1704:25] : +# 1704| m1704_3(decltype([...](...){...})) = Uninitialized[#temp1704:25] : &:r1704_2 +# 1704| r1704_4(glval) = FieldAddress[(captured this)] : r1704_2 +# 1704| r1704_5(glval) = VariableAddress[#this] : +# 1704| r1704_6(TrivialLambdaClass *) = Load[#this] : &:r1704_5, m1703_6 +# 1704| r1704_7(TrivialLambdaClass) = Load[?] : &:r1704_6, ~m1703_8 +# 1704| m1704_8(TrivialLambdaClass) = Store[?] : &:r1704_4, r1704_7 +# 1704| r1704_9(decltype([...](...){...})) = Load[#temp1704:25] : &:r1704_2, ~m1704_8 +# 1704| m1704_10(decltype([...](...){...})) = Store[l_m_outer] : &:r1704_1, r1704_9 +# 1711| v1711_1(void) = NoOp : +# 1703| v1703_9(void) = ReturnIndirection[#this] : &:r1703_7, m1703_8 +# 1703| v1703_10(void) = ReturnVoid : +# 1703| v1703_11(void) = AliasedUse : m1703_3 +# 1703| v1703_12(void) = ExitFunction : -# 1702| void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1702, col. 26)::operator()() const -# 1702| Block 0 -# 1702| v1702_1(void) = EnterFunction : -# 1702| m1702_2(unknown) = AliasedDefinition : -# 1702| m1702_3(unknown) = InitializeNonLocal : -# 1702| m1702_4(unknown) = Chi : total:m1702_2, partial:m1702_3 -# 1702| r1702_5(glval) = VariableAddress[#this] : -# 1702| m1702_6(glval) = InitializeParameter[#this] : &:r1702_5 -# 1702| r1702_7(glval) = Load[#this] : &:r1702_5, m1702_6 -# 1702| m1702_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1702_7 -# 1703| r1703_1(glval) = VariableAddress[#this] : -# 1703| r1703_2(lambda [] type at line 1702, col. 26 *) = Load[#this] : &:r1703_1, m1702_6 -# 1703| r1703_3(glval) = FieldAddress[(captured this)] : r1703_2 -# 1703| r1703_4(TrivialLambdaClass *) = CopyValue : r1703_3 -# 1703| r1703_5(glval) = FunctionAddress[m] : -# 1703| v1703_6(void) = Call[m] : func:r1703_5, this:r1703_4 -# 1703| m1703_7(unknown) = ^CallSideEffect : ~m1702_4 -# 1703| m1703_8(unknown) = Chi : total:m1702_4, partial:m1703_7 -# 1703| v1703_9(void) = ^IndirectReadSideEffect[-1] : &:r1703_4, ~m1702_8 -# 1705| r1705_1(glval) = VariableAddress[l_m_inner] : -# 1705| r1705_2(glval) = VariableAddress[#temp1705:29] : -# 1705| m1705_3(decltype([...](...){...})) = Uninitialized[#temp1705:29] : &:r1705_2 -# 1705| r1705_4(glval) = FieldAddress[(captured this)] : r1705_2 -# 1705| r1705_5(glval) = VariableAddress[#this] : -# 1705| r1705_6(lambda [] type at line 1705, col. 30 *) = Load[#this] : &:r1705_5, m1702_6 -# 1705| r1705_7(glval) = FieldAddress[(captured this)] : r1705_6 -# 1705| r1705_8(TrivialLambdaClass) = Load[?] : &:r1705_7, ~m1702_8 -# 1705| m1705_9(TrivialLambdaClass) = Store[?] : &:r1705_4, r1705_8 -# 1705| r1705_10(decltype([...](...){...})) = Load[#temp1705:29] : &:r1705_2, ~m1705_9 -# 1705| m1705_11(decltype([...](...){...})) = Store[l_m_inner] : &:r1705_1, r1705_10 -# 1708| v1708_1(void) = NoOp : -# 1702| v1702_9(void) = ReturnIndirection[#this] : &:r1702_7, m1702_8 -# 1702| v1702_10(void) = ReturnVoid : -# 1702| v1702_11(void) = AliasedUse : ~m1703_8 -# 1702| v1702_12(void) = ExitFunction : +# 1704| void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26)::operator()() const +# 1704| Block 0 +# 1704| v1704_1(void) = EnterFunction : +# 1704| m1704_2(unknown) = AliasedDefinition : +# 1704| m1704_3(unknown) = InitializeNonLocal : +# 1704| m1704_4(unknown) = Chi : total:m1704_2, partial:m1704_3 +# 1704| r1704_5(glval) = VariableAddress[#this] : +# 1704| m1704_6(glval) = InitializeParameter[#this] : &:r1704_5 +# 1704| r1704_7(glval) = Load[#this] : &:r1704_5, m1704_6 +# 1704| m1704_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1704_7 +# 1705| r1705_1(glval) = VariableAddress[#this] : +# 1705| r1705_2(lambda [] type at line 1704, col. 26 *) = Load[#this] : &:r1705_1, m1704_6 +# 1705| r1705_3(glval) = FieldAddress[(captured this)] : r1705_2 +# 1705| r1705_4(TrivialLambdaClass *) = CopyValue : r1705_3 +# 1705| r1705_5(glval) = FunctionAddress[m] : +# 1705| v1705_6(void) = Call[m] : func:r1705_5, this:r1705_4 +# 1705| m1705_7(unknown) = ^CallSideEffect : ~m1704_4 +# 1705| m1705_8(unknown) = Chi : total:m1704_4, partial:m1705_7 +# 1705| v1705_9(void) = ^IndirectReadSideEffect[-1] : &:r1705_4, ~m1704_8 +# 1707| r1707_1(glval) = VariableAddress[l_m_inner] : +# 1707| r1707_2(glval) = VariableAddress[#temp1707:29] : +# 1707| m1707_3(decltype([...](...){...})) = Uninitialized[#temp1707:29] : &:r1707_2 +# 1707| r1707_4(glval) = FieldAddress[(captured this)] : r1707_2 +# 1707| r1707_5(glval) = VariableAddress[#this] : +# 1707| r1707_6(lambda [] type at line 1707, col. 30 *) = Load[#this] : &:r1707_5, m1704_6 +# 1707| r1707_7(glval) = FieldAddress[(captured this)] : r1707_6 +# 1707| r1707_8(TrivialLambdaClass) = Load[?] : &:r1707_7, ~m1704_8 +# 1707| m1707_9(TrivialLambdaClass) = Store[?] : &:r1707_4, r1707_8 +# 1707| r1707_10(decltype([...](...){...})) = Load[#temp1707:29] : &:r1707_2, ~m1707_9 +# 1707| m1707_11(decltype([...](...){...})) = Store[l_m_inner] : &:r1707_1, r1707_10 +# 1710| v1710_1(void) = NoOp : +# 1704| v1704_9(void) = ReturnIndirection[#this] : &:r1704_7, m1704_8 +# 1704| v1704_10(void) = ReturnVoid : +# 1704| v1704_11(void) = AliasedUse : ~m1705_8 +# 1704| v1704_12(void) = ExitFunction : -# 1705| void (void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1702, col. 26)::operator()() const)::(lambda [] type at line 1705, col. 30)::operator()() const -# 1705| Block 0 -# 1705| v1705_1(void) = EnterFunction : -# 1705| m1705_2(unknown) = AliasedDefinition : -# 1705| m1705_3(unknown) = InitializeNonLocal : -# 1705| m1705_4(unknown) = Chi : total:m1705_2, partial:m1705_3 -# 1705| r1705_5(glval) = VariableAddress[#this] : -# 1705| m1705_6(glval) = InitializeParameter[#this] : &:r1705_5 -# 1705| r1705_7(glval) = Load[#this] : &:r1705_5, m1705_6 -# 1705| m1705_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1705_7 -# 1706| r1706_1(glval) = VariableAddress[#this] : -# 1706| r1706_2(lambda [] type at line 1705, col. 30 *) = Load[#this] : &:r1706_1, m1705_6 -# 1706| r1706_3(glval) = FieldAddress[(captured this)] : r1706_2 -# 1706| r1706_4(TrivialLambdaClass *) = CopyValue : r1706_3 -# 1706| r1706_5(glval) = FunctionAddress[m] : -# 1706| v1706_6(void) = Call[m] : func:r1706_5, this:r1706_4 -# 1706| m1706_7(unknown) = ^CallSideEffect : ~m1705_4 -# 1706| m1706_8(unknown) = Chi : total:m1705_4, partial:m1706_7 -# 1706| v1706_9(void) = ^IndirectReadSideEffect[-1] : &:r1706_4, ~m1705_8 -# 1707| v1707_1(void) = NoOp : -# 1705| v1705_9(void) = ReturnIndirection[#this] : &:r1705_7, m1705_8 -# 1705| v1705_10(void) = ReturnVoid : -# 1705| v1705_11(void) = AliasedUse : ~m1706_8 -# 1705| v1705_12(void) = ExitFunction : +# 1707| void (void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26)::operator()() const)::(lambda [] type at line 1707, col. 30)::operator()() const +# 1707| Block 0 +# 1707| v1707_1(void) = EnterFunction : +# 1707| m1707_2(unknown) = AliasedDefinition : +# 1707| m1707_3(unknown) = InitializeNonLocal : +# 1707| m1707_4(unknown) = Chi : total:m1707_2, partial:m1707_3 +# 1707| r1707_5(glval) = VariableAddress[#this] : +# 1707| m1707_6(glval) = InitializeParameter[#this] : &:r1707_5 +# 1707| r1707_7(glval) = Load[#this] : &:r1707_5, m1707_6 +# 1707| m1707_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1707_7 +# 1708| r1708_1(glval) = VariableAddress[#this] : +# 1708| r1708_2(lambda [] type at line 1707, col. 30 *) = Load[#this] : &:r1708_1, m1707_6 +# 1708| r1708_3(glval) = FieldAddress[(captured this)] : r1708_2 +# 1708| r1708_4(TrivialLambdaClass *) = CopyValue : r1708_3 +# 1708| r1708_5(glval) = FunctionAddress[m] : +# 1708| v1708_6(void) = Call[m] : func:r1708_5, this:r1708_4 +# 1708| m1708_7(unknown) = ^CallSideEffect : ~m1707_4 +# 1708| m1708_8(unknown) = Chi : total:m1707_4, partial:m1708_7 +# 1708| v1708_9(void) = ^IndirectReadSideEffect[-1] : &:r1708_4, ~m1707_8 +# 1709| v1709_1(void) = NoOp : +# 1707| v1707_9(void) = ReturnIndirection[#this] : &:r1707_7, m1707_8 +# 1707| v1707_10(void) = ReturnVoid : +# 1707| v1707_11(void) = AliasedUse : ~m1708_8 +# 1707| v1707_12(void) = ExitFunction : -# 1712| void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&) -# 1712| Block 0 -# 1712| v1712_1(void) = EnterFunction : -# 1712| m1712_2(unknown) = AliasedDefinition : -# 1712| m1712_3(unknown) = InitializeNonLocal : -# 1712| m1712_4(unknown) = Chi : total:m1712_2, partial:m1712_3 -# 1712| r1712_5(glval) = VariableAddress[p1] : -# 1712| m1712_6(TrivialLambdaClass) = InitializeParameter[p1] : &:r1712_5 -# 1712| r1712_7(glval) = VariableAddress[p2] : -# 1712| m1712_8(TrivialLambdaClass &) = InitializeParameter[p2] : &:r1712_7 -# 1712| r1712_9(TrivialLambdaClass &) = Load[p2] : &:r1712_7, m1712_8 -# 1712| m1712_10(unknown) = InitializeIndirection[p2] : &:r1712_9 -# 1712| r1712_11(glval) = VariableAddress[p3] : -# 1712| m1712_12(TrivialLambdaClass &&) = InitializeParameter[p3] : &:r1712_11 -# 1712| r1712_13(TrivialLambdaClass &&) = Load[p3] : &:r1712_11, m1712_12 -# 1712| m1712_14(unknown) = InitializeIndirection[p3] : &:r1712_13 -# 1713| r1713_1(glval) = VariableAddress[l1] : -# 1713| m1713_2(TrivialLambdaClass) = Uninitialized[l1] : &:r1713_1 -# 1714| r1714_1(glval) = VariableAddress[l2] : -# 1714| r1714_2(glval) = VariableAddress[#temp1714:36] : -# 1714| r1714_3(TrivialLambdaClass) = Constant[0] : -# 1714| m1714_4(TrivialLambdaClass) = Store[#temp1714:36] : &:r1714_2, r1714_3 -# 1714| r1714_5(glval) = Convert : r1714_2 -# 1714| r1714_6(TrivialLambdaClass &) = CopyValue : r1714_5 -# 1714| m1714_7(TrivialLambdaClass &) = Store[l2] : &:r1714_1, r1714_6 -# 1716| r1716_1(glval) = VariableAddress[l_outer1] : -# 1716| r1716_2(glval) = VariableAddress[#temp1716:20] : -# 1716| m1716_3(decltype([...](...){...})) = Uninitialized[#temp1716:20] : &:r1716_2 -# 1716| r1716_4(glval) = FieldAddress[p1] : r1716_2 -# 1716| r1716_5(glval) = VariableAddress[p1] : -# 1716| r1716_6(TrivialLambdaClass) = Load[p1] : &:r1716_5, m1712_6 -# 1716| m1716_7(TrivialLambdaClass) = Store[?] : &:r1716_4, r1716_6 -# 1716| m1716_8(decltype([...](...){...})) = Chi : total:m1716_3, partial:m1716_7 -# 1716| r1716_9(glval) = FieldAddress[p2] : r1716_2 -# 1716| r1716_10(glval) = VariableAddress[p2] : -# 1716| r1716_11(TrivialLambdaClass &) = Load[p2] : &:r1716_10, m1712_8 -#-----| r0_1(TrivialLambdaClass) = Load[?] : &:r1716_11, ~m1712_10 -#-----| m0_2(TrivialLambdaClass) = Store[?] : &:r1716_9, r0_1 -#-----| m0_3(decltype([...](...){...})) = Chi : total:m1716_8, partial:m0_2 -# 1716| r1716_12(glval) = FieldAddress[p3] : r1716_2 -# 1716| r1716_13(glval) = VariableAddress[p3] : -# 1716| r1716_14(TrivialLambdaClass &&) = Load[p3] : &:r1716_13, m1712_12 -#-----| r0_4(TrivialLambdaClass) = Load[?] : &:r1716_14, ~m1712_14 -#-----| m0_5(TrivialLambdaClass) = Store[?] : &:r1716_12, r0_4 +# 1714| void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&) +# 1714| Block 0 +# 1714| v1714_1(void) = EnterFunction : +# 1714| m1714_2(unknown) = AliasedDefinition : +# 1714| m1714_3(unknown) = InitializeNonLocal : +# 1714| m1714_4(unknown) = Chi : total:m1714_2, partial:m1714_3 +# 1714| r1714_5(glval) = VariableAddress[p1] : +# 1714| m1714_6(TrivialLambdaClass) = InitializeParameter[p1] : &:r1714_5 +# 1714| r1714_7(glval) = VariableAddress[p2] : +# 1714| m1714_8(TrivialLambdaClass &) = InitializeParameter[p2] : &:r1714_7 +# 1714| r1714_9(TrivialLambdaClass &) = Load[p2] : &:r1714_7, m1714_8 +# 1714| m1714_10(unknown) = InitializeIndirection[p2] : &:r1714_9 +# 1714| r1714_11(glval) = VariableAddress[p3] : +# 1714| m1714_12(TrivialLambdaClass &&) = InitializeParameter[p3] : &:r1714_11 +# 1714| r1714_13(TrivialLambdaClass &&) = Load[p3] : &:r1714_11, m1714_12 +# 1714| m1714_14(unknown) = InitializeIndirection[p3] : &:r1714_13 +# 1715| r1715_1(glval) = VariableAddress[l1] : +# 1715| m1715_2(TrivialLambdaClass) = Uninitialized[l1] : &:r1715_1 +# 1716| r1716_1(glval) = VariableAddress[l2] : +# 1716| r1716_2(glval) = VariableAddress[#temp1716:36] : +# 1716| r1716_3(TrivialLambdaClass) = Constant[0] : +# 1716| m1716_4(TrivialLambdaClass) = Store[#temp1716:36] : &:r1716_2, r1716_3 +# 1716| r1716_5(glval) = Convert : r1716_2 +# 1716| r1716_6(TrivialLambdaClass &) = CopyValue : r1716_5 +# 1716| m1716_7(TrivialLambdaClass &) = Store[l2] : &:r1716_1, r1716_6 +# 1718| r1718_1(glval) = VariableAddress[l_outer1] : +# 1718| r1718_2(glval) = VariableAddress[#temp1718:20] : +# 1718| m1718_3(decltype([...](...){...})) = Uninitialized[#temp1718:20] : &:r1718_2 +# 1718| r1718_4(glval) = FieldAddress[p1] : r1718_2 +# 1718| r1718_5(glval) = VariableAddress[p1] : +# 1718| r1718_6(TrivialLambdaClass) = Load[p1] : &:r1718_5, m1714_6 +# 1718| m1718_7(TrivialLambdaClass) = Store[?] : &:r1718_4, r1718_6 +# 1718| m1718_8(decltype([...](...){...})) = Chi : total:m1718_3, partial:m1718_7 +# 1718| r1718_9(glval) = FieldAddress[p2] : r1718_2 +# 1718| r1718_10(glval) = VariableAddress[p2] : +# 1718| r1718_11(TrivialLambdaClass &) = Load[p2] : &:r1718_10, m1714_8 +#-----| r0_1(TrivialLambdaClass) = Load[?] : &:r1718_11, ~m1714_10 +#-----| m0_2(TrivialLambdaClass) = Store[?] : &:r1718_9, r0_1 +#-----| m0_3(decltype([...](...){...})) = Chi : total:m1718_8, partial:m0_2 +# 1718| r1718_12(glval) = FieldAddress[p3] : r1718_2 +# 1718| r1718_13(glval) = VariableAddress[p3] : +# 1718| r1718_14(TrivialLambdaClass &&) = Load[p3] : &:r1718_13, m1714_12 +#-----| r0_4(TrivialLambdaClass) = Load[?] : &:r1718_14, ~m1714_14 +#-----| m0_5(TrivialLambdaClass) = Store[?] : &:r1718_12, r0_4 #-----| m0_6(decltype([...](...){...})) = Chi : total:m0_3, partial:m0_5 -# 1716| r1716_15(glval) = FieldAddress[l1] : r1716_2 -# 1716| r1716_16(glval) = VariableAddress[l1] : -# 1716| r1716_17(TrivialLambdaClass) = Load[l1] : &:r1716_16, m1713_2 -# 1716| m1716_18(TrivialLambdaClass) = Store[?] : &:r1716_15, r1716_17 -# 1716| m1716_19(decltype([...](...){...})) = Chi : total:m0_6, partial:m1716_18 -# 1716| r1716_20(glval) = FieldAddress[l2] : r1716_2 -# 1716| r1716_21(glval) = VariableAddress[l2] : -# 1716| r1716_22(TrivialLambdaClass &) = Load[l2] : &:r1716_21, m1714_7 -#-----| r0_7(TrivialLambdaClass) = Load[?] : &:r1716_22, m1714_4 -#-----| m0_8(TrivialLambdaClass) = Store[?] : &:r1716_20, r0_7 -#-----| m0_9(decltype([...](...){...})) = Chi : total:m1716_19, partial:m0_8 -# 1716| r1716_23(decltype([...](...){...})) = Load[#temp1716:20] : &:r1716_2, m0_9 -# 1716| m1716_24(decltype([...](...){...})) = Store[l_outer1] : &:r1716_1, r1716_23 -# 1719| v1719_1(void) = NoOp : -# 1712| v1712_15(void) = ReturnIndirection[p2] : &:r1712_9, m1712_10 -# 1712| v1712_16(void) = ReturnIndirection[p3] : &:r1712_13, m1712_14 -# 1712| v1712_17(void) = ReturnVoid : -# 1712| v1712_18(void) = AliasedUse : m1712_3 -# 1712| v1712_19(void) = ExitFunction : +# 1718| r1718_15(glval) = FieldAddress[l1] : r1718_2 +# 1718| r1718_16(glval) = VariableAddress[l1] : +# 1718| r1718_17(TrivialLambdaClass) = Load[l1] : &:r1718_16, m1715_2 +# 1718| m1718_18(TrivialLambdaClass) = Store[?] : &:r1718_15, r1718_17 +# 1718| m1718_19(decltype([...](...){...})) = Chi : total:m0_6, partial:m1718_18 +# 1718| r1718_20(glval) = FieldAddress[l2] : r1718_2 +# 1718| r1718_21(glval) = VariableAddress[l2] : +# 1718| r1718_22(TrivialLambdaClass &) = Load[l2] : &:r1718_21, m1716_7 +#-----| r0_7(TrivialLambdaClass) = Load[?] : &:r1718_22, m1716_4 +#-----| m0_8(TrivialLambdaClass) = Store[?] : &:r1718_20, r0_7 +#-----| m0_9(decltype([...](...){...})) = Chi : total:m1718_19, partial:m0_8 +# 1718| r1718_23(decltype([...](...){...})) = Load[#temp1718:20] : &:r1718_2, m0_9 +# 1718| m1718_24(decltype([...](...){...})) = Store[l_outer1] : &:r1718_1, r1718_23 +# 1721| v1721_1(void) = NoOp : +# 1714| v1714_15(void) = ReturnIndirection[p2] : &:r1714_9, m1714_10 +# 1714| v1714_16(void) = ReturnIndirection[p3] : &:r1714_13, m1714_14 +# 1714| v1714_17(void) = ReturnVoid : +# 1714| v1714_18(void) = AliasedUse : m1714_3 +# 1714| v1714_19(void) = ExitFunction : -# 1716| void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1716, col. 21)::operator()() const -# 1716| Block 0 -# 1716| v1716_1(void) = EnterFunction : -# 1716| m1716_2(unknown) = AliasedDefinition : -# 1716| m1716_3(unknown) = InitializeNonLocal : -# 1716| m1716_4(unknown) = Chi : total:m1716_2, partial:m1716_3 -# 1716| r1716_5(glval) = VariableAddress[#this] : -# 1716| m1716_6(glval) = InitializeParameter[#this] : &:r1716_5 -# 1716| r1716_7(glval) = Load[#this] : &:r1716_5, m1716_6 -# 1716| m1716_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1716_7 -# 1717| r1717_1(glval) = VariableAddress[l_inner1] : -# 1717| r1717_2(glval) = VariableAddress[#temp1717:24] : -# 1717| m1717_3(decltype([...](...){...})) = Uninitialized[#temp1717:24] : &:r1717_2 -# 1717| r1717_4(glval) = FieldAddress[p1] : r1717_2 -# 1717| r1717_5(glval) = VariableAddress[#this] : -# 1717| r1717_6(lambda [] type at line 1717, col. 25 *) = Load[#this] : &:r1717_5, m1716_6 -# 1717| r1717_7(glval) = FieldAddress[p1] : r1717_6 -# 1717| r1717_8(TrivialLambdaClass) = Load[?] : &:r1717_7, ~m1716_8 -# 1717| m1717_9(TrivialLambdaClass) = Store[?] : &:r1717_4, r1717_8 -# 1717| r1717_10(decltype([...](...){...})) = Load[#temp1717:24] : &:r1717_2, ~m1717_9 -# 1717| m1717_11(decltype([...](...){...})) = Store[l_inner1] : &:r1717_1, r1717_10 -# 1718| v1718_1(void) = NoOp : -# 1716| v1716_9(void) = ReturnIndirection[#this] : &:r1716_7, m1716_8 -# 1716| v1716_10(void) = ReturnVoid : -# 1716| v1716_11(void) = AliasedUse : m1716_3 -# 1716| v1716_12(void) = ExitFunction : +# 1718| void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21)::operator()() const +# 1718| Block 0 +# 1718| v1718_1(void) = EnterFunction : +# 1718| m1718_2(unknown) = AliasedDefinition : +# 1718| m1718_3(unknown) = InitializeNonLocal : +# 1718| m1718_4(unknown) = Chi : total:m1718_2, partial:m1718_3 +# 1718| r1718_5(glval) = VariableAddress[#this] : +# 1718| m1718_6(glval) = InitializeParameter[#this] : &:r1718_5 +# 1718| r1718_7(glval) = Load[#this] : &:r1718_5, m1718_6 +# 1718| m1718_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1718_7 +# 1719| r1719_1(glval) = VariableAddress[l_inner1] : +# 1719| r1719_2(glval) = VariableAddress[#temp1719:24] : +# 1719| m1719_3(decltype([...](...){...})) = Uninitialized[#temp1719:24] : &:r1719_2 +# 1719| r1719_4(glval) = FieldAddress[p1] : r1719_2 +# 1719| r1719_5(glval) = VariableAddress[#this] : +# 1719| r1719_6(lambda [] type at line 1719, col. 25 *) = Load[#this] : &:r1719_5, m1718_6 +# 1719| r1719_7(glval) = FieldAddress[p1] : r1719_6 +# 1719| r1719_8(TrivialLambdaClass) = Load[?] : &:r1719_7, ~m1718_8 +# 1719| m1719_9(TrivialLambdaClass) = Store[?] : &:r1719_4, r1719_8 +# 1719| r1719_10(decltype([...](...){...})) = Load[#temp1719:24] : &:r1719_2, ~m1719_9 +# 1719| m1719_11(decltype([...](...){...})) = Store[l_inner1] : &:r1719_1, r1719_10 +# 1720| v1720_1(void) = NoOp : +# 1718| v1718_9(void) = ReturnIndirection[#this] : &:r1718_7, m1718_8 +# 1718| v1718_10(void) = ReturnVoid : +# 1718| v1718_11(void) = AliasedUse : m1718_3 +# 1718| v1718_12(void) = ExitFunction : -# 1717| void (void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1716, col. 21)::operator()() const)::(lambda [] type at line 1717, col. 25)::operator()() const -# 1717| Block 0 -# 1717| v1717_1(void) = EnterFunction : -# 1717| m1717_2(unknown) = AliasedDefinition : -# 1717| m1717_3(unknown) = InitializeNonLocal : -# 1717| m1717_4(unknown) = Chi : total:m1717_2, partial:m1717_3 -# 1717| r1717_5(glval) = VariableAddress[#this] : -# 1717| m1717_6(glval) = InitializeParameter[#this] : &:r1717_5 -# 1717| r1717_7(glval) = Load[#this] : &:r1717_5, m1717_6 -# 1717| m1717_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1717_7 -# 1717| v1717_9(void) = NoOp : -# 1717| v1717_10(void) = ReturnIndirection[#this] : &:r1717_7, m1717_8 -# 1717| v1717_11(void) = ReturnVoid : -# 1717| v1717_12(void) = AliasedUse : m1717_3 -# 1717| v1717_13(void) = ExitFunction : +# 1719| void (void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21)::operator()() const)::(lambda [] type at line 1719, col. 25)::operator()() const +# 1719| Block 0 +# 1719| v1719_1(void) = EnterFunction : +# 1719| m1719_2(unknown) = AliasedDefinition : +# 1719| m1719_3(unknown) = InitializeNonLocal : +# 1719| m1719_4(unknown) = Chi : total:m1719_2, partial:m1719_3 +# 1719| r1719_5(glval) = VariableAddress[#this] : +# 1719| m1719_6(glval) = InitializeParameter[#this] : &:r1719_5 +# 1719| r1719_7(glval) = Load[#this] : &:r1719_5, m1719_6 +# 1719| m1719_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1719_7 +# 1719| v1719_9(void) = NoOp : +# 1719| v1719_10(void) = ReturnIndirection[#this] : &:r1719_7, m1719_8 +# 1719| v1719_11(void) = ReturnVoid : +# 1719| v1719_12(void) = AliasedUse : m1719_3 +# 1719| v1719_13(void) = ExitFunction : -# 1724| void CopyConstructorWithImplicitArgumentClass::CopyConstructorWithImplicitArgumentClass() -# 1724| Block 0 -# 1724| v1724_1(void) = EnterFunction : -# 1724| m1724_2(unknown) = AliasedDefinition : -# 1724| m1724_3(unknown) = InitializeNonLocal : -# 1724| m1724_4(unknown) = Chi : total:m1724_2, partial:m1724_3 -# 1724| r1724_5(glval) = VariableAddress[#this] : -# 1724| m1724_6(glval) = InitializeParameter[#this] : &:r1724_5 -# 1724| r1724_7(glval) = Load[#this] : &:r1724_5, m1724_6 -# 1724| m1724_8(CopyConstructorWithImplicitArgumentClass) = InitializeIndirection[#this] : &:r1724_7 -# 1724| v1724_9(void) = NoOp : -# 1724| v1724_10(void) = ReturnIndirection[#this] : &:r1724_7, m1724_8 -# 1724| v1724_11(void) = ReturnVoid : -# 1724| v1724_12(void) = AliasedUse : m1724_3 -# 1724| v1724_13(void) = ExitFunction : +# 1726| void CopyConstructorWithImplicitArgumentClass::CopyConstructorWithImplicitArgumentClass() +# 1726| Block 0 +# 1726| v1726_1(void) = EnterFunction : +# 1726| m1726_2(unknown) = AliasedDefinition : +# 1726| m1726_3(unknown) = InitializeNonLocal : +# 1726| m1726_4(unknown) = Chi : total:m1726_2, partial:m1726_3 +# 1726| r1726_5(glval) = VariableAddress[#this] : +# 1726| m1726_6(glval) = InitializeParameter[#this] : &:r1726_5 +# 1726| r1726_7(glval) = Load[#this] : &:r1726_5, m1726_6 +# 1726| m1726_8(CopyConstructorWithImplicitArgumentClass) = InitializeIndirection[#this] : &:r1726_7 +# 1726| v1726_9(void) = NoOp : +# 1726| v1726_10(void) = ReturnIndirection[#this] : &:r1726_7, m1726_8 +# 1726| v1726_11(void) = ReturnVoid : +# 1726| v1726_12(void) = AliasedUse : m1726_3 +# 1726| v1726_13(void) = ExitFunction : -# 1725| void CopyConstructorWithImplicitArgumentClass::CopyConstructorWithImplicitArgumentClass(CopyConstructorWithImplicitArgumentClass const&) -# 1725| Block 0 -# 1725| v1725_1(void) = EnterFunction : -# 1725| m1725_2(unknown) = AliasedDefinition : -# 1725| m1725_3(unknown) = InitializeNonLocal : -# 1725| m1725_4(unknown) = Chi : total:m1725_2, partial:m1725_3 -# 1725| r1725_5(glval) = VariableAddress[#this] : -# 1725| m1725_6(glval) = InitializeParameter[#this] : &:r1725_5 -# 1725| r1725_7(glval) = Load[#this] : &:r1725_5, m1725_6 -# 1725| m1725_8(CopyConstructorWithImplicitArgumentClass) = InitializeIndirection[#this] : &:r1725_7 -# 1725| r1725_9(glval) = VariableAddress[c] : -# 1725| m1725_10(CopyConstructorWithImplicitArgumentClass &) = InitializeParameter[c] : &:r1725_9 -# 1725| r1725_11(CopyConstructorWithImplicitArgumentClass &) = Load[c] : &:r1725_9, m1725_10 -# 1725| m1725_12(unknown) = InitializeIndirection[c] : &:r1725_11 -# 1726| r1726_1(glval) = VariableAddress[c] : -# 1726| r1726_2(CopyConstructorWithImplicitArgumentClass &) = Load[c] : &:r1726_1, m1725_10 -# 1726| r1726_3(glval) = CopyValue : r1726_2 -# 1726| r1726_4(glval) = FieldAddress[x] : r1726_3 -# 1726| r1726_5(int) = Load[?] : &:r1726_4, ~m1725_12 -# 1726| r1726_6(glval) = VariableAddress[#this] : -# 1726| r1726_7(CopyConstructorWithImplicitArgumentClass *) = Load[#this] : &:r1726_6, m1725_6 -# 1726| r1726_8(glval) = FieldAddress[x] : r1726_7 -# 1726| m1726_9(int) = Store[?] : &:r1726_8, r1726_5 -# 1726| m1726_10(unknown) = Chi : total:m1725_8, partial:m1726_9 -# 1727| v1727_1(void) = NoOp : -# 1725| v1725_13(void) = ReturnIndirection[#this] : &:r1725_7, m1726_10 -# 1725| v1725_14(void) = ReturnIndirection[c] : &:r1725_11, m1725_12 -# 1725| v1725_15(void) = ReturnVoid : -# 1725| v1725_16(void) = AliasedUse : m1725_3 -# 1725| v1725_17(void) = ExitFunction : +# 1727| void CopyConstructorWithImplicitArgumentClass::CopyConstructorWithImplicitArgumentClass(CopyConstructorWithImplicitArgumentClass const&) +# 1727| Block 0 +# 1727| v1727_1(void) = EnterFunction : +# 1727| m1727_2(unknown) = AliasedDefinition : +# 1727| m1727_3(unknown) = InitializeNonLocal : +# 1727| m1727_4(unknown) = Chi : total:m1727_2, partial:m1727_3 +# 1727| r1727_5(glval) = VariableAddress[#this] : +# 1727| m1727_6(glval) = InitializeParameter[#this] : &:r1727_5 +# 1727| r1727_7(glval) = Load[#this] : &:r1727_5, m1727_6 +# 1727| m1727_8(CopyConstructorWithImplicitArgumentClass) = InitializeIndirection[#this] : &:r1727_7 +# 1727| r1727_9(glval) = VariableAddress[c] : +# 1727| m1727_10(CopyConstructorWithImplicitArgumentClass &) = InitializeParameter[c] : &:r1727_9 +# 1727| r1727_11(CopyConstructorWithImplicitArgumentClass &) = Load[c] : &:r1727_9, m1727_10 +# 1727| m1727_12(unknown) = InitializeIndirection[c] : &:r1727_11 +# 1728| r1728_1(glval) = VariableAddress[c] : +# 1728| r1728_2(CopyConstructorWithImplicitArgumentClass &) = Load[c] : &:r1728_1, m1727_10 +# 1728| r1728_3(glval) = CopyValue : r1728_2 +# 1728| r1728_4(glval) = FieldAddress[x] : r1728_3 +# 1728| r1728_5(int) = Load[?] : &:r1728_4, ~m1727_12 +# 1728| r1728_6(glval) = VariableAddress[#this] : +# 1728| r1728_7(CopyConstructorWithImplicitArgumentClass *) = Load[#this] : &:r1728_6, m1727_6 +# 1728| r1728_8(glval) = FieldAddress[x] : r1728_7 +# 1728| m1728_9(int) = Store[?] : &:r1728_8, r1728_5 +# 1728| m1728_10(unknown) = Chi : total:m1727_8, partial:m1728_9 +# 1729| v1729_1(void) = NoOp : +# 1727| v1727_13(void) = ReturnIndirection[#this] : &:r1727_7, m1728_10 +# 1727| v1727_14(void) = ReturnIndirection[c] : &:r1727_11, m1727_12 +# 1727| v1727_15(void) = ReturnVoid : +# 1727| v1727_16(void) = AliasedUse : m1727_3 +# 1727| v1727_17(void) = ExitFunction : -# 1733| void CopyConstructorWithBitwiseCopyClass::CopyConstructorWithBitwiseCopyClass() -# 1733| Block 0 -# 1733| v1733_1(void) = EnterFunction : -# 1733| m1733_2(unknown) = AliasedDefinition : -# 1733| m1733_3(unknown) = InitializeNonLocal : -# 1733| m1733_4(unknown) = Chi : total:m1733_2, partial:m1733_3 -# 1733| r1733_5(glval) = VariableAddress[#this] : -# 1733| m1733_6(glval) = InitializeParameter[#this] : &:r1733_5 -# 1733| r1733_7(glval) = Load[#this] : &:r1733_5, m1733_6 -# 1733| m1733_8(CopyConstructorWithBitwiseCopyClass) = InitializeIndirection[#this] : &:r1733_7 -# 1733| v1733_9(void) = NoOp : -# 1733| v1733_10(void) = ReturnIndirection[#this] : &:r1733_7, m1733_8 -# 1733| v1733_11(void) = ReturnVoid : -# 1733| v1733_12(void) = AliasedUse : m1733_3 -# 1733| v1733_13(void) = ExitFunction : +# 1735| void CopyConstructorWithBitwiseCopyClass::CopyConstructorWithBitwiseCopyClass() +# 1735| Block 0 +# 1735| v1735_1(void) = EnterFunction : +# 1735| m1735_2(unknown) = AliasedDefinition : +# 1735| m1735_3(unknown) = InitializeNonLocal : +# 1735| m1735_4(unknown) = Chi : total:m1735_2, partial:m1735_3 +# 1735| r1735_5(glval) = VariableAddress[#this] : +# 1735| m1735_6(glval) = InitializeParameter[#this] : &:r1735_5 +# 1735| r1735_7(glval) = Load[#this] : &:r1735_5, m1735_6 +# 1735| m1735_8(CopyConstructorWithBitwiseCopyClass) = InitializeIndirection[#this] : &:r1735_7 +# 1735| v1735_9(void) = NoOp : +# 1735| v1735_10(void) = ReturnIndirection[#this] : &:r1735_7, m1735_8 +# 1735| v1735_11(void) = ReturnVoid : +# 1735| v1735_12(void) = AliasedUse : m1735_3 +# 1735| v1735_13(void) = ExitFunction : -# 1736| void CopyConstructorTestNonVirtualClass::CopyConstructorTestNonVirtualClass(CopyConstructorTestNonVirtualClass const&) -# 1736| Block 0 -# 1736| v1736_1(void) = EnterFunction : -# 1736| m1736_2(unknown) = AliasedDefinition : -# 1736| m1736_3(unknown) = InitializeNonLocal : -# 1736| m1736_4(unknown) = Chi : total:m1736_2, partial:m1736_3 -# 1736| r1736_5(glval) = VariableAddress[#this] : -# 1736| m1736_6(glval) = InitializeParameter[#this] : &:r1736_5 -# 1736| r1736_7(glval) = Load[#this] : &:r1736_5, m1736_6 -# 1736| m1736_8(CopyConstructorTestNonVirtualClass) = InitializeIndirection[#this] : &:r1736_7 +# 1738| void CopyConstructorTestNonVirtualClass::CopyConstructorTestNonVirtualClass(CopyConstructorTestNonVirtualClass const&) +# 1738| Block 0 +# 1738| v1738_1(void) = EnterFunction : +# 1738| m1738_2(unknown) = AliasedDefinition : +# 1738| m1738_3(unknown) = InitializeNonLocal : +# 1738| m1738_4(unknown) = Chi : total:m1738_2, partial:m1738_3 +# 1738| r1738_5(glval) = VariableAddress[#this] : +# 1738| m1738_6(glval) = InitializeParameter[#this] : &:r1738_5 +# 1738| r1738_7(glval) = Load[#this] : &:r1738_5, m1738_6 +# 1738| m1738_8(CopyConstructorTestNonVirtualClass) = InitializeIndirection[#this] : &:r1738_7 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| m0_2(CopyConstructorTestNonVirtualClass &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(CopyConstructorTestNonVirtualClass &) = Load[(unnamed parameter 0)] : &:r0_1, m0_2 #-----| m0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 1736| r1736_9(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithImplicitArgumentClass] : m1736_6 -# 1736| r1736_10(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : -# 1736| r1736_11(glval) = VariableAddress[(unnamed parameter 0)] : -# 1736| r1736_12(CopyConstructorTestNonVirtualClass &) = Load[(unnamed parameter 0)] : &:r1736_11, m0_2 -# 1736| r1736_13(glval) = CopyValue : r1736_12 -# 1736| r1736_14(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithImplicitArgumentClass] : r1736_13 -# 1736| r1736_15(CopyConstructorWithImplicitArgumentClass &) = CopyValue : r1736_14 -# 1736| v1736_16(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1736_10, this:r1736_9, 0:r1736_15 -# 1736| m1736_17(unknown) = ^CallSideEffect : ~m1736_4 -# 1736| m1736_18(unknown) = Chi : total:m1736_4, partial:m1736_17 -# 1736| v1736_19(void) = ^BufferReadSideEffect[0] : &:r1736_15, ~m0_4 -# 1736| m1736_20(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1736_9 -# 1736| m1736_21(unknown) = Chi : total:m1736_8, partial:m1736_20 -# 1736| v1736_22(void) = NoOp : -# 1736| v1736_23(void) = ReturnIndirection[#this] : &:r1736_7, m1736_21 +# 1738| r1738_9(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithImplicitArgumentClass] : m1738_6 +# 1738| r1738_10(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : +# 1738| r1738_11(glval) = VariableAddress[(unnamed parameter 0)] : +# 1738| r1738_12(CopyConstructorTestNonVirtualClass &) = Load[(unnamed parameter 0)] : &:r1738_11, m0_2 +# 1738| r1738_13(glval) = CopyValue : r1738_12 +# 1738| r1738_14(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithImplicitArgumentClass] : r1738_13 +# 1738| r1738_15(CopyConstructorWithImplicitArgumentClass &) = CopyValue : r1738_14 +# 1738| v1738_16(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1738_10, this:r1738_9, 0:r1738_15 +# 1738| m1738_17(unknown) = ^CallSideEffect : ~m1738_4 +# 1738| m1738_18(unknown) = Chi : total:m1738_4, partial:m1738_17 +# 1738| v1738_19(void) = ^BufferReadSideEffect[0] : &:r1738_15, ~m0_4 +# 1738| m1738_20(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1738_9 +# 1738| m1738_21(unknown) = Chi : total:m1738_8, partial:m1738_20 +# 1738| v1738_22(void) = NoOp : +# 1738| v1738_23(void) = ReturnIndirection[#this] : &:r1738_7, m1738_21 #-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, m0_4 -# 1736| v1736_24(void) = ReturnVoid : -# 1736| v1736_25(void) = AliasedUse : ~m1736_18 -# 1736| v1736_26(void) = ExitFunction : +# 1738| v1738_24(void) = ReturnVoid : +# 1738| v1738_25(void) = AliasedUse : ~m1738_18 +# 1738| v1738_26(void) = ExitFunction : -# 1740| void CopyConstructorTestNonVirtualClass::CopyConstructorTestNonVirtualClass() -# 1740| Block 0 -# 1740| v1740_1(void) = EnterFunction : -# 1740| m1740_2(unknown) = AliasedDefinition : -# 1740| m1740_3(unknown) = InitializeNonLocal : -# 1740| m1740_4(unknown) = Chi : total:m1740_2, partial:m1740_3 -# 1740| r1740_5(glval) = VariableAddress[#this] : -# 1740| m1740_6(glval) = InitializeParameter[#this] : &:r1740_5 -# 1740| r1740_7(glval) = Load[#this] : &:r1740_5, m1740_6 -# 1740| m1740_8(CopyConstructorTestNonVirtualClass) = InitializeIndirection[#this] : &:r1740_7 -# 1740| r1740_9(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithImplicitArgumentClass] : m1740_6 -# 1740| r1740_10(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : -# 1740| v1740_11(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1740_10, this:r1740_9 -# 1740| m1740_12(unknown) = ^CallSideEffect : ~m1740_4 -# 1740| m1740_13(unknown) = Chi : total:m1740_4, partial:m1740_12 -# 1740| m1740_14(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1740_9 -# 1740| m1740_15(unknown) = Chi : total:m1740_8, partial:m1740_14 -# 1740| r1740_16(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithBitwiseCopyClass] : m1740_6 -# 1740| r1740_17(glval) = FunctionAddress[CopyConstructorWithBitwiseCopyClass] : -# 1740| v1740_18(void) = Call[CopyConstructorWithBitwiseCopyClass] : func:r1740_17, this:r1740_16 -# 1740| m1740_19(unknown) = ^CallSideEffect : ~m1740_13 -# 1740| m1740_20(unknown) = Chi : total:m1740_13, partial:m1740_19 -# 1740| m1740_21(CopyConstructorWithBitwiseCopyClass) = ^IndirectMayWriteSideEffect[-1] : &:r1740_16 -# 1740| m1740_22(unknown) = Chi : total:m1740_15, partial:m1740_21 -# 1740| v1740_23(void) = NoOp : -# 1740| v1740_24(void) = ReturnIndirection[#this] : &:r1740_7, m1740_22 -# 1740| v1740_25(void) = ReturnVoid : -# 1740| v1740_26(void) = AliasedUse : ~m1740_20 -# 1740| v1740_27(void) = ExitFunction : +# 1742| void CopyConstructorTestNonVirtualClass::CopyConstructorTestNonVirtualClass() +# 1742| Block 0 +# 1742| v1742_1(void) = EnterFunction : +# 1742| m1742_2(unknown) = AliasedDefinition : +# 1742| m1742_3(unknown) = InitializeNonLocal : +# 1742| m1742_4(unknown) = Chi : total:m1742_2, partial:m1742_3 +# 1742| r1742_5(glval) = VariableAddress[#this] : +# 1742| m1742_6(glval) = InitializeParameter[#this] : &:r1742_5 +# 1742| r1742_7(glval) = Load[#this] : &:r1742_5, m1742_6 +# 1742| m1742_8(CopyConstructorTestNonVirtualClass) = InitializeIndirection[#this] : &:r1742_7 +# 1742| r1742_9(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithImplicitArgumentClass] : m1742_6 +# 1742| r1742_10(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : +# 1742| v1742_11(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1742_10, this:r1742_9 +# 1742| m1742_12(unknown) = ^CallSideEffect : ~m1742_4 +# 1742| m1742_13(unknown) = Chi : total:m1742_4, partial:m1742_12 +# 1742| m1742_14(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1742_9 +# 1742| m1742_15(unknown) = Chi : total:m1742_8, partial:m1742_14 +# 1742| r1742_16(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithBitwiseCopyClass] : m1742_6 +# 1742| r1742_17(glval) = FunctionAddress[CopyConstructorWithBitwiseCopyClass] : +# 1742| v1742_18(void) = Call[CopyConstructorWithBitwiseCopyClass] : func:r1742_17, this:r1742_16 +# 1742| m1742_19(unknown) = ^CallSideEffect : ~m1742_13 +# 1742| m1742_20(unknown) = Chi : total:m1742_13, partial:m1742_19 +# 1742| m1742_21(CopyConstructorWithBitwiseCopyClass) = ^IndirectMayWriteSideEffect[-1] : &:r1742_16 +# 1742| m1742_22(unknown) = Chi : total:m1742_15, partial:m1742_21 +# 1742| v1742_23(void) = NoOp : +# 1742| v1742_24(void) = ReturnIndirection[#this] : &:r1742_7, m1742_22 +# 1742| v1742_25(void) = ReturnVoid : +# 1742| v1742_26(void) = AliasedUse : ~m1742_20 +# 1742| v1742_27(void) = ExitFunction : -# 1743| void CopyConstructorTestVirtualClass::CopyConstructorTestVirtualClass(CopyConstructorTestVirtualClass const&) -# 1743| Block 0 -# 1743| v1743_1(void) = EnterFunction : -# 1743| m1743_2(unknown) = AliasedDefinition : -# 1743| m1743_3(unknown) = InitializeNonLocal : -# 1743| m1743_4(unknown) = Chi : total:m1743_2, partial:m1743_3 -# 1743| r1743_5(glval) = VariableAddress[#this] : -# 1743| m1743_6(glval) = InitializeParameter[#this] : &:r1743_5 -# 1743| r1743_7(glval) = Load[#this] : &:r1743_5, m1743_6 -# 1743| m1743_8(CopyConstructorTestVirtualClass) = InitializeIndirection[#this] : &:r1743_7 +# 1745| void CopyConstructorTestVirtualClass::CopyConstructorTestVirtualClass(CopyConstructorTestVirtualClass const&) +# 1745| Block 0 +# 1745| v1745_1(void) = EnterFunction : +# 1745| m1745_2(unknown) = AliasedDefinition : +# 1745| m1745_3(unknown) = InitializeNonLocal : +# 1745| m1745_4(unknown) = Chi : total:m1745_2, partial:m1745_3 +# 1745| r1745_5(glval) = VariableAddress[#this] : +# 1745| m1745_6(glval) = InitializeParameter[#this] : &:r1745_5 +# 1745| r1745_7(glval) = Load[#this] : &:r1745_5, m1745_6 +# 1745| m1745_8(CopyConstructorTestVirtualClass) = InitializeIndirection[#this] : &:r1745_7 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| m0_2(CopyConstructorTestVirtualClass &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(CopyConstructorTestVirtualClass &) = Load[(unnamed parameter 0)] : &:r0_1, m0_2 #-----| m0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 1743| r1743_9(glval) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithImplicitArgumentClass] : m1743_6 -# 1743| r1743_10(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : -# 1743| r1743_11(glval) = VariableAddress[(unnamed parameter 0)] : -# 1743| r1743_12(CopyConstructorTestVirtualClass &) = Load[(unnamed parameter 0)] : &:r1743_11, m0_2 -# 1743| r1743_13(glval) = CopyValue : r1743_12 -# 1743| r1743_14(glval) = ConvertToVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithImplicitArgumentClass] : r1743_13 -# 1743| r1743_15(CopyConstructorWithImplicitArgumentClass &) = CopyValue : r1743_14 -# 1743| v1743_16(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1743_10, this:r1743_9, 0:r1743_15 -# 1743| m1743_17(unknown) = ^CallSideEffect : ~m1743_4 -# 1743| m1743_18(unknown) = Chi : total:m1743_4, partial:m1743_17 -# 1743| v1743_19(void) = ^BufferReadSideEffect[0] : &:r1743_15, ~m0_4 -# 1743| m1743_20(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1743_9 -# 1743| m1743_21(unknown) = Chi : total:m1743_18, partial:m1743_20 -# 1743| v1743_22(void) = NoOp : -# 1743| v1743_23(void) = ReturnIndirection[#this] : &:r1743_7, m1743_8 +# 1745| r1745_9(glval) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithImplicitArgumentClass] : m1745_6 +# 1745| r1745_10(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : +# 1745| r1745_11(glval) = VariableAddress[(unnamed parameter 0)] : +# 1745| r1745_12(CopyConstructorTestVirtualClass &) = Load[(unnamed parameter 0)] : &:r1745_11, m0_2 +# 1745| r1745_13(glval) = CopyValue : r1745_12 +# 1745| r1745_14(glval) = ConvertToVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithImplicitArgumentClass] : r1745_13 +# 1745| r1745_15(CopyConstructorWithImplicitArgumentClass &) = CopyValue : r1745_14 +# 1745| v1745_16(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1745_10, this:r1745_9, 0:r1745_15 +# 1745| m1745_17(unknown) = ^CallSideEffect : ~m1745_4 +# 1745| m1745_18(unknown) = Chi : total:m1745_4, partial:m1745_17 +# 1745| v1745_19(void) = ^BufferReadSideEffect[0] : &:r1745_15, ~m0_4 +# 1745| m1745_20(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1745_9 +# 1745| m1745_21(unknown) = Chi : total:m1745_18, partial:m1745_20 +# 1745| v1745_22(void) = NoOp : +# 1745| v1745_23(void) = ReturnIndirection[#this] : &:r1745_7, m1745_8 #-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, m0_4 -# 1743| v1743_24(void) = ReturnVoid : -# 1743| v1743_25(void) = AliasedUse : ~m1743_21 -# 1743| v1743_26(void) = ExitFunction : +# 1745| v1745_24(void) = ReturnVoid : +# 1745| v1745_25(void) = AliasedUse : ~m1745_21 +# 1745| v1745_26(void) = ExitFunction : -# 1747| void CopyConstructorTestVirtualClass::CopyConstructorTestVirtualClass() -# 1747| Block 0 -# 1747| v1747_1(void) = EnterFunction : -# 1747| m1747_2(unknown) = AliasedDefinition : -# 1747| m1747_3(unknown) = InitializeNonLocal : -# 1747| m1747_4(unknown) = Chi : total:m1747_2, partial:m1747_3 -# 1747| r1747_5(glval) = VariableAddress[#this] : -# 1747| m1747_6(glval) = InitializeParameter[#this] : &:r1747_5 -# 1747| r1747_7(glval) = Load[#this] : &:r1747_5, m1747_6 -# 1747| m1747_8(CopyConstructorTestVirtualClass) = InitializeIndirection[#this] : &:r1747_7 -# 1747| r1747_9(glval) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithImplicitArgumentClass] : m1747_6 -# 1747| r1747_10(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : -# 1747| v1747_11(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1747_10, this:r1747_9 -# 1747| m1747_12(unknown) = ^CallSideEffect : ~m1747_4 -# 1747| m1747_13(unknown) = Chi : total:m1747_4, partial:m1747_12 -# 1747| m1747_14(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1747_9 -# 1747| m1747_15(unknown) = Chi : total:m1747_13, partial:m1747_14 -# 1747| r1747_16(glval) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithBitwiseCopyClass] : m1747_6 -# 1747| r1747_17(glval) = FunctionAddress[CopyConstructorWithBitwiseCopyClass] : -# 1747| v1747_18(void) = Call[CopyConstructorWithBitwiseCopyClass] : func:r1747_17, this:r1747_16 -# 1747| m1747_19(unknown) = ^CallSideEffect : ~m1747_15 -# 1747| m1747_20(unknown) = Chi : total:m1747_15, partial:m1747_19 -# 1747| m1747_21(CopyConstructorWithBitwiseCopyClass) = ^IndirectMayWriteSideEffect[-1] : &:r1747_16 -# 1747| m1747_22(unknown) = Chi : total:m1747_20, partial:m1747_21 -# 1747| v1747_23(void) = NoOp : -# 1747| v1747_24(void) = ReturnIndirection[#this] : &:r1747_7, m1747_8 -# 1747| v1747_25(void) = ReturnVoid : -# 1747| v1747_26(void) = AliasedUse : ~m1747_22 -# 1747| v1747_27(void) = ExitFunction : +# 1749| void CopyConstructorTestVirtualClass::CopyConstructorTestVirtualClass() +# 1749| Block 0 +# 1749| v1749_1(void) = EnterFunction : +# 1749| m1749_2(unknown) = AliasedDefinition : +# 1749| m1749_3(unknown) = InitializeNonLocal : +# 1749| m1749_4(unknown) = Chi : total:m1749_2, partial:m1749_3 +# 1749| r1749_5(glval) = VariableAddress[#this] : +# 1749| m1749_6(glval) = InitializeParameter[#this] : &:r1749_5 +# 1749| r1749_7(glval) = Load[#this] : &:r1749_5, m1749_6 +# 1749| m1749_8(CopyConstructorTestVirtualClass) = InitializeIndirection[#this] : &:r1749_7 +# 1749| r1749_9(glval) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithImplicitArgumentClass] : m1749_6 +# 1749| r1749_10(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : +# 1749| v1749_11(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1749_10, this:r1749_9 +# 1749| m1749_12(unknown) = ^CallSideEffect : ~m1749_4 +# 1749| m1749_13(unknown) = Chi : total:m1749_4, partial:m1749_12 +# 1749| m1749_14(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1749_9 +# 1749| m1749_15(unknown) = Chi : total:m1749_13, partial:m1749_14 +# 1749| r1749_16(glval) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithBitwiseCopyClass] : m1749_6 +# 1749| r1749_17(glval) = FunctionAddress[CopyConstructorWithBitwiseCopyClass] : +# 1749| v1749_18(void) = Call[CopyConstructorWithBitwiseCopyClass] : func:r1749_17, this:r1749_16 +# 1749| m1749_19(unknown) = ^CallSideEffect : ~m1749_15 +# 1749| m1749_20(unknown) = Chi : total:m1749_15, partial:m1749_19 +# 1749| m1749_21(CopyConstructorWithBitwiseCopyClass) = ^IndirectMayWriteSideEffect[-1] : &:r1749_16 +# 1749| m1749_22(unknown) = Chi : total:m1749_20, partial:m1749_21 +# 1749| v1749_23(void) = NoOp : +# 1749| v1749_24(void) = ReturnIndirection[#this] : &:r1749_7, m1749_8 +# 1749| v1749_25(void) = ReturnVoid : +# 1749| v1749_26(void) = AliasedUse : ~m1749_22 +# 1749| v1749_27(void) = ExitFunction : -# 1750| int implicit_copy_constructor_test(CopyConstructorTestNonVirtualClass const&, CopyConstructorTestVirtualClass const&) -# 1750| Block 0 -# 1750| v1750_1(void) = EnterFunction : -# 1750| m1750_2(unknown) = AliasedDefinition : -# 1750| m1750_3(unknown) = InitializeNonLocal : -# 1750| m1750_4(unknown) = Chi : total:m1750_2, partial:m1750_3 -# 1751| r1751_1(glval) = VariableAddress[x] : -# 1751| m1751_2(CopyConstructorTestNonVirtualClass &) = InitializeParameter[x] : &:r1751_1 -# 1751| r1751_3(CopyConstructorTestNonVirtualClass &) = Load[x] : &:r1751_1, m1751_2 -# 1751| m1751_4(unknown) = InitializeIndirection[x] : &:r1751_3 -# 1752| r1752_1(glval) = VariableAddress[y] : -# 1752| m1752_2(CopyConstructorTestVirtualClass &) = InitializeParameter[y] : &:r1752_1 -# 1752| r1752_3(CopyConstructorTestVirtualClass &) = Load[y] : &:r1752_1, m1752_2 -# 1752| m1752_4(unknown) = InitializeIndirection[y] : &:r1752_3 -# 1753| r1753_1(glval) = VariableAddress[cx] : -# 1753| m1753_2(CopyConstructorTestNonVirtualClass) = Uninitialized[cx] : &:r1753_1 -# 1753| r1753_3(glval) = FunctionAddress[CopyConstructorTestNonVirtualClass] : -# 1753| r1753_4(glval) = VariableAddress[x] : -# 1753| r1753_5(CopyConstructorTestNonVirtualClass &) = Load[x] : &:r1753_4, m1751_2 -# 1753| r1753_6(glval) = CopyValue : r1753_5 -# 1753| r1753_7(CopyConstructorTestNonVirtualClass &) = CopyValue : r1753_6 -# 1753| v1753_8(void) = Call[CopyConstructorTestNonVirtualClass] : func:r1753_3, this:r1753_1, 0:r1753_7 -# 1753| m1753_9(unknown) = ^CallSideEffect : ~m1750_4 -# 1753| m1753_10(unknown) = Chi : total:m1750_4, partial:m1753_9 -# 1753| v1753_11(void) = ^BufferReadSideEffect[0] : &:r1753_7, ~m1751_4 -# 1753| m1753_12(CopyConstructorTestNonVirtualClass) = ^IndirectMayWriteSideEffect[-1] : &:r1753_1 -# 1753| m1753_13(CopyConstructorTestNonVirtualClass) = Chi : total:m1753_2, partial:m1753_12 -# 1754| r1754_1(glval) = VariableAddress[cy] : -# 1754| m1754_2(CopyConstructorTestVirtualClass) = Uninitialized[cy] : &:r1754_1 -# 1754| r1754_3(glval) = FunctionAddress[CopyConstructorTestVirtualClass] : -# 1754| r1754_4(glval) = VariableAddress[y] : -# 1754| r1754_5(CopyConstructorTestVirtualClass &) = Load[y] : &:r1754_4, m1752_2 -# 1754| r1754_6(glval) = CopyValue : r1754_5 -# 1754| r1754_7(CopyConstructorTestVirtualClass &) = CopyValue : r1754_6 -# 1754| v1754_8(void) = Call[CopyConstructorTestVirtualClass] : func:r1754_3, this:r1754_1, 0:r1754_7 -# 1754| m1754_9(unknown) = ^CallSideEffect : ~m1753_10 -# 1754| m1754_10(unknown) = Chi : total:m1753_10, partial:m1754_9 -# 1754| v1754_11(void) = ^BufferReadSideEffect[0] : &:r1754_7, ~m1752_4 -# 1754| m1754_12(CopyConstructorTestVirtualClass) = ^IndirectMayWriteSideEffect[-1] : &:r1754_1 -# 1754| m1754_13(CopyConstructorTestVirtualClass) = Chi : total:m1754_2, partial:m1754_12 -# 1755| r1755_1(glval) = VariableAddress[#return] : -# 1755| m1755_2(int) = Uninitialized[#return] : &:r1755_1 -# 1751| v1751_5(void) = ReturnIndirection[x] : &:r1751_3, m1751_4 -# 1752| v1752_5(void) = ReturnIndirection[y] : &:r1752_3, m1752_4 -# 1750| r1750_5(glval) = VariableAddress[#return] : -# 1750| v1750_6(void) = ReturnValue : &:r1750_5, m1755_2 -# 1750| v1750_7(void) = AliasedUse : ~m1754_10 -# 1750| v1750_8(void) = ExitFunction : +# 1752| int implicit_copy_constructor_test(CopyConstructorTestNonVirtualClass const&, CopyConstructorTestVirtualClass const&) +# 1752| Block 0 +# 1752| v1752_1(void) = EnterFunction : +# 1752| m1752_2(unknown) = AliasedDefinition : +# 1752| m1752_3(unknown) = InitializeNonLocal : +# 1752| m1752_4(unknown) = Chi : total:m1752_2, partial:m1752_3 +# 1753| r1753_1(glval) = VariableAddress[x] : +# 1753| m1753_2(CopyConstructorTestNonVirtualClass &) = InitializeParameter[x] : &:r1753_1 +# 1753| r1753_3(CopyConstructorTestNonVirtualClass &) = Load[x] : &:r1753_1, m1753_2 +# 1753| m1753_4(unknown) = InitializeIndirection[x] : &:r1753_3 +# 1754| r1754_1(glval) = VariableAddress[y] : +# 1754| m1754_2(CopyConstructorTestVirtualClass &) = InitializeParameter[y] : &:r1754_1 +# 1754| r1754_3(CopyConstructorTestVirtualClass &) = Load[y] : &:r1754_1, m1754_2 +# 1754| m1754_4(unknown) = InitializeIndirection[y] : &:r1754_3 +# 1755| r1755_1(glval) = VariableAddress[cx] : +# 1755| m1755_2(CopyConstructorTestNonVirtualClass) = Uninitialized[cx] : &:r1755_1 +# 1755| r1755_3(glval) = FunctionAddress[CopyConstructorTestNonVirtualClass] : +# 1755| r1755_4(glval) = VariableAddress[x] : +# 1755| r1755_5(CopyConstructorTestNonVirtualClass &) = Load[x] : &:r1755_4, m1753_2 +# 1755| r1755_6(glval) = CopyValue : r1755_5 +# 1755| r1755_7(CopyConstructorTestNonVirtualClass &) = CopyValue : r1755_6 +# 1755| v1755_8(void) = Call[CopyConstructorTestNonVirtualClass] : func:r1755_3, this:r1755_1, 0:r1755_7 +# 1755| m1755_9(unknown) = ^CallSideEffect : ~m1752_4 +# 1755| m1755_10(unknown) = Chi : total:m1752_4, partial:m1755_9 +# 1755| v1755_11(void) = ^BufferReadSideEffect[0] : &:r1755_7, ~m1753_4 +# 1755| m1755_12(CopyConstructorTestNonVirtualClass) = ^IndirectMayWriteSideEffect[-1] : &:r1755_1 +# 1755| m1755_13(CopyConstructorTestNonVirtualClass) = Chi : total:m1755_2, partial:m1755_12 +# 1756| r1756_1(glval) = VariableAddress[cy] : +# 1756| m1756_2(CopyConstructorTestVirtualClass) = Uninitialized[cy] : &:r1756_1 +# 1756| r1756_3(glval) = FunctionAddress[CopyConstructorTestVirtualClass] : +# 1756| r1756_4(glval) = VariableAddress[y] : +# 1756| r1756_5(CopyConstructorTestVirtualClass &) = Load[y] : &:r1756_4, m1754_2 +# 1756| r1756_6(glval) = CopyValue : r1756_5 +# 1756| r1756_7(CopyConstructorTestVirtualClass &) = CopyValue : r1756_6 +# 1756| v1756_8(void) = Call[CopyConstructorTestVirtualClass] : func:r1756_3, this:r1756_1, 0:r1756_7 +# 1756| m1756_9(unknown) = ^CallSideEffect : ~m1755_10 +# 1756| m1756_10(unknown) = Chi : total:m1755_10, partial:m1756_9 +# 1756| v1756_11(void) = ^BufferReadSideEffect[0] : &:r1756_7, ~m1754_4 +# 1756| m1756_12(CopyConstructorTestVirtualClass) = ^IndirectMayWriteSideEffect[-1] : &:r1756_1 +# 1756| m1756_13(CopyConstructorTestVirtualClass) = Chi : total:m1756_2, partial:m1756_12 +# 1757| r1757_1(glval) = VariableAddress[#return] : +# 1757| m1757_2(int) = Uninitialized[#return] : &:r1757_1 +# 1753| v1753_5(void) = ReturnIndirection[x] : &:r1753_3, m1753_4 +# 1754| v1754_5(void) = ReturnIndirection[y] : &:r1754_3, m1754_4 +# 1752| r1752_5(glval) = VariableAddress[#return] : +# 1752| v1752_6(void) = ReturnValue : &:r1752_5, m1757_2 +# 1752| v1752_7(void) = AliasedUse : ~m1756_10 +# 1752| v1752_8(void) = ExitFunction : -# 1757| void if_initialization(int) -# 1757| Block 0 -# 1757| v1757_1(void) = EnterFunction : -# 1757| m1757_2(unknown) = AliasedDefinition : -# 1757| m1757_3(unknown) = InitializeNonLocal : -# 1757| m1757_4(unknown) = Chi : total:m1757_2, partial:m1757_3 -# 1757| r1757_5(glval) = VariableAddress[x] : -# 1757| m1757_6(int) = InitializeParameter[x] : &:r1757_5 -# 1758| r1758_1(glval) = VariableAddress[y] : -# 1758| r1758_2(glval) = VariableAddress[x] : -# 1758| r1758_3(int) = Load[x] : &:r1758_2, m1757_6 -# 1758| m1758_4(int) = Store[y] : &:r1758_1, r1758_3 -# 1758| r1758_5(glval) = VariableAddress[x] : -# 1758| r1758_6(int) = Load[x] : &:r1758_5, m1757_6 -# 1758| r1758_7(int) = Constant[1] : -# 1758| r1758_8(int) = Add : r1758_6, r1758_7 -# 1758| r1758_9(int) = Constant[0] : -# 1758| r1758_10(bool) = CompareNE : r1758_8, r1758_9 -# 1758| v1758_11(void) = ConditionalBranch : r1758_10 +# 1759| void if_initialization(int) +# 1759| Block 0 +# 1759| v1759_1(void) = EnterFunction : +# 1759| m1759_2(unknown) = AliasedDefinition : +# 1759| m1759_3(unknown) = InitializeNonLocal : +# 1759| m1759_4(unknown) = Chi : total:m1759_2, partial:m1759_3 +# 1759| r1759_5(glval) = VariableAddress[x] : +# 1759| m1759_6(int) = InitializeParameter[x] : &:r1759_5 +# 1760| r1760_1(glval) = VariableAddress[y] : +# 1760| r1760_2(glval) = VariableAddress[x] : +# 1760| r1760_3(int) = Load[x] : &:r1760_2, m1759_6 +# 1760| m1760_4(int) = Store[y] : &:r1760_1, r1760_3 +# 1760| r1760_5(glval) = VariableAddress[x] : +# 1760| r1760_6(int) = Load[x] : &:r1760_5, m1759_6 +# 1760| r1760_7(int) = Constant[1] : +# 1760| r1760_8(int) = Add : r1760_6, r1760_7 +# 1760| r1760_9(int) = Constant[0] : +# 1760| r1760_10(bool) = CompareNE : r1760_8, r1760_9 +# 1760| v1760_11(void) = ConditionalBranch : r1760_10 #-----| False -> Block 2 #-----| True -> Block 1 -# 1759| Block 1 -# 1759| r1759_1(glval) = VariableAddress[x] : -# 1759| r1759_2(int) = Load[x] : &:r1759_1, m1757_6 -# 1759| r1759_3(glval) = VariableAddress[y] : -# 1759| r1759_4(int) = Load[y] : &:r1759_3, m1758_4 -# 1759| r1759_5(int) = Add : r1759_2, r1759_4 -# 1759| r1759_6(glval) = VariableAddress[x] : -# 1759| m1759_7(int) = Store[x] : &:r1759_6, r1759_5 +# 1761| Block 1 +# 1761| r1761_1(glval) = VariableAddress[x] : +# 1761| r1761_2(int) = Load[x] : &:r1761_1, m1759_6 +# 1761| r1761_3(glval) = VariableAddress[y] : +# 1761| r1761_4(int) = Load[y] : &:r1761_3, m1760_4 +# 1761| r1761_5(int) = Add : r1761_2, r1761_4 +# 1761| r1761_6(glval) = VariableAddress[x] : +# 1761| m1761_7(int) = Store[x] : &:r1761_6, r1761_5 #-----| Goto -> Block 2 -# 1762| Block 2 -# 1762| m1762_1(int) = Phi : from 0:m1757_6, from 1:m1759_7 -# 1762| r1762_2(glval) = VariableAddress[w] : -# 1762| m1762_3(int) = Uninitialized[w] : &:r1762_2 -# 1763| r1763_1(glval) = VariableAddress[x] : -# 1763| r1763_2(int) = Load[x] : &:r1763_1, m1762_1 -# 1763| r1763_3(glval) = VariableAddress[w] : -# 1763| m1763_4(int) = Store[w] : &:r1763_3, r1763_2 -# 1763| r1763_5(glval) = VariableAddress[x] : -# 1763| r1763_6(int) = Load[x] : &:r1763_5, m1762_1 -# 1763| r1763_7(int) = Constant[1] : -# 1763| r1763_8(int) = Add : r1763_6, r1763_7 -# 1763| r1763_9(int) = Constant[0] : -# 1763| r1763_10(bool) = CompareNE : r1763_8, r1763_9 -# 1763| v1763_11(void) = ConditionalBranch : r1763_10 +# 1764| Block 2 +# 1764| m1764_1(int) = Phi : from 0:m1759_6, from 1:m1761_7 +# 1764| r1764_2(glval) = VariableAddress[w] : +# 1764| m1764_3(int) = Uninitialized[w] : &:r1764_2 +# 1765| r1765_1(glval) = VariableAddress[x] : +# 1765| r1765_2(int) = Load[x] : &:r1765_1, m1764_1 +# 1765| r1765_3(glval) = VariableAddress[w] : +# 1765| m1765_4(int) = Store[w] : &:r1765_3, r1765_2 +# 1765| r1765_5(glval) = VariableAddress[x] : +# 1765| r1765_6(int) = Load[x] : &:r1765_5, m1764_1 +# 1765| r1765_7(int) = Constant[1] : +# 1765| r1765_8(int) = Add : r1765_6, r1765_7 +# 1765| r1765_9(int) = Constant[0] : +# 1765| r1765_10(bool) = CompareNE : r1765_8, r1765_9 +# 1765| v1765_11(void) = ConditionalBranch : r1765_10 #-----| False -> Block 4 #-----| True -> Block 3 -# 1764| Block 3 -# 1764| r1764_1(glval) = VariableAddress[x] : -# 1764| r1764_2(int) = Load[x] : &:r1764_1, m1762_1 -# 1764| r1764_3(glval) = VariableAddress[w] : -# 1764| r1764_4(int) = Load[w] : &:r1764_3, m1763_4 -# 1764| r1764_5(int) = Add : r1764_2, r1764_4 -# 1764| r1764_6(glval) = VariableAddress[x] : -# 1764| m1764_7(int) = Store[x] : &:r1764_6, r1764_5 +# 1766| Block 3 +# 1766| r1766_1(glval) = VariableAddress[x] : +# 1766| r1766_2(int) = Load[x] : &:r1766_1, m1764_1 +# 1766| r1766_3(glval) = VariableAddress[w] : +# 1766| r1766_4(int) = Load[w] : &:r1766_3, m1765_4 +# 1766| r1766_5(int) = Add : r1766_2, r1766_4 +# 1766| r1766_6(glval) = VariableAddress[x] : +# 1766| m1766_7(int) = Store[x] : &:r1766_6, r1766_5 #-----| Goto -> Block 4 -# 1767| Block 4 -# 1767| m1767_1(int) = Phi : from 2:m1762_1, from 3:m1764_7 -# 1767| r1767_2(glval) = VariableAddress[x] : -# 1767| r1767_3(int) = Load[x] : &:r1767_2, m1767_1 -# 1767| r1767_4(glval) = VariableAddress[w] : -# 1767| m1767_5(int) = Store[w] : &:r1767_4, r1767_3 -# 1767| r1767_6(glval) = VariableAddress[w2] : -# 1767| r1767_7(glval) = VariableAddress[w] : -# 1767| r1767_8(int) = Load[w] : &:r1767_7, m1767_5 -# 1767| m1767_9(int) = Store[w2] : &:r1767_6, r1767_8 -# 1767| r1767_10(glval) = VariableAddress[w2] : -# 1767| r1767_11(int) = Load[w2] : &:r1767_10, m1767_9 -# 1767| r1767_12(int) = Constant[0] : -# 1767| r1767_13(bool) = CompareNE : r1767_11, r1767_12 -# 1767| r1767_14(bool) = CopyValue : r1767_13 -# 1767| v1767_15(void) = ConditionalBranch : r1767_14 +# 1769| Block 4 +# 1769| m1769_1(int) = Phi : from 2:m1764_1, from 3:m1766_7 +# 1769| r1769_2(glval) = VariableAddress[x] : +# 1769| r1769_3(int) = Load[x] : &:r1769_2, m1769_1 +# 1769| r1769_4(glval) = VariableAddress[w] : +# 1769| m1769_5(int) = Store[w] : &:r1769_4, r1769_3 +# 1769| r1769_6(glval) = VariableAddress[w2] : +# 1769| r1769_7(glval) = VariableAddress[w] : +# 1769| r1769_8(int) = Load[w] : &:r1769_7, m1769_5 +# 1769| m1769_9(int) = Store[w2] : &:r1769_6, r1769_8 +# 1769| r1769_10(glval) = VariableAddress[w2] : +# 1769| r1769_11(int) = Load[w2] : &:r1769_10, m1769_9 +# 1769| r1769_12(int) = Constant[0] : +# 1769| r1769_13(bool) = CompareNE : r1769_11, r1769_12 +# 1769| r1769_14(bool) = CopyValue : r1769_13 +# 1769| v1769_15(void) = ConditionalBranch : r1769_14 #-----| False -> Block 6 #-----| True -> Block 5 -# 1768| Block 5 -# 1768| r1768_1(glval) = VariableAddress[x] : -# 1768| r1768_2(int) = Load[x] : &:r1768_1, m1767_1 -# 1768| r1768_3(glval) = VariableAddress[w] : -# 1768| r1768_4(int) = Load[w] : &:r1768_3, m1767_5 -# 1768| r1768_5(int) = Add : r1768_2, r1768_4 -# 1768| r1768_6(glval) = VariableAddress[x] : -# 1768| m1768_7(int) = Store[x] : &:r1768_6, r1768_5 +# 1770| Block 5 +# 1770| r1770_1(glval) = VariableAddress[x] : +# 1770| r1770_2(int) = Load[x] : &:r1770_1, m1769_1 +# 1770| r1770_3(glval) = VariableAddress[w] : +# 1770| r1770_4(int) = Load[w] : &:r1770_3, m1769_5 +# 1770| r1770_5(int) = Add : r1770_2, r1770_4 +# 1770| r1770_6(glval) = VariableAddress[x] : +# 1770| m1770_7(int) = Store[x] : &:r1770_6, r1770_5 #-----| Goto -> Block 6 -# 1771| Block 6 -# 1771| m1771_1(int) = Phi : from 4:m1767_1, from 5:m1768_7 -# 1771| r1771_2(glval) = VariableAddress[v] : -# 1771| r1771_3(glval) = VariableAddress[x] : -# 1771| r1771_4(int) = Load[x] : &:r1771_3, m1771_1 -# 1771| m1771_5(int) = Store[v] : &:r1771_2, r1771_4 -# 1771| r1771_6(glval) = VariableAddress[v2] : -# 1771| r1771_7(glval) = VariableAddress[v] : -# 1771| r1771_8(int) = Load[v] : &:r1771_7, m1771_5 -# 1771| m1771_9(int) = Store[v2] : &:r1771_6, r1771_8 -# 1771| r1771_10(glval) = VariableAddress[v2] : -# 1771| r1771_11(int) = Load[v2] : &:r1771_10, m1771_9 -# 1771| r1771_12(int) = Constant[0] : -# 1771| r1771_13(bool) = CompareNE : r1771_11, r1771_12 -# 1771| r1771_14(bool) = CopyValue : r1771_13 -# 1771| v1771_15(void) = ConditionalBranch : r1771_14 +# 1773| Block 6 +# 1773| m1773_1(int) = Phi : from 4:m1769_1, from 5:m1770_7 +# 1773| r1773_2(glval) = VariableAddress[v] : +# 1773| r1773_3(glval) = VariableAddress[x] : +# 1773| r1773_4(int) = Load[x] : &:r1773_3, m1773_1 +# 1773| m1773_5(int) = Store[v] : &:r1773_2, r1773_4 +# 1773| r1773_6(glval) = VariableAddress[v2] : +# 1773| r1773_7(glval) = VariableAddress[v] : +# 1773| r1773_8(int) = Load[v] : &:r1773_7, m1773_5 +# 1773| m1773_9(int) = Store[v2] : &:r1773_6, r1773_8 +# 1773| r1773_10(glval) = VariableAddress[v2] : +# 1773| r1773_11(int) = Load[v2] : &:r1773_10, m1773_9 +# 1773| r1773_12(int) = Constant[0] : +# 1773| r1773_13(bool) = CompareNE : r1773_11, r1773_12 +# 1773| r1773_14(bool) = CopyValue : r1773_13 +# 1773| v1773_15(void) = ConditionalBranch : r1773_14 #-----| False -> Block 8 #-----| True -> Block 7 -# 1772| Block 7 -# 1772| r1772_1(glval) = VariableAddress[x] : -# 1772| r1772_2(int) = Load[x] : &:r1772_1, m1771_1 -# 1772| r1772_3(glval) = VariableAddress[v] : -# 1772| r1772_4(int) = Load[v] : &:r1772_3, m1771_5 -# 1772| r1772_5(int) = Add : r1772_2, r1772_4 -# 1772| r1772_6(glval) = VariableAddress[x] : -# 1772| m1772_7(int) = Store[x] : &:r1772_6, r1772_5 +# 1774| Block 7 +# 1774| r1774_1(glval) = VariableAddress[x] : +# 1774| r1774_2(int) = Load[x] : &:r1774_1, m1773_1 +# 1774| r1774_3(glval) = VariableAddress[v] : +# 1774| r1774_4(int) = Load[v] : &:r1774_3, m1773_5 +# 1774| r1774_5(int) = Add : r1774_2, r1774_4 +# 1774| r1774_6(glval) = VariableAddress[x] : +# 1774| m1774_7(int) = Store[x] : &:r1774_6, r1774_5 #-----| Goto -> Block 8 -# 1775| Block 8 -# 1775| m1775_1(int) = Phi : from 6:m1771_1, from 7:m1772_7 -# 1775| r1775_2(glval) = VariableAddress[z] : -# 1775| r1775_3(glval) = VariableAddress[x] : -# 1775| r1775_4(int) = Load[x] : &:r1775_3, m1775_1 -# 1775| m1775_5(int) = Store[z] : &:r1775_2, r1775_4 -# 1776| r1776_1(glval) = VariableAddress[z] : -# 1776| r1776_2(int) = Load[z] : &:r1776_1, m1775_5 -# 1776| r1776_3(int) = Constant[0] : -# 1776| r1776_4(bool) = CompareNE : r1776_2, r1776_3 -# 1776| v1776_5(void) = ConditionalBranch : r1776_4 +# 1777| Block 8 +# 1777| m1777_1(int) = Phi : from 6:m1773_1, from 7:m1774_7 +# 1777| r1777_2(glval) = VariableAddress[z] : +# 1777| r1777_3(glval) = VariableAddress[x] : +# 1777| r1777_4(int) = Load[x] : &:r1777_3, m1777_1 +# 1777| m1777_5(int) = Store[z] : &:r1777_2, r1777_4 +# 1778| r1778_1(glval) = VariableAddress[z] : +# 1778| r1778_2(int) = Load[z] : &:r1778_1, m1777_5 +# 1778| r1778_3(int) = Constant[0] : +# 1778| r1778_4(bool) = CompareNE : r1778_2, r1778_3 +# 1778| v1778_5(void) = ConditionalBranch : r1778_4 #-----| False -> Block 10 #-----| True -> Block 9 -# 1777| Block 9 -# 1777| r1777_1(glval) = VariableAddress[x] : -# 1777| r1777_2(int) = Load[x] : &:r1777_1, m1775_1 -# 1777| r1777_3(glval) = VariableAddress[z] : -# 1777| r1777_4(int) = Load[z] : &:r1777_3, m1775_5 -# 1777| r1777_5(int) = Add : r1777_2, r1777_4 -# 1777| r1777_6(glval) = VariableAddress[x] : -# 1777| m1777_7(int) = Store[x] : &:r1777_6, r1777_5 +# 1779| Block 9 +# 1779| r1779_1(glval) = VariableAddress[x] : +# 1779| r1779_2(int) = Load[x] : &:r1779_1, m1777_1 +# 1779| r1779_3(glval) = VariableAddress[z] : +# 1779| r1779_4(int) = Load[z] : &:r1779_3, m1777_5 +# 1779| r1779_5(int) = Add : r1779_2, r1779_4 +# 1779| r1779_6(glval) = VariableAddress[x] : +# 1779| m1779_7(int) = Store[x] : &:r1779_6, r1779_5 #-----| Goto -> Block 10 -# 1780| Block 10 -# 1780| m1780_1(int) = Phi : from 8:m1775_1, from 9:m1777_7 -# 1780| r1780_2(glval) = VariableAddress[z2] : -# 1780| r1780_3(glval) = VariableAddress[z] : -# 1780| r1780_4(int) = Load[z] : &:r1780_3, m1775_5 -# 1780| m1780_5(int) = Store[z2] : &:r1780_2, r1780_4 -# 1780| r1780_6(glval) = VariableAddress[z2] : -# 1780| r1780_7(int) = Load[z2] : &:r1780_6, m1780_5 -# 1780| r1780_8(int) = Constant[0] : -# 1780| r1780_9(bool) = CompareNE : r1780_7, r1780_8 -# 1780| r1780_10(bool) = CopyValue : r1780_9 -# 1780| v1780_11(void) = ConditionalBranch : r1780_10 +# 1782| Block 10 +# 1782| m1782_1(int) = Phi : from 8:m1777_1, from 9:m1779_7 +# 1782| r1782_2(glval) = VariableAddress[z2] : +# 1782| r1782_3(glval) = VariableAddress[z] : +# 1782| r1782_4(int) = Load[z] : &:r1782_3, m1777_5 +# 1782| m1782_5(int) = Store[z2] : &:r1782_2, r1782_4 +# 1782| r1782_6(glval) = VariableAddress[z2] : +# 1782| r1782_7(int) = Load[z2] : &:r1782_6, m1782_5 +# 1782| r1782_8(int) = Constant[0] : +# 1782| r1782_9(bool) = CompareNE : r1782_7, r1782_8 +# 1782| r1782_10(bool) = CopyValue : r1782_9 +# 1782| v1782_11(void) = ConditionalBranch : r1782_10 #-----| False -> Block 12 #-----| True -> Block 11 -# 1781| Block 11 -# 1781| r1781_1(glval) = VariableAddress[z2] : -# 1781| r1781_2(int) = Load[z2] : &:r1781_1, m1780_5 -# 1781| r1781_3(glval) = VariableAddress[x] : -# 1781| r1781_4(int) = Load[x] : &:r1781_3, m1780_1 -# 1781| r1781_5(int) = Add : r1781_4, r1781_2 -# 1781| m1781_6(int) = Store[x] : &:r1781_3, r1781_5 +# 1783| Block 11 +# 1783| r1783_1(glval) = VariableAddress[z2] : +# 1783| r1783_2(int) = Load[z2] : &:r1783_1, m1782_5 +# 1783| r1783_3(glval) = VariableAddress[x] : +# 1783| r1783_4(int) = Load[x] : &:r1783_3, m1782_1 +# 1783| r1783_5(int) = Add : r1783_4, r1783_2 +# 1783| m1783_6(int) = Store[x] : &:r1783_3, r1783_5 #-----| Goto -> Block 12 -# 1783| Block 12 -# 1783| v1783_1(void) = NoOp : -# 1757| v1757_7(void) = ReturnVoid : -# 1757| v1757_8(void) = AliasedUse : m1757_3 -# 1757| v1757_9(void) = ExitFunction : +# 1785| Block 12 +# 1785| v1785_1(void) = NoOp : +# 1759| v1759_7(void) = ReturnVoid : +# 1759| v1759_8(void) = AliasedUse : m1759_3 +# 1759| v1759_9(void) = ExitFunction : -# 1785| void switch_initialization(int) -# 1785| Block 0 -# 1785| v1785_1(void) = EnterFunction : -# 1785| m1785_2(unknown) = AliasedDefinition : -# 1785| m1785_3(unknown) = InitializeNonLocal : -# 1785| m1785_4(unknown) = Chi : total:m1785_2, partial:m1785_3 -# 1785| r1785_5(glval) = VariableAddress[x] : -# 1785| m1785_6(int) = InitializeParameter[x] : &:r1785_5 -# 1786| r1786_1(glval) = VariableAddress[y] : -# 1786| r1786_2(glval) = VariableAddress[x] : -# 1786| r1786_3(int) = Load[x] : &:r1786_2, m1785_6 -# 1786| m1786_4(int) = Store[y] : &:r1786_1, r1786_3 -# 1786| r1786_5(glval) = VariableAddress[x] : -# 1786| r1786_6(int) = Load[x] : &:r1786_5, m1785_6 -# 1786| r1786_7(int) = Constant[1] : -# 1786| r1786_8(int) = Add : r1786_6, r1786_7 -# 1786| v1786_9(void) = Switch : r1786_8 +# 1787| void switch_initialization(int) +# 1787| Block 0 +# 1787| v1787_1(void) = EnterFunction : +# 1787| m1787_2(unknown) = AliasedDefinition : +# 1787| m1787_3(unknown) = InitializeNonLocal : +# 1787| m1787_4(unknown) = Chi : total:m1787_2, partial:m1787_3 +# 1787| r1787_5(glval) = VariableAddress[x] : +# 1787| m1787_6(int) = InitializeParameter[x] : &:r1787_5 +# 1788| r1788_1(glval) = VariableAddress[y] : +# 1788| r1788_2(glval) = VariableAddress[x] : +# 1788| r1788_3(int) = Load[x] : &:r1788_2, m1787_6 +# 1788| m1788_4(int) = Store[y] : &:r1788_1, r1788_3 +# 1788| r1788_5(glval) = VariableAddress[x] : +# 1788| r1788_6(int) = Load[x] : &:r1788_5, m1787_6 +# 1788| r1788_7(int) = Constant[1] : +# 1788| r1788_8(int) = Add : r1788_6, r1788_7 +# 1788| v1788_9(void) = Switch : r1788_8 #-----| Default -> Block 1 -# 1787| Block 1 -# 1787| v1787_1(void) = NoOp : -# 1788| r1788_1(glval) = VariableAddress[x] : -# 1788| r1788_2(int) = Load[x] : &:r1788_1, m1785_6 -# 1788| r1788_3(glval) = VariableAddress[y] : -# 1788| r1788_4(int) = Load[y] : &:r1788_3, m1786_4 -# 1788| r1788_5(int) = Add : r1788_2, r1788_4 -# 1788| r1788_6(glval) = VariableAddress[x] : -# 1788| m1788_7(int) = Store[x] : &:r1788_6, r1788_5 -# 1791| r1791_1(glval) = VariableAddress[w] : -# 1791| m1791_2(int) = Uninitialized[w] : &:r1791_1 -# 1792| r1792_1(glval) = VariableAddress[x] : -# 1792| r1792_2(int) = Load[x] : &:r1792_1, m1788_7 -# 1792| r1792_3(glval) = VariableAddress[w] : -# 1792| m1792_4(int) = Store[w] : &:r1792_3, r1792_2 -# 1792| r1792_5(glval) = VariableAddress[x] : -# 1792| r1792_6(int) = Load[x] : &:r1792_5, m1788_7 -# 1792| r1792_7(int) = Constant[1] : -# 1792| r1792_8(int) = Add : r1792_6, r1792_7 -# 1792| v1792_9(void) = Switch : r1792_8 +# 1789| Block 1 +# 1789| v1789_1(void) = NoOp : +# 1790| r1790_1(glval) = VariableAddress[x] : +# 1790| r1790_2(int) = Load[x] : &:r1790_1, m1787_6 +# 1790| r1790_3(glval) = VariableAddress[y] : +# 1790| r1790_4(int) = Load[y] : &:r1790_3, m1788_4 +# 1790| r1790_5(int) = Add : r1790_2, r1790_4 +# 1790| r1790_6(glval) = VariableAddress[x] : +# 1790| m1790_7(int) = Store[x] : &:r1790_6, r1790_5 +# 1793| r1793_1(glval) = VariableAddress[w] : +# 1793| m1793_2(int) = Uninitialized[w] : &:r1793_1 +# 1794| r1794_1(glval) = VariableAddress[x] : +# 1794| r1794_2(int) = Load[x] : &:r1794_1, m1790_7 +# 1794| r1794_3(glval) = VariableAddress[w] : +# 1794| m1794_4(int) = Store[w] : &:r1794_3, r1794_2 +# 1794| r1794_5(glval) = VariableAddress[x] : +# 1794| r1794_6(int) = Load[x] : &:r1794_5, m1790_7 +# 1794| r1794_7(int) = Constant[1] : +# 1794| r1794_8(int) = Add : r1794_6, r1794_7 +# 1794| v1794_9(void) = Switch : r1794_8 #-----| Default -> Block 2 -# 1793| Block 2 -# 1793| v1793_1(void) = NoOp : -# 1794| r1794_1(glval) = VariableAddress[x] : -# 1794| r1794_2(int) = Load[x] : &:r1794_1, m1788_7 -# 1794| r1794_3(glval) = VariableAddress[w] : -# 1794| r1794_4(int) = Load[w] : &:r1794_3, m1792_4 -# 1794| r1794_5(int) = Add : r1794_2, r1794_4 -# 1794| r1794_6(glval) = VariableAddress[x] : -# 1794| m1794_7(int) = Store[x] : &:r1794_6, r1794_5 -# 1797| r1797_1(glval) = VariableAddress[x] : -# 1797| r1797_2(int) = Load[x] : &:r1797_1, m1794_7 -# 1797| r1797_3(glval) = VariableAddress[w] : -# 1797| m1797_4(int) = Store[w] : &:r1797_3, r1797_2 -# 1797| r1797_5(glval) = VariableAddress[w2] : -# 1797| r1797_6(glval) = VariableAddress[w] : -# 1797| r1797_7(int) = Load[w] : &:r1797_6, m1797_4 -# 1797| m1797_8(int) = Store[w2] : &:r1797_5, r1797_7 -# 1797| r1797_9(glval) = VariableAddress[w2] : -# 1797| r1797_10(int) = Load[w2] : &:r1797_9, m1797_8 -# 1797| r1797_11(int) = CopyValue : r1797_10 -# 1797| v1797_12(void) = Switch : r1797_11 +# 1795| Block 2 +# 1795| v1795_1(void) = NoOp : +# 1796| r1796_1(glval) = VariableAddress[x] : +# 1796| r1796_2(int) = Load[x] : &:r1796_1, m1790_7 +# 1796| r1796_3(glval) = VariableAddress[w] : +# 1796| r1796_4(int) = Load[w] : &:r1796_3, m1794_4 +# 1796| r1796_5(int) = Add : r1796_2, r1796_4 +# 1796| r1796_6(glval) = VariableAddress[x] : +# 1796| m1796_7(int) = Store[x] : &:r1796_6, r1796_5 +# 1799| r1799_1(glval) = VariableAddress[x] : +# 1799| r1799_2(int) = Load[x] : &:r1799_1, m1796_7 +# 1799| r1799_3(glval) = VariableAddress[w] : +# 1799| m1799_4(int) = Store[w] : &:r1799_3, r1799_2 +# 1799| r1799_5(glval) = VariableAddress[w2] : +# 1799| r1799_6(glval) = VariableAddress[w] : +# 1799| r1799_7(int) = Load[w] : &:r1799_6, m1799_4 +# 1799| m1799_8(int) = Store[w2] : &:r1799_5, r1799_7 +# 1799| r1799_9(glval) = VariableAddress[w2] : +# 1799| r1799_10(int) = Load[w2] : &:r1799_9, m1799_8 +# 1799| r1799_11(int) = CopyValue : r1799_10 +# 1799| v1799_12(void) = Switch : r1799_11 #-----| Default -> Block 3 -# 1798| Block 3 -# 1798| v1798_1(void) = NoOp : -# 1799| r1799_1(glval) = VariableAddress[x] : -# 1799| r1799_2(int) = Load[x] : &:r1799_1, m1794_7 -# 1799| r1799_3(glval) = VariableAddress[w] : -# 1799| r1799_4(int) = Load[w] : &:r1799_3, m1797_4 -# 1799| r1799_5(int) = Add : r1799_2, r1799_4 -# 1799| r1799_6(glval) = VariableAddress[x] : -# 1799| m1799_7(int) = Store[x] : &:r1799_6, r1799_5 -# 1802| r1802_1(glval) = VariableAddress[v] : -# 1802| r1802_2(glval) = VariableAddress[x] : -# 1802| r1802_3(int) = Load[x] : &:r1802_2, m1799_7 -# 1802| m1802_4(int) = Store[v] : &:r1802_1, r1802_3 -# 1802| r1802_5(glval) = VariableAddress[v2] : -# 1802| r1802_6(glval) = VariableAddress[v] : -# 1802| r1802_7(int) = Load[v] : &:r1802_6, m1802_4 -# 1802| m1802_8(int) = Store[v2] : &:r1802_5, r1802_7 -# 1802| r1802_9(glval) = VariableAddress[v2] : -# 1802| r1802_10(int) = Load[v2] : &:r1802_9, m1802_8 -# 1802| r1802_11(int) = CopyValue : r1802_10 -# 1802| v1802_12(void) = Switch : r1802_11 +# 1800| Block 3 +# 1800| v1800_1(void) = NoOp : +# 1801| r1801_1(glval) = VariableAddress[x] : +# 1801| r1801_2(int) = Load[x] : &:r1801_1, m1796_7 +# 1801| r1801_3(glval) = VariableAddress[w] : +# 1801| r1801_4(int) = Load[w] : &:r1801_3, m1799_4 +# 1801| r1801_5(int) = Add : r1801_2, r1801_4 +# 1801| r1801_6(glval) = VariableAddress[x] : +# 1801| m1801_7(int) = Store[x] : &:r1801_6, r1801_5 +# 1804| r1804_1(glval) = VariableAddress[v] : +# 1804| r1804_2(glval) = VariableAddress[x] : +# 1804| r1804_3(int) = Load[x] : &:r1804_2, m1801_7 +# 1804| m1804_4(int) = Store[v] : &:r1804_1, r1804_3 +# 1804| r1804_5(glval) = VariableAddress[v2] : +# 1804| r1804_6(glval) = VariableAddress[v] : +# 1804| r1804_7(int) = Load[v] : &:r1804_6, m1804_4 +# 1804| m1804_8(int) = Store[v2] : &:r1804_5, r1804_7 +# 1804| r1804_9(glval) = VariableAddress[v2] : +# 1804| r1804_10(int) = Load[v2] : &:r1804_9, m1804_8 +# 1804| r1804_11(int) = CopyValue : r1804_10 +# 1804| v1804_12(void) = Switch : r1804_11 #-----| Default -> Block 4 -# 1803| Block 4 -# 1803| v1803_1(void) = NoOp : -# 1804| r1804_1(glval) = VariableAddress[x] : -# 1804| r1804_2(int) = Load[x] : &:r1804_1, m1799_7 -# 1804| r1804_3(glval) = VariableAddress[v] : -# 1804| r1804_4(int) = Load[v] : &:r1804_3, m1802_4 -# 1804| r1804_5(int) = Add : r1804_2, r1804_4 -# 1804| r1804_6(glval) = VariableAddress[x] : -# 1804| m1804_7(int) = Store[x] : &:r1804_6, r1804_5 -# 1807| r1807_1(glval) = VariableAddress[z] : -# 1807| r1807_2(glval) = VariableAddress[x] : -# 1807| r1807_3(int) = Load[x] : &:r1807_2, m1804_7 -# 1807| m1807_4(int) = Store[z] : &:r1807_1, r1807_3 -# 1808| r1808_1(glval) = VariableAddress[z] : -# 1808| r1808_2(int) = Load[z] : &:r1808_1, m1807_4 -# 1808| v1808_3(void) = Switch : r1808_2 +# 1805| Block 4 +# 1805| v1805_1(void) = NoOp : +# 1806| r1806_1(glval) = VariableAddress[x] : +# 1806| r1806_2(int) = Load[x] : &:r1806_1, m1801_7 +# 1806| r1806_3(glval) = VariableAddress[v] : +# 1806| r1806_4(int) = Load[v] : &:r1806_3, m1804_4 +# 1806| r1806_5(int) = Add : r1806_2, r1806_4 +# 1806| r1806_6(glval) = VariableAddress[x] : +# 1806| m1806_7(int) = Store[x] : &:r1806_6, r1806_5 +# 1809| r1809_1(glval) = VariableAddress[z] : +# 1809| r1809_2(glval) = VariableAddress[x] : +# 1809| r1809_3(int) = Load[x] : &:r1809_2, m1806_7 +# 1809| m1809_4(int) = Store[z] : &:r1809_1, r1809_3 +# 1810| r1810_1(glval) = VariableAddress[z] : +# 1810| r1810_2(int) = Load[z] : &:r1810_1, m1809_4 +# 1810| v1810_3(void) = Switch : r1810_2 #-----| Default -> Block 5 -# 1809| Block 5 -# 1809| v1809_1(void) = NoOp : -# 1810| r1810_1(glval) = VariableAddress[x] : -# 1810| r1810_2(int) = Load[x] : &:r1810_1, m1804_7 -# 1810| r1810_3(glval) = VariableAddress[z] : -# 1810| r1810_4(int) = Load[z] : &:r1810_3, m1807_4 -# 1810| r1810_5(int) = Add : r1810_2, r1810_4 -# 1810| r1810_6(glval) = VariableAddress[x] : -# 1810| m1810_7(int) = Store[x] : &:r1810_6, r1810_5 -# 1813| r1813_1(glval) = VariableAddress[z2] : -# 1813| r1813_2(glval) = VariableAddress[z] : -# 1813| r1813_3(int) = Load[z] : &:r1813_2, m1807_4 -# 1813| m1813_4(int) = Store[z2] : &:r1813_1, r1813_3 -# 1813| r1813_5(glval) = VariableAddress[z2] : -# 1813| r1813_6(int) = Load[z2] : &:r1813_5, m1813_4 -# 1813| r1813_7(int) = CopyValue : r1813_6 -# 1813| v1813_8(void) = Switch : r1813_7 +# 1811| Block 5 +# 1811| v1811_1(void) = NoOp : +# 1812| r1812_1(glval) = VariableAddress[x] : +# 1812| r1812_2(int) = Load[x] : &:r1812_1, m1806_7 +# 1812| r1812_3(glval) = VariableAddress[z] : +# 1812| r1812_4(int) = Load[z] : &:r1812_3, m1809_4 +# 1812| r1812_5(int) = Add : r1812_2, r1812_4 +# 1812| r1812_6(glval) = VariableAddress[x] : +# 1812| m1812_7(int) = Store[x] : &:r1812_6, r1812_5 +# 1815| r1815_1(glval) = VariableAddress[z2] : +# 1815| r1815_2(glval) = VariableAddress[z] : +# 1815| r1815_3(int) = Load[z] : &:r1815_2, m1809_4 +# 1815| m1815_4(int) = Store[z2] : &:r1815_1, r1815_3 +# 1815| r1815_5(glval) = VariableAddress[z2] : +# 1815| r1815_6(int) = Load[z2] : &:r1815_5, m1815_4 +# 1815| r1815_7(int) = CopyValue : r1815_6 +# 1815| v1815_8(void) = Switch : r1815_7 #-----| Default -> Block 6 -# 1814| Block 6 -# 1814| v1814_1(void) = NoOp : -# 1815| r1815_1(glval) = VariableAddress[z2] : -# 1815| r1815_2(int) = Load[z2] : &:r1815_1, m1813_4 -# 1815| r1815_3(glval) = VariableAddress[x] : -# 1815| r1815_4(int) = Load[x] : &:r1815_3, m1810_7 -# 1815| r1815_5(int) = Add : r1815_4, r1815_2 -# 1815| m1815_6(int) = Store[x] : &:r1815_3, r1815_5 -# 1817| v1817_1(void) = NoOp : -# 1785| v1785_7(void) = ReturnVoid : -# 1785| v1785_8(void) = AliasedUse : m1785_3 -# 1785| v1785_9(void) = ExitFunction : +# 1816| Block 6 +# 1816| v1816_1(void) = NoOp : +# 1817| r1817_1(glval) = VariableAddress[z2] : +# 1817| r1817_2(int) = Load[z2] : &:r1817_1, m1815_4 +# 1817| r1817_3(glval) = VariableAddress[x] : +# 1817| r1817_4(int) = Load[x] : &:r1817_3, m1812_7 +# 1817| r1817_5(int) = Add : r1817_4, r1817_2 +# 1817| m1817_6(int) = Store[x] : &:r1817_3, r1817_5 +# 1819| v1819_1(void) = NoOp : +# 1787| v1787_7(void) = ReturnVoid : +# 1787| v1787_8(void) = AliasedUse : m1787_3 +# 1787| v1787_9(void) = ExitFunction : -# 1821| int global_2 -# 1821| Block 0 -# 1821| v1821_1(void) = EnterFunction : -# 1821| m1821_2(unknown) = AliasedDefinition : -# 1821| r1821_3(glval) = VariableAddress[global_2] : -# 1821| r1821_4(int) = Constant[1] : -# 1821| m1821_5(int) = Store[global_2] : &:r1821_3, r1821_4 -# 1821| m1821_6(unknown) = Chi : total:m1821_2, partial:m1821_5 -# 1821| v1821_7(void) = ReturnVoid : -# 1821| v1821_8(void) = AliasedUse : ~m1821_6 -# 1821| v1821_9(void) = ExitFunction : +# 1823| int global_2 +# 1823| Block 0 +# 1823| v1823_1(void) = EnterFunction : +# 1823| m1823_2(unknown) = AliasedDefinition : +# 1823| r1823_3(glval) = VariableAddress[global_2] : +# 1823| r1823_4(int) = Constant[1] : +# 1823| m1823_5(int) = Store[global_2] : &:r1823_3, r1823_4 +# 1823| m1823_6(unknown) = Chi : total:m1823_2, partial:m1823_5 +# 1823| v1823_7(void) = ReturnVoid : +# 1823| v1823_8(void) = AliasedUse : ~m1823_6 +# 1823| v1823_9(void) = ExitFunction : -# 1825| constructor_only global_4 -# 1825| Block 0 -# 1825| v1825_1(void) = EnterFunction : -# 1825| m1825_2(unknown) = AliasedDefinition : -# 1825| r1825_3(glval) = VariableAddress[global_4] : -# 1825| r1825_4(glval) = FunctionAddress[constructor_only] : -# 1825| r1825_5(int) = Constant[1] : -# 1825| v1825_6(void) = Call[constructor_only] : func:r1825_4, this:r1825_3, 0:r1825_5 -# 1825| m1825_7(unknown) = ^CallSideEffect : ~m1825_2 -# 1825| m1825_8(unknown) = Chi : total:m1825_2, partial:m1825_7 -# 1825| m1825_9(constructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1825_3 -# 1825| m1825_10(unknown) = Chi : total:m1825_8, partial:m1825_9 -# 1825| v1825_11(void) = ReturnVoid : -# 1825| v1825_12(void) = AliasedUse : ~m1825_10 -# 1825| v1825_13(void) = ExitFunction : - -# 1827| constructor_only global_5 +# 1827| constructor_only global_4 # 1827| Block 0 # 1827| v1827_1(void) = EnterFunction : # 1827| m1827_2(unknown) = AliasedDefinition : -# 1827| r1827_3(glval) = VariableAddress[global_5] : +# 1827| r1827_3(glval) = VariableAddress[global_4] : # 1827| r1827_4(glval) = FunctionAddress[constructor_only] : -# 1827| r1827_5(int) = Constant[2] : +# 1827| r1827_5(int) = Constant[1] : # 1827| v1827_6(void) = Call[constructor_only] : func:r1827_4, this:r1827_3, 0:r1827_5 # 1827| m1827_7(unknown) = ^CallSideEffect : ~m1827_2 # 1827| m1827_8(unknown) = Chi : total:m1827_2, partial:m1827_7 @@ -10641,49 +10625,65 @@ ir.cpp: # 1827| v1827_12(void) = AliasedUse : ~m1827_10 # 1827| v1827_13(void) = ExitFunction : -# 1829| char* global_string +# 1829| constructor_only global_5 # 1829| Block 0 -# 1829| v1829_1(void) = EnterFunction : -# 1829| m1829_2(unknown) = AliasedDefinition : -# 1829| r1829_3(glval) = VariableAddress[global_string] : -# 1829| r1829_4(glval) = StringConstant["global string"] : -# 1829| r1829_5(char *) = Convert : r1829_4 -# 1829| r1829_6(char *) = Convert : r1829_5 -# 1829| m1829_7(char *) = Store[global_string] : &:r1829_3, r1829_6 -# 1829| m1829_8(unknown) = Chi : total:m1829_2, partial:m1829_7 -# 1829| v1829_9(void) = ReturnVoid : -# 1829| v1829_10(void) = AliasedUse : ~m1829_8 -# 1829| v1829_11(void) = ExitFunction : +# 1829| v1829_1(void) = EnterFunction : +# 1829| m1829_2(unknown) = AliasedDefinition : +# 1829| r1829_3(glval) = VariableAddress[global_5] : +# 1829| r1829_4(glval) = FunctionAddress[constructor_only] : +# 1829| r1829_5(int) = Constant[2] : +# 1829| v1829_6(void) = Call[constructor_only] : func:r1829_4, this:r1829_3, 0:r1829_5 +# 1829| m1829_7(unknown) = ^CallSideEffect : ~m1829_2 +# 1829| m1829_8(unknown) = Chi : total:m1829_2, partial:m1829_7 +# 1829| m1829_9(constructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1829_3 +# 1829| m1829_10(unknown) = Chi : total:m1829_8, partial:m1829_9 +# 1829| v1829_11(void) = ReturnVoid : +# 1829| v1829_12(void) = AliasedUse : ~m1829_10 +# 1829| v1829_13(void) = ExitFunction : -# 1831| int global_6 +# 1831| char* global_string # 1831| Block 0 -# 1831| v1831_1(void) = EnterFunction : -# 1831| m1831_2(unknown) = AliasedDefinition : -# 1831| r1831_3(glval) = VariableAddress[global_6] : -# 1831| r1831_4(glval) = VariableAddress[global_2] : -# 1831| r1831_5(int) = Load[global_2] : &:r1831_4, ~m1831_2 -# 1831| m1831_6(int) = Store[global_6] : &:r1831_3, r1831_5 -# 1831| m1831_7(unknown) = Chi : total:m1831_2, partial:m1831_6 -# 1831| v1831_8(void) = ReturnVoid : -# 1831| v1831_9(void) = AliasedUse : ~m1831_7 -# 1831| v1831_10(void) = ExitFunction : +# 1831| v1831_1(void) = EnterFunction : +# 1831| m1831_2(unknown) = AliasedDefinition : +# 1831| r1831_3(glval) = VariableAddress[global_string] : +# 1831| r1831_4(glval) = StringConstant["global string"] : +# 1831| r1831_5(char *) = Convert : r1831_4 +# 1831| r1831_6(char *) = Convert : r1831_5 +# 1831| m1831_7(char *) = Store[global_string] : &:r1831_3, r1831_6 +# 1831| m1831_8(unknown) = Chi : total:m1831_2, partial:m1831_7 +# 1831| v1831_9(void) = ReturnVoid : +# 1831| v1831_10(void) = AliasedUse : ~m1831_8 +# 1831| v1831_11(void) = ExitFunction : -# 1834| block_assignment::A& block_assignment::A::operator=(block_assignment::A&&) -# 1834| Block 0 -# 1834| v1834_1(void) = EnterFunction : -# 1834| m1834_2(unknown) = AliasedDefinition : -# 1834| m1834_3(unknown) = InitializeNonLocal : -# 1834| m1834_4(unknown) = Chi : total:m1834_2, partial:m1834_3 -# 1834| r1834_5(glval) = VariableAddress[#this] : -# 1834| m1834_6(glval) = InitializeParameter[#this] : &:r1834_5 -# 1834| r1834_7(glval) = Load[#this] : &:r1834_5, m1834_6 -# 1834| m1834_8(A) = InitializeIndirection[#this] : &:r1834_7 +# 1833| int global_6 +# 1833| Block 0 +# 1833| v1833_1(void) = EnterFunction : +# 1833| m1833_2(unknown) = AliasedDefinition : +# 1833| r1833_3(glval) = VariableAddress[global_6] : +# 1833| r1833_4(glval) = VariableAddress[global_2] : +# 1833| r1833_5(int) = Load[global_2] : &:r1833_4, ~m1833_2 +# 1833| m1833_6(int) = Store[global_6] : &:r1833_3, r1833_5 +# 1833| m1833_7(unknown) = Chi : total:m1833_2, partial:m1833_6 +# 1833| v1833_8(void) = ReturnVoid : +# 1833| v1833_9(void) = AliasedUse : ~m1833_7 +# 1833| v1833_10(void) = ExitFunction : + +# 1836| block_assignment::A& block_assignment::A::operator=(block_assignment::A&&) +# 1836| Block 0 +# 1836| v1836_1(void) = EnterFunction : +# 1836| m1836_2(unknown) = AliasedDefinition : +# 1836| m1836_3(unknown) = InitializeNonLocal : +# 1836| m1836_4(unknown) = Chi : total:m1836_2, partial:m1836_3 +# 1836| r1836_5(glval) = VariableAddress[#this] : +# 1836| m1836_6(glval) = InitializeParameter[#this] : &:r1836_5 +# 1836| r1836_7(glval) = Load[#this] : &:r1836_5, m1836_6 +# 1836| m1836_8(A) = InitializeIndirection[#this] : &:r1836_7 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| m0_2(A &&) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(A &&) = Load[(unnamed parameter 0)] : &:r0_1, m0_2 #-----| m0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 #-----| r0_5(glval) = VariableAddress[#this] : -#-----| r0_6(A *) = Load[#this] : &:r0_5, m1834_6 +#-----| r0_6(A *) = Load[#this] : &:r0_5, m1836_6 #-----| r0_7(glval[1]>) = FieldAddress[e] : r0_6 #-----| r0_8(glval) = VariableAddress[(unnamed parameter 0)] : #-----| r0_9(A &&) = Load[(unnamed parameter 0)] : &:r0_8, m0_2 @@ -10691,1787 +10691,1787 @@ ir.cpp: #-----| r0_11(glval[1]>) = FieldAddress[e] : r0_10 #-----| r0_12(enum [1]) = Load[?] : &:r0_11, ~m0_4 #-----| m0_13(enum [1]) = Store[?] : &:r0_7, r0_12 -#-----| m0_14(unknown) = Chi : total:m1834_8, partial:m0_13 +#-----| m0_14(unknown) = Chi : total:m1836_8, partial:m0_13 #-----| r0_15(glval) = VariableAddress[#return] : #-----| r0_16(glval) = VariableAddress[#this] : -#-----| r0_17(A *) = Load[#this] : &:r0_16, m1834_6 +#-----| r0_17(A *) = Load[#this] : &:r0_16, m1836_6 #-----| r0_18(glval) = CopyValue : r0_17 #-----| r0_19(A &) = CopyValue : r0_18 #-----| m0_20(A &) = Store[#return] : &:r0_15, r0_19 -# 1834| v1834_9(void) = ReturnIndirection[#this] : &:r1834_7, m0_14 +# 1836| v1836_9(void) = ReturnIndirection[#this] : &:r1836_7, m0_14 #-----| v0_21(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, m0_4 -# 1834| r1834_10(glval) = VariableAddress[#return] : -# 1834| v1834_11(void) = ReturnValue : &:r1834_10, m0_20 -# 1834| v1834_12(void) = AliasedUse : m1834_3 -# 1834| v1834_13(void) = ExitFunction : +# 1836| r1836_10(glval) = VariableAddress[#return] : +# 1836| v1836_11(void) = ReturnValue : &:r1836_10, m0_20 +# 1836| v1836_12(void) = AliasedUse : m1836_3 +# 1836| v1836_13(void) = ExitFunction : -# 1839| block_assignment::B& block_assignment::B::operator=(block_assignment::B&&) -# 1839| Block 0 -# 1839| v1839_1(void) = EnterFunction : -# 1839| m1839_2(unknown) = AliasedDefinition : -# 1839| m1839_3(unknown) = InitializeNonLocal : -# 1839| m1839_4(unknown) = Chi : total:m1839_2, partial:m1839_3 -# 1839| r1839_5(glval) = VariableAddress[#this] : -# 1839| m1839_6(glval) = InitializeParameter[#this] : &:r1839_5 -# 1839| r1839_7(glval) = Load[#this] : &:r1839_5, m1839_6 -# 1839| m1839_8(B) = InitializeIndirection[#this] : &:r1839_7 +# 1841| block_assignment::B& block_assignment::B::operator=(block_assignment::B&&) +# 1841| Block 0 +# 1841| v1841_1(void) = EnterFunction : +# 1841| m1841_2(unknown) = AliasedDefinition : +# 1841| m1841_3(unknown) = InitializeNonLocal : +# 1841| m1841_4(unknown) = Chi : total:m1841_2, partial:m1841_3 +# 1841| r1841_5(glval) = VariableAddress[#this] : +# 1841| m1841_6(glval) = InitializeParameter[#this] : &:r1841_5 +# 1841| r1841_7(glval) = Load[#this] : &:r1841_5, m1841_6 +# 1841| m1841_8(B) = InitializeIndirection[#this] : &:r1841_7 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| m0_2(B &&) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(B &&) = Load[(unnamed parameter 0)] : &:r0_1, m0_2 #-----| m0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 1839| r1839_9(glval) = VariableAddress[#this] : -# 1839| r1839_10(B *) = Load[#this] : &:r1839_9, m1839_6 -#-----| r0_5(A *) = ConvertToNonVirtualBase[B : A] : r1839_10 -# 1839| r1839_11(glval) = FunctionAddress[operator=] : -# 1839| r1839_12(glval) = VariableAddress[(unnamed parameter 0)] : -# 1839| r1839_13(B &&) = Load[(unnamed parameter 0)] : &:r1839_12, m0_2 -#-----| r0_6(glval) = CopyValue : r1839_13 -# 1839| r1839_14(B *) = CopyValue : r0_6 -#-----| r0_7(A *) = ConvertToNonVirtualBase[B : A] : r1839_14 -# 1839| r1839_15(glval) = CopyValue : r0_7 -#-----| r0_8(A &) = CopyValue : r1839_15 -# 1839| r1839_16(A &) = Call[operator=] : func:r1839_11, this:r0_5, 0:r0_8 -# 1839| m1839_17(unknown) = ^CallSideEffect : ~m1839_4 -# 1839| m1839_18(unknown) = Chi : total:m1839_4, partial:m1839_17 -#-----| v0_9(void) = ^IndirectReadSideEffect[-1] : &:r0_5, ~m1839_8 +# 1841| r1841_9(glval) = VariableAddress[#this] : +# 1841| r1841_10(B *) = Load[#this] : &:r1841_9, m1841_6 +#-----| r0_5(A *) = ConvertToNonVirtualBase[B : A] : r1841_10 +# 1841| r1841_11(glval) = FunctionAddress[operator=] : +# 1841| r1841_12(glval) = VariableAddress[(unnamed parameter 0)] : +# 1841| r1841_13(B &&) = Load[(unnamed parameter 0)] : &:r1841_12, m0_2 +#-----| r0_6(glval) = CopyValue : r1841_13 +# 1841| r1841_14(B *) = CopyValue : r0_6 +#-----| r0_7(A *) = ConvertToNonVirtualBase[B : A] : r1841_14 +# 1841| r1841_15(glval) = CopyValue : r0_7 +#-----| r0_8(A &) = CopyValue : r1841_15 +# 1841| r1841_16(A &) = Call[operator=] : func:r1841_11, this:r0_5, 0:r0_8 +# 1841| m1841_17(unknown) = ^CallSideEffect : ~m1841_4 +# 1841| m1841_18(unknown) = Chi : total:m1841_4, partial:m1841_17 +#-----| v0_9(void) = ^IndirectReadSideEffect[-1] : &:r0_5, ~m1841_8 #-----| v0_10(void) = ^BufferReadSideEffect[0] : &:r0_8, ~m0_4 #-----| m0_11(A) = ^IndirectMayWriteSideEffect[-1] : &:r0_5 -#-----| m0_12(unknown) = Chi : total:m1839_8, partial:m0_11 +#-----| m0_12(unknown) = Chi : total:m1841_8, partial:m0_11 #-----| m0_13(unknown) = ^BufferMayWriteSideEffect[0] : &:r0_8 #-----| m0_14(unknown) = Chi : total:m0_4, partial:m0_13 -#-----| r0_15(glval) = CopyValue : r1839_16 +#-----| r0_15(glval) = CopyValue : r1841_16 #-----| r0_16(glval) = VariableAddress[#return] : #-----| r0_17(glval) = VariableAddress[#this] : -#-----| r0_18(B *) = Load[#this] : &:r0_17, m1839_6 +#-----| r0_18(B *) = Load[#this] : &:r0_17, m1841_6 #-----| r0_19(glval) = CopyValue : r0_18 #-----| r0_20(B &) = CopyValue : r0_19 #-----| m0_21(B &) = Store[#return] : &:r0_16, r0_20 -# 1839| v1839_19(void) = ReturnIndirection[#this] : &:r1839_7, m0_12 +# 1841| v1841_19(void) = ReturnIndirection[#this] : &:r1841_7, m0_12 #-----| v0_22(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, m0_14 -# 1839| r1839_20(glval) = VariableAddress[#return] : -# 1839| v1839_21(void) = ReturnValue : &:r1839_20, m0_21 -# 1839| v1839_22(void) = AliasedUse : ~m1839_18 -# 1839| v1839_23(void) = ExitFunction : +# 1841| r1841_20(glval) = VariableAddress[#return] : +# 1841| v1841_21(void) = ReturnValue : &:r1841_20, m0_21 +# 1841| v1841_22(void) = AliasedUse : ~m1841_18 +# 1841| v1841_23(void) = ExitFunction : -# 1843| void block_assignment::foo() -# 1843| Block 0 -# 1843| v1843_1(void) = EnterFunction : -# 1843| m1843_2(unknown) = AliasedDefinition : -# 1843| m1843_3(unknown) = InitializeNonLocal : -# 1843| m1843_4(unknown) = Chi : total:m1843_2, partial:m1843_3 -# 1844| r1844_1(glval) = VariableAddress[v] : -# 1844| m1844_2(B) = Uninitialized[v] : &:r1844_1 -# 1844| r1844_3(glval) = FunctionAddress[B] : -# 1844| r1844_4(A *) = Constant[0] : -# 1844| v1844_5(void) = Call[B] : func:r1844_3, this:r1844_1, 0:r1844_4 -# 1844| m1844_6(unknown) = ^CallSideEffect : ~m1843_4 -# 1844| m1844_7(unknown) = Chi : total:m1843_4, partial:m1844_6 -# 1844| v1844_8(void) = ^BufferReadSideEffect[0] : &:r1844_4, ~m1844_7 -# 1844| m1844_9(B) = ^IndirectMayWriteSideEffect[-1] : &:r1844_1 -# 1844| m1844_10(B) = Chi : total:m1844_2, partial:m1844_9 -# 1844| m1844_11(unknown) = ^BufferMayWriteSideEffect[0] : &:r1844_4 -# 1844| m1844_12(unknown) = Chi : total:m1844_7, partial:m1844_11 -# 1845| r1845_1(glval) = VariableAddress[v] : -# 1845| r1845_2(glval) = FunctionAddress[operator=] : -# 1845| r1845_3(glval) = VariableAddress[#temp1845:13] : -# 1845| m1845_4(B) = Uninitialized[#temp1845:13] : &:r1845_3 -# 1845| r1845_5(glval) = FunctionAddress[B] : -# 1845| r1845_6(A *) = Constant[0] : -# 1845| v1845_7(void) = Call[B] : func:r1845_5, this:r1845_3, 0:r1845_6 -# 1845| m1845_8(unknown) = ^CallSideEffect : ~m1844_12 -# 1845| m1845_9(unknown) = Chi : total:m1844_12, partial:m1845_8 -# 1845| v1845_10(void) = ^BufferReadSideEffect[0] : &:r1845_6, ~m1845_9 -# 1845| m1845_11(B) = ^IndirectMayWriteSideEffect[-1] : &:r1845_3 -# 1845| m1845_12(B) = Chi : total:m1845_4, partial:m1845_11 -# 1845| m1845_13(unknown) = ^BufferMayWriteSideEffect[0] : &:r1845_6 -# 1845| m1845_14(unknown) = Chi : total:m1845_9, partial:m1845_13 -# 1845| r1845_15(B &) = CopyValue : r1845_3 -# 1845| r1845_16(B &) = Call[operator=] : func:r1845_2, this:r1845_1, 0:r1845_15 -# 1845| m1845_17(unknown) = ^CallSideEffect : ~m1845_14 -# 1845| m1845_18(unknown) = Chi : total:m1845_14, partial:m1845_17 -# 1845| v1845_19(void) = ^IndirectReadSideEffect[-1] : &:r1845_1, m1844_10 -# 1845| v1845_20(void) = ^BufferReadSideEffect[0] : &:r1845_15, ~m1845_12 -# 1845| m1845_21(B) = ^IndirectMayWriteSideEffect[-1] : &:r1845_1 -# 1845| m1845_22(B) = Chi : total:m1844_10, partial:m1845_21 -# 1845| m1845_23(unknown) = ^BufferMayWriteSideEffect[0] : &:r1845_15 -# 1845| m1845_24(B) = Chi : total:m1845_12, partial:m1845_23 -# 1845| r1845_25(glval) = CopyValue : r1845_16 -# 1846| v1846_1(void) = NoOp : -# 1843| v1843_5(void) = ReturnVoid : -# 1843| v1843_6(void) = AliasedUse : ~m1845_18 -# 1843| v1843_7(void) = ExitFunction : +# 1845| void block_assignment::foo() +# 1845| Block 0 +# 1845| v1845_1(void) = EnterFunction : +# 1845| m1845_2(unknown) = AliasedDefinition : +# 1845| m1845_3(unknown) = InitializeNonLocal : +# 1845| m1845_4(unknown) = Chi : total:m1845_2, partial:m1845_3 +# 1846| r1846_1(glval) = VariableAddress[v] : +# 1846| m1846_2(B) = Uninitialized[v] : &:r1846_1 +# 1846| r1846_3(glval) = FunctionAddress[B] : +# 1846| r1846_4(A *) = Constant[0] : +# 1846| v1846_5(void) = Call[B] : func:r1846_3, this:r1846_1, 0:r1846_4 +# 1846| m1846_6(unknown) = ^CallSideEffect : ~m1845_4 +# 1846| m1846_7(unknown) = Chi : total:m1845_4, partial:m1846_6 +# 1846| v1846_8(void) = ^BufferReadSideEffect[0] : &:r1846_4, ~m1846_7 +# 1846| m1846_9(B) = ^IndirectMayWriteSideEffect[-1] : &:r1846_1 +# 1846| m1846_10(B) = Chi : total:m1846_2, partial:m1846_9 +# 1846| m1846_11(unknown) = ^BufferMayWriteSideEffect[0] : &:r1846_4 +# 1846| m1846_12(unknown) = Chi : total:m1846_7, partial:m1846_11 +# 1847| r1847_1(glval) = VariableAddress[v] : +# 1847| r1847_2(glval) = FunctionAddress[operator=] : +# 1847| r1847_3(glval) = VariableAddress[#temp1847:13] : +# 1847| m1847_4(B) = Uninitialized[#temp1847:13] : &:r1847_3 +# 1847| r1847_5(glval) = FunctionAddress[B] : +# 1847| r1847_6(A *) = Constant[0] : +# 1847| v1847_7(void) = Call[B] : func:r1847_5, this:r1847_3, 0:r1847_6 +# 1847| m1847_8(unknown) = ^CallSideEffect : ~m1846_12 +# 1847| m1847_9(unknown) = Chi : total:m1846_12, partial:m1847_8 +# 1847| v1847_10(void) = ^BufferReadSideEffect[0] : &:r1847_6, ~m1847_9 +# 1847| m1847_11(B) = ^IndirectMayWriteSideEffect[-1] : &:r1847_3 +# 1847| m1847_12(B) = Chi : total:m1847_4, partial:m1847_11 +# 1847| m1847_13(unknown) = ^BufferMayWriteSideEffect[0] : &:r1847_6 +# 1847| m1847_14(unknown) = Chi : total:m1847_9, partial:m1847_13 +# 1847| r1847_15(B &) = CopyValue : r1847_3 +# 1847| r1847_16(B &) = Call[operator=] : func:r1847_2, this:r1847_1, 0:r1847_15 +# 1847| m1847_17(unknown) = ^CallSideEffect : ~m1847_14 +# 1847| m1847_18(unknown) = Chi : total:m1847_14, partial:m1847_17 +# 1847| v1847_19(void) = ^IndirectReadSideEffect[-1] : &:r1847_1, m1846_10 +# 1847| v1847_20(void) = ^BufferReadSideEffect[0] : &:r1847_15, ~m1847_12 +# 1847| m1847_21(B) = ^IndirectMayWriteSideEffect[-1] : &:r1847_1 +# 1847| m1847_22(B) = Chi : total:m1846_10, partial:m1847_21 +# 1847| m1847_23(unknown) = ^BufferMayWriteSideEffect[0] : &:r1847_15 +# 1847| m1847_24(B) = Chi : total:m1847_12, partial:m1847_23 +# 1847| r1847_25(glval) = CopyValue : r1847_16 +# 1848| v1848_1(void) = NoOp : +# 1845| v1845_5(void) = ReturnVoid : +# 1845| v1845_6(void) = AliasedUse : ~m1847_18 +# 1845| v1845_7(void) = ExitFunction : -# 1849| void magicvars() -# 1849| Block 0 -# 1849| v1849_1(void) = EnterFunction : -# 1849| m1849_2(unknown) = AliasedDefinition : -# 1849| m1849_3(unknown) = InitializeNonLocal : -# 1849| m1849_4(unknown) = Chi : total:m1849_2, partial:m1849_3 -# 1850| r1850_1(glval) = VariableAddress[pf] : -# 1850| r1850_2(glval) = VariableAddress[__PRETTY_FUNCTION__] : -# 1850| r1850_3(char *) = Convert : r1850_2 -# 1850| m1850_4(char *) = Store[pf] : &:r1850_1, r1850_3 -# 1851| r1851_1(glval) = VariableAddress[strfunc] : -# 1851| r1851_2(glval) = VariableAddress[__func__] : -# 1851| r1851_3(char *) = Convert : r1851_2 -# 1851| m1851_4(char *) = Store[strfunc] : &:r1851_1, r1851_3 -# 1852| v1852_1(void) = NoOp : -# 1849| v1849_5(void) = ReturnVoid : -# 1849| v1849_6(void) = AliasedUse : m1849_3 -# 1849| v1849_7(void) = ExitFunction : +# 1851| void magicvars() +# 1851| Block 0 +# 1851| v1851_1(void) = EnterFunction : +# 1851| m1851_2(unknown) = AliasedDefinition : +# 1851| m1851_3(unknown) = InitializeNonLocal : +# 1851| m1851_4(unknown) = Chi : total:m1851_2, partial:m1851_3 +# 1852| r1852_1(glval) = VariableAddress[pf] : +# 1852| r1852_2(glval) = VariableAddress[__PRETTY_FUNCTION__] : +# 1852| r1852_3(char *) = Convert : r1852_2 +# 1852| m1852_4(char *) = Store[pf] : &:r1852_1, r1852_3 +# 1853| r1853_1(glval) = VariableAddress[strfunc] : +# 1853| r1853_2(glval) = VariableAddress[__func__] : +# 1853| r1853_3(char *) = Convert : r1853_2 +# 1853| m1853_4(char *) = Store[strfunc] : &:r1853_1, r1853_3 +# 1854| v1854_1(void) = NoOp : +# 1851| v1851_5(void) = ReturnVoid : +# 1851| v1851_6(void) = AliasedUse : m1851_3 +# 1851| v1851_7(void) = ExitFunction : -# 1862| void* missing_declaration_entries::Bar1::missing_type_decl_entry(missing_declaration_entries::Bar1::pointer) -# 1862| Block 0 -# 1862| v1862_1(void) = EnterFunction : -# 1862| m1862_2(unknown) = AliasedDefinition : -# 1862| m1862_3(unknown) = InitializeNonLocal : -# 1862| m1862_4(unknown) = Chi : total:m1862_2, partial:m1862_3 -# 1862| r1862_5(glval) = VariableAddress[#this] : -# 1862| m1862_6(glval>) = InitializeParameter[#this] : &:r1862_5 -# 1862| r1862_7(glval>) = Load[#this] : &:r1862_5, m1862_6 -# 1862| m1862_8(Bar1) = InitializeIndirection[#this] : &:r1862_7 -# 1862| r1862_9(glval) = VariableAddress[p] : -# 1862| m1862_10(S *) = InitializeParameter[p] : &:r1862_9 -# 1862| r1862_11(S *) = Load[p] : &:r1862_9, m1862_10 -# 1862| m1862_12(unknown) = InitializeIndirection[p] : &:r1862_11 -# 1864| r1864_1(glval) = VariableAddress[#return] : -# 1864| r1864_2(glval) = VariableAddress[p] : -# 1864| r1864_3(S *) = Load[p] : &:r1864_2, m1862_10 -# 1864| r1864_4(void *) = Convert : r1864_3 -# 1864| m1864_5(void *) = Store[#return] : &:r1864_1, r1864_4 -# 1862| v1862_13(void) = ReturnIndirection[#this] : &:r1862_7, m1862_8 -# 1862| v1862_14(void) = ReturnIndirection[p] : &:r1862_11, m1862_12 -# 1862| r1862_15(glval) = VariableAddress[#return] : -# 1862| v1862_16(void) = ReturnValue : &:r1862_15, m1864_5 -# 1862| v1862_17(void) = AliasedUse : m1862_3 -# 1862| v1862_18(void) = ExitFunction : +# 1864| void* missing_declaration_entries::Bar1::missing_type_decl_entry(missing_declaration_entries::Bar1::pointer) +# 1864| Block 0 +# 1864| v1864_1(void) = EnterFunction : +# 1864| m1864_2(unknown) = AliasedDefinition : +# 1864| m1864_3(unknown) = InitializeNonLocal : +# 1864| m1864_4(unknown) = Chi : total:m1864_2, partial:m1864_3 +# 1864| r1864_5(glval) = VariableAddress[#this] : +# 1864| m1864_6(glval>) = InitializeParameter[#this] : &:r1864_5 +# 1864| r1864_7(glval>) = Load[#this] : &:r1864_5, m1864_6 +# 1864| m1864_8(Bar1) = InitializeIndirection[#this] : &:r1864_7 +# 1864| r1864_9(glval) = VariableAddress[p] : +# 1864| m1864_10(S *) = InitializeParameter[p] : &:r1864_9 +# 1864| r1864_11(S *) = Load[p] : &:r1864_9, m1864_10 +# 1864| m1864_12(unknown) = InitializeIndirection[p] : &:r1864_11 +# 1866| r1866_1(glval) = VariableAddress[#return] : +# 1866| r1866_2(glval) = VariableAddress[p] : +# 1866| r1866_3(S *) = Load[p] : &:r1866_2, m1864_10 +# 1866| r1866_4(void *) = Convert : r1866_3 +# 1866| m1866_5(void *) = Store[#return] : &:r1866_1, r1866_4 +# 1864| v1864_13(void) = ReturnIndirection[#this] : &:r1864_7, m1864_8 +# 1864| v1864_14(void) = ReturnIndirection[p] : &:r1864_11, m1864_12 +# 1864| r1864_15(glval) = VariableAddress[#return] : +# 1864| v1864_16(void) = ReturnValue : &:r1864_15, m1866_5 +# 1864| v1864_17(void) = AliasedUse : m1864_3 +# 1864| v1864_18(void) = ExitFunction : -# 1868| void missing_declaration_entries::test1() -# 1868| Block 0 -# 1868| v1868_1(void) = EnterFunction : -# 1868| m1868_2(unknown) = AliasedDefinition : -# 1868| m1868_3(unknown) = InitializeNonLocal : -# 1868| m1868_4(unknown) = Chi : total:m1868_2, partial:m1868_3 -# 1869| r1869_1(glval>) = VariableAddress[b] : -# 1869| m1869_2(Bar1) = Uninitialized[b] : &:r1869_1 -# 1870| r1870_1(glval>) = VariableAddress[b] : -# 1870| r1870_2(glval) = FunctionAddress[missing_type_decl_entry] : -# 1870| r1870_3(S *) = Constant[0] : -# 1870| r1870_4(void *) = Call[missing_type_decl_entry] : func:r1870_2, this:r1870_1, 0:r1870_3 -# 1870| m1870_5(unknown) = ^CallSideEffect : ~m1868_4 -# 1870| m1870_6(unknown) = Chi : total:m1868_4, partial:m1870_5 -# 1870| v1870_7(void) = ^IndirectReadSideEffect[-1] : &:r1870_1, m1869_2 -# 1870| v1870_8(void) = ^BufferReadSideEffect[0] : &:r1870_3, ~m1870_6 -# 1870| m1870_9(Bar1) = ^IndirectMayWriteSideEffect[-1] : &:r1870_1 -# 1870| m1870_10(Bar1) = Chi : total:m1869_2, partial:m1870_9 -# 1870| m1870_11(unknown) = ^BufferMayWriteSideEffect[0] : &:r1870_3 -# 1870| m1870_12(unknown) = Chi : total:m1870_6, partial:m1870_11 -# 1871| v1871_1(void) = NoOp : -# 1868| v1868_5(void) = ReturnVoid : -# 1868| v1868_6(void) = AliasedUse : ~m1870_12 -# 1868| v1868_7(void) = ExitFunction : +# 1870| void missing_declaration_entries::test1() +# 1870| Block 0 +# 1870| v1870_1(void) = EnterFunction : +# 1870| m1870_2(unknown) = AliasedDefinition : +# 1870| m1870_3(unknown) = InitializeNonLocal : +# 1870| m1870_4(unknown) = Chi : total:m1870_2, partial:m1870_3 +# 1871| r1871_1(glval>) = VariableAddress[b] : +# 1871| m1871_2(Bar1) = Uninitialized[b] : &:r1871_1 +# 1872| r1872_1(glval>) = VariableAddress[b] : +# 1872| r1872_2(glval) = FunctionAddress[missing_type_decl_entry] : +# 1872| r1872_3(S *) = Constant[0] : +# 1872| r1872_4(void *) = Call[missing_type_decl_entry] : func:r1872_2, this:r1872_1, 0:r1872_3 +# 1872| m1872_5(unknown) = ^CallSideEffect : ~m1870_4 +# 1872| m1872_6(unknown) = Chi : total:m1870_4, partial:m1872_5 +# 1872| v1872_7(void) = ^IndirectReadSideEffect[-1] : &:r1872_1, m1871_2 +# 1872| v1872_8(void) = ^BufferReadSideEffect[0] : &:r1872_3, ~m1872_6 +# 1872| m1872_9(Bar1) = ^IndirectMayWriteSideEffect[-1] : &:r1872_1 +# 1872| m1872_10(Bar1) = Chi : total:m1871_2, partial:m1872_9 +# 1872| m1872_11(unknown) = ^BufferMayWriteSideEffect[0] : &:r1872_3 +# 1872| m1872_12(unknown) = Chi : total:m1872_6, partial:m1872_11 +# 1873| v1873_1(void) = NoOp : +# 1870| v1870_5(void) = ReturnVoid : +# 1870| v1870_6(void) = AliasedUse : ~m1872_12 +# 1870| v1870_7(void) = ExitFunction : -# 1875| int missing_declaration_entries::Bar2::two_missing_variable_declaration_entries() -# 1875| Block 0 -# 1875| v1875_1(void) = EnterFunction : -# 1875| m1875_2(unknown) = AliasedDefinition : -# 1875| m1875_3(unknown) = InitializeNonLocal : -# 1875| m1875_4(unknown) = Chi : total:m1875_2, partial:m1875_3 -# 1875| r1875_5(glval) = VariableAddress[#this] : -# 1875| m1875_6(glval>) = InitializeParameter[#this] : &:r1875_5 -# 1875| r1875_7(glval>) = Load[#this] : &:r1875_5, m1875_6 -# 1875| m1875_8(Bar2) = InitializeIndirection[#this] : &:r1875_7 -# 1876| r1876_1(glval) = VariableAddress[x] : -# 1876| m1876_2(int[10]) = Uninitialized[x] : &:r1876_1 -# 1876| r1876_3(glval) = VariableAddress[y] : -# 1876| m1876_4(int[10]) = Uninitialized[y] : &:r1876_3 -# 1877| r1877_1(int) = Constant[10] : -# 1877| r1877_2(glval) = VariableAddress[x] : -# 1877| r1877_3(int *) = Convert : r1877_2 -# 1877| r1877_4(glval) = CopyValue : r1877_3 -# 1877| m1877_5(int) = Store[?] : &:r1877_4, r1877_1 -# 1877| m1877_6(int[10]) = Chi : total:m1876_2, partial:m1877_5 -# 1878| r1878_1(int) = Constant[10] : -# 1878| r1878_2(glval) = VariableAddress[y] : -# 1878| r1878_3(int *) = Convert : r1878_2 -# 1878| r1878_4(glval) = CopyValue : r1878_3 -# 1878| m1878_5(int) = Store[?] : &:r1878_4, r1878_1 -# 1878| m1878_6(int[10]) = Chi : total:m1876_4, partial:m1878_5 -# 1879| r1879_1(glval) = VariableAddress[#return] : +# 1877| int missing_declaration_entries::Bar2::two_missing_variable_declaration_entries() +# 1877| Block 0 +# 1877| v1877_1(void) = EnterFunction : +# 1877| m1877_2(unknown) = AliasedDefinition : +# 1877| m1877_3(unknown) = InitializeNonLocal : +# 1877| m1877_4(unknown) = Chi : total:m1877_2, partial:m1877_3 +# 1877| r1877_5(glval) = VariableAddress[#this] : +# 1877| m1877_6(glval>) = InitializeParameter[#this] : &:r1877_5 +# 1877| r1877_7(glval>) = Load[#this] : &:r1877_5, m1877_6 +# 1877| m1877_8(Bar2) = InitializeIndirection[#this] : &:r1877_7 +# 1878| r1878_1(glval) = VariableAddress[x] : +# 1878| m1878_2(int[10]) = Uninitialized[x] : &:r1878_1 +# 1878| r1878_3(glval) = VariableAddress[y] : +# 1878| m1878_4(int[10]) = Uninitialized[y] : &:r1878_3 +# 1879| r1879_1(int) = Constant[10] : # 1879| r1879_2(glval) = VariableAddress[x] : # 1879| r1879_3(int *) = Convert : r1879_2 -# 1879| r1879_4(int) = Load[?] : &:r1879_3, m1877_5 -# 1879| r1879_5(glval) = VariableAddress[y] : -# 1879| r1879_6(int *) = Convert : r1879_5 -# 1879| r1879_7(int) = Load[?] : &:r1879_6, m1878_5 -# 1879| r1879_8(int) = Add : r1879_4, r1879_7 -# 1879| m1879_9(int) = Store[#return] : &:r1879_1, r1879_8 -# 1875| v1875_9(void) = ReturnIndirection[#this] : &:r1875_7, m1875_8 -# 1875| r1875_10(glval) = VariableAddress[#return] : -# 1875| v1875_11(void) = ReturnValue : &:r1875_10, m1879_9 -# 1875| v1875_12(void) = AliasedUse : m1875_3 -# 1875| v1875_13(void) = ExitFunction : +# 1879| r1879_4(glval) = CopyValue : r1879_3 +# 1879| m1879_5(int) = Store[?] : &:r1879_4, r1879_1 +# 1879| m1879_6(int[10]) = Chi : total:m1878_2, partial:m1879_5 +# 1880| r1880_1(int) = Constant[10] : +# 1880| r1880_2(glval) = VariableAddress[y] : +# 1880| r1880_3(int *) = Convert : r1880_2 +# 1880| r1880_4(glval) = CopyValue : r1880_3 +# 1880| m1880_5(int) = Store[?] : &:r1880_4, r1880_1 +# 1880| m1880_6(int[10]) = Chi : total:m1878_4, partial:m1880_5 +# 1881| r1881_1(glval) = VariableAddress[#return] : +# 1881| r1881_2(glval) = VariableAddress[x] : +# 1881| r1881_3(int *) = Convert : r1881_2 +# 1881| r1881_4(int) = Load[?] : &:r1881_3, m1879_5 +# 1881| r1881_5(glval) = VariableAddress[y] : +# 1881| r1881_6(int *) = Convert : r1881_5 +# 1881| r1881_7(int) = Load[?] : &:r1881_6, m1880_5 +# 1881| r1881_8(int) = Add : r1881_4, r1881_7 +# 1881| m1881_9(int) = Store[#return] : &:r1881_1, r1881_8 +# 1877| v1877_9(void) = ReturnIndirection[#this] : &:r1877_7, m1877_8 +# 1877| r1877_10(glval) = VariableAddress[#return] : +# 1877| v1877_11(void) = ReturnValue : &:r1877_10, m1881_9 +# 1877| v1877_12(void) = AliasedUse : m1877_3 +# 1877| v1877_13(void) = ExitFunction : -# 1883| void missing_declaration_entries::test2() -# 1883| Block 0 -# 1883| v1883_1(void) = EnterFunction : -# 1883| m1883_2(unknown) = AliasedDefinition : -# 1883| m1883_3(unknown) = InitializeNonLocal : -# 1883| m1883_4(unknown) = Chi : total:m1883_2, partial:m1883_3 -# 1884| r1884_1(glval>) = VariableAddress[b] : -# 1884| m1884_2(Bar2) = Uninitialized[b] : &:r1884_1 -# 1885| r1885_1(glval>) = VariableAddress[b] : -# 1885| r1885_2(glval) = FunctionAddress[two_missing_variable_declaration_entries] : -# 1885| r1885_3(int) = Call[two_missing_variable_declaration_entries] : func:r1885_2, this:r1885_1 -# 1885| m1885_4(unknown) = ^CallSideEffect : ~m1883_4 -# 1885| m1885_5(unknown) = Chi : total:m1883_4, partial:m1885_4 -# 1885| v1885_6(void) = ^IndirectReadSideEffect[-1] : &:r1885_1, m1884_2 -# 1885| m1885_7(Bar2) = ^IndirectMayWriteSideEffect[-1] : &:r1885_1 -# 1885| m1885_8(Bar2) = Chi : total:m1884_2, partial:m1885_7 -# 1886| v1886_1(void) = NoOp : -# 1883| v1883_5(void) = ReturnVoid : -# 1883| v1883_6(void) = AliasedUse : ~m1885_5 -# 1883| v1883_7(void) = ExitFunction : +# 1885| void missing_declaration_entries::test2() +# 1885| Block 0 +# 1885| v1885_1(void) = EnterFunction : +# 1885| m1885_2(unknown) = AliasedDefinition : +# 1885| m1885_3(unknown) = InitializeNonLocal : +# 1885| m1885_4(unknown) = Chi : total:m1885_2, partial:m1885_3 +# 1886| r1886_1(glval>) = VariableAddress[b] : +# 1886| m1886_2(Bar2) = Uninitialized[b] : &:r1886_1 +# 1887| r1887_1(glval>) = VariableAddress[b] : +# 1887| r1887_2(glval) = FunctionAddress[two_missing_variable_declaration_entries] : +# 1887| r1887_3(int) = Call[two_missing_variable_declaration_entries] : func:r1887_2, this:r1887_1 +# 1887| m1887_4(unknown) = ^CallSideEffect : ~m1885_4 +# 1887| m1887_5(unknown) = Chi : total:m1885_4, partial:m1887_4 +# 1887| v1887_6(void) = ^IndirectReadSideEffect[-1] : &:r1887_1, m1886_2 +# 1887| m1887_7(Bar2) = ^IndirectMayWriteSideEffect[-1] : &:r1887_1 +# 1887| m1887_8(Bar2) = Chi : total:m1886_2, partial:m1887_7 +# 1888| v1888_1(void) = NoOp : +# 1885| v1885_5(void) = ReturnVoid : +# 1885| v1885_6(void) = AliasedUse : ~m1887_5 +# 1885| v1885_7(void) = ExitFunction : -# 1889| char global_template -# 1889| Block 0 -# 1889| v1889_1(void) = EnterFunction : -# 1889| m1889_2(unknown) = AliasedDefinition : -# 1889| r1889_3(glval) = VariableAddress[global_template] : -# 1889| r1889_4(char) = Constant[42] : -# 1889| m1889_5(char) = Store[global_template] : &:r1889_3, r1889_4 -# 1889| m1889_6(unknown) = Chi : total:m1889_2, partial:m1889_5 -# 1889| v1889_7(void) = ReturnVoid : -# 1889| v1889_8(void) = AliasedUse : ~m1889_6 -# 1889| v1889_9(void) = ExitFunction : - -# 1889| int global_template -# 1889| Block 0 -# 1889| v1889_1(void) = EnterFunction : -# 1889| m1889_2(unknown) = AliasedDefinition : -# 1889| r1889_3(glval) = VariableAddress[global_template] : -# 1889| r1889_4(int) = Constant[42] : -# 1889| m1889_5(int) = Store[global_template] : &:r1889_3, r1889_4 -# 1889| m1889_6(unknown) = Chi : total:m1889_2, partial:m1889_5 -# 1889| v1889_7(void) = ReturnVoid : -# 1889| v1889_8(void) = AliasedUse : ~m1889_6 -# 1889| v1889_9(void) = ExitFunction : - -# 1891| int test_global_template_int() +# 1891| char global_template # 1891| Block 0 # 1891| v1891_1(void) = EnterFunction : # 1891| m1891_2(unknown) = AliasedDefinition : -# 1891| m1891_3(unknown) = InitializeNonLocal : -# 1891| m1891_4(unknown) = Chi : total:m1891_2, partial:m1891_3 -# 1892| r1892_1(glval) = VariableAddress[local_int] : -# 1892| r1892_2(glval) = VariableAddress[global_template] : -# 1892| r1892_3(int) = Load[global_template] : &:r1892_2, ~m1891_3 -# 1892| m1892_4(int) = Store[local_int] : &:r1892_1, r1892_3 -# 1893| r1893_1(glval) = VariableAddress[local_char] : -# 1893| r1893_2(glval) = VariableAddress[global_template] : -# 1893| r1893_3(char) = Load[global_template] : &:r1893_2, ~m1891_3 -# 1893| m1893_4(char) = Store[local_char] : &:r1893_1, r1893_3 -# 1894| r1894_1(glval) = VariableAddress[#return] : -# 1894| r1894_2(glval) = VariableAddress[local_int] : -# 1894| r1894_3(int) = Load[local_int] : &:r1894_2, m1892_4 -# 1894| r1894_4(glval) = VariableAddress[local_char] : -# 1894| r1894_5(char) = Load[local_char] : &:r1894_4, m1893_4 -# 1894| r1894_6(int) = Convert : r1894_5 -# 1894| r1894_7(int) = Add : r1894_3, r1894_6 -# 1894| m1894_8(int) = Store[#return] : &:r1894_1, r1894_7 -# 1891| r1891_5(glval) = VariableAddress[#return] : -# 1891| v1891_6(void) = ReturnValue : &:r1891_5, m1894_8 -# 1891| v1891_7(void) = AliasedUse : m1891_3 -# 1891| v1891_8(void) = ExitFunction : +# 1891| r1891_3(glval) = VariableAddress[global_template] : +# 1891| r1891_4(char) = Constant[42] : +# 1891| m1891_5(char) = Store[global_template] : &:r1891_3, r1891_4 +# 1891| m1891_6(unknown) = Chi : total:m1891_2, partial:m1891_5 +# 1891| v1891_7(void) = ReturnVoid : +# 1891| v1891_8(void) = AliasedUse : ~m1891_6 +# 1891| v1891_9(void) = ExitFunction : -# 1899| int noreturnTest(int) -# 1899| Block 0 -# 1899| v1899_1(void) = EnterFunction : -# 1899| m1899_2(unknown) = AliasedDefinition : -# 1899| m1899_3(unknown) = InitializeNonLocal : -# 1899| m1899_4(unknown) = Chi : total:m1899_2, partial:m1899_3 -# 1899| r1899_5(glval) = VariableAddress[x] : -# 1899| m1899_6(int) = InitializeParameter[x] : &:r1899_5 -# 1900| r1900_1(glval) = VariableAddress[x] : -# 1900| r1900_2(int) = Load[x] : &:r1900_1, m1899_6 -# 1900| r1900_3(int) = Constant[10] : -# 1900| r1900_4(bool) = CompareLT : r1900_2, r1900_3 -# 1900| v1900_5(void) = ConditionalBranch : r1900_4 +# 1891| int global_template +# 1891| Block 0 +# 1891| v1891_1(void) = EnterFunction : +# 1891| m1891_2(unknown) = AliasedDefinition : +# 1891| r1891_3(glval) = VariableAddress[global_template] : +# 1891| r1891_4(int) = Constant[42] : +# 1891| m1891_5(int) = Store[global_template] : &:r1891_3, r1891_4 +# 1891| m1891_6(unknown) = Chi : total:m1891_2, partial:m1891_5 +# 1891| v1891_7(void) = ReturnVoid : +# 1891| v1891_8(void) = AliasedUse : ~m1891_6 +# 1891| v1891_9(void) = ExitFunction : + +# 1893| int test_global_template_int() +# 1893| Block 0 +# 1893| v1893_1(void) = EnterFunction : +# 1893| m1893_2(unknown) = AliasedDefinition : +# 1893| m1893_3(unknown) = InitializeNonLocal : +# 1893| m1893_4(unknown) = Chi : total:m1893_2, partial:m1893_3 +# 1894| r1894_1(glval) = VariableAddress[local_int] : +# 1894| r1894_2(glval) = VariableAddress[global_template] : +# 1894| r1894_3(int) = Load[global_template] : &:r1894_2, ~m1893_3 +# 1894| m1894_4(int) = Store[local_int] : &:r1894_1, r1894_3 +# 1895| r1895_1(glval) = VariableAddress[local_char] : +# 1895| r1895_2(glval) = VariableAddress[global_template] : +# 1895| r1895_3(char) = Load[global_template] : &:r1895_2, ~m1893_3 +# 1895| m1895_4(char) = Store[local_char] : &:r1895_1, r1895_3 +# 1896| r1896_1(glval) = VariableAddress[#return] : +# 1896| r1896_2(glval) = VariableAddress[local_int] : +# 1896| r1896_3(int) = Load[local_int] : &:r1896_2, m1894_4 +# 1896| r1896_4(glval) = VariableAddress[local_char] : +# 1896| r1896_5(char) = Load[local_char] : &:r1896_4, m1895_4 +# 1896| r1896_6(int) = Convert : r1896_5 +# 1896| r1896_7(int) = Add : r1896_3, r1896_6 +# 1896| m1896_8(int) = Store[#return] : &:r1896_1, r1896_7 +# 1893| r1893_5(glval) = VariableAddress[#return] : +# 1893| v1893_6(void) = ReturnValue : &:r1893_5, m1896_8 +# 1893| v1893_7(void) = AliasedUse : m1893_3 +# 1893| v1893_8(void) = ExitFunction : + +# 1901| int noreturnTest(int) +# 1901| Block 0 +# 1901| v1901_1(void) = EnterFunction : +# 1901| m1901_2(unknown) = AliasedDefinition : +# 1901| m1901_3(unknown) = InitializeNonLocal : +# 1901| m1901_4(unknown) = Chi : total:m1901_2, partial:m1901_3 +# 1901| r1901_5(glval) = VariableAddress[x] : +# 1901| m1901_6(int) = InitializeParameter[x] : &:r1901_5 +# 1902| r1902_1(glval) = VariableAddress[x] : +# 1902| r1902_2(int) = Load[x] : &:r1902_1, m1901_6 +# 1902| r1902_3(int) = Constant[10] : +# 1902| r1902_4(bool) = CompareLT : r1902_2, r1902_3 +# 1902| v1902_5(void) = ConditionalBranch : r1902_4 #-----| False -> Block 2 #-----| True -> Block 1 -# 1901| Block 1 -# 1901| r1901_1(glval) = VariableAddress[#return] : -# 1901| r1901_2(glval) = VariableAddress[x] : -# 1901| r1901_3(int) = Load[x] : &:r1901_2, m1899_6 -# 1901| m1901_4(int) = Store[#return] : &:r1901_1, r1901_3 -# 1899| r1899_7(glval) = VariableAddress[#return] : -# 1899| v1899_8(void) = ReturnValue : &:r1899_7, m1901_4 -# 1899| v1899_9(void) = AliasedUse : m1899_3 -# 1899| v1899_10(void) = ExitFunction : +# 1903| Block 1 +# 1903| r1903_1(glval) = VariableAddress[#return] : +# 1903| r1903_2(glval) = VariableAddress[x] : +# 1903| r1903_3(int) = Load[x] : &:r1903_2, m1901_6 +# 1903| m1903_4(int) = Store[#return] : &:r1903_1, r1903_3 +# 1901| r1901_7(glval) = VariableAddress[#return] : +# 1901| v1901_8(void) = ReturnValue : &:r1901_7, m1903_4 +# 1901| v1901_9(void) = AliasedUse : m1901_3 +# 1901| v1901_10(void) = ExitFunction : -# 1903| Block 2 -# 1903| r1903_1(glval) = FunctionAddress[noreturnFunc] : -# 1903| v1903_2(void) = Call[noreturnFunc] : func:r1903_1 -# 1903| m1903_3(unknown) = ^CallSideEffect : ~m1899_4 -# 1903| m1903_4(unknown) = Chi : total:m1899_4, partial:m1903_3 -# 1899| v1899_11(void) = Unreached : +# 1905| Block 2 +# 1905| r1905_1(glval) = FunctionAddress[noreturnFunc] : +# 1905| v1905_2(void) = Call[noreturnFunc] : func:r1905_1 +# 1905| m1905_3(unknown) = ^CallSideEffect : ~m1901_4 +# 1905| m1905_4(unknown) = Chi : total:m1901_4, partial:m1905_3 +# 1901| v1901_11(void) = Unreached : -# 1907| int noreturnTest2(int) -# 1907| Block 0 -# 1907| v1907_1(void) = EnterFunction : -# 1907| m1907_2(unknown) = AliasedDefinition : -# 1907| m1907_3(unknown) = InitializeNonLocal : -# 1907| m1907_4(unknown) = Chi : total:m1907_2, partial:m1907_3 -# 1907| r1907_5(glval) = VariableAddress[x] : -# 1907| m1907_6(int) = InitializeParameter[x] : &:r1907_5 -# 1908| r1908_1(glval) = VariableAddress[x] : -# 1908| r1908_2(int) = Load[x] : &:r1908_1, m1907_6 -# 1908| r1908_3(int) = Constant[10] : -# 1908| r1908_4(bool) = CompareLT : r1908_2, r1908_3 -# 1908| v1908_5(void) = ConditionalBranch : r1908_4 +# 1909| int noreturnTest2(int) +# 1909| Block 0 +# 1909| v1909_1(void) = EnterFunction : +# 1909| m1909_2(unknown) = AliasedDefinition : +# 1909| m1909_3(unknown) = InitializeNonLocal : +# 1909| m1909_4(unknown) = Chi : total:m1909_2, partial:m1909_3 +# 1909| r1909_5(glval) = VariableAddress[x] : +# 1909| m1909_6(int) = InitializeParameter[x] : &:r1909_5 +# 1910| r1910_1(glval) = VariableAddress[x] : +# 1910| r1910_2(int) = Load[x] : &:r1910_1, m1909_6 +# 1910| r1910_3(int) = Constant[10] : +# 1910| r1910_4(bool) = CompareLT : r1910_2, r1910_3 +# 1910| v1910_5(void) = ConditionalBranch : r1910_4 #-----| False -> Block 2 #-----| True -> Block 1 -# 1909| Block 1 -# 1909| r1909_1(glval) = FunctionAddress[noreturnFunc] : -# 1909| v1909_2(void) = Call[noreturnFunc] : func:r1909_1 -# 1909| m1909_3(unknown) = ^CallSideEffect : ~m1907_4 -# 1909| m1909_4(unknown) = Chi : total:m1907_4, partial:m1909_3 -# 1907| v1907_7(void) = Unreached : +# 1911| Block 1 +# 1911| r1911_1(glval) = FunctionAddress[noreturnFunc] : +# 1911| v1911_2(void) = Call[noreturnFunc] : func:r1911_1 +# 1911| m1911_3(unknown) = ^CallSideEffect : ~m1909_4 +# 1911| m1911_4(unknown) = Chi : total:m1909_4, partial:m1911_3 +# 1909| v1909_7(void) = Unreached : -# 1911| Block 2 -# 1911| r1911_1(glval) = VariableAddress[#return] : -# 1911| r1911_2(glval) = VariableAddress[x] : -# 1911| r1911_3(int) = Load[x] : &:r1911_2, m1907_6 -# 1911| m1911_4(int) = Store[#return] : &:r1911_1, r1911_3 -# 1907| r1907_8(glval) = VariableAddress[#return] : -# 1907| v1907_9(void) = ReturnValue : &:r1907_8, m1911_4 -# 1907| v1907_10(void) = AliasedUse : m1907_3 -# 1907| v1907_11(void) = ExitFunction : +# 1913| Block 2 +# 1913| r1913_1(glval) = VariableAddress[#return] : +# 1913| r1913_2(glval) = VariableAddress[x] : +# 1913| r1913_3(int) = Load[x] : &:r1913_2, m1909_6 +# 1913| m1913_4(int) = Store[#return] : &:r1913_1, r1913_3 +# 1909| r1909_8(glval) = VariableAddress[#return] : +# 1909| v1909_9(void) = ReturnValue : &:r1909_8, m1913_4 +# 1909| v1909_10(void) = AliasedUse : m1909_3 +# 1909| v1909_11(void) = ExitFunction : -# 1914| int static_function(int) -# 1914| Block 0 -# 1914| v1914_1(void) = EnterFunction : -# 1914| m1914_2(unknown) = AliasedDefinition : -# 1914| m1914_3(unknown) = InitializeNonLocal : -# 1914| m1914_4(unknown) = Chi : total:m1914_2, partial:m1914_3 -# 1914| r1914_5(glval) = VariableAddress[x] : -# 1914| m1914_6(int) = InitializeParameter[x] : &:r1914_5 -# 1915| r1915_1(glval) = VariableAddress[#return] : -# 1915| r1915_2(glval) = VariableAddress[x] : -# 1915| r1915_3(int) = Load[x] : &:r1915_2, m1914_6 -# 1915| m1915_4(int) = Store[#return] : &:r1915_1, r1915_3 -# 1914| r1914_7(glval) = VariableAddress[#return] : -# 1914| v1914_8(void) = ReturnValue : &:r1914_7, m1915_4 -# 1914| v1914_9(void) = AliasedUse : m1914_3 -# 1914| v1914_10(void) = ExitFunction : +# 1916| int static_function(int) +# 1916| Block 0 +# 1916| v1916_1(void) = EnterFunction : +# 1916| m1916_2(unknown) = AliasedDefinition : +# 1916| m1916_3(unknown) = InitializeNonLocal : +# 1916| m1916_4(unknown) = Chi : total:m1916_2, partial:m1916_3 +# 1916| r1916_5(glval) = VariableAddress[x] : +# 1916| m1916_6(int) = InitializeParameter[x] : &:r1916_5 +# 1917| r1917_1(glval) = VariableAddress[#return] : +# 1917| r1917_2(glval) = VariableAddress[x] : +# 1917| r1917_3(int) = Load[x] : &:r1917_2, m1916_6 +# 1917| m1917_4(int) = Store[#return] : &:r1917_1, r1917_3 +# 1916| r1916_7(glval) = VariableAddress[#return] : +# 1916| v1916_8(void) = ReturnValue : &:r1916_7, m1917_4 +# 1916| v1916_9(void) = AliasedUse : m1916_3 +# 1916| v1916_10(void) = ExitFunction : -# 1918| void test_static_functions_with_assignments() -# 1918| Block 0 -# 1918| v1918_1(void) = EnterFunction : -# 1918| m1918_2(unknown) = AliasedDefinition : -# 1918| m1918_3(unknown) = InitializeNonLocal : -# 1918| m1918_4(unknown) = Chi : total:m1918_2, partial:m1918_3 -# 1919| r1919_1(glval) = VariableAddress[c] : -# 1919| m1919_2(C) = Uninitialized[c] : &:r1919_1 -# 1919| r1919_3(glval) = FunctionAddress[C] : -# 1919| v1919_4(void) = Call[C] : func:r1919_3, this:r1919_1 -# 1919| m1919_5(unknown) = ^CallSideEffect : ~m1918_4 -# 1919| m1919_6(unknown) = Chi : total:m1918_4, partial:m1919_5 -# 1919| m1919_7(C) = ^IndirectMayWriteSideEffect[-1] : &:r1919_1 -# 1919| m1919_8(C) = Chi : total:m1919_2, partial:m1919_7 -# 1920| r1920_1(glval) = VariableAddress[x] : -# 1920| m1920_2(int) = Uninitialized[x] : &:r1920_1 +# 1920| void test_static_functions_with_assignments() +# 1920| Block 0 +# 1920| v1920_1(void) = EnterFunction : +# 1920| m1920_2(unknown) = AliasedDefinition : +# 1920| m1920_3(unknown) = InitializeNonLocal : +# 1920| m1920_4(unknown) = Chi : total:m1920_2, partial:m1920_3 # 1921| r1921_1(glval) = VariableAddress[c] : -# 1921| r1921_2(glval) = FunctionAddress[StaticMemberFunction] : -# 1921| r1921_3(int) = Constant[10] : -# 1921| r1921_4(int) = Call[StaticMemberFunction] : func:r1921_2, 0:r1921_3 -# 1921| m1921_5(unknown) = ^CallSideEffect : ~m1919_6 -# 1921| m1921_6(unknown) = Chi : total:m1919_6, partial:m1921_5 -# 1921| r1921_7(glval) = VariableAddress[x] : -# 1921| m1921_8(int) = Store[x] : &:r1921_7, r1921_4 -# 1922| r1922_1(glval) = VariableAddress[y] : -# 1922| m1922_2(int) = Uninitialized[y] : &:r1922_1 -# 1923| r1923_1(glval) = FunctionAddress[StaticMemberFunction] : -# 1923| r1923_2(int) = Constant[10] : -# 1923| r1923_3(int) = Call[StaticMemberFunction] : func:r1923_1, 0:r1923_2 -# 1923| m1923_4(unknown) = ^CallSideEffect : ~m1921_6 -# 1923| m1923_5(unknown) = Chi : total:m1921_6, partial:m1923_4 -# 1923| r1923_6(glval) = VariableAddress[y] : -# 1923| m1923_7(int) = Store[y] : &:r1923_6, r1923_3 -# 1924| r1924_1(glval) = VariableAddress[z] : -# 1924| m1924_2(int) = Uninitialized[z] : &:r1924_1 -# 1925| r1925_1(glval) = FunctionAddress[static_function] : +# 1921| m1921_2(C) = Uninitialized[c] : &:r1921_1 +# 1921| r1921_3(glval) = FunctionAddress[C] : +# 1921| v1921_4(void) = Call[C] : func:r1921_3, this:r1921_1 +# 1921| m1921_5(unknown) = ^CallSideEffect : ~m1920_4 +# 1921| m1921_6(unknown) = Chi : total:m1920_4, partial:m1921_5 +# 1921| m1921_7(C) = ^IndirectMayWriteSideEffect[-1] : &:r1921_1 +# 1921| m1921_8(C) = Chi : total:m1921_2, partial:m1921_7 +# 1922| r1922_1(glval) = VariableAddress[x] : +# 1922| m1922_2(int) = Uninitialized[x] : &:r1922_1 +# 1923| r1923_1(glval) = VariableAddress[c] : +# 1923| r1923_2(glval) = FunctionAddress[StaticMemberFunction] : +# 1923| r1923_3(int) = Constant[10] : +# 1923| r1923_4(int) = Call[StaticMemberFunction] : func:r1923_2, 0:r1923_3 +# 1923| m1923_5(unknown) = ^CallSideEffect : ~m1921_6 +# 1923| m1923_6(unknown) = Chi : total:m1921_6, partial:m1923_5 +# 1923| r1923_7(glval) = VariableAddress[x] : +# 1923| m1923_8(int) = Store[x] : &:r1923_7, r1923_4 +# 1924| r1924_1(glval) = VariableAddress[y] : +# 1924| m1924_2(int) = Uninitialized[y] : &:r1924_1 +# 1925| r1925_1(glval) = FunctionAddress[StaticMemberFunction] : # 1925| r1925_2(int) = Constant[10] : -# 1925| r1925_3(int) = Call[static_function] : func:r1925_1, 0:r1925_2 -# 1925| m1925_4(unknown) = ^CallSideEffect : ~m1923_5 -# 1925| m1925_5(unknown) = Chi : total:m1923_5, partial:m1925_4 -# 1925| r1925_6(glval) = VariableAddress[z] : -# 1925| m1925_7(int) = Store[z] : &:r1925_6, r1925_3 -# 1926| v1926_1(void) = NoOp : -# 1918| v1918_5(void) = ReturnVoid : -# 1918| v1918_6(void) = AliasedUse : ~m1925_5 -# 1918| v1918_7(void) = ExitFunction : +# 1925| r1925_3(int) = Call[StaticMemberFunction] : func:r1925_1, 0:r1925_2 +# 1925| m1925_4(unknown) = ^CallSideEffect : ~m1923_6 +# 1925| m1925_5(unknown) = Chi : total:m1923_6, partial:m1925_4 +# 1925| r1925_6(glval) = VariableAddress[y] : +# 1925| m1925_7(int) = Store[y] : &:r1925_6, r1925_3 +# 1926| r1926_1(glval) = VariableAddress[z] : +# 1926| m1926_2(int) = Uninitialized[z] : &:r1926_1 +# 1927| r1927_1(glval) = FunctionAddress[static_function] : +# 1927| r1927_2(int) = Constant[10] : +# 1927| r1927_3(int) = Call[static_function] : func:r1927_1, 0:r1927_2 +# 1927| m1927_4(unknown) = ^CallSideEffect : ~m1925_5 +# 1927| m1927_5(unknown) = Chi : total:m1925_5, partial:m1927_4 +# 1927| r1927_6(glval) = VariableAddress[z] : +# 1927| m1927_7(int) = Store[z] : &:r1927_6, r1927_3 +# 1928| v1928_1(void) = NoOp : +# 1920| v1920_5(void) = ReturnVoid : +# 1920| v1920_6(void) = AliasedUse : ~m1927_5 +# 1920| v1920_7(void) = ExitFunction : -# 1928| void test_double_assign() -# 1928| Block 0 -# 1928| v1928_1(void) = EnterFunction : -# 1928| m1928_2(unknown) = AliasedDefinition : -# 1928| m1928_3(unknown) = InitializeNonLocal : -# 1928| m1928_4(unknown) = Chi : total:m1928_2, partial:m1928_3 -# 1929| r1929_1(glval) = VariableAddress[i] : -# 1929| m1929_2(int) = Uninitialized[i] : &:r1929_1 -# 1929| r1929_3(glval) = VariableAddress[j] : -# 1929| m1929_4(int) = Uninitialized[j] : &:r1929_3 -# 1930| r1930_1(int) = Constant[40] : -# 1930| r1930_2(glval) = VariableAddress[j] : -# 1930| m1930_3(int) = Store[j] : &:r1930_2, r1930_1 -# 1930| r1930_4(int) = Load[j] : &:r1930_2, m1930_3 -# 1930| r1930_5(glval) = VariableAddress[i] : -# 1930| m1930_6(int) = Store[i] : &:r1930_5, r1930_4 -# 1931| v1931_1(void) = NoOp : -# 1928| v1928_5(void) = ReturnVoid : -# 1928| v1928_6(void) = AliasedUse : m1928_3 -# 1928| v1928_7(void) = ExitFunction : +# 1930| void test_double_assign() +# 1930| Block 0 +# 1930| v1930_1(void) = EnterFunction : +# 1930| m1930_2(unknown) = AliasedDefinition : +# 1930| m1930_3(unknown) = InitializeNonLocal : +# 1930| m1930_4(unknown) = Chi : total:m1930_2, partial:m1930_3 +# 1931| r1931_1(glval) = VariableAddress[i] : +# 1931| m1931_2(int) = Uninitialized[i] : &:r1931_1 +# 1931| r1931_3(glval) = VariableAddress[j] : +# 1931| m1931_4(int) = Uninitialized[j] : &:r1931_3 +# 1932| r1932_1(int) = Constant[40] : +# 1932| r1932_2(glval) = VariableAddress[j] : +# 1932| m1932_3(int) = Store[j] : &:r1932_2, r1932_1 +# 1932| r1932_4(int) = Load[j] : &:r1932_2, m1932_3 +# 1932| r1932_5(glval) = VariableAddress[i] : +# 1932| m1932_6(int) = Store[i] : &:r1932_5, r1932_4 +# 1933| v1933_1(void) = NoOp : +# 1930| v1930_5(void) = ReturnVoid : +# 1930| v1930_6(void) = AliasedUse : m1930_3 +# 1930| v1930_7(void) = ExitFunction : -# 1933| void test_assign_with_assign_operation() -# 1933| Block 0 -# 1933| v1933_1(void) = EnterFunction : -# 1933| m1933_2(unknown) = AliasedDefinition : -# 1933| m1933_3(unknown) = InitializeNonLocal : -# 1933| m1933_4(unknown) = Chi : total:m1933_2, partial:m1933_3 -# 1934| r1934_1(glval) = VariableAddress[i] : -# 1934| m1934_2(int) = Uninitialized[i] : &:r1934_1 -# 1934| r1934_3(glval) = VariableAddress[j] : -# 1934| r1934_4(int) = Constant[0] : -# 1934| m1934_5(int) = Store[j] : &:r1934_3, r1934_4 -# 1935| r1935_1(int) = Constant[40] : -# 1935| r1935_2(glval) = VariableAddress[j] : -# 1935| r1935_3(int) = Load[j] : &:r1935_2, m1934_5 -# 1935| r1935_4(int) = Add : r1935_3, r1935_1 -# 1935| m1935_5(int) = Store[j] : &:r1935_2, r1935_4 -# 1935| r1935_6(int) = Load[j] : &:r1935_2, m1935_5 -# 1935| r1935_7(glval) = VariableAddress[i] : -# 1935| m1935_8(int) = Store[i] : &:r1935_7, r1935_6 -# 1936| v1936_1(void) = NoOp : -# 1933| v1933_5(void) = ReturnVoid : -# 1933| v1933_6(void) = AliasedUse : m1933_3 -# 1933| v1933_7(void) = ExitFunction : +# 1935| void test_assign_with_assign_operation() +# 1935| Block 0 +# 1935| v1935_1(void) = EnterFunction : +# 1935| m1935_2(unknown) = AliasedDefinition : +# 1935| m1935_3(unknown) = InitializeNonLocal : +# 1935| m1935_4(unknown) = Chi : total:m1935_2, partial:m1935_3 +# 1936| r1936_1(glval) = VariableAddress[i] : +# 1936| m1936_2(int) = Uninitialized[i] : &:r1936_1 +# 1936| r1936_3(glval) = VariableAddress[j] : +# 1936| r1936_4(int) = Constant[0] : +# 1936| m1936_5(int) = Store[j] : &:r1936_3, r1936_4 +# 1937| r1937_1(int) = Constant[40] : +# 1937| r1937_2(glval) = VariableAddress[j] : +# 1937| r1937_3(int) = Load[j] : &:r1937_2, m1936_5 +# 1937| r1937_4(int) = Add : r1937_3, r1937_1 +# 1937| m1937_5(int) = Store[j] : &:r1937_2, r1937_4 +# 1937| r1937_6(int) = Load[j] : &:r1937_2, m1937_5 +# 1937| r1937_7(glval) = VariableAddress[i] : +# 1937| m1937_8(int) = Store[i] : &:r1937_7, r1937_6 +# 1938| v1938_1(void) = NoOp : +# 1935| v1935_5(void) = ReturnVoid : +# 1935| v1935_6(void) = AliasedUse : m1935_3 +# 1935| v1935_7(void) = ExitFunction : -# 1942| D& D::ReferenceStaticMemberFunction() -# 1942| Block 0 -# 1942| v1942_1(void) = EnterFunction : -# 1942| m1942_2(unknown) = AliasedDefinition : -# 1942| m1942_3(unknown) = InitializeNonLocal : -# 1942| m1942_4(unknown) = Chi : total:m1942_2, partial:m1942_3 -# 1943| r1943_1(glval) = VariableAddress[#return] : -# 1943| r1943_2(glval) = VariableAddress[x] : -# 1943| r1943_3(D &) = CopyValue : r1943_2 -# 1943| m1943_4(D &) = Store[#return] : &:r1943_1, r1943_3 -# 1942| r1942_5(glval) = VariableAddress[#return] : -# 1942| v1942_6(void) = ReturnValue : &:r1942_5, m1943_4 -# 1942| v1942_7(void) = AliasedUse : m1942_3 -# 1942| v1942_8(void) = ExitFunction : +# 1944| D& D::ReferenceStaticMemberFunction() +# 1944| Block 0 +# 1944| v1944_1(void) = EnterFunction : +# 1944| m1944_2(unknown) = AliasedDefinition : +# 1944| m1944_3(unknown) = InitializeNonLocal : +# 1944| m1944_4(unknown) = Chi : total:m1944_2, partial:m1944_3 +# 1945| r1945_1(glval) = VariableAddress[#return] : +# 1945| r1945_2(glval) = VariableAddress[x] : +# 1945| r1945_3(D &) = CopyValue : r1945_2 +# 1945| m1945_4(D &) = Store[#return] : &:r1945_1, r1945_3 +# 1944| r1944_5(glval) = VariableAddress[#return] : +# 1944| v1944_6(void) = ReturnValue : &:r1944_5, m1945_4 +# 1944| v1944_7(void) = AliasedUse : m1944_3 +# 1944| v1944_8(void) = ExitFunction : -# 1945| D D::ObjectStaticMemberFunction() -# 1945| Block 0 -# 1945| v1945_1(void) = EnterFunction : -# 1945| m1945_2(unknown) = AliasedDefinition : -# 1945| m1945_3(unknown) = InitializeNonLocal : -# 1945| m1945_4(unknown) = Chi : total:m1945_2, partial:m1945_3 -# 1946| r1946_1(glval) = VariableAddress[#return] : -# 1946| r1946_2(glval) = VariableAddress[x] : -# 1946| r1946_3(D) = Load[x] : &:r1946_2, ~m1945_3 -# 1946| m1946_4(D) = Store[#return] : &:r1946_1, r1946_3 -# 1945| r1945_5(glval) = VariableAddress[#return] : -# 1945| v1945_6(void) = ReturnValue : &:r1945_5, m1946_4 -# 1945| v1945_7(void) = AliasedUse : m1945_3 -# 1945| v1945_8(void) = ExitFunction : +# 1947| D D::ObjectStaticMemberFunction() +# 1947| Block 0 +# 1947| v1947_1(void) = EnterFunction : +# 1947| m1947_2(unknown) = AliasedDefinition : +# 1947| m1947_3(unknown) = InitializeNonLocal : +# 1947| m1947_4(unknown) = Chi : total:m1947_2, partial:m1947_3 +# 1948| r1948_1(glval) = VariableAddress[#return] : +# 1948| r1948_2(glval) = VariableAddress[x] : +# 1948| r1948_3(D) = Load[x] : &:r1948_2, ~m1947_3 +# 1948| m1948_4(D) = Store[#return] : &:r1948_1, r1948_3 +# 1947| r1947_5(glval) = VariableAddress[#return] : +# 1947| v1947_6(void) = ReturnValue : &:r1947_5, m1948_4 +# 1947| v1947_7(void) = AliasedUse : m1947_3 +# 1947| v1947_8(void) = ExitFunction : -# 1950| void test_static_member_functions_with_reference_return() -# 1950| Block 0 -# 1950| v1950_1(void) = EnterFunction : -# 1950| m1950_2(unknown) = AliasedDefinition : -# 1950| m1950_3(unknown) = InitializeNonLocal : -# 1950| m1950_4(unknown) = Chi : total:m1950_2, partial:m1950_3 -# 1951| r1951_1(glval) = VariableAddress[d] : -# 1951| m1951_2(D) = Uninitialized[d] : &:r1951_1 +# 1952| void test_static_member_functions_with_reference_return() +# 1952| Block 0 +# 1952| v1952_1(void) = EnterFunction : +# 1952| m1952_2(unknown) = AliasedDefinition : +# 1952| m1952_3(unknown) = InitializeNonLocal : +# 1952| m1952_4(unknown) = Chi : total:m1952_2, partial:m1952_3 # 1953| r1953_1(glval) = VariableAddress[d] : -# 1953| r1953_2(glval) = FunctionAddress[ReferenceStaticMemberFunction] : -# 1953| r1953_3(D &) = Call[ReferenceStaticMemberFunction] : func:r1953_2 -# 1953| m1953_4(unknown) = ^CallSideEffect : ~m1950_4 -# 1953| m1953_5(unknown) = Chi : total:m1950_4, partial:m1953_4 -# 1953| r1953_6(glval) = CopyValue : r1953_3 -# 1954| r1954_1(glval) = FunctionAddress[ReferenceStaticMemberFunction] : -# 1954| r1954_2(D &) = Call[ReferenceStaticMemberFunction] : func:r1954_1 -# 1954| m1954_3(unknown) = ^CallSideEffect : ~m1953_5 -# 1954| m1954_4(unknown) = Chi : total:m1953_5, partial:m1954_3 -# 1954| r1954_5(glval) = CopyValue : r1954_2 +# 1953| m1953_2(D) = Uninitialized[d] : &:r1953_1 # 1955| r1955_1(glval) = VariableAddress[d] : -# 1955| r1955_2(glval) = FunctionAddress[ObjectStaticMemberFunction] : -# 1955| r1955_3(D) = Call[ObjectStaticMemberFunction] : func:r1955_2 -# 1955| m1955_4(unknown) = ^CallSideEffect : ~m1954_4 -# 1955| m1955_5(unknown) = Chi : total:m1954_4, partial:m1955_4 -# 1956| r1956_1(glval) = FunctionAddress[ObjectStaticMemberFunction] : -# 1956| r1956_2(D) = Call[ObjectStaticMemberFunction] : func:r1956_1 +# 1955| r1955_2(glval) = FunctionAddress[ReferenceStaticMemberFunction] : +# 1955| r1955_3(D &) = Call[ReferenceStaticMemberFunction] : func:r1955_2 +# 1955| m1955_4(unknown) = ^CallSideEffect : ~m1952_4 +# 1955| m1955_5(unknown) = Chi : total:m1952_4, partial:m1955_4 +# 1955| r1955_6(glval) = CopyValue : r1955_3 +# 1956| r1956_1(glval) = FunctionAddress[ReferenceStaticMemberFunction] : +# 1956| r1956_2(D &) = Call[ReferenceStaticMemberFunction] : func:r1956_1 # 1956| m1956_3(unknown) = ^CallSideEffect : ~m1955_5 # 1956| m1956_4(unknown) = Chi : total:m1955_5, partial:m1956_3 -# 1958| r1958_1(glval) = VariableAddress[x] : -# 1958| m1958_2(D) = Uninitialized[x] : &:r1958_1 -# 1959| r1959_1(glval) = VariableAddress[d] : -# 1959| r1959_2(glval) = FunctionAddress[ReferenceStaticMemberFunction] : -# 1959| r1959_3(D &) = Call[ReferenceStaticMemberFunction] : func:r1959_2 -# 1959| m1959_4(unknown) = ^CallSideEffect : ~m1956_4 -# 1959| m1959_5(unknown) = Chi : total:m1956_4, partial:m1959_4 -# 1959| r1959_6(D) = Load[?] : &:r1959_3, ~m1959_5 -# 1959| r1959_7(glval) = VariableAddress[x] : -# 1959| m1959_8(D) = Store[x] : &:r1959_7, r1959_6 -# 1960| r1960_1(glval) = VariableAddress[y] : -# 1960| m1960_2(D) = Uninitialized[y] : &:r1960_1 -# 1961| r1961_1(glval) = FunctionAddress[ReferenceStaticMemberFunction] : -# 1961| r1961_2(D &) = Call[ReferenceStaticMemberFunction] : func:r1961_1 -# 1961| m1961_3(unknown) = ^CallSideEffect : ~m1959_5 -# 1961| m1961_4(unknown) = Chi : total:m1959_5, partial:m1961_3 -# 1961| r1961_5(D) = Load[?] : &:r1961_2, ~m1961_4 -# 1961| r1961_6(glval) = VariableAddress[y] : -# 1961| m1961_7(D) = Store[y] : &:r1961_6, r1961_5 -# 1962| r1962_1(glval) = VariableAddress[j] : -# 1962| m1962_2(D) = Uninitialized[j] : &:r1962_1 -# 1963| r1963_1(glval) = VariableAddress[d] : -# 1963| r1963_2(glval) = FunctionAddress[ObjectStaticMemberFunction] : -# 1963| r1963_3(D) = Call[ObjectStaticMemberFunction] : func:r1963_2 -# 1963| m1963_4(unknown) = ^CallSideEffect : ~m1961_4 -# 1963| m1963_5(unknown) = Chi : total:m1961_4, partial:m1963_4 -# 1963| r1963_6(glval) = VariableAddress[j] : -# 1963| m1963_7(D) = Store[j] : &:r1963_6, r1963_3 -# 1964| r1964_1(glval) = VariableAddress[k] : -# 1964| m1964_2(D) = Uninitialized[k] : &:r1964_1 -# 1965| r1965_1(glval) = FunctionAddress[ObjectStaticMemberFunction] : -# 1965| r1965_2(D) = Call[ObjectStaticMemberFunction] : func:r1965_1 -# 1965| m1965_3(unknown) = ^CallSideEffect : ~m1963_5 -# 1965| m1965_4(unknown) = Chi : total:m1963_5, partial:m1965_3 -# 1965| r1965_5(glval) = VariableAddress[k] : -# 1965| m1965_6(D) = Store[k] : &:r1965_5, r1965_2 -# 1966| v1966_1(void) = NoOp : -# 1950| v1950_5(void) = ReturnVoid : -# 1950| v1950_6(void) = AliasedUse : ~m1965_4 -# 1950| v1950_7(void) = ExitFunction : +# 1956| r1956_5(glval) = CopyValue : r1956_2 +# 1957| r1957_1(glval) = VariableAddress[d] : +# 1957| r1957_2(glval) = FunctionAddress[ObjectStaticMemberFunction] : +# 1957| r1957_3(D) = Call[ObjectStaticMemberFunction] : func:r1957_2 +# 1957| m1957_4(unknown) = ^CallSideEffect : ~m1956_4 +# 1957| m1957_5(unknown) = Chi : total:m1956_4, partial:m1957_4 +# 1958| r1958_1(glval) = FunctionAddress[ObjectStaticMemberFunction] : +# 1958| r1958_2(D) = Call[ObjectStaticMemberFunction] : func:r1958_1 +# 1958| m1958_3(unknown) = ^CallSideEffect : ~m1957_5 +# 1958| m1958_4(unknown) = Chi : total:m1957_5, partial:m1958_3 +# 1960| r1960_1(glval) = VariableAddress[x] : +# 1960| m1960_2(D) = Uninitialized[x] : &:r1960_1 +# 1961| r1961_1(glval) = VariableAddress[d] : +# 1961| r1961_2(glval) = FunctionAddress[ReferenceStaticMemberFunction] : +# 1961| r1961_3(D &) = Call[ReferenceStaticMemberFunction] : func:r1961_2 +# 1961| m1961_4(unknown) = ^CallSideEffect : ~m1958_4 +# 1961| m1961_5(unknown) = Chi : total:m1958_4, partial:m1961_4 +# 1961| r1961_6(D) = Load[?] : &:r1961_3, ~m1961_5 +# 1961| r1961_7(glval) = VariableAddress[x] : +# 1961| m1961_8(D) = Store[x] : &:r1961_7, r1961_6 +# 1962| r1962_1(glval) = VariableAddress[y] : +# 1962| m1962_2(D) = Uninitialized[y] : &:r1962_1 +# 1963| r1963_1(glval) = FunctionAddress[ReferenceStaticMemberFunction] : +# 1963| r1963_2(D &) = Call[ReferenceStaticMemberFunction] : func:r1963_1 +# 1963| m1963_3(unknown) = ^CallSideEffect : ~m1961_5 +# 1963| m1963_4(unknown) = Chi : total:m1961_5, partial:m1963_3 +# 1963| r1963_5(D) = Load[?] : &:r1963_2, ~m1963_4 +# 1963| r1963_6(glval) = VariableAddress[y] : +# 1963| m1963_7(D) = Store[y] : &:r1963_6, r1963_5 +# 1964| r1964_1(glval) = VariableAddress[j] : +# 1964| m1964_2(D) = Uninitialized[j] : &:r1964_1 +# 1965| r1965_1(glval) = VariableAddress[d] : +# 1965| r1965_2(glval) = FunctionAddress[ObjectStaticMemberFunction] : +# 1965| r1965_3(D) = Call[ObjectStaticMemberFunction] : func:r1965_2 +# 1965| m1965_4(unknown) = ^CallSideEffect : ~m1963_4 +# 1965| m1965_5(unknown) = Chi : total:m1963_4, partial:m1965_4 +# 1965| r1965_6(glval) = VariableAddress[j] : +# 1965| m1965_7(D) = Store[j] : &:r1965_6, r1965_3 +# 1966| r1966_1(glval) = VariableAddress[k] : +# 1966| m1966_2(D) = Uninitialized[k] : &:r1966_1 +# 1967| r1967_1(glval) = FunctionAddress[ObjectStaticMemberFunction] : +# 1967| r1967_2(D) = Call[ObjectStaticMemberFunction] : func:r1967_1 +# 1967| m1967_3(unknown) = ^CallSideEffect : ~m1965_5 +# 1967| m1967_4(unknown) = Chi : total:m1965_5, partial:m1967_3 +# 1967| r1967_5(glval) = VariableAddress[k] : +# 1967| m1967_6(D) = Store[k] : &:r1967_5, r1967_2 +# 1968| v1968_1(void) = NoOp : +# 1952| v1952_5(void) = ReturnVoid : +# 1952| v1952_6(void) = AliasedUse : ~m1967_4 +# 1952| v1952_7(void) = ExitFunction : -# 1968| void test_volatile() -# 1968| Block 0 -# 1968| v1968_1(void) = EnterFunction : -# 1968| m1968_2(unknown) = AliasedDefinition : -# 1968| m1968_3(unknown) = InitializeNonLocal : -# 1968| m1968_4(unknown) = Chi : total:m1968_2, partial:m1968_3 -# 1969| r1969_1(glval) = VariableAddress[x] : -# 1969| m1969_2(int) = Uninitialized[x] : &:r1969_1 -# 1970| r1970_1(glval) = VariableAddress[x] : -# 1970| r1970_2(int) = Load[x] : &:r1970_1, m1969_2 -# 1971| v1971_1(void) = NoOp : -# 1968| v1968_5(void) = ReturnVoid : -# 1968| v1968_6(void) = AliasedUse : m1968_3 -# 1968| v1968_7(void) = ExitFunction : +# 1970| void test_volatile() +# 1970| Block 0 +# 1970| v1970_1(void) = EnterFunction : +# 1970| m1970_2(unknown) = AliasedDefinition : +# 1970| m1970_3(unknown) = InitializeNonLocal : +# 1970| m1970_4(unknown) = Chi : total:m1970_2, partial:m1970_3 +# 1971| r1971_1(glval) = VariableAddress[x] : +# 1971| m1971_2(int) = Uninitialized[x] : &:r1971_1 +# 1972| r1972_1(glval) = VariableAddress[x] : +# 1972| r1972_2(int) = Load[x] : &:r1972_1, m1971_2 +# 1973| v1973_1(void) = NoOp : +# 1970| v1970_5(void) = ReturnVoid : +# 1970| v1970_6(void) = AliasedUse : m1970_3 +# 1970| v1970_7(void) = ExitFunction : -# 1979| void value_category_test() -# 1979| Block 0 -# 1979| v1979_1(void) = EnterFunction : -# 1979| m1979_2(unknown) = AliasedDefinition : -# 1979| m1979_3(unknown) = InitializeNonLocal : -# 1979| m1979_4(unknown) = Chi : total:m1979_2, partial:m1979_3 -# 1980| r1980_1(glval) = VariableAddress[c] : -# 1980| m1980_2(ValCat) = Uninitialized[c] : &:r1980_1 +# 1981| void value_category_test() +# 1981| Block 0 +# 1981| v1981_1(void) = EnterFunction : +# 1981| m1981_2(unknown) = AliasedDefinition : +# 1981| m1981_3(unknown) = InitializeNonLocal : +# 1981| m1981_4(unknown) = Chi : total:m1981_2, partial:m1981_3 +# 1982| r1982_1(glval) = VariableAddress[c] : +# 1982| m1982_2(ValCat) = Uninitialized[c] : &:r1982_1 #-----| r0_1(glval) = VariableAddress[#temp0:0] : #-----| m0_2(ValCat) = Uninitialized[#temp0:0] : &:r0_1 #-----| r0_3(ValCat) = Load[#temp0:0] : &:r0_1, m0_2 -# 1982| r1982_1(glval) = VariableAddress[c] : -# 1982| r1982_2(glval) = FunctionAddress[lvalue] : -# 1982| r1982_3(ValCat &) = Call[lvalue] : func:r1982_2 -# 1982| m1982_4(unknown) = ^CallSideEffect : ~m1979_4 -# 1982| m1982_5(unknown) = Chi : total:m1979_4, partial:m1982_4 -# 1982| r1982_6(glval) = CopyValue : r1982_3 -# 1982| m1982_7(ValCat) = Store[?] : &:r1982_6, r0_3 -# 1982| m1982_8(unknown) = Chi : total:m1982_5, partial:m1982_7 +# 1984| r1984_1(glval) = VariableAddress[c] : +# 1984| r1984_2(glval) = FunctionAddress[lvalue] : +# 1984| r1984_3(ValCat &) = Call[lvalue] : func:r1984_2 +# 1984| m1984_4(unknown) = ^CallSideEffect : ~m1981_4 +# 1984| m1984_5(unknown) = Chi : total:m1981_4, partial:m1984_4 +# 1984| r1984_6(glval) = CopyValue : r1984_3 +# 1984| m1984_7(ValCat) = Store[?] : &:r1984_6, r0_3 +# 1984| m1984_8(unknown) = Chi : total:m1984_5, partial:m1984_7 #-----| r0_4(glval) = VariableAddress[#temp0:0] : #-----| m0_5(ValCat) = Uninitialized[#temp0:0] : &:r0_4 #-----| r0_6(ValCat) = Load[#temp0:0] : &:r0_4, m0_5 -# 1983| r1983_1(glval) = VariableAddress[c] : -# 1983| r1983_2(glval) = FunctionAddress[xvalue] : -# 1983| r1983_3(ValCat &&) = Call[xvalue] : func:r1983_2 -# 1983| m1983_4(unknown) = ^CallSideEffect : ~m1982_8 -# 1983| m1983_5(unknown) = Chi : total:m1982_8, partial:m1983_4 -# 1983| r1983_6(glval) = CopyValue : r1983_3 -# 1983| m1983_7(ValCat) = Store[?] : &:r1983_6, r0_6 -# 1983| m1983_8(unknown) = Chi : total:m1983_5, partial:m1983_7 +# 1985| r1985_1(glval) = VariableAddress[c] : +# 1985| r1985_2(glval) = FunctionAddress[xvalue] : +# 1985| r1985_3(ValCat &&) = Call[xvalue] : func:r1985_2 +# 1985| m1985_4(unknown) = ^CallSideEffect : ~m1984_8 +# 1985| m1985_5(unknown) = Chi : total:m1984_8, partial:m1985_4 +# 1985| r1985_6(glval) = CopyValue : r1985_3 +# 1985| m1985_7(ValCat) = Store[?] : &:r1985_6, r0_6 +# 1985| m1985_8(unknown) = Chi : total:m1985_5, partial:m1985_7 #-----| r0_7(glval) = VariableAddress[#temp0:0] : #-----| m0_8(ValCat) = Uninitialized[#temp0:0] : &:r0_7 #-----| r0_9(ValCat) = Load[#temp0:0] : &:r0_7, m0_8 -# 1984| r1984_1(glval) = VariableAddress[#temp1984:5] : -# 1984| r1984_2(glval) = VariableAddress[c] : -# 1984| r1984_3(glval) = FunctionAddress[prvalue] : -# 1984| r1984_4(ValCat) = Call[prvalue] : func:r1984_3 -# 1984| m1984_5(unknown) = ^CallSideEffect : ~m1983_8 -# 1984| m1984_6(unknown) = Chi : total:m1983_8, partial:m1984_5 -# 1984| m1984_7(ValCat) = Store[#temp1984:5] : &:r1984_1, r1984_4 -# 1984| m1984_8(ValCat) = Store[#temp1984:5] : &:r1984_1, r0_9 +# 1986| r1986_1(glval) = VariableAddress[#temp1986:5] : +# 1986| r1986_2(glval) = VariableAddress[c] : +# 1986| r1986_3(glval) = FunctionAddress[prvalue] : +# 1986| r1986_4(ValCat) = Call[prvalue] : func:r1986_3 +# 1986| m1986_5(unknown) = ^CallSideEffect : ~m1985_8 +# 1986| m1986_6(unknown) = Chi : total:m1985_8, partial:m1986_5 +# 1986| m1986_7(ValCat) = Store[#temp1986:5] : &:r1986_1, r1986_4 +# 1986| m1986_8(ValCat) = Store[#temp1986:5] : &:r1986_1, r0_9 #-----| r0_10(glval) = VariableAddress[#temp0:0] : #-----| m0_11(ValCat) = Uninitialized[#temp0:0] : &:r0_10 #-----| r0_12(ValCat) = Load[#temp0:0] : &:r0_10, m0_11 -# 1985| r1985_1(glval) = FunctionAddress[lvalue] : -# 1985| r1985_2(ValCat &) = Call[lvalue] : func:r1985_1 -# 1985| m1985_3(unknown) = ^CallSideEffect : ~m1984_6 -# 1985| m1985_4(unknown) = Chi : total:m1984_6, partial:m1985_3 -# 1985| r1985_5(glval) = CopyValue : r1985_2 -# 1985| m1985_6(ValCat) = Store[?] : &:r1985_5, r0_12 -# 1985| m1985_7(unknown) = Chi : total:m1985_4, partial:m1985_6 +# 1987| r1987_1(glval) = FunctionAddress[lvalue] : +# 1987| r1987_2(ValCat &) = Call[lvalue] : func:r1987_1 +# 1987| m1987_3(unknown) = ^CallSideEffect : ~m1986_6 +# 1987| m1987_4(unknown) = Chi : total:m1986_6, partial:m1987_3 +# 1987| r1987_5(glval) = CopyValue : r1987_2 +# 1987| m1987_6(ValCat) = Store[?] : &:r1987_5, r0_12 +# 1987| m1987_7(unknown) = Chi : total:m1987_4, partial:m1987_6 #-----| r0_13(glval) = VariableAddress[#temp0:0] : #-----| m0_14(ValCat) = Uninitialized[#temp0:0] : &:r0_13 #-----| r0_15(ValCat) = Load[#temp0:0] : &:r0_13, m0_14 -# 1986| r1986_1(glval) = FunctionAddress[xvalue] : -# 1986| r1986_2(ValCat &&) = Call[xvalue] : func:r1986_1 -# 1986| m1986_3(unknown) = ^CallSideEffect : ~m1985_7 -# 1986| m1986_4(unknown) = Chi : total:m1985_7, partial:m1986_3 -# 1986| r1986_5(glval) = CopyValue : r1986_2 -# 1986| m1986_6(ValCat) = Store[?] : &:r1986_5, r0_15 -# 1986| m1986_7(unknown) = Chi : total:m1986_4, partial:m1986_6 +# 1988| r1988_1(glval) = FunctionAddress[xvalue] : +# 1988| r1988_2(ValCat &&) = Call[xvalue] : func:r1988_1 +# 1988| m1988_3(unknown) = ^CallSideEffect : ~m1987_7 +# 1988| m1988_4(unknown) = Chi : total:m1987_7, partial:m1988_3 +# 1988| r1988_5(glval) = CopyValue : r1988_2 +# 1988| m1988_6(ValCat) = Store[?] : &:r1988_5, r0_15 +# 1988| m1988_7(unknown) = Chi : total:m1988_4, partial:m1988_6 #-----| r0_16(glval) = VariableAddress[#temp0:0] : #-----| m0_17(ValCat) = Uninitialized[#temp0:0] : &:r0_16 #-----| r0_18(ValCat) = Load[#temp0:0] : &:r0_16, m0_17 -# 1987| r1987_1(glval) = VariableAddress[#temp1987:5] : -# 1987| r1987_2(glval) = FunctionAddress[prvalue] : -# 1987| r1987_3(ValCat) = Call[prvalue] : func:r1987_2 -# 1987| m1987_4(unknown) = ^CallSideEffect : ~m1986_7 -# 1987| m1987_5(unknown) = Chi : total:m1986_7, partial:m1987_4 -# 1987| m1987_6(ValCat) = Store[#temp1987:5] : &:r1987_1, r1987_3 -# 1987| m1987_7(ValCat) = Store[#temp1987:5] : &:r1987_1, r0_18 -# 1988| v1988_1(void) = NoOp : -# 1979| v1979_5(void) = ReturnVoid : -# 1979| v1979_6(void) = AliasedUse : ~m1987_5 -# 1979| v1979_7(void) = ExitFunction : +# 1989| r1989_1(glval) = VariableAddress[#temp1989:5] : +# 1989| r1989_2(glval) = FunctionAddress[prvalue] : +# 1989| r1989_3(ValCat) = Call[prvalue] : func:r1989_2 +# 1989| m1989_4(unknown) = ^CallSideEffect : ~m1988_7 +# 1989| m1989_5(unknown) = Chi : total:m1988_7, partial:m1989_4 +# 1989| m1989_6(ValCat) = Store[#temp1989:5] : &:r1989_1, r1989_3 +# 1989| m1989_7(ValCat) = Store[#temp1989:5] : &:r1989_1, r0_18 +# 1990| v1990_1(void) = NoOp : +# 1981| v1981_5(void) = ReturnVoid : +# 1981| v1981_6(void) = AliasedUse : ~m1989_5 +# 1981| v1981_7(void) = ExitFunction : -# 1990| void SetStaticFuncPtr() -# 1990| Block 0 -# 1990| v1990_1(void) = EnterFunction : -# 1990| m1990_2(unknown) = AliasedDefinition : -# 1990| m1990_3(unknown) = InitializeNonLocal : -# 1990| m1990_4(unknown) = Chi : total:m1990_2, partial:m1990_3 -# 1991| r1991_1(glval) = VariableAddress[c] : -# 1991| m1991_2(C) = Uninitialized[c] : &:r1991_1 -# 1991| r1991_3(glval) = FunctionAddress[C] : -# 1991| v1991_4(void) = Call[C] : func:r1991_3, this:r1991_1 -# 1991| m1991_5(unknown) = ^CallSideEffect : ~m1990_4 -# 1991| m1991_6(unknown) = Chi : total:m1990_4, partial:m1991_5 -# 1991| m1991_7(C) = ^IndirectMayWriteSideEffect[-1] : &:r1991_1 -# 1991| m1991_8(C) = Chi : total:m1991_2, partial:m1991_7 -# 1992| r1992_1(glval<..(*)(..)>) = VariableAddress[pfn] : -# 1992| r1992_2(..(*)(..)) = FunctionAddress[StaticMemberFunction] : -# 1992| m1992_3(..(*)(..)) = Store[pfn] : &:r1992_1, r1992_2 +# 1992| void SetStaticFuncPtr() +# 1992| Block 0 +# 1992| v1992_1(void) = EnterFunction : +# 1992| m1992_2(unknown) = AliasedDefinition : +# 1992| m1992_3(unknown) = InitializeNonLocal : +# 1992| m1992_4(unknown) = Chi : total:m1992_2, partial:m1992_3 # 1993| r1993_1(glval) = VariableAddress[c] : -# 1993| r1993_2(..(*)(..)) = FunctionAddress[StaticMemberFunction] : -# 1993| r1993_3(glval<..(*)(..)>) = VariableAddress[pfn] : -# 1993| m1993_4(..(*)(..)) = Store[pfn] : &:r1993_3, r1993_2 -# 1994| v1994_1(void) = NoOp : -# 1990| v1990_5(void) = ReturnVoid : -# 1990| v1990_6(void) = AliasedUse : ~m1991_6 -# 1990| v1990_7(void) = ExitFunction : +# 1993| m1993_2(C) = Uninitialized[c] : &:r1993_1 +# 1993| r1993_3(glval) = FunctionAddress[C] : +# 1993| v1993_4(void) = Call[C] : func:r1993_3, this:r1993_1 +# 1993| m1993_5(unknown) = ^CallSideEffect : ~m1992_4 +# 1993| m1993_6(unknown) = Chi : total:m1992_4, partial:m1993_5 +# 1993| m1993_7(C) = ^IndirectMayWriteSideEffect[-1] : &:r1993_1 +# 1993| m1993_8(C) = Chi : total:m1993_2, partial:m1993_7 +# 1994| r1994_1(glval<..(*)(..)>) = VariableAddress[pfn] : +# 1994| r1994_2(..(*)(..)) = FunctionAddress[StaticMemberFunction] : +# 1994| m1994_3(..(*)(..)) = Store[pfn] : &:r1994_1, r1994_2 +# 1995| r1995_1(glval) = VariableAddress[c] : +# 1995| r1995_2(..(*)(..)) = FunctionAddress[StaticMemberFunction] : +# 1995| r1995_3(glval<..(*)(..)>) = VariableAddress[pfn] : +# 1995| m1995_4(..(*)(..)) = Store[pfn] : &:r1995_3, r1995_2 +# 1996| v1996_1(void) = NoOp : +# 1992| v1992_5(void) = ReturnVoid : +# 1992| v1992_6(void) = AliasedUse : ~m1993_6 +# 1992| v1992_7(void) = ExitFunction : -# 1996| void TernaryTestInt(bool, int, int, int) -# 1996| Block 0 -# 1996| v1996_1(void) = EnterFunction : -# 1996| m1996_2(unknown) = AliasedDefinition : -# 1996| m1996_3(unknown) = InitializeNonLocal : -# 1996| m1996_4(unknown) = Chi : total:m1996_2, partial:m1996_3 -# 1996| r1996_5(glval) = VariableAddress[a] : -# 1996| m1996_6(bool) = InitializeParameter[a] : &:r1996_5 -# 1996| r1996_7(glval) = VariableAddress[x] : -# 1996| m1996_8(int) = InitializeParameter[x] : &:r1996_7 -# 1996| r1996_9(glval) = VariableAddress[y] : -# 1996| m1996_10(int) = InitializeParameter[y] : &:r1996_9 -# 1996| r1996_11(glval) = VariableAddress[z] : -# 1996| m1996_12(int) = InitializeParameter[z] : &:r1996_11 -# 1997| r1997_1(glval) = VariableAddress[a] : -# 1997| r1997_2(bool) = Load[a] : &:r1997_1, m1996_6 -# 1997| v1997_3(void) = ConditionalBranch : r1997_2 +# 1998| void TernaryTestInt(bool, int, int, int) +# 1998| Block 0 +# 1998| v1998_1(void) = EnterFunction : +# 1998| m1998_2(unknown) = AliasedDefinition : +# 1998| m1998_3(unknown) = InitializeNonLocal : +# 1998| m1998_4(unknown) = Chi : total:m1998_2, partial:m1998_3 +# 1998| r1998_5(glval) = VariableAddress[a] : +# 1998| m1998_6(bool) = InitializeParameter[a] : &:r1998_5 +# 1998| r1998_7(glval) = VariableAddress[x] : +# 1998| m1998_8(int) = InitializeParameter[x] : &:r1998_7 +# 1998| r1998_9(glval) = VariableAddress[y] : +# 1998| m1998_10(int) = InitializeParameter[y] : &:r1998_9 +# 1998| r1998_11(glval) = VariableAddress[z] : +# 1998| m1998_12(int) = InitializeParameter[z] : &:r1998_11 +# 1999| r1999_1(glval) = VariableAddress[a] : +# 1999| r1999_2(bool) = Load[a] : &:r1999_1, m1998_6 +# 1999| v1999_3(void) = ConditionalBranch : r1999_2 #-----| False -> Block 3 #-----| True -> Block 2 -# 1997| Block 1 -# 1997| m1997_4(int) = Phi : from 2:m1997_12, from 3:m1997_16 -# 1997| r1997_5(glval) = VariableAddress[#temp1997:9] : -# 1997| r1997_6(int) = Load[#temp1997:9] : &:r1997_5, m1997_4 -# 1997| r1997_7(glval) = VariableAddress[z] : -# 1997| m1997_8(int) = Store[z] : &:r1997_7, r1997_6 -# 1998| r1998_1(glval) = VariableAddress[a] : -# 1998| r1998_2(bool) = Load[a] : &:r1998_1, m1996_6 -# 1998| v1998_3(void) = ConditionalBranch : r1998_2 -#-----| False -> Block 6 -#-----| True -> Block 5 - -# 1997| Block 2 -# 1997| r1997_9(glval) = VariableAddress[x] : -# 1997| r1997_10(int) = Load[x] : &:r1997_9, m1996_8 -# 1997| r1997_11(glval) = VariableAddress[#temp1997:9] : -# 1997| m1997_12(int) = Store[#temp1997:9] : &:r1997_11, r1997_10 -#-----| Goto -> Block 1 - -# 1997| Block 3 -# 1997| r1997_13(glval) = VariableAddress[y] : -# 1997| r1997_14(int) = Load[y] : &:r1997_13, m1996_10 -# 1997| r1997_15(glval) = VariableAddress[#temp1997:9] : -# 1997| m1997_16(int) = Store[#temp1997:9] : &:r1997_15, r1997_14 -#-----| Goto -> Block 1 - -# 1998| Block 4 -# 1998| m1998_4(int) = Phi : from 5:m1998_12, from 6:m1998_15 -# 1998| r1998_5(glval) = VariableAddress[#temp1998:9] : -# 1998| r1998_6(int) = Load[#temp1998:9] : &:r1998_5, m1998_4 -# 1998| r1998_7(glval) = VariableAddress[z] : -# 1998| m1998_8(int) = Store[z] : &:r1998_7, r1998_6 -# 1999| r1999_1(glval) = VariableAddress[a] : -# 1999| r1999_2(bool) = Load[a] : &:r1999_1, m1996_6 -# 1999| v1999_3(void) = ConditionalBranch : r1999_2 -#-----| False -> Block 9 -#-----| True -> Block 8 - -# 1998| Block 5 -# 1998| r1998_9(glval) = VariableAddress[x] : -# 1998| r1998_10(int) = Load[x] : &:r1998_9, m1996_8 -# 1998| r1998_11(glval) = VariableAddress[#temp1998:9] : -# 1998| m1998_12(int) = Store[#temp1998:9] : &:r1998_11, r1998_10 -#-----| Goto -> Block 4 - -# 1998| Block 6 -# 1998| r1998_13(int) = Constant[5] : -# 1998| r1998_14(glval) = VariableAddress[#temp1998:9] : -# 1998| m1998_15(int) = Store[#temp1998:9] : &:r1998_14, r1998_13 -#-----| Goto -> Block 4 - -# 1999| Block 7 -# 1999| m1999_4(int) = Phi : from 8:m1999_11, from 9:m1999_14 +# 1999| Block 1 +# 1999| m1999_4(int) = Phi : from 2:m1999_12, from 3:m1999_16 # 1999| r1999_5(glval) = VariableAddress[#temp1999:9] : # 1999| r1999_6(int) = Load[#temp1999:9] : &:r1999_5, m1999_4 # 1999| r1999_7(glval) = VariableAddress[z] : # 1999| m1999_8(int) = Store[z] : &:r1999_7, r1999_6 -# 2000| r2000_1(int) = Constant[7] : -# 2000| r2000_2(glval) = VariableAddress[a] : -# 2000| r2000_3(bool) = Load[a] : &:r2000_2, m1996_6 -# 2000| v2000_4(void) = ConditionalBranch : r2000_3 -#-----| False -> Block 12 -#-----| True -> Block 11 - -# 1999| Block 8 -# 1999| r1999_9(int) = Constant[3] : -# 1999| r1999_10(glval) = VariableAddress[#temp1999:9] : -# 1999| m1999_11(int) = Store[#temp1999:9] : &:r1999_10, r1999_9 -#-----| Goto -> Block 7 - -# 1999| Block 9 -# 1999| r1999_12(int) = Constant[5] : -# 1999| r1999_13(glval) = VariableAddress[#temp1999:9] : -# 1999| m1999_14(int) = Store[#temp1999:9] : &:r1999_13, r1999_12 -#-----| Goto -> Block 7 - -# 2000| Block 10 -# 2000| m2000_5(glval) = Phi : from 11:m2000_12, from 12:m2000_15 -# 2000| r2000_6(glval) = VariableAddress[#temp2000:6] : -# 2000| r2000_7(glval) = Load[#temp2000:6] : &:r2000_6, m2000_5 -# 2000| m2000_8(int) = Store[?] : &:r2000_7, r2000_1 -# 2000| m2000_9(unknown) = Chi : total:m1996_4, partial:m2000_8 -# 2001| v2001_1(void) = NoOp : -# 1996| v1996_13(void) = ReturnVoid : -# 1996| v1996_14(void) = AliasedUse : ~m2000_9 -# 1996| v1996_15(void) = ExitFunction : - -# 2000| Block 11 -# 2000| r2000_10(glval) = VariableAddress[x] : -# 2000| r2000_11(glval) = VariableAddress[#temp2000:6] : -# 2000| m2000_12(glval) = Store[#temp2000:6] : &:r2000_11, r2000_10 -#-----| Goto -> Block 10 - -# 2000| Block 12 -# 2000| r2000_13(glval) = VariableAddress[y] : -# 2000| r2000_14(glval) = VariableAddress[#temp2000:6] : -# 2000| m2000_15(glval) = Store[#temp2000:6] : &:r2000_14, r2000_13 -#-----| Goto -> Block 10 - -# 2006| void TernaryTestPodObj(bool, TernaryPodObj, TernaryPodObj, TernaryPodObj) -# 2006| Block 0 -# 2006| v2006_1(void) = EnterFunction : -# 2006| m2006_2(unknown) = AliasedDefinition : -# 2006| m2006_3(unknown) = InitializeNonLocal : -# 2006| m2006_4(unknown) = Chi : total:m2006_2, partial:m2006_3 -# 2006| r2006_5(glval) = VariableAddress[a] : -# 2006| m2006_6(bool) = InitializeParameter[a] : &:r2006_5 -# 2006| r2006_7(glval) = VariableAddress[x] : -# 2006| m2006_8(TernaryPodObj) = InitializeParameter[x] : &:r2006_7 -# 2006| r2006_9(glval) = VariableAddress[y] : -# 2006| m2006_10(TernaryPodObj) = InitializeParameter[y] : &:r2006_9 -# 2006| r2006_11(glval) = VariableAddress[z] : -# 2006| m2006_12(TernaryPodObj) = InitializeParameter[z] : &:r2006_11 -# 2007| r2007_1(glval) = VariableAddress[a] : -# 2007| r2007_2(bool) = Load[a] : &:r2007_1, m2006_6 -# 2007| v2007_3(void) = ConditionalBranch : r2007_2 -#-----| False -> Block 3 -#-----| True -> Block 2 - -# 2007| Block 1 -# 2007| m2007_4(TernaryPodObj) = Phi : from 2:m2007_12, from 3:m2007_16 -# 2007| r2007_5(glval) = VariableAddress[#temp2007:9] : -# 2007| r2007_6(TernaryPodObj) = Load[#temp2007:9] : &:r2007_5, m2007_4 -# 2007| r2007_7(glval) = VariableAddress[z] : -# 2007| m2007_8(TernaryPodObj) = Store[z] : &:r2007_7, r2007_6 -# 2008| r2008_1(glval) = VariableAddress[#temp2008:9] : -# 2008| r2008_2(glval) = VariableAddress[a] : -# 2008| r2008_3(bool) = Load[a] : &:r2008_2, m2006_6 -# 2008| v2008_4(void) = ConditionalBranch : r2008_3 +# 2000| r2000_1(glval) = VariableAddress[a] : +# 2000| r2000_2(bool) = Load[a] : &:r2000_1, m1998_6 +# 2000| v2000_3(void) = ConditionalBranch : r2000_2 #-----| False -> Block 6 #-----| True -> Block 5 -# 2007| Block 2 -# 2007| r2007_9(glval) = VariableAddress[x] : -# 2007| r2007_10(TernaryPodObj) = Load[x] : &:r2007_9, m2006_8 -# 2007| r2007_11(glval) = VariableAddress[#temp2007:9] : -# 2007| m2007_12(TernaryPodObj) = Store[#temp2007:9] : &:r2007_11, r2007_10 +# 1999| Block 2 +# 1999| r1999_9(glval) = VariableAddress[x] : +# 1999| r1999_10(int) = Load[x] : &:r1999_9, m1998_8 +# 1999| r1999_11(glval) = VariableAddress[#temp1999:9] : +# 1999| m1999_12(int) = Store[#temp1999:9] : &:r1999_11, r1999_10 #-----| Goto -> Block 1 -# 2007| Block 3 -# 2007| r2007_13(glval) = VariableAddress[y] : -# 2007| r2007_14(TernaryPodObj) = Load[y] : &:r2007_13, m2006_10 -# 2007| r2007_15(glval) = VariableAddress[#temp2007:9] : -# 2007| m2007_16(TernaryPodObj) = Store[#temp2007:9] : &:r2007_15, r2007_14 +# 1999| Block 3 +# 1999| r1999_13(glval) = VariableAddress[y] : +# 1999| r1999_14(int) = Load[y] : &:r1999_13, m1998_10 +# 1999| r1999_15(glval) = VariableAddress[#temp1999:9] : +# 1999| m1999_16(int) = Store[#temp1999:9] : &:r1999_15, r1999_14 #-----| Goto -> Block 1 -# 2008| Block 4 -# 2008| m2008_5(TernaryPodObj) = Phi : from 5:m2008_18, from 6:m2008_24 -# 2008| r2008_6(glval) = VariableAddress[#temp2008:9] : -# 2008| r2008_7(TernaryPodObj) = Load[#temp2008:9] : &:r2008_6, m2008_5 -# 2008| m2008_8(TernaryPodObj) = Store[#temp2008:9] : &:r2008_1, r2008_7 -# 2008| r2008_9(TernaryPodObj) = Load[#temp2008:9] : &:r2008_1, m2008_8 -# 2008| r2008_10(glval) = VariableAddress[z] : -# 2008| m2008_11(TernaryPodObj) = Store[z] : &:r2008_10, r2008_9 -# 2009| r2009_1(glval) = VariableAddress[#temp2009:9] : -# 2009| r2009_2(glval) = VariableAddress[a] : -# 2009| r2009_3(bool) = Load[a] : &:r2009_2, m2006_6 -# 2009| v2009_4(void) = ConditionalBranch : r2009_3 +# 2000| Block 4 +# 2000| m2000_4(int) = Phi : from 5:m2000_12, from 6:m2000_15 +# 2000| r2000_5(glval) = VariableAddress[#temp2000:9] : +# 2000| r2000_6(int) = Load[#temp2000:9] : &:r2000_5, m2000_4 +# 2000| r2000_7(glval) = VariableAddress[z] : +# 2000| m2000_8(int) = Store[z] : &:r2000_7, r2000_6 +# 2001| r2001_1(glval) = VariableAddress[a] : +# 2001| r2001_2(bool) = Load[a] : &:r2001_1, m1998_6 +# 2001| v2001_3(void) = ConditionalBranch : r2001_2 #-----| False -> Block 9 #-----| True -> Block 8 -# 2008| Block 5 -# 2008| r2008_12(glval) = VariableAddress[#temp2008:13] : -# 2008| r2008_13(glval) = VariableAddress[x] : -# 2008| r2008_14(TernaryPodObj) = Load[x] : &:r2008_13, m2006_8 -# 2008| m2008_15(TernaryPodObj) = Store[#temp2008:13] : &:r2008_12, r2008_14 -# 2008| r2008_16(TernaryPodObj) = Load[#temp2008:13] : &:r2008_12, m2008_15 -# 2008| r2008_17(glval) = VariableAddress[#temp2008:9] : -# 2008| m2008_18(TernaryPodObj) = Store[#temp2008:9] : &:r2008_17, r2008_16 +# 2000| Block 5 +# 2000| r2000_9(glval) = VariableAddress[x] : +# 2000| r2000_10(int) = Load[x] : &:r2000_9, m1998_8 +# 2000| r2000_11(glval) = VariableAddress[#temp2000:9] : +# 2000| m2000_12(int) = Store[#temp2000:9] : &:r2000_11, r2000_10 #-----| Goto -> Block 4 -# 2008| Block 6 -# 2008| r2008_19(glval) = VariableAddress[#temp2008:17] : -# 2008| r2008_20(TernaryPodObj) = Constant[0] : -# 2008| m2008_21(TernaryPodObj) = Store[#temp2008:17] : &:r2008_19, r2008_20 -# 2008| r2008_22(TernaryPodObj) = Load[#temp2008:17] : &:r2008_19, m2008_21 -# 2008| r2008_23(glval) = VariableAddress[#temp2008:9] : -# 2008| m2008_24(TernaryPodObj) = Store[#temp2008:9] : &:r2008_23, r2008_22 +# 2000| Block 6 +# 2000| r2000_13(int) = Constant[5] : +# 2000| r2000_14(glval) = VariableAddress[#temp2000:9] : +# 2000| m2000_15(int) = Store[#temp2000:9] : &:r2000_14, r2000_13 #-----| Goto -> Block 4 -# 2009| Block 7 -# 2009| m2009_5(TernaryPodObj) = Phi : from 8:m2009_17, from 9:m2009_23 -# 2009| r2009_6(glval) = VariableAddress[#temp2009:9] : -# 2009| r2009_7(TernaryPodObj) = Load[#temp2009:9] : &:r2009_6, m2009_5 -# 2009| m2009_8(TernaryPodObj) = Store[#temp2009:9] : &:r2009_1, r2009_7 -# 2009| r2009_9(TernaryPodObj) = Load[#temp2009:9] : &:r2009_1, m2009_8 -# 2009| r2009_10(glval) = VariableAddress[z] : -# 2009| m2009_11(TernaryPodObj) = Store[z] : &:r2009_10, r2009_9 -# 2010| r2010_1(glval) = VariableAddress[#temp2010:23] : -# 2010| r2010_2(TernaryPodObj) = Constant[0] : -# 2010| m2010_3(TernaryPodObj) = Store[#temp2010:23] : &:r2010_1, r2010_2 -# 2010| r2010_4(TernaryPodObj) = Load[#temp2010:23] : &:r2010_1, m2010_3 -# 2010| r2010_5(glval) = VariableAddress[a] : -# 2010| r2010_6(bool) = Load[a] : &:r2010_5, m2006_6 -# 2010| v2010_7(void) = ConditionalBranch : r2010_6 +# 2001| Block 7 +# 2001| m2001_4(int) = Phi : from 8:m2001_11, from 9:m2001_14 +# 2001| r2001_5(glval) = VariableAddress[#temp2001:9] : +# 2001| r2001_6(int) = Load[#temp2001:9] : &:r2001_5, m2001_4 +# 2001| r2001_7(glval) = VariableAddress[z] : +# 2001| m2001_8(int) = Store[z] : &:r2001_7, r2001_6 +# 2002| r2002_1(int) = Constant[7] : +# 2002| r2002_2(glval) = VariableAddress[a] : +# 2002| r2002_3(bool) = Load[a] : &:r2002_2, m1998_6 +# 2002| v2002_4(void) = ConditionalBranch : r2002_3 #-----| False -> Block 12 #-----| True -> Block 11 -# 2009| Block 8 -# 2009| r2009_12(glval) = VariableAddress[#temp2009:13] : -# 2009| r2009_13(TernaryPodObj) = Constant[0] : -# 2009| m2009_14(TernaryPodObj) = Store[#temp2009:13] : &:r2009_12, r2009_13 -# 2009| r2009_15(TernaryPodObj) = Load[#temp2009:13] : &:r2009_12, m2009_14 -# 2009| r2009_16(glval) = VariableAddress[#temp2009:9] : -# 2009| m2009_17(TernaryPodObj) = Store[#temp2009:9] : &:r2009_16, r2009_15 +# 2001| Block 8 +# 2001| r2001_9(int) = Constant[3] : +# 2001| r2001_10(glval) = VariableAddress[#temp2001:9] : +# 2001| m2001_11(int) = Store[#temp2001:9] : &:r2001_10, r2001_9 #-----| Goto -> Block 7 -# 2009| Block 9 -# 2009| r2009_18(glval) = VariableAddress[#temp2009:31] : -# 2009| r2009_19(TernaryPodObj) = Constant[0] : -# 2009| m2009_20(TernaryPodObj) = Store[#temp2009:31] : &:r2009_18, r2009_19 -# 2009| r2009_21(TernaryPodObj) = Load[#temp2009:31] : &:r2009_18, m2009_20 -# 2009| r2009_22(glval) = VariableAddress[#temp2009:9] : -# 2009| m2009_23(TernaryPodObj) = Store[#temp2009:9] : &:r2009_22, r2009_21 +# 2001| Block 9 +# 2001| r2001_12(int) = Constant[5] : +# 2001| r2001_13(glval) = VariableAddress[#temp2001:9] : +# 2001| m2001_14(int) = Store[#temp2001:9] : &:r2001_13, r2001_12 #-----| Goto -> Block 7 -# 2010| Block 10 -# 2010| m2010_8(TernaryPodObj) = Phi : from 11:m2010_18, from 12:m2010_22 -# 2010| r2010_9(glval) = VariableAddress[#temp2010:10] : -# 2010| r2010_10(TernaryPodObj) = Load[#temp2010:10] : &:r2010_9, m2010_8 -# 2010| r2010_11(glval) = VariableAddress[z] : -# 2010| m2010_12(TernaryPodObj) = Store[z] : &:r2010_11, r2010_10 -# 2010| r2010_13(glval) = CopyValue : r2010_11 -# 2010| m2010_14(TernaryPodObj) = Store[?] : &:r2010_13, r2010_4 -# 2011| v2011_1(void) = NoOp : -# 2006| v2006_13(void) = ReturnVoid : -# 2006| v2006_14(void) = AliasedUse : m2006_3 -# 2006| v2006_15(void) = ExitFunction : +# 2002| Block 10 +# 2002| m2002_5(glval) = Phi : from 11:m2002_12, from 12:m2002_15 +# 2002| r2002_6(glval) = VariableAddress[#temp2002:6] : +# 2002| r2002_7(glval) = Load[#temp2002:6] : &:r2002_6, m2002_5 +# 2002| m2002_8(int) = Store[?] : &:r2002_7, r2002_1 +# 2002| m2002_9(unknown) = Chi : total:m1998_4, partial:m2002_8 +# 2003| v2003_1(void) = NoOp : +# 1998| v1998_13(void) = ReturnVoid : +# 1998| v1998_14(void) = AliasedUse : ~m2002_9 +# 1998| v1998_15(void) = ExitFunction : -# 2010| Block 11 -# 2010| r2010_15(glval) = VariableAddress[x] : -# 2010| r2010_16(TernaryPodObj) = Load[x] : &:r2010_15, m2006_8 -# 2010| r2010_17(glval) = VariableAddress[#temp2010:10] : -# 2010| m2010_18(TernaryPodObj) = Store[#temp2010:10] : &:r2010_17, r2010_16 +# 2002| Block 11 +# 2002| r2002_10(glval) = VariableAddress[x] : +# 2002| r2002_11(glval) = VariableAddress[#temp2002:6] : +# 2002| m2002_12(glval) = Store[#temp2002:6] : &:r2002_11, r2002_10 #-----| Goto -> Block 10 -# 2010| Block 12 -# 2010| r2010_19(glval) = VariableAddress[y] : -# 2010| r2010_20(TernaryPodObj) = Load[y] : &:r2010_19, m2006_10 -# 2010| r2010_21(glval) = VariableAddress[#temp2010:10] : -# 2010| m2010_22(TernaryPodObj) = Store[#temp2010:10] : &:r2010_21, r2010_20 +# 2002| Block 12 +# 2002| r2002_13(glval) = VariableAddress[y] : +# 2002| r2002_14(glval) = VariableAddress[#temp2002:6] : +# 2002| m2002_15(glval) = Store[#temp2002:6] : &:r2002_14, r2002_13 #-----| Goto -> Block 10 -# 2013| TernaryNonPodObj& TernaryNonPodObj::operator=(TernaryNonPodObj const&) -# 2013| Block 0 -# 2013| v2013_1(void) = EnterFunction : -# 2013| m2013_2(unknown) = AliasedDefinition : -# 2013| m2013_3(unknown) = InitializeNonLocal : -# 2013| m2013_4(unknown) = Chi : total:m2013_2, partial:m2013_3 -# 2013| r2013_5(glval) = VariableAddress[#this] : -# 2013| m2013_6(glval) = InitializeParameter[#this] : &:r2013_5 -# 2013| r2013_7(glval) = Load[#this] : &:r2013_5, m2013_6 -# 2013| m2013_8(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2013_7 +# 2008| void TernaryTestPodObj(bool, TernaryPodObj, TernaryPodObj, TernaryPodObj) +# 2008| Block 0 +# 2008| v2008_1(void) = EnterFunction : +# 2008| m2008_2(unknown) = AliasedDefinition : +# 2008| m2008_3(unknown) = InitializeNonLocal : +# 2008| m2008_4(unknown) = Chi : total:m2008_2, partial:m2008_3 +# 2008| r2008_5(glval) = VariableAddress[a] : +# 2008| m2008_6(bool) = InitializeParameter[a] : &:r2008_5 +# 2008| r2008_7(glval) = VariableAddress[x] : +# 2008| m2008_8(TernaryPodObj) = InitializeParameter[x] : &:r2008_7 +# 2008| r2008_9(glval) = VariableAddress[y] : +# 2008| m2008_10(TernaryPodObj) = InitializeParameter[y] : &:r2008_9 +# 2008| r2008_11(glval) = VariableAddress[z] : +# 2008| m2008_12(TernaryPodObj) = InitializeParameter[z] : &:r2008_11 +# 2009| r2009_1(glval) = VariableAddress[a] : +# 2009| r2009_2(bool) = Load[a] : &:r2009_1, m2008_6 +# 2009| v2009_3(void) = ConditionalBranch : r2009_2 +#-----| False -> Block 3 +#-----| True -> Block 2 + +# 2009| Block 1 +# 2009| m2009_4(TernaryPodObj) = Phi : from 2:m2009_12, from 3:m2009_16 +# 2009| r2009_5(glval) = VariableAddress[#temp2009:9] : +# 2009| r2009_6(TernaryPodObj) = Load[#temp2009:9] : &:r2009_5, m2009_4 +# 2009| r2009_7(glval) = VariableAddress[z] : +# 2009| m2009_8(TernaryPodObj) = Store[z] : &:r2009_7, r2009_6 +# 2010| r2010_1(glval) = VariableAddress[#temp2010:9] : +# 2010| r2010_2(glval) = VariableAddress[a] : +# 2010| r2010_3(bool) = Load[a] : &:r2010_2, m2008_6 +# 2010| v2010_4(void) = ConditionalBranch : r2010_3 +#-----| False -> Block 6 +#-----| True -> Block 5 + +# 2009| Block 2 +# 2009| r2009_9(glval) = VariableAddress[x] : +# 2009| r2009_10(TernaryPodObj) = Load[x] : &:r2009_9, m2008_8 +# 2009| r2009_11(glval) = VariableAddress[#temp2009:9] : +# 2009| m2009_12(TernaryPodObj) = Store[#temp2009:9] : &:r2009_11, r2009_10 +#-----| Goto -> Block 1 + +# 2009| Block 3 +# 2009| r2009_13(glval) = VariableAddress[y] : +# 2009| r2009_14(TernaryPodObj) = Load[y] : &:r2009_13, m2008_10 +# 2009| r2009_15(glval) = VariableAddress[#temp2009:9] : +# 2009| m2009_16(TernaryPodObj) = Store[#temp2009:9] : &:r2009_15, r2009_14 +#-----| Goto -> Block 1 + +# 2010| Block 4 +# 2010| m2010_5(TernaryPodObj) = Phi : from 5:m2010_18, from 6:m2010_24 +# 2010| r2010_6(glval) = VariableAddress[#temp2010:9] : +# 2010| r2010_7(TernaryPodObj) = Load[#temp2010:9] : &:r2010_6, m2010_5 +# 2010| m2010_8(TernaryPodObj) = Store[#temp2010:9] : &:r2010_1, r2010_7 +# 2010| r2010_9(TernaryPodObj) = Load[#temp2010:9] : &:r2010_1, m2010_8 +# 2010| r2010_10(glval) = VariableAddress[z] : +# 2010| m2010_11(TernaryPodObj) = Store[z] : &:r2010_10, r2010_9 +# 2011| r2011_1(glval) = VariableAddress[#temp2011:9] : +# 2011| r2011_2(glval) = VariableAddress[a] : +# 2011| r2011_3(bool) = Load[a] : &:r2011_2, m2008_6 +# 2011| v2011_4(void) = ConditionalBranch : r2011_3 +#-----| False -> Block 9 +#-----| True -> Block 8 + +# 2010| Block 5 +# 2010| r2010_12(glval) = VariableAddress[#temp2010:13] : +# 2010| r2010_13(glval) = VariableAddress[x] : +# 2010| r2010_14(TernaryPodObj) = Load[x] : &:r2010_13, m2008_8 +# 2010| m2010_15(TernaryPodObj) = Store[#temp2010:13] : &:r2010_12, r2010_14 +# 2010| r2010_16(TernaryPodObj) = Load[#temp2010:13] : &:r2010_12, m2010_15 +# 2010| r2010_17(glval) = VariableAddress[#temp2010:9] : +# 2010| m2010_18(TernaryPodObj) = Store[#temp2010:9] : &:r2010_17, r2010_16 +#-----| Goto -> Block 4 + +# 2010| Block 6 +# 2010| r2010_19(glval) = VariableAddress[#temp2010:17] : +# 2010| r2010_20(TernaryPodObj) = Constant[0] : +# 2010| m2010_21(TernaryPodObj) = Store[#temp2010:17] : &:r2010_19, r2010_20 +# 2010| r2010_22(TernaryPodObj) = Load[#temp2010:17] : &:r2010_19, m2010_21 +# 2010| r2010_23(glval) = VariableAddress[#temp2010:9] : +# 2010| m2010_24(TernaryPodObj) = Store[#temp2010:9] : &:r2010_23, r2010_22 +#-----| Goto -> Block 4 + +# 2011| Block 7 +# 2011| m2011_5(TernaryPodObj) = Phi : from 8:m2011_17, from 9:m2011_23 +# 2011| r2011_6(glval) = VariableAddress[#temp2011:9] : +# 2011| r2011_7(TernaryPodObj) = Load[#temp2011:9] : &:r2011_6, m2011_5 +# 2011| m2011_8(TernaryPodObj) = Store[#temp2011:9] : &:r2011_1, r2011_7 +# 2011| r2011_9(TernaryPodObj) = Load[#temp2011:9] : &:r2011_1, m2011_8 +# 2011| r2011_10(glval) = VariableAddress[z] : +# 2011| m2011_11(TernaryPodObj) = Store[z] : &:r2011_10, r2011_9 +# 2012| r2012_1(glval) = VariableAddress[#temp2012:23] : +# 2012| r2012_2(TernaryPodObj) = Constant[0] : +# 2012| m2012_3(TernaryPodObj) = Store[#temp2012:23] : &:r2012_1, r2012_2 +# 2012| r2012_4(TernaryPodObj) = Load[#temp2012:23] : &:r2012_1, m2012_3 +# 2012| r2012_5(glval) = VariableAddress[a] : +# 2012| r2012_6(bool) = Load[a] : &:r2012_5, m2008_6 +# 2012| v2012_7(void) = ConditionalBranch : r2012_6 +#-----| False -> Block 12 +#-----| True -> Block 11 + +# 2011| Block 8 +# 2011| r2011_12(glval) = VariableAddress[#temp2011:13] : +# 2011| r2011_13(TernaryPodObj) = Constant[0] : +# 2011| m2011_14(TernaryPodObj) = Store[#temp2011:13] : &:r2011_12, r2011_13 +# 2011| r2011_15(TernaryPodObj) = Load[#temp2011:13] : &:r2011_12, m2011_14 +# 2011| r2011_16(glval) = VariableAddress[#temp2011:9] : +# 2011| m2011_17(TernaryPodObj) = Store[#temp2011:9] : &:r2011_16, r2011_15 +#-----| Goto -> Block 7 + +# 2011| Block 9 +# 2011| r2011_18(glval) = VariableAddress[#temp2011:31] : +# 2011| r2011_19(TernaryPodObj) = Constant[0] : +# 2011| m2011_20(TernaryPodObj) = Store[#temp2011:31] : &:r2011_18, r2011_19 +# 2011| r2011_21(TernaryPodObj) = Load[#temp2011:31] : &:r2011_18, m2011_20 +# 2011| r2011_22(glval) = VariableAddress[#temp2011:9] : +# 2011| m2011_23(TernaryPodObj) = Store[#temp2011:9] : &:r2011_22, r2011_21 +#-----| Goto -> Block 7 + +# 2012| Block 10 +# 2012| m2012_8(TernaryPodObj) = Phi : from 11:m2012_18, from 12:m2012_22 +# 2012| r2012_9(glval) = VariableAddress[#temp2012:10] : +# 2012| r2012_10(TernaryPodObj) = Load[#temp2012:10] : &:r2012_9, m2012_8 +# 2012| r2012_11(glval) = VariableAddress[z] : +# 2012| m2012_12(TernaryPodObj) = Store[z] : &:r2012_11, r2012_10 +# 2012| r2012_13(glval) = CopyValue : r2012_11 +# 2012| m2012_14(TernaryPodObj) = Store[?] : &:r2012_13, r2012_4 +# 2013| v2013_1(void) = NoOp : +# 2008| v2008_13(void) = ReturnVoid : +# 2008| v2008_14(void) = AliasedUse : m2008_3 +# 2008| v2008_15(void) = ExitFunction : + +# 2012| Block 11 +# 2012| r2012_15(glval) = VariableAddress[x] : +# 2012| r2012_16(TernaryPodObj) = Load[x] : &:r2012_15, m2008_8 +# 2012| r2012_17(glval) = VariableAddress[#temp2012:10] : +# 2012| m2012_18(TernaryPodObj) = Store[#temp2012:10] : &:r2012_17, r2012_16 +#-----| Goto -> Block 10 + +# 2012| Block 12 +# 2012| r2012_19(glval) = VariableAddress[y] : +# 2012| r2012_20(TernaryPodObj) = Load[y] : &:r2012_19, m2008_10 +# 2012| r2012_21(glval) = VariableAddress[#temp2012:10] : +# 2012| m2012_22(TernaryPodObj) = Store[#temp2012:10] : &:r2012_21, r2012_20 +#-----| Goto -> Block 10 + +# 2015| TernaryNonPodObj& TernaryNonPodObj::operator=(TernaryNonPodObj const&) +# 2015| Block 0 +# 2015| v2015_1(void) = EnterFunction : +# 2015| m2015_2(unknown) = AliasedDefinition : +# 2015| m2015_3(unknown) = InitializeNonLocal : +# 2015| m2015_4(unknown) = Chi : total:m2015_2, partial:m2015_3 +# 2015| r2015_5(glval) = VariableAddress[#this] : +# 2015| m2015_6(glval) = InitializeParameter[#this] : &:r2015_5 +# 2015| r2015_7(glval) = Load[#this] : &:r2015_5, m2015_6 +# 2015| m2015_8(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2015_7 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| m0_2(TernaryNonPodObj &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(TernaryNonPodObj &) = Load[(unnamed parameter 0)] : &:r0_1, m0_2 #-----| m0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 #-----| r0_5(glval) = VariableAddress[#return] : #-----| r0_6(glval) = VariableAddress[#this] : -#-----| r0_7(TernaryNonPodObj *) = Load[#this] : &:r0_6, m2013_6 +#-----| r0_7(TernaryNonPodObj *) = Load[#this] : &:r0_6, m2015_6 #-----| r0_8(glval) = CopyValue : r0_7 #-----| r0_9(TernaryNonPodObj &) = CopyValue : r0_8 #-----| m0_10(TernaryNonPodObj &) = Store[#return] : &:r0_5, r0_9 -# 2013| v2013_9(void) = ReturnIndirection[#this] : &:r2013_7, m2013_8 +# 2015| v2015_9(void) = ReturnIndirection[#this] : &:r2015_7, m2015_8 #-----| v0_11(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, m0_4 -# 2013| r2013_10(glval) = VariableAddress[#return] : -# 2013| v2013_11(void) = ReturnValue : &:r2013_10, m0_10 -# 2013| v2013_12(void) = AliasedUse : m2013_3 -# 2013| v2013_13(void) = ExitFunction : +# 2015| r2015_10(glval) = VariableAddress[#return] : +# 2015| v2015_11(void) = ReturnValue : &:r2015_10, m0_10 +# 2015| v2015_12(void) = AliasedUse : m2015_3 +# 2015| v2015_13(void) = ExitFunction : -# 2013| void TernaryNonPodObj::TernaryNonPodObj() -# 2013| Block 0 -# 2013| v2013_1(void) = EnterFunction : -# 2013| m2013_2(unknown) = AliasedDefinition : -# 2013| m2013_3(unknown) = InitializeNonLocal : -# 2013| m2013_4(unknown) = Chi : total:m2013_2, partial:m2013_3 -# 2013| r2013_5(glval) = VariableAddress[#this] : -# 2013| m2013_6(glval) = InitializeParameter[#this] : &:r2013_5 -# 2013| r2013_7(glval) = Load[#this] : &:r2013_5, m2013_6 -# 2013| m2013_8(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2013_7 -# 2013| v2013_9(void) = NoOp : -# 2013| v2013_10(void) = ReturnIndirection[#this] : &:r2013_7, m2013_8 -# 2013| v2013_11(void) = ReturnVoid : -# 2013| v2013_12(void) = AliasedUse : m2013_3 -# 2013| v2013_13(void) = ExitFunction : +# 2015| void TernaryNonPodObj::TernaryNonPodObj() +# 2015| Block 0 +# 2015| v2015_1(void) = EnterFunction : +# 2015| m2015_2(unknown) = AliasedDefinition : +# 2015| m2015_3(unknown) = InitializeNonLocal : +# 2015| m2015_4(unknown) = Chi : total:m2015_2, partial:m2015_3 +# 2015| r2015_5(glval) = VariableAddress[#this] : +# 2015| m2015_6(glval) = InitializeParameter[#this] : &:r2015_5 +# 2015| r2015_7(glval) = Load[#this] : &:r2015_5, m2015_6 +# 2015| m2015_8(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2015_7 +# 2015| v2015_9(void) = NoOp : +# 2015| v2015_10(void) = ReturnIndirection[#this] : &:r2015_7, m2015_8 +# 2015| v2015_11(void) = ReturnVoid : +# 2015| v2015_12(void) = AliasedUse : m2015_3 +# 2015| v2015_13(void) = ExitFunction : -# 2013| void TernaryNonPodObj::TernaryNonPodObj(TernaryNonPodObj const&) -# 2013| Block 0 -# 2013| v2013_1(void) = EnterFunction : -# 2013| m2013_2(unknown) = AliasedDefinition : -# 2013| m2013_3(unknown) = InitializeNonLocal : -# 2013| m2013_4(unknown) = Chi : total:m2013_2, partial:m2013_3 -# 2013| r2013_5(glval) = VariableAddress[#this] : -# 2013| m2013_6(glval) = InitializeParameter[#this] : &:r2013_5 -# 2013| r2013_7(glval) = Load[#this] : &:r2013_5, m2013_6 -# 2013| m2013_8(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2013_7 +# 2015| void TernaryNonPodObj::TernaryNonPodObj(TernaryNonPodObj const&) +# 2015| Block 0 +# 2015| v2015_1(void) = EnterFunction : +# 2015| m2015_2(unknown) = AliasedDefinition : +# 2015| m2015_3(unknown) = InitializeNonLocal : +# 2015| m2015_4(unknown) = Chi : total:m2015_2, partial:m2015_3 +# 2015| r2015_5(glval) = VariableAddress[#this] : +# 2015| m2015_6(glval) = InitializeParameter[#this] : &:r2015_5 +# 2015| r2015_7(glval) = Load[#this] : &:r2015_5, m2015_6 +# 2015| m2015_8(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2015_7 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| m0_2(TernaryNonPodObj &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(TernaryNonPodObj &) = Load[(unnamed parameter 0)] : &:r0_1, m0_2 #-----| m0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 2013| v2013_9(void) = NoOp : -# 2013| v2013_10(void) = ReturnIndirection[#this] : &:r2013_7, m2013_8 +# 2015| v2015_9(void) = NoOp : +# 2015| v2015_10(void) = ReturnIndirection[#this] : &:r2015_7, m2015_8 #-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, m0_4 -# 2013| v2013_11(void) = ReturnVoid : -# 2013| v2013_12(void) = AliasedUse : m2013_3 -# 2013| v2013_13(void) = ExitFunction : +# 2015| v2015_11(void) = ReturnVoid : +# 2015| v2015_12(void) = AliasedUse : m2015_3 +# 2015| v2015_13(void) = ExitFunction : -# 2014| void TernaryNonPodObj::~TernaryNonPodObj() -# 2014| Block 0 -# 2014| v2014_1(void) = EnterFunction : -# 2014| m2014_2(unknown) = AliasedDefinition : -# 2014| m2014_3(unknown) = InitializeNonLocal : -# 2014| m2014_4(unknown) = Chi : total:m2014_2, partial:m2014_3 -# 2014| r2014_5(glval) = VariableAddress[#this] : -# 2014| m2014_6(glval) = InitializeParameter[#this] : &:r2014_5 -# 2014| r2014_7(glval) = Load[#this] : &:r2014_5, m2014_6 -# 2014| m2014_8(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2014_7 -# 2014| v2014_9(void) = NoOp : -# 2014| v2014_10(void) = ReturnIndirection[#this] : &:r2014_7, m2014_8 -# 2014| v2014_11(void) = ReturnVoid : -# 2014| v2014_12(void) = AliasedUse : m2014_3 -# 2014| v2014_13(void) = ExitFunction : +# 2016| void TernaryNonPodObj::~TernaryNonPodObj() +# 2016| Block 0 +# 2016| v2016_1(void) = EnterFunction : +# 2016| m2016_2(unknown) = AliasedDefinition : +# 2016| m2016_3(unknown) = InitializeNonLocal : +# 2016| m2016_4(unknown) = Chi : total:m2016_2, partial:m2016_3 +# 2016| r2016_5(glval) = VariableAddress[#this] : +# 2016| m2016_6(glval) = InitializeParameter[#this] : &:r2016_5 +# 2016| r2016_7(glval) = Load[#this] : &:r2016_5, m2016_6 +# 2016| m2016_8(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2016_7 +# 2016| v2016_9(void) = NoOp : +# 2016| v2016_10(void) = ReturnIndirection[#this] : &:r2016_7, m2016_8 +# 2016| v2016_11(void) = ReturnVoid : +# 2016| v2016_12(void) = AliasedUse : m2016_3 +# 2016| v2016_13(void) = ExitFunction : -# 2017| void TernaryTestNonPodObj(bool, TernaryNonPodObj, TernaryNonPodObj, TernaryNonPodObj) -# 2017| Block 0 -# 2017| v2017_1(void) = EnterFunction : -# 2017| m2017_2(unknown) = AliasedDefinition : -# 2017| m2017_3(unknown) = InitializeNonLocal : -# 2017| m2017_4(unknown) = Chi : total:m2017_2, partial:m2017_3 -# 2017| r2017_5(glval) = VariableAddress[a] : -# 2017| m2017_6(bool) = InitializeParameter[a] : &:r2017_5 -# 2017| r2017_7(glval) = VariableAddress[x] : -# 2017| m2017_8(TernaryNonPodObj) = InitializeParameter[x] : &:r2017_7 -# 2017| r2017_9(glval) = VariableAddress[y] : -# 2017| m2017_10(TernaryNonPodObj) = InitializeParameter[y] : &:r2017_9 -# 2017| r2017_11(glval) = VariableAddress[z] : -# 2017| m2017_12(TernaryNonPodObj) = InitializeParameter[z] : &:r2017_11 -# 2018| r2018_1(glval) = VariableAddress[z] : -# 2018| r2018_2(glval) = FunctionAddress[operator=] : -# 2018| r2018_3(glval) = VariableAddress[a] : -# 2018| r2018_4(bool) = Load[a] : &:r2018_3, m2017_6 -# 2018| v2018_5(void) = ConditionalBranch : r2018_4 +# 2019| void TernaryTestNonPodObj(bool, TernaryNonPodObj, TernaryNonPodObj, TernaryNonPodObj) +# 2019| Block 0 +# 2019| v2019_1(void) = EnterFunction : +# 2019| m2019_2(unknown) = AliasedDefinition : +# 2019| m2019_3(unknown) = InitializeNonLocal : +# 2019| m2019_4(unknown) = Chi : total:m2019_2, partial:m2019_3 +# 2019| r2019_5(glval) = VariableAddress[a] : +# 2019| m2019_6(bool) = InitializeParameter[a] : &:r2019_5 +# 2019| r2019_7(glval) = VariableAddress[x] : +# 2019| m2019_8(TernaryNonPodObj) = InitializeParameter[x] : &:r2019_7 +# 2019| r2019_9(glval) = VariableAddress[y] : +# 2019| m2019_10(TernaryNonPodObj) = InitializeParameter[y] : &:r2019_9 +# 2019| r2019_11(glval) = VariableAddress[z] : +# 2019| m2019_12(TernaryNonPodObj) = InitializeParameter[z] : &:r2019_11 +# 2020| r2020_1(glval) = VariableAddress[z] : +# 2020| r2020_2(glval) = FunctionAddress[operator=] : +# 2020| r2020_3(glval) = VariableAddress[a] : +# 2020| r2020_4(bool) = Load[a] : &:r2020_3, m2019_6 +# 2020| v2020_5(void) = ConditionalBranch : r2020_4 #-----| False -> Block 3 #-----| True -> Block 2 -# 2018| Block 1 -# 2018| m2018_6(glval) = Phi : from 2:m2018_21, from 3:m2018_24 -# 2018| r2018_7(glval) = VariableAddress[#temp2018:9] : -# 2018| r2018_8(glval) = Load[#temp2018:9] : &:r2018_7, m2018_6 -# 2018| r2018_9(glval) = Convert : r2018_8 -# 2018| r2018_10(TernaryNonPodObj &) = CopyValue : r2018_9 -# 2018| r2018_11(TernaryNonPodObj &) = Call[operator=] : func:r2018_2, this:r2018_1, 0:r2018_10 -# 2018| m2018_12(unknown) = ^CallSideEffect : ~m2017_4 -# 2018| m2018_13(unknown) = Chi : total:m2017_4, partial:m2018_12 -# 2018| v2018_14(void) = ^IndirectReadSideEffect[-1] : &:r2018_1, m2017_12 -# 2018| v2018_15(void) = ^BufferReadSideEffect[0] : &:r2018_10, ~m2018_13 -# 2018| m2018_16(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2018_1 -# 2018| m2018_17(TernaryNonPodObj) = Chi : total:m2017_12, partial:m2018_16 -# 2018| r2018_18(glval) = CopyValue : r2018_11 -# 2019| r2019_1(glval) = VariableAddress[z] : -# 2019| r2019_2(glval) = FunctionAddress[operator=] : -# 2019| r2019_3(glval) = VariableAddress[#temp2019:9] : -# 2019| r2019_4(glval) = VariableAddress[a] : -# 2019| r2019_5(bool) = Load[a] : &:r2019_4, m2017_6 -# 2019| v2019_6(void) = ConditionalBranch : r2019_5 +# 2020| Block 1 +# 2020| m2020_6(glval) = Phi : from 2:m2020_21, from 3:m2020_24 +# 2020| r2020_7(glval) = VariableAddress[#temp2020:9] : +# 2020| r2020_8(glval) = Load[#temp2020:9] : &:r2020_7, m2020_6 +# 2020| r2020_9(glval) = Convert : r2020_8 +# 2020| r2020_10(TernaryNonPodObj &) = CopyValue : r2020_9 +# 2020| r2020_11(TernaryNonPodObj &) = Call[operator=] : func:r2020_2, this:r2020_1, 0:r2020_10 +# 2020| m2020_12(unknown) = ^CallSideEffect : ~m2019_4 +# 2020| m2020_13(unknown) = Chi : total:m2019_4, partial:m2020_12 +# 2020| v2020_14(void) = ^IndirectReadSideEffect[-1] : &:r2020_1, m2019_12 +# 2020| v2020_15(void) = ^BufferReadSideEffect[0] : &:r2020_10, ~m2020_13 +# 2020| m2020_16(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2020_1 +# 2020| m2020_17(TernaryNonPodObj) = Chi : total:m2019_12, partial:m2020_16 +# 2020| r2020_18(glval) = CopyValue : r2020_11 +# 2021| r2021_1(glval) = VariableAddress[z] : +# 2021| r2021_2(glval) = FunctionAddress[operator=] : +# 2021| r2021_3(glval) = VariableAddress[#temp2021:9] : +# 2021| r2021_4(glval) = VariableAddress[a] : +# 2021| r2021_5(bool) = Load[a] : &:r2021_4, m2019_6 +# 2021| v2021_6(void) = ConditionalBranch : r2021_5 #-----| False -> Block 6 #-----| True -> Block 5 -# 2018| Block 2 -# 2018| r2018_19(glval) = VariableAddress[x] : -# 2018| r2018_20(glval) = VariableAddress[#temp2018:9] : -# 2018| m2018_21(glval) = Store[#temp2018:9] : &:r2018_20, r2018_19 +# 2020| Block 2 +# 2020| r2020_19(glval) = VariableAddress[x] : +# 2020| r2020_20(glval) = VariableAddress[#temp2020:9] : +# 2020| m2020_21(glval) = Store[#temp2020:9] : &:r2020_20, r2020_19 #-----| Goto -> Block 1 -# 2018| Block 3 -# 2018| r2018_22(glval) = VariableAddress[y] : -# 2018| r2018_23(glval) = VariableAddress[#temp2018:9] : -# 2018| m2018_24(glval) = Store[#temp2018:9] : &:r2018_23, r2018_22 +# 2020| Block 3 +# 2020| r2020_22(glval) = VariableAddress[y] : +# 2020| r2020_23(glval) = VariableAddress[#temp2020:9] : +# 2020| m2020_24(glval) = Store[#temp2020:9] : &:r2020_23, r2020_22 #-----| Goto -> Block 1 -# 2019| Block 4 -# 2019| m2019_7(unknown) = Phi : from 5:~m2019_30, from 6:~m2019_42 -# 2019| m2019_8(TernaryNonPodObj) = Phi : from 5:m2019_36, from 6:m2019_47 -# 2019| r2019_9(glval) = VariableAddress[#temp2019:9] : -# 2019| r2019_10(TernaryNonPodObj) = Load[#temp2019:9] : &:r2019_9, m2019_8 -# 2019| m2019_11(TernaryNonPodObj) = Store[#temp2019:9] : &:r2019_3, r2019_10 -# 2019| r2019_12(glval) = Convert : r2019_3 -# 2019| r2019_13(TernaryNonPodObj &) = CopyValue : r2019_12 -# 2019| r2019_14(TernaryNonPodObj &) = Call[operator=] : func:r2019_2, this:r2019_1, 0:r2019_13 -# 2019| m2019_15(unknown) = ^CallSideEffect : ~m2019_7 -# 2019| m2019_16(unknown) = Chi : total:m2019_7, partial:m2019_15 -# 2019| v2019_17(void) = ^IndirectReadSideEffect[-1] : &:r2019_1, m2018_17 -# 2019| v2019_18(void) = ^BufferReadSideEffect[0] : &:r2019_13, ~m2019_11 -# 2019| m2019_19(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2019_1 -# 2019| m2019_20(TernaryNonPodObj) = Chi : total:m2018_17, partial:m2019_19 -# 2019| r2019_21(glval) = CopyValue : r2019_14 -# 2020| r2020_1(glval) = VariableAddress[z] : -# 2020| r2020_2(glval) = FunctionAddress[operator=] : -# 2020| r2020_3(glval) = VariableAddress[#temp2020:9] : -# 2020| r2020_4(glval) = VariableAddress[a] : -# 2020| r2020_5(bool) = Load[a] : &:r2020_4, m2017_6 -# 2020| v2020_6(void) = ConditionalBranch : r2020_5 +# 2021| Block 4 +# 2021| m2021_7(unknown) = Phi : from 5:~m2021_30, from 6:~m2021_42 +# 2021| m2021_8(TernaryNonPodObj) = Phi : from 5:m2021_36, from 6:m2021_47 +# 2021| r2021_9(glval) = VariableAddress[#temp2021:9] : +# 2021| r2021_10(TernaryNonPodObj) = Load[#temp2021:9] : &:r2021_9, m2021_8 +# 2021| m2021_11(TernaryNonPodObj) = Store[#temp2021:9] : &:r2021_3, r2021_10 +# 2021| r2021_12(glval) = Convert : r2021_3 +# 2021| r2021_13(TernaryNonPodObj &) = CopyValue : r2021_12 +# 2021| r2021_14(TernaryNonPodObj &) = Call[operator=] : func:r2021_2, this:r2021_1, 0:r2021_13 +# 2021| m2021_15(unknown) = ^CallSideEffect : ~m2021_7 +# 2021| m2021_16(unknown) = Chi : total:m2021_7, partial:m2021_15 +# 2021| v2021_17(void) = ^IndirectReadSideEffect[-1] : &:r2021_1, m2020_17 +# 2021| v2021_18(void) = ^BufferReadSideEffect[0] : &:r2021_13, ~m2021_11 +# 2021| m2021_19(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2021_1 +# 2021| m2021_20(TernaryNonPodObj) = Chi : total:m2020_17, partial:m2021_19 +# 2021| r2021_21(glval) = CopyValue : r2021_14 +# 2022| r2022_1(glval) = VariableAddress[z] : +# 2022| r2022_2(glval) = FunctionAddress[operator=] : +# 2022| r2022_3(glval) = VariableAddress[#temp2022:9] : +# 2022| r2022_4(glval) = VariableAddress[a] : +# 2022| r2022_5(bool) = Load[a] : &:r2022_4, m2019_6 +# 2022| v2022_6(void) = ConditionalBranch : r2022_5 #-----| False -> Block 9 #-----| True -> Block 8 -# 2019| Block 5 -# 2019| r2019_22(glval) = VariableAddress[#temp2019:13] : -# 2019| m2019_23(TernaryNonPodObj) = Uninitialized[#temp2019:13] : &:r2019_22 -# 2019| r2019_24(glval) = FunctionAddress[TernaryNonPodObj] : -# 2019| r2019_25(glval) = VariableAddress[x] : -# 2019| r2019_26(glval) = Convert : r2019_25 -# 2019| r2019_27(TernaryNonPodObj &) = CopyValue : r2019_26 -# 2019| v2019_28(void) = Call[TernaryNonPodObj] : func:r2019_24, this:r2019_22, 0:r2019_27 -# 2019| m2019_29(unknown) = ^CallSideEffect : ~m2018_13 -# 2019| m2019_30(unknown) = Chi : total:m2018_13, partial:m2019_29 -# 2019| v2019_31(void) = ^BufferReadSideEffect[0] : &:r2019_27, ~m2017_8 -# 2019| m2019_32(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2019_22 -# 2019| m2019_33(TernaryNonPodObj) = Chi : total:m2019_23, partial:m2019_32 -# 2019| r2019_34(TernaryNonPodObj) = Load[#temp2019:13] : &:r2019_22, m2019_33 -# 2019| r2019_35(glval) = VariableAddress[#temp2019:9] : -# 2019| m2019_36(TernaryNonPodObj) = Store[#temp2019:9] : &:r2019_35, r2019_34 +# 2021| Block 5 +# 2021| r2021_22(glval) = VariableAddress[#temp2021:13] : +# 2021| m2021_23(TernaryNonPodObj) = Uninitialized[#temp2021:13] : &:r2021_22 +# 2021| r2021_24(glval) = FunctionAddress[TernaryNonPodObj] : +# 2021| r2021_25(glval) = VariableAddress[x] : +# 2021| r2021_26(glval) = Convert : r2021_25 +# 2021| r2021_27(TernaryNonPodObj &) = CopyValue : r2021_26 +# 2021| v2021_28(void) = Call[TernaryNonPodObj] : func:r2021_24, this:r2021_22, 0:r2021_27 +# 2021| m2021_29(unknown) = ^CallSideEffect : ~m2020_13 +# 2021| m2021_30(unknown) = Chi : total:m2020_13, partial:m2021_29 +# 2021| v2021_31(void) = ^BufferReadSideEffect[0] : &:r2021_27, ~m2019_8 +# 2021| m2021_32(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2021_22 +# 2021| m2021_33(TernaryNonPodObj) = Chi : total:m2021_23, partial:m2021_32 +# 2021| r2021_34(TernaryNonPodObj) = Load[#temp2021:13] : &:r2021_22, m2021_33 +# 2021| r2021_35(glval) = VariableAddress[#temp2021:9] : +# 2021| m2021_36(TernaryNonPodObj) = Store[#temp2021:9] : &:r2021_35, r2021_34 #-----| Goto -> Block 4 -# 2019| Block 6 -# 2019| r2019_37(glval) = VariableAddress[#temp2019:17] : -# 2019| m2019_38(TernaryNonPodObj) = Uninitialized[#temp2019:17] : &:r2019_37 -# 2019| r2019_39(glval) = FunctionAddress[TernaryNonPodObj] : -# 2019| v2019_40(void) = Call[TernaryNonPodObj] : func:r2019_39, this:r2019_37 -# 2019| m2019_41(unknown) = ^CallSideEffect : ~m2018_13 -# 2019| m2019_42(unknown) = Chi : total:m2018_13, partial:m2019_41 -# 2019| m2019_43(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2019_37 -# 2019| m2019_44(TernaryNonPodObj) = Chi : total:m2019_38, partial:m2019_43 -# 2019| r2019_45(TernaryNonPodObj) = Load[#temp2019:17] : &:r2019_37, m2019_44 -# 2019| r2019_46(glval) = VariableAddress[#temp2019:9] : -# 2019| m2019_47(TernaryNonPodObj) = Store[#temp2019:9] : &:r2019_46, r2019_45 +# 2021| Block 6 +# 2021| r2021_37(glval) = VariableAddress[#temp2021:17] : +# 2021| m2021_38(TernaryNonPodObj) = Uninitialized[#temp2021:17] : &:r2021_37 +# 2021| r2021_39(glval) = FunctionAddress[TernaryNonPodObj] : +# 2021| v2021_40(void) = Call[TernaryNonPodObj] : func:r2021_39, this:r2021_37 +# 2021| m2021_41(unknown) = ^CallSideEffect : ~m2020_13 +# 2021| m2021_42(unknown) = Chi : total:m2020_13, partial:m2021_41 +# 2021| m2021_43(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2021_37 +# 2021| m2021_44(TernaryNonPodObj) = Chi : total:m2021_38, partial:m2021_43 +# 2021| r2021_45(TernaryNonPodObj) = Load[#temp2021:17] : &:r2021_37, m2021_44 +# 2021| r2021_46(glval) = VariableAddress[#temp2021:9] : +# 2021| m2021_47(TernaryNonPodObj) = Store[#temp2021:9] : &:r2021_46, r2021_45 #-----| Goto -> Block 4 -# 2020| Block 7 -# 2020| m2020_7(unknown) = Phi : from 8:~m2020_27, from 9:~m2020_38 -# 2020| m2020_8(TernaryNonPodObj) = Phi : from 8:m2020_32, from 9:m2020_43 -# 2020| r2020_9(glval) = VariableAddress[#temp2020:9] : -# 2020| r2020_10(TernaryNonPodObj) = Load[#temp2020:9] : &:r2020_9, m2020_8 -# 2020| m2020_11(TernaryNonPodObj) = Store[#temp2020:9] : &:r2020_3, r2020_10 -# 2020| r2020_12(glval) = Convert : r2020_3 -# 2020| r2020_13(TernaryNonPodObj &) = CopyValue : r2020_12 -# 2020| r2020_14(TernaryNonPodObj &) = Call[operator=] : func:r2020_2, this:r2020_1, 0:r2020_13 -# 2020| m2020_15(unknown) = ^CallSideEffect : ~m2020_7 -# 2020| m2020_16(unknown) = Chi : total:m2020_7, partial:m2020_15 -# 2020| v2020_17(void) = ^IndirectReadSideEffect[-1] : &:r2020_1, m2019_20 -# 2020| v2020_18(void) = ^BufferReadSideEffect[0] : &:r2020_13, ~m2020_11 -# 2020| m2020_19(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2020_1 -# 2020| m2020_20(TernaryNonPodObj) = Chi : total:m2019_20, partial:m2020_19 -# 2020| r2020_21(glval) = CopyValue : r2020_14 -# 2021| r2021_1(glval) = VariableAddress[z] : -# 2021| r2021_2(glval) = FunctionAddress[operator=] : -# 2021| r2021_3(glval) = VariableAddress[a] : -# 2021| r2021_4(bool) = Load[a] : &:r2021_3, m2017_6 -# 2021| v2021_5(void) = ConditionalBranch : r2021_4 +# 2022| Block 7 +# 2022| m2022_7(unknown) = Phi : from 8:~m2022_27, from 9:~m2022_38 +# 2022| m2022_8(TernaryNonPodObj) = Phi : from 8:m2022_32, from 9:m2022_43 +# 2022| r2022_9(glval) = VariableAddress[#temp2022:9] : +# 2022| r2022_10(TernaryNonPodObj) = Load[#temp2022:9] : &:r2022_9, m2022_8 +# 2022| m2022_11(TernaryNonPodObj) = Store[#temp2022:9] : &:r2022_3, r2022_10 +# 2022| r2022_12(glval) = Convert : r2022_3 +# 2022| r2022_13(TernaryNonPodObj &) = CopyValue : r2022_12 +# 2022| r2022_14(TernaryNonPodObj &) = Call[operator=] : func:r2022_2, this:r2022_1, 0:r2022_13 +# 2022| m2022_15(unknown) = ^CallSideEffect : ~m2022_7 +# 2022| m2022_16(unknown) = Chi : total:m2022_7, partial:m2022_15 +# 2022| v2022_17(void) = ^IndirectReadSideEffect[-1] : &:r2022_1, m2021_20 +# 2022| v2022_18(void) = ^BufferReadSideEffect[0] : &:r2022_13, ~m2022_11 +# 2022| m2022_19(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2022_1 +# 2022| m2022_20(TernaryNonPodObj) = Chi : total:m2021_20, partial:m2022_19 +# 2022| r2022_21(glval) = CopyValue : r2022_14 +# 2023| r2023_1(glval) = VariableAddress[z] : +# 2023| r2023_2(glval) = FunctionAddress[operator=] : +# 2023| r2023_3(glval) = VariableAddress[a] : +# 2023| r2023_4(bool) = Load[a] : &:r2023_3, m2019_6 +# 2023| v2023_5(void) = ConditionalBranch : r2023_4 #-----| False -> Block 12 #-----| True -> Block 11 -# 2020| Block 8 -# 2020| r2020_22(glval) = VariableAddress[#temp2020:13] : -# 2020| m2020_23(TernaryNonPodObj) = Uninitialized[#temp2020:13] : &:r2020_22 -# 2020| r2020_24(glval) = FunctionAddress[TernaryNonPodObj] : -# 2020| v2020_25(void) = Call[TernaryNonPodObj] : func:r2020_24, this:r2020_22 -# 2020| m2020_26(unknown) = ^CallSideEffect : ~m2019_16 -# 2020| m2020_27(unknown) = Chi : total:m2019_16, partial:m2020_26 -# 2020| m2020_28(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2020_22 -# 2020| m2020_29(TernaryNonPodObj) = Chi : total:m2020_23, partial:m2020_28 -# 2020| r2020_30(TernaryNonPodObj) = Load[#temp2020:13] : &:r2020_22, m2020_29 -# 2020| r2020_31(glval) = VariableAddress[#temp2020:9] : -# 2020| m2020_32(TernaryNonPodObj) = Store[#temp2020:9] : &:r2020_31, r2020_30 +# 2022| Block 8 +# 2022| r2022_22(glval) = VariableAddress[#temp2022:13] : +# 2022| m2022_23(TernaryNonPodObj) = Uninitialized[#temp2022:13] : &:r2022_22 +# 2022| r2022_24(glval) = FunctionAddress[TernaryNonPodObj] : +# 2022| v2022_25(void) = Call[TernaryNonPodObj] : func:r2022_24, this:r2022_22 +# 2022| m2022_26(unknown) = ^CallSideEffect : ~m2021_16 +# 2022| m2022_27(unknown) = Chi : total:m2021_16, partial:m2022_26 +# 2022| m2022_28(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2022_22 +# 2022| m2022_29(TernaryNonPodObj) = Chi : total:m2022_23, partial:m2022_28 +# 2022| r2022_30(TernaryNonPodObj) = Load[#temp2022:13] : &:r2022_22, m2022_29 +# 2022| r2022_31(glval) = VariableAddress[#temp2022:9] : +# 2022| m2022_32(TernaryNonPodObj) = Store[#temp2022:9] : &:r2022_31, r2022_30 #-----| Goto -> Block 7 -# 2020| Block 9 -# 2020| r2020_33(glval) = VariableAddress[#temp2020:34] : -# 2020| m2020_34(TernaryNonPodObj) = Uninitialized[#temp2020:34] : &:r2020_33 -# 2020| r2020_35(glval) = FunctionAddress[TernaryNonPodObj] : -# 2020| v2020_36(void) = Call[TernaryNonPodObj] : func:r2020_35, this:r2020_33 -# 2020| m2020_37(unknown) = ^CallSideEffect : ~m2019_16 -# 2020| m2020_38(unknown) = Chi : total:m2019_16, partial:m2020_37 -# 2020| m2020_39(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2020_33 -# 2020| m2020_40(TernaryNonPodObj) = Chi : total:m2020_34, partial:m2020_39 -# 2020| r2020_41(TernaryNonPodObj) = Load[#temp2020:34] : &:r2020_33, m2020_40 -# 2020| r2020_42(glval) = VariableAddress[#temp2020:9] : -# 2020| m2020_43(TernaryNonPodObj) = Store[#temp2020:9] : &:r2020_42, r2020_41 +# 2022| Block 9 +# 2022| r2022_33(glval) = VariableAddress[#temp2022:34] : +# 2022| m2022_34(TernaryNonPodObj) = Uninitialized[#temp2022:34] : &:r2022_33 +# 2022| r2022_35(glval) = FunctionAddress[TernaryNonPodObj] : +# 2022| v2022_36(void) = Call[TernaryNonPodObj] : func:r2022_35, this:r2022_33 +# 2022| m2022_37(unknown) = ^CallSideEffect : ~m2021_16 +# 2022| m2022_38(unknown) = Chi : total:m2021_16, partial:m2022_37 +# 2022| m2022_39(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2022_33 +# 2022| m2022_40(TernaryNonPodObj) = Chi : total:m2022_34, partial:m2022_39 +# 2022| r2022_41(TernaryNonPodObj) = Load[#temp2022:34] : &:r2022_33, m2022_40 +# 2022| r2022_42(glval) = VariableAddress[#temp2022:9] : +# 2022| m2022_43(TernaryNonPodObj) = Store[#temp2022:9] : &:r2022_42, r2022_41 #-----| Goto -> Block 7 -# 2021| Block 10 -# 2021| m2021_6(glval) = Phi : from 11:m2021_40, from 12:m2021_43 -# 2021| r2021_7(glval) = VariableAddress[#temp2021:10] : -# 2021| r2021_8(glval) = Load[#temp2021:10] : &:r2021_7, m2021_6 -# 2021| r2021_9(glval) = Convert : r2021_8 -# 2021| r2021_10(TernaryNonPodObj &) = CopyValue : r2021_9 -# 2021| r2021_11(TernaryNonPodObj &) = Call[operator=] : func:r2021_2, this:r2021_1, 0:r2021_10 -# 2021| m2021_12(unknown) = ^CallSideEffect : ~m2020_16 -# 2021| m2021_13(unknown) = Chi : total:m2020_16, partial:m2021_12 -# 2021| v2021_14(void) = ^IndirectReadSideEffect[-1] : &:r2021_1, m2020_20 -# 2021| v2021_15(void) = ^BufferReadSideEffect[0] : &:r2021_10, ~m2021_13 -# 2021| m2021_16(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2021_1 -# 2021| m2021_17(TernaryNonPodObj) = Chi : total:m2020_20, partial:m2021_16 -# 2021| r2021_18(glval) = CopyValue : r2021_11 -# 2021| r2021_19(glval) = FunctionAddress[operator=] : -# 2021| r2021_20(glval) = VariableAddress[#temp2021:23] : -# 2021| m2021_21(TernaryNonPodObj) = Uninitialized[#temp2021:23] : &:r2021_20 -# 2021| r2021_22(glval) = FunctionAddress[TernaryNonPodObj] : -# 2021| v2021_23(void) = Call[TernaryNonPodObj] : func:r2021_22, this:r2021_20 -# 2021| m2021_24(unknown) = ^CallSideEffect : ~m2021_13 -# 2021| m2021_25(unknown) = Chi : total:m2021_13, partial:m2021_24 -# 2021| m2021_26(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2021_20 -# 2021| m2021_27(TernaryNonPodObj) = Chi : total:m2021_21, partial:m2021_26 -# 2021| r2021_28(glval) = Convert : r2021_20 -# 2021| r2021_29(TernaryNonPodObj &) = CopyValue : r2021_28 -# 2021| r2021_30(TernaryNonPodObj &) = Call[operator=] : func:r2021_19, this:r2021_18, 0:r2021_29 -# 2021| m2021_31(unknown) = ^CallSideEffect : ~m2021_25 -# 2021| m2021_32(unknown) = Chi : total:m2021_25, partial:m2021_31 -# 2021| v2021_33(void) = ^IndirectReadSideEffect[-1] : &:r2021_18, m2021_17 -# 2021| v2021_34(void) = ^BufferReadSideEffect[0] : &:r2021_29, ~m2021_27 -# 2021| m2021_35(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2021_18 -# 2021| m2021_36(TernaryNonPodObj) = Chi : total:m2021_17, partial:m2021_35 -# 2021| r2021_37(glval) = CopyValue : r2021_30 -# 2022| v2022_1(void) = NoOp : -# 2017| v2017_13(void) = ReturnVoid : -# 2017| v2017_14(void) = AliasedUse : ~m2021_32 -# 2017| v2017_15(void) = ExitFunction : +# 2023| Block 10 +# 2023| m2023_6(glval) = Phi : from 11:m2023_40, from 12:m2023_43 +# 2023| r2023_7(glval) = VariableAddress[#temp2023:10] : +# 2023| r2023_8(glval) = Load[#temp2023:10] : &:r2023_7, m2023_6 +# 2023| r2023_9(glval) = Convert : r2023_8 +# 2023| r2023_10(TernaryNonPodObj &) = CopyValue : r2023_9 +# 2023| r2023_11(TernaryNonPodObj &) = Call[operator=] : func:r2023_2, this:r2023_1, 0:r2023_10 +# 2023| m2023_12(unknown) = ^CallSideEffect : ~m2022_16 +# 2023| m2023_13(unknown) = Chi : total:m2022_16, partial:m2023_12 +# 2023| v2023_14(void) = ^IndirectReadSideEffect[-1] : &:r2023_1, m2022_20 +# 2023| v2023_15(void) = ^BufferReadSideEffect[0] : &:r2023_10, ~m2023_13 +# 2023| m2023_16(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2023_1 +# 2023| m2023_17(TernaryNonPodObj) = Chi : total:m2022_20, partial:m2023_16 +# 2023| r2023_18(glval) = CopyValue : r2023_11 +# 2023| r2023_19(glval) = FunctionAddress[operator=] : +# 2023| r2023_20(glval) = VariableAddress[#temp2023:23] : +# 2023| m2023_21(TernaryNonPodObj) = Uninitialized[#temp2023:23] : &:r2023_20 +# 2023| r2023_22(glval) = FunctionAddress[TernaryNonPodObj] : +# 2023| v2023_23(void) = Call[TernaryNonPodObj] : func:r2023_22, this:r2023_20 +# 2023| m2023_24(unknown) = ^CallSideEffect : ~m2023_13 +# 2023| m2023_25(unknown) = Chi : total:m2023_13, partial:m2023_24 +# 2023| m2023_26(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2023_20 +# 2023| m2023_27(TernaryNonPodObj) = Chi : total:m2023_21, partial:m2023_26 +# 2023| r2023_28(glval) = Convert : r2023_20 +# 2023| r2023_29(TernaryNonPodObj &) = CopyValue : r2023_28 +# 2023| r2023_30(TernaryNonPodObj &) = Call[operator=] : func:r2023_19, this:r2023_18, 0:r2023_29 +# 2023| m2023_31(unknown) = ^CallSideEffect : ~m2023_25 +# 2023| m2023_32(unknown) = Chi : total:m2023_25, partial:m2023_31 +# 2023| v2023_33(void) = ^IndirectReadSideEffect[-1] : &:r2023_18, m2023_17 +# 2023| v2023_34(void) = ^BufferReadSideEffect[0] : &:r2023_29, ~m2023_27 +# 2023| m2023_35(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2023_18 +# 2023| m2023_36(TernaryNonPodObj) = Chi : total:m2023_17, partial:m2023_35 +# 2023| r2023_37(glval) = CopyValue : r2023_30 +# 2024| v2024_1(void) = NoOp : +# 2019| v2019_13(void) = ReturnVoid : +# 2019| v2019_14(void) = AliasedUse : ~m2023_32 +# 2019| v2019_15(void) = ExitFunction : -# 2021| Block 11 -# 2021| r2021_38(glval) = VariableAddress[x] : -# 2021| r2021_39(glval) = VariableAddress[#temp2021:10] : -# 2021| m2021_40(glval) = Store[#temp2021:10] : &:r2021_39, r2021_38 +# 2023| Block 11 +# 2023| r2023_38(glval) = VariableAddress[x] : +# 2023| r2023_39(glval) = VariableAddress[#temp2023:10] : +# 2023| m2023_40(glval) = Store[#temp2023:10] : &:r2023_39, r2023_38 #-----| Goto -> Block 10 -# 2021| Block 12 -# 2021| r2021_41(glval) = VariableAddress[y] : -# 2021| r2021_42(glval) = VariableAddress[#temp2021:10] : -# 2021| m2021_43(glval) = Store[#temp2021:10] : &:r2021_42, r2021_41 +# 2023| Block 12 +# 2023| r2023_41(glval) = VariableAddress[y] : +# 2023| r2023_42(glval) = VariableAddress[#temp2023:10] : +# 2023| m2023_43(glval) = Store[#temp2023:10] : &:r2023_42, r2023_41 #-----| Goto -> Block 10 -# 2026| unsigned int CommaTest(unsigned int) -# 2026| Block 0 -# 2026| v2026_1(void) = EnterFunction : -# 2026| m2026_2(unknown) = AliasedDefinition : -# 2026| m2026_3(unknown) = InitializeNonLocal : -# 2026| m2026_4(unknown) = Chi : total:m2026_2, partial:m2026_3 -# 2026| r2026_5(glval) = VariableAddress[x] : -# 2026| m2026_6(unsigned int) = InitializeParameter[x] : &:r2026_5 -# 2027| r2027_1(glval) = VariableAddress[y] : -# 2027| m2027_2(unsigned int) = Uninitialized[y] : &:r2027_1 -# 2028| r2028_1(glval) = VariableAddress[x] : -# 2028| r2028_2(unsigned int) = Load[x] : &:r2028_1, m2026_6 -# 2028| r2028_3(unsigned int) = Constant[100] : -# 2028| r2028_4(bool) = CompareLT : r2028_2, r2028_3 -# 2028| v2028_5(void) = ConditionalBranch : r2028_4 +# 2028| unsigned int CommaTest(unsigned int) +# 2028| Block 0 +# 2028| v2028_1(void) = EnterFunction : +# 2028| m2028_2(unknown) = AliasedDefinition : +# 2028| m2028_3(unknown) = InitializeNonLocal : +# 2028| m2028_4(unknown) = Chi : total:m2028_2, partial:m2028_3 +# 2028| r2028_5(glval) = VariableAddress[x] : +# 2028| m2028_6(unsigned int) = InitializeParameter[x] : &:r2028_5 +# 2029| r2029_1(glval) = VariableAddress[y] : +# 2029| m2029_2(unsigned int) = Uninitialized[y] : &:r2029_1 +# 2030| r2030_1(glval) = VariableAddress[x] : +# 2030| r2030_2(unsigned int) = Load[x] : &:r2030_1, m2028_6 +# 2030| r2030_3(unsigned int) = Constant[100] : +# 2030| r2030_4(bool) = CompareLT : r2030_2, r2030_3 +# 2030| v2030_5(void) = ConditionalBranch : r2030_4 #-----| False -> Block 3 #-----| True -> Block 2 -# 2028| Block 1 -# 2028| m2028_6(unknown) = Phi : from 2:~m2029_6, from 3:~m2030_6 -# 2028| m2028_7(unsigned int) = Phi : from 2:m2028_13, from 3:m2028_15 -# 2028| r2028_8(glval) = VariableAddress[#temp2028:7] : -# 2028| r2028_9(unsigned int) = Load[#temp2028:7] : &:r2028_8, m2028_7 -# 2028| r2028_10(glval) = VariableAddress[y] : -# 2028| m2028_11(unsigned int) = Store[y] : &:r2028_10, r2028_9 -# 2031| r2031_1(glval) = VariableAddress[#return] : -# 2031| m2031_2(unsigned int) = Uninitialized[#return] : &:r2031_1 -# 2026| r2026_7(glval) = VariableAddress[#return] : -# 2026| v2026_8(void) = ReturnValue : &:r2026_7, m2031_2 -# 2026| v2026_9(void) = AliasedUse : ~m2028_6 -# 2026| v2026_10(void) = ExitFunction : +# 2030| Block 1 +# 2030| m2030_6(unknown) = Phi : from 2:~m2031_6, from 3:~m2032_6 +# 2030| m2030_7(unsigned int) = Phi : from 2:m2030_13, from 3:m2030_15 +# 2030| r2030_8(glval) = VariableAddress[#temp2030:7] : +# 2030| r2030_9(unsigned int) = Load[#temp2030:7] : &:r2030_8, m2030_7 +# 2030| r2030_10(glval) = VariableAddress[y] : +# 2030| m2030_11(unsigned int) = Store[y] : &:r2030_10, r2030_9 +# 2033| r2033_1(glval) = VariableAddress[#return] : +# 2033| m2033_2(unsigned int) = Uninitialized[#return] : &:r2033_1 +# 2028| r2028_7(glval) = VariableAddress[#return] : +# 2028| v2028_8(void) = ReturnValue : &:r2028_7, m2033_2 +# 2028| v2028_9(void) = AliasedUse : ~m2030_6 +# 2028| v2028_10(void) = ExitFunction : -# 2029| Block 2 -# 2029| r2029_1(glval) = FunctionAddress[CommaTestHelper] : -# 2029| r2029_2(glval) = VariableAddress[x] : -# 2029| r2029_3(unsigned int) = Load[x] : &:r2029_2, m2026_6 -# 2029| v2029_4(void) = Call[CommaTestHelper] : func:r2029_1, 0:r2029_3 -# 2029| m2029_5(unknown) = ^CallSideEffect : ~m2026_4 -# 2029| m2029_6(unknown) = Chi : total:m2026_4, partial:m2029_5 -# 2029| r2029_7(glval) = VariableAddress[x] : -# 2029| r2029_8(unsigned int) = Load[x] : &:r2029_7, m2026_6 -# 2029| r2029_9(unsigned int) = CopyValue : r2029_8 -# 2028| r2028_12(glval) = VariableAddress[#temp2028:7] : -# 2028| m2028_13(unsigned int) = Store[#temp2028:7] : &:r2028_12, r2029_9 +# 2031| Block 2 +# 2031| r2031_1(glval) = FunctionAddress[CommaTestHelper] : +# 2031| r2031_2(glval) = VariableAddress[x] : +# 2031| r2031_3(unsigned int) = Load[x] : &:r2031_2, m2028_6 +# 2031| v2031_4(void) = Call[CommaTestHelper] : func:r2031_1, 0:r2031_3 +# 2031| m2031_5(unknown) = ^CallSideEffect : ~m2028_4 +# 2031| m2031_6(unknown) = Chi : total:m2028_4, partial:m2031_5 +# 2031| r2031_7(glval) = VariableAddress[x] : +# 2031| r2031_8(unsigned int) = Load[x] : &:r2031_7, m2028_6 +# 2031| r2031_9(unsigned int) = CopyValue : r2031_8 +# 2030| r2030_12(glval) = VariableAddress[#temp2030:7] : +# 2030| m2030_13(unsigned int) = Store[#temp2030:7] : &:r2030_12, r2031_9 #-----| Goto -> Block 1 -# 2030| Block 3 -# 2030| r2030_1(glval) = FunctionAddress[CommaTestHelper] : -# 2030| r2030_2(glval) = VariableAddress[x] : -# 2030| r2030_3(unsigned int) = Load[x] : &:r2030_2, m2026_6 -# 2030| v2030_4(void) = Call[CommaTestHelper] : func:r2030_1, 0:r2030_3 -# 2030| m2030_5(unknown) = ^CallSideEffect : ~m2026_4 -# 2030| m2030_6(unknown) = Chi : total:m2026_4, partial:m2030_5 -# 2030| r2030_7(int) = Constant[10] : -# 2030| r2030_8(int) = CopyValue : r2030_7 -# 2030| r2030_9(unsigned int) = Convert : r2030_8 -# 2028| r2028_14(glval) = VariableAddress[#temp2028:7] : -# 2028| m2028_15(unsigned int) = Store[#temp2028:7] : &:r2028_14, r2030_9 +# 2032| Block 3 +# 2032| r2032_1(glval) = FunctionAddress[CommaTestHelper] : +# 2032| r2032_2(glval) = VariableAddress[x] : +# 2032| r2032_3(unsigned int) = Load[x] : &:r2032_2, m2028_6 +# 2032| v2032_4(void) = Call[CommaTestHelper] : func:r2032_1, 0:r2032_3 +# 2032| m2032_5(unknown) = ^CallSideEffect : ~m2028_4 +# 2032| m2032_6(unknown) = Chi : total:m2028_4, partial:m2032_5 +# 2032| r2032_7(int) = Constant[10] : +# 2032| r2032_8(int) = CopyValue : r2032_7 +# 2032| r2032_9(unsigned int) = Convert : r2032_8 +# 2030| r2030_14(glval) = VariableAddress[#temp2030:7] : +# 2030| m2030_15(unsigned int) = Store[#temp2030:7] : &:r2030_14, r2032_9 #-----| Goto -> Block 1 -# 2033| void NewDeleteMem() -# 2033| Block 0 -# 2033| v2033_1(void) = EnterFunction : -# 2033| m2033_2(unknown) = AliasedDefinition : -# 2033| m2033_3(unknown) = InitializeNonLocal : -# 2033| m2033_4(unknown) = Chi : total:m2033_2, partial:m2033_3 -# 2034| r2034_1(glval) = VariableAddress[x] : -# 2034| r2034_2(glval) = FunctionAddress[operator new] : -# 2034| r2034_3(unsigned long) = Constant[4] : -# 2034| r2034_4(void *) = Call[operator new] : func:r2034_2, 0:r2034_3 -# 2034| m2034_5(unknown) = ^CallSideEffect : ~m2033_4 -# 2034| m2034_6(unknown) = Chi : total:m2033_4, partial:m2034_5 -# 2034| m2034_7(unknown) = ^InitializeDynamicAllocation : &:r2034_4 -# 2034| r2034_8(int *) = Convert : r2034_4 -# 2034| m2034_9(int *) = Store[x] : &:r2034_1, r2034_8 -# 2035| r2035_1(int) = Constant[6] : -# 2035| r2035_2(glval) = VariableAddress[x] : -# 2035| r2035_3(int *) = Load[x] : &:r2035_2, m2034_9 -# 2035| r2035_4(glval) = CopyValue : r2035_3 -# 2035| m2035_5(int) = Store[?] : &:r2035_4, r2035_1 -# 2035| m2035_6(unknown) = Chi : total:m2034_7, partial:m2035_5 -# 2036| r2036_1(glval) = FunctionAddress[operator delete] : -# 2036| r2036_2(glval) = VariableAddress[x] : -# 2036| r2036_3(int *) = Load[x] : &:r2036_2, m2034_9 -# 2036| v2036_4(void) = Call[operator delete] : func:r2036_1, 0:r2036_3 -# 2036| m2036_5(unknown) = ^CallSideEffect : ~m2034_6 -# 2036| m2036_6(unknown) = Chi : total:m2034_6, partial:m2036_5 -# 2037| v2037_1(void) = NoOp : -# 2033| v2033_5(void) = ReturnVoid : -# 2033| v2033_6(void) = AliasedUse : ~m2036_6 -# 2033| v2033_7(void) = ExitFunction : +# 2035| void NewDeleteMem() +# 2035| Block 0 +# 2035| v2035_1(void) = EnterFunction : +# 2035| m2035_2(unknown) = AliasedDefinition : +# 2035| m2035_3(unknown) = InitializeNonLocal : +# 2035| m2035_4(unknown) = Chi : total:m2035_2, partial:m2035_3 +# 2036| r2036_1(glval) = VariableAddress[x] : +# 2036| r2036_2(glval) = FunctionAddress[operator new] : +# 2036| r2036_3(unsigned long) = Constant[4] : +# 2036| r2036_4(void *) = Call[operator new] : func:r2036_2, 0:r2036_3 +# 2036| m2036_5(unknown) = ^CallSideEffect : ~m2035_4 +# 2036| m2036_6(unknown) = Chi : total:m2035_4, partial:m2036_5 +# 2036| m2036_7(unknown) = ^InitializeDynamicAllocation : &:r2036_4 +# 2036| r2036_8(int *) = Convert : r2036_4 +# 2036| m2036_9(int *) = Store[x] : &:r2036_1, r2036_8 +# 2037| r2037_1(int) = Constant[6] : +# 2037| r2037_2(glval) = VariableAddress[x] : +# 2037| r2037_3(int *) = Load[x] : &:r2037_2, m2036_9 +# 2037| r2037_4(glval) = CopyValue : r2037_3 +# 2037| m2037_5(int) = Store[?] : &:r2037_4, r2037_1 +# 2037| m2037_6(unknown) = Chi : total:m2036_7, partial:m2037_5 +# 2038| r2038_1(glval) = FunctionAddress[operator delete] : +# 2038| r2038_2(glval) = VariableAddress[x] : +# 2038| r2038_3(int *) = Load[x] : &:r2038_2, m2036_9 +# 2038| v2038_4(void) = Call[operator delete] : func:r2038_1, 0:r2038_3 +# 2038| m2038_5(unknown) = ^CallSideEffect : ~m2036_6 +# 2038| m2038_6(unknown) = Chi : total:m2036_6, partial:m2038_5 +# 2039| v2039_1(void) = NoOp : +# 2035| v2035_5(void) = ReturnVoid : +# 2035| v2035_6(void) = AliasedUse : ~m2038_6 +# 2035| v2035_7(void) = ExitFunction : -# 2039| void Base2::Base2() -# 2039| Block 0 -# 2039| v2039_1(void) = EnterFunction : -# 2039| m2039_2(unknown) = AliasedDefinition : -# 2039| m2039_3(unknown) = InitializeNonLocal : -# 2039| m2039_4(unknown) = Chi : total:m2039_2, partial:m2039_3 -# 2039| r2039_5(glval) = VariableAddress[#this] : -# 2039| m2039_6(glval) = InitializeParameter[#this] : &:r2039_5 -# 2039| r2039_7(glval) = Load[#this] : &:r2039_5, m2039_6 -# 2039| m2039_8(Base2) = InitializeIndirection[#this] : &:r2039_7 -# 2039| v2039_9(void) = NoOp : -# 2039| v2039_10(void) = ReturnIndirection[#this] : &:r2039_7, m2039_8 -# 2039| v2039_11(void) = ReturnVoid : -# 2039| v2039_12(void) = AliasedUse : m2039_3 -# 2039| v2039_13(void) = ExitFunction : - -# 2041| void Base2::operator delete(void*) +# 2041| void Base2::Base2() # 2041| Block 0 -# 2041| v2041_1(void) = EnterFunction : -# 2041| m2041_2(unknown) = AliasedDefinition : -# 2041| m2041_3(unknown) = InitializeNonLocal : -# 2041| m2041_4(unknown) = Chi : total:m2041_2, partial:m2041_3 -# 2041| r2041_5(glval) = VariableAddress[p] : -# 2041| m2041_6(void *) = InitializeParameter[p] : &:r2041_5 -# 2041| r2041_7(void *) = Load[p] : &:r2041_5, m2041_6 -# 2041| m2041_8(unknown) = InitializeIndirection[p] : &:r2041_7 -# 2042| v2042_1(void) = NoOp : -# 2041| v2041_9(void) = ReturnIndirection[p] : &:r2041_7, m2041_8 -# 2041| v2041_10(void) = ReturnVoid : -# 2041| v2041_11(void) = AliasedUse : m2041_3 -# 2041| v2041_12(void) = ExitFunction : +# 2041| v2041_1(void) = EnterFunction : +# 2041| m2041_2(unknown) = AliasedDefinition : +# 2041| m2041_3(unknown) = InitializeNonLocal : +# 2041| m2041_4(unknown) = Chi : total:m2041_2, partial:m2041_3 +# 2041| r2041_5(glval) = VariableAddress[#this] : +# 2041| m2041_6(glval) = InitializeParameter[#this] : &:r2041_5 +# 2041| r2041_7(glval) = Load[#this] : &:r2041_5, m2041_6 +# 2041| m2041_8(Base2) = InitializeIndirection[#this] : &:r2041_7 +# 2041| v2041_9(void) = NoOp : +# 2041| v2041_10(void) = ReturnIndirection[#this] : &:r2041_7, m2041_8 +# 2041| v2041_11(void) = ReturnVoid : +# 2041| v2041_12(void) = AliasedUse : m2041_3 +# 2041| v2041_13(void) = ExitFunction : -# 2043| void Base2::~Base2() +# 2043| void Base2::operator delete(void*) # 2043| Block 0 -# 2043| v2043_1(void) = EnterFunction : -# 2043| m2043_2(unknown) = AliasedDefinition : -# 2043| m2043_3(unknown) = InitializeNonLocal : -# 2043| m2043_4(unknown) = Chi : total:m2043_2, partial:m2043_3 -# 2043| r2043_5(glval) = VariableAddress[#this] : -# 2043| m2043_6(glval) = InitializeParameter[#this] : &:r2043_5 -# 2043| r2043_7(glval) = Load[#this] : &:r2043_5, m2043_6 -# 2043| m2043_8(Base2) = InitializeIndirection[#this] : &:r2043_7 -# 2043| v2043_9(void) = NoOp : -# 2043| v2043_10(void) = ReturnIndirection[#this] : &:r2043_7, m2043_8 -# 2043| v2043_11(void) = ReturnVoid : -# 2043| v2043_12(void) = AliasedUse : m2043_3 -# 2043| v2043_13(void) = ExitFunction : +# 2043| v2043_1(void) = EnterFunction : +# 2043| m2043_2(unknown) = AliasedDefinition : +# 2043| m2043_3(unknown) = InitializeNonLocal : +# 2043| m2043_4(unknown) = Chi : total:m2043_2, partial:m2043_3 +# 2043| r2043_5(glval) = VariableAddress[p] : +# 2043| m2043_6(void *) = InitializeParameter[p] : &:r2043_5 +# 2043| r2043_7(void *) = Load[p] : &:r2043_5, m2043_6 +# 2043| m2043_8(unknown) = InitializeIndirection[p] : &:r2043_7 +# 2044| v2044_1(void) = NoOp : +# 2043| v2043_9(void) = ReturnIndirection[p] : &:r2043_7, m2043_8 +# 2043| v2043_10(void) = ReturnVoid : +# 2043| v2043_11(void) = AliasedUse : m2043_3 +# 2043| v2043_12(void) = ExitFunction : -# 2046| void Derived2::Derived2() -# 2046| Block 0 -# 2046| v2046_1(void) = EnterFunction : -# 2046| m2046_2(unknown) = AliasedDefinition : -# 2046| m2046_3(unknown) = InitializeNonLocal : -# 2046| m2046_4(unknown) = Chi : total:m2046_2, partial:m2046_3 -# 2046| r2046_5(glval) = VariableAddress[#this] : -# 2046| m2046_6(glval) = InitializeParameter[#this] : &:r2046_5 -# 2046| r2046_7(glval) = Load[#this] : &:r2046_5, m2046_6 -# 2046| m2046_8(Derived2) = InitializeIndirection[#this] : &:r2046_7 -# 2046| r2046_9(glval) = ConvertToNonVirtualBase[Derived2 : Base2] : m2046_6 -# 2046| r2046_10(glval) = FunctionAddress[Base2] : -# 2046| v2046_11(void) = Call[Base2] : func:r2046_10, this:r2046_9 -# 2046| m2046_12(unknown) = ^CallSideEffect : ~m2046_4 -# 2046| m2046_13(unknown) = Chi : total:m2046_4, partial:m2046_12 -# 2046| m2046_14(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2046_9 -# 2046| m2046_15(unknown) = Chi : total:m2046_8, partial:m2046_14 -# 2046| v2046_16(void) = NoOp : -# 2046| v2046_17(void) = ReturnIndirection[#this] : &:r2046_7, m2046_15 -# 2046| v2046_18(void) = ReturnVoid : -# 2046| v2046_19(void) = AliasedUse : ~m2046_13 -# 2046| v2046_20(void) = ExitFunction : +# 2045| void Base2::~Base2() +# 2045| Block 0 +# 2045| v2045_1(void) = EnterFunction : +# 2045| m2045_2(unknown) = AliasedDefinition : +# 2045| m2045_3(unknown) = InitializeNonLocal : +# 2045| m2045_4(unknown) = Chi : total:m2045_2, partial:m2045_3 +# 2045| r2045_5(glval) = VariableAddress[#this] : +# 2045| m2045_6(glval) = InitializeParameter[#this] : &:r2045_5 +# 2045| r2045_7(glval) = Load[#this] : &:r2045_5, m2045_6 +# 2045| m2045_8(Base2) = InitializeIndirection[#this] : &:r2045_7 +# 2045| v2045_9(void) = NoOp : +# 2045| v2045_10(void) = ReturnIndirection[#this] : &:r2045_7, m2045_8 +# 2045| v2045_11(void) = ReturnVoid : +# 2045| v2045_12(void) = AliasedUse : m2045_3 +# 2045| v2045_13(void) = ExitFunction : -# 2049| void Derived2::~Derived2() -# 2049| Block 0 -# 2049| v2049_1(void) = EnterFunction : -# 2049| m2049_2(unknown) = AliasedDefinition : -# 2049| m2049_3(unknown) = InitializeNonLocal : -# 2049| m2049_4(unknown) = Chi : total:m2049_2, partial:m2049_3 -# 2049| r2049_5(glval) = VariableAddress[#this] : -# 2049| m2049_6(glval) = InitializeParameter[#this] : &:r2049_5 -# 2049| r2049_7(glval) = Load[#this] : &:r2049_5, m2049_6 -# 2049| m2049_8(Derived2) = InitializeIndirection[#this] : &:r2049_7 -# 2049| v2049_9(void) = NoOp : -# 2049| r2049_10(glval) = ConvertToNonVirtualBase[Derived2 : Base2] : m2049_6 -# 2049| r2049_11(glval) = FunctionAddress[~Base2] : -# 2049| v2049_12(void) = Call[~Base2] : func:r2049_11, this:r2049_10 -# 2049| m2049_13(unknown) = ^CallSideEffect : ~m2049_4 -# 2049| m2049_14(unknown) = Chi : total:m2049_4, partial:m2049_13 -# 2049| v2049_15(void) = ReturnIndirection[#this] : &:r2049_7, m2049_8 -# 2049| v2049_16(void) = ReturnVoid : -# 2049| v2049_17(void) = AliasedUse : ~m2049_14 -# 2049| v2049_18(void) = ExitFunction : +# 2048| void Derived2::Derived2() +# 2048| Block 0 +# 2048| v2048_1(void) = EnterFunction : +# 2048| m2048_2(unknown) = AliasedDefinition : +# 2048| m2048_3(unknown) = InitializeNonLocal : +# 2048| m2048_4(unknown) = Chi : total:m2048_2, partial:m2048_3 +# 2048| r2048_5(glval) = VariableAddress[#this] : +# 2048| m2048_6(glval) = InitializeParameter[#this] : &:r2048_5 +# 2048| r2048_7(glval) = Load[#this] : &:r2048_5, m2048_6 +# 2048| m2048_8(Derived2) = InitializeIndirection[#this] : &:r2048_7 +# 2048| r2048_9(glval) = ConvertToNonVirtualBase[Derived2 : Base2] : m2048_6 +# 2048| r2048_10(glval) = FunctionAddress[Base2] : +# 2048| v2048_11(void) = Call[Base2] : func:r2048_10, this:r2048_9 +# 2048| m2048_12(unknown) = ^CallSideEffect : ~m2048_4 +# 2048| m2048_13(unknown) = Chi : total:m2048_4, partial:m2048_12 +# 2048| m2048_14(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2048_9 +# 2048| m2048_15(unknown) = Chi : total:m2048_8, partial:m2048_14 +# 2048| v2048_16(void) = NoOp : +# 2048| v2048_17(void) = ReturnIndirection[#this] : &:r2048_7, m2048_15 +# 2048| v2048_18(void) = ReturnVoid : +# 2048| v2048_19(void) = AliasedUse : ~m2048_13 +# 2048| v2048_20(void) = ExitFunction : -# 2051| void Derived2::operator delete(void*) +# 2051| void Derived2::~Derived2() # 2051| Block 0 -# 2051| v2051_1(void) = EnterFunction : -# 2051| m2051_2(unknown) = AliasedDefinition : -# 2051| m2051_3(unknown) = InitializeNonLocal : -# 2051| m2051_4(unknown) = Chi : total:m2051_2, partial:m2051_3 -# 2051| r2051_5(glval) = VariableAddress[p] : -# 2051| m2051_6(void *) = InitializeParameter[p] : &:r2051_5 -# 2051| r2051_7(void *) = Load[p] : &:r2051_5, m2051_6 -# 2051| m2051_8(unknown) = InitializeIndirection[p] : &:r2051_7 -# 2052| v2052_1(void) = NoOp : -# 2051| v2051_9(void) = ReturnIndirection[p] : &:r2051_7, m2051_8 -# 2051| v2051_10(void) = ReturnVoid : -# 2051| v2051_11(void) = AliasedUse : m2051_3 -# 2051| v2051_12(void) = ExitFunction : +# 2051| v2051_1(void) = EnterFunction : +# 2051| m2051_2(unknown) = AliasedDefinition : +# 2051| m2051_3(unknown) = InitializeNonLocal : +# 2051| m2051_4(unknown) = Chi : total:m2051_2, partial:m2051_3 +# 2051| r2051_5(glval) = VariableAddress[#this] : +# 2051| m2051_6(glval) = InitializeParameter[#this] : &:r2051_5 +# 2051| r2051_7(glval) = Load[#this] : &:r2051_5, m2051_6 +# 2051| m2051_8(Derived2) = InitializeIndirection[#this] : &:r2051_7 +# 2051| v2051_9(void) = NoOp : +# 2051| r2051_10(glval) = ConvertToNonVirtualBase[Derived2 : Base2] : m2051_6 +# 2051| r2051_11(glval) = FunctionAddress[~Base2] : +# 2051| v2051_12(void) = Call[~Base2] : func:r2051_11, this:r2051_10 +# 2051| m2051_13(unknown) = ^CallSideEffect : ~m2051_4 +# 2051| m2051_14(unknown) = Chi : total:m2051_4, partial:m2051_13 +# 2051| v2051_15(void) = ReturnIndirection[#this] : &:r2051_7, m2051_8 +# 2051| v2051_16(void) = ReturnVoid : +# 2051| v2051_17(void) = AliasedUse : ~m2051_14 +# 2051| v2051_18(void) = ExitFunction : -# 2056| int virtual_delete() -# 2056| Block 0 -# 2056| v2056_1(void) = EnterFunction : -# 2056| m2056_2(unknown) = AliasedDefinition : -# 2056| m2056_3(unknown) = InitializeNonLocal : -# 2056| m2056_4(unknown) = Chi : total:m2056_2, partial:m2056_3 -# 2058| r2058_1(glval) = VariableAddress[b1] : -# 2058| r2058_2(glval) = FunctionAddress[operator new] : -# 2058| r2058_3(unsigned long) = Constant[8] : -# 2058| r2058_4(void *) = Call[operator new] : func:r2058_2, 0:r2058_3 -# 2058| m2058_5(unknown) = ^CallSideEffect : ~m2056_4 -# 2058| m2058_6(unknown) = Chi : total:m2056_4, partial:m2058_5 -# 2058| m2058_7(unknown) = ^InitializeDynamicAllocation : &:r2058_4 -# 2058| r2058_8(Base2 *) = Convert : r2058_4 -# 2058| r2058_9(glval) = FunctionAddress[Base2] : -# 2058| v2058_10(void) = Call[Base2] : func:r2058_9, this:r2058_8 -# 2058| m2058_11(unknown) = ^CallSideEffect : ~m2058_6 -# 2058| m2058_12(unknown) = Chi : total:m2058_6, partial:m2058_11 -# 2058| m2058_13(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2058_8 -# 2058| m2058_14(unknown) = Chi : total:m2058_7, partial:m2058_13 -# 2058| m2058_15(Base2 *) = Store[b1] : &:r2058_1, r2058_8 -# 2059| r2059_1(glval) = VirtualDeleteFunctionAddress : -# 2059| r2059_2(glval) = VariableAddress[b1] : -# 2059| r2059_3(Base2 *) = Load[b1] : &:r2059_2, m2058_15 -# 2059| v2059_4(void) = Call[?] : func:r2059_1, 0:r2059_3 -# 2059| m2059_5(unknown) = ^CallSideEffect : ~m2058_12 -# 2059| m2059_6(unknown) = Chi : total:m2058_12, partial:m2059_5 -# 2061| r2061_1(glval) = VariableAddress[b2] : -# 2061| r2061_2(glval) = FunctionAddress[operator new] : -# 2061| r2061_3(unsigned long) = Constant[16] : -# 2061| r2061_4(void *) = Call[operator new] : func:r2061_2, 0:r2061_3 -# 2061| m2061_5(unknown) = ^CallSideEffect : ~m2059_6 -# 2061| m2061_6(unknown) = Chi : total:m2059_6, partial:m2061_5 -# 2061| m2061_7(unknown) = ^InitializeDynamicAllocation : &:r2061_4 -# 2061| r2061_8(Derived2 *) = Convert : r2061_4 -# 2061| r2061_9(glval) = FunctionAddress[Derived2] : -# 2061| v2061_10(void) = Call[Derived2] : func:r2061_9, this:r2061_8 -# 2061| m2061_11(unknown) = ^CallSideEffect : ~m2061_6 -# 2061| m2061_12(unknown) = Chi : total:m2061_6, partial:m2061_11 -# 2061| m2061_13(Derived2) = ^IndirectMayWriteSideEffect[-1] : &:r2061_8 -# 2061| m2061_14(unknown) = Chi : total:m2061_7, partial:m2061_13 -# 2061| r2061_15(Base2 *) = ConvertToNonVirtualBase[Derived2 : Base2] : r2061_8 -# 2061| m2061_16(Base2 *) = Store[b2] : &:r2061_1, r2061_15 -# 2062| r2062_1(glval) = VirtualDeleteFunctionAddress : -# 2062| r2062_2(glval) = VariableAddress[b2] : -# 2062| r2062_3(Base2 *) = Load[b2] : &:r2062_2, m2061_16 -# 2062| v2062_4(void) = Call[?] : func:r2062_1, 0:r2062_3 -# 2062| m2062_5(unknown) = ^CallSideEffect : ~m2061_12 -# 2062| m2062_6(unknown) = Chi : total:m2061_12, partial:m2062_5 -# 2064| r2064_1(glval) = VariableAddress[d] : -# 2064| r2064_2(glval) = FunctionAddress[operator new] : -# 2064| r2064_3(unsigned long) = Constant[16] : -# 2064| r2064_4(void *) = Call[operator new] : func:r2064_2, 0:r2064_3 -# 2064| m2064_5(unknown) = ^CallSideEffect : ~m2062_6 -# 2064| m2064_6(unknown) = Chi : total:m2062_6, partial:m2064_5 -# 2064| m2064_7(unknown) = ^InitializeDynamicAllocation : &:r2064_4 -# 2064| r2064_8(Derived2 *) = Convert : r2064_4 -# 2064| r2064_9(glval) = FunctionAddress[Derived2] : -# 2064| v2064_10(void) = Call[Derived2] : func:r2064_9, this:r2064_8 -# 2064| m2064_11(unknown) = ^CallSideEffect : ~m2064_6 -# 2064| m2064_12(unknown) = Chi : total:m2064_6, partial:m2064_11 -# 2064| m2064_13(Derived2) = ^IndirectMayWriteSideEffect[-1] : &:r2064_8 -# 2064| m2064_14(unknown) = Chi : total:m2064_7, partial:m2064_13 -# 2064| m2064_15(Derived2 *) = Store[d] : &:r2064_1, r2064_8 -# 2065| r2065_1(glval) = VirtualDeleteFunctionAddress : -# 2065| r2065_2(glval) = VariableAddress[d] : -# 2065| r2065_3(Derived2 *) = Load[d] : &:r2065_2, m2064_15 -# 2065| v2065_4(void) = Call[?] : func:r2065_1, 0:r2065_3 -# 2065| m2065_5(unknown) = ^CallSideEffect : ~m2064_12 -# 2065| m2065_6(unknown) = Chi : total:m2064_12, partial:m2065_5 -# 2066| r2066_1(glval) = VariableAddress[#return] : -# 2066| m2066_2(int) = Uninitialized[#return] : &:r2066_1 -# 2056| r2056_5(glval) = VariableAddress[#return] : -# 2056| v2056_6(void) = ReturnValue : &:r2056_5, m2066_2 -# 2056| v2056_7(void) = AliasedUse : ~m2065_6 -# 2056| v2056_8(void) = ExitFunction : +# 2053| void Derived2::operator delete(void*) +# 2053| Block 0 +# 2053| v2053_1(void) = EnterFunction : +# 2053| m2053_2(unknown) = AliasedDefinition : +# 2053| m2053_3(unknown) = InitializeNonLocal : +# 2053| m2053_4(unknown) = Chi : total:m2053_2, partial:m2053_3 +# 2053| r2053_5(glval) = VariableAddress[p] : +# 2053| m2053_6(void *) = InitializeParameter[p] : &:r2053_5 +# 2053| r2053_7(void *) = Load[p] : &:r2053_5, m2053_6 +# 2053| m2053_8(unknown) = InitializeIndirection[p] : &:r2053_7 +# 2054| v2054_1(void) = NoOp : +# 2053| v2053_9(void) = ReturnIndirection[p] : &:r2053_7, m2053_8 +# 2053| v2053_10(void) = ReturnVoid : +# 2053| v2053_11(void) = AliasedUse : m2053_3 +# 2053| v2053_12(void) = ExitFunction : -# 2070| void test_constant_folding() -# 2070| Block 0 -# 2070| v2070_1(void) = EnterFunction : -# 2070| m2070_2(unknown) = AliasedDefinition : -# 2070| m2070_3(unknown) = InitializeNonLocal : -# 2070| m2070_4(unknown) = Chi : total:m2070_2, partial:m2070_3 -# 2071| r2071_1(glval) = VariableAddress[x] : -# 2071| r2071_2(int) = Constant[116] : -# 2071| m2071_3(int) = Store[x] : &:r2071_1, r2071_2 -# 2072| r2072_1(glval) = FunctionAddress[test_constant_folding_use] : -# 2072| r2072_2(int) = Constant[116] : -# 2072| v2072_3(void) = Call[test_constant_folding_use] : func:r2072_1, 0:r2072_2 -# 2072| m2072_4(unknown) = ^CallSideEffect : ~m2070_4 -# 2072| m2072_5(unknown) = Chi : total:m2070_4, partial:m2072_4 -# 2073| v2073_1(void) = NoOp : -# 2070| v2070_5(void) = ReturnVoid : -# 2070| v2070_6(void) = AliasedUse : ~m2072_5 -# 2070| v2070_7(void) = ExitFunction : +# 2058| int virtual_delete() +# 2058| Block 0 +# 2058| v2058_1(void) = EnterFunction : +# 2058| m2058_2(unknown) = AliasedDefinition : +# 2058| m2058_3(unknown) = InitializeNonLocal : +# 2058| m2058_4(unknown) = Chi : total:m2058_2, partial:m2058_3 +# 2060| r2060_1(glval) = VariableAddress[b1] : +# 2060| r2060_2(glval) = FunctionAddress[operator new] : +# 2060| r2060_3(unsigned long) = Constant[8] : +# 2060| r2060_4(void *) = Call[operator new] : func:r2060_2, 0:r2060_3 +# 2060| m2060_5(unknown) = ^CallSideEffect : ~m2058_4 +# 2060| m2060_6(unknown) = Chi : total:m2058_4, partial:m2060_5 +# 2060| m2060_7(unknown) = ^InitializeDynamicAllocation : &:r2060_4 +# 2060| r2060_8(Base2 *) = Convert : r2060_4 +# 2060| r2060_9(glval) = FunctionAddress[Base2] : +# 2060| v2060_10(void) = Call[Base2] : func:r2060_9, this:r2060_8 +# 2060| m2060_11(unknown) = ^CallSideEffect : ~m2060_6 +# 2060| m2060_12(unknown) = Chi : total:m2060_6, partial:m2060_11 +# 2060| m2060_13(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2060_8 +# 2060| m2060_14(unknown) = Chi : total:m2060_7, partial:m2060_13 +# 2060| m2060_15(Base2 *) = Store[b1] : &:r2060_1, r2060_8 +# 2061| r2061_1(glval) = VirtualDeleteFunctionAddress : +# 2061| r2061_2(glval) = VariableAddress[b1] : +# 2061| r2061_3(Base2 *) = Load[b1] : &:r2061_2, m2060_15 +# 2061| v2061_4(void) = Call[?] : func:r2061_1, 0:r2061_3 +# 2061| m2061_5(unknown) = ^CallSideEffect : ~m2060_12 +# 2061| m2061_6(unknown) = Chi : total:m2060_12, partial:m2061_5 +# 2063| r2063_1(glval) = VariableAddress[b2] : +# 2063| r2063_2(glval) = FunctionAddress[operator new] : +# 2063| r2063_3(unsigned long) = Constant[16] : +# 2063| r2063_4(void *) = Call[operator new] : func:r2063_2, 0:r2063_3 +# 2063| m2063_5(unknown) = ^CallSideEffect : ~m2061_6 +# 2063| m2063_6(unknown) = Chi : total:m2061_6, partial:m2063_5 +# 2063| m2063_7(unknown) = ^InitializeDynamicAllocation : &:r2063_4 +# 2063| r2063_8(Derived2 *) = Convert : r2063_4 +# 2063| r2063_9(glval) = FunctionAddress[Derived2] : +# 2063| v2063_10(void) = Call[Derived2] : func:r2063_9, this:r2063_8 +# 2063| m2063_11(unknown) = ^CallSideEffect : ~m2063_6 +# 2063| m2063_12(unknown) = Chi : total:m2063_6, partial:m2063_11 +# 2063| m2063_13(Derived2) = ^IndirectMayWriteSideEffect[-1] : &:r2063_8 +# 2063| m2063_14(unknown) = Chi : total:m2063_7, partial:m2063_13 +# 2063| r2063_15(Base2 *) = ConvertToNonVirtualBase[Derived2 : Base2] : r2063_8 +# 2063| m2063_16(Base2 *) = Store[b2] : &:r2063_1, r2063_15 +# 2064| r2064_1(glval) = VirtualDeleteFunctionAddress : +# 2064| r2064_2(glval) = VariableAddress[b2] : +# 2064| r2064_3(Base2 *) = Load[b2] : &:r2064_2, m2063_16 +# 2064| v2064_4(void) = Call[?] : func:r2064_1, 0:r2064_3 +# 2064| m2064_5(unknown) = ^CallSideEffect : ~m2063_12 +# 2064| m2064_6(unknown) = Chi : total:m2063_12, partial:m2064_5 +# 2066| r2066_1(glval) = VariableAddress[d] : +# 2066| r2066_2(glval) = FunctionAddress[operator new] : +# 2066| r2066_3(unsigned long) = Constant[16] : +# 2066| r2066_4(void *) = Call[operator new] : func:r2066_2, 0:r2066_3 +# 2066| m2066_5(unknown) = ^CallSideEffect : ~m2064_6 +# 2066| m2066_6(unknown) = Chi : total:m2064_6, partial:m2066_5 +# 2066| m2066_7(unknown) = ^InitializeDynamicAllocation : &:r2066_4 +# 2066| r2066_8(Derived2 *) = Convert : r2066_4 +# 2066| r2066_9(glval) = FunctionAddress[Derived2] : +# 2066| v2066_10(void) = Call[Derived2] : func:r2066_9, this:r2066_8 +# 2066| m2066_11(unknown) = ^CallSideEffect : ~m2066_6 +# 2066| m2066_12(unknown) = Chi : total:m2066_6, partial:m2066_11 +# 2066| m2066_13(Derived2) = ^IndirectMayWriteSideEffect[-1] : &:r2066_8 +# 2066| m2066_14(unknown) = Chi : total:m2066_7, partial:m2066_13 +# 2066| m2066_15(Derived2 *) = Store[d] : &:r2066_1, r2066_8 +# 2067| r2067_1(glval) = VirtualDeleteFunctionAddress : +# 2067| r2067_2(glval) = VariableAddress[d] : +# 2067| r2067_3(Derived2 *) = Load[d] : &:r2067_2, m2066_15 +# 2067| v2067_4(void) = Call[?] : func:r2067_1, 0:r2067_3 +# 2067| m2067_5(unknown) = ^CallSideEffect : ~m2066_12 +# 2067| m2067_6(unknown) = Chi : total:m2066_12, partial:m2067_5 +# 2068| r2068_1(glval) = VariableAddress[#return] : +# 2068| m2068_2(int) = Uninitialized[#return] : &:r2068_1 +# 2058| r2058_5(glval) = VariableAddress[#return] : +# 2058| v2058_6(void) = ReturnValue : &:r2058_5, m2068_2 +# 2058| v2058_7(void) = AliasedUse : ~m2067_6 +# 2058| v2058_8(void) = ExitFunction : -# 2077| int NonExit() -# 2077| Block 0 -# 2077| v2077_1(void) = EnterFunction : -# 2077| m2077_2(unknown) = AliasedDefinition : -# 2077| m2077_3(unknown) = InitializeNonLocal : -# 2077| m2077_4(unknown) = Chi : total:m2077_2, partial:m2077_3 -# 2078| r2078_1(glval) = VariableAddress[x] : -# 2078| r2078_2(glval) = FunctionAddress[Add] : -# 2078| r2078_3(int) = Constant[3] : -# 2078| r2078_4(int) = Constant[4] : -# 2078| r2078_5(int) = Call[Add] : func:r2078_2, 0:r2078_3, 1:r2078_4 -# 2078| m2078_6(unknown) = ^CallSideEffect : ~m2077_4 -# 2078| m2078_7(unknown) = Chi : total:m2077_4, partial:m2078_6 -# 2078| m2078_8(int) = Store[x] : &:r2078_1, r2078_5 -# 2079| r2079_1(glval) = VariableAddress[x] : -# 2079| r2079_2(int) = Load[x] : &:r2079_1, m2078_8 -# 2079| r2079_3(int) = Constant[7] : -# 2079| r2079_4(bool) = CompareEQ : r2079_2, r2079_3 -# 2079| v2079_5(void) = ConditionalBranch : r2079_4 +# 2072| void test_constant_folding() +# 2072| Block 0 +# 2072| v2072_1(void) = EnterFunction : +# 2072| m2072_2(unknown) = AliasedDefinition : +# 2072| m2072_3(unknown) = InitializeNonLocal : +# 2072| m2072_4(unknown) = Chi : total:m2072_2, partial:m2072_3 +# 2073| r2073_1(glval) = VariableAddress[x] : +# 2073| r2073_2(int) = Constant[116] : +# 2073| m2073_3(int) = Store[x] : &:r2073_1, r2073_2 +# 2074| r2074_1(glval) = FunctionAddress[test_constant_folding_use] : +# 2074| r2074_2(int) = Constant[116] : +# 2074| v2074_3(void) = Call[test_constant_folding_use] : func:r2074_1, 0:r2074_2 +# 2074| m2074_4(unknown) = ^CallSideEffect : ~m2072_4 +# 2074| m2074_5(unknown) = Chi : total:m2072_4, partial:m2074_4 +# 2075| v2075_1(void) = NoOp : +# 2072| v2072_5(void) = ReturnVoid : +# 2072| v2072_6(void) = AliasedUse : ~m2074_5 +# 2072| v2072_7(void) = ExitFunction : + +# 2079| int NonExit() +# 2079| Block 0 +# 2079| v2079_1(void) = EnterFunction : +# 2079| m2079_2(unknown) = AliasedDefinition : +# 2079| m2079_3(unknown) = InitializeNonLocal : +# 2079| m2079_4(unknown) = Chi : total:m2079_2, partial:m2079_3 +# 2080| r2080_1(glval) = VariableAddress[x] : +# 2080| r2080_2(glval) = FunctionAddress[Add] : +# 2080| r2080_3(int) = Constant[3] : +# 2080| r2080_4(int) = Constant[4] : +# 2080| r2080_5(int) = Call[Add] : func:r2080_2, 0:r2080_3, 1:r2080_4 +# 2080| m2080_6(unknown) = ^CallSideEffect : ~m2079_4 +# 2080| m2080_7(unknown) = Chi : total:m2079_4, partial:m2080_6 +# 2080| m2080_8(int) = Store[x] : &:r2080_1, r2080_5 +# 2081| r2081_1(glval) = VariableAddress[x] : +# 2081| r2081_2(int) = Load[x] : &:r2081_1, m2080_8 +# 2081| r2081_3(int) = Constant[7] : +# 2081| r2081_4(bool) = CompareEQ : r2081_2, r2081_3 +# 2081| v2081_5(void) = ConditionalBranch : r2081_4 #-----| False -> Block 2 #-----| True -> Block 1 -# 2080| Block 1 -# 2080| r2080_1(glval) = FunctionAddress[exit] : -# 2080| r2080_2(int) = Constant[3] : -# 2080| v2080_3(void) = Call[exit] : func:r2080_1, 0:r2080_2 -# 2080| m2080_4(unknown) = ^CallSideEffect : ~m2078_7 -# 2080| m2080_5(unknown) = Chi : total:m2078_7, partial:m2080_4 -# 2077| v2077_5(void) = Unreached : +# 2082| Block 1 +# 2082| r2082_1(glval) = FunctionAddress[exit] : +# 2082| r2082_2(int) = Constant[3] : +# 2082| v2082_3(void) = Call[exit] : func:r2082_1, 0:r2082_2 +# 2082| m2082_4(unknown) = ^CallSideEffect : ~m2080_7 +# 2082| m2082_5(unknown) = Chi : total:m2080_7, partial:m2082_4 +# 2079| v2079_5(void) = Unreached : -# 2081| Block 2 -# 2081| r2081_1(glval) = FunctionAddress[VoidFunc] : -# 2081| v2081_2(void) = Call[VoidFunc] : func:r2081_1 -# 2081| m2081_3(unknown) = ^CallSideEffect : ~m2078_7 -# 2081| m2081_4(unknown) = Chi : total:m2078_7, partial:m2081_3 -# 2082| r2082_1(glval) = VariableAddress[#return] : -# 2082| r2082_2(glval) = VariableAddress[x] : -# 2082| r2082_3(int) = Load[x] : &:r2082_2, m2078_8 -# 2082| m2082_4(int) = Store[#return] : &:r2082_1, r2082_3 -# 2077| r2077_6(glval) = VariableAddress[#return] : -# 2077| v2077_7(void) = ReturnValue : &:r2077_6, m2082_4 -# 2077| v2077_8(void) = AliasedUse : ~m2081_4 -# 2077| v2077_9(void) = ExitFunction : +# 2083| Block 2 +# 2083| r2083_1(glval) = FunctionAddress[VoidFunc] : +# 2083| v2083_2(void) = Call[VoidFunc] : func:r2083_1 +# 2083| m2083_3(unknown) = ^CallSideEffect : ~m2080_7 +# 2083| m2083_4(unknown) = Chi : total:m2080_7, partial:m2083_3 +# 2084| r2084_1(glval) = VariableAddress[#return] : +# 2084| r2084_2(glval) = VariableAddress[x] : +# 2084| r2084_3(int) = Load[x] : &:r2084_2, m2080_8 +# 2084| m2084_4(int) = Store[#return] : &:r2084_1, r2084_3 +# 2079| r2079_6(glval) = VariableAddress[#return] : +# 2079| v2079_7(void) = ReturnValue : &:r2079_6, m2084_4 +# 2079| v2079_8(void) = AliasedUse : ~m2083_4 +# 2079| v2079_9(void) = ExitFunction : -# 2085| void CallsNonExit() -# 2085| Block 0 -# 2085| v2085_1(void) = EnterFunction : -# 2085| m2085_2(unknown) = AliasedDefinition : -# 2085| m2085_3(unknown) = InitializeNonLocal : -# 2085| m2085_4(unknown) = Chi : total:m2085_2, partial:m2085_3 -# 2086| r2086_1(glval) = FunctionAddress[VoidFunc] : -# 2086| v2086_2(void) = Call[VoidFunc] : func:r2086_1 -# 2086| m2086_3(unknown) = ^CallSideEffect : ~m2085_4 -# 2086| m2086_4(unknown) = Chi : total:m2085_4, partial:m2086_3 -# 2087| r2087_1(glval) = FunctionAddress[exit] : -# 2087| r2087_2(int) = Constant[3] : -# 2087| v2087_3(void) = Call[exit] : func:r2087_1, 0:r2087_2 -# 2087| m2087_4(unknown) = ^CallSideEffect : ~m2086_4 -# 2087| m2087_5(unknown) = Chi : total:m2086_4, partial:m2087_4 -# 2085| v2085_5(void) = Unreached : +# 2087| void CallsNonExit() +# 2087| Block 0 +# 2087| v2087_1(void) = EnterFunction : +# 2087| m2087_2(unknown) = AliasedDefinition : +# 2087| m2087_3(unknown) = InitializeNonLocal : +# 2087| m2087_4(unknown) = Chi : total:m2087_2, partial:m2087_3 +# 2088| r2088_1(glval) = FunctionAddress[VoidFunc] : +# 2088| v2088_2(void) = Call[VoidFunc] : func:r2088_1 +# 2088| m2088_3(unknown) = ^CallSideEffect : ~m2087_4 +# 2088| m2088_4(unknown) = Chi : total:m2087_4, partial:m2088_3 +# 2089| r2089_1(glval) = FunctionAddress[exit] : +# 2089| r2089_2(int) = Constant[3] : +# 2089| v2089_3(void) = Call[exit] : func:r2089_1, 0:r2089_2 +# 2089| m2089_4(unknown) = ^CallSideEffect : ~m2088_4 +# 2089| m2089_5(unknown) = Chi : total:m2088_4, partial:m2089_4 +# 2087| v2087_5(void) = Unreached : -# 2090| int TransNonExit() -# 2090| Block 0 -# 2090| v2090_1(void) = EnterFunction : -# 2090| m2090_2(unknown) = AliasedDefinition : -# 2090| m2090_3(unknown) = InitializeNonLocal : -# 2090| m2090_4(unknown) = Chi : total:m2090_2, partial:m2090_3 -# 2091| r2091_1(glval) = VariableAddress[x] : -# 2091| r2091_2(glval) = FunctionAddress[Add] : -# 2091| r2091_3(int) = Constant[3] : -# 2091| r2091_4(int) = Constant[4] : -# 2091| r2091_5(int) = Call[Add] : func:r2091_2, 0:r2091_3, 1:r2091_4 -# 2091| m2091_6(unknown) = ^CallSideEffect : ~m2090_4 -# 2091| m2091_7(unknown) = Chi : total:m2090_4, partial:m2091_6 -# 2091| m2091_8(int) = Store[x] : &:r2091_1, r2091_5 -# 2092| r2092_1(glval) = VariableAddress[x] : -# 2092| r2092_2(int) = Load[x] : &:r2092_1, m2091_8 -# 2092| r2092_3(int) = Constant[7] : -# 2092| r2092_4(bool) = CompareEQ : r2092_2, r2092_3 -# 2092| v2092_5(void) = ConditionalBranch : r2092_4 +# 2092| int TransNonExit() +# 2092| Block 0 +# 2092| v2092_1(void) = EnterFunction : +# 2092| m2092_2(unknown) = AliasedDefinition : +# 2092| m2092_3(unknown) = InitializeNonLocal : +# 2092| m2092_4(unknown) = Chi : total:m2092_2, partial:m2092_3 +# 2093| r2093_1(glval) = VariableAddress[x] : +# 2093| r2093_2(glval) = FunctionAddress[Add] : +# 2093| r2093_3(int) = Constant[3] : +# 2093| r2093_4(int) = Constant[4] : +# 2093| r2093_5(int) = Call[Add] : func:r2093_2, 0:r2093_3, 1:r2093_4 +# 2093| m2093_6(unknown) = ^CallSideEffect : ~m2092_4 +# 2093| m2093_7(unknown) = Chi : total:m2092_4, partial:m2093_6 +# 2093| m2093_8(int) = Store[x] : &:r2093_1, r2093_5 +# 2094| r2094_1(glval) = VariableAddress[x] : +# 2094| r2094_2(int) = Load[x] : &:r2094_1, m2093_8 +# 2094| r2094_3(int) = Constant[7] : +# 2094| r2094_4(bool) = CompareEQ : r2094_2, r2094_3 +# 2094| v2094_5(void) = ConditionalBranch : r2094_4 #-----| False -> Block 2 #-----| True -> Block 1 -# 2093| Block 1 -# 2093| r2093_1(glval) = FunctionAddress[CallsNonExit] : -# 2093| v2093_2(void) = Call[CallsNonExit] : func:r2093_1 -# 2090| v2090_5(void) = Unreached : +# 2095| Block 1 +# 2095| r2095_1(glval) = FunctionAddress[CallsNonExit] : +# 2095| v2095_2(void) = Call[CallsNonExit] : func:r2095_1 +# 2092| v2092_5(void) = Unreached : -# 2094| Block 2 -# 2094| r2094_1(glval) = FunctionAddress[VoidFunc] : -# 2094| v2094_2(void) = Call[VoidFunc] : func:r2094_1 -# 2094| m2094_3(unknown) = ^CallSideEffect : ~m2091_7 -# 2094| m2094_4(unknown) = Chi : total:m2091_7, partial:m2094_3 -# 2095| r2095_1(glval) = VariableAddress[#return] : -# 2095| r2095_2(glval) = VariableAddress[x] : -# 2095| r2095_3(int) = Load[x] : &:r2095_2, m2091_8 -# 2095| m2095_4(int) = Store[#return] : &:r2095_1, r2095_3 -# 2090| r2090_6(glval) = VariableAddress[#return] : -# 2090| v2090_7(void) = ReturnValue : &:r2090_6, m2095_4 -# 2090| v2090_8(void) = AliasedUse : ~m2094_4 -# 2090| v2090_9(void) = ExitFunction : +# 2096| Block 2 +# 2096| r2096_1(glval) = FunctionAddress[VoidFunc] : +# 2096| v2096_2(void) = Call[VoidFunc] : func:r2096_1 +# 2096| m2096_3(unknown) = ^CallSideEffect : ~m2093_7 +# 2096| m2096_4(unknown) = Chi : total:m2093_7, partial:m2096_3 +# 2097| r2097_1(glval) = VariableAddress[#return] : +# 2097| r2097_2(glval) = VariableAddress[x] : +# 2097| r2097_3(int) = Load[x] : &:r2097_2, m2093_8 +# 2097| m2097_4(int) = Store[#return] : &:r2097_1, r2097_3 +# 2092| r2092_6(glval) = VariableAddress[#return] : +# 2092| v2092_7(void) = ReturnValue : &:r2092_6, m2097_4 +# 2092| v2092_8(void) = AliasedUse : ~m2096_4 +# 2092| v2092_9(void) = ExitFunction : -# 2098| void newArrayCorrectType(size_t) -# 2098| Block 0 -# 2098| v2098_1(void) = EnterFunction : -# 2098| m2098_2(unknown) = AliasedDefinition : -# 2098| m2098_3(unknown) = InitializeNonLocal : -# 2098| m2098_4(unknown) = Chi : total:m2098_2, partial:m2098_3 -# 2098| r2098_5(glval) = VariableAddress[n] : -# 2098| m2098_6(unsigned long) = InitializeParameter[n] : &:r2098_5 -# 2099| r2099_1(glval) = FunctionAddress[operator new[]] : -# 2099| r2099_2(glval) = VariableAddress[n] : -# 2099| r2099_3(unsigned long) = Load[n] : &:r2099_2, m2098_6 -# 2099| r2099_4(unsigned long) = Constant[4] : -# 2099| r2099_5(unsigned long) = Mul : r2099_3, r2099_4 -# 2099| r2099_6(void *) = Call[operator new[]] : func:r2099_1, 0:r2099_5 -# 2099| m2099_7(unknown) = ^CallSideEffect : ~m2098_4 -# 2099| m2099_8(unknown) = Chi : total:m2098_4, partial:m2099_7 -# 2099| m2099_9(unknown) = ^InitializeDynamicAllocation : &:r2099_6 -# 2099| r2099_10(int *) = Convert : r2099_6 -# 2100| r2100_1(glval) = FunctionAddress[operator new[]] : -# 2100| r2100_2(glval) = VariableAddress[n] : -# 2100| r2100_3(unsigned long) = Load[n] : &:r2100_2, m2098_6 -# 2100| r2100_4(unsigned long) = Constant[4] : -# 2100| r2100_5(unsigned long) = Mul : r2100_3, r2100_4 -# 2100| r2100_6(float) = Constant[1.0] : -# 2100| r2100_7(void *) = Call[operator new[]] : func:r2100_1, 0:r2100_5, 1:r2100_6 -# 2100| m2100_8(unknown) = ^CallSideEffect : ~m2099_8 -# 2100| m2100_9(unknown) = Chi : total:m2099_8, partial:m2100_8 -# 2100| m2100_10(unknown) = ^InitializeDynamicAllocation : &:r2100_7 -# 2100| r2100_11(int *) = Convert : r2100_7 +# 2100| void newArrayCorrectType(size_t) +# 2100| Block 0 +# 2100| v2100_1(void) = EnterFunction : +# 2100| m2100_2(unknown) = AliasedDefinition : +# 2100| m2100_3(unknown) = InitializeNonLocal : +# 2100| m2100_4(unknown) = Chi : total:m2100_2, partial:m2100_3 +# 2100| r2100_5(glval) = VariableAddress[n] : +# 2100| m2100_6(unsigned long) = InitializeParameter[n] : &:r2100_5 # 2101| r2101_1(glval) = FunctionAddress[operator new[]] : # 2101| r2101_2(glval) = VariableAddress[n] : -# 2101| r2101_3(unsigned long) = Load[n] : &:r2101_2, m2098_6 -# 2101| r2101_4(unsigned long) = Constant[8] : +# 2101| r2101_3(unsigned long) = Load[n] : &:r2101_2, m2100_6 +# 2101| r2101_4(unsigned long) = Constant[4] : # 2101| r2101_5(unsigned long) = Mul : r2101_3, r2101_4 # 2101| r2101_6(void *) = Call[operator new[]] : func:r2101_1, 0:r2101_5 -# 2101| m2101_7(unknown) = ^CallSideEffect : ~m2100_9 -# 2101| m2101_8(unknown) = Chi : total:m2100_9, partial:m2101_7 +# 2101| m2101_7(unknown) = ^CallSideEffect : ~m2100_4 +# 2101| m2101_8(unknown) = Chi : total:m2100_4, partial:m2101_7 # 2101| m2101_9(unknown) = ^InitializeDynamicAllocation : &:r2101_6 -# 2101| r2101_10(String *) = Convert : r2101_6 +# 2101| r2101_10(int *) = Convert : r2101_6 # 2102| r2102_1(glval) = FunctionAddress[operator new[]] : # 2102| r2102_2(glval) = VariableAddress[n] : -# 2102| r2102_3(unsigned long) = Load[n] : &:r2102_2, m2098_6 -# 2102| r2102_4(unsigned long) = Constant[256] : +# 2102| r2102_3(unsigned long) = Load[n] : &:r2102_2, m2100_6 +# 2102| r2102_4(unsigned long) = Constant[4] : # 2102| r2102_5(unsigned long) = Mul : r2102_3, r2102_4 -# 2102| r2102_6(align_val_t) = Constant[128] : +# 2102| r2102_6(float) = Constant[1.0] : # 2102| r2102_7(void *) = Call[operator new[]] : func:r2102_1, 0:r2102_5, 1:r2102_6 # 2102| m2102_8(unknown) = ^CallSideEffect : ~m2101_8 # 2102| m2102_9(unknown) = Chi : total:m2101_8, partial:m2102_8 # 2102| m2102_10(unknown) = ^InitializeDynamicAllocation : &:r2102_7 -# 2102| r2102_11(Overaligned *) = Convert : r2102_7 +# 2102| r2102_11(int *) = Convert : r2102_7 # 2103| r2103_1(glval) = FunctionAddress[operator new[]] : # 2103| r2103_2(glval) = VariableAddress[n] : -# 2103| r2103_3(unsigned long) = Load[n] : &:r2103_2, m2098_6 -# 2103| r2103_4(unsigned long) = Constant[1] : +# 2103| r2103_3(unsigned long) = Load[n] : &:r2103_2, m2100_6 +# 2103| r2103_4(unsigned long) = Constant[8] : # 2103| r2103_5(unsigned long) = Mul : r2103_3, r2103_4 # 2103| r2103_6(void *) = Call[operator new[]] : func:r2103_1, 0:r2103_5 # 2103| m2103_7(unknown) = ^CallSideEffect : ~m2102_9 # 2103| m2103_8(unknown) = Chi : total:m2102_9, partial:m2103_7 # 2103| m2103_9(unknown) = ^InitializeDynamicAllocation : &:r2103_6 -# 2103| r2103_10(DefaultCtorWithDefaultParam *) = Convert : r2103_6 +# 2103| r2103_10(String *) = Convert : r2103_6 # 2104| r2104_1(glval) = FunctionAddress[operator new[]] : # 2104| r2104_2(glval) = VariableAddress[n] : -# 2104| r2104_3(unsigned long) = Load[n] : &:r2104_2, m2098_6 -# 2104| r2104_4(unsigned long) = Constant[4] : +# 2104| r2104_3(unsigned long) = Load[n] : &:r2104_2, m2100_6 +# 2104| r2104_4(unsigned long) = Constant[256] : # 2104| r2104_5(unsigned long) = Mul : r2104_3, r2104_4 -# 2104| r2104_6(void *) = Call[operator new[]] : func:r2104_1, 0:r2104_5 -# 2104| m2104_7(unknown) = ^CallSideEffect : ~m2103_8 -# 2104| m2104_8(unknown) = Chi : total:m2103_8, partial:m2104_7 -# 2104| m2104_9(unknown) = ^InitializeDynamicAllocation : &:r2104_6 -# 2104| r2104_10(int *) = Convert : r2104_6 -# 2105| v2105_1(void) = NoOp : -# 2098| v2098_7(void) = ReturnVoid : -# 2098| v2098_8(void) = AliasedUse : ~m2104_8 -# 2098| v2098_9(void) = ExitFunction : +# 2104| r2104_6(align_val_t) = Constant[128] : +# 2104| r2104_7(void *) = Call[operator new[]] : func:r2104_1, 0:r2104_5, 1:r2104_6 +# 2104| m2104_8(unknown) = ^CallSideEffect : ~m2103_8 +# 2104| m2104_9(unknown) = Chi : total:m2103_8, partial:m2104_8 +# 2104| m2104_10(unknown) = ^InitializeDynamicAllocation : &:r2104_7 +# 2104| r2104_11(Overaligned *) = Convert : r2104_7 +# 2105| r2105_1(glval) = FunctionAddress[operator new[]] : +# 2105| r2105_2(glval) = VariableAddress[n] : +# 2105| r2105_3(unsigned long) = Load[n] : &:r2105_2, m2100_6 +# 2105| r2105_4(unsigned long) = Constant[1] : +# 2105| r2105_5(unsigned long) = Mul : r2105_3, r2105_4 +# 2105| r2105_6(void *) = Call[operator new[]] : func:r2105_1, 0:r2105_5 +# 2105| m2105_7(unknown) = ^CallSideEffect : ~m2104_9 +# 2105| m2105_8(unknown) = Chi : total:m2104_9, partial:m2105_7 +# 2105| m2105_9(unknown) = ^InitializeDynamicAllocation : &:r2105_6 +# 2105| r2105_10(DefaultCtorWithDefaultParam *) = Convert : r2105_6 +# 2106| r2106_1(glval) = FunctionAddress[operator new[]] : +# 2106| r2106_2(glval) = VariableAddress[n] : +# 2106| r2106_3(unsigned long) = Load[n] : &:r2106_2, m2100_6 +# 2106| r2106_4(unsigned long) = Constant[4] : +# 2106| r2106_5(unsigned long) = Mul : r2106_3, r2106_4 +# 2106| r2106_6(void *) = Call[operator new[]] : func:r2106_1, 0:r2106_5 +# 2106| m2106_7(unknown) = ^CallSideEffect : ~m2105_8 +# 2106| m2106_8(unknown) = Chi : total:m2105_8, partial:m2106_7 +# 2106| m2106_9(unknown) = ^InitializeDynamicAllocation : &:r2106_6 +# 2106| r2106_10(int *) = Convert : r2106_6 +# 2107| v2107_1(void) = NoOp : +# 2100| v2100_7(void) = ReturnVoid : +# 2100| v2100_8(void) = AliasedUse : ~m2106_8 +# 2100| v2100_9(void) = ExitFunction : -# 2109| char* test_strtod(char*) -# 2109| Block 0 -# 2109| v2109_1(void) = EnterFunction : -# 2109| m2109_2(unknown) = AliasedDefinition : -# 2109| m2109_3(unknown) = InitializeNonLocal : -# 2109| m2109_4(unknown) = Chi : total:m2109_2, partial:m2109_3 -# 2109| r2109_5(glval) = VariableAddress[s] : -# 2109| m2109_6(char *) = InitializeParameter[s] : &:r2109_5 -# 2109| r2109_7(char *) = Load[s] : &:r2109_5, m2109_6 -# 2109| m2109_8(unknown) = InitializeIndirection[s] : &:r2109_7 -# 2110| r2110_1(glval) = VariableAddress[end] : -# 2110| m2110_2(char *) = Uninitialized[end] : &:r2110_1 -# 2111| r2111_1(glval) = VariableAddress[d] : -# 2111| r2111_2(glval) = FunctionAddress[strtod] : -# 2111| r2111_3(glval) = VariableAddress[s] : -# 2111| r2111_4(char *) = Load[s] : &:r2111_3, m2109_6 -# 2111| r2111_5(char *) = Convert : r2111_4 -# 2111| r2111_6(glval) = VariableAddress[end] : -# 2111| r2111_7(char **) = CopyValue : r2111_6 -# 2111| r2111_8(double) = Call[strtod] : func:r2111_2, 0:r2111_5, 1:r2111_7 -# 2111| v2111_9(void) = ^BufferReadSideEffect[0] : &:r2111_5, ~m2109_8 -# 2111| m2111_10(char *) = ^IndirectMayWriteSideEffect[1] : &:r2111_7 -# 2111| m2111_11(char *) = Chi : total:m2110_2, partial:m2111_10 -# 2111| m2111_12(double) = Store[d] : &:r2111_1, r2111_8 -# 2112| r2112_1(glval) = VariableAddress[#return] : -# 2112| r2112_2(glval) = VariableAddress[end] : -# 2112| r2112_3(char *) = Load[end] : &:r2112_2, m2111_11 -# 2112| m2112_4(char *) = Store[#return] : &:r2112_1, r2112_3 -# 2109| v2109_9(void) = ReturnIndirection[s] : &:r2109_7, m2109_8 -# 2109| r2109_10(glval) = VariableAddress[#return] : -# 2109| v2109_11(void) = ReturnValue : &:r2109_10, m2112_4 -# 2109| v2109_12(void) = AliasedUse : m2109_3 -# 2109| v2109_13(void) = ExitFunction : +# 2111| char* test_strtod(char*) +# 2111| Block 0 +# 2111| v2111_1(void) = EnterFunction : +# 2111| m2111_2(unknown) = AliasedDefinition : +# 2111| m2111_3(unknown) = InitializeNonLocal : +# 2111| m2111_4(unknown) = Chi : total:m2111_2, partial:m2111_3 +# 2111| r2111_5(glval) = VariableAddress[s] : +# 2111| m2111_6(char *) = InitializeParameter[s] : &:r2111_5 +# 2111| r2111_7(char *) = Load[s] : &:r2111_5, m2111_6 +# 2111| m2111_8(unknown) = InitializeIndirection[s] : &:r2111_7 +# 2112| r2112_1(glval) = VariableAddress[end] : +# 2112| m2112_2(char *) = Uninitialized[end] : &:r2112_1 +# 2113| r2113_1(glval) = VariableAddress[d] : +# 2113| r2113_2(glval) = FunctionAddress[strtod] : +# 2113| r2113_3(glval) = VariableAddress[s] : +# 2113| r2113_4(char *) = Load[s] : &:r2113_3, m2111_6 +# 2113| r2113_5(char *) = Convert : r2113_4 +# 2113| r2113_6(glval) = VariableAddress[end] : +# 2113| r2113_7(char **) = CopyValue : r2113_6 +# 2113| r2113_8(double) = Call[strtod] : func:r2113_2, 0:r2113_5, 1:r2113_7 +# 2113| v2113_9(void) = ^BufferReadSideEffect[0] : &:r2113_5, ~m2111_8 +# 2113| m2113_10(char *) = ^IndirectMayWriteSideEffect[1] : &:r2113_7 +# 2113| m2113_11(char *) = Chi : total:m2112_2, partial:m2113_10 +# 2113| m2113_12(double) = Store[d] : &:r2113_1, r2113_8 +# 2114| r2114_1(glval) = VariableAddress[#return] : +# 2114| r2114_2(glval) = VariableAddress[end] : +# 2114| r2114_3(char *) = Load[end] : &:r2114_2, m2113_11 +# 2114| m2114_4(char *) = Store[#return] : &:r2114_1, r2114_3 +# 2111| v2111_9(void) = ReturnIndirection[s] : &:r2111_7, m2111_8 +# 2111| r2111_10(glval) = VariableAddress[#return] : +# 2111| v2111_11(void) = ReturnValue : &:r2111_10, m2114_4 +# 2111| v2111_12(void) = AliasedUse : m2111_3 +# 2111| v2111_13(void) = ExitFunction : -# 2119| void call_as_child_of_ConditionDeclExpr() -# 2119| Block 0 -# 2119| v2119_1(void) = EnterFunction : -# 2119| m2119_2(unknown) = AliasedDefinition : -# 2119| m2119_3(unknown) = InitializeNonLocal : -# 2119| m2119_4(unknown) = Chi : total:m2119_2, partial:m2119_3 -# 2120| r2120_1(glval) = VariableAddress[b] : -# 2120| r2120_2(HasOperatorBool) = Constant[0] : -# 2120| m2120_3(HasOperatorBool) = Store[b] : &:r2120_1, r2120_2 -# 2120| r2120_4(glval) = VariableAddress[b] : -# 2120| r2120_5(glval) = FunctionAddress[operator bool] : -# 2120| r2120_6(bool) = Call[operator bool] : func:r2120_5, this:r2120_4 -# 2120| m2120_7(unknown) = ^CallSideEffect : ~m2119_4 -# 2120| m2120_8(unknown) = Chi : total:m2119_4, partial:m2120_7 -# 2120| v2120_9(void) = ^IndirectReadSideEffect[-1] : &:r2120_4, m2120_3 -# 2120| m2120_10(HasOperatorBool) = ^IndirectMayWriteSideEffect[-1] : &:r2120_4 -# 2120| m2120_11(HasOperatorBool) = Chi : total:m2120_3, partial:m2120_10 -# 2120| r2120_12(bool) = CopyValue : r2120_6 -# 2120| v2120_13(void) = ConditionalBranch : r2120_12 +# 2121| void call_as_child_of_ConditionDeclExpr() +# 2121| Block 0 +# 2121| v2121_1(void) = EnterFunction : +# 2121| m2121_2(unknown) = AliasedDefinition : +# 2121| m2121_3(unknown) = InitializeNonLocal : +# 2121| m2121_4(unknown) = Chi : total:m2121_2, partial:m2121_3 +# 2122| r2122_1(glval) = VariableAddress[b] : +# 2122| r2122_2(HasOperatorBool) = Constant[0] : +# 2122| m2122_3(HasOperatorBool) = Store[b] : &:r2122_1, r2122_2 +# 2122| r2122_4(glval) = VariableAddress[b] : +# 2122| r2122_5(glval) = FunctionAddress[operator bool] : +# 2122| r2122_6(bool) = Call[operator bool] : func:r2122_5, this:r2122_4 +# 2122| m2122_7(unknown) = ^CallSideEffect : ~m2121_4 +# 2122| m2122_8(unknown) = Chi : total:m2121_4, partial:m2122_7 +# 2122| v2122_9(void) = ^IndirectReadSideEffect[-1] : &:r2122_4, m2122_3 +# 2122| m2122_10(HasOperatorBool) = ^IndirectMayWriteSideEffect[-1] : &:r2122_4 +# 2122| m2122_11(HasOperatorBool) = Chi : total:m2122_3, partial:m2122_10 +# 2122| r2122_12(bool) = CopyValue : r2122_6 +# 2122| v2122_13(void) = ConditionalBranch : r2122_12 #-----| False -> Block 2 #-----| True -> Block 1 -# 2120| Block 1 -# 2120| v2120_14(void) = NoOp : +# 2122| Block 1 +# 2122| v2122_14(void) = NoOp : #-----| Goto -> Block 2 -# 2121| Block 2 -# 2121| v2121_1(void) = NoOp : -# 2119| v2119_5(void) = ReturnVoid : -# 2119| v2119_6(void) = AliasedUse : ~m2120_8 -# 2119| v2119_7(void) = ExitFunction : +# 2123| Block 2 +# 2123| v2123_1(void) = NoOp : +# 2121| v2121_5(void) = ReturnVoid : +# 2121| v2121_6(void) = AliasedUse : ~m2122_8 +# 2121| v2121_7(void) = ExitFunction : perf-regression.cpp: # 6| void Big::Big() diff --git a/cpp/ql/test/library-tests/ir/ir/ir.cpp b/cpp/ql/test/library-tests/ir/ir/ir.cpp index 74f7f931146..1fa9337f29b 100644 --- a/cpp/ql/test/library-tests/ir/ir/ir.cpp +++ b/cpp/ql/test/library-tests/ir/ir/ir.cpp @@ -1065,6 +1065,8 @@ struct vector { bool operator!=(iterator right) const; }; + vector(T); + ~vector(); iterator begin() const; iterator end() const; }; diff --git a/cpp/ql/test/library-tests/ir/ir/operand_locations.expected b/cpp/ql/test/library-tests/ir/ir/operand_locations.expected index 2af9a3488e0..88c62cd70b3 100644 --- a/cpp/ql/test/library-tests/ir/ir/operand_locations.expected +++ b/cpp/ql/test/library-tests/ir/ir/operand_locations.expected @@ -794,12 +794,12 @@ | file://:0:0:0:0 | ChiTotal | total:m754_8 | | file://:0:0:0:0 | ChiTotal | total:m763_8 | | file://:0:0:0:0 | ChiTotal | total:m1043_10 | -| file://:0:0:0:0 | ChiTotal | total:m1240_4 | -| file://:0:0:0:0 | ChiTotal | total:m1688_3 | -| file://:0:0:0:0 | ChiTotal | total:m1716_8 | -| file://:0:0:0:0 | ChiTotal | total:m1716_19 | -| file://:0:0:0:0 | ChiTotal | total:m1834_8 | -| file://:0:0:0:0 | ChiTotal | total:m1839_8 | +| file://:0:0:0:0 | ChiTotal | total:m1242_4 | +| file://:0:0:0:0 | ChiTotal | total:m1690_3 | +| file://:0:0:0:0 | ChiTotal | total:m1718_8 | +| file://:0:0:0:0 | ChiTotal | total:m1718_19 | +| file://:0:0:0:0 | ChiTotal | total:m1836_8 | +| file://:0:0:0:0 | ChiTotal | total:m1841_8 | | file://:0:0:0:0 | Left | r0_2 | | file://:0:0:0:0 | Left | r0_4 | | file://:0:0:0:0 | Left | r0_7 | @@ -829,18 +829,18 @@ | file://:0:0:0:0 | Load | m745_6 | | file://:0:0:0:0 | Load | m754_6 | | file://:0:0:0:0 | Load | m763_6 | -| file://:0:0:0:0 | Load | m1466_4 | -| file://:0:0:0:0 | Load | m1466_4 | -| file://:0:0:0:0 | Load | m1685_9 | -| file://:0:0:0:0 | Load | m1714_4 | -| file://:0:0:0:0 | Load | m1834_6 | -| file://:0:0:0:0 | Load | m1834_6 | -| file://:0:0:0:0 | Load | m1839_6 | -| file://:0:0:0:0 | Load | m2013_6 | +| file://:0:0:0:0 | Load | m1468_4 | +| file://:0:0:0:0 | Load | m1468_4 | +| file://:0:0:0:0 | Load | m1687_9 | +| file://:0:0:0:0 | Load | m1716_4 | +| file://:0:0:0:0 | Load | m1836_6 | +| file://:0:0:0:0 | Load | m1836_6 | +| file://:0:0:0:0 | Load | m1841_6 | +| file://:0:0:0:0 | Load | m2015_6 | | file://:0:0:0:0 | Load | ~m0_4 | -| file://:0:0:0:0 | Load | ~m1444_6 | -| file://:0:0:0:0 | Load | ~m1712_10 | -| file://:0:0:0:0 | Load | ~m1712_14 | +| file://:0:0:0:0 | Load | ~m1446_6 | +| file://:0:0:0:0 | Load | ~m1714_10 | +| file://:0:0:0:0 | Load | ~m1714_14 | | file://:0:0:0:0 | Right | r0_3 | | file://:0:0:0:0 | Right | r0_5 | | file://:0:0:0:0 | Right | r0_8 | @@ -860,10 +860,10 @@ | file://:0:0:0:0 | SideEffect | m0_4 | | file://:0:0:0:0 | SideEffect | m0_4 | | file://:0:0:0:0 | SideEffect | m0_14 | -| file://:0:0:0:0 | SideEffect | m1078_23 | -| file://:0:0:0:0 | SideEffect | m1078_23 | -| file://:0:0:0:0 | SideEffect | m1084_23 | -| file://:0:0:0:0 | SideEffect | m1084_23 | +| file://:0:0:0:0 | SideEffect | m1080_23 | +| file://:0:0:0:0 | SideEffect | m1080_23 | +| file://:0:0:0:0 | SideEffect | m1086_23 | +| file://:0:0:0:0 | SideEffect | m1086_23 | | file://:0:0:0:0 | SideEffect | ~m0_4 | | file://:0:0:0:0 | SideEffect | ~m0_4 | | file://:0:0:0:0 | SideEffect | ~m0_4 | @@ -873,13 +873,13 @@ | file://:0:0:0:0 | SideEffect | ~m96_8 | | file://:0:0:0:0 | SideEffect | ~m754_8 | | file://:0:0:0:0 | SideEffect | ~m763_8 | -| file://:0:0:0:0 | SideEffect | ~m1077_8 | -| file://:0:0:0:0 | SideEffect | ~m1077_8 | -| file://:0:0:0:0 | SideEffect | ~m1077_8 | -| file://:0:0:0:0 | SideEffect | ~m1077_8 | -| file://:0:0:0:0 | SideEffect | ~m1240_4 | -| file://:0:0:0:0 | SideEffect | ~m1447_6 | -| file://:0:0:0:0 | SideEffect | ~m1839_8 | +| file://:0:0:0:0 | SideEffect | ~m1079_8 | +| file://:0:0:0:0 | SideEffect | ~m1079_8 | +| file://:0:0:0:0 | SideEffect | ~m1079_8 | +| file://:0:0:0:0 | SideEffect | ~m1079_8 | +| file://:0:0:0:0 | SideEffect | ~m1242_4 | +| file://:0:0:0:0 | SideEffect | ~m1449_6 | +| file://:0:0:0:0 | SideEffect | ~m1841_8 | | file://:0:0:0:0 | StoreValue | r0_1 | | file://:0:0:0:0 | StoreValue | r0_1 | | file://:0:0:0:0 | StoreValue | r0_1 | @@ -5525,4568 +5525,4568 @@ | ir.cpp:1055:15:1055:15 | ChiTotal | total:m1052_7 | | ir.cpp:1055:15:1055:15 | SideEffect | ~m1052_7 | | ir.cpp:1055:16:1055:16 | Arg(0) | 0:r1055_4 | -| ir.cpp:1077:6:1077:18 | ChiPartial | partial:m1077_3 | -| ir.cpp:1077:6:1077:18 | ChiTotal | total:m1077_2 | -| ir.cpp:1077:6:1077:18 | SideEffect | ~m1088_1 | -| ir.cpp:1077:39:1077:39 | Address | &:r1077_5 | -| ir.cpp:1077:39:1077:39 | Address | &:r1077_5 | -| ir.cpp:1077:39:1077:39 | Address | &:r1077_7 | -| ir.cpp:1077:39:1077:39 | Address | &:r1077_7 | -| ir.cpp:1077:39:1077:39 | Load | m1077_6 | -| ir.cpp:1077:39:1077:39 | SideEffect | m1077_8 | -| ir.cpp:1078:5:1082:5 | Address | &:r1078_1 | -| ir.cpp:1078:5:1082:5 | Address | &:r1078_7 | -| ir.cpp:1078:5:1082:5 | Address | &:r1078_15 | -| ir.cpp:1078:5:1082:5 | Address | &:r1078_33 | -| ir.cpp:1078:18:1078:18 | Address | &:r1078_2 | -| ir.cpp:1078:18:1078:18 | Address | &:r1078_8 | -| ir.cpp:1078:18:1078:18 | Address | &:r1078_16 | -| ir.cpp:1078:18:1078:18 | Address | &:r1078_27 | -| ir.cpp:1078:18:1078:18 | Address | &:r1078_36 | -| ir.cpp:1078:18:1078:18 | Address | &:r1078_42 | -| ir.cpp:1078:18:1078:18 | Address | &:r1078_42 | -| ir.cpp:1078:18:1078:18 | Arg(0) | 0:r1078_28 | -| ir.cpp:1078:18:1078:18 | Arg(this) | this:r0_1 | -| ir.cpp:1078:18:1078:18 | Arg(this) | this:r0_3 | -| ir.cpp:1078:18:1078:18 | Arg(this) | this:r0_5 | -| ir.cpp:1078:18:1078:18 | Arg(this) | this:r0_7 | -| ir.cpp:1078:18:1078:18 | Arg(this) | this:r1078_42 | -| ir.cpp:1078:18:1078:18 | CallTarget | func:r1078_10 | -| ir.cpp:1078:18:1078:18 | CallTarget | func:r1078_18 | -| ir.cpp:1078:18:1078:18 | CallTarget | func:r1078_26 | -| ir.cpp:1078:18:1078:18 | CallTarget | func:r1078_35 | -| ir.cpp:1078:18:1078:18 | CallTarget | func:r1078_43 | -| ir.cpp:1078:18:1078:18 | ChiPartial | partial:m1078_12 | -| ir.cpp:1078:18:1078:18 | ChiPartial | partial:m1078_20 | -| ir.cpp:1078:18:1078:18 | ChiPartial | partial:m1078_30 | -| ir.cpp:1078:18:1078:18 | ChiPartial | partial:m1078_37 | -| ir.cpp:1078:18:1078:18 | ChiPartial | partial:m1078_45 | -| ir.cpp:1078:18:1078:18 | ChiPartial | partial:m1078_48 | -| ir.cpp:1078:18:1078:18 | ChiTotal | total:m1077_4 | -| ir.cpp:1078:18:1078:18 | ChiTotal | total:m1078_13 | -| ir.cpp:1078:18:1078:18 | ChiTotal | total:m1078_23 | -| ir.cpp:1078:18:1078:18 | ChiTotal | total:m1078_24 | -| ir.cpp:1078:18:1078:18 | ChiTotal | total:m1078_31 | -| ir.cpp:1078:18:1078:18 | ChiTotal | total:m1078_38 | -| ir.cpp:1078:18:1078:18 | Condition | r1078_29 | -| ir.cpp:1078:18:1078:18 | Load | m1077_6 | -| ir.cpp:1078:18:1078:18 | Load | m1078_6 | -| ir.cpp:1078:18:1078:18 | Load | m1078_6 | -| ir.cpp:1078:18:1078:18 | Load | m1078_22 | -| ir.cpp:1078:18:1078:18 | Phi | from 0:m1078_14 | -| ir.cpp:1078:18:1078:18 | Phi | from 0:~m1078_21 | -| ir.cpp:1078:18:1078:18 | Phi | from 4:m1078_49 | -| ir.cpp:1078:18:1078:18 | Phi | from 4:~m1078_46 | -| ir.cpp:1078:18:1078:18 | SideEffect | m1078_23 | -| ir.cpp:1078:18:1078:18 | SideEffect | ~m1077_4 | -| ir.cpp:1078:18:1078:18 | SideEffect | ~m1078_13 | -| ir.cpp:1078:18:1078:18 | SideEffect | ~m1078_24 | -| ir.cpp:1078:18:1078:18 | SideEffect | ~m1078_31 | -| ir.cpp:1078:18:1078:18 | SideEffect | ~m1078_38 | -| ir.cpp:1078:18:1078:18 | StoreValue | r1078_5 | -| ir.cpp:1078:18:1078:18 | StoreValue | r1078_11 | -| ir.cpp:1078:18:1078:18 | StoreValue | r1078_19 | -| ir.cpp:1078:18:1078:18 | Unary | r1078_3 | -| ir.cpp:1078:18:1078:18 | Unary | r1078_4 | -| ir.cpp:1078:18:1078:18 | Unary | r1078_9 | -| ir.cpp:1078:18:1078:18 | Unary | r1078_17 | -| ir.cpp:1078:18:1078:18 | Unary | r1078_25 | -| ir.cpp:1078:18:1078:18 | Unary | r1078_34 | -| ir.cpp:1078:18:1078:18 | Unary | r1078_44 | -| ir.cpp:1078:18:1078:19 | Load | ~m1078_38 | -| ir.cpp:1078:18:1078:19 | StoreValue | r1078_39 | -| ir.cpp:1079:13:1079:13 | Address | &:r1079_1 | -| ir.cpp:1079:13:1079:13 | Left | r1079_2 | -| ir.cpp:1079:13:1079:13 | Load | m1078_40 | -| ir.cpp:1079:13:1079:17 | Condition | r1079_4 | -| ir.cpp:1079:17:1079:17 | Right | r1079_3 | -| ir.cpp:1084:5:1088:5 | Address | &:r1084_1 | -| ir.cpp:1084:5:1088:5 | Address | &:r1084_7 | -| ir.cpp:1084:5:1088:5 | Address | &:r1084_15 | -| ir.cpp:1084:5:1088:5 | Address | &:r1084_42 | -| ir.cpp:1084:25:1084:25 | Address | &:r1084_2 | -| ir.cpp:1084:25:1084:25 | Address | &:r1084_8 | -| ir.cpp:1084:25:1084:25 | Address | &:r1084_16 | -| ir.cpp:1084:25:1084:25 | Address | &:r1084_27 | -| ir.cpp:1084:25:1084:25 | Address | &:r1084_33 | -| ir.cpp:1084:25:1084:25 | Address | &:r1084_33 | -| ir.cpp:1084:25:1084:25 | Arg(0) | 0:r1084_28 | -| ir.cpp:1084:25:1084:25 | Arg(this) | this:r0_9 | -| ir.cpp:1084:25:1084:25 | Arg(this) | this:r0_11 | -| ir.cpp:1084:25:1084:25 | Arg(this) | this:r0_13 | -| ir.cpp:1084:25:1084:25 | Arg(this) | this:r0_15 | -| ir.cpp:1084:25:1084:25 | Arg(this) | this:r1084_33 | -| ir.cpp:1084:25:1084:25 | CallTarget | func:r1084_10 | -| ir.cpp:1084:25:1084:25 | CallTarget | func:r1084_18 | -| ir.cpp:1084:25:1084:25 | CallTarget | func:r1084_26 | -| ir.cpp:1084:25:1084:25 | CallTarget | func:r1084_34 | -| ir.cpp:1084:25:1084:25 | CallTarget | func:r1084_44 | -| ir.cpp:1084:25:1084:25 | ChiPartial | partial:m1084_12 | -| ir.cpp:1084:25:1084:25 | ChiPartial | partial:m1084_20 | -| ir.cpp:1084:25:1084:25 | ChiPartial | partial:m1084_30 | -| ir.cpp:1084:25:1084:25 | ChiPartial | partial:m1084_36 | -| ir.cpp:1084:25:1084:25 | ChiPartial | partial:m1084_39 | -| ir.cpp:1084:25:1084:25 | ChiPartial | partial:m1084_46 | -| ir.cpp:1084:25:1084:25 | ChiTotal | total:m1078_31 | -| ir.cpp:1084:25:1084:25 | ChiTotal | total:m1084_13 | -| ir.cpp:1084:25:1084:25 | ChiTotal | total:m1084_23 | -| ir.cpp:1084:25:1084:25 | ChiTotal | total:m1084_24 | -| ir.cpp:1084:25:1084:25 | ChiTotal | total:m1084_31 | -| ir.cpp:1084:25:1084:25 | ChiTotal | total:m1084_47 | -| ir.cpp:1084:25:1084:25 | Condition | r1084_29 | -| ir.cpp:1084:25:1084:25 | Load | m1077_6 | -| ir.cpp:1084:25:1084:25 | Load | m1084_6 | -| ir.cpp:1084:25:1084:25 | Load | m1084_6 | -| ir.cpp:1084:25:1084:25 | Load | m1084_22 | -| ir.cpp:1084:25:1084:25 | Phi | from 5:m1084_14 | -| ir.cpp:1084:25:1084:25 | Phi | from 5:~m1084_21 | -| ir.cpp:1084:25:1084:25 | Phi | from 7:m1084_40 | -| ir.cpp:1084:25:1084:25 | Phi | from 7:~m1084_37 | -| ir.cpp:1084:25:1084:25 | SideEffect | m1084_23 | -| ir.cpp:1084:25:1084:25 | SideEffect | ~m1078_31 | -| ir.cpp:1084:25:1084:25 | SideEffect | ~m1084_13 | -| ir.cpp:1084:25:1084:25 | SideEffect | ~m1084_24 | -| ir.cpp:1084:25:1084:25 | SideEffect | ~m1084_31 | -| ir.cpp:1084:25:1084:25 | SideEffect | ~m1084_47 | -| ir.cpp:1084:25:1084:25 | StoreValue | r1084_5 | -| ir.cpp:1084:25:1084:25 | StoreValue | r1084_11 | -| ir.cpp:1084:25:1084:25 | StoreValue | r1084_19 | -| ir.cpp:1084:25:1084:25 | Unary | r1084_3 | -| ir.cpp:1084:25:1084:25 | Unary | r1084_4 | -| ir.cpp:1084:25:1084:25 | Unary | r1084_9 | -| ir.cpp:1084:25:1084:25 | Unary | r1084_17 | -| ir.cpp:1084:25:1084:25 | Unary | r1084_25 | -| ir.cpp:1084:25:1084:25 | Unary | r1084_35 | -| ir.cpp:1084:25:1084:25 | Unary | r1084_43 | -| ir.cpp:1084:25:1084:25 | Unary | r1084_45 | -| ir.cpp:1084:25:1084:26 | StoreValue | r1084_50 | -| ir.cpp:1084:25:1084:26 | Unary | r1084_48 | -| ir.cpp:1084:25:1084:26 | Unary | r1084_49 | -| ir.cpp:1085:13:1085:13 | Address | &:r1085_1 | -| ir.cpp:1085:13:1085:13 | Address | &:r1085_2 | -| ir.cpp:1085:13:1085:13 | Left | r1085_3 | -| ir.cpp:1085:13:1085:13 | Load | m1084_51 | -| ir.cpp:1085:13:1085:13 | Load | ~m1084_47 | -| ir.cpp:1085:13:1085:17 | Condition | r1085_5 | -| ir.cpp:1085:17:1085:17 | Right | r1085_4 | -| ir.cpp:1088:5:1088:5 | Phi | from 6:~m1084_31 | -| ir.cpp:1088:5:1088:5 | Phi | from 9:~m1084_47 | -| ir.cpp:1108:5:1108:11 | Address | &:r1108_7 | -| ir.cpp:1108:5:1108:11 | ChiPartial | partial:m1108_3 | -| ir.cpp:1108:5:1108:11 | ChiTotal | total:m1108_2 | -| ir.cpp:1108:5:1108:11 | Load | m1110_4 | -| ir.cpp:1108:5:1108:11 | SideEffect | ~m1109_2 | -| ir.cpp:1108:17:1108:17 | Address | &:r1108_5 | -| ir.cpp:1109:3:1109:14 | ChiPartial | partial:m1109_1 | -| ir.cpp:1109:3:1109:14 | ChiTotal | total:m1108_4 | -| ir.cpp:1109:3:1109:14 | SideEffect | ~m1108_4 | -| ir.cpp:1110:3:1110:11 | Address | &:r1110_1 | -| ir.cpp:1110:10:1110:10 | Address | &:r1110_2 | -| ir.cpp:1110:10:1110:10 | Load | m1108_6 | -| ir.cpp:1110:10:1110:10 | StoreValue | r1110_3 | -| ir.cpp:1113:13:1113:30 | ChiPartial | partial:m1113_3 | -| ir.cpp:1113:13:1113:30 | ChiTotal | total:m1113_2 | -| ir.cpp:1113:13:1113:30 | SideEffect | ~m1115_2 | -| ir.cpp:1113:46:1113:46 | Address | &:r1113_5 | -| ir.cpp:1113:46:1113:46 | Address | &:r1113_5 | -| ir.cpp:1113:46:1113:46 | Address | &:r1113_7 | -| ir.cpp:1113:46:1113:46 | Address | &:r1113_7 | -| ir.cpp:1113:46:1113:46 | Load | m1113_6 | -| ir.cpp:1113:46:1113:46 | SideEffect | m1113_8 | -| ir.cpp:1113:62:1113:62 | Address | &:r1113_9 | -| ir.cpp:1113:79:1113:79 | Address | &:r1113_11 | -| ir.cpp:1113:79:1113:79 | Address | &:r1113_11 | -| ir.cpp:1113:79:1113:79 | Address | &:r1113_13 | -| ir.cpp:1113:79:1113:79 | Address | &:r1113_13 | -| ir.cpp:1113:79:1113:79 | Load | m1113_12 | -| ir.cpp:1113:79:1113:79 | SideEffect | m1113_14 | -| ir.cpp:1113:95:1113:95 | Address | &:r1113_15 | -| ir.cpp:1115:3:1119:6 | ChiPartial | partial:m1115_1 | -| ir.cpp:1115:3:1119:6 | ChiTotal | total:m1113_4 | -| ir.cpp:1115:3:1119:6 | SideEffect | ~m1113_4 | -| ir.cpp:1118:13:1118:13 | Address | &:r1118_1 | -| ir.cpp:1118:13:1118:13 | AsmOperand(0) | 0:r1118_3 | -| ir.cpp:1118:13:1118:13 | Load | m1113_6 | -| ir.cpp:1118:13:1118:13 | Unary | r1118_2 | -| ir.cpp:1118:23:1118:23 | AsmOperand(1) | 1:r1118_4 | -| ir.cpp:1118:33:1118:33 | Address | &:r1118_5 | -| ir.cpp:1118:33:1118:33 | Address | &:r1118_6 | -| ir.cpp:1118:33:1118:33 | AsmOperand(2) | 2:r1118_7 | -| ir.cpp:1118:33:1118:33 | Load | m1113_12 | -| ir.cpp:1118:33:1118:33 | Load | ~m1113_14 | -| ir.cpp:1118:42:1118:42 | Address | &:r1118_8 | -| ir.cpp:1118:42:1118:42 | AsmOperand(3) | 3:r1118_9 | -| ir.cpp:1118:42:1118:42 | Load | m1113_16 | -| ir.cpp:1122:6:1122:23 | ChiPartial | partial:m1122_3 | -| ir.cpp:1122:6:1122:23 | ChiTotal | total:m1122_2 | -| ir.cpp:1122:6:1122:23 | SideEffect | m1122_3 | -| ir.cpp:1125:9:1125:9 | Address | &:r1125_1 | -| ir.cpp:1126:9:1126:9 | Address | &:r1126_1 | -| ir.cpp:1127:29:1127:29 | Address | &:r1127_1 | -| ir.cpp:1137:6:1137:30 | ChiPartial | partial:m1137_3 | -| ir.cpp:1137:6:1137:30 | ChiTotal | total:m1137_2 | -| ir.cpp:1137:6:1137:30 | SideEffect | m1137_3 | -| ir.cpp:1139:5:1139:20 | Address | &:r1139_1 | -| ir.cpp:1139:5:1139:20 | Address | &:r1139_5 | -| ir.cpp:1139:5:1139:20 | Address | &:r1139_10 | -| ir.cpp:1139:5:1139:20 | Address | &:r1139_10 | -| ir.cpp:1139:5:1139:20 | Condition | r1139_8 | -| ir.cpp:1139:5:1139:20 | Left | r1139_6 | -| ir.cpp:1139:5:1139:20 | Left | r1139_11 | -| ir.cpp:1139:5:1139:20 | Load | m1139_4 | -| ir.cpp:1139:5:1139:20 | Load | m1139_4 | -| ir.cpp:1139:5:1139:20 | Phi | from 0:m1139_3 | -| ir.cpp:1139:5:1139:20 | Phi | from 2:m1139_14 | -| ir.cpp:1139:5:1139:20 | Right | r1139_7 | -| ir.cpp:1139:5:1139:20 | Right | r1139_12 | -| ir.cpp:1139:5:1139:20 | StoreValue | r1139_2 | -| ir.cpp:1139:5:1139:20 | StoreValue | r1139_13 | -| ir.cpp:1142:6:1142:23 | ChiPartial | partial:m1142_3 | -| ir.cpp:1142:6:1142:23 | ChiTotal | total:m1142_2 | -| ir.cpp:1142:6:1142:23 | Phi | from 2:~m1142_10 | -| ir.cpp:1142:6:1142:23 | Phi | from 7:~m1154_8 | -| ir.cpp:1142:6:1142:23 | Phi | from 8:~m1142_4 | -| ir.cpp:1142:6:1142:23 | Phi | from 10:~m1142_4 | -| ir.cpp:1142:6:1142:23 | SideEffect | ~m1142_7 | -| ir.cpp:1142:30:1142:30 | Address | &:r1142_5 | -| ir.cpp:1144:9:1144:9 | Address | &:r1144_1 | -| ir.cpp:1144:12:1144:13 | StoreValue | r1144_2 | -| ir.cpp:1145:9:1145:9 | Address | &:r1145_1 | -| ir.cpp:1145:9:1145:9 | Condition | r1145_2 | -| ir.cpp:1145:9:1145:9 | Load | m1142_6 | -| ir.cpp:1146:7:1146:28 | Address | &:r1146_1 | -| ir.cpp:1146:7:1146:28 | Address | &:r1146_1 | -| ir.cpp:1146:7:1146:28 | Load | m1146_4 | -| ir.cpp:1146:13:1146:28 | StoreValue | r1146_3 | -| ir.cpp:1146:13:1146:28 | Unary | r1146_2 | -| ir.cpp:1148:14:1148:14 | Address | &:r1148_1 | -| ir.cpp:1148:14:1148:14 | Left | r1148_2 | -| ir.cpp:1148:14:1148:14 | Load | m1144_3 | -| ir.cpp:1148:14:1148:18 | Condition | r1148_4 | -| ir.cpp:1148:18:1148:18 | Right | r1148_3 | -| ir.cpp:1151:5:1151:5 | Address | &:r1151_2 | -| ir.cpp:1151:9:1151:9 | StoreValue | r1151_1 | -| ir.cpp:1153:22:1153:22 | Address | &:r1153_2 | -| ir.cpp:1153:22:1153:22 | Address | &:r1153_2 | -| ir.cpp:1153:22:1153:22 | Address | &:r1153_4 | -| ir.cpp:1153:22:1153:22 | Load | m1153_3 | -| ir.cpp:1154:5:1154:19 | Address | &:r1154_1 | -| ir.cpp:1154:5:1154:19 | Address | &:r1154_1 | -| ir.cpp:1154:5:1154:19 | Address | &:r1154_1 | -| ir.cpp:1154:5:1154:19 | Arg(this) | this:r1154_1 | -| ir.cpp:1154:5:1154:19 | CallTarget | func:r1154_3 | -| ir.cpp:1154:5:1154:19 | ChiPartial | partial:m1154_7 | -| ir.cpp:1154:5:1154:19 | ChiPartial | partial:m1154_10 | -| ir.cpp:1154:5:1154:19 | ChiTotal | total:m1142_4 | -| ir.cpp:1154:5:1154:19 | ChiTotal | total:m1154_2 | -| ir.cpp:1154:5:1154:19 | Load | m1154_11 | -| ir.cpp:1154:5:1154:19 | SideEffect | ~m1142_4 | -| ir.cpp:1154:18:1154:18 | Address | &:r1154_4 | -| ir.cpp:1154:18:1154:18 | Address | &:r1154_5 | -| ir.cpp:1154:18:1154:18 | Arg(0) | 0:r1154_5 | -| ir.cpp:1154:18:1154:18 | Load | m1153_3 | -| ir.cpp:1154:18:1154:18 | SideEffect | ~m1153_5 | -| ir.cpp:1156:24:1156:24 | Address | &:r1156_2 | -| ir.cpp:1156:24:1156:24 | Address | &:r1156_2 | -| ir.cpp:1156:24:1156:24 | Address | &:r1156_4 | -| ir.cpp:1156:24:1156:24 | Load | m1156_3 | -| ir.cpp:1162:6:1162:16 | ChiPartial | partial:m1162_3 | -| ir.cpp:1162:6:1162:16 | ChiTotal | total:m1162_2 | -| ir.cpp:1162:6:1162:16 | SideEffect | m1162_3 | -| ir.cpp:1162:22:1162:22 | Address | &:r1162_5 | -| ir.cpp:1163:18:1163:20 | Address | &:r1163_1 | -| ir.cpp:1163:18:1163:20 | Left | r1163_1 | -| ir.cpp:1163:18:1163:20 | Left | r1163_1 | -| ir.cpp:1163:18:1163:20 | Left | r1163_1 | -| ir.cpp:1163:18:1163:20 | Left | r1163_1 | -| ir.cpp:1163:23:1163:37 | Address | &:r1163_4 | -| ir.cpp:1163:23:1163:37 | Address | &:r1163_9 | -| ir.cpp:1163:23:1163:37 | Address | &:r1163_14 | -| ir.cpp:1163:23:1163:37 | Address | &:r1163_19 | -| ir.cpp:1163:23:1163:37 | Right | r1163_3 | -| ir.cpp:1163:23:1163:37 | Right | r1163_8 | -| ir.cpp:1163:23:1163:37 | Right | r1163_13 | -| ir.cpp:1163:23:1163:37 | Right | r1163_18 | -| ir.cpp:1163:26:1163:26 | ChiPartial | partial:m1163_6 | -| ir.cpp:1163:26:1163:26 | ChiTotal | total:m1163_2 | -| ir.cpp:1163:26:1163:26 | StoreValue | r1163_5 | -| ir.cpp:1163:29:1163:29 | ChiPartial | partial:m1163_11 | -| ir.cpp:1163:29:1163:29 | ChiTotal | total:m1163_7 | -| ir.cpp:1163:29:1163:29 | StoreValue | r1163_10 | -| ir.cpp:1163:32:1163:32 | ChiPartial | partial:m1163_16 | -| ir.cpp:1163:32:1163:32 | ChiTotal | total:m1163_12 | -| ir.cpp:1163:32:1163:32 | StoreValue | r1163_15 | -| ir.cpp:1163:35:1163:35 | ChiPartial | partial:m1163_21 | -| ir.cpp:1163:35:1163:35 | ChiTotal | total:m1163_17 | -| ir.cpp:1163:35:1163:35 | StoreValue | r1163_20 | -| ir.cpp:1164:7:1164:7 | Address | &:r1164_1 | -| ir.cpp:1164:11:1164:13 | Left | r1164_2 | -| ir.cpp:1164:11:1164:16 | Address | &:r1164_5 | -| ir.cpp:1164:11:1164:16 | Load | ~m1163_22 | -| ir.cpp:1164:11:1164:16 | StoreValue | r1164_6 | -| ir.cpp:1164:15:1164:15 | Address | &:r1164_3 | -| ir.cpp:1164:15:1164:15 | Load | m1162_6 | -| ir.cpp:1164:15:1164:15 | Right | r1164_4 | -| ir.cpp:1165:3:1165:5 | Left | r1165_3 | -| ir.cpp:1165:3:1165:8 | Address | &:r1165_6 | -| ir.cpp:1165:3:1165:12 | ChiPartial | partial:m1165_7 | -| ir.cpp:1165:3:1165:12 | ChiTotal | total:m1163_22 | -| ir.cpp:1165:7:1165:7 | Address | &:r1165_4 | -| ir.cpp:1165:7:1165:7 | Load | m1162_6 | -| ir.cpp:1165:7:1165:7 | Right | r1165_5 | -| ir.cpp:1165:12:1165:12 | Address | &:r1165_1 | -| ir.cpp:1165:12:1165:12 | Load | m1164_7 | -| ir.cpp:1165:12:1165:12 | StoreValue | r1165_2 | -| ir.cpp:1166:18:1166:28 | Address | &:r1166_1 | -| ir.cpp:1166:32:1166:78 | Arg(2) | 2:r1166_6 | -| ir.cpp:1166:32:1166:78 | StoreValue | r1166_10 | -| ir.cpp:1166:56:1166:58 | Address | &:r1166_2 | -| ir.cpp:1166:56:1166:58 | Arg(0) | 0:r1166_3 | -| ir.cpp:1166:56:1166:58 | Load | m1165_8 | -| ir.cpp:1166:61:1166:63 | Address | &:r1166_4 | -| ir.cpp:1166:61:1166:63 | Arg(1) | 1:r1166_5 | -| ir.cpp:1166:61:1166:63 | Load | m1165_8 | -| ir.cpp:1166:71:1166:71 | Arg(3) | 3:r1166_7 | -| ir.cpp:1166:74:1166:74 | Arg(4) | 4:r1166_8 | -| ir.cpp:1166:77:1166:77 | Arg(5) | 5:r1166_9 | -| ir.cpp:1167:3:1167:5 | Address | &:r1167_6 | -| ir.cpp:1167:9:1167:11 | Address | &:r1167_1 | -| ir.cpp:1167:9:1167:11 | Left | r1167_2 | -| ir.cpp:1167:9:1167:11 | Load | m1165_8 | -| ir.cpp:1167:9:1167:25 | StoreValue | r1167_5 | -| ir.cpp:1167:15:1167:25 | Address | &:r1167_3 | -| ir.cpp:1167:15:1167:25 | Load | m1166_11 | -| ir.cpp:1167:15:1167:25 | Right | r1167_4 | -| ir.cpp:1172:5:1172:21 | Address | &:r1172_7 | -| ir.cpp:1172:5:1172:21 | ChiPartial | partial:m1172_3 | -| ir.cpp:1172:5:1172:21 | ChiTotal | total:m1172_2 | -| ir.cpp:1172:5:1172:21 | Load | m1175_4 | -| ir.cpp:1172:5:1172:21 | SideEffect | m1172_3 | -| ir.cpp:1172:27:1172:27 | Address | &:r1172_5 | -| ir.cpp:1173:7:1173:7 | Address | &:r1173_1 | -| ir.cpp:1174:3:1174:8 | CallTarget | func:r1174_1 | -| ir.cpp:1174:10:1174:11 | Address | &:r1174_4 | -| ir.cpp:1174:10:1174:11 | Arg(0) | 0:r1174_4 | -| ir.cpp:1174:10:1174:11 | ChiPartial | partial:m1174_11 | -| ir.cpp:1174:10:1174:11 | ChiTotal | total:m1173_2 | -| ir.cpp:1174:10:1174:11 | Unary | r1174_3 | -| ir.cpp:1174:11:1174:11 | Unary | r1174_2 | -| ir.cpp:1174:14:1174:15 | Address | &:r1174_7 | -| ir.cpp:1174:14:1174:15 | Arg(1) | 1:r1174_7 | -| ir.cpp:1174:14:1174:15 | SideEffect | ~m1172_6 | -| ir.cpp:1174:14:1174:15 | Unary | r1174_6 | -| ir.cpp:1174:15:1174:15 | Unary | r1174_5 | -| ir.cpp:1174:18:1174:28 | Arg(2) | 2:r1174_8 | -| ir.cpp:1174:18:1174:28 | BufferSize | r1174_8 | -| ir.cpp:1174:18:1174:28 | BufferSize | r1174_8 | -| ir.cpp:1175:3:1175:11 | Address | &:r1175_1 | -| ir.cpp:1175:10:1175:10 | Address | &:r1175_2 | -| ir.cpp:1175:10:1175:10 | Load | m1174_12 | -| ir.cpp:1175:10:1175:10 | StoreValue | r1175_3 | -| ir.cpp:1178:8:1178:23 | Address | &:r1178_5 | -| ir.cpp:1178:8:1178:23 | ChiPartial | partial:m1178_3 | -| ir.cpp:1178:8:1178:23 | ChiTotal | total:m1178_2 | -| ir.cpp:1178:8:1178:23 | Load | m1179_11 | -| ir.cpp:1178:8:1178:23 | SideEffect | ~m1179_8 | -| ir.cpp:1179:3:1179:23 | Address | &:r1179_1 | -| ir.cpp:1179:3:1179:23 | Address | &:r1179_1 | -| ir.cpp:1179:3:1179:23 | Arg(this) | this:r1179_1 | -| ir.cpp:1179:3:1179:23 | CallTarget | func:r1179_3 | -| ir.cpp:1179:3:1179:23 | ChiPartial | partial:m1179_7 | -| ir.cpp:1179:3:1179:23 | ChiPartial | partial:m1179_10 | -| ir.cpp:1179:3:1179:23 | ChiTotal | total:m1178_4 | -| ir.cpp:1179:3:1179:23 | ChiTotal | total:m1179_2 | -| ir.cpp:1179:3:1179:23 | SideEffect | ~m1178_4 | -| ir.cpp:1179:17:1179:21 | Address | &:r1179_5 | -| ir.cpp:1179:17:1179:21 | Arg(0) | 0:r1179_5 | -| ir.cpp:1179:17:1179:21 | SideEffect | ~m1178_3 | -| ir.cpp:1179:17:1179:21 | Unary | r1179_4 | -| ir.cpp:1182:6:1182:16 | ChiPartial | partial:m1182_3 | -| ir.cpp:1182:6:1182:16 | ChiTotal | total:m1182_2 | -| ir.cpp:1182:6:1182:16 | SideEffect | m1182_3 | -| ir.cpp:1182:22:1182:22 | Address | &:r1182_5 | -| ir.cpp:1183:9:1183:9 | Address | &:r1183_1 | -| ir.cpp:1183:12:1183:13 | StoreValue | r1183_2 | -| ir.cpp:1184:12:1184:12 | Address | &:r1184_1 | -| ir.cpp:1184:12:1184:12 | Condition | r1184_2 | -| ir.cpp:1184:12:1184:12 | Load | m1182_6 | -| ir.cpp:1186:9:1186:9 | Address | &:r1186_2 | -| ir.cpp:1186:13:1186:13 | StoreValue | r1186_1 | +| ir.cpp:1079:6:1079:18 | ChiPartial | partial:m1079_3 | +| ir.cpp:1079:6:1079:18 | ChiTotal | total:m1079_2 | +| ir.cpp:1079:6:1079:18 | SideEffect | ~m1090_1 | +| ir.cpp:1079:39:1079:39 | Address | &:r1079_5 | +| ir.cpp:1079:39:1079:39 | Address | &:r1079_5 | +| ir.cpp:1079:39:1079:39 | Address | &:r1079_7 | +| ir.cpp:1079:39:1079:39 | Address | &:r1079_7 | +| ir.cpp:1079:39:1079:39 | Load | m1079_6 | +| ir.cpp:1079:39:1079:39 | SideEffect | m1079_8 | +| ir.cpp:1080:5:1084:5 | Address | &:r1080_1 | +| ir.cpp:1080:5:1084:5 | Address | &:r1080_7 | +| ir.cpp:1080:5:1084:5 | Address | &:r1080_15 | +| ir.cpp:1080:5:1084:5 | Address | &:r1080_33 | +| ir.cpp:1080:18:1080:18 | Address | &:r1080_2 | +| ir.cpp:1080:18:1080:18 | Address | &:r1080_8 | +| ir.cpp:1080:18:1080:18 | Address | &:r1080_16 | +| ir.cpp:1080:18:1080:18 | Address | &:r1080_27 | +| ir.cpp:1080:18:1080:18 | Address | &:r1080_36 | +| ir.cpp:1080:18:1080:18 | Address | &:r1080_42 | +| ir.cpp:1080:18:1080:18 | Address | &:r1080_42 | +| ir.cpp:1080:18:1080:18 | Arg(0) | 0:r1080_28 | +| ir.cpp:1080:18:1080:18 | Arg(this) | this:r0_1 | +| ir.cpp:1080:18:1080:18 | Arg(this) | this:r0_3 | +| ir.cpp:1080:18:1080:18 | Arg(this) | this:r0_5 | +| ir.cpp:1080:18:1080:18 | Arg(this) | this:r0_7 | +| ir.cpp:1080:18:1080:18 | Arg(this) | this:r1080_42 | +| ir.cpp:1080:18:1080:18 | CallTarget | func:r1080_10 | +| ir.cpp:1080:18:1080:18 | CallTarget | func:r1080_18 | +| ir.cpp:1080:18:1080:18 | CallTarget | func:r1080_26 | +| ir.cpp:1080:18:1080:18 | CallTarget | func:r1080_35 | +| ir.cpp:1080:18:1080:18 | CallTarget | func:r1080_43 | +| ir.cpp:1080:18:1080:18 | ChiPartial | partial:m1080_12 | +| ir.cpp:1080:18:1080:18 | ChiPartial | partial:m1080_20 | +| ir.cpp:1080:18:1080:18 | ChiPartial | partial:m1080_30 | +| ir.cpp:1080:18:1080:18 | ChiPartial | partial:m1080_37 | +| ir.cpp:1080:18:1080:18 | ChiPartial | partial:m1080_45 | +| ir.cpp:1080:18:1080:18 | ChiPartial | partial:m1080_48 | +| ir.cpp:1080:18:1080:18 | ChiTotal | total:m1079_4 | +| ir.cpp:1080:18:1080:18 | ChiTotal | total:m1080_13 | +| ir.cpp:1080:18:1080:18 | ChiTotal | total:m1080_23 | +| ir.cpp:1080:18:1080:18 | ChiTotal | total:m1080_24 | +| ir.cpp:1080:18:1080:18 | ChiTotal | total:m1080_31 | +| ir.cpp:1080:18:1080:18 | ChiTotal | total:m1080_38 | +| ir.cpp:1080:18:1080:18 | Condition | r1080_29 | +| ir.cpp:1080:18:1080:18 | Load | m1079_6 | +| ir.cpp:1080:18:1080:18 | Load | m1080_6 | +| ir.cpp:1080:18:1080:18 | Load | m1080_6 | +| ir.cpp:1080:18:1080:18 | Load | m1080_22 | +| ir.cpp:1080:18:1080:18 | Phi | from 0:m1080_14 | +| ir.cpp:1080:18:1080:18 | Phi | from 0:~m1080_21 | +| ir.cpp:1080:18:1080:18 | Phi | from 4:m1080_49 | +| ir.cpp:1080:18:1080:18 | Phi | from 4:~m1080_46 | +| ir.cpp:1080:18:1080:18 | SideEffect | m1080_23 | +| ir.cpp:1080:18:1080:18 | SideEffect | ~m1079_4 | +| ir.cpp:1080:18:1080:18 | SideEffect | ~m1080_13 | +| ir.cpp:1080:18:1080:18 | SideEffect | ~m1080_24 | +| ir.cpp:1080:18:1080:18 | SideEffect | ~m1080_31 | +| ir.cpp:1080:18:1080:18 | SideEffect | ~m1080_38 | +| ir.cpp:1080:18:1080:18 | StoreValue | r1080_5 | +| ir.cpp:1080:18:1080:18 | StoreValue | r1080_11 | +| ir.cpp:1080:18:1080:18 | StoreValue | r1080_19 | +| ir.cpp:1080:18:1080:18 | Unary | r1080_3 | +| ir.cpp:1080:18:1080:18 | Unary | r1080_4 | +| ir.cpp:1080:18:1080:18 | Unary | r1080_9 | +| ir.cpp:1080:18:1080:18 | Unary | r1080_17 | +| ir.cpp:1080:18:1080:18 | Unary | r1080_25 | +| ir.cpp:1080:18:1080:18 | Unary | r1080_34 | +| ir.cpp:1080:18:1080:18 | Unary | r1080_44 | +| ir.cpp:1080:18:1080:19 | Load | ~m1080_38 | +| ir.cpp:1080:18:1080:19 | StoreValue | r1080_39 | +| ir.cpp:1081:13:1081:13 | Address | &:r1081_1 | +| ir.cpp:1081:13:1081:13 | Left | r1081_2 | +| ir.cpp:1081:13:1081:13 | Load | m1080_40 | +| ir.cpp:1081:13:1081:17 | Condition | r1081_4 | +| ir.cpp:1081:17:1081:17 | Right | r1081_3 | +| ir.cpp:1086:5:1090:5 | Address | &:r1086_1 | +| ir.cpp:1086:5:1090:5 | Address | &:r1086_7 | +| ir.cpp:1086:5:1090:5 | Address | &:r1086_15 | +| ir.cpp:1086:5:1090:5 | Address | &:r1086_42 | +| ir.cpp:1086:25:1086:25 | Address | &:r1086_2 | +| ir.cpp:1086:25:1086:25 | Address | &:r1086_8 | +| ir.cpp:1086:25:1086:25 | Address | &:r1086_16 | +| ir.cpp:1086:25:1086:25 | Address | &:r1086_27 | +| ir.cpp:1086:25:1086:25 | Address | &:r1086_33 | +| ir.cpp:1086:25:1086:25 | Address | &:r1086_33 | +| ir.cpp:1086:25:1086:25 | Arg(0) | 0:r1086_28 | +| ir.cpp:1086:25:1086:25 | Arg(this) | this:r0_9 | +| ir.cpp:1086:25:1086:25 | Arg(this) | this:r0_11 | +| ir.cpp:1086:25:1086:25 | Arg(this) | this:r0_13 | +| ir.cpp:1086:25:1086:25 | Arg(this) | this:r0_15 | +| ir.cpp:1086:25:1086:25 | Arg(this) | this:r1086_33 | +| ir.cpp:1086:25:1086:25 | CallTarget | func:r1086_10 | +| ir.cpp:1086:25:1086:25 | CallTarget | func:r1086_18 | +| ir.cpp:1086:25:1086:25 | CallTarget | func:r1086_26 | +| ir.cpp:1086:25:1086:25 | CallTarget | func:r1086_34 | +| ir.cpp:1086:25:1086:25 | CallTarget | func:r1086_44 | +| ir.cpp:1086:25:1086:25 | ChiPartial | partial:m1086_12 | +| ir.cpp:1086:25:1086:25 | ChiPartial | partial:m1086_20 | +| ir.cpp:1086:25:1086:25 | ChiPartial | partial:m1086_30 | +| ir.cpp:1086:25:1086:25 | ChiPartial | partial:m1086_36 | +| ir.cpp:1086:25:1086:25 | ChiPartial | partial:m1086_39 | +| ir.cpp:1086:25:1086:25 | ChiPartial | partial:m1086_46 | +| ir.cpp:1086:25:1086:25 | ChiTotal | total:m1080_31 | +| ir.cpp:1086:25:1086:25 | ChiTotal | total:m1086_13 | +| ir.cpp:1086:25:1086:25 | ChiTotal | total:m1086_23 | +| ir.cpp:1086:25:1086:25 | ChiTotal | total:m1086_24 | +| ir.cpp:1086:25:1086:25 | ChiTotal | total:m1086_31 | +| ir.cpp:1086:25:1086:25 | ChiTotal | total:m1086_47 | +| ir.cpp:1086:25:1086:25 | Condition | r1086_29 | +| ir.cpp:1086:25:1086:25 | Load | m1079_6 | +| ir.cpp:1086:25:1086:25 | Load | m1086_6 | +| ir.cpp:1086:25:1086:25 | Load | m1086_6 | +| ir.cpp:1086:25:1086:25 | Load | m1086_22 | +| ir.cpp:1086:25:1086:25 | Phi | from 5:m1086_14 | +| ir.cpp:1086:25:1086:25 | Phi | from 5:~m1086_21 | +| ir.cpp:1086:25:1086:25 | Phi | from 7:m1086_40 | +| ir.cpp:1086:25:1086:25 | Phi | from 7:~m1086_37 | +| ir.cpp:1086:25:1086:25 | SideEffect | m1086_23 | +| ir.cpp:1086:25:1086:25 | SideEffect | ~m1080_31 | +| ir.cpp:1086:25:1086:25 | SideEffect | ~m1086_13 | +| ir.cpp:1086:25:1086:25 | SideEffect | ~m1086_24 | +| ir.cpp:1086:25:1086:25 | SideEffect | ~m1086_31 | +| ir.cpp:1086:25:1086:25 | SideEffect | ~m1086_47 | +| ir.cpp:1086:25:1086:25 | StoreValue | r1086_5 | +| ir.cpp:1086:25:1086:25 | StoreValue | r1086_11 | +| ir.cpp:1086:25:1086:25 | StoreValue | r1086_19 | +| ir.cpp:1086:25:1086:25 | Unary | r1086_3 | +| ir.cpp:1086:25:1086:25 | Unary | r1086_4 | +| ir.cpp:1086:25:1086:25 | Unary | r1086_9 | +| ir.cpp:1086:25:1086:25 | Unary | r1086_17 | +| ir.cpp:1086:25:1086:25 | Unary | r1086_25 | +| ir.cpp:1086:25:1086:25 | Unary | r1086_35 | +| ir.cpp:1086:25:1086:25 | Unary | r1086_43 | +| ir.cpp:1086:25:1086:25 | Unary | r1086_45 | +| ir.cpp:1086:25:1086:26 | StoreValue | r1086_50 | +| ir.cpp:1086:25:1086:26 | Unary | r1086_48 | +| ir.cpp:1086:25:1086:26 | Unary | r1086_49 | +| ir.cpp:1087:13:1087:13 | Address | &:r1087_1 | +| ir.cpp:1087:13:1087:13 | Address | &:r1087_2 | +| ir.cpp:1087:13:1087:13 | Left | r1087_3 | +| ir.cpp:1087:13:1087:13 | Load | m1086_51 | +| ir.cpp:1087:13:1087:13 | Load | ~m1086_47 | +| ir.cpp:1087:13:1087:17 | Condition | r1087_5 | +| ir.cpp:1087:17:1087:17 | Right | r1087_4 | +| ir.cpp:1090:5:1090:5 | Phi | from 6:~m1086_31 | +| ir.cpp:1090:5:1090:5 | Phi | from 9:~m1086_47 | +| ir.cpp:1110:5:1110:11 | Address | &:r1110_7 | +| ir.cpp:1110:5:1110:11 | ChiPartial | partial:m1110_3 | +| ir.cpp:1110:5:1110:11 | ChiTotal | total:m1110_2 | +| ir.cpp:1110:5:1110:11 | Load | m1112_4 | +| ir.cpp:1110:5:1110:11 | SideEffect | ~m1111_2 | +| ir.cpp:1110:17:1110:17 | Address | &:r1110_5 | +| ir.cpp:1111:3:1111:14 | ChiPartial | partial:m1111_1 | +| ir.cpp:1111:3:1111:14 | ChiTotal | total:m1110_4 | +| ir.cpp:1111:3:1111:14 | SideEffect | ~m1110_4 | +| ir.cpp:1112:3:1112:11 | Address | &:r1112_1 | +| ir.cpp:1112:10:1112:10 | Address | &:r1112_2 | +| ir.cpp:1112:10:1112:10 | Load | m1110_6 | +| ir.cpp:1112:10:1112:10 | StoreValue | r1112_3 | +| ir.cpp:1115:13:1115:30 | ChiPartial | partial:m1115_3 | +| ir.cpp:1115:13:1115:30 | ChiTotal | total:m1115_2 | +| ir.cpp:1115:13:1115:30 | SideEffect | ~m1117_2 | +| ir.cpp:1115:46:1115:46 | Address | &:r1115_5 | +| ir.cpp:1115:46:1115:46 | Address | &:r1115_5 | +| ir.cpp:1115:46:1115:46 | Address | &:r1115_7 | +| ir.cpp:1115:46:1115:46 | Address | &:r1115_7 | +| ir.cpp:1115:46:1115:46 | Load | m1115_6 | +| ir.cpp:1115:46:1115:46 | SideEffect | m1115_8 | +| ir.cpp:1115:62:1115:62 | Address | &:r1115_9 | +| ir.cpp:1115:79:1115:79 | Address | &:r1115_11 | +| ir.cpp:1115:79:1115:79 | Address | &:r1115_11 | +| ir.cpp:1115:79:1115:79 | Address | &:r1115_13 | +| ir.cpp:1115:79:1115:79 | Address | &:r1115_13 | +| ir.cpp:1115:79:1115:79 | Load | m1115_12 | +| ir.cpp:1115:79:1115:79 | SideEffect | m1115_14 | +| ir.cpp:1115:95:1115:95 | Address | &:r1115_15 | +| ir.cpp:1117:3:1121:6 | ChiPartial | partial:m1117_1 | +| ir.cpp:1117:3:1121:6 | ChiTotal | total:m1115_4 | +| ir.cpp:1117:3:1121:6 | SideEffect | ~m1115_4 | +| ir.cpp:1120:13:1120:13 | Address | &:r1120_1 | +| ir.cpp:1120:13:1120:13 | AsmOperand(0) | 0:r1120_3 | +| ir.cpp:1120:13:1120:13 | Load | m1115_6 | +| ir.cpp:1120:13:1120:13 | Unary | r1120_2 | +| ir.cpp:1120:23:1120:23 | AsmOperand(1) | 1:r1120_4 | +| ir.cpp:1120:33:1120:33 | Address | &:r1120_5 | +| ir.cpp:1120:33:1120:33 | Address | &:r1120_6 | +| ir.cpp:1120:33:1120:33 | AsmOperand(2) | 2:r1120_7 | +| ir.cpp:1120:33:1120:33 | Load | m1115_12 | +| ir.cpp:1120:33:1120:33 | Load | ~m1115_14 | +| ir.cpp:1120:42:1120:42 | Address | &:r1120_8 | +| ir.cpp:1120:42:1120:42 | AsmOperand(3) | 3:r1120_9 | +| ir.cpp:1120:42:1120:42 | Load | m1115_16 | +| ir.cpp:1124:6:1124:23 | ChiPartial | partial:m1124_3 | +| ir.cpp:1124:6:1124:23 | ChiTotal | total:m1124_2 | +| ir.cpp:1124:6:1124:23 | SideEffect | m1124_3 | +| ir.cpp:1127:9:1127:9 | Address | &:r1127_1 | +| ir.cpp:1128:9:1128:9 | Address | &:r1128_1 | +| ir.cpp:1129:29:1129:29 | Address | &:r1129_1 | +| ir.cpp:1139:6:1139:30 | ChiPartial | partial:m1139_3 | +| ir.cpp:1139:6:1139:30 | ChiTotal | total:m1139_2 | +| ir.cpp:1139:6:1139:30 | SideEffect | m1139_3 | +| ir.cpp:1141:5:1141:20 | Address | &:r1141_1 | +| ir.cpp:1141:5:1141:20 | Address | &:r1141_5 | +| ir.cpp:1141:5:1141:20 | Address | &:r1141_10 | +| ir.cpp:1141:5:1141:20 | Address | &:r1141_10 | +| ir.cpp:1141:5:1141:20 | Condition | r1141_8 | +| ir.cpp:1141:5:1141:20 | Left | r1141_6 | +| ir.cpp:1141:5:1141:20 | Left | r1141_11 | +| ir.cpp:1141:5:1141:20 | Load | m1141_4 | +| ir.cpp:1141:5:1141:20 | Load | m1141_4 | +| ir.cpp:1141:5:1141:20 | Phi | from 0:m1141_3 | +| ir.cpp:1141:5:1141:20 | Phi | from 2:m1141_14 | +| ir.cpp:1141:5:1141:20 | Right | r1141_7 | +| ir.cpp:1141:5:1141:20 | Right | r1141_12 | +| ir.cpp:1141:5:1141:20 | StoreValue | r1141_2 | +| ir.cpp:1141:5:1141:20 | StoreValue | r1141_13 | +| ir.cpp:1144:6:1144:23 | ChiPartial | partial:m1144_3 | +| ir.cpp:1144:6:1144:23 | ChiTotal | total:m1144_2 | +| ir.cpp:1144:6:1144:23 | Phi | from 2:~m1144_10 | +| ir.cpp:1144:6:1144:23 | Phi | from 7:~m1156_8 | +| ir.cpp:1144:6:1144:23 | Phi | from 8:~m1144_4 | +| ir.cpp:1144:6:1144:23 | Phi | from 10:~m1144_4 | +| ir.cpp:1144:6:1144:23 | SideEffect | ~m1144_7 | +| ir.cpp:1144:30:1144:30 | Address | &:r1144_5 | +| ir.cpp:1146:9:1146:9 | Address | &:r1146_1 | +| ir.cpp:1146:12:1146:13 | StoreValue | r1146_2 | +| ir.cpp:1147:9:1147:9 | Address | &:r1147_1 | +| ir.cpp:1147:9:1147:9 | Condition | r1147_2 | +| ir.cpp:1147:9:1147:9 | Load | m1144_6 | +| ir.cpp:1148:7:1148:28 | Address | &:r1148_1 | +| ir.cpp:1148:7:1148:28 | Address | &:r1148_1 | +| ir.cpp:1148:7:1148:28 | Load | m1148_4 | +| ir.cpp:1148:13:1148:28 | StoreValue | r1148_3 | +| ir.cpp:1148:13:1148:28 | Unary | r1148_2 | +| ir.cpp:1150:14:1150:14 | Address | &:r1150_1 | +| ir.cpp:1150:14:1150:14 | Left | r1150_2 | +| ir.cpp:1150:14:1150:14 | Load | m1146_3 | +| ir.cpp:1150:14:1150:18 | Condition | r1150_4 | +| ir.cpp:1150:18:1150:18 | Right | r1150_3 | +| ir.cpp:1153:5:1153:5 | Address | &:r1153_2 | +| ir.cpp:1153:9:1153:9 | StoreValue | r1153_1 | +| ir.cpp:1155:22:1155:22 | Address | &:r1155_2 | +| ir.cpp:1155:22:1155:22 | Address | &:r1155_2 | +| ir.cpp:1155:22:1155:22 | Address | &:r1155_4 | +| ir.cpp:1155:22:1155:22 | Load | m1155_3 | +| ir.cpp:1156:5:1156:19 | Address | &:r1156_1 | +| ir.cpp:1156:5:1156:19 | Address | &:r1156_1 | +| ir.cpp:1156:5:1156:19 | Address | &:r1156_1 | +| ir.cpp:1156:5:1156:19 | Arg(this) | this:r1156_1 | +| ir.cpp:1156:5:1156:19 | CallTarget | func:r1156_3 | +| ir.cpp:1156:5:1156:19 | ChiPartial | partial:m1156_7 | +| ir.cpp:1156:5:1156:19 | ChiPartial | partial:m1156_10 | +| ir.cpp:1156:5:1156:19 | ChiTotal | total:m1144_4 | +| ir.cpp:1156:5:1156:19 | ChiTotal | total:m1156_2 | +| ir.cpp:1156:5:1156:19 | Load | m1156_11 | +| ir.cpp:1156:5:1156:19 | SideEffect | ~m1144_4 | +| ir.cpp:1156:18:1156:18 | Address | &:r1156_4 | +| ir.cpp:1156:18:1156:18 | Address | &:r1156_5 | +| ir.cpp:1156:18:1156:18 | Arg(0) | 0:r1156_5 | +| ir.cpp:1156:18:1156:18 | Load | m1155_3 | +| ir.cpp:1156:18:1156:18 | SideEffect | ~m1155_5 | +| ir.cpp:1158:24:1158:24 | Address | &:r1158_2 | +| ir.cpp:1158:24:1158:24 | Address | &:r1158_2 | +| ir.cpp:1158:24:1158:24 | Address | &:r1158_4 | +| ir.cpp:1158:24:1158:24 | Load | m1158_3 | +| ir.cpp:1164:6:1164:16 | ChiPartial | partial:m1164_3 | +| ir.cpp:1164:6:1164:16 | ChiTotal | total:m1164_2 | +| ir.cpp:1164:6:1164:16 | SideEffect | m1164_3 | +| ir.cpp:1164:22:1164:22 | Address | &:r1164_5 | +| ir.cpp:1165:18:1165:20 | Address | &:r1165_1 | +| ir.cpp:1165:18:1165:20 | Left | r1165_1 | +| ir.cpp:1165:18:1165:20 | Left | r1165_1 | +| ir.cpp:1165:18:1165:20 | Left | r1165_1 | +| ir.cpp:1165:18:1165:20 | Left | r1165_1 | +| ir.cpp:1165:23:1165:37 | Address | &:r1165_4 | +| ir.cpp:1165:23:1165:37 | Address | &:r1165_9 | +| ir.cpp:1165:23:1165:37 | Address | &:r1165_14 | +| ir.cpp:1165:23:1165:37 | Address | &:r1165_19 | +| ir.cpp:1165:23:1165:37 | Right | r1165_3 | +| ir.cpp:1165:23:1165:37 | Right | r1165_8 | +| ir.cpp:1165:23:1165:37 | Right | r1165_13 | +| ir.cpp:1165:23:1165:37 | Right | r1165_18 | +| ir.cpp:1165:26:1165:26 | ChiPartial | partial:m1165_6 | +| ir.cpp:1165:26:1165:26 | ChiTotal | total:m1165_2 | +| ir.cpp:1165:26:1165:26 | StoreValue | r1165_5 | +| ir.cpp:1165:29:1165:29 | ChiPartial | partial:m1165_11 | +| ir.cpp:1165:29:1165:29 | ChiTotal | total:m1165_7 | +| ir.cpp:1165:29:1165:29 | StoreValue | r1165_10 | +| ir.cpp:1165:32:1165:32 | ChiPartial | partial:m1165_16 | +| ir.cpp:1165:32:1165:32 | ChiTotal | total:m1165_12 | +| ir.cpp:1165:32:1165:32 | StoreValue | r1165_15 | +| ir.cpp:1165:35:1165:35 | ChiPartial | partial:m1165_21 | +| ir.cpp:1165:35:1165:35 | ChiTotal | total:m1165_17 | +| ir.cpp:1165:35:1165:35 | StoreValue | r1165_20 | +| ir.cpp:1166:7:1166:7 | Address | &:r1166_1 | +| ir.cpp:1166:11:1166:13 | Left | r1166_2 | +| ir.cpp:1166:11:1166:16 | Address | &:r1166_5 | +| ir.cpp:1166:11:1166:16 | Load | ~m1165_22 | +| ir.cpp:1166:11:1166:16 | StoreValue | r1166_6 | +| ir.cpp:1166:15:1166:15 | Address | &:r1166_3 | +| ir.cpp:1166:15:1166:15 | Load | m1164_6 | +| ir.cpp:1166:15:1166:15 | Right | r1166_4 | +| ir.cpp:1167:3:1167:5 | Left | r1167_3 | +| ir.cpp:1167:3:1167:8 | Address | &:r1167_6 | +| ir.cpp:1167:3:1167:12 | ChiPartial | partial:m1167_7 | +| ir.cpp:1167:3:1167:12 | ChiTotal | total:m1165_22 | +| ir.cpp:1167:7:1167:7 | Address | &:r1167_4 | +| ir.cpp:1167:7:1167:7 | Load | m1164_6 | +| ir.cpp:1167:7:1167:7 | Right | r1167_5 | +| ir.cpp:1167:12:1167:12 | Address | &:r1167_1 | +| ir.cpp:1167:12:1167:12 | Load | m1166_7 | +| ir.cpp:1167:12:1167:12 | StoreValue | r1167_2 | +| ir.cpp:1168:18:1168:28 | Address | &:r1168_1 | +| ir.cpp:1168:32:1168:78 | Arg(2) | 2:r1168_6 | +| ir.cpp:1168:32:1168:78 | StoreValue | r1168_10 | +| ir.cpp:1168:56:1168:58 | Address | &:r1168_2 | +| ir.cpp:1168:56:1168:58 | Arg(0) | 0:r1168_3 | +| ir.cpp:1168:56:1168:58 | Load | m1167_8 | +| ir.cpp:1168:61:1168:63 | Address | &:r1168_4 | +| ir.cpp:1168:61:1168:63 | Arg(1) | 1:r1168_5 | +| ir.cpp:1168:61:1168:63 | Load | m1167_8 | +| ir.cpp:1168:71:1168:71 | Arg(3) | 3:r1168_7 | +| ir.cpp:1168:74:1168:74 | Arg(4) | 4:r1168_8 | +| ir.cpp:1168:77:1168:77 | Arg(5) | 5:r1168_9 | +| ir.cpp:1169:3:1169:5 | Address | &:r1169_6 | +| ir.cpp:1169:9:1169:11 | Address | &:r1169_1 | +| ir.cpp:1169:9:1169:11 | Left | r1169_2 | +| ir.cpp:1169:9:1169:11 | Load | m1167_8 | +| ir.cpp:1169:9:1169:25 | StoreValue | r1169_5 | +| ir.cpp:1169:15:1169:25 | Address | &:r1169_3 | +| ir.cpp:1169:15:1169:25 | Load | m1168_11 | +| ir.cpp:1169:15:1169:25 | Right | r1169_4 | +| ir.cpp:1174:5:1174:21 | Address | &:r1174_7 | +| ir.cpp:1174:5:1174:21 | ChiPartial | partial:m1174_3 | +| ir.cpp:1174:5:1174:21 | ChiTotal | total:m1174_2 | +| ir.cpp:1174:5:1174:21 | Load | m1177_4 | +| ir.cpp:1174:5:1174:21 | SideEffect | m1174_3 | +| ir.cpp:1174:27:1174:27 | Address | &:r1174_5 | +| ir.cpp:1175:7:1175:7 | Address | &:r1175_1 | +| ir.cpp:1176:3:1176:8 | CallTarget | func:r1176_1 | +| ir.cpp:1176:10:1176:11 | Address | &:r1176_4 | +| ir.cpp:1176:10:1176:11 | Arg(0) | 0:r1176_4 | +| ir.cpp:1176:10:1176:11 | ChiPartial | partial:m1176_11 | +| ir.cpp:1176:10:1176:11 | ChiTotal | total:m1175_2 | +| ir.cpp:1176:10:1176:11 | Unary | r1176_3 | +| ir.cpp:1176:11:1176:11 | Unary | r1176_2 | +| ir.cpp:1176:14:1176:15 | Address | &:r1176_7 | +| ir.cpp:1176:14:1176:15 | Arg(1) | 1:r1176_7 | +| ir.cpp:1176:14:1176:15 | SideEffect | ~m1174_6 | +| ir.cpp:1176:14:1176:15 | Unary | r1176_6 | +| ir.cpp:1176:15:1176:15 | Unary | r1176_5 | +| ir.cpp:1176:18:1176:28 | Arg(2) | 2:r1176_8 | +| ir.cpp:1176:18:1176:28 | BufferSize | r1176_8 | +| ir.cpp:1176:18:1176:28 | BufferSize | r1176_8 | +| ir.cpp:1177:3:1177:11 | Address | &:r1177_1 | +| ir.cpp:1177:10:1177:10 | Address | &:r1177_2 | +| ir.cpp:1177:10:1177:10 | Load | m1176_12 | +| ir.cpp:1177:10:1177:10 | StoreValue | r1177_3 | +| ir.cpp:1180:8:1180:23 | Address | &:r1180_5 | +| ir.cpp:1180:8:1180:23 | ChiPartial | partial:m1180_3 | +| ir.cpp:1180:8:1180:23 | ChiTotal | total:m1180_2 | +| ir.cpp:1180:8:1180:23 | Load | m1181_11 | +| ir.cpp:1180:8:1180:23 | SideEffect | ~m1181_8 | +| ir.cpp:1181:3:1181:23 | Address | &:r1181_1 | +| ir.cpp:1181:3:1181:23 | Address | &:r1181_1 | +| ir.cpp:1181:3:1181:23 | Arg(this) | this:r1181_1 | +| ir.cpp:1181:3:1181:23 | CallTarget | func:r1181_3 | +| ir.cpp:1181:3:1181:23 | ChiPartial | partial:m1181_7 | +| ir.cpp:1181:3:1181:23 | ChiPartial | partial:m1181_10 | +| ir.cpp:1181:3:1181:23 | ChiTotal | total:m1180_4 | +| ir.cpp:1181:3:1181:23 | ChiTotal | total:m1181_2 | +| ir.cpp:1181:3:1181:23 | SideEffect | ~m1180_4 | +| ir.cpp:1181:17:1181:21 | Address | &:r1181_5 | +| ir.cpp:1181:17:1181:21 | Arg(0) | 0:r1181_5 | +| ir.cpp:1181:17:1181:21 | SideEffect | ~m1180_3 | +| ir.cpp:1181:17:1181:21 | Unary | r1181_4 | +| ir.cpp:1184:6:1184:16 | ChiPartial | partial:m1184_3 | +| ir.cpp:1184:6:1184:16 | ChiTotal | total:m1184_2 | +| ir.cpp:1184:6:1184:16 | SideEffect | m1184_3 | +| ir.cpp:1184:22:1184:22 | Address | &:r1184_5 | +| ir.cpp:1185:9:1185:9 | Address | &:r1185_1 | +| ir.cpp:1185:12:1185:13 | StoreValue | r1185_2 | +| ir.cpp:1186:12:1186:12 | Address | &:r1186_1 | +| ir.cpp:1186:12:1186:12 | Condition | r1186_2 | +| ir.cpp:1186:12:1186:12 | Load | m1184_6 | | ir.cpp:1188:9:1188:9 | Address | &:r1188_2 | -| ir.cpp:1188:9:1188:9 | Phi | from 0:m1183_3 | -| ir.cpp:1188:9:1188:9 | Phi | from 1:m1186_3 | -| ir.cpp:1188:13:1188:13 | Address | &:r1188_3 | -| ir.cpp:1188:13:1188:13 | Load | m1188_1 | -| ir.cpp:1188:13:1188:13 | StoreValue | r1188_4 | -| ir.cpp:1191:6:1191:28 | ChiPartial | partial:m1191_3 | -| ir.cpp:1191:6:1191:28 | ChiTotal | total:m1191_2 | -| ir.cpp:1191:6:1191:28 | SideEffect | m1191_3 | -| ir.cpp:1191:34:1191:34 | Address | &:r1191_5 | -| ir.cpp:1192:9:1192:9 | Address | &:r1192_1 | -| ir.cpp:1192:12:1192:13 | StoreValue | r1192_2 | -| ir.cpp:1193:12:1193:12 | Address | &:r1193_1 | -| ir.cpp:1193:12:1193:12 | Condition | r1193_2 | -| ir.cpp:1193:12:1193:12 | Load | m1191_6 | -| ir.cpp:1195:9:1195:9 | Address | &:r1195_2 | -| ir.cpp:1195:13:1195:13 | StoreValue | r1195_1 | +| ir.cpp:1188:13:1188:13 | StoreValue | r1188_1 | +| ir.cpp:1190:9:1190:9 | Address | &:r1190_2 | +| ir.cpp:1190:9:1190:9 | Phi | from 0:m1185_3 | +| ir.cpp:1190:9:1190:9 | Phi | from 1:m1188_3 | +| ir.cpp:1190:13:1190:13 | Address | &:r1190_3 | +| ir.cpp:1190:13:1190:13 | Load | m1190_1 | +| ir.cpp:1190:13:1190:13 | StoreValue | r1190_4 | +| ir.cpp:1193:6:1193:28 | ChiPartial | partial:m1193_3 | +| ir.cpp:1193:6:1193:28 | ChiTotal | total:m1193_2 | +| ir.cpp:1193:6:1193:28 | SideEffect | m1193_3 | +| ir.cpp:1193:34:1193:34 | Address | &:r1193_5 | +| ir.cpp:1194:9:1194:9 | Address | &:r1194_1 | +| ir.cpp:1194:12:1194:13 | StoreValue | r1194_2 | +| ir.cpp:1195:12:1195:12 | Address | &:r1195_1 | +| ir.cpp:1195:12:1195:12 | Condition | r1195_2 | +| ir.cpp:1195:12:1195:12 | Load | m1193_6 | | ir.cpp:1197:9:1197:9 | Address | &:r1197_2 | | ir.cpp:1197:13:1197:13 | StoreValue | r1197_1 | | ir.cpp:1199:9:1199:9 | Address | &:r1199_2 | -| ir.cpp:1199:9:1199:9 | Phi | from 0:m1192_3 | -| ir.cpp:1199:9:1199:9 | Phi | from 2:m1197_3 | -| ir.cpp:1199:13:1199:13 | Address | &:r1199_3 | -| ir.cpp:1199:13:1199:13 | Load | m1199_1 | -| ir.cpp:1199:13:1199:13 | StoreValue | r1199_4 | -| ir.cpp:1202:6:1202:16 | ChiPartial | partial:m1202_3 | -| ir.cpp:1202:6:1202:16 | ChiTotal | total:m1202_2 | -| ir.cpp:1202:6:1202:16 | SideEffect | m1202_3 | -| ir.cpp:1202:22:1202:22 | Address | &:r1202_5 | -| ir.cpp:1203:9:1203:9 | Address | &:r1203_1 | -| ir.cpp:1203:12:1203:13 | StoreValue | r1203_2 | -| ir.cpp:1204:12:1204:12 | Address | &:r1204_1 | -| ir.cpp:1204:12:1204:12 | Condition | r1204_2 | -| ir.cpp:1204:12:1204:12 | Load | m1202_6 | -| ir.cpp:1206:9:1206:9 | Address | &:r1206_2 | -| ir.cpp:1206:13:1206:13 | StoreValue | r1206_1 | -| ir.cpp:1209:9:1209:9 | Address | &:r1209_2 | -| ir.cpp:1209:13:1209:13 | StoreValue | r1209_1 | -| ir.cpp:1210:5:1210:5 | Phi | from 0:m1203_3 | -| ir.cpp:1210:5:1210:5 | Phi | from 1:m1206_3 | -| ir.cpp:1210:5:1210:5 | Phi | from 2:m1209_3 | -| ir.cpp:1211:9:1211:9 | Address | &:r1211_1 | -| ir.cpp:1211:13:1211:13 | Address | &:r1211_2 | -| ir.cpp:1211:13:1211:13 | Load | m1210_1 | -| ir.cpp:1211:13:1211:13 | StoreValue | r1211_3 | -| ir.cpp:1214:6:1214:24 | ChiPartial | partial:m1214_3 | -| ir.cpp:1214:6:1214:24 | ChiTotal | total:m1214_2 | -| ir.cpp:1214:6:1214:24 | SideEffect | m1214_3 | -| ir.cpp:1214:30:1214:30 | Address | &:r1214_5 | -| ir.cpp:1215:9:1215:9 | Address | &:r1215_1 | -| ir.cpp:1215:12:1215:13 | StoreValue | r1215_2 | -| ir.cpp:1216:12:1216:12 | Address | &:r1216_1 | -| ir.cpp:1216:12:1216:12 | Condition | r1216_2 | -| ir.cpp:1216:12:1216:12 | Load | m1214_6 | -| ir.cpp:1218:13:1218:13 | Address | &:r1218_2 | -| ir.cpp:1218:17:1218:17 | StoreValue | r1218_1 | -| ir.cpp:1222:13:1222:13 | Address | &:r1222_2 | -| ir.cpp:1222:17:1222:17 | StoreValue | r1222_1 | -| ir.cpp:1226:13:1226:13 | Address | &:r1226_2 | -| ir.cpp:1226:17:1226:17 | StoreValue | r1226_1 | -| ir.cpp:1227:5:1227:5 | Phi | from 1:m1218_3 | -| ir.cpp:1227:5:1227:5 | Phi | from 2:m1222_3 | -| ir.cpp:1227:5:1227:5 | Phi | from 3:m1226_3 | -| ir.cpp:1228:9:1228:9 | Address | &:r1228_1 | +| ir.cpp:1199:13:1199:13 | StoreValue | r1199_1 | +| ir.cpp:1201:9:1201:9 | Address | &:r1201_2 | +| ir.cpp:1201:9:1201:9 | Phi | from 0:m1194_3 | +| ir.cpp:1201:9:1201:9 | Phi | from 2:m1199_3 | +| ir.cpp:1201:13:1201:13 | Address | &:r1201_3 | +| ir.cpp:1201:13:1201:13 | Load | m1201_1 | +| ir.cpp:1201:13:1201:13 | StoreValue | r1201_4 | +| ir.cpp:1204:6:1204:16 | ChiPartial | partial:m1204_3 | +| ir.cpp:1204:6:1204:16 | ChiTotal | total:m1204_2 | +| ir.cpp:1204:6:1204:16 | SideEffect | m1204_3 | +| ir.cpp:1204:22:1204:22 | Address | &:r1204_5 | +| ir.cpp:1205:9:1205:9 | Address | &:r1205_1 | +| ir.cpp:1205:12:1205:13 | StoreValue | r1205_2 | +| ir.cpp:1206:12:1206:12 | Address | &:r1206_1 | +| ir.cpp:1206:12:1206:12 | Condition | r1206_2 | +| ir.cpp:1206:12:1206:12 | Load | m1204_6 | +| ir.cpp:1208:9:1208:9 | Address | &:r1208_2 | +| ir.cpp:1208:13:1208:13 | StoreValue | r1208_1 | +| ir.cpp:1211:9:1211:9 | Address | &:r1211_2 | +| ir.cpp:1211:13:1211:13 | StoreValue | r1211_1 | +| ir.cpp:1212:5:1212:5 | Phi | from 0:m1205_3 | +| ir.cpp:1212:5:1212:5 | Phi | from 1:m1208_3 | +| ir.cpp:1212:5:1212:5 | Phi | from 2:m1211_3 | +| ir.cpp:1213:9:1213:9 | Address | &:r1213_1 | +| ir.cpp:1213:13:1213:13 | Address | &:r1213_2 | +| ir.cpp:1213:13:1213:13 | Load | m1212_1 | +| ir.cpp:1213:13:1213:13 | StoreValue | r1213_3 | +| ir.cpp:1216:6:1216:24 | ChiPartial | partial:m1216_3 | +| ir.cpp:1216:6:1216:24 | ChiTotal | total:m1216_2 | +| ir.cpp:1216:6:1216:24 | SideEffect | m1216_3 | +| ir.cpp:1216:30:1216:30 | Address | &:r1216_5 | +| ir.cpp:1217:9:1217:9 | Address | &:r1217_1 | +| ir.cpp:1217:12:1217:13 | StoreValue | r1217_2 | +| ir.cpp:1218:12:1218:12 | Address | &:r1218_1 | +| ir.cpp:1218:12:1218:12 | Condition | r1218_2 | +| ir.cpp:1218:12:1218:12 | Load | m1216_6 | +| ir.cpp:1220:13:1220:13 | Address | &:r1220_2 | +| ir.cpp:1220:17:1220:17 | StoreValue | r1220_1 | +| ir.cpp:1224:13:1224:13 | Address | &:r1224_2 | +| ir.cpp:1224:17:1224:17 | StoreValue | r1224_1 | | ir.cpp:1228:13:1228:13 | Address | &:r1228_2 | -| ir.cpp:1228:13:1228:13 | Load | m1227_1 | -| ir.cpp:1228:13:1228:13 | StoreValue | r1228_3 | -| ir.cpp:1231:5:1231:19 | Address | &:r1231_7 | -| ir.cpp:1231:5:1231:19 | ChiPartial | partial:m1231_3 | -| ir.cpp:1231:5:1231:19 | ChiTotal | total:m1231_2 | -| ir.cpp:1231:5:1231:19 | Load | m1237_15 | -| ir.cpp:1231:5:1231:19 | SideEffect | ~m1237_2 | -| ir.cpp:1231:25:1231:25 | Address | &:r1231_5 | -| ir.cpp:1232:16:1232:16 | Address | &:r1232_3 | -| ir.cpp:1232:16:1232:16 | SideEffect | ~m1232_6 | -| ir.cpp:1232:20:1232:20 | ChiPartial | partial:m1232_5 | -| ir.cpp:1232:20:1232:20 | ChiTotal | total:m1232_2 | -| ir.cpp:1232:20:1232:20 | StoreValue | r1232_4 | -| ir.cpp:1233:16:1233:16 | Address | &:r1233_3 | -| ir.cpp:1233:16:1233:16 | SideEffect | ~m1233_6 | -| ir.cpp:1233:20:1233:28 | ChiPartial | partial:m1233_5 | -| ir.cpp:1233:20:1233:28 | ChiTotal | total:m1233_2 | -| ir.cpp:1233:20:1233:28 | StoreValue | r1233_4 | -| ir.cpp:1234:16:1234:16 | Address | &:r1234_1 | -| ir.cpp:1234:16:1234:16 | Address | &:r1234_1 | -| ir.cpp:1234:16:1234:16 | Address | &:r1234_4 | -| ir.cpp:1234:16:1234:16 | ChiPartial | partial:m1234_10 | -| ir.cpp:1234:16:1234:16 | ChiTotal | total:m1234_8 | -| ir.cpp:1234:16:1234:16 | Condition | r1234_2 | -| ir.cpp:1234:16:1234:16 | Load | ~m1231_3 | -| ir.cpp:1234:16:1234:16 | StoreValue | r1234_9 | -| ir.cpp:1234:20:1234:20 | Address | &:r1234_5 | -| ir.cpp:1234:20:1234:20 | ChiPartial | partial:m1234_7 | -| ir.cpp:1234:20:1234:20 | ChiTotal | total:m1231_4 | -| ir.cpp:1234:20:1234:20 | Load | m1231_6 | -| ir.cpp:1234:20:1234:20 | StoreValue | r1234_6 | -| ir.cpp:1237:5:1237:25 | Address | &:r1237_3 | -| ir.cpp:1237:5:1237:25 | Phi | from 0:~m1231_3 | -| ir.cpp:1237:5:1237:25 | Phi | from 0:~m1231_4 | -| ir.cpp:1237:5:1237:25 | Phi | from 1:m1234_7 | -| ir.cpp:1237:5:1237:25 | Phi | from 1:~m1234_11 | -| ir.cpp:1237:12:1237:12 | Address | &:r1237_4 | -| ir.cpp:1237:12:1237:12 | Left | r1237_5 | -| ir.cpp:1237:12:1237:12 | Load | ~m1237_2 | -| ir.cpp:1237:12:1237:16 | Left | r1237_8 | -| ir.cpp:1237:12:1237:20 | Left | r1237_11 | -| ir.cpp:1237:12:1237:24 | StoreValue | r1237_14 | -| ir.cpp:1237:16:1237:16 | Address | &:r1237_6 | -| ir.cpp:1237:16:1237:16 | Load | ~m1237_2 | -| ir.cpp:1237:16:1237:16 | Right | r1237_7 | -| ir.cpp:1237:20:1237:20 | Address | &:r1237_9 | -| ir.cpp:1237:20:1237:20 | Load | m1237_1 | -| ir.cpp:1237:20:1237:20 | Right | r1237_10 | -| ir.cpp:1237:24:1237:24 | Address | &:r1237_12 | -| ir.cpp:1237:24:1237:24 | Load | ~m1237_2 | -| ir.cpp:1237:24:1237:24 | Right | r1237_13 | -| ir.cpp:1240:6:1240:31 | ChiPartial | partial:m1240_3 | -| ir.cpp:1240:6:1240:31 | ChiTotal | total:m1240_2 | -| ir.cpp:1240:6:1240:31 | SideEffect | ~m1244_1 | -| ir.cpp:1240:45:1240:51 | Address | &:r1240_5 | -| ir.cpp:1240:45:1240:51 | Address | &:r1240_5 | -| ir.cpp:1240:45:1240:51 | Address | &:r1240_7 | -| ir.cpp:1240:45:1240:51 | Address | &:r1240_7 | -| ir.cpp:1240:45:1240:51 | Load | m1240_6 | -| ir.cpp:1240:45:1240:51 | SideEffect | m1240_8 | -| ir.cpp:1241:19:1241:19 | Address | &:r1241_1 | -| ir.cpp:1241:19:1241:19 | Address | &:r1241_1 | -| ir.cpp:1241:19:1241:19 | Address | &:r1241_4 | -| ir.cpp:1241:19:1241:19 | Arg(this) | this:r1241_4 | -| ir.cpp:1241:19:1241:19 | ChiPartial | partial:m1241_6 | -| ir.cpp:1241:19:1241:19 | ChiTotal | total:m0_6 | -| ir.cpp:1241:19:1241:19 | Condition | r1241_2 | -| ir.cpp:1241:19:1241:19 | Load | ~m1240_3 | -| ir.cpp:1241:19:1241:19 | StoreValue | r1241_5 | -| ir.cpp:1242:19:1242:19 | Address | &:r1242_2 | -| ir.cpp:1242:19:1242:19 | Address | &:r1242_2 | -| ir.cpp:1242:19:1242:19 | Address | &:r1242_5 | -| ir.cpp:1242:19:1242:19 | Arg(this) | this:r1242_5 | -| ir.cpp:1242:19:1242:19 | ChiPartial | partial:m1242_16 | -| ir.cpp:1242:19:1242:19 | ChiTotal | total:m1242_14 | -| ir.cpp:1242:19:1242:19 | Condition | r1242_3 | -| ir.cpp:1242:19:1242:19 | Load | ~m1242_1 | -| ir.cpp:1242:19:1242:19 | Phi | from 0:~m1240_4 | -| ir.cpp:1242:19:1242:19 | Phi | from 1:~m1241_7 | -| ir.cpp:1242:19:1242:19 | StoreValue | r1242_15 | -| ir.cpp:1242:20:1242:29 | CallTarget | func:r1242_6 | -| ir.cpp:1242:20:1242:29 | ChiPartial | partial:m1242_10 | -| ir.cpp:1242:20:1242:29 | ChiPartial | partial:m1242_13 | -| ir.cpp:1242:20:1242:29 | ChiTotal | total:m1242_1 | -| ir.cpp:1242:20:1242:29 | ChiTotal | total:m1242_11 | -| ir.cpp:1242:20:1242:29 | SideEffect | ~m1242_1 | -| ir.cpp:1242:21:1242:28 | Address | &:r1242_8 | -| ir.cpp:1242:21:1242:28 | Arg(0) | 0:r1242_8 | -| ir.cpp:1242:21:1242:28 | SideEffect | ~m1240_3 | -| ir.cpp:1242:21:1242:28 | Unary | r1242_7 | -| ir.cpp:1243:19:1243:19 | Address | &:r1243_2 | -| ir.cpp:1243:19:1243:19 | Address | &:r1243_2 | -| ir.cpp:1243:19:1243:19 | Address | &:r1243_5 | -| ir.cpp:1243:19:1243:19 | Arg(this) | this:r1243_5 | -| ir.cpp:1243:19:1243:19 | ChiPartial | partial:m1243_16 | -| ir.cpp:1243:19:1243:19 | ChiTotal | total:m1243_14 | -| ir.cpp:1243:19:1243:19 | Condition | r1243_3 | -| ir.cpp:1243:19:1243:19 | Load | ~m1243_1 | -| ir.cpp:1243:19:1243:19 | Phi | from 2:~m1242_1 | -| ir.cpp:1243:19:1243:19 | Phi | from 3:~m1242_17 | -| ir.cpp:1243:19:1243:19 | StoreValue | r1243_15 | -| ir.cpp:1243:20:1243:28 | CallTarget | func:r1243_6 | -| ir.cpp:1243:20:1243:28 | ChiPartial | partial:m1243_10 | -| ir.cpp:1243:20:1243:28 | ChiPartial | partial:m1243_13 | -| ir.cpp:1243:20:1243:28 | ChiTotal | total:m1243_1 | -| ir.cpp:1243:20:1243:28 | ChiTotal | total:m1243_11 | -| ir.cpp:1243:20:1243:28 | SideEffect | ~m1243_1 | -| ir.cpp:1243:21:1243:27 | Address | &:r1243_7 | -| ir.cpp:1243:21:1243:27 | Address | &:r1243_8 | -| ir.cpp:1243:21:1243:27 | Arg(0) | 0:r1243_8 | -| ir.cpp:1243:21:1243:27 | Load | m1240_6 | -| ir.cpp:1243:21:1243:27 | SideEffect | ~m1240_8 | -| ir.cpp:1244:1:1244:1 | Phi | from 4:~m1243_1 | -| ir.cpp:1244:1:1244:1 | Phi | from 5:~m1243_17 | -| ir.cpp:1251:6:1251:17 | ChiPartial | partial:m1251_3 | -| ir.cpp:1251:6:1251:17 | ChiTotal | total:m1251_2 | -| ir.cpp:1251:6:1251:17 | SideEffect | m1251_3 | -| ir.cpp:1251:25:1251:26 | Address | &:r1251_5 | -| ir.cpp:1251:25:1251:26 | Address | &:r1251_5 | -| ir.cpp:1251:25:1251:26 | Address | &:r1251_7 | -| ir.cpp:1251:25:1251:26 | Address | &:r1251_7 | -| ir.cpp:1251:25:1251:26 | Load | m1251_6 | -| ir.cpp:1251:25:1251:26 | SideEffect | m1251_8 | -| ir.cpp:1251:35:1251:36 | Address | &:r1251_9 | -| ir.cpp:1251:35:1251:36 | Address | &:r1251_9 | -| ir.cpp:1251:35:1251:36 | Address | &:r1251_11 | -| ir.cpp:1251:35:1251:36 | Address | &:r1251_11 | -| ir.cpp:1251:35:1251:36 | Load | m1251_10 | -| ir.cpp:1251:35:1251:36 | SideEffect | m1251_12 | -| ir.cpp:1252:10:1252:15 | Address | &:r1252_1 | -| ir.cpp:1252:10:1252:15 | Left | r1252_1 | -| ir.cpp:1252:10:1252:15 | Left | r1252_1 | -| ir.cpp:1252:24:1252:27 | Address | &:r1252_4 | -| ir.cpp:1252:24:1252:27 | Address | &:r1252_9 | -| ir.cpp:1252:24:1252:27 | ChiPartial | partial:m1252_11 | -| ir.cpp:1252:24:1252:27 | ChiTotal | total:m1252_7 | -| ir.cpp:1252:24:1252:27 | Right | r1252_3 | -| ir.cpp:1252:24:1252:27 | Right | r1252_8 | -| ir.cpp:1252:24:1252:27 | StoreValue | r1252_10 | -| ir.cpp:1252:26:1252:26 | ChiPartial | partial:m1252_6 | -| ir.cpp:1252:26:1252:26 | ChiTotal | total:m1252_2 | -| ir.cpp:1252:26:1252:26 | StoreValue | r1252_5 | -| ir.cpp:1254:5:1254:10 | CallTarget | func:r1254_1 | -| ir.cpp:1254:12:1254:17 | Address | &:r1254_3 | -| ir.cpp:1254:12:1254:17 | Arg(0) | 0:r1254_3 | -| ir.cpp:1254:12:1254:17 | ChiPartial | partial:m1254_9 | -| ir.cpp:1254:12:1254:17 | ChiTotal | total:m1252_12 | -| ir.cpp:1254:12:1254:17 | Unary | r1254_2 | -| ir.cpp:1254:20:1254:21 | Address | &:r1254_4 | -| ir.cpp:1254:20:1254:21 | Address | &:r1254_6 | -| ir.cpp:1254:20:1254:21 | Arg(1) | 1:r1254_6 | -| ir.cpp:1254:20:1254:21 | Load | m1251_6 | -| ir.cpp:1254:20:1254:21 | SideEffect | ~m1251_8 | -| ir.cpp:1254:20:1254:21 | Unary | r1254_5 | -| ir.cpp:1255:5:1255:10 | CallTarget | func:r1255_1 | -| ir.cpp:1255:12:1255:17 | Address | &:r1255_3 | -| ir.cpp:1255:12:1255:17 | Address | &:r1255_3 | -| ir.cpp:1255:12:1255:17 | Arg(0) | 0:r1255_3 | -| ir.cpp:1255:12:1255:17 | ChiPartial | partial:m1255_10 | -| ir.cpp:1255:12:1255:17 | ChiTotal | total:m1254_10 | -| ir.cpp:1255:12:1255:17 | SideEffect | ~m1254_10 | -| ir.cpp:1255:12:1255:17 | Unary | r1255_2 | -| ir.cpp:1255:20:1255:21 | Address | &:r1255_4 | -| ir.cpp:1255:20:1255:21 | Address | &:r1255_6 | -| ir.cpp:1255:20:1255:21 | Arg(1) | 1:r1255_6 | -| ir.cpp:1255:20:1255:21 | Load | m1251_10 | -| ir.cpp:1255:20:1255:21 | SideEffect | ~m1251_12 | -| ir.cpp:1255:20:1255:21 | Unary | r1255_5 | -| ir.cpp:1261:17:1261:29 | ChiPartial | partial:m1261_3 | -| ir.cpp:1261:17:1261:29 | ChiTotal | total:m1261_2 | -| ir.cpp:1261:17:1261:29 | SideEffect | m1261_3 | -| ir.cpp:1261:34:1261:34 | Address | &:r1261_5 | -| ir.cpp:1261:34:1261:34 | Address | &:r1261_5 | -| ir.cpp:1261:34:1261:34 | Address | &:r1261_7 | -| ir.cpp:1261:34:1261:34 | Address | &:r1261_7 | -| ir.cpp:1261:34:1261:34 | Load | m1261_6 | -| ir.cpp:1261:34:1261:34 | SideEffect | m1262_7 | -| ir.cpp:1261:41:1261:41 | Address | &:r1261_9 | -| ir.cpp:1262:9:1262:9 | Address | &:r1262_3 | -| ir.cpp:1262:9:1262:9 | Load | m1261_6 | -| ir.cpp:1262:9:1262:9 | Unary | r1262_4 | -| ir.cpp:1262:9:1262:21 | ChiPartial | partial:m1262_6 | -| ir.cpp:1262:9:1262:21 | ChiTotal | total:m1261_8 | -| ir.cpp:1262:12:1262:17 | Address | &:r1262_5 | -| ir.cpp:1262:21:1262:21 | Address | &:r1262_1 | -| ir.cpp:1262:21:1262:21 | Load | m1261_10 | -| ir.cpp:1262:21:1262:21 | StoreValue | r1262_2 | -| ir.cpp:1270:6:1270:33 | ChiPartial | partial:m1270_3 | -| ir.cpp:1270:6:1270:33 | ChiTotal | total:m1270_2 | -| ir.cpp:1270:6:1270:33 | SideEffect | ~m1286_8 | -| ir.cpp:1270:39:1270:45 | Address | &:r1270_5 | -| ir.cpp:1270:51:1270:55 | Address | &:r1270_7 | -| ir.cpp:1270:51:1270:55 | Address | &:r1270_7 | -| ir.cpp:1270:51:1270:55 | Address | &:r1270_9 | -| ir.cpp:1270:51:1270:55 | Address | &:r1270_9 | -| ir.cpp:1270:51:1270:55 | Load | m1270_8 | -| ir.cpp:1270:51:1270:55 | SideEffect | m1281_12 | -| ir.cpp:1271:7:1271:7 | Address | &:r1271_1 | -| ir.cpp:1271:7:1271:7 | Address | &:r1271_1 | -| ir.cpp:1271:7:1271:7 | Arg(this) | this:r1271_1 | -| ir.cpp:1271:7:1271:7 | CallTarget | func:r1271_3 | -| ir.cpp:1271:7:1271:7 | ChiPartial | partial:m1271_5 | -| ir.cpp:1271:7:1271:7 | ChiPartial | partial:m1271_7 | -| ir.cpp:1271:7:1271:7 | ChiTotal | total:m1270_4 | -| ir.cpp:1271:7:1271:7 | ChiTotal | total:m1271_2 | -| ir.cpp:1271:7:1271:7 | SideEffect | ~m1270_4 | -| ir.cpp:1272:7:1272:26 | CallTarget | func:r1272_2 | -| ir.cpp:1272:7:1272:26 | ChiPartial | partial:m1272_5 | -| ir.cpp:1272:7:1272:26 | ChiTotal | total:m1271_6 | -| ir.cpp:1272:7:1272:26 | SideEffect | ~m1271_6 | -| ir.cpp:1272:28:1272:29 | Arg(0) | 0:r1272_3 | -| ir.cpp:1273:5:1273:27 | CallTarget | func:r1273_1 | -| ir.cpp:1273:5:1273:27 | ChiPartial | partial:m1273_4 | -| ir.cpp:1273:5:1273:27 | ChiTotal | total:m1272_6 | -| ir.cpp:1273:5:1273:27 | SideEffect | ~m1272_6 | -| ir.cpp:1273:29:1273:30 | Arg(0) | 0:r1273_2 | -| ir.cpp:1275:7:1275:7 | Address | &:r1275_1 | -| ir.cpp:1276:7:1276:19 | CallTarget | func:r1276_2 | -| ir.cpp:1276:7:1276:19 | ChiPartial | partial:m1276_8 | -| ir.cpp:1276:7:1276:19 | ChiTotal | total:m1273_5 | -| ir.cpp:1276:7:1276:19 | SideEffect | ~m1273_5 | -| ir.cpp:1276:21:1276:22 | Address | &:r1276_4 | -| ir.cpp:1276:21:1276:22 | Address | &:r1276_4 | -| ir.cpp:1276:21:1276:22 | Arg(0) | 0:r1276_4 | -| ir.cpp:1276:21:1276:22 | ChiPartial | partial:m1276_11 | -| ir.cpp:1276:21:1276:22 | ChiTotal | total:m1275_2 | -| ir.cpp:1276:21:1276:22 | SideEffect | ~m1275_2 | -| ir.cpp:1276:22:1276:22 | Unary | r1276_3 | -| ir.cpp:1276:25:1276:31 | Address | &:r1276_5 | -| ir.cpp:1276:25:1276:31 | Arg(1) | 1:r1276_6 | -| ir.cpp:1276:25:1276:31 | Load | m1270_6 | -| ir.cpp:1277:5:1277:20 | CallTarget | func:r1277_1 | -| ir.cpp:1277:5:1277:20 | ChiPartial | partial:m1277_7 | -| ir.cpp:1277:5:1277:20 | ChiTotal | total:m1276_9 | -| ir.cpp:1277:5:1277:20 | SideEffect | ~m1276_9 | -| ir.cpp:1277:22:1277:23 | Address | &:r1277_3 | -| ir.cpp:1277:22:1277:23 | Address | &:r1277_3 | -| ir.cpp:1277:22:1277:23 | Arg(0) | 0:r1277_3 | -| ir.cpp:1277:22:1277:23 | ChiPartial | partial:m1277_10 | -| ir.cpp:1277:22:1277:23 | ChiTotal | total:m1276_12 | -| ir.cpp:1277:22:1277:23 | SideEffect | ~m1276_12 | -| ir.cpp:1277:23:1277:23 | Unary | r1277_2 | -| ir.cpp:1277:26:1277:32 | Address | &:r1277_4 | -| ir.cpp:1277:26:1277:32 | Arg(1) | 1:r1277_5 | -| ir.cpp:1277:26:1277:32 | Load | m1270_6 | -| ir.cpp:1279:7:1279:7 | Unary | r1279_1 | -| ir.cpp:1279:11:1279:23 | CallTarget | func:r1279_3 | -| ir.cpp:1279:11:1279:23 | ChiPartial | partial:m1279_11 | -| ir.cpp:1279:11:1279:23 | ChiTotal | total:m1277_8 | -| ir.cpp:1279:11:1279:23 | SideEffect | ~m1277_8 | -| ir.cpp:1279:25:1279:29 | Address | &:r1279_4 | -| ir.cpp:1279:25:1279:29 | Address | &:r1279_5 | -| ir.cpp:1279:25:1279:29 | Address | &:r1279_5 | -| ir.cpp:1279:25:1279:29 | Arg(0) | 0:r1279_5 | -| ir.cpp:1279:25:1279:29 | ChiPartial | partial:m1279_14 | -| ir.cpp:1279:25:1279:29 | ChiTotal | total:m1270_10 | -| ir.cpp:1279:25:1279:29 | Load | m1270_8 | -| ir.cpp:1279:25:1279:29 | SideEffect | ~m1270_10 | -| ir.cpp:1279:32:1279:38 | Address | &:r1279_6 | -| ir.cpp:1279:32:1279:38 | Left | r1279_7 | -| ir.cpp:1279:32:1279:38 | Load | m1270_6 | -| ir.cpp:1279:32:1279:42 | Arg(1) | 1:r1279_9 | -| ir.cpp:1279:42:1279:42 | Right | r1279_8 | -| ir.cpp:1280:7:1280:11 | Address | &:r1280_1 | -| ir.cpp:1280:7:1280:11 | Load | m1270_8 | -| ir.cpp:1280:7:1280:11 | Unary | r1280_2 | -| ir.cpp:1280:14:1280:26 | CallTarget | func:r1280_4 | -| ir.cpp:1280:14:1280:26 | ChiPartial | partial:m1280_9 | -| ir.cpp:1280:14:1280:26 | ChiTotal | total:m1279_12 | -| ir.cpp:1280:14:1280:26 | SideEffect | ~m1279_12 | -| ir.cpp:1280:28:1280:29 | Address | &:r1280_6 | -| ir.cpp:1280:28:1280:29 | Address | &:r1280_6 | -| ir.cpp:1280:28:1280:29 | Arg(0) | 0:r1280_6 | -| ir.cpp:1280:28:1280:29 | ChiPartial | partial:m1280_12 | -| ir.cpp:1280:28:1280:29 | ChiTotal | total:m1277_11 | -| ir.cpp:1280:28:1280:29 | SideEffect | ~m1277_11 | -| ir.cpp:1280:29:1280:29 | Unary | r1280_5 | -| ir.cpp:1280:32:1280:33 | Arg(1) | 1:r1280_7 | -| ir.cpp:1281:5:1281:9 | Address | &:r1281_1 | -| ir.cpp:1281:5:1281:9 | Load | m1270_8 | -| ir.cpp:1281:12:1281:24 | CallTarget | func:r1281_3 | -| ir.cpp:1281:12:1281:24 | ChiPartial | partial:m1281_8 | -| ir.cpp:1281:12:1281:24 | ChiTotal | total:m1280_10 | -| ir.cpp:1281:12:1281:24 | SideEffect | ~m1280_10 | -| ir.cpp:1281:26:1281:30 | Address | &:r1281_4 | -| ir.cpp:1281:26:1281:30 | Address | &:r1281_5 | -| ir.cpp:1281:26:1281:30 | Address | &:r1281_5 | -| ir.cpp:1281:26:1281:30 | Arg(0) | 0:r1281_5 | -| ir.cpp:1281:26:1281:30 | ChiPartial | partial:m1281_11 | -| ir.cpp:1281:26:1281:30 | ChiTotal | total:m1279_15 | -| ir.cpp:1281:26:1281:30 | Load | m1270_8 | -| ir.cpp:1281:26:1281:30 | SideEffect | ~m1279_15 | -| ir.cpp:1281:33:1281:34 | Arg(1) | 1:r1281_6 | -| ir.cpp:1283:7:1283:31 | CallTarget | func:r1283_2 | -| ir.cpp:1283:7:1283:31 | ChiPartial | partial:m1283_4 | -| ir.cpp:1283:7:1283:31 | ChiTotal | total:m1281_9 | -| ir.cpp:1283:7:1283:31 | SideEffect | ~m1281_9 | -| ir.cpp:1284:5:1284:32 | CallTarget | func:r1284_1 | -| ir.cpp:1284:5:1284:32 | ChiPartial | partial:m1284_3 | -| ir.cpp:1284:5:1284:32 | ChiTotal | total:m1283_5 | -| ir.cpp:1284:5:1284:32 | SideEffect | ~m1283_5 | -| ir.cpp:1286:5:1286:20 | CallTarget | func:r1286_1 | -| ir.cpp:1286:5:1286:20 | ChiPartial | partial:m1286_3 | -| ir.cpp:1286:5:1286:20 | ChiTotal | total:m1284_4 | -| ir.cpp:1286:5:1286:20 | SideEffect | ~m1284_4 | -| ir.cpp:1286:25:1286:49 | CallTarget | func:r1286_5 | -| ir.cpp:1286:25:1286:49 | ChiPartial | partial:m1286_7 | -| ir.cpp:1286:25:1286:49 | ChiTotal | total:m1286_4 | -| ir.cpp:1286:25:1286:49 | SideEffect | ~m1286_4 | -| ir.cpp:1289:5:1289:22 | Address | &:r1289_10 | -| ir.cpp:1289:5:1289:22 | ChiPartial | partial:m1289_3 | -| ir.cpp:1289:5:1289:22 | ChiTotal | total:m1289_2 | -| ir.cpp:1289:5:1289:22 | Load | m1289_9 | -| ir.cpp:1289:5:1289:22 | Phi | from 2:m1291_4 | -| ir.cpp:1289:5:1289:22 | Phi | from 3:m1293_2 | -| ir.cpp:1289:5:1289:22 | SideEffect | m1289_3 | -| ir.cpp:1289:29:1289:29 | Address | &:r1289_5 | -| ir.cpp:1289:36:1289:36 | Address | &:r1289_7 | -| ir.cpp:1290:9:1290:9 | Address | &:r1290_1 | -| ir.cpp:1290:9:1290:9 | Condition | r1290_2 | -| ir.cpp:1290:9:1290:9 | Load | m1289_6 | -| ir.cpp:1291:9:1291:17 | Address | &:r1291_1 | -| ir.cpp:1291:16:1291:16 | Address | &:r1291_2 | -| ir.cpp:1291:16:1291:16 | Load | m1289_8 | -| ir.cpp:1291:16:1291:16 | StoreValue | r1291_3 | -| ir.cpp:1293:1:1293:1 | Address | &:r1293_1 | -| ir.cpp:1295:6:1295:15 | ChiPartial | partial:m1295_3 | -| ir.cpp:1295:6:1295:15 | ChiTotal | total:m1295_2 | -| ir.cpp:1295:6:1295:15 | SideEffect | ~m1296_8 | -| ir.cpp:1295:21:1295:21 | Address | &:r1295_5 | -| ir.cpp:1295:28:1295:28 | Address | &:r1295_7 | -| ir.cpp:1296:12:1296:21 | CallTarget | func:r1296_1 | -| ir.cpp:1296:12:1296:21 | ChiPartial | partial:m1296_7 | -| ir.cpp:1296:12:1296:21 | ChiTotal | total:m1295_4 | -| ir.cpp:1296:12:1296:21 | SideEffect | ~m1295_4 | -| ir.cpp:1296:23:1296:23 | Address | &:r1296_2 | -| ir.cpp:1296:23:1296:23 | Arg(0) | 0:r1296_3 | -| ir.cpp:1296:23:1296:23 | Load | m1295_6 | -| ir.cpp:1296:26:1296:26 | Address | &:r1296_4 | -| ir.cpp:1296:26:1296:26 | Arg(1) | 1:r1296_5 | -| ir.cpp:1296:26:1296:26 | Load | m1295_8 | -| ir.cpp:1299:6:1299:25 | ChiPartial | partial:m1299_3 | -| ir.cpp:1299:6:1299:25 | ChiTotal | total:m1299_2 | -| ir.cpp:1299:6:1299:25 | SideEffect | m1299_3 | -| ir.cpp:1299:32:1299:32 | Address | &:r1299_5 | -| ir.cpp:1299:39:1299:39 | Address | &:r1299_7 | -| ir.cpp:1299:47:1299:47 | Address | &:r1299_9 | -| ir.cpp:1300:9:1300:9 | Address | &:r1300_1 | -| ir.cpp:1300:13:1300:13 | Address | &:r1300_2 | -| ir.cpp:1300:13:1300:13 | Load | m1299_8 | -| ir.cpp:1300:13:1300:13 | StoreValue | r1300_3 | -| ir.cpp:1301:5:1301:5 | Address | &:r1301_7 | -| ir.cpp:1301:9:1301:9 | Address | &:r1301_1 | -| ir.cpp:1301:9:1301:9 | Condition | r1301_2 | -| ir.cpp:1301:9:1301:9 | Load | m1299_6 | -| ir.cpp:1301:9:1301:9 | StoreValue | r1301_2 | -| ir.cpp:1301:9:1301:14 | Address | &:r1301_5 | -| ir.cpp:1301:9:1301:14 | Address | &:r1301_9 | -| ir.cpp:1301:9:1301:14 | Address | &:r1301_13 | -| ir.cpp:1301:9:1301:14 | Load | m1301_4 | -| ir.cpp:1301:9:1301:14 | Phi | from 2:m1301_10 | -| ir.cpp:1301:9:1301:14 | Phi | from 3:m1301_14 | -| ir.cpp:1301:9:1301:14 | StoreValue | r1301_6 | -| ir.cpp:1301:14:1301:14 | Address | &:r1301_11 | -| ir.cpp:1301:14:1301:14 | Load | m1299_8 | -| ir.cpp:1301:14:1301:14 | StoreValue | r1301_12 | -| ir.cpp:1302:5:1302:5 | Address | &:r1302_8 | +| ir.cpp:1228:17:1228:17 | StoreValue | r1228_1 | +| ir.cpp:1229:5:1229:5 | Phi | from 1:m1220_3 | +| ir.cpp:1229:5:1229:5 | Phi | from 2:m1224_3 | +| ir.cpp:1229:5:1229:5 | Phi | from 3:m1228_3 | +| ir.cpp:1230:9:1230:9 | Address | &:r1230_1 | +| ir.cpp:1230:13:1230:13 | Address | &:r1230_2 | +| ir.cpp:1230:13:1230:13 | Load | m1229_1 | +| ir.cpp:1230:13:1230:13 | StoreValue | r1230_3 | +| ir.cpp:1233:5:1233:19 | Address | &:r1233_7 | +| ir.cpp:1233:5:1233:19 | ChiPartial | partial:m1233_3 | +| ir.cpp:1233:5:1233:19 | ChiTotal | total:m1233_2 | +| ir.cpp:1233:5:1233:19 | Load | m1239_15 | +| ir.cpp:1233:5:1233:19 | SideEffect | ~m1239_2 | +| ir.cpp:1233:25:1233:25 | Address | &:r1233_5 | +| ir.cpp:1234:16:1234:16 | Address | &:r1234_3 | +| ir.cpp:1234:16:1234:16 | SideEffect | ~m1234_6 | +| ir.cpp:1234:20:1234:20 | ChiPartial | partial:m1234_5 | +| ir.cpp:1234:20:1234:20 | ChiTotal | total:m1234_2 | +| ir.cpp:1234:20:1234:20 | StoreValue | r1234_4 | +| ir.cpp:1235:16:1235:16 | Address | &:r1235_3 | +| ir.cpp:1235:16:1235:16 | SideEffect | ~m1235_6 | +| ir.cpp:1235:20:1235:28 | ChiPartial | partial:m1235_5 | +| ir.cpp:1235:20:1235:28 | ChiTotal | total:m1235_2 | +| ir.cpp:1235:20:1235:28 | StoreValue | r1235_4 | +| ir.cpp:1236:16:1236:16 | Address | &:r1236_1 | +| ir.cpp:1236:16:1236:16 | Address | &:r1236_1 | +| ir.cpp:1236:16:1236:16 | Address | &:r1236_4 | +| ir.cpp:1236:16:1236:16 | ChiPartial | partial:m1236_10 | +| ir.cpp:1236:16:1236:16 | ChiTotal | total:m1236_8 | +| ir.cpp:1236:16:1236:16 | Condition | r1236_2 | +| ir.cpp:1236:16:1236:16 | Load | ~m1233_3 | +| ir.cpp:1236:16:1236:16 | StoreValue | r1236_9 | +| ir.cpp:1236:20:1236:20 | Address | &:r1236_5 | +| ir.cpp:1236:20:1236:20 | ChiPartial | partial:m1236_7 | +| ir.cpp:1236:20:1236:20 | ChiTotal | total:m1233_4 | +| ir.cpp:1236:20:1236:20 | Load | m1233_6 | +| ir.cpp:1236:20:1236:20 | StoreValue | r1236_6 | +| ir.cpp:1239:5:1239:25 | Address | &:r1239_3 | +| ir.cpp:1239:5:1239:25 | Phi | from 0:~m1233_3 | +| ir.cpp:1239:5:1239:25 | Phi | from 0:~m1233_4 | +| ir.cpp:1239:5:1239:25 | Phi | from 1:m1236_7 | +| ir.cpp:1239:5:1239:25 | Phi | from 1:~m1236_11 | +| ir.cpp:1239:12:1239:12 | Address | &:r1239_4 | +| ir.cpp:1239:12:1239:12 | Left | r1239_5 | +| ir.cpp:1239:12:1239:12 | Load | ~m1239_2 | +| ir.cpp:1239:12:1239:16 | Left | r1239_8 | +| ir.cpp:1239:12:1239:20 | Left | r1239_11 | +| ir.cpp:1239:12:1239:24 | StoreValue | r1239_14 | +| ir.cpp:1239:16:1239:16 | Address | &:r1239_6 | +| ir.cpp:1239:16:1239:16 | Load | ~m1239_2 | +| ir.cpp:1239:16:1239:16 | Right | r1239_7 | +| ir.cpp:1239:20:1239:20 | Address | &:r1239_9 | +| ir.cpp:1239:20:1239:20 | Load | m1239_1 | +| ir.cpp:1239:20:1239:20 | Right | r1239_10 | +| ir.cpp:1239:24:1239:24 | Address | &:r1239_12 | +| ir.cpp:1239:24:1239:24 | Load | ~m1239_2 | +| ir.cpp:1239:24:1239:24 | Right | r1239_13 | +| ir.cpp:1242:6:1242:31 | ChiPartial | partial:m1242_3 | +| ir.cpp:1242:6:1242:31 | ChiTotal | total:m1242_2 | +| ir.cpp:1242:6:1242:31 | SideEffect | ~m1246_1 | +| ir.cpp:1242:45:1242:51 | Address | &:r1242_5 | +| ir.cpp:1242:45:1242:51 | Address | &:r1242_5 | +| ir.cpp:1242:45:1242:51 | Address | &:r1242_7 | +| ir.cpp:1242:45:1242:51 | Address | &:r1242_7 | +| ir.cpp:1242:45:1242:51 | Load | m1242_6 | +| ir.cpp:1242:45:1242:51 | SideEffect | m1242_8 | +| ir.cpp:1243:19:1243:19 | Address | &:r1243_1 | +| ir.cpp:1243:19:1243:19 | Address | &:r1243_1 | +| ir.cpp:1243:19:1243:19 | Address | &:r1243_4 | +| ir.cpp:1243:19:1243:19 | Arg(this) | this:r1243_4 | +| ir.cpp:1243:19:1243:19 | ChiPartial | partial:m1243_6 | +| ir.cpp:1243:19:1243:19 | ChiTotal | total:m0_6 | +| ir.cpp:1243:19:1243:19 | Condition | r1243_2 | +| ir.cpp:1243:19:1243:19 | Load | ~m1242_3 | +| ir.cpp:1243:19:1243:19 | StoreValue | r1243_5 | +| ir.cpp:1244:19:1244:19 | Address | &:r1244_2 | +| ir.cpp:1244:19:1244:19 | Address | &:r1244_2 | +| ir.cpp:1244:19:1244:19 | Address | &:r1244_5 | +| ir.cpp:1244:19:1244:19 | Arg(this) | this:r1244_5 | +| ir.cpp:1244:19:1244:19 | ChiPartial | partial:m1244_16 | +| ir.cpp:1244:19:1244:19 | ChiTotal | total:m1244_14 | +| ir.cpp:1244:19:1244:19 | Condition | r1244_3 | +| ir.cpp:1244:19:1244:19 | Load | ~m1244_1 | +| ir.cpp:1244:19:1244:19 | Phi | from 0:~m1242_4 | +| ir.cpp:1244:19:1244:19 | Phi | from 1:~m1243_7 | +| ir.cpp:1244:19:1244:19 | StoreValue | r1244_15 | +| ir.cpp:1244:20:1244:29 | CallTarget | func:r1244_6 | +| ir.cpp:1244:20:1244:29 | ChiPartial | partial:m1244_10 | +| ir.cpp:1244:20:1244:29 | ChiPartial | partial:m1244_13 | +| ir.cpp:1244:20:1244:29 | ChiTotal | total:m1244_1 | +| ir.cpp:1244:20:1244:29 | ChiTotal | total:m1244_11 | +| ir.cpp:1244:20:1244:29 | SideEffect | ~m1244_1 | +| ir.cpp:1244:21:1244:28 | Address | &:r1244_8 | +| ir.cpp:1244:21:1244:28 | Arg(0) | 0:r1244_8 | +| ir.cpp:1244:21:1244:28 | SideEffect | ~m1242_3 | +| ir.cpp:1244:21:1244:28 | Unary | r1244_7 | +| ir.cpp:1245:19:1245:19 | Address | &:r1245_2 | +| ir.cpp:1245:19:1245:19 | Address | &:r1245_2 | +| ir.cpp:1245:19:1245:19 | Address | &:r1245_5 | +| ir.cpp:1245:19:1245:19 | Arg(this) | this:r1245_5 | +| ir.cpp:1245:19:1245:19 | ChiPartial | partial:m1245_16 | +| ir.cpp:1245:19:1245:19 | ChiTotal | total:m1245_14 | +| ir.cpp:1245:19:1245:19 | Condition | r1245_3 | +| ir.cpp:1245:19:1245:19 | Load | ~m1245_1 | +| ir.cpp:1245:19:1245:19 | Phi | from 2:~m1244_1 | +| ir.cpp:1245:19:1245:19 | Phi | from 3:~m1244_17 | +| ir.cpp:1245:19:1245:19 | StoreValue | r1245_15 | +| ir.cpp:1245:20:1245:28 | CallTarget | func:r1245_6 | +| ir.cpp:1245:20:1245:28 | ChiPartial | partial:m1245_10 | +| ir.cpp:1245:20:1245:28 | ChiPartial | partial:m1245_13 | +| ir.cpp:1245:20:1245:28 | ChiTotal | total:m1245_1 | +| ir.cpp:1245:20:1245:28 | ChiTotal | total:m1245_11 | +| ir.cpp:1245:20:1245:28 | SideEffect | ~m1245_1 | +| ir.cpp:1245:21:1245:27 | Address | &:r1245_7 | +| ir.cpp:1245:21:1245:27 | Address | &:r1245_8 | +| ir.cpp:1245:21:1245:27 | Arg(0) | 0:r1245_8 | +| ir.cpp:1245:21:1245:27 | Load | m1242_6 | +| ir.cpp:1245:21:1245:27 | SideEffect | ~m1242_8 | +| ir.cpp:1246:1:1246:1 | Phi | from 4:~m1245_1 | +| ir.cpp:1246:1:1246:1 | Phi | from 5:~m1245_17 | +| ir.cpp:1253:6:1253:17 | ChiPartial | partial:m1253_3 | +| ir.cpp:1253:6:1253:17 | ChiTotal | total:m1253_2 | +| ir.cpp:1253:6:1253:17 | SideEffect | m1253_3 | +| ir.cpp:1253:25:1253:26 | Address | &:r1253_5 | +| ir.cpp:1253:25:1253:26 | Address | &:r1253_5 | +| ir.cpp:1253:25:1253:26 | Address | &:r1253_7 | +| ir.cpp:1253:25:1253:26 | Address | &:r1253_7 | +| ir.cpp:1253:25:1253:26 | Load | m1253_6 | +| ir.cpp:1253:25:1253:26 | SideEffect | m1253_8 | +| ir.cpp:1253:35:1253:36 | Address | &:r1253_9 | +| ir.cpp:1253:35:1253:36 | Address | &:r1253_9 | +| ir.cpp:1253:35:1253:36 | Address | &:r1253_11 | +| ir.cpp:1253:35:1253:36 | Address | &:r1253_11 | +| ir.cpp:1253:35:1253:36 | Load | m1253_10 | +| ir.cpp:1253:35:1253:36 | SideEffect | m1253_12 | +| ir.cpp:1254:10:1254:15 | Address | &:r1254_1 | +| ir.cpp:1254:10:1254:15 | Left | r1254_1 | +| ir.cpp:1254:10:1254:15 | Left | r1254_1 | +| ir.cpp:1254:24:1254:27 | Address | &:r1254_4 | +| ir.cpp:1254:24:1254:27 | Address | &:r1254_9 | +| ir.cpp:1254:24:1254:27 | ChiPartial | partial:m1254_11 | +| ir.cpp:1254:24:1254:27 | ChiTotal | total:m1254_7 | +| ir.cpp:1254:24:1254:27 | Right | r1254_3 | +| ir.cpp:1254:24:1254:27 | Right | r1254_8 | +| ir.cpp:1254:24:1254:27 | StoreValue | r1254_10 | +| ir.cpp:1254:26:1254:26 | ChiPartial | partial:m1254_6 | +| ir.cpp:1254:26:1254:26 | ChiTotal | total:m1254_2 | +| ir.cpp:1254:26:1254:26 | StoreValue | r1254_5 | +| ir.cpp:1256:5:1256:10 | CallTarget | func:r1256_1 | +| ir.cpp:1256:12:1256:17 | Address | &:r1256_3 | +| ir.cpp:1256:12:1256:17 | Arg(0) | 0:r1256_3 | +| ir.cpp:1256:12:1256:17 | ChiPartial | partial:m1256_9 | +| ir.cpp:1256:12:1256:17 | ChiTotal | total:m1254_12 | +| ir.cpp:1256:12:1256:17 | Unary | r1256_2 | +| ir.cpp:1256:20:1256:21 | Address | &:r1256_4 | +| ir.cpp:1256:20:1256:21 | Address | &:r1256_6 | +| ir.cpp:1256:20:1256:21 | Arg(1) | 1:r1256_6 | +| ir.cpp:1256:20:1256:21 | Load | m1253_6 | +| ir.cpp:1256:20:1256:21 | SideEffect | ~m1253_8 | +| ir.cpp:1256:20:1256:21 | Unary | r1256_5 | +| ir.cpp:1257:5:1257:10 | CallTarget | func:r1257_1 | +| ir.cpp:1257:12:1257:17 | Address | &:r1257_3 | +| ir.cpp:1257:12:1257:17 | Address | &:r1257_3 | +| ir.cpp:1257:12:1257:17 | Arg(0) | 0:r1257_3 | +| ir.cpp:1257:12:1257:17 | ChiPartial | partial:m1257_10 | +| ir.cpp:1257:12:1257:17 | ChiTotal | total:m1256_10 | +| ir.cpp:1257:12:1257:17 | SideEffect | ~m1256_10 | +| ir.cpp:1257:12:1257:17 | Unary | r1257_2 | +| ir.cpp:1257:20:1257:21 | Address | &:r1257_4 | +| ir.cpp:1257:20:1257:21 | Address | &:r1257_6 | +| ir.cpp:1257:20:1257:21 | Arg(1) | 1:r1257_6 | +| ir.cpp:1257:20:1257:21 | Load | m1253_10 | +| ir.cpp:1257:20:1257:21 | SideEffect | ~m1253_12 | +| ir.cpp:1257:20:1257:21 | Unary | r1257_5 | +| ir.cpp:1263:17:1263:29 | ChiPartial | partial:m1263_3 | +| ir.cpp:1263:17:1263:29 | ChiTotal | total:m1263_2 | +| ir.cpp:1263:17:1263:29 | SideEffect | m1263_3 | +| ir.cpp:1263:34:1263:34 | Address | &:r1263_5 | +| ir.cpp:1263:34:1263:34 | Address | &:r1263_5 | +| ir.cpp:1263:34:1263:34 | Address | &:r1263_7 | +| ir.cpp:1263:34:1263:34 | Address | &:r1263_7 | +| ir.cpp:1263:34:1263:34 | Load | m1263_6 | +| ir.cpp:1263:34:1263:34 | SideEffect | m1264_7 | +| ir.cpp:1263:41:1263:41 | Address | &:r1263_9 | +| ir.cpp:1264:9:1264:9 | Address | &:r1264_3 | +| ir.cpp:1264:9:1264:9 | Load | m1263_6 | +| ir.cpp:1264:9:1264:9 | Unary | r1264_4 | +| ir.cpp:1264:9:1264:21 | ChiPartial | partial:m1264_6 | +| ir.cpp:1264:9:1264:21 | ChiTotal | total:m1263_8 | +| ir.cpp:1264:12:1264:17 | Address | &:r1264_5 | +| ir.cpp:1264:21:1264:21 | Address | &:r1264_1 | +| ir.cpp:1264:21:1264:21 | Load | m1263_10 | +| ir.cpp:1264:21:1264:21 | StoreValue | r1264_2 | +| ir.cpp:1272:6:1272:33 | ChiPartial | partial:m1272_3 | +| ir.cpp:1272:6:1272:33 | ChiTotal | total:m1272_2 | +| ir.cpp:1272:6:1272:33 | SideEffect | ~m1288_8 | +| ir.cpp:1272:39:1272:45 | Address | &:r1272_5 | +| ir.cpp:1272:51:1272:55 | Address | &:r1272_7 | +| ir.cpp:1272:51:1272:55 | Address | &:r1272_7 | +| ir.cpp:1272:51:1272:55 | Address | &:r1272_9 | +| ir.cpp:1272:51:1272:55 | Address | &:r1272_9 | +| ir.cpp:1272:51:1272:55 | Load | m1272_8 | +| ir.cpp:1272:51:1272:55 | SideEffect | m1283_12 | +| ir.cpp:1273:7:1273:7 | Address | &:r1273_1 | +| ir.cpp:1273:7:1273:7 | Address | &:r1273_1 | +| ir.cpp:1273:7:1273:7 | Arg(this) | this:r1273_1 | +| ir.cpp:1273:7:1273:7 | CallTarget | func:r1273_3 | +| ir.cpp:1273:7:1273:7 | ChiPartial | partial:m1273_5 | +| ir.cpp:1273:7:1273:7 | ChiPartial | partial:m1273_7 | +| ir.cpp:1273:7:1273:7 | ChiTotal | total:m1272_4 | +| ir.cpp:1273:7:1273:7 | ChiTotal | total:m1273_2 | +| ir.cpp:1273:7:1273:7 | SideEffect | ~m1272_4 | +| ir.cpp:1274:7:1274:26 | CallTarget | func:r1274_2 | +| ir.cpp:1274:7:1274:26 | ChiPartial | partial:m1274_5 | +| ir.cpp:1274:7:1274:26 | ChiTotal | total:m1273_6 | +| ir.cpp:1274:7:1274:26 | SideEffect | ~m1273_6 | +| ir.cpp:1274:28:1274:29 | Arg(0) | 0:r1274_3 | +| ir.cpp:1275:5:1275:27 | CallTarget | func:r1275_1 | +| ir.cpp:1275:5:1275:27 | ChiPartial | partial:m1275_4 | +| ir.cpp:1275:5:1275:27 | ChiTotal | total:m1274_6 | +| ir.cpp:1275:5:1275:27 | SideEffect | ~m1274_6 | +| ir.cpp:1275:29:1275:30 | Arg(0) | 0:r1275_2 | +| ir.cpp:1277:7:1277:7 | Address | &:r1277_1 | +| ir.cpp:1278:7:1278:19 | CallTarget | func:r1278_2 | +| ir.cpp:1278:7:1278:19 | ChiPartial | partial:m1278_8 | +| ir.cpp:1278:7:1278:19 | ChiTotal | total:m1275_5 | +| ir.cpp:1278:7:1278:19 | SideEffect | ~m1275_5 | +| ir.cpp:1278:21:1278:22 | Address | &:r1278_4 | +| ir.cpp:1278:21:1278:22 | Address | &:r1278_4 | +| ir.cpp:1278:21:1278:22 | Arg(0) | 0:r1278_4 | +| ir.cpp:1278:21:1278:22 | ChiPartial | partial:m1278_11 | +| ir.cpp:1278:21:1278:22 | ChiTotal | total:m1277_2 | +| ir.cpp:1278:21:1278:22 | SideEffect | ~m1277_2 | +| ir.cpp:1278:22:1278:22 | Unary | r1278_3 | +| ir.cpp:1278:25:1278:31 | Address | &:r1278_5 | +| ir.cpp:1278:25:1278:31 | Arg(1) | 1:r1278_6 | +| ir.cpp:1278:25:1278:31 | Load | m1272_6 | +| ir.cpp:1279:5:1279:20 | CallTarget | func:r1279_1 | +| ir.cpp:1279:5:1279:20 | ChiPartial | partial:m1279_7 | +| ir.cpp:1279:5:1279:20 | ChiTotal | total:m1278_9 | +| ir.cpp:1279:5:1279:20 | SideEffect | ~m1278_9 | +| ir.cpp:1279:22:1279:23 | Address | &:r1279_3 | +| ir.cpp:1279:22:1279:23 | Address | &:r1279_3 | +| ir.cpp:1279:22:1279:23 | Arg(0) | 0:r1279_3 | +| ir.cpp:1279:22:1279:23 | ChiPartial | partial:m1279_10 | +| ir.cpp:1279:22:1279:23 | ChiTotal | total:m1278_12 | +| ir.cpp:1279:22:1279:23 | SideEffect | ~m1278_12 | +| ir.cpp:1279:23:1279:23 | Unary | r1279_2 | +| ir.cpp:1279:26:1279:32 | Address | &:r1279_4 | +| ir.cpp:1279:26:1279:32 | Arg(1) | 1:r1279_5 | +| ir.cpp:1279:26:1279:32 | Load | m1272_6 | +| ir.cpp:1281:7:1281:7 | Unary | r1281_1 | +| ir.cpp:1281:11:1281:23 | CallTarget | func:r1281_3 | +| ir.cpp:1281:11:1281:23 | ChiPartial | partial:m1281_11 | +| ir.cpp:1281:11:1281:23 | ChiTotal | total:m1279_8 | +| ir.cpp:1281:11:1281:23 | SideEffect | ~m1279_8 | +| ir.cpp:1281:25:1281:29 | Address | &:r1281_4 | +| ir.cpp:1281:25:1281:29 | Address | &:r1281_5 | +| ir.cpp:1281:25:1281:29 | Address | &:r1281_5 | +| ir.cpp:1281:25:1281:29 | Arg(0) | 0:r1281_5 | +| ir.cpp:1281:25:1281:29 | ChiPartial | partial:m1281_14 | +| ir.cpp:1281:25:1281:29 | ChiTotal | total:m1272_10 | +| ir.cpp:1281:25:1281:29 | Load | m1272_8 | +| ir.cpp:1281:25:1281:29 | SideEffect | ~m1272_10 | +| ir.cpp:1281:32:1281:38 | Address | &:r1281_6 | +| ir.cpp:1281:32:1281:38 | Left | r1281_7 | +| ir.cpp:1281:32:1281:38 | Load | m1272_6 | +| ir.cpp:1281:32:1281:42 | Arg(1) | 1:r1281_9 | +| ir.cpp:1281:42:1281:42 | Right | r1281_8 | +| ir.cpp:1282:7:1282:11 | Address | &:r1282_1 | +| ir.cpp:1282:7:1282:11 | Load | m1272_8 | +| ir.cpp:1282:7:1282:11 | Unary | r1282_2 | +| ir.cpp:1282:14:1282:26 | CallTarget | func:r1282_4 | +| ir.cpp:1282:14:1282:26 | ChiPartial | partial:m1282_9 | +| ir.cpp:1282:14:1282:26 | ChiTotal | total:m1281_12 | +| ir.cpp:1282:14:1282:26 | SideEffect | ~m1281_12 | +| ir.cpp:1282:28:1282:29 | Address | &:r1282_6 | +| ir.cpp:1282:28:1282:29 | Address | &:r1282_6 | +| ir.cpp:1282:28:1282:29 | Arg(0) | 0:r1282_6 | +| ir.cpp:1282:28:1282:29 | ChiPartial | partial:m1282_12 | +| ir.cpp:1282:28:1282:29 | ChiTotal | total:m1279_11 | +| ir.cpp:1282:28:1282:29 | SideEffect | ~m1279_11 | +| ir.cpp:1282:29:1282:29 | Unary | r1282_5 | +| ir.cpp:1282:32:1282:33 | Arg(1) | 1:r1282_7 | +| ir.cpp:1283:5:1283:9 | Address | &:r1283_1 | +| ir.cpp:1283:5:1283:9 | Load | m1272_8 | +| ir.cpp:1283:12:1283:24 | CallTarget | func:r1283_3 | +| ir.cpp:1283:12:1283:24 | ChiPartial | partial:m1283_8 | +| ir.cpp:1283:12:1283:24 | ChiTotal | total:m1282_10 | +| ir.cpp:1283:12:1283:24 | SideEffect | ~m1282_10 | +| ir.cpp:1283:26:1283:30 | Address | &:r1283_4 | +| ir.cpp:1283:26:1283:30 | Address | &:r1283_5 | +| ir.cpp:1283:26:1283:30 | Address | &:r1283_5 | +| ir.cpp:1283:26:1283:30 | Arg(0) | 0:r1283_5 | +| ir.cpp:1283:26:1283:30 | ChiPartial | partial:m1283_11 | +| ir.cpp:1283:26:1283:30 | ChiTotal | total:m1281_15 | +| ir.cpp:1283:26:1283:30 | Load | m1272_8 | +| ir.cpp:1283:26:1283:30 | SideEffect | ~m1281_15 | +| ir.cpp:1283:33:1283:34 | Arg(1) | 1:r1283_6 | +| ir.cpp:1285:7:1285:31 | CallTarget | func:r1285_2 | +| ir.cpp:1285:7:1285:31 | ChiPartial | partial:m1285_4 | +| ir.cpp:1285:7:1285:31 | ChiTotal | total:m1283_9 | +| ir.cpp:1285:7:1285:31 | SideEffect | ~m1283_9 | +| ir.cpp:1286:5:1286:32 | CallTarget | func:r1286_1 | +| ir.cpp:1286:5:1286:32 | ChiPartial | partial:m1286_3 | +| ir.cpp:1286:5:1286:32 | ChiTotal | total:m1285_5 | +| ir.cpp:1286:5:1286:32 | SideEffect | ~m1285_5 | +| ir.cpp:1288:5:1288:20 | CallTarget | func:r1288_1 | +| ir.cpp:1288:5:1288:20 | ChiPartial | partial:m1288_3 | +| ir.cpp:1288:5:1288:20 | ChiTotal | total:m1286_4 | +| ir.cpp:1288:5:1288:20 | SideEffect | ~m1286_4 | +| ir.cpp:1288:25:1288:49 | CallTarget | func:r1288_5 | +| ir.cpp:1288:25:1288:49 | ChiPartial | partial:m1288_7 | +| ir.cpp:1288:25:1288:49 | ChiTotal | total:m1288_4 | +| ir.cpp:1288:25:1288:49 | SideEffect | ~m1288_4 | +| ir.cpp:1291:5:1291:22 | Address | &:r1291_10 | +| ir.cpp:1291:5:1291:22 | ChiPartial | partial:m1291_3 | +| ir.cpp:1291:5:1291:22 | ChiTotal | total:m1291_2 | +| ir.cpp:1291:5:1291:22 | Load | m1291_9 | +| ir.cpp:1291:5:1291:22 | Phi | from 2:m1293_4 | +| ir.cpp:1291:5:1291:22 | Phi | from 3:m1295_2 | +| ir.cpp:1291:5:1291:22 | SideEffect | m1291_3 | +| ir.cpp:1291:29:1291:29 | Address | &:r1291_5 | +| ir.cpp:1291:36:1291:36 | Address | &:r1291_7 | +| ir.cpp:1292:9:1292:9 | Address | &:r1292_1 | +| ir.cpp:1292:9:1292:9 | Condition | r1292_2 | +| ir.cpp:1292:9:1292:9 | Load | m1291_6 | +| ir.cpp:1293:9:1293:17 | Address | &:r1293_1 | +| ir.cpp:1293:16:1293:16 | Address | &:r1293_2 | +| ir.cpp:1293:16:1293:16 | Load | m1291_8 | +| ir.cpp:1293:16:1293:16 | StoreValue | r1293_3 | +| ir.cpp:1295:1:1295:1 | Address | &:r1295_1 | +| ir.cpp:1297:6:1297:15 | ChiPartial | partial:m1297_3 | +| ir.cpp:1297:6:1297:15 | ChiTotal | total:m1297_2 | +| ir.cpp:1297:6:1297:15 | SideEffect | ~m1298_8 | +| ir.cpp:1297:21:1297:21 | Address | &:r1297_5 | +| ir.cpp:1297:28:1297:28 | Address | &:r1297_7 | +| ir.cpp:1298:12:1298:21 | CallTarget | func:r1298_1 | +| ir.cpp:1298:12:1298:21 | ChiPartial | partial:m1298_7 | +| ir.cpp:1298:12:1298:21 | ChiTotal | total:m1297_4 | +| ir.cpp:1298:12:1298:21 | SideEffect | ~m1297_4 | +| ir.cpp:1298:23:1298:23 | Address | &:r1298_2 | +| ir.cpp:1298:23:1298:23 | Arg(0) | 0:r1298_3 | +| ir.cpp:1298:23:1298:23 | Load | m1297_6 | +| ir.cpp:1298:26:1298:26 | Address | &:r1298_4 | +| ir.cpp:1298:26:1298:26 | Arg(1) | 1:r1298_5 | +| ir.cpp:1298:26:1298:26 | Load | m1297_8 | +| ir.cpp:1301:6:1301:25 | ChiPartial | partial:m1301_3 | +| ir.cpp:1301:6:1301:25 | ChiTotal | total:m1301_2 | +| ir.cpp:1301:6:1301:25 | SideEffect | m1301_3 | +| ir.cpp:1301:32:1301:32 | Address | &:r1301_5 | +| ir.cpp:1301:39:1301:39 | Address | &:r1301_7 | +| ir.cpp:1301:47:1301:47 | Address | &:r1301_9 | | ir.cpp:1302:9:1302:9 | Address | &:r1302_1 | -| ir.cpp:1302:9:1302:9 | Condition | r1302_2 | -| ir.cpp:1302:9:1302:9 | Load | m1299_6 | -| ir.cpp:1302:9:1302:9 | StoreValue | r1302_2 | -| ir.cpp:1302:9:1302:14 | Address | &:r1302_5 | -| ir.cpp:1302:9:1302:14 | Address | &:r1302_10 | -| ir.cpp:1302:9:1302:14 | Address | &:r1302_14 | -| ir.cpp:1302:9:1302:14 | Load | m1302_4 | -| ir.cpp:1302:9:1302:14 | Phi | from 5:m1302_11 | -| ir.cpp:1302:9:1302:14 | Phi | from 6:m1302_15 | -| ir.cpp:1302:9:1302:14 | StoreValue | r1302_7 | -| ir.cpp:1302:9:1302:14 | Unary | r1302_6 | -| ir.cpp:1302:14:1302:14 | Address | &:r1302_12 | -| ir.cpp:1302:14:1302:14 | Load | m1299_10 | -| ir.cpp:1302:14:1302:14 | StoreValue | r1302_13 | -| ir.cpp:1303:5:1303:5 | Address | &:r1303_9 | +| ir.cpp:1302:13:1302:13 | Address | &:r1302_2 | +| ir.cpp:1302:13:1302:13 | Load | m1301_8 | +| ir.cpp:1302:13:1302:13 | StoreValue | r1302_3 | +| ir.cpp:1303:5:1303:5 | Address | &:r1303_7 | | ir.cpp:1303:9:1303:9 | Address | &:r1303_1 | -| ir.cpp:1303:9:1303:9 | Condition | r1303_4 | -| ir.cpp:1303:9:1303:9 | Left | r1303_2 | -| ir.cpp:1303:9:1303:9 | Load | m1299_8 | -| ir.cpp:1303:9:1303:9 | Right | r1303_3 | +| ir.cpp:1303:9:1303:9 | Condition | r1303_2 | +| ir.cpp:1303:9:1303:9 | Load | m1301_6 | | ir.cpp:1303:9:1303:9 | StoreValue | r1303_2 | -| ir.cpp:1303:9:1303:14 | Address | &:r1303_7 | -| ir.cpp:1303:9:1303:14 | Address | &:r1303_11 | -| ir.cpp:1303:9:1303:14 | Address | &:r1303_15 | -| ir.cpp:1303:9:1303:14 | Load | m1303_6 | -| ir.cpp:1303:9:1303:14 | Phi | from 8:m1303_12 | -| ir.cpp:1303:9:1303:14 | Phi | from 9:m1303_16 | -| ir.cpp:1303:9:1303:14 | StoreValue | r1303_8 | -| ir.cpp:1303:14:1303:14 | Address | &:r1303_13 | -| ir.cpp:1303:14:1303:14 | Load | m1299_8 | -| ir.cpp:1303:14:1303:14 | StoreValue | r1303_14 | -| ir.cpp:1304:5:1304:5 | Address | &:r1304_10 | +| ir.cpp:1303:9:1303:14 | Address | &:r1303_5 | +| ir.cpp:1303:9:1303:14 | Address | &:r1303_9 | +| ir.cpp:1303:9:1303:14 | Address | &:r1303_13 | +| ir.cpp:1303:9:1303:14 | Load | m1303_4 | +| ir.cpp:1303:9:1303:14 | Phi | from 2:m1303_10 | +| ir.cpp:1303:9:1303:14 | Phi | from 3:m1303_14 | +| ir.cpp:1303:9:1303:14 | StoreValue | r1303_6 | +| ir.cpp:1303:14:1303:14 | Address | &:r1303_11 | +| ir.cpp:1303:14:1303:14 | Load | m1301_8 | +| ir.cpp:1303:14:1303:14 | StoreValue | r1303_12 | +| ir.cpp:1304:5:1304:5 | Address | &:r1304_8 | | ir.cpp:1304:9:1304:9 | Address | &:r1304_1 | -| ir.cpp:1304:9:1304:9 | Condition | r1304_4 | -| ir.cpp:1304:9:1304:9 | Left | r1304_2 | -| ir.cpp:1304:9:1304:9 | Load | m1299_8 | -| ir.cpp:1304:9:1304:9 | Right | r1304_3 | +| ir.cpp:1304:9:1304:9 | Condition | r1304_2 | +| ir.cpp:1304:9:1304:9 | Load | m1301_6 | | ir.cpp:1304:9:1304:9 | StoreValue | r1304_2 | -| ir.cpp:1304:9:1304:14 | Address | &:r1304_7 | -| ir.cpp:1304:9:1304:14 | Address | &:r1304_12 | -| ir.cpp:1304:9:1304:14 | Address | &:r1304_16 | -| ir.cpp:1304:9:1304:14 | Load | m1304_6 | -| ir.cpp:1304:9:1304:14 | Phi | from 11:m1304_13 | -| ir.cpp:1304:9:1304:14 | Phi | from 12:m1304_17 | -| ir.cpp:1304:9:1304:14 | StoreValue | r1304_9 | -| ir.cpp:1304:9:1304:14 | Unary | r1304_8 | -| ir.cpp:1304:14:1304:14 | Address | &:r1304_14 | -| ir.cpp:1304:14:1304:14 | Load | m1299_10 | -| ir.cpp:1304:14:1304:14 | StoreValue | r1304_15 | -| ir.cpp:1305:5:1305:5 | Address | &:r1305_10 | +| ir.cpp:1304:9:1304:14 | Address | &:r1304_5 | +| ir.cpp:1304:9:1304:14 | Address | &:r1304_10 | +| ir.cpp:1304:9:1304:14 | Address | &:r1304_14 | +| ir.cpp:1304:9:1304:14 | Load | m1304_4 | +| ir.cpp:1304:9:1304:14 | Phi | from 5:m1304_11 | +| ir.cpp:1304:9:1304:14 | Phi | from 6:m1304_15 | +| ir.cpp:1304:9:1304:14 | StoreValue | r1304_7 | +| ir.cpp:1304:9:1304:14 | Unary | r1304_6 | +| ir.cpp:1304:14:1304:14 | Address | &:r1304_12 | +| ir.cpp:1304:14:1304:14 | Load | m1301_10 | +| ir.cpp:1304:14:1304:14 | StoreValue | r1304_13 | +| ir.cpp:1305:5:1305:5 | Address | &:r1305_9 | | ir.cpp:1305:9:1305:9 | Address | &:r1305_1 | | ir.cpp:1305:9:1305:9 | Condition | r1305_4 | | ir.cpp:1305:9:1305:9 | Left | r1305_2 | -| ir.cpp:1305:9:1305:9 | Load | m1299_10 | +| ir.cpp:1305:9:1305:9 | Load | m1301_8 | | ir.cpp:1305:9:1305:9 | Right | r1305_3 | | ir.cpp:1305:9:1305:9 | StoreValue | r1305_2 | | ir.cpp:1305:9:1305:14 | Address | &:r1305_7 | -| ir.cpp:1305:9:1305:14 | Address | &:r1305_12 | -| ir.cpp:1305:9:1305:14 | Address | &:r1305_17 | +| ir.cpp:1305:9:1305:14 | Address | &:r1305_11 | +| ir.cpp:1305:9:1305:14 | Address | &:r1305_15 | | ir.cpp:1305:9:1305:14 | Load | m1305_6 | -| ir.cpp:1305:9:1305:14 | Phi | from 14:m1305_13 | -| ir.cpp:1305:9:1305:14 | Phi | from 15:m1305_18 | -| ir.cpp:1305:9:1305:14 | StoreValue | r1305_9 | -| ir.cpp:1305:9:1305:14 | Unary | r1305_8 | -| ir.cpp:1305:14:1305:14 | Address | &:r1305_14 | -| ir.cpp:1305:14:1305:14 | Load | m1299_8 | -| ir.cpp:1305:14:1305:14 | StoreValue | r1305_16 | -| ir.cpp:1305:14:1305:14 | Unary | r1305_15 | +| ir.cpp:1305:9:1305:14 | Phi | from 8:m1305_12 | +| ir.cpp:1305:9:1305:14 | Phi | from 9:m1305_16 | +| ir.cpp:1305:9:1305:14 | StoreValue | r1305_8 | +| ir.cpp:1305:14:1305:14 | Address | &:r1305_13 | +| ir.cpp:1305:14:1305:14 | Load | m1301_8 | +| ir.cpp:1305:14:1305:14 | StoreValue | r1305_14 | | ir.cpp:1306:5:1306:5 | Address | &:r1306_10 | | ir.cpp:1306:9:1306:9 | Address | &:r1306_1 | | ir.cpp:1306:9:1306:9 | Condition | r1306_4 | | ir.cpp:1306:9:1306:9 | Left | r1306_2 | -| ir.cpp:1306:9:1306:9 | Load | m1299_10 | +| ir.cpp:1306:9:1306:9 | Load | m1301_8 | | ir.cpp:1306:9:1306:9 | Right | r1306_3 | | ir.cpp:1306:9:1306:9 | StoreValue | r1306_2 | | ir.cpp:1306:9:1306:14 | Address | &:r1306_7 | | ir.cpp:1306:9:1306:14 | Address | &:r1306_12 | | ir.cpp:1306:9:1306:14 | Address | &:r1306_16 | | ir.cpp:1306:9:1306:14 | Load | m1306_6 | -| ir.cpp:1306:9:1306:14 | Phi | from 17:m1306_13 | -| ir.cpp:1306:9:1306:14 | Phi | from 18:m1306_17 | +| ir.cpp:1306:9:1306:14 | Phi | from 11:m1306_13 | +| ir.cpp:1306:9:1306:14 | Phi | from 12:m1306_17 | | ir.cpp:1306:9:1306:14 | StoreValue | r1306_9 | | ir.cpp:1306:9:1306:14 | Unary | r1306_8 | | ir.cpp:1306:14:1306:14 | Address | &:r1306_14 | -| ir.cpp:1306:14:1306:14 | Load | m1299_10 | +| ir.cpp:1306:14:1306:14 | Load | m1301_10 | | ir.cpp:1306:14:1306:14 | StoreValue | r1306_15 | -| ir.cpp:1308:5:1308:5 | Address | &:r1308_9 | -| ir.cpp:1308:9:1308:26 | Address | &:r1308_7 | -| ir.cpp:1308:9:1308:26 | Address | &:r1308_11 | -| ir.cpp:1308:9:1308:26 | Address | &:r1308_33 | -| ir.cpp:1308:9:1308:26 | Load | m1308_6 | -| ir.cpp:1308:9:1308:26 | Phi | from 20:m1308_12 | -| ir.cpp:1308:9:1308:26 | Phi | from 26:m1308_34 | -| ir.cpp:1308:9:1308:26 | StoreValue | r1308_8 | -| ir.cpp:1308:10:1308:10 | Address | &:r1308_1 | -| ir.cpp:1308:10:1308:10 | Condition | r1308_4 | -| ir.cpp:1308:10:1308:10 | Left | r1308_2 | -| ir.cpp:1308:10:1308:10 | Load | m1299_8 | -| ir.cpp:1308:10:1308:10 | Right | r1308_3 | -| ir.cpp:1308:10:1308:20 | Address | &:r1308_13 | -| ir.cpp:1308:10:1308:20 | Address | &:r1308_17 | -| ir.cpp:1308:10:1308:20 | Address | &:r1308_20 | -| ir.cpp:1308:10:1308:20 | Condition | r1308_18 | -| ir.cpp:1308:10:1308:20 | Load | m1308_16 | -| ir.cpp:1308:10:1308:20 | Phi | from 21:m1308_15 | -| ir.cpp:1308:10:1308:20 | Phi | from 23:m1308_22 | -| ir.cpp:1308:10:1308:20 | StoreValue | r1308_14 | -| ir.cpp:1308:10:1308:20 | StoreValue | r1308_18 | -| ir.cpp:1308:10:1308:20 | StoreValue | r1308_21 | -| ir.cpp:1308:15:1308:15 | Address | &:r1308_23 | -| ir.cpp:1308:15:1308:15 | Condition | r1308_24 | -| ir.cpp:1308:15:1308:15 | Load | m1299_6 | -| ir.cpp:1308:20:1308:20 | Address | &:r1308_26 | -| ir.cpp:1308:20:1308:20 | Condition | r1308_29 | -| ir.cpp:1308:20:1308:20 | Left | r1308_27 | -| ir.cpp:1308:20:1308:20 | Load | m1299_10 | -| ir.cpp:1308:20:1308:20 | Right | r1308_28 | -| ir.cpp:1308:26:1308:26 | Address | &:r1308_31 | -| ir.cpp:1308:26:1308:26 | Load | m1299_8 | -| ir.cpp:1308:26:1308:26 | StoreValue | r1308_32 | -| ir.cpp:1314:5:1314:27 | Address | &:r1314_9 | -| ir.cpp:1314:5:1314:27 | ChiPartial | partial:m1314_3 | -| ir.cpp:1314:5:1314:27 | ChiTotal | total:m1314_2 | -| ir.cpp:1314:5:1314:27 | Load | m1315_11 | -| ir.cpp:1314:5:1314:27 | SideEffect | ~m1315_7 | -| ir.cpp:1314:33:1314:33 | Address | &:r1314_5 | -| ir.cpp:1314:40:1314:40 | Address | &:r1314_7 | -| ir.cpp:1315:5:1315:48 | Address | &:r1315_1 | -| ir.cpp:1315:12:1315:21 | CallTarget | func:r1315_2 | -| ir.cpp:1315:12:1315:21 | ChiPartial | partial:m1315_4 | -| ir.cpp:1315:12:1315:21 | ChiTotal | total:m1314_4 | -| ir.cpp:1315:12:1315:21 | Condition | r1315_3 | -| ir.cpp:1315:12:1315:21 | SideEffect | ~m1314_4 | -| ir.cpp:1315:12:1315:47 | Address | &:r1315_9 | -| ir.cpp:1315:12:1315:47 | Address | &:r1315_19 | -| ir.cpp:1315:12:1315:47 | Address | &:r1315_24 | -| ir.cpp:1315:12:1315:47 | Load | m1315_8 | -| ir.cpp:1315:12:1315:47 | Phi | from 3:m1315_20 | -| ir.cpp:1315:12:1315:47 | Phi | from 3:~m1315_15 | -| ir.cpp:1315:12:1315:47 | Phi | from 4:m1315_25 | -| ir.cpp:1315:12:1315:47 | Phi | from 4:~m1315_21 | -| ir.cpp:1315:12:1315:47 | StoreValue | r1315_10 | -| ir.cpp:1315:28:1315:37 | CallTarget | func:r1315_12 | -| ir.cpp:1315:28:1315:37 | ChiPartial | partial:m1315_14 | -| ir.cpp:1315:28:1315:37 | ChiTotal | total:m1315_5 | -| ir.cpp:1315:28:1315:37 | Condition | r1315_13 | -| ir.cpp:1315:28:1315:37 | SideEffect | ~m1315_5 | -| ir.cpp:1315:43:1315:43 | Address | &:r1315_17 | -| ir.cpp:1315:43:1315:43 | Load | m1314_6 | -| ir.cpp:1315:43:1315:43 | StoreValue | r1315_18 | -| ir.cpp:1315:47:1315:47 | Address | &:r1315_22 | -| ir.cpp:1315:47:1315:47 | Load | m1314_8 | -| ir.cpp:1315:47:1315:47 | Phi | from 0:~m1315_5 | -| ir.cpp:1315:47:1315:47 | Phi | from 2:~m1315_15 | -| ir.cpp:1315:47:1315:47 | StoreValue | r1315_23 | -| ir.cpp:1320:6:1320:6 | ChiPartial | partial:m1320_3 | -| ir.cpp:1320:6:1320:6 | ChiTotal | total:m1320_2 | -| ir.cpp:1320:6:1320:6 | SideEffect | ~m1322_8 | -| ir.cpp:1320:13:1320:13 | Address | &:r1320_5 | -| ir.cpp:1320:13:1320:13 | Address | &:r1320_5 | -| ir.cpp:1320:13:1320:13 | Address | &:r1320_7 | -| ir.cpp:1320:13:1320:13 | Address | &:r1320_7 | -| ir.cpp:1320:13:1320:13 | Load | m1320_6 | -| ir.cpp:1320:13:1320:13 | SideEffect | m1320_8 | -| ir.cpp:1322:3:1322:13 | Address | &:r1322_6 | -| ir.cpp:1322:3:1322:13 | Arg(0) | 0:r1322_2 | -| ir.cpp:1322:3:1322:13 | CallTarget | func:r1322_1 | -| ir.cpp:1322:3:1322:13 | ChiPartial | partial:m1322_7 | -| ir.cpp:1322:3:1322:13 | ChiTotal | total:m1320_4 | -| ir.cpp:1322:3:1322:13 | SideEffect | ~m1320_4 | -| ir.cpp:1322:3:1322:13 | Unary | r1322_6 | -| ir.cpp:1322:8:1322:8 | Address | &:r1322_3 | -| ir.cpp:1322:8:1322:8 | Arg(1) | 1:r1322_5 | -| ir.cpp:1322:8:1322:8 | Load | m1320_6 | -| ir.cpp:1322:8:1322:8 | Unary | r1322_4 | -| ir.cpp:1326:3:1326:3 | Address | &:r1326_5 | -| ir.cpp:1326:3:1326:3 | Address | &:r1326_5 | -| ir.cpp:1326:3:1326:3 | Address | &:r1326_5 | -| ir.cpp:1326:3:1326:3 | Address | &:r1326_5 | -| ir.cpp:1326:3:1326:3 | ChiPartial | partial:m1326_3 | -| ir.cpp:1326:3:1326:3 | ChiPartial | partial:m1326_3 | -| ir.cpp:1326:3:1326:3 | ChiPartial | partial:m1326_3 | -| ir.cpp:1326:3:1326:3 | ChiPartial | partial:m1326_3 | -| ir.cpp:1326:3:1326:3 | ChiTotal | total:m1326_2 | -| ir.cpp:1326:3:1326:3 | ChiTotal | total:m1326_2 | -| ir.cpp:1326:3:1326:3 | ChiTotal | total:m1326_2 | -| ir.cpp:1326:3:1326:3 | ChiTotal | total:m1326_2 | -| ir.cpp:1326:3:1326:3 | Load | m1327_3 | -| ir.cpp:1326:3:1326:3 | Load | m1327_3 | -| ir.cpp:1326:3:1326:3 | Load | m1327_8 | -| ir.cpp:1326:3:1326:3 | Load | m1327_8 | -| ir.cpp:1326:3:1326:3 | SideEffect | m1326_3 | -| ir.cpp:1326:3:1326:3 | SideEffect | m1326_3 | -| ir.cpp:1326:3:1326:3 | SideEffect | ~m1327_6 | -| ir.cpp:1326:3:1326:3 | SideEffect | ~m1327_6 | -| ir.cpp:1327:5:1327:15 | Address | &:r1327_1 | -| ir.cpp:1327:5:1327:15 | Address | &:r1327_1 | -| ir.cpp:1327:5:1327:15 | Address | &:r1327_1 | -| ir.cpp:1327:5:1327:15 | Address | &:r1327_1 | -| ir.cpp:1327:5:1327:15 | Address | &:r1327_1 | -| ir.cpp:1327:5:1327:15 | Address | &:r1327_1 | -| ir.cpp:1327:5:1327:15 | Arg(this) | this:r1327_1 | -| ir.cpp:1327:5:1327:15 | Arg(this) | this:r1327_1 | -| ir.cpp:1327:5:1327:15 | CallTarget | func:r1327_3 | -| ir.cpp:1327:5:1327:15 | CallTarget | func:r1327_3 | -| ir.cpp:1327:5:1327:15 | ChiPartial | partial:m1327_5 | -| ir.cpp:1327:5:1327:15 | ChiPartial | partial:m1327_5 | -| ir.cpp:1327:5:1327:15 | ChiPartial | partial:m1327_7 | -| ir.cpp:1327:5:1327:15 | ChiPartial | partial:m1327_7 | -| ir.cpp:1327:5:1327:15 | ChiTotal | total:m1326_4 | -| ir.cpp:1327:5:1327:15 | ChiTotal | total:m1326_4 | -| ir.cpp:1327:5:1327:15 | ChiTotal | total:m1327_2 | -| ir.cpp:1327:5:1327:15 | ChiTotal | total:m1327_2 | -| ir.cpp:1327:5:1327:15 | SideEffect | ~m1326_4 | -| ir.cpp:1327:5:1327:15 | SideEffect | ~m1326_4 | -| ir.cpp:1327:5:1327:15 | StoreValue | r1327_2 | -| ir.cpp:1327:5:1327:15 | StoreValue | r1327_2 | -| ir.cpp:1365:6:1365:21 | ChiPartial | partial:m1365_3 | -| ir.cpp:1365:6:1365:21 | ChiTotal | total:m1365_2 | -| ir.cpp:1365:6:1365:21 | SideEffect | ~m1376_5 | -| ir.cpp:1366:12:1366:12 | Address | &:r1366_1 | -| ir.cpp:1366:16:1366:34 | CallTarget | func:r1366_2 | -| ir.cpp:1366:16:1366:34 | ChiPartial | partial:m1366_4 | -| ir.cpp:1366:16:1366:34 | ChiTotal | total:m1365_4 | -| ir.cpp:1366:16:1366:34 | SideEffect | ~m1365_4 | -| ir.cpp:1366:16:1366:34 | StoreValue | r1366_3 | -| ir.cpp:1367:19:1367:20 | Address | &:r1367_1 | -| ir.cpp:1367:24:1367:42 | CallTarget | func:r1367_3 | -| ir.cpp:1367:24:1367:42 | ChiPartial | partial:m1367_5 | -| ir.cpp:1367:24:1367:42 | ChiTotal | total:m1366_5 | -| ir.cpp:1367:24:1367:42 | SideEffect | ~m1366_5 | -| ir.cpp:1367:24:1367:42 | StoreValue | r1367_4 | -| ir.cpp:1367:24:1367:44 | Address | &:r1367_2 | -| ir.cpp:1367:24:1367:44 | StoreValue | r1367_9 | -| ir.cpp:1367:24:1367:44 | Unary | r1367_2 | -| ir.cpp:1367:24:1367:44 | Unary | r1367_8 | -| ir.cpp:1369:5:1369:13 | CallTarget | func:r1369_1 | -| ir.cpp:1369:5:1369:13 | ChiPartial | partial:m1369_6 | -| ir.cpp:1369:5:1369:13 | ChiTotal | total:m1367_6 | -| ir.cpp:1369:5:1369:13 | SideEffect | ~m1367_6 | -| ir.cpp:1369:15:1369:15 | Address | &:r1369_4 | -| ir.cpp:1369:15:1369:15 | Arg(0) | 0:r1369_4 | -| ir.cpp:1369:15:1369:15 | SideEffect | ~m1366_6 | -| ir.cpp:1369:15:1369:15 | Unary | r1369_2 | -| ir.cpp:1369:15:1369:15 | Unary | r1369_3 | -| ir.cpp:1370:5:1370:21 | CallTarget | func:r1370_1 | -| ir.cpp:1370:5:1370:21 | ChiPartial | partial:m1370_15 | -| ir.cpp:1370:5:1370:21 | ChiTotal | total:m1370_9 | -| ir.cpp:1370:5:1370:21 | SideEffect | ~m1370_9 | -| ir.cpp:1370:23:1370:27 | Address | &:r1370_2 | -| ir.cpp:1370:23:1370:27 | Address | &:r1370_2 | -| ir.cpp:1370:23:1370:27 | Address | &:r1370_6 | -| ir.cpp:1370:23:1370:27 | Address | &:r1370_13 | -| ir.cpp:1370:23:1370:27 | Arg(0) | 0:r1370_6 | -| ir.cpp:1370:23:1370:27 | Arg(0) | 0:r1370_13 | -| ir.cpp:1370:23:1370:27 | Arg(this) | this:r1370_2 | -| ir.cpp:1370:23:1370:27 | CallTarget | func:r1370_4 | -| ir.cpp:1370:23:1370:27 | ChiPartial | partial:m1370_8 | -| ir.cpp:1370:23:1370:27 | ChiPartial | partial:m1370_11 | -| ir.cpp:1370:23:1370:27 | ChiTotal | total:m1369_7 | -| ir.cpp:1370:23:1370:27 | ChiTotal | total:m1370_3 | -| ir.cpp:1370:23:1370:27 | SideEffect | ~m1365_3 | -| ir.cpp:1370:23:1370:27 | SideEffect | ~m1369_7 | -| ir.cpp:1370:23:1370:27 | SideEffect | ~m1370_12 | -| ir.cpp:1370:23:1370:27 | Unary | r1370_2 | -| ir.cpp:1370:23:1370:27 | Unary | r1370_5 | -| ir.cpp:1371:5:1371:15 | CallTarget | func:r1371_1 | -| ir.cpp:1371:5:1371:15 | ChiPartial | partial:m1371_16 | -| ir.cpp:1371:5:1371:15 | ChiTotal | total:m1371_10 | -| ir.cpp:1371:5:1371:15 | SideEffect | ~m1371_10 | -| ir.cpp:1371:17:1371:17 | Address | &:r1371_2 | -| ir.cpp:1371:17:1371:17 | Address | &:r1371_2 | -| ir.cpp:1371:17:1371:17 | Address | &:r1371_2 | -| ir.cpp:1371:17:1371:17 | Address | &:r1371_7 | -| ir.cpp:1371:17:1371:17 | Arg(0) | 0:r1371_7 | -| ir.cpp:1371:17:1371:17 | Arg(0) | 0:r1371_14 | -| ir.cpp:1371:17:1371:17 | Arg(this) | this:r1371_2 | -| ir.cpp:1371:17:1371:17 | CallTarget | func:r1371_4 | -| ir.cpp:1371:17:1371:17 | ChiPartial | partial:m1371_9 | -| ir.cpp:1371:17:1371:17 | ChiPartial | partial:m1371_12 | -| ir.cpp:1371:17:1371:17 | ChiTotal | total:m1370_16 | -| ir.cpp:1371:17:1371:17 | ChiTotal | total:m1371_3 | -| ir.cpp:1371:17:1371:17 | Load | m1371_13 | -| ir.cpp:1371:17:1371:17 | SideEffect | ~m1366_6 | -| ir.cpp:1371:17:1371:17 | SideEffect | ~m1370_16 | -| ir.cpp:1371:17:1371:17 | Unary | r1371_5 | -| ir.cpp:1371:17:1371:17 | Unary | r1371_6 | -| ir.cpp:1372:5:1372:23 | CallTarget | func:r1372_1 | -| ir.cpp:1372:5:1372:23 | ChiPartial | partial:m1372_15 | -| ir.cpp:1372:5:1372:23 | ChiTotal | total:m1372_9 | -| ir.cpp:1372:5:1372:23 | SideEffect | ~m1372_9 | -| ir.cpp:1372:25:1372:29 | Address | &:r1372_2 | -| ir.cpp:1372:25:1372:29 | Address | &:r1372_2 | -| ir.cpp:1372:25:1372:29 | Address | &:r1372_2 | -| ir.cpp:1372:25:1372:29 | Address | &:r1372_6 | -| ir.cpp:1372:25:1372:29 | Arg(0) | 0:r1372_6 | -| ir.cpp:1372:25:1372:29 | Arg(0) | 0:r1372_13 | -| ir.cpp:1372:25:1372:29 | Arg(this) | this:r1372_2 | -| ir.cpp:1372:25:1372:29 | CallTarget | func:r1372_4 | -| ir.cpp:1372:25:1372:29 | ChiPartial | partial:m1372_8 | -| ir.cpp:1372:25:1372:29 | ChiPartial | partial:m1372_11 | -| ir.cpp:1372:25:1372:29 | ChiTotal | total:m1371_17 | -| ir.cpp:1372:25:1372:29 | ChiTotal | total:m1372_3 | -| ir.cpp:1372:25:1372:29 | Load | m1372_12 | -| ir.cpp:1372:25:1372:29 | SideEffect | ~m1365_3 | -| ir.cpp:1372:25:1372:29 | SideEffect | ~m1371_17 | -| ir.cpp:1372:25:1372:29 | Unary | r1372_5 | -| ir.cpp:1373:5:1373:12 | Address | &:r1373_1 | -| ir.cpp:1373:5:1373:12 | Address | &:r1373_1 | -| ir.cpp:1373:5:1373:12 | Address | &:r1373_9 | -| ir.cpp:1373:5:1373:12 | Arg(this) | this:r1373_1 | -| ir.cpp:1373:5:1373:12 | Arg(this) | this:r1373_9 | -| ir.cpp:1373:5:1373:12 | CallTarget | func:r1373_3 | -| ir.cpp:1373:5:1373:12 | ChiPartial | partial:m1373_5 | -| ir.cpp:1373:5:1373:12 | ChiPartial | partial:m1373_7 | -| ir.cpp:1373:5:1373:12 | ChiTotal | total:m1372_16 | -| ir.cpp:1373:5:1373:12 | ChiTotal | total:m1373_2 | -| ir.cpp:1373:5:1373:12 | SideEffect | m1373_8 | -| ir.cpp:1373:5:1373:12 | SideEffect | ~m1372_16 | -| ir.cpp:1373:5:1373:12 | Unary | r1373_1 | -| ir.cpp:1373:14:1373:18 | CallTarget | func:r1373_10 | -| ir.cpp:1373:14:1373:18 | ChiPartial | partial:m1373_12 | -| ir.cpp:1373:14:1373:18 | ChiTotal | total:m1373_6 | -| ir.cpp:1373:14:1373:18 | SideEffect | ~m1373_6 | -| ir.cpp:1374:5:1374:23 | CallTarget | func:r1374_2 | -| ir.cpp:1374:5:1374:23 | ChiPartial | partial:m1374_4 | -| ir.cpp:1374:5:1374:23 | ChiTotal | total:m1373_13 | -| ir.cpp:1374:5:1374:23 | SideEffect | ~m1373_13 | -| ir.cpp:1374:5:1374:23 | StoreValue | r1374_3 | -| ir.cpp:1374:5:1374:25 | Address | &:r1374_1 | -| ir.cpp:1374:5:1374:25 | Address | &:r1374_7 | -| ir.cpp:1374:5:1374:25 | Arg(this) | this:r1374_7 | -| ir.cpp:1374:5:1374:25 | SideEffect | m1374_6 | -| ir.cpp:1374:5:1374:25 | Unary | r1374_1 | -| ir.cpp:1374:27:1374:31 | CallTarget | func:r1374_8 | -| ir.cpp:1374:27:1374:31 | ChiPartial | partial:m1374_10 | -| ir.cpp:1374:27:1374:31 | ChiTotal | total:m1374_5 | -| ir.cpp:1374:27:1374:31 | SideEffect | ~m1374_5 | -| ir.cpp:1376:5:1376:28 | CallTarget | func:r1376_2 | -| ir.cpp:1376:5:1376:28 | ChiPartial | partial:m1376_4 | -| ir.cpp:1376:5:1376:28 | ChiTotal | total:m1374_11 | -| ir.cpp:1376:5:1376:28 | SideEffect | ~m1374_11 | -| ir.cpp:1376:5:1376:28 | StoreValue | r1376_3 | -| ir.cpp:1376:5:1376:30 | Address | &:r1376_1 | -| ir.cpp:1379:6:1379:30 | ChiPartial | partial:m1379_3 | -| ir.cpp:1379:6:1379:30 | ChiTotal | total:m1379_2 | -| ir.cpp:1379:6:1379:30 | SideEffect | ~m1388_5 | -| ir.cpp:1380:21:1380:21 | Address | &:r1380_1 | -| ir.cpp:1380:25:1380:52 | CallTarget | func:r1380_2 | -| ir.cpp:1380:25:1380:52 | ChiPartial | partial:m1380_4 | -| ir.cpp:1380:25:1380:52 | ChiTotal | total:m1379_4 | -| ir.cpp:1380:25:1380:52 | SideEffect | ~m1379_4 | -| ir.cpp:1380:25:1380:52 | StoreValue | r1380_3 | -| ir.cpp:1381:28:1381:29 | Address | &:r1381_1 | -| ir.cpp:1381:33:1381:60 | CallTarget | func:r1381_3 | -| ir.cpp:1381:33:1381:60 | ChiPartial | partial:m1381_5 | -| ir.cpp:1381:33:1381:60 | ChiTotal | total:m1380_5 | -| ir.cpp:1381:33:1381:60 | SideEffect | ~m1380_5 | -| ir.cpp:1381:33:1381:60 | StoreValue | r1381_4 | -| ir.cpp:1381:33:1381:62 | Address | &:r1381_2 | -| ir.cpp:1381:33:1381:62 | StoreValue | r1381_9 | -| ir.cpp:1381:33:1381:62 | Unary | r1381_2 | -| ir.cpp:1381:33:1381:62 | Unary | r1381_8 | -| ir.cpp:1382:21:1382:22 | Address | &:r1382_1 | -| ir.cpp:1383:5:1383:13 | CallTarget | func:r1383_1 | -| ir.cpp:1383:5:1383:13 | ChiPartial | partial:m1383_6 | -| ir.cpp:1383:5:1383:13 | ChiTotal | total:m1381_6 | -| ir.cpp:1383:5:1383:13 | SideEffect | ~m1381_6 | -| ir.cpp:1383:15:1383:15 | Address | &:r1383_4 | -| ir.cpp:1383:15:1383:15 | Arg(0) | 0:r1383_4 | -| ir.cpp:1383:15:1383:15 | SideEffect | ~m1380_6 | -| ir.cpp:1383:15:1383:15 | Unary | r1383_2 | -| ir.cpp:1383:15:1383:15 | Unary | r1383_3 | -| ir.cpp:1384:5:1384:15 | CallTarget | func:r1384_1 | -| ir.cpp:1384:5:1384:15 | ChiPartial | partial:m1384_8 | -| ir.cpp:1384:5:1384:15 | ChiTotal | total:m1383_7 | -| ir.cpp:1384:5:1384:15 | SideEffect | ~m1383_7 | -| ir.cpp:1384:17:1384:17 | Address | &:r1384_2 | -| ir.cpp:1384:17:1384:17 | Address | &:r1384_2 | -| ir.cpp:1384:17:1384:17 | Address | &:r1384_3 | -| ir.cpp:1384:17:1384:17 | Arg(0) | 0:r1384_6 | -| ir.cpp:1384:17:1384:17 | Load | m1380_6 | -| ir.cpp:1384:17:1384:17 | Load | m1384_5 | -| ir.cpp:1384:17:1384:17 | StoreValue | r1384_4 | -| ir.cpp:1385:5:1385:21 | Address | &:r1385_1 | -| ir.cpp:1385:5:1385:21 | Address | &:r1385_1 | -| ir.cpp:1385:5:1385:21 | Address | &:r1385_1 | -| ir.cpp:1385:5:1385:21 | Arg(this) | this:r1385_1 | -| ir.cpp:1385:5:1385:21 | ChiPartial | partial:m1385_9 | -| ir.cpp:1385:5:1385:21 | ChiTotal | total:m1385_3 | -| ir.cpp:1385:5:1385:21 | SideEffect | m1385_3 | -| ir.cpp:1385:5:1385:21 | StoreValue | r1385_2 | -| ir.cpp:1385:23:1385:28 | CallTarget | func:r1385_4 | -| ir.cpp:1385:23:1385:28 | ChiPartial | partial:m1385_6 | -| ir.cpp:1385:23:1385:28 | ChiTotal | total:m1384_9 | -| ir.cpp:1385:23:1385:28 | SideEffect | ~m1384_9 | -| ir.cpp:1386:5:1386:32 | CallTarget | func:r1386_2 | -| ir.cpp:1386:5:1386:32 | ChiPartial | partial:m1386_4 | -| ir.cpp:1386:5:1386:32 | ChiTotal | total:m1385_7 | -| ir.cpp:1386:5:1386:32 | SideEffect | ~m1385_7 | -| ir.cpp:1386:5:1386:32 | StoreValue | r1386_3 | -| ir.cpp:1386:5:1386:34 | Address | &:r1386_1 | -| ir.cpp:1386:5:1386:34 | Address | &:r1386_1 | -| ir.cpp:1386:5:1386:34 | Address | &:r1386_1 | -| ir.cpp:1386:5:1386:34 | Arg(this) | this:r1386_1 | -| ir.cpp:1386:5:1386:34 | ChiPartial | partial:m1386_12 | -| ir.cpp:1386:5:1386:34 | ChiTotal | total:m1386_6 | -| ir.cpp:1386:5:1386:34 | SideEffect | m1386_6 | -| ir.cpp:1386:36:1386:41 | CallTarget | func:r1386_7 | -| ir.cpp:1386:36:1386:41 | ChiPartial | partial:m1386_9 | -| ir.cpp:1386:36:1386:41 | ChiTotal | total:m1386_5 | -| ir.cpp:1386:36:1386:41 | SideEffect | ~m1386_5 | -| ir.cpp:1388:5:1388:37 | CallTarget | func:r1388_2 | -| ir.cpp:1388:5:1388:37 | ChiPartial | partial:m1388_4 | -| ir.cpp:1388:5:1388:37 | ChiTotal | total:m1386_10 | -| ir.cpp:1388:5:1388:37 | SideEffect | ~m1386_10 | -| ir.cpp:1388:5:1388:37 | StoreValue | r1388_3 | -| ir.cpp:1388:5:1388:39 | Address | &:r1388_1 | -| ir.cpp:1391:6:1391:31 | ChiPartial | partial:m1391_3 | -| ir.cpp:1391:6:1391:31 | ChiTotal | total:m1391_2 | -| ir.cpp:1391:6:1391:31 | SideEffect | ~m1401_6 | -| ir.cpp:1392:22:1392:22 | Address | &:r1392_1 | -| ir.cpp:1392:26:1392:54 | CallTarget | func:r1392_2 | -| ir.cpp:1392:26:1392:54 | ChiPartial | partial:m1392_4 | -| ir.cpp:1392:26:1392:54 | ChiTotal | total:m1391_4 | -| ir.cpp:1392:26:1392:54 | SideEffect | ~m1391_4 | -| ir.cpp:1392:26:1392:54 | StoreValue | r1392_3 | -| ir.cpp:1393:29:1393:30 | Address | &:r1393_1 | -| ir.cpp:1393:34:1393:62 | CallTarget | func:r1393_3 | -| ir.cpp:1393:34:1393:62 | ChiPartial | partial:m1393_5 | -| ir.cpp:1393:34:1393:62 | ChiTotal | total:m1392_5 | -| ir.cpp:1393:34:1393:62 | SideEffect | ~m1392_5 | -| ir.cpp:1393:34:1393:62 | StoreValue | r1393_4 | -| ir.cpp:1393:34:1393:64 | Address | &:r1393_2 | -| ir.cpp:1393:34:1393:64 | StoreValue | r1393_9 | -| ir.cpp:1393:34:1393:64 | Unary | r1393_2 | -| ir.cpp:1393:34:1393:64 | Unary | r1393_8 | -| ir.cpp:1394:22:1394:23 | Address | &:r1394_1 | -| ir.cpp:1394:22:1394:23 | Address | &:r1394_1 | -| ir.cpp:1394:22:1394:23 | Arg(this) | this:r1394_1 | -| ir.cpp:1394:22:1394:23 | CallTarget | func:r1394_3 | -| ir.cpp:1394:22:1394:23 | ChiPartial | partial:m1394_5 | -| ir.cpp:1394:22:1394:23 | ChiPartial | partial:m1394_7 | -| ir.cpp:1394:22:1394:23 | ChiTotal | total:m1393_6 | -| ir.cpp:1394:22:1394:23 | ChiTotal | total:m1394_2 | -| ir.cpp:1394:22:1394:23 | SideEffect | ~m1393_6 | -| ir.cpp:1395:5:1395:13 | CallTarget | func:r1395_1 | -| ir.cpp:1395:5:1395:13 | ChiPartial | partial:m1395_6 | -| ir.cpp:1395:5:1395:13 | ChiTotal | total:m1394_6 | -| ir.cpp:1395:5:1395:13 | SideEffect | ~m1394_6 | -| ir.cpp:1395:15:1395:15 | Address | &:r1395_4 | -| ir.cpp:1395:15:1395:15 | Arg(0) | 0:r1395_4 | -| ir.cpp:1395:15:1395:15 | SideEffect | ~m1392_6 | -| ir.cpp:1395:15:1395:15 | Unary | r1395_2 | -| ir.cpp:1395:15:1395:15 | Unary | r1395_3 | -| ir.cpp:1396:5:1396:15 | CallTarget | func:r1396_1 | -| ir.cpp:1396:5:1396:15 | ChiPartial | partial:m1396_16 | -| ir.cpp:1396:5:1396:15 | ChiTotal | total:m1396_10 | -| ir.cpp:1396:5:1396:15 | SideEffect | ~m1396_10 | -| ir.cpp:1396:17:1396:17 | Address | &:r1396_2 | -| ir.cpp:1396:17:1396:17 | Address | &:r1396_2 | -| ir.cpp:1396:17:1396:17 | Address | &:r1396_2 | -| ir.cpp:1396:17:1396:17 | Address | &:r1396_7 | -| ir.cpp:1396:17:1396:17 | Arg(0) | 0:r1396_7 | -| ir.cpp:1396:17:1396:17 | Arg(0) | 0:r1396_14 | -| ir.cpp:1396:17:1396:17 | Arg(this) | this:r1396_2 | -| ir.cpp:1396:17:1396:17 | CallTarget | func:r1396_4 | -| ir.cpp:1396:17:1396:17 | ChiPartial | partial:m1396_9 | -| ir.cpp:1396:17:1396:17 | ChiPartial | partial:m1396_12 | -| ir.cpp:1396:17:1396:17 | ChiTotal | total:m1395_7 | -| ir.cpp:1396:17:1396:17 | ChiTotal | total:m1396_3 | -| ir.cpp:1396:17:1396:17 | Load | m1396_13 | -| ir.cpp:1396:17:1396:17 | SideEffect | ~m1392_6 | -| ir.cpp:1396:17:1396:17 | SideEffect | ~m1395_7 | -| ir.cpp:1396:17:1396:17 | Unary | r1396_5 | -| ir.cpp:1396:17:1396:17 | Unary | r1396_6 | -| ir.cpp:1397:5:1397:22 | Address | &:r1397_1 | -| ir.cpp:1397:5:1397:22 | Address | &:r1397_1 | -| ir.cpp:1397:5:1397:22 | Address | &:r1397_1 | -| ir.cpp:1397:5:1397:22 | Address | &:r1397_1 | -| ir.cpp:1397:5:1397:22 | Arg(this) | this:r1397_1 | -| ir.cpp:1397:5:1397:22 | Arg(this) | this:r1397_1 | -| ir.cpp:1397:5:1397:22 | CallTarget | func:r1397_3 | -| ir.cpp:1397:5:1397:22 | ChiPartial | partial:m1397_5 | -| ir.cpp:1397:5:1397:22 | ChiPartial | partial:m1397_7 | -| ir.cpp:1397:5:1397:22 | ChiPartial | partial:m1397_14 | -| ir.cpp:1397:5:1397:22 | ChiTotal | total:m1396_17 | -| ir.cpp:1397:5:1397:22 | ChiTotal | total:m1397_2 | -| ir.cpp:1397:5:1397:22 | ChiTotal | total:m1397_8 | -| ir.cpp:1397:5:1397:22 | SideEffect | m1397_8 | -| ir.cpp:1397:5:1397:22 | SideEffect | ~m1396_17 | -| ir.cpp:1397:24:1397:29 | CallTarget | func:r1397_9 | -| ir.cpp:1397:24:1397:29 | ChiPartial | partial:m1397_11 | -| ir.cpp:1397:24:1397:29 | ChiTotal | total:m1397_6 | -| ir.cpp:1397:24:1397:29 | SideEffect | ~m1397_6 | -| ir.cpp:1398:5:1398:33 | CallTarget | func:r1398_2 | -| ir.cpp:1398:5:1398:33 | ChiPartial | partial:m1398_4 | -| ir.cpp:1398:5:1398:33 | ChiTotal | total:m1397_12 | -| ir.cpp:1398:5:1398:33 | SideEffect | ~m1397_12 | -| ir.cpp:1398:5:1398:33 | StoreValue | r1398_3 | -| ir.cpp:1398:5:1398:35 | Address | &:r1398_1 | -| ir.cpp:1398:5:1398:35 | Address | &:r1398_1 | -| ir.cpp:1398:5:1398:35 | Address | &:r1398_1 | -| ir.cpp:1398:5:1398:35 | Arg(this) | this:r1398_1 | -| ir.cpp:1398:5:1398:35 | ChiPartial | partial:m1398_12 | -| ir.cpp:1398:5:1398:35 | ChiTotal | total:m1398_6 | -| ir.cpp:1398:5:1398:35 | SideEffect | m1398_6 | -| ir.cpp:1398:37:1398:42 | CallTarget | func:r1398_7 | -| ir.cpp:1398:37:1398:42 | ChiPartial | partial:m1398_9 | -| ir.cpp:1398:37:1398:42 | ChiTotal | total:m1398_5 | -| ir.cpp:1398:37:1398:42 | SideEffect | ~m1398_5 | -| ir.cpp:1399:5:1399:38 | CallTarget | func:r1399_2 | -| ir.cpp:1399:5:1399:38 | ChiPartial | partial:m1399_4 | -| ir.cpp:1399:5:1399:38 | ChiTotal | total:m1398_10 | -| ir.cpp:1399:5:1399:38 | SideEffect | ~m1398_10 | -| ir.cpp:1399:5:1399:38 | StoreValue | r1399_3 | -| ir.cpp:1399:5:1399:40 | Address | &:r1399_1 | -| ir.cpp:1401:9:1401:9 | Address | &:r1401_1 | -| ir.cpp:1401:13:1401:41 | CallTarget | func:r1401_3 | -| ir.cpp:1401:13:1401:41 | ChiPartial | partial:m1401_5 | -| ir.cpp:1401:13:1401:41 | ChiTotal | total:m1399_5 | -| ir.cpp:1401:13:1401:41 | SideEffect | ~m1399_5 | -| ir.cpp:1401:13:1401:41 | StoreValue | r1401_4 | -| ir.cpp:1401:13:1401:43 | Address | &:r1401_2 | -| ir.cpp:1401:13:1401:43 | Unary | r1401_2 | -| ir.cpp:1401:45:1401:45 | Address | &:r1401_8 | -| ir.cpp:1401:45:1401:45 | Load | ~m1401_7 | -| ir.cpp:1401:45:1401:45 | StoreValue | r1401_9 | -| ir.cpp:1404:6:1404:20 | ChiPartial | partial:m1404_3 | -| ir.cpp:1404:6:1404:20 | ChiTotal | total:m1404_2 | -| ir.cpp:1404:6:1404:20 | SideEffect | ~m1413_4 | -| ir.cpp:1405:11:1405:11 | Address | &:r1405_1 | -| ir.cpp:1405:15:1405:32 | CallTarget | func:r1405_2 | -| ir.cpp:1405:15:1405:32 | ChiPartial | partial:m1405_4 | -| ir.cpp:1405:15:1405:32 | ChiTotal | total:m1404_4 | -| ir.cpp:1405:15:1405:32 | SideEffect | ~m1404_4 | -| ir.cpp:1405:15:1405:32 | StoreValue | r1405_3 | -| ir.cpp:1406:18:1406:19 | Address | &:r1406_1 | -| ir.cpp:1406:23:1406:40 | CallTarget | func:r1406_3 | -| ir.cpp:1406:23:1406:40 | ChiPartial | partial:m1406_5 | -| ir.cpp:1406:23:1406:40 | ChiTotal | total:m1405_5 | -| ir.cpp:1406:23:1406:40 | SideEffect | ~m1405_5 | -| ir.cpp:1406:23:1406:40 | StoreValue | r1406_4 | -| ir.cpp:1406:23:1406:42 | Address | &:r1406_2 | -| ir.cpp:1406:23:1406:42 | StoreValue | r1406_9 | -| ir.cpp:1406:23:1406:42 | Unary | r1406_2 | -| ir.cpp:1406:23:1406:42 | Unary | r1406_8 | -| ir.cpp:1408:5:1408:13 | CallTarget | func:r1408_1 | -| ir.cpp:1408:5:1408:13 | ChiPartial | partial:m1408_6 | -| ir.cpp:1408:5:1408:13 | ChiTotal | total:m1406_6 | -| ir.cpp:1408:5:1408:13 | SideEffect | ~m1406_6 | -| ir.cpp:1408:15:1408:15 | Address | &:r1408_4 | -| ir.cpp:1408:15:1408:15 | Arg(0) | 0:r1408_4 | -| ir.cpp:1408:15:1408:15 | SideEffect | ~m1405_6 | -| ir.cpp:1408:15:1408:15 | Unary | r1408_2 | -| ir.cpp:1408:15:1408:15 | Unary | r1408_3 | -| ir.cpp:1409:5:1409:15 | CallTarget | func:r1409_1 | -| ir.cpp:1409:5:1409:15 | ChiPartial | partial:m1409_5 | -| ir.cpp:1409:5:1409:15 | ChiTotal | total:m1408_7 | -| ir.cpp:1409:5:1409:15 | SideEffect | ~m1408_7 | -| ir.cpp:1409:17:1409:17 | Address | &:r1409_2 | -| ir.cpp:1409:17:1409:17 | Arg(0) | 0:r1409_3 | -| ir.cpp:1409:17:1409:17 | Load | m1405_6 | -| ir.cpp:1411:9:1411:9 | Address | &:r1411_1 | -| ir.cpp:1411:13:1411:30 | Address | &:r1411_6 | -| ir.cpp:1411:13:1411:30 | CallTarget | func:r1411_2 | -| ir.cpp:1411:13:1411:30 | ChiPartial | partial:m1411_4 | -| ir.cpp:1411:13:1411:30 | ChiTotal | total:m1409_6 | -| ir.cpp:1411:13:1411:30 | SideEffect | ~m1409_6 | -| ir.cpp:1411:13:1411:30 | StoreValue | r1411_3 | -| ir.cpp:1411:13:1411:30 | Unary | r1411_6 | -| ir.cpp:1411:34:1411:34 | Address | &:r1411_8 | -| ir.cpp:1411:34:1411:34 | Load | ~m1411_7 | -| ir.cpp:1411:34:1411:34 | StoreValue | r1411_9 | -| ir.cpp:1413:5:1413:27 | CallTarget | func:r1413_1 | -| ir.cpp:1413:5:1413:27 | ChiPartial | partial:m1413_3 | -| ir.cpp:1413:5:1413:27 | ChiTotal | total:m1411_5 | -| ir.cpp:1413:5:1413:27 | SideEffect | ~m1411_5 | -| ir.cpp:1421:6:1421:29 | ChiPartial | partial:m1421_3 | -| ir.cpp:1421:6:1421:29 | ChiTotal | total:m1421_2 | -| ir.cpp:1421:6:1421:29 | SideEffect | ~m1426_5 | -| ir.cpp:1422:16:1422:17 | Address | &:r1422_1 | -| ir.cpp:1422:21:1422:46 | Address | &:r1422_6 | -| ir.cpp:1422:21:1422:46 | CallTarget | func:r1422_2 | -| ir.cpp:1422:21:1422:46 | ChiPartial | partial:m1422_4 | -| ir.cpp:1422:21:1422:46 | ChiTotal | total:m1421_4 | -| ir.cpp:1422:21:1422:46 | SideEffect | ~m1421_4 | -| ir.cpp:1422:21:1422:46 | StoreValue | r1422_3 | -| ir.cpp:1422:21:1422:46 | Unary | r1422_6 | -| ir.cpp:1422:21:1422:50 | StoreValue | r1422_12 | -| ir.cpp:1422:21:1422:50 | Unary | r1422_10 | -| ir.cpp:1422:21:1422:50 | Unary | r1422_11 | -| ir.cpp:1422:50:1422:50 | Address | &:r1422_8 | -| ir.cpp:1422:50:1422:50 | Load | ~m1422_7 | -| ir.cpp:1422:50:1422:50 | Unary | r1422_9 | -| ir.cpp:1423:9:1423:9 | Address | &:r1423_1 | -| ir.cpp:1423:13:1423:38 | Address | &:r1423_6 | -| ir.cpp:1423:13:1423:38 | CallTarget | func:r1423_2 | -| ir.cpp:1423:13:1423:38 | ChiPartial | partial:m1423_4 | -| ir.cpp:1423:13:1423:38 | ChiTotal | total:m1422_5 | -| ir.cpp:1423:13:1423:38 | SideEffect | ~m1422_5 | -| ir.cpp:1423:13:1423:38 | StoreValue | r1423_3 | -| ir.cpp:1423:13:1423:38 | Unary | r1423_6 | -| ir.cpp:1423:13:1423:42 | Load | ~m1423_5 | -| ir.cpp:1423:13:1423:42 | StoreValue | r1423_10 | -| ir.cpp:1423:42:1423:42 | Address | &:r1423_8 | -| ir.cpp:1423:42:1423:42 | Address | &:r1423_9 | -| ir.cpp:1423:42:1423:42 | Load | ~m1423_7 | -| ir.cpp:1425:18:1425:19 | Address | &:r1425_1 | -| ir.cpp:1425:23:1425:48 | Address | &:r1425_6 | -| ir.cpp:1425:23:1425:48 | CallTarget | func:r1425_2 | -| ir.cpp:1425:23:1425:48 | ChiPartial | partial:m1425_4 | -| ir.cpp:1425:23:1425:48 | ChiTotal | total:m1423_5 | -| ir.cpp:1425:23:1425:48 | SideEffect | ~m1423_5 | -| ir.cpp:1425:23:1425:48 | StoreValue | r1425_3 | -| ir.cpp:1425:23:1425:48 | Unary | r1425_6 | -| ir.cpp:1425:23:1425:52 | Left | r1425_9 | -| ir.cpp:1425:23:1425:55 | StoreValue | r1425_13 | -| ir.cpp:1425:23:1425:55 | Unary | r1425_11 | -| ir.cpp:1425:23:1425:55 | Unary | r1425_12 | -| ir.cpp:1425:52:1425:52 | Unary | r1425_8 | -| ir.cpp:1425:54:1425:54 | Right | r1425_10 | -| ir.cpp:1426:11:1426:11 | Address | &:r1426_1 | -| ir.cpp:1426:15:1426:40 | Address | &:r1426_6 | -| ir.cpp:1426:15:1426:40 | CallTarget | func:r1426_2 | -| ir.cpp:1426:15:1426:40 | ChiPartial | partial:m1426_4 | -| ir.cpp:1426:15:1426:40 | ChiTotal | total:m1425_5 | -| ir.cpp:1426:15:1426:40 | SideEffect | ~m1425_5 | -| ir.cpp:1426:15:1426:40 | StoreValue | r1426_3 | -| ir.cpp:1426:15:1426:40 | Unary | r1426_6 | -| ir.cpp:1426:15:1426:44 | Left | r1426_9 | -| ir.cpp:1426:15:1426:47 | Address | &:r1426_11 | -| ir.cpp:1426:15:1426:47 | Load | ~m1426_7 | -| ir.cpp:1426:15:1426:47 | StoreValue | r1426_12 | -| ir.cpp:1426:44:1426:44 | Unary | r1426_8 | -| ir.cpp:1426:46:1426:46 | Right | r1426_10 | -| ir.cpp:1443:6:1443:24 | ChiPartial | partial:m1443_3 | -| ir.cpp:1443:6:1443:24 | ChiTotal | total:m1443_2 | -| ir.cpp:1443:6:1443:24 | SideEffect | ~m1447_10 | -| ir.cpp:1444:14:1444:14 | Address | &:r1444_1 | -| ir.cpp:1444:18:1444:40 | CallTarget | func:r1444_2 | -| ir.cpp:1444:18:1444:40 | ChiPartial | partial:m1444_4 | -| ir.cpp:1444:18:1444:40 | ChiTotal | total:m1443_4 | -| ir.cpp:1444:18:1444:40 | SideEffect | ~m1443_4 | -| ir.cpp:1444:18:1444:40 | StoreValue | r1444_3 | -| ir.cpp:1445:5:1445:5 | Address | &:r1445_10 | -| ir.cpp:1445:9:1445:36 | Address | &:r1445_1 | -| ir.cpp:1445:9:1445:36 | Address | &:r1445_8 | -| ir.cpp:1445:9:1445:36 | Load | ~m1445_6 | -| ir.cpp:1445:9:1445:36 | StoreValue | r1445_9 | -| ir.cpp:1445:9:1445:36 | Unary | r1445_1 | -| ir.cpp:1445:9:1445:36 | Unary | r1445_7 | -| ir.cpp:1445:10:1445:33 | CallTarget | func:r1445_2 | -| ir.cpp:1445:10:1445:33 | ChiPartial | partial:m1445_4 | -| ir.cpp:1445:10:1445:33 | ChiTotal | total:m1444_5 | -| ir.cpp:1445:10:1445:33 | SideEffect | ~m1444_5 | -| ir.cpp:1445:10:1445:33 | StoreValue | r1445_3 | -| ir.cpp:1446:9:1446:9 | Address | &:r1446_1 | -| ir.cpp:1446:13:1446:36 | CallTarget | func:r1446_2 | -| ir.cpp:1446:13:1446:36 | ChiPartial | partial:m1446_4 | -| ir.cpp:1446:13:1446:36 | ChiTotal | total:m1445_5 | -| ir.cpp:1446:13:1446:36 | SideEffect | ~m1445_5 | -| ir.cpp:1446:13:1446:36 | StoreValue | r1446_3 | -| ir.cpp:1446:40:1446:40 | Address | &:r1446_7 | -| ir.cpp:1446:40:1446:40 | Load | ~m1446_6 | -| ir.cpp:1446:40:1446:40 | StoreValue | r1446_8 | -| ir.cpp:1447:11:1447:11 | Address | &:r1447_1 | -| ir.cpp:1447:16:1447:39 | CallTarget | func:r1447_2 | -| ir.cpp:1447:16:1447:39 | ChiPartial | partial:m1447_4 | -| ir.cpp:1447:16:1447:39 | ChiTotal | total:m1446_5 | -| ir.cpp:1447:16:1447:39 | SideEffect | ~m1446_5 | -| ir.cpp:1447:16:1447:39 | StoreValue | r1447_3 | -| ir.cpp:1447:44:1447:44 | Arg(this) | this:r0_11 | -| ir.cpp:1447:44:1447:44 | CallTarget | func:r1447_7 | -| ir.cpp:1447:44:1447:44 | ChiPartial | partial:m1447_9 | -| ir.cpp:1447:44:1447:44 | ChiTotal | total:m1447_5 | -| ir.cpp:1447:44:1447:44 | SideEffect | ~m1447_5 | -| ir.cpp:1447:44:1447:44 | StoreValue | r1447_8 | -| ir.cpp:1451:3:1451:21 | Address | &:r1451_5 | -| ir.cpp:1451:3:1451:21 | Address | &:r1451_5 | -| ir.cpp:1451:3:1451:21 | Address | &:r1451_7 | -| ir.cpp:1451:3:1451:21 | Address | &:r1451_7 | -| ir.cpp:1451:3:1451:21 | ChiPartial | partial:m1451_3 | -| ir.cpp:1451:3:1451:21 | ChiTotal | total:m1451_2 | -| ir.cpp:1451:3:1451:21 | Load | m1451_6 | -| ir.cpp:1451:3:1451:21 | SideEffect | m1451_3 | -| ir.cpp:1451:3:1451:21 | SideEffect | m1451_8 | -| ir.cpp:1457:3:1457:20 | Address | &:r1457_5 | -| ir.cpp:1457:3:1457:20 | Address | &:r1457_5 | -| ir.cpp:1457:3:1457:20 | Address | &:r1457_7 | -| ir.cpp:1457:3:1457:20 | Address | &:r1457_7 | -| ir.cpp:1457:3:1457:20 | ChiPartial | partial:m1457_3 | -| ir.cpp:1457:3:1457:20 | ChiTotal | total:m1457_2 | -| ir.cpp:1457:3:1457:20 | Load | m1457_6 | -| ir.cpp:1457:3:1457:20 | SideEffect | m1457_3 | -| ir.cpp:1457:3:1457:20 | SideEffect | m1458_6 | -| ir.cpp:1457:3:1457:20 | Unary | m1457_6 | -| ir.cpp:1457:26:1457:30 | Address | &:r1457_9 | -| ir.cpp:1457:26:1457:30 | ChiPartial | partial:m1457_11 | -| ir.cpp:1457:26:1457:30 | ChiTotal | total:m1457_8 | -| ir.cpp:1457:26:1457:30 | StoreValue | r1457_10 | -| ir.cpp:1458:5:1458:5 | Address | &:r1458_2 | -| ir.cpp:1458:5:1458:5 | Address | &:r1458_4 | -| ir.cpp:1458:5:1458:5 | Load | m1457_6 | -| ir.cpp:1458:5:1458:5 | Unary | r1458_3 | -| ir.cpp:1458:5:1458:9 | ChiPartial | partial:m1458_5 | -| ir.cpp:1458:5:1458:9 | ChiTotal | total:m1457_12 | -| ir.cpp:1458:9:1458:9 | StoreValue | r1458_1 | -| ir.cpp:1462:6:1462:29 | ChiPartial | partial:m1462_3 | -| ir.cpp:1462:6:1462:29 | ChiTotal | total:m1462_2 | -| ir.cpp:1462:6:1462:29 | SideEffect | m1462_3 | -| ir.cpp:1463:9:1463:10 | Address | &:r1463_1 | -| ir.cpp:1463:9:1463:10 | Left | r1463_1 | -| ir.cpp:1463:9:1463:10 | Left | r1463_1 | -| ir.cpp:1463:16:1463:22 | Address | &:r1463_4 | -| ir.cpp:1463:16:1463:22 | Address | &:r1463_9 | -| ir.cpp:1463:16:1463:22 | Right | r1463_3 | -| ir.cpp:1463:16:1463:22 | Right | r1463_8 | -| ir.cpp:1463:18:1463:18 | ChiPartial | partial:m1463_6 | -| ir.cpp:1463:18:1463:18 | ChiTotal | total:m1463_2 | -| ir.cpp:1463:18:1463:18 | StoreValue | r1463_5 | -| ir.cpp:1463:21:1463:21 | ChiPartial | partial:m1463_11 | -| ir.cpp:1463:21:1463:21 | ChiTotal | total:m1463_7 | -| ir.cpp:1463:21:1463:21 | StoreValue | r1463_10 | -| ir.cpp:1466:15:1466:15 | Address | &:r1466_1 | -| ir.cpp:1466:16:1466:16 | Address | &:r1466_5 | -| ir.cpp:1466:20:1466:20 | Address | &:r1466_6 | -| ir.cpp:1466:26:1466:27 | StoreValue | r1466_3 | -| ir.cpp:1466:26:1466:27 | Unary | r1466_2 | -| ir.cpp:1467:9:1467:10 | Address | &:r1467_2 | -| ir.cpp:1467:9:1467:10 | Address | &:r1467_3 | -| ir.cpp:1467:9:1467:10 | Load | m0_14 | -| ir.cpp:1467:9:1467:14 | ChiPartial | partial:m1467_4 | -| ir.cpp:1467:9:1467:14 | ChiTotal | total:m1463_12 | -| ir.cpp:1467:14:1467:14 | StoreValue | r1467_1 | -| ir.cpp:1468:14:1468:16 | Address | &:r1468_1 | -| ir.cpp:1468:20:1468:21 | Address | &:r1468_2 | -| ir.cpp:1468:20:1468:21 | Load | m0_14 | -| ir.cpp:1468:20:1468:21 | StoreValue | r1468_4 | -| ir.cpp:1468:20:1468:21 | Unary | r1468_3 | -| ir.cpp:1469:13:1469:13 | Address | &:r1469_1 | -| ir.cpp:1469:17:1469:18 | Address | &:r1469_2 | -| ir.cpp:1469:17:1469:18 | Address | &:r1469_3 | -| ir.cpp:1469:17:1469:18 | Load | m0_14 | -| ir.cpp:1469:17:1469:18 | Load | m1467_4 | -| ir.cpp:1469:17:1469:18 | StoreValue | r1469_4 | -| ir.cpp:1473:15:1473:36 | Address | &:r1473_1 | -| ir.cpp:1473:40:1473:41 | StoreValue | r1473_3 | -| ir.cpp:1473:40:1473:41 | Unary | r1473_2 | -| ir.cpp:1474:15:1474:16 | Address | &:r1474_1 | -| ir.cpp:1474:20:1474:41 | Address | &:r1474_2 | -| ir.cpp:1474:20:1474:41 | Left | r1474_5 | -| ir.cpp:1474:20:1474:41 | Load | m1473_4 | -| ir.cpp:1474:20:1474:41 | Unary | r1474_3 | -| ir.cpp:1474:20:1474:41 | Unary | r1474_4 | -| ir.cpp:1474:20:1474:44 | StoreValue | r1474_8 | -| ir.cpp:1474:20:1474:44 | Unary | r1474_7 | -| ir.cpp:1474:43:1474:43 | Right | r1474_6 | -| ir.cpp:1475:15:1475:16 | Address | &:r1475_1 | -| ir.cpp:1475:20:1475:41 | Address | &:r1475_2 | -| ir.cpp:1475:20:1475:41 | Left | r1475_5 | -| ir.cpp:1475:20:1475:41 | Load | m1473_4 | -| ir.cpp:1475:20:1475:41 | Unary | r1475_3 | -| ir.cpp:1475:20:1475:41 | Unary | r1475_4 | -| ir.cpp:1475:20:1475:44 | StoreValue | r1475_8 | -| ir.cpp:1475:20:1475:44 | Unary | r1475_7 | -| ir.cpp:1475:43:1475:43 | Right | r1475_6 | -| ir.cpp:1476:9:1476:10 | Address | &:r1476_2 | -| ir.cpp:1476:9:1476:10 | Address | &:r1476_4 | -| ir.cpp:1476:9:1476:10 | Load | m1475_9 | -| ir.cpp:1476:9:1476:10 | Unary | r1476_3 | -| ir.cpp:1476:9:1476:14 | ChiPartial | partial:m1476_5 | -| ir.cpp:1476:9:1476:14 | ChiTotal | total:m1467_5 | -| ir.cpp:1476:14:1476:14 | StoreValue | r1476_1 | -| ir.cpp:1477:14:1477:16 | Address | &:r1477_1 | -| ir.cpp:1477:20:1477:21 | Address | &:r1477_2 | -| ir.cpp:1477:20:1477:21 | Load | m1475_9 | -| ir.cpp:1477:20:1477:21 | StoreValue | r1477_5 | -| ir.cpp:1477:20:1477:21 | Unary | r1477_3 | -| ir.cpp:1477:20:1477:21 | Unary | r1477_4 | -| ir.cpp:1478:13:1478:13 | Address | &:r1478_1 | -| ir.cpp:1478:17:1478:18 | Address | &:r1478_2 | -| ir.cpp:1478:17:1478:18 | Address | &:r1478_3 | -| ir.cpp:1478:17:1478:18 | Load | m1475_9 | -| ir.cpp:1478:17:1478:18 | Load | m1476_5 | -| ir.cpp:1478:17:1478:18 | StoreValue | r1478_4 | -| ir.cpp:1482:8:1482:8 | Address | &:r1482_5 | -| ir.cpp:1482:8:1482:8 | Address | &:r1482_5 | -| ir.cpp:1482:8:1482:8 | Address | &:r1482_7 | -| ir.cpp:1482:8:1482:8 | Address | &:r1482_7 | -| ir.cpp:1482:8:1482:8 | ChiPartial | partial:m1482_3 | -| ir.cpp:1482:8:1482:8 | ChiTotal | total:m1482_2 | -| ir.cpp:1482:8:1482:8 | Load | m1482_6 | -| ir.cpp:1482:8:1482:8 | SideEffect | m1482_3 | -| ir.cpp:1482:8:1482:8 | SideEffect | m1482_8 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_5 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_5 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_5 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_5 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_7 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_7 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_7 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_7 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_9 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_10 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_13 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_17 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_18 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_21 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_25 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_26 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_29 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_33 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_34 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_37 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_41 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_42 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_45 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_49 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_50 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_53 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_57 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_58 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_61 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_65 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_66 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_69 | -| ir.cpp:1486:8:1486:8 | ChiPartial | partial:m1486_3 | -| ir.cpp:1486:8:1486:8 | ChiPartial | partial:m1486_3 | -| ir.cpp:1486:8:1486:8 | ChiPartial | partial:m1486_15 | -| ir.cpp:1486:8:1486:8 | ChiPartial | partial:m1486_23 | -| ir.cpp:1486:8:1486:8 | ChiPartial | partial:m1486_31 | -| ir.cpp:1486:8:1486:8 | ChiPartial | partial:m1486_39 | -| ir.cpp:1486:8:1486:8 | ChiPartial | partial:m1486_47 | -| ir.cpp:1486:8:1486:8 | ChiPartial | partial:m1486_55 | -| ir.cpp:1486:8:1486:8 | ChiPartial | partial:m1486_63 | -| ir.cpp:1486:8:1486:8 | ChiPartial | partial:m1486_71 | -| ir.cpp:1486:8:1486:8 | ChiTotal | total:m1486_2 | -| ir.cpp:1486:8:1486:8 | ChiTotal | total:m1486_2 | -| ir.cpp:1486:8:1486:8 | ChiTotal | total:m1486_8 | -| ir.cpp:1486:8:1486:8 | ChiTotal | total:m1486_16 | -| ir.cpp:1486:8:1486:8 | ChiTotal | total:m1486_24 | -| ir.cpp:1486:8:1486:8 | ChiTotal | total:m1486_32 | -| ir.cpp:1486:8:1486:8 | ChiTotal | total:m1486_40 | -| ir.cpp:1486:8:1486:8 | ChiTotal | total:m1486_48 | -| ir.cpp:1486:8:1486:8 | ChiTotal | total:m1486_56 | -| ir.cpp:1486:8:1486:8 | ChiTotal | total:m1486_64 | -| ir.cpp:1486:8:1486:8 | Load | m0_2 | -| ir.cpp:1486:8:1486:8 | Load | m0_2 | -| ir.cpp:1486:8:1486:8 | Load | m0_2 | -| ir.cpp:1486:8:1486:8 | Load | m0_2 | -| ir.cpp:1486:8:1486:8 | Load | m0_2 | -| ir.cpp:1486:8:1486:8 | Load | m0_2 | -| ir.cpp:1486:8:1486:8 | Load | m0_2 | -| ir.cpp:1486:8:1486:8 | Load | m0_2 | -| ir.cpp:1486:8:1486:8 | Load | m1486_6 | -| ir.cpp:1486:8:1486:8 | Load | m1486_6 | -| ir.cpp:1486:8:1486:8 | Load | ~m0_4 | -| ir.cpp:1486:8:1486:8 | Load | ~m0_4 | -| ir.cpp:1486:8:1486:8 | Load | ~m0_4 | -| ir.cpp:1486:8:1486:8 | Load | ~m0_4 | -| ir.cpp:1486:8:1486:8 | Load | ~m0_4 | -| ir.cpp:1486:8:1486:8 | Load | ~m0_4 | -| ir.cpp:1486:8:1486:8 | Load | ~m0_4 | -| ir.cpp:1486:8:1486:8 | Load | ~m0_4 | -| ir.cpp:1486:8:1486:8 | SideEffect | m1486_3 | -| ir.cpp:1486:8:1486:8 | SideEffect | m1486_3 | -| ir.cpp:1486:8:1486:8 | SideEffect | m1486_8 | -| ir.cpp:1486:8:1486:8 | SideEffect | m1486_72 | -| ir.cpp:1486:8:1486:8 | StoreValue | r1486_14 | -| ir.cpp:1486:8:1486:8 | StoreValue | r1486_22 | -| ir.cpp:1486:8:1486:8 | StoreValue | r1486_30 | -| ir.cpp:1486:8:1486:8 | StoreValue | r1486_38 | -| ir.cpp:1486:8:1486:8 | StoreValue | r1486_46 | -| ir.cpp:1486:8:1486:8 | StoreValue | r1486_54 | -| ir.cpp:1486:8:1486:8 | StoreValue | r1486_62 | -| ir.cpp:1486:8:1486:8 | StoreValue | r1486_70 | -| ir.cpp:1486:8:1486:8 | Unary | m1486_6 | -| ir.cpp:1486:8:1486:8 | Unary | m1486_6 | -| ir.cpp:1486:8:1486:8 | Unary | m1486_6 | -| ir.cpp:1486:8:1486:8 | Unary | m1486_6 | -| ir.cpp:1486:8:1486:8 | Unary | m1486_6 | -| ir.cpp:1486:8:1486:8 | Unary | m1486_6 | -| ir.cpp:1486:8:1486:8 | Unary | m1486_6 | -| ir.cpp:1486:8:1486:8 | Unary | m1486_6 | -| ir.cpp:1486:8:1486:8 | Unary | r1486_11 | -| ir.cpp:1486:8:1486:8 | Unary | r1486_12 | -| ir.cpp:1486:8:1486:8 | Unary | r1486_19 | -| ir.cpp:1486:8:1486:8 | Unary | r1486_20 | -| ir.cpp:1486:8:1486:8 | Unary | r1486_27 | -| ir.cpp:1486:8:1486:8 | Unary | r1486_28 | -| ir.cpp:1486:8:1486:8 | Unary | r1486_35 | -| ir.cpp:1486:8:1486:8 | Unary | r1486_36 | -| ir.cpp:1486:8:1486:8 | Unary | r1486_43 | -| ir.cpp:1486:8:1486:8 | Unary | r1486_44 | -| ir.cpp:1486:8:1486:8 | Unary | r1486_51 | -| ir.cpp:1486:8:1486:8 | Unary | r1486_52 | -| ir.cpp:1486:8:1486:8 | Unary | r1486_59 | -| ir.cpp:1486:8:1486:8 | Unary | r1486_60 | -| ir.cpp:1486:8:1486:8 | Unary | r1486_67 | -| ir.cpp:1486:8:1486:8 | Unary | r1486_68 | -| ir.cpp:1499:6:1499:35 | ChiPartial | partial:m1499_3 | -| ir.cpp:1499:6:1499:35 | ChiTotal | total:m1499_2 | -| ir.cpp:1499:6:1499:35 | SideEffect | ~m1525_7 | -| ir.cpp:1500:39:1500:39 | Address | &:r1500_1 | -| ir.cpp:1500:39:1500:39 | Address | &:r1500_1 | -| ir.cpp:1500:39:1500:39 | Arg(this) | this:r1500_1 | -| ir.cpp:1500:39:1500:39 | CallTarget | func:r1500_3 | -| ir.cpp:1500:39:1500:39 | ChiPartial | partial:m1500_5 | -| ir.cpp:1500:39:1500:39 | ChiPartial | partial:m1500_7 | -| ir.cpp:1500:39:1500:39 | ChiTotal | total:m1499_4 | -| ir.cpp:1500:39:1500:39 | ChiTotal | total:m1500_2 | -| ir.cpp:1500:39:1500:39 | SideEffect | ~m1499_4 | -| ir.cpp:1503:14:1503:14 | Address | &:r1503_1 | -| ir.cpp:1503:15:1503:15 | Address | &:r1503_5 | -| ir.cpp:1503:18:1503:18 | Address | &:r1503_9 | -| ir.cpp:1503:21:1503:21 | Address | &:r1503_13 | -| ir.cpp:1503:24:1503:24 | Address | &:r1503_17 | -| ir.cpp:1503:27:1503:27 | Address | &:r1503_23 | -| ir.cpp:1503:30:1503:30 | Address | &:r1503_27 | -| ir.cpp:1503:34:1503:34 | Address | &:r1503_31 | -| ir.cpp:1503:41:1503:41 | Address | &:r1503_37 | -| ir.cpp:1503:46:1503:46 | Address | &:r1503_2 | -| ir.cpp:1503:46:1503:46 | Load | m1500_8 | -| ir.cpp:1503:46:1503:46 | StoreValue | r1503_3 | -| ir.cpp:1503:47:1503:47 | Address | &:r1503_19 | -| ir.cpp:1503:47:1503:47 | Address | &:r1503_33 | -| ir.cpp:1503:47:1503:47 | Load | ~m1503_4 | -| ir.cpp:1503:47:1503:47 | Load | ~m1503_4 | -| ir.cpp:1503:47:1503:47 | StoreValue | r1503_7 | -| ir.cpp:1503:47:1503:47 | StoreValue | r1503_11 | -| ir.cpp:1503:47:1503:47 | StoreValue | r1503_15 | -| ir.cpp:1503:47:1503:47 | StoreValue | r1503_21 | -| ir.cpp:1503:47:1503:47 | StoreValue | r1503_25 | -| ir.cpp:1503:47:1503:47 | StoreValue | r1503_29 | -| ir.cpp:1503:47:1503:47 | StoreValue | r1503_35 | -| ir.cpp:1503:47:1503:47 | StoreValue | r1503_39 | -| ir.cpp:1503:47:1503:47 | Unary | r1503_6 | -| ir.cpp:1503:47:1503:47 | Unary | r1503_10 | -| ir.cpp:1503:47:1503:47 | Unary | r1503_14 | -| ir.cpp:1503:47:1503:47 | Unary | r1503_18 | -| ir.cpp:1503:47:1503:47 | Unary | r1503_20 | -| ir.cpp:1503:47:1503:47 | Unary | r1503_24 | -| ir.cpp:1503:47:1503:47 | Unary | r1503_28 | -| ir.cpp:1503:47:1503:47 | Unary | r1503_32 | -| ir.cpp:1503:47:1503:47 | Unary | r1503_34 | -| ir.cpp:1503:47:1503:47 | Unary | r1503_38 | -| ir.cpp:1504:9:1504:9 | Address | &:r1504_2 | -| ir.cpp:1504:9:1504:9 | Address | &:r1504_3 | -| ir.cpp:1504:9:1504:9 | Load | m1503_12 | -| ir.cpp:1504:9:1504:15 | ChiPartial | partial:m1504_4 | -| ir.cpp:1504:9:1504:15 | ChiTotal | total:m1503_4 | -| ir.cpp:1504:13:1504:15 | StoreValue | r1504_1 | -| ir.cpp:1505:17:1505:18 | Address | &:r1505_1 | -| ir.cpp:1505:22:1505:22 | Address | &:r1505_2 | -| ir.cpp:1505:22:1505:22 | Load | m1503_12 | -| ir.cpp:1505:22:1505:22 | StoreValue | r1505_4 | -| ir.cpp:1505:22:1505:22 | Unary | r1505_3 | -| ir.cpp:1506:13:1506:13 | Address | &:r1506_1 | -| ir.cpp:1506:17:1506:17 | Address | &:r1506_2 | -| ir.cpp:1506:17:1506:17 | Address | &:r1506_3 | -| ir.cpp:1506:17:1506:17 | Load | m1503_8 | -| ir.cpp:1506:17:1506:17 | Load | ~m1503_4 | -| ir.cpp:1506:17:1506:17 | StoreValue | r1506_4 | -| ir.cpp:1507:9:1507:9 | Address | &:r1507_2 | -| ir.cpp:1507:9:1507:9 | Address | &:r1507_3 | -| ir.cpp:1507:9:1507:9 | Load | m1503_22 | -| ir.cpp:1507:9:1507:13 | ChiPartial | partial:m1507_4 | -| ir.cpp:1507:9:1507:13 | ChiTotal | total:m1500_6 | -| ir.cpp:1507:13:1507:13 | StoreValue | r1507_1 | -| ir.cpp:1508:9:1508:10 | Address | &:r1508_5 | -| ir.cpp:1508:9:1508:14 | ChiPartial | partial:m1508_6 | -| ir.cpp:1508:9:1508:14 | ChiTotal | total:m1507_5 | -| ir.cpp:1508:10:1508:10 | Address | &:r1508_2 | -| ir.cpp:1508:10:1508:10 | Address | &:r1508_3 | -| ir.cpp:1508:10:1508:10 | Load | m1503_26 | -| ir.cpp:1508:10:1508:10 | Load | ~m1503_4 | -| ir.cpp:1508:10:1508:10 | Unary | r1508_4 | -| ir.cpp:1508:14:1508:14 | StoreValue | r1508_1 | -| ir.cpp:1509:14:1509:15 | Address | &:r1509_1 | -| ir.cpp:1509:19:1509:19 | Address | &:r1509_2 | -| ir.cpp:1509:19:1509:19 | Load | m1503_22 | -| ir.cpp:1509:19:1509:19 | StoreValue | r1509_4 | -| ir.cpp:1509:19:1509:19 | Unary | r1509_3 | -| ir.cpp:1510:14:1510:15 | Address | &:r1510_1 | -| ir.cpp:1510:19:1510:20 | StoreValue | r1510_4 | -| ir.cpp:1510:20:1510:20 | Address | &:r1510_2 | -| ir.cpp:1510:20:1510:20 | Load | m1503_22 | -| ir.cpp:1510:20:1510:20 | Unary | r1510_3 | -| ir.cpp:1511:13:1511:13 | Address | &:r1511_1 | -| ir.cpp:1511:17:1511:17 | Address | &:r1511_2 | -| ir.cpp:1511:17:1511:17 | Address | &:r1511_3 | -| ir.cpp:1511:17:1511:17 | Load | m1503_22 | -| ir.cpp:1511:17:1511:17 | Load | ~m1508_7 | -| ir.cpp:1511:17:1511:17 | StoreValue | r1511_4 | -| ir.cpp:1515:14:1515:35 | Address | &:r1515_1 | -| ir.cpp:1515:39:1515:39 | Address | &:r1515_2 | -| ir.cpp:1515:39:1515:39 | Load | m1500_8 | -| ir.cpp:1515:39:1515:39 | StoreValue | r1515_3 | -| ir.cpp:1516:15:1516:15 | Address | &:r1516_1 | -| ir.cpp:1516:19:1516:40 | Unary | r1516_2 | -| ir.cpp:1516:19:1516:42 | StoreValue | r1516_4 | -| ir.cpp:1516:42:1516:42 | Unary | r1516_3 | -| ir.cpp:1517:15:1517:15 | Address | &:r1517_1 | -| ir.cpp:1517:19:1517:40 | Unary | r1517_2 | -| ir.cpp:1517:19:1517:42 | StoreValue | r1517_4 | -| ir.cpp:1517:42:1517:42 | Unary | r1517_3 | +| ir.cpp:1307:5:1307:5 | Address | &:r1307_10 | +| ir.cpp:1307:9:1307:9 | Address | &:r1307_1 | +| ir.cpp:1307:9:1307:9 | Condition | r1307_4 | +| ir.cpp:1307:9:1307:9 | Left | r1307_2 | +| ir.cpp:1307:9:1307:9 | Load | m1301_10 | +| ir.cpp:1307:9:1307:9 | Right | r1307_3 | +| ir.cpp:1307:9:1307:9 | StoreValue | r1307_2 | +| ir.cpp:1307:9:1307:14 | Address | &:r1307_7 | +| ir.cpp:1307:9:1307:14 | Address | &:r1307_12 | +| ir.cpp:1307:9:1307:14 | Address | &:r1307_17 | +| ir.cpp:1307:9:1307:14 | Load | m1307_6 | +| ir.cpp:1307:9:1307:14 | Phi | from 14:m1307_13 | +| ir.cpp:1307:9:1307:14 | Phi | from 15:m1307_18 | +| ir.cpp:1307:9:1307:14 | StoreValue | r1307_9 | +| ir.cpp:1307:9:1307:14 | Unary | r1307_8 | +| ir.cpp:1307:14:1307:14 | Address | &:r1307_14 | +| ir.cpp:1307:14:1307:14 | Load | m1301_8 | +| ir.cpp:1307:14:1307:14 | StoreValue | r1307_16 | +| ir.cpp:1307:14:1307:14 | Unary | r1307_15 | +| ir.cpp:1308:5:1308:5 | Address | &:r1308_10 | +| ir.cpp:1308:9:1308:9 | Address | &:r1308_1 | +| ir.cpp:1308:9:1308:9 | Condition | r1308_4 | +| ir.cpp:1308:9:1308:9 | Left | r1308_2 | +| ir.cpp:1308:9:1308:9 | Load | m1301_10 | +| ir.cpp:1308:9:1308:9 | Right | r1308_3 | +| ir.cpp:1308:9:1308:9 | StoreValue | r1308_2 | +| ir.cpp:1308:9:1308:14 | Address | &:r1308_7 | +| ir.cpp:1308:9:1308:14 | Address | &:r1308_12 | +| ir.cpp:1308:9:1308:14 | Address | &:r1308_16 | +| ir.cpp:1308:9:1308:14 | Load | m1308_6 | +| ir.cpp:1308:9:1308:14 | Phi | from 17:m1308_13 | +| ir.cpp:1308:9:1308:14 | Phi | from 18:m1308_17 | +| ir.cpp:1308:9:1308:14 | StoreValue | r1308_9 | +| ir.cpp:1308:9:1308:14 | Unary | r1308_8 | +| ir.cpp:1308:14:1308:14 | Address | &:r1308_14 | +| ir.cpp:1308:14:1308:14 | Load | m1301_10 | +| ir.cpp:1308:14:1308:14 | StoreValue | r1308_15 | +| ir.cpp:1310:5:1310:5 | Address | &:r1310_9 | +| ir.cpp:1310:9:1310:26 | Address | &:r1310_7 | +| ir.cpp:1310:9:1310:26 | Address | &:r1310_11 | +| ir.cpp:1310:9:1310:26 | Address | &:r1310_33 | +| ir.cpp:1310:9:1310:26 | Load | m1310_6 | +| ir.cpp:1310:9:1310:26 | Phi | from 20:m1310_12 | +| ir.cpp:1310:9:1310:26 | Phi | from 26:m1310_34 | +| ir.cpp:1310:9:1310:26 | StoreValue | r1310_8 | +| ir.cpp:1310:10:1310:10 | Address | &:r1310_1 | +| ir.cpp:1310:10:1310:10 | Condition | r1310_4 | +| ir.cpp:1310:10:1310:10 | Left | r1310_2 | +| ir.cpp:1310:10:1310:10 | Load | m1301_8 | +| ir.cpp:1310:10:1310:10 | Right | r1310_3 | +| ir.cpp:1310:10:1310:20 | Address | &:r1310_13 | +| ir.cpp:1310:10:1310:20 | Address | &:r1310_17 | +| ir.cpp:1310:10:1310:20 | Address | &:r1310_20 | +| ir.cpp:1310:10:1310:20 | Condition | r1310_18 | +| ir.cpp:1310:10:1310:20 | Load | m1310_16 | +| ir.cpp:1310:10:1310:20 | Phi | from 21:m1310_15 | +| ir.cpp:1310:10:1310:20 | Phi | from 23:m1310_22 | +| ir.cpp:1310:10:1310:20 | StoreValue | r1310_14 | +| ir.cpp:1310:10:1310:20 | StoreValue | r1310_18 | +| ir.cpp:1310:10:1310:20 | StoreValue | r1310_21 | +| ir.cpp:1310:15:1310:15 | Address | &:r1310_23 | +| ir.cpp:1310:15:1310:15 | Condition | r1310_24 | +| ir.cpp:1310:15:1310:15 | Load | m1301_6 | +| ir.cpp:1310:20:1310:20 | Address | &:r1310_26 | +| ir.cpp:1310:20:1310:20 | Condition | r1310_29 | +| ir.cpp:1310:20:1310:20 | Left | r1310_27 | +| ir.cpp:1310:20:1310:20 | Load | m1301_10 | +| ir.cpp:1310:20:1310:20 | Right | r1310_28 | +| ir.cpp:1310:26:1310:26 | Address | &:r1310_31 | +| ir.cpp:1310:26:1310:26 | Load | m1301_8 | +| ir.cpp:1310:26:1310:26 | StoreValue | r1310_32 | +| ir.cpp:1316:5:1316:27 | Address | &:r1316_9 | +| ir.cpp:1316:5:1316:27 | ChiPartial | partial:m1316_3 | +| ir.cpp:1316:5:1316:27 | ChiTotal | total:m1316_2 | +| ir.cpp:1316:5:1316:27 | Load | m1317_11 | +| ir.cpp:1316:5:1316:27 | SideEffect | ~m1317_7 | +| ir.cpp:1316:33:1316:33 | Address | &:r1316_5 | +| ir.cpp:1316:40:1316:40 | Address | &:r1316_7 | +| ir.cpp:1317:5:1317:48 | Address | &:r1317_1 | +| ir.cpp:1317:12:1317:21 | CallTarget | func:r1317_2 | +| ir.cpp:1317:12:1317:21 | ChiPartial | partial:m1317_4 | +| ir.cpp:1317:12:1317:21 | ChiTotal | total:m1316_4 | +| ir.cpp:1317:12:1317:21 | Condition | r1317_3 | +| ir.cpp:1317:12:1317:21 | SideEffect | ~m1316_4 | +| ir.cpp:1317:12:1317:47 | Address | &:r1317_9 | +| ir.cpp:1317:12:1317:47 | Address | &:r1317_19 | +| ir.cpp:1317:12:1317:47 | Address | &:r1317_24 | +| ir.cpp:1317:12:1317:47 | Load | m1317_8 | +| ir.cpp:1317:12:1317:47 | Phi | from 3:m1317_20 | +| ir.cpp:1317:12:1317:47 | Phi | from 3:~m1317_15 | +| ir.cpp:1317:12:1317:47 | Phi | from 4:m1317_25 | +| ir.cpp:1317:12:1317:47 | Phi | from 4:~m1317_21 | +| ir.cpp:1317:12:1317:47 | StoreValue | r1317_10 | +| ir.cpp:1317:28:1317:37 | CallTarget | func:r1317_12 | +| ir.cpp:1317:28:1317:37 | ChiPartial | partial:m1317_14 | +| ir.cpp:1317:28:1317:37 | ChiTotal | total:m1317_5 | +| ir.cpp:1317:28:1317:37 | Condition | r1317_13 | +| ir.cpp:1317:28:1317:37 | SideEffect | ~m1317_5 | +| ir.cpp:1317:43:1317:43 | Address | &:r1317_17 | +| ir.cpp:1317:43:1317:43 | Load | m1316_6 | +| ir.cpp:1317:43:1317:43 | StoreValue | r1317_18 | +| ir.cpp:1317:47:1317:47 | Address | &:r1317_22 | +| ir.cpp:1317:47:1317:47 | Load | m1316_8 | +| ir.cpp:1317:47:1317:47 | Phi | from 0:~m1317_5 | +| ir.cpp:1317:47:1317:47 | Phi | from 2:~m1317_15 | +| ir.cpp:1317:47:1317:47 | StoreValue | r1317_23 | +| ir.cpp:1322:6:1322:6 | ChiPartial | partial:m1322_3 | +| ir.cpp:1322:6:1322:6 | ChiTotal | total:m1322_2 | +| ir.cpp:1322:6:1322:6 | SideEffect | ~m1324_8 | +| ir.cpp:1322:13:1322:13 | Address | &:r1322_5 | +| ir.cpp:1322:13:1322:13 | Address | &:r1322_5 | +| ir.cpp:1322:13:1322:13 | Address | &:r1322_7 | +| ir.cpp:1322:13:1322:13 | Address | &:r1322_7 | +| ir.cpp:1322:13:1322:13 | Load | m1322_6 | +| ir.cpp:1322:13:1322:13 | SideEffect | m1322_8 | +| ir.cpp:1324:3:1324:13 | Address | &:r1324_6 | +| ir.cpp:1324:3:1324:13 | Arg(0) | 0:r1324_2 | +| ir.cpp:1324:3:1324:13 | CallTarget | func:r1324_1 | +| ir.cpp:1324:3:1324:13 | ChiPartial | partial:m1324_7 | +| ir.cpp:1324:3:1324:13 | ChiTotal | total:m1322_4 | +| ir.cpp:1324:3:1324:13 | SideEffect | ~m1322_4 | +| ir.cpp:1324:3:1324:13 | Unary | r1324_6 | +| ir.cpp:1324:8:1324:8 | Address | &:r1324_3 | +| ir.cpp:1324:8:1324:8 | Arg(1) | 1:r1324_5 | +| ir.cpp:1324:8:1324:8 | Load | m1322_6 | +| ir.cpp:1324:8:1324:8 | Unary | r1324_4 | +| ir.cpp:1328:3:1328:3 | Address | &:r1328_5 | +| ir.cpp:1328:3:1328:3 | Address | &:r1328_5 | +| ir.cpp:1328:3:1328:3 | Address | &:r1328_5 | +| ir.cpp:1328:3:1328:3 | Address | &:r1328_5 | +| ir.cpp:1328:3:1328:3 | ChiPartial | partial:m1328_3 | +| ir.cpp:1328:3:1328:3 | ChiPartial | partial:m1328_3 | +| ir.cpp:1328:3:1328:3 | ChiPartial | partial:m1328_3 | +| ir.cpp:1328:3:1328:3 | ChiPartial | partial:m1328_3 | +| ir.cpp:1328:3:1328:3 | ChiTotal | total:m1328_2 | +| ir.cpp:1328:3:1328:3 | ChiTotal | total:m1328_2 | +| ir.cpp:1328:3:1328:3 | ChiTotal | total:m1328_2 | +| ir.cpp:1328:3:1328:3 | ChiTotal | total:m1328_2 | +| ir.cpp:1328:3:1328:3 | Load | m1329_3 | +| ir.cpp:1328:3:1328:3 | Load | m1329_3 | +| ir.cpp:1328:3:1328:3 | Load | m1329_8 | +| ir.cpp:1328:3:1328:3 | Load | m1329_8 | +| ir.cpp:1328:3:1328:3 | SideEffect | m1328_3 | +| ir.cpp:1328:3:1328:3 | SideEffect | m1328_3 | +| ir.cpp:1328:3:1328:3 | SideEffect | ~m1329_6 | +| ir.cpp:1328:3:1328:3 | SideEffect | ~m1329_6 | +| ir.cpp:1329:5:1329:15 | Address | &:r1329_1 | +| ir.cpp:1329:5:1329:15 | Address | &:r1329_1 | +| ir.cpp:1329:5:1329:15 | Address | &:r1329_1 | +| ir.cpp:1329:5:1329:15 | Address | &:r1329_1 | +| ir.cpp:1329:5:1329:15 | Address | &:r1329_1 | +| ir.cpp:1329:5:1329:15 | Address | &:r1329_1 | +| ir.cpp:1329:5:1329:15 | Arg(this) | this:r1329_1 | +| ir.cpp:1329:5:1329:15 | Arg(this) | this:r1329_1 | +| ir.cpp:1329:5:1329:15 | CallTarget | func:r1329_3 | +| ir.cpp:1329:5:1329:15 | CallTarget | func:r1329_3 | +| ir.cpp:1329:5:1329:15 | ChiPartial | partial:m1329_5 | +| ir.cpp:1329:5:1329:15 | ChiPartial | partial:m1329_5 | +| ir.cpp:1329:5:1329:15 | ChiPartial | partial:m1329_7 | +| ir.cpp:1329:5:1329:15 | ChiPartial | partial:m1329_7 | +| ir.cpp:1329:5:1329:15 | ChiTotal | total:m1328_4 | +| ir.cpp:1329:5:1329:15 | ChiTotal | total:m1328_4 | +| ir.cpp:1329:5:1329:15 | ChiTotal | total:m1329_2 | +| ir.cpp:1329:5:1329:15 | ChiTotal | total:m1329_2 | +| ir.cpp:1329:5:1329:15 | SideEffect | ~m1328_4 | +| ir.cpp:1329:5:1329:15 | SideEffect | ~m1328_4 | +| ir.cpp:1329:5:1329:15 | StoreValue | r1329_2 | +| ir.cpp:1329:5:1329:15 | StoreValue | r1329_2 | +| ir.cpp:1367:6:1367:21 | ChiPartial | partial:m1367_3 | +| ir.cpp:1367:6:1367:21 | ChiTotal | total:m1367_2 | +| ir.cpp:1367:6:1367:21 | SideEffect | ~m1378_5 | +| ir.cpp:1368:12:1368:12 | Address | &:r1368_1 | +| ir.cpp:1368:16:1368:34 | CallTarget | func:r1368_2 | +| ir.cpp:1368:16:1368:34 | ChiPartial | partial:m1368_4 | +| ir.cpp:1368:16:1368:34 | ChiTotal | total:m1367_4 | +| ir.cpp:1368:16:1368:34 | SideEffect | ~m1367_4 | +| ir.cpp:1368:16:1368:34 | StoreValue | r1368_3 | +| ir.cpp:1369:19:1369:20 | Address | &:r1369_1 | +| ir.cpp:1369:24:1369:42 | CallTarget | func:r1369_3 | +| ir.cpp:1369:24:1369:42 | ChiPartial | partial:m1369_5 | +| ir.cpp:1369:24:1369:42 | ChiTotal | total:m1368_5 | +| ir.cpp:1369:24:1369:42 | SideEffect | ~m1368_5 | +| ir.cpp:1369:24:1369:42 | StoreValue | r1369_4 | +| ir.cpp:1369:24:1369:44 | Address | &:r1369_2 | +| ir.cpp:1369:24:1369:44 | StoreValue | r1369_9 | +| ir.cpp:1369:24:1369:44 | Unary | r1369_2 | +| ir.cpp:1369:24:1369:44 | Unary | r1369_8 | +| ir.cpp:1371:5:1371:13 | CallTarget | func:r1371_1 | +| ir.cpp:1371:5:1371:13 | ChiPartial | partial:m1371_6 | +| ir.cpp:1371:5:1371:13 | ChiTotal | total:m1369_6 | +| ir.cpp:1371:5:1371:13 | SideEffect | ~m1369_6 | +| ir.cpp:1371:15:1371:15 | Address | &:r1371_4 | +| ir.cpp:1371:15:1371:15 | Arg(0) | 0:r1371_4 | +| ir.cpp:1371:15:1371:15 | SideEffect | ~m1368_6 | +| ir.cpp:1371:15:1371:15 | Unary | r1371_2 | +| ir.cpp:1371:15:1371:15 | Unary | r1371_3 | +| ir.cpp:1372:5:1372:21 | CallTarget | func:r1372_1 | +| ir.cpp:1372:5:1372:21 | ChiPartial | partial:m1372_15 | +| ir.cpp:1372:5:1372:21 | ChiTotal | total:m1372_9 | +| ir.cpp:1372:5:1372:21 | SideEffect | ~m1372_9 | +| ir.cpp:1372:23:1372:27 | Address | &:r1372_2 | +| ir.cpp:1372:23:1372:27 | Address | &:r1372_2 | +| ir.cpp:1372:23:1372:27 | Address | &:r1372_6 | +| ir.cpp:1372:23:1372:27 | Address | &:r1372_13 | +| ir.cpp:1372:23:1372:27 | Arg(0) | 0:r1372_6 | +| ir.cpp:1372:23:1372:27 | Arg(0) | 0:r1372_13 | +| ir.cpp:1372:23:1372:27 | Arg(this) | this:r1372_2 | +| ir.cpp:1372:23:1372:27 | CallTarget | func:r1372_4 | +| ir.cpp:1372:23:1372:27 | ChiPartial | partial:m1372_8 | +| ir.cpp:1372:23:1372:27 | ChiPartial | partial:m1372_11 | +| ir.cpp:1372:23:1372:27 | ChiTotal | total:m1371_7 | +| ir.cpp:1372:23:1372:27 | ChiTotal | total:m1372_3 | +| ir.cpp:1372:23:1372:27 | SideEffect | ~m1367_3 | +| ir.cpp:1372:23:1372:27 | SideEffect | ~m1371_7 | +| ir.cpp:1372:23:1372:27 | SideEffect | ~m1372_12 | +| ir.cpp:1372:23:1372:27 | Unary | r1372_2 | +| ir.cpp:1372:23:1372:27 | Unary | r1372_5 | +| ir.cpp:1373:5:1373:15 | CallTarget | func:r1373_1 | +| ir.cpp:1373:5:1373:15 | ChiPartial | partial:m1373_16 | +| ir.cpp:1373:5:1373:15 | ChiTotal | total:m1373_10 | +| ir.cpp:1373:5:1373:15 | SideEffect | ~m1373_10 | +| ir.cpp:1373:17:1373:17 | Address | &:r1373_2 | +| ir.cpp:1373:17:1373:17 | Address | &:r1373_2 | +| ir.cpp:1373:17:1373:17 | Address | &:r1373_2 | +| ir.cpp:1373:17:1373:17 | Address | &:r1373_7 | +| ir.cpp:1373:17:1373:17 | Arg(0) | 0:r1373_7 | +| ir.cpp:1373:17:1373:17 | Arg(0) | 0:r1373_14 | +| ir.cpp:1373:17:1373:17 | Arg(this) | this:r1373_2 | +| ir.cpp:1373:17:1373:17 | CallTarget | func:r1373_4 | +| ir.cpp:1373:17:1373:17 | ChiPartial | partial:m1373_9 | +| ir.cpp:1373:17:1373:17 | ChiPartial | partial:m1373_12 | +| ir.cpp:1373:17:1373:17 | ChiTotal | total:m1372_16 | +| ir.cpp:1373:17:1373:17 | ChiTotal | total:m1373_3 | +| ir.cpp:1373:17:1373:17 | Load | m1373_13 | +| ir.cpp:1373:17:1373:17 | SideEffect | ~m1368_6 | +| ir.cpp:1373:17:1373:17 | SideEffect | ~m1372_16 | +| ir.cpp:1373:17:1373:17 | Unary | r1373_5 | +| ir.cpp:1373:17:1373:17 | Unary | r1373_6 | +| ir.cpp:1374:5:1374:23 | CallTarget | func:r1374_1 | +| ir.cpp:1374:5:1374:23 | ChiPartial | partial:m1374_15 | +| ir.cpp:1374:5:1374:23 | ChiTotal | total:m1374_9 | +| ir.cpp:1374:5:1374:23 | SideEffect | ~m1374_9 | +| ir.cpp:1374:25:1374:29 | Address | &:r1374_2 | +| ir.cpp:1374:25:1374:29 | Address | &:r1374_2 | +| ir.cpp:1374:25:1374:29 | Address | &:r1374_2 | +| ir.cpp:1374:25:1374:29 | Address | &:r1374_6 | +| ir.cpp:1374:25:1374:29 | Arg(0) | 0:r1374_6 | +| ir.cpp:1374:25:1374:29 | Arg(0) | 0:r1374_13 | +| ir.cpp:1374:25:1374:29 | Arg(this) | this:r1374_2 | +| ir.cpp:1374:25:1374:29 | CallTarget | func:r1374_4 | +| ir.cpp:1374:25:1374:29 | ChiPartial | partial:m1374_8 | +| ir.cpp:1374:25:1374:29 | ChiPartial | partial:m1374_11 | +| ir.cpp:1374:25:1374:29 | ChiTotal | total:m1373_17 | +| ir.cpp:1374:25:1374:29 | ChiTotal | total:m1374_3 | +| ir.cpp:1374:25:1374:29 | Load | m1374_12 | +| ir.cpp:1374:25:1374:29 | SideEffect | ~m1367_3 | +| ir.cpp:1374:25:1374:29 | SideEffect | ~m1373_17 | +| ir.cpp:1374:25:1374:29 | Unary | r1374_5 | +| ir.cpp:1375:5:1375:12 | Address | &:r1375_1 | +| ir.cpp:1375:5:1375:12 | Address | &:r1375_1 | +| ir.cpp:1375:5:1375:12 | Address | &:r1375_9 | +| ir.cpp:1375:5:1375:12 | Arg(this) | this:r1375_1 | +| ir.cpp:1375:5:1375:12 | Arg(this) | this:r1375_9 | +| ir.cpp:1375:5:1375:12 | CallTarget | func:r1375_3 | +| ir.cpp:1375:5:1375:12 | ChiPartial | partial:m1375_5 | +| ir.cpp:1375:5:1375:12 | ChiPartial | partial:m1375_7 | +| ir.cpp:1375:5:1375:12 | ChiTotal | total:m1374_16 | +| ir.cpp:1375:5:1375:12 | ChiTotal | total:m1375_2 | +| ir.cpp:1375:5:1375:12 | SideEffect | m1375_8 | +| ir.cpp:1375:5:1375:12 | SideEffect | ~m1374_16 | +| ir.cpp:1375:5:1375:12 | Unary | r1375_1 | +| ir.cpp:1375:14:1375:18 | CallTarget | func:r1375_10 | +| ir.cpp:1375:14:1375:18 | ChiPartial | partial:m1375_12 | +| ir.cpp:1375:14:1375:18 | ChiTotal | total:m1375_6 | +| ir.cpp:1375:14:1375:18 | SideEffect | ~m1375_6 | +| ir.cpp:1376:5:1376:23 | CallTarget | func:r1376_2 | +| ir.cpp:1376:5:1376:23 | ChiPartial | partial:m1376_4 | +| ir.cpp:1376:5:1376:23 | ChiTotal | total:m1375_13 | +| ir.cpp:1376:5:1376:23 | SideEffect | ~m1375_13 | +| ir.cpp:1376:5:1376:23 | StoreValue | r1376_3 | +| ir.cpp:1376:5:1376:25 | Address | &:r1376_1 | +| ir.cpp:1376:5:1376:25 | Address | &:r1376_7 | +| ir.cpp:1376:5:1376:25 | Arg(this) | this:r1376_7 | +| ir.cpp:1376:5:1376:25 | SideEffect | m1376_6 | +| ir.cpp:1376:5:1376:25 | Unary | r1376_1 | +| ir.cpp:1376:27:1376:31 | CallTarget | func:r1376_8 | +| ir.cpp:1376:27:1376:31 | ChiPartial | partial:m1376_10 | +| ir.cpp:1376:27:1376:31 | ChiTotal | total:m1376_5 | +| ir.cpp:1376:27:1376:31 | SideEffect | ~m1376_5 | +| ir.cpp:1378:5:1378:28 | CallTarget | func:r1378_2 | +| ir.cpp:1378:5:1378:28 | ChiPartial | partial:m1378_4 | +| ir.cpp:1378:5:1378:28 | ChiTotal | total:m1376_11 | +| ir.cpp:1378:5:1378:28 | SideEffect | ~m1376_11 | +| ir.cpp:1378:5:1378:28 | StoreValue | r1378_3 | +| ir.cpp:1378:5:1378:30 | Address | &:r1378_1 | +| ir.cpp:1381:6:1381:30 | ChiPartial | partial:m1381_3 | +| ir.cpp:1381:6:1381:30 | ChiTotal | total:m1381_2 | +| ir.cpp:1381:6:1381:30 | SideEffect | ~m1390_5 | +| ir.cpp:1382:21:1382:21 | Address | &:r1382_1 | +| ir.cpp:1382:25:1382:52 | CallTarget | func:r1382_2 | +| ir.cpp:1382:25:1382:52 | ChiPartial | partial:m1382_4 | +| ir.cpp:1382:25:1382:52 | ChiTotal | total:m1381_4 | +| ir.cpp:1382:25:1382:52 | SideEffect | ~m1381_4 | +| ir.cpp:1382:25:1382:52 | StoreValue | r1382_3 | +| ir.cpp:1383:28:1383:29 | Address | &:r1383_1 | +| ir.cpp:1383:33:1383:60 | CallTarget | func:r1383_3 | +| ir.cpp:1383:33:1383:60 | ChiPartial | partial:m1383_5 | +| ir.cpp:1383:33:1383:60 | ChiTotal | total:m1382_5 | +| ir.cpp:1383:33:1383:60 | SideEffect | ~m1382_5 | +| ir.cpp:1383:33:1383:60 | StoreValue | r1383_4 | +| ir.cpp:1383:33:1383:62 | Address | &:r1383_2 | +| ir.cpp:1383:33:1383:62 | StoreValue | r1383_9 | +| ir.cpp:1383:33:1383:62 | Unary | r1383_2 | +| ir.cpp:1383:33:1383:62 | Unary | r1383_8 | +| ir.cpp:1384:21:1384:22 | Address | &:r1384_1 | +| ir.cpp:1385:5:1385:13 | CallTarget | func:r1385_1 | +| ir.cpp:1385:5:1385:13 | ChiPartial | partial:m1385_6 | +| ir.cpp:1385:5:1385:13 | ChiTotal | total:m1383_6 | +| ir.cpp:1385:5:1385:13 | SideEffect | ~m1383_6 | +| ir.cpp:1385:15:1385:15 | Address | &:r1385_4 | +| ir.cpp:1385:15:1385:15 | Arg(0) | 0:r1385_4 | +| ir.cpp:1385:15:1385:15 | SideEffect | ~m1382_6 | +| ir.cpp:1385:15:1385:15 | Unary | r1385_2 | +| ir.cpp:1385:15:1385:15 | Unary | r1385_3 | +| ir.cpp:1386:5:1386:15 | CallTarget | func:r1386_1 | +| ir.cpp:1386:5:1386:15 | ChiPartial | partial:m1386_8 | +| ir.cpp:1386:5:1386:15 | ChiTotal | total:m1385_7 | +| ir.cpp:1386:5:1386:15 | SideEffect | ~m1385_7 | +| ir.cpp:1386:17:1386:17 | Address | &:r1386_2 | +| ir.cpp:1386:17:1386:17 | Address | &:r1386_2 | +| ir.cpp:1386:17:1386:17 | Address | &:r1386_3 | +| ir.cpp:1386:17:1386:17 | Arg(0) | 0:r1386_6 | +| ir.cpp:1386:17:1386:17 | Load | m1382_6 | +| ir.cpp:1386:17:1386:17 | Load | m1386_5 | +| ir.cpp:1386:17:1386:17 | StoreValue | r1386_4 | +| ir.cpp:1387:5:1387:21 | Address | &:r1387_1 | +| ir.cpp:1387:5:1387:21 | Address | &:r1387_1 | +| ir.cpp:1387:5:1387:21 | Address | &:r1387_1 | +| ir.cpp:1387:5:1387:21 | Arg(this) | this:r1387_1 | +| ir.cpp:1387:5:1387:21 | ChiPartial | partial:m1387_9 | +| ir.cpp:1387:5:1387:21 | ChiTotal | total:m1387_3 | +| ir.cpp:1387:5:1387:21 | SideEffect | m1387_3 | +| ir.cpp:1387:5:1387:21 | StoreValue | r1387_2 | +| ir.cpp:1387:23:1387:28 | CallTarget | func:r1387_4 | +| ir.cpp:1387:23:1387:28 | ChiPartial | partial:m1387_6 | +| ir.cpp:1387:23:1387:28 | ChiTotal | total:m1386_9 | +| ir.cpp:1387:23:1387:28 | SideEffect | ~m1386_9 | +| ir.cpp:1388:5:1388:32 | CallTarget | func:r1388_2 | +| ir.cpp:1388:5:1388:32 | ChiPartial | partial:m1388_4 | +| ir.cpp:1388:5:1388:32 | ChiTotal | total:m1387_7 | +| ir.cpp:1388:5:1388:32 | SideEffect | ~m1387_7 | +| ir.cpp:1388:5:1388:32 | StoreValue | r1388_3 | +| ir.cpp:1388:5:1388:34 | Address | &:r1388_1 | +| ir.cpp:1388:5:1388:34 | Address | &:r1388_1 | +| ir.cpp:1388:5:1388:34 | Address | &:r1388_1 | +| ir.cpp:1388:5:1388:34 | Arg(this) | this:r1388_1 | +| ir.cpp:1388:5:1388:34 | ChiPartial | partial:m1388_12 | +| ir.cpp:1388:5:1388:34 | ChiTotal | total:m1388_6 | +| ir.cpp:1388:5:1388:34 | SideEffect | m1388_6 | +| ir.cpp:1388:36:1388:41 | CallTarget | func:r1388_7 | +| ir.cpp:1388:36:1388:41 | ChiPartial | partial:m1388_9 | +| ir.cpp:1388:36:1388:41 | ChiTotal | total:m1388_5 | +| ir.cpp:1388:36:1388:41 | SideEffect | ~m1388_5 | +| ir.cpp:1390:5:1390:37 | CallTarget | func:r1390_2 | +| ir.cpp:1390:5:1390:37 | ChiPartial | partial:m1390_4 | +| ir.cpp:1390:5:1390:37 | ChiTotal | total:m1388_10 | +| ir.cpp:1390:5:1390:37 | SideEffect | ~m1388_10 | +| ir.cpp:1390:5:1390:37 | StoreValue | r1390_3 | +| ir.cpp:1390:5:1390:39 | Address | &:r1390_1 | +| ir.cpp:1393:6:1393:31 | ChiPartial | partial:m1393_3 | +| ir.cpp:1393:6:1393:31 | ChiTotal | total:m1393_2 | +| ir.cpp:1393:6:1393:31 | SideEffect | ~m1403_6 | +| ir.cpp:1394:22:1394:22 | Address | &:r1394_1 | +| ir.cpp:1394:26:1394:54 | CallTarget | func:r1394_2 | +| ir.cpp:1394:26:1394:54 | ChiPartial | partial:m1394_4 | +| ir.cpp:1394:26:1394:54 | ChiTotal | total:m1393_4 | +| ir.cpp:1394:26:1394:54 | SideEffect | ~m1393_4 | +| ir.cpp:1394:26:1394:54 | StoreValue | r1394_3 | +| ir.cpp:1395:29:1395:30 | Address | &:r1395_1 | +| ir.cpp:1395:34:1395:62 | CallTarget | func:r1395_3 | +| ir.cpp:1395:34:1395:62 | ChiPartial | partial:m1395_5 | +| ir.cpp:1395:34:1395:62 | ChiTotal | total:m1394_5 | +| ir.cpp:1395:34:1395:62 | SideEffect | ~m1394_5 | +| ir.cpp:1395:34:1395:62 | StoreValue | r1395_4 | +| ir.cpp:1395:34:1395:64 | Address | &:r1395_2 | +| ir.cpp:1395:34:1395:64 | StoreValue | r1395_9 | +| ir.cpp:1395:34:1395:64 | Unary | r1395_2 | +| ir.cpp:1395:34:1395:64 | Unary | r1395_8 | +| ir.cpp:1396:22:1396:23 | Address | &:r1396_1 | +| ir.cpp:1396:22:1396:23 | Address | &:r1396_1 | +| ir.cpp:1396:22:1396:23 | Arg(this) | this:r1396_1 | +| ir.cpp:1396:22:1396:23 | CallTarget | func:r1396_3 | +| ir.cpp:1396:22:1396:23 | ChiPartial | partial:m1396_5 | +| ir.cpp:1396:22:1396:23 | ChiPartial | partial:m1396_7 | +| ir.cpp:1396:22:1396:23 | ChiTotal | total:m1395_6 | +| ir.cpp:1396:22:1396:23 | ChiTotal | total:m1396_2 | +| ir.cpp:1396:22:1396:23 | SideEffect | ~m1395_6 | +| ir.cpp:1397:5:1397:13 | CallTarget | func:r1397_1 | +| ir.cpp:1397:5:1397:13 | ChiPartial | partial:m1397_6 | +| ir.cpp:1397:5:1397:13 | ChiTotal | total:m1396_6 | +| ir.cpp:1397:5:1397:13 | SideEffect | ~m1396_6 | +| ir.cpp:1397:15:1397:15 | Address | &:r1397_4 | +| ir.cpp:1397:15:1397:15 | Arg(0) | 0:r1397_4 | +| ir.cpp:1397:15:1397:15 | SideEffect | ~m1394_6 | +| ir.cpp:1397:15:1397:15 | Unary | r1397_2 | +| ir.cpp:1397:15:1397:15 | Unary | r1397_3 | +| ir.cpp:1398:5:1398:15 | CallTarget | func:r1398_1 | +| ir.cpp:1398:5:1398:15 | ChiPartial | partial:m1398_16 | +| ir.cpp:1398:5:1398:15 | ChiTotal | total:m1398_10 | +| ir.cpp:1398:5:1398:15 | SideEffect | ~m1398_10 | +| ir.cpp:1398:17:1398:17 | Address | &:r1398_2 | +| ir.cpp:1398:17:1398:17 | Address | &:r1398_2 | +| ir.cpp:1398:17:1398:17 | Address | &:r1398_2 | +| ir.cpp:1398:17:1398:17 | Address | &:r1398_7 | +| ir.cpp:1398:17:1398:17 | Arg(0) | 0:r1398_7 | +| ir.cpp:1398:17:1398:17 | Arg(0) | 0:r1398_14 | +| ir.cpp:1398:17:1398:17 | Arg(this) | this:r1398_2 | +| ir.cpp:1398:17:1398:17 | CallTarget | func:r1398_4 | +| ir.cpp:1398:17:1398:17 | ChiPartial | partial:m1398_9 | +| ir.cpp:1398:17:1398:17 | ChiPartial | partial:m1398_12 | +| ir.cpp:1398:17:1398:17 | ChiTotal | total:m1397_7 | +| ir.cpp:1398:17:1398:17 | ChiTotal | total:m1398_3 | +| ir.cpp:1398:17:1398:17 | Load | m1398_13 | +| ir.cpp:1398:17:1398:17 | SideEffect | ~m1394_6 | +| ir.cpp:1398:17:1398:17 | SideEffect | ~m1397_7 | +| ir.cpp:1398:17:1398:17 | Unary | r1398_5 | +| ir.cpp:1398:17:1398:17 | Unary | r1398_6 | +| ir.cpp:1399:5:1399:22 | Address | &:r1399_1 | +| ir.cpp:1399:5:1399:22 | Address | &:r1399_1 | +| ir.cpp:1399:5:1399:22 | Address | &:r1399_1 | +| ir.cpp:1399:5:1399:22 | Address | &:r1399_1 | +| ir.cpp:1399:5:1399:22 | Arg(this) | this:r1399_1 | +| ir.cpp:1399:5:1399:22 | Arg(this) | this:r1399_1 | +| ir.cpp:1399:5:1399:22 | CallTarget | func:r1399_3 | +| ir.cpp:1399:5:1399:22 | ChiPartial | partial:m1399_5 | +| ir.cpp:1399:5:1399:22 | ChiPartial | partial:m1399_7 | +| ir.cpp:1399:5:1399:22 | ChiPartial | partial:m1399_14 | +| ir.cpp:1399:5:1399:22 | ChiTotal | total:m1398_17 | +| ir.cpp:1399:5:1399:22 | ChiTotal | total:m1399_2 | +| ir.cpp:1399:5:1399:22 | ChiTotal | total:m1399_8 | +| ir.cpp:1399:5:1399:22 | SideEffect | m1399_8 | +| ir.cpp:1399:5:1399:22 | SideEffect | ~m1398_17 | +| ir.cpp:1399:24:1399:29 | CallTarget | func:r1399_9 | +| ir.cpp:1399:24:1399:29 | ChiPartial | partial:m1399_11 | +| ir.cpp:1399:24:1399:29 | ChiTotal | total:m1399_6 | +| ir.cpp:1399:24:1399:29 | SideEffect | ~m1399_6 | +| ir.cpp:1400:5:1400:33 | CallTarget | func:r1400_2 | +| ir.cpp:1400:5:1400:33 | ChiPartial | partial:m1400_4 | +| ir.cpp:1400:5:1400:33 | ChiTotal | total:m1399_12 | +| ir.cpp:1400:5:1400:33 | SideEffect | ~m1399_12 | +| ir.cpp:1400:5:1400:33 | StoreValue | r1400_3 | +| ir.cpp:1400:5:1400:35 | Address | &:r1400_1 | +| ir.cpp:1400:5:1400:35 | Address | &:r1400_1 | +| ir.cpp:1400:5:1400:35 | Address | &:r1400_1 | +| ir.cpp:1400:5:1400:35 | Arg(this) | this:r1400_1 | +| ir.cpp:1400:5:1400:35 | ChiPartial | partial:m1400_12 | +| ir.cpp:1400:5:1400:35 | ChiTotal | total:m1400_6 | +| ir.cpp:1400:5:1400:35 | SideEffect | m1400_6 | +| ir.cpp:1400:37:1400:42 | CallTarget | func:r1400_7 | +| ir.cpp:1400:37:1400:42 | ChiPartial | partial:m1400_9 | +| ir.cpp:1400:37:1400:42 | ChiTotal | total:m1400_5 | +| ir.cpp:1400:37:1400:42 | SideEffect | ~m1400_5 | +| ir.cpp:1401:5:1401:38 | CallTarget | func:r1401_2 | +| ir.cpp:1401:5:1401:38 | ChiPartial | partial:m1401_4 | +| ir.cpp:1401:5:1401:38 | ChiTotal | total:m1400_10 | +| ir.cpp:1401:5:1401:38 | SideEffect | ~m1400_10 | +| ir.cpp:1401:5:1401:38 | StoreValue | r1401_3 | +| ir.cpp:1401:5:1401:40 | Address | &:r1401_1 | +| ir.cpp:1403:9:1403:9 | Address | &:r1403_1 | +| ir.cpp:1403:13:1403:41 | CallTarget | func:r1403_3 | +| ir.cpp:1403:13:1403:41 | ChiPartial | partial:m1403_5 | +| ir.cpp:1403:13:1403:41 | ChiTotal | total:m1401_5 | +| ir.cpp:1403:13:1403:41 | SideEffect | ~m1401_5 | +| ir.cpp:1403:13:1403:41 | StoreValue | r1403_4 | +| ir.cpp:1403:13:1403:43 | Address | &:r1403_2 | +| ir.cpp:1403:13:1403:43 | Unary | r1403_2 | +| ir.cpp:1403:45:1403:45 | Address | &:r1403_8 | +| ir.cpp:1403:45:1403:45 | Load | ~m1403_7 | +| ir.cpp:1403:45:1403:45 | StoreValue | r1403_9 | +| ir.cpp:1406:6:1406:20 | ChiPartial | partial:m1406_3 | +| ir.cpp:1406:6:1406:20 | ChiTotal | total:m1406_2 | +| ir.cpp:1406:6:1406:20 | SideEffect | ~m1415_4 | +| ir.cpp:1407:11:1407:11 | Address | &:r1407_1 | +| ir.cpp:1407:15:1407:32 | CallTarget | func:r1407_2 | +| ir.cpp:1407:15:1407:32 | ChiPartial | partial:m1407_4 | +| ir.cpp:1407:15:1407:32 | ChiTotal | total:m1406_4 | +| ir.cpp:1407:15:1407:32 | SideEffect | ~m1406_4 | +| ir.cpp:1407:15:1407:32 | StoreValue | r1407_3 | +| ir.cpp:1408:18:1408:19 | Address | &:r1408_1 | +| ir.cpp:1408:23:1408:40 | CallTarget | func:r1408_3 | +| ir.cpp:1408:23:1408:40 | ChiPartial | partial:m1408_5 | +| ir.cpp:1408:23:1408:40 | ChiTotal | total:m1407_5 | +| ir.cpp:1408:23:1408:40 | SideEffect | ~m1407_5 | +| ir.cpp:1408:23:1408:40 | StoreValue | r1408_4 | +| ir.cpp:1408:23:1408:42 | Address | &:r1408_2 | +| ir.cpp:1408:23:1408:42 | StoreValue | r1408_9 | +| ir.cpp:1408:23:1408:42 | Unary | r1408_2 | +| ir.cpp:1408:23:1408:42 | Unary | r1408_8 | +| ir.cpp:1410:5:1410:13 | CallTarget | func:r1410_1 | +| ir.cpp:1410:5:1410:13 | ChiPartial | partial:m1410_6 | +| ir.cpp:1410:5:1410:13 | ChiTotal | total:m1408_6 | +| ir.cpp:1410:5:1410:13 | SideEffect | ~m1408_6 | +| ir.cpp:1410:15:1410:15 | Address | &:r1410_4 | +| ir.cpp:1410:15:1410:15 | Arg(0) | 0:r1410_4 | +| ir.cpp:1410:15:1410:15 | SideEffect | ~m1407_6 | +| ir.cpp:1410:15:1410:15 | Unary | r1410_2 | +| ir.cpp:1410:15:1410:15 | Unary | r1410_3 | +| ir.cpp:1411:5:1411:15 | CallTarget | func:r1411_1 | +| ir.cpp:1411:5:1411:15 | ChiPartial | partial:m1411_5 | +| ir.cpp:1411:5:1411:15 | ChiTotal | total:m1410_7 | +| ir.cpp:1411:5:1411:15 | SideEffect | ~m1410_7 | +| ir.cpp:1411:17:1411:17 | Address | &:r1411_2 | +| ir.cpp:1411:17:1411:17 | Arg(0) | 0:r1411_3 | +| ir.cpp:1411:17:1411:17 | Load | m1407_6 | +| ir.cpp:1413:9:1413:9 | Address | &:r1413_1 | +| ir.cpp:1413:13:1413:30 | Address | &:r1413_6 | +| ir.cpp:1413:13:1413:30 | CallTarget | func:r1413_2 | +| ir.cpp:1413:13:1413:30 | ChiPartial | partial:m1413_4 | +| ir.cpp:1413:13:1413:30 | ChiTotal | total:m1411_6 | +| ir.cpp:1413:13:1413:30 | SideEffect | ~m1411_6 | +| ir.cpp:1413:13:1413:30 | StoreValue | r1413_3 | +| ir.cpp:1413:13:1413:30 | Unary | r1413_6 | +| ir.cpp:1413:34:1413:34 | Address | &:r1413_8 | +| ir.cpp:1413:34:1413:34 | Load | ~m1413_7 | +| ir.cpp:1413:34:1413:34 | StoreValue | r1413_9 | +| ir.cpp:1415:5:1415:27 | CallTarget | func:r1415_1 | +| ir.cpp:1415:5:1415:27 | ChiPartial | partial:m1415_3 | +| ir.cpp:1415:5:1415:27 | ChiTotal | total:m1413_5 | +| ir.cpp:1415:5:1415:27 | SideEffect | ~m1413_5 | +| ir.cpp:1423:6:1423:29 | ChiPartial | partial:m1423_3 | +| ir.cpp:1423:6:1423:29 | ChiTotal | total:m1423_2 | +| ir.cpp:1423:6:1423:29 | SideEffect | ~m1428_5 | +| ir.cpp:1424:16:1424:17 | Address | &:r1424_1 | +| ir.cpp:1424:21:1424:46 | Address | &:r1424_6 | +| ir.cpp:1424:21:1424:46 | CallTarget | func:r1424_2 | +| ir.cpp:1424:21:1424:46 | ChiPartial | partial:m1424_4 | +| ir.cpp:1424:21:1424:46 | ChiTotal | total:m1423_4 | +| ir.cpp:1424:21:1424:46 | SideEffect | ~m1423_4 | +| ir.cpp:1424:21:1424:46 | StoreValue | r1424_3 | +| ir.cpp:1424:21:1424:46 | Unary | r1424_6 | +| ir.cpp:1424:21:1424:50 | StoreValue | r1424_12 | +| ir.cpp:1424:21:1424:50 | Unary | r1424_10 | +| ir.cpp:1424:21:1424:50 | Unary | r1424_11 | +| ir.cpp:1424:50:1424:50 | Address | &:r1424_8 | +| ir.cpp:1424:50:1424:50 | Load | ~m1424_7 | +| ir.cpp:1424:50:1424:50 | Unary | r1424_9 | +| ir.cpp:1425:9:1425:9 | Address | &:r1425_1 | +| ir.cpp:1425:13:1425:38 | Address | &:r1425_6 | +| ir.cpp:1425:13:1425:38 | CallTarget | func:r1425_2 | +| ir.cpp:1425:13:1425:38 | ChiPartial | partial:m1425_4 | +| ir.cpp:1425:13:1425:38 | ChiTotal | total:m1424_5 | +| ir.cpp:1425:13:1425:38 | SideEffect | ~m1424_5 | +| ir.cpp:1425:13:1425:38 | StoreValue | r1425_3 | +| ir.cpp:1425:13:1425:38 | Unary | r1425_6 | +| ir.cpp:1425:13:1425:42 | Load | ~m1425_5 | +| ir.cpp:1425:13:1425:42 | StoreValue | r1425_10 | +| ir.cpp:1425:42:1425:42 | Address | &:r1425_8 | +| ir.cpp:1425:42:1425:42 | Address | &:r1425_9 | +| ir.cpp:1425:42:1425:42 | Load | ~m1425_7 | +| ir.cpp:1427:18:1427:19 | Address | &:r1427_1 | +| ir.cpp:1427:23:1427:48 | Address | &:r1427_6 | +| ir.cpp:1427:23:1427:48 | CallTarget | func:r1427_2 | +| ir.cpp:1427:23:1427:48 | ChiPartial | partial:m1427_4 | +| ir.cpp:1427:23:1427:48 | ChiTotal | total:m1425_5 | +| ir.cpp:1427:23:1427:48 | SideEffect | ~m1425_5 | +| ir.cpp:1427:23:1427:48 | StoreValue | r1427_3 | +| ir.cpp:1427:23:1427:48 | Unary | r1427_6 | +| ir.cpp:1427:23:1427:52 | Left | r1427_9 | +| ir.cpp:1427:23:1427:55 | StoreValue | r1427_13 | +| ir.cpp:1427:23:1427:55 | Unary | r1427_11 | +| ir.cpp:1427:23:1427:55 | Unary | r1427_12 | +| ir.cpp:1427:52:1427:52 | Unary | r1427_8 | +| ir.cpp:1427:54:1427:54 | Right | r1427_10 | +| ir.cpp:1428:11:1428:11 | Address | &:r1428_1 | +| ir.cpp:1428:15:1428:40 | Address | &:r1428_6 | +| ir.cpp:1428:15:1428:40 | CallTarget | func:r1428_2 | +| ir.cpp:1428:15:1428:40 | ChiPartial | partial:m1428_4 | +| ir.cpp:1428:15:1428:40 | ChiTotal | total:m1427_5 | +| ir.cpp:1428:15:1428:40 | SideEffect | ~m1427_5 | +| ir.cpp:1428:15:1428:40 | StoreValue | r1428_3 | +| ir.cpp:1428:15:1428:40 | Unary | r1428_6 | +| ir.cpp:1428:15:1428:44 | Left | r1428_9 | +| ir.cpp:1428:15:1428:47 | Address | &:r1428_11 | +| ir.cpp:1428:15:1428:47 | Load | ~m1428_7 | +| ir.cpp:1428:15:1428:47 | StoreValue | r1428_12 | +| ir.cpp:1428:44:1428:44 | Unary | r1428_8 | +| ir.cpp:1428:46:1428:46 | Right | r1428_10 | +| ir.cpp:1445:6:1445:24 | ChiPartial | partial:m1445_3 | +| ir.cpp:1445:6:1445:24 | ChiTotal | total:m1445_2 | +| ir.cpp:1445:6:1445:24 | SideEffect | ~m1449_10 | +| ir.cpp:1446:14:1446:14 | Address | &:r1446_1 | +| ir.cpp:1446:18:1446:40 | CallTarget | func:r1446_2 | +| ir.cpp:1446:18:1446:40 | ChiPartial | partial:m1446_4 | +| ir.cpp:1446:18:1446:40 | ChiTotal | total:m1445_4 | +| ir.cpp:1446:18:1446:40 | SideEffect | ~m1445_4 | +| ir.cpp:1446:18:1446:40 | StoreValue | r1446_3 | +| ir.cpp:1447:5:1447:5 | Address | &:r1447_10 | +| ir.cpp:1447:9:1447:36 | Address | &:r1447_1 | +| ir.cpp:1447:9:1447:36 | Address | &:r1447_8 | +| ir.cpp:1447:9:1447:36 | Load | ~m1447_6 | +| ir.cpp:1447:9:1447:36 | StoreValue | r1447_9 | +| ir.cpp:1447:9:1447:36 | Unary | r1447_1 | +| ir.cpp:1447:9:1447:36 | Unary | r1447_7 | +| ir.cpp:1447:10:1447:33 | CallTarget | func:r1447_2 | +| ir.cpp:1447:10:1447:33 | ChiPartial | partial:m1447_4 | +| ir.cpp:1447:10:1447:33 | ChiTotal | total:m1446_5 | +| ir.cpp:1447:10:1447:33 | SideEffect | ~m1446_5 | +| ir.cpp:1447:10:1447:33 | StoreValue | r1447_3 | +| ir.cpp:1448:9:1448:9 | Address | &:r1448_1 | +| ir.cpp:1448:13:1448:36 | CallTarget | func:r1448_2 | +| ir.cpp:1448:13:1448:36 | ChiPartial | partial:m1448_4 | +| ir.cpp:1448:13:1448:36 | ChiTotal | total:m1447_5 | +| ir.cpp:1448:13:1448:36 | SideEffect | ~m1447_5 | +| ir.cpp:1448:13:1448:36 | StoreValue | r1448_3 | +| ir.cpp:1448:40:1448:40 | Address | &:r1448_7 | +| ir.cpp:1448:40:1448:40 | Load | ~m1448_6 | +| ir.cpp:1448:40:1448:40 | StoreValue | r1448_8 | +| ir.cpp:1449:11:1449:11 | Address | &:r1449_1 | +| ir.cpp:1449:16:1449:39 | CallTarget | func:r1449_2 | +| ir.cpp:1449:16:1449:39 | ChiPartial | partial:m1449_4 | +| ir.cpp:1449:16:1449:39 | ChiTotal | total:m1448_5 | +| ir.cpp:1449:16:1449:39 | SideEffect | ~m1448_5 | +| ir.cpp:1449:16:1449:39 | StoreValue | r1449_3 | +| ir.cpp:1449:44:1449:44 | Arg(this) | this:r0_11 | +| ir.cpp:1449:44:1449:44 | CallTarget | func:r1449_7 | +| ir.cpp:1449:44:1449:44 | ChiPartial | partial:m1449_9 | +| ir.cpp:1449:44:1449:44 | ChiTotal | total:m1449_5 | +| ir.cpp:1449:44:1449:44 | SideEffect | ~m1449_5 | +| ir.cpp:1449:44:1449:44 | StoreValue | r1449_8 | +| ir.cpp:1453:3:1453:21 | Address | &:r1453_5 | +| ir.cpp:1453:3:1453:21 | Address | &:r1453_5 | +| ir.cpp:1453:3:1453:21 | Address | &:r1453_7 | +| ir.cpp:1453:3:1453:21 | Address | &:r1453_7 | +| ir.cpp:1453:3:1453:21 | ChiPartial | partial:m1453_3 | +| ir.cpp:1453:3:1453:21 | ChiTotal | total:m1453_2 | +| ir.cpp:1453:3:1453:21 | Load | m1453_6 | +| ir.cpp:1453:3:1453:21 | SideEffect | m1453_3 | +| ir.cpp:1453:3:1453:21 | SideEffect | m1453_8 | +| ir.cpp:1459:3:1459:20 | Address | &:r1459_5 | +| ir.cpp:1459:3:1459:20 | Address | &:r1459_5 | +| ir.cpp:1459:3:1459:20 | Address | &:r1459_7 | +| ir.cpp:1459:3:1459:20 | Address | &:r1459_7 | +| ir.cpp:1459:3:1459:20 | ChiPartial | partial:m1459_3 | +| ir.cpp:1459:3:1459:20 | ChiTotal | total:m1459_2 | +| ir.cpp:1459:3:1459:20 | Load | m1459_6 | +| ir.cpp:1459:3:1459:20 | SideEffect | m1459_3 | +| ir.cpp:1459:3:1459:20 | SideEffect | m1460_6 | +| ir.cpp:1459:3:1459:20 | Unary | m1459_6 | +| ir.cpp:1459:26:1459:30 | Address | &:r1459_9 | +| ir.cpp:1459:26:1459:30 | ChiPartial | partial:m1459_11 | +| ir.cpp:1459:26:1459:30 | ChiTotal | total:m1459_8 | +| ir.cpp:1459:26:1459:30 | StoreValue | r1459_10 | +| ir.cpp:1460:5:1460:5 | Address | &:r1460_2 | +| ir.cpp:1460:5:1460:5 | Address | &:r1460_4 | +| ir.cpp:1460:5:1460:5 | Load | m1459_6 | +| ir.cpp:1460:5:1460:5 | Unary | r1460_3 | +| ir.cpp:1460:5:1460:9 | ChiPartial | partial:m1460_5 | +| ir.cpp:1460:5:1460:9 | ChiTotal | total:m1459_12 | +| ir.cpp:1460:9:1460:9 | StoreValue | r1460_1 | +| ir.cpp:1464:6:1464:29 | ChiPartial | partial:m1464_3 | +| ir.cpp:1464:6:1464:29 | ChiTotal | total:m1464_2 | +| ir.cpp:1464:6:1464:29 | SideEffect | m1464_3 | +| ir.cpp:1465:9:1465:10 | Address | &:r1465_1 | +| ir.cpp:1465:9:1465:10 | Left | r1465_1 | +| ir.cpp:1465:9:1465:10 | Left | r1465_1 | +| ir.cpp:1465:16:1465:22 | Address | &:r1465_4 | +| ir.cpp:1465:16:1465:22 | Address | &:r1465_9 | +| ir.cpp:1465:16:1465:22 | Right | r1465_3 | +| ir.cpp:1465:16:1465:22 | Right | r1465_8 | +| ir.cpp:1465:18:1465:18 | ChiPartial | partial:m1465_6 | +| ir.cpp:1465:18:1465:18 | ChiTotal | total:m1465_2 | +| ir.cpp:1465:18:1465:18 | StoreValue | r1465_5 | +| ir.cpp:1465:21:1465:21 | ChiPartial | partial:m1465_11 | +| ir.cpp:1465:21:1465:21 | ChiTotal | total:m1465_7 | +| ir.cpp:1465:21:1465:21 | StoreValue | r1465_10 | +| ir.cpp:1468:15:1468:15 | Address | &:r1468_1 | +| ir.cpp:1468:16:1468:16 | Address | &:r1468_5 | +| ir.cpp:1468:20:1468:20 | Address | &:r1468_6 | +| ir.cpp:1468:26:1468:27 | StoreValue | r1468_3 | +| ir.cpp:1468:26:1468:27 | Unary | r1468_2 | +| ir.cpp:1469:9:1469:10 | Address | &:r1469_2 | +| ir.cpp:1469:9:1469:10 | Address | &:r1469_3 | +| ir.cpp:1469:9:1469:10 | Load | m0_14 | +| ir.cpp:1469:9:1469:14 | ChiPartial | partial:m1469_4 | +| ir.cpp:1469:9:1469:14 | ChiTotal | total:m1465_12 | +| ir.cpp:1469:14:1469:14 | StoreValue | r1469_1 | +| ir.cpp:1470:14:1470:16 | Address | &:r1470_1 | +| ir.cpp:1470:20:1470:21 | Address | &:r1470_2 | +| ir.cpp:1470:20:1470:21 | Load | m0_14 | +| ir.cpp:1470:20:1470:21 | StoreValue | r1470_4 | +| ir.cpp:1470:20:1470:21 | Unary | r1470_3 | +| ir.cpp:1471:13:1471:13 | Address | &:r1471_1 | +| ir.cpp:1471:17:1471:18 | Address | &:r1471_2 | +| ir.cpp:1471:17:1471:18 | Address | &:r1471_3 | +| ir.cpp:1471:17:1471:18 | Load | m0_14 | +| ir.cpp:1471:17:1471:18 | Load | m1469_4 | +| ir.cpp:1471:17:1471:18 | StoreValue | r1471_4 | +| ir.cpp:1475:15:1475:36 | Address | &:r1475_1 | +| ir.cpp:1475:40:1475:41 | StoreValue | r1475_3 | +| ir.cpp:1475:40:1475:41 | Unary | r1475_2 | +| ir.cpp:1476:15:1476:16 | Address | &:r1476_1 | +| ir.cpp:1476:20:1476:41 | Address | &:r1476_2 | +| ir.cpp:1476:20:1476:41 | Left | r1476_5 | +| ir.cpp:1476:20:1476:41 | Load | m1475_4 | +| ir.cpp:1476:20:1476:41 | Unary | r1476_3 | +| ir.cpp:1476:20:1476:41 | Unary | r1476_4 | +| ir.cpp:1476:20:1476:44 | StoreValue | r1476_8 | +| ir.cpp:1476:20:1476:44 | Unary | r1476_7 | +| ir.cpp:1476:43:1476:43 | Right | r1476_6 | +| ir.cpp:1477:15:1477:16 | Address | &:r1477_1 | +| ir.cpp:1477:20:1477:41 | Address | &:r1477_2 | +| ir.cpp:1477:20:1477:41 | Left | r1477_5 | +| ir.cpp:1477:20:1477:41 | Load | m1475_4 | +| ir.cpp:1477:20:1477:41 | Unary | r1477_3 | +| ir.cpp:1477:20:1477:41 | Unary | r1477_4 | +| ir.cpp:1477:20:1477:44 | StoreValue | r1477_8 | +| ir.cpp:1477:20:1477:44 | Unary | r1477_7 | +| ir.cpp:1477:43:1477:43 | Right | r1477_6 | +| ir.cpp:1478:9:1478:10 | Address | &:r1478_2 | +| ir.cpp:1478:9:1478:10 | Address | &:r1478_4 | +| ir.cpp:1478:9:1478:10 | Load | m1477_9 | +| ir.cpp:1478:9:1478:10 | Unary | r1478_3 | +| ir.cpp:1478:9:1478:14 | ChiPartial | partial:m1478_5 | +| ir.cpp:1478:9:1478:14 | ChiTotal | total:m1469_5 | +| ir.cpp:1478:14:1478:14 | StoreValue | r1478_1 | +| ir.cpp:1479:14:1479:16 | Address | &:r1479_1 | +| ir.cpp:1479:20:1479:21 | Address | &:r1479_2 | +| ir.cpp:1479:20:1479:21 | Load | m1477_9 | +| ir.cpp:1479:20:1479:21 | StoreValue | r1479_5 | +| ir.cpp:1479:20:1479:21 | Unary | r1479_3 | +| ir.cpp:1479:20:1479:21 | Unary | r1479_4 | +| ir.cpp:1480:13:1480:13 | Address | &:r1480_1 | +| ir.cpp:1480:17:1480:18 | Address | &:r1480_2 | +| ir.cpp:1480:17:1480:18 | Address | &:r1480_3 | +| ir.cpp:1480:17:1480:18 | Load | m1477_9 | +| ir.cpp:1480:17:1480:18 | Load | m1478_5 | +| ir.cpp:1480:17:1480:18 | StoreValue | r1480_4 | +| ir.cpp:1484:8:1484:8 | Address | &:r1484_5 | +| ir.cpp:1484:8:1484:8 | Address | &:r1484_5 | +| ir.cpp:1484:8:1484:8 | Address | &:r1484_7 | +| ir.cpp:1484:8:1484:8 | Address | &:r1484_7 | +| ir.cpp:1484:8:1484:8 | ChiPartial | partial:m1484_3 | +| ir.cpp:1484:8:1484:8 | ChiTotal | total:m1484_2 | +| ir.cpp:1484:8:1484:8 | Load | m1484_6 | +| ir.cpp:1484:8:1484:8 | SideEffect | m1484_3 | +| ir.cpp:1484:8:1484:8 | SideEffect | m1484_8 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_5 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_5 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_5 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_5 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_7 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_7 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_7 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_7 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_9 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_10 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_13 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_17 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_18 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_21 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_25 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_26 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_29 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_33 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_34 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_37 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_41 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_42 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_45 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_49 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_50 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_53 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_57 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_58 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_61 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_65 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_66 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_69 | +| ir.cpp:1488:8:1488:8 | ChiPartial | partial:m1488_3 | +| ir.cpp:1488:8:1488:8 | ChiPartial | partial:m1488_3 | +| ir.cpp:1488:8:1488:8 | ChiPartial | partial:m1488_15 | +| ir.cpp:1488:8:1488:8 | ChiPartial | partial:m1488_23 | +| ir.cpp:1488:8:1488:8 | ChiPartial | partial:m1488_31 | +| ir.cpp:1488:8:1488:8 | ChiPartial | partial:m1488_39 | +| ir.cpp:1488:8:1488:8 | ChiPartial | partial:m1488_47 | +| ir.cpp:1488:8:1488:8 | ChiPartial | partial:m1488_55 | +| ir.cpp:1488:8:1488:8 | ChiPartial | partial:m1488_63 | +| ir.cpp:1488:8:1488:8 | ChiPartial | partial:m1488_71 | +| ir.cpp:1488:8:1488:8 | ChiTotal | total:m1488_2 | +| ir.cpp:1488:8:1488:8 | ChiTotal | total:m1488_2 | +| ir.cpp:1488:8:1488:8 | ChiTotal | total:m1488_8 | +| ir.cpp:1488:8:1488:8 | ChiTotal | total:m1488_16 | +| ir.cpp:1488:8:1488:8 | ChiTotal | total:m1488_24 | +| ir.cpp:1488:8:1488:8 | ChiTotal | total:m1488_32 | +| ir.cpp:1488:8:1488:8 | ChiTotal | total:m1488_40 | +| ir.cpp:1488:8:1488:8 | ChiTotal | total:m1488_48 | +| ir.cpp:1488:8:1488:8 | ChiTotal | total:m1488_56 | +| ir.cpp:1488:8:1488:8 | ChiTotal | total:m1488_64 | +| ir.cpp:1488:8:1488:8 | Load | m0_2 | +| ir.cpp:1488:8:1488:8 | Load | m0_2 | +| ir.cpp:1488:8:1488:8 | Load | m0_2 | +| ir.cpp:1488:8:1488:8 | Load | m0_2 | +| ir.cpp:1488:8:1488:8 | Load | m0_2 | +| ir.cpp:1488:8:1488:8 | Load | m0_2 | +| ir.cpp:1488:8:1488:8 | Load | m0_2 | +| ir.cpp:1488:8:1488:8 | Load | m0_2 | +| ir.cpp:1488:8:1488:8 | Load | m1488_6 | +| ir.cpp:1488:8:1488:8 | Load | m1488_6 | +| ir.cpp:1488:8:1488:8 | Load | ~m0_4 | +| ir.cpp:1488:8:1488:8 | Load | ~m0_4 | +| ir.cpp:1488:8:1488:8 | Load | ~m0_4 | +| ir.cpp:1488:8:1488:8 | Load | ~m0_4 | +| ir.cpp:1488:8:1488:8 | Load | ~m0_4 | +| ir.cpp:1488:8:1488:8 | Load | ~m0_4 | +| ir.cpp:1488:8:1488:8 | Load | ~m0_4 | +| ir.cpp:1488:8:1488:8 | Load | ~m0_4 | +| ir.cpp:1488:8:1488:8 | SideEffect | m1488_3 | +| ir.cpp:1488:8:1488:8 | SideEffect | m1488_3 | +| ir.cpp:1488:8:1488:8 | SideEffect | m1488_8 | +| ir.cpp:1488:8:1488:8 | SideEffect | m1488_72 | +| ir.cpp:1488:8:1488:8 | StoreValue | r1488_14 | +| ir.cpp:1488:8:1488:8 | StoreValue | r1488_22 | +| ir.cpp:1488:8:1488:8 | StoreValue | r1488_30 | +| ir.cpp:1488:8:1488:8 | StoreValue | r1488_38 | +| ir.cpp:1488:8:1488:8 | StoreValue | r1488_46 | +| ir.cpp:1488:8:1488:8 | StoreValue | r1488_54 | +| ir.cpp:1488:8:1488:8 | StoreValue | r1488_62 | +| ir.cpp:1488:8:1488:8 | StoreValue | r1488_70 | +| ir.cpp:1488:8:1488:8 | Unary | m1488_6 | +| ir.cpp:1488:8:1488:8 | Unary | m1488_6 | +| ir.cpp:1488:8:1488:8 | Unary | m1488_6 | +| ir.cpp:1488:8:1488:8 | Unary | m1488_6 | +| ir.cpp:1488:8:1488:8 | Unary | m1488_6 | +| ir.cpp:1488:8:1488:8 | Unary | m1488_6 | +| ir.cpp:1488:8:1488:8 | Unary | m1488_6 | +| ir.cpp:1488:8:1488:8 | Unary | m1488_6 | +| ir.cpp:1488:8:1488:8 | Unary | r1488_11 | +| ir.cpp:1488:8:1488:8 | Unary | r1488_12 | +| ir.cpp:1488:8:1488:8 | Unary | r1488_19 | +| ir.cpp:1488:8:1488:8 | Unary | r1488_20 | +| ir.cpp:1488:8:1488:8 | Unary | r1488_27 | +| ir.cpp:1488:8:1488:8 | Unary | r1488_28 | +| ir.cpp:1488:8:1488:8 | Unary | r1488_35 | +| ir.cpp:1488:8:1488:8 | Unary | r1488_36 | +| ir.cpp:1488:8:1488:8 | Unary | r1488_43 | +| ir.cpp:1488:8:1488:8 | Unary | r1488_44 | +| ir.cpp:1488:8:1488:8 | Unary | r1488_51 | +| ir.cpp:1488:8:1488:8 | Unary | r1488_52 | +| ir.cpp:1488:8:1488:8 | Unary | r1488_59 | +| ir.cpp:1488:8:1488:8 | Unary | r1488_60 | +| ir.cpp:1488:8:1488:8 | Unary | r1488_67 | +| ir.cpp:1488:8:1488:8 | Unary | r1488_68 | +| ir.cpp:1501:6:1501:35 | ChiPartial | partial:m1501_3 | +| ir.cpp:1501:6:1501:35 | ChiTotal | total:m1501_2 | +| ir.cpp:1501:6:1501:35 | SideEffect | ~m1527_7 | +| ir.cpp:1502:39:1502:39 | Address | &:r1502_1 | +| ir.cpp:1502:39:1502:39 | Address | &:r1502_1 | +| ir.cpp:1502:39:1502:39 | Arg(this) | this:r1502_1 | +| ir.cpp:1502:39:1502:39 | CallTarget | func:r1502_3 | +| ir.cpp:1502:39:1502:39 | ChiPartial | partial:m1502_5 | +| ir.cpp:1502:39:1502:39 | ChiPartial | partial:m1502_7 | +| ir.cpp:1502:39:1502:39 | ChiTotal | total:m1501_4 | +| ir.cpp:1502:39:1502:39 | ChiTotal | total:m1502_2 | +| ir.cpp:1502:39:1502:39 | SideEffect | ~m1501_4 | +| ir.cpp:1505:14:1505:14 | Address | &:r1505_1 | +| ir.cpp:1505:15:1505:15 | Address | &:r1505_5 | +| ir.cpp:1505:18:1505:18 | Address | &:r1505_9 | +| ir.cpp:1505:21:1505:21 | Address | &:r1505_13 | +| ir.cpp:1505:24:1505:24 | Address | &:r1505_17 | +| ir.cpp:1505:27:1505:27 | Address | &:r1505_23 | +| ir.cpp:1505:30:1505:30 | Address | &:r1505_27 | +| ir.cpp:1505:34:1505:34 | Address | &:r1505_31 | +| ir.cpp:1505:41:1505:41 | Address | &:r1505_37 | +| ir.cpp:1505:46:1505:46 | Address | &:r1505_2 | +| ir.cpp:1505:46:1505:46 | Load | m1502_8 | +| ir.cpp:1505:46:1505:46 | StoreValue | r1505_3 | +| ir.cpp:1505:47:1505:47 | Address | &:r1505_19 | +| ir.cpp:1505:47:1505:47 | Address | &:r1505_33 | +| ir.cpp:1505:47:1505:47 | Load | ~m1505_4 | +| ir.cpp:1505:47:1505:47 | Load | ~m1505_4 | +| ir.cpp:1505:47:1505:47 | StoreValue | r1505_7 | +| ir.cpp:1505:47:1505:47 | StoreValue | r1505_11 | +| ir.cpp:1505:47:1505:47 | StoreValue | r1505_15 | +| ir.cpp:1505:47:1505:47 | StoreValue | r1505_21 | +| ir.cpp:1505:47:1505:47 | StoreValue | r1505_25 | +| ir.cpp:1505:47:1505:47 | StoreValue | r1505_29 | +| ir.cpp:1505:47:1505:47 | StoreValue | r1505_35 | +| ir.cpp:1505:47:1505:47 | StoreValue | r1505_39 | +| ir.cpp:1505:47:1505:47 | Unary | r1505_6 | +| ir.cpp:1505:47:1505:47 | Unary | r1505_10 | +| ir.cpp:1505:47:1505:47 | Unary | r1505_14 | +| ir.cpp:1505:47:1505:47 | Unary | r1505_18 | +| ir.cpp:1505:47:1505:47 | Unary | r1505_20 | +| ir.cpp:1505:47:1505:47 | Unary | r1505_24 | +| ir.cpp:1505:47:1505:47 | Unary | r1505_28 | +| ir.cpp:1505:47:1505:47 | Unary | r1505_32 | +| ir.cpp:1505:47:1505:47 | Unary | r1505_34 | +| ir.cpp:1505:47:1505:47 | Unary | r1505_38 | +| ir.cpp:1506:9:1506:9 | Address | &:r1506_2 | +| ir.cpp:1506:9:1506:9 | Address | &:r1506_3 | +| ir.cpp:1506:9:1506:9 | Load | m1505_12 | +| ir.cpp:1506:9:1506:15 | ChiPartial | partial:m1506_4 | +| ir.cpp:1506:9:1506:15 | ChiTotal | total:m1505_4 | +| ir.cpp:1506:13:1506:15 | StoreValue | r1506_1 | +| ir.cpp:1507:17:1507:18 | Address | &:r1507_1 | +| ir.cpp:1507:22:1507:22 | Address | &:r1507_2 | +| ir.cpp:1507:22:1507:22 | Load | m1505_12 | +| ir.cpp:1507:22:1507:22 | StoreValue | r1507_4 | +| ir.cpp:1507:22:1507:22 | Unary | r1507_3 | +| ir.cpp:1508:13:1508:13 | Address | &:r1508_1 | +| ir.cpp:1508:17:1508:17 | Address | &:r1508_2 | +| ir.cpp:1508:17:1508:17 | Address | &:r1508_3 | +| ir.cpp:1508:17:1508:17 | Load | m1505_8 | +| ir.cpp:1508:17:1508:17 | Load | ~m1505_4 | +| ir.cpp:1508:17:1508:17 | StoreValue | r1508_4 | +| ir.cpp:1509:9:1509:9 | Address | &:r1509_2 | +| ir.cpp:1509:9:1509:9 | Address | &:r1509_3 | +| ir.cpp:1509:9:1509:9 | Load | m1505_22 | +| ir.cpp:1509:9:1509:13 | ChiPartial | partial:m1509_4 | +| ir.cpp:1509:9:1509:13 | ChiTotal | total:m1502_6 | +| ir.cpp:1509:13:1509:13 | StoreValue | r1509_1 | +| ir.cpp:1510:9:1510:10 | Address | &:r1510_5 | +| ir.cpp:1510:9:1510:14 | ChiPartial | partial:m1510_6 | +| ir.cpp:1510:9:1510:14 | ChiTotal | total:m1509_5 | +| ir.cpp:1510:10:1510:10 | Address | &:r1510_2 | +| ir.cpp:1510:10:1510:10 | Address | &:r1510_3 | +| ir.cpp:1510:10:1510:10 | Load | m1505_26 | +| ir.cpp:1510:10:1510:10 | Load | ~m1505_4 | +| ir.cpp:1510:10:1510:10 | Unary | r1510_4 | +| ir.cpp:1510:14:1510:14 | StoreValue | r1510_1 | +| ir.cpp:1511:14:1511:15 | Address | &:r1511_1 | +| ir.cpp:1511:19:1511:19 | Address | &:r1511_2 | +| ir.cpp:1511:19:1511:19 | Load | m1505_22 | +| ir.cpp:1511:19:1511:19 | StoreValue | r1511_4 | +| ir.cpp:1511:19:1511:19 | Unary | r1511_3 | +| ir.cpp:1512:14:1512:15 | Address | &:r1512_1 | +| ir.cpp:1512:19:1512:20 | StoreValue | r1512_4 | +| ir.cpp:1512:20:1512:20 | Address | &:r1512_2 | +| ir.cpp:1512:20:1512:20 | Load | m1505_22 | +| ir.cpp:1512:20:1512:20 | Unary | r1512_3 | +| ir.cpp:1513:13:1513:13 | Address | &:r1513_1 | +| ir.cpp:1513:17:1513:17 | Address | &:r1513_2 | +| ir.cpp:1513:17:1513:17 | Address | &:r1513_3 | +| ir.cpp:1513:17:1513:17 | Load | m1505_22 | +| ir.cpp:1513:17:1513:17 | Load | ~m1510_7 | +| ir.cpp:1513:17:1513:17 | StoreValue | r1513_4 | +| ir.cpp:1517:14:1517:35 | Address | &:r1517_1 | +| ir.cpp:1517:39:1517:39 | Address | &:r1517_2 | +| ir.cpp:1517:39:1517:39 | Load | m1502_8 | +| ir.cpp:1517:39:1517:39 | StoreValue | r1517_3 | +| ir.cpp:1518:15:1518:15 | Address | &:r1518_1 | +| ir.cpp:1518:19:1518:40 | Unary | r1518_2 | +| ir.cpp:1518:19:1518:42 | StoreValue | r1518_4 | +| ir.cpp:1518:42:1518:42 | Unary | r1518_3 | | ir.cpp:1519:15:1519:15 | Address | &:r1519_1 | | ir.cpp:1519:19:1519:40 | Unary | r1519_2 | -| ir.cpp:1519:19:1519:42 | StoreValue | r1519_6 | -| ir.cpp:1519:19:1519:42 | Unary | r1519_5 | -| ir.cpp:1519:42:1519:42 | Address | &:r1519_3 | -| ir.cpp:1519:42:1519:42 | Load | ~m1515_4 | -| ir.cpp:1519:42:1519:42 | Unary | r1519_4 | -| ir.cpp:1520:15:1520:15 | Address | &:r1520_1 | -| ir.cpp:1520:19:1520:40 | Unary | r1520_2 | -| ir.cpp:1520:19:1520:42 | StoreValue | r1520_4 | -| ir.cpp:1520:42:1520:42 | Unary | r1520_3 | -| ir.cpp:1521:9:1521:9 | Address | &:r1521_2 | -| ir.cpp:1521:9:1521:9 | Address | &:r1521_4 | -| ir.cpp:1521:9:1521:9 | Load | m1517_5 | -| ir.cpp:1521:9:1521:9 | Unary | r1521_3 | -| ir.cpp:1521:9:1521:15 | ChiPartial | partial:m1521_5 | -| ir.cpp:1521:9:1521:15 | ChiTotal | total:m1515_4 | -| ir.cpp:1521:13:1521:15 | StoreValue | r1521_1 | -| ir.cpp:1522:17:1522:18 | Address | &:r1522_1 | -| ir.cpp:1522:22:1522:22 | Address | &:r1522_2 | -| ir.cpp:1522:22:1522:22 | Load | m1517_5 | -| ir.cpp:1522:22:1522:22 | StoreValue | r1522_5 | -| ir.cpp:1522:22:1522:22 | Unary | r1522_3 | -| ir.cpp:1522:22:1522:22 | Unary | r1522_4 | -| ir.cpp:1523:13:1523:13 | Address | &:r1523_1 | -| ir.cpp:1523:17:1523:17 | Address | &:r1523_2 | -| ir.cpp:1523:17:1523:17 | Address | &:r1523_3 | -| ir.cpp:1523:17:1523:17 | Load | m1516_5 | -| ir.cpp:1523:17:1523:17 | Load | ~m1515_4 | -| ir.cpp:1523:17:1523:17 | StoreValue | r1523_4 | -| ir.cpp:1524:9:1524:9 | Address | &:r1524_2 | -| ir.cpp:1524:9:1524:9 | Address | &:r1524_4 | -| ir.cpp:1524:9:1524:9 | Load | m1519_7 | -| ir.cpp:1524:9:1524:9 | Unary | r1524_3 | -| ir.cpp:1524:9:1524:13 | ChiPartial | partial:m1524_5 | -| ir.cpp:1524:9:1524:13 | ChiTotal | total:m1508_7 | -| ir.cpp:1524:13:1524:13 | StoreValue | r1524_1 | -| ir.cpp:1525:9:1525:10 | Address | &:r1525_5 | -| ir.cpp:1525:9:1525:14 | ChiPartial | partial:m1525_6 | -| ir.cpp:1525:9:1525:14 | ChiTotal | total:m1524_6 | -| ir.cpp:1525:10:1525:10 | Address | &:r1525_2 | -| ir.cpp:1525:10:1525:10 | Address | &:r1525_3 | -| ir.cpp:1525:10:1525:10 | Load | m1520_5 | -| ir.cpp:1525:10:1525:10 | Load | ~m1515_4 | -| ir.cpp:1525:10:1525:10 | Unary | r1525_4 | -| ir.cpp:1525:14:1525:14 | StoreValue | r1525_1 | -| ir.cpp:1526:14:1526:15 | Address | &:r1526_1 | -| ir.cpp:1526:19:1526:19 | Address | &:r1526_2 | -| ir.cpp:1526:19:1526:19 | Load | m1519_7 | -| ir.cpp:1526:19:1526:19 | StoreValue | r1526_5 | -| ir.cpp:1526:19:1526:19 | Unary | r1526_3 | -| ir.cpp:1526:19:1526:19 | Unary | r1526_4 | -| ir.cpp:1527:14:1527:15 | Address | &:r1527_1 | -| ir.cpp:1527:19:1527:20 | StoreValue | r1527_5 | -| ir.cpp:1527:20:1527:20 | Address | &:r1527_2 | -| ir.cpp:1527:20:1527:20 | Load | m1519_7 | -| ir.cpp:1527:20:1527:20 | Unary | r1527_3 | -| ir.cpp:1527:20:1527:20 | Unary | r1527_4 | -| ir.cpp:1528:13:1528:13 | Address | &:r1528_1 | -| ir.cpp:1528:17:1528:17 | Address | &:r1528_2 | -| ir.cpp:1528:17:1528:17 | Address | &:r1528_3 | -| ir.cpp:1528:17:1528:17 | Load | m1519_7 | -| ir.cpp:1528:17:1528:17 | Load | ~m1525_7 | -| ir.cpp:1528:17:1528:17 | StoreValue | r1528_4 | -| ir.cpp:1539:8:1539:8 | Address | &:r1539_5 | -| ir.cpp:1539:8:1539:8 | Address | &:r1539_5 | -| ir.cpp:1539:8:1539:8 | Address | &:r1539_5 | -| ir.cpp:1539:8:1539:8 | Address | &:r1539_5 | -| ir.cpp:1539:8:1539:8 | Address | &:r1539_7 | -| ir.cpp:1539:8:1539:8 | Address | &:r1539_7 | -| ir.cpp:1539:8:1539:8 | Address | &:r1539_7 | -| ir.cpp:1539:8:1539:8 | Address | &:r1539_7 | -| ir.cpp:1539:8:1539:8 | Address | &:r1539_9 | -| ir.cpp:1539:8:1539:8 | Address | &:r1539_10 | -| ir.cpp:1539:8:1539:8 | Address | &:r1539_13 | -| ir.cpp:1539:8:1539:8 | Address | &:r1539_17 | -| ir.cpp:1539:8:1539:8 | Address | &:r1539_18 | -| ir.cpp:1539:8:1539:8 | Address | &:r1539_21 | -| ir.cpp:1539:8:1539:8 | Address | &:r1539_25 | -| ir.cpp:1539:8:1539:8 | Address | &:r1539_26 | -| ir.cpp:1539:8:1539:8 | Address | &:r1539_29 | -| ir.cpp:1539:8:1539:8 | ChiPartial | partial:m1539_3 | -| ir.cpp:1539:8:1539:8 | ChiPartial | partial:m1539_3 | -| ir.cpp:1539:8:1539:8 | ChiPartial | partial:m1539_15 | -| ir.cpp:1539:8:1539:8 | ChiPartial | partial:m1539_23 | -| ir.cpp:1539:8:1539:8 | ChiPartial | partial:m1539_31 | -| ir.cpp:1539:8:1539:8 | ChiTotal | total:m1539_2 | -| ir.cpp:1539:8:1539:8 | ChiTotal | total:m1539_2 | -| ir.cpp:1539:8:1539:8 | ChiTotal | total:m1539_8 | -| ir.cpp:1539:8:1539:8 | ChiTotal | total:m1539_16 | -| ir.cpp:1539:8:1539:8 | ChiTotal | total:m1539_24 | -| ir.cpp:1539:8:1539:8 | Load | m0_2 | -| ir.cpp:1539:8:1539:8 | Load | m0_2 | -| ir.cpp:1539:8:1539:8 | Load | m0_2 | -| ir.cpp:1539:8:1539:8 | Load | m1539_6 | -| ir.cpp:1539:8:1539:8 | Load | m1539_6 | -| ir.cpp:1539:8:1539:8 | Load | ~m0_4 | -| ir.cpp:1539:8:1539:8 | Load | ~m0_4 | -| ir.cpp:1539:8:1539:8 | Load | ~m0_4 | -| ir.cpp:1539:8:1539:8 | SideEffect | m1539_3 | -| ir.cpp:1539:8:1539:8 | SideEffect | m1539_3 | -| ir.cpp:1539:8:1539:8 | SideEffect | m1539_8 | -| ir.cpp:1539:8:1539:8 | SideEffect | m1539_32 | -| ir.cpp:1539:8:1539:8 | StoreValue | r1539_14 | -| ir.cpp:1539:8:1539:8 | StoreValue | r1539_22 | -| ir.cpp:1539:8:1539:8 | StoreValue | r1539_30 | -| ir.cpp:1539:8:1539:8 | Unary | m1539_6 | -| ir.cpp:1539:8:1539:8 | Unary | m1539_6 | -| ir.cpp:1539:8:1539:8 | Unary | m1539_6 | -| ir.cpp:1539:8:1539:8 | Unary | r1539_11 | -| ir.cpp:1539:8:1539:8 | Unary | r1539_12 | -| ir.cpp:1539:8:1539:8 | Unary | r1539_19 | -| ir.cpp:1539:8:1539:8 | Unary | r1539_20 | -| ir.cpp:1539:8:1539:8 | Unary | r1539_27 | -| ir.cpp:1539:8:1539:8 | Unary | r1539_28 | -| ir.cpp:1567:60:1567:95 | Address | &:r1567_5 | -| ir.cpp:1567:60:1567:95 | Address | &:r1567_5 | -| ir.cpp:1567:60:1567:95 | Address | &:r1567_7 | -| ir.cpp:1567:60:1567:95 | Address | &:r1567_7 | -| ir.cpp:1567:60:1567:95 | Address | &:r1567_10 | -| ir.cpp:1567:60:1567:95 | ChiPartial | partial:m1567_3 | -| ir.cpp:1567:60:1567:95 | ChiTotal | total:m1567_2 | -| ir.cpp:1567:60:1567:95 | Load | m0_2 | -| ir.cpp:1567:60:1567:95 | Load | m1567_6 | -| ir.cpp:1567:60:1567:95 | SideEffect | m1567_3 | -| ir.cpp:1567:60:1567:95 | SideEffect | m1567_8 | -| ir.cpp:1568:5:1568:13 | Address | &:r1568_1 | -| ir.cpp:1568:12:1568:12 | Address | &:r1568_2 | -| ir.cpp:1568:12:1568:12 | Load | m1567_6 | -| ir.cpp:1568:12:1568:12 | Unary | r1568_3 | -| ir.cpp:1568:12:1568:12 | Unary | r1568_4 | -| ir.cpp:1571:60:1571:95 | Address | &:r1571_5 | -| ir.cpp:1571:60:1571:95 | Address | &:r1571_5 | -| ir.cpp:1571:60:1571:95 | Address | &:r1571_7 | -| ir.cpp:1571:60:1571:95 | Address | &:r1571_7 | -| ir.cpp:1571:60:1571:95 | Address | &:r1571_10 | -| ir.cpp:1571:60:1571:95 | ChiPartial | partial:m1571_3 | -| ir.cpp:1571:60:1571:95 | ChiTotal | total:m1571_2 | -| ir.cpp:1571:60:1571:95 | Load | m0_2 | -| ir.cpp:1571:60:1571:95 | Load | m1571_6 | -| ir.cpp:1571:60:1571:95 | SideEffect | m1571_3 | -| ir.cpp:1571:60:1571:95 | SideEffect | m1571_8 | -| ir.cpp:1572:5:1572:13 | Address | &:r1572_1 | -| ir.cpp:1572:12:1572:12 | Address | &:r1572_2 | -| ir.cpp:1572:12:1572:12 | Load | m1571_6 | -| ir.cpp:1572:12:1572:12 | Unary | r1572_3 | -| ir.cpp:1572:12:1572:12 | Unary | r1572_4 | -| ir.cpp:1575:60:1575:95 | Address | &:r1575_5 | -| ir.cpp:1575:60:1575:95 | Address | &:r1575_5 | -| ir.cpp:1575:60:1575:95 | Address | &:r1575_7 | -| ir.cpp:1575:60:1575:95 | Address | &:r1575_7 | -| ir.cpp:1575:60:1575:95 | Address | &:r1575_10 | -| ir.cpp:1575:60:1575:95 | ChiPartial | partial:m1575_3 | -| ir.cpp:1575:60:1575:95 | ChiTotal | total:m1575_2 | -| ir.cpp:1575:60:1575:95 | Load | m1575_6 | -| ir.cpp:1575:60:1575:95 | Load | m1576_8 | -| ir.cpp:1575:60:1575:95 | SideEffect | m1575_3 | -| ir.cpp:1575:60:1575:95 | SideEffect | m1575_8 | -| ir.cpp:1576:5:1576:13 | Address | &:r1576_1 | -| ir.cpp:1576:12:1576:12 | Address | &:r1576_2 | -| ir.cpp:1576:12:1576:12 | Address | &:r1576_4 | -| ir.cpp:1576:12:1576:12 | Load | m1575_6 | -| ir.cpp:1576:12:1576:12 | Load | ~m1575_8 | -| ir.cpp:1576:12:1576:12 | StoreValue | r1576_7 | -| ir.cpp:1576:12:1576:12 | Unary | r1576_3 | -| ir.cpp:1576:12:1576:12 | Unary | r1576_5 | -| ir.cpp:1576:12:1576:12 | Unary | r1576_6 | -| ir.cpp:1579:6:1579:37 | ChiPartial | partial:m1579_3 | -| ir.cpp:1579:6:1579:37 | ChiTotal | total:m1579_2 | -| ir.cpp:1579:6:1579:37 | SideEffect | ~m1600_6 | -| ir.cpp:1580:34:1580:34 | Address | &:r1580_1 | -| ir.cpp:1580:34:1580:34 | Address | &:r1580_1 | -| ir.cpp:1580:34:1580:34 | Arg(this) | this:r1580_1 | -| ir.cpp:1580:34:1580:34 | CallTarget | func:r1580_3 | -| ir.cpp:1580:34:1580:34 | ChiPartial | partial:m1580_5 | -| ir.cpp:1580:34:1580:34 | ChiPartial | partial:m1580_7 | -| ir.cpp:1580:34:1580:34 | ChiTotal | total:m1579_4 | -| ir.cpp:1580:34:1580:34 | ChiTotal | total:m1580_2 | -| ir.cpp:1580:34:1580:34 | SideEffect | ~m1579_4 | -| ir.cpp:1583:14:1583:14 | Address | &:r1583_1 | -| ir.cpp:1583:14:1583:14 | Address | &:r1583_6 | -| ir.cpp:1583:14:1583:14 | Address | &:r1583_6 | -| ir.cpp:1583:14:1583:14 | Address | &:r1583_18 | -| ir.cpp:1583:14:1583:14 | Address | &:r1583_18 | -| ir.cpp:1583:14:1583:14 | Address | &:r1583_30 | -| ir.cpp:1583:14:1583:14 | Address | &:r1583_30 | -| ir.cpp:1583:14:1583:14 | Arg(this) | this:r1583_6 | -| ir.cpp:1583:14:1583:14 | Arg(this) | this:r1583_18 | -| ir.cpp:1583:14:1583:14 | Arg(this) | this:r1583_30 | -| ir.cpp:1583:14:1583:14 | CallTarget | func:r1583_7 | -| ir.cpp:1583:14:1583:14 | CallTarget | func:r1583_19 | -| ir.cpp:1583:14:1583:14 | CallTarget | func:r1583_31 | -| ir.cpp:1583:14:1583:14 | ChiPartial | partial:m1583_9 | -| ir.cpp:1583:14:1583:14 | ChiPartial | partial:m1583_12 | -| ir.cpp:1583:14:1583:14 | ChiPartial | partial:m1583_21 | -| ir.cpp:1583:14:1583:14 | ChiPartial | partial:m1583_24 | -| ir.cpp:1583:14:1583:14 | ChiPartial | partial:m1583_33 | -| ir.cpp:1583:14:1583:14 | ChiPartial | partial:m1583_36 | -| ir.cpp:1583:14:1583:14 | ChiTotal | total:m1580_6 | -| ir.cpp:1583:14:1583:14 | ChiTotal | total:m1583_4 | -| ir.cpp:1583:14:1583:14 | ChiTotal | total:m1583_10 | -| ir.cpp:1583:14:1583:14 | ChiTotal | total:m1583_13 | -| ir.cpp:1583:14:1583:14 | ChiTotal | total:m1583_22 | -| ir.cpp:1583:14:1583:14 | ChiTotal | total:m1583_25 | -| ir.cpp:1583:14:1583:14 | SideEffect | m1583_4 | -| ir.cpp:1583:14:1583:14 | SideEffect | m1583_13 | -| ir.cpp:1583:14:1583:14 | SideEffect | m1583_25 | -| ir.cpp:1583:14:1583:14 | SideEffect | ~m1580_6 | -| ir.cpp:1583:14:1583:14 | SideEffect | ~m1583_10 | -| ir.cpp:1583:14:1583:14 | SideEffect | ~m1583_22 | -| ir.cpp:1583:14:1583:14 | Unary | r1583_8 | -| ir.cpp:1583:14:1583:14 | Unary | r1583_20 | -| ir.cpp:1583:14:1583:14 | Unary | r1583_32 | -| ir.cpp:1583:14:1583:27 | StoreValue | r1583_15 | -| ir.cpp:1583:14:1583:27 | StoreValue | r1583_27 | -| ir.cpp:1583:14:1583:27 | StoreValue | r1583_39 | -| ir.cpp:1583:14:1583:27 | Unary | r1583_14 | -| ir.cpp:1583:14:1583:27 | Unary | r1583_26 | -| ir.cpp:1583:14:1583:27 | Unary | r1583_38 | -| ir.cpp:1583:15:1583:15 | Address | &:r1583_5 | -| ir.cpp:1583:18:1583:18 | Address | &:r1583_17 | -| ir.cpp:1583:21:1583:21 | Address | &:r1583_29 | -| ir.cpp:1583:26:1583:26 | Address | &:r1583_2 | -| ir.cpp:1583:26:1583:26 | Load | m1580_8 | -| ir.cpp:1583:26:1583:26 | StoreValue | r1583_3 | -| ir.cpp:1584:9:1584:9 | Address | &:r1584_2 | -| ir.cpp:1584:9:1584:9 | Address | &:r1584_4 | -| ir.cpp:1584:9:1584:9 | Load | m1583_28 | -| ir.cpp:1584:9:1584:9 | Unary | r1584_3 | -| ir.cpp:1584:9:1584:15 | ChiPartial | partial:m1584_5 | -| ir.cpp:1584:9:1584:15 | ChiTotal | total:m1583_37 | -| ir.cpp:1584:13:1584:15 | StoreValue | r1584_1 | -| ir.cpp:1585:17:1585:18 | Address | &:r1585_1 | -| ir.cpp:1585:22:1585:22 | Address | &:r1585_2 | -| ir.cpp:1585:22:1585:22 | Load | m1583_28 | -| ir.cpp:1585:22:1585:22 | StoreValue | r1585_5 | -| ir.cpp:1585:22:1585:22 | Unary | r1585_3 | -| ir.cpp:1585:22:1585:22 | Unary | r1585_4 | -| ir.cpp:1586:13:1586:13 | Address | &:r1586_1 | -| ir.cpp:1586:17:1586:17 | Address | &:r1586_2 | -| ir.cpp:1586:17:1586:17 | Address | &:r1586_3 | -| ir.cpp:1586:17:1586:17 | Load | m1583_16 | -| ir.cpp:1586:17:1586:17 | Load | ~m1583_37 | -| ir.cpp:1586:17:1586:17 | StoreValue | r1586_4 | -| ir.cpp:1587:9:1587:9 | Address | &:r1587_2 | -| ir.cpp:1587:9:1587:9 | Address | &:r1587_4 | -| ir.cpp:1587:9:1587:9 | Load | m1583_40 | -| ir.cpp:1587:9:1587:9 | Unary | r1587_3 | -| ir.cpp:1587:9:1587:13 | ChiPartial | partial:m1587_5 | -| ir.cpp:1587:9:1587:13 | ChiTotal | total:m1583_34 | -| ir.cpp:1587:13:1587:13 | StoreValue | r1587_1 | -| ir.cpp:1588:14:1588:15 | Address | &:r1588_1 | -| ir.cpp:1588:19:1588:19 | Address | &:r1588_2 | -| ir.cpp:1588:19:1588:19 | Load | m1583_40 | -| ir.cpp:1588:19:1588:19 | StoreValue | r1588_5 | -| ir.cpp:1588:19:1588:19 | Unary | r1588_3 | -| ir.cpp:1588:19:1588:19 | Unary | r1588_4 | -| ir.cpp:1589:13:1589:13 | Address | &:r1589_1 | -| ir.cpp:1589:17:1589:17 | Address | &:r1589_2 | -| ir.cpp:1589:17:1589:17 | Address | &:r1589_3 | -| ir.cpp:1589:17:1589:17 | Load | m1583_40 | -| ir.cpp:1589:17:1589:17 | Load | ~m1587_6 | -| ir.cpp:1589:17:1589:17 | StoreValue | r1589_4 | -| ir.cpp:1593:14:1593:35 | Address | &:r1593_1 | -| ir.cpp:1593:39:1593:39 | Address | &:r1593_2 | -| ir.cpp:1593:39:1593:39 | Load | m1580_8 | -| ir.cpp:1593:39:1593:39 | StoreValue | r1593_3 | -| ir.cpp:1594:15:1594:15 | Address | &:r1594_1 | -| ir.cpp:1594:19:1594:40 | Address | &:r1594_2 | -| ir.cpp:1594:19:1594:40 | Address | &:r1594_2 | -| ir.cpp:1594:19:1594:40 | Arg(this) | this:r1594_2 | -| ir.cpp:1594:19:1594:40 | ChiPartial | partial:m1594_8 | -| ir.cpp:1594:19:1594:40 | ChiTotal | total:m1593_4 | -| ir.cpp:1594:19:1594:40 | SideEffect | m1593_4 | -| ir.cpp:1594:42:1594:47 | CallTarget | func:r1594_3 | -| ir.cpp:1594:42:1594:47 | ChiPartial | partial:m1594_5 | -| ir.cpp:1594:42:1594:47 | ChiTotal | total:m1587_6 | -| ir.cpp:1594:42:1594:47 | SideEffect | ~m1587_6 | -| ir.cpp:1594:42:1594:47 | Unary | r1594_4 | -| ir.cpp:1594:48:1594:50 | StoreValue | r1594_11 | -| ir.cpp:1594:48:1594:50 | Unary | r1594_10 | -| ir.cpp:1595:15:1595:15 | Address | &:r1595_1 | -| ir.cpp:1595:19:1595:40 | Address | &:r1595_2 | -| ir.cpp:1595:19:1595:40 | Address | &:r1595_2 | -| ir.cpp:1595:19:1595:40 | Arg(this) | this:r1595_2 | -| ir.cpp:1595:19:1595:40 | ChiPartial | partial:m1595_8 | -| ir.cpp:1595:19:1595:40 | ChiTotal | total:m1594_9 | -| ir.cpp:1595:19:1595:40 | SideEffect | m1594_9 | -| ir.cpp:1595:42:1595:47 | CallTarget | func:r1595_3 | -| ir.cpp:1595:42:1595:47 | ChiPartial | partial:m1595_5 | -| ir.cpp:1595:42:1595:47 | ChiTotal | total:m1594_6 | -| ir.cpp:1595:42:1595:47 | SideEffect | ~m1594_6 | -| ir.cpp:1595:42:1595:47 | Unary | r1595_4 | -| ir.cpp:1595:48:1595:50 | StoreValue | r1595_11 | -| ir.cpp:1595:48:1595:50 | Unary | r1595_10 | +| ir.cpp:1519:19:1519:42 | StoreValue | r1519_4 | +| ir.cpp:1519:42:1519:42 | Unary | r1519_3 | +| ir.cpp:1521:15:1521:15 | Address | &:r1521_1 | +| ir.cpp:1521:19:1521:40 | Unary | r1521_2 | +| ir.cpp:1521:19:1521:42 | StoreValue | r1521_6 | +| ir.cpp:1521:19:1521:42 | Unary | r1521_5 | +| ir.cpp:1521:42:1521:42 | Address | &:r1521_3 | +| ir.cpp:1521:42:1521:42 | Load | ~m1517_4 | +| ir.cpp:1521:42:1521:42 | Unary | r1521_4 | +| ir.cpp:1522:15:1522:15 | Address | &:r1522_1 | +| ir.cpp:1522:19:1522:40 | Unary | r1522_2 | +| ir.cpp:1522:19:1522:42 | StoreValue | r1522_4 | +| ir.cpp:1522:42:1522:42 | Unary | r1522_3 | +| ir.cpp:1523:9:1523:9 | Address | &:r1523_2 | +| ir.cpp:1523:9:1523:9 | Address | &:r1523_4 | +| ir.cpp:1523:9:1523:9 | Load | m1519_5 | +| ir.cpp:1523:9:1523:9 | Unary | r1523_3 | +| ir.cpp:1523:9:1523:15 | ChiPartial | partial:m1523_5 | +| ir.cpp:1523:9:1523:15 | ChiTotal | total:m1517_4 | +| ir.cpp:1523:13:1523:15 | StoreValue | r1523_1 | +| ir.cpp:1524:17:1524:18 | Address | &:r1524_1 | +| ir.cpp:1524:22:1524:22 | Address | &:r1524_2 | +| ir.cpp:1524:22:1524:22 | Load | m1519_5 | +| ir.cpp:1524:22:1524:22 | StoreValue | r1524_5 | +| ir.cpp:1524:22:1524:22 | Unary | r1524_3 | +| ir.cpp:1524:22:1524:22 | Unary | r1524_4 | +| ir.cpp:1525:13:1525:13 | Address | &:r1525_1 | +| ir.cpp:1525:17:1525:17 | Address | &:r1525_2 | +| ir.cpp:1525:17:1525:17 | Address | &:r1525_3 | +| ir.cpp:1525:17:1525:17 | Load | m1518_5 | +| ir.cpp:1525:17:1525:17 | Load | ~m1517_4 | +| ir.cpp:1525:17:1525:17 | StoreValue | r1525_4 | +| ir.cpp:1526:9:1526:9 | Address | &:r1526_2 | +| ir.cpp:1526:9:1526:9 | Address | &:r1526_4 | +| ir.cpp:1526:9:1526:9 | Load | m1521_7 | +| ir.cpp:1526:9:1526:9 | Unary | r1526_3 | +| ir.cpp:1526:9:1526:13 | ChiPartial | partial:m1526_5 | +| ir.cpp:1526:9:1526:13 | ChiTotal | total:m1510_7 | +| ir.cpp:1526:13:1526:13 | StoreValue | r1526_1 | +| ir.cpp:1527:9:1527:10 | Address | &:r1527_5 | +| ir.cpp:1527:9:1527:14 | ChiPartial | partial:m1527_6 | +| ir.cpp:1527:9:1527:14 | ChiTotal | total:m1526_6 | +| ir.cpp:1527:10:1527:10 | Address | &:r1527_2 | +| ir.cpp:1527:10:1527:10 | Address | &:r1527_3 | +| ir.cpp:1527:10:1527:10 | Load | m1522_5 | +| ir.cpp:1527:10:1527:10 | Load | ~m1517_4 | +| ir.cpp:1527:10:1527:10 | Unary | r1527_4 | +| ir.cpp:1527:14:1527:14 | StoreValue | r1527_1 | +| ir.cpp:1528:14:1528:15 | Address | &:r1528_1 | +| ir.cpp:1528:19:1528:19 | Address | &:r1528_2 | +| ir.cpp:1528:19:1528:19 | Load | m1521_7 | +| ir.cpp:1528:19:1528:19 | StoreValue | r1528_5 | +| ir.cpp:1528:19:1528:19 | Unary | r1528_3 | +| ir.cpp:1528:19:1528:19 | Unary | r1528_4 | +| ir.cpp:1529:14:1529:15 | Address | &:r1529_1 | +| ir.cpp:1529:19:1529:20 | StoreValue | r1529_5 | +| ir.cpp:1529:20:1529:20 | Address | &:r1529_2 | +| ir.cpp:1529:20:1529:20 | Load | m1521_7 | +| ir.cpp:1529:20:1529:20 | Unary | r1529_3 | +| ir.cpp:1529:20:1529:20 | Unary | r1529_4 | +| ir.cpp:1530:13:1530:13 | Address | &:r1530_1 | +| ir.cpp:1530:17:1530:17 | Address | &:r1530_2 | +| ir.cpp:1530:17:1530:17 | Address | &:r1530_3 | +| ir.cpp:1530:17:1530:17 | Load | m1521_7 | +| ir.cpp:1530:17:1530:17 | Load | ~m1527_7 | +| ir.cpp:1530:17:1530:17 | StoreValue | r1530_4 | +| ir.cpp:1541:8:1541:8 | Address | &:r1541_5 | +| ir.cpp:1541:8:1541:8 | Address | &:r1541_5 | +| ir.cpp:1541:8:1541:8 | Address | &:r1541_5 | +| ir.cpp:1541:8:1541:8 | Address | &:r1541_5 | +| ir.cpp:1541:8:1541:8 | Address | &:r1541_7 | +| ir.cpp:1541:8:1541:8 | Address | &:r1541_7 | +| ir.cpp:1541:8:1541:8 | Address | &:r1541_7 | +| ir.cpp:1541:8:1541:8 | Address | &:r1541_7 | +| ir.cpp:1541:8:1541:8 | Address | &:r1541_9 | +| ir.cpp:1541:8:1541:8 | Address | &:r1541_10 | +| ir.cpp:1541:8:1541:8 | Address | &:r1541_13 | +| ir.cpp:1541:8:1541:8 | Address | &:r1541_17 | +| ir.cpp:1541:8:1541:8 | Address | &:r1541_18 | +| ir.cpp:1541:8:1541:8 | Address | &:r1541_21 | +| ir.cpp:1541:8:1541:8 | Address | &:r1541_25 | +| ir.cpp:1541:8:1541:8 | Address | &:r1541_26 | +| ir.cpp:1541:8:1541:8 | Address | &:r1541_29 | +| ir.cpp:1541:8:1541:8 | ChiPartial | partial:m1541_3 | +| ir.cpp:1541:8:1541:8 | ChiPartial | partial:m1541_3 | +| ir.cpp:1541:8:1541:8 | ChiPartial | partial:m1541_15 | +| ir.cpp:1541:8:1541:8 | ChiPartial | partial:m1541_23 | +| ir.cpp:1541:8:1541:8 | ChiPartial | partial:m1541_31 | +| ir.cpp:1541:8:1541:8 | ChiTotal | total:m1541_2 | +| ir.cpp:1541:8:1541:8 | ChiTotal | total:m1541_2 | +| ir.cpp:1541:8:1541:8 | ChiTotal | total:m1541_8 | +| ir.cpp:1541:8:1541:8 | ChiTotal | total:m1541_16 | +| ir.cpp:1541:8:1541:8 | ChiTotal | total:m1541_24 | +| ir.cpp:1541:8:1541:8 | Load | m0_2 | +| ir.cpp:1541:8:1541:8 | Load | m0_2 | +| ir.cpp:1541:8:1541:8 | Load | m0_2 | +| ir.cpp:1541:8:1541:8 | Load | m1541_6 | +| ir.cpp:1541:8:1541:8 | Load | m1541_6 | +| ir.cpp:1541:8:1541:8 | Load | ~m0_4 | +| ir.cpp:1541:8:1541:8 | Load | ~m0_4 | +| ir.cpp:1541:8:1541:8 | Load | ~m0_4 | +| ir.cpp:1541:8:1541:8 | SideEffect | m1541_3 | +| ir.cpp:1541:8:1541:8 | SideEffect | m1541_3 | +| ir.cpp:1541:8:1541:8 | SideEffect | m1541_8 | +| ir.cpp:1541:8:1541:8 | SideEffect | m1541_32 | +| ir.cpp:1541:8:1541:8 | StoreValue | r1541_14 | +| ir.cpp:1541:8:1541:8 | StoreValue | r1541_22 | +| ir.cpp:1541:8:1541:8 | StoreValue | r1541_30 | +| ir.cpp:1541:8:1541:8 | Unary | m1541_6 | +| ir.cpp:1541:8:1541:8 | Unary | m1541_6 | +| ir.cpp:1541:8:1541:8 | Unary | m1541_6 | +| ir.cpp:1541:8:1541:8 | Unary | r1541_11 | +| ir.cpp:1541:8:1541:8 | Unary | r1541_12 | +| ir.cpp:1541:8:1541:8 | Unary | r1541_19 | +| ir.cpp:1541:8:1541:8 | Unary | r1541_20 | +| ir.cpp:1541:8:1541:8 | Unary | r1541_27 | +| ir.cpp:1541:8:1541:8 | Unary | r1541_28 | +| ir.cpp:1569:60:1569:95 | Address | &:r1569_5 | +| ir.cpp:1569:60:1569:95 | Address | &:r1569_5 | +| ir.cpp:1569:60:1569:95 | Address | &:r1569_7 | +| ir.cpp:1569:60:1569:95 | Address | &:r1569_7 | +| ir.cpp:1569:60:1569:95 | Address | &:r1569_10 | +| ir.cpp:1569:60:1569:95 | ChiPartial | partial:m1569_3 | +| ir.cpp:1569:60:1569:95 | ChiTotal | total:m1569_2 | +| ir.cpp:1569:60:1569:95 | Load | m0_2 | +| ir.cpp:1569:60:1569:95 | Load | m1569_6 | +| ir.cpp:1569:60:1569:95 | SideEffect | m1569_3 | +| ir.cpp:1569:60:1569:95 | SideEffect | m1569_8 | +| ir.cpp:1570:5:1570:13 | Address | &:r1570_1 | +| ir.cpp:1570:12:1570:12 | Address | &:r1570_2 | +| ir.cpp:1570:12:1570:12 | Load | m1569_6 | +| ir.cpp:1570:12:1570:12 | Unary | r1570_3 | +| ir.cpp:1570:12:1570:12 | Unary | r1570_4 | +| ir.cpp:1573:60:1573:95 | Address | &:r1573_5 | +| ir.cpp:1573:60:1573:95 | Address | &:r1573_5 | +| ir.cpp:1573:60:1573:95 | Address | &:r1573_7 | +| ir.cpp:1573:60:1573:95 | Address | &:r1573_7 | +| ir.cpp:1573:60:1573:95 | Address | &:r1573_10 | +| ir.cpp:1573:60:1573:95 | ChiPartial | partial:m1573_3 | +| ir.cpp:1573:60:1573:95 | ChiTotal | total:m1573_2 | +| ir.cpp:1573:60:1573:95 | Load | m0_2 | +| ir.cpp:1573:60:1573:95 | Load | m1573_6 | +| ir.cpp:1573:60:1573:95 | SideEffect | m1573_3 | +| ir.cpp:1573:60:1573:95 | SideEffect | m1573_8 | +| ir.cpp:1574:5:1574:13 | Address | &:r1574_1 | +| ir.cpp:1574:12:1574:12 | Address | &:r1574_2 | +| ir.cpp:1574:12:1574:12 | Load | m1573_6 | +| ir.cpp:1574:12:1574:12 | Unary | r1574_3 | +| ir.cpp:1574:12:1574:12 | Unary | r1574_4 | +| ir.cpp:1577:60:1577:95 | Address | &:r1577_5 | +| ir.cpp:1577:60:1577:95 | Address | &:r1577_5 | +| ir.cpp:1577:60:1577:95 | Address | &:r1577_7 | +| ir.cpp:1577:60:1577:95 | Address | &:r1577_7 | +| ir.cpp:1577:60:1577:95 | Address | &:r1577_10 | +| ir.cpp:1577:60:1577:95 | ChiPartial | partial:m1577_3 | +| ir.cpp:1577:60:1577:95 | ChiTotal | total:m1577_2 | +| ir.cpp:1577:60:1577:95 | Load | m1577_6 | +| ir.cpp:1577:60:1577:95 | Load | m1578_8 | +| ir.cpp:1577:60:1577:95 | SideEffect | m1577_3 | +| ir.cpp:1577:60:1577:95 | SideEffect | m1577_8 | +| ir.cpp:1578:5:1578:13 | Address | &:r1578_1 | +| ir.cpp:1578:12:1578:12 | Address | &:r1578_2 | +| ir.cpp:1578:12:1578:12 | Address | &:r1578_4 | +| ir.cpp:1578:12:1578:12 | Load | m1577_6 | +| ir.cpp:1578:12:1578:12 | Load | ~m1577_8 | +| ir.cpp:1578:12:1578:12 | StoreValue | r1578_7 | +| ir.cpp:1578:12:1578:12 | Unary | r1578_3 | +| ir.cpp:1578:12:1578:12 | Unary | r1578_5 | +| ir.cpp:1578:12:1578:12 | Unary | r1578_6 | +| ir.cpp:1581:6:1581:37 | ChiPartial | partial:m1581_3 | +| ir.cpp:1581:6:1581:37 | ChiTotal | total:m1581_2 | +| ir.cpp:1581:6:1581:37 | SideEffect | ~m1602_6 | +| ir.cpp:1582:34:1582:34 | Address | &:r1582_1 | +| ir.cpp:1582:34:1582:34 | Address | &:r1582_1 | +| ir.cpp:1582:34:1582:34 | Arg(this) | this:r1582_1 | +| ir.cpp:1582:34:1582:34 | CallTarget | func:r1582_3 | +| ir.cpp:1582:34:1582:34 | ChiPartial | partial:m1582_5 | +| ir.cpp:1582:34:1582:34 | ChiPartial | partial:m1582_7 | +| ir.cpp:1582:34:1582:34 | ChiTotal | total:m1581_4 | +| ir.cpp:1582:34:1582:34 | ChiTotal | total:m1582_2 | +| ir.cpp:1582:34:1582:34 | SideEffect | ~m1581_4 | +| ir.cpp:1585:14:1585:14 | Address | &:r1585_1 | +| ir.cpp:1585:14:1585:14 | Address | &:r1585_6 | +| ir.cpp:1585:14:1585:14 | Address | &:r1585_6 | +| ir.cpp:1585:14:1585:14 | Address | &:r1585_18 | +| ir.cpp:1585:14:1585:14 | Address | &:r1585_18 | +| ir.cpp:1585:14:1585:14 | Address | &:r1585_30 | +| ir.cpp:1585:14:1585:14 | Address | &:r1585_30 | +| ir.cpp:1585:14:1585:14 | Arg(this) | this:r1585_6 | +| ir.cpp:1585:14:1585:14 | Arg(this) | this:r1585_18 | +| ir.cpp:1585:14:1585:14 | Arg(this) | this:r1585_30 | +| ir.cpp:1585:14:1585:14 | CallTarget | func:r1585_7 | +| ir.cpp:1585:14:1585:14 | CallTarget | func:r1585_19 | +| ir.cpp:1585:14:1585:14 | CallTarget | func:r1585_31 | +| ir.cpp:1585:14:1585:14 | ChiPartial | partial:m1585_9 | +| ir.cpp:1585:14:1585:14 | ChiPartial | partial:m1585_12 | +| ir.cpp:1585:14:1585:14 | ChiPartial | partial:m1585_21 | +| ir.cpp:1585:14:1585:14 | ChiPartial | partial:m1585_24 | +| ir.cpp:1585:14:1585:14 | ChiPartial | partial:m1585_33 | +| ir.cpp:1585:14:1585:14 | ChiPartial | partial:m1585_36 | +| ir.cpp:1585:14:1585:14 | ChiTotal | total:m1582_6 | +| ir.cpp:1585:14:1585:14 | ChiTotal | total:m1585_4 | +| ir.cpp:1585:14:1585:14 | ChiTotal | total:m1585_10 | +| ir.cpp:1585:14:1585:14 | ChiTotal | total:m1585_13 | +| ir.cpp:1585:14:1585:14 | ChiTotal | total:m1585_22 | +| ir.cpp:1585:14:1585:14 | ChiTotal | total:m1585_25 | +| ir.cpp:1585:14:1585:14 | SideEffect | m1585_4 | +| ir.cpp:1585:14:1585:14 | SideEffect | m1585_13 | +| ir.cpp:1585:14:1585:14 | SideEffect | m1585_25 | +| ir.cpp:1585:14:1585:14 | SideEffect | ~m1582_6 | +| ir.cpp:1585:14:1585:14 | SideEffect | ~m1585_10 | +| ir.cpp:1585:14:1585:14 | SideEffect | ~m1585_22 | +| ir.cpp:1585:14:1585:14 | Unary | r1585_8 | +| ir.cpp:1585:14:1585:14 | Unary | r1585_20 | +| ir.cpp:1585:14:1585:14 | Unary | r1585_32 | +| ir.cpp:1585:14:1585:27 | StoreValue | r1585_15 | +| ir.cpp:1585:14:1585:27 | StoreValue | r1585_27 | +| ir.cpp:1585:14:1585:27 | StoreValue | r1585_39 | +| ir.cpp:1585:14:1585:27 | Unary | r1585_14 | +| ir.cpp:1585:14:1585:27 | Unary | r1585_26 | +| ir.cpp:1585:14:1585:27 | Unary | r1585_38 | +| ir.cpp:1585:15:1585:15 | Address | &:r1585_5 | +| ir.cpp:1585:18:1585:18 | Address | &:r1585_17 | +| ir.cpp:1585:21:1585:21 | Address | &:r1585_29 | +| ir.cpp:1585:26:1585:26 | Address | &:r1585_2 | +| ir.cpp:1585:26:1585:26 | Load | m1582_8 | +| ir.cpp:1585:26:1585:26 | StoreValue | r1585_3 | +| ir.cpp:1586:9:1586:9 | Address | &:r1586_2 | +| ir.cpp:1586:9:1586:9 | Address | &:r1586_4 | +| ir.cpp:1586:9:1586:9 | Load | m1585_28 | +| ir.cpp:1586:9:1586:9 | Unary | r1586_3 | +| ir.cpp:1586:9:1586:15 | ChiPartial | partial:m1586_5 | +| ir.cpp:1586:9:1586:15 | ChiTotal | total:m1585_37 | +| ir.cpp:1586:13:1586:15 | StoreValue | r1586_1 | +| ir.cpp:1587:17:1587:18 | Address | &:r1587_1 | +| ir.cpp:1587:22:1587:22 | Address | &:r1587_2 | +| ir.cpp:1587:22:1587:22 | Load | m1585_28 | +| ir.cpp:1587:22:1587:22 | StoreValue | r1587_5 | +| ir.cpp:1587:22:1587:22 | Unary | r1587_3 | +| ir.cpp:1587:22:1587:22 | Unary | r1587_4 | +| ir.cpp:1588:13:1588:13 | Address | &:r1588_1 | +| ir.cpp:1588:17:1588:17 | Address | &:r1588_2 | +| ir.cpp:1588:17:1588:17 | Address | &:r1588_3 | +| ir.cpp:1588:17:1588:17 | Load | m1585_16 | +| ir.cpp:1588:17:1588:17 | Load | ~m1585_37 | +| ir.cpp:1588:17:1588:17 | StoreValue | r1588_4 | +| ir.cpp:1589:9:1589:9 | Address | &:r1589_2 | +| ir.cpp:1589:9:1589:9 | Address | &:r1589_4 | +| ir.cpp:1589:9:1589:9 | Load | m1585_40 | +| ir.cpp:1589:9:1589:9 | Unary | r1589_3 | +| ir.cpp:1589:9:1589:13 | ChiPartial | partial:m1589_5 | +| ir.cpp:1589:9:1589:13 | ChiTotal | total:m1585_34 | +| ir.cpp:1589:13:1589:13 | StoreValue | r1589_1 | +| ir.cpp:1590:14:1590:15 | Address | &:r1590_1 | +| ir.cpp:1590:19:1590:19 | Address | &:r1590_2 | +| ir.cpp:1590:19:1590:19 | Load | m1585_40 | +| ir.cpp:1590:19:1590:19 | StoreValue | r1590_5 | +| ir.cpp:1590:19:1590:19 | Unary | r1590_3 | +| ir.cpp:1590:19:1590:19 | Unary | r1590_4 | +| ir.cpp:1591:13:1591:13 | Address | &:r1591_1 | +| ir.cpp:1591:17:1591:17 | Address | &:r1591_2 | +| ir.cpp:1591:17:1591:17 | Address | &:r1591_3 | +| ir.cpp:1591:17:1591:17 | Load | m1585_40 | +| ir.cpp:1591:17:1591:17 | Load | ~m1589_6 | +| ir.cpp:1591:17:1591:17 | StoreValue | r1591_4 | +| ir.cpp:1595:14:1595:35 | Address | &:r1595_1 | +| ir.cpp:1595:39:1595:39 | Address | &:r1595_2 | +| ir.cpp:1595:39:1595:39 | Load | m1582_8 | +| ir.cpp:1595:39:1595:39 | StoreValue | r1595_3 | | ir.cpp:1596:15:1596:15 | Address | &:r1596_1 | | ir.cpp:1596:19:1596:40 | Address | &:r1596_2 | | ir.cpp:1596:19:1596:40 | Address | &:r1596_2 | | ir.cpp:1596:19:1596:40 | Arg(this) | this:r1596_2 | | ir.cpp:1596:19:1596:40 | ChiPartial | partial:m1596_8 | -| ir.cpp:1596:19:1596:40 | ChiTotal | total:m1595_9 | -| ir.cpp:1596:19:1596:40 | SideEffect | m1595_9 | +| ir.cpp:1596:19:1596:40 | ChiTotal | total:m1595_4 | +| ir.cpp:1596:19:1596:40 | SideEffect | m1595_4 | | ir.cpp:1596:42:1596:47 | CallTarget | func:r1596_3 | | ir.cpp:1596:42:1596:47 | ChiPartial | partial:m1596_5 | -| ir.cpp:1596:42:1596:47 | ChiTotal | total:m1595_6 | -| ir.cpp:1596:42:1596:47 | SideEffect | ~m1595_6 | +| ir.cpp:1596:42:1596:47 | ChiTotal | total:m1589_6 | +| ir.cpp:1596:42:1596:47 | SideEffect | ~m1589_6 | | ir.cpp:1596:42:1596:47 | Unary | r1596_4 | | ir.cpp:1596:48:1596:50 | StoreValue | r1596_11 | | ir.cpp:1596:48:1596:50 | Unary | r1596_10 | -| ir.cpp:1597:9:1597:9 | Address | &:r1597_2 | -| ir.cpp:1597:9:1597:9 | Address | &:r1597_4 | -| ir.cpp:1597:9:1597:9 | Load | m1595_12 | -| ir.cpp:1597:9:1597:9 | Unary | r1597_3 | -| ir.cpp:1597:9:1597:15 | ChiPartial | partial:m1597_5 | -| ir.cpp:1597:9:1597:15 | ChiTotal | total:m1596_9 | -| ir.cpp:1597:13:1597:15 | StoreValue | r1597_1 | -| ir.cpp:1598:17:1598:18 | Address | &:r1598_1 | -| ir.cpp:1598:22:1598:22 | Address | &:r1598_2 | -| ir.cpp:1598:22:1598:22 | Load | m1595_12 | -| ir.cpp:1598:22:1598:22 | StoreValue | r1598_5 | -| ir.cpp:1598:22:1598:22 | Unary | r1598_3 | -| ir.cpp:1598:22:1598:22 | Unary | r1598_4 | -| ir.cpp:1599:13:1599:13 | Address | &:r1599_1 | -| ir.cpp:1599:17:1599:17 | Address | &:r1599_2 | -| ir.cpp:1599:17:1599:17 | Address | &:r1599_3 | -| ir.cpp:1599:17:1599:17 | Load | m1594_12 | -| ir.cpp:1599:17:1599:17 | Load | ~m1596_9 | -| ir.cpp:1599:17:1599:17 | StoreValue | r1599_4 | -| ir.cpp:1600:9:1600:9 | Address | &:r1600_2 | -| ir.cpp:1600:9:1600:9 | Address | &:r1600_4 | -| ir.cpp:1600:9:1600:9 | Load | m1596_12 | -| ir.cpp:1600:9:1600:9 | Unary | r1600_3 | -| ir.cpp:1600:9:1600:13 | ChiPartial | partial:m1600_5 | -| ir.cpp:1600:9:1600:13 | ChiTotal | total:m1596_6 | -| ir.cpp:1600:13:1600:13 | StoreValue | r1600_1 | -| ir.cpp:1601:14:1601:15 | Address | &:r1601_1 | -| ir.cpp:1601:19:1601:19 | Address | &:r1601_2 | -| ir.cpp:1601:19:1601:19 | Load | m1596_12 | -| ir.cpp:1601:19:1601:19 | StoreValue | r1601_5 | -| ir.cpp:1601:19:1601:19 | Unary | r1601_3 | -| ir.cpp:1601:19:1601:19 | Unary | r1601_4 | -| ir.cpp:1602:13:1602:13 | Address | &:r1602_1 | -| ir.cpp:1602:17:1602:17 | Address | &:r1602_2 | -| ir.cpp:1602:17:1602:17 | Address | &:r1602_3 | -| ir.cpp:1602:17:1602:17 | Load | m1596_12 | -| ir.cpp:1602:17:1602:17 | Load | ~m1600_6 | -| ir.cpp:1602:17:1602:17 | StoreValue | r1602_4 | -| ir.cpp:1606:8:1606:8 | Address | &:r1606_5 | -| ir.cpp:1606:8:1606:8 | Address | &:r1606_5 | -| ir.cpp:1606:8:1606:8 | Address | &:r1606_7 | -| ir.cpp:1606:8:1606:8 | Address | &:r1606_7 | -| ir.cpp:1606:8:1606:8 | ChiPartial | partial:m1606_3 | -| ir.cpp:1606:8:1606:8 | ChiTotal | total:m1606_2 | -| ir.cpp:1606:8:1606:8 | Load | m1606_6 | -| ir.cpp:1606:8:1606:8 | SideEffect | m1606_3 | -| ir.cpp:1606:8:1606:8 | SideEffect | m1606_8 | -| ir.cpp:1633:61:1633:98 | Address | &:r1633_5 | -| ir.cpp:1633:61:1633:98 | Address | &:r1633_5 | -| ir.cpp:1633:61:1633:98 | Address | &:r1633_7 | -| ir.cpp:1633:61:1633:98 | Address | &:r1633_7 | -| ir.cpp:1633:61:1633:98 | Address | &:r1633_10 | -| ir.cpp:1633:61:1633:98 | ChiPartial | partial:m1633_3 | -| ir.cpp:1633:61:1633:98 | ChiTotal | total:m1633_2 | -| ir.cpp:1633:61:1633:98 | Load | m1633_6 | -| ir.cpp:1633:61:1633:98 | Load | m1634_6 | -| ir.cpp:1633:61:1633:98 | SideEffect | m1633_3 | -| ir.cpp:1633:61:1633:98 | SideEffect | m1633_8 | -| ir.cpp:1634:5:1634:13 | Address | &:r1634_1 | -| ir.cpp:1634:12:1634:12 | Address | &:r1634_2 | -| ir.cpp:1634:12:1634:12 | Address | &:r1634_4 | -| ir.cpp:1634:12:1634:12 | Load | m1633_6 | -| ir.cpp:1634:12:1634:12 | Load | ~m1633_8 | -| ir.cpp:1634:12:1634:12 | StoreValue | r1634_5 | -| ir.cpp:1634:12:1634:12 | Unary | r1634_3 | -| ir.cpp:1637:61:1637:98 | Address | &:r1637_5 | -| ir.cpp:1637:61:1637:98 | Address | &:r1637_5 | -| ir.cpp:1637:61:1637:98 | Address | &:r1637_7 | -| ir.cpp:1637:61:1637:98 | Address | &:r1637_7 | -| ir.cpp:1637:61:1637:98 | Address | &:r1637_10 | -| ir.cpp:1637:61:1637:98 | ChiPartial | partial:m1637_3 | -| ir.cpp:1637:61:1637:98 | ChiTotal | total:m1637_2 | -| ir.cpp:1637:61:1637:98 | Load | m1637_6 | -| ir.cpp:1637:61:1637:98 | Load | m1638_8 | -| ir.cpp:1637:61:1637:98 | SideEffect | m1637_3 | -| ir.cpp:1637:61:1637:98 | SideEffect | m1637_8 | -| ir.cpp:1638:5:1638:13 | Address | &:r1638_1 | -| ir.cpp:1638:12:1638:12 | Address | &:r1638_2 | -| ir.cpp:1638:12:1638:12 | Address | &:r1638_4 | -| ir.cpp:1638:12:1638:12 | Load | m1637_6 | -| ir.cpp:1638:12:1638:12 | Load | ~m1637_8 | -| ir.cpp:1638:12:1638:12 | StoreValue | r1638_7 | -| ir.cpp:1638:12:1638:12 | Unary | r1638_3 | -| ir.cpp:1638:12:1638:12 | Unary | r1638_5 | -| ir.cpp:1638:12:1638:12 | Unary | r1638_6 | -| ir.cpp:1641:61:1641:98 | Address | &:r1641_5 | -| ir.cpp:1641:61:1641:98 | Address | &:r1641_5 | -| ir.cpp:1641:61:1641:98 | Address | &:r1641_7 | -| ir.cpp:1641:61:1641:98 | Address | &:r1641_7 | -| ir.cpp:1641:61:1641:98 | Address | &:r1641_10 | -| ir.cpp:1641:61:1641:98 | ChiPartial | partial:m1641_3 | -| ir.cpp:1641:61:1641:98 | ChiTotal | total:m1641_2 | -| ir.cpp:1641:61:1641:98 | Load | m1641_6 | -| ir.cpp:1641:61:1641:98 | Load | m1642_6 | -| ir.cpp:1641:61:1641:98 | SideEffect | m1641_3 | -| ir.cpp:1641:61:1641:98 | SideEffect | m1641_8 | -| ir.cpp:1642:5:1642:13 | Address | &:r1642_1 | -| ir.cpp:1642:12:1642:12 | Address | &:r1642_2 | -| ir.cpp:1642:12:1642:12 | StoreValue | r1642_3 | -| ir.cpp:1642:12:1642:12 | StoreValue | r1642_5 | -| ir.cpp:1642:12:1642:12 | Unary | r1642_2 | -| ir.cpp:1645:6:1645:40 | ChiPartial | partial:m1645_3 | -| ir.cpp:1645:6:1645:40 | ChiTotal | total:m1645_2 | -| ir.cpp:1645:6:1645:40 | SideEffect | ~m1666_6 | -| ir.cpp:1646:36:1646:36 | Address | &:r1646_1 | -| ir.cpp:1646:36:1646:36 | Address | &:r1646_1 | -| ir.cpp:1646:36:1646:36 | Arg(this) | this:r1646_1 | -| ir.cpp:1646:36:1646:36 | CallTarget | func:r1646_3 | -| ir.cpp:1646:36:1646:36 | ChiPartial | partial:m1646_5 | -| ir.cpp:1646:36:1646:36 | ChiPartial | partial:m1646_7 | -| ir.cpp:1646:36:1646:36 | ChiTotal | total:m1645_4 | -| ir.cpp:1646:36:1646:36 | ChiTotal | total:m1646_2 | -| ir.cpp:1646:36:1646:36 | SideEffect | ~m1645_4 | -| ir.cpp:1649:16:1649:16 | Address | &:r1649_1 | -| ir.cpp:1649:16:1649:16 | Address | &:r1649_7 | -| ir.cpp:1649:16:1649:16 | Address | &:r1649_21 | -| ir.cpp:1649:16:1649:16 | Address | &:r1649_35 | -| ir.cpp:1649:16:1649:16 | CallTarget | func:r1649_10 | -| ir.cpp:1649:16:1649:16 | CallTarget | func:r1649_24 | -| ir.cpp:1649:16:1649:16 | CallTarget | func:r1649_38 | -| ir.cpp:1649:16:1649:16 | ChiPartial | partial:m1649_12 | -| ir.cpp:1649:16:1649:16 | ChiPartial | partial:m1649_26 | -| ir.cpp:1649:16:1649:16 | ChiPartial | partial:m1649_40 | -| ir.cpp:1649:16:1649:16 | ChiTotal | total:m1646_6 | -| ir.cpp:1649:16:1649:16 | ChiTotal | total:m1649_13 | -| ir.cpp:1649:16:1649:16 | ChiTotal | total:m1649_27 | -| ir.cpp:1649:16:1649:16 | Load | m1649_4 | -| ir.cpp:1649:16:1649:16 | Load | m1649_4 | -| ir.cpp:1649:16:1649:16 | Load | m1649_4 | -| ir.cpp:1649:16:1649:16 | SideEffect | ~m1646_6 | -| ir.cpp:1649:16:1649:16 | SideEffect | ~m1649_13 | -| ir.cpp:1649:16:1649:16 | SideEffect | ~m1649_27 | -| ir.cpp:1649:16:1649:16 | StoreValue | r1649_11 | -| ir.cpp:1649:16:1649:16 | Unary | r1649_8 | -| ir.cpp:1649:16:1649:16 | Unary | r1649_22 | -| ir.cpp:1649:16:1649:16 | Unary | r1649_25 | -| ir.cpp:1649:16:1649:16 | Unary | r1649_36 | -| ir.cpp:1649:16:1649:16 | Unary | r1649_39 | -| ir.cpp:1649:16:1649:30 | Address | &:r1649_6 | -| ir.cpp:1649:16:1649:30 | StoreValue | r1649_18 | -| ir.cpp:1649:16:1649:30 | StoreValue | r1649_32 | -| ir.cpp:1649:16:1649:30 | StoreValue | r1649_46 | -| ir.cpp:1649:16:1649:30 | Unary | r1649_6 | -| ir.cpp:1649:16:1649:30 | Unary | r1649_31 | -| ir.cpp:1649:16:1649:30 | Unary | r1649_45 | -| ir.cpp:1649:17:1649:17 | Address | &:r1649_5 | -| ir.cpp:1649:20:1649:20 | Address | &:r1649_20 | -| ir.cpp:1649:23:1649:23 | Address | &:r1649_34 | -| ir.cpp:1649:29:1649:29 | StoreValue | r1649_3 | -| ir.cpp:1649:29:1649:29 | Unary | r1649_2 | -| ir.cpp:1649:30:1649:30 | Address | &:r1649_9 | -| ir.cpp:1649:30:1649:30 | Address | &:r1649_9 | -| ir.cpp:1649:30:1649:30 | Address | &:r1649_23 | -| ir.cpp:1649:30:1649:30 | Address | &:r1649_23 | -| ir.cpp:1649:30:1649:30 | Address | &:r1649_37 | -| ir.cpp:1649:30:1649:30 | Address | &:r1649_37 | -| ir.cpp:1649:30:1649:30 | Arg(this) | this:r1649_9 | -| ir.cpp:1649:30:1649:30 | Arg(this) | this:r1649_23 | -| ir.cpp:1649:30:1649:30 | Arg(this) | this:r1649_37 | -| ir.cpp:1649:30:1649:30 | ChiPartial | partial:m1649_15 | -| ir.cpp:1649:30:1649:30 | ChiPartial | partial:m1649_29 | -| ir.cpp:1649:30:1649:30 | ChiPartial | partial:m1649_43 | -| ir.cpp:1649:30:1649:30 | ChiTotal | total:m1646_8 | -| ir.cpp:1649:30:1649:30 | ChiTotal | total:m1649_16 | -| ir.cpp:1649:30:1649:30 | ChiTotal | total:m1649_30 | -| ir.cpp:1649:30:1649:30 | SideEffect | m1646_8 | -| ir.cpp:1649:30:1649:30 | SideEffect | m1649_16 | -| ir.cpp:1649:30:1649:30 | SideEffect | m1649_30 | -| ir.cpp:1650:9:1650:9 | Address | &:r1650_2 | -| ir.cpp:1650:9:1650:9 | Address | &:r1650_4 | -| ir.cpp:1650:9:1650:9 | Load | m1649_19 | -| ir.cpp:1650:9:1650:9 | Unary | r1650_3 | -| ir.cpp:1650:13:1650:13 | StoreValue | r1650_1 | -| ir.cpp:1651:14:1651:15 | Address | &:r1651_1 | -| ir.cpp:1651:19:1651:19 | Address | &:r1651_2 | -| ir.cpp:1651:19:1651:19 | Load | m1649_19 | -| ir.cpp:1651:19:1651:19 | StoreValue | r1651_5 | -| ir.cpp:1651:19:1651:19 | Unary | r1651_3 | -| ir.cpp:1651:19:1651:19 | Unary | r1651_4 | -| ir.cpp:1652:13:1652:13 | Address | &:r1652_1 | -| ir.cpp:1652:17:1652:17 | Address | &:r1652_2 | -| ir.cpp:1652:17:1652:17 | Address | &:r1652_3 | -| ir.cpp:1652:17:1652:17 | Load | m1649_19 | -| ir.cpp:1652:17:1652:17 | Load | m1650_5 | -| ir.cpp:1652:17:1652:17 | StoreValue | r1652_4 | -| ir.cpp:1653:9:1653:9 | Address | &:r1653_2 | -| ir.cpp:1653:9:1653:9 | Address | &:r1653_4 | -| ir.cpp:1653:9:1653:9 | Load | m1649_33 | -| ir.cpp:1653:9:1653:9 | Unary | r1653_3 | -| ir.cpp:1653:9:1653:13 | ChiPartial | partial:m1653_5 | -| ir.cpp:1653:9:1653:13 | ChiTotal | total:m1649_41 | -| ir.cpp:1653:13:1653:13 | StoreValue | r1653_1 | -| ir.cpp:1654:14:1654:15 | Address | &:r1654_1 | -| ir.cpp:1654:19:1654:19 | Address | &:r1654_2 | -| ir.cpp:1654:19:1654:19 | Load | m1649_33 | -| ir.cpp:1654:19:1654:19 | StoreValue | r1654_5 | -| ir.cpp:1654:19:1654:19 | Unary | r1654_3 | -| ir.cpp:1654:19:1654:19 | Unary | r1654_4 | -| ir.cpp:1655:13:1655:13 | Address | &:r1655_1 | -| ir.cpp:1655:17:1655:17 | Address | &:r1655_2 | -| ir.cpp:1655:17:1655:17 | Address | &:r1655_3 | -| ir.cpp:1655:17:1655:17 | Load | m1649_33 | -| ir.cpp:1655:17:1655:17 | Load | ~m1653_6 | -| ir.cpp:1655:17:1655:17 | StoreValue | r1655_4 | -| ir.cpp:1659:16:1659:37 | Address | &:r1659_1 | -| ir.cpp:1659:41:1659:41 | StoreValue | r1659_3 | -| ir.cpp:1659:41:1659:41 | Unary | r1659_2 | -| ir.cpp:1660:16:1660:16 | Address | &:r1660_1 | -| ir.cpp:1660:20:1660:41 | Address | &:r1660_3 | -| ir.cpp:1660:20:1660:41 | Address | &:r1660_5 | -| ir.cpp:1660:20:1660:41 | Address | &:r1660_5 | -| ir.cpp:1660:20:1660:41 | Arg(this) | this:r1660_5 | -| ir.cpp:1660:20:1660:41 | ChiPartial | partial:m1660_11 | -| ir.cpp:1660:20:1660:41 | ChiTotal | total:m1649_44 | -| ir.cpp:1660:20:1660:41 | Load | m1659_4 | -| ir.cpp:1660:20:1660:41 | SideEffect | m1649_44 | -| ir.cpp:1660:20:1660:41 | Unary | r1660_4 | -| ir.cpp:1660:20:1660:50 | Address | &:r1660_2 | -| ir.cpp:1660:20:1660:50 | StoreValue | r1660_14 | -| ir.cpp:1660:20:1660:50 | Unary | r1660_2 | -| ir.cpp:1660:43:1660:48 | CallTarget | func:r1660_6 | -| ir.cpp:1660:43:1660:48 | ChiPartial | partial:m1660_8 | -| ir.cpp:1660:43:1660:48 | ChiTotal | total:m1653_6 | -| ir.cpp:1660:43:1660:48 | SideEffect | ~m1653_6 | -| ir.cpp:1660:43:1660:48 | StoreValue | r1660_7 | -| ir.cpp:1661:15:1661:15 | Address | &:r1661_1 | -| ir.cpp:1661:19:1661:40 | Address | &:r1661_2 | -| ir.cpp:1661:19:1661:40 | Address | &:r1661_4 | -| ir.cpp:1661:19:1661:40 | Address | &:r1661_4 | -| ir.cpp:1661:19:1661:40 | Arg(this) | this:r1661_4 | -| ir.cpp:1661:19:1661:40 | ChiPartial | partial:m1661_10 | -| ir.cpp:1661:19:1661:40 | ChiTotal | total:m1660_12 | -| ir.cpp:1661:19:1661:40 | Load | m1659_4 | -| ir.cpp:1661:19:1661:40 | SideEffect | m1660_12 | -| ir.cpp:1661:19:1661:40 | Unary | r1661_3 | -| ir.cpp:1661:42:1661:47 | CallTarget | func:r1661_5 | -| ir.cpp:1661:42:1661:47 | ChiPartial | partial:m1661_7 | -| ir.cpp:1661:42:1661:47 | ChiTotal | total:m1660_9 | -| ir.cpp:1661:42:1661:47 | SideEffect | ~m1660_9 | -| ir.cpp:1661:42:1661:47 | Unary | r1661_6 | -| ir.cpp:1661:48:1661:50 | StoreValue | r1661_13 | -| ir.cpp:1661:48:1661:50 | Unary | r1661_12 | -| ir.cpp:1662:16:1662:17 | Address | &:r1662_1 | -| ir.cpp:1662:21:1662:42 | Address | &:r1662_2 | -| ir.cpp:1662:21:1662:42 | Address | &:r1662_4 | -| ir.cpp:1662:21:1662:42 | Address | &:r1662_4 | -| ir.cpp:1662:21:1662:42 | Arg(this) | this:r1662_4 | -| ir.cpp:1662:21:1662:42 | ChiPartial | partial:m1662_10 | -| ir.cpp:1662:21:1662:42 | ChiTotal | total:m1661_11 | -| ir.cpp:1662:21:1662:42 | Load | m1659_4 | -| ir.cpp:1662:21:1662:42 | SideEffect | m1661_11 | -| ir.cpp:1662:21:1662:42 | Unary | r1662_3 | -| ir.cpp:1662:44:1662:49 | CallTarget | func:r1662_5 | -| ir.cpp:1662:44:1662:49 | ChiPartial | partial:m1662_7 | -| ir.cpp:1662:44:1662:49 | ChiTotal | total:m1661_8 | -| ir.cpp:1662:44:1662:49 | SideEffect | ~m1661_8 | -| ir.cpp:1662:44:1662:49 | Unary | r1662_6 | -| ir.cpp:1662:50:1662:52 | StoreValue | r1662_13 | -| ir.cpp:1662:50:1662:52 | Unary | r1662_12 | -| ir.cpp:1663:9:1663:9 | Address | &:r1663_2 | -| ir.cpp:1663:9:1663:9 | Address | &:r1663_4 | -| ir.cpp:1663:9:1663:9 | Load | m1660_15 | -| ir.cpp:1663:9:1663:9 | Unary | r1663_3 | -| ir.cpp:1663:13:1663:13 | StoreValue | r1663_1 | -| ir.cpp:1664:14:1664:15 | Address | &:r1664_1 | -| ir.cpp:1664:19:1664:19 | Address | &:r1664_2 | -| ir.cpp:1664:19:1664:19 | Load | m1660_15 | -| ir.cpp:1664:19:1664:19 | StoreValue | r1664_5 | -| ir.cpp:1664:19:1664:19 | Unary | r1664_3 | -| ir.cpp:1664:19:1664:19 | Unary | r1664_4 | -| ir.cpp:1665:13:1665:13 | Address | &:r1665_1 | -| ir.cpp:1665:17:1665:17 | Address | &:r1665_2 | -| ir.cpp:1665:17:1665:17 | Address | &:r1665_3 | -| ir.cpp:1665:17:1665:17 | Load | m1660_15 | -| ir.cpp:1665:17:1665:17 | Load | m1663_5 | -| ir.cpp:1665:17:1665:17 | StoreValue | r1665_4 | -| ir.cpp:1666:9:1666:9 | Address | &:r1666_2 | -| ir.cpp:1666:9:1666:9 | Address | &:r1666_4 | -| ir.cpp:1666:9:1666:9 | Load | m1661_14 | -| ir.cpp:1666:9:1666:9 | Unary | r1666_3 | -| ir.cpp:1666:9:1666:13 | ChiPartial | partial:m1666_5 | -| ir.cpp:1666:9:1666:13 | ChiTotal | total:m1662_8 | -| ir.cpp:1666:13:1666:13 | StoreValue | r1666_1 | -| ir.cpp:1667:14:1667:15 | Address | &:r1667_1 | -| ir.cpp:1667:19:1667:19 | Address | &:r1667_2 | -| ir.cpp:1667:19:1667:19 | Load | m1661_14 | -| ir.cpp:1667:19:1667:19 | StoreValue | r1667_5 | -| ir.cpp:1667:19:1667:19 | Unary | r1667_3 | -| ir.cpp:1667:19:1667:19 | Unary | r1667_4 | -| ir.cpp:1668:13:1668:13 | Address | &:r1668_1 | -| ir.cpp:1668:17:1668:17 | Address | &:r1668_2 | -| ir.cpp:1668:17:1668:17 | Address | &:r1668_3 | -| ir.cpp:1668:17:1668:17 | Load | m1661_14 | -| ir.cpp:1668:17:1668:17 | Load | ~m1666_6 | -| ir.cpp:1668:17:1668:17 | StoreValue | r1668_4 | -| ir.cpp:1672:6:1672:42 | ChiPartial | partial:m1672_3 | -| ir.cpp:1672:6:1672:42 | ChiTotal | total:m1672_2 | -| ir.cpp:1672:6:1672:42 | SideEffect | m1672_3 | -| ir.cpp:1673:9:1673:10 | Address | &:r1673_1 | -| ir.cpp:1673:9:1673:10 | Left | r1673_1 | -| ir.cpp:1673:9:1673:10 | Left | r1673_1 | -| ir.cpp:1673:16:1673:22 | Address | &:r1673_4 | -| ir.cpp:1673:16:1673:22 | Address | &:r1673_9 | -| ir.cpp:1673:16:1673:22 | Right | r1673_3 | -| ir.cpp:1673:16:1673:22 | Right | r1673_8 | -| ir.cpp:1673:18:1673:18 | ChiPartial | partial:m1673_6 | -| ir.cpp:1673:18:1673:18 | ChiTotal | total:m1673_2 | -| ir.cpp:1673:18:1673:18 | StoreValue | r1673_5 | -| ir.cpp:1673:21:1673:21 | ChiPartial | partial:m1673_11 | -| ir.cpp:1673:21:1673:21 | ChiTotal | total:m1673_7 | -| ir.cpp:1673:21:1673:21 | StoreValue | r1673_10 | -| ir.cpp:1674:10:1674:10 | Address | &:r1674_1 | -| ir.cpp:1674:11:1674:11 | Address | &:r1674_5 | -| ir.cpp:1674:15:1674:15 | Address | &:r1674_6 | -| ir.cpp:1674:21:1674:22 | Address | &:r1674_2 | -| ir.cpp:1674:21:1674:22 | Load | m1673_12 | -| ir.cpp:1674:21:1674:22 | StoreValue | r1674_3 | -| ir.cpp:1680:5:1680:23 | Address | &:r1680_5 | -| ir.cpp:1680:5:1680:23 | Address | &:r1680_5 | -| ir.cpp:1680:5:1680:23 | Address | &:r1680_7 | -| ir.cpp:1680:5:1680:23 | Address | &:r1680_7 | -| ir.cpp:1680:5:1680:23 | ChiPartial | partial:m1680_3 | -| ir.cpp:1680:5:1680:23 | ChiTotal | total:m1680_2 | -| ir.cpp:1680:5:1680:23 | Load | m1680_6 | -| ir.cpp:1680:5:1680:23 | SideEffect | m1680_3 | -| ir.cpp:1680:5:1680:23 | SideEffect | m1680_8 | -| ir.cpp:1683:6:1683:20 | ChiPartial | partial:m1683_3 | -| ir.cpp:1683:6:1683:20 | ChiTotal | total:m1683_2 | -| ir.cpp:1683:6:1683:20 | SideEffect | ~m1686_6 | -| ir.cpp:1683:26:1683:26 | Address | &:r1683_5 | -| ir.cpp:1683:34:1683:34 | Address | &:r1683_7 | -| ir.cpp:1683:34:1683:34 | Address | &:r1683_7 | -| ir.cpp:1683:34:1683:34 | Address | &:r1683_9 | -| ir.cpp:1683:34:1683:34 | Address | &:r1683_9 | -| ir.cpp:1683:34:1683:34 | Load | m1683_8 | -| ir.cpp:1683:34:1683:34 | SideEffect | m1683_10 | -| ir.cpp:1683:43:1683:43 | Address | &:r1683_11 | -| ir.cpp:1683:43:1683:43 | Address | &:r1683_11 | -| ir.cpp:1683:43:1683:43 | Address | &:r1683_13 | -| ir.cpp:1683:43:1683:43 | Address | &:r1683_13 | -| ir.cpp:1683:43:1683:43 | Load | m1683_12 | -| ir.cpp:1683:43:1683:43 | SideEffect | m1683_14 | -| ir.cpp:1685:17:1685:20 | Address | &:r1685_1 | -| ir.cpp:1685:24:1685:44 | Address | &:r1685_2 | -| ir.cpp:1685:24:1685:44 | Address | &:r1685_2 | -| ir.cpp:1685:24:1685:44 | Arg(this) | this:r1685_2 | -| ir.cpp:1685:24:1685:44 | CallTarget | func:r1685_4 | -| ir.cpp:1685:24:1685:44 | ChiPartial | partial:m1685_6 | -| ir.cpp:1685:24:1685:44 | ChiPartial | partial:m1685_8 | -| ir.cpp:1685:24:1685:44 | ChiTotal | total:m1683_4 | -| ir.cpp:1685:24:1685:44 | ChiTotal | total:m1685_3 | -| ir.cpp:1685:24:1685:44 | SideEffect | ~m1683_4 | -| ir.cpp:1685:24:1685:44 | StoreValue | r1685_11 | -| ir.cpp:1685:24:1685:44 | Unary | r1685_2 | -| ir.cpp:1685:24:1685:44 | Unary | r1685_10 | -| ir.cpp:1686:10:1686:13 | Address | &:r1686_1 | -| ir.cpp:1686:10:1686:13 | Address | &:r1686_1 | -| ir.cpp:1686:10:1686:13 | Arg(this) | this:r1686_1 | -| ir.cpp:1686:16:1686:37 | CallTarget | func:r1686_3 | -| ir.cpp:1686:16:1686:37 | ChiPartial | partial:m1686_5 | -| ir.cpp:1686:16:1686:37 | ChiPartial | partial:m1686_7 | -| ir.cpp:1686:16:1686:37 | ChiTotal | total:m1685_7 | -| ir.cpp:1686:16:1686:37 | ChiTotal | total:m1686_2 | -| ir.cpp:1686:16:1686:37 | SideEffect | ~m1685_7 | -| ir.cpp:1688:10:1688:21 | Address | &:r1688_1 | -| ir.cpp:1688:24:1690:5 | Address | &:r1688_2 | -| ir.cpp:1688:24:1690:5 | Address | &:r1688_2 | -| ir.cpp:1688:24:1690:5 | Address | &:r1688_4 | -| ir.cpp:1688:24:1690:5 | Address | &:r1688_5 | -| ir.cpp:1688:24:1690:5 | Address | &:r1688_6 | -| ir.cpp:1688:24:1690:5 | Address | &:r1688_7 | -| ir.cpp:1688:24:1690:5 | Address | &:r1688_8 | -| ir.cpp:1688:24:1690:5 | Address | &:r1688_12 | -| ir.cpp:1688:24:1690:5 | Address | &:r1688_17 | -| ir.cpp:1688:24:1690:5 | Address | &:r1688_20 | -| ir.cpp:1688:24:1690:5 | ChiPartial | partial:m1688_10 | -| ir.cpp:1688:24:1690:5 | ChiTotal | total:m0_3 | -| ir.cpp:1688:24:1690:5 | Load | m1685_12 | -| ir.cpp:1688:24:1690:5 | Load | m1686_8 | -| ir.cpp:1688:24:1690:5 | Load | m1690_6 | -| ir.cpp:1688:24:1690:5 | StoreValue | r1688_9 | -| ir.cpp:1688:24:1690:5 | StoreValue | r1688_23 | -| ir.cpp:1688:24:1690:5 | Unary | r1688_2 | -| ir.cpp:1688:24:1690:5 | Unary | r1688_2 | -| ir.cpp:1688:24:1690:5 | Unary | r1688_2 | -| ir.cpp:1688:24:1690:5 | Unary | r1688_2 | -| ir.cpp:1688:24:1690:5 | Unary | r1688_2 | -| ir.cpp:1688:38:1688:38 | Address | &:r1688_13 | -| ir.cpp:1688:38:1688:38 | ChiPartial | partial:m1688_15 | -| ir.cpp:1688:38:1688:38 | ChiTotal | total:m1688_11 | -| ir.cpp:1688:38:1688:38 | Load | m1683_6 | -| ir.cpp:1688:38:1688:38 | StoreValue | r1688_14 | -| ir.cpp:1688:41:1688:41 | Address | &:r1688_18 | -| ir.cpp:1688:41:1688:41 | Address | &:r1688_19 | -| ir.cpp:1688:41:1688:41 | Load | m1683_8 | -| ir.cpp:1688:44:1688:44 | Address | &:r1688_21 | -| ir.cpp:1688:44:1688:44 | Address | &:r1688_22 | -| ir.cpp:1688:44:1688:44 | Load | m1683_12 | -| ir.cpp:1688:46:1688:46 | Address | &:r1688_5 | -| ir.cpp:1688:46:1688:46 | Address | &:r1688_5 | -| ir.cpp:1688:46:1688:46 | Address | &:r1688_7 | -| ir.cpp:1688:46:1688:46 | Address | &:r1688_7 | -| ir.cpp:1688:46:1688:46 | ChiPartial | partial:m1688_3 | -| ir.cpp:1688:46:1688:46 | ChiTotal | total:m1688_2 | -| ir.cpp:1688:46:1688:46 | Load | m1688_6 | -| ir.cpp:1688:46:1688:46 | SideEffect | m1688_3 | -| ir.cpp:1688:46:1688:46 | SideEffect | m1688_8 | -| ir.cpp:1689:14:1689:25 | Address | &:r1689_1 | -| ir.cpp:1689:28:1689:54 | Address | &:r1689_2 | -| ir.cpp:1689:28:1689:54 | Address | &:r1689_2 | -| ir.cpp:1689:28:1689:54 | Address | &:r1689_4 | -| ir.cpp:1689:28:1689:54 | Address | &:r1689_5 | -| ir.cpp:1689:28:1689:54 | Address | &:r1689_7 | -| ir.cpp:1689:28:1689:54 | Address | &:r1689_11 | -| ir.cpp:1689:28:1689:54 | Address | &:r1689_12 | -| ir.cpp:1689:28:1689:54 | Address | &:r1689_14 | -| ir.cpp:1689:28:1689:54 | Address | &:r1689_18 | -| ir.cpp:1689:28:1689:54 | Address | &:r1689_19 | -| ir.cpp:1689:28:1689:54 | Address | &:r1689_21 | -| ir.cpp:1689:28:1689:54 | Address | &:r1689_25 | -| ir.cpp:1689:28:1689:54 | Address | &:r1689_26 | -| ir.cpp:1689:28:1689:54 | Address | &:r1689_28 | -| ir.cpp:1689:28:1689:54 | Address | &:r1689_32 | -| ir.cpp:1689:28:1689:54 | Address | &:r1689_33 | -| ir.cpp:1689:28:1689:54 | Address | &:r1689_35 | -| ir.cpp:1689:28:1689:54 | ChiPartial | partial:m1689_9 | -| ir.cpp:1689:28:1689:54 | ChiPartial | partial:m1689_16 | -| ir.cpp:1689:28:1689:54 | ChiPartial | partial:m1689_23 | -| ir.cpp:1689:28:1689:54 | ChiPartial | partial:m1689_30 | -| ir.cpp:1689:28:1689:54 | ChiPartial | partial:m1689_37 | -| ir.cpp:1689:28:1689:54 | ChiTotal | total:m1689_3 | -| ir.cpp:1689:28:1689:54 | ChiTotal | total:m1689_10 | -| ir.cpp:1689:28:1689:54 | ChiTotal | total:m1689_17 | -| ir.cpp:1689:28:1689:54 | ChiTotal | total:m1689_24 | -| ir.cpp:1689:28:1689:54 | ChiTotal | total:m1689_31 | -| ir.cpp:1689:28:1689:54 | Load | m1688_6 | -| ir.cpp:1689:28:1689:54 | Load | m1688_6 | -| ir.cpp:1689:28:1689:54 | Load | m1688_6 | -| ir.cpp:1689:28:1689:54 | Load | m1688_6 | -| ir.cpp:1689:28:1689:54 | Load | m1688_6 | -| ir.cpp:1689:28:1689:54 | Load | m1689_38 | -| ir.cpp:1689:28:1689:54 | Load | ~m1688_8 | -| ir.cpp:1689:28:1689:54 | Load | ~m1688_8 | -| ir.cpp:1689:28:1689:54 | Load | ~m1688_8 | -| ir.cpp:1689:28:1689:54 | Load | ~m1688_8 | -| ir.cpp:1689:28:1689:54 | Load | ~m1688_8 | -| ir.cpp:1689:28:1689:54 | StoreValue | r1689_8 | -| ir.cpp:1689:28:1689:54 | StoreValue | r1689_15 | -| ir.cpp:1689:28:1689:54 | StoreValue | r1689_22 | -| ir.cpp:1689:28:1689:54 | StoreValue | r1689_29 | -| ir.cpp:1689:28:1689:54 | StoreValue | r1689_36 | -| ir.cpp:1689:28:1689:54 | StoreValue | r1689_39 | -| ir.cpp:1689:28:1689:54 | Unary | r1689_2 | -| ir.cpp:1689:28:1689:54 | Unary | r1689_2 | -| ir.cpp:1689:28:1689:54 | Unary | r1689_2 | -| ir.cpp:1689:28:1689:54 | Unary | r1689_2 | -| ir.cpp:1689:28:1689:54 | Unary | r1689_2 | -| ir.cpp:1689:28:1689:54 | Unary | r1689_6 | -| ir.cpp:1689:28:1689:54 | Unary | r1689_13 | -| ir.cpp:1689:28:1689:54 | Unary | r1689_20 | -| ir.cpp:1689:28:1689:54 | Unary | r1689_27 | -| ir.cpp:1689:28:1689:54 | Unary | r1689_34 | -| ir.cpp:1689:50:1689:50 | Address | &:r1689_5 | -| ir.cpp:1689:50:1689:50 | Address | &:r1689_5 | -| ir.cpp:1689:50:1689:50 | Address | &:r1689_7 | -| ir.cpp:1689:50:1689:50 | Address | &:r1689_7 | -| ir.cpp:1689:50:1689:50 | ChiPartial | partial:m1689_3 | -| ir.cpp:1689:50:1689:50 | ChiTotal | total:m1689_2 | -| ir.cpp:1689:50:1689:50 | Load | m1689_6 | -| ir.cpp:1689:50:1689:50 | SideEffect | m1689_3 | -| ir.cpp:1689:50:1689:50 | SideEffect | m1689_8 | -| ir.cpp:1690:6:1690:6 | ChiPartial | partial:m1690_2 | -| ir.cpp:1690:6:1690:6 | ChiPartial | partial:m1690_5 | -| ir.cpp:1690:6:1690:6 | ChiTotal | total:m1688_16 | -| ir.cpp:1690:6:1690:6 | ChiTotal | total:m1690_3 | -| ir.cpp:1690:6:1690:6 | Load | ~m1683_10 | -| ir.cpp:1690:6:1690:6 | Load | ~m1683_14 | -| ir.cpp:1690:6:1690:6 | StoreValue | r1690_1 | -| ir.cpp:1690:6:1690:6 | StoreValue | r1690_4 | -| ir.cpp:1693:5:1693:21 | Address | &:r1693_5 | -| ir.cpp:1693:5:1693:21 | ChiPartial | partial:m1693_3 | -| ir.cpp:1693:5:1693:21 | ChiTotal | total:m1693_2 | -| ir.cpp:1693:5:1693:21 | Load | m1696_4 | -| ir.cpp:1693:5:1693:21 | SideEffect | m1693_3 | -| ir.cpp:1694:7:1694:7 | Address | &:r1694_1 | -| ir.cpp:1694:10:1694:12 | StoreValue | r1694_2 | -| ir.cpp:1696:3:1696:11 | Address | &:r1696_1 | -| ir.cpp:1696:10:1696:10 | Address | &:r1696_2 | -| ir.cpp:1696:10:1696:10 | Load | m1694_3 | -| ir.cpp:1696:10:1696:10 | StoreValue | r1696_3 | -| ir.cpp:1701:10:1701:10 | Address | &:r1701_5 | -| ir.cpp:1701:10:1701:10 | Address | &:r1701_5 | -| ir.cpp:1701:10:1701:10 | Address | &:r1701_7 | -| ir.cpp:1701:10:1701:10 | Address | &:r1701_7 | -| ir.cpp:1701:10:1701:10 | ChiPartial | partial:m1701_3 | -| ir.cpp:1701:10:1701:10 | ChiTotal | total:m1701_2 | -| ir.cpp:1701:10:1701:10 | Load | m1701_6 | -| ir.cpp:1701:10:1701:10 | SideEffect | m1701_3 | -| ir.cpp:1701:10:1701:10 | SideEffect | m1701_8 | -| ir.cpp:1702:14:1702:22 | Address | &:r1702_1 | -| ir.cpp:1702:25:1708:9 | Address | &:r1702_2 | -| ir.cpp:1702:25:1708:9 | Address | &:r1702_2 | -| ir.cpp:1702:25:1708:9 | Address | &:r1702_4 | -| ir.cpp:1702:25:1708:9 | Address | &:r1702_5 | -| ir.cpp:1702:25:1708:9 | Address | &:r1702_6 | -| ir.cpp:1702:25:1708:9 | Load | m1701_6 | -| ir.cpp:1702:25:1708:9 | Load | ~m1701_8 | -| ir.cpp:1702:25:1708:9 | Load | ~m1702_8 | -| ir.cpp:1702:25:1708:9 | StoreValue | r1702_7 | -| ir.cpp:1702:25:1708:9 | StoreValue | r1702_9 | -| ir.cpp:1702:25:1708:9 | Unary | r1702_2 | -| ir.cpp:1702:34:1702:34 | Address | &:r1702_5 | -| ir.cpp:1702:34:1702:34 | Address | &:r1702_5 | -| ir.cpp:1702:34:1702:34 | Address | &:r1702_7 | -| ir.cpp:1702:34:1702:34 | Address | &:r1702_7 | -| ir.cpp:1702:34:1702:34 | ChiPartial | partial:m1702_3 | -| ir.cpp:1702:34:1702:34 | ChiTotal | total:m1702_2 | -| ir.cpp:1702:34:1702:34 | Load | m1702_6 | -| ir.cpp:1702:34:1702:34 | SideEffect | m1702_8 | -| ir.cpp:1702:34:1702:34 | SideEffect | ~m1703_8 | -| ir.cpp:1703:13:1703:13 | Address | &:r1703_1 | -| ir.cpp:1703:13:1703:13 | Address | &:r1703_4 | -| ir.cpp:1703:13:1703:13 | Arg(this) | this:r1703_4 | -| ir.cpp:1703:13:1703:13 | CallTarget | func:r1703_5 | -| ir.cpp:1703:13:1703:13 | ChiPartial | partial:m1703_7 | -| ir.cpp:1703:13:1703:13 | ChiTotal | total:m1702_4 | -| ir.cpp:1703:13:1703:13 | Load | m1702_6 | -| ir.cpp:1703:13:1703:13 | SideEffect | ~m1702_4 | -| ir.cpp:1703:13:1703:13 | SideEffect | ~m1702_8 | -| ir.cpp:1703:13:1703:13 | Unary | r1703_2 | -| ir.cpp:1703:13:1703:13 | Unary | r1703_3 | -| ir.cpp:1705:18:1705:26 | Address | &:r1705_1 | -| ir.cpp:1705:29:1707:13 | Address | &:r1705_2 | -| ir.cpp:1705:29:1707:13 | Address | &:r1705_2 | -| ir.cpp:1705:29:1707:13 | Address | &:r1705_4 | -| ir.cpp:1705:29:1707:13 | Address | &:r1705_5 | -| ir.cpp:1705:29:1707:13 | Address | &:r1705_7 | -| ir.cpp:1705:29:1707:13 | Load | m1702_6 | -| ir.cpp:1705:29:1707:13 | Load | ~m1702_8 | -| ir.cpp:1705:29:1707:13 | Load | ~m1705_9 | -| ir.cpp:1705:29:1707:13 | StoreValue | r1705_8 | -| ir.cpp:1705:29:1707:13 | StoreValue | r1705_10 | -| ir.cpp:1705:29:1707:13 | Unary | r1705_2 | -| ir.cpp:1705:29:1707:13 | Unary | r1705_6 | -| ir.cpp:1705:38:1705:38 | Address | &:r1705_5 | -| ir.cpp:1705:38:1705:38 | Address | &:r1705_5 | -| ir.cpp:1705:38:1705:38 | Address | &:r1705_7 | -| ir.cpp:1705:38:1705:38 | Address | &:r1705_7 | -| ir.cpp:1705:38:1705:38 | ChiPartial | partial:m1705_3 | -| ir.cpp:1705:38:1705:38 | ChiTotal | total:m1705_2 | -| ir.cpp:1705:38:1705:38 | Load | m1705_6 | -| ir.cpp:1705:38:1705:38 | SideEffect | m1705_8 | -| ir.cpp:1705:38:1705:38 | SideEffect | ~m1706_8 | -| ir.cpp:1706:17:1706:17 | Address | &:r1706_1 | -| ir.cpp:1706:17:1706:17 | Address | &:r1706_4 | -| ir.cpp:1706:17:1706:17 | Arg(this) | this:r1706_4 | -| ir.cpp:1706:17:1706:17 | CallTarget | func:r1706_5 | -| ir.cpp:1706:17:1706:17 | ChiPartial | partial:m1706_7 | -| ir.cpp:1706:17:1706:17 | ChiTotal | total:m1705_4 | -| ir.cpp:1706:17:1706:17 | Load | m1705_6 | -| ir.cpp:1706:17:1706:17 | SideEffect | ~m1705_4 | -| ir.cpp:1706:17:1706:17 | SideEffect | ~m1705_8 | -| ir.cpp:1706:17:1706:17 | Unary | r1706_2 | -| ir.cpp:1706:17:1706:17 | Unary | r1706_3 | -| ir.cpp:1712:6:1712:21 | ChiPartial | partial:m1712_3 | -| ir.cpp:1712:6:1712:21 | ChiTotal | total:m1712_2 | -| ir.cpp:1712:6:1712:21 | SideEffect | m1712_3 | -| ir.cpp:1712:42:1712:43 | Address | &:r1712_5 | -| ir.cpp:1712:66:1712:67 | Address | &:r1712_7 | -| ir.cpp:1712:66:1712:67 | Address | &:r1712_7 | -| ir.cpp:1712:66:1712:67 | Address | &:r1712_9 | -| ir.cpp:1712:66:1712:67 | Address | &:r1712_9 | -| ir.cpp:1712:66:1712:67 | Load | m1712_8 | -| ir.cpp:1712:66:1712:67 | SideEffect | m1712_10 | -| ir.cpp:1712:91:1712:92 | Address | &:r1712_11 | -| ir.cpp:1712:91:1712:92 | Address | &:r1712_11 | -| ir.cpp:1712:91:1712:92 | Address | &:r1712_13 | -| ir.cpp:1712:91:1712:92 | Address | &:r1712_13 | -| ir.cpp:1712:91:1712:92 | Load | m1712_12 | -| ir.cpp:1712:91:1712:92 | SideEffect | m1712_14 | -| ir.cpp:1713:30:1713:31 | Address | &:r1713_1 | -| ir.cpp:1714:31:1714:32 | Address | &:r1714_1 | -| ir.cpp:1714:36:1714:55 | Address | &:r1714_2 | -| ir.cpp:1714:36:1714:55 | StoreValue | r1714_3 | -| ir.cpp:1714:36:1714:55 | StoreValue | r1714_6 | -| ir.cpp:1714:36:1714:55 | Unary | r1714_2 | -| ir.cpp:1714:36:1714:55 | Unary | r1714_5 | -| ir.cpp:1716:10:1716:17 | Address | &:r1716_1 | -| ir.cpp:1716:20:1718:5 | Address | &:r1716_2 | -| ir.cpp:1716:20:1718:5 | Address | &:r1716_2 | -| ir.cpp:1716:20:1718:5 | Address | &:r1716_4 | -| ir.cpp:1716:20:1718:5 | Address | &:r1716_5 | -| ir.cpp:1716:20:1718:5 | Address | &:r1716_9 | -| ir.cpp:1716:20:1718:5 | Address | &:r1716_10 | -| ir.cpp:1716:20:1718:5 | Address | &:r1716_11 | -| ir.cpp:1716:20:1718:5 | Address | &:r1716_12 | -| ir.cpp:1716:20:1718:5 | Address | &:r1716_13 | -| ir.cpp:1716:20:1718:5 | Address | &:r1716_14 | -| ir.cpp:1716:20:1718:5 | Address | &:r1716_15 | -| ir.cpp:1716:20:1718:5 | Address | &:r1716_16 | -| ir.cpp:1716:20:1718:5 | Address | &:r1716_20 | -| ir.cpp:1716:20:1718:5 | Address | &:r1716_21 | -| ir.cpp:1716:20:1718:5 | Address | &:r1716_22 | -| ir.cpp:1716:20:1718:5 | ChiPartial | partial:m1716_7 | -| ir.cpp:1716:20:1718:5 | ChiPartial | partial:m1716_18 | -| ir.cpp:1716:20:1718:5 | ChiTotal | total:m0_6 | -| ir.cpp:1716:20:1718:5 | ChiTotal | total:m1716_3 | -| ir.cpp:1716:20:1718:5 | Load | m0_9 | -| ir.cpp:1716:20:1718:5 | Load | m1712_6 | -| ir.cpp:1716:20:1718:5 | Load | m1712_8 | -| ir.cpp:1716:20:1718:5 | Load | m1712_12 | -| ir.cpp:1716:20:1718:5 | Load | m1713_2 | -| ir.cpp:1716:20:1718:5 | Load | m1714_7 | -| ir.cpp:1716:20:1718:5 | StoreValue | r1716_6 | -| ir.cpp:1716:20:1718:5 | StoreValue | r1716_17 | -| ir.cpp:1716:20:1718:5 | StoreValue | r1716_23 | -| ir.cpp:1716:20:1718:5 | Unary | r1716_2 | -| ir.cpp:1716:20:1718:5 | Unary | r1716_2 | -| ir.cpp:1716:20:1718:5 | Unary | r1716_2 | -| ir.cpp:1716:20:1718:5 | Unary | r1716_2 | -| ir.cpp:1716:20:1718:5 | Unary | r1716_2 | -| ir.cpp:1716:42:1716:42 | Address | &:r1716_5 | -| ir.cpp:1716:42:1716:42 | Address | &:r1716_5 | -| ir.cpp:1716:42:1716:42 | Address | &:r1716_7 | -| ir.cpp:1716:42:1716:42 | Address | &:r1716_7 | -| ir.cpp:1716:42:1716:42 | ChiPartial | partial:m1716_3 | -| ir.cpp:1716:42:1716:42 | ChiTotal | total:m1716_2 | -| ir.cpp:1716:42:1716:42 | Load | m1716_6 | -| ir.cpp:1716:42:1716:42 | SideEffect | m1716_3 | -| ir.cpp:1716:42:1716:42 | SideEffect | m1716_8 | -| ir.cpp:1717:14:1717:21 | Address | &:r1717_1 | -| ir.cpp:1717:24:1717:31 | Address | &:r1717_2 | -| ir.cpp:1717:24:1717:31 | Address | &:r1717_2 | -| ir.cpp:1717:24:1717:31 | Address | &:r1717_4 | -| ir.cpp:1717:24:1717:31 | Address | &:r1717_5 | -| ir.cpp:1717:24:1717:31 | Address | &:r1717_7 | -| ir.cpp:1717:24:1717:31 | Load | m1716_6 | -| ir.cpp:1717:24:1717:31 | Load | ~m1716_8 | -| ir.cpp:1717:24:1717:31 | Load | ~m1717_9 | -| ir.cpp:1717:24:1717:31 | StoreValue | r1717_8 | -| ir.cpp:1717:24:1717:31 | StoreValue | r1717_10 | -| ir.cpp:1717:24:1717:31 | Unary | r1717_2 | -| ir.cpp:1717:24:1717:31 | Unary | r1717_6 | -| ir.cpp:1717:30:1717:30 | Address | &:r1717_5 | -| ir.cpp:1717:30:1717:30 | Address | &:r1717_5 | -| ir.cpp:1717:30:1717:30 | Address | &:r1717_7 | -| ir.cpp:1717:30:1717:30 | Address | &:r1717_7 | -| ir.cpp:1717:30:1717:30 | ChiPartial | partial:m1717_3 | -| ir.cpp:1717:30:1717:30 | ChiTotal | total:m1717_2 | -| ir.cpp:1717:30:1717:30 | Load | m1717_6 | -| ir.cpp:1717:30:1717:30 | SideEffect | m1717_3 | -| ir.cpp:1717:30:1717:30 | SideEffect | m1717_8 | -| ir.cpp:1724:5:1724:44 | Address | &:r1724_5 | -| ir.cpp:1724:5:1724:44 | Address | &:r1724_5 | -| ir.cpp:1724:5:1724:44 | Address | &:r1724_7 | -| ir.cpp:1724:5:1724:44 | Address | &:r1724_7 | -| ir.cpp:1724:5:1724:44 | ChiPartial | partial:m1724_3 | -| ir.cpp:1724:5:1724:44 | ChiTotal | total:m1724_2 | -| ir.cpp:1724:5:1724:44 | Load | m1724_6 | -| ir.cpp:1724:5:1724:44 | SideEffect | m1724_3 | -| ir.cpp:1724:5:1724:44 | SideEffect | m1724_8 | -| ir.cpp:1725:5:1725:44 | Address | &:r1725_5 | -| ir.cpp:1725:5:1725:44 | Address | &:r1725_5 | -| ir.cpp:1725:5:1725:44 | Address | &:r1725_7 | -| ir.cpp:1725:5:1725:44 | Address | &:r1725_7 | -| ir.cpp:1725:5:1725:44 | ChiPartial | partial:m1725_3 | -| ir.cpp:1725:5:1725:44 | ChiTotal | total:m1725_2 | -| ir.cpp:1725:5:1725:44 | Load | m1725_6 | -| ir.cpp:1725:5:1725:44 | SideEffect | m1725_3 | -| ir.cpp:1725:5:1725:44 | SideEffect | m1726_10 | -| ir.cpp:1725:94:1725:94 | Address | &:r1725_9 | -| ir.cpp:1725:94:1725:94 | Address | &:r1725_9 | -| ir.cpp:1725:94:1725:94 | Address | &:r1725_11 | -| ir.cpp:1725:94:1725:94 | Address | &:r1725_11 | -| ir.cpp:1725:94:1725:94 | Load | m1725_10 | -| ir.cpp:1725:94:1725:94 | SideEffect | m1725_12 | -| ir.cpp:1726:9:1726:9 | Address | &:r1726_6 | -| ir.cpp:1726:9:1726:9 | Address | &:r1726_8 | -| ir.cpp:1726:9:1726:9 | Load | m1725_6 | -| ir.cpp:1726:9:1726:9 | Unary | r1726_7 | -| ir.cpp:1726:9:1726:15 | ChiPartial | partial:m1726_9 | -| ir.cpp:1726:9:1726:15 | ChiTotal | total:m1725_8 | -| ir.cpp:1726:13:1726:13 | Address | &:r1726_1 | -| ir.cpp:1726:13:1726:13 | Load | m1725_10 | -| ir.cpp:1726:13:1726:13 | Unary | r1726_2 | -| ir.cpp:1726:13:1726:13 | Unary | r1726_3 | -| ir.cpp:1726:15:1726:15 | Address | &:r1726_4 | -| ir.cpp:1726:15:1726:15 | Load | ~m1725_12 | -| ir.cpp:1726:15:1726:15 | StoreValue | r1726_5 | -| ir.cpp:1733:5:1733:39 | Address | &:r1733_5 | -| ir.cpp:1733:5:1733:39 | Address | &:r1733_5 | -| ir.cpp:1733:5:1733:39 | Address | &:r1733_7 | -| ir.cpp:1733:5:1733:39 | Address | &:r1733_7 | -| ir.cpp:1733:5:1733:39 | ChiPartial | partial:m1733_3 | -| ir.cpp:1733:5:1733:39 | ChiTotal | total:m1733_2 | -| ir.cpp:1733:5:1733:39 | Load | m1733_6 | -| ir.cpp:1733:5:1733:39 | SideEffect | m1733_3 | -| ir.cpp:1733:5:1733:39 | SideEffect | m1733_8 | -| ir.cpp:1736:7:1736:7 | Address | &:r1736_5 | -| ir.cpp:1736:7:1736:7 | Address | &:r1736_5 | -| ir.cpp:1736:7:1736:7 | Address | &:r1736_7 | -| ir.cpp:1736:7:1736:7 | Address | &:r1736_7 | -| ir.cpp:1736:7:1736:7 | Address | &:r1736_9 | -| ir.cpp:1736:7:1736:7 | Address | &:r1736_11 | -| ir.cpp:1736:7:1736:7 | Address | &:r1736_15 | -| ir.cpp:1736:7:1736:7 | Arg(0) | 0:r1736_15 | -| ir.cpp:1736:7:1736:7 | Arg(this) | this:r1736_9 | -| ir.cpp:1736:7:1736:7 | CallTarget | func:r1736_10 | -| ir.cpp:1736:7:1736:7 | ChiPartial | partial:m1736_3 | -| ir.cpp:1736:7:1736:7 | ChiPartial | partial:m1736_17 | -| ir.cpp:1736:7:1736:7 | ChiPartial | partial:m1736_20 | -| ir.cpp:1736:7:1736:7 | ChiTotal | total:m1736_2 | -| ir.cpp:1736:7:1736:7 | ChiTotal | total:m1736_4 | -| ir.cpp:1736:7:1736:7 | ChiTotal | total:m1736_8 | -| ir.cpp:1736:7:1736:7 | Load | m0_2 | -| ir.cpp:1736:7:1736:7 | Load | m1736_6 | -| ir.cpp:1736:7:1736:7 | SideEffect | m1736_21 | -| ir.cpp:1736:7:1736:7 | SideEffect | ~m0_4 | -| ir.cpp:1736:7:1736:7 | SideEffect | ~m1736_4 | -| ir.cpp:1736:7:1736:7 | SideEffect | ~m1736_18 | -| ir.cpp:1736:7:1736:7 | Unary | m1736_6 | -| ir.cpp:1736:7:1736:7 | Unary | r1736_12 | -| ir.cpp:1736:7:1736:7 | Unary | r1736_13 | -| ir.cpp:1736:7:1736:7 | Unary | r1736_14 | -| ir.cpp:1740:5:1740:38 | Address | &:r1740_5 | -| ir.cpp:1740:5:1740:38 | Address | &:r1740_5 | -| ir.cpp:1740:5:1740:38 | Address | &:r1740_7 | -| ir.cpp:1740:5:1740:38 | Address | &:r1740_7 | -| ir.cpp:1740:5:1740:38 | ChiPartial | partial:m1740_3 | -| ir.cpp:1740:5:1740:38 | ChiTotal | total:m1740_2 | -| ir.cpp:1740:5:1740:38 | Load | m1740_6 | -| ir.cpp:1740:5:1740:38 | SideEffect | m1740_22 | -| ir.cpp:1740:5:1740:38 | SideEffect | ~m1740_20 | -| ir.cpp:1740:5:1740:38 | Unary | m1740_6 | -| ir.cpp:1740:5:1740:38 | Unary | m1740_6 | -| ir.cpp:1740:42:1740:42 | Address | &:r1740_9 | -| ir.cpp:1740:42:1740:42 | Address | &:r1740_16 | -| ir.cpp:1740:42:1740:42 | Arg(this) | this:r1740_9 | -| ir.cpp:1740:42:1740:42 | Arg(this) | this:r1740_16 | -| ir.cpp:1740:42:1740:42 | CallTarget | func:r1740_10 | -| ir.cpp:1740:42:1740:42 | CallTarget | func:r1740_17 | -| ir.cpp:1740:42:1740:42 | ChiPartial | partial:m1740_12 | -| ir.cpp:1740:42:1740:42 | ChiPartial | partial:m1740_14 | -| ir.cpp:1740:42:1740:42 | ChiPartial | partial:m1740_19 | -| ir.cpp:1740:42:1740:42 | ChiPartial | partial:m1740_21 | -| ir.cpp:1740:42:1740:42 | ChiTotal | total:m1740_4 | -| ir.cpp:1740:42:1740:42 | ChiTotal | total:m1740_8 | -| ir.cpp:1740:42:1740:42 | ChiTotal | total:m1740_13 | -| ir.cpp:1740:42:1740:42 | ChiTotal | total:m1740_15 | -| ir.cpp:1740:42:1740:42 | SideEffect | ~m1740_4 | -| ir.cpp:1740:42:1740:42 | SideEffect | ~m1740_13 | -| ir.cpp:1743:7:1743:7 | Address | &:r1743_5 | -| ir.cpp:1743:7:1743:7 | Address | &:r1743_5 | -| ir.cpp:1743:7:1743:7 | Address | &:r1743_7 | -| ir.cpp:1743:7:1743:7 | Address | &:r1743_7 | -| ir.cpp:1743:7:1743:7 | Address | &:r1743_9 | -| ir.cpp:1743:7:1743:7 | Address | &:r1743_11 | -| ir.cpp:1743:7:1743:7 | Address | &:r1743_15 | -| ir.cpp:1743:7:1743:7 | Arg(0) | 0:r1743_15 | -| ir.cpp:1743:7:1743:7 | Arg(this) | this:r1743_9 | -| ir.cpp:1743:7:1743:7 | CallTarget | func:r1743_10 | -| ir.cpp:1743:7:1743:7 | ChiPartial | partial:m1743_3 | -| ir.cpp:1743:7:1743:7 | ChiPartial | partial:m1743_17 | -| ir.cpp:1743:7:1743:7 | ChiPartial | partial:m1743_20 | -| ir.cpp:1743:7:1743:7 | ChiTotal | total:m1743_2 | -| ir.cpp:1743:7:1743:7 | ChiTotal | total:m1743_4 | -| ir.cpp:1743:7:1743:7 | ChiTotal | total:m1743_18 | -| ir.cpp:1743:7:1743:7 | Load | m0_2 | -| ir.cpp:1743:7:1743:7 | Load | m1743_6 | -| ir.cpp:1743:7:1743:7 | SideEffect | m1743_8 | -| ir.cpp:1743:7:1743:7 | SideEffect | ~m0_4 | -| ir.cpp:1743:7:1743:7 | SideEffect | ~m1743_4 | -| ir.cpp:1743:7:1743:7 | SideEffect | ~m1743_21 | -| ir.cpp:1743:7:1743:7 | Unary | m1743_6 | -| ir.cpp:1743:7:1743:7 | Unary | r1743_12 | -| ir.cpp:1743:7:1743:7 | Unary | r1743_13 | -| ir.cpp:1743:7:1743:7 | Unary | r1743_14 | -| ir.cpp:1747:5:1747:35 | Address | &:r1747_5 | -| ir.cpp:1747:5:1747:35 | Address | &:r1747_5 | -| ir.cpp:1747:5:1747:35 | Address | &:r1747_7 | -| ir.cpp:1747:5:1747:35 | Address | &:r1747_7 | -| ir.cpp:1747:5:1747:35 | ChiPartial | partial:m1747_3 | -| ir.cpp:1747:5:1747:35 | ChiTotal | total:m1747_2 | -| ir.cpp:1747:5:1747:35 | Load | m1747_6 | -| ir.cpp:1747:5:1747:35 | SideEffect | m1747_8 | -| ir.cpp:1747:5:1747:35 | SideEffect | ~m1747_22 | -| ir.cpp:1747:5:1747:35 | Unary | m1747_6 | -| ir.cpp:1747:5:1747:35 | Unary | m1747_6 | -| ir.cpp:1747:39:1747:39 | Address | &:r1747_9 | -| ir.cpp:1747:39:1747:39 | Address | &:r1747_16 | -| ir.cpp:1747:39:1747:39 | Arg(this) | this:r1747_9 | -| ir.cpp:1747:39:1747:39 | Arg(this) | this:r1747_16 | -| ir.cpp:1747:39:1747:39 | CallTarget | func:r1747_10 | -| ir.cpp:1747:39:1747:39 | CallTarget | func:r1747_17 | -| ir.cpp:1747:39:1747:39 | ChiPartial | partial:m1747_12 | -| ir.cpp:1747:39:1747:39 | ChiPartial | partial:m1747_14 | -| ir.cpp:1747:39:1747:39 | ChiPartial | partial:m1747_19 | -| ir.cpp:1747:39:1747:39 | ChiPartial | partial:m1747_21 | -| ir.cpp:1747:39:1747:39 | ChiTotal | total:m1747_4 | -| ir.cpp:1747:39:1747:39 | ChiTotal | total:m1747_13 | -| ir.cpp:1747:39:1747:39 | ChiTotal | total:m1747_15 | -| ir.cpp:1747:39:1747:39 | ChiTotal | total:m1747_20 | -| ir.cpp:1747:39:1747:39 | SideEffect | ~m1747_4 | -| ir.cpp:1747:39:1747:39 | SideEffect | ~m1747_15 | -| ir.cpp:1750:5:1750:34 | Address | &:r1750_5 | -| ir.cpp:1750:5:1750:34 | ChiPartial | partial:m1750_3 | -| ir.cpp:1750:5:1750:34 | ChiTotal | total:m1750_2 | -| ir.cpp:1750:5:1750:34 | Load | m1755_2 | -| ir.cpp:1750:5:1750:34 | SideEffect | ~m1754_10 | -| ir.cpp:1751:51:1751:51 | Address | &:r1751_1 | -| ir.cpp:1751:51:1751:51 | Address | &:r1751_1 | -| ir.cpp:1751:51:1751:51 | Address | &:r1751_3 | -| ir.cpp:1751:51:1751:51 | Address | &:r1751_3 | -| ir.cpp:1751:51:1751:51 | Load | m1751_2 | -| ir.cpp:1751:51:1751:51 | SideEffect | m1751_4 | -| ir.cpp:1752:48:1752:48 | Address | &:r1752_1 | -| ir.cpp:1752:48:1752:48 | Address | &:r1752_1 | -| ir.cpp:1752:48:1752:48 | Address | &:r1752_3 | -| ir.cpp:1752:48:1752:48 | Address | &:r1752_3 | -| ir.cpp:1752:48:1752:48 | Load | m1752_2 | -| ir.cpp:1752:48:1752:48 | SideEffect | m1752_4 | -| ir.cpp:1753:40:1753:41 | Address | &:r1753_1 | -| ir.cpp:1753:40:1753:41 | Address | &:r1753_1 | -| ir.cpp:1753:40:1753:41 | Arg(this) | this:r1753_1 | -| ir.cpp:1753:44:1753:45 | CallTarget | func:r1753_3 | -| ir.cpp:1753:44:1753:45 | ChiPartial | partial:m1753_9 | -| ir.cpp:1753:44:1753:45 | ChiPartial | partial:m1753_12 | -| ir.cpp:1753:44:1753:45 | ChiTotal | total:m1750_4 | -| ir.cpp:1753:44:1753:45 | ChiTotal | total:m1753_2 | -| ir.cpp:1753:44:1753:45 | SideEffect | ~m1750_4 | -| ir.cpp:1753:45:1753:45 | Address | &:r1753_4 | -| ir.cpp:1753:45:1753:45 | Address | &:r1753_7 | -| ir.cpp:1753:45:1753:45 | Arg(0) | 0:r1753_7 | -| ir.cpp:1753:45:1753:45 | Load | m1751_2 | -| ir.cpp:1753:45:1753:45 | SideEffect | ~m1751_4 | -| ir.cpp:1753:45:1753:45 | Unary | r1753_5 | -| ir.cpp:1753:45:1753:45 | Unary | r1753_6 | -| ir.cpp:1754:37:1754:38 | Address | &:r1754_1 | -| ir.cpp:1754:37:1754:38 | Address | &:r1754_1 | -| ir.cpp:1754:37:1754:38 | Arg(this) | this:r1754_1 | -| ir.cpp:1754:41:1754:42 | CallTarget | func:r1754_3 | -| ir.cpp:1754:41:1754:42 | ChiPartial | partial:m1754_9 | -| ir.cpp:1754:41:1754:42 | ChiPartial | partial:m1754_12 | -| ir.cpp:1754:41:1754:42 | ChiTotal | total:m1753_10 | -| ir.cpp:1754:41:1754:42 | ChiTotal | total:m1754_2 | -| ir.cpp:1754:41:1754:42 | SideEffect | ~m1753_10 | -| ir.cpp:1754:42:1754:42 | Address | &:r1754_4 | -| ir.cpp:1754:42:1754:42 | Address | &:r1754_7 | -| ir.cpp:1754:42:1754:42 | Arg(0) | 0:r1754_7 | -| ir.cpp:1754:42:1754:42 | Load | m1752_2 | -| ir.cpp:1754:42:1754:42 | SideEffect | ~m1752_4 | -| ir.cpp:1754:42:1754:42 | Unary | r1754_5 | -| ir.cpp:1754:42:1754:42 | Unary | r1754_6 | -| ir.cpp:1755:1:1755:1 | Address | &:r1755_1 | -| ir.cpp:1757:6:1757:22 | ChiPartial | partial:m1757_3 | -| ir.cpp:1757:6:1757:22 | ChiTotal | total:m1757_2 | -| ir.cpp:1757:6:1757:22 | SideEffect | m1757_3 | -| ir.cpp:1757:28:1757:28 | Address | &:r1757_5 | -| ir.cpp:1758:13:1758:13 | Address | &:r1758_1 | -| ir.cpp:1758:17:1758:17 | Address | &:r1758_2 | -| ir.cpp:1758:17:1758:17 | Load | m1757_6 | -| ir.cpp:1758:17:1758:17 | StoreValue | r1758_3 | -| ir.cpp:1758:20:1758:20 | Address | &:r1758_5 | -| ir.cpp:1758:20:1758:20 | Left | r1758_6 | -| ir.cpp:1758:20:1758:20 | Load | m1757_6 | -| ir.cpp:1758:20:1758:24 | Condition | r1758_10 | -| ir.cpp:1758:20:1758:24 | Left | r1758_8 | -| ir.cpp:1758:20:1758:24 | Right | r1758_9 | -| ir.cpp:1758:24:1758:24 | Right | r1758_7 | -| ir.cpp:1759:9:1759:9 | Address | &:r1759_6 | -| ir.cpp:1759:13:1759:13 | Address | &:r1759_1 | -| ir.cpp:1759:13:1759:13 | Left | r1759_2 | -| ir.cpp:1759:13:1759:13 | Load | m1757_6 | -| ir.cpp:1759:13:1759:17 | StoreValue | r1759_5 | -| ir.cpp:1759:17:1759:17 | Address | &:r1759_3 | -| ir.cpp:1759:17:1759:17 | Load | m1758_4 | -| ir.cpp:1759:17:1759:17 | Right | r1759_4 | -| ir.cpp:1762:9:1762:9 | Address | &:r1762_2 | -| ir.cpp:1762:9:1762:9 | Phi | from 0:m1757_6 | -| ir.cpp:1762:9:1762:9 | Phi | from 1:m1759_7 | -| ir.cpp:1763:9:1763:9 | Address | &:r1763_3 | -| ir.cpp:1763:13:1763:13 | Address | &:r1763_1 | -| ir.cpp:1763:13:1763:13 | Load | m1762_1 | -| ir.cpp:1763:13:1763:13 | StoreValue | r1763_2 | -| ir.cpp:1763:16:1763:16 | Address | &:r1763_5 | -| ir.cpp:1763:16:1763:16 | Left | r1763_6 | -| ir.cpp:1763:16:1763:16 | Load | m1762_1 | -| ir.cpp:1763:16:1763:20 | Condition | r1763_10 | -| ir.cpp:1763:16:1763:20 | Left | r1763_8 | -| ir.cpp:1763:16:1763:20 | Right | r1763_9 | -| ir.cpp:1763:20:1763:20 | Right | r1763_7 | -| ir.cpp:1764:9:1764:9 | Address | &:r1764_6 | -| ir.cpp:1764:13:1764:13 | Address | &:r1764_1 | -| ir.cpp:1764:13:1764:13 | Left | r1764_2 | -| ir.cpp:1764:13:1764:13 | Load | m1762_1 | -| ir.cpp:1764:13:1764:17 | StoreValue | r1764_5 | -| ir.cpp:1764:17:1764:17 | Address | &:r1764_3 | -| ir.cpp:1764:17:1764:17 | Load | m1763_4 | -| ir.cpp:1764:17:1764:17 | Right | r1764_4 | -| ir.cpp:1767:9:1767:9 | Address | &:r1767_4 | -| ir.cpp:1767:13:1767:13 | Address | &:r1767_2 | -| ir.cpp:1767:13:1767:13 | Load | m1767_1 | -| ir.cpp:1767:13:1767:13 | Phi | from 2:m1762_1 | -| ir.cpp:1767:13:1767:13 | Phi | from 3:m1764_7 | -| ir.cpp:1767:13:1767:13 | StoreValue | r1767_3 | -| ir.cpp:1767:14:1767:25 | Address | &:r1767_6 | -| ir.cpp:1767:14:1767:25 | Condition | r1767_14 | -| ir.cpp:1767:20:1767:21 | Address | &:r1767_10 | -| ir.cpp:1767:20:1767:21 | Left | r1767_11 | -| ir.cpp:1767:20:1767:21 | Load | m1767_9 | -| ir.cpp:1767:20:1767:21 | Right | r1767_12 | -| ir.cpp:1767:20:1767:21 | Unary | r1767_13 | -| ir.cpp:1767:25:1767:25 | Address | &:r1767_7 | -| ir.cpp:1767:25:1767:25 | Load | m1767_5 | -| ir.cpp:1767:25:1767:25 | StoreValue | r1767_8 | -| ir.cpp:1768:9:1768:9 | Address | &:r1768_6 | -| ir.cpp:1768:13:1768:13 | Address | &:r1768_1 | -| ir.cpp:1768:13:1768:13 | Left | r1768_2 | -| ir.cpp:1768:13:1768:13 | Load | m1767_1 | -| ir.cpp:1768:13:1768:17 | StoreValue | r1768_5 | -| ir.cpp:1768:17:1768:17 | Address | &:r1768_3 | -| ir.cpp:1768:17:1768:17 | Load | m1767_5 | -| ir.cpp:1768:17:1768:17 | Right | r1768_4 | -| ir.cpp:1771:9:1771:29 | Address | &:r1771_6 | -| ir.cpp:1771:9:1771:29 | Condition | r1771_14 | -| ir.cpp:1771:13:1771:13 | Address | &:r1771_2 | -| ir.cpp:1771:13:1771:13 | Phi | from 4:m1767_1 | -| ir.cpp:1771:13:1771:13 | Phi | from 5:m1768_7 | -| ir.cpp:1771:17:1771:17 | Address | &:r1771_3 | -| ir.cpp:1771:17:1771:17 | Load | m1771_1 | -| ir.cpp:1771:17:1771:17 | StoreValue | r1771_4 | -| ir.cpp:1771:24:1771:25 | Address | &:r1771_10 | -| ir.cpp:1771:24:1771:25 | Left | r1771_11 | -| ir.cpp:1771:24:1771:25 | Load | m1771_9 | -| ir.cpp:1771:24:1771:25 | Right | r1771_12 | -| ir.cpp:1771:24:1771:25 | Unary | r1771_13 | -| ir.cpp:1771:29:1771:29 | Address | &:r1771_7 | -| ir.cpp:1771:29:1771:29 | Load | m1771_5 | -| ir.cpp:1771:29:1771:29 | StoreValue | r1771_8 | -| ir.cpp:1772:9:1772:9 | Address | &:r1772_6 | -| ir.cpp:1772:13:1772:13 | Address | &:r1772_1 | -| ir.cpp:1772:13:1772:13 | Left | r1772_2 | -| ir.cpp:1772:13:1772:13 | Load | m1771_1 | -| ir.cpp:1772:13:1772:17 | StoreValue | r1772_5 | -| ir.cpp:1772:17:1772:17 | Address | &:r1772_3 | -| ir.cpp:1772:17:1772:17 | Load | m1771_5 | -| ir.cpp:1772:17:1772:17 | Right | r1772_4 | -| ir.cpp:1775:9:1775:9 | Address | &:r1775_2 | -| ir.cpp:1775:9:1775:9 | Phi | from 6:m1771_1 | -| ir.cpp:1775:9:1775:9 | Phi | from 7:m1772_7 | -| ir.cpp:1775:13:1775:13 | Address | &:r1775_3 | -| ir.cpp:1775:13:1775:13 | Load | m1775_1 | -| ir.cpp:1775:13:1775:13 | StoreValue | r1775_4 | -| ir.cpp:1776:9:1776:9 | Address | &:r1776_1 | -| ir.cpp:1776:9:1776:9 | Condition | r1776_4 | -| ir.cpp:1776:9:1776:9 | Left | r1776_2 | -| ir.cpp:1776:9:1776:9 | Load | m1775_5 | -| ir.cpp:1776:9:1776:9 | Right | r1776_3 | -| ir.cpp:1777:9:1777:9 | Address | &:r1777_6 | -| ir.cpp:1777:13:1777:13 | Address | &:r1777_1 | -| ir.cpp:1777:13:1777:13 | Left | r1777_2 | -| ir.cpp:1777:13:1777:13 | Load | m1775_1 | -| ir.cpp:1777:13:1777:17 | StoreValue | r1777_5 | -| ir.cpp:1777:17:1777:17 | Address | &:r1777_3 | -| ir.cpp:1777:17:1777:17 | Load | m1775_5 | -| ir.cpp:1777:17:1777:17 | Right | r1777_4 | -| ir.cpp:1780:9:1780:18 | Address | &:r1780_2 | -| ir.cpp:1780:9:1780:18 | Condition | r1780_10 | -| ir.cpp:1780:9:1780:18 | Phi | from 8:m1775_1 | -| ir.cpp:1780:9:1780:18 | Phi | from 9:m1777_7 | -| ir.cpp:1780:13:1780:14 | Address | &:r1780_6 | -| ir.cpp:1780:13:1780:14 | Left | r1780_7 | -| ir.cpp:1780:13:1780:14 | Load | m1780_5 | -| ir.cpp:1780:13:1780:14 | Right | r1780_8 | -| ir.cpp:1780:13:1780:14 | Unary | r1780_9 | -| ir.cpp:1780:18:1780:18 | Address | &:r1780_3 | -| ir.cpp:1780:18:1780:18 | Load | m1775_5 | -| ir.cpp:1780:18:1780:18 | StoreValue | r1780_4 | -| ir.cpp:1781:9:1781:9 | Address | &:r1781_3 | -| ir.cpp:1781:9:1781:9 | Address | &:r1781_3 | -| ir.cpp:1781:9:1781:9 | Left | r1781_4 | -| ir.cpp:1781:9:1781:9 | Load | m1780_1 | -| ir.cpp:1781:9:1781:15 | StoreValue | r1781_5 | -| ir.cpp:1781:14:1781:15 | Address | &:r1781_1 | -| ir.cpp:1781:14:1781:15 | Load | m1780_5 | -| ir.cpp:1781:14:1781:15 | Right | r1781_2 | -| ir.cpp:1785:6:1785:26 | ChiPartial | partial:m1785_3 | -| ir.cpp:1785:6:1785:26 | ChiTotal | total:m1785_2 | -| ir.cpp:1785:6:1785:26 | SideEffect | m1785_3 | -| ir.cpp:1785:32:1785:32 | Address | &:r1785_5 | -| ir.cpp:1786:17:1786:17 | Address | &:r1786_1 | -| ir.cpp:1786:21:1786:21 | Address | &:r1786_2 | -| ir.cpp:1786:21:1786:21 | Load | m1785_6 | -| ir.cpp:1786:21:1786:21 | StoreValue | r1786_3 | -| ir.cpp:1786:24:1786:24 | Address | &:r1786_5 | -| ir.cpp:1786:24:1786:24 | Left | r1786_6 | -| ir.cpp:1786:24:1786:24 | Load | m1785_6 | -| ir.cpp:1786:24:1786:28 | Condition | r1786_8 | -| ir.cpp:1786:28:1786:28 | Right | r1786_7 | -| ir.cpp:1788:9:1788:9 | Address | &:r1788_6 | -| ir.cpp:1788:13:1788:13 | Address | &:r1788_1 | -| ir.cpp:1788:13:1788:13 | Left | r1788_2 | -| ir.cpp:1788:13:1788:13 | Load | m1785_6 | -| ir.cpp:1788:13:1788:17 | StoreValue | r1788_5 | -| ir.cpp:1788:17:1788:17 | Address | &:r1788_3 | -| ir.cpp:1788:17:1788:17 | Load | m1786_4 | -| ir.cpp:1788:17:1788:17 | Right | r1788_4 | -| ir.cpp:1791:9:1791:9 | Address | &:r1791_1 | -| ir.cpp:1792:13:1792:13 | Address | &:r1792_3 | -| ir.cpp:1792:17:1792:17 | Address | &:r1792_1 | -| ir.cpp:1792:17:1792:17 | Load | m1788_7 | -| ir.cpp:1792:17:1792:17 | StoreValue | r1792_2 | -| ir.cpp:1792:20:1792:20 | Address | &:r1792_5 | -| ir.cpp:1792:20:1792:20 | Left | r1792_6 | -| ir.cpp:1792:20:1792:20 | Load | m1788_7 | -| ir.cpp:1792:20:1792:24 | Condition | r1792_8 | -| ir.cpp:1792:24:1792:24 | Right | r1792_7 | -| ir.cpp:1794:9:1794:9 | Address | &:r1794_6 | -| ir.cpp:1794:13:1794:13 | Address | &:r1794_1 | -| ir.cpp:1794:13:1794:13 | Left | r1794_2 | -| ir.cpp:1794:13:1794:13 | Load | m1788_7 | -| ir.cpp:1794:13:1794:17 | StoreValue | r1794_5 | -| ir.cpp:1794:17:1794:17 | Address | &:r1794_3 | -| ir.cpp:1794:17:1794:17 | Load | m1792_4 | -| ir.cpp:1794:17:1794:17 | Right | r1794_4 | -| ir.cpp:1797:13:1797:13 | Address | &:r1797_3 | -| ir.cpp:1797:17:1797:17 | Address | &:r1797_1 | -| ir.cpp:1797:17:1797:17 | Load | m1794_7 | -| ir.cpp:1797:17:1797:17 | StoreValue | r1797_2 | -| ir.cpp:1797:18:1797:29 | Address | &:r1797_5 | -| ir.cpp:1797:18:1797:29 | Condition | r1797_11 | -| ir.cpp:1797:24:1797:25 | Address | &:r1797_9 | -| ir.cpp:1797:24:1797:25 | Load | m1797_8 | -| ir.cpp:1797:24:1797:25 | Unary | r1797_10 | -| ir.cpp:1797:29:1797:29 | Address | &:r1797_6 | -| ir.cpp:1797:29:1797:29 | Load | m1797_4 | -| ir.cpp:1797:29:1797:29 | StoreValue | r1797_7 | -| ir.cpp:1799:9:1799:9 | Address | &:r1799_6 | -| ir.cpp:1799:13:1799:13 | Address | &:r1799_1 | -| ir.cpp:1799:13:1799:13 | Left | r1799_2 | -| ir.cpp:1799:13:1799:13 | Load | m1794_7 | -| ir.cpp:1799:13:1799:17 | StoreValue | r1799_5 | -| ir.cpp:1799:17:1799:17 | Address | &:r1799_3 | -| ir.cpp:1799:17:1799:17 | Load | m1797_4 | -| ir.cpp:1799:17:1799:17 | Right | r1799_4 | -| ir.cpp:1802:13:1802:33 | Address | &:r1802_5 | -| ir.cpp:1802:13:1802:33 | Condition | r1802_11 | -| ir.cpp:1802:17:1802:17 | Address | &:r1802_1 | -| ir.cpp:1802:21:1802:21 | Address | &:r1802_2 | -| ir.cpp:1802:21:1802:21 | Load | m1799_7 | -| ir.cpp:1802:21:1802:21 | StoreValue | r1802_3 | -| ir.cpp:1802:28:1802:29 | Address | &:r1802_9 | -| ir.cpp:1802:28:1802:29 | Load | m1802_8 | -| ir.cpp:1802:28:1802:29 | Unary | r1802_10 | -| ir.cpp:1802:33:1802:33 | Address | &:r1802_6 | -| ir.cpp:1802:33:1802:33 | Load | m1802_4 | -| ir.cpp:1802:33:1802:33 | StoreValue | r1802_7 | -| ir.cpp:1804:9:1804:9 | Address | &:r1804_6 | -| ir.cpp:1804:13:1804:13 | Address | &:r1804_1 | -| ir.cpp:1804:13:1804:13 | Left | r1804_2 | -| ir.cpp:1804:13:1804:13 | Load | m1799_7 | -| ir.cpp:1804:13:1804:17 | StoreValue | r1804_5 | -| ir.cpp:1804:17:1804:17 | Address | &:r1804_3 | -| ir.cpp:1804:17:1804:17 | Load | m1802_4 | -| ir.cpp:1804:17:1804:17 | Right | r1804_4 | -| ir.cpp:1807:9:1807:9 | Address | &:r1807_1 | -| ir.cpp:1807:13:1807:13 | Address | &:r1807_2 | -| ir.cpp:1807:13:1807:13 | Load | m1804_7 | -| ir.cpp:1807:13:1807:13 | StoreValue | r1807_3 | -| ir.cpp:1808:13:1808:13 | Address | &:r1808_1 | -| ir.cpp:1808:13:1808:13 | Condition | r1808_2 | -| ir.cpp:1808:13:1808:13 | Load | m1807_4 | -| ir.cpp:1810:9:1810:9 | Address | &:r1810_6 | +| ir.cpp:1597:15:1597:15 | Address | &:r1597_1 | +| ir.cpp:1597:19:1597:40 | Address | &:r1597_2 | +| ir.cpp:1597:19:1597:40 | Address | &:r1597_2 | +| ir.cpp:1597:19:1597:40 | Arg(this) | this:r1597_2 | +| ir.cpp:1597:19:1597:40 | ChiPartial | partial:m1597_8 | +| ir.cpp:1597:19:1597:40 | ChiTotal | total:m1596_9 | +| ir.cpp:1597:19:1597:40 | SideEffect | m1596_9 | +| ir.cpp:1597:42:1597:47 | CallTarget | func:r1597_3 | +| ir.cpp:1597:42:1597:47 | ChiPartial | partial:m1597_5 | +| ir.cpp:1597:42:1597:47 | ChiTotal | total:m1596_6 | +| ir.cpp:1597:42:1597:47 | SideEffect | ~m1596_6 | +| ir.cpp:1597:42:1597:47 | Unary | r1597_4 | +| ir.cpp:1597:48:1597:50 | StoreValue | r1597_11 | +| ir.cpp:1597:48:1597:50 | Unary | r1597_10 | +| ir.cpp:1598:15:1598:15 | Address | &:r1598_1 | +| ir.cpp:1598:19:1598:40 | Address | &:r1598_2 | +| ir.cpp:1598:19:1598:40 | Address | &:r1598_2 | +| ir.cpp:1598:19:1598:40 | Arg(this) | this:r1598_2 | +| ir.cpp:1598:19:1598:40 | ChiPartial | partial:m1598_8 | +| ir.cpp:1598:19:1598:40 | ChiTotal | total:m1597_9 | +| ir.cpp:1598:19:1598:40 | SideEffect | m1597_9 | +| ir.cpp:1598:42:1598:47 | CallTarget | func:r1598_3 | +| ir.cpp:1598:42:1598:47 | ChiPartial | partial:m1598_5 | +| ir.cpp:1598:42:1598:47 | ChiTotal | total:m1597_6 | +| ir.cpp:1598:42:1598:47 | SideEffect | ~m1597_6 | +| ir.cpp:1598:42:1598:47 | Unary | r1598_4 | +| ir.cpp:1598:48:1598:50 | StoreValue | r1598_11 | +| ir.cpp:1598:48:1598:50 | Unary | r1598_10 | +| ir.cpp:1599:9:1599:9 | Address | &:r1599_2 | +| ir.cpp:1599:9:1599:9 | Address | &:r1599_4 | +| ir.cpp:1599:9:1599:9 | Load | m1597_12 | +| ir.cpp:1599:9:1599:9 | Unary | r1599_3 | +| ir.cpp:1599:9:1599:15 | ChiPartial | partial:m1599_5 | +| ir.cpp:1599:9:1599:15 | ChiTotal | total:m1598_9 | +| ir.cpp:1599:13:1599:15 | StoreValue | r1599_1 | +| ir.cpp:1600:17:1600:18 | Address | &:r1600_1 | +| ir.cpp:1600:22:1600:22 | Address | &:r1600_2 | +| ir.cpp:1600:22:1600:22 | Load | m1597_12 | +| ir.cpp:1600:22:1600:22 | StoreValue | r1600_5 | +| ir.cpp:1600:22:1600:22 | Unary | r1600_3 | +| ir.cpp:1600:22:1600:22 | Unary | r1600_4 | +| ir.cpp:1601:13:1601:13 | Address | &:r1601_1 | +| ir.cpp:1601:17:1601:17 | Address | &:r1601_2 | +| ir.cpp:1601:17:1601:17 | Address | &:r1601_3 | +| ir.cpp:1601:17:1601:17 | Load | m1596_12 | +| ir.cpp:1601:17:1601:17 | Load | ~m1598_9 | +| ir.cpp:1601:17:1601:17 | StoreValue | r1601_4 | +| ir.cpp:1602:9:1602:9 | Address | &:r1602_2 | +| ir.cpp:1602:9:1602:9 | Address | &:r1602_4 | +| ir.cpp:1602:9:1602:9 | Load | m1598_12 | +| ir.cpp:1602:9:1602:9 | Unary | r1602_3 | +| ir.cpp:1602:9:1602:13 | ChiPartial | partial:m1602_5 | +| ir.cpp:1602:9:1602:13 | ChiTotal | total:m1598_6 | +| ir.cpp:1602:13:1602:13 | StoreValue | r1602_1 | +| ir.cpp:1603:14:1603:15 | Address | &:r1603_1 | +| ir.cpp:1603:19:1603:19 | Address | &:r1603_2 | +| ir.cpp:1603:19:1603:19 | Load | m1598_12 | +| ir.cpp:1603:19:1603:19 | StoreValue | r1603_5 | +| ir.cpp:1603:19:1603:19 | Unary | r1603_3 | +| ir.cpp:1603:19:1603:19 | Unary | r1603_4 | +| ir.cpp:1604:13:1604:13 | Address | &:r1604_1 | +| ir.cpp:1604:17:1604:17 | Address | &:r1604_2 | +| ir.cpp:1604:17:1604:17 | Address | &:r1604_3 | +| ir.cpp:1604:17:1604:17 | Load | m1598_12 | +| ir.cpp:1604:17:1604:17 | Load | ~m1602_6 | +| ir.cpp:1604:17:1604:17 | StoreValue | r1604_4 | +| ir.cpp:1608:8:1608:8 | Address | &:r1608_5 | +| ir.cpp:1608:8:1608:8 | Address | &:r1608_5 | +| ir.cpp:1608:8:1608:8 | Address | &:r1608_7 | +| ir.cpp:1608:8:1608:8 | Address | &:r1608_7 | +| ir.cpp:1608:8:1608:8 | ChiPartial | partial:m1608_3 | +| ir.cpp:1608:8:1608:8 | ChiTotal | total:m1608_2 | +| ir.cpp:1608:8:1608:8 | Load | m1608_6 | +| ir.cpp:1608:8:1608:8 | SideEffect | m1608_3 | +| ir.cpp:1608:8:1608:8 | SideEffect | m1608_8 | +| ir.cpp:1635:61:1635:98 | Address | &:r1635_5 | +| ir.cpp:1635:61:1635:98 | Address | &:r1635_5 | +| ir.cpp:1635:61:1635:98 | Address | &:r1635_7 | +| ir.cpp:1635:61:1635:98 | Address | &:r1635_7 | +| ir.cpp:1635:61:1635:98 | Address | &:r1635_10 | +| ir.cpp:1635:61:1635:98 | ChiPartial | partial:m1635_3 | +| ir.cpp:1635:61:1635:98 | ChiTotal | total:m1635_2 | +| ir.cpp:1635:61:1635:98 | Load | m1635_6 | +| ir.cpp:1635:61:1635:98 | Load | m1636_6 | +| ir.cpp:1635:61:1635:98 | SideEffect | m1635_3 | +| ir.cpp:1635:61:1635:98 | SideEffect | m1635_8 | +| ir.cpp:1636:5:1636:13 | Address | &:r1636_1 | +| ir.cpp:1636:12:1636:12 | Address | &:r1636_2 | +| ir.cpp:1636:12:1636:12 | Address | &:r1636_4 | +| ir.cpp:1636:12:1636:12 | Load | m1635_6 | +| ir.cpp:1636:12:1636:12 | Load | ~m1635_8 | +| ir.cpp:1636:12:1636:12 | StoreValue | r1636_5 | +| ir.cpp:1636:12:1636:12 | Unary | r1636_3 | +| ir.cpp:1639:61:1639:98 | Address | &:r1639_5 | +| ir.cpp:1639:61:1639:98 | Address | &:r1639_5 | +| ir.cpp:1639:61:1639:98 | Address | &:r1639_7 | +| ir.cpp:1639:61:1639:98 | Address | &:r1639_7 | +| ir.cpp:1639:61:1639:98 | Address | &:r1639_10 | +| ir.cpp:1639:61:1639:98 | ChiPartial | partial:m1639_3 | +| ir.cpp:1639:61:1639:98 | ChiTotal | total:m1639_2 | +| ir.cpp:1639:61:1639:98 | Load | m1639_6 | +| ir.cpp:1639:61:1639:98 | Load | m1640_8 | +| ir.cpp:1639:61:1639:98 | SideEffect | m1639_3 | +| ir.cpp:1639:61:1639:98 | SideEffect | m1639_8 | +| ir.cpp:1640:5:1640:13 | Address | &:r1640_1 | +| ir.cpp:1640:12:1640:12 | Address | &:r1640_2 | +| ir.cpp:1640:12:1640:12 | Address | &:r1640_4 | +| ir.cpp:1640:12:1640:12 | Load | m1639_6 | +| ir.cpp:1640:12:1640:12 | Load | ~m1639_8 | +| ir.cpp:1640:12:1640:12 | StoreValue | r1640_7 | +| ir.cpp:1640:12:1640:12 | Unary | r1640_3 | +| ir.cpp:1640:12:1640:12 | Unary | r1640_5 | +| ir.cpp:1640:12:1640:12 | Unary | r1640_6 | +| ir.cpp:1643:61:1643:98 | Address | &:r1643_5 | +| ir.cpp:1643:61:1643:98 | Address | &:r1643_5 | +| ir.cpp:1643:61:1643:98 | Address | &:r1643_7 | +| ir.cpp:1643:61:1643:98 | Address | &:r1643_7 | +| ir.cpp:1643:61:1643:98 | Address | &:r1643_10 | +| ir.cpp:1643:61:1643:98 | ChiPartial | partial:m1643_3 | +| ir.cpp:1643:61:1643:98 | ChiTotal | total:m1643_2 | +| ir.cpp:1643:61:1643:98 | Load | m1643_6 | +| ir.cpp:1643:61:1643:98 | Load | m1644_6 | +| ir.cpp:1643:61:1643:98 | SideEffect | m1643_3 | +| ir.cpp:1643:61:1643:98 | SideEffect | m1643_8 | +| ir.cpp:1644:5:1644:13 | Address | &:r1644_1 | +| ir.cpp:1644:12:1644:12 | Address | &:r1644_2 | +| ir.cpp:1644:12:1644:12 | StoreValue | r1644_3 | +| ir.cpp:1644:12:1644:12 | StoreValue | r1644_5 | +| ir.cpp:1644:12:1644:12 | Unary | r1644_2 | +| ir.cpp:1647:6:1647:40 | ChiPartial | partial:m1647_3 | +| ir.cpp:1647:6:1647:40 | ChiTotal | total:m1647_2 | +| ir.cpp:1647:6:1647:40 | SideEffect | ~m1668_6 | +| ir.cpp:1648:36:1648:36 | Address | &:r1648_1 | +| ir.cpp:1648:36:1648:36 | Address | &:r1648_1 | +| ir.cpp:1648:36:1648:36 | Arg(this) | this:r1648_1 | +| ir.cpp:1648:36:1648:36 | CallTarget | func:r1648_3 | +| ir.cpp:1648:36:1648:36 | ChiPartial | partial:m1648_5 | +| ir.cpp:1648:36:1648:36 | ChiPartial | partial:m1648_7 | +| ir.cpp:1648:36:1648:36 | ChiTotal | total:m1647_4 | +| ir.cpp:1648:36:1648:36 | ChiTotal | total:m1648_2 | +| ir.cpp:1648:36:1648:36 | SideEffect | ~m1647_4 | +| ir.cpp:1651:16:1651:16 | Address | &:r1651_1 | +| ir.cpp:1651:16:1651:16 | Address | &:r1651_7 | +| ir.cpp:1651:16:1651:16 | Address | &:r1651_21 | +| ir.cpp:1651:16:1651:16 | Address | &:r1651_35 | +| ir.cpp:1651:16:1651:16 | CallTarget | func:r1651_10 | +| ir.cpp:1651:16:1651:16 | CallTarget | func:r1651_24 | +| ir.cpp:1651:16:1651:16 | CallTarget | func:r1651_38 | +| ir.cpp:1651:16:1651:16 | ChiPartial | partial:m1651_12 | +| ir.cpp:1651:16:1651:16 | ChiPartial | partial:m1651_26 | +| ir.cpp:1651:16:1651:16 | ChiPartial | partial:m1651_40 | +| ir.cpp:1651:16:1651:16 | ChiTotal | total:m1648_6 | +| ir.cpp:1651:16:1651:16 | ChiTotal | total:m1651_13 | +| ir.cpp:1651:16:1651:16 | ChiTotal | total:m1651_27 | +| ir.cpp:1651:16:1651:16 | Load | m1651_4 | +| ir.cpp:1651:16:1651:16 | Load | m1651_4 | +| ir.cpp:1651:16:1651:16 | Load | m1651_4 | +| ir.cpp:1651:16:1651:16 | SideEffect | ~m1648_6 | +| ir.cpp:1651:16:1651:16 | SideEffect | ~m1651_13 | +| ir.cpp:1651:16:1651:16 | SideEffect | ~m1651_27 | +| ir.cpp:1651:16:1651:16 | StoreValue | r1651_11 | +| ir.cpp:1651:16:1651:16 | Unary | r1651_8 | +| ir.cpp:1651:16:1651:16 | Unary | r1651_22 | +| ir.cpp:1651:16:1651:16 | Unary | r1651_25 | +| ir.cpp:1651:16:1651:16 | Unary | r1651_36 | +| ir.cpp:1651:16:1651:16 | Unary | r1651_39 | +| ir.cpp:1651:16:1651:30 | Address | &:r1651_6 | +| ir.cpp:1651:16:1651:30 | StoreValue | r1651_18 | +| ir.cpp:1651:16:1651:30 | StoreValue | r1651_32 | +| ir.cpp:1651:16:1651:30 | StoreValue | r1651_46 | +| ir.cpp:1651:16:1651:30 | Unary | r1651_6 | +| ir.cpp:1651:16:1651:30 | Unary | r1651_31 | +| ir.cpp:1651:16:1651:30 | Unary | r1651_45 | +| ir.cpp:1651:17:1651:17 | Address | &:r1651_5 | +| ir.cpp:1651:20:1651:20 | Address | &:r1651_20 | +| ir.cpp:1651:23:1651:23 | Address | &:r1651_34 | +| ir.cpp:1651:29:1651:29 | StoreValue | r1651_3 | +| ir.cpp:1651:29:1651:29 | Unary | r1651_2 | +| ir.cpp:1651:30:1651:30 | Address | &:r1651_9 | +| ir.cpp:1651:30:1651:30 | Address | &:r1651_9 | +| ir.cpp:1651:30:1651:30 | Address | &:r1651_23 | +| ir.cpp:1651:30:1651:30 | Address | &:r1651_23 | +| ir.cpp:1651:30:1651:30 | Address | &:r1651_37 | +| ir.cpp:1651:30:1651:30 | Address | &:r1651_37 | +| ir.cpp:1651:30:1651:30 | Arg(this) | this:r1651_9 | +| ir.cpp:1651:30:1651:30 | Arg(this) | this:r1651_23 | +| ir.cpp:1651:30:1651:30 | Arg(this) | this:r1651_37 | +| ir.cpp:1651:30:1651:30 | ChiPartial | partial:m1651_15 | +| ir.cpp:1651:30:1651:30 | ChiPartial | partial:m1651_29 | +| ir.cpp:1651:30:1651:30 | ChiPartial | partial:m1651_43 | +| ir.cpp:1651:30:1651:30 | ChiTotal | total:m1648_8 | +| ir.cpp:1651:30:1651:30 | ChiTotal | total:m1651_16 | +| ir.cpp:1651:30:1651:30 | ChiTotal | total:m1651_30 | +| ir.cpp:1651:30:1651:30 | SideEffect | m1648_8 | +| ir.cpp:1651:30:1651:30 | SideEffect | m1651_16 | +| ir.cpp:1651:30:1651:30 | SideEffect | m1651_30 | +| ir.cpp:1652:9:1652:9 | Address | &:r1652_2 | +| ir.cpp:1652:9:1652:9 | Address | &:r1652_4 | +| ir.cpp:1652:9:1652:9 | Load | m1651_19 | +| ir.cpp:1652:9:1652:9 | Unary | r1652_3 | +| ir.cpp:1652:13:1652:13 | StoreValue | r1652_1 | +| ir.cpp:1653:14:1653:15 | Address | &:r1653_1 | +| ir.cpp:1653:19:1653:19 | Address | &:r1653_2 | +| ir.cpp:1653:19:1653:19 | Load | m1651_19 | +| ir.cpp:1653:19:1653:19 | StoreValue | r1653_5 | +| ir.cpp:1653:19:1653:19 | Unary | r1653_3 | +| ir.cpp:1653:19:1653:19 | Unary | r1653_4 | +| ir.cpp:1654:13:1654:13 | Address | &:r1654_1 | +| ir.cpp:1654:17:1654:17 | Address | &:r1654_2 | +| ir.cpp:1654:17:1654:17 | Address | &:r1654_3 | +| ir.cpp:1654:17:1654:17 | Load | m1651_19 | +| ir.cpp:1654:17:1654:17 | Load | m1652_5 | +| ir.cpp:1654:17:1654:17 | StoreValue | r1654_4 | +| ir.cpp:1655:9:1655:9 | Address | &:r1655_2 | +| ir.cpp:1655:9:1655:9 | Address | &:r1655_4 | +| ir.cpp:1655:9:1655:9 | Load | m1651_33 | +| ir.cpp:1655:9:1655:9 | Unary | r1655_3 | +| ir.cpp:1655:9:1655:13 | ChiPartial | partial:m1655_5 | +| ir.cpp:1655:9:1655:13 | ChiTotal | total:m1651_41 | +| ir.cpp:1655:13:1655:13 | StoreValue | r1655_1 | +| ir.cpp:1656:14:1656:15 | Address | &:r1656_1 | +| ir.cpp:1656:19:1656:19 | Address | &:r1656_2 | +| ir.cpp:1656:19:1656:19 | Load | m1651_33 | +| ir.cpp:1656:19:1656:19 | StoreValue | r1656_5 | +| ir.cpp:1656:19:1656:19 | Unary | r1656_3 | +| ir.cpp:1656:19:1656:19 | Unary | r1656_4 | +| ir.cpp:1657:13:1657:13 | Address | &:r1657_1 | +| ir.cpp:1657:17:1657:17 | Address | &:r1657_2 | +| ir.cpp:1657:17:1657:17 | Address | &:r1657_3 | +| ir.cpp:1657:17:1657:17 | Load | m1651_33 | +| ir.cpp:1657:17:1657:17 | Load | ~m1655_6 | +| ir.cpp:1657:17:1657:17 | StoreValue | r1657_4 | +| ir.cpp:1661:16:1661:37 | Address | &:r1661_1 | +| ir.cpp:1661:41:1661:41 | StoreValue | r1661_3 | +| ir.cpp:1661:41:1661:41 | Unary | r1661_2 | +| ir.cpp:1662:16:1662:16 | Address | &:r1662_1 | +| ir.cpp:1662:20:1662:41 | Address | &:r1662_3 | +| ir.cpp:1662:20:1662:41 | Address | &:r1662_5 | +| ir.cpp:1662:20:1662:41 | Address | &:r1662_5 | +| ir.cpp:1662:20:1662:41 | Arg(this) | this:r1662_5 | +| ir.cpp:1662:20:1662:41 | ChiPartial | partial:m1662_11 | +| ir.cpp:1662:20:1662:41 | ChiTotal | total:m1651_44 | +| ir.cpp:1662:20:1662:41 | Load | m1661_4 | +| ir.cpp:1662:20:1662:41 | SideEffect | m1651_44 | +| ir.cpp:1662:20:1662:41 | Unary | r1662_4 | +| ir.cpp:1662:20:1662:50 | Address | &:r1662_2 | +| ir.cpp:1662:20:1662:50 | StoreValue | r1662_14 | +| ir.cpp:1662:20:1662:50 | Unary | r1662_2 | +| ir.cpp:1662:43:1662:48 | CallTarget | func:r1662_6 | +| ir.cpp:1662:43:1662:48 | ChiPartial | partial:m1662_8 | +| ir.cpp:1662:43:1662:48 | ChiTotal | total:m1655_6 | +| ir.cpp:1662:43:1662:48 | SideEffect | ~m1655_6 | +| ir.cpp:1662:43:1662:48 | StoreValue | r1662_7 | +| ir.cpp:1663:15:1663:15 | Address | &:r1663_1 | +| ir.cpp:1663:19:1663:40 | Address | &:r1663_2 | +| ir.cpp:1663:19:1663:40 | Address | &:r1663_4 | +| ir.cpp:1663:19:1663:40 | Address | &:r1663_4 | +| ir.cpp:1663:19:1663:40 | Arg(this) | this:r1663_4 | +| ir.cpp:1663:19:1663:40 | ChiPartial | partial:m1663_10 | +| ir.cpp:1663:19:1663:40 | ChiTotal | total:m1662_12 | +| ir.cpp:1663:19:1663:40 | Load | m1661_4 | +| ir.cpp:1663:19:1663:40 | SideEffect | m1662_12 | +| ir.cpp:1663:19:1663:40 | Unary | r1663_3 | +| ir.cpp:1663:42:1663:47 | CallTarget | func:r1663_5 | +| ir.cpp:1663:42:1663:47 | ChiPartial | partial:m1663_7 | +| ir.cpp:1663:42:1663:47 | ChiTotal | total:m1662_9 | +| ir.cpp:1663:42:1663:47 | SideEffect | ~m1662_9 | +| ir.cpp:1663:42:1663:47 | Unary | r1663_6 | +| ir.cpp:1663:48:1663:50 | StoreValue | r1663_13 | +| ir.cpp:1663:48:1663:50 | Unary | r1663_12 | +| ir.cpp:1664:16:1664:17 | Address | &:r1664_1 | +| ir.cpp:1664:21:1664:42 | Address | &:r1664_2 | +| ir.cpp:1664:21:1664:42 | Address | &:r1664_4 | +| ir.cpp:1664:21:1664:42 | Address | &:r1664_4 | +| ir.cpp:1664:21:1664:42 | Arg(this) | this:r1664_4 | +| ir.cpp:1664:21:1664:42 | ChiPartial | partial:m1664_10 | +| ir.cpp:1664:21:1664:42 | ChiTotal | total:m1663_11 | +| ir.cpp:1664:21:1664:42 | Load | m1661_4 | +| ir.cpp:1664:21:1664:42 | SideEffect | m1663_11 | +| ir.cpp:1664:21:1664:42 | Unary | r1664_3 | +| ir.cpp:1664:44:1664:49 | CallTarget | func:r1664_5 | +| ir.cpp:1664:44:1664:49 | ChiPartial | partial:m1664_7 | +| ir.cpp:1664:44:1664:49 | ChiTotal | total:m1663_8 | +| ir.cpp:1664:44:1664:49 | SideEffect | ~m1663_8 | +| ir.cpp:1664:44:1664:49 | Unary | r1664_6 | +| ir.cpp:1664:50:1664:52 | StoreValue | r1664_13 | +| ir.cpp:1664:50:1664:52 | Unary | r1664_12 | +| ir.cpp:1665:9:1665:9 | Address | &:r1665_2 | +| ir.cpp:1665:9:1665:9 | Address | &:r1665_4 | +| ir.cpp:1665:9:1665:9 | Load | m1662_15 | +| ir.cpp:1665:9:1665:9 | Unary | r1665_3 | +| ir.cpp:1665:13:1665:13 | StoreValue | r1665_1 | +| ir.cpp:1666:14:1666:15 | Address | &:r1666_1 | +| ir.cpp:1666:19:1666:19 | Address | &:r1666_2 | +| ir.cpp:1666:19:1666:19 | Load | m1662_15 | +| ir.cpp:1666:19:1666:19 | StoreValue | r1666_5 | +| ir.cpp:1666:19:1666:19 | Unary | r1666_3 | +| ir.cpp:1666:19:1666:19 | Unary | r1666_4 | +| ir.cpp:1667:13:1667:13 | Address | &:r1667_1 | +| ir.cpp:1667:17:1667:17 | Address | &:r1667_2 | +| ir.cpp:1667:17:1667:17 | Address | &:r1667_3 | +| ir.cpp:1667:17:1667:17 | Load | m1662_15 | +| ir.cpp:1667:17:1667:17 | Load | m1665_5 | +| ir.cpp:1667:17:1667:17 | StoreValue | r1667_4 | +| ir.cpp:1668:9:1668:9 | Address | &:r1668_2 | +| ir.cpp:1668:9:1668:9 | Address | &:r1668_4 | +| ir.cpp:1668:9:1668:9 | Load | m1663_14 | +| ir.cpp:1668:9:1668:9 | Unary | r1668_3 | +| ir.cpp:1668:9:1668:13 | ChiPartial | partial:m1668_5 | +| ir.cpp:1668:9:1668:13 | ChiTotal | total:m1664_8 | +| ir.cpp:1668:13:1668:13 | StoreValue | r1668_1 | +| ir.cpp:1669:14:1669:15 | Address | &:r1669_1 | +| ir.cpp:1669:19:1669:19 | Address | &:r1669_2 | +| ir.cpp:1669:19:1669:19 | Load | m1663_14 | +| ir.cpp:1669:19:1669:19 | StoreValue | r1669_5 | +| ir.cpp:1669:19:1669:19 | Unary | r1669_3 | +| ir.cpp:1669:19:1669:19 | Unary | r1669_4 | +| ir.cpp:1670:13:1670:13 | Address | &:r1670_1 | +| ir.cpp:1670:17:1670:17 | Address | &:r1670_2 | +| ir.cpp:1670:17:1670:17 | Address | &:r1670_3 | +| ir.cpp:1670:17:1670:17 | Load | m1663_14 | +| ir.cpp:1670:17:1670:17 | Load | ~m1668_6 | +| ir.cpp:1670:17:1670:17 | StoreValue | r1670_4 | +| ir.cpp:1674:6:1674:42 | ChiPartial | partial:m1674_3 | +| ir.cpp:1674:6:1674:42 | ChiTotal | total:m1674_2 | +| ir.cpp:1674:6:1674:42 | SideEffect | m1674_3 | +| ir.cpp:1675:9:1675:10 | Address | &:r1675_1 | +| ir.cpp:1675:9:1675:10 | Left | r1675_1 | +| ir.cpp:1675:9:1675:10 | Left | r1675_1 | +| ir.cpp:1675:16:1675:22 | Address | &:r1675_4 | +| ir.cpp:1675:16:1675:22 | Address | &:r1675_9 | +| ir.cpp:1675:16:1675:22 | Right | r1675_3 | +| ir.cpp:1675:16:1675:22 | Right | r1675_8 | +| ir.cpp:1675:18:1675:18 | ChiPartial | partial:m1675_6 | +| ir.cpp:1675:18:1675:18 | ChiTotal | total:m1675_2 | +| ir.cpp:1675:18:1675:18 | StoreValue | r1675_5 | +| ir.cpp:1675:21:1675:21 | ChiPartial | partial:m1675_11 | +| ir.cpp:1675:21:1675:21 | ChiTotal | total:m1675_7 | +| ir.cpp:1675:21:1675:21 | StoreValue | r1675_10 | +| ir.cpp:1676:10:1676:10 | Address | &:r1676_1 | +| ir.cpp:1676:11:1676:11 | Address | &:r1676_5 | +| ir.cpp:1676:15:1676:15 | Address | &:r1676_6 | +| ir.cpp:1676:21:1676:22 | Address | &:r1676_2 | +| ir.cpp:1676:21:1676:22 | Load | m1675_12 | +| ir.cpp:1676:21:1676:22 | StoreValue | r1676_3 | +| ir.cpp:1682:5:1682:23 | Address | &:r1682_5 | +| ir.cpp:1682:5:1682:23 | Address | &:r1682_5 | +| ir.cpp:1682:5:1682:23 | Address | &:r1682_7 | +| ir.cpp:1682:5:1682:23 | Address | &:r1682_7 | +| ir.cpp:1682:5:1682:23 | ChiPartial | partial:m1682_3 | +| ir.cpp:1682:5:1682:23 | ChiTotal | total:m1682_2 | +| ir.cpp:1682:5:1682:23 | Load | m1682_6 | +| ir.cpp:1682:5:1682:23 | SideEffect | m1682_3 | +| ir.cpp:1682:5:1682:23 | SideEffect | m1682_8 | +| ir.cpp:1685:6:1685:20 | ChiPartial | partial:m1685_3 | +| ir.cpp:1685:6:1685:20 | ChiTotal | total:m1685_2 | +| ir.cpp:1685:6:1685:20 | SideEffect | ~m1688_6 | +| ir.cpp:1685:26:1685:26 | Address | &:r1685_5 | +| ir.cpp:1685:34:1685:34 | Address | &:r1685_7 | +| ir.cpp:1685:34:1685:34 | Address | &:r1685_7 | +| ir.cpp:1685:34:1685:34 | Address | &:r1685_9 | +| ir.cpp:1685:34:1685:34 | Address | &:r1685_9 | +| ir.cpp:1685:34:1685:34 | Load | m1685_8 | +| ir.cpp:1685:34:1685:34 | SideEffect | m1685_10 | +| ir.cpp:1685:43:1685:43 | Address | &:r1685_11 | +| ir.cpp:1685:43:1685:43 | Address | &:r1685_11 | +| ir.cpp:1685:43:1685:43 | Address | &:r1685_13 | +| ir.cpp:1685:43:1685:43 | Address | &:r1685_13 | +| ir.cpp:1685:43:1685:43 | Load | m1685_12 | +| ir.cpp:1685:43:1685:43 | SideEffect | m1685_14 | +| ir.cpp:1687:17:1687:20 | Address | &:r1687_1 | +| ir.cpp:1687:24:1687:44 | Address | &:r1687_2 | +| ir.cpp:1687:24:1687:44 | Address | &:r1687_2 | +| ir.cpp:1687:24:1687:44 | Arg(this) | this:r1687_2 | +| ir.cpp:1687:24:1687:44 | CallTarget | func:r1687_4 | +| ir.cpp:1687:24:1687:44 | ChiPartial | partial:m1687_6 | +| ir.cpp:1687:24:1687:44 | ChiPartial | partial:m1687_8 | +| ir.cpp:1687:24:1687:44 | ChiTotal | total:m1685_4 | +| ir.cpp:1687:24:1687:44 | ChiTotal | total:m1687_3 | +| ir.cpp:1687:24:1687:44 | SideEffect | ~m1685_4 | +| ir.cpp:1687:24:1687:44 | StoreValue | r1687_11 | +| ir.cpp:1687:24:1687:44 | Unary | r1687_2 | +| ir.cpp:1687:24:1687:44 | Unary | r1687_10 | +| ir.cpp:1688:10:1688:13 | Address | &:r1688_1 | +| ir.cpp:1688:10:1688:13 | Address | &:r1688_1 | +| ir.cpp:1688:10:1688:13 | Arg(this) | this:r1688_1 | +| ir.cpp:1688:16:1688:37 | CallTarget | func:r1688_3 | +| ir.cpp:1688:16:1688:37 | ChiPartial | partial:m1688_5 | +| ir.cpp:1688:16:1688:37 | ChiPartial | partial:m1688_7 | +| ir.cpp:1688:16:1688:37 | ChiTotal | total:m1687_7 | +| ir.cpp:1688:16:1688:37 | ChiTotal | total:m1688_2 | +| ir.cpp:1688:16:1688:37 | SideEffect | ~m1687_7 | +| ir.cpp:1690:10:1690:21 | Address | &:r1690_1 | +| ir.cpp:1690:24:1692:5 | Address | &:r1690_2 | +| ir.cpp:1690:24:1692:5 | Address | &:r1690_2 | +| ir.cpp:1690:24:1692:5 | Address | &:r1690_4 | +| ir.cpp:1690:24:1692:5 | Address | &:r1690_5 | +| ir.cpp:1690:24:1692:5 | Address | &:r1690_6 | +| ir.cpp:1690:24:1692:5 | Address | &:r1690_7 | +| ir.cpp:1690:24:1692:5 | Address | &:r1690_8 | +| ir.cpp:1690:24:1692:5 | Address | &:r1690_12 | +| ir.cpp:1690:24:1692:5 | Address | &:r1690_17 | +| ir.cpp:1690:24:1692:5 | Address | &:r1690_20 | +| ir.cpp:1690:24:1692:5 | ChiPartial | partial:m1690_10 | +| ir.cpp:1690:24:1692:5 | ChiTotal | total:m0_3 | +| ir.cpp:1690:24:1692:5 | Load | m1687_12 | +| ir.cpp:1690:24:1692:5 | Load | m1688_8 | +| ir.cpp:1690:24:1692:5 | Load | m1692_6 | +| ir.cpp:1690:24:1692:5 | StoreValue | r1690_9 | +| ir.cpp:1690:24:1692:5 | StoreValue | r1690_23 | +| ir.cpp:1690:24:1692:5 | Unary | r1690_2 | +| ir.cpp:1690:24:1692:5 | Unary | r1690_2 | +| ir.cpp:1690:24:1692:5 | Unary | r1690_2 | +| ir.cpp:1690:24:1692:5 | Unary | r1690_2 | +| ir.cpp:1690:24:1692:5 | Unary | r1690_2 | +| ir.cpp:1690:38:1690:38 | Address | &:r1690_13 | +| ir.cpp:1690:38:1690:38 | ChiPartial | partial:m1690_15 | +| ir.cpp:1690:38:1690:38 | ChiTotal | total:m1690_11 | +| ir.cpp:1690:38:1690:38 | Load | m1685_6 | +| ir.cpp:1690:38:1690:38 | StoreValue | r1690_14 | +| ir.cpp:1690:41:1690:41 | Address | &:r1690_18 | +| ir.cpp:1690:41:1690:41 | Address | &:r1690_19 | +| ir.cpp:1690:41:1690:41 | Load | m1685_8 | +| ir.cpp:1690:44:1690:44 | Address | &:r1690_21 | +| ir.cpp:1690:44:1690:44 | Address | &:r1690_22 | +| ir.cpp:1690:44:1690:44 | Load | m1685_12 | +| ir.cpp:1690:46:1690:46 | Address | &:r1690_5 | +| ir.cpp:1690:46:1690:46 | Address | &:r1690_5 | +| ir.cpp:1690:46:1690:46 | Address | &:r1690_7 | +| ir.cpp:1690:46:1690:46 | Address | &:r1690_7 | +| ir.cpp:1690:46:1690:46 | ChiPartial | partial:m1690_3 | +| ir.cpp:1690:46:1690:46 | ChiTotal | total:m1690_2 | +| ir.cpp:1690:46:1690:46 | Load | m1690_6 | +| ir.cpp:1690:46:1690:46 | SideEffect | m1690_3 | +| ir.cpp:1690:46:1690:46 | SideEffect | m1690_8 | +| ir.cpp:1691:14:1691:25 | Address | &:r1691_1 | +| ir.cpp:1691:28:1691:54 | Address | &:r1691_2 | +| ir.cpp:1691:28:1691:54 | Address | &:r1691_2 | +| ir.cpp:1691:28:1691:54 | Address | &:r1691_4 | +| ir.cpp:1691:28:1691:54 | Address | &:r1691_5 | +| ir.cpp:1691:28:1691:54 | Address | &:r1691_7 | +| ir.cpp:1691:28:1691:54 | Address | &:r1691_11 | +| ir.cpp:1691:28:1691:54 | Address | &:r1691_12 | +| ir.cpp:1691:28:1691:54 | Address | &:r1691_14 | +| ir.cpp:1691:28:1691:54 | Address | &:r1691_18 | +| ir.cpp:1691:28:1691:54 | Address | &:r1691_19 | +| ir.cpp:1691:28:1691:54 | Address | &:r1691_21 | +| ir.cpp:1691:28:1691:54 | Address | &:r1691_25 | +| ir.cpp:1691:28:1691:54 | Address | &:r1691_26 | +| ir.cpp:1691:28:1691:54 | Address | &:r1691_28 | +| ir.cpp:1691:28:1691:54 | Address | &:r1691_32 | +| ir.cpp:1691:28:1691:54 | Address | &:r1691_33 | +| ir.cpp:1691:28:1691:54 | Address | &:r1691_35 | +| ir.cpp:1691:28:1691:54 | ChiPartial | partial:m1691_9 | +| ir.cpp:1691:28:1691:54 | ChiPartial | partial:m1691_16 | +| ir.cpp:1691:28:1691:54 | ChiPartial | partial:m1691_23 | +| ir.cpp:1691:28:1691:54 | ChiPartial | partial:m1691_30 | +| ir.cpp:1691:28:1691:54 | ChiPartial | partial:m1691_37 | +| ir.cpp:1691:28:1691:54 | ChiTotal | total:m1691_3 | +| ir.cpp:1691:28:1691:54 | ChiTotal | total:m1691_10 | +| ir.cpp:1691:28:1691:54 | ChiTotal | total:m1691_17 | +| ir.cpp:1691:28:1691:54 | ChiTotal | total:m1691_24 | +| ir.cpp:1691:28:1691:54 | ChiTotal | total:m1691_31 | +| ir.cpp:1691:28:1691:54 | Load | m1690_6 | +| ir.cpp:1691:28:1691:54 | Load | m1690_6 | +| ir.cpp:1691:28:1691:54 | Load | m1690_6 | +| ir.cpp:1691:28:1691:54 | Load | m1690_6 | +| ir.cpp:1691:28:1691:54 | Load | m1690_6 | +| ir.cpp:1691:28:1691:54 | Load | m1691_38 | +| ir.cpp:1691:28:1691:54 | Load | ~m1690_8 | +| ir.cpp:1691:28:1691:54 | Load | ~m1690_8 | +| ir.cpp:1691:28:1691:54 | Load | ~m1690_8 | +| ir.cpp:1691:28:1691:54 | Load | ~m1690_8 | +| ir.cpp:1691:28:1691:54 | Load | ~m1690_8 | +| ir.cpp:1691:28:1691:54 | StoreValue | r1691_8 | +| ir.cpp:1691:28:1691:54 | StoreValue | r1691_15 | +| ir.cpp:1691:28:1691:54 | StoreValue | r1691_22 | +| ir.cpp:1691:28:1691:54 | StoreValue | r1691_29 | +| ir.cpp:1691:28:1691:54 | StoreValue | r1691_36 | +| ir.cpp:1691:28:1691:54 | StoreValue | r1691_39 | +| ir.cpp:1691:28:1691:54 | Unary | r1691_2 | +| ir.cpp:1691:28:1691:54 | Unary | r1691_2 | +| ir.cpp:1691:28:1691:54 | Unary | r1691_2 | +| ir.cpp:1691:28:1691:54 | Unary | r1691_2 | +| ir.cpp:1691:28:1691:54 | Unary | r1691_2 | +| ir.cpp:1691:28:1691:54 | Unary | r1691_6 | +| ir.cpp:1691:28:1691:54 | Unary | r1691_13 | +| ir.cpp:1691:28:1691:54 | Unary | r1691_20 | +| ir.cpp:1691:28:1691:54 | Unary | r1691_27 | +| ir.cpp:1691:28:1691:54 | Unary | r1691_34 | +| ir.cpp:1691:50:1691:50 | Address | &:r1691_5 | +| ir.cpp:1691:50:1691:50 | Address | &:r1691_5 | +| ir.cpp:1691:50:1691:50 | Address | &:r1691_7 | +| ir.cpp:1691:50:1691:50 | Address | &:r1691_7 | +| ir.cpp:1691:50:1691:50 | ChiPartial | partial:m1691_3 | +| ir.cpp:1691:50:1691:50 | ChiTotal | total:m1691_2 | +| ir.cpp:1691:50:1691:50 | Load | m1691_6 | +| ir.cpp:1691:50:1691:50 | SideEffect | m1691_3 | +| ir.cpp:1691:50:1691:50 | SideEffect | m1691_8 | +| ir.cpp:1692:6:1692:6 | ChiPartial | partial:m1692_2 | +| ir.cpp:1692:6:1692:6 | ChiPartial | partial:m1692_5 | +| ir.cpp:1692:6:1692:6 | ChiTotal | total:m1690_16 | +| ir.cpp:1692:6:1692:6 | ChiTotal | total:m1692_3 | +| ir.cpp:1692:6:1692:6 | Load | ~m1685_10 | +| ir.cpp:1692:6:1692:6 | Load | ~m1685_14 | +| ir.cpp:1692:6:1692:6 | StoreValue | r1692_1 | +| ir.cpp:1692:6:1692:6 | StoreValue | r1692_4 | +| ir.cpp:1695:5:1695:21 | Address | &:r1695_5 | +| ir.cpp:1695:5:1695:21 | ChiPartial | partial:m1695_3 | +| ir.cpp:1695:5:1695:21 | ChiTotal | total:m1695_2 | +| ir.cpp:1695:5:1695:21 | Load | m1698_4 | +| ir.cpp:1695:5:1695:21 | SideEffect | m1695_3 | +| ir.cpp:1696:7:1696:7 | Address | &:r1696_1 | +| ir.cpp:1696:10:1696:12 | StoreValue | r1696_2 | +| ir.cpp:1698:3:1698:11 | Address | &:r1698_1 | +| ir.cpp:1698:10:1698:10 | Address | &:r1698_2 | +| ir.cpp:1698:10:1698:10 | Load | m1696_3 | +| ir.cpp:1698:10:1698:10 | StoreValue | r1698_3 | +| ir.cpp:1703:10:1703:10 | Address | &:r1703_5 | +| ir.cpp:1703:10:1703:10 | Address | &:r1703_5 | +| ir.cpp:1703:10:1703:10 | Address | &:r1703_7 | +| ir.cpp:1703:10:1703:10 | Address | &:r1703_7 | +| ir.cpp:1703:10:1703:10 | ChiPartial | partial:m1703_3 | +| ir.cpp:1703:10:1703:10 | ChiTotal | total:m1703_2 | +| ir.cpp:1703:10:1703:10 | Load | m1703_6 | +| ir.cpp:1703:10:1703:10 | SideEffect | m1703_3 | +| ir.cpp:1703:10:1703:10 | SideEffect | m1703_8 | +| ir.cpp:1704:14:1704:22 | Address | &:r1704_1 | +| ir.cpp:1704:25:1710:9 | Address | &:r1704_2 | +| ir.cpp:1704:25:1710:9 | Address | &:r1704_2 | +| ir.cpp:1704:25:1710:9 | Address | &:r1704_4 | +| ir.cpp:1704:25:1710:9 | Address | &:r1704_5 | +| ir.cpp:1704:25:1710:9 | Address | &:r1704_6 | +| ir.cpp:1704:25:1710:9 | Load | m1703_6 | +| ir.cpp:1704:25:1710:9 | Load | ~m1703_8 | +| ir.cpp:1704:25:1710:9 | Load | ~m1704_8 | +| ir.cpp:1704:25:1710:9 | StoreValue | r1704_7 | +| ir.cpp:1704:25:1710:9 | StoreValue | r1704_9 | +| ir.cpp:1704:25:1710:9 | Unary | r1704_2 | +| ir.cpp:1704:34:1704:34 | Address | &:r1704_5 | +| ir.cpp:1704:34:1704:34 | Address | &:r1704_5 | +| ir.cpp:1704:34:1704:34 | Address | &:r1704_7 | +| ir.cpp:1704:34:1704:34 | Address | &:r1704_7 | +| ir.cpp:1704:34:1704:34 | ChiPartial | partial:m1704_3 | +| ir.cpp:1704:34:1704:34 | ChiTotal | total:m1704_2 | +| ir.cpp:1704:34:1704:34 | Load | m1704_6 | +| ir.cpp:1704:34:1704:34 | SideEffect | m1704_8 | +| ir.cpp:1704:34:1704:34 | SideEffect | ~m1705_8 | +| ir.cpp:1705:13:1705:13 | Address | &:r1705_1 | +| ir.cpp:1705:13:1705:13 | Address | &:r1705_4 | +| ir.cpp:1705:13:1705:13 | Arg(this) | this:r1705_4 | +| ir.cpp:1705:13:1705:13 | CallTarget | func:r1705_5 | +| ir.cpp:1705:13:1705:13 | ChiPartial | partial:m1705_7 | +| ir.cpp:1705:13:1705:13 | ChiTotal | total:m1704_4 | +| ir.cpp:1705:13:1705:13 | Load | m1704_6 | +| ir.cpp:1705:13:1705:13 | SideEffect | ~m1704_4 | +| ir.cpp:1705:13:1705:13 | SideEffect | ~m1704_8 | +| ir.cpp:1705:13:1705:13 | Unary | r1705_2 | +| ir.cpp:1705:13:1705:13 | Unary | r1705_3 | +| ir.cpp:1707:18:1707:26 | Address | &:r1707_1 | +| ir.cpp:1707:29:1709:13 | Address | &:r1707_2 | +| ir.cpp:1707:29:1709:13 | Address | &:r1707_2 | +| ir.cpp:1707:29:1709:13 | Address | &:r1707_4 | +| ir.cpp:1707:29:1709:13 | Address | &:r1707_5 | +| ir.cpp:1707:29:1709:13 | Address | &:r1707_7 | +| ir.cpp:1707:29:1709:13 | Load | m1704_6 | +| ir.cpp:1707:29:1709:13 | Load | ~m1704_8 | +| ir.cpp:1707:29:1709:13 | Load | ~m1707_9 | +| ir.cpp:1707:29:1709:13 | StoreValue | r1707_8 | +| ir.cpp:1707:29:1709:13 | StoreValue | r1707_10 | +| ir.cpp:1707:29:1709:13 | Unary | r1707_2 | +| ir.cpp:1707:29:1709:13 | Unary | r1707_6 | +| ir.cpp:1707:38:1707:38 | Address | &:r1707_5 | +| ir.cpp:1707:38:1707:38 | Address | &:r1707_5 | +| ir.cpp:1707:38:1707:38 | Address | &:r1707_7 | +| ir.cpp:1707:38:1707:38 | Address | &:r1707_7 | +| ir.cpp:1707:38:1707:38 | ChiPartial | partial:m1707_3 | +| ir.cpp:1707:38:1707:38 | ChiTotal | total:m1707_2 | +| ir.cpp:1707:38:1707:38 | Load | m1707_6 | +| ir.cpp:1707:38:1707:38 | SideEffect | m1707_8 | +| ir.cpp:1707:38:1707:38 | SideEffect | ~m1708_8 | +| ir.cpp:1708:17:1708:17 | Address | &:r1708_1 | +| ir.cpp:1708:17:1708:17 | Address | &:r1708_4 | +| ir.cpp:1708:17:1708:17 | Arg(this) | this:r1708_4 | +| ir.cpp:1708:17:1708:17 | CallTarget | func:r1708_5 | +| ir.cpp:1708:17:1708:17 | ChiPartial | partial:m1708_7 | +| ir.cpp:1708:17:1708:17 | ChiTotal | total:m1707_4 | +| ir.cpp:1708:17:1708:17 | Load | m1707_6 | +| ir.cpp:1708:17:1708:17 | SideEffect | ~m1707_4 | +| ir.cpp:1708:17:1708:17 | SideEffect | ~m1707_8 | +| ir.cpp:1708:17:1708:17 | Unary | r1708_2 | +| ir.cpp:1708:17:1708:17 | Unary | r1708_3 | +| ir.cpp:1714:6:1714:21 | ChiPartial | partial:m1714_3 | +| ir.cpp:1714:6:1714:21 | ChiTotal | total:m1714_2 | +| ir.cpp:1714:6:1714:21 | SideEffect | m1714_3 | +| ir.cpp:1714:42:1714:43 | Address | &:r1714_5 | +| ir.cpp:1714:66:1714:67 | Address | &:r1714_7 | +| ir.cpp:1714:66:1714:67 | Address | &:r1714_7 | +| ir.cpp:1714:66:1714:67 | Address | &:r1714_9 | +| ir.cpp:1714:66:1714:67 | Address | &:r1714_9 | +| ir.cpp:1714:66:1714:67 | Load | m1714_8 | +| ir.cpp:1714:66:1714:67 | SideEffect | m1714_10 | +| ir.cpp:1714:91:1714:92 | Address | &:r1714_11 | +| ir.cpp:1714:91:1714:92 | Address | &:r1714_11 | +| ir.cpp:1714:91:1714:92 | Address | &:r1714_13 | +| ir.cpp:1714:91:1714:92 | Address | &:r1714_13 | +| ir.cpp:1714:91:1714:92 | Load | m1714_12 | +| ir.cpp:1714:91:1714:92 | SideEffect | m1714_14 | +| ir.cpp:1715:30:1715:31 | Address | &:r1715_1 | +| ir.cpp:1716:31:1716:32 | Address | &:r1716_1 | +| ir.cpp:1716:36:1716:55 | Address | &:r1716_2 | +| ir.cpp:1716:36:1716:55 | StoreValue | r1716_3 | +| ir.cpp:1716:36:1716:55 | StoreValue | r1716_6 | +| ir.cpp:1716:36:1716:55 | Unary | r1716_2 | +| ir.cpp:1716:36:1716:55 | Unary | r1716_5 | +| ir.cpp:1718:10:1718:17 | Address | &:r1718_1 | +| ir.cpp:1718:20:1720:5 | Address | &:r1718_2 | +| ir.cpp:1718:20:1720:5 | Address | &:r1718_2 | +| ir.cpp:1718:20:1720:5 | Address | &:r1718_4 | +| ir.cpp:1718:20:1720:5 | Address | &:r1718_5 | +| ir.cpp:1718:20:1720:5 | Address | &:r1718_9 | +| ir.cpp:1718:20:1720:5 | Address | &:r1718_10 | +| ir.cpp:1718:20:1720:5 | Address | &:r1718_11 | +| ir.cpp:1718:20:1720:5 | Address | &:r1718_12 | +| ir.cpp:1718:20:1720:5 | Address | &:r1718_13 | +| ir.cpp:1718:20:1720:5 | Address | &:r1718_14 | +| ir.cpp:1718:20:1720:5 | Address | &:r1718_15 | +| ir.cpp:1718:20:1720:5 | Address | &:r1718_16 | +| ir.cpp:1718:20:1720:5 | Address | &:r1718_20 | +| ir.cpp:1718:20:1720:5 | Address | &:r1718_21 | +| ir.cpp:1718:20:1720:5 | Address | &:r1718_22 | +| ir.cpp:1718:20:1720:5 | ChiPartial | partial:m1718_7 | +| ir.cpp:1718:20:1720:5 | ChiPartial | partial:m1718_18 | +| ir.cpp:1718:20:1720:5 | ChiTotal | total:m0_6 | +| ir.cpp:1718:20:1720:5 | ChiTotal | total:m1718_3 | +| ir.cpp:1718:20:1720:5 | Load | m0_9 | +| ir.cpp:1718:20:1720:5 | Load | m1714_6 | +| ir.cpp:1718:20:1720:5 | Load | m1714_8 | +| ir.cpp:1718:20:1720:5 | Load | m1714_12 | +| ir.cpp:1718:20:1720:5 | Load | m1715_2 | +| ir.cpp:1718:20:1720:5 | Load | m1716_7 | +| ir.cpp:1718:20:1720:5 | StoreValue | r1718_6 | +| ir.cpp:1718:20:1720:5 | StoreValue | r1718_17 | +| ir.cpp:1718:20:1720:5 | StoreValue | r1718_23 | +| ir.cpp:1718:20:1720:5 | Unary | r1718_2 | +| ir.cpp:1718:20:1720:5 | Unary | r1718_2 | +| ir.cpp:1718:20:1720:5 | Unary | r1718_2 | +| ir.cpp:1718:20:1720:5 | Unary | r1718_2 | +| ir.cpp:1718:20:1720:5 | Unary | r1718_2 | +| ir.cpp:1718:42:1718:42 | Address | &:r1718_5 | +| ir.cpp:1718:42:1718:42 | Address | &:r1718_5 | +| ir.cpp:1718:42:1718:42 | Address | &:r1718_7 | +| ir.cpp:1718:42:1718:42 | Address | &:r1718_7 | +| ir.cpp:1718:42:1718:42 | ChiPartial | partial:m1718_3 | +| ir.cpp:1718:42:1718:42 | ChiTotal | total:m1718_2 | +| ir.cpp:1718:42:1718:42 | Load | m1718_6 | +| ir.cpp:1718:42:1718:42 | SideEffect | m1718_3 | +| ir.cpp:1718:42:1718:42 | SideEffect | m1718_8 | +| ir.cpp:1719:14:1719:21 | Address | &:r1719_1 | +| ir.cpp:1719:24:1719:31 | Address | &:r1719_2 | +| ir.cpp:1719:24:1719:31 | Address | &:r1719_2 | +| ir.cpp:1719:24:1719:31 | Address | &:r1719_4 | +| ir.cpp:1719:24:1719:31 | Address | &:r1719_5 | +| ir.cpp:1719:24:1719:31 | Address | &:r1719_7 | +| ir.cpp:1719:24:1719:31 | Load | m1718_6 | +| ir.cpp:1719:24:1719:31 | Load | ~m1718_8 | +| ir.cpp:1719:24:1719:31 | Load | ~m1719_9 | +| ir.cpp:1719:24:1719:31 | StoreValue | r1719_8 | +| ir.cpp:1719:24:1719:31 | StoreValue | r1719_10 | +| ir.cpp:1719:24:1719:31 | Unary | r1719_2 | +| ir.cpp:1719:24:1719:31 | Unary | r1719_6 | +| ir.cpp:1719:30:1719:30 | Address | &:r1719_5 | +| ir.cpp:1719:30:1719:30 | Address | &:r1719_5 | +| ir.cpp:1719:30:1719:30 | Address | &:r1719_7 | +| ir.cpp:1719:30:1719:30 | Address | &:r1719_7 | +| ir.cpp:1719:30:1719:30 | ChiPartial | partial:m1719_3 | +| ir.cpp:1719:30:1719:30 | ChiTotal | total:m1719_2 | +| ir.cpp:1719:30:1719:30 | Load | m1719_6 | +| ir.cpp:1719:30:1719:30 | SideEffect | m1719_3 | +| ir.cpp:1719:30:1719:30 | SideEffect | m1719_8 | +| ir.cpp:1726:5:1726:44 | Address | &:r1726_5 | +| ir.cpp:1726:5:1726:44 | Address | &:r1726_5 | +| ir.cpp:1726:5:1726:44 | Address | &:r1726_7 | +| ir.cpp:1726:5:1726:44 | Address | &:r1726_7 | +| ir.cpp:1726:5:1726:44 | ChiPartial | partial:m1726_3 | +| ir.cpp:1726:5:1726:44 | ChiTotal | total:m1726_2 | +| ir.cpp:1726:5:1726:44 | Load | m1726_6 | +| ir.cpp:1726:5:1726:44 | SideEffect | m1726_3 | +| ir.cpp:1726:5:1726:44 | SideEffect | m1726_8 | +| ir.cpp:1727:5:1727:44 | Address | &:r1727_5 | +| ir.cpp:1727:5:1727:44 | Address | &:r1727_5 | +| ir.cpp:1727:5:1727:44 | Address | &:r1727_7 | +| ir.cpp:1727:5:1727:44 | Address | &:r1727_7 | +| ir.cpp:1727:5:1727:44 | ChiPartial | partial:m1727_3 | +| ir.cpp:1727:5:1727:44 | ChiTotal | total:m1727_2 | +| ir.cpp:1727:5:1727:44 | Load | m1727_6 | +| ir.cpp:1727:5:1727:44 | SideEffect | m1727_3 | +| ir.cpp:1727:5:1727:44 | SideEffect | m1728_10 | +| ir.cpp:1727:94:1727:94 | Address | &:r1727_9 | +| ir.cpp:1727:94:1727:94 | Address | &:r1727_9 | +| ir.cpp:1727:94:1727:94 | Address | &:r1727_11 | +| ir.cpp:1727:94:1727:94 | Address | &:r1727_11 | +| ir.cpp:1727:94:1727:94 | Load | m1727_10 | +| ir.cpp:1727:94:1727:94 | SideEffect | m1727_12 | +| ir.cpp:1728:9:1728:9 | Address | &:r1728_6 | +| ir.cpp:1728:9:1728:9 | Address | &:r1728_8 | +| ir.cpp:1728:9:1728:9 | Load | m1727_6 | +| ir.cpp:1728:9:1728:9 | Unary | r1728_7 | +| ir.cpp:1728:9:1728:15 | ChiPartial | partial:m1728_9 | +| ir.cpp:1728:9:1728:15 | ChiTotal | total:m1727_8 | +| ir.cpp:1728:13:1728:13 | Address | &:r1728_1 | +| ir.cpp:1728:13:1728:13 | Load | m1727_10 | +| ir.cpp:1728:13:1728:13 | Unary | r1728_2 | +| ir.cpp:1728:13:1728:13 | Unary | r1728_3 | +| ir.cpp:1728:15:1728:15 | Address | &:r1728_4 | +| ir.cpp:1728:15:1728:15 | Load | ~m1727_12 | +| ir.cpp:1728:15:1728:15 | StoreValue | r1728_5 | +| ir.cpp:1735:5:1735:39 | Address | &:r1735_5 | +| ir.cpp:1735:5:1735:39 | Address | &:r1735_5 | +| ir.cpp:1735:5:1735:39 | Address | &:r1735_7 | +| ir.cpp:1735:5:1735:39 | Address | &:r1735_7 | +| ir.cpp:1735:5:1735:39 | ChiPartial | partial:m1735_3 | +| ir.cpp:1735:5:1735:39 | ChiTotal | total:m1735_2 | +| ir.cpp:1735:5:1735:39 | Load | m1735_6 | +| ir.cpp:1735:5:1735:39 | SideEffect | m1735_3 | +| ir.cpp:1735:5:1735:39 | SideEffect | m1735_8 | +| ir.cpp:1738:7:1738:7 | Address | &:r1738_5 | +| ir.cpp:1738:7:1738:7 | Address | &:r1738_5 | +| ir.cpp:1738:7:1738:7 | Address | &:r1738_7 | +| ir.cpp:1738:7:1738:7 | Address | &:r1738_7 | +| ir.cpp:1738:7:1738:7 | Address | &:r1738_9 | +| ir.cpp:1738:7:1738:7 | Address | &:r1738_11 | +| ir.cpp:1738:7:1738:7 | Address | &:r1738_15 | +| ir.cpp:1738:7:1738:7 | Arg(0) | 0:r1738_15 | +| ir.cpp:1738:7:1738:7 | Arg(this) | this:r1738_9 | +| ir.cpp:1738:7:1738:7 | CallTarget | func:r1738_10 | +| ir.cpp:1738:7:1738:7 | ChiPartial | partial:m1738_3 | +| ir.cpp:1738:7:1738:7 | ChiPartial | partial:m1738_17 | +| ir.cpp:1738:7:1738:7 | ChiPartial | partial:m1738_20 | +| ir.cpp:1738:7:1738:7 | ChiTotal | total:m1738_2 | +| ir.cpp:1738:7:1738:7 | ChiTotal | total:m1738_4 | +| ir.cpp:1738:7:1738:7 | ChiTotal | total:m1738_8 | +| ir.cpp:1738:7:1738:7 | Load | m0_2 | +| ir.cpp:1738:7:1738:7 | Load | m1738_6 | +| ir.cpp:1738:7:1738:7 | SideEffect | m1738_21 | +| ir.cpp:1738:7:1738:7 | SideEffect | ~m0_4 | +| ir.cpp:1738:7:1738:7 | SideEffect | ~m1738_4 | +| ir.cpp:1738:7:1738:7 | SideEffect | ~m1738_18 | +| ir.cpp:1738:7:1738:7 | Unary | m1738_6 | +| ir.cpp:1738:7:1738:7 | Unary | r1738_12 | +| ir.cpp:1738:7:1738:7 | Unary | r1738_13 | +| ir.cpp:1738:7:1738:7 | Unary | r1738_14 | +| ir.cpp:1742:5:1742:38 | Address | &:r1742_5 | +| ir.cpp:1742:5:1742:38 | Address | &:r1742_5 | +| ir.cpp:1742:5:1742:38 | Address | &:r1742_7 | +| ir.cpp:1742:5:1742:38 | Address | &:r1742_7 | +| ir.cpp:1742:5:1742:38 | ChiPartial | partial:m1742_3 | +| ir.cpp:1742:5:1742:38 | ChiTotal | total:m1742_2 | +| ir.cpp:1742:5:1742:38 | Load | m1742_6 | +| ir.cpp:1742:5:1742:38 | SideEffect | m1742_22 | +| ir.cpp:1742:5:1742:38 | SideEffect | ~m1742_20 | +| ir.cpp:1742:5:1742:38 | Unary | m1742_6 | +| ir.cpp:1742:5:1742:38 | Unary | m1742_6 | +| ir.cpp:1742:42:1742:42 | Address | &:r1742_9 | +| ir.cpp:1742:42:1742:42 | Address | &:r1742_16 | +| ir.cpp:1742:42:1742:42 | Arg(this) | this:r1742_9 | +| ir.cpp:1742:42:1742:42 | Arg(this) | this:r1742_16 | +| ir.cpp:1742:42:1742:42 | CallTarget | func:r1742_10 | +| ir.cpp:1742:42:1742:42 | CallTarget | func:r1742_17 | +| ir.cpp:1742:42:1742:42 | ChiPartial | partial:m1742_12 | +| ir.cpp:1742:42:1742:42 | ChiPartial | partial:m1742_14 | +| ir.cpp:1742:42:1742:42 | ChiPartial | partial:m1742_19 | +| ir.cpp:1742:42:1742:42 | ChiPartial | partial:m1742_21 | +| ir.cpp:1742:42:1742:42 | ChiTotal | total:m1742_4 | +| ir.cpp:1742:42:1742:42 | ChiTotal | total:m1742_8 | +| ir.cpp:1742:42:1742:42 | ChiTotal | total:m1742_13 | +| ir.cpp:1742:42:1742:42 | ChiTotal | total:m1742_15 | +| ir.cpp:1742:42:1742:42 | SideEffect | ~m1742_4 | +| ir.cpp:1742:42:1742:42 | SideEffect | ~m1742_13 | +| ir.cpp:1745:7:1745:7 | Address | &:r1745_5 | +| ir.cpp:1745:7:1745:7 | Address | &:r1745_5 | +| ir.cpp:1745:7:1745:7 | Address | &:r1745_7 | +| ir.cpp:1745:7:1745:7 | Address | &:r1745_7 | +| ir.cpp:1745:7:1745:7 | Address | &:r1745_9 | +| ir.cpp:1745:7:1745:7 | Address | &:r1745_11 | +| ir.cpp:1745:7:1745:7 | Address | &:r1745_15 | +| ir.cpp:1745:7:1745:7 | Arg(0) | 0:r1745_15 | +| ir.cpp:1745:7:1745:7 | Arg(this) | this:r1745_9 | +| ir.cpp:1745:7:1745:7 | CallTarget | func:r1745_10 | +| ir.cpp:1745:7:1745:7 | ChiPartial | partial:m1745_3 | +| ir.cpp:1745:7:1745:7 | ChiPartial | partial:m1745_17 | +| ir.cpp:1745:7:1745:7 | ChiPartial | partial:m1745_20 | +| ir.cpp:1745:7:1745:7 | ChiTotal | total:m1745_2 | +| ir.cpp:1745:7:1745:7 | ChiTotal | total:m1745_4 | +| ir.cpp:1745:7:1745:7 | ChiTotal | total:m1745_18 | +| ir.cpp:1745:7:1745:7 | Load | m0_2 | +| ir.cpp:1745:7:1745:7 | Load | m1745_6 | +| ir.cpp:1745:7:1745:7 | SideEffect | m1745_8 | +| ir.cpp:1745:7:1745:7 | SideEffect | ~m0_4 | +| ir.cpp:1745:7:1745:7 | SideEffect | ~m1745_4 | +| ir.cpp:1745:7:1745:7 | SideEffect | ~m1745_21 | +| ir.cpp:1745:7:1745:7 | Unary | m1745_6 | +| ir.cpp:1745:7:1745:7 | Unary | r1745_12 | +| ir.cpp:1745:7:1745:7 | Unary | r1745_13 | +| ir.cpp:1745:7:1745:7 | Unary | r1745_14 | +| ir.cpp:1749:5:1749:35 | Address | &:r1749_5 | +| ir.cpp:1749:5:1749:35 | Address | &:r1749_5 | +| ir.cpp:1749:5:1749:35 | Address | &:r1749_7 | +| ir.cpp:1749:5:1749:35 | Address | &:r1749_7 | +| ir.cpp:1749:5:1749:35 | ChiPartial | partial:m1749_3 | +| ir.cpp:1749:5:1749:35 | ChiTotal | total:m1749_2 | +| ir.cpp:1749:5:1749:35 | Load | m1749_6 | +| ir.cpp:1749:5:1749:35 | SideEffect | m1749_8 | +| ir.cpp:1749:5:1749:35 | SideEffect | ~m1749_22 | +| ir.cpp:1749:5:1749:35 | Unary | m1749_6 | +| ir.cpp:1749:5:1749:35 | Unary | m1749_6 | +| ir.cpp:1749:39:1749:39 | Address | &:r1749_9 | +| ir.cpp:1749:39:1749:39 | Address | &:r1749_16 | +| ir.cpp:1749:39:1749:39 | Arg(this) | this:r1749_9 | +| ir.cpp:1749:39:1749:39 | Arg(this) | this:r1749_16 | +| ir.cpp:1749:39:1749:39 | CallTarget | func:r1749_10 | +| ir.cpp:1749:39:1749:39 | CallTarget | func:r1749_17 | +| ir.cpp:1749:39:1749:39 | ChiPartial | partial:m1749_12 | +| ir.cpp:1749:39:1749:39 | ChiPartial | partial:m1749_14 | +| ir.cpp:1749:39:1749:39 | ChiPartial | partial:m1749_19 | +| ir.cpp:1749:39:1749:39 | ChiPartial | partial:m1749_21 | +| ir.cpp:1749:39:1749:39 | ChiTotal | total:m1749_4 | +| ir.cpp:1749:39:1749:39 | ChiTotal | total:m1749_13 | +| ir.cpp:1749:39:1749:39 | ChiTotal | total:m1749_15 | +| ir.cpp:1749:39:1749:39 | ChiTotal | total:m1749_20 | +| ir.cpp:1749:39:1749:39 | SideEffect | ~m1749_4 | +| ir.cpp:1749:39:1749:39 | SideEffect | ~m1749_15 | +| ir.cpp:1752:5:1752:34 | Address | &:r1752_5 | +| ir.cpp:1752:5:1752:34 | ChiPartial | partial:m1752_3 | +| ir.cpp:1752:5:1752:34 | ChiTotal | total:m1752_2 | +| ir.cpp:1752:5:1752:34 | Load | m1757_2 | +| ir.cpp:1752:5:1752:34 | SideEffect | ~m1756_10 | +| ir.cpp:1753:51:1753:51 | Address | &:r1753_1 | +| ir.cpp:1753:51:1753:51 | Address | &:r1753_1 | +| ir.cpp:1753:51:1753:51 | Address | &:r1753_3 | +| ir.cpp:1753:51:1753:51 | Address | &:r1753_3 | +| ir.cpp:1753:51:1753:51 | Load | m1753_2 | +| ir.cpp:1753:51:1753:51 | SideEffect | m1753_4 | +| ir.cpp:1754:48:1754:48 | Address | &:r1754_1 | +| ir.cpp:1754:48:1754:48 | Address | &:r1754_1 | +| ir.cpp:1754:48:1754:48 | Address | &:r1754_3 | +| ir.cpp:1754:48:1754:48 | Address | &:r1754_3 | +| ir.cpp:1754:48:1754:48 | Load | m1754_2 | +| ir.cpp:1754:48:1754:48 | SideEffect | m1754_4 | +| ir.cpp:1755:40:1755:41 | Address | &:r1755_1 | +| ir.cpp:1755:40:1755:41 | Address | &:r1755_1 | +| ir.cpp:1755:40:1755:41 | Arg(this) | this:r1755_1 | +| ir.cpp:1755:44:1755:45 | CallTarget | func:r1755_3 | +| ir.cpp:1755:44:1755:45 | ChiPartial | partial:m1755_9 | +| ir.cpp:1755:44:1755:45 | ChiPartial | partial:m1755_12 | +| ir.cpp:1755:44:1755:45 | ChiTotal | total:m1752_4 | +| ir.cpp:1755:44:1755:45 | ChiTotal | total:m1755_2 | +| ir.cpp:1755:44:1755:45 | SideEffect | ~m1752_4 | +| ir.cpp:1755:45:1755:45 | Address | &:r1755_4 | +| ir.cpp:1755:45:1755:45 | Address | &:r1755_7 | +| ir.cpp:1755:45:1755:45 | Arg(0) | 0:r1755_7 | +| ir.cpp:1755:45:1755:45 | Load | m1753_2 | +| ir.cpp:1755:45:1755:45 | SideEffect | ~m1753_4 | +| ir.cpp:1755:45:1755:45 | Unary | r1755_5 | +| ir.cpp:1755:45:1755:45 | Unary | r1755_6 | +| ir.cpp:1756:37:1756:38 | Address | &:r1756_1 | +| ir.cpp:1756:37:1756:38 | Address | &:r1756_1 | +| ir.cpp:1756:37:1756:38 | Arg(this) | this:r1756_1 | +| ir.cpp:1756:41:1756:42 | CallTarget | func:r1756_3 | +| ir.cpp:1756:41:1756:42 | ChiPartial | partial:m1756_9 | +| ir.cpp:1756:41:1756:42 | ChiPartial | partial:m1756_12 | +| ir.cpp:1756:41:1756:42 | ChiTotal | total:m1755_10 | +| ir.cpp:1756:41:1756:42 | ChiTotal | total:m1756_2 | +| ir.cpp:1756:41:1756:42 | SideEffect | ~m1755_10 | +| ir.cpp:1756:42:1756:42 | Address | &:r1756_4 | +| ir.cpp:1756:42:1756:42 | Address | &:r1756_7 | +| ir.cpp:1756:42:1756:42 | Arg(0) | 0:r1756_7 | +| ir.cpp:1756:42:1756:42 | Load | m1754_2 | +| ir.cpp:1756:42:1756:42 | SideEffect | ~m1754_4 | +| ir.cpp:1756:42:1756:42 | Unary | r1756_5 | +| ir.cpp:1756:42:1756:42 | Unary | r1756_6 | +| ir.cpp:1757:1:1757:1 | Address | &:r1757_1 | +| ir.cpp:1759:6:1759:22 | ChiPartial | partial:m1759_3 | +| ir.cpp:1759:6:1759:22 | ChiTotal | total:m1759_2 | +| ir.cpp:1759:6:1759:22 | SideEffect | m1759_3 | +| ir.cpp:1759:28:1759:28 | Address | &:r1759_5 | +| ir.cpp:1760:13:1760:13 | Address | &:r1760_1 | +| ir.cpp:1760:17:1760:17 | Address | &:r1760_2 | +| ir.cpp:1760:17:1760:17 | Load | m1759_6 | +| ir.cpp:1760:17:1760:17 | StoreValue | r1760_3 | +| ir.cpp:1760:20:1760:20 | Address | &:r1760_5 | +| ir.cpp:1760:20:1760:20 | Left | r1760_6 | +| ir.cpp:1760:20:1760:20 | Load | m1759_6 | +| ir.cpp:1760:20:1760:24 | Condition | r1760_10 | +| ir.cpp:1760:20:1760:24 | Left | r1760_8 | +| ir.cpp:1760:20:1760:24 | Right | r1760_9 | +| ir.cpp:1760:24:1760:24 | Right | r1760_7 | +| ir.cpp:1761:9:1761:9 | Address | &:r1761_6 | +| ir.cpp:1761:13:1761:13 | Address | &:r1761_1 | +| ir.cpp:1761:13:1761:13 | Left | r1761_2 | +| ir.cpp:1761:13:1761:13 | Load | m1759_6 | +| ir.cpp:1761:13:1761:17 | StoreValue | r1761_5 | +| ir.cpp:1761:17:1761:17 | Address | &:r1761_3 | +| ir.cpp:1761:17:1761:17 | Load | m1760_4 | +| ir.cpp:1761:17:1761:17 | Right | r1761_4 | +| ir.cpp:1764:9:1764:9 | Address | &:r1764_2 | +| ir.cpp:1764:9:1764:9 | Phi | from 0:m1759_6 | +| ir.cpp:1764:9:1764:9 | Phi | from 1:m1761_7 | +| ir.cpp:1765:9:1765:9 | Address | &:r1765_3 | +| ir.cpp:1765:13:1765:13 | Address | &:r1765_1 | +| ir.cpp:1765:13:1765:13 | Load | m1764_1 | +| ir.cpp:1765:13:1765:13 | StoreValue | r1765_2 | +| ir.cpp:1765:16:1765:16 | Address | &:r1765_5 | +| ir.cpp:1765:16:1765:16 | Left | r1765_6 | +| ir.cpp:1765:16:1765:16 | Load | m1764_1 | +| ir.cpp:1765:16:1765:20 | Condition | r1765_10 | +| ir.cpp:1765:16:1765:20 | Left | r1765_8 | +| ir.cpp:1765:16:1765:20 | Right | r1765_9 | +| ir.cpp:1765:20:1765:20 | Right | r1765_7 | +| ir.cpp:1766:9:1766:9 | Address | &:r1766_6 | +| ir.cpp:1766:13:1766:13 | Address | &:r1766_1 | +| ir.cpp:1766:13:1766:13 | Left | r1766_2 | +| ir.cpp:1766:13:1766:13 | Load | m1764_1 | +| ir.cpp:1766:13:1766:17 | StoreValue | r1766_5 | +| ir.cpp:1766:17:1766:17 | Address | &:r1766_3 | +| ir.cpp:1766:17:1766:17 | Load | m1765_4 | +| ir.cpp:1766:17:1766:17 | Right | r1766_4 | +| ir.cpp:1769:9:1769:9 | Address | &:r1769_4 | +| ir.cpp:1769:13:1769:13 | Address | &:r1769_2 | +| ir.cpp:1769:13:1769:13 | Load | m1769_1 | +| ir.cpp:1769:13:1769:13 | Phi | from 2:m1764_1 | +| ir.cpp:1769:13:1769:13 | Phi | from 3:m1766_7 | +| ir.cpp:1769:13:1769:13 | StoreValue | r1769_3 | +| ir.cpp:1769:14:1769:25 | Address | &:r1769_6 | +| ir.cpp:1769:14:1769:25 | Condition | r1769_14 | +| ir.cpp:1769:20:1769:21 | Address | &:r1769_10 | +| ir.cpp:1769:20:1769:21 | Left | r1769_11 | +| ir.cpp:1769:20:1769:21 | Load | m1769_9 | +| ir.cpp:1769:20:1769:21 | Right | r1769_12 | +| ir.cpp:1769:20:1769:21 | Unary | r1769_13 | +| ir.cpp:1769:25:1769:25 | Address | &:r1769_7 | +| ir.cpp:1769:25:1769:25 | Load | m1769_5 | +| ir.cpp:1769:25:1769:25 | StoreValue | r1769_8 | +| ir.cpp:1770:9:1770:9 | Address | &:r1770_6 | +| ir.cpp:1770:13:1770:13 | Address | &:r1770_1 | +| ir.cpp:1770:13:1770:13 | Left | r1770_2 | +| ir.cpp:1770:13:1770:13 | Load | m1769_1 | +| ir.cpp:1770:13:1770:17 | StoreValue | r1770_5 | +| ir.cpp:1770:17:1770:17 | Address | &:r1770_3 | +| ir.cpp:1770:17:1770:17 | Load | m1769_5 | +| ir.cpp:1770:17:1770:17 | Right | r1770_4 | +| ir.cpp:1773:9:1773:29 | Address | &:r1773_6 | +| ir.cpp:1773:9:1773:29 | Condition | r1773_14 | +| ir.cpp:1773:13:1773:13 | Address | &:r1773_2 | +| ir.cpp:1773:13:1773:13 | Phi | from 4:m1769_1 | +| ir.cpp:1773:13:1773:13 | Phi | from 5:m1770_7 | +| ir.cpp:1773:17:1773:17 | Address | &:r1773_3 | +| ir.cpp:1773:17:1773:17 | Load | m1773_1 | +| ir.cpp:1773:17:1773:17 | StoreValue | r1773_4 | +| ir.cpp:1773:24:1773:25 | Address | &:r1773_10 | +| ir.cpp:1773:24:1773:25 | Left | r1773_11 | +| ir.cpp:1773:24:1773:25 | Load | m1773_9 | +| ir.cpp:1773:24:1773:25 | Right | r1773_12 | +| ir.cpp:1773:24:1773:25 | Unary | r1773_13 | +| ir.cpp:1773:29:1773:29 | Address | &:r1773_7 | +| ir.cpp:1773:29:1773:29 | Load | m1773_5 | +| ir.cpp:1773:29:1773:29 | StoreValue | r1773_8 | +| ir.cpp:1774:9:1774:9 | Address | &:r1774_6 | +| ir.cpp:1774:13:1774:13 | Address | &:r1774_1 | +| ir.cpp:1774:13:1774:13 | Left | r1774_2 | +| ir.cpp:1774:13:1774:13 | Load | m1773_1 | +| ir.cpp:1774:13:1774:17 | StoreValue | r1774_5 | +| ir.cpp:1774:17:1774:17 | Address | &:r1774_3 | +| ir.cpp:1774:17:1774:17 | Load | m1773_5 | +| ir.cpp:1774:17:1774:17 | Right | r1774_4 | +| ir.cpp:1777:9:1777:9 | Address | &:r1777_2 | +| ir.cpp:1777:9:1777:9 | Phi | from 6:m1773_1 | +| ir.cpp:1777:9:1777:9 | Phi | from 7:m1774_7 | +| ir.cpp:1777:13:1777:13 | Address | &:r1777_3 | +| ir.cpp:1777:13:1777:13 | Load | m1777_1 | +| ir.cpp:1777:13:1777:13 | StoreValue | r1777_4 | +| ir.cpp:1778:9:1778:9 | Address | &:r1778_1 | +| ir.cpp:1778:9:1778:9 | Condition | r1778_4 | +| ir.cpp:1778:9:1778:9 | Left | r1778_2 | +| ir.cpp:1778:9:1778:9 | Load | m1777_5 | +| ir.cpp:1778:9:1778:9 | Right | r1778_3 | +| ir.cpp:1779:9:1779:9 | Address | &:r1779_6 | +| ir.cpp:1779:13:1779:13 | Address | &:r1779_1 | +| ir.cpp:1779:13:1779:13 | Left | r1779_2 | +| ir.cpp:1779:13:1779:13 | Load | m1777_1 | +| ir.cpp:1779:13:1779:17 | StoreValue | r1779_5 | +| ir.cpp:1779:17:1779:17 | Address | &:r1779_3 | +| ir.cpp:1779:17:1779:17 | Load | m1777_5 | +| ir.cpp:1779:17:1779:17 | Right | r1779_4 | +| ir.cpp:1782:9:1782:18 | Address | &:r1782_2 | +| ir.cpp:1782:9:1782:18 | Condition | r1782_10 | +| ir.cpp:1782:9:1782:18 | Phi | from 8:m1777_1 | +| ir.cpp:1782:9:1782:18 | Phi | from 9:m1779_7 | +| ir.cpp:1782:13:1782:14 | Address | &:r1782_6 | +| ir.cpp:1782:13:1782:14 | Left | r1782_7 | +| ir.cpp:1782:13:1782:14 | Load | m1782_5 | +| ir.cpp:1782:13:1782:14 | Right | r1782_8 | +| ir.cpp:1782:13:1782:14 | Unary | r1782_9 | +| ir.cpp:1782:18:1782:18 | Address | &:r1782_3 | +| ir.cpp:1782:18:1782:18 | Load | m1777_5 | +| ir.cpp:1782:18:1782:18 | StoreValue | r1782_4 | +| ir.cpp:1783:9:1783:9 | Address | &:r1783_3 | +| ir.cpp:1783:9:1783:9 | Address | &:r1783_3 | +| ir.cpp:1783:9:1783:9 | Left | r1783_4 | +| ir.cpp:1783:9:1783:9 | Load | m1782_1 | +| ir.cpp:1783:9:1783:15 | StoreValue | r1783_5 | +| ir.cpp:1783:14:1783:15 | Address | &:r1783_1 | +| ir.cpp:1783:14:1783:15 | Load | m1782_5 | +| ir.cpp:1783:14:1783:15 | Right | r1783_2 | +| ir.cpp:1787:6:1787:26 | ChiPartial | partial:m1787_3 | +| ir.cpp:1787:6:1787:26 | ChiTotal | total:m1787_2 | +| ir.cpp:1787:6:1787:26 | SideEffect | m1787_3 | +| ir.cpp:1787:32:1787:32 | Address | &:r1787_5 | +| ir.cpp:1788:17:1788:17 | Address | &:r1788_1 | +| ir.cpp:1788:21:1788:21 | Address | &:r1788_2 | +| ir.cpp:1788:21:1788:21 | Load | m1787_6 | +| ir.cpp:1788:21:1788:21 | StoreValue | r1788_3 | +| ir.cpp:1788:24:1788:24 | Address | &:r1788_5 | +| ir.cpp:1788:24:1788:24 | Left | r1788_6 | +| ir.cpp:1788:24:1788:24 | Load | m1787_6 | +| ir.cpp:1788:24:1788:28 | Condition | r1788_8 | +| ir.cpp:1788:28:1788:28 | Right | r1788_7 | +| ir.cpp:1790:9:1790:9 | Address | &:r1790_6 | +| ir.cpp:1790:13:1790:13 | Address | &:r1790_1 | +| ir.cpp:1790:13:1790:13 | Left | r1790_2 | +| ir.cpp:1790:13:1790:13 | Load | m1787_6 | +| ir.cpp:1790:13:1790:17 | StoreValue | r1790_5 | +| ir.cpp:1790:17:1790:17 | Address | &:r1790_3 | +| ir.cpp:1790:17:1790:17 | Load | m1788_4 | +| ir.cpp:1790:17:1790:17 | Right | r1790_4 | +| ir.cpp:1793:9:1793:9 | Address | &:r1793_1 | +| ir.cpp:1794:13:1794:13 | Address | &:r1794_3 | +| ir.cpp:1794:17:1794:17 | Address | &:r1794_1 | +| ir.cpp:1794:17:1794:17 | Load | m1790_7 | +| ir.cpp:1794:17:1794:17 | StoreValue | r1794_2 | +| ir.cpp:1794:20:1794:20 | Address | &:r1794_5 | +| ir.cpp:1794:20:1794:20 | Left | r1794_6 | +| ir.cpp:1794:20:1794:20 | Load | m1790_7 | +| ir.cpp:1794:20:1794:24 | Condition | r1794_8 | +| ir.cpp:1794:24:1794:24 | Right | r1794_7 | +| ir.cpp:1796:9:1796:9 | Address | &:r1796_6 | +| ir.cpp:1796:13:1796:13 | Address | &:r1796_1 | +| ir.cpp:1796:13:1796:13 | Left | r1796_2 | +| ir.cpp:1796:13:1796:13 | Load | m1790_7 | +| ir.cpp:1796:13:1796:17 | StoreValue | r1796_5 | +| ir.cpp:1796:17:1796:17 | Address | &:r1796_3 | +| ir.cpp:1796:17:1796:17 | Load | m1794_4 | +| ir.cpp:1796:17:1796:17 | Right | r1796_4 | +| ir.cpp:1799:13:1799:13 | Address | &:r1799_3 | +| ir.cpp:1799:17:1799:17 | Address | &:r1799_1 | +| ir.cpp:1799:17:1799:17 | Load | m1796_7 | +| ir.cpp:1799:17:1799:17 | StoreValue | r1799_2 | +| ir.cpp:1799:18:1799:29 | Address | &:r1799_5 | +| ir.cpp:1799:18:1799:29 | Condition | r1799_11 | +| ir.cpp:1799:24:1799:25 | Address | &:r1799_9 | +| ir.cpp:1799:24:1799:25 | Load | m1799_8 | +| ir.cpp:1799:24:1799:25 | Unary | r1799_10 | +| ir.cpp:1799:29:1799:29 | Address | &:r1799_6 | +| ir.cpp:1799:29:1799:29 | Load | m1799_4 | +| ir.cpp:1799:29:1799:29 | StoreValue | r1799_7 | +| ir.cpp:1801:9:1801:9 | Address | &:r1801_6 | +| ir.cpp:1801:13:1801:13 | Address | &:r1801_1 | +| ir.cpp:1801:13:1801:13 | Left | r1801_2 | +| ir.cpp:1801:13:1801:13 | Load | m1796_7 | +| ir.cpp:1801:13:1801:17 | StoreValue | r1801_5 | +| ir.cpp:1801:17:1801:17 | Address | &:r1801_3 | +| ir.cpp:1801:17:1801:17 | Load | m1799_4 | +| ir.cpp:1801:17:1801:17 | Right | r1801_4 | +| ir.cpp:1804:13:1804:33 | Address | &:r1804_5 | +| ir.cpp:1804:13:1804:33 | Condition | r1804_11 | +| ir.cpp:1804:17:1804:17 | Address | &:r1804_1 | +| ir.cpp:1804:21:1804:21 | Address | &:r1804_2 | +| ir.cpp:1804:21:1804:21 | Load | m1801_7 | +| ir.cpp:1804:21:1804:21 | StoreValue | r1804_3 | +| ir.cpp:1804:28:1804:29 | Address | &:r1804_9 | +| ir.cpp:1804:28:1804:29 | Load | m1804_8 | +| ir.cpp:1804:28:1804:29 | Unary | r1804_10 | +| ir.cpp:1804:33:1804:33 | Address | &:r1804_6 | +| ir.cpp:1804:33:1804:33 | Load | m1804_4 | +| ir.cpp:1804:33:1804:33 | StoreValue | r1804_7 | +| ir.cpp:1806:9:1806:9 | Address | &:r1806_6 | +| ir.cpp:1806:13:1806:13 | Address | &:r1806_1 | +| ir.cpp:1806:13:1806:13 | Left | r1806_2 | +| ir.cpp:1806:13:1806:13 | Load | m1801_7 | +| ir.cpp:1806:13:1806:17 | StoreValue | r1806_5 | +| ir.cpp:1806:17:1806:17 | Address | &:r1806_3 | +| ir.cpp:1806:17:1806:17 | Load | m1804_4 | +| ir.cpp:1806:17:1806:17 | Right | r1806_4 | +| ir.cpp:1809:9:1809:9 | Address | &:r1809_1 | +| ir.cpp:1809:13:1809:13 | Address | &:r1809_2 | +| ir.cpp:1809:13:1809:13 | Load | m1806_7 | +| ir.cpp:1809:13:1809:13 | StoreValue | r1809_3 | | ir.cpp:1810:13:1810:13 | Address | &:r1810_1 | -| ir.cpp:1810:13:1810:13 | Left | r1810_2 | -| ir.cpp:1810:13:1810:13 | Load | m1804_7 | -| ir.cpp:1810:13:1810:17 | StoreValue | r1810_5 | -| ir.cpp:1810:17:1810:17 | Address | &:r1810_3 | -| ir.cpp:1810:17:1810:17 | Load | m1807_4 | -| ir.cpp:1810:17:1810:17 | Right | r1810_4 | -| ir.cpp:1813:13:1813:22 | Address | &:r1813_1 | -| ir.cpp:1813:13:1813:22 | Condition | r1813_7 | -| ir.cpp:1813:17:1813:18 | Address | &:r1813_5 | -| ir.cpp:1813:17:1813:18 | Load | m1813_4 | -| ir.cpp:1813:17:1813:18 | Unary | r1813_6 | -| ir.cpp:1813:22:1813:22 | Address | &:r1813_2 | -| ir.cpp:1813:22:1813:22 | Load | m1807_4 | -| ir.cpp:1813:22:1813:22 | StoreValue | r1813_3 | -| ir.cpp:1815:9:1815:9 | Address | &:r1815_3 | -| ir.cpp:1815:9:1815:9 | Address | &:r1815_3 | -| ir.cpp:1815:9:1815:9 | Left | r1815_4 | -| ir.cpp:1815:9:1815:9 | Load | m1810_7 | -| ir.cpp:1815:9:1815:15 | StoreValue | r1815_5 | -| ir.cpp:1815:14:1815:15 | Address | &:r1815_1 | -| ir.cpp:1815:14:1815:15 | Load | m1813_4 | -| ir.cpp:1815:14:1815:15 | Right | r1815_2 | -| ir.cpp:1821:5:1821:12 | Address | &:r1821_3 | -| ir.cpp:1821:5:1821:12 | SideEffect | ~m1821_6 | -| ir.cpp:1821:16:1821:16 | ChiPartial | partial:m1821_5 | -| ir.cpp:1821:16:1821:16 | ChiTotal | total:m1821_2 | -| ir.cpp:1821:16:1821:16 | StoreValue | r1821_4 | -| ir.cpp:1825:18:1825:25 | Address | &:r1825_3 | -| ir.cpp:1825:18:1825:25 | Arg(this) | this:r1825_3 | -| ir.cpp:1825:18:1825:25 | SideEffect | ~m1825_10 | -| ir.cpp:1825:27:1825:27 | Arg(0) | 0:r1825_5 | -| ir.cpp:1825:27:1825:28 | CallTarget | func:r1825_4 | -| ir.cpp:1825:27:1825:28 | ChiPartial | partial:m1825_7 | -| ir.cpp:1825:27:1825:28 | ChiPartial | partial:m1825_9 | -| ir.cpp:1825:27:1825:28 | ChiTotal | total:m1825_2 | -| ir.cpp:1825:27:1825:28 | ChiTotal | total:m1825_8 | -| ir.cpp:1825:27:1825:28 | SideEffect | ~m1825_2 | +| ir.cpp:1810:13:1810:13 | Condition | r1810_2 | +| ir.cpp:1810:13:1810:13 | Load | m1809_4 | +| ir.cpp:1812:9:1812:9 | Address | &:r1812_6 | +| ir.cpp:1812:13:1812:13 | Address | &:r1812_1 | +| ir.cpp:1812:13:1812:13 | Left | r1812_2 | +| ir.cpp:1812:13:1812:13 | Load | m1806_7 | +| ir.cpp:1812:13:1812:17 | StoreValue | r1812_5 | +| ir.cpp:1812:17:1812:17 | Address | &:r1812_3 | +| ir.cpp:1812:17:1812:17 | Load | m1809_4 | +| ir.cpp:1812:17:1812:17 | Right | r1812_4 | +| ir.cpp:1815:13:1815:22 | Address | &:r1815_1 | +| ir.cpp:1815:13:1815:22 | Condition | r1815_7 | +| ir.cpp:1815:17:1815:18 | Address | &:r1815_5 | +| ir.cpp:1815:17:1815:18 | Load | m1815_4 | +| ir.cpp:1815:17:1815:18 | Unary | r1815_6 | +| ir.cpp:1815:22:1815:22 | Address | &:r1815_2 | +| ir.cpp:1815:22:1815:22 | Load | m1809_4 | +| ir.cpp:1815:22:1815:22 | StoreValue | r1815_3 | +| ir.cpp:1817:9:1817:9 | Address | &:r1817_3 | +| ir.cpp:1817:9:1817:9 | Address | &:r1817_3 | +| ir.cpp:1817:9:1817:9 | Left | r1817_4 | +| ir.cpp:1817:9:1817:9 | Load | m1812_7 | +| ir.cpp:1817:9:1817:15 | StoreValue | r1817_5 | +| ir.cpp:1817:14:1817:15 | Address | &:r1817_1 | +| ir.cpp:1817:14:1817:15 | Load | m1815_4 | +| ir.cpp:1817:14:1817:15 | Right | r1817_2 | +| ir.cpp:1823:5:1823:12 | Address | &:r1823_3 | +| ir.cpp:1823:5:1823:12 | SideEffect | ~m1823_6 | +| ir.cpp:1823:16:1823:16 | ChiPartial | partial:m1823_5 | +| ir.cpp:1823:16:1823:16 | ChiTotal | total:m1823_2 | +| ir.cpp:1823:16:1823:16 | StoreValue | r1823_4 | | ir.cpp:1827:18:1827:25 | Address | &:r1827_3 | | ir.cpp:1827:18:1827:25 | Arg(this) | this:r1827_3 | | ir.cpp:1827:18:1827:25 | SideEffect | ~m1827_10 | -| ir.cpp:1827:28:1827:47 | CallTarget | func:r1827_4 | -| ir.cpp:1827:28:1827:47 | ChiPartial | partial:m1827_7 | -| ir.cpp:1827:28:1827:47 | ChiPartial | partial:m1827_9 | -| ir.cpp:1827:28:1827:47 | ChiTotal | total:m1827_2 | -| ir.cpp:1827:28:1827:47 | ChiTotal | total:m1827_8 | -| ir.cpp:1827:28:1827:47 | SideEffect | ~m1827_2 | -| ir.cpp:1827:46:1827:46 | Arg(0) | 0:r1827_5 | -| ir.cpp:1829:7:1829:19 | Address | &:r1829_3 | -| ir.cpp:1829:7:1829:19 | SideEffect | ~m1829_8 | -| ir.cpp:1829:23:1829:37 | ChiPartial | partial:m1829_7 | -| ir.cpp:1829:23:1829:37 | ChiTotal | total:m1829_2 | -| ir.cpp:1829:23:1829:37 | StoreValue | r1829_6 | -| ir.cpp:1829:23:1829:37 | Unary | r1829_4 | -| ir.cpp:1829:23:1829:37 | Unary | r1829_5 | -| ir.cpp:1831:5:1831:12 | Address | &:r1831_3 | -| ir.cpp:1831:5:1831:12 | SideEffect | ~m1831_7 | -| ir.cpp:1831:16:1831:23 | Address | &:r1831_4 | -| ir.cpp:1831:16:1831:23 | ChiPartial | partial:m1831_6 | -| ir.cpp:1831:16:1831:23 | ChiTotal | total:m1831_2 | -| ir.cpp:1831:16:1831:23 | Load | ~m1831_2 | -| ir.cpp:1831:16:1831:23 | StoreValue | r1831_5 | -| ir.cpp:1834:11:1834:11 | Address | &:r1834_5 | -| ir.cpp:1834:11:1834:11 | Address | &:r1834_5 | -| ir.cpp:1834:11:1834:11 | Address | &:r1834_7 | -| ir.cpp:1834:11:1834:11 | Address | &:r1834_7 | -| ir.cpp:1834:11:1834:11 | Address | &:r1834_10 | -| ir.cpp:1834:11:1834:11 | ChiPartial | partial:m1834_3 | -| ir.cpp:1834:11:1834:11 | ChiTotal | total:m1834_2 | -| ir.cpp:1834:11:1834:11 | Load | m0_20 | -| ir.cpp:1834:11:1834:11 | Load | m1834_6 | -| ir.cpp:1834:11:1834:11 | SideEffect | m0_14 | -| ir.cpp:1834:11:1834:11 | SideEffect | m1834_3 | -| ir.cpp:1839:12:1839:12 | Address | &:r1839_5 | -| ir.cpp:1839:12:1839:12 | Address | &:r1839_5 | -| ir.cpp:1839:12:1839:12 | Address | &:r1839_7 | -| ir.cpp:1839:12:1839:12 | Address | &:r1839_7 | -| ir.cpp:1839:12:1839:12 | Address | &:r1839_9 | -| ir.cpp:1839:12:1839:12 | Address | &:r1839_12 | -| ir.cpp:1839:12:1839:12 | Address | &:r1839_20 | -| ir.cpp:1839:12:1839:12 | Arg(this) | this:r0_5 | -| ir.cpp:1839:12:1839:12 | CallTarget | func:r1839_11 | -| ir.cpp:1839:12:1839:12 | ChiPartial | partial:m1839_3 | -| ir.cpp:1839:12:1839:12 | ChiPartial | partial:m1839_17 | -| ir.cpp:1839:12:1839:12 | ChiTotal | total:m1839_2 | -| ir.cpp:1839:12:1839:12 | ChiTotal | total:m1839_4 | -| ir.cpp:1839:12:1839:12 | Load | m0_2 | -| ir.cpp:1839:12:1839:12 | Load | m0_21 | -| ir.cpp:1839:12:1839:12 | Load | m1839_6 | -| ir.cpp:1839:12:1839:12 | Load | m1839_6 | -| ir.cpp:1839:12:1839:12 | SideEffect | m0_12 | -| ir.cpp:1839:12:1839:12 | SideEffect | ~m1839_4 | -| ir.cpp:1839:12:1839:12 | SideEffect | ~m1839_18 | -| ir.cpp:1839:12:1839:12 | Unary | r1839_10 | -| ir.cpp:1839:12:1839:12 | Unary | r1839_13 | -| ir.cpp:1839:12:1839:12 | Unary | r1839_14 | -| ir.cpp:1839:12:1839:12 | Unary | r1839_15 | -| ir.cpp:1839:12:1839:12 | Unary | r1839_16 | -| ir.cpp:1843:10:1843:12 | ChiPartial | partial:m1843_3 | -| ir.cpp:1843:10:1843:12 | ChiTotal | total:m1843_2 | -| ir.cpp:1843:10:1843:12 | SideEffect | ~m1845_18 | -| ir.cpp:1844:11:1844:11 | Address | &:r1844_1 | -| ir.cpp:1844:11:1844:11 | Address | &:r1844_1 | -| ir.cpp:1844:11:1844:11 | Arg(this) | this:r1844_1 | -| ir.cpp:1844:13:1844:13 | Address | &:r1844_4 | -| ir.cpp:1844:13:1844:13 | Address | &:r1844_4 | -| ir.cpp:1844:13:1844:13 | Arg(0) | 0:r1844_4 | -| ir.cpp:1844:13:1844:13 | ChiPartial | partial:m1844_11 | -| ir.cpp:1844:13:1844:13 | ChiTotal | total:m1844_7 | -| ir.cpp:1844:13:1844:13 | SideEffect | ~m1844_7 | -| ir.cpp:1844:13:1844:14 | CallTarget | func:r1844_3 | -| ir.cpp:1844:13:1844:14 | ChiPartial | partial:m1844_6 | -| ir.cpp:1844:13:1844:14 | ChiPartial | partial:m1844_9 | -| ir.cpp:1844:13:1844:14 | ChiTotal | total:m1843_4 | -| ir.cpp:1844:13:1844:14 | ChiTotal | total:m1844_2 | -| ir.cpp:1844:13:1844:14 | SideEffect | ~m1843_4 | -| ir.cpp:1845:9:1845:9 | Address | &:r1845_1 | -| ir.cpp:1845:9:1845:9 | Address | &:r1845_1 | -| ir.cpp:1845:9:1845:9 | Arg(this) | this:r1845_1 | -| ir.cpp:1845:9:1845:9 | ChiPartial | partial:m1845_21 | -| ir.cpp:1845:9:1845:9 | ChiTotal | total:m1844_10 | -| ir.cpp:1845:9:1845:9 | SideEffect | m1844_10 | -| ir.cpp:1845:11:1845:11 | CallTarget | func:r1845_2 | -| ir.cpp:1845:11:1845:11 | ChiPartial | partial:m1845_17 | -| ir.cpp:1845:11:1845:11 | ChiTotal | total:m1845_14 | -| ir.cpp:1845:11:1845:11 | SideEffect | ~m1845_14 | -| ir.cpp:1845:11:1845:11 | Unary | r1845_16 | -| ir.cpp:1845:13:1845:13 | Address | &:r1845_3 | -| ir.cpp:1845:13:1845:13 | Address | &:r1845_3 | -| ir.cpp:1845:13:1845:13 | Address | &:r1845_6 | -| ir.cpp:1845:13:1845:13 | Address | &:r1845_6 | -| ir.cpp:1845:13:1845:13 | Address | &:r1845_15 | -| ir.cpp:1845:13:1845:13 | Address | &:r1845_15 | -| ir.cpp:1845:13:1845:13 | Arg(0) | 0:r1845_6 | -| ir.cpp:1845:13:1845:13 | Arg(0) | 0:r1845_15 | -| ir.cpp:1845:13:1845:13 | Arg(this) | this:r1845_3 | -| ir.cpp:1845:13:1845:13 | CallTarget | func:r1845_5 | -| ir.cpp:1845:13:1845:13 | ChiPartial | partial:m1845_8 | -| ir.cpp:1845:13:1845:13 | ChiPartial | partial:m1845_11 | -| ir.cpp:1845:13:1845:13 | ChiPartial | partial:m1845_13 | -| ir.cpp:1845:13:1845:13 | ChiPartial | partial:m1845_23 | -| ir.cpp:1845:13:1845:13 | ChiTotal | total:m1844_12 | -| ir.cpp:1845:13:1845:13 | ChiTotal | total:m1845_4 | -| ir.cpp:1845:13:1845:13 | ChiTotal | total:m1845_9 | -| ir.cpp:1845:13:1845:13 | ChiTotal | total:m1845_12 | -| ir.cpp:1845:13:1845:13 | SideEffect | ~m1844_12 | -| ir.cpp:1845:13:1845:13 | SideEffect | ~m1845_9 | -| ir.cpp:1845:13:1845:13 | SideEffect | ~m1845_12 | -| ir.cpp:1845:13:1845:13 | Unary | r1845_3 | -| ir.cpp:1849:6:1849:14 | ChiPartial | partial:m1849_3 | -| ir.cpp:1849:6:1849:14 | ChiTotal | total:m1849_2 | -| ir.cpp:1849:6:1849:14 | SideEffect | m1849_3 | -| ir.cpp:1850:17:1850:18 | Address | &:r1850_1 | -| ir.cpp:1850:22:1850:40 | StoreValue | r1850_3 | -| ir.cpp:1850:22:1850:40 | Unary | r1850_2 | -| ir.cpp:1851:17:1851:23 | Address | &:r1851_1 | -| ir.cpp:1851:27:1851:34 | StoreValue | r1851_3 | -| ir.cpp:1851:27:1851:34 | Unary | r1851_2 | -| ir.cpp:1862:15:1862:15 | Address | &:r1862_5 | -| ir.cpp:1862:15:1862:15 | Address | &:r1862_5 | -| ir.cpp:1862:15:1862:15 | Address | &:r1862_7 | -| ir.cpp:1862:15:1862:15 | Address | &:r1862_7 | -| ir.cpp:1862:15:1862:15 | Address | &:r1862_15 | -| ir.cpp:1862:15:1862:15 | ChiPartial | partial:m1862_3 | -| ir.cpp:1862:15:1862:15 | ChiTotal | total:m1862_2 | -| ir.cpp:1862:15:1862:15 | Load | m1862_6 | -| ir.cpp:1862:15:1862:15 | Load | m1864_5 | -| ir.cpp:1862:15:1862:15 | SideEffect | m1862_3 | -| ir.cpp:1862:15:1862:15 | SideEffect | m1862_8 | -| ir.cpp:1862:47:1862:47 | Address | &:r1862_9 | -| ir.cpp:1862:47:1862:47 | Address | &:r1862_9 | -| ir.cpp:1862:47:1862:47 | Address | &:r1862_11 | -| ir.cpp:1862:47:1862:47 | Address | &:r1862_11 | -| ir.cpp:1862:47:1862:47 | Load | m1862_10 | -| ir.cpp:1862:47:1862:47 | SideEffect | m1862_12 | -| ir.cpp:1864:13:1864:21 | Address | &:r1864_1 | -| ir.cpp:1864:20:1864:20 | Address | &:r1864_2 | -| ir.cpp:1864:20:1864:20 | Load | m1862_10 | -| ir.cpp:1864:20:1864:20 | StoreValue | r1864_4 | -| ir.cpp:1864:20:1864:20 | Unary | r1864_3 | -| ir.cpp:1868:10:1868:14 | ChiPartial | partial:m1868_3 | -| ir.cpp:1868:10:1868:14 | ChiTotal | total:m1868_2 | -| ir.cpp:1868:10:1868:14 | SideEffect | ~m1870_12 | -| ir.cpp:1869:19:1869:19 | Address | &:r1869_1 | -| ir.cpp:1870:9:1870:9 | Address | &:r1870_1 | -| ir.cpp:1870:9:1870:9 | Address | &:r1870_1 | -| ir.cpp:1870:9:1870:9 | Arg(this) | this:r1870_1 | -| ir.cpp:1870:9:1870:9 | ChiPartial | partial:m1870_9 | -| ir.cpp:1870:9:1870:9 | ChiTotal | total:m1869_2 | -| ir.cpp:1870:9:1870:9 | SideEffect | m1869_2 | -| ir.cpp:1870:11:1870:33 | CallTarget | func:r1870_2 | -| ir.cpp:1870:11:1870:33 | ChiPartial | partial:m1870_5 | -| ir.cpp:1870:11:1870:33 | ChiTotal | total:m1868_4 | -| ir.cpp:1870:11:1870:33 | SideEffect | ~m1868_4 | -| ir.cpp:1870:35:1870:41 | Address | &:r1870_3 | -| ir.cpp:1870:35:1870:41 | Address | &:r1870_3 | -| ir.cpp:1870:35:1870:41 | Arg(0) | 0:r1870_3 | -| ir.cpp:1870:35:1870:41 | ChiPartial | partial:m1870_11 | -| ir.cpp:1870:35:1870:41 | ChiTotal | total:m1870_6 | -| ir.cpp:1870:35:1870:41 | SideEffect | ~m1870_6 | -| ir.cpp:1875:13:1875:13 | Address | &:r1875_5 | -| ir.cpp:1875:13:1875:13 | Address | &:r1875_5 | -| ir.cpp:1875:13:1875:13 | Address | &:r1875_7 | -| ir.cpp:1875:13:1875:13 | Address | &:r1875_7 | -| ir.cpp:1875:13:1875:13 | Address | &:r1875_10 | -| ir.cpp:1875:13:1875:13 | ChiPartial | partial:m1875_3 | -| ir.cpp:1875:13:1875:13 | ChiTotal | total:m1875_2 | -| ir.cpp:1875:13:1875:13 | Load | m1875_6 | -| ir.cpp:1875:13:1875:13 | Load | m1879_9 | -| ir.cpp:1875:13:1875:13 | SideEffect | m1875_3 | -| ir.cpp:1875:13:1875:13 | SideEffect | m1875_8 | -| ir.cpp:1876:13:1876:29 | Address | &:r1876_1 | -| ir.cpp:1876:13:1876:29 | Address | &:r1876_3 | -| ir.cpp:1877:13:1877:14 | Address | &:r1877_4 | -| ir.cpp:1877:13:1877:19 | ChiPartial | partial:m1877_5 | -| ir.cpp:1877:13:1877:19 | ChiTotal | total:m1876_2 | -| ir.cpp:1877:14:1877:14 | Unary | r1877_2 | -| ir.cpp:1877:14:1877:14 | Unary | r1877_3 | -| ir.cpp:1877:18:1877:19 | StoreValue | r1877_1 | -| ir.cpp:1878:13:1878:14 | Address | &:r1878_4 | -| ir.cpp:1878:13:1878:19 | ChiPartial | partial:m1878_5 | -| ir.cpp:1878:13:1878:19 | ChiTotal | total:m1876_4 | -| ir.cpp:1878:14:1878:14 | Unary | r1878_2 | -| ir.cpp:1878:14:1878:14 | Unary | r1878_3 | -| ir.cpp:1878:18:1878:19 | StoreValue | r1878_1 | -| ir.cpp:1879:13:1879:27 | Address | &:r1879_1 | -| ir.cpp:1879:20:1879:21 | Left | r1879_4 | -| ir.cpp:1879:20:1879:21 | Load | m1877_5 | -| ir.cpp:1879:20:1879:26 | StoreValue | r1879_8 | -| ir.cpp:1879:21:1879:21 | Address | &:r1879_3 | -| ir.cpp:1879:21:1879:21 | Unary | r1879_2 | -| ir.cpp:1879:25:1879:26 | Load | m1878_5 | -| ir.cpp:1879:25:1879:26 | Right | r1879_7 | -| ir.cpp:1879:26:1879:26 | Address | &:r1879_6 | -| ir.cpp:1879:26:1879:26 | Unary | r1879_5 | -| ir.cpp:1883:10:1883:14 | ChiPartial | partial:m1883_3 | -| ir.cpp:1883:10:1883:14 | ChiTotal | total:m1883_2 | -| ir.cpp:1883:10:1883:14 | SideEffect | ~m1885_5 | -| ir.cpp:1884:19:1884:19 | Address | &:r1884_1 | -| ir.cpp:1885:9:1885:9 | Address | &:r1885_1 | -| ir.cpp:1885:9:1885:9 | Address | &:r1885_1 | -| ir.cpp:1885:9:1885:9 | Arg(this) | this:r1885_1 | -| ir.cpp:1885:9:1885:9 | ChiPartial | partial:m1885_7 | -| ir.cpp:1885:9:1885:9 | ChiTotal | total:m1884_2 | -| ir.cpp:1885:9:1885:9 | SideEffect | m1884_2 | -| ir.cpp:1885:11:1885:50 | CallTarget | func:r1885_2 | -| ir.cpp:1885:11:1885:50 | ChiPartial | partial:m1885_4 | -| ir.cpp:1885:11:1885:50 | ChiTotal | total:m1883_4 | -| ir.cpp:1885:11:1885:50 | SideEffect | ~m1883_4 | -| ir.cpp:1889:24:1889:24 | Address | &:r1889_3 | -| ir.cpp:1889:24:1889:24 | Address | &:r1889_3 | -| ir.cpp:1889:24:1889:24 | SideEffect | ~m1889_6 | -| ir.cpp:1889:24:1889:24 | SideEffect | ~m1889_6 | -| ir.cpp:1889:42:1889:43 | ChiPartial | partial:m1889_5 | -| ir.cpp:1889:42:1889:43 | ChiPartial | partial:m1889_5 | -| ir.cpp:1889:42:1889:43 | ChiTotal | total:m1889_2 | -| ir.cpp:1889:42:1889:43 | ChiTotal | total:m1889_2 | -| ir.cpp:1889:42:1889:43 | StoreValue | r1889_4 | -| ir.cpp:1889:42:1889:43 | StoreValue | r1889_4 | -| ir.cpp:1891:5:1891:28 | Address | &:r1891_5 | -| ir.cpp:1891:5:1891:28 | ChiPartial | partial:m1891_3 | -| ir.cpp:1891:5:1891:28 | ChiTotal | total:m1891_2 | -| ir.cpp:1891:5:1891:28 | Load | m1894_8 | -| ir.cpp:1891:5:1891:28 | SideEffect | m1891_3 | -| ir.cpp:1892:9:1892:17 | Address | &:r1892_1 | -| ir.cpp:1892:21:1892:40 | Address | &:r1892_2 | -| ir.cpp:1892:21:1892:40 | Load | ~m1891_3 | -| ir.cpp:1892:21:1892:40 | StoreValue | r1892_3 | -| ir.cpp:1893:10:1893:19 | Address | &:r1893_1 | -| ir.cpp:1893:23:1893:43 | Address | &:r1893_2 | -| ir.cpp:1893:23:1893:43 | Load | ~m1891_3 | -| ir.cpp:1893:23:1893:43 | StoreValue | r1893_3 | -| ir.cpp:1894:5:1894:39 | Address | &:r1894_1 | -| ir.cpp:1894:12:1894:20 | Address | &:r1894_2 | -| ir.cpp:1894:12:1894:20 | Left | r1894_3 | -| ir.cpp:1894:12:1894:20 | Load | m1892_4 | -| ir.cpp:1894:12:1894:38 | StoreValue | r1894_7 | -| ir.cpp:1894:24:1894:38 | Right | r1894_6 | -| ir.cpp:1894:29:1894:38 | Address | &:r1894_4 | -| ir.cpp:1894:29:1894:38 | Load | m1893_4 | -| ir.cpp:1894:29:1894:38 | Unary | r1894_5 | -| ir.cpp:1899:5:1899:16 | Address | &:r1899_7 | -| ir.cpp:1899:5:1899:16 | ChiPartial | partial:m1899_3 | -| ir.cpp:1899:5:1899:16 | ChiTotal | total:m1899_2 | -| ir.cpp:1899:5:1899:16 | Load | m1901_4 | -| ir.cpp:1899:5:1899:16 | SideEffect | m1899_3 | -| ir.cpp:1899:22:1899:22 | Address | &:r1899_5 | -| ir.cpp:1900:9:1900:9 | Address | &:r1900_1 | -| ir.cpp:1900:9:1900:9 | Left | r1900_2 | -| ir.cpp:1900:9:1900:9 | Load | m1899_6 | -| ir.cpp:1900:9:1900:14 | Condition | r1900_4 | -| ir.cpp:1900:13:1900:14 | Right | r1900_3 | -| ir.cpp:1901:9:1901:17 | Address | &:r1901_1 | -| ir.cpp:1901:16:1901:16 | Address | &:r1901_2 | -| ir.cpp:1901:16:1901:16 | Load | m1899_6 | -| ir.cpp:1901:16:1901:16 | StoreValue | r1901_3 | -| ir.cpp:1903:9:1903:20 | CallTarget | func:r1903_1 | -| ir.cpp:1903:9:1903:20 | ChiPartial | partial:m1903_3 | -| ir.cpp:1903:9:1903:20 | ChiTotal | total:m1899_4 | -| ir.cpp:1903:9:1903:20 | SideEffect | ~m1899_4 | -| ir.cpp:1907:5:1907:17 | Address | &:r1907_8 | -| ir.cpp:1907:5:1907:17 | ChiPartial | partial:m1907_3 | -| ir.cpp:1907:5:1907:17 | ChiTotal | total:m1907_2 | -| ir.cpp:1907:5:1907:17 | Load | m1911_4 | -| ir.cpp:1907:5:1907:17 | SideEffect | m1907_3 | -| ir.cpp:1907:23:1907:23 | Address | &:r1907_5 | -| ir.cpp:1908:9:1908:9 | Address | &:r1908_1 | -| ir.cpp:1908:9:1908:9 | Left | r1908_2 | -| ir.cpp:1908:9:1908:9 | Load | m1907_6 | -| ir.cpp:1908:9:1908:14 | Condition | r1908_4 | -| ir.cpp:1908:13:1908:14 | Right | r1908_3 | -| ir.cpp:1909:9:1909:20 | CallTarget | func:r1909_1 | -| ir.cpp:1909:9:1909:20 | ChiPartial | partial:m1909_3 | -| ir.cpp:1909:9:1909:20 | ChiTotal | total:m1907_4 | -| ir.cpp:1909:9:1909:20 | SideEffect | ~m1907_4 | -| ir.cpp:1911:5:1911:13 | Address | &:r1911_1 | -| ir.cpp:1911:12:1911:12 | Address | &:r1911_2 | -| ir.cpp:1911:12:1911:12 | Load | m1907_6 | -| ir.cpp:1911:12:1911:12 | StoreValue | r1911_3 | -| ir.cpp:1914:5:1914:19 | Address | &:r1914_7 | -| ir.cpp:1914:5:1914:19 | ChiPartial | partial:m1914_3 | -| ir.cpp:1914:5:1914:19 | ChiTotal | total:m1914_2 | -| ir.cpp:1914:5:1914:19 | Load | m1915_4 | -| ir.cpp:1914:5:1914:19 | SideEffect | m1914_3 | -| ir.cpp:1914:25:1914:25 | Address | &:r1914_5 | -| ir.cpp:1915:5:1915:13 | Address | &:r1915_1 | -| ir.cpp:1915:12:1915:12 | Address | &:r1915_2 | -| ir.cpp:1915:12:1915:12 | Load | m1914_6 | -| ir.cpp:1915:12:1915:12 | StoreValue | r1915_3 | -| ir.cpp:1918:6:1918:43 | ChiPartial | partial:m1918_3 | -| ir.cpp:1918:6:1918:43 | ChiTotal | total:m1918_2 | -| ir.cpp:1918:6:1918:43 | SideEffect | ~m1925_5 | -| ir.cpp:1919:7:1919:7 | Address | &:r1919_1 | -| ir.cpp:1919:7:1919:7 | Address | &:r1919_1 | -| ir.cpp:1919:7:1919:7 | Arg(this) | this:r1919_1 | -| ir.cpp:1919:7:1919:7 | CallTarget | func:r1919_3 | -| ir.cpp:1919:7:1919:7 | ChiPartial | partial:m1919_5 | -| ir.cpp:1919:7:1919:7 | ChiPartial | partial:m1919_7 | -| ir.cpp:1919:7:1919:7 | ChiTotal | total:m1918_4 | -| ir.cpp:1919:7:1919:7 | ChiTotal | total:m1919_2 | -| ir.cpp:1919:7:1919:7 | SideEffect | ~m1918_4 | -| ir.cpp:1920:9:1920:9 | Address | &:r1920_1 | -| ir.cpp:1921:5:1921:5 | Address | &:r1921_7 | -| ir.cpp:1921:11:1921:30 | CallTarget | func:r1921_2 | -| ir.cpp:1921:11:1921:30 | ChiPartial | partial:m1921_5 | -| ir.cpp:1921:11:1921:30 | ChiTotal | total:m1919_6 | -| ir.cpp:1921:11:1921:30 | SideEffect | ~m1919_6 | -| ir.cpp:1921:11:1921:30 | StoreValue | r1921_4 | -| ir.cpp:1921:32:1921:33 | Arg(0) | 0:r1921_3 | +| ir.cpp:1827:27:1827:27 | Arg(0) | 0:r1827_5 | +| ir.cpp:1827:27:1827:28 | CallTarget | func:r1827_4 | +| ir.cpp:1827:27:1827:28 | ChiPartial | partial:m1827_7 | +| ir.cpp:1827:27:1827:28 | ChiPartial | partial:m1827_9 | +| ir.cpp:1827:27:1827:28 | ChiTotal | total:m1827_2 | +| ir.cpp:1827:27:1827:28 | ChiTotal | total:m1827_8 | +| ir.cpp:1827:27:1827:28 | SideEffect | ~m1827_2 | +| ir.cpp:1829:18:1829:25 | Address | &:r1829_3 | +| ir.cpp:1829:18:1829:25 | Arg(this) | this:r1829_3 | +| ir.cpp:1829:18:1829:25 | SideEffect | ~m1829_10 | +| ir.cpp:1829:28:1829:47 | CallTarget | func:r1829_4 | +| ir.cpp:1829:28:1829:47 | ChiPartial | partial:m1829_7 | +| ir.cpp:1829:28:1829:47 | ChiPartial | partial:m1829_9 | +| ir.cpp:1829:28:1829:47 | ChiTotal | total:m1829_2 | +| ir.cpp:1829:28:1829:47 | ChiTotal | total:m1829_8 | +| ir.cpp:1829:28:1829:47 | SideEffect | ~m1829_2 | +| ir.cpp:1829:46:1829:46 | Arg(0) | 0:r1829_5 | +| ir.cpp:1831:7:1831:19 | Address | &:r1831_3 | +| ir.cpp:1831:7:1831:19 | SideEffect | ~m1831_8 | +| ir.cpp:1831:23:1831:37 | ChiPartial | partial:m1831_7 | +| ir.cpp:1831:23:1831:37 | ChiTotal | total:m1831_2 | +| ir.cpp:1831:23:1831:37 | StoreValue | r1831_6 | +| ir.cpp:1831:23:1831:37 | Unary | r1831_4 | +| ir.cpp:1831:23:1831:37 | Unary | r1831_5 | +| ir.cpp:1833:5:1833:12 | Address | &:r1833_3 | +| ir.cpp:1833:5:1833:12 | SideEffect | ~m1833_7 | +| ir.cpp:1833:16:1833:23 | Address | &:r1833_4 | +| ir.cpp:1833:16:1833:23 | ChiPartial | partial:m1833_6 | +| ir.cpp:1833:16:1833:23 | ChiTotal | total:m1833_2 | +| ir.cpp:1833:16:1833:23 | Load | ~m1833_2 | +| ir.cpp:1833:16:1833:23 | StoreValue | r1833_5 | +| ir.cpp:1836:11:1836:11 | Address | &:r1836_5 | +| ir.cpp:1836:11:1836:11 | Address | &:r1836_5 | +| ir.cpp:1836:11:1836:11 | Address | &:r1836_7 | +| ir.cpp:1836:11:1836:11 | Address | &:r1836_7 | +| ir.cpp:1836:11:1836:11 | Address | &:r1836_10 | +| ir.cpp:1836:11:1836:11 | ChiPartial | partial:m1836_3 | +| ir.cpp:1836:11:1836:11 | ChiTotal | total:m1836_2 | +| ir.cpp:1836:11:1836:11 | Load | m0_20 | +| ir.cpp:1836:11:1836:11 | Load | m1836_6 | +| ir.cpp:1836:11:1836:11 | SideEffect | m0_14 | +| ir.cpp:1836:11:1836:11 | SideEffect | m1836_3 | +| ir.cpp:1841:12:1841:12 | Address | &:r1841_5 | +| ir.cpp:1841:12:1841:12 | Address | &:r1841_5 | +| ir.cpp:1841:12:1841:12 | Address | &:r1841_7 | +| ir.cpp:1841:12:1841:12 | Address | &:r1841_7 | +| ir.cpp:1841:12:1841:12 | Address | &:r1841_9 | +| ir.cpp:1841:12:1841:12 | Address | &:r1841_12 | +| ir.cpp:1841:12:1841:12 | Address | &:r1841_20 | +| ir.cpp:1841:12:1841:12 | Arg(this) | this:r0_5 | +| ir.cpp:1841:12:1841:12 | CallTarget | func:r1841_11 | +| ir.cpp:1841:12:1841:12 | ChiPartial | partial:m1841_3 | +| ir.cpp:1841:12:1841:12 | ChiPartial | partial:m1841_17 | +| ir.cpp:1841:12:1841:12 | ChiTotal | total:m1841_2 | +| ir.cpp:1841:12:1841:12 | ChiTotal | total:m1841_4 | +| ir.cpp:1841:12:1841:12 | Load | m0_2 | +| ir.cpp:1841:12:1841:12 | Load | m0_21 | +| ir.cpp:1841:12:1841:12 | Load | m1841_6 | +| ir.cpp:1841:12:1841:12 | Load | m1841_6 | +| ir.cpp:1841:12:1841:12 | SideEffect | m0_12 | +| ir.cpp:1841:12:1841:12 | SideEffect | ~m1841_4 | +| ir.cpp:1841:12:1841:12 | SideEffect | ~m1841_18 | +| ir.cpp:1841:12:1841:12 | Unary | r1841_10 | +| ir.cpp:1841:12:1841:12 | Unary | r1841_13 | +| ir.cpp:1841:12:1841:12 | Unary | r1841_14 | +| ir.cpp:1841:12:1841:12 | Unary | r1841_15 | +| ir.cpp:1841:12:1841:12 | Unary | r1841_16 | +| ir.cpp:1845:10:1845:12 | ChiPartial | partial:m1845_3 | +| ir.cpp:1845:10:1845:12 | ChiTotal | total:m1845_2 | +| ir.cpp:1845:10:1845:12 | SideEffect | ~m1847_18 | +| ir.cpp:1846:11:1846:11 | Address | &:r1846_1 | +| ir.cpp:1846:11:1846:11 | Address | &:r1846_1 | +| ir.cpp:1846:11:1846:11 | Arg(this) | this:r1846_1 | +| ir.cpp:1846:13:1846:13 | Address | &:r1846_4 | +| ir.cpp:1846:13:1846:13 | Address | &:r1846_4 | +| ir.cpp:1846:13:1846:13 | Arg(0) | 0:r1846_4 | +| ir.cpp:1846:13:1846:13 | ChiPartial | partial:m1846_11 | +| ir.cpp:1846:13:1846:13 | ChiTotal | total:m1846_7 | +| ir.cpp:1846:13:1846:13 | SideEffect | ~m1846_7 | +| ir.cpp:1846:13:1846:14 | CallTarget | func:r1846_3 | +| ir.cpp:1846:13:1846:14 | ChiPartial | partial:m1846_6 | +| ir.cpp:1846:13:1846:14 | ChiPartial | partial:m1846_9 | +| ir.cpp:1846:13:1846:14 | ChiTotal | total:m1845_4 | +| ir.cpp:1846:13:1846:14 | ChiTotal | total:m1846_2 | +| ir.cpp:1846:13:1846:14 | SideEffect | ~m1845_4 | +| ir.cpp:1847:9:1847:9 | Address | &:r1847_1 | +| ir.cpp:1847:9:1847:9 | Address | &:r1847_1 | +| ir.cpp:1847:9:1847:9 | Arg(this) | this:r1847_1 | +| ir.cpp:1847:9:1847:9 | ChiPartial | partial:m1847_21 | +| ir.cpp:1847:9:1847:9 | ChiTotal | total:m1846_10 | +| ir.cpp:1847:9:1847:9 | SideEffect | m1846_10 | +| ir.cpp:1847:11:1847:11 | CallTarget | func:r1847_2 | +| ir.cpp:1847:11:1847:11 | ChiPartial | partial:m1847_17 | +| ir.cpp:1847:11:1847:11 | ChiTotal | total:m1847_14 | +| ir.cpp:1847:11:1847:11 | SideEffect | ~m1847_14 | +| ir.cpp:1847:11:1847:11 | Unary | r1847_16 | +| ir.cpp:1847:13:1847:13 | Address | &:r1847_3 | +| ir.cpp:1847:13:1847:13 | Address | &:r1847_3 | +| ir.cpp:1847:13:1847:13 | Address | &:r1847_6 | +| ir.cpp:1847:13:1847:13 | Address | &:r1847_6 | +| ir.cpp:1847:13:1847:13 | Address | &:r1847_15 | +| ir.cpp:1847:13:1847:13 | Address | &:r1847_15 | +| ir.cpp:1847:13:1847:13 | Arg(0) | 0:r1847_6 | +| ir.cpp:1847:13:1847:13 | Arg(0) | 0:r1847_15 | +| ir.cpp:1847:13:1847:13 | Arg(this) | this:r1847_3 | +| ir.cpp:1847:13:1847:13 | CallTarget | func:r1847_5 | +| ir.cpp:1847:13:1847:13 | ChiPartial | partial:m1847_8 | +| ir.cpp:1847:13:1847:13 | ChiPartial | partial:m1847_11 | +| ir.cpp:1847:13:1847:13 | ChiPartial | partial:m1847_13 | +| ir.cpp:1847:13:1847:13 | ChiPartial | partial:m1847_23 | +| ir.cpp:1847:13:1847:13 | ChiTotal | total:m1846_12 | +| ir.cpp:1847:13:1847:13 | ChiTotal | total:m1847_4 | +| ir.cpp:1847:13:1847:13 | ChiTotal | total:m1847_9 | +| ir.cpp:1847:13:1847:13 | ChiTotal | total:m1847_12 | +| ir.cpp:1847:13:1847:13 | SideEffect | ~m1846_12 | +| ir.cpp:1847:13:1847:13 | SideEffect | ~m1847_9 | +| ir.cpp:1847:13:1847:13 | SideEffect | ~m1847_12 | +| ir.cpp:1847:13:1847:13 | Unary | r1847_3 | +| ir.cpp:1851:6:1851:14 | ChiPartial | partial:m1851_3 | +| ir.cpp:1851:6:1851:14 | ChiTotal | total:m1851_2 | +| ir.cpp:1851:6:1851:14 | SideEffect | m1851_3 | +| ir.cpp:1852:17:1852:18 | Address | &:r1852_1 | +| ir.cpp:1852:22:1852:40 | StoreValue | r1852_3 | +| ir.cpp:1852:22:1852:40 | Unary | r1852_2 | +| ir.cpp:1853:17:1853:23 | Address | &:r1853_1 | +| ir.cpp:1853:27:1853:34 | StoreValue | r1853_3 | +| ir.cpp:1853:27:1853:34 | Unary | r1853_2 | +| ir.cpp:1864:15:1864:15 | Address | &:r1864_5 | +| ir.cpp:1864:15:1864:15 | Address | &:r1864_5 | +| ir.cpp:1864:15:1864:15 | Address | &:r1864_7 | +| ir.cpp:1864:15:1864:15 | Address | &:r1864_7 | +| ir.cpp:1864:15:1864:15 | Address | &:r1864_15 | +| ir.cpp:1864:15:1864:15 | ChiPartial | partial:m1864_3 | +| ir.cpp:1864:15:1864:15 | ChiTotal | total:m1864_2 | +| ir.cpp:1864:15:1864:15 | Load | m1864_6 | +| ir.cpp:1864:15:1864:15 | Load | m1866_5 | +| ir.cpp:1864:15:1864:15 | SideEffect | m1864_3 | +| ir.cpp:1864:15:1864:15 | SideEffect | m1864_8 | +| ir.cpp:1864:47:1864:47 | Address | &:r1864_9 | +| ir.cpp:1864:47:1864:47 | Address | &:r1864_9 | +| ir.cpp:1864:47:1864:47 | Address | &:r1864_11 | +| ir.cpp:1864:47:1864:47 | Address | &:r1864_11 | +| ir.cpp:1864:47:1864:47 | Load | m1864_10 | +| ir.cpp:1864:47:1864:47 | SideEffect | m1864_12 | +| ir.cpp:1866:13:1866:21 | Address | &:r1866_1 | +| ir.cpp:1866:20:1866:20 | Address | &:r1866_2 | +| ir.cpp:1866:20:1866:20 | Load | m1864_10 | +| ir.cpp:1866:20:1866:20 | StoreValue | r1866_4 | +| ir.cpp:1866:20:1866:20 | Unary | r1866_3 | +| ir.cpp:1870:10:1870:14 | ChiPartial | partial:m1870_3 | +| ir.cpp:1870:10:1870:14 | ChiTotal | total:m1870_2 | +| ir.cpp:1870:10:1870:14 | SideEffect | ~m1872_12 | +| ir.cpp:1871:19:1871:19 | Address | &:r1871_1 | +| ir.cpp:1872:9:1872:9 | Address | &:r1872_1 | +| ir.cpp:1872:9:1872:9 | Address | &:r1872_1 | +| ir.cpp:1872:9:1872:9 | Arg(this) | this:r1872_1 | +| ir.cpp:1872:9:1872:9 | ChiPartial | partial:m1872_9 | +| ir.cpp:1872:9:1872:9 | ChiTotal | total:m1871_2 | +| ir.cpp:1872:9:1872:9 | SideEffect | m1871_2 | +| ir.cpp:1872:11:1872:33 | CallTarget | func:r1872_2 | +| ir.cpp:1872:11:1872:33 | ChiPartial | partial:m1872_5 | +| ir.cpp:1872:11:1872:33 | ChiTotal | total:m1870_4 | +| ir.cpp:1872:11:1872:33 | SideEffect | ~m1870_4 | +| ir.cpp:1872:35:1872:41 | Address | &:r1872_3 | +| ir.cpp:1872:35:1872:41 | Address | &:r1872_3 | +| ir.cpp:1872:35:1872:41 | Arg(0) | 0:r1872_3 | +| ir.cpp:1872:35:1872:41 | ChiPartial | partial:m1872_11 | +| ir.cpp:1872:35:1872:41 | ChiTotal | total:m1872_6 | +| ir.cpp:1872:35:1872:41 | SideEffect | ~m1872_6 | +| ir.cpp:1877:13:1877:13 | Address | &:r1877_5 | +| ir.cpp:1877:13:1877:13 | Address | &:r1877_5 | +| ir.cpp:1877:13:1877:13 | Address | &:r1877_7 | +| ir.cpp:1877:13:1877:13 | Address | &:r1877_7 | +| ir.cpp:1877:13:1877:13 | Address | &:r1877_10 | +| ir.cpp:1877:13:1877:13 | ChiPartial | partial:m1877_3 | +| ir.cpp:1877:13:1877:13 | ChiTotal | total:m1877_2 | +| ir.cpp:1877:13:1877:13 | Load | m1877_6 | +| ir.cpp:1877:13:1877:13 | Load | m1881_9 | +| ir.cpp:1877:13:1877:13 | SideEffect | m1877_3 | +| ir.cpp:1877:13:1877:13 | SideEffect | m1877_8 | +| ir.cpp:1878:13:1878:29 | Address | &:r1878_1 | +| ir.cpp:1878:13:1878:29 | Address | &:r1878_3 | +| ir.cpp:1879:13:1879:14 | Address | &:r1879_4 | +| ir.cpp:1879:13:1879:19 | ChiPartial | partial:m1879_5 | +| ir.cpp:1879:13:1879:19 | ChiTotal | total:m1878_2 | +| ir.cpp:1879:14:1879:14 | Unary | r1879_2 | +| ir.cpp:1879:14:1879:14 | Unary | r1879_3 | +| ir.cpp:1879:18:1879:19 | StoreValue | r1879_1 | +| ir.cpp:1880:13:1880:14 | Address | &:r1880_4 | +| ir.cpp:1880:13:1880:19 | ChiPartial | partial:m1880_5 | +| ir.cpp:1880:13:1880:19 | ChiTotal | total:m1878_4 | +| ir.cpp:1880:14:1880:14 | Unary | r1880_2 | +| ir.cpp:1880:14:1880:14 | Unary | r1880_3 | +| ir.cpp:1880:18:1880:19 | StoreValue | r1880_1 | +| ir.cpp:1881:13:1881:27 | Address | &:r1881_1 | +| ir.cpp:1881:20:1881:21 | Left | r1881_4 | +| ir.cpp:1881:20:1881:21 | Load | m1879_5 | +| ir.cpp:1881:20:1881:26 | StoreValue | r1881_8 | +| ir.cpp:1881:21:1881:21 | Address | &:r1881_3 | +| ir.cpp:1881:21:1881:21 | Unary | r1881_2 | +| ir.cpp:1881:25:1881:26 | Load | m1880_5 | +| ir.cpp:1881:25:1881:26 | Right | r1881_7 | +| ir.cpp:1881:26:1881:26 | Address | &:r1881_6 | +| ir.cpp:1881:26:1881:26 | Unary | r1881_5 | +| ir.cpp:1885:10:1885:14 | ChiPartial | partial:m1885_3 | +| ir.cpp:1885:10:1885:14 | ChiTotal | total:m1885_2 | +| ir.cpp:1885:10:1885:14 | SideEffect | ~m1887_5 | +| ir.cpp:1886:19:1886:19 | Address | &:r1886_1 | +| ir.cpp:1887:9:1887:9 | Address | &:r1887_1 | +| ir.cpp:1887:9:1887:9 | Address | &:r1887_1 | +| ir.cpp:1887:9:1887:9 | Arg(this) | this:r1887_1 | +| ir.cpp:1887:9:1887:9 | ChiPartial | partial:m1887_7 | +| ir.cpp:1887:9:1887:9 | ChiTotal | total:m1886_2 | +| ir.cpp:1887:9:1887:9 | SideEffect | m1886_2 | +| ir.cpp:1887:11:1887:50 | CallTarget | func:r1887_2 | +| ir.cpp:1887:11:1887:50 | ChiPartial | partial:m1887_4 | +| ir.cpp:1887:11:1887:50 | ChiTotal | total:m1885_4 | +| ir.cpp:1887:11:1887:50 | SideEffect | ~m1885_4 | +| ir.cpp:1891:24:1891:24 | Address | &:r1891_3 | +| ir.cpp:1891:24:1891:24 | Address | &:r1891_3 | +| ir.cpp:1891:24:1891:24 | SideEffect | ~m1891_6 | +| ir.cpp:1891:24:1891:24 | SideEffect | ~m1891_6 | +| ir.cpp:1891:42:1891:43 | ChiPartial | partial:m1891_5 | +| ir.cpp:1891:42:1891:43 | ChiPartial | partial:m1891_5 | +| ir.cpp:1891:42:1891:43 | ChiTotal | total:m1891_2 | +| ir.cpp:1891:42:1891:43 | ChiTotal | total:m1891_2 | +| ir.cpp:1891:42:1891:43 | StoreValue | r1891_4 | +| ir.cpp:1891:42:1891:43 | StoreValue | r1891_4 | +| ir.cpp:1893:5:1893:28 | Address | &:r1893_5 | +| ir.cpp:1893:5:1893:28 | ChiPartial | partial:m1893_3 | +| ir.cpp:1893:5:1893:28 | ChiTotal | total:m1893_2 | +| ir.cpp:1893:5:1893:28 | Load | m1896_8 | +| ir.cpp:1893:5:1893:28 | SideEffect | m1893_3 | +| ir.cpp:1894:9:1894:17 | Address | &:r1894_1 | +| ir.cpp:1894:21:1894:40 | Address | &:r1894_2 | +| ir.cpp:1894:21:1894:40 | Load | ~m1893_3 | +| ir.cpp:1894:21:1894:40 | StoreValue | r1894_3 | +| ir.cpp:1895:10:1895:19 | Address | &:r1895_1 | +| ir.cpp:1895:23:1895:43 | Address | &:r1895_2 | +| ir.cpp:1895:23:1895:43 | Load | ~m1893_3 | +| ir.cpp:1895:23:1895:43 | StoreValue | r1895_3 | +| ir.cpp:1896:5:1896:39 | Address | &:r1896_1 | +| ir.cpp:1896:12:1896:20 | Address | &:r1896_2 | +| ir.cpp:1896:12:1896:20 | Left | r1896_3 | +| ir.cpp:1896:12:1896:20 | Load | m1894_4 | +| ir.cpp:1896:12:1896:38 | StoreValue | r1896_7 | +| ir.cpp:1896:24:1896:38 | Right | r1896_6 | +| ir.cpp:1896:29:1896:38 | Address | &:r1896_4 | +| ir.cpp:1896:29:1896:38 | Load | m1895_4 | +| ir.cpp:1896:29:1896:38 | Unary | r1896_5 | +| ir.cpp:1901:5:1901:16 | Address | &:r1901_7 | +| ir.cpp:1901:5:1901:16 | ChiPartial | partial:m1901_3 | +| ir.cpp:1901:5:1901:16 | ChiTotal | total:m1901_2 | +| ir.cpp:1901:5:1901:16 | Load | m1903_4 | +| ir.cpp:1901:5:1901:16 | SideEffect | m1901_3 | +| ir.cpp:1901:22:1901:22 | Address | &:r1901_5 | +| ir.cpp:1902:9:1902:9 | Address | &:r1902_1 | +| ir.cpp:1902:9:1902:9 | Left | r1902_2 | +| ir.cpp:1902:9:1902:9 | Load | m1901_6 | +| ir.cpp:1902:9:1902:14 | Condition | r1902_4 | +| ir.cpp:1902:13:1902:14 | Right | r1902_3 | +| ir.cpp:1903:9:1903:17 | Address | &:r1903_1 | +| ir.cpp:1903:16:1903:16 | Address | &:r1903_2 | +| ir.cpp:1903:16:1903:16 | Load | m1901_6 | +| ir.cpp:1903:16:1903:16 | StoreValue | r1903_3 | +| ir.cpp:1905:9:1905:20 | CallTarget | func:r1905_1 | +| ir.cpp:1905:9:1905:20 | ChiPartial | partial:m1905_3 | +| ir.cpp:1905:9:1905:20 | ChiTotal | total:m1901_4 | +| ir.cpp:1905:9:1905:20 | SideEffect | ~m1901_4 | +| ir.cpp:1909:5:1909:17 | Address | &:r1909_8 | +| ir.cpp:1909:5:1909:17 | ChiPartial | partial:m1909_3 | +| ir.cpp:1909:5:1909:17 | ChiTotal | total:m1909_2 | +| ir.cpp:1909:5:1909:17 | Load | m1913_4 | +| ir.cpp:1909:5:1909:17 | SideEffect | m1909_3 | +| ir.cpp:1909:23:1909:23 | Address | &:r1909_5 | +| ir.cpp:1910:9:1910:9 | Address | &:r1910_1 | +| ir.cpp:1910:9:1910:9 | Left | r1910_2 | +| ir.cpp:1910:9:1910:9 | Load | m1909_6 | +| ir.cpp:1910:9:1910:14 | Condition | r1910_4 | +| ir.cpp:1910:13:1910:14 | Right | r1910_3 | +| ir.cpp:1911:9:1911:20 | CallTarget | func:r1911_1 | +| ir.cpp:1911:9:1911:20 | ChiPartial | partial:m1911_3 | +| ir.cpp:1911:9:1911:20 | ChiTotal | total:m1909_4 | +| ir.cpp:1911:9:1911:20 | SideEffect | ~m1909_4 | +| ir.cpp:1913:5:1913:13 | Address | &:r1913_1 | +| ir.cpp:1913:12:1913:12 | Address | &:r1913_2 | +| ir.cpp:1913:12:1913:12 | Load | m1909_6 | +| ir.cpp:1913:12:1913:12 | StoreValue | r1913_3 | +| ir.cpp:1916:5:1916:19 | Address | &:r1916_7 | +| ir.cpp:1916:5:1916:19 | ChiPartial | partial:m1916_3 | +| ir.cpp:1916:5:1916:19 | ChiTotal | total:m1916_2 | +| ir.cpp:1916:5:1916:19 | Load | m1917_4 | +| ir.cpp:1916:5:1916:19 | SideEffect | m1916_3 | +| ir.cpp:1916:25:1916:25 | Address | &:r1916_5 | +| ir.cpp:1917:5:1917:13 | Address | &:r1917_1 | +| ir.cpp:1917:12:1917:12 | Address | &:r1917_2 | +| ir.cpp:1917:12:1917:12 | Load | m1916_6 | +| ir.cpp:1917:12:1917:12 | StoreValue | r1917_3 | +| ir.cpp:1920:6:1920:43 | ChiPartial | partial:m1920_3 | +| ir.cpp:1920:6:1920:43 | ChiTotal | total:m1920_2 | +| ir.cpp:1920:6:1920:43 | SideEffect | ~m1927_5 | +| ir.cpp:1921:7:1921:7 | Address | &:r1921_1 | +| ir.cpp:1921:7:1921:7 | Address | &:r1921_1 | +| ir.cpp:1921:7:1921:7 | Arg(this) | this:r1921_1 | +| ir.cpp:1921:7:1921:7 | CallTarget | func:r1921_3 | +| ir.cpp:1921:7:1921:7 | ChiPartial | partial:m1921_5 | +| ir.cpp:1921:7:1921:7 | ChiPartial | partial:m1921_7 | +| ir.cpp:1921:7:1921:7 | ChiTotal | total:m1920_4 | +| ir.cpp:1921:7:1921:7 | ChiTotal | total:m1921_2 | +| ir.cpp:1921:7:1921:7 | SideEffect | ~m1920_4 | | ir.cpp:1922:9:1922:9 | Address | &:r1922_1 | -| ir.cpp:1923:5:1923:5 | Address | &:r1923_6 | -| ir.cpp:1923:9:1923:31 | CallTarget | func:r1923_1 | -| ir.cpp:1923:9:1923:31 | ChiPartial | partial:m1923_4 | -| ir.cpp:1923:9:1923:31 | ChiTotal | total:m1921_6 | -| ir.cpp:1923:9:1923:31 | SideEffect | ~m1921_6 | -| ir.cpp:1923:9:1923:31 | StoreValue | r1923_3 | -| ir.cpp:1923:33:1923:34 | Arg(0) | 0:r1923_2 | +| ir.cpp:1923:5:1923:5 | Address | &:r1923_7 | +| ir.cpp:1923:11:1923:30 | CallTarget | func:r1923_2 | +| ir.cpp:1923:11:1923:30 | ChiPartial | partial:m1923_5 | +| ir.cpp:1923:11:1923:30 | ChiTotal | total:m1921_6 | +| ir.cpp:1923:11:1923:30 | SideEffect | ~m1921_6 | +| ir.cpp:1923:11:1923:30 | StoreValue | r1923_4 | +| ir.cpp:1923:32:1923:33 | Arg(0) | 0:r1923_3 | | ir.cpp:1924:9:1924:9 | Address | &:r1924_1 | | ir.cpp:1925:5:1925:5 | Address | &:r1925_6 | -| ir.cpp:1925:9:1925:23 | CallTarget | func:r1925_1 | -| ir.cpp:1925:9:1925:23 | ChiPartial | partial:m1925_4 | -| ir.cpp:1925:9:1925:23 | ChiTotal | total:m1923_5 | -| ir.cpp:1925:9:1925:23 | SideEffect | ~m1923_5 | -| ir.cpp:1925:9:1925:23 | StoreValue | r1925_3 | -| ir.cpp:1925:25:1925:26 | Arg(0) | 0:r1925_2 | -| ir.cpp:1928:6:1928:23 | ChiPartial | partial:m1928_3 | -| ir.cpp:1928:6:1928:23 | ChiTotal | total:m1928_2 | -| ir.cpp:1928:6:1928:23 | SideEffect | m1928_3 | -| ir.cpp:1929:7:1929:7 | Address | &:r1929_1 | -| ir.cpp:1929:10:1929:10 | Address | &:r1929_3 | -| ir.cpp:1930:3:1930:3 | Address | &:r1930_5 | -| ir.cpp:1930:7:1930:7 | Address | &:r1930_2 | -| ir.cpp:1930:7:1930:7 | Address | &:r1930_2 | -| ir.cpp:1930:7:1930:12 | Load | m1930_3 | -| ir.cpp:1930:7:1930:12 | StoreValue | r1930_4 | -| ir.cpp:1930:11:1930:12 | StoreValue | r1930_1 | -| ir.cpp:1933:6:1933:38 | ChiPartial | partial:m1933_3 | -| ir.cpp:1933:6:1933:38 | ChiTotal | total:m1933_2 | -| ir.cpp:1933:6:1933:38 | SideEffect | m1933_3 | -| ir.cpp:1934:7:1934:7 | Address | &:r1934_1 | -| ir.cpp:1934:10:1934:10 | Address | &:r1934_3 | -| ir.cpp:1934:13:1934:14 | StoreValue | r1934_4 | -| ir.cpp:1935:3:1935:3 | Address | &:r1935_7 | -| ir.cpp:1935:8:1935:8 | Address | &:r1935_2 | -| ir.cpp:1935:8:1935:8 | Address | &:r1935_2 | -| ir.cpp:1935:8:1935:8 | Address | &:r1935_2 | -| ir.cpp:1935:8:1935:8 | Left | r1935_3 | -| ir.cpp:1935:8:1935:8 | Load | m1934_5 | -| ir.cpp:1935:8:1935:14 | Load | m1935_5 | -| ir.cpp:1935:8:1935:14 | StoreValue | r1935_4 | -| ir.cpp:1935:8:1935:14 | StoreValue | r1935_6 | -| ir.cpp:1935:13:1935:14 | Right | r1935_1 | -| ir.cpp:1942:15:1942:43 | Address | &:r1942_5 | -| ir.cpp:1942:15:1942:43 | ChiPartial | partial:m1942_3 | -| ir.cpp:1942:15:1942:43 | ChiTotal | total:m1942_2 | -| ir.cpp:1942:15:1942:43 | Load | m1943_4 | -| ir.cpp:1942:15:1942:43 | SideEffect | m1942_3 | -| ir.cpp:1943:9:1943:17 | Address | &:r1943_1 | -| ir.cpp:1943:16:1943:16 | StoreValue | r1943_3 | -| ir.cpp:1943:16:1943:16 | Unary | r1943_2 | -| ir.cpp:1945:14:1945:39 | Address | &:r1945_5 | -| ir.cpp:1945:14:1945:39 | ChiPartial | partial:m1945_3 | -| ir.cpp:1945:14:1945:39 | ChiTotal | total:m1945_2 | -| ir.cpp:1945:14:1945:39 | Load | m1946_4 | -| ir.cpp:1945:14:1945:39 | SideEffect | m1945_3 | -| ir.cpp:1946:9:1946:17 | Address | &:r1946_1 | -| ir.cpp:1946:16:1946:16 | Address | &:r1946_2 | -| ir.cpp:1946:16:1946:16 | Load | ~m1945_3 | -| ir.cpp:1946:16:1946:16 | StoreValue | r1946_3 | -| ir.cpp:1950:6:1950:55 | ChiPartial | partial:m1950_3 | -| ir.cpp:1950:6:1950:55 | ChiTotal | total:m1950_2 | -| ir.cpp:1950:6:1950:55 | SideEffect | ~m1965_4 | -| ir.cpp:1951:7:1951:7 | Address | &:r1951_1 | -| ir.cpp:1953:7:1953:35 | CallTarget | func:r1953_2 | -| ir.cpp:1953:7:1953:35 | ChiPartial | partial:m1953_4 | -| ir.cpp:1953:7:1953:35 | ChiTotal | total:m1950_4 | -| ir.cpp:1953:7:1953:35 | SideEffect | ~m1950_4 | -| ir.cpp:1953:7:1953:35 | Unary | r1953_3 | -| ir.cpp:1954:5:1954:36 | CallTarget | func:r1954_1 | -| ir.cpp:1954:5:1954:36 | ChiPartial | partial:m1954_3 | -| ir.cpp:1954:5:1954:36 | ChiTotal | total:m1953_5 | -| ir.cpp:1954:5:1954:36 | SideEffect | ~m1953_5 | -| ir.cpp:1954:5:1954:36 | Unary | r1954_2 | -| ir.cpp:1955:7:1955:32 | CallTarget | func:r1955_2 | -| ir.cpp:1955:7:1955:32 | ChiPartial | partial:m1955_4 | -| ir.cpp:1955:7:1955:32 | ChiTotal | total:m1954_4 | -| ir.cpp:1955:7:1955:32 | SideEffect | ~m1954_4 | -| ir.cpp:1956:5:1956:33 | CallTarget | func:r1956_1 | -| ir.cpp:1956:5:1956:33 | ChiPartial | partial:m1956_3 | -| ir.cpp:1956:5:1956:33 | ChiTotal | total:m1955_5 | -| ir.cpp:1956:5:1956:33 | SideEffect | ~m1955_5 | -| ir.cpp:1958:7:1958:7 | Address | &:r1958_1 | -| ir.cpp:1959:5:1959:5 | Address | &:r1959_7 | -| ir.cpp:1959:11:1959:39 | Address | &:r1959_3 | -| ir.cpp:1959:11:1959:39 | CallTarget | func:r1959_2 | -| ir.cpp:1959:11:1959:39 | ChiPartial | partial:m1959_4 | -| ir.cpp:1959:11:1959:39 | ChiTotal | total:m1956_4 | -| ir.cpp:1959:11:1959:39 | SideEffect | ~m1956_4 | -| ir.cpp:1959:40:1959:42 | Load | ~m1959_5 | -| ir.cpp:1959:40:1959:42 | StoreValue | r1959_6 | +| ir.cpp:1925:9:1925:31 | CallTarget | func:r1925_1 | +| ir.cpp:1925:9:1925:31 | ChiPartial | partial:m1925_4 | +| ir.cpp:1925:9:1925:31 | ChiTotal | total:m1923_6 | +| ir.cpp:1925:9:1925:31 | SideEffect | ~m1923_6 | +| ir.cpp:1925:9:1925:31 | StoreValue | r1925_3 | +| ir.cpp:1925:33:1925:34 | Arg(0) | 0:r1925_2 | +| ir.cpp:1926:9:1926:9 | Address | &:r1926_1 | +| ir.cpp:1927:5:1927:5 | Address | &:r1927_6 | +| ir.cpp:1927:9:1927:23 | CallTarget | func:r1927_1 | +| ir.cpp:1927:9:1927:23 | ChiPartial | partial:m1927_4 | +| ir.cpp:1927:9:1927:23 | ChiTotal | total:m1925_5 | +| ir.cpp:1927:9:1927:23 | SideEffect | ~m1925_5 | +| ir.cpp:1927:9:1927:23 | StoreValue | r1927_3 | +| ir.cpp:1927:25:1927:26 | Arg(0) | 0:r1927_2 | +| ir.cpp:1930:6:1930:23 | ChiPartial | partial:m1930_3 | +| ir.cpp:1930:6:1930:23 | ChiTotal | total:m1930_2 | +| ir.cpp:1930:6:1930:23 | SideEffect | m1930_3 | +| ir.cpp:1931:7:1931:7 | Address | &:r1931_1 | +| ir.cpp:1931:10:1931:10 | Address | &:r1931_3 | +| ir.cpp:1932:3:1932:3 | Address | &:r1932_5 | +| ir.cpp:1932:7:1932:7 | Address | &:r1932_2 | +| ir.cpp:1932:7:1932:7 | Address | &:r1932_2 | +| ir.cpp:1932:7:1932:12 | Load | m1932_3 | +| ir.cpp:1932:7:1932:12 | StoreValue | r1932_4 | +| ir.cpp:1932:11:1932:12 | StoreValue | r1932_1 | +| ir.cpp:1935:6:1935:38 | ChiPartial | partial:m1935_3 | +| ir.cpp:1935:6:1935:38 | ChiTotal | total:m1935_2 | +| ir.cpp:1935:6:1935:38 | SideEffect | m1935_3 | +| ir.cpp:1936:7:1936:7 | Address | &:r1936_1 | +| ir.cpp:1936:10:1936:10 | Address | &:r1936_3 | +| ir.cpp:1936:13:1936:14 | StoreValue | r1936_4 | +| ir.cpp:1937:3:1937:3 | Address | &:r1937_7 | +| ir.cpp:1937:8:1937:8 | Address | &:r1937_2 | +| ir.cpp:1937:8:1937:8 | Address | &:r1937_2 | +| ir.cpp:1937:8:1937:8 | Address | &:r1937_2 | +| ir.cpp:1937:8:1937:8 | Left | r1937_3 | +| ir.cpp:1937:8:1937:8 | Load | m1936_5 | +| ir.cpp:1937:8:1937:14 | Load | m1937_5 | +| ir.cpp:1937:8:1937:14 | StoreValue | r1937_4 | +| ir.cpp:1937:8:1937:14 | StoreValue | r1937_6 | +| ir.cpp:1937:13:1937:14 | Right | r1937_1 | +| ir.cpp:1944:15:1944:43 | Address | &:r1944_5 | +| ir.cpp:1944:15:1944:43 | ChiPartial | partial:m1944_3 | +| ir.cpp:1944:15:1944:43 | ChiTotal | total:m1944_2 | +| ir.cpp:1944:15:1944:43 | Load | m1945_4 | +| ir.cpp:1944:15:1944:43 | SideEffect | m1944_3 | +| ir.cpp:1945:9:1945:17 | Address | &:r1945_1 | +| ir.cpp:1945:16:1945:16 | StoreValue | r1945_3 | +| ir.cpp:1945:16:1945:16 | Unary | r1945_2 | +| ir.cpp:1947:14:1947:39 | Address | &:r1947_5 | +| ir.cpp:1947:14:1947:39 | ChiPartial | partial:m1947_3 | +| ir.cpp:1947:14:1947:39 | ChiTotal | total:m1947_2 | +| ir.cpp:1947:14:1947:39 | Load | m1948_4 | +| ir.cpp:1947:14:1947:39 | SideEffect | m1947_3 | +| ir.cpp:1948:9:1948:17 | Address | &:r1948_1 | +| ir.cpp:1948:16:1948:16 | Address | &:r1948_2 | +| ir.cpp:1948:16:1948:16 | Load | ~m1947_3 | +| ir.cpp:1948:16:1948:16 | StoreValue | r1948_3 | +| ir.cpp:1952:6:1952:55 | ChiPartial | partial:m1952_3 | +| ir.cpp:1952:6:1952:55 | ChiTotal | total:m1952_2 | +| ir.cpp:1952:6:1952:55 | SideEffect | ~m1967_4 | +| ir.cpp:1953:7:1953:7 | Address | &:r1953_1 | +| ir.cpp:1955:7:1955:35 | CallTarget | func:r1955_2 | +| ir.cpp:1955:7:1955:35 | ChiPartial | partial:m1955_4 | +| ir.cpp:1955:7:1955:35 | ChiTotal | total:m1952_4 | +| ir.cpp:1955:7:1955:35 | SideEffect | ~m1952_4 | +| ir.cpp:1955:7:1955:35 | Unary | r1955_3 | +| ir.cpp:1956:5:1956:36 | CallTarget | func:r1956_1 | +| ir.cpp:1956:5:1956:36 | ChiPartial | partial:m1956_3 | +| ir.cpp:1956:5:1956:36 | ChiTotal | total:m1955_5 | +| ir.cpp:1956:5:1956:36 | SideEffect | ~m1955_5 | +| ir.cpp:1956:5:1956:36 | Unary | r1956_2 | +| ir.cpp:1957:7:1957:32 | CallTarget | func:r1957_2 | +| ir.cpp:1957:7:1957:32 | ChiPartial | partial:m1957_4 | +| ir.cpp:1957:7:1957:32 | ChiTotal | total:m1956_4 | +| ir.cpp:1957:7:1957:32 | SideEffect | ~m1956_4 | +| ir.cpp:1958:5:1958:33 | CallTarget | func:r1958_1 | +| ir.cpp:1958:5:1958:33 | ChiPartial | partial:m1958_3 | +| ir.cpp:1958:5:1958:33 | ChiTotal | total:m1957_5 | +| ir.cpp:1958:5:1958:33 | SideEffect | ~m1957_5 | | ir.cpp:1960:7:1960:7 | Address | &:r1960_1 | -| ir.cpp:1961:5:1961:5 | Address | &:r1961_6 | -| ir.cpp:1961:9:1961:40 | Address | &:r1961_2 | -| ir.cpp:1961:9:1961:40 | CallTarget | func:r1961_1 | -| ir.cpp:1961:9:1961:40 | ChiPartial | partial:m1961_3 | -| ir.cpp:1961:9:1961:40 | ChiTotal | total:m1959_5 | -| ir.cpp:1961:9:1961:40 | SideEffect | ~m1959_5 | -| ir.cpp:1961:41:1961:43 | Load | ~m1961_4 | -| ir.cpp:1961:41:1961:43 | StoreValue | r1961_5 | +| ir.cpp:1961:5:1961:5 | Address | &:r1961_7 | +| ir.cpp:1961:11:1961:39 | Address | &:r1961_3 | +| ir.cpp:1961:11:1961:39 | CallTarget | func:r1961_2 | +| ir.cpp:1961:11:1961:39 | ChiPartial | partial:m1961_4 | +| ir.cpp:1961:11:1961:39 | ChiTotal | total:m1958_4 | +| ir.cpp:1961:11:1961:39 | SideEffect | ~m1958_4 | +| ir.cpp:1961:40:1961:42 | Load | ~m1961_5 | +| ir.cpp:1961:40:1961:42 | StoreValue | r1961_6 | | ir.cpp:1962:7:1962:7 | Address | &:r1962_1 | | ir.cpp:1963:5:1963:5 | Address | &:r1963_6 | -| ir.cpp:1963:11:1963:36 | CallTarget | func:r1963_2 | -| ir.cpp:1963:11:1963:36 | ChiPartial | partial:m1963_4 | -| ir.cpp:1963:11:1963:36 | ChiTotal | total:m1961_4 | -| ir.cpp:1963:11:1963:36 | SideEffect | ~m1961_4 | -| ir.cpp:1963:11:1963:36 | StoreValue | r1963_3 | +| ir.cpp:1963:9:1963:40 | Address | &:r1963_2 | +| ir.cpp:1963:9:1963:40 | CallTarget | func:r1963_1 | +| ir.cpp:1963:9:1963:40 | ChiPartial | partial:m1963_3 | +| ir.cpp:1963:9:1963:40 | ChiTotal | total:m1961_5 | +| ir.cpp:1963:9:1963:40 | SideEffect | ~m1961_5 | +| ir.cpp:1963:41:1963:43 | Load | ~m1963_4 | +| ir.cpp:1963:41:1963:43 | StoreValue | r1963_5 | | ir.cpp:1964:7:1964:7 | Address | &:r1964_1 | -| ir.cpp:1965:5:1965:5 | Address | &:r1965_5 | -| ir.cpp:1965:9:1965:37 | CallTarget | func:r1965_1 | -| ir.cpp:1965:9:1965:37 | ChiPartial | partial:m1965_3 | -| ir.cpp:1965:9:1965:37 | ChiTotal | total:m1963_5 | -| ir.cpp:1965:9:1965:37 | SideEffect | ~m1963_5 | -| ir.cpp:1965:9:1965:37 | StoreValue | r1965_2 | -| ir.cpp:1968:6:1968:18 | ChiPartial | partial:m1968_3 | -| ir.cpp:1968:6:1968:18 | ChiTotal | total:m1968_2 | -| ir.cpp:1968:6:1968:18 | SideEffect | m1968_3 | -| ir.cpp:1969:18:1969:18 | Address | &:r1969_1 | -| ir.cpp:1970:5:1970:5 | Address | &:r1970_1 | -| ir.cpp:1970:5:1970:5 | Load | m1969_2 | -| ir.cpp:1979:6:1979:24 | ChiPartial | partial:m1979_3 | -| ir.cpp:1979:6:1979:24 | ChiTotal | total:m1979_2 | -| ir.cpp:1979:6:1979:24 | SideEffect | ~m1987_5 | -| ir.cpp:1980:12:1980:12 | Address | &:r1980_1 | -| ir.cpp:1982:5:1982:19 | ChiPartial | partial:m1982_7 | -| ir.cpp:1982:5:1982:19 | ChiTotal | total:m1982_5 | -| ir.cpp:1982:7:1982:12 | CallTarget | func:r1982_2 | -| ir.cpp:1982:7:1982:12 | ChiPartial | partial:m1982_4 | -| ir.cpp:1982:7:1982:12 | ChiTotal | total:m1979_4 | -| ir.cpp:1982:7:1982:12 | SideEffect | ~m1979_4 | -| ir.cpp:1982:7:1982:12 | Unary | r1982_3 | -| ir.cpp:1982:13:1982:16 | Address | &:r1982_6 | -| ir.cpp:1983:5:1983:19 | ChiPartial | partial:m1983_7 | -| ir.cpp:1983:5:1983:19 | ChiTotal | total:m1983_5 | -| ir.cpp:1983:7:1983:12 | CallTarget | func:r1983_2 | -| ir.cpp:1983:7:1983:12 | ChiPartial | partial:m1983_4 | -| ir.cpp:1983:7:1983:12 | ChiTotal | total:m1982_8 | -| ir.cpp:1983:7:1983:12 | SideEffect | ~m1982_8 | -| ir.cpp:1983:7:1983:12 | Unary | r1983_3 | -| ir.cpp:1983:13:1983:16 | Address | &:r1983_6 | -| ir.cpp:1984:5:1984:15 | Address | &:r1984_1 | -| ir.cpp:1984:5:1984:15 | Address | &:r1984_1 | -| ir.cpp:1984:7:1984:13 | CallTarget | func:r1984_3 | -| ir.cpp:1984:7:1984:13 | ChiPartial | partial:m1984_5 | -| ir.cpp:1984:7:1984:13 | ChiTotal | total:m1983_8 | -| ir.cpp:1984:7:1984:13 | SideEffect | ~m1983_8 | -| ir.cpp:1984:7:1984:13 | StoreValue | r1984_4 | -| ir.cpp:1985:5:1985:18 | CallTarget | func:r1985_1 | -| ir.cpp:1985:5:1985:18 | ChiPartial | partial:m1985_3 | -| ir.cpp:1985:5:1985:18 | ChiTotal | total:m1984_6 | -| ir.cpp:1985:5:1985:18 | SideEffect | ~m1984_6 | -| ir.cpp:1985:5:1985:18 | Unary | r1985_2 | -| ir.cpp:1985:5:1985:25 | ChiPartial | partial:m1985_6 | -| ir.cpp:1985:5:1985:25 | ChiTotal | total:m1985_4 | -| ir.cpp:1985:19:1985:22 | Address | &:r1985_5 | -| ir.cpp:1986:5:1986:18 | CallTarget | func:r1986_1 | -| ir.cpp:1986:5:1986:18 | ChiPartial | partial:m1986_3 | -| ir.cpp:1986:5:1986:18 | ChiTotal | total:m1985_7 | -| ir.cpp:1986:5:1986:18 | SideEffect | ~m1985_7 | -| ir.cpp:1986:5:1986:18 | Unary | r1986_2 | -| ir.cpp:1986:5:1986:25 | ChiPartial | partial:m1986_6 | -| ir.cpp:1986:5:1986:25 | ChiTotal | total:m1986_4 | -| ir.cpp:1986:19:1986:22 | Address | &:r1986_5 | -| ir.cpp:1987:5:1987:19 | CallTarget | func:r1987_2 | -| ir.cpp:1987:5:1987:19 | ChiPartial | partial:m1987_4 | -| ir.cpp:1987:5:1987:19 | ChiTotal | total:m1986_7 | -| ir.cpp:1987:5:1987:19 | SideEffect | ~m1986_7 | -| ir.cpp:1987:5:1987:19 | StoreValue | r1987_3 | -| ir.cpp:1987:5:1987:21 | Address | &:r1987_1 | -| ir.cpp:1987:5:1987:21 | Address | &:r1987_1 | -| ir.cpp:1990:6:1990:21 | ChiPartial | partial:m1990_3 | -| ir.cpp:1990:6:1990:21 | ChiTotal | total:m1990_2 | -| ir.cpp:1990:6:1990:21 | SideEffect | ~m1991_6 | -| ir.cpp:1991:7:1991:7 | Address | &:r1991_1 | -| ir.cpp:1991:7:1991:7 | Address | &:r1991_1 | -| ir.cpp:1991:7:1991:7 | Arg(this) | this:r1991_1 | -| ir.cpp:1991:7:1991:7 | CallTarget | func:r1991_3 | -| ir.cpp:1991:7:1991:7 | ChiPartial | partial:m1991_5 | -| ir.cpp:1991:7:1991:7 | ChiPartial | partial:m1991_7 | -| ir.cpp:1991:7:1991:7 | ChiTotal | total:m1990_4 | -| ir.cpp:1991:7:1991:7 | ChiTotal | total:m1991_2 | -| ir.cpp:1991:7:1991:7 | SideEffect | ~m1990_4 | -| ir.cpp:1992:11:1992:13 | Address | &:r1992_1 | -| ir.cpp:1992:23:1992:45 | StoreValue | r1992_2 | -| ir.cpp:1993:5:1993:7 | Address | &:r1993_3 | -| ir.cpp:1993:13:1993:32 | StoreValue | r1993_2 | -| ir.cpp:1996:6:1996:19 | ChiPartial | partial:m1996_3 | -| ir.cpp:1996:6:1996:19 | ChiTotal | total:m1996_2 | -| ir.cpp:1996:6:1996:19 | SideEffect | ~m2000_9 | -| ir.cpp:1996:26:1996:26 | Address | &:r1996_5 | -| ir.cpp:1996:33:1996:33 | Address | &:r1996_7 | -| ir.cpp:1996:40:1996:40 | Address | &:r1996_9 | -| ir.cpp:1996:47:1996:47 | Address | &:r1996_11 | -| ir.cpp:1997:5:1997:5 | Address | &:r1997_7 | -| ir.cpp:1997:9:1997:9 | Address | &:r1997_1 | -| ir.cpp:1997:9:1997:9 | Condition | r1997_2 | -| ir.cpp:1997:9:1997:9 | Load | m1996_6 | -| ir.cpp:1997:9:1997:17 | Address | &:r1997_5 | -| ir.cpp:1997:9:1997:17 | Address | &:r1997_11 | -| ir.cpp:1997:9:1997:17 | Address | &:r1997_15 | -| ir.cpp:1997:9:1997:17 | Load | m1997_4 | -| ir.cpp:1997:9:1997:17 | Phi | from 2:m1997_12 | -| ir.cpp:1997:9:1997:17 | Phi | from 3:m1997_16 | -| ir.cpp:1997:9:1997:17 | StoreValue | r1997_6 | -| ir.cpp:1997:13:1997:13 | Address | &:r1997_9 | -| ir.cpp:1997:13:1997:13 | Load | m1996_8 | -| ir.cpp:1997:13:1997:13 | StoreValue | r1997_10 | -| ir.cpp:1997:17:1997:17 | Address | &:r1997_13 | -| ir.cpp:1997:17:1997:17 | Load | m1996_10 | -| ir.cpp:1997:17:1997:17 | StoreValue | r1997_14 | -| ir.cpp:1998:5:1998:5 | Address | &:r1998_7 | -| ir.cpp:1998:9:1998:9 | Address | &:r1998_1 | -| ir.cpp:1998:9:1998:9 | Condition | r1998_2 | -| ir.cpp:1998:9:1998:9 | Load | m1996_6 | -| ir.cpp:1998:9:1998:17 | Address | &:r1998_5 | -| ir.cpp:1998:9:1998:17 | Address | &:r1998_11 | -| ir.cpp:1998:9:1998:17 | Address | &:r1998_14 | -| ir.cpp:1998:9:1998:17 | Load | m1998_4 | -| ir.cpp:1998:9:1998:17 | Phi | from 5:m1998_12 | -| ir.cpp:1998:9:1998:17 | Phi | from 6:m1998_15 | -| ir.cpp:1998:9:1998:17 | StoreValue | r1998_6 | -| ir.cpp:1998:13:1998:13 | Address | &:r1998_9 | -| ir.cpp:1998:13:1998:13 | Load | m1996_8 | -| ir.cpp:1998:13:1998:13 | StoreValue | r1998_10 | -| ir.cpp:1998:17:1998:17 | StoreValue | r1998_13 | +| ir.cpp:1965:5:1965:5 | Address | &:r1965_6 | +| ir.cpp:1965:11:1965:36 | CallTarget | func:r1965_2 | +| ir.cpp:1965:11:1965:36 | ChiPartial | partial:m1965_4 | +| ir.cpp:1965:11:1965:36 | ChiTotal | total:m1963_4 | +| ir.cpp:1965:11:1965:36 | SideEffect | ~m1963_4 | +| ir.cpp:1965:11:1965:36 | StoreValue | r1965_3 | +| ir.cpp:1966:7:1966:7 | Address | &:r1966_1 | +| ir.cpp:1967:5:1967:5 | Address | &:r1967_5 | +| ir.cpp:1967:9:1967:37 | CallTarget | func:r1967_1 | +| ir.cpp:1967:9:1967:37 | ChiPartial | partial:m1967_3 | +| ir.cpp:1967:9:1967:37 | ChiTotal | total:m1965_5 | +| ir.cpp:1967:9:1967:37 | SideEffect | ~m1965_5 | +| ir.cpp:1967:9:1967:37 | StoreValue | r1967_2 | +| ir.cpp:1970:6:1970:18 | ChiPartial | partial:m1970_3 | +| ir.cpp:1970:6:1970:18 | ChiTotal | total:m1970_2 | +| ir.cpp:1970:6:1970:18 | SideEffect | m1970_3 | +| ir.cpp:1971:18:1971:18 | Address | &:r1971_1 | +| ir.cpp:1972:5:1972:5 | Address | &:r1972_1 | +| ir.cpp:1972:5:1972:5 | Load | m1971_2 | +| ir.cpp:1981:6:1981:24 | ChiPartial | partial:m1981_3 | +| ir.cpp:1981:6:1981:24 | ChiTotal | total:m1981_2 | +| ir.cpp:1981:6:1981:24 | SideEffect | ~m1989_5 | +| ir.cpp:1982:12:1982:12 | Address | &:r1982_1 | +| ir.cpp:1984:5:1984:19 | ChiPartial | partial:m1984_7 | +| ir.cpp:1984:5:1984:19 | ChiTotal | total:m1984_5 | +| ir.cpp:1984:7:1984:12 | CallTarget | func:r1984_2 | +| ir.cpp:1984:7:1984:12 | ChiPartial | partial:m1984_4 | +| ir.cpp:1984:7:1984:12 | ChiTotal | total:m1981_4 | +| ir.cpp:1984:7:1984:12 | SideEffect | ~m1981_4 | +| ir.cpp:1984:7:1984:12 | Unary | r1984_3 | +| ir.cpp:1984:13:1984:16 | Address | &:r1984_6 | +| ir.cpp:1985:5:1985:19 | ChiPartial | partial:m1985_7 | +| ir.cpp:1985:5:1985:19 | ChiTotal | total:m1985_5 | +| ir.cpp:1985:7:1985:12 | CallTarget | func:r1985_2 | +| ir.cpp:1985:7:1985:12 | ChiPartial | partial:m1985_4 | +| ir.cpp:1985:7:1985:12 | ChiTotal | total:m1984_8 | +| ir.cpp:1985:7:1985:12 | SideEffect | ~m1984_8 | +| ir.cpp:1985:7:1985:12 | Unary | r1985_3 | +| ir.cpp:1985:13:1985:16 | Address | &:r1985_6 | +| ir.cpp:1986:5:1986:15 | Address | &:r1986_1 | +| ir.cpp:1986:5:1986:15 | Address | &:r1986_1 | +| ir.cpp:1986:7:1986:13 | CallTarget | func:r1986_3 | +| ir.cpp:1986:7:1986:13 | ChiPartial | partial:m1986_5 | +| ir.cpp:1986:7:1986:13 | ChiTotal | total:m1985_8 | +| ir.cpp:1986:7:1986:13 | SideEffect | ~m1985_8 | +| ir.cpp:1986:7:1986:13 | StoreValue | r1986_4 | +| ir.cpp:1987:5:1987:18 | CallTarget | func:r1987_1 | +| ir.cpp:1987:5:1987:18 | ChiPartial | partial:m1987_3 | +| ir.cpp:1987:5:1987:18 | ChiTotal | total:m1986_6 | +| ir.cpp:1987:5:1987:18 | SideEffect | ~m1986_6 | +| ir.cpp:1987:5:1987:18 | Unary | r1987_2 | +| ir.cpp:1987:5:1987:25 | ChiPartial | partial:m1987_6 | +| ir.cpp:1987:5:1987:25 | ChiTotal | total:m1987_4 | +| ir.cpp:1987:19:1987:22 | Address | &:r1987_5 | +| ir.cpp:1988:5:1988:18 | CallTarget | func:r1988_1 | +| ir.cpp:1988:5:1988:18 | ChiPartial | partial:m1988_3 | +| ir.cpp:1988:5:1988:18 | ChiTotal | total:m1987_7 | +| ir.cpp:1988:5:1988:18 | SideEffect | ~m1987_7 | +| ir.cpp:1988:5:1988:18 | Unary | r1988_2 | +| ir.cpp:1988:5:1988:25 | ChiPartial | partial:m1988_6 | +| ir.cpp:1988:5:1988:25 | ChiTotal | total:m1988_4 | +| ir.cpp:1988:19:1988:22 | Address | &:r1988_5 | +| ir.cpp:1989:5:1989:19 | CallTarget | func:r1989_2 | +| ir.cpp:1989:5:1989:19 | ChiPartial | partial:m1989_4 | +| ir.cpp:1989:5:1989:19 | ChiTotal | total:m1988_7 | +| ir.cpp:1989:5:1989:19 | SideEffect | ~m1988_7 | +| ir.cpp:1989:5:1989:19 | StoreValue | r1989_3 | +| ir.cpp:1989:5:1989:21 | Address | &:r1989_1 | +| ir.cpp:1989:5:1989:21 | Address | &:r1989_1 | +| ir.cpp:1992:6:1992:21 | ChiPartial | partial:m1992_3 | +| ir.cpp:1992:6:1992:21 | ChiTotal | total:m1992_2 | +| ir.cpp:1992:6:1992:21 | SideEffect | ~m1993_6 | +| ir.cpp:1993:7:1993:7 | Address | &:r1993_1 | +| ir.cpp:1993:7:1993:7 | Address | &:r1993_1 | +| ir.cpp:1993:7:1993:7 | Arg(this) | this:r1993_1 | +| ir.cpp:1993:7:1993:7 | CallTarget | func:r1993_3 | +| ir.cpp:1993:7:1993:7 | ChiPartial | partial:m1993_5 | +| ir.cpp:1993:7:1993:7 | ChiPartial | partial:m1993_7 | +| ir.cpp:1993:7:1993:7 | ChiTotal | total:m1992_4 | +| ir.cpp:1993:7:1993:7 | ChiTotal | total:m1993_2 | +| ir.cpp:1993:7:1993:7 | SideEffect | ~m1992_4 | +| ir.cpp:1994:11:1994:13 | Address | &:r1994_1 | +| ir.cpp:1994:23:1994:45 | StoreValue | r1994_2 | +| ir.cpp:1995:5:1995:7 | Address | &:r1995_3 | +| ir.cpp:1995:13:1995:32 | StoreValue | r1995_2 | +| ir.cpp:1998:6:1998:19 | ChiPartial | partial:m1998_3 | +| ir.cpp:1998:6:1998:19 | ChiTotal | total:m1998_2 | +| ir.cpp:1998:6:1998:19 | SideEffect | ~m2002_9 | +| ir.cpp:1998:26:1998:26 | Address | &:r1998_5 | +| ir.cpp:1998:33:1998:33 | Address | &:r1998_7 | +| ir.cpp:1998:40:1998:40 | Address | &:r1998_9 | +| ir.cpp:1998:47:1998:47 | Address | &:r1998_11 | | ir.cpp:1999:5:1999:5 | Address | &:r1999_7 | | ir.cpp:1999:9:1999:9 | Address | &:r1999_1 | | ir.cpp:1999:9:1999:9 | Condition | r1999_2 | -| ir.cpp:1999:9:1999:9 | Load | m1996_6 | +| ir.cpp:1999:9:1999:9 | Load | m1998_6 | | ir.cpp:1999:9:1999:17 | Address | &:r1999_5 | -| ir.cpp:1999:9:1999:17 | Address | &:r1999_10 | -| ir.cpp:1999:9:1999:17 | Address | &:r1999_13 | +| ir.cpp:1999:9:1999:17 | Address | &:r1999_11 | +| ir.cpp:1999:9:1999:17 | Address | &:r1999_15 | | ir.cpp:1999:9:1999:17 | Load | m1999_4 | -| ir.cpp:1999:9:1999:17 | Phi | from 8:m1999_11 | -| ir.cpp:1999:9:1999:17 | Phi | from 9:m1999_14 | +| ir.cpp:1999:9:1999:17 | Phi | from 2:m1999_12 | +| ir.cpp:1999:9:1999:17 | Phi | from 3:m1999_16 | | ir.cpp:1999:9:1999:17 | StoreValue | r1999_6 | -| ir.cpp:1999:13:1999:13 | StoreValue | r1999_9 | -| ir.cpp:1999:17:1999:17 | StoreValue | r1999_12 | -| ir.cpp:2000:5:2000:19 | ChiPartial | partial:m2000_8 | -| ir.cpp:2000:5:2000:19 | ChiTotal | total:m1996_4 | -| ir.cpp:2000:6:2000:6 | Address | &:r2000_2 | -| ir.cpp:2000:6:2000:6 | Condition | r2000_3 | -| ir.cpp:2000:6:2000:6 | Load | m1996_6 | -| ir.cpp:2000:6:2000:14 | Address | &:r2000_6 | -| ir.cpp:2000:6:2000:14 | Address | &:r2000_7 | -| ir.cpp:2000:6:2000:14 | Address | &:r2000_11 | -| ir.cpp:2000:6:2000:14 | Address | &:r2000_14 | -| ir.cpp:2000:6:2000:14 | Load | m2000_5 | -| ir.cpp:2000:6:2000:14 | Phi | from 11:m2000_12 | -| ir.cpp:2000:6:2000:14 | Phi | from 12:m2000_15 | -| ir.cpp:2000:10:2000:10 | StoreValue | r2000_10 | -| ir.cpp:2000:14:2000:14 | StoreValue | r2000_13 | -| ir.cpp:2000:19:2000:19 | StoreValue | r2000_1 | -| ir.cpp:2006:6:2006:22 | ChiPartial | partial:m2006_3 | -| ir.cpp:2006:6:2006:22 | ChiTotal | total:m2006_2 | -| ir.cpp:2006:6:2006:22 | SideEffect | m2006_3 | -| ir.cpp:2006:29:2006:29 | Address | &:r2006_5 | -| ir.cpp:2006:46:2006:46 | Address | &:r2006_7 | -| ir.cpp:2006:63:2006:63 | Address | &:r2006_9 | -| ir.cpp:2006:80:2006:80 | Address | &:r2006_11 | -| ir.cpp:2007:5:2007:5 | Address | &:r2007_7 | -| ir.cpp:2007:9:2007:9 | Address | &:r2007_1 | -| ir.cpp:2007:9:2007:9 | Condition | r2007_2 | -| ir.cpp:2007:9:2007:9 | Load | m2006_6 | -| ir.cpp:2007:9:2007:17 | Address | &:r2007_5 | -| ir.cpp:2007:9:2007:17 | Address | &:r2007_11 | -| ir.cpp:2007:9:2007:17 | Address | &:r2007_15 | -| ir.cpp:2007:9:2007:17 | Load | m2007_4 | -| ir.cpp:2007:9:2007:17 | Phi | from 2:m2007_12 | -| ir.cpp:2007:9:2007:17 | Phi | from 3:m2007_16 | -| ir.cpp:2007:9:2007:17 | StoreValue | r2007_6 | -| ir.cpp:2007:13:2007:13 | Address | &:r2007_9 | -| ir.cpp:2007:13:2007:13 | Load | m2006_8 | -| ir.cpp:2007:13:2007:13 | StoreValue | r2007_10 | -| ir.cpp:2007:17:2007:17 | Address | &:r2007_13 | -| ir.cpp:2007:17:2007:17 | Load | m2006_10 | -| ir.cpp:2007:17:2007:17 | StoreValue | r2007_14 | -| ir.cpp:2008:5:2008:5 | Address | &:r2008_10 | -| ir.cpp:2008:9:2008:9 | Address | &:r2008_2 | -| ir.cpp:2008:9:2008:9 | Address | &:r2008_6 | -| ir.cpp:2008:9:2008:9 | Address | &:r2008_17 | -| ir.cpp:2008:9:2008:9 | Address | &:r2008_23 | -| ir.cpp:2008:9:2008:9 | Condition | r2008_3 | -| ir.cpp:2008:9:2008:9 | Load | m2006_6 | -| ir.cpp:2008:9:2008:9 | Load | m2008_5 | -| ir.cpp:2008:9:2008:9 | Phi | from 5:m2008_18 | -| ir.cpp:2008:9:2008:9 | Phi | from 6:m2008_24 | -| ir.cpp:2008:9:2008:9 | StoreValue | r2008_7 | -| ir.cpp:2008:9:2008:31 | Address | &:r2008_1 | -| ir.cpp:2008:9:2008:31 | Address | &:r2008_1 | -| ir.cpp:2008:9:2008:31 | Load | m2008_8 | -| ir.cpp:2008:9:2008:31 | StoreValue | r2008_9 | -| ir.cpp:2008:13:2008:13 | Address | &:r2008_12 | -| ir.cpp:2008:13:2008:13 | Address | &:r2008_12 | -| ir.cpp:2008:13:2008:13 | Address | &:r2008_13 | -| ir.cpp:2008:13:2008:13 | Load | m2006_8 | -| ir.cpp:2008:13:2008:13 | Load | m2008_15 | -| ir.cpp:2008:13:2008:13 | StoreValue | r2008_14 | -| ir.cpp:2008:13:2008:13 | StoreValue | r2008_16 | -| ir.cpp:2008:17:2008:31 | Address | &:r2008_19 | -| ir.cpp:2008:17:2008:31 | Address | &:r2008_19 | -| ir.cpp:2008:17:2008:31 | Load | m2008_21 | -| ir.cpp:2008:17:2008:31 | StoreValue | r2008_20 | -| ir.cpp:2008:17:2008:31 | StoreValue | r2008_22 | -| ir.cpp:2009:5:2009:5 | Address | &:r2009_10 | -| ir.cpp:2009:9:2009:9 | Address | &:r2009_2 | -| ir.cpp:2009:9:2009:9 | Address | &:r2009_6 | -| ir.cpp:2009:9:2009:9 | Address | &:r2009_16 | -| ir.cpp:2009:9:2009:9 | Address | &:r2009_22 | -| ir.cpp:2009:9:2009:9 | Condition | r2009_3 | -| ir.cpp:2009:9:2009:9 | Load | m2006_6 | -| ir.cpp:2009:9:2009:9 | Load | m2009_5 | -| ir.cpp:2009:9:2009:9 | Phi | from 8:m2009_17 | -| ir.cpp:2009:9:2009:9 | Phi | from 9:m2009_23 | -| ir.cpp:2009:9:2009:9 | StoreValue | r2009_7 | -| ir.cpp:2009:9:2009:45 | Address | &:r2009_1 | -| ir.cpp:2009:9:2009:45 | Address | &:r2009_1 | -| ir.cpp:2009:9:2009:45 | Load | m2009_8 | -| ir.cpp:2009:9:2009:45 | StoreValue | r2009_9 | -| ir.cpp:2009:13:2009:27 | Address | &:r2009_12 | -| ir.cpp:2009:13:2009:27 | Address | &:r2009_12 | -| ir.cpp:2009:13:2009:27 | Load | m2009_14 | -| ir.cpp:2009:13:2009:27 | StoreValue | r2009_13 | -| ir.cpp:2009:13:2009:27 | StoreValue | r2009_15 | -| ir.cpp:2009:31:2009:45 | Address | &:r2009_18 | -| ir.cpp:2009:31:2009:45 | Address | &:r2009_18 | -| ir.cpp:2009:31:2009:45 | Load | m2009_20 | -| ir.cpp:2009:31:2009:45 | StoreValue | r2009_19 | -| ir.cpp:2009:31:2009:45 | StoreValue | r2009_21 | -| ir.cpp:2010:6:2010:6 | Address | &:r2010_11 | -| ir.cpp:2010:6:2010:6 | Unary | r2010_11 | -| ir.cpp:2010:6:2010:18 | Address | &:r2010_13 | -| ir.cpp:2010:10:2010:10 | Address | &:r2010_5 | -| ir.cpp:2010:10:2010:10 | Condition | r2010_6 | -| ir.cpp:2010:10:2010:10 | Load | m2006_6 | -| ir.cpp:2010:10:2010:18 | Address | &:r2010_9 | -| ir.cpp:2010:10:2010:18 | Address | &:r2010_17 | -| ir.cpp:2010:10:2010:18 | Address | &:r2010_21 | -| ir.cpp:2010:10:2010:18 | Load | m2010_8 | -| ir.cpp:2010:10:2010:18 | Phi | from 11:m2010_18 | -| ir.cpp:2010:10:2010:18 | Phi | from 12:m2010_22 | -| ir.cpp:2010:10:2010:18 | StoreValue | r2010_10 | -| ir.cpp:2010:14:2010:14 | Address | &:r2010_15 | -| ir.cpp:2010:14:2010:14 | Load | m2006_8 | -| ir.cpp:2010:14:2010:14 | StoreValue | r2010_16 | -| ir.cpp:2010:18:2010:18 | Address | &:r2010_19 | -| ir.cpp:2010:18:2010:18 | Load | m2006_10 | -| ir.cpp:2010:18:2010:18 | StoreValue | r2010_20 | -| ir.cpp:2010:23:2010:37 | Address | &:r2010_1 | -| ir.cpp:2010:23:2010:37 | Address | &:r2010_1 | -| ir.cpp:2010:23:2010:37 | Load | m2010_3 | -| ir.cpp:2010:23:2010:37 | StoreValue | r2010_2 | -| ir.cpp:2010:23:2010:37 | StoreValue | r2010_4 | -| ir.cpp:2013:8:2013:8 | Address | &:r2013_5 | -| ir.cpp:2013:8:2013:8 | Address | &:r2013_5 | -| ir.cpp:2013:8:2013:8 | Address | &:r2013_5 | -| ir.cpp:2013:8:2013:8 | Address | &:r2013_5 | -| ir.cpp:2013:8:2013:8 | Address | &:r2013_5 | -| ir.cpp:2013:8:2013:8 | Address | &:r2013_5 | -| ir.cpp:2013:8:2013:8 | Address | &:r2013_7 | -| ir.cpp:2013:8:2013:8 | Address | &:r2013_7 | -| ir.cpp:2013:8:2013:8 | Address | &:r2013_7 | -| ir.cpp:2013:8:2013:8 | Address | &:r2013_7 | -| ir.cpp:2013:8:2013:8 | Address | &:r2013_7 | -| ir.cpp:2013:8:2013:8 | Address | &:r2013_7 | -| ir.cpp:2013:8:2013:8 | Address | &:r2013_10 | -| ir.cpp:2013:8:2013:8 | ChiPartial | partial:m2013_3 | -| ir.cpp:2013:8:2013:8 | ChiPartial | partial:m2013_3 | -| ir.cpp:2013:8:2013:8 | ChiPartial | partial:m2013_3 | -| ir.cpp:2013:8:2013:8 | ChiTotal | total:m2013_2 | -| ir.cpp:2013:8:2013:8 | ChiTotal | total:m2013_2 | -| ir.cpp:2013:8:2013:8 | ChiTotal | total:m2013_2 | -| ir.cpp:2013:8:2013:8 | Load | m0_10 | -| ir.cpp:2013:8:2013:8 | Load | m2013_6 | -| ir.cpp:2013:8:2013:8 | Load | m2013_6 | -| ir.cpp:2013:8:2013:8 | Load | m2013_6 | -| ir.cpp:2013:8:2013:8 | SideEffect | m2013_3 | -| ir.cpp:2013:8:2013:8 | SideEffect | m2013_3 | -| ir.cpp:2013:8:2013:8 | SideEffect | m2013_3 | -| ir.cpp:2013:8:2013:8 | SideEffect | m2013_8 | -| ir.cpp:2013:8:2013:8 | SideEffect | m2013_8 | -| ir.cpp:2013:8:2013:8 | SideEffect | m2013_8 | -| ir.cpp:2014:13:2014:29 | Address | &:r2014_5 | -| ir.cpp:2014:13:2014:29 | Address | &:r2014_5 | -| ir.cpp:2014:13:2014:29 | Address | &:r2014_7 | -| ir.cpp:2014:13:2014:29 | Address | &:r2014_7 | -| ir.cpp:2014:13:2014:29 | ChiPartial | partial:m2014_3 | -| ir.cpp:2014:13:2014:29 | ChiTotal | total:m2014_2 | -| ir.cpp:2014:13:2014:29 | Load | m2014_6 | -| ir.cpp:2014:13:2014:29 | SideEffect | m2014_3 | -| ir.cpp:2014:13:2014:29 | SideEffect | m2014_8 | -| ir.cpp:2017:6:2017:25 | ChiPartial | partial:m2017_3 | -| ir.cpp:2017:6:2017:25 | ChiTotal | total:m2017_2 | -| ir.cpp:2017:6:2017:25 | SideEffect | ~m2021_32 | -| ir.cpp:2017:32:2017:32 | Address | &:r2017_5 | -| ir.cpp:2017:52:2017:52 | Address | &:r2017_7 | -| ir.cpp:2017:72:2017:72 | Address | &:r2017_9 | -| ir.cpp:2017:92:2017:92 | Address | &:r2017_11 | -| ir.cpp:2018:5:2018:5 | Address | &:r2018_1 | -| ir.cpp:2018:5:2018:5 | Address | &:r2018_1 | -| ir.cpp:2018:5:2018:5 | Arg(this) | this:r2018_1 | -| ir.cpp:2018:5:2018:5 | ChiPartial | partial:m2018_16 | -| ir.cpp:2018:5:2018:5 | ChiTotal | total:m2017_12 | -| ir.cpp:2018:5:2018:5 | SideEffect | m2017_12 | -| ir.cpp:2018:7:2018:7 | CallTarget | func:r2018_2 | -| ir.cpp:2018:7:2018:7 | ChiPartial | partial:m2018_12 | -| ir.cpp:2018:7:2018:7 | ChiTotal | total:m2017_4 | -| ir.cpp:2018:7:2018:7 | SideEffect | ~m2017_4 | -| ir.cpp:2018:7:2018:7 | Unary | r2018_11 | -| ir.cpp:2018:9:2018:9 | Address | &:r2018_3 | -| ir.cpp:2018:9:2018:9 | Condition | r2018_4 | -| ir.cpp:2018:9:2018:9 | Load | m2017_6 | -| ir.cpp:2018:9:2018:17 | Address | &:r2018_7 | -| ir.cpp:2018:9:2018:17 | Address | &:r2018_10 | -| ir.cpp:2018:9:2018:17 | Address | &:r2018_20 | -| ir.cpp:2018:9:2018:17 | Address | &:r2018_23 | -| ir.cpp:2018:9:2018:17 | Arg(0) | 0:r2018_10 | -| ir.cpp:2018:9:2018:17 | Load | m2018_6 | -| ir.cpp:2018:9:2018:17 | Phi | from 2:m2018_21 | -| ir.cpp:2018:9:2018:17 | Phi | from 3:m2018_24 | -| ir.cpp:2018:9:2018:17 | SideEffect | ~m2018_13 | -| ir.cpp:2018:9:2018:17 | Unary | r2018_8 | -| ir.cpp:2018:9:2018:17 | Unary | r2018_9 | -| ir.cpp:2018:13:2018:13 | StoreValue | r2018_19 | -| ir.cpp:2018:17:2018:17 | StoreValue | r2018_22 | -| ir.cpp:2019:5:2019:5 | Address | &:r2019_1 | -| ir.cpp:2019:5:2019:5 | Address | &:r2019_1 | -| ir.cpp:2019:5:2019:5 | Arg(this) | this:r2019_1 | -| ir.cpp:2019:5:2019:5 | ChiPartial | partial:m2019_19 | -| ir.cpp:2019:5:2019:5 | ChiTotal | total:m2018_17 | -| ir.cpp:2019:5:2019:5 | SideEffect | m2018_17 | -| ir.cpp:2019:7:2019:7 | CallTarget | func:r2019_2 | -| ir.cpp:2019:7:2019:7 | ChiPartial | partial:m2019_15 | -| ir.cpp:2019:7:2019:7 | ChiTotal | total:m2019_7 | -| ir.cpp:2019:7:2019:7 | SideEffect | ~m2019_7 | -| ir.cpp:2019:7:2019:7 | Unary | r2019_14 | -| ir.cpp:2019:9:2019:9 | Address | &:r2019_4 | -| ir.cpp:2019:9:2019:9 | Address | &:r2019_9 | -| ir.cpp:2019:9:2019:9 | Address | &:r2019_35 | -| ir.cpp:2019:9:2019:9 | Address | &:r2019_46 | -| ir.cpp:2019:9:2019:9 | Condition | r2019_5 | -| ir.cpp:2019:9:2019:9 | Load | m2017_6 | -| ir.cpp:2019:9:2019:9 | Load | m2019_8 | -| ir.cpp:2019:9:2019:9 | Phi | from 5:m2019_36 | -| ir.cpp:2019:9:2019:9 | Phi | from 5:~m2019_30 | -| ir.cpp:2019:9:2019:9 | Phi | from 6:m2019_47 | -| ir.cpp:2019:9:2019:9 | Phi | from 6:~m2019_42 | -| ir.cpp:2019:9:2019:9 | StoreValue | r2019_10 | -| ir.cpp:2019:9:2019:34 | Address | &:r2019_3 | -| ir.cpp:2019:9:2019:34 | Address | &:r2019_13 | -| ir.cpp:2019:9:2019:34 | Arg(0) | 0:r2019_13 | -| ir.cpp:2019:9:2019:34 | SideEffect | ~m2019_11 | -| ir.cpp:2019:9:2019:34 | Unary | r2019_3 | -| ir.cpp:2019:9:2019:34 | Unary | r2019_12 | -| ir.cpp:2019:13:2019:13 | Address | &:r2019_22 | -| ir.cpp:2019:13:2019:13 | Address | &:r2019_22 | -| ir.cpp:2019:13:2019:13 | Address | &:r2019_22 | -| ir.cpp:2019:13:2019:13 | Address | &:r2019_27 | -| ir.cpp:2019:13:2019:13 | Arg(0) | 0:r2019_27 | -| ir.cpp:2019:13:2019:13 | Arg(this) | this:r2019_22 | -| ir.cpp:2019:13:2019:13 | CallTarget | func:r2019_24 | -| ir.cpp:2019:13:2019:13 | ChiPartial | partial:m2019_29 | -| ir.cpp:2019:13:2019:13 | ChiPartial | partial:m2019_32 | -| ir.cpp:2019:13:2019:13 | ChiTotal | total:m2018_13 | -| ir.cpp:2019:13:2019:13 | ChiTotal | total:m2019_23 | -| ir.cpp:2019:13:2019:13 | Load | m2019_33 | -| ir.cpp:2019:13:2019:13 | SideEffect | ~m2017_8 | -| ir.cpp:2019:13:2019:13 | SideEffect | ~m2018_13 | -| ir.cpp:2019:13:2019:13 | StoreValue | r2019_34 | -| ir.cpp:2019:13:2019:13 | Unary | r2019_25 | -| ir.cpp:2019:13:2019:13 | Unary | r2019_26 | -| ir.cpp:2019:17:2019:34 | Address | &:r2019_37 | -| ir.cpp:2019:17:2019:34 | Address | &:r2019_37 | -| ir.cpp:2019:17:2019:34 | Address | &:r2019_37 | -| ir.cpp:2019:17:2019:34 | Arg(this) | this:r2019_37 | -| ir.cpp:2019:17:2019:34 | CallTarget | func:r2019_39 | -| ir.cpp:2019:17:2019:34 | ChiPartial | partial:m2019_41 | -| ir.cpp:2019:17:2019:34 | ChiPartial | partial:m2019_43 | -| ir.cpp:2019:17:2019:34 | ChiTotal | total:m2018_13 | -| ir.cpp:2019:17:2019:34 | ChiTotal | total:m2019_38 | -| ir.cpp:2019:17:2019:34 | Load | m2019_44 | -| ir.cpp:2019:17:2019:34 | SideEffect | ~m2018_13 | -| ir.cpp:2019:17:2019:34 | StoreValue | r2019_45 | +| ir.cpp:1999:13:1999:13 | Address | &:r1999_9 | +| ir.cpp:1999:13:1999:13 | Load | m1998_8 | +| ir.cpp:1999:13:1999:13 | StoreValue | r1999_10 | +| ir.cpp:1999:17:1999:17 | Address | &:r1999_13 | +| ir.cpp:1999:17:1999:17 | Load | m1998_10 | +| ir.cpp:1999:17:1999:17 | StoreValue | r1999_14 | +| ir.cpp:2000:5:2000:5 | Address | &:r2000_7 | +| ir.cpp:2000:9:2000:9 | Address | &:r2000_1 | +| ir.cpp:2000:9:2000:9 | Condition | r2000_2 | +| ir.cpp:2000:9:2000:9 | Load | m1998_6 | +| ir.cpp:2000:9:2000:17 | Address | &:r2000_5 | +| ir.cpp:2000:9:2000:17 | Address | &:r2000_11 | +| ir.cpp:2000:9:2000:17 | Address | &:r2000_14 | +| ir.cpp:2000:9:2000:17 | Load | m2000_4 | +| ir.cpp:2000:9:2000:17 | Phi | from 5:m2000_12 | +| ir.cpp:2000:9:2000:17 | Phi | from 6:m2000_15 | +| ir.cpp:2000:9:2000:17 | StoreValue | r2000_6 | +| ir.cpp:2000:13:2000:13 | Address | &:r2000_9 | +| ir.cpp:2000:13:2000:13 | Load | m1998_8 | +| ir.cpp:2000:13:2000:13 | StoreValue | r2000_10 | +| ir.cpp:2000:17:2000:17 | StoreValue | r2000_13 | +| ir.cpp:2001:5:2001:5 | Address | &:r2001_7 | +| ir.cpp:2001:9:2001:9 | Address | &:r2001_1 | +| ir.cpp:2001:9:2001:9 | Condition | r2001_2 | +| ir.cpp:2001:9:2001:9 | Load | m1998_6 | +| ir.cpp:2001:9:2001:17 | Address | &:r2001_5 | +| ir.cpp:2001:9:2001:17 | Address | &:r2001_10 | +| ir.cpp:2001:9:2001:17 | Address | &:r2001_13 | +| ir.cpp:2001:9:2001:17 | Load | m2001_4 | +| ir.cpp:2001:9:2001:17 | Phi | from 8:m2001_11 | +| ir.cpp:2001:9:2001:17 | Phi | from 9:m2001_14 | +| ir.cpp:2001:9:2001:17 | StoreValue | r2001_6 | +| ir.cpp:2001:13:2001:13 | StoreValue | r2001_9 | +| ir.cpp:2001:17:2001:17 | StoreValue | r2001_12 | +| ir.cpp:2002:5:2002:19 | ChiPartial | partial:m2002_8 | +| ir.cpp:2002:5:2002:19 | ChiTotal | total:m1998_4 | +| ir.cpp:2002:6:2002:6 | Address | &:r2002_2 | +| ir.cpp:2002:6:2002:6 | Condition | r2002_3 | +| ir.cpp:2002:6:2002:6 | Load | m1998_6 | +| ir.cpp:2002:6:2002:14 | Address | &:r2002_6 | +| ir.cpp:2002:6:2002:14 | Address | &:r2002_7 | +| ir.cpp:2002:6:2002:14 | Address | &:r2002_11 | +| ir.cpp:2002:6:2002:14 | Address | &:r2002_14 | +| ir.cpp:2002:6:2002:14 | Load | m2002_5 | +| ir.cpp:2002:6:2002:14 | Phi | from 11:m2002_12 | +| ir.cpp:2002:6:2002:14 | Phi | from 12:m2002_15 | +| ir.cpp:2002:10:2002:10 | StoreValue | r2002_10 | +| ir.cpp:2002:14:2002:14 | StoreValue | r2002_13 | +| ir.cpp:2002:19:2002:19 | StoreValue | r2002_1 | +| ir.cpp:2008:6:2008:22 | ChiPartial | partial:m2008_3 | +| ir.cpp:2008:6:2008:22 | ChiTotal | total:m2008_2 | +| ir.cpp:2008:6:2008:22 | SideEffect | m2008_3 | +| ir.cpp:2008:29:2008:29 | Address | &:r2008_5 | +| ir.cpp:2008:46:2008:46 | Address | &:r2008_7 | +| ir.cpp:2008:63:2008:63 | Address | &:r2008_9 | +| ir.cpp:2008:80:2008:80 | Address | &:r2008_11 | +| ir.cpp:2009:5:2009:5 | Address | &:r2009_7 | +| ir.cpp:2009:9:2009:9 | Address | &:r2009_1 | +| ir.cpp:2009:9:2009:9 | Condition | r2009_2 | +| ir.cpp:2009:9:2009:9 | Load | m2008_6 | +| ir.cpp:2009:9:2009:17 | Address | &:r2009_5 | +| ir.cpp:2009:9:2009:17 | Address | &:r2009_11 | +| ir.cpp:2009:9:2009:17 | Address | &:r2009_15 | +| ir.cpp:2009:9:2009:17 | Load | m2009_4 | +| ir.cpp:2009:9:2009:17 | Phi | from 2:m2009_12 | +| ir.cpp:2009:9:2009:17 | Phi | from 3:m2009_16 | +| ir.cpp:2009:9:2009:17 | StoreValue | r2009_6 | +| ir.cpp:2009:13:2009:13 | Address | &:r2009_9 | +| ir.cpp:2009:13:2009:13 | Load | m2008_8 | +| ir.cpp:2009:13:2009:13 | StoreValue | r2009_10 | +| ir.cpp:2009:17:2009:17 | Address | &:r2009_13 | +| ir.cpp:2009:17:2009:17 | Load | m2008_10 | +| ir.cpp:2009:17:2009:17 | StoreValue | r2009_14 | +| ir.cpp:2010:5:2010:5 | Address | &:r2010_10 | +| ir.cpp:2010:9:2010:9 | Address | &:r2010_2 | +| ir.cpp:2010:9:2010:9 | Address | &:r2010_6 | +| ir.cpp:2010:9:2010:9 | Address | &:r2010_17 | +| ir.cpp:2010:9:2010:9 | Address | &:r2010_23 | +| ir.cpp:2010:9:2010:9 | Condition | r2010_3 | +| ir.cpp:2010:9:2010:9 | Load | m2008_6 | +| ir.cpp:2010:9:2010:9 | Load | m2010_5 | +| ir.cpp:2010:9:2010:9 | Phi | from 5:m2010_18 | +| ir.cpp:2010:9:2010:9 | Phi | from 6:m2010_24 | +| ir.cpp:2010:9:2010:9 | StoreValue | r2010_7 | +| ir.cpp:2010:9:2010:31 | Address | &:r2010_1 | +| ir.cpp:2010:9:2010:31 | Address | &:r2010_1 | +| ir.cpp:2010:9:2010:31 | Load | m2010_8 | +| ir.cpp:2010:9:2010:31 | StoreValue | r2010_9 | +| ir.cpp:2010:13:2010:13 | Address | &:r2010_12 | +| ir.cpp:2010:13:2010:13 | Address | &:r2010_12 | +| ir.cpp:2010:13:2010:13 | Address | &:r2010_13 | +| ir.cpp:2010:13:2010:13 | Load | m2008_8 | +| ir.cpp:2010:13:2010:13 | Load | m2010_15 | +| ir.cpp:2010:13:2010:13 | StoreValue | r2010_14 | +| ir.cpp:2010:13:2010:13 | StoreValue | r2010_16 | +| ir.cpp:2010:17:2010:31 | Address | &:r2010_19 | +| ir.cpp:2010:17:2010:31 | Address | &:r2010_19 | +| ir.cpp:2010:17:2010:31 | Load | m2010_21 | +| ir.cpp:2010:17:2010:31 | StoreValue | r2010_20 | +| ir.cpp:2010:17:2010:31 | StoreValue | r2010_22 | +| ir.cpp:2011:5:2011:5 | Address | &:r2011_10 | +| ir.cpp:2011:9:2011:9 | Address | &:r2011_2 | +| ir.cpp:2011:9:2011:9 | Address | &:r2011_6 | +| ir.cpp:2011:9:2011:9 | Address | &:r2011_16 | +| ir.cpp:2011:9:2011:9 | Address | &:r2011_22 | +| ir.cpp:2011:9:2011:9 | Condition | r2011_3 | +| ir.cpp:2011:9:2011:9 | Load | m2008_6 | +| ir.cpp:2011:9:2011:9 | Load | m2011_5 | +| ir.cpp:2011:9:2011:9 | Phi | from 8:m2011_17 | +| ir.cpp:2011:9:2011:9 | Phi | from 9:m2011_23 | +| ir.cpp:2011:9:2011:9 | StoreValue | r2011_7 | +| ir.cpp:2011:9:2011:45 | Address | &:r2011_1 | +| ir.cpp:2011:9:2011:45 | Address | &:r2011_1 | +| ir.cpp:2011:9:2011:45 | Load | m2011_8 | +| ir.cpp:2011:9:2011:45 | StoreValue | r2011_9 | +| ir.cpp:2011:13:2011:27 | Address | &:r2011_12 | +| ir.cpp:2011:13:2011:27 | Address | &:r2011_12 | +| ir.cpp:2011:13:2011:27 | Load | m2011_14 | +| ir.cpp:2011:13:2011:27 | StoreValue | r2011_13 | +| ir.cpp:2011:13:2011:27 | StoreValue | r2011_15 | +| ir.cpp:2011:31:2011:45 | Address | &:r2011_18 | +| ir.cpp:2011:31:2011:45 | Address | &:r2011_18 | +| ir.cpp:2011:31:2011:45 | Load | m2011_20 | +| ir.cpp:2011:31:2011:45 | StoreValue | r2011_19 | +| ir.cpp:2011:31:2011:45 | StoreValue | r2011_21 | +| ir.cpp:2012:6:2012:6 | Address | &:r2012_11 | +| ir.cpp:2012:6:2012:6 | Unary | r2012_11 | +| ir.cpp:2012:6:2012:18 | Address | &:r2012_13 | +| ir.cpp:2012:10:2012:10 | Address | &:r2012_5 | +| ir.cpp:2012:10:2012:10 | Condition | r2012_6 | +| ir.cpp:2012:10:2012:10 | Load | m2008_6 | +| ir.cpp:2012:10:2012:18 | Address | &:r2012_9 | +| ir.cpp:2012:10:2012:18 | Address | &:r2012_17 | +| ir.cpp:2012:10:2012:18 | Address | &:r2012_21 | +| ir.cpp:2012:10:2012:18 | Load | m2012_8 | +| ir.cpp:2012:10:2012:18 | Phi | from 11:m2012_18 | +| ir.cpp:2012:10:2012:18 | Phi | from 12:m2012_22 | +| ir.cpp:2012:10:2012:18 | StoreValue | r2012_10 | +| ir.cpp:2012:14:2012:14 | Address | &:r2012_15 | +| ir.cpp:2012:14:2012:14 | Load | m2008_8 | +| ir.cpp:2012:14:2012:14 | StoreValue | r2012_16 | +| ir.cpp:2012:18:2012:18 | Address | &:r2012_19 | +| ir.cpp:2012:18:2012:18 | Load | m2008_10 | +| ir.cpp:2012:18:2012:18 | StoreValue | r2012_20 | +| ir.cpp:2012:23:2012:37 | Address | &:r2012_1 | +| ir.cpp:2012:23:2012:37 | Address | &:r2012_1 | +| ir.cpp:2012:23:2012:37 | Load | m2012_3 | +| ir.cpp:2012:23:2012:37 | StoreValue | r2012_2 | +| ir.cpp:2012:23:2012:37 | StoreValue | r2012_4 | +| ir.cpp:2015:8:2015:8 | Address | &:r2015_5 | +| ir.cpp:2015:8:2015:8 | Address | &:r2015_5 | +| ir.cpp:2015:8:2015:8 | Address | &:r2015_5 | +| ir.cpp:2015:8:2015:8 | Address | &:r2015_5 | +| ir.cpp:2015:8:2015:8 | Address | &:r2015_5 | +| ir.cpp:2015:8:2015:8 | Address | &:r2015_5 | +| ir.cpp:2015:8:2015:8 | Address | &:r2015_7 | +| ir.cpp:2015:8:2015:8 | Address | &:r2015_7 | +| ir.cpp:2015:8:2015:8 | Address | &:r2015_7 | +| ir.cpp:2015:8:2015:8 | Address | &:r2015_7 | +| ir.cpp:2015:8:2015:8 | Address | &:r2015_7 | +| ir.cpp:2015:8:2015:8 | Address | &:r2015_7 | +| ir.cpp:2015:8:2015:8 | Address | &:r2015_10 | +| ir.cpp:2015:8:2015:8 | ChiPartial | partial:m2015_3 | +| ir.cpp:2015:8:2015:8 | ChiPartial | partial:m2015_3 | +| ir.cpp:2015:8:2015:8 | ChiPartial | partial:m2015_3 | +| ir.cpp:2015:8:2015:8 | ChiTotal | total:m2015_2 | +| ir.cpp:2015:8:2015:8 | ChiTotal | total:m2015_2 | +| ir.cpp:2015:8:2015:8 | ChiTotal | total:m2015_2 | +| ir.cpp:2015:8:2015:8 | Load | m0_10 | +| ir.cpp:2015:8:2015:8 | Load | m2015_6 | +| ir.cpp:2015:8:2015:8 | Load | m2015_6 | +| ir.cpp:2015:8:2015:8 | Load | m2015_6 | +| ir.cpp:2015:8:2015:8 | SideEffect | m2015_3 | +| ir.cpp:2015:8:2015:8 | SideEffect | m2015_3 | +| ir.cpp:2015:8:2015:8 | SideEffect | m2015_3 | +| ir.cpp:2015:8:2015:8 | SideEffect | m2015_8 | +| ir.cpp:2015:8:2015:8 | SideEffect | m2015_8 | +| ir.cpp:2015:8:2015:8 | SideEffect | m2015_8 | +| ir.cpp:2016:13:2016:29 | Address | &:r2016_5 | +| ir.cpp:2016:13:2016:29 | Address | &:r2016_5 | +| ir.cpp:2016:13:2016:29 | Address | &:r2016_7 | +| ir.cpp:2016:13:2016:29 | Address | &:r2016_7 | +| ir.cpp:2016:13:2016:29 | ChiPartial | partial:m2016_3 | +| ir.cpp:2016:13:2016:29 | ChiTotal | total:m2016_2 | +| ir.cpp:2016:13:2016:29 | Load | m2016_6 | +| ir.cpp:2016:13:2016:29 | SideEffect | m2016_3 | +| ir.cpp:2016:13:2016:29 | SideEffect | m2016_8 | +| ir.cpp:2019:6:2019:25 | ChiPartial | partial:m2019_3 | +| ir.cpp:2019:6:2019:25 | ChiTotal | total:m2019_2 | +| ir.cpp:2019:6:2019:25 | SideEffect | ~m2023_32 | +| ir.cpp:2019:32:2019:32 | Address | &:r2019_5 | +| ir.cpp:2019:52:2019:52 | Address | &:r2019_7 | +| ir.cpp:2019:72:2019:72 | Address | &:r2019_9 | +| ir.cpp:2019:92:2019:92 | Address | &:r2019_11 | | ir.cpp:2020:5:2020:5 | Address | &:r2020_1 | | ir.cpp:2020:5:2020:5 | Address | &:r2020_1 | | ir.cpp:2020:5:2020:5 | Arg(this) | this:r2020_1 | -| ir.cpp:2020:5:2020:5 | ChiPartial | partial:m2020_19 | -| ir.cpp:2020:5:2020:5 | ChiTotal | total:m2019_20 | -| ir.cpp:2020:5:2020:5 | SideEffect | m2019_20 | +| ir.cpp:2020:5:2020:5 | ChiPartial | partial:m2020_16 | +| ir.cpp:2020:5:2020:5 | ChiTotal | total:m2019_12 | +| ir.cpp:2020:5:2020:5 | SideEffect | m2019_12 | | ir.cpp:2020:7:2020:7 | CallTarget | func:r2020_2 | -| ir.cpp:2020:7:2020:7 | ChiPartial | partial:m2020_15 | -| ir.cpp:2020:7:2020:7 | ChiTotal | total:m2020_7 | -| ir.cpp:2020:7:2020:7 | SideEffect | ~m2020_7 | -| ir.cpp:2020:7:2020:7 | Unary | r2020_14 | -| ir.cpp:2020:9:2020:9 | Address | &:r2020_4 | -| ir.cpp:2020:9:2020:9 | Address | &:r2020_9 | -| ir.cpp:2020:9:2020:9 | Address | &:r2020_31 | -| ir.cpp:2020:9:2020:9 | Address | &:r2020_42 | -| ir.cpp:2020:9:2020:9 | Condition | r2020_5 | -| ir.cpp:2020:9:2020:9 | Load | m2017_6 | -| ir.cpp:2020:9:2020:9 | Load | m2020_8 | -| ir.cpp:2020:9:2020:9 | Phi | from 8:m2020_32 | -| ir.cpp:2020:9:2020:9 | Phi | from 8:~m2020_27 | -| ir.cpp:2020:9:2020:9 | Phi | from 9:m2020_43 | -| ir.cpp:2020:9:2020:9 | Phi | from 9:~m2020_38 | -| ir.cpp:2020:9:2020:9 | StoreValue | r2020_10 | -| ir.cpp:2020:9:2020:51 | Address | &:r2020_3 | -| ir.cpp:2020:9:2020:51 | Address | &:r2020_13 | -| ir.cpp:2020:9:2020:51 | Arg(0) | 0:r2020_13 | -| ir.cpp:2020:9:2020:51 | SideEffect | ~m2020_11 | -| ir.cpp:2020:9:2020:51 | Unary | r2020_3 | -| ir.cpp:2020:9:2020:51 | Unary | r2020_12 | -| ir.cpp:2020:13:2020:30 | Address | &:r2020_22 | -| ir.cpp:2020:13:2020:30 | Address | &:r2020_22 | -| ir.cpp:2020:13:2020:30 | Address | &:r2020_22 | -| ir.cpp:2020:13:2020:30 | Arg(this) | this:r2020_22 | -| ir.cpp:2020:13:2020:30 | CallTarget | func:r2020_24 | -| ir.cpp:2020:13:2020:30 | ChiPartial | partial:m2020_26 | -| ir.cpp:2020:13:2020:30 | ChiPartial | partial:m2020_28 | -| ir.cpp:2020:13:2020:30 | ChiTotal | total:m2019_16 | -| ir.cpp:2020:13:2020:30 | ChiTotal | total:m2020_23 | -| ir.cpp:2020:13:2020:30 | Load | m2020_29 | -| ir.cpp:2020:13:2020:30 | SideEffect | ~m2019_16 | -| ir.cpp:2020:13:2020:30 | StoreValue | r2020_30 | -| ir.cpp:2020:34:2020:51 | Address | &:r2020_33 | -| ir.cpp:2020:34:2020:51 | Address | &:r2020_33 | -| ir.cpp:2020:34:2020:51 | Address | &:r2020_33 | -| ir.cpp:2020:34:2020:51 | Arg(this) | this:r2020_33 | -| ir.cpp:2020:34:2020:51 | CallTarget | func:r2020_35 | -| ir.cpp:2020:34:2020:51 | ChiPartial | partial:m2020_37 | -| ir.cpp:2020:34:2020:51 | ChiPartial | partial:m2020_39 | -| ir.cpp:2020:34:2020:51 | ChiTotal | total:m2019_16 | -| ir.cpp:2020:34:2020:51 | ChiTotal | total:m2020_34 | -| ir.cpp:2020:34:2020:51 | Load | m2020_40 | -| ir.cpp:2020:34:2020:51 | SideEffect | ~m2019_16 | -| ir.cpp:2020:34:2020:51 | StoreValue | r2020_41 | -| ir.cpp:2021:5:2021:19 | ChiPartial | partial:m2021_35 | -| ir.cpp:2021:5:2021:19 | ChiTotal | total:m2021_17 | -| ir.cpp:2021:5:2021:19 | SideEffect | m2021_17 | -| ir.cpp:2021:6:2021:6 | Address | &:r2021_1 | -| ir.cpp:2021:6:2021:6 | Address | &:r2021_1 | -| ir.cpp:2021:6:2021:6 | Arg(this) | this:r2021_1 | -| ir.cpp:2021:6:2021:6 | ChiPartial | partial:m2021_16 | -| ir.cpp:2021:6:2021:6 | ChiTotal | total:m2020_20 | -| ir.cpp:2021:6:2021:6 | SideEffect | m2020_20 | -| ir.cpp:2021:8:2021:8 | CallTarget | func:r2021_2 | -| ir.cpp:2021:8:2021:8 | ChiPartial | partial:m2021_12 | -| ir.cpp:2021:8:2021:8 | ChiTotal | total:m2020_16 | -| ir.cpp:2021:8:2021:8 | SideEffect | ~m2020_16 | -| ir.cpp:2021:8:2021:8 | Unary | r2021_11 | -| ir.cpp:2021:8:2021:19 | Address | &:r2021_18 | -| ir.cpp:2021:8:2021:19 | Address | &:r2021_18 | -| ir.cpp:2021:8:2021:19 | Arg(this) | this:r2021_18 | -| ir.cpp:2021:10:2021:10 | Address | &:r2021_3 | -| ir.cpp:2021:10:2021:10 | Condition | r2021_4 | -| ir.cpp:2021:10:2021:10 | Load | m2017_6 | -| ir.cpp:2021:10:2021:18 | Address | &:r2021_7 | -| ir.cpp:2021:10:2021:18 | Address | &:r2021_10 | -| ir.cpp:2021:10:2021:18 | Address | &:r2021_39 | -| ir.cpp:2021:10:2021:18 | Address | &:r2021_42 | -| ir.cpp:2021:10:2021:18 | Arg(0) | 0:r2021_10 | -| ir.cpp:2021:10:2021:18 | Load | m2021_6 | -| ir.cpp:2021:10:2021:18 | Phi | from 11:m2021_40 | -| ir.cpp:2021:10:2021:18 | Phi | from 12:m2021_43 | -| ir.cpp:2021:10:2021:18 | SideEffect | ~m2021_13 | -| ir.cpp:2021:10:2021:18 | Unary | r2021_8 | -| ir.cpp:2021:10:2021:18 | Unary | r2021_9 | -| ir.cpp:2021:14:2021:14 | StoreValue | r2021_38 | -| ir.cpp:2021:18:2021:18 | StoreValue | r2021_41 | -| ir.cpp:2021:21:2021:21 | CallTarget | func:r2021_19 | -| ir.cpp:2021:21:2021:21 | ChiPartial | partial:m2021_31 | -| ir.cpp:2021:21:2021:21 | ChiTotal | total:m2021_25 | -| ir.cpp:2021:21:2021:21 | SideEffect | ~m2021_25 | -| ir.cpp:2021:21:2021:21 | Unary | r2021_30 | -| ir.cpp:2021:23:2021:40 | Address | &:r2021_20 | -| ir.cpp:2021:23:2021:40 | Address | &:r2021_20 | -| ir.cpp:2021:23:2021:40 | Address | &:r2021_29 | -| ir.cpp:2021:23:2021:40 | Arg(0) | 0:r2021_29 | -| ir.cpp:2021:23:2021:40 | Arg(this) | this:r2021_20 | -| ir.cpp:2021:23:2021:40 | CallTarget | func:r2021_22 | -| ir.cpp:2021:23:2021:40 | ChiPartial | partial:m2021_24 | -| ir.cpp:2021:23:2021:40 | ChiPartial | partial:m2021_26 | -| ir.cpp:2021:23:2021:40 | ChiTotal | total:m2021_13 | -| ir.cpp:2021:23:2021:40 | ChiTotal | total:m2021_21 | -| ir.cpp:2021:23:2021:40 | SideEffect | ~m2021_13 | -| ir.cpp:2021:23:2021:40 | SideEffect | ~m2021_27 | -| ir.cpp:2021:23:2021:40 | Unary | r2021_20 | -| ir.cpp:2021:23:2021:40 | Unary | r2021_28 | -| ir.cpp:2026:14:2026:22 | Address | &:r2026_7 | -| ir.cpp:2026:14:2026:22 | ChiPartial | partial:m2026_3 | -| ir.cpp:2026:14:2026:22 | ChiTotal | total:m2026_2 | -| ir.cpp:2026:14:2026:22 | Load | m2031_2 | -| ir.cpp:2026:14:2026:22 | SideEffect | ~m2028_6 | -| ir.cpp:2026:37:2026:37 | Address | &:r2026_5 | -| ir.cpp:2027:16:2027:16 | Address | &:r2027_1 | -| ir.cpp:2028:3:2028:3 | Address | &:r2028_10 | -| ir.cpp:2028:7:2028:7 | Address | &:r2028_1 | -| ir.cpp:2028:7:2028:7 | Left | r2028_2 | -| ir.cpp:2028:7:2028:7 | Load | m2026_6 | -| ir.cpp:2028:7:2028:13 | Condition | r2028_4 | -| ir.cpp:2028:7:2030:28 | Address | &:r2028_8 | -| ir.cpp:2028:7:2030:28 | Address | &:r2028_12 | -| ir.cpp:2028:7:2030:28 | Address | &:r2028_14 | -| ir.cpp:2028:7:2030:28 | Load | m2028_7 | -| ir.cpp:2028:7:2030:28 | Phi | from 2:m2028_13 | -| ir.cpp:2028:7:2030:28 | Phi | from 2:~m2029_6 | -| ir.cpp:2028:7:2030:28 | Phi | from 3:m2028_15 | -| ir.cpp:2028:7:2030:28 | Phi | from 3:~m2030_6 | -| ir.cpp:2028:7:2030:28 | StoreValue | r2028_9 | -| ir.cpp:2028:11:2028:13 | Right | r2028_3 | -| ir.cpp:2029:6:2029:20 | CallTarget | func:r2029_1 | -| ir.cpp:2029:6:2029:20 | ChiPartial | partial:m2029_5 | -| ir.cpp:2029:6:2029:20 | ChiTotal | total:m2026_4 | -| ir.cpp:2029:6:2029:20 | SideEffect | ~m2026_4 | -| ir.cpp:2029:6:2029:26 | StoreValue | r2029_9 | -| ir.cpp:2029:22:2029:22 | Address | &:r2029_2 | -| ir.cpp:2029:22:2029:22 | Arg(0) | 0:r2029_3 | -| ir.cpp:2029:22:2029:22 | Load | m2026_6 | -| ir.cpp:2029:26:2029:26 | Address | &:r2029_7 | -| ir.cpp:2029:26:2029:26 | Load | m2026_6 | -| ir.cpp:2029:26:2029:26 | Unary | r2029_8 | -| ir.cpp:2030:5:2030:28 | StoreValue | r2030_9 | -| ir.cpp:2030:6:2030:20 | CallTarget | func:r2030_1 | -| ir.cpp:2030:6:2030:20 | ChiPartial | partial:m2030_5 | -| ir.cpp:2030:6:2030:20 | ChiTotal | total:m2026_4 | -| ir.cpp:2030:6:2030:20 | SideEffect | ~m2026_4 | -| ir.cpp:2030:6:2030:27 | Unary | r2030_8 | -| ir.cpp:2030:22:2030:22 | Address | &:r2030_2 | -| ir.cpp:2030:22:2030:22 | Arg(0) | 0:r2030_3 | -| ir.cpp:2030:22:2030:22 | Load | m2026_6 | -| ir.cpp:2030:26:2030:27 | Unary | r2030_7 | -| ir.cpp:2031:1:2031:1 | Address | &:r2031_1 | -| ir.cpp:2033:6:2033:17 | ChiPartial | partial:m2033_3 | -| ir.cpp:2033:6:2033:17 | ChiTotal | total:m2033_2 | -| ir.cpp:2033:6:2033:17 | SideEffect | ~m2036_6 | -| ir.cpp:2034:8:2034:8 | Address | &:r2034_1 | -| ir.cpp:2034:12:2034:18 | Address | &:r2034_4 | -| ir.cpp:2034:12:2034:18 | Arg(0) | 0:r2034_3 | -| ir.cpp:2034:12:2034:18 | CallTarget | func:r2034_2 | -| ir.cpp:2034:12:2034:18 | ChiPartial | partial:m2034_5 | -| ir.cpp:2034:12:2034:18 | ChiTotal | total:m2033_4 | -| ir.cpp:2034:12:2034:18 | SideEffect | ~m2033_4 | -| ir.cpp:2034:12:2034:18 | StoreValue | r2034_8 | -| ir.cpp:2034:12:2034:18 | Unary | r2034_4 | -| ir.cpp:2035:3:2035:4 | Address | &:r2035_4 | -| ir.cpp:2035:3:2035:8 | ChiPartial | partial:m2035_5 | -| ir.cpp:2035:3:2035:8 | ChiTotal | total:m2034_7 | -| ir.cpp:2035:4:2035:4 | Address | &:r2035_2 | -| ir.cpp:2035:4:2035:4 | Load | m2034_9 | -| ir.cpp:2035:4:2035:4 | Unary | r2035_3 | -| ir.cpp:2035:8:2035:8 | StoreValue | r2035_1 | -| ir.cpp:2036:3:2036:10 | CallTarget | func:r2036_1 | -| ir.cpp:2036:3:2036:10 | ChiPartial | partial:m2036_5 | -| ir.cpp:2036:3:2036:10 | ChiTotal | total:m2034_6 | -| ir.cpp:2036:3:2036:10 | SideEffect | ~m2034_6 | -| ir.cpp:2036:10:2036:10 | Address | &:r2036_2 | -| ir.cpp:2036:10:2036:10 | Arg(0) | 0:r2036_3 | -| ir.cpp:2036:10:2036:10 | Load | m2034_9 | -| ir.cpp:2039:7:2039:7 | Address | &:r2039_5 | -| ir.cpp:2039:7:2039:7 | Address | &:r2039_5 | -| ir.cpp:2039:7:2039:7 | Address | &:r2039_7 | -| ir.cpp:2039:7:2039:7 | Address | &:r2039_7 | -| ir.cpp:2039:7:2039:7 | ChiPartial | partial:m2039_3 | -| ir.cpp:2039:7:2039:7 | ChiTotal | total:m2039_2 | -| ir.cpp:2039:7:2039:7 | Load | m2039_6 | -| ir.cpp:2039:7:2039:7 | SideEffect | m2039_3 | -| ir.cpp:2039:7:2039:7 | SideEffect | m2039_8 | -| ir.cpp:2041:10:2041:24 | ChiPartial | partial:m2041_3 | -| ir.cpp:2041:10:2041:24 | ChiTotal | total:m2041_2 | -| ir.cpp:2041:10:2041:24 | SideEffect | m2041_3 | -| ir.cpp:2041:32:2041:32 | Address | &:r2041_5 | -| ir.cpp:2041:32:2041:32 | Address | &:r2041_5 | -| ir.cpp:2041:32:2041:32 | Address | &:r2041_7 | -| ir.cpp:2041:32:2041:32 | Address | &:r2041_7 | -| ir.cpp:2041:32:2041:32 | Load | m2041_6 | -| ir.cpp:2041:32:2041:32 | SideEffect | m2041_8 | -| ir.cpp:2043:13:2043:18 | Address | &:r2043_5 | -| ir.cpp:2043:13:2043:18 | Address | &:r2043_5 | -| ir.cpp:2043:13:2043:18 | Address | &:r2043_7 | -| ir.cpp:2043:13:2043:18 | Address | &:r2043_7 | -| ir.cpp:2043:13:2043:18 | ChiPartial | partial:m2043_3 | -| ir.cpp:2043:13:2043:18 | ChiTotal | total:m2043_2 | -| ir.cpp:2043:13:2043:18 | Load | m2043_6 | -| ir.cpp:2043:13:2043:18 | SideEffect | m2043_3 | -| ir.cpp:2043:13:2043:18 | SideEffect | m2043_8 | -| ir.cpp:2046:7:2046:7 | Address | &:r2046_5 | -| ir.cpp:2046:7:2046:7 | Address | &:r2046_5 | -| ir.cpp:2046:7:2046:7 | Address | &:r2046_7 | -| ir.cpp:2046:7:2046:7 | Address | &:r2046_7 | -| ir.cpp:2046:7:2046:7 | Address | &:r2046_9 | -| ir.cpp:2046:7:2046:7 | Arg(this) | this:r2046_9 | -| ir.cpp:2046:7:2046:7 | CallTarget | func:r2046_10 | -| ir.cpp:2046:7:2046:7 | ChiPartial | partial:m2046_3 | -| ir.cpp:2046:7:2046:7 | ChiPartial | partial:m2046_12 | -| ir.cpp:2046:7:2046:7 | ChiPartial | partial:m2046_14 | -| ir.cpp:2046:7:2046:7 | ChiTotal | total:m2046_2 | -| ir.cpp:2046:7:2046:7 | ChiTotal | total:m2046_4 | -| ir.cpp:2046:7:2046:7 | ChiTotal | total:m2046_8 | -| ir.cpp:2046:7:2046:7 | Load | m2046_6 | -| ir.cpp:2046:7:2046:7 | SideEffect | m2046_15 | -| ir.cpp:2046:7:2046:7 | SideEffect | ~m2046_4 | -| ir.cpp:2046:7:2046:7 | SideEffect | ~m2046_13 | -| ir.cpp:2046:7:2046:7 | Unary | m2046_6 | -| ir.cpp:2049:5:2049:13 | Address | &:r2049_5 | -| ir.cpp:2049:5:2049:13 | Address | &:r2049_5 | -| ir.cpp:2049:5:2049:13 | Address | &:r2049_7 | -| ir.cpp:2049:5:2049:13 | Address | &:r2049_7 | -| ir.cpp:2049:5:2049:13 | ChiPartial | partial:m2049_3 | -| ir.cpp:2049:5:2049:13 | ChiTotal | total:m2049_2 | -| ir.cpp:2049:5:2049:13 | Load | m2049_6 | -| ir.cpp:2049:5:2049:13 | SideEffect | m2049_8 | -| ir.cpp:2049:5:2049:13 | SideEffect | ~m2049_14 | -| ir.cpp:2049:5:2049:13 | Unary | m2049_6 | -| ir.cpp:2049:18:2049:18 | Arg(this) | this:r2049_10 | -| ir.cpp:2049:18:2049:18 | CallTarget | func:r2049_11 | -| ir.cpp:2049:18:2049:18 | ChiPartial | partial:m2049_13 | -| ir.cpp:2049:18:2049:18 | ChiTotal | total:m2049_4 | -| ir.cpp:2049:18:2049:18 | SideEffect | ~m2049_4 | -| ir.cpp:2051:10:2051:24 | ChiPartial | partial:m2051_3 | -| ir.cpp:2051:10:2051:24 | ChiTotal | total:m2051_2 | -| ir.cpp:2051:10:2051:24 | SideEffect | m2051_3 | -| ir.cpp:2051:32:2051:32 | Address | &:r2051_5 | -| ir.cpp:2051:32:2051:32 | Address | &:r2051_5 | -| ir.cpp:2051:32:2051:32 | Address | &:r2051_7 | -| ir.cpp:2051:32:2051:32 | Address | &:r2051_7 | -| ir.cpp:2051:32:2051:32 | Load | m2051_6 | -| ir.cpp:2051:32:2051:32 | SideEffect | m2051_8 | -| ir.cpp:2056:5:2056:18 | Address | &:r2056_5 | -| ir.cpp:2056:5:2056:18 | ChiPartial | partial:m2056_3 | -| ir.cpp:2056:5:2056:18 | ChiTotal | total:m2056_2 | -| ir.cpp:2056:5:2056:18 | Load | m2066_2 | -| ir.cpp:2056:5:2056:18 | SideEffect | ~m2065_6 | -| ir.cpp:2058:12:2058:13 | Address | &:r2058_1 | -| ir.cpp:2058:17:2058:27 | Address | &:r2058_4 | -| ir.cpp:2058:17:2058:27 | Address | &:r2058_8 | -| ir.cpp:2058:17:2058:27 | Arg(0) | 0:r2058_3 | -| ir.cpp:2058:17:2058:27 | Arg(this) | this:r2058_8 | -| ir.cpp:2058:17:2058:27 | CallTarget | func:r2058_2 | -| ir.cpp:2058:17:2058:27 | CallTarget | func:r2058_9 | -| ir.cpp:2058:17:2058:27 | ChiPartial | partial:m2058_5 | -| ir.cpp:2058:17:2058:27 | ChiPartial | partial:m2058_11 | -| ir.cpp:2058:17:2058:27 | ChiPartial | partial:m2058_13 | -| ir.cpp:2058:17:2058:27 | ChiTotal | total:m2056_4 | -| ir.cpp:2058:17:2058:27 | ChiTotal | total:m2058_6 | -| ir.cpp:2058:17:2058:27 | ChiTotal | total:m2058_7 | -| ir.cpp:2058:17:2058:27 | SideEffect | ~m2056_4 | -| ir.cpp:2058:17:2058:27 | SideEffect | ~m2058_6 | -| ir.cpp:2058:17:2058:27 | StoreValue | r2058_8 | -| ir.cpp:2058:17:2058:27 | Unary | r2058_4 | -| ir.cpp:2059:5:2059:13 | CallTarget | func:r2059_1 | -| ir.cpp:2059:5:2059:13 | ChiPartial | partial:m2059_5 | -| ir.cpp:2059:5:2059:13 | ChiTotal | total:m2058_12 | -| ir.cpp:2059:5:2059:13 | SideEffect | ~m2058_12 | -| ir.cpp:2059:12:2059:13 | Address | &:r2059_2 | -| ir.cpp:2059:12:2059:13 | Arg(0) | 0:r2059_3 | -| ir.cpp:2059:12:2059:13 | Load | m2058_15 | -| ir.cpp:2061:12:2061:13 | Address | &:r2061_1 | -| ir.cpp:2061:17:2061:30 | Address | &:r2061_4 | -| ir.cpp:2061:17:2061:30 | Address | &:r2061_8 | -| ir.cpp:2061:17:2061:30 | Arg(0) | 0:r2061_3 | -| ir.cpp:2061:17:2061:30 | Arg(this) | this:r2061_8 | -| ir.cpp:2061:17:2061:30 | CallTarget | func:r2061_2 | -| ir.cpp:2061:17:2061:30 | CallTarget | func:r2061_9 | -| ir.cpp:2061:17:2061:30 | ChiPartial | partial:m2061_5 | -| ir.cpp:2061:17:2061:30 | ChiPartial | partial:m2061_11 | -| ir.cpp:2061:17:2061:30 | ChiPartial | partial:m2061_13 | -| ir.cpp:2061:17:2061:30 | ChiTotal | total:m2059_6 | -| ir.cpp:2061:17:2061:30 | ChiTotal | total:m2061_6 | -| ir.cpp:2061:17:2061:30 | ChiTotal | total:m2061_7 | -| ir.cpp:2061:17:2061:30 | SideEffect | ~m2059_6 | -| ir.cpp:2061:17:2061:30 | SideEffect | ~m2061_6 | -| ir.cpp:2061:17:2061:30 | StoreValue | r2061_15 | -| ir.cpp:2061:17:2061:30 | Unary | r2061_4 | -| ir.cpp:2061:17:2061:30 | Unary | r2061_8 | -| ir.cpp:2062:5:2062:13 | CallTarget | func:r2062_1 | -| ir.cpp:2062:5:2062:13 | ChiPartial | partial:m2062_5 | -| ir.cpp:2062:5:2062:13 | ChiTotal | total:m2061_12 | -| ir.cpp:2062:5:2062:13 | SideEffect | ~m2061_12 | -| ir.cpp:2062:12:2062:13 | Address | &:r2062_2 | -| ir.cpp:2062:12:2062:13 | Arg(0) | 0:r2062_3 | -| ir.cpp:2062:12:2062:13 | Load | m2061_16 | -| ir.cpp:2064:15:2064:15 | Address | &:r2064_1 | -| ir.cpp:2064:19:2064:32 | Address | &:r2064_4 | -| ir.cpp:2064:19:2064:32 | Address | &:r2064_8 | -| ir.cpp:2064:19:2064:32 | Arg(0) | 0:r2064_3 | -| ir.cpp:2064:19:2064:32 | Arg(this) | this:r2064_8 | -| ir.cpp:2064:19:2064:32 | CallTarget | func:r2064_2 | -| ir.cpp:2064:19:2064:32 | CallTarget | func:r2064_9 | -| ir.cpp:2064:19:2064:32 | ChiPartial | partial:m2064_5 | -| ir.cpp:2064:19:2064:32 | ChiPartial | partial:m2064_11 | -| ir.cpp:2064:19:2064:32 | ChiPartial | partial:m2064_13 | -| ir.cpp:2064:19:2064:32 | ChiTotal | total:m2062_6 | -| ir.cpp:2064:19:2064:32 | ChiTotal | total:m2064_6 | -| ir.cpp:2064:19:2064:32 | ChiTotal | total:m2064_7 | -| ir.cpp:2064:19:2064:32 | SideEffect | ~m2062_6 | -| ir.cpp:2064:19:2064:32 | SideEffect | ~m2064_6 | -| ir.cpp:2064:19:2064:32 | StoreValue | r2064_8 | -| ir.cpp:2064:19:2064:32 | Unary | r2064_4 | -| ir.cpp:2065:5:2065:12 | CallTarget | func:r2065_1 | -| ir.cpp:2065:5:2065:12 | ChiPartial | partial:m2065_5 | -| ir.cpp:2065:5:2065:12 | ChiTotal | total:m2064_12 | -| ir.cpp:2065:5:2065:12 | SideEffect | ~m2064_12 | -| ir.cpp:2065:12:2065:12 | Address | &:r2065_2 | -| ir.cpp:2065:12:2065:12 | Arg(0) | 0:r2065_3 | -| ir.cpp:2065:12:2065:12 | Load | m2064_15 | -| ir.cpp:2066:1:2066:1 | Address | &:r2066_1 | -| ir.cpp:2070:6:2070:26 | ChiPartial | partial:m2070_3 | -| ir.cpp:2070:6:2070:26 | ChiTotal | total:m2070_2 | -| ir.cpp:2070:6:2070:26 | SideEffect | ~m2072_5 | -| ir.cpp:2071:13:2071:13 | Address | &:r2071_1 | -| ir.cpp:2071:16:2071:19 | StoreValue | r2071_2 | -| ir.cpp:2072:3:2072:27 | CallTarget | func:r2072_1 | -| ir.cpp:2072:3:2072:27 | ChiPartial | partial:m2072_4 | -| ir.cpp:2072:3:2072:27 | ChiTotal | total:m2070_4 | -| ir.cpp:2072:3:2072:27 | SideEffect | ~m2070_4 | -| ir.cpp:2072:29:2072:29 | Arg(0) | 0:r2072_2 | -| ir.cpp:2077:5:2077:11 | Address | &:r2077_6 | -| ir.cpp:2077:5:2077:11 | ChiPartial | partial:m2077_3 | -| ir.cpp:2077:5:2077:11 | ChiTotal | total:m2077_2 | -| ir.cpp:2077:5:2077:11 | Load | m2082_4 | -| ir.cpp:2077:5:2077:11 | SideEffect | ~m2081_4 | -| ir.cpp:2078:9:2078:9 | Address | &:r2078_1 | -| ir.cpp:2078:13:2078:15 | CallTarget | func:r2078_2 | -| ir.cpp:2078:13:2078:15 | ChiPartial | partial:m2078_6 | -| ir.cpp:2078:13:2078:15 | ChiTotal | total:m2077_4 | -| ir.cpp:2078:13:2078:15 | SideEffect | ~m2077_4 | -| ir.cpp:2078:13:2078:15 | StoreValue | r2078_5 | -| ir.cpp:2078:17:2078:17 | Arg(0) | 0:r2078_3 | -| ir.cpp:2078:19:2078:19 | Arg(1) | 1:r2078_4 | -| ir.cpp:2079:9:2079:9 | Address | &:r2079_1 | -| ir.cpp:2079:9:2079:9 | Left | r2079_2 | -| ir.cpp:2079:9:2079:9 | Load | m2078_8 | -| ir.cpp:2079:9:2079:14 | Condition | r2079_4 | -| ir.cpp:2079:14:2079:14 | Right | r2079_3 | -| ir.cpp:2080:9:2080:12 | CallTarget | func:r2080_1 | -| ir.cpp:2080:9:2080:12 | ChiPartial | partial:m2080_4 | -| ir.cpp:2080:9:2080:12 | ChiTotal | total:m2078_7 | -| ir.cpp:2080:9:2080:12 | SideEffect | ~m2078_7 | -| ir.cpp:2080:14:2080:14 | Arg(0) | 0:r2080_2 | -| ir.cpp:2081:5:2081:12 | CallTarget | func:r2081_1 | -| ir.cpp:2081:5:2081:12 | ChiPartial | partial:m2081_3 | -| ir.cpp:2081:5:2081:12 | ChiTotal | total:m2078_7 | -| ir.cpp:2081:5:2081:12 | SideEffect | ~m2078_7 | -| ir.cpp:2082:5:2082:13 | Address | &:r2082_1 | -| ir.cpp:2082:12:2082:12 | Address | &:r2082_2 | -| ir.cpp:2082:12:2082:12 | Load | m2078_8 | -| ir.cpp:2082:12:2082:12 | StoreValue | r2082_3 | -| ir.cpp:2085:6:2085:17 | ChiPartial | partial:m2085_3 | -| ir.cpp:2085:6:2085:17 | ChiTotal | total:m2085_2 | -| ir.cpp:2086:5:2086:12 | CallTarget | func:r2086_1 | -| ir.cpp:2086:5:2086:12 | ChiPartial | partial:m2086_3 | -| ir.cpp:2086:5:2086:12 | ChiTotal | total:m2085_4 | -| ir.cpp:2086:5:2086:12 | SideEffect | ~m2085_4 | -| ir.cpp:2087:5:2087:8 | CallTarget | func:r2087_1 | -| ir.cpp:2087:5:2087:8 | ChiPartial | partial:m2087_4 | -| ir.cpp:2087:5:2087:8 | ChiTotal | total:m2086_4 | -| ir.cpp:2087:5:2087:8 | SideEffect | ~m2086_4 | -| ir.cpp:2087:10:2087:10 | Arg(0) | 0:r2087_2 | -| ir.cpp:2090:5:2090:16 | Address | &:r2090_6 | -| ir.cpp:2090:5:2090:16 | ChiPartial | partial:m2090_3 | -| ir.cpp:2090:5:2090:16 | ChiTotal | total:m2090_2 | -| ir.cpp:2090:5:2090:16 | Load | m2095_4 | -| ir.cpp:2090:5:2090:16 | SideEffect | ~m2094_4 | -| ir.cpp:2091:9:2091:9 | Address | &:r2091_1 | -| ir.cpp:2091:13:2091:15 | CallTarget | func:r2091_2 | -| ir.cpp:2091:13:2091:15 | ChiPartial | partial:m2091_6 | -| ir.cpp:2091:13:2091:15 | ChiTotal | total:m2090_4 | -| ir.cpp:2091:13:2091:15 | SideEffect | ~m2090_4 | -| ir.cpp:2091:13:2091:15 | StoreValue | r2091_5 | -| ir.cpp:2091:17:2091:17 | Arg(0) | 0:r2091_3 | -| ir.cpp:2091:19:2091:19 | Arg(1) | 1:r2091_4 | -| ir.cpp:2092:9:2092:9 | Address | &:r2092_1 | -| ir.cpp:2092:9:2092:9 | Left | r2092_2 | -| ir.cpp:2092:9:2092:9 | Load | m2091_8 | -| ir.cpp:2092:9:2092:14 | Condition | r2092_4 | -| ir.cpp:2092:14:2092:14 | Right | r2092_3 | -| ir.cpp:2093:9:2093:20 | CallTarget | func:r2093_1 | -| ir.cpp:2094:5:2094:12 | CallTarget | func:r2094_1 | -| ir.cpp:2094:5:2094:12 | ChiPartial | partial:m2094_3 | -| ir.cpp:2094:5:2094:12 | ChiTotal | total:m2091_7 | -| ir.cpp:2094:5:2094:12 | SideEffect | ~m2091_7 | -| ir.cpp:2095:5:2095:13 | Address | &:r2095_1 | -| ir.cpp:2095:12:2095:12 | Address | &:r2095_2 | -| ir.cpp:2095:12:2095:12 | Load | m2091_8 | -| ir.cpp:2095:12:2095:12 | StoreValue | r2095_3 | -| ir.cpp:2098:6:2098:24 | ChiPartial | partial:m2098_3 | -| ir.cpp:2098:6:2098:24 | ChiTotal | total:m2098_2 | -| ir.cpp:2098:6:2098:24 | SideEffect | ~m2104_8 | -| ir.cpp:2098:33:2098:33 | Address | &:r2098_5 | -| ir.cpp:2099:3:2099:12 | Address | &:r2099_6 | -| ir.cpp:2099:3:2099:12 | Arg(0) | 0:r2099_5 | -| ir.cpp:2099:3:2099:12 | CallTarget | func:r2099_1 | -| ir.cpp:2099:3:2099:12 | ChiPartial | partial:m2099_7 | -| ir.cpp:2099:3:2099:12 | ChiTotal | total:m2098_4 | -| ir.cpp:2099:3:2099:12 | Right | r2099_4 | -| ir.cpp:2099:3:2099:12 | SideEffect | ~m2098_4 | -| ir.cpp:2099:3:2099:12 | Unary | r2099_6 | -| ir.cpp:2099:11:2099:11 | Address | &:r2099_2 | -| ir.cpp:2099:11:2099:11 | Left | r2099_3 | -| ir.cpp:2099:11:2099:11 | Load | m2098_6 | -| ir.cpp:2100:3:2100:18 | Address | &:r2100_7 | -| ir.cpp:2100:3:2100:18 | Arg(0) | 0:r2100_5 | -| ir.cpp:2100:3:2100:18 | CallTarget | func:r2100_1 | -| ir.cpp:2100:3:2100:18 | ChiPartial | partial:m2100_8 | -| ir.cpp:2100:3:2100:18 | ChiTotal | total:m2099_8 | -| ir.cpp:2100:3:2100:18 | Right | r2100_4 | -| ir.cpp:2100:3:2100:18 | SideEffect | ~m2099_8 | -| ir.cpp:2100:3:2100:18 | Unary | r2100_7 | -| ir.cpp:2100:7:2100:10 | Arg(1) | 1:r2100_6 | -| ir.cpp:2100:17:2100:17 | Address | &:r2100_2 | -| ir.cpp:2100:17:2100:17 | Left | r2100_3 | -| ir.cpp:2100:17:2100:17 | Load | m2098_6 | -| ir.cpp:2101:3:2101:15 | Address | &:r2101_6 | -| ir.cpp:2101:3:2101:15 | Arg(0) | 0:r2101_5 | -| ir.cpp:2101:3:2101:15 | CallTarget | func:r2101_1 | -| ir.cpp:2101:3:2101:15 | ChiPartial | partial:m2101_7 | -| ir.cpp:2101:3:2101:15 | ChiTotal | total:m2100_9 | -| ir.cpp:2101:3:2101:15 | Right | r2101_4 | -| ir.cpp:2101:3:2101:15 | SideEffect | ~m2100_9 | -| ir.cpp:2101:3:2101:15 | Unary | r2101_6 | -| ir.cpp:2101:14:2101:14 | Address | &:r2101_2 | -| ir.cpp:2101:14:2101:14 | Left | r2101_3 | -| ir.cpp:2101:14:2101:14 | Load | m2098_6 | -| ir.cpp:2102:3:2102:20 | Address | &:r2102_7 | -| ir.cpp:2102:3:2102:20 | Arg(0) | 0:r2102_5 | -| ir.cpp:2102:3:2102:20 | CallTarget | func:r2102_1 | -| ir.cpp:2102:3:2102:20 | ChiPartial | partial:m2102_8 | -| ir.cpp:2102:3:2102:20 | ChiTotal | total:m2101_8 | -| ir.cpp:2102:3:2102:20 | Right | r2102_4 | -| ir.cpp:2102:3:2102:20 | SideEffect | ~m2101_8 | -| ir.cpp:2102:3:2102:20 | Unary | r2102_7 | -| ir.cpp:2102:19:2102:19 | Address | &:r2102_2 | -| ir.cpp:2102:19:2102:19 | Left | r2102_3 | -| ir.cpp:2102:19:2102:19 | Load | m2098_6 | -| ir.cpp:2102:21:2102:21 | Arg(1) | 1:r2102_6 | -| ir.cpp:2103:3:2103:36 | Address | &:r2103_6 | -| ir.cpp:2103:3:2103:36 | Arg(0) | 0:r2103_5 | -| ir.cpp:2103:3:2103:36 | CallTarget | func:r2103_1 | -| ir.cpp:2103:3:2103:36 | ChiPartial | partial:m2103_7 | -| ir.cpp:2103:3:2103:36 | ChiTotal | total:m2102_9 | -| ir.cpp:2103:3:2103:36 | Right | r2103_4 | -| ir.cpp:2103:3:2103:36 | SideEffect | ~m2102_9 | -| ir.cpp:2103:3:2103:36 | Unary | r2103_6 | -| ir.cpp:2103:35:2103:35 | Address | &:r2103_2 | -| ir.cpp:2103:35:2103:35 | Left | r2103_3 | -| ir.cpp:2103:35:2103:35 | Load | m2098_6 | -| ir.cpp:2104:3:2104:24 | Address | &:r2104_6 | -| ir.cpp:2104:3:2104:24 | Arg(0) | 0:r2104_5 | -| ir.cpp:2104:3:2104:24 | CallTarget | func:r2104_1 | -| ir.cpp:2104:3:2104:24 | ChiPartial | partial:m2104_7 | -| ir.cpp:2104:3:2104:24 | ChiTotal | total:m2103_8 | -| ir.cpp:2104:3:2104:24 | Right | r2104_4 | -| ir.cpp:2104:3:2104:24 | SideEffect | ~m2103_8 | -| ir.cpp:2104:3:2104:24 | Unary | r2104_6 | -| ir.cpp:2104:11:2104:11 | Address | &:r2104_2 | -| ir.cpp:2104:11:2104:11 | Left | r2104_3 | -| ir.cpp:2104:11:2104:11 | Load | m2098_6 | -| ir.cpp:2109:7:2109:17 | Address | &:r2109_10 | -| ir.cpp:2109:7:2109:17 | ChiPartial | partial:m2109_3 | -| ir.cpp:2109:7:2109:17 | ChiTotal | total:m2109_2 | -| ir.cpp:2109:7:2109:17 | Load | m2112_4 | -| ir.cpp:2109:7:2109:17 | SideEffect | m2109_3 | -| ir.cpp:2109:25:2109:25 | Address | &:r2109_5 | -| ir.cpp:2109:25:2109:25 | Address | &:r2109_5 | -| ir.cpp:2109:25:2109:25 | Address | &:r2109_7 | -| ir.cpp:2109:25:2109:25 | Address | &:r2109_7 | -| ir.cpp:2109:25:2109:25 | Load | m2109_6 | -| ir.cpp:2109:25:2109:25 | SideEffect | m2109_8 | -| ir.cpp:2110:9:2110:11 | Address | &:r2110_1 | -| ir.cpp:2111:10:2111:10 | Address | &:r2111_1 | -| ir.cpp:2111:14:2111:19 | CallTarget | func:r2111_2 | -| ir.cpp:2111:14:2111:19 | StoreValue | r2111_8 | -| ir.cpp:2111:21:2111:21 | Address | &:r2111_3 | -| ir.cpp:2111:21:2111:21 | Address | &:r2111_5 | -| ir.cpp:2111:21:2111:21 | Arg(0) | 0:r2111_5 | -| ir.cpp:2111:21:2111:21 | Load | m2109_6 | -| ir.cpp:2111:21:2111:21 | SideEffect | ~m2109_8 | -| ir.cpp:2111:21:2111:21 | Unary | r2111_4 | -| ir.cpp:2111:24:2111:27 | Address | &:r2111_7 | -| ir.cpp:2111:24:2111:27 | Arg(1) | 1:r2111_7 | -| ir.cpp:2111:24:2111:27 | ChiPartial | partial:m2111_10 | -| ir.cpp:2111:24:2111:27 | ChiTotal | total:m2110_2 | -| ir.cpp:2111:25:2111:27 | Unary | r2111_6 | -| ir.cpp:2112:3:2112:13 | Address | &:r2112_1 | -| ir.cpp:2112:10:2112:12 | Address | &:r2112_2 | -| ir.cpp:2112:10:2112:12 | Load | m2111_11 | -| ir.cpp:2112:10:2112:12 | StoreValue | r2112_3 | -| ir.cpp:2119:6:2119:39 | ChiPartial | partial:m2119_3 | -| ir.cpp:2119:6:2119:39 | ChiTotal | total:m2119_2 | -| ir.cpp:2119:6:2119:39 | SideEffect | ~m2120_8 | -| ir.cpp:2120:6:2120:42 | Address | &:r2120_1 | -| ir.cpp:2120:6:2120:42 | Condition | r2120_12 | -| ir.cpp:2120:22:2120:22 | Address | &:r2120_4 | -| ir.cpp:2120:22:2120:22 | Address | &:r2120_4 | -| ir.cpp:2120:22:2120:22 | Arg(this) | this:r2120_4 | -| ir.cpp:2120:22:2120:22 | CallTarget | func:r2120_5 | -| ir.cpp:2120:22:2120:22 | ChiPartial | partial:m2120_7 | -| ir.cpp:2120:22:2120:22 | ChiPartial | partial:m2120_10 | -| ir.cpp:2120:22:2120:22 | ChiTotal | total:m2119_4 | -| ir.cpp:2120:22:2120:22 | ChiTotal | total:m2120_3 | -| ir.cpp:2120:22:2120:22 | SideEffect | m2120_3 | -| ir.cpp:2120:22:2120:22 | SideEffect | ~m2119_4 | -| ir.cpp:2120:22:2120:22 | Unary | r2120_6 | -| ir.cpp:2120:25:2120:42 | StoreValue | r2120_2 | +| ir.cpp:2020:7:2020:7 | ChiPartial | partial:m2020_12 | +| ir.cpp:2020:7:2020:7 | ChiTotal | total:m2019_4 | +| ir.cpp:2020:7:2020:7 | SideEffect | ~m2019_4 | +| ir.cpp:2020:7:2020:7 | Unary | r2020_11 | +| ir.cpp:2020:9:2020:9 | Address | &:r2020_3 | +| ir.cpp:2020:9:2020:9 | Condition | r2020_4 | +| ir.cpp:2020:9:2020:9 | Load | m2019_6 | +| ir.cpp:2020:9:2020:17 | Address | &:r2020_7 | +| ir.cpp:2020:9:2020:17 | Address | &:r2020_10 | +| ir.cpp:2020:9:2020:17 | Address | &:r2020_20 | +| ir.cpp:2020:9:2020:17 | Address | &:r2020_23 | +| ir.cpp:2020:9:2020:17 | Arg(0) | 0:r2020_10 | +| ir.cpp:2020:9:2020:17 | Load | m2020_6 | +| ir.cpp:2020:9:2020:17 | Phi | from 2:m2020_21 | +| ir.cpp:2020:9:2020:17 | Phi | from 3:m2020_24 | +| ir.cpp:2020:9:2020:17 | SideEffect | ~m2020_13 | +| ir.cpp:2020:9:2020:17 | Unary | r2020_8 | +| ir.cpp:2020:9:2020:17 | Unary | r2020_9 | +| ir.cpp:2020:13:2020:13 | StoreValue | r2020_19 | +| ir.cpp:2020:17:2020:17 | StoreValue | r2020_22 | +| ir.cpp:2021:5:2021:5 | Address | &:r2021_1 | +| ir.cpp:2021:5:2021:5 | Address | &:r2021_1 | +| ir.cpp:2021:5:2021:5 | Arg(this) | this:r2021_1 | +| ir.cpp:2021:5:2021:5 | ChiPartial | partial:m2021_19 | +| ir.cpp:2021:5:2021:5 | ChiTotal | total:m2020_17 | +| ir.cpp:2021:5:2021:5 | SideEffect | m2020_17 | +| ir.cpp:2021:7:2021:7 | CallTarget | func:r2021_2 | +| ir.cpp:2021:7:2021:7 | ChiPartial | partial:m2021_15 | +| ir.cpp:2021:7:2021:7 | ChiTotal | total:m2021_7 | +| ir.cpp:2021:7:2021:7 | SideEffect | ~m2021_7 | +| ir.cpp:2021:7:2021:7 | Unary | r2021_14 | +| ir.cpp:2021:9:2021:9 | Address | &:r2021_4 | +| ir.cpp:2021:9:2021:9 | Address | &:r2021_9 | +| ir.cpp:2021:9:2021:9 | Address | &:r2021_35 | +| ir.cpp:2021:9:2021:9 | Address | &:r2021_46 | +| ir.cpp:2021:9:2021:9 | Condition | r2021_5 | +| ir.cpp:2021:9:2021:9 | Load | m2019_6 | +| ir.cpp:2021:9:2021:9 | Load | m2021_8 | +| ir.cpp:2021:9:2021:9 | Phi | from 5:m2021_36 | +| ir.cpp:2021:9:2021:9 | Phi | from 5:~m2021_30 | +| ir.cpp:2021:9:2021:9 | Phi | from 6:m2021_47 | +| ir.cpp:2021:9:2021:9 | Phi | from 6:~m2021_42 | +| ir.cpp:2021:9:2021:9 | StoreValue | r2021_10 | +| ir.cpp:2021:9:2021:34 | Address | &:r2021_3 | +| ir.cpp:2021:9:2021:34 | Address | &:r2021_13 | +| ir.cpp:2021:9:2021:34 | Arg(0) | 0:r2021_13 | +| ir.cpp:2021:9:2021:34 | SideEffect | ~m2021_11 | +| ir.cpp:2021:9:2021:34 | Unary | r2021_3 | +| ir.cpp:2021:9:2021:34 | Unary | r2021_12 | +| ir.cpp:2021:13:2021:13 | Address | &:r2021_22 | +| ir.cpp:2021:13:2021:13 | Address | &:r2021_22 | +| ir.cpp:2021:13:2021:13 | Address | &:r2021_22 | +| ir.cpp:2021:13:2021:13 | Address | &:r2021_27 | +| ir.cpp:2021:13:2021:13 | Arg(0) | 0:r2021_27 | +| ir.cpp:2021:13:2021:13 | Arg(this) | this:r2021_22 | +| ir.cpp:2021:13:2021:13 | CallTarget | func:r2021_24 | +| ir.cpp:2021:13:2021:13 | ChiPartial | partial:m2021_29 | +| ir.cpp:2021:13:2021:13 | ChiPartial | partial:m2021_32 | +| ir.cpp:2021:13:2021:13 | ChiTotal | total:m2020_13 | +| ir.cpp:2021:13:2021:13 | ChiTotal | total:m2021_23 | +| ir.cpp:2021:13:2021:13 | Load | m2021_33 | +| ir.cpp:2021:13:2021:13 | SideEffect | ~m2019_8 | +| ir.cpp:2021:13:2021:13 | SideEffect | ~m2020_13 | +| ir.cpp:2021:13:2021:13 | StoreValue | r2021_34 | +| ir.cpp:2021:13:2021:13 | Unary | r2021_25 | +| ir.cpp:2021:13:2021:13 | Unary | r2021_26 | +| ir.cpp:2021:17:2021:34 | Address | &:r2021_37 | +| ir.cpp:2021:17:2021:34 | Address | &:r2021_37 | +| ir.cpp:2021:17:2021:34 | Address | &:r2021_37 | +| ir.cpp:2021:17:2021:34 | Arg(this) | this:r2021_37 | +| ir.cpp:2021:17:2021:34 | CallTarget | func:r2021_39 | +| ir.cpp:2021:17:2021:34 | ChiPartial | partial:m2021_41 | +| ir.cpp:2021:17:2021:34 | ChiPartial | partial:m2021_43 | +| ir.cpp:2021:17:2021:34 | ChiTotal | total:m2020_13 | +| ir.cpp:2021:17:2021:34 | ChiTotal | total:m2021_38 | +| ir.cpp:2021:17:2021:34 | Load | m2021_44 | +| ir.cpp:2021:17:2021:34 | SideEffect | ~m2020_13 | +| ir.cpp:2021:17:2021:34 | StoreValue | r2021_45 | +| ir.cpp:2022:5:2022:5 | Address | &:r2022_1 | +| ir.cpp:2022:5:2022:5 | Address | &:r2022_1 | +| ir.cpp:2022:5:2022:5 | Arg(this) | this:r2022_1 | +| ir.cpp:2022:5:2022:5 | ChiPartial | partial:m2022_19 | +| ir.cpp:2022:5:2022:5 | ChiTotal | total:m2021_20 | +| ir.cpp:2022:5:2022:5 | SideEffect | m2021_20 | +| ir.cpp:2022:7:2022:7 | CallTarget | func:r2022_2 | +| ir.cpp:2022:7:2022:7 | ChiPartial | partial:m2022_15 | +| ir.cpp:2022:7:2022:7 | ChiTotal | total:m2022_7 | +| ir.cpp:2022:7:2022:7 | SideEffect | ~m2022_7 | +| ir.cpp:2022:7:2022:7 | Unary | r2022_14 | +| ir.cpp:2022:9:2022:9 | Address | &:r2022_4 | +| ir.cpp:2022:9:2022:9 | Address | &:r2022_9 | +| ir.cpp:2022:9:2022:9 | Address | &:r2022_31 | +| ir.cpp:2022:9:2022:9 | Address | &:r2022_42 | +| ir.cpp:2022:9:2022:9 | Condition | r2022_5 | +| ir.cpp:2022:9:2022:9 | Load | m2019_6 | +| ir.cpp:2022:9:2022:9 | Load | m2022_8 | +| ir.cpp:2022:9:2022:9 | Phi | from 8:m2022_32 | +| ir.cpp:2022:9:2022:9 | Phi | from 8:~m2022_27 | +| ir.cpp:2022:9:2022:9 | Phi | from 9:m2022_43 | +| ir.cpp:2022:9:2022:9 | Phi | from 9:~m2022_38 | +| ir.cpp:2022:9:2022:9 | StoreValue | r2022_10 | +| ir.cpp:2022:9:2022:51 | Address | &:r2022_3 | +| ir.cpp:2022:9:2022:51 | Address | &:r2022_13 | +| ir.cpp:2022:9:2022:51 | Arg(0) | 0:r2022_13 | +| ir.cpp:2022:9:2022:51 | SideEffect | ~m2022_11 | +| ir.cpp:2022:9:2022:51 | Unary | r2022_3 | +| ir.cpp:2022:9:2022:51 | Unary | r2022_12 | +| ir.cpp:2022:13:2022:30 | Address | &:r2022_22 | +| ir.cpp:2022:13:2022:30 | Address | &:r2022_22 | +| ir.cpp:2022:13:2022:30 | Address | &:r2022_22 | +| ir.cpp:2022:13:2022:30 | Arg(this) | this:r2022_22 | +| ir.cpp:2022:13:2022:30 | CallTarget | func:r2022_24 | +| ir.cpp:2022:13:2022:30 | ChiPartial | partial:m2022_26 | +| ir.cpp:2022:13:2022:30 | ChiPartial | partial:m2022_28 | +| ir.cpp:2022:13:2022:30 | ChiTotal | total:m2021_16 | +| ir.cpp:2022:13:2022:30 | ChiTotal | total:m2022_23 | +| ir.cpp:2022:13:2022:30 | Load | m2022_29 | +| ir.cpp:2022:13:2022:30 | SideEffect | ~m2021_16 | +| ir.cpp:2022:13:2022:30 | StoreValue | r2022_30 | +| ir.cpp:2022:34:2022:51 | Address | &:r2022_33 | +| ir.cpp:2022:34:2022:51 | Address | &:r2022_33 | +| ir.cpp:2022:34:2022:51 | Address | &:r2022_33 | +| ir.cpp:2022:34:2022:51 | Arg(this) | this:r2022_33 | +| ir.cpp:2022:34:2022:51 | CallTarget | func:r2022_35 | +| ir.cpp:2022:34:2022:51 | ChiPartial | partial:m2022_37 | +| ir.cpp:2022:34:2022:51 | ChiPartial | partial:m2022_39 | +| ir.cpp:2022:34:2022:51 | ChiTotal | total:m2021_16 | +| ir.cpp:2022:34:2022:51 | ChiTotal | total:m2022_34 | +| ir.cpp:2022:34:2022:51 | Load | m2022_40 | +| ir.cpp:2022:34:2022:51 | SideEffect | ~m2021_16 | +| ir.cpp:2022:34:2022:51 | StoreValue | r2022_41 | +| ir.cpp:2023:5:2023:19 | ChiPartial | partial:m2023_35 | +| ir.cpp:2023:5:2023:19 | ChiTotal | total:m2023_17 | +| ir.cpp:2023:5:2023:19 | SideEffect | m2023_17 | +| ir.cpp:2023:6:2023:6 | Address | &:r2023_1 | +| ir.cpp:2023:6:2023:6 | Address | &:r2023_1 | +| ir.cpp:2023:6:2023:6 | Arg(this) | this:r2023_1 | +| ir.cpp:2023:6:2023:6 | ChiPartial | partial:m2023_16 | +| ir.cpp:2023:6:2023:6 | ChiTotal | total:m2022_20 | +| ir.cpp:2023:6:2023:6 | SideEffect | m2022_20 | +| ir.cpp:2023:8:2023:8 | CallTarget | func:r2023_2 | +| ir.cpp:2023:8:2023:8 | ChiPartial | partial:m2023_12 | +| ir.cpp:2023:8:2023:8 | ChiTotal | total:m2022_16 | +| ir.cpp:2023:8:2023:8 | SideEffect | ~m2022_16 | +| ir.cpp:2023:8:2023:8 | Unary | r2023_11 | +| ir.cpp:2023:8:2023:19 | Address | &:r2023_18 | +| ir.cpp:2023:8:2023:19 | Address | &:r2023_18 | +| ir.cpp:2023:8:2023:19 | Arg(this) | this:r2023_18 | +| ir.cpp:2023:10:2023:10 | Address | &:r2023_3 | +| ir.cpp:2023:10:2023:10 | Condition | r2023_4 | +| ir.cpp:2023:10:2023:10 | Load | m2019_6 | +| ir.cpp:2023:10:2023:18 | Address | &:r2023_7 | +| ir.cpp:2023:10:2023:18 | Address | &:r2023_10 | +| ir.cpp:2023:10:2023:18 | Address | &:r2023_39 | +| ir.cpp:2023:10:2023:18 | Address | &:r2023_42 | +| ir.cpp:2023:10:2023:18 | Arg(0) | 0:r2023_10 | +| ir.cpp:2023:10:2023:18 | Load | m2023_6 | +| ir.cpp:2023:10:2023:18 | Phi | from 11:m2023_40 | +| ir.cpp:2023:10:2023:18 | Phi | from 12:m2023_43 | +| ir.cpp:2023:10:2023:18 | SideEffect | ~m2023_13 | +| ir.cpp:2023:10:2023:18 | Unary | r2023_8 | +| ir.cpp:2023:10:2023:18 | Unary | r2023_9 | +| ir.cpp:2023:14:2023:14 | StoreValue | r2023_38 | +| ir.cpp:2023:18:2023:18 | StoreValue | r2023_41 | +| ir.cpp:2023:21:2023:21 | CallTarget | func:r2023_19 | +| ir.cpp:2023:21:2023:21 | ChiPartial | partial:m2023_31 | +| ir.cpp:2023:21:2023:21 | ChiTotal | total:m2023_25 | +| ir.cpp:2023:21:2023:21 | SideEffect | ~m2023_25 | +| ir.cpp:2023:21:2023:21 | Unary | r2023_30 | +| ir.cpp:2023:23:2023:40 | Address | &:r2023_20 | +| ir.cpp:2023:23:2023:40 | Address | &:r2023_20 | +| ir.cpp:2023:23:2023:40 | Address | &:r2023_29 | +| ir.cpp:2023:23:2023:40 | Arg(0) | 0:r2023_29 | +| ir.cpp:2023:23:2023:40 | Arg(this) | this:r2023_20 | +| ir.cpp:2023:23:2023:40 | CallTarget | func:r2023_22 | +| ir.cpp:2023:23:2023:40 | ChiPartial | partial:m2023_24 | +| ir.cpp:2023:23:2023:40 | ChiPartial | partial:m2023_26 | +| ir.cpp:2023:23:2023:40 | ChiTotal | total:m2023_13 | +| ir.cpp:2023:23:2023:40 | ChiTotal | total:m2023_21 | +| ir.cpp:2023:23:2023:40 | SideEffect | ~m2023_13 | +| ir.cpp:2023:23:2023:40 | SideEffect | ~m2023_27 | +| ir.cpp:2023:23:2023:40 | Unary | r2023_20 | +| ir.cpp:2023:23:2023:40 | Unary | r2023_28 | +| ir.cpp:2028:14:2028:22 | Address | &:r2028_7 | +| ir.cpp:2028:14:2028:22 | ChiPartial | partial:m2028_3 | +| ir.cpp:2028:14:2028:22 | ChiTotal | total:m2028_2 | +| ir.cpp:2028:14:2028:22 | Load | m2033_2 | +| ir.cpp:2028:14:2028:22 | SideEffect | ~m2030_6 | +| ir.cpp:2028:37:2028:37 | Address | &:r2028_5 | +| ir.cpp:2029:16:2029:16 | Address | &:r2029_1 | +| ir.cpp:2030:3:2030:3 | Address | &:r2030_10 | +| ir.cpp:2030:7:2030:7 | Address | &:r2030_1 | +| ir.cpp:2030:7:2030:7 | Left | r2030_2 | +| ir.cpp:2030:7:2030:7 | Load | m2028_6 | +| ir.cpp:2030:7:2030:13 | Condition | r2030_4 | +| ir.cpp:2030:7:2032:28 | Address | &:r2030_8 | +| ir.cpp:2030:7:2032:28 | Address | &:r2030_12 | +| ir.cpp:2030:7:2032:28 | Address | &:r2030_14 | +| ir.cpp:2030:7:2032:28 | Load | m2030_7 | +| ir.cpp:2030:7:2032:28 | Phi | from 2:m2030_13 | +| ir.cpp:2030:7:2032:28 | Phi | from 2:~m2031_6 | +| ir.cpp:2030:7:2032:28 | Phi | from 3:m2030_15 | +| ir.cpp:2030:7:2032:28 | Phi | from 3:~m2032_6 | +| ir.cpp:2030:7:2032:28 | StoreValue | r2030_9 | +| ir.cpp:2030:11:2030:13 | Right | r2030_3 | +| ir.cpp:2031:6:2031:20 | CallTarget | func:r2031_1 | +| ir.cpp:2031:6:2031:20 | ChiPartial | partial:m2031_5 | +| ir.cpp:2031:6:2031:20 | ChiTotal | total:m2028_4 | +| ir.cpp:2031:6:2031:20 | SideEffect | ~m2028_4 | +| ir.cpp:2031:6:2031:26 | StoreValue | r2031_9 | +| ir.cpp:2031:22:2031:22 | Address | &:r2031_2 | +| ir.cpp:2031:22:2031:22 | Arg(0) | 0:r2031_3 | +| ir.cpp:2031:22:2031:22 | Load | m2028_6 | +| ir.cpp:2031:26:2031:26 | Address | &:r2031_7 | +| ir.cpp:2031:26:2031:26 | Load | m2028_6 | +| ir.cpp:2031:26:2031:26 | Unary | r2031_8 | +| ir.cpp:2032:5:2032:28 | StoreValue | r2032_9 | +| ir.cpp:2032:6:2032:20 | CallTarget | func:r2032_1 | +| ir.cpp:2032:6:2032:20 | ChiPartial | partial:m2032_5 | +| ir.cpp:2032:6:2032:20 | ChiTotal | total:m2028_4 | +| ir.cpp:2032:6:2032:20 | SideEffect | ~m2028_4 | +| ir.cpp:2032:6:2032:27 | Unary | r2032_8 | +| ir.cpp:2032:22:2032:22 | Address | &:r2032_2 | +| ir.cpp:2032:22:2032:22 | Arg(0) | 0:r2032_3 | +| ir.cpp:2032:22:2032:22 | Load | m2028_6 | +| ir.cpp:2032:26:2032:27 | Unary | r2032_7 | +| ir.cpp:2033:1:2033:1 | Address | &:r2033_1 | +| ir.cpp:2035:6:2035:17 | ChiPartial | partial:m2035_3 | +| ir.cpp:2035:6:2035:17 | ChiTotal | total:m2035_2 | +| ir.cpp:2035:6:2035:17 | SideEffect | ~m2038_6 | +| ir.cpp:2036:8:2036:8 | Address | &:r2036_1 | +| ir.cpp:2036:12:2036:18 | Address | &:r2036_4 | +| ir.cpp:2036:12:2036:18 | Arg(0) | 0:r2036_3 | +| ir.cpp:2036:12:2036:18 | CallTarget | func:r2036_2 | +| ir.cpp:2036:12:2036:18 | ChiPartial | partial:m2036_5 | +| ir.cpp:2036:12:2036:18 | ChiTotal | total:m2035_4 | +| ir.cpp:2036:12:2036:18 | SideEffect | ~m2035_4 | +| ir.cpp:2036:12:2036:18 | StoreValue | r2036_8 | +| ir.cpp:2036:12:2036:18 | Unary | r2036_4 | +| ir.cpp:2037:3:2037:4 | Address | &:r2037_4 | +| ir.cpp:2037:3:2037:8 | ChiPartial | partial:m2037_5 | +| ir.cpp:2037:3:2037:8 | ChiTotal | total:m2036_7 | +| ir.cpp:2037:4:2037:4 | Address | &:r2037_2 | +| ir.cpp:2037:4:2037:4 | Load | m2036_9 | +| ir.cpp:2037:4:2037:4 | Unary | r2037_3 | +| ir.cpp:2037:8:2037:8 | StoreValue | r2037_1 | +| ir.cpp:2038:3:2038:10 | CallTarget | func:r2038_1 | +| ir.cpp:2038:3:2038:10 | ChiPartial | partial:m2038_5 | +| ir.cpp:2038:3:2038:10 | ChiTotal | total:m2036_6 | +| ir.cpp:2038:3:2038:10 | SideEffect | ~m2036_6 | +| ir.cpp:2038:10:2038:10 | Address | &:r2038_2 | +| ir.cpp:2038:10:2038:10 | Arg(0) | 0:r2038_3 | +| ir.cpp:2038:10:2038:10 | Load | m2036_9 | +| ir.cpp:2041:7:2041:7 | Address | &:r2041_5 | +| ir.cpp:2041:7:2041:7 | Address | &:r2041_5 | +| ir.cpp:2041:7:2041:7 | Address | &:r2041_7 | +| ir.cpp:2041:7:2041:7 | Address | &:r2041_7 | +| ir.cpp:2041:7:2041:7 | ChiPartial | partial:m2041_3 | +| ir.cpp:2041:7:2041:7 | ChiTotal | total:m2041_2 | +| ir.cpp:2041:7:2041:7 | Load | m2041_6 | +| ir.cpp:2041:7:2041:7 | SideEffect | m2041_3 | +| ir.cpp:2041:7:2041:7 | SideEffect | m2041_8 | +| ir.cpp:2043:10:2043:24 | ChiPartial | partial:m2043_3 | +| ir.cpp:2043:10:2043:24 | ChiTotal | total:m2043_2 | +| ir.cpp:2043:10:2043:24 | SideEffect | m2043_3 | +| ir.cpp:2043:32:2043:32 | Address | &:r2043_5 | +| ir.cpp:2043:32:2043:32 | Address | &:r2043_5 | +| ir.cpp:2043:32:2043:32 | Address | &:r2043_7 | +| ir.cpp:2043:32:2043:32 | Address | &:r2043_7 | +| ir.cpp:2043:32:2043:32 | Load | m2043_6 | +| ir.cpp:2043:32:2043:32 | SideEffect | m2043_8 | +| ir.cpp:2045:13:2045:18 | Address | &:r2045_5 | +| ir.cpp:2045:13:2045:18 | Address | &:r2045_5 | +| ir.cpp:2045:13:2045:18 | Address | &:r2045_7 | +| ir.cpp:2045:13:2045:18 | Address | &:r2045_7 | +| ir.cpp:2045:13:2045:18 | ChiPartial | partial:m2045_3 | +| ir.cpp:2045:13:2045:18 | ChiTotal | total:m2045_2 | +| ir.cpp:2045:13:2045:18 | Load | m2045_6 | +| ir.cpp:2045:13:2045:18 | SideEffect | m2045_3 | +| ir.cpp:2045:13:2045:18 | SideEffect | m2045_8 | +| ir.cpp:2048:7:2048:7 | Address | &:r2048_5 | +| ir.cpp:2048:7:2048:7 | Address | &:r2048_5 | +| ir.cpp:2048:7:2048:7 | Address | &:r2048_7 | +| ir.cpp:2048:7:2048:7 | Address | &:r2048_7 | +| ir.cpp:2048:7:2048:7 | Address | &:r2048_9 | +| ir.cpp:2048:7:2048:7 | Arg(this) | this:r2048_9 | +| ir.cpp:2048:7:2048:7 | CallTarget | func:r2048_10 | +| ir.cpp:2048:7:2048:7 | ChiPartial | partial:m2048_3 | +| ir.cpp:2048:7:2048:7 | ChiPartial | partial:m2048_12 | +| ir.cpp:2048:7:2048:7 | ChiPartial | partial:m2048_14 | +| ir.cpp:2048:7:2048:7 | ChiTotal | total:m2048_2 | +| ir.cpp:2048:7:2048:7 | ChiTotal | total:m2048_4 | +| ir.cpp:2048:7:2048:7 | ChiTotal | total:m2048_8 | +| ir.cpp:2048:7:2048:7 | Load | m2048_6 | +| ir.cpp:2048:7:2048:7 | SideEffect | m2048_15 | +| ir.cpp:2048:7:2048:7 | SideEffect | ~m2048_4 | +| ir.cpp:2048:7:2048:7 | SideEffect | ~m2048_13 | +| ir.cpp:2048:7:2048:7 | Unary | m2048_6 | +| ir.cpp:2051:5:2051:13 | Address | &:r2051_5 | +| ir.cpp:2051:5:2051:13 | Address | &:r2051_5 | +| ir.cpp:2051:5:2051:13 | Address | &:r2051_7 | +| ir.cpp:2051:5:2051:13 | Address | &:r2051_7 | +| ir.cpp:2051:5:2051:13 | ChiPartial | partial:m2051_3 | +| ir.cpp:2051:5:2051:13 | ChiTotal | total:m2051_2 | +| ir.cpp:2051:5:2051:13 | Load | m2051_6 | +| ir.cpp:2051:5:2051:13 | SideEffect | m2051_8 | +| ir.cpp:2051:5:2051:13 | SideEffect | ~m2051_14 | +| ir.cpp:2051:5:2051:13 | Unary | m2051_6 | +| ir.cpp:2051:18:2051:18 | Arg(this) | this:r2051_10 | +| ir.cpp:2051:18:2051:18 | CallTarget | func:r2051_11 | +| ir.cpp:2051:18:2051:18 | ChiPartial | partial:m2051_13 | +| ir.cpp:2051:18:2051:18 | ChiTotal | total:m2051_4 | +| ir.cpp:2051:18:2051:18 | SideEffect | ~m2051_4 | +| ir.cpp:2053:10:2053:24 | ChiPartial | partial:m2053_3 | +| ir.cpp:2053:10:2053:24 | ChiTotal | total:m2053_2 | +| ir.cpp:2053:10:2053:24 | SideEffect | m2053_3 | +| ir.cpp:2053:32:2053:32 | Address | &:r2053_5 | +| ir.cpp:2053:32:2053:32 | Address | &:r2053_5 | +| ir.cpp:2053:32:2053:32 | Address | &:r2053_7 | +| ir.cpp:2053:32:2053:32 | Address | &:r2053_7 | +| ir.cpp:2053:32:2053:32 | Load | m2053_6 | +| ir.cpp:2053:32:2053:32 | SideEffect | m2053_8 | +| ir.cpp:2058:5:2058:18 | Address | &:r2058_5 | +| ir.cpp:2058:5:2058:18 | ChiPartial | partial:m2058_3 | +| ir.cpp:2058:5:2058:18 | ChiTotal | total:m2058_2 | +| ir.cpp:2058:5:2058:18 | Load | m2068_2 | +| ir.cpp:2058:5:2058:18 | SideEffect | ~m2067_6 | +| ir.cpp:2060:12:2060:13 | Address | &:r2060_1 | +| ir.cpp:2060:17:2060:27 | Address | &:r2060_4 | +| ir.cpp:2060:17:2060:27 | Address | &:r2060_8 | +| ir.cpp:2060:17:2060:27 | Arg(0) | 0:r2060_3 | +| ir.cpp:2060:17:2060:27 | Arg(this) | this:r2060_8 | +| ir.cpp:2060:17:2060:27 | CallTarget | func:r2060_2 | +| ir.cpp:2060:17:2060:27 | CallTarget | func:r2060_9 | +| ir.cpp:2060:17:2060:27 | ChiPartial | partial:m2060_5 | +| ir.cpp:2060:17:2060:27 | ChiPartial | partial:m2060_11 | +| ir.cpp:2060:17:2060:27 | ChiPartial | partial:m2060_13 | +| ir.cpp:2060:17:2060:27 | ChiTotal | total:m2058_4 | +| ir.cpp:2060:17:2060:27 | ChiTotal | total:m2060_6 | +| ir.cpp:2060:17:2060:27 | ChiTotal | total:m2060_7 | +| ir.cpp:2060:17:2060:27 | SideEffect | ~m2058_4 | +| ir.cpp:2060:17:2060:27 | SideEffect | ~m2060_6 | +| ir.cpp:2060:17:2060:27 | StoreValue | r2060_8 | +| ir.cpp:2060:17:2060:27 | Unary | r2060_4 | +| ir.cpp:2061:5:2061:13 | CallTarget | func:r2061_1 | +| ir.cpp:2061:5:2061:13 | ChiPartial | partial:m2061_5 | +| ir.cpp:2061:5:2061:13 | ChiTotal | total:m2060_12 | +| ir.cpp:2061:5:2061:13 | SideEffect | ~m2060_12 | +| ir.cpp:2061:12:2061:13 | Address | &:r2061_2 | +| ir.cpp:2061:12:2061:13 | Arg(0) | 0:r2061_3 | +| ir.cpp:2061:12:2061:13 | Load | m2060_15 | +| ir.cpp:2063:12:2063:13 | Address | &:r2063_1 | +| ir.cpp:2063:17:2063:30 | Address | &:r2063_4 | +| ir.cpp:2063:17:2063:30 | Address | &:r2063_8 | +| ir.cpp:2063:17:2063:30 | Arg(0) | 0:r2063_3 | +| ir.cpp:2063:17:2063:30 | Arg(this) | this:r2063_8 | +| ir.cpp:2063:17:2063:30 | CallTarget | func:r2063_2 | +| ir.cpp:2063:17:2063:30 | CallTarget | func:r2063_9 | +| ir.cpp:2063:17:2063:30 | ChiPartial | partial:m2063_5 | +| ir.cpp:2063:17:2063:30 | ChiPartial | partial:m2063_11 | +| ir.cpp:2063:17:2063:30 | ChiPartial | partial:m2063_13 | +| ir.cpp:2063:17:2063:30 | ChiTotal | total:m2061_6 | +| ir.cpp:2063:17:2063:30 | ChiTotal | total:m2063_6 | +| ir.cpp:2063:17:2063:30 | ChiTotal | total:m2063_7 | +| ir.cpp:2063:17:2063:30 | SideEffect | ~m2061_6 | +| ir.cpp:2063:17:2063:30 | SideEffect | ~m2063_6 | +| ir.cpp:2063:17:2063:30 | StoreValue | r2063_15 | +| ir.cpp:2063:17:2063:30 | Unary | r2063_4 | +| ir.cpp:2063:17:2063:30 | Unary | r2063_8 | +| ir.cpp:2064:5:2064:13 | CallTarget | func:r2064_1 | +| ir.cpp:2064:5:2064:13 | ChiPartial | partial:m2064_5 | +| ir.cpp:2064:5:2064:13 | ChiTotal | total:m2063_12 | +| ir.cpp:2064:5:2064:13 | SideEffect | ~m2063_12 | +| ir.cpp:2064:12:2064:13 | Address | &:r2064_2 | +| ir.cpp:2064:12:2064:13 | Arg(0) | 0:r2064_3 | +| ir.cpp:2064:12:2064:13 | Load | m2063_16 | +| ir.cpp:2066:15:2066:15 | Address | &:r2066_1 | +| ir.cpp:2066:19:2066:32 | Address | &:r2066_4 | +| ir.cpp:2066:19:2066:32 | Address | &:r2066_8 | +| ir.cpp:2066:19:2066:32 | Arg(0) | 0:r2066_3 | +| ir.cpp:2066:19:2066:32 | Arg(this) | this:r2066_8 | +| ir.cpp:2066:19:2066:32 | CallTarget | func:r2066_2 | +| ir.cpp:2066:19:2066:32 | CallTarget | func:r2066_9 | +| ir.cpp:2066:19:2066:32 | ChiPartial | partial:m2066_5 | +| ir.cpp:2066:19:2066:32 | ChiPartial | partial:m2066_11 | +| ir.cpp:2066:19:2066:32 | ChiPartial | partial:m2066_13 | +| ir.cpp:2066:19:2066:32 | ChiTotal | total:m2064_6 | +| ir.cpp:2066:19:2066:32 | ChiTotal | total:m2066_6 | +| ir.cpp:2066:19:2066:32 | ChiTotal | total:m2066_7 | +| ir.cpp:2066:19:2066:32 | SideEffect | ~m2064_6 | +| ir.cpp:2066:19:2066:32 | SideEffect | ~m2066_6 | +| ir.cpp:2066:19:2066:32 | StoreValue | r2066_8 | +| ir.cpp:2066:19:2066:32 | Unary | r2066_4 | +| ir.cpp:2067:5:2067:12 | CallTarget | func:r2067_1 | +| ir.cpp:2067:5:2067:12 | ChiPartial | partial:m2067_5 | +| ir.cpp:2067:5:2067:12 | ChiTotal | total:m2066_12 | +| ir.cpp:2067:5:2067:12 | SideEffect | ~m2066_12 | +| ir.cpp:2067:12:2067:12 | Address | &:r2067_2 | +| ir.cpp:2067:12:2067:12 | Arg(0) | 0:r2067_3 | +| ir.cpp:2067:12:2067:12 | Load | m2066_15 | +| ir.cpp:2068:1:2068:1 | Address | &:r2068_1 | +| ir.cpp:2072:6:2072:26 | ChiPartial | partial:m2072_3 | +| ir.cpp:2072:6:2072:26 | ChiTotal | total:m2072_2 | +| ir.cpp:2072:6:2072:26 | SideEffect | ~m2074_5 | +| ir.cpp:2073:13:2073:13 | Address | &:r2073_1 | +| ir.cpp:2073:16:2073:19 | StoreValue | r2073_2 | +| ir.cpp:2074:3:2074:27 | CallTarget | func:r2074_1 | +| ir.cpp:2074:3:2074:27 | ChiPartial | partial:m2074_4 | +| ir.cpp:2074:3:2074:27 | ChiTotal | total:m2072_4 | +| ir.cpp:2074:3:2074:27 | SideEffect | ~m2072_4 | +| ir.cpp:2074:29:2074:29 | Arg(0) | 0:r2074_2 | +| ir.cpp:2079:5:2079:11 | Address | &:r2079_6 | +| ir.cpp:2079:5:2079:11 | ChiPartial | partial:m2079_3 | +| ir.cpp:2079:5:2079:11 | ChiTotal | total:m2079_2 | +| ir.cpp:2079:5:2079:11 | Load | m2084_4 | +| ir.cpp:2079:5:2079:11 | SideEffect | ~m2083_4 | +| ir.cpp:2080:9:2080:9 | Address | &:r2080_1 | +| ir.cpp:2080:13:2080:15 | CallTarget | func:r2080_2 | +| ir.cpp:2080:13:2080:15 | ChiPartial | partial:m2080_6 | +| ir.cpp:2080:13:2080:15 | ChiTotal | total:m2079_4 | +| ir.cpp:2080:13:2080:15 | SideEffect | ~m2079_4 | +| ir.cpp:2080:13:2080:15 | StoreValue | r2080_5 | +| ir.cpp:2080:17:2080:17 | Arg(0) | 0:r2080_3 | +| ir.cpp:2080:19:2080:19 | Arg(1) | 1:r2080_4 | +| ir.cpp:2081:9:2081:9 | Address | &:r2081_1 | +| ir.cpp:2081:9:2081:9 | Left | r2081_2 | +| ir.cpp:2081:9:2081:9 | Load | m2080_8 | +| ir.cpp:2081:9:2081:14 | Condition | r2081_4 | +| ir.cpp:2081:14:2081:14 | Right | r2081_3 | +| ir.cpp:2082:9:2082:12 | CallTarget | func:r2082_1 | +| ir.cpp:2082:9:2082:12 | ChiPartial | partial:m2082_4 | +| ir.cpp:2082:9:2082:12 | ChiTotal | total:m2080_7 | +| ir.cpp:2082:9:2082:12 | SideEffect | ~m2080_7 | +| ir.cpp:2082:14:2082:14 | Arg(0) | 0:r2082_2 | +| ir.cpp:2083:5:2083:12 | CallTarget | func:r2083_1 | +| ir.cpp:2083:5:2083:12 | ChiPartial | partial:m2083_3 | +| ir.cpp:2083:5:2083:12 | ChiTotal | total:m2080_7 | +| ir.cpp:2083:5:2083:12 | SideEffect | ~m2080_7 | +| ir.cpp:2084:5:2084:13 | Address | &:r2084_1 | +| ir.cpp:2084:12:2084:12 | Address | &:r2084_2 | +| ir.cpp:2084:12:2084:12 | Load | m2080_8 | +| ir.cpp:2084:12:2084:12 | StoreValue | r2084_3 | +| ir.cpp:2087:6:2087:17 | ChiPartial | partial:m2087_3 | +| ir.cpp:2087:6:2087:17 | ChiTotal | total:m2087_2 | +| ir.cpp:2088:5:2088:12 | CallTarget | func:r2088_1 | +| ir.cpp:2088:5:2088:12 | ChiPartial | partial:m2088_3 | +| ir.cpp:2088:5:2088:12 | ChiTotal | total:m2087_4 | +| ir.cpp:2088:5:2088:12 | SideEffect | ~m2087_4 | +| ir.cpp:2089:5:2089:8 | CallTarget | func:r2089_1 | +| ir.cpp:2089:5:2089:8 | ChiPartial | partial:m2089_4 | +| ir.cpp:2089:5:2089:8 | ChiTotal | total:m2088_4 | +| ir.cpp:2089:5:2089:8 | SideEffect | ~m2088_4 | +| ir.cpp:2089:10:2089:10 | Arg(0) | 0:r2089_2 | +| ir.cpp:2092:5:2092:16 | Address | &:r2092_6 | +| ir.cpp:2092:5:2092:16 | ChiPartial | partial:m2092_3 | +| ir.cpp:2092:5:2092:16 | ChiTotal | total:m2092_2 | +| ir.cpp:2092:5:2092:16 | Load | m2097_4 | +| ir.cpp:2092:5:2092:16 | SideEffect | ~m2096_4 | +| ir.cpp:2093:9:2093:9 | Address | &:r2093_1 | +| ir.cpp:2093:13:2093:15 | CallTarget | func:r2093_2 | +| ir.cpp:2093:13:2093:15 | ChiPartial | partial:m2093_6 | +| ir.cpp:2093:13:2093:15 | ChiTotal | total:m2092_4 | +| ir.cpp:2093:13:2093:15 | SideEffect | ~m2092_4 | +| ir.cpp:2093:13:2093:15 | StoreValue | r2093_5 | +| ir.cpp:2093:17:2093:17 | Arg(0) | 0:r2093_3 | +| ir.cpp:2093:19:2093:19 | Arg(1) | 1:r2093_4 | +| ir.cpp:2094:9:2094:9 | Address | &:r2094_1 | +| ir.cpp:2094:9:2094:9 | Left | r2094_2 | +| ir.cpp:2094:9:2094:9 | Load | m2093_8 | +| ir.cpp:2094:9:2094:14 | Condition | r2094_4 | +| ir.cpp:2094:14:2094:14 | Right | r2094_3 | +| ir.cpp:2095:9:2095:20 | CallTarget | func:r2095_1 | +| ir.cpp:2096:5:2096:12 | CallTarget | func:r2096_1 | +| ir.cpp:2096:5:2096:12 | ChiPartial | partial:m2096_3 | +| ir.cpp:2096:5:2096:12 | ChiTotal | total:m2093_7 | +| ir.cpp:2096:5:2096:12 | SideEffect | ~m2093_7 | +| ir.cpp:2097:5:2097:13 | Address | &:r2097_1 | +| ir.cpp:2097:12:2097:12 | Address | &:r2097_2 | +| ir.cpp:2097:12:2097:12 | Load | m2093_8 | +| ir.cpp:2097:12:2097:12 | StoreValue | r2097_3 | +| ir.cpp:2100:6:2100:24 | ChiPartial | partial:m2100_3 | +| ir.cpp:2100:6:2100:24 | ChiTotal | total:m2100_2 | +| ir.cpp:2100:6:2100:24 | SideEffect | ~m2106_8 | +| ir.cpp:2100:33:2100:33 | Address | &:r2100_5 | +| ir.cpp:2101:3:2101:12 | Address | &:r2101_6 | +| ir.cpp:2101:3:2101:12 | Arg(0) | 0:r2101_5 | +| ir.cpp:2101:3:2101:12 | CallTarget | func:r2101_1 | +| ir.cpp:2101:3:2101:12 | ChiPartial | partial:m2101_7 | +| ir.cpp:2101:3:2101:12 | ChiTotal | total:m2100_4 | +| ir.cpp:2101:3:2101:12 | Right | r2101_4 | +| ir.cpp:2101:3:2101:12 | SideEffect | ~m2100_4 | +| ir.cpp:2101:3:2101:12 | Unary | r2101_6 | +| ir.cpp:2101:11:2101:11 | Address | &:r2101_2 | +| ir.cpp:2101:11:2101:11 | Left | r2101_3 | +| ir.cpp:2101:11:2101:11 | Load | m2100_6 | +| ir.cpp:2102:3:2102:18 | Address | &:r2102_7 | +| ir.cpp:2102:3:2102:18 | Arg(0) | 0:r2102_5 | +| ir.cpp:2102:3:2102:18 | CallTarget | func:r2102_1 | +| ir.cpp:2102:3:2102:18 | ChiPartial | partial:m2102_8 | +| ir.cpp:2102:3:2102:18 | ChiTotal | total:m2101_8 | +| ir.cpp:2102:3:2102:18 | Right | r2102_4 | +| ir.cpp:2102:3:2102:18 | SideEffect | ~m2101_8 | +| ir.cpp:2102:3:2102:18 | Unary | r2102_7 | +| ir.cpp:2102:7:2102:10 | Arg(1) | 1:r2102_6 | +| ir.cpp:2102:17:2102:17 | Address | &:r2102_2 | +| ir.cpp:2102:17:2102:17 | Left | r2102_3 | +| ir.cpp:2102:17:2102:17 | Load | m2100_6 | +| ir.cpp:2103:3:2103:15 | Address | &:r2103_6 | +| ir.cpp:2103:3:2103:15 | Arg(0) | 0:r2103_5 | +| ir.cpp:2103:3:2103:15 | CallTarget | func:r2103_1 | +| ir.cpp:2103:3:2103:15 | ChiPartial | partial:m2103_7 | +| ir.cpp:2103:3:2103:15 | ChiTotal | total:m2102_9 | +| ir.cpp:2103:3:2103:15 | Right | r2103_4 | +| ir.cpp:2103:3:2103:15 | SideEffect | ~m2102_9 | +| ir.cpp:2103:3:2103:15 | Unary | r2103_6 | +| ir.cpp:2103:14:2103:14 | Address | &:r2103_2 | +| ir.cpp:2103:14:2103:14 | Left | r2103_3 | +| ir.cpp:2103:14:2103:14 | Load | m2100_6 | +| ir.cpp:2104:3:2104:20 | Address | &:r2104_7 | +| ir.cpp:2104:3:2104:20 | Arg(0) | 0:r2104_5 | +| ir.cpp:2104:3:2104:20 | CallTarget | func:r2104_1 | +| ir.cpp:2104:3:2104:20 | ChiPartial | partial:m2104_8 | +| ir.cpp:2104:3:2104:20 | ChiTotal | total:m2103_8 | +| ir.cpp:2104:3:2104:20 | Right | r2104_4 | +| ir.cpp:2104:3:2104:20 | SideEffect | ~m2103_8 | +| ir.cpp:2104:3:2104:20 | Unary | r2104_7 | +| ir.cpp:2104:19:2104:19 | Address | &:r2104_2 | +| ir.cpp:2104:19:2104:19 | Left | r2104_3 | +| ir.cpp:2104:19:2104:19 | Load | m2100_6 | +| ir.cpp:2104:21:2104:21 | Arg(1) | 1:r2104_6 | +| ir.cpp:2105:3:2105:36 | Address | &:r2105_6 | +| ir.cpp:2105:3:2105:36 | Arg(0) | 0:r2105_5 | +| ir.cpp:2105:3:2105:36 | CallTarget | func:r2105_1 | +| ir.cpp:2105:3:2105:36 | ChiPartial | partial:m2105_7 | +| ir.cpp:2105:3:2105:36 | ChiTotal | total:m2104_9 | +| ir.cpp:2105:3:2105:36 | Right | r2105_4 | +| ir.cpp:2105:3:2105:36 | SideEffect | ~m2104_9 | +| ir.cpp:2105:3:2105:36 | Unary | r2105_6 | +| ir.cpp:2105:35:2105:35 | Address | &:r2105_2 | +| ir.cpp:2105:35:2105:35 | Left | r2105_3 | +| ir.cpp:2105:35:2105:35 | Load | m2100_6 | +| ir.cpp:2106:3:2106:24 | Address | &:r2106_6 | +| ir.cpp:2106:3:2106:24 | Arg(0) | 0:r2106_5 | +| ir.cpp:2106:3:2106:24 | CallTarget | func:r2106_1 | +| ir.cpp:2106:3:2106:24 | ChiPartial | partial:m2106_7 | +| ir.cpp:2106:3:2106:24 | ChiTotal | total:m2105_8 | +| ir.cpp:2106:3:2106:24 | Right | r2106_4 | +| ir.cpp:2106:3:2106:24 | SideEffect | ~m2105_8 | +| ir.cpp:2106:3:2106:24 | Unary | r2106_6 | +| ir.cpp:2106:11:2106:11 | Address | &:r2106_2 | +| ir.cpp:2106:11:2106:11 | Left | r2106_3 | +| ir.cpp:2106:11:2106:11 | Load | m2100_6 | +| ir.cpp:2111:7:2111:17 | Address | &:r2111_10 | +| ir.cpp:2111:7:2111:17 | ChiPartial | partial:m2111_3 | +| ir.cpp:2111:7:2111:17 | ChiTotal | total:m2111_2 | +| ir.cpp:2111:7:2111:17 | Load | m2114_4 | +| ir.cpp:2111:7:2111:17 | SideEffect | m2111_3 | +| ir.cpp:2111:25:2111:25 | Address | &:r2111_5 | +| ir.cpp:2111:25:2111:25 | Address | &:r2111_5 | +| ir.cpp:2111:25:2111:25 | Address | &:r2111_7 | +| ir.cpp:2111:25:2111:25 | Address | &:r2111_7 | +| ir.cpp:2111:25:2111:25 | Load | m2111_6 | +| ir.cpp:2111:25:2111:25 | SideEffect | m2111_8 | +| ir.cpp:2112:9:2112:11 | Address | &:r2112_1 | +| ir.cpp:2113:10:2113:10 | Address | &:r2113_1 | +| ir.cpp:2113:14:2113:19 | CallTarget | func:r2113_2 | +| ir.cpp:2113:14:2113:19 | StoreValue | r2113_8 | +| ir.cpp:2113:21:2113:21 | Address | &:r2113_3 | +| ir.cpp:2113:21:2113:21 | Address | &:r2113_5 | +| ir.cpp:2113:21:2113:21 | Arg(0) | 0:r2113_5 | +| ir.cpp:2113:21:2113:21 | Load | m2111_6 | +| ir.cpp:2113:21:2113:21 | SideEffect | ~m2111_8 | +| ir.cpp:2113:21:2113:21 | Unary | r2113_4 | +| ir.cpp:2113:24:2113:27 | Address | &:r2113_7 | +| ir.cpp:2113:24:2113:27 | Arg(1) | 1:r2113_7 | +| ir.cpp:2113:24:2113:27 | ChiPartial | partial:m2113_10 | +| ir.cpp:2113:24:2113:27 | ChiTotal | total:m2112_2 | +| ir.cpp:2113:25:2113:27 | Unary | r2113_6 | +| ir.cpp:2114:3:2114:13 | Address | &:r2114_1 | +| ir.cpp:2114:10:2114:12 | Address | &:r2114_2 | +| ir.cpp:2114:10:2114:12 | Load | m2113_11 | +| ir.cpp:2114:10:2114:12 | StoreValue | r2114_3 | +| ir.cpp:2121:6:2121:39 | ChiPartial | partial:m2121_3 | +| ir.cpp:2121:6:2121:39 | ChiTotal | total:m2121_2 | +| ir.cpp:2121:6:2121:39 | SideEffect | ~m2122_8 | +| ir.cpp:2122:6:2122:42 | Address | &:r2122_1 | +| ir.cpp:2122:6:2122:42 | Condition | r2122_12 | +| ir.cpp:2122:22:2122:22 | Address | &:r2122_4 | +| ir.cpp:2122:22:2122:22 | Address | &:r2122_4 | +| ir.cpp:2122:22:2122:22 | Arg(this) | this:r2122_4 | +| ir.cpp:2122:22:2122:22 | CallTarget | func:r2122_5 | +| ir.cpp:2122:22:2122:22 | ChiPartial | partial:m2122_7 | +| ir.cpp:2122:22:2122:22 | ChiPartial | partial:m2122_10 | +| ir.cpp:2122:22:2122:22 | ChiTotal | total:m2121_4 | +| ir.cpp:2122:22:2122:22 | ChiTotal | total:m2122_3 | +| ir.cpp:2122:22:2122:22 | SideEffect | m2122_3 | +| ir.cpp:2122:22:2122:22 | SideEffect | ~m2121_4 | +| ir.cpp:2122:22:2122:22 | Unary | r2122_6 | +| ir.cpp:2122:25:2122:42 | StoreValue | r2122_2 | | perf-regression.cpp:6:3:6:5 | Address | &:r6_5 | | perf-regression.cpp:6:3:6:5 | Address | &:r6_5 | | perf-regression.cpp:6:3:6:5 | Address | &:r6_7 | diff --git a/cpp/ql/test/library-tests/ir/ir/raw_consistency.expected b/cpp/ql/test/library-tests/ir/ir/raw_consistency.expected index d2a11541fd1..aefdbf9d134 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_consistency.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_consistency.expected @@ -20,7 +20,7 @@ multipleIRTypes lostReachability backEdgeCountMismatch useNotDominatedByDefinition -| ir.cpp:1486:8:1486:8 | Unary | Operand 'Unary' is not dominated by its definition in function '$@'. | ir.cpp:1486:8:1486:8 | void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct() | void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct() | +| ir.cpp:1488:8:1488:8 | Unary | Operand 'Unary' is not dominated by its definition in function '$@'. | ir.cpp:1488:8:1488:8 | void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct() | void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct() | | try_except.c:13:13:13:13 | Left | Operand 'Left' is not dominated by its definition in function '$@'. | try_except.c:6:6:6:6 | void f() | void f() | | try_except.c:13:13:13:13 | Left | Operand 'Left' is not dominated by its definition in function '$@'. | try_except.c:6:6:6:6 | void f() | void f() | | try_except.c:39:15:39:15 | Left | Operand 'Left' is not dominated by its definition in function '$@'. | try_except.c:32:6:32:6 | void h(int) | void h(int) | diff --git a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected index 53361dd907a..ee73d4520ed 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected @@ -6345,1445 +6345,1417 @@ ir.cpp: # 1054| v1054_41(void) = AliasedUse : ~m? # 1054| v1054_42(void) = ExitFunction : -# 1077| void RangeBasedFor(vector const&) -# 1077| Block 0 -# 1077| v1077_1(void) = EnterFunction : -# 1077| mu1077_2(unknown) = AliasedDefinition : -# 1077| mu1077_3(unknown) = InitializeNonLocal : -# 1077| r1077_4(glval &>) = VariableAddress[v] : -# 1077| mu1077_5(vector &) = InitializeParameter[v] : &:r1077_4 -# 1077| r1077_6(vector &) = Load[v] : &:r1077_4, ~m? -# 1077| mu1077_7(unknown) = InitializeIndirection[v] : &:r1077_6 -# 1078| r1078_1(glval &>) = VariableAddress[(__range)] : -# 1078| r1078_2(glval &>) = VariableAddress[v] : -# 1078| r1078_3(vector &) = Load[v] : &:r1078_2, ~m? -# 1078| r1078_4(glval>) = CopyValue : r1078_3 -# 1078| r1078_5(vector &) = CopyValue : r1078_4 -# 1078| mu1078_6(vector &) = Store[(__range)] : &:r1078_1, r1078_5 -# 1078| r1078_7(glval) = VariableAddress[(__begin)] : -# 1078| r1078_8(glval &>) = VariableAddress[(__range)] : -# 1078| r1078_9(vector &) = Load[(__range)] : &:r1078_8, ~m? -#-----| r0_1(glval>) = CopyValue : r1078_9 -# 1078| r1078_10(glval) = FunctionAddress[begin] : -# 1078| r1078_11(iterator) = Call[begin] : func:r1078_10, this:r0_1 -# 1078| mu1078_12(unknown) = ^CallSideEffect : ~m? +# 1079| void RangeBasedFor(vector const&) +# 1079| Block 0 +# 1079| v1079_1(void) = EnterFunction : +# 1079| mu1079_2(unknown) = AliasedDefinition : +# 1079| mu1079_3(unknown) = InitializeNonLocal : +# 1079| r1079_4(glval &>) = VariableAddress[v] : +# 1079| mu1079_5(vector &) = InitializeParameter[v] : &:r1079_4 +# 1079| r1079_6(vector &) = Load[v] : &:r1079_4, ~m? +# 1079| mu1079_7(unknown) = InitializeIndirection[v] : &:r1079_6 +# 1080| r1080_1(glval &>) = VariableAddress[(__range)] : +# 1080| r1080_2(glval &>) = VariableAddress[v] : +# 1080| r1080_3(vector &) = Load[v] : &:r1080_2, ~m? +# 1080| r1080_4(glval>) = CopyValue : r1080_3 +# 1080| r1080_5(vector &) = CopyValue : r1080_4 +# 1080| mu1080_6(vector &) = Store[(__range)] : &:r1080_1, r1080_5 +# 1080| r1080_7(glval) = VariableAddress[(__begin)] : +# 1080| r1080_8(glval &>) = VariableAddress[(__range)] : +# 1080| r1080_9(vector &) = Load[(__range)] : &:r1080_8, ~m? +#-----| r0_1(glval>) = CopyValue : r1080_9 +# 1080| r1080_10(glval) = FunctionAddress[begin] : +# 1080| r1080_11(iterator) = Call[begin] : func:r1080_10, this:r0_1 +# 1080| mu1080_12(unknown) = ^CallSideEffect : ~m? #-----| v0_2(void) = ^IndirectReadSideEffect[-1] : &:r0_1, ~m? -# 1078| mu1078_13(iterator) = Store[(__begin)] : &:r1078_7, r1078_11 -# 1078| r1078_14(glval) = VariableAddress[(__end)] : -# 1078| r1078_15(glval &>) = VariableAddress[(__range)] : -# 1078| r1078_16(vector &) = Load[(__range)] : &:r1078_15, ~m? -#-----| r0_3(glval>) = CopyValue : r1078_16 -# 1078| r1078_17(glval) = FunctionAddress[end] : -# 1078| r1078_18(iterator) = Call[end] : func:r1078_17, this:r0_3 -# 1078| mu1078_19(unknown) = ^CallSideEffect : ~m? +# 1080| mu1080_13(iterator) = Store[(__begin)] : &:r1080_7, r1080_11 +# 1080| r1080_14(glval) = VariableAddress[(__end)] : +# 1080| r1080_15(glval &>) = VariableAddress[(__range)] : +# 1080| r1080_16(vector &) = Load[(__range)] : &:r1080_15, ~m? +#-----| r0_3(glval>) = CopyValue : r1080_16 +# 1080| r1080_17(glval) = FunctionAddress[end] : +# 1080| r1080_18(iterator) = Call[end] : func:r1080_17, this:r0_3 +# 1080| mu1080_19(unknown) = ^CallSideEffect : ~m? #-----| v0_4(void) = ^IndirectReadSideEffect[-1] : &:r0_3, ~m? -# 1078| mu1078_20(iterator) = Store[(__end)] : &:r1078_14, r1078_18 +# 1080| mu1080_20(iterator) = Store[(__end)] : &:r1080_14, r1080_18 #-----| Goto -> Block 1 -# 1078| Block 1 -# 1078| r1078_21(glval) = VariableAddress[(__begin)] : -#-----| r0_5(glval) = Convert : r1078_21 -# 1078| r1078_22(glval) = FunctionAddress[operator!=] : -# 1078| r1078_23(glval) = VariableAddress[(__end)] : -# 1078| r1078_24(iterator) = Load[(__end)] : &:r1078_23, ~m? -# 1078| r1078_25(bool) = Call[operator!=] : func:r1078_22, this:r0_5, 0:r1078_24 -# 1078| mu1078_26(unknown) = ^CallSideEffect : ~m? +# 1080| Block 1 +# 1080| r1080_21(glval) = VariableAddress[(__begin)] : +#-----| r0_5(glval) = Convert : r1080_21 +# 1080| r1080_22(glval) = FunctionAddress[operator!=] : +# 1080| r1080_23(glval) = VariableAddress[(__end)] : +# 1080| r1080_24(iterator) = Load[(__end)] : &:r1080_23, ~m? +# 1080| r1080_25(bool) = Call[operator!=] : func:r1080_22, this:r0_5, 0:r1080_24 +# 1080| mu1080_26(unknown) = ^CallSideEffect : ~m? #-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, ~m? -# 1078| v1078_27(void) = ConditionalBranch : r1078_25 +# 1080| v1080_27(void) = ConditionalBranch : r1080_25 #-----| False -> Block 5 #-----| True -> Block 2 -# 1078| Block 2 -# 1078| r1078_28(glval) = VariableAddress[e] : -# 1078| r1078_29(glval) = VariableAddress[(__begin)] : -#-----| r0_7(glval) = Convert : r1078_29 -# 1078| r1078_30(glval) = FunctionAddress[operator*] : -# 1078| r1078_31(int &) = Call[operator*] : func:r1078_30, this:r0_7 -# 1078| mu1078_32(unknown) = ^CallSideEffect : ~m? +# 1080| Block 2 +# 1080| r1080_28(glval) = VariableAddress[e] : +# 1080| r1080_29(glval) = VariableAddress[(__begin)] : +#-----| r0_7(glval) = Convert : r1080_29 +# 1080| r1080_30(glval) = FunctionAddress[operator*] : +# 1080| r1080_31(int &) = Call[operator*] : func:r1080_30, this:r0_7 +# 1080| mu1080_32(unknown) = ^CallSideEffect : ~m? #-----| v0_8(void) = ^IndirectReadSideEffect[-1] : &:r0_7, ~m? -# 1078| r1078_33(int) = Load[?] : &:r1078_31, ~m? -# 1078| mu1078_34(int) = Store[e] : &:r1078_28, r1078_33 -# 1079| r1079_1(glval) = VariableAddress[e] : -# 1079| r1079_2(int) = Load[e] : &:r1079_1, ~m? -# 1079| r1079_3(int) = Constant[0] : -# 1079| r1079_4(bool) = CompareGT : r1079_2, r1079_3 -# 1079| v1079_5(void) = ConditionalBranch : r1079_4 +# 1080| r1080_33(int) = Load[?] : &:r1080_31, ~m? +# 1080| mu1080_34(int) = Store[e] : &:r1080_28, r1080_33 +# 1081| r1081_1(glval) = VariableAddress[e] : +# 1081| r1081_2(int) = Load[e] : &:r1081_1, ~m? +# 1081| r1081_3(int) = Constant[0] : +# 1081| r1081_4(bool) = CompareGT : r1081_2, r1081_3 +# 1081| v1081_5(void) = ConditionalBranch : r1081_4 #-----| False -> Block 4 #-----| True -> Block 3 -# 1080| Block 3 -# 1080| v1080_1(void) = NoOp : +# 1082| Block 3 +# 1082| v1082_1(void) = NoOp : #-----| Goto -> Block 4 -# 1078| Block 4 -# 1078| v1078_35(void) = NoOp : -# 1078| r1078_36(glval) = VariableAddress[(__begin)] : -# 1078| r1078_37(glval) = FunctionAddress[operator++] : -# 1078| r1078_38(iterator &) = Call[operator++] : func:r1078_37, this:r1078_36 -# 1078| mu1078_39(unknown) = ^CallSideEffect : ~m? -# 1078| v1078_40(void) = ^IndirectReadSideEffect[-1] : &:r1078_36, ~m? -# 1078| mu1078_41(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r1078_36 -# 1078| r1078_42(glval) = CopyValue : r1078_38 +# 1080| Block 4 +# 1080| v1080_35(void) = NoOp : +# 1080| r1080_36(glval) = VariableAddress[(__begin)] : +# 1080| r1080_37(glval) = FunctionAddress[operator++] : +# 1080| r1080_38(iterator &) = Call[operator++] : func:r1080_37, this:r1080_36 +# 1080| mu1080_39(unknown) = ^CallSideEffect : ~m? +# 1080| v1080_40(void) = ^IndirectReadSideEffect[-1] : &:r1080_36, ~m? +# 1080| mu1080_41(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r1080_36 +# 1080| r1080_42(glval) = CopyValue : r1080_38 #-----| Goto (back edge) -> Block 1 -# 1084| Block 5 -# 1084| r1084_1(glval &>) = VariableAddress[(__range)] : -# 1084| r1084_2(glval &>) = VariableAddress[v] : -# 1084| r1084_3(vector &) = Load[v] : &:r1084_2, ~m? -# 1084| r1084_4(glval>) = CopyValue : r1084_3 -# 1084| r1084_5(vector &) = CopyValue : r1084_4 -# 1084| mu1084_6(vector &) = Store[(__range)] : &:r1084_1, r1084_5 -# 1084| r1084_7(glval) = VariableAddress[(__begin)] : -# 1084| r1084_8(glval &>) = VariableAddress[(__range)] : -# 1084| r1084_9(vector &) = Load[(__range)] : &:r1084_8, ~m? -#-----| r0_9(glval>) = CopyValue : r1084_9 -# 1084| r1084_10(glval) = FunctionAddress[begin] : -# 1084| r1084_11(iterator) = Call[begin] : func:r1084_10, this:r0_9 -# 1084| mu1084_12(unknown) = ^CallSideEffect : ~m? +# 1086| Block 5 +# 1086| r1086_1(glval &>) = VariableAddress[(__range)] : +# 1086| r1086_2(glval &>) = VariableAddress[v] : +# 1086| r1086_3(vector &) = Load[v] : &:r1086_2, ~m? +# 1086| r1086_4(glval>) = CopyValue : r1086_3 +# 1086| r1086_5(vector &) = CopyValue : r1086_4 +# 1086| mu1086_6(vector &) = Store[(__range)] : &:r1086_1, r1086_5 +# 1086| r1086_7(glval) = VariableAddress[(__begin)] : +# 1086| r1086_8(glval &>) = VariableAddress[(__range)] : +# 1086| r1086_9(vector &) = Load[(__range)] : &:r1086_8, ~m? +#-----| r0_9(glval>) = CopyValue : r1086_9 +# 1086| r1086_10(glval) = FunctionAddress[begin] : +# 1086| r1086_11(iterator) = Call[begin] : func:r1086_10, this:r0_9 +# 1086| mu1086_12(unknown) = ^CallSideEffect : ~m? #-----| v0_10(void) = ^IndirectReadSideEffect[-1] : &:r0_9, ~m? -# 1084| mu1084_13(iterator) = Store[(__begin)] : &:r1084_7, r1084_11 -# 1084| r1084_14(glval) = VariableAddress[(__end)] : -# 1084| r1084_15(glval &>) = VariableAddress[(__range)] : -# 1084| r1084_16(vector &) = Load[(__range)] : &:r1084_15, ~m? -#-----| r0_11(glval>) = CopyValue : r1084_16 -# 1084| r1084_17(glval) = FunctionAddress[end] : -# 1084| r1084_18(iterator) = Call[end] : func:r1084_17, this:r0_11 -# 1084| mu1084_19(unknown) = ^CallSideEffect : ~m? +# 1086| mu1086_13(iterator) = Store[(__begin)] : &:r1086_7, r1086_11 +# 1086| r1086_14(glval) = VariableAddress[(__end)] : +# 1086| r1086_15(glval &>) = VariableAddress[(__range)] : +# 1086| r1086_16(vector &) = Load[(__range)] : &:r1086_15, ~m? +#-----| r0_11(glval>) = CopyValue : r1086_16 +# 1086| r1086_17(glval) = FunctionAddress[end] : +# 1086| r1086_18(iterator) = Call[end] : func:r1086_17, this:r0_11 +# 1086| mu1086_19(unknown) = ^CallSideEffect : ~m? #-----| v0_12(void) = ^IndirectReadSideEffect[-1] : &:r0_11, ~m? -# 1084| mu1084_20(iterator) = Store[(__end)] : &:r1084_14, r1084_18 +# 1086| mu1086_20(iterator) = Store[(__end)] : &:r1086_14, r1086_18 #-----| Goto -> Block 6 -# 1084| Block 6 -# 1084| r1084_21(glval) = VariableAddress[(__begin)] : -#-----| r0_13(glval) = Convert : r1084_21 -# 1084| r1084_22(glval) = FunctionAddress[operator!=] : -# 1084| r1084_23(glval) = VariableAddress[(__end)] : -# 1084| r1084_24(iterator) = Load[(__end)] : &:r1084_23, ~m? -# 1084| r1084_25(bool) = Call[operator!=] : func:r1084_22, this:r0_13, 0:r1084_24 -# 1084| mu1084_26(unknown) = ^CallSideEffect : ~m? +# 1086| Block 6 +# 1086| r1086_21(glval) = VariableAddress[(__begin)] : +#-----| r0_13(glval) = Convert : r1086_21 +# 1086| r1086_22(glval) = FunctionAddress[operator!=] : +# 1086| r1086_23(glval) = VariableAddress[(__end)] : +# 1086| r1086_24(iterator) = Load[(__end)] : &:r1086_23, ~m? +# 1086| r1086_25(bool) = Call[operator!=] : func:r1086_22, this:r0_13, 0:r1086_24 +# 1086| mu1086_26(unknown) = ^CallSideEffect : ~m? #-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_13, ~m? -# 1084| v1084_27(void) = ConditionalBranch : r1084_25 +# 1086| v1086_27(void) = ConditionalBranch : r1086_25 #-----| False -> Block 10 #-----| True -> Block 8 -# 1084| Block 7 -# 1084| r1084_28(glval) = VariableAddress[(__begin)] : -# 1084| r1084_29(glval) = FunctionAddress[operator++] : -# 1084| r1084_30(iterator &) = Call[operator++] : func:r1084_29, this:r1084_28 -# 1084| mu1084_31(unknown) = ^CallSideEffect : ~m? -# 1084| v1084_32(void) = ^IndirectReadSideEffect[-1] : &:r1084_28, ~m? -# 1084| mu1084_33(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r1084_28 -# 1084| r1084_34(glval) = CopyValue : r1084_30 +# 1086| Block 7 +# 1086| r1086_28(glval) = VariableAddress[(__begin)] : +# 1086| r1086_29(glval) = FunctionAddress[operator++] : +# 1086| r1086_30(iterator &) = Call[operator++] : func:r1086_29, this:r1086_28 +# 1086| mu1086_31(unknown) = ^CallSideEffect : ~m? +# 1086| v1086_32(void) = ^IndirectReadSideEffect[-1] : &:r1086_28, ~m? +# 1086| mu1086_33(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r1086_28 +# 1086| r1086_34(glval) = CopyValue : r1086_30 #-----| Goto (back edge) -> Block 6 -# 1084| Block 8 -# 1084| r1084_35(glval) = VariableAddress[e] : -# 1084| r1084_36(glval) = VariableAddress[(__begin)] : -#-----| r0_15(glval) = Convert : r1084_36 -# 1084| r1084_37(glval) = FunctionAddress[operator*] : -# 1084| r1084_38(int &) = Call[operator*] : func:r1084_37, this:r0_15 -# 1084| mu1084_39(unknown) = ^CallSideEffect : ~m? +# 1086| Block 8 +# 1086| r1086_35(glval) = VariableAddress[e] : +# 1086| r1086_36(glval) = VariableAddress[(__begin)] : +#-----| r0_15(glval) = Convert : r1086_36 +# 1086| r1086_37(glval) = FunctionAddress[operator*] : +# 1086| r1086_38(int &) = Call[operator*] : func:r1086_37, this:r0_15 +# 1086| mu1086_39(unknown) = ^CallSideEffect : ~m? #-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, ~m? -# 1084| r1084_40(glval) = CopyValue : r1084_38 -# 1084| r1084_41(glval) = Convert : r1084_40 -# 1084| r1084_42(int &) = CopyValue : r1084_41 -# 1084| mu1084_43(int &) = Store[e] : &:r1084_35, r1084_42 -# 1085| r1085_1(glval) = VariableAddress[e] : -# 1085| r1085_2(int &) = Load[e] : &:r1085_1, ~m? -# 1085| r1085_3(int) = Load[?] : &:r1085_2, ~m? -# 1085| r1085_4(int) = Constant[5] : -# 1085| r1085_5(bool) = CompareLT : r1085_3, r1085_4 -# 1085| v1085_6(void) = ConditionalBranch : r1085_5 +# 1086| r1086_40(glval) = CopyValue : r1086_38 +# 1086| r1086_41(glval) = Convert : r1086_40 +# 1086| r1086_42(int &) = CopyValue : r1086_41 +# 1086| mu1086_43(int &) = Store[e] : &:r1086_35, r1086_42 +# 1087| r1087_1(glval) = VariableAddress[e] : +# 1087| r1087_2(int &) = Load[e] : &:r1087_1, ~m? +# 1087| r1087_3(int) = Load[?] : &:r1087_2, ~m? +# 1087| r1087_4(int) = Constant[5] : +# 1087| r1087_5(bool) = CompareLT : r1087_3, r1087_4 +# 1087| v1087_6(void) = ConditionalBranch : r1087_5 #-----| False -> Block 7 #-----| True -> Block 9 -# 1086| Block 9 -# 1086| v1086_1(void) = NoOp : +# 1088| Block 9 +# 1088| v1088_1(void) = NoOp : #-----| Goto -> Block 10 -# 1088| Block 10 -# 1088| v1088_1(void) = NoOp : -# 1089| v1089_1(void) = NoOp : -# 1077| v1077_8(void) = ReturnIndirection[v] : &:r1077_6, ~m? -# 1077| v1077_9(void) = ReturnVoid : -# 1077| v1077_10(void) = AliasedUse : ~m? -# 1077| v1077_11(void) = ExitFunction : +# 1090| Block 10 +# 1090| v1090_1(void) = NoOp : +# 1091| v1091_1(void) = NoOp : +# 1079| v1079_8(void) = ReturnIndirection[v] : &:r1079_6, ~m? +# 1079| v1079_9(void) = ReturnVoid : +# 1079| v1079_10(void) = AliasedUse : ~m? +# 1079| v1079_11(void) = ExitFunction : -# 1108| int AsmStmt(int) -# 1108| Block 0 -# 1108| v1108_1(void) = EnterFunction : -# 1108| mu1108_2(unknown) = AliasedDefinition : -# 1108| mu1108_3(unknown) = InitializeNonLocal : -# 1108| r1108_4(glval) = VariableAddress[x] : -# 1108| mu1108_5(int) = InitializeParameter[x] : &:r1108_4 -# 1109| mu1109_1(unknown) = InlineAsm : ~m? -# 1110| r1110_1(glval) = VariableAddress[#return] : -# 1110| r1110_2(glval) = VariableAddress[x] : -# 1110| r1110_3(int) = Load[x] : &:r1110_2, ~m? -# 1110| mu1110_4(int) = Store[#return] : &:r1110_1, r1110_3 -# 1108| r1108_6(glval) = VariableAddress[#return] : -# 1108| v1108_7(void) = ReturnValue : &:r1108_6, ~m? -# 1108| v1108_8(void) = AliasedUse : ~m? -# 1108| v1108_9(void) = ExitFunction : +# 1110| int AsmStmt(int) +# 1110| Block 0 +# 1110| v1110_1(void) = EnterFunction : +# 1110| mu1110_2(unknown) = AliasedDefinition : +# 1110| mu1110_3(unknown) = InitializeNonLocal : +# 1110| r1110_4(glval) = VariableAddress[x] : +# 1110| mu1110_5(int) = InitializeParameter[x] : &:r1110_4 +# 1111| mu1111_1(unknown) = InlineAsm : ~m? +# 1112| r1112_1(glval) = VariableAddress[#return] : +# 1112| r1112_2(glval) = VariableAddress[x] : +# 1112| r1112_3(int) = Load[x] : &:r1112_2, ~m? +# 1112| mu1112_4(int) = Store[#return] : &:r1112_1, r1112_3 +# 1110| r1110_6(glval) = VariableAddress[#return] : +# 1110| v1110_7(void) = ReturnValue : &:r1110_6, ~m? +# 1110| v1110_8(void) = AliasedUse : ~m? +# 1110| v1110_9(void) = ExitFunction : -# 1113| void AsmStmtWithOutputs(unsigned int&, unsigned int, unsigned int&, unsigned int) -# 1113| Block 0 -# 1113| v1113_1(void) = EnterFunction : -# 1113| mu1113_2(unknown) = AliasedDefinition : -# 1113| mu1113_3(unknown) = InitializeNonLocal : -# 1113| r1113_4(glval) = VariableAddress[a] : -# 1113| mu1113_5(unsigned int &) = InitializeParameter[a] : &:r1113_4 -# 1113| r1113_6(unsigned int &) = Load[a] : &:r1113_4, ~m? -# 1113| mu1113_7(unknown) = InitializeIndirection[a] : &:r1113_6 -# 1113| r1113_8(glval) = VariableAddress[b] : -# 1113| mu1113_9(unsigned int) = InitializeParameter[b] : &:r1113_8 -# 1113| r1113_10(glval) = VariableAddress[c] : -# 1113| mu1113_11(unsigned int &) = InitializeParameter[c] : &:r1113_10 -# 1113| r1113_12(unsigned int &) = Load[c] : &:r1113_10, ~m? -# 1113| mu1113_13(unknown) = InitializeIndirection[c] : &:r1113_12 -# 1113| r1113_14(glval) = VariableAddress[d] : -# 1113| mu1113_15(unsigned int) = InitializeParameter[d] : &:r1113_14 -# 1118| r1118_1(glval) = VariableAddress[a] : -# 1118| r1118_2(unsigned int &) = Load[a] : &:r1118_1, ~m? -# 1118| r1118_3(glval) = CopyValue : r1118_2 -# 1118| r1118_4(glval) = VariableAddress[b] : -# 1118| r1118_5(glval) = VariableAddress[c] : -# 1118| r1118_6(unsigned int &) = Load[c] : &:r1118_5, ~m? -# 1118| r1118_7(unsigned int) = Load[?] : &:r1118_6, ~m? -# 1118| r1118_8(glval) = VariableAddress[d] : -# 1118| r1118_9(unsigned int) = Load[d] : &:r1118_8, ~m? -# 1115| mu1115_1(unknown) = InlineAsm : ~m?, 0:r1118_3, 1:r1118_4, 2:r1118_7, 3:r1118_9 -# 1120| v1120_1(void) = NoOp : -# 1113| v1113_16(void) = ReturnIndirection[a] : &:r1113_6, ~m? -# 1113| v1113_17(void) = ReturnIndirection[c] : &:r1113_12, ~m? -# 1113| v1113_18(void) = ReturnVoid : -# 1113| v1113_19(void) = AliasedUse : ~m? -# 1113| v1113_20(void) = ExitFunction : +# 1115| void AsmStmtWithOutputs(unsigned int&, unsigned int, unsigned int&, unsigned int) +# 1115| Block 0 +# 1115| v1115_1(void) = EnterFunction : +# 1115| mu1115_2(unknown) = AliasedDefinition : +# 1115| mu1115_3(unknown) = InitializeNonLocal : +# 1115| r1115_4(glval) = VariableAddress[a] : +# 1115| mu1115_5(unsigned int &) = InitializeParameter[a] : &:r1115_4 +# 1115| r1115_6(unsigned int &) = Load[a] : &:r1115_4, ~m? +# 1115| mu1115_7(unknown) = InitializeIndirection[a] : &:r1115_6 +# 1115| r1115_8(glval) = VariableAddress[b] : +# 1115| mu1115_9(unsigned int) = InitializeParameter[b] : &:r1115_8 +# 1115| r1115_10(glval) = VariableAddress[c] : +# 1115| mu1115_11(unsigned int &) = InitializeParameter[c] : &:r1115_10 +# 1115| r1115_12(unsigned int &) = Load[c] : &:r1115_10, ~m? +# 1115| mu1115_13(unknown) = InitializeIndirection[c] : &:r1115_12 +# 1115| r1115_14(glval) = VariableAddress[d] : +# 1115| mu1115_15(unsigned int) = InitializeParameter[d] : &:r1115_14 +# 1120| r1120_1(glval) = VariableAddress[a] : +# 1120| r1120_2(unsigned int &) = Load[a] : &:r1120_1, ~m? +# 1120| r1120_3(glval) = CopyValue : r1120_2 +# 1120| r1120_4(glval) = VariableAddress[b] : +# 1120| r1120_5(glval) = VariableAddress[c] : +# 1120| r1120_6(unsigned int &) = Load[c] : &:r1120_5, ~m? +# 1120| r1120_7(unsigned int) = Load[?] : &:r1120_6, ~m? +# 1120| r1120_8(glval) = VariableAddress[d] : +# 1120| r1120_9(unsigned int) = Load[d] : &:r1120_8, ~m? +# 1117| mu1117_1(unknown) = InlineAsm : ~m?, 0:r1120_3, 1:r1120_4, 2:r1120_7, 3:r1120_9 +# 1122| v1122_1(void) = NoOp : +# 1115| v1115_16(void) = ReturnIndirection[a] : &:r1115_6, ~m? +# 1115| v1115_17(void) = ReturnIndirection[c] : &:r1115_12, ~m? +# 1115| v1115_18(void) = ReturnVoid : +# 1115| v1115_19(void) = AliasedUse : ~m? +# 1115| v1115_20(void) = ExitFunction : -# 1122| void ExternDeclarations() -# 1122| Block 0 -# 1122| v1122_1(void) = EnterFunction : -# 1122| mu1122_2(unknown) = AliasedDefinition : -# 1122| mu1122_3(unknown) = InitializeNonLocal : -# 1125| r1125_1(glval) = VariableAddress[x] : -# 1125| mu1125_2(int) = Uninitialized[x] : &:r1125_1 -# 1126| r1126_1(glval) = VariableAddress[y] : -# 1126| mu1126_2(int) = Uninitialized[y] : &:r1126_1 -# 1127| r1127_1(glval) = VariableAddress[h] : -# 1127| mu1127_2(int) = Uninitialized[h] : &:r1127_1 -# 1129| v1129_1(void) = NoOp : -# 1122| v1122_4(void) = ReturnVoid : -# 1122| v1122_5(void) = AliasedUse : ~m? -# 1122| v1122_6(void) = ExitFunction : +# 1124| void ExternDeclarations() +# 1124| Block 0 +# 1124| v1124_1(void) = EnterFunction : +# 1124| mu1124_2(unknown) = AliasedDefinition : +# 1124| mu1124_3(unknown) = InitializeNonLocal : +# 1127| r1127_1(glval) = VariableAddress[x] : +# 1127| mu1127_2(int) = Uninitialized[x] : &:r1127_1 +# 1128| r1128_1(glval) = VariableAddress[y] : +# 1128| mu1128_2(int) = Uninitialized[y] : &:r1128_1 +# 1129| r1129_1(glval) = VariableAddress[h] : +# 1129| mu1129_2(int) = Uninitialized[h] : &:r1129_1 +# 1131| v1131_1(void) = NoOp : +# 1124| v1124_4(void) = ReturnVoid : +# 1124| v1124_5(void) = AliasedUse : ~m? +# 1124| v1124_6(void) = ExitFunction : -# 1137| void ExternDeclarationsInMacro() -# 1137| Block 0 -# 1137| v1137_1(void) = EnterFunction : -# 1137| mu1137_2(unknown) = AliasedDefinition : -# 1137| mu1137_3(unknown) = InitializeNonLocal : -# 1139| r1139_1(glval) = VariableAddress[i] : -# 1139| r1139_2(int) = Constant[0] : -# 1139| mu1139_3(int) = Store[i] : &:r1139_1, r1139_2 +# 1139| void ExternDeclarationsInMacro() +# 1139| Block 0 +# 1139| v1139_1(void) = EnterFunction : +# 1139| mu1139_2(unknown) = AliasedDefinition : +# 1139| mu1139_3(unknown) = InitializeNonLocal : +# 1141| r1141_1(glval) = VariableAddress[i] : +# 1141| r1141_2(int) = Constant[0] : +# 1141| mu1141_3(int) = Store[i] : &:r1141_1, r1141_2 #-----| Goto -> Block 1 -# 1139| Block 1 -# 1139| r1139_4(glval) = VariableAddress[i] : -# 1139| r1139_5(int) = Load[i] : &:r1139_4, ~m? -# 1139| r1139_6(int) = Constant[10] : -# 1139| r1139_7(bool) = CompareLT : r1139_5, r1139_6 -# 1139| v1139_8(void) = ConditionalBranch : r1139_7 +# 1141| Block 1 +# 1141| r1141_4(glval) = VariableAddress[i] : +# 1141| r1141_5(int) = Load[i] : &:r1141_4, ~m? +# 1141| r1141_6(int) = Constant[10] : +# 1141| r1141_7(bool) = CompareLT : r1141_5, r1141_6 +# 1141| v1141_8(void) = ConditionalBranch : r1141_7 #-----| False -> Block 3 #-----| True -> Block 2 -# 1139| Block 2 -# 1139| r1139_9(glval) = VariableAddress[i] : -# 1139| r1139_10(int) = Load[i] : &:r1139_9, ~m? -# 1139| r1139_11(int) = Constant[1] : -# 1139| r1139_12(int) = Add : r1139_10, r1139_11 -# 1139| mu1139_13(int) = Store[i] : &:r1139_9, r1139_12 +# 1141| Block 2 +# 1141| r1141_9(glval) = VariableAddress[i] : +# 1141| r1141_10(int) = Load[i] : &:r1141_9, ~m? +# 1141| r1141_11(int) = Constant[1] : +# 1141| r1141_12(int) = Add : r1141_10, r1141_11 +# 1141| mu1141_13(int) = Store[i] : &:r1141_9, r1141_12 #-----| Goto (back edge) -> Block 1 -# 1139| Block 3 -# 1139| v1139_14(void) = NoOp : -# 1140| v1140_1(void) = NoOp : -# 1137| v1137_4(void) = ReturnVoid : -# 1137| v1137_5(void) = AliasedUse : ~m? -# 1137| v1137_6(void) = ExitFunction : +# 1141| Block 3 +# 1141| v1141_14(void) = NoOp : +# 1142| v1142_1(void) = NoOp : +# 1139| v1139_4(void) = ReturnVoid : +# 1139| v1139_5(void) = AliasedUse : ~m? +# 1139| v1139_6(void) = ExitFunction : -# 1142| void TryCatchNoCatchAny(bool) -# 1142| Block 0 -# 1142| v1142_1(void) = EnterFunction : -# 1142| mu1142_2(unknown) = AliasedDefinition : -# 1142| mu1142_3(unknown) = InitializeNonLocal : -# 1142| r1142_4(glval) = VariableAddress[b] : -# 1142| mu1142_5(bool) = InitializeParameter[b] : &:r1142_4 -# 1144| r1144_1(glval) = VariableAddress[x] : -# 1144| r1144_2(int) = Constant[5] : -# 1144| mu1144_3(int) = Store[x] : &:r1144_1, r1144_2 -# 1145| r1145_1(glval) = VariableAddress[b] : -# 1145| r1145_2(bool) = Load[b] : &:r1145_1, ~m? -# 1145| v1145_3(void) = ConditionalBranch : r1145_2 +# 1144| void TryCatchNoCatchAny(bool) +# 1144| Block 0 +# 1144| v1144_1(void) = EnterFunction : +# 1144| mu1144_2(unknown) = AliasedDefinition : +# 1144| mu1144_3(unknown) = InitializeNonLocal : +# 1144| r1144_4(glval) = VariableAddress[b] : +# 1144| mu1144_5(bool) = InitializeParameter[b] : &:r1144_4 +# 1146| r1146_1(glval) = VariableAddress[x] : +# 1146| r1146_2(int) = Constant[5] : +# 1146| mu1146_3(int) = Store[x] : &:r1146_1, r1146_2 +# 1147| r1147_1(glval) = VariableAddress[b] : +# 1147| r1147_2(bool) = Load[b] : &:r1147_1, ~m? +# 1147| v1147_3(void) = ConditionalBranch : r1147_2 #-----| False -> Block 4 #-----| True -> Block 3 -# 1142| Block 1 -# 1142| v1142_6(void) = AliasedUse : ~m? -# 1142| v1142_7(void) = ExitFunction : +# 1144| Block 1 +# 1144| v1144_6(void) = AliasedUse : ~m? +# 1144| v1144_7(void) = ExitFunction : -# 1142| Block 2 -# 1142| v1142_8(void) = Unwind : +# 1144| Block 2 +# 1144| v1144_8(void) = Unwind : #-----| Goto -> Block 1 -# 1146| Block 3 -# 1146| r1146_1(glval) = VariableAddress[#throw1146:7] : -# 1146| r1146_2(glval) = StringConstant["string literal"] : -# 1146| r1146_3(char *) = Convert : r1146_2 -# 1146| mu1146_4(char *) = Store[#throw1146:7] : &:r1146_1, r1146_3 -# 1146| v1146_5(void) = ThrowValue : &:r1146_1, ~m? +# 1148| Block 3 +# 1148| r1148_1(glval) = VariableAddress[#throw1148:7] : +# 1148| r1148_2(glval) = StringConstant["string literal"] : +# 1148| r1148_3(char *) = Convert : r1148_2 +# 1148| mu1148_4(char *) = Store[#throw1148:7] : &:r1148_1, r1148_3 +# 1148| v1148_5(void) = ThrowValue : &:r1148_1, ~m? #-----| Exception -> Block 9 -# 1148| Block 4 -# 1148| r1148_1(glval) = VariableAddress[x] : -# 1148| r1148_2(int) = Load[x] : &:r1148_1, ~m? -# 1148| r1148_3(int) = Constant[2] : -# 1148| r1148_4(bool) = CompareLT : r1148_2, r1148_3 -# 1148| v1148_5(void) = ConditionalBranch : r1148_4 +# 1150| Block 4 +# 1150| r1150_1(glval) = VariableAddress[x] : +# 1150| r1150_2(int) = Load[x] : &:r1150_1, ~m? +# 1150| r1150_3(int) = Constant[2] : +# 1150| r1150_4(bool) = CompareLT : r1150_2, r1150_3 +# 1150| v1150_5(void) = ConditionalBranch : r1150_4 #-----| False -> Block 8 #-----| True -> Block 5 -# 1149| Block 5 -# 1149| r1149_1(glval) = VariableAddress[b] : -# 1149| r1149_2(bool) = Load[b] : &:r1149_1, ~m? -# 1149| v1149_3(void) = ConditionalBranch : r1149_2 +# 1151| Block 5 +# 1151| r1151_1(glval) = VariableAddress[b] : +# 1151| r1151_2(bool) = Load[b] : &:r1151_1, ~m? +# 1151| v1151_3(void) = ConditionalBranch : r1151_2 #-----| False -> Block 7 #-----| True -> Block 6 -# 1149| Block 6 -# 1149| r1149_4(int) = Constant[7] : -# 1149| r1149_5(glval) = VariableAddress[#temp1149:11] : -# 1149| mu1149_6(int) = Store[#temp1149:11] : &:r1149_5, r1149_4 -# 1149| r1149_7(glval) = VariableAddress[#temp1149:11] : -# 1149| r1149_8(int) = Load[#temp1149:11] : &:r1149_7, ~m? -# 1149| r1149_9(glval) = VariableAddress[x] : -# 1149| mu1149_10(int) = Store[x] : &:r1149_9, r1149_8 +# 1151| Block 6 +# 1151| r1151_4(int) = Constant[7] : +# 1151| r1151_5(glval) = VariableAddress[#temp1151:11] : +# 1151| mu1151_6(int) = Store[#temp1151:11] : &:r1151_5, r1151_4 +# 1151| r1151_7(glval) = VariableAddress[#temp1151:11] : +# 1151| r1151_8(int) = Load[#temp1151:11] : &:r1151_7, ~m? +# 1151| r1151_9(glval) = VariableAddress[x] : +# 1151| mu1151_10(int) = Store[x] : &:r1151_9, r1151_8 #-----| Goto -> Block 8 -# 1149| Block 7 -# 1149| r1149_11(glval) = VariableAddress[#throw1149:19] : -# 1149| mu1149_12(String) = Uninitialized[#throw1149:19] : &:r1149_11 -# 1149| r1149_13(glval) = FunctionAddress[String] : -# 1149| r1149_14(glval) = StringConstant["String object"] : -# 1149| r1149_15(char *) = Convert : r1149_14 -# 1149| v1149_16(void) = Call[String] : func:r1149_13, this:r1149_11, 0:r1149_15 -# 1149| mu1149_17(unknown) = ^CallSideEffect : ~m? -# 1149| v1149_18(void) = ^BufferReadSideEffect[0] : &:r1149_15, ~m? -# 1149| mu1149_19(String) = ^IndirectMayWriteSideEffect[-1] : &:r1149_11 -# 1149| v1149_20(void) = ThrowValue : &:r1149_11, ~m? +# 1151| Block 7 +# 1151| r1151_11(glval) = VariableAddress[#throw1151:19] : +# 1151| mu1151_12(String) = Uninitialized[#throw1151:19] : &:r1151_11 +# 1151| r1151_13(glval) = FunctionAddress[String] : +# 1151| r1151_14(glval) = StringConstant["String object"] : +# 1151| r1151_15(char *) = Convert : r1151_14 +# 1151| v1151_16(void) = Call[String] : func:r1151_13, this:r1151_11, 0:r1151_15 +# 1151| mu1151_17(unknown) = ^CallSideEffect : ~m? +# 1151| v1151_18(void) = ^BufferReadSideEffect[0] : &:r1151_15, ~m? +# 1151| mu1151_19(String) = ^IndirectMayWriteSideEffect[-1] : &:r1151_11 +# 1151| v1151_20(void) = ThrowValue : &:r1151_11, ~m? #-----| Exception -> Block 9 -# 1151| Block 8 -# 1151| r1151_1(int) = Constant[7] : -# 1151| r1151_2(glval) = VariableAddress[x] : -# 1151| mu1151_3(int) = Store[x] : &:r1151_2, r1151_1 +# 1153| Block 8 +# 1153| r1153_1(int) = Constant[7] : +# 1153| r1153_2(glval) = VariableAddress[x] : +# 1153| mu1153_3(int) = Store[x] : &:r1153_2, r1153_1 #-----| Goto -> Block 13 -# 1153| Block 9 -# 1153| v1153_1(void) = CatchByType[const char *] : +# 1155| Block 9 +# 1155| v1155_1(void) = CatchByType[const char *] : #-----| Exception -> Block 11 #-----| Goto -> Block 10 -# 1153| Block 10 -# 1153| r1153_2(glval) = VariableAddress[s] : -# 1153| mu1153_3(char *) = InitializeParameter[s] : &:r1153_2 -# 1153| r1153_4(char *) = Load[s] : &:r1153_2, ~m? -# 1153| mu1153_5(unknown) = InitializeIndirection[s] : &:r1153_4 -# 1154| r1154_1(glval) = VariableAddress[#throw1154:5] : -# 1154| mu1154_2(String) = Uninitialized[#throw1154:5] : &:r1154_1 -# 1154| r1154_3(glval) = FunctionAddress[String] : -# 1154| r1154_4(glval) = VariableAddress[s] : -# 1154| r1154_5(char *) = Load[s] : &:r1154_4, ~m? -# 1154| v1154_6(void) = Call[String] : func:r1154_3, this:r1154_1, 0:r1154_5 -# 1154| mu1154_7(unknown) = ^CallSideEffect : ~m? -# 1154| v1154_8(void) = ^BufferReadSideEffect[0] : &:r1154_5, ~m? -# 1154| mu1154_9(String) = ^IndirectMayWriteSideEffect[-1] : &:r1154_1 -# 1154| v1154_10(void) = ThrowValue : &:r1154_1, ~m? +# 1155| Block 10 +# 1155| r1155_2(glval) = VariableAddress[s] : +# 1155| mu1155_3(char *) = InitializeParameter[s] : &:r1155_2 +# 1155| r1155_4(char *) = Load[s] : &:r1155_2, ~m? +# 1155| mu1155_5(unknown) = InitializeIndirection[s] : &:r1155_4 +# 1156| r1156_1(glval) = VariableAddress[#throw1156:5] : +# 1156| mu1156_2(String) = Uninitialized[#throw1156:5] : &:r1156_1 +# 1156| r1156_3(glval) = FunctionAddress[String] : +# 1156| r1156_4(glval) = VariableAddress[s] : +# 1156| r1156_5(char *) = Load[s] : &:r1156_4, ~m? +# 1156| v1156_6(void) = Call[String] : func:r1156_3, this:r1156_1, 0:r1156_5 +# 1156| mu1156_7(unknown) = ^CallSideEffect : ~m? +# 1156| v1156_8(void) = ^BufferReadSideEffect[0] : &:r1156_5, ~m? +# 1156| mu1156_9(String) = ^IndirectMayWriteSideEffect[-1] : &:r1156_1 +# 1156| v1156_10(void) = ThrowValue : &:r1156_1, ~m? #-----| Exception -> Block 2 -# 1156| Block 11 -# 1156| v1156_1(void) = CatchByType[const String &] : +# 1158| Block 11 +# 1158| v1158_1(void) = CatchByType[const String &] : #-----| Exception -> Block 2 #-----| Goto -> Block 12 -# 1156| Block 12 -# 1156| r1156_2(glval) = VariableAddress[e] : -# 1156| mu1156_3(String &) = InitializeParameter[e] : &:r1156_2 -# 1156| r1156_4(String &) = Load[e] : &:r1156_2, ~m? -# 1156| mu1156_5(unknown) = InitializeIndirection[e] : &:r1156_4 -# 1156| v1156_6(void) = NoOp : +# 1158| Block 12 +# 1158| r1158_2(glval) = VariableAddress[e] : +# 1158| mu1158_3(String &) = InitializeParameter[e] : &:r1158_2 +# 1158| r1158_4(String &) = Load[e] : &:r1158_2, ~m? +# 1158| mu1158_5(unknown) = InitializeIndirection[e] : &:r1158_4 +# 1158| v1158_6(void) = NoOp : #-----| Goto -> Block 13 -# 1158| Block 13 -# 1158| v1158_1(void) = NoOp : -# 1142| v1142_9(void) = ReturnVoid : +# 1160| Block 13 +# 1160| v1160_1(void) = NoOp : +# 1144| v1144_9(void) = ReturnVoid : #-----| Goto -> Block 1 -# 1162| void VectorTypes(int) -# 1162| Block 0 -# 1162| v1162_1(void) = EnterFunction : -# 1162| mu1162_2(unknown) = AliasedDefinition : -# 1162| mu1162_3(unknown) = InitializeNonLocal : -# 1162| r1162_4(glval) = VariableAddress[i] : -# 1162| mu1162_5(int) = InitializeParameter[i] : &:r1162_4 -# 1163| r1163_1(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : -# 1163| mu1163_2(__attribute((vector_size(16UL))) int) = Uninitialized[vi4] : &:r1163_1 -# 1163| r1163_3(int) = Constant[0] : -# 1163| r1163_4(glval) = PointerAdd[4] : r1163_1, r1163_3 -# 1163| r1163_5(int) = Constant[0] : -# 1163| mu1163_6(int) = Store[?] : &:r1163_4, r1163_5 -# 1163| r1163_7(int) = Constant[1] : -# 1163| r1163_8(glval) = PointerAdd[4] : r1163_1, r1163_7 -# 1163| r1163_9(int) = Constant[1] : -# 1163| mu1163_10(int) = Store[?] : &:r1163_8, r1163_9 -# 1163| r1163_11(int) = Constant[2] : -# 1163| r1163_12(glval) = PointerAdd[4] : r1163_1, r1163_11 -# 1163| r1163_13(int) = Constant[2] : -# 1163| mu1163_14(int) = Store[?] : &:r1163_12, r1163_13 -# 1163| r1163_15(int) = Constant[3] : -# 1163| r1163_16(glval) = PointerAdd[4] : r1163_1, r1163_15 -# 1163| r1163_17(int) = Constant[3] : -# 1163| mu1163_18(int) = Store[?] : &:r1163_16, r1163_17 -# 1164| r1164_1(glval) = VariableAddress[x] : -# 1164| r1164_2(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : -# 1164| r1164_3(glval) = VariableAddress[i] : -# 1164| r1164_4(int) = Load[i] : &:r1164_3, ~m? -# 1164| r1164_5(glval) = PointerAdd[4] : r1164_2, r1164_4 -# 1164| r1164_6(int) = Load[?] : &:r1164_5, ~m? -# 1164| mu1164_7(int) = Store[x] : &:r1164_1, r1164_6 -# 1165| r1165_1(glval) = VariableAddress[x] : -# 1165| r1165_2(int) = Load[x] : &:r1165_1, ~m? -# 1165| r1165_3(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : -# 1165| r1165_4(glval) = VariableAddress[i] : -# 1165| r1165_5(int) = Load[i] : &:r1165_4, ~m? -# 1165| r1165_6(glval) = PointerAdd[4] : r1165_3, r1165_5 -# 1165| mu1165_7(int) = Store[?] : &:r1165_6, r1165_2 -# 1166| r1166_1(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4_shuffle] : +# 1164| void VectorTypes(int) +# 1164| Block 0 +# 1164| v1164_1(void) = EnterFunction : +# 1164| mu1164_2(unknown) = AliasedDefinition : +# 1164| mu1164_3(unknown) = InitializeNonLocal : +# 1164| r1164_4(glval) = VariableAddress[i] : +# 1164| mu1164_5(int) = InitializeParameter[i] : &:r1164_4 +# 1165| r1165_1(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : +# 1165| mu1165_2(__attribute((vector_size(16UL))) int) = Uninitialized[vi4] : &:r1165_1 +# 1165| r1165_3(int) = Constant[0] : +# 1165| r1165_4(glval) = PointerAdd[4] : r1165_1, r1165_3 +# 1165| r1165_5(int) = Constant[0] : +# 1165| mu1165_6(int) = Store[?] : &:r1165_4, r1165_5 +# 1165| r1165_7(int) = Constant[1] : +# 1165| r1165_8(glval) = PointerAdd[4] : r1165_1, r1165_7 +# 1165| r1165_9(int) = Constant[1] : +# 1165| mu1165_10(int) = Store[?] : &:r1165_8, r1165_9 +# 1165| r1165_11(int) = Constant[2] : +# 1165| r1165_12(glval) = PointerAdd[4] : r1165_1, r1165_11 +# 1165| r1165_13(int) = Constant[2] : +# 1165| mu1165_14(int) = Store[?] : &:r1165_12, r1165_13 +# 1165| r1165_15(int) = Constant[3] : +# 1165| r1165_16(glval) = PointerAdd[4] : r1165_1, r1165_15 +# 1165| r1165_17(int) = Constant[3] : +# 1165| mu1165_18(int) = Store[?] : &:r1165_16, r1165_17 +# 1166| r1166_1(glval) = VariableAddress[x] : # 1166| r1166_2(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : -# 1166| r1166_3(__attribute((vector_size(16UL))) int) = Load[vi4] : &:r1166_2, ~m? -# 1166| r1166_4(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : -# 1166| r1166_5(__attribute((vector_size(16UL))) int) = Load[vi4] : &:r1166_4, ~m? -# 1166| r1166_6(int) = Constant[3] : -# 1166| r1166_7(int) = Constant[2] : -# 1166| r1166_8(int) = Constant[1] : -# 1166| r1166_9(int) = Constant[0] : -# 1166| r1166_10(__attribute((vector_size(16))) int) = BuiltIn[__builtin_shufflevector] : 0:r1166_3, 1:r1166_5, 2:r1166_6, 3:r1166_7, 4:r1166_8, 5:r1166_9 -# 1166| mu1166_11(__attribute((vector_size(16UL))) int) = Store[vi4_shuffle] : &:r1166_1, r1166_10 -# 1167| r1167_1(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : -# 1167| r1167_2(__attribute((vector_size(16UL))) int) = Load[vi4] : &:r1167_1, ~m? -# 1167| r1167_3(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4_shuffle] : -# 1167| r1167_4(__attribute((vector_size(16UL))) int) = Load[vi4_shuffle] : &:r1167_3, ~m? -# 1167| r1167_5(__attribute((vector_size(16UL))) int) = Add : r1167_2, r1167_4 -# 1167| r1167_6(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : -# 1167| mu1167_7(__attribute((vector_size(16UL))) int) = Store[vi4] : &:r1167_6, r1167_5 -# 1168| v1168_1(void) = NoOp : -# 1162| v1162_6(void) = ReturnVoid : -# 1162| v1162_7(void) = AliasedUse : ~m? -# 1162| v1162_8(void) = ExitFunction : +# 1166| r1166_3(glval) = VariableAddress[i] : +# 1166| r1166_4(int) = Load[i] : &:r1166_3, ~m? +# 1166| r1166_5(glval) = PointerAdd[4] : r1166_2, r1166_4 +# 1166| r1166_6(int) = Load[?] : &:r1166_5, ~m? +# 1166| mu1166_7(int) = Store[x] : &:r1166_1, r1166_6 +# 1167| r1167_1(glval) = VariableAddress[x] : +# 1167| r1167_2(int) = Load[x] : &:r1167_1, ~m? +# 1167| r1167_3(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : +# 1167| r1167_4(glval) = VariableAddress[i] : +# 1167| r1167_5(int) = Load[i] : &:r1167_4, ~m? +# 1167| r1167_6(glval) = PointerAdd[4] : r1167_3, r1167_5 +# 1167| mu1167_7(int) = Store[?] : &:r1167_6, r1167_2 +# 1168| r1168_1(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4_shuffle] : +# 1168| r1168_2(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : +# 1168| r1168_3(__attribute((vector_size(16UL))) int) = Load[vi4] : &:r1168_2, ~m? +# 1168| r1168_4(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : +# 1168| r1168_5(__attribute((vector_size(16UL))) int) = Load[vi4] : &:r1168_4, ~m? +# 1168| r1168_6(int) = Constant[3] : +# 1168| r1168_7(int) = Constant[2] : +# 1168| r1168_8(int) = Constant[1] : +# 1168| r1168_9(int) = Constant[0] : +# 1168| r1168_10(__attribute((vector_size(16))) int) = BuiltIn[__builtin_shufflevector] : 0:r1168_3, 1:r1168_5, 2:r1168_6, 3:r1168_7, 4:r1168_8, 5:r1168_9 +# 1168| mu1168_11(__attribute((vector_size(16UL))) int) = Store[vi4_shuffle] : &:r1168_1, r1168_10 +# 1169| r1169_1(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : +# 1169| r1169_2(__attribute((vector_size(16UL))) int) = Load[vi4] : &:r1169_1, ~m? +# 1169| r1169_3(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4_shuffle] : +# 1169| r1169_4(__attribute((vector_size(16UL))) int) = Load[vi4_shuffle] : &:r1169_3, ~m? +# 1169| r1169_5(__attribute((vector_size(16UL))) int) = Add : r1169_2, r1169_4 +# 1169| r1169_6(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : +# 1169| mu1169_7(__attribute((vector_size(16UL))) int) = Store[vi4] : &:r1169_6, r1169_5 +# 1170| v1170_1(void) = NoOp : +# 1164| v1164_6(void) = ReturnVoid : +# 1164| v1164_7(void) = AliasedUse : ~m? +# 1164| v1164_8(void) = ExitFunction : -# 1172| int ModeledCallTarget(int) -# 1172| Block 0 -# 1172| v1172_1(void) = EnterFunction : -# 1172| mu1172_2(unknown) = AliasedDefinition : -# 1172| mu1172_3(unknown) = InitializeNonLocal : -# 1172| r1172_4(glval) = VariableAddress[x] : -# 1172| mu1172_5(int) = InitializeParameter[x] : &:r1172_4 -# 1173| r1173_1(glval) = VariableAddress[y] : -# 1173| mu1173_2(int) = Uninitialized[y] : &:r1173_1 -# 1174| r1174_1(glval) = FunctionAddress[memcpy] : -# 1174| r1174_2(glval) = VariableAddress[y] : -# 1174| r1174_3(int *) = CopyValue : r1174_2 -# 1174| r1174_4(void *) = Convert : r1174_3 -# 1174| r1174_5(glval) = VariableAddress[x] : -# 1174| r1174_6(int *) = CopyValue : r1174_5 -# 1174| r1174_7(void *) = Convert : r1174_6 -# 1174| r1174_8(int) = Constant[4] : -# 1174| r1174_9(void *) = Call[memcpy] : func:r1174_1, 0:r1174_4, 1:r1174_7, 2:r1174_8 -# 1174| v1174_10(void) = ^SizedBufferReadSideEffect[1] : &:r1174_7, r1174_8, ~m? -# 1174| mu1174_11(unknown) = ^SizedBufferMustWriteSideEffect[0] : &:r1174_4, r1174_8 -# 1175| r1175_1(glval) = VariableAddress[#return] : -# 1175| r1175_2(glval) = VariableAddress[y] : -# 1175| r1175_3(int) = Load[y] : &:r1175_2, ~m? -# 1175| mu1175_4(int) = Store[#return] : &:r1175_1, r1175_3 -# 1172| r1172_6(glval) = VariableAddress[#return] : -# 1172| v1172_7(void) = ReturnValue : &:r1172_6, ~m? -# 1172| v1172_8(void) = AliasedUse : ~m? -# 1172| v1172_9(void) = ExitFunction : +# 1174| int ModeledCallTarget(int) +# 1174| Block 0 +# 1174| v1174_1(void) = EnterFunction : +# 1174| mu1174_2(unknown) = AliasedDefinition : +# 1174| mu1174_3(unknown) = InitializeNonLocal : +# 1174| r1174_4(glval) = VariableAddress[x] : +# 1174| mu1174_5(int) = InitializeParameter[x] : &:r1174_4 +# 1175| r1175_1(glval) = VariableAddress[y] : +# 1175| mu1175_2(int) = Uninitialized[y] : &:r1175_1 +# 1176| r1176_1(glval) = FunctionAddress[memcpy] : +# 1176| r1176_2(glval) = VariableAddress[y] : +# 1176| r1176_3(int *) = CopyValue : r1176_2 +# 1176| r1176_4(void *) = Convert : r1176_3 +# 1176| r1176_5(glval) = VariableAddress[x] : +# 1176| r1176_6(int *) = CopyValue : r1176_5 +# 1176| r1176_7(void *) = Convert : r1176_6 +# 1176| r1176_8(int) = Constant[4] : +# 1176| r1176_9(void *) = Call[memcpy] : func:r1176_1, 0:r1176_4, 1:r1176_7, 2:r1176_8 +# 1176| v1176_10(void) = ^SizedBufferReadSideEffect[1] : &:r1176_7, r1176_8, ~m? +# 1176| mu1176_11(unknown) = ^SizedBufferMustWriteSideEffect[0] : &:r1176_4, r1176_8 +# 1177| r1177_1(glval) = VariableAddress[#return] : +# 1177| r1177_2(glval) = VariableAddress[y] : +# 1177| r1177_3(int) = Load[y] : &:r1177_2, ~m? +# 1177| mu1177_4(int) = Store[#return] : &:r1177_1, r1177_3 +# 1174| r1174_6(glval) = VariableAddress[#return] : +# 1174| v1174_7(void) = ReturnValue : &:r1174_6, ~m? +# 1174| v1174_8(void) = AliasedUse : ~m? +# 1174| v1174_9(void) = ExitFunction : -# 1178| String ReturnObjectImpl() -# 1178| Block 0 -# 1178| v1178_1(void) = EnterFunction : -# 1178| mu1178_2(unknown) = AliasedDefinition : -# 1178| mu1178_3(unknown) = InitializeNonLocal : -# 1179| r1179_1(glval) = VariableAddress[#return] : -# 1179| mu1179_2(String) = Uninitialized[#return] : &:r1179_1 -# 1179| r1179_3(glval) = FunctionAddress[String] : -# 1179| r1179_4(glval) = StringConstant["foo"] : -# 1179| r1179_5(char *) = Convert : r1179_4 -# 1179| v1179_6(void) = Call[String] : func:r1179_3, this:r1179_1, 0:r1179_5 -# 1179| mu1179_7(unknown) = ^CallSideEffect : ~m? -# 1179| v1179_8(void) = ^BufferReadSideEffect[0] : &:r1179_5, ~m? -# 1179| mu1179_9(String) = ^IndirectMayWriteSideEffect[-1] : &:r1179_1 -# 1178| r1178_4(glval) = VariableAddress[#return] : -# 1178| v1178_5(void) = ReturnValue : &:r1178_4, ~m? -# 1178| v1178_6(void) = AliasedUse : ~m? -# 1178| v1178_7(void) = ExitFunction : +# 1180| String ReturnObjectImpl() +# 1180| Block 0 +# 1180| v1180_1(void) = EnterFunction : +# 1180| mu1180_2(unknown) = AliasedDefinition : +# 1180| mu1180_3(unknown) = InitializeNonLocal : +# 1181| r1181_1(glval) = VariableAddress[#return] : +# 1181| mu1181_2(String) = Uninitialized[#return] : &:r1181_1 +# 1181| r1181_3(glval) = FunctionAddress[String] : +# 1181| r1181_4(glval) = StringConstant["foo"] : +# 1181| r1181_5(char *) = Convert : r1181_4 +# 1181| v1181_6(void) = Call[String] : func:r1181_3, this:r1181_1, 0:r1181_5 +# 1181| mu1181_7(unknown) = ^CallSideEffect : ~m? +# 1181| v1181_8(void) = ^BufferReadSideEffect[0] : &:r1181_5, ~m? +# 1181| mu1181_9(String) = ^IndirectMayWriteSideEffect[-1] : &:r1181_1 +# 1180| r1180_4(glval) = VariableAddress[#return] : +# 1180| v1180_5(void) = ReturnValue : &:r1180_4, ~m? +# 1180| v1180_6(void) = AliasedUse : ~m? +# 1180| v1180_7(void) = ExitFunction : -# 1182| void switch1Case(int) -# 1182| Block 0 -# 1182| v1182_1(void) = EnterFunction : -# 1182| mu1182_2(unknown) = AliasedDefinition : -# 1182| mu1182_3(unknown) = InitializeNonLocal : -# 1182| r1182_4(glval) = VariableAddress[x] : -# 1182| mu1182_5(int) = InitializeParameter[x] : &:r1182_4 -# 1183| r1183_1(glval) = VariableAddress[y] : -# 1183| r1183_2(int) = Constant[0] : -# 1183| mu1183_3(int) = Store[y] : &:r1183_1, r1183_2 -# 1184| r1184_1(glval) = VariableAddress[x] : -# 1184| r1184_2(int) = Load[x] : &:r1184_1, ~m? -# 1184| v1184_3(void) = Switch : r1184_2 +# 1184| void switch1Case(int) +# 1184| Block 0 +# 1184| v1184_1(void) = EnterFunction : +# 1184| mu1184_2(unknown) = AliasedDefinition : +# 1184| mu1184_3(unknown) = InitializeNonLocal : +# 1184| r1184_4(glval) = VariableAddress[x] : +# 1184| mu1184_5(int) = InitializeParameter[x] : &:r1184_4 +# 1185| r1185_1(glval) = VariableAddress[y] : +# 1185| r1185_2(int) = Constant[0] : +# 1185| mu1185_3(int) = Store[y] : &:r1185_1, r1185_2 +# 1186| r1186_1(glval) = VariableAddress[x] : +# 1186| r1186_2(int) = Load[x] : &:r1186_1, ~m? +# 1186| v1186_3(void) = Switch : r1186_2 #-----| Case[1] -> Block 1 #-----| Default -> Block 2 -# 1185| Block 1 -# 1185| v1185_1(void) = NoOp : -# 1186| r1186_1(int) = Constant[2] : -# 1186| r1186_2(glval) = VariableAddress[y] : -# 1186| mu1186_3(int) = Store[y] : &:r1186_2, r1186_1 +# 1187| Block 1 +# 1187| v1187_1(void) = NoOp : +# 1188| r1188_1(int) = Constant[2] : +# 1188| r1188_2(glval) = VariableAddress[y] : +# 1188| mu1188_3(int) = Store[y] : &:r1188_2, r1188_1 #-----| Goto -> Block 2 -# 1188| Block 2 -# 1188| r1188_1(glval) = VariableAddress[z] : -# 1188| r1188_2(glval) = VariableAddress[y] : -# 1188| r1188_3(int) = Load[y] : &:r1188_2, ~m? -# 1188| mu1188_4(int) = Store[z] : &:r1188_1, r1188_3 -# 1189| v1189_1(void) = NoOp : -# 1182| v1182_6(void) = ReturnVoid : -# 1182| v1182_7(void) = AliasedUse : ~m? -# 1182| v1182_8(void) = ExitFunction : +# 1190| Block 2 +# 1190| r1190_1(glval) = VariableAddress[z] : +# 1190| r1190_2(glval) = VariableAddress[y] : +# 1190| r1190_3(int) = Load[y] : &:r1190_2, ~m? +# 1190| mu1190_4(int) = Store[z] : &:r1190_1, r1190_3 +# 1191| v1191_1(void) = NoOp : +# 1184| v1184_6(void) = ReturnVoid : +# 1184| v1184_7(void) = AliasedUse : ~m? +# 1184| v1184_8(void) = ExitFunction : -# 1191| void switch2Case_fallthrough(int) -# 1191| Block 0 -# 1191| v1191_1(void) = EnterFunction : -# 1191| mu1191_2(unknown) = AliasedDefinition : -# 1191| mu1191_3(unknown) = InitializeNonLocal : -# 1191| r1191_4(glval) = VariableAddress[x] : -# 1191| mu1191_5(int) = InitializeParameter[x] : &:r1191_4 -# 1192| r1192_1(glval) = VariableAddress[y] : -# 1192| r1192_2(int) = Constant[0] : -# 1192| mu1192_3(int) = Store[y] : &:r1192_1, r1192_2 -# 1193| r1193_1(glval) = VariableAddress[x] : -# 1193| r1193_2(int) = Load[x] : &:r1193_1, ~m? -# 1193| v1193_3(void) = Switch : r1193_2 +# 1193| void switch2Case_fallthrough(int) +# 1193| Block 0 +# 1193| v1193_1(void) = EnterFunction : +# 1193| mu1193_2(unknown) = AliasedDefinition : +# 1193| mu1193_3(unknown) = InitializeNonLocal : +# 1193| r1193_4(glval) = VariableAddress[x] : +# 1193| mu1193_5(int) = InitializeParameter[x] : &:r1193_4 +# 1194| r1194_1(glval) = VariableAddress[y] : +# 1194| r1194_2(int) = Constant[0] : +# 1194| mu1194_3(int) = Store[y] : &:r1194_1, r1194_2 +# 1195| r1195_1(glval) = VariableAddress[x] : +# 1195| r1195_2(int) = Load[x] : &:r1195_1, ~m? +# 1195| v1195_3(void) = Switch : r1195_2 #-----| Case[1] -> Block 1 #-----| Case[2] -> Block 2 #-----| Default -> Block 3 -# 1194| Block 1 -# 1194| v1194_1(void) = NoOp : -# 1195| r1195_1(int) = Constant[2] : -# 1195| r1195_2(glval) = VariableAddress[y] : -# 1195| mu1195_3(int) = Store[y] : &:r1195_2, r1195_1 -#-----| Goto -> Block 2 - -# 1196| Block 2 +# 1196| Block 1 # 1196| v1196_1(void) = NoOp : -# 1197| r1197_1(int) = Constant[3] : +# 1197| r1197_1(int) = Constant[2] : # 1197| r1197_2(glval) = VariableAddress[y] : # 1197| mu1197_3(int) = Store[y] : &:r1197_2, r1197_1 -#-----| Goto -> Block 3 +#-----| Goto -> Block 2 -# 1199| Block 3 -# 1199| r1199_1(glval) = VariableAddress[z] : +# 1198| Block 2 +# 1198| v1198_1(void) = NoOp : +# 1199| r1199_1(int) = Constant[3] : # 1199| r1199_2(glval) = VariableAddress[y] : -# 1199| r1199_3(int) = Load[y] : &:r1199_2, ~m? -# 1199| mu1199_4(int) = Store[z] : &:r1199_1, r1199_3 -# 1200| v1200_1(void) = NoOp : -# 1191| v1191_6(void) = ReturnVoid : -# 1191| v1191_7(void) = AliasedUse : ~m? -# 1191| v1191_8(void) = ExitFunction : +# 1199| mu1199_3(int) = Store[y] : &:r1199_2, r1199_1 +#-----| Goto -> Block 3 -# 1202| void switch2Case(int) -# 1202| Block 0 -# 1202| v1202_1(void) = EnterFunction : -# 1202| mu1202_2(unknown) = AliasedDefinition : -# 1202| mu1202_3(unknown) = InitializeNonLocal : -# 1202| r1202_4(glval) = VariableAddress[x] : -# 1202| mu1202_5(int) = InitializeParameter[x] : &:r1202_4 -# 1203| r1203_1(glval) = VariableAddress[y] : -# 1203| r1203_2(int) = Constant[0] : -# 1203| mu1203_3(int) = Store[y] : &:r1203_1, r1203_2 -# 1204| r1204_1(glval) = VariableAddress[x] : -# 1204| r1204_2(int) = Load[x] : &:r1204_1, ~m? -# 1204| v1204_3(void) = Switch : r1204_2 +# 1201| Block 3 +# 1201| r1201_1(glval) = VariableAddress[z] : +# 1201| r1201_2(glval) = VariableAddress[y] : +# 1201| r1201_3(int) = Load[y] : &:r1201_2, ~m? +# 1201| mu1201_4(int) = Store[z] : &:r1201_1, r1201_3 +# 1202| v1202_1(void) = NoOp : +# 1193| v1193_6(void) = ReturnVoid : +# 1193| v1193_7(void) = AliasedUse : ~m? +# 1193| v1193_8(void) = ExitFunction : + +# 1204| void switch2Case(int) +# 1204| Block 0 +# 1204| v1204_1(void) = EnterFunction : +# 1204| mu1204_2(unknown) = AliasedDefinition : +# 1204| mu1204_3(unknown) = InitializeNonLocal : +# 1204| r1204_4(glval) = VariableAddress[x] : +# 1204| mu1204_5(int) = InitializeParameter[x] : &:r1204_4 +# 1205| r1205_1(glval) = VariableAddress[y] : +# 1205| r1205_2(int) = Constant[0] : +# 1205| mu1205_3(int) = Store[y] : &:r1205_1, r1205_2 +# 1206| r1206_1(glval) = VariableAddress[x] : +# 1206| r1206_2(int) = Load[x] : &:r1206_1, ~m? +# 1206| v1206_3(void) = Switch : r1206_2 #-----| Case[1] -> Block 1 #-----| Case[2] -> Block 2 #-----| Default -> Block 3 -# 1205| Block 1 -# 1205| v1205_1(void) = NoOp : -# 1206| r1206_1(int) = Constant[2] : -# 1206| r1206_2(glval) = VariableAddress[y] : -# 1206| mu1206_3(int) = Store[y] : &:r1206_2, r1206_1 +# 1207| Block 1 # 1207| v1207_1(void) = NoOp : +# 1208| r1208_1(int) = Constant[2] : +# 1208| r1208_2(glval) = VariableAddress[y] : +# 1208| mu1208_3(int) = Store[y] : &:r1208_2, r1208_1 +# 1209| v1209_1(void) = NoOp : #-----| Goto -> Block 3 -# 1208| Block 2 -# 1208| v1208_1(void) = NoOp : -# 1209| r1209_1(int) = Constant[3] : -# 1209| r1209_2(glval) = VariableAddress[y] : -# 1209| mu1209_3(int) = Store[y] : &:r1209_2, r1209_1 -#-----| Goto -> Block 3 - -# 1210| Block 3 +# 1210| Block 2 # 1210| v1210_1(void) = NoOp : -# 1211| r1211_1(glval) = VariableAddress[z] : +# 1211| r1211_1(int) = Constant[3] : # 1211| r1211_2(glval) = VariableAddress[y] : -# 1211| r1211_3(int) = Load[y] : &:r1211_2, ~m? -# 1211| mu1211_4(int) = Store[z] : &:r1211_1, r1211_3 -# 1212| v1212_1(void) = NoOp : -# 1202| v1202_6(void) = ReturnVoid : -# 1202| v1202_7(void) = AliasedUse : ~m? -# 1202| v1202_8(void) = ExitFunction : +# 1211| mu1211_3(int) = Store[y] : &:r1211_2, r1211_1 +#-----| Goto -> Block 3 -# 1214| void switch2Case_default(int) -# 1214| Block 0 -# 1214| v1214_1(void) = EnterFunction : -# 1214| mu1214_2(unknown) = AliasedDefinition : -# 1214| mu1214_3(unknown) = InitializeNonLocal : -# 1214| r1214_4(glval) = VariableAddress[x] : -# 1214| mu1214_5(int) = InitializeParameter[x] : &:r1214_4 -# 1215| r1215_1(glval) = VariableAddress[y] : -# 1215| r1215_2(int) = Constant[0] : -# 1215| mu1215_3(int) = Store[y] : &:r1215_1, r1215_2 -# 1216| r1216_1(glval) = VariableAddress[x] : -# 1216| r1216_2(int) = Load[x] : &:r1216_1, ~m? -# 1216| v1216_3(void) = Switch : r1216_2 +# 1212| Block 3 +# 1212| v1212_1(void) = NoOp : +# 1213| r1213_1(glval) = VariableAddress[z] : +# 1213| r1213_2(glval) = VariableAddress[y] : +# 1213| r1213_3(int) = Load[y] : &:r1213_2, ~m? +# 1213| mu1213_4(int) = Store[z] : &:r1213_1, r1213_3 +# 1214| v1214_1(void) = NoOp : +# 1204| v1204_6(void) = ReturnVoid : +# 1204| v1204_7(void) = AliasedUse : ~m? +# 1204| v1204_8(void) = ExitFunction : + +# 1216| void switch2Case_default(int) +# 1216| Block 0 +# 1216| v1216_1(void) = EnterFunction : +# 1216| mu1216_2(unknown) = AliasedDefinition : +# 1216| mu1216_3(unknown) = InitializeNonLocal : +# 1216| r1216_4(glval) = VariableAddress[x] : +# 1216| mu1216_5(int) = InitializeParameter[x] : &:r1216_4 +# 1217| r1217_1(glval) = VariableAddress[y] : +# 1217| r1217_2(int) = Constant[0] : +# 1217| mu1217_3(int) = Store[y] : &:r1217_1, r1217_2 +# 1218| r1218_1(glval) = VariableAddress[x] : +# 1218| r1218_2(int) = Load[x] : &:r1218_1, ~m? +# 1218| v1218_3(void) = Switch : r1218_2 #-----| Case[1] -> Block 1 #-----| Case[2] -> Block 2 #-----| Default -> Block 3 -# 1217| Block 1 -# 1217| v1217_1(void) = NoOp : -# 1218| r1218_1(int) = Constant[2] : -# 1218| r1218_2(glval) = VariableAddress[y] : -# 1218| mu1218_3(int) = Store[y] : &:r1218_2, r1218_1 +# 1219| Block 1 # 1219| v1219_1(void) = NoOp : -#-----| Goto -> Block 4 - -# 1221| Block 2 +# 1220| r1220_1(int) = Constant[2] : +# 1220| r1220_2(glval) = VariableAddress[y] : +# 1220| mu1220_3(int) = Store[y] : &:r1220_2, r1220_1 # 1221| v1221_1(void) = NoOp : -# 1222| r1222_1(int) = Constant[3] : -# 1222| r1222_2(glval) = VariableAddress[y] : -# 1222| mu1222_3(int) = Store[y] : &:r1222_2, r1222_1 +#-----| Goto -> Block 4 + +# 1223| Block 2 # 1223| v1223_1(void) = NoOp : -#-----| Goto -> Block 4 - -# 1225| Block 3 +# 1224| r1224_1(int) = Constant[3] : +# 1224| r1224_2(glval) = VariableAddress[y] : +# 1224| mu1224_3(int) = Store[y] : &:r1224_2, r1224_1 # 1225| v1225_1(void) = NoOp : -# 1226| r1226_1(int) = Constant[4] : -# 1226| r1226_2(glval) = VariableAddress[y] : -# 1226| mu1226_3(int) = Store[y] : &:r1226_2, r1226_1 #-----| Goto -> Block 4 -# 1227| Block 4 +# 1227| Block 3 # 1227| v1227_1(void) = NoOp : -# 1228| r1228_1(glval) = VariableAddress[z] : +# 1228| r1228_1(int) = Constant[4] : # 1228| r1228_2(glval) = VariableAddress[y] : -# 1228| r1228_3(int) = Load[y] : &:r1228_2, ~m? -# 1228| mu1228_4(int) = Store[z] : &:r1228_1, r1228_3 +# 1228| mu1228_3(int) = Store[y] : &:r1228_2, r1228_1 +#-----| Goto -> Block 4 + +# 1229| Block 4 # 1229| v1229_1(void) = NoOp : -# 1214| v1214_6(void) = ReturnVoid : -# 1214| v1214_7(void) = AliasedUse : ~m? -# 1214| v1214_8(void) = ExitFunction : +# 1230| r1230_1(glval) = VariableAddress[z] : +# 1230| r1230_2(glval) = VariableAddress[y] : +# 1230| r1230_3(int) = Load[y] : &:r1230_2, ~m? +# 1230| mu1230_4(int) = Store[z] : &:r1230_1, r1230_3 +# 1231| v1231_1(void) = NoOp : +# 1216| v1216_6(void) = ReturnVoid : +# 1216| v1216_7(void) = AliasedUse : ~m? +# 1216| v1216_8(void) = ExitFunction : -# 1231| int staticLocalInit(int) -# 1231| Block 0 -# 1231| v1231_1(void) = EnterFunction : -# 1231| mu1231_2(unknown) = AliasedDefinition : -# 1231| mu1231_3(unknown) = InitializeNonLocal : -# 1231| r1231_4(glval) = VariableAddress[x] : -# 1231| mu1231_5(int) = InitializeParameter[x] : &:r1231_4 -# 1234| r1234_1(glval) = VariableAddress[c#init] : -# 1234| r1234_2(bool) = Load[c#init] : &:r1234_1, ~m? -# 1234| v1234_3(void) = ConditionalBranch : r1234_2 -#-----| False -> Block 1 -#-----| True -> Block 2 - -# 1234| Block 1 -# 1234| r1234_4(glval) = VariableAddress[c] : -# 1234| r1234_5(glval) = VariableAddress[x] : -# 1234| r1234_6(int) = Load[x] : &:r1234_5, ~m? -# 1234| mu1234_7(int) = Store[c] : &:r1234_4, r1234_6 -# 1234| r1234_8(bool) = Constant[1] : -# 1234| mu1234_9(bool) = Store[c#init] : &:r1234_1, r1234_8 -#-----| Goto -> Block 2 - -# 1237| Block 2 -# 1237| r1237_1(glval) = VariableAddress[#return] : -# 1237| r1237_2(glval) = VariableAddress[a] : -# 1237| r1237_3(int) = Load[a] : &:r1237_2, ~m? -# 1237| r1237_4(glval) = VariableAddress[b] : -# 1237| r1237_5(int) = Load[b] : &:r1237_4, ~m? -# 1237| r1237_6(int) = Add : r1237_3, r1237_5 -# 1237| r1237_7(glval) = VariableAddress[c] : -# 1237| r1237_8(int) = Load[c] : &:r1237_7, ~m? -# 1237| r1237_9(int) = Add : r1237_6, r1237_8 -# 1237| r1237_10(glval) = VariableAddress[d] : -# 1237| r1237_11(int) = Load[d] : &:r1237_10, ~m? -# 1237| r1237_12(int) = Add : r1237_9, r1237_11 -# 1237| mu1237_13(int) = Store[#return] : &:r1237_1, r1237_12 -# 1231| r1231_6(glval) = VariableAddress[#return] : -# 1231| v1231_7(void) = ReturnValue : &:r1231_6, ~m? -# 1231| v1231_8(void) = AliasedUse : ~m? -# 1231| v1231_9(void) = ExitFunction : - -# 1232| int a -# 1232| Block 0 -# 1232| v1232_1(void) = EnterFunction : -# 1232| mu1232_2(unknown) = AliasedDefinition : -# 1232| r1232_3(glval) = VariableAddress[a] : -# 1232| r1232_4(int) = Constant[0] : -# 1232| mu1232_5(int) = Store[a] : &:r1232_3, r1232_4 -# 1232| v1232_6(void) = ReturnVoid : -# 1232| v1232_7(void) = AliasedUse : ~m? -# 1232| v1232_8(void) = ExitFunction : - -# 1233| int b +# 1233| int staticLocalInit(int) # 1233| Block 0 -# 1233| v1233_1(void) = EnterFunction : -# 1233| mu1233_2(unknown) = AliasedDefinition : -# 1233| r1233_3(glval) = VariableAddress[b] : -# 1233| r1233_4(int) = Constant[4] : -# 1233| mu1233_5(int) = Store[b] : &:r1233_3, r1233_4 -# 1233| v1233_6(void) = ReturnVoid : -# 1233| v1233_7(void) = AliasedUse : ~m? -# 1233| v1233_8(void) = ExitFunction : - -# 1240| void staticLocalWithConstructor(char const*) -# 1240| Block 0 -# 1240| v1240_1(void) = EnterFunction : -# 1240| mu1240_2(unknown) = AliasedDefinition : -# 1240| mu1240_3(unknown) = InitializeNonLocal : -# 1240| r1240_4(glval) = VariableAddress[dynamic] : -# 1240| mu1240_5(char *) = InitializeParameter[dynamic] : &:r1240_4 -# 1240| r1240_6(char *) = Load[dynamic] : &:r1240_4, ~m? -# 1240| mu1240_7(unknown) = InitializeIndirection[dynamic] : &:r1240_6 -# 1241| r1241_1(glval) = VariableAddress[a#init] : -# 1241| r1241_2(bool) = Load[a#init] : &:r1241_1, ~m? -# 1241| v1241_3(void) = ConditionalBranch : r1241_2 +# 1233| v1233_1(void) = EnterFunction : +# 1233| mu1233_2(unknown) = AliasedDefinition : +# 1233| mu1233_3(unknown) = InitializeNonLocal : +# 1233| r1233_4(glval) = VariableAddress[x] : +# 1233| mu1233_5(int) = InitializeParameter[x] : &:r1233_4 +# 1236| r1236_1(glval) = VariableAddress[c#init] : +# 1236| r1236_2(bool) = Load[c#init] : &:r1236_1, ~m? +# 1236| v1236_3(void) = ConditionalBranch : r1236_2 #-----| False -> Block 1 #-----| True -> Block 2 -# 1241| Block 1 -# 1241| r1241_4(glval) = VariableAddress[a] : -#-----| r0_1(glval) = FunctionAddress[String] : -#-----| v0_2(void) = Call[String] : func:r0_1, this:r1241_4 -#-----| mu0_3(unknown) = ^CallSideEffect : ~m? -#-----| mu0_4(String) = ^IndirectMayWriteSideEffect[-1] : &:r1241_4 -# 1241| r1241_5(bool) = Constant[1] : -# 1241| mu1241_6(bool) = Store[a#init] : &:r1241_1, r1241_5 +# 1236| Block 1 +# 1236| r1236_4(glval) = VariableAddress[c] : +# 1236| r1236_5(glval) = VariableAddress[x] : +# 1236| r1236_6(int) = Load[x] : &:r1236_5, ~m? +# 1236| mu1236_7(int) = Store[c] : &:r1236_4, r1236_6 +# 1236| r1236_8(bool) = Constant[1] : +# 1236| mu1236_9(bool) = Store[c#init] : &:r1236_1, r1236_8 #-----| Goto -> Block 2 -# 1242| Block 2 -# 1242| r1242_1(glval) = VariableAddress[b#init] : -# 1242| r1242_2(bool) = Load[b#init] : &:r1242_1, ~m? -# 1242| v1242_3(void) = ConditionalBranch : r1242_2 +# 1239| Block 2 +# 1239| r1239_1(glval) = VariableAddress[#return] : +# 1239| r1239_2(glval) = VariableAddress[a] : +# 1239| r1239_3(int) = Load[a] : &:r1239_2, ~m? +# 1239| r1239_4(glval) = VariableAddress[b] : +# 1239| r1239_5(int) = Load[b] : &:r1239_4, ~m? +# 1239| r1239_6(int) = Add : r1239_3, r1239_5 +# 1239| r1239_7(glval) = VariableAddress[c] : +# 1239| r1239_8(int) = Load[c] : &:r1239_7, ~m? +# 1239| r1239_9(int) = Add : r1239_6, r1239_8 +# 1239| r1239_10(glval) = VariableAddress[d] : +# 1239| r1239_11(int) = Load[d] : &:r1239_10, ~m? +# 1239| r1239_12(int) = Add : r1239_9, r1239_11 +# 1239| mu1239_13(int) = Store[#return] : &:r1239_1, r1239_12 +# 1233| r1233_6(glval) = VariableAddress[#return] : +# 1233| v1233_7(void) = ReturnValue : &:r1233_6, ~m? +# 1233| v1233_8(void) = AliasedUse : ~m? +# 1233| v1233_9(void) = ExitFunction : + +# 1234| int a +# 1234| Block 0 +# 1234| v1234_1(void) = EnterFunction : +# 1234| mu1234_2(unknown) = AliasedDefinition : +# 1234| r1234_3(glval) = VariableAddress[a] : +# 1234| r1234_4(int) = Constant[0] : +# 1234| mu1234_5(int) = Store[a] : &:r1234_3, r1234_4 +# 1234| v1234_6(void) = ReturnVoid : +# 1234| v1234_7(void) = AliasedUse : ~m? +# 1234| v1234_8(void) = ExitFunction : + +# 1235| int b +# 1235| Block 0 +# 1235| v1235_1(void) = EnterFunction : +# 1235| mu1235_2(unknown) = AliasedDefinition : +# 1235| r1235_3(glval) = VariableAddress[b] : +# 1235| r1235_4(int) = Constant[4] : +# 1235| mu1235_5(int) = Store[b] : &:r1235_3, r1235_4 +# 1235| v1235_6(void) = ReturnVoid : +# 1235| v1235_7(void) = AliasedUse : ~m? +# 1235| v1235_8(void) = ExitFunction : + +# 1242| void staticLocalWithConstructor(char const*) +# 1242| Block 0 +# 1242| v1242_1(void) = EnterFunction : +# 1242| mu1242_2(unknown) = AliasedDefinition : +# 1242| mu1242_3(unknown) = InitializeNonLocal : +# 1242| r1242_4(glval) = VariableAddress[dynamic] : +# 1242| mu1242_5(char *) = InitializeParameter[dynamic] : &:r1242_4 +# 1242| r1242_6(char *) = Load[dynamic] : &:r1242_4, ~m? +# 1242| mu1242_7(unknown) = InitializeIndirection[dynamic] : &:r1242_6 +# 1243| r1243_1(glval) = VariableAddress[a#init] : +# 1243| r1243_2(bool) = Load[a#init] : &:r1243_1, ~m? +# 1243| v1243_3(void) = ConditionalBranch : r1243_2 +#-----| False -> Block 1 +#-----| True -> Block 2 + +# 1243| Block 1 +# 1243| r1243_4(glval) = VariableAddress[a] : +#-----| r0_1(glval) = FunctionAddress[String] : +#-----| v0_2(void) = Call[String] : func:r0_1, this:r1243_4 +#-----| mu0_3(unknown) = ^CallSideEffect : ~m? +#-----| mu0_4(String) = ^IndirectMayWriteSideEffect[-1] : &:r1243_4 +# 1243| r1243_5(bool) = Constant[1] : +# 1243| mu1243_6(bool) = Store[a#init] : &:r1243_1, r1243_5 +#-----| Goto -> Block 2 + +# 1244| Block 2 +# 1244| r1244_1(glval) = VariableAddress[b#init] : +# 1244| r1244_2(bool) = Load[b#init] : &:r1244_1, ~m? +# 1244| v1244_3(void) = ConditionalBranch : r1244_2 #-----| False -> Block 3 #-----| True -> Block 4 -# 1242| Block 3 -# 1242| r1242_4(glval) = VariableAddress[b] : -# 1242| r1242_5(glval) = FunctionAddress[String] : -# 1242| r1242_6(glval) = StringConstant["static"] : -# 1242| r1242_7(char *) = Convert : r1242_6 -# 1242| v1242_8(void) = Call[String] : func:r1242_5, this:r1242_4, 0:r1242_7 -# 1242| mu1242_9(unknown) = ^CallSideEffect : ~m? -# 1242| v1242_10(void) = ^BufferReadSideEffect[0] : &:r1242_7, ~m? -# 1242| mu1242_11(String) = ^IndirectMayWriteSideEffect[-1] : &:r1242_4 -# 1242| r1242_12(bool) = Constant[1] : -# 1242| mu1242_13(bool) = Store[b#init] : &:r1242_1, r1242_12 +# 1244| Block 3 +# 1244| r1244_4(glval) = VariableAddress[b] : +# 1244| r1244_5(glval) = FunctionAddress[String] : +# 1244| r1244_6(glval) = StringConstant["static"] : +# 1244| r1244_7(char *) = Convert : r1244_6 +# 1244| v1244_8(void) = Call[String] : func:r1244_5, this:r1244_4, 0:r1244_7 +# 1244| mu1244_9(unknown) = ^CallSideEffect : ~m? +# 1244| v1244_10(void) = ^BufferReadSideEffect[0] : &:r1244_7, ~m? +# 1244| mu1244_11(String) = ^IndirectMayWriteSideEffect[-1] : &:r1244_4 +# 1244| r1244_12(bool) = Constant[1] : +# 1244| mu1244_13(bool) = Store[b#init] : &:r1244_1, r1244_12 #-----| Goto -> Block 4 -# 1243| Block 4 -# 1243| r1243_1(glval) = VariableAddress[c#init] : -# 1243| r1243_2(bool) = Load[c#init] : &:r1243_1, ~m? -# 1243| v1243_3(void) = ConditionalBranch : r1243_2 +# 1245| Block 4 +# 1245| r1245_1(glval) = VariableAddress[c#init] : +# 1245| r1245_2(bool) = Load[c#init] : &:r1245_1, ~m? +# 1245| v1245_3(void) = ConditionalBranch : r1245_2 #-----| False -> Block 5 #-----| True -> Block 6 -# 1243| Block 5 -# 1243| r1243_4(glval) = VariableAddress[c] : -# 1243| r1243_5(glval) = FunctionAddress[String] : -# 1243| r1243_6(glval) = VariableAddress[dynamic] : -# 1243| r1243_7(char *) = Load[dynamic] : &:r1243_6, ~m? -# 1243| v1243_8(void) = Call[String] : func:r1243_5, this:r1243_4, 0:r1243_7 -# 1243| mu1243_9(unknown) = ^CallSideEffect : ~m? -# 1243| v1243_10(void) = ^BufferReadSideEffect[0] : &:r1243_7, ~m? -# 1243| mu1243_11(String) = ^IndirectMayWriteSideEffect[-1] : &:r1243_4 -# 1243| r1243_12(bool) = Constant[1] : -# 1243| mu1243_13(bool) = Store[c#init] : &:r1243_1, r1243_12 +# 1245| Block 5 +# 1245| r1245_4(glval) = VariableAddress[c] : +# 1245| r1245_5(glval) = FunctionAddress[String] : +# 1245| r1245_6(glval) = VariableAddress[dynamic] : +# 1245| r1245_7(char *) = Load[dynamic] : &:r1245_6, ~m? +# 1245| v1245_8(void) = Call[String] : func:r1245_5, this:r1245_4, 0:r1245_7 +# 1245| mu1245_9(unknown) = ^CallSideEffect : ~m? +# 1245| v1245_10(void) = ^BufferReadSideEffect[0] : &:r1245_7, ~m? +# 1245| mu1245_11(String) = ^IndirectMayWriteSideEffect[-1] : &:r1245_4 +# 1245| r1245_12(bool) = Constant[1] : +# 1245| mu1245_13(bool) = Store[c#init] : &:r1245_1, r1245_12 #-----| Goto -> Block 6 -# 1244| Block 6 -# 1244| v1244_1(void) = NoOp : -# 1240| v1240_8(void) = ReturnIndirection[dynamic] : &:r1240_6, ~m? -# 1240| v1240_9(void) = ReturnVoid : -# 1240| v1240_10(void) = AliasedUse : ~m? -# 1240| v1240_11(void) = ExitFunction : +# 1246| Block 6 +# 1246| v1246_1(void) = NoOp : +# 1242| v1242_8(void) = ReturnIndirection[dynamic] : &:r1242_6, ~m? +# 1242| v1242_9(void) = ReturnVoid : +# 1242| v1242_10(void) = AliasedUse : ~m? +# 1242| v1242_11(void) = ExitFunction : -# 1251| void test_strings(char*, char*) -# 1251| Block 0 -# 1251| v1251_1(void) = EnterFunction : -# 1251| mu1251_2(unknown) = AliasedDefinition : -# 1251| mu1251_3(unknown) = InitializeNonLocal : -# 1251| r1251_4(glval) = VariableAddress[s1] : -# 1251| mu1251_5(char *) = InitializeParameter[s1] : &:r1251_4 -# 1251| r1251_6(char *) = Load[s1] : &:r1251_4, ~m? -# 1251| mu1251_7(unknown) = InitializeIndirection[s1] : &:r1251_6 -# 1251| r1251_8(glval) = VariableAddress[s2] : -# 1251| mu1251_9(char *) = InitializeParameter[s2] : &:r1251_8 -# 1251| r1251_10(char *) = Load[s2] : &:r1251_8, ~m? -# 1251| mu1251_11(unknown) = InitializeIndirection[s2] : &:r1251_10 -# 1252| r1252_1(glval) = VariableAddress[buffer] : -# 1252| mu1252_2(char[1024]) = Uninitialized[buffer] : &:r1252_1 -# 1252| r1252_3(int) = Constant[0] : -# 1252| r1252_4(glval) = PointerAdd[1] : r1252_1, r1252_3 -# 1252| r1252_5(char) = Constant[0] : -# 1252| mu1252_6(char) = Store[?] : &:r1252_4, r1252_5 -# 1252| r1252_7(int) = Constant[1] : -# 1252| r1252_8(glval) = PointerAdd[1] : r1252_1, r1252_7 -# 1252| r1252_9(unknown[1023]) = Constant[0] : -# 1252| mu1252_10(unknown[1023]) = Store[?] : &:r1252_8, r1252_9 -# 1254| r1254_1(glval) = FunctionAddress[strcpy] : -# 1254| r1254_2(glval) = VariableAddress[buffer] : -# 1254| r1254_3(char *) = Convert : r1254_2 -# 1254| r1254_4(glval) = VariableAddress[s1] : -# 1254| r1254_5(char *) = Load[s1] : &:r1254_4, ~m? -# 1254| r1254_6(char *) = Convert : r1254_5 -# 1254| r1254_7(char *) = Call[strcpy] : func:r1254_1, 0:r1254_3, 1:r1254_6 -# 1254| v1254_8(void) = ^BufferReadSideEffect[1] : &:r1254_6, ~m? -# 1254| mu1254_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r1254_3 -# 1255| r1255_1(glval) = FunctionAddress[strcat] : -# 1255| r1255_2(glval) = VariableAddress[buffer] : -# 1255| r1255_3(char *) = Convert : r1255_2 -# 1255| r1255_4(glval) = VariableAddress[s2] : -# 1255| r1255_5(char *) = Load[s2] : &:r1255_4, ~m? -# 1255| r1255_6(char *) = Convert : r1255_5 -# 1255| r1255_7(char *) = Call[strcat] : func:r1255_1, 0:r1255_3, 1:r1255_6 -# 1255| v1255_8(void) = ^BufferReadSideEffect[0] : &:r1255_3, ~m? -# 1255| v1255_9(void) = ^BufferReadSideEffect[1] : &:r1255_6, ~m? -# 1255| mu1255_10(unknown) = ^BufferMayWriteSideEffect[0] : &:r1255_3 -# 1256| v1256_1(void) = NoOp : -# 1251| v1251_12(void) = ReturnIndirection[s1] : &:r1251_6, ~m? -# 1251| v1251_13(void) = ReturnIndirection[s2] : &:r1251_10, ~m? -# 1251| v1251_14(void) = ReturnVoid : -# 1251| v1251_15(void) = AliasedUse : ~m? -# 1251| v1251_16(void) = ExitFunction : +# 1253| void test_strings(char*, char*) +# 1253| Block 0 +# 1253| v1253_1(void) = EnterFunction : +# 1253| mu1253_2(unknown) = AliasedDefinition : +# 1253| mu1253_3(unknown) = InitializeNonLocal : +# 1253| r1253_4(glval) = VariableAddress[s1] : +# 1253| mu1253_5(char *) = InitializeParameter[s1] : &:r1253_4 +# 1253| r1253_6(char *) = Load[s1] : &:r1253_4, ~m? +# 1253| mu1253_7(unknown) = InitializeIndirection[s1] : &:r1253_6 +# 1253| r1253_8(glval) = VariableAddress[s2] : +# 1253| mu1253_9(char *) = InitializeParameter[s2] : &:r1253_8 +# 1253| r1253_10(char *) = Load[s2] : &:r1253_8, ~m? +# 1253| mu1253_11(unknown) = InitializeIndirection[s2] : &:r1253_10 +# 1254| r1254_1(glval) = VariableAddress[buffer] : +# 1254| mu1254_2(char[1024]) = Uninitialized[buffer] : &:r1254_1 +# 1254| r1254_3(int) = Constant[0] : +# 1254| r1254_4(glval) = PointerAdd[1] : r1254_1, r1254_3 +# 1254| r1254_5(char) = Constant[0] : +# 1254| mu1254_6(char) = Store[?] : &:r1254_4, r1254_5 +# 1254| r1254_7(int) = Constant[1] : +# 1254| r1254_8(glval) = PointerAdd[1] : r1254_1, r1254_7 +# 1254| r1254_9(unknown[1023]) = Constant[0] : +# 1254| mu1254_10(unknown[1023]) = Store[?] : &:r1254_8, r1254_9 +# 1256| r1256_1(glval) = FunctionAddress[strcpy] : +# 1256| r1256_2(glval) = VariableAddress[buffer] : +# 1256| r1256_3(char *) = Convert : r1256_2 +# 1256| r1256_4(glval) = VariableAddress[s1] : +# 1256| r1256_5(char *) = Load[s1] : &:r1256_4, ~m? +# 1256| r1256_6(char *) = Convert : r1256_5 +# 1256| r1256_7(char *) = Call[strcpy] : func:r1256_1, 0:r1256_3, 1:r1256_6 +# 1256| v1256_8(void) = ^BufferReadSideEffect[1] : &:r1256_6, ~m? +# 1256| mu1256_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r1256_3 +# 1257| r1257_1(glval) = FunctionAddress[strcat] : +# 1257| r1257_2(glval) = VariableAddress[buffer] : +# 1257| r1257_3(char *) = Convert : r1257_2 +# 1257| r1257_4(glval) = VariableAddress[s2] : +# 1257| r1257_5(char *) = Load[s2] : &:r1257_4, ~m? +# 1257| r1257_6(char *) = Convert : r1257_5 +# 1257| r1257_7(char *) = Call[strcat] : func:r1257_1, 0:r1257_3, 1:r1257_6 +# 1257| v1257_8(void) = ^BufferReadSideEffect[0] : &:r1257_3, ~m? +# 1257| v1257_9(void) = ^BufferReadSideEffect[1] : &:r1257_6, ~m? +# 1257| mu1257_10(unknown) = ^BufferMayWriteSideEffect[0] : &:r1257_3 +# 1258| v1258_1(void) = NoOp : +# 1253| v1253_12(void) = ReturnIndirection[s1] : &:r1253_6, ~m? +# 1253| v1253_13(void) = ReturnIndirection[s2] : &:r1253_10, ~m? +# 1253| v1253_14(void) = ReturnVoid : +# 1253| v1253_15(void) = AliasedUse : ~m? +# 1253| v1253_16(void) = ExitFunction : -# 1261| void A::static_member(A*, int) -# 1261| Block 0 -# 1261| v1261_1(void) = EnterFunction : -# 1261| mu1261_2(unknown) = AliasedDefinition : -# 1261| mu1261_3(unknown) = InitializeNonLocal : -# 1261| r1261_4(glval) = VariableAddress[a] : -# 1261| mu1261_5(A *) = InitializeParameter[a] : &:r1261_4 -# 1261| r1261_6(A *) = Load[a] : &:r1261_4, ~m? -# 1261| mu1261_7(unknown) = InitializeIndirection[a] : &:r1261_6 -# 1261| r1261_8(glval) = VariableAddress[x] : -# 1261| mu1261_9(int) = InitializeParameter[x] : &:r1261_8 -# 1262| r1262_1(glval) = VariableAddress[x] : -# 1262| r1262_2(int) = Load[x] : &:r1262_1, ~m? -# 1262| r1262_3(glval) = VariableAddress[a] : -# 1262| r1262_4(A *) = Load[a] : &:r1262_3, ~m? -# 1262| r1262_5(glval) = FieldAddress[member] : r1262_4 -# 1262| mu1262_6(int) = Store[?] : &:r1262_5, r1262_2 -# 1263| v1263_1(void) = NoOp : -# 1261| v1261_10(void) = ReturnIndirection[a] : &:r1261_6, ~m? -# 1261| v1261_11(void) = ReturnVoid : -# 1261| v1261_12(void) = AliasedUse : ~m? -# 1261| v1261_13(void) = ExitFunction : +# 1263| void A::static_member(A*, int) +# 1263| Block 0 +# 1263| v1263_1(void) = EnterFunction : +# 1263| mu1263_2(unknown) = AliasedDefinition : +# 1263| mu1263_3(unknown) = InitializeNonLocal : +# 1263| r1263_4(glval) = VariableAddress[a] : +# 1263| mu1263_5(A *) = InitializeParameter[a] : &:r1263_4 +# 1263| r1263_6(A *) = Load[a] : &:r1263_4, ~m? +# 1263| mu1263_7(unknown) = InitializeIndirection[a] : &:r1263_6 +# 1263| r1263_8(glval) = VariableAddress[x] : +# 1263| mu1263_9(int) = InitializeParameter[x] : &:r1263_8 +# 1264| r1264_1(glval) = VariableAddress[x] : +# 1264| r1264_2(int) = Load[x] : &:r1264_1, ~m? +# 1264| r1264_3(glval) = VariableAddress[a] : +# 1264| r1264_4(A *) = Load[a] : &:r1264_3, ~m? +# 1264| r1264_5(glval) = FieldAddress[member] : r1264_4 +# 1264| mu1264_6(int) = Store[?] : &:r1264_5, r1264_2 +# 1265| v1265_1(void) = NoOp : +# 1263| v1263_10(void) = ReturnIndirection[a] : &:r1263_6, ~m? +# 1263| v1263_11(void) = ReturnVoid : +# 1263| v1263_12(void) = AliasedUse : ~m? +# 1263| v1263_13(void) = ExitFunction : -# 1270| void test_static_member_functions(int, A*) -# 1270| Block 0 -# 1270| v1270_1(void) = EnterFunction : -# 1270| mu1270_2(unknown) = AliasedDefinition : -# 1270| mu1270_3(unknown) = InitializeNonLocal : -# 1270| r1270_4(glval) = VariableAddress[int_arg] : -# 1270| mu1270_5(int) = InitializeParameter[int_arg] : &:r1270_4 -# 1270| r1270_6(glval) = VariableAddress[a_arg] : -# 1270| mu1270_7(A *) = InitializeParameter[a_arg] : &:r1270_6 -# 1270| r1270_8(A *) = Load[a_arg] : &:r1270_6, ~m? -# 1270| mu1270_9(unknown) = InitializeIndirection[a_arg] : &:r1270_8 -# 1271| r1271_1(glval) = VariableAddress[c] : -# 1271| mu1271_2(C) = Uninitialized[c] : &:r1271_1 -# 1271| r1271_3(glval) = FunctionAddress[C] : -# 1271| v1271_4(void) = Call[C] : func:r1271_3, this:r1271_1 -# 1271| mu1271_5(unknown) = ^CallSideEffect : ~m? -# 1271| mu1271_6(C) = ^IndirectMayWriteSideEffect[-1] : &:r1271_1 -# 1272| r1272_1(glval) = VariableAddress[c] : -# 1272| r1272_2(glval) = FunctionAddress[StaticMemberFunction] : -# 1272| r1272_3(int) = Constant[10] : -# 1272| r1272_4(int) = Call[StaticMemberFunction] : func:r1272_2, 0:r1272_3 -# 1272| mu1272_5(unknown) = ^CallSideEffect : ~m? -# 1273| r1273_1(glval) = FunctionAddress[StaticMemberFunction] : -# 1273| r1273_2(int) = Constant[10] : -# 1273| r1273_3(int) = Call[StaticMemberFunction] : func:r1273_1, 0:r1273_2 -# 1273| mu1273_4(unknown) = ^CallSideEffect : ~m? -# 1275| r1275_1(glval) = VariableAddress[a] : -# 1275| mu1275_2(A) = Uninitialized[a] : &:r1275_1 -# 1276| r1276_1(glval) = VariableAddress[a] : -# 1276| r1276_2(glval) = FunctionAddress[static_member] : -# 1276| r1276_3(glval) = VariableAddress[a] : -# 1276| r1276_4(A *) = CopyValue : r1276_3 -# 1276| r1276_5(glval) = VariableAddress[int_arg] : -# 1276| r1276_6(int) = Load[int_arg] : &:r1276_5, ~m? -# 1276| v1276_7(void) = Call[static_member] : func:r1276_2, 0:r1276_4, 1:r1276_6 -# 1276| mu1276_8(unknown) = ^CallSideEffect : ~m? -# 1276| v1276_9(void) = ^BufferReadSideEffect[0] : &:r1276_4, ~m? -# 1276| mu1276_10(unknown) = ^BufferMayWriteSideEffect[0] : &:r1276_4 -# 1277| r1277_1(glval) = FunctionAddress[static_member] : -# 1277| r1277_2(glval) = VariableAddress[a] : -# 1277| r1277_3(A *) = CopyValue : r1277_2 -# 1277| r1277_4(glval) = VariableAddress[int_arg] : -# 1277| r1277_5(int) = Load[int_arg] : &:r1277_4, ~m? -# 1277| v1277_6(void) = Call[static_member] : func:r1277_1, 0:r1277_3, 1:r1277_5 -# 1277| mu1277_7(unknown) = ^CallSideEffect : ~m? -# 1277| v1277_8(void) = ^BufferReadSideEffect[0] : &:r1277_3, ~m? -# 1277| mu1277_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r1277_3 -# 1279| r1279_1(glval) = VariableAddress[a] : -# 1279| r1279_2(A *) = CopyValue : r1279_1 -# 1279| r1279_3(glval) = FunctionAddress[static_member] : -# 1279| r1279_4(glval) = VariableAddress[a_arg] : -# 1279| r1279_5(A *) = Load[a_arg] : &:r1279_4, ~m? -# 1279| r1279_6(glval) = VariableAddress[int_arg] : -# 1279| r1279_7(int) = Load[int_arg] : &:r1279_6, ~m? -# 1279| r1279_8(int) = Constant[2] : -# 1279| r1279_9(int) = Add : r1279_7, r1279_8 -# 1279| v1279_10(void) = Call[static_member] : func:r1279_3, 0:r1279_5, 1:r1279_9 -# 1279| mu1279_11(unknown) = ^CallSideEffect : ~m? -# 1279| v1279_12(void) = ^BufferReadSideEffect[0] : &:r1279_5, ~m? -# 1279| mu1279_13(unknown) = ^BufferMayWriteSideEffect[0] : &:r1279_5 -# 1280| r1280_1(glval) = VariableAddress[a_arg] : -# 1280| r1280_2(A *) = Load[a_arg] : &:r1280_1, ~m? -# 1280| r1280_3(glval) = CopyValue : r1280_2 -# 1280| r1280_4(glval) = FunctionAddress[static_member] : -# 1280| r1280_5(glval) = VariableAddress[a] : -# 1280| r1280_6(A *) = CopyValue : r1280_5 -# 1280| r1280_7(int) = Constant[99] : -# 1280| v1280_8(void) = Call[static_member] : func:r1280_4, 0:r1280_6, 1:r1280_7 -# 1280| mu1280_9(unknown) = ^CallSideEffect : ~m? -# 1280| v1280_10(void) = ^BufferReadSideEffect[0] : &:r1280_6, ~m? -# 1280| mu1280_11(unknown) = ^BufferMayWriteSideEffect[0] : &:r1280_6 -# 1281| r1281_1(glval) = VariableAddress[a_arg] : -# 1281| r1281_2(A *) = Load[a_arg] : &:r1281_1, ~m? +# 1272| void test_static_member_functions(int, A*) +# 1272| Block 0 +# 1272| v1272_1(void) = EnterFunction : +# 1272| mu1272_2(unknown) = AliasedDefinition : +# 1272| mu1272_3(unknown) = InitializeNonLocal : +# 1272| r1272_4(glval) = VariableAddress[int_arg] : +# 1272| mu1272_5(int) = InitializeParameter[int_arg] : &:r1272_4 +# 1272| r1272_6(glval) = VariableAddress[a_arg] : +# 1272| mu1272_7(A *) = InitializeParameter[a_arg] : &:r1272_6 +# 1272| r1272_8(A *) = Load[a_arg] : &:r1272_6, ~m? +# 1272| mu1272_9(unknown) = InitializeIndirection[a_arg] : &:r1272_8 +# 1273| r1273_1(glval) = VariableAddress[c] : +# 1273| mu1273_2(C) = Uninitialized[c] : &:r1273_1 +# 1273| r1273_3(glval) = FunctionAddress[C] : +# 1273| v1273_4(void) = Call[C] : func:r1273_3, this:r1273_1 +# 1273| mu1273_5(unknown) = ^CallSideEffect : ~m? +# 1273| mu1273_6(C) = ^IndirectMayWriteSideEffect[-1] : &:r1273_1 +# 1274| r1274_1(glval) = VariableAddress[c] : +# 1274| r1274_2(glval) = FunctionAddress[StaticMemberFunction] : +# 1274| r1274_3(int) = Constant[10] : +# 1274| r1274_4(int) = Call[StaticMemberFunction] : func:r1274_2, 0:r1274_3 +# 1274| mu1274_5(unknown) = ^CallSideEffect : ~m? +# 1275| r1275_1(glval) = FunctionAddress[StaticMemberFunction] : +# 1275| r1275_2(int) = Constant[10] : +# 1275| r1275_3(int) = Call[StaticMemberFunction] : func:r1275_1, 0:r1275_2 +# 1275| mu1275_4(unknown) = ^CallSideEffect : ~m? +# 1277| r1277_1(glval) = VariableAddress[a] : +# 1277| mu1277_2(A) = Uninitialized[a] : &:r1277_1 +# 1278| r1278_1(glval) = VariableAddress[a] : +# 1278| r1278_2(glval) = FunctionAddress[static_member] : +# 1278| r1278_3(glval) = VariableAddress[a] : +# 1278| r1278_4(A *) = CopyValue : r1278_3 +# 1278| r1278_5(glval) = VariableAddress[int_arg] : +# 1278| r1278_6(int) = Load[int_arg] : &:r1278_5, ~m? +# 1278| v1278_7(void) = Call[static_member] : func:r1278_2, 0:r1278_4, 1:r1278_6 +# 1278| mu1278_8(unknown) = ^CallSideEffect : ~m? +# 1278| v1278_9(void) = ^BufferReadSideEffect[0] : &:r1278_4, ~m? +# 1278| mu1278_10(unknown) = ^BufferMayWriteSideEffect[0] : &:r1278_4 +# 1279| r1279_1(glval) = FunctionAddress[static_member] : +# 1279| r1279_2(glval) = VariableAddress[a] : +# 1279| r1279_3(A *) = CopyValue : r1279_2 +# 1279| r1279_4(glval) = VariableAddress[int_arg] : +# 1279| r1279_5(int) = Load[int_arg] : &:r1279_4, ~m? +# 1279| v1279_6(void) = Call[static_member] : func:r1279_1, 0:r1279_3, 1:r1279_5 +# 1279| mu1279_7(unknown) = ^CallSideEffect : ~m? +# 1279| v1279_8(void) = ^BufferReadSideEffect[0] : &:r1279_3, ~m? +# 1279| mu1279_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r1279_3 +# 1281| r1281_1(glval) = VariableAddress[a] : +# 1281| r1281_2(A *) = CopyValue : r1281_1 # 1281| r1281_3(glval) = FunctionAddress[static_member] : # 1281| r1281_4(glval) = VariableAddress[a_arg] : # 1281| r1281_5(A *) = Load[a_arg] : &:r1281_4, ~m? -# 1281| r1281_6(int) = Constant[-1] : -# 1281| v1281_7(void) = Call[static_member] : func:r1281_3, 0:r1281_5, 1:r1281_6 -# 1281| mu1281_8(unknown) = ^CallSideEffect : ~m? -# 1281| v1281_9(void) = ^BufferReadSideEffect[0] : &:r1281_5, ~m? -# 1281| mu1281_10(unknown) = ^BufferMayWriteSideEffect[0] : &:r1281_5 -# 1283| r1283_1(glval) = VariableAddress[a] : -# 1283| r1283_2(glval) = FunctionAddress[static_member_without_def] : -# 1283| v1283_3(void) = Call[static_member_without_def] : func:r1283_2 -# 1283| mu1283_4(unknown) = ^CallSideEffect : ~m? -# 1284| r1284_1(glval) = FunctionAddress[static_member_without_def] : -# 1284| v1284_2(void) = Call[static_member_without_def] : func:r1284_1 -# 1284| mu1284_3(unknown) = ^CallSideEffect : ~m? -# 1286| r1286_1(glval) = FunctionAddress[getAnInstanceOfA] : -# 1286| r1286_2(A *) = Call[getAnInstanceOfA] : func:r1286_1 +# 1281| r1281_6(glval) = VariableAddress[int_arg] : +# 1281| r1281_7(int) = Load[int_arg] : &:r1281_6, ~m? +# 1281| r1281_8(int) = Constant[2] : +# 1281| r1281_9(int) = Add : r1281_7, r1281_8 +# 1281| v1281_10(void) = Call[static_member] : func:r1281_3, 0:r1281_5, 1:r1281_9 +# 1281| mu1281_11(unknown) = ^CallSideEffect : ~m? +# 1281| v1281_12(void) = ^BufferReadSideEffect[0] : &:r1281_5, ~m? +# 1281| mu1281_13(unknown) = ^BufferMayWriteSideEffect[0] : &:r1281_5 +# 1282| r1282_1(glval) = VariableAddress[a_arg] : +# 1282| r1282_2(A *) = Load[a_arg] : &:r1282_1, ~m? +# 1282| r1282_3(glval) = CopyValue : r1282_2 +# 1282| r1282_4(glval) = FunctionAddress[static_member] : +# 1282| r1282_5(glval) = VariableAddress[a] : +# 1282| r1282_6(A *) = CopyValue : r1282_5 +# 1282| r1282_7(int) = Constant[99] : +# 1282| v1282_8(void) = Call[static_member] : func:r1282_4, 0:r1282_6, 1:r1282_7 +# 1282| mu1282_9(unknown) = ^CallSideEffect : ~m? +# 1282| v1282_10(void) = ^BufferReadSideEffect[0] : &:r1282_6, ~m? +# 1282| mu1282_11(unknown) = ^BufferMayWriteSideEffect[0] : &:r1282_6 +# 1283| r1283_1(glval) = VariableAddress[a_arg] : +# 1283| r1283_2(A *) = Load[a_arg] : &:r1283_1, ~m? +# 1283| r1283_3(glval) = FunctionAddress[static_member] : +# 1283| r1283_4(glval) = VariableAddress[a_arg] : +# 1283| r1283_5(A *) = Load[a_arg] : &:r1283_4, ~m? +# 1283| r1283_6(int) = Constant[-1] : +# 1283| v1283_7(void) = Call[static_member] : func:r1283_3, 0:r1283_5, 1:r1283_6 +# 1283| mu1283_8(unknown) = ^CallSideEffect : ~m? +# 1283| v1283_9(void) = ^BufferReadSideEffect[0] : &:r1283_5, ~m? +# 1283| mu1283_10(unknown) = ^BufferMayWriteSideEffect[0] : &:r1283_5 +# 1285| r1285_1(glval) = VariableAddress[a] : +# 1285| r1285_2(glval) = FunctionAddress[static_member_without_def] : +# 1285| v1285_3(void) = Call[static_member_without_def] : func:r1285_2 +# 1285| mu1285_4(unknown) = ^CallSideEffect : ~m? +# 1286| r1286_1(glval) = FunctionAddress[static_member_without_def] : +# 1286| v1286_2(void) = Call[static_member_without_def] : func:r1286_1 # 1286| mu1286_3(unknown) = ^CallSideEffect : ~m? -# 1286| r1286_4(glval) = FunctionAddress[static_member_without_def] : -# 1286| v1286_5(void) = Call[static_member_without_def] : func:r1286_4 -# 1286| mu1286_6(unknown) = ^CallSideEffect : ~m? -# 1287| v1287_1(void) = NoOp : -# 1270| v1270_10(void) = ReturnIndirection[a_arg] : &:r1270_8, ~m? -# 1270| v1270_11(void) = ReturnVoid : -# 1270| v1270_12(void) = AliasedUse : ~m? -# 1270| v1270_13(void) = ExitFunction : +# 1288| r1288_1(glval) = FunctionAddress[getAnInstanceOfA] : +# 1288| r1288_2(A *) = Call[getAnInstanceOfA] : func:r1288_1 +# 1288| mu1288_3(unknown) = ^CallSideEffect : ~m? +# 1288| r1288_4(glval) = FunctionAddress[static_member_without_def] : +# 1288| v1288_5(void) = Call[static_member_without_def] : func:r1288_4 +# 1288| mu1288_6(unknown) = ^CallSideEffect : ~m? +# 1289| v1289_1(void) = NoOp : +# 1272| v1272_10(void) = ReturnIndirection[a_arg] : &:r1272_8, ~m? +# 1272| v1272_11(void) = ReturnVoid : +# 1272| v1272_12(void) = AliasedUse : ~m? +# 1272| v1272_13(void) = ExitFunction : -# 1289| int missingReturnValue(bool, int) -# 1289| Block 0 -# 1289| v1289_1(void) = EnterFunction : -# 1289| mu1289_2(unknown) = AliasedDefinition : -# 1289| mu1289_3(unknown) = InitializeNonLocal : -# 1289| r1289_4(glval) = VariableAddress[b] : -# 1289| mu1289_5(bool) = InitializeParameter[b] : &:r1289_4 -# 1289| r1289_6(glval) = VariableAddress[x] : -# 1289| mu1289_7(int) = InitializeParameter[x] : &:r1289_6 -# 1290| r1290_1(glval) = VariableAddress[b] : -# 1290| r1290_2(bool) = Load[b] : &:r1290_1, ~m? -# 1290| v1290_3(void) = ConditionalBranch : r1290_2 +# 1291| int missingReturnValue(bool, int) +# 1291| Block 0 +# 1291| v1291_1(void) = EnterFunction : +# 1291| mu1291_2(unknown) = AliasedDefinition : +# 1291| mu1291_3(unknown) = InitializeNonLocal : +# 1291| r1291_4(glval) = VariableAddress[b] : +# 1291| mu1291_5(bool) = InitializeParameter[b] : &:r1291_4 +# 1291| r1291_6(glval) = VariableAddress[x] : +# 1291| mu1291_7(int) = InitializeParameter[x] : &:r1291_6 +# 1292| r1292_1(glval) = VariableAddress[b] : +# 1292| r1292_2(bool) = Load[b] : &:r1292_1, ~m? +# 1292| v1292_3(void) = ConditionalBranch : r1292_2 #-----| False -> Block 3 #-----| True -> Block 2 -# 1289| Block 1 -# 1289| r1289_8(glval) = VariableAddress[#return] : -# 1289| v1289_9(void) = ReturnValue : &:r1289_8, ~m? -# 1289| v1289_10(void) = AliasedUse : ~m? -# 1289| v1289_11(void) = ExitFunction : +# 1291| Block 1 +# 1291| r1291_8(glval) = VariableAddress[#return] : +# 1291| v1291_9(void) = ReturnValue : &:r1291_8, ~m? +# 1291| v1291_10(void) = AliasedUse : ~m? +# 1291| v1291_11(void) = ExitFunction : -# 1291| Block 2 -# 1291| r1291_1(glval) = VariableAddress[#return] : -# 1291| r1291_2(glval) = VariableAddress[x] : -# 1291| r1291_3(int) = Load[x] : &:r1291_2, ~m? -# 1291| mu1291_4(int) = Store[#return] : &:r1291_1, r1291_3 -#-----| Goto -> Block 1 - -# 1293| Block 3 +# 1293| Block 2 # 1293| r1293_1(glval) = VariableAddress[#return] : -# 1293| mu1293_2(int) = Uninitialized[#return] : &:r1293_1 +# 1293| r1293_2(glval) = VariableAddress[x] : +# 1293| r1293_3(int) = Load[x] : &:r1293_2, ~m? +# 1293| mu1293_4(int) = Store[#return] : &:r1293_1, r1293_3 #-----| Goto -> Block 1 -# 1295| void returnVoid(int, int) -# 1295| Block 0 -# 1295| v1295_1(void) = EnterFunction : -# 1295| mu1295_2(unknown) = AliasedDefinition : -# 1295| mu1295_3(unknown) = InitializeNonLocal : -# 1295| r1295_4(glval) = VariableAddress[x] : -# 1295| mu1295_5(int) = InitializeParameter[x] : &:r1295_4 -# 1295| r1295_6(glval) = VariableAddress[y] : -# 1295| mu1295_7(int) = InitializeParameter[y] : &:r1295_6 -# 1296| r1296_1(glval) = FunctionAddress[IntegerOps] : -# 1296| r1296_2(glval) = VariableAddress[x] : -# 1296| r1296_3(int) = Load[x] : &:r1296_2, ~m? -# 1296| r1296_4(glval) = VariableAddress[y] : -# 1296| r1296_5(int) = Load[y] : &:r1296_4, ~m? -# 1296| v1296_6(void) = Call[IntegerOps] : func:r1296_1, 0:r1296_3, 1:r1296_5 -# 1296| mu1296_7(unknown) = ^CallSideEffect : ~m? -# 1296| v1296_8(void) = NoOp : -# 1295| v1295_8(void) = ReturnVoid : -# 1295| v1295_9(void) = AliasedUse : ~m? -# 1295| v1295_10(void) = ExitFunction : +# 1295| Block 3 +# 1295| r1295_1(glval) = VariableAddress[#return] : +# 1295| mu1295_2(int) = Uninitialized[#return] : &:r1295_1 +#-----| Goto -> Block 1 -# 1299| void gccBinaryConditional(bool, int, long) -# 1299| Block 0 -# 1299| v1299_1(void) = EnterFunction : -# 1299| mu1299_2(unknown) = AliasedDefinition : -# 1299| mu1299_3(unknown) = InitializeNonLocal : -# 1299| r1299_4(glval) = VariableAddress[b] : -# 1299| mu1299_5(bool) = InitializeParameter[b] : &:r1299_4 -# 1299| r1299_6(glval) = VariableAddress[x] : -# 1299| mu1299_7(int) = InitializeParameter[x] : &:r1299_6 -# 1299| r1299_8(glval) = VariableAddress[y] : -# 1299| mu1299_9(long) = InitializeParameter[y] : &:r1299_8 -# 1300| r1300_1(glval) = VariableAddress[z] : -# 1300| r1300_2(glval) = VariableAddress[x] : -# 1300| r1300_3(int) = Load[x] : &:r1300_2, ~m? -# 1300| mu1300_4(int) = Store[z] : &:r1300_1, r1300_3 -# 1301| r1301_1(glval) = VariableAddress[b] : -# 1301| r1301_2(bool) = Load[b] : &:r1301_1, ~m? -# 1301| v1301_3(void) = ConditionalBranch : r1301_2 +# 1297| void returnVoid(int, int) +# 1297| Block 0 +# 1297| v1297_1(void) = EnterFunction : +# 1297| mu1297_2(unknown) = AliasedDefinition : +# 1297| mu1297_3(unknown) = InitializeNonLocal : +# 1297| r1297_4(glval) = VariableAddress[x] : +# 1297| mu1297_5(int) = InitializeParameter[x] : &:r1297_4 +# 1297| r1297_6(glval) = VariableAddress[y] : +# 1297| mu1297_7(int) = InitializeParameter[y] : &:r1297_6 +# 1298| r1298_1(glval) = FunctionAddress[IntegerOps] : +# 1298| r1298_2(glval) = VariableAddress[x] : +# 1298| r1298_3(int) = Load[x] : &:r1298_2, ~m? +# 1298| r1298_4(glval) = VariableAddress[y] : +# 1298| r1298_5(int) = Load[y] : &:r1298_4, ~m? +# 1298| v1298_6(void) = Call[IntegerOps] : func:r1298_1, 0:r1298_3, 1:r1298_5 +# 1298| mu1298_7(unknown) = ^CallSideEffect : ~m? +# 1298| v1298_8(void) = NoOp : +# 1297| v1297_8(void) = ReturnVoid : +# 1297| v1297_9(void) = AliasedUse : ~m? +# 1297| v1297_10(void) = ExitFunction : + +# 1301| void gccBinaryConditional(bool, int, long) +# 1301| Block 0 +# 1301| v1301_1(void) = EnterFunction : +# 1301| mu1301_2(unknown) = AliasedDefinition : +# 1301| mu1301_3(unknown) = InitializeNonLocal : +# 1301| r1301_4(glval) = VariableAddress[b] : +# 1301| mu1301_5(bool) = InitializeParameter[b] : &:r1301_4 +# 1301| r1301_6(glval) = VariableAddress[x] : +# 1301| mu1301_7(int) = InitializeParameter[x] : &:r1301_6 +# 1301| r1301_8(glval) = VariableAddress[y] : +# 1301| mu1301_9(long) = InitializeParameter[y] : &:r1301_8 +# 1302| r1302_1(glval) = VariableAddress[z] : +# 1302| r1302_2(glval) = VariableAddress[x] : +# 1302| r1302_3(int) = Load[x] : &:r1302_2, ~m? +# 1302| mu1302_4(int) = Store[z] : &:r1302_1, r1302_3 +# 1303| r1303_1(glval) = VariableAddress[b] : +# 1303| r1303_2(bool) = Load[b] : &:r1303_1, ~m? +# 1303| v1303_3(void) = ConditionalBranch : r1303_2 #-----| False -> Block 3 #-----| True -> Block 2 -# 1301| Block 1 -# 1301| r1301_4(glval) = VariableAddress[#temp1301:9] : -# 1301| r1301_5(int) = Load[#temp1301:9] : &:r1301_4, ~m? -# 1301| r1301_6(glval) = VariableAddress[z] : -# 1301| mu1301_7(int) = Store[z] : &:r1301_6, r1301_5 -# 1302| r1302_1(glval) = VariableAddress[b] : -# 1302| r1302_2(bool) = Load[b] : &:r1302_1, ~m? -# 1302| v1302_3(void) = ConditionalBranch : r1302_2 +# 1303| Block 1 +# 1303| r1303_4(glval) = VariableAddress[#temp1303:9] : +# 1303| r1303_5(int) = Load[#temp1303:9] : &:r1303_4, ~m? +# 1303| r1303_6(glval) = VariableAddress[z] : +# 1303| mu1303_7(int) = Store[z] : &:r1303_6, r1303_5 +# 1304| r1304_1(glval) = VariableAddress[b] : +# 1304| r1304_2(bool) = Load[b] : &:r1304_1, ~m? +# 1304| v1304_3(void) = ConditionalBranch : r1304_2 #-----| False -> Block 6 #-----| True -> Block 5 -# 1301| Block 2 -# 1301| r1301_8(glval) = VariableAddress[#temp1301:9] : -# 1301| mu1301_9(int) = Store[#temp1301:9] : &:r1301_8, r1301_2 +# 1303| Block 2 +# 1303| r1303_8(glval) = VariableAddress[#temp1303:9] : +# 1303| mu1303_9(int) = Store[#temp1303:9] : &:r1303_8, r1303_2 #-----| Goto -> Block 1 -# 1301| Block 3 -# 1301| r1301_10(glval) = VariableAddress[x] : -# 1301| r1301_11(int) = Load[x] : &:r1301_10, ~m? -# 1301| r1301_12(glval) = VariableAddress[#temp1301:9] : -# 1301| mu1301_13(int) = Store[#temp1301:9] : &:r1301_12, r1301_11 +# 1303| Block 3 +# 1303| r1303_10(glval) = VariableAddress[x] : +# 1303| r1303_11(int) = Load[x] : &:r1303_10, ~m? +# 1303| r1303_12(glval) = VariableAddress[#temp1303:9] : +# 1303| mu1303_13(int) = Store[#temp1303:9] : &:r1303_12, r1303_11 #-----| Goto -> Block 1 -# 1302| Block 4 -# 1302| r1302_4(glval) = VariableAddress[#temp1302:9] : -# 1302| r1302_5(long) = Load[#temp1302:9] : &:r1302_4, ~m? -# 1302| r1302_6(int) = Convert : r1302_5 -# 1302| r1302_7(glval) = VariableAddress[z] : -# 1302| mu1302_8(int) = Store[z] : &:r1302_7, r1302_6 -# 1303| r1303_1(glval) = VariableAddress[x] : -# 1303| r1303_2(int) = Load[x] : &:r1303_1, ~m? -# 1303| r1303_3(int) = Constant[0] : -# 1303| r1303_4(bool) = CompareNE : r1303_2, r1303_3 -# 1303| v1303_5(void) = ConditionalBranch : r1303_4 +# 1304| Block 4 +# 1304| r1304_4(glval) = VariableAddress[#temp1304:9] : +# 1304| r1304_5(long) = Load[#temp1304:9] : &:r1304_4, ~m? +# 1304| r1304_6(int) = Convert : r1304_5 +# 1304| r1304_7(glval) = VariableAddress[z] : +# 1304| mu1304_8(int) = Store[z] : &:r1304_7, r1304_6 +# 1305| r1305_1(glval) = VariableAddress[x] : +# 1305| r1305_2(int) = Load[x] : &:r1305_1, ~m? +# 1305| r1305_3(int) = Constant[0] : +# 1305| r1305_4(bool) = CompareNE : r1305_2, r1305_3 +# 1305| v1305_5(void) = ConditionalBranch : r1305_4 #-----| False -> Block 9 #-----| True -> Block 8 -# 1302| Block 5 -# 1302| r1302_9(glval) = VariableAddress[#temp1302:9] : -# 1302| mu1302_10(long) = Store[#temp1302:9] : &:r1302_9, r1302_2 +# 1304| Block 5 +# 1304| r1304_9(glval) = VariableAddress[#temp1304:9] : +# 1304| mu1304_10(long) = Store[#temp1304:9] : &:r1304_9, r1304_2 #-----| Goto -> Block 4 -# 1302| Block 6 -# 1302| r1302_11(glval) = VariableAddress[y] : -# 1302| r1302_12(long) = Load[y] : &:r1302_11, ~m? -# 1302| r1302_13(glval) = VariableAddress[#temp1302:9] : -# 1302| mu1302_14(long) = Store[#temp1302:9] : &:r1302_13, r1302_12 +# 1304| Block 6 +# 1304| r1304_11(glval) = VariableAddress[y] : +# 1304| r1304_12(long) = Load[y] : &:r1304_11, ~m? +# 1304| r1304_13(glval) = VariableAddress[#temp1304:9] : +# 1304| mu1304_14(long) = Store[#temp1304:9] : &:r1304_13, r1304_12 #-----| Goto -> Block 4 -# 1303| Block 7 -# 1303| r1303_6(glval) = VariableAddress[#temp1303:9] : -# 1303| r1303_7(int) = Load[#temp1303:9] : &:r1303_6, ~m? -# 1303| r1303_8(glval) = VariableAddress[z] : -# 1303| mu1303_9(int) = Store[z] : &:r1303_8, r1303_7 -# 1304| r1304_1(glval) = VariableAddress[x] : -# 1304| r1304_2(int) = Load[x] : &:r1304_1, ~m? -# 1304| r1304_3(int) = Constant[0] : -# 1304| r1304_4(bool) = CompareNE : r1304_2, r1304_3 -# 1304| v1304_5(void) = ConditionalBranch : r1304_4 +# 1305| Block 7 +# 1305| r1305_6(glval) = VariableAddress[#temp1305:9] : +# 1305| r1305_7(int) = Load[#temp1305:9] : &:r1305_6, ~m? +# 1305| r1305_8(glval) = VariableAddress[z] : +# 1305| mu1305_9(int) = Store[z] : &:r1305_8, r1305_7 +# 1306| r1306_1(glval) = VariableAddress[x] : +# 1306| r1306_2(int) = Load[x] : &:r1306_1, ~m? +# 1306| r1306_3(int) = Constant[0] : +# 1306| r1306_4(bool) = CompareNE : r1306_2, r1306_3 +# 1306| v1306_5(void) = ConditionalBranch : r1306_4 #-----| False -> Block 12 #-----| True -> Block 11 -# 1303| Block 8 -# 1303| r1303_10(glval) = VariableAddress[#temp1303:9] : -# 1303| mu1303_11(int) = Store[#temp1303:9] : &:r1303_10, r1303_2 +# 1305| Block 8 +# 1305| r1305_10(glval) = VariableAddress[#temp1305:9] : +# 1305| mu1305_11(int) = Store[#temp1305:9] : &:r1305_10, r1305_2 #-----| Goto -> Block 7 -# 1303| Block 9 -# 1303| r1303_12(glval) = VariableAddress[x] : -# 1303| r1303_13(int) = Load[x] : &:r1303_12, ~m? -# 1303| r1303_14(glval) = VariableAddress[#temp1303:9] : -# 1303| mu1303_15(int) = Store[#temp1303:9] : &:r1303_14, r1303_13 +# 1305| Block 9 +# 1305| r1305_12(glval) = VariableAddress[x] : +# 1305| r1305_13(int) = Load[x] : &:r1305_12, ~m? +# 1305| r1305_14(glval) = VariableAddress[#temp1305:9] : +# 1305| mu1305_15(int) = Store[#temp1305:9] : &:r1305_14, r1305_13 #-----| Goto -> Block 7 -# 1304| Block 10 -# 1304| r1304_6(glval) = VariableAddress[#temp1304:9] : -# 1304| r1304_7(long) = Load[#temp1304:9] : &:r1304_6, ~m? -# 1304| r1304_8(int) = Convert : r1304_7 -# 1304| r1304_9(glval) = VariableAddress[z] : -# 1304| mu1304_10(int) = Store[z] : &:r1304_9, r1304_8 -# 1305| r1305_1(glval) = VariableAddress[y] : -# 1305| r1305_2(long) = Load[y] : &:r1305_1, ~m? -# 1305| r1305_3(long) = Constant[0] : -# 1305| r1305_4(bool) = CompareNE : r1305_2, r1305_3 -# 1305| v1305_5(void) = ConditionalBranch : r1305_4 -#-----| False -> Block 15 -#-----| True -> Block 14 - -# 1304| Block 11 -# 1304| r1304_11(glval) = VariableAddress[#temp1304:9] : -# 1304| mu1304_12(long) = Store[#temp1304:9] : &:r1304_11, r1304_2 -#-----| Goto -> Block 10 - -# 1304| Block 12 -# 1304| r1304_13(glval) = VariableAddress[y] : -# 1304| r1304_14(long) = Load[y] : &:r1304_13, ~m? -# 1304| r1304_15(glval) = VariableAddress[#temp1304:9] : -# 1304| mu1304_16(long) = Store[#temp1304:9] : &:r1304_15, r1304_14 -#-----| Goto -> Block 10 - -# 1305| Block 13 -# 1305| r1305_6(glval) = VariableAddress[#temp1305:9] : -# 1305| r1305_7(long) = Load[#temp1305:9] : &:r1305_6, ~m? -# 1305| r1305_8(int) = Convert : r1305_7 -# 1305| r1305_9(glval) = VariableAddress[z] : -# 1305| mu1305_10(int) = Store[z] : &:r1305_9, r1305_8 -# 1306| r1306_1(glval) = VariableAddress[y] : -# 1306| r1306_2(long) = Load[y] : &:r1306_1, ~m? -# 1306| r1306_3(long) = Constant[0] : -# 1306| r1306_4(bool) = CompareNE : r1306_2, r1306_3 -# 1306| v1306_5(void) = ConditionalBranch : r1306_4 -#-----| False -> Block 18 -#-----| True -> Block 17 - -# 1305| Block 14 -# 1305| r1305_11(glval) = VariableAddress[#temp1305:9] : -# 1305| mu1305_12(long) = Store[#temp1305:9] : &:r1305_11, r1305_2 -#-----| Goto -> Block 13 - -# 1305| Block 15 -# 1305| r1305_13(glval) = VariableAddress[x] : -# 1305| r1305_14(int) = Load[x] : &:r1305_13, ~m? -# 1305| r1305_15(long) = Convert : r1305_14 -# 1305| r1305_16(glval) = VariableAddress[#temp1305:9] : -# 1305| mu1305_17(long) = Store[#temp1305:9] : &:r1305_16, r1305_15 -#-----| Goto -> Block 13 - -# 1306| Block 16 +# 1306| Block 10 # 1306| r1306_6(glval) = VariableAddress[#temp1306:9] : # 1306| r1306_7(long) = Load[#temp1306:9] : &:r1306_6, ~m? # 1306| r1306_8(int) = Convert : r1306_7 # 1306| r1306_9(glval) = VariableAddress[z] : # 1306| mu1306_10(int) = Store[z] : &:r1306_9, r1306_8 -# 1308| r1308_1(glval) = VariableAddress[x] : -# 1308| r1308_2(int) = Load[x] : &:r1308_1, ~m? -# 1308| r1308_3(int) = Constant[0] : -# 1308| r1308_4(bool) = CompareNE : r1308_2, r1308_3 -# 1308| v1308_5(void) = ConditionalBranch : r1308_4 -#-----| False -> Block 25 -#-----| True -> Block 24 +# 1307| r1307_1(glval) = VariableAddress[y] : +# 1307| r1307_2(long) = Load[y] : &:r1307_1, ~m? +# 1307| r1307_3(long) = Constant[0] : +# 1307| r1307_4(bool) = CompareNE : r1307_2, r1307_3 +# 1307| v1307_5(void) = ConditionalBranch : r1307_4 +#-----| False -> Block 15 +#-----| True -> Block 14 -# 1306| Block 17 +# 1306| Block 11 # 1306| r1306_11(glval) = VariableAddress[#temp1306:9] : # 1306| mu1306_12(long) = Store[#temp1306:9] : &:r1306_11, r1306_2 -#-----| Goto -> Block 16 +#-----| Goto -> Block 10 -# 1306| Block 18 +# 1306| Block 12 # 1306| r1306_13(glval) = VariableAddress[y] : # 1306| r1306_14(long) = Load[y] : &:r1306_13, ~m? # 1306| r1306_15(glval) = VariableAddress[#temp1306:9] : # 1306| mu1306_16(long) = Store[#temp1306:9] : &:r1306_15, r1306_14 +#-----| Goto -> Block 10 + +# 1307| Block 13 +# 1307| r1307_6(glval) = VariableAddress[#temp1307:9] : +# 1307| r1307_7(long) = Load[#temp1307:9] : &:r1307_6, ~m? +# 1307| r1307_8(int) = Convert : r1307_7 +# 1307| r1307_9(glval) = VariableAddress[z] : +# 1307| mu1307_10(int) = Store[z] : &:r1307_9, r1307_8 +# 1308| r1308_1(glval) = VariableAddress[y] : +# 1308| r1308_2(long) = Load[y] : &:r1308_1, ~m? +# 1308| r1308_3(long) = Constant[0] : +# 1308| r1308_4(bool) = CompareNE : r1308_2, r1308_3 +# 1308| v1308_5(void) = ConditionalBranch : r1308_4 +#-----| False -> Block 18 +#-----| True -> Block 17 + +# 1307| Block 14 +# 1307| r1307_11(glval) = VariableAddress[#temp1307:9] : +# 1307| mu1307_12(long) = Store[#temp1307:9] : &:r1307_11, r1307_2 +#-----| Goto -> Block 13 + +# 1307| Block 15 +# 1307| r1307_13(glval) = VariableAddress[x] : +# 1307| r1307_14(int) = Load[x] : &:r1307_13, ~m? +# 1307| r1307_15(long) = Convert : r1307_14 +# 1307| r1307_16(glval) = VariableAddress[#temp1307:9] : +# 1307| mu1307_17(long) = Store[#temp1307:9] : &:r1307_16, r1307_15 +#-----| Goto -> Block 13 + +# 1308| Block 16 +# 1308| r1308_6(glval) = VariableAddress[#temp1308:9] : +# 1308| r1308_7(long) = Load[#temp1308:9] : &:r1308_6, ~m? +# 1308| r1308_8(int) = Convert : r1308_7 +# 1308| r1308_9(glval) = VariableAddress[z] : +# 1308| mu1308_10(int) = Store[z] : &:r1308_9, r1308_8 +# 1310| r1310_1(glval) = VariableAddress[x] : +# 1310| r1310_2(int) = Load[x] : &:r1310_1, ~m? +# 1310| r1310_3(int) = Constant[0] : +# 1310| r1310_4(bool) = CompareNE : r1310_2, r1310_3 +# 1310| v1310_5(void) = ConditionalBranch : r1310_4 +#-----| False -> Block 25 +#-----| True -> Block 24 + +# 1308| Block 17 +# 1308| r1308_11(glval) = VariableAddress[#temp1308:9] : +# 1308| mu1308_12(long) = Store[#temp1308:9] : &:r1308_11, r1308_2 #-----| Goto -> Block 16 -# 1308| Block 19 -# 1308| r1308_6(glval) = VariableAddress[#temp1308:9] : -# 1308| r1308_7(int) = Load[#temp1308:9] : &:r1308_6, ~m? -# 1308| r1308_8(glval) = VariableAddress[z] : -# 1308| mu1308_9(int) = Store[z] : &:r1308_8, r1308_7 -# 1309| v1309_1(void) = NoOp : -# 1299| v1299_10(void) = ReturnVoid : -# 1299| v1299_11(void) = AliasedUse : ~m? -# 1299| v1299_12(void) = ExitFunction : +# 1308| Block 18 +# 1308| r1308_13(glval) = VariableAddress[y] : +# 1308| r1308_14(long) = Load[y] : &:r1308_13, ~m? +# 1308| r1308_15(glval) = VariableAddress[#temp1308:9] : +# 1308| mu1308_16(long) = Store[#temp1308:9] : &:r1308_15, r1308_14 +#-----| Goto -> Block 16 -# 1308| Block 20 -# 1308| r1308_10(glval) = VariableAddress[#temp1308:9] : -# 1308| mu1308_11(int) = Store[#temp1308:9] : &:r1308_10, r1308_16 +# 1310| Block 19 +# 1310| r1310_6(glval) = VariableAddress[#temp1310:9] : +# 1310| r1310_7(int) = Load[#temp1310:9] : &:r1310_6, ~m? +# 1310| r1310_8(glval) = VariableAddress[z] : +# 1310| mu1310_9(int) = Store[z] : &:r1310_8, r1310_7 +# 1311| v1311_1(void) = NoOp : +# 1301| v1301_10(void) = ReturnVoid : +# 1301| v1301_11(void) = AliasedUse : ~m? +# 1301| v1301_12(void) = ExitFunction : + +# 1310| Block 20 +# 1310| r1310_10(glval) = VariableAddress[#temp1310:9] : +# 1310| mu1310_11(int) = Store[#temp1310:9] : &:r1310_10, r1310_16 #-----| Goto -> Block 19 -# 1308| Block 21 -# 1308| r1308_12(glval) = VariableAddress[#temp1308:10] : -# 1308| r1308_13(bool) = Constant[0] : -# 1308| mu1308_14(bool) = Store[#temp1308:10] : &:r1308_12, r1308_13 +# 1310| Block 21 +# 1310| r1310_12(glval) = VariableAddress[#temp1310:10] : +# 1310| r1310_13(bool) = Constant[0] : +# 1310| mu1310_14(bool) = Store[#temp1310:10] : &:r1310_12, r1310_13 #-----| Goto -> Block 22 -# 1308| Block 22 -# 1308| r1308_15(glval) = VariableAddress[#temp1308:10] : -# 1308| r1308_16(bool) = Load[#temp1308:10] : &:r1308_15, ~m? -# 1308| v1308_17(void) = ConditionalBranch : r1308_16 +# 1310| Block 22 +# 1310| r1310_15(glval) = VariableAddress[#temp1310:10] : +# 1310| r1310_16(bool) = Load[#temp1310:10] : &:r1310_15, ~m? +# 1310| v1310_17(void) = ConditionalBranch : r1310_16 #-----| False -> Block 26 #-----| True -> Block 20 -# 1308| Block 23 -# 1308| r1308_18(glval) = VariableAddress[#temp1308:10] : -# 1308| r1308_19(bool) = Constant[1] : -# 1308| mu1308_20(bool) = Store[#temp1308:10] : &:r1308_18, r1308_19 +# 1310| Block 23 +# 1310| r1310_18(glval) = VariableAddress[#temp1310:10] : +# 1310| r1310_19(bool) = Constant[1] : +# 1310| mu1310_20(bool) = Store[#temp1310:10] : &:r1310_18, r1310_19 #-----| Goto -> Block 22 -# 1308| Block 24 -# 1308| r1308_21(glval) = VariableAddress[b] : -# 1308| r1308_22(bool) = Load[b] : &:r1308_21, ~m? -# 1308| v1308_23(void) = ConditionalBranch : r1308_22 +# 1310| Block 24 +# 1310| r1310_21(glval) = VariableAddress[b] : +# 1310| r1310_22(bool) = Load[b] : &:r1310_21, ~m? +# 1310| v1310_23(void) = ConditionalBranch : r1310_22 #-----| False -> Block 25 #-----| True -> Block 23 -# 1308| Block 25 -# 1308| r1308_24(glval) = VariableAddress[y] : -# 1308| r1308_25(long) = Load[y] : &:r1308_24, ~m? -# 1308| r1308_26(long) = Constant[0] : -# 1308| r1308_27(bool) = CompareNE : r1308_25, r1308_26 -# 1308| v1308_28(void) = ConditionalBranch : r1308_27 +# 1310| Block 25 +# 1310| r1310_24(glval) = VariableAddress[y] : +# 1310| r1310_25(long) = Load[y] : &:r1310_24, ~m? +# 1310| r1310_26(long) = Constant[0] : +# 1310| r1310_27(bool) = CompareNE : r1310_25, r1310_26 +# 1310| v1310_28(void) = ConditionalBranch : r1310_27 #-----| False -> Block 21 #-----| True -> Block 23 -# 1308| Block 26 -# 1308| r1308_29(glval) = VariableAddress[x] : -# 1308| r1308_30(int) = Load[x] : &:r1308_29, ~m? -# 1308| r1308_31(glval) = VariableAddress[#temp1308:9] : -# 1308| mu1308_32(int) = Store[#temp1308:9] : &:r1308_31, r1308_30 +# 1310| Block 26 +# 1310| r1310_29(glval) = VariableAddress[x] : +# 1310| r1310_30(int) = Load[x] : &:r1310_29, ~m? +# 1310| r1310_31(glval) = VariableAddress[#temp1310:9] : +# 1310| mu1310_32(int) = Store[#temp1310:9] : &:r1310_31, r1310_30 #-----| Goto -> Block 19 -# 1314| int shortCircuitConditional(int, int) -# 1314| Block 0 -# 1314| v1314_1(void) = EnterFunction : -# 1314| mu1314_2(unknown) = AliasedDefinition : -# 1314| mu1314_3(unknown) = InitializeNonLocal : -# 1314| r1314_4(glval) = VariableAddress[x] : -# 1314| mu1314_5(int) = InitializeParameter[x] : &:r1314_4 -# 1314| r1314_6(glval) = VariableAddress[y] : -# 1314| mu1314_7(int) = InitializeParameter[y] : &:r1314_6 -# 1315| r1315_1(glval) = VariableAddress[#return] : -# 1315| r1315_2(glval) = FunctionAddress[predicateA] : -# 1315| r1315_3(bool) = Call[predicateA] : func:r1315_2 -# 1315| mu1315_4(unknown) = ^CallSideEffect : ~m? -# 1315| v1315_5(void) = ConditionalBranch : r1315_3 +# 1316| int shortCircuitConditional(int, int) +# 1316| Block 0 +# 1316| v1316_1(void) = EnterFunction : +# 1316| mu1316_2(unknown) = AliasedDefinition : +# 1316| mu1316_3(unknown) = InitializeNonLocal : +# 1316| r1316_4(glval) = VariableAddress[x] : +# 1316| mu1316_5(int) = InitializeParameter[x] : &:r1316_4 +# 1316| r1316_6(glval) = VariableAddress[y] : +# 1316| mu1316_7(int) = InitializeParameter[y] : &:r1316_6 +# 1317| r1317_1(glval) = VariableAddress[#return] : +# 1317| r1317_2(glval) = FunctionAddress[predicateA] : +# 1317| r1317_3(bool) = Call[predicateA] : func:r1317_2 +# 1317| mu1317_4(unknown) = ^CallSideEffect : ~m? +# 1317| v1317_5(void) = ConditionalBranch : r1317_3 #-----| False -> Block 4 #-----| True -> Block 2 -# 1315| Block 1 -# 1315| r1315_6(glval) = VariableAddress[#temp1315:12] : -# 1315| r1315_7(int) = Load[#temp1315:12] : &:r1315_6, ~m? -# 1315| mu1315_8(int) = Store[#return] : &:r1315_1, r1315_7 -# 1314| r1314_8(glval) = VariableAddress[#return] : -# 1314| v1314_9(void) = ReturnValue : &:r1314_8, ~m? -# 1314| v1314_10(void) = AliasedUse : ~m? -# 1314| v1314_11(void) = ExitFunction : +# 1317| Block 1 +# 1317| r1317_6(glval) = VariableAddress[#temp1317:12] : +# 1317| r1317_7(int) = Load[#temp1317:12] : &:r1317_6, ~m? +# 1317| mu1317_8(int) = Store[#return] : &:r1317_1, r1317_7 +# 1316| r1316_8(glval) = VariableAddress[#return] : +# 1316| v1316_9(void) = ReturnValue : &:r1316_8, ~m? +# 1316| v1316_10(void) = AliasedUse : ~m? +# 1316| v1316_11(void) = ExitFunction : -# 1315| Block 2 -# 1315| r1315_9(glval) = FunctionAddress[predicateB] : -# 1315| r1315_10(bool) = Call[predicateB] : func:r1315_9 -# 1315| mu1315_11(unknown) = ^CallSideEffect : ~m? -# 1315| v1315_12(void) = ConditionalBranch : r1315_10 +# 1317| Block 2 +# 1317| r1317_9(glval) = FunctionAddress[predicateB] : +# 1317| r1317_10(bool) = Call[predicateB] : func:r1317_9 +# 1317| mu1317_11(unknown) = ^CallSideEffect : ~m? +# 1317| v1317_12(void) = ConditionalBranch : r1317_10 #-----| False -> Block 4 #-----| True -> Block 3 -# 1315| Block 3 -# 1315| r1315_13(glval) = VariableAddress[x] : -# 1315| r1315_14(int) = Load[x] : &:r1315_13, ~m? -# 1315| r1315_15(glval) = VariableAddress[#temp1315:12] : -# 1315| mu1315_16(int) = Store[#temp1315:12] : &:r1315_15, r1315_14 +# 1317| Block 3 +# 1317| r1317_13(glval) = VariableAddress[x] : +# 1317| r1317_14(int) = Load[x] : &:r1317_13, ~m? +# 1317| r1317_15(glval) = VariableAddress[#temp1317:12] : +# 1317| mu1317_16(int) = Store[#temp1317:12] : &:r1317_15, r1317_14 #-----| Goto -> Block 1 -# 1315| Block 4 -# 1315| r1315_17(glval) = VariableAddress[y] : -# 1315| r1315_18(int) = Load[y] : &:r1315_17, ~m? -# 1315| r1315_19(glval) = VariableAddress[#temp1315:12] : -# 1315| mu1315_20(int) = Store[#temp1315:12] : &:r1315_19, r1315_18 +# 1317| Block 4 +# 1317| r1317_17(glval) = VariableAddress[y] : +# 1317| r1317_18(int) = Load[y] : &:r1317_17, ~m? +# 1317| r1317_19(glval) = VariableAddress[#temp1317:12] : +# 1317| mu1317_20(int) = Store[#temp1317:12] : &:r1317_19, r1317_18 #-----| Goto -> Block 1 -# 1320| void f(int*) -# 1320| Block 0 -# 1320| v1320_1(void) = EnterFunction : -# 1320| mu1320_2(unknown) = AliasedDefinition : -# 1320| mu1320_3(unknown) = InitializeNonLocal : -# 1320| r1320_4(glval) = VariableAddress[p] : -# 1320| mu1320_5(int *) = InitializeParameter[p] : &:r1320_4 -# 1320| r1320_6(int *) = Load[p] : &:r1320_4, ~m? -# 1320| mu1320_7(unknown) = InitializeIndirection[p] : &:r1320_6 -# 1322| r1322_1(glval) = FunctionAddress[operator new] : -# 1322| r1322_2(unsigned long) = Constant[4] : -# 1322| r1322_3(glval) = VariableAddress[p] : -# 1322| r1322_4(int *) = Load[p] : &:r1322_3, ~m? -# 1322| r1322_5(void *) = Convert : r1322_4 -# 1322| r1322_6(void *) = Call[operator new] : func:r1322_1, 0:r1322_2, 1:r1322_5 -# 1322| mu1322_7(unknown) = ^CallSideEffect : ~m? -# 1322| mu1322_8(unknown) = ^InitializeDynamicAllocation : &:r1322_6 -# 1322| r1322_9(int *) = Convert : r1322_6 -# 1323| v1323_1(void) = NoOp : -# 1320| v1320_8(void) = ReturnIndirection[p] : &:r1320_6, ~m? -# 1320| v1320_9(void) = ReturnVoid : -# 1320| v1320_10(void) = AliasedUse : ~m? -# 1320| v1320_11(void) = ExitFunction : +# 1322| void f(int*) +# 1322| Block 0 +# 1322| v1322_1(void) = EnterFunction : +# 1322| mu1322_2(unknown) = AliasedDefinition : +# 1322| mu1322_3(unknown) = InitializeNonLocal : +# 1322| r1322_4(glval) = VariableAddress[p] : +# 1322| mu1322_5(int *) = InitializeParameter[p] : &:r1322_4 +# 1322| r1322_6(int *) = Load[p] : &:r1322_4, ~m? +# 1322| mu1322_7(unknown) = InitializeIndirection[p] : &:r1322_6 +# 1324| r1324_1(glval) = FunctionAddress[operator new] : +# 1324| r1324_2(unsigned long) = Constant[4] : +# 1324| r1324_3(glval) = VariableAddress[p] : +# 1324| r1324_4(int *) = Load[p] : &:r1324_3, ~m? +# 1324| r1324_5(void *) = Convert : r1324_4 +# 1324| r1324_6(void *) = Call[operator new] : func:r1324_1, 0:r1324_2, 1:r1324_5 +# 1324| mu1324_7(unknown) = ^CallSideEffect : ~m? +# 1324| mu1324_8(unknown) = ^InitializeDynamicAllocation : &:r1324_6 +# 1324| r1324_9(int *) = Convert : r1324_6 +# 1325| v1325_1(void) = NoOp : +# 1322| v1322_8(void) = ReturnIndirection[p] : &:r1322_6, ~m? +# 1322| v1322_9(void) = ReturnVoid : +# 1322| v1322_10(void) = AliasedUse : ~m? +# 1322| v1322_11(void) = ExitFunction : -# 1326| Point defaultConstruct() -# 1326| Block 0 -# 1326| v1326_1(void) = EnterFunction : -# 1326| mu1326_2(unknown) = AliasedDefinition : -# 1326| mu1326_3(unknown) = InitializeNonLocal : -# 1327| r1327_1(glval) = VariableAddress[#return] : -# 1327| r1327_2(Point) = Constant[0] : -# 1327| mu1327_3(Point) = Store[#return] : &:r1327_1, r1327_2 -# 1326| r1326_4(glval) = VariableAddress[#return] : -# 1326| v1326_5(void) = ReturnValue : &:r1326_4, ~m? -# 1326| v1326_6(void) = AliasedUse : ~m? -# 1326| v1326_7(void) = ExitFunction : +# 1328| Point defaultConstruct() +# 1328| Block 0 +# 1328| v1328_1(void) = EnterFunction : +# 1328| mu1328_2(unknown) = AliasedDefinition : +# 1328| mu1328_3(unknown) = InitializeNonLocal : +# 1329| r1329_1(glval) = VariableAddress[#return] : +# 1329| r1329_2(Point) = Constant[0] : +# 1329| mu1329_3(Point) = Store[#return] : &:r1329_1, r1329_2 +# 1328| r1328_4(glval) = VariableAddress[#return] : +# 1328| v1328_5(void) = ReturnValue : &:r1328_4, ~m? +# 1328| v1328_6(void) = AliasedUse : ~m? +# 1328| v1328_7(void) = ExitFunction : -# 1326| String defaultConstruct() -# 1326| Block 0 -# 1326| v1326_1(void) = EnterFunction : -# 1326| mu1326_2(unknown) = AliasedDefinition : -# 1326| mu1326_3(unknown) = InitializeNonLocal : -# 1327| r1327_1(glval) = VariableAddress[#return] : -# 1327| mu1327_2(String) = Uninitialized[#return] : &:r1327_1 -# 1327| r1327_3(glval) = FunctionAddress[String] : -# 1327| v1327_4(void) = Call[String] : func:r1327_3, this:r1327_1 -# 1327| mu1327_5(unknown) = ^CallSideEffect : ~m? -# 1327| mu1327_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1327_1 -# 1326| r1326_4(glval) = VariableAddress[#return] : -# 1326| v1326_5(void) = ReturnValue : &:r1326_4, ~m? -# 1326| v1326_6(void) = AliasedUse : ~m? -# 1326| v1326_7(void) = ExitFunction : +# 1328| String defaultConstruct() +# 1328| Block 0 +# 1328| v1328_1(void) = EnterFunction : +# 1328| mu1328_2(unknown) = AliasedDefinition : +# 1328| mu1328_3(unknown) = InitializeNonLocal : +# 1329| r1329_1(glval) = VariableAddress[#return] : +# 1329| mu1329_2(String) = Uninitialized[#return] : &:r1329_1 +# 1329| r1329_3(glval) = FunctionAddress[String] : +# 1329| v1329_4(void) = Call[String] : func:r1329_3, this:r1329_1 +# 1329| mu1329_5(unknown) = ^CallSideEffect : ~m? +# 1329| mu1329_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1329_1 +# 1328| r1328_4(glval) = VariableAddress[#return] : +# 1328| v1328_5(void) = ReturnValue : &:r1328_4, ~m? +# 1328| v1328_6(void) = AliasedUse : ~m? +# 1328| v1328_7(void) = ExitFunction : -# 1326| copy_constructor defaultConstruct() -# 1326| Block 0 -# 1326| v1326_1(void) = EnterFunction : -# 1326| mu1326_2(unknown) = AliasedDefinition : -# 1326| mu1326_3(unknown) = InitializeNonLocal : -# 1327| r1327_1(glval) = VariableAddress[#return] : -# 1327| mu1327_2(copy_constructor) = Uninitialized[#return] : &:r1327_1 -# 1327| r1327_3(glval) = FunctionAddress[copy_constructor] : -# 1327| v1327_4(void) = Call[copy_constructor] : func:r1327_3, this:r1327_1 -# 1327| mu1327_5(unknown) = ^CallSideEffect : ~m? -# 1327| mu1327_6(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1327_1 -# 1326| r1326_4(glval) = VariableAddress[#return] : -# 1326| v1326_5(void) = ReturnValue : &:r1326_4, ~m? -# 1326| v1326_6(void) = AliasedUse : ~m? -# 1326| v1326_7(void) = ExitFunction : +# 1328| copy_constructor defaultConstruct() +# 1328| Block 0 +# 1328| v1328_1(void) = EnterFunction : +# 1328| mu1328_2(unknown) = AliasedDefinition : +# 1328| mu1328_3(unknown) = InitializeNonLocal : +# 1329| r1329_1(glval) = VariableAddress[#return] : +# 1329| mu1329_2(copy_constructor) = Uninitialized[#return] : &:r1329_1 +# 1329| r1329_3(glval) = FunctionAddress[copy_constructor] : +# 1329| v1329_4(void) = Call[copy_constructor] : func:r1329_3, this:r1329_1 +# 1329| mu1329_5(unknown) = ^CallSideEffect : ~m? +# 1329| mu1329_6(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1329_1 +# 1328| r1328_4(glval) = VariableAddress[#return] : +# 1328| v1328_5(void) = ReturnValue : &:r1328_4, ~m? +# 1328| v1328_6(void) = AliasedUse : ~m? +# 1328| v1328_7(void) = ExitFunction : -# 1326| destructor_only defaultConstruct() -# 1326| Block 0 -# 1326| v1326_1(void) = EnterFunction : -# 1326| mu1326_2(unknown) = AliasedDefinition : -# 1326| mu1326_3(unknown) = InitializeNonLocal : -# 1327| r1327_1(glval) = VariableAddress[#return] : -# 1327| r1327_2(destructor_only) = Constant[0] : -# 1327| mu1327_3(destructor_only) = Store[#return] : &:r1327_1, r1327_2 -# 1326| r1326_4(glval) = VariableAddress[#return] : -# 1326| v1326_5(void) = ReturnValue : &:r1326_4, ~m? -# 1326| v1326_6(void) = AliasedUse : ~m? -# 1326| v1326_7(void) = ExitFunction : +# 1328| destructor_only defaultConstruct() +# 1328| Block 0 +# 1328| v1328_1(void) = EnterFunction : +# 1328| mu1328_2(unknown) = AliasedDefinition : +# 1328| mu1328_3(unknown) = InitializeNonLocal : +# 1329| r1329_1(glval) = VariableAddress[#return] : +# 1329| r1329_2(destructor_only) = Constant[0] : +# 1329| mu1329_3(destructor_only) = Store[#return] : &:r1329_1, r1329_2 +# 1328| r1328_4(glval) = VariableAddress[#return] : +# 1328| v1328_5(void) = ReturnValue : &:r1328_4, ~m? +# 1328| v1328_6(void) = AliasedUse : ~m? +# 1328| v1328_7(void) = ExitFunction : -# 1365| void temporary_string() -# 1365| Block 0 -# 1365| v1365_1(void) = EnterFunction : -# 1365| mu1365_2(unknown) = AliasedDefinition : -# 1365| mu1365_3(unknown) = InitializeNonLocal : -# 1366| r1366_1(glval) = VariableAddress[s] : -# 1366| r1366_2(glval) = FunctionAddress[returnValue] : -# 1366| r1366_3(String) = Call[returnValue] : func:r1366_2 -# 1366| mu1366_4(unknown) = ^CallSideEffect : ~m? -# 1366| mu1366_5(String) = Store[s] : &:r1366_1, r1366_3 -# 1367| r1367_1(glval) = VariableAddress[rs] : -# 1367| r1367_2(glval) = VariableAddress[#temp1367:24] : -# 1367| r1367_3(glval) = FunctionAddress[returnValue] : -# 1367| r1367_4(String) = Call[returnValue] : func:r1367_3 -# 1367| mu1367_5(unknown) = ^CallSideEffect : ~m? -# 1367| mu1367_6(String) = Store[#temp1367:24] : &:r1367_2, r1367_4 -# 1367| r1367_7(glval) = Convert : r1367_2 -# 1367| r1367_8(String &) = CopyValue : r1367_7 -# 1367| mu1367_9(String &) = Store[rs] : &:r1367_1, r1367_8 -# 1369| r1369_1(glval) = FunctionAddress[acceptRef] : -# 1369| r1369_2(glval) = VariableAddress[s] : -# 1369| r1369_3(glval) = Convert : r1369_2 -# 1369| r1369_4(String &) = CopyValue : r1369_3 -# 1369| v1369_5(void) = Call[acceptRef] : func:r1369_1, 0:r1369_4 -# 1369| mu1369_6(unknown) = ^CallSideEffect : ~m? -# 1369| v1369_7(void) = ^BufferReadSideEffect[0] : &:r1369_4, ~m? -# 1370| r1370_1(glval) = FunctionAddress[acceptRef] : -# 1370| r1370_2(glval) = VariableAddress[#temp1370:23] : -# 1370| mu1370_3(String) = Uninitialized[#temp1370:23] : &:r1370_2 -# 1370| r1370_4(glval) = FunctionAddress[String] : -# 1370| r1370_5(glval) = StringConstant["foo"] : -# 1370| r1370_6(char *) = Convert : r1370_5 -# 1370| v1370_7(void) = Call[String] : func:r1370_4, this:r1370_2, 0:r1370_6 -# 1370| mu1370_8(unknown) = ^CallSideEffect : ~m? -# 1370| v1370_9(void) = ^BufferReadSideEffect[0] : &:r1370_6, ~m? -# 1370| mu1370_10(String) = ^IndirectMayWriteSideEffect[-1] : &:r1370_2 -# 1370| r1370_11(String &) = CopyValue : r1370_2 -# 1370| v1370_12(void) = Call[acceptRef] : func:r1370_1, 0:r1370_11 -# 1370| mu1370_13(unknown) = ^CallSideEffect : ~m? -# 1370| v1370_14(void) = ^BufferReadSideEffect[0] : &:r1370_11, ~m? -# 1371| r1371_1(glval) = FunctionAddress[acceptValue] : -# 1371| r1371_2(glval) = VariableAddress[#temp1371:17] : -# 1371| mu1371_3(String) = Uninitialized[#temp1371:17] : &:r1371_2 -# 1371| r1371_4(glval) = FunctionAddress[String] : -# 1371| r1371_5(glval) = VariableAddress[s] : -# 1371| r1371_6(glval) = Convert : r1371_5 -# 1371| r1371_7(String &) = CopyValue : r1371_6 -# 1371| v1371_8(void) = Call[String] : func:r1371_4, this:r1371_2, 0:r1371_7 -# 1371| mu1371_9(unknown) = ^CallSideEffect : ~m? -# 1371| v1371_10(void) = ^BufferReadSideEffect[0] : &:r1371_7, ~m? -# 1371| mu1371_11(String) = ^IndirectMayWriteSideEffect[-1] : &:r1371_2 -# 1371| r1371_12(String) = Load[#temp1371:17] : &:r1371_2, ~m? -# 1371| v1371_13(void) = Call[acceptValue] : func:r1371_1, 0:r1371_12 -# 1371| mu1371_14(unknown) = ^CallSideEffect : ~m? -# 1372| r1372_1(glval) = FunctionAddress[acceptValue] : -# 1372| r1372_2(glval) = VariableAddress[#temp1372:25] : -# 1372| mu1372_3(String) = Uninitialized[#temp1372:25] : &:r1372_2 +# 1367| void temporary_string() +# 1367| Block 0 +# 1367| v1367_1(void) = EnterFunction : +# 1367| mu1367_2(unknown) = AliasedDefinition : +# 1367| mu1367_3(unknown) = InitializeNonLocal : +# 1368| r1368_1(glval) = VariableAddress[s] : +# 1368| r1368_2(glval) = FunctionAddress[returnValue] : +# 1368| r1368_3(String) = Call[returnValue] : func:r1368_2 +# 1368| mu1368_4(unknown) = ^CallSideEffect : ~m? +# 1368| mu1368_5(String) = Store[s] : &:r1368_1, r1368_3 +# 1369| r1369_1(glval) = VariableAddress[rs] : +# 1369| r1369_2(glval) = VariableAddress[#temp1369:24] : +# 1369| r1369_3(glval) = FunctionAddress[returnValue] : +# 1369| r1369_4(String) = Call[returnValue] : func:r1369_3 +# 1369| mu1369_5(unknown) = ^CallSideEffect : ~m? +# 1369| mu1369_6(String) = Store[#temp1369:24] : &:r1369_2, r1369_4 +# 1369| r1369_7(glval) = Convert : r1369_2 +# 1369| r1369_8(String &) = CopyValue : r1369_7 +# 1369| mu1369_9(String &) = Store[rs] : &:r1369_1, r1369_8 +# 1371| r1371_1(glval) = FunctionAddress[acceptRef] : +# 1371| r1371_2(glval) = VariableAddress[s] : +# 1371| r1371_3(glval) = Convert : r1371_2 +# 1371| r1371_4(String &) = CopyValue : r1371_3 +# 1371| v1371_5(void) = Call[acceptRef] : func:r1371_1, 0:r1371_4 +# 1371| mu1371_6(unknown) = ^CallSideEffect : ~m? +# 1371| v1371_7(void) = ^BufferReadSideEffect[0] : &:r1371_4, ~m? +# 1372| r1372_1(glval) = FunctionAddress[acceptRef] : +# 1372| r1372_2(glval) = VariableAddress[#temp1372:23] : +# 1372| mu1372_3(String) = Uninitialized[#temp1372:23] : &:r1372_2 # 1372| r1372_4(glval) = FunctionAddress[String] : # 1372| r1372_5(glval) = StringConstant["foo"] : # 1372| r1372_6(char *) = Convert : r1372_5 @@ -7791,985 +7763,993 @@ ir.cpp: # 1372| mu1372_8(unknown) = ^CallSideEffect : ~m? # 1372| v1372_9(void) = ^BufferReadSideEffect[0] : &:r1372_6, ~m? # 1372| mu1372_10(String) = ^IndirectMayWriteSideEffect[-1] : &:r1372_2 -# 1372| r1372_11(String) = Load[#temp1372:25] : &:r1372_2, ~m? -# 1372| v1372_12(void) = Call[acceptValue] : func:r1372_1, 0:r1372_11 +# 1372| r1372_11(String &) = CopyValue : r1372_2 +# 1372| v1372_12(void) = Call[acceptRef] : func:r1372_1, 0:r1372_11 # 1372| mu1372_13(unknown) = ^CallSideEffect : ~m? -# 1373| r1373_1(glval) = VariableAddress[#temp1373:5] : -# 1373| mu1373_2(String) = Uninitialized[#temp1373:5] : &:r1373_1 -# 1373| r1373_3(glval) = FunctionAddress[String] : -# 1373| v1373_4(void) = Call[String] : func:r1373_3, this:r1373_1 -# 1373| mu1373_5(unknown) = ^CallSideEffect : ~m? -# 1373| mu1373_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1373_1 -# 1373| r1373_7(glval) = Convert : r1373_1 -# 1373| r1373_8(glval) = FunctionAddress[c_str] : -# 1373| r1373_9(char *) = Call[c_str] : func:r1373_8, this:r1373_7 -# 1373| mu1373_10(unknown) = ^CallSideEffect : ~m? -# 1373| v1373_11(void) = ^IndirectReadSideEffect[-1] : &:r1373_7, ~m? -# 1374| r1374_1(glval) = VariableAddress[#temp1374:5] : -# 1374| r1374_2(glval) = FunctionAddress[returnValue] : -# 1374| r1374_3(String) = Call[returnValue] : func:r1374_2 -# 1374| mu1374_4(unknown) = ^CallSideEffect : ~m? -# 1374| mu1374_5(String) = Store[#temp1374:5] : &:r1374_1, r1374_3 -# 1374| r1374_6(glval) = Convert : r1374_1 -# 1374| r1374_7(glval) = FunctionAddress[c_str] : -# 1374| r1374_8(char *) = Call[c_str] : func:r1374_7, this:r1374_6 -# 1374| mu1374_9(unknown) = ^CallSideEffect : ~m? -# 1374| v1374_10(void) = ^IndirectReadSideEffect[-1] : &:r1374_6, ~m? +# 1372| v1372_14(void) = ^BufferReadSideEffect[0] : &:r1372_11, ~m? +# 1373| r1373_1(glval) = FunctionAddress[acceptValue] : +# 1373| r1373_2(glval) = VariableAddress[#temp1373:17] : +# 1373| mu1373_3(String) = Uninitialized[#temp1373:17] : &:r1373_2 +# 1373| r1373_4(glval) = FunctionAddress[String] : +# 1373| r1373_5(glval) = VariableAddress[s] : +# 1373| r1373_6(glval) = Convert : r1373_5 +# 1373| r1373_7(String &) = CopyValue : r1373_6 +# 1373| v1373_8(void) = Call[String] : func:r1373_4, this:r1373_2, 0:r1373_7 +# 1373| mu1373_9(unknown) = ^CallSideEffect : ~m? +# 1373| v1373_10(void) = ^BufferReadSideEffect[0] : &:r1373_7, ~m? +# 1373| mu1373_11(String) = ^IndirectMayWriteSideEffect[-1] : &:r1373_2 +# 1373| r1373_12(String) = Load[#temp1373:17] : &:r1373_2, ~m? +# 1373| v1373_13(void) = Call[acceptValue] : func:r1373_1, 0:r1373_12 +# 1373| mu1373_14(unknown) = ^CallSideEffect : ~m? +# 1374| r1374_1(glval) = FunctionAddress[acceptValue] : +# 1374| r1374_2(glval) = VariableAddress[#temp1374:25] : +# 1374| mu1374_3(String) = Uninitialized[#temp1374:25] : &:r1374_2 +# 1374| r1374_4(glval) = FunctionAddress[String] : +# 1374| r1374_5(glval) = StringConstant["foo"] : +# 1374| r1374_6(char *) = Convert : r1374_5 +# 1374| v1374_7(void) = Call[String] : func:r1374_4, this:r1374_2, 0:r1374_6 +# 1374| mu1374_8(unknown) = ^CallSideEffect : ~m? +# 1374| v1374_9(void) = ^BufferReadSideEffect[0] : &:r1374_6, ~m? +# 1374| mu1374_10(String) = ^IndirectMayWriteSideEffect[-1] : &:r1374_2 +# 1374| r1374_11(String) = Load[#temp1374:25] : &:r1374_2, ~m? +# 1374| v1374_12(void) = Call[acceptValue] : func:r1374_1, 0:r1374_11 +# 1374| mu1374_13(unknown) = ^CallSideEffect : ~m? +# 1375| r1375_1(glval) = VariableAddress[#temp1375:5] : +# 1375| mu1375_2(String) = Uninitialized[#temp1375:5] : &:r1375_1 +# 1375| r1375_3(glval) = FunctionAddress[String] : +# 1375| v1375_4(void) = Call[String] : func:r1375_3, this:r1375_1 +# 1375| mu1375_5(unknown) = ^CallSideEffect : ~m? +# 1375| mu1375_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1375_1 +# 1375| r1375_7(glval) = Convert : r1375_1 +# 1375| r1375_8(glval) = FunctionAddress[c_str] : +# 1375| r1375_9(char *) = Call[c_str] : func:r1375_8, this:r1375_7 +# 1375| mu1375_10(unknown) = ^CallSideEffect : ~m? +# 1375| v1375_11(void) = ^IndirectReadSideEffect[-1] : &:r1375_7, ~m? # 1376| r1376_1(glval) = VariableAddress[#temp1376:5] : -# 1376| r1376_2(glval) = FunctionAddress[defaultConstruct] : -# 1376| r1376_3(String) = Call[defaultConstruct] : func:r1376_2 +# 1376| r1376_2(glval) = FunctionAddress[returnValue] : +# 1376| r1376_3(String) = Call[returnValue] : func:r1376_2 # 1376| mu1376_4(unknown) = ^CallSideEffect : ~m? # 1376| mu1376_5(String) = Store[#temp1376:5] : &:r1376_1, r1376_3 -# 1377| v1377_1(void) = NoOp : -# 1365| v1365_4(void) = ReturnVoid : -# 1365| v1365_5(void) = AliasedUse : ~m? -# 1365| v1365_6(void) = ExitFunction : +# 1376| r1376_6(glval) = Convert : r1376_1 +# 1376| r1376_7(glval) = FunctionAddress[c_str] : +# 1376| r1376_8(char *) = Call[c_str] : func:r1376_7, this:r1376_6 +# 1376| mu1376_9(unknown) = ^CallSideEffect : ~m? +# 1376| v1376_10(void) = ^IndirectReadSideEffect[-1] : &:r1376_6, ~m? +# 1378| r1378_1(glval) = VariableAddress[#temp1378:5] : +# 1378| r1378_2(glval) = FunctionAddress[defaultConstruct] : +# 1378| r1378_3(String) = Call[defaultConstruct] : func:r1378_2 +# 1378| mu1378_4(unknown) = ^CallSideEffect : ~m? +# 1378| mu1378_5(String) = Store[#temp1378:5] : &:r1378_1, r1378_3 +# 1379| v1379_1(void) = NoOp : +# 1367| v1367_4(void) = ReturnVoid : +# 1367| v1367_5(void) = AliasedUse : ~m? +# 1367| v1367_6(void) = ExitFunction : -# 1379| void temporary_destructor_only() -# 1379| Block 0 -# 1379| v1379_1(void) = EnterFunction : -# 1379| mu1379_2(unknown) = AliasedDefinition : -# 1379| mu1379_3(unknown) = InitializeNonLocal : -# 1380| r1380_1(glval) = VariableAddress[d] : -# 1380| r1380_2(glval) = FunctionAddress[returnValue] : -# 1380| r1380_3(destructor_only) = Call[returnValue] : func:r1380_2 -# 1380| mu1380_4(unknown) = ^CallSideEffect : ~m? -# 1380| mu1380_5(destructor_only) = Store[d] : &:r1380_1, r1380_3 -# 1381| r1381_1(glval) = VariableAddress[rd] : -# 1381| r1381_2(glval) = VariableAddress[#temp1381:33] : -# 1381| r1381_3(glval) = FunctionAddress[returnValue] : -# 1381| r1381_4(destructor_only) = Call[returnValue] : func:r1381_3 -# 1381| mu1381_5(unknown) = ^CallSideEffect : ~m? -# 1381| mu1381_6(destructor_only) = Store[#temp1381:33] : &:r1381_2, r1381_4 -# 1381| r1381_7(glval) = Convert : r1381_2 -# 1381| r1381_8(destructor_only &) = CopyValue : r1381_7 -# 1381| mu1381_9(destructor_only &) = Store[rd] : &:r1381_1, r1381_8 -# 1382| r1382_1(glval) = VariableAddress[d2] : -# 1382| mu1382_2(destructor_only) = Uninitialized[d2] : &:r1382_1 -# 1383| r1383_1(glval) = FunctionAddress[acceptRef] : -# 1383| r1383_2(glval) = VariableAddress[d] : -# 1383| r1383_3(glval) = Convert : r1383_2 -# 1383| r1383_4(destructor_only &) = CopyValue : r1383_3 -# 1383| v1383_5(void) = Call[acceptRef] : func:r1383_1, 0:r1383_4 -# 1383| mu1383_6(unknown) = ^CallSideEffect : ~m? -# 1383| v1383_7(void) = ^BufferReadSideEffect[0] : &:r1383_4, ~m? -# 1384| r1384_1(glval) = FunctionAddress[acceptValue] : -# 1384| r1384_2(glval) = VariableAddress[#temp1384:17] : -# 1384| r1384_3(glval) = VariableAddress[d] : -# 1384| r1384_4(destructor_only) = Load[d] : &:r1384_3, ~m? -# 1384| mu1384_5(destructor_only) = Store[#temp1384:17] : &:r1384_2, r1384_4 -# 1384| r1384_6(destructor_only) = Load[#temp1384:17] : &:r1384_2, ~m? -# 1384| v1384_7(void) = Call[acceptValue] : func:r1384_1, 0:r1384_6 -# 1384| mu1384_8(unknown) = ^CallSideEffect : ~m? -# 1385| r1385_1(glval) = VariableAddress[#temp1385:5] : -# 1385| r1385_2(destructor_only) = Constant[0] : -# 1385| mu1385_3(destructor_only) = Store[#temp1385:5] : &:r1385_1, r1385_2 -# 1385| r1385_4(glval) = FunctionAddress[method] : -# 1385| v1385_5(void) = Call[method] : func:r1385_4, this:r1385_1 +# 1381| void temporary_destructor_only() +# 1381| Block 0 +# 1381| v1381_1(void) = EnterFunction : +# 1381| mu1381_2(unknown) = AliasedDefinition : +# 1381| mu1381_3(unknown) = InitializeNonLocal : +# 1382| r1382_1(glval) = VariableAddress[d] : +# 1382| r1382_2(glval) = FunctionAddress[returnValue] : +# 1382| r1382_3(destructor_only) = Call[returnValue] : func:r1382_2 +# 1382| mu1382_4(unknown) = ^CallSideEffect : ~m? +# 1382| mu1382_5(destructor_only) = Store[d] : &:r1382_1, r1382_3 +# 1383| r1383_1(glval) = VariableAddress[rd] : +# 1383| r1383_2(glval) = VariableAddress[#temp1383:33] : +# 1383| r1383_3(glval) = FunctionAddress[returnValue] : +# 1383| r1383_4(destructor_only) = Call[returnValue] : func:r1383_3 +# 1383| mu1383_5(unknown) = ^CallSideEffect : ~m? +# 1383| mu1383_6(destructor_only) = Store[#temp1383:33] : &:r1383_2, r1383_4 +# 1383| r1383_7(glval) = Convert : r1383_2 +# 1383| r1383_8(destructor_only &) = CopyValue : r1383_7 +# 1383| mu1383_9(destructor_only &) = Store[rd] : &:r1383_1, r1383_8 +# 1384| r1384_1(glval) = VariableAddress[d2] : +# 1384| mu1384_2(destructor_only) = Uninitialized[d2] : &:r1384_1 +# 1385| r1385_1(glval) = FunctionAddress[acceptRef] : +# 1385| r1385_2(glval) = VariableAddress[d] : +# 1385| r1385_3(glval) = Convert : r1385_2 +# 1385| r1385_4(destructor_only &) = CopyValue : r1385_3 +# 1385| v1385_5(void) = Call[acceptRef] : func:r1385_1, 0:r1385_4 # 1385| mu1385_6(unknown) = ^CallSideEffect : ~m? -# 1385| v1385_7(void) = ^IndirectReadSideEffect[-1] : &:r1385_1, ~m? -# 1385| mu1385_8(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1385_1 -# 1386| r1386_1(glval) = VariableAddress[#temp1386:5] : -# 1386| r1386_2(glval) = FunctionAddress[returnValue] : -# 1386| r1386_3(destructor_only) = Call[returnValue] : func:r1386_2 -# 1386| mu1386_4(unknown) = ^CallSideEffect : ~m? -# 1386| mu1386_5(destructor_only) = Store[#temp1386:5] : &:r1386_1, r1386_3 -# 1386| r1386_6(glval) = FunctionAddress[method] : -# 1386| v1386_7(void) = Call[method] : func:r1386_6, this:r1386_1 +# 1385| v1385_7(void) = ^BufferReadSideEffect[0] : &:r1385_4, ~m? +# 1386| r1386_1(glval) = FunctionAddress[acceptValue] : +# 1386| r1386_2(glval) = VariableAddress[#temp1386:17] : +# 1386| r1386_3(glval) = VariableAddress[d] : +# 1386| r1386_4(destructor_only) = Load[d] : &:r1386_3, ~m? +# 1386| mu1386_5(destructor_only) = Store[#temp1386:17] : &:r1386_2, r1386_4 +# 1386| r1386_6(destructor_only) = Load[#temp1386:17] : &:r1386_2, ~m? +# 1386| v1386_7(void) = Call[acceptValue] : func:r1386_1, 0:r1386_6 # 1386| mu1386_8(unknown) = ^CallSideEffect : ~m? -# 1386| v1386_9(void) = ^IndirectReadSideEffect[-1] : &:r1386_1, ~m? -# 1386| mu1386_10(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1386_1 +# 1387| r1387_1(glval) = VariableAddress[#temp1387:5] : +# 1387| r1387_2(destructor_only) = Constant[0] : +# 1387| mu1387_3(destructor_only) = Store[#temp1387:5] : &:r1387_1, r1387_2 +# 1387| r1387_4(glval) = FunctionAddress[method] : +# 1387| v1387_5(void) = Call[method] : func:r1387_4, this:r1387_1 +# 1387| mu1387_6(unknown) = ^CallSideEffect : ~m? +# 1387| v1387_7(void) = ^IndirectReadSideEffect[-1] : &:r1387_1, ~m? +# 1387| mu1387_8(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1387_1 # 1388| r1388_1(glval) = VariableAddress[#temp1388:5] : -# 1388| r1388_2(glval) = FunctionAddress[defaultConstruct] : -# 1388| r1388_3(destructor_only) = Call[defaultConstruct] : func:r1388_2 +# 1388| r1388_2(glval) = FunctionAddress[returnValue] : +# 1388| r1388_3(destructor_only) = Call[returnValue] : func:r1388_2 # 1388| mu1388_4(unknown) = ^CallSideEffect : ~m? # 1388| mu1388_5(destructor_only) = Store[#temp1388:5] : &:r1388_1, r1388_3 -# 1389| v1389_1(void) = NoOp : -# 1379| v1379_4(void) = ReturnVoid : -# 1379| v1379_5(void) = AliasedUse : ~m? -# 1379| v1379_6(void) = ExitFunction : +# 1388| r1388_6(glval) = FunctionAddress[method] : +# 1388| v1388_7(void) = Call[method] : func:r1388_6, this:r1388_1 +# 1388| mu1388_8(unknown) = ^CallSideEffect : ~m? +# 1388| v1388_9(void) = ^IndirectReadSideEffect[-1] : &:r1388_1, ~m? +# 1388| mu1388_10(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1388_1 +# 1390| r1390_1(glval) = VariableAddress[#temp1390:5] : +# 1390| r1390_2(glval) = FunctionAddress[defaultConstruct] : +# 1390| r1390_3(destructor_only) = Call[defaultConstruct] : func:r1390_2 +# 1390| mu1390_4(unknown) = ^CallSideEffect : ~m? +# 1390| mu1390_5(destructor_only) = Store[#temp1390:5] : &:r1390_1, r1390_3 +# 1391| v1391_1(void) = NoOp : +# 1381| v1381_4(void) = ReturnVoid : +# 1381| v1381_5(void) = AliasedUse : ~m? +# 1381| v1381_6(void) = ExitFunction : -# 1391| void temporary_copy_constructor() -# 1391| Block 0 -# 1391| v1391_1(void) = EnterFunction : -# 1391| mu1391_2(unknown) = AliasedDefinition : -# 1391| mu1391_3(unknown) = InitializeNonLocal : -# 1392| r1392_1(glval) = VariableAddress[d] : -# 1392| r1392_2(glval) = FunctionAddress[returnValue] : -# 1392| r1392_3(copy_constructor) = Call[returnValue] : func:r1392_2 -# 1392| mu1392_4(unknown) = ^CallSideEffect : ~m? -# 1392| mu1392_5(copy_constructor) = Store[d] : &:r1392_1, r1392_3 -# 1393| r1393_1(glval) = VariableAddress[rd] : -# 1393| r1393_2(glval) = VariableAddress[#temp1393:34] : -# 1393| r1393_3(glval) = FunctionAddress[returnValue] : -# 1393| r1393_4(copy_constructor) = Call[returnValue] : func:r1393_3 -# 1393| mu1393_5(unknown) = ^CallSideEffect : ~m? -# 1393| mu1393_6(copy_constructor) = Store[#temp1393:34] : &:r1393_2, r1393_4 -# 1393| r1393_7(glval) = Convert : r1393_2 -# 1393| r1393_8(copy_constructor &) = CopyValue : r1393_7 -# 1393| mu1393_9(copy_constructor &) = Store[rd] : &:r1393_1, r1393_8 -# 1394| r1394_1(glval) = VariableAddress[d2] : -# 1394| mu1394_2(copy_constructor) = Uninitialized[d2] : &:r1394_1 -# 1394| r1394_3(glval) = FunctionAddress[copy_constructor] : -# 1394| v1394_4(void) = Call[copy_constructor] : func:r1394_3, this:r1394_1 -# 1394| mu1394_5(unknown) = ^CallSideEffect : ~m? -# 1394| mu1394_6(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1394_1 -# 1395| r1395_1(glval) = FunctionAddress[acceptRef] : -# 1395| r1395_2(glval) = VariableAddress[d] : -# 1395| r1395_3(glval) = Convert : r1395_2 -# 1395| r1395_4(copy_constructor &) = CopyValue : r1395_3 -# 1395| v1395_5(void) = Call[acceptRef] : func:r1395_1, 0:r1395_4 -# 1395| mu1395_6(unknown) = ^CallSideEffect : ~m? -# 1395| v1395_7(void) = ^BufferReadSideEffect[0] : &:r1395_4, ~m? -# 1396| r1396_1(glval) = FunctionAddress[acceptValue] : -# 1396| r1396_2(glval) = VariableAddress[#temp1396:17] : -# 1396| mu1396_3(copy_constructor) = Uninitialized[#temp1396:17] : &:r1396_2 -# 1396| r1396_4(glval) = FunctionAddress[copy_constructor] : -# 1396| r1396_5(glval) = VariableAddress[d] : -# 1396| r1396_6(glval) = Convert : r1396_5 -# 1396| r1396_7(copy_constructor &) = CopyValue : r1396_6 -# 1396| v1396_8(void) = Call[copy_constructor] : func:r1396_4, this:r1396_2, 0:r1396_7 -# 1396| mu1396_9(unknown) = ^CallSideEffect : ~m? -# 1396| v1396_10(void) = ^BufferReadSideEffect[0] : &:r1396_7, ~m? -# 1396| mu1396_11(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1396_2 -# 1396| r1396_12(copy_constructor) = Load[#temp1396:17] : &:r1396_2, ~m? -# 1396| v1396_13(void) = Call[acceptValue] : func:r1396_1, 0:r1396_12 -# 1396| mu1396_14(unknown) = ^CallSideEffect : ~m? -# 1397| r1397_1(glval) = VariableAddress[#temp1397:5] : -# 1397| mu1397_2(copy_constructor) = Uninitialized[#temp1397:5] : &:r1397_1 -# 1397| r1397_3(glval) = FunctionAddress[copy_constructor] : -# 1397| v1397_4(void) = Call[copy_constructor] : func:r1397_3, this:r1397_1 -# 1397| mu1397_5(unknown) = ^CallSideEffect : ~m? -# 1397| mu1397_6(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1397_1 -# 1397| r1397_7(glval) = FunctionAddress[method] : -# 1397| v1397_8(void) = Call[method] : func:r1397_7, this:r1397_1 -# 1397| mu1397_9(unknown) = ^CallSideEffect : ~m? -# 1397| v1397_10(void) = ^IndirectReadSideEffect[-1] : &:r1397_1, ~m? -# 1397| mu1397_11(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1397_1 -# 1398| r1398_1(glval) = VariableAddress[#temp1398:5] : -# 1398| r1398_2(glval) = FunctionAddress[returnValue] : -# 1398| r1398_3(copy_constructor) = Call[returnValue] : func:r1398_2 -# 1398| mu1398_4(unknown) = ^CallSideEffect : ~m? -# 1398| mu1398_5(copy_constructor) = Store[#temp1398:5] : &:r1398_1, r1398_3 -# 1398| r1398_6(glval) = FunctionAddress[method] : -# 1398| v1398_7(void) = Call[method] : func:r1398_6, this:r1398_1 -# 1398| mu1398_8(unknown) = ^CallSideEffect : ~m? -# 1398| v1398_9(void) = ^IndirectReadSideEffect[-1] : &:r1398_1, ~m? -# 1398| mu1398_10(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1398_1 +# 1393| void temporary_copy_constructor() +# 1393| Block 0 +# 1393| v1393_1(void) = EnterFunction : +# 1393| mu1393_2(unknown) = AliasedDefinition : +# 1393| mu1393_3(unknown) = InitializeNonLocal : +# 1394| r1394_1(glval) = VariableAddress[d] : +# 1394| r1394_2(glval) = FunctionAddress[returnValue] : +# 1394| r1394_3(copy_constructor) = Call[returnValue] : func:r1394_2 +# 1394| mu1394_4(unknown) = ^CallSideEffect : ~m? +# 1394| mu1394_5(copy_constructor) = Store[d] : &:r1394_1, r1394_3 +# 1395| r1395_1(glval) = VariableAddress[rd] : +# 1395| r1395_2(glval) = VariableAddress[#temp1395:34] : +# 1395| r1395_3(glval) = FunctionAddress[returnValue] : +# 1395| r1395_4(copy_constructor) = Call[returnValue] : func:r1395_3 +# 1395| mu1395_5(unknown) = ^CallSideEffect : ~m? +# 1395| mu1395_6(copy_constructor) = Store[#temp1395:34] : &:r1395_2, r1395_4 +# 1395| r1395_7(glval) = Convert : r1395_2 +# 1395| r1395_8(copy_constructor &) = CopyValue : r1395_7 +# 1395| mu1395_9(copy_constructor &) = Store[rd] : &:r1395_1, r1395_8 +# 1396| r1396_1(glval) = VariableAddress[d2] : +# 1396| mu1396_2(copy_constructor) = Uninitialized[d2] : &:r1396_1 +# 1396| r1396_3(glval) = FunctionAddress[copy_constructor] : +# 1396| v1396_4(void) = Call[copy_constructor] : func:r1396_3, this:r1396_1 +# 1396| mu1396_5(unknown) = ^CallSideEffect : ~m? +# 1396| mu1396_6(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1396_1 +# 1397| r1397_1(glval) = FunctionAddress[acceptRef] : +# 1397| r1397_2(glval) = VariableAddress[d] : +# 1397| r1397_3(glval) = Convert : r1397_2 +# 1397| r1397_4(copy_constructor &) = CopyValue : r1397_3 +# 1397| v1397_5(void) = Call[acceptRef] : func:r1397_1, 0:r1397_4 +# 1397| mu1397_6(unknown) = ^CallSideEffect : ~m? +# 1397| v1397_7(void) = ^BufferReadSideEffect[0] : &:r1397_4, ~m? +# 1398| r1398_1(glval) = FunctionAddress[acceptValue] : +# 1398| r1398_2(glval) = VariableAddress[#temp1398:17] : +# 1398| mu1398_3(copy_constructor) = Uninitialized[#temp1398:17] : &:r1398_2 +# 1398| r1398_4(glval) = FunctionAddress[copy_constructor] : +# 1398| r1398_5(glval) = VariableAddress[d] : +# 1398| r1398_6(glval) = Convert : r1398_5 +# 1398| r1398_7(copy_constructor &) = CopyValue : r1398_6 +# 1398| v1398_8(void) = Call[copy_constructor] : func:r1398_4, this:r1398_2, 0:r1398_7 +# 1398| mu1398_9(unknown) = ^CallSideEffect : ~m? +# 1398| v1398_10(void) = ^BufferReadSideEffect[0] : &:r1398_7, ~m? +# 1398| mu1398_11(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1398_2 +# 1398| r1398_12(copy_constructor) = Load[#temp1398:17] : &:r1398_2, ~m? +# 1398| v1398_13(void) = Call[acceptValue] : func:r1398_1, 0:r1398_12 +# 1398| mu1398_14(unknown) = ^CallSideEffect : ~m? # 1399| r1399_1(glval) = VariableAddress[#temp1399:5] : -# 1399| r1399_2(glval) = FunctionAddress[defaultConstruct] : -# 1399| r1399_3(copy_constructor) = Call[defaultConstruct] : func:r1399_2 -# 1399| mu1399_4(unknown) = ^CallSideEffect : ~m? -# 1399| mu1399_5(copy_constructor) = Store[#temp1399:5] : &:r1399_1, r1399_3 -# 1401| r1401_1(glval) = VariableAddress[y] : -# 1401| r1401_2(glval) = VariableAddress[#temp1401:13] : -# 1401| r1401_3(glval) = FunctionAddress[returnValue] : -# 1401| r1401_4(copy_constructor) = Call[returnValue] : func:r1401_3 -# 1401| mu1401_5(unknown) = ^CallSideEffect : ~m? -# 1401| mu1401_6(copy_constructor) = Store[#temp1401:13] : &:r1401_2, r1401_4 -# 1401| r1401_7(glval) = FieldAddress[y] : r1401_2 -# 1401| r1401_8(int) = Load[?] : &:r1401_7, ~m? -# 1401| mu1401_9(int) = Store[y] : &:r1401_1, r1401_8 -# 1402| v1402_1(void) = NoOp : -# 1391| v1391_4(void) = ReturnVoid : -# 1391| v1391_5(void) = AliasedUse : ~m? -# 1391| v1391_6(void) = ExitFunction : +# 1399| mu1399_2(copy_constructor) = Uninitialized[#temp1399:5] : &:r1399_1 +# 1399| r1399_3(glval) = FunctionAddress[copy_constructor] : +# 1399| v1399_4(void) = Call[copy_constructor] : func:r1399_3, this:r1399_1 +# 1399| mu1399_5(unknown) = ^CallSideEffect : ~m? +# 1399| mu1399_6(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1399_1 +# 1399| r1399_7(glval) = FunctionAddress[method] : +# 1399| v1399_8(void) = Call[method] : func:r1399_7, this:r1399_1 +# 1399| mu1399_9(unknown) = ^CallSideEffect : ~m? +# 1399| v1399_10(void) = ^IndirectReadSideEffect[-1] : &:r1399_1, ~m? +# 1399| mu1399_11(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1399_1 +# 1400| r1400_1(glval) = VariableAddress[#temp1400:5] : +# 1400| r1400_2(glval) = FunctionAddress[returnValue] : +# 1400| r1400_3(copy_constructor) = Call[returnValue] : func:r1400_2 +# 1400| mu1400_4(unknown) = ^CallSideEffect : ~m? +# 1400| mu1400_5(copy_constructor) = Store[#temp1400:5] : &:r1400_1, r1400_3 +# 1400| r1400_6(glval) = FunctionAddress[method] : +# 1400| v1400_7(void) = Call[method] : func:r1400_6, this:r1400_1 +# 1400| mu1400_8(unknown) = ^CallSideEffect : ~m? +# 1400| v1400_9(void) = ^IndirectReadSideEffect[-1] : &:r1400_1, ~m? +# 1400| mu1400_10(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1400_1 +# 1401| r1401_1(glval) = VariableAddress[#temp1401:5] : +# 1401| r1401_2(glval) = FunctionAddress[defaultConstruct] : +# 1401| r1401_3(copy_constructor) = Call[defaultConstruct] : func:r1401_2 +# 1401| mu1401_4(unknown) = ^CallSideEffect : ~m? +# 1401| mu1401_5(copy_constructor) = Store[#temp1401:5] : &:r1401_1, r1401_3 +# 1403| r1403_1(glval) = VariableAddress[y] : +# 1403| r1403_2(glval) = VariableAddress[#temp1403:13] : +# 1403| r1403_3(glval) = FunctionAddress[returnValue] : +# 1403| r1403_4(copy_constructor) = Call[returnValue] : func:r1403_3 +# 1403| mu1403_5(unknown) = ^CallSideEffect : ~m? +# 1403| mu1403_6(copy_constructor) = Store[#temp1403:13] : &:r1403_2, r1403_4 +# 1403| r1403_7(glval) = FieldAddress[y] : r1403_2 +# 1403| r1403_8(int) = Load[?] : &:r1403_7, ~m? +# 1403| mu1403_9(int) = Store[y] : &:r1403_1, r1403_8 +# 1404| v1404_1(void) = NoOp : +# 1393| v1393_4(void) = ReturnVoid : +# 1393| v1393_5(void) = AliasedUse : ~m? +# 1393| v1393_6(void) = ExitFunction : -# 1404| void temporary_point() -# 1404| Block 0 -# 1404| v1404_1(void) = EnterFunction : -# 1404| mu1404_2(unknown) = AliasedDefinition : -# 1404| mu1404_3(unknown) = InitializeNonLocal : -# 1405| r1405_1(glval) = VariableAddress[p] : -# 1405| r1405_2(glval) = FunctionAddress[returnValue] : -# 1405| r1405_3(Point) = Call[returnValue] : func:r1405_2 -# 1405| mu1405_4(unknown) = ^CallSideEffect : ~m? -# 1405| mu1405_5(Point) = Store[p] : &:r1405_1, r1405_3 -# 1406| r1406_1(glval) = VariableAddress[rp] : -# 1406| r1406_2(glval) = VariableAddress[#temp1406:23] : -# 1406| r1406_3(glval) = FunctionAddress[returnValue] : -# 1406| r1406_4(Point) = Call[returnValue] : func:r1406_3 -# 1406| mu1406_5(unknown) = ^CallSideEffect : ~m? -# 1406| mu1406_6(Point) = Store[#temp1406:23] : &:r1406_2, r1406_4 -# 1406| r1406_7(glval) = Convert : r1406_2 -# 1406| r1406_8(Point &) = CopyValue : r1406_7 -# 1406| mu1406_9(Point &) = Store[rp] : &:r1406_1, r1406_8 -# 1408| r1408_1(glval) = FunctionAddress[acceptRef] : -# 1408| r1408_2(glval) = VariableAddress[p] : -# 1408| r1408_3(glval) = Convert : r1408_2 -# 1408| r1408_4(Point &) = CopyValue : r1408_3 -# 1408| v1408_5(void) = Call[acceptRef] : func:r1408_1, 0:r1408_4 -# 1408| mu1408_6(unknown) = ^CallSideEffect : ~m? -# 1408| v1408_7(void) = ^BufferReadSideEffect[0] : &:r1408_4, ~m? -# 1409| r1409_1(glval) = FunctionAddress[acceptValue] : -# 1409| r1409_2(glval) = VariableAddress[p] : -# 1409| r1409_3(Point) = Load[p] : &:r1409_2, ~m? -# 1409| v1409_4(void) = Call[acceptValue] : func:r1409_1, 0:r1409_3 -# 1409| mu1409_5(unknown) = ^CallSideEffect : ~m? -# 1410| r1410_1(int) = Constant[0] : -# 1411| r1411_1(glval) = VariableAddress[y] : -# 1411| r1411_2(glval) = FunctionAddress[returnValue] : -# 1411| r1411_3(Point) = Call[returnValue] : func:r1411_2 -# 1411| mu1411_4(unknown) = ^CallSideEffect : ~m? -# 1411| r1411_5(glval) = VariableAddress[#temp1411:13] : -# 1411| mu1411_6(Point) = Store[#temp1411:13] : &:r1411_5, r1411_3 -# 1411| r1411_7(glval) = FieldAddress[y] : r1411_5 -# 1411| r1411_8(int) = Load[?] : &:r1411_7, ~m? -# 1411| mu1411_9(int) = Store[y] : &:r1411_1, r1411_8 -# 1413| r1413_1(glval) = FunctionAddress[defaultConstruct] : -# 1413| r1413_2(Point) = Call[defaultConstruct] : func:r1413_1 -# 1413| mu1413_3(unknown) = ^CallSideEffect : ~m? -# 1414| v1414_1(void) = NoOp : -# 1404| v1404_4(void) = ReturnVoid : -# 1404| v1404_5(void) = AliasedUse : ~m? -# 1404| v1404_6(void) = ExitFunction : +# 1406| void temporary_point() +# 1406| Block 0 +# 1406| v1406_1(void) = EnterFunction : +# 1406| mu1406_2(unknown) = AliasedDefinition : +# 1406| mu1406_3(unknown) = InitializeNonLocal : +# 1407| r1407_1(glval) = VariableAddress[p] : +# 1407| r1407_2(glval) = FunctionAddress[returnValue] : +# 1407| r1407_3(Point) = Call[returnValue] : func:r1407_2 +# 1407| mu1407_4(unknown) = ^CallSideEffect : ~m? +# 1407| mu1407_5(Point) = Store[p] : &:r1407_1, r1407_3 +# 1408| r1408_1(glval) = VariableAddress[rp] : +# 1408| r1408_2(glval) = VariableAddress[#temp1408:23] : +# 1408| r1408_3(glval) = FunctionAddress[returnValue] : +# 1408| r1408_4(Point) = Call[returnValue] : func:r1408_3 +# 1408| mu1408_5(unknown) = ^CallSideEffect : ~m? +# 1408| mu1408_6(Point) = Store[#temp1408:23] : &:r1408_2, r1408_4 +# 1408| r1408_7(glval) = Convert : r1408_2 +# 1408| r1408_8(Point &) = CopyValue : r1408_7 +# 1408| mu1408_9(Point &) = Store[rp] : &:r1408_1, r1408_8 +# 1410| r1410_1(glval) = FunctionAddress[acceptRef] : +# 1410| r1410_2(glval) = VariableAddress[p] : +# 1410| r1410_3(glval) = Convert : r1410_2 +# 1410| r1410_4(Point &) = CopyValue : r1410_3 +# 1410| v1410_5(void) = Call[acceptRef] : func:r1410_1, 0:r1410_4 +# 1410| mu1410_6(unknown) = ^CallSideEffect : ~m? +# 1410| v1410_7(void) = ^BufferReadSideEffect[0] : &:r1410_4, ~m? +# 1411| r1411_1(glval) = FunctionAddress[acceptValue] : +# 1411| r1411_2(glval) = VariableAddress[p] : +# 1411| r1411_3(Point) = Load[p] : &:r1411_2, ~m? +# 1411| v1411_4(void) = Call[acceptValue] : func:r1411_1, 0:r1411_3 +# 1411| mu1411_5(unknown) = ^CallSideEffect : ~m? +# 1412| r1412_1(int) = Constant[0] : +# 1413| r1413_1(glval) = VariableAddress[y] : +# 1413| r1413_2(glval) = FunctionAddress[returnValue] : +# 1413| r1413_3(Point) = Call[returnValue] : func:r1413_2 +# 1413| mu1413_4(unknown) = ^CallSideEffect : ~m? +# 1413| r1413_5(glval) = VariableAddress[#temp1413:13] : +# 1413| mu1413_6(Point) = Store[#temp1413:13] : &:r1413_5, r1413_3 +# 1413| r1413_7(glval) = FieldAddress[y] : r1413_5 +# 1413| r1413_8(int) = Load[?] : &:r1413_7, ~m? +# 1413| mu1413_9(int) = Store[y] : &:r1413_1, r1413_8 +# 1415| r1415_1(glval) = FunctionAddress[defaultConstruct] : +# 1415| r1415_2(Point) = Call[defaultConstruct] : func:r1415_1 +# 1415| mu1415_3(unknown) = ^CallSideEffect : ~m? +# 1416| v1416_1(void) = NoOp : +# 1406| v1406_4(void) = ReturnVoid : +# 1406| v1406_5(void) = AliasedUse : ~m? +# 1406| v1406_6(void) = ExitFunction : -# 1421| void temporary_unusual_fields() -# 1421| Block 0 -# 1421| v1421_1(void) = EnterFunction : -# 1421| mu1421_2(unknown) = AliasedDefinition : -# 1421| mu1421_3(unknown) = InitializeNonLocal : -# 1422| r1422_1(glval) = VariableAddress[rx] : -# 1422| r1422_2(glval) = FunctionAddress[returnValue] : -# 1422| r1422_3(UnusualFields) = Call[returnValue] : func:r1422_2 -# 1422| mu1422_4(unknown) = ^CallSideEffect : ~m? -# 1422| r1422_5(glval) = VariableAddress[#temp1422:21] : -# 1422| mu1422_6(UnusualFields) = Store[#temp1422:21] : &:r1422_5, r1422_3 -# 1422| r1422_7(glval) = FieldAddress[r] : r1422_5 -# 1422| r1422_8(int &) = Load[?] : &:r1422_7, ~m? -# 1422| r1422_9(glval) = CopyValue : r1422_8 -# 1422| r1422_10(glval) = Convert : r1422_9 -# 1422| r1422_11(int &) = CopyValue : r1422_10 -# 1422| mu1422_12(int &) = Store[rx] : &:r1422_1, r1422_11 -# 1423| r1423_1(glval) = VariableAddress[x] : -# 1423| r1423_2(glval) = FunctionAddress[returnValue] : -# 1423| r1423_3(UnusualFields) = Call[returnValue] : func:r1423_2 -# 1423| mu1423_4(unknown) = ^CallSideEffect : ~m? -# 1423| r1423_5(glval) = VariableAddress[#temp1423:13] : -# 1423| mu1423_6(UnusualFields) = Store[#temp1423:13] : &:r1423_5, r1423_3 -# 1423| r1423_7(glval) = FieldAddress[r] : r1423_5 -# 1423| r1423_8(int &) = Load[?] : &:r1423_7, ~m? -# 1423| r1423_9(int) = Load[?] : &:r1423_8, ~m? -# 1423| mu1423_10(int) = Store[x] : &:r1423_1, r1423_9 -# 1425| r1425_1(glval) = VariableAddress[rf] : +# 1423| void temporary_unusual_fields() +# 1423| Block 0 +# 1423| v1423_1(void) = EnterFunction : +# 1423| mu1423_2(unknown) = AliasedDefinition : +# 1423| mu1423_3(unknown) = InitializeNonLocal : +# 1424| r1424_1(glval) = VariableAddress[rx] : +# 1424| r1424_2(glval) = FunctionAddress[returnValue] : +# 1424| r1424_3(UnusualFields) = Call[returnValue] : func:r1424_2 +# 1424| mu1424_4(unknown) = ^CallSideEffect : ~m? +# 1424| r1424_5(glval) = VariableAddress[#temp1424:21] : +# 1424| mu1424_6(UnusualFields) = Store[#temp1424:21] : &:r1424_5, r1424_3 +# 1424| r1424_7(glval) = FieldAddress[r] : r1424_5 +# 1424| r1424_8(int &) = Load[?] : &:r1424_7, ~m? +# 1424| r1424_9(glval) = CopyValue : r1424_8 +# 1424| r1424_10(glval) = Convert : r1424_9 +# 1424| r1424_11(int &) = CopyValue : r1424_10 +# 1424| mu1424_12(int &) = Store[rx] : &:r1424_1, r1424_11 +# 1425| r1425_1(glval) = VariableAddress[x] : # 1425| r1425_2(glval) = FunctionAddress[returnValue] : # 1425| r1425_3(UnusualFields) = Call[returnValue] : func:r1425_2 # 1425| mu1425_4(unknown) = ^CallSideEffect : ~m? -# 1425| r1425_5(glval) = VariableAddress[#temp1425:23] : -# 1425| mu1425_6(UnusualFields) = Store[#temp1425:23] : &:r1425_5, r1425_3 -# 1425| r1425_7(glval) = FieldAddress[a] : r1425_5 -# 1425| r1425_8(float *) = Convert : r1425_7 -# 1425| r1425_9(int) = Constant[3] : -# 1425| r1425_10(glval) = PointerAdd[4] : r1425_8, r1425_9 -# 1425| r1425_11(glval) = Convert : r1425_10 -# 1425| r1425_12(float &) = CopyValue : r1425_11 -# 1425| mu1425_13(float &) = Store[rf] : &:r1425_1, r1425_12 -# 1426| r1426_1(glval) = VariableAddress[f] : -# 1426| r1426_2(glval) = FunctionAddress[returnValue] : -# 1426| r1426_3(UnusualFields) = Call[returnValue] : func:r1426_2 -# 1426| mu1426_4(unknown) = ^CallSideEffect : ~m? -# 1426| r1426_5(glval) = VariableAddress[#temp1426:15] : -# 1426| mu1426_6(UnusualFields) = Store[#temp1426:15] : &:r1426_5, r1426_3 -# 1426| r1426_7(glval) = FieldAddress[a] : r1426_5 -# 1426| r1426_8(float *) = Convert : r1426_7 -# 1426| r1426_9(int) = Constant[5] : -# 1426| r1426_10(glval) = PointerAdd[4] : r1426_8, r1426_9 -# 1426| r1426_11(float) = Load[?] : &:r1426_10, ~m? -# 1426| mu1426_12(float) = Store[f] : &:r1426_1, r1426_11 -# 1427| v1427_1(void) = NoOp : -# 1421| v1421_4(void) = ReturnVoid : -# 1421| v1421_5(void) = AliasedUse : ~m? -# 1421| v1421_6(void) = ExitFunction : +# 1425| r1425_5(glval) = VariableAddress[#temp1425:13] : +# 1425| mu1425_6(UnusualFields) = Store[#temp1425:13] : &:r1425_5, r1425_3 +# 1425| r1425_7(glval) = FieldAddress[r] : r1425_5 +# 1425| r1425_8(int &) = Load[?] : &:r1425_7, ~m? +# 1425| r1425_9(int) = Load[?] : &:r1425_8, ~m? +# 1425| mu1425_10(int) = Store[x] : &:r1425_1, r1425_9 +# 1427| r1427_1(glval) = VariableAddress[rf] : +# 1427| r1427_2(glval) = FunctionAddress[returnValue] : +# 1427| r1427_3(UnusualFields) = Call[returnValue] : func:r1427_2 +# 1427| mu1427_4(unknown) = ^CallSideEffect : ~m? +# 1427| r1427_5(glval) = VariableAddress[#temp1427:23] : +# 1427| mu1427_6(UnusualFields) = Store[#temp1427:23] : &:r1427_5, r1427_3 +# 1427| r1427_7(glval) = FieldAddress[a] : r1427_5 +# 1427| r1427_8(float *) = Convert : r1427_7 +# 1427| r1427_9(int) = Constant[3] : +# 1427| r1427_10(glval) = PointerAdd[4] : r1427_8, r1427_9 +# 1427| r1427_11(glval) = Convert : r1427_10 +# 1427| r1427_12(float &) = CopyValue : r1427_11 +# 1427| mu1427_13(float &) = Store[rf] : &:r1427_1, r1427_12 +# 1428| r1428_1(glval) = VariableAddress[f] : +# 1428| r1428_2(glval) = FunctionAddress[returnValue] : +# 1428| r1428_3(UnusualFields) = Call[returnValue] : func:r1428_2 +# 1428| mu1428_4(unknown) = ^CallSideEffect : ~m? +# 1428| r1428_5(glval) = VariableAddress[#temp1428:15] : +# 1428| mu1428_6(UnusualFields) = Store[#temp1428:15] : &:r1428_5, r1428_3 +# 1428| r1428_7(glval) = FieldAddress[a] : r1428_5 +# 1428| r1428_8(float *) = Convert : r1428_7 +# 1428| r1428_9(int) = Constant[5] : +# 1428| r1428_10(glval) = PointerAdd[4] : r1428_8, r1428_9 +# 1428| r1428_11(float) = Load[?] : &:r1428_10, ~m? +# 1428| mu1428_12(float) = Store[f] : &:r1428_1, r1428_11 +# 1429| v1429_1(void) = NoOp : +# 1423| v1423_4(void) = ReturnVoid : +# 1423| v1423_5(void) = AliasedUse : ~m? +# 1423| v1423_6(void) = ExitFunction : -# 1443| void temporary_hierarchy() -# 1443| Block 0 -# 1443| v1443_1(void) = EnterFunction : -# 1443| mu1443_2(unknown) = AliasedDefinition : -# 1443| mu1443_3(unknown) = InitializeNonLocal : -# 1444| r1444_1(glval) = VariableAddress[b] : +# 1445| void temporary_hierarchy() +# 1445| Block 0 +# 1445| v1445_1(void) = EnterFunction : +# 1445| mu1445_2(unknown) = AliasedDefinition : +# 1445| mu1445_3(unknown) = InitializeNonLocal : +# 1446| r1446_1(glval) = VariableAddress[b] : #-----| r0_1(glval) = VariableAddress[#temp0:0] : -# 1444| r1444_2(glval) = FunctionAddress[returnValue] : -# 1444| r1444_3(POD_Middle) = Call[returnValue] : func:r1444_2 -# 1444| mu1444_4(unknown) = ^CallSideEffect : ~m? -# 1444| mu1444_5(POD_Middle) = Store[#temp0:0] : &:r0_1, r1444_3 +# 1446| r1446_2(glval) = FunctionAddress[returnValue] : +# 1446| r1446_3(POD_Middle) = Call[returnValue] : func:r1446_2 +# 1446| mu1446_4(unknown) = ^CallSideEffect : ~m? +# 1446| mu1446_5(POD_Middle) = Store[#temp0:0] : &:r0_1, r1446_3 #-----| r0_2(glval) = ConvertToNonVirtualBase[POD_Middle : POD_Base] : r0_1 #-----| r0_3(POD_Base) = Load[?] : &:r0_2, ~m? -#-----| mu0_4(POD_Base) = Store[b] : &:r1444_1, r0_3 -# 1445| r1445_1(glval) = VariableAddress[#temp1445:9] : -# 1445| r1445_2(glval) = FunctionAddress[returnValue] : -# 1445| r1445_3(POD_Derived) = Call[returnValue] : func:r1445_2 -# 1445| mu1445_4(unknown) = ^CallSideEffect : ~m? -# 1445| mu1445_5(POD_Derived) = Store[#temp1445:9] : &:r1445_1, r1445_3 -# 1445| r1445_6(glval) = ConvertToNonVirtualBase[POD_Derived : POD_Middle] : r1445_1 -# 1445| r1445_7(glval) = ConvertToNonVirtualBase[POD_Middle : POD_Base] : r1445_6 -# 1445| r1445_8(POD_Base) = Load[?] : &:r1445_7, ~m? -# 1445| r1445_9(glval) = VariableAddress[b] : -# 1445| mu1445_10(POD_Base) = Store[b] : &:r1445_9, r1445_8 -# 1446| r1446_1(glval) = VariableAddress[x] : -#-----| r0_5(glval) = VariableAddress[#temp0:0] : -# 1446| r1446_2(glval) = FunctionAddress[returnValue] : -# 1446| r1446_3(POD_Derived) = Call[returnValue] : func:r1446_2 -# 1446| mu1446_4(unknown) = ^CallSideEffect : ~m? -# 1446| mu1446_5(POD_Derived) = Store[#temp0:0] : &:r0_5, r1446_3 -#-----| r0_6(glval) = ConvertToNonVirtualBase[POD_Derived : POD_Middle] : r0_5 -#-----| r0_7(glval) = ConvertToNonVirtualBase[POD_Middle : POD_Base] : r0_6 -# 1446| r1446_6(glval) = FieldAddress[x] : r0_7 -# 1446| r1446_7(int) = Load[?] : &:r1446_6, ~m? -# 1446| mu1446_8(int) = Store[x] : &:r1446_1, r1446_7 -# 1447| r1447_1(glval) = VariableAddress[f] : -#-----| r0_8(glval) = VariableAddress[#temp0:0] : +#-----| mu0_4(POD_Base) = Store[b] : &:r1446_1, r0_3 +# 1447| r1447_1(glval) = VariableAddress[#temp1447:9] : # 1447| r1447_2(glval) = FunctionAddress[returnValue] : # 1447| r1447_3(POD_Derived) = Call[returnValue] : func:r1447_2 # 1447| mu1447_4(unknown) = ^CallSideEffect : ~m? -# 1447| mu1447_5(POD_Derived) = Store[#temp0:0] : &:r0_8, r1447_3 +# 1447| mu1447_5(POD_Derived) = Store[#temp1447:9] : &:r1447_1, r1447_3 +# 1447| r1447_6(glval) = ConvertToNonVirtualBase[POD_Derived : POD_Middle] : r1447_1 +# 1447| r1447_7(glval) = ConvertToNonVirtualBase[POD_Middle : POD_Base] : r1447_6 +# 1447| r1447_8(POD_Base) = Load[?] : &:r1447_7, ~m? +# 1447| r1447_9(glval) = VariableAddress[b] : +# 1447| mu1447_10(POD_Base) = Store[b] : &:r1447_9, r1447_8 +# 1448| r1448_1(glval) = VariableAddress[x] : +#-----| r0_5(glval) = VariableAddress[#temp0:0] : +# 1448| r1448_2(glval) = FunctionAddress[returnValue] : +# 1448| r1448_3(POD_Derived) = Call[returnValue] : func:r1448_2 +# 1448| mu1448_4(unknown) = ^CallSideEffect : ~m? +# 1448| mu1448_5(POD_Derived) = Store[#temp0:0] : &:r0_5, r1448_3 +#-----| r0_6(glval) = ConvertToNonVirtualBase[POD_Derived : POD_Middle] : r0_5 +#-----| r0_7(glval) = ConvertToNonVirtualBase[POD_Middle : POD_Base] : r0_6 +# 1448| r1448_6(glval) = FieldAddress[x] : r0_7 +# 1448| r1448_7(int) = Load[?] : &:r1448_6, ~m? +# 1448| mu1448_8(int) = Store[x] : &:r1448_1, r1448_7 +# 1449| r1449_1(glval) = VariableAddress[f] : +#-----| r0_8(glval) = VariableAddress[#temp0:0] : +# 1449| r1449_2(glval) = FunctionAddress[returnValue] : +# 1449| r1449_3(POD_Derived) = Call[returnValue] : func:r1449_2 +# 1449| mu1449_4(unknown) = ^CallSideEffect : ~m? +# 1449| mu1449_5(POD_Derived) = Store[#temp0:0] : &:r0_8, r1449_3 #-----| r0_9(glval) = ConvertToNonVirtualBase[POD_Derived : POD_Middle] : r0_8 #-----| r0_10(glval) = ConvertToNonVirtualBase[POD_Middle : POD_Base] : r0_9 #-----| r0_11(glval) = Convert : r0_10 -# 1447| r1447_6(glval) = FunctionAddress[f] : -# 1447| r1447_7(float) = Call[f] : func:r1447_6, this:r0_11 -# 1447| mu1447_8(unknown) = ^CallSideEffect : ~m? +# 1449| r1449_6(glval) = FunctionAddress[f] : +# 1449| r1449_7(float) = Call[f] : func:r1449_6, this:r0_11 +# 1449| mu1449_8(unknown) = ^CallSideEffect : ~m? #-----| v0_12(void) = ^IndirectReadSideEffect[-1] : &:r0_11, ~m? -# 1447| mu1447_9(float) = Store[f] : &:r1447_1, r1447_7 -# 1448| v1448_1(void) = NoOp : -# 1443| v1443_4(void) = ReturnVoid : -# 1443| v1443_5(void) = AliasedUse : ~m? -# 1443| v1443_6(void) = ExitFunction : +# 1449| mu1449_9(float) = Store[f] : &:r1449_1, r1449_7 +# 1450| v1450_1(void) = NoOp : +# 1445| v1445_4(void) = ReturnVoid : +# 1445| v1445_5(void) = AliasedUse : ~m? +# 1445| v1445_6(void) = ExitFunction : -# 1451| void Inheritance_Test_B::~Inheritance_Test_B() -# 1451| Block 0 -# 1451| v1451_1(void) = EnterFunction : -# 1451| mu1451_2(unknown) = AliasedDefinition : -# 1451| mu1451_3(unknown) = InitializeNonLocal : -# 1451| r1451_4(glval) = VariableAddress[#this] : -# 1451| mu1451_5(glval) = InitializeParameter[#this] : &:r1451_4 -# 1451| r1451_6(glval) = Load[#this] : &:r1451_4, ~m? -# 1451| mu1451_7(Inheritance_Test_B) = InitializeIndirection[#this] : &:r1451_6 -# 1451| v1451_8(void) = NoOp : -# 1451| v1451_9(void) = ReturnIndirection[#this] : &:r1451_6, ~m? -# 1451| v1451_10(void) = ReturnVoid : -# 1451| v1451_11(void) = AliasedUse : ~m? -# 1451| v1451_12(void) = ExitFunction : +# 1453| void Inheritance_Test_B::~Inheritance_Test_B() +# 1453| Block 0 +# 1453| v1453_1(void) = EnterFunction : +# 1453| mu1453_2(unknown) = AliasedDefinition : +# 1453| mu1453_3(unknown) = InitializeNonLocal : +# 1453| r1453_4(glval) = VariableAddress[#this] : +# 1453| mu1453_5(glval) = InitializeParameter[#this] : &:r1453_4 +# 1453| r1453_6(glval) = Load[#this] : &:r1453_4, ~m? +# 1453| mu1453_7(Inheritance_Test_B) = InitializeIndirection[#this] : &:r1453_6 +# 1453| v1453_8(void) = NoOp : +# 1453| v1453_9(void) = ReturnIndirection[#this] : &:r1453_6, ~m? +# 1453| v1453_10(void) = ReturnVoid : +# 1453| v1453_11(void) = AliasedUse : ~m? +# 1453| v1453_12(void) = ExitFunction : -# 1457| void Inheritance_Test_A::Inheritance_Test_A() -# 1457| Block 0 -# 1457| v1457_1(void) = EnterFunction : -# 1457| mu1457_2(unknown) = AliasedDefinition : -# 1457| mu1457_3(unknown) = InitializeNonLocal : -# 1457| r1457_4(glval) = VariableAddress[#this] : -# 1457| mu1457_5(glval) = InitializeParameter[#this] : &:r1457_4 -# 1457| r1457_6(glval) = Load[#this] : &:r1457_4, ~m? -# 1457| mu1457_7(Inheritance_Test_A) = InitializeIndirection[#this] : &:r1457_6 -# 1457| r1457_8(glval) = FieldAddress[x] : mu1457_5 -# 1457| r1457_9(int) = Constant[42] : -# 1457| mu1457_10(int) = Store[?] : &:r1457_8, r1457_9 -# 1458| r1458_1(int) = Constant[3] : -# 1458| r1458_2(glval) = VariableAddress[#this] : -# 1458| r1458_3(Inheritance_Test_A *) = Load[#this] : &:r1458_2, ~m? -# 1458| r1458_4(glval) = FieldAddress[y] : r1458_3 -# 1458| mu1458_5(int) = Store[?] : &:r1458_4, r1458_1 -# 1459| v1459_1(void) = NoOp : -# 1457| v1457_11(void) = ReturnIndirection[#this] : &:r1457_6, ~m? -# 1457| v1457_12(void) = ReturnVoid : -# 1457| v1457_13(void) = AliasedUse : ~m? -# 1457| v1457_14(void) = ExitFunction : +# 1459| void Inheritance_Test_A::Inheritance_Test_A() +# 1459| Block 0 +# 1459| v1459_1(void) = EnterFunction : +# 1459| mu1459_2(unknown) = AliasedDefinition : +# 1459| mu1459_3(unknown) = InitializeNonLocal : +# 1459| r1459_4(glval) = VariableAddress[#this] : +# 1459| mu1459_5(glval) = InitializeParameter[#this] : &:r1459_4 +# 1459| r1459_6(glval) = Load[#this] : &:r1459_4, ~m? +# 1459| mu1459_7(Inheritance_Test_A) = InitializeIndirection[#this] : &:r1459_6 +# 1459| r1459_8(glval) = FieldAddress[x] : mu1459_5 +# 1459| r1459_9(int) = Constant[42] : +# 1459| mu1459_10(int) = Store[?] : &:r1459_8, r1459_9 +# 1460| r1460_1(int) = Constant[3] : +# 1460| r1460_2(glval) = VariableAddress[#this] : +# 1460| r1460_3(Inheritance_Test_A *) = Load[#this] : &:r1460_2, ~m? +# 1460| r1460_4(glval) = FieldAddress[y] : r1460_3 +# 1460| mu1460_5(int) = Store[?] : &:r1460_4, r1460_1 +# 1461| v1461_1(void) = NoOp : +# 1459| v1459_11(void) = ReturnIndirection[#this] : &:r1459_6, ~m? +# 1459| v1459_12(void) = ReturnVoid : +# 1459| v1459_13(void) = AliasedUse : ~m? +# 1459| v1459_14(void) = ExitFunction : -# 1462| void array_structured_binding() -# 1462| Block 0 -# 1462| v1462_1(void) = EnterFunction : -# 1462| mu1462_2(unknown) = AliasedDefinition : -# 1462| mu1462_3(unknown) = InitializeNonLocal : -# 1463| r1463_1(glval) = VariableAddress[xs] : -# 1463| mu1463_2(int[2]) = Uninitialized[xs] : &:r1463_1 -# 1463| r1463_3(int) = Constant[0] : -# 1463| r1463_4(glval) = PointerAdd[4] : r1463_1, r1463_3 -# 1463| r1463_5(int) = Constant[1] : -# 1463| mu1463_6(int) = Store[?] : &:r1463_4, r1463_5 -# 1463| r1463_7(int) = Constant[1] : -# 1463| r1463_8(glval) = PointerAdd[4] : r1463_1, r1463_7 -# 1463| r1463_9(int) = Constant[2] : -# 1463| mu1463_10(int) = Store[?] : &:r1463_8, r1463_9 -# 1466| r1466_1(glval) = VariableAddress[(unnamed local variable)] : -# 1466| r1466_2(glval) = VariableAddress[xs] : -# 1466| r1466_3(int(&)[2]) = CopyValue : r1466_2 -# 1466| mu1466_4(int(&)[2]) = Store[(unnamed local variable)] : &:r1466_1, r1466_3 -# 1466| r1466_5(glval) = VariableAddress[x0] : +# 1464| void array_structured_binding() +# 1464| Block 0 +# 1464| v1464_1(void) = EnterFunction : +# 1464| mu1464_2(unknown) = AliasedDefinition : +# 1464| mu1464_3(unknown) = InitializeNonLocal : +# 1465| r1465_1(glval) = VariableAddress[xs] : +# 1465| mu1465_2(int[2]) = Uninitialized[xs] : &:r1465_1 +# 1465| r1465_3(int) = Constant[0] : +# 1465| r1465_4(glval) = PointerAdd[4] : r1465_1, r1465_3 +# 1465| r1465_5(int) = Constant[1] : +# 1465| mu1465_6(int) = Store[?] : &:r1465_4, r1465_5 +# 1465| r1465_7(int) = Constant[1] : +# 1465| r1465_8(glval) = PointerAdd[4] : r1465_1, r1465_7 +# 1465| r1465_9(int) = Constant[2] : +# 1465| mu1465_10(int) = Store[?] : &:r1465_8, r1465_9 +# 1468| r1468_1(glval) = VariableAddress[(unnamed local variable)] : +# 1468| r1468_2(glval) = VariableAddress[xs] : +# 1468| r1468_3(int(&)[2]) = CopyValue : r1468_2 +# 1468| mu1468_4(int(&)[2]) = Store[(unnamed local variable)] : &:r1468_1, r1468_3 +# 1468| r1468_5(glval) = VariableAddress[x0] : #-----| r0_1(glval) = VariableAddress[(unnamed local variable)] : #-----| r0_2(int(&)[2]) = Load[(unnamed local variable)] : &:r0_1, ~m? #-----| r0_3(glval) = CopyValue : r0_2 #-----| r0_4(int *) = Convert : r0_3 #-----| r0_5(unsigned long) = Constant[0] : #-----| r0_6(glval) = PointerAdd[4] : r0_4, r0_5 -#-----| mu0_7(int &) = Store[x0] : &:r1466_5, r0_6 -# 1466| r1466_6(glval) = VariableAddress[x1] : +#-----| mu0_7(int &) = Store[x0] : &:r1468_5, r0_6 +# 1468| r1468_6(glval) = VariableAddress[x1] : #-----| r0_8(glval) = VariableAddress[(unnamed local variable)] : #-----| r0_9(int(&)[2]) = Load[(unnamed local variable)] : &:r0_8, ~m? #-----| r0_10(glval) = CopyValue : r0_9 #-----| r0_11(int *) = Convert : r0_10 #-----| r0_12(unsigned long) = Constant[1] : #-----| r0_13(glval) = PointerAdd[4] : r0_11, r0_12 -#-----| mu0_14(int &) = Store[x1] : &:r1466_6, r0_13 -# 1467| r1467_1(int) = Constant[3] : -# 1467| r1467_2(glval) = VariableAddress[x1] : -# 1467| r1467_3(int &) = Load[x1] : &:r1467_2, ~m? -# 1467| mu1467_4(int) = Store[?] : &:r1467_3, r1467_1 -# 1468| r1468_1(glval) = VariableAddress[rx1] : -# 1468| r1468_2(glval) = VariableAddress[x1] : -# 1468| r1468_3(int &) = Load[x1] : &:r1468_2, ~m? -# 1468| r1468_4(int &) = CopyValue : r1468_3 -# 1468| mu1468_5(int &) = Store[rx1] : &:r1468_1, r1468_4 -# 1469| r1469_1(glval) = VariableAddress[x] : +#-----| mu0_14(int &) = Store[x1] : &:r1468_6, r0_13 +# 1469| r1469_1(int) = Constant[3] : # 1469| r1469_2(glval) = VariableAddress[x1] : # 1469| r1469_3(int &) = Load[x1] : &:r1469_2, ~m? -# 1469| r1469_4(int) = Load[?] : &:r1469_3, ~m? -# 1469| mu1469_5(int) = Store[x] : &:r1469_1, r1469_4 -# 1473| r1473_1(glval) = VariableAddress[unnamed_local_variable] : -# 1473| r1473_2(glval) = VariableAddress[xs] : -# 1473| r1473_3(int(&)[2]) = CopyValue : r1473_2 -# 1473| mu1473_4(int(&)[2]) = Store[unnamed_local_variable] : &:r1473_1, r1473_3 -# 1474| r1474_1(glval) = VariableAddress[x0] : -# 1474| r1474_2(glval) = VariableAddress[unnamed_local_variable] : -# 1474| r1474_3(int(&)[2]) = Load[unnamed_local_variable] : &:r1474_2, ~m? -# 1474| r1474_4(glval) = CopyValue : r1474_3 -# 1474| r1474_5(int *) = Convert : r1474_4 -# 1474| r1474_6(int) = Constant[0] : -# 1474| r1474_7(glval) = PointerAdd[4] : r1474_5, r1474_6 -# 1474| r1474_8(int &) = CopyValue : r1474_7 -# 1474| mu1474_9(int &) = Store[x0] : &:r1474_1, r1474_8 -# 1475| r1475_1(glval) = VariableAddress[x1] : -# 1475| r1475_2(glval) = VariableAddress[unnamed_local_variable] : -# 1475| r1475_3(int(&)[2]) = Load[unnamed_local_variable] : &:r1475_2, ~m? -# 1475| r1475_4(glval) = CopyValue : r1475_3 -# 1475| r1475_5(int *) = Convert : r1475_4 -# 1475| r1475_6(int) = Constant[1] : -# 1475| r1475_7(glval) = PointerAdd[4] : r1475_5, r1475_6 -# 1475| r1475_8(int &) = CopyValue : r1475_7 -# 1475| mu1475_9(int &) = Store[x1] : &:r1475_1, r1475_8 -# 1476| r1476_1(int) = Constant[3] : -# 1476| r1476_2(glval) = VariableAddress[x1] : -# 1476| r1476_3(int &) = Load[x1] : &:r1476_2, ~m? -# 1476| r1476_4(glval) = CopyValue : r1476_3 -# 1476| mu1476_5(int) = Store[?] : &:r1476_4, r1476_1 -# 1477| r1477_1(glval) = VariableAddress[rx1] : -# 1477| r1477_2(glval) = VariableAddress[x1] : -# 1477| r1477_3(int &) = Load[x1] : &:r1477_2, ~m? -# 1477| r1477_4(glval) = CopyValue : r1477_3 -# 1477| r1477_5(int &) = CopyValue : r1477_4 -# 1477| mu1477_6(int &) = Store[rx1] : &:r1477_1, r1477_5 -# 1478| r1478_1(glval) = VariableAddress[x] : +# 1469| mu1469_4(int) = Store[?] : &:r1469_3, r1469_1 +# 1470| r1470_1(glval) = VariableAddress[rx1] : +# 1470| r1470_2(glval) = VariableAddress[x1] : +# 1470| r1470_3(int &) = Load[x1] : &:r1470_2, ~m? +# 1470| r1470_4(int &) = CopyValue : r1470_3 +# 1470| mu1470_5(int &) = Store[rx1] : &:r1470_1, r1470_4 +# 1471| r1471_1(glval) = VariableAddress[x] : +# 1471| r1471_2(glval) = VariableAddress[x1] : +# 1471| r1471_3(int &) = Load[x1] : &:r1471_2, ~m? +# 1471| r1471_4(int) = Load[?] : &:r1471_3, ~m? +# 1471| mu1471_5(int) = Store[x] : &:r1471_1, r1471_4 +# 1475| r1475_1(glval) = VariableAddress[unnamed_local_variable] : +# 1475| r1475_2(glval) = VariableAddress[xs] : +# 1475| r1475_3(int(&)[2]) = CopyValue : r1475_2 +# 1475| mu1475_4(int(&)[2]) = Store[unnamed_local_variable] : &:r1475_1, r1475_3 +# 1476| r1476_1(glval) = VariableAddress[x0] : +# 1476| r1476_2(glval) = VariableAddress[unnamed_local_variable] : +# 1476| r1476_3(int(&)[2]) = Load[unnamed_local_variable] : &:r1476_2, ~m? +# 1476| r1476_4(glval) = CopyValue : r1476_3 +# 1476| r1476_5(int *) = Convert : r1476_4 +# 1476| r1476_6(int) = Constant[0] : +# 1476| r1476_7(glval) = PointerAdd[4] : r1476_5, r1476_6 +# 1476| r1476_8(int &) = CopyValue : r1476_7 +# 1476| mu1476_9(int &) = Store[x0] : &:r1476_1, r1476_8 +# 1477| r1477_1(glval) = VariableAddress[x1] : +# 1477| r1477_2(glval) = VariableAddress[unnamed_local_variable] : +# 1477| r1477_3(int(&)[2]) = Load[unnamed_local_variable] : &:r1477_2, ~m? +# 1477| r1477_4(glval) = CopyValue : r1477_3 +# 1477| r1477_5(int *) = Convert : r1477_4 +# 1477| r1477_6(int) = Constant[1] : +# 1477| r1477_7(glval) = PointerAdd[4] : r1477_5, r1477_6 +# 1477| r1477_8(int &) = CopyValue : r1477_7 +# 1477| mu1477_9(int &) = Store[x1] : &:r1477_1, r1477_8 +# 1478| r1478_1(int) = Constant[3] : # 1478| r1478_2(glval) = VariableAddress[x1] : # 1478| r1478_3(int &) = Load[x1] : &:r1478_2, ~m? -# 1478| r1478_4(int) = Load[?] : &:r1478_3, ~m? -# 1478| mu1478_5(int) = Store[x] : &:r1478_1, r1478_4 -# 1480| v1480_1(void) = NoOp : -# 1462| v1462_4(void) = ReturnVoid : -# 1462| v1462_5(void) = AliasedUse : ~m? -# 1462| v1462_6(void) = ExitFunction : +# 1478| r1478_4(glval) = CopyValue : r1478_3 +# 1478| mu1478_5(int) = Store[?] : &:r1478_4, r1478_1 +# 1479| r1479_1(glval) = VariableAddress[rx1] : +# 1479| r1479_2(glval) = VariableAddress[x1] : +# 1479| r1479_3(int &) = Load[x1] : &:r1479_2, ~m? +# 1479| r1479_4(glval) = CopyValue : r1479_3 +# 1479| r1479_5(int &) = CopyValue : r1479_4 +# 1479| mu1479_6(int &) = Store[rx1] : &:r1479_1, r1479_5 +# 1480| r1480_1(glval) = VariableAddress[x] : +# 1480| r1480_2(glval) = VariableAddress[x1] : +# 1480| r1480_3(int &) = Load[x1] : &:r1480_2, ~m? +# 1480| r1480_4(int) = Load[?] : &:r1480_3, ~m? +# 1480| mu1480_5(int) = Store[x] : &:r1480_1, r1480_4 +# 1482| v1482_1(void) = NoOp : +# 1464| v1464_4(void) = ReturnVoid : +# 1464| v1464_5(void) = AliasedUse : ~m? +# 1464| v1464_6(void) = ExitFunction : -# 1482| void StructuredBindingDataMemberMemberStruct::StructuredBindingDataMemberMemberStruct() -# 1482| Block 0 -# 1482| v1482_1(void) = EnterFunction : -# 1482| mu1482_2(unknown) = AliasedDefinition : -# 1482| mu1482_3(unknown) = InitializeNonLocal : -# 1482| r1482_4(glval) = VariableAddress[#this] : -# 1482| mu1482_5(glval) = InitializeParameter[#this] : &:r1482_4 -# 1482| r1482_6(glval) = Load[#this] : &:r1482_4, ~m? -# 1482| mu1482_7(StructuredBindingDataMemberMemberStruct) = InitializeIndirection[#this] : &:r1482_6 -# 1482| v1482_8(void) = NoOp : -# 1482| v1482_9(void) = ReturnIndirection[#this] : &:r1482_6, ~m? -# 1482| v1482_10(void) = ReturnVoid : -# 1482| v1482_11(void) = AliasedUse : ~m? -# 1482| v1482_12(void) = ExitFunction : +# 1484| void StructuredBindingDataMemberMemberStruct::StructuredBindingDataMemberMemberStruct() +# 1484| Block 0 +# 1484| v1484_1(void) = EnterFunction : +# 1484| mu1484_2(unknown) = AliasedDefinition : +# 1484| mu1484_3(unknown) = InitializeNonLocal : +# 1484| r1484_4(glval) = VariableAddress[#this] : +# 1484| mu1484_5(glval) = InitializeParameter[#this] : &:r1484_4 +# 1484| r1484_6(glval) = Load[#this] : &:r1484_4, ~m? +# 1484| mu1484_7(StructuredBindingDataMemberMemberStruct) = InitializeIndirection[#this] : &:r1484_6 +# 1484| v1484_8(void) = NoOp : +# 1484| v1484_9(void) = ReturnIndirection[#this] : &:r1484_6, ~m? +# 1484| v1484_10(void) = ReturnVoid : +# 1484| v1484_11(void) = AliasedUse : ~m? +# 1484| v1484_12(void) = ExitFunction : -# 1486| void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct() -# 1486| Block 0 -# 1486| v1486_1(void) = EnterFunction : -# 1486| mu1486_2(unknown) = AliasedDefinition : -# 1486| mu1486_3(unknown) = InitializeNonLocal : -# 1486| r1486_4(glval) = VariableAddress[#this] : -# 1486| mu1486_5(glval) = InitializeParameter[#this] : &:r1486_4 -# 1486| r1486_6(glval) = Load[#this] : &:r1486_4, ~m? -# 1486| mu1486_7(StructuredBindingDataMemberStruct) = InitializeIndirection[#this] : &:r1486_6 +# 1488| void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct() +# 1488| Block 0 +# 1488| v1488_1(void) = EnterFunction : +# 1488| mu1488_2(unknown) = AliasedDefinition : +# 1488| mu1488_3(unknown) = InitializeNonLocal : +# 1488| r1488_4(glval) = VariableAddress[#this] : +# 1488| mu1488_5(glval) = InitializeParameter[#this] : &:r1488_4 +# 1488| r1488_6(glval) = Load[#this] : &:r1488_4, ~m? +# 1488| mu1488_7(StructuredBindingDataMemberStruct) = InitializeIndirection[#this] : &:r1488_6 #-----| Goto -> Block 2 -# 1486| Block 1 -# 1486| r1486_8(glval) = FieldAddress[m] : mu1486_5 -# 1486| r1486_9(glval) = FunctionAddress[StructuredBindingDataMemberMemberStruct] : -# 1486| v1486_10(void) = Call[StructuredBindingDataMemberMemberStruct] : func:r1486_9, this:r1486_8 -# 1486| mu1486_11(unknown) = ^CallSideEffect : ~m? -# 1486| mu1486_12(StructuredBindingDataMemberMemberStruct) = ^IndirectMayWriteSideEffect[-1] : &:r1486_8 +# 1488| Block 1 +# 1488| r1488_8(glval) = FieldAddress[m] : mu1488_5 +# 1488| r1488_9(glval) = FunctionAddress[StructuredBindingDataMemberMemberStruct] : +# 1488| v1488_10(void) = Call[StructuredBindingDataMemberMemberStruct] : func:r1488_9, this:r1488_8 +# 1488| mu1488_11(unknown) = ^CallSideEffect : ~m? +# 1488| mu1488_12(StructuredBindingDataMemberMemberStruct) = ^IndirectMayWriteSideEffect[-1] : &:r1488_8 #-----| Goto -> Block 2 -# 1486| Block 2 -# 1486| v1486_13(void) = NoOp : -# 1486| v1486_14(void) = ReturnIndirection[#this] : &:r1486_6, ~m? -# 1486| v1486_15(void) = ReturnVoid : -# 1486| v1486_16(void) = AliasedUse : ~m? -# 1486| v1486_17(void) = ExitFunction : +# 1488| Block 2 +# 1488| v1488_13(void) = NoOp : +# 1488| v1488_14(void) = ReturnIndirection[#this] : &:r1488_6, ~m? +# 1488| v1488_15(void) = ReturnVoid : +# 1488| v1488_16(void) = AliasedUse : ~m? +# 1488| v1488_17(void) = ExitFunction : -# 1486| void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct(StructuredBindingDataMemberStruct const&) -# 1486| Block 0 -# 1486| v1486_1(void) = EnterFunction : -# 1486| mu1486_2(unknown) = AliasedDefinition : -# 1486| mu1486_3(unknown) = InitializeNonLocal : -# 1486| r1486_4(glval) = VariableAddress[#this] : -# 1486| mu1486_5(glval) = InitializeParameter[#this] : &:r1486_4 -# 1486| r1486_6(glval) = Load[#this] : &:r1486_4, ~m? -# 1486| mu1486_7(StructuredBindingDataMemberStruct) = InitializeIndirection[#this] : &:r1486_6 +# 1488| void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct(StructuredBindingDataMemberStruct const&) +# 1488| Block 0 +# 1488| v1488_1(void) = EnterFunction : +# 1488| mu1488_2(unknown) = AliasedDefinition : +# 1488| mu1488_3(unknown) = InitializeNonLocal : +# 1488| r1488_4(glval) = VariableAddress[#this] : +# 1488| mu1488_5(glval) = InitializeParameter[#this] : &:r1488_4 +# 1488| r1488_6(glval) = Load[#this] : &:r1488_4, ~m? +# 1488| mu1488_7(StructuredBindingDataMemberStruct) = InitializeIndirection[#this] : &:r1488_6 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| mu0_2(StructuredBindingDataMemberStruct &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r0_1, ~m? #-----| mu0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 1486| r1486_8(glval) = FieldAddress[i] : mu1486_5 -# 1486| r1486_9(glval) = VariableAddress[(unnamed parameter 0)] : -# 1486| r1486_10(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1486_9, ~m? -# 1486| r1486_11(glval) = CopyValue : r1486_10 -# 1486| r1486_12(glval) = FieldAddress[i] : r1486_11 -# 1486| r1486_13(int) = Load[?] : &:r1486_12, ~m? -# 1486| mu1486_14(int) = Store[?] : &:r1486_8, r1486_13 -# 1486| r1486_15(glval) = FieldAddress[d] : mu1486_5 -# 1486| r1486_16(glval) = VariableAddress[(unnamed parameter 0)] : -# 1486| r1486_17(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1486_16, ~m? -# 1486| r1486_18(glval) = CopyValue : r1486_17 -# 1486| r1486_19(glval) = FieldAddress[d] : r1486_18 -# 1486| r1486_20(double) = Load[?] : &:r1486_19, ~m? -# 1486| mu1486_21(double) = Store[?] : &:r1486_15, r1486_20 -# 1486| r1486_22(glval) = FieldAddress[b] : mu1486_5 -# 1486| r1486_23(glval) = VariableAddress[(unnamed parameter 0)] : -# 1486| r1486_24(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1486_23, ~m? -# 1486| r1486_25(glval) = CopyValue : r1486_24 -# 1486| r1486_26(glval) = FieldAddress[b] : r1486_25 -# 1486| r1486_27(unsigned int) = Load[?] : &:r1486_26, ~m? -# 1486| mu1486_28(unsigned int) = Store[?] : &:r1486_22, r1486_27 -# 1486| r1486_29(glval) = FieldAddress[r] : mu1486_5 -# 1486| r1486_30(glval) = VariableAddress[(unnamed parameter 0)] : -# 1486| r1486_31(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1486_30, ~m? -# 1486| r1486_32(glval) = CopyValue : r1486_31 -# 1486| r1486_33(glval) = FieldAddress[r] : r1486_32 -# 1486| r1486_34(int &) = Load[?] : &:r1486_33, ~m? -# 1486| mu1486_35(int &) = Store[?] : &:r1486_29, r1486_34 -# 1486| r1486_36(glval) = FieldAddress[p] : mu1486_5 -# 1486| r1486_37(glval) = VariableAddress[(unnamed parameter 0)] : -# 1486| r1486_38(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1486_37, ~m? -# 1486| r1486_39(glval) = CopyValue : r1486_38 -# 1486| r1486_40(glval) = FieldAddress[p] : r1486_39 -# 1486| r1486_41(int *) = Load[?] : &:r1486_40, ~m? -# 1486| mu1486_42(int *) = Store[?] : &:r1486_36, r1486_41 -# 1486| r1486_43(glval) = FieldAddress[xs] : mu1486_5 -# 1486| r1486_44(glval) = VariableAddress[(unnamed parameter 0)] : -# 1486| r1486_45(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1486_44, ~m? -# 1486| r1486_46(glval) = CopyValue : r1486_45 -# 1486| r1486_47(glval) = FieldAddress[xs] : r1486_46 -# 1486| r1486_48(int[2]) = Load[?] : &:r1486_47, ~m? -# 1486| mu1486_49(int[2]) = Store[?] : &:r1486_43, r1486_48 -# 1486| r1486_50(glval) = FieldAddress[r_alt] : mu1486_5 -# 1486| r1486_51(glval) = VariableAddress[(unnamed parameter 0)] : -# 1486| r1486_52(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1486_51, ~m? -# 1486| r1486_53(glval) = CopyValue : r1486_52 -# 1486| r1486_54(glval) = FieldAddress[r_alt] : r1486_53 -# 1486| r1486_55(int &) = Load[?] : &:r1486_54, ~m? -# 1486| mu1486_56(int &) = Store[?] : &:r1486_50, r1486_55 -# 1486| r1486_57(glval) = FieldAddress[m] : mu1486_5 -# 1486| r1486_58(glval) = VariableAddress[(unnamed parameter 0)] : -# 1486| r1486_59(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1486_58, ~m? -# 1486| r1486_60(glval) = CopyValue : r1486_59 -# 1486| r1486_61(glval) = FieldAddress[m] : r1486_60 -# 1486| r1486_62(StructuredBindingDataMemberMemberStruct) = Load[?] : &:r1486_61, ~m? -# 1486| mu1486_63(StructuredBindingDataMemberMemberStruct) = Store[?] : &:r1486_57, r1486_62 -# 1486| v1486_64(void) = NoOp : -# 1486| v1486_65(void) = ReturnIndirection[#this] : &:r1486_6, ~m? +# 1488| r1488_8(glval) = FieldAddress[i] : mu1488_5 +# 1488| r1488_9(glval) = VariableAddress[(unnamed parameter 0)] : +# 1488| r1488_10(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_9, ~m? +# 1488| r1488_11(glval) = CopyValue : r1488_10 +# 1488| r1488_12(glval) = FieldAddress[i] : r1488_11 +# 1488| r1488_13(int) = Load[?] : &:r1488_12, ~m? +# 1488| mu1488_14(int) = Store[?] : &:r1488_8, r1488_13 +# 1488| r1488_15(glval) = FieldAddress[d] : mu1488_5 +# 1488| r1488_16(glval) = VariableAddress[(unnamed parameter 0)] : +# 1488| r1488_17(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_16, ~m? +# 1488| r1488_18(glval) = CopyValue : r1488_17 +# 1488| r1488_19(glval) = FieldAddress[d] : r1488_18 +# 1488| r1488_20(double) = Load[?] : &:r1488_19, ~m? +# 1488| mu1488_21(double) = Store[?] : &:r1488_15, r1488_20 +# 1488| r1488_22(glval) = FieldAddress[b] : mu1488_5 +# 1488| r1488_23(glval) = VariableAddress[(unnamed parameter 0)] : +# 1488| r1488_24(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_23, ~m? +# 1488| r1488_25(glval) = CopyValue : r1488_24 +# 1488| r1488_26(glval) = FieldAddress[b] : r1488_25 +# 1488| r1488_27(unsigned int) = Load[?] : &:r1488_26, ~m? +# 1488| mu1488_28(unsigned int) = Store[?] : &:r1488_22, r1488_27 +# 1488| r1488_29(glval) = FieldAddress[r] : mu1488_5 +# 1488| r1488_30(glval) = VariableAddress[(unnamed parameter 0)] : +# 1488| r1488_31(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_30, ~m? +# 1488| r1488_32(glval) = CopyValue : r1488_31 +# 1488| r1488_33(glval) = FieldAddress[r] : r1488_32 +# 1488| r1488_34(int &) = Load[?] : &:r1488_33, ~m? +# 1488| mu1488_35(int &) = Store[?] : &:r1488_29, r1488_34 +# 1488| r1488_36(glval) = FieldAddress[p] : mu1488_5 +# 1488| r1488_37(glval) = VariableAddress[(unnamed parameter 0)] : +# 1488| r1488_38(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_37, ~m? +# 1488| r1488_39(glval) = CopyValue : r1488_38 +# 1488| r1488_40(glval) = FieldAddress[p] : r1488_39 +# 1488| r1488_41(int *) = Load[?] : &:r1488_40, ~m? +# 1488| mu1488_42(int *) = Store[?] : &:r1488_36, r1488_41 +# 1488| r1488_43(glval) = FieldAddress[xs] : mu1488_5 +# 1488| r1488_44(glval) = VariableAddress[(unnamed parameter 0)] : +# 1488| r1488_45(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_44, ~m? +# 1488| r1488_46(glval) = CopyValue : r1488_45 +# 1488| r1488_47(glval) = FieldAddress[xs] : r1488_46 +# 1488| r1488_48(int[2]) = Load[?] : &:r1488_47, ~m? +# 1488| mu1488_49(int[2]) = Store[?] : &:r1488_43, r1488_48 +# 1488| r1488_50(glval) = FieldAddress[r_alt] : mu1488_5 +# 1488| r1488_51(glval) = VariableAddress[(unnamed parameter 0)] : +# 1488| r1488_52(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_51, ~m? +# 1488| r1488_53(glval) = CopyValue : r1488_52 +# 1488| r1488_54(glval) = FieldAddress[r_alt] : r1488_53 +# 1488| r1488_55(int &) = Load[?] : &:r1488_54, ~m? +# 1488| mu1488_56(int &) = Store[?] : &:r1488_50, r1488_55 +# 1488| r1488_57(glval) = FieldAddress[m] : mu1488_5 +# 1488| r1488_58(glval) = VariableAddress[(unnamed parameter 0)] : +# 1488| r1488_59(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_58, ~m? +# 1488| r1488_60(glval) = CopyValue : r1488_59 +# 1488| r1488_61(glval) = FieldAddress[m] : r1488_60 +# 1488| r1488_62(StructuredBindingDataMemberMemberStruct) = Load[?] : &:r1488_61, ~m? +# 1488| mu1488_63(StructuredBindingDataMemberMemberStruct) = Store[?] : &:r1488_57, r1488_62 +# 1488| v1488_64(void) = NoOp : +# 1488| v1488_65(void) = ReturnIndirection[#this] : &:r1488_6, ~m? #-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, ~m? -# 1486| v1486_66(void) = ReturnVoid : -# 1486| v1486_67(void) = AliasedUse : ~m? -# 1486| v1486_68(void) = ExitFunction : +# 1488| v1488_66(void) = ReturnVoid : +# 1488| v1488_67(void) = AliasedUse : ~m? +# 1488| v1488_68(void) = ExitFunction : -# 1499| void data_member_structured_binding() -# 1499| Block 0 -# 1499| v1499_1(void) = EnterFunction : -# 1499| mu1499_2(unknown) = AliasedDefinition : -# 1499| mu1499_3(unknown) = InitializeNonLocal : -# 1500| r1500_1(glval) = VariableAddress[s] : -# 1500| mu1500_2(StructuredBindingDataMemberStruct) = Uninitialized[s] : &:r1500_1 -# 1500| r1500_3(glval) = FunctionAddress[StructuredBindingDataMemberStruct] : -# 1500| v1500_4(void) = Call[StructuredBindingDataMemberStruct] : func:r1500_3, this:r1500_1 -# 1500| mu1500_5(unknown) = ^CallSideEffect : ~m? -# 1500| mu1500_6(StructuredBindingDataMemberStruct) = ^IndirectMayWriteSideEffect[-1] : &:r1500_1 -# 1503| r1503_1(glval) = VariableAddress[(unnamed local variable)] : -# 1503| r1503_2(glval) = VariableAddress[s] : -# 1503| r1503_3(StructuredBindingDataMemberStruct) = Load[s] : &:r1503_2, ~m? -# 1503| mu1503_4(StructuredBindingDataMemberStruct) = Store[(unnamed local variable)] : &:r1503_1, r1503_3 -# 1503| r1503_5(glval) = VariableAddress[i] : -# 1503| r1503_6(glval) = VariableAddress[(unnamed local variable)] : -# 1503| r1503_7(glval) = FieldAddress[i] : r1503_6 -# 1503| mu1503_8(int &) = Store[i] : &:r1503_5, r1503_7 -# 1503| r1503_9(glval) = VariableAddress[d] : -# 1503| r1503_10(glval) = VariableAddress[(unnamed local variable)] : -# 1503| r1503_11(glval) = FieldAddress[d] : r1503_10 -# 1503| mu1503_12(double &) = Store[d] : &:r1503_9, r1503_11 -# 1503| r1503_13(glval) = VariableAddress[b] : -# 1503| r1503_14(glval) = VariableAddress[(unnamed local variable)] : -# 1503| r1503_15(glval) = FieldAddress[b] : r1503_14 -# 1503| mu1503_16(unsigned int &) = Store[b] : &:r1503_13, r1503_15 -# 1503| r1503_17(glval) = VariableAddress[r] : -# 1503| r1503_18(glval) = VariableAddress[(unnamed local variable)] : -# 1503| r1503_19(glval) = FieldAddress[r] : r1503_18 -# 1503| r1503_20(int &) = Load[?] : &:r1503_19, ~m? -# 1503| r1503_21(glval) = CopyValue : r1503_20 -# 1503| mu1503_22(int &) = Store[r] : &:r1503_17, r1503_21 -# 1503| r1503_23(glval) = VariableAddress[p] : -# 1503| r1503_24(glval) = VariableAddress[(unnamed local variable)] : -# 1503| r1503_25(glval) = FieldAddress[p] : r1503_24 -# 1503| mu1503_26(int *&) = Store[p] : &:r1503_23, r1503_25 -# 1503| r1503_27(glval) = VariableAddress[xs] : -# 1503| r1503_28(glval) = VariableAddress[(unnamed local variable)] : -# 1503| r1503_29(glval) = FieldAddress[xs] : r1503_28 -# 1503| mu1503_30(int(&)[2]) = Store[xs] : &:r1503_27, r1503_29 -# 1503| r1503_31(glval) = VariableAddress[r_alt] : -# 1503| r1503_32(glval) = VariableAddress[(unnamed local variable)] : -# 1503| r1503_33(glval) = FieldAddress[r_alt] : r1503_32 -# 1503| r1503_34(int &) = Load[?] : &:r1503_33, ~m? -# 1503| r1503_35(glval) = CopyValue : r1503_34 -# 1503| mu1503_36(int &) = Store[r_alt] : &:r1503_31, r1503_35 -# 1503| r1503_37(glval) = VariableAddress[m] : -# 1503| r1503_38(glval) = VariableAddress[(unnamed local variable)] : -# 1503| r1503_39(glval) = FieldAddress[m] : r1503_38 -# 1503| mu1503_40(StructuredBindingDataMemberMemberStruct &) = Store[m] : &:r1503_37, r1503_39 -# 1504| r1504_1(double) = Constant[4.0] : -# 1504| r1504_2(glval) = VariableAddress[d] : -# 1504| r1504_3(double &) = Load[d] : &:r1504_2, ~m? -# 1504| mu1504_4(double) = Store[?] : &:r1504_3, r1504_1 -# 1505| r1505_1(glval) = VariableAddress[rd] : -# 1505| r1505_2(glval) = VariableAddress[d] : -# 1505| r1505_3(double &) = Load[d] : &:r1505_2, ~m? -# 1505| r1505_4(double &) = CopyValue : r1505_3 -# 1505| mu1505_5(double &) = Store[rd] : &:r1505_1, r1505_4 -# 1506| r1506_1(glval) = VariableAddress[v] : -# 1506| r1506_2(glval) = VariableAddress[i] : -# 1506| r1506_3(int &) = Load[i] : &:r1506_2, ~m? -# 1506| r1506_4(int) = Load[?] : &:r1506_3, ~m? -# 1506| mu1506_5(int) = Store[v] : &:r1506_1, r1506_4 -# 1507| r1507_1(int) = Constant[5] : -# 1507| r1507_2(glval) = VariableAddress[r] : -# 1507| r1507_3(int &) = Load[r] : &:r1507_2, ~m? -# 1507| mu1507_4(int) = Store[?] : &:r1507_3, r1507_1 -# 1508| r1508_1(int) = Constant[6] : -# 1508| r1508_2(glval) = VariableAddress[p] : -# 1508| r1508_3(int *&) = Load[p] : &:r1508_2, ~m? -# 1508| r1508_4(int *) = Load[?] : &:r1508_3, ~m? -# 1508| r1508_5(glval) = CopyValue : r1508_4 -# 1508| mu1508_6(int) = Store[?] : &:r1508_5, r1508_1 -# 1509| r1509_1(glval) = VariableAddress[rr] : +# 1501| void data_member_structured_binding() +# 1501| Block 0 +# 1501| v1501_1(void) = EnterFunction : +# 1501| mu1501_2(unknown) = AliasedDefinition : +# 1501| mu1501_3(unknown) = InitializeNonLocal : +# 1502| r1502_1(glval) = VariableAddress[s] : +# 1502| mu1502_2(StructuredBindingDataMemberStruct) = Uninitialized[s] : &:r1502_1 +# 1502| r1502_3(glval) = FunctionAddress[StructuredBindingDataMemberStruct] : +# 1502| v1502_4(void) = Call[StructuredBindingDataMemberStruct] : func:r1502_3, this:r1502_1 +# 1502| mu1502_5(unknown) = ^CallSideEffect : ~m? +# 1502| mu1502_6(StructuredBindingDataMemberStruct) = ^IndirectMayWriteSideEffect[-1] : &:r1502_1 +# 1505| r1505_1(glval) = VariableAddress[(unnamed local variable)] : +# 1505| r1505_2(glval) = VariableAddress[s] : +# 1505| r1505_3(StructuredBindingDataMemberStruct) = Load[s] : &:r1505_2, ~m? +# 1505| mu1505_4(StructuredBindingDataMemberStruct) = Store[(unnamed local variable)] : &:r1505_1, r1505_3 +# 1505| r1505_5(glval) = VariableAddress[i] : +# 1505| r1505_6(glval) = VariableAddress[(unnamed local variable)] : +# 1505| r1505_7(glval) = FieldAddress[i] : r1505_6 +# 1505| mu1505_8(int &) = Store[i] : &:r1505_5, r1505_7 +# 1505| r1505_9(glval) = VariableAddress[d] : +# 1505| r1505_10(glval) = VariableAddress[(unnamed local variable)] : +# 1505| r1505_11(glval) = FieldAddress[d] : r1505_10 +# 1505| mu1505_12(double &) = Store[d] : &:r1505_9, r1505_11 +# 1505| r1505_13(glval) = VariableAddress[b] : +# 1505| r1505_14(glval) = VariableAddress[(unnamed local variable)] : +# 1505| r1505_15(glval) = FieldAddress[b] : r1505_14 +# 1505| mu1505_16(unsigned int &) = Store[b] : &:r1505_13, r1505_15 +# 1505| r1505_17(glval) = VariableAddress[r] : +# 1505| r1505_18(glval) = VariableAddress[(unnamed local variable)] : +# 1505| r1505_19(glval) = FieldAddress[r] : r1505_18 +# 1505| r1505_20(int &) = Load[?] : &:r1505_19, ~m? +# 1505| r1505_21(glval) = CopyValue : r1505_20 +# 1505| mu1505_22(int &) = Store[r] : &:r1505_17, r1505_21 +# 1505| r1505_23(glval) = VariableAddress[p] : +# 1505| r1505_24(glval) = VariableAddress[(unnamed local variable)] : +# 1505| r1505_25(glval) = FieldAddress[p] : r1505_24 +# 1505| mu1505_26(int *&) = Store[p] : &:r1505_23, r1505_25 +# 1505| r1505_27(glval) = VariableAddress[xs] : +# 1505| r1505_28(glval) = VariableAddress[(unnamed local variable)] : +# 1505| r1505_29(glval) = FieldAddress[xs] : r1505_28 +# 1505| mu1505_30(int(&)[2]) = Store[xs] : &:r1505_27, r1505_29 +# 1505| r1505_31(glval) = VariableAddress[r_alt] : +# 1505| r1505_32(glval) = VariableAddress[(unnamed local variable)] : +# 1505| r1505_33(glval) = FieldAddress[r_alt] : r1505_32 +# 1505| r1505_34(int &) = Load[?] : &:r1505_33, ~m? +# 1505| r1505_35(glval) = CopyValue : r1505_34 +# 1505| mu1505_36(int &) = Store[r_alt] : &:r1505_31, r1505_35 +# 1505| r1505_37(glval) = VariableAddress[m] : +# 1505| r1505_38(glval) = VariableAddress[(unnamed local variable)] : +# 1505| r1505_39(glval) = FieldAddress[m] : r1505_38 +# 1505| mu1505_40(StructuredBindingDataMemberMemberStruct &) = Store[m] : &:r1505_37, r1505_39 +# 1506| r1506_1(double) = Constant[4.0] : +# 1506| r1506_2(glval) = VariableAddress[d] : +# 1506| r1506_3(double &) = Load[d] : &:r1506_2, ~m? +# 1506| mu1506_4(double) = Store[?] : &:r1506_3, r1506_1 +# 1507| r1507_1(glval) = VariableAddress[rd] : +# 1507| r1507_2(glval) = VariableAddress[d] : +# 1507| r1507_3(double &) = Load[d] : &:r1507_2, ~m? +# 1507| r1507_4(double &) = CopyValue : r1507_3 +# 1507| mu1507_5(double &) = Store[rd] : &:r1507_1, r1507_4 +# 1508| r1508_1(glval) = VariableAddress[v] : +# 1508| r1508_2(glval) = VariableAddress[i] : +# 1508| r1508_3(int &) = Load[i] : &:r1508_2, ~m? +# 1508| r1508_4(int) = Load[?] : &:r1508_3, ~m? +# 1508| mu1508_5(int) = Store[v] : &:r1508_1, r1508_4 +# 1509| r1509_1(int) = Constant[5] : # 1509| r1509_2(glval) = VariableAddress[r] : # 1509| r1509_3(int &) = Load[r] : &:r1509_2, ~m? -# 1509| r1509_4(int &) = CopyValue : r1509_3 -# 1509| mu1509_5(int &) = Store[rr] : &:r1509_1, r1509_4 -# 1510| r1510_1(glval) = VariableAddress[pr] : -# 1510| r1510_2(glval) = VariableAddress[r] : -# 1510| r1510_3(int &) = Load[r] : &:r1510_2, ~m? -# 1510| r1510_4(int *) = CopyValue : r1510_3 -# 1510| mu1510_5(int *) = Store[pr] : &:r1510_1, r1510_4 -# 1511| r1511_1(glval) = VariableAddress[w] : +# 1509| mu1509_4(int) = Store[?] : &:r1509_3, r1509_1 +# 1510| r1510_1(int) = Constant[6] : +# 1510| r1510_2(glval) = VariableAddress[p] : +# 1510| r1510_3(int *&) = Load[p] : &:r1510_2, ~m? +# 1510| r1510_4(int *) = Load[?] : &:r1510_3, ~m? +# 1510| r1510_5(glval) = CopyValue : r1510_4 +# 1510| mu1510_6(int) = Store[?] : &:r1510_5, r1510_1 +# 1511| r1511_1(glval) = VariableAddress[rr] : # 1511| r1511_2(glval) = VariableAddress[r] : # 1511| r1511_3(int &) = Load[r] : &:r1511_2, ~m? -# 1511| r1511_4(int) = Load[?] : &:r1511_3, ~m? -# 1511| mu1511_5(int) = Store[w] : &:r1511_1, r1511_4 -# 1515| r1515_1(glval) = VariableAddress[unnamed_local_variable] : -# 1515| r1515_2(glval) = VariableAddress[s] : -# 1515| r1515_3(StructuredBindingDataMemberStruct) = Load[s] : &:r1515_2, ~m? -# 1515| mu1515_4(StructuredBindingDataMemberStruct) = Store[unnamed_local_variable] : &:r1515_1, r1515_3 -# 1516| r1516_1(glval) = VariableAddress[i] : -# 1516| r1516_2(glval) = VariableAddress[unnamed_local_variable] : -# 1516| r1516_3(glval) = FieldAddress[i] : r1516_2 -# 1516| r1516_4(int &) = CopyValue : r1516_3 -# 1516| mu1516_5(int &) = Store[i] : &:r1516_1, r1516_4 -# 1517| r1517_1(glval) = VariableAddress[d] : -# 1517| r1517_2(glval) = VariableAddress[unnamed_local_variable] : -# 1517| r1517_3(glval) = FieldAddress[d] : r1517_2 -# 1517| r1517_4(double &) = CopyValue : r1517_3 -# 1517| mu1517_5(double &) = Store[d] : &:r1517_1, r1517_4 -# 1519| r1519_1(glval) = VariableAddress[r] : +# 1511| r1511_4(int &) = CopyValue : r1511_3 +# 1511| mu1511_5(int &) = Store[rr] : &:r1511_1, r1511_4 +# 1512| r1512_1(glval) = VariableAddress[pr] : +# 1512| r1512_2(glval) = VariableAddress[r] : +# 1512| r1512_3(int &) = Load[r] : &:r1512_2, ~m? +# 1512| r1512_4(int *) = CopyValue : r1512_3 +# 1512| mu1512_5(int *) = Store[pr] : &:r1512_1, r1512_4 +# 1513| r1513_1(glval) = VariableAddress[w] : +# 1513| r1513_2(glval) = VariableAddress[r] : +# 1513| r1513_3(int &) = Load[r] : &:r1513_2, ~m? +# 1513| r1513_4(int) = Load[?] : &:r1513_3, ~m? +# 1513| mu1513_5(int) = Store[w] : &:r1513_1, r1513_4 +# 1517| r1517_1(glval) = VariableAddress[unnamed_local_variable] : +# 1517| r1517_2(glval) = VariableAddress[s] : +# 1517| r1517_3(StructuredBindingDataMemberStruct) = Load[s] : &:r1517_2, ~m? +# 1517| mu1517_4(StructuredBindingDataMemberStruct) = Store[unnamed_local_variable] : &:r1517_1, r1517_3 +# 1518| r1518_1(glval) = VariableAddress[i] : +# 1518| r1518_2(glval) = VariableAddress[unnamed_local_variable] : +# 1518| r1518_3(glval) = FieldAddress[i] : r1518_2 +# 1518| r1518_4(int &) = CopyValue : r1518_3 +# 1518| mu1518_5(int &) = Store[i] : &:r1518_1, r1518_4 +# 1519| r1519_1(glval) = VariableAddress[d] : # 1519| r1519_2(glval) = VariableAddress[unnamed_local_variable] : -# 1519| r1519_3(glval) = FieldAddress[r] : r1519_2 -# 1519| r1519_4(int &) = Load[?] : &:r1519_3, ~m? -# 1519| r1519_5(glval) = CopyValue : r1519_4 -# 1519| r1519_6(int &) = CopyValue : r1519_5 -# 1519| mu1519_7(int &) = Store[r] : &:r1519_1, r1519_6 -# 1520| r1520_1(glval) = VariableAddress[p] : -# 1520| r1520_2(glval) = VariableAddress[unnamed_local_variable] : -# 1520| r1520_3(glval) = FieldAddress[p] : r1520_2 -# 1520| r1520_4(int *&) = CopyValue : r1520_3 -# 1520| mu1520_5(int *&) = Store[p] : &:r1520_1, r1520_4 -# 1521| r1521_1(double) = Constant[4.0] : -# 1521| r1521_2(glval) = VariableAddress[d] : -# 1521| r1521_3(double &) = Load[d] : &:r1521_2, ~m? -# 1521| r1521_4(glval) = CopyValue : r1521_3 -# 1521| mu1521_5(double) = Store[?] : &:r1521_4, r1521_1 -# 1522| r1522_1(glval) = VariableAddress[rd] : -# 1522| r1522_2(glval) = VariableAddress[d] : -# 1522| r1522_3(double &) = Load[d] : &:r1522_2, ~m? -# 1522| r1522_4(glval) = CopyValue : r1522_3 -# 1522| r1522_5(double &) = CopyValue : r1522_4 -# 1522| mu1522_6(double &) = Store[rd] : &:r1522_1, r1522_5 -# 1523| r1523_1(glval) = VariableAddress[v] : -# 1523| r1523_2(glval) = VariableAddress[i] : -# 1523| r1523_3(int &) = Load[i] : &:r1523_2, ~m? -# 1523| r1523_4(int) = Load[?] : &:r1523_3, ~m? -# 1523| mu1523_5(int) = Store[v] : &:r1523_1, r1523_4 -# 1524| r1524_1(int) = Constant[5] : -# 1524| r1524_2(glval) = VariableAddress[r] : -# 1524| r1524_3(int &) = Load[r] : &:r1524_2, ~m? -# 1524| r1524_4(glval) = CopyValue : r1524_3 -# 1524| mu1524_5(int) = Store[?] : &:r1524_4, r1524_1 -# 1525| r1525_1(int) = Constant[6] : -# 1525| r1525_2(glval) = VariableAddress[p] : -# 1525| r1525_3(int *&) = Load[p] : &:r1525_2, ~m? -# 1525| r1525_4(int *) = Load[?] : &:r1525_3, ~m? -# 1525| r1525_5(glval) = CopyValue : r1525_4 -# 1525| mu1525_6(int) = Store[?] : &:r1525_5, r1525_1 -# 1526| r1526_1(glval) = VariableAddress[rr] : +# 1519| r1519_3(glval) = FieldAddress[d] : r1519_2 +# 1519| r1519_4(double &) = CopyValue : r1519_3 +# 1519| mu1519_5(double &) = Store[d] : &:r1519_1, r1519_4 +# 1521| r1521_1(glval) = VariableAddress[r] : +# 1521| r1521_2(glval) = VariableAddress[unnamed_local_variable] : +# 1521| r1521_3(glval) = FieldAddress[r] : r1521_2 +# 1521| r1521_4(int &) = Load[?] : &:r1521_3, ~m? +# 1521| r1521_5(glval) = CopyValue : r1521_4 +# 1521| r1521_6(int &) = CopyValue : r1521_5 +# 1521| mu1521_7(int &) = Store[r] : &:r1521_1, r1521_6 +# 1522| r1522_1(glval) = VariableAddress[p] : +# 1522| r1522_2(glval) = VariableAddress[unnamed_local_variable] : +# 1522| r1522_3(glval) = FieldAddress[p] : r1522_2 +# 1522| r1522_4(int *&) = CopyValue : r1522_3 +# 1522| mu1522_5(int *&) = Store[p] : &:r1522_1, r1522_4 +# 1523| r1523_1(double) = Constant[4.0] : +# 1523| r1523_2(glval) = VariableAddress[d] : +# 1523| r1523_3(double &) = Load[d] : &:r1523_2, ~m? +# 1523| r1523_4(glval) = CopyValue : r1523_3 +# 1523| mu1523_5(double) = Store[?] : &:r1523_4, r1523_1 +# 1524| r1524_1(glval) = VariableAddress[rd] : +# 1524| r1524_2(glval) = VariableAddress[d] : +# 1524| r1524_3(double &) = Load[d] : &:r1524_2, ~m? +# 1524| r1524_4(glval) = CopyValue : r1524_3 +# 1524| r1524_5(double &) = CopyValue : r1524_4 +# 1524| mu1524_6(double &) = Store[rd] : &:r1524_1, r1524_5 +# 1525| r1525_1(glval) = VariableAddress[v] : +# 1525| r1525_2(glval) = VariableAddress[i] : +# 1525| r1525_3(int &) = Load[i] : &:r1525_2, ~m? +# 1525| r1525_4(int) = Load[?] : &:r1525_3, ~m? +# 1525| mu1525_5(int) = Store[v] : &:r1525_1, r1525_4 +# 1526| r1526_1(int) = Constant[5] : # 1526| r1526_2(glval) = VariableAddress[r] : # 1526| r1526_3(int &) = Load[r] : &:r1526_2, ~m? # 1526| r1526_4(glval) = CopyValue : r1526_3 -# 1526| r1526_5(int &) = CopyValue : r1526_4 -# 1526| mu1526_6(int &) = Store[rr] : &:r1526_1, r1526_5 -# 1527| r1527_1(glval) = VariableAddress[pr] : -# 1527| r1527_2(glval) = VariableAddress[r] : -# 1527| r1527_3(int &) = Load[r] : &:r1527_2, ~m? -# 1527| r1527_4(glval) = CopyValue : r1527_3 -# 1527| r1527_5(int *) = CopyValue : r1527_4 -# 1527| mu1527_6(int *) = Store[pr] : &:r1527_1, r1527_5 -# 1528| r1528_1(glval) = VariableAddress[w] : +# 1526| mu1526_5(int) = Store[?] : &:r1526_4, r1526_1 +# 1527| r1527_1(int) = Constant[6] : +# 1527| r1527_2(glval) = VariableAddress[p] : +# 1527| r1527_3(int *&) = Load[p] : &:r1527_2, ~m? +# 1527| r1527_4(int *) = Load[?] : &:r1527_3, ~m? +# 1527| r1527_5(glval) = CopyValue : r1527_4 +# 1527| mu1527_6(int) = Store[?] : &:r1527_5, r1527_1 +# 1528| r1528_1(glval) = VariableAddress[rr] : # 1528| r1528_2(glval) = VariableAddress[r] : # 1528| r1528_3(int &) = Load[r] : &:r1528_2, ~m? -# 1528| r1528_4(int) = Load[?] : &:r1528_3, ~m? -# 1528| mu1528_5(int) = Store[w] : &:r1528_1, r1528_4 -# 1530| v1530_1(void) = NoOp : -# 1499| v1499_4(void) = ReturnVoid : -# 1499| v1499_5(void) = AliasedUse : ~m? -# 1499| v1499_6(void) = ExitFunction : +# 1528| r1528_4(glval) = CopyValue : r1528_3 +# 1528| r1528_5(int &) = CopyValue : r1528_4 +# 1528| mu1528_6(int &) = Store[rr] : &:r1528_1, r1528_5 +# 1529| r1529_1(glval) = VariableAddress[pr] : +# 1529| r1529_2(glval) = VariableAddress[r] : +# 1529| r1529_3(int &) = Load[r] : &:r1529_2, ~m? +# 1529| r1529_4(glval) = CopyValue : r1529_3 +# 1529| r1529_5(int *) = CopyValue : r1529_4 +# 1529| mu1529_6(int *) = Store[pr] : &:r1529_1, r1529_5 +# 1530| r1530_1(glval) = VariableAddress[w] : +# 1530| r1530_2(glval) = VariableAddress[r] : +# 1530| r1530_3(int &) = Load[r] : &:r1530_2, ~m? +# 1530| r1530_4(int) = Load[?] : &:r1530_3, ~m? +# 1530| mu1530_5(int) = Store[w] : &:r1530_1, r1530_4 +# 1532| v1532_1(void) = NoOp : +# 1501| v1501_4(void) = ReturnVoid : +# 1501| v1501_5(void) = AliasedUse : ~m? +# 1501| v1501_6(void) = ExitFunction : -# 1539| void StructuredBindingTupleRefGet::StructuredBindingTupleRefGet() -# 1539| Block 0 -# 1539| v1539_1(void) = EnterFunction : -# 1539| mu1539_2(unknown) = AliasedDefinition : -# 1539| mu1539_3(unknown) = InitializeNonLocal : -# 1539| r1539_4(glval) = VariableAddress[#this] : -# 1539| mu1539_5(glval) = InitializeParameter[#this] : &:r1539_4 -# 1539| r1539_6(glval) = Load[#this] : &:r1539_4, ~m? -# 1539| mu1539_7(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1539_6 -# 1539| v1539_8(void) = NoOp : -# 1539| v1539_9(void) = ReturnIndirection[#this] : &:r1539_6, ~m? -# 1539| v1539_10(void) = ReturnVoid : -# 1539| v1539_11(void) = AliasedUse : ~m? -# 1539| v1539_12(void) = ExitFunction : +# 1541| void StructuredBindingTupleRefGet::StructuredBindingTupleRefGet() +# 1541| Block 0 +# 1541| v1541_1(void) = EnterFunction : +# 1541| mu1541_2(unknown) = AliasedDefinition : +# 1541| mu1541_3(unknown) = InitializeNonLocal : +# 1541| r1541_4(glval) = VariableAddress[#this] : +# 1541| mu1541_5(glval) = InitializeParameter[#this] : &:r1541_4 +# 1541| r1541_6(glval) = Load[#this] : &:r1541_4, ~m? +# 1541| mu1541_7(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1541_6 +# 1541| v1541_8(void) = NoOp : +# 1541| v1541_9(void) = ReturnIndirection[#this] : &:r1541_6, ~m? +# 1541| v1541_10(void) = ReturnVoid : +# 1541| v1541_11(void) = AliasedUse : ~m? +# 1541| v1541_12(void) = ExitFunction : -# 1539| void StructuredBindingTupleRefGet::StructuredBindingTupleRefGet(StructuredBindingTupleRefGet const&) -# 1539| Block 0 -# 1539| v1539_1(void) = EnterFunction : -# 1539| mu1539_2(unknown) = AliasedDefinition : -# 1539| mu1539_3(unknown) = InitializeNonLocal : -# 1539| r1539_4(glval) = VariableAddress[#this] : -# 1539| mu1539_5(glval) = InitializeParameter[#this] : &:r1539_4 -# 1539| r1539_6(glval) = Load[#this] : &:r1539_4, ~m? -# 1539| mu1539_7(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1539_6 +# 1541| void StructuredBindingTupleRefGet::StructuredBindingTupleRefGet(StructuredBindingTupleRefGet const&) +# 1541| Block 0 +# 1541| v1541_1(void) = EnterFunction : +# 1541| mu1541_2(unknown) = AliasedDefinition : +# 1541| mu1541_3(unknown) = InitializeNonLocal : +# 1541| r1541_4(glval) = VariableAddress[#this] : +# 1541| mu1541_5(glval) = InitializeParameter[#this] : &:r1541_4 +# 1541| r1541_6(glval) = Load[#this] : &:r1541_4, ~m? +# 1541| mu1541_7(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1541_6 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| mu0_2(StructuredBindingTupleRefGet &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r0_1, ~m? #-----| mu0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 1539| r1539_8(glval) = FieldAddress[i] : mu1539_5 -# 1539| r1539_9(glval) = VariableAddress[(unnamed parameter 0)] : -# 1539| r1539_10(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r1539_9, ~m? -# 1539| r1539_11(glval) = CopyValue : r1539_10 -# 1539| r1539_12(glval) = FieldAddress[i] : r1539_11 -# 1539| r1539_13(int) = Load[?] : &:r1539_12, ~m? -# 1539| mu1539_14(int) = Store[?] : &:r1539_8, r1539_13 -# 1539| r1539_15(glval) = FieldAddress[d] : mu1539_5 -# 1539| r1539_16(glval) = VariableAddress[(unnamed parameter 0)] : -# 1539| r1539_17(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r1539_16, ~m? -# 1539| r1539_18(glval) = CopyValue : r1539_17 -# 1539| r1539_19(glval) = FieldAddress[d] : r1539_18 -# 1539| r1539_20(double) = Load[?] : &:r1539_19, ~m? -# 1539| mu1539_21(double) = Store[?] : &:r1539_15, r1539_20 -# 1539| r1539_22(glval) = FieldAddress[r] : mu1539_5 -# 1539| r1539_23(glval) = VariableAddress[(unnamed parameter 0)] : -# 1539| r1539_24(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r1539_23, ~m? -# 1539| r1539_25(glval) = CopyValue : r1539_24 -# 1539| r1539_26(glval) = FieldAddress[r] : r1539_25 -# 1539| r1539_27(int &) = Load[?] : &:r1539_26, ~m? -# 1539| mu1539_28(int &) = Store[?] : &:r1539_22, r1539_27 -# 1539| v1539_29(void) = NoOp : -# 1539| v1539_30(void) = ReturnIndirection[#this] : &:r1539_6, ~m? +# 1541| r1541_8(glval) = FieldAddress[i] : mu1541_5 +# 1541| r1541_9(glval) = VariableAddress[(unnamed parameter 0)] : +# 1541| r1541_10(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r1541_9, ~m? +# 1541| r1541_11(glval) = CopyValue : r1541_10 +# 1541| r1541_12(glval) = FieldAddress[i] : r1541_11 +# 1541| r1541_13(int) = Load[?] : &:r1541_12, ~m? +# 1541| mu1541_14(int) = Store[?] : &:r1541_8, r1541_13 +# 1541| r1541_15(glval) = FieldAddress[d] : mu1541_5 +# 1541| r1541_16(glval) = VariableAddress[(unnamed parameter 0)] : +# 1541| r1541_17(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r1541_16, ~m? +# 1541| r1541_18(glval) = CopyValue : r1541_17 +# 1541| r1541_19(glval) = FieldAddress[d] : r1541_18 +# 1541| r1541_20(double) = Load[?] : &:r1541_19, ~m? +# 1541| mu1541_21(double) = Store[?] : &:r1541_15, r1541_20 +# 1541| r1541_22(glval) = FieldAddress[r] : mu1541_5 +# 1541| r1541_23(glval) = VariableAddress[(unnamed parameter 0)] : +# 1541| r1541_24(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r1541_23, ~m? +# 1541| r1541_25(glval) = CopyValue : r1541_24 +# 1541| r1541_26(glval) = FieldAddress[r] : r1541_25 +# 1541| r1541_27(int &) = Load[?] : &:r1541_26, ~m? +# 1541| mu1541_28(int &) = Store[?] : &:r1541_22, r1541_27 +# 1541| v1541_29(void) = NoOp : +# 1541| v1541_30(void) = ReturnIndirection[#this] : &:r1541_6, ~m? #-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, ~m? -# 1539| v1539_31(void) = ReturnVoid : -# 1539| v1539_32(void) = AliasedUse : ~m? -# 1539| v1539_33(void) = ExitFunction : +# 1541| v1541_31(void) = ReturnVoid : +# 1541| v1541_32(void) = AliasedUse : ~m? +# 1541| v1541_33(void) = ExitFunction : -# 1567| std::tuple_element::type& StructuredBindingTupleRefGet::get() -# 1567| Block 0 -# 1567| v1567_1(void) = EnterFunction : -# 1567| mu1567_2(unknown) = AliasedDefinition : -# 1567| mu1567_3(unknown) = InitializeNonLocal : -# 1567| r1567_4(glval) = VariableAddress[#this] : -# 1567| mu1567_5(glval) = InitializeParameter[#this] : &:r1567_4 -# 1567| r1567_6(glval) = Load[#this] : &:r1567_4, ~m? -# 1567| mu1567_7(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1567_6 -# 1568| r1568_1(glval) = VariableAddress[#return] : -# 1568| r1568_2(glval) = VariableAddress[#this] : -# 1568| r1568_3(StructuredBindingTupleRefGet *) = Load[#this] : &:r1568_2, ~m? -# 1568| r1568_4(glval) = FieldAddress[i] : r1568_3 -#-----| r0_1(int &) = CopyValue : r1568_4 -#-----| mu0_2(int &) = Store[#return] : &:r1568_1, r0_1 -# 1567| v1567_8(void) = ReturnIndirection[#this] : &:r1567_6, ~m? -# 1567| r1567_9(glval) = VariableAddress[#return] : -# 1567| v1567_10(void) = ReturnValue : &:r1567_9, ~m? -# 1567| v1567_11(void) = AliasedUse : ~m? -# 1567| v1567_12(void) = ExitFunction : +# 1569| std::tuple_element::type& StructuredBindingTupleRefGet::get() +# 1569| Block 0 +# 1569| v1569_1(void) = EnterFunction : +# 1569| mu1569_2(unknown) = AliasedDefinition : +# 1569| mu1569_3(unknown) = InitializeNonLocal : +# 1569| r1569_4(glval) = VariableAddress[#this] : +# 1569| mu1569_5(glval) = InitializeParameter[#this] : &:r1569_4 +# 1569| r1569_6(glval) = Load[#this] : &:r1569_4, ~m? +# 1569| mu1569_7(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1569_6 +# 1570| r1570_1(glval) = VariableAddress[#return] : +# 1570| r1570_2(glval) = VariableAddress[#this] : +# 1570| r1570_3(StructuredBindingTupleRefGet *) = Load[#this] : &:r1570_2, ~m? +# 1570| r1570_4(glval) = FieldAddress[i] : r1570_3 +#-----| r0_1(int &) = CopyValue : r1570_4 +#-----| mu0_2(int &) = Store[#return] : &:r1570_1, r0_1 +# 1569| v1569_8(void) = ReturnIndirection[#this] : &:r1569_6, ~m? +# 1569| r1569_9(glval) = VariableAddress[#return] : +# 1569| v1569_10(void) = ReturnValue : &:r1569_9, ~m? +# 1569| v1569_11(void) = AliasedUse : ~m? +# 1569| v1569_12(void) = ExitFunction : -# 1571| std::tuple_element::type& StructuredBindingTupleRefGet::get() -# 1571| Block 0 -# 1571| v1571_1(void) = EnterFunction : -# 1571| mu1571_2(unknown) = AliasedDefinition : -# 1571| mu1571_3(unknown) = InitializeNonLocal : -# 1571| r1571_4(glval) = VariableAddress[#this] : -# 1571| mu1571_5(glval) = InitializeParameter[#this] : &:r1571_4 -# 1571| r1571_6(glval) = Load[#this] : &:r1571_4, ~m? -# 1571| mu1571_7(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1571_6 -# 1572| r1572_1(glval) = VariableAddress[#return] : -# 1572| r1572_2(glval) = VariableAddress[#this] : -# 1572| r1572_3(StructuredBindingTupleRefGet *) = Load[#this] : &:r1572_2, ~m? -# 1572| r1572_4(glval) = FieldAddress[d] : r1572_3 -#-----| r0_1(double &) = CopyValue : r1572_4 -#-----| mu0_2(double &) = Store[#return] : &:r1572_1, r0_1 -# 1571| v1571_8(void) = ReturnIndirection[#this] : &:r1571_6, ~m? -# 1571| r1571_9(glval) = VariableAddress[#return] : -# 1571| v1571_10(void) = ReturnValue : &:r1571_9, ~m? -# 1571| v1571_11(void) = AliasedUse : ~m? -# 1571| v1571_12(void) = ExitFunction : +# 1573| std::tuple_element::type& StructuredBindingTupleRefGet::get() +# 1573| Block 0 +# 1573| v1573_1(void) = EnterFunction : +# 1573| mu1573_2(unknown) = AliasedDefinition : +# 1573| mu1573_3(unknown) = InitializeNonLocal : +# 1573| r1573_4(glval) = VariableAddress[#this] : +# 1573| mu1573_5(glval) = InitializeParameter[#this] : &:r1573_4 +# 1573| r1573_6(glval) = Load[#this] : &:r1573_4, ~m? +# 1573| mu1573_7(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1573_6 +# 1574| r1574_1(glval) = VariableAddress[#return] : +# 1574| r1574_2(glval) = VariableAddress[#this] : +# 1574| r1574_3(StructuredBindingTupleRefGet *) = Load[#this] : &:r1574_2, ~m? +# 1574| r1574_4(glval) = FieldAddress[d] : r1574_3 +#-----| r0_1(double &) = CopyValue : r1574_4 +#-----| mu0_2(double &) = Store[#return] : &:r1574_1, r0_1 +# 1573| v1573_8(void) = ReturnIndirection[#this] : &:r1573_6, ~m? +# 1573| r1573_9(glval) = VariableAddress[#return] : +# 1573| v1573_10(void) = ReturnValue : &:r1573_9, ~m? +# 1573| v1573_11(void) = AliasedUse : ~m? +# 1573| v1573_12(void) = ExitFunction : -# 1575| std::tuple_element::type StructuredBindingTupleRefGet::get() -# 1575| Block 0 -# 1575| v1575_1(void) = EnterFunction : -# 1575| mu1575_2(unknown) = AliasedDefinition : -# 1575| mu1575_3(unknown) = InitializeNonLocal : -# 1575| r1575_4(glval) = VariableAddress[#this] : -# 1575| mu1575_5(glval) = InitializeParameter[#this] : &:r1575_4 -# 1575| r1575_6(glval) = Load[#this] : &:r1575_4, ~m? -# 1575| mu1575_7(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1575_6 -# 1576| r1576_1(glval) = VariableAddress[#return] : -# 1576| r1576_2(glval) = VariableAddress[#this] : -# 1576| r1576_3(StructuredBindingTupleRefGet *) = Load[#this] : &:r1576_2, ~m? -# 1576| r1576_4(glval) = FieldAddress[r] : r1576_3 -# 1576| r1576_5(int &) = Load[?] : &:r1576_4, ~m? -# 1576| r1576_6(glval) = CopyValue : r1576_5 -# 1576| r1576_7(int &) = CopyValue : r1576_6 -# 1576| mu1576_8(int &) = Store[#return] : &:r1576_1, r1576_7 -# 1575| v1575_8(void) = ReturnIndirection[#this] : &:r1575_6, ~m? -# 1575| r1575_9(glval) = VariableAddress[#return] : -# 1575| v1575_10(void) = ReturnValue : &:r1575_9, ~m? -# 1575| v1575_11(void) = AliasedUse : ~m? -# 1575| v1575_12(void) = ExitFunction : +# 1577| std::tuple_element::type StructuredBindingTupleRefGet::get() +# 1577| Block 0 +# 1577| v1577_1(void) = EnterFunction : +# 1577| mu1577_2(unknown) = AliasedDefinition : +# 1577| mu1577_3(unknown) = InitializeNonLocal : +# 1577| r1577_4(glval) = VariableAddress[#this] : +# 1577| mu1577_5(glval) = InitializeParameter[#this] : &:r1577_4 +# 1577| r1577_6(glval) = Load[#this] : &:r1577_4, ~m? +# 1577| mu1577_7(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1577_6 +# 1578| r1578_1(glval) = VariableAddress[#return] : +# 1578| r1578_2(glval) = VariableAddress[#this] : +# 1578| r1578_3(StructuredBindingTupleRefGet *) = Load[#this] : &:r1578_2, ~m? +# 1578| r1578_4(glval) = FieldAddress[r] : r1578_3 +# 1578| r1578_5(int &) = Load[?] : &:r1578_4, ~m? +# 1578| r1578_6(glval) = CopyValue : r1578_5 +# 1578| r1578_7(int &) = CopyValue : r1578_6 +# 1578| mu1578_8(int &) = Store[#return] : &:r1578_1, r1578_7 +# 1577| v1577_8(void) = ReturnIndirection[#this] : &:r1577_6, ~m? +# 1577| r1577_9(glval) = VariableAddress[#return] : +# 1577| v1577_10(void) = ReturnValue : &:r1577_9, ~m? +# 1577| v1577_11(void) = AliasedUse : ~m? +# 1577| v1577_12(void) = ExitFunction : -# 1579| void tuple_structured_binding_ref_get() -# 1579| Block 0 -# 1579| v1579_1(void) = EnterFunction : -# 1579| mu1579_2(unknown) = AliasedDefinition : -# 1579| mu1579_3(unknown) = InitializeNonLocal : -# 1580| r1580_1(glval) = VariableAddress[t] : -# 1580| mu1580_2(StructuredBindingTupleRefGet) = Uninitialized[t] : &:r1580_1 -# 1580| r1580_3(glval) = FunctionAddress[StructuredBindingTupleRefGet] : -# 1580| v1580_4(void) = Call[StructuredBindingTupleRefGet] : func:r1580_3, this:r1580_1 -# 1580| mu1580_5(unknown) = ^CallSideEffect : ~m? -# 1580| mu1580_6(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1580_1 -# 1583| r1583_1(glval) = VariableAddress[(unnamed local variable)] : -# 1583| r1583_2(glval) = VariableAddress[t] : -# 1583| r1583_3(StructuredBindingTupleRefGet) = Load[t] : &:r1583_2, ~m? -# 1583| mu1583_4(StructuredBindingTupleRefGet) = Store[(unnamed local variable)] : &:r1583_1, r1583_3 -# 1583| r1583_5(glval) = VariableAddress[i] : -# 1583| r1583_6(glval) = VariableAddress[(unnamed local variable)] : -# 1583| r1583_7(glval) = FunctionAddress[get] : -# 1583| r1583_8(int &) = Call[get] : func:r1583_7, this:r1583_6 -# 1583| mu1583_9(unknown) = ^CallSideEffect : ~m? -# 1583| v1583_10(void) = ^IndirectReadSideEffect[-1] : &:r1583_6, ~m? -# 1583| mu1583_11(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1583_6 -# 1583| r1583_12(glval) = CopyValue : r1583_8 -# 1583| r1583_13(int &) = CopyValue : r1583_12 -# 1583| mu1583_14(int &) = Store[i] : &:r1583_5, r1583_13 -# 1583| r1583_15(glval) = VariableAddress[d] : -# 1583| r1583_16(glval) = VariableAddress[(unnamed local variable)] : -# 1583| r1583_17(glval) = FunctionAddress[get] : -# 1583| r1583_18(double &) = Call[get] : func:r1583_17, this:r1583_16 -# 1583| mu1583_19(unknown) = ^CallSideEffect : ~m? -# 1583| v1583_20(void) = ^IndirectReadSideEffect[-1] : &:r1583_16, ~m? -# 1583| mu1583_21(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1583_16 -# 1583| r1583_22(glval) = CopyValue : r1583_18 -# 1583| r1583_23(double &) = CopyValue : r1583_22 -# 1583| mu1583_24(double &) = Store[d] : &:r1583_15, r1583_23 -# 1583| r1583_25(glval) = VariableAddress[r] : -# 1583| r1583_26(glval) = VariableAddress[(unnamed local variable)] : -# 1583| r1583_27(glval) = FunctionAddress[get] : -# 1583| r1583_28(int &) = Call[get] : func:r1583_27, this:r1583_26 -# 1583| mu1583_29(unknown) = ^CallSideEffect : ~m? -# 1583| v1583_30(void) = ^IndirectReadSideEffect[-1] : &:r1583_26, ~m? -# 1583| mu1583_31(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1583_26 -# 1583| r1583_32(glval) = CopyValue : r1583_28 -# 1583| r1583_33(int &) = CopyValue : r1583_32 -# 1583| mu1583_34(int &) = Store[r] : &:r1583_25, r1583_33 -# 1584| r1584_1(double) = Constant[4.0] : -# 1584| r1584_2(glval) = VariableAddress[d] : -# 1584| r1584_3(double &) = Load[d] : &:r1584_2, ~m? -# 1584| r1584_4(glval) = CopyValue : r1584_3 -# 1584| mu1584_5(double) = Store[?] : &:r1584_4, r1584_1 -# 1585| r1585_1(glval) = VariableAddress[rd] : -# 1585| r1585_2(glval) = VariableAddress[d] : -# 1585| r1585_3(double &) = Load[d] : &:r1585_2, ~m? -# 1585| r1585_4(glval) = CopyValue : r1585_3 -# 1585| r1585_5(double &) = CopyValue : r1585_4 -# 1585| mu1585_6(double &) = Store[rd] : &:r1585_1, r1585_5 -# 1586| r1586_1(glval) = VariableAddress[v] : -# 1586| r1586_2(glval) = VariableAddress[i] : -# 1586| r1586_3(int &) = Load[i] : &:r1586_2, ~m? -# 1586| r1586_4(int) = Load[?] : &:r1586_3, ~m? -# 1586| mu1586_5(int) = Store[v] : &:r1586_1, r1586_4 -# 1587| r1587_1(int) = Constant[5] : -# 1587| r1587_2(glval) = VariableAddress[r] : -# 1587| r1587_3(int &) = Load[r] : &:r1587_2, ~m? -# 1587| r1587_4(glval) = CopyValue : r1587_3 -# 1587| mu1587_5(int) = Store[?] : &:r1587_4, r1587_1 -# 1588| r1588_1(glval) = VariableAddress[rr] : -# 1588| r1588_2(glval) = VariableAddress[r] : -# 1588| r1588_3(int &) = Load[r] : &:r1588_2, ~m? -# 1588| r1588_4(glval) = CopyValue : r1588_3 -# 1588| r1588_5(int &) = CopyValue : r1588_4 -# 1588| mu1588_6(int &) = Store[rr] : &:r1588_1, r1588_5 -# 1589| r1589_1(glval) = VariableAddress[w] : +# 1581| void tuple_structured_binding_ref_get() +# 1581| Block 0 +# 1581| v1581_1(void) = EnterFunction : +# 1581| mu1581_2(unknown) = AliasedDefinition : +# 1581| mu1581_3(unknown) = InitializeNonLocal : +# 1582| r1582_1(glval) = VariableAddress[t] : +# 1582| mu1582_2(StructuredBindingTupleRefGet) = Uninitialized[t] : &:r1582_1 +# 1582| r1582_3(glval) = FunctionAddress[StructuredBindingTupleRefGet] : +# 1582| v1582_4(void) = Call[StructuredBindingTupleRefGet] : func:r1582_3, this:r1582_1 +# 1582| mu1582_5(unknown) = ^CallSideEffect : ~m? +# 1582| mu1582_6(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1582_1 +# 1585| r1585_1(glval) = VariableAddress[(unnamed local variable)] : +# 1585| r1585_2(glval) = VariableAddress[t] : +# 1585| r1585_3(StructuredBindingTupleRefGet) = Load[t] : &:r1585_2, ~m? +# 1585| mu1585_4(StructuredBindingTupleRefGet) = Store[(unnamed local variable)] : &:r1585_1, r1585_3 +# 1585| r1585_5(glval) = VariableAddress[i] : +# 1585| r1585_6(glval) = VariableAddress[(unnamed local variable)] : +# 1585| r1585_7(glval) = FunctionAddress[get] : +# 1585| r1585_8(int &) = Call[get] : func:r1585_7, this:r1585_6 +# 1585| mu1585_9(unknown) = ^CallSideEffect : ~m? +# 1585| v1585_10(void) = ^IndirectReadSideEffect[-1] : &:r1585_6, ~m? +# 1585| mu1585_11(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1585_6 +# 1585| r1585_12(glval) = CopyValue : r1585_8 +# 1585| r1585_13(int &) = CopyValue : r1585_12 +# 1585| mu1585_14(int &) = Store[i] : &:r1585_5, r1585_13 +# 1585| r1585_15(glval) = VariableAddress[d] : +# 1585| r1585_16(glval) = VariableAddress[(unnamed local variable)] : +# 1585| r1585_17(glval) = FunctionAddress[get] : +# 1585| r1585_18(double &) = Call[get] : func:r1585_17, this:r1585_16 +# 1585| mu1585_19(unknown) = ^CallSideEffect : ~m? +# 1585| v1585_20(void) = ^IndirectReadSideEffect[-1] : &:r1585_16, ~m? +# 1585| mu1585_21(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1585_16 +# 1585| r1585_22(glval) = CopyValue : r1585_18 +# 1585| r1585_23(double &) = CopyValue : r1585_22 +# 1585| mu1585_24(double &) = Store[d] : &:r1585_15, r1585_23 +# 1585| r1585_25(glval) = VariableAddress[r] : +# 1585| r1585_26(glval) = VariableAddress[(unnamed local variable)] : +# 1585| r1585_27(glval) = FunctionAddress[get] : +# 1585| r1585_28(int &) = Call[get] : func:r1585_27, this:r1585_26 +# 1585| mu1585_29(unknown) = ^CallSideEffect : ~m? +# 1585| v1585_30(void) = ^IndirectReadSideEffect[-1] : &:r1585_26, ~m? +# 1585| mu1585_31(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1585_26 +# 1585| r1585_32(glval) = CopyValue : r1585_28 +# 1585| r1585_33(int &) = CopyValue : r1585_32 +# 1585| mu1585_34(int &) = Store[r] : &:r1585_25, r1585_33 +# 1586| r1586_1(double) = Constant[4.0] : +# 1586| r1586_2(glval) = VariableAddress[d] : +# 1586| r1586_3(double &) = Load[d] : &:r1586_2, ~m? +# 1586| r1586_4(glval) = CopyValue : r1586_3 +# 1586| mu1586_5(double) = Store[?] : &:r1586_4, r1586_1 +# 1587| r1587_1(glval) = VariableAddress[rd] : +# 1587| r1587_2(glval) = VariableAddress[d] : +# 1587| r1587_3(double &) = Load[d] : &:r1587_2, ~m? +# 1587| r1587_4(glval) = CopyValue : r1587_3 +# 1587| r1587_5(double &) = CopyValue : r1587_4 +# 1587| mu1587_6(double &) = Store[rd] : &:r1587_1, r1587_5 +# 1588| r1588_1(glval) = VariableAddress[v] : +# 1588| r1588_2(glval) = VariableAddress[i] : +# 1588| r1588_3(int &) = Load[i] : &:r1588_2, ~m? +# 1588| r1588_4(int) = Load[?] : &:r1588_3, ~m? +# 1588| mu1588_5(int) = Store[v] : &:r1588_1, r1588_4 +# 1589| r1589_1(int) = Constant[5] : # 1589| r1589_2(glval) = VariableAddress[r] : # 1589| r1589_3(int &) = Load[r] : &:r1589_2, ~m? -# 1589| r1589_4(int) = Load[?] : &:r1589_3, ~m? -# 1589| mu1589_5(int) = Store[w] : &:r1589_1, r1589_4 -# 1593| r1593_1(glval) = VariableAddress[unnamed_local_variable] : -# 1593| r1593_2(glval) = VariableAddress[t] : -# 1593| r1593_3(StructuredBindingTupleRefGet) = Load[t] : &:r1593_2, ~m? -# 1593| mu1593_4(StructuredBindingTupleRefGet) = Store[unnamed_local_variable] : &:r1593_1, r1593_3 -# 1594| r1594_1(glval) = VariableAddress[i] : -# 1594| r1594_2(glval) = VariableAddress[unnamed_local_variable] : -# 1594| r1594_3(glval) = FunctionAddress[get] : -# 1594| r1594_4(int &) = Call[get] : func:r1594_3, this:r1594_2 -# 1594| mu1594_5(unknown) = ^CallSideEffect : ~m? -# 1594| v1594_6(void) = ^IndirectReadSideEffect[-1] : &:r1594_2, ~m? -# 1594| mu1594_7(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1594_2 -# 1594| r1594_8(glval) = CopyValue : r1594_4 -# 1594| r1594_9(int &) = CopyValue : r1594_8 -# 1594| mu1594_10(int &) = Store[i] : &:r1594_1, r1594_9 -# 1595| r1595_1(glval) = VariableAddress[d] : -# 1595| r1595_2(glval) = VariableAddress[unnamed_local_variable] : -# 1595| r1595_3(glval) = FunctionAddress[get] : -# 1595| r1595_4(double &) = Call[get] : func:r1595_3, this:r1595_2 -# 1595| mu1595_5(unknown) = ^CallSideEffect : ~m? -# 1595| v1595_6(void) = ^IndirectReadSideEffect[-1] : &:r1595_2, ~m? -# 1595| mu1595_7(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1595_2 -# 1595| r1595_8(glval) = CopyValue : r1595_4 -# 1595| r1595_9(double &) = CopyValue : r1595_8 -# 1595| mu1595_10(double &) = Store[d] : &:r1595_1, r1595_9 -# 1596| r1596_1(glval) = VariableAddress[r] : +# 1589| r1589_4(glval) = CopyValue : r1589_3 +# 1589| mu1589_5(int) = Store[?] : &:r1589_4, r1589_1 +# 1590| r1590_1(glval) = VariableAddress[rr] : +# 1590| r1590_2(glval) = VariableAddress[r] : +# 1590| r1590_3(int &) = Load[r] : &:r1590_2, ~m? +# 1590| r1590_4(glval) = CopyValue : r1590_3 +# 1590| r1590_5(int &) = CopyValue : r1590_4 +# 1590| mu1590_6(int &) = Store[rr] : &:r1590_1, r1590_5 +# 1591| r1591_1(glval) = VariableAddress[w] : +# 1591| r1591_2(glval) = VariableAddress[r] : +# 1591| r1591_3(int &) = Load[r] : &:r1591_2, ~m? +# 1591| r1591_4(int) = Load[?] : &:r1591_3, ~m? +# 1591| mu1591_5(int) = Store[w] : &:r1591_1, r1591_4 +# 1595| r1595_1(glval) = VariableAddress[unnamed_local_variable] : +# 1595| r1595_2(glval) = VariableAddress[t] : +# 1595| r1595_3(StructuredBindingTupleRefGet) = Load[t] : &:r1595_2, ~m? +# 1595| mu1595_4(StructuredBindingTupleRefGet) = Store[unnamed_local_variable] : &:r1595_1, r1595_3 +# 1596| r1596_1(glval) = VariableAddress[i] : # 1596| r1596_2(glval) = VariableAddress[unnamed_local_variable] : # 1596| r1596_3(glval) = FunctionAddress[get] : # 1596| r1596_4(int &) = Call[get] : func:r1596_3, this:r1596_2 @@ -8778,1219 +8758,1225 @@ ir.cpp: # 1596| mu1596_7(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1596_2 # 1596| r1596_8(glval) = CopyValue : r1596_4 # 1596| r1596_9(int &) = CopyValue : r1596_8 -# 1596| mu1596_10(int &) = Store[r] : &:r1596_1, r1596_9 -# 1597| r1597_1(double) = Constant[4.0] : -# 1597| r1597_2(glval) = VariableAddress[d] : -# 1597| r1597_3(double &) = Load[d] : &:r1597_2, ~m? -# 1597| r1597_4(glval) = CopyValue : r1597_3 -# 1597| mu1597_5(double) = Store[?] : &:r1597_4, r1597_1 -# 1598| r1598_1(glval) = VariableAddress[rd] : -# 1598| r1598_2(glval) = VariableAddress[d] : -# 1598| r1598_3(double &) = Load[d] : &:r1598_2, ~m? -# 1598| r1598_4(glval) = CopyValue : r1598_3 -# 1598| r1598_5(double &) = CopyValue : r1598_4 -# 1598| mu1598_6(double &) = Store[rd] : &:r1598_1, r1598_5 -# 1599| r1599_1(glval) = VariableAddress[v] : -# 1599| r1599_2(glval) = VariableAddress[i] : -# 1599| r1599_3(int &) = Load[i] : &:r1599_2, ~m? -# 1599| r1599_4(int) = Load[?] : &:r1599_3, ~m? -# 1599| mu1599_5(int) = Store[v] : &:r1599_1, r1599_4 -# 1600| r1600_1(int) = Constant[5] : -# 1600| r1600_2(glval) = VariableAddress[r] : -# 1600| r1600_3(int &) = Load[r] : &:r1600_2, ~m? -# 1600| r1600_4(glval) = CopyValue : r1600_3 -# 1600| mu1600_5(int) = Store[?] : &:r1600_4, r1600_1 -# 1601| r1601_1(glval) = VariableAddress[rr] : -# 1601| r1601_2(glval) = VariableAddress[r] : -# 1601| r1601_3(int &) = Load[r] : &:r1601_2, ~m? -# 1601| r1601_4(glval) = CopyValue : r1601_3 -# 1601| r1601_5(int &) = CopyValue : r1601_4 -# 1601| mu1601_6(int &) = Store[rr] : &:r1601_1, r1601_5 -# 1602| r1602_1(glval) = VariableAddress[w] : +# 1596| mu1596_10(int &) = Store[i] : &:r1596_1, r1596_9 +# 1597| r1597_1(glval) = VariableAddress[d] : +# 1597| r1597_2(glval) = VariableAddress[unnamed_local_variable] : +# 1597| r1597_3(glval) = FunctionAddress[get] : +# 1597| r1597_4(double &) = Call[get] : func:r1597_3, this:r1597_2 +# 1597| mu1597_5(unknown) = ^CallSideEffect : ~m? +# 1597| v1597_6(void) = ^IndirectReadSideEffect[-1] : &:r1597_2, ~m? +# 1597| mu1597_7(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1597_2 +# 1597| r1597_8(glval) = CopyValue : r1597_4 +# 1597| r1597_9(double &) = CopyValue : r1597_8 +# 1597| mu1597_10(double &) = Store[d] : &:r1597_1, r1597_9 +# 1598| r1598_1(glval) = VariableAddress[r] : +# 1598| r1598_2(glval) = VariableAddress[unnamed_local_variable] : +# 1598| r1598_3(glval) = FunctionAddress[get] : +# 1598| r1598_4(int &) = Call[get] : func:r1598_3, this:r1598_2 +# 1598| mu1598_5(unknown) = ^CallSideEffect : ~m? +# 1598| v1598_6(void) = ^IndirectReadSideEffect[-1] : &:r1598_2, ~m? +# 1598| mu1598_7(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1598_2 +# 1598| r1598_8(glval) = CopyValue : r1598_4 +# 1598| r1598_9(int &) = CopyValue : r1598_8 +# 1598| mu1598_10(int &) = Store[r] : &:r1598_1, r1598_9 +# 1599| r1599_1(double) = Constant[4.0] : +# 1599| r1599_2(glval) = VariableAddress[d] : +# 1599| r1599_3(double &) = Load[d] : &:r1599_2, ~m? +# 1599| r1599_4(glval) = CopyValue : r1599_3 +# 1599| mu1599_5(double) = Store[?] : &:r1599_4, r1599_1 +# 1600| r1600_1(glval) = VariableAddress[rd] : +# 1600| r1600_2(glval) = VariableAddress[d] : +# 1600| r1600_3(double &) = Load[d] : &:r1600_2, ~m? +# 1600| r1600_4(glval) = CopyValue : r1600_3 +# 1600| r1600_5(double &) = CopyValue : r1600_4 +# 1600| mu1600_6(double &) = Store[rd] : &:r1600_1, r1600_5 +# 1601| r1601_1(glval) = VariableAddress[v] : +# 1601| r1601_2(glval) = VariableAddress[i] : +# 1601| r1601_3(int &) = Load[i] : &:r1601_2, ~m? +# 1601| r1601_4(int) = Load[?] : &:r1601_3, ~m? +# 1601| mu1601_5(int) = Store[v] : &:r1601_1, r1601_4 +# 1602| r1602_1(int) = Constant[5] : # 1602| r1602_2(glval) = VariableAddress[r] : # 1602| r1602_3(int &) = Load[r] : &:r1602_2, ~m? -# 1602| r1602_4(int) = Load[?] : &:r1602_3, ~m? -# 1602| mu1602_5(int) = Store[w] : &:r1602_1, r1602_4 -# 1604| v1604_1(void) = NoOp : -# 1579| v1579_4(void) = ReturnVoid : -# 1579| v1579_5(void) = AliasedUse : ~m? -# 1579| v1579_6(void) = ExitFunction : +# 1602| r1602_4(glval) = CopyValue : r1602_3 +# 1602| mu1602_5(int) = Store[?] : &:r1602_4, r1602_1 +# 1603| r1603_1(glval) = VariableAddress[rr] : +# 1603| r1603_2(glval) = VariableAddress[r] : +# 1603| r1603_3(int &) = Load[r] : &:r1603_2, ~m? +# 1603| r1603_4(glval) = CopyValue : r1603_3 +# 1603| r1603_5(int &) = CopyValue : r1603_4 +# 1603| mu1603_6(int &) = Store[rr] : &:r1603_1, r1603_5 +# 1604| r1604_1(glval) = VariableAddress[w] : +# 1604| r1604_2(glval) = VariableAddress[r] : +# 1604| r1604_3(int &) = Load[r] : &:r1604_2, ~m? +# 1604| r1604_4(int) = Load[?] : &:r1604_3, ~m? +# 1604| mu1604_5(int) = Store[w] : &:r1604_1, r1604_4 +# 1606| v1606_1(void) = NoOp : +# 1581| v1581_4(void) = ReturnVoid : +# 1581| v1581_5(void) = AliasedUse : ~m? +# 1581| v1581_6(void) = ExitFunction : -# 1606| void StructuredBindingTupleNoRefGet::StructuredBindingTupleNoRefGet() -# 1606| Block 0 -# 1606| v1606_1(void) = EnterFunction : -# 1606| mu1606_2(unknown) = AliasedDefinition : -# 1606| mu1606_3(unknown) = InitializeNonLocal : -# 1606| r1606_4(glval) = VariableAddress[#this] : -# 1606| mu1606_5(glval) = InitializeParameter[#this] : &:r1606_4 -# 1606| r1606_6(glval) = Load[#this] : &:r1606_4, ~m? -# 1606| mu1606_7(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1606_6 -# 1606| v1606_8(void) = NoOp : -# 1606| v1606_9(void) = ReturnIndirection[#this] : &:r1606_6, ~m? -# 1606| v1606_10(void) = ReturnVoid : -# 1606| v1606_11(void) = AliasedUse : ~m? -# 1606| v1606_12(void) = ExitFunction : +# 1608| void StructuredBindingTupleNoRefGet::StructuredBindingTupleNoRefGet() +# 1608| Block 0 +# 1608| v1608_1(void) = EnterFunction : +# 1608| mu1608_2(unknown) = AliasedDefinition : +# 1608| mu1608_3(unknown) = InitializeNonLocal : +# 1608| r1608_4(glval) = VariableAddress[#this] : +# 1608| mu1608_5(glval) = InitializeParameter[#this] : &:r1608_4 +# 1608| r1608_6(glval) = Load[#this] : &:r1608_4, ~m? +# 1608| mu1608_7(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1608_6 +# 1608| v1608_8(void) = NoOp : +# 1608| v1608_9(void) = ReturnIndirection[#this] : &:r1608_6, ~m? +# 1608| v1608_10(void) = ReturnVoid : +# 1608| v1608_11(void) = AliasedUse : ~m? +# 1608| v1608_12(void) = ExitFunction : -# 1633| std::tuple_element::type StructuredBindingTupleNoRefGet::get() -# 1633| Block 0 -# 1633| v1633_1(void) = EnterFunction : -# 1633| mu1633_2(unknown) = AliasedDefinition : -# 1633| mu1633_3(unknown) = InitializeNonLocal : -# 1633| r1633_4(glval) = VariableAddress[#this] : -# 1633| mu1633_5(glval) = InitializeParameter[#this] : &:r1633_4 -# 1633| r1633_6(glval) = Load[#this] : &:r1633_4, ~m? -# 1633| mu1633_7(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1633_6 -# 1634| r1634_1(glval) = VariableAddress[#return] : -# 1634| r1634_2(glval) = VariableAddress[#this] : -# 1634| r1634_3(StructuredBindingTupleNoRefGet *) = Load[#this] : &:r1634_2, ~m? -# 1634| r1634_4(glval) = FieldAddress[i] : r1634_3 -# 1634| r1634_5(int) = Load[?] : &:r1634_4, ~m? -# 1634| mu1634_6(int) = Store[#return] : &:r1634_1, r1634_5 -# 1633| v1633_8(void) = ReturnIndirection[#this] : &:r1633_6, ~m? -# 1633| r1633_9(glval) = VariableAddress[#return] : -# 1633| v1633_10(void) = ReturnValue : &:r1633_9, ~m? -# 1633| v1633_11(void) = AliasedUse : ~m? -# 1633| v1633_12(void) = ExitFunction : +# 1635| std::tuple_element::type StructuredBindingTupleNoRefGet::get() +# 1635| Block 0 +# 1635| v1635_1(void) = EnterFunction : +# 1635| mu1635_2(unknown) = AliasedDefinition : +# 1635| mu1635_3(unknown) = InitializeNonLocal : +# 1635| r1635_4(glval) = VariableAddress[#this] : +# 1635| mu1635_5(glval) = InitializeParameter[#this] : &:r1635_4 +# 1635| r1635_6(glval) = Load[#this] : &:r1635_4, ~m? +# 1635| mu1635_7(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1635_6 +# 1636| r1636_1(glval) = VariableAddress[#return] : +# 1636| r1636_2(glval) = VariableAddress[#this] : +# 1636| r1636_3(StructuredBindingTupleNoRefGet *) = Load[#this] : &:r1636_2, ~m? +# 1636| r1636_4(glval) = FieldAddress[i] : r1636_3 +# 1636| r1636_5(int) = Load[?] : &:r1636_4, ~m? +# 1636| mu1636_6(int) = Store[#return] : &:r1636_1, r1636_5 +# 1635| v1635_8(void) = ReturnIndirection[#this] : &:r1635_6, ~m? +# 1635| r1635_9(glval) = VariableAddress[#return] : +# 1635| v1635_10(void) = ReturnValue : &:r1635_9, ~m? +# 1635| v1635_11(void) = AliasedUse : ~m? +# 1635| v1635_12(void) = ExitFunction : -# 1637| std::tuple_element::type StructuredBindingTupleNoRefGet::get() -# 1637| Block 0 -# 1637| v1637_1(void) = EnterFunction : -# 1637| mu1637_2(unknown) = AliasedDefinition : -# 1637| mu1637_3(unknown) = InitializeNonLocal : -# 1637| r1637_4(glval) = VariableAddress[#this] : -# 1637| mu1637_5(glval) = InitializeParameter[#this] : &:r1637_4 -# 1637| r1637_6(glval) = Load[#this] : &:r1637_4, ~m? -# 1637| mu1637_7(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1637_6 -# 1638| r1638_1(glval) = VariableAddress[#return] : -# 1638| r1638_2(glval) = VariableAddress[#this] : -# 1638| r1638_3(StructuredBindingTupleNoRefGet *) = Load[#this] : &:r1638_2, ~m? -# 1638| r1638_4(glval) = FieldAddress[r] : r1638_3 -# 1638| r1638_5(int &) = Load[?] : &:r1638_4, ~m? -# 1638| r1638_6(glval) = CopyValue : r1638_5 -# 1638| r1638_7(int &) = CopyValue : r1638_6 -# 1638| mu1638_8(int &) = Store[#return] : &:r1638_1, r1638_7 -# 1637| v1637_8(void) = ReturnIndirection[#this] : &:r1637_6, ~m? -# 1637| r1637_9(glval) = VariableAddress[#return] : -# 1637| v1637_10(void) = ReturnValue : &:r1637_9, ~m? -# 1637| v1637_11(void) = AliasedUse : ~m? -# 1637| v1637_12(void) = ExitFunction : +# 1639| std::tuple_element::type StructuredBindingTupleNoRefGet::get() +# 1639| Block 0 +# 1639| v1639_1(void) = EnterFunction : +# 1639| mu1639_2(unknown) = AliasedDefinition : +# 1639| mu1639_3(unknown) = InitializeNonLocal : +# 1639| r1639_4(glval) = VariableAddress[#this] : +# 1639| mu1639_5(glval) = InitializeParameter[#this] : &:r1639_4 +# 1639| r1639_6(glval) = Load[#this] : &:r1639_4, ~m? +# 1639| mu1639_7(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1639_6 +# 1640| r1640_1(glval) = VariableAddress[#return] : +# 1640| r1640_2(glval) = VariableAddress[#this] : +# 1640| r1640_3(StructuredBindingTupleNoRefGet *) = Load[#this] : &:r1640_2, ~m? +# 1640| r1640_4(glval) = FieldAddress[r] : r1640_3 +# 1640| r1640_5(int &) = Load[?] : &:r1640_4, ~m? +# 1640| r1640_6(glval) = CopyValue : r1640_5 +# 1640| r1640_7(int &) = CopyValue : r1640_6 +# 1640| mu1640_8(int &) = Store[#return] : &:r1640_1, r1640_7 +# 1639| v1639_8(void) = ReturnIndirection[#this] : &:r1639_6, ~m? +# 1639| r1639_9(glval) = VariableAddress[#return] : +# 1639| v1639_10(void) = ReturnValue : &:r1639_9, ~m? +# 1639| v1639_11(void) = AliasedUse : ~m? +# 1639| v1639_12(void) = ExitFunction : -# 1641| std::tuple_element::type StructuredBindingTupleNoRefGet::get() -# 1641| Block 0 -# 1641| v1641_1(void) = EnterFunction : -# 1641| mu1641_2(unknown) = AliasedDefinition : -# 1641| mu1641_3(unknown) = InitializeNonLocal : -# 1641| r1641_4(glval) = VariableAddress[#this] : -# 1641| mu1641_5(glval) = InitializeParameter[#this] : &:r1641_4 -# 1641| r1641_6(glval) = Load[#this] : &:r1641_4, ~m? -# 1641| mu1641_7(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1641_6 -# 1642| r1642_1(glval) = VariableAddress[#return] : -# 1642| r1642_2(glval) = VariableAddress[#temp1642:12] : -# 1642| r1642_3(int) = Constant[5] : -# 1642| mu1642_4(int) = Store[#temp1642:12] : &:r1642_2, r1642_3 -# 1642| r1642_5(int &) = CopyValue : r1642_2 -# 1642| mu1642_6(int &&) = Store[#return] : &:r1642_1, r1642_5 -# 1641| v1641_8(void) = ReturnIndirection[#this] : &:r1641_6, ~m? -# 1641| r1641_9(glval) = VariableAddress[#return] : -# 1641| v1641_10(void) = ReturnValue : &:r1641_9, ~m? -# 1641| v1641_11(void) = AliasedUse : ~m? -# 1641| v1641_12(void) = ExitFunction : +# 1643| std::tuple_element::type StructuredBindingTupleNoRefGet::get() +# 1643| Block 0 +# 1643| v1643_1(void) = EnterFunction : +# 1643| mu1643_2(unknown) = AliasedDefinition : +# 1643| mu1643_3(unknown) = InitializeNonLocal : +# 1643| r1643_4(glval) = VariableAddress[#this] : +# 1643| mu1643_5(glval) = InitializeParameter[#this] : &:r1643_4 +# 1643| r1643_6(glval) = Load[#this] : &:r1643_4, ~m? +# 1643| mu1643_7(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1643_6 +# 1644| r1644_1(glval) = VariableAddress[#return] : +# 1644| r1644_2(glval) = VariableAddress[#temp1644:12] : +# 1644| r1644_3(int) = Constant[5] : +# 1644| mu1644_4(int) = Store[#temp1644:12] : &:r1644_2, r1644_3 +# 1644| r1644_5(int &) = CopyValue : r1644_2 +# 1644| mu1644_6(int &&) = Store[#return] : &:r1644_1, r1644_5 +# 1643| v1643_8(void) = ReturnIndirection[#this] : &:r1643_6, ~m? +# 1643| r1643_9(glval) = VariableAddress[#return] : +# 1643| v1643_10(void) = ReturnValue : &:r1643_9, ~m? +# 1643| v1643_11(void) = AliasedUse : ~m? +# 1643| v1643_12(void) = ExitFunction : -# 1645| void tuple_structured_binding_no_ref_get() -# 1645| Block 0 -# 1645| v1645_1(void) = EnterFunction : -# 1645| mu1645_2(unknown) = AliasedDefinition : -# 1645| mu1645_3(unknown) = InitializeNonLocal : -# 1646| r1646_1(glval) = VariableAddress[t] : -# 1646| mu1646_2(StructuredBindingTupleNoRefGet) = Uninitialized[t] : &:r1646_1 -# 1646| r1646_3(glval) = FunctionAddress[StructuredBindingTupleNoRefGet] : -# 1646| v1646_4(void) = Call[StructuredBindingTupleNoRefGet] : func:r1646_3, this:r1646_1 -# 1646| mu1646_5(unknown) = ^CallSideEffect : ~m? -# 1646| mu1646_6(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1646_1 -# 1649| r1649_1(glval) = VariableAddress[(unnamed local variable)] : -# 1649| r1649_2(glval) = VariableAddress[t] : -# 1649| r1649_3(StructuredBindingTupleNoRefGet &) = CopyValue : r1649_2 -# 1649| mu1649_4(StructuredBindingTupleNoRefGet &) = Store[(unnamed local variable)] : &:r1649_1, r1649_3 -# 1649| r1649_5(glval) = VariableAddress[i] : -# 1649| r1649_6(glval) = VariableAddress[#temp1649:16] : -# 1649| r1649_7(glval) = VariableAddress[(unnamed local variable)] : -# 1649| r1649_8(StructuredBindingTupleNoRefGet &) = Load[(unnamed local variable)] : &:r1649_7, ~m? -# 1649| r1649_9(glval) = CopyValue : r1649_8 -# 1649| r1649_10(glval) = FunctionAddress[get] : -# 1649| r1649_11(int) = Call[get] : func:r1649_10, this:r1649_9 -# 1649| mu1649_12(unknown) = ^CallSideEffect : ~m? -# 1649| v1649_13(void) = ^IndirectReadSideEffect[-1] : &:r1649_9, ~m? -# 1649| mu1649_14(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1649_9 -# 1649| mu1649_15(int) = Store[#temp1649:16] : &:r1649_6, r1649_11 -# 1649| r1649_16(int &) = CopyValue : r1649_6 -# 1649| mu1649_17(int &&) = Store[i] : &:r1649_5, r1649_16 -# 1649| r1649_18(glval) = VariableAddress[r] : -# 1649| r1649_19(glval) = VariableAddress[(unnamed local variable)] : -# 1649| r1649_20(StructuredBindingTupleNoRefGet &) = Load[(unnamed local variable)] : &:r1649_19, ~m? -# 1649| r1649_21(glval) = CopyValue : r1649_20 -# 1649| r1649_22(glval) = FunctionAddress[get] : -# 1649| r1649_23(int &) = Call[get] : func:r1649_22, this:r1649_21 -# 1649| mu1649_24(unknown) = ^CallSideEffect : ~m? -# 1649| v1649_25(void) = ^IndirectReadSideEffect[-1] : &:r1649_21, ~m? -# 1649| mu1649_26(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1649_21 -# 1649| r1649_27(glval) = CopyValue : r1649_23 -# 1649| r1649_28(int &) = CopyValue : r1649_27 -# 1649| mu1649_29(int &) = Store[r] : &:r1649_18, r1649_28 -# 1649| r1649_30(glval) = VariableAddress[rv] : -# 1649| r1649_31(glval) = VariableAddress[(unnamed local variable)] : -# 1649| r1649_32(StructuredBindingTupleNoRefGet &) = Load[(unnamed local variable)] : &:r1649_31, ~m? -# 1649| r1649_33(glval) = CopyValue : r1649_32 -# 1649| r1649_34(glval) = FunctionAddress[get] : -# 1649| r1649_35(int &&) = Call[get] : func:r1649_34, this:r1649_33 -# 1649| mu1649_36(unknown) = ^CallSideEffect : ~m? -# 1649| v1649_37(void) = ^IndirectReadSideEffect[-1] : &:r1649_33, ~m? -# 1649| mu1649_38(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1649_33 -# 1649| r1649_39(glval) = CopyValue : r1649_35 -# 1649| r1649_40(int &) = CopyValue : r1649_39 -# 1649| mu1649_41(int &&) = Store[rv] : &:r1649_30, r1649_40 -# 1650| r1650_1(int) = Constant[4] : -# 1650| r1650_2(glval) = VariableAddress[i] : -# 1650| r1650_3(int &&) = Load[i] : &:r1650_2, ~m? -# 1650| r1650_4(glval) = CopyValue : r1650_3 -# 1650| mu1650_5(int) = Store[?] : &:r1650_4, r1650_1 -# 1651| r1651_1(glval) = VariableAddress[ri] : -# 1651| r1651_2(glval) = VariableAddress[i] : -# 1651| r1651_3(int &&) = Load[i] : &:r1651_2, ~m? -# 1651| r1651_4(glval) = CopyValue : r1651_3 -# 1651| r1651_5(int &) = CopyValue : r1651_4 -# 1651| mu1651_6(int &) = Store[ri] : &:r1651_1, r1651_5 -# 1652| r1652_1(glval) = VariableAddress[v] : +# 1647| void tuple_structured_binding_no_ref_get() +# 1647| Block 0 +# 1647| v1647_1(void) = EnterFunction : +# 1647| mu1647_2(unknown) = AliasedDefinition : +# 1647| mu1647_3(unknown) = InitializeNonLocal : +# 1648| r1648_1(glval) = VariableAddress[t] : +# 1648| mu1648_2(StructuredBindingTupleNoRefGet) = Uninitialized[t] : &:r1648_1 +# 1648| r1648_3(glval) = FunctionAddress[StructuredBindingTupleNoRefGet] : +# 1648| v1648_4(void) = Call[StructuredBindingTupleNoRefGet] : func:r1648_3, this:r1648_1 +# 1648| mu1648_5(unknown) = ^CallSideEffect : ~m? +# 1648| mu1648_6(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1648_1 +# 1651| r1651_1(glval) = VariableAddress[(unnamed local variable)] : +# 1651| r1651_2(glval) = VariableAddress[t] : +# 1651| r1651_3(StructuredBindingTupleNoRefGet &) = CopyValue : r1651_2 +# 1651| mu1651_4(StructuredBindingTupleNoRefGet &) = Store[(unnamed local variable)] : &:r1651_1, r1651_3 +# 1651| r1651_5(glval) = VariableAddress[i] : +# 1651| r1651_6(glval) = VariableAddress[#temp1651:16] : +# 1651| r1651_7(glval) = VariableAddress[(unnamed local variable)] : +# 1651| r1651_8(StructuredBindingTupleNoRefGet &) = Load[(unnamed local variable)] : &:r1651_7, ~m? +# 1651| r1651_9(glval) = CopyValue : r1651_8 +# 1651| r1651_10(glval) = FunctionAddress[get] : +# 1651| r1651_11(int) = Call[get] : func:r1651_10, this:r1651_9 +# 1651| mu1651_12(unknown) = ^CallSideEffect : ~m? +# 1651| v1651_13(void) = ^IndirectReadSideEffect[-1] : &:r1651_9, ~m? +# 1651| mu1651_14(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1651_9 +# 1651| mu1651_15(int) = Store[#temp1651:16] : &:r1651_6, r1651_11 +# 1651| r1651_16(int &) = CopyValue : r1651_6 +# 1651| mu1651_17(int &&) = Store[i] : &:r1651_5, r1651_16 +# 1651| r1651_18(glval) = VariableAddress[r] : +# 1651| r1651_19(glval) = VariableAddress[(unnamed local variable)] : +# 1651| r1651_20(StructuredBindingTupleNoRefGet &) = Load[(unnamed local variable)] : &:r1651_19, ~m? +# 1651| r1651_21(glval) = CopyValue : r1651_20 +# 1651| r1651_22(glval) = FunctionAddress[get] : +# 1651| r1651_23(int &) = Call[get] : func:r1651_22, this:r1651_21 +# 1651| mu1651_24(unknown) = ^CallSideEffect : ~m? +# 1651| v1651_25(void) = ^IndirectReadSideEffect[-1] : &:r1651_21, ~m? +# 1651| mu1651_26(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1651_21 +# 1651| r1651_27(glval) = CopyValue : r1651_23 +# 1651| r1651_28(int &) = CopyValue : r1651_27 +# 1651| mu1651_29(int &) = Store[r] : &:r1651_18, r1651_28 +# 1651| r1651_30(glval) = VariableAddress[rv] : +# 1651| r1651_31(glval) = VariableAddress[(unnamed local variable)] : +# 1651| r1651_32(StructuredBindingTupleNoRefGet &) = Load[(unnamed local variable)] : &:r1651_31, ~m? +# 1651| r1651_33(glval) = CopyValue : r1651_32 +# 1651| r1651_34(glval) = FunctionAddress[get] : +# 1651| r1651_35(int &&) = Call[get] : func:r1651_34, this:r1651_33 +# 1651| mu1651_36(unknown) = ^CallSideEffect : ~m? +# 1651| v1651_37(void) = ^IndirectReadSideEffect[-1] : &:r1651_33, ~m? +# 1651| mu1651_38(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1651_33 +# 1651| r1651_39(glval) = CopyValue : r1651_35 +# 1651| r1651_40(int &) = CopyValue : r1651_39 +# 1651| mu1651_41(int &&) = Store[rv] : &:r1651_30, r1651_40 +# 1652| r1652_1(int) = Constant[4] : # 1652| r1652_2(glval) = VariableAddress[i] : # 1652| r1652_3(int &&) = Load[i] : &:r1652_2, ~m? -# 1652| r1652_4(int) = Load[?] : &:r1652_3, ~m? -# 1652| mu1652_5(int) = Store[v] : &:r1652_1, r1652_4 -# 1653| r1653_1(int) = Constant[5] : -# 1653| r1653_2(glval) = VariableAddress[r] : -# 1653| r1653_3(int &) = Load[r] : &:r1653_2, ~m? +# 1652| r1652_4(glval) = CopyValue : r1652_3 +# 1652| mu1652_5(int) = Store[?] : &:r1652_4, r1652_1 +# 1653| r1653_1(glval) = VariableAddress[ri] : +# 1653| r1653_2(glval) = VariableAddress[i] : +# 1653| r1653_3(int &&) = Load[i] : &:r1653_2, ~m? # 1653| r1653_4(glval) = CopyValue : r1653_3 -# 1653| mu1653_5(int) = Store[?] : &:r1653_4, r1653_1 -# 1654| r1654_1(glval) = VariableAddress[rr] : -# 1654| r1654_2(glval) = VariableAddress[r] : -# 1654| r1654_3(int &) = Load[r] : &:r1654_2, ~m? -# 1654| r1654_4(glval) = CopyValue : r1654_3 -# 1654| r1654_5(int &) = CopyValue : r1654_4 -# 1654| mu1654_6(int &) = Store[rr] : &:r1654_1, r1654_5 -# 1655| r1655_1(glval) = VariableAddress[w] : +# 1653| r1653_5(int &) = CopyValue : r1653_4 +# 1653| mu1653_6(int &) = Store[ri] : &:r1653_1, r1653_5 +# 1654| r1654_1(glval) = VariableAddress[v] : +# 1654| r1654_2(glval) = VariableAddress[i] : +# 1654| r1654_3(int &&) = Load[i] : &:r1654_2, ~m? +# 1654| r1654_4(int) = Load[?] : &:r1654_3, ~m? +# 1654| mu1654_5(int) = Store[v] : &:r1654_1, r1654_4 +# 1655| r1655_1(int) = Constant[5] : # 1655| r1655_2(glval) = VariableAddress[r] : # 1655| r1655_3(int &) = Load[r] : &:r1655_2, ~m? -# 1655| r1655_4(int) = Load[?] : &:r1655_3, ~m? -# 1655| mu1655_5(int) = Store[w] : &:r1655_1, r1655_4 -# 1659| r1659_1(glval) = VariableAddress[unnamed_local_variable] : -# 1659| r1659_2(glval) = VariableAddress[t] : -# 1659| r1659_3(StructuredBindingTupleNoRefGet &) = CopyValue : r1659_2 -# 1659| mu1659_4(StructuredBindingTupleNoRefGet &) = Store[unnamed_local_variable] : &:r1659_1, r1659_3 -# 1660| r1660_1(glval) = VariableAddress[i] : -# 1660| r1660_2(glval) = VariableAddress[#temp1660:20] : -# 1660| r1660_3(glval) = VariableAddress[unnamed_local_variable] : -# 1660| r1660_4(StructuredBindingTupleNoRefGet &) = Load[unnamed_local_variable] : &:r1660_3, ~m? -# 1660| r1660_5(glval) = CopyValue : r1660_4 -# 1660| r1660_6(glval) = FunctionAddress[get] : -# 1660| r1660_7(int) = Call[get] : func:r1660_6, this:r1660_5 -# 1660| mu1660_8(unknown) = ^CallSideEffect : ~m? -# 1660| v1660_9(void) = ^IndirectReadSideEffect[-1] : &:r1660_5, ~m? -# 1660| mu1660_10(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1660_5 -# 1660| mu1660_11(int) = Store[#temp1660:20] : &:r1660_2, r1660_7 -# 1660| r1660_12(int &) = CopyValue : r1660_2 -# 1660| mu1660_13(int &&) = Store[i] : &:r1660_1, r1660_12 -# 1661| r1661_1(glval) = VariableAddress[r] : -# 1661| r1661_2(glval) = VariableAddress[unnamed_local_variable] : -# 1661| r1661_3(StructuredBindingTupleNoRefGet &) = Load[unnamed_local_variable] : &:r1661_2, ~m? -# 1661| r1661_4(glval) = CopyValue : r1661_3 -# 1661| r1661_5(glval) = FunctionAddress[get] : -# 1661| r1661_6(int &) = Call[get] : func:r1661_5, this:r1661_4 -# 1661| mu1661_7(unknown) = ^CallSideEffect : ~m? -# 1661| v1661_8(void) = ^IndirectReadSideEffect[-1] : &:r1661_4, ~m? -# 1661| mu1661_9(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1661_4 -# 1661| r1661_10(glval) = CopyValue : r1661_6 -# 1661| r1661_11(int &) = CopyValue : r1661_10 -# 1661| mu1661_12(int &) = Store[r] : &:r1661_1, r1661_11 -# 1662| r1662_1(glval) = VariableAddress[rv] : -# 1662| r1662_2(glval) = VariableAddress[unnamed_local_variable] : -# 1662| r1662_3(StructuredBindingTupleNoRefGet &) = Load[unnamed_local_variable] : &:r1662_2, ~m? -# 1662| r1662_4(glval) = CopyValue : r1662_3 -# 1662| r1662_5(glval) = FunctionAddress[get] : -# 1662| r1662_6(int &&) = Call[get] : func:r1662_5, this:r1662_4 -# 1662| mu1662_7(unknown) = ^CallSideEffect : ~m? -# 1662| v1662_8(void) = ^IndirectReadSideEffect[-1] : &:r1662_4, ~m? -# 1662| mu1662_9(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1662_4 -# 1662| r1662_10(glval) = CopyValue : r1662_6 -# 1662| r1662_11(int &) = CopyValue : r1662_10 -# 1662| mu1662_12(int &&) = Store[rv] : &:r1662_1, r1662_11 -# 1663| r1663_1(int) = Constant[4] : -# 1663| r1663_2(glval) = VariableAddress[i] : -# 1663| r1663_3(int &&) = Load[i] : &:r1663_2, ~m? -# 1663| r1663_4(glval) = CopyValue : r1663_3 -# 1663| mu1663_5(int) = Store[?] : &:r1663_4, r1663_1 -# 1664| r1664_1(glval) = VariableAddress[ri] : -# 1664| r1664_2(glval) = VariableAddress[i] : -# 1664| r1664_3(int &&) = Load[i] : &:r1664_2, ~m? -# 1664| r1664_4(glval) = CopyValue : r1664_3 -# 1664| r1664_5(int &) = CopyValue : r1664_4 -# 1664| mu1664_6(int &) = Store[ri] : &:r1664_1, r1664_5 -# 1665| r1665_1(glval) = VariableAddress[v] : +# 1655| r1655_4(glval) = CopyValue : r1655_3 +# 1655| mu1655_5(int) = Store[?] : &:r1655_4, r1655_1 +# 1656| r1656_1(glval) = VariableAddress[rr] : +# 1656| r1656_2(glval) = VariableAddress[r] : +# 1656| r1656_3(int &) = Load[r] : &:r1656_2, ~m? +# 1656| r1656_4(glval) = CopyValue : r1656_3 +# 1656| r1656_5(int &) = CopyValue : r1656_4 +# 1656| mu1656_6(int &) = Store[rr] : &:r1656_1, r1656_5 +# 1657| r1657_1(glval) = VariableAddress[w] : +# 1657| r1657_2(glval) = VariableAddress[r] : +# 1657| r1657_3(int &) = Load[r] : &:r1657_2, ~m? +# 1657| r1657_4(int) = Load[?] : &:r1657_3, ~m? +# 1657| mu1657_5(int) = Store[w] : &:r1657_1, r1657_4 +# 1661| r1661_1(glval) = VariableAddress[unnamed_local_variable] : +# 1661| r1661_2(glval) = VariableAddress[t] : +# 1661| r1661_3(StructuredBindingTupleNoRefGet &) = CopyValue : r1661_2 +# 1661| mu1661_4(StructuredBindingTupleNoRefGet &) = Store[unnamed_local_variable] : &:r1661_1, r1661_3 +# 1662| r1662_1(glval) = VariableAddress[i] : +# 1662| r1662_2(glval) = VariableAddress[#temp1662:20] : +# 1662| r1662_3(glval) = VariableAddress[unnamed_local_variable] : +# 1662| r1662_4(StructuredBindingTupleNoRefGet &) = Load[unnamed_local_variable] : &:r1662_3, ~m? +# 1662| r1662_5(glval) = CopyValue : r1662_4 +# 1662| r1662_6(glval) = FunctionAddress[get] : +# 1662| r1662_7(int) = Call[get] : func:r1662_6, this:r1662_5 +# 1662| mu1662_8(unknown) = ^CallSideEffect : ~m? +# 1662| v1662_9(void) = ^IndirectReadSideEffect[-1] : &:r1662_5, ~m? +# 1662| mu1662_10(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1662_5 +# 1662| mu1662_11(int) = Store[#temp1662:20] : &:r1662_2, r1662_7 +# 1662| r1662_12(int &) = CopyValue : r1662_2 +# 1662| mu1662_13(int &&) = Store[i] : &:r1662_1, r1662_12 +# 1663| r1663_1(glval) = VariableAddress[r] : +# 1663| r1663_2(glval) = VariableAddress[unnamed_local_variable] : +# 1663| r1663_3(StructuredBindingTupleNoRefGet &) = Load[unnamed_local_variable] : &:r1663_2, ~m? +# 1663| r1663_4(glval) = CopyValue : r1663_3 +# 1663| r1663_5(glval) = FunctionAddress[get] : +# 1663| r1663_6(int &) = Call[get] : func:r1663_5, this:r1663_4 +# 1663| mu1663_7(unknown) = ^CallSideEffect : ~m? +# 1663| v1663_8(void) = ^IndirectReadSideEffect[-1] : &:r1663_4, ~m? +# 1663| mu1663_9(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1663_4 +# 1663| r1663_10(glval) = CopyValue : r1663_6 +# 1663| r1663_11(int &) = CopyValue : r1663_10 +# 1663| mu1663_12(int &) = Store[r] : &:r1663_1, r1663_11 +# 1664| r1664_1(glval) = VariableAddress[rv] : +# 1664| r1664_2(glval) = VariableAddress[unnamed_local_variable] : +# 1664| r1664_3(StructuredBindingTupleNoRefGet &) = Load[unnamed_local_variable] : &:r1664_2, ~m? +# 1664| r1664_4(glval) = CopyValue : r1664_3 +# 1664| r1664_5(glval) = FunctionAddress[get] : +# 1664| r1664_6(int &&) = Call[get] : func:r1664_5, this:r1664_4 +# 1664| mu1664_7(unknown) = ^CallSideEffect : ~m? +# 1664| v1664_8(void) = ^IndirectReadSideEffect[-1] : &:r1664_4, ~m? +# 1664| mu1664_9(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1664_4 +# 1664| r1664_10(glval) = CopyValue : r1664_6 +# 1664| r1664_11(int &) = CopyValue : r1664_10 +# 1664| mu1664_12(int &&) = Store[rv] : &:r1664_1, r1664_11 +# 1665| r1665_1(int) = Constant[4] : # 1665| r1665_2(glval) = VariableAddress[i] : # 1665| r1665_3(int &&) = Load[i] : &:r1665_2, ~m? -# 1665| r1665_4(int) = Load[?] : &:r1665_3, ~m? -# 1665| mu1665_5(int) = Store[v] : &:r1665_1, r1665_4 -# 1666| r1666_1(int) = Constant[5] : -# 1666| r1666_2(glval) = VariableAddress[r] : -# 1666| r1666_3(int &) = Load[r] : &:r1666_2, ~m? +# 1665| r1665_4(glval) = CopyValue : r1665_3 +# 1665| mu1665_5(int) = Store[?] : &:r1665_4, r1665_1 +# 1666| r1666_1(glval) = VariableAddress[ri] : +# 1666| r1666_2(glval) = VariableAddress[i] : +# 1666| r1666_3(int &&) = Load[i] : &:r1666_2, ~m? # 1666| r1666_4(glval) = CopyValue : r1666_3 -# 1666| mu1666_5(int) = Store[?] : &:r1666_4, r1666_1 -# 1667| r1667_1(glval) = VariableAddress[rr] : -# 1667| r1667_2(glval) = VariableAddress[r] : -# 1667| r1667_3(int &) = Load[r] : &:r1667_2, ~m? -# 1667| r1667_4(glval) = CopyValue : r1667_3 -# 1667| r1667_5(int &) = CopyValue : r1667_4 -# 1667| mu1667_6(int &) = Store[rr] : &:r1667_1, r1667_5 -# 1668| r1668_1(glval) = VariableAddress[w] : +# 1666| r1666_5(int &) = CopyValue : r1666_4 +# 1666| mu1666_6(int &) = Store[ri] : &:r1666_1, r1666_5 +# 1667| r1667_1(glval) = VariableAddress[v] : +# 1667| r1667_2(glval) = VariableAddress[i] : +# 1667| r1667_3(int &&) = Load[i] : &:r1667_2, ~m? +# 1667| r1667_4(int) = Load[?] : &:r1667_3, ~m? +# 1667| mu1667_5(int) = Store[v] : &:r1667_1, r1667_4 +# 1668| r1668_1(int) = Constant[5] : # 1668| r1668_2(glval) = VariableAddress[r] : # 1668| r1668_3(int &) = Load[r] : &:r1668_2, ~m? -# 1668| r1668_4(int) = Load[?] : &:r1668_3, ~m? -# 1668| mu1668_5(int) = Store[w] : &:r1668_1, r1668_4 -# 1670| v1670_1(void) = NoOp : -# 1645| v1645_4(void) = ReturnVoid : -# 1645| v1645_5(void) = AliasedUse : ~m? -# 1645| v1645_6(void) = ExitFunction : +# 1668| r1668_4(glval) = CopyValue : r1668_3 +# 1668| mu1668_5(int) = Store[?] : &:r1668_4, r1668_1 +# 1669| r1669_1(glval) = VariableAddress[rr] : +# 1669| r1669_2(glval) = VariableAddress[r] : +# 1669| r1669_3(int &) = Load[r] : &:r1669_2, ~m? +# 1669| r1669_4(glval) = CopyValue : r1669_3 +# 1669| r1669_5(int &) = CopyValue : r1669_4 +# 1669| mu1669_6(int &) = Store[rr] : &:r1669_1, r1669_5 +# 1670| r1670_1(glval) = VariableAddress[w] : +# 1670| r1670_2(glval) = VariableAddress[r] : +# 1670| r1670_3(int &) = Load[r] : &:r1670_2, ~m? +# 1670| r1670_4(int) = Load[?] : &:r1670_3, ~m? +# 1670| mu1670_5(int) = Store[w] : &:r1670_1, r1670_4 +# 1672| v1672_1(void) = NoOp : +# 1647| v1647_4(void) = ReturnVoid : +# 1647| v1647_5(void) = AliasedUse : ~m? +# 1647| v1647_6(void) = ExitFunction : -# 1672| void array_structured_binding_non_ref_init() -# 1672| Block 0 -# 1672| v1672_1(void) = EnterFunction : -# 1672| mu1672_2(unknown) = AliasedDefinition : -# 1672| mu1672_3(unknown) = InitializeNonLocal : -# 1673| r1673_1(glval) = VariableAddress[xs] : -# 1673| mu1673_2(int[2]) = Uninitialized[xs] : &:r1673_1 -# 1673| r1673_3(int) = Constant[0] : -# 1673| r1673_4(glval) = PointerAdd[4] : r1673_1, r1673_3 -# 1673| r1673_5(int) = Constant[1] : -# 1673| mu1673_6(int) = Store[?] : &:r1673_4, r1673_5 -# 1673| r1673_7(int) = Constant[1] : -# 1673| r1673_8(glval) = PointerAdd[4] : r1673_1, r1673_7 -# 1673| r1673_9(int) = Constant[2] : -# 1673| mu1673_10(int) = Store[?] : &:r1673_8, r1673_9 -# 1674| r1674_1(glval) = VariableAddress[(unnamed local variable)] : -# 1674| r1674_2(glval) = VariableAddress[xs] : -# 1674| r1674_3(int[2]) = Load[xs] : &:r1674_2, ~m? -# 1674| mu1674_4(int[2]) = Store[(unnamed local variable)] : &:r1674_1, r1674_3 -# 1674| r1674_5(glval) = VariableAddress[x0] : +# 1674| void array_structured_binding_non_ref_init() +# 1674| Block 0 +# 1674| v1674_1(void) = EnterFunction : +# 1674| mu1674_2(unknown) = AliasedDefinition : +# 1674| mu1674_3(unknown) = InitializeNonLocal : +# 1675| r1675_1(glval) = VariableAddress[xs] : +# 1675| mu1675_2(int[2]) = Uninitialized[xs] : &:r1675_1 +# 1675| r1675_3(int) = Constant[0] : +# 1675| r1675_4(glval) = PointerAdd[4] : r1675_1, r1675_3 +# 1675| r1675_5(int) = Constant[1] : +# 1675| mu1675_6(int) = Store[?] : &:r1675_4, r1675_5 +# 1675| r1675_7(int) = Constant[1] : +# 1675| r1675_8(glval) = PointerAdd[4] : r1675_1, r1675_7 +# 1675| r1675_9(int) = Constant[2] : +# 1675| mu1675_10(int) = Store[?] : &:r1675_8, r1675_9 +# 1676| r1676_1(glval) = VariableAddress[(unnamed local variable)] : +# 1676| r1676_2(glval) = VariableAddress[xs] : +# 1676| r1676_3(int[2]) = Load[xs] : &:r1676_2, ~m? +# 1676| mu1676_4(int[2]) = Store[(unnamed local variable)] : &:r1676_1, r1676_3 +# 1676| r1676_5(glval) = VariableAddress[x0] : #-----| r0_1(glval) = VariableAddress[(unnamed local variable)] : #-----| r0_2(int *) = Convert : r0_1 #-----| r0_3(unsigned long) = Constant[0] : #-----| r0_4(glval) = PointerAdd[4] : r0_2, r0_3 -#-----| mu0_5(int &) = Store[x0] : &:r1674_5, r0_4 -# 1674| r1674_6(glval) = VariableAddress[x1] : +#-----| mu0_5(int &) = Store[x0] : &:r1676_5, r0_4 +# 1676| r1676_6(glval) = VariableAddress[x1] : #-----| r0_6(glval) = VariableAddress[(unnamed local variable)] : #-----| r0_7(int *) = Convert : r0_6 #-----| r0_8(unsigned long) = Constant[1] : #-----| r0_9(glval) = PointerAdd[4] : r0_7, r0_8 -#-----| mu0_10(int &) = Store[x1] : &:r1674_6, r0_9 -# 1675| v1675_1(void) = NoOp : -# 1672| v1672_4(void) = ReturnVoid : -# 1672| v1672_5(void) = AliasedUse : ~m? -# 1672| v1672_6(void) = ExitFunction : +#-----| mu0_10(int &) = Store[x1] : &:r1676_6, r0_9 +# 1677| v1677_1(void) = NoOp : +# 1674| v1674_4(void) = ReturnVoid : +# 1674| v1674_5(void) = AliasedUse : ~m? +# 1674| v1674_6(void) = ExitFunction : -# 1680| void CapturedLambdaMyObj::CapturedLambdaMyObj() -# 1680| Block 0 -# 1680| v1680_1(void) = EnterFunction : -# 1680| mu1680_2(unknown) = AliasedDefinition : -# 1680| mu1680_3(unknown) = InitializeNonLocal : -# 1680| r1680_4(glval) = VariableAddress[#this] : -# 1680| mu1680_5(glval) = InitializeParameter[#this] : &:r1680_4 -# 1680| r1680_6(glval) = Load[#this] : &:r1680_4, ~m? -# 1680| mu1680_7(CapturedLambdaMyObj) = InitializeIndirection[#this] : &:r1680_6 -# 1680| v1680_8(void) = NoOp : -# 1680| v1680_9(void) = ReturnIndirection[#this] : &:r1680_6, ~m? -# 1680| v1680_10(void) = ReturnVoid : -# 1680| v1680_11(void) = AliasedUse : ~m? -# 1680| v1680_12(void) = ExitFunction : +# 1682| void CapturedLambdaMyObj::CapturedLambdaMyObj() +# 1682| Block 0 +# 1682| v1682_1(void) = EnterFunction : +# 1682| mu1682_2(unknown) = AliasedDefinition : +# 1682| mu1682_3(unknown) = InitializeNonLocal : +# 1682| r1682_4(glval) = VariableAddress[#this] : +# 1682| mu1682_5(glval) = InitializeParameter[#this] : &:r1682_4 +# 1682| r1682_6(glval) = Load[#this] : &:r1682_4, ~m? +# 1682| mu1682_7(CapturedLambdaMyObj) = InitializeIndirection[#this] : &:r1682_6 +# 1682| v1682_8(void) = NoOp : +# 1682| v1682_9(void) = ReturnIndirection[#this] : &:r1682_6, ~m? +# 1682| v1682_10(void) = ReturnVoid : +# 1682| v1682_11(void) = AliasedUse : ~m? +# 1682| v1682_12(void) = ExitFunction : -# 1683| void captured_lambda(int, int&, int&&) -# 1683| Block 0 -# 1683| v1683_1(void) = EnterFunction : -# 1683| mu1683_2(unknown) = AliasedDefinition : -# 1683| mu1683_3(unknown) = InitializeNonLocal : -# 1683| r1683_4(glval) = VariableAddress[x] : -# 1683| mu1683_5(int) = InitializeParameter[x] : &:r1683_4 -# 1683| r1683_6(glval) = VariableAddress[y] : -# 1683| mu1683_7(int &) = InitializeParameter[y] : &:r1683_6 -# 1683| r1683_8(int &) = Load[y] : &:r1683_6, ~m? -# 1683| mu1683_9(unknown) = InitializeIndirection[y] : &:r1683_8 -# 1683| r1683_10(glval) = VariableAddress[z] : -# 1683| mu1683_11(int &&) = InitializeParameter[z] : &:r1683_10 -# 1683| r1683_12(int &&) = Load[z] : &:r1683_10, ~m? -# 1683| mu1683_13(unknown) = InitializeIndirection[z] : &:r1683_12 -# 1685| r1685_1(glval) = VariableAddress[obj1] : -# 1685| r1685_2(glval) = VariableAddress[#temp1685:24] : -# 1685| mu1685_3(CapturedLambdaMyObj) = Uninitialized[#temp1685:24] : &:r1685_2 -# 1685| r1685_4(glval) = FunctionAddress[CapturedLambdaMyObj] : -# 1685| v1685_5(void) = Call[CapturedLambdaMyObj] : func:r1685_4, this:r1685_2 -# 1685| mu1685_6(unknown) = ^CallSideEffect : ~m? -# 1685| mu1685_7(CapturedLambdaMyObj) = ^IndirectMayWriteSideEffect[-1] : &:r1685_2 -# 1685| r1685_8(glval) = Convert : r1685_2 -# 1685| r1685_9(CapturedLambdaMyObj &) = CopyValue : r1685_8 -# 1685| mu1685_10(CapturedLambdaMyObj &) = Store[obj1] : &:r1685_1, r1685_9 -# 1686| r1686_1(glval) = VariableAddress[obj2] : -# 1686| mu1686_2(CapturedLambdaMyObj) = Uninitialized[obj2] : &:r1686_1 -# 1686| r1686_3(glval) = FunctionAddress[CapturedLambdaMyObj] : -# 1686| v1686_4(void) = Call[CapturedLambdaMyObj] : func:r1686_3, this:r1686_1 -# 1686| mu1686_5(unknown) = ^CallSideEffect : ~m? -# 1686| mu1686_6(CapturedLambdaMyObj) = ^IndirectMayWriteSideEffect[-1] : &:r1686_1 -# 1688| r1688_1(glval) = VariableAddress[lambda_outer] : -# 1688| r1688_2(glval) = VariableAddress[#temp1688:24] : -# 1688| mu1688_3(decltype([...](...){...})) = Uninitialized[#temp1688:24] : &:r1688_2 -# 1688| r1688_4(glval) = FieldAddress[obj1] : r1688_2 -# 1688| r1688_5(glval) = VariableAddress[obj1] : -# 1688| r1688_6(CapturedLambdaMyObj &) = Load[obj1] : &:r1688_5, ~m? -#-----| r0_1(CapturedLambdaMyObj) = Load[?] : &:r1688_6, ~m? -#-----| mu0_2(CapturedLambdaMyObj) = Store[?] : &:r1688_4, r0_1 -# 1688| r1688_7(glval) = FieldAddress[obj2] : r1688_2 -# 1688| r1688_8(glval) = VariableAddress[obj2] : -# 1688| r1688_9(CapturedLambdaMyObj) = Load[obj2] : &:r1688_8, ~m? -# 1688| mu1688_10(CapturedLambdaMyObj) = Store[?] : &:r1688_7, r1688_9 -# 1688| r1688_11(glval) = FieldAddress[x] : r1688_2 -# 1688| r1688_12(glval) = VariableAddress[x] : -# 1688| r1688_13(int) = Load[x] : &:r1688_12, ~m? -# 1688| mu1688_14(int) = Store[?] : &:r1688_11, r1688_13 -# 1688| r1688_15(glval) = FieldAddress[y] : r1688_2 -# 1688| r1688_16(glval) = VariableAddress[y] : -# 1688| r1688_17(int &) = Load[y] : &:r1688_16, ~m? -# 1690| r1690_1(int) = Load[?] : &:r1688_17, ~m? -# 1690| mu1690_2(int) = Store[?] : &:r1688_15, r1690_1 -# 1688| r1688_18(glval) = FieldAddress[z] : r1688_2 -# 1688| r1688_19(glval) = VariableAddress[z] : -# 1688| r1688_20(int &&) = Load[z] : &:r1688_19, ~m? -# 1690| r1690_3(int) = Load[?] : &:r1688_20, ~m? -# 1690| mu1690_4(int) = Store[?] : &:r1688_18, r1690_3 -# 1688| r1688_21(decltype([...](...){...})) = Load[#temp1688:24] : &:r1688_2, ~m? -# 1688| mu1688_22(decltype([...](...){...})) = Store[lambda_outer] : &:r1688_1, r1688_21 -# 1691| v1691_1(void) = NoOp : -# 1683| v1683_14(void) = ReturnIndirection[y] : &:r1683_8, ~m? -# 1683| v1683_15(void) = ReturnIndirection[z] : &:r1683_12, ~m? -# 1683| v1683_16(void) = ReturnVoid : -# 1683| v1683_17(void) = AliasedUse : ~m? -# 1683| v1683_18(void) = ExitFunction : +# 1685| void captured_lambda(int, int&, int&&) +# 1685| Block 0 +# 1685| v1685_1(void) = EnterFunction : +# 1685| mu1685_2(unknown) = AliasedDefinition : +# 1685| mu1685_3(unknown) = InitializeNonLocal : +# 1685| r1685_4(glval) = VariableAddress[x] : +# 1685| mu1685_5(int) = InitializeParameter[x] : &:r1685_4 +# 1685| r1685_6(glval) = VariableAddress[y] : +# 1685| mu1685_7(int &) = InitializeParameter[y] : &:r1685_6 +# 1685| r1685_8(int &) = Load[y] : &:r1685_6, ~m? +# 1685| mu1685_9(unknown) = InitializeIndirection[y] : &:r1685_8 +# 1685| r1685_10(glval) = VariableAddress[z] : +# 1685| mu1685_11(int &&) = InitializeParameter[z] : &:r1685_10 +# 1685| r1685_12(int &&) = Load[z] : &:r1685_10, ~m? +# 1685| mu1685_13(unknown) = InitializeIndirection[z] : &:r1685_12 +# 1687| r1687_1(glval) = VariableAddress[obj1] : +# 1687| r1687_2(glval) = VariableAddress[#temp1687:24] : +# 1687| mu1687_3(CapturedLambdaMyObj) = Uninitialized[#temp1687:24] : &:r1687_2 +# 1687| r1687_4(glval) = FunctionAddress[CapturedLambdaMyObj] : +# 1687| v1687_5(void) = Call[CapturedLambdaMyObj] : func:r1687_4, this:r1687_2 +# 1687| mu1687_6(unknown) = ^CallSideEffect : ~m? +# 1687| mu1687_7(CapturedLambdaMyObj) = ^IndirectMayWriteSideEffect[-1] : &:r1687_2 +# 1687| r1687_8(glval) = Convert : r1687_2 +# 1687| r1687_9(CapturedLambdaMyObj &) = CopyValue : r1687_8 +# 1687| mu1687_10(CapturedLambdaMyObj &) = Store[obj1] : &:r1687_1, r1687_9 +# 1688| r1688_1(glval) = VariableAddress[obj2] : +# 1688| mu1688_2(CapturedLambdaMyObj) = Uninitialized[obj2] : &:r1688_1 +# 1688| r1688_3(glval) = FunctionAddress[CapturedLambdaMyObj] : +# 1688| v1688_4(void) = Call[CapturedLambdaMyObj] : func:r1688_3, this:r1688_1 +# 1688| mu1688_5(unknown) = ^CallSideEffect : ~m? +# 1688| mu1688_6(CapturedLambdaMyObj) = ^IndirectMayWriteSideEffect[-1] : &:r1688_1 +# 1690| r1690_1(glval) = VariableAddress[lambda_outer] : +# 1690| r1690_2(glval) = VariableAddress[#temp1690:24] : +# 1690| mu1690_3(decltype([...](...){...})) = Uninitialized[#temp1690:24] : &:r1690_2 +# 1690| r1690_4(glval) = FieldAddress[obj1] : r1690_2 +# 1690| r1690_5(glval) = VariableAddress[obj1] : +# 1690| r1690_6(CapturedLambdaMyObj &) = Load[obj1] : &:r1690_5, ~m? +#-----| r0_1(CapturedLambdaMyObj) = Load[?] : &:r1690_6, ~m? +#-----| mu0_2(CapturedLambdaMyObj) = Store[?] : &:r1690_4, r0_1 +# 1690| r1690_7(glval) = FieldAddress[obj2] : r1690_2 +# 1690| r1690_8(glval) = VariableAddress[obj2] : +# 1690| r1690_9(CapturedLambdaMyObj) = Load[obj2] : &:r1690_8, ~m? +# 1690| mu1690_10(CapturedLambdaMyObj) = Store[?] : &:r1690_7, r1690_9 +# 1690| r1690_11(glval) = FieldAddress[x] : r1690_2 +# 1690| r1690_12(glval) = VariableAddress[x] : +# 1690| r1690_13(int) = Load[x] : &:r1690_12, ~m? +# 1690| mu1690_14(int) = Store[?] : &:r1690_11, r1690_13 +# 1690| r1690_15(glval) = FieldAddress[y] : r1690_2 +# 1690| r1690_16(glval) = VariableAddress[y] : +# 1690| r1690_17(int &) = Load[y] : &:r1690_16, ~m? +# 1692| r1692_1(int) = Load[?] : &:r1690_17, ~m? +# 1692| mu1692_2(int) = Store[?] : &:r1690_15, r1692_1 +# 1690| r1690_18(glval) = FieldAddress[z] : r1690_2 +# 1690| r1690_19(glval) = VariableAddress[z] : +# 1690| r1690_20(int &&) = Load[z] : &:r1690_19, ~m? +# 1692| r1692_3(int) = Load[?] : &:r1690_20, ~m? +# 1692| mu1692_4(int) = Store[?] : &:r1690_18, r1692_3 +# 1690| r1690_21(decltype([...](...){...})) = Load[#temp1690:24] : &:r1690_2, ~m? +# 1690| mu1690_22(decltype([...](...){...})) = Store[lambda_outer] : &:r1690_1, r1690_21 +# 1693| v1693_1(void) = NoOp : +# 1685| v1685_14(void) = ReturnIndirection[y] : &:r1685_8, ~m? +# 1685| v1685_15(void) = ReturnIndirection[z] : &:r1685_12, ~m? +# 1685| v1685_16(void) = ReturnVoid : +# 1685| v1685_17(void) = AliasedUse : ~m? +# 1685| v1685_18(void) = ExitFunction : -# 1688| void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1688, col. 25)::operator()() const -# 1688| Block 0 -# 1688| v1688_1(void) = EnterFunction : -# 1688| mu1688_2(unknown) = AliasedDefinition : -# 1688| mu1688_3(unknown) = InitializeNonLocal : -# 1688| r1688_4(glval) = VariableAddress[#this] : -# 1688| mu1688_5(glval) = InitializeParameter[#this] : &:r1688_4 -# 1688| r1688_6(glval) = Load[#this] : &:r1688_4, ~m? -# 1688| mu1688_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1688_6 -# 1689| r1689_1(glval) = VariableAddress[lambda_inner] : -# 1689| r1689_2(glval) = VariableAddress[#temp1689:28] : -# 1689| mu1689_3(decltype([...](...){...})) = Uninitialized[#temp1689:28] : &:r1689_2 -# 1689| r1689_4(glval) = FieldAddress[obj1] : r1689_2 -# 1689| r1689_5(glval) = VariableAddress[#this] : -# 1689| r1689_6(lambda [] type at line 1689, col. 29 *) = Load[#this] : &:r1689_5, ~m? -# 1689| r1689_7(glval) = FieldAddress[obj1] : r1689_6 -# 1689| r1689_8(CapturedLambdaMyObj) = Load[?] : &:r1689_7, ~m? -# 1689| mu1689_9(CapturedLambdaMyObj) = Store[?] : &:r1689_4, r1689_8 -# 1689| r1689_10(glval) = FieldAddress[obj2] : r1689_2 -# 1689| r1689_11(glval) = VariableAddress[#this] : -# 1689| r1689_12(lambda [] type at line 1689, col. 29 *) = Load[#this] : &:r1689_11, ~m? -# 1689| r1689_13(glval) = FieldAddress[obj2] : r1689_12 -# 1689| r1689_14(CapturedLambdaMyObj) = Load[?] : &:r1689_13, ~m? -# 1689| mu1689_15(CapturedLambdaMyObj) = Store[?] : &:r1689_10, r1689_14 -# 1689| r1689_16(glval) = FieldAddress[x] : r1689_2 -# 1689| r1689_17(glval) = VariableAddress[#this] : -# 1689| r1689_18(lambda [] type at line 1688, col. 25 *) = Load[#this] : &:r1689_17, ~m? -# 1689| r1689_19(glval) = FieldAddress[x] : r1689_18 -# 1689| r1689_20(int) = Load[?] : &:r1689_19, ~m? -# 1689| mu1689_21(int) = Store[?] : &:r1689_16, r1689_20 -# 1689| r1689_22(glval) = FieldAddress[y] : r1689_2 -# 1689| r1689_23(glval) = VariableAddress[#this] : -# 1689| r1689_24(lambda [] type at line 1688, col. 25 *) = Load[#this] : &:r1689_23, ~m? -# 1689| r1689_25(glval) = FieldAddress[y] : r1689_24 -# 1689| r1689_26(int) = Load[?] : &:r1689_25, ~m? -# 1689| mu1689_27(int) = Store[?] : &:r1689_22, r1689_26 -# 1689| r1689_28(glval) = FieldAddress[z] : r1689_2 -# 1689| r1689_29(glval) = VariableAddress[#this] : -# 1689| r1689_30(lambda [] type at line 1688, col. 25 *) = Load[#this] : &:r1689_29, ~m? -# 1689| r1689_31(glval) = FieldAddress[z] : r1689_30 -# 1689| r1689_32(int) = Load[?] : &:r1689_31, ~m? -# 1689| mu1689_33(int) = Store[?] : &:r1689_28, r1689_32 -# 1689| r1689_34(decltype([...](...){...})) = Load[#temp1689:28] : &:r1689_2, ~m? -# 1689| mu1689_35(decltype([...](...){...})) = Store[lambda_inner] : &:r1689_1, r1689_34 -# 1690| v1690_1(void) = NoOp : -# 1688| v1688_8(void) = ReturnIndirection[#this] : &:r1688_6, ~m? -# 1688| v1688_9(void) = ReturnVoid : -# 1688| v1688_10(void) = AliasedUse : ~m? -# 1688| v1688_11(void) = ExitFunction : +# 1690| void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25)::operator()() const +# 1690| Block 0 +# 1690| v1690_1(void) = EnterFunction : +# 1690| mu1690_2(unknown) = AliasedDefinition : +# 1690| mu1690_3(unknown) = InitializeNonLocal : +# 1690| r1690_4(glval) = VariableAddress[#this] : +# 1690| mu1690_5(glval) = InitializeParameter[#this] : &:r1690_4 +# 1690| r1690_6(glval) = Load[#this] : &:r1690_4, ~m? +# 1690| mu1690_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1690_6 +# 1691| r1691_1(glval) = VariableAddress[lambda_inner] : +# 1691| r1691_2(glval) = VariableAddress[#temp1691:28] : +# 1691| mu1691_3(decltype([...](...){...})) = Uninitialized[#temp1691:28] : &:r1691_2 +# 1691| r1691_4(glval) = FieldAddress[obj1] : r1691_2 +# 1691| r1691_5(glval) = VariableAddress[#this] : +# 1691| r1691_6(lambda [] type at line 1691, col. 29 *) = Load[#this] : &:r1691_5, ~m? +# 1691| r1691_7(glval) = FieldAddress[obj1] : r1691_6 +# 1691| r1691_8(CapturedLambdaMyObj) = Load[?] : &:r1691_7, ~m? +# 1691| mu1691_9(CapturedLambdaMyObj) = Store[?] : &:r1691_4, r1691_8 +# 1691| r1691_10(glval) = FieldAddress[obj2] : r1691_2 +# 1691| r1691_11(glval) = VariableAddress[#this] : +# 1691| r1691_12(lambda [] type at line 1691, col. 29 *) = Load[#this] : &:r1691_11, ~m? +# 1691| r1691_13(glval) = FieldAddress[obj2] : r1691_12 +# 1691| r1691_14(CapturedLambdaMyObj) = Load[?] : &:r1691_13, ~m? +# 1691| mu1691_15(CapturedLambdaMyObj) = Store[?] : &:r1691_10, r1691_14 +# 1691| r1691_16(glval) = FieldAddress[x] : r1691_2 +# 1691| r1691_17(glval) = VariableAddress[#this] : +# 1691| r1691_18(lambda [] type at line 1690, col. 25 *) = Load[#this] : &:r1691_17, ~m? +# 1691| r1691_19(glval) = FieldAddress[x] : r1691_18 +# 1691| r1691_20(int) = Load[?] : &:r1691_19, ~m? +# 1691| mu1691_21(int) = Store[?] : &:r1691_16, r1691_20 +# 1691| r1691_22(glval) = FieldAddress[y] : r1691_2 +# 1691| r1691_23(glval) = VariableAddress[#this] : +# 1691| r1691_24(lambda [] type at line 1690, col. 25 *) = Load[#this] : &:r1691_23, ~m? +# 1691| r1691_25(glval) = FieldAddress[y] : r1691_24 +# 1691| r1691_26(int) = Load[?] : &:r1691_25, ~m? +# 1691| mu1691_27(int) = Store[?] : &:r1691_22, r1691_26 +# 1691| r1691_28(glval) = FieldAddress[z] : r1691_2 +# 1691| r1691_29(glval) = VariableAddress[#this] : +# 1691| r1691_30(lambda [] type at line 1690, col. 25 *) = Load[#this] : &:r1691_29, ~m? +# 1691| r1691_31(glval) = FieldAddress[z] : r1691_30 +# 1691| r1691_32(int) = Load[?] : &:r1691_31, ~m? +# 1691| mu1691_33(int) = Store[?] : &:r1691_28, r1691_32 +# 1691| r1691_34(decltype([...](...){...})) = Load[#temp1691:28] : &:r1691_2, ~m? +# 1691| mu1691_35(decltype([...](...){...})) = Store[lambda_inner] : &:r1691_1, r1691_34 +# 1692| v1692_1(void) = NoOp : +# 1690| v1690_8(void) = ReturnIndirection[#this] : &:r1690_6, ~m? +# 1690| v1690_9(void) = ReturnVoid : +# 1690| v1690_10(void) = AliasedUse : ~m? +# 1690| v1690_11(void) = ExitFunction : -# 1689| void (void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1688, col. 25)::operator()() const)::(lambda [] type at line 1689, col. 29)::operator()() const -# 1689| Block 0 -# 1689| v1689_1(void) = EnterFunction : -# 1689| mu1689_2(unknown) = AliasedDefinition : -# 1689| mu1689_3(unknown) = InitializeNonLocal : -# 1689| r1689_4(glval) = VariableAddress[#this] : -# 1689| mu1689_5(glval) = InitializeParameter[#this] : &:r1689_4 -# 1689| r1689_6(glval) = Load[#this] : &:r1689_4, ~m? -# 1689| mu1689_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1689_6 -# 1689| v1689_8(void) = NoOp : -# 1689| v1689_9(void) = NoOp : -# 1689| v1689_10(void) = ReturnIndirection[#this] : &:r1689_6, ~m? -# 1689| v1689_11(void) = ReturnVoid : -# 1689| v1689_12(void) = AliasedUse : ~m? -# 1689| v1689_13(void) = ExitFunction : +# 1691| void (void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25)::operator()() const)::(lambda [] type at line 1691, col. 29)::operator()() const +# 1691| Block 0 +# 1691| v1691_1(void) = EnterFunction : +# 1691| mu1691_2(unknown) = AliasedDefinition : +# 1691| mu1691_3(unknown) = InitializeNonLocal : +# 1691| r1691_4(glval) = VariableAddress[#this] : +# 1691| mu1691_5(glval) = InitializeParameter[#this] : &:r1691_4 +# 1691| r1691_6(glval) = Load[#this] : &:r1691_4, ~m? +# 1691| mu1691_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1691_6 +# 1691| v1691_8(void) = NoOp : +# 1691| v1691_9(void) = NoOp : +# 1691| v1691_10(void) = ReturnIndirection[#this] : &:r1691_6, ~m? +# 1691| v1691_11(void) = ReturnVoid : +# 1691| v1691_12(void) = AliasedUse : ~m? +# 1691| v1691_13(void) = ExitFunction : -# 1693| int goto_on_same_line() -# 1693| Block 0 -# 1693| v1693_1(void) = EnterFunction : -# 1693| mu1693_2(unknown) = AliasedDefinition : -# 1693| mu1693_3(unknown) = InitializeNonLocal : -# 1694| r1694_1(glval) = VariableAddress[x] : -# 1694| r1694_2(int) = Constant[42] : -# 1694| mu1694_3(int) = Store[x] : &:r1694_1, r1694_2 -# 1695| v1695_1(void) = NoOp : -# 1695| v1695_2(void) = NoOp : -# 1696| r1696_1(glval) = VariableAddress[#return] : -# 1696| r1696_2(glval) = VariableAddress[x] : -# 1696| r1696_3(int) = Load[x] : &:r1696_2, ~m? -# 1696| mu1696_4(int) = Store[#return] : &:r1696_1, r1696_3 -# 1693| r1693_4(glval) = VariableAddress[#return] : -# 1693| v1693_5(void) = ReturnValue : &:r1693_4, ~m? -# 1693| v1693_6(void) = AliasedUse : ~m? -# 1693| v1693_7(void) = ExitFunction : +# 1695| int goto_on_same_line() +# 1695| Block 0 +# 1695| v1695_1(void) = EnterFunction : +# 1695| mu1695_2(unknown) = AliasedDefinition : +# 1695| mu1695_3(unknown) = InitializeNonLocal : +# 1696| r1696_1(glval) = VariableAddress[x] : +# 1696| r1696_2(int) = Constant[42] : +# 1696| mu1696_3(int) = Store[x] : &:r1696_1, r1696_2 +# 1697| v1697_1(void) = NoOp : +# 1697| v1697_2(void) = NoOp : +# 1698| r1698_1(glval) = VariableAddress[#return] : +# 1698| r1698_2(glval) = VariableAddress[x] : +# 1698| r1698_3(int) = Load[x] : &:r1698_2, ~m? +# 1698| mu1698_4(int) = Store[#return] : &:r1698_1, r1698_3 +# 1695| r1695_4(glval) = VariableAddress[#return] : +# 1695| v1695_5(void) = ReturnValue : &:r1695_4, ~m? +# 1695| v1695_6(void) = AliasedUse : ~m? +# 1695| v1695_7(void) = ExitFunction : -# 1701| void TrivialLambdaClass::m() const -# 1701| Block 0 -# 1701| v1701_1(void) = EnterFunction : -# 1701| mu1701_2(unknown) = AliasedDefinition : -# 1701| mu1701_3(unknown) = InitializeNonLocal : -# 1701| r1701_4(glval) = VariableAddress[#this] : -# 1701| mu1701_5(glval) = InitializeParameter[#this] : &:r1701_4 -# 1701| r1701_6(glval) = Load[#this] : &:r1701_4, ~m? -# 1701| mu1701_7(TrivialLambdaClass) = InitializeIndirection[#this] : &:r1701_6 -# 1702| r1702_1(glval) = VariableAddress[l_m_outer] : -# 1702| r1702_2(glval) = VariableAddress[#temp1702:25] : -# 1702| mu1702_3(decltype([...](...){...})) = Uninitialized[#temp1702:25] : &:r1702_2 -# 1702| r1702_4(glval) = FieldAddress[(captured this)] : r1702_2 -# 1702| r1702_5(glval) = VariableAddress[#this] : -# 1702| r1702_6(TrivialLambdaClass *) = Load[#this] : &:r1702_5, ~m? -# 1702| r1702_7(TrivialLambdaClass) = Load[?] : &:r1702_6, ~m? -# 1702| mu1702_8(TrivialLambdaClass) = Store[?] : &:r1702_4, r1702_7 -# 1702| r1702_9(decltype([...](...){...})) = Load[#temp1702:25] : &:r1702_2, ~m? -# 1702| mu1702_10(decltype([...](...){...})) = Store[l_m_outer] : &:r1702_1, r1702_9 -# 1709| v1709_1(void) = NoOp : -# 1701| v1701_8(void) = ReturnIndirection[#this] : &:r1701_6, ~m? -# 1701| v1701_9(void) = ReturnVoid : -# 1701| v1701_10(void) = AliasedUse : ~m? -# 1701| v1701_11(void) = ExitFunction : +# 1703| void TrivialLambdaClass::m() const +# 1703| Block 0 +# 1703| v1703_1(void) = EnterFunction : +# 1703| mu1703_2(unknown) = AliasedDefinition : +# 1703| mu1703_3(unknown) = InitializeNonLocal : +# 1703| r1703_4(glval) = VariableAddress[#this] : +# 1703| mu1703_5(glval) = InitializeParameter[#this] : &:r1703_4 +# 1703| r1703_6(glval) = Load[#this] : &:r1703_4, ~m? +# 1703| mu1703_7(TrivialLambdaClass) = InitializeIndirection[#this] : &:r1703_6 +# 1704| r1704_1(glval) = VariableAddress[l_m_outer] : +# 1704| r1704_2(glval) = VariableAddress[#temp1704:25] : +# 1704| mu1704_3(decltype([...](...){...})) = Uninitialized[#temp1704:25] : &:r1704_2 +# 1704| r1704_4(glval) = FieldAddress[(captured this)] : r1704_2 +# 1704| r1704_5(glval) = VariableAddress[#this] : +# 1704| r1704_6(TrivialLambdaClass *) = Load[#this] : &:r1704_5, ~m? +# 1704| r1704_7(TrivialLambdaClass) = Load[?] : &:r1704_6, ~m? +# 1704| mu1704_8(TrivialLambdaClass) = Store[?] : &:r1704_4, r1704_7 +# 1704| r1704_9(decltype([...](...){...})) = Load[#temp1704:25] : &:r1704_2, ~m? +# 1704| mu1704_10(decltype([...](...){...})) = Store[l_m_outer] : &:r1704_1, r1704_9 +# 1711| v1711_1(void) = NoOp : +# 1703| v1703_8(void) = ReturnIndirection[#this] : &:r1703_6, ~m? +# 1703| v1703_9(void) = ReturnVoid : +# 1703| v1703_10(void) = AliasedUse : ~m? +# 1703| v1703_11(void) = ExitFunction : -# 1702| void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1702, col. 26)::operator()() const -# 1702| Block 0 -# 1702| v1702_1(void) = EnterFunction : -# 1702| mu1702_2(unknown) = AliasedDefinition : -# 1702| mu1702_3(unknown) = InitializeNonLocal : -# 1702| r1702_4(glval) = VariableAddress[#this] : -# 1702| mu1702_5(glval) = InitializeParameter[#this] : &:r1702_4 -# 1702| r1702_6(glval) = Load[#this] : &:r1702_4, ~m? -# 1702| mu1702_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1702_6 -# 1703| r1703_1(glval) = VariableAddress[#this] : -# 1703| r1703_2(lambda [] type at line 1702, col. 26 *) = Load[#this] : &:r1703_1, ~m? -# 1703| r1703_3(glval) = FieldAddress[(captured this)] : r1703_2 -# 1703| r1703_4(TrivialLambdaClass *) = CopyValue : r1703_3 -# 1703| r1703_5(glval) = FunctionAddress[m] : -# 1703| v1703_6(void) = Call[m] : func:r1703_5, this:r1703_4 -# 1703| mu1703_7(unknown) = ^CallSideEffect : ~m? -# 1703| v1703_8(void) = ^IndirectReadSideEffect[-1] : &:r1703_4, ~m? -# 1705| r1705_1(glval) = VariableAddress[l_m_inner] : -# 1705| r1705_2(glval) = VariableAddress[#temp1705:29] : -# 1705| mu1705_3(decltype([...](...){...})) = Uninitialized[#temp1705:29] : &:r1705_2 -# 1705| r1705_4(glval) = FieldAddress[(captured this)] : r1705_2 -# 1705| r1705_5(glval) = VariableAddress[#this] : -# 1705| r1705_6(lambda [] type at line 1705, col. 30 *) = Load[#this] : &:r1705_5, ~m? -# 1705| r1705_7(glval) = FieldAddress[(captured this)] : r1705_6 -# 1705| r1705_8(TrivialLambdaClass) = Load[?] : &:r1705_7, ~m? -# 1705| mu1705_9(TrivialLambdaClass) = Store[?] : &:r1705_4, r1705_8 -# 1705| r1705_10(decltype([...](...){...})) = Load[#temp1705:29] : &:r1705_2, ~m? -# 1705| mu1705_11(decltype([...](...){...})) = Store[l_m_inner] : &:r1705_1, r1705_10 -# 1708| v1708_1(void) = NoOp : -# 1702| v1702_8(void) = ReturnIndirection[#this] : &:r1702_6, ~m? -# 1702| v1702_9(void) = ReturnVoid : -# 1702| v1702_10(void) = AliasedUse : ~m? -# 1702| v1702_11(void) = ExitFunction : +# 1704| void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26)::operator()() const +# 1704| Block 0 +# 1704| v1704_1(void) = EnterFunction : +# 1704| mu1704_2(unknown) = AliasedDefinition : +# 1704| mu1704_3(unknown) = InitializeNonLocal : +# 1704| r1704_4(glval) = VariableAddress[#this] : +# 1704| mu1704_5(glval) = InitializeParameter[#this] : &:r1704_4 +# 1704| r1704_6(glval) = Load[#this] : &:r1704_4, ~m? +# 1704| mu1704_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1704_6 +# 1705| r1705_1(glval) = VariableAddress[#this] : +# 1705| r1705_2(lambda [] type at line 1704, col. 26 *) = Load[#this] : &:r1705_1, ~m? +# 1705| r1705_3(glval) = FieldAddress[(captured this)] : r1705_2 +# 1705| r1705_4(TrivialLambdaClass *) = CopyValue : r1705_3 +# 1705| r1705_5(glval) = FunctionAddress[m] : +# 1705| v1705_6(void) = Call[m] : func:r1705_5, this:r1705_4 +# 1705| mu1705_7(unknown) = ^CallSideEffect : ~m? +# 1705| v1705_8(void) = ^IndirectReadSideEffect[-1] : &:r1705_4, ~m? +# 1707| r1707_1(glval) = VariableAddress[l_m_inner] : +# 1707| r1707_2(glval) = VariableAddress[#temp1707:29] : +# 1707| mu1707_3(decltype([...](...){...})) = Uninitialized[#temp1707:29] : &:r1707_2 +# 1707| r1707_4(glval) = FieldAddress[(captured this)] : r1707_2 +# 1707| r1707_5(glval) = VariableAddress[#this] : +# 1707| r1707_6(lambda [] type at line 1707, col. 30 *) = Load[#this] : &:r1707_5, ~m? +# 1707| r1707_7(glval) = FieldAddress[(captured this)] : r1707_6 +# 1707| r1707_8(TrivialLambdaClass) = Load[?] : &:r1707_7, ~m? +# 1707| mu1707_9(TrivialLambdaClass) = Store[?] : &:r1707_4, r1707_8 +# 1707| r1707_10(decltype([...](...){...})) = Load[#temp1707:29] : &:r1707_2, ~m? +# 1707| mu1707_11(decltype([...](...){...})) = Store[l_m_inner] : &:r1707_1, r1707_10 +# 1710| v1710_1(void) = NoOp : +# 1704| v1704_8(void) = ReturnIndirection[#this] : &:r1704_6, ~m? +# 1704| v1704_9(void) = ReturnVoid : +# 1704| v1704_10(void) = AliasedUse : ~m? +# 1704| v1704_11(void) = ExitFunction : -# 1705| void (void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1702, col. 26)::operator()() const)::(lambda [] type at line 1705, col. 30)::operator()() const -# 1705| Block 0 -# 1705| v1705_1(void) = EnterFunction : -# 1705| mu1705_2(unknown) = AliasedDefinition : -# 1705| mu1705_3(unknown) = InitializeNonLocal : -# 1705| r1705_4(glval) = VariableAddress[#this] : -# 1705| mu1705_5(glval) = InitializeParameter[#this] : &:r1705_4 -# 1705| r1705_6(glval) = Load[#this] : &:r1705_4, ~m? -# 1705| mu1705_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1705_6 -# 1706| r1706_1(glval) = VariableAddress[#this] : -# 1706| r1706_2(lambda [] type at line 1705, col. 30 *) = Load[#this] : &:r1706_1, ~m? -# 1706| r1706_3(glval) = FieldAddress[(captured this)] : r1706_2 -# 1706| r1706_4(TrivialLambdaClass *) = CopyValue : r1706_3 -# 1706| r1706_5(glval) = FunctionAddress[m] : -# 1706| v1706_6(void) = Call[m] : func:r1706_5, this:r1706_4 -# 1706| mu1706_7(unknown) = ^CallSideEffect : ~m? -# 1706| v1706_8(void) = ^IndirectReadSideEffect[-1] : &:r1706_4, ~m? -# 1707| v1707_1(void) = NoOp : -# 1705| v1705_8(void) = ReturnIndirection[#this] : &:r1705_6, ~m? -# 1705| v1705_9(void) = ReturnVoid : -# 1705| v1705_10(void) = AliasedUse : ~m? -# 1705| v1705_11(void) = ExitFunction : +# 1707| void (void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26)::operator()() const)::(lambda [] type at line 1707, col. 30)::operator()() const +# 1707| Block 0 +# 1707| v1707_1(void) = EnterFunction : +# 1707| mu1707_2(unknown) = AliasedDefinition : +# 1707| mu1707_3(unknown) = InitializeNonLocal : +# 1707| r1707_4(glval) = VariableAddress[#this] : +# 1707| mu1707_5(glval) = InitializeParameter[#this] : &:r1707_4 +# 1707| r1707_6(glval) = Load[#this] : &:r1707_4, ~m? +# 1707| mu1707_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1707_6 +# 1708| r1708_1(glval) = VariableAddress[#this] : +# 1708| r1708_2(lambda [] type at line 1707, col. 30 *) = Load[#this] : &:r1708_1, ~m? +# 1708| r1708_3(glval) = FieldAddress[(captured this)] : r1708_2 +# 1708| r1708_4(TrivialLambdaClass *) = CopyValue : r1708_3 +# 1708| r1708_5(glval) = FunctionAddress[m] : +# 1708| v1708_6(void) = Call[m] : func:r1708_5, this:r1708_4 +# 1708| mu1708_7(unknown) = ^CallSideEffect : ~m? +# 1708| v1708_8(void) = ^IndirectReadSideEffect[-1] : &:r1708_4, ~m? +# 1709| v1709_1(void) = NoOp : +# 1707| v1707_8(void) = ReturnIndirection[#this] : &:r1707_6, ~m? +# 1707| v1707_9(void) = ReturnVoid : +# 1707| v1707_10(void) = AliasedUse : ~m? +# 1707| v1707_11(void) = ExitFunction : -# 1712| void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&) -# 1712| Block 0 -# 1712| v1712_1(void) = EnterFunction : -# 1712| mu1712_2(unknown) = AliasedDefinition : -# 1712| mu1712_3(unknown) = InitializeNonLocal : -# 1712| r1712_4(glval) = VariableAddress[p1] : -# 1712| mu1712_5(TrivialLambdaClass) = InitializeParameter[p1] : &:r1712_4 -# 1712| r1712_6(glval) = VariableAddress[p2] : -# 1712| mu1712_7(TrivialLambdaClass &) = InitializeParameter[p2] : &:r1712_6 -# 1712| r1712_8(TrivialLambdaClass &) = Load[p2] : &:r1712_6, ~m? -# 1712| mu1712_9(unknown) = InitializeIndirection[p2] : &:r1712_8 -# 1712| r1712_10(glval) = VariableAddress[p3] : -# 1712| mu1712_11(TrivialLambdaClass &&) = InitializeParameter[p3] : &:r1712_10 -# 1712| r1712_12(TrivialLambdaClass &&) = Load[p3] : &:r1712_10, ~m? -# 1712| mu1712_13(unknown) = InitializeIndirection[p3] : &:r1712_12 -# 1713| r1713_1(glval) = VariableAddress[l1] : -# 1713| mu1713_2(TrivialLambdaClass) = Uninitialized[l1] : &:r1713_1 -# 1714| r1714_1(glval) = VariableAddress[l2] : -# 1714| r1714_2(glval) = VariableAddress[#temp1714:36] : -# 1714| r1714_3(TrivialLambdaClass) = Constant[0] : -# 1714| mu1714_4(TrivialLambdaClass) = Store[#temp1714:36] : &:r1714_2, r1714_3 -# 1714| r1714_5(glval) = Convert : r1714_2 -# 1714| r1714_6(TrivialLambdaClass &) = CopyValue : r1714_5 -# 1714| mu1714_7(TrivialLambdaClass &) = Store[l2] : &:r1714_1, r1714_6 -# 1716| r1716_1(glval) = VariableAddress[l_outer1] : -# 1716| r1716_2(glval) = VariableAddress[#temp1716:20] : -# 1716| mu1716_3(decltype([...](...){...})) = Uninitialized[#temp1716:20] : &:r1716_2 -# 1716| r1716_4(glval) = FieldAddress[p1] : r1716_2 -# 1716| r1716_5(glval) = VariableAddress[p1] : -# 1716| r1716_6(TrivialLambdaClass) = Load[p1] : &:r1716_5, ~m? -# 1716| mu1716_7(TrivialLambdaClass) = Store[?] : &:r1716_4, r1716_6 -# 1716| r1716_8(glval) = FieldAddress[p2] : r1716_2 -# 1716| r1716_9(glval) = VariableAddress[p2] : -# 1716| r1716_10(TrivialLambdaClass &) = Load[p2] : &:r1716_9, ~m? -#-----| r0_1(TrivialLambdaClass) = Load[?] : &:r1716_10, ~m? -#-----| mu0_2(TrivialLambdaClass) = Store[?] : &:r1716_8, r0_1 -# 1716| r1716_11(glval) = FieldAddress[p3] : r1716_2 -# 1716| r1716_12(glval) = VariableAddress[p3] : -# 1716| r1716_13(TrivialLambdaClass &&) = Load[p3] : &:r1716_12, ~m? -#-----| r0_3(TrivialLambdaClass) = Load[?] : &:r1716_13, ~m? -#-----| mu0_4(TrivialLambdaClass) = Store[?] : &:r1716_11, r0_3 -# 1716| r1716_14(glval) = FieldAddress[l1] : r1716_2 -# 1716| r1716_15(glval) = VariableAddress[l1] : -# 1716| r1716_16(TrivialLambdaClass) = Load[l1] : &:r1716_15, ~m? -# 1716| mu1716_17(TrivialLambdaClass) = Store[?] : &:r1716_14, r1716_16 -# 1716| r1716_18(glval) = FieldAddress[l2] : r1716_2 -# 1716| r1716_19(glval) = VariableAddress[l2] : -# 1716| r1716_20(TrivialLambdaClass &) = Load[l2] : &:r1716_19, ~m? -#-----| r0_5(TrivialLambdaClass) = Load[?] : &:r1716_20, ~m? -#-----| mu0_6(TrivialLambdaClass) = Store[?] : &:r1716_18, r0_5 -# 1716| r1716_21(decltype([...](...){...})) = Load[#temp1716:20] : &:r1716_2, ~m? -# 1716| mu1716_22(decltype([...](...){...})) = Store[l_outer1] : &:r1716_1, r1716_21 -# 1719| v1719_1(void) = NoOp : -# 1712| v1712_14(void) = ReturnIndirection[p2] : &:r1712_8, ~m? -# 1712| v1712_15(void) = ReturnIndirection[p3] : &:r1712_12, ~m? -# 1712| v1712_16(void) = ReturnVoid : -# 1712| v1712_17(void) = AliasedUse : ~m? -# 1712| v1712_18(void) = ExitFunction : +# 1714| void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&) +# 1714| Block 0 +# 1714| v1714_1(void) = EnterFunction : +# 1714| mu1714_2(unknown) = AliasedDefinition : +# 1714| mu1714_3(unknown) = InitializeNonLocal : +# 1714| r1714_4(glval) = VariableAddress[p1] : +# 1714| mu1714_5(TrivialLambdaClass) = InitializeParameter[p1] : &:r1714_4 +# 1714| r1714_6(glval) = VariableAddress[p2] : +# 1714| mu1714_7(TrivialLambdaClass &) = InitializeParameter[p2] : &:r1714_6 +# 1714| r1714_8(TrivialLambdaClass &) = Load[p2] : &:r1714_6, ~m? +# 1714| mu1714_9(unknown) = InitializeIndirection[p2] : &:r1714_8 +# 1714| r1714_10(glval) = VariableAddress[p3] : +# 1714| mu1714_11(TrivialLambdaClass &&) = InitializeParameter[p3] : &:r1714_10 +# 1714| r1714_12(TrivialLambdaClass &&) = Load[p3] : &:r1714_10, ~m? +# 1714| mu1714_13(unknown) = InitializeIndirection[p3] : &:r1714_12 +# 1715| r1715_1(glval) = VariableAddress[l1] : +# 1715| mu1715_2(TrivialLambdaClass) = Uninitialized[l1] : &:r1715_1 +# 1716| r1716_1(glval) = VariableAddress[l2] : +# 1716| r1716_2(glval) = VariableAddress[#temp1716:36] : +# 1716| r1716_3(TrivialLambdaClass) = Constant[0] : +# 1716| mu1716_4(TrivialLambdaClass) = Store[#temp1716:36] : &:r1716_2, r1716_3 +# 1716| r1716_5(glval) = Convert : r1716_2 +# 1716| r1716_6(TrivialLambdaClass &) = CopyValue : r1716_5 +# 1716| mu1716_7(TrivialLambdaClass &) = Store[l2] : &:r1716_1, r1716_6 +# 1718| r1718_1(glval) = VariableAddress[l_outer1] : +# 1718| r1718_2(glval) = VariableAddress[#temp1718:20] : +# 1718| mu1718_3(decltype([...](...){...})) = Uninitialized[#temp1718:20] : &:r1718_2 +# 1718| r1718_4(glval) = FieldAddress[p1] : r1718_2 +# 1718| r1718_5(glval) = VariableAddress[p1] : +# 1718| r1718_6(TrivialLambdaClass) = Load[p1] : &:r1718_5, ~m? +# 1718| mu1718_7(TrivialLambdaClass) = Store[?] : &:r1718_4, r1718_6 +# 1718| r1718_8(glval) = FieldAddress[p2] : r1718_2 +# 1718| r1718_9(glval) = VariableAddress[p2] : +# 1718| r1718_10(TrivialLambdaClass &) = Load[p2] : &:r1718_9, ~m? +#-----| r0_1(TrivialLambdaClass) = Load[?] : &:r1718_10, ~m? +#-----| mu0_2(TrivialLambdaClass) = Store[?] : &:r1718_8, r0_1 +# 1718| r1718_11(glval) = FieldAddress[p3] : r1718_2 +# 1718| r1718_12(glval) = VariableAddress[p3] : +# 1718| r1718_13(TrivialLambdaClass &&) = Load[p3] : &:r1718_12, ~m? +#-----| r0_3(TrivialLambdaClass) = Load[?] : &:r1718_13, ~m? +#-----| mu0_4(TrivialLambdaClass) = Store[?] : &:r1718_11, r0_3 +# 1718| r1718_14(glval) = FieldAddress[l1] : r1718_2 +# 1718| r1718_15(glval) = VariableAddress[l1] : +# 1718| r1718_16(TrivialLambdaClass) = Load[l1] : &:r1718_15, ~m? +# 1718| mu1718_17(TrivialLambdaClass) = Store[?] : &:r1718_14, r1718_16 +# 1718| r1718_18(glval) = FieldAddress[l2] : r1718_2 +# 1718| r1718_19(glval) = VariableAddress[l2] : +# 1718| r1718_20(TrivialLambdaClass &) = Load[l2] : &:r1718_19, ~m? +#-----| r0_5(TrivialLambdaClass) = Load[?] : &:r1718_20, ~m? +#-----| mu0_6(TrivialLambdaClass) = Store[?] : &:r1718_18, r0_5 +# 1718| r1718_21(decltype([...](...){...})) = Load[#temp1718:20] : &:r1718_2, ~m? +# 1718| mu1718_22(decltype([...](...){...})) = Store[l_outer1] : &:r1718_1, r1718_21 +# 1721| v1721_1(void) = NoOp : +# 1714| v1714_14(void) = ReturnIndirection[p2] : &:r1714_8, ~m? +# 1714| v1714_15(void) = ReturnIndirection[p3] : &:r1714_12, ~m? +# 1714| v1714_16(void) = ReturnVoid : +# 1714| v1714_17(void) = AliasedUse : ~m? +# 1714| v1714_18(void) = ExitFunction : -# 1716| void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1716, col. 21)::operator()() const -# 1716| Block 0 -# 1716| v1716_1(void) = EnterFunction : -# 1716| mu1716_2(unknown) = AliasedDefinition : -# 1716| mu1716_3(unknown) = InitializeNonLocal : -# 1716| r1716_4(glval) = VariableAddress[#this] : -# 1716| mu1716_5(glval) = InitializeParameter[#this] : &:r1716_4 -# 1716| r1716_6(glval) = Load[#this] : &:r1716_4, ~m? -# 1716| mu1716_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1716_6 -# 1717| r1717_1(glval) = VariableAddress[l_inner1] : -# 1717| r1717_2(glval) = VariableAddress[#temp1717:24] : -# 1717| mu1717_3(decltype([...](...){...})) = Uninitialized[#temp1717:24] : &:r1717_2 -# 1717| r1717_4(glval) = FieldAddress[p1] : r1717_2 -# 1717| r1717_5(glval) = VariableAddress[#this] : -# 1717| r1717_6(lambda [] type at line 1717, col. 25 *) = Load[#this] : &:r1717_5, ~m? -# 1717| r1717_7(glval) = FieldAddress[p1] : r1717_6 -# 1717| r1717_8(TrivialLambdaClass) = Load[?] : &:r1717_7, ~m? -# 1717| mu1717_9(TrivialLambdaClass) = Store[?] : &:r1717_4, r1717_8 -# 1717| r1717_10(decltype([...](...){...})) = Load[#temp1717:24] : &:r1717_2, ~m? -# 1717| mu1717_11(decltype([...](...){...})) = Store[l_inner1] : &:r1717_1, r1717_10 -# 1718| v1718_1(void) = NoOp : -# 1716| v1716_8(void) = ReturnIndirection[#this] : &:r1716_6, ~m? -# 1716| v1716_9(void) = ReturnVoid : -# 1716| v1716_10(void) = AliasedUse : ~m? -# 1716| v1716_11(void) = ExitFunction : +# 1718| void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21)::operator()() const +# 1718| Block 0 +# 1718| v1718_1(void) = EnterFunction : +# 1718| mu1718_2(unknown) = AliasedDefinition : +# 1718| mu1718_3(unknown) = InitializeNonLocal : +# 1718| r1718_4(glval) = VariableAddress[#this] : +# 1718| mu1718_5(glval) = InitializeParameter[#this] : &:r1718_4 +# 1718| r1718_6(glval) = Load[#this] : &:r1718_4, ~m? +# 1718| mu1718_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1718_6 +# 1719| r1719_1(glval) = VariableAddress[l_inner1] : +# 1719| r1719_2(glval) = VariableAddress[#temp1719:24] : +# 1719| mu1719_3(decltype([...](...){...})) = Uninitialized[#temp1719:24] : &:r1719_2 +# 1719| r1719_4(glval) = FieldAddress[p1] : r1719_2 +# 1719| r1719_5(glval) = VariableAddress[#this] : +# 1719| r1719_6(lambda [] type at line 1719, col. 25 *) = Load[#this] : &:r1719_5, ~m? +# 1719| r1719_7(glval) = FieldAddress[p1] : r1719_6 +# 1719| r1719_8(TrivialLambdaClass) = Load[?] : &:r1719_7, ~m? +# 1719| mu1719_9(TrivialLambdaClass) = Store[?] : &:r1719_4, r1719_8 +# 1719| r1719_10(decltype([...](...){...})) = Load[#temp1719:24] : &:r1719_2, ~m? +# 1719| mu1719_11(decltype([...](...){...})) = Store[l_inner1] : &:r1719_1, r1719_10 +# 1720| v1720_1(void) = NoOp : +# 1718| v1718_8(void) = ReturnIndirection[#this] : &:r1718_6, ~m? +# 1718| v1718_9(void) = ReturnVoid : +# 1718| v1718_10(void) = AliasedUse : ~m? +# 1718| v1718_11(void) = ExitFunction : -# 1717| void (void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1716, col. 21)::operator()() const)::(lambda [] type at line 1717, col. 25)::operator()() const -# 1717| Block 0 -# 1717| v1717_1(void) = EnterFunction : -# 1717| mu1717_2(unknown) = AliasedDefinition : -# 1717| mu1717_3(unknown) = InitializeNonLocal : -# 1717| r1717_4(glval) = VariableAddress[#this] : -# 1717| mu1717_5(glval) = InitializeParameter[#this] : &:r1717_4 -# 1717| r1717_6(glval) = Load[#this] : &:r1717_4, ~m? -# 1717| mu1717_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1717_6 -# 1717| v1717_8(void) = NoOp : -# 1717| v1717_9(void) = ReturnIndirection[#this] : &:r1717_6, ~m? -# 1717| v1717_10(void) = ReturnVoid : -# 1717| v1717_11(void) = AliasedUse : ~m? -# 1717| v1717_12(void) = ExitFunction : +# 1719| void (void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21)::operator()() const)::(lambda [] type at line 1719, col. 25)::operator()() const +# 1719| Block 0 +# 1719| v1719_1(void) = EnterFunction : +# 1719| mu1719_2(unknown) = AliasedDefinition : +# 1719| mu1719_3(unknown) = InitializeNonLocal : +# 1719| r1719_4(glval) = VariableAddress[#this] : +# 1719| mu1719_5(glval) = InitializeParameter[#this] : &:r1719_4 +# 1719| r1719_6(glval) = Load[#this] : &:r1719_4, ~m? +# 1719| mu1719_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1719_6 +# 1719| v1719_8(void) = NoOp : +# 1719| v1719_9(void) = ReturnIndirection[#this] : &:r1719_6, ~m? +# 1719| v1719_10(void) = ReturnVoid : +# 1719| v1719_11(void) = AliasedUse : ~m? +# 1719| v1719_12(void) = ExitFunction : -# 1724| void CopyConstructorWithImplicitArgumentClass::CopyConstructorWithImplicitArgumentClass() -# 1724| Block 0 -# 1724| v1724_1(void) = EnterFunction : -# 1724| mu1724_2(unknown) = AliasedDefinition : -# 1724| mu1724_3(unknown) = InitializeNonLocal : -# 1724| r1724_4(glval) = VariableAddress[#this] : -# 1724| mu1724_5(glval) = InitializeParameter[#this] : &:r1724_4 -# 1724| r1724_6(glval) = Load[#this] : &:r1724_4, ~m? -# 1724| mu1724_7(CopyConstructorWithImplicitArgumentClass) = InitializeIndirection[#this] : &:r1724_6 -# 1724| v1724_8(void) = NoOp : -# 1724| v1724_9(void) = ReturnIndirection[#this] : &:r1724_6, ~m? -# 1724| v1724_10(void) = ReturnVoid : -# 1724| v1724_11(void) = AliasedUse : ~m? -# 1724| v1724_12(void) = ExitFunction : +# 1726| void CopyConstructorWithImplicitArgumentClass::CopyConstructorWithImplicitArgumentClass() +# 1726| Block 0 +# 1726| v1726_1(void) = EnterFunction : +# 1726| mu1726_2(unknown) = AliasedDefinition : +# 1726| mu1726_3(unknown) = InitializeNonLocal : +# 1726| r1726_4(glval) = VariableAddress[#this] : +# 1726| mu1726_5(glval) = InitializeParameter[#this] : &:r1726_4 +# 1726| r1726_6(glval) = Load[#this] : &:r1726_4, ~m? +# 1726| mu1726_7(CopyConstructorWithImplicitArgumentClass) = InitializeIndirection[#this] : &:r1726_6 +# 1726| v1726_8(void) = NoOp : +# 1726| v1726_9(void) = ReturnIndirection[#this] : &:r1726_6, ~m? +# 1726| v1726_10(void) = ReturnVoid : +# 1726| v1726_11(void) = AliasedUse : ~m? +# 1726| v1726_12(void) = ExitFunction : -# 1725| void CopyConstructorWithImplicitArgumentClass::CopyConstructorWithImplicitArgumentClass(CopyConstructorWithImplicitArgumentClass const&) -# 1725| Block 0 -# 1725| v1725_1(void) = EnterFunction : -# 1725| mu1725_2(unknown) = AliasedDefinition : -# 1725| mu1725_3(unknown) = InitializeNonLocal : -# 1725| r1725_4(glval) = VariableAddress[#this] : -# 1725| mu1725_5(glval) = InitializeParameter[#this] : &:r1725_4 -# 1725| r1725_6(glval) = Load[#this] : &:r1725_4, ~m? -# 1725| mu1725_7(CopyConstructorWithImplicitArgumentClass) = InitializeIndirection[#this] : &:r1725_6 -# 1725| r1725_8(glval) = VariableAddress[c] : -# 1725| mu1725_9(CopyConstructorWithImplicitArgumentClass &) = InitializeParameter[c] : &:r1725_8 -# 1725| r1725_10(CopyConstructorWithImplicitArgumentClass &) = Load[c] : &:r1725_8, ~m? -# 1725| mu1725_11(unknown) = InitializeIndirection[c] : &:r1725_10 -# 1726| r1726_1(glval) = VariableAddress[c] : -# 1726| r1726_2(CopyConstructorWithImplicitArgumentClass &) = Load[c] : &:r1726_1, ~m? -# 1726| r1726_3(glval) = CopyValue : r1726_2 -# 1726| r1726_4(glval) = FieldAddress[x] : r1726_3 -# 1726| r1726_5(int) = Load[?] : &:r1726_4, ~m? -# 1726| r1726_6(glval) = VariableAddress[#this] : -# 1726| r1726_7(CopyConstructorWithImplicitArgumentClass *) = Load[#this] : &:r1726_6, ~m? -# 1726| r1726_8(glval) = FieldAddress[x] : r1726_7 -# 1726| mu1726_9(int) = Store[?] : &:r1726_8, r1726_5 -# 1727| v1727_1(void) = NoOp : -# 1725| v1725_12(void) = ReturnIndirection[#this] : &:r1725_6, ~m? -# 1725| v1725_13(void) = ReturnIndirection[c] : &:r1725_10, ~m? -# 1725| v1725_14(void) = ReturnVoid : -# 1725| v1725_15(void) = AliasedUse : ~m? -# 1725| v1725_16(void) = ExitFunction : +# 1727| void CopyConstructorWithImplicitArgumentClass::CopyConstructorWithImplicitArgumentClass(CopyConstructorWithImplicitArgumentClass const&) +# 1727| Block 0 +# 1727| v1727_1(void) = EnterFunction : +# 1727| mu1727_2(unknown) = AliasedDefinition : +# 1727| mu1727_3(unknown) = InitializeNonLocal : +# 1727| r1727_4(glval) = VariableAddress[#this] : +# 1727| mu1727_5(glval) = InitializeParameter[#this] : &:r1727_4 +# 1727| r1727_6(glval) = Load[#this] : &:r1727_4, ~m? +# 1727| mu1727_7(CopyConstructorWithImplicitArgumentClass) = InitializeIndirection[#this] : &:r1727_6 +# 1727| r1727_8(glval) = VariableAddress[c] : +# 1727| mu1727_9(CopyConstructorWithImplicitArgumentClass &) = InitializeParameter[c] : &:r1727_8 +# 1727| r1727_10(CopyConstructorWithImplicitArgumentClass &) = Load[c] : &:r1727_8, ~m? +# 1727| mu1727_11(unknown) = InitializeIndirection[c] : &:r1727_10 +# 1728| r1728_1(glval) = VariableAddress[c] : +# 1728| r1728_2(CopyConstructorWithImplicitArgumentClass &) = Load[c] : &:r1728_1, ~m? +# 1728| r1728_3(glval) = CopyValue : r1728_2 +# 1728| r1728_4(glval) = FieldAddress[x] : r1728_3 +# 1728| r1728_5(int) = Load[?] : &:r1728_4, ~m? +# 1728| r1728_6(glval) = VariableAddress[#this] : +# 1728| r1728_7(CopyConstructorWithImplicitArgumentClass *) = Load[#this] : &:r1728_6, ~m? +# 1728| r1728_8(glval) = FieldAddress[x] : r1728_7 +# 1728| mu1728_9(int) = Store[?] : &:r1728_8, r1728_5 +# 1729| v1729_1(void) = NoOp : +# 1727| v1727_12(void) = ReturnIndirection[#this] : &:r1727_6, ~m? +# 1727| v1727_13(void) = ReturnIndirection[c] : &:r1727_10, ~m? +# 1727| v1727_14(void) = ReturnVoid : +# 1727| v1727_15(void) = AliasedUse : ~m? +# 1727| v1727_16(void) = ExitFunction : -# 1733| void CopyConstructorWithBitwiseCopyClass::CopyConstructorWithBitwiseCopyClass() -# 1733| Block 0 -# 1733| v1733_1(void) = EnterFunction : -# 1733| mu1733_2(unknown) = AliasedDefinition : -# 1733| mu1733_3(unknown) = InitializeNonLocal : -# 1733| r1733_4(glval) = VariableAddress[#this] : -# 1733| mu1733_5(glval) = InitializeParameter[#this] : &:r1733_4 -# 1733| r1733_6(glval) = Load[#this] : &:r1733_4, ~m? -# 1733| mu1733_7(CopyConstructorWithBitwiseCopyClass) = InitializeIndirection[#this] : &:r1733_6 -# 1733| v1733_8(void) = NoOp : -# 1733| v1733_9(void) = ReturnIndirection[#this] : &:r1733_6, ~m? -# 1733| v1733_10(void) = ReturnVoid : -# 1733| v1733_11(void) = AliasedUse : ~m? -# 1733| v1733_12(void) = ExitFunction : +# 1735| void CopyConstructorWithBitwiseCopyClass::CopyConstructorWithBitwiseCopyClass() +# 1735| Block 0 +# 1735| v1735_1(void) = EnterFunction : +# 1735| mu1735_2(unknown) = AliasedDefinition : +# 1735| mu1735_3(unknown) = InitializeNonLocal : +# 1735| r1735_4(glval) = VariableAddress[#this] : +# 1735| mu1735_5(glval) = InitializeParameter[#this] : &:r1735_4 +# 1735| r1735_6(glval) = Load[#this] : &:r1735_4, ~m? +# 1735| mu1735_7(CopyConstructorWithBitwiseCopyClass) = InitializeIndirection[#this] : &:r1735_6 +# 1735| v1735_8(void) = NoOp : +# 1735| v1735_9(void) = ReturnIndirection[#this] : &:r1735_6, ~m? +# 1735| v1735_10(void) = ReturnVoid : +# 1735| v1735_11(void) = AliasedUse : ~m? +# 1735| v1735_12(void) = ExitFunction : -# 1736| void CopyConstructorTestNonVirtualClass::CopyConstructorTestNonVirtualClass(CopyConstructorTestNonVirtualClass const&) -# 1736| Block 0 -# 1736| v1736_1(void) = EnterFunction : -# 1736| mu1736_2(unknown) = AliasedDefinition : -# 1736| mu1736_3(unknown) = InitializeNonLocal : -# 1736| r1736_4(glval) = VariableAddress[#this] : -# 1736| mu1736_5(glval) = InitializeParameter[#this] : &:r1736_4 -# 1736| r1736_6(glval) = Load[#this] : &:r1736_4, ~m? -# 1736| mu1736_7(CopyConstructorTestNonVirtualClass) = InitializeIndirection[#this] : &:r1736_6 +# 1738| void CopyConstructorTestNonVirtualClass::CopyConstructorTestNonVirtualClass(CopyConstructorTestNonVirtualClass const&) +# 1738| Block 0 +# 1738| v1738_1(void) = EnterFunction : +# 1738| mu1738_2(unknown) = AliasedDefinition : +# 1738| mu1738_3(unknown) = InitializeNonLocal : +# 1738| r1738_4(glval) = VariableAddress[#this] : +# 1738| mu1738_5(glval) = InitializeParameter[#this] : &:r1738_4 +# 1738| r1738_6(glval) = Load[#this] : &:r1738_4, ~m? +# 1738| mu1738_7(CopyConstructorTestNonVirtualClass) = InitializeIndirection[#this] : &:r1738_6 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| mu0_2(CopyConstructorTestNonVirtualClass &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(CopyConstructorTestNonVirtualClass &) = Load[(unnamed parameter 0)] : &:r0_1, ~m? #-----| mu0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 1736| r1736_8(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithImplicitArgumentClass] : mu1736_5 -# 1736| r1736_9(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : -# 1736| r1736_10(glval) = VariableAddress[(unnamed parameter 0)] : -# 1736| r1736_11(CopyConstructorTestNonVirtualClass &) = Load[(unnamed parameter 0)] : &:r1736_10, ~m? -# 1736| r1736_12(glval) = CopyValue : r1736_11 -# 1736| r1736_13(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithImplicitArgumentClass] : r1736_12 -# 1736| r1736_14(CopyConstructorWithImplicitArgumentClass &) = CopyValue : r1736_13 -# 1736| v1736_15(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1736_9, this:r1736_8, 0:r1736_14 -# 1736| mu1736_16(unknown) = ^CallSideEffect : ~m? -# 1736| v1736_17(void) = ^BufferReadSideEffect[0] : &:r1736_14, ~m? -# 1736| mu1736_18(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1736_8 -# 1736| v1736_19(void) = NoOp : -# 1736| v1736_20(void) = ReturnIndirection[#this] : &:r1736_6, ~m? +# 1738| r1738_8(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithImplicitArgumentClass] : mu1738_5 +# 1738| r1738_9(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : +# 1738| r1738_10(glval) = VariableAddress[(unnamed parameter 0)] : +# 1738| r1738_11(CopyConstructorTestNonVirtualClass &) = Load[(unnamed parameter 0)] : &:r1738_10, ~m? +# 1738| r1738_12(glval) = CopyValue : r1738_11 +# 1738| r1738_13(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithImplicitArgumentClass] : r1738_12 +# 1738| r1738_14(CopyConstructorWithImplicitArgumentClass &) = CopyValue : r1738_13 +# 1738| v1738_15(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1738_9, this:r1738_8, 0:r1738_14 +# 1738| mu1738_16(unknown) = ^CallSideEffect : ~m? +# 1738| v1738_17(void) = ^BufferReadSideEffect[0] : &:r1738_14, ~m? +# 1738| mu1738_18(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1738_8 +# 1738| v1738_19(void) = NoOp : +# 1738| v1738_20(void) = ReturnIndirection[#this] : &:r1738_6, ~m? #-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, ~m? -# 1736| v1736_21(void) = ReturnVoid : -# 1736| v1736_22(void) = AliasedUse : ~m? -# 1736| v1736_23(void) = ExitFunction : +# 1738| v1738_21(void) = ReturnVoid : +# 1738| v1738_22(void) = AliasedUse : ~m? +# 1738| v1738_23(void) = ExitFunction : -# 1740| void CopyConstructorTestNonVirtualClass::CopyConstructorTestNonVirtualClass() -# 1740| Block 0 -# 1740| v1740_1(void) = EnterFunction : -# 1740| mu1740_2(unknown) = AliasedDefinition : -# 1740| mu1740_3(unknown) = InitializeNonLocal : -# 1740| r1740_4(glval) = VariableAddress[#this] : -# 1740| mu1740_5(glval) = InitializeParameter[#this] : &:r1740_4 -# 1740| r1740_6(glval) = Load[#this] : &:r1740_4, ~m? -# 1740| mu1740_7(CopyConstructorTestNonVirtualClass) = InitializeIndirection[#this] : &:r1740_6 -# 1740| r1740_8(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithImplicitArgumentClass] : mu1740_5 -# 1740| r1740_9(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : -# 1740| v1740_10(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1740_9, this:r1740_8 -# 1740| mu1740_11(unknown) = ^CallSideEffect : ~m? -# 1740| mu1740_12(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1740_8 -# 1740| r1740_13(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithBitwiseCopyClass] : mu1740_5 -# 1740| r1740_14(glval) = FunctionAddress[CopyConstructorWithBitwiseCopyClass] : -# 1740| v1740_15(void) = Call[CopyConstructorWithBitwiseCopyClass] : func:r1740_14, this:r1740_13 -# 1740| mu1740_16(unknown) = ^CallSideEffect : ~m? -# 1740| mu1740_17(CopyConstructorWithBitwiseCopyClass) = ^IndirectMayWriteSideEffect[-1] : &:r1740_13 -# 1740| v1740_18(void) = NoOp : -# 1740| v1740_19(void) = ReturnIndirection[#this] : &:r1740_6, ~m? -# 1740| v1740_20(void) = ReturnVoid : -# 1740| v1740_21(void) = AliasedUse : ~m? -# 1740| v1740_22(void) = ExitFunction : +# 1742| void CopyConstructorTestNonVirtualClass::CopyConstructorTestNonVirtualClass() +# 1742| Block 0 +# 1742| v1742_1(void) = EnterFunction : +# 1742| mu1742_2(unknown) = AliasedDefinition : +# 1742| mu1742_3(unknown) = InitializeNonLocal : +# 1742| r1742_4(glval) = VariableAddress[#this] : +# 1742| mu1742_5(glval) = InitializeParameter[#this] : &:r1742_4 +# 1742| r1742_6(glval) = Load[#this] : &:r1742_4, ~m? +# 1742| mu1742_7(CopyConstructorTestNonVirtualClass) = InitializeIndirection[#this] : &:r1742_6 +# 1742| r1742_8(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithImplicitArgumentClass] : mu1742_5 +# 1742| r1742_9(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : +# 1742| v1742_10(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1742_9, this:r1742_8 +# 1742| mu1742_11(unknown) = ^CallSideEffect : ~m? +# 1742| mu1742_12(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1742_8 +# 1742| r1742_13(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithBitwiseCopyClass] : mu1742_5 +# 1742| r1742_14(glval) = FunctionAddress[CopyConstructorWithBitwiseCopyClass] : +# 1742| v1742_15(void) = Call[CopyConstructorWithBitwiseCopyClass] : func:r1742_14, this:r1742_13 +# 1742| mu1742_16(unknown) = ^CallSideEffect : ~m? +# 1742| mu1742_17(CopyConstructorWithBitwiseCopyClass) = ^IndirectMayWriteSideEffect[-1] : &:r1742_13 +# 1742| v1742_18(void) = NoOp : +# 1742| v1742_19(void) = ReturnIndirection[#this] : &:r1742_6, ~m? +# 1742| v1742_20(void) = ReturnVoid : +# 1742| v1742_21(void) = AliasedUse : ~m? +# 1742| v1742_22(void) = ExitFunction : -# 1743| void CopyConstructorTestVirtualClass::CopyConstructorTestVirtualClass(CopyConstructorTestVirtualClass const&) -# 1743| Block 0 -# 1743| v1743_1(void) = EnterFunction : -# 1743| mu1743_2(unknown) = AliasedDefinition : -# 1743| mu1743_3(unknown) = InitializeNonLocal : -# 1743| r1743_4(glval) = VariableAddress[#this] : -# 1743| mu1743_5(glval) = InitializeParameter[#this] : &:r1743_4 -# 1743| r1743_6(glval) = Load[#this] : &:r1743_4, ~m? -# 1743| mu1743_7(CopyConstructorTestVirtualClass) = InitializeIndirection[#this] : &:r1743_6 +# 1745| void CopyConstructorTestVirtualClass::CopyConstructorTestVirtualClass(CopyConstructorTestVirtualClass const&) +# 1745| Block 0 +# 1745| v1745_1(void) = EnterFunction : +# 1745| mu1745_2(unknown) = AliasedDefinition : +# 1745| mu1745_3(unknown) = InitializeNonLocal : +# 1745| r1745_4(glval) = VariableAddress[#this] : +# 1745| mu1745_5(glval) = InitializeParameter[#this] : &:r1745_4 +# 1745| r1745_6(glval) = Load[#this] : &:r1745_4, ~m? +# 1745| mu1745_7(CopyConstructorTestVirtualClass) = InitializeIndirection[#this] : &:r1745_6 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| mu0_2(CopyConstructorTestVirtualClass &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(CopyConstructorTestVirtualClass &) = Load[(unnamed parameter 0)] : &:r0_1, ~m? #-----| mu0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 1743| r1743_8(glval) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithImplicitArgumentClass] : mu1743_5 -# 1743| r1743_9(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : -# 1743| r1743_10(glval) = VariableAddress[(unnamed parameter 0)] : -# 1743| r1743_11(CopyConstructorTestVirtualClass &) = Load[(unnamed parameter 0)] : &:r1743_10, ~m? -# 1743| r1743_12(glval) = CopyValue : r1743_11 -# 1743| r1743_13(glval) = ConvertToVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithImplicitArgumentClass] : r1743_12 -# 1743| r1743_14(CopyConstructorWithImplicitArgumentClass &) = CopyValue : r1743_13 -# 1743| v1743_15(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1743_9, this:r1743_8, 0:r1743_14 -# 1743| mu1743_16(unknown) = ^CallSideEffect : ~m? -# 1743| v1743_17(void) = ^BufferReadSideEffect[0] : &:r1743_14, ~m? -# 1743| mu1743_18(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1743_8 -# 1743| v1743_19(void) = NoOp : -# 1743| v1743_20(void) = ReturnIndirection[#this] : &:r1743_6, ~m? +# 1745| r1745_8(glval) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithImplicitArgumentClass] : mu1745_5 +# 1745| r1745_9(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : +# 1745| r1745_10(glval) = VariableAddress[(unnamed parameter 0)] : +# 1745| r1745_11(CopyConstructorTestVirtualClass &) = Load[(unnamed parameter 0)] : &:r1745_10, ~m? +# 1745| r1745_12(glval) = CopyValue : r1745_11 +# 1745| r1745_13(glval) = ConvertToVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithImplicitArgumentClass] : r1745_12 +# 1745| r1745_14(CopyConstructorWithImplicitArgumentClass &) = CopyValue : r1745_13 +# 1745| v1745_15(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1745_9, this:r1745_8, 0:r1745_14 +# 1745| mu1745_16(unknown) = ^CallSideEffect : ~m? +# 1745| v1745_17(void) = ^BufferReadSideEffect[0] : &:r1745_14, ~m? +# 1745| mu1745_18(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1745_8 +# 1745| v1745_19(void) = NoOp : +# 1745| v1745_20(void) = ReturnIndirection[#this] : &:r1745_6, ~m? #-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, ~m? -# 1743| v1743_21(void) = ReturnVoid : -# 1743| v1743_22(void) = AliasedUse : ~m? -# 1743| v1743_23(void) = ExitFunction : +# 1745| v1745_21(void) = ReturnVoid : +# 1745| v1745_22(void) = AliasedUse : ~m? +# 1745| v1745_23(void) = ExitFunction : -# 1747| void CopyConstructorTestVirtualClass::CopyConstructorTestVirtualClass() -# 1747| Block 0 -# 1747| v1747_1(void) = EnterFunction : -# 1747| mu1747_2(unknown) = AliasedDefinition : -# 1747| mu1747_3(unknown) = InitializeNonLocal : -# 1747| r1747_4(glval) = VariableAddress[#this] : -# 1747| mu1747_5(glval) = InitializeParameter[#this] : &:r1747_4 -# 1747| r1747_6(glval) = Load[#this] : &:r1747_4, ~m? -# 1747| mu1747_7(CopyConstructorTestVirtualClass) = InitializeIndirection[#this] : &:r1747_6 -# 1747| r1747_8(glval) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithImplicitArgumentClass] : mu1747_5 -# 1747| r1747_9(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : -# 1747| v1747_10(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1747_9, this:r1747_8 -# 1747| mu1747_11(unknown) = ^CallSideEffect : ~m? -# 1747| mu1747_12(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1747_8 -# 1747| r1747_13(glval) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithBitwiseCopyClass] : mu1747_5 -# 1747| r1747_14(glval) = FunctionAddress[CopyConstructorWithBitwiseCopyClass] : -# 1747| v1747_15(void) = Call[CopyConstructorWithBitwiseCopyClass] : func:r1747_14, this:r1747_13 -# 1747| mu1747_16(unknown) = ^CallSideEffect : ~m? -# 1747| mu1747_17(CopyConstructorWithBitwiseCopyClass) = ^IndirectMayWriteSideEffect[-1] : &:r1747_13 -# 1747| v1747_18(void) = NoOp : -# 1747| v1747_19(void) = ReturnIndirection[#this] : &:r1747_6, ~m? -# 1747| v1747_20(void) = ReturnVoid : -# 1747| v1747_21(void) = AliasedUse : ~m? -# 1747| v1747_22(void) = ExitFunction : +# 1749| void CopyConstructorTestVirtualClass::CopyConstructorTestVirtualClass() +# 1749| Block 0 +# 1749| v1749_1(void) = EnterFunction : +# 1749| mu1749_2(unknown) = AliasedDefinition : +# 1749| mu1749_3(unknown) = InitializeNonLocal : +# 1749| r1749_4(glval) = VariableAddress[#this] : +# 1749| mu1749_5(glval) = InitializeParameter[#this] : &:r1749_4 +# 1749| r1749_6(glval) = Load[#this] : &:r1749_4, ~m? +# 1749| mu1749_7(CopyConstructorTestVirtualClass) = InitializeIndirection[#this] : &:r1749_6 +# 1749| r1749_8(glval) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithImplicitArgumentClass] : mu1749_5 +# 1749| r1749_9(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : +# 1749| v1749_10(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1749_9, this:r1749_8 +# 1749| mu1749_11(unknown) = ^CallSideEffect : ~m? +# 1749| mu1749_12(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1749_8 +# 1749| r1749_13(glval) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithBitwiseCopyClass] : mu1749_5 +# 1749| r1749_14(glval) = FunctionAddress[CopyConstructorWithBitwiseCopyClass] : +# 1749| v1749_15(void) = Call[CopyConstructorWithBitwiseCopyClass] : func:r1749_14, this:r1749_13 +# 1749| mu1749_16(unknown) = ^CallSideEffect : ~m? +# 1749| mu1749_17(CopyConstructorWithBitwiseCopyClass) = ^IndirectMayWriteSideEffect[-1] : &:r1749_13 +# 1749| v1749_18(void) = NoOp : +# 1749| v1749_19(void) = ReturnIndirection[#this] : &:r1749_6, ~m? +# 1749| v1749_20(void) = ReturnVoid : +# 1749| v1749_21(void) = AliasedUse : ~m? +# 1749| v1749_22(void) = ExitFunction : -# 1750| int implicit_copy_constructor_test(CopyConstructorTestNonVirtualClass const&, CopyConstructorTestVirtualClass const&) -# 1750| Block 0 -# 1750| v1750_1(void) = EnterFunction : -# 1750| mu1750_2(unknown) = AliasedDefinition : -# 1750| mu1750_3(unknown) = InitializeNonLocal : -# 1751| r1751_1(glval) = VariableAddress[x] : -# 1751| mu1751_2(CopyConstructorTestNonVirtualClass &) = InitializeParameter[x] : &:r1751_1 -# 1751| r1751_3(CopyConstructorTestNonVirtualClass &) = Load[x] : &:r1751_1, ~m? -# 1751| mu1751_4(unknown) = InitializeIndirection[x] : &:r1751_3 -# 1752| r1752_1(glval) = VariableAddress[y] : -# 1752| mu1752_2(CopyConstructorTestVirtualClass &) = InitializeParameter[y] : &:r1752_1 -# 1752| r1752_3(CopyConstructorTestVirtualClass &) = Load[y] : &:r1752_1, ~m? -# 1752| mu1752_4(unknown) = InitializeIndirection[y] : &:r1752_3 -# 1753| r1753_1(glval) = VariableAddress[cx] : -# 1753| mu1753_2(CopyConstructorTestNonVirtualClass) = Uninitialized[cx] : &:r1753_1 -# 1753| r1753_3(glval) = FunctionAddress[CopyConstructorTestNonVirtualClass] : -# 1753| r1753_4(glval) = VariableAddress[x] : -# 1753| r1753_5(CopyConstructorTestNonVirtualClass &) = Load[x] : &:r1753_4, ~m? -# 1753| r1753_6(glval) = CopyValue : r1753_5 -# 1753| r1753_7(CopyConstructorTestNonVirtualClass &) = CopyValue : r1753_6 -# 1753| v1753_8(void) = Call[CopyConstructorTestNonVirtualClass] : func:r1753_3, this:r1753_1, 0:r1753_7 -# 1753| mu1753_9(unknown) = ^CallSideEffect : ~m? -# 1753| v1753_10(void) = ^BufferReadSideEffect[0] : &:r1753_7, ~m? -# 1753| mu1753_11(CopyConstructorTestNonVirtualClass) = ^IndirectMayWriteSideEffect[-1] : &:r1753_1 -# 1754| r1754_1(glval) = VariableAddress[cy] : -# 1754| mu1754_2(CopyConstructorTestVirtualClass) = Uninitialized[cy] : &:r1754_1 -# 1754| r1754_3(glval) = FunctionAddress[CopyConstructorTestVirtualClass] : -# 1754| r1754_4(glval) = VariableAddress[y] : -# 1754| r1754_5(CopyConstructorTestVirtualClass &) = Load[y] : &:r1754_4, ~m? -# 1754| r1754_6(glval) = CopyValue : r1754_5 -# 1754| r1754_7(CopyConstructorTestVirtualClass &) = CopyValue : r1754_6 -# 1754| v1754_8(void) = Call[CopyConstructorTestVirtualClass] : func:r1754_3, this:r1754_1, 0:r1754_7 -# 1754| mu1754_9(unknown) = ^CallSideEffect : ~m? -# 1754| v1754_10(void) = ^BufferReadSideEffect[0] : &:r1754_7, ~m? -# 1754| mu1754_11(CopyConstructorTestVirtualClass) = ^IndirectMayWriteSideEffect[-1] : &:r1754_1 -# 1755| r1755_1(glval) = VariableAddress[#return] : -# 1755| mu1755_2(int) = Uninitialized[#return] : &:r1755_1 -# 1751| v1751_5(void) = ReturnIndirection[x] : &:r1751_3, ~m? -# 1752| v1752_5(void) = ReturnIndirection[y] : &:r1752_3, ~m? -# 1750| r1750_4(glval) = VariableAddress[#return] : -# 1750| v1750_5(void) = ReturnValue : &:r1750_4, ~m? -# 1750| v1750_6(void) = AliasedUse : ~m? -# 1750| v1750_7(void) = ExitFunction : +# 1752| int implicit_copy_constructor_test(CopyConstructorTestNonVirtualClass const&, CopyConstructorTestVirtualClass const&) +# 1752| Block 0 +# 1752| v1752_1(void) = EnterFunction : +# 1752| mu1752_2(unknown) = AliasedDefinition : +# 1752| mu1752_3(unknown) = InitializeNonLocal : +# 1753| r1753_1(glval) = VariableAddress[x] : +# 1753| mu1753_2(CopyConstructorTestNonVirtualClass &) = InitializeParameter[x] : &:r1753_1 +# 1753| r1753_3(CopyConstructorTestNonVirtualClass &) = Load[x] : &:r1753_1, ~m? +# 1753| mu1753_4(unknown) = InitializeIndirection[x] : &:r1753_3 +# 1754| r1754_1(glval) = VariableAddress[y] : +# 1754| mu1754_2(CopyConstructorTestVirtualClass &) = InitializeParameter[y] : &:r1754_1 +# 1754| r1754_3(CopyConstructorTestVirtualClass &) = Load[y] : &:r1754_1, ~m? +# 1754| mu1754_4(unknown) = InitializeIndirection[y] : &:r1754_3 +# 1755| r1755_1(glval) = VariableAddress[cx] : +# 1755| mu1755_2(CopyConstructorTestNonVirtualClass) = Uninitialized[cx] : &:r1755_1 +# 1755| r1755_3(glval) = FunctionAddress[CopyConstructorTestNonVirtualClass] : +# 1755| r1755_4(glval) = VariableAddress[x] : +# 1755| r1755_5(CopyConstructorTestNonVirtualClass &) = Load[x] : &:r1755_4, ~m? +# 1755| r1755_6(glval) = CopyValue : r1755_5 +# 1755| r1755_7(CopyConstructorTestNonVirtualClass &) = CopyValue : r1755_6 +# 1755| v1755_8(void) = Call[CopyConstructorTestNonVirtualClass] : func:r1755_3, this:r1755_1, 0:r1755_7 +# 1755| mu1755_9(unknown) = ^CallSideEffect : ~m? +# 1755| v1755_10(void) = ^BufferReadSideEffect[0] : &:r1755_7, ~m? +# 1755| mu1755_11(CopyConstructorTestNonVirtualClass) = ^IndirectMayWriteSideEffect[-1] : &:r1755_1 +# 1756| r1756_1(glval) = VariableAddress[cy] : +# 1756| mu1756_2(CopyConstructorTestVirtualClass) = Uninitialized[cy] : &:r1756_1 +# 1756| r1756_3(glval) = FunctionAddress[CopyConstructorTestVirtualClass] : +# 1756| r1756_4(glval) = VariableAddress[y] : +# 1756| r1756_5(CopyConstructorTestVirtualClass &) = Load[y] : &:r1756_4, ~m? +# 1756| r1756_6(glval) = CopyValue : r1756_5 +# 1756| r1756_7(CopyConstructorTestVirtualClass &) = CopyValue : r1756_6 +# 1756| v1756_8(void) = Call[CopyConstructorTestVirtualClass] : func:r1756_3, this:r1756_1, 0:r1756_7 +# 1756| mu1756_9(unknown) = ^CallSideEffect : ~m? +# 1756| v1756_10(void) = ^BufferReadSideEffect[0] : &:r1756_7, ~m? +# 1756| mu1756_11(CopyConstructorTestVirtualClass) = ^IndirectMayWriteSideEffect[-1] : &:r1756_1 +# 1757| r1757_1(glval) = VariableAddress[#return] : +# 1757| mu1757_2(int) = Uninitialized[#return] : &:r1757_1 +# 1753| v1753_5(void) = ReturnIndirection[x] : &:r1753_3, ~m? +# 1754| v1754_5(void) = ReturnIndirection[y] : &:r1754_3, ~m? +# 1752| r1752_4(glval) = VariableAddress[#return] : +# 1752| v1752_5(void) = ReturnValue : &:r1752_4, ~m? +# 1752| v1752_6(void) = AliasedUse : ~m? +# 1752| v1752_7(void) = ExitFunction : -# 1757| void if_initialization(int) -# 1757| Block 0 -# 1757| v1757_1(void) = EnterFunction : -# 1757| mu1757_2(unknown) = AliasedDefinition : -# 1757| mu1757_3(unknown) = InitializeNonLocal : -# 1757| r1757_4(glval) = VariableAddress[x] : -# 1757| mu1757_5(int) = InitializeParameter[x] : &:r1757_4 -# 1758| r1758_1(glval) = VariableAddress[y] : -# 1758| r1758_2(glval) = VariableAddress[x] : -# 1758| r1758_3(int) = Load[x] : &:r1758_2, ~m? -# 1758| mu1758_4(int) = Store[y] : &:r1758_1, r1758_3 -# 1758| r1758_5(glval) = VariableAddress[x] : -# 1758| r1758_6(int) = Load[x] : &:r1758_5, ~m? -# 1758| r1758_7(int) = Constant[1] : -# 1758| r1758_8(int) = Add : r1758_6, r1758_7 -# 1758| r1758_9(int) = Constant[0] : -# 1758| r1758_10(bool) = CompareNE : r1758_8, r1758_9 -# 1758| v1758_11(void) = ConditionalBranch : r1758_10 +# 1759| void if_initialization(int) +# 1759| Block 0 +# 1759| v1759_1(void) = EnterFunction : +# 1759| mu1759_2(unknown) = AliasedDefinition : +# 1759| mu1759_3(unknown) = InitializeNonLocal : +# 1759| r1759_4(glval) = VariableAddress[x] : +# 1759| mu1759_5(int) = InitializeParameter[x] : &:r1759_4 +# 1760| r1760_1(glval) = VariableAddress[y] : +# 1760| r1760_2(glval) = VariableAddress[x] : +# 1760| r1760_3(int) = Load[x] : &:r1760_2, ~m? +# 1760| mu1760_4(int) = Store[y] : &:r1760_1, r1760_3 +# 1760| r1760_5(glval) = VariableAddress[x] : +# 1760| r1760_6(int) = Load[x] : &:r1760_5, ~m? +# 1760| r1760_7(int) = Constant[1] : +# 1760| r1760_8(int) = Add : r1760_6, r1760_7 +# 1760| r1760_9(int) = Constant[0] : +# 1760| r1760_10(bool) = CompareNE : r1760_8, r1760_9 +# 1760| v1760_11(void) = ConditionalBranch : r1760_10 #-----| False -> Block 2 #-----| True -> Block 1 -# 1759| Block 1 -# 1759| r1759_1(glval) = VariableAddress[x] : -# 1759| r1759_2(int) = Load[x] : &:r1759_1, ~m? -# 1759| r1759_3(glval) = VariableAddress[y] : -# 1759| r1759_4(int) = Load[y] : &:r1759_3, ~m? -# 1759| r1759_5(int) = Add : r1759_2, r1759_4 -# 1759| r1759_6(glval) = VariableAddress[x] : -# 1759| mu1759_7(int) = Store[x] : &:r1759_6, r1759_5 +# 1761| Block 1 +# 1761| r1761_1(glval) = VariableAddress[x] : +# 1761| r1761_2(int) = Load[x] : &:r1761_1, ~m? +# 1761| r1761_3(glval) = VariableAddress[y] : +# 1761| r1761_4(int) = Load[y] : &:r1761_3, ~m? +# 1761| r1761_5(int) = Add : r1761_2, r1761_4 +# 1761| r1761_6(glval) = VariableAddress[x] : +# 1761| mu1761_7(int) = Store[x] : &:r1761_6, r1761_5 #-----| Goto -> Block 2 -# 1762| Block 2 -# 1762| r1762_1(glval) = VariableAddress[w] : -# 1762| mu1762_2(int) = Uninitialized[w] : &:r1762_1 -# 1763| r1763_1(glval) = VariableAddress[x] : -# 1763| r1763_2(int) = Load[x] : &:r1763_1, ~m? -# 1763| r1763_3(glval) = VariableAddress[w] : -# 1763| mu1763_4(int) = Store[w] : &:r1763_3, r1763_2 -# 1763| r1763_5(glval) = VariableAddress[x] : -# 1763| r1763_6(int) = Load[x] : &:r1763_5, ~m? -# 1763| r1763_7(int) = Constant[1] : -# 1763| r1763_8(int) = Add : r1763_6, r1763_7 -# 1763| r1763_9(int) = Constant[0] : -# 1763| r1763_10(bool) = CompareNE : r1763_8, r1763_9 -# 1763| v1763_11(void) = ConditionalBranch : r1763_10 +# 1764| Block 2 +# 1764| r1764_1(glval) = VariableAddress[w] : +# 1764| mu1764_2(int) = Uninitialized[w] : &:r1764_1 +# 1765| r1765_1(glval) = VariableAddress[x] : +# 1765| r1765_2(int) = Load[x] : &:r1765_1, ~m? +# 1765| r1765_3(glval) = VariableAddress[w] : +# 1765| mu1765_4(int) = Store[w] : &:r1765_3, r1765_2 +# 1765| r1765_5(glval) = VariableAddress[x] : +# 1765| r1765_6(int) = Load[x] : &:r1765_5, ~m? +# 1765| r1765_7(int) = Constant[1] : +# 1765| r1765_8(int) = Add : r1765_6, r1765_7 +# 1765| r1765_9(int) = Constant[0] : +# 1765| r1765_10(bool) = CompareNE : r1765_8, r1765_9 +# 1765| v1765_11(void) = ConditionalBranch : r1765_10 #-----| False -> Block 4 #-----| True -> Block 3 -# 1764| Block 3 -# 1764| r1764_1(glval) = VariableAddress[x] : -# 1764| r1764_2(int) = Load[x] : &:r1764_1, ~m? -# 1764| r1764_3(glval) = VariableAddress[w] : -# 1764| r1764_4(int) = Load[w] : &:r1764_3, ~m? -# 1764| r1764_5(int) = Add : r1764_2, r1764_4 -# 1764| r1764_6(glval) = VariableAddress[x] : -# 1764| mu1764_7(int) = Store[x] : &:r1764_6, r1764_5 +# 1766| Block 3 +# 1766| r1766_1(glval) = VariableAddress[x] : +# 1766| r1766_2(int) = Load[x] : &:r1766_1, ~m? +# 1766| r1766_3(glval) = VariableAddress[w] : +# 1766| r1766_4(int) = Load[w] : &:r1766_3, ~m? +# 1766| r1766_5(int) = Add : r1766_2, r1766_4 +# 1766| r1766_6(glval) = VariableAddress[x] : +# 1766| mu1766_7(int) = Store[x] : &:r1766_6, r1766_5 #-----| Goto -> Block 4 -# 1767| Block 4 -# 1767| r1767_1(glval) = VariableAddress[x] : -# 1767| r1767_2(int) = Load[x] : &:r1767_1, ~m? -# 1767| r1767_3(glval) = VariableAddress[w] : -# 1767| mu1767_4(int) = Store[w] : &:r1767_3, r1767_2 -# 1767| r1767_5(glval) = VariableAddress[w2] : -# 1767| r1767_6(glval) = VariableAddress[w] : -# 1767| r1767_7(int) = Load[w] : &:r1767_6, ~m? -# 1767| mu1767_8(int) = Store[w2] : &:r1767_5, r1767_7 -# 1767| r1767_9(glval) = VariableAddress[w2] : -# 1767| r1767_10(int) = Load[w2] : &:r1767_9, ~m? -# 1767| r1767_11(int) = Constant[0] : -# 1767| r1767_12(bool) = CompareNE : r1767_10, r1767_11 -# 1767| r1767_13(bool) = CopyValue : r1767_12 -# 1767| v1767_14(void) = ConditionalBranch : r1767_13 +# 1769| Block 4 +# 1769| r1769_1(glval) = VariableAddress[x] : +# 1769| r1769_2(int) = Load[x] : &:r1769_1, ~m? +# 1769| r1769_3(glval) = VariableAddress[w] : +# 1769| mu1769_4(int) = Store[w] : &:r1769_3, r1769_2 +# 1769| r1769_5(glval) = VariableAddress[w2] : +# 1769| r1769_6(glval) = VariableAddress[w] : +# 1769| r1769_7(int) = Load[w] : &:r1769_6, ~m? +# 1769| mu1769_8(int) = Store[w2] : &:r1769_5, r1769_7 +# 1769| r1769_9(glval) = VariableAddress[w2] : +# 1769| r1769_10(int) = Load[w2] : &:r1769_9, ~m? +# 1769| r1769_11(int) = Constant[0] : +# 1769| r1769_12(bool) = CompareNE : r1769_10, r1769_11 +# 1769| r1769_13(bool) = CopyValue : r1769_12 +# 1769| v1769_14(void) = ConditionalBranch : r1769_13 #-----| False -> Block 6 #-----| True -> Block 5 -# 1768| Block 5 -# 1768| r1768_1(glval) = VariableAddress[x] : -# 1768| r1768_2(int) = Load[x] : &:r1768_1, ~m? -# 1768| r1768_3(glval) = VariableAddress[w] : -# 1768| r1768_4(int) = Load[w] : &:r1768_3, ~m? -# 1768| r1768_5(int) = Add : r1768_2, r1768_4 -# 1768| r1768_6(glval) = VariableAddress[x] : -# 1768| mu1768_7(int) = Store[x] : &:r1768_6, r1768_5 +# 1770| Block 5 +# 1770| r1770_1(glval) = VariableAddress[x] : +# 1770| r1770_2(int) = Load[x] : &:r1770_1, ~m? +# 1770| r1770_3(glval) = VariableAddress[w] : +# 1770| r1770_4(int) = Load[w] : &:r1770_3, ~m? +# 1770| r1770_5(int) = Add : r1770_2, r1770_4 +# 1770| r1770_6(glval) = VariableAddress[x] : +# 1770| mu1770_7(int) = Store[x] : &:r1770_6, r1770_5 #-----| Goto -> Block 6 -# 1771| Block 6 -# 1771| r1771_1(glval) = VariableAddress[v] : -# 1771| r1771_2(glval) = VariableAddress[x] : -# 1771| r1771_3(int) = Load[x] : &:r1771_2, ~m? -# 1771| mu1771_4(int) = Store[v] : &:r1771_1, r1771_3 -# 1771| r1771_5(glval) = VariableAddress[v2] : -# 1771| r1771_6(glval) = VariableAddress[v] : -# 1771| r1771_7(int) = Load[v] : &:r1771_6, ~m? -# 1771| mu1771_8(int) = Store[v2] : &:r1771_5, r1771_7 -# 1771| r1771_9(glval) = VariableAddress[v2] : -# 1771| r1771_10(int) = Load[v2] : &:r1771_9, ~m? -# 1771| r1771_11(int) = Constant[0] : -# 1771| r1771_12(bool) = CompareNE : r1771_10, r1771_11 -# 1771| r1771_13(bool) = CopyValue : r1771_12 -# 1771| v1771_14(void) = ConditionalBranch : r1771_13 +# 1773| Block 6 +# 1773| r1773_1(glval) = VariableAddress[v] : +# 1773| r1773_2(glval) = VariableAddress[x] : +# 1773| r1773_3(int) = Load[x] : &:r1773_2, ~m? +# 1773| mu1773_4(int) = Store[v] : &:r1773_1, r1773_3 +# 1773| r1773_5(glval) = VariableAddress[v2] : +# 1773| r1773_6(glval) = VariableAddress[v] : +# 1773| r1773_7(int) = Load[v] : &:r1773_6, ~m? +# 1773| mu1773_8(int) = Store[v2] : &:r1773_5, r1773_7 +# 1773| r1773_9(glval) = VariableAddress[v2] : +# 1773| r1773_10(int) = Load[v2] : &:r1773_9, ~m? +# 1773| r1773_11(int) = Constant[0] : +# 1773| r1773_12(bool) = CompareNE : r1773_10, r1773_11 +# 1773| r1773_13(bool) = CopyValue : r1773_12 +# 1773| v1773_14(void) = ConditionalBranch : r1773_13 #-----| False -> Block 8 #-----| True -> Block 7 -# 1772| Block 7 -# 1772| r1772_1(glval) = VariableAddress[x] : -# 1772| r1772_2(int) = Load[x] : &:r1772_1, ~m? -# 1772| r1772_3(glval) = VariableAddress[v] : -# 1772| r1772_4(int) = Load[v] : &:r1772_3, ~m? -# 1772| r1772_5(int) = Add : r1772_2, r1772_4 -# 1772| r1772_6(glval) = VariableAddress[x] : -# 1772| mu1772_7(int) = Store[x] : &:r1772_6, r1772_5 +# 1774| Block 7 +# 1774| r1774_1(glval) = VariableAddress[x] : +# 1774| r1774_2(int) = Load[x] : &:r1774_1, ~m? +# 1774| r1774_3(glval) = VariableAddress[v] : +# 1774| r1774_4(int) = Load[v] : &:r1774_3, ~m? +# 1774| r1774_5(int) = Add : r1774_2, r1774_4 +# 1774| r1774_6(glval) = VariableAddress[x] : +# 1774| mu1774_7(int) = Store[x] : &:r1774_6, r1774_5 #-----| Goto -> Block 8 -# 1775| Block 8 -# 1775| r1775_1(glval) = VariableAddress[z] : -# 1775| r1775_2(glval) = VariableAddress[x] : -# 1775| r1775_3(int) = Load[x] : &:r1775_2, ~m? -# 1775| mu1775_4(int) = Store[z] : &:r1775_1, r1775_3 -# 1776| r1776_1(glval) = VariableAddress[z] : -# 1776| r1776_2(int) = Load[z] : &:r1776_1, ~m? -# 1776| r1776_3(int) = Constant[0] : -# 1776| r1776_4(bool) = CompareNE : r1776_2, r1776_3 -# 1776| v1776_5(void) = ConditionalBranch : r1776_4 +# 1777| Block 8 +# 1777| r1777_1(glval) = VariableAddress[z] : +# 1777| r1777_2(glval) = VariableAddress[x] : +# 1777| r1777_3(int) = Load[x] : &:r1777_2, ~m? +# 1777| mu1777_4(int) = Store[z] : &:r1777_1, r1777_3 +# 1778| r1778_1(glval) = VariableAddress[z] : +# 1778| r1778_2(int) = Load[z] : &:r1778_1, ~m? +# 1778| r1778_3(int) = Constant[0] : +# 1778| r1778_4(bool) = CompareNE : r1778_2, r1778_3 +# 1778| v1778_5(void) = ConditionalBranch : r1778_4 #-----| False -> Block 10 #-----| True -> Block 9 -# 1777| Block 9 -# 1777| r1777_1(glval) = VariableAddress[x] : -# 1777| r1777_2(int) = Load[x] : &:r1777_1, ~m? -# 1777| r1777_3(glval) = VariableAddress[z] : -# 1777| r1777_4(int) = Load[z] : &:r1777_3, ~m? -# 1777| r1777_5(int) = Add : r1777_2, r1777_4 -# 1777| r1777_6(glval) = VariableAddress[x] : -# 1777| mu1777_7(int) = Store[x] : &:r1777_6, r1777_5 +# 1779| Block 9 +# 1779| r1779_1(glval) = VariableAddress[x] : +# 1779| r1779_2(int) = Load[x] : &:r1779_1, ~m? +# 1779| r1779_3(glval) = VariableAddress[z] : +# 1779| r1779_4(int) = Load[z] : &:r1779_3, ~m? +# 1779| r1779_5(int) = Add : r1779_2, r1779_4 +# 1779| r1779_6(glval) = VariableAddress[x] : +# 1779| mu1779_7(int) = Store[x] : &:r1779_6, r1779_5 #-----| Goto -> Block 10 -# 1780| Block 10 -# 1780| r1780_1(glval) = VariableAddress[z2] : -# 1780| r1780_2(glval) = VariableAddress[z] : -# 1780| r1780_3(int) = Load[z] : &:r1780_2, ~m? -# 1780| mu1780_4(int) = Store[z2] : &:r1780_1, r1780_3 -# 1780| r1780_5(glval) = VariableAddress[z2] : -# 1780| r1780_6(int) = Load[z2] : &:r1780_5, ~m? -# 1780| r1780_7(int) = Constant[0] : -# 1780| r1780_8(bool) = CompareNE : r1780_6, r1780_7 -# 1780| r1780_9(bool) = CopyValue : r1780_8 -# 1780| v1780_10(void) = ConditionalBranch : r1780_9 +# 1782| Block 10 +# 1782| r1782_1(glval) = VariableAddress[z2] : +# 1782| r1782_2(glval) = VariableAddress[z] : +# 1782| r1782_3(int) = Load[z] : &:r1782_2, ~m? +# 1782| mu1782_4(int) = Store[z2] : &:r1782_1, r1782_3 +# 1782| r1782_5(glval) = VariableAddress[z2] : +# 1782| r1782_6(int) = Load[z2] : &:r1782_5, ~m? +# 1782| r1782_7(int) = Constant[0] : +# 1782| r1782_8(bool) = CompareNE : r1782_6, r1782_7 +# 1782| r1782_9(bool) = CopyValue : r1782_8 +# 1782| v1782_10(void) = ConditionalBranch : r1782_9 #-----| False -> Block 12 #-----| True -> Block 11 -# 1781| Block 11 -# 1781| r1781_1(glval) = VariableAddress[z2] : -# 1781| r1781_2(int) = Load[z2] : &:r1781_1, ~m? -# 1781| r1781_3(glval) = VariableAddress[x] : -# 1781| r1781_4(int) = Load[x] : &:r1781_3, ~m? -# 1781| r1781_5(int) = Add : r1781_4, r1781_2 -# 1781| mu1781_6(int) = Store[x] : &:r1781_3, r1781_5 +# 1783| Block 11 +# 1783| r1783_1(glval) = VariableAddress[z2] : +# 1783| r1783_2(int) = Load[z2] : &:r1783_1, ~m? +# 1783| r1783_3(glval) = VariableAddress[x] : +# 1783| r1783_4(int) = Load[x] : &:r1783_3, ~m? +# 1783| r1783_5(int) = Add : r1783_4, r1783_2 +# 1783| mu1783_6(int) = Store[x] : &:r1783_3, r1783_5 #-----| Goto -> Block 12 -# 1783| Block 12 -# 1783| v1783_1(void) = NoOp : -# 1757| v1757_6(void) = ReturnVoid : -# 1757| v1757_7(void) = AliasedUse : ~m? -# 1757| v1757_8(void) = ExitFunction : +# 1785| Block 12 +# 1785| v1785_1(void) = NoOp : +# 1759| v1759_6(void) = ReturnVoid : +# 1759| v1759_7(void) = AliasedUse : ~m? +# 1759| v1759_8(void) = ExitFunction : -# 1785| void switch_initialization(int) -# 1785| Block 0 -# 1785| v1785_1(void) = EnterFunction : -# 1785| mu1785_2(unknown) = AliasedDefinition : -# 1785| mu1785_3(unknown) = InitializeNonLocal : -# 1785| r1785_4(glval) = VariableAddress[x] : -# 1785| mu1785_5(int) = InitializeParameter[x] : &:r1785_4 -# 1786| r1786_1(glval) = VariableAddress[y] : -# 1786| r1786_2(glval) = VariableAddress[x] : -# 1786| r1786_3(int) = Load[x] : &:r1786_2, ~m? -# 1786| mu1786_4(int) = Store[y] : &:r1786_1, r1786_3 -# 1786| r1786_5(glval) = VariableAddress[x] : -# 1786| r1786_6(int) = Load[x] : &:r1786_5, ~m? -# 1786| r1786_7(int) = Constant[1] : -# 1786| r1786_8(int) = Add : r1786_6, r1786_7 -# 1786| v1786_9(void) = Switch : r1786_8 +# 1787| void switch_initialization(int) +# 1787| Block 0 +# 1787| v1787_1(void) = EnterFunction : +# 1787| mu1787_2(unknown) = AliasedDefinition : +# 1787| mu1787_3(unknown) = InitializeNonLocal : +# 1787| r1787_4(glval) = VariableAddress[x] : +# 1787| mu1787_5(int) = InitializeParameter[x] : &:r1787_4 +# 1788| r1788_1(glval) = VariableAddress[y] : +# 1788| r1788_2(glval) = VariableAddress[x] : +# 1788| r1788_3(int) = Load[x] : &:r1788_2, ~m? +# 1788| mu1788_4(int) = Store[y] : &:r1788_1, r1788_3 +# 1788| r1788_5(glval) = VariableAddress[x] : +# 1788| r1788_6(int) = Load[x] : &:r1788_5, ~m? +# 1788| r1788_7(int) = Constant[1] : +# 1788| r1788_8(int) = Add : r1788_6, r1788_7 +# 1788| v1788_9(void) = Switch : r1788_8 #-----| Default -> Block 1 -# 1787| Block 1 -# 1787| v1787_1(void) = NoOp : -# 1788| r1788_1(glval) = VariableAddress[x] : -# 1788| r1788_2(int) = Load[x] : &:r1788_1, ~m? -# 1788| r1788_3(glval) = VariableAddress[y] : -# 1788| r1788_4(int) = Load[y] : &:r1788_3, ~m? -# 1788| r1788_5(int) = Add : r1788_2, r1788_4 -# 1788| r1788_6(glval) = VariableAddress[x] : -# 1788| mu1788_7(int) = Store[x] : &:r1788_6, r1788_5 -# 1791| r1791_1(glval) = VariableAddress[w] : -# 1791| mu1791_2(int) = Uninitialized[w] : &:r1791_1 -# 1792| r1792_1(glval) = VariableAddress[x] : -# 1792| r1792_2(int) = Load[x] : &:r1792_1, ~m? -# 1792| r1792_3(glval) = VariableAddress[w] : -# 1792| mu1792_4(int) = Store[w] : &:r1792_3, r1792_2 -# 1792| r1792_5(glval) = VariableAddress[x] : -# 1792| r1792_6(int) = Load[x] : &:r1792_5, ~m? -# 1792| r1792_7(int) = Constant[1] : -# 1792| r1792_8(int) = Add : r1792_6, r1792_7 -# 1792| v1792_9(void) = Switch : r1792_8 +# 1789| Block 1 +# 1789| v1789_1(void) = NoOp : +# 1790| r1790_1(glval) = VariableAddress[x] : +# 1790| r1790_2(int) = Load[x] : &:r1790_1, ~m? +# 1790| r1790_3(glval) = VariableAddress[y] : +# 1790| r1790_4(int) = Load[y] : &:r1790_3, ~m? +# 1790| r1790_5(int) = Add : r1790_2, r1790_4 +# 1790| r1790_6(glval) = VariableAddress[x] : +# 1790| mu1790_7(int) = Store[x] : &:r1790_6, r1790_5 +# 1793| r1793_1(glval) = VariableAddress[w] : +# 1793| mu1793_2(int) = Uninitialized[w] : &:r1793_1 +# 1794| r1794_1(glval) = VariableAddress[x] : +# 1794| r1794_2(int) = Load[x] : &:r1794_1, ~m? +# 1794| r1794_3(glval) = VariableAddress[w] : +# 1794| mu1794_4(int) = Store[w] : &:r1794_3, r1794_2 +# 1794| r1794_5(glval) = VariableAddress[x] : +# 1794| r1794_6(int) = Load[x] : &:r1794_5, ~m? +# 1794| r1794_7(int) = Constant[1] : +# 1794| r1794_8(int) = Add : r1794_6, r1794_7 +# 1794| v1794_9(void) = Switch : r1794_8 #-----| Default -> Block 2 -# 1793| Block 2 -# 1793| v1793_1(void) = NoOp : -# 1794| r1794_1(glval) = VariableAddress[x] : -# 1794| r1794_2(int) = Load[x] : &:r1794_1, ~m? -# 1794| r1794_3(glval) = VariableAddress[w] : -# 1794| r1794_4(int) = Load[w] : &:r1794_3, ~m? -# 1794| r1794_5(int) = Add : r1794_2, r1794_4 -# 1794| r1794_6(glval) = VariableAddress[x] : -# 1794| mu1794_7(int) = Store[x] : &:r1794_6, r1794_5 -# 1797| r1797_1(glval) = VariableAddress[x] : -# 1797| r1797_2(int) = Load[x] : &:r1797_1, ~m? -# 1797| r1797_3(glval) = VariableAddress[w] : -# 1797| mu1797_4(int) = Store[w] : &:r1797_3, r1797_2 -# 1797| r1797_5(glval) = VariableAddress[w2] : -# 1797| r1797_6(glval) = VariableAddress[w] : -# 1797| r1797_7(int) = Load[w] : &:r1797_6, ~m? -# 1797| mu1797_8(int) = Store[w2] : &:r1797_5, r1797_7 -# 1797| r1797_9(glval) = VariableAddress[w2] : -# 1797| r1797_10(int) = Load[w2] : &:r1797_9, ~m? -# 1797| r1797_11(int) = CopyValue : r1797_10 -# 1797| v1797_12(void) = Switch : r1797_11 -#-----| Default -> Block 3 - -# 1798| Block 3 -# 1798| v1798_1(void) = NoOp : +# 1795| Block 2 +# 1795| v1795_1(void) = NoOp : +# 1796| r1796_1(glval) = VariableAddress[x] : +# 1796| r1796_2(int) = Load[x] : &:r1796_1, ~m? +# 1796| r1796_3(glval) = VariableAddress[w] : +# 1796| r1796_4(int) = Load[w] : &:r1796_3, ~m? +# 1796| r1796_5(int) = Add : r1796_2, r1796_4 +# 1796| r1796_6(glval) = VariableAddress[x] : +# 1796| mu1796_7(int) = Store[x] : &:r1796_6, r1796_5 # 1799| r1799_1(glval) = VariableAddress[x] : # 1799| r1799_2(int) = Load[x] : &:r1799_1, ~m? # 1799| r1799_3(glval) = VariableAddress[w] : -# 1799| r1799_4(int) = Load[w] : &:r1799_3, ~m? -# 1799| r1799_5(int) = Add : r1799_2, r1799_4 -# 1799| r1799_6(glval) = VariableAddress[x] : -# 1799| mu1799_7(int) = Store[x] : &:r1799_6, r1799_5 -# 1802| r1802_1(glval) = VariableAddress[v] : -# 1802| r1802_2(glval) = VariableAddress[x] : -# 1802| r1802_3(int) = Load[x] : &:r1802_2, ~m? -# 1802| mu1802_4(int) = Store[v] : &:r1802_1, r1802_3 -# 1802| r1802_5(glval) = VariableAddress[v2] : -# 1802| r1802_6(glval) = VariableAddress[v] : -# 1802| r1802_7(int) = Load[v] : &:r1802_6, ~m? -# 1802| mu1802_8(int) = Store[v2] : &:r1802_5, r1802_7 -# 1802| r1802_9(glval) = VariableAddress[v2] : -# 1802| r1802_10(int) = Load[v2] : &:r1802_9, ~m? -# 1802| r1802_11(int) = CopyValue : r1802_10 -# 1802| v1802_12(void) = Switch : r1802_11 +# 1799| mu1799_4(int) = Store[w] : &:r1799_3, r1799_2 +# 1799| r1799_5(glval) = VariableAddress[w2] : +# 1799| r1799_6(glval) = VariableAddress[w] : +# 1799| r1799_7(int) = Load[w] : &:r1799_6, ~m? +# 1799| mu1799_8(int) = Store[w2] : &:r1799_5, r1799_7 +# 1799| r1799_9(glval) = VariableAddress[w2] : +# 1799| r1799_10(int) = Load[w2] : &:r1799_9, ~m? +# 1799| r1799_11(int) = CopyValue : r1799_10 +# 1799| v1799_12(void) = Switch : r1799_11 +#-----| Default -> Block 3 + +# 1800| Block 3 +# 1800| v1800_1(void) = NoOp : +# 1801| r1801_1(glval) = VariableAddress[x] : +# 1801| r1801_2(int) = Load[x] : &:r1801_1, ~m? +# 1801| r1801_3(glval) = VariableAddress[w] : +# 1801| r1801_4(int) = Load[w] : &:r1801_3, ~m? +# 1801| r1801_5(int) = Add : r1801_2, r1801_4 +# 1801| r1801_6(glval) = VariableAddress[x] : +# 1801| mu1801_7(int) = Store[x] : &:r1801_6, r1801_5 +# 1804| r1804_1(glval) = VariableAddress[v] : +# 1804| r1804_2(glval) = VariableAddress[x] : +# 1804| r1804_3(int) = Load[x] : &:r1804_2, ~m? +# 1804| mu1804_4(int) = Store[v] : &:r1804_1, r1804_3 +# 1804| r1804_5(glval) = VariableAddress[v2] : +# 1804| r1804_6(glval) = VariableAddress[v] : +# 1804| r1804_7(int) = Load[v] : &:r1804_6, ~m? +# 1804| mu1804_8(int) = Store[v2] : &:r1804_5, r1804_7 +# 1804| r1804_9(glval) = VariableAddress[v2] : +# 1804| r1804_10(int) = Load[v2] : &:r1804_9, ~m? +# 1804| r1804_11(int) = CopyValue : r1804_10 +# 1804| v1804_12(void) = Switch : r1804_11 #-----| Default -> Block 4 -# 1803| Block 4 -# 1803| v1803_1(void) = NoOp : -# 1804| r1804_1(glval) = VariableAddress[x] : -# 1804| r1804_2(int) = Load[x] : &:r1804_1, ~m? -# 1804| r1804_3(glval) = VariableAddress[v] : -# 1804| r1804_4(int) = Load[v] : &:r1804_3, ~m? -# 1804| r1804_5(int) = Add : r1804_2, r1804_4 -# 1804| r1804_6(glval) = VariableAddress[x] : -# 1804| mu1804_7(int) = Store[x] : &:r1804_6, r1804_5 -# 1807| r1807_1(glval) = VariableAddress[z] : -# 1807| r1807_2(glval) = VariableAddress[x] : -# 1807| r1807_3(int) = Load[x] : &:r1807_2, ~m? -# 1807| mu1807_4(int) = Store[z] : &:r1807_1, r1807_3 -# 1808| r1808_1(glval) = VariableAddress[z] : -# 1808| r1808_2(int) = Load[z] : &:r1808_1, ~m? -# 1808| v1808_3(void) = Switch : r1808_2 +# 1805| Block 4 +# 1805| v1805_1(void) = NoOp : +# 1806| r1806_1(glval) = VariableAddress[x] : +# 1806| r1806_2(int) = Load[x] : &:r1806_1, ~m? +# 1806| r1806_3(glval) = VariableAddress[v] : +# 1806| r1806_4(int) = Load[v] : &:r1806_3, ~m? +# 1806| r1806_5(int) = Add : r1806_2, r1806_4 +# 1806| r1806_6(glval) = VariableAddress[x] : +# 1806| mu1806_7(int) = Store[x] : &:r1806_6, r1806_5 +# 1809| r1809_1(glval) = VariableAddress[z] : +# 1809| r1809_2(glval) = VariableAddress[x] : +# 1809| r1809_3(int) = Load[x] : &:r1809_2, ~m? +# 1809| mu1809_4(int) = Store[z] : &:r1809_1, r1809_3 +# 1810| r1810_1(glval) = VariableAddress[z] : +# 1810| r1810_2(int) = Load[z] : &:r1810_1, ~m? +# 1810| v1810_3(void) = Switch : r1810_2 #-----| Default -> Block 5 -# 1809| Block 5 -# 1809| v1809_1(void) = NoOp : -# 1810| r1810_1(glval) = VariableAddress[x] : -# 1810| r1810_2(int) = Load[x] : &:r1810_1, ~m? -# 1810| r1810_3(glval) = VariableAddress[z] : -# 1810| r1810_4(int) = Load[z] : &:r1810_3, ~m? -# 1810| r1810_5(int) = Add : r1810_2, r1810_4 -# 1810| r1810_6(glval) = VariableAddress[x] : -# 1810| mu1810_7(int) = Store[x] : &:r1810_6, r1810_5 -# 1813| r1813_1(glval) = VariableAddress[z2] : -# 1813| r1813_2(glval) = VariableAddress[z] : -# 1813| r1813_3(int) = Load[z] : &:r1813_2, ~m? -# 1813| mu1813_4(int) = Store[z2] : &:r1813_1, r1813_3 -# 1813| r1813_5(glval) = VariableAddress[z2] : -# 1813| r1813_6(int) = Load[z2] : &:r1813_5, ~m? -# 1813| r1813_7(int) = CopyValue : r1813_6 -# 1813| v1813_8(void) = Switch : r1813_7 +# 1811| Block 5 +# 1811| v1811_1(void) = NoOp : +# 1812| r1812_1(glval) = VariableAddress[x] : +# 1812| r1812_2(int) = Load[x] : &:r1812_1, ~m? +# 1812| r1812_3(glval) = VariableAddress[z] : +# 1812| r1812_4(int) = Load[z] : &:r1812_3, ~m? +# 1812| r1812_5(int) = Add : r1812_2, r1812_4 +# 1812| r1812_6(glval) = VariableAddress[x] : +# 1812| mu1812_7(int) = Store[x] : &:r1812_6, r1812_5 +# 1815| r1815_1(glval) = VariableAddress[z2] : +# 1815| r1815_2(glval) = VariableAddress[z] : +# 1815| r1815_3(int) = Load[z] : &:r1815_2, ~m? +# 1815| mu1815_4(int) = Store[z2] : &:r1815_1, r1815_3 +# 1815| r1815_5(glval) = VariableAddress[z2] : +# 1815| r1815_6(int) = Load[z2] : &:r1815_5, ~m? +# 1815| r1815_7(int) = CopyValue : r1815_6 +# 1815| v1815_8(void) = Switch : r1815_7 #-----| Default -> Block 6 -# 1814| Block 6 -# 1814| v1814_1(void) = NoOp : -# 1815| r1815_1(glval) = VariableAddress[z2] : -# 1815| r1815_2(int) = Load[z2] : &:r1815_1, ~m? -# 1815| r1815_3(glval) = VariableAddress[x] : -# 1815| r1815_4(int) = Load[x] : &:r1815_3, ~m? -# 1815| r1815_5(int) = Add : r1815_4, r1815_2 -# 1815| mu1815_6(int) = Store[x] : &:r1815_3, r1815_5 -# 1817| v1817_1(void) = NoOp : -# 1785| v1785_6(void) = ReturnVoid : -# 1785| v1785_7(void) = AliasedUse : ~m? -# 1785| v1785_8(void) = ExitFunction : +# 1816| Block 6 +# 1816| v1816_1(void) = NoOp : +# 1817| r1817_1(glval) = VariableAddress[z2] : +# 1817| r1817_2(int) = Load[z2] : &:r1817_1, ~m? +# 1817| r1817_3(glval) = VariableAddress[x] : +# 1817| r1817_4(int) = Load[x] : &:r1817_3, ~m? +# 1817| r1817_5(int) = Add : r1817_4, r1817_2 +# 1817| mu1817_6(int) = Store[x] : &:r1817_3, r1817_5 +# 1819| v1819_1(void) = NoOp : +# 1787| v1787_6(void) = ReturnVoid : +# 1787| v1787_7(void) = AliasedUse : ~m? +# 1787| v1787_8(void) = ExitFunction : -# 1821| int global_2 -# 1821| Block 0 -# 1821| v1821_1(void) = EnterFunction : -# 1821| mu1821_2(unknown) = AliasedDefinition : -# 1821| r1821_3(glval) = VariableAddress[global_2] : -# 1821| r1821_4(int) = Constant[1] : -# 1821| mu1821_5(int) = Store[global_2] : &:r1821_3, r1821_4 -# 1821| v1821_6(void) = ReturnVoid : -# 1821| v1821_7(void) = AliasedUse : ~m? -# 1821| v1821_8(void) = ExitFunction : +# 1823| int global_2 +# 1823| Block 0 +# 1823| v1823_1(void) = EnterFunction : +# 1823| mu1823_2(unknown) = AliasedDefinition : +# 1823| r1823_3(glval) = VariableAddress[global_2] : +# 1823| r1823_4(int) = Constant[1] : +# 1823| mu1823_5(int) = Store[global_2] : &:r1823_3, r1823_4 +# 1823| v1823_6(void) = ReturnVoid : +# 1823| v1823_7(void) = AliasedUse : ~m? +# 1823| v1823_8(void) = ExitFunction : -# 1825| constructor_only global_4 -# 1825| Block 0 -# 1825| v1825_1(void) = EnterFunction : -# 1825| mu1825_2(unknown) = AliasedDefinition : -# 1825| r1825_3(glval) = VariableAddress[global_4] : -# 1825| r1825_4(glval) = FunctionAddress[constructor_only] : -# 1825| r1825_5(int) = Constant[1] : -# 1825| v1825_6(void) = Call[constructor_only] : func:r1825_4, this:r1825_3, 0:r1825_5 -# 1825| mu1825_7(unknown) = ^CallSideEffect : ~m? -# 1825| mu1825_8(constructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1825_3 -# 1825| v1825_9(void) = ReturnVoid : -# 1825| v1825_10(void) = AliasedUse : ~m? -# 1825| v1825_11(void) = ExitFunction : - -# 1827| constructor_only global_5 +# 1827| constructor_only global_4 # 1827| Block 0 # 1827| v1827_1(void) = EnterFunction : # 1827| mu1827_2(unknown) = AliasedDefinition : -# 1827| r1827_3(glval) = VariableAddress[global_5] : +# 1827| r1827_3(glval) = VariableAddress[global_4] : # 1827| r1827_4(glval) = FunctionAddress[constructor_only] : -# 1827| r1827_5(int) = Constant[2] : +# 1827| r1827_5(int) = Constant[1] : # 1827| v1827_6(void) = Call[constructor_only] : func:r1827_4, this:r1827_3, 0:r1827_5 # 1827| mu1827_7(unknown) = ^CallSideEffect : ~m? # 1827| mu1827_8(constructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1827_3 @@ -9998,40 +9984,54 @@ ir.cpp: # 1827| v1827_10(void) = AliasedUse : ~m? # 1827| v1827_11(void) = ExitFunction : -# 1829| char* global_string +# 1829| constructor_only global_5 # 1829| Block 0 -# 1829| v1829_1(void) = EnterFunction : -# 1829| mu1829_2(unknown) = AliasedDefinition : -# 1829| r1829_3(glval) = VariableAddress[global_string] : -# 1829| r1829_4(glval) = StringConstant["global string"] : -# 1829| r1829_5(char *) = Convert : r1829_4 -# 1829| r1829_6(char *) = Convert : r1829_5 -# 1829| mu1829_7(char *) = Store[global_string] : &:r1829_3, r1829_6 -# 1829| v1829_8(void) = ReturnVoid : -# 1829| v1829_9(void) = AliasedUse : ~m? -# 1829| v1829_10(void) = ExitFunction : +# 1829| v1829_1(void) = EnterFunction : +# 1829| mu1829_2(unknown) = AliasedDefinition : +# 1829| r1829_3(glval) = VariableAddress[global_5] : +# 1829| r1829_4(glval) = FunctionAddress[constructor_only] : +# 1829| r1829_5(int) = Constant[2] : +# 1829| v1829_6(void) = Call[constructor_only] : func:r1829_4, this:r1829_3, 0:r1829_5 +# 1829| mu1829_7(unknown) = ^CallSideEffect : ~m? +# 1829| mu1829_8(constructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1829_3 +# 1829| v1829_9(void) = ReturnVoid : +# 1829| v1829_10(void) = AliasedUse : ~m? +# 1829| v1829_11(void) = ExitFunction : -# 1831| int global_6 +# 1831| char* global_string # 1831| Block 0 -# 1831| v1831_1(void) = EnterFunction : -# 1831| mu1831_2(unknown) = AliasedDefinition : -# 1831| r1831_3(glval) = VariableAddress[global_6] : -# 1831| r1831_4(glval) = VariableAddress[global_2] : -# 1831| r1831_5(int) = Load[global_2] : &:r1831_4, ~m? -# 1831| mu1831_6(int) = Store[global_6] : &:r1831_3, r1831_5 -# 1831| v1831_7(void) = ReturnVoid : -# 1831| v1831_8(void) = AliasedUse : ~m? -# 1831| v1831_9(void) = ExitFunction : +# 1831| v1831_1(void) = EnterFunction : +# 1831| mu1831_2(unknown) = AliasedDefinition : +# 1831| r1831_3(glval) = VariableAddress[global_string] : +# 1831| r1831_4(glval) = StringConstant["global string"] : +# 1831| r1831_5(char *) = Convert : r1831_4 +# 1831| r1831_6(char *) = Convert : r1831_5 +# 1831| mu1831_7(char *) = Store[global_string] : &:r1831_3, r1831_6 +# 1831| v1831_8(void) = ReturnVoid : +# 1831| v1831_9(void) = AliasedUse : ~m? +# 1831| v1831_10(void) = ExitFunction : -# 1834| block_assignment::A& block_assignment::A::operator=(block_assignment::A&&) -# 1834| Block 0 -# 1834| v1834_1(void) = EnterFunction : -# 1834| mu1834_2(unknown) = AliasedDefinition : -# 1834| mu1834_3(unknown) = InitializeNonLocal : -# 1834| r1834_4(glval) = VariableAddress[#this] : -# 1834| mu1834_5(glval) = InitializeParameter[#this] : &:r1834_4 -# 1834| r1834_6(glval) = Load[#this] : &:r1834_4, ~m? -# 1834| mu1834_7(A) = InitializeIndirection[#this] : &:r1834_6 +# 1833| int global_6 +# 1833| Block 0 +# 1833| v1833_1(void) = EnterFunction : +# 1833| mu1833_2(unknown) = AliasedDefinition : +# 1833| r1833_3(glval) = VariableAddress[global_6] : +# 1833| r1833_4(glval) = VariableAddress[global_2] : +# 1833| r1833_5(int) = Load[global_2] : &:r1833_4, ~m? +# 1833| mu1833_6(int) = Store[global_6] : &:r1833_3, r1833_5 +# 1833| v1833_7(void) = ReturnVoid : +# 1833| v1833_8(void) = AliasedUse : ~m? +# 1833| v1833_9(void) = ExitFunction : + +# 1836| block_assignment::A& block_assignment::A::operator=(block_assignment::A&&) +# 1836| Block 0 +# 1836| v1836_1(void) = EnterFunction : +# 1836| mu1836_2(unknown) = AliasedDefinition : +# 1836| mu1836_3(unknown) = InitializeNonLocal : +# 1836| r1836_4(glval) = VariableAddress[#this] : +# 1836| mu1836_5(glval) = InitializeParameter[#this] : &:r1836_4 +# 1836| r1836_6(glval) = Load[#this] : &:r1836_4, ~m? +# 1836| mu1836_7(A) = InitializeIndirection[#this] : &:r1836_6 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| mu0_2(A &&) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(A &&) = Load[(unnamed parameter 0)] : &:r0_1, ~m? @@ -10051,884 +10051,884 @@ ir.cpp: #-----| r0_17(glval) = CopyValue : r0_16 #-----| r0_18(A &) = CopyValue : r0_17 #-----| mu0_19(A &) = Store[#return] : &:r0_14, r0_18 -# 1834| v1834_8(void) = ReturnIndirection[#this] : &:r1834_6, ~m? +# 1836| v1836_8(void) = ReturnIndirection[#this] : &:r1836_6, ~m? #-----| v0_20(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, ~m? -# 1834| r1834_9(glval) = VariableAddress[#return] : -# 1834| v1834_10(void) = ReturnValue : &:r1834_9, ~m? -# 1834| v1834_11(void) = AliasedUse : ~m? -# 1834| v1834_12(void) = ExitFunction : +# 1836| r1836_9(glval) = VariableAddress[#return] : +# 1836| v1836_10(void) = ReturnValue : &:r1836_9, ~m? +# 1836| v1836_11(void) = AliasedUse : ~m? +# 1836| v1836_12(void) = ExitFunction : -# 1839| block_assignment::B& block_assignment::B::operator=(block_assignment::B&&) -# 1839| Block 0 -# 1839| v1839_1(void) = EnterFunction : -# 1839| mu1839_2(unknown) = AliasedDefinition : -# 1839| mu1839_3(unknown) = InitializeNonLocal : -# 1839| r1839_4(glval) = VariableAddress[#this] : -# 1839| mu1839_5(glval) = InitializeParameter[#this] : &:r1839_4 -# 1839| r1839_6(glval) = Load[#this] : &:r1839_4, ~m? -# 1839| mu1839_7(B) = InitializeIndirection[#this] : &:r1839_6 +# 1841| block_assignment::B& block_assignment::B::operator=(block_assignment::B&&) +# 1841| Block 0 +# 1841| v1841_1(void) = EnterFunction : +# 1841| mu1841_2(unknown) = AliasedDefinition : +# 1841| mu1841_3(unknown) = InitializeNonLocal : +# 1841| r1841_4(glval) = VariableAddress[#this] : +# 1841| mu1841_5(glval) = InitializeParameter[#this] : &:r1841_4 +# 1841| r1841_6(glval) = Load[#this] : &:r1841_4, ~m? +# 1841| mu1841_7(B) = InitializeIndirection[#this] : &:r1841_6 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| mu0_2(B &&) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(B &&) = Load[(unnamed parameter 0)] : &:r0_1, ~m? #-----| mu0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 1839| r1839_8(glval) = VariableAddress[#this] : -# 1839| r1839_9(B *) = Load[#this] : &:r1839_8, ~m? -#-----| r0_5(A *) = ConvertToNonVirtualBase[B : A] : r1839_9 -# 1839| r1839_10(glval) = FunctionAddress[operator=] : -# 1839| r1839_11(glval) = VariableAddress[(unnamed parameter 0)] : -# 1839| r1839_12(B &&) = Load[(unnamed parameter 0)] : &:r1839_11, ~m? -#-----| r0_6(glval) = CopyValue : r1839_12 -# 1839| r1839_13(B *) = CopyValue : r0_6 -#-----| r0_7(A *) = ConvertToNonVirtualBase[B : A] : r1839_13 -# 1839| r1839_14(glval) = CopyValue : r0_7 -#-----| r0_8(A &) = CopyValue : r1839_14 -# 1839| r1839_15(A &) = Call[operator=] : func:r1839_10, this:r0_5, 0:r0_8 -# 1839| mu1839_16(unknown) = ^CallSideEffect : ~m? +# 1841| r1841_8(glval) = VariableAddress[#this] : +# 1841| r1841_9(B *) = Load[#this] : &:r1841_8, ~m? +#-----| r0_5(A *) = ConvertToNonVirtualBase[B : A] : r1841_9 +# 1841| r1841_10(glval) = FunctionAddress[operator=] : +# 1841| r1841_11(glval) = VariableAddress[(unnamed parameter 0)] : +# 1841| r1841_12(B &&) = Load[(unnamed parameter 0)] : &:r1841_11, ~m? +#-----| r0_6(glval) = CopyValue : r1841_12 +# 1841| r1841_13(B *) = CopyValue : r0_6 +#-----| r0_7(A *) = ConvertToNonVirtualBase[B : A] : r1841_13 +# 1841| r1841_14(glval) = CopyValue : r0_7 +#-----| r0_8(A &) = CopyValue : r1841_14 +# 1841| r1841_15(A &) = Call[operator=] : func:r1841_10, this:r0_5, 0:r0_8 +# 1841| mu1841_16(unknown) = ^CallSideEffect : ~m? #-----| v0_9(void) = ^IndirectReadSideEffect[-1] : &:r0_5, ~m? #-----| v0_10(void) = ^BufferReadSideEffect[0] : &:r0_8, ~m? #-----| mu0_11(A) = ^IndirectMayWriteSideEffect[-1] : &:r0_5 #-----| mu0_12(unknown) = ^BufferMayWriteSideEffect[0] : &:r0_8 -#-----| r0_13(glval) = CopyValue : r1839_15 +#-----| r0_13(glval) = CopyValue : r1841_15 #-----| r0_14(glval) = VariableAddress[#return] : #-----| r0_15(glval) = VariableAddress[#this] : #-----| r0_16(B *) = Load[#this] : &:r0_15, ~m? #-----| r0_17(glval) = CopyValue : r0_16 #-----| r0_18(B &) = CopyValue : r0_17 #-----| mu0_19(B &) = Store[#return] : &:r0_14, r0_18 -# 1839| v1839_17(void) = ReturnIndirection[#this] : &:r1839_6, ~m? +# 1841| v1841_17(void) = ReturnIndirection[#this] : &:r1841_6, ~m? #-----| v0_20(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, ~m? -# 1839| r1839_18(glval) = VariableAddress[#return] : -# 1839| v1839_19(void) = ReturnValue : &:r1839_18, ~m? -# 1839| v1839_20(void) = AliasedUse : ~m? -# 1839| v1839_21(void) = ExitFunction : +# 1841| r1841_18(glval) = VariableAddress[#return] : +# 1841| v1841_19(void) = ReturnValue : &:r1841_18, ~m? +# 1841| v1841_20(void) = AliasedUse : ~m? +# 1841| v1841_21(void) = ExitFunction : -# 1843| void block_assignment::foo() -# 1843| Block 0 -# 1843| v1843_1(void) = EnterFunction : -# 1843| mu1843_2(unknown) = AliasedDefinition : -# 1843| mu1843_3(unknown) = InitializeNonLocal : -# 1844| r1844_1(glval) = VariableAddress[v] : -# 1844| mu1844_2(B) = Uninitialized[v] : &:r1844_1 -# 1844| r1844_3(glval) = FunctionAddress[B] : -# 1844| r1844_4(A *) = Constant[0] : -# 1844| v1844_5(void) = Call[B] : func:r1844_3, this:r1844_1, 0:r1844_4 -# 1844| mu1844_6(unknown) = ^CallSideEffect : ~m? -# 1844| v1844_7(void) = ^BufferReadSideEffect[0] : &:r1844_4, ~m? -# 1844| mu1844_8(B) = ^IndirectMayWriteSideEffect[-1] : &:r1844_1 -# 1844| mu1844_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r1844_4 -# 1845| r1845_1(glval) = VariableAddress[v] : -# 1845| r1845_2(glval) = FunctionAddress[operator=] : -# 1845| r1845_3(glval) = VariableAddress[#temp1845:13] : -# 1845| mu1845_4(B) = Uninitialized[#temp1845:13] : &:r1845_3 -# 1845| r1845_5(glval) = FunctionAddress[B] : -# 1845| r1845_6(A *) = Constant[0] : -# 1845| v1845_7(void) = Call[B] : func:r1845_5, this:r1845_3, 0:r1845_6 -# 1845| mu1845_8(unknown) = ^CallSideEffect : ~m? -# 1845| v1845_9(void) = ^BufferReadSideEffect[0] : &:r1845_6, ~m? -# 1845| mu1845_10(B) = ^IndirectMayWriteSideEffect[-1] : &:r1845_3 -# 1845| mu1845_11(unknown) = ^BufferMayWriteSideEffect[0] : &:r1845_6 -# 1845| r1845_12(B &) = CopyValue : r1845_3 -# 1845| r1845_13(B &) = Call[operator=] : func:r1845_2, this:r1845_1, 0:r1845_12 -# 1845| mu1845_14(unknown) = ^CallSideEffect : ~m? -# 1845| v1845_15(void) = ^IndirectReadSideEffect[-1] : &:r1845_1, ~m? -# 1845| v1845_16(void) = ^BufferReadSideEffect[0] : &:r1845_12, ~m? -# 1845| mu1845_17(B) = ^IndirectMayWriteSideEffect[-1] : &:r1845_1 -# 1845| mu1845_18(unknown) = ^BufferMayWriteSideEffect[0] : &:r1845_12 -# 1845| r1845_19(glval) = CopyValue : r1845_13 -# 1846| v1846_1(void) = NoOp : -# 1843| v1843_4(void) = ReturnVoid : -# 1843| v1843_5(void) = AliasedUse : ~m? -# 1843| v1843_6(void) = ExitFunction : +# 1845| void block_assignment::foo() +# 1845| Block 0 +# 1845| v1845_1(void) = EnterFunction : +# 1845| mu1845_2(unknown) = AliasedDefinition : +# 1845| mu1845_3(unknown) = InitializeNonLocal : +# 1846| r1846_1(glval) = VariableAddress[v] : +# 1846| mu1846_2(B) = Uninitialized[v] : &:r1846_1 +# 1846| r1846_3(glval) = FunctionAddress[B] : +# 1846| r1846_4(A *) = Constant[0] : +# 1846| v1846_5(void) = Call[B] : func:r1846_3, this:r1846_1, 0:r1846_4 +# 1846| mu1846_6(unknown) = ^CallSideEffect : ~m? +# 1846| v1846_7(void) = ^BufferReadSideEffect[0] : &:r1846_4, ~m? +# 1846| mu1846_8(B) = ^IndirectMayWriteSideEffect[-1] : &:r1846_1 +# 1846| mu1846_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r1846_4 +# 1847| r1847_1(glval) = VariableAddress[v] : +# 1847| r1847_2(glval) = FunctionAddress[operator=] : +# 1847| r1847_3(glval) = VariableAddress[#temp1847:13] : +# 1847| mu1847_4(B) = Uninitialized[#temp1847:13] : &:r1847_3 +# 1847| r1847_5(glval) = FunctionAddress[B] : +# 1847| r1847_6(A *) = Constant[0] : +# 1847| v1847_7(void) = Call[B] : func:r1847_5, this:r1847_3, 0:r1847_6 +# 1847| mu1847_8(unknown) = ^CallSideEffect : ~m? +# 1847| v1847_9(void) = ^BufferReadSideEffect[0] : &:r1847_6, ~m? +# 1847| mu1847_10(B) = ^IndirectMayWriteSideEffect[-1] : &:r1847_3 +# 1847| mu1847_11(unknown) = ^BufferMayWriteSideEffect[0] : &:r1847_6 +# 1847| r1847_12(B &) = CopyValue : r1847_3 +# 1847| r1847_13(B &) = Call[operator=] : func:r1847_2, this:r1847_1, 0:r1847_12 +# 1847| mu1847_14(unknown) = ^CallSideEffect : ~m? +# 1847| v1847_15(void) = ^IndirectReadSideEffect[-1] : &:r1847_1, ~m? +# 1847| v1847_16(void) = ^BufferReadSideEffect[0] : &:r1847_12, ~m? +# 1847| mu1847_17(B) = ^IndirectMayWriteSideEffect[-1] : &:r1847_1 +# 1847| mu1847_18(unknown) = ^BufferMayWriteSideEffect[0] : &:r1847_12 +# 1847| r1847_19(glval) = CopyValue : r1847_13 +# 1848| v1848_1(void) = NoOp : +# 1845| v1845_4(void) = ReturnVoid : +# 1845| v1845_5(void) = AliasedUse : ~m? +# 1845| v1845_6(void) = ExitFunction : -# 1849| void magicvars() -# 1849| Block 0 -# 1849| v1849_1(void) = EnterFunction : -# 1849| mu1849_2(unknown) = AliasedDefinition : -# 1849| mu1849_3(unknown) = InitializeNonLocal : -# 1850| r1850_1(glval) = VariableAddress[pf] : -# 1850| r1850_2(glval) = VariableAddress[__PRETTY_FUNCTION__] : -# 1850| r1850_3(char *) = Convert : r1850_2 -# 1850| mu1850_4(char *) = Store[pf] : &:r1850_1, r1850_3 -# 1851| r1851_1(glval) = VariableAddress[strfunc] : -# 1851| r1851_2(glval) = VariableAddress[__func__] : -# 1851| r1851_3(char *) = Convert : r1851_2 -# 1851| mu1851_4(char *) = Store[strfunc] : &:r1851_1, r1851_3 -# 1852| v1852_1(void) = NoOp : -# 1849| v1849_4(void) = ReturnVoid : -# 1849| v1849_5(void) = AliasedUse : ~m? -# 1849| v1849_6(void) = ExitFunction : +# 1851| void magicvars() +# 1851| Block 0 +# 1851| v1851_1(void) = EnterFunction : +# 1851| mu1851_2(unknown) = AliasedDefinition : +# 1851| mu1851_3(unknown) = InitializeNonLocal : +# 1852| r1852_1(glval) = VariableAddress[pf] : +# 1852| r1852_2(glval) = VariableAddress[__PRETTY_FUNCTION__] : +# 1852| r1852_3(char *) = Convert : r1852_2 +# 1852| mu1852_4(char *) = Store[pf] : &:r1852_1, r1852_3 +# 1853| r1853_1(glval) = VariableAddress[strfunc] : +# 1853| r1853_2(glval) = VariableAddress[__func__] : +# 1853| r1853_3(char *) = Convert : r1853_2 +# 1853| mu1853_4(char *) = Store[strfunc] : &:r1853_1, r1853_3 +# 1854| v1854_1(void) = NoOp : +# 1851| v1851_4(void) = ReturnVoid : +# 1851| v1851_5(void) = AliasedUse : ~m? +# 1851| v1851_6(void) = ExitFunction : -# 1862| void* missing_declaration_entries::Bar1::missing_type_decl_entry(missing_declaration_entries::Bar1::pointer) -# 1862| Block 0 -# 1862| v1862_1(void) = EnterFunction : -# 1862| mu1862_2(unknown) = AliasedDefinition : -# 1862| mu1862_3(unknown) = InitializeNonLocal : -# 1862| r1862_4(glval) = VariableAddress[#this] : -# 1862| mu1862_5(glval>) = InitializeParameter[#this] : &:r1862_4 -# 1862| r1862_6(glval>) = Load[#this] : &:r1862_4, ~m? -# 1862| mu1862_7(Bar1) = InitializeIndirection[#this] : &:r1862_6 -# 1862| r1862_8(glval) = VariableAddress[p] : -# 1862| mu1862_9(S *) = InitializeParameter[p] : &:r1862_8 -# 1862| r1862_10(S *) = Load[p] : &:r1862_8, ~m? -# 1862| mu1862_11(unknown) = InitializeIndirection[p] : &:r1862_10 -# 1864| r1864_1(glval) = VariableAddress[#return] : -# 1864| r1864_2(glval) = VariableAddress[p] : -# 1864| r1864_3(S *) = Load[p] : &:r1864_2, ~m? -# 1864| r1864_4(void *) = Convert : r1864_3 -# 1864| mu1864_5(void *) = Store[#return] : &:r1864_1, r1864_4 -# 1862| v1862_12(void) = ReturnIndirection[#this] : &:r1862_6, ~m? -# 1862| v1862_13(void) = ReturnIndirection[p] : &:r1862_10, ~m? -# 1862| r1862_14(glval) = VariableAddress[#return] : -# 1862| v1862_15(void) = ReturnValue : &:r1862_14, ~m? -# 1862| v1862_16(void) = AliasedUse : ~m? -# 1862| v1862_17(void) = ExitFunction : +# 1864| void* missing_declaration_entries::Bar1::missing_type_decl_entry(missing_declaration_entries::Bar1::pointer) +# 1864| Block 0 +# 1864| v1864_1(void) = EnterFunction : +# 1864| mu1864_2(unknown) = AliasedDefinition : +# 1864| mu1864_3(unknown) = InitializeNonLocal : +# 1864| r1864_4(glval) = VariableAddress[#this] : +# 1864| mu1864_5(glval>) = InitializeParameter[#this] : &:r1864_4 +# 1864| r1864_6(glval>) = Load[#this] : &:r1864_4, ~m? +# 1864| mu1864_7(Bar1) = InitializeIndirection[#this] : &:r1864_6 +# 1864| r1864_8(glval) = VariableAddress[p] : +# 1864| mu1864_9(S *) = InitializeParameter[p] : &:r1864_8 +# 1864| r1864_10(S *) = Load[p] : &:r1864_8, ~m? +# 1864| mu1864_11(unknown) = InitializeIndirection[p] : &:r1864_10 +# 1866| r1866_1(glval) = VariableAddress[#return] : +# 1866| r1866_2(glval) = VariableAddress[p] : +# 1866| r1866_3(S *) = Load[p] : &:r1866_2, ~m? +# 1866| r1866_4(void *) = Convert : r1866_3 +# 1866| mu1866_5(void *) = Store[#return] : &:r1866_1, r1866_4 +# 1864| v1864_12(void) = ReturnIndirection[#this] : &:r1864_6, ~m? +# 1864| v1864_13(void) = ReturnIndirection[p] : &:r1864_10, ~m? +# 1864| r1864_14(glval) = VariableAddress[#return] : +# 1864| v1864_15(void) = ReturnValue : &:r1864_14, ~m? +# 1864| v1864_16(void) = AliasedUse : ~m? +# 1864| v1864_17(void) = ExitFunction : -# 1868| void missing_declaration_entries::test1() -# 1868| Block 0 -# 1868| v1868_1(void) = EnterFunction : -# 1868| mu1868_2(unknown) = AliasedDefinition : -# 1868| mu1868_3(unknown) = InitializeNonLocal : -# 1869| r1869_1(glval>) = VariableAddress[b] : -# 1869| mu1869_2(Bar1) = Uninitialized[b] : &:r1869_1 -# 1870| r1870_1(glval>) = VariableAddress[b] : -# 1870| r1870_2(glval) = FunctionAddress[missing_type_decl_entry] : -# 1870| r1870_3(S *) = Constant[0] : -# 1870| r1870_4(void *) = Call[missing_type_decl_entry] : func:r1870_2, this:r1870_1, 0:r1870_3 -# 1870| mu1870_5(unknown) = ^CallSideEffect : ~m? -# 1870| v1870_6(void) = ^IndirectReadSideEffect[-1] : &:r1870_1, ~m? -# 1870| v1870_7(void) = ^BufferReadSideEffect[0] : &:r1870_3, ~m? -# 1870| mu1870_8(Bar1) = ^IndirectMayWriteSideEffect[-1] : &:r1870_1 -# 1870| mu1870_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r1870_3 -# 1871| v1871_1(void) = NoOp : -# 1868| v1868_4(void) = ReturnVoid : -# 1868| v1868_5(void) = AliasedUse : ~m? -# 1868| v1868_6(void) = ExitFunction : +# 1870| void missing_declaration_entries::test1() +# 1870| Block 0 +# 1870| v1870_1(void) = EnterFunction : +# 1870| mu1870_2(unknown) = AliasedDefinition : +# 1870| mu1870_3(unknown) = InitializeNonLocal : +# 1871| r1871_1(glval>) = VariableAddress[b] : +# 1871| mu1871_2(Bar1) = Uninitialized[b] : &:r1871_1 +# 1872| r1872_1(glval>) = VariableAddress[b] : +# 1872| r1872_2(glval) = FunctionAddress[missing_type_decl_entry] : +# 1872| r1872_3(S *) = Constant[0] : +# 1872| r1872_4(void *) = Call[missing_type_decl_entry] : func:r1872_2, this:r1872_1, 0:r1872_3 +# 1872| mu1872_5(unknown) = ^CallSideEffect : ~m? +# 1872| v1872_6(void) = ^IndirectReadSideEffect[-1] : &:r1872_1, ~m? +# 1872| v1872_7(void) = ^BufferReadSideEffect[0] : &:r1872_3, ~m? +# 1872| mu1872_8(Bar1) = ^IndirectMayWriteSideEffect[-1] : &:r1872_1 +# 1872| mu1872_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r1872_3 +# 1873| v1873_1(void) = NoOp : +# 1870| v1870_4(void) = ReturnVoid : +# 1870| v1870_5(void) = AliasedUse : ~m? +# 1870| v1870_6(void) = ExitFunction : -# 1875| int missing_declaration_entries::Bar2::two_missing_variable_declaration_entries() -# 1875| Block 0 -# 1875| v1875_1(void) = EnterFunction : -# 1875| mu1875_2(unknown) = AliasedDefinition : -# 1875| mu1875_3(unknown) = InitializeNonLocal : -# 1875| r1875_4(glval) = VariableAddress[#this] : -# 1875| mu1875_5(glval>) = InitializeParameter[#this] : &:r1875_4 -# 1875| r1875_6(glval>) = Load[#this] : &:r1875_4, ~m? -# 1875| mu1875_7(Bar2) = InitializeIndirection[#this] : &:r1875_6 -# 1876| r1876_1(glval) = VariableAddress[x] : -# 1876| mu1876_2(int[10]) = Uninitialized[x] : &:r1876_1 -# 1876| r1876_3(glval) = VariableAddress[y] : -# 1876| mu1876_4(int[10]) = Uninitialized[y] : &:r1876_3 -# 1877| r1877_1(int) = Constant[10] : -# 1877| r1877_2(glval) = VariableAddress[x] : -# 1877| r1877_3(int *) = Convert : r1877_2 -# 1877| r1877_4(glval) = CopyValue : r1877_3 -# 1877| mu1877_5(int) = Store[?] : &:r1877_4, r1877_1 -# 1878| r1878_1(int) = Constant[10] : -# 1878| r1878_2(glval) = VariableAddress[y] : -# 1878| r1878_3(int *) = Convert : r1878_2 -# 1878| r1878_4(glval) = CopyValue : r1878_3 -# 1878| mu1878_5(int) = Store[?] : &:r1878_4, r1878_1 -# 1879| r1879_1(glval) = VariableAddress[#return] : +# 1877| int missing_declaration_entries::Bar2::two_missing_variable_declaration_entries() +# 1877| Block 0 +# 1877| v1877_1(void) = EnterFunction : +# 1877| mu1877_2(unknown) = AliasedDefinition : +# 1877| mu1877_3(unknown) = InitializeNonLocal : +# 1877| r1877_4(glval) = VariableAddress[#this] : +# 1877| mu1877_5(glval>) = InitializeParameter[#this] : &:r1877_4 +# 1877| r1877_6(glval>) = Load[#this] : &:r1877_4, ~m? +# 1877| mu1877_7(Bar2) = InitializeIndirection[#this] : &:r1877_6 +# 1878| r1878_1(glval) = VariableAddress[x] : +# 1878| mu1878_2(int[10]) = Uninitialized[x] : &:r1878_1 +# 1878| r1878_3(glval) = VariableAddress[y] : +# 1878| mu1878_4(int[10]) = Uninitialized[y] : &:r1878_3 +# 1879| r1879_1(int) = Constant[10] : # 1879| r1879_2(glval) = VariableAddress[x] : # 1879| r1879_3(int *) = Convert : r1879_2 -# 1879| r1879_4(int) = Load[?] : &:r1879_3, ~m? -# 1879| r1879_5(glval) = VariableAddress[y] : -# 1879| r1879_6(int *) = Convert : r1879_5 -# 1879| r1879_7(int) = Load[?] : &:r1879_6, ~m? -# 1879| r1879_8(int) = Add : r1879_4, r1879_7 -# 1879| mu1879_9(int) = Store[#return] : &:r1879_1, r1879_8 -# 1875| v1875_8(void) = ReturnIndirection[#this] : &:r1875_6, ~m? -# 1875| r1875_9(glval) = VariableAddress[#return] : -# 1875| v1875_10(void) = ReturnValue : &:r1875_9, ~m? -# 1875| v1875_11(void) = AliasedUse : ~m? -# 1875| v1875_12(void) = ExitFunction : +# 1879| r1879_4(glval) = CopyValue : r1879_3 +# 1879| mu1879_5(int) = Store[?] : &:r1879_4, r1879_1 +# 1880| r1880_1(int) = Constant[10] : +# 1880| r1880_2(glval) = VariableAddress[y] : +# 1880| r1880_3(int *) = Convert : r1880_2 +# 1880| r1880_4(glval) = CopyValue : r1880_3 +# 1880| mu1880_5(int) = Store[?] : &:r1880_4, r1880_1 +# 1881| r1881_1(glval) = VariableAddress[#return] : +# 1881| r1881_2(glval) = VariableAddress[x] : +# 1881| r1881_3(int *) = Convert : r1881_2 +# 1881| r1881_4(int) = Load[?] : &:r1881_3, ~m? +# 1881| r1881_5(glval) = VariableAddress[y] : +# 1881| r1881_6(int *) = Convert : r1881_5 +# 1881| r1881_7(int) = Load[?] : &:r1881_6, ~m? +# 1881| r1881_8(int) = Add : r1881_4, r1881_7 +# 1881| mu1881_9(int) = Store[#return] : &:r1881_1, r1881_8 +# 1877| v1877_8(void) = ReturnIndirection[#this] : &:r1877_6, ~m? +# 1877| r1877_9(glval) = VariableAddress[#return] : +# 1877| v1877_10(void) = ReturnValue : &:r1877_9, ~m? +# 1877| v1877_11(void) = AliasedUse : ~m? +# 1877| v1877_12(void) = ExitFunction : -# 1883| void missing_declaration_entries::test2() -# 1883| Block 0 -# 1883| v1883_1(void) = EnterFunction : -# 1883| mu1883_2(unknown) = AliasedDefinition : -# 1883| mu1883_3(unknown) = InitializeNonLocal : -# 1884| r1884_1(glval>) = VariableAddress[b] : -# 1884| mu1884_2(Bar2) = Uninitialized[b] : &:r1884_1 -# 1885| r1885_1(glval>) = VariableAddress[b] : -# 1885| r1885_2(glval) = FunctionAddress[two_missing_variable_declaration_entries] : -# 1885| r1885_3(int) = Call[two_missing_variable_declaration_entries] : func:r1885_2, this:r1885_1 -# 1885| mu1885_4(unknown) = ^CallSideEffect : ~m? -# 1885| v1885_5(void) = ^IndirectReadSideEffect[-1] : &:r1885_1, ~m? -# 1885| mu1885_6(Bar2) = ^IndirectMayWriteSideEffect[-1] : &:r1885_1 -# 1886| v1886_1(void) = NoOp : -# 1883| v1883_4(void) = ReturnVoid : -# 1883| v1883_5(void) = AliasedUse : ~m? -# 1883| v1883_6(void) = ExitFunction : +# 1885| void missing_declaration_entries::test2() +# 1885| Block 0 +# 1885| v1885_1(void) = EnterFunction : +# 1885| mu1885_2(unknown) = AliasedDefinition : +# 1885| mu1885_3(unknown) = InitializeNonLocal : +# 1886| r1886_1(glval>) = VariableAddress[b] : +# 1886| mu1886_2(Bar2) = Uninitialized[b] : &:r1886_1 +# 1887| r1887_1(glval>) = VariableAddress[b] : +# 1887| r1887_2(glval) = FunctionAddress[two_missing_variable_declaration_entries] : +# 1887| r1887_3(int) = Call[two_missing_variable_declaration_entries] : func:r1887_2, this:r1887_1 +# 1887| mu1887_4(unknown) = ^CallSideEffect : ~m? +# 1887| v1887_5(void) = ^IndirectReadSideEffect[-1] : &:r1887_1, ~m? +# 1887| mu1887_6(Bar2) = ^IndirectMayWriteSideEffect[-1] : &:r1887_1 +# 1888| v1888_1(void) = NoOp : +# 1885| v1885_4(void) = ReturnVoid : +# 1885| v1885_5(void) = AliasedUse : ~m? +# 1885| v1885_6(void) = ExitFunction : -# 1889| char global_template -# 1889| Block 0 -# 1889| v1889_1(void) = EnterFunction : -# 1889| mu1889_2(unknown) = AliasedDefinition : -# 1889| r1889_3(glval) = VariableAddress[global_template] : -# 1889| r1889_4(char) = Constant[42] : -# 1889| mu1889_5(char) = Store[global_template] : &:r1889_3, r1889_4 -# 1889| v1889_6(void) = ReturnVoid : -# 1889| v1889_7(void) = AliasedUse : ~m? -# 1889| v1889_8(void) = ExitFunction : - -# 1889| int global_template -# 1889| Block 0 -# 1889| v1889_1(void) = EnterFunction : -# 1889| mu1889_2(unknown) = AliasedDefinition : -# 1889| r1889_3(glval) = VariableAddress[global_template] : -# 1889| r1889_4(int) = Constant[42] : -# 1889| mu1889_5(int) = Store[global_template] : &:r1889_3, r1889_4 -# 1889| v1889_6(void) = ReturnVoid : -# 1889| v1889_7(void) = AliasedUse : ~m? -# 1889| v1889_8(void) = ExitFunction : - -# 1891| int test_global_template_int() +# 1891| char global_template # 1891| Block 0 # 1891| v1891_1(void) = EnterFunction : # 1891| mu1891_2(unknown) = AliasedDefinition : -# 1891| mu1891_3(unknown) = InitializeNonLocal : -# 1892| r1892_1(glval) = VariableAddress[local_int] : -# 1892| r1892_2(glval) = VariableAddress[global_template] : -# 1892| r1892_3(int) = Load[global_template] : &:r1892_2, ~m? -# 1892| mu1892_4(int) = Store[local_int] : &:r1892_1, r1892_3 -# 1893| r1893_1(glval) = VariableAddress[local_char] : -# 1893| r1893_2(glval) = VariableAddress[global_template] : -# 1893| r1893_3(char) = Load[global_template] : &:r1893_2, ~m? -# 1893| mu1893_4(char) = Store[local_char] : &:r1893_1, r1893_3 -# 1894| r1894_1(glval) = VariableAddress[#return] : -# 1894| r1894_2(glval) = VariableAddress[local_int] : -# 1894| r1894_3(int) = Load[local_int] : &:r1894_2, ~m? -# 1894| r1894_4(glval) = VariableAddress[local_char] : -# 1894| r1894_5(char) = Load[local_char] : &:r1894_4, ~m? -# 1894| r1894_6(int) = Convert : r1894_5 -# 1894| r1894_7(int) = Add : r1894_3, r1894_6 -# 1894| mu1894_8(int) = Store[#return] : &:r1894_1, r1894_7 -# 1891| r1891_4(glval) = VariableAddress[#return] : -# 1891| v1891_5(void) = ReturnValue : &:r1891_4, ~m? -# 1891| v1891_6(void) = AliasedUse : ~m? -# 1891| v1891_7(void) = ExitFunction : +# 1891| r1891_3(glval) = VariableAddress[global_template] : +# 1891| r1891_4(char) = Constant[42] : +# 1891| mu1891_5(char) = Store[global_template] : &:r1891_3, r1891_4 +# 1891| v1891_6(void) = ReturnVoid : +# 1891| v1891_7(void) = AliasedUse : ~m? +# 1891| v1891_8(void) = ExitFunction : -# 1899| int noreturnTest(int) -# 1899| Block 0 -# 1899| v1899_1(void) = EnterFunction : -# 1899| mu1899_2(unknown) = AliasedDefinition : -# 1899| mu1899_3(unknown) = InitializeNonLocal : -# 1899| r1899_4(glval) = VariableAddress[x] : -# 1899| mu1899_5(int) = InitializeParameter[x] : &:r1899_4 -# 1900| r1900_1(glval) = VariableAddress[x] : -# 1900| r1900_2(int) = Load[x] : &:r1900_1, ~m? -# 1900| r1900_3(int) = Constant[10] : -# 1900| r1900_4(bool) = CompareLT : r1900_2, r1900_3 -# 1900| v1900_5(void) = ConditionalBranch : r1900_4 +# 1891| int global_template +# 1891| Block 0 +# 1891| v1891_1(void) = EnterFunction : +# 1891| mu1891_2(unknown) = AliasedDefinition : +# 1891| r1891_3(glval) = VariableAddress[global_template] : +# 1891| r1891_4(int) = Constant[42] : +# 1891| mu1891_5(int) = Store[global_template] : &:r1891_3, r1891_4 +# 1891| v1891_6(void) = ReturnVoid : +# 1891| v1891_7(void) = AliasedUse : ~m? +# 1891| v1891_8(void) = ExitFunction : + +# 1893| int test_global_template_int() +# 1893| Block 0 +# 1893| v1893_1(void) = EnterFunction : +# 1893| mu1893_2(unknown) = AliasedDefinition : +# 1893| mu1893_3(unknown) = InitializeNonLocal : +# 1894| r1894_1(glval) = VariableAddress[local_int] : +# 1894| r1894_2(glval) = VariableAddress[global_template] : +# 1894| r1894_3(int) = Load[global_template] : &:r1894_2, ~m? +# 1894| mu1894_4(int) = Store[local_int] : &:r1894_1, r1894_3 +# 1895| r1895_1(glval) = VariableAddress[local_char] : +# 1895| r1895_2(glval) = VariableAddress[global_template] : +# 1895| r1895_3(char) = Load[global_template] : &:r1895_2, ~m? +# 1895| mu1895_4(char) = Store[local_char] : &:r1895_1, r1895_3 +# 1896| r1896_1(glval) = VariableAddress[#return] : +# 1896| r1896_2(glval) = VariableAddress[local_int] : +# 1896| r1896_3(int) = Load[local_int] : &:r1896_2, ~m? +# 1896| r1896_4(glval) = VariableAddress[local_char] : +# 1896| r1896_5(char) = Load[local_char] : &:r1896_4, ~m? +# 1896| r1896_6(int) = Convert : r1896_5 +# 1896| r1896_7(int) = Add : r1896_3, r1896_6 +# 1896| mu1896_8(int) = Store[#return] : &:r1896_1, r1896_7 +# 1893| r1893_4(glval) = VariableAddress[#return] : +# 1893| v1893_5(void) = ReturnValue : &:r1893_4, ~m? +# 1893| v1893_6(void) = AliasedUse : ~m? +# 1893| v1893_7(void) = ExitFunction : + +# 1901| int noreturnTest(int) +# 1901| Block 0 +# 1901| v1901_1(void) = EnterFunction : +# 1901| mu1901_2(unknown) = AliasedDefinition : +# 1901| mu1901_3(unknown) = InitializeNonLocal : +# 1901| r1901_4(glval) = VariableAddress[x] : +# 1901| mu1901_5(int) = InitializeParameter[x] : &:r1901_4 +# 1902| r1902_1(glval) = VariableAddress[x] : +# 1902| r1902_2(int) = Load[x] : &:r1902_1, ~m? +# 1902| r1902_3(int) = Constant[10] : +# 1902| r1902_4(bool) = CompareLT : r1902_2, r1902_3 +# 1902| v1902_5(void) = ConditionalBranch : r1902_4 #-----| False -> Block 3 #-----| True -> Block 2 -# 1899| Block 1 -# 1899| r1899_6(glval) = VariableAddress[#return] : -# 1899| v1899_7(void) = ReturnValue : &:r1899_6, ~m? -# 1899| v1899_8(void) = AliasedUse : ~m? -# 1899| v1899_9(void) = ExitFunction : +# 1901| Block 1 +# 1901| r1901_6(glval) = VariableAddress[#return] : +# 1901| v1901_7(void) = ReturnValue : &:r1901_6, ~m? +# 1901| v1901_8(void) = AliasedUse : ~m? +# 1901| v1901_9(void) = ExitFunction : -# 1901| Block 2 -# 1901| r1901_1(glval) = VariableAddress[#return] : -# 1901| r1901_2(glval) = VariableAddress[x] : -# 1901| r1901_3(int) = Load[x] : &:r1901_2, ~m? -# 1901| mu1901_4(int) = Store[#return] : &:r1901_1, r1901_3 +# 1903| Block 2 +# 1903| r1903_1(glval) = VariableAddress[#return] : +# 1903| r1903_2(glval) = VariableAddress[x] : +# 1903| r1903_3(int) = Load[x] : &:r1903_2, ~m? +# 1903| mu1903_4(int) = Store[#return] : &:r1903_1, r1903_3 #-----| Goto -> Block 1 -# 1903| Block 3 -# 1903| r1903_1(glval) = FunctionAddress[noreturnFunc] : -# 1903| v1903_2(void) = Call[noreturnFunc] : func:r1903_1 -# 1903| mu1903_3(unknown) = ^CallSideEffect : ~m? -# 1899| v1899_10(void) = Unreached : +# 1905| Block 3 +# 1905| r1905_1(glval) = FunctionAddress[noreturnFunc] : +# 1905| v1905_2(void) = Call[noreturnFunc] : func:r1905_1 +# 1905| mu1905_3(unknown) = ^CallSideEffect : ~m? +# 1901| v1901_10(void) = Unreached : -# 1905| Block 4 -# 1905| r1905_1(glval) = VariableAddress[#return] : -# 1905| mu1905_2(int) = Uninitialized[#return] : &:r1905_1 +# 1907| Block 4 +# 1907| r1907_1(glval) = VariableAddress[#return] : +# 1907| mu1907_2(int) = Uninitialized[#return] : &:r1907_1 #-----| Goto -> Block 1 -# 1907| int noreturnTest2(int) -# 1907| Block 0 -# 1907| v1907_1(void) = EnterFunction : -# 1907| mu1907_2(unknown) = AliasedDefinition : -# 1907| mu1907_3(unknown) = InitializeNonLocal : -# 1907| r1907_4(glval) = VariableAddress[x] : -# 1907| mu1907_5(int) = InitializeParameter[x] : &:r1907_4 -# 1908| r1908_1(glval) = VariableAddress[x] : -# 1908| r1908_2(int) = Load[x] : &:r1908_1, ~m? -# 1908| r1908_3(int) = Constant[10] : -# 1908| r1908_4(bool) = CompareLT : r1908_2, r1908_3 -# 1908| v1908_5(void) = ConditionalBranch : r1908_4 +# 1909| int noreturnTest2(int) +# 1909| Block 0 +# 1909| v1909_1(void) = EnterFunction : +# 1909| mu1909_2(unknown) = AliasedDefinition : +# 1909| mu1909_3(unknown) = InitializeNonLocal : +# 1909| r1909_4(glval) = VariableAddress[x] : +# 1909| mu1909_5(int) = InitializeParameter[x] : &:r1909_4 +# 1910| r1910_1(glval) = VariableAddress[x] : +# 1910| r1910_2(int) = Load[x] : &:r1910_1, ~m? +# 1910| r1910_3(int) = Constant[10] : +# 1910| r1910_4(bool) = CompareLT : r1910_2, r1910_3 +# 1910| v1910_5(void) = ConditionalBranch : r1910_4 #-----| False -> Block 2 #-----| True -> Block 1 -# 1909| Block 1 -# 1909| r1909_1(glval) = FunctionAddress[noreturnFunc] : -# 1909| v1909_2(void) = Call[noreturnFunc] : func:r1909_1 -# 1909| mu1909_3(unknown) = ^CallSideEffect : ~m? -# 1907| v1907_6(void) = Unreached : +# 1911| Block 1 +# 1911| r1911_1(glval) = FunctionAddress[noreturnFunc] : +# 1911| v1911_2(void) = Call[noreturnFunc] : func:r1911_1 +# 1911| mu1911_3(unknown) = ^CallSideEffect : ~m? +# 1909| v1909_6(void) = Unreached : -# 1911| Block 2 -# 1911| r1911_1(glval) = VariableAddress[#return] : -# 1911| r1911_2(glval) = VariableAddress[x] : -# 1911| r1911_3(int) = Load[x] : &:r1911_2, ~m? -# 1911| mu1911_4(int) = Store[#return] : &:r1911_1, r1911_3 -# 1907| r1907_7(glval) = VariableAddress[#return] : -# 1907| v1907_8(void) = ReturnValue : &:r1907_7, ~m? -# 1907| v1907_9(void) = AliasedUse : ~m? -# 1907| v1907_10(void) = ExitFunction : +# 1913| Block 2 +# 1913| r1913_1(glval) = VariableAddress[#return] : +# 1913| r1913_2(glval) = VariableAddress[x] : +# 1913| r1913_3(int) = Load[x] : &:r1913_2, ~m? +# 1913| mu1913_4(int) = Store[#return] : &:r1913_1, r1913_3 +# 1909| r1909_7(glval) = VariableAddress[#return] : +# 1909| v1909_8(void) = ReturnValue : &:r1909_7, ~m? +# 1909| v1909_9(void) = AliasedUse : ~m? +# 1909| v1909_10(void) = ExitFunction : -# 1914| int static_function(int) -# 1914| Block 0 -# 1914| v1914_1(void) = EnterFunction : -# 1914| mu1914_2(unknown) = AliasedDefinition : -# 1914| mu1914_3(unknown) = InitializeNonLocal : -# 1914| r1914_4(glval) = VariableAddress[x] : -# 1914| mu1914_5(int) = InitializeParameter[x] : &:r1914_4 -# 1915| r1915_1(glval) = VariableAddress[#return] : -# 1915| r1915_2(glval) = VariableAddress[x] : -# 1915| r1915_3(int) = Load[x] : &:r1915_2, ~m? -# 1915| mu1915_4(int) = Store[#return] : &:r1915_1, r1915_3 -# 1914| r1914_6(glval) = VariableAddress[#return] : -# 1914| v1914_7(void) = ReturnValue : &:r1914_6, ~m? -# 1914| v1914_8(void) = AliasedUse : ~m? -# 1914| v1914_9(void) = ExitFunction : +# 1916| int static_function(int) +# 1916| Block 0 +# 1916| v1916_1(void) = EnterFunction : +# 1916| mu1916_2(unknown) = AliasedDefinition : +# 1916| mu1916_3(unknown) = InitializeNonLocal : +# 1916| r1916_4(glval) = VariableAddress[x] : +# 1916| mu1916_5(int) = InitializeParameter[x] : &:r1916_4 +# 1917| r1917_1(glval) = VariableAddress[#return] : +# 1917| r1917_2(glval) = VariableAddress[x] : +# 1917| r1917_3(int) = Load[x] : &:r1917_2, ~m? +# 1917| mu1917_4(int) = Store[#return] : &:r1917_1, r1917_3 +# 1916| r1916_6(glval) = VariableAddress[#return] : +# 1916| v1916_7(void) = ReturnValue : &:r1916_6, ~m? +# 1916| v1916_8(void) = AliasedUse : ~m? +# 1916| v1916_9(void) = ExitFunction : -# 1918| void test_static_functions_with_assignments() -# 1918| Block 0 -# 1918| v1918_1(void) = EnterFunction : -# 1918| mu1918_2(unknown) = AliasedDefinition : -# 1918| mu1918_3(unknown) = InitializeNonLocal : -# 1919| r1919_1(glval) = VariableAddress[c] : -# 1919| mu1919_2(C) = Uninitialized[c] : &:r1919_1 -# 1919| r1919_3(glval) = FunctionAddress[C] : -# 1919| v1919_4(void) = Call[C] : func:r1919_3, this:r1919_1 -# 1919| mu1919_5(unknown) = ^CallSideEffect : ~m? -# 1919| mu1919_6(C) = ^IndirectMayWriteSideEffect[-1] : &:r1919_1 -# 1920| r1920_1(glval) = VariableAddress[x] : -# 1920| mu1920_2(int) = Uninitialized[x] : &:r1920_1 +# 1920| void test_static_functions_with_assignments() +# 1920| Block 0 +# 1920| v1920_1(void) = EnterFunction : +# 1920| mu1920_2(unknown) = AliasedDefinition : +# 1920| mu1920_3(unknown) = InitializeNonLocal : # 1921| r1921_1(glval) = VariableAddress[c] : -# 1921| r1921_2(glval) = FunctionAddress[StaticMemberFunction] : -# 1921| r1921_3(int) = Constant[10] : -# 1921| r1921_4(int) = Call[StaticMemberFunction] : func:r1921_2, 0:r1921_3 +# 1921| mu1921_2(C) = Uninitialized[c] : &:r1921_1 +# 1921| r1921_3(glval) = FunctionAddress[C] : +# 1921| v1921_4(void) = Call[C] : func:r1921_3, this:r1921_1 # 1921| mu1921_5(unknown) = ^CallSideEffect : ~m? -# 1921| r1921_6(glval) = VariableAddress[x] : -# 1921| mu1921_7(int) = Store[x] : &:r1921_6, r1921_4 -# 1922| r1922_1(glval) = VariableAddress[y] : -# 1922| mu1922_2(int) = Uninitialized[y] : &:r1922_1 -# 1923| r1923_1(glval) = FunctionAddress[StaticMemberFunction] : -# 1923| r1923_2(int) = Constant[10] : -# 1923| r1923_3(int) = Call[StaticMemberFunction] : func:r1923_1, 0:r1923_2 -# 1923| mu1923_4(unknown) = ^CallSideEffect : ~m? -# 1923| r1923_5(glval) = VariableAddress[y] : -# 1923| mu1923_6(int) = Store[y] : &:r1923_5, r1923_3 -# 1924| r1924_1(glval) = VariableAddress[z] : -# 1924| mu1924_2(int) = Uninitialized[z] : &:r1924_1 -# 1925| r1925_1(glval) = FunctionAddress[static_function] : +# 1921| mu1921_6(C) = ^IndirectMayWriteSideEffect[-1] : &:r1921_1 +# 1922| r1922_1(glval) = VariableAddress[x] : +# 1922| mu1922_2(int) = Uninitialized[x] : &:r1922_1 +# 1923| r1923_1(glval) = VariableAddress[c] : +# 1923| r1923_2(glval) = FunctionAddress[StaticMemberFunction] : +# 1923| r1923_3(int) = Constant[10] : +# 1923| r1923_4(int) = Call[StaticMemberFunction] : func:r1923_2, 0:r1923_3 +# 1923| mu1923_5(unknown) = ^CallSideEffect : ~m? +# 1923| r1923_6(glval) = VariableAddress[x] : +# 1923| mu1923_7(int) = Store[x] : &:r1923_6, r1923_4 +# 1924| r1924_1(glval) = VariableAddress[y] : +# 1924| mu1924_2(int) = Uninitialized[y] : &:r1924_1 +# 1925| r1925_1(glval) = FunctionAddress[StaticMemberFunction] : # 1925| r1925_2(int) = Constant[10] : -# 1925| r1925_3(int) = Call[static_function] : func:r1925_1, 0:r1925_2 +# 1925| r1925_3(int) = Call[StaticMemberFunction] : func:r1925_1, 0:r1925_2 # 1925| mu1925_4(unknown) = ^CallSideEffect : ~m? -# 1925| r1925_5(glval) = VariableAddress[z] : -# 1925| mu1925_6(int) = Store[z] : &:r1925_5, r1925_3 -# 1926| v1926_1(void) = NoOp : -# 1918| v1918_4(void) = ReturnVoid : -# 1918| v1918_5(void) = AliasedUse : ~m? -# 1918| v1918_6(void) = ExitFunction : +# 1925| r1925_5(glval) = VariableAddress[y] : +# 1925| mu1925_6(int) = Store[y] : &:r1925_5, r1925_3 +# 1926| r1926_1(glval) = VariableAddress[z] : +# 1926| mu1926_2(int) = Uninitialized[z] : &:r1926_1 +# 1927| r1927_1(glval) = FunctionAddress[static_function] : +# 1927| r1927_2(int) = Constant[10] : +# 1927| r1927_3(int) = Call[static_function] : func:r1927_1, 0:r1927_2 +# 1927| mu1927_4(unknown) = ^CallSideEffect : ~m? +# 1927| r1927_5(glval) = VariableAddress[z] : +# 1927| mu1927_6(int) = Store[z] : &:r1927_5, r1927_3 +# 1928| v1928_1(void) = NoOp : +# 1920| v1920_4(void) = ReturnVoid : +# 1920| v1920_5(void) = AliasedUse : ~m? +# 1920| v1920_6(void) = ExitFunction : -# 1928| void test_double_assign() -# 1928| Block 0 -# 1928| v1928_1(void) = EnterFunction : -# 1928| mu1928_2(unknown) = AliasedDefinition : -# 1928| mu1928_3(unknown) = InitializeNonLocal : -# 1929| r1929_1(glval) = VariableAddress[i] : -# 1929| mu1929_2(int) = Uninitialized[i] : &:r1929_1 -# 1929| r1929_3(glval) = VariableAddress[j] : -# 1929| mu1929_4(int) = Uninitialized[j] : &:r1929_3 -# 1930| r1930_1(int) = Constant[40] : -# 1930| r1930_2(glval) = VariableAddress[j] : -# 1930| mu1930_3(int) = Store[j] : &:r1930_2, r1930_1 -# 1930| r1930_4(int) = Load[j] : &:r1930_2, ~m? -# 1930| r1930_5(glval) = VariableAddress[i] : -# 1930| mu1930_6(int) = Store[i] : &:r1930_5, r1930_4 -# 1931| v1931_1(void) = NoOp : -# 1928| v1928_4(void) = ReturnVoid : -# 1928| v1928_5(void) = AliasedUse : ~m? -# 1928| v1928_6(void) = ExitFunction : +# 1930| void test_double_assign() +# 1930| Block 0 +# 1930| v1930_1(void) = EnterFunction : +# 1930| mu1930_2(unknown) = AliasedDefinition : +# 1930| mu1930_3(unknown) = InitializeNonLocal : +# 1931| r1931_1(glval) = VariableAddress[i] : +# 1931| mu1931_2(int) = Uninitialized[i] : &:r1931_1 +# 1931| r1931_3(glval) = VariableAddress[j] : +# 1931| mu1931_4(int) = Uninitialized[j] : &:r1931_3 +# 1932| r1932_1(int) = Constant[40] : +# 1932| r1932_2(glval) = VariableAddress[j] : +# 1932| mu1932_3(int) = Store[j] : &:r1932_2, r1932_1 +# 1932| r1932_4(int) = Load[j] : &:r1932_2, ~m? +# 1932| r1932_5(glval) = VariableAddress[i] : +# 1932| mu1932_6(int) = Store[i] : &:r1932_5, r1932_4 +# 1933| v1933_1(void) = NoOp : +# 1930| v1930_4(void) = ReturnVoid : +# 1930| v1930_5(void) = AliasedUse : ~m? +# 1930| v1930_6(void) = ExitFunction : -# 1933| void test_assign_with_assign_operation() -# 1933| Block 0 -# 1933| v1933_1(void) = EnterFunction : -# 1933| mu1933_2(unknown) = AliasedDefinition : -# 1933| mu1933_3(unknown) = InitializeNonLocal : -# 1934| r1934_1(glval) = VariableAddress[i] : -# 1934| mu1934_2(int) = Uninitialized[i] : &:r1934_1 -# 1934| r1934_3(glval) = VariableAddress[j] : -# 1934| r1934_4(int) = Constant[0] : -# 1934| mu1934_5(int) = Store[j] : &:r1934_3, r1934_4 -# 1935| r1935_1(int) = Constant[40] : -# 1935| r1935_2(glval) = VariableAddress[j] : -# 1935| r1935_3(int) = Load[j] : &:r1935_2, ~m? -# 1935| r1935_4(int) = Add : r1935_3, r1935_1 -# 1935| mu1935_5(int) = Store[j] : &:r1935_2, r1935_4 -# 1935| r1935_6(int) = Load[j] : &:r1935_2, ~m? -# 1935| r1935_7(glval) = VariableAddress[i] : -# 1935| mu1935_8(int) = Store[i] : &:r1935_7, r1935_6 -# 1936| v1936_1(void) = NoOp : -# 1933| v1933_4(void) = ReturnVoid : -# 1933| v1933_5(void) = AliasedUse : ~m? -# 1933| v1933_6(void) = ExitFunction : +# 1935| void test_assign_with_assign_operation() +# 1935| Block 0 +# 1935| v1935_1(void) = EnterFunction : +# 1935| mu1935_2(unknown) = AliasedDefinition : +# 1935| mu1935_3(unknown) = InitializeNonLocal : +# 1936| r1936_1(glval) = VariableAddress[i] : +# 1936| mu1936_2(int) = Uninitialized[i] : &:r1936_1 +# 1936| r1936_3(glval) = VariableAddress[j] : +# 1936| r1936_4(int) = Constant[0] : +# 1936| mu1936_5(int) = Store[j] : &:r1936_3, r1936_4 +# 1937| r1937_1(int) = Constant[40] : +# 1937| r1937_2(glval) = VariableAddress[j] : +# 1937| r1937_3(int) = Load[j] : &:r1937_2, ~m? +# 1937| r1937_4(int) = Add : r1937_3, r1937_1 +# 1937| mu1937_5(int) = Store[j] : &:r1937_2, r1937_4 +# 1937| r1937_6(int) = Load[j] : &:r1937_2, ~m? +# 1937| r1937_7(glval) = VariableAddress[i] : +# 1937| mu1937_8(int) = Store[i] : &:r1937_7, r1937_6 +# 1938| v1938_1(void) = NoOp : +# 1935| v1935_4(void) = ReturnVoid : +# 1935| v1935_5(void) = AliasedUse : ~m? +# 1935| v1935_6(void) = ExitFunction : -# 1942| D& D::ReferenceStaticMemberFunction() -# 1942| Block 0 -# 1942| v1942_1(void) = EnterFunction : -# 1942| mu1942_2(unknown) = AliasedDefinition : -# 1942| mu1942_3(unknown) = InitializeNonLocal : -# 1943| r1943_1(glval) = VariableAddress[#return] : -# 1943| r1943_2(glval) = VariableAddress[x] : -# 1943| r1943_3(D &) = CopyValue : r1943_2 -# 1943| mu1943_4(D &) = Store[#return] : &:r1943_1, r1943_3 -# 1942| r1942_4(glval) = VariableAddress[#return] : -# 1942| v1942_5(void) = ReturnValue : &:r1942_4, ~m? -# 1942| v1942_6(void) = AliasedUse : ~m? -# 1942| v1942_7(void) = ExitFunction : +# 1944| D& D::ReferenceStaticMemberFunction() +# 1944| Block 0 +# 1944| v1944_1(void) = EnterFunction : +# 1944| mu1944_2(unknown) = AliasedDefinition : +# 1944| mu1944_3(unknown) = InitializeNonLocal : +# 1945| r1945_1(glval) = VariableAddress[#return] : +# 1945| r1945_2(glval) = VariableAddress[x] : +# 1945| r1945_3(D &) = CopyValue : r1945_2 +# 1945| mu1945_4(D &) = Store[#return] : &:r1945_1, r1945_3 +# 1944| r1944_4(glval) = VariableAddress[#return] : +# 1944| v1944_5(void) = ReturnValue : &:r1944_4, ~m? +# 1944| v1944_6(void) = AliasedUse : ~m? +# 1944| v1944_7(void) = ExitFunction : -# 1945| D D::ObjectStaticMemberFunction() -# 1945| Block 0 -# 1945| v1945_1(void) = EnterFunction : -# 1945| mu1945_2(unknown) = AliasedDefinition : -# 1945| mu1945_3(unknown) = InitializeNonLocal : -# 1946| r1946_1(glval) = VariableAddress[#return] : -# 1946| r1946_2(glval) = VariableAddress[x] : -# 1946| r1946_3(D) = Load[x] : &:r1946_2, ~m? -# 1946| mu1946_4(D) = Store[#return] : &:r1946_1, r1946_3 -# 1945| r1945_4(glval) = VariableAddress[#return] : -# 1945| v1945_5(void) = ReturnValue : &:r1945_4, ~m? -# 1945| v1945_6(void) = AliasedUse : ~m? -# 1945| v1945_7(void) = ExitFunction : +# 1947| D D::ObjectStaticMemberFunction() +# 1947| Block 0 +# 1947| v1947_1(void) = EnterFunction : +# 1947| mu1947_2(unknown) = AliasedDefinition : +# 1947| mu1947_3(unknown) = InitializeNonLocal : +# 1948| r1948_1(glval) = VariableAddress[#return] : +# 1948| r1948_2(glval) = VariableAddress[x] : +# 1948| r1948_3(D) = Load[x] : &:r1948_2, ~m? +# 1948| mu1948_4(D) = Store[#return] : &:r1948_1, r1948_3 +# 1947| r1947_4(glval) = VariableAddress[#return] : +# 1947| v1947_5(void) = ReturnValue : &:r1947_4, ~m? +# 1947| v1947_6(void) = AliasedUse : ~m? +# 1947| v1947_7(void) = ExitFunction : -# 1950| void test_static_member_functions_with_reference_return() -# 1950| Block 0 -# 1950| v1950_1(void) = EnterFunction : -# 1950| mu1950_2(unknown) = AliasedDefinition : -# 1950| mu1950_3(unknown) = InitializeNonLocal : -# 1951| r1951_1(glval) = VariableAddress[d] : -# 1951| mu1951_2(D) = Uninitialized[d] : &:r1951_1 +# 1952| void test_static_member_functions_with_reference_return() +# 1952| Block 0 +# 1952| v1952_1(void) = EnterFunction : +# 1952| mu1952_2(unknown) = AliasedDefinition : +# 1952| mu1952_3(unknown) = InitializeNonLocal : # 1953| r1953_1(glval) = VariableAddress[d] : -# 1953| r1953_2(glval) = FunctionAddress[ReferenceStaticMemberFunction] : -# 1953| r1953_3(D &) = Call[ReferenceStaticMemberFunction] : func:r1953_2 -# 1953| mu1953_4(unknown) = ^CallSideEffect : ~m? -# 1953| r1953_5(glval) = CopyValue : r1953_3 -# 1954| r1954_1(glval) = FunctionAddress[ReferenceStaticMemberFunction] : -# 1954| r1954_2(D &) = Call[ReferenceStaticMemberFunction] : func:r1954_1 -# 1954| mu1954_3(unknown) = ^CallSideEffect : ~m? -# 1954| r1954_4(glval) = CopyValue : r1954_2 +# 1953| mu1953_2(D) = Uninitialized[d] : &:r1953_1 # 1955| r1955_1(glval) = VariableAddress[d] : -# 1955| r1955_2(glval) = FunctionAddress[ObjectStaticMemberFunction] : -# 1955| r1955_3(D) = Call[ObjectStaticMemberFunction] : func:r1955_2 +# 1955| r1955_2(glval) = FunctionAddress[ReferenceStaticMemberFunction] : +# 1955| r1955_3(D &) = Call[ReferenceStaticMemberFunction] : func:r1955_2 # 1955| mu1955_4(unknown) = ^CallSideEffect : ~m? -# 1956| r1956_1(glval) = FunctionAddress[ObjectStaticMemberFunction] : -# 1956| r1956_2(D) = Call[ObjectStaticMemberFunction] : func:r1956_1 +# 1955| r1955_5(glval) = CopyValue : r1955_3 +# 1956| r1956_1(glval) = FunctionAddress[ReferenceStaticMemberFunction] : +# 1956| r1956_2(D &) = Call[ReferenceStaticMemberFunction] : func:r1956_1 # 1956| mu1956_3(unknown) = ^CallSideEffect : ~m? -# 1958| r1958_1(glval) = VariableAddress[x] : -# 1958| mu1958_2(D) = Uninitialized[x] : &:r1958_1 -# 1959| r1959_1(glval) = VariableAddress[d] : -# 1959| r1959_2(glval) = FunctionAddress[ReferenceStaticMemberFunction] : -# 1959| r1959_3(D &) = Call[ReferenceStaticMemberFunction] : func:r1959_2 -# 1959| mu1959_4(unknown) = ^CallSideEffect : ~m? -# 1959| r1959_5(D) = Load[?] : &:r1959_3, ~m? -# 1959| r1959_6(glval) = VariableAddress[x] : -# 1959| mu1959_7(D) = Store[x] : &:r1959_6, r1959_5 -# 1960| r1960_1(glval) = VariableAddress[y] : -# 1960| mu1960_2(D) = Uninitialized[y] : &:r1960_1 -# 1961| r1961_1(glval) = FunctionAddress[ReferenceStaticMemberFunction] : -# 1961| r1961_2(D &) = Call[ReferenceStaticMemberFunction] : func:r1961_1 -# 1961| mu1961_3(unknown) = ^CallSideEffect : ~m? -# 1961| r1961_4(D) = Load[?] : &:r1961_2, ~m? -# 1961| r1961_5(glval) = VariableAddress[y] : -# 1961| mu1961_6(D) = Store[y] : &:r1961_5, r1961_4 -# 1962| r1962_1(glval) = VariableAddress[j] : -# 1962| mu1962_2(D) = Uninitialized[j] : &:r1962_1 -# 1963| r1963_1(glval) = VariableAddress[d] : -# 1963| r1963_2(glval) = FunctionAddress[ObjectStaticMemberFunction] : -# 1963| r1963_3(D) = Call[ObjectStaticMemberFunction] : func:r1963_2 -# 1963| mu1963_4(unknown) = ^CallSideEffect : ~m? -# 1963| r1963_5(glval) = VariableAddress[j] : -# 1963| mu1963_6(D) = Store[j] : &:r1963_5, r1963_3 -# 1964| r1964_1(glval) = VariableAddress[k] : -# 1964| mu1964_2(D) = Uninitialized[k] : &:r1964_1 -# 1965| r1965_1(glval) = FunctionAddress[ObjectStaticMemberFunction] : -# 1965| r1965_2(D) = Call[ObjectStaticMemberFunction] : func:r1965_1 -# 1965| mu1965_3(unknown) = ^CallSideEffect : ~m? -# 1965| r1965_4(glval) = VariableAddress[k] : -# 1965| mu1965_5(D) = Store[k] : &:r1965_4, r1965_2 -# 1966| v1966_1(void) = NoOp : -# 1950| v1950_4(void) = ReturnVoid : -# 1950| v1950_5(void) = AliasedUse : ~m? -# 1950| v1950_6(void) = ExitFunction : +# 1956| r1956_4(glval) = CopyValue : r1956_2 +# 1957| r1957_1(glval) = VariableAddress[d] : +# 1957| r1957_2(glval) = FunctionAddress[ObjectStaticMemberFunction] : +# 1957| r1957_3(D) = Call[ObjectStaticMemberFunction] : func:r1957_2 +# 1957| mu1957_4(unknown) = ^CallSideEffect : ~m? +# 1958| r1958_1(glval) = FunctionAddress[ObjectStaticMemberFunction] : +# 1958| r1958_2(D) = Call[ObjectStaticMemberFunction] : func:r1958_1 +# 1958| mu1958_3(unknown) = ^CallSideEffect : ~m? +# 1960| r1960_1(glval) = VariableAddress[x] : +# 1960| mu1960_2(D) = Uninitialized[x] : &:r1960_1 +# 1961| r1961_1(glval) = VariableAddress[d] : +# 1961| r1961_2(glval) = FunctionAddress[ReferenceStaticMemberFunction] : +# 1961| r1961_3(D &) = Call[ReferenceStaticMemberFunction] : func:r1961_2 +# 1961| mu1961_4(unknown) = ^CallSideEffect : ~m? +# 1961| r1961_5(D) = Load[?] : &:r1961_3, ~m? +# 1961| r1961_6(glval) = VariableAddress[x] : +# 1961| mu1961_7(D) = Store[x] : &:r1961_6, r1961_5 +# 1962| r1962_1(glval) = VariableAddress[y] : +# 1962| mu1962_2(D) = Uninitialized[y] : &:r1962_1 +# 1963| r1963_1(glval) = FunctionAddress[ReferenceStaticMemberFunction] : +# 1963| r1963_2(D &) = Call[ReferenceStaticMemberFunction] : func:r1963_1 +# 1963| mu1963_3(unknown) = ^CallSideEffect : ~m? +# 1963| r1963_4(D) = Load[?] : &:r1963_2, ~m? +# 1963| r1963_5(glval) = VariableAddress[y] : +# 1963| mu1963_6(D) = Store[y] : &:r1963_5, r1963_4 +# 1964| r1964_1(glval) = VariableAddress[j] : +# 1964| mu1964_2(D) = Uninitialized[j] : &:r1964_1 +# 1965| r1965_1(glval) = VariableAddress[d] : +# 1965| r1965_2(glval) = FunctionAddress[ObjectStaticMemberFunction] : +# 1965| r1965_3(D) = Call[ObjectStaticMemberFunction] : func:r1965_2 +# 1965| mu1965_4(unknown) = ^CallSideEffect : ~m? +# 1965| r1965_5(glval) = VariableAddress[j] : +# 1965| mu1965_6(D) = Store[j] : &:r1965_5, r1965_3 +# 1966| r1966_1(glval) = VariableAddress[k] : +# 1966| mu1966_2(D) = Uninitialized[k] : &:r1966_1 +# 1967| r1967_1(glval) = FunctionAddress[ObjectStaticMemberFunction] : +# 1967| r1967_2(D) = Call[ObjectStaticMemberFunction] : func:r1967_1 +# 1967| mu1967_3(unknown) = ^CallSideEffect : ~m? +# 1967| r1967_4(glval) = VariableAddress[k] : +# 1967| mu1967_5(D) = Store[k] : &:r1967_4, r1967_2 +# 1968| v1968_1(void) = NoOp : +# 1952| v1952_4(void) = ReturnVoid : +# 1952| v1952_5(void) = AliasedUse : ~m? +# 1952| v1952_6(void) = ExitFunction : -# 1968| void test_volatile() -# 1968| Block 0 -# 1968| v1968_1(void) = EnterFunction : -# 1968| mu1968_2(unknown) = AliasedDefinition : -# 1968| mu1968_3(unknown) = InitializeNonLocal : -# 1969| r1969_1(glval) = VariableAddress[x] : -# 1969| mu1969_2(int) = Uninitialized[x] : &:r1969_1 -# 1970| r1970_1(glval) = VariableAddress[x] : -# 1970| r1970_2(int) = Load[x] : &:r1970_1, ~m? -# 1971| v1971_1(void) = NoOp : -# 1968| v1968_4(void) = ReturnVoid : -# 1968| v1968_5(void) = AliasedUse : ~m? -# 1968| v1968_6(void) = ExitFunction : +# 1970| void test_volatile() +# 1970| Block 0 +# 1970| v1970_1(void) = EnterFunction : +# 1970| mu1970_2(unknown) = AliasedDefinition : +# 1970| mu1970_3(unknown) = InitializeNonLocal : +# 1971| r1971_1(glval) = VariableAddress[x] : +# 1971| mu1971_2(int) = Uninitialized[x] : &:r1971_1 +# 1972| r1972_1(glval) = VariableAddress[x] : +# 1972| r1972_2(int) = Load[x] : &:r1972_1, ~m? +# 1973| v1973_1(void) = NoOp : +# 1970| v1970_4(void) = ReturnVoid : +# 1970| v1970_5(void) = AliasedUse : ~m? +# 1970| v1970_6(void) = ExitFunction : -# 1979| void value_category_test() -# 1979| Block 0 -# 1979| v1979_1(void) = EnterFunction : -# 1979| mu1979_2(unknown) = AliasedDefinition : -# 1979| mu1979_3(unknown) = InitializeNonLocal : -# 1980| r1980_1(glval) = VariableAddress[c] : -# 1980| mu1980_2(ValCat) = Uninitialized[c] : &:r1980_1 +# 1981| void value_category_test() +# 1981| Block 0 +# 1981| v1981_1(void) = EnterFunction : +# 1981| mu1981_2(unknown) = AliasedDefinition : +# 1981| mu1981_3(unknown) = InitializeNonLocal : +# 1982| r1982_1(glval) = VariableAddress[c] : +# 1982| mu1982_2(ValCat) = Uninitialized[c] : &:r1982_1 #-----| r0_1(glval) = VariableAddress[#temp0:0] : #-----| mu0_2(ValCat) = Uninitialized[#temp0:0] : &:r0_1 #-----| r0_3(ValCat) = Load[#temp0:0] : &:r0_1, ~m? -# 1982| r1982_1(glval) = VariableAddress[c] : -# 1982| r1982_2(glval) = FunctionAddress[lvalue] : -# 1982| r1982_3(ValCat &) = Call[lvalue] : func:r1982_2 -# 1982| mu1982_4(unknown) = ^CallSideEffect : ~m? -# 1982| r1982_5(glval) = CopyValue : r1982_3 -# 1982| mu1982_6(ValCat) = Store[?] : &:r1982_5, r0_3 +# 1984| r1984_1(glval) = VariableAddress[c] : +# 1984| r1984_2(glval) = FunctionAddress[lvalue] : +# 1984| r1984_3(ValCat &) = Call[lvalue] : func:r1984_2 +# 1984| mu1984_4(unknown) = ^CallSideEffect : ~m? +# 1984| r1984_5(glval) = CopyValue : r1984_3 +# 1984| mu1984_6(ValCat) = Store[?] : &:r1984_5, r0_3 #-----| r0_4(glval) = VariableAddress[#temp0:0] : #-----| mu0_5(ValCat) = Uninitialized[#temp0:0] : &:r0_4 #-----| r0_6(ValCat) = Load[#temp0:0] : &:r0_4, ~m? -# 1983| r1983_1(glval) = VariableAddress[c] : -# 1983| r1983_2(glval) = FunctionAddress[xvalue] : -# 1983| r1983_3(ValCat &&) = Call[xvalue] : func:r1983_2 -# 1983| mu1983_4(unknown) = ^CallSideEffect : ~m? -# 1983| r1983_5(glval) = CopyValue : r1983_3 -# 1983| mu1983_6(ValCat) = Store[?] : &:r1983_5, r0_6 +# 1985| r1985_1(glval) = VariableAddress[c] : +# 1985| r1985_2(glval) = FunctionAddress[xvalue] : +# 1985| r1985_3(ValCat &&) = Call[xvalue] : func:r1985_2 +# 1985| mu1985_4(unknown) = ^CallSideEffect : ~m? +# 1985| r1985_5(glval) = CopyValue : r1985_3 +# 1985| mu1985_6(ValCat) = Store[?] : &:r1985_5, r0_6 #-----| r0_7(glval) = VariableAddress[#temp0:0] : #-----| mu0_8(ValCat) = Uninitialized[#temp0:0] : &:r0_7 #-----| r0_9(ValCat) = Load[#temp0:0] : &:r0_7, ~m? -# 1984| r1984_1(glval) = VariableAddress[#temp1984:5] : -# 1984| r1984_2(glval) = VariableAddress[c] : -# 1984| r1984_3(glval) = FunctionAddress[prvalue] : -# 1984| r1984_4(ValCat) = Call[prvalue] : func:r1984_3 -# 1984| mu1984_5(unknown) = ^CallSideEffect : ~m? -# 1984| mu1984_6(ValCat) = Store[#temp1984:5] : &:r1984_1, r1984_4 -# 1984| mu1984_7(ValCat) = Store[#temp1984:5] : &:r1984_1, r0_9 +# 1986| r1986_1(glval) = VariableAddress[#temp1986:5] : +# 1986| r1986_2(glval) = VariableAddress[c] : +# 1986| r1986_3(glval) = FunctionAddress[prvalue] : +# 1986| r1986_4(ValCat) = Call[prvalue] : func:r1986_3 +# 1986| mu1986_5(unknown) = ^CallSideEffect : ~m? +# 1986| mu1986_6(ValCat) = Store[#temp1986:5] : &:r1986_1, r1986_4 +# 1986| mu1986_7(ValCat) = Store[#temp1986:5] : &:r1986_1, r0_9 #-----| r0_10(glval) = VariableAddress[#temp0:0] : #-----| mu0_11(ValCat) = Uninitialized[#temp0:0] : &:r0_10 #-----| r0_12(ValCat) = Load[#temp0:0] : &:r0_10, ~m? -# 1985| r1985_1(glval) = FunctionAddress[lvalue] : -# 1985| r1985_2(ValCat &) = Call[lvalue] : func:r1985_1 -# 1985| mu1985_3(unknown) = ^CallSideEffect : ~m? -# 1985| r1985_4(glval) = CopyValue : r1985_2 -# 1985| mu1985_5(ValCat) = Store[?] : &:r1985_4, r0_12 +# 1987| r1987_1(glval) = FunctionAddress[lvalue] : +# 1987| r1987_2(ValCat &) = Call[lvalue] : func:r1987_1 +# 1987| mu1987_3(unknown) = ^CallSideEffect : ~m? +# 1987| r1987_4(glval) = CopyValue : r1987_2 +# 1987| mu1987_5(ValCat) = Store[?] : &:r1987_4, r0_12 #-----| r0_13(glval) = VariableAddress[#temp0:0] : #-----| mu0_14(ValCat) = Uninitialized[#temp0:0] : &:r0_13 #-----| r0_15(ValCat) = Load[#temp0:0] : &:r0_13, ~m? -# 1986| r1986_1(glval) = FunctionAddress[xvalue] : -# 1986| r1986_2(ValCat &&) = Call[xvalue] : func:r1986_1 -# 1986| mu1986_3(unknown) = ^CallSideEffect : ~m? -# 1986| r1986_4(glval) = CopyValue : r1986_2 -# 1986| mu1986_5(ValCat) = Store[?] : &:r1986_4, r0_15 +# 1988| r1988_1(glval) = FunctionAddress[xvalue] : +# 1988| r1988_2(ValCat &&) = Call[xvalue] : func:r1988_1 +# 1988| mu1988_3(unknown) = ^CallSideEffect : ~m? +# 1988| r1988_4(glval) = CopyValue : r1988_2 +# 1988| mu1988_5(ValCat) = Store[?] : &:r1988_4, r0_15 #-----| r0_16(glval) = VariableAddress[#temp0:0] : #-----| mu0_17(ValCat) = Uninitialized[#temp0:0] : &:r0_16 #-----| r0_18(ValCat) = Load[#temp0:0] : &:r0_16, ~m? -# 1987| r1987_1(glval) = VariableAddress[#temp1987:5] : -# 1987| r1987_2(glval) = FunctionAddress[prvalue] : -# 1987| r1987_3(ValCat) = Call[prvalue] : func:r1987_2 -# 1987| mu1987_4(unknown) = ^CallSideEffect : ~m? -# 1987| mu1987_5(ValCat) = Store[#temp1987:5] : &:r1987_1, r1987_3 -# 1987| mu1987_6(ValCat) = Store[#temp1987:5] : &:r1987_1, r0_18 -# 1988| v1988_1(void) = NoOp : -# 1979| v1979_4(void) = ReturnVoid : -# 1979| v1979_5(void) = AliasedUse : ~m? -# 1979| v1979_6(void) = ExitFunction : +# 1989| r1989_1(glval) = VariableAddress[#temp1989:5] : +# 1989| r1989_2(glval) = FunctionAddress[prvalue] : +# 1989| r1989_3(ValCat) = Call[prvalue] : func:r1989_2 +# 1989| mu1989_4(unknown) = ^CallSideEffect : ~m? +# 1989| mu1989_5(ValCat) = Store[#temp1989:5] : &:r1989_1, r1989_3 +# 1989| mu1989_6(ValCat) = Store[#temp1989:5] : &:r1989_1, r0_18 +# 1990| v1990_1(void) = NoOp : +# 1981| v1981_4(void) = ReturnVoid : +# 1981| v1981_5(void) = AliasedUse : ~m? +# 1981| v1981_6(void) = ExitFunction : -# 1990| void SetStaticFuncPtr() -# 1990| Block 0 -# 1990| v1990_1(void) = EnterFunction : -# 1990| mu1990_2(unknown) = AliasedDefinition : -# 1990| mu1990_3(unknown) = InitializeNonLocal : -# 1991| r1991_1(glval) = VariableAddress[c] : -# 1991| mu1991_2(C) = Uninitialized[c] : &:r1991_1 -# 1991| r1991_3(glval) = FunctionAddress[C] : -# 1991| v1991_4(void) = Call[C] : func:r1991_3, this:r1991_1 -# 1991| mu1991_5(unknown) = ^CallSideEffect : ~m? -# 1991| mu1991_6(C) = ^IndirectMayWriteSideEffect[-1] : &:r1991_1 -# 1992| r1992_1(glval<..(*)(..)>) = VariableAddress[pfn] : -# 1992| r1992_2(..(*)(..)) = FunctionAddress[StaticMemberFunction] : -# 1992| mu1992_3(..(*)(..)) = Store[pfn] : &:r1992_1, r1992_2 +# 1992| void SetStaticFuncPtr() +# 1992| Block 0 +# 1992| v1992_1(void) = EnterFunction : +# 1992| mu1992_2(unknown) = AliasedDefinition : +# 1992| mu1992_3(unknown) = InitializeNonLocal : # 1993| r1993_1(glval) = VariableAddress[c] : -# 1993| r1993_2(..(*)(..)) = FunctionAddress[StaticMemberFunction] : -# 1993| r1993_3(glval<..(*)(..)>) = VariableAddress[pfn] : -# 1993| mu1993_4(..(*)(..)) = Store[pfn] : &:r1993_3, r1993_2 -# 1994| v1994_1(void) = NoOp : -# 1990| v1990_4(void) = ReturnVoid : -# 1990| v1990_5(void) = AliasedUse : ~m? -# 1990| v1990_6(void) = ExitFunction : +# 1993| mu1993_2(C) = Uninitialized[c] : &:r1993_1 +# 1993| r1993_3(glval) = FunctionAddress[C] : +# 1993| v1993_4(void) = Call[C] : func:r1993_3, this:r1993_1 +# 1993| mu1993_5(unknown) = ^CallSideEffect : ~m? +# 1993| mu1993_6(C) = ^IndirectMayWriteSideEffect[-1] : &:r1993_1 +# 1994| r1994_1(glval<..(*)(..)>) = VariableAddress[pfn] : +# 1994| r1994_2(..(*)(..)) = FunctionAddress[StaticMemberFunction] : +# 1994| mu1994_3(..(*)(..)) = Store[pfn] : &:r1994_1, r1994_2 +# 1995| r1995_1(glval) = VariableAddress[c] : +# 1995| r1995_2(..(*)(..)) = FunctionAddress[StaticMemberFunction] : +# 1995| r1995_3(glval<..(*)(..)>) = VariableAddress[pfn] : +# 1995| mu1995_4(..(*)(..)) = Store[pfn] : &:r1995_3, r1995_2 +# 1996| v1996_1(void) = NoOp : +# 1992| v1992_4(void) = ReturnVoid : +# 1992| v1992_5(void) = AliasedUse : ~m? +# 1992| v1992_6(void) = ExitFunction : -# 1996| void TernaryTestInt(bool, int, int, int) -# 1996| Block 0 -# 1996| v1996_1(void) = EnterFunction : -# 1996| mu1996_2(unknown) = AliasedDefinition : -# 1996| mu1996_3(unknown) = InitializeNonLocal : -# 1996| r1996_4(glval) = VariableAddress[a] : -# 1996| mu1996_5(bool) = InitializeParameter[a] : &:r1996_4 -# 1996| r1996_6(glval) = VariableAddress[x] : -# 1996| mu1996_7(int) = InitializeParameter[x] : &:r1996_6 -# 1996| r1996_8(glval) = VariableAddress[y] : -# 1996| mu1996_9(int) = InitializeParameter[y] : &:r1996_8 -# 1996| r1996_10(glval) = VariableAddress[z] : -# 1996| mu1996_11(int) = InitializeParameter[z] : &:r1996_10 -# 1997| r1997_1(glval) = VariableAddress[a] : -# 1997| r1997_2(bool) = Load[a] : &:r1997_1, ~m? -# 1997| v1997_3(void) = ConditionalBranch : r1997_2 +# 1998| void TernaryTestInt(bool, int, int, int) +# 1998| Block 0 +# 1998| v1998_1(void) = EnterFunction : +# 1998| mu1998_2(unknown) = AliasedDefinition : +# 1998| mu1998_3(unknown) = InitializeNonLocal : +# 1998| r1998_4(glval) = VariableAddress[a] : +# 1998| mu1998_5(bool) = InitializeParameter[a] : &:r1998_4 +# 1998| r1998_6(glval) = VariableAddress[x] : +# 1998| mu1998_7(int) = InitializeParameter[x] : &:r1998_6 +# 1998| r1998_8(glval) = VariableAddress[y] : +# 1998| mu1998_9(int) = InitializeParameter[y] : &:r1998_8 +# 1998| r1998_10(glval) = VariableAddress[z] : +# 1998| mu1998_11(int) = InitializeParameter[z] : &:r1998_10 +# 1999| r1999_1(glval) = VariableAddress[a] : +# 1999| r1999_2(bool) = Load[a] : &:r1999_1, ~m? +# 1999| v1999_3(void) = ConditionalBranch : r1999_2 #-----| False -> Block 3 #-----| True -> Block 2 -# 1997| Block 1 -# 1997| r1997_4(glval) = VariableAddress[#temp1997:9] : -# 1997| r1997_5(int) = Load[#temp1997:9] : &:r1997_4, ~m? -# 1997| r1997_6(glval) = VariableAddress[z] : -# 1997| mu1997_7(int) = Store[z] : &:r1997_6, r1997_5 -# 1998| r1998_1(glval) = VariableAddress[a] : -# 1998| r1998_2(bool) = Load[a] : &:r1998_1, ~m? -# 1998| v1998_3(void) = ConditionalBranch : r1998_2 -#-----| False -> Block 6 -#-----| True -> Block 5 - -# 1997| Block 2 -# 1997| r1997_8(glval) = VariableAddress[x] : -# 1997| r1997_9(int) = Load[x] : &:r1997_8, ~m? -# 1997| r1997_10(glval) = VariableAddress[#temp1997:9] : -# 1997| mu1997_11(int) = Store[#temp1997:9] : &:r1997_10, r1997_9 -#-----| Goto -> Block 1 - -# 1997| Block 3 -# 1997| r1997_12(glval) = VariableAddress[y] : -# 1997| r1997_13(int) = Load[y] : &:r1997_12, ~m? -# 1997| r1997_14(glval) = VariableAddress[#temp1997:9] : -# 1997| mu1997_15(int) = Store[#temp1997:9] : &:r1997_14, r1997_13 -#-----| Goto -> Block 1 - -# 1998| Block 4 -# 1998| r1998_4(glval) = VariableAddress[#temp1998:9] : -# 1998| r1998_5(int) = Load[#temp1998:9] : &:r1998_4, ~m? -# 1998| r1998_6(glval) = VariableAddress[z] : -# 1998| mu1998_7(int) = Store[z] : &:r1998_6, r1998_5 -# 1999| r1999_1(glval) = VariableAddress[a] : -# 1999| r1999_2(bool) = Load[a] : &:r1999_1, ~m? -# 1999| v1999_3(void) = ConditionalBranch : r1999_2 -#-----| False -> Block 9 -#-----| True -> Block 8 - -# 1998| Block 5 -# 1998| r1998_8(glval) = VariableAddress[x] : -# 1998| r1998_9(int) = Load[x] : &:r1998_8, ~m? -# 1998| r1998_10(glval) = VariableAddress[#temp1998:9] : -# 1998| mu1998_11(int) = Store[#temp1998:9] : &:r1998_10, r1998_9 -#-----| Goto -> Block 4 - -# 1998| Block 6 -# 1998| r1998_12(int) = Constant[5] : -# 1998| r1998_13(glval) = VariableAddress[#temp1998:9] : -# 1998| mu1998_14(int) = Store[#temp1998:9] : &:r1998_13, r1998_12 -#-----| Goto -> Block 4 - -# 1999| Block 7 +# 1999| Block 1 # 1999| r1999_4(glval) = VariableAddress[#temp1999:9] : # 1999| r1999_5(int) = Load[#temp1999:9] : &:r1999_4, ~m? # 1999| r1999_6(glval) = VariableAddress[z] : # 1999| mu1999_7(int) = Store[z] : &:r1999_6, r1999_5 -# 2000| r2000_1(int) = Constant[7] : -# 2000| r2000_2(glval) = VariableAddress[a] : -# 2000| r2000_3(bool) = Load[a] : &:r2000_2, ~m? -# 2000| v2000_4(void) = ConditionalBranch : r2000_3 -#-----| False -> Block 12 -#-----| True -> Block 11 - -# 1999| Block 8 -# 1999| r1999_8(int) = Constant[3] : -# 1999| r1999_9(glval) = VariableAddress[#temp1999:9] : -# 1999| mu1999_10(int) = Store[#temp1999:9] : &:r1999_9, r1999_8 -#-----| Goto -> Block 7 - -# 1999| Block 9 -# 1999| r1999_11(int) = Constant[5] : -# 1999| r1999_12(glval) = VariableAddress[#temp1999:9] : -# 1999| mu1999_13(int) = Store[#temp1999:9] : &:r1999_12, r1999_11 -#-----| Goto -> Block 7 - -# 2000| Block 10 -# 2000| r2000_5(glval) = VariableAddress[#temp2000:6] : -# 2000| r2000_6(glval) = Load[#temp2000:6] : &:r2000_5, ~m? -# 2000| mu2000_7(int) = Store[?] : &:r2000_6, r2000_1 -# 2001| v2001_1(void) = NoOp : -# 1996| v1996_12(void) = ReturnVoid : -# 1996| v1996_13(void) = AliasedUse : ~m? -# 1996| v1996_14(void) = ExitFunction : - -# 2000| Block 11 -# 2000| r2000_8(glval) = VariableAddress[x] : -# 2000| r2000_9(glval) = VariableAddress[#temp2000:6] : -# 2000| mu2000_10(glval) = Store[#temp2000:6] : &:r2000_9, r2000_8 -#-----| Goto -> Block 10 - -# 2000| Block 12 -# 2000| r2000_11(glval) = VariableAddress[y] : -# 2000| r2000_12(glval) = VariableAddress[#temp2000:6] : -# 2000| mu2000_13(glval) = Store[#temp2000:6] : &:r2000_12, r2000_11 -#-----| Goto -> Block 10 - -# 2006| void TernaryTestPodObj(bool, TernaryPodObj, TernaryPodObj, TernaryPodObj) -# 2006| Block 0 -# 2006| v2006_1(void) = EnterFunction : -# 2006| mu2006_2(unknown) = AliasedDefinition : -# 2006| mu2006_3(unknown) = InitializeNonLocal : -# 2006| r2006_4(glval) = VariableAddress[a] : -# 2006| mu2006_5(bool) = InitializeParameter[a] : &:r2006_4 -# 2006| r2006_6(glval) = VariableAddress[x] : -# 2006| mu2006_7(TernaryPodObj) = InitializeParameter[x] : &:r2006_6 -# 2006| r2006_8(glval) = VariableAddress[y] : -# 2006| mu2006_9(TernaryPodObj) = InitializeParameter[y] : &:r2006_8 -# 2006| r2006_10(glval) = VariableAddress[z] : -# 2006| mu2006_11(TernaryPodObj) = InitializeParameter[z] : &:r2006_10 -# 2007| r2007_1(glval) = VariableAddress[a] : -# 2007| r2007_2(bool) = Load[a] : &:r2007_1, ~m? -# 2007| v2007_3(void) = ConditionalBranch : r2007_2 -#-----| False -> Block 3 -#-----| True -> Block 2 - -# 2007| Block 1 -# 2007| r2007_4(glval) = VariableAddress[#temp2007:9] : -# 2007| r2007_5(TernaryPodObj) = Load[#temp2007:9] : &:r2007_4, ~m? -# 2007| r2007_6(glval) = VariableAddress[z] : -# 2007| mu2007_7(TernaryPodObj) = Store[z] : &:r2007_6, r2007_5 -# 2008| r2008_1(glval) = VariableAddress[#temp2008:9] : -# 2008| r2008_2(glval) = VariableAddress[a] : -# 2008| r2008_3(bool) = Load[a] : &:r2008_2, ~m? -# 2008| v2008_4(void) = ConditionalBranch : r2008_3 +# 2000| r2000_1(glval) = VariableAddress[a] : +# 2000| r2000_2(bool) = Load[a] : &:r2000_1, ~m? +# 2000| v2000_3(void) = ConditionalBranch : r2000_2 #-----| False -> Block 6 #-----| True -> Block 5 -# 2007| Block 2 -# 2007| r2007_8(glval) = VariableAddress[x] : -# 2007| r2007_9(TernaryPodObj) = Load[x] : &:r2007_8, ~m? -# 2007| r2007_10(glval) = VariableAddress[#temp2007:9] : -# 2007| mu2007_11(TernaryPodObj) = Store[#temp2007:9] : &:r2007_10, r2007_9 +# 1999| Block 2 +# 1999| r1999_8(glval) = VariableAddress[x] : +# 1999| r1999_9(int) = Load[x] : &:r1999_8, ~m? +# 1999| r1999_10(glval) = VariableAddress[#temp1999:9] : +# 1999| mu1999_11(int) = Store[#temp1999:9] : &:r1999_10, r1999_9 #-----| Goto -> Block 1 -# 2007| Block 3 -# 2007| r2007_12(glval) = VariableAddress[y] : -# 2007| r2007_13(TernaryPodObj) = Load[y] : &:r2007_12, ~m? -# 2007| r2007_14(glval) = VariableAddress[#temp2007:9] : -# 2007| mu2007_15(TernaryPodObj) = Store[#temp2007:9] : &:r2007_14, r2007_13 +# 1999| Block 3 +# 1999| r1999_12(glval) = VariableAddress[y] : +# 1999| r1999_13(int) = Load[y] : &:r1999_12, ~m? +# 1999| r1999_14(glval) = VariableAddress[#temp1999:9] : +# 1999| mu1999_15(int) = Store[#temp1999:9] : &:r1999_14, r1999_13 #-----| Goto -> Block 1 -# 2008| Block 4 -# 2008| r2008_5(glval) = VariableAddress[#temp2008:9] : -# 2008| r2008_6(TernaryPodObj) = Load[#temp2008:9] : &:r2008_5, ~m? -# 2008| mu2008_7(TernaryPodObj) = Store[#temp2008:9] : &:r2008_1, r2008_6 -# 2008| r2008_8(TernaryPodObj) = Load[#temp2008:9] : &:r2008_1, ~m? -# 2008| r2008_9(glval) = VariableAddress[z] : -# 2008| mu2008_10(TernaryPodObj) = Store[z] : &:r2008_9, r2008_8 -# 2009| r2009_1(glval) = VariableAddress[#temp2009:9] : -# 2009| r2009_2(glval) = VariableAddress[a] : -# 2009| r2009_3(bool) = Load[a] : &:r2009_2, ~m? -# 2009| v2009_4(void) = ConditionalBranch : r2009_3 +# 2000| Block 4 +# 2000| r2000_4(glval) = VariableAddress[#temp2000:9] : +# 2000| r2000_5(int) = Load[#temp2000:9] : &:r2000_4, ~m? +# 2000| r2000_6(glval) = VariableAddress[z] : +# 2000| mu2000_7(int) = Store[z] : &:r2000_6, r2000_5 +# 2001| r2001_1(glval) = VariableAddress[a] : +# 2001| r2001_2(bool) = Load[a] : &:r2001_1, ~m? +# 2001| v2001_3(void) = ConditionalBranch : r2001_2 #-----| False -> Block 9 #-----| True -> Block 8 -# 2008| Block 5 -# 2008| r2008_11(glval) = VariableAddress[#temp2008:13] : -# 2008| r2008_12(glval) = VariableAddress[x] : -# 2008| r2008_13(TernaryPodObj) = Load[x] : &:r2008_12, ~m? -# 2008| mu2008_14(TernaryPodObj) = Store[#temp2008:13] : &:r2008_11, r2008_13 -# 2008| r2008_15(TernaryPodObj) = Load[#temp2008:13] : &:r2008_11, ~m? -# 2008| r2008_16(glval) = VariableAddress[#temp2008:9] : -# 2008| mu2008_17(TernaryPodObj) = Store[#temp2008:9] : &:r2008_16, r2008_15 +# 2000| Block 5 +# 2000| r2000_8(glval) = VariableAddress[x] : +# 2000| r2000_9(int) = Load[x] : &:r2000_8, ~m? +# 2000| r2000_10(glval) = VariableAddress[#temp2000:9] : +# 2000| mu2000_11(int) = Store[#temp2000:9] : &:r2000_10, r2000_9 #-----| Goto -> Block 4 -# 2008| Block 6 -# 2008| r2008_18(glval) = VariableAddress[#temp2008:17] : -# 2008| r2008_19(TernaryPodObj) = Constant[0] : -# 2008| mu2008_20(TernaryPodObj) = Store[#temp2008:17] : &:r2008_18, r2008_19 -# 2008| r2008_21(TernaryPodObj) = Load[#temp2008:17] : &:r2008_18, ~m? -# 2008| r2008_22(glval) = VariableAddress[#temp2008:9] : -# 2008| mu2008_23(TernaryPodObj) = Store[#temp2008:9] : &:r2008_22, r2008_21 +# 2000| Block 6 +# 2000| r2000_12(int) = Constant[5] : +# 2000| r2000_13(glval) = VariableAddress[#temp2000:9] : +# 2000| mu2000_14(int) = Store[#temp2000:9] : &:r2000_13, r2000_12 #-----| Goto -> Block 4 -# 2009| Block 7 -# 2009| r2009_5(glval) = VariableAddress[#temp2009:9] : -# 2009| r2009_6(TernaryPodObj) = Load[#temp2009:9] : &:r2009_5, ~m? -# 2009| mu2009_7(TernaryPodObj) = Store[#temp2009:9] : &:r2009_1, r2009_6 -# 2009| r2009_8(TernaryPodObj) = Load[#temp2009:9] : &:r2009_1, ~m? -# 2009| r2009_9(glval) = VariableAddress[z] : -# 2009| mu2009_10(TernaryPodObj) = Store[z] : &:r2009_9, r2009_8 -# 2010| r2010_1(glval) = VariableAddress[#temp2010:23] : -# 2010| r2010_2(TernaryPodObj) = Constant[0] : -# 2010| mu2010_3(TernaryPodObj) = Store[#temp2010:23] : &:r2010_1, r2010_2 -# 2010| r2010_4(TernaryPodObj) = Load[#temp2010:23] : &:r2010_1, ~m? -# 2010| r2010_5(glval) = VariableAddress[a] : -# 2010| r2010_6(bool) = Load[a] : &:r2010_5, ~m? -# 2010| v2010_7(void) = ConditionalBranch : r2010_6 +# 2001| Block 7 +# 2001| r2001_4(glval) = VariableAddress[#temp2001:9] : +# 2001| r2001_5(int) = Load[#temp2001:9] : &:r2001_4, ~m? +# 2001| r2001_6(glval) = VariableAddress[z] : +# 2001| mu2001_7(int) = Store[z] : &:r2001_6, r2001_5 +# 2002| r2002_1(int) = Constant[7] : +# 2002| r2002_2(glval) = VariableAddress[a] : +# 2002| r2002_3(bool) = Load[a] : &:r2002_2, ~m? +# 2002| v2002_4(void) = ConditionalBranch : r2002_3 #-----| False -> Block 12 #-----| True -> Block 11 -# 2009| Block 8 -# 2009| r2009_11(glval) = VariableAddress[#temp2009:13] : -# 2009| r2009_12(TernaryPodObj) = Constant[0] : -# 2009| mu2009_13(TernaryPodObj) = Store[#temp2009:13] : &:r2009_11, r2009_12 -# 2009| r2009_14(TernaryPodObj) = Load[#temp2009:13] : &:r2009_11, ~m? -# 2009| r2009_15(glval) = VariableAddress[#temp2009:9] : -# 2009| mu2009_16(TernaryPodObj) = Store[#temp2009:9] : &:r2009_15, r2009_14 +# 2001| Block 8 +# 2001| r2001_8(int) = Constant[3] : +# 2001| r2001_9(glval) = VariableAddress[#temp2001:9] : +# 2001| mu2001_10(int) = Store[#temp2001:9] : &:r2001_9, r2001_8 #-----| Goto -> Block 7 -# 2009| Block 9 -# 2009| r2009_17(glval) = VariableAddress[#temp2009:31] : -# 2009| r2009_18(TernaryPodObj) = Constant[0] : -# 2009| mu2009_19(TernaryPodObj) = Store[#temp2009:31] : &:r2009_17, r2009_18 -# 2009| r2009_20(TernaryPodObj) = Load[#temp2009:31] : &:r2009_17, ~m? -# 2009| r2009_21(glval) = VariableAddress[#temp2009:9] : -# 2009| mu2009_22(TernaryPodObj) = Store[#temp2009:9] : &:r2009_21, r2009_20 +# 2001| Block 9 +# 2001| r2001_11(int) = Constant[5] : +# 2001| r2001_12(glval) = VariableAddress[#temp2001:9] : +# 2001| mu2001_13(int) = Store[#temp2001:9] : &:r2001_12, r2001_11 #-----| Goto -> Block 7 -# 2010| Block 10 -# 2010| r2010_8(glval) = VariableAddress[#temp2010:10] : -# 2010| r2010_9(TernaryPodObj) = Load[#temp2010:10] : &:r2010_8, ~m? -# 2010| r2010_10(glval) = VariableAddress[z] : -# 2010| mu2010_11(TernaryPodObj) = Store[z] : &:r2010_10, r2010_9 -# 2010| r2010_12(glval) = CopyValue : r2010_10 -# 2010| mu2010_13(TernaryPodObj) = Store[?] : &:r2010_12, r2010_4 -# 2011| v2011_1(void) = NoOp : -# 2006| v2006_12(void) = ReturnVoid : -# 2006| v2006_13(void) = AliasedUse : ~m? -# 2006| v2006_14(void) = ExitFunction : +# 2002| Block 10 +# 2002| r2002_5(glval) = VariableAddress[#temp2002:6] : +# 2002| r2002_6(glval) = Load[#temp2002:6] : &:r2002_5, ~m? +# 2002| mu2002_7(int) = Store[?] : &:r2002_6, r2002_1 +# 2003| v2003_1(void) = NoOp : +# 1998| v1998_12(void) = ReturnVoid : +# 1998| v1998_13(void) = AliasedUse : ~m? +# 1998| v1998_14(void) = ExitFunction : -# 2010| Block 11 -# 2010| r2010_14(glval) = VariableAddress[x] : -# 2010| r2010_15(TernaryPodObj) = Load[x] : &:r2010_14, ~m? -# 2010| r2010_16(glval) = VariableAddress[#temp2010:10] : -# 2010| mu2010_17(TernaryPodObj) = Store[#temp2010:10] : &:r2010_16, r2010_15 +# 2002| Block 11 +# 2002| r2002_8(glval) = VariableAddress[x] : +# 2002| r2002_9(glval) = VariableAddress[#temp2002:6] : +# 2002| mu2002_10(glval) = Store[#temp2002:6] : &:r2002_9, r2002_8 #-----| Goto -> Block 10 -# 2010| Block 12 -# 2010| r2010_18(glval) = VariableAddress[y] : -# 2010| r2010_19(TernaryPodObj) = Load[y] : &:r2010_18, ~m? -# 2010| r2010_20(glval) = VariableAddress[#temp2010:10] : -# 2010| mu2010_21(TernaryPodObj) = Store[#temp2010:10] : &:r2010_20, r2010_19 +# 2002| Block 12 +# 2002| r2002_11(glval) = VariableAddress[y] : +# 2002| r2002_12(glval) = VariableAddress[#temp2002:6] : +# 2002| mu2002_13(glval) = Store[#temp2002:6] : &:r2002_12, r2002_11 #-----| Goto -> Block 10 -# 2013| TernaryNonPodObj& TernaryNonPodObj::operator=(TernaryNonPodObj const&) -# 2013| Block 0 -# 2013| v2013_1(void) = EnterFunction : -# 2013| mu2013_2(unknown) = AliasedDefinition : -# 2013| mu2013_3(unknown) = InitializeNonLocal : -# 2013| r2013_4(glval) = VariableAddress[#this] : -# 2013| mu2013_5(glval) = InitializeParameter[#this] : &:r2013_4 -# 2013| r2013_6(glval) = Load[#this] : &:r2013_4, ~m? -# 2013| mu2013_7(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2013_6 +# 2008| void TernaryTestPodObj(bool, TernaryPodObj, TernaryPodObj, TernaryPodObj) +# 2008| Block 0 +# 2008| v2008_1(void) = EnterFunction : +# 2008| mu2008_2(unknown) = AliasedDefinition : +# 2008| mu2008_3(unknown) = InitializeNonLocal : +# 2008| r2008_4(glval) = VariableAddress[a] : +# 2008| mu2008_5(bool) = InitializeParameter[a] : &:r2008_4 +# 2008| r2008_6(glval) = VariableAddress[x] : +# 2008| mu2008_7(TernaryPodObj) = InitializeParameter[x] : &:r2008_6 +# 2008| r2008_8(glval) = VariableAddress[y] : +# 2008| mu2008_9(TernaryPodObj) = InitializeParameter[y] : &:r2008_8 +# 2008| r2008_10(glval) = VariableAddress[z] : +# 2008| mu2008_11(TernaryPodObj) = InitializeParameter[z] : &:r2008_10 +# 2009| r2009_1(glval) = VariableAddress[a] : +# 2009| r2009_2(bool) = Load[a] : &:r2009_1, ~m? +# 2009| v2009_3(void) = ConditionalBranch : r2009_2 +#-----| False -> Block 3 +#-----| True -> Block 2 + +# 2009| Block 1 +# 2009| r2009_4(glval) = VariableAddress[#temp2009:9] : +# 2009| r2009_5(TernaryPodObj) = Load[#temp2009:9] : &:r2009_4, ~m? +# 2009| r2009_6(glval) = VariableAddress[z] : +# 2009| mu2009_7(TernaryPodObj) = Store[z] : &:r2009_6, r2009_5 +# 2010| r2010_1(glval) = VariableAddress[#temp2010:9] : +# 2010| r2010_2(glval) = VariableAddress[a] : +# 2010| r2010_3(bool) = Load[a] : &:r2010_2, ~m? +# 2010| v2010_4(void) = ConditionalBranch : r2010_3 +#-----| False -> Block 6 +#-----| True -> Block 5 + +# 2009| Block 2 +# 2009| r2009_8(glval) = VariableAddress[x] : +# 2009| r2009_9(TernaryPodObj) = Load[x] : &:r2009_8, ~m? +# 2009| r2009_10(glval) = VariableAddress[#temp2009:9] : +# 2009| mu2009_11(TernaryPodObj) = Store[#temp2009:9] : &:r2009_10, r2009_9 +#-----| Goto -> Block 1 + +# 2009| Block 3 +# 2009| r2009_12(glval) = VariableAddress[y] : +# 2009| r2009_13(TernaryPodObj) = Load[y] : &:r2009_12, ~m? +# 2009| r2009_14(glval) = VariableAddress[#temp2009:9] : +# 2009| mu2009_15(TernaryPodObj) = Store[#temp2009:9] : &:r2009_14, r2009_13 +#-----| Goto -> Block 1 + +# 2010| Block 4 +# 2010| r2010_5(glval) = VariableAddress[#temp2010:9] : +# 2010| r2010_6(TernaryPodObj) = Load[#temp2010:9] : &:r2010_5, ~m? +# 2010| mu2010_7(TernaryPodObj) = Store[#temp2010:9] : &:r2010_1, r2010_6 +# 2010| r2010_8(TernaryPodObj) = Load[#temp2010:9] : &:r2010_1, ~m? +# 2010| r2010_9(glval) = VariableAddress[z] : +# 2010| mu2010_10(TernaryPodObj) = Store[z] : &:r2010_9, r2010_8 +# 2011| r2011_1(glval) = VariableAddress[#temp2011:9] : +# 2011| r2011_2(glval) = VariableAddress[a] : +# 2011| r2011_3(bool) = Load[a] : &:r2011_2, ~m? +# 2011| v2011_4(void) = ConditionalBranch : r2011_3 +#-----| False -> Block 9 +#-----| True -> Block 8 + +# 2010| Block 5 +# 2010| r2010_11(glval) = VariableAddress[#temp2010:13] : +# 2010| r2010_12(glval) = VariableAddress[x] : +# 2010| r2010_13(TernaryPodObj) = Load[x] : &:r2010_12, ~m? +# 2010| mu2010_14(TernaryPodObj) = Store[#temp2010:13] : &:r2010_11, r2010_13 +# 2010| r2010_15(TernaryPodObj) = Load[#temp2010:13] : &:r2010_11, ~m? +# 2010| r2010_16(glval) = VariableAddress[#temp2010:9] : +# 2010| mu2010_17(TernaryPodObj) = Store[#temp2010:9] : &:r2010_16, r2010_15 +#-----| Goto -> Block 4 + +# 2010| Block 6 +# 2010| r2010_18(glval) = VariableAddress[#temp2010:17] : +# 2010| r2010_19(TernaryPodObj) = Constant[0] : +# 2010| mu2010_20(TernaryPodObj) = Store[#temp2010:17] : &:r2010_18, r2010_19 +# 2010| r2010_21(TernaryPodObj) = Load[#temp2010:17] : &:r2010_18, ~m? +# 2010| r2010_22(glval) = VariableAddress[#temp2010:9] : +# 2010| mu2010_23(TernaryPodObj) = Store[#temp2010:9] : &:r2010_22, r2010_21 +#-----| Goto -> Block 4 + +# 2011| Block 7 +# 2011| r2011_5(glval) = VariableAddress[#temp2011:9] : +# 2011| r2011_6(TernaryPodObj) = Load[#temp2011:9] : &:r2011_5, ~m? +# 2011| mu2011_7(TernaryPodObj) = Store[#temp2011:9] : &:r2011_1, r2011_6 +# 2011| r2011_8(TernaryPodObj) = Load[#temp2011:9] : &:r2011_1, ~m? +# 2011| r2011_9(glval) = VariableAddress[z] : +# 2011| mu2011_10(TernaryPodObj) = Store[z] : &:r2011_9, r2011_8 +# 2012| r2012_1(glval) = VariableAddress[#temp2012:23] : +# 2012| r2012_2(TernaryPodObj) = Constant[0] : +# 2012| mu2012_3(TernaryPodObj) = Store[#temp2012:23] : &:r2012_1, r2012_2 +# 2012| r2012_4(TernaryPodObj) = Load[#temp2012:23] : &:r2012_1, ~m? +# 2012| r2012_5(glval) = VariableAddress[a] : +# 2012| r2012_6(bool) = Load[a] : &:r2012_5, ~m? +# 2012| v2012_7(void) = ConditionalBranch : r2012_6 +#-----| False -> Block 12 +#-----| True -> Block 11 + +# 2011| Block 8 +# 2011| r2011_11(glval) = VariableAddress[#temp2011:13] : +# 2011| r2011_12(TernaryPodObj) = Constant[0] : +# 2011| mu2011_13(TernaryPodObj) = Store[#temp2011:13] : &:r2011_11, r2011_12 +# 2011| r2011_14(TernaryPodObj) = Load[#temp2011:13] : &:r2011_11, ~m? +# 2011| r2011_15(glval) = VariableAddress[#temp2011:9] : +# 2011| mu2011_16(TernaryPodObj) = Store[#temp2011:9] : &:r2011_15, r2011_14 +#-----| Goto -> Block 7 + +# 2011| Block 9 +# 2011| r2011_17(glval) = VariableAddress[#temp2011:31] : +# 2011| r2011_18(TernaryPodObj) = Constant[0] : +# 2011| mu2011_19(TernaryPodObj) = Store[#temp2011:31] : &:r2011_17, r2011_18 +# 2011| r2011_20(TernaryPodObj) = Load[#temp2011:31] : &:r2011_17, ~m? +# 2011| r2011_21(glval) = VariableAddress[#temp2011:9] : +# 2011| mu2011_22(TernaryPodObj) = Store[#temp2011:9] : &:r2011_21, r2011_20 +#-----| Goto -> Block 7 + +# 2012| Block 10 +# 2012| r2012_8(glval) = VariableAddress[#temp2012:10] : +# 2012| r2012_9(TernaryPodObj) = Load[#temp2012:10] : &:r2012_8, ~m? +# 2012| r2012_10(glval) = VariableAddress[z] : +# 2012| mu2012_11(TernaryPodObj) = Store[z] : &:r2012_10, r2012_9 +# 2012| r2012_12(glval) = CopyValue : r2012_10 +# 2012| mu2012_13(TernaryPodObj) = Store[?] : &:r2012_12, r2012_4 +# 2013| v2013_1(void) = NoOp : +# 2008| v2008_12(void) = ReturnVoid : +# 2008| v2008_13(void) = AliasedUse : ~m? +# 2008| v2008_14(void) = ExitFunction : + +# 2012| Block 11 +# 2012| r2012_14(glval) = VariableAddress[x] : +# 2012| r2012_15(TernaryPodObj) = Load[x] : &:r2012_14, ~m? +# 2012| r2012_16(glval) = VariableAddress[#temp2012:10] : +# 2012| mu2012_17(TernaryPodObj) = Store[#temp2012:10] : &:r2012_16, r2012_15 +#-----| Goto -> Block 10 + +# 2012| Block 12 +# 2012| r2012_18(glval) = VariableAddress[y] : +# 2012| r2012_19(TernaryPodObj) = Load[y] : &:r2012_18, ~m? +# 2012| r2012_20(glval) = VariableAddress[#temp2012:10] : +# 2012| mu2012_21(TernaryPodObj) = Store[#temp2012:10] : &:r2012_20, r2012_19 +#-----| Goto -> Block 10 + +# 2015| TernaryNonPodObj& TernaryNonPodObj::operator=(TernaryNonPodObj const&) +# 2015| Block 0 +# 2015| v2015_1(void) = EnterFunction : +# 2015| mu2015_2(unknown) = AliasedDefinition : +# 2015| mu2015_3(unknown) = InitializeNonLocal : +# 2015| r2015_4(glval) = VariableAddress[#this] : +# 2015| mu2015_5(glval) = InitializeParameter[#this] : &:r2015_4 +# 2015| r2015_6(glval) = Load[#this] : &:r2015_4, ~m? +# 2015| mu2015_7(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2015_6 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| mu0_2(TernaryNonPodObj &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(TernaryNonPodObj &) = Load[(unnamed parameter 0)] : &:r0_1, ~m? @@ -10939,742 +10939,742 @@ ir.cpp: #-----| r0_8(glval) = CopyValue : r0_7 #-----| r0_9(TernaryNonPodObj &) = CopyValue : r0_8 #-----| mu0_10(TernaryNonPodObj &) = Store[#return] : &:r0_5, r0_9 -# 2013| v2013_8(void) = ReturnIndirection[#this] : &:r2013_6, ~m? +# 2015| v2015_8(void) = ReturnIndirection[#this] : &:r2015_6, ~m? #-----| v0_11(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, ~m? -# 2013| r2013_9(glval) = VariableAddress[#return] : -# 2013| v2013_10(void) = ReturnValue : &:r2013_9, ~m? -# 2013| v2013_11(void) = AliasedUse : ~m? -# 2013| v2013_12(void) = ExitFunction : +# 2015| r2015_9(glval) = VariableAddress[#return] : +# 2015| v2015_10(void) = ReturnValue : &:r2015_9, ~m? +# 2015| v2015_11(void) = AliasedUse : ~m? +# 2015| v2015_12(void) = ExitFunction : -# 2013| void TernaryNonPodObj::TernaryNonPodObj() -# 2013| Block 0 -# 2013| v2013_1(void) = EnterFunction : -# 2013| mu2013_2(unknown) = AliasedDefinition : -# 2013| mu2013_3(unknown) = InitializeNonLocal : -# 2013| r2013_4(glval) = VariableAddress[#this] : -# 2013| mu2013_5(glval) = InitializeParameter[#this] : &:r2013_4 -# 2013| r2013_6(glval) = Load[#this] : &:r2013_4, ~m? -# 2013| mu2013_7(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2013_6 -# 2013| v2013_8(void) = NoOp : -# 2013| v2013_9(void) = ReturnIndirection[#this] : &:r2013_6, ~m? -# 2013| v2013_10(void) = ReturnVoid : -# 2013| v2013_11(void) = AliasedUse : ~m? -# 2013| v2013_12(void) = ExitFunction : +# 2015| void TernaryNonPodObj::TernaryNonPodObj() +# 2015| Block 0 +# 2015| v2015_1(void) = EnterFunction : +# 2015| mu2015_2(unknown) = AliasedDefinition : +# 2015| mu2015_3(unknown) = InitializeNonLocal : +# 2015| r2015_4(glval) = VariableAddress[#this] : +# 2015| mu2015_5(glval) = InitializeParameter[#this] : &:r2015_4 +# 2015| r2015_6(glval) = Load[#this] : &:r2015_4, ~m? +# 2015| mu2015_7(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2015_6 +# 2015| v2015_8(void) = NoOp : +# 2015| v2015_9(void) = ReturnIndirection[#this] : &:r2015_6, ~m? +# 2015| v2015_10(void) = ReturnVoid : +# 2015| v2015_11(void) = AliasedUse : ~m? +# 2015| v2015_12(void) = ExitFunction : -# 2013| void TernaryNonPodObj::TernaryNonPodObj(TernaryNonPodObj const&) -# 2013| Block 0 -# 2013| v2013_1(void) = EnterFunction : -# 2013| mu2013_2(unknown) = AliasedDefinition : -# 2013| mu2013_3(unknown) = InitializeNonLocal : -# 2013| r2013_4(glval) = VariableAddress[#this] : -# 2013| mu2013_5(glval) = InitializeParameter[#this] : &:r2013_4 -# 2013| r2013_6(glval) = Load[#this] : &:r2013_4, ~m? -# 2013| mu2013_7(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2013_6 +# 2015| void TernaryNonPodObj::TernaryNonPodObj(TernaryNonPodObj const&) +# 2015| Block 0 +# 2015| v2015_1(void) = EnterFunction : +# 2015| mu2015_2(unknown) = AliasedDefinition : +# 2015| mu2015_3(unknown) = InitializeNonLocal : +# 2015| r2015_4(glval) = VariableAddress[#this] : +# 2015| mu2015_5(glval) = InitializeParameter[#this] : &:r2015_4 +# 2015| r2015_6(glval) = Load[#this] : &:r2015_4, ~m? +# 2015| mu2015_7(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2015_6 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| mu0_2(TernaryNonPodObj &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(TernaryNonPodObj &) = Load[(unnamed parameter 0)] : &:r0_1, ~m? #-----| mu0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 2013| v2013_8(void) = NoOp : -# 2013| v2013_9(void) = ReturnIndirection[#this] : &:r2013_6, ~m? +# 2015| v2015_8(void) = NoOp : +# 2015| v2015_9(void) = ReturnIndirection[#this] : &:r2015_6, ~m? #-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, ~m? -# 2013| v2013_10(void) = ReturnVoid : -# 2013| v2013_11(void) = AliasedUse : ~m? -# 2013| v2013_12(void) = ExitFunction : +# 2015| v2015_10(void) = ReturnVoid : +# 2015| v2015_11(void) = AliasedUse : ~m? +# 2015| v2015_12(void) = ExitFunction : -# 2014| void TernaryNonPodObj::~TernaryNonPodObj() -# 2014| Block 0 -# 2014| v2014_1(void) = EnterFunction : -# 2014| mu2014_2(unknown) = AliasedDefinition : -# 2014| mu2014_3(unknown) = InitializeNonLocal : -# 2014| r2014_4(glval) = VariableAddress[#this] : -# 2014| mu2014_5(glval) = InitializeParameter[#this] : &:r2014_4 -# 2014| r2014_6(glval) = Load[#this] : &:r2014_4, ~m? -# 2014| mu2014_7(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2014_6 -# 2014| v2014_8(void) = NoOp : -# 2014| v2014_9(void) = ReturnIndirection[#this] : &:r2014_6, ~m? -# 2014| v2014_10(void) = ReturnVoid : -# 2014| v2014_11(void) = AliasedUse : ~m? -# 2014| v2014_12(void) = ExitFunction : +# 2016| void TernaryNonPodObj::~TernaryNonPodObj() +# 2016| Block 0 +# 2016| v2016_1(void) = EnterFunction : +# 2016| mu2016_2(unknown) = AliasedDefinition : +# 2016| mu2016_3(unknown) = InitializeNonLocal : +# 2016| r2016_4(glval) = VariableAddress[#this] : +# 2016| mu2016_5(glval) = InitializeParameter[#this] : &:r2016_4 +# 2016| r2016_6(glval) = Load[#this] : &:r2016_4, ~m? +# 2016| mu2016_7(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2016_6 +# 2016| v2016_8(void) = NoOp : +# 2016| v2016_9(void) = ReturnIndirection[#this] : &:r2016_6, ~m? +# 2016| v2016_10(void) = ReturnVoid : +# 2016| v2016_11(void) = AliasedUse : ~m? +# 2016| v2016_12(void) = ExitFunction : -# 2017| void TernaryTestNonPodObj(bool, TernaryNonPodObj, TernaryNonPodObj, TernaryNonPodObj) -# 2017| Block 0 -# 2017| v2017_1(void) = EnterFunction : -# 2017| mu2017_2(unknown) = AliasedDefinition : -# 2017| mu2017_3(unknown) = InitializeNonLocal : -# 2017| r2017_4(glval) = VariableAddress[a] : -# 2017| mu2017_5(bool) = InitializeParameter[a] : &:r2017_4 -# 2017| r2017_6(glval) = VariableAddress[x] : -# 2017| mu2017_7(TernaryNonPodObj) = InitializeParameter[x] : &:r2017_6 -# 2017| r2017_8(glval) = VariableAddress[y] : -# 2017| mu2017_9(TernaryNonPodObj) = InitializeParameter[y] : &:r2017_8 -# 2017| r2017_10(glval) = VariableAddress[z] : -# 2017| mu2017_11(TernaryNonPodObj) = InitializeParameter[z] : &:r2017_10 -# 2018| r2018_1(glval) = VariableAddress[z] : -# 2018| r2018_2(glval) = FunctionAddress[operator=] : -# 2018| r2018_3(glval) = VariableAddress[a] : -# 2018| r2018_4(bool) = Load[a] : &:r2018_3, ~m? -# 2018| v2018_5(void) = ConditionalBranch : r2018_4 +# 2019| void TernaryTestNonPodObj(bool, TernaryNonPodObj, TernaryNonPodObj, TernaryNonPodObj) +# 2019| Block 0 +# 2019| v2019_1(void) = EnterFunction : +# 2019| mu2019_2(unknown) = AliasedDefinition : +# 2019| mu2019_3(unknown) = InitializeNonLocal : +# 2019| r2019_4(glval) = VariableAddress[a] : +# 2019| mu2019_5(bool) = InitializeParameter[a] : &:r2019_4 +# 2019| r2019_6(glval) = VariableAddress[x] : +# 2019| mu2019_7(TernaryNonPodObj) = InitializeParameter[x] : &:r2019_6 +# 2019| r2019_8(glval) = VariableAddress[y] : +# 2019| mu2019_9(TernaryNonPodObj) = InitializeParameter[y] : &:r2019_8 +# 2019| r2019_10(glval) = VariableAddress[z] : +# 2019| mu2019_11(TernaryNonPodObj) = InitializeParameter[z] : &:r2019_10 +# 2020| r2020_1(glval) = VariableAddress[z] : +# 2020| r2020_2(glval) = FunctionAddress[operator=] : +# 2020| r2020_3(glval) = VariableAddress[a] : +# 2020| r2020_4(bool) = Load[a] : &:r2020_3, ~m? +# 2020| v2020_5(void) = ConditionalBranch : r2020_4 #-----| False -> Block 3 #-----| True -> Block 2 -# 2018| Block 1 -# 2018| r2018_6(glval) = VariableAddress[#temp2018:9] : -# 2018| r2018_7(glval) = Load[#temp2018:9] : &:r2018_6, ~m? -# 2018| r2018_8(glval) = Convert : r2018_7 -# 2018| r2018_9(TernaryNonPodObj &) = CopyValue : r2018_8 -# 2018| r2018_10(TernaryNonPodObj &) = Call[operator=] : func:r2018_2, this:r2018_1, 0:r2018_9 -# 2018| mu2018_11(unknown) = ^CallSideEffect : ~m? -# 2018| v2018_12(void) = ^IndirectReadSideEffect[-1] : &:r2018_1, ~m? -# 2018| v2018_13(void) = ^BufferReadSideEffect[0] : &:r2018_9, ~m? -# 2018| mu2018_14(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2018_1 -# 2018| r2018_15(glval) = CopyValue : r2018_10 -# 2019| r2019_1(glval) = VariableAddress[z] : -# 2019| r2019_2(glval) = FunctionAddress[operator=] : -# 2019| r2019_3(glval) = VariableAddress[#temp2019:9] : -# 2019| r2019_4(glval) = VariableAddress[a] : -# 2019| r2019_5(bool) = Load[a] : &:r2019_4, ~m? -# 2019| v2019_6(void) = ConditionalBranch : r2019_5 +# 2020| Block 1 +# 2020| r2020_6(glval) = VariableAddress[#temp2020:9] : +# 2020| r2020_7(glval) = Load[#temp2020:9] : &:r2020_6, ~m? +# 2020| r2020_8(glval) = Convert : r2020_7 +# 2020| r2020_9(TernaryNonPodObj &) = CopyValue : r2020_8 +# 2020| r2020_10(TernaryNonPodObj &) = Call[operator=] : func:r2020_2, this:r2020_1, 0:r2020_9 +# 2020| mu2020_11(unknown) = ^CallSideEffect : ~m? +# 2020| v2020_12(void) = ^IndirectReadSideEffect[-1] : &:r2020_1, ~m? +# 2020| v2020_13(void) = ^BufferReadSideEffect[0] : &:r2020_9, ~m? +# 2020| mu2020_14(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2020_1 +# 2020| r2020_15(glval) = CopyValue : r2020_10 +# 2021| r2021_1(glval) = VariableAddress[z] : +# 2021| r2021_2(glval) = FunctionAddress[operator=] : +# 2021| r2021_3(glval) = VariableAddress[#temp2021:9] : +# 2021| r2021_4(glval) = VariableAddress[a] : +# 2021| r2021_5(bool) = Load[a] : &:r2021_4, ~m? +# 2021| v2021_6(void) = ConditionalBranch : r2021_5 #-----| False -> Block 6 #-----| True -> Block 5 -# 2018| Block 2 -# 2018| r2018_16(glval) = VariableAddress[x] : -# 2018| r2018_17(glval) = VariableAddress[#temp2018:9] : -# 2018| mu2018_18(glval) = Store[#temp2018:9] : &:r2018_17, r2018_16 +# 2020| Block 2 +# 2020| r2020_16(glval) = VariableAddress[x] : +# 2020| r2020_17(glval) = VariableAddress[#temp2020:9] : +# 2020| mu2020_18(glval) = Store[#temp2020:9] : &:r2020_17, r2020_16 #-----| Goto -> Block 1 -# 2018| Block 3 -# 2018| r2018_19(glval) = VariableAddress[y] : -# 2018| r2018_20(glval) = VariableAddress[#temp2018:9] : -# 2018| mu2018_21(glval) = Store[#temp2018:9] : &:r2018_20, r2018_19 +# 2020| Block 3 +# 2020| r2020_19(glval) = VariableAddress[y] : +# 2020| r2020_20(glval) = VariableAddress[#temp2020:9] : +# 2020| mu2020_21(glval) = Store[#temp2020:9] : &:r2020_20, r2020_19 #-----| Goto -> Block 1 -# 2019| Block 4 -# 2019| r2019_7(glval) = VariableAddress[#temp2019:9] : -# 2019| r2019_8(TernaryNonPodObj) = Load[#temp2019:9] : &:r2019_7, ~m? -# 2019| mu2019_9(TernaryNonPodObj) = Store[#temp2019:9] : &:r2019_3, r2019_8 -# 2019| r2019_10(glval) = Convert : r2019_3 -# 2019| r2019_11(TernaryNonPodObj &) = CopyValue : r2019_10 -# 2019| r2019_12(TernaryNonPodObj &) = Call[operator=] : func:r2019_2, this:r2019_1, 0:r2019_11 -# 2019| mu2019_13(unknown) = ^CallSideEffect : ~m? -# 2019| v2019_14(void) = ^IndirectReadSideEffect[-1] : &:r2019_1, ~m? -# 2019| v2019_15(void) = ^BufferReadSideEffect[0] : &:r2019_11, ~m? -# 2019| mu2019_16(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2019_1 -# 2019| r2019_17(glval) = CopyValue : r2019_12 -# 2020| r2020_1(glval) = VariableAddress[z] : -# 2020| r2020_2(glval) = FunctionAddress[operator=] : -# 2020| r2020_3(glval) = VariableAddress[#temp2020:9] : -# 2020| r2020_4(glval) = VariableAddress[a] : -# 2020| r2020_5(bool) = Load[a] : &:r2020_4, ~m? -# 2020| v2020_6(void) = ConditionalBranch : r2020_5 +# 2021| Block 4 +# 2021| r2021_7(glval) = VariableAddress[#temp2021:9] : +# 2021| r2021_8(TernaryNonPodObj) = Load[#temp2021:9] : &:r2021_7, ~m? +# 2021| mu2021_9(TernaryNonPodObj) = Store[#temp2021:9] : &:r2021_3, r2021_8 +# 2021| r2021_10(glval) = Convert : r2021_3 +# 2021| r2021_11(TernaryNonPodObj &) = CopyValue : r2021_10 +# 2021| r2021_12(TernaryNonPodObj &) = Call[operator=] : func:r2021_2, this:r2021_1, 0:r2021_11 +# 2021| mu2021_13(unknown) = ^CallSideEffect : ~m? +# 2021| v2021_14(void) = ^IndirectReadSideEffect[-1] : &:r2021_1, ~m? +# 2021| v2021_15(void) = ^BufferReadSideEffect[0] : &:r2021_11, ~m? +# 2021| mu2021_16(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2021_1 +# 2021| r2021_17(glval) = CopyValue : r2021_12 +# 2022| r2022_1(glval) = VariableAddress[z] : +# 2022| r2022_2(glval) = FunctionAddress[operator=] : +# 2022| r2022_3(glval) = VariableAddress[#temp2022:9] : +# 2022| r2022_4(glval) = VariableAddress[a] : +# 2022| r2022_5(bool) = Load[a] : &:r2022_4, ~m? +# 2022| v2022_6(void) = ConditionalBranch : r2022_5 #-----| False -> Block 9 #-----| True -> Block 8 -# 2019| Block 5 -# 2019| r2019_18(glval) = VariableAddress[#temp2019:13] : -# 2019| mu2019_19(TernaryNonPodObj) = Uninitialized[#temp2019:13] : &:r2019_18 -# 2019| r2019_20(glval) = FunctionAddress[TernaryNonPodObj] : -# 2019| r2019_21(glval) = VariableAddress[x] : -# 2019| r2019_22(glval) = Convert : r2019_21 -# 2019| r2019_23(TernaryNonPodObj &) = CopyValue : r2019_22 -# 2019| v2019_24(void) = Call[TernaryNonPodObj] : func:r2019_20, this:r2019_18, 0:r2019_23 -# 2019| mu2019_25(unknown) = ^CallSideEffect : ~m? -# 2019| v2019_26(void) = ^BufferReadSideEffect[0] : &:r2019_23, ~m? -# 2019| mu2019_27(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2019_18 -# 2019| r2019_28(TernaryNonPodObj) = Load[#temp2019:13] : &:r2019_18, ~m? -# 2019| r2019_29(glval) = VariableAddress[#temp2019:9] : -# 2019| mu2019_30(TernaryNonPodObj) = Store[#temp2019:9] : &:r2019_29, r2019_28 +# 2021| Block 5 +# 2021| r2021_18(glval) = VariableAddress[#temp2021:13] : +# 2021| mu2021_19(TernaryNonPodObj) = Uninitialized[#temp2021:13] : &:r2021_18 +# 2021| r2021_20(glval) = FunctionAddress[TernaryNonPodObj] : +# 2021| r2021_21(glval) = VariableAddress[x] : +# 2021| r2021_22(glval) = Convert : r2021_21 +# 2021| r2021_23(TernaryNonPodObj &) = CopyValue : r2021_22 +# 2021| v2021_24(void) = Call[TernaryNonPodObj] : func:r2021_20, this:r2021_18, 0:r2021_23 +# 2021| mu2021_25(unknown) = ^CallSideEffect : ~m? +# 2021| v2021_26(void) = ^BufferReadSideEffect[0] : &:r2021_23, ~m? +# 2021| mu2021_27(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2021_18 +# 2021| r2021_28(TernaryNonPodObj) = Load[#temp2021:13] : &:r2021_18, ~m? +# 2021| r2021_29(glval) = VariableAddress[#temp2021:9] : +# 2021| mu2021_30(TernaryNonPodObj) = Store[#temp2021:9] : &:r2021_29, r2021_28 #-----| Goto -> Block 4 -# 2019| Block 6 -# 2019| r2019_31(glval) = VariableAddress[#temp2019:17] : -# 2019| mu2019_32(TernaryNonPodObj) = Uninitialized[#temp2019:17] : &:r2019_31 -# 2019| r2019_33(glval) = FunctionAddress[TernaryNonPodObj] : -# 2019| v2019_34(void) = Call[TernaryNonPodObj] : func:r2019_33, this:r2019_31 -# 2019| mu2019_35(unknown) = ^CallSideEffect : ~m? -# 2019| mu2019_36(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2019_31 -# 2019| r2019_37(TernaryNonPodObj) = Load[#temp2019:17] : &:r2019_31, ~m? -# 2019| r2019_38(glval) = VariableAddress[#temp2019:9] : -# 2019| mu2019_39(TernaryNonPodObj) = Store[#temp2019:9] : &:r2019_38, r2019_37 +# 2021| Block 6 +# 2021| r2021_31(glval) = VariableAddress[#temp2021:17] : +# 2021| mu2021_32(TernaryNonPodObj) = Uninitialized[#temp2021:17] : &:r2021_31 +# 2021| r2021_33(glval) = FunctionAddress[TernaryNonPodObj] : +# 2021| v2021_34(void) = Call[TernaryNonPodObj] : func:r2021_33, this:r2021_31 +# 2021| mu2021_35(unknown) = ^CallSideEffect : ~m? +# 2021| mu2021_36(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2021_31 +# 2021| r2021_37(TernaryNonPodObj) = Load[#temp2021:17] : &:r2021_31, ~m? +# 2021| r2021_38(glval) = VariableAddress[#temp2021:9] : +# 2021| mu2021_39(TernaryNonPodObj) = Store[#temp2021:9] : &:r2021_38, r2021_37 #-----| Goto -> Block 4 -# 2020| Block 7 -# 2020| r2020_7(glval) = VariableAddress[#temp2020:9] : -# 2020| r2020_8(TernaryNonPodObj) = Load[#temp2020:9] : &:r2020_7, ~m? -# 2020| mu2020_9(TernaryNonPodObj) = Store[#temp2020:9] : &:r2020_3, r2020_8 -# 2020| r2020_10(glval) = Convert : r2020_3 -# 2020| r2020_11(TernaryNonPodObj &) = CopyValue : r2020_10 -# 2020| r2020_12(TernaryNonPodObj &) = Call[operator=] : func:r2020_2, this:r2020_1, 0:r2020_11 -# 2020| mu2020_13(unknown) = ^CallSideEffect : ~m? -# 2020| v2020_14(void) = ^IndirectReadSideEffect[-1] : &:r2020_1, ~m? -# 2020| v2020_15(void) = ^BufferReadSideEffect[0] : &:r2020_11, ~m? -# 2020| mu2020_16(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2020_1 -# 2020| r2020_17(glval) = CopyValue : r2020_12 -# 2021| r2021_1(glval) = VariableAddress[z] : -# 2021| r2021_2(glval) = FunctionAddress[operator=] : -# 2021| r2021_3(glval) = VariableAddress[a] : -# 2021| r2021_4(bool) = Load[a] : &:r2021_3, ~m? -# 2021| v2021_5(void) = ConditionalBranch : r2021_4 +# 2022| Block 7 +# 2022| r2022_7(glval) = VariableAddress[#temp2022:9] : +# 2022| r2022_8(TernaryNonPodObj) = Load[#temp2022:9] : &:r2022_7, ~m? +# 2022| mu2022_9(TernaryNonPodObj) = Store[#temp2022:9] : &:r2022_3, r2022_8 +# 2022| r2022_10(glval) = Convert : r2022_3 +# 2022| r2022_11(TernaryNonPodObj &) = CopyValue : r2022_10 +# 2022| r2022_12(TernaryNonPodObj &) = Call[operator=] : func:r2022_2, this:r2022_1, 0:r2022_11 +# 2022| mu2022_13(unknown) = ^CallSideEffect : ~m? +# 2022| v2022_14(void) = ^IndirectReadSideEffect[-1] : &:r2022_1, ~m? +# 2022| v2022_15(void) = ^BufferReadSideEffect[0] : &:r2022_11, ~m? +# 2022| mu2022_16(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2022_1 +# 2022| r2022_17(glval) = CopyValue : r2022_12 +# 2023| r2023_1(glval) = VariableAddress[z] : +# 2023| r2023_2(glval) = FunctionAddress[operator=] : +# 2023| r2023_3(glval) = VariableAddress[a] : +# 2023| r2023_4(bool) = Load[a] : &:r2023_3, ~m? +# 2023| v2023_5(void) = ConditionalBranch : r2023_4 #-----| False -> Block 12 #-----| True -> Block 11 -# 2020| Block 8 -# 2020| r2020_18(glval) = VariableAddress[#temp2020:13] : -# 2020| mu2020_19(TernaryNonPodObj) = Uninitialized[#temp2020:13] : &:r2020_18 -# 2020| r2020_20(glval) = FunctionAddress[TernaryNonPodObj] : -# 2020| v2020_21(void) = Call[TernaryNonPodObj] : func:r2020_20, this:r2020_18 -# 2020| mu2020_22(unknown) = ^CallSideEffect : ~m? -# 2020| mu2020_23(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2020_18 -# 2020| r2020_24(TernaryNonPodObj) = Load[#temp2020:13] : &:r2020_18, ~m? -# 2020| r2020_25(glval) = VariableAddress[#temp2020:9] : -# 2020| mu2020_26(TernaryNonPodObj) = Store[#temp2020:9] : &:r2020_25, r2020_24 +# 2022| Block 8 +# 2022| r2022_18(glval) = VariableAddress[#temp2022:13] : +# 2022| mu2022_19(TernaryNonPodObj) = Uninitialized[#temp2022:13] : &:r2022_18 +# 2022| r2022_20(glval) = FunctionAddress[TernaryNonPodObj] : +# 2022| v2022_21(void) = Call[TernaryNonPodObj] : func:r2022_20, this:r2022_18 +# 2022| mu2022_22(unknown) = ^CallSideEffect : ~m? +# 2022| mu2022_23(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2022_18 +# 2022| r2022_24(TernaryNonPodObj) = Load[#temp2022:13] : &:r2022_18, ~m? +# 2022| r2022_25(glval) = VariableAddress[#temp2022:9] : +# 2022| mu2022_26(TernaryNonPodObj) = Store[#temp2022:9] : &:r2022_25, r2022_24 #-----| Goto -> Block 7 -# 2020| Block 9 -# 2020| r2020_27(glval) = VariableAddress[#temp2020:34] : -# 2020| mu2020_28(TernaryNonPodObj) = Uninitialized[#temp2020:34] : &:r2020_27 -# 2020| r2020_29(glval) = FunctionAddress[TernaryNonPodObj] : -# 2020| v2020_30(void) = Call[TernaryNonPodObj] : func:r2020_29, this:r2020_27 -# 2020| mu2020_31(unknown) = ^CallSideEffect : ~m? -# 2020| mu2020_32(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2020_27 -# 2020| r2020_33(TernaryNonPodObj) = Load[#temp2020:34] : &:r2020_27, ~m? -# 2020| r2020_34(glval) = VariableAddress[#temp2020:9] : -# 2020| mu2020_35(TernaryNonPodObj) = Store[#temp2020:9] : &:r2020_34, r2020_33 +# 2022| Block 9 +# 2022| r2022_27(glval) = VariableAddress[#temp2022:34] : +# 2022| mu2022_28(TernaryNonPodObj) = Uninitialized[#temp2022:34] : &:r2022_27 +# 2022| r2022_29(glval) = FunctionAddress[TernaryNonPodObj] : +# 2022| v2022_30(void) = Call[TernaryNonPodObj] : func:r2022_29, this:r2022_27 +# 2022| mu2022_31(unknown) = ^CallSideEffect : ~m? +# 2022| mu2022_32(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2022_27 +# 2022| r2022_33(TernaryNonPodObj) = Load[#temp2022:34] : &:r2022_27, ~m? +# 2022| r2022_34(glval) = VariableAddress[#temp2022:9] : +# 2022| mu2022_35(TernaryNonPodObj) = Store[#temp2022:9] : &:r2022_34, r2022_33 #-----| Goto -> Block 7 -# 2021| Block 10 -# 2021| r2021_6(glval) = VariableAddress[#temp2021:10] : -# 2021| r2021_7(glval) = Load[#temp2021:10] : &:r2021_6, ~m? -# 2021| r2021_8(glval) = Convert : r2021_7 -# 2021| r2021_9(TernaryNonPodObj &) = CopyValue : r2021_8 -# 2021| r2021_10(TernaryNonPodObj &) = Call[operator=] : func:r2021_2, this:r2021_1, 0:r2021_9 -# 2021| mu2021_11(unknown) = ^CallSideEffect : ~m? -# 2021| v2021_12(void) = ^IndirectReadSideEffect[-1] : &:r2021_1, ~m? -# 2021| v2021_13(void) = ^BufferReadSideEffect[0] : &:r2021_9, ~m? -# 2021| mu2021_14(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2021_1 -# 2021| r2021_15(glval) = CopyValue : r2021_10 -# 2021| r2021_16(glval) = FunctionAddress[operator=] : -# 2021| r2021_17(glval) = VariableAddress[#temp2021:23] : -# 2021| mu2021_18(TernaryNonPodObj) = Uninitialized[#temp2021:23] : &:r2021_17 -# 2021| r2021_19(glval) = FunctionAddress[TernaryNonPodObj] : -# 2021| v2021_20(void) = Call[TernaryNonPodObj] : func:r2021_19, this:r2021_17 -# 2021| mu2021_21(unknown) = ^CallSideEffect : ~m? -# 2021| mu2021_22(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2021_17 -# 2021| r2021_23(glval) = Convert : r2021_17 -# 2021| r2021_24(TernaryNonPodObj &) = CopyValue : r2021_23 -# 2021| r2021_25(TernaryNonPodObj &) = Call[operator=] : func:r2021_16, this:r2021_15, 0:r2021_24 -# 2021| mu2021_26(unknown) = ^CallSideEffect : ~m? -# 2021| v2021_27(void) = ^IndirectReadSideEffect[-1] : &:r2021_15, ~m? -# 2021| v2021_28(void) = ^BufferReadSideEffect[0] : &:r2021_24, ~m? -# 2021| mu2021_29(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2021_15 -# 2021| r2021_30(glval) = CopyValue : r2021_25 -# 2022| v2022_1(void) = NoOp : -# 2017| v2017_12(void) = ReturnVoid : -# 2017| v2017_13(void) = AliasedUse : ~m? -# 2017| v2017_14(void) = ExitFunction : +# 2023| Block 10 +# 2023| r2023_6(glval) = VariableAddress[#temp2023:10] : +# 2023| r2023_7(glval) = Load[#temp2023:10] : &:r2023_6, ~m? +# 2023| r2023_8(glval) = Convert : r2023_7 +# 2023| r2023_9(TernaryNonPodObj &) = CopyValue : r2023_8 +# 2023| r2023_10(TernaryNonPodObj &) = Call[operator=] : func:r2023_2, this:r2023_1, 0:r2023_9 +# 2023| mu2023_11(unknown) = ^CallSideEffect : ~m? +# 2023| v2023_12(void) = ^IndirectReadSideEffect[-1] : &:r2023_1, ~m? +# 2023| v2023_13(void) = ^BufferReadSideEffect[0] : &:r2023_9, ~m? +# 2023| mu2023_14(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2023_1 +# 2023| r2023_15(glval) = CopyValue : r2023_10 +# 2023| r2023_16(glval) = FunctionAddress[operator=] : +# 2023| r2023_17(glval) = VariableAddress[#temp2023:23] : +# 2023| mu2023_18(TernaryNonPodObj) = Uninitialized[#temp2023:23] : &:r2023_17 +# 2023| r2023_19(glval) = FunctionAddress[TernaryNonPodObj] : +# 2023| v2023_20(void) = Call[TernaryNonPodObj] : func:r2023_19, this:r2023_17 +# 2023| mu2023_21(unknown) = ^CallSideEffect : ~m? +# 2023| mu2023_22(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2023_17 +# 2023| r2023_23(glval) = Convert : r2023_17 +# 2023| r2023_24(TernaryNonPodObj &) = CopyValue : r2023_23 +# 2023| r2023_25(TernaryNonPodObj &) = Call[operator=] : func:r2023_16, this:r2023_15, 0:r2023_24 +# 2023| mu2023_26(unknown) = ^CallSideEffect : ~m? +# 2023| v2023_27(void) = ^IndirectReadSideEffect[-1] : &:r2023_15, ~m? +# 2023| v2023_28(void) = ^BufferReadSideEffect[0] : &:r2023_24, ~m? +# 2023| mu2023_29(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2023_15 +# 2023| r2023_30(glval) = CopyValue : r2023_25 +# 2024| v2024_1(void) = NoOp : +# 2019| v2019_12(void) = ReturnVoid : +# 2019| v2019_13(void) = AliasedUse : ~m? +# 2019| v2019_14(void) = ExitFunction : -# 2021| Block 11 -# 2021| r2021_31(glval) = VariableAddress[x] : -# 2021| r2021_32(glval) = VariableAddress[#temp2021:10] : -# 2021| mu2021_33(glval) = Store[#temp2021:10] : &:r2021_32, r2021_31 +# 2023| Block 11 +# 2023| r2023_31(glval) = VariableAddress[x] : +# 2023| r2023_32(glval) = VariableAddress[#temp2023:10] : +# 2023| mu2023_33(glval) = Store[#temp2023:10] : &:r2023_32, r2023_31 #-----| Goto -> Block 10 -# 2021| Block 12 -# 2021| r2021_34(glval) = VariableAddress[y] : -# 2021| r2021_35(glval) = VariableAddress[#temp2021:10] : -# 2021| mu2021_36(glval) = Store[#temp2021:10] : &:r2021_35, r2021_34 +# 2023| Block 12 +# 2023| r2023_34(glval) = VariableAddress[y] : +# 2023| r2023_35(glval) = VariableAddress[#temp2023:10] : +# 2023| mu2023_36(glval) = Store[#temp2023:10] : &:r2023_35, r2023_34 #-----| Goto -> Block 10 -# 2026| unsigned int CommaTest(unsigned int) -# 2026| Block 0 -# 2026| v2026_1(void) = EnterFunction : -# 2026| mu2026_2(unknown) = AliasedDefinition : -# 2026| mu2026_3(unknown) = InitializeNonLocal : -# 2026| r2026_4(glval) = VariableAddress[x] : -# 2026| mu2026_5(unsigned int) = InitializeParameter[x] : &:r2026_4 -# 2027| r2027_1(glval) = VariableAddress[y] : -# 2027| mu2027_2(unsigned int) = Uninitialized[y] : &:r2027_1 -# 2028| r2028_1(glval) = VariableAddress[x] : -# 2028| r2028_2(unsigned int) = Load[x] : &:r2028_1, ~m? -# 2028| r2028_3(unsigned int) = Constant[100] : -# 2028| r2028_4(bool) = CompareLT : r2028_2, r2028_3 -# 2028| v2028_5(void) = ConditionalBranch : r2028_4 +# 2028| unsigned int CommaTest(unsigned int) +# 2028| Block 0 +# 2028| v2028_1(void) = EnterFunction : +# 2028| mu2028_2(unknown) = AliasedDefinition : +# 2028| mu2028_3(unknown) = InitializeNonLocal : +# 2028| r2028_4(glval) = VariableAddress[x] : +# 2028| mu2028_5(unsigned int) = InitializeParameter[x] : &:r2028_4 +# 2029| r2029_1(glval) = VariableAddress[y] : +# 2029| mu2029_2(unsigned int) = Uninitialized[y] : &:r2029_1 +# 2030| r2030_1(glval) = VariableAddress[x] : +# 2030| r2030_2(unsigned int) = Load[x] : &:r2030_1, ~m? +# 2030| r2030_3(unsigned int) = Constant[100] : +# 2030| r2030_4(bool) = CompareLT : r2030_2, r2030_3 +# 2030| v2030_5(void) = ConditionalBranch : r2030_4 #-----| False -> Block 3 #-----| True -> Block 2 -# 2028| Block 1 -# 2028| r2028_6(glval) = VariableAddress[#temp2028:7] : -# 2028| r2028_7(unsigned int) = Load[#temp2028:7] : &:r2028_6, ~m? -# 2028| r2028_8(glval) = VariableAddress[y] : -# 2028| mu2028_9(unsigned int) = Store[y] : &:r2028_8, r2028_7 -# 2031| r2031_1(glval) = VariableAddress[#return] : -# 2031| mu2031_2(unsigned int) = Uninitialized[#return] : &:r2031_1 -# 2026| r2026_6(glval) = VariableAddress[#return] : -# 2026| v2026_7(void) = ReturnValue : &:r2026_6, ~m? -# 2026| v2026_8(void) = AliasedUse : ~m? -# 2026| v2026_9(void) = ExitFunction : +# 2030| Block 1 +# 2030| r2030_6(glval) = VariableAddress[#temp2030:7] : +# 2030| r2030_7(unsigned int) = Load[#temp2030:7] : &:r2030_6, ~m? +# 2030| r2030_8(glval) = VariableAddress[y] : +# 2030| mu2030_9(unsigned int) = Store[y] : &:r2030_8, r2030_7 +# 2033| r2033_1(glval) = VariableAddress[#return] : +# 2033| mu2033_2(unsigned int) = Uninitialized[#return] : &:r2033_1 +# 2028| r2028_6(glval) = VariableAddress[#return] : +# 2028| v2028_7(void) = ReturnValue : &:r2028_6, ~m? +# 2028| v2028_8(void) = AliasedUse : ~m? +# 2028| v2028_9(void) = ExitFunction : -# 2029| Block 2 -# 2029| r2029_1(glval) = FunctionAddress[CommaTestHelper] : -# 2029| r2029_2(glval) = VariableAddress[x] : -# 2029| r2029_3(unsigned int) = Load[x] : &:r2029_2, ~m? -# 2029| v2029_4(void) = Call[CommaTestHelper] : func:r2029_1, 0:r2029_3 -# 2029| mu2029_5(unknown) = ^CallSideEffect : ~m? -# 2029| r2029_6(glval) = VariableAddress[x] : -# 2029| r2029_7(unsigned int) = Load[x] : &:r2029_6, ~m? -# 2029| r2029_8(unsigned int) = CopyValue : r2029_7 -# 2028| r2028_10(glval) = VariableAddress[#temp2028:7] : -# 2028| mu2028_11(unsigned int) = Store[#temp2028:7] : &:r2028_10, r2029_8 +# 2031| Block 2 +# 2031| r2031_1(glval) = FunctionAddress[CommaTestHelper] : +# 2031| r2031_2(glval) = VariableAddress[x] : +# 2031| r2031_3(unsigned int) = Load[x] : &:r2031_2, ~m? +# 2031| v2031_4(void) = Call[CommaTestHelper] : func:r2031_1, 0:r2031_3 +# 2031| mu2031_5(unknown) = ^CallSideEffect : ~m? +# 2031| r2031_6(glval) = VariableAddress[x] : +# 2031| r2031_7(unsigned int) = Load[x] : &:r2031_6, ~m? +# 2031| r2031_8(unsigned int) = CopyValue : r2031_7 +# 2030| r2030_10(glval) = VariableAddress[#temp2030:7] : +# 2030| mu2030_11(unsigned int) = Store[#temp2030:7] : &:r2030_10, r2031_8 #-----| Goto -> Block 1 -# 2030| Block 3 -# 2030| r2030_1(glval) = FunctionAddress[CommaTestHelper] : -# 2030| r2030_2(glval) = VariableAddress[x] : -# 2030| r2030_3(unsigned int) = Load[x] : &:r2030_2, ~m? -# 2030| v2030_4(void) = Call[CommaTestHelper] : func:r2030_1, 0:r2030_3 -# 2030| mu2030_5(unknown) = ^CallSideEffect : ~m? -# 2030| r2030_6(int) = Constant[10] : -# 2030| r2030_7(int) = CopyValue : r2030_6 -# 2030| r2030_8(unsigned int) = Convert : r2030_7 -# 2028| r2028_12(glval) = VariableAddress[#temp2028:7] : -# 2028| mu2028_13(unsigned int) = Store[#temp2028:7] : &:r2028_12, r2030_8 +# 2032| Block 3 +# 2032| r2032_1(glval) = FunctionAddress[CommaTestHelper] : +# 2032| r2032_2(glval) = VariableAddress[x] : +# 2032| r2032_3(unsigned int) = Load[x] : &:r2032_2, ~m? +# 2032| v2032_4(void) = Call[CommaTestHelper] : func:r2032_1, 0:r2032_3 +# 2032| mu2032_5(unknown) = ^CallSideEffect : ~m? +# 2032| r2032_6(int) = Constant[10] : +# 2032| r2032_7(int) = CopyValue : r2032_6 +# 2032| r2032_8(unsigned int) = Convert : r2032_7 +# 2030| r2030_12(glval) = VariableAddress[#temp2030:7] : +# 2030| mu2030_13(unsigned int) = Store[#temp2030:7] : &:r2030_12, r2032_8 #-----| Goto -> Block 1 -# 2033| void NewDeleteMem() -# 2033| Block 0 -# 2033| v2033_1(void) = EnterFunction : -# 2033| mu2033_2(unknown) = AliasedDefinition : -# 2033| mu2033_3(unknown) = InitializeNonLocal : -# 2034| r2034_1(glval) = VariableAddress[x] : -# 2034| r2034_2(glval) = FunctionAddress[operator new] : -# 2034| r2034_3(unsigned long) = Constant[4] : -# 2034| r2034_4(void *) = Call[operator new] : func:r2034_2, 0:r2034_3 -# 2034| mu2034_5(unknown) = ^CallSideEffect : ~m? -# 2034| mu2034_6(unknown) = ^InitializeDynamicAllocation : &:r2034_4 -# 2034| r2034_7(int *) = Convert : r2034_4 -# 2034| mu2034_8(int *) = Store[x] : &:r2034_1, r2034_7 -# 2035| r2035_1(int) = Constant[6] : -# 2035| r2035_2(glval) = VariableAddress[x] : -# 2035| r2035_3(int *) = Load[x] : &:r2035_2, ~m? -# 2035| r2035_4(glval) = CopyValue : r2035_3 -# 2035| mu2035_5(int) = Store[?] : &:r2035_4, r2035_1 -# 2036| r2036_1(glval) = FunctionAddress[operator delete] : -# 2036| r2036_2(glval) = VariableAddress[x] : -# 2036| r2036_3(int *) = Load[x] : &:r2036_2, ~m? -# 2036| v2036_4(void) = Call[operator delete] : func:r2036_1, 0:r2036_3 +# 2035| void NewDeleteMem() +# 2035| Block 0 +# 2035| v2035_1(void) = EnterFunction : +# 2035| mu2035_2(unknown) = AliasedDefinition : +# 2035| mu2035_3(unknown) = InitializeNonLocal : +# 2036| r2036_1(glval) = VariableAddress[x] : +# 2036| r2036_2(glval) = FunctionAddress[operator new] : +# 2036| r2036_3(unsigned long) = Constant[4] : +# 2036| r2036_4(void *) = Call[operator new] : func:r2036_2, 0:r2036_3 # 2036| mu2036_5(unknown) = ^CallSideEffect : ~m? -# 2037| v2037_1(void) = NoOp : -# 2033| v2033_4(void) = ReturnVoid : -# 2033| v2033_5(void) = AliasedUse : ~m? -# 2033| v2033_6(void) = ExitFunction : +# 2036| mu2036_6(unknown) = ^InitializeDynamicAllocation : &:r2036_4 +# 2036| r2036_7(int *) = Convert : r2036_4 +# 2036| mu2036_8(int *) = Store[x] : &:r2036_1, r2036_7 +# 2037| r2037_1(int) = Constant[6] : +# 2037| r2037_2(glval) = VariableAddress[x] : +# 2037| r2037_3(int *) = Load[x] : &:r2037_2, ~m? +# 2037| r2037_4(glval) = CopyValue : r2037_3 +# 2037| mu2037_5(int) = Store[?] : &:r2037_4, r2037_1 +# 2038| r2038_1(glval) = FunctionAddress[operator delete] : +# 2038| r2038_2(glval) = VariableAddress[x] : +# 2038| r2038_3(int *) = Load[x] : &:r2038_2, ~m? +# 2038| v2038_4(void) = Call[operator delete] : func:r2038_1, 0:r2038_3 +# 2038| mu2038_5(unknown) = ^CallSideEffect : ~m? +# 2039| v2039_1(void) = NoOp : +# 2035| v2035_4(void) = ReturnVoid : +# 2035| v2035_5(void) = AliasedUse : ~m? +# 2035| v2035_6(void) = ExitFunction : -# 2039| void Base2::Base2() -# 2039| Block 0 -# 2039| v2039_1(void) = EnterFunction : -# 2039| mu2039_2(unknown) = AliasedDefinition : -# 2039| mu2039_3(unknown) = InitializeNonLocal : -# 2039| r2039_4(glval) = VariableAddress[#this] : -# 2039| mu2039_5(glval) = InitializeParameter[#this] : &:r2039_4 -# 2039| r2039_6(glval) = Load[#this] : &:r2039_4, ~m? -# 2039| mu2039_7(Base2) = InitializeIndirection[#this] : &:r2039_6 -# 2039| v2039_8(void) = NoOp : -# 2039| v2039_9(void) = ReturnIndirection[#this] : &:r2039_6, ~m? -# 2039| v2039_10(void) = ReturnVoid : -# 2039| v2039_11(void) = AliasedUse : ~m? -# 2039| v2039_12(void) = ExitFunction : - -# 2041| void Base2::operator delete(void*) +# 2041| void Base2::Base2() # 2041| Block 0 -# 2041| v2041_1(void) = EnterFunction : -# 2041| mu2041_2(unknown) = AliasedDefinition : -# 2041| mu2041_3(unknown) = InitializeNonLocal : -# 2041| r2041_4(glval) = VariableAddress[p] : -# 2041| mu2041_5(void *) = InitializeParameter[p] : &:r2041_4 -# 2041| r2041_6(void *) = Load[p] : &:r2041_4, ~m? -# 2041| mu2041_7(unknown) = InitializeIndirection[p] : &:r2041_6 -# 2042| v2042_1(void) = NoOp : -# 2041| v2041_8(void) = ReturnIndirection[p] : &:r2041_6, ~m? -# 2041| v2041_9(void) = ReturnVoid : -# 2041| v2041_10(void) = AliasedUse : ~m? -# 2041| v2041_11(void) = ExitFunction : +# 2041| v2041_1(void) = EnterFunction : +# 2041| mu2041_2(unknown) = AliasedDefinition : +# 2041| mu2041_3(unknown) = InitializeNonLocal : +# 2041| r2041_4(glval) = VariableAddress[#this] : +# 2041| mu2041_5(glval) = InitializeParameter[#this] : &:r2041_4 +# 2041| r2041_6(glval) = Load[#this] : &:r2041_4, ~m? +# 2041| mu2041_7(Base2) = InitializeIndirection[#this] : &:r2041_6 +# 2041| v2041_8(void) = NoOp : +# 2041| v2041_9(void) = ReturnIndirection[#this] : &:r2041_6, ~m? +# 2041| v2041_10(void) = ReturnVoid : +# 2041| v2041_11(void) = AliasedUse : ~m? +# 2041| v2041_12(void) = ExitFunction : -# 2043| void Base2::~Base2() +# 2043| void Base2::operator delete(void*) # 2043| Block 0 -# 2043| v2043_1(void) = EnterFunction : -# 2043| mu2043_2(unknown) = AliasedDefinition : -# 2043| mu2043_3(unknown) = InitializeNonLocal : -# 2043| r2043_4(glval) = VariableAddress[#this] : -# 2043| mu2043_5(glval) = InitializeParameter[#this] : &:r2043_4 -# 2043| r2043_6(glval) = Load[#this] : &:r2043_4, ~m? -# 2043| mu2043_7(Base2) = InitializeIndirection[#this] : &:r2043_6 -# 2043| v2043_8(void) = NoOp : -# 2043| v2043_9(void) = ReturnIndirection[#this] : &:r2043_6, ~m? -# 2043| v2043_10(void) = ReturnVoid : -# 2043| v2043_11(void) = AliasedUse : ~m? -# 2043| v2043_12(void) = ExitFunction : +# 2043| v2043_1(void) = EnterFunction : +# 2043| mu2043_2(unknown) = AliasedDefinition : +# 2043| mu2043_3(unknown) = InitializeNonLocal : +# 2043| r2043_4(glval) = VariableAddress[p] : +# 2043| mu2043_5(void *) = InitializeParameter[p] : &:r2043_4 +# 2043| r2043_6(void *) = Load[p] : &:r2043_4, ~m? +# 2043| mu2043_7(unknown) = InitializeIndirection[p] : &:r2043_6 +# 2044| v2044_1(void) = NoOp : +# 2043| v2043_8(void) = ReturnIndirection[p] : &:r2043_6, ~m? +# 2043| v2043_9(void) = ReturnVoid : +# 2043| v2043_10(void) = AliasedUse : ~m? +# 2043| v2043_11(void) = ExitFunction : -# 2046| void Derived2::Derived2() -# 2046| Block 0 -# 2046| v2046_1(void) = EnterFunction : -# 2046| mu2046_2(unknown) = AliasedDefinition : -# 2046| mu2046_3(unknown) = InitializeNonLocal : -# 2046| r2046_4(glval) = VariableAddress[#this] : -# 2046| mu2046_5(glval) = InitializeParameter[#this] : &:r2046_4 -# 2046| r2046_6(glval) = Load[#this] : &:r2046_4, ~m? -# 2046| mu2046_7(Derived2) = InitializeIndirection[#this] : &:r2046_6 -# 2046| r2046_8(glval) = ConvertToNonVirtualBase[Derived2 : Base2] : mu2046_5 -# 2046| r2046_9(glval) = FunctionAddress[Base2] : -# 2046| v2046_10(void) = Call[Base2] : func:r2046_9, this:r2046_8 -# 2046| mu2046_11(unknown) = ^CallSideEffect : ~m? -# 2046| mu2046_12(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2046_8 -# 2046| v2046_13(void) = NoOp : -# 2046| v2046_14(void) = ReturnIndirection[#this] : &:r2046_6, ~m? -# 2046| v2046_15(void) = ReturnVoid : -# 2046| v2046_16(void) = AliasedUse : ~m? -# 2046| v2046_17(void) = ExitFunction : +# 2045| void Base2::~Base2() +# 2045| Block 0 +# 2045| v2045_1(void) = EnterFunction : +# 2045| mu2045_2(unknown) = AliasedDefinition : +# 2045| mu2045_3(unknown) = InitializeNonLocal : +# 2045| r2045_4(glval) = VariableAddress[#this] : +# 2045| mu2045_5(glval) = InitializeParameter[#this] : &:r2045_4 +# 2045| r2045_6(glval) = Load[#this] : &:r2045_4, ~m? +# 2045| mu2045_7(Base2) = InitializeIndirection[#this] : &:r2045_6 +# 2045| v2045_8(void) = NoOp : +# 2045| v2045_9(void) = ReturnIndirection[#this] : &:r2045_6, ~m? +# 2045| v2045_10(void) = ReturnVoid : +# 2045| v2045_11(void) = AliasedUse : ~m? +# 2045| v2045_12(void) = ExitFunction : -# 2049| void Derived2::~Derived2() -# 2049| Block 0 -# 2049| v2049_1(void) = EnterFunction : -# 2049| mu2049_2(unknown) = AliasedDefinition : -# 2049| mu2049_3(unknown) = InitializeNonLocal : -# 2049| r2049_4(glval) = VariableAddress[#this] : -# 2049| mu2049_5(glval) = InitializeParameter[#this] : &:r2049_4 -# 2049| r2049_6(glval) = Load[#this] : &:r2049_4, ~m? -# 2049| mu2049_7(Derived2) = InitializeIndirection[#this] : &:r2049_6 -# 2049| v2049_8(void) = NoOp : -# 2049| r2049_9(glval) = ConvertToNonVirtualBase[Derived2 : Base2] : mu2049_5 -# 2049| r2049_10(glval) = FunctionAddress[~Base2] : -# 2049| v2049_11(void) = Call[~Base2] : func:r2049_10, this:r2049_9 -# 2049| mu2049_12(unknown) = ^CallSideEffect : ~m? -# 2049| v2049_13(void) = ReturnIndirection[#this] : &:r2049_6, ~m? -# 2049| v2049_14(void) = ReturnVoid : -# 2049| v2049_15(void) = AliasedUse : ~m? -# 2049| v2049_16(void) = ExitFunction : +# 2048| void Derived2::Derived2() +# 2048| Block 0 +# 2048| v2048_1(void) = EnterFunction : +# 2048| mu2048_2(unknown) = AliasedDefinition : +# 2048| mu2048_3(unknown) = InitializeNonLocal : +# 2048| r2048_4(glval) = VariableAddress[#this] : +# 2048| mu2048_5(glval) = InitializeParameter[#this] : &:r2048_4 +# 2048| r2048_6(glval) = Load[#this] : &:r2048_4, ~m? +# 2048| mu2048_7(Derived2) = InitializeIndirection[#this] : &:r2048_6 +# 2048| r2048_8(glval) = ConvertToNonVirtualBase[Derived2 : Base2] : mu2048_5 +# 2048| r2048_9(glval) = FunctionAddress[Base2] : +# 2048| v2048_10(void) = Call[Base2] : func:r2048_9, this:r2048_8 +# 2048| mu2048_11(unknown) = ^CallSideEffect : ~m? +# 2048| mu2048_12(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2048_8 +# 2048| v2048_13(void) = NoOp : +# 2048| v2048_14(void) = ReturnIndirection[#this] : &:r2048_6, ~m? +# 2048| v2048_15(void) = ReturnVoid : +# 2048| v2048_16(void) = AliasedUse : ~m? +# 2048| v2048_17(void) = ExitFunction : -# 2051| void Derived2::operator delete(void*) +# 2051| void Derived2::~Derived2() # 2051| Block 0 -# 2051| v2051_1(void) = EnterFunction : -# 2051| mu2051_2(unknown) = AliasedDefinition : -# 2051| mu2051_3(unknown) = InitializeNonLocal : -# 2051| r2051_4(glval) = VariableAddress[p] : -# 2051| mu2051_5(void *) = InitializeParameter[p] : &:r2051_4 -# 2051| r2051_6(void *) = Load[p] : &:r2051_4, ~m? -# 2051| mu2051_7(unknown) = InitializeIndirection[p] : &:r2051_6 -# 2052| v2052_1(void) = NoOp : -# 2051| v2051_8(void) = ReturnIndirection[p] : &:r2051_6, ~m? -# 2051| v2051_9(void) = ReturnVoid : -# 2051| v2051_10(void) = AliasedUse : ~m? -# 2051| v2051_11(void) = ExitFunction : +# 2051| v2051_1(void) = EnterFunction : +# 2051| mu2051_2(unknown) = AliasedDefinition : +# 2051| mu2051_3(unknown) = InitializeNonLocal : +# 2051| r2051_4(glval) = VariableAddress[#this] : +# 2051| mu2051_5(glval) = InitializeParameter[#this] : &:r2051_4 +# 2051| r2051_6(glval) = Load[#this] : &:r2051_4, ~m? +# 2051| mu2051_7(Derived2) = InitializeIndirection[#this] : &:r2051_6 +# 2051| v2051_8(void) = NoOp : +# 2051| r2051_9(glval) = ConvertToNonVirtualBase[Derived2 : Base2] : mu2051_5 +# 2051| r2051_10(glval) = FunctionAddress[~Base2] : +# 2051| v2051_11(void) = Call[~Base2] : func:r2051_10, this:r2051_9 +# 2051| mu2051_12(unknown) = ^CallSideEffect : ~m? +# 2051| v2051_13(void) = ReturnIndirection[#this] : &:r2051_6, ~m? +# 2051| v2051_14(void) = ReturnVoid : +# 2051| v2051_15(void) = AliasedUse : ~m? +# 2051| v2051_16(void) = ExitFunction : -# 2056| int virtual_delete() -# 2056| Block 0 -# 2056| v2056_1(void) = EnterFunction : -# 2056| mu2056_2(unknown) = AliasedDefinition : -# 2056| mu2056_3(unknown) = InitializeNonLocal : -# 2058| r2058_1(glval) = VariableAddress[b1] : -# 2058| r2058_2(glval) = FunctionAddress[operator new] : -# 2058| r2058_3(unsigned long) = Constant[8] : -# 2058| r2058_4(void *) = Call[operator new] : func:r2058_2, 0:r2058_3 -# 2058| mu2058_5(unknown) = ^CallSideEffect : ~m? -# 2058| mu2058_6(unknown) = ^InitializeDynamicAllocation : &:r2058_4 -# 2058| r2058_7(Base2 *) = Convert : r2058_4 -# 2058| r2058_8(glval) = FunctionAddress[Base2] : -# 2058| v2058_9(void) = Call[Base2] : func:r2058_8, this:r2058_7 -# 2058| mu2058_10(unknown) = ^CallSideEffect : ~m? -# 2058| mu2058_11(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2058_7 -# 2058| mu2058_12(Base2 *) = Store[b1] : &:r2058_1, r2058_7 -# 2059| r2059_1(glval) = VirtualDeleteFunctionAddress : -# 2059| r2059_2(glval) = VariableAddress[b1] : -# 2059| r2059_3(Base2 *) = Load[b1] : &:r2059_2, ~m? -# 2059| v2059_4(void) = Call[?] : func:r2059_1, 0:r2059_3 -# 2059| mu2059_5(unknown) = ^CallSideEffect : ~m? -# 2061| r2061_1(glval) = VariableAddress[b2] : -# 2061| r2061_2(glval) = FunctionAddress[operator new] : -# 2061| r2061_3(unsigned long) = Constant[16] : -# 2061| r2061_4(void *) = Call[operator new] : func:r2061_2, 0:r2061_3 +# 2053| void Derived2::operator delete(void*) +# 2053| Block 0 +# 2053| v2053_1(void) = EnterFunction : +# 2053| mu2053_2(unknown) = AliasedDefinition : +# 2053| mu2053_3(unknown) = InitializeNonLocal : +# 2053| r2053_4(glval) = VariableAddress[p] : +# 2053| mu2053_5(void *) = InitializeParameter[p] : &:r2053_4 +# 2053| r2053_6(void *) = Load[p] : &:r2053_4, ~m? +# 2053| mu2053_7(unknown) = InitializeIndirection[p] : &:r2053_6 +# 2054| v2054_1(void) = NoOp : +# 2053| v2053_8(void) = ReturnIndirection[p] : &:r2053_6, ~m? +# 2053| v2053_9(void) = ReturnVoid : +# 2053| v2053_10(void) = AliasedUse : ~m? +# 2053| v2053_11(void) = ExitFunction : + +# 2058| int virtual_delete() +# 2058| Block 0 +# 2058| v2058_1(void) = EnterFunction : +# 2058| mu2058_2(unknown) = AliasedDefinition : +# 2058| mu2058_3(unknown) = InitializeNonLocal : +# 2060| r2060_1(glval) = VariableAddress[b1] : +# 2060| r2060_2(glval) = FunctionAddress[operator new] : +# 2060| r2060_3(unsigned long) = Constant[8] : +# 2060| r2060_4(void *) = Call[operator new] : func:r2060_2, 0:r2060_3 +# 2060| mu2060_5(unknown) = ^CallSideEffect : ~m? +# 2060| mu2060_6(unknown) = ^InitializeDynamicAllocation : &:r2060_4 +# 2060| r2060_7(Base2 *) = Convert : r2060_4 +# 2060| r2060_8(glval) = FunctionAddress[Base2] : +# 2060| v2060_9(void) = Call[Base2] : func:r2060_8, this:r2060_7 +# 2060| mu2060_10(unknown) = ^CallSideEffect : ~m? +# 2060| mu2060_11(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2060_7 +# 2060| mu2060_12(Base2 *) = Store[b1] : &:r2060_1, r2060_7 +# 2061| r2061_1(glval) = VirtualDeleteFunctionAddress : +# 2061| r2061_2(glval) = VariableAddress[b1] : +# 2061| r2061_3(Base2 *) = Load[b1] : &:r2061_2, ~m? +# 2061| v2061_4(void) = Call[?] : func:r2061_1, 0:r2061_3 # 2061| mu2061_5(unknown) = ^CallSideEffect : ~m? -# 2061| mu2061_6(unknown) = ^InitializeDynamicAllocation : &:r2061_4 -# 2061| r2061_7(Derived2 *) = Convert : r2061_4 -# 2061| r2061_8(glval) = FunctionAddress[Derived2] : -# 2061| v2061_9(void) = Call[Derived2] : func:r2061_8, this:r2061_7 -# 2061| mu2061_10(unknown) = ^CallSideEffect : ~m? -# 2061| mu2061_11(Derived2) = ^IndirectMayWriteSideEffect[-1] : &:r2061_7 -# 2061| r2061_12(Base2 *) = ConvertToNonVirtualBase[Derived2 : Base2] : r2061_7 -# 2061| mu2061_13(Base2 *) = Store[b2] : &:r2061_1, r2061_12 -# 2062| r2062_1(glval) = VirtualDeleteFunctionAddress : -# 2062| r2062_2(glval) = VariableAddress[b2] : -# 2062| r2062_3(Base2 *) = Load[b2] : &:r2062_2, ~m? -# 2062| v2062_4(void) = Call[?] : func:r2062_1, 0:r2062_3 -# 2062| mu2062_5(unknown) = ^CallSideEffect : ~m? -# 2064| r2064_1(glval) = VariableAddress[d] : -# 2064| r2064_2(glval) = FunctionAddress[operator new] : -# 2064| r2064_3(unsigned long) = Constant[16] : -# 2064| r2064_4(void *) = Call[operator new] : func:r2064_2, 0:r2064_3 +# 2063| r2063_1(glval) = VariableAddress[b2] : +# 2063| r2063_2(glval) = FunctionAddress[operator new] : +# 2063| r2063_3(unsigned long) = Constant[16] : +# 2063| r2063_4(void *) = Call[operator new] : func:r2063_2, 0:r2063_3 +# 2063| mu2063_5(unknown) = ^CallSideEffect : ~m? +# 2063| mu2063_6(unknown) = ^InitializeDynamicAllocation : &:r2063_4 +# 2063| r2063_7(Derived2 *) = Convert : r2063_4 +# 2063| r2063_8(glval) = FunctionAddress[Derived2] : +# 2063| v2063_9(void) = Call[Derived2] : func:r2063_8, this:r2063_7 +# 2063| mu2063_10(unknown) = ^CallSideEffect : ~m? +# 2063| mu2063_11(Derived2) = ^IndirectMayWriteSideEffect[-1] : &:r2063_7 +# 2063| r2063_12(Base2 *) = ConvertToNonVirtualBase[Derived2 : Base2] : r2063_7 +# 2063| mu2063_13(Base2 *) = Store[b2] : &:r2063_1, r2063_12 +# 2064| r2064_1(glval) = VirtualDeleteFunctionAddress : +# 2064| r2064_2(glval) = VariableAddress[b2] : +# 2064| r2064_3(Base2 *) = Load[b2] : &:r2064_2, ~m? +# 2064| v2064_4(void) = Call[?] : func:r2064_1, 0:r2064_3 # 2064| mu2064_5(unknown) = ^CallSideEffect : ~m? -# 2064| mu2064_6(unknown) = ^InitializeDynamicAllocation : &:r2064_4 -# 2064| r2064_7(Derived2 *) = Convert : r2064_4 -# 2064| r2064_8(glval) = FunctionAddress[Derived2] : -# 2064| v2064_9(void) = Call[Derived2] : func:r2064_8, this:r2064_7 -# 2064| mu2064_10(unknown) = ^CallSideEffect : ~m? -# 2064| mu2064_11(Derived2) = ^IndirectMayWriteSideEffect[-1] : &:r2064_7 -# 2064| mu2064_12(Derived2 *) = Store[d] : &:r2064_1, r2064_7 -# 2065| r2065_1(glval) = VirtualDeleteFunctionAddress : -# 2065| r2065_2(glval) = VariableAddress[d] : -# 2065| r2065_3(Derived2 *) = Load[d] : &:r2065_2, ~m? -# 2065| v2065_4(void) = Call[?] : func:r2065_1, 0:r2065_3 -# 2065| mu2065_5(unknown) = ^CallSideEffect : ~m? -# 2066| r2066_1(glval) = VariableAddress[#return] : -# 2066| mu2066_2(int) = Uninitialized[#return] : &:r2066_1 -# 2056| r2056_4(glval) = VariableAddress[#return] : -# 2056| v2056_5(void) = ReturnValue : &:r2056_4, ~m? -# 2056| v2056_6(void) = AliasedUse : ~m? -# 2056| v2056_7(void) = ExitFunction : +# 2066| r2066_1(glval) = VariableAddress[d] : +# 2066| r2066_2(glval) = FunctionAddress[operator new] : +# 2066| r2066_3(unsigned long) = Constant[16] : +# 2066| r2066_4(void *) = Call[operator new] : func:r2066_2, 0:r2066_3 +# 2066| mu2066_5(unknown) = ^CallSideEffect : ~m? +# 2066| mu2066_6(unknown) = ^InitializeDynamicAllocation : &:r2066_4 +# 2066| r2066_7(Derived2 *) = Convert : r2066_4 +# 2066| r2066_8(glval) = FunctionAddress[Derived2] : +# 2066| v2066_9(void) = Call[Derived2] : func:r2066_8, this:r2066_7 +# 2066| mu2066_10(unknown) = ^CallSideEffect : ~m? +# 2066| mu2066_11(Derived2) = ^IndirectMayWriteSideEffect[-1] : &:r2066_7 +# 2066| mu2066_12(Derived2 *) = Store[d] : &:r2066_1, r2066_7 +# 2067| r2067_1(glval) = VirtualDeleteFunctionAddress : +# 2067| r2067_2(glval) = VariableAddress[d] : +# 2067| r2067_3(Derived2 *) = Load[d] : &:r2067_2, ~m? +# 2067| v2067_4(void) = Call[?] : func:r2067_1, 0:r2067_3 +# 2067| mu2067_5(unknown) = ^CallSideEffect : ~m? +# 2068| r2068_1(glval) = VariableAddress[#return] : +# 2068| mu2068_2(int) = Uninitialized[#return] : &:r2068_1 +# 2058| r2058_4(glval) = VariableAddress[#return] : +# 2058| v2058_5(void) = ReturnValue : &:r2058_4, ~m? +# 2058| v2058_6(void) = AliasedUse : ~m? +# 2058| v2058_7(void) = ExitFunction : -# 2070| void test_constant_folding() -# 2070| Block 0 -# 2070| v2070_1(void) = EnterFunction : -# 2070| mu2070_2(unknown) = AliasedDefinition : -# 2070| mu2070_3(unknown) = InitializeNonLocal : -# 2071| r2071_1(glval) = VariableAddress[x] : -# 2071| r2071_2(int) = Constant[116] : -# 2071| mu2071_3(int) = Store[x] : &:r2071_1, r2071_2 -# 2072| r2072_1(glval) = FunctionAddress[test_constant_folding_use] : -# 2072| r2072_2(int) = Constant[116] : -# 2072| v2072_3(void) = Call[test_constant_folding_use] : func:r2072_1, 0:r2072_2 -# 2072| mu2072_4(unknown) = ^CallSideEffect : ~m? -# 2073| v2073_1(void) = NoOp : -# 2070| v2070_4(void) = ReturnVoid : -# 2070| v2070_5(void) = AliasedUse : ~m? -# 2070| v2070_6(void) = ExitFunction : +# 2072| void test_constant_folding() +# 2072| Block 0 +# 2072| v2072_1(void) = EnterFunction : +# 2072| mu2072_2(unknown) = AliasedDefinition : +# 2072| mu2072_3(unknown) = InitializeNonLocal : +# 2073| r2073_1(glval) = VariableAddress[x] : +# 2073| r2073_2(int) = Constant[116] : +# 2073| mu2073_3(int) = Store[x] : &:r2073_1, r2073_2 +# 2074| r2074_1(glval) = FunctionAddress[test_constant_folding_use] : +# 2074| r2074_2(int) = Constant[116] : +# 2074| v2074_3(void) = Call[test_constant_folding_use] : func:r2074_1, 0:r2074_2 +# 2074| mu2074_4(unknown) = ^CallSideEffect : ~m? +# 2075| v2075_1(void) = NoOp : +# 2072| v2072_4(void) = ReturnVoid : +# 2072| v2072_5(void) = AliasedUse : ~m? +# 2072| v2072_6(void) = ExitFunction : -# 2077| int NonExit() -# 2077| Block 0 -# 2077| v2077_1(void) = EnterFunction : -# 2077| mu2077_2(unknown) = AliasedDefinition : -# 2077| mu2077_3(unknown) = InitializeNonLocal : -# 2078| r2078_1(glval) = VariableAddress[x] : -# 2078| r2078_2(glval) = FunctionAddress[Add] : -# 2078| r2078_3(int) = Constant[3] : -# 2078| r2078_4(int) = Constant[4] : -# 2078| r2078_5(int) = Call[Add] : func:r2078_2, 0:r2078_3, 1:r2078_4 -# 2078| mu2078_6(unknown) = ^CallSideEffect : ~m? -# 2078| mu2078_7(int) = Store[x] : &:r2078_1, r2078_5 -# 2079| r2079_1(glval) = VariableAddress[x] : -# 2079| r2079_2(int) = Load[x] : &:r2079_1, ~m? -# 2079| r2079_3(int) = Constant[7] : -# 2079| r2079_4(bool) = CompareEQ : r2079_2, r2079_3 -# 2079| v2079_5(void) = ConditionalBranch : r2079_4 +# 2079| int NonExit() +# 2079| Block 0 +# 2079| v2079_1(void) = EnterFunction : +# 2079| mu2079_2(unknown) = AliasedDefinition : +# 2079| mu2079_3(unknown) = InitializeNonLocal : +# 2080| r2080_1(glval) = VariableAddress[x] : +# 2080| r2080_2(glval) = FunctionAddress[Add] : +# 2080| r2080_3(int) = Constant[3] : +# 2080| r2080_4(int) = Constant[4] : +# 2080| r2080_5(int) = Call[Add] : func:r2080_2, 0:r2080_3, 1:r2080_4 +# 2080| mu2080_6(unknown) = ^CallSideEffect : ~m? +# 2080| mu2080_7(int) = Store[x] : &:r2080_1, r2080_5 +# 2081| r2081_1(glval) = VariableAddress[x] : +# 2081| r2081_2(int) = Load[x] : &:r2081_1, ~m? +# 2081| r2081_3(int) = Constant[7] : +# 2081| r2081_4(bool) = CompareEQ : r2081_2, r2081_3 +# 2081| v2081_5(void) = ConditionalBranch : r2081_4 #-----| False -> Block 2 #-----| True -> Block 1 -# 2080| Block 1 -# 2080| r2080_1(glval) = FunctionAddress[exit] : -# 2080| r2080_2(int) = Constant[3] : -# 2080| v2080_3(void) = Call[exit] : func:r2080_1, 0:r2080_2 -# 2080| mu2080_4(unknown) = ^CallSideEffect : ~m? -# 2077| v2077_4(void) = Unreached : +# 2082| Block 1 +# 2082| r2082_1(glval) = FunctionAddress[exit] : +# 2082| r2082_2(int) = Constant[3] : +# 2082| v2082_3(void) = Call[exit] : func:r2082_1, 0:r2082_2 +# 2082| mu2082_4(unknown) = ^CallSideEffect : ~m? +# 2079| v2079_4(void) = Unreached : -# 2081| Block 2 -# 2081| r2081_1(glval) = FunctionAddress[VoidFunc] : -# 2081| v2081_2(void) = Call[VoidFunc] : func:r2081_1 -# 2081| mu2081_3(unknown) = ^CallSideEffect : ~m? -# 2082| r2082_1(glval) = VariableAddress[#return] : -# 2082| r2082_2(glval) = VariableAddress[x] : -# 2082| r2082_3(int) = Load[x] : &:r2082_2, ~m? -# 2082| mu2082_4(int) = Store[#return] : &:r2082_1, r2082_3 -# 2077| r2077_5(glval) = VariableAddress[#return] : -# 2077| v2077_6(void) = ReturnValue : &:r2077_5, ~m? -# 2077| v2077_7(void) = AliasedUse : ~m? -# 2077| v2077_8(void) = ExitFunction : +# 2083| Block 2 +# 2083| r2083_1(glval) = FunctionAddress[VoidFunc] : +# 2083| v2083_2(void) = Call[VoidFunc] : func:r2083_1 +# 2083| mu2083_3(unknown) = ^CallSideEffect : ~m? +# 2084| r2084_1(glval) = VariableAddress[#return] : +# 2084| r2084_2(glval) = VariableAddress[x] : +# 2084| r2084_3(int) = Load[x] : &:r2084_2, ~m? +# 2084| mu2084_4(int) = Store[#return] : &:r2084_1, r2084_3 +# 2079| r2079_5(glval) = VariableAddress[#return] : +# 2079| v2079_6(void) = ReturnValue : &:r2079_5, ~m? +# 2079| v2079_7(void) = AliasedUse : ~m? +# 2079| v2079_8(void) = ExitFunction : -# 2085| void CallsNonExit() -# 2085| Block 0 -# 2085| v2085_1(void) = EnterFunction : -# 2085| mu2085_2(unknown) = AliasedDefinition : -# 2085| mu2085_3(unknown) = InitializeNonLocal : -# 2086| r2086_1(glval) = FunctionAddress[VoidFunc] : -# 2086| v2086_2(void) = Call[VoidFunc] : func:r2086_1 -# 2086| mu2086_3(unknown) = ^CallSideEffect : ~m? -# 2087| r2087_1(glval) = FunctionAddress[exit] : -# 2087| r2087_2(int) = Constant[3] : -# 2087| v2087_3(void) = Call[exit] : func:r2087_1, 0:r2087_2 -# 2087| mu2087_4(unknown) = ^CallSideEffect : ~m? -# 2085| v2085_4(void) = Unreached : +# 2087| void CallsNonExit() +# 2087| Block 0 +# 2087| v2087_1(void) = EnterFunction : +# 2087| mu2087_2(unknown) = AliasedDefinition : +# 2087| mu2087_3(unknown) = InitializeNonLocal : +# 2088| r2088_1(glval) = FunctionAddress[VoidFunc] : +# 2088| v2088_2(void) = Call[VoidFunc] : func:r2088_1 +# 2088| mu2088_3(unknown) = ^CallSideEffect : ~m? +# 2089| r2089_1(glval) = FunctionAddress[exit] : +# 2089| r2089_2(int) = Constant[3] : +# 2089| v2089_3(void) = Call[exit] : func:r2089_1, 0:r2089_2 +# 2089| mu2089_4(unknown) = ^CallSideEffect : ~m? +# 2087| v2087_4(void) = Unreached : -# 2088| Block 1 -# 2088| v2088_1(void) = NoOp : -# 2085| v2085_5(void) = ReturnVoid : -# 2085| v2085_6(void) = AliasedUse : ~m? -# 2085| v2085_7(void) = ExitFunction : +# 2090| Block 1 +# 2090| v2090_1(void) = NoOp : +# 2087| v2087_5(void) = ReturnVoid : +# 2087| v2087_6(void) = AliasedUse : ~m? +# 2087| v2087_7(void) = ExitFunction : -# 2090| int TransNonExit() -# 2090| Block 0 -# 2090| v2090_1(void) = EnterFunction : -# 2090| mu2090_2(unknown) = AliasedDefinition : -# 2090| mu2090_3(unknown) = InitializeNonLocal : -# 2091| r2091_1(glval) = VariableAddress[x] : -# 2091| r2091_2(glval) = FunctionAddress[Add] : -# 2091| r2091_3(int) = Constant[3] : -# 2091| r2091_4(int) = Constant[4] : -# 2091| r2091_5(int) = Call[Add] : func:r2091_2, 0:r2091_3, 1:r2091_4 -# 2091| mu2091_6(unknown) = ^CallSideEffect : ~m? -# 2091| mu2091_7(int) = Store[x] : &:r2091_1, r2091_5 -# 2092| r2092_1(glval) = VariableAddress[x] : -# 2092| r2092_2(int) = Load[x] : &:r2092_1, ~m? -# 2092| r2092_3(int) = Constant[7] : -# 2092| r2092_4(bool) = CompareEQ : r2092_2, r2092_3 -# 2092| v2092_5(void) = ConditionalBranch : r2092_4 +# 2092| int TransNonExit() +# 2092| Block 0 +# 2092| v2092_1(void) = EnterFunction : +# 2092| mu2092_2(unknown) = AliasedDefinition : +# 2092| mu2092_3(unknown) = InitializeNonLocal : +# 2093| r2093_1(glval) = VariableAddress[x] : +# 2093| r2093_2(glval) = FunctionAddress[Add] : +# 2093| r2093_3(int) = Constant[3] : +# 2093| r2093_4(int) = Constant[4] : +# 2093| r2093_5(int) = Call[Add] : func:r2093_2, 0:r2093_3, 1:r2093_4 +# 2093| mu2093_6(unknown) = ^CallSideEffect : ~m? +# 2093| mu2093_7(int) = Store[x] : &:r2093_1, r2093_5 +# 2094| r2094_1(glval) = VariableAddress[x] : +# 2094| r2094_2(int) = Load[x] : &:r2094_1, ~m? +# 2094| r2094_3(int) = Constant[7] : +# 2094| r2094_4(bool) = CompareEQ : r2094_2, r2094_3 +# 2094| v2094_5(void) = ConditionalBranch : r2094_4 #-----| False -> Block 2 #-----| True -> Block 1 -# 2093| Block 1 -# 2093| r2093_1(glval) = FunctionAddress[CallsNonExit] : -# 2093| v2093_2(void) = Call[CallsNonExit] : func:r2093_1 -# 2093| mu2093_3(unknown) = ^CallSideEffect : ~m? +# 2095| Block 1 +# 2095| r2095_1(glval) = FunctionAddress[CallsNonExit] : +# 2095| v2095_2(void) = Call[CallsNonExit] : func:r2095_1 +# 2095| mu2095_3(unknown) = ^CallSideEffect : ~m? #-----| Goto -> Block 2 -# 2094| Block 2 -# 2094| r2094_1(glval) = FunctionAddress[VoidFunc] : -# 2094| v2094_2(void) = Call[VoidFunc] : func:r2094_1 -# 2094| mu2094_3(unknown) = ^CallSideEffect : ~m? -# 2095| r2095_1(glval) = VariableAddress[#return] : -# 2095| r2095_2(glval) = VariableAddress[x] : -# 2095| r2095_3(int) = Load[x] : &:r2095_2, ~m? -# 2095| mu2095_4(int) = Store[#return] : &:r2095_1, r2095_3 -# 2090| r2090_4(glval) = VariableAddress[#return] : -# 2090| v2090_5(void) = ReturnValue : &:r2090_4, ~m? -# 2090| v2090_6(void) = AliasedUse : ~m? -# 2090| v2090_7(void) = ExitFunction : +# 2096| Block 2 +# 2096| r2096_1(glval) = FunctionAddress[VoidFunc] : +# 2096| v2096_2(void) = Call[VoidFunc] : func:r2096_1 +# 2096| mu2096_3(unknown) = ^CallSideEffect : ~m? +# 2097| r2097_1(glval) = VariableAddress[#return] : +# 2097| r2097_2(glval) = VariableAddress[x] : +# 2097| r2097_3(int) = Load[x] : &:r2097_2, ~m? +# 2097| mu2097_4(int) = Store[#return] : &:r2097_1, r2097_3 +# 2092| r2092_4(glval) = VariableAddress[#return] : +# 2092| v2092_5(void) = ReturnValue : &:r2092_4, ~m? +# 2092| v2092_6(void) = AliasedUse : ~m? +# 2092| v2092_7(void) = ExitFunction : -# 2098| void newArrayCorrectType(size_t) -# 2098| Block 0 -# 2098| v2098_1(void) = EnterFunction : -# 2098| mu2098_2(unknown) = AliasedDefinition : -# 2098| mu2098_3(unknown) = InitializeNonLocal : -# 2098| r2098_4(glval) = VariableAddress[n] : -# 2098| mu2098_5(unsigned long) = InitializeParameter[n] : &:r2098_4 -# 2099| r2099_1(glval) = FunctionAddress[operator new[]] : -# 2099| r2099_2(glval) = VariableAddress[n] : -# 2099| r2099_3(unsigned long) = Load[n] : &:r2099_2, ~m? -# 2099| r2099_4(unsigned long) = Constant[4] : -# 2099| r2099_5(unsigned long) = Mul : r2099_3, r2099_4 -# 2099| r2099_6(void *) = Call[operator new[]] : func:r2099_1, 0:r2099_5 -# 2099| mu2099_7(unknown) = ^CallSideEffect : ~m? -# 2099| mu2099_8(unknown) = ^InitializeDynamicAllocation : &:r2099_6 -# 2099| r2099_9(int *) = Convert : r2099_6 -# 2100| r2100_1(glval) = FunctionAddress[operator new[]] : -# 2100| r2100_2(glval) = VariableAddress[n] : -# 2100| r2100_3(unsigned long) = Load[n] : &:r2100_2, ~m? -# 2100| r2100_4(unsigned long) = Constant[4] : -# 2100| r2100_5(unsigned long) = Mul : r2100_3, r2100_4 -# 2100| r2100_6(float) = Constant[1.0] : -# 2100| r2100_7(void *) = Call[operator new[]] : func:r2100_1, 0:r2100_5, 1:r2100_6 -# 2100| mu2100_8(unknown) = ^CallSideEffect : ~m? -# 2100| mu2100_9(unknown) = ^InitializeDynamicAllocation : &:r2100_7 -# 2100| r2100_10(int *) = Convert : r2100_7 +# 2100| void newArrayCorrectType(size_t) +# 2100| Block 0 +# 2100| v2100_1(void) = EnterFunction : +# 2100| mu2100_2(unknown) = AliasedDefinition : +# 2100| mu2100_3(unknown) = InitializeNonLocal : +# 2100| r2100_4(glval) = VariableAddress[n] : +# 2100| mu2100_5(unsigned long) = InitializeParameter[n] : &:r2100_4 # 2101| r2101_1(glval) = FunctionAddress[operator new[]] : # 2101| r2101_2(glval) = VariableAddress[n] : # 2101| r2101_3(unsigned long) = Load[n] : &:r2101_2, ~m? -# 2101| r2101_4(unsigned long) = Constant[8] : +# 2101| r2101_4(unsigned long) = Constant[4] : # 2101| r2101_5(unsigned long) = Mul : r2101_3, r2101_4 # 2101| r2101_6(void *) = Call[operator new[]] : func:r2101_1, 0:r2101_5 # 2101| mu2101_7(unknown) = ^CallSideEffect : ~m? # 2101| mu2101_8(unknown) = ^InitializeDynamicAllocation : &:r2101_6 -# 2101| r2101_9(String *) = Convert : r2101_6 +# 2101| r2101_9(int *) = Convert : r2101_6 # 2102| r2102_1(glval) = FunctionAddress[operator new[]] : # 2102| r2102_2(glval) = VariableAddress[n] : # 2102| r2102_3(unsigned long) = Load[n] : &:r2102_2, ~m? -# 2102| r2102_4(unsigned long) = Constant[256] : +# 2102| r2102_4(unsigned long) = Constant[4] : # 2102| r2102_5(unsigned long) = Mul : r2102_3, r2102_4 -# 2102| r2102_6(align_val_t) = Constant[128] : +# 2102| r2102_6(float) = Constant[1.0] : # 2102| r2102_7(void *) = Call[operator new[]] : func:r2102_1, 0:r2102_5, 1:r2102_6 # 2102| mu2102_8(unknown) = ^CallSideEffect : ~m? # 2102| mu2102_9(unknown) = ^InitializeDynamicAllocation : &:r2102_7 -# 2102| r2102_10(Overaligned *) = Convert : r2102_7 +# 2102| r2102_10(int *) = Convert : r2102_7 # 2103| r2103_1(glval) = FunctionAddress[operator new[]] : # 2103| r2103_2(glval) = VariableAddress[n] : # 2103| r2103_3(unsigned long) = Load[n] : &:r2103_2, ~m? -# 2103| r2103_4(unsigned long) = Constant[1] : +# 2103| r2103_4(unsigned long) = Constant[8] : # 2103| r2103_5(unsigned long) = Mul : r2103_3, r2103_4 # 2103| r2103_6(void *) = Call[operator new[]] : func:r2103_1, 0:r2103_5 # 2103| mu2103_7(unknown) = ^CallSideEffect : ~m? # 2103| mu2103_8(unknown) = ^InitializeDynamicAllocation : &:r2103_6 -# 2103| r2103_9(DefaultCtorWithDefaultParam *) = Convert : r2103_6 +# 2103| r2103_9(String *) = Convert : r2103_6 # 2104| r2104_1(glval) = FunctionAddress[operator new[]] : # 2104| r2104_2(glval) = VariableAddress[n] : # 2104| r2104_3(unsigned long) = Load[n] : &:r2104_2, ~m? -# 2104| r2104_4(unsigned long) = Constant[4] : +# 2104| r2104_4(unsigned long) = Constant[256] : # 2104| r2104_5(unsigned long) = Mul : r2104_3, r2104_4 -# 2104| r2104_6(void *) = Call[operator new[]] : func:r2104_1, 0:r2104_5 -# 2104| mu2104_7(unknown) = ^CallSideEffect : ~m? -# 2104| mu2104_8(unknown) = ^InitializeDynamicAllocation : &:r2104_6 -# 2104| r2104_9(int *) = Convert : r2104_6 -# 2105| v2105_1(void) = NoOp : -# 2098| v2098_6(void) = ReturnVoid : -# 2098| v2098_7(void) = AliasedUse : ~m? -# 2098| v2098_8(void) = ExitFunction : +# 2104| r2104_6(align_val_t) = Constant[128] : +# 2104| r2104_7(void *) = Call[operator new[]] : func:r2104_1, 0:r2104_5, 1:r2104_6 +# 2104| mu2104_8(unknown) = ^CallSideEffect : ~m? +# 2104| mu2104_9(unknown) = ^InitializeDynamicAllocation : &:r2104_7 +# 2104| r2104_10(Overaligned *) = Convert : r2104_7 +# 2105| r2105_1(glval) = FunctionAddress[operator new[]] : +# 2105| r2105_2(glval) = VariableAddress[n] : +# 2105| r2105_3(unsigned long) = Load[n] : &:r2105_2, ~m? +# 2105| r2105_4(unsigned long) = Constant[1] : +# 2105| r2105_5(unsigned long) = Mul : r2105_3, r2105_4 +# 2105| r2105_6(void *) = Call[operator new[]] : func:r2105_1, 0:r2105_5 +# 2105| mu2105_7(unknown) = ^CallSideEffect : ~m? +# 2105| mu2105_8(unknown) = ^InitializeDynamicAllocation : &:r2105_6 +# 2105| r2105_9(DefaultCtorWithDefaultParam *) = Convert : r2105_6 +# 2106| r2106_1(glval) = FunctionAddress[operator new[]] : +# 2106| r2106_2(glval) = VariableAddress[n] : +# 2106| r2106_3(unsigned long) = Load[n] : &:r2106_2, ~m? +# 2106| r2106_4(unsigned long) = Constant[4] : +# 2106| r2106_5(unsigned long) = Mul : r2106_3, r2106_4 +# 2106| r2106_6(void *) = Call[operator new[]] : func:r2106_1, 0:r2106_5 +# 2106| mu2106_7(unknown) = ^CallSideEffect : ~m? +# 2106| mu2106_8(unknown) = ^InitializeDynamicAllocation : &:r2106_6 +# 2106| r2106_9(int *) = Convert : r2106_6 +# 2107| v2107_1(void) = NoOp : +# 2100| v2100_6(void) = ReturnVoid : +# 2100| v2100_7(void) = AliasedUse : ~m? +# 2100| v2100_8(void) = ExitFunction : -# 2109| char* test_strtod(char*) -# 2109| Block 0 -# 2109| v2109_1(void) = EnterFunction : -# 2109| mu2109_2(unknown) = AliasedDefinition : -# 2109| mu2109_3(unknown) = InitializeNonLocal : -# 2109| r2109_4(glval) = VariableAddress[s] : -# 2109| mu2109_5(char *) = InitializeParameter[s] : &:r2109_4 -# 2109| r2109_6(char *) = Load[s] : &:r2109_4, ~m? -# 2109| mu2109_7(unknown) = InitializeIndirection[s] : &:r2109_6 -# 2110| r2110_1(glval) = VariableAddress[end] : -# 2110| mu2110_2(char *) = Uninitialized[end] : &:r2110_1 -# 2111| r2111_1(glval) = VariableAddress[d] : -# 2111| r2111_2(glval) = FunctionAddress[strtod] : -# 2111| r2111_3(glval) = VariableAddress[s] : -# 2111| r2111_4(char *) = Load[s] : &:r2111_3, ~m? -# 2111| r2111_5(char *) = Convert : r2111_4 -# 2111| r2111_6(glval) = VariableAddress[end] : -# 2111| r2111_7(char **) = CopyValue : r2111_6 -# 2111| r2111_8(double) = Call[strtod] : func:r2111_2, 0:r2111_5, 1:r2111_7 -# 2111| v2111_9(void) = ^BufferReadSideEffect[0] : &:r2111_5, ~m? -# 2111| mu2111_10(char *) = ^IndirectMayWriteSideEffect[1] : &:r2111_7 -# 2111| mu2111_11(double) = Store[d] : &:r2111_1, r2111_8 -# 2112| r2112_1(glval) = VariableAddress[#return] : -# 2112| r2112_2(glval) = VariableAddress[end] : -# 2112| r2112_3(char *) = Load[end] : &:r2112_2, ~m? -# 2112| mu2112_4(char *) = Store[#return] : &:r2112_1, r2112_3 -# 2109| v2109_8(void) = ReturnIndirection[s] : &:r2109_6, ~m? -# 2109| r2109_9(glval) = VariableAddress[#return] : -# 2109| v2109_10(void) = ReturnValue : &:r2109_9, ~m? -# 2109| v2109_11(void) = AliasedUse : ~m? -# 2109| v2109_12(void) = ExitFunction : +# 2111| char* test_strtod(char*) +# 2111| Block 0 +# 2111| v2111_1(void) = EnterFunction : +# 2111| mu2111_2(unknown) = AliasedDefinition : +# 2111| mu2111_3(unknown) = InitializeNonLocal : +# 2111| r2111_4(glval) = VariableAddress[s] : +# 2111| mu2111_5(char *) = InitializeParameter[s] : &:r2111_4 +# 2111| r2111_6(char *) = Load[s] : &:r2111_4, ~m? +# 2111| mu2111_7(unknown) = InitializeIndirection[s] : &:r2111_6 +# 2112| r2112_1(glval) = VariableAddress[end] : +# 2112| mu2112_2(char *) = Uninitialized[end] : &:r2112_1 +# 2113| r2113_1(glval) = VariableAddress[d] : +# 2113| r2113_2(glval) = FunctionAddress[strtod] : +# 2113| r2113_3(glval) = VariableAddress[s] : +# 2113| r2113_4(char *) = Load[s] : &:r2113_3, ~m? +# 2113| r2113_5(char *) = Convert : r2113_4 +# 2113| r2113_6(glval) = VariableAddress[end] : +# 2113| r2113_7(char **) = CopyValue : r2113_6 +# 2113| r2113_8(double) = Call[strtod] : func:r2113_2, 0:r2113_5, 1:r2113_7 +# 2113| v2113_9(void) = ^BufferReadSideEffect[0] : &:r2113_5, ~m? +# 2113| mu2113_10(char *) = ^IndirectMayWriteSideEffect[1] : &:r2113_7 +# 2113| mu2113_11(double) = Store[d] : &:r2113_1, r2113_8 +# 2114| r2114_1(glval) = VariableAddress[#return] : +# 2114| r2114_2(glval) = VariableAddress[end] : +# 2114| r2114_3(char *) = Load[end] : &:r2114_2, ~m? +# 2114| mu2114_4(char *) = Store[#return] : &:r2114_1, r2114_3 +# 2111| v2111_8(void) = ReturnIndirection[s] : &:r2111_6, ~m? +# 2111| r2111_9(glval) = VariableAddress[#return] : +# 2111| v2111_10(void) = ReturnValue : &:r2111_9, ~m? +# 2111| v2111_11(void) = AliasedUse : ~m? +# 2111| v2111_12(void) = ExitFunction : -# 2119| void call_as_child_of_ConditionDeclExpr() -# 2119| Block 0 -# 2119| v2119_1(void) = EnterFunction : -# 2119| mu2119_2(unknown) = AliasedDefinition : -# 2119| mu2119_3(unknown) = InitializeNonLocal : -# 2120| r2120_1(glval) = VariableAddress[b] : -# 2120| r2120_2(HasOperatorBool) = Constant[0] : -# 2120| mu2120_3(HasOperatorBool) = Store[b] : &:r2120_1, r2120_2 -# 2120| r2120_4(glval) = VariableAddress[b] : -# 2120| r2120_5(glval) = FunctionAddress[operator bool] : -# 2120| r2120_6(bool) = Call[operator bool] : func:r2120_5, this:r2120_4 -# 2120| mu2120_7(unknown) = ^CallSideEffect : ~m? -# 2120| v2120_8(void) = ^IndirectReadSideEffect[-1] : &:r2120_4, ~m? -# 2120| mu2120_9(HasOperatorBool) = ^IndirectMayWriteSideEffect[-1] : &:r2120_4 -# 2120| r2120_10(bool) = CopyValue : r2120_6 -# 2120| v2120_11(void) = ConditionalBranch : r2120_10 +# 2121| void call_as_child_of_ConditionDeclExpr() +# 2121| Block 0 +# 2121| v2121_1(void) = EnterFunction : +# 2121| mu2121_2(unknown) = AliasedDefinition : +# 2121| mu2121_3(unknown) = InitializeNonLocal : +# 2122| r2122_1(glval) = VariableAddress[b] : +# 2122| r2122_2(HasOperatorBool) = Constant[0] : +# 2122| mu2122_3(HasOperatorBool) = Store[b] : &:r2122_1, r2122_2 +# 2122| r2122_4(glval) = VariableAddress[b] : +# 2122| r2122_5(glval) = FunctionAddress[operator bool] : +# 2122| r2122_6(bool) = Call[operator bool] : func:r2122_5, this:r2122_4 +# 2122| mu2122_7(unknown) = ^CallSideEffect : ~m? +# 2122| v2122_8(void) = ^IndirectReadSideEffect[-1] : &:r2122_4, ~m? +# 2122| mu2122_9(HasOperatorBool) = ^IndirectMayWriteSideEffect[-1] : &:r2122_4 +# 2122| r2122_10(bool) = CopyValue : r2122_6 +# 2122| v2122_11(void) = ConditionalBranch : r2122_10 #-----| False -> Block 2 #-----| True -> Block 1 -# 2120| Block 1 -# 2120| v2120_12(void) = NoOp : +# 2122| Block 1 +# 2122| v2122_12(void) = NoOp : #-----| Goto -> Block 2 -# 2121| Block 2 -# 2121| v2121_1(void) = NoOp : -# 2119| v2119_4(void) = ReturnVoid : -# 2119| v2119_5(void) = AliasedUse : ~m? -# 2119| v2119_6(void) = ExitFunction : +# 2123| Block 2 +# 2123| v2123_1(void) = NoOp : +# 2121| v2121_4(void) = ReturnVoid : +# 2121| v2121_5(void) = AliasedUse : ~m? +# 2121| v2121_6(void) = ExitFunction : perf-regression.cpp: # 6| void Big::Big() From fb072a5156d2e1526c21ba4be6e654f596ce84d8 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Tue, 13 Feb 2024 10:44:24 +0100 Subject: [PATCH 174/378] C++: Add additional IR tests for init statements --- .../library-tests/ir/ir/PrintAST.expected | 283 ++++++++++++++++++ .../library-tests/ir/ir/aliased_ir.expected | 154 ++++++++++ .../ir/ir/aliased_ssa_consistency.expected | 1 + .../aliased_ssa_consistency_unsound.expected | 1 + cpp/ql/test/library-tests/ir/ir/ir.cpp | 32 ++ .../ir/ir/operand_locations.expected | 122 ++++++++ .../ir/ir/raw_consistency.expected | 5 + .../test/library-tests/ir/ir/raw_ir.expected | 276 +++++++++++++++++ .../ir/ir/unaliased_ssa_consistency.expected | 1 + ...unaliased_ssa_consistency_unsound.expected | 1 + 10 files changed, 876 insertions(+) diff --git a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected index 2ffe94e2b84..e7768ce6999 100644 --- a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected +++ b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected @@ -9382,14 +9382,30 @@ ir.cpp: # 1054| getRightOperand().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) # 1054| Type = [IntType] int # 1054| ValueCategory = prvalue(load) +# 1059| [CopyAssignmentOperator] vector& vector::operator=(vector const&) +# 1059| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const vector & # 1059| [CopyAssignmentOperator] vector& vector::operator=(vector const&) # 1059| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const vector & +# 1059| [CopyConstructor] void vector::vector(vector const&) +# 1059| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const vector & # 1059| [CopyConstructor] void vector::vector(vector const&) # 1059| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const vector & +# 1060| [CopyAssignmentOperator] vector::iterator& vector::iterator::operator=(vector::iterator const public&) +# 1060| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const iterator & +# 1060| [MoveAssignmentOperator] vector::iterator& vector::iterator::operator=(vector::iterator&&) +# 1060| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [RValueReferenceType] iterator && # 1060| [CopyAssignmentOperator] vector::iterator& vector::iterator::operator=(vector::iterator const public&) # 1060| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) @@ -9398,14 +9414,22 @@ ir.cpp: # 1060| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] iterator && +# 1062| [MemberFunction] vector::iterator& vector::iterator::operator++() +# 1062| : # 1062| [MemberFunction] vector::iterator& vector::iterator::operator++() # 1062| : # 1062| [MemberFunction] vector::iterator& vector::iterator::operator++() # 1062| : +# 1063| [ConstMemberFunction] ClassWithDestructor& vector::iterator::operator*() const +# 1063| : # 1063| [ConstMemberFunction] T& vector::iterator::operator*() const # 1063| : # 1063| [ConstMemberFunction] int& vector::iterator::operator*() const # 1063| : +# 1065| [ConstMemberFunction] bool vector::iterator::operator!=(vector::iterator) const +# 1065| : +# 1065| getParameter(0): [Parameter] right +# 1065| Type = [NestedStruct] iterator # 1065| [ConstMemberFunction] bool vector::iterator::operator!=(vector::iterator) const # 1065| : # 1065| getParameter(0): [Parameter] right @@ -9414,16 +9438,24 @@ ir.cpp: # 1065| : # 1065| getParameter(0): [Parameter] right # 1065| Type = [NestedStruct] iterator +# 1068| [Constructor] void vector::vector(ClassWithDestructor) +# 1068| : +# 1068| getParameter(0): [Parameter] (unnamed parameter 0) +# 1068| Type = [Class] ClassWithDestructor # 1068| [Constructor] void vector::vector(T) # 1068| : # 1068| getParameter(0): [Parameter] (unnamed parameter 0) # 1068| Type = [TemplateParameter] T # 1069| [Destructor] void vector::~vector() # 1069| : +# 1070| [ConstMemberFunction] vector::iterator vector::begin() const +# 1070| : # 1070| [ConstMemberFunction] vector::iterator vector::begin() const # 1070| : # 1070| [ConstMemberFunction] vector::iterator vector::begin() const # 1070| : +# 1071| [ConstMemberFunction] vector::iterator vector::end() const +# 1071| : # 1071| [ConstMemberFunction] vector::iterator vector::end() const # 1071| : # 1071| [ConstMemberFunction] vector::iterator vector::end() const @@ -16163,6 +16195,257 @@ ir.cpp: # 2122| ValueCategory = prvalue(load) # 2122| getThen(): [BlockStmt] { ... } # 2123| getStmt(1): [ReturnStmt] return ... +# 2125| [CopyAssignmentOperator] ClassWithDestructor& ClassWithDestructor::operator=(ClassWithDestructor const&) +# 2125| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const ClassWithDestructor & +# 2125| [CopyConstructor] void ClassWithDestructor::ClassWithDestructor(ClassWithDestructor const&) +# 2125| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const ClassWithDestructor & +# 2125| : +# 2125| getInitializer(0): [ConstructorFieldInit] constructor init of field x +# 2125| Type = [CharPointerType] char * +# 2125| ValueCategory = prvalue +# 2125| getExpr(): [ReferenceFieldAccess] x +# 2125| Type = [CharPointerType] char * +# 2125| ValueCategory = prvalue(load) +# 2125| getQualifier(): [VariableAccess] (unnamed parameter 0) +# 2125| Type = [LValueReferenceType] const ClassWithDestructor & +# 2125| ValueCategory = prvalue(load) +# 2125| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2125| Type = [SpecifiedType] const ClassWithDestructor +# 2125| ValueCategory = lvalue +# 2125| getEntryPoint(): [BlockStmt] { ... } +# 2125| getStmt(0): [ReturnStmt] return ... +# 2128| [Constructor] void ClassWithDestructor::ClassWithDestructor() +# 2128| : +# 2128| : +# 2128| getEntryPoint(): [BlockStmt] { ... } +# 2128| getStmt(0): [ExprStmt] ExprStmt +# 2128| getExpr(): [AssignExpr] ... = ... +# 2128| Type = [CharPointerType] char * +# 2128| ValueCategory = lvalue +# 2128| getLValue(): [ImplicitThisFieldAccess,PointerFieldAccess] x +# 2128| Type = [CharPointerType] char * +# 2128| ValueCategory = lvalue +# 2128| getQualifier(): [ThisExpr] this +# 2128| Type = [PointerType] ClassWithDestructor * +# 2128| ValueCategory = prvalue(load) +# 2128| getRValue(): [NewExpr] new +# 2128| Type = [CharPointerType] char * +# 2128| ValueCategory = prvalue +# 2128| getStmt(1): [ReturnStmt] return ... +# 2129| [Destructor] void ClassWithDestructor::~ClassWithDestructor() +# 2129| : +# 2129| getEntryPoint(): [BlockStmt] { ... } +# 2129| getStmt(0): [ExprStmt] ExprStmt +# 2129| getExpr(): [DeleteExpr] delete +# 2129| Type = [VoidType] void +# 2129| ValueCategory = prvalue +# 2129| getExpr(): [ImplicitThisFieldAccess,PointerFieldAccess] x +# 2129| Type = [CharPointerType] char * +# 2129| ValueCategory = prvalue(load) +# 2129| getQualifier(): [ThisExpr] this +# 2129| Type = [PointerType] ClassWithDestructor * +# 2129| ValueCategory = prvalue(load) +# 2129| getStmt(1): [ReturnStmt] return ... +# 2129| : +# 2131| [MemberFunction] void ClassWithDestructor::set_x(char) +# 2131| : +# 2131| getParameter(0): [Parameter] y +# 2131| Type = [PlainCharType] char +# 2131| getEntryPoint(): [BlockStmt] { ... } +# 2131| getStmt(0): [ExprStmt] ExprStmt +# 2131| getExpr(): [AssignExpr] ... = ... +# 2131| Type = [PlainCharType] char +# 2131| ValueCategory = lvalue +# 2131| getLValue(): [PointerDereferenceExpr] * ... +# 2131| Type = [PlainCharType] char +# 2131| ValueCategory = lvalue +# 2131| getOperand(): [ImplicitThisFieldAccess,PointerFieldAccess] x +# 2131| Type = [CharPointerType] char * +# 2131| ValueCategory = prvalue(load) +# 2131| getQualifier(): [ThisExpr] this +# 2131| Type = [PointerType] ClassWithDestructor * +# 2131| ValueCategory = prvalue(load) +# 2131| getRValue(): [VariableAccess] y +# 2131| Type = [PlainCharType] char +# 2131| ValueCategory = prvalue(load) +# 2131| getStmt(1): [ReturnStmt] return ... +# 2134| [GlobalVariable] bool initialization_with_destructor_bool +# 2134| getInitializer(): [Initializer] initializer for initialization_with_destructor_bool +# 2134| getExpr(): [Literal] 1 +# 2134| Type = [BoolType] bool +# 2134| Value = [Literal] 1 +# 2134| ValueCategory = prvalue +# 2136| [TopLevelFunction] void initialization_with_destructor(bool, char) +# 2136| : +# 2136| getParameter(0): [Parameter] b +# 2136| Type = [BoolType] bool +# 2136| getParameter(1): [Parameter] c +# 2136| Type = [PlainCharType] char +# 2136| getEntryPoint(): [BlockStmt] { ... } +# 2137| getStmt(0): [IfStmt] if (...) ... +# 2137| getInitialization(): [DeclStmt] declaration +# 2137| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2137| Type = [Class] ClassWithDestructor +# 2137| getVariable().getInitializer(): [Initializer] initializer for x +# 2137| getExpr(): [ConstructorCall] call to ClassWithDestructor +# 2137| Type = [VoidType] void +# 2137| ValueCategory = prvalue +# 2137| getCondition(): [VariableAccess] b +# 2137| Type = [BoolType] bool +# 2137| ValueCategory = prvalue(load) +# 2138| getThen(): [ExprStmt] ExprStmt +# 2138| getExpr(): [FunctionCall] call to set_x +# 2138| Type = [VoidType] void +# 2138| ValueCategory = prvalue +# 2138| getQualifier(): [VariableAccess] x +# 2138| Type = [Class] ClassWithDestructor +# 2138| ValueCategory = lvalue +# 2138| getArgument(0): [CharLiteral] 97 +# 2138| Type = [PlainCharType] char +# 2138| Value = [CharLiteral] 97 +# 2138| ValueCategory = prvalue +# 2138| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2138| Type = [VoidType] void +# 2138| ValueCategory = prvalue +# 2138| getQualifier(): [VariableAccess] x +# 2138| Type = [Class] ClassWithDestructor +# 2138| ValueCategory = lvalue +# 2140| getStmt(1): [ConstexprIfStmt] if constexpr (...) ... +# 2140| getInitialization(): [DeclStmt] declaration +# 2140| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2140| Type = [Class] ClassWithDestructor +# 2140| getVariable().getInitializer(): [Initializer] initializer for x +# 2140| getExpr(): [ConstructorCall] call to ClassWithDestructor +# 2140| Type = [VoidType] void +# 2140| ValueCategory = prvalue +# 2140| getCondition(): [VariableAccess] initialization_with_destructor_bool +# 2140| Type = [BoolType] bool +# 2140| Value = [VariableAccess] 1 +# 2140| ValueCategory = prvalue(load) +# 2141| getThen(): [ExprStmt] ExprStmt +# 2141| getExpr(): [FunctionCall] call to set_x +# 2141| Type = [VoidType] void +# 2141| ValueCategory = prvalue +# 2141| getQualifier(): [VariableAccess] x +# 2141| Type = [Class] ClassWithDestructor +# 2141| ValueCategory = lvalue +# 2141| getArgument(0): [CharLiteral] 97 +# 2141| Type = [PlainCharType] char +# 2141| Value = [CharLiteral] 97 +# 2141| ValueCategory = prvalue +# 2143| getStmt(2): [SwitchStmt] switch (...) ... +# 2143| getInitialization(): [DeclStmt] declaration +# 2143| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2143| Type = [Class] ClassWithDestructor +# 2143| getVariable().getInitializer(): [Initializer] initializer for x +# 2143| getExpr(): [ConstructorCall] call to ClassWithDestructor +# 2143| Type = [VoidType] void +# 2143| ValueCategory = prvalue +# 2143| getExpr(): [VariableAccess] c +# 2143| Type = [PlainCharType] char +# 2143| ValueCategory = prvalue(load) +# 2143| getStmt(): [BlockStmt] { ... } +# 2144| getStmt(0): [SwitchCase] case ...: +# 2144| getExpr(): [CharLiteral] 97 +# 2144| Type = [PlainCharType] char +# 2144| Value = [CharLiteral] 97 +# 2144| ValueCategory = prvalue +# 2144| getExpr().getFullyConverted(): [CStyleCast] (int)... +# 2144| Conversion = [IntegralConversion] integral conversion +# 2144| Type = [IntType] int +# 2144| Value = [CStyleCast] 97 +# 2144| ValueCategory = prvalue +# 2145| getStmt(1): [ExprStmt] ExprStmt +# 2145| getExpr(): [FunctionCall] call to set_x +# 2145| Type = [VoidType] void +# 2145| ValueCategory = prvalue +# 2145| getQualifier(): [VariableAccess] x +# 2145| Type = [Class] ClassWithDestructor +# 2145| ValueCategory = lvalue +# 2145| getArgument(0): [CharLiteral] 97 +# 2145| Type = [PlainCharType] char +# 2145| Value = [CharLiteral] 97 +# 2145| ValueCategory = prvalue +# 2146| getStmt(2): [BreakStmt] break; +# 2147| getStmt(3): [SwitchCase] default: +# 2148| getStmt(4): [ExprStmt] ExprStmt +# 2148| getExpr(): [FunctionCall] call to set_x +# 2148| Type = [VoidType] void +# 2148| ValueCategory = prvalue +# 2148| getQualifier(): [VariableAccess] x +# 2148| Type = [Class] ClassWithDestructor +# 2148| ValueCategory = lvalue +# 2148| getArgument(0): [CharLiteral] 98 +# 2148| Type = [PlainCharType] char +# 2148| Value = [CharLiteral] 98 +# 2148| ValueCategory = prvalue +# 2149| getStmt(5): [BreakStmt] break; +# 2150| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2150| Type = [VoidType] void +# 2150| ValueCategory = prvalue +# 2150| getQualifier(): [VariableAccess] x +# 2150| Type = [Class] ClassWithDestructor +# 2150| ValueCategory = lvalue +# 2143| getExpr().getFullyConverted(): [CStyleCast] (int)... +# 2143| Conversion = [IntegralConversion] integral conversion +# 2143| Type = [IntType] int +# 2143| ValueCategory = prvalue +# 2150| getStmt(3): [LabelStmt] label ...: +# 2152| getStmt(4): [DeclStmt] declaration +# 2152| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2152| Type = [Class] ClassWithDestructor +# 2152| getVariable().getInitializer(): [Initializer] initializer for x +# 2152| getExpr(): [ConstructorCall] call to ClassWithDestructor +# 2152| Type = [VoidType] void +# 2152| ValueCategory = prvalue +# 2153| getStmt(5): [RangeBasedForStmt] for(...:...) ... +# 2153| getChild(0): [DeclStmt] declaration +# 2153| getBeginEndDeclaration(): [DeclStmt] declaration +# 2153| getCondition(): [FunctionCall] call to operator!= +# 2153| Type = [BoolType] bool +# 2153| ValueCategory = prvalue +# 2153| getQualifier(): [VariableAccess] (__begin) +# 2153| Type = [NestedStruct] iterator +# 2153| ValueCategory = lvalue +# 2153| getArgument(0): [VariableAccess] (__end) +# 2153| Type = [NestedStruct] iterator +# 2153| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +# 2153| getUpdate(): [FunctionCall] call to operator++ +# 2153| Type = [LValueReferenceType] iterator & +# 2153| ValueCategory = prvalue +# 2153| getQualifier(): [VariableAccess] (__begin) +# 2153| Type = [NestedStruct] iterator +# 2153| ValueCategory = lvalue +# 2153| getChild(4): [DeclStmt] declaration +# 2154| getStmt(): [ExprStmt] ExprStmt +# 2154| getExpr(): [FunctionCall] call to set_x +# 2154| Type = [VoidType] void +# 2154| ValueCategory = prvalue +# 2154| getQualifier(): [VariableAccess] y +# 2154| Type = [Class] ClassWithDestructor +# 2154| ValueCategory = lvalue +# 2154| getArgument(0): [CharLiteral] 97 +# 2154| Type = [PlainCharType] char +# 2154| Value = [CharLiteral] 97 +# 2154| ValueCategory = prvalue +# 2153| getUpdate().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2153| Type = [NestedStruct] iterator +# 2153| ValueCategory = lvalue +# 2155| getStmt(6): [ReturnStmt] return ... +# 2155| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2155| Type = [VoidType] void +# 2155| ValueCategory = prvalue +# 2155| getQualifier(): [VariableAccess] x +# 2155| Type = [Class] ClassWithDestructor +# 2155| ValueCategory = lvalue perf-regression.cpp: # 4| [CopyAssignmentOperator] Big& Big::operator=(Big const&) # 4| : diff --git a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected index ebb6e63062f..458ab279ff2 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected @@ -12473,6 +12473,160 @@ ir.cpp: # 2121| v2121_6(void) = AliasedUse : ~m2122_8 # 2121| v2121_7(void) = ExitFunction : +# 2125| void ClassWithDestructor::ClassWithDestructor(ClassWithDestructor const&) +# 2125| Block 0 +# 2125| v2125_1(void) = EnterFunction : +# 2125| m2125_2(unknown) = AliasedDefinition : +# 2125| m2125_3(unknown) = InitializeNonLocal : +# 2125| m2125_4(unknown) = Chi : total:m2125_2, partial:m2125_3 +# 2125| r2125_5(glval) = VariableAddress[#this] : +# 2125| m2125_6(glval) = InitializeParameter[#this] : &:r2125_5 +# 2125| r2125_7(glval) = Load[#this] : &:r2125_5, m2125_6 +# 2125| m2125_8(ClassWithDestructor) = InitializeIndirection[#this] : &:r2125_7 +#-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : +#-----| m0_2(ClassWithDestructor &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 +#-----| r0_3(ClassWithDestructor &) = Load[(unnamed parameter 0)] : &:r0_1, m0_2 +#-----| m0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 +# 2125| r2125_9(glval) = FieldAddress[x] : m2125_6 +# 2125| r2125_10(glval) = VariableAddress[(unnamed parameter 0)] : +# 2125| r2125_11(ClassWithDestructor &) = Load[(unnamed parameter 0)] : &:r2125_10, m0_2 +# 2125| r2125_12(glval) = CopyValue : r2125_11 +# 2125| r2125_13(glval) = FieldAddress[x] : r2125_12 +# 2125| r2125_14(char *) = Load[?] : &:r2125_13, ~m0_4 +# 2125| m2125_15(char *) = Store[?] : &:r2125_9, r2125_14 +# 2125| m2125_16(unknown) = Chi : total:m2125_8, partial:m2125_15 +# 2125| v2125_17(void) = NoOp : +# 2125| v2125_18(void) = ReturnIndirection[#this] : &:r2125_7, m2125_16 +#-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, m0_4 +# 2125| v2125_19(void) = ReturnVoid : +# 2125| v2125_20(void) = AliasedUse : m2125_3 +# 2125| v2125_21(void) = ExitFunction : + +# 2128| void ClassWithDestructor::ClassWithDestructor() +# 2128| Block 0 +# 2128| v2128_1(void) = EnterFunction : +# 2128| m2128_2(unknown) = AliasedDefinition : +# 2128| m2128_3(unknown) = InitializeNonLocal : +# 2128| m2128_4(unknown) = Chi : total:m2128_2, partial:m2128_3 +# 2128| r2128_5(glval) = VariableAddress[#this] : +# 2128| m2128_6(glval) = InitializeParameter[#this] : &:r2128_5 +# 2128| r2128_7(glval) = Load[#this] : &:r2128_5, m2128_6 +# 2128| m2128_8(ClassWithDestructor) = InitializeIndirection[#this] : &:r2128_7 +# 2128| r2128_9(glval) = FunctionAddress[operator new] : +# 2128| r2128_10(unsigned long) = Constant[1] : +# 2128| r2128_11(void *) = Call[operator new] : func:r2128_9, 0:r2128_10 +# 2128| m2128_12(unknown) = ^CallSideEffect : ~m2128_4 +# 2128| m2128_13(unknown) = Chi : total:m2128_4, partial:m2128_12 +# 2128| m2128_14(unknown) = ^InitializeDynamicAllocation : &:r2128_11 +# 2128| r2128_15(char *) = Convert : r2128_11 +# 2128| r2128_16(glval) = VariableAddress[#this] : +# 2128| r2128_17(ClassWithDestructor *) = Load[#this] : &:r2128_16, m2128_6 +# 2128| r2128_18(glval) = FieldAddress[x] : r2128_17 +# 2128| m2128_19(char *) = Store[?] : &:r2128_18, r2128_15 +# 2128| m2128_20(unknown) = Chi : total:m2128_8, partial:m2128_19 +# 2128| v2128_21(void) = NoOp : +# 2128| v2128_22(void) = ReturnIndirection[#this] : &:r2128_7, m2128_20 +# 2128| v2128_23(void) = ReturnVoid : +# 2128| v2128_24(void) = AliasedUse : ~m2128_13 +# 2128| v2128_25(void) = ExitFunction : + +# 2129| void ClassWithDestructor::~ClassWithDestructor() +# 2129| Block 0 +# 2129| v2129_1(void) = EnterFunction : +# 2129| m2129_2(unknown) = AliasedDefinition : +# 2129| m2129_3(unknown) = InitializeNonLocal : +# 2129| m2129_4(unknown) = Chi : total:m2129_2, partial:m2129_3 +# 2129| r2129_5(glval) = VariableAddress[#this] : +# 2129| m2129_6(glval) = InitializeParameter[#this] : &:r2129_5 +# 2129| r2129_7(glval) = Load[#this] : &:r2129_5, m2129_6 +# 2129| m2129_8(ClassWithDestructor) = InitializeIndirection[#this] : &:r2129_7 +# 2129| r2129_9(glval) = FunctionAddress[operator delete] : +# 2129| r2129_10(glval) = VariableAddress[#this] : +# 2129| r2129_11(ClassWithDestructor *) = Load[#this] : &:r2129_10, m2129_6 +# 2129| r2129_12(glval) = FieldAddress[x] : r2129_11 +# 2129| r2129_13(char *) = Load[?] : &:r2129_12, ~m2129_8 +# 2129| v2129_14(void) = Call[operator delete] : func:r2129_9, 0:r2129_13 +# 2129| m2129_15(unknown) = ^CallSideEffect : ~m2129_4 +# 2129| m2129_16(unknown) = Chi : total:m2129_4, partial:m2129_15 +# 2129| v2129_17(void) = NoOp : +# 2129| v2129_18(void) = ReturnIndirection[#this] : &:r2129_7, m2129_8 +# 2129| v2129_19(void) = ReturnVoid : +# 2129| v2129_20(void) = AliasedUse : ~m2129_16 +# 2129| v2129_21(void) = ExitFunction : + +# 2131| void ClassWithDestructor::set_x(char) +# 2131| Block 0 +# 2131| v2131_1(void) = EnterFunction : +# 2131| m2131_2(unknown) = AliasedDefinition : +# 2131| m2131_3(unknown) = InitializeNonLocal : +# 2131| m2131_4(unknown) = Chi : total:m2131_2, partial:m2131_3 +# 2131| r2131_5(glval) = VariableAddress[#this] : +# 2131| m2131_6(glval) = InitializeParameter[#this] : &:r2131_5 +# 2131| r2131_7(glval) = Load[#this] : &:r2131_5, m2131_6 +# 2131| m2131_8(ClassWithDestructor) = InitializeIndirection[#this] : &:r2131_7 +# 2131| r2131_9(glval) = VariableAddress[y] : +# 2131| m2131_10(char) = InitializeParameter[y] : &:r2131_9 +# 2131| r2131_11(glval) = VariableAddress[y] : +# 2131| r2131_12(char) = Load[y] : &:r2131_11, m2131_10 +# 2131| r2131_13(glval) = VariableAddress[#this] : +# 2131| r2131_14(ClassWithDestructor *) = Load[#this] : &:r2131_13, m2131_6 +# 2131| r2131_15(glval) = FieldAddress[x] : r2131_14 +# 2131| r2131_16(char *) = Load[?] : &:r2131_15, ~m2131_8 +# 2131| r2131_17(glval) = CopyValue : r2131_16 +# 2131| m2131_18(char) = Store[?] : &:r2131_17, r2131_12 +# 2131| m2131_19(unknown) = Chi : total:m2131_4, partial:m2131_18 +# 2131| v2131_20(void) = NoOp : +# 2131| v2131_21(void) = ReturnIndirection[#this] : &:r2131_7, m2131_8 +# 2131| v2131_22(void) = ReturnVoid : +# 2131| v2131_23(void) = AliasedUse : ~m2131_19 +# 2131| v2131_24(void) = ExitFunction : + +# 2134| bool initialization_with_destructor_bool +# 2134| Block 0 +# 2134| v2134_1(void) = EnterFunction : +# 2134| m2134_2(unknown) = AliasedDefinition : +# 2134| r2134_3(glval) = VariableAddress[initialization_with_destructor_bool] : +# 2134| r2134_4(bool) = Constant[1] : +# 2134| m2134_5(bool) = Store[initialization_with_destructor_bool] : &:r2134_3, r2134_4 +# 2134| m2134_6(unknown) = Chi : total:m2134_2, partial:m2134_5 +# 2134| v2134_7(void) = ReturnVoid : +# 2134| v2134_8(void) = AliasedUse : ~m2134_6 +# 2134| v2134_9(void) = ExitFunction : + +# 2136| void initialization_with_destructor(bool, char) +# 2136| Block 0 +# 2136| v2136_1(void) = EnterFunction : +# 2136| m2136_2(unknown) = AliasedDefinition : +# 2136| m2136_3(unknown) = InitializeNonLocal : +# 2136| m2136_4(unknown) = Chi : total:m2136_2, partial:m2136_3 +# 2136| r2136_5(glval) = VariableAddress[b] : +# 2136| m2136_6(bool) = InitializeParameter[b] : &:r2136_5 +# 2136| r2136_7(glval) = VariableAddress[c] : +# 2136| m2136_8(char) = InitializeParameter[c] : &:r2136_7 +# 2137| r2137_1(glval) = VariableAddress[x] : +# 2137| m2137_2(ClassWithDestructor) = Uninitialized[x] : &:r2137_1 +# 2137| r2137_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2137| v2137_4(void) = Call[ClassWithDestructor] : func:r2137_3, this:r2137_1 +# 2137| m2137_5(unknown) = ^CallSideEffect : ~m2136_4 +# 2137| m2137_6(unknown) = Chi : total:m2136_4, partial:m2137_5 +# 2137| m2137_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2137_1 +# 2137| m2137_8(ClassWithDestructor) = Chi : total:m2137_2, partial:m2137_7 +# 2137| r2137_9(glval) = VariableAddress[b] : +# 2137| r2137_10(bool) = Load[b] : &:r2137_9, m2136_6 +# 2137| v2137_11(void) = ConditionalBranch : r2137_10 +#-----| True -> Block 1 + +# 2138| Block 1 +# 2138| r2138_1(glval) = VariableAddress[x] : +# 2138| r2138_2(glval) = FunctionAddress[set_x] : +# 2138| r2138_3(char) = Constant[97] : +# 2138| v2138_4(void) = Call[set_x] : func:r2138_2, this:r2138_1, 0:r2138_3 +# 2138| m2138_5(unknown) = ^CallSideEffect : ~m2137_6 +# 2138| m2138_6(unknown) = Chi : total:m2137_6, partial:m2138_5 +# 2138| v2138_7(void) = ^IndirectReadSideEffect[-1] : &:r2138_1, m2137_8 +# 2138| m2138_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2138_1 +# 2138| m2138_9(ClassWithDestructor) = Chi : total:m2137_8, partial:m2138_8 + perf-regression.cpp: # 6| void Big::Big() # 6| Block 0 diff --git a/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency.expected b/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency.expected index b93c7d2649f..b027437d48a 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency.expected @@ -6,6 +6,7 @@ missingOperandType duplicateChiOperand sideEffectWithoutPrimary instructionWithoutSuccessor +| ir.cpp:2138:9:2138:9 | Chi: x | Instruction 'Chi: x' has no successors in function '$@'. | ir.cpp:2136:6:2136:35 | void initialization_with_destructor(bool, char) | void initialization_with_destructor(bool, char) | ambiguousSuccessors unexplainedLoop unnecessaryPhiInstruction diff --git a/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency_unsound.expected b/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency_unsound.expected index b93c7d2649f..b027437d48a 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency_unsound.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency_unsound.expected @@ -6,6 +6,7 @@ missingOperandType duplicateChiOperand sideEffectWithoutPrimary instructionWithoutSuccessor +| ir.cpp:2138:9:2138:9 | Chi: x | Instruction 'Chi: x' has no successors in function '$@'. | ir.cpp:2136:6:2136:35 | void initialization_with_destructor(bool, char) | void initialization_with_destructor(bool, char) | ambiguousSuccessors unexplainedLoop unnecessaryPhiInstruction diff --git a/cpp/ql/test/library-tests/ir/ir/ir.cpp b/cpp/ql/test/library-tests/ir/ir/ir.cpp index 1fa9337f29b..cd702fcb265 100644 --- a/cpp/ql/test/library-tests/ir/ir/ir.cpp +++ b/cpp/ql/test/library-tests/ir/ir/ir.cpp @@ -2122,4 +2122,36 @@ void call_as_child_of_ConditionDeclExpr() { if(HasOperatorBool b = HasOperatorBool()) {} } +class ClassWithDestructor { + char *x; +public: + ClassWithDestructor() { x = new char; } + ~ClassWithDestructor() { delete x; } + + void set_x(char y) { *x = y; } +}; + +constexpr bool initialization_with_destructor_bool = true; + +void initialization_with_destructor(bool b, char c) { + if (ClassWithDestructor x; b) + x.set_x('a'); + + if constexpr (ClassWithDestructor x; initialization_with_destructor_bool) + x.set_x('a'); + + switch(ClassWithDestructor x; c) { + case 'a': + x.set_x('a'); + break; + default: + x.set_x('b'); + break; + } + + ClassWithDestructor x; + for(vector ys(x); ClassWithDestructor y : ys) + y.set_x('a'); +} + // semmle-extractor-options: -std=c++20 --clang diff --git a/cpp/ql/test/library-tests/ir/ir/operand_locations.expected b/cpp/ql/test/library-tests/ir/ir/operand_locations.expected index 88c62cd70b3..b460df9ea59 100644 --- a/cpp/ql/test/library-tests/ir/ir/operand_locations.expected +++ b/cpp/ql/test/library-tests/ir/ir/operand_locations.expected @@ -688,6 +688,8 @@ | file://:0:0:0:0 | Address | &:r0_1 | | file://:0:0:0:0 | Address | &:r0_1 | | file://:0:0:0:0 | Address | &:r0_1 | +| file://:0:0:0:0 | Address | &:r0_1 | +| file://:0:0:0:0 | Address | &:r0_1 | | file://:0:0:0:0 | Address | &:r0_2 | | file://:0:0:0:0 | Address | &:r0_3 | | file://:0:0:0:0 | Address | &:r0_3 | @@ -720,6 +722,8 @@ | file://:0:0:0:0 | Address | &:r0_3 | | file://:0:0:0:0 | Address | &:r0_3 | | file://:0:0:0:0 | Address | &:r0_3 | +| file://:0:0:0:0 | Address | &:r0_3 | +| file://:0:0:0:0 | Address | &:r0_3 | | file://:0:0:0:0 | Address | &:r0_4 | | file://:0:0:0:0 | Address | &:r0_4 | | file://:0:0:0:0 | Address | &:r0_5 | @@ -821,6 +825,7 @@ | file://:0:0:0:0 | Load | m0_2 | | file://:0:0:0:0 | Load | m0_2 | | file://:0:0:0:0 | Load | m0_2 | +| file://:0:0:0:0 | Load | m0_2 | | file://:0:0:0:0 | Load | m0_5 | | file://:0:0:0:0 | Load | m0_8 | | file://:0:0:0:0 | Load | m0_11 | @@ -859,6 +864,7 @@ | file://:0:0:0:0 | SideEffect | m0_4 | | file://:0:0:0:0 | SideEffect | m0_4 | | file://:0:0:0:0 | SideEffect | m0_4 | +| file://:0:0:0:0 | SideEffect | m0_4 | | file://:0:0:0:0 | SideEffect | m0_14 | | file://:0:0:0:0 | SideEffect | m1080_23 | | file://:0:0:0:0 | SideEffect | m1080_23 | @@ -10087,6 +10093,122 @@ | ir.cpp:2122:22:2122:22 | SideEffect | ~m2121_4 | | ir.cpp:2122:22:2122:22 | Unary | r2122_6 | | ir.cpp:2122:25:2122:42 | StoreValue | r2122_2 | +| ir.cpp:2125:7:2125:7 | Address | &:r2125_5 | +| ir.cpp:2125:7:2125:7 | Address | &:r2125_5 | +| ir.cpp:2125:7:2125:7 | Address | &:r2125_7 | +| ir.cpp:2125:7:2125:7 | Address | &:r2125_7 | +| ir.cpp:2125:7:2125:7 | Address | &:r2125_9 | +| ir.cpp:2125:7:2125:7 | Address | &:r2125_10 | +| ir.cpp:2125:7:2125:7 | Address | &:r2125_13 | +| ir.cpp:2125:7:2125:7 | ChiPartial | partial:m2125_3 | +| ir.cpp:2125:7:2125:7 | ChiPartial | partial:m2125_15 | +| ir.cpp:2125:7:2125:7 | ChiTotal | total:m2125_2 | +| ir.cpp:2125:7:2125:7 | ChiTotal | total:m2125_8 | +| ir.cpp:2125:7:2125:7 | Load | m0_2 | +| ir.cpp:2125:7:2125:7 | Load | m2125_6 | +| ir.cpp:2125:7:2125:7 | Load | ~m0_4 | +| ir.cpp:2125:7:2125:7 | SideEffect | m2125_3 | +| ir.cpp:2125:7:2125:7 | SideEffect | m2125_16 | +| ir.cpp:2125:7:2125:7 | StoreValue | r2125_14 | +| ir.cpp:2125:7:2125:7 | Unary | m2125_6 | +| ir.cpp:2125:7:2125:7 | Unary | r2125_11 | +| ir.cpp:2125:7:2125:7 | Unary | r2125_12 | +| ir.cpp:2128:5:2128:23 | Address | &:r2128_5 | +| ir.cpp:2128:5:2128:23 | Address | &:r2128_5 | +| ir.cpp:2128:5:2128:23 | Address | &:r2128_7 | +| ir.cpp:2128:5:2128:23 | Address | &:r2128_7 | +| ir.cpp:2128:5:2128:23 | ChiPartial | partial:m2128_3 | +| ir.cpp:2128:5:2128:23 | ChiTotal | total:m2128_2 | +| ir.cpp:2128:5:2128:23 | Load | m2128_6 | +| ir.cpp:2128:5:2128:23 | SideEffect | m2128_20 | +| ir.cpp:2128:5:2128:23 | SideEffect | ~m2128_13 | +| ir.cpp:2128:29:2128:29 | Address | &:r2128_16 | +| ir.cpp:2128:29:2128:29 | Address | &:r2128_18 | +| ir.cpp:2128:29:2128:29 | Load | m2128_6 | +| ir.cpp:2128:29:2128:29 | Unary | r2128_17 | +| ir.cpp:2128:29:2128:40 | ChiPartial | partial:m2128_19 | +| ir.cpp:2128:29:2128:40 | ChiTotal | total:m2128_8 | +| ir.cpp:2128:33:2128:40 | Address | &:r2128_11 | +| ir.cpp:2128:33:2128:40 | Arg(0) | 0:r2128_10 | +| ir.cpp:2128:33:2128:40 | CallTarget | func:r2128_9 | +| ir.cpp:2128:33:2128:40 | ChiPartial | partial:m2128_12 | +| ir.cpp:2128:33:2128:40 | ChiTotal | total:m2128_4 | +| ir.cpp:2128:33:2128:40 | SideEffect | ~m2128_4 | +| ir.cpp:2128:33:2128:40 | StoreValue | r2128_15 | +| ir.cpp:2128:33:2128:40 | Unary | r2128_11 | +| ir.cpp:2129:5:2129:24 | Address | &:r2129_5 | +| ir.cpp:2129:5:2129:24 | Address | &:r2129_5 | +| ir.cpp:2129:5:2129:24 | Address | &:r2129_7 | +| ir.cpp:2129:5:2129:24 | Address | &:r2129_7 | +| ir.cpp:2129:5:2129:24 | ChiPartial | partial:m2129_3 | +| ir.cpp:2129:5:2129:24 | ChiTotal | total:m2129_2 | +| ir.cpp:2129:5:2129:24 | Load | m2129_6 | +| ir.cpp:2129:5:2129:24 | SideEffect | m2129_8 | +| ir.cpp:2129:5:2129:24 | SideEffect | ~m2129_16 | +| ir.cpp:2129:30:2129:37 | CallTarget | func:r2129_9 | +| ir.cpp:2129:30:2129:37 | ChiPartial | partial:m2129_15 | +| ir.cpp:2129:30:2129:37 | ChiTotal | total:m2129_4 | +| ir.cpp:2129:30:2129:37 | SideEffect | ~m2129_4 | +| ir.cpp:2129:37:2129:37 | Address | &:r2129_10 | +| ir.cpp:2129:37:2129:37 | Address | &:r2129_12 | +| ir.cpp:2129:37:2129:37 | Arg(0) | 0:r2129_13 | +| ir.cpp:2129:37:2129:37 | Load | m2129_6 | +| ir.cpp:2129:37:2129:37 | Load | ~m2129_8 | +| ir.cpp:2129:37:2129:37 | Unary | r2129_11 | +| ir.cpp:2131:10:2131:14 | Address | &:r2131_5 | +| ir.cpp:2131:10:2131:14 | Address | &:r2131_5 | +| ir.cpp:2131:10:2131:14 | Address | &:r2131_7 | +| ir.cpp:2131:10:2131:14 | Address | &:r2131_7 | +| ir.cpp:2131:10:2131:14 | ChiPartial | partial:m2131_3 | +| ir.cpp:2131:10:2131:14 | ChiTotal | total:m2131_2 | +| ir.cpp:2131:10:2131:14 | Load | m2131_6 | +| ir.cpp:2131:10:2131:14 | SideEffect | m2131_8 | +| ir.cpp:2131:10:2131:14 | SideEffect | ~m2131_19 | +| ir.cpp:2131:21:2131:21 | Address | &:r2131_9 | +| ir.cpp:2131:26:2131:27 | Address | &:r2131_17 | +| ir.cpp:2131:26:2131:31 | ChiPartial | partial:m2131_18 | +| ir.cpp:2131:26:2131:31 | ChiTotal | total:m2131_4 | +| ir.cpp:2131:27:2131:27 | Address | &:r2131_13 | +| ir.cpp:2131:27:2131:27 | Address | &:r2131_15 | +| ir.cpp:2131:27:2131:27 | Load | m2131_6 | +| ir.cpp:2131:27:2131:27 | Load | ~m2131_8 | +| ir.cpp:2131:27:2131:27 | Unary | r2131_14 | +| ir.cpp:2131:27:2131:27 | Unary | r2131_16 | +| ir.cpp:2131:31:2131:31 | Address | &:r2131_11 | +| ir.cpp:2131:31:2131:31 | Load | m2131_10 | +| ir.cpp:2131:31:2131:31 | StoreValue | r2131_12 | +| ir.cpp:2134:16:2134:50 | Address | &:r2134_3 | +| ir.cpp:2134:16:2134:50 | SideEffect | ~m2134_6 | +| ir.cpp:2134:54:2134:57 | ChiPartial | partial:m2134_5 | +| ir.cpp:2134:54:2134:57 | ChiTotal | total:m2134_2 | +| ir.cpp:2134:54:2134:57 | StoreValue | r2134_4 | +| ir.cpp:2136:6:2136:35 | ChiPartial | partial:m2136_3 | +| ir.cpp:2136:6:2136:35 | ChiTotal | total:m2136_2 | +| ir.cpp:2136:42:2136:42 | Address | &:r2136_5 | +| ir.cpp:2136:50:2136:50 | Address | &:r2136_7 | +| ir.cpp:2137:29:2137:29 | Address | &:r2137_1 | +| ir.cpp:2137:29:2137:29 | Address | &:r2137_1 | +| ir.cpp:2137:29:2137:29 | Arg(this) | this:r2137_1 | +| ir.cpp:2137:29:2137:29 | CallTarget | func:r2137_3 | +| ir.cpp:2137:29:2137:29 | ChiPartial | partial:m2137_5 | +| ir.cpp:2137:29:2137:29 | ChiPartial | partial:m2137_7 | +| ir.cpp:2137:29:2137:29 | ChiTotal | total:m2136_4 | +| ir.cpp:2137:29:2137:29 | ChiTotal | total:m2137_2 | +| ir.cpp:2137:29:2137:29 | SideEffect | ~m2136_4 | +| ir.cpp:2137:32:2137:32 | Address | &:r2137_9 | +| ir.cpp:2137:32:2137:32 | Condition | r2137_10 | +| ir.cpp:2137:32:2137:32 | Load | m2136_6 | +| ir.cpp:2138:9:2138:9 | Address | &:r2138_1 | +| ir.cpp:2138:9:2138:9 | Address | &:r2138_1 | +| ir.cpp:2138:9:2138:9 | Arg(this) | this:r2138_1 | +| ir.cpp:2138:9:2138:9 | ChiPartial | partial:m2138_8 | +| ir.cpp:2138:9:2138:9 | ChiTotal | total:m2137_8 | +| ir.cpp:2138:9:2138:9 | SideEffect | m2137_8 | +| ir.cpp:2138:11:2138:15 | CallTarget | func:r2138_2 | +| ir.cpp:2138:11:2138:15 | ChiPartial | partial:m2138_5 | +| ir.cpp:2138:11:2138:15 | ChiTotal | total:m2137_6 | +| ir.cpp:2138:11:2138:15 | SideEffect | ~m2137_6 | +| ir.cpp:2138:17:2138:19 | Arg(0) | 0:r2138_3 | | perf-regression.cpp:6:3:6:5 | Address | &:r6_5 | | perf-regression.cpp:6:3:6:5 | Address | &:r6_5 | | perf-regression.cpp:6:3:6:5 | Address | &:r6_7 | diff --git a/cpp/ql/test/library-tests/ir/ir/raw_consistency.expected b/cpp/ql/test/library-tests/ir/ir/raw_consistency.expected index aefdbf9d134..c7c7ad6f53a 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_consistency.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_consistency.expected @@ -6,6 +6,10 @@ missingOperandType duplicateChiOperand sideEffectWithoutPrimary instructionWithoutSuccessor +| ir.cpp:2138:9:2138:9 | IndirectMayWriteSideEffect: x | Instruction 'IndirectMayWriteSideEffect: x' has no successors in function '$@'. | ir.cpp:2136:6:2136:35 | void initialization_with_destructor(bool, char) | void initialization_with_destructor(bool, char) | +| ir.cpp:2140:39:2140:39 | IndirectMayWriteSideEffect: call to ClassWithDestructor | Instruction 'IndirectMayWriteSideEffect: call to ClassWithDestructor' has no successors in function '$@'. | ir.cpp:2136:6:2136:35 | void initialization_with_destructor(bool, char) | void initialization_with_destructor(bool, char) | +| ir.cpp:2140:42:2140:76 | Constant: initialization_with_destructor_bool | Instruction 'Constant: initialization_with_destructor_bool' has no successors in function '$@'. | ir.cpp:2136:6:2136:35 | void initialization_with_destructor(bool, char) | void initialization_with_destructor(bool, char) | +| ir.cpp:2141:9:2141:9 | IndirectMayWriteSideEffect: x | Instruction 'IndirectMayWriteSideEffect: x' has no successors in function '$@'. | ir.cpp:2136:6:2136:35 | void initialization_with_destructor(bool, char) | void initialization_with_destructor(bool, char) | ambiguousSuccessors unexplainedLoop unnecessaryPhiInstruction @@ -37,4 +41,5 @@ nonUniqueEnclosingIRFunction fieldAddressOnNonPointer thisArgumentIsNonPointer nonUniqueIRVariable +| ir.cpp:2153:68:2153:69 | VariableAddress: ys | Variable address instruction 'VariableAddress: ys' has no associated variable, in function '$@'. | ir.cpp:2136:6:2136:35 | void initialization_with_destructor(bool, char) | void initialization_with_destructor(bool, char) | missingCppType diff --git a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected index ee73d4520ed..6ef4a69e0db 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected @@ -11676,6 +11676,282 @@ ir.cpp: # 2121| v2121_5(void) = AliasedUse : ~m? # 2121| v2121_6(void) = ExitFunction : +# 2125| void ClassWithDestructor::ClassWithDestructor(ClassWithDestructor const&) +# 2125| Block 0 +# 2125| v2125_1(void) = EnterFunction : +# 2125| mu2125_2(unknown) = AliasedDefinition : +# 2125| mu2125_3(unknown) = InitializeNonLocal : +# 2125| r2125_4(glval) = VariableAddress[#this] : +# 2125| mu2125_5(glval) = InitializeParameter[#this] : &:r2125_4 +# 2125| r2125_6(glval) = Load[#this] : &:r2125_4, ~m? +# 2125| mu2125_7(ClassWithDestructor) = InitializeIndirection[#this] : &:r2125_6 +#-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : +#-----| mu0_2(ClassWithDestructor &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 +#-----| r0_3(ClassWithDestructor &) = Load[(unnamed parameter 0)] : &:r0_1, ~m? +#-----| mu0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 +# 2125| r2125_8(glval) = FieldAddress[x] : mu2125_5 +# 2125| r2125_9(glval) = VariableAddress[(unnamed parameter 0)] : +# 2125| r2125_10(ClassWithDestructor &) = Load[(unnamed parameter 0)] : &:r2125_9, ~m? +# 2125| r2125_11(glval) = CopyValue : r2125_10 +# 2125| r2125_12(glval) = FieldAddress[x] : r2125_11 +# 2125| r2125_13(char *) = Load[?] : &:r2125_12, ~m? +# 2125| mu2125_14(char *) = Store[?] : &:r2125_8, r2125_13 +# 2125| v2125_15(void) = NoOp : +# 2125| v2125_16(void) = ReturnIndirection[#this] : &:r2125_6, ~m? +#-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, ~m? +# 2125| v2125_17(void) = ReturnVoid : +# 2125| v2125_18(void) = AliasedUse : ~m? +# 2125| v2125_19(void) = ExitFunction : + +# 2128| void ClassWithDestructor::ClassWithDestructor() +# 2128| Block 0 +# 2128| v2128_1(void) = EnterFunction : +# 2128| mu2128_2(unknown) = AliasedDefinition : +# 2128| mu2128_3(unknown) = InitializeNonLocal : +# 2128| r2128_4(glval) = VariableAddress[#this] : +# 2128| mu2128_5(glval) = InitializeParameter[#this] : &:r2128_4 +# 2128| r2128_6(glval) = Load[#this] : &:r2128_4, ~m? +# 2128| mu2128_7(ClassWithDestructor) = InitializeIndirection[#this] : &:r2128_6 +# 2128| r2128_8(glval) = FunctionAddress[operator new] : +# 2128| r2128_9(unsigned long) = Constant[1] : +# 2128| r2128_10(void *) = Call[operator new] : func:r2128_8, 0:r2128_9 +# 2128| mu2128_11(unknown) = ^CallSideEffect : ~m? +# 2128| mu2128_12(unknown) = ^InitializeDynamicAllocation : &:r2128_10 +# 2128| r2128_13(char *) = Convert : r2128_10 +# 2128| r2128_14(glval) = VariableAddress[#this] : +# 2128| r2128_15(ClassWithDestructor *) = Load[#this] : &:r2128_14, ~m? +# 2128| r2128_16(glval) = FieldAddress[x] : r2128_15 +# 2128| mu2128_17(char *) = Store[?] : &:r2128_16, r2128_13 +# 2128| v2128_18(void) = NoOp : +# 2128| v2128_19(void) = ReturnIndirection[#this] : &:r2128_6, ~m? +# 2128| v2128_20(void) = ReturnVoid : +# 2128| v2128_21(void) = AliasedUse : ~m? +# 2128| v2128_22(void) = ExitFunction : + +# 2129| void ClassWithDestructor::~ClassWithDestructor() +# 2129| Block 0 +# 2129| v2129_1(void) = EnterFunction : +# 2129| mu2129_2(unknown) = AliasedDefinition : +# 2129| mu2129_3(unknown) = InitializeNonLocal : +# 2129| r2129_4(glval) = VariableAddress[#this] : +# 2129| mu2129_5(glval) = InitializeParameter[#this] : &:r2129_4 +# 2129| r2129_6(glval) = Load[#this] : &:r2129_4, ~m? +# 2129| mu2129_7(ClassWithDestructor) = InitializeIndirection[#this] : &:r2129_6 +# 2129| r2129_8(glval) = FunctionAddress[operator delete] : +# 2129| r2129_9(glval) = VariableAddress[#this] : +# 2129| r2129_10(ClassWithDestructor *) = Load[#this] : &:r2129_9, ~m? +# 2129| r2129_11(glval) = FieldAddress[x] : r2129_10 +# 2129| r2129_12(char *) = Load[?] : &:r2129_11, ~m? +# 2129| v2129_13(void) = Call[operator delete] : func:r2129_8, 0:r2129_12 +# 2129| mu2129_14(unknown) = ^CallSideEffect : ~m? +# 2129| v2129_15(void) = NoOp : +# 2129| v2129_16(void) = ReturnIndirection[#this] : &:r2129_6, ~m? +# 2129| v2129_17(void) = ReturnVoid : +# 2129| v2129_18(void) = AliasedUse : ~m? +# 2129| v2129_19(void) = ExitFunction : + +# 2131| void ClassWithDestructor::set_x(char) +# 2131| Block 0 +# 2131| v2131_1(void) = EnterFunction : +# 2131| mu2131_2(unknown) = AliasedDefinition : +# 2131| mu2131_3(unknown) = InitializeNonLocal : +# 2131| r2131_4(glval) = VariableAddress[#this] : +# 2131| mu2131_5(glval) = InitializeParameter[#this] : &:r2131_4 +# 2131| r2131_6(glval) = Load[#this] : &:r2131_4, ~m? +# 2131| mu2131_7(ClassWithDestructor) = InitializeIndirection[#this] : &:r2131_6 +# 2131| r2131_8(glval) = VariableAddress[y] : +# 2131| mu2131_9(char) = InitializeParameter[y] : &:r2131_8 +# 2131| r2131_10(glval) = VariableAddress[y] : +# 2131| r2131_11(char) = Load[y] : &:r2131_10, ~m? +# 2131| r2131_12(glval) = VariableAddress[#this] : +# 2131| r2131_13(ClassWithDestructor *) = Load[#this] : &:r2131_12, ~m? +# 2131| r2131_14(glval) = FieldAddress[x] : r2131_13 +# 2131| r2131_15(char *) = Load[?] : &:r2131_14, ~m? +# 2131| r2131_16(glval) = CopyValue : r2131_15 +# 2131| mu2131_17(char) = Store[?] : &:r2131_16, r2131_11 +# 2131| v2131_18(void) = NoOp : +# 2131| v2131_19(void) = ReturnIndirection[#this] : &:r2131_6, ~m? +# 2131| v2131_20(void) = ReturnVoid : +# 2131| v2131_21(void) = AliasedUse : ~m? +# 2131| v2131_22(void) = ExitFunction : + +# 2134| bool initialization_with_destructor_bool +# 2134| Block 0 +# 2134| v2134_1(void) = EnterFunction : +# 2134| mu2134_2(unknown) = AliasedDefinition : +# 2134| r2134_3(glval) = VariableAddress[initialization_with_destructor_bool] : +# 2134| r2134_4(bool) = Constant[1] : +# 2134| mu2134_5(bool) = Store[initialization_with_destructor_bool] : &:r2134_3, r2134_4 +# 2134| v2134_6(void) = ReturnVoid : +# 2134| v2134_7(void) = AliasedUse : ~m? +# 2134| v2134_8(void) = ExitFunction : + +# 2136| void initialization_with_destructor(bool, char) +# 2136| Block 0 +# 2136| v2136_1(void) = EnterFunction : +# 2136| mu2136_2(unknown) = AliasedDefinition : +# 2136| mu2136_3(unknown) = InitializeNonLocal : +# 2136| r2136_4(glval) = VariableAddress[b] : +# 2136| mu2136_5(bool) = InitializeParameter[b] : &:r2136_4 +# 2136| r2136_6(glval) = VariableAddress[c] : +# 2136| mu2136_7(char) = InitializeParameter[c] : &:r2136_6 +# 2137| r2137_1(glval) = VariableAddress[x] : +# 2137| mu2137_2(ClassWithDestructor) = Uninitialized[x] : &:r2137_1 +# 2137| r2137_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2137| v2137_4(void) = Call[ClassWithDestructor] : func:r2137_3, this:r2137_1 +# 2137| mu2137_5(unknown) = ^CallSideEffect : ~m? +# 2137| mu2137_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2137_1 +# 2137| r2137_7(glval) = VariableAddress[b] : +# 2137| r2137_8(bool) = Load[b] : &:r2137_7, ~m? +# 2137| v2137_9(void) = ConditionalBranch : r2137_8 +#-----| True -> Block 4 + +# 2140| Block 1 +# 2140| r2140_1(bool) = Constant[1] : + +# 2140| Block 2 +# 2140| r2140_2(glval) = VariableAddress[x] : +# 2140| mu2140_3(ClassWithDestructor) = Uninitialized[x] : &:r2140_2 +# 2140| r2140_4(glval) = FunctionAddress[ClassWithDestructor] : +# 2140| v2140_5(void) = Call[ClassWithDestructor] : func:r2140_4, this:r2140_2 +# 2140| mu2140_6(unknown) = ^CallSideEffect : ~m? +# 2140| mu2140_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2140_2 + +# 2141| Block 3 +# 2141| r2141_1(glval) = VariableAddress[x] : +# 2141| r2141_2(glval) = FunctionAddress[set_x] : +# 2141| r2141_3(char) = Constant[97] : +# 2141| v2141_4(void) = Call[set_x] : func:r2141_2, this:r2141_1, 0:r2141_3 +# 2141| mu2141_5(unknown) = ^CallSideEffect : ~m? +# 2141| v2141_6(void) = ^IndirectReadSideEffect[-1] : &:r2141_1, ~m? +# 2141| mu2141_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2141_1 + +# 2138| Block 4 +# 2138| r2138_1(glval) = VariableAddress[x] : +# 2138| r2138_2(glval) = FunctionAddress[set_x] : +# 2138| r2138_3(char) = Constant[97] : +# 2138| v2138_4(void) = Call[set_x] : func:r2138_2, this:r2138_1, 0:r2138_3 +# 2138| mu2138_5(unknown) = ^CallSideEffect : ~m? +# 2138| v2138_6(void) = ^IndirectReadSideEffect[-1] : &:r2138_1, ~m? +# 2138| mu2138_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2138_1 + +# 2143| Block 5 +# 2143| r2143_1(glval) = VariableAddress[x] : +# 2143| mu2143_2(ClassWithDestructor) = Uninitialized[x] : &:r2143_1 +# 2143| r2143_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2143| v2143_4(void) = Call[ClassWithDestructor] : func:r2143_3, this:r2143_1 +# 2143| mu2143_5(unknown) = ^CallSideEffect : ~m? +# 2143| mu2143_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2143_1 +# 2143| r2143_7(glval) = VariableAddress[c] : +# 2143| r2143_8(char) = Load[c] : &:r2143_7, ~m? +# 2143| r2143_9(int) = Convert : r2143_8 +# 2143| v2143_10(void) = Switch : r2143_9 +#-----| Case[97] -> Block 6 +#-----| Default -> Block 7 + +# 2144| Block 6 +# 2144| v2144_1(void) = NoOp : +# 2145| r2145_1(glval) = VariableAddress[x] : +# 2145| r2145_2(glval) = FunctionAddress[set_x] : +# 2145| r2145_3(char) = Constant[97] : +# 2145| v2145_4(void) = Call[set_x] : func:r2145_2, this:r2145_1, 0:r2145_3 +# 2145| mu2145_5(unknown) = ^CallSideEffect : ~m? +# 2145| v2145_6(void) = ^IndirectReadSideEffect[-1] : &:r2145_1, ~m? +# 2145| mu2145_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2145_1 +# 2146| v2146_1(void) = NoOp : +#-----| Goto -> Block 8 + +# 2147| Block 7 +# 2147| v2147_1(void) = NoOp : +# 2148| r2148_1(glval) = VariableAddress[x] : +# 2148| r2148_2(glval) = FunctionAddress[set_x] : +# 2148| r2148_3(char) = Constant[98] : +# 2148| v2148_4(void) = Call[set_x] : func:r2148_2, this:r2148_1, 0:r2148_3 +# 2148| mu2148_5(unknown) = ^CallSideEffect : ~m? +# 2148| v2148_6(void) = ^IndirectReadSideEffect[-1] : &:r2148_1, ~m? +# 2148| mu2148_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2148_1 +# 2149| v2149_1(void) = NoOp : +#-----| Goto -> Block 8 + +# 2150| Block 8 +# 2150| v2150_1(void) = NoOp : +# 2152| r2152_1(glval) = VariableAddress[x] : +# 2152| mu2152_2(ClassWithDestructor) = Uninitialized[x] : &:r2152_1 +# 2152| r2152_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2152| v2152_4(void) = Call[ClassWithDestructor] : func:r2152_3, this:r2152_1 +# 2152| mu2152_5(unknown) = ^CallSideEffect : ~m? +# 2152| mu2152_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2152_1 +# 2153| r2153_1(glval &>) = VariableAddress[(__range)] : +# 2153| r2153_2(glval>) = VariableAddress : +# 2153| r2153_3(vector &) = CopyValue : r2153_2 +# 2153| mu2153_4(vector &) = Store[(__range)] : &:r2153_1, r2153_3 +# 2153| r2153_5(glval) = VariableAddress[(__begin)] : +# 2153| r2153_6(glval &>) = VariableAddress[(__range)] : +# 2153| r2153_7(vector &) = Load[(__range)] : &:r2153_6, ~m? +#-----| r0_1(glval>) = CopyValue : r2153_7 +#-----| r0_2(glval>) = Convert : r0_1 +# 2153| r2153_8(glval) = FunctionAddress[begin] : +# 2153| r2153_9(iterator) = Call[begin] : func:r2153_8, this:r0_2 +# 2153| mu2153_10(unknown) = ^CallSideEffect : ~m? +#-----| v0_3(void) = ^IndirectReadSideEffect[-1] : &:r0_2, ~m? +# 2153| mu2153_11(iterator) = Store[(__begin)] : &:r2153_5, r2153_9 +# 2153| r2153_12(glval) = VariableAddress[(__end)] : +# 2153| r2153_13(glval &>) = VariableAddress[(__range)] : +# 2153| r2153_14(vector &) = Load[(__range)] : &:r2153_13, ~m? +#-----| r0_4(glval>) = CopyValue : r2153_14 +#-----| r0_5(glval>) = Convert : r0_4 +# 2153| r2153_15(glval) = FunctionAddress[end] : +# 2153| r2153_16(iterator) = Call[end] : func:r2153_15, this:r0_5 +# 2153| mu2153_17(unknown) = ^CallSideEffect : ~m? +#-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, ~m? +# 2153| mu2153_18(iterator) = Store[(__end)] : &:r2153_12, r2153_16 +#-----| Goto -> Block 9 + +# 2153| Block 9 +# 2153| r2153_19(glval) = VariableAddress[(__begin)] : +#-----| r0_7(glval) = Convert : r2153_19 +# 2153| r2153_20(glval) = FunctionAddress[operator!=] : +# 2153| r2153_21(glval) = VariableAddress[(__end)] : +# 2153| r2153_22(iterator) = Load[(__end)] : &:r2153_21, ~m? +# 2153| r2153_23(bool) = Call[operator!=] : func:r2153_20, this:r0_7, 0:r2153_22 +# 2153| mu2153_24(unknown) = ^CallSideEffect : ~m? +#-----| v0_8(void) = ^IndirectReadSideEffect[-1] : &:r0_7, ~m? +# 2153| v2153_25(void) = ConditionalBranch : r2153_23 +#-----| False -> Block 11 +#-----| True -> Block 10 + +# 2153| Block 10 +# 2153| r2153_26(glval) = VariableAddress[y] : +# 2153| r2153_27(glval) = VariableAddress[(__begin)] : +#-----| r0_9(glval) = Convert : r2153_27 +# 2153| r2153_28(glval) = FunctionAddress[operator*] : +# 2153| r2153_29(ClassWithDestructor &) = Call[operator*] : func:r2153_28, this:r0_9 +# 2153| mu2153_30(unknown) = ^CallSideEffect : ~m? +#-----| v0_10(void) = ^IndirectReadSideEffect[-1] : &:r0_9, ~m? +# 2153| r2153_31(ClassWithDestructor) = Load[?] : &:r2153_29, ~m? +# 2153| mu2153_32(ClassWithDestructor) = Store[y] : &:r2153_26, r2153_31 +# 2154| r2154_1(glval) = VariableAddress[y] : +# 2154| r2154_2(glval) = FunctionAddress[set_x] : +# 2154| r2154_3(char) = Constant[97] : +# 2154| v2154_4(void) = Call[set_x] : func:r2154_2, this:r2154_1, 0:r2154_3 +# 2154| mu2154_5(unknown) = ^CallSideEffect : ~m? +# 2154| v2154_6(void) = ^IndirectReadSideEffect[-1] : &:r2154_1, ~m? +# 2154| mu2154_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2154_1 +# 2153| r2153_33(glval) = VariableAddress[(__begin)] : +# 2153| r2153_34(glval) = FunctionAddress[operator++] : +# 2153| r2153_35(iterator &) = Call[operator++] : func:r2153_34, this:r2153_33 +# 2153| mu2153_36(unknown) = ^CallSideEffect : ~m? +# 2153| v2153_37(void) = ^IndirectReadSideEffect[-1] : &:r2153_33, ~m? +# 2153| mu2153_38(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2153_33 +# 2153| r2153_39(glval) = CopyValue : r2153_35 +#-----| Goto (back edge) -> Block 9 + +# 2155| Block 11 +# 2155| v2155_1(void) = NoOp : +# 2136| v2136_8(void) = ReturnVoid : +# 2136| v2136_9(void) = AliasedUse : ~m? +# 2136| v2136_10(void) = ExitFunction : + perf-regression.cpp: # 6| void Big::Big() # 6| Block 0 diff --git a/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency.expected b/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency.expected index b93c7d2649f..bdc0ef3463e 100644 --- a/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency.expected +++ b/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency.expected @@ -6,6 +6,7 @@ missingOperandType duplicateChiOperand sideEffectWithoutPrimary instructionWithoutSuccessor +| ir.cpp:2138:9:2138:9 | IndirectMayWriteSideEffect: x | Instruction 'IndirectMayWriteSideEffect: x' has no successors in function '$@'. | ir.cpp:2136:6:2136:35 | void initialization_with_destructor(bool, char) | void initialization_with_destructor(bool, char) | ambiguousSuccessors unexplainedLoop unnecessaryPhiInstruction diff --git a/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency_unsound.expected b/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency_unsound.expected index b93c7d2649f..bdc0ef3463e 100644 --- a/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency_unsound.expected +++ b/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency_unsound.expected @@ -6,6 +6,7 @@ missingOperandType duplicateChiOperand sideEffectWithoutPrimary instructionWithoutSuccessor +| ir.cpp:2138:9:2138:9 | IndirectMayWriteSideEffect: x | Instruction 'IndirectMayWriteSideEffect: x' has no successors in function '$@'. | ir.cpp:2136:6:2136:35 | void initialization_with_destructor(bool, char) | void initialization_with_destructor(bool, char) | ambiguousSuccessors unexplainedLoop unnecessaryPhiInstruction From 69c0f0cb6abc0d486cd1c0607049998197975109 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Tue, 13 Feb 2024 11:39:21 +0100 Subject: [PATCH 175/378] C#: Address review comments. --- csharp/ql/lib/semmle/code/csharp/Callable.qll | 15 +-- .../dataflow/internal/DataFlowPrivate.qll | 92 +++++++++++++------ .../dataflow/internal/DataFlowPublic.qll | 2 +- .../constructors/PrimaryConstructor.ql | 4 - 4 files changed, 69 insertions(+), 44 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/Callable.qll b/csharp/ql/lib/semmle/code/csharp/Callable.qll index 829cc3bf63e..be42d84d7de 100644 --- a/csharp/ql/lib/semmle/code/csharp/Callable.qll +++ b/csharp/ql/lib/semmle/code/csharp/Callable.qll @@ -370,15 +370,6 @@ class Constructor extends DotNet::Constructor, Callable, Member, Attributable, @ predicate isParameterless() { this.getNumberOfParameters() = 0 } override string getUndecoratedName() { result = ".ctor" } - - /** - * Holds if this a primary constructor in source code. - */ - predicate isPrimary() { - not this.hasBody() and - this.getDeclaringType().fromSource() and - this.fromSource() - } } /** @@ -424,7 +415,11 @@ class InstanceConstructor extends Constructor { * ``` */ class PrimaryConstructor extends Constructor { - PrimaryConstructor() { this.isPrimary() } + PrimaryConstructor() { + not this.hasBody() and + this.getDeclaringType().fromSource() and + this.fromSource() + } override string getAPrimaryQlClass() { result = "PrimaryConstructor" } } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll index 995173c9ed0..bccaf297a15 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll @@ -39,17 +39,15 @@ predicate isArgumentNode(ArgumentNode arg, DataFlowCall c, ArgumentPosition pos) } /** - * Gets the control flow node used for data flow purposes for the primary constructor + * Gets a control flow node used for data flow purposes for the primary constructor * parameter access `pa`. */ -private ControlFlow::Node getPrimaryConstructorParameterCfn(ParameterAccess pa) { +private ControlFlow::Node getAPrimaryConstructorParameterCfn(ParameterAccess pa) { pa.getTarget().getCallable() instanceof PrimaryConstructor and ( - pa instanceof ParameterRead and - result = pa.getAControlFlowNode() + result = pa.(ParameterRead).getAControlFlowNode() or - pa instanceof ParameterWrite and - exists(AssignExpr ae | pa = ae.getLValue() and result = ae.getAControlFlowNode()) + pa = any(AssignableDefinition def | result = def.getAControlFlowNode()).getTargetAccess() ) } @@ -141,9 +139,10 @@ private module ThisFlow { or n.asExprAtNode(cfn) = any(Expr e | e instanceof ThisAccess or e instanceof BaseAccess) or - exists(InstanceParameterAccessNode pan | pan = n | - pan.getUnderlyingControlFlowNode() = cfn and pan.isPreUpdate() - ) + n = + any(InstanceParameterAccessNode pan | + pan.getUnderlyingControlFlowNode() = cfn and pan.isPreUpdate() + ) } private predicate thisAccess(Node n, BasicBlock bb, int i) { @@ -230,7 +229,7 @@ CIL::DataFlowNode asCilDataFlowNode(Node node) { /** Provides predicates related to local data flow. */ module LocalFlow { - private class LocalExprStepConfiguration extends ControlFlowReachabilityConfiguration { + class LocalExprStepConfiguration extends ControlFlowReachabilityConfiguration { LocalExprStepConfiguration() { this = "LocalExprStepConfiguration" } override predicate candidate( @@ -955,7 +954,7 @@ private module Cached { } or TFlowInsensitiveFieldNode(FieldOrProperty f) { f.isFieldLike() } or TInstanceParameterAccessNode(ControlFlow::Node cfn, boolean isPostUpdate) { - exists(ParameterAccess pa | cfn = getPrimaryConstructorParameterCfn(pa) | + exists(ParameterAccess pa | cfn = getAPrimaryConstructorParameterCfn(pa) | isPostUpdate = false or pa instanceof ParameterWrite and isPostUpdate = true @@ -1795,6 +1794,19 @@ class FlowSummaryNode extends NodeImpl, TFlowSummaryNode { /** * A data-flow node used to model reading and writing of primary constructor parameters. + * For example, in + * ```csharp + * public class C(object o) + * { + * public object GetParam() => o; // (1) + * + * public void SetParam(object value) => o = value; // (2) + * } + * ``` + * the first access to o (1) is modeled as this.o_backing_field and + * the second access to o (2) is modeled as this.o_backing_field = value. + * Both models need a pre-update this node, and the latter need an additional post-update this access, + * all of which are represented by an InstanceParameterAccessNode node. */ class InstanceParameterAccessNode extends NodeImpl, TInstanceParameterAccessNode { private ControlFlow::Node cfn; @@ -1803,7 +1815,7 @@ class InstanceParameterAccessNode extends NodeImpl, TInstanceParameterAccessNode InstanceParameterAccessNode() { this = TInstanceParameterAccessNode(cfn, isPostUpdate) and - exists(ParameterAccess pa | cfn = getPrimaryConstructorParameterCfn(pa) and pa.getTarget() = p) + exists(ParameterAccess pa | cfn = getAPrimaryConstructorParameterCfn(pa) and pa.getTarget() = p) } override DataFlowCallable getEnclosingCallableImpl() { @@ -1836,6 +1848,16 @@ class InstanceParameterAccessNode extends NodeImpl, TInstanceParameterAccessNode /** * A data-flow node used to synthesize the body of a primary constructor. + * + * For example, in + * ```csharp + * public class C(object o) { } + * ``` + * we synthesize the primary constructor for C as + * ```csharp + * public C(object o) => this.o_backing_field = o; + * ``` + * The synthesized (pre/post-update) this access is represented an PrimaryConstructorThisAccessNode node. */ class PrimaryConstructorThisAccessNode extends NodeImpl, TPrimaryConstructorThisAccessNode { private Parameter p; @@ -2000,13 +2022,25 @@ private PropertyContent getResultContent() { result.getProperty() = any(SystemThreadingTasksTaskTClass c_).getResultProperty() } -private predicate primaryConstructorParameterStore(Node node1, ContentSet c, Node node2) { - exists(AssignExpr ae, ParameterWrite pa, PrimaryConstructor constructor | - ae.getLValue() = pa and - pa.getTarget() = constructor.getAParameter() and - node1.asExpr() = ae.getRValue() and - node2 = TInstanceParameterAccessNode(ae.getAControlFlowNode(), true) and - c.(PrimaryConstructorParameterContent).getParameter() = pa.getTarget() +private predicate primaryConstructorParameterStore( + Node node1, PrimaryConstructorParameterContent c, Node node2 +) { + exists(ControlFlow::Node cfn, Parameter p | + node2 = TInstanceParameterAccessNode(cfn, true) and + c.getParameter() = p + | + // direct assignment + exists(LocalFlow::LocalExprStepConfiguration conf, AssignableDefinition def | + conf.hasDefPath(_, node1.(ExprNode).getControlFlowNode(), def, cfn) and + p = def.getTarget() + ) + or + // indirect assignment (for example as an `out` argument) + exists(Ssa::ExplicitDefinition def | + def = node1.(SsaDefinitionExtNode).getDefinitionExt() and + p = def.getSourceVariable().getAssignable() and + cfn = def.getControlFlowNode() + ) ) } @@ -2147,10 +2181,12 @@ predicate readStep(Node node1, ContentSet c, Node node2) { node2.asExpr().(AwaitExpr).getExpr() = node1.asExpr() and c = getResultContent() or - exists(InstanceParameterAccessNode n | n = node1 | - n.getUnderlyingControlFlowNode() = node2.(ExprNode).getControlFlowNode() and - n.getParameter() = c.(PrimaryConstructorParameterContent).getParameter() - ) and + node1 = + any(InstanceParameterAccessNode n | + n.getUnderlyingControlFlowNode() = node2.(ExprNode).getControlFlowNode() and + n.getParameter() = c.(PrimaryConstructorParameterContent).getParameter() and + n.isPreUpdate() + ) and node2.asExpr() instanceof ParameterRead or // node1 = (..., node2, ...) @@ -2216,9 +2252,7 @@ predicate clearsContent(Node n, ContentSet c) { not f.isRef() ) or - exists(Node n1 | - primaryConstructorParameterStore(_, c, n1) and n = n1.(PostUpdateNode).getPreUpdateNode() - ) + n = any(PostUpdateNode n1 | primaryConstructorParameterStore(_, c, n1)).getPreUpdateNode() } /** @@ -2512,11 +2546,11 @@ module PostUpdateNodes { private class InstanceParameterAccessPostUpdateNode extends PostUpdateNode, InstanceParameterAccessNode { - private ControlFlow::Node cfg; + private ControlFlow::Node cfn; - InstanceParameterAccessPostUpdateNode() { this = TInstanceParameterAccessNode(cfg, true) } + InstanceParameterAccessPostUpdateNode() { this = TInstanceParameterAccessNode(cfn, true) } - override Node getPreUpdateNode() { result = TInstanceParameterAccessNode(cfg, false) } + override Node getPreUpdateNode() { result = TInstanceParameterAccessNode(cfn, false) } override string toStringImpl() { result = "[post] this" } } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPublic.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPublic.qll index 13562e78128..1dc3f77a450 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPublic.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPublic.qll @@ -251,7 +251,7 @@ class PrimaryConstructorParameterContent extends Content, TPrimaryConstructorPar /** Gets the underlying parameter. */ Parameter getParameter() { result = p } - override string toString() { result = "parameter field " + p.getName() } + override string toString() { result = "parameter " + p.getName() } override Location getLocation() { result = p.getLocation() } } diff --git a/csharp/ql/test/library-tests/constructors/PrimaryConstructor.ql b/csharp/ql/test/library-tests/constructors/PrimaryConstructor.ql index 428b8d14559..0a2fb2f23fe 100644 --- a/csharp/ql/test/library-tests/constructors/PrimaryConstructor.ql +++ b/csharp/ql/test/library-tests/constructors/PrimaryConstructor.ql @@ -1,7 +1,3 @@ -/** - * @name Test for primary constructors - */ - import csharp from PrimaryConstructor c From eaf129d5192cc69f8caa9af82ab9c65b3685a7ae Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Tue, 13 Feb 2024 11:40:46 +0100 Subject: [PATCH 176/378] C#: Update expected test output. --- .../constructors/ConstructorFlow.expected | 72 +++++++++---------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/csharp/ql/test/library-tests/dataflow/constructors/ConstructorFlow.expected b/csharp/ql/test/library-tests/dataflow/constructors/ConstructorFlow.expected index 94a885204ca..dc0e19de557 100644 --- a/csharp/ql/test/library-tests/dataflow/constructors/ConstructorFlow.expected +++ b/csharp/ql/test/library-tests/dataflow/constructors/ConstructorFlow.expected @@ -32,8 +32,8 @@ edges | Constructors.cs:44:28:44:35 | 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: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 field o22param] : Object | Constructors.cs:48:32:48:39 | access to parameter o22param : Object | provenance | | -| Constructors.cs:48:32:48:39 | this : C2 [parameter field o22param] : Object | Constructors.cs:48:32:48:39 | access to parameter o22param : 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: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 : 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 | | @@ -58,38 +58,38 @@ edges | Constructors.cs:69:18:69:33 | object creation of type C2 : C2 [field Obj21] : Object | Constructors.cs:70:14:70:15 | access to local variable c2 : C2 [field Obj21] : Object | provenance | | | Constructors.cs:69:18:69:33 | object creation of type C2 : C2 [field Obj21] : Object | Constructors.cs:72:14:72:15 | access to local variable c2 : C2 [field Obj21] : Object | provenance | | | Constructors.cs:69:18:69:33 | object creation of type C2 : C2 [field Obj21] : Object | Constructors.cs:72:14:72:15 | access to local variable c2 : C2 [field Obj21] : Object | provenance | | -| Constructors.cs:69:18:69:33 | object creation of type C2 : C2 [parameter field o22param] : Object | Constructors.cs:71:14:71:15 | access to local variable c2 : C2 [parameter field o22param] : Object | provenance | | -| Constructors.cs:69:18:69:33 | object creation of type C2 : C2 [parameter field o22param] : Object | Constructors.cs:71:14:71:15 | access to local variable c2 : C2 [parameter field o22param] : Object | provenance | | +| Constructors.cs:69:18:69:33 | object creation of type C2 : C2 [parameter o22param] : Object | Constructors.cs:71:14:71:15 | access to local variable c2 : C2 [parameter o22param] : Object | provenance | | +| Constructors.cs:69:18:69:33 | object creation of type C2 : C2 [parameter o22param] : Object | Constructors.cs:71:14:71:15 | access to local variable c2 : C2 [parameter o22param] : Object | provenance | | | Constructors.cs:69:25:69:27 | access to local variable o21 : Object | Constructors.cs:44:28:44:35 | o21param : Object | provenance | | | Constructors.cs:69:25:69:27 | access to local variable o21 : Object | Constructors.cs:44:28:44:35 | o21param : Object | provenance | | | Constructors.cs:69:25:69:27 | access to local variable o21 : Object | Constructors.cs:69:18:69:33 | object creation of type C2 : C2 [field Obj21] : Object | provenance | | | Constructors.cs:69:25:69:27 | access to local variable o21 : Object | Constructors.cs:69:18:69:33 | object creation of type C2 : C2 [field Obj21] : Object | provenance | | | Constructors.cs:69:30:69:32 | access to local variable o22 : Object | Constructors.cs:44:45:44:52 | o22param : Object | provenance | | | Constructors.cs:69:30:69:32 | access to local variable o22 : Object | Constructors.cs:44:45:44:52 | o22param : Object | provenance | | -| Constructors.cs:69:30:69:32 | access to local variable o22 : Object | Constructors.cs:69:18:69:33 | object creation of type C2 : C2 [parameter field o22param] : Object | provenance | | -| Constructors.cs:69:30:69:32 | access to local variable o22 : Object | Constructors.cs:69:18:69:33 | object creation of type C2 : C2 [parameter field o22param] : Object | provenance | | +| Constructors.cs:69:30:69:32 | access to local variable o22 : Object | Constructors.cs:69:18:69:33 | object creation of type C2 : C2 [parameter o22param] : Object | provenance | | +| Constructors.cs:69:30:69:32 | access to local variable o22 : Object | Constructors.cs:69:18:69:33 | object creation of type C2 : C2 [parameter o22param] : Object | provenance | | | Constructors.cs:70:14:70:15 | access to local variable c2 : C2 [field Obj21] : Object | Constructors.cs:70:14:70:21 | access to field Obj21 | provenance | | | Constructors.cs:70:14:70:15 | access to local variable c2 : C2 [field Obj21] : Object | Constructors.cs:70:14:70:21 | access to field Obj21 | provenance | | -| Constructors.cs:71:14:71:15 | access to local variable c2 : C2 [parameter field o22param] : Object | Constructors.cs:48:32:48:39 | this : C2 [parameter field o22param] : Object | provenance | | -| Constructors.cs:71:14:71:15 | access to local variable c2 : C2 [parameter field o22param] : Object | Constructors.cs:48:32:48:39 | this : C2 [parameter field o22param] : Object | provenance | | -| Constructors.cs:71:14:71:15 | access to local variable c2 : C2 [parameter field o22param] : Object | Constructors.cs:71:14:71:21 | access to property Obj22 | provenance | | -| Constructors.cs:71:14:71:15 | access to local variable c2 : C2 [parameter field o22param] : Object | Constructors.cs:71:14:71:21 | access to property Obj22 | provenance | | +| Constructors.cs:71:14:71:15 | access to local variable c2 : C2 [parameter o22param] : Object | Constructors.cs:48:32:48:39 | this : C2 [parameter o22param] : Object | provenance | | +| Constructors.cs:71:14:71:15 | access to local variable c2 : C2 [parameter o22param] : Object | Constructors.cs:48:32:48:39 | this : C2 [parameter o22param] : Object | provenance | | +| Constructors.cs:71:14:71:15 | access to local variable c2 : C2 [parameter o22param] : Object | Constructors.cs:71:14:71:21 | access to property Obj22 | provenance | | +| Constructors.cs:71:14:71:15 | access to local variable c2 : C2 [parameter o22param] : Object | Constructors.cs:71:14:71:21 | access to property Obj22 | provenance | | | Constructors.cs:72:14:72:15 | access to local variable c2 : C2 [field Obj21] : Object | Constructors.cs:50:32:50:36 | this : C2 [field Obj21] : Object | provenance | | | Constructors.cs:72:14:72:15 | access to local variable c2 : C2 [field Obj21] : Object | Constructors.cs:50:32:50:36 | this : C2 [field Obj21] : Object | provenance | | | Constructors.cs:72:14:72:15 | access to local variable c2 : C2 [field Obj21] : Object | Constructors.cs:72:14:72:21 | access to property Obj23 | provenance | | | Constructors.cs:72:14:72:15 | access to local variable c2 : C2 [field Obj21] : Object | Constructors.cs:72:14:72:21 | access to property Obj23 | provenance | | | Constructors.cs:81:21:81:37 | call to method Source : Object | Constructors.cs:82:19:82:23 | access to local variable taint : Object | provenance | | | Constructors.cs:81:21:81:37 | call to method Source : Object | Constructors.cs:82:19:82:23 | access to local variable taint : Object | provenance | | -| Constructors.cs:82:9:82:10 | [post] access to local variable c2 : C2 [parameter field o22param] : Object | Constructors.cs:83:14:83:15 | access to local variable c2 : C2 [parameter field o22param] : Object | provenance | | -| Constructors.cs:82:9:82:10 | [post] access to local variable c2 : C2 [parameter field o22param] : Object | Constructors.cs:83:14:83:15 | access to local variable c2 : C2 [parameter field o22param] : Object | provenance | | +| Constructors.cs:82:9:82:10 | [post] access to local variable c2 : C2 [parameter o22param] : Object | Constructors.cs:83:14:83:15 | access to local variable c2 : C2 [parameter o22param] : Object | provenance | | +| Constructors.cs:82:9:82:10 | [post] access to local variable c2 : C2 [parameter o22param] : Object | Constructors.cs:83:14:83:15 | access to local variable c2 : C2 [parameter o22param] : Object | provenance | | | Constructors.cs:82:19:82:23 | access to local variable taint : Object | Constructors.cs:52:35:52:35 | o : Object | provenance | | | Constructors.cs:82:19:82:23 | access to local variable taint : Object | Constructors.cs:52:35:52:35 | o : Object | provenance | | -| Constructors.cs:82:19:82:23 | access to local variable taint : Object | Constructors.cs:82:9:82:10 | [post] access to local variable c2 : C2 [parameter field o22param] : Object | provenance | | -| Constructors.cs:82:19:82:23 | access to local variable taint : Object | Constructors.cs:82:9:82:10 | [post] access to local variable c2 : C2 [parameter field o22param] : Object | provenance | | -| Constructors.cs:83:14:83:15 | access to local variable c2 : C2 [parameter field o22param] : Object | Constructors.cs:48:32:48:39 | this : C2 [parameter field o22param] : Object | provenance | | -| Constructors.cs:83:14:83:15 | access to local variable c2 : C2 [parameter field o22param] : Object | Constructors.cs:48:32:48:39 | this : C2 [parameter field o22param] : Object | provenance | | -| Constructors.cs:83:14:83:15 | access to local variable c2 : C2 [parameter field o22param] : Object | Constructors.cs:83:14:83:21 | access to property Obj22 | provenance | | -| Constructors.cs:83:14:83:15 | access to local variable c2 : C2 [parameter field o22param] : Object | Constructors.cs:83:14:83:21 | access to property Obj22 | provenance | | +| Constructors.cs:82:19:82:23 | access to local variable taint : Object | Constructors.cs:82:9:82:10 | [post] access to local variable c2 : C2 [parameter o22param] : Object | provenance | | +| Constructors.cs:82:19:82:23 | access to local variable taint : Object | Constructors.cs:82:9:82:10 | [post] access to local variable c2 : C2 [parameter o22param] : Object | provenance | | +| Constructors.cs:83:14:83:15 | access to local variable c2 : C2 [parameter o22param] : Object | Constructors.cs:48:32:48:39 | this : C2 [parameter o22param] : Object | provenance | | +| Constructors.cs:83:14:83:15 | access to local variable c2 : C2 [parameter o22param] : Object | Constructors.cs:48:32:48:39 | this : C2 [parameter o22param] : Object | provenance | | +| Constructors.cs:83:14:83:15 | access to local variable c2 : C2 [parameter o22param] : Object | Constructors.cs:83:14:83:21 | access to property Obj22 | provenance | | +| Constructors.cs:83:14:83:15 | access to local variable c2 : C2 [parameter o22param] : Object | Constructors.cs:83:14:83:21 | access to property Obj22 | provenance | | nodes | Constructors.cs:5:24:5:25 | [post] this access : C_no_ctor [field s1] : Object | semmle.label | [post] this access : C_no_ctor [field s1] : Object | | Constructors.cs:5:24:5:25 | [post] this access : C_no_ctor [field s1] : Object | semmle.label | [post] this access : C_no_ctor [field s1] : Object | @@ -135,8 +135,8 @@ nodes | Constructors.cs:46:31:46:38 | access to parameter o21param : Object | semmle.label | access to parameter o21param : Object | | Constructors.cs:48:32:48:39 | access to parameter o22param : Object | semmle.label | access to parameter o22param : Object | | Constructors.cs:48:32:48:39 | access to parameter o22param : Object | semmle.label | access to parameter o22param : Object | -| Constructors.cs:48:32:48:39 | this : C2 [parameter field o22param] : Object | semmle.label | this : C2 [parameter field o22param] : Object | -| Constructors.cs:48:32:48:39 | this : C2 [parameter field o22param] : Object | semmle.label | this : C2 [parameter field o22param] : Object | +| Constructors.cs:48:32:48:39 | this : C2 [parameter o22param] : Object | semmle.label | this : C2 [parameter o22param] : Object | +| Constructors.cs:48:32:48:39 | this : C2 [parameter o22param] : Object | semmle.label | this : C2 [parameter o22param] : Object | | Constructors.cs:50:32:50:36 | access to field Obj21 : Object | semmle.label | access to field Obj21 : Object | | 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 | @@ -163,8 +163,8 @@ nodes | Constructors.cs:68:19:68:35 | call to method Source : Object | semmle.label | call to method Source : Object | | Constructors.cs:69:18:69:33 | object creation of type C2 : C2 [field Obj21] : Object | semmle.label | object creation of type C2 : C2 [field Obj21] : Object | | Constructors.cs:69:18:69:33 | object creation of type C2 : C2 [field Obj21] : Object | semmle.label | object creation of type C2 : C2 [field Obj21] : Object | -| Constructors.cs:69:18:69:33 | object creation of type C2 : C2 [parameter field o22param] : Object | semmle.label | object creation of type C2 : C2 [parameter field o22param] : Object | -| Constructors.cs:69:18:69:33 | object creation of type C2 : C2 [parameter field o22param] : Object | semmle.label | object creation of type C2 : C2 [parameter field o22param] : Object | +| Constructors.cs:69:18:69:33 | object creation of type C2 : C2 [parameter o22param] : Object | semmle.label | object creation of type C2 : C2 [parameter o22param] : Object | +| Constructors.cs:69:18:69:33 | object creation of type C2 : C2 [parameter o22param] : Object | semmle.label | object creation of type C2 : C2 [parameter o22param] : Object | | Constructors.cs:69:25:69:27 | access to local variable o21 : Object | semmle.label | access to local variable o21 : Object | | Constructors.cs:69:25:69:27 | access to local variable o21 : Object | semmle.label | access to local variable o21 : Object | | Constructors.cs:69:30:69:32 | access to local variable o22 : Object | semmle.label | access to local variable o22 : Object | @@ -173,8 +173,8 @@ nodes | Constructors.cs:70:14:70:15 | access to local variable c2 : C2 [field Obj21] : Object | semmle.label | access to local variable c2 : C2 [field Obj21] : Object | | Constructors.cs:70:14:70:21 | access to field Obj21 | semmle.label | access to field Obj21 | | Constructors.cs:70:14:70:21 | access to field Obj21 | semmle.label | access to field Obj21 | -| Constructors.cs:71:14:71:15 | access to local variable c2 : C2 [parameter field o22param] : Object | semmle.label | access to local variable c2 : C2 [parameter field o22param] : Object | -| Constructors.cs:71:14:71:15 | access to local variable c2 : C2 [parameter field o22param] : Object | semmle.label | access to local variable c2 : C2 [parameter field o22param] : Object | +| Constructors.cs:71:14:71:15 | access to local variable c2 : C2 [parameter o22param] : Object | semmle.label | access to local variable c2 : C2 [parameter o22param] : Object | +| Constructors.cs:71:14:71:15 | access to local variable c2 : C2 [parameter o22param] : Object | semmle.label | access to local variable c2 : C2 [parameter o22param] : Object | | Constructors.cs:71:14:71:21 | access to property Obj22 | semmle.label | access to property Obj22 | | Constructors.cs:71:14:71:21 | access to property Obj22 | semmle.label | access to property Obj22 | | Constructors.cs:72:14:72:15 | access to local variable c2 : C2 [field Obj21] : Object | semmle.label | access to local variable c2 : C2 [field Obj21] : Object | @@ -183,12 +183,12 @@ nodes | Constructors.cs:72:14:72:21 | access to property Obj23 | semmle.label | access to property Obj23 | | Constructors.cs:81:21:81:37 | call to method Source : Object | semmle.label | call to method Source : Object | | Constructors.cs:81:21:81:37 | call to method Source : Object | semmle.label | call to method Source : Object | -| Constructors.cs:82:9:82:10 | [post] access to local variable c2 : C2 [parameter field o22param] : Object | semmle.label | [post] access to local variable c2 : C2 [parameter field o22param] : Object | -| Constructors.cs:82:9:82:10 | [post] access to local variable c2 : C2 [parameter field o22param] : Object | semmle.label | [post] access to local variable c2 : C2 [parameter field o22param] : Object | +| Constructors.cs:82:9:82:10 | [post] access to local variable c2 : C2 [parameter o22param] : Object | semmle.label | [post] access to local variable c2 : C2 [parameter o22param] : Object | +| Constructors.cs:82:9:82:10 | [post] access to local variable c2 : C2 [parameter o22param] : Object | semmle.label | [post] access to local variable c2 : C2 [parameter o22param] : Object | | Constructors.cs:82:19:82:23 | access to local variable taint : Object | semmle.label | access to local variable taint : Object | | Constructors.cs:82:19:82:23 | access to local variable taint : Object | semmle.label | access to local variable taint : Object | -| Constructors.cs:83:14:83:15 | access to local variable c2 : C2 [parameter field o22param] : Object | semmle.label | access to local variable c2 : C2 [parameter field o22param] : Object | -| Constructors.cs:83:14:83:15 | access to local variable c2 : C2 [parameter field o22param] : Object | semmle.label | access to local variable c2 : C2 [parameter field o22param] : Object | +| Constructors.cs:83:14:83:15 | access to local variable c2 : C2 [parameter o22param] : Object | semmle.label | access to local variable c2 : C2 [parameter o22param] : Object | +| Constructors.cs:83:14:83:15 | access to local variable c2 : C2 [parameter o22param] : Object | semmle.label | access to local variable c2 : C2 [parameter o22param] : Object | | Constructors.cs:83:14:83:21 | access to property Obj22 | semmle.label | access to property Obj22 | | Constructors.cs:83:14:83:21 | access to property Obj22 | semmle.label | access to property Obj22 | subpaths @@ -196,16 +196,16 @@ subpaths | Constructors.cs:61:25:61:25 | access to local variable o : Object | Constructors.cs:41:26:41:26 | o : Object | Constructors.cs:41:32:41:34 | [post] this access : C1 [field Obj] : Object | Constructors.cs:61:18:61:26 | object creation of type C1 : C1 [field Obj] : Object | | Constructors.cs:69:25:69:27 | access to local variable o21 : Object | Constructors.cs:44:28:44:35 | o21param : Object | Constructors.cs:46:23:46:27 | [post] this access : C2 [field Obj21] : Object | Constructors.cs:69:18:69:33 | object creation of type C2 : C2 [field Obj21] : Object | | Constructors.cs:69:25:69:27 | access to local variable o21 : Object | Constructors.cs:44:28:44:35 | o21param : Object | Constructors.cs:46:23:46:27 | [post] this access : C2 [field Obj21] : Object | Constructors.cs:69:18:69:33 | object creation of type C2 : C2 [field Obj21] : Object | -| Constructors.cs:69:30:69:32 | access to local variable o22 : Object | Constructors.cs:44:45:44:52 | o22param : Object | Constructors.cs:44:45:44:52 | o22param : Object | Constructors.cs:69:18:69:33 | object creation of type C2 : C2 [parameter field o22param] : Object | -| Constructors.cs:69:30:69:32 | access to local variable o22 : Object | Constructors.cs:44:45:44:52 | o22param : Object | Constructors.cs:44:45:44:52 | o22param : Object | Constructors.cs:69:18:69:33 | object creation of type C2 : C2 [parameter field o22param] : Object | -| Constructors.cs:71:14:71:15 | access to local variable c2 : C2 [parameter field o22param] : Object | Constructors.cs:48:32:48:39 | this : C2 [parameter field o22param] : Object | Constructors.cs:48:32:48:39 | access to parameter o22param : Object | Constructors.cs:71:14:71:21 | access to property Obj22 | -| Constructors.cs:71:14:71:15 | access to local variable c2 : C2 [parameter field o22param] : Object | Constructors.cs:48:32:48:39 | this : C2 [parameter field o22param] : Object | Constructors.cs:48:32:48:39 | access to parameter o22param : Object | Constructors.cs:71:14:71:21 | access to property Obj22 | +| Constructors.cs:69:30:69:32 | access to local variable o22 : Object | Constructors.cs:44:45:44:52 | o22param : Object | Constructors.cs:44:45:44:52 | o22param : Object | Constructors.cs:69:18:69:33 | object creation of type C2 : C2 [parameter o22param] : Object | +| Constructors.cs:69:30:69:32 | access to local variable o22 : Object | Constructors.cs:44:45:44:52 | o22param : Object | Constructors.cs:44:45:44:52 | o22param : Object | Constructors.cs:69:18:69:33 | object creation of type C2 : C2 [parameter o22param] : Object | +| Constructors.cs:71:14:71: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:71:14:71:21 | access to property Obj22 | +| Constructors.cs:71:14:71: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:71:14:71:21 | access to property Obj22 | | Constructors.cs:72:14:72: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:72:14:72:21 | access to property Obj23 | | Constructors.cs:72:14:72: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:72:14:72:21 | access to property Obj23 | -| Constructors.cs:82:19:82:23 | access to local variable taint : Object | Constructors.cs:52:35:52:35 | o : Object | Constructors.cs:54:24:54:24 | access to parameter o : Object | Constructors.cs:82:9:82:10 | [post] access to local variable c2 : C2 [parameter field o22param] : Object | -| Constructors.cs:82:19:82:23 | access to local variable taint : Object | Constructors.cs:52:35:52:35 | o : Object | Constructors.cs:54:24:54:24 | access to parameter o : Object | Constructors.cs:82:9:82:10 | [post] access to local variable c2 : C2 [parameter field o22param] : Object | -| Constructors.cs:83:14:83:15 | access to local variable c2 : C2 [parameter field o22param] : Object | Constructors.cs:48:32:48:39 | this : C2 [parameter field o22param] : Object | Constructors.cs:48:32:48:39 | access to parameter o22param : Object | Constructors.cs:83:14:83:21 | access to property Obj22 | -| Constructors.cs:83:14:83:15 | access to local variable c2 : C2 [parameter field o22param] : Object | Constructors.cs:48:32:48:39 | this : C2 [parameter field o22param] : Object | Constructors.cs:48:32:48:39 | access to parameter o22param : Object | Constructors.cs:83:14:83:21 | access to property Obj22 | +| Constructors.cs:82:19:82:23 | access to local variable taint : Object | Constructors.cs:52:35:52:35 | o : Object | Constructors.cs:54:24:54:24 | access to parameter o : Object | Constructors.cs:82:9:82:10 | [post] access to local variable c2 : C2 [parameter o22param] : Object | +| Constructors.cs:82:19:82:23 | access to local variable taint : Object | Constructors.cs:52:35:52:35 | o : Object | Constructors.cs:54:24:54:24 | access to parameter o : Object | Constructors.cs:82:9:82:10 | [post] access to local variable c2 : C2 [parameter o22param] : Object | +| Constructors.cs:83:14:83: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:83:14:83:21 | access to property Obj22 | +| Constructors.cs:83:14:83: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:83:14:83:21 | access to property Obj22 | #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 | | 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 | From 8efe34942fcb557e2e3227b0c046fe69df7cff5e Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Tue, 13 Feb 2024 12:02:25 +0100 Subject: [PATCH 177/378] C#: Add indirect assignment example. --- .../constructors/ConstructorFlow.expected | 237 +++++++++--------- .../dataflow/constructors/Constructors.cs | 18 ++ 2 files changed, 137 insertions(+), 118 deletions(-) diff --git a/csharp/ql/test/library-tests/dataflow/constructors/ConstructorFlow.expected b/csharp/ql/test/library-tests/dataflow/constructors/ConstructorFlow.expected index dc0e19de557..e26ef15a937 100644 --- a/csharp/ql/test/library-tests/dataflow/constructors/ConstructorFlow.expected +++ b/csharp/ql/test/library-tests/dataflow/constructors/ConstructorFlow.expected @@ -1,4 +1,5 @@ testFailures +| Constructors.cs:101:25:101:43 | // ... | Missing result:hasValueFlow=5 | edges | Constructors.cs:5:24:5:25 | [post] this access : C_no_ctor [field s1] : Object | Constructors.cs:9:27:9:41 | object creation of type C_no_ctor : C_no_ctor [field s1] : Object | provenance | | | Constructors.cs:5:24:5:25 | [post] this access : C_no_ctor [field s1] : Object | Constructors.cs:9:27:9:41 | object creation of type C_no_ctor : C_no_ctor [field s1] : Object | provenance | | @@ -40,56 +41,56 @@ edges | 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:24:54:24 | access to parameter o : Object | provenance | | | Constructors.cs:52:35:52:35 | o : Object | Constructors.cs:54:24:54:24 | access to parameter o : Object | provenance | | -| Constructors.cs:60:17:60:33 | call to method Source : Object | Constructors.cs:61:25:61:25 | access to local variable o : Object | provenance | | -| Constructors.cs:60:17:60:33 | call to method Source : Object | Constructors.cs:61:25:61:25 | access to local variable o : Object | provenance | | -| Constructors.cs:61:18:61:26 | object creation of type C1 : C1 [field Obj] : Object | Constructors.cs:62:14:62:15 | access to local variable c1 : C1 [field Obj] : Object | provenance | | -| Constructors.cs:61:18:61:26 | object creation of type C1 : C1 [field Obj] : Object | Constructors.cs:62:14:62:15 | access to local variable c1 : C1 [field Obj] : Object | provenance | | -| Constructors.cs:61:25:61:25 | access to local variable o : Object | Constructors.cs:41:26:41:26 | o : Object | provenance | | -| Constructors.cs:61:25:61:25 | access to local variable o : Object | Constructors.cs:41:26:41:26 | o : Object | provenance | | -| Constructors.cs:61:25:61:25 | access to local variable o : Object | Constructors.cs:61:18:61:26 | object creation of type C1 : C1 [field Obj] : Object | provenance | | -| Constructors.cs:61:25:61:25 | access to local variable o : Object | Constructors.cs:61:18:61:26 | object creation of type C1 : C1 [field Obj] : Object | provenance | | -| Constructors.cs:62:14:62:15 | access to local variable c1 : C1 [field Obj] : Object | Constructors.cs:62:14:62:19 | access to field Obj | provenance | | -| Constructors.cs:62:14:62:15 | access to local variable c1 : C1 [field Obj] : Object | Constructors.cs:62:14:62:19 | access to field Obj | provenance | | -| Constructors.cs:67:19:67:35 | call to method Source : Object | Constructors.cs:69:25:69:27 | access to local variable o21 : Object | provenance | | -| Constructors.cs:67:19:67:35 | call to method Source : Object | Constructors.cs:69:25:69:27 | access to local variable o21 : Object | provenance | | -| Constructors.cs:68:19:68:35 | call to method Source : Object | Constructors.cs:69:30:69:32 | access to local variable o22 : Object | provenance | | -| Constructors.cs:68:19:68:35 | call to method Source : Object | Constructors.cs:69:30:69:32 | access to local variable o22 : Object | provenance | | -| Constructors.cs:69:18:69:33 | object creation of type C2 : C2 [field Obj21] : Object | Constructors.cs:70:14:70:15 | access to local variable c2 : C2 [field Obj21] : Object | provenance | | -| Constructors.cs:69:18:69:33 | object creation of type C2 : C2 [field Obj21] : Object | Constructors.cs:70:14:70:15 | access to local variable c2 : C2 [field Obj21] : Object | provenance | | -| Constructors.cs:69:18:69:33 | object creation of type C2 : C2 [field Obj21] : Object | Constructors.cs:72:14:72:15 | access to local variable c2 : C2 [field Obj21] : Object | provenance | | -| Constructors.cs:69:18:69:33 | object creation of type C2 : C2 [field Obj21] : Object | Constructors.cs:72:14:72:15 | access to local variable c2 : C2 [field Obj21] : Object | provenance | | -| Constructors.cs:69:18:69:33 | object creation of type C2 : C2 [parameter o22param] : Object | Constructors.cs:71:14:71:15 | access to local variable c2 : C2 [parameter o22param] : Object | provenance | | -| Constructors.cs:69:18:69:33 | object creation of type C2 : C2 [parameter o22param] : Object | Constructors.cs:71:14:71:15 | access to local variable c2 : C2 [parameter o22param] : Object | provenance | | -| Constructors.cs:69:25:69:27 | access to local variable o21 : Object | Constructors.cs:44:28:44:35 | o21param : Object | provenance | | -| Constructors.cs:69:25:69:27 | access to local variable o21 : Object | Constructors.cs:44:28:44:35 | o21param : Object | provenance | | -| Constructors.cs:69:25:69:27 | access to local variable o21 : Object | Constructors.cs:69:18:69:33 | object creation of type C2 : C2 [field Obj21] : Object | provenance | | -| Constructors.cs:69:25:69:27 | access to local variable o21 : Object | Constructors.cs:69:18:69:33 | object creation of type C2 : C2 [field Obj21] : Object | provenance | | -| Constructors.cs:69:30:69:32 | access to local variable o22 : Object | Constructors.cs:44:45:44:52 | o22param : Object | provenance | | -| Constructors.cs:69:30:69:32 | access to local variable o22 : Object | Constructors.cs:44:45:44:52 | o22param : Object | provenance | | -| Constructors.cs:69:30:69:32 | access to local variable o22 : Object | Constructors.cs:69:18:69:33 | object creation of type C2 : C2 [parameter o22param] : Object | provenance | | -| Constructors.cs:69:30:69:32 | access to local variable o22 : Object | Constructors.cs:69:18:69:33 | object creation of type C2 : C2 [parameter o22param] : Object | provenance | | -| Constructors.cs:70:14:70:15 | access to local variable c2 : C2 [field Obj21] : Object | Constructors.cs:70:14:70:21 | access to field Obj21 | provenance | | -| Constructors.cs:70:14:70:15 | access to local variable c2 : C2 [field Obj21] : Object | Constructors.cs:70:14:70:21 | access to field Obj21 | provenance | | -| Constructors.cs:71:14:71:15 | access to local variable c2 : C2 [parameter o22param] : Object | Constructors.cs:48:32:48:39 | this : C2 [parameter o22param] : Object | provenance | | -| Constructors.cs:71:14:71:15 | access to local variable c2 : C2 [parameter o22param] : Object | Constructors.cs:48:32:48:39 | this : C2 [parameter o22param] : Object | provenance | | -| Constructors.cs:71:14:71:15 | access to local variable c2 : C2 [parameter o22param] : Object | Constructors.cs:71:14:71:21 | access to property Obj22 | provenance | | -| Constructors.cs:71:14:71:15 | access to local variable c2 : C2 [parameter o22param] : Object | Constructors.cs:71:14:71:21 | access to property Obj22 | provenance | | -| Constructors.cs:72:14:72:15 | access to local variable c2 : C2 [field Obj21] : Object | Constructors.cs:50:32:50:36 | this : C2 [field Obj21] : Object | provenance | | -| Constructors.cs:72:14:72:15 | access to local variable c2 : C2 [field Obj21] : Object | Constructors.cs:50:32:50:36 | this : C2 [field Obj21] : Object | provenance | | -| Constructors.cs:72:14:72:15 | access to local variable c2 : C2 [field Obj21] : Object | Constructors.cs:72:14:72:21 | access to property Obj23 | provenance | | -| Constructors.cs:72:14:72:15 | access to local variable c2 : C2 [field Obj21] : Object | Constructors.cs:72:14:72:21 | access to property Obj23 | provenance | | -| Constructors.cs:81:21:81:37 | call to method Source : Object | Constructors.cs:82:19:82:23 | access to local variable taint : Object | provenance | | -| Constructors.cs:81:21:81:37 | call to method Source : Object | Constructors.cs:82:19:82:23 | access to local variable taint : Object | provenance | | -| Constructors.cs:82:9:82:10 | [post] access to local variable c2 : C2 [parameter o22param] : Object | Constructors.cs:83:14:83:15 | access to local variable c2 : C2 [parameter o22param] : Object | provenance | | -| Constructors.cs:82:9:82:10 | [post] access to local variable c2 : C2 [parameter o22param] : Object | Constructors.cs:83:14:83:15 | access to local variable c2 : C2 [parameter o22param] : Object | provenance | | -| Constructors.cs:82:19:82:23 | access to local variable taint : Object | Constructors.cs:52:35:52:35 | o : Object | provenance | | -| Constructors.cs:82:19:82:23 | access to local variable taint : Object | Constructors.cs:52:35:52:35 | o : Object | provenance | | -| Constructors.cs:82:19:82:23 | access to local variable taint : Object | Constructors.cs:82:9:82:10 | [post] access to local variable c2 : C2 [parameter o22param] : Object | provenance | | -| Constructors.cs:82:19:82:23 | access to local variable taint : Object | Constructors.cs:82:9:82:10 | [post] access to local variable c2 : C2 [parameter o22param] : Object | provenance | | -| Constructors.cs:83:14:83:15 | access to local variable c2 : C2 [parameter o22param] : Object | Constructors.cs:48:32:48:39 | this : C2 [parameter o22param] : Object | provenance | | -| Constructors.cs:83:14:83:15 | access to local variable c2 : C2 [parameter o22param] : Object | Constructors.cs:48:32:48:39 | this : C2 [parameter o22param] : Object | provenance | | -| Constructors.cs:83:14:83:15 | access to local variable c2 : C2 [parameter o22param] : Object | Constructors.cs:83:14:83:21 | access to property Obj22 | provenance | | -| Constructors.cs:83:14:83:15 | access to local variable c2 : C2 [parameter o22param] : Object | Constructors.cs:83:14:83:21 | access to property Obj22 | provenance | | +| Constructors.cs:70:17:70:33 | call to method Source : Object | Constructors.cs:71:25:71:25 | access to local variable o : Object | provenance | | +| Constructors.cs:70:17:70:33 | call to method Source : Object | Constructors.cs:71:25:71:25 | access to local variable o : Object | provenance | | +| Constructors.cs:71:18:71:26 | object creation of type C1 : C1 [field Obj] : Object | Constructors.cs:72:14:72:15 | access to local variable c1 : C1 [field Obj] : Object | provenance | | +| Constructors.cs:71:18:71:26 | object creation of type C1 : C1 [field Obj] : Object | Constructors.cs:72:14:72:15 | access to local variable c1 : C1 [field Obj] : Object | provenance | | +| Constructors.cs:71:25:71:25 | access to local variable o : Object | Constructors.cs:41:26:41:26 | o : Object | provenance | | +| Constructors.cs:71:25:71:25 | access to local variable o : Object | Constructors.cs:41:26:41:26 | o : Object | provenance | | +| Constructors.cs:71:25:71:25 | access to local variable o : Object | Constructors.cs:71:18:71:26 | object creation of type C1 : C1 [field Obj] : Object | provenance | | +| Constructors.cs:71:25:71:25 | access to local variable o : Object | Constructors.cs:71:18:71:26 | object creation of type C1 : C1 [field Obj] : Object | provenance | | +| Constructors.cs:72:14:72:15 | access to local variable c1 : C1 [field Obj] : Object | Constructors.cs:72:14:72:19 | access to field Obj | provenance | | +| Constructors.cs:72:14:72:15 | access to local variable c1 : C1 [field Obj] : Object | Constructors.cs:72:14:72:19 | access to field Obj | provenance | | +| Constructors.cs:77:19:77:35 | call to method Source : Object | Constructors.cs:79:25:79:27 | access to local variable o21 : Object | provenance | | +| Constructors.cs:77:19:77:35 | call to method Source : Object | Constructors.cs:79:25:79:27 | access to local variable o21 : Object | provenance | | +| Constructors.cs:78:19:78:35 | call to method Source : Object | Constructors.cs:79:30:79:32 | access to local variable o22 : Object | provenance | | +| Constructors.cs:78:19:78:35 | call to method Source : Object | Constructors.cs:79:30:79:32 | access to local variable o22 : Object | provenance | | +| Constructors.cs:79:18:79:33 | object creation of type C2 : C2 [field Obj21] : Object | Constructors.cs:80:14:80:15 | access to local variable c2 : C2 [field Obj21] : Object | provenance | | +| Constructors.cs:79:18:79:33 | object creation of type C2 : C2 [field Obj21] : Object | Constructors.cs:80:14:80:15 | access to local variable c2 : C2 [field Obj21] : Object | provenance | | +| Constructors.cs:79:18:79:33 | object creation of type C2 : C2 [field Obj21] : Object | Constructors.cs:82:14:82:15 | access to local variable c2 : C2 [field Obj21] : Object | provenance | | +| Constructors.cs:79:18:79:33 | object creation of type C2 : C2 [field Obj21] : Object | Constructors.cs:82:14:82:15 | access to local variable c2 : C2 [field Obj21] : Object | provenance | | +| 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 | provenance | | +| 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 | provenance | | +| Constructors.cs:79:25:79:27 | access to local variable o21 : Object | Constructors.cs:44:28:44:35 | o21param : Object | provenance | | +| Constructors.cs:79:25:79:27 | access to local variable o21 : Object | Constructors.cs:44:28:44:35 | o21param : Object | provenance | | +| Constructors.cs:79:25:79:27 | access to local variable o21 : Object | Constructors.cs:79:18:79:33 | object creation of type C2 : C2 [field Obj21] : Object | provenance | | +| Constructors.cs:79:25:79:27 | access to local variable o21 : Object | Constructors.cs:79:18:79:33 | object creation of type C2 : C2 [field Obj21] : Object | provenance | | +| Constructors.cs:79:30:79:32 | access to local variable o22 : Object | Constructors.cs:44:45:44:52 | o22param : Object | provenance | | +| Constructors.cs:79:30:79:32 | access to local variable o22 : Object | Constructors.cs:44:45:44:52 | o22param : Object | provenance | | +| Constructors.cs:79:30:79:32 | access to local variable o22 : Object | Constructors.cs:79:18:79:33 | object creation of type C2 : C2 [parameter o22param] : Object | provenance | | +| Constructors.cs:79:30:79:32 | access to local variable o22 : Object | Constructors.cs:79:18:79:33 | object creation of type C2 : C2 [parameter o22param] : Object | provenance | | +| Constructors.cs:80:14:80:15 | access to local variable c2 : C2 [field Obj21] : Object | Constructors.cs:80:14:80:21 | access to field Obj21 | provenance | | +| Constructors.cs:80:14:80:15 | access to local variable c2 : C2 [field Obj21] : Object | Constructors.cs:80:14:80:21 | access to field Obj21 | provenance | | +| 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 | provenance | | +| 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 | provenance | | +| Constructors.cs:81:14:81:15 | access to local variable c2 : C2 [parameter o22param] : Object | Constructors.cs:81:14:81:21 | access to property Obj22 | provenance | | +| Constructors.cs:81:14:81:15 | access to local variable c2 : C2 [parameter o22param] : Object | Constructors.cs:81:14:81:21 | access to property Obj22 | provenance | | +| 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 | provenance | | +| 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 | provenance | | +| Constructors.cs:82:14:82:15 | access to local variable c2 : C2 [field Obj21] : Object | Constructors.cs:82:14:82:21 | access to property Obj23 | provenance | | +| Constructors.cs:82:14:82:15 | access to local variable c2 : C2 [field Obj21] : Object | Constructors.cs:82:14:82:21 | access to property Obj23 | provenance | | +| Constructors.cs:91:21:91:37 | call to method Source : Object | Constructors.cs:92:19:92:23 | access to local variable taint : Object | provenance | | +| Constructors.cs:91:21:91:37 | call to method Source : Object | Constructors.cs:92:19:92:23 | access to local variable taint : Object | provenance | | +| 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 | provenance | | +| 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 | provenance | | +| Constructors.cs:92:19:92:23 | access to local variable taint : Object | Constructors.cs:52:35:52:35 | o : Object | provenance | | +| Constructors.cs:92:19:92:23 | access to local variable taint : Object | Constructors.cs:52:35:52:35 | o : Object | provenance | | +| Constructors.cs:92:19:92:23 | access to local variable taint : Object | Constructors.cs:92:9:92:10 | [post] access to local variable c2 : C2 [parameter o22param] : Object | provenance | | +| Constructors.cs:92:19:92:23 | access to local variable taint : Object | Constructors.cs:92:9:92:10 | [post] access to local variable c2 : C2 [parameter o22param] : Object | provenance | | +| 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 | provenance | | +| 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 | provenance | | +| Constructors.cs:93:14:93:15 | access to local variable c2 : C2 [parameter o22param] : Object | Constructors.cs:93:14:93:21 | access to property Obj22 | provenance | | +| Constructors.cs:93:14:93:15 | access to local variable c2 : C2 [parameter o22param] : Object | Constructors.cs:93:14:93:21 | access to property Obj22 | provenance | | nodes | Constructors.cs:5:24:5:25 | [post] this access : C_no_ctor [field s1] : Object | semmle.label | [post] this access : C_no_ctor [field s1] : Object | | Constructors.cs:5:24:5:25 | [post] this access : C_no_ctor [field s1] : Object | semmle.label | [post] this access : C_no_ctor [field s1] : Object | @@ -147,77 +148,77 @@ nodes | Constructors.cs:52:35:52:35 | o : Object | semmle.label | o : Object | | Constructors.cs:54:24:54:24 | access to parameter o : Object | semmle.label | access to parameter o : Object | | Constructors.cs:54:24:54:24 | access to parameter o : Object | semmle.label | access to parameter o : Object | -| Constructors.cs:60:17:60:33 | call to method Source : Object | semmle.label | call to method Source : Object | -| Constructors.cs:60:17:60:33 | call to method Source : Object | semmle.label | call to method Source : Object | -| Constructors.cs:61:18:61:26 | object creation of type C1 : C1 [field Obj] : Object | semmle.label | object creation of type C1 : C1 [field Obj] : Object | -| Constructors.cs:61:18:61:26 | object creation of type C1 : C1 [field Obj] : Object | semmle.label | object creation of type C1 : C1 [field Obj] : Object | -| Constructors.cs:61:25:61:25 | access to local variable o : Object | semmle.label | access to local variable o : Object | -| Constructors.cs:61:25:61:25 | access to local variable o : Object | semmle.label | access to local variable o : Object | -| Constructors.cs:62:14:62:15 | access to local variable c1 : C1 [field Obj] : Object | semmle.label | access to local variable c1 : C1 [field Obj] : Object | -| Constructors.cs:62:14:62:15 | access to local variable c1 : C1 [field Obj] : Object | semmle.label | access to local variable c1 : C1 [field Obj] : Object | -| Constructors.cs:62:14:62:19 | access to field Obj | semmle.label | access to field Obj | -| Constructors.cs:62:14:62:19 | access to field Obj | semmle.label | access to field Obj | -| Constructors.cs:67:19:67:35 | call to method Source : Object | semmle.label | call to method Source : Object | -| Constructors.cs:67:19:67:35 | call to method Source : Object | semmle.label | call to method Source : Object | -| Constructors.cs:68:19:68:35 | call to method Source : Object | semmle.label | call to method Source : Object | -| Constructors.cs:68:19:68:35 | call to method Source : Object | semmle.label | call to method Source : Object | -| Constructors.cs:69:18:69:33 | object creation of type C2 : C2 [field Obj21] : Object | semmle.label | object creation of type C2 : C2 [field Obj21] : Object | -| Constructors.cs:69:18:69:33 | object creation of type C2 : C2 [field Obj21] : Object | semmle.label | object creation of type C2 : C2 [field Obj21] : Object | -| Constructors.cs:69:18:69:33 | object creation of type C2 : C2 [parameter o22param] : Object | semmle.label | object creation of type C2 : C2 [parameter o22param] : Object | -| Constructors.cs:69:18:69:33 | object creation of type C2 : C2 [parameter o22param] : Object | semmle.label | object creation of type C2 : C2 [parameter o22param] : Object | -| Constructors.cs:69:25:69:27 | access to local variable o21 : Object | semmle.label | access to local variable o21 : Object | -| Constructors.cs:69:25:69:27 | access to local variable o21 : Object | semmle.label | access to local variable o21 : Object | -| Constructors.cs:69:30:69:32 | access to local variable o22 : Object | semmle.label | access to local variable o22 : Object | -| Constructors.cs:69:30:69:32 | access to local variable o22 : Object | semmle.label | access to local variable o22 : Object | -| Constructors.cs:70:14:70:15 | access to local variable c2 : C2 [field Obj21] : Object | semmle.label | access to local variable c2 : C2 [field Obj21] : Object | -| Constructors.cs:70:14:70:15 | access to local variable c2 : C2 [field Obj21] : Object | semmle.label | access to local variable c2 : C2 [field Obj21] : Object | -| Constructors.cs:70:14:70:21 | access to field Obj21 | semmle.label | access to field Obj21 | -| Constructors.cs:70:14:70:21 | access to field Obj21 | semmle.label | access to field Obj21 | -| Constructors.cs:71:14:71:15 | access to local variable c2 : C2 [parameter o22param] : Object | semmle.label | access to local variable c2 : C2 [parameter o22param] : Object | -| Constructors.cs:71:14:71:15 | access to local variable c2 : C2 [parameter o22param] : Object | semmle.label | access to local variable c2 : C2 [parameter o22param] : Object | -| Constructors.cs:71:14:71:21 | access to property Obj22 | semmle.label | access to property Obj22 | -| Constructors.cs:71:14:71:21 | access to property Obj22 | semmle.label | access to property Obj22 | -| Constructors.cs:72:14:72:15 | access to local variable c2 : C2 [field Obj21] : Object | semmle.label | access to local variable c2 : C2 [field Obj21] : Object | -| Constructors.cs:72:14:72:15 | access to local variable c2 : C2 [field Obj21] : Object | semmle.label | access to local variable c2 : C2 [field Obj21] : Object | -| Constructors.cs:72:14:72:21 | access to property Obj23 | semmle.label | access to property Obj23 | -| Constructors.cs:72:14:72:21 | access to property Obj23 | semmle.label | access to property Obj23 | -| Constructors.cs:81:21:81:37 | call to method Source : Object | semmle.label | call to method Source : Object | -| Constructors.cs:81:21:81:37 | call to method Source : Object | semmle.label | call to method Source : Object | -| Constructors.cs:82:9:82:10 | [post] access to local variable c2 : C2 [parameter o22param] : Object | semmle.label | [post] access to local variable c2 : C2 [parameter o22param] : Object | -| Constructors.cs:82:9:82:10 | [post] access to local variable c2 : C2 [parameter o22param] : Object | semmle.label | [post] access to local variable c2 : C2 [parameter o22param] : Object | -| Constructors.cs:82:19:82:23 | access to local variable taint : Object | semmle.label | access to local variable taint : Object | -| Constructors.cs:82:19:82:23 | access to local variable taint : Object | semmle.label | access to local variable taint : Object | -| Constructors.cs:83:14:83:15 | access to local variable c2 : C2 [parameter o22param] : Object | semmle.label | access to local variable c2 : C2 [parameter o22param] : Object | -| Constructors.cs:83:14:83:15 | access to local variable c2 : C2 [parameter o22param] : Object | semmle.label | access to local variable c2 : C2 [parameter o22param] : Object | -| Constructors.cs:83:14:83:21 | access to property Obj22 | semmle.label | access to property Obj22 | -| Constructors.cs:83:14:83:21 | access to property Obj22 | semmle.label | access to property Obj22 | +| Constructors.cs:70:17:70:33 | call to method Source : Object | semmle.label | call to method Source : Object | +| Constructors.cs:70:17:70:33 | call to method Source : Object | semmle.label | call to method Source : Object | +| Constructors.cs:71:18:71:26 | object creation of type C1 : C1 [field Obj] : Object | semmle.label | object creation of type C1 : C1 [field Obj] : Object | +| Constructors.cs:71:18:71:26 | object creation of type C1 : C1 [field Obj] : Object | semmle.label | object creation of type C1 : C1 [field Obj] : Object | +| Constructors.cs:71:25:71:25 | access to local variable o : Object | semmle.label | access to local variable o : Object | +| Constructors.cs:71:25:71:25 | access to local variable o : Object | semmle.label | access to local variable o : Object | +| Constructors.cs:72:14:72:15 | access to local variable c1 : C1 [field Obj] : Object | semmle.label | access to local variable c1 : C1 [field Obj] : Object | +| Constructors.cs:72:14:72:15 | access to local variable c1 : C1 [field Obj] : Object | semmle.label | access to local variable c1 : C1 [field Obj] : Object | +| Constructors.cs:72:14:72:19 | access to field Obj | semmle.label | access to field Obj | +| Constructors.cs:72:14:72:19 | access to field Obj | semmle.label | access to field Obj | +| Constructors.cs:77:19:77:35 | call to method Source : Object | semmle.label | call to method Source : Object | +| Constructors.cs:77:19:77:35 | call to method Source : Object | semmle.label | call to method Source : Object | +| Constructors.cs:78:19:78:35 | call to method Source : Object | semmle.label | call to method Source : Object | +| Constructors.cs:78:19:78:35 | call to method Source : Object | semmle.label | call to method Source : Object | +| Constructors.cs:79:18:79:33 | object creation of type C2 : C2 [field Obj21] : Object | semmle.label | object creation of type C2 : C2 [field Obj21] : Object | +| Constructors.cs:79:18:79:33 | object creation of type C2 : C2 [field Obj21] : Object | semmle.label | object creation of type C2 : C2 [field Obj21] : Object | +| Constructors.cs:79:18:79:33 | object creation of type C2 : C2 [parameter o22param] : Object | semmle.label | object creation of type C2 : C2 [parameter o22param] : Object | +| Constructors.cs:79:18:79:33 | object creation of type C2 : C2 [parameter o22param] : Object | semmle.label | object creation of type C2 : C2 [parameter o22param] : Object | +| Constructors.cs:79:25:79:27 | access to local variable o21 : Object | semmle.label | access to local variable o21 : Object | +| Constructors.cs:79:25:79:27 | access to local variable o21 : Object | semmle.label | access to local variable o21 : Object | +| Constructors.cs:79:30:79:32 | access to local variable o22 : Object | semmle.label | access to local variable o22 : Object | +| Constructors.cs:79:30:79:32 | access to local variable o22 : Object | semmle.label | access to local variable o22 : Object | +| Constructors.cs:80:14:80:15 | access to local variable c2 : C2 [field Obj21] : Object | semmle.label | access to local variable c2 : C2 [field Obj21] : Object | +| Constructors.cs:80:14:80:15 | access to local variable c2 : C2 [field Obj21] : Object | semmle.label | access to local variable c2 : C2 [field Obj21] : Object | +| Constructors.cs:80:14:80:21 | access to field Obj21 | semmle.label | access to field Obj21 | +| Constructors.cs:80:14:80:21 | access to field Obj21 | semmle.label | access to field Obj21 | +| Constructors.cs:81:14:81:15 | access to local variable c2 : C2 [parameter o22param] : Object | semmle.label | access to local variable c2 : C2 [parameter o22param] : Object | +| Constructors.cs:81:14:81:15 | access to local variable c2 : C2 [parameter o22param] : Object | semmle.label | access to local variable c2 : C2 [parameter o22param] : Object | +| Constructors.cs:81:14:81:21 | access to property Obj22 | semmle.label | access to property Obj22 | +| Constructors.cs:81:14:81:21 | access to property Obj22 | semmle.label | access to property Obj22 | +| Constructors.cs:82:14:82:15 | access to local variable c2 : C2 [field Obj21] : Object | semmle.label | access to local variable c2 : C2 [field Obj21] : Object | +| Constructors.cs:82:14:82:15 | access to local variable c2 : C2 [field Obj21] : Object | semmle.label | access to local variable c2 : C2 [field Obj21] : Object | +| Constructors.cs:82:14:82:21 | access to property Obj23 | semmle.label | access to property Obj23 | +| Constructors.cs:82:14:82:21 | access to property Obj23 | semmle.label | access to property Obj23 | +| Constructors.cs:91:21:91:37 | call to method Source : Object | semmle.label | call to method Source : Object | +| Constructors.cs:91:21:91:37 | call to method Source : Object | semmle.label | call to method Source : Object | +| Constructors.cs:92:9:92:10 | [post] access to local variable c2 : C2 [parameter o22param] : Object | semmle.label | [post] access to local variable c2 : C2 [parameter o22param] : Object | +| Constructors.cs:92:9:92:10 | [post] access to local variable c2 : C2 [parameter o22param] : Object | semmle.label | [post] access to local variable c2 : C2 [parameter o22param] : Object | +| Constructors.cs:92:19:92:23 | access to local variable taint : Object | semmle.label | access to local variable taint : Object | +| Constructors.cs:92:19:92:23 | access to local variable taint : Object | semmle.label | access to local variable taint : Object | +| Constructors.cs:93:14:93:15 | access to local variable c2 : C2 [parameter o22param] : Object | semmle.label | access to local variable c2 : C2 [parameter o22param] : Object | +| Constructors.cs:93:14:93:15 | access to local variable c2 : C2 [parameter o22param] : Object | semmle.label | access to local variable c2 : C2 [parameter o22param] : Object | +| Constructors.cs:93:14:93:21 | access to property Obj22 | semmle.label | access to property Obj22 | +| Constructors.cs:93:14:93:21 | access to property Obj22 | semmle.label | access to property Obj22 | subpaths -| Constructors.cs:61:25:61:25 | access to local variable o : Object | Constructors.cs:41:26:41:26 | o : Object | Constructors.cs:41:32:41:34 | [post] this access : C1 [field Obj] : Object | Constructors.cs:61:18:61:26 | object creation of type C1 : C1 [field Obj] : Object | -| Constructors.cs:61:25:61:25 | access to local variable o : Object | Constructors.cs:41:26:41:26 | o : Object | Constructors.cs:41:32:41:34 | [post] this access : C1 [field Obj] : Object | Constructors.cs:61:18:61:26 | object creation of type C1 : C1 [field Obj] : Object | -| Constructors.cs:69:25:69:27 | access to local variable o21 : Object | Constructors.cs:44:28:44:35 | o21param : Object | Constructors.cs:46:23:46:27 | [post] this access : C2 [field Obj21] : Object | Constructors.cs:69:18:69:33 | object creation of type C2 : C2 [field Obj21] : Object | -| Constructors.cs:69:25:69:27 | access to local variable o21 : Object | Constructors.cs:44:28:44:35 | o21param : Object | Constructors.cs:46:23:46:27 | [post] this access : C2 [field Obj21] : Object | Constructors.cs:69:18:69:33 | object creation of type C2 : C2 [field Obj21] : Object | -| Constructors.cs:69:30:69:32 | access to local variable o22 : Object | Constructors.cs:44:45:44:52 | o22param : Object | Constructors.cs:44:45:44:52 | o22param : Object | Constructors.cs:69:18:69:33 | object creation of type C2 : C2 [parameter o22param] : Object | -| Constructors.cs:69:30:69:32 | access to local variable o22 : Object | Constructors.cs:44:45:44:52 | o22param : Object | Constructors.cs:44:45:44:52 | o22param : Object | Constructors.cs:69:18:69:33 | object creation of type C2 : C2 [parameter o22param] : Object | -| Constructors.cs:71:14:71: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:71:14:71:21 | access to property Obj22 | -| Constructors.cs:71:14:71: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:71:14:71:21 | access to property Obj22 | -| Constructors.cs:72:14:72: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:72:14:72:21 | access to property Obj23 | -| Constructors.cs:72:14:72: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:72:14:72:21 | access to property Obj23 | -| Constructors.cs:82:19:82:23 | access to local variable taint : Object | Constructors.cs:52:35:52:35 | o : Object | Constructors.cs:54:24:54:24 | access to parameter o : Object | Constructors.cs:82:9:82:10 | [post] access to local variable c2 : C2 [parameter o22param] : Object | -| Constructors.cs:82:19:82:23 | access to local variable taint : Object | Constructors.cs:52:35:52:35 | o : Object | Constructors.cs:54:24:54:24 | access to parameter o : Object | Constructors.cs:82:9:82:10 | [post] access to local variable c2 : C2 [parameter o22param] : Object | -| Constructors.cs:83:14:83: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:83:14:83:21 | access to property Obj22 | -| Constructors.cs:83:14:83: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:83:14:83:21 | access to property Obj22 | +| Constructors.cs:71:25:71:25 | access to local variable o : Object | Constructors.cs:41:26:41:26 | o : Object | Constructors.cs:41:32:41:34 | [post] this access : C1 [field Obj] : Object | Constructors.cs:71:18:71:26 | object creation of type C1 : C1 [field Obj] : Object | +| Constructors.cs:71:25:71:25 | access to local variable o : Object | Constructors.cs:41:26:41:26 | o : Object | Constructors.cs:41:32:41:34 | [post] this access : 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:46:23:46:27 | [post] this access : C2 [field Obj21] : Object | Constructors.cs:79:18:79:33 | object creation of type C2 : C2 [field Obj21] : Object | +| Constructors.cs:79:25:79:27 | access to local variable o21 : Object | Constructors.cs:44:28:44:35 | o21param : Object | Constructors.cs:46:23:46:27 | [post] this access : 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:45:44:52 | o22param : Object | Constructors.cs:79:18:79:33 | object creation of type C2 : C2 [parameter o22param] : Object | +| Constructors.cs:79:30:79:32 | access to local variable o22 : Object | Constructors.cs:44:45:44:52 | o22param : Object | Constructors.cs:44:45:44:52 | 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: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: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:54:24:54:24 | access to parameter o : 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:54:24:54:24 | access to parameter o : 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: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 | #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 | | 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 | | Constructors.cs:33:18:33:19 | access to field s1 | Constructors.cs:21:29:21:45 | call to method Source : Object | Constructors.cs:33:18:33:19 | access to field s1 | $@ | Constructors.cs:21:29:21:45 | call to method Source : Object | call to method Source : Object | | Constructors.cs:33:18:33:19 | access to field s1 | Constructors.cs:21:29:21:45 | call to method Source : Object | Constructors.cs:33:18:33:19 | access to field s1 | $@ | Constructors.cs:21:29:21:45 | call to method Source : Object | call to method Source : Object | -| Constructors.cs:62:14:62:19 | access to field Obj | Constructors.cs:60:17:60:33 | call to method Source : Object | Constructors.cs:62:14:62:19 | access to field Obj | $@ | Constructors.cs:60:17:60:33 | call to method Source : Object | call to method Source : Object | -| Constructors.cs:62:14:62:19 | access to field Obj | Constructors.cs:60:17:60:33 | call to method Source : Object | Constructors.cs:62:14:62:19 | access to field Obj | $@ | Constructors.cs:60:17:60:33 | call to method Source : Object | call to method Source : Object | -| Constructors.cs:70:14:70:21 | access to field Obj21 | Constructors.cs:67:19:67:35 | call to method Source : Object | Constructors.cs:70:14:70:21 | access to field Obj21 | $@ | Constructors.cs:67:19:67:35 | call to method Source : Object | call to method Source : Object | -| Constructors.cs:70:14:70:21 | access to field Obj21 | Constructors.cs:67:19:67:35 | call to method Source : Object | Constructors.cs:70:14:70:21 | access to field Obj21 | $@ | Constructors.cs:67:19:67:35 | call to method Source : Object | call to method Source : Object | -| Constructors.cs:71:14:71:21 | access to property Obj22 | Constructors.cs:68:19:68:35 | call to method Source : Object | Constructors.cs:71:14:71:21 | access to property Obj22 | $@ | Constructors.cs:68:19:68:35 | call to method Source : Object | call to method Source : Object | -| Constructors.cs:71:14:71:21 | access to property Obj22 | Constructors.cs:68:19:68:35 | call to method Source : Object | Constructors.cs:71:14:71:21 | access to property Obj22 | $@ | Constructors.cs:68:19:68:35 | call to method Source : Object | call to method Source : Object | -| Constructors.cs:72:14:72:21 | access to property Obj23 | Constructors.cs:67:19:67:35 | call to method Source : Object | Constructors.cs:72:14:72:21 | access to property Obj23 | $@ | Constructors.cs:67:19:67:35 | call to method Source : Object | call to method Source : Object | -| Constructors.cs:72:14:72:21 | access to property Obj23 | Constructors.cs:67:19:67:35 | call to method Source : Object | Constructors.cs:72:14:72:21 | access to property Obj23 | $@ | Constructors.cs:67:19:67:35 | call to method Source : Object | call to method Source : Object | -| Constructors.cs:83:14:83:21 | access to property Obj22 | Constructors.cs:81:21:81:37 | call to method Source : Object | Constructors.cs:83:14:83:21 | access to property Obj22 | $@ | Constructors.cs:81:21:81:37 | call to method Source : Object | call to method Source : Object | -| Constructors.cs:83:14:83:21 | access to property Obj22 | Constructors.cs:81:21:81:37 | call to method Source : Object | Constructors.cs:83:14:83:21 | access to property Obj22 | $@ | Constructors.cs:81:21:81:37 | call to method Source : Object | call to method Source : Object | +| Constructors.cs:72:14:72:19 | access to field Obj | Constructors.cs:70:17:70:33 | call to method Source : Object | Constructors.cs:72:14:72:19 | access to field Obj | $@ | Constructors.cs:70:17:70:33 | call to method Source : Object | call to method Source : Object | +| Constructors.cs:72:14:72:19 | access to field Obj | Constructors.cs:70:17:70:33 | call to method Source : Object | Constructors.cs:72:14:72:19 | access to field Obj | $@ | Constructors.cs:70:17:70:33 | call to method Source : Object | call to method Source : Object | +| Constructors.cs:80:14:80:21 | access to field Obj21 | Constructors.cs:77:19:77:35 | call to method Source : Object | Constructors.cs:80:14:80:21 | access to field Obj21 | $@ | Constructors.cs:77:19:77:35 | call to method Source : Object | call to method Source : Object | +| Constructors.cs:80:14:80:21 | access to field Obj21 | Constructors.cs:77:19:77:35 | call to method Source : Object | Constructors.cs:80:14:80:21 | access to field Obj21 | $@ | Constructors.cs:77:19:77:35 | call to method Source : Object | call to method Source : Object | +| Constructors.cs:81:14:81:21 | access to property Obj22 | Constructors.cs:78:19:78:35 | call to method Source : Object | Constructors.cs:81:14:81:21 | access to property Obj22 | $@ | Constructors.cs:78:19:78:35 | call to method Source : Object | call to method Source : Object | +| Constructors.cs:81:14:81:21 | access to property Obj22 | Constructors.cs:78:19:78:35 | call to method Source : Object | Constructors.cs:81:14:81:21 | access to property Obj22 | $@ | Constructors.cs:78:19:78:35 | call to method Source : Object | call to method Source : Object | +| Constructors.cs:82:14:82:21 | access to property Obj23 | Constructors.cs:77:19:77:35 | call to method Source : Object | Constructors.cs:82:14:82:21 | access to property Obj23 | $@ | Constructors.cs:77:19:77:35 | call to method Source : Object | call to method Source : Object | +| Constructors.cs:82:14:82:21 | access to property Obj23 | Constructors.cs:77:19:77:35 | call to method Source : Object | Constructors.cs:82:14:82:21 | access to property Obj23 | $@ | Constructors.cs:77:19:77:35 | call to method Source : Object | call to method Source : Object | +| Constructors.cs:93:14:93:21 | access to property Obj22 | Constructors.cs:91:21:91:37 | call to method Source : Object | Constructors.cs:93:14:93:21 | access to property Obj22 | $@ | Constructors.cs:91:21:91:37 | call to method Source : Object | call to method Source : Object | +| Constructors.cs:93:14:93:21 | access to property Obj22 | Constructors.cs:91:21:91:37 | call to method Source : Object | Constructors.cs:93:14:93:21 | access to property Obj22 | $@ | Constructors.cs:91:21:91:37 | call to method Source : Object | call to method Source : Object | diff --git a/csharp/ql/test/library-tests/dataflow/constructors/Constructors.cs b/csharp/ql/test/library-tests/dataflow/constructors/Constructors.cs index de9a4c8d12a..41724b78ddf 100644 --- a/csharp/ql/test/library-tests/dataflow/constructors/Constructors.cs +++ b/csharp/ql/test/library-tests/dataflow/constructors/Constructors.cs @@ -53,6 +53,16 @@ public class Constructors { o22param = o; } + + private void SetObjOut(out object o1, object o2) + { + o1 = o2; + } + + public void SetObjViaOut(object o) + { + SetObjOut(out o22param, o); + } } public void M1() @@ -83,6 +93,14 @@ public class Constructors Sink(c2.Obj22); // $ hasValueFlow=4 } + public void M4() + { + var c2 = new C2(new object(), new object()); + var taint = Source(5); + c2.SetObjViaOut(taint); + Sink(c2.Obj22); // $ hasValueFlow=5 + } + public static void Sink(object o) { } public static T Source(object source) => throw null; From 59792808d423dd6c62e8cb81de248de7154987cc Mon Sep 17 00:00:00 2001 From: erik-krogh Date: Tue, 13 Feb 2024 12:37:29 +0100 Subject: [PATCH 178/378] add new url-redirect test file --- .../CWE-601/UrlRedirect/UrlRedirect.expected | 4 ++++ .../CWE-601/UrlRedirect/UrlRedirect2.cs | 19 +++++++++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 csharp/ql/test/query-tests/Security Features/CWE-601/UrlRedirect/UrlRedirect2.cs diff --git a/csharp/ql/test/query-tests/Security Features/CWE-601/UrlRedirect/UrlRedirect.expected b/csharp/ql/test/query-tests/Security Features/CWE-601/UrlRedirect/UrlRedirect.expected index 33e63414558..b36b30253e0 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-601/UrlRedirect/UrlRedirect.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-601/UrlRedirect/UrlRedirect.expected @@ -1,4 +1,5 @@ edges +| UrlRedirect2.cs:14:31:14:53 | access to property QueryString : NameValueCollection | UrlRedirect2.cs:14:31:14:61 | access to indexer | provenance | | | UrlRedirect.cs:13:31:13:53 | access to property QueryString : NameValueCollection | UrlRedirect.cs:13:31:13:61 | access to indexer | provenance | | | UrlRedirect.cs:23:22:23:44 | access to property QueryString : NameValueCollection | UrlRedirect.cs:23:22:23:52 | access to indexer : String | provenance | | | UrlRedirect.cs:23:22:23:44 | access to property QueryString : NameValueCollection | UrlRedirect.cs:48:29:48:31 | access to local variable url | provenance | | @@ -28,6 +29,8 @@ edges | UrlRedirectCore.cs:45:51:45:55 | value : String | UrlRedirectCore.cs:56:31:56:35 | access to parameter value | provenance | | | UrlRedirectCore.cs:53:40:53:44 | access to parameter value : String | UrlRedirectCore.cs:53:32:53:45 | object creation of type Uri | provenance | | nodes +| UrlRedirect2.cs:14:31:14:53 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | +| UrlRedirect2.cs:14:31:14:61 | access to indexer | semmle.label | access to indexer | | UrlRedirect.cs:13:31:13:53 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | | UrlRedirect.cs:13:31:13:61 | access to indexer | semmle.label | access to indexer | | UrlRedirect.cs:23:22:23:44 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | @@ -58,6 +61,7 @@ nodes | UrlRedirectCore.cs:56:31:56:35 | access to parameter value | semmle.label | access to parameter value | subpaths #select +| UrlRedirect2.cs:14:31:14:61 | access to indexer | UrlRedirect2.cs:14:31:14:53 | access to property QueryString : NameValueCollection | UrlRedirect2.cs:14:31:14:61 | access to indexer | Untrusted URL redirection due to $@. | UrlRedirect2.cs:14:31:14:53 | access to property QueryString | user-provided value | | UrlRedirect.cs:13:31:13:61 | access to indexer | UrlRedirect.cs:13:31:13:53 | access to property QueryString : NameValueCollection | UrlRedirect.cs:13:31:13:61 | access to indexer | Untrusted URL redirection due to $@. | UrlRedirect.cs:13:31:13:53 | access to property QueryString | user-provided value | | UrlRedirect.cs:38:44:38:74 | access to indexer | UrlRedirect.cs:38:44:38:66 | access to property QueryString : NameValueCollection | UrlRedirect.cs:38:44:38:74 | access to indexer | Untrusted URL redirection due to $@. | UrlRedirect.cs:38:44:38:66 | access to property QueryString | user-provided value | | UrlRedirect.cs:39:47:39:77 | access to indexer | UrlRedirect.cs:39:47:39:69 | access to property QueryString : NameValueCollection | UrlRedirect.cs:39:47:39:77 | access to indexer | Untrusted URL redirection due to $@. | UrlRedirect.cs:39:47:39:69 | access to property QueryString | user-provided value | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-601/UrlRedirect/UrlRedirect2.cs b/csharp/ql/test/query-tests/Security Features/CWE-601/UrlRedirect/UrlRedirect2.cs new file mode 100644 index 00000000000..855dfe95251 --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-601/UrlRedirect/UrlRedirect2.cs @@ -0,0 +1,19 @@ +using System; +using System.Web; +using System.Web.Mvc; +using System.Web.WebPages; +using System.Collections.Generic; + +public class UrlRedirectHandler2 : IHttpHandler +{ + private const String VALID_REDIRECT = "http://cwe.mitre.org/data/definitions/601.html"; + + public void ProcessRequest(HttpContext ctx) + { + // BAD: a request parameter is incorporated without validation into a URL redirect + ctx.Response.Redirect(ctx.Request.QueryString["page"]); + + List VALID_REDIRECTS = new List{ "http://cwe.mitre.org/data/definitions/601.html", "http://cwe.mitre.org/data/definitions/79.html" }; + + } +} From 3f8de82ea3b932116624be3b2f2f2afa664c0521 Mon Sep 17 00:00:00 2001 From: erik-krogh Date: Tue, 13 Feb 2024 12:45:07 +0100 Subject: [PATCH 179/378] add a sanitizer for `List.Contains()` in url-redirect --- .../security/dataflow/UrlRedirectQuery.qll | 22 +++++++++++++++++++ .../CWE-601/UrlRedirect/UrlRedirect2.cs | 6 +++++ 2 files changed, 28 insertions(+) diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/UrlRedirectQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/UrlRedirectQuery.qll index 034972b5f22..149e980bab9 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/UrlRedirectQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/UrlRedirectQuery.qll @@ -139,6 +139,28 @@ class LocalUrlSanitizer extends Sanitizer { LocalUrlSanitizer() { this = DataFlow::BarrierGuard::getABarrierNode() } } +/** + * A argument to a call to `List.Contains()` that is a sanitizer for URL redirects. + */ +private predicate isContainsUrlSanitizer(Guard guard, Expr e, AbstractValue v) { + exists(MethodCall method | method = guard | + exists(Method m | m = method.getTarget() | + m.hasName("Contains") and + e = method.getArgument(0) + ) and + v.(AbstractValues::BooleanValue).getValue() = true + ) +} + +/** + * A URL argument to a call to `List.Contains()` that is a sanitizer for URL redirects. + */ +class ContainsUrlSanitizer extends Sanitizer { + ContainsUrlSanitizer() { + this = DataFlow::BarrierGuard::getABarrierNode() + } +} + /** * A call to the getter of the RawUrl property, whose value is considered to be safe for URL * redirects. diff --git a/csharp/ql/test/query-tests/Security Features/CWE-601/UrlRedirect/UrlRedirect2.cs b/csharp/ql/test/query-tests/Security Features/CWE-601/UrlRedirect/UrlRedirect2.cs index 855dfe95251..1bc778b9fe5 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-601/UrlRedirect/UrlRedirect2.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-601/UrlRedirect/UrlRedirect2.cs @@ -14,6 +14,12 @@ public class UrlRedirectHandler2 : IHttpHandler ctx.Response.Redirect(ctx.Request.QueryString["page"]); List VALID_REDIRECTS = new List{ "http://cwe.mitre.org/data/definitions/601.html", "http://cwe.mitre.org/data/definitions/79.html" }; + var redirectUrl = ctx.Request.QueryString["page"]; + if (VALID_REDIRECTS.Contains(redirectUrl)) + { + // GOOD: the request parameter is validated against set of known fixed strings + ctx.Response.Redirect(redirectUrl); + } } } From f4dd3e9aa16ffd862fbb4714af5f02b936dc7db3 Mon Sep 17 00:00:00 2001 From: erik-krogh Date: Tue, 13 Feb 2024 13:13:18 +0100 Subject: [PATCH 180/378] treat relative URLs as safe for url-redirects --- .../security/dataflow/UrlRedirectQuery.qll | 21 +++++++++++++++++++ .../CWE-601/UrlRedirect/UrlRedirect2.cs | 6 ++++++ 2 files changed, 27 insertions(+) diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/UrlRedirectQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/UrlRedirectQuery.qll index 149e980bab9..909c2c966f7 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/UrlRedirectQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/UrlRedirectQuery.qll @@ -161,6 +161,27 @@ class ContainsUrlSanitizer extends Sanitizer { } } +/** + * A check that the URL is relative, and therefore safe for URL redirects. + */ +private predicate isRelativeUrlSanitizer(Guard guard, Expr e, AbstractValue v) { + exists(PropertyAccess access | access = guard | + access.getProperty().getName() = "IsAbsoluteUri" and + // TOOD: type = URL? + e = access.getQualifier() and + v.(AbstractValues::BooleanValue).getValue() = false + ) +} + +/** + * A check that the URL is relative, and therefore safe for URL redirects. + */ +class RelativeUrlSanitizer extends Sanitizer { + RelativeUrlSanitizer() { + this = DataFlow::BarrierGuard::getABarrierNode() + } +} + /** * A call to the getter of the RawUrl property, whose value is considered to be safe for URL * redirects. diff --git a/csharp/ql/test/query-tests/Security Features/CWE-601/UrlRedirect/UrlRedirect2.cs b/csharp/ql/test/query-tests/Security Features/CWE-601/UrlRedirect/UrlRedirect2.cs index 1bc778b9fe5..cd429c8db0d 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-601/UrlRedirect/UrlRedirect2.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-601/UrlRedirect/UrlRedirect2.cs @@ -20,6 +20,12 @@ public class UrlRedirectHandler2 : IHttpHandler // GOOD: the request parameter is validated against set of known fixed strings ctx.Response.Redirect(redirectUrl); } + + var url = new Uri(redirectUrl, UriKind.RelativeOrAbsolute); + if (!url.IsAbsoluteUri) { + // GOOD: The redirect is to a relative URL + ctx.Response.Redirect(url.ToString()); + } } } From 4dae8d0bb4fe261a8979530c0b8c4abbb59222cd Mon Sep 17 00:00:00 2001 From: erik-krogh Date: Tue, 13 Feb 2024 13:08:08 +0100 Subject: [PATCH 181/378] add host comparisons as a sanitizer for url-redirect --- .../security/dataflow/UrlRedirectQuery.qll | 25 +++++++++++++++++++ .../CWE-601/UrlRedirect/UrlRedirect2.cs | 6 ++++- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/UrlRedirectQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/UrlRedirectQuery.qll index 909c2c966f7..8429362f575 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/UrlRedirectQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/UrlRedirectQuery.qll @@ -182,6 +182,31 @@ class RelativeUrlSanitizer extends Sanitizer { } } +/** + * A comparison on the `Host` property of a url, that is a sanitizer for URL redirects. + * E.g. `url.Host == "example.org"` + */ +private predicate isHostComparisonSanitizer(Guard guard, Expr e, AbstractValue v) { + exists(EqualityOperation comparison | comparison = guard | + exists(PropertyAccess access | access = comparison.getAnOperand() | + access.getProperty().getName() = "Host" and + e = access.getQualifier() + ) and + if comparison instanceof EQExpr + then v.(AbstractValues::BooleanValue).getValue() = true + else v.(AbstractValues::BooleanValue).getValue() = false + ) +} + +/** + * A comparison on the `Host` property of a url, that is a sanitizer for URL redirects. + */ +class HostComparisonSanitizer extends Sanitizer { + HostComparisonSanitizer() { + this = DataFlow::BarrierGuard::getABarrierNode() + } +} + /** * A call to the getter of the RawUrl property, whose value is considered to be safe for URL * redirects. diff --git a/csharp/ql/test/query-tests/Security Features/CWE-601/UrlRedirect/UrlRedirect2.cs b/csharp/ql/test/query-tests/Security Features/CWE-601/UrlRedirect/UrlRedirect2.cs index cd429c8db0d..96da2b6e773 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-601/UrlRedirect/UrlRedirect2.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-601/UrlRedirect/UrlRedirect2.cs @@ -26,6 +26,10 @@ public class UrlRedirectHandler2 : IHttpHandler // GOOD: The redirect is to a relative URL ctx.Response.Redirect(url.ToString()); } - + + if (url.Host == "example.org") { + // GOOD: The redirect is to a known host + ctx.Response.Redirect(url.ToString()); + } } } From d31bfc06c237a499248a3951b11cbe7c99846116 Mon Sep 17 00:00:00 2001 From: erik-krogh Date: Tue, 13 Feb 2024 13:10:38 +0100 Subject: [PATCH 182/378] add type requirement to the new Uri sanitizers --- .../semmle/code/csharp/security/dataflow/UrlRedirectQuery.qll | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/UrlRedirectQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/UrlRedirectQuery.qll index 8429362f575..02693107dde 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/UrlRedirectQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/UrlRedirectQuery.qll @@ -167,7 +167,7 @@ class ContainsUrlSanitizer extends Sanitizer { private predicate isRelativeUrlSanitizer(Guard guard, Expr e, AbstractValue v) { exists(PropertyAccess access | access = guard | access.getProperty().getName() = "IsAbsoluteUri" and - // TOOD: type = URL? + access.getQualifier().getType().getFullyQualifiedName() = "System.Uri" and e = access.getQualifier() and v.(AbstractValues::BooleanValue).getValue() = false ) @@ -190,6 +190,7 @@ private predicate isHostComparisonSanitizer(Guard guard, Expr e, AbstractValue v exists(EqualityOperation comparison | comparison = guard | exists(PropertyAccess access | access = comparison.getAnOperand() | access.getProperty().getName() = "Host" and + access.getQualifier().getType().getFullyQualifiedName() = "System.Uri" and e = access.getQualifier() ) and if comparison instanceof EQExpr From 91bbbe262d6156b9e6a3af4589a4d2d074242866 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Tue, 13 Feb 2024 13:15:17 +0100 Subject: [PATCH 183/378] C#: Address more review comments. --- .../code/csharp/dataflow/internal/DataFlowPrivate.qll | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll index bccaf297a15..f13c9f9540d 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll @@ -1803,10 +1803,10 @@ class FlowSummaryNode extends NodeImpl, TFlowSummaryNode { * public void SetParam(object value) => o = value; // (2) * } * ``` - * the first access to o (1) is modeled as this.o_backing_field and - * the second access to o (2) is modeled as this.o_backing_field = value. + * the first access to o (1) is modeled as `this.o_backing_field` and + * the second access to o (2) is modeled as `this.o_backing_field = value`. * Both models need a pre-update this node, and the latter need an additional post-update this access, - * all of which are represented by an InstanceParameterAccessNode node. + * all of which are represented by an `InstanceParameterAccessNode` node. */ class InstanceParameterAccessNode extends NodeImpl, TInstanceParameterAccessNode { private ControlFlow::Node cfn; @@ -1853,11 +1853,11 @@ class InstanceParameterAccessNode extends NodeImpl, TInstanceParameterAccessNode * ```csharp * public class C(object o) { } * ``` - * we synthesize the primary constructor for C as + * we synthesize the primary constructor for `C` as * ```csharp * public C(object o) => this.o_backing_field = o; * ``` - * The synthesized (pre/post-update) this access is represented an PrimaryConstructorThisAccessNode node. + * The synthesized (pre/post-update) this access is represented an `PrimaryConstructorThisAccessNode` node. */ class PrimaryConstructorThisAccessNode extends NodeImpl, TPrimaryConstructorThisAccessNode { private Parameter p; From f3e55a46eef558a2a80c96cfaca3c3b8be322072 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Tue, 13 Feb 2024 13:37:59 +0100 Subject: [PATCH 184/378] C++: Update test results of `constexpr if` destructors --- cpp/ql/test/library-tests/ir/ir/PrintAST.expected | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected index e7768ce6999..e99e0d54f2d 100644 --- a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected +++ b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected @@ -16337,6 +16337,12 @@ ir.cpp: # 2141| Type = [PlainCharType] char # 2141| Value = [CharLiteral] 97 # 2141| ValueCategory = prvalue +# 2141| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2141| Type = [VoidType] void +# 2141| ValueCategory = prvalue +# 2141| getQualifier(): [VariableAccess] x +# 2141| Type = [Class] ClassWithDestructor +# 2141| ValueCategory = lvalue # 2143| getStmt(2): [SwitchStmt] switch (...) ... # 2143| getInitialization(): [DeclStmt] declaration # 2143| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x From ebd6853194e9f9660fce7ed65944a437c14e5303 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 13 Feb 2024 13:42:10 +0100 Subject: [PATCH 185/378] C#: Avoid overlapping output in data flow test --- .../constructors/ConstructorFlow.expected | 109 ------------------ .../dataflow/constructors/ConstructorFlow.ql | 2 +- 2 files changed, 1 insertion(+), 110 deletions(-) diff --git a/csharp/ql/test/library-tests/dataflow/constructors/ConstructorFlow.expected b/csharp/ql/test/library-tests/dataflow/constructors/ConstructorFlow.expected index e26ef15a937..d007145010f 100644 --- a/csharp/ql/test/library-tests/dataflow/constructors/ConstructorFlow.expected +++ b/csharp/ql/test/library-tests/dataflow/constructors/ConstructorFlow.expected @@ -2,223 +2,114 @@ testFailures | Constructors.cs:101:25:101:43 | // ... | Missing result:hasValueFlow=5 | edges | Constructors.cs:5:24:5:25 | [post] this access : C_no_ctor [field s1] : Object | Constructors.cs:9:27:9:41 | object creation of type C_no_ctor : C_no_ctor [field s1] : Object | provenance | | -| Constructors.cs:5:24:5:25 | [post] this access : C_no_ctor [field s1] : Object | Constructors.cs:9:27:9:41 | object creation of type C_no_ctor : C_no_ctor [field s1] : Object | provenance | | -| Constructors.cs:5:29:5:45 | call to method Source : Object | Constructors.cs:5:24:5:25 | [post] this access : C_no_ctor [field s1] : Object | provenance | | | Constructors.cs:5:29:5:45 | call to method Source : Object | Constructors.cs:5:24:5:25 | [post] this access : C_no_ctor [field s1] : Object | provenance | | | Constructors.cs:9:27:9:41 | object creation of type C_no_ctor : C_no_ctor [field s1] : Object | Constructors.cs:10:13:10:13 | access to local variable c : C_no_ctor [field s1] : Object | provenance | | -| Constructors.cs:9:27:9:41 | object creation of type C_no_ctor : C_no_ctor [field s1] : Object | Constructors.cs:10:13:10:13 | access to local variable c : C_no_ctor [field s1] : Object | provenance | | -| 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: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: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: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:25:29:25:45 | object creation of type C_with_ctor : C_with_ctor [field s1] : Object | provenance | | -| Constructors.cs:21:24:21:25 | [post] this access : 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: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: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:29:25:45 | 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 | provenance | | -| Constructors.cs:25:29:25:45 | 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 | 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: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: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: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: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:26:41:26 | o : Object | Constructors.cs:41:38:41:38 | access to parameter o : 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: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:31:46:38 | access to 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: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: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: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 : 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: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:24:54:24 | access to parameter o : Object | provenance | | | Constructors.cs:52:35:52:35 | o : Object | Constructors.cs:54:24:54:24 | access to parameter o : Object | provenance | | | Constructors.cs:70:17:70:33 | call to method Source : Object | Constructors.cs:71:25:71:25 | access to local variable o : Object | provenance | | -| Constructors.cs:70:17:70:33 | call to method Source : Object | Constructors.cs:71:25:71:25 | access to local variable o : Object | provenance | | -| Constructors.cs:71:18:71:26 | object creation of type C1 : C1 [field Obj] : Object | Constructors.cs:72:14:72:15 | access to local variable c1 : C1 [field Obj] : Object | provenance | | | Constructors.cs:71:18:71:26 | object creation of type C1 : C1 [field Obj] : Object | Constructors.cs:72:14:72:15 | access to local variable c1 : C1 [field Obj] : Object | provenance | | | Constructors.cs:71:25:71:25 | access to local variable o : Object | Constructors.cs:41:26:41:26 | o : Object | provenance | | -| Constructors.cs:71:25:71:25 | access to local variable o : Object | Constructors.cs:41:26:41:26 | o : Object | provenance | | -| Constructors.cs:71:25:71:25 | access to local variable o : Object | Constructors.cs:71:18:71:26 | object creation of type C1 : C1 [field Obj] : Object | provenance | | | Constructors.cs:71:25:71:25 | access to local variable o : Object | Constructors.cs:71:18:71:26 | object creation of type C1 : C1 [field Obj] : Object | provenance | | | Constructors.cs:72:14:72:15 | access to local variable c1 : C1 [field Obj] : Object | Constructors.cs:72:14:72:19 | access to field Obj | provenance | | -| Constructors.cs:72:14:72:15 | access to local variable c1 : C1 [field Obj] : Object | Constructors.cs:72:14:72:19 | access to field Obj | provenance | | -| Constructors.cs:77:19:77:35 | call to method Source : Object | Constructors.cs:79:25:79:27 | access to local variable o21 : Object | provenance | | | Constructors.cs:77:19:77:35 | call to method Source : Object | Constructors.cs:79:25:79:27 | access to local variable o21 : Object | provenance | | | Constructors.cs:78:19:78:35 | call to method Source : Object | Constructors.cs:79:30:79:32 | access to local variable o22 : Object | provenance | | -| Constructors.cs:78:19:78:35 | call to method Source : Object | Constructors.cs:79:30:79:32 | access to local variable o22 : Object | provenance | | -| Constructors.cs:79:18:79:33 | object creation of type C2 : C2 [field Obj21] : Object | Constructors.cs:80:14:80:15 | access to local variable c2 : C2 [field Obj21] : Object | provenance | | | Constructors.cs:79:18:79:33 | object creation of type C2 : C2 [field Obj21] : Object | Constructors.cs:80:14:80:15 | access to local variable c2 : C2 [field Obj21] : Object | provenance | | | Constructors.cs:79:18:79:33 | object creation of type C2 : C2 [field Obj21] : Object | Constructors.cs:82:14:82:15 | access to local variable c2 : C2 [field Obj21] : Object | provenance | | -| Constructors.cs:79:18:79:33 | object creation of type C2 : C2 [field Obj21] : Object | Constructors.cs:82:14:82:15 | access to local variable c2 : C2 [field Obj21] : Object | provenance | | -| 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 | provenance | | | 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 | provenance | | | Constructors.cs:79:25:79:27 | access to local variable o21 : Object | Constructors.cs:44:28:44:35 | o21param : Object | provenance | | -| Constructors.cs:79:25:79:27 | access to local variable o21 : Object | Constructors.cs:44:28:44:35 | o21param : Object | provenance | | -| Constructors.cs:79:25:79:27 | access to local variable o21 : Object | Constructors.cs:79:18:79:33 | object creation of type C2 : C2 [field Obj21] : Object | provenance | | | Constructors.cs:79:25:79:27 | access to local variable o21 : Object | Constructors.cs:79:18:79:33 | object creation of type C2 : C2 [field Obj21] : Object | provenance | | | Constructors.cs:79:30:79:32 | access to local variable o22 : Object | Constructors.cs:44:45:44:52 | o22param : Object | provenance | | -| Constructors.cs:79:30:79:32 | access to local variable o22 : Object | Constructors.cs:44:45:44:52 | o22param : Object | provenance | | -| Constructors.cs:79:30:79:32 | access to local variable o22 : Object | Constructors.cs:79:18:79:33 | object creation of type C2 : C2 [parameter o22param] : Object | provenance | | | Constructors.cs:79:30:79:32 | access to local variable o22 : Object | Constructors.cs:79:18:79:33 | object creation of type C2 : C2 [parameter o22param] : Object | provenance | | | Constructors.cs:80:14:80:15 | access to local variable c2 : C2 [field Obj21] : Object | Constructors.cs:80:14:80:21 | access to field Obj21 | provenance | | -| Constructors.cs:80:14:80:15 | access to local variable c2 : C2 [field Obj21] : Object | Constructors.cs:80:14:80:21 | access to field Obj21 | provenance | | -| 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 | provenance | | | 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 | provenance | | | Constructors.cs:81:14:81:15 | access to local variable c2 : C2 [parameter o22param] : Object | Constructors.cs:81:14:81:21 | access to property Obj22 | provenance | | -| Constructors.cs:81:14:81:15 | access to local variable c2 : C2 [parameter o22param] : Object | Constructors.cs:81:14:81:21 | access to property Obj22 | provenance | | -| 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 | provenance | | | 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 | provenance | | | Constructors.cs:82:14:82:15 | access to local variable c2 : C2 [field Obj21] : Object | Constructors.cs:82:14:82:21 | access to property Obj23 | provenance | | -| Constructors.cs:82:14:82:15 | access to local variable c2 : C2 [field Obj21] : Object | Constructors.cs:82:14:82:21 | access to property Obj23 | provenance | | -| Constructors.cs:91:21:91:37 | call to method Source : Object | Constructors.cs:92:19:92:23 | access to local variable taint : Object | provenance | | | Constructors.cs:91:21:91:37 | call to method Source : Object | Constructors.cs:92:19:92:23 | access to local variable taint : Object | provenance | | | 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 | provenance | | -| 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 | provenance | | -| Constructors.cs:92:19:92:23 | access to local variable taint : Object | Constructors.cs:52:35:52:35 | o : Object | provenance | | | Constructors.cs:92:19:92:23 | access to local variable taint : Object | Constructors.cs:52:35:52:35 | o : Object | provenance | | | Constructors.cs:92:19:92:23 | access to local variable taint : Object | Constructors.cs:92:9:92:10 | [post] access to local variable c2 : C2 [parameter o22param] : Object | provenance | | -| Constructors.cs:92:19:92:23 | access to local variable taint : Object | Constructors.cs:92:9:92:10 | [post] access to local variable c2 : C2 [parameter o22param] : Object | provenance | | | 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 | provenance | | -| 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 | provenance | | -| Constructors.cs:93:14:93:15 | access to local variable c2 : C2 [parameter o22param] : Object | Constructors.cs:93:14:93:21 | access to property Obj22 | provenance | | | Constructors.cs:93:14:93:15 | access to local variable c2 : C2 [parameter o22param] : Object | Constructors.cs:93:14:93:21 | access to property Obj22 | provenance | | nodes | Constructors.cs:5:24:5:25 | [post] this access : C_no_ctor [field s1] : Object | semmle.label | [post] this access : C_no_ctor [field s1] : Object | -| Constructors.cs:5:24:5:25 | [post] this access : C_no_ctor [field s1] : Object | semmle.label | [post] this access : C_no_ctor [field s1] : Object | -| Constructors.cs:5:29:5:45 | call to method Source : Object | semmle.label | call to method Source : Object | | Constructors.cs:5:29:5:45 | call to method Source : Object | semmle.label | call to method Source : Object | | Constructors.cs:9:27:9:41 | object creation of type C_no_ctor : C_no_ctor [field s1] : Object | semmle.label | object creation of type C_no_ctor : C_no_ctor [field s1] : Object | -| Constructors.cs:9:27:9:41 | object creation of type C_no_ctor : C_no_ctor [field s1] : Object | semmle.label | object creation of type C_no_ctor : C_no_ctor [field s1] : Object | -| Constructors.cs:10:13:10:13 | access to local variable c : C_no_ctor [field s1] : Object | semmle.label | access to local variable c : C_no_ctor [field s1] : Object | | Constructors.cs:10:13:10:13 | access to local variable c : C_no_ctor [field s1] : Object | semmle.label | access to local variable c : C_no_ctor [field s1] : Object | | Constructors.cs:13:21:13:22 | this : C_no_ctor [field s1] : Object | semmle.label | this : C_no_ctor [field s1] : Object | -| Constructors.cs:13:21:13:22 | this : C_no_ctor [field s1] : Object | semmle.label | this : C_no_ctor [field s1] : Object | -| Constructors.cs:15:18:15:19 | access to field s1 | semmle.label | access to field s1 | | Constructors.cs:15:18:15:19 | access to field s1 | semmle.label | access to field s1 | | Constructors.cs:15:18:15:19 | this access : C_no_ctor [field s1] : Object | semmle.label | this access : C_no_ctor [field s1] : Object | -| Constructors.cs:15:18:15:19 | this access : C_no_ctor [field s1] : Object | semmle.label | this access : C_no_ctor [field s1] : Object | -| Constructors.cs:21:24:21:25 | [post] this access : C_with_ctor [field s1] : Object | semmle.label | [post] this access : C_with_ctor [field s1] : Object | | Constructors.cs:21:24:21:25 | [post] this access : C_with_ctor [field s1] : Object | semmle.label | [post] this access : C_with_ctor [field s1] : Object | | Constructors.cs:21:29:21:45 | call to method Source : Object | semmle.label | call to method Source : Object | -| Constructors.cs:21:29:21:45 | call to method Source : Object | semmle.label | call to method Source : 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: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: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:31:21:31:22 | this : C_with_ctor [field s1] : Object | semmle.label | this : 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 | 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: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:26:41:26 | o : Object | semmle.label | o : 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: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:41:38:41:38 | access to parameter o : Object | semmle.label | access to parameter o : Object | -| Constructors.cs:44:28:44:35 | o21param : Object | semmle.label | o21param : 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: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 | | Constructors.cs:46:23:46:27 | [post] this access : C2 [field Obj21] : Object | semmle.label | [post] this access : C2 [field Obj21] : Object | | Constructors.cs:46:31:46:38 | access to parameter o21param : Object | semmle.label | access to parameter o21param : Object | -| Constructors.cs:46:31:46:38 | access to parameter o21param : Object | semmle.label | access to parameter o21param : Object | -| Constructors.cs:48:32:48:39 | access to parameter o22param : Object | semmle.label | access to parameter o22param : Object | | Constructors.cs:48:32:48:39 | access to parameter o22param : Object | semmle.label | access to parameter o22param : Object | | Constructors.cs:48:32:48:39 | this : C2 [parameter o22param] : Object | semmle.label | this : C2 [parameter o22param] : Object | -| Constructors.cs:48:32:48:39 | this : C2 [parameter o22param] : Object | semmle.label | this : C2 [parameter o22param] : Object | -| Constructors.cs:50:32:50:36 | access to field Obj21 : Object | semmle.label | access to field Obj21 : Object | | 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 : 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:50:32:50:36 | this access : C2 [field Obj21] : Object | semmle.label | this access : C2 [field Obj21] : Object | | Constructors.cs:52:35:52:35 | o : Object | semmle.label | o : Object | -| Constructors.cs:52:35:52:35 | o : Object | semmle.label | o : Object | -| Constructors.cs:54:24:54:24 | access to parameter o : Object | semmle.label | access to parameter o : Object | | Constructors.cs:54:24:54:24 | access to parameter o : Object | semmle.label | access to parameter o : Object | | Constructors.cs:70:17:70:33 | call to method Source : Object | semmle.label | call to method Source : Object | -| Constructors.cs:70:17:70:33 | call to method Source : Object | semmle.label | call to method Source : Object | -| Constructors.cs:71:18:71:26 | object creation of type C1 : C1 [field Obj] : Object | semmle.label | object creation of type C1 : C1 [field Obj] : Object | | Constructors.cs:71:18:71:26 | object creation of type C1 : C1 [field Obj] : Object | semmle.label | object creation of type C1 : C1 [field Obj] : Object | | Constructors.cs:71:25:71:25 | access to local variable o : Object | semmle.label | access to local variable o : Object | -| Constructors.cs:71:25:71:25 | access to local variable o : Object | semmle.label | access to local variable o : Object | -| Constructors.cs:72:14:72:15 | access to local variable c1 : C1 [field Obj] : Object | semmle.label | access to local variable c1 : C1 [field Obj] : Object | | Constructors.cs:72:14:72:15 | access to local variable c1 : C1 [field Obj] : Object | semmle.label | access to local variable c1 : C1 [field Obj] : Object | | Constructors.cs:72:14:72:19 | access to field Obj | semmle.label | access to field Obj | -| Constructors.cs:72:14:72:19 | access to field Obj | semmle.label | access to field Obj | -| Constructors.cs:77:19:77:35 | call to method Source : Object | semmle.label | call to method Source : Object | | Constructors.cs:77:19:77:35 | call to method Source : Object | semmle.label | call to method Source : Object | | Constructors.cs:78:19:78:35 | call to method Source : Object | semmle.label | call to method Source : Object | -| Constructors.cs:78:19:78:35 | call to method Source : Object | semmle.label | call to method Source : Object | -| Constructors.cs:79:18:79:33 | object creation of type C2 : C2 [field Obj21] : Object | semmle.label | object creation of type C2 : C2 [field Obj21] : Object | | Constructors.cs:79:18:79:33 | object creation of type C2 : C2 [field Obj21] : Object | semmle.label | object creation of type C2 : C2 [field Obj21] : Object | | Constructors.cs:79:18:79:33 | object creation of type C2 : C2 [parameter o22param] : Object | semmle.label | object creation of type C2 : C2 [parameter o22param] : Object | -| Constructors.cs:79:18:79:33 | object creation of type C2 : C2 [parameter o22param] : Object | semmle.label | object creation of type C2 : C2 [parameter o22param] : Object | -| Constructors.cs:79:25:79:27 | access to local variable o21 : Object | semmle.label | access to local variable o21 : Object | | Constructors.cs:79:25:79:27 | access to local variable o21 : Object | semmle.label | access to local variable o21 : Object | | Constructors.cs:79:30:79:32 | access to local variable o22 : Object | semmle.label | access to local variable o22 : Object | -| Constructors.cs:79:30:79:32 | access to local variable o22 : Object | semmle.label | access to local variable o22 : Object | -| Constructors.cs:80:14:80:15 | access to local variable c2 : C2 [field Obj21] : Object | semmle.label | access to local variable c2 : C2 [field Obj21] : Object | | Constructors.cs:80:14:80:15 | access to local variable c2 : C2 [field Obj21] : Object | semmle.label | access to local variable c2 : C2 [field Obj21] : Object | | Constructors.cs:80:14:80:21 | access to field Obj21 | semmle.label | access to field Obj21 | -| Constructors.cs:80:14:80:21 | access to field Obj21 | semmle.label | access to field Obj21 | -| Constructors.cs:81:14:81:15 | access to local variable c2 : C2 [parameter o22param] : Object | semmle.label | access to local variable c2 : C2 [parameter o22param] : Object | | Constructors.cs:81:14:81:15 | access to local variable c2 : C2 [parameter o22param] : Object | semmle.label | access to local variable c2 : C2 [parameter o22param] : Object | | Constructors.cs:81:14:81:21 | access to property Obj22 | semmle.label | access to property Obj22 | -| Constructors.cs:81:14:81:21 | access to property Obj22 | semmle.label | access to property Obj22 | -| Constructors.cs:82:14:82:15 | access to local variable c2 : C2 [field Obj21] : Object | semmle.label | access to local variable c2 : C2 [field Obj21] : Object | | Constructors.cs:82:14:82:15 | access to local variable c2 : C2 [field Obj21] : Object | semmle.label | access to local variable c2 : C2 [field Obj21] : Object | | Constructors.cs:82:14:82:21 | access to property Obj23 | semmle.label | access to property Obj23 | -| Constructors.cs:82:14:82:21 | access to property Obj23 | semmle.label | access to property Obj23 | -| Constructors.cs:91:21:91:37 | call to method Source : Object | semmle.label | call to method Source : Object | | Constructors.cs:91:21:91:37 | call to method Source : Object | semmle.label | call to method Source : Object | | Constructors.cs:92:9:92:10 | [post] access to local variable c2 : C2 [parameter o22param] : Object | semmle.label | [post] access to local variable c2 : C2 [parameter o22param] : Object | -| Constructors.cs:92:9:92:10 | [post] access to local variable c2 : C2 [parameter o22param] : Object | semmle.label | [post] access to local variable c2 : C2 [parameter o22param] : Object | -| Constructors.cs:92:19:92:23 | access to local variable taint : Object | semmle.label | access to local variable taint : Object | | Constructors.cs:92:19:92:23 | access to local variable taint : Object | semmle.label | access to local variable taint : Object | | Constructors.cs:93:14:93:15 | access to local variable c2 : C2 [parameter o22param] : Object | semmle.label | access to local variable c2 : C2 [parameter o22param] : Object | -| Constructors.cs:93:14:93:15 | access to local variable c2 : C2 [parameter o22param] : Object | semmle.label | access to local variable c2 : C2 [parameter o22param] : Object | -| Constructors.cs:93:14:93:21 | access to property Obj22 | semmle.label | access to property Obj22 | | Constructors.cs:93:14:93:21 | access to property Obj22 | semmle.label | access to property Obj22 | subpaths | Constructors.cs:71:25:71:25 | access to local variable o : Object | Constructors.cs:41:26:41:26 | o : Object | Constructors.cs:41:32:41:34 | [post] this access : C1 [field Obj] : Object | Constructors.cs:71:18:71:26 | object creation of type C1 : C1 [field Obj] : Object | -| Constructors.cs:71:25:71:25 | access to local variable o : Object | Constructors.cs:41:26:41:26 | o : Object | Constructors.cs:41:32:41:34 | [post] this access : 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:46:23:46:27 | [post] this access : C2 [field Obj21] : Object | Constructors.cs:79:18:79:33 | object creation of type C2 : C2 [field Obj21] : Object | | Constructors.cs:79:25:79:27 | access to local variable o21 : Object | Constructors.cs:44:28:44:35 | o21param : Object | Constructors.cs:46:23:46:27 | [post] this access : 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:45:44:52 | o22param : Object | Constructors.cs:79:18:79:33 | object creation of type C2 : C2 [parameter o22param] : Object | -| Constructors.cs:79:30:79:32 | access to local variable o22 : Object | Constructors.cs:44:45:44:52 | o22param : Object | Constructors.cs:44:45:44:52 | 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: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: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:54:24:54:24 | access to parameter o : 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:54:24:54:24 | access to parameter o : 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: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 | #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 | -| 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 | -| Constructors.cs:33:18:33:19 | access to field s1 | Constructors.cs:21:29:21:45 | call to method Source : Object | Constructors.cs:33:18:33:19 | access to field s1 | $@ | Constructors.cs:21:29:21:45 | call to method Source : Object | call to method Source : Object | | Constructors.cs:33:18:33:19 | access to field s1 | Constructors.cs:21:29:21:45 | call to method Source : Object | Constructors.cs:33:18:33:19 | access to field s1 | $@ | Constructors.cs:21:29:21:45 | call to method Source : Object | call to method Source : Object | | Constructors.cs:72:14:72:19 | access to field Obj | Constructors.cs:70:17:70:33 | call to method Source : Object | Constructors.cs:72:14:72:19 | access to field Obj | $@ | Constructors.cs:70:17:70:33 | call to method Source : Object | call to method Source : Object | -| Constructors.cs:72:14:72:19 | access to field Obj | Constructors.cs:70:17:70:33 | call to method Source : Object | Constructors.cs:72:14:72:19 | access to field Obj | $@ | Constructors.cs:70:17:70:33 | call to method Source : Object | call to method Source : Object | -| Constructors.cs:80:14:80:21 | access to field Obj21 | Constructors.cs:77:19:77:35 | call to method Source : Object | Constructors.cs:80:14:80:21 | access to field Obj21 | $@ | Constructors.cs:77:19:77:35 | call to method Source : Object | call to method Source : Object | | Constructors.cs:80:14:80:21 | access to field Obj21 | Constructors.cs:77:19:77:35 | call to method Source : Object | Constructors.cs:80:14:80:21 | access to field Obj21 | $@ | Constructors.cs:77:19:77:35 | call to method Source : Object | call to method Source : Object | | Constructors.cs:81:14:81:21 | access to property Obj22 | Constructors.cs:78:19:78:35 | call to method Source : Object | Constructors.cs:81:14:81:21 | access to property Obj22 | $@ | Constructors.cs:78:19:78:35 | call to method Source : Object | call to method Source : Object | -| Constructors.cs:81:14:81:21 | access to property Obj22 | Constructors.cs:78:19:78:35 | call to method Source : Object | Constructors.cs:81:14:81:21 | access to property Obj22 | $@ | Constructors.cs:78:19:78:35 | call to method Source : Object | call to method Source : Object | -| Constructors.cs:82:14:82:21 | access to property Obj23 | Constructors.cs:77:19:77:35 | call to method Source : Object | Constructors.cs:82:14:82:21 | access to property Obj23 | $@ | Constructors.cs:77:19:77:35 | call to method Source : Object | call to method Source : Object | | Constructors.cs:82:14:82:21 | access to property Obj23 | Constructors.cs:77:19:77:35 | call to method Source : Object | Constructors.cs:82:14:82:21 | access to property Obj23 | $@ | Constructors.cs:77:19:77:35 | call to method Source : Object | call to method Source : Object | | Constructors.cs:93:14:93:21 | access to property Obj22 | Constructors.cs:91:21:91:37 | call to method Source : Object | Constructors.cs:93:14:93:21 | access to property Obj22 | $@ | Constructors.cs:91:21:91:37 | call to method Source : Object | call to method Source : Object | -| Constructors.cs:93:14:93:21 | access to property Obj22 | Constructors.cs:91:21:91:37 | call to method Source : Object | Constructors.cs:93:14:93:21 | access to property Obj22 | $@ | Constructors.cs:91:21:91:37 | call to method Source : Object | call to method Source : Object | diff --git a/csharp/ql/test/library-tests/dataflow/constructors/ConstructorFlow.ql b/csharp/ql/test/library-tests/dataflow/constructors/ConstructorFlow.ql index 9336e1b28be..f47c9f4e9a4 100644 --- a/csharp/ql/test/library-tests/dataflow/constructors/ConstructorFlow.ql +++ b/csharp/ql/test/library-tests/dataflow/constructors/ConstructorFlow.ql @@ -4,7 +4,7 @@ import csharp import TestUtilities.InlineFlowTest -import DefaultFlowTest +import ValueFlowTest import PathGraph from PathNode source, PathNode sink From 3f43f4543726e8a775deee8398ad3d5aa3f03084 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 13 Feb 2024 13:54:23 +0100 Subject: [PATCH 186/378] C#: Assume captured variables are live at exit in SSA construction --- .../code/csharp/dataflow/internal/SsaImpl.qll | 35 ++++++++++++++++++- .../constructors/ConstructorFlow.expected | 28 ++++++++++++++- .../library-tests/dataflow/ssa/Capture.cs | 4 +-- .../dataflow/ssa/SSAPhi.expected | 1 + .../ssa/SsaCapturedVariableDef.expected | 5 +++ .../dataflow/ssa/SsaDef.expected | 12 +++++++ .../dataflow/ssa/SsaDefElement.expected | 11 ++++++ .../dataflow/ssa/SsaExplicitDef.expected | 6 ++++ .../dataflow/ssa/SsaImplicitCall.expected | 5 +++ .../dataflow/ssa/SsaUltimateDef.expected | 18 ++++++++++ 10 files changed, 121 insertions(+), 4 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/SsaImpl.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/SsaImpl.qll index 8a1f2b5b296..8b7db48140a 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/SsaImpl.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/SsaImpl.qll @@ -870,6 +870,39 @@ private module CapturedVariableImpl { ) ) } + + /** + * Holds if captured local scope variable `v` is written inside the callable + * to which `bb` belongs. + * + * In this case a pseudo-read is inserted at the exit node at index `i` in `bb`, + * in order to make the write live. + * + * Example: + * + * ```csharp + * class C { + * void M1() { + * int i = 0; + * void M2() { i = 2; }; + * M2(); + * System.Console.WriteLine(i); + * } + * } + * ``` + * + * The write to `i` inside `M2` on line 4 is live because of the implicit call + * definition on line 5. + */ + predicate capturedExitRead( + ControlFlow::BasicBlock bb, int i, CapturedWrittenLocalScopeSourceVariable v + ) { + exists(ControlFlow::Nodes::AnnotatedExitNode exit | + exit.isNormal() and + variableDefinition(bb.getAPredecessor*(), _, v, _) and + exit = bb.getNode(i) + ) + } } /** @@ -1083,7 +1116,7 @@ private predicate variableReadPseudo(ControlFlow::BasicBlock bb, int i, Ssa::Sou or refReadBeforeWrite(bb, i, v) or - capturedReadOut(bb, i, v, _, _, _) + CapturedVariableImpl::capturedExitRead(bb, i, v) or capturedReadIn(bb, i, v, _, _, _) } diff --git a/csharp/ql/test/library-tests/dataflow/constructors/ConstructorFlow.expected b/csharp/ql/test/library-tests/dataflow/constructors/ConstructorFlow.expected index d007145010f..d561be22b27 100644 --- a/csharp/ql/test/library-tests/dataflow/constructors/ConstructorFlow.expected +++ b/csharp/ql/test/library-tests/dataflow/constructors/ConstructorFlow.expected @@ -1,5 +1,4 @@ testFailures -| Constructors.cs:101:25:101:43 | // ... | Missing result:hasValueFlow=5 | edges | Constructors.cs:5:24:5:25 | [post] this access : C_no_ctor [field s1] : Object | Constructors.cs:9:27:9:41 | object creation of type C_no_ctor : C_no_ctor [field s1] : Object | provenance | | | Constructors.cs:5:29:5:45 | call to method Source : Object | Constructors.cs:5:24:5:25 | [post] this access : C_no_ctor [field s1] : Object | provenance | | @@ -20,7 +19,12 @@ edges | 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:24 | SSA def(o22param) : Object | provenance | | | Constructors.cs:52:35:52:35 | o : Object | Constructors.cs:54:24:54:24 | access to parameter o : Object | provenance | | +| Constructors.cs:57:54:57:55 | o2 : Object | Constructors.cs:59:13:59:19 | SSA def(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: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 | SSA def(o22param) : Object | provenance | | | Constructors.cs:70:17:70:33 | call to method Source : Object | Constructors.cs:71:25:71:25 | access to local variable o : Object | provenance | | | Constructors.cs:71:18:71:26 | object creation of type C1 : C1 [field Obj] : Object | Constructors.cs:72:14:72:15 | access to local variable c1 : C1 [field Obj] : Object | provenance | | | Constructors.cs:71:25:71:25 | access to local variable o : Object | Constructors.cs:41:26:41:26 | o : Object | provenance | | @@ -46,6 +50,12 @@ edges | Constructors.cs:92:19:92:23 | access to local variable taint : Object | Constructors.cs:92:9:92:10 | [post] access to local variable c2 : C2 [parameter o22param] : Object | provenance | | | 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 | provenance | | | Constructors.cs:93:14:93:15 | access to local variable c2 : C2 [parameter o22param] : Object | Constructors.cs:93:14:93:21 | access to property Obj22 | provenance | | +| Constructors.cs:99:21:99:37 | call to method Source : Object | Constructors.cs:100:25:100:29 | access to local variable taint : Object | provenance | | +| 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 | provenance | | +| Constructors.cs:100:25:100:29 | access to local variable taint : Object | Constructors.cs:62:41:62:41 | o : Object | provenance | | +| 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 | | nodes | Constructors.cs:5:24:5:25 | [post] this access : C_no_ctor [field s1] : Object | semmle.label | [post] this access : C_no_ctor [field s1] : Object | | Constructors.cs:5:29:5:45 | call to method Source : Object | semmle.label | call to method Source : Object | @@ -74,7 +84,13 @@ nodes | 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:35:52:35 | o : Object | semmle.label | o : Object | +| Constructors.cs:54:13:54:24 | SSA def(o22param) : Object | semmle.label | SSA def(o22param) : Object | | Constructors.cs:54:24:54:24 | access to parameter o : Object | semmle.label | access to parameter o : Object | +| Constructors.cs:57:54:57:55 | o2 : Object | semmle.label | o2 : Object | +| Constructors.cs:59:13:59:19 | SSA def(o1) : Object | semmle.label | SSA def(o1) : Object | +| Constructors.cs:62:41:62:41 | o : Object | semmle.label | o : Object | +| Constructors.cs:64:27:64:34 | SSA def(o22param) : Object | semmle.label | SSA def(o22param) : Object | +| Constructors.cs:64:37:64:37 | access to parameter o : Object | semmle.label | access to parameter o : Object | | Constructors.cs:70:17:70:33 | call to method Source : Object | semmle.label | call to method Source : Object | | Constructors.cs:71:18:71:26 | object creation of type C1 : C1 [field Obj] : Object | semmle.label | object creation of type C1 : C1 [field Obj] : Object | | Constructors.cs:71:25:71:25 | access to local variable o : Object | semmle.label | access to local variable o : Object | @@ -97,14 +113,23 @@ nodes | Constructors.cs:92:19:92:23 | access to local variable taint : Object | semmle.label | access to local variable taint : Object | | Constructors.cs:93:14:93:15 | access to local variable c2 : C2 [parameter o22param] : Object | semmle.label | access to local variable c2 : C2 [parameter o22param] : Object | | Constructors.cs:93:14:93:21 | access to property Obj22 | semmle.label | access to property Obj22 | +| Constructors.cs:99:21:99:37 | call to method Source : Object | semmle.label | call to method Source : Object | +| Constructors.cs:100:9:100:10 | [post] access to local variable c2 : C2 [parameter o22param] : Object | semmle.label | [post] access to local variable c2 : C2 [parameter o22param] : Object | +| 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 | 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:19 | SSA def(o1) : Object | Constructors.cs:64:27:64:34 | SSA def(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:32:41:34 | [post] this access : 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:46:23:46:27 | [post] this access : 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:45:44:52 | 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:54:13:54:24 | SSA def(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:54:24:54:24 | access to parameter o : 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:64:27:64:34 | SSA def(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 | #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 | | Constructors.cs:33:18:33:19 | access to field s1 | Constructors.cs:21:29:21:45 | call to method Source : Object | Constructors.cs:33:18:33:19 | access to field s1 | $@ | Constructors.cs:21:29:21:45 | call to method Source : Object | call to method Source : Object | @@ -113,3 +138,4 @@ subpaths | Constructors.cs:81:14:81:21 | access to property Obj22 | Constructors.cs:78:19:78:35 | call to method Source : Object | Constructors.cs:81:14:81:21 | access to property Obj22 | $@ | Constructors.cs:78:19:78:35 | call to method Source : Object | call to method Source : Object | | Constructors.cs:82:14:82:21 | access to property Obj23 | Constructors.cs:77:19:77:35 | call to method Source : Object | Constructors.cs:82:14:82:21 | access to property Obj23 | $@ | Constructors.cs:77:19:77:35 | call to method Source : Object | call to method Source : Object | | Constructors.cs:93:14:93:21 | access to property Obj22 | Constructors.cs:91:21:91:37 | call to method Source : Object | Constructors.cs:93:14:93:21 | access to property Obj22 | $@ | Constructors.cs:91:21:91:37 | call to method Source : Object | call to method Source : Object | +| Constructors.cs:101:14:101:21 | access to property Obj22 | Constructors.cs:99:21:99:37 | call to method Source : Object | Constructors.cs:101:14:101:21 | access to property Obj22 | $@ | Constructors.cs:99:21:99:37 | call to method Source : Object | call to method Source : Object | diff --git a/csharp/ql/test/library-tests/dataflow/ssa/Capture.cs b/csharp/ql/test/library-tests/dataflow/ssa/Capture.cs index a74d480668d..2e2c491bfc1 100644 --- a/csharp/ql/test/library-tests/dataflow/ssa/Capture.cs +++ b/csharp/ql/test/library-tests/dataflow/ssa/Capture.cs @@ -148,7 +148,7 @@ class Capture void M5() { Use(e); - e = 0; // Should *not* get an SSA definition (`e` is never read) + e = 0; // Should *not* get an SSA definition (`e` is never read), but does since captured variables are conservatively considered live } var f = 12; @@ -165,7 +165,7 @@ class Capture Use(g); }; - var h = 12; // Should *not* get an SSA definition + var h = 12; // Should *not* get an SSA definition, but does since captured variables are conservatively considered live void M8() { h = 0; diff --git a/csharp/ql/test/library-tests/dataflow/ssa/SSAPhi.expected b/csharp/ql/test/library-tests/dataflow/ssa/SSAPhi.expected index 8cbd5e6b1b6..134190ef871 100644 --- a/csharp/ql/test/library-tests/dataflow/ssa/SSAPhi.expected +++ b/csharp/ql/test/library-tests/dataflow/ssa/SSAPhi.expected @@ -4,6 +4,7 @@ | DefUse.cs:6:14:6:14 | y | DefUse.cs:23:9:23:15 | SSA phi(y) | DefUse.cs:18:13:18:18 | SSA def(y) | | DefUse.cs:6:14:6:14 | y | DefUse.cs:42:9:42:15 | SSA phi(y) | DefUse.cs:28:13:28:18 | SSA def(y) | | DefUse.cs:6:14:6:14 | y | DefUse.cs:42:9:42:15 | SSA phi(y) | DefUse.cs:39:13:39:18 | SSA def(y) | +| DefUse.cs:59:13:59:13 | i | DefUse.cs:3:17:3:19 | SSA phi(i) | DefUse.cs:76:9:76:11 | SSA def(i) | | DefUse.cs:79:13:79:14 | x1 | DefUse.cs:80:30:80:31 | SSA phi(x1) | DefUse.cs:79:13:79:18 | SSA def(x1) | | DefUse.cs:79:13:79:14 | x1 | DefUse.cs:80:30:80:31 | SSA phi(x1) | DefUse.cs:80:30:80:31 | SSA def(x1) | | DefUse.cs:97:13:97:14 | x5 | DefUse.cs:98:16:98:17 | SSA phi(x5) | DefUse.cs:97:13:97:18 | SSA def(x5) | diff --git a/csharp/ql/test/library-tests/dataflow/ssa/SsaCapturedVariableDef.expected b/csharp/ql/test/library-tests/dataflow/ssa/SsaCapturedVariableDef.expected index 7cd94d64ec2..48aafe94201 100644 --- a/csharp/ql/test/library-tests/dataflow/ssa/SsaCapturedVariableDef.expected +++ b/csharp/ql/test/library-tests/dataflow/ssa/SsaCapturedVariableDef.expected @@ -27,14 +27,19 @@ | in | Properties.cs:74:23:74:23 | a | Properties.cs:74:23:74:54 | SSA def(a) | Properties.cs:82:24:82:46 | SSA capture def(a) | Properties.cs:82:9:82:47 | call to method Select | true | | in | Properties.cs:75:23:75:23 | b | Properties.cs:75:23:75:35 | SSA def(b) | Properties.cs:85:24:85:46 | SSA capture def(b) | Properties.cs:85:9:85:47 | call to method Select | true | | out | Capture.cs:6:16:6:16 | i | Capture.cs:13:13:13:17 | SSA def(i) | Capture.cs:38:9:38:11 | SSA call def(i) | Capture.cs:38:9:38:11 | delegate call | false | +| out | Capture.cs:6:16:6:16 | i | Capture.cs:13:13:13:17 | SSA def(i) | Capture.cs:44:9:44:12 | SSA call def(i) | Capture.cs:44:9:44:12 | call to method M | true | | out | Capture.cs:8:13:8:13 | x | Capture.cs:15:13:15:17 | SSA def(x) | Capture.cs:38:9:38:11 | SSA call def(x) | Capture.cs:38:9:38:11 | delegate call | false | | out | Capture.cs:8:13:8:13 | x | Capture.cs:15:13:15:17 | SSA def(x) | Capture.cs:44:9:44:12 | SSA call def(x) | Capture.cs:44:9:44:12 | call to method M | true | | out | Capture.cs:29:13:29:13 | z | Capture.cs:30:28:30:32 | SSA def(z) | Capture.cs:32:9:32:11 | SSA call def(z) | Capture.cs:32:9:32:11 | delegate call | false | +| out | Capture.cs:29:13:29:13 | z | Capture.cs:30:28:30:32 | SSA def(z) | Capture.cs:44:9:44:12 | SSA call def(z) | Capture.cs:44:9:44:12 | call to method M | true | | out | Capture.cs:50:20:50:20 | a | Capture.cs:52:28:52:40 | SSA def(a) | Capture.cs:53:9:53:11 | SSA call def(a) | Capture.cs:53:9:53:11 | delegate call | false | | out | Capture.cs:59:13:59:13 | i | Capture.cs:60:36:60:38 | SSA def(i) | Capture.cs:61:9:61:25 | SSA call def(i) | Capture.cs:61:9:61:25 | call to method Select | true | | out | Capture.cs:75:13:75:13 | i | Capture.cs:76:80:76:80 | SSA def(i) | Capture.cs:77:9:77:25 | SSA call def(i) | Capture.cs:77:9:77:25 | call to method Select | true | +| out | Capture.cs:102:13:102:13 | z | Capture.cs:105:13:105:17 | SSA def(z) | Capture.cs:103:9:107:10 | SSA call def(z) | Capture.cs:103:9:107:10 | call to local function fn | true | +| out | Capture.cs:122:13:122:13 | b | Capture.cs:125:13:125:17 | SSA def(b) | Capture.cs:128:9:128:12 | SSA call def(b) | Capture.cs:128:9:128:12 | call to local function M2 | false | | out | Capture.cs:130:13:130:13 | c | Capture.cs:133:13:133:17 | SSA def(c) | Capture.cs:136:9:136:12 | SSA call def(c) | Capture.cs:136:9:136:12 | call to local function M3 | false | | out | Capture.cs:139:13:139:13 | d | Capture.cs:142:13:142:17 | SSA def(d) | Capture.cs:144:9:144:12 | SSA call def(d) | Capture.cs:144:9:144:12 | call to local function M4 | false | +| out | Capture.cs:154:13:154:13 | f | Capture.cs:158:13:158:17 | SSA def(f) | Capture.cs:160:9:160:12 | SSA call def(f) | Capture.cs:160:9:160:12 | call to local function M6 | false | | out | Capture.cs:168:13:168:13 | h | Capture.cs:174:17:174:21 | SSA def(h) | Capture.cs:176:13:176:16 | SSA call def(h) | Capture.cs:176:13:176:16 | call to local function M9 | false | | out | Capture.cs:229:13:229:13 | i | Capture.cs:235:21:235:25 | SSA def(i) | Capture.cs:236:9:236:12 | SSA call def(i) | Capture.cs:236:9:236:12 | call to local function M3 | false | | out | DefUse.cs:167:23:167:23 | i | DefUse.cs:173:13:173:17 | SSA def(i) | DefUse.cs:181:9:181:11 | SSA call def(i) | DefUse.cs:181:9:181:11 | delegate call | false | diff --git a/csharp/ql/test/library-tests/dataflow/ssa/SsaDef.expected b/csharp/ql/test/library-tests/dataflow/ssa/SsaDef.expected index ed1b3a00cc1..02d622c006a 100644 --- a/csharp/ql/test/library-tests/dataflow/ssa/SsaDef.expected +++ b/csharp/ql/test/library-tests/dataflow/ssa/SsaDef.expected @@ -2,6 +2,7 @@ | Capture.cs:6:16:6:16 | i | Capture.cs:10:20:27:9 | SSA capture def(i) | | Capture.cs:6:16:6:16 | i | Capture.cs:13:13:13:17 | SSA def(i) | | Capture.cs:6:16:6:16 | i | Capture.cs:38:9:38:11 | SSA call def(i) | +| Capture.cs:6:16:6:16 | i | Capture.cs:44:9:44:12 | SSA call def(i) | | Capture.cs:8:13:8:13 | x | Capture.cs:8:13:8:17 | SSA def(x) | | Capture.cs:8:13:8:13 | x | Capture.cs:15:13:15:17 | SSA def(x) | | Capture.cs:8:13:8:13 | x | Capture.cs:19:24:23:13 | SSA capture def(x) | @@ -16,6 +17,7 @@ | Capture.cs:29:13:29:13 | z | Capture.cs:30:28:30:32 | SSA def(z) | | Capture.cs:29:13:29:13 | z | Capture.cs:32:9:32:11 | SSA call def(z) | | Capture.cs:29:13:29:13 | z | Capture.cs:37:9:37:13 | SSA def(z) | +| Capture.cs:29:13:29:13 | z | Capture.cs:44:9:44:12 | SSA call def(z) | | Capture.cs:30:16:30:16 | c | Capture.cs:30:16:30:35 | SSA def(c) | | Capture.cs:50:20:50:20 | a | Capture.cs:50:20:50:20 | SSA param(a) | | Capture.cs:50:20:50:20 | a | Capture.cs:52:28:52:40 | SSA def(a) | @@ -50,22 +52,28 @@ | Capture.cs:94:13:94:13 | y | Capture.cs:96:12:100:9 | SSA capture def(y) | | Capture.cs:98:17:98:17 | x | Capture.cs:98:17:98:21 | SSA def(x) | | Capture.cs:102:13:102:13 | z | Capture.cs:102:13:102:18 | SSA def(z) | +| Capture.cs:102:13:102:13 | z | Capture.cs:103:9:107:10 | SSA call def(z) | | Capture.cs:102:13:102:13 | z | Capture.cs:105:13:105:17 | SSA def(z) | | Capture.cs:114:13:114:13 | a | Capture.cs:114:13:114:18 | SSA def(a) | | Capture.cs:114:13:114:13 | a | Capture.cs:115:9:119:9 | SSA capture def(a) | | Capture.cs:117:17:117:17 | x | Capture.cs:117:17:117:21 | SSA def(x) | | Capture.cs:122:13:122:13 | b | Capture.cs:122:13:122:18 | SSA def(b) | | Capture.cs:122:13:122:13 | b | Capture.cs:125:13:125:17 | SSA def(b) | +| Capture.cs:122:13:122:13 | b | Capture.cs:128:9:128:12 | SSA call def(b) | | Capture.cs:130:13:130:13 | c | Capture.cs:130:13:130:18 | SSA def(c) | | Capture.cs:130:13:130:13 | c | Capture.cs:133:13:133:17 | SSA def(c) | | Capture.cs:130:13:130:13 | c | Capture.cs:136:9:136:12 | SSA call def(c) | | Capture.cs:139:13:139:13 | d | Capture.cs:139:13:139:18 | SSA def(d) | | Capture.cs:139:13:139:13 | d | Capture.cs:142:13:142:17 | SSA def(d) | | Capture.cs:139:13:139:13 | d | Capture.cs:144:9:144:12 | SSA call def(d) | +| Capture.cs:147:13:147:13 | e | Capture.cs:147:13:147:18 | SSA def(e) | | Capture.cs:147:13:147:13 | e | Capture.cs:148:9:152:9 | SSA capture def(e) | +| Capture.cs:147:13:147:13 | e | Capture.cs:151:13:151:17 | SSA def(e) | | Capture.cs:154:13:154:13 | f | Capture.cs:154:13:154:18 | SSA def(f) | | Capture.cs:154:13:154:13 | f | Capture.cs:158:13:158:17 | SSA def(f) | +| Capture.cs:154:13:154:13 | f | Capture.cs:160:9:160:12 | SSA call def(f) | | Capture.cs:162:13:162:13 | g | Capture.cs:163:9:166:9 | SSA capture def(g) | +| Capture.cs:168:13:168:13 | h | Capture.cs:168:13:168:18 | SSA def(h) | | Capture.cs:168:13:168:13 | h | Capture.cs:171:13:171:17 | SSA def(h) | | Capture.cs:168:13:168:13 | h | Capture.cs:174:17:174:21 | SSA def(h) | | Capture.cs:168:13:168:13 | h | Capture.cs:176:13:176:16 | SSA call def(h) | @@ -86,6 +94,7 @@ | Capture.cs:229:13:229:13 | i | Capture.cs:235:21:235:25 | SSA def(i) | | Capture.cs:229:13:229:13 | i | Capture.cs:236:9:236:12 | SSA call def(i) | | Capture.cs:242:13:242:13 | i | Capture.cs:242:13:242:17 | SSA def(i) | +| Capture.cs:242:13:242:13 | i | Capture.cs:245:13:245:17 | SSA def(i) | | Capture.cs:242:13:242:13 | i | Capture.cs:254:27:254:27 | SSA def(i) | | Capture.cs:248:36:248:36 | j | Capture.cs:251:13:251:17 | SSA def(j) | | Consistency.cs:7:25:7:25 | b | Consistency.cs:7:25:7:25 | SSA param(b) | @@ -94,6 +103,7 @@ | Consistency.cs:25:29:25:29 | c | Consistency.cs:25:29:25:29 | SSA def(c) | | Consistency.cs:26:13:26:19 | c.Field | Consistency.cs:25:29:25:29 | SSA qualifier def(c.Field) | | Consistency.cs:30:30:30:30 | c | Consistency.cs:32:9:32:29 | SSA def(c) | +| Consistency.cs:38:13:38:13 | i | Consistency.cs:38:13:38:13 | SSA def(i) | | Consistency.cs:38:13:38:13 | i | Consistency.cs:39:28:39:32 | SSA def(i) | | Consistency.cs:44:11:44:11 | s | Consistency.cs:44:11:44:11 | SSA def(s) | | Consistency.cs:49:30:49:30 | a | Consistency.cs:49:30:49:30 | SSA param(a) | @@ -119,7 +129,9 @@ | DefUse.cs:44:13:44:13 | z | DefUse.cs:50:23:50:23 | SSA def(z) | | DefUse.cs:53:9:53:13 | this.Field | DefUse.cs:53:9:53:17 | SSA def(this.Field) | | DefUse.cs:56:9:56:12 | this.Prop | DefUse.cs:56:9:56:16 | SSA def(this.Prop) | +| DefUse.cs:59:13:59:13 | i | DefUse.cs:3:17:3:19 | SSA phi(i) | | DefUse.cs:59:13:59:13 | i | DefUse.cs:59:13:59:17 | SSA def(i) | +| DefUse.cs:59:13:59:13 | i | DefUse.cs:60:37:60:41 | SSA def(i) | | DefUse.cs:59:13:59:13 | i | DefUse.cs:71:9:71:13 | SSA def(i) | | DefUse.cs:59:13:59:13 | i | DefUse.cs:72:9:72:11 | SSA def(i) | | DefUse.cs:59:13:59:13 | i | DefUse.cs:75:9:75:13 | SSA def(i) | diff --git a/csharp/ql/test/library-tests/dataflow/ssa/SsaDefElement.expected b/csharp/ql/test/library-tests/dataflow/ssa/SsaDefElement.expected index 55ab1190c8f..4ec9fbf90b0 100644 --- a/csharp/ql/test/library-tests/dataflow/ssa/SsaDefElement.expected +++ b/csharp/ql/test/library-tests/dataflow/ssa/SsaDefElement.expected @@ -16,7 +16,9 @@ | Capture.cs:38:9:38:11 | SSA call def(i) | Capture.cs:38:9:38:11 | delegate call | | Capture.cs:38:9:38:11 | SSA call def(x) | Capture.cs:38:9:38:11 | delegate call | | Capture.cs:43:9:43:13 | SSA def(x) | Capture.cs:43:9:43:13 | ... = ... | +| Capture.cs:44:9:44:12 | SSA call def(i) | Capture.cs:44:9:44:12 | call to method M | | Capture.cs:44:9:44:12 | SSA call def(x) | Capture.cs:44:9:44:12 | call to method M | +| Capture.cs:44:9:44:12 | SSA call def(z) | Capture.cs:44:9:44:12 | call to method M | | Capture.cs:50:20:50:20 | SSA param(a) | Capture.cs:50:20:50:20 | a | | Capture.cs:52:16:52:43 | SSA def(b) | Capture.cs:52:16:52:43 | Action b = ... | | Capture.cs:52:28:52:40 | SSA def(a) | Capture.cs:52:28:52:40 | ... = ... | @@ -50,22 +52,28 @@ | Capture.cs:96:12:100:9 | SSA capture def(y) | Capture.cs:96:12:100:9 | (...) => ... | | Capture.cs:98:17:98:21 | SSA def(x) | Capture.cs:98:17:98:21 | Int32 x = ... | | Capture.cs:102:13:102:18 | SSA def(z) | Capture.cs:102:13:102:18 | Int32 z = ... | +| Capture.cs:103:9:107:10 | SSA call def(z) | Capture.cs:103:9:107:10 | call to local function fn | | Capture.cs:105:13:105:17 | SSA def(z) | Capture.cs:105:13:105:17 | ... = ... | | Capture.cs:114:13:114:18 | SSA def(a) | Capture.cs:114:13:114:18 | Int32 a = ... | | Capture.cs:115:9:119:9 | SSA capture def(a) | Capture.cs:115:9:119:9 | M1 | | Capture.cs:117:17:117:21 | SSA def(x) | Capture.cs:117:17:117:21 | Int32 x = ... | | Capture.cs:122:13:122:18 | SSA def(b) | Capture.cs:122:13:122:18 | Int32 b = ... | | Capture.cs:125:13:125:17 | SSA def(b) | Capture.cs:125:13:125:17 | ... = ... | +| Capture.cs:128:9:128:12 | SSA call def(b) | Capture.cs:128:9:128:12 | call to local function M2 | | Capture.cs:130:13:130:18 | SSA def(c) | Capture.cs:130:13:130:18 | Int32 c = ... | | Capture.cs:133:13:133:17 | SSA def(c) | Capture.cs:133:13:133:17 | ... = ... | | Capture.cs:136:9:136:12 | SSA call def(c) | Capture.cs:136:9:136:12 | call to local function M3 | | Capture.cs:139:13:139:18 | SSA def(d) | Capture.cs:139:13:139:18 | Int32 d = ... | | Capture.cs:142:13:142:17 | SSA def(d) | Capture.cs:142:13:142:17 | ... = ... | | Capture.cs:144:9:144:12 | SSA call def(d) | Capture.cs:144:9:144:12 | call to local function M4 | +| Capture.cs:147:13:147:18 | SSA def(e) | Capture.cs:147:13:147:18 | Int32 e = ... | | Capture.cs:148:9:152:9 | SSA capture def(e) | Capture.cs:148:9:152:9 | M5 | +| Capture.cs:151:13:151:17 | SSA def(e) | Capture.cs:151:13:151:17 | ... = ... | | Capture.cs:154:13:154:18 | SSA def(f) | Capture.cs:154:13:154:18 | Int32 f = ... | | Capture.cs:158:13:158:17 | SSA def(f) | Capture.cs:158:13:158:17 | ... = ... | +| Capture.cs:160:9:160:12 | SSA call def(f) | Capture.cs:160:9:160:12 | call to local function M6 | | Capture.cs:163:9:166:9 | SSA capture def(g) | Capture.cs:163:9:166:9 | M7 | +| Capture.cs:168:13:168:18 | SSA def(h) | Capture.cs:168:13:168:18 | Int32 h = ... | | Capture.cs:171:13:171:17 | SSA def(h) | Capture.cs:171:13:171:17 | ... = ... | | Capture.cs:174:17:174:21 | SSA def(h) | Capture.cs:174:17:174:21 | ... = ... | | Capture.cs:176:13:176:16 | SSA call def(h) | Capture.cs:176:13:176:16 | call to local function M9 | @@ -86,6 +94,7 @@ | Capture.cs:235:21:235:25 | SSA def(i) | Capture.cs:235:21:235:25 | ... = ... | | Capture.cs:236:9:236:12 | SSA call def(i) | Capture.cs:236:9:236:12 | call to local function M3 | | Capture.cs:242:13:242:17 | SSA def(i) | Capture.cs:242:13:242:17 | Int32 i = ... | +| Capture.cs:245:13:245:17 | SSA def(i) | Capture.cs:245:13:245:17 | ... = ... | | Capture.cs:251:13:251:17 | SSA def(j) | Capture.cs:251:13:251:17 | ... = ... | | Capture.cs:254:27:254:27 | SSA def(i) | Capture.cs:254:9:254:28 | call to local function CaptureAndRef | | Consistency.cs:7:25:7:25 | SSA param(b) | Consistency.cs:7:25:7:25 | b | @@ -94,6 +103,7 @@ | Consistency.cs:25:29:25:29 | SSA def(c) | Consistency.cs:25:9:25:30 | call to method Out | | Consistency.cs:25:29:25:29 | SSA qualifier def(c.Field) | Consistency.cs:25:9:25:30 | call to method Out | | Consistency.cs:32:9:32:29 | SSA def(c) | Consistency.cs:32:9:32:29 | ... = ... | +| Consistency.cs:38:13:38:13 | SSA def(i) | Consistency.cs:38:13:38:13 | Int32 i | | Consistency.cs:39:28:39:32 | SSA def(i) | Consistency.cs:39:28:39:32 | ... = ... | | Consistency.cs:44:11:44:11 | SSA def(s) | Consistency.cs:44:11:44:11 | S s | | Consistency.cs:49:30:49:30 | SSA param(a) | Consistency.cs:49:30:49:30 | a | @@ -117,6 +127,7 @@ | DefUse.cs:53:9:53:17 | SSA def(this.Field) | DefUse.cs:53:9:53:17 | ... = ... | | DefUse.cs:56:9:56:16 | SSA def(this.Prop) | DefUse.cs:56:9:56:16 | ... = ... | | DefUse.cs:59:13:59:17 | SSA def(i) | DefUse.cs:59:13:59:17 | Int32 i = ... | +| DefUse.cs:60:37:60:41 | SSA def(i) | DefUse.cs:60:37:60:41 | ... = ... | | DefUse.cs:63:9:63:18 | SSA def(this.Field2) | DefUse.cs:63:9:63:18 | ... = ... | | DefUse.cs:66:9:66:18 | SSA def(this.Field3) | DefUse.cs:66:9:66:18 | ... = ... | | DefUse.cs:67:19:67:27 | SSA def(tc) | DefUse.cs:67:19:67:27 | TestClass tc = ... | diff --git a/csharp/ql/test/library-tests/dataflow/ssa/SsaExplicitDef.expected b/csharp/ql/test/library-tests/dataflow/ssa/SsaExplicitDef.expected index a969905fadb..56d86ea53cd 100644 --- a/csharp/ql/test/library-tests/dataflow/ssa/SsaExplicitDef.expected +++ b/csharp/ql/test/library-tests/dataflow/ssa/SsaExplicitDef.expected @@ -43,8 +43,11 @@ | Capture.cs:130:13:130:13 | c | Capture.cs:133:13:133:17 | SSA def(c) | Capture.cs:133:13:133:17 | ... = ... | | Capture.cs:139:13:139:13 | d | Capture.cs:139:13:139:18 | SSA def(d) | Capture.cs:139:13:139:18 | Int32 d = ... | | Capture.cs:139:13:139:13 | d | Capture.cs:142:13:142:17 | SSA def(d) | Capture.cs:142:13:142:17 | ... = ... | +| Capture.cs:147:13:147:13 | e | Capture.cs:147:13:147:18 | SSA def(e) | Capture.cs:147:13:147:18 | Int32 e = ... | +| Capture.cs:147:13:147:13 | e | Capture.cs:151:13:151:17 | SSA def(e) | Capture.cs:151:13:151:17 | ... = ... | | Capture.cs:154:13:154:13 | f | Capture.cs:154:13:154:18 | SSA def(f) | Capture.cs:154:13:154:18 | Int32 f = ... | | Capture.cs:154:13:154:13 | f | Capture.cs:158:13:158:17 | SSA def(f) | Capture.cs:158:13:158:17 | ... = ... | +| Capture.cs:168:13:168:13 | h | Capture.cs:168:13:168:18 | SSA def(h) | Capture.cs:168:13:168:18 | Int32 h = ... | | Capture.cs:168:13:168:13 | h | Capture.cs:171:13:171:17 | SSA def(h) | Capture.cs:171:13:171:17 | ... = ... | | Capture.cs:168:13:168:13 | h | Capture.cs:174:17:174:21 | SSA def(h) | Capture.cs:174:17:174:21 | ... = ... | | Capture.cs:182:17:182:17 | i | Capture.cs:182:17:182:21 | SSA def(i) | Capture.cs:182:17:182:21 | Int32 i = ... | @@ -58,6 +61,7 @@ | Capture.cs:229:13:229:13 | i | Capture.cs:232:9:232:13 | SSA def(i) | Capture.cs:232:9:232:13 | ... = ... | | Capture.cs:229:13:229:13 | i | Capture.cs:235:21:235:25 | SSA def(i) | Capture.cs:235:21:235:25 | ... = ... | | Capture.cs:242:13:242:13 | i | Capture.cs:242:13:242:17 | SSA def(i) | Capture.cs:242:13:242:17 | Int32 i = ... | +| Capture.cs:242:13:242:13 | i | Capture.cs:245:13:245:17 | SSA def(i) | Capture.cs:245:13:245:17 | ... = ... | | Capture.cs:242:13:242:13 | i | Capture.cs:254:27:254:27 | SSA def(i) | Capture.cs:254:27:254:27 | access to local variable i | | Capture.cs:248:36:248:36 | j | Capture.cs:251:13:251:17 | SSA def(j) | Capture.cs:251:13:251:17 | ... = ... | | Consistency.cs:7:25:7:25 | b | Consistency.cs:7:25:7:25 | SSA param(b) | Consistency.cs:7:25:7:25 | b | @@ -65,6 +69,7 @@ | Consistency.cs:15:17:15:17 | i | Consistency.cs:15:17:15:21 | [finally: exception(Exception)] SSA def(i) | Consistency.cs:15:17:15:21 | Int32 i = ... | | Consistency.cs:25:29:25:29 | c | Consistency.cs:25:29:25:29 | SSA def(c) | Consistency.cs:25:29:25:29 | Consistency c | | Consistency.cs:30:30:30:30 | c | Consistency.cs:32:9:32:29 | SSA def(c) | Consistency.cs:32:9:32:29 | ... = ... | +| Consistency.cs:38:13:38:13 | i | Consistency.cs:38:13:38:13 | SSA def(i) | Consistency.cs:38:13:38:13 | Int32 i | | Consistency.cs:38:13:38:13 | i | Consistency.cs:39:28:39:32 | SSA def(i) | Consistency.cs:39:28:39:32 | ... = ... | | Consistency.cs:44:11:44:11 | s | Consistency.cs:44:11:44:11 | SSA def(s) | Consistency.cs:44:11:44:11 | S s | | Consistency.cs:49:30:49:30 | a | Consistency.cs:49:30:49:30 | SSA param(a) | Consistency.cs:49:30:49:30 | a | @@ -88,6 +93,7 @@ | DefUse.cs:53:9:53:13 | this.Field | DefUse.cs:53:9:53:17 | SSA def(this.Field) | DefUse.cs:53:9:53:17 | ... = ... | | DefUse.cs:56:9:56:12 | this.Prop | DefUse.cs:56:9:56:16 | SSA def(this.Prop) | DefUse.cs:56:9:56:16 | ... = ... | | DefUse.cs:59:13:59:13 | i | DefUse.cs:59:13:59:17 | SSA def(i) | DefUse.cs:59:13:59:17 | Int32 i = ... | +| DefUse.cs:59:13:59:13 | i | DefUse.cs:60:37:60:41 | SSA def(i) | DefUse.cs:60:37:60:41 | ... = ... | | DefUse.cs:59:13:59:13 | i | DefUse.cs:71:9:71:13 | SSA def(i) | DefUse.cs:71:9:71:13 | ... = ... | | DefUse.cs:59:13:59:13 | i | DefUse.cs:72:9:72:11 | SSA def(i) | DefUse.cs:72:9:72:11 | ...++ | | DefUse.cs:59:13:59:13 | i | DefUse.cs:75:9:75:13 | SSA def(i) | DefUse.cs:75:9:75:13 | ... = ... | diff --git a/csharp/ql/test/library-tests/dataflow/ssa/SsaImplicitCall.expected b/csharp/ql/test/library-tests/dataflow/ssa/SsaImplicitCall.expected index d6bf7341101..22a56a7da24 100644 --- a/csharp/ql/test/library-tests/dataflow/ssa/SsaImplicitCall.expected +++ b/csharp/ql/test/library-tests/dataflow/ssa/SsaImplicitCall.expected @@ -1,12 +1,17 @@ | Capture.cs:6:16:6:16 | i | Capture.cs:38:9:38:11 | SSA call def(i) | Capture.cs:13:13:13:17 | ... = ... | +| Capture.cs:6:16:6:16 | i | Capture.cs:44:9:44:12 | SSA call def(i) | Capture.cs:13:13:13:17 | ... = ... | | Capture.cs:8:13:8:13 | x | Capture.cs:38:9:38:11 | SSA call def(x) | Capture.cs:15:13:15:17 | ... = ... | | Capture.cs:8:13:8:13 | x | Capture.cs:44:9:44:12 | SSA call def(x) | Capture.cs:15:13:15:17 | ... = ... | | Capture.cs:29:13:29:13 | z | Capture.cs:32:9:32:11 | SSA call def(z) | Capture.cs:30:28:30:32 | ... = ... | +| Capture.cs:29:13:29:13 | z | Capture.cs:44:9:44:12 | SSA call def(z) | Capture.cs:30:28:30:32 | ... = ... | | Capture.cs:50:20:50:20 | a | Capture.cs:53:9:53:11 | SSA call def(a) | Capture.cs:52:28:52:40 | ... = ... | | Capture.cs:59:13:59:13 | i | Capture.cs:61:9:61:25 | SSA call def(i) | Capture.cs:60:36:60:38 | ...++ | | Capture.cs:75:13:75:13 | i | Capture.cs:77:9:77:25 | SSA call def(i) | Capture.cs:76:80:76:80 | access to local variable i | +| Capture.cs:102:13:102:13 | z | Capture.cs:103:9:107:10 | SSA call def(z) | Capture.cs:105:13:105:17 | ... = ... | +| Capture.cs:122:13:122:13 | b | Capture.cs:128:9:128:12 | SSA call def(b) | Capture.cs:125:13:125:17 | ... = ... | | Capture.cs:130:13:130:13 | c | Capture.cs:136:9:136:12 | SSA call def(c) | Capture.cs:133:13:133:17 | ... = ... | | Capture.cs:139:13:139:13 | d | Capture.cs:144:9:144:12 | SSA call def(d) | Capture.cs:142:13:142:17 | ... = ... | +| Capture.cs:154:13:154:13 | f | Capture.cs:160:9:160:12 | SSA call def(f) | Capture.cs:158:13:158:17 | ... = ... | | Capture.cs:168:13:168:13 | h | Capture.cs:176:13:176:16 | SSA call def(h) | Capture.cs:174:17:174:21 | ... = ... | | Capture.cs:229:13:229:13 | i | Capture.cs:236:9:236:12 | SSA call def(i) | Capture.cs:235:21:235:25 | ... = ... | | DefUse.cs:167:23:167:23 | i | DefUse.cs:181:9:181:11 | SSA call def(i) | DefUse.cs:173:13:173:17 | ... = ... | diff --git a/csharp/ql/test/library-tests/dataflow/ssa/SsaUltimateDef.expected b/csharp/ql/test/library-tests/dataflow/ssa/SsaUltimateDef.expected index 78e35e1c381..bf7db292429 100644 --- a/csharp/ql/test/library-tests/dataflow/ssa/SsaUltimateDef.expected +++ b/csharp/ql/test/library-tests/dataflow/ssa/SsaUltimateDef.expected @@ -3,6 +3,9 @@ | Capture.cs:6:16:6:16 | i | Capture.cs:13:13:13:17 | SSA def(i) | Capture.cs:13:13:13:17 | SSA def(i) | | Capture.cs:6:16:6:16 | i | Capture.cs:38:9:38:11 | SSA call def(i) | Capture.cs:6:16:6:16 | SSA param(i) | | Capture.cs:6:16:6:16 | i | Capture.cs:38:9:38:11 | SSA call def(i) | Capture.cs:38:9:38:11 | SSA call def(i) | +| Capture.cs:6:16:6:16 | i | Capture.cs:44:9:44:12 | SSA call def(i) | Capture.cs:6:16:6:16 | SSA param(i) | +| Capture.cs:6:16:6:16 | i | Capture.cs:44:9:44:12 | SSA call def(i) | Capture.cs:38:9:38:11 | SSA call def(i) | +| Capture.cs:6:16:6:16 | i | Capture.cs:44:9:44:12 | SSA call def(i) | Capture.cs:44:9:44:12 | SSA call def(i) | | Capture.cs:8:13:8:13 | x | Capture.cs:8:13:8:17 | SSA def(x) | Capture.cs:8:13:8:17 | SSA def(x) | | Capture.cs:8:13:8:13 | x | Capture.cs:15:13:15:17 | SSA def(x) | Capture.cs:15:13:15:17 | SSA def(x) | | Capture.cs:8:13:8:13 | x | Capture.cs:19:24:23:13 | SSA capture def(x) | Capture.cs:19:24:23:13 | SSA capture def(x) | @@ -20,6 +23,8 @@ | Capture.cs:29:13:29:13 | z | Capture.cs:32:9:32:11 | SSA call def(z) | Capture.cs:29:13:29:17 | SSA def(z) | | Capture.cs:29:13:29:13 | z | Capture.cs:32:9:32:11 | SSA call def(z) | Capture.cs:32:9:32:11 | SSA call def(z) | | Capture.cs:29:13:29:13 | z | Capture.cs:37:9:37:13 | SSA def(z) | Capture.cs:37:9:37:13 | SSA def(z) | +| Capture.cs:29:13:29:13 | z | Capture.cs:44:9:44:12 | SSA call def(z) | Capture.cs:37:9:37:13 | SSA def(z) | +| Capture.cs:29:13:29:13 | z | Capture.cs:44:9:44:12 | SSA call def(z) | Capture.cs:44:9:44:12 | SSA call def(z) | | Capture.cs:30:16:30:16 | c | Capture.cs:30:16:30:35 | SSA def(c) | Capture.cs:30:16:30:35 | SSA def(c) | | Capture.cs:50:20:50:20 | a | Capture.cs:50:20:50:20 | SSA param(a) | Capture.cs:50:20:50:20 | SSA param(a) | | Capture.cs:50:20:50:20 | a | Capture.cs:52:28:52:40 | SSA def(a) | Capture.cs:52:28:52:40 | SSA def(a) | @@ -57,12 +62,16 @@ | Capture.cs:94:13:94:13 | y | Capture.cs:96:12:100:9 | SSA capture def(y) | Capture.cs:96:12:100:9 | SSA capture def(y) | | Capture.cs:98:17:98:17 | x | Capture.cs:98:17:98:21 | SSA def(x) | Capture.cs:98:17:98:21 | SSA def(x) | | Capture.cs:102:13:102:13 | z | Capture.cs:102:13:102:18 | SSA def(z) | Capture.cs:102:13:102:18 | SSA def(z) | +| Capture.cs:102:13:102:13 | z | Capture.cs:103:9:107:10 | SSA call def(z) | Capture.cs:102:13:102:18 | SSA def(z) | +| Capture.cs:102:13:102:13 | z | Capture.cs:103:9:107:10 | SSA call def(z) | Capture.cs:103:9:107:10 | SSA call def(z) | | Capture.cs:102:13:102:13 | z | Capture.cs:105:13:105:17 | SSA def(z) | Capture.cs:105:13:105:17 | SSA def(z) | | Capture.cs:114:13:114:13 | a | Capture.cs:114:13:114:18 | SSA def(a) | Capture.cs:114:13:114:18 | SSA def(a) | | Capture.cs:114:13:114:13 | a | Capture.cs:115:9:119:9 | SSA capture def(a) | Capture.cs:115:9:119:9 | SSA capture def(a) | | Capture.cs:117:17:117:17 | x | Capture.cs:117:17:117:21 | SSA def(x) | Capture.cs:117:17:117:21 | SSA def(x) | | Capture.cs:122:13:122:13 | b | Capture.cs:122:13:122:18 | SSA def(b) | Capture.cs:122:13:122:18 | SSA def(b) | | Capture.cs:122:13:122:13 | b | Capture.cs:125:13:125:17 | SSA def(b) | Capture.cs:125:13:125:17 | SSA def(b) | +| Capture.cs:122:13:122:13 | b | Capture.cs:128:9:128:12 | SSA call def(b) | Capture.cs:122:13:122:18 | SSA def(b) | +| Capture.cs:122:13:122:13 | b | Capture.cs:128:9:128:12 | SSA call def(b) | Capture.cs:128:9:128:12 | SSA call def(b) | | Capture.cs:130:13:130:13 | c | Capture.cs:130:13:130:18 | SSA def(c) | Capture.cs:130:13:130:18 | SSA def(c) | | Capture.cs:130:13:130:13 | c | Capture.cs:133:13:133:17 | SSA def(c) | Capture.cs:133:13:133:17 | SSA def(c) | | Capture.cs:130:13:130:13 | c | Capture.cs:136:9:136:12 | SSA call def(c) | Capture.cs:130:13:130:18 | SSA def(c) | @@ -71,10 +80,15 @@ | Capture.cs:139:13:139:13 | d | Capture.cs:142:13:142:17 | SSA def(d) | Capture.cs:142:13:142:17 | SSA def(d) | | Capture.cs:139:13:139:13 | d | Capture.cs:144:9:144:12 | SSA call def(d) | Capture.cs:139:13:139:18 | SSA def(d) | | Capture.cs:139:13:139:13 | d | Capture.cs:144:9:144:12 | SSA call def(d) | Capture.cs:144:9:144:12 | SSA call def(d) | +| Capture.cs:147:13:147:13 | e | Capture.cs:147:13:147:18 | SSA def(e) | Capture.cs:147:13:147:18 | SSA def(e) | | Capture.cs:147:13:147:13 | e | Capture.cs:148:9:152:9 | SSA capture def(e) | Capture.cs:148:9:152:9 | SSA capture def(e) | +| Capture.cs:147:13:147:13 | e | Capture.cs:151:13:151:17 | SSA def(e) | Capture.cs:151:13:151:17 | SSA def(e) | | Capture.cs:154:13:154:13 | f | Capture.cs:154:13:154:18 | SSA def(f) | Capture.cs:154:13:154:18 | SSA def(f) | | Capture.cs:154:13:154:13 | f | Capture.cs:158:13:158:17 | SSA def(f) | Capture.cs:158:13:158:17 | SSA def(f) | +| Capture.cs:154:13:154:13 | f | Capture.cs:160:9:160:12 | SSA call def(f) | Capture.cs:154:13:154:18 | SSA def(f) | +| Capture.cs:154:13:154:13 | f | Capture.cs:160:9:160:12 | SSA call def(f) | Capture.cs:160:9:160:12 | SSA call def(f) | | Capture.cs:162:13:162:13 | g | Capture.cs:163:9:166:9 | SSA capture def(g) | Capture.cs:163:9:166:9 | SSA capture def(g) | +| Capture.cs:168:13:168:13 | h | Capture.cs:168:13:168:18 | SSA def(h) | Capture.cs:168:13:168:18 | SSA def(h) | | Capture.cs:168:13:168:13 | h | Capture.cs:171:13:171:17 | SSA def(h) | Capture.cs:171:13:171:17 | SSA def(h) | | Capture.cs:168:13:168:13 | h | Capture.cs:174:17:174:21 | SSA def(h) | Capture.cs:174:17:174:21 | SSA def(h) | | Capture.cs:168:13:168:13 | h | Capture.cs:176:13:176:16 | SSA call def(h) | Capture.cs:171:13:171:17 | SSA def(h) | @@ -97,6 +111,7 @@ | Capture.cs:229:13:229:13 | i | Capture.cs:236:9:236:12 | SSA call def(i) | Capture.cs:232:9:232:13 | SSA def(i) | | Capture.cs:229:13:229:13 | i | Capture.cs:236:9:236:12 | SSA call def(i) | Capture.cs:236:9:236:12 | SSA call def(i) | | Capture.cs:242:13:242:13 | i | Capture.cs:242:13:242:17 | SSA def(i) | Capture.cs:242:13:242:17 | SSA def(i) | +| Capture.cs:242:13:242:13 | i | Capture.cs:245:13:245:17 | SSA def(i) | Capture.cs:245:13:245:17 | SSA def(i) | | Capture.cs:242:13:242:13 | i | Capture.cs:254:27:254:27 | SSA def(i) | Capture.cs:254:27:254:27 | SSA def(i) | | Capture.cs:248:36:248:36 | j | Capture.cs:251:13:251:17 | SSA def(j) | Capture.cs:251:13:251:17 | SSA def(j) | | Consistency.cs:7:25:7:25 | b | Consistency.cs:7:25:7:25 | SSA param(b) | Consistency.cs:7:25:7:25 | SSA param(b) | @@ -105,6 +120,7 @@ | Consistency.cs:25:29:25:29 | c | Consistency.cs:25:29:25:29 | SSA def(c) | Consistency.cs:25:29:25:29 | SSA def(c) | | Consistency.cs:26:13:26:19 | c.Field | Consistency.cs:25:29:25:29 | SSA qualifier def(c.Field) | Consistency.cs:25:29:25:29 | SSA qualifier def(c.Field) | | Consistency.cs:30:30:30:30 | c | Consistency.cs:32:9:32:29 | SSA def(c) | Consistency.cs:32:9:32:29 | SSA def(c) | +| Consistency.cs:38:13:38:13 | i | Consistency.cs:38:13:38:13 | SSA def(i) | Consistency.cs:38:13:38:13 | SSA def(i) | | Consistency.cs:38:13:38:13 | i | Consistency.cs:39:28:39:32 | SSA def(i) | Consistency.cs:39:28:39:32 | SSA def(i) | | Consistency.cs:44:11:44:11 | s | Consistency.cs:44:11:44:11 | SSA def(s) | Consistency.cs:44:11:44:11 | SSA def(s) | | Consistency.cs:49:30:49:30 | a | Consistency.cs:49:30:49:30 | SSA param(a) | Consistency.cs:49:30:49:30 | SSA param(a) | @@ -133,7 +149,9 @@ | DefUse.cs:44:13:44:13 | z | DefUse.cs:50:23:50:23 | SSA def(z) | DefUse.cs:50:23:50:23 | SSA def(z) | | DefUse.cs:53:9:53:13 | this.Field | DefUse.cs:53:9:53:17 | SSA def(this.Field) | DefUse.cs:53:9:53:17 | SSA def(this.Field) | | DefUse.cs:56:9:56:12 | this.Prop | DefUse.cs:56:9:56:16 | SSA def(this.Prop) | DefUse.cs:56:9:56:16 | SSA def(this.Prop) | +| DefUse.cs:59:13:59:13 | i | DefUse.cs:3:17:3:19 | SSA phi(i) | DefUse.cs:76:9:76:11 | SSA def(i) | | DefUse.cs:59:13:59:13 | i | DefUse.cs:59:13:59:17 | SSA def(i) | DefUse.cs:59:13:59:17 | SSA def(i) | +| DefUse.cs:59:13:59:13 | i | DefUse.cs:60:37:60:41 | SSA def(i) | DefUse.cs:60:37:60:41 | SSA def(i) | | DefUse.cs:59:13:59:13 | i | DefUse.cs:71:9:71:13 | SSA def(i) | DefUse.cs:71:9:71:13 | SSA def(i) | | DefUse.cs:59:13:59:13 | i | DefUse.cs:72:9:72:11 | SSA def(i) | DefUse.cs:72:9:72:11 | SSA def(i) | | DefUse.cs:59:13:59:13 | i | DefUse.cs:75:9:75:13 | SSA def(i) | DefUse.cs:75:9:75:13 | SSA def(i) | From 7bdc2c57f08828b2d0ec50915fa88e0df1b0f9cd Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 13 Feb 2024 13:55:08 +0100 Subject: [PATCH 187/378] C#: Simplify `primaryConstructorParameterStore` --- .../dataflow/internal/DataFlowPrivate.qll | 20 +++++-------------- .../constructors/ConstructorFlow.expected | 3 --- 2 files changed, 5 insertions(+), 18 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll index f13c9f9540d..91591906f58 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll @@ -2023,24 +2023,14 @@ private PropertyContent getResultContent() { } private predicate primaryConstructorParameterStore( - Node node1, PrimaryConstructorParameterContent c, Node node2 + SsaDefinitionExtNode node1, PrimaryConstructorParameterContent c, Node node2 ) { - exists(ControlFlow::Node cfn, Parameter p | + exists(Ssa::ExplicitDefinition def, ControlFlow::Node cfn, Parameter p | + def = node1.getDefinitionExt() and + p = def.getSourceVariable().getAssignable() and + cfn = def.getControlFlowNode() and node2 = TInstanceParameterAccessNode(cfn, true) and c.getParameter() = p - | - // direct assignment - exists(LocalFlow::LocalExprStepConfiguration conf, AssignableDefinition def | - conf.hasDefPath(_, node1.(ExprNode).getControlFlowNode(), def, cfn) and - p = def.getTarget() - ) - or - // indirect assignment (for example as an `out` argument) - exists(Ssa::ExplicitDefinition def | - def = node1.(SsaDefinitionExtNode).getDefinitionExt() and - p = def.getSourceVariable().getAssignable() and - cfn = def.getControlFlowNode() - ) ) } diff --git a/csharp/ql/test/library-tests/dataflow/constructors/ConstructorFlow.expected b/csharp/ql/test/library-tests/dataflow/constructors/ConstructorFlow.expected index d561be22b27..a12db3ca3a9 100644 --- a/csharp/ql/test/library-tests/dataflow/constructors/ConstructorFlow.expected +++ b/csharp/ql/test/library-tests/dataflow/constructors/ConstructorFlow.expected @@ -20,7 +20,6 @@ edges | 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:24 | SSA def(o22param) : Object | provenance | | -| Constructors.cs:52:35:52:35 | o : Object | Constructors.cs:54:24:54:24 | access to parameter o : Object | provenance | | | Constructors.cs:57:54:57:55 | o2 : Object | Constructors.cs:59:13:59:19 | SSA def(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:37:64:37 | access to parameter o : Object | Constructors.cs:57:54:57:55 | o2 : Object | provenance | | @@ -85,7 +84,6 @@ nodes | Constructors.cs:50:32:50:36 | this access : C2 [field Obj21] : Object | semmle.label | this access : C2 [field Obj21] : Object | | Constructors.cs:52:35:52:35 | o : Object | semmle.label | o : Object | | Constructors.cs:54:13:54:24 | SSA def(o22param) : Object | semmle.label | SSA def(o22param) : Object | -| Constructors.cs:54:24:54:24 | access to parameter o : Object | semmle.label | access to parameter o : Object | | Constructors.cs:57:54:57:55 | o2 : Object | semmle.label | o2 : Object | | Constructors.cs:59:13:59:19 | SSA def(o1) : Object | semmle.label | SSA def(o1) : Object | | Constructors.cs:62:41:62:41 | o : Object | semmle.label | o : Object | @@ -126,7 +124,6 @@ subpaths | 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:54:13:54:24 | SSA def(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:54:24:54:24 | access to parameter o : 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:64:27:64:34 | SSA def(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 | From 7c59c7b28c0e9a80577f47812ddc8002cb153108 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 13 Feb 2024 14:00:26 +0100 Subject: [PATCH 188/378] C#: Update QLdoc --- .../semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll index 91591906f58..acdae06c8b0 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll @@ -1803,8 +1803,8 @@ class FlowSummaryNode extends NodeImpl, TFlowSummaryNode { * public void SetParam(object value) => o = value; // (2) * } * ``` - * the first access to o (1) is modeled as `this.o_backing_field` and - * the second access to o (2) is modeled as `this.o_backing_field = value`. + * the first access to `o` (1) is modeled as `this.o_backing_field` and + * the second access to `o` (2) is modeled as `this.o_backing_field = value`. * Both models need a pre-update this node, and the latter need an additional post-update this access, * all of which are represented by an `InstanceParameterAccessNode` node. */ From bc8761c51b2ca011509b8cda62189d469e527d97 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Mon, 12 Feb 2024 10:28:41 +0100 Subject: [PATCH 189/378] Data flow: Cache `viableCallableExt` --- .../dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll index e477988da93..32d14a08a59 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll @@ -386,7 +386,7 @@ module MakeImplCommon { } private DataFlowCallable viableCallableExt(DataFlowCall call) { - result = viableCallable(call) + result = viableCallableCached(call) or result = viableCallableLambda(call, _) } @@ -479,6 +479,9 @@ module MakeImplCommon { isArgumentNode(n, call, pos) } + cached + DataFlowCallable viableCallableCached(DataFlowCall call) { result = viableCallable(call) } + /** * Gets a viable target for the lambda call `call`. * From cb7fe16ced1e5f9cd849ecfc1fedffe624f641cc Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Fri, 9 Feb 2024 09:06:02 +0000 Subject: [PATCH 190/378] Revert "Merge pull request #15537 from MathiasVP/swap-also-clears-first-argument" This reverts commit 23677b23c2bd960fba29f7f8db8c31ae36c470bb, reversing changes made to c5dc88345da959875365ca24801787e589c8ee79. --- cpp/ql/lib/semmle/code/cpp/models/implementations/Swap.qll | 2 +- cpp/ql/test/library-tests/dataflow/taint-tests/taint.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/models/implementations/Swap.qll b/cpp/ql/lib/semmle/code/cpp/models/implementations/Swap.qll index cb757800d65..325fd6f58b2 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/implementations/Swap.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/implementations/Swap.qll @@ -20,7 +20,7 @@ private class Swap extends DataFlowFunction, FlowOutBarrierFunction { output.isParameterDeref(0) } - override predicate isFlowOutBarrier(FunctionInput input) { input.isParameterDeref([0, 1]) } + override predicate isFlowOutBarrier(FunctionInput input) { input.isParameterDeref(1) } } /** diff --git a/cpp/ql/test/library-tests/dataflow/taint-tests/taint.cpp b/cpp/ql/test/library-tests/dataflow/taint-tests/taint.cpp index 1ca4957b529..eeefa6dd427 100644 --- a/cpp/ql/test/library-tests/dataflow/taint-tests/taint.cpp +++ b/cpp/ql/test/library-tests/dataflow/taint-tests/taint.cpp @@ -212,7 +212,7 @@ void test_swap() { std::swap(x, y); - sink(x); // $ SPURIOUS: ast + sink(x); // $ SPURIOUS: ast,ir sink(y); // $ ast,ir } From fb4bd53ec59538c1459128833589cfc8743c7742 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Fri, 9 Feb 2024 09:06:25 +0000 Subject: [PATCH 191/378] Revert "Merge pull request #15528 from MathiasVP/flow-barrier-interface" This reverts commit c5dc88345da959875365ca24801787e589c8ee79, reversing changes made to 781486172e46e677c2f2594dbadc35e0a94a1c9c. --- .../2024-02-06-flow-out-barrier-function.md | 4 --- .../cpp/ir/dataflow/internal/SsaInternals.qll | 25 +----------------- .../code/cpp/models/implementations/Swap.qll | 13 ++-------- .../cpp/models/interfaces/FlowOutBarrier.qll | 26 ------------------- .../dataflow/taint-tests/map.cpp | 16 ++++++------ .../dataflow/taint-tests/set.cpp | 8 +++--- .../dataflow/taint-tests/string.cpp | 4 +-- .../dataflow/taint-tests/stringstream.cpp | 4 +-- .../dataflow/taint-tests/vector.cpp | 4 +-- 9 files changed, 21 insertions(+), 83 deletions(-) delete mode 100644 cpp/ql/lib/change-notes/2024-02-06-flow-out-barrier-function.md delete mode 100644 cpp/ql/lib/semmle/code/cpp/models/interfaces/FlowOutBarrier.qll diff --git a/cpp/ql/lib/change-notes/2024-02-06-flow-out-barrier-function.md b/cpp/ql/lib/change-notes/2024-02-06-flow-out-barrier-function.md deleted file mode 100644 index 70accc67d4c..00000000000 --- a/cpp/ql/lib/change-notes/2024-02-06-flow-out-barrier-function.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: feature ---- -* Added an abstract class `FlowOutBarrierFunction` that can be used to block flow out of a function. \ No newline at end of file diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternals.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternals.qll index 7c2d92fee99..bd63da2ab98 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternals.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternals.qll @@ -2,11 +2,8 @@ private import codeql.ssa.Ssa as SsaImplCommon private import semmle.code.cpp.ir.IR private import DataFlowUtil private import DataFlowImplCommon as DataFlowImplCommon -private import semmle.code.cpp.ir.dataflow.internal.ModelUtil private import semmle.code.cpp.models.interfaces.Allocation as Alloc private import semmle.code.cpp.models.interfaces.DataFlow as DataFlow -private import semmle.code.cpp.models.interfaces.FlowOutBarrier as FOB -private import semmle.code.cpp.models.interfaces.FunctionInputsAndOutputs as FIO private import semmle.code.cpp.ir.internal.IRCppLanguage private import DataFlowPrivate private import ssa0.SsaInternals as SsaInternals0 @@ -797,30 +794,10 @@ private Node getAPriorDefinition(SsaDefOrUse defOrUse) { ) } -/** - * Holds if there should not be use-use flow out of `n` (or a conversion that - * flows to `n`). - */ -private predicate modeledFlowBarrier(Node n) { - exists(FIO::FunctionInput input, CallInstruction call | - call.getStaticCallTarget().(FOB::FlowOutBarrierFunction).isFlowOutBarrier(input) and - n = callInput(call, input) - ) - or - exists(Operand operand, Instruction instr, Node n0, int indirectionIndex | - modeledFlowBarrier(n0) and - nodeHasInstruction(n0, instr, indirectionIndex) and - conversionFlow(operand, instr, false, _) and - nodeHasOperand(n, operand, indirectionIndex) - ) -} - /** Holds if there is def-use or use-use flow from `nodeFrom` to `nodeTo`. */ predicate ssaFlow(Node nodeFrom, Node nodeTo) { exists(Node nFrom, boolean uncertain, SsaDefOrUse defOrUse | - ssaFlowImpl(defOrUse, nFrom, nodeTo, uncertain) and - not modeledFlowBarrier(nFrom) and - nodeFrom != nodeTo + ssaFlowImpl(defOrUse, nFrom, nodeTo, uncertain) and nodeFrom != nodeTo | if uncertain = true then nodeFrom = [nFrom, getAPriorDefinition(defOrUse)] else nodeFrom = nFrom ) diff --git a/cpp/ql/lib/semmle/code/cpp/models/implementations/Swap.qll b/cpp/ql/lib/semmle/code/cpp/models/implementations/Swap.qll index 325fd6f58b2..446e659fac5 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/implementations/Swap.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/implementations/Swap.qll @@ -1,7 +1,6 @@ import semmle.code.cpp.models.interfaces.DataFlow import semmle.code.cpp.models.interfaces.Taint import semmle.code.cpp.models.interfaces.Alias -import semmle.code.cpp.models.interfaces.FlowOutBarrier /** * The standard function `swap`. A use of `swap` looks like this: @@ -9,7 +8,7 @@ import semmle.code.cpp.models.interfaces.FlowOutBarrier * std::swap(obj1, obj2) * ``` */ -private class Swap extends DataFlowFunction, FlowOutBarrierFunction { +private class Swap extends DataFlowFunction { Swap() { this.hasQualifiedName(["std", "bsl"], "swap") } override predicate hasDataFlow(FunctionInput input, FunctionOutput output) { @@ -19,8 +18,6 @@ private class Swap extends DataFlowFunction, FlowOutBarrierFunction { input.isParameterDeref(1) and output.isParameterDeref(0) } - - override predicate isFlowOutBarrier(FunctionInput input) { input.isParameterDeref(1) } } /** @@ -29,9 +26,7 @@ private class Swap extends DataFlowFunction, FlowOutBarrierFunction { * obj1.swap(obj2) * ``` */ -private class MemberSwap extends TaintFunction, MemberFunction, AliasFunction, - FlowOutBarrierFunction -{ +private class MemberSwap extends TaintFunction, MemberFunction, AliasFunction { MemberSwap() { this.hasName("swap") and this.getNumberOfParameters() = 1 and @@ -52,8 +47,4 @@ private class MemberSwap extends TaintFunction, MemberFunction, AliasFunction, override predicate parameterEscapesOnlyViaReturn(int index) { index = 0 } override predicate parameterIsAlwaysReturned(int index) { index = 0 } - - override predicate isFlowOutBarrier(FunctionInput input) { - input.isQualifierObject() or input.isParameterDeref(0) - } } diff --git a/cpp/ql/lib/semmle/code/cpp/models/interfaces/FlowOutBarrier.qll b/cpp/ql/lib/semmle/code/cpp/models/interfaces/FlowOutBarrier.qll deleted file mode 100644 index d25e4381dcc..00000000000 --- a/cpp/ql/lib/semmle/code/cpp/models/interfaces/FlowOutBarrier.qll +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Provides an abstract class for blocking flow out of functions. To use this - * QL library, create a QL class extending `FlowOutBarrierFunction` with a - * characteristic predicate that selects the function or set of functions you - * are modeling. Within that class, override the predicates provided by - * `FlowOutBarrierFunction` to match the flow within that function. - */ - -import semmle.code.cpp.Function -import FunctionInputsAndOutputs - -/** - * A library function for which flow should not continue after reaching one - * of its inputs. - * - * For example, since `std::swap(a, b)` swaps the values pointed to by `a` - * and `b` there should not be use-use flow out of `a` or `b`. - */ -abstract class FlowOutBarrierFunction extends Function { - /** - * Holds if use-use flow should not continue onwards after reaching - * the argument, qualifier, or buffer represented by `input`. - */ - pragma[nomagic] - abstract predicate isFlowOutBarrier(FunctionInput input); -} diff --git a/cpp/ql/test/library-tests/dataflow/taint-tests/map.cpp b/cpp/ql/test/library-tests/dataflow/taint-tests/map.cpp index 555f39779bf..8eeb80a0f83 100644 --- a/cpp/ql/test/library-tests/dataflow/taint-tests/map.cpp +++ b/cpp/ql/test/library-tests/dataflow/taint-tests/map.cpp @@ -71,11 +71,11 @@ void test_pair() sink(i.second); // $ MISSING: ast,ir sink(i); // $ ast,ir sink(j.first); - sink(j.second); // $ SPURIOUS: ast - sink(j); // $ SPURIOUS: ast + sink(j.second); // $ SPURIOUS: ast,ir + sink(j); // $ SPURIOUS: ast,ir sink(k.first); - sink(k.second); // $ SPURIOUS: ast - sink(k); // $ SPURIOUS: ast + sink(k.second); // $ SPURIOUS: ast,ir + sink(k); // $ SPURIOUS: ast,ir sink(l.first); sink(l.second); // $ MISSING: ast,ir sink(l); // $ ast,ir @@ -196,10 +196,10 @@ void test_map() sink(m18); // $ ast,ir m15.swap(m16); m17.swap(m18); - sink(m15); // $ SPURIOUS: ast + sink(m15); // $ SPURIOUS: ast,ir sink(m16); // $ ast,ir sink(m17); // $ ast,ir - sink(m18); // $ SPURIOUS: ast + sink(m18); // $ SPURIOUS: ast,ir // merge std::map m19, m20, m21, m22; @@ -345,10 +345,10 @@ void test_unordered_map() sink(m18); // $ ast,ir m15.swap(m16); m17.swap(m18); - sink(m15); // $ SPURIOUS: ast + sink(m15); // $ SPURIOUS: ast,ir sink(m16); // $ ast,ir sink(m17); // $ ast,ir - sink(m18); // $ SPURIOUS: ast + sink(m18); // $ SPURIOUS: ast,ir // merge std::unordered_map m19, m20, m21, m22; diff --git a/cpp/ql/test/library-tests/dataflow/taint-tests/set.cpp b/cpp/ql/test/library-tests/dataflow/taint-tests/set.cpp index 7c906fb72d2..c6c19d90089 100644 --- a/cpp/ql/test/library-tests/dataflow/taint-tests/set.cpp +++ b/cpp/ql/test/library-tests/dataflow/taint-tests/set.cpp @@ -81,10 +81,10 @@ void test_set() sink(s15); // $ ast,ir s12.swap(s13); s14.swap(s15); - sink(s12); // $ SPURIOUS: ast + sink(s12); // $ SPURIOUS: ast,ir sink(s13); // $ ast,ir sink(s14); // $ ast,ir - sink(s15); // $ SPURIOUS: ast + sink(s15); // $ SPURIOUS: ast,ir // merge std::set s16, s17, s18, s19; @@ -193,10 +193,10 @@ void test_unordered_set() sink(s15); // $ ast,ir s12.swap(s13); s14.swap(s15); - sink(s12); // $ SPURIOUS: ast + sink(s12); // $ SPURIOUS: ast,ir sink(s13); // $ ast,ir sink(s14); // $ ast,ir - sink(s15); // $ SPURIOUS: ast + sink(s15); // $ SPURIOUS: ast,ir // merge std::unordered_set s16, s17, s18, s19; diff --git a/cpp/ql/test/library-tests/dataflow/taint-tests/string.cpp b/cpp/ql/test/library-tests/dataflow/taint-tests/string.cpp index 4f2c4afd6b0..e2b99945724 100644 --- a/cpp/ql/test/library-tests/dataflow/taint-tests/string.cpp +++ b/cpp/ql/test/library-tests/dataflow/taint-tests/string.cpp @@ -280,9 +280,9 @@ void test_string_swap() { s4.swap(s3); sink(s1); // $ ast,ir - sink(s2); // $ SPURIOUS: ast + sink(s2); // $ SPURIOUS: ast,ir sink(s3); // $ ast,ir - sink(s4); // $ SPURIOUS: ast + sink(s4); // $ SPURIOUS: ast,ir } void test_string_clear() { diff --git a/cpp/ql/test/library-tests/dataflow/taint-tests/stringstream.cpp b/cpp/ql/test/library-tests/dataflow/taint-tests/stringstream.cpp index 57310dfef6f..a84b3606f92 100644 --- a/cpp/ql/test/library-tests/dataflow/taint-tests/stringstream.cpp +++ b/cpp/ql/test/library-tests/dataflow/taint-tests/stringstream.cpp @@ -118,9 +118,9 @@ void test_stringstream_swap() ss4.swap(ss3); sink(ss1); // $ ast,ir - sink(ss2); // $ SPURIOUS: ast + sink(ss2); // $ SPURIOUS: ast,ir sink(ss3); // $ ast,ir - sink(ss4); // $ SPURIOUS: ast + sink(ss4); // $ SPURIOUS: ast,ir } void test_stringstream_in() diff --git a/cpp/ql/test/library-tests/dataflow/taint-tests/vector.cpp b/cpp/ql/test/library-tests/dataflow/taint-tests/vector.cpp index 14834e2a5e9..a26ac8f0513 100644 --- a/cpp/ql/test/library-tests/dataflow/taint-tests/vector.cpp +++ b/cpp/ql/test/library-tests/dataflow/taint-tests/vector.cpp @@ -114,10 +114,10 @@ void test_vector_swap() { v1.swap(v2); v3.swap(v4); - sink(v1); // $ SPURIOUS: ast + sink(v1); // $ SPURIOUS: ast,ir sink(v2); // $ ast,ir sink(v3); // $ ast,ir - sink(v4); // $ SPURIOUS: ast + sink(v4); // $ SPURIOUS: ast,ir } void test_vector_clear() { From 7122a7502a3871416442de06b204eb78d1f771ef Mon Sep 17 00:00:00 2001 From: Asger F Date: Tue, 13 Feb 2024 14:34:24 +0100 Subject: [PATCH 192/378] JS: Fix flow through && This is a long-standing bug we've been unable to fix due to noise from type inference. --- .../semmle/javascript/dataflow/DataFlow.qll | 6 +++++- .../internal/BasicExprTypeInference.qll | 20 +++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/javascript/ql/lib/semmle/javascript/dataflow/DataFlow.qll b/javascript/ql/lib/semmle/javascript/dataflow/DataFlow.qll index 473e0aa92df..c098c60816e 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/DataFlow.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/DataFlow.qll @@ -1693,7 +1693,11 @@ module DataFlow { exists(Expr predExpr, Expr succExpr | pred = valueNode(predExpr) and succ = valueNode(succExpr) | - predExpr = succExpr.(LogicalBinaryExpr).getAnOperand() + predExpr = succExpr.(LogicalOrExpr).getAnOperand() + or + predExpr = succExpr.(NullishCoalescingExpr).getAnOperand() + or + predExpr = succExpr.(LogicalAndExpr).getRightOperand() or predExpr = succExpr.(ConditionalExpr).getABranch() or diff --git a/javascript/ql/lib/semmle/javascript/dataflow/internal/BasicExprTypeInference.qll b/javascript/ql/lib/semmle/javascript/dataflow/internal/BasicExprTypeInference.qll index 49dd598b0ca..f6474ff3186 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/internal/BasicExprTypeInference.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/internal/BasicExprTypeInference.qll @@ -238,6 +238,26 @@ private class AnalyzedBinaryExpr extends DataFlow::AnalyzedValueNode { } } +pragma[nomagic] +private predicate falsyValue(AbstractValue value) { value.getBooleanValue() = false } + +/** + * Flow analysis for `&&` operators. + */ +private class AnalyzedLogicalAndExpr extends DataFlow::AnalyzedValueNode { + override LogicalAndExpr astNode; + + pragma[nomagic] + private AnalyzedValueNode leftOperand() { result = astNode.getLeftOperand().analyze() } + + override AbstractValue getALocalValue() { + result = super.getALocalValue() + or + result = this.leftOperand().getALocalValue() and + falsyValue(result) + } +} + /** * Gets the `n`th operand of the given `+` or `+=` expression. */ From 5e08bf0dbf80a5ebdee1298cb6e42ae2c94e110b Mon Sep 17 00:00:00 2001 From: "Michael B. Gale" Date: Tue, 13 Feb 2024 14:20:45 +0000 Subject: [PATCH 193/378] Go: Add missing call to `extractFileInfo` --- go/extractor/extractor.go | 1 + 1 file changed, 1 insertion(+) diff --git a/go/extractor/extractor.go b/go/extractor/extractor.go index fa003b238db..64dcae5e7ae 100644 --- a/go/extractor/extractor.go +++ b/go/extractor/extractor.go @@ -551,6 +551,7 @@ func (extraction *Extraction) extractError(tw *trap.Writer, err packages.Error, log.Printf("Warning: failed to evaluate symlinks for %s", wd) } file = filepath.Join(ewd, "-") + extraction.extractFileInfo(tw, file) } else { var rawfile string if parts := threePartPos.FindStringSubmatch(pos); parts != nil { From be521508c2bb16023e42dde912e9da07fa2f366a Mon Sep 17 00:00:00 2001 From: "Michael B. Gale" Date: Tue, 13 Feb 2024 14:21:07 +0000 Subject: [PATCH 194/378] Go: Do not add dummy files to `CompilationCompilingFilesTable` --- go/extractor/extractor.go | 12 +++++++----- go/extractor/gomodextractor.go | 2 +- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/go/extractor/extractor.go b/go/extractor/extractor.go index 64dcae5e7ae..f2ba68a20f0 100644 --- a/go/extractor/extractor.go +++ b/go/extractor/extractor.go @@ -551,7 +551,7 @@ func (extraction *Extraction) extractError(tw *trap.Writer, err packages.Error, log.Printf("Warning: failed to evaluate symlinks for %s", wd) } file = filepath.Join(ewd, "-") - extraction.extractFileInfo(tw, file) + extraction.extractFileInfo(tw, file, true) } else { var rawfile string if parts := threePartPos.FindStringSubmatch(pos); parts != nil { @@ -586,7 +586,7 @@ func (extraction *Extraction) extractError(tw *trap.Writer, err packages.Error, file = afile } - extraction.extractFileInfo(tw, file) + extraction.extractFileInfo(tw, file, false) } extraction.Lock.Lock() @@ -655,7 +655,7 @@ func (extraction *Extraction) extractFile(ast *ast.File, pkg *packages.Package) return err } - extraction.extractFileInfo(tw, path) + extraction.extractFileInfo(tw, path, false) extractScopes(tw, ast, pkg) @@ -673,7 +673,7 @@ func (extraction *Extraction) extractFile(ast *ast.File, pkg *packages.Package) // extractFileInfo extracts file-system level information for the given file, populating // the `files` and `containerparent` tables -func (extraction *Extraction) extractFileInfo(tw *trap.Writer, file string) { +func (extraction *Extraction) extractFileInfo(tw *trap.Writer, file string, isDummy bool) { // We may visit the same file twice because `extractError` calls this function to describe files containing // compilation errors. It is also called for user source files being extracted. extraction.Lock.Lock() @@ -705,7 +705,9 @@ func (extraction *Extraction) extractFileInfo(tw *trap.Writer, file string) { dbscheme.HasLocationTable.Emit(tw, lbl, emitLocation(tw, lbl, 0, 0, 0, 0)) extraction.Lock.Lock() slbl := extraction.StatWriter.Labeler.FileLabelFor(file) - dbscheme.CompilationCompilingFilesTable.Emit(extraction.StatWriter, extraction.Label, extraction.GetFileIdx(file), slbl) + if !isDummy { + dbscheme.CompilationCompilingFilesTable.Emit(extraction.StatWriter, extraction.Label, extraction.GetFileIdx(file), slbl) + } extraction.Lock.Unlock() break } diff --git a/go/extractor/gomodextractor.go b/go/extractor/gomodextractor.go index 54e556b4cde..be52af59760 100644 --- a/go/extractor/gomodextractor.go +++ b/go/extractor/gomodextractor.go @@ -40,7 +40,7 @@ func (extraction *Extraction) extractGoMod(path string) error { return err } - extraction.extractFileInfo(tw, path) + extraction.extractFileInfo(tw, path, false) file, err := os.Open(path) if err != nil { From f27fda801ebb78481392befae7a8b2aacaf3a997 Mon Sep 17 00:00:00 2001 From: Asger F Date: Tue, 13 Feb 2024 18:30:23 +0100 Subject: [PATCH 195/378] Update tests.expected --- javascript/ql/test/library-tests/DataFlow/tests.expected | 1 - 1 file changed, 1 deletion(-) diff --git a/javascript/ql/test/library-tests/DataFlow/tests.expected b/javascript/ql/test/library-tests/DataFlow/tests.expected index 02bfbe09e2d..d4c55bdd8a1 100644 --- a/javascript/ql/test/library-tests/DataFlow/tests.expected +++ b/javascript/ql/test/library-tests/DataFlow/tests.expected @@ -1022,7 +1022,6 @@ flowStep | tst.js:4:9:4:12 | "hi" | tst.js:4:5:4:12 | y | | tst.js:9:2:9:2 | x | tst.js:9:1:9:3 | (x) | | tst.js:10:4:10:4 | y | tst.js:10:1:10:4 | x, y | -| tst.js:11:1:11:1 | x | tst.js:11:1:11:6 | x && y | | tst.js:11:1:11:1 | x | tst.js:12:1:12:1 | x | | tst.js:11:1:11:1 | x | tst.js:12:1:12:1 | x | | tst.js:11:6:11:6 | y | tst.js:11:1:11:6 | x && y | From f5c437694c2fd3eb7fe49b6b690dfb5b887d5458 Mon Sep 17 00:00:00 2001 From: Asger F Date: Tue, 13 Feb 2024 18:31:24 +0100 Subject: [PATCH 196/378] Update UselessConditional.expected --- .../Statements/UselessConditional/UselessConditional.expected | 1 + 1 file changed, 1 insertion(+) diff --git a/javascript/ql/test/query-tests/Statements/UselessConditional/UselessConditional.expected b/javascript/ql/test/query-tests/Statements/UselessConditional/UselessConditional.expected index cd687a49c6c..f805843b11b 100644 --- a/javascript/ql/test/query-tests/Statements/UselessConditional/UselessConditional.expected +++ b/javascript/ql/test/query-tests/Statements/UselessConditional/UselessConditional.expected @@ -18,6 +18,7 @@ | UselessConditional.js:94:16:94:16 | x | This use of variable 'x' always evaluates to false. | | UselessConditional.js:100:13:100:24 | true && true | This expression always evaluates to true. | | UselessConditional.js:101:18:101:18 | x | This use of variable 'x' always evaluates to false. | +| UselessConditional.js:102:13:102:20 | y && (x) | This expression always evaluates to false. | | UselessConditional.js:102:19:102:19 | x | This use of variable 'x' always evaluates to false. | | UselessConditional.js:103:23:103:23 | x | This use of variable 'x' always evaluates to false. | | UselessConditional.js:109:15:109:16 | {} | This expression always evaluates to true. | From 42e708b387840e90d6ad6db7cb1d275b286abae9 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Tue, 13 Feb 2024 17:43:43 +0000 Subject: [PATCH 197/378] Swift: Tweak the change note. --- swift/ql/src/change-notes/2024-02-07-unsafe-unpacking.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/swift/ql/src/change-notes/2024-02-07-unsafe-unpacking.md b/swift/ql/src/change-notes/2024-02-07-unsafe-unpacking.md index e3c6f79bc48..1f8fc022ac5 100644 --- a/swift/ql/src/change-notes/2024-02-07-unsafe-unpacking.md +++ b/swift/ql/src/change-notes/2024-02-07-unsafe-unpacking.md @@ -1,4 +1,4 @@ --- category: newQuery --- -* Added a new query, `swift/unsafe-unpacking`, that detects unpacking user controlled zips without validating the destination file path is within the destination directory. \ No newline at end of file +* Added a new experimental query, `swift/unsafe-unpacking`, that detects unpacking user controlled zips without validating the destination file path is within the destination directory. From dfba6b97ac16f37a88cc39b76dba2aa96758002f Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Tue, 13 Feb 2024 17:45:55 +0000 Subject: [PATCH 198/378] Swift: Case consistency. --- swift/ql/src/experimental/Security/CWE-022/UnsafeUnpack.qhelp | 2 +- .../CWE-022/{ZIPFoundationBad.swift => ZipFoundationBad.swift} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename swift/ql/src/experimental/Security/CWE-022/{ZIPFoundationBad.swift => ZipFoundationBad.swift} (100%) diff --git a/swift/ql/src/experimental/Security/CWE-022/UnsafeUnpack.qhelp b/swift/ql/src/experimental/Security/CWE-022/UnsafeUnpack.qhelp index 2f65296b9a8..6c53b3a789a 100644 --- a/swift/ql/src/experimental/Security/CWE-022/UnsafeUnpack.qhelp +++ b/swift/ql/src/experimental/Security/CWE-022/UnsafeUnpack.qhelp @@ -27,7 +27,7 @@ The following examples unpacks a remote zip using `Zip.unzipFile()` which is vul

    The following examples unpacks a remote zip using `fileManager.unzipItem()` which is vulnerable to symlink path traversal.

    - +

    Consider using a safer module, such as: ZIPArchive

    diff --git a/swift/ql/src/experimental/Security/CWE-022/ZIPFoundationBad.swift b/swift/ql/src/experimental/Security/CWE-022/ZipFoundationBad.swift similarity index 100% rename from swift/ql/src/experimental/Security/CWE-022/ZIPFoundationBad.swift rename to swift/ql/src/experimental/Security/CWE-022/ZipFoundationBad.swift From c6f4495ada313f6c69de541a107193a8761b64fd Mon Sep 17 00:00:00 2001 From: "Michael B. Gale" Date: Tue, 13 Feb 2024 17:46:41 +0000 Subject: [PATCH 199/378] Go: Exclude dummy files from `File` --- go/ql/lib/semmle/go/Files.qll | 1 + 1 file changed, 1 insertion(+) diff --git a/go/ql/lib/semmle/go/Files.qll b/go/ql/lib/semmle/go/Files.qll index 64b5caf7f46..6ddff564f7a 100644 --- a/go/ql/lib/semmle/go/Files.qll +++ b/go/ql/lib/semmle/go/Files.qll @@ -124,6 +124,7 @@ class ExtractedOrExternalFile extends Container, Impl::File, Documentable, ExprP /** A file that has been extracted. */ class File extends ExtractedOrExternalFile { File() { + not this.getBaseName() = "-" and // getAChild is specifically for the Go AST and so does not apply to non-go files // we care about all non-go extracted files, as only go files can have `@file` entries due to requiring a file entry for diagnostic errors not this.getExtension() = "go" From 205847df64bb91d9fa78faf2c10d8bdf2e608df3 Mon Sep 17 00:00:00 2001 From: "Michael B. Gale" Date: Tue, 13 Feb 2024 17:49:31 +0000 Subject: [PATCH 200/378] Go: Add `DummyFile` class --- go/ql/lib/semmle/go/Files.qll | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/go/ql/lib/semmle/go/Files.qll b/go/ql/lib/semmle/go/Files.qll index 6ddff564f7a..87e3fd3169d 100644 --- a/go/ql/lib/semmle/go/Files.qll +++ b/go/ql/lib/semmle/go/Files.qll @@ -142,6 +142,13 @@ class GoFile extends File { override string getAPrimaryQlClass() { result = "GoFile" } } +/** A dummy file. */ +class DummyFile extends ExtractedOrExternalFile { + DummyFile() { this.getBaseName() = "-" } + + override string getAPrimaryQlClass() { result = "DummyFile" } +} + /** An HTML file. */ class HtmlFile extends File { HtmlFile() { this.getExtension().regexpMatch("x?html?") } From 65e3ae0c4587fe2c7527862dbc69bf2fa72f0dbd Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Tue, 13 Feb 2024 17:49:00 +0000 Subject: [PATCH 201/378] Swift: Move the two CWE-022 tests into a common directory. --- .../CWE-022/{ => PathInjection}/PathInjectionTest.expected | 0 .../Security/CWE-022/{ => PathInjection}/PathInjectionTest.ql | 0 .../Security/CWE-022/{ => PathInjection}/testPathInjection.swift | 0 .../UnsafeUnpack}/UnsafeUnpack.expected | 0 .../UnsafeUnpack}/UnsafeUnpack.qlref | 0 .../UnsafeUnpack}/UnsafeUnpack.swift | 0 6 files changed, 0 insertions(+), 0 deletions(-) rename swift/ql/test/query-tests/Security/CWE-022/{ => PathInjection}/PathInjectionTest.expected (100%) rename swift/ql/test/query-tests/Security/CWE-022/{ => PathInjection}/PathInjectionTest.ql (100%) rename swift/ql/test/query-tests/Security/CWE-022/{ => PathInjection}/testPathInjection.swift (100%) rename swift/ql/test/query-tests/Security/{CWE-022-Unsafe-Unpack => CWE-022/UnsafeUnpack}/UnsafeUnpack.expected (100%) rename swift/ql/test/query-tests/Security/{CWE-022-Unsafe-Unpack => CWE-022/UnsafeUnpack}/UnsafeUnpack.qlref (100%) rename swift/ql/test/query-tests/Security/{CWE-022-Unsafe-Unpack => CWE-022/UnsafeUnpack}/UnsafeUnpack.swift (100%) diff --git a/swift/ql/test/query-tests/Security/CWE-022/PathInjectionTest.expected b/swift/ql/test/query-tests/Security/CWE-022/PathInjection/PathInjectionTest.expected similarity index 100% rename from swift/ql/test/query-tests/Security/CWE-022/PathInjectionTest.expected rename to swift/ql/test/query-tests/Security/CWE-022/PathInjection/PathInjectionTest.expected diff --git a/swift/ql/test/query-tests/Security/CWE-022/PathInjectionTest.ql b/swift/ql/test/query-tests/Security/CWE-022/PathInjection/PathInjectionTest.ql similarity index 100% rename from swift/ql/test/query-tests/Security/CWE-022/PathInjectionTest.ql rename to swift/ql/test/query-tests/Security/CWE-022/PathInjection/PathInjectionTest.ql diff --git a/swift/ql/test/query-tests/Security/CWE-022/testPathInjection.swift b/swift/ql/test/query-tests/Security/CWE-022/PathInjection/testPathInjection.swift similarity index 100% rename from swift/ql/test/query-tests/Security/CWE-022/testPathInjection.swift rename to swift/ql/test/query-tests/Security/CWE-022/PathInjection/testPathInjection.swift diff --git a/swift/ql/test/query-tests/Security/CWE-022-Unsafe-Unpack/UnsafeUnpack.expected b/swift/ql/test/query-tests/Security/CWE-022/UnsafeUnpack/UnsafeUnpack.expected similarity index 100% rename from swift/ql/test/query-tests/Security/CWE-022-Unsafe-Unpack/UnsafeUnpack.expected rename to swift/ql/test/query-tests/Security/CWE-022/UnsafeUnpack/UnsafeUnpack.expected diff --git a/swift/ql/test/query-tests/Security/CWE-022-Unsafe-Unpack/UnsafeUnpack.qlref b/swift/ql/test/query-tests/Security/CWE-022/UnsafeUnpack/UnsafeUnpack.qlref similarity index 100% rename from swift/ql/test/query-tests/Security/CWE-022-Unsafe-Unpack/UnsafeUnpack.qlref rename to swift/ql/test/query-tests/Security/CWE-022/UnsafeUnpack/UnsafeUnpack.qlref diff --git a/swift/ql/test/query-tests/Security/CWE-022-Unsafe-Unpack/UnsafeUnpack.swift b/swift/ql/test/query-tests/Security/CWE-022/UnsafeUnpack/UnsafeUnpack.swift similarity index 100% rename from swift/ql/test/query-tests/Security/CWE-022-Unsafe-Unpack/UnsafeUnpack.swift rename to swift/ql/test/query-tests/Security/CWE-022/UnsafeUnpack/UnsafeUnpack.swift From 159080f1336eb840ade4a7edd780592abaf833d4 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Tue, 13 Feb 2024 18:06:17 +0000 Subject: [PATCH 202/378] Swift: Accept test changes. --- .../Security/CWE-022/UnsafeUnpack/UnsafeUnpack.expected | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/swift/ql/test/query-tests/Security/CWE-022/UnsafeUnpack/UnsafeUnpack.expected b/swift/ql/test/query-tests/Security/CWE-022/UnsafeUnpack/UnsafeUnpack.expected index 09fc20545b0..24a612d7788 100644 --- a/swift/ql/test/query-tests/Security/CWE-022/UnsafeUnpack/UnsafeUnpack.expected +++ b/swift/ql/test/query-tests/Security/CWE-022/UnsafeUnpack/UnsafeUnpack.expected @@ -1,7 +1,7 @@ edges -| UnsafeUnpack.swift:62:9:62:48 | call to Data.init(contentsOf:options:) | UnsafeUnpack.swift:62:60:62:60 | source | -| UnsafeUnpack.swift:62:60:62:60 | source | UnsafeUnpack.swift:64:27:64:27 | source | -| UnsafeUnpack.swift:62:60:62:60 | source | UnsafeUnpack.swift:67:39:67:39 | source | +| UnsafeUnpack.swift:62:9:62:48 | call to Data.init(contentsOf:options:) | UnsafeUnpack.swift:62:60:62:60 | source | provenance | | +| UnsafeUnpack.swift:62:60:62:60 | source | UnsafeUnpack.swift:64:27:64:27 | source | provenance | | +| UnsafeUnpack.swift:62:60:62:60 | source | UnsafeUnpack.swift:67:39:67:39 | source | provenance | | nodes | UnsafeUnpack.swift:62:9:62:48 | call to Data.init(contentsOf:options:) | semmle.label | call to Data.init(contentsOf:options:) | | UnsafeUnpack.swift:62:60:62:60 | source | semmle.label | source | From b3aea0f893e300e928dd8e6d1f72e759a0acee96 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Tue, 13 Feb 2024 21:29:21 +0100 Subject: [PATCH 203/378] C++: Do not print the qualifier of `OverloadedPointerDereferenceExpr` twice in PrintAST --- cpp/ql/lib/semmle/code/cpp/PrintAST.qll | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/cpp/ql/lib/semmle/code/cpp/PrintAST.qll b/cpp/ql/lib/semmle/code/cpp/PrintAST.qll index 737ad223ac5..68023574c3a 100644 --- a/cpp/ql/lib/semmle/code/cpp/PrintAST.qll +++ b/cpp/ql/lib/semmle/code/cpp/PrintAST.qll @@ -835,7 +835,11 @@ private predicate namedExprChildPredicates(Expr expr, Element ele, string pred) or expr.(OverloadedArrayExpr).getArrayOffset() = ele and pred = "getArrayOffset()" or - expr.(OverloadedPointerDereferenceExpr).getExpr() = ele and pred = "getExpr()" + // OverloadedPointerDereferenceExpr::getExpr/0 also considers qualifiers, which are already handled above for all Call classes. + not expr.(OverloadedPointerDereferenceExpr).getQualifier() = + expr.(OverloadedPointerDereferenceExpr).getExpr() and + expr.(OverloadedPointerDereferenceExpr).getExpr() = ele and + pred = "getExpr()" or expr.(CommaExpr).getLeftOperand() = ele and pred = "getLeftOperand()" or From caf09e07359296063467edf3d16589e3ad3e9d36 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Tue, 13 Feb 2024 21:30:58 +0100 Subject: [PATCH 204/378] C++: Update IR comment that no longer applies --- .../cpp/ir/implementation/raw/internal/TranslatedElement.qll | 1 - 1 file changed, 1 deletion(-) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll index c3c4bf897cc..08908c29bca 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll @@ -474,7 +474,6 @@ private module IRDeclarationEntries { * This class exists to work around the fact that `DeclStmt`s in some cases * do not have `DeclarationEntry`s. Currently, this is the case for: * - `DeclStmt`s in template instantiations. - * - `DeclStmt`s that are generated by the desugaring of range-based for-loops. * * So instead, the IR works with `IRDeclarationEntry`s that synthesize missing * `DeclarationEntry`s when there is no result for `DeclStmt::getDeclarationEntry`. From a3b3aa4f250117b25de1334927a7d1400629ec46 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Tue, 13 Feb 2024 21:31:21 +0100 Subject: [PATCH 205/378] C++: Update tests after extractor changes --- .../library-tests/ir/ir/PrintAST.expected | 168 ++++++++++++++++++ .../ir/ir/operand_locations.expected | 16 +- 2 files changed, 176 insertions(+), 8 deletions(-) diff --git a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected index e99e0d54f2d..79eb2dc70f2 100644 --- a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected +++ b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected @@ -9479,7 +9479,43 @@ ir.cpp: # 1079| getEntryPoint(): [BlockStmt] { ... } # 1080| getStmt(0): [RangeBasedForStmt] for(...:...) ... # 1080| getChild(0): [DeclStmt] declaration +# 1080| getDeclarationEntry(0): (no string representation) +# 1080| Type = [LValueReferenceType] const vector & +#-----| getVariable().getInitializer(): [Initializer] initializer for (__range) +# 1080| getExpr(): [VariableAccess] v +# 1080| Type = [LValueReferenceType] const vector & +# 1080| ValueCategory = prvalue(load) +# 1080| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1080| Type = [LValueReferenceType] const vector & +# 1080| ValueCategory = prvalue +# 1080| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1080| Type = [SpecifiedType] const vector +# 1080| ValueCategory = lvalue # 1080| getBeginEndDeclaration(): [DeclStmt] declaration +# 1080| getDeclarationEntry(0): (no string representation) +# 1080| Type = [NestedStruct] iterator +#-----| getVariable().getInitializer(): [Initializer] initializer for (__begin) +# 1080| getExpr(): [FunctionCall] call to begin +# 1080| Type = [NestedStruct] iterator +# 1080| ValueCategory = prvalue +# 1080| getQualifier(): [VariableAccess] (__range) +# 1080| Type = [LValueReferenceType] const vector & +# 1080| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [SpecifiedType] const vector +#-----| ValueCategory = lvalue +# 1080| getDeclarationEntry(1): (no string representation) +# 1080| Type = [NestedStruct] iterator +#-----| getVariable().getInitializer(): [Initializer] initializer for (__end) +# 1080| getExpr(): [FunctionCall] call to end +# 1080| Type = [NestedStruct] iterator +# 1080| ValueCategory = prvalue +# 1080| getQualifier(): [VariableAccess] (__range) +# 1080| Type = [LValueReferenceType] const vector & +# 1080| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [SpecifiedType] const vector +#-----| ValueCategory = lvalue # 1080| getCondition(): [FunctionCall] call to operator!= # 1080| Type = [BoolType] bool # 1080| ValueCategory = prvalue @@ -9500,6 +9536,22 @@ ir.cpp: # 1080| Type = [NestedStruct] iterator # 1080| ValueCategory = lvalue # 1080| getChild(4): [DeclStmt] declaration +# 1080| getDeclarationEntry(0): [VariableDeclarationEntry] definition of e +# 1080| Type = [IntType] int +# 1080| getVariable().getInitializer(): [Initializer] initializer for e +# 1080| getExpr(): [OverloadedPointerDereferenceExpr] call to operator* +# 1080| Type = [LValueReferenceType] int & +# 1080| ValueCategory = prvalue +# 1080| getQualifier(): [VariableAccess] (__begin) +# 1080| Type = [NestedStruct] iterator +# 1080| ValueCategory = lvalue +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +# 1080| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1080| Type = [IntType] int +# 1080| ValueCategory = prvalue(load) # 1080| getStmt(): [BlockStmt] { ... } # 1081| getStmt(0): [IfStmt] if (...) ... # 1081| getCondition(): [GTExpr] ... > ... @@ -9520,7 +9572,43 @@ ir.cpp: # 1080| ValueCategory = lvalue # 1086| getStmt(1): [RangeBasedForStmt] for(...:...) ... # 1086| getChild(0): [DeclStmt] declaration +# 1086| getDeclarationEntry(0): (no string representation) +# 1086| Type = [LValueReferenceType] const vector & +#-----| getVariable().getInitializer(): [Initializer] initializer for (__range) +# 1086| getExpr(): [VariableAccess] v +# 1086| Type = [LValueReferenceType] const vector & +# 1086| ValueCategory = prvalue(load) +# 1086| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1086| Type = [LValueReferenceType] const vector & +# 1086| ValueCategory = prvalue +# 1086| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1086| Type = [SpecifiedType] const vector +# 1086| ValueCategory = lvalue # 1086| getBeginEndDeclaration(): [DeclStmt] declaration +# 1086| getDeclarationEntry(0): (no string representation) +# 1086| Type = [NestedStruct] iterator +#-----| getVariable().getInitializer(): [Initializer] initializer for (__begin) +# 1086| getExpr(): [FunctionCall] call to begin +# 1086| Type = [NestedStruct] iterator +# 1086| ValueCategory = prvalue +# 1086| getQualifier(): [VariableAccess] (__range) +# 1086| Type = [LValueReferenceType] const vector & +# 1086| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [SpecifiedType] const vector +#-----| ValueCategory = lvalue +# 1086| getDeclarationEntry(1): (no string representation) +# 1086| Type = [NestedStruct] iterator +#-----| getVariable().getInitializer(): [Initializer] initializer for (__end) +# 1086| getExpr(): [FunctionCall] call to end +# 1086| Type = [NestedStruct] iterator +# 1086| ValueCategory = prvalue +# 1086| getQualifier(): [VariableAccess] (__range) +# 1086| Type = [LValueReferenceType] const vector & +# 1086| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [SpecifiedType] const vector +#-----| ValueCategory = lvalue # 1086| getCondition(): [FunctionCall] call to operator!= # 1086| Type = [BoolType] bool # 1086| ValueCategory = prvalue @@ -9541,6 +9629,29 @@ ir.cpp: # 1086| Type = [NestedStruct] iterator # 1086| ValueCategory = lvalue # 1086| getChild(4): [DeclStmt] declaration +# 1086| getDeclarationEntry(0): [VariableDeclarationEntry] definition of e +# 1086| Type = [LValueReferenceType] const int & +# 1086| getVariable().getInitializer(): [Initializer] initializer for e +# 1086| getExpr(): [OverloadedPointerDereferenceExpr] call to operator* +# 1086| Type = [LValueReferenceType] int & +# 1086| ValueCategory = prvalue +# 1086| getQualifier(): [VariableAccess] (__begin) +# 1086| Type = [NestedStruct] iterator +# 1086| ValueCategory = lvalue +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +# 1086| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1086| Type = [LValueReferenceType] const int & +# 1086| ValueCategory = prvalue +# 1086| getExpr(): [CStyleCast] (const int)... +# 1086| Conversion = [GlvalueConversion] glvalue conversion +# 1086| Type = [SpecifiedType] const int +# 1086| ValueCategory = lvalue +# 1086| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1086| Type = [IntType] int +# 1086| ValueCategory = lvalue # 1086| getStmt(): [BlockStmt] { ... } # 1087| getStmt(0): [IfStmt] if (...) ... # 1087| getCondition(): [LTExpr] ... < ... @@ -16410,7 +16521,48 @@ ir.cpp: # 2152| ValueCategory = prvalue # 2153| getStmt(5): [RangeBasedForStmt] for(...:...) ... # 2153| getChild(0): [DeclStmt] declaration +# 2153| getDeclarationEntry(0): (no string representation) +# 2153| Type = [LValueReferenceType] vector & +#-----| getVariable().getInitializer(): [Initializer] initializer for (__range) +# 2153| getExpr(): [VariableAccess] ys +# 2153| Type = [ClassTemplateInstantiation,Struct] vector +# 2153| ValueCategory = lvalue +# 2153| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 2153| Type = [LValueReferenceType] vector & +# 2153| ValueCategory = prvalue # 2153| getBeginEndDeclaration(): [DeclStmt] declaration +# 2153| getDeclarationEntry(0): (no string representation) +# 2153| Type = [NestedStruct] iterator +#-----| getVariable().getInitializer(): [Initializer] initializer for (__begin) +# 2153| getExpr(): [FunctionCall] call to begin +# 2153| Type = [NestedStruct] iterator +# 2153| ValueCategory = prvalue +# 2153| getQualifier(): [VariableAccess] (__range) +# 2153| Type = [LValueReferenceType] vector & +# 2153| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const vector +#-----| ValueCategory = lvalue +#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [ClassTemplateInstantiation,Struct] vector +#-----| ValueCategory = lvalue +# 2153| getDeclarationEntry(1): (no string representation) +# 2153| Type = [NestedStruct] iterator +#-----| getVariable().getInitializer(): [Initializer] initializer for (__end) +# 2153| getExpr(): [FunctionCall] call to end +# 2153| Type = [NestedStruct] iterator +# 2153| ValueCategory = prvalue +# 2153| getQualifier(): [VariableAccess] (__range) +# 2153| Type = [LValueReferenceType] vector & +# 2153| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const vector +#-----| ValueCategory = lvalue +#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [ClassTemplateInstantiation,Struct] vector +#-----| ValueCategory = lvalue # 2153| getCondition(): [FunctionCall] call to operator!= # 2153| Type = [BoolType] bool # 2153| ValueCategory = prvalue @@ -16431,6 +16583,22 @@ ir.cpp: # 2153| Type = [NestedStruct] iterator # 2153| ValueCategory = lvalue # 2153| getChild(4): [DeclStmt] declaration +# 2153| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 2153| Type = [Class] ClassWithDestructor +# 2153| getVariable().getInitializer(): [Initializer] initializer for y +# 2153| getExpr(): [OverloadedPointerDereferenceExpr] call to operator* +# 2153| Type = [LValueReferenceType] ClassWithDestructor & +# 2153| ValueCategory = prvalue +# 2153| getQualifier(): [VariableAccess] (__begin) +# 2153| Type = [NestedStruct] iterator +# 2153| ValueCategory = lvalue +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +# 2153| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2153| Type = [Class] ClassWithDestructor +# 2153| ValueCategory = prvalue(load) # 2154| getStmt(): [ExprStmt] ExprStmt # 2154| getExpr(): [FunctionCall] call to set_x # 2154| Type = [VoidType] void diff --git a/cpp/ql/test/library-tests/ir/ir/operand_locations.expected b/cpp/ql/test/library-tests/ir/ir/operand_locations.expected index b460df9ea59..eba7196785f 100644 --- a/cpp/ql/test/library-tests/ir/ir/operand_locations.expected +++ b/cpp/ql/test/library-tests/ir/ir/operand_locations.expected @@ -5540,10 +5540,10 @@ | ir.cpp:1079:39:1079:39 | Address | &:r1079_7 | | ir.cpp:1079:39:1079:39 | Load | m1079_6 | | ir.cpp:1079:39:1079:39 | SideEffect | m1079_8 | -| ir.cpp:1080:5:1084:5 | Address | &:r1080_1 | -| ir.cpp:1080:5:1084:5 | Address | &:r1080_7 | -| ir.cpp:1080:5:1084:5 | Address | &:r1080_15 | -| ir.cpp:1080:5:1084:5 | Address | &:r1080_33 | +| ir.cpp:1080:5:1080:5 | Address | &:r1080_1 | +| ir.cpp:1080:5:1080:5 | Address | &:r1080_7 | +| ir.cpp:1080:5:1080:5 | Address | &:r1080_15 | +| ir.cpp:1080:14:1080:14 | Address | &:r1080_33 | | ir.cpp:1080:18:1080:18 | Address | &:r1080_2 | | ir.cpp:1080:18:1080:18 | Address | &:r1080_8 | | ir.cpp:1080:18:1080:18 | Address | &:r1080_16 | @@ -5606,10 +5606,10 @@ | ir.cpp:1081:13:1081:13 | Load | m1080_40 | | ir.cpp:1081:13:1081:17 | Condition | r1081_4 | | ir.cpp:1081:17:1081:17 | Right | r1081_3 | -| ir.cpp:1086:5:1090:5 | Address | &:r1086_1 | -| ir.cpp:1086:5:1090:5 | Address | &:r1086_7 | -| ir.cpp:1086:5:1090:5 | Address | &:r1086_15 | -| ir.cpp:1086:5:1090:5 | Address | &:r1086_42 | +| ir.cpp:1086:5:1086:5 | Address | &:r1086_1 | +| ir.cpp:1086:5:1086:5 | Address | &:r1086_7 | +| ir.cpp:1086:5:1086:5 | Address | &:r1086_15 | +| ir.cpp:1086:21:1086:21 | Address | &:r1086_42 | | ir.cpp:1086:25:1086:25 | Address | &:r1086_2 | | ir.cpp:1086:25:1086:25 | Address | &:r1086_8 | | ir.cpp:1086:25:1086:25 | Address | &:r1086_16 | From c79cc493e8056bf6990b247110d79d74a3582fe5 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Tue, 13 Feb 2024 21:53:51 +0100 Subject: [PATCH 206/378] C++: Accept more test changes --- .../dataflow-ir-consistency.expected | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/cpp/ql/test/library-tests/syntax-zoo/dataflow-ir-consistency.expected b/cpp/ql/test/library-tests/syntax-zoo/dataflow-ir-consistency.expected index 2a8d7ad25bd..0cbb9a11f67 100644 --- a/cpp/ql/test/library-tests/syntax-zoo/dataflow-ir-consistency.expected +++ b/cpp/ql/test/library-tests/syntax-zoo/dataflow-ir-consistency.expected @@ -5,11 +5,37 @@ uniqueNodeLocation missingLocation uniqueNodeToString | builtin.c:5:5:5:11 | (no string representation) | Node should have one toString but has 0. | +| cpp11.cpp:6:5:6:5 | (no string representation) | Node should have one toString but has 0. | +| cpp11.cpp:6:5:6:5 | (no string representation) | Node should have one toString but has 0. | +| cpp11.cpp:6:5:6:5 | (no string representation) | Node should have one toString but has 0. | +| cpp11.cpp:6:5:6:5 | (no string representation) | Node should have one toString but has 0. | +| cpp11.cpp:6:5:6:5 | (no string representation) | Node should have one toString but has 0. | +| cpp11.cpp:6:5:6:5 | (no string representation) | Node should have one toString but has 0. | +| cpp11.cpp:6:5:6:5 | (no string representation) | Node should have one toString but has 0. | +| cpp11.cpp:6:5:6:5 | (no string representation) | Node should have one toString but has 0. | +| cpp11.cpp:6:5:6:5 | (no string representation) | Node should have one toString but has 0. | +| cpp11.cpp:6:5:6:5 | (no string representation) | Node should have one toString but has 0. | +| cpp11.cpp:28:5:28:5 | (no string representation) | Node should have one toString but has 0. | +| cpp11.cpp:28:5:28:5 | (no string representation) | Node should have one toString but has 0. | +| cpp11.cpp:28:5:28:5 | (no string representation) | Node should have one toString but has 0. | +| cpp11.cpp:28:5:28:5 | (no string representation) | Node should have one toString but has 0. | +| cpp11.cpp:28:5:28:5 | (no string representation) | Node should have one toString but has 0. | +| cpp11.cpp:28:5:28:5 | (no string representation) | Node should have one toString but has 0. | +| cpp11.cpp:28:5:28:5 | (no string representation) | Node should have one toString but has 0. | | misc.c:227:7:227:28 | (no string representation) | Node should have one toString but has 0. | | static_init_templates.cpp:80:18:80:23 | (no string representation) | Node should have one toString but has 0. | | static_init_templates.cpp:80:18:80:23 | (no string representation) | Node should have one toString but has 0. | | static_init_templates.cpp:89:18:89:23 | (no string representation) | Node should have one toString but has 0. | | static_init_templates.cpp:89:18:89:23 | (no string representation) | Node should have one toString but has 0. | +| stream_it.cpp:11:3:11:3 | (no string representation) | Node should have one toString but has 0. | +| stream_it.cpp:11:3:11:3 | (no string representation) | Node should have one toString but has 0. | +| stream_it.cpp:11:3:11:3 | (no string representation) | Node should have one toString but has 0. | +| stream_it.cpp:11:3:11:3 | (no string representation) | Node should have one toString but has 0. | +| stream_it.cpp:11:3:11:3 | (no string representation) | Node should have one toString but has 0. | +| stream_it.cpp:11:3:11:3 | (no string representation) | Node should have one toString but has 0. | +| stream_it.cpp:11:3:11:3 | (no string representation) | Node should have one toString but has 0. | +| stream_it.cpp:11:3:11:3 | (no string representation) | Node should have one toString but has 0. | +| stream_it.cpp:11:3:11:3 | (no string representation) | Node should have one toString but has 0. | parameterCallable localFlowIsLocal readStepIsLocal From 9a08c27ad44931d724d60f27c3862633c2ddeaa6 Mon Sep 17 00:00:00 2001 From: Asger F Date: Tue, 13 Feb 2024 22:43:41 +0100 Subject: [PATCH 207/378] JS: Change note --- .../ql/src/change-notes/2024-02-13-block-logical-and-flow.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 javascript/ql/src/change-notes/2024-02-13-block-logical-and-flow.md diff --git a/javascript/ql/src/change-notes/2024-02-13-block-logical-and-flow.md b/javascript/ql/src/change-notes/2024-02-13-block-logical-and-flow.md new file mode 100644 index 00000000000..2b08e677a26 --- /dev/null +++ b/javascript/ql/src/change-notes/2024-02-13-block-logical-and-flow.md @@ -0,0 +1,4 @@ +--- +category: fix +--- +* The left operand of the `&&` operator no longer propagates data flow by default. From bafe5e3d8eecfc161edbf0648527837ebd64e056 Mon Sep 17 00:00:00 2001 From: Asger F Date: Wed, 14 Feb 2024 10:44:50 +0100 Subject: [PATCH 208/378] JS: Add test case (with old expected data) --- .../library-tests/TaintTracking/BasicTaintTracking.expected | 2 ++ .../library-tests/TaintTracking/DataFlowTracking.expected | 2 ++ .../ql/test/library-tests/TaintTracking/logical-and.js | 6 ++++++ 3 files changed, 10 insertions(+) create mode 100644 javascript/ql/test/library-tests/TaintTracking/logical-and.js diff --git a/javascript/ql/test/library-tests/TaintTracking/BasicTaintTracking.expected b/javascript/ql/test/library-tests/TaintTracking/BasicTaintTracking.expected index 74095771abb..6e8000e3aac 100644 --- a/javascript/ql/test/library-tests/TaintTracking/BasicTaintTracking.expected +++ b/javascript/ql/test/library-tests/TaintTracking/BasicTaintTracking.expected @@ -154,6 +154,8 @@ typeInferenceMismatch | json-stringify.js:2:16:2:23 | source() | json-stringify.js:42:8:42:51 | JSON.st ... urce))) | | json-stringify.js:2:16:2:23 | source() | json-stringify.js:45:8:45:23 | fastJson(source) | | json-stringify.js:3:15:3:22 | source() | json-stringify.js:8:8:8:31 | jsonStr ... (taint) | +| logical-and.js:2:17:2:24 | source() | logical-and.js:4:10:4:24 | "safe" && taint | +| logical-and.js:2:17:2:24 | source() | logical-and.js:5:10:5:24 | taint && "safe" | | nested-props.js:4:13:4:20 | source() | nested-props.js:5:10:5:14 | obj.x | | nested-props.js:9:18:9:25 | source() | nested-props.js:10:10:10:16 | obj.x.y | | nested-props.js:35:13:35:20 | source() | nested-props.js:36:10:36:20 | doLoad(obj) | diff --git a/javascript/ql/test/library-tests/TaintTracking/DataFlowTracking.expected b/javascript/ql/test/library-tests/TaintTracking/DataFlowTracking.expected index 77a5cc33a15..a42da556403 100644 --- a/javascript/ql/test/library-tests/TaintTracking/DataFlowTracking.expected +++ b/javascript/ql/test/library-tests/TaintTracking/DataFlowTracking.expected @@ -73,6 +73,8 @@ | importedReactComponent.jsx:4:40:4:47 | source() | exportedReactComponent.jsx:2:10:2:19 | props.text | | indexOf.js:4:11:4:18 | source() | indexOf.js:9:10:9:10 | x | | indexOf.js:4:11:4:18 | source() | indexOf.js:13:10:13:10 | x | +| logical-and.js:2:17:2:24 | source() | logical-and.js:4:10:4:24 | "safe" && taint | +| logical-and.js:2:17:2:24 | source() | logical-and.js:5:10:5:24 | taint && "safe" | | nested-props.js:4:13:4:20 | source() | nested-props.js:5:10:5:14 | obj.x | | nested-props.js:9:18:9:25 | source() | nested-props.js:10:10:10:16 | obj.x.y | | nested-props.js:35:13:35:20 | source() | nested-props.js:36:10:36:20 | doLoad(obj) | diff --git a/javascript/ql/test/library-tests/TaintTracking/logical-and.js b/javascript/ql/test/library-tests/TaintTracking/logical-and.js new file mode 100644 index 00000000000..b7026928c7a --- /dev/null +++ b/javascript/ql/test/library-tests/TaintTracking/logical-and.js @@ -0,0 +1,6 @@ +function test() { + var taint = source(); + + sink("safe" && taint); // NOT OK + sink(taint && "safe"); // OK +} From 18db769d6daafe483c1e93a8fef375e1fe8ecbba Mon Sep 17 00:00:00 2001 From: Asger F Date: Wed, 14 Feb 2024 10:45:42 +0100 Subject: [PATCH 209/378] JS: Update expected output --- .../test/library-tests/TaintTracking/BasicTaintTracking.expected | 1 - .../test/library-tests/TaintTracking/DataFlowTracking.expected | 1 - 2 files changed, 2 deletions(-) diff --git a/javascript/ql/test/library-tests/TaintTracking/BasicTaintTracking.expected b/javascript/ql/test/library-tests/TaintTracking/BasicTaintTracking.expected index 6e8000e3aac..3856d2ae689 100644 --- a/javascript/ql/test/library-tests/TaintTracking/BasicTaintTracking.expected +++ b/javascript/ql/test/library-tests/TaintTracking/BasicTaintTracking.expected @@ -155,7 +155,6 @@ typeInferenceMismatch | json-stringify.js:2:16:2:23 | source() | json-stringify.js:45:8:45:23 | fastJson(source) | | json-stringify.js:3:15:3:22 | source() | json-stringify.js:8:8:8:31 | jsonStr ... (taint) | | logical-and.js:2:17:2:24 | source() | logical-and.js:4:10:4:24 | "safe" && taint | -| logical-and.js:2:17:2:24 | source() | logical-and.js:5:10:5:24 | taint && "safe" | | nested-props.js:4:13:4:20 | source() | nested-props.js:5:10:5:14 | obj.x | | nested-props.js:9:18:9:25 | source() | nested-props.js:10:10:10:16 | obj.x.y | | nested-props.js:35:13:35:20 | source() | nested-props.js:36:10:36:20 | doLoad(obj) | diff --git a/javascript/ql/test/library-tests/TaintTracking/DataFlowTracking.expected b/javascript/ql/test/library-tests/TaintTracking/DataFlowTracking.expected index a42da556403..33a27661ecd 100644 --- a/javascript/ql/test/library-tests/TaintTracking/DataFlowTracking.expected +++ b/javascript/ql/test/library-tests/TaintTracking/DataFlowTracking.expected @@ -74,7 +74,6 @@ | indexOf.js:4:11:4:18 | source() | indexOf.js:9:10:9:10 | x | | indexOf.js:4:11:4:18 | source() | indexOf.js:13:10:13:10 | x | | logical-and.js:2:17:2:24 | source() | logical-and.js:4:10:4:24 | "safe" && taint | -| logical-and.js:2:17:2:24 | source() | logical-and.js:5:10:5:24 | taint && "safe" | | nested-props.js:4:13:4:20 | source() | nested-props.js:5:10:5:14 | obj.x | | nested-props.js:9:18:9:25 | source() | nested-props.js:10:10:10:16 | obj.x.y | | nested-props.js:35:13:35:20 | source() | nested-props.js:36:10:36:20 | doLoad(obj) | From ba1faea630d54f6abf35daaebfbd13fe7fadf44a Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Tue, 6 Feb 2024 15:58:23 +0100 Subject: [PATCH 210/378] Go: Promote `go/hardcoded-key` from experimental --- .../ext/github.com.cristalhq.jwt.model.yml | 6 + .../ext/github.com.dgrijalva.jwt-go.model.yml | 7 + .../github.com.form3tech-oss.jwt-go.model.yml | 7 + .../ext/github.com.go-chi.jwtauth.model.yml | 6 + .../github.com.go-kit.kit.auth.jwt.model.yml | 6 + .../ext/github.com.golang-jwt.jwt.model.yml | 7 + ....com.kataras.iris.middleware.jwt.model.yml | 6 + .../lib/ext/github.com.kataras.jwt.model.yml | 10 + .../github.com.lestrrat-go.jwx.jwk.model.yml | 6 + .../ext/github.com.lestrrat-go.jwx.model.yml | 6 + .../github.com.lestrrat.go-jwx.jwk.model.yml | 6 + .../github.com.ory.fosite.token.jwt.model.yml | 7 + go/ql/lib/ext/math.big.model.yml | 6 + .../go/security/HardcodedCredentials.qll | 158 +++++++ go/ql/lib/semmle/go/security/Jwt.qll | 44 ++ .../Security/CWE-798/HardcodedCredentials.ql | 34 +- .../2024-02-06-hardcoded-keys-promotion.md | 4 + .../experimental/CWE-321/HardcodedKeys.qhelp | 50 --- .../src/experimental/CWE-321/HardcodedKeys.ql | 19 - .../experimental/CWE-321/HardcodedKeysBad.go | 15 - .../experimental/CWE-321/HardcodedKeysGood.go | 31 -- .../experimental/CWE-321/HardcodedKeysLib.qll | 389 ------------------ .../CWE-321/HardcodedKeys.expected | 126 ------ .../experimental/CWE-321/HardcodedKeys.qlref | 1 - .../CWE-798/HardcodedCredentials.expected | 21 + .../Security/CWE-798}/HardcodedKeysBad.go | 0 .../Security/CWE-798}/HardcodedKeysGood.go | 0 .../Security/CWE-798}/go.mod | 0 .../Security/CWE-798/jwt.go} | 35 +- .../Security/CWE-798}/sanitizer.go | 0 .../github.com/appleboy/gin-jwt/v2/stub.go | 0 .../github.com/cristalhq/jwt/v3/stub.go | 0 .../vendor/github.com/gin-gonic/gin/stub.go | 0 .../github.com/go-kit/kit/auth/jwt/stub.go | 0 .../vendor/github.com/gogf/gf-jwt/v2/stub.go | 0 .../github.com/golang-jwt/jwt/v4/stub.go | 0 .../iris-contrib/middleware/jwt/stub.go | 0 .../kataras/iris/v12/middleware/jwt/stub.go | 0 .../vendor/github.com/kataras/jwt/stub.go | 0 .../github.com/lestrrat/go-jwx/jwk/stub.go | 0 .../github.com/square/go-jose/v3/stub.go | 0 .../vendor/gopkg.in/square/go-jose.v2/stub.go | 0 .../Security/CWE-798}/vendor/modules.txt | 0 43 files changed, 354 insertions(+), 659 deletions(-) create mode 100644 go/ql/lib/ext/github.com.cristalhq.jwt.model.yml create mode 100644 go/ql/lib/ext/github.com.dgrijalva.jwt-go.model.yml create mode 100644 go/ql/lib/ext/github.com.form3tech-oss.jwt-go.model.yml create mode 100644 go/ql/lib/ext/github.com.go-chi.jwtauth.model.yml create mode 100644 go/ql/lib/ext/github.com.go-kit.kit.auth.jwt.model.yml create mode 100644 go/ql/lib/ext/github.com.golang-jwt.jwt.model.yml create mode 100644 go/ql/lib/ext/github.com.kataras.iris.middleware.jwt.model.yml create mode 100644 go/ql/lib/ext/github.com.kataras.jwt.model.yml create mode 100644 go/ql/lib/ext/github.com.lestrrat-go.jwx.jwk.model.yml create mode 100644 go/ql/lib/ext/github.com.lestrrat-go.jwx.model.yml create mode 100644 go/ql/lib/ext/github.com.lestrrat.go-jwx.jwk.model.yml create mode 100644 go/ql/lib/ext/github.com.ory.fosite.token.jwt.model.yml create mode 100644 go/ql/lib/ext/math.big.model.yml create mode 100644 go/ql/lib/semmle/go/security/HardcodedCredentials.qll create mode 100644 go/ql/lib/semmle/go/security/Jwt.qll create mode 100644 go/ql/src/change-notes/2024-02-06-hardcoded-keys-promotion.md delete mode 100644 go/ql/src/experimental/CWE-321/HardcodedKeys.qhelp delete mode 100644 go/ql/src/experimental/CWE-321/HardcodedKeys.ql delete mode 100644 go/ql/src/experimental/CWE-321/HardcodedKeysBad.go delete mode 100644 go/ql/src/experimental/CWE-321/HardcodedKeysGood.go delete mode 100644 go/ql/src/experimental/CWE-321/HardcodedKeysLib.qll delete mode 100644 go/ql/test/experimental/CWE-321/HardcodedKeys.expected delete mode 100644 go/ql/test/experimental/CWE-321/HardcodedKeys.qlref rename go/ql/test/{experimental/CWE-321 => query-tests/Security/CWE-798}/HardcodedKeysBad.go (100%) rename go/ql/test/{experimental/CWE-321 => query-tests/Security/CWE-798}/HardcodedKeysGood.go (100%) rename go/ql/test/{experimental/CWE-321 => query-tests/Security/CWE-798}/go.mod (100%) rename go/ql/test/{experimental/CWE-321/main.go => query-tests/Security/CWE-798/jwt.go} (86%) rename go/ql/test/{experimental/CWE-321 => query-tests/Security/CWE-798}/sanitizer.go (100%) rename go/ql/test/{experimental/CWE-321 => query-tests/Security/CWE-798}/vendor/github.com/appleboy/gin-jwt/v2/stub.go (100%) rename go/ql/test/{experimental/CWE-321 => query-tests/Security/CWE-798}/vendor/github.com/cristalhq/jwt/v3/stub.go (100%) rename go/ql/test/{experimental/CWE-321 => query-tests/Security/CWE-798}/vendor/github.com/gin-gonic/gin/stub.go (100%) rename go/ql/test/{experimental/CWE-321 => query-tests/Security/CWE-798}/vendor/github.com/go-kit/kit/auth/jwt/stub.go (100%) rename go/ql/test/{experimental/CWE-321 => query-tests/Security/CWE-798}/vendor/github.com/gogf/gf-jwt/v2/stub.go (100%) rename go/ql/test/{experimental/CWE-321 => query-tests/Security/CWE-798}/vendor/github.com/golang-jwt/jwt/v4/stub.go (100%) rename go/ql/test/{experimental/CWE-321 => query-tests/Security/CWE-798}/vendor/github.com/iris-contrib/middleware/jwt/stub.go (100%) rename go/ql/test/{experimental/CWE-321 => query-tests/Security/CWE-798}/vendor/github.com/kataras/iris/v12/middleware/jwt/stub.go (100%) rename go/ql/test/{experimental/CWE-321 => query-tests/Security/CWE-798}/vendor/github.com/kataras/jwt/stub.go (100%) rename go/ql/test/{experimental/CWE-321 => query-tests/Security/CWE-798}/vendor/github.com/lestrrat/go-jwx/jwk/stub.go (100%) rename go/ql/test/{experimental/CWE-321 => query-tests/Security/CWE-798}/vendor/github.com/square/go-jose/v3/stub.go (100%) rename go/ql/test/{experimental/CWE-321 => query-tests/Security/CWE-798}/vendor/gopkg.in/square/go-jose.v2/stub.go (100%) rename go/ql/test/{experimental/CWE-321 => query-tests/Security/CWE-798}/vendor/modules.txt (100%) diff --git a/go/ql/lib/ext/github.com.cristalhq.jwt.model.yml b/go/ql/lib/ext/github.com.cristalhq.jwt.model.yml new file mode 100644 index 00000000000..088c6a7ab79 --- /dev/null +++ b/go/ql/lib/ext/github.com.cristalhq.jwt.model.yml @@ -0,0 +1,6 @@ +extensions: + - addsTo: + pack: codeql/go-all + extensible: sinkModel + data: + - ["github.com/cristalhq/jwt/$ANYVERSION", "", True, "NewSignerHS", "", "", "Argument[1]", "credentials-key", "manual"] diff --git a/go/ql/lib/ext/github.com.dgrijalva.jwt-go.model.yml b/go/ql/lib/ext/github.com.dgrijalva.jwt-go.model.yml new file mode 100644 index 00000000000..9f03151231f --- /dev/null +++ b/go/ql/lib/ext/github.com.dgrijalva.jwt-go.model.yml @@ -0,0 +1,7 @@ +extensions: + - addsTo: + pack: codeql/go-all + extensible: sinkModel + data: + - ["github.com/dgrijalva/jwt-go", "Token", True, "SignedString", "", "", "Argument[0]", "credentials-key", "manual"] + - ["github.com/dgrijalva/jwt-go", "SigningMethod", True, "Sign", "", "", "Argument[1]", "credentials-key", "manual"] diff --git a/go/ql/lib/ext/github.com.form3tech-oss.jwt-go.model.yml b/go/ql/lib/ext/github.com.form3tech-oss.jwt-go.model.yml new file mode 100644 index 00000000000..92a82798d8a --- /dev/null +++ b/go/ql/lib/ext/github.com.form3tech-oss.jwt-go.model.yml @@ -0,0 +1,7 @@ +extensions: + - addsTo: + pack: codeql/go-all + extensible: sinkModel + data: + - ["github.com/form3tech-oss/jwt-go", "Token", True, "SignedString", "", "", "Argument[0]", "credentials-key", "manual"] + - ["github.com/form3tech-oss/jwt-go", "SigningMethod", True, "Sign", "", "", "Argument[1]", "credentials-key", "manual"] diff --git a/go/ql/lib/ext/github.com.go-chi.jwtauth.model.yml b/go/ql/lib/ext/github.com.go-chi.jwtauth.model.yml new file mode 100644 index 00000000000..0c7319c1f22 --- /dev/null +++ b/go/ql/lib/ext/github.com.go-chi.jwtauth.model.yml @@ -0,0 +1,6 @@ +extensions: + - addsTo: + pack: codeql/go-all + extensible: sinkModel + data: + - ["github.com/go-chi/jwtauth/$ANYVERSION", "", True, "New", "", "", "Argument[1]", "credentials-key", "manual"] diff --git a/go/ql/lib/ext/github.com.go-kit.kit.auth.jwt.model.yml b/go/ql/lib/ext/github.com.go-kit.kit.auth.jwt.model.yml new file mode 100644 index 00000000000..9ed0791dc54 --- /dev/null +++ b/go/ql/lib/ext/github.com.go-kit.kit.auth.jwt.model.yml @@ -0,0 +1,6 @@ +extensions: + - addsTo: + pack: codeql/go-all + extensible: sinkModel + data: + - ["github.com/go-kit/kit/auth/jwt", "", True, "NewSigner", "", "", "Argument[1]", "credentials-key", "manual"] diff --git a/go/ql/lib/ext/github.com.golang-jwt.jwt.model.yml b/go/ql/lib/ext/github.com.golang-jwt.jwt.model.yml new file mode 100644 index 00000000000..fcbdf1c8923 --- /dev/null +++ b/go/ql/lib/ext/github.com.golang-jwt.jwt.model.yml @@ -0,0 +1,7 @@ +extensions: + - addsTo: + pack: codeql/go-all + extensible: sinkModel + data: + - ["github.com/golang-jwt/jwt/$ANYVERSION", "Token", True, "SignedString", "", "", "Argument[0]", "credentials-key", "manual"] + - ["github.com/golang-jwt/jwt/$ANYVERSION", "SigningMethod", True, "Sign", "", "", "Argument[1]", "credentials-key", "manual"] diff --git a/go/ql/lib/ext/github.com.kataras.iris.middleware.jwt.model.yml b/go/ql/lib/ext/github.com.kataras.iris.middleware.jwt.model.yml new file mode 100644 index 00000000000..e21cd052574 --- /dev/null +++ b/go/ql/lib/ext/github.com.kataras.iris.middleware.jwt.model.yml @@ -0,0 +1,6 @@ +extensions: + - addsTo: + pack: codeql/go-all + extensible: sinkModel + data: + - ["github.com/kataras/iris/$ANYVERSION/middleware/jwt", "", True, "NewSigner", "", "", "Argument[1]", "credentials-key", "manual"] diff --git a/go/ql/lib/ext/github.com.kataras.jwt.model.yml b/go/ql/lib/ext/github.com.kataras.jwt.model.yml new file mode 100644 index 00000000000..ab87a747175 --- /dev/null +++ b/go/ql/lib/ext/github.com.kataras.jwt.model.yml @@ -0,0 +1,10 @@ +extensions: + - addsTo: + pack: codeql/go-all + extensible: sinkModel + data: + - ["github.com/kataras/jwt", "Keys", True, "Register", "", "", "Argument[3]", "credentials-key", "manual"] + - ["github.com/kataras/jwt", "", True, "Sign", "", "", "Argument[1]", "credentials-key", "manual"] + - ["github.com/kataras/jwt", "", True, "SignEncrypted", "", "", "Argument[1]", "credentials-key", "manual"] + - ["github.com/kataras/jwt", "", True, "SignEncryptedWithHeader", "", "", "Argument[1]", "credentials-key", "manual"] + - ["github.com/kataras/jwt", "", True, "SignWithHeader", "", "", "Argument[1]", "credentials-key", "manual"] diff --git a/go/ql/lib/ext/github.com.lestrrat-go.jwx.jwk.model.yml b/go/ql/lib/ext/github.com.lestrrat-go.jwx.jwk.model.yml new file mode 100644 index 00000000000..675d5d8b540 --- /dev/null +++ b/go/ql/lib/ext/github.com.lestrrat-go.jwx.jwk.model.yml @@ -0,0 +1,6 @@ +extensions: + - addsTo: + pack: codeql/go-all + extensible: sinkModel + data: + - ["github.com/lestrrat-go/jwx/$ANYVERSION/jwk", "", True, "New", "", "", "Argument[0]", "credentials-key", "manual"] diff --git a/go/ql/lib/ext/github.com.lestrrat-go.jwx.model.yml b/go/ql/lib/ext/github.com.lestrrat-go.jwx.model.yml new file mode 100644 index 00000000000..14a5cdd7482 --- /dev/null +++ b/go/ql/lib/ext/github.com.lestrrat-go.jwx.model.yml @@ -0,0 +1,6 @@ +extensions: + - addsTo: + pack: codeql/go-all + extensible: sinkModel + data: + - ["github.com/lestrrat-go/jwx", "", True, "New", "", "", "Argument[0]", "credentials-key", "manual"] diff --git a/go/ql/lib/ext/github.com.lestrrat.go-jwx.jwk.model.yml b/go/ql/lib/ext/github.com.lestrrat.go-jwx.jwk.model.yml new file mode 100644 index 00000000000..f194e1ec93c --- /dev/null +++ b/go/ql/lib/ext/github.com.lestrrat.go-jwx.jwk.model.yml @@ -0,0 +1,6 @@ +extensions: + - addsTo: + pack: codeql/go-all + extensible: sinkModel + data: + - ["github.com/lestrrat/go-jwx/jwk", "", True, "New", "", "", "Argument[0]", "credentials-key", "manual"] diff --git a/go/ql/lib/ext/github.com.ory.fosite.token.jwt.model.yml b/go/ql/lib/ext/github.com.ory.fosite.token.jwt.model.yml new file mode 100644 index 00000000000..191fdea2fb2 --- /dev/null +++ b/go/ql/lib/ext/github.com.ory.fosite.token.jwt.model.yml @@ -0,0 +1,7 @@ +extensions: + - addsTo: + pack: codeql/go-all + extensible: sinkModel + data: + - ["github.com/ory/fosite/token/jwt", "Token", True, "SignedString", "", "", "Argument[0]", "credentials-key", "manual"] + - ["github.com/ory/fosite/token/jwt", "SigningMethod", True, "Sign", "", "", "Argument[1]", "credentials-key", "manual"] diff --git a/go/ql/lib/ext/math.big.model.yml b/go/ql/lib/ext/math.big.model.yml new file mode 100644 index 00000000000..63e02e83709 --- /dev/null +++ b/go/ql/lib/ext/math.big.model.yml @@ -0,0 +1,6 @@ +extensions: + - addsTo: + pack: codeql/go-all + extensible: summaryModel + data: + - ["math/big", "Int", False, "Int64", "", "", "Argument[-1]", "ReturnValue[0]", "taint", "manual"] diff --git a/go/ql/lib/semmle/go/security/HardcodedCredentials.qll b/go/ql/lib/semmle/go/security/HardcodedCredentials.qll new file mode 100644 index 00000000000..9df3425b2a5 --- /dev/null +++ b/go/ql/lib/semmle/go/security/HardcodedCredentials.qll @@ -0,0 +1,158 @@ +/** + * Provides default sources, sinks and sanitizers for reasoning about + * hardcoded credentials, as well as extension points + * for adding your own. + */ + +import go +private import semmle.go.StringOps +private import semmle.go.dataflow.ExternalFlow +private import semmle.go.security.Jwt + +/** + * Provides default sources, sinks and sanitizers for reasoning about + * hardcoded credentials, as well as extension points + * for adding your own. + */ +module HardcodedCredentials { + /** A data flow source for hardcoded credentials. */ + abstract class Source extends DataFlow::Node { } + + /** A data flow sink for hardcoded credentials. */ + abstract class Sink extends DataFlow::Node { } + + /** A sanitizer for hardcoded credentials. */ + abstract class Sanitizer extends DataFlow::Node { } + + private module Config implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { source instanceof Source } + + predicate isSink(DataFlow::Node sink) { sink instanceof Sink } + + predicate isBarrier(DataFlow::Node node) { node instanceof Sanitizer } + } + + /** Tracks taint flow for reasoning about hardcoded credentials. */ + module Flow = TaintTracking::Global; + + /** A hardcoded string literal as a source for hardcoded credentials. */ + private class HardcodedStringSource extends Source { + HardcodedStringSource() { this.asExpr() instanceof StringLit } + } + + /** A use of a credential. */ + private class CredentialsSink extends Sink { + CredentialsSink() { exists(string s | s.matches("credentials-%") | sinkNode(this, s)) } + } + + /** + * Holds if the guard `g` in its branch `branch` validates the expression `e` + * by comparing it to a disallowed literal. + */ + private predicate constantValueCheck(DataFlow::Node g, Expr e, boolean branch) { + exists(Literal lit, DataFlow::EqualityTestNode eq | eq = g | + eq.getAnOperand().asExpr() = e and + eq.getAnOperand().asExpr() = lit and + e != lit and + branch = eq.getPolarity().booleanNot() + ) + } + + /** + * A value validated by comparing it to a disallowed constant value. + * For example, in the context `if key != "invalid_key" { ... }`, + * if `"invalid_key"` is indeed the only dangerous key then guarded uses of `key` are likely + * to be safe. + */ + private class CompareExprSanitizer extends Sanitizer { + CompareExprSanitizer() { + this = DataFlow::BarrierGuard::getABarrierNode() + } + } + + /** + * A value returned with an error. + * + * Typically this means contexts like `return "", errors.New("Oh no")`, + * where we can be reasonably confident downstream users will not mistake + * that empty string for a usable key. + */ + private class ReturnedAlongsideErrorSanitizer extends Sanitizer { + ReturnedAlongsideErrorSanitizer() { + exists(ReturnStmt r, DataFlow::CallNode c | + c.getTarget().hasQualifiedName("errors", "New") and + r.getNumChild() > 1 and + r.getAChild() = c.getAResult().getASuccessor*().asExpr() and + r.getAChild() = this.asExpr() + ) + } + } + + /** + * A value returned alongside an error-value that is known + * to be non-nil by virtue of a guarding check. + * + * For example, `if err != nil { return "", err }` is unlikely to be + * contributing a dangerous hardcoded key. + */ + private class ReturnedAlongsideErrorSanitizerGuard extends Sanitizer { + ReturnedAlongsideErrorSanitizerGuard() { + exists(ControlFlow::ConditionGuardNode guard, SsaWithFields errorVar, ReturnStmt r | + guard.ensuresNeq(errorVar.getAUse(), Builtin::nil().getARead()) and + guard.dominates(this.getBasicBlock()) and + r.getExpr(1) = errorVar.getAUse().asExpr() and + this.asExpr() = r.getExpr(0) + ) + } + } + + /** The result of a formatting string call. */ + private class FormattingSanitizer extends Sanitizer { + FormattingSanitizer() { any(StringOps::Formatting::StringFormatCall s).getAResult() = this } + } + + private string getRandIntFunctionName() { + result = + [ + "ExpFloat64", "Float32", "Float64", "Int", "Int31", "Int31n", "Int63", "Int63n", "Intn", + "NormFloat64", "Uint32", "Uint64" + ] + } + + private DataFlow::CallNode getARandIntCall() { + exists(Function f | f = result.getTarget() | + f.hasQualifiedName("math/rand", getRandIntFunctionName()) or + f.(Method).hasQualifiedName("math/rand", "Rand", getRandIntFunctionName()) or + f.hasQualifiedName("crypto/rand", "Int") + ) + } + + private DataFlow::CallNode getARandReadCall() { + result.getTarget().hasQualifiedName("crypto/rand", "Read") + } + + /** + * Holds if taint flows in one local step from `prev` to `succ`, or + * through a binary operation such as a modulo `%` operation or an addition `+` operation. + */ + private predicate localTaintStepIncludingBinaryExpr(DataFlow::Node prev, DataFlow::Node succ) { + TaintTracking::localTaintStep(prev, succ) + or + exists(BinaryExpr b | b.getAnOperand() = prev.asExpr() | succ.asExpr() = b) + } + + /** A read from a slice with a random index. */ + private class RandSliceSanitizer extends Sanitizer, DataFlow::ElementReadNode { + RandSliceSanitizer() { + exists(DataFlow::Node randomValue, DataFlow::Node index | + randomValue = getARandIntCall().getAResult() + or + randomValue.(DataFlow::PostUpdateNode).getPreUpdateNode() = + getARandReadCall().getArgument(0) + | + localTaintStepIncludingBinaryExpr*(randomValue, index) and + this.reads(_, index) + ) + } + } +} diff --git a/go/ql/lib/semmle/go/security/Jwt.qll b/go/ql/lib/semmle/go/security/Jwt.qll new file mode 100644 index 00000000000..ee94ad0567f --- /dev/null +++ b/go/ql/lib/semmle/go/security/Jwt.qll @@ -0,0 +1,44 @@ +/** + * Provides classes and predicates for reasoning about JSON Web Tokens (JWT). + */ + +import go +private import semmle.go.security.HardcodedCredentials + +private class IrisJwt extends HardcodedCredentials::Sink { + IrisJwt() { + exists(Field f | + f.hasQualifiedName(package("github.com/kataras/iris", "middleware/jwt"), "Signer", "Key") and + f.getAWrite().getRhs() = this + ) + } +} + +private class GogfJwtSign extends HardcodedCredentials::Sink { + GogfJwtSign() { + exists(Field f | + f.hasQualifiedName(package("github.com/gogf/gf-jwt", ""), "GfJWTMiddleware", "Key") and + f.getAWrite().getRhs() = this + ) + } +} + +private class GinJwtSign extends HardcodedCredentials::Sink { + GinJwtSign() { + exists(Field f | + f.hasQualifiedName(package("github.com/appleboy/gin-jwt", ""), "GinJWTMiddleware", "Key") and + f.getAWrite().getRhs() = this + ) + } +} + +private class SquareJoseKey extends HardcodedCredentials::Sink { + SquareJoseKey() { + exists(Field f, string pkg | + pkg = ["github.com/square/go-jose/v3", "gopkg.in/square/go-jose.v2"] + | + f.hasQualifiedName(pkg, ["Recipient", "SigningKey"], "Key") and + f.getAWrite().getRhs() = this + ) + } +} diff --git a/go/ql/src/Security/CWE-798/HardcodedCredentials.ql b/go/ql/src/Security/CWE-798/HardcodedCredentials.ql index 8ccb6521d38..418a0185aa3 100644 --- a/go/ql/src/Security/CWE-798/HardcodedCredentials.ql +++ b/go/ql/src/Security/CWE-798/HardcodedCredentials.ql @@ -14,6 +14,7 @@ */ import go +import semmle.go.security.HardcodedCredentials import semmle.go.security.SensitiveActions /** @@ -31,22 +32,35 @@ predicate isSensitive(DataFlow::Node sink, SensitiveExpr::Classification type) { ) } -from DataFlow::Node source, string message, DataFlow::Node sink, SensitiveExpr::Classification type -where +predicate sensitiveAssignment( + DataFlow::Node source, DataFlow::Node sink, SensitiveExpr::Classification type +) { exists(string val | val = source.getStringValue() and val != "" | - isSensitive(sink, type) and DataFlow::localFlow(source, sink) and + isSensitive(sink, type) and // allow obvious dummy/test values not PasswordHeuristics::isDummyPassword(val) and not sink.asExpr().(Ident).getName().regexpMatch(HeuristicNames::notSensitive()) - ) and + ) +} + +predicate hardcodedPrivateKey(DataFlow::Node node, SensitiveExpr::Classification type) { + node.getStringValue() + .regexpMatch("(?s)-+BEGIN\\b.*\\bPRIVATE KEY-+.+-+END\\b.*\\bPRIVATE KEY-+\n?") and + (node.asExpr() instanceof StringLit or node.asExpr() instanceof AddExpr) and + type = SensitiveExpr::certificate() +} + +from DataFlow::Node source, string message, DataFlow::Node sink, SensitiveExpr::Classification type +where + sensitiveAssignment(source, sink, type) and message = "Hard-coded $@." or - source - .getStringValue() - .regexpMatch("(?s)-+BEGIN\\b.*\\bPRIVATE KEY-+.+-+END\\b.*\\bPRIVATE KEY-+\n?") and - (source.asExpr() instanceof StringLit or source.asExpr() instanceof AddExpr) and - sink = source and - type = SensitiveExpr::certificate() and + hardcodedPrivateKey(source, type) and + source = sink and message = "Hard-coded private key." + or + HardcodedCredentials::Flow::flow(source, sink) and + type = SensitiveExpr::password() and + message = "Hard-coded credential." select sink, message, source, type.toString() diff --git a/go/ql/src/change-notes/2024-02-06-hardcoded-keys-promotion.md b/go/ql/src/change-notes/2024-02-06-hardcoded-keys-promotion.md new file mode 100644 index 00000000000..ea233583a13 --- /dev/null +++ b/go/ql/src/change-notes/2024-02-06-hardcoded-keys-promotion.md @@ -0,0 +1,4 @@ +--- +category: majorAnalysis +--- +* The query "Use of a hardcoded key for signing JWT" (`go/hardcoded-key`) has been promoted from experimental to the main query pack. Its results will now appear by default as part of `go/hardcoded-credentials`. This query was originally [submitted as an experimental query by @porcupineyhairs](https://github.com/github/codeql/pull/9378). diff --git a/go/ql/src/experimental/CWE-321/HardcodedKeys.qhelp b/go/ql/src/experimental/CWE-321/HardcodedKeys.qhelp deleted file mode 100644 index ddbb4572eae..00000000000 --- a/go/ql/src/experimental/CWE-321/HardcodedKeys.qhelp +++ /dev/null @@ -1,50 +0,0 @@ - - - -

    - A JSON Web Token (JWT) is used for authenticating and managing users in an application. -

    -

    - Using a hard-coded secret key for signing JWT tokens in open source projects - can leave the application using the token vulnerable to authentication bypasses. -

    - -

    - A JWT token is safe for enforcing authentication and access control as long as it can't be forged by a malicious actor. However, when a project exposes this secret publicly, these seemingly unforgeable tokens can now be easily forged. - Since the authentication as well as access control is typically enforced through these JWT tokens, an attacker armed with the secret can create a valid authentication token for any user and may even gain access to other privileged parts of the application. -

    - -
    - - -

    - Generating a cryptographically secure secret key during application initialization and using this generated key for future JWT signing requests can prevent this vulnerability. -

    - -
    - - -

    - The following code uses a hard-coded string as a secret for signing the tokens. In this case, an attacker can very easily forge a token by using the hard-coded secret. -

    - - - -
    - - -

    - In the following case, the application uses a programatically generated string as a secret for signing the tokens. In this case, since the secret can't be predicted, the code is secure. A function like `GenerateCryptoString` can be run to generate a secure secret key at the time of application installation/initialization. This generated key can then be used for all future signing requests. -

    - - - -
    - -
  • - CVE-2022-0664: - Use of Hard-coded Cryptographic Key in Go github.com/gravitl/netmaker prior to 0.8.5,0.9.4,0.10.0,0.10.1. -
  • -
    - -
    \ No newline at end of file diff --git a/go/ql/src/experimental/CWE-321/HardcodedKeys.ql b/go/ql/src/experimental/CWE-321/HardcodedKeys.ql deleted file mode 100644 index 9e51b1e2ae6..00000000000 --- a/go/ql/src/experimental/CWE-321/HardcodedKeys.ql +++ /dev/null @@ -1,19 +0,0 @@ -/** - * @name Use of a hardcoded key for signing JWT - * @description Using a fixed hardcoded key for signing JWT's can allow an attacker to compromise security. - * @kind path-problem - * @problem.severity error - * @id go/hardcoded-key - * @tags security - * experimental - * external/cwe/cwe-321 - */ - -import go -import HardcodedKeysLib -import HardcodedKeys::Flow::PathGraph - -from HardcodedKeys::Flow::PathNode source, HardcodedKeys::Flow::PathNode sink -where HardcodedKeys::Flow::flowPath(source, sink) -select sink.getNode(), source, sink, "$@ is used to sign a JWT token.", source.getNode(), - "Hardcoded String" diff --git a/go/ql/src/experimental/CWE-321/HardcodedKeysBad.go b/go/ql/src/experimental/CWE-321/HardcodedKeysBad.go deleted file mode 100644 index 1bdc1a1c1a4..00000000000 --- a/go/ql/src/experimental/CWE-321/HardcodedKeysBad.go +++ /dev/null @@ -1,15 +0,0 @@ -package main - -import "time" - -func bad() { - mySigningKey := []byte("AllYourBase") - - claims := &jwt.RegisteredClaims{ - ExpiresAt: jwt.NewNumericDate(time.Unix(1516239022, 0)), - Issuer: "test", - } - - token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) - ss, err := token.SignedString(mySigningKey) -} diff --git a/go/ql/src/experimental/CWE-321/HardcodedKeysGood.go b/go/ql/src/experimental/CWE-321/HardcodedKeysGood.go deleted file mode 100644 index 21328f9a7e8..00000000000 --- a/go/ql/src/experimental/CWE-321/HardcodedKeysGood.go +++ /dev/null @@ -1,31 +0,0 @@ -package main - -import ( - "math/big" - "time" -) - -func GenerateCryptoString(n int) (string, error) { - const chars = "123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-" - ret := make([]byte, n) - for i := range ret { - num, err := crand.Int(crand.Reader, big.NewInt(int64(len(chars)))) - if err != nil { - return "", err - } - ret[i] = chars[num.Int64()] - } - return string(ret), nil -} - -func good() { - mySigningKey := GenerateCryptoString(64) - - claims := &jwt.RegisteredClaims{ - ExpiresAt: jwt.NewNumericDate(time.Unix(1516239022, 0)), - Issuer: "test", - } - - token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) - ss, err := token.SignedString(mySigningKey) -} diff --git a/go/ql/src/experimental/CWE-321/HardcodedKeysLib.qll b/go/ql/src/experimental/CWE-321/HardcodedKeysLib.qll deleted file mode 100644 index 99aa37918a3..00000000000 --- a/go/ql/src/experimental/CWE-321/HardcodedKeysLib.qll +++ /dev/null @@ -1,389 +0,0 @@ -/** - * Provides default sources, sinks and sanitizers for reasoning about - * JWT token signing vulnerabilities as well as extension points - * for adding your own. - */ - -import go -import StringOps - -/** - * Provides default sources, sinks and sanitizers for reasoning about - * JWT token signing vulnerabilities as well as extension points - * for adding your own. - */ -module HardcodedKeys { - /** - * A data flow source for JWT token signing vulnerabilities. - */ - abstract class Source extends DataFlow::Node { } - - /** - * A data flow sink for JWT token signing vulnerabilities. - */ - abstract class Sink extends DataFlow::Node { } - - /** - * A sanitizer for JWT token signing vulnerabilities. - */ - abstract class Sanitizer extends DataFlow::Node { } - - private predicate isTestCode(Expr e) { - e.getFile().getAbsolutePath().toLowerCase().matches("%test%") and - not e.getFile().getAbsolutePath().toLowerCase().matches("%ql/test%") - } - - private predicate isDemoCode(Expr e) { - e.getFile().getAbsolutePath().toLowerCase().matches(["%mock%", "%demo%", "%example%"]) - } - - /** - * A hardcoded string literal as a source for JWT token signing vulnerabilities. - */ - private class HardcodedStringSource extends Source { - HardcodedStringSource() { - this.asExpr() instanceof StringLit and - not (isTestCode(this.asExpr()) or isDemoCode(this.asExpr())) - } - } - - /** - * An expression used to sign JWT tokens as a sink for JWT token signing vulnerabilities. - */ - private class GolangJwtSign extends Sink { - GolangJwtSign() { - exists(string pkg | - pkg = - [ - "github.com/golang-jwt/jwt/v4", "github.com/dgrijalva/jwt-go", - "github.com/form3tech-oss/jwt-go", "github.com/ory/fosite/token/jwt" - ] - | - exists(DataFlow::MethodCallNode m | - // Models the `SignedString` method - // `func (t *Token) SignedString(key interface{}) (string, error)` - m.getTarget().hasQualifiedName(pkg, "Token", "SignedString") and - this = m.getArgument(0) - or - // Model the `Sign` method of the `SigningMethod` interface - // type SigningMethod interface { - // Verify(signingString, signature string, key interface{}) error - // Sign(signingString string, key interface{}) (string, error) - // Alg() string - // } - m.getTarget().hasQualifiedName(pkg, "SigningMethod", "Sign") and - this = m.getArgument(1) - ) - ) - } - } - - private class KatarasJwt extends Sink { - KatarasJwt() { - exists(string pkg | - pkg = package("github.com/kataras/jwt", "") and - ( - exists(DataFlow::MethodCallNode m | - // Model the `Register` method of the type `Keys` - // func (keys Keys) Register(alg Alg, kid string, pubKey PublicKey, privKey PrivateKey) - m.getTarget().hasQualifiedName(pkg, "Keys", "Register") - | - this = m.getArgument(3) - ) - or - exists(DataFlow::CallNode m, string names | - // Model the `Sign` method of the `SigningMethod` interface - // func Sign(alg Alg, key PrivateKey, claims interface{}, opts ...SignOption) ([]byte, error) - // func SignEncrypted(alg Alg, key PrivateKey, encrypt InjectFunc, claims interface{}, ...) ([]byte, error) - // func SignEncryptedWithHeader(alg Alg, key PrivateKey, encrypt InjectFunc, claims interface{}, ...) ([]byte, error) - // func SignWithHeader(alg Alg, key PrivateKey, claims interface{}, customHeader interface{}, ...) ([]byte, error) - m.getTarget().hasQualifiedName(pkg, names) and - names = ["Sign", "SignEncrypted", "SignEncryptedWithHeader", "SignWithHeader"] - | - this = m.getArgument(1) - ) - ) - ) - } - } - - private class IrisJwt extends Sink { - IrisJwt() { - exists(string pkg | - pkg = "github.com/kataras/iris/v12/middleware/jwt" and - ( - exists(DataFlow::CallNode m | - //func NewSigner(signatureAlg Alg, signatureKey interface{}, maxAge time.Duration) *Signer - m.getTarget().hasQualifiedName(pkg, "NewSigner") - | - this = m.getArgument(1) - ) - or - exists(Field f | - // Models the `key` field of the `Signer` type - // https://github.com/kataras/iris/blob/dccd57263617f5ca95d7621acfadf9dd37752dd6/middleware/jwt/signer.go#L17 - f.hasQualifiedName(pkg, "Signer", "Key") and - f.getAWrite().getRhs() = this - ) - ) - ) - } - } - - private class GogfJwtSign extends Sink { - GogfJwtSign() { - exists(Field f, string pkg | - pkg = package("github.com/gogf/gf-jwt", "") and - // https://github.com/gogf/gf-jwt/blob/40503f05bc0a2bcd7aeba550163112afbb5c221f/auth_jwt.go#L27 - f.hasQualifiedName(pkg, "GfJWTMiddleware", "Key") and - f.getAWrite().getRhs() = this - ) - } - } - - private class GinJwtSign extends Sink { - GinJwtSign() { - exists(Field f | - // https://pkg.go.dev/github.com/appleboy/gin-jwt/v2#GinJWTMiddleware - f.hasQualifiedName("github.com/appleboy/gin-jwt/v2", "GinJWTMiddleware", "Key") and - f.getAWrite().getRhs() = this - ) - } - } - - private class SquareJoseKey extends Sink { - SquareJoseKey() { - exists(Field f, string pkg | - // type Recipient struct { - // Algorithm KeyAlgorithm - // Key interface{} - // KeyID string - // PBES2Count int - // PBES2Salt []byte - // } - // type SigningKey struct { - // Algorithm SignatureAlgorithm - // Key interface{} - // } - f.hasQualifiedName(pkg, ["Recipient", "SigningKey"], "Key") and - f.getAWrite().getRhs() = this - | - pkg = ["github.com/square/go-jose/v3", "gopkg.in/square/go-jose.v2"] - ) - } - } - - private class CrystalHqJwtSigner extends Sink { - CrystalHqJwtSigner() { - exists(DataFlow::CallNode m | - // `func NewSignerHS(alg Algorithm, key []byte) (Signer, error)` - m.getTarget().hasQualifiedName("github.com/cristalhq/jwt/v3", "NewSignerHS") - | - this = m.getArgument(1) - ) - } - } - - private class GoKitJwt extends Sink { - GoKitJwt() { - exists(DataFlow::CallNode m | - // `func NewSigner(kid string, key []byte, method jwt.SigningMethod, claims jwt.Claims) endpoint.Middleware` - m.getTarget().hasQualifiedName("github.com/go-kit/kit/auth/jwt", "NewSigner") - | - this = m.getArgument(1) - ) - } - } - - private class LestrratJwk extends Sink { - LestrratJwk() { - exists(DataFlow::CallNode m, string pkg | - pkg.matches([ - "github.com/lestrrat-go/jwx", "github.com/lestrrat/go-jwx/jwk", - "github.com/lestrrat-go/jwx%/jwk" - ]) and - // `func New(key interface{}) (Key, error)` - m.getTarget().hasQualifiedName(pkg, "New") - | - this = m.getArgument(0) - ) - } - } - - /** - * Sanitizes any other use of an operand to a comparison, on the assumption that this may filter - * out special constant values -- for example, in context `if key != "invalid_key" { ... }`, - * if `"invalid_key"` is indeed the only dangerous key then guarded uses of `key` are likely - * to be safe. - * - * TODO: Before promoting this query look at replacing this with something more principled. - */ - private class CompareExprSanitizer extends Sanitizer { - CompareExprSanitizer() { - exists(ComparisonExpr c | - c.getAnOperand().getGlobalValueNumber() = this.asExpr().getGlobalValueNumber() and - not this.asExpr() instanceof Literal - ) - } - } - - /** - * Marks anything returned with an error as a sanitized. - * - * Typically this means contexts like `return "", errors.New("Oh no")`, - * where we can be reasonably confident downstream users won't mistake - * that empty string for a usable key. - */ - private class ReturnedAlongsideErrorSanitizer extends Sanitizer { - ReturnedAlongsideErrorSanitizer() { - exists(ReturnStmt r, DataFlow::CallNode c | - c.getTarget().hasQualifiedName("errors", "New") and - r.getNumChild() > 1 and - r.getAChild() = c.getAResult().getASuccessor*().asExpr() and - r.getAChild() = this.asExpr() - ) - } - } - - /** - * Marks anything returned alongside an error-value that is known - * to be non-nil by virtue of a guarding check as harmless. - * - * For example, `if err != nil { return "", err }` is unlikely to be - * contributing a dangerous hardcoded key. - */ - private class ReturnedAlongsideErrorSanitizerGuard extends Sanitizer { - ReturnedAlongsideErrorSanitizerGuard() { - exists(ControlFlow::ConditionGuardNode guard, SsaWithFields errorVar, ReturnStmt r | - guard.ensuresNeq(errorVar.getAUse(), Builtin::nil().getARead()) and - guard.dominates(this.getBasicBlock()) and - r.getExpr(1) = errorVar.getAUse().asExpr() and - this.asExpr() = r.getExpr(0) - ) - } - } - - /** Mark any formatting string call as a sanitizer */ - private class FormattingSanitizer extends Sanitizer { - FormattingSanitizer() { exists(Formatting::StringFormatCall s | s.getAResult() = this) } - } - - private string getRandIntFunctionName() { - result = - [ - "ExpFloat64", "Float32", "Float64", "Int", "Int31", "Int31n", "Int63", "Int63n", "Intn", - "NormFloat64", "Uint32", "Uint64" - ] - } - - private DataFlow::CallNode getARandIntCall() { - result.getTarget().hasQualifiedName("math/rand", getRandIntFunctionName()) or - result.getTarget().(Method).hasQualifiedName("math/rand", "Rand", getRandIntFunctionName()) or - result.getTarget().hasQualifiedName("crypto/rand", "Int") - } - - private DataFlow::CallNode getARandReadCall() { - result.getTarget().hasQualifiedName("crypto/rand", "Read") - } - - /** - * Mark any taint arising from a read on a tainted slice with a random index as a - * sanitizer for all instances of the taint - */ - private class RandSliceSanitizer extends Sanitizer { - RandSliceSanitizer() { - exists(DataFlow::Node randomValue, DataFlow::Node index | - // Sanitize flows like this: - // func GenerateCryptoString(n int) (string, error) { - // const chars = "123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-" - // ret := make([]byte, n) - // for i := range ret { - // num, err := crand.Int(crand.Reader, big.NewInt(int64(len(chars)))) - // if err != nil { - // return "", err - // } - // ret[i] = chars[num.Int64()] - // } - // return string(ret), nil - // } - randomValue = getARandIntCall().getAResult() - or - // Sanitize flows like : - // func GenerateRandomString(size int) string { - // var bytes = make([]byte, size) - // rand.Read(bytes) - // for i, x := range bytes { - // bytes[i] = characters[x%byte(len(characters))] - // } - // return string(bytes) - // } - randomValue = - any(DataFlow::PostUpdateNode pun | - pun.getPreUpdateNode() = getARandReadCall().getArgument(0) - ) - | - TaintTracking::localTaint(randomValue, index) and - this.(DataFlow::ElementReadNode).reads(_, index) - ) - } - } - - /** - * Models flow from a call to `Int64` if the receiver is tainted - */ - private class BigIntFlow extends TaintTracking::FunctionModel { - BigIntFlow() { this.(Method).hasQualifiedName("math/big", "Int", "Int64") } - - override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) { - inp.isReceiver() and - outp.isResult(0) - } - } - - /* - * Models taint flow through a binary operation such as a - * modulo `%` operation or an addition `+` operation - */ - - private class BinExpAdditionalTaintStep extends TaintTracking::AdditionalTaintStep { - // This is required to model the sanitizers for the `HardcodedKeys` query. - // This is required to correctly detect a sanitizer such as the one shown below. - // func GenerateRandomString(size int) string { - // var bytes = make([]byte, size) - // rand.Read(bytes) - // for i, x := range bytes { - // bytes[i] = characters[x%byte(len(characters))] - // } - // return string(bytes) - // } - override predicate step(DataFlow::Node prev, DataFlow::Node succ) { - exists(BinaryExpr b | b.getAnOperand() = prev.asExpr() | succ.asExpr() = b) - } - } - - /** - * DEPRECATED: Use `Flow` instead. - * - * A configuration depicting taint flow for studying JWT token signing vulnerabilities. - */ - deprecated class Configuration extends TaintTracking::Configuration { - Configuration() { this = "Hard-coded JWT Signing Key" } - - override predicate isSource(DataFlow::Node source) { source instanceof Source } - - override predicate isSink(DataFlow::Node sink) { sink instanceof Sink } - - override predicate isSanitizer(DataFlow::Node sanitizer) { sanitizer instanceof Sanitizer } - } - - private module Config implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node source) { source instanceof Source } - - predicate isSink(DataFlow::Node sink) { sink instanceof Sink } - - predicate isBarrier(DataFlow::Node node) { node instanceof Sanitizer } - } - - /** Tracks taint flow for reasoning about JWT token signing vulnerabilities. */ - module Flow = TaintTracking::Global; -} diff --git a/go/ql/test/experimental/CWE-321/HardcodedKeys.expected b/go/ql/test/experimental/CWE-321/HardcodedKeys.expected deleted file mode 100644 index bcc40eacb23..00000000000 --- a/go/ql/test/experimental/CWE-321/HardcodedKeys.expected +++ /dev/null @@ -1,126 +0,0 @@ -edges -| HardcodedKeysBad.go:11:18:11:38 | type conversion | HardcodedKeysBad.go:19:28:19:39 | mySigningKey | provenance | | -| HardcodedKeysBad.go:11:25:11:37 | "AllYourBase" | HardcodedKeysBad.go:11:18:11:38 | type conversion | provenance | | -| main.go:33:18:33:31 | type conversion | main.go:42:28:42:39 | mySigningKey | provenance | | -| main.go:33:25:33:30 | "key1" | main.go:33:18:33:31 | type conversion | provenance | | -| main.go:50:23:50:28 | "key2" | main.go:50:16:50:29 | type conversion | provenance | | -| main.go:68:9:68:22 | type conversion | main.go:69:44:69:46 | key | provenance | | -| main.go:68:16:68:21 | `key3` | main.go:68:9:68:22 | type conversion | provenance | | -| main.go:73:9:73:22 | type conversion | main.go:74:66:74:68 | key | provenance | | -| main.go:73:16:73:21 | "key4" | main.go:73:9:73:22 | type conversion | provenance | | -| main.go:77:10:77:23 | type conversion | main.go:82:15:82:18 | key2 | provenance | | -| main.go:77:17:77:22 | "key5" | main.go:77:10:77:23 | type conversion | provenance | | -| main.go:88:9:88:22 | type conversion | main.go:92:41:92:43 | key | provenance | | -| main.go:88:16:88:21 | "key6" | main.go:88:9:88:22 | type conversion | provenance | | -| main.go:97:10:97:23 | type conversion | main.go:99:66:99:69 | key2 | provenance | | -| main.go:97:17:97:22 | "key7" | main.go:97:10:97:23 | type conversion | provenance | | -| main.go:105:9:105:22 | type conversion | main.go:110:30:110:32 | key | provenance | | -| main.go:105:16:105:21 | "key8" | main.go:105:9:105:22 | type conversion | provenance | | -| main.go:114:15:114:28 | type conversion | main.go:115:16:115:24 | sharedKey | provenance | | -| main.go:114:22:114:27 | "key9" | main.go:114:15:114:28 | type conversion | provenance | | -| main.go:118:23:118:37 | type conversion | main.go:121:16:121:30 | sharedKeyglobal | provenance | | -| main.go:118:30:118:36 | "key10" | main.go:118:23:118:37 | type conversion | provenance | | -| main.go:127:27:127:33 | "key11" | main.go:127:20:127:34 | type conversion | provenance | | -| main.go:142:14:142:28 | type conversion | main.go:144:39:144:46 | mySecret | provenance | | -| main.go:142:21:142:27 | "key12" | main.go:142:14:142:28 | type conversion | provenance | | -| main.go:149:14:149:28 | type conversion | main.go:153:11:153:18 | mySecret | provenance | | -| main.go:149:21:149:27 | "key13" | main.go:149:14:149:28 | type conversion | provenance | | -| main.go:160:12:160:26 | type conversion | main.go:161:34:161:39 | secret | provenance | | -| main.go:160:19:160:25 | "key14" | main.go:160:12:160:26 | type conversion | provenance | | -| main.go:166:12:166:26 | type conversion | main.go:167:32:167:37 | secret | provenance | | -| main.go:166:19:166:25 | "key15" | main.go:166:12:166:26 | type conversion | provenance | | -| main.go:172:12:172:26 | type conversion | main.go:173:41:173:46 | secret | provenance | | -| main.go:172:19:172:25 | "key16" | main.go:172:12:172:26 | type conversion | provenance | | -| main.go:178:12:178:26 | type conversion | main.go:179:51:179:56 | secret | provenance | | -| main.go:178:19:178:25 | "key17" | main.go:178:12:178:26 | type conversion | provenance | | -| main.go:184:12:184:26 | type conversion | main.go:185:42:185:47 | secret | provenance | | -| main.go:184:19:184:25 | "key18" | main.go:184:12:184:26 | type conversion | provenance | | -| main.go:190:12:190:26 | type conversion | main.go:193:33:193:38 | secret | provenance | | -| main.go:190:19:190:25 | "key19" | main.go:190:12:190:26 | type conversion | provenance | | -| sanitizer.go:17:9:17:21 | type conversion | sanitizer.go:18:44:18:46 | key | provenance | | -| sanitizer.go:17:16:17:20 | `key` | sanitizer.go:17:9:17:21 | type conversion | provenance | | -nodes -| HardcodedKeysBad.go:11:18:11:38 | type conversion | semmle.label | type conversion | -| HardcodedKeysBad.go:11:25:11:37 | "AllYourBase" | semmle.label | "AllYourBase" | -| HardcodedKeysBad.go:19:28:19:39 | mySigningKey | semmle.label | mySigningKey | -| main.go:33:18:33:31 | type conversion | semmle.label | type conversion | -| main.go:33:25:33:30 | "key1" | semmle.label | "key1" | -| main.go:42:28:42:39 | mySigningKey | semmle.label | mySigningKey | -| main.go:50:16:50:29 | type conversion | semmle.label | type conversion | -| main.go:50:23:50:28 | "key2" | semmle.label | "key2" | -| main.go:68:9:68:22 | type conversion | semmle.label | type conversion | -| main.go:68:16:68:21 | `key3` | semmle.label | `key3` | -| main.go:69:44:69:46 | key | semmle.label | key | -| main.go:73:9:73:22 | type conversion | semmle.label | type conversion | -| main.go:73:16:73:21 | "key4" | semmle.label | "key4" | -| main.go:74:66:74:68 | key | semmle.label | key | -| main.go:77:10:77:23 | type conversion | semmle.label | type conversion | -| main.go:77:17:77:22 | "key5" | semmle.label | "key5" | -| main.go:82:15:82:18 | key2 | semmle.label | key2 | -| main.go:88:9:88:22 | type conversion | semmle.label | type conversion | -| main.go:88:16:88:21 | "key6" | semmle.label | "key6" | -| main.go:92:41:92:43 | key | semmle.label | key | -| main.go:97:10:97:23 | type conversion | semmle.label | type conversion | -| main.go:97:17:97:22 | "key7" | semmle.label | "key7" | -| main.go:99:66:99:69 | key2 | semmle.label | key2 | -| main.go:105:9:105:22 | type conversion | semmle.label | type conversion | -| main.go:105:16:105:21 | "key8" | semmle.label | "key8" | -| main.go:110:30:110:32 | key | semmle.label | key | -| main.go:114:15:114:28 | type conversion | semmle.label | type conversion | -| main.go:114:22:114:27 | "key9" | semmle.label | "key9" | -| main.go:115:16:115:24 | sharedKey | semmle.label | sharedKey | -| main.go:118:23:118:37 | type conversion | semmle.label | type conversion | -| main.go:118:30:118:36 | "key10" | semmle.label | "key10" | -| main.go:121:16:121:30 | sharedKeyglobal | semmle.label | sharedKeyglobal | -| main.go:127:20:127:34 | type conversion | semmle.label | type conversion | -| main.go:127:27:127:33 | "key11" | semmle.label | "key11" | -| main.go:142:14:142:28 | type conversion | semmle.label | type conversion | -| main.go:142:21:142:27 | "key12" | semmle.label | "key12" | -| main.go:144:39:144:46 | mySecret | semmle.label | mySecret | -| main.go:149:14:149:28 | type conversion | semmle.label | type conversion | -| main.go:149:21:149:27 | "key13" | semmle.label | "key13" | -| main.go:153:11:153:18 | mySecret | semmle.label | mySecret | -| main.go:160:12:160:26 | type conversion | semmle.label | type conversion | -| main.go:160:19:160:25 | "key14" | semmle.label | "key14" | -| main.go:161:34:161:39 | secret | semmle.label | secret | -| main.go:166:12:166:26 | type conversion | semmle.label | type conversion | -| main.go:166:19:166:25 | "key15" | semmle.label | "key15" | -| main.go:167:32:167:37 | secret | semmle.label | secret | -| main.go:172:12:172:26 | type conversion | semmle.label | type conversion | -| main.go:172:19:172:25 | "key16" | semmle.label | "key16" | -| main.go:173:41:173:46 | secret | semmle.label | secret | -| main.go:178:12:178:26 | type conversion | semmle.label | type conversion | -| main.go:178:19:178:25 | "key17" | semmle.label | "key17" | -| main.go:179:51:179:56 | secret | semmle.label | secret | -| main.go:184:12:184:26 | type conversion | semmle.label | type conversion | -| main.go:184:19:184:25 | "key18" | semmle.label | "key18" | -| main.go:185:42:185:47 | secret | semmle.label | secret | -| main.go:190:12:190:26 | type conversion | semmle.label | type conversion | -| main.go:190:19:190:25 | "key19" | semmle.label | "key19" | -| main.go:193:33:193:38 | secret | semmle.label | secret | -| sanitizer.go:17:9:17:21 | type conversion | semmle.label | type conversion | -| sanitizer.go:17:16:17:20 | `key` | semmle.label | `key` | -| sanitizer.go:18:44:18:46 | key | semmle.label | key | -subpaths -#select -| HardcodedKeysBad.go:19:28:19:39 | mySigningKey | HardcodedKeysBad.go:11:25:11:37 | "AllYourBase" | HardcodedKeysBad.go:19:28:19:39 | mySigningKey | $@ is used to sign a JWT token. | HardcodedKeysBad.go:11:25:11:37 | "AllYourBase" | Hardcoded String | -| main.go:42:28:42:39 | mySigningKey | main.go:33:25:33:30 | "key1" | main.go:42:28:42:39 | mySigningKey | $@ is used to sign a JWT token. | main.go:33:25:33:30 | "key1" | Hardcoded String | -| main.go:50:16:50:29 | type conversion | main.go:50:23:50:28 | "key2" | main.go:50:16:50:29 | type conversion | $@ is used to sign a JWT token. | main.go:50:23:50:28 | "key2" | Hardcoded String | -| main.go:69:44:69:46 | key | main.go:68:16:68:21 | `key3` | main.go:69:44:69:46 | key | $@ is used to sign a JWT token. | main.go:68:16:68:21 | `key3` | Hardcoded String | -| main.go:74:66:74:68 | key | main.go:73:16:73:21 | "key4" | main.go:74:66:74:68 | key | $@ is used to sign a JWT token. | main.go:73:16:73:21 | "key4" | Hardcoded String | -| main.go:82:15:82:18 | key2 | main.go:77:17:77:22 | "key5" | main.go:82:15:82:18 | key2 | $@ is used to sign a JWT token. | main.go:77:17:77:22 | "key5" | Hardcoded String | -| main.go:92:41:92:43 | key | main.go:88:16:88:21 | "key6" | main.go:92:41:92:43 | key | $@ is used to sign a JWT token. | main.go:88:16:88:21 | "key6" | Hardcoded String | -| main.go:99:66:99:69 | key2 | main.go:97:17:97:22 | "key7" | main.go:99:66:99:69 | key2 | $@ is used to sign a JWT token. | main.go:97:17:97:22 | "key7" | Hardcoded String | -| main.go:110:30:110:32 | key | main.go:105:16:105:21 | "key8" | main.go:110:30:110:32 | key | $@ is used to sign a JWT token. | main.go:105:16:105:21 | "key8" | Hardcoded String | -| main.go:115:16:115:24 | sharedKey | main.go:114:22:114:27 | "key9" | main.go:115:16:115:24 | sharedKey | $@ is used to sign a JWT token. | main.go:114:22:114:27 | "key9" | Hardcoded String | -| main.go:121:16:121:30 | sharedKeyglobal | main.go:118:30:118:36 | "key10" | main.go:121:16:121:30 | sharedKeyglobal | $@ is used to sign a JWT token. | main.go:118:30:118:36 | "key10" | Hardcoded String | -| main.go:127:20:127:34 | type conversion | main.go:127:27:127:33 | "key11" | main.go:127:20:127:34 | type conversion | $@ is used to sign a JWT token. | main.go:127:27:127:33 | "key11" | Hardcoded String | -| main.go:144:39:144:46 | mySecret | main.go:142:21:142:27 | "key12" | main.go:144:39:144:46 | mySecret | $@ is used to sign a JWT token. | main.go:142:21:142:27 | "key12" | Hardcoded String | -| main.go:153:11:153:18 | mySecret | main.go:149:21:149:27 | "key13" | main.go:153:11:153:18 | mySecret | $@ is used to sign a JWT token. | main.go:149:21:149:27 | "key13" | Hardcoded String | -| main.go:161:34:161:39 | secret | main.go:160:19:160:25 | "key14" | main.go:161:34:161:39 | secret | $@ is used to sign a JWT token. | main.go:160:19:160:25 | "key14" | Hardcoded String | -| main.go:167:32:167:37 | secret | main.go:166:19:166:25 | "key15" | main.go:167:32:167:37 | secret | $@ is used to sign a JWT token. | main.go:166:19:166:25 | "key15" | Hardcoded String | -| main.go:173:41:173:46 | secret | main.go:172:19:172:25 | "key16" | main.go:173:41:173:46 | secret | $@ is used to sign a JWT token. | main.go:172:19:172:25 | "key16" | Hardcoded String | -| main.go:179:51:179:56 | secret | main.go:178:19:178:25 | "key17" | main.go:179:51:179:56 | secret | $@ is used to sign a JWT token. | main.go:178:19:178:25 | "key17" | Hardcoded String | -| main.go:185:42:185:47 | secret | main.go:184:19:184:25 | "key18" | main.go:185:42:185:47 | secret | $@ is used to sign a JWT token. | main.go:184:19:184:25 | "key18" | Hardcoded String | -| main.go:193:33:193:38 | secret | main.go:190:19:190:25 | "key19" | main.go:193:33:193:38 | secret | $@ is used to sign a JWT token. | main.go:190:19:190:25 | "key19" | Hardcoded String | -| sanitizer.go:18:44:18:46 | key | sanitizer.go:17:16:17:20 | `key` | sanitizer.go:18:44:18:46 | key | $@ is used to sign a JWT token. | sanitizer.go:17:16:17:20 | `key` | Hardcoded String | diff --git a/go/ql/test/experimental/CWE-321/HardcodedKeys.qlref b/go/ql/test/experimental/CWE-321/HardcodedKeys.qlref deleted file mode 100644 index 83c71d75ae9..00000000000 --- a/go/ql/test/experimental/CWE-321/HardcodedKeys.qlref +++ /dev/null @@ -1 +0,0 @@ -experimental/CWE-321/HardcodedKeys.ql \ No newline at end of file diff --git a/go/ql/test/query-tests/Security/CWE-798/HardcodedCredentials.expected b/go/ql/test/query-tests/Security/CWE-798/HardcodedCredentials.expected index eb4c265aac0..3896a6167b0 100644 --- a/go/ql/test/query-tests/Security/CWE-798/HardcodedCredentials.expected +++ b/go/ql/test/query-tests/Security/CWE-798/HardcodedCredentials.expected @@ -1,7 +1,28 @@ | AlertSuppressionExample.go:11:14:11:40 | "horsebatterystaplecorrect" | Hard-coded $@. | AlertSuppressionExample.go:11:14:11:40 | "horsebatterystaplecorrect" | password | | HardcodedCredentials.go:10:13:10:28 | "s3cretp4ssword" | Hard-coded $@. | HardcodedCredentials.go:10:13:10:28 | "s3cretp4ssword" | password | +| HardcodedKeysBad.go:19:28:19:39 | mySigningKey | Hard-coded credential. | HardcodedKeysBad.go:11:25:11:37 | "AllYourBase" | password | +| jwt.go:42:28:42:39 | mySigningKey | Hard-coded credential. | jwt.go:33:25:33:30 | "key1" | password | +| jwt.go:49:16:49:29 | type conversion | Hard-coded credential. | jwt.go:49:23:49:28 | "key2" | password | +| jwt.go:68:44:68:46 | key | Hard-coded credential. | jwt.go:67:16:67:21 | `key3` | password | +| jwt.go:73:66:73:68 | key | Hard-coded credential. | jwt.go:72:16:72:21 | "key4" | password | +| jwt.go:81:15:81:18 | key2 | Hard-coded credential. | jwt.go:76:17:76:22 | "key5" | password | +| jwt.go:91:41:91:43 | key | Hard-coded credential. | jwt.go:87:16:87:21 | "key6" | password | +| jwt.go:98:66:98:69 | key2 | Hard-coded credential. | jwt.go:96:17:96:22 | "key7" | password | +| jwt.go:109:30:109:32 | key | Hard-coded credential. | jwt.go:104:16:104:21 | "key8" | password | +| jwt.go:114:16:114:24 | sharedKey | Hard-coded credential. | jwt.go:113:22:113:27 | "key9" | password | +| jwt.go:120:16:120:30 | sharedKeyglobal | Hard-coded credential. | jwt.go:117:30:117:36 | "key10" | password | +| jwt.go:126:20:126:34 | type conversion | Hard-coded credential. | jwt.go:126:27:126:33 | "key11" | password | +| jwt.go:143:39:143:46 | safeName | Hard-coded credential. | jwt.go:141:21:141:27 | "key12" | password | +| jwt.go:152:11:152:18 | safeName | Hard-coded credential. | jwt.go:148:21:148:27 | "key13" | password | +| jwt.go:160:34:160:41 | safeName | Hard-coded credential. | jwt.go:159:21:159:27 | "key14" | password | +| jwt.go:166:32:166:39 | safeName | Hard-coded credential. | jwt.go:165:21:165:27 | "key15" | password | +| jwt.go:172:41:172:48 | safeName | Hard-coded credential. | jwt.go:171:21:171:27 | "key16" | password | +| jwt.go:178:51:178:58 | safeName | Hard-coded credential. | jwt.go:177:21:177:27 | "key17" | password | +| jwt.go:184:42:184:49 | safeName | Hard-coded credential. | jwt.go:183:21:183:27 | "key18" | password | +| jwt.go:192:33:192:40 | safeName | Hard-coded credential. | jwt.go:189:21:189:27 | "key19" | password | | main.go:6:14:6:23 | "p4ssw0rd" | Hard-coded $@. | main.go:6:14:6:23 | "p4ssw0rd" | password | | main.go:12:1:26:30 | `-----BEGIN RSA PRIVATE KEY-----\nMIICXQIBAAKBgQC/tzdtXKXcX6F3v3hR6+uYyZpIeXhhLflJkY2eILLQfAnwKlT5\nxIHW5QZcHQV9sCyZ8qSdPGif7PwgMbButMbByiZhCSugUFb6vjVqoktmslYF4LKH\niDgvmlwuJW0TvynxBLzDCwrRP+gpRT8wuAortWAx/03POTw7Mzi2cIPNsQIDAQAB\nAoGAMHCrqY9CPTdQhgAz94cDpTwzJmLCvtMt7J/BR5X9eF4O6MbZZ652HAUMIVQX\n4hUUf+VmIHB2AwqO/ddwO9ijaz04BslOSy/iYevHGlH65q4587NSlFWjvILMIQCM\nGBjfzJIxlLHVhjc2cFnyAE5YWjF/OMnJN0OhP9pxmCP/iM0CQQDxmQndQLdnV7+6\n8SvBHE8bg1LE8/BzTt68U3aWwiBjrHMFgzr//7Za4VF7h4ilFgmbh0F3sYz+C8iO\n0JrBRPeLAkEAyyTwnv/pgqTS/wuxIHUxRBpbdk3YvILAthNrGQg5uzA7eSeFu7Mv\nGtEkXsaqCDbdehgarFfNN8PB6OMRIbsXMwJBAOjhH8UJ0L/osYO9XPO0GfznRS1c\nBnbfm4vk1/bSAO6TF/xEVubU0i4f6q8sIecfqvskEVMS7lkjeptPMR0DIakCQE+7\nuQH/Wizf+r0GXshplyOu4LVHisk63N7aMlAJ7XbuUHmWLKRmiReSfR8CBNzig/2X\nFmkMsUyw9hwte5zsrQcCQQCrOkZvzUj9j1HKG+32EJ2E4kisJZmAgF9GI+z6oxpi\nExped5tp8EWytCjRwKhOcc0068SgaqhKvyyUWpbx32VQ\n-----END RSA PRIVATE KEY-----` | Hard-coded private key. | main.go:12:1:26:30 | `-----BEGIN RSA PRIVATE KEY-----\nMIICXQIBAAKBgQC/tzdtXKXcX6F3v3hR6+uYyZpIeXhhLflJkY2eILLQfAnwKlT5\nxIHW5QZcHQV9sCyZ8qSdPGif7PwgMbButMbByiZhCSugUFb6vjVqoktmslYF4LKH\niDgvmlwuJW0TvynxBLzDCwrRP+gpRT8wuAortWAx/03POTw7Mzi2cIPNsQIDAQAB\nAoGAMHCrqY9CPTdQhgAz94cDpTwzJmLCvtMt7J/BR5X9eF4O6MbZZ652HAUMIVQX\n4hUUf+VmIHB2AwqO/ddwO9ijaz04BslOSy/iYevHGlH65q4587NSlFWjvILMIQCM\nGBjfzJIxlLHVhjc2cFnyAE5YWjF/OMnJN0OhP9pxmCP/iM0CQQDxmQndQLdnV7+6\n8SvBHE8bg1LE8/BzTt68U3aWwiBjrHMFgzr//7Za4VF7h4ilFgmbh0F3sYz+C8iO\n0JrBRPeLAkEAyyTwnv/pgqTS/wuxIHUxRBpbdk3YvILAthNrGQg5uzA7eSeFu7Mv\nGtEkXsaqCDbdehgarFfNN8PB6OMRIbsXMwJBAOjhH8UJ0L/osYO9XPO0GfznRS1c\nBnbfm4vk1/bSAO6TF/xEVubU0i4f6q8sIecfqvskEVMS7lkjeptPMR0DIakCQE+7\nuQH/Wizf+r0GXshplyOu4LVHisk63N7aMlAJ7XbuUHmWLKRmiReSfR8CBNzig/2X\nFmkMsUyw9hwte5zsrQcCQQCrOkZvzUj9j1HKG+32EJ2E4kisJZmAgF9GI+z6oxpi\nExped5tp8EWytCjRwKhOcc0068SgaqhKvyyUWpbx32VQ\n-----END RSA PRIVATE KEY-----` | certificate | | main.go:44:14:44:19 | "p4ss" | Hard-coded $@. | main.go:44:14:44:19 | "p4ss" | password | | main.go:48:13:48:15 | tmp | Hard-coded $@. | main.go:44:14:44:19 | "p4ss" | password | | main.go:50:15:50:21 | "p4ss2" | Hard-coded $@. | main.go:50:15:50:21 | "p4ss2" | password | +| sanitizer.go:18:44:18:46 | key | Hard-coded credential. | sanitizer.go:17:16:17:20 | `key` | password | diff --git a/go/ql/test/experimental/CWE-321/HardcodedKeysBad.go b/go/ql/test/query-tests/Security/CWE-798/HardcodedKeysBad.go similarity index 100% rename from go/ql/test/experimental/CWE-321/HardcodedKeysBad.go rename to go/ql/test/query-tests/Security/CWE-798/HardcodedKeysBad.go diff --git a/go/ql/test/experimental/CWE-321/HardcodedKeysGood.go b/go/ql/test/query-tests/Security/CWE-798/HardcodedKeysGood.go similarity index 100% rename from go/ql/test/experimental/CWE-321/HardcodedKeysGood.go rename to go/ql/test/query-tests/Security/CWE-798/HardcodedKeysGood.go diff --git a/go/ql/test/experimental/CWE-321/go.mod b/go/ql/test/query-tests/Security/CWE-798/go.mod similarity index 100% rename from go/ql/test/experimental/CWE-321/go.mod rename to go/ql/test/query-tests/Security/CWE-798/go.mod diff --git a/go/ql/test/experimental/CWE-321/main.go b/go/ql/test/query-tests/Security/CWE-798/jwt.go similarity index 86% rename from go/ql/test/experimental/CWE-321/main.go rename to go/ql/test/query-tests/Security/CWE-798/jwt.go index d18dbf77203..e5f01747d38 100644 --- a/go/ql/test/experimental/CWE-321/main.go +++ b/go/ql/test/query-tests/Security/CWE-798/jwt.go @@ -44,7 +44,6 @@ func gjwtt() (interface{}, error) { func gin_jwt() (interface{}, error) { var identityKey = "id" - // authMiddleware, err := return jwt.New(&jwt.GinJWTMiddleware{ Realm: "test zone", Key: []byte("key2"), // BAD @@ -124,7 +123,7 @@ func lejwt2() (interface{}, error) { func gogfjwt() interface{} { return &gogf.GfJWTMiddleware{ Realm: "test zone", - Key: []byte("key11"), + Key: []byte("key11"), // BAD Timeout: time.Minute * 5, MaxRefresh: time.Minute * 5, IdentityKey: "id", @@ -139,58 +138,58 @@ func gogfjwt() interface{} { } func irisjwt() interface{} { - mySecret := []byte("key12") + safeName := []byte("key12") token := iris.NewTokenWithClaims(nil, nil) - tokenString, _ := token.SignedString(mySecret) + tokenString, _ := token.SignedString(safeName) // BAD return tokenString } func iris12jwt2() interface{} { - mySecret := []byte("key13") + safeName := []byte("key13") s := &iris12.Signer{ Alg: nil, - Key: mySecret, + Key: safeName, // BAD MaxAge: 3 * time.Second, } return s } func irisjwt3() interface{} { - secret := []byte("key14") - signer := iris12.NewSigner(nil, secret, 3*time.Second) + safeName := []byte("key14") + signer := iris12.NewSigner(nil, safeName, 3*time.Second) // BAD return signer } func katarasJwt() interface{} { - secret := []byte("key15") - token, _ := kataras.Sign(nil, secret, nil, nil) + safeName := []byte("key15") + token, _ := kataras.Sign(nil, safeName, nil, nil) // BAD return token } func katarasJwt2() interface{} { - secret := []byte("key16") - token, _ := kataras.SignEncrypted(nil, secret, nil, nil) + safeName := []byte("key16") + token, _ := kataras.SignEncrypted(nil, safeName, nil, nil) // BAD return token } func katarasJwt3() interface{} { - secret := []byte("key17") - token, _ := kataras.SignEncryptedWithHeader(nil, secret, nil, nil, nil) + safeName := []byte("key17") + token, _ := kataras.SignEncryptedWithHeader(nil, safeName, nil, nil, nil) // BAD return token } func katarasJwt4() interface{} { - secret := []byte("key18") - token, _ := kataras.SignWithHeader(nil, secret, nil, nil) + safeName := []byte("key18") + token, _ := kataras.SignWithHeader(nil, safeName, nil, nil) // BAD return token } func katarasJwt5() { - secret := []byte("key19") + safeName := []byte("key19") var keys kataras.Keys var alg kataras.Alg - keys.Register(alg, "api", nil, secret) + keys.Register(alg, "api", nil, safeName) // BAD } func main() { diff --git a/go/ql/test/experimental/CWE-321/sanitizer.go b/go/ql/test/query-tests/Security/CWE-798/sanitizer.go similarity index 100% rename from go/ql/test/experimental/CWE-321/sanitizer.go rename to go/ql/test/query-tests/Security/CWE-798/sanitizer.go diff --git a/go/ql/test/experimental/CWE-321/vendor/github.com/appleboy/gin-jwt/v2/stub.go b/go/ql/test/query-tests/Security/CWE-798/vendor/github.com/appleboy/gin-jwt/v2/stub.go similarity index 100% rename from go/ql/test/experimental/CWE-321/vendor/github.com/appleboy/gin-jwt/v2/stub.go rename to go/ql/test/query-tests/Security/CWE-798/vendor/github.com/appleboy/gin-jwt/v2/stub.go diff --git a/go/ql/test/experimental/CWE-321/vendor/github.com/cristalhq/jwt/v3/stub.go b/go/ql/test/query-tests/Security/CWE-798/vendor/github.com/cristalhq/jwt/v3/stub.go similarity index 100% rename from go/ql/test/experimental/CWE-321/vendor/github.com/cristalhq/jwt/v3/stub.go rename to go/ql/test/query-tests/Security/CWE-798/vendor/github.com/cristalhq/jwt/v3/stub.go diff --git a/go/ql/test/experimental/CWE-321/vendor/github.com/gin-gonic/gin/stub.go b/go/ql/test/query-tests/Security/CWE-798/vendor/github.com/gin-gonic/gin/stub.go similarity index 100% rename from go/ql/test/experimental/CWE-321/vendor/github.com/gin-gonic/gin/stub.go rename to go/ql/test/query-tests/Security/CWE-798/vendor/github.com/gin-gonic/gin/stub.go diff --git a/go/ql/test/experimental/CWE-321/vendor/github.com/go-kit/kit/auth/jwt/stub.go b/go/ql/test/query-tests/Security/CWE-798/vendor/github.com/go-kit/kit/auth/jwt/stub.go similarity index 100% rename from go/ql/test/experimental/CWE-321/vendor/github.com/go-kit/kit/auth/jwt/stub.go rename to go/ql/test/query-tests/Security/CWE-798/vendor/github.com/go-kit/kit/auth/jwt/stub.go diff --git a/go/ql/test/experimental/CWE-321/vendor/github.com/gogf/gf-jwt/v2/stub.go b/go/ql/test/query-tests/Security/CWE-798/vendor/github.com/gogf/gf-jwt/v2/stub.go similarity index 100% rename from go/ql/test/experimental/CWE-321/vendor/github.com/gogf/gf-jwt/v2/stub.go rename to go/ql/test/query-tests/Security/CWE-798/vendor/github.com/gogf/gf-jwt/v2/stub.go diff --git a/go/ql/test/experimental/CWE-321/vendor/github.com/golang-jwt/jwt/v4/stub.go b/go/ql/test/query-tests/Security/CWE-798/vendor/github.com/golang-jwt/jwt/v4/stub.go similarity index 100% rename from go/ql/test/experimental/CWE-321/vendor/github.com/golang-jwt/jwt/v4/stub.go rename to go/ql/test/query-tests/Security/CWE-798/vendor/github.com/golang-jwt/jwt/v4/stub.go diff --git a/go/ql/test/experimental/CWE-321/vendor/github.com/iris-contrib/middleware/jwt/stub.go b/go/ql/test/query-tests/Security/CWE-798/vendor/github.com/iris-contrib/middleware/jwt/stub.go similarity index 100% rename from go/ql/test/experimental/CWE-321/vendor/github.com/iris-contrib/middleware/jwt/stub.go rename to go/ql/test/query-tests/Security/CWE-798/vendor/github.com/iris-contrib/middleware/jwt/stub.go diff --git a/go/ql/test/experimental/CWE-321/vendor/github.com/kataras/iris/v12/middleware/jwt/stub.go b/go/ql/test/query-tests/Security/CWE-798/vendor/github.com/kataras/iris/v12/middleware/jwt/stub.go similarity index 100% rename from go/ql/test/experimental/CWE-321/vendor/github.com/kataras/iris/v12/middleware/jwt/stub.go rename to go/ql/test/query-tests/Security/CWE-798/vendor/github.com/kataras/iris/v12/middleware/jwt/stub.go diff --git a/go/ql/test/experimental/CWE-321/vendor/github.com/kataras/jwt/stub.go b/go/ql/test/query-tests/Security/CWE-798/vendor/github.com/kataras/jwt/stub.go similarity index 100% rename from go/ql/test/experimental/CWE-321/vendor/github.com/kataras/jwt/stub.go rename to go/ql/test/query-tests/Security/CWE-798/vendor/github.com/kataras/jwt/stub.go diff --git a/go/ql/test/experimental/CWE-321/vendor/github.com/lestrrat/go-jwx/jwk/stub.go b/go/ql/test/query-tests/Security/CWE-798/vendor/github.com/lestrrat/go-jwx/jwk/stub.go similarity index 100% rename from go/ql/test/experimental/CWE-321/vendor/github.com/lestrrat/go-jwx/jwk/stub.go rename to go/ql/test/query-tests/Security/CWE-798/vendor/github.com/lestrrat/go-jwx/jwk/stub.go diff --git a/go/ql/test/experimental/CWE-321/vendor/github.com/square/go-jose/v3/stub.go b/go/ql/test/query-tests/Security/CWE-798/vendor/github.com/square/go-jose/v3/stub.go similarity index 100% rename from go/ql/test/experimental/CWE-321/vendor/github.com/square/go-jose/v3/stub.go rename to go/ql/test/query-tests/Security/CWE-798/vendor/github.com/square/go-jose/v3/stub.go diff --git a/go/ql/test/experimental/CWE-321/vendor/gopkg.in/square/go-jose.v2/stub.go b/go/ql/test/query-tests/Security/CWE-798/vendor/gopkg.in/square/go-jose.v2/stub.go similarity index 100% rename from go/ql/test/experimental/CWE-321/vendor/gopkg.in/square/go-jose.v2/stub.go rename to go/ql/test/query-tests/Security/CWE-798/vendor/gopkg.in/square/go-jose.v2/stub.go diff --git a/go/ql/test/experimental/CWE-321/vendor/modules.txt b/go/ql/test/query-tests/Security/CWE-798/vendor/modules.txt similarity index 100% rename from go/ql/test/experimental/CWE-321/vendor/modules.txt rename to go/ql/test/query-tests/Security/CWE-798/vendor/modules.txt From 750c8085cbaa4cc38d37ed36092d0869b172ffaf Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Tue, 6 Feb 2024 16:16:47 +0100 Subject: [PATCH 211/378] Remove duplicated main from tests --- go/ql/test/query-tests/Security/CWE-798/jwt.go | 4 ---- 1 file changed, 4 deletions(-) diff --git a/go/ql/test/query-tests/Security/CWE-798/jwt.go b/go/ql/test/query-tests/Security/CWE-798/jwt.go index e5f01747d38..1ff61114466 100644 --- a/go/ql/test/query-tests/Security/CWE-798/jwt.go +++ b/go/ql/test/query-tests/Security/CWE-798/jwt.go @@ -191,7 +191,3 @@ func katarasJwt5() { var alg kataras.Alg keys.Register(alg, "api", nil, safeName) // BAD } - -func main() { - return -} From 84d1d72497cbe4f51fc72f6e658f9703755a1d90 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Wed, 14 Feb 2024 09:47:36 +0100 Subject: [PATCH 212/378] Apply suggestions from code review Co-authored-by: Chris Smowton --- go/ql/lib/semmle/go/security/HardcodedCredentials.qll | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/go/ql/lib/semmle/go/security/HardcodedCredentials.qll b/go/ql/lib/semmle/go/security/HardcodedCredentials.qll index 9df3425b2a5..eaa333fa76c 100644 --- a/go/ql/lib/semmle/go/security/HardcodedCredentials.qll +++ b/go/ql/lib/semmle/go/security/HardcodedCredentials.qll @@ -47,7 +47,7 @@ module HardcodedCredentials { /** * Holds if the guard `g` in its branch `branch` validates the expression `e` - * by comparing it to a disallowed literal. + * by comparing it to a literal. */ private predicate constantValueCheck(DataFlow::Node g, Expr e, boolean branch) { exists(Literal lit, DataFlow::EqualityTestNode eq | eq = g | @@ -59,7 +59,7 @@ module HardcodedCredentials { } /** - * A value validated by comparing it to a disallowed constant value. + * A value validated by comparing it to a constant value. * For example, in the context `if key != "invalid_key" { ... }`, * if `"invalid_key"` is indeed the only dangerous key then guarded uses of `key` are likely * to be safe. From 304998d50e4c019d5b84db9b75976261ce9d2bcb Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Wed, 14 Feb 2024 09:51:48 +0100 Subject: [PATCH 213/378] Update go/ql/src/Security/CWE-798/HardcodedCredentials.ql --- go/ql/src/Security/CWE-798/HardcodedCredentials.ql | 1 - 1 file changed, 1 deletion(-) diff --git a/go/ql/src/Security/CWE-798/HardcodedCredentials.ql b/go/ql/src/Security/CWE-798/HardcodedCredentials.ql index 418a0185aa3..c0c623b50b9 100644 --- a/go/ql/src/Security/CWE-798/HardcodedCredentials.ql +++ b/go/ql/src/Security/CWE-798/HardcodedCredentials.ql @@ -47,7 +47,6 @@ predicate sensitiveAssignment( predicate hardcodedPrivateKey(DataFlow::Node node, SensitiveExpr::Classification type) { node.getStringValue() .regexpMatch("(?s)-+BEGIN\\b.*\\bPRIVATE KEY-+.+-+END\\b.*\\bPRIVATE KEY-+\n?") and - (node.asExpr() instanceof StringLit or node.asExpr() instanceof AddExpr) and type = SensitiveExpr::certificate() } From 8afaa231eead20ce1602c3e6ea1972ae1edcb5d3 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Wed, 14 Feb 2024 09:52:46 +0100 Subject: [PATCH 214/378] Update go/ql/lib/semmle/go/security/Jwt.qll --- go/ql/lib/semmle/go/security/Jwt.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go/ql/lib/semmle/go/security/Jwt.qll b/go/ql/lib/semmle/go/security/Jwt.qll index ee94ad0567f..ad7e3e1cccf 100644 --- a/go/ql/lib/semmle/go/security/Jwt.qll +++ b/go/ql/lib/semmle/go/security/Jwt.qll @@ -35,7 +35,7 @@ private class GinJwtSign extends HardcodedCredentials::Sink { private class SquareJoseKey extends HardcodedCredentials::Sink { SquareJoseKey() { exists(Field f, string pkg | - pkg = ["github.com/square/go-jose/v3", "gopkg.in/square/go-jose.v2"] + pkg = [package("github.com/square/go-jose", ""), "gopkg.in/square/go-jose.v2"] | f.hasQualifiedName(pkg, ["Recipient", "SigningKey"], "Key") and f.getAWrite().getRhs() = this From 3fb422ca2560bb301747f3cbe5906c45f9ef631b Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Wed, 14 Feb 2024 11:52:04 +0100 Subject: [PATCH 215/378] Split Jwt.qll into framework libraries, which makes more sense --- go/ql/lib/go.qll | 2 + go/ql/lib/semmle/go/frameworks/Gin.qll | 12 ++++- go/ql/lib/semmle/go/frameworks/GoJose.qll | 24 ++++++++++ go/ql/lib/semmle/go/frameworks/Gogf.qll | 17 +++++++ go/ql/lib/semmle/go/frameworks/Iris.qll | 10 +++++ .../go/security/HardcodedCredentials.qll | 1 - go/ql/lib/semmle/go/security/Jwt.qll | 44 ------------------- 7 files changed, 64 insertions(+), 46 deletions(-) create mode 100644 go/ql/lib/semmle/go/frameworks/GoJose.qll create mode 100644 go/ql/lib/semmle/go/frameworks/Gogf.qll delete mode 100644 go/ql/lib/semmle/go/security/Jwt.qll diff --git a/go/ql/lib/go.qll b/go/ql/lib/go.qll index afb4ffea8ad..92bb772529e 100644 --- a/go/ql/lib/go.qll +++ b/go/ql/lib/go.qll @@ -45,6 +45,7 @@ import semmle.go.frameworks.Fiber import semmle.go.frameworks.Gin import semmle.go.frameworks.GinCors import semmle.go.frameworks.Glog +import semmle.go.frameworks.Gogf import semmle.go.frameworks.GoKit import semmle.go.frameworks.GoMicro import semmle.go.frameworks.GoRestfulHttp @@ -61,6 +62,7 @@ import semmle.go.frameworks.Protobuf import semmle.go.frameworks.Revel import semmle.go.frameworks.Spew import semmle.go.frameworks.SQL +import semmle.go.frameworks.Square import semmle.go.frameworks.Stdlib import semmle.go.frameworks.SystemCommandExecutors import semmle.go.frameworks.Testing diff --git a/go/ql/lib/semmle/go/frameworks/Gin.qll b/go/ql/lib/semmle/go/frameworks/Gin.qll index bdaf002e117..574b7e16246 100644 --- a/go/ql/lib/semmle/go/frameworks/Gin.qll +++ b/go/ql/lib/semmle/go/frameworks/Gin.qll @@ -1,8 +1,9 @@ /** - * Provides classes for working with untrusted flow sources from the `github.com/gin-gonic/gin` package. + * Provides classes for working with the `github.com/gin-gonic/gin` package. */ import go +private import semmle.go.security.HardcodedCredentials private module Gin { /** Gets the package name `github.com/gin-gonic/gin`. */ @@ -75,4 +76,13 @@ private module Gin { override DataFlow::Node getAPathArgument() { result = this.getArgument(pathArg) } } + + private class GinJwtSign extends HardcodedCredentials::Sink { + GinJwtSign() { + exists(Field f | + f.hasQualifiedName(package("github.com/appleboy/gin-jwt", ""), "GinJWTMiddleware", "Key") and + f.getAWrite().getRhs() = this + ) + } + } } diff --git a/go/ql/lib/semmle/go/frameworks/GoJose.qll b/go/ql/lib/semmle/go/frameworks/GoJose.qll new file mode 100644 index 00000000000..a0796dee328 --- /dev/null +++ b/go/ql/lib/semmle/go/frameworks/GoJose.qll @@ -0,0 +1,24 @@ +/** + * Provides classes for working with the `github.com/square/go-jose`, `github.com/go-jose/go-jose`, + * and `gopkg.in/square-go-jose.v2` packages. + */ + +import go +private import semmle.go.security.HardcodedCredentials + +private module GoJose { + private class GoJoseKey extends HardcodedCredentials::Sink { + GoJoseKey() { + exists(Field f, string pkg | + pkg = + [ + package("github.com/square/go-jose", ""), package("github.com/go-jose/go-jose", ""), + "gopkg.in/square/go-jose.v2" + ] + | + f.hasQualifiedName(pkg, ["Recipient", "SigningKey"], "Key") and + f.getAWrite().getRhs() = this + ) + } + } +} diff --git a/go/ql/lib/semmle/go/frameworks/Gogf.qll b/go/ql/lib/semmle/go/frameworks/Gogf.qll new file mode 100644 index 00000000000..1ef78b3bb69 --- /dev/null +++ b/go/ql/lib/semmle/go/frameworks/Gogf.qll @@ -0,0 +1,17 @@ +/** + * Provides classes for working the `github.com/gogf` package. + */ + +import go +private import semmle.go.security.HardcodedCredentials + +private module Gogf { + private class GogfJwtSign extends HardcodedCredentials::Sink { + GogfJwtSign() { + exists(Field f | + f.hasQualifiedName(package("github.com/gogf/gf-jwt", ""), "GfJWTMiddleware", "Key") and + f.getAWrite().getRhs() = this + ) + } + } +} diff --git a/go/ql/lib/semmle/go/frameworks/Iris.qll b/go/ql/lib/semmle/go/frameworks/Iris.qll index bb965769d5c..b241ce8e538 100644 --- a/go/ql/lib/semmle/go/frameworks/Iris.qll +++ b/go/ql/lib/semmle/go/frameworks/Iris.qll @@ -3,6 +3,7 @@ */ import go +private import semmle.go.security.HardcodedCredentials private module Iris { /** Gets the v1 module path `github.com/kataras/iris`. */ @@ -46,4 +47,13 @@ private module Iris { override DataFlow::Node getAPathArgument() { result = this.getArgument(pathArg) } } + + private class IrisJwt extends HardcodedCredentials::Sink { + IrisJwt() { + exists(Field f | + f.hasQualifiedName(package("github.com/kataras/iris", "middleware/jwt"), "Signer", "Key") and + f.getAWrite().getRhs() = this + ) + } + } } diff --git a/go/ql/lib/semmle/go/security/HardcodedCredentials.qll b/go/ql/lib/semmle/go/security/HardcodedCredentials.qll index eaa333fa76c..345141a65ba 100644 --- a/go/ql/lib/semmle/go/security/HardcodedCredentials.qll +++ b/go/ql/lib/semmle/go/security/HardcodedCredentials.qll @@ -7,7 +7,6 @@ import go private import semmle.go.StringOps private import semmle.go.dataflow.ExternalFlow -private import semmle.go.security.Jwt /** * Provides default sources, sinks and sanitizers for reasoning about diff --git a/go/ql/lib/semmle/go/security/Jwt.qll b/go/ql/lib/semmle/go/security/Jwt.qll deleted file mode 100644 index ad7e3e1cccf..00000000000 --- a/go/ql/lib/semmle/go/security/Jwt.qll +++ /dev/null @@ -1,44 +0,0 @@ -/** - * Provides classes and predicates for reasoning about JSON Web Tokens (JWT). - */ - -import go -private import semmle.go.security.HardcodedCredentials - -private class IrisJwt extends HardcodedCredentials::Sink { - IrisJwt() { - exists(Field f | - f.hasQualifiedName(package("github.com/kataras/iris", "middleware/jwt"), "Signer", "Key") and - f.getAWrite().getRhs() = this - ) - } -} - -private class GogfJwtSign extends HardcodedCredentials::Sink { - GogfJwtSign() { - exists(Field f | - f.hasQualifiedName(package("github.com/gogf/gf-jwt", ""), "GfJWTMiddleware", "Key") and - f.getAWrite().getRhs() = this - ) - } -} - -private class GinJwtSign extends HardcodedCredentials::Sink { - GinJwtSign() { - exists(Field f | - f.hasQualifiedName(package("github.com/appleboy/gin-jwt", ""), "GinJWTMiddleware", "Key") and - f.getAWrite().getRhs() = this - ) - } -} - -private class SquareJoseKey extends HardcodedCredentials::Sink { - SquareJoseKey() { - exists(Field f, string pkg | - pkg = [package("github.com/square/go-jose", ""), "gopkg.in/square/go-jose.v2"] - | - f.hasQualifiedName(pkg, ["Recipient", "SigningKey"], "Key") and - f.getAWrite().getRhs() = this - ) - } -} From 6b74cb7e759f69c8ff51e41efaedfaecfe8dcaa4 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Wed, 14 Feb 2024 11:52:29 +0100 Subject: [PATCH 216/378] Remove unneeded $ANYVERSION --- go/ql/lib/ext/github.com.cristalhq.jwt.model.yml | 2 +- go/ql/lib/ext/github.com.go-chi.jwtauth.model.yml | 2 +- go/ql/lib/ext/github.com.golang-jwt.jwt.model.yml | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/go/ql/lib/ext/github.com.cristalhq.jwt.model.yml b/go/ql/lib/ext/github.com.cristalhq.jwt.model.yml index 088c6a7ab79..b4d2d3299a4 100644 --- a/go/ql/lib/ext/github.com.cristalhq.jwt.model.yml +++ b/go/ql/lib/ext/github.com.cristalhq.jwt.model.yml @@ -3,4 +3,4 @@ extensions: pack: codeql/go-all extensible: sinkModel data: - - ["github.com/cristalhq/jwt/$ANYVERSION", "", True, "NewSignerHS", "", "", "Argument[1]", "credentials-key", "manual"] + - ["github.com/cristalhq/jwt", "", True, "NewSignerHS", "", "", "Argument[1]", "credentials-key", "manual"] diff --git a/go/ql/lib/ext/github.com.go-chi.jwtauth.model.yml b/go/ql/lib/ext/github.com.go-chi.jwtauth.model.yml index 0c7319c1f22..eb9e54f171c 100644 --- a/go/ql/lib/ext/github.com.go-chi.jwtauth.model.yml +++ b/go/ql/lib/ext/github.com.go-chi.jwtauth.model.yml @@ -3,4 +3,4 @@ extensions: pack: codeql/go-all extensible: sinkModel data: - - ["github.com/go-chi/jwtauth/$ANYVERSION", "", True, "New", "", "", "Argument[1]", "credentials-key", "manual"] + - ["github.com/go-chi/jwtauth", "", True, "New", "", "", "Argument[1]", "credentials-key", "manual"] diff --git a/go/ql/lib/ext/github.com.golang-jwt.jwt.model.yml b/go/ql/lib/ext/github.com.golang-jwt.jwt.model.yml index fcbdf1c8923..218550ac559 100644 --- a/go/ql/lib/ext/github.com.golang-jwt.jwt.model.yml +++ b/go/ql/lib/ext/github.com.golang-jwt.jwt.model.yml @@ -3,5 +3,5 @@ extensions: pack: codeql/go-all extensible: sinkModel data: - - ["github.com/golang-jwt/jwt/$ANYVERSION", "Token", True, "SignedString", "", "", "Argument[0]", "credentials-key", "manual"] - - ["github.com/golang-jwt/jwt/$ANYVERSION", "SigningMethod", True, "Sign", "", "", "Argument[1]", "credentials-key", "manual"] + - ["github.com/golang-jwt/jwt", "Token", True, "SignedString", "", "", "Argument[0]", "credentials-key", "manual"] + - ["github.com/golang-jwt/jwt", "SigningMethod", True, "Sign", "", "", "Argument[1]", "credentials-key", "manual"] From a76de495e0f1d80d9b6caf23c2e1ec72e4c4815a Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Wed, 14 Feb 2024 11:53:46 +0100 Subject: [PATCH 217/378] Simplify sanitizers Use DataFlow::returnedWithError instead --- .../go/security/HardcodedCredentials.qll | 29 ++----------------- 1 file changed, 2 insertions(+), 27 deletions(-) diff --git a/go/ql/lib/semmle/go/security/HardcodedCredentials.qll b/go/ql/lib/semmle/go/security/HardcodedCredentials.qll index 345141a65ba..4ee29056c6a 100644 --- a/go/ql/lib/semmle/go/security/HardcodedCredentials.qll +++ b/go/ql/lib/semmle/go/security/HardcodedCredentials.qll @@ -76,33 +76,8 @@ module HardcodedCredentials { * where we can be reasonably confident downstream users will not mistake * that empty string for a usable key. */ - private class ReturnedAlongsideErrorSanitizer extends Sanitizer { - ReturnedAlongsideErrorSanitizer() { - exists(ReturnStmt r, DataFlow::CallNode c | - c.getTarget().hasQualifiedName("errors", "New") and - r.getNumChild() > 1 and - r.getAChild() = c.getAResult().getASuccessor*().asExpr() and - r.getAChild() = this.asExpr() - ) - } - } - - /** - * A value returned alongside an error-value that is known - * to be non-nil by virtue of a guarding check. - * - * For example, `if err != nil { return "", err }` is unlikely to be - * contributing a dangerous hardcoded key. - */ - private class ReturnedAlongsideErrorSanitizerGuard extends Sanitizer { - ReturnedAlongsideErrorSanitizerGuard() { - exists(ControlFlow::ConditionGuardNode guard, SsaWithFields errorVar, ReturnStmt r | - guard.ensuresNeq(errorVar.getAUse(), Builtin::nil().getARead()) and - guard.dominates(this.getBasicBlock()) and - r.getExpr(1) = errorVar.getAUse().asExpr() and - this.asExpr() = r.getExpr(0) - ) - } + private class ReturnedWithErrorSanitizer extends Sanitizer { + ReturnedWithErrorSanitizer() { DataFlow::isReturnedWithError(this) } } /** The result of a formatting string call. */ From 16284fdd204fe4fa2d5bb2823c109a42a1a6f1f6 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Wed, 14 Feb 2024 12:08:08 +0100 Subject: [PATCH 218/378] Discard sources that are obvious dummy values --- go/ql/lib/semmle/go/security/HardcodedCredentials.qll | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/go/ql/lib/semmle/go/security/HardcodedCredentials.qll b/go/ql/lib/semmle/go/security/HardcodedCredentials.qll index 4ee29056c6a..84c426ac317 100644 --- a/go/ql/lib/semmle/go/security/HardcodedCredentials.qll +++ b/go/ql/lib/semmle/go/security/HardcodedCredentials.qll @@ -7,6 +7,7 @@ import go private import semmle.go.StringOps private import semmle.go.dataflow.ExternalFlow +private import semmle.go.security.SensitiveActions /** * Provides default sources, sinks and sanitizers for reasoning about @@ -36,7 +37,11 @@ module HardcodedCredentials { /** A hardcoded string literal as a source for hardcoded credentials. */ private class HardcodedStringSource extends Source { - HardcodedStringSource() { this.asExpr() instanceof StringLit } + HardcodedStringSource() { + exists(StringLit val | this.asExpr() = val | + not PasswordHeuristics::isDummyPassword(val.getStringValue()) + ) + } } /** A use of a credential. */ From 458bbb358122092e86592744e889a270840da0dc Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Wed, 14 Feb 2024 12:23:27 +0100 Subject: [PATCH 219/378] Rename fwk module --- go/ql/lib/go.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go/ql/lib/go.qll b/go/ql/lib/go.qll index 92bb772529e..779482a3de1 100644 --- a/go/ql/lib/go.qll +++ b/go/ql/lib/go.qll @@ -46,6 +46,7 @@ import semmle.go.frameworks.Gin import semmle.go.frameworks.GinCors import semmle.go.frameworks.Glog import semmle.go.frameworks.Gogf +import semmle.go.frameworks.GoJose import semmle.go.frameworks.GoKit import semmle.go.frameworks.GoMicro import semmle.go.frameworks.GoRestfulHttp @@ -62,7 +63,6 @@ import semmle.go.frameworks.Protobuf import semmle.go.frameworks.Revel import semmle.go.frameworks.Spew import semmle.go.frameworks.SQL -import semmle.go.frameworks.Square import semmle.go.frameworks.Stdlib import semmle.go.frameworks.SystemCommandExecutors import semmle.go.frameworks.Testing From 1b40b595fa766b02b1af9ac702325ff99bd619de Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Tue, 13 Feb 2024 15:48:26 +0000 Subject: [PATCH 220/378] Kotlin: Handle forAllMethodsWithBody being removed Per: commit 28797a31b4d9b7f5c99d162ab19fc6b46f8e529d Author: Alexander Udalov Date: Thu Feb 1 13:22:48 2024 +0100 JVM: refactor JvmDefaultMode, remove/rename some entries [...] - remove forAllMethodsWithBody because its behavior is now equivalent to isEnabled [...] --- .../src/main/kotlin/KotlinFileExtractor.kt | 11 ++++++----- .../utils/versions/v_1_5_0/JvmDefaultModeEnabled.kt | 7 +++++++ .../v_2_0_255-SNAPSHOT/JvmDefaultModeEnabled.kt | 7 +++++++ 3 files changed, 20 insertions(+), 5 deletions(-) create mode 100644 java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_0/JvmDefaultModeEnabled.kt create mode 100644 java/kotlin-extractor/src/main/kotlin/utils/versions/v_2_0_255-SNAPSHOT/JvmDefaultModeEnabled.kt diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinFileExtractor.kt b/java/kotlin-extractor/src/main/kotlin/KotlinFileExtractor.kt index 6cd3611af52..47288394904 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinFileExtractor.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinFileExtractor.kt @@ -1617,8 +1617,9 @@ open class KotlinFileExtractor( cls.origin != IrDeclarationOrigin.IR_EXTERNAL_JAVA_DECLARATION_STUB private fun needsInterfaceForwarder(f: IrFunction) = - // forAllMethodsWithBody means -Xjvm-default=all or all-compatibility, in which case real - // Java default interfaces are used, and we don't need to do anything. + // jvmDefaultModeEnabledIsEnabled means that -Xjvm-default=all or all-compatibility was + // used, in which case real Java default interfaces are used, and we don't need to do + // anything. // Otherwise, for a Kotlin-defined method inheriting a Kotlin-defined default, we need to // create a synthetic method like // `int f(int x) { return super.InterfaceWithDefault.f(x); }`, because kotlinc will generate @@ -1626,9 +1627,9 @@ open class KotlinFileExtractor( // (NB. kotlinc's actual implementation strategy is different -- it makes an inner class // called InterfaceWithDefault$DefaultImpls and stores the default methods // there to allow default method usage in Java < 8, but this is hopefully niche. - !pluginContext.languageVersionSettings - .getFlag(JvmAnalysisFlags.jvmDefaultMode) - .forAllMethodsWithBody && + !jvmDefaultModeEnabledIsEnabled( + pluginContext.languageVersionSettings + .getFlag(JvmAnalysisFlags.jvmDefaultMode)) && f.parentClassOrNull.let { it != null && it.origin != IrDeclarationOrigin.IR_EXTERNAL_JAVA_DECLARATION_STUB && diff --git a/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_0/JvmDefaultModeEnabled.kt b/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_0/JvmDefaultModeEnabled.kt new file mode 100644 index 00000000000..cd849652613 --- /dev/null +++ b/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_0/JvmDefaultModeEnabled.kt @@ -0,0 +1,7 @@ +package com.github.codeql.utils.versions + +import org.jetbrains.kotlin.config.JvmDefaultMode + +fun jvmDefaultModeEnabledIsEnabled(jdm: JvmDefaultMode): Boolean { + return jdm.forAllMethodsWithBody +} diff --git a/java/kotlin-extractor/src/main/kotlin/utils/versions/v_2_0_255-SNAPSHOT/JvmDefaultModeEnabled.kt b/java/kotlin-extractor/src/main/kotlin/utils/versions/v_2_0_255-SNAPSHOT/JvmDefaultModeEnabled.kt new file mode 100644 index 00000000000..10a936ed909 --- /dev/null +++ b/java/kotlin-extractor/src/main/kotlin/utils/versions/v_2_0_255-SNAPSHOT/JvmDefaultModeEnabled.kt @@ -0,0 +1,7 @@ +package com.github.codeql.utils.versions + +import org.jetbrains.kotlin.config.JvmDefaultMode + +fun jvmDefaultModeEnabledIsEnabled(jdm: JvmDefaultMode): Boolean { + return jdm.isEnabled +} From 48ea94ba23c2bc730fdf4a038f89defee0a3799a Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Tue, 13 Feb 2024 15:50:45 +0000 Subject: [PATCH 221/378] Kotlin: Handle PsiSourceManager moving --- .../versions/v_2_0_255-SNAPSHOT/Psi2Ir.kt | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 java/kotlin-extractor/src/main/kotlin/utils/versions/v_2_0_255-SNAPSHOT/Psi2Ir.kt diff --git a/java/kotlin-extractor/src/main/kotlin/utils/versions/v_2_0_255-SNAPSHOT/Psi2Ir.kt b/java/kotlin-extractor/src/main/kotlin/utils/versions/v_2_0_255-SNAPSHOT/Psi2Ir.kt new file mode 100644 index 00000000000..09c4f42e021 --- /dev/null +++ b/java/kotlin-extractor/src/main/kotlin/utils/versions/v_2_0_255-SNAPSHOT/Psi2Ir.kt @@ -0,0 +1,21 @@ +package com.github.codeql.utils.versions + +import com.github.codeql.utils.Psi2IrFacade +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.ir.PsiSourceManager +import org.jetbrains.kotlin.backend.jvm.ir.getKtFile +import org.jetbrains.kotlin.ir.IrElement +import org.jetbrains.kotlin.ir.declarations.IrFile +import org.jetbrains.kotlin.psi.KtFile + +fun getPsi2Ir(): Psi2IrFacade? = Psi2Ir() + +private class Psi2Ir() : Psi2IrFacade { + override fun getKtFile(irFile: IrFile): KtFile? { + return irFile.getKtFile() + } + + override fun findPsiElement(irElement: IrElement, irFile: IrFile): PsiElement? { + return PsiSourceManager.findPsiElement(irElement, irFile) + } +} From 5ce35e47b9bdcddee166d60097af6aad48637bbe Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Wed, 14 Feb 2024 13:06:31 +0100 Subject: [PATCH 222/378] Adjust a test case so that the key isn't considered dummy (len < 4) --- .../query-tests/Security/CWE-798/HardcodedCredentials.expected | 2 +- go/ql/test/query-tests/Security/CWE-798/sanitizer.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/go/ql/test/query-tests/Security/CWE-798/HardcodedCredentials.expected b/go/ql/test/query-tests/Security/CWE-798/HardcodedCredentials.expected index 3896a6167b0..dc4280a55c9 100644 --- a/go/ql/test/query-tests/Security/CWE-798/HardcodedCredentials.expected +++ b/go/ql/test/query-tests/Security/CWE-798/HardcodedCredentials.expected @@ -25,4 +25,4 @@ | main.go:44:14:44:19 | "p4ss" | Hard-coded $@. | main.go:44:14:44:19 | "p4ss" | password | | main.go:48:13:48:15 | tmp | Hard-coded $@. | main.go:44:14:44:19 | "p4ss" | password | | main.go:50:15:50:21 | "p4ss2" | Hard-coded $@. | main.go:50:15:50:21 | "p4ss2" | password | -| sanitizer.go:18:44:18:46 | key | Hard-coded credential. | sanitizer.go:17:16:17:20 | `key` | password | +| sanitizer.go:18:44:18:46 | key | Hard-coded credential. | sanitizer.go:17:16:17:25 | `some_key` | password | diff --git a/go/ql/test/query-tests/Security/CWE-798/sanitizer.go b/go/ql/test/query-tests/Security/CWE-798/sanitizer.go index 314d9187045..749642ceb3b 100644 --- a/go/ql/test/query-tests/Security/CWE-798/sanitizer.go +++ b/go/ql/test/query-tests/Security/CWE-798/sanitizer.go @@ -14,7 +14,7 @@ import ( ) func check_ok() (interface{}, error) { - key := []byte(`key`) + key := []byte(`some_key`) return cristal.NewSignerHS(cristal.HS256, key) // BAD } From 46bc311111794e685ece8764beecaf8eb726e701 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Wed, 14 Feb 2024 12:01:17 +0100 Subject: [PATCH 223/378] C++: Support `constexpr if` in the IR --- .../raw/internal/TranslatedElement.qll | 2 + .../raw/internal/TranslatedStmt.qll | 66 +++++++ .../library-tests/ir/ir/aliased_ir.expected | 165 ++++++++++++++++++ .../ir/ir/aliased_ssa_consistency.expected | 2 +- .../aliased_ssa_consistency_unsound.expected | 2 +- .../ir/ir/operand_locations.expected | 149 ++++++++++++++++ .../ir/ir/raw_consistency.expected | 4 - .../test/library-tests/ir/ir/raw_ir.expected | 70 ++++---- .../ir/ir/unaliased_ssa_consistency.expected | 2 +- ...unaliased_ssa_consistency_unsound.expected | 2 +- 10 files changed, 423 insertions(+), 41 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll index 08908c29bca..c83aea863e0 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll @@ -209,6 +209,8 @@ private predicate usedAsCondition(Expr expr) { or exists(IfStmt ifStmt | ifStmt.getCondition().getFullyConverted() = expr) or + exists(ConstexprIfStmt ifStmt | ifStmt.getCondition().getFullyConverted() = expr) + or exists(ConditionalExpr condExpr | // The two-operand form of `ConditionalExpr` treats its condition as a value, since it needs to // be reused as a value if the condition is true. diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedStmt.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedStmt.qll index 67a7a8aa83b..eff4593b335 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedStmt.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedStmt.qll @@ -774,6 +774,72 @@ class TranslatedIfStmt extends TranslatedStmt, ConditionContext { } } +class TranslatedConstExprIfStmt extends TranslatedStmt, ConditionContext { + override ConstexprIfStmt stmt; + + override Instruction getFirstInstruction(EdgeKind kind) { + if this.hasInitialization() + then result = this.getInitialization().getFirstInstruction(kind) + else result = this.getFirstConditionInstruction(kind) + } + + override TranslatedElement getChild(int id) { + id = 0 and result = this.getInitialization() + or + id = 1 and result = this.getCondition() + or + id = 2 and result = this.getThen() + or + id = 3 and result = this.getElse() + } + + private predicate hasInitialization() { exists(stmt.getInitialization()) } + + private TranslatedStmt getInitialization() { + result = getTranslatedStmt(stmt.getInitialization()) + } + + private TranslatedCondition getCondition() { + result = getTranslatedCondition(stmt.getCondition().getFullyConverted()) + } + + private Instruction getFirstConditionInstruction(EdgeKind kind) { + result = this.getCondition().getFirstInstruction(kind) + } + + private TranslatedStmt getThen() { result = getTranslatedStmt(stmt.getThen()) } + + private TranslatedStmt getElse() { result = getTranslatedStmt(stmt.getElse()) } + + private predicate hasElse() { exists(stmt.getElse()) } + + override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { none() } + + override Instruction getChildTrueSuccessor(TranslatedCondition child, EdgeKind kind) { + child = this.getCondition() and + result = this.getThen().getFirstInstruction(kind) + } + + override Instruction getChildFalseSuccessor(TranslatedCondition child, EdgeKind kind) { + child = this.getCondition() and + if this.hasElse() + then result = this.getElse().getFirstInstruction(kind) + else result = this.getParent().getChildSuccessor(this, kind) + } + + override Instruction getChildSuccessor(TranslatedElement child, EdgeKind kind) { + child = this.getInitialization() and + result = this.getFirstConditionInstruction(kind) + or + (child = this.getThen() or child = this.getElse()) and + result = this.getParent().getChildSuccessor(this, kind) + } + + override predicate hasInstruction(Opcode opcode, InstructionTag tag, CppType resultType) { + none() + } +} + abstract class TranslatedLoop extends TranslatedStmt, ConditionContext { override Loop stmt; diff --git a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected index 458ab279ff2..cc972e38fc1 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected @@ -12614,6 +12614,7 @@ ir.cpp: # 2137| r2137_9(glval) = VariableAddress[b] : # 2137| r2137_10(bool) = Load[b] : &:r2137_9, m2136_6 # 2137| v2137_11(void) = ConditionalBranch : r2137_10 +#-----| False -> Block 2 #-----| True -> Block 1 # 2138| Block 1 @@ -12626,6 +12627,170 @@ ir.cpp: # 2138| v2138_7(void) = ^IndirectReadSideEffect[-1] : &:r2138_1, m2137_8 # 2138| m2138_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2138_1 # 2138| m2138_9(ClassWithDestructor) = Chi : total:m2137_8, partial:m2138_8 +#-----| Goto -> Block 2 + +# 2140| Block 2 +# 2140| m2140_1(unknown) = Phi : from 0:~m2137_6, from 1:~m2138_6 +# 2140| r2140_2(glval) = VariableAddress[x] : +# 2140| m2140_3(ClassWithDestructor) = Uninitialized[x] : &:r2140_2 +# 2140| r2140_4(glval) = FunctionAddress[ClassWithDestructor] : +# 2140| v2140_5(void) = Call[ClassWithDestructor] : func:r2140_4, this:r2140_2 +# 2140| m2140_6(unknown) = ^CallSideEffect : ~m2140_1 +# 2140| m2140_7(unknown) = Chi : total:m2140_1, partial:m2140_6 +# 2140| m2140_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2140_2 +# 2140| m2140_9(ClassWithDestructor) = Chi : total:m2140_3, partial:m2140_8 +# 2140| r2140_10(bool) = Constant[1] : +# 2140| v2140_11(void) = ConditionalBranch : r2140_10 +#-----| False -> Block 10 +#-----| True -> Block 3 + +# 2141| Block 3 +# 2141| r2141_1(glval) = VariableAddress[x] : +# 2141| r2141_2(glval) = FunctionAddress[set_x] : +# 2141| r2141_3(char) = Constant[97] : +# 2141| v2141_4(void) = Call[set_x] : func:r2141_2, this:r2141_1, 0:r2141_3 +# 2141| m2141_5(unknown) = ^CallSideEffect : ~m2140_7 +# 2141| m2141_6(unknown) = Chi : total:m2140_7, partial:m2141_5 +# 2141| v2141_7(void) = ^IndirectReadSideEffect[-1] : &:r2141_1, m2140_9 +# 2141| m2141_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2141_1 +# 2141| m2141_9(ClassWithDestructor) = Chi : total:m2140_9, partial:m2141_8 +# 2143| r2143_1(glval) = VariableAddress[x] : +# 2143| m2143_2(ClassWithDestructor) = Uninitialized[x] : &:r2143_1 +# 2143| r2143_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2143| v2143_4(void) = Call[ClassWithDestructor] : func:r2143_3, this:r2143_1 +# 2143| m2143_5(unknown) = ^CallSideEffect : ~m2141_6 +# 2143| m2143_6(unknown) = Chi : total:m2141_6, partial:m2143_5 +# 2143| m2143_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2143_1 +# 2143| m2143_8(ClassWithDestructor) = Chi : total:m2143_2, partial:m2143_7 +# 2143| r2143_9(glval) = VariableAddress[c] : +# 2143| r2143_10(char) = Load[c] : &:r2143_9, m2136_8 +# 2143| r2143_11(int) = Convert : r2143_10 +# 2143| v2143_12(void) = Switch : r2143_11 +#-----| Case[97] -> Block 4 +#-----| Default -> Block 5 + +# 2144| Block 4 +# 2144| v2144_1(void) = NoOp : +# 2145| r2145_1(glval) = VariableAddress[x] : +# 2145| r2145_2(glval) = FunctionAddress[set_x] : +# 2145| r2145_3(char) = Constant[97] : +# 2145| v2145_4(void) = Call[set_x] : func:r2145_2, this:r2145_1, 0:r2145_3 +# 2145| m2145_5(unknown) = ^CallSideEffect : ~m2143_6 +# 2145| m2145_6(unknown) = Chi : total:m2143_6, partial:m2145_5 +# 2145| v2145_7(void) = ^IndirectReadSideEffect[-1] : &:r2145_1, m2143_8 +# 2145| m2145_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2145_1 +# 2145| m2145_9(ClassWithDestructor) = Chi : total:m2143_8, partial:m2145_8 +# 2146| v2146_1(void) = NoOp : +#-----| Goto -> Block 6 + +# 2147| Block 5 +# 2147| v2147_1(void) = NoOp : +# 2148| r2148_1(glval) = VariableAddress[x] : +# 2148| r2148_2(glval) = FunctionAddress[set_x] : +# 2148| r2148_3(char) = Constant[98] : +# 2148| v2148_4(void) = Call[set_x] : func:r2148_2, this:r2148_1, 0:r2148_3 +# 2148| m2148_5(unknown) = ^CallSideEffect : ~m2143_6 +# 2148| m2148_6(unknown) = Chi : total:m2143_6, partial:m2148_5 +# 2148| v2148_7(void) = ^IndirectReadSideEffect[-1] : &:r2148_1, m2143_8 +# 2148| m2148_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2148_1 +# 2148| m2148_9(ClassWithDestructor) = Chi : total:m2143_8, partial:m2148_8 +# 2149| v2149_1(void) = NoOp : +#-----| Goto -> Block 6 + +# 2150| Block 6 +# 2150| m2150_1(unknown) = Phi : from 4:~m2145_6, from 5:~m2148_6 +# 2150| v2150_2(void) = NoOp : +# 2152| r2152_1(glval) = VariableAddress[x] : +# 2152| m2152_2(ClassWithDestructor) = Uninitialized[x] : &:r2152_1 +# 2152| r2152_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2152| v2152_4(void) = Call[ClassWithDestructor] : func:r2152_3, this:r2152_1 +# 2152| m2152_5(unknown) = ^CallSideEffect : ~m2150_1 +# 2152| m2152_6(unknown) = Chi : total:m2150_1, partial:m2152_5 +# 2152| m2152_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2152_1 +# 2152| m2152_8(ClassWithDestructor) = Chi : total:m2152_2, partial:m2152_7 +# 2153| r2153_1(glval &>) = VariableAddress[(__range)] : +# 2153| r2153_2(glval>) = VariableAddress : +# 2153| r2153_3(vector &) = CopyValue : r2153_2 +# 2153| m2153_4(vector &) = Store[(__range)] : &:r2153_1, r2153_3 +# 2153| r2153_5(glval) = VariableAddress[(__begin)] : +# 2153| r2153_6(glval &>) = VariableAddress[(__range)] : +# 2153| r2153_7(vector &) = Load[(__range)] : &:r2153_6, m2153_4 +#-----| r0_1(glval>) = CopyValue : r2153_7 +#-----| r0_2(glval>) = Convert : r0_1 +# 2153| r2153_8(glval) = FunctionAddress[begin] : +# 2153| r2153_9(iterator) = Call[begin] : func:r2153_8, this:r0_2 +# 2153| m2153_10(unknown) = ^CallSideEffect : ~m2152_6 +# 2153| m2153_11(unknown) = Chi : total:m2152_6, partial:m2153_10 +#-----| v0_3(void) = ^IndirectReadSideEffect[-1] : &:r0_2, ~m2153_11 +# 2153| m2153_12(iterator) = Store[(__begin)] : &:r2153_5, r2153_9 +# 2153| r2153_13(glval) = VariableAddress[(__end)] : +# 2153| r2153_14(glval &>) = VariableAddress[(__range)] : +# 2153| r2153_15(vector &) = Load[(__range)] : &:r2153_14, m2153_4 +#-----| r0_4(glval>) = CopyValue : r2153_15 +#-----| r0_5(glval>) = Convert : r0_4 +# 2153| r2153_16(glval) = FunctionAddress[end] : +# 2153| r2153_17(iterator) = Call[end] : func:r2153_16, this:r0_5 +# 2153| m2153_18(unknown) = ^CallSideEffect : ~m2153_11 +# 2153| m2153_19(unknown) = Chi : total:m2153_11, partial:m2153_18 +#-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, ~m2153_19 +# 2153| m2153_20(iterator) = Store[(__end)] : &:r2153_13, r2153_17 +#-----| Goto -> Block 7 + +# 2153| Block 7 +# 2153| m2153_21(iterator) = Phi : from 6:m2153_12, from 8:m2153_46 +# 2153| m2153_22(unknown) = Phi : from 6:~m2153_19, from 8:~m2153_43 +# 2153| r2153_23(glval) = VariableAddress[(__begin)] : +#-----| r0_7(glval) = Convert : r2153_23 +# 2153| r2153_24(glval) = FunctionAddress[operator!=] : +# 2153| r2153_25(glval) = VariableAddress[(__end)] : +# 2153| r2153_26(iterator) = Load[(__end)] : &:r2153_25, m2153_20 +# 2153| r2153_27(bool) = Call[operator!=] : func:r2153_24, this:r0_7, 0:r2153_26 +# 2153| m2153_28(unknown) = ^CallSideEffect : ~m2153_22 +# 2153| m2153_29(unknown) = Chi : total:m2153_22, partial:m2153_28 +#-----| v0_8(void) = ^IndirectReadSideEffect[-1] : &:r0_7, m2153_21 +# 2153| v2153_30(void) = ConditionalBranch : r2153_27 +#-----| False -> Block 9 +#-----| True -> Block 8 + +# 2153| Block 8 +# 2153| r2153_31(glval) = VariableAddress[y] : +# 2153| r2153_32(glval) = VariableAddress[(__begin)] : +#-----| r0_9(glval) = Convert : r2153_32 +# 2153| r2153_33(glval) = FunctionAddress[operator*] : +# 2153| r2153_34(ClassWithDestructor &) = Call[operator*] : func:r2153_33, this:r0_9 +# 2153| m2153_35(unknown) = ^CallSideEffect : ~m2153_29 +# 2153| m2153_36(unknown) = Chi : total:m2153_29, partial:m2153_35 +#-----| v0_10(void) = ^IndirectReadSideEffect[-1] : &:r0_9, m2153_21 +# 2153| r2153_37(ClassWithDestructor) = Load[?] : &:r2153_34, ~m2153_36 +# 2153| m2153_38(ClassWithDestructor) = Store[y] : &:r2153_31, r2153_37 +# 2154| r2154_1(glval) = VariableAddress[y] : +# 2154| r2154_2(glval) = FunctionAddress[set_x] : +# 2154| r2154_3(char) = Constant[97] : +# 2154| v2154_4(void) = Call[set_x] : func:r2154_2, this:r2154_1, 0:r2154_3 +# 2154| m2154_5(unknown) = ^CallSideEffect : ~m2153_36 +# 2154| m2154_6(unknown) = Chi : total:m2153_36, partial:m2154_5 +# 2154| v2154_7(void) = ^IndirectReadSideEffect[-1] : &:r2154_1, m2153_38 +# 2154| m2154_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2154_1 +# 2154| m2154_9(ClassWithDestructor) = Chi : total:m2153_38, partial:m2154_8 +# 2153| r2153_39(glval) = VariableAddress[(__begin)] : +# 2153| r2153_40(glval) = FunctionAddress[operator++] : +# 2153| r2153_41(iterator &) = Call[operator++] : func:r2153_40, this:r2153_39 +# 2153| m2153_42(unknown) = ^CallSideEffect : ~m2154_6 +# 2153| m2153_43(unknown) = Chi : total:m2154_6, partial:m2153_42 +# 2153| v2153_44(void) = ^IndirectReadSideEffect[-1] : &:r2153_39, m2153_21 +# 2153| m2153_45(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2153_39 +# 2153| m2153_46(iterator) = Chi : total:m2153_21, partial:m2153_45 +# 2153| r2153_47(glval) = CopyValue : r2153_41 +#-----| Goto (back edge) -> Block 7 + +# 2155| Block 9 +# 2155| v2155_1(void) = NoOp : +# 2136| v2136_9(void) = ReturnVoid : +# 2136| v2136_10(void) = AliasedUse : ~m2153_29 +# 2136| v2136_11(void) = ExitFunction : + +# 2136| Block 10 +# 2136| v2136_12(void) = Unreached : perf-regression.cpp: # 6| void Big::Big() diff --git a/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency.expected b/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency.expected index b027437d48a..6e9be083ee0 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency.expected @@ -6,7 +6,6 @@ missingOperandType duplicateChiOperand sideEffectWithoutPrimary instructionWithoutSuccessor -| ir.cpp:2138:9:2138:9 | Chi: x | Instruction 'Chi: x' has no successors in function '$@'. | ir.cpp:2136:6:2136:35 | void initialization_with_destructor(bool, char) | void initialization_with_destructor(bool, char) | ambiguousSuccessors unexplainedLoop unnecessaryPhiInstruction @@ -29,4 +28,5 @@ nonUniqueEnclosingIRFunction fieldAddressOnNonPointer thisArgumentIsNonPointer nonUniqueIRVariable +| ir.cpp:2153:68:2153:69 | VariableAddress: ys | Variable address instruction 'VariableAddress: ys' has no associated variable, in function '$@'. | ir.cpp:2136:6:2136:35 | void initialization_with_destructor(bool, char) | void initialization_with_destructor(bool, char) | missingCppType diff --git a/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency_unsound.expected b/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency_unsound.expected index b027437d48a..6e9be083ee0 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency_unsound.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency_unsound.expected @@ -6,7 +6,6 @@ missingOperandType duplicateChiOperand sideEffectWithoutPrimary instructionWithoutSuccessor -| ir.cpp:2138:9:2138:9 | Chi: x | Instruction 'Chi: x' has no successors in function '$@'. | ir.cpp:2136:6:2136:35 | void initialization_with_destructor(bool, char) | void initialization_with_destructor(bool, char) | ambiguousSuccessors unexplainedLoop unnecessaryPhiInstruction @@ -29,4 +28,5 @@ nonUniqueEnclosingIRFunction fieldAddressOnNonPointer thisArgumentIsNonPointer nonUniqueIRVariable +| ir.cpp:2153:68:2153:69 | VariableAddress: ys | Variable address instruction 'VariableAddress: ys' has no associated variable, in function '$@'. | ir.cpp:2136:6:2136:35 | void initialization_with_destructor(bool, char) | void initialization_with_destructor(bool, char) | missingCppType diff --git a/cpp/ql/test/library-tests/ir/ir/operand_locations.expected b/cpp/ql/test/library-tests/ir/ir/operand_locations.expected index eba7196785f..e9ea1e95943 100644 --- a/cpp/ql/test/library-tests/ir/ir/operand_locations.expected +++ b/cpp/ql/test/library-tests/ir/ir/operand_locations.expected @@ -691,6 +691,7 @@ | file://:0:0:0:0 | Address | &:r0_1 | | file://:0:0:0:0 | Address | &:r0_1 | | file://:0:0:0:0 | Address | &:r0_2 | +| file://:0:0:0:0 | Address | &:r0_2 | | file://:0:0:0:0 | Address | &:r0_3 | | file://:0:0:0:0 | Address | &:r0_3 | | file://:0:0:0:0 | Address | &:r0_3 | @@ -736,12 +737,14 @@ | file://:0:0:0:0 | Address | &:r0_5 | | file://:0:0:0:0 | Address | &:r0_5 | | file://:0:0:0:0 | Address | &:r0_5 | +| file://:0:0:0:0 | Address | &:r0_5 | | file://:0:0:0:0 | Address | &:r0_6 | | file://:0:0:0:0 | Address | &:r0_6 | | file://:0:0:0:0 | Address | &:r0_7 | | file://:0:0:0:0 | Address | &:r0_7 | | file://:0:0:0:0 | Address | &:r0_7 | | file://:0:0:0:0 | Address | &:r0_7 | +| file://:0:0:0:0 | Address | &:r0_7 | | file://:0:0:0:0 | Address | &:r0_8 | | file://:0:0:0:0 | Address | &:r0_8 | | file://:0:0:0:0 | Address | &:r0_8 | @@ -751,6 +754,7 @@ | file://:0:0:0:0 | Address | &:r0_8 | | file://:0:0:0:0 | Address | &:r0_9 | | file://:0:0:0:0 | Address | &:r0_9 | +| file://:0:0:0:0 | Address | &:r0_9 | | file://:0:0:0:0 | Address | &:r0_10 | | file://:0:0:0:0 | Address | &:r0_10 | | file://:0:0:0:0 | Address | &:r0_10 | @@ -870,6 +874,8 @@ | file://:0:0:0:0 | SideEffect | m1080_23 | | file://:0:0:0:0 | SideEffect | m1086_23 | | file://:0:0:0:0 | SideEffect | m1086_23 | +| file://:0:0:0:0 | SideEffect | m2153_21 | +| file://:0:0:0:0 | SideEffect | m2153_21 | | file://:0:0:0:0 | SideEffect | ~m0_4 | | file://:0:0:0:0 | SideEffect | ~m0_4 | | file://:0:0:0:0 | SideEffect | ~m0_4 | @@ -886,6 +892,8 @@ | file://:0:0:0:0 | SideEffect | ~m1242_4 | | file://:0:0:0:0 | SideEffect | ~m1449_6 | | file://:0:0:0:0 | SideEffect | ~m1841_8 | +| file://:0:0:0:0 | SideEffect | ~m2153_11 | +| file://:0:0:0:0 | SideEffect | ~m2153_19 | | file://:0:0:0:0 | StoreValue | r0_1 | | file://:0:0:0:0 | StoreValue | r0_1 | | file://:0:0:0:0 | StoreValue | r0_1 | @@ -915,8 +923,10 @@ | file://:0:0:0:0 | StoreValue | r0_22 | | file://:0:0:0:0 | Unary | r0_1 | | file://:0:0:0:0 | Unary | r0_1 | +| file://:0:0:0:0 | Unary | r0_1 | | file://:0:0:0:0 | Unary | r0_2 | | file://:0:0:0:0 | Unary | r0_3 | +| file://:0:0:0:0 | Unary | r0_4 | | file://:0:0:0:0 | Unary | r0_5 | | file://:0:0:0:0 | Unary | r0_5 | | file://:0:0:0:0 | Unary | r0_6 | @@ -10184,6 +10194,7 @@ | ir.cpp:2134:54:2134:57 | StoreValue | r2134_4 | | ir.cpp:2136:6:2136:35 | ChiPartial | partial:m2136_3 | | ir.cpp:2136:6:2136:35 | ChiTotal | total:m2136_2 | +| ir.cpp:2136:6:2136:35 | SideEffect | ~m2153_29 | | ir.cpp:2136:42:2136:42 | Address | &:r2136_5 | | ir.cpp:2136:50:2136:50 | Address | &:r2136_7 | | ir.cpp:2137:29:2137:29 | Address | &:r2137_1 | @@ -10209,6 +10220,144 @@ | ir.cpp:2138:11:2138:15 | ChiTotal | total:m2137_6 | | ir.cpp:2138:11:2138:15 | SideEffect | ~m2137_6 | | ir.cpp:2138:17:2138:19 | Arg(0) | 0:r2138_3 | +| ir.cpp:2140:39:2140:39 | Address | &:r2140_2 | +| ir.cpp:2140:39:2140:39 | Address | &:r2140_2 | +| ir.cpp:2140:39:2140:39 | Arg(this) | this:r2140_2 | +| ir.cpp:2140:39:2140:39 | CallTarget | func:r2140_4 | +| ir.cpp:2140:39:2140:39 | ChiPartial | partial:m2140_6 | +| ir.cpp:2140:39:2140:39 | ChiPartial | partial:m2140_8 | +| ir.cpp:2140:39:2140:39 | ChiTotal | total:m2140_1 | +| ir.cpp:2140:39:2140:39 | ChiTotal | total:m2140_3 | +| ir.cpp:2140:39:2140:39 | Phi | from 0:~m2137_6 | +| ir.cpp:2140:39:2140:39 | Phi | from 1:~m2138_6 | +| ir.cpp:2140:39:2140:39 | SideEffect | ~m2140_1 | +| ir.cpp:2140:42:2140:76 | Condition | r2140_10 | +| ir.cpp:2141:9:2141:9 | Address | &:r2141_1 | +| ir.cpp:2141:9:2141:9 | Address | &:r2141_1 | +| ir.cpp:2141:9:2141:9 | Arg(this) | this:r2141_1 | +| ir.cpp:2141:9:2141:9 | ChiPartial | partial:m2141_8 | +| ir.cpp:2141:9:2141:9 | ChiTotal | total:m2140_9 | +| ir.cpp:2141:9:2141:9 | SideEffect | m2140_9 | +| ir.cpp:2141:11:2141:15 | CallTarget | func:r2141_2 | +| ir.cpp:2141:11:2141:15 | ChiPartial | partial:m2141_5 | +| ir.cpp:2141:11:2141:15 | ChiTotal | total:m2140_7 | +| ir.cpp:2141:11:2141:15 | SideEffect | ~m2140_7 | +| ir.cpp:2141:17:2141:19 | Arg(0) | 0:r2141_3 | +| ir.cpp:2143:32:2143:32 | Address | &:r2143_1 | +| ir.cpp:2143:32:2143:32 | Address | &:r2143_1 | +| ir.cpp:2143:32:2143:32 | Arg(this) | this:r2143_1 | +| ir.cpp:2143:32:2143:32 | CallTarget | func:r2143_3 | +| ir.cpp:2143:32:2143:32 | ChiPartial | partial:m2143_5 | +| ir.cpp:2143:32:2143:32 | ChiPartial | partial:m2143_7 | +| ir.cpp:2143:32:2143:32 | ChiTotal | total:m2141_6 | +| ir.cpp:2143:32:2143:32 | ChiTotal | total:m2143_2 | +| ir.cpp:2143:32:2143:32 | SideEffect | ~m2141_6 | +| ir.cpp:2143:35:2143:35 | Address | &:r2143_9 | +| ir.cpp:2143:35:2143:35 | Condition | r2143_11 | +| ir.cpp:2143:35:2143:35 | Load | m2136_8 | +| ir.cpp:2143:35:2143:35 | Unary | r2143_10 | +| ir.cpp:2145:11:2145:11 | Address | &:r2145_1 | +| ir.cpp:2145:11:2145:11 | Address | &:r2145_1 | +| ir.cpp:2145:11:2145:11 | Arg(this) | this:r2145_1 | +| ir.cpp:2145:11:2145:11 | ChiPartial | partial:m2145_8 | +| ir.cpp:2145:11:2145:11 | ChiTotal | total:m2143_8 | +| ir.cpp:2145:11:2145:11 | SideEffect | m2143_8 | +| ir.cpp:2145:13:2145:17 | CallTarget | func:r2145_2 | +| ir.cpp:2145:13:2145:17 | ChiPartial | partial:m2145_5 | +| ir.cpp:2145:13:2145:17 | ChiTotal | total:m2143_6 | +| ir.cpp:2145:13:2145:17 | SideEffect | ~m2143_6 | +| ir.cpp:2145:19:2145:21 | Arg(0) | 0:r2145_3 | +| ir.cpp:2148:11:2148:11 | Address | &:r2148_1 | +| ir.cpp:2148:11:2148:11 | Address | &:r2148_1 | +| ir.cpp:2148:11:2148:11 | Arg(this) | this:r2148_1 | +| ir.cpp:2148:11:2148:11 | ChiPartial | partial:m2148_8 | +| ir.cpp:2148:11:2148:11 | ChiTotal | total:m2143_8 | +| ir.cpp:2148:11:2148:11 | SideEffect | m2143_8 | +| ir.cpp:2148:13:2148:17 | CallTarget | func:r2148_2 | +| ir.cpp:2148:13:2148:17 | ChiPartial | partial:m2148_5 | +| ir.cpp:2148:13:2148:17 | ChiTotal | total:m2143_6 | +| ir.cpp:2148:13:2148:17 | SideEffect | ~m2143_6 | +| ir.cpp:2148:19:2148:21 | Arg(0) | 0:r2148_3 | +| ir.cpp:2150:5:2150:5 | Phi | from 4:~m2145_6 | +| ir.cpp:2150:5:2150:5 | Phi | from 5:~m2148_6 | +| ir.cpp:2152:25:2152:25 | Address | &:r2152_1 | +| ir.cpp:2152:25:2152:25 | Address | &:r2152_1 | +| ir.cpp:2152:25:2152:25 | Arg(this) | this:r2152_1 | +| ir.cpp:2152:25:2152:25 | CallTarget | func:r2152_3 | +| ir.cpp:2152:25:2152:25 | ChiPartial | partial:m2152_5 | +| ir.cpp:2152:25:2152:25 | ChiPartial | partial:m2152_7 | +| ir.cpp:2152:25:2152:25 | ChiTotal | total:m2150_1 | +| ir.cpp:2152:25:2152:25 | ChiTotal | total:m2152_2 | +| ir.cpp:2152:25:2152:25 | SideEffect | ~m2150_1 | +| ir.cpp:2153:5:2153:5 | Address | &:r2153_1 | +| ir.cpp:2153:5:2153:5 | Address | &:r2153_5 | +| ir.cpp:2153:5:2153:5 | Address | &:r2153_13 | +| ir.cpp:2153:64:2153:64 | Address | &:r2153_31 | +| ir.cpp:2153:68:2153:68 | Address | &:r2153_6 | +| ir.cpp:2153:68:2153:68 | Address | &:r2153_14 | +| ir.cpp:2153:68:2153:68 | Address | &:r2153_25 | +| ir.cpp:2153:68:2153:68 | Address | &:r2153_34 | +| ir.cpp:2153:68:2153:68 | Address | &:r2153_39 | +| ir.cpp:2153:68:2153:68 | Address | &:r2153_39 | +| ir.cpp:2153:68:2153:68 | Arg(0) | 0:r2153_26 | +| ir.cpp:2153:68:2153:68 | Arg(this) | this:r0_2 | +| ir.cpp:2153:68:2153:68 | Arg(this) | this:r0_5 | +| ir.cpp:2153:68:2153:68 | Arg(this) | this:r0_7 | +| ir.cpp:2153:68:2153:68 | Arg(this) | this:r0_9 | +| ir.cpp:2153:68:2153:68 | Arg(this) | this:r2153_39 | +| ir.cpp:2153:68:2153:68 | CallTarget | func:r2153_8 | +| ir.cpp:2153:68:2153:68 | CallTarget | func:r2153_16 | +| ir.cpp:2153:68:2153:68 | CallTarget | func:r2153_24 | +| ir.cpp:2153:68:2153:68 | CallTarget | func:r2153_33 | +| ir.cpp:2153:68:2153:68 | CallTarget | func:r2153_40 | +| ir.cpp:2153:68:2153:68 | ChiPartial | partial:m2153_10 | +| ir.cpp:2153:68:2153:68 | ChiPartial | partial:m2153_18 | +| ir.cpp:2153:68:2153:68 | ChiPartial | partial:m2153_28 | +| ir.cpp:2153:68:2153:68 | ChiPartial | partial:m2153_35 | +| ir.cpp:2153:68:2153:68 | ChiPartial | partial:m2153_42 | +| ir.cpp:2153:68:2153:68 | ChiPartial | partial:m2153_45 | +| ir.cpp:2153:68:2153:68 | ChiTotal | total:m2152_6 | +| ir.cpp:2153:68:2153:68 | ChiTotal | total:m2153_11 | +| ir.cpp:2153:68:2153:68 | ChiTotal | total:m2153_21 | +| ir.cpp:2153:68:2153:68 | ChiTotal | total:m2153_22 | +| ir.cpp:2153:68:2153:68 | ChiTotal | total:m2153_29 | +| ir.cpp:2153:68:2153:68 | ChiTotal | total:m2154_6 | +| ir.cpp:2153:68:2153:68 | Condition | r2153_27 | +| ir.cpp:2153:68:2153:68 | Load | m2153_4 | +| ir.cpp:2153:68:2153:68 | Load | m2153_4 | +| ir.cpp:2153:68:2153:68 | Load | m2153_20 | +| ir.cpp:2153:68:2153:68 | Phi | from 6:m2153_12 | +| ir.cpp:2153:68:2153:68 | Phi | from 6:~m2153_19 | +| ir.cpp:2153:68:2153:68 | Phi | from 8:m2153_46 | +| ir.cpp:2153:68:2153:68 | Phi | from 8:~m2153_43 | +| ir.cpp:2153:68:2153:68 | SideEffect | m2153_21 | +| ir.cpp:2153:68:2153:68 | SideEffect | ~m2152_6 | +| ir.cpp:2153:68:2153:68 | SideEffect | ~m2153_11 | +| ir.cpp:2153:68:2153:68 | SideEffect | ~m2153_22 | +| ir.cpp:2153:68:2153:68 | SideEffect | ~m2153_29 | +| ir.cpp:2153:68:2153:68 | SideEffect | ~m2154_6 | +| ir.cpp:2153:68:2153:68 | StoreValue | r2153_9 | +| ir.cpp:2153:68:2153:68 | StoreValue | r2153_17 | +| ir.cpp:2153:68:2153:68 | Unary | r2153_7 | +| ir.cpp:2153:68:2153:68 | Unary | r2153_15 | +| ir.cpp:2153:68:2153:68 | Unary | r2153_23 | +| ir.cpp:2153:68:2153:68 | Unary | r2153_32 | +| ir.cpp:2153:68:2153:68 | Unary | r2153_41 | +| ir.cpp:2153:68:2153:69 | StoreValue | r2153_3 | +| ir.cpp:2153:68:2153:69 | Unary | r2153_2 | +| ir.cpp:2153:68:2153:70 | Load | ~m2153_36 | +| ir.cpp:2153:68:2153:70 | StoreValue | r2153_37 | +| ir.cpp:2154:7:2154:7 | Address | &:r2154_1 | +| ir.cpp:2154:7:2154:7 | Address | &:r2154_1 | +| ir.cpp:2154:7:2154:7 | Arg(this) | this:r2154_1 | +| ir.cpp:2154:7:2154:7 | ChiPartial | partial:m2154_8 | +| ir.cpp:2154:7:2154:7 | ChiTotal | total:m2153_38 | +| ir.cpp:2154:7:2154:7 | SideEffect | m2153_38 | +| ir.cpp:2154:9:2154:13 | CallTarget | func:r2154_2 | +| ir.cpp:2154:9:2154:13 | ChiPartial | partial:m2154_5 | +| ir.cpp:2154:9:2154:13 | ChiTotal | total:m2153_36 | +| ir.cpp:2154:9:2154:13 | SideEffect | ~m2153_36 | +| ir.cpp:2154:15:2154:17 | Arg(0) | 0:r2154_3 | | perf-regression.cpp:6:3:6:5 | Address | &:r6_5 | | perf-regression.cpp:6:3:6:5 | Address | &:r6_5 | | perf-regression.cpp:6:3:6:5 | Address | &:r6_7 | diff --git a/cpp/ql/test/library-tests/ir/ir/raw_consistency.expected b/cpp/ql/test/library-tests/ir/ir/raw_consistency.expected index c7c7ad6f53a..2b8214652d6 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_consistency.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_consistency.expected @@ -6,10 +6,6 @@ missingOperandType duplicateChiOperand sideEffectWithoutPrimary instructionWithoutSuccessor -| ir.cpp:2138:9:2138:9 | IndirectMayWriteSideEffect: x | Instruction 'IndirectMayWriteSideEffect: x' has no successors in function '$@'. | ir.cpp:2136:6:2136:35 | void initialization_with_destructor(bool, char) | void initialization_with_destructor(bool, char) | -| ir.cpp:2140:39:2140:39 | IndirectMayWriteSideEffect: call to ClassWithDestructor | Instruction 'IndirectMayWriteSideEffect: call to ClassWithDestructor' has no successors in function '$@'. | ir.cpp:2136:6:2136:35 | void initialization_with_destructor(bool, char) | void initialization_with_destructor(bool, char) | -| ir.cpp:2140:42:2140:76 | Constant: initialization_with_destructor_bool | Instruction 'Constant: initialization_with_destructor_bool' has no successors in function '$@'. | ir.cpp:2136:6:2136:35 | void initialization_with_destructor(bool, char) | void initialization_with_destructor(bool, char) | -| ir.cpp:2141:9:2141:9 | IndirectMayWriteSideEffect: x | Instruction 'IndirectMayWriteSideEffect: x' has no successors in function '$@'. | ir.cpp:2136:6:2136:35 | void initialization_with_destructor(bool, char) | void initialization_with_destructor(bool, char) | ambiguousSuccessors unexplainedLoop unnecessaryPhiInstruction diff --git a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected index 6ef4a69e0db..852241041c3 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected @@ -11804,18 +11804,30 @@ ir.cpp: # 2137| r2137_7(glval) = VariableAddress[b] : # 2137| r2137_8(bool) = Load[b] : &:r2137_7, ~m? # 2137| v2137_9(void) = ConditionalBranch : r2137_8 -#-----| True -> Block 4 +#-----| False -> Block 2 +#-----| True -> Block 1 -# 2140| Block 1 -# 2140| r2140_1(bool) = Constant[1] : +# 2138| Block 1 +# 2138| r2138_1(glval) = VariableAddress[x] : +# 2138| r2138_2(glval) = FunctionAddress[set_x] : +# 2138| r2138_3(char) = Constant[97] : +# 2138| v2138_4(void) = Call[set_x] : func:r2138_2, this:r2138_1, 0:r2138_3 +# 2138| mu2138_5(unknown) = ^CallSideEffect : ~m? +# 2138| v2138_6(void) = ^IndirectReadSideEffect[-1] : &:r2138_1, ~m? +# 2138| mu2138_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2138_1 +#-----| Goto -> Block 2 # 2140| Block 2 -# 2140| r2140_2(glval) = VariableAddress[x] : -# 2140| mu2140_3(ClassWithDestructor) = Uninitialized[x] : &:r2140_2 -# 2140| r2140_4(glval) = FunctionAddress[ClassWithDestructor] : -# 2140| v2140_5(void) = Call[ClassWithDestructor] : func:r2140_4, this:r2140_2 -# 2140| mu2140_6(unknown) = ^CallSideEffect : ~m? -# 2140| mu2140_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2140_2 +# 2140| r2140_1(glval) = VariableAddress[x] : +# 2140| mu2140_2(ClassWithDestructor) = Uninitialized[x] : &:r2140_1 +# 2140| r2140_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2140| v2140_4(void) = Call[ClassWithDestructor] : func:r2140_3, this:r2140_1 +# 2140| mu2140_5(unknown) = ^CallSideEffect : ~m? +# 2140| mu2140_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2140_1 +# 2140| r2140_7(bool) = Constant[1] : +# 2140| v2140_8(void) = ConditionalBranch : r2140_7 +#-----| False -> Block 4 +#-----| True -> Block 3 # 2141| Block 3 # 2141| r2141_1(glval) = VariableAddress[x] : @@ -11825,17 +11837,9 @@ ir.cpp: # 2141| mu2141_5(unknown) = ^CallSideEffect : ~m? # 2141| v2141_6(void) = ^IndirectReadSideEffect[-1] : &:r2141_1, ~m? # 2141| mu2141_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2141_1 +#-----| Goto -> Block 4 -# 2138| Block 4 -# 2138| r2138_1(glval) = VariableAddress[x] : -# 2138| r2138_2(glval) = FunctionAddress[set_x] : -# 2138| r2138_3(char) = Constant[97] : -# 2138| v2138_4(void) = Call[set_x] : func:r2138_2, this:r2138_1, 0:r2138_3 -# 2138| mu2138_5(unknown) = ^CallSideEffect : ~m? -# 2138| v2138_6(void) = ^IndirectReadSideEffect[-1] : &:r2138_1, ~m? -# 2138| mu2138_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2138_1 - -# 2143| Block 5 +# 2143| Block 4 # 2143| r2143_1(glval) = VariableAddress[x] : # 2143| mu2143_2(ClassWithDestructor) = Uninitialized[x] : &:r2143_1 # 2143| r2143_3(glval) = FunctionAddress[ClassWithDestructor] : @@ -11846,10 +11850,10 @@ ir.cpp: # 2143| r2143_8(char) = Load[c] : &:r2143_7, ~m? # 2143| r2143_9(int) = Convert : r2143_8 # 2143| v2143_10(void) = Switch : r2143_9 -#-----| Case[97] -> Block 6 -#-----| Default -> Block 7 +#-----| Case[97] -> Block 5 +#-----| Default -> Block 6 -# 2144| Block 6 +# 2144| Block 5 # 2144| v2144_1(void) = NoOp : # 2145| r2145_1(glval) = VariableAddress[x] : # 2145| r2145_2(glval) = FunctionAddress[set_x] : @@ -11859,9 +11863,9 @@ ir.cpp: # 2145| v2145_6(void) = ^IndirectReadSideEffect[-1] : &:r2145_1, ~m? # 2145| mu2145_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2145_1 # 2146| v2146_1(void) = NoOp : -#-----| Goto -> Block 8 +#-----| Goto -> Block 7 -# 2147| Block 7 +# 2147| Block 6 # 2147| v2147_1(void) = NoOp : # 2148| r2148_1(glval) = VariableAddress[x] : # 2148| r2148_2(glval) = FunctionAddress[set_x] : @@ -11871,9 +11875,9 @@ ir.cpp: # 2148| v2148_6(void) = ^IndirectReadSideEffect[-1] : &:r2148_1, ~m? # 2148| mu2148_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2148_1 # 2149| v2149_1(void) = NoOp : -#-----| Goto -> Block 8 +#-----| Goto -> Block 7 -# 2150| Block 8 +# 2150| Block 7 # 2150| v2150_1(void) = NoOp : # 2152| r2152_1(glval) = VariableAddress[x] : # 2152| mu2152_2(ClassWithDestructor) = Uninitialized[x] : &:r2152_1 @@ -11905,9 +11909,9 @@ ir.cpp: # 2153| mu2153_17(unknown) = ^CallSideEffect : ~m? #-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, ~m? # 2153| mu2153_18(iterator) = Store[(__end)] : &:r2153_12, r2153_16 -#-----| Goto -> Block 9 +#-----| Goto -> Block 8 -# 2153| Block 9 +# 2153| Block 8 # 2153| r2153_19(glval) = VariableAddress[(__begin)] : #-----| r0_7(glval) = Convert : r2153_19 # 2153| r2153_20(glval) = FunctionAddress[operator!=] : @@ -11917,10 +11921,10 @@ ir.cpp: # 2153| mu2153_24(unknown) = ^CallSideEffect : ~m? #-----| v0_8(void) = ^IndirectReadSideEffect[-1] : &:r0_7, ~m? # 2153| v2153_25(void) = ConditionalBranch : r2153_23 -#-----| False -> Block 11 -#-----| True -> Block 10 +#-----| False -> Block 10 +#-----| True -> Block 9 -# 2153| Block 10 +# 2153| Block 9 # 2153| r2153_26(glval) = VariableAddress[y] : # 2153| r2153_27(glval) = VariableAddress[(__begin)] : #-----| r0_9(glval) = Convert : r2153_27 @@ -11944,9 +11948,9 @@ ir.cpp: # 2153| v2153_37(void) = ^IndirectReadSideEffect[-1] : &:r2153_33, ~m? # 2153| mu2153_38(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2153_33 # 2153| r2153_39(glval) = CopyValue : r2153_35 -#-----| Goto (back edge) -> Block 9 +#-----| Goto (back edge) -> Block 8 -# 2155| Block 11 +# 2155| Block 10 # 2155| v2155_1(void) = NoOp : # 2136| v2136_8(void) = ReturnVoid : # 2136| v2136_9(void) = AliasedUse : ~m? diff --git a/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency.expected b/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency.expected index bdc0ef3463e..6e9be083ee0 100644 --- a/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency.expected +++ b/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency.expected @@ -6,7 +6,6 @@ missingOperandType duplicateChiOperand sideEffectWithoutPrimary instructionWithoutSuccessor -| ir.cpp:2138:9:2138:9 | IndirectMayWriteSideEffect: x | Instruction 'IndirectMayWriteSideEffect: x' has no successors in function '$@'. | ir.cpp:2136:6:2136:35 | void initialization_with_destructor(bool, char) | void initialization_with_destructor(bool, char) | ambiguousSuccessors unexplainedLoop unnecessaryPhiInstruction @@ -29,4 +28,5 @@ nonUniqueEnclosingIRFunction fieldAddressOnNonPointer thisArgumentIsNonPointer nonUniqueIRVariable +| ir.cpp:2153:68:2153:69 | VariableAddress: ys | Variable address instruction 'VariableAddress: ys' has no associated variable, in function '$@'. | ir.cpp:2136:6:2136:35 | void initialization_with_destructor(bool, char) | void initialization_with_destructor(bool, char) | missingCppType diff --git a/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency_unsound.expected b/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency_unsound.expected index bdc0ef3463e..6e9be083ee0 100644 --- a/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency_unsound.expected +++ b/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency_unsound.expected @@ -6,7 +6,6 @@ missingOperandType duplicateChiOperand sideEffectWithoutPrimary instructionWithoutSuccessor -| ir.cpp:2138:9:2138:9 | IndirectMayWriteSideEffect: x | Instruction 'IndirectMayWriteSideEffect: x' has no successors in function '$@'. | ir.cpp:2136:6:2136:35 | void initialization_with_destructor(bool, char) | void initialization_with_destructor(bool, char) | ambiguousSuccessors unexplainedLoop unnecessaryPhiInstruction @@ -29,4 +28,5 @@ nonUniqueEnclosingIRFunction fieldAddressOnNonPointer thisArgumentIsNonPointer nonUniqueIRVariable +| ir.cpp:2153:68:2153:69 | VariableAddress: ys | Variable address instruction 'VariableAddress: ys' has no associated variable, in function '$@'. | ir.cpp:2136:6:2136:35 | void initialization_with_destructor(bool, char) | void initialization_with_destructor(bool, char) | missingCppType From a2bd45d0cb37663980090bce0ae70cef4e14b6d7 Mon Sep 17 00:00:00 2001 From: erik-krogh Date: Wed, 14 Feb 2024 13:50:27 +0100 Subject: [PATCH 224/378] apply suggestions from code review --- .../security/dataflow/UrlRedirectQuery.qll | 54 ++++++++++--------- .../CWE-601/UrlRedirect/UrlRedirect2.cs | 3 +- 2 files changed, 30 insertions(+), 27 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/UrlRedirectQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/UrlRedirectQuery.qll index 02693107dde..53b4cceb960 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/UrlRedirectQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/UrlRedirectQuery.qll @@ -140,20 +140,24 @@ class LocalUrlSanitizer extends Sanitizer { } /** - * A argument to a call to `List.Contains()` that is a sanitizer for URL redirects. + * An argument to a call to `List.Contains()` that is a sanitizer for URL redirects. */ private predicate isContainsUrlSanitizer(Guard guard, Expr e, AbstractValue v) { - exists(MethodCall method | method = guard | - exists(Method m | m = method.getTarget() | - m.hasName("Contains") and - e = method.getArgument(0) - ) and - v.(AbstractValues::BooleanValue).getValue() = true - ) + guard = + any(MethodCall method | + exists(Method m | m = method.getTarget() | + m.hasName("Contains") and + e = method.getArgument(0) + ) and + v.(AbstractValues::BooleanValue).getValue() = true + ) } /** - * A URL argument to a call to `List.Contains()` that is a sanitizer for URL redirects. + * An URL argument to a call to `.Contains()` that is a sanitizer for URL redirects. + * + * This `Contains` method is usually called on a list, but the sanitizer matches any call to a method + * called `Contains`, so other methods with the same name will also be considered sanitizers. */ class ContainsUrlSanitizer extends Sanitizer { ContainsUrlSanitizer() { @@ -165,12 +169,12 @@ class ContainsUrlSanitizer extends Sanitizer { * A check that the URL is relative, and therefore safe for URL redirects. */ private predicate isRelativeUrlSanitizer(Guard guard, Expr e, AbstractValue v) { - exists(PropertyAccess access | access = guard | - access.getProperty().getName() = "IsAbsoluteUri" and - access.getQualifier().getType().getFullyQualifiedName() = "System.Uri" and - e = access.getQualifier() and - v.(AbstractValues::BooleanValue).getValue() = false - ) + guard = + any(PropertyAccess access | + access.getProperty().hasFullyQualifiedName("System", "Uri", "IsAbsoluteUri") and + e = access.getQualifier() and + v.(AbstractValues::BooleanValue).getValue() = false + ) } /** @@ -187,16 +191,16 @@ class RelativeUrlSanitizer extends Sanitizer { * E.g. `url.Host == "example.org"` */ private predicate isHostComparisonSanitizer(Guard guard, Expr e, AbstractValue v) { - exists(EqualityOperation comparison | comparison = guard | - exists(PropertyAccess access | access = comparison.getAnOperand() | - access.getProperty().getName() = "Host" and - access.getQualifier().getType().getFullyQualifiedName() = "System.Uri" and - e = access.getQualifier() - ) and - if comparison instanceof EQExpr - then v.(AbstractValues::BooleanValue).getValue() = true - else v.(AbstractValues::BooleanValue).getValue() = false - ) + guard = + any(EqualityOperation comparison | + exists(PropertyAccess access | access = comparison.getAnOperand() | + access.getProperty().hasFullyQualifiedName("System", "Uri", "Host") and + e = access.getQualifier() + ) and + if comparison instanceof EQExpr + then v.(AbstractValues::BooleanValue).getValue() = true + else v.(AbstractValues::BooleanValue).getValue() = false + ) } /** diff --git a/csharp/ql/test/query-tests/Security Features/CWE-601/UrlRedirect/UrlRedirect2.cs b/csharp/ql/test/query-tests/Security Features/CWE-601/UrlRedirect/UrlRedirect2.cs index 96da2b6e773..83f499ea048 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-601/UrlRedirect/UrlRedirect2.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-601/UrlRedirect/UrlRedirect2.cs @@ -6,14 +6,13 @@ using System.Collections.Generic; public class UrlRedirectHandler2 : IHttpHandler { - private const String VALID_REDIRECT = "http://cwe.mitre.org/data/definitions/601.html"; + private List VALID_REDIRECTS = new List{ "http://cwe.mitre.org/data/definitions/601.html", "http://cwe.mitre.org/data/definitions/79.html" }; public void ProcessRequest(HttpContext ctx) { // BAD: a request parameter is incorporated without validation into a URL redirect ctx.Response.Redirect(ctx.Request.QueryString["page"]); - List VALID_REDIRECTS = new List{ "http://cwe.mitre.org/data/definitions/601.html", "http://cwe.mitre.org/data/definitions/79.html" }; var redirectUrl = ctx.Request.QueryString["page"]; if (VALID_REDIRECTS.Contains(redirectUrl)) { From 7c2465e7b78acafaf4dbfa7c361d4c051e1ea40b Mon Sep 17 00:00:00 2001 From: erik-krogh Date: Wed, 14 Feb 2024 13:53:43 +0100 Subject: [PATCH 225/378] add change-note --- csharp/ql/src/change-notes/2024-02-14-url-sanitizers.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 csharp/ql/src/change-notes/2024-02-14-url-sanitizers.md diff --git a/csharp/ql/src/change-notes/2024-02-14-url-sanitizers.md b/csharp/ql/src/change-notes/2024-02-14-url-sanitizers.md new file mode 100644 index 00000000000..1ac35ed0e89 --- /dev/null +++ b/csharp/ql/src/change-notes/2024-02-14-url-sanitizers.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Added sanitizers for relative URLs, `List.Contains()`, and checking the `.Host` property on an URI to the `cs/web/unvalidated-url-redirection` query. \ No newline at end of file From ad39b8c68b184ff7e5fdbcee66edc126a2ea4ce4 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Wed, 14 Feb 2024 14:43:49 +0100 Subject: [PATCH 226/378] Python: Accept .expected changes --- .../CWE-409/DecompressionBombs.expected | 156 ++++++++++-------- 1 file changed, 84 insertions(+), 72 deletions(-) diff --git a/python/ql/test/experimental/query-tests/Security/CWE-409/DecompressionBombs.expected b/python/ql/test/experimental/query-tests/Security/CWE-409/DecompressionBombs.expected index e8e2f0776ee..88e92e3ce4b 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-409/DecompressionBombs.expected +++ b/python/ql/test/experimental/query-tests/Security/CWE-409/DecompressionBombs.expected @@ -1,73 +1,83 @@ edges -| file:///usr/lib/python3.10/tarfile.py:1850:21:1850:24 | ControlFlowNode for name | file:///usr/lib/python3.10/tarfile.py:1863:32:1863:35 | ControlFlowNode for name | -| file:///usr/lib/python3.10/tarfile.py:1911:21:1911:24 | ControlFlowNode for name | file:///usr/lib/python3.10/tarfile.py:1923:28:1923:42 | ControlFlowNode for BoolExpr | -| file:///usr/lib/python3.10/tarfile.py:2373:24:2373:72 | ControlFlowNode for Attribute() | file:///usr/lib/python3.10/tarfile.py:2373:24:2373:72 | ControlFlowNode for Attribute() | -| file:///usr/lib/python3.10/tarfile.py:2373:24:2373:72 | ControlFlowNode for Attribute() | file:///usr/lib/python3.10/tarfile.py:2373:24:2373:72 | ControlFlowNode for Attribute() | -| file:///usr/lib/python3.10/tarfile.py:2373:24:2373:72 | ControlFlowNode for Attribute() | test.py:23:5:23:52 | ControlFlowNode for Attribute() | -| file:///usr/lib/python3.10/tarfile.py:2373:24:2373:72 | ControlFlowNode for Attribute() | test.py:27:5:27:60 | ControlFlowNode for Attribute() | -| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:10:5:10:52 | ControlFlowNode for Attribute() | -| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:10:21:10:29 | ControlFlowNode for file_path | -| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:11:5:11:48 | ControlFlowNode for Attribute() | -| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:11:21:11:29 | ControlFlowNode for file_path | -| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:14:14:14:29 | ControlFlowNode for Attribute() | -| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:21:5:21:60 | ControlFlowNode for Attribute() | -| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:21:21:21:29 | ControlFlowNode for file_path | -| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:23:5:23:52 | ControlFlowNode for Attribute() | -| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:23:18:23:26 | ControlFlowNode for file_path | -| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:24:5:24:55 | ControlFlowNode for Attribute() | -| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:25:5:25:57 | ControlFlowNode for Attribute() | -| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:25:28:25:36 | ControlFlowNode for file_path | -| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:26:5:26:50 | ControlFlowNode for Attribute() | -| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:26:28:26:36 | ControlFlowNode for file_path | -| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:27:5:27:60 | ControlFlowNode for Attribute() | -| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:27:26:27:34 | ControlFlowNode for file_path | -| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:30:28:30:36 | ControlFlowNode for file_path | -| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:34:27:34:35 | ControlFlowNode for file_path | -| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:38:15:38:23 | ControlFlowNode for file_path | -| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:39:19:39:27 | ControlFlowNode for file_path | -| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:43:14:43:22 | ControlFlowNode for file_path | -| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:44:17:44:25 | ControlFlowNode for file_path | -| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:48:15:48:23 | ControlFlowNode for file_path | -| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:49:19:49:27 | ControlFlowNode for file_path | -| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:53:40:53:48 | ControlFlowNode for file_path | -| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:55:23:55:31 | ControlFlowNode for file_path | -| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:56:21:56:29 | ControlFlowNode for file_path | -| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:58:40:58:48 | ControlFlowNode for file_path | -| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:59:22:59:30 | ControlFlowNode for file_path | -| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:60:21:60:29 | ControlFlowNode for file_path | -| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:61:42:61:50 | ControlFlowNode for file_path | -| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:62:23:62:31 | ControlFlowNode for file_path | -| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:63:36:63:44 | ControlFlowNode for file_path | -| test.py:10:21:10:29 | ControlFlowNode for file_path | file:///usr/lib/python3.10/zipfile.py:1700:14:1700:39 | ControlFlowNode for Attribute() | -| test.py:11:21:11:29 | ControlFlowNode for file_path | file:///usr/lib/python3.10/zipfile.py:1700:14:1700:39 | ControlFlowNode for Attribute() | -| test.py:21:21:21:29 | ControlFlowNode for file_path | file:///usr/lib/python3.10/zipfile.py:1477:14:1477:38 | ControlFlowNode for Attribute() | -| test.py:23:18:23:26 | ControlFlowNode for file_path | file:///usr/lib/python3.10/tarfile.py:2373:24:2373:72 | ControlFlowNode for Attribute() | -| test.py:23:18:23:26 | ControlFlowNode for file_path | file:///usr/lib/python3.10/tarfile.py:2373:24:2373:72 | ControlFlowNode for Attribute() | -| test.py:25:28:25:36 | ControlFlowNode for file_path | file:///usr/lib/python3.10/tarfile.py:1911:21:1911:24 | ControlFlowNode for name | -| test.py:26:28:26:36 | ControlFlowNode for file_path | file:///usr/lib/python3.10/tarfile.py:1850:21:1850:24 | ControlFlowNode for name | -| test.py:27:26:27:34 | ControlFlowNode for file_path | file:///usr/lib/python3.10/tarfile.py:2373:24:2373:72 | ControlFlowNode for Attribute() | -| test.py:27:26:27:34 | ControlFlowNode for file_path | file:///usr/lib/python3.10/tarfile.py:2373:24:2373:72 | ControlFlowNode for Attribute() | -| test.py:30:28:30:36 | ControlFlowNode for file_path | file:///usr/lib/python3.10/tarfile.py:1850:21:1850:24 | ControlFlowNode for name | +| file:///usr/lib/python3.8/tarfile.py:1654:21:1654:24 | ControlFlowNode for name | file:///usr/lib/python3.8/tarfile.py:1667:32:1667:35 | ControlFlowNode for name | provenance | | +| file:///usr/lib/python3.8/tarfile.py:1715:21:1715:24 | ControlFlowNode for name | file:///usr/lib/python3.8/tarfile.py:1727:28:1727:42 | ControlFlowNode for BoolExpr | provenance | | +| file:///usr/lib/python3.8/tarfile.py:2111:24:2111:72 | ControlFlowNode for Attribute() | file:///usr/lib/python3.8/tarfile.py:2111:24:2111:72 | ControlFlowNode for Attribute() | provenance | | +| file:///usr/lib/python3.8/tarfile.py:2111:24:2111:72 | ControlFlowNode for Attribute() | file:///usr/lib/python3.8/tarfile.py:2111:24:2111:72 | ControlFlowNode for Attribute() | provenance | | +| file:///usr/lib/python3.8/tarfile.py:2111:24:2111:72 | ControlFlowNode for Attribute() | test.py:23:5:23:52 | ControlFlowNode for Attribute() | provenance | | +| file:///usr/lib/python3.8/tarfile.py:2111:24:2111:72 | ControlFlowNode for Attribute() | test.py:27:5:27:60 | ControlFlowNode for Attribute() | provenance | | +| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:10:21:10:29 | ControlFlowNode for file_path | provenance | | +| test.py:10:21:10:29 | ControlFlowNode for file_path | file:///usr/lib/python3.8/zipfile.py:1700:14:1700:39 | ControlFlowNode for Attribute() | provenance | | +| test.py:10:21:10:29 | ControlFlowNode for file_path | test.py:10:5:10:52 | ControlFlowNode for Attribute() | provenance | | +| test.py:10:21:10:29 | ControlFlowNode for file_path | test.py:11:21:11:29 | ControlFlowNode for file_path | provenance | | +| test.py:11:21:11:29 | ControlFlowNode for file_path | file:///usr/lib/python3.8/zipfile.py:1700:14:1700:39 | ControlFlowNode for Attribute() | provenance | | +| test.py:11:21:11:29 | ControlFlowNode for file_path | test.py:11:5:11:48 | ControlFlowNode for Attribute() | provenance | | +| test.py:11:21:11:29 | ControlFlowNode for file_path | test.py:13:26:13:34 | ControlFlowNode for file_path | provenance | | +| test.py:13:26:13:34 | ControlFlowNode for file_path | test.py:14:14:14:29 | ControlFlowNode for Attribute() | provenance | | +| test.py:13:26:13:34 | ControlFlowNode for file_path | test.py:17:26:17:34 | ControlFlowNode for file_path | provenance | | +| test.py:17:26:17:34 | ControlFlowNode for file_path | test.py:18:14:18:39 | ControlFlowNode for Attribute() | provenance | | +| test.py:17:26:17:34 | ControlFlowNode for file_path | test.py:21:21:21:29 | ControlFlowNode for file_path | provenance | | +| test.py:21:21:21:29 | ControlFlowNode for file_path | file:///usr/lib/python3.8/zipfile.py:1475:14:1475:38 | ControlFlowNode for Attribute() | provenance | | +| test.py:21:21:21:29 | ControlFlowNode for file_path | test.py:21:5:21:60 | ControlFlowNode for Attribute() | provenance | | +| test.py:21:21:21:29 | ControlFlowNode for file_path | test.py:23:18:23:26 | ControlFlowNode for file_path | provenance | | +| test.py:23:18:23:26 | ControlFlowNode for file_path | file:///usr/lib/python3.8/tarfile.py:2111:24:2111:72 | ControlFlowNode for Attribute() | provenance | | +| test.py:23:18:23:26 | ControlFlowNode for file_path | file:///usr/lib/python3.8/tarfile.py:2111:24:2111:72 | ControlFlowNode for Attribute() | provenance | | +| test.py:23:18:23:26 | ControlFlowNode for file_path | test.py:23:5:23:52 | ControlFlowNode for Attribute() | provenance | | +| test.py:23:18:23:26 | ControlFlowNode for file_path | test.py:24:26:24:34 | ControlFlowNode for file_path | provenance | | +| test.py:24:26:24:34 | ControlFlowNode for file_path | test.py:24:5:24:55 | ControlFlowNode for Attribute() | provenance | | +| test.py:24:26:24:34 | ControlFlowNode for file_path | test.py:25:28:25:36 | ControlFlowNode for file_path | provenance | | +| test.py:25:28:25:36 | ControlFlowNode for file_path | file:///usr/lib/python3.8/tarfile.py:1715:21:1715:24 | ControlFlowNode for name | provenance | | +| test.py:25:28:25:36 | ControlFlowNode for file_path | test.py:25:5:25:57 | ControlFlowNode for Attribute() | provenance | | +| test.py:25:28:25:36 | ControlFlowNode for file_path | test.py:26:28:26:36 | ControlFlowNode for file_path | provenance | | +| test.py:26:28:26:36 | ControlFlowNode for file_path | file:///usr/lib/python3.8/tarfile.py:1654:21:1654:24 | ControlFlowNode for name | provenance | | +| test.py:26:28:26:36 | ControlFlowNode for file_path | file:///usr/lib/python3.8/tarfile.py:2028:13:2029:53 | ControlFlowNode for Attribute() | provenance | | +| test.py:26:28:26:36 | ControlFlowNode for file_path | test.py:26:5:26:50 | ControlFlowNode for Attribute() | provenance | | +| test.py:26:28:26:36 | ControlFlowNode for file_path | test.py:27:26:27:34 | ControlFlowNode for file_path | provenance | | +| test.py:27:26:27:34 | ControlFlowNode for file_path | file:///usr/lib/python3.8/tarfile.py:2111:24:2111:72 | ControlFlowNode for Attribute() | provenance | | +| test.py:27:26:27:34 | ControlFlowNode for file_path | file:///usr/lib/python3.8/tarfile.py:2111:24:2111:72 | ControlFlowNode for Attribute() | provenance | | +| test.py:27:26:27:34 | ControlFlowNode for file_path | test.py:27:5:27:60 | ControlFlowNode for Attribute() | provenance | | +| test.py:27:26:27:34 | ControlFlowNode for file_path | test.py:30:28:30:36 | ControlFlowNode for file_path | provenance | | +| test.py:27:26:27:34 | ControlFlowNode for file_path | test.py:34:27:34:35 | ControlFlowNode for file_path | provenance | | +| test.py:27:26:27:34 | ControlFlowNode for file_path | test.py:38:15:38:23 | ControlFlowNode for file_path | provenance | | +| test.py:27:26:27:34 | ControlFlowNode for file_path | test.py:39:19:39:27 | ControlFlowNode for file_path | provenance | | +| test.py:27:26:27:34 | ControlFlowNode for file_path | test.py:43:14:43:22 | ControlFlowNode for file_path | provenance | | +| test.py:27:26:27:34 | ControlFlowNode for file_path | test.py:44:17:44:25 | ControlFlowNode for file_path | provenance | | +| test.py:27:26:27:34 | ControlFlowNode for file_path | test.py:48:15:48:23 | ControlFlowNode for file_path | provenance | | +| test.py:27:26:27:34 | ControlFlowNode for file_path | test.py:49:19:49:27 | ControlFlowNode for file_path | provenance | | +| test.py:27:26:27:34 | ControlFlowNode for file_path | test.py:53:40:53:48 | ControlFlowNode for file_path | provenance | | +| test.py:27:26:27:34 | ControlFlowNode for file_path | test.py:55:23:55:31 | ControlFlowNode for file_path | provenance | | +| test.py:27:26:27:34 | ControlFlowNode for file_path | test.py:56:21:56:29 | ControlFlowNode for file_path | provenance | | +| test.py:27:26:27:34 | ControlFlowNode for file_path | test.py:58:40:58:48 | ControlFlowNode for file_path | provenance | | +| test.py:27:26:27:34 | ControlFlowNode for file_path | test.py:60:22:60:30 | ControlFlowNode for file_path | provenance | | +| test.py:27:26:27:34 | ControlFlowNode for file_path | test.py:61:21:61:29 | ControlFlowNode for file_path | provenance | | +| test.py:27:26:27:34 | ControlFlowNode for file_path | test.py:62:42:62:50 | ControlFlowNode for file_path | provenance | | +| test.py:27:26:27:34 | ControlFlowNode for file_path | test.py:64:23:64:31 | ControlFlowNode for file_path | provenance | | +| test.py:27:26:27:34 | ControlFlowNode for file_path | test.py:65:36:65:44 | ControlFlowNode for file_path | provenance | | +| test.py:30:28:30:36 | ControlFlowNode for file_path | file:///usr/lib/python3.8/tarfile.py:1654:21:1654:24 | ControlFlowNode for name | provenance | | nodes -| file:///usr/lib/python3.10/tarfile.py:1850:21:1850:24 | ControlFlowNode for name | semmle.label | ControlFlowNode for name | -| file:///usr/lib/python3.10/tarfile.py:1863:32:1863:35 | ControlFlowNode for name | semmle.label | ControlFlowNode for name | -| file:///usr/lib/python3.10/tarfile.py:1911:21:1911:24 | ControlFlowNode for name | semmle.label | ControlFlowNode for name | -| file:///usr/lib/python3.10/tarfile.py:1923:28:1923:42 | ControlFlowNode for BoolExpr | semmle.label | ControlFlowNode for BoolExpr | -| file:///usr/lib/python3.10/tarfile.py:2373:24:2373:72 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | -| file:///usr/lib/python3.10/tarfile.py:2373:24:2373:72 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | -| file:///usr/lib/python3.10/zipfile.py:1477:14:1477:38 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | -| file:///usr/lib/python3.10/zipfile.py:1700:14:1700:39 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| file:///usr/lib/python3.8/tarfile.py:1654:21:1654:24 | ControlFlowNode for name | semmle.label | ControlFlowNode for name | +| file:///usr/lib/python3.8/tarfile.py:1667:32:1667:35 | ControlFlowNode for name | semmle.label | ControlFlowNode for name | +| file:///usr/lib/python3.8/tarfile.py:1715:21:1715:24 | ControlFlowNode for name | semmle.label | ControlFlowNode for name | +| file:///usr/lib/python3.8/tarfile.py:1727:28:1727:42 | ControlFlowNode for BoolExpr | semmle.label | ControlFlowNode for BoolExpr | +| file:///usr/lib/python3.8/tarfile.py:2028:13:2029:53 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| file:///usr/lib/python3.8/tarfile.py:2111:24:2111:72 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| file:///usr/lib/python3.8/tarfile.py:2111:24:2111:72 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| file:///usr/lib/python3.8/zipfile.py:1475:14:1475:38 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| file:///usr/lib/python3.8/zipfile.py:1700:14:1700:39 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | test.py:9:16:9:24 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | | test.py:10:5:10:52 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | test.py:10:21:10:29 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | | test.py:11:5:11:48 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | test.py:11:21:11:29 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| test.py:13:26:13:34 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | | test.py:14:14:14:29 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| test.py:17:26:17:34 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| test.py:18:14:18:39 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | test.py:21:5:21:60 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | test.py:21:21:21:29 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | | test.py:23:5:23:52 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | test.py:23:18:23:26 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | | test.py:24:5:24:55 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| test.py:24:26:24:34 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | | test.py:25:5:25:57 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | test.py:25:28:25:36 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | | test.py:26:5:26:50 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | @@ -86,21 +96,23 @@ nodes | test.py:55:23:55:31 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | | test.py:56:21:56:29 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | | test.py:58:40:58:48 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | -| test.py:59:22:59:30 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | -| test.py:60:21:60:29 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | -| test.py:61:42:61:50 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | -| test.py:62:23:62:31 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | -| test.py:63:36:63:44 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| test.py:60:22:60:30 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| test.py:61:21:61:29 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| test.py:62:42:62:50 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| test.py:64:23:64:31 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| test.py:65:36:65:44 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | subpaths #select -| file:///usr/lib/python3.10/tarfile.py:1863:32:1863:35 | ControlFlowNode for name | test.py:9:16:9:24 | ControlFlowNode for file_path | file:///usr/lib/python3.10/tarfile.py:1863:32:1863:35 | ControlFlowNode for name | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | -| file:///usr/lib/python3.10/tarfile.py:1923:28:1923:42 | ControlFlowNode for BoolExpr | test.py:9:16:9:24 | ControlFlowNode for file_path | file:///usr/lib/python3.10/tarfile.py:1923:28:1923:42 | ControlFlowNode for BoolExpr | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | -| file:///usr/lib/python3.10/tarfile.py:2373:24:2373:72 | ControlFlowNode for Attribute() | test.py:9:16:9:24 | ControlFlowNode for file_path | file:///usr/lib/python3.10/tarfile.py:2373:24:2373:72 | ControlFlowNode for Attribute() | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | -| file:///usr/lib/python3.10/zipfile.py:1477:14:1477:38 | ControlFlowNode for Attribute() | test.py:9:16:9:24 | ControlFlowNode for file_path | file:///usr/lib/python3.10/zipfile.py:1477:14:1477:38 | ControlFlowNode for Attribute() | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | -| file:///usr/lib/python3.10/zipfile.py:1700:14:1700:39 | ControlFlowNode for Attribute() | test.py:9:16:9:24 | ControlFlowNode for file_path | file:///usr/lib/python3.10/zipfile.py:1700:14:1700:39 | ControlFlowNode for Attribute() | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | +| file:///usr/lib/python3.8/tarfile.py:1667:32:1667:35 | ControlFlowNode for name | test.py:9:16:9:24 | ControlFlowNode for file_path | file:///usr/lib/python3.8/tarfile.py:1667:32:1667:35 | ControlFlowNode for name | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | +| file:///usr/lib/python3.8/tarfile.py:1727:28:1727:42 | ControlFlowNode for BoolExpr | test.py:9:16:9:24 | ControlFlowNode for file_path | file:///usr/lib/python3.8/tarfile.py:1727:28:1727:42 | ControlFlowNode for BoolExpr | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | +| file:///usr/lib/python3.8/tarfile.py:2028:13:2029:53 | ControlFlowNode for Attribute() | test.py:9:16:9:24 | ControlFlowNode for file_path | file:///usr/lib/python3.8/tarfile.py:2028:13:2029:53 | ControlFlowNode for Attribute() | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | +| file:///usr/lib/python3.8/tarfile.py:2111:24:2111:72 | ControlFlowNode for Attribute() | test.py:9:16:9:24 | ControlFlowNode for file_path | file:///usr/lib/python3.8/tarfile.py:2111:24:2111:72 | ControlFlowNode for Attribute() | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | +| file:///usr/lib/python3.8/zipfile.py:1475:14:1475:38 | ControlFlowNode for Attribute() | test.py:9:16:9:24 | ControlFlowNode for file_path | file:///usr/lib/python3.8/zipfile.py:1475:14:1475:38 | ControlFlowNode for Attribute() | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | +| file:///usr/lib/python3.8/zipfile.py:1700:14:1700:39 | ControlFlowNode for Attribute() | test.py:9:16:9:24 | ControlFlowNode for file_path | file:///usr/lib/python3.8/zipfile.py:1700:14:1700:39 | ControlFlowNode for Attribute() | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | | test.py:10:5:10:52 | ControlFlowNode for Attribute() | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:10:5:10:52 | ControlFlowNode for Attribute() | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | | test.py:11:5:11:48 | ControlFlowNode for Attribute() | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:11:5:11:48 | ControlFlowNode for Attribute() | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | | test.py:14:14:14:29 | ControlFlowNode for Attribute() | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:14:14:14:29 | ControlFlowNode for Attribute() | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | +| test.py:18:14:18:39 | ControlFlowNode for Attribute() | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:18:14:18:39 | ControlFlowNode for Attribute() | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | | test.py:21:5:21:60 | ControlFlowNode for Attribute() | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:21:5:21:60 | ControlFlowNode for Attribute() | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | | test.py:23:5:23:52 | ControlFlowNode for Attribute() | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:23:5:23:52 | ControlFlowNode for Attribute() | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | | test.py:24:5:24:55 | ControlFlowNode for Attribute() | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:24:5:24:55 | ControlFlowNode for Attribute() | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | @@ -118,8 +130,8 @@ subpaths | test.py:55:23:55:31 | ControlFlowNode for file_path | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:55:23:55:31 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | | test.py:56:21:56:29 | ControlFlowNode for file_path | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:56:21:56:29 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | | test.py:58:40:58:48 | ControlFlowNode for file_path | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:58:40:58:48 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | -| test.py:59:22:59:30 | ControlFlowNode for file_path | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:59:22:59:30 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | -| test.py:60:21:60:29 | ControlFlowNode for file_path | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:60:21:60:29 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | -| test.py:61:42:61:50 | ControlFlowNode for file_path | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:61:42:61:50 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | -| test.py:62:23:62:31 | ControlFlowNode for file_path | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:62:23:62:31 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | -| test.py:63:36:63:44 | ControlFlowNode for file_path | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:63:36:63:44 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | +| test.py:60:22:60:30 | ControlFlowNode for file_path | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:60:22:60:30 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | +| test.py:61:21:61:29 | ControlFlowNode for file_path | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:61:21:61:29 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | +| test.py:62:42:62:50 | ControlFlowNode for file_path | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:62:42:62:50 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | +| test.py:64:23:64:31 | ControlFlowNode for file_path | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:64:23:64:31 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | +| test.py:65:36:65:44 | ControlFlowNode for file_path | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:65:36:65:44 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | From e7772f1062cdb039051061ef7865a98d136c80ea Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Wed, 14 Feb 2024 13:51:59 +0100 Subject: [PATCH 227/378] Python: Use `Unit` class --- .../semmle/python/security/DecompressionBomb.qll | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/python/ql/src/experimental/semmle/python/security/DecompressionBomb.qll b/python/ql/src/experimental/semmle/python/security/DecompressionBomb.qll index c1a29241273..0c0dbc77136 100644 --- a/python/ql/src/experimental/semmle/python/security/DecompressionBomb.qll +++ b/python/ql/src/experimental/semmle/python/security/DecompressionBomb.qll @@ -5,14 +5,13 @@ import semmle.python.ApiGraphs import semmle.python.dataflow.new.RemoteFlowSources import semmle.python.dataflow.new.internal.DataFlowPublic import FileAndFormRemoteFlowSource::FileAndFormRemoteFlowSource +import codeql.util.Unit module DecompressionBomb { /** * The additional taint steps that need for creating taint tracking or dataflow. */ - abstract class AdditionalTaintStep extends string { - AdditionalTaintStep() { this = "AdditionalTaintStep" } - + class AdditionalTaintStep extends Unit { /** * Holds if there is a additional taint step between pred and succ. */ @@ -98,8 +97,6 @@ module ZipFile { * ``` */ class DecompressionAdditionalTaintStep extends DecompressionBomb::AdditionalTaintStep { - DecompressionAdditionalTaintStep() { this = "AdditionalTaintStep" } - override predicate isAdditionalTaintStep(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) { exists(API::Node zipFileInstance | zipFileInstance = zipFileClass() | nodeFrom = @@ -172,8 +169,6 @@ module TarFile { * The Additional taint steps that are necessary for data flow query */ class DecompressionAdditionalTaintStep extends DecompressionBomb::AdditionalTaintStep { - DecompressionAdditionalTaintStep() { this = "AdditionalTaintStep" } - override predicate isAdditionalTaintStep(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) { exists(API::Node tarfileInstance | tarfileInstance = tarfileExtractMember() | nodeFrom = tarfileInstance.getACall().getParameter(0, "name").asSink() and From d8fd457310122351d93cfe856991271afd54c57a Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Wed, 14 Feb 2024 13:52:12 +0100 Subject: [PATCH 228/378] Python: Use helper predicate Since the helper predicate had nice qldocs --- .../semmle/python/security/DecompressionBomb.qll | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/python/ql/src/experimental/semmle/python/security/DecompressionBomb.qll b/python/ql/src/experimental/semmle/python/security/DecompressionBomb.qll index 0c0dbc77136..fbeb4191b2d 100644 --- a/python/ql/src/experimental/semmle/python/security/DecompressionBomb.qll +++ b/python/ql/src/experimental/semmle/python/security/DecompressionBomb.qll @@ -54,12 +54,7 @@ module ZipFile { exists(API::Node zipOpen | zipOpen = zipFileClass().getReturn().getMember("open") | // this open function must reads uncompressed data with buffer // and checks the accumulated size at the end of each read to be called safe - not TaintTracking::localExprTaint(zipOpen - .getReturn() - .getMember("read") - .getParameter(0) - .asSink() - .asExpr(), any(Compare i).getASubExpression*()) and + not zipFileDecompressionBombSanitizer(zipOpen) and this = zipOpen.getACall() ) } From 9ae3ea81ff6ddb4a08910c4d2dc771a71460f646 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Wed, 14 Feb 2024 14:45:32 +0100 Subject: [PATCH 229/378] Python: Remove spurious results in stdlib --- .../python/security/DecompressionBomb.qll | 4 +++ .../CWE-409/DecompressionBombs.expected | 34 ------------------- 2 files changed, 4 insertions(+), 34 deletions(-) diff --git a/python/ql/src/experimental/semmle/python/security/DecompressionBomb.qll b/python/ql/src/experimental/semmle/python/security/DecompressionBomb.qll index fbeb4191b2d..e6bd099c781 100644 --- a/python/ql/src/experimental/semmle/python/security/DecompressionBomb.qll +++ b/python/ql/src/experimental/semmle/python/security/DecompressionBomb.qll @@ -379,6 +379,10 @@ module BombsConfig implements DataFlow::ConfigSig { predicate isSink(DataFlow::Node sink) { sink instanceof DecompressionBomb::Sink } + predicate isBarrierIn(DataFlow::Node node) { + node.getScope().getEnclosingModule().getName() in ["tarfile", "zipfile"] + } + predicate isAdditionalFlowStep(DataFlow::Node pred, DataFlow::Node succ) { ( any(DecompressionBomb::AdditionalTaintStep a).isAdditionalTaintStep(pred, succ) or diff --git a/python/ql/test/experimental/query-tests/Security/CWE-409/DecompressionBombs.expected b/python/ql/test/experimental/query-tests/Security/CWE-409/DecompressionBombs.expected index 88e92e3ce4b..0c1f81c37d4 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-409/DecompressionBombs.expected +++ b/python/ql/test/experimental/query-tests/Security/CWE-409/DecompressionBombs.expected @@ -1,41 +1,24 @@ edges -| file:///usr/lib/python3.8/tarfile.py:1654:21:1654:24 | ControlFlowNode for name | file:///usr/lib/python3.8/tarfile.py:1667:32:1667:35 | ControlFlowNode for name | provenance | | -| file:///usr/lib/python3.8/tarfile.py:1715:21:1715:24 | ControlFlowNode for name | file:///usr/lib/python3.8/tarfile.py:1727:28:1727:42 | ControlFlowNode for BoolExpr | provenance | | -| file:///usr/lib/python3.8/tarfile.py:2111:24:2111:72 | ControlFlowNode for Attribute() | file:///usr/lib/python3.8/tarfile.py:2111:24:2111:72 | ControlFlowNode for Attribute() | provenance | | -| file:///usr/lib/python3.8/tarfile.py:2111:24:2111:72 | ControlFlowNode for Attribute() | file:///usr/lib/python3.8/tarfile.py:2111:24:2111:72 | ControlFlowNode for Attribute() | provenance | | -| file:///usr/lib/python3.8/tarfile.py:2111:24:2111:72 | ControlFlowNode for Attribute() | test.py:23:5:23:52 | ControlFlowNode for Attribute() | provenance | | -| file:///usr/lib/python3.8/tarfile.py:2111:24:2111:72 | ControlFlowNode for Attribute() | test.py:27:5:27:60 | ControlFlowNode for Attribute() | provenance | | | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:10:21:10:29 | ControlFlowNode for file_path | provenance | | -| test.py:10:21:10:29 | ControlFlowNode for file_path | file:///usr/lib/python3.8/zipfile.py:1700:14:1700:39 | ControlFlowNode for Attribute() | provenance | | | test.py:10:21:10:29 | ControlFlowNode for file_path | test.py:10:5:10:52 | ControlFlowNode for Attribute() | provenance | | | test.py:10:21:10:29 | ControlFlowNode for file_path | test.py:11:21:11:29 | ControlFlowNode for file_path | provenance | | -| test.py:11:21:11:29 | ControlFlowNode for file_path | file:///usr/lib/python3.8/zipfile.py:1700:14:1700:39 | ControlFlowNode for Attribute() | provenance | | | test.py:11:21:11:29 | ControlFlowNode for file_path | test.py:11:5:11:48 | ControlFlowNode for Attribute() | provenance | | | test.py:11:21:11:29 | ControlFlowNode for file_path | test.py:13:26:13:34 | ControlFlowNode for file_path | provenance | | | test.py:13:26:13:34 | ControlFlowNode for file_path | test.py:14:14:14:29 | ControlFlowNode for Attribute() | provenance | | | test.py:13:26:13:34 | ControlFlowNode for file_path | test.py:17:26:17:34 | ControlFlowNode for file_path | provenance | | | test.py:17:26:17:34 | ControlFlowNode for file_path | test.py:18:14:18:39 | ControlFlowNode for Attribute() | provenance | | | test.py:17:26:17:34 | ControlFlowNode for file_path | test.py:21:21:21:29 | ControlFlowNode for file_path | provenance | | -| test.py:21:21:21:29 | ControlFlowNode for file_path | file:///usr/lib/python3.8/zipfile.py:1475:14:1475:38 | ControlFlowNode for Attribute() | provenance | | | test.py:21:21:21:29 | ControlFlowNode for file_path | test.py:21:5:21:60 | ControlFlowNode for Attribute() | provenance | | | test.py:21:21:21:29 | ControlFlowNode for file_path | test.py:23:18:23:26 | ControlFlowNode for file_path | provenance | | -| test.py:23:18:23:26 | ControlFlowNode for file_path | file:///usr/lib/python3.8/tarfile.py:2111:24:2111:72 | ControlFlowNode for Attribute() | provenance | | -| test.py:23:18:23:26 | ControlFlowNode for file_path | file:///usr/lib/python3.8/tarfile.py:2111:24:2111:72 | ControlFlowNode for Attribute() | provenance | | | test.py:23:18:23:26 | ControlFlowNode for file_path | test.py:23:5:23:52 | ControlFlowNode for Attribute() | provenance | | | test.py:23:18:23:26 | ControlFlowNode for file_path | test.py:24:26:24:34 | ControlFlowNode for file_path | provenance | | | test.py:24:26:24:34 | ControlFlowNode for file_path | test.py:24:5:24:55 | ControlFlowNode for Attribute() | provenance | | | test.py:24:26:24:34 | ControlFlowNode for file_path | test.py:25:28:25:36 | ControlFlowNode for file_path | provenance | | -| test.py:25:28:25:36 | ControlFlowNode for file_path | file:///usr/lib/python3.8/tarfile.py:1715:21:1715:24 | ControlFlowNode for name | provenance | | | test.py:25:28:25:36 | ControlFlowNode for file_path | test.py:25:5:25:57 | ControlFlowNode for Attribute() | provenance | | | test.py:25:28:25:36 | ControlFlowNode for file_path | test.py:26:28:26:36 | ControlFlowNode for file_path | provenance | | -| test.py:26:28:26:36 | ControlFlowNode for file_path | file:///usr/lib/python3.8/tarfile.py:1654:21:1654:24 | ControlFlowNode for name | provenance | | -| test.py:26:28:26:36 | ControlFlowNode for file_path | file:///usr/lib/python3.8/tarfile.py:2028:13:2029:53 | ControlFlowNode for Attribute() | provenance | | | test.py:26:28:26:36 | ControlFlowNode for file_path | test.py:26:5:26:50 | ControlFlowNode for Attribute() | provenance | | | test.py:26:28:26:36 | ControlFlowNode for file_path | test.py:27:26:27:34 | ControlFlowNode for file_path | provenance | | -| test.py:27:26:27:34 | ControlFlowNode for file_path | file:///usr/lib/python3.8/tarfile.py:2111:24:2111:72 | ControlFlowNode for Attribute() | provenance | | -| test.py:27:26:27:34 | ControlFlowNode for file_path | file:///usr/lib/python3.8/tarfile.py:2111:24:2111:72 | ControlFlowNode for Attribute() | provenance | | | test.py:27:26:27:34 | ControlFlowNode for file_path | test.py:27:5:27:60 | ControlFlowNode for Attribute() | provenance | | -| test.py:27:26:27:34 | ControlFlowNode for file_path | test.py:30:28:30:36 | ControlFlowNode for file_path | provenance | | | test.py:27:26:27:34 | ControlFlowNode for file_path | test.py:34:27:34:35 | ControlFlowNode for file_path | provenance | | | test.py:27:26:27:34 | ControlFlowNode for file_path | test.py:38:15:38:23 | ControlFlowNode for file_path | provenance | | | test.py:27:26:27:34 | ControlFlowNode for file_path | test.py:39:19:39:27 | ControlFlowNode for file_path | provenance | | @@ -52,17 +35,7 @@ edges | test.py:27:26:27:34 | ControlFlowNode for file_path | test.py:62:42:62:50 | ControlFlowNode for file_path | provenance | | | test.py:27:26:27:34 | ControlFlowNode for file_path | test.py:64:23:64:31 | ControlFlowNode for file_path | provenance | | | test.py:27:26:27:34 | ControlFlowNode for file_path | test.py:65:36:65:44 | ControlFlowNode for file_path | provenance | | -| test.py:30:28:30:36 | ControlFlowNode for file_path | file:///usr/lib/python3.8/tarfile.py:1654:21:1654:24 | ControlFlowNode for name | provenance | | nodes -| file:///usr/lib/python3.8/tarfile.py:1654:21:1654:24 | ControlFlowNode for name | semmle.label | ControlFlowNode for name | -| file:///usr/lib/python3.8/tarfile.py:1667:32:1667:35 | ControlFlowNode for name | semmle.label | ControlFlowNode for name | -| file:///usr/lib/python3.8/tarfile.py:1715:21:1715:24 | ControlFlowNode for name | semmle.label | ControlFlowNode for name | -| file:///usr/lib/python3.8/tarfile.py:1727:28:1727:42 | ControlFlowNode for BoolExpr | semmle.label | ControlFlowNode for BoolExpr | -| file:///usr/lib/python3.8/tarfile.py:2028:13:2029:53 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | -| file:///usr/lib/python3.8/tarfile.py:2111:24:2111:72 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | -| file:///usr/lib/python3.8/tarfile.py:2111:24:2111:72 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | -| file:///usr/lib/python3.8/zipfile.py:1475:14:1475:38 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | -| file:///usr/lib/python3.8/zipfile.py:1700:14:1700:39 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | test.py:9:16:9:24 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | | test.py:10:5:10:52 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | test.py:10:21:10:29 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | @@ -84,7 +57,6 @@ nodes | test.py:26:28:26:36 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | | test.py:27:5:27:60 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | test.py:27:26:27:34 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | -| test.py:30:28:30:36 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | | test.py:34:27:34:35 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | | test.py:38:15:38:23 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | | test.py:39:19:39:27 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | @@ -103,12 +75,6 @@ nodes | test.py:65:36:65:44 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | subpaths #select -| file:///usr/lib/python3.8/tarfile.py:1667:32:1667:35 | ControlFlowNode for name | test.py:9:16:9:24 | ControlFlowNode for file_path | file:///usr/lib/python3.8/tarfile.py:1667:32:1667:35 | ControlFlowNode for name | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | -| file:///usr/lib/python3.8/tarfile.py:1727:28:1727:42 | ControlFlowNode for BoolExpr | test.py:9:16:9:24 | ControlFlowNode for file_path | file:///usr/lib/python3.8/tarfile.py:1727:28:1727:42 | ControlFlowNode for BoolExpr | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | -| file:///usr/lib/python3.8/tarfile.py:2028:13:2029:53 | ControlFlowNode for Attribute() | test.py:9:16:9:24 | ControlFlowNode for file_path | file:///usr/lib/python3.8/tarfile.py:2028:13:2029:53 | ControlFlowNode for Attribute() | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | -| file:///usr/lib/python3.8/tarfile.py:2111:24:2111:72 | ControlFlowNode for Attribute() | test.py:9:16:9:24 | ControlFlowNode for file_path | file:///usr/lib/python3.8/tarfile.py:2111:24:2111:72 | ControlFlowNode for Attribute() | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | -| file:///usr/lib/python3.8/zipfile.py:1475:14:1475:38 | ControlFlowNode for Attribute() | test.py:9:16:9:24 | ControlFlowNode for file_path | file:///usr/lib/python3.8/zipfile.py:1475:14:1475:38 | ControlFlowNode for Attribute() | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | -| file:///usr/lib/python3.8/zipfile.py:1700:14:1700:39 | ControlFlowNode for Attribute() | test.py:9:16:9:24 | ControlFlowNode for file_path | file:///usr/lib/python3.8/zipfile.py:1700:14:1700:39 | ControlFlowNode for Attribute() | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | | test.py:10:5:10:52 | ControlFlowNode for Attribute() | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:10:5:10:52 | ControlFlowNode for Attribute() | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | | test.py:11:5:11:48 | ControlFlowNode for Attribute() | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:11:5:11:48 | ControlFlowNode for Attribute() | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | | test.py:14:14:14:29 | ControlFlowNode for Attribute() | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:14:14:14:29 | ControlFlowNode for Attribute() | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | From ba7dd38fc9171894caa715496243aaa642fc2b78 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Wed, 14 Feb 2024 14:48:37 +0100 Subject: [PATCH 230/378] Python: Delete duplicated file --- .../CWE-409/FileAndFormRemoteFlowSource.qll | 63 ------------------- 1 file changed, 63 deletions(-) delete mode 100644 python/ql/src/experimental/Security/CWE-409/FileAndFormRemoteFlowSource.qll diff --git a/python/ql/src/experimental/Security/CWE-409/FileAndFormRemoteFlowSource.qll b/python/ql/src/experimental/Security/CWE-409/FileAndFormRemoteFlowSource.qll deleted file mode 100644 index ae9691d77e1..00000000000 --- a/python/ql/src/experimental/Security/CWE-409/FileAndFormRemoteFlowSource.qll +++ /dev/null @@ -1,63 +0,0 @@ -import python -import semmle.python.dataflow.new.DataFlow -import semmle.python.dataflow.new.TaintTracking -import semmle.python.ApiGraphs - -/** - * Provides user-controllable Remote sources for file(s) upload and Multipart-Form - */ -module FileAndFormRemoteFlowSource { - /** - * A - */ - class FastAPI extends DataFlow::Node { - FastAPI() { - exists(API::Node fastApiParam, Expr fastApiUploadFile | - fastApiParam = - API::moduleImport("fastapi") - .getMember("FastAPI") - .getReturn() - .getMember("post") - .getReturn() - .getParameter(0) - .getKeywordParameter(_) and - fastApiUploadFile = - API::moduleImport("fastapi") - .getMember("UploadFile") - .getASubclass*() - .getAValueReachableFromSource() - .asExpr() - | - // Multiple uploaded files as list of fastapi.UploadFile - // @app.post("/") - // def upload(files: List[UploadFile] = File(...)): - // for file in files: - fastApiUploadFile = - fastApiParam.asSource().asExpr().(Parameter).getAnnotation().getASubExpression*() and - exists(For f, Attribute attr | - fastApiParam.getAValueReachableFromSource().asExpr() = f.getIter().getASubExpression*() - | - TaintTracking::localExprTaint(f.getIter(), attr.getObject()) and - attr.getName() = ["filename", "content_type", "headers", "file", "read"] and - this.asExpr() = attr - ) - or - // One uploaded file as fastapi.UploadFile - // @app.post("/zipbomb2") - // async def zipbomb2(file: UploadFile): - // print(file.filename) - this = - [ - fastApiParam.getMember(["filename", "content_type", "headers"]).asSource(), - fastApiParam - .getMember("file") - .getMember(["readlines", "readline", "read"]) - .getReturn() - .asSource(), fastApiParam.getMember("read").getReturn().asSource() - ] - ) - } - - string getSourceType() { result = "fastapi HTTP FORM files" } - } -} From 69c8ef9898fd75d8de6d484d20f8e430e9f4acf6 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Wed, 14 Feb 2024 14:52:37 +0100 Subject: [PATCH 231/378] Python: Use dataflow instead of taint-tracking --- .../experimental/semmle/python/security/DecompressionBomb.qll | 4 ++-- .../semmle/python/security/FileAndFormRemoteFlowSource.qll | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/python/ql/src/experimental/semmle/python/security/DecompressionBomb.qll b/python/ql/src/experimental/semmle/python/security/DecompressionBomb.qll index e6bd099c781..b21b209cbc3 100644 --- a/python/ql/src/experimental/semmle/python/security/DecompressionBomb.qll +++ b/python/ql/src/experimental/semmle/python/security/DecompressionBomb.qll @@ -73,8 +73,8 @@ module ZipFile { * ``` */ predicate zipFileDecompressionBombSanitizer(API::Node n) { - TaintTracking::localExprTaint(n.getReturn().getMember("read").getParameter(0).asSink().asExpr(), - any(Compare i).getASubExpression*()) + DataFlow::localFlow(n.getReturn().getMember("read").getParameter(0).asSink(), + DataFlow::exprNode(any(Compare i).getASubExpression*())) } /** diff --git a/python/ql/src/experimental/semmle/python/security/FileAndFormRemoteFlowSource.qll b/python/ql/src/experimental/semmle/python/security/FileAndFormRemoteFlowSource.qll index ae9691d77e1..352d44dc480 100644 --- a/python/ql/src/experimental/semmle/python/security/FileAndFormRemoteFlowSource.qll +++ b/python/ql/src/experimental/semmle/python/security/FileAndFormRemoteFlowSource.qll @@ -37,7 +37,7 @@ module FileAndFormRemoteFlowSource { exists(For f, Attribute attr | fastApiParam.getAValueReachableFromSource().asExpr() = f.getIter().getASubExpression*() | - TaintTracking::localExprTaint(f.getIter(), attr.getObject()) and + DataFlow::localFlow(DataFlow::exprNode(f.getIter()), DataFlow::exprNode(attr.getObject())) and attr.getName() = ["filename", "content_type", "headers", "file", "read"] and this.asExpr() = attr ) From e5bd6330283766fe078654c1ff37940d925bdc25 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Wed, 14 Feb 2024 14:54:25 +0100 Subject: [PATCH 232/378] Python: Change name/id to `Decompression Bomb` The old title/id matches how we used to write queries, but I think just using the normal conversational name is easier for everyone :) --- .../src/experimental/Security/CWE-409/DecompressionBombs.ql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python/ql/src/experimental/Security/CWE-409/DecompressionBombs.ql b/python/ql/src/experimental/Security/CWE-409/DecompressionBombs.ql index 0670f92e81c..ade92eda7d9 100644 --- a/python/ql/src/experimental/Security/CWE-409/DecompressionBombs.ql +++ b/python/ql/src/experimental/Security/CWE-409/DecompressionBombs.ql @@ -1,11 +1,11 @@ /** - * @name Uncontrolled file decompression + * @name Decompression Bomb * @description Uncontrolled data that flows into decompression library APIs without checking the compression rate is dangerous * @kind path-problem * @problem.severity error * @security-severity 7.8 * @precision high - * @id py/uncontrolled-file-decompression + * @id py/decompression-bomb * @tags security * experimental * external/cwe/cwe-409 From 33413129a514f659a7568ef5de363d0f52f23b88 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Wed, 14 Feb 2024 10:14:04 +0100 Subject: [PATCH 233/378] C++: For unnamed local variable declaration entries consider the name of the variable --- cpp/ql/lib/semmle/code/cpp/Variable.qll | 11 +++++++- .../library-tests/ir/ir/PrintAST.expected | 28 +++++++++---------- .../dataflow-ir-consistency.expected | 26 ----------------- 3 files changed, 24 insertions(+), 41 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/Variable.qll b/cpp/ql/lib/semmle/code/cpp/Variable.qll index 0f66c0f51d4..db334f45572 100644 --- a/cpp/ql/lib/semmle/code/cpp/Variable.qll +++ b/cpp/ql/lib/semmle/code/cpp/Variable.qll @@ -234,7 +234,16 @@ class VariableDeclarationEntry extends DeclarationEntry, @var_decl { * int f(int y) { return y; } * ``` */ - override string getName() { var_decls(underlyingElement(this), _, _, result, _) and result != "" } + override string getName() { + exists(string name | + var_decls(underlyingElement(this), _, _, name, _) and + ( + name != "" and result = name + or + name = "" and result = this.getVariable().(LocalVariable).getName() + ) + ) + } /** * Gets the type of the variable which is being declared or defined. diff --git a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected index 79eb2dc70f2..24ff484b9ec 100644 --- a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected +++ b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected @@ -9479,7 +9479,7 @@ ir.cpp: # 1079| getEntryPoint(): [BlockStmt] { ... } # 1080| getStmt(0): [RangeBasedForStmt] for(...:...) ... # 1080| getChild(0): [DeclStmt] declaration -# 1080| getDeclarationEntry(0): (no string representation) +# 1080| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__range) # 1080| Type = [LValueReferenceType] const vector & #-----| getVariable().getInitializer(): [Initializer] initializer for (__range) # 1080| getExpr(): [VariableAccess] v @@ -9492,7 +9492,7 @@ ir.cpp: # 1080| Type = [SpecifiedType] const vector # 1080| ValueCategory = lvalue # 1080| getBeginEndDeclaration(): [DeclStmt] declaration -# 1080| getDeclarationEntry(0): (no string representation) +# 1080| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__begin) # 1080| Type = [NestedStruct] iterator #-----| getVariable().getInitializer(): [Initializer] initializer for (__begin) # 1080| getExpr(): [FunctionCall] call to begin @@ -9504,7 +9504,7 @@ ir.cpp: #-----| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) #-----| Type = [SpecifiedType] const vector #-----| ValueCategory = lvalue -# 1080| getDeclarationEntry(1): (no string representation) +# 1080| getDeclarationEntry(1): [VariableDeclarationEntry] declaration of (__end) # 1080| Type = [NestedStruct] iterator #-----| getVariable().getInitializer(): [Initializer] initializer for (__end) # 1080| getExpr(): [FunctionCall] call to end @@ -9572,7 +9572,7 @@ ir.cpp: # 1080| ValueCategory = lvalue # 1086| getStmt(1): [RangeBasedForStmt] for(...:...) ... # 1086| getChild(0): [DeclStmt] declaration -# 1086| getDeclarationEntry(0): (no string representation) +# 1086| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__range) # 1086| Type = [LValueReferenceType] const vector & #-----| getVariable().getInitializer(): [Initializer] initializer for (__range) # 1086| getExpr(): [VariableAccess] v @@ -9585,7 +9585,7 @@ ir.cpp: # 1086| Type = [SpecifiedType] const vector # 1086| ValueCategory = lvalue # 1086| getBeginEndDeclaration(): [DeclStmt] declaration -# 1086| getDeclarationEntry(0): (no string representation) +# 1086| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__begin) # 1086| Type = [NestedStruct] iterator #-----| getVariable().getInitializer(): [Initializer] initializer for (__begin) # 1086| getExpr(): [FunctionCall] call to begin @@ -9597,7 +9597,7 @@ ir.cpp: #-----| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) #-----| Type = [SpecifiedType] const vector #-----| ValueCategory = lvalue -# 1086| getDeclarationEntry(1): (no string representation) +# 1086| getDeclarationEntry(1): [VariableDeclarationEntry] declaration of (__end) # 1086| Type = [NestedStruct] iterator #-----| getVariable().getInitializer(): [Initializer] initializer for (__end) # 1086| getExpr(): [FunctionCall] call to end @@ -11814,7 +11814,7 @@ ir.cpp: # 1465| ValueCategory = prvalue # 1467| getStmt(1): [BlockStmt] { ... } # 1468| getStmt(0): [DeclStmt] declaration -# 1468| getDeclarationEntry(0): (no string representation) +# 1468| getDeclarationEntry(0): [VariableDeclarationEntry] definition of (unnamed local variable) # 1468| Type = [LValueReferenceType] int(&)[2] # 1468| getVariable().getInitializer(): [Initializer] initializer for (unnamed local variable) # 1468| getExpr(): [VariableAccess] xs @@ -12160,7 +12160,7 @@ ir.cpp: # 1502| ValueCategory = prvalue # 1504| getStmt(1): [BlockStmt] { ... } # 1505| getStmt(0): [DeclStmt] declaration -# 1505| getDeclarationEntry(0): (no string representation) +# 1505| getDeclarationEntry(0): [VariableDeclarationEntry] definition of (unnamed local variable) # 1505| Type = [Struct] StructuredBindingDataMemberStruct # 1505| getVariable().getInitializer(): [Initializer] initializer for (unnamed local variable) # 1505| getExpr(): [VariableAccess] s @@ -12645,7 +12645,7 @@ ir.cpp: # 1582| ValueCategory = prvalue # 1584| getStmt(1): [BlockStmt] { ... } # 1585| getStmt(0): [DeclStmt] declaration -# 1585| getDeclarationEntry(0): (no string representation) +# 1585| getDeclarationEntry(0): [VariableDeclarationEntry] definition of (unnamed local variable) # 1585| Type = [Struct] StructuredBindingTupleRefGet # 1585| getVariable().getInitializer(): [Initializer] initializer for (unnamed local variable) # 1585| getExpr(): [VariableAccess] t @@ -13010,7 +13010,7 @@ ir.cpp: # 1648| ValueCategory = prvalue # 1650| getStmt(1): [BlockStmt] { ... } # 1651| getStmt(0): [DeclStmt] declaration -# 1651| getDeclarationEntry(0): (no string representation) +# 1651| getDeclarationEntry(0): [VariableDeclarationEntry] definition of (unnamed local variable) # 1651| Type = [LValueReferenceType] StructuredBindingTupleNoRefGet & # 1651| getVariable().getInitializer(): [Initializer] initializer for (unnamed local variable) # 1651| getExpr(): [VariableAccess] t @@ -13309,7 +13309,7 @@ ir.cpp: # 1675| Value = [Literal] 2 # 1675| ValueCategory = prvalue # 1676| getStmt(1): [DeclStmt] declaration -# 1676| getDeclarationEntry(0): (no string representation) +# 1676| getDeclarationEntry(0): [VariableDeclarationEntry] definition of (unnamed local variable) # 1676| Type = [ArrayType] int[2] # 1676| getVariable().getInitializer(): [Initializer] initializer for (unnamed local variable) # 1676| getExpr(): [VariableAccess] xs @@ -16521,7 +16521,7 @@ ir.cpp: # 2152| ValueCategory = prvalue # 2153| getStmt(5): [RangeBasedForStmt] for(...:...) ... # 2153| getChild(0): [DeclStmt] declaration -# 2153| getDeclarationEntry(0): (no string representation) +# 2153| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__range) # 2153| Type = [LValueReferenceType] vector & #-----| getVariable().getInitializer(): [Initializer] initializer for (__range) # 2153| getExpr(): [VariableAccess] ys @@ -16531,7 +16531,7 @@ ir.cpp: # 2153| Type = [LValueReferenceType] vector & # 2153| ValueCategory = prvalue # 2153| getBeginEndDeclaration(): [DeclStmt] declaration -# 2153| getDeclarationEntry(0): (no string representation) +# 2153| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__begin) # 2153| Type = [NestedStruct] iterator #-----| getVariable().getInitializer(): [Initializer] initializer for (__begin) # 2153| getExpr(): [FunctionCall] call to begin @@ -16547,7 +16547,7 @@ ir.cpp: #-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) #-----| Type = [ClassTemplateInstantiation,Struct] vector #-----| ValueCategory = lvalue -# 2153| getDeclarationEntry(1): (no string representation) +# 2153| getDeclarationEntry(1): [VariableDeclarationEntry] declaration of (__end) # 2153| Type = [NestedStruct] iterator #-----| getVariable().getInitializer(): [Initializer] initializer for (__end) # 2153| getExpr(): [FunctionCall] call to end diff --git a/cpp/ql/test/library-tests/syntax-zoo/dataflow-ir-consistency.expected b/cpp/ql/test/library-tests/syntax-zoo/dataflow-ir-consistency.expected index 0cbb9a11f67..2a8d7ad25bd 100644 --- a/cpp/ql/test/library-tests/syntax-zoo/dataflow-ir-consistency.expected +++ b/cpp/ql/test/library-tests/syntax-zoo/dataflow-ir-consistency.expected @@ -5,37 +5,11 @@ uniqueNodeLocation missingLocation uniqueNodeToString | builtin.c:5:5:5:11 | (no string representation) | Node should have one toString but has 0. | -| cpp11.cpp:6:5:6:5 | (no string representation) | Node should have one toString but has 0. | -| cpp11.cpp:6:5:6:5 | (no string representation) | Node should have one toString but has 0. | -| cpp11.cpp:6:5:6:5 | (no string representation) | Node should have one toString but has 0. | -| cpp11.cpp:6:5:6:5 | (no string representation) | Node should have one toString but has 0. | -| cpp11.cpp:6:5:6:5 | (no string representation) | Node should have one toString but has 0. | -| cpp11.cpp:6:5:6:5 | (no string representation) | Node should have one toString but has 0. | -| cpp11.cpp:6:5:6:5 | (no string representation) | Node should have one toString but has 0. | -| cpp11.cpp:6:5:6:5 | (no string representation) | Node should have one toString but has 0. | -| cpp11.cpp:6:5:6:5 | (no string representation) | Node should have one toString but has 0. | -| cpp11.cpp:6:5:6:5 | (no string representation) | Node should have one toString but has 0. | -| cpp11.cpp:28:5:28:5 | (no string representation) | Node should have one toString but has 0. | -| cpp11.cpp:28:5:28:5 | (no string representation) | Node should have one toString but has 0. | -| cpp11.cpp:28:5:28:5 | (no string representation) | Node should have one toString but has 0. | -| cpp11.cpp:28:5:28:5 | (no string representation) | Node should have one toString but has 0. | -| cpp11.cpp:28:5:28:5 | (no string representation) | Node should have one toString but has 0. | -| cpp11.cpp:28:5:28:5 | (no string representation) | Node should have one toString but has 0. | -| cpp11.cpp:28:5:28:5 | (no string representation) | Node should have one toString but has 0. | | misc.c:227:7:227:28 | (no string representation) | Node should have one toString but has 0. | | static_init_templates.cpp:80:18:80:23 | (no string representation) | Node should have one toString but has 0. | | static_init_templates.cpp:80:18:80:23 | (no string representation) | Node should have one toString but has 0. | | static_init_templates.cpp:89:18:89:23 | (no string representation) | Node should have one toString but has 0. | | static_init_templates.cpp:89:18:89:23 | (no string representation) | Node should have one toString but has 0. | -| stream_it.cpp:11:3:11:3 | (no string representation) | Node should have one toString but has 0. | -| stream_it.cpp:11:3:11:3 | (no string representation) | Node should have one toString but has 0. | -| stream_it.cpp:11:3:11:3 | (no string representation) | Node should have one toString but has 0. | -| stream_it.cpp:11:3:11:3 | (no string representation) | Node should have one toString but has 0. | -| stream_it.cpp:11:3:11:3 | (no string representation) | Node should have one toString but has 0. | -| stream_it.cpp:11:3:11:3 | (no string representation) | Node should have one toString but has 0. | -| stream_it.cpp:11:3:11:3 | (no string representation) | Node should have one toString but has 0. | -| stream_it.cpp:11:3:11:3 | (no string representation) | Node should have one toString but has 0. | -| stream_it.cpp:11:3:11:3 | (no string representation) | Node should have one toString but has 0. | parameterCallable localFlowIsLocal readStepIsLocal From 2a91bb8c54b3031f95a2d1e7552040105826007d Mon Sep 17 00:00:00 2001 From: Asger F Date: Wed, 14 Feb 2024 13:27:48 +0100 Subject: [PATCH 234/378] JS: Add test showing ambiguous predecessor --- .../test/library-tests/EndpointNaming/EndpointNaming.expected | 3 ++- javascript/ql/test/library-tests/EndpointNaming/pack2/lib.js | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/javascript/ql/test/library-tests/EndpointNaming/EndpointNaming.expected b/javascript/ql/test/library-tests/EndpointNaming/EndpointNaming.expected index e0cc251f903..696b38c83bb 100644 --- a/javascript/ql/test/library-tests/EndpointNaming/EndpointNaming.expected +++ b/javascript/ql/test/library-tests/EndpointNaming/EndpointNaming.expected @@ -1,7 +1,8 @@ testFailures ambiguousPreferredPredecessor +| pack2/lib.js:8:22:8:34 | def moduleImport("pack2").getMember("exports").getMember("lib").getMember("LibClass").getMember("foo") | ambiguousSinkName ambiguousClassObjectName ambiguousClassInstanceName -ambiguousFunctionName failures +ambiguousFunctionName diff --git a/javascript/ql/test/library-tests/EndpointNaming/pack2/lib.js b/javascript/ql/test/library-tests/EndpointNaming/pack2/lib.js index 559dd4877a3..da16995f9df 100644 --- a/javascript/ql/test/library-tests/EndpointNaming/pack2/lib.js +++ b/javascript/ql/test/library-tests/EndpointNaming/pack2/lib.js @@ -4,3 +4,5 @@ class AmbiguousClass { export default AmbiguousClass; // $ alias=(pack2).lib.default==(pack2).lib.LibClass export { AmbiguousClass as LibClass } + +AmbiguousClass.foo = function() {} // $ method=(pack2).lib.LibClass.foo alias=(pack2).lib.default.foo==(pack2).lib.LibClass.foo From 5c454944a9aeecc642ce3503fcadc9104c18b9f6 Mon Sep 17 00:00:00 2001 From: Asger F Date: Wed, 14 Feb 2024 14:03:32 +0100 Subject: [PATCH 235/378] JS: Add test for private fields --- .../EndpointNaming/EndpointNaming.expected | 4 ++ .../EndpointNaming/pack11/index.ts | 45 +++++++++++++++++++ .../EndpointNaming/pack11/package.json | 4 ++ 3 files changed, 53 insertions(+) create mode 100644 javascript/ql/test/library-tests/EndpointNaming/pack11/index.ts create mode 100644 javascript/ql/test/library-tests/EndpointNaming/pack11/package.json diff --git a/javascript/ql/test/library-tests/EndpointNaming/EndpointNaming.expected b/javascript/ql/test/library-tests/EndpointNaming/EndpointNaming.expected index 696b38c83bb..91f497ee244 100644 --- a/javascript/ql/test/library-tests/EndpointNaming/EndpointNaming.expected +++ b/javascript/ql/test/library-tests/EndpointNaming/EndpointNaming.expected @@ -1,4 +1,8 @@ testFailures +| pack11/index.ts:2:12:2:65 | // $ me ... .name.m | Missing result:method=(pack11).C1.publicField.really.long.name.m | +| pack11/index.ts:33:1:33:16 | | Unexpected result: method=(pack11).C3.privateField | +| pack11/index.ts:33:18:33:69 | // $ me ... ng.name | Missing result:method=(pack11).C3.publicField.really.long.name | +| pack11/index.ts:41:23:41:24 | | Unexpected result: alias=(pack11).C3.publicField.really.long.name==(pack11).C3.privateField | ambiguousPreferredPredecessor | pack2/lib.js:8:22:8:34 | def moduleImport("pack2").getMember("exports").getMember("lib").getMember("LibClass").getMember("foo") | ambiguousSinkName diff --git a/javascript/ql/test/library-tests/EndpointNaming/pack11/index.ts b/javascript/ql/test/library-tests/EndpointNaming/pack11/index.ts new file mode 100644 index 00000000000..9f85052da9f --- /dev/null +++ b/javascript/ql/test/library-tests/EndpointNaming/pack11/index.ts @@ -0,0 +1,45 @@ +const f1 = { + m() {} // $ method=(pack11).C1.publicField.really.long.name.m +}; + +export class C1 { + private static privateField = f1; + + public static publicField = { + really: { + long: { + name: f1 + } + } + } +} // $ class=(pack11).C1 instance=(pack11).C1.prototype + +const f2 = { + m() {} // $ method=(pack11).C2.publicField.really.long.name.m +} + +export class C2 { + static #privateField = f2; + + static publicField = { + really: { + long: { + name: f2 + } + } + } +} // $ class=(pack11).C2 instance=(pack11).C2.prototype + +function f3() {} // $ method=(pack11).C3.publicField.really.long.name + +export class C3 { + private static privateField = f3; + + public static publicField = { + really: { + long: { + name: f3 + } + } + } +} // $ class=(pack11).C3 instance=(pack11).C3.prototype diff --git a/javascript/ql/test/library-tests/EndpointNaming/pack11/package.json b/javascript/ql/test/library-tests/EndpointNaming/pack11/package.json new file mode 100644 index 00000000000..a2cd2ee271b --- /dev/null +++ b/javascript/ql/test/library-tests/EndpointNaming/pack11/package.json @@ -0,0 +1,4 @@ +{ + "name": "pack11", + "main": "./index.js" +} From a3dc19fd31a54594bcb881059a8b6e87b7d0d1b3 Mon Sep 17 00:00:00 2001 From: Asger F Date: Wed, 14 Feb 2024 14:05:59 +0100 Subject: [PATCH 236/378] JS: Check privacy earlier --- .../semmle/javascript/endpoints/EndpointNaming.qll | 11 +++++++---- .../EndpointNaming/EndpointNaming.expected | 3 +-- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll b/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll index 257003f5708..2581f93f367 100644 --- a/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll +++ b/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll @@ -38,19 +38,21 @@ private string join(string x, string y) { private predicate isPackageExport(API::Node node) { node = API::moduleExport(_) } -private predicate memberEdge(API::Node pred, API::Node succ) { succ = pred.getAMember() } +private predicate relevantEdge(API::Node pred, API::Node succ) { + succ = pred.getAMember() and + not isPrivateLike(succ) +} /** Gets the shortest distance from a packaeg export to `nd` in the API graph. */ private int distanceFromPackageExport(API::Node nd) = - shortestDistances(isPackageExport/1, memberEdge/2)(_, nd, result) + shortestDistances(isPackageExport/1, relevantEdge/2)(_, nd, result) private predicate isExported(API::Node node) { isPackageExport(node) or exists(API::Node pred | isExported(pred) and - memberEdge(pred, node) and - not isPrivateLike(node) + relevantEdge(pred, node) ) } @@ -81,6 +83,7 @@ private predicate isPrivateLike(API::Node node) { isPrivateAssignment(node.asSin private API::Node getASuccessor(API::Node node, string name, int badness) { isExported(node) and + isExported(result) and exists(string member | result = node.getMember(member) and if member = "default" diff --git a/javascript/ql/test/library-tests/EndpointNaming/EndpointNaming.expected b/javascript/ql/test/library-tests/EndpointNaming/EndpointNaming.expected index 91f497ee244..02680a192f3 100644 --- a/javascript/ql/test/library-tests/EndpointNaming/EndpointNaming.expected +++ b/javascript/ql/test/library-tests/EndpointNaming/EndpointNaming.expected @@ -1,5 +1,4 @@ testFailures -| pack11/index.ts:2:12:2:65 | // $ me ... .name.m | Missing result:method=(pack11).C1.publicField.really.long.name.m | | pack11/index.ts:33:1:33:16 | | Unexpected result: method=(pack11).C3.privateField | | pack11/index.ts:33:18:33:69 | // $ me ... ng.name | Missing result:method=(pack11).C3.publicField.really.long.name | | pack11/index.ts:41:23:41:24 | | Unexpected result: alias=(pack11).C3.publicField.really.long.name==(pack11).C3.privateField | @@ -7,6 +6,6 @@ ambiguousPreferredPredecessor | pack2/lib.js:8:22:8:34 | def moduleImport("pack2").getMember("exports").getMember("lib").getMember("LibClass").getMember("foo") | ambiguousSinkName ambiguousClassObjectName -ambiguousClassInstanceName failures +ambiguousClassInstanceName ambiguousFunctionName From 9838da5395e2f5924bf423e694fb9b49ad761bde Mon Sep 17 00:00:00 2001 From: Asger F Date: Wed, 14 Feb 2024 14:06:52 +0100 Subject: [PATCH 237/378] JS: Simplify isExported --- .../lib/semmle/javascript/endpoints/EndpointNaming.qll | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll b/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll index 2581f93f367..3469be8ec66 100644 --- a/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll +++ b/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll @@ -47,14 +47,7 @@ private predicate relevantEdge(API::Node pred, API::Node succ) { private int distanceFromPackageExport(API::Node nd) = shortestDistances(isPackageExport/1, relevantEdge/2)(_, nd, result) -private predicate isExported(API::Node node) { - isPackageExport(node) - or - exists(API::Node pred | - isExported(pred) and - relevantEdge(pred, node) - ) -} +private predicate isExported(API::Node node) { exists(distanceFromPackageExport(node)) } /** * Holds if `node` is a default export that can be reinterpreted as a namespace export, From 3ff950660bf2b9a592319368d534c552fffca36f Mon Sep 17 00:00:00 2001 From: Asger F Date: Wed, 14 Feb 2024 14:09:16 +0100 Subject: [PATCH 238/378] JS: Add test with unknown property name --- .../EndpointNaming/EndpointNaming.expected | 1 + .../library-tests/EndpointNaming/pack11/index.ts | 14 ++++++++++++++ 2 files changed, 15 insertions(+) diff --git a/javascript/ql/test/library-tests/EndpointNaming/EndpointNaming.expected b/javascript/ql/test/library-tests/EndpointNaming/EndpointNaming.expected index 02680a192f3..b161d8ee20a 100644 --- a/javascript/ql/test/library-tests/EndpointNaming/EndpointNaming.expected +++ b/javascript/ql/test/library-tests/EndpointNaming/EndpointNaming.expected @@ -2,6 +2,7 @@ testFailures | pack11/index.ts:33:1:33:16 | | Unexpected result: method=(pack11).C3.privateField | | pack11/index.ts:33:18:33:69 | // $ me ... ng.name | Missing result:method=(pack11).C3.publicField.really.long.name | | pack11/index.ts:41:23:41:24 | | Unexpected result: alias=(pack11).C3.publicField.really.long.name==(pack11).C3.privateField | +| pack11/index.ts:49:12:49:53 | // $ me ... .name.m | Missing result:method=(pack11).C4.really.long.name.m | ambiguousPreferredPredecessor | pack2/lib.js:8:22:8:34 | def moduleImport("pack2").getMember("exports").getMember("lib").getMember("LibClass").getMember("foo") | ambiguousSinkName diff --git a/javascript/ql/test/library-tests/EndpointNaming/pack11/index.ts b/javascript/ql/test/library-tests/EndpointNaming/pack11/index.ts index 9f85052da9f..a212c702f78 100644 --- a/javascript/ql/test/library-tests/EndpointNaming/pack11/index.ts +++ b/javascript/ql/test/library-tests/EndpointNaming/pack11/index.ts @@ -43,3 +43,17 @@ export class C3 { } } } // $ class=(pack11).C3 instance=(pack11).C3.prototype + + +const f4 = { + m() {} // $ method=(pack11).C4.really.long.name.m +}; + +export const C4 = { + [Math.random()]: f4, + really: { + long: { + name: f4 + } + } +} From c4a0f36a088e301c1d04b6dfcea0e9a522415a0f Mon Sep 17 00:00:00 2001 From: Asger F Date: Wed, 14 Feb 2024 14:10:34 +0100 Subject: [PATCH 239/378] JS: Fix handling of unknown properties These would shorten the expected distance to a node, but would never be usable as an edge, meaning we failed to pick a preferred predecessor. --- .../ql/lib/semmle/javascript/endpoints/EndpointNaming.qll | 2 +- .../test/library-tests/EndpointNaming/EndpointNaming.expected | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll b/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll index 3469be8ec66..f1b4619c847 100644 --- a/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll +++ b/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll @@ -39,7 +39,7 @@ private string join(string x, string y) { private predicate isPackageExport(API::Node node) { node = API::moduleExport(_) } private predicate relevantEdge(API::Node pred, API::Node succ) { - succ = pred.getAMember() and + succ = pred.getMember(_) and not isPrivateLike(succ) } diff --git a/javascript/ql/test/library-tests/EndpointNaming/EndpointNaming.expected b/javascript/ql/test/library-tests/EndpointNaming/EndpointNaming.expected index b161d8ee20a..02680a192f3 100644 --- a/javascript/ql/test/library-tests/EndpointNaming/EndpointNaming.expected +++ b/javascript/ql/test/library-tests/EndpointNaming/EndpointNaming.expected @@ -2,7 +2,6 @@ testFailures | pack11/index.ts:33:1:33:16 | | Unexpected result: method=(pack11).C3.privateField | | pack11/index.ts:33:18:33:69 | // $ me ... ng.name | Missing result:method=(pack11).C3.publicField.really.long.name | | pack11/index.ts:41:23:41:24 | | Unexpected result: alias=(pack11).C3.publicField.really.long.name==(pack11).C3.privateField | -| pack11/index.ts:49:12:49:53 | // $ me ... .name.m | Missing result:method=(pack11).C4.really.long.name.m | ambiguousPreferredPredecessor | pack2/lib.js:8:22:8:34 | def moduleImport("pack2").getMember("exports").getMember("lib").getMember("LibClass").getMember("foo") | ambiguousSinkName From d94d4591da6c7b73dd294a8f96520b70bfd9987f Mon Sep 17 00:00:00 2001 From: Asger F Date: Wed, 14 Feb 2024 14:19:26 +0100 Subject: [PATCH 240/378] JS: Name instance methods using API nodes instead of special-casing --- .../javascript/endpoints/EndpointNaming.qll | 34 +++++++++++-------- .../EndpointNaming/EndpointNaming.expected | 2 ++ 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll b/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll index f1b4619c847..47ffd1c30a6 100644 --- a/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll +++ b/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll @@ -41,6 +41,8 @@ private predicate isPackageExport(API::Node node) { node = API::moduleExport(_) private predicate relevantEdge(API::Node pred, API::Node succ) { succ = pred.getMember(_) and not isPrivateLike(succ) + or + succ = pred.getInstance() } /** Gets the shortest distance from a packaeg export to `nd` in the API graph. */ @@ -77,19 +79,25 @@ private predicate isPrivateLike(API::Node node) { isPrivateAssignment(node.asSin private API::Node getASuccessor(API::Node node, string name, int badness) { isExported(node) and isExported(result) and - exists(string member | - result = node.getMember(member) and - if member = "default" - then - if defaultExportCanBeInterpretedAsNamespaceExport(node) - then ( - badness = 5 and name = "" - ) else ( - badness = 10 and name = "default" + ( + exists(string member | + result = node.getMember(member) and + if member = "default" + then + if defaultExportCanBeInterpretedAsNamespaceExport(node) + then ( + badness = 5 and name = "" + ) else ( + badness = 10 and name = "default" + ) + else ( + name = member and badness = 0 ) - else ( - name = member and badness = 0 ) + or + result = node.getInstance() and + name = "prototype" and + badness = 0 ) } @@ -315,10 +323,6 @@ private predicate functionHasNameCandidate( classObjectHasPrimaryName(cls, package, name, badness) or exists(string baseName, string memberName | - function = cls.getInstanceMethod(memberName) and - classInstanceHasPrimaryName(cls, package, baseName, badness) and - name = join(baseName, memberName) - or function = cls.getStaticMethod(memberName) and classObjectHasPrimaryName(cls, package, baseName, badness) and name = join(baseName, memberName) diff --git a/javascript/ql/test/library-tests/EndpointNaming/EndpointNaming.expected b/javascript/ql/test/library-tests/EndpointNaming/EndpointNaming.expected index 02680a192f3..aee85d9ddea 100644 --- a/javascript/ql/test/library-tests/EndpointNaming/EndpointNaming.expected +++ b/javascript/ql/test/library-tests/EndpointNaming/EndpointNaming.expected @@ -3,7 +3,9 @@ testFailures | pack11/index.ts:33:18:33:69 | // $ me ... ng.name | Missing result:method=(pack11).C3.publicField.really.long.name | | pack11/index.ts:41:23:41:24 | | Unexpected result: alias=(pack11).C3.publicField.really.long.name==(pack11).C3.privateField | ambiguousPreferredPredecessor +| pack2/lib.js:1:1:3:1 | def moduleImport("pack2").getMember("exports").getMember("lib").getMember("LibClass").getInstance() | | pack2/lib.js:8:22:8:34 | def moduleImport("pack2").getMember("exports").getMember("lib").getMember("LibClass").getMember("foo") | +| pack2/main.js:1:1:3:1 | def moduleImport("pack2").getMember("exports").getMember("MainClass").getInstance() | ambiguousSinkName ambiguousClassObjectName failures From cd596f5d0551f00a637e3c4b974a2fb13e6b5070 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Wed, 14 Feb 2024 15:02:36 +0100 Subject: [PATCH 241/378] Python: Reformat test-file All those newlines are not good for inline expectations --- .../CWE-409/DecompressionBombs.expected | 30 +++++++++---------- .../query-tests/Security/CWE-409/test.py | 15 ++++------ 2 files changed, 20 insertions(+), 25 deletions(-) diff --git a/python/ql/test/experimental/query-tests/Security/CWE-409/DecompressionBombs.expected b/python/ql/test/experimental/query-tests/Security/CWE-409/DecompressionBombs.expected index 0c1f81c37d4..fbd4ef38ace 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-409/DecompressionBombs.expected +++ b/python/ql/test/experimental/query-tests/Security/CWE-409/DecompressionBombs.expected @@ -30,11 +30,11 @@ edges | test.py:27:26:27:34 | ControlFlowNode for file_path | test.py:55:23:55:31 | ControlFlowNode for file_path | provenance | | | test.py:27:26:27:34 | ControlFlowNode for file_path | test.py:56:21:56:29 | ControlFlowNode for file_path | provenance | | | test.py:27:26:27:34 | ControlFlowNode for file_path | test.py:58:40:58:48 | ControlFlowNode for file_path | provenance | | -| test.py:27:26:27:34 | ControlFlowNode for file_path | test.py:60:22:60:30 | ControlFlowNode for file_path | provenance | | -| test.py:27:26:27:34 | ControlFlowNode for file_path | test.py:61:21:61:29 | ControlFlowNode for file_path | provenance | | -| test.py:27:26:27:34 | ControlFlowNode for file_path | test.py:62:42:62:50 | ControlFlowNode for file_path | provenance | | -| test.py:27:26:27:34 | ControlFlowNode for file_path | test.py:64:23:64:31 | ControlFlowNode for file_path | provenance | | -| test.py:27:26:27:34 | ControlFlowNode for file_path | test.py:65:36:65:44 | ControlFlowNode for file_path | provenance | | +| test.py:27:26:27:34 | ControlFlowNode for file_path | test.py:59:22:59:30 | ControlFlowNode for file_path | provenance | | +| test.py:27:26:27:34 | ControlFlowNode for file_path | test.py:60:21:60:29 | ControlFlowNode for file_path | provenance | | +| test.py:27:26:27:34 | ControlFlowNode for file_path | test.py:61:42:61:50 | ControlFlowNode for file_path | provenance | | +| test.py:27:26:27:34 | ControlFlowNode for file_path | test.py:62:23:62:31 | ControlFlowNode for file_path | provenance | | +| test.py:27:26:27:34 | ControlFlowNode for file_path | test.py:63:36:63:44 | ControlFlowNode for file_path | provenance | | nodes | test.py:9:16:9:24 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | | test.py:10:5:10:52 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | @@ -68,11 +68,11 @@ nodes | test.py:55:23:55:31 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | | test.py:56:21:56:29 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | | test.py:58:40:58:48 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | -| test.py:60:22:60:30 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | -| test.py:61:21:61:29 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | -| test.py:62:42:62:50 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | -| test.py:64:23:64:31 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | -| test.py:65:36:65:44 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| test.py:59:22:59:30 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| test.py:60:21:60:29 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| test.py:61:42:61:50 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| test.py:62:23:62:31 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| test.py:63:36:63:44 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | subpaths #select | test.py:10:5:10:52 | ControlFlowNode for Attribute() | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:10:5:10:52 | ControlFlowNode for Attribute() | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | @@ -96,8 +96,8 @@ subpaths | test.py:55:23:55:31 | ControlFlowNode for file_path | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:55:23:55:31 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | | test.py:56:21:56:29 | ControlFlowNode for file_path | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:56:21:56:29 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | | test.py:58:40:58:48 | ControlFlowNode for file_path | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:58:40:58:48 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | -| test.py:60:22:60:30 | ControlFlowNode for file_path | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:60:22:60:30 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | -| test.py:61:21:61:29 | ControlFlowNode for file_path | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:61:21:61:29 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | -| test.py:62:42:62:50 | ControlFlowNode for file_path | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:62:42:62:50 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | -| test.py:64:23:64:31 | ControlFlowNode for file_path | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:64:23:64:31 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | -| test.py:65:36:65:44 | ControlFlowNode for file_path | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:65:36:65:44 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | +| test.py:59:22:59:30 | ControlFlowNode for file_path | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:59:22:59:30 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | +| test.py:60:21:60:29 | ControlFlowNode for file_path | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:60:21:60:29 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | +| test.py:61:42:61:50 | ControlFlowNode for file_path | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:61:42:61:50 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | +| test.py:62:23:62:31 | ControlFlowNode for file_path | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:62:23:62:31 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | +| test.py:63:36:63:44 | ControlFlowNode for file_path | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:63:36:63:44 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | diff --git a/python/ql/test/experimental/query-tests/Security/CWE-409/test.py b/python/ql/test/experimental/query-tests/Security/CWE-409/test.py index 9a9425fa535..fca9b18cf78 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-409/test.py +++ b/python/ql/test/experimental/query-tests/Security/CWE-409/test.py @@ -55,26 +55,21 @@ async def bomb(file_path): pandas.read_table(file_path, compression='gzip') # $ result=BAD pandas.read_xml(file_path, compression='gzip') # $ result=BAD - pandas.read_csv(filepath_or_buffer=file_path, - compression='gzip') # $ result=BAD + pandas.read_csv(filepath_or_buffer=file_path, compression='gzip') # $ result=BAD pandas.read_json(file_path, compression='gzip') # $ result=BAD pandas.read_sas(file_path, compression='gzip') # $ result=BAD - pandas.read_stata(filepath_or_buffer=file_path, - compression='gzip') # $ result=BAD + pandas.read_stata(filepath_or_buffer=file_path, compression='gzip') # $ result=BAD pandas.read_table(file_path, compression='gzip') # $ result=BAD - pandas.read_xml(path_or_buffer=file_path, - compression='gzip') # $ result=BAD + pandas.read_xml(path_or_buffer=file_path, compression='gzip') # $ result=BAD # no compression no DOS pandas.read_table(file_path, compression='tar') # $result=OK pandas.read_xml(file_path, compression='tar') # $result=OK - pandas.read_csv(filepath_or_buffer=file_path, - compression='tar') # $result=OK + pandas.read_csv(filepath_or_buffer=file_path, compression='tar') # $result=OK pandas.read_json(file_path, compression='tar') # $result=OK pandas.read_sas(file_path, compression='tar') # $result=OK - pandas.read_stata(filepath_or_buffer=file_path, - compression='tar') # $result=OK + pandas.read_stata(filepath_or_buffer=file_path, compression='tar') # $result=OK pandas.read_table(file_path, compression='tar') # $result=OK pandas.read_xml(path_or_buffer=file_path, compression='tar') # $result=OK From 59014787a131fd59d938ed7dabb625e5dd7b8e91 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Wed, 14 Feb 2024 15:44:40 +0100 Subject: [PATCH 242/378] Python: Fix DataflowQueryTest You're only allowed to have `result=OK` if there is a sink on that line... --- .../CWE-409/DataflowQueryTest.expected | 3 +++ .../query-tests/Security/CWE-409/test.py | 24 +++++++++---------- 2 files changed, 15 insertions(+), 12 deletions(-) create mode 100644 python/ql/test/experimental/query-tests/Security/CWE-409/DataflowQueryTest.expected diff --git a/python/ql/test/experimental/query-tests/Security/CWE-409/DataflowQueryTest.expected b/python/ql/test/experimental/query-tests/Security/CWE-409/DataflowQueryTest.expected new file mode 100644 index 00000000000..9ce23b4c553 --- /dev/null +++ b/python/ql/test/experimental/query-tests/Security/CWE-409/DataflowQueryTest.expected @@ -0,0 +1,3 @@ +missingAnnotationOnSink +testFailures +failures diff --git a/python/ql/test/experimental/query-tests/Security/CWE-409/test.py b/python/ql/test/experimental/query-tests/Security/CWE-409/test.py index fca9b18cf78..4e8a9f672a7 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-409/test.py +++ b/python/ql/test/experimental/query-tests/Security/CWE-409/test.py @@ -15,7 +15,7 @@ async def bomb(file_path): a = myfile.readline() with zipfile.ZipFile(file_path) as myzip: - with myzip.open('ZZ', mode="w") as myfile: # $result=OK + with myzip.open('ZZ', mode="w") as myfile: # $ SPURIOUS: result=BAD myfile.write(b"tmpppp") zipfile.ZipFile(file_path).read("aFileNameInTheZipFile") # $ result=BAD @@ -26,9 +26,9 @@ async def bomb(file_path): tarfile.TarFile.gzopen(file_path).extractall() # $ result=BAD tarfile.TarFile.open(file_path).extractfile("file1.txt") # $ result=BAD - tarfile.open(file_path, mode="w") # $result=OK - tarfile.TarFile.gzopen(file_path, mode="w") # $result=OK - tarfile.TarFile.open(file_path, mode="r:") # $ result=BAD + tarfile.open(file_path, mode="w") # ok, writing + tarfile.TarFile.gzopen(file_path, mode="w") # ok, writing + tarfile.TarFile.open(file_path, mode="r:") # potential problem, depending on usage import shutil shutil.unpack_archive(file_path) # $ result=BAD @@ -63,14 +63,14 @@ async def bomb(file_path): pandas.read_xml(path_or_buffer=file_path, compression='gzip') # $ result=BAD # no compression no DOS - pandas.read_table(file_path, compression='tar') # $result=OK - pandas.read_xml(file_path, compression='tar') # $result=OK + pandas.read_table(file_path, compression='tar') + pandas.read_xml(file_path, compression='tar') - pandas.read_csv(filepath_or_buffer=file_path, compression='tar') # $result=OK - pandas.read_json(file_path, compression='tar') # $result=OK - pandas.read_sas(file_path, compression='tar') # $result=OK - pandas.read_stata(filepath_or_buffer=file_path, compression='tar') # $result=OK - pandas.read_table(file_path, compression='tar') # $result=OK - pandas.read_xml(path_or_buffer=file_path, compression='tar') # $result=OK + pandas.read_csv(filepath_or_buffer=file_path, compression='tar') + pandas.read_json(file_path, compression='tar') + pandas.read_sas(file_path, compression='tar') + pandas.read_stata(filepath_or_buffer=file_path, compression='tar') + pandas.read_table(file_path, compression='tar') + pandas.read_xml(path_or_buffer=file_path, compression='tar') return {"message": "bomb"} From 2cc2a9088009b6f6574c6ca567085f630910b9d9 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 14 Feb 2024 15:23:08 +0000 Subject: [PATCH 243/378] Kotlin 2: Accept some location changes in library-tests/exprs/exprs.expected --- .../library-tests/exprs/exprs.expected | 244 +++++++++--------- 1 file changed, 122 insertions(+), 122 deletions(-) diff --git a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected index 220dee0084b..9ae45446268 100644 --- a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected +++ b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected @@ -908,468 +908,468 @@ | exprs.kt:8:32:8:41 | double | file://:0:0:0:0 | | TypeAccess | | exprs.kt:9:20:9:28 | float | file://:0:0:0:0 | | TypeAccess | | exprs.kt:9:31:9:39 | float | file://:0:0:0:0 | | TypeAccess | -| exprs.kt:11:9:11:10 | i1 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:11:5:11:14 | i1 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:11:14:11:14 | 1 | exprs.kt:4:1:142:1 | topLevelMethod | IntegerLiteral | -| exprs.kt:12:9:12:10 | i2 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:12:5:12:18 | i2 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:12:14:12:14 | x | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:12:14:12:18 | ... + ... | exprs.kt:4:1:142:1 | topLevelMethod | AddExpr | | exprs.kt:12:18:12:18 | y | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:13:9:13:10 | i3 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:13:5:13:18 | i3 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:13:14:13:14 | x | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:13:14:13:18 | ... - ... | exprs.kt:4:1:142:1 | topLevelMethod | SubExpr | | exprs.kt:13:18:13:18 | y | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:14:9:14:10 | i4 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:14:5:14:18 | i4 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:14:14:14:14 | x | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:14:14:14:18 | ... / ... | exprs.kt:4:1:142:1 | topLevelMethod | DivExpr | | exprs.kt:14:18:14:18 | y | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:15:9:15:10 | i5 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:15:5:15:18 | i5 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:15:14:15:14 | x | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:15:14:15:18 | ... % ... | exprs.kt:4:1:142:1 | topLevelMethod | RemExpr | | exprs.kt:15:18:15:18 | y | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:16:9:16:10 | i6 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:16:5:16:20 | i6 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:16:14:16:14 | x | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:16:14:16:20 | ... << ... | exprs.kt:4:1:142:1 | topLevelMethod | LeftShiftExpr | | exprs.kt:16:20:16:20 | y | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:17:9:17:10 | i7 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:17:5:17:20 | i7 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:17:14:17:14 | x | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:17:14:17:20 | ... >> ... | exprs.kt:4:1:142:1 | topLevelMethod | RightShiftExpr | | exprs.kt:17:20:17:20 | y | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:18:9:18:10 | i8 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:18:5:18:21 | i8 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:18:14:18:14 | x | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:18:14:18:21 | ... >>> ... | exprs.kt:4:1:142:1 | topLevelMethod | UnsignedRightShiftExpr | | exprs.kt:18:21:18:21 | y | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:19:9:19:10 | i9 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:19:5:19:20 | i9 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:19:14:19:14 | x | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:19:14:19:20 | ... & ... | exprs.kt:4:1:142:1 | topLevelMethod | AndBitwiseExpr | | exprs.kt:19:20:19:20 | y | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:20:9:20:11 | i10 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:20:5:20:20 | i10 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:20:15:20:15 | x | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:20:15:20:20 | ... \| ... | exprs.kt:4:1:142:1 | topLevelMethod | OrBitwiseExpr | | exprs.kt:20:20:20:20 | y | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:21:9:21:11 | i11 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:21:5:21:21 | i11 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:21:15:21:15 | x | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:21:15:21:21 | ... ^ ... | exprs.kt:4:1:142:1 | topLevelMethod | XorBitwiseExpr | | exprs.kt:21:21:21:21 | y | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:22:9:22:11 | i12 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:22:5:22:21 | i12 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:22:15:22:15 | x | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:22:15:22:21 | ~... | exprs.kt:4:1:142:1 | topLevelMethod | BitNotExpr | -| exprs.kt:23:9:23:11 | i13 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:23:5:23:20 | i13 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:23:15:23:15 | x | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:23:15:23:20 | ... (value equals) ... | exprs.kt:4:1:142:1 | topLevelMethod | ValueEQExpr | | exprs.kt:23:20:23:20 | y | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:24:9:24:11 | i14 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:24:5:24:20 | i14 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:24:15:24:15 | x | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:24:15:24:20 | ... (value not-equals) ... | exprs.kt:4:1:142:1 | topLevelMethod | ValueNEExpr | | exprs.kt:24:20:24:20 | y | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:25:9:25:11 | i15 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:25:5:25:19 | i15 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:25:15:25:15 | x | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:25:15:25:19 | ... < ... | exprs.kt:4:1:142:1 | topLevelMethod | LTExpr | | exprs.kt:25:19:25:19 | y | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:26:9:26:11 | i16 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:26:5:26:20 | i16 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:26:15:26:15 | x | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:26:15:26:20 | ... <= ... | exprs.kt:4:1:142:1 | topLevelMethod | LEExpr | | exprs.kt:26:20:26:20 | y | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:27:9:27:11 | i17 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:27:5:27:19 | i17 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:27:15:27:15 | x | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:27:15:27:19 | ... > ... | exprs.kt:4:1:142:1 | topLevelMethod | GTExpr | | exprs.kt:27:19:27:19 | y | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:28:9:28:11 | i18 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:28:5:28:20 | i18 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:28:15:28:15 | x | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:28:15:28:20 | ... >= ... | exprs.kt:4:1:142:1 | topLevelMethod | GEExpr | | exprs.kt:28:20:28:20 | y | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:29:9:29:11 | i19 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:29:5:29:21 | i19 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:29:15:29:15 | x | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:29:15:29:21 | ... == ... | exprs.kt:4:1:142:1 | topLevelMethod | EQExpr | | exprs.kt:29:21:29:21 | y | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:30:9:30:11 | i20 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:30:5:30:21 | i20 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:30:15:30:15 | x | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:30:15:30:21 | ... != ... | exprs.kt:4:1:142:1 | topLevelMethod | NEExpr | | exprs.kt:30:21:30:21 | y | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:31:9:31:11 | i21 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:31:5:31:25 | i21 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:31:15:31:15 | x | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:31:15:31:25 | contains(...) | exprs.kt:4:1:142:1 | topLevelMethod | MethodCall | | exprs.kt:31:20:31:20 | x | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:31:20:31:25 | rangeTo(...) | exprs.kt:4:1:142:1 | topLevelMethod | MethodCall | | exprs.kt:31:25:31:25 | y | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:32:9:32:11 | i22 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:32:5:32:26 | i22 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:32:15:32:15 | x | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:32:15:32:26 | !... | exprs.kt:4:1:142:1 | topLevelMethod | LogNotExpr | | exprs.kt:32:15:32:26 | contains(...) | exprs.kt:4:1:142:1 | topLevelMethod | MethodCall | | exprs.kt:32:21:32:21 | x | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:32:21:32:26 | rangeTo(...) | exprs.kt:4:1:142:1 | topLevelMethod | MethodCall | | exprs.kt:32:26:32:26 | y | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:34:9:34:11 | by1 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:34:5:34:17 | by1 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:34:15:34:17 | 1.0 | exprs.kt:4:1:142:1 | topLevelMethod | DoubleLiteral | -| exprs.kt:35:9:35:11 | by2 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:35:5:35:23 | by2 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:35:15:35:17 | byx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:35:15:35:23 | ... + ... | exprs.kt:4:1:142:1 | topLevelMethod | AddExpr | | exprs.kt:35:21:35:23 | byy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:36:9:36:11 | by3 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:36:5:36:23 | by3 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:36:15:36:17 | byx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:36:15:36:23 | ... - ... | exprs.kt:4:1:142:1 | topLevelMethod | SubExpr | | exprs.kt:36:21:36:23 | byy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:37:9:37:11 | by4 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:37:5:37:23 | by4 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:37:15:37:17 | byx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:37:15:37:23 | ... / ... | exprs.kt:4:1:142:1 | topLevelMethod | DivExpr | | exprs.kt:37:21:37:23 | byy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:38:9:38:11 | by5 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:38:5:38:23 | by5 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:38:15:38:17 | byx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:38:15:38:23 | ... % ... | exprs.kt:4:1:142:1 | topLevelMethod | RemExpr | | exprs.kt:38:21:38:23 | byy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:39:9:39:11 | by6 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:39:5:39:24 | by6 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:39:15:39:17 | byx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:39:15:39:17 | intValue(...) | exprs.kt:4:1:142:1 | topLevelMethod | MethodCall | | exprs.kt:39:15:39:24 | ... (value equals) ... | exprs.kt:4:1:142:1 | topLevelMethod | ValueEQExpr | | exprs.kt:39:22:39:24 | byy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:39:22:39:24 | intValue(...) | exprs.kt:4:1:142:1 | topLevelMethod | MethodCall | -| exprs.kt:40:9:40:11 | by7 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:40:5:40:24 | by7 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:40:15:40:17 | byx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:40:15:40:17 | intValue(...) | exprs.kt:4:1:142:1 | topLevelMethod | MethodCall | | exprs.kt:40:15:40:24 | ... (value not-equals) ... | exprs.kt:4:1:142:1 | topLevelMethod | ValueNEExpr | | exprs.kt:40:22:40:24 | byy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:40:22:40:24 | intValue(...) | exprs.kt:4:1:142:1 | topLevelMethod | MethodCall | -| exprs.kt:41:9:41:11 | by8 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:41:5:41:23 | by8 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:41:15:41:17 | byx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:41:15:41:17 | intValue(...) | exprs.kt:4:1:142:1 | topLevelMethod | MethodCall | | exprs.kt:41:15:41:23 | ... < ... | exprs.kt:4:1:142:1 | topLevelMethod | LTExpr | | exprs.kt:41:21:41:23 | byy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:41:21:41:23 | intValue(...) | exprs.kt:4:1:142:1 | topLevelMethod | MethodCall | -| exprs.kt:42:9:42:11 | by9 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:42:5:42:24 | by9 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:42:15:42:17 | byx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:42:15:42:17 | intValue(...) | exprs.kt:4:1:142:1 | topLevelMethod | MethodCall | | exprs.kt:42:15:42:24 | ... <= ... | exprs.kt:4:1:142:1 | topLevelMethod | LEExpr | | exprs.kt:42:22:42:24 | byy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:42:22:42:24 | intValue(...) | exprs.kt:4:1:142:1 | topLevelMethod | MethodCall | -| exprs.kt:43:9:43:12 | by10 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:43:5:43:24 | by10 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:43:16:43:18 | byx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:43:16:43:18 | intValue(...) | exprs.kt:4:1:142:1 | topLevelMethod | MethodCall | | exprs.kt:43:16:43:24 | ... > ... | exprs.kt:4:1:142:1 | topLevelMethod | GTExpr | | exprs.kt:43:22:43:24 | byy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:43:22:43:24 | intValue(...) | exprs.kt:4:1:142:1 | topLevelMethod | MethodCall | -| exprs.kt:44:9:44:12 | by11 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:44:5:44:25 | by11 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:44:16:44:18 | byx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:44:16:44:18 | intValue(...) | exprs.kt:4:1:142:1 | topLevelMethod | MethodCall | | exprs.kt:44:16:44:25 | ... >= ... | exprs.kt:4:1:142:1 | topLevelMethod | GEExpr | | exprs.kt:44:23:44:25 | byy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:44:23:44:25 | intValue(...) | exprs.kt:4:1:142:1 | topLevelMethod | MethodCall | -| exprs.kt:45:9:45:12 | by12 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:45:5:45:26 | by12 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:45:16:45:18 | byx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:45:16:45:26 | ... == ... | exprs.kt:4:1:142:1 | topLevelMethod | EQExpr | | exprs.kt:45:24:45:26 | byy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:46:9:46:12 | by13 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:46:5:46:26 | by13 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:46:16:46:18 | byx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:46:16:46:26 | ... != ... | exprs.kt:4:1:142:1 | topLevelMethod | NEExpr | | exprs.kt:46:24:46:26 | byy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:47:9:47:12 | by14 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:47:5:47:25 | by14 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:47:16:47:18 | byx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:47:16:47:25 | ... \| ... | exprs.kt:4:1:142:1 | topLevelMethod | OrBitwiseExpr | | exprs.kt:47:23:47:25 | byy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:48:9:48:12 | by15 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:48:5:48:26 | by15 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:48:16:48:18 | byx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:48:16:48:26 | ... & ... | exprs.kt:4:1:142:1 | topLevelMethod | AndBitwiseExpr | | exprs.kt:48:24:48:26 | byy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:49:9:49:12 | by16 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:49:5:49:26 | by16 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:49:16:49:18 | byx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:49:16:49:26 | ... ^ ... | exprs.kt:4:1:142:1 | topLevelMethod | XorBitwiseExpr | | exprs.kt:49:24:49:26 | byy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:51:9:51:10 | s1 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:51:5:51:16 | s1 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:51:14:51:16 | 1.0 | exprs.kt:4:1:142:1 | topLevelMethod | DoubleLiteral | -| exprs.kt:52:9:52:10 | s2 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:52:5:52:20 | s2 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:52:14:52:15 | sx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:52:14:52:20 | ... + ... | exprs.kt:4:1:142:1 | topLevelMethod | AddExpr | | exprs.kt:52:19:52:20 | sy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:53:9:53:10 | s3 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:53:5:53:20 | s3 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:53:14:53:15 | sx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:53:14:53:20 | ... - ... | exprs.kt:4:1:142:1 | topLevelMethod | SubExpr | | exprs.kt:53:19:53:20 | sy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:54:9:54:10 | s4 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:54:5:54:20 | s4 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:54:14:54:15 | sx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:54:14:54:20 | ... / ... | exprs.kt:4:1:142:1 | topLevelMethod | DivExpr | | exprs.kt:54:19:54:20 | sy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:55:9:55:10 | s5 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:55:5:55:20 | s5 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:55:14:55:15 | sx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:55:14:55:20 | ... % ... | exprs.kt:4:1:142:1 | topLevelMethod | RemExpr | | exprs.kt:55:19:55:20 | sy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:56:9:56:10 | s6 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:56:5:56:21 | s6 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:56:14:56:15 | intValue(...) | exprs.kt:4:1:142:1 | topLevelMethod | MethodCall | | exprs.kt:56:14:56:15 | sx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:56:14:56:21 | ... (value equals) ... | exprs.kt:4:1:142:1 | topLevelMethod | ValueEQExpr | | exprs.kt:56:20:56:21 | intValue(...) | exprs.kt:4:1:142:1 | topLevelMethod | MethodCall | | exprs.kt:56:20:56:21 | sy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:57:9:57:10 | s7 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:57:5:57:21 | s7 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:57:14:57:15 | intValue(...) | exprs.kt:4:1:142:1 | topLevelMethod | MethodCall | | exprs.kt:57:14:57:15 | sx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:57:14:57:21 | ... (value not-equals) ... | exprs.kt:4:1:142:1 | topLevelMethod | ValueNEExpr | | exprs.kt:57:20:57:21 | intValue(...) | exprs.kt:4:1:142:1 | topLevelMethod | MethodCall | | exprs.kt:57:20:57:21 | sy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:58:9:58:10 | s8 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:58:5:58:20 | s8 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:58:14:58:15 | intValue(...) | exprs.kt:4:1:142:1 | topLevelMethod | MethodCall | | exprs.kt:58:14:58:15 | sx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:58:14:58:20 | ... < ... | exprs.kt:4:1:142:1 | topLevelMethod | LTExpr | | exprs.kt:58:19:58:20 | intValue(...) | exprs.kt:4:1:142:1 | topLevelMethod | MethodCall | | exprs.kt:58:19:58:20 | sy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:59:9:59:10 | s9 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:59:5:59:21 | s9 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:59:14:59:15 | intValue(...) | exprs.kt:4:1:142:1 | topLevelMethod | MethodCall | | exprs.kt:59:14:59:15 | sx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:59:14:59:21 | ... <= ... | exprs.kt:4:1:142:1 | topLevelMethod | LEExpr | | exprs.kt:59:20:59:21 | intValue(...) | exprs.kt:4:1:142:1 | topLevelMethod | MethodCall | | exprs.kt:59:20:59:21 | sy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:60:9:60:11 | s10 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:60:5:60:21 | s10 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:60:15:60:16 | intValue(...) | exprs.kt:4:1:142:1 | topLevelMethod | MethodCall | | exprs.kt:60:15:60:16 | sx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:60:15:60:21 | ... > ... | exprs.kt:4:1:142:1 | topLevelMethod | GTExpr | | exprs.kt:60:20:60:21 | intValue(...) | exprs.kt:4:1:142:1 | topLevelMethod | MethodCall | | exprs.kt:60:20:60:21 | sy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:61:9:61:11 | s11 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:61:5:61:22 | s11 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:61:15:61:16 | intValue(...) | exprs.kt:4:1:142:1 | topLevelMethod | MethodCall | | exprs.kt:61:15:61:16 | sx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:61:15:61:22 | ... >= ... | exprs.kt:4:1:142:1 | topLevelMethod | GEExpr | | exprs.kt:61:21:61:22 | intValue(...) | exprs.kt:4:1:142:1 | topLevelMethod | MethodCall | | exprs.kt:61:21:61:22 | sy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:62:9:62:11 | s12 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:62:5:62:23 | s12 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:62:15:62:16 | sx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:62:15:62:23 | ... == ... | exprs.kt:4:1:142:1 | topLevelMethod | EQExpr | | exprs.kt:62:22:62:23 | sy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:63:9:63:11 | s13 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:63:5:63:23 | s13 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:63:15:63:16 | sx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:63:15:63:23 | ... != ... | exprs.kt:4:1:142:1 | topLevelMethod | NEExpr | | exprs.kt:63:22:63:23 | sy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:64:9:64:11 | s14 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:64:5:64:22 | s14 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:64:15:64:16 | sx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:64:15:64:22 | ... \| ... | exprs.kt:4:1:142:1 | topLevelMethod | OrBitwiseExpr | | exprs.kt:64:21:64:22 | sy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:65:9:65:11 | s15 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:65:5:65:23 | s15 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:65:15:65:16 | sx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:65:15:65:23 | ... & ... | exprs.kt:4:1:142:1 | topLevelMethod | AndBitwiseExpr | | exprs.kt:65:22:65:23 | sy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:66:9:66:11 | s16 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:66:5:66:23 | s16 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:66:15:66:16 | sx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:66:15:66:23 | ... ^ ... | exprs.kt:4:1:142:1 | topLevelMethod | XorBitwiseExpr | | exprs.kt:66:22:66:23 | sy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:68:9:68:10 | l1 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:68:5:68:16 | l1 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:68:14:68:16 | 1.0 | exprs.kt:4:1:142:1 | topLevelMethod | DoubleLiteral | -| exprs.kt:69:9:69:10 | l2 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:69:5:69:20 | l2 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:69:14:69:15 | lx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:69:14:69:20 | ... + ... | exprs.kt:4:1:142:1 | topLevelMethod | AddExpr | | exprs.kt:69:19:69:20 | ly | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:70:9:70:10 | l3 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:70:5:70:20 | l3 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:70:14:70:15 | lx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:70:14:70:20 | ... - ... | exprs.kt:4:1:142:1 | topLevelMethod | SubExpr | | exprs.kt:70:19:70:20 | ly | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:71:9:71:10 | l4 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:71:5:71:20 | l4 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:71:14:71:15 | lx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:71:14:71:20 | ... / ... | exprs.kt:4:1:142:1 | topLevelMethod | DivExpr | | exprs.kt:71:19:71:20 | ly | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:72:9:72:10 | l5 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:72:5:72:20 | l5 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:72:14:72:15 | lx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:72:14:72:20 | ... % ... | exprs.kt:4:1:142:1 | topLevelMethod | RemExpr | | exprs.kt:72:19:72:20 | ly | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:73:9:73:10 | l6 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:73:5:73:21 | l6 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:73:14:73:15 | lx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:73:14:73:21 | ... << ... | exprs.kt:4:1:142:1 | topLevelMethod | LeftShiftExpr | | exprs.kt:73:21:73:21 | y | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:74:9:74:10 | l7 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:74:5:74:21 | l7 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:74:14:74:15 | lx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:74:14:74:21 | ... >> ... | exprs.kt:4:1:142:1 | topLevelMethod | RightShiftExpr | | exprs.kt:74:21:74:21 | y | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:75:9:75:10 | l8 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:75:5:75:22 | l8 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:75:14:75:15 | lx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:75:14:75:22 | ... >>> ... | exprs.kt:4:1:142:1 | topLevelMethod | UnsignedRightShiftExpr | | exprs.kt:75:22:75:22 | y | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:76:9:76:10 | l9 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:76:5:76:22 | l9 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:76:14:76:15 | lx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:76:14:76:22 | ... & ... | exprs.kt:4:1:142:1 | topLevelMethod | AndBitwiseExpr | | exprs.kt:76:21:76:22 | ly | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:77:9:77:11 | l10 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:77:5:77:22 | l10 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:77:15:77:16 | lx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:77:15:77:22 | ... \| ... | exprs.kt:4:1:142:1 | topLevelMethod | OrBitwiseExpr | | exprs.kt:77:21:77:22 | ly | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:78:9:78:11 | l11 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:78:5:78:23 | l11 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:78:15:78:16 | lx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:78:15:78:23 | ... ^ ... | exprs.kt:4:1:142:1 | topLevelMethod | XorBitwiseExpr | | exprs.kt:78:22:78:23 | ly | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:79:9:79:11 | l12 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:79:5:79:22 | l12 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:79:15:79:16 | lx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:79:15:79:22 | ~... | exprs.kt:4:1:142:1 | topLevelMethod | BitNotExpr | -| exprs.kt:80:9:80:11 | l13 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:80:5:80:22 | l13 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:80:15:80:16 | lx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:80:15:80:22 | ... (value equals) ... | exprs.kt:4:1:142:1 | topLevelMethod | ValueEQExpr | | exprs.kt:80:21:80:22 | ly | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:81:9:81:11 | l14 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:81:5:81:22 | l14 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:81:15:81:16 | lx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:81:15:81:22 | ... (value not-equals) ... | exprs.kt:4:1:142:1 | topLevelMethod | ValueNEExpr | | exprs.kt:81:21:81:22 | ly | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:82:9:82:11 | l15 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:82:5:82:21 | l15 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:82:15:82:16 | lx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:82:15:82:21 | ... < ... | exprs.kt:4:1:142:1 | topLevelMethod | LTExpr | | exprs.kt:82:20:82:21 | ly | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:83:9:83:11 | l16 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:83:5:83:22 | l16 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:83:15:83:16 | lx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:83:15:83:22 | ... <= ... | exprs.kt:4:1:142:1 | topLevelMethod | LEExpr | | exprs.kt:83:21:83:22 | ly | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:84:9:84:11 | l17 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:84:5:84:21 | l17 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:84:15:84:16 | lx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:84:15:84:21 | ... > ... | exprs.kt:4:1:142:1 | topLevelMethod | GTExpr | | exprs.kt:84:20:84:21 | ly | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:85:9:85:11 | l18 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:85:5:85:22 | l18 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:85:15:85:16 | lx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:85:15:85:22 | ... >= ... | exprs.kt:4:1:142:1 | topLevelMethod | GEExpr | | exprs.kt:85:21:85:22 | ly | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:86:9:86:11 | l19 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:86:5:86:23 | l19 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:86:15:86:16 | lx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:86:15:86:23 | ... == ... | exprs.kt:4:1:142:1 | topLevelMethod | EQExpr | | exprs.kt:86:22:86:23 | ly | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:87:9:87:11 | l20 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:87:5:87:23 | l20 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:87:15:87:16 | lx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:87:15:87:23 | ... != ... | exprs.kt:4:1:142:1 | topLevelMethod | NEExpr | | exprs.kt:87:22:87:23 | ly | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:89:9:89:10 | d1 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:89:5:89:16 | d1 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:89:14:89:16 | 1.0 | exprs.kt:4:1:142:1 | topLevelMethod | DoubleLiteral | -| exprs.kt:90:9:90:10 | d2 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:90:5:90:20 | d2 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:90:14:90:15 | dx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:90:14:90:20 | ... + ... | exprs.kt:4:1:142:1 | topLevelMethod | AddExpr | | exprs.kt:90:19:90:20 | dy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:91:9:91:10 | d3 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:91:5:91:20 | d3 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:91:14:91:15 | dx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:91:14:91:20 | ... - ... | exprs.kt:4:1:142:1 | topLevelMethod | SubExpr | | exprs.kt:91:19:91:20 | dy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:92:9:92:10 | d4 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:92:5:92:20 | d4 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:92:14:92:15 | dx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:92:14:92:20 | ... / ... | exprs.kt:4:1:142:1 | topLevelMethod | DivExpr | | exprs.kt:92:19:92:20 | dy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:93:9:93:10 | d5 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:93:5:93:20 | d5 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:93:14:93:15 | dx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:93:14:93:20 | ... % ... | exprs.kt:4:1:142:1 | topLevelMethod | RemExpr | | exprs.kt:93:19:93:20 | dy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:94:9:94:10 | d6 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:94:5:94:21 | d6 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:94:14:94:15 | dx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:94:14:94:21 | ... == ... | exprs.kt:4:1:142:1 | topLevelMethod | EQExpr | | exprs.kt:94:20:94:21 | dy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:95:9:95:10 | d7 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:95:5:95:21 | d7 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:95:14:95:15 | dx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:95:14:95:21 | ... != ... | exprs.kt:4:1:142:1 | topLevelMethod | NEExpr | | exprs.kt:95:20:95:21 | dy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:96:9:96:10 | d8 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:96:5:96:20 | d8 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:96:14:96:15 | dx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:96:14:96:20 | ... < ... | exprs.kt:4:1:142:1 | topLevelMethod | LTExpr | | exprs.kt:96:19:96:20 | dy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:97:9:97:10 | d9 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:97:5:97:21 | d9 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:97:14:97:15 | dx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:97:14:97:21 | ... <= ... | exprs.kt:4:1:142:1 | topLevelMethod | LEExpr | | exprs.kt:97:20:97:21 | dy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:98:9:98:11 | d10 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:98:5:98:21 | d10 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:98:15:98:16 | dx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:98:15:98:21 | ... > ... | exprs.kt:4:1:142:1 | topLevelMethod | GTExpr | | exprs.kt:98:20:98:21 | dy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:99:9:99:11 | d11 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:99:5:99:22 | d11 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:99:15:99:16 | dx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:99:15:99:22 | ... >= ... | exprs.kt:4:1:142:1 | topLevelMethod | GEExpr | | exprs.kt:99:21:99:22 | dy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:100:9:100:11 | d12 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:100:5:100:23 | d12 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:100:15:100:16 | dx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:100:15:100:23 | ... == ... | exprs.kt:4:1:142:1 | topLevelMethod | EQExpr | | exprs.kt:100:22:100:23 | dy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:101:9:101:11 | d13 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:101:5:101:23 | d13 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:101:15:101:16 | dx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:101:15:101:23 | ... != ... | exprs.kt:4:1:142:1 | topLevelMethod | NEExpr | | exprs.kt:101:22:101:23 | dy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:103:9:103:10 | f1 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:103:5:103:16 | f1 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:103:14:103:16 | 1.0 | exprs.kt:4:1:142:1 | topLevelMethod | DoubleLiteral | -| exprs.kt:104:9:104:10 | f2 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:104:5:104:20 | f2 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:104:14:104:15 | fx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:104:14:104:20 | ... + ... | exprs.kt:4:1:142:1 | topLevelMethod | AddExpr | | exprs.kt:104:19:104:20 | fy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:105:9:105:10 | f3 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:105:5:105:20 | f3 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:105:14:105:15 | fx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:105:14:105:20 | ... - ... | exprs.kt:4:1:142:1 | topLevelMethod | SubExpr | | exprs.kt:105:19:105:20 | fy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:106:9:106:10 | f4 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:106:5:106:20 | f4 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:106:14:106:15 | fx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:106:14:106:20 | ... / ... | exprs.kt:4:1:142:1 | topLevelMethod | DivExpr | | exprs.kt:106:19:106:20 | fy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:107:9:107:10 | f5 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:107:5:107:20 | f5 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:107:14:107:15 | fx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:107:14:107:20 | ... % ... | exprs.kt:4:1:142:1 | topLevelMethod | RemExpr | | exprs.kt:107:19:107:20 | fy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:108:9:108:10 | f6 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:108:5:108:21 | f6 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:108:14:108:15 | fx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:108:14:108:21 | ... == ... | exprs.kt:4:1:142:1 | topLevelMethod | EQExpr | | exprs.kt:108:20:108:21 | fy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:109:9:109:10 | f7 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:109:5:109:21 | f7 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:109:14:109:15 | fx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:109:14:109:21 | ... != ... | exprs.kt:4:1:142:1 | topLevelMethod | NEExpr | | exprs.kt:109:20:109:21 | fy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:110:9:110:10 | f8 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:110:5:110:20 | f8 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:110:14:110:15 | fx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:110:14:110:20 | ... < ... | exprs.kt:4:1:142:1 | topLevelMethod | LTExpr | | exprs.kt:110:19:110:20 | fy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:111:9:111:10 | f9 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:111:5:111:21 | f9 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:111:14:111:15 | fx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:111:14:111:21 | ... <= ... | exprs.kt:4:1:142:1 | topLevelMethod | LEExpr | | exprs.kt:111:20:111:21 | fy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:112:9:112:11 | f10 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:112:5:112:21 | f10 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:112:15:112:16 | fx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:112:15:112:21 | ... > ... | exprs.kt:4:1:142:1 | topLevelMethod | GTExpr | | exprs.kt:112:20:112:21 | fy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:113:9:113:11 | f11 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:113:5:113:22 | f11 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:113:15:113:16 | fx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:113:15:113:22 | ... >= ... | exprs.kt:4:1:142:1 | topLevelMethod | GEExpr | | exprs.kt:113:21:113:22 | fy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:114:9:114:11 | f12 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:114:5:114:23 | f12 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:114:15:114:16 | fx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:114:15:114:23 | ... == ... | exprs.kt:4:1:142:1 | topLevelMethod | EQExpr | | exprs.kt:114:22:114:23 | fy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:115:9:115:11 | f13 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:115:5:115:23 | f13 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:115:15:115:16 | fx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:115:15:115:23 | ... != ... | exprs.kt:4:1:142:1 | topLevelMethod | NEExpr | | exprs.kt:115:22:115:23 | fy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:117:9:117:10 | b1 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:117:5:117:17 | b1 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:117:14:117:17 | true | exprs.kt:4:1:142:1 | topLevelMethod | BooleanLiteral | -| exprs.kt:118:9:118:10 | b2 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:118:5:118:18 | b2 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:118:14:118:18 | false | exprs.kt:4:1:142:1 | topLevelMethod | BooleanLiteral | -| exprs.kt:119:9:119:10 | b3 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:119:5:119:21 | b3 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:119:14:119:15 | b1 | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:119:14:119:21 | ... && ... | exprs.kt:4:1:142:1 | topLevelMethod | AndLogicalExpr | | exprs.kt:119:20:119:21 | b2 | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:120:9:120:10 | b4 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:120:5:120:21 | b4 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:120:14:120:15 | b1 | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:120:14:120:21 | ... \|\| ... | exprs.kt:4:1:142:1 | topLevelMethod | OrLogicalExpr | | exprs.kt:120:20:120:21 | b2 | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:121:9:121:10 | b5 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:121:5:121:16 | b5 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:121:14:121:16 | !... | exprs.kt:4:1:142:1 | topLevelMethod | LogNotExpr | | exprs.kt:121:15:121:16 | b1 | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:123:9:123:9 | c | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:123:5:123:15 | c | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:123:13:123:15 | x | exprs.kt:4:1:142:1 | topLevelMethod | CharacterLiteral | -| exprs.kt:124:9:124:11 | str | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | -| exprs.kt:124:16:124:25 | "string lit" | exprs.kt:4:1:142:1 | topLevelMethod | StringLiteral | -| exprs.kt:125:9:125:20 | strWithQuote | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | -| exprs.kt:125:25:125:37 | "string \\" lit" | exprs.kt:4:1:142:1 | topLevelMethod | StringLiteral | -| exprs.kt:126:9:126:10 | b6 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:124:5:124:26 | str | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:124:15:124:26 | "string lit" | exprs.kt:4:1:142:1 | topLevelMethod | StringLiteral | +| exprs.kt:125:5:125:38 | strWithQuote | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:125:24:125:38 | "string \\" lit" | exprs.kt:4:1:142:1 | topLevelMethod | StringLiteral | +| exprs.kt:126:5:126:22 | b6 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:126:14:126:15 | i1 | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:126:14:126:22 | ...instanceof... | exprs.kt:4:1:142:1 | topLevelMethod | InstanceOfExpr | | exprs.kt:126:14:126:22 | int | exprs.kt:4:1:142:1 | topLevelMethod | TypeAccess | -| exprs.kt:127:9:127:10 | b7 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:127:5:127:23 | b7 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:127:14:127:15 | i1 | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:127:14:127:23 | ... !is ... | exprs.kt:4:1:142:1 | topLevelMethod | NotInstanceOfExpr | | exprs.kt:127:14:127:23 | int | exprs.kt:4:1:142:1 | topLevelMethod | TypeAccess | -| exprs.kt:128:9:128:10 | b8 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:128:5:128:26 | b8 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:128:14:128:15 | b7 | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:128:14:128:26 | (...)... | exprs.kt:4:1:142:1 | topLevelMethod | CastExpr | | exprs.kt:128:14:128:26 | boolean | exprs.kt:4:1:142:1 | topLevelMethod | TypeAccess | -| exprs.kt:129:9:129:12 | str1 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | -| exprs.kt:129:25:129:34 | "string lit" | exprs.kt:4:1:142:1 | topLevelMethod | StringLiteral | -| exprs.kt:130:9:130:12 | str2 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | -| exprs.kt:130:26:130:35 | "string lit" | exprs.kt:4:1:142:1 | topLevelMethod | StringLiteral | -| exprs.kt:131:9:131:12 | str3 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:129:5:129:35 | str1 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:129:24:129:35 | "string lit" | exprs.kt:4:1:142:1 | topLevelMethod | StringLiteral | +| exprs.kt:130:5:130:36 | str2 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:130:25:130:36 | "string lit" | exprs.kt:4:1:142:1 | topLevelMethod | StringLiteral | +| exprs.kt:131:5:131:28 | str3 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:131:25:131:28 | null | exprs.kt:4:1:142:1 | topLevelMethod | NullLiteral | -| exprs.kt:132:9:132:12 | str4 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:132:5:132:48 | str4 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:132:24:132:48 | "..." | exprs.kt:4:1:142:1 | topLevelMethod | StringTemplateExpr | | exprs.kt:132:25:132:28 | "foo " | exprs.kt:4:1:142:1 | topLevelMethod | StringLiteral | | exprs.kt:132:30:132:33 | str1 | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:132:34:132:38 | " bar " | exprs.kt:4:1:142:1 | topLevelMethod | StringLiteral | | exprs.kt:132:40:132:43 | str2 | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:132:44:132:47 | " baz" | exprs.kt:4:1:142:1 | topLevelMethod | StringLiteral | -| exprs.kt:133:9:133:12 | str5 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:133:5:133:66 | str5 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:133:24:133:66 | "..." | exprs.kt:4:1:142:1 | topLevelMethod | StringTemplateExpr | | exprs.kt:133:25:133:28 | "foo " | exprs.kt:4:1:142:1 | topLevelMethod | StringLiteral | | exprs.kt:133:31:133:34 | str1 | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | @@ -1381,11 +1381,11 @@ | exprs.kt:133:50:133:60 | stringPlus(...) | exprs.kt:4:1:142:1 | topLevelMethod | MethodCall | | exprs.kt:133:57:133:60 | str1 | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:133:62:133:65 | " baz" | exprs.kt:4:1:142:1 | topLevelMethod | StringLiteral | -| exprs.kt:134:9:134:12 | str6 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:134:5:134:26 | str6 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:134:16:134:19 | str1 | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:134:16:134:26 | ... + ... | exprs.kt:4:1:142:1 | topLevelMethod | AddExpr | | exprs.kt:134:23:134:26 | str2 | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:136:9:136:16 | variable | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:136:5:136:21 | variable | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:136:20:136:21 | 10 | exprs.kt:4:1:142:1 | topLevelMethod | IntegerLiteral | | exprs.kt:137:12:137:19 | variable | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:137:12:137:23 | ... > ... | exprs.kt:4:1:142:1 | topLevelMethod | GTExpr | From 5d0b780c0662ade6ae8be43d071bae8e0ecf9dca Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 14 Feb 2024 15:37:10 +0000 Subject: [PATCH 244/378] Kotlin 2: Accept some location improvements in library-tests/exprs/exprs.expected --- .../library-tests/exprs/exprs.expected | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected index 9ae45446268..4120fd092fc 100644 --- a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected +++ b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected @@ -883,16 +883,6 @@ | delegatedProperties.kt:87:34:87:46 | getTopLevelInt(...) | delegatedProperties.kt:87:34:87:46 | get | MethodCall | | delegatedProperties.kt:87:34:87:46 | setTopLevelInt(...) | delegatedProperties.kt:87:34:87:46 | set | MethodCall | | delegatedProperties.kt:87:34:87:46 | this | delegatedProperties.kt:87:34:87:46 | invoke | ThisAccess | -| exprs.kt:0:0:0:0 | Color | file://:0:0:0:0 | | TypeAccess | -| exprs.kt:0:0:0:0 | Color | file://:0:0:0:0 | | TypeAccess | -| exprs.kt:0:0:0:0 | Color | file://:0:0:0:0 | | TypeAccess | -| exprs.kt:0:0:0:0 | Color[] | file://:0:0:0:0 | | TypeAccess | -| exprs.kt:0:0:0:0 | Direction | file://:0:0:0:0 | | TypeAccess | -| exprs.kt:0:0:0:0 | Direction | file://:0:0:0:0 | | TypeAccess | -| exprs.kt:0:0:0:0 | Direction | file://:0:0:0:0 | | TypeAccess | -| exprs.kt:0:0:0:0 | Direction[] | file://:0:0:0:0 | | TypeAccess | -| exprs.kt:0:0:0:0 | EnumEntries | file://:0:0:0:0 | | TypeAccess | -| exprs.kt:0:0:0:0 | EnumEntries | file://:0:0:0:0 | | TypeAccess | | exprs.kt:0:0:0:0 | String | file://:0:0:0:0 | | TypeAccess | | exprs.kt:0:0:0:0 | String | file://:0:0:0:0 | | TypeAccess | | exprs.kt:4:1:142:1 | int | file://:0:0:0:0 | | TypeAccess | @@ -1476,7 +1466,12 @@ | exprs.kt:170:21:170:21 | 3 | exprs.kt:165:1:172:1 | foo | IntegerLiteral | | exprs.kt:174:1:176:1 | 0 | exprs.kt:174:6:176:1 | Direction | IntegerLiteral | | exprs.kt:174:1:176:1 | Direction | exprs.kt:174:6:176:1 | Direction | TypeAccess | +| exprs.kt:174:1:176:1 | Direction | file://:0:0:0:0 | | TypeAccess | +| exprs.kt:174:1:176:1 | Direction | file://:0:0:0:0 | | TypeAccess | +| exprs.kt:174:1:176:1 | Direction | file://:0:0:0:0 | | TypeAccess | +| exprs.kt:174:1:176:1 | Direction[] | file://:0:0:0:0 | | TypeAccess | | exprs.kt:174:1:176:1 | Enum | exprs.kt:174:6:176:1 | Direction | TypeAccess | +| exprs.kt:174:1:176:1 | EnumEntries | file://:0:0:0:0 | | TypeAccess | | exprs.kt:174:1:176:1 | new Enum(...) | exprs.kt:174:6:176:1 | Direction | ClassInstanceExpr | | exprs.kt:174:1:176:1 | null | exprs.kt:174:6:176:1 | Direction | NullLiteral | | exprs.kt:175:5:175:10 | ...=... | exprs.kt:0:0:0:0 | | KtInitializerAssignExpr | @@ -1505,7 +1500,12 @@ | exprs.kt:175:25:175:28 | new Direction(...) | exprs.kt:0:0:0:0 | | ClassInstanceExpr | | exprs.kt:178:1:182:1 | 0 | exprs.kt:178:6:182:1 | Color | IntegerLiteral | | exprs.kt:178:1:182:1 | Color | exprs.kt:178:6:182:1 | Color | TypeAccess | +| exprs.kt:178:1:182:1 | Color | file://:0:0:0:0 | | TypeAccess | +| exprs.kt:178:1:182:1 | Color | file://:0:0:0:0 | | TypeAccess | +| exprs.kt:178:1:182:1 | Color | file://:0:0:0:0 | | TypeAccess | +| exprs.kt:178:1:182:1 | Color[] | file://:0:0:0:0 | | TypeAccess | | exprs.kt:178:1:182:1 | Enum | exprs.kt:178:6:182:1 | Color | TypeAccess | +| exprs.kt:178:1:182:1 | EnumEntries | file://:0:0:0:0 | | TypeAccess | | exprs.kt:178:1:182:1 | new Enum(...) | exprs.kt:178:6:182:1 | Color | ClassInstanceExpr | | exprs.kt:178:1:182:1 | null | exprs.kt:178:6:182:1 | Color | NullLiteral | | exprs.kt:178:18:178:29 | ...=... | exprs.kt:178:6:182:1 | Color | KtInitializerAssignExpr | From 9195be34a2f37a6e0fb0bb706b413c77e13c60fd Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 14 Feb 2024 15:44:28 +0000 Subject: [PATCH 245/378] Kotlin 2: Accept location changes in library-tests/exprs/exprs for whenExpr.kt --- java/ql/test-kotlin2/library-tests/exprs/exprs.expected | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected index 4120fd092fc..86804f68c10 100644 --- a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected +++ b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected @@ -4383,6 +4383,6 @@ | whenExpr.kt:6:5:6:5 | tmp0_subject | whenExpr.kt:1:1:9:1 | testWhen | VarAccess | | whenExpr.kt:6:16:6:44 | Exception | whenExpr.kt:1:1:9:1 | testWhen | TypeAccess | | whenExpr.kt:6:16:6:44 | new Exception(...) | whenExpr.kt:1:1:9:1 | testWhen | ClassInstanceExpr | -| whenExpr.kt:6:27:6:42 | "No threes please" | whenExpr.kt:1:1:9:1 | testWhen | StringLiteral | +| whenExpr.kt:6:26:6:43 | "No threes please" | whenExpr.kt:1:1:9:1 | testWhen | StringLiteral | | whenExpr.kt:7:13:7:15 | 999 | whenExpr.kt:1:1:9:1 | testWhen | IntegerLiteral | | whenExpr.kt:7:13:7:15 | true | whenExpr.kt:1:1:9:1 | testWhen | BooleanLiteral | From 1cc645b27663d6392d1ced42108fc96ed222ac6e Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 14 Feb 2024 15:49:44 +0000 Subject: [PATCH 246/378] Kotlin 2: Accept location changes in library-tests/exprs for samConversion.kt --- .../library-tests/exprs/exprs.expected | 56 +++++++++---------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected index 86804f68c10..bfb5048341b 100644 --- a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected +++ b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected @@ -3611,7 +3611,7 @@ | localFunctionCalls.kt:11:18:11:19 | 42 | localFunctionCalls.kt:3:1:12:1 | x | IntegerLiteral | | samConversion.kt:1:1:14:1 | Unit | file://:0:0:0:0 | | TypeAccess | | samConversion.kt:1:10:1:19 | boolean | file://:0:0:0:0 | | TypeAccess | -| samConversion.kt:2:9:2:14 | isEven | samConversion.kt:1:1:14:1 | main | LocalVariableDeclExpr | +| samConversion.kt:2:5:2:45 | isEven | samConversion.kt:1:1:14:1 | main | LocalVariableDeclExpr | | samConversion.kt:2:18:2:45 | (...)... | samConversion.kt:1:1:14:1 | main | CastExpr | | samConversion.kt:2:18:2:45 | ...=... | samConversion.kt:2:18:2:45 | | AssignExpr | | samConversion.kt:2:18:2:45 | | samConversion.kt:2:18:2:45 | | VarAccess | @@ -3639,7 +3639,7 @@ | samConversion.kt:2:33:2:43 | ... (value equals) ... | samConversion.kt:2:31:2:45 | invoke | ValueEQExpr | | samConversion.kt:2:38:2:38 | 2 | samConversion.kt:2:31:2:45 | invoke | IntegerLiteral | | samConversion.kt:2:43:2:43 | 0 | samConversion.kt:2:31:2:45 | invoke | IntegerLiteral | -| samConversion.kt:4:9:4:10 | i0 | samConversion.kt:1:1:14:1 | main | LocalVariableDeclExpr | +| samConversion.kt:4:5:4:42 | i0 | samConversion.kt:1:1:14:1 | main | LocalVariableDeclExpr | | samConversion.kt:4:14:4:42 | (...)... | samConversion.kt:1:1:14:1 | main | CastExpr | | samConversion.kt:4:14:4:42 | ...=... | samConversion.kt:4:14:4:42 | | AssignExpr | | samConversion.kt:4:14:4:42 | | samConversion.kt:4:14:4:42 | | VarAccess | @@ -3668,7 +3668,7 @@ | samConversion.kt:4:29:4:29 | int | file://:0:0:0:0 | | TypeAccess | | samConversion.kt:4:32:4:32 | int | file://:0:0:0:0 | | TypeAccess | | samConversion.kt:4:37:4:40 | INSTANCE | samConversion.kt:4:27:4:42 | invoke | VarAccess | -| samConversion.kt:5:9:5:10 | i1 | samConversion.kt:1:1:14:1 | main | LocalVariableDeclExpr | +| samConversion.kt:5:5:5:32 | i1 | samConversion.kt:1:1:14:1 | main | LocalVariableDeclExpr | | samConversion.kt:5:14:5:32 | (...)... | samConversion.kt:1:1:14:1 | main | CastExpr | | samConversion.kt:5:14:5:32 | ...=... | samConversion.kt:5:14:5:32 | | AssignExpr | | samConversion.kt:5:14:5:32 | | samConversion.kt:5:14:5:32 | | VarAccess | @@ -3698,7 +3698,7 @@ | samConversion.kt:5:27:5:31 | a0 | samConversion.kt:5:27:5:31 | invoke | VarAccess | | samConversion.kt:5:27:5:31 | a1 | samConversion.kt:5:27:5:31 | invoke | VarAccess | | samConversion.kt:5:27:5:31 | fn2(...) | samConversion.kt:5:27:5:31 | invoke | MethodCall | -| samConversion.kt:7:9:7:9 | i | samConversion.kt:1:1:14:1 | main | LocalVariableDeclExpr | +| samConversion.kt:7:5:7:46 | i | samConversion.kt:1:1:14:1 | main | LocalVariableDeclExpr | | samConversion.kt:7:13:7:46 | (...)... | samConversion.kt:1:1:14:1 | main | CastExpr | | samConversion.kt:7:13:7:46 | ...=... | samConversion.kt:7:13:7:46 | | AssignExpr | | samConversion.kt:7:13:7:46 | | samConversion.kt:7:13:7:46 | | VarAccess | @@ -3729,7 +3729,7 @@ | samConversion.kt:7:36:7:39 | this | samConversion.kt:7:29:7:46 | invoke | ExtensionReceiverAccess | | samConversion.kt:7:36:7:45 | ... (value equals) ... | samConversion.kt:7:29:7:46 | invoke | ValueEQExpr | | samConversion.kt:7:44:7:45 | "" | samConversion.kt:7:29:7:46 | invoke | StringLiteral | -| samConversion.kt:9:9:9:9 | x | samConversion.kt:1:1:14:1 | main | LocalVariableDeclExpr | +| samConversion.kt:9:5:13:6 | x | samConversion.kt:1:1:14:1 | main | LocalVariableDeclExpr | | samConversion.kt:9:13:13:6 | (...)... | samConversion.kt:1:1:14:1 | main | CastExpr | | samConversion.kt:9:13:13:6 | ...=... | samConversion.kt:9:13:13:6 | | AssignExpr | | samConversion.kt:9:13:13:6 | | samConversion.kt:9:13:13:6 | | VarAccess | @@ -3746,7 +3746,6 @@ | samConversion.kt:9:13:13:6 | new (...) | samConversion.kt:1:1:14:1 | main | ClassInstanceExpr | | samConversion.kt:9:13:13:6 | this | samConversion.kt:9:13:13:6 | | ThisAccess | | samConversion.kt:9:13:13:6 | this. | samConversion.kt:9:13:13:6 | | VarAccess | -| samConversion.kt:9:26:13:5 | true | samConversion.kt:1:1:14:1 | main | BooleanLiteral | | samConversion.kt:9:26:13:5 | when ... | samConversion.kt:1:1:14:1 | main | WhenExpr | | samConversion.kt:9:30:9:30 | b | samConversion.kt:1:1:14:1 | main | VarAccess | | samConversion.kt:9:33:11:5 | ...->... | samConversion.kt:1:1:14:1 | main | LambdaExpr | @@ -3765,6 +3764,7 @@ | samConversion.kt:11:12:13:5 | Function1 | samConversion.kt:1:1:14:1 | main | TypeAccess | | samConversion.kt:11:12:13:5 | Integer | samConversion.kt:1:1:14:1 | main | TypeAccess | | samConversion.kt:11:12:13:5 | boolean | file://:0:0:0:0 | | TypeAccess | +| samConversion.kt:11:12:13:5 | true | samConversion.kt:1:1:14:1 | main | BooleanLiteral | | samConversion.kt:12:13:12:13 | int | file://:0:0:0:0 | | TypeAccess | | samConversion.kt:12:18:12:18 | j | samConversion.kt:11:12:13:5 | invoke | VarAccess | | samConversion.kt:12:18:12:22 | ... % ... | samConversion.kt:11:12:13:5 | invoke | RemExpr | @@ -3833,7 +3833,7 @@ | samConversion.kt:38:49:38:52 | true | samConversion.kt:36:1:38:52 | ff | BooleanLiteral | | samConversion.kt:40:1:47:1 | Unit | file://:0:0:0:0 | | TypeAccess | | samConversion.kt:40:8:40:19 | boolean | file://:0:0:0:0 | | TypeAccess | -| samConversion.kt:41:9:41:9 | a | samConversion.kt:40:1:47:1 | fn | LocalVariableDeclExpr | +| samConversion.kt:41:5:41:16 | a | samConversion.kt:40:1:47:1 | fn | LocalVariableDeclExpr | | samConversion.kt:41:13:41:16 | 0 | samConversion.kt:41:13:41:16 | invoke | IntegerLiteral | | samConversion.kt:41:13:41:16 | 1 | samConversion.kt:41:13:41:16 | invoke | IntegerLiteral | | samConversion.kt:41:13:41:16 | 2 | samConversion.kt:41:13:41:16 | invoke | IntegerLiteral | @@ -3955,7 +3955,7 @@ | samConversion.kt:41:13:41:16 | int | samConversion.kt:41:13:41:16 | invoke | TypeAccess | | samConversion.kt:41:13:41:16 | int | samConversion.kt:41:13:41:16 | invoke | TypeAccess | | samConversion.kt:41:13:41:16 | int | samConversion.kt:41:13:41:16 | invoke | TypeAccess | -| samConversion.kt:42:9:42:9 | b | samConversion.kt:40:1:47:1 | fn | LocalVariableDeclExpr | +| samConversion.kt:42:5:42:32 | b | samConversion.kt:40:1:47:1 | fn | LocalVariableDeclExpr | | samConversion.kt:42:13:42:32 | 23 | samConversion.kt:42:13:42:32 | accept | IntegerLiteral | | samConversion.kt:42:13:42:32 | (...)... | samConversion.kt:40:1:47:1 | fn | CastExpr | | samConversion.kt:42:13:42:32 | ...=... | samConversion.kt:42:13:42:32 | | AssignExpr | @@ -4020,7 +4020,7 @@ | samConversion.kt:42:13:42:32 | this. | samConversion.kt:42:13:42:32 | | VarAccess | | samConversion.kt:42:13:42:32 | {...} | samConversion.kt:42:13:42:32 | accept | ArrayInit | | samConversion.kt:42:31:42:31 | a | samConversion.kt:40:1:47:1 | fn | VarAccess | -| samConversion.kt:43:9:43:9 | c | samConversion.kt:40:1:47:1 | fn | LocalVariableDeclExpr | +| samConversion.kt:43:5:45:68 | c | samConversion.kt:40:1:47:1 | fn | LocalVariableDeclExpr | | samConversion.kt:43:13:45:68 | 23 | samConversion.kt:43:13:45:68 | accept | IntegerLiteral | | samConversion.kt:43:13:45:68 | (...)... | samConversion.kt:40:1:47:1 | fn | CastExpr | | samConversion.kt:43:13:45:68 | ...=... | samConversion.kt:43:13:45:68 | | AssignExpr | @@ -4229,7 +4229,7 @@ | samConversion.kt:45:42:45:49 | int | file://:0:0:0:0 | | TypeAccess | | samConversion.kt:45:52:45:59 | int | file://:0:0:0:0 | | TypeAccess | | samConversion.kt:45:64:45:67 | true | samConversion.kt:43:31:45:68 | invoke | BooleanLiteral | -| samConversion.kt:46:9:46:9 | d | samConversion.kt:40:1:47:1 | fn | LocalVariableDeclExpr | +| samConversion.kt:46:5:46:44 | d | samConversion.kt:40:1:47:1 | fn | LocalVariableDeclExpr | | samConversion.kt:46:13:46:44 | (...)... | samConversion.kt:40:1:47:1 | fn | CastExpr | | samConversion.kt:46:13:46:44 | ...=... | samConversion.kt:46:13:46:44 | | AssignExpr | | samConversion.kt:46:13:46:44 | | samConversion.kt:46:13:46:44 | | VarAccess | @@ -4257,20 +4257,20 @@ | samConversion.kt:46:39:46:42 | true | samConversion.kt:46:32:46:44 | invoke | BooleanLiteral | | samConversion.kt:50:5:50:25 | boolean | file://:0:0:0:0 | | TypeAccess | | samConversion.kt:50:12:50:15 | T | file://:0:0:0:0 | | TypeAccess | -| samConversion.kt:54:13:54:35 | Unit | file://:0:0:0:0 | | TypeAccess | +| samConversion.kt:54:5:54:35 | Unit | file://:0:0:0:0 | | TypeAccess | | samConversion.kt:54:21:54:26 | int | file://:0:0:0:0 | | TypeAccess | | samConversion.kt:54:29:54:34 | int | file://:0:0:0:0 | | TypeAccess | -| samConversion.kt:57:9:60:1 | Unit | file://:0:0:0:0 | | TypeAccess | -| samConversion.kt:58:9:58:10 | i0 | samConversion.kt:57:9:60:1 | test | LocalVariableDeclExpr | -| samConversion.kt:58:14:58:45 | (...)... | samConversion.kt:57:9:60:1 | test | CastExpr | +| samConversion.kt:57:1:60:1 | Unit | file://:0:0:0:0 | | TypeAccess | +| samConversion.kt:58:5:58:45 | i0 | samConversion.kt:57:1:60:1 | test | LocalVariableDeclExpr | +| samConversion.kt:58:14:58:45 | (...)... | samConversion.kt:57:1:60:1 | test | CastExpr | | samConversion.kt:58:14:58:45 | ...=... | samConversion.kt:58:14:58:45 | | AssignExpr | | samConversion.kt:58:14:58:45 | | samConversion.kt:58:14:58:45 | | VarAccess | | samConversion.kt:58:14:58:45 | | samConversion.kt:58:14:58:45 | fn1 | VarAccess | | samConversion.kt:58:14:58:45 | Function2 | file://:0:0:0:0 | | TypeAccess | | samConversion.kt:58:14:58:45 | Integer | file://:0:0:0:0 | | TypeAccess | | samConversion.kt:58:14:58:45 | Integer | file://:0:0:0:0 | | TypeAccess | -| samConversion.kt:58:14:58:45 | InterfaceFn1Sus | samConversion.kt:57:9:60:1 | test | TypeAccess | -| samConversion.kt:58:14:58:45 | InterfaceFn1Sus | samConversion.kt:57:9:60:1 | test | TypeAccess | +| samConversion.kt:58:14:58:45 | InterfaceFn1Sus | samConversion.kt:57:1:60:1 | test | TypeAccess | +| samConversion.kt:58:14:58:45 | InterfaceFn1Sus | samConversion.kt:57:1:60:1 | test | TypeAccess | | samConversion.kt:58:14:58:45 | Unit | file://:0:0:0:0 | | TypeAccess | | samConversion.kt:58:14:58:45 | Unit | file://:0:0:0:0 | | TypeAccess | | samConversion.kt:58:14:58:45 | i | samConversion.kt:58:14:58:45 | fn1 | VarAccess | @@ -4278,22 +4278,22 @@ | samConversion.kt:58:14:58:45 | int | file://:0:0:0:0 | | TypeAccess | | samConversion.kt:58:14:58:45 | invoke(...) | samConversion.kt:58:14:58:45 | fn1 | MethodCall | | samConversion.kt:58:14:58:45 | j | samConversion.kt:58:14:58:45 | fn1 | VarAccess | -| samConversion.kt:58:14:58:45 | new (...) | samConversion.kt:57:9:60:1 | test | ClassInstanceExpr | +| samConversion.kt:58:14:58:45 | new (...) | samConversion.kt:57:1:60:1 | test | ClassInstanceExpr | | samConversion.kt:58:14:58:45 | this | samConversion.kt:58:14:58:45 | | ThisAccess | | samConversion.kt:58:14:58:45 | this. | samConversion.kt:58:14:58:45 | | VarAccess | -| samConversion.kt:58:30:58:45 | ...->... | samConversion.kt:57:9:60:1 | test | LambdaExpr | -| samConversion.kt:58:30:58:45 | Function2 | samConversion.kt:57:9:60:1 | test | TypeAccess | -| samConversion.kt:58:30:58:45 | Integer | samConversion.kt:57:9:60:1 | test | TypeAccess | -| samConversion.kt:58:30:58:45 | Integer | samConversion.kt:57:9:60:1 | test | TypeAccess | +| samConversion.kt:58:30:58:45 | ...->... | samConversion.kt:57:1:60:1 | test | LambdaExpr | +| samConversion.kt:58:30:58:45 | Function2 | samConversion.kt:57:1:60:1 | test | TypeAccess | +| samConversion.kt:58:30:58:45 | Integer | samConversion.kt:57:1:60:1 | test | TypeAccess | +| samConversion.kt:58:30:58:45 | Integer | samConversion.kt:57:1:60:1 | test | TypeAccess | | samConversion.kt:58:30:58:45 | Unit | file://:0:0:0:0 | | TypeAccess | -| samConversion.kt:58:30:58:45 | Unit | samConversion.kt:57:9:60:1 | test | TypeAccess | +| samConversion.kt:58:30:58:45 | Unit | samConversion.kt:57:1:60:1 | test | TypeAccess | | samConversion.kt:58:32:58:32 | int | file://:0:0:0:0 | | TypeAccess | | samConversion.kt:58:35:58:35 | int | file://:0:0:0:0 | | TypeAccess | | samConversion.kt:58:40:58:43 | INSTANCE | samConversion.kt:58:30:58:45 | invoke | VarAccess | -| samConversion.kt:59:5:59:6 | i0 | samConversion.kt:57:9:60:1 | test | VarAccess | -| samConversion.kt:59:5:59:15 | fn1(...) | samConversion.kt:57:9:60:1 | test | MethodCall | -| samConversion.kt:59:12:59:12 | 1 | samConversion.kt:57:9:60:1 | test | IntegerLiteral | -| samConversion.kt:59:14:59:14 | 2 | samConversion.kt:57:9:60:1 | test | IntegerLiteral | +| samConversion.kt:59:5:59:6 | i0 | samConversion.kt:57:1:60:1 | test | VarAccess | +| samConversion.kt:59:5:59:15 | fn1(...) | samConversion.kt:57:1:60:1 | test | MethodCall | +| samConversion.kt:59:12:59:12 | 1 | samConversion.kt:57:1:60:1 | test | IntegerLiteral | +| samConversion.kt:59:14:59:14 | 2 | samConversion.kt:57:1:60:1 | test | IntegerLiteral | | samConversion.kt:63:5:63:13 | ...=... | samConversion.kt:62:1:64:1 | PropertyRefsTest | KtInitializerAssignExpr | | samConversion.kt:63:5:63:13 | int | file://:0:0:0:0 | | TypeAccess | | samConversion.kt:63:5:63:13 | int | file://:0:0:0:0 | | TypeAccess | @@ -4306,7 +4306,7 @@ | samConversion.kt:71:5:71:16 | int | file://:0:0:0:0 | | TypeAccess | | samConversion.kt:74:1:77:1 | Unit | file://:0:0:0:0 | | TypeAccess | | samConversion.kt:74:22:74:42 | PropertyRefsTest | file://:0:0:0:0 | | TypeAccess | -| samConversion.kt:75:9:75:13 | test1 | samConversion.kt:74:1:77:1 | propertyRefsTest | LocalVariableDeclExpr | +| samConversion.kt:75:5:75:33 | test1 | samConversion.kt:74:1:77:1 | propertyRefsTest | LocalVariableDeclExpr | | samConversion.kt:75:17:75:33 | (...)... | samConversion.kt:74:1:77:1 | propertyRefsTest | CastExpr | | samConversion.kt:75:17:75:33 | ...=... | samConversion.kt:75:17:75:33 | | AssignExpr | | samConversion.kt:75:17:75:33 | | samConversion.kt:75:17:75:33 | | VarAccess | @@ -4334,7 +4334,7 @@ | samConversion.kt:75:27:75:32 | this | samConversion.kt:75:27:75:32 | invoke | ThisAccess | | samConversion.kt:75:27:75:32 | this. | samConversion.kt:75:27:75:32 | | VarAccess | | samConversion.kt:75:27:75:32 | this. | samConversion.kt:75:27:75:32 | get | VarAccess | -| samConversion.kt:76:9:76:13 | test2 | samConversion.kt:74:1:77:1 | propertyRefsTest | LocalVariableDeclExpr | +| samConversion.kt:76:5:76:55 | test2 | samConversion.kt:74:1:77:1 | propertyRefsTest | LocalVariableDeclExpr | | samConversion.kt:76:17:76:55 | (...)... | samConversion.kt:74:1:77:1 | propertyRefsTest | CastExpr | | samConversion.kt:76:17:76:55 | ...=... | samConversion.kt:76:17:76:55 | | AssignExpr | | samConversion.kt:76:17:76:55 | | samConversion.kt:76:17:76:55 | | VarAccess | From eb401a205d08c324f5989776230e52901d62934d Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Wed, 14 Feb 2024 16:53:19 +0100 Subject: [PATCH 247/378] Python: Fix test exclusion for stdlib Python 3.12 --- .../python/security/DecompressionBomb.qll | 7 +- .../CWE-409/DecompressionBombs.expected | 194 +++++++++--------- .../query-tests/Security/CWE-409/test.py | 1 + 3 files changed, 104 insertions(+), 98 deletions(-) diff --git a/python/ql/src/experimental/semmle/python/security/DecompressionBomb.qll b/python/ql/src/experimental/semmle/python/security/DecompressionBomb.qll index b21b209cbc3..0c9f38f4a24 100644 --- a/python/ql/src/experimental/semmle/python/security/DecompressionBomb.qll +++ b/python/ql/src/experimental/semmle/python/security/DecompressionBomb.qll @@ -380,7 +380,12 @@ module BombsConfig implements DataFlow::ConfigSig { predicate isSink(DataFlow::Node sink) { sink instanceof DecompressionBomb::Sink } predicate isBarrierIn(DataFlow::Node node) { - node.getScope().getEnclosingModule().getName() in ["tarfile", "zipfile"] + node.getScope() + .getEnclosingModule() + .getFile() + .getAbsolutePath() + .matches(["%/tarfile.py", "%/zipfile.py", "%/zipfile/__init__.py"]) and + node.getScope().getEnclosingModule().getFile().inStdlib() } predicate isAdditionalFlowStep(DataFlow::Node pred, DataFlow::Node succ) { diff --git a/python/ql/test/experimental/query-tests/Security/CWE-409/DecompressionBombs.expected b/python/ql/test/experimental/query-tests/Security/CWE-409/DecompressionBombs.expected index fbd4ef38ace..1ae4b635080 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-409/DecompressionBombs.expected +++ b/python/ql/test/experimental/query-tests/Security/CWE-409/DecompressionBombs.expected @@ -1,103 +1,103 @@ edges -| test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:10:21:10:29 | ControlFlowNode for file_path | provenance | | -| test.py:10:21:10:29 | ControlFlowNode for file_path | test.py:10:5:10:52 | ControlFlowNode for Attribute() | provenance | | -| test.py:10:21:10:29 | ControlFlowNode for file_path | test.py:11:21:11:29 | ControlFlowNode for file_path | provenance | | -| test.py:11:21:11:29 | ControlFlowNode for file_path | test.py:11:5:11:48 | ControlFlowNode for Attribute() | provenance | | -| test.py:11:21:11:29 | ControlFlowNode for file_path | test.py:13:26:13:34 | ControlFlowNode for file_path | provenance | | -| test.py:13:26:13:34 | ControlFlowNode for file_path | test.py:14:14:14:29 | ControlFlowNode for Attribute() | provenance | | -| test.py:13:26:13:34 | ControlFlowNode for file_path | test.py:17:26:17:34 | ControlFlowNode for file_path | provenance | | -| test.py:17:26:17:34 | ControlFlowNode for file_path | test.py:18:14:18:39 | ControlFlowNode for Attribute() | provenance | | -| test.py:17:26:17:34 | ControlFlowNode for file_path | test.py:21:21:21:29 | ControlFlowNode for file_path | provenance | | -| test.py:21:21:21:29 | ControlFlowNode for file_path | test.py:21:5:21:60 | ControlFlowNode for Attribute() | provenance | | -| test.py:21:21:21:29 | ControlFlowNode for file_path | test.py:23:18:23:26 | ControlFlowNode for file_path | provenance | | -| test.py:23:18:23:26 | ControlFlowNode for file_path | test.py:23:5:23:52 | ControlFlowNode for Attribute() | provenance | | -| test.py:23:18:23:26 | ControlFlowNode for file_path | test.py:24:26:24:34 | ControlFlowNode for file_path | provenance | | -| test.py:24:26:24:34 | ControlFlowNode for file_path | test.py:24:5:24:55 | ControlFlowNode for Attribute() | provenance | | -| test.py:24:26:24:34 | ControlFlowNode for file_path | test.py:25:28:25:36 | ControlFlowNode for file_path | provenance | | -| test.py:25:28:25:36 | ControlFlowNode for file_path | test.py:25:5:25:57 | ControlFlowNode for Attribute() | provenance | | -| test.py:25:28:25:36 | ControlFlowNode for file_path | test.py:26:28:26:36 | ControlFlowNode for file_path | provenance | | -| test.py:26:28:26:36 | ControlFlowNode for file_path | test.py:26:5:26:50 | ControlFlowNode for Attribute() | provenance | | -| test.py:26:28:26:36 | ControlFlowNode for file_path | test.py:27:26:27:34 | ControlFlowNode for file_path | provenance | | -| test.py:27:26:27:34 | ControlFlowNode for file_path | test.py:27:5:27:60 | ControlFlowNode for Attribute() | provenance | | -| test.py:27:26:27:34 | ControlFlowNode for file_path | test.py:34:27:34:35 | ControlFlowNode for file_path | provenance | | -| test.py:27:26:27:34 | ControlFlowNode for file_path | test.py:38:15:38:23 | ControlFlowNode for file_path | provenance | | -| test.py:27:26:27:34 | ControlFlowNode for file_path | test.py:39:19:39:27 | ControlFlowNode for file_path | provenance | | -| test.py:27:26:27:34 | ControlFlowNode for file_path | test.py:43:14:43:22 | ControlFlowNode for file_path | provenance | | -| test.py:27:26:27:34 | ControlFlowNode for file_path | test.py:44:17:44:25 | ControlFlowNode for file_path | provenance | | -| test.py:27:26:27:34 | ControlFlowNode for file_path | test.py:48:15:48:23 | ControlFlowNode for file_path | provenance | | -| test.py:27:26:27:34 | ControlFlowNode for file_path | test.py:49:19:49:27 | ControlFlowNode for file_path | provenance | | -| test.py:27:26:27:34 | ControlFlowNode for file_path | test.py:53:40:53:48 | ControlFlowNode for file_path | provenance | | -| test.py:27:26:27:34 | ControlFlowNode for file_path | test.py:55:23:55:31 | ControlFlowNode for file_path | provenance | | -| test.py:27:26:27:34 | ControlFlowNode for file_path | test.py:56:21:56:29 | ControlFlowNode for file_path | provenance | | -| test.py:27:26:27:34 | ControlFlowNode for file_path | test.py:58:40:58:48 | ControlFlowNode for file_path | provenance | | -| test.py:27:26:27:34 | ControlFlowNode for file_path | test.py:59:22:59:30 | ControlFlowNode for file_path | provenance | | -| test.py:27:26:27:34 | ControlFlowNode for file_path | test.py:60:21:60:29 | ControlFlowNode for file_path | provenance | | -| test.py:27:26:27:34 | ControlFlowNode for file_path | test.py:61:42:61:50 | ControlFlowNode for file_path | provenance | | -| test.py:27:26:27:34 | ControlFlowNode for file_path | test.py:62:23:62:31 | ControlFlowNode for file_path | provenance | | -| test.py:27:26:27:34 | ControlFlowNode for file_path | test.py:63:36:63:44 | ControlFlowNode for file_path | provenance | | +| test.py:10:16:10:24 | ControlFlowNode for file_path | test.py:11:21:11:29 | ControlFlowNode for file_path | provenance | | +| test.py:11:21:11:29 | ControlFlowNode for file_path | test.py:11:5:11:52 | ControlFlowNode for Attribute() | provenance | | +| test.py:11:21:11:29 | ControlFlowNode for file_path | test.py:12:21:12:29 | ControlFlowNode for file_path | provenance | | +| test.py:12:21:12:29 | ControlFlowNode for file_path | test.py:12:5:12:48 | ControlFlowNode for Attribute() | provenance | | +| test.py:12:21:12:29 | ControlFlowNode for file_path | test.py:14:26:14:34 | ControlFlowNode for file_path | provenance | | +| test.py:14:26:14:34 | ControlFlowNode for file_path | test.py:15:14:15:29 | ControlFlowNode for Attribute() | provenance | | +| test.py:14:26:14:34 | ControlFlowNode for file_path | test.py:18:26:18:34 | ControlFlowNode for file_path | provenance | | +| test.py:18:26:18:34 | ControlFlowNode for file_path | test.py:19:14:19:39 | ControlFlowNode for Attribute() | provenance | | +| test.py:18:26:18:34 | ControlFlowNode for file_path | test.py:22:21:22:29 | ControlFlowNode for file_path | provenance | | +| test.py:22:21:22:29 | ControlFlowNode for file_path | test.py:22:5:22:60 | ControlFlowNode for Attribute() | provenance | | +| test.py:22:21:22:29 | ControlFlowNode for file_path | test.py:24:18:24:26 | ControlFlowNode for file_path | provenance | | +| test.py:24:18:24:26 | ControlFlowNode for file_path | test.py:24:5:24:52 | ControlFlowNode for Attribute() | provenance | | +| test.py:24:18:24:26 | ControlFlowNode for file_path | test.py:25:26:25:34 | ControlFlowNode for file_path | provenance | | +| test.py:25:26:25:34 | ControlFlowNode for file_path | test.py:25:5:25:55 | ControlFlowNode for Attribute() | provenance | | +| test.py:25:26:25:34 | ControlFlowNode for file_path | test.py:26:28:26:36 | ControlFlowNode for file_path | provenance | | +| test.py:26:28:26:36 | ControlFlowNode for file_path | test.py:26:5:26:57 | ControlFlowNode for Attribute() | provenance | | +| test.py:26:28:26:36 | ControlFlowNode for file_path | test.py:27:28:27:36 | ControlFlowNode for file_path | provenance | | +| test.py:27:28:27:36 | ControlFlowNode for file_path | test.py:27:5:27:50 | ControlFlowNode for Attribute() | provenance | | +| test.py:27:28:27:36 | ControlFlowNode for file_path | test.py:28:26:28:34 | ControlFlowNode for file_path | provenance | | +| test.py:28:26:28:34 | ControlFlowNode for file_path | test.py:28:5:28:60 | ControlFlowNode for Attribute() | provenance | | +| test.py:28:26:28:34 | ControlFlowNode for file_path | test.py:35:27:35:35 | ControlFlowNode for file_path | provenance | | +| test.py:28:26:28:34 | ControlFlowNode for file_path | test.py:39:15:39:23 | ControlFlowNode for file_path | provenance | | +| test.py:28:26:28:34 | ControlFlowNode for file_path | test.py:40:19:40:27 | ControlFlowNode for file_path | provenance | | +| test.py:28:26:28:34 | ControlFlowNode for file_path | test.py:44:14:44:22 | ControlFlowNode for file_path | provenance | | +| test.py:28:26:28:34 | ControlFlowNode for file_path | test.py:45:17:45:25 | ControlFlowNode for file_path | provenance | | +| test.py:28:26:28:34 | ControlFlowNode for file_path | test.py:49:15:49:23 | ControlFlowNode for file_path | provenance | | +| test.py:28:26:28:34 | ControlFlowNode for file_path | test.py:50:19:50:27 | ControlFlowNode for file_path | provenance | | +| test.py:28:26:28:34 | ControlFlowNode for file_path | test.py:54:40:54:48 | ControlFlowNode for file_path | provenance | | +| test.py:28:26:28:34 | ControlFlowNode for file_path | test.py:56:23:56:31 | ControlFlowNode for file_path | provenance | | +| test.py:28:26:28:34 | ControlFlowNode for file_path | test.py:57:21:57:29 | ControlFlowNode for file_path | provenance | | +| test.py:28:26:28:34 | ControlFlowNode for file_path | test.py:59:40:59:48 | ControlFlowNode for file_path | provenance | | +| test.py:28:26:28:34 | ControlFlowNode for file_path | test.py:60:22:60:30 | ControlFlowNode for file_path | provenance | | +| test.py:28:26:28:34 | ControlFlowNode for file_path | test.py:61:21:61:29 | ControlFlowNode for file_path | provenance | | +| test.py:28:26:28:34 | ControlFlowNode for file_path | test.py:62:42:62:50 | ControlFlowNode for file_path | provenance | | +| test.py:28:26:28:34 | ControlFlowNode for file_path | test.py:63:23:63:31 | ControlFlowNode for file_path | provenance | | +| test.py:28:26:28:34 | ControlFlowNode for file_path | test.py:64:36:64:44 | ControlFlowNode for file_path | provenance | | nodes -| test.py:9:16:9:24 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | -| test.py:10:5:10:52 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | -| test.py:10:21:10:29 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | -| test.py:11:5:11:48 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| test.py:10:16:10:24 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| test.py:11:5:11:52 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | test.py:11:21:11:29 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | -| test.py:13:26:13:34 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | -| test.py:14:14:14:29 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | -| test.py:17:26:17:34 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | -| test.py:18:14:18:39 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | -| test.py:21:5:21:60 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | -| test.py:21:21:21:29 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | -| test.py:23:5:23:52 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | -| test.py:23:18:23:26 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | -| test.py:24:5:24:55 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | -| test.py:24:26:24:34 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | -| test.py:25:5:25:57 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | -| test.py:25:28:25:36 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | -| test.py:26:5:26:50 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| test.py:12:5:12:48 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| test.py:12:21:12:29 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| test.py:14:26:14:34 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| test.py:15:14:15:29 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| test.py:18:26:18:34 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| test.py:19:14:19:39 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| test.py:22:5:22:60 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| test.py:22:21:22:29 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| test.py:24:5:24:52 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| test.py:24:18:24:26 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| test.py:25:5:25:55 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| test.py:25:26:25:34 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| test.py:26:5:26:57 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | test.py:26:28:26:36 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | -| test.py:27:5:27:60 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | -| test.py:27:26:27:34 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | -| test.py:34:27:34:35 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | -| test.py:38:15:38:23 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | -| test.py:39:19:39:27 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | -| test.py:43:14:43:22 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | -| test.py:44:17:44:25 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | -| test.py:48:15:48:23 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | -| test.py:49:19:49:27 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | -| test.py:53:40:53:48 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | -| test.py:55:23:55:31 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | -| test.py:56:21:56:29 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | -| test.py:58:40:58:48 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | -| test.py:59:22:59:30 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | -| test.py:60:21:60:29 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | -| test.py:61:42:61:50 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | -| test.py:62:23:62:31 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | -| test.py:63:36:63:44 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| test.py:27:5:27:50 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| test.py:27:28:27:36 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| test.py:28:5:28:60 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| test.py:28:26:28:34 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| test.py:35:27:35:35 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| test.py:39:15:39:23 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| test.py:40:19:40:27 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| test.py:44:14:44:22 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| test.py:45:17:45:25 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| test.py:49:15:49:23 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| test.py:50:19:50:27 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| test.py:54:40:54:48 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| test.py:56:23:56:31 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| test.py:57:21:57:29 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| test.py:59:40:59:48 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| test.py:60:22:60:30 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| test.py:61:21:61:29 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| test.py:62:42:62:50 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| test.py:63:23:63:31 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| test.py:64:36:64:44 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | subpaths #select -| test.py:10:5:10:52 | ControlFlowNode for Attribute() | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:10:5:10:52 | ControlFlowNode for Attribute() | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | -| test.py:11:5:11:48 | ControlFlowNode for Attribute() | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:11:5:11:48 | ControlFlowNode for Attribute() | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | -| test.py:14:14:14:29 | ControlFlowNode for Attribute() | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:14:14:14:29 | ControlFlowNode for Attribute() | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | -| test.py:18:14:18:39 | ControlFlowNode for Attribute() | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:18:14:18:39 | ControlFlowNode for Attribute() | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | -| test.py:21:5:21:60 | ControlFlowNode for Attribute() | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:21:5:21:60 | ControlFlowNode for Attribute() | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | -| test.py:23:5:23:52 | ControlFlowNode for Attribute() | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:23:5:23:52 | ControlFlowNode for Attribute() | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | -| test.py:24:5:24:55 | ControlFlowNode for Attribute() | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:24:5:24:55 | ControlFlowNode for Attribute() | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | -| test.py:25:5:25:57 | ControlFlowNode for Attribute() | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:25:5:25:57 | ControlFlowNode for Attribute() | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | -| test.py:26:5:26:50 | ControlFlowNode for Attribute() | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:26:5:26:50 | ControlFlowNode for Attribute() | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | -| test.py:27:5:27:60 | ControlFlowNode for Attribute() | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:27:5:27:60 | ControlFlowNode for Attribute() | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | -| test.py:34:27:34:35 | ControlFlowNode for file_path | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:34:27:34:35 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | -| test.py:38:15:38:23 | ControlFlowNode for file_path | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:38:15:38:23 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | -| test.py:39:19:39:27 | ControlFlowNode for file_path | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:39:19:39:27 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | -| test.py:43:14:43:22 | ControlFlowNode for file_path | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:43:14:43:22 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | -| test.py:44:17:44:25 | ControlFlowNode for file_path | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:44:17:44:25 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | -| test.py:48:15:48:23 | ControlFlowNode for file_path | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:48:15:48:23 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | -| test.py:49:19:49:27 | ControlFlowNode for file_path | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:49:19:49:27 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | -| test.py:53:40:53:48 | ControlFlowNode for file_path | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:53:40:53:48 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | -| test.py:55:23:55:31 | ControlFlowNode for file_path | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:55:23:55:31 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | -| test.py:56:21:56:29 | ControlFlowNode for file_path | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:56:21:56:29 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | -| test.py:58:40:58:48 | ControlFlowNode for file_path | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:58:40:58:48 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | -| test.py:59:22:59:30 | ControlFlowNode for file_path | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:59:22:59:30 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | -| test.py:60:21:60:29 | ControlFlowNode for file_path | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:60:21:60:29 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | -| test.py:61:42:61:50 | ControlFlowNode for file_path | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:61:42:61:50 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | -| test.py:62:23:62:31 | ControlFlowNode for file_path | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:62:23:62:31 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | -| test.py:63:36:63:44 | ControlFlowNode for file_path | test.py:9:16:9:24 | ControlFlowNode for file_path | test.py:63:36:63:44 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:9:16:9:24 | ControlFlowNode for file_path | depends on this user controlled data | +| test.py:11:5:11:52 | ControlFlowNode for Attribute() | test.py:10:16:10:24 | ControlFlowNode for file_path | test.py:11:5:11:52 | ControlFlowNode for Attribute() | This uncontrolled file extraction is $@. | test.py:10:16:10:24 | ControlFlowNode for file_path | depends on this user controlled data | +| test.py:12:5:12:48 | ControlFlowNode for Attribute() | test.py:10:16:10:24 | ControlFlowNode for file_path | test.py:12:5:12:48 | ControlFlowNode for Attribute() | This uncontrolled file extraction is $@. | test.py:10:16:10:24 | ControlFlowNode for file_path | depends on this user controlled data | +| test.py:15:14:15:29 | ControlFlowNode for Attribute() | test.py:10:16:10:24 | ControlFlowNode for file_path | test.py:15:14:15:29 | ControlFlowNode for Attribute() | This uncontrolled file extraction is $@. | test.py:10:16:10:24 | ControlFlowNode for file_path | depends on this user controlled data | +| test.py:19:14:19:39 | ControlFlowNode for Attribute() | test.py:10:16:10:24 | ControlFlowNode for file_path | test.py:19:14:19:39 | ControlFlowNode for Attribute() | This uncontrolled file extraction is $@. | test.py:10:16:10:24 | ControlFlowNode for file_path | depends on this user controlled data | +| test.py:22:5:22:60 | ControlFlowNode for Attribute() | test.py:10:16:10:24 | ControlFlowNode for file_path | test.py:22:5:22:60 | ControlFlowNode for Attribute() | This uncontrolled file extraction is $@. | test.py:10:16:10:24 | ControlFlowNode for file_path | depends on this user controlled data | +| test.py:24:5:24:52 | ControlFlowNode for Attribute() | test.py:10:16:10:24 | ControlFlowNode for file_path | test.py:24:5:24:52 | ControlFlowNode for Attribute() | This uncontrolled file extraction is $@. | test.py:10:16:10:24 | ControlFlowNode for file_path | depends on this user controlled data | +| test.py:25:5:25:55 | ControlFlowNode for Attribute() | test.py:10:16:10:24 | ControlFlowNode for file_path | test.py:25:5:25:55 | ControlFlowNode for Attribute() | This uncontrolled file extraction is $@. | test.py:10:16:10:24 | ControlFlowNode for file_path | depends on this user controlled data | +| test.py:26:5:26:57 | ControlFlowNode for Attribute() | test.py:10:16:10:24 | ControlFlowNode for file_path | test.py:26:5:26:57 | ControlFlowNode for Attribute() | This uncontrolled file extraction is $@. | test.py:10:16:10:24 | ControlFlowNode for file_path | depends on this user controlled data | +| test.py:27:5:27:50 | ControlFlowNode for Attribute() | test.py:10:16:10:24 | ControlFlowNode for file_path | test.py:27:5:27:50 | ControlFlowNode for Attribute() | This uncontrolled file extraction is $@. | test.py:10:16:10:24 | ControlFlowNode for file_path | depends on this user controlled data | +| test.py:28:5:28:60 | ControlFlowNode for Attribute() | test.py:10:16:10:24 | ControlFlowNode for file_path | test.py:28:5:28:60 | ControlFlowNode for Attribute() | This uncontrolled file extraction is $@. | test.py:10:16:10:24 | ControlFlowNode for file_path | depends on this user controlled data | +| test.py:35:27:35:35 | ControlFlowNode for file_path | test.py:10:16:10:24 | ControlFlowNode for file_path | test.py:35:27:35:35 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:10:16:10:24 | ControlFlowNode for file_path | depends on this user controlled data | +| test.py:39:15:39:23 | ControlFlowNode for file_path | test.py:10:16:10:24 | ControlFlowNode for file_path | test.py:39:15:39:23 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:10:16:10:24 | ControlFlowNode for file_path | depends on this user controlled data | +| test.py:40:19:40:27 | ControlFlowNode for file_path | test.py:10:16:10:24 | ControlFlowNode for file_path | test.py:40:19:40:27 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:10:16:10:24 | ControlFlowNode for file_path | depends on this user controlled data | +| test.py:44:14:44:22 | ControlFlowNode for file_path | test.py:10:16:10:24 | ControlFlowNode for file_path | test.py:44:14:44:22 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:10:16:10:24 | ControlFlowNode for file_path | depends on this user controlled data | +| test.py:45:17:45:25 | ControlFlowNode for file_path | test.py:10:16:10:24 | ControlFlowNode for file_path | test.py:45:17:45:25 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:10:16:10:24 | ControlFlowNode for file_path | depends on this user controlled data | +| test.py:49:15:49:23 | ControlFlowNode for file_path | test.py:10:16:10:24 | ControlFlowNode for file_path | test.py:49:15:49:23 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:10:16:10:24 | ControlFlowNode for file_path | depends on this user controlled data | +| test.py:50:19:50:27 | ControlFlowNode for file_path | test.py:10:16:10:24 | ControlFlowNode for file_path | test.py:50:19:50:27 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:10:16:10:24 | ControlFlowNode for file_path | depends on this user controlled data | +| test.py:54:40:54:48 | ControlFlowNode for file_path | test.py:10:16:10:24 | ControlFlowNode for file_path | test.py:54:40:54:48 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:10:16:10:24 | ControlFlowNode for file_path | depends on this user controlled data | +| test.py:56:23:56:31 | ControlFlowNode for file_path | test.py:10:16:10:24 | ControlFlowNode for file_path | test.py:56:23:56:31 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:10:16:10:24 | ControlFlowNode for file_path | depends on this user controlled data | +| test.py:57:21:57:29 | ControlFlowNode for file_path | test.py:10:16:10:24 | ControlFlowNode for file_path | test.py:57:21:57:29 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:10:16:10:24 | ControlFlowNode for file_path | depends on this user controlled data | +| test.py:59:40:59:48 | ControlFlowNode for file_path | test.py:10:16:10:24 | ControlFlowNode for file_path | test.py:59:40:59:48 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:10:16:10:24 | ControlFlowNode for file_path | depends on this user controlled data | +| test.py:60:22:60:30 | ControlFlowNode for file_path | test.py:10:16:10:24 | ControlFlowNode for file_path | test.py:60:22:60:30 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:10:16:10:24 | ControlFlowNode for file_path | depends on this user controlled data | +| test.py:61:21:61:29 | ControlFlowNode for file_path | test.py:10:16:10:24 | ControlFlowNode for file_path | test.py:61:21:61:29 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:10:16:10:24 | ControlFlowNode for file_path | depends on this user controlled data | +| test.py:62:42:62:50 | ControlFlowNode for file_path | test.py:10:16:10:24 | ControlFlowNode for file_path | test.py:62:42:62:50 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:10:16:10:24 | ControlFlowNode for file_path | depends on this user controlled data | +| test.py:63:23:63:31 | ControlFlowNode for file_path | test.py:10:16:10:24 | ControlFlowNode for file_path | test.py:63:23:63:31 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:10:16:10:24 | ControlFlowNode for file_path | depends on this user controlled data | +| test.py:64:36:64:44 | ControlFlowNode for file_path | test.py:10:16:10:24 | ControlFlowNode for file_path | test.py:64:36:64:44 | ControlFlowNode for file_path | This uncontrolled file extraction is $@. | test.py:10:16:10:24 | ControlFlowNode for file_path | depends on this user controlled data | diff --git a/python/ql/test/experimental/query-tests/Security/CWE-409/test.py b/python/ql/test/experimental/query-tests/Security/CWE-409/test.py index 4e8a9f672a7..06113bf9fe4 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-409/test.py +++ b/python/ql/test/experimental/query-tests/Security/CWE-409/test.py @@ -1,5 +1,6 @@ import tarfile import zipfile +import tty # this import is only here so logic for detecting stdlib works from fastapi import FastAPI app = FastAPI() From 12663b58f1f6ceeec7da5c50ff941996b3ab849a Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Wed, 14 Feb 2024 17:00:37 +0100 Subject: [PATCH 248/378] C# Only remove temp files for MVC view generation if needed --- .../Razor.cs | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/Razor.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/Razor.cs index a1c96cc964e..598e3e7e1f7 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/Razor.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/Razor.cs @@ -55,7 +55,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching public IEnumerable GenerateFiles(IEnumerable cshtmls, IEnumerable references, string workingDirectory) { var name = Guid.NewGuid().ToString("N").ToUpper(); - var tempPath = FileUtils.GetTemporaryWorkingDirectory(out var _); + var tempPath = FileUtils.GetTemporaryWorkingDirectory(out var shouldCleanUp); var analyzerConfig = Path.Combine(tempPath, $"{name}.txt"); var dllPath = Path.Combine(tempPath, $"{name}.dll"); var cscArgsPath = Path.Combine(tempPath, $"{name}.rsp"); @@ -105,21 +105,24 @@ namespace Semmle.Extraction.CSharp.DependencyFetching } finally { - DeleteFile(analyzerConfig); - DeleteFile(dllPath); - DeleteFile(cscArgsPath); + if (shouldCleanUp) + { + DeleteFile(analyzerConfig); + DeleteFile(dllPath); + DeleteFile(cscArgsPath); + } } } - private static void DeleteFile(string path) + private void DeleteFile(string path) { try { File.Delete(path); } - catch + catch (Exception exc) { - // Ignore + logger.LogWarning($"Failed to delete file {path}: {exc}"); } } } From c11bfb3c83f2fbdd1b8e51bb85bb313bab6ae391 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 14 Feb 2024 16:03:23 +0000 Subject: [PATCH 249/378] Kotlin 2: Accept loc changes in library-tests/exprs for localFunctionCalls.kt --- java/ql/test-kotlin2/library-tests/exprs/exprs.expected | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected index bfb5048341b..cbdc2985eea 100644 --- a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected +++ b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected @@ -3564,15 +3564,15 @@ | kFunctionInvoke.kt:9:5:9:13 | invoke(...) | kFunctionInvoke.kt:7:1:10:1 | useRef | MethodCall | | kFunctionInvoke.kt:9:12:9:12 | s | kFunctionInvoke.kt:7:1:10:1 | useRef | VarAccess | | localFunctionCalls.kt:3:1:12:1 | Unit | file://:0:0:0:0 | | TypeAccess | -| localFunctionCalls.kt:4:9:4:9 | x | localFunctionCalls.kt:3:1:12:1 | x | LocalVariableDeclExpr | +| localFunctionCalls.kt:4:5:4:13 | x | localFunctionCalls.kt:3:1:12:1 | x | LocalVariableDeclExpr | | localFunctionCalls.kt:4:13:4:13 | 5 | localFunctionCalls.kt:3:1:12:1 | x | IntegerLiteral | | localFunctionCalls.kt:5:5:5:29 | int | file://:0:0:0:0 | | TypeAccess | | localFunctionCalls.kt:5:15:5:20 | int | file://:0:0:0:0 | | TypeAccess | | localFunctionCalls.kt:5:25:5:25 | i | localFunctionCalls.kt:5:5:5:29 | a | VarAccess | | localFunctionCalls.kt:5:25:5:29 | ... + ... | localFunctionCalls.kt:5:5:5:29 | a | AddExpr | | localFunctionCalls.kt:5:29:5:29 | x | localFunctionCalls.kt:5:5:5:29 | a | VarAccess | -| localFunctionCalls.kt:6:5:6:5 | x | localFunctionCalls.kt:3:1:12:1 | x | VarAccess | | localFunctionCalls.kt:6:5:6:9 | ...=... | localFunctionCalls.kt:3:1:12:1 | x | AssignExpr | +| localFunctionCalls.kt:6:5:6:9 | x | localFunctionCalls.kt:3:1:12:1 | x | VarAccess | | localFunctionCalls.kt:6:9:6:9 | 6 | localFunctionCalls.kt:3:1:12:1 | x | IntegerLiteral | | localFunctionCalls.kt:7:5:7:17 | | localFunctionCalls.kt:3:1:12:1 | x | ImplicitCoercionToUnitExpr | | localFunctionCalls.kt:7:5:7:17 | Object | localFunctionCalls.kt:3:1:12:1 | x | TypeAccess | @@ -3581,8 +3581,8 @@ | localFunctionCalls.kt:7:5:7:17 | a(...) | localFunctionCalls.kt:3:1:12:1 | x | MethodCall | | localFunctionCalls.kt:7:5:7:17 | new (...) | localFunctionCalls.kt:3:1:12:1 | x | ClassInstanceExpr | | localFunctionCalls.kt:7:15:7:16 | 42 | localFunctionCalls.kt:3:1:12:1 | x | IntegerLiteral | -| localFunctionCalls.kt:8:5:8:5 | x | localFunctionCalls.kt:3:1:12:1 | x | VarAccess | | localFunctionCalls.kt:8:5:8:9 | ...=... | localFunctionCalls.kt:3:1:12:1 | x | AssignExpr | +| localFunctionCalls.kt:8:5:8:9 | x | localFunctionCalls.kt:3:1:12:1 | x | VarAccess | | localFunctionCalls.kt:8:9:8:9 | 7 | localFunctionCalls.kt:3:1:12:1 | x | IntegerLiteral | | localFunctionCalls.kt:9:5:9:34 | int | file://:0:0:0:0 | | TypeAccess | | localFunctionCalls.kt:9:14:9:19 | C1 | file://:0:0:0:0 | | TypeAccess | From 18a28e2623b67a8b3809411484a35467447ffd50 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 14 Feb 2024 16:04:10 +0000 Subject: [PATCH 250/378] Kotlin 2: Accept loc changes in library-tests/exprs for kFunctionInvoke.kt --- java/ql/test-kotlin2/library-tests/exprs/exprs.expected | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected index cbdc2985eea..19273e61bd7 100644 --- a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected +++ b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected @@ -3544,7 +3544,7 @@ | kFunctionInvoke.kt:7:1:10:1 | Unit | file://:0:0:0:0 | | TypeAccess | | kFunctionInvoke.kt:7:12:7:15 | A | file://:0:0:0:0 | | TypeAccess | | kFunctionInvoke.kt:7:18:7:26 | String | file://:0:0:0:0 | | TypeAccess | -| kFunctionInvoke.kt:8:9:8:14 | toCall | kFunctionInvoke.kt:7:1:10:1 | useRef | LocalVariableDeclExpr | +| kFunctionInvoke.kt:8:5:8:47 | toCall | kFunctionInvoke.kt:7:1:10:1 | useRef | LocalVariableDeclExpr | | kFunctionInvoke.kt:8:44:8:44 | a | kFunctionInvoke.kt:7:1:10:1 | useRef | VarAccess | | kFunctionInvoke.kt:8:44:8:47 | 1 | kFunctionInvoke.kt:8:44:8:47 | | IntegerLiteral | | kFunctionInvoke.kt:8:44:8:47 | ...::... | kFunctionInvoke.kt:7:1:10:1 | useRef | MemberRefExpr | From 1202b5b429daf5f0f74a969e644cc27890f21b4b Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Wed, 14 Feb 2024 17:05:53 +0100 Subject: [PATCH 251/378] Go: Use less confusing name for hardcoded credentials tests We don't want name-based heuristics to pick these variable names, but also using something like 'safeName' may mislead readers into believing the test cases are intended to be GOOD cases (i.e. safe) --- .../CWE-798/HardcodedCredentials.expected | 16 +++++----- .../test/query-tests/Security/CWE-798/jwt.go | 32 +++++++++---------- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/go/ql/test/query-tests/Security/CWE-798/HardcodedCredentials.expected b/go/ql/test/query-tests/Security/CWE-798/HardcodedCredentials.expected index dc4280a55c9..8eb49a5cc80 100644 --- a/go/ql/test/query-tests/Security/CWE-798/HardcodedCredentials.expected +++ b/go/ql/test/query-tests/Security/CWE-798/HardcodedCredentials.expected @@ -12,14 +12,14 @@ | jwt.go:114:16:114:24 | sharedKey | Hard-coded credential. | jwt.go:113:22:113:27 | "key9" | password | | jwt.go:120:16:120:30 | sharedKeyglobal | Hard-coded credential. | jwt.go:117:30:117:36 | "key10" | password | | jwt.go:126:20:126:34 | type conversion | Hard-coded credential. | jwt.go:126:27:126:33 | "key11" | password | -| jwt.go:143:39:143:46 | safeName | Hard-coded credential. | jwt.go:141:21:141:27 | "key12" | password | -| jwt.go:152:11:152:18 | safeName | Hard-coded credential. | jwt.go:148:21:148:27 | "key13" | password | -| jwt.go:160:34:160:41 | safeName | Hard-coded credential. | jwt.go:159:21:159:27 | "key14" | password | -| jwt.go:166:32:166:39 | safeName | Hard-coded credential. | jwt.go:165:21:165:27 | "key15" | password | -| jwt.go:172:41:172:48 | safeName | Hard-coded credential. | jwt.go:171:21:171:27 | "key16" | password | -| jwt.go:178:51:178:58 | safeName | Hard-coded credential. | jwt.go:177:21:177:27 | "key17" | password | -| jwt.go:184:42:184:49 | safeName | Hard-coded credential. | jwt.go:183:21:183:27 | "key18" | password | -| jwt.go:192:33:192:40 | safeName | Hard-coded credential. | jwt.go:189:21:189:27 | "key19" | password | +| jwt.go:143:39:143:41 | key | Hard-coded credential. | jwt.go:141:16:141:22 | "key12" | password | +| jwt.go:152:11:152:13 | key | Hard-coded credential. | jwt.go:148:16:148:22 | "key13" | password | +| jwt.go:160:34:160:36 | key | Hard-coded credential. | jwt.go:159:16:159:22 | "key14" | password | +| jwt.go:166:32:166:34 | key | Hard-coded credential. | jwt.go:165:16:165:22 | "key15" | password | +| jwt.go:172:41:172:43 | key | Hard-coded credential. | jwt.go:171:16:171:22 | "key16" | password | +| jwt.go:178:51:178:53 | key | Hard-coded credential. | jwt.go:177:16:177:22 | "key17" | password | +| jwt.go:184:42:184:44 | key | Hard-coded credential. | jwt.go:183:16:183:22 | "key18" | password | +| jwt.go:192:33:192:35 | key | Hard-coded credential. | jwt.go:189:16:189:22 | "key19" | password | | main.go:6:14:6:23 | "p4ssw0rd" | Hard-coded $@. | main.go:6:14:6:23 | "p4ssw0rd" | password | | main.go:12:1:26:30 | `-----BEGIN RSA PRIVATE KEY-----\nMIICXQIBAAKBgQC/tzdtXKXcX6F3v3hR6+uYyZpIeXhhLflJkY2eILLQfAnwKlT5\nxIHW5QZcHQV9sCyZ8qSdPGif7PwgMbButMbByiZhCSugUFb6vjVqoktmslYF4LKH\niDgvmlwuJW0TvynxBLzDCwrRP+gpRT8wuAortWAx/03POTw7Mzi2cIPNsQIDAQAB\nAoGAMHCrqY9CPTdQhgAz94cDpTwzJmLCvtMt7J/BR5X9eF4O6MbZZ652HAUMIVQX\n4hUUf+VmIHB2AwqO/ddwO9ijaz04BslOSy/iYevHGlH65q4587NSlFWjvILMIQCM\nGBjfzJIxlLHVhjc2cFnyAE5YWjF/OMnJN0OhP9pxmCP/iM0CQQDxmQndQLdnV7+6\n8SvBHE8bg1LE8/BzTt68U3aWwiBjrHMFgzr//7Za4VF7h4ilFgmbh0F3sYz+C8iO\n0JrBRPeLAkEAyyTwnv/pgqTS/wuxIHUxRBpbdk3YvILAthNrGQg5uzA7eSeFu7Mv\nGtEkXsaqCDbdehgarFfNN8PB6OMRIbsXMwJBAOjhH8UJ0L/osYO9XPO0GfznRS1c\nBnbfm4vk1/bSAO6TF/xEVubU0i4f6q8sIecfqvskEVMS7lkjeptPMR0DIakCQE+7\nuQH/Wizf+r0GXshplyOu4LVHisk63N7aMlAJ7XbuUHmWLKRmiReSfR8CBNzig/2X\nFmkMsUyw9hwte5zsrQcCQQCrOkZvzUj9j1HKG+32EJ2E4kisJZmAgF9GI+z6oxpi\nExped5tp8EWytCjRwKhOcc0068SgaqhKvyyUWpbx32VQ\n-----END RSA PRIVATE KEY-----` | Hard-coded private key. | main.go:12:1:26:30 | `-----BEGIN RSA PRIVATE KEY-----\nMIICXQIBAAKBgQC/tzdtXKXcX6F3v3hR6+uYyZpIeXhhLflJkY2eILLQfAnwKlT5\nxIHW5QZcHQV9sCyZ8qSdPGif7PwgMbButMbByiZhCSugUFb6vjVqoktmslYF4LKH\niDgvmlwuJW0TvynxBLzDCwrRP+gpRT8wuAortWAx/03POTw7Mzi2cIPNsQIDAQAB\nAoGAMHCrqY9CPTdQhgAz94cDpTwzJmLCvtMt7J/BR5X9eF4O6MbZZ652HAUMIVQX\n4hUUf+VmIHB2AwqO/ddwO9ijaz04BslOSy/iYevHGlH65q4587NSlFWjvILMIQCM\nGBjfzJIxlLHVhjc2cFnyAE5YWjF/OMnJN0OhP9pxmCP/iM0CQQDxmQndQLdnV7+6\n8SvBHE8bg1LE8/BzTt68U3aWwiBjrHMFgzr//7Za4VF7h4ilFgmbh0F3sYz+C8iO\n0JrBRPeLAkEAyyTwnv/pgqTS/wuxIHUxRBpbdk3YvILAthNrGQg5uzA7eSeFu7Mv\nGtEkXsaqCDbdehgarFfNN8PB6OMRIbsXMwJBAOjhH8UJ0L/osYO9XPO0GfznRS1c\nBnbfm4vk1/bSAO6TF/xEVubU0i4f6q8sIecfqvskEVMS7lkjeptPMR0DIakCQE+7\nuQH/Wizf+r0GXshplyOu4LVHisk63N7aMlAJ7XbuUHmWLKRmiReSfR8CBNzig/2X\nFmkMsUyw9hwte5zsrQcCQQCrOkZvzUj9j1HKG+32EJ2E4kisJZmAgF9GI+z6oxpi\nExped5tp8EWytCjRwKhOcc0068SgaqhKvyyUWpbx32VQ\n-----END RSA PRIVATE KEY-----` | certificate | | main.go:44:14:44:19 | "p4ss" | Hard-coded $@. | main.go:44:14:44:19 | "p4ss" | password | diff --git a/go/ql/test/query-tests/Security/CWE-798/jwt.go b/go/ql/test/query-tests/Security/CWE-798/jwt.go index 1ff61114466..560f95800df 100644 --- a/go/ql/test/query-tests/Security/CWE-798/jwt.go +++ b/go/ql/test/query-tests/Security/CWE-798/jwt.go @@ -138,56 +138,56 @@ func gogfjwt() interface{} { } func irisjwt() interface{} { - safeName := []byte("key12") + key := []byte("key12") token := iris.NewTokenWithClaims(nil, nil) - tokenString, _ := token.SignedString(safeName) // BAD + tokenString, _ := token.SignedString(key) // BAD return tokenString } func iris12jwt2() interface{} { - safeName := []byte("key13") + key := []byte("key13") s := &iris12.Signer{ Alg: nil, - Key: safeName, // BAD + Key: key, // BAD MaxAge: 3 * time.Second, } return s } func irisjwt3() interface{} { - safeName := []byte("key14") - signer := iris12.NewSigner(nil, safeName, 3*time.Second) // BAD + key := []byte("key14") + signer := iris12.NewSigner(nil, key, 3*time.Second) // BAD return signer } func katarasJwt() interface{} { - safeName := []byte("key15") - token, _ := kataras.Sign(nil, safeName, nil, nil) // BAD + key := []byte("key15") + token, _ := kataras.Sign(nil, key, nil, nil) // BAD return token } func katarasJwt2() interface{} { - safeName := []byte("key16") - token, _ := kataras.SignEncrypted(nil, safeName, nil, nil) // BAD + key := []byte("key16") + token, _ := kataras.SignEncrypted(nil, key, nil, nil) // BAD return token } func katarasJwt3() interface{} { - safeName := []byte("key17") - token, _ := kataras.SignEncryptedWithHeader(nil, safeName, nil, nil, nil) // BAD + key := []byte("key17") + token, _ := kataras.SignEncryptedWithHeader(nil, key, nil, nil, nil) // BAD return token } func katarasJwt4() interface{} { - safeName := []byte("key18") - token, _ := kataras.SignWithHeader(nil, safeName, nil, nil) // BAD + key := []byte("key18") + token, _ := kataras.SignWithHeader(nil, key, nil, nil) // BAD return token } func katarasJwt5() { - safeName := []byte("key19") + key := []byte("key19") var keys kataras.Keys var alg kataras.Alg - keys.Register(alg, "api", nil, safeName) // BAD + keys.Register(alg, "api", nil, key) // BAD } From efe5184a74ad5e9b1b3233240d2bc4ae844bdb2b Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 14 Feb 2024 16:09:14 +0000 Subject: [PATCH 252/378] Kotlin 2: Accept loc change for fn in library-tests/exprs/funcExprs.kt --- .../library-tests/exprs/exprs.expected | 216 +++++++++--------- 1 file changed, 108 insertions(+), 108 deletions(-) diff --git a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected index 19273e61bd7..12ccd68022e 100644 --- a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected +++ b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected @@ -3257,36 +3257,36 @@ | funcExprs.kt:77:20:77:55 | Generic | file://:0:0:0:0 | | TypeAccess | | funcExprs.kt:77:20:77:55 | Integer | file://:0:0:0:0 | | TypeAccess | | funcExprs.kt:77:20:77:55 | String | file://:0:0:0:0 | | TypeAccess | -| funcExprs.kt:82:9:96:1 | Unit | file://:0:0:0:0 | | TypeAccess | -| funcExprs.kt:83:9:83:10 | l1 | funcExprs.kt:82:9:96:1 | fn | LocalVariableDeclExpr | -| funcExprs.kt:83:31:83:51 | ...->... | funcExprs.kt:82:9:96:1 | fn | LambdaExpr | -| funcExprs.kt:83:31:83:51 | Function1 | funcExprs.kt:82:9:96:1 | fn | TypeAccess | -| funcExprs.kt:83:31:83:51 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess | +| funcExprs.kt:82:1:96:1 | Unit | file://:0:0:0:0 | | TypeAccess | +| funcExprs.kt:83:9:83:10 | l1 | funcExprs.kt:82:1:96:1 | fn | LocalVariableDeclExpr | +| funcExprs.kt:83:31:83:51 | ...->... | funcExprs.kt:82:1:96:1 | fn | LambdaExpr | +| funcExprs.kt:83:31:83:51 | Function1 | funcExprs.kt:82:1:96:1 | fn | TypeAccess | +| funcExprs.kt:83:31:83:51 | Integer | funcExprs.kt:82:1:96:1 | fn | TypeAccess | | funcExprs.kt:83:31:83:51 | String | file://:0:0:0:0 | | TypeAccess | -| funcExprs.kt:83:31:83:51 | String | funcExprs.kt:82:9:96:1 | fn | TypeAccess | +| funcExprs.kt:83:31:83:51 | String | funcExprs.kt:82:1:96:1 | fn | TypeAccess | | funcExprs.kt:83:33:83:33 | int | file://:0:0:0:0 | | TypeAccess | | funcExprs.kt:83:38:83:38 | i | funcExprs.kt:83:31:83:51 | invoke | VarAccess | | funcExprs.kt:83:38:83:49 | toString(...) | funcExprs.kt:83:31:83:51 | invoke | MethodCall | -| funcExprs.kt:84:5:84:6 | l1 | funcExprs.kt:82:9:96:1 | fn | VarAccess | -| funcExprs.kt:84:5:84:16 | invoke(...) | funcExprs.kt:82:9:96:1 | fn | MethodCall | -| funcExprs.kt:84:8:84:16 | | funcExprs.kt:82:9:96:1 | fn | ImplicitCoercionToUnitExpr | -| funcExprs.kt:84:8:84:16 | Unit | funcExprs.kt:82:9:96:1 | fn | TypeAccess | -| funcExprs.kt:84:15:84:15 | 5 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:86:9:86:10 | l2 | funcExprs.kt:82:9:96:1 | fn | LocalVariableDeclExpr | -| funcExprs.kt:86:39:86:59 | ...->... | funcExprs.kt:82:9:96:1 | fn | LambdaExpr | -| funcExprs.kt:86:39:86:59 | Function1 | funcExprs.kt:82:9:96:1 | fn | TypeAccess | -| funcExprs.kt:86:39:86:59 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess | +| funcExprs.kt:84:5:84:6 | l1 | funcExprs.kt:82:1:96:1 | fn | VarAccess | +| funcExprs.kt:84:5:84:16 | invoke(...) | funcExprs.kt:82:1:96:1 | fn | MethodCall | +| funcExprs.kt:84:8:84:16 | | funcExprs.kt:82:1:96:1 | fn | ImplicitCoercionToUnitExpr | +| funcExprs.kt:84:8:84:16 | Unit | funcExprs.kt:82:1:96:1 | fn | TypeAccess | +| funcExprs.kt:84:15:84:15 | 5 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:86:9:86:10 | l2 | funcExprs.kt:82:1:96:1 | fn | LocalVariableDeclExpr | +| funcExprs.kt:86:39:86:59 | ...->... | funcExprs.kt:82:1:96:1 | fn | LambdaExpr | +| funcExprs.kt:86:39:86:59 | Function1 | funcExprs.kt:82:1:96:1 | fn | TypeAccess | +| funcExprs.kt:86:39:86:59 | Integer | funcExprs.kt:82:1:96:1 | fn | TypeAccess | | funcExprs.kt:86:39:86:59 | String | file://:0:0:0:0 | | TypeAccess | -| funcExprs.kt:86:39:86:59 | String | funcExprs.kt:82:9:96:1 | fn | TypeAccess | +| funcExprs.kt:86:39:86:59 | String | funcExprs.kt:82:1:96:1 | fn | TypeAccess | | funcExprs.kt:86:41:86:41 | int | file://:0:0:0:0 | | TypeAccess | | funcExprs.kt:86:46:86:46 | i | funcExprs.kt:86:39:86:59 | invoke | VarAccess | | funcExprs.kt:86:46:86:57 | toString(...) | funcExprs.kt:86:39:86:59 | invoke | MethodCall | -| funcExprs.kt:87:5:87:6 | l2 | funcExprs.kt:82:9:96:1 | fn | VarAccess | -| funcExprs.kt:87:5:87:16 | invoke(...) | funcExprs.kt:82:9:96:1 | fn | MethodCall | -| funcExprs.kt:87:8:87:16 | | funcExprs.kt:82:9:96:1 | fn | ImplicitCoercionToUnitExpr | -| funcExprs.kt:87:8:87:16 | Unit | funcExprs.kt:82:9:96:1 | fn | TypeAccess | -| funcExprs.kt:87:15:87:15 | 5 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:89:9:89:10 | l3 | funcExprs.kt:82:9:96:1 | fn | LocalVariableDeclExpr | +| funcExprs.kt:87:5:87:6 | l2 | funcExprs.kt:82:1:96:1 | fn | VarAccess | +| funcExprs.kt:87:5:87:16 | invoke(...) | funcExprs.kt:82:1:96:1 | fn | MethodCall | +| funcExprs.kt:87:8:87:16 | | funcExprs.kt:82:1:96:1 | fn | ImplicitCoercionToUnitExpr | +| funcExprs.kt:87:8:87:16 | Unit | funcExprs.kt:82:1:96:1 | fn | TypeAccess | +| funcExprs.kt:87:15:87:15 | 5 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:89:9:89:10 | l3 | funcExprs.kt:82:1:96:1 | fn | LocalVariableDeclExpr | | funcExprs.kt:90:15:90:69 | 0 | funcExprs.kt:90:15:90:69 | invoke | IntegerLiteral | | funcExprs.kt:90:15:90:69 | 1 | funcExprs.kt:90:15:90:69 | invoke | IntegerLiteral | | funcExprs.kt:90:15:90:69 | 2 | funcExprs.kt:90:15:90:69 | invoke | IntegerLiteral | @@ -3333,7 +3333,7 @@ | funcExprs.kt:90:15:90:69 | (...)... | funcExprs.kt:90:15:90:69 | invoke | CastExpr | | funcExprs.kt:90:15:90:69 | (...)... | funcExprs.kt:90:15:90:69 | invoke | CastExpr | | funcExprs.kt:90:15:90:69 | (...)... | funcExprs.kt:90:15:90:69 | invoke | CastExpr | -| funcExprs.kt:90:15:90:69 | ...->... | funcExprs.kt:82:9:96:1 | fn | LambdaExpr | +| funcExprs.kt:90:15:90:69 | ...->... | funcExprs.kt:82:1:96:1 | fn | LambdaExpr | | funcExprs.kt:90:15:90:69 | ...[...] | funcExprs.kt:90:15:90:69 | invoke | ArrayAccess | | funcExprs.kt:90:15:90:69 | ...[...] | funcExprs.kt:90:15:90:69 | invoke | ArrayAccess | | funcExprs.kt:90:15:90:69 | ...[...] | funcExprs.kt:90:15:90:69 | invoke | ArrayAccess | @@ -3357,9 +3357,9 @@ | funcExprs.kt:90:15:90:69 | ...[...] | funcExprs.kt:90:15:90:69 | invoke | ArrayAccess | | funcExprs.kt:90:15:90:69 | ...[...] | funcExprs.kt:90:15:90:69 | invoke | ArrayAccess | | funcExprs.kt:90:15:90:69 | ...[...] | funcExprs.kt:90:15:90:69 | invoke | ArrayAccess | -| funcExprs.kt:90:15:90:69 | FunctionN | funcExprs.kt:82:9:96:1 | fn | TypeAccess | +| funcExprs.kt:90:15:90:69 | FunctionN | funcExprs.kt:82:1:96:1 | fn | TypeAccess | | funcExprs.kt:90:15:90:69 | String | file://:0:0:0:0 | | TypeAccess | -| funcExprs.kt:90:15:90:69 | String | funcExprs.kt:82:9:96:1 | fn | TypeAccess | +| funcExprs.kt:90:15:90:69 | String | funcExprs.kt:82:1:96:1 | fn | TypeAccess | | funcExprs.kt:90:15:90:69 | a0 | funcExprs.kt:90:15:90:69 | invoke | VarAccess | | funcExprs.kt:90:15:90:69 | a0 | funcExprs.kt:90:15:90:69 | invoke | VarAccess | | funcExprs.kt:90:15:90:69 | a0 | funcExprs.kt:90:15:90:69 | invoke | VarAccess | @@ -3432,64 +3432,64 @@ | funcExprs.kt:90:59:90:59 | int | file://:0:0:0:0 | | TypeAccess | | funcExprs.kt:90:61:90:61 | int | file://:0:0:0:0 | | TypeAccess | | funcExprs.kt:90:67:90:68 | "" | funcExprs.kt:90:15:90:69 | invoke | StringLiteral | -| funcExprs.kt:91:5:91:6 | l3 | funcExprs.kt:82:9:96:1 | fn | VarAccess | -| funcExprs.kt:91:5:91:60 | 23 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:91:5:91:60 | Object | funcExprs.kt:82:9:96:1 | fn | TypeAccess | -| funcExprs.kt:91:5:91:60 | invoke(...) | funcExprs.kt:82:9:96:1 | fn | MethodCall | -| funcExprs.kt:91:5:91:60 | new Object[] | funcExprs.kt:82:9:96:1 | fn | ArrayCreationExpr | -| funcExprs.kt:91:5:91:60 | {...} | funcExprs.kt:82:9:96:1 | fn | ArrayInit | -| funcExprs.kt:91:8:91:60 | | funcExprs.kt:82:9:96:1 | fn | ImplicitCoercionToUnitExpr | -| funcExprs.kt:91:8:91:60 | Unit | funcExprs.kt:82:9:96:1 | fn | TypeAccess | -| funcExprs.kt:91:15:91:15 | 1 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:91:17:91:17 | 2 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:91:19:91:19 | 3 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:91:21:91:21 | 4 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:91:23:91:23 | 5 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:91:25:91:25 | 6 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:91:27:91:27 | 7 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:91:29:91:29 | 8 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:91:31:91:31 | 9 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:91:33:91:33 | 0 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:91:35:91:35 | 1 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:91:37:91:37 | 2 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:91:39:91:39 | 3 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:91:41:91:41 | 4 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:91:43:91:43 | 5 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:91:45:91:45 | 6 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:91:47:91:47 | 7 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:91:49:91:49 | 8 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:91:51:91:51 | 9 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:91:53:91:53 | 0 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:91:55:91:55 | 1 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:91:57:91:57 | 2 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:91:59:91:59 | 3 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:93:9:93:10 | l4 | funcExprs.kt:82:9:96:1 | fn | LocalVariableDeclExpr | -| funcExprs.kt:94:15:94:67 | ...->... | funcExprs.kt:82:9:96:1 | fn | LambdaExpr | -| funcExprs.kt:94:15:94:67 | Function22 | funcExprs.kt:82:9:96:1 | fn | TypeAccess | -| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess | -| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess | -| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess | -| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess | -| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess | -| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess | -| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess | -| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess | -| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess | -| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess | -| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess | -| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess | -| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess | -| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess | -| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess | -| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess | -| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess | -| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess | -| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess | -| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess | -| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess | -| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess | +| funcExprs.kt:91:5:91:6 | l3 | funcExprs.kt:82:1:96:1 | fn | VarAccess | +| funcExprs.kt:91:5:91:60 | 23 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:91:5:91:60 | Object | funcExprs.kt:82:1:96:1 | fn | TypeAccess | +| funcExprs.kt:91:5:91:60 | invoke(...) | funcExprs.kt:82:1:96:1 | fn | MethodCall | +| funcExprs.kt:91:5:91:60 | new Object[] | funcExprs.kt:82:1:96:1 | fn | ArrayCreationExpr | +| funcExprs.kt:91:5:91:60 | {...} | funcExprs.kt:82:1:96:1 | fn | ArrayInit | +| funcExprs.kt:91:8:91:60 | | funcExprs.kt:82:1:96:1 | fn | ImplicitCoercionToUnitExpr | +| funcExprs.kt:91:8:91:60 | Unit | funcExprs.kt:82:1:96:1 | fn | TypeAccess | +| funcExprs.kt:91:15:91:15 | 1 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:91:17:91:17 | 2 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:91:19:91:19 | 3 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:91:21:91:21 | 4 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:91:23:91:23 | 5 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:91:25:91:25 | 6 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:91:27:91:27 | 7 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:91:29:91:29 | 8 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:91:31:91:31 | 9 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:91:33:91:33 | 0 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:91:35:91:35 | 1 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:91:37:91:37 | 2 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:91:39:91:39 | 3 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:91:41:91:41 | 4 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:91:43:91:43 | 5 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:91:45:91:45 | 6 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:91:47:91:47 | 7 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:91:49:91:49 | 8 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:91:51:91:51 | 9 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:91:53:91:53 | 0 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:91:55:91:55 | 1 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:91:57:91:57 | 2 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:91:59:91:59 | 3 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:93:9:93:10 | l4 | funcExprs.kt:82:1:96:1 | fn | LocalVariableDeclExpr | +| funcExprs.kt:94:15:94:67 | ...->... | funcExprs.kt:82:1:96:1 | fn | LambdaExpr | +| funcExprs.kt:94:15:94:67 | Function22 | funcExprs.kt:82:1:96:1 | fn | TypeAccess | +| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:1:96:1 | fn | TypeAccess | +| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:1:96:1 | fn | TypeAccess | +| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:1:96:1 | fn | TypeAccess | +| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:1:96:1 | fn | TypeAccess | +| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:1:96:1 | fn | TypeAccess | +| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:1:96:1 | fn | TypeAccess | +| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:1:96:1 | fn | TypeAccess | +| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:1:96:1 | fn | TypeAccess | +| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:1:96:1 | fn | TypeAccess | +| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:1:96:1 | fn | TypeAccess | +| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:1:96:1 | fn | TypeAccess | +| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:1:96:1 | fn | TypeAccess | +| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:1:96:1 | fn | TypeAccess | +| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:1:96:1 | fn | TypeAccess | +| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:1:96:1 | fn | TypeAccess | +| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:1:96:1 | fn | TypeAccess | +| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:1:96:1 | fn | TypeAccess | +| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:1:96:1 | fn | TypeAccess | +| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:1:96:1 | fn | TypeAccess | +| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:1:96:1 | fn | TypeAccess | +| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:1:96:1 | fn | TypeAccess | +| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:1:96:1 | fn | TypeAccess | | funcExprs.kt:94:15:94:67 | String | file://:0:0:0:0 | | TypeAccess | -| funcExprs.kt:94:15:94:67 | String | funcExprs.kt:82:9:96:1 | fn | TypeAccess | +| funcExprs.kt:94:15:94:67 | String | funcExprs.kt:82:1:96:1 | fn | TypeAccess | | funcExprs.kt:94:17:94:17 | int | file://:0:0:0:0 | | TypeAccess | | funcExprs.kt:94:19:94:19 | int | file://:0:0:0:0 | | TypeAccess | | funcExprs.kt:94:21:94:21 | int | file://:0:0:0:0 | | TypeAccess | @@ -3513,32 +3513,32 @@ | funcExprs.kt:94:57:94:57 | int | file://:0:0:0:0 | | TypeAccess | | funcExprs.kt:94:59:94:59 | int | file://:0:0:0:0 | | TypeAccess | | funcExprs.kt:94:65:94:66 | "" | funcExprs.kt:94:15:94:67 | invoke | StringLiteral | -| funcExprs.kt:95:5:95:6 | l4 | funcExprs.kt:82:9:96:1 | fn | VarAccess | -| funcExprs.kt:95:5:95:58 | invoke(...) | funcExprs.kt:82:9:96:1 | fn | MethodCall | -| funcExprs.kt:95:8:95:58 | | funcExprs.kt:82:9:96:1 | fn | ImplicitCoercionToUnitExpr | -| funcExprs.kt:95:8:95:58 | Unit | funcExprs.kt:82:9:96:1 | fn | TypeAccess | -| funcExprs.kt:95:15:95:15 | 1 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:95:17:95:17 | 2 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:95:19:95:19 | 3 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:95:21:95:21 | 4 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:95:23:95:23 | 5 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:95:25:95:25 | 6 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:95:27:95:27 | 7 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:95:29:95:29 | 8 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:95:31:95:31 | 9 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:95:33:95:33 | 0 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:95:35:95:35 | 1 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:95:37:95:37 | 2 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:95:39:95:39 | 3 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:95:41:95:41 | 4 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:95:43:95:43 | 5 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:95:45:95:45 | 6 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:95:47:95:47 | 7 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:95:49:95:49 | 8 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:95:51:95:51 | 9 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:95:53:95:53 | 0 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:95:55:95:55 | 1 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:95:57:95:57 | 2 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | +| funcExprs.kt:95:5:95:6 | l4 | funcExprs.kt:82:1:96:1 | fn | VarAccess | +| funcExprs.kt:95:5:95:58 | invoke(...) | funcExprs.kt:82:1:96:1 | fn | MethodCall | +| funcExprs.kt:95:8:95:58 | | funcExprs.kt:82:1:96:1 | fn | ImplicitCoercionToUnitExpr | +| funcExprs.kt:95:8:95:58 | Unit | funcExprs.kt:82:1:96:1 | fn | TypeAccess | +| funcExprs.kt:95:15:95:15 | 1 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:95:17:95:17 | 2 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:95:19:95:19 | 3 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:95:21:95:21 | 4 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:95:23:95:23 | 5 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:95:25:95:25 | 6 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:95:27:95:27 | 7 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:95:29:95:29 | 8 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:95:31:95:31 | 9 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:95:33:95:33 | 0 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:95:35:95:35 | 1 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:95:37:95:37 | 2 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:95:39:95:39 | 3 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:95:41:95:41 | 4 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:95:43:95:43 | 5 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:95:45:95:45 | 6 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:95:47:95:47 | 7 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:95:49:95:49 | 8 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:95:51:95:51 | 9 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:95:53:95:53 | 0 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:95:55:95:55 | 1 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:95:57:95:57 | 2 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | | kFunctionInvoke.kt:4:5:4:24 | Unit | file://:0:0:0:0 | | TypeAccess | | kFunctionInvoke.kt:4:11:4:19 | String | file://:0:0:0:0 | | TypeAccess | | kFunctionInvoke.kt:7:1:10:1 | Unit | file://:0:0:0:0 | | TypeAccess | From 2a30898af6ebfd0b580190a7e586b2f5e6f66b10 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Mon, 12 Feb 2024 12:32:46 +0100 Subject: [PATCH 253/378] Go: Promote `go/missing-jwt-signature-check` from experimental --- .../ext/github.com.dgrijalva.jwt-go.model.yml | 16 +++++- .../ext/github.com.go-jose.go-jose.model.yml | 14 +++++ .../ext/github.com.golang-jwt.jwt.model.yml | 18 +++++- .../lib/ext/gopkg.in.square.go-jose.model.yml | 14 +++++ go/ql/lib/go.qll | 1 + go/ql/lib/semmle/go/frameworks/GoJose.qll | 40 ++++++++++--- go/ql/lib/semmle/go/frameworks/Jwt.qll | 57 +++++++++++++++++++ .../go/security/MissingJwtSignatureCheck.qll | 40 +++++++++++++ ...MissingJwtSignatureCheckCustomizations.qll | 48 ++++++++++++++++ .../CWE-347/MissingJwtSignatureCheck.qhelp | 25 ++++++++ .../CWE-347/MissingJwtSignatureCheck.ql | 21 +++++++ .../CWE-347/MissingJwtSignatureCheckBad.go | 21 +++++++ .../CWE-347/MissingJwtSignatureCheckGood.go | 22 +++++++ ...6-missing-jwt-signature-check-promotion.md | 4 ++ go/ql/src/experimental/CWE-347/Example.go | 39 ------------- .../CWE-347/ParseJWTWithoutVerification.qhelp | 34 ----------- .../CWE-347/ParseJWTWithoutVerification.ql | 57 ------------------- .../CWE-347/ParseJWTWithoutVerification.qlref | 1 - .../MissingJwtSignatureCheck.expected} | 0 .../CWE-347/MissingJwtSignatureCheck.qlref | 1 + .../Security}/CWE-347/go-jose.v3.go | 0 .../Security}/CWE-347/go.mod | 0 .../Security}/CWE-347/golang-jwt-v5.go | 0 .../github.com/go-jose/go-jose/v3/jwt/stub.go | 0 .../github.com/golang-jwt/jwt/v5/stub.go | 0 .../Security}/CWE-347/vendor/modules.txt | 0 26 files changed, 332 insertions(+), 141 deletions(-) create mode 100644 go/ql/lib/ext/github.com.go-jose.go-jose.model.yml create mode 100644 go/ql/lib/ext/gopkg.in.square.go-jose.model.yml create mode 100644 go/ql/lib/semmle/go/frameworks/Jwt.qll create mode 100644 go/ql/lib/semmle/go/security/MissingJwtSignatureCheck.qll create mode 100644 go/ql/lib/semmle/go/security/MissingJwtSignatureCheckCustomizations.qll create mode 100644 go/ql/src/Security/CWE-347/MissingJwtSignatureCheck.qhelp create mode 100644 go/ql/src/Security/CWE-347/MissingJwtSignatureCheck.ql create mode 100644 go/ql/src/Security/CWE-347/MissingJwtSignatureCheckBad.go create mode 100644 go/ql/src/Security/CWE-347/MissingJwtSignatureCheckGood.go create mode 100644 go/ql/src/change-notes/2024-02-06-missing-jwt-signature-check-promotion.md delete mode 100644 go/ql/src/experimental/CWE-347/Example.go delete mode 100644 go/ql/src/experimental/CWE-347/ParseJWTWithoutVerification.qhelp delete mode 100644 go/ql/src/experimental/CWE-347/ParseJWTWithoutVerification.ql delete mode 100644 go/ql/test/experimental/CWE-347/ParseJWTWithoutVerification.qlref rename go/ql/test/{experimental/CWE-347/ParseJWTWithoutVerification.expected => query-tests/Security/CWE-347/MissingJwtSignatureCheck.expected} (100%) create mode 100644 go/ql/test/query-tests/Security/CWE-347/MissingJwtSignatureCheck.qlref rename go/ql/test/{experimental => query-tests/Security}/CWE-347/go-jose.v3.go (100%) rename go/ql/test/{experimental => query-tests/Security}/CWE-347/go.mod (100%) rename go/ql/test/{experimental => query-tests/Security}/CWE-347/golang-jwt-v5.go (100%) rename go/ql/test/{experimental => query-tests/Security}/CWE-347/vendor/github.com/go-jose/go-jose/v3/jwt/stub.go (100%) rename go/ql/test/{experimental => query-tests/Security}/CWE-347/vendor/github.com/golang-jwt/jwt/v5/stub.go (100%) rename go/ql/test/{experimental => query-tests/Security}/CWE-347/vendor/modules.txt (100%) diff --git a/go/ql/lib/ext/github.com.dgrijalva.jwt-go.model.yml b/go/ql/lib/ext/github.com.dgrijalva.jwt-go.model.yml index 9f03151231f..8a27cc21d19 100644 --- a/go/ql/lib/ext/github.com.dgrijalva.jwt-go.model.yml +++ b/go/ql/lib/ext/github.com.dgrijalva.jwt-go.model.yml @@ -3,5 +3,19 @@ extensions: pack: codeql/go-all extensible: sinkModel data: - - ["github.com/dgrijalva/jwt-go", "Token", True, "SignedString", "", "", "Argument[0]", "credentials-key", "manual"] - ["github.com/dgrijalva/jwt-go", "SigningMethod", True, "Sign", "", "", "Argument[1]", "credentials-key", "manual"] + - ["github.com/dgrijalva/jwt-go", "Token", True, "SignedString", "", "", "Argument[0]", "credentials-key", "manual"] + - ["github.com/dgrijalva/jwt-go", "Parser", True, "ParseUnverified", "", "", "Argument[0]", "jwt", "manual"] + - addsTo: + pack: codeql/go-all + extensible: summaryModel + data: + - ["github.com/dgrijalva/jwt-go", "", True, "Parse", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] + - ["github.com/dgrijalva/jwt-go", "Parser", True, "Parse", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] + - ["github.com/dgrijalva/jwt-go", "", True, "ParseWithClaims", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] + - ["github.com/dgrijalva/jwt-go", "Parser", True, "ParseWithClaims", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] + - ["github.com/dgrijalva/jwt-go", "", True, "ParseECPrivateKeyFromPEM", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] + - ["github.com/dgrijalva/jwt-go", "", True, "ParseECPublicKeyFromPEM", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] + - ["github.com/dgrijalva/jwt-go", "", True, "ParseRSAPrivateKeyFromPEM", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] + - ["github.com/dgrijalva/jwt-go", "", True, "ParseRSAPrivateKeyFromPEMWithPassword", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] + - ["github.com/dgrijalva/jwt-go", "", True, ParseRSAPublicKeyFromPEM", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] diff --git a/go/ql/lib/ext/github.com.go-jose.go-jose.model.yml b/go/ql/lib/ext/github.com.go-jose.go-jose.model.yml new file mode 100644 index 00000000000..bd13c79ea3a --- /dev/null +++ b/go/ql/lib/ext/github.com.go-jose.go-jose.model.yml @@ -0,0 +1,14 @@ +extensions: + - addsTo: + pack: codeql/go-all + extensible: sinkModel + data: + - ["github.com/go-jose/go-jose/$ANYVERSION/jwt", "JSONWebToken", True, "UnsafeClaimsWithoutVerification", "", "", "Argument[-1]", "jwt", "manual"] + - addsTo: + pack: codeql/go-all + extensible: summaryModel + data: + - ["github.com/go-jose/go-jose/$ANYVERSION/jwt", "", True, "ParseEncrypted", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] + - ["github.com/go-jose/go-jose/$ANYVERSION/jwt", "", True, "ParseSigned", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] + - ["github.com/go-jose/go-jose/$ANYVERSION/jwt", "NestedJSONWebToken", True, "ParseSignedAndEncrypted", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] + - ["github.com/go-jose/go-jose/$ANYVERSION/jwt", "NestedJSONWebToken", True, "Decrypt", "", "", "Argument[-1]", "ReturnValue[0]", "taint", "manual"] diff --git a/go/ql/lib/ext/github.com.golang-jwt.jwt.model.yml b/go/ql/lib/ext/github.com.golang-jwt.jwt.model.yml index 218550ac559..3f6eaac89b6 100644 --- a/go/ql/lib/ext/github.com.golang-jwt.jwt.model.yml +++ b/go/ql/lib/ext/github.com.golang-jwt.jwt.model.yml @@ -3,5 +3,21 @@ extensions: pack: codeql/go-all extensible: sinkModel data: - - ["github.com/golang-jwt/jwt", "Token", True, "SignedString", "", "", "Argument[0]", "credentials-key", "manual"] - ["github.com/golang-jwt/jwt", "SigningMethod", True, "Sign", "", "", "Argument[1]", "credentials-key", "manual"] + - ["github.com/golang-jwt/jwt", "Token", True, "SignedString", "", "", "Argument[0]", "credentials-key", "manual"] + - ["github.com/golang-jwt/jwt", "Parser", True, "ParseUnverified", "", "", "Argument[0]", "jwt", "manual"] + - addsTo: + pack: codeql/go-all + extensible: summaryModel + data: + - ["github.com/golang-jwt/jwt", "", True, "Parse", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] + - ["github.com/golang-jwt/jwt", "Parser", True, "Parse", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] + - ["github.com/golang-jwt/jwt", "", True, "ParseWithClaims", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] + - ["github.com/golang-jwt/jwt", "Parser", True, "ParseWithClaims", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] + - ["github.com/golang-jwt/jwt", "", True, "ParseECPrivateKeyFromPEM", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] + - ["github.com/golang-jwt/jwt", "", True, "ParseECPublicKeyFromPEM", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] + - ["github.com/golang-jwt/jwt", "", True, "ParseEdPrivateKeyFromPEM", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] + - ["github.com/golang-jwt/jwt", "", True, "ParseEdPublicKeyFromPEM", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] + - ["github.com/golang-jwt/jwt", "", True, "ParseRSAPrivateKeyFromPEM", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] + - ["github.com/golang-jwt/jwt", "", True, "ParseRSAPublicKeyFromPEM", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] + - ["github.com/golang-jwt/jwt", "", True, "RegisterSigningMethod", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] diff --git a/go/ql/lib/ext/gopkg.in.square.go-jose.model.yml b/go/ql/lib/ext/gopkg.in.square.go-jose.model.yml new file mode 100644 index 00000000000..d526ac893a7 --- /dev/null +++ b/go/ql/lib/ext/gopkg.in.square.go-jose.model.yml @@ -0,0 +1,14 @@ +extensions: + - addsTo: + pack: codeql/go-all + extensible: sinkModel + data: + - ["gopkg.in/square/go-jose/$ANYVERSION/jwt", "JSONWebToken", True, "UnsafeClaimsWithoutVerification", "", "", "Argument[-1]", "jwt", "manual"] + - addsTo: + pack: codeql/go-all + extensible: summaryModel + data: + - ["gopkg.in/square/go-jose/$ANYVERSION/jwt", "", True, "ParseEncrypted", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] + - ["gopkg.in/square/go-jose/$ANYVERSION/jwt", "", True, "ParseSigned", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] + - ["gopkg.in/square/go-jose/$ANYVERSION/jwt", "NestedJSONWebToken", True, "ParseSignedAndEncrypted", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] + - ["gopkg.in/square/go-jose/$ANYVERSION/jwt", "NestedJSONWebToken", True, "Decrypt", "", "", "Argument[-1]", "ReturnValue[0]", "taint", "manual"] diff --git a/go/ql/lib/go.qll b/go/ql/lib/go.qll index 779482a3de1..9260c988eaa 100644 --- a/go/ql/lib/go.qll +++ b/go/ql/lib/go.qll @@ -52,6 +52,7 @@ import semmle.go.frameworks.GoMicro import semmle.go.frameworks.GoRestfulHttp import semmle.go.frameworks.Gqlgen import semmle.go.frameworks.Iris +import semmle.go.frameworks.Jwt import semmle.go.frameworks.K8sIoApimachineryPkgRuntime import semmle.go.frameworks.K8sIoApiCoreV1 import semmle.go.frameworks.K8sIoClientGo diff --git a/go/ql/lib/semmle/go/frameworks/GoJose.qll b/go/ql/lib/semmle/go/frameworks/GoJose.qll index a0796dee328..faae97b2d9f 100644 --- a/go/ql/lib/semmle/go/frameworks/GoJose.qll +++ b/go/ql/lib/semmle/go/frameworks/GoJose.qll @@ -9,16 +9,40 @@ private import semmle.go.security.HardcodedCredentials private module GoJose { private class GoJoseKey extends HardcodedCredentials::Sink { GoJoseKey() { - exists(Field f, string pkg | - pkg = - [ - package("github.com/square/go-jose", ""), package("github.com/go-jose/go-jose", ""), - "gopkg.in/square/go-jose.v2" - ] - | - f.hasQualifiedName(pkg, ["Recipient", "SigningKey"], "Key") and + exists(Field f | + f.hasQualifiedName(goJosePackage(), ["Recipient", "SigningKey"], "Key") and f.getAWrite().getRhs() = this ) } } + + private string goJosePackage() { + result = + [ + package("github.com/square/go-jose", ""), package("github.com/go-jose/go-jose", ""), + "gopkg.in/square/go-jose.v2" + ] + } + + /** + * Provides classes and predicates for working with the `gopkg.in/square/go-jose/jwt` and + * `github.com/go-jose/go-jose/jwt` packages. + */ + private module Jwt { + private import semmle.go.security.MissingJwtSignatureCheckCustomizations::MissingJwtSignatureCheck + + /** The method `JSONWebToken.Claims`. */ + private class GoJoseParseWithClaims extends JwtSafeParse { + GoJoseParseWithClaims() { + this.(Method).hasQualifiedName(goJoseJwtPackage(), "JSONWebToken", "Claims") + } + + override int getTokenArgNum() { result = -1 } + } + + /** Gets the package names `gopkg.in/square/go-jose/jwt` and `github.com/go-jose/go-jose/jwt`. */ + private string goJoseJwtPackage() { + result = package(["gopkg.in/square/go-jose", "github.com/go-jose/go-jose"], "jwt") + } + } } diff --git a/go/ql/lib/semmle/go/frameworks/Jwt.qll b/go/ql/lib/semmle/go/frameworks/Jwt.qll new file mode 100644 index 00000000000..681ead26834 --- /dev/null +++ b/go/ql/lib/semmle/go/frameworks/Jwt.qll @@ -0,0 +1,57 @@ +/** + * Provides classes and predicates for working with the `github.com/golang-jwt/jwt` and + * `github.com/dgrijalva/jwt-go` packages. + */ + +import go +private import semmle.go.security.MissingJwtSignatureCheckCustomizations::MissingJwtSignatureCheck + +/** The function `jwt.Parse` or the method `Parser.Parse`. */ +private class GolangJwtParse extends JwtSafeParse { + GolangJwtParse() { + this.hasQualifiedName(golangJwtPackage(), "Parse") + or + this.(Method).hasQualifiedName(golangJwtPackage(), "Parser", "Parse") + } + + override int getTokenArgNum() { result = 0 } +} + +/** The function `jwt.ParseWithClaims` or the method `Parser.ParseWithClaims`. */ +private class GolangJwtParseWithClaims extends JwtSafeParse { + GolangJwtParseWithClaims() { + this.hasQualifiedName(golangJwtPackage(), "ParseWithClaims") + or + this.(Method).hasQualifiedName(golangJwtPackage(), "Parser", "ParseWithClaims") + } + + override int getTokenArgNum() { result = 0 } +} + +/** The function `jwt.ParseFromRequest`. */ +private class GolangJwtParseFromRequest extends JwtSafeParse { + GolangJwtParseFromRequest() { + this.hasQualifiedName(golangJwtRequestPackage(), "ParseFromRequest") + } + + override int getTokenArgNum() { result = 0 } +} + +/** The function `jwt.ParseFromRequestWithClaims`. */ +private class GolangJwtParseFromRequestWithClaims extends JwtSafeParse { + GolangJwtParseFromRequestWithClaims() { + this.hasQualifiedName(golangJwtRequestPackage(), "ParseFromRequestWithClaims") + } + + override int getTokenArgNum() { result = 0 } +} + +/** Gets the pakcage names `github.com/golang-jwt/jwt` and `github.com/dgrijalva/jwt-go`. */ +private string golangJwtPackage() { + result = package(["github.com/golang-jwt/jwt", "github.com/dgrijalva/jwt-go"], "") +} + +/** Gets the package names `github.com/golang-jwt/jwt/request` and `github.com/dgrijalva/jwt-go/request`. */ +private string golangJwtRequestPackage() { + result = package(["github.com/golang-jwt/jwt", "github.com/dgrijalva/jwt-go"], "request") +} diff --git a/go/ql/lib/semmle/go/security/MissingJwtSignatureCheck.qll b/go/ql/lib/semmle/go/security/MissingJwtSignatureCheck.qll new file mode 100644 index 00000000000..346264900fb --- /dev/null +++ b/go/ql/lib/semmle/go/security/MissingJwtSignatureCheck.qll @@ -0,0 +1,40 @@ +/** + * Provides a taint tracking flow for reasoning about JWT vulnerabilities. + * + * Note: for performance reasons, only import this file if `MissingJwtSignatureCheck::Config` or `MissingJwtSignatureCheck::Flow` are needed, + * otherwise `MissingJwtSignatureCheckCustomizations` should be imported instead. + */ + +import go + +/** Provides a taint-tracking flow for reasoning about JWT vulnerabilities. */ +module MissingJwtSignatureCheck { + import MissingJwtSignatureCheckCustomizations::MissingJwtSignatureCheck + + module Config implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { + source instanceof Source and + not SafeParse::flow(source, _) + } + + predicate isSink(DataFlow::Node sink) { sink instanceof Sink } + + predicate isAdditionalFlowStep(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) { + any(AdditionalFlowStep s).step(nodeFrom, nodeTo) + } + } + + module Flow = TaintTracking::Global; + + private module SafeParseConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { source instanceof Source } + + predicate isSink(DataFlow::Node sink) { sink = any(JwtSafeParse jwtParse).getTokenArg() } + + predicate isAdditionalFlowStep(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) { + any(AdditionalFlowStep s).step(nodeFrom, nodeTo) + } + } + + private module SafeParse = TaintTracking::Global; +} diff --git a/go/ql/lib/semmle/go/security/MissingJwtSignatureCheckCustomizations.qll b/go/ql/lib/semmle/go/security/MissingJwtSignatureCheckCustomizations.qll new file mode 100644 index 00000000000..bfc2a18b3b1 --- /dev/null +++ b/go/ql/lib/semmle/go/security/MissingJwtSignatureCheckCustomizations.qll @@ -0,0 +1,48 @@ +import go +private import semmle.go.dataflow.ExternalFlow +private import codeql.util.Unit + +module MissingJwtSignatureCheck { + /** + * A data flow source for JWT vulnerabilities. + */ + abstract class Source extends DataFlow::Node { } + + /** + * A data flow sink for JWT vulnerabilities. + */ + abstract class Sink extends DataFlow::Node { } + + /** + * A sanitizer for JWT vulnerabilities. + */ + abstract class Sanitizer extends DataFlow::Node { } + + /** An additional flow step for JWT vulnerabilities. */ + class AdditionalFlowStep extends Unit { + /** + * Holds if the step from `node1` to `node2` should be considered a flow + * step for configurations related to JWT vulnerabilities. + */ + abstract predicate step(DataFlow::Node node1, DataFlow::Node node2); + } + + /** A function that parses and correctly validates a JWT token. */ + abstract class JwtSafeParse extends Function { + /** Gets the position of the JWT argument in a call to this function. */ + abstract int getTokenArgNum(); + + /** Gets the JWT argument of a call to this function. */ + DataFlow::Node getTokenArg() { + this.getTokenArgNum() != -1 and result = this.getACall().getArgument(this.getTokenArgNum()) + or + this.getTokenArgNum() = -1 and result = this.getACall().getReceiver() + } + } + + private class DefaultSource extends Source instanceof UntrustedFlowSource { } + + private class DefaultSink extends Sink { + DefaultSink() { sinkNode(this, "jwt") } + } +} diff --git a/go/ql/src/Security/CWE-347/MissingJwtSignatureCheck.qhelp b/go/ql/src/Security/CWE-347/MissingJwtSignatureCheck.qhelp new file mode 100644 index 00000000000..78643506041 --- /dev/null +++ b/go/ql/src/Security/CWE-347/MissingJwtSignatureCheck.qhelp @@ -0,0 +1,25 @@ + + + +

    Applications decoding a JSON Web Token (JWT) may be vulnerable when the + signature is not correctly verified in the process.

    +
    + +

    Always verify the signature by using the appropriate methods depending on the JWT library, + or use a library that verifies it by default.

    + + +

    The following example shows a case where a JWT is parsed without verifying the + signature.

    + +

    In the example below, the appropriate function for parsing a JWT + and verifying its signature is used.

    + +
    + +
  • + +
  • +
    + +
    \ No newline at end of file diff --git a/go/ql/src/Security/CWE-347/MissingJwtSignatureCheck.ql b/go/ql/src/Security/CWE-347/MissingJwtSignatureCheck.ql new file mode 100644 index 00000000000..3b89201b34f --- /dev/null +++ b/go/ql/src/Security/CWE-347/MissingJwtSignatureCheck.ql @@ -0,0 +1,21 @@ +/** + * @name Missing JWT signature check + * @description Failing to check the Json Web Token (JWT) signature may allow an attacker to forge their own tokens. + * @kind path-problem + * @problem.severity error + * @security-severity 7.8 + * @precision high + * @id go/missing-jwt-signature-check + * @tags security + * external/cwe/cwe-347 + */ + +import go +import semmle.go.security.MissingJwtSignatureCheck +import MissingJwtSignatureCheck::Flow::PathGraph + +from MissingJwtSignatureCheck::Flow::PathNode source, MissingJwtSignatureCheck::Flow::PathNode sink +where MissingJwtSignatureCheck::Flow::flowPath(source, sink) +select sink.getNode(), source, sink, + "This JWT is parsed without verification and received from $@.", source.getNode(), + "this user-controlled source" diff --git a/go/ql/src/Security/CWE-347/MissingJwtSignatureCheckBad.go b/go/ql/src/Security/CWE-347/MissingJwtSignatureCheckBad.go new file mode 100644 index 00000000000..4fad1c57ebe --- /dev/null +++ b/go/ql/src/Security/CWE-347/MissingJwtSignatureCheckBad.go @@ -0,0 +1,21 @@ +package main + +import ( + "fmt" + "log" + + "github.com/golang-jwt/jwt/v5" +) + +type User struct{} + +func decodeJwt(token string) { + // BAD: JWT is only decoded without signature verification + fmt.Println("only decoding JWT") + DecodedToken, _, err := jwt.NewParser().ParseUnverified(token, &User{}) + if claims, ok := DecodedToken.Claims.(*User); ok { + fmt.Printf("DecodedToken:%v\n", claims) + } else { + log.Fatal("error", err) + } +} diff --git a/go/ql/src/Security/CWE-347/MissingJwtSignatureCheckGood.go b/go/ql/src/Security/CWE-347/MissingJwtSignatureCheckGood.go new file mode 100644 index 00000000000..699a20c3278 --- /dev/null +++ b/go/ql/src/Security/CWE-347/MissingJwtSignatureCheckGood.go @@ -0,0 +1,22 @@ +package main + +import ( + "fmt" + "log" + + "github.com/golang-jwt/jwt/v5" +) + +type User struct{} + +func parseJwt(token string, jwtKey []byte) { + // GOOD: JWT is parsed with signature verification using jwtKey + DecodedToken, err := jwt.ParseWithClaims(token, &User{}, func(token *jwt.Token) (interface{}, error) { + return jwtKey, nil + }) + if claims, ok := DecodedToken.Claims.(*User); ok && DecodedToken.Valid && !err { + fmt.Printf("DecodedToken:%v\n", claims) + } else { + log.Fatal(err) + } +} diff --git a/go/ql/src/change-notes/2024-02-06-missing-jwt-signature-check-promotion.md b/go/ql/src/change-notes/2024-02-06-missing-jwt-signature-check-promotion.md new file mode 100644 index 00000000000..3fdb29af01e --- /dev/null +++ b/go/ql/src/change-notes/2024-02-06-missing-jwt-signature-check-promotion.md @@ -0,0 +1,4 @@ +--- +category: newQuery +--- +* The query "Missing JWT signature check" (`go/missing-jwt-signature-check`) has been promoted from experimental to the main query pack. Its results will now appear by default. This query was originally [submitted as an experimental query by @am0o0](https://github.com/github/codeql/pull/14075). diff --git a/go/ql/src/experimental/CWE-347/Example.go b/go/ql/src/experimental/CWE-347/Example.go deleted file mode 100644 index ee59d836439..00000000000 --- a/go/ql/src/experimental/CWE-347/Example.go +++ /dev/null @@ -1,39 +0,0 @@ -package main - -import ( - "fmt" - "log" - - "github.com/golang-jwt/jwt/v5" -) - -func main() { - // BAD: only decode jwt without verification - notVerifyJWT(token) - - // GOOD: decode with verification or verify plus decode - notVerifyJWT(token) - VerifyJWT(token) -} - -func notVerifyJWT(signedToken string) { - fmt.Println("only decoding JWT") - DecodedToken, _, err := jwt.NewParser().ParseUnverified(signedToken, &CustomerInfo{}) - if claims, ok := DecodedToken.Claims.(*CustomerInfo); ok { - fmt.Printf("DecodedToken:%v\n", claims) - } else { - log.Fatal("error", err) - } -} -func LoadJwtKey(token *jwt.Token) (interface{}, error) { - return ARandomJwtKey, nil -} -func verifyJWT(signedToken string) { - fmt.Println("verifying JWT") - DecodedToken, err := jwt.ParseWithClaims(signedToken, &CustomerInfo{}, LoadJwtKey) - if claims, ok := DecodedToken.Claims.(*CustomerInfo); ok && DecodedToken.Valid { - fmt.Printf("NAME:%v ,ID:%v\n", claims.Name, claims.ID) - } else { - log.Fatal(err) - } -} diff --git a/go/ql/src/experimental/CWE-347/ParseJWTWithoutVerification.qhelp b/go/ql/src/experimental/CWE-347/ParseJWTWithoutVerification.qhelp deleted file mode 100644 index cb1edb2f659..00000000000 --- a/go/ql/src/experimental/CWE-347/ParseJWTWithoutVerification.qhelp +++ /dev/null @@ -1,34 +0,0 @@ - - - -

    - A JSON Web Token (JWT) is used for authenticating and managing users in an application. -

    -

    - Only Decoding JWTs without checking if they have a valid signature or not can lead to security vulnerabilities. -

    - -
    - - -

    - Don't use methods that only decode JWT, Instead use methods that verify the signature of JWT. -

    - -
    - - -

    - In the following code you can see an Example from a popular Library. -

    - - - -
    - -
  • - JWT audience claim is not verified -
  • -
    - -
    \ No newline at end of file diff --git a/go/ql/src/experimental/CWE-347/ParseJWTWithoutVerification.ql b/go/ql/src/experimental/CWE-347/ParseJWTWithoutVerification.ql deleted file mode 100644 index fb457c2f449..00000000000 --- a/go/ql/src/experimental/CWE-347/ParseJWTWithoutVerification.ql +++ /dev/null @@ -1,57 +0,0 @@ -/** - * @name Use of JWT Methods that only decode user provided Token - * @description Using JWT methods without verification can cause to authorization or authentication bypass - * @kind path-problem - * @problem.severity error - * @id go/parse-jwt-without-verification - * @tags security - * experimental - * external/cwe/cwe-347 - */ - -import go -import experimental.frameworks.JWT - -module WithValidationConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node source) { source instanceof UntrustedFlowSource } - - predicate isSink(DataFlow::Node sink) { - sink = any(JwtParse jwtParse).getTokenArg() or - sink = any(JwtParseWithKeyFunction jwtParseWithKeyFunction).getTokenArg() - } - - predicate isAdditionalFlowStep(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) { - golangJwtIsAdditionalFlowStep(nodeFrom, nodeTo) - or - goJoseIsAdditionalFlowStep(nodeFrom, nodeTo) - } -} - -module NoValidationConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node source) { - source instanceof UntrustedFlowSource and - not WithValidation::flow(source, _) - } - - predicate isSink(DataFlow::Node sink) { - sink = any(JwtUnverifiedParse parseUnverified).getTokenArg() - } - - predicate isAdditionalFlowStep(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) { - golangJwtIsAdditionalFlowStep(nodeFrom, nodeTo) - or - goJoseIsAdditionalFlowStep(nodeFrom, nodeTo) - } -} - -module WithValidation = TaintTracking::Global; - -module NoValidation = TaintTracking::Global; - -import NoValidation::PathGraph - -from NoValidation::PathNode source, NoValidation::PathNode sink -where NoValidation::flowPath(source, sink) -select sink.getNode(), source, sink, - "This JWT is parsed without verification and received from $@.", source.getNode(), - "this user-controlled source" diff --git a/go/ql/test/experimental/CWE-347/ParseJWTWithoutVerification.qlref b/go/ql/test/experimental/CWE-347/ParseJWTWithoutVerification.qlref deleted file mode 100644 index a4326ff97e6..00000000000 --- a/go/ql/test/experimental/CWE-347/ParseJWTWithoutVerification.qlref +++ /dev/null @@ -1 +0,0 @@ -experimental/CWE-347/ParseJWTWithoutVerification.ql \ No newline at end of file diff --git a/go/ql/test/experimental/CWE-347/ParseJWTWithoutVerification.expected b/go/ql/test/query-tests/Security/CWE-347/MissingJwtSignatureCheck.expected similarity index 100% rename from go/ql/test/experimental/CWE-347/ParseJWTWithoutVerification.expected rename to go/ql/test/query-tests/Security/CWE-347/MissingJwtSignatureCheck.expected diff --git a/go/ql/test/query-tests/Security/CWE-347/MissingJwtSignatureCheck.qlref b/go/ql/test/query-tests/Security/CWE-347/MissingJwtSignatureCheck.qlref new file mode 100644 index 00000000000..53caf5633a7 --- /dev/null +++ b/go/ql/test/query-tests/Security/CWE-347/MissingJwtSignatureCheck.qlref @@ -0,0 +1 @@ +Security/CWE-347/MissingJwtSignatureCheck.ql diff --git a/go/ql/test/experimental/CWE-347/go-jose.v3.go b/go/ql/test/query-tests/Security/CWE-347/go-jose.v3.go similarity index 100% rename from go/ql/test/experimental/CWE-347/go-jose.v3.go rename to go/ql/test/query-tests/Security/CWE-347/go-jose.v3.go diff --git a/go/ql/test/experimental/CWE-347/go.mod b/go/ql/test/query-tests/Security/CWE-347/go.mod similarity index 100% rename from go/ql/test/experimental/CWE-347/go.mod rename to go/ql/test/query-tests/Security/CWE-347/go.mod diff --git a/go/ql/test/experimental/CWE-347/golang-jwt-v5.go b/go/ql/test/query-tests/Security/CWE-347/golang-jwt-v5.go similarity index 100% rename from go/ql/test/experimental/CWE-347/golang-jwt-v5.go rename to go/ql/test/query-tests/Security/CWE-347/golang-jwt-v5.go diff --git a/go/ql/test/experimental/CWE-347/vendor/github.com/go-jose/go-jose/v3/jwt/stub.go b/go/ql/test/query-tests/Security/CWE-347/vendor/github.com/go-jose/go-jose/v3/jwt/stub.go similarity index 100% rename from go/ql/test/experimental/CWE-347/vendor/github.com/go-jose/go-jose/v3/jwt/stub.go rename to go/ql/test/query-tests/Security/CWE-347/vendor/github.com/go-jose/go-jose/v3/jwt/stub.go diff --git a/go/ql/test/experimental/CWE-347/vendor/github.com/golang-jwt/jwt/v5/stub.go b/go/ql/test/query-tests/Security/CWE-347/vendor/github.com/golang-jwt/jwt/v5/stub.go similarity index 100% rename from go/ql/test/experimental/CWE-347/vendor/github.com/golang-jwt/jwt/v5/stub.go rename to go/ql/test/query-tests/Security/CWE-347/vendor/github.com/golang-jwt/jwt/v5/stub.go diff --git a/go/ql/test/experimental/CWE-347/vendor/modules.txt b/go/ql/test/query-tests/Security/CWE-347/vendor/modules.txt similarity index 100% rename from go/ql/test/experimental/CWE-347/vendor/modules.txt rename to go/ql/test/query-tests/Security/CWE-347/vendor/modules.txt From ad7d40f0af7219f854818eaf41bb11c910d123bf Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Mon, 12 Feb 2024 12:41:01 +0100 Subject: [PATCH 254/378] Add missing QLDoc --- .../lib/semmle/go/security/MissingJwtSignatureCheck.qll | 2 ++ .../security/MissingJwtSignatureCheckCustomizations.qll | 9 +++++++++ 2 files changed, 11 insertions(+) diff --git a/go/ql/lib/semmle/go/security/MissingJwtSignatureCheck.qll b/go/ql/lib/semmle/go/security/MissingJwtSignatureCheck.qll index 346264900fb..73605d65b02 100644 --- a/go/ql/lib/semmle/go/security/MissingJwtSignatureCheck.qll +++ b/go/ql/lib/semmle/go/security/MissingJwtSignatureCheck.qll @@ -11,6 +11,7 @@ import go module MissingJwtSignatureCheck { import MissingJwtSignatureCheckCustomizations::MissingJwtSignatureCheck + /** Config for reasoning about JWT vulnerabilities. */ module Config implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { source instanceof Source and @@ -24,6 +25,7 @@ module MissingJwtSignatureCheck { } } + /** Tracks taint flow for reasoning about JWT vulnerabilities. */ module Flow = TaintTracking::Global; private module SafeParseConfig implements DataFlow::ConfigSig { diff --git a/go/ql/lib/semmle/go/security/MissingJwtSignatureCheckCustomizations.qll b/go/ql/lib/semmle/go/security/MissingJwtSignatureCheckCustomizations.qll index bfc2a18b3b1..2b048441151 100644 --- a/go/ql/lib/semmle/go/security/MissingJwtSignatureCheckCustomizations.qll +++ b/go/ql/lib/semmle/go/security/MissingJwtSignatureCheckCustomizations.qll @@ -1,7 +1,16 @@ +/** + * Provides default sources, sinks, and sanitizers for reasoning about + * JWT vulnerabilities, as well as extension points for adding your own. + */ + import go private import semmle.go.dataflow.ExternalFlow private import codeql.util.Unit +/** + * Provides extension points for customizing the data-flow tracking configuration for reasoning + * about JWT vulnerabilities. + */ module MissingJwtSignatureCheck { /** * A data flow source for JWT vulnerabilities. From 85b22a2b981d56beb4fa64ece7da418bfdfdc4a2 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Mon, 12 Feb 2024 12:41:11 +0100 Subject: [PATCH 255/378] Fix QHelp --- go/ql/src/Security/CWE-347/MissingJwtSignatureCheck.qhelp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go/ql/src/Security/CWE-347/MissingJwtSignatureCheck.qhelp b/go/ql/src/Security/CWE-347/MissingJwtSignatureCheck.qhelp index 78643506041..7f2d1ac4b80 100644 --- a/go/ql/src/Security/CWE-347/MissingJwtSignatureCheck.qhelp +++ b/go/ql/src/Security/CWE-347/MissingJwtSignatureCheck.qhelp @@ -7,7 +7,7 @@

    Always verify the signature by using the appropriate methods depending on the JWT library, or use a library that verifies it by default.

    - +

    The following example shows a case where a JWT is parsed without verifying the signature.

    From 551875cb5afec536dcbfd65e8067f94069c6a0cd Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Mon, 12 Feb 2024 14:42:13 +0100 Subject: [PATCH 256/378] Add 'jwt' as valid sink kind --- shared/mad/codeql/mad/ModelValidation.qll | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/shared/mad/codeql/mad/ModelValidation.qll b/shared/mad/codeql/mad/ModelValidation.qll index 03aa0337fc7..20ef0015d78 100644 --- a/shared/mad/codeql/mad/ModelValidation.qll +++ b/shared/mad/codeql/mad/ModelValidation.qll @@ -39,7 +39,9 @@ module KindValidation { "mongodb.sink", "nosql-injection", "unsafe-deserialization", // Swift-only currently, but may be shared in the future "database-store", "format-string", "hash-iteration-count", "predicate-injection", - "preferences-store", "tls-protocol-version", "transmission", "webview-fetch", "xxe" + "preferences-store", "tls-protocol-version", "transmission", "webview-fetch", "xxe", + // Go-only currently, but may be shared in the future + "jwt" ] or this.matches([ From 5a82d2188a0a1ce13179daa2d57f14b1ebe2b110 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Mon, 12 Feb 2024 14:42:26 +0100 Subject: [PATCH 257/378] Fix double quotes in MaD row --- go/ql/lib/ext/github.com.dgrijalva.jwt-go.model.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go/ql/lib/ext/github.com.dgrijalva.jwt-go.model.yml b/go/ql/lib/ext/github.com.dgrijalva.jwt-go.model.yml index 8a27cc21d19..04db1290669 100644 --- a/go/ql/lib/ext/github.com.dgrijalva.jwt-go.model.yml +++ b/go/ql/lib/ext/github.com.dgrijalva.jwt-go.model.yml @@ -18,4 +18,4 @@ extensions: - ["github.com/dgrijalva/jwt-go", "", True, "ParseECPublicKeyFromPEM", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] - ["github.com/dgrijalva/jwt-go", "", True, "ParseRSAPrivateKeyFromPEM", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] - ["github.com/dgrijalva/jwt-go", "", True, "ParseRSAPrivateKeyFromPEMWithPassword", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] - - ["github.com/dgrijalva/jwt-go", "", True, ParseRSAPublicKeyFromPEM", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] + - ["github.com/dgrijalva/jwt-go", "", True, "ParseRSAPublicKeyFromPEM", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] From 769ec16803833802a8d3171d75a21c9d5d0505da Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Wed, 14 Feb 2024 09:54:16 +0100 Subject: [PATCH 258/378] Apply suggestions from code review Co-authored-by: Chris Smowton --- go/ql/src/Security/CWE-347/MissingJwtSignatureCheck.qhelp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/go/ql/src/Security/CWE-347/MissingJwtSignatureCheck.qhelp b/go/ql/src/Security/CWE-347/MissingJwtSignatureCheck.qhelp index 7f2d1ac4b80..be9285b9717 100644 --- a/go/ql/src/Security/CWE-347/MissingJwtSignatureCheck.qhelp +++ b/go/ql/src/Security/CWE-347/MissingJwtSignatureCheck.qhelp @@ -2,10 +2,10 @@

    Applications decoding a JSON Web Token (JWT) may be vulnerable when the - signature is not correctly verified in the process.

    + signature is not correctly verified.

    -

    Always verify the signature by using the appropriate methods depending on the JWT library, +

    Always verify the signature by using the appropriate methods provided by the JWT library, or use a library that verifies it by default.

    From f9638760fff2cb52b86be3aded4f51e1b9ca953d Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Wed, 14 Feb 2024 14:08:21 +0100 Subject: [PATCH 259/378] Fix MaD rows --- go/ql/lib/ext/gopkg.in.square.go-jose.model.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/go/ql/lib/ext/gopkg.in.square.go-jose.model.yml b/go/ql/lib/ext/gopkg.in.square.go-jose.model.yml index d526ac893a7..fa0c3806166 100644 --- a/go/ql/lib/ext/gopkg.in.square.go-jose.model.yml +++ b/go/ql/lib/ext/gopkg.in.square.go-jose.model.yml @@ -3,12 +3,12 @@ extensions: pack: codeql/go-all extensible: sinkModel data: - - ["gopkg.in/square/go-jose/$ANYVERSION/jwt", "JSONWebToken", True, "UnsafeClaimsWithoutVerification", "", "", "Argument[-1]", "jwt", "manual"] + - ["gopkg.in/square/go-jose.v2/jwt", "JSONWebToken", True, "UnsafeClaimsWithoutVerification", "", "", "Argument[-1]", "jwt", "manual"] - addsTo: pack: codeql/go-all extensible: summaryModel data: - - ["gopkg.in/square/go-jose/$ANYVERSION/jwt", "", True, "ParseEncrypted", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] - - ["gopkg.in/square/go-jose/$ANYVERSION/jwt", "", True, "ParseSigned", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] - - ["gopkg.in/square/go-jose/$ANYVERSION/jwt", "NestedJSONWebToken", True, "ParseSignedAndEncrypted", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] - - ["gopkg.in/square/go-jose/$ANYVERSION/jwt", "NestedJSONWebToken", True, "Decrypt", "", "", "Argument[-1]", "ReturnValue[0]", "taint", "manual"] + - ["gopkg.in/square/go-jose.v2/jwt", "", True, "ParseEncrypted", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] + - ["gopkg.in/square/go-jose.v2/jwt", "", True, "ParseSigned", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] + - ["gopkg.in/square/go-jose.v2/jwt", "NestedJSONWebToken", True, "ParseSignedAndEncrypted", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] + - ["gopkg.in/square/go-jose.v2/jwt", "NestedJSONWebToken", True, "Decrypt", "", "", "Argument[-1]", "ReturnValue[0]", "taint", "manual"] From 582f341d9e920d95c279a4607b14e8e1efe0b2f6 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Wed, 14 Feb 2024 14:17:32 +0100 Subject: [PATCH 260/378] Add references to qhelp --- .../Security/CWE-347/MissingJwtSignatureCheck.qhelp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/go/ql/src/Security/CWE-347/MissingJwtSignatureCheck.qhelp b/go/ql/src/Security/CWE-347/MissingJwtSignatureCheck.qhelp index be9285b9717..5c899f01d5d 100644 --- a/go/ql/src/Security/CWE-347/MissingJwtSignatureCheck.qhelp +++ b/go/ql/src/Security/CWE-347/MissingJwtSignatureCheck.qhelp @@ -5,8 +5,8 @@ signature is not correctly verified.

    -

    Always verify the signature by using the appropriate methods provided by the JWT library, - or use a library that verifies it by default.

    +

    Always verify the signature by using the appropriate methods provided by the JWT + library, or use a library that verifies it by default.

    The following example shows a case where a JWT is parsed without verifying the @@ -17,9 +17,9 @@ -

  • - -
  • +
  • JWT IO: Introduction to JSON Web Tokens.
  • +
  • jwt-go: Documentation.
  • +
  • Go JOSE: Documentation.
  • \ No newline at end of file From 14979585c9a1d1707dd99c0e1b53ee9ebe19afe2 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 14 Feb 2024 16:40:54 +0000 Subject: [PATCH 261/378] Kotlin 2: Accept loc changes for library-tests/exprs/funcExprs.kt --- .../library-tests/exprs/exprs.expected | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected index 12ccd68022e..8cd2b8015de 100644 --- a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected +++ b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected @@ -3170,9 +3170,9 @@ | funcExprs.kt:51:8:51:16 | FuncRef | funcExprs.kt:51:8:51:16 | invoke | TypeAccess | | funcExprs.kt:51:8:51:16 | Function0 | funcExprs.kt:21:1:52:1 | call | TypeAccess | | funcExprs.kt:51:8:51:16 | new FuncRef(...) | funcExprs.kt:51:8:51:16 | invoke | ClassInstanceExpr | -| funcExprs.kt:55:23:55:49 | int | file://:0:0:0:0 | | TypeAccess | +| funcExprs.kt:55:5:55:49 | int | file://:0:0:0:0 | | TypeAccess | | funcExprs.kt:55:34:55:39 | int | file://:0:0:0:0 | | TypeAccess | -| funcExprs.kt:55:49:55:49 | 5 | funcExprs.kt:55:23:55:49 | invoke | IntegerLiteral | +| funcExprs.kt:55:49:55:49 | 5 | funcExprs.kt:55:5:55:49 | invoke | IntegerLiteral | | funcExprs.kt:58:1:58:25 | Unit | file://:0:0:0:0 | | TypeAccess | | funcExprs.kt:58:12:58:21 | ? ... | file://:0:0:0:0 | | WildcardTypeAccess | | funcExprs.kt:58:12:58:21 | Function0 | file://:0:0:0:0 | | TypeAccess | @@ -3249,8 +3249,8 @@ | funcExprs.kt:75:14:75:14 | Generic> | file://:0:0:0:0 | | TypeAccess | | funcExprs.kt:75:14:75:14 | Generic | file://:0:0:0:0 | | TypeAccess | | funcExprs.kt:75:14:75:14 | Integer | file://:0:0:0:0 | | TypeAccess | -| funcExprs.kt:75:20:75:20 | "a" | funcExprs.kt:75:12:75:22 | invoke | StringLiteral | -| funcExprs.kt:77:13:77:60 | Unit | file://:0:0:0:0 | | TypeAccess | +| funcExprs.kt:75:19:75:21 | "a" | funcExprs.kt:75:12:75:22 | invoke | StringLiteral | +| funcExprs.kt:77:5:77:60 | Unit | file://:0:0:0:0 | | TypeAccess | | funcExprs.kt:77:20:77:55 | ? ... | file://:0:0:0:0 | | WildcardTypeAccess | | funcExprs.kt:77:20:77:55 | Function1>,String> | file://:0:0:0:0 | | TypeAccess | | funcExprs.kt:77:20:77:55 | Generic> | file://:0:0:0:0 | | TypeAccess | @@ -3258,7 +3258,7 @@ | funcExprs.kt:77:20:77:55 | Integer | file://:0:0:0:0 | | TypeAccess | | funcExprs.kt:77:20:77:55 | String | file://:0:0:0:0 | | TypeAccess | | funcExprs.kt:82:1:96:1 | Unit | file://:0:0:0:0 | | TypeAccess | -| funcExprs.kt:83:9:83:10 | l1 | funcExprs.kt:82:1:96:1 | fn | LocalVariableDeclExpr | +| funcExprs.kt:83:5:83:51 | l1 | funcExprs.kt:82:1:96:1 | fn | LocalVariableDeclExpr | | funcExprs.kt:83:31:83:51 | ...->... | funcExprs.kt:82:1:96:1 | fn | LambdaExpr | | funcExprs.kt:83:31:83:51 | Function1 | funcExprs.kt:82:1:96:1 | fn | TypeAccess | | funcExprs.kt:83:31:83:51 | Integer | funcExprs.kt:82:1:96:1 | fn | TypeAccess | @@ -3272,7 +3272,7 @@ | funcExprs.kt:84:8:84:16 | | funcExprs.kt:82:1:96:1 | fn | ImplicitCoercionToUnitExpr | | funcExprs.kt:84:8:84:16 | Unit | funcExprs.kt:82:1:96:1 | fn | TypeAccess | | funcExprs.kt:84:15:84:15 | 5 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | -| funcExprs.kt:86:9:86:10 | l2 | funcExprs.kt:82:1:96:1 | fn | LocalVariableDeclExpr | +| funcExprs.kt:86:5:86:59 | l2 | funcExprs.kt:82:1:96:1 | fn | LocalVariableDeclExpr | | funcExprs.kt:86:39:86:59 | ...->... | funcExprs.kt:82:1:96:1 | fn | LambdaExpr | | funcExprs.kt:86:39:86:59 | Function1 | funcExprs.kt:82:1:96:1 | fn | TypeAccess | | funcExprs.kt:86:39:86:59 | Integer | funcExprs.kt:82:1:96:1 | fn | TypeAccess | @@ -3286,7 +3286,7 @@ | funcExprs.kt:87:8:87:16 | | funcExprs.kt:82:1:96:1 | fn | ImplicitCoercionToUnitExpr | | funcExprs.kt:87:8:87:16 | Unit | funcExprs.kt:82:1:96:1 | fn | TypeAccess | | funcExprs.kt:87:15:87:15 | 5 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | -| funcExprs.kt:89:9:89:10 | l3 | funcExprs.kt:82:1:96:1 | fn | LocalVariableDeclExpr | +| funcExprs.kt:89:5:90:69 | l3 | funcExprs.kt:82:1:96:1 | fn | LocalVariableDeclExpr | | funcExprs.kt:90:15:90:69 | 0 | funcExprs.kt:90:15:90:69 | invoke | IntegerLiteral | | funcExprs.kt:90:15:90:69 | 1 | funcExprs.kt:90:15:90:69 | invoke | IntegerLiteral | | funcExprs.kt:90:15:90:69 | 2 | funcExprs.kt:90:15:90:69 | invoke | IntegerLiteral | @@ -3463,7 +3463,7 @@ | funcExprs.kt:91:55:91:55 | 1 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | | funcExprs.kt:91:57:91:57 | 2 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | | funcExprs.kt:91:59:91:59 | 3 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | -| funcExprs.kt:93:9:93:10 | l4 | funcExprs.kt:82:1:96:1 | fn | LocalVariableDeclExpr | +| funcExprs.kt:93:5:94:67 | l4 | funcExprs.kt:82:1:96:1 | fn | LocalVariableDeclExpr | | funcExprs.kt:94:15:94:67 | ...->... | funcExprs.kt:82:1:96:1 | fn | LambdaExpr | | funcExprs.kt:94:15:94:67 | Function22 | funcExprs.kt:82:1:96:1 | fn | TypeAccess | | funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:1:96:1 | fn | TypeAccess | From 2fe4c8c519d3fcc549d860e2e4b8d94b88837f7e Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 14 Feb 2024 16:47:46 +0000 Subject: [PATCH 262/378] Kotlin 2: Accept some loc changes in library-tests/exprs/exprs --- .../library-tests/exprs/exprs.expected | 40 +++++++++---------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected index 8cd2b8015de..df621ab004a 100644 --- a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected +++ b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected @@ -1626,83 +1626,83 @@ | exprs.kt:229:42:229:64 | Integer | file://:0:0:0:0 | | TypeAccess | | exprs.kt:229:67:229:88 | String | file://:0:0:0:0 | | TypeAccess | | exprs.kt:229:91:229:114 | String | file://:0:0:0:0 | | TypeAccess | -| exprs.kt:230:7:230:8 | b1 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | +| exprs.kt:230:3:230:47 | b1 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | | exprs.kt:230:12:230:27 | notNullPrimitive | exprs.kt:229:1:250:1 | equalityTests | VarAccess | | exprs.kt:230:12:230:47 | ... (value equals) ... | exprs.kt:229:1:250:1 | equalityTests | ValueEQExpr | | exprs.kt:230:32:230:47 | notNullPrimitive | exprs.kt:229:1:250:1 | equalityTests | VarAccess | -| exprs.kt:231:7:231:8 | b2 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | +| exprs.kt:231:3:231:48 | b2 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | | exprs.kt:231:12:231:27 | notNullPrimitive | exprs.kt:229:1:250:1 | equalityTests | VarAccess | | exprs.kt:231:12:231:48 | ... (value equals) ... | exprs.kt:229:1:250:1 | equalityTests | ValueEQExpr | | exprs.kt:231:32:231:48 | nullablePrimitive | exprs.kt:229:1:250:1 | equalityTests | VarAccess | -| exprs.kt:232:7:232:8 | b3 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | +| exprs.kt:232:3:232:49 | b3 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | | exprs.kt:232:12:232:28 | nullablePrimitive | exprs.kt:229:1:250:1 | equalityTests | VarAccess | | exprs.kt:232:12:232:49 | ... (value equals) ... | exprs.kt:229:1:250:1 | equalityTests | ValueEQExpr | | exprs.kt:232:33:232:49 | nullablePrimitive | exprs.kt:229:1:250:1 | equalityTests | VarAccess | -| exprs.kt:233:7:233:8 | b4 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | +| exprs.kt:233:3:233:43 | b4 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | | exprs.kt:233:12:233:25 | notNullReftype | exprs.kt:229:1:250:1 | equalityTests | VarAccess | | exprs.kt:233:12:233:43 | ... (value equals) ... | exprs.kt:229:1:250:1 | equalityTests | ValueEQExpr | | exprs.kt:233:30:233:43 | notNullReftype | exprs.kt:229:1:250:1 | equalityTests | VarAccess | -| exprs.kt:234:7:234:8 | b5 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | +| exprs.kt:234:3:234:44 | b5 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | | exprs.kt:234:12:234:25 | notNullReftype | exprs.kt:229:1:250:1 | equalityTests | VarAccess | | exprs.kt:234:12:234:44 | ... (value equals) ... | exprs.kt:229:1:250:1 | equalityTests | ValueEQExpr | | exprs.kt:234:30:234:44 | nullableReftype | exprs.kt:229:1:250:1 | equalityTests | VarAccess | -| exprs.kt:235:7:235:8 | b6 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | +| exprs.kt:235:3:235:45 | b6 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | | exprs.kt:235:12:235:26 | nullableReftype | exprs.kt:229:1:250:1 | equalityTests | VarAccess | | exprs.kt:235:12:235:45 | ... (value equals) ... | exprs.kt:229:1:250:1 | equalityTests | ValueEQExpr | | exprs.kt:235:31:235:45 | nullableReftype | exprs.kt:229:1:250:1 | equalityTests | VarAccess | -| exprs.kt:236:7:236:8 | b7 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | +| exprs.kt:236:3:236:47 | b7 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | | exprs.kt:236:12:236:27 | notNullPrimitive | exprs.kt:229:1:250:1 | equalityTests | VarAccess | | exprs.kt:236:12:236:47 | ... (value not-equals) ... | exprs.kt:229:1:250:1 | equalityTests | ValueNEExpr | | exprs.kt:236:32:236:47 | notNullPrimitive | exprs.kt:229:1:250:1 | equalityTests | VarAccess | -| exprs.kt:237:7:237:8 | b8 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | +| exprs.kt:237:3:237:48 | b8 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | | exprs.kt:237:12:237:27 | notNullPrimitive | exprs.kt:229:1:250:1 | equalityTests | VarAccess | | exprs.kt:237:12:237:48 | ... (value not-equals) ... | exprs.kt:229:1:250:1 | equalityTests | ValueNEExpr | | exprs.kt:237:32:237:48 | nullablePrimitive | exprs.kt:229:1:250:1 | equalityTests | VarAccess | -| exprs.kt:238:7:238:8 | b9 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | +| exprs.kt:238:3:238:49 | b9 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | | exprs.kt:238:12:238:28 | nullablePrimitive | exprs.kt:229:1:250:1 | equalityTests | VarAccess | | exprs.kt:238:12:238:49 | ... (value not-equals) ... | exprs.kt:229:1:250:1 | equalityTests | ValueNEExpr | | exprs.kt:238:33:238:49 | nullablePrimitive | exprs.kt:229:1:250:1 | equalityTests | VarAccess | -| exprs.kt:239:7:239:9 | b10 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | +| exprs.kt:239:3:239:44 | b10 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | | exprs.kt:239:13:239:26 | notNullReftype | exprs.kt:229:1:250:1 | equalityTests | VarAccess | | exprs.kt:239:13:239:44 | ... (value not-equals) ... | exprs.kt:229:1:250:1 | equalityTests | ValueNEExpr | | exprs.kt:239:31:239:44 | notNullReftype | exprs.kt:229:1:250:1 | equalityTests | VarAccess | -| exprs.kt:240:7:240:9 | b11 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | +| exprs.kt:240:3:240:45 | b11 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | | exprs.kt:240:13:240:26 | notNullReftype | exprs.kt:229:1:250:1 | equalityTests | VarAccess | | exprs.kt:240:13:240:45 | ... (value not-equals) ... | exprs.kt:229:1:250:1 | equalityTests | ValueNEExpr | | exprs.kt:240:31:240:45 | nullableReftype | exprs.kt:229:1:250:1 | equalityTests | VarAccess | -| exprs.kt:241:7:241:9 | b12 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | +| exprs.kt:241:3:241:46 | b12 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | | exprs.kt:241:13:241:27 | nullableReftype | exprs.kt:229:1:250:1 | equalityTests | VarAccess | | exprs.kt:241:13:241:46 | ... (value not-equals) ... | exprs.kt:229:1:250:1 | equalityTests | ValueNEExpr | | exprs.kt:241:32:241:46 | nullableReftype | exprs.kt:229:1:250:1 | equalityTests | VarAccess | -| exprs.kt:242:7:242:9 | b13 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | +| exprs.kt:242:3:242:36 | b13 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | | exprs.kt:242:13:242:28 | notNullPrimitive | exprs.kt:229:1:250:1 | equalityTests | VarAccess | | exprs.kt:242:13:242:36 | ... (value equals) ... | exprs.kt:229:1:250:1 | equalityTests | ValueEQExpr | | exprs.kt:242:33:242:36 | null | exprs.kt:229:1:250:1 | equalityTests | NullLiteral | -| exprs.kt:243:7:243:9 | b14 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | +| exprs.kt:243:3:243:37 | b14 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | | exprs.kt:243:13:243:29 | nullablePrimitive | exprs.kt:229:1:250:1 | equalityTests | VarAccess | | exprs.kt:243:13:243:37 | ... (value equals) ... | exprs.kt:229:1:250:1 | equalityTests | ValueEQExpr | | exprs.kt:243:34:243:37 | null | exprs.kt:229:1:250:1 | equalityTests | NullLiteral | -| exprs.kt:244:7:244:9 | b15 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | +| exprs.kt:244:3:244:34 | b15 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | | exprs.kt:244:13:244:26 | notNullReftype | exprs.kt:229:1:250:1 | equalityTests | VarAccess | | exprs.kt:244:13:244:34 | ... (value equals) ... | exprs.kt:229:1:250:1 | equalityTests | ValueEQExpr | | exprs.kt:244:31:244:34 | null | exprs.kt:229:1:250:1 | equalityTests | NullLiteral | -| exprs.kt:245:7:245:9 | b16 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | +| exprs.kt:245:3:245:35 | b16 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | | exprs.kt:245:13:245:27 | nullableReftype | exprs.kt:229:1:250:1 | equalityTests | VarAccess | | exprs.kt:245:13:245:35 | ... (value equals) ... | exprs.kt:229:1:250:1 | equalityTests | ValueEQExpr | | exprs.kt:245:32:245:35 | null | exprs.kt:229:1:250:1 | equalityTests | NullLiteral | -| exprs.kt:246:7:246:9 | b17 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | +| exprs.kt:246:3:246:36 | b17 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | | exprs.kt:246:13:246:28 | notNullPrimitive | exprs.kt:229:1:250:1 | equalityTests | VarAccess | | exprs.kt:246:13:246:36 | ... (value not-equals) ... | exprs.kt:229:1:250:1 | equalityTests | ValueNEExpr | | exprs.kt:246:33:246:36 | null | exprs.kt:229:1:250:1 | equalityTests | NullLiteral | -| exprs.kt:247:7:247:9 | b18 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | +| exprs.kt:247:3:247:37 | b18 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | | exprs.kt:247:13:247:29 | nullablePrimitive | exprs.kt:229:1:250:1 | equalityTests | VarAccess | | exprs.kt:247:13:247:37 | ... (value not-equals) ... | exprs.kt:229:1:250:1 | equalityTests | ValueNEExpr | | exprs.kt:247:34:247:37 | null | exprs.kt:229:1:250:1 | equalityTests | NullLiteral | -| exprs.kt:248:7:248:9 | b19 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | +| exprs.kt:248:3:248:34 | b19 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | | exprs.kt:248:13:248:26 | notNullReftype | exprs.kt:229:1:250:1 | equalityTests | VarAccess | | exprs.kt:248:13:248:34 | ... (value not-equals) ... | exprs.kt:229:1:250:1 | equalityTests | ValueNEExpr | | exprs.kt:248:31:248:34 | null | exprs.kt:229:1:250:1 | equalityTests | NullLiteral | -| exprs.kt:249:7:249:9 | b20 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | +| exprs.kt:249:3:249:35 | b20 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | | exprs.kt:249:13:249:27 | nullableReftype | exprs.kt:229:1:250:1 | equalityTests | VarAccess | | exprs.kt:249:13:249:35 | ... (value not-equals) ... | exprs.kt:229:1:250:1 | equalityTests | ValueNEExpr | | exprs.kt:249:32:249:35 | null | exprs.kt:229:1:250:1 | equalityTests | NullLiteral | From b95c69dc662ae172903ac49832b193b5142b19c0 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 14 Feb 2024 16:54:20 +0000 Subject: [PATCH 263/378] Kotlin 2: Accept location changes in library-tests/exprs --- java/ql/test-kotlin2/library-tests/exprs/exprs.expected | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected index df621ab004a..ddfe180ebf3 100644 --- a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected +++ b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected @@ -883,8 +883,6 @@ | delegatedProperties.kt:87:34:87:46 | getTopLevelInt(...) | delegatedProperties.kt:87:34:87:46 | get | MethodCall | | delegatedProperties.kt:87:34:87:46 | setTopLevelInt(...) | delegatedProperties.kt:87:34:87:46 | set | MethodCall | | delegatedProperties.kt:87:34:87:46 | this | delegatedProperties.kt:87:34:87:46 | invoke | ThisAccess | -| exprs.kt:0:0:0:0 | String | file://:0:0:0:0 | | TypeAccess | -| exprs.kt:0:0:0:0 | String | file://:0:0:0:0 | | TypeAccess | | exprs.kt:4:1:142:1 | int | file://:0:0:0:0 | | TypeAccess | | exprs.kt:4:20:4:25 | int | file://:0:0:0:0 | | TypeAccess | | exprs.kt:4:28:4:33 | int | file://:0:0:0:0 | | TypeAccess | @@ -1472,6 +1470,7 @@ | exprs.kt:174:1:176:1 | Direction[] | file://:0:0:0:0 | | TypeAccess | | exprs.kt:174:1:176:1 | Enum | exprs.kt:174:6:176:1 | Direction | TypeAccess | | exprs.kt:174:1:176:1 | EnumEntries | file://:0:0:0:0 | | TypeAccess | +| exprs.kt:174:1:176:1 | String | file://:0:0:0:0 | | TypeAccess | | exprs.kt:174:1:176:1 | new Enum(...) | exprs.kt:174:6:176:1 | Direction | ClassInstanceExpr | | exprs.kt:174:1:176:1 | null | exprs.kt:174:6:176:1 | Direction | NullLiteral | | exprs.kt:175:5:175:10 | ...=... | exprs.kt:0:0:0:0 | | KtInitializerAssignExpr | @@ -1506,6 +1505,7 @@ | exprs.kt:178:1:182:1 | Color[] | file://:0:0:0:0 | | TypeAccess | | exprs.kt:178:1:182:1 | Enum | exprs.kt:178:6:182:1 | Color | TypeAccess | | exprs.kt:178:1:182:1 | EnumEntries | file://:0:0:0:0 | | TypeAccess | +| exprs.kt:178:1:182:1 | String | file://:0:0:0:0 | | TypeAccess | | exprs.kt:178:1:182:1 | new Enum(...) | exprs.kt:178:6:182:1 | Color | ClassInstanceExpr | | exprs.kt:178:1:182:1 | null | exprs.kt:178:6:182:1 | Color | NullLiteral | | exprs.kt:178:18:178:29 | ...=... | exprs.kt:178:6:182:1 | Color | KtInitializerAssignExpr | From 4fcc1c26d4f661231f7212bdb25e6a1e03171c6e Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 14 Feb 2024 16:56:22 +0000 Subject: [PATCH 264/378] Kotlin 2: Accept location changes in library-tests/exprs --- java/ql/test-kotlin2/library-tests/exprs/exprs.expected | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected index ddfe180ebf3..a8a48918373 100644 --- a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected +++ b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected @@ -1395,12 +1395,12 @@ | exprs.kt:145:9:145:9 | d | exprs.kt:144:1:146:1 | getClass | LocalVariableDeclExpr | | exprs.kt:145:13:145:16 | true | exprs.kt:144:1:146:1 | getClass | BooleanLiteral | | exprs.kt:145:13:145:23 | ::class | exprs.kt:144:1:146:1 | getClass | ClassExpr | -| exprs.kt:148:9:148:18 | ...=... | exprs.kt:148:1:150:1 | C | KtInitializerAssignExpr | +| exprs.kt:148:9:148:18 | ...=... | exprs.kt:148:8:148:19 | C | KtInitializerAssignExpr | | exprs.kt:148:9:148:18 | int | file://:0:0:0:0 | | TypeAccess | | exprs.kt:148:9:148:18 | int | file://:0:0:0:0 | | TypeAccess | | exprs.kt:148:9:148:18 | int | file://:0:0:0:0 | | TypeAccess | -| exprs.kt:148:9:148:18 | n | exprs.kt:148:1:150:1 | C | VarAccess | -| exprs.kt:148:9:148:18 | n | exprs.kt:148:1:150:1 | C | VarAccess | +| exprs.kt:148:9:148:18 | n | exprs.kt:148:8:148:19 | C | VarAccess | +| exprs.kt:148:9:148:18 | n | exprs.kt:148:8:148:19 | C | VarAccess | | exprs.kt:148:9:148:18 | this | exprs.kt:148:9:148:18 | getN | ThisAccess | | exprs.kt:148:9:148:18 | this.n | exprs.kt:148:9:148:18 | getN | VarAccess | | exprs.kt:149:5:149:33 | C | file://:0:0:0:0 | | TypeAccess | From f6d6a04ba2db23b3c924b42bb0defedce50d853a Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 14 Feb 2024 17:01:21 +0000 Subject: [PATCH 265/378] Kotlin 2: Accept location changes in library-tests/exprs --- .../ql/test-kotlin2/library-tests/exprs/exprs.expected | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected index a8a48918373..4eab44316e1 100644 --- a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected +++ b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected @@ -1462,17 +1462,17 @@ | exprs.kt:170:9:170:17 | r2.height | exprs.kt:165:1:172:1 | foo | VarAccess | | exprs.kt:170:9:170:21 | ...=... | exprs.kt:165:1:172:1 | foo | AssignExpr | | exprs.kt:170:21:170:21 | 3 | exprs.kt:165:1:172:1 | foo | IntegerLiteral | -| exprs.kt:174:1:176:1 | 0 | exprs.kt:174:6:176:1 | Direction | IntegerLiteral | -| exprs.kt:174:1:176:1 | Direction | exprs.kt:174:6:176:1 | Direction | TypeAccess | +| exprs.kt:174:1:176:1 | 0 | exprs.kt:174:1:176:1 | Direction | IntegerLiteral | +| exprs.kt:174:1:176:1 | Direction | exprs.kt:174:1:176:1 | Direction | TypeAccess | | exprs.kt:174:1:176:1 | Direction | file://:0:0:0:0 | | TypeAccess | | exprs.kt:174:1:176:1 | Direction | file://:0:0:0:0 | | TypeAccess | | exprs.kt:174:1:176:1 | Direction | file://:0:0:0:0 | | TypeAccess | | exprs.kt:174:1:176:1 | Direction[] | file://:0:0:0:0 | | TypeAccess | -| exprs.kt:174:1:176:1 | Enum | exprs.kt:174:6:176:1 | Direction | TypeAccess | +| exprs.kt:174:1:176:1 | Enum | exprs.kt:174:1:176:1 | Direction | TypeAccess | | exprs.kt:174:1:176:1 | EnumEntries | file://:0:0:0:0 | | TypeAccess | | exprs.kt:174:1:176:1 | String | file://:0:0:0:0 | | TypeAccess | -| exprs.kt:174:1:176:1 | new Enum(...) | exprs.kt:174:6:176:1 | Direction | ClassInstanceExpr | -| exprs.kt:174:1:176:1 | null | exprs.kt:174:6:176:1 | Direction | NullLiteral | +| exprs.kt:174:1:176:1 | new Enum(...) | exprs.kt:174:1:176:1 | Direction | ClassInstanceExpr | +| exprs.kt:174:1:176:1 | null | exprs.kt:174:1:176:1 | Direction | NullLiteral | | exprs.kt:175:5:175:10 | ...=... | exprs.kt:0:0:0:0 | | KtInitializerAssignExpr | | exprs.kt:175:5:175:10 | Direction | exprs.kt:0:0:0:0 | | TypeAccess | | exprs.kt:175:5:175:10 | Direction | exprs.kt:0:0:0:0 | | TypeAccess | From 50056d603e1504f6a73e33907fcf91a12f4aa7f7 Mon Sep 17 00:00:00 2001 From: Jonathan Leitschuh Date: Wed, 14 Feb 2024 14:03:33 -0500 Subject: [PATCH 266/378] Fix typo in NettyRequestSplitting.java --- java/ql/src/Security/CWE/CWE-113/NettyRequestSplitting.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/java/ql/src/Security/CWE/CWE-113/NettyRequestSplitting.java b/java/ql/src/Security/CWE/CWE-113/NettyRequestSplitting.java index 64a389e3ea6..342f6f6be17 100644 --- a/java/ql/src/Security/CWE/CWE-113/NettyRequestSplitting.java +++ b/java/ql/src/Security/CWE/CWE-113/NettyRequestSplitting.java @@ -1,11 +1,11 @@ public class NettyRequestSplitting { - // BAD: Disables the internal response splitting verification + // BAD: Disables the internal request splitting verification private final DefaultHttpHeaders badHeaders = new DefaultHttpHeaders(false); // GOOD: Verifies headers passed don't contain CRLF characters private final DefaultHttpHeaders goodHeaders = new DefaultHttpHeaders(); - // BAD: Disables the internal response splitting verification + // BAD: Disables the internal request splitting verification private final DefaultHttpRequest badRequest = new DefaultHttpRequest(httpVersion, method, uri, false); // GOOD: Verifies headers passed don't contain CRLF characters From 09d8a75844a4535573bb2b08142684db933757c7 Mon Sep 17 00:00:00 2001 From: amammad <77095239+amammad@users.noreply.github.com> Date: Wed, 14 Feb 2024 23:31:22 +0400 Subject: [PATCH 267/378] Fix QLDoc issues --- .../experimental/Security/CWE-409/DecompressionBombs.ql | 5 ----- .../semmle/python/security/DecompressionBomb.qll | 7 +++---- .../semmle/python/security/FileAndFormRemoteFlowSource.qll | 7 +++---- 3 files changed, 6 insertions(+), 13 deletions(-) diff --git a/python/ql/src/experimental/Security/CWE-409/DecompressionBombs.ql b/python/ql/src/experimental/Security/CWE-409/DecompressionBombs.ql index ade92eda7d9..9eff061db7b 100644 --- a/python/ql/src/experimental/Security/CWE-409/DecompressionBombs.ql +++ b/python/ql/src/experimental/Security/CWE-409/DecompressionBombs.ql @@ -12,11 +12,6 @@ */ import python -import semmle.python.dataflow.new.DataFlow -import semmle.python.dataflow.new.TaintTracking -import semmle.python.ApiGraphs -import semmle.python.dataflow.new.RemoteFlowSources -import semmle.python.dataflow.new.internal.DataFlowPublic import experimental.semmle.python.security.DecompressionBomb import BombsFlow::PathGraph diff --git a/python/ql/src/experimental/semmle/python/security/DecompressionBomb.qll b/python/ql/src/experimental/semmle/python/security/DecompressionBomb.qll index 0c9f38f4a24..b7821abcaf8 100644 --- a/python/ql/src/experimental/semmle/python/security/DecompressionBomb.qll +++ b/python/ql/src/experimental/semmle/python/security/DecompressionBomb.qll @@ -1,5 +1,4 @@ import python -import semmle.python.dataflow.new.DataFlow import semmle.python.dataflow.new.TaintTracking import semmle.python.ApiGraphs import semmle.python.dataflow.new.RemoteFlowSources @@ -26,7 +25,7 @@ module DecompressionBomb { module ZipFile { /** - * A `zipfile` Instance + * Gets `zipfile` Instance * * ```python * zipfile.ZipFile() @@ -129,7 +128,7 @@ module TarFile { } /** - * A tarfile instance for extracting compressed data + * Gets tarfile instance for extracting compressed data */ API::Node tarfileExtractMember() { result = @@ -374,7 +373,7 @@ module BombsConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource or - source instanceof FastAPI + source instanceof FastApi } predicate isSink(DataFlow::Node sink) { sink instanceof DecompressionBomb::Sink } diff --git a/python/ql/src/experimental/semmle/python/security/FileAndFormRemoteFlowSource.qll b/python/ql/src/experimental/semmle/python/security/FileAndFormRemoteFlowSource.qll index 352d44dc480..30f2b7aec5d 100644 --- a/python/ql/src/experimental/semmle/python/security/FileAndFormRemoteFlowSource.qll +++ b/python/ql/src/experimental/semmle/python/security/FileAndFormRemoteFlowSource.qll @@ -1,5 +1,4 @@ import python -import semmle.python.dataflow.new.DataFlow import semmle.python.dataflow.new.TaintTracking import semmle.python.ApiGraphs @@ -8,10 +7,10 @@ import semmle.python.ApiGraphs */ module FileAndFormRemoteFlowSource { /** - * A + * A FastAPI Remote Flow Source for requests with multipart data in the body or requests with single file in the body */ - class FastAPI extends DataFlow::Node { - FastAPI() { + class FastApi extends DataFlow::Node { + FastApi() { exists(API::Node fastApiParam, Expr fastApiUploadFile | fastApiParam = API::moduleImport("fastapi") From e468f4062f897c4df07e3cb2af3f8d07bd9784d1 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Mon, 12 Feb 2024 16:50:16 -0500 Subject: [PATCH 268/378] use `github/codeql-action...@main` --- .github/workflows/ql-for-ql-build.yml | 4 ++-- .github/workflows/ql-for-ql-dataset_measure.yml | 2 +- .github/workflows/ql-for-ql-tests.yml | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ql-for-ql-build.yml b/.github/workflows/ql-for-ql-build.yml index c5d237fc0d3..b641bd5d8c5 100644 --- a/.github/workflows/ql-for-ql-build.yml +++ b/.github/workflows/ql-for-ql-build.yml @@ -20,7 +20,7 @@ jobs: fetch-depth: 0 - name: Find codeql id: find-codeql - uses: github/codeql-action/init@v2 + uses: github/codeql-action/init@main with: languages: javascript # does not matter - uses: ./.github/actions/os-version @@ -66,7 +66,7 @@ jobs: exclude:*/ql/lib/upgrades/ exclude:java/ql/integration-tests - name: Upload sarif to code-scanning - uses: github/codeql-action/upload-sarif@v2 + uses: github/codeql-action/upload-sarif@main with: sarif_file: ql-for-ql.sarif category: ql-for-ql diff --git a/.github/workflows/ql-for-ql-dataset_measure.yml b/.github/workflows/ql-for-ql-dataset_measure.yml index d317d467c9a..a26811640f7 100644 --- a/.github/workflows/ql-for-ql-dataset_measure.yml +++ b/.github/workflows/ql-for-ql-dataset_measure.yml @@ -25,7 +25,7 @@ jobs: - name: Find codeql id: find-codeql - uses: github/codeql-action/init@v2 + uses: github/codeql-action/init@main with: languages: javascript # does not matter - uses: ./.github/actions/os-version diff --git a/.github/workflows/ql-for-ql-tests.yml b/.github/workflows/ql-for-ql-tests.yml index 4385e3f76bb..4e0198511d2 100644 --- a/.github/workflows/ql-for-ql-tests.yml +++ b/.github/workflows/ql-for-ql-tests.yml @@ -24,7 +24,7 @@ jobs: - uses: actions/checkout@v4 - name: Find codeql id: find-codeql - uses: github/codeql-action/init@v2 + uses: github/codeql-action/init@main with: languages: javascript # does not matter - uses: ./.github/actions/os-version @@ -69,7 +69,7 @@ jobs: echo "/usr/local/opt/gnu-tar/libexec/gnubin" >> $GITHUB_PATH - name: Find codeql id: find-codeql - uses: github/codeql-action/init@v2 + uses: github/codeql-action/init@main with: languages: javascript # does not matter - uses: ./.github/actions/os-version From b58c856756bd398ad5c548a38b72cc22574f5660 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Wed, 31 Jan 2024 03:31:54 -0500 Subject: [PATCH 269/378] Declare permissions Repositories can be configured with Default access (restricted) https://docs.github.com/en/actions/security-guides/automatic-token-authentication#permissions-for-the-github_token Best practice says that workflows should declare the minimal permissions they require. Without declaring permissions, paranoid forks fail miserably. --- .github/workflows/check-change-note.yml | 3 +++ .github/workflows/check-implicit-this.yml | 3 +++ .github/workflows/check-qldoc.yml | 3 +++ .github/workflows/check-query-ids.yml | 3 +++ .github/workflows/close-stale.yml | 3 +++ .github/workflows/compile-queries.yml | 3 +++ .github/workflows/csharp-qltest.yml | 3 +++ .github/workflows/csv-coverage-metrics.yml | 4 ++++ .github/workflows/csv-coverage-pr-artifacts.yml | 4 ++++ .github/workflows/csv-coverage-pr-comment.yml | 4 ++++ .github/workflows/csv-coverage-timeseries.yml | 3 +++ .github/workflows/csv-coverage-update.yml | 4 ++++ .github/workflows/csv-coverage.yml | 3 +++ .github/workflows/fast-forward.yml | 5 +++-- .github/workflows/go-tests-other-os.yml | 4 ++++ .github/workflows/go-tests.yml | 5 +++++ .github/workflows/labeler.yml | 7 ++++--- .github/workflows/mad_regenerate-models.yml | 3 +++ .github/workflows/ql-for-ql-build.yml | 4 ++++ .github/workflows/ql-for-ql-dataset_measure.yml | 4 ++++ .github/workflows/ql-for-ql-tests.yml | 3 +++ .github/workflows/query-list.yml | 3 +++ .github/workflows/ruby-build.yml | 3 +++ .github/workflows/ruby-dataset-measure.yml | 3 +++ .github/workflows/ruby-qltest.yml | 3 +++ .github/workflows/swift.yml | 3 +++ .github/workflows/sync-files.yml | 3 +++ .github/workflows/tree-sitter-extractor-test.yml | 3 +++ .github/workflows/validate-change-notes.yml | 3 +++ 29 files changed, 97 insertions(+), 5 deletions(-) diff --git a/.github/workflows/check-change-note.yml b/.github/workflows/check-change-note.yml index e701090420d..026408a028d 100644 --- a/.github/workflows/check-change-note.yml +++ b/.github/workflows/check-change-note.yml @@ -1,5 +1,8 @@ name: Check change note +permissions: + pull-requests: read + on: pull_request_target: types: [labeled, unlabeled, opened, synchronize, reopened, ready_for_review] diff --git a/.github/workflows/check-implicit-this.yml b/.github/workflows/check-implicit-this.yml index 14100ed3325..f58db399ccb 100644 --- a/.github/workflows/check-implicit-this.yml +++ b/.github/workflows/check-implicit-this.yml @@ -9,6 +9,9 @@ on: - main - "rc/*" +permissions: + contents: read + jobs: check: runs-on: ubuntu-latest diff --git a/.github/workflows/check-qldoc.yml b/.github/workflows/check-qldoc.yml index 7996123e9bf..e64d661c791 100644 --- a/.github/workflows/check-qldoc.yml +++ b/.github/workflows/check-qldoc.yml @@ -10,6 +10,9 @@ on: - main - "rc/*" +permissions: + contents: read + jobs: qldoc: runs-on: ubuntu-latest diff --git a/.github/workflows/check-query-ids.yml b/.github/workflows/check-query-ids.yml index 9e84fe0b0e3..8ae19cc3e5f 100644 --- a/.github/workflows/check-query-ids.yml +++ b/.github/workflows/check-query-ids.yml @@ -11,6 +11,9 @@ on: - "rc/*" workflow_dispatch: +permissions: + contents: read + jobs: check: name: Check query IDs diff --git a/.github/workflows/close-stale.yml b/.github/workflows/close-stale.yml index a9e0d276308..1c74ede8bf6 100644 --- a/.github/workflows/close-stale.yml +++ b/.github/workflows/close-stale.yml @@ -5,6 +5,9 @@ on: schedule: - cron: "30 1 * * *" +permissions: + issues: write + jobs: stale: if: github.repository == 'github/codeql' diff --git a/.github/workflows/compile-queries.yml b/.github/workflows/compile-queries.yml index bc8a9f8666d..7176c6c1a50 100644 --- a/.github/workflows/compile-queries.yml +++ b/.github/workflows/compile-queries.yml @@ -8,6 +8,9 @@ on: - "codeql-cli-*" pull_request: +permissions: + contents: read + jobs: compile-queries: if: github.repository_owner == 'github' diff --git a/.github/workflows/csharp-qltest.yml b/.github/workflows/csharp-qltest.yml index cc9520de0e2..557354e96de 100644 --- a/.github/workflows/csharp-qltest.yml +++ b/.github/workflows/csharp-qltest.yml @@ -25,6 +25,9 @@ defaults: run: working-directory: csharp +permissions: + contents: read + jobs: qlupgrade: runs-on: ubuntu-latest diff --git a/.github/workflows/csv-coverage-metrics.yml b/.github/workflows/csv-coverage-metrics.yml index e24c6bc74a4..6f1170047bf 100644 --- a/.github/workflows/csv-coverage-metrics.yml +++ b/.github/workflows/csv-coverage-metrics.yml @@ -14,6 +14,10 @@ on: - ".github/workflows/csv-coverage-metrics.yml" - ".github/actions/fetch-codeql/action.yml" +permissions: + contents: read + security-events: write + jobs: publish-java: runs-on: ubuntu-latest diff --git a/.github/workflows/csv-coverage-pr-artifacts.yml b/.github/workflows/csv-coverage-pr-artifacts.yml index 8e2df456260..b5baa70321d 100644 --- a/.github/workflows/csv-coverage-pr-artifacts.yml +++ b/.github/workflows/csv-coverage-pr-artifacts.yml @@ -19,6 +19,10 @@ on: - main - "rc/*" +permissions: + contents: read + pull-requests: read + jobs: generate: name: Generate framework coverage artifacts diff --git a/.github/workflows/csv-coverage-pr-comment.yml b/.github/workflows/csv-coverage-pr-comment.yml index 86fe74d3419..cf01ef063ac 100644 --- a/.github/workflows/csv-coverage-pr-comment.yml +++ b/.github/workflows/csv-coverage-pr-comment.yml @@ -6,6 +6,10 @@ on: types: - completed +permissions: + contents: read + pull-requests: write + jobs: check: name: Check framework coverage differences and comment diff --git a/.github/workflows/csv-coverage-timeseries.yml b/.github/workflows/csv-coverage-timeseries.yml index cf2758dd9d3..f2e1ed47a3d 100644 --- a/.github/workflows/csv-coverage-timeseries.yml +++ b/.github/workflows/csv-coverage-timeseries.yml @@ -3,6 +3,9 @@ name: Build framework coverage timeseries reports on: workflow_dispatch: +permissions: + contents: read + jobs: build: runs-on: ubuntu-latest diff --git a/.github/workflows/csv-coverage-update.yml b/.github/workflows/csv-coverage-update.yml index ccf1ffd4705..4902bee7a4f 100644 --- a/.github/workflows/csv-coverage-update.yml +++ b/.github/workflows/csv-coverage-update.yml @@ -5,6 +5,10 @@ on: schedule: - cron: "0 0 * * *" +permissions: + contents: read + pull-requests: write + jobs: update: name: Update framework coverage report diff --git a/.github/workflows/csv-coverage.yml b/.github/workflows/csv-coverage.yml index 4fb1d143fc3..9461ba887f5 100644 --- a/.github/workflows/csv-coverage.yml +++ b/.github/workflows/csv-coverage.yml @@ -7,6 +7,9 @@ on: description: "github/codeql repo SHA used for looking up the CSV models" required: false +permissions: + contents: read + jobs: build: runs-on: ubuntu-latest diff --git a/.github/workflows/fast-forward.yml b/.github/workflows/fast-forward.yml index c89675efc4e..dd8fefbc529 100644 --- a/.github/workflows/fast-forward.yml +++ b/.github/workflows/fast-forward.yml @@ -7,13 +7,14 @@ name: Fast-forward tracking branch for selected CodeQL version on: workflow_dispatch: +permissions: + contents: write + jobs: fast-forward: name: Fast-forward tracking branch for selected CodeQL version runs-on: ubuntu-latest if: github.repository == 'github/codeql' - permissions: - contents: write env: BRANCH_NAME: 'lgtm.com' steps: diff --git a/.github/workflows/go-tests-other-os.yml b/.github/workflows/go-tests-other-os.yml index 9c489d38600..10ee9e8d13c 100644 --- a/.github/workflows/go-tests-other-os.yml +++ b/.github/workflows/go-tests-other-os.yml @@ -9,6 +9,10 @@ on: - codeql-workspace.yml env: GO_VERSION: '~1.21.0' + +permissions: + contents: read + jobs: test-mac: name: Test MacOS diff --git a/.github/workflows/go-tests.yml b/.github/workflows/go-tests.yml index 9a6b2bde7d7..5c67fae3a5c 100644 --- a/.github/workflows/go-tests.yml +++ b/.github/workflows/go-tests.yml @@ -15,8 +15,13 @@ on: - .github/workflows/go-tests.yml - .github/actions/** - codeql-workspace.yml + env: GO_VERSION: '~1.21.0' + +permissions: + contents: read + jobs: test-linux: if: github.repository_owner == 'github' diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml index 057208eda32..512fa40d2e3 100644 --- a/.github/workflows/labeler.yml +++ b/.github/workflows/labeler.yml @@ -2,11 +2,12 @@ name: "Pull Request Labeler" on: - pull_request_target +permissions: + contents: read + pull-requests: write + jobs: triage: - permissions: - contents: read - pull-requests: write runs-on: ubuntu-latest steps: - uses: actions/labeler@v4 diff --git a/.github/workflows/mad_regenerate-models.yml b/.github/workflows/mad_regenerate-models.yml index 3268a17dfbb..1c7d14238f3 100644 --- a/.github/workflows/mad_regenerate-models.yml +++ b/.github/workflows/mad_regenerate-models.yml @@ -11,6 +11,9 @@ on: - ".github/workflows/mad_regenerate-models.yml" - ".github/actions/fetch-codeql/action.yml" +permissions: + contents: read + jobs: regenerate-models: runs-on: ubuntu-latest diff --git a/.github/workflows/ql-for-ql-build.yml b/.github/workflows/ql-for-ql-build.yml index b641bd5d8c5..8a4b882f30a 100644 --- a/.github/workflows/ql-for-ql-build.yml +++ b/.github/workflows/ql-for-ql-build.yml @@ -9,6 +9,10 @@ on: env: CARGO_TERM_COLOR: always +permissions: + contents: read + security-events: read + jobs: analyze: if: github.repository_owner == 'github' diff --git a/.github/workflows/ql-for-ql-dataset_measure.yml b/.github/workflows/ql-for-ql-dataset_measure.yml index a26811640f7..4f9887c4edc 100644 --- a/.github/workflows/ql-for-ql-dataset_measure.yml +++ b/.github/workflows/ql-for-ql-dataset_measure.yml @@ -11,6 +11,10 @@ on: - ql/ql/src/ql.dbscheme workflow_dispatch: +permissions: + contents: read + security-events: read + jobs: measure: env: diff --git a/.github/workflows/ql-for-ql-tests.yml b/.github/workflows/ql-for-ql-tests.yml index 4e0198511d2..578c26c2977 100644 --- a/.github/workflows/ql-for-ql-tests.yml +++ b/.github/workflows/ql-for-ql-tests.yml @@ -17,6 +17,9 @@ on: env: CARGO_TERM_COLOR: always +permissions: + contents: read + jobs: qltest: runs-on: ubuntu-latest diff --git a/.github/workflows/query-list.yml b/.github/workflows/query-list.yml index 07fb3b682da..233cc8120f5 100644 --- a/.github/workflows/query-list.yml +++ b/.github/workflows/query-list.yml @@ -13,6 +13,9 @@ on: - '.github/actions/fetch-codeql/action.yml' - 'misc/scripts/generate-code-scanning-query-list.py' +permissions: + contents: read + jobs: build: diff --git a/.github/workflows/ruby-build.yml b/.github/workflows/ruby-build.yml index 61734647069..fda4045cd44 100644 --- a/.github/workflows/ruby-build.yml +++ b/.github/workflows/ruby-build.yml @@ -32,6 +32,9 @@ defaults: run: working-directory: ruby +permissions: + contents: read + jobs: build: strategy: diff --git a/.github/workflows/ruby-dataset-measure.yml b/.github/workflows/ruby-dataset-measure.yml index c064d8d2bfb..dd15a0aa63e 100644 --- a/.github/workflows/ruby-dataset-measure.yml +++ b/.github/workflows/ruby-dataset-measure.yml @@ -17,6 +17,9 @@ on: - .github/workflows/ruby-dataset-measure.yml workflow_dispatch: +permissions: + contents: read + jobs: measure: env: diff --git a/.github/workflows/ruby-qltest.yml b/.github/workflows/ruby-qltest.yml index fbac0488b51..9dc86bbce20 100644 --- a/.github/workflows/ruby-qltest.yml +++ b/.github/workflows/ruby-qltest.yml @@ -29,6 +29,9 @@ defaults: run: working-directory: ruby +permissions: + contents: read + jobs: qlupgrade: runs-on: ubuntu-latest diff --git a/.github/workflows/swift.yml b/.github/workflows/swift.yml index a461fbfdf8c..6956d31a398 100644 --- a/.github/workflows/swift.yml +++ b/.github/workflows/swift.yml @@ -33,6 +33,9 @@ on: - rc/* - codeql-cli-* +permissions: + contents: read + jobs: # not using a matrix as you cannot depend on a specific job in a matrix, and we want to start linux checks # without waiting for the macOS build diff --git a/.github/workflows/sync-files.yml b/.github/workflows/sync-files.yml index 7894eae7f55..1ed49ac3ecf 100644 --- a/.github/workflows/sync-files.yml +++ b/.github/workflows/sync-files.yml @@ -10,6 +10,9 @@ on: - main - 'rc/*' +permissions: + contents: read + jobs: sync: runs-on: ubuntu-latest diff --git a/.github/workflows/tree-sitter-extractor-test.yml b/.github/workflows/tree-sitter-extractor-test.yml index 5d13b25466d..acc68e7ec2c 100644 --- a/.github/workflows/tree-sitter-extractor-test.yml +++ b/.github/workflows/tree-sitter-extractor-test.yml @@ -23,6 +23,9 @@ defaults: run: working-directory: shared/tree-sitter-extractor +permissions: + contents: read + jobs: test: runs-on: ubuntu-latest diff --git a/.github/workflows/validate-change-notes.yml b/.github/workflows/validate-change-notes.yml index f8c1d9f6504..3c83ffa709a 100644 --- a/.github/workflows/validate-change-notes.yml +++ b/.github/workflows/validate-change-notes.yml @@ -15,6 +15,9 @@ on: - ".github/workflows/validate-change-notes.yml" - ".github/actions/fetch-codeql/action.yml" +permissions: + contents: read + jobs: check-change-note: runs-on: ubuntu-latest From 37eb81097fa35ec74a081933e049ff441942cde4 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Wed, 14 Feb 2024 22:42:03 +0000 Subject: [PATCH 270/378] Add additional sinks for connection methods --- ruby/ql/lib/codeql/ruby/frameworks/ActiveRecord.qll | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/ruby/ql/lib/codeql/ruby/frameworks/ActiveRecord.qll b/ruby/ql/lib/codeql/ruby/frameworks/ActiveRecord.qll index 4596c432070..b0462170a9a 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/ActiveRecord.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/ActiveRecord.qll @@ -200,7 +200,13 @@ private predicate sqlFragmentArgumentInner(DataFlow::CallNode call, DataFlow::No call = activeRecordQueryBuilderCall("annotate") and sink = call.getArgument(_) or - call = activeRecordConnectionInstance().getAMethodCall("execute") and + call = + activeRecordConnectionInstance() + .getAMethodCall([ + "delete", "exec_query", "exec_delete", "exec_insert", "exec_update", "execute", + "insert", "select_all", "select_one", "select_rows", "select_value", "select_values", + "select_update", "update" + ]) and sink = call.getArgument(0) or call = activeRecordQueryBuilderCall("update_all") and From 2f1472fa48a06f54bbb97466179ed9ad93821cb2 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Thu, 15 Feb 2024 08:52:34 +0100 Subject: [PATCH 271/378] Code quality improvements (fixed log message, removed unused interface) --- .../DependencyManager.cs | 2 +- .../IProgressMonitor.cs | 9 --------- 2 files changed, 1 insertion(+), 10 deletions(-) delete mode 100644 csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/IProgressMonitor.cs diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs index 01c3a022432..e24eb762aa7 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs @@ -417,7 +417,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching var allPackageDirectories = GetAllPackageDirectories(); logger.LogInfo($"Restored {allPackageDirectories.Count} packages"); - logger.LogInfo($"Found {dependencies.Packages.Count} packages in project.asset.json files"); + logger.LogInfo($"Found {dependencies.Packages.Count} packages in project.assets.json files"); allPackageDirectories .Where(package => !dependencies.Packages.Contains(package)) diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/IProgressMonitor.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/IProgressMonitor.cs deleted file mode 100644 index e5ce6ffb862..00000000000 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/IProgressMonitor.cs +++ /dev/null @@ -1,9 +0,0 @@ -using Semmle.Util.Logging; - -namespace Semmle.Extraction.CSharp.DependencyFetching -{ - public interface IProgressMonitor - { - void Log(Severity severity, string message); - } -} From 90a9d82b9d9f118c03a3df1a4c683ec1c1ef0946 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Thu, 15 Feb 2024 09:54:29 +0100 Subject: [PATCH 272/378] Java: Expand ExactPathSanitizer to work on the argument of 'equals' too --- java/ql/lib/semmle/code/java/security/PathSanitizer.qll | 2 +- .../src/change-notes/2024-02-15-path-sanitizer-equals.md | 4 ++++ java/ql/test/library-tests/pathsanitizer/Test.java | 7 +++++++ java/ql/test/library-tests/pathsanitizer/TestKt.kt | 7 +++++++ 4 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 java/ql/src/change-notes/2024-02-15-path-sanitizer-equals.md diff --git a/java/ql/lib/semmle/code/java/security/PathSanitizer.qll b/java/ql/lib/semmle/code/java/security/PathSanitizer.qll index 997a9335168..4ca08f5becc 100644 --- a/java/ql/lib/semmle/code/java/security/PathSanitizer.qll +++ b/java/ql/lib/semmle/code/java/security/PathSanitizer.qll @@ -56,7 +56,7 @@ private predicate exactPathMatchGuard(Guard g, Expr e, boolean branch) { t instanceof StringsKt or t instanceof FilesKt | - e = getVisualQualifier(ma).getUnderlyingExpr() and + e = [getVisualQualifier(ma).getUnderlyingExpr(), getVisualArgument(ma, 0)] and ma.getMethod().getDeclaringType() = t and ma = g and getSourceMethod(ma.getMethod()).hasName(["equals", "equalsIgnoreCase"]) and diff --git a/java/ql/src/change-notes/2024-02-15-path-sanitizer-equals.md b/java/ql/src/change-notes/2024-02-15-path-sanitizer-equals.md new file mode 100644 index 00000000000..3f7fa840fe1 --- /dev/null +++ b/java/ql/src/change-notes/2024-02-15-path-sanitizer-equals.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* The sanitizer for the path injection queries has been improved to handle more cases where `equals` is used to check an exact path match. diff --git a/java/ql/test/library-tests/pathsanitizer/Test.java b/java/ql/test/library-tests/pathsanitizer/Test.java index 61e0f498bd8..718d31dcda6 100644 --- a/java/ql/test/library-tests/pathsanitizer/Test.java +++ b/java/ql/test/library-tests/pathsanitizer/Test.java @@ -25,6 +25,13 @@ public class Test { else sink(source); // $ hasTaintFlow } + { + String source = (String) source(); + if ("/safe/path".equals(source)) + sink(source); // Safe + else + sink(source); // $ hasTaintFlow + } { URI source = (URI) source(); if (source.equals(new URI("http://safe/uri"))) diff --git a/java/ql/test/library-tests/pathsanitizer/TestKt.kt b/java/ql/test/library-tests/pathsanitizer/TestKt.kt index d0a11dac0ee..d26f14ccd60 100644 --- a/java/ql/test/library-tests/pathsanitizer/TestKt.kt +++ b/java/ql/test/library-tests/pathsanitizer/TestKt.kt @@ -25,6 +25,13 @@ class TestKt { else sink(source) // $ hasTaintFlow } + run { + val source = source() as String? + if ("/safe/path".equals(source)) + sink(source) // Safe + else + sink(source) // $ hasTaintFlow + } run { val source = source() as URI? if (source!!.equals(URI("http://safe/uri"))) From a5eb2dd906986f01fb38e644a1f7bcef53569945 Mon Sep 17 00:00:00 2001 From: erik-krogh Date: Thu, 15 Feb 2024 12:41:01 +0100 Subject: [PATCH 273/378] update the QHelp for `cs/web/unvalidated-url-redirection` with examples inspired by the JS QHelp --- .../Security Features/CWE-601/UrlRedirect.cs | 19 ---------- .../CWE-601/UrlRedirect.qhelp | 37 ++++++++++++++++--- .../CWE-601/examples/UrlRedirect.cs | 11 ++++++ .../CWE-601/examples/UrlRedirectGood.cs | 17 +++++++++ .../CWE-601/examples/UrlRedirectGoodDomain.cs | 22 +++++++++++ 5 files changed, 81 insertions(+), 25 deletions(-) delete mode 100644 csharp/ql/src/Security Features/CWE-601/UrlRedirect.cs create mode 100644 csharp/ql/src/Security Features/CWE-601/examples/UrlRedirect.cs create mode 100644 csharp/ql/src/Security Features/CWE-601/examples/UrlRedirectGood.cs create mode 100644 csharp/ql/src/Security Features/CWE-601/examples/UrlRedirectGoodDomain.cs diff --git a/csharp/ql/src/Security Features/CWE-601/UrlRedirect.cs b/csharp/ql/src/Security Features/CWE-601/UrlRedirect.cs deleted file mode 100644 index af8ea579fef..00000000000 --- a/csharp/ql/src/Security Features/CWE-601/UrlRedirect.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System; -using System.Web; - -public class UnvalidatedUrlHandler : IHttpHandler -{ - private const String VALID_REDIRECT = "http://cwe.mitre.org/data/definitions/601.html"; - - public void ProcessRequest(HttpContext ctx) - { - // BAD: a request parameter is incorporated without validation into a URL redirect - ctx.Response.Redirect(ctx.Request.QueryString["page"]); - - // GOOD: the request parameter is validated against a known fixed string - if (VALID_REDIRECT == ctx.Request.QueryString["page"]) - { - ctx.Response.Redirect(VALID_REDIRECT); - } - } -} diff --git a/csharp/ql/src/Security Features/CWE-601/UrlRedirect.qhelp b/csharp/ql/src/Security Features/CWE-601/UrlRedirect.qhelp index 3cf3cdaba6e..c9a1b692b81 100644 --- a/csharp/ql/src/Security Features/CWE-601/UrlRedirect.qhelp +++ b/csharp/ql/src/Security Features/CWE-601/UrlRedirect.qhelp @@ -16,18 +16,43 @@ controlled by the attacker.

    To guard against untrusted URL redirection, it is advisable to avoid putting user input directly into a redirect URL. Instead, maintain a list of authorized redirects on the server; then choose from that list based on the user input provided.

    - +

    +If this is not possible, then the user input should be validated in some other way, +for example, by verifying that the target URL is on the same host as the current page. +

    - -

    The following example shows an HTTP request parameter being used directly in a URL redirect -without validating the input, which facilitates phishing attacks. -It also shows how to remedy the problem by validating the user input against a known fixed string. + + +

    +The following example shows an HTTP request parameter being used directly in a URL redirect +without validating the input, which facilitates phishing attacks:

    - + + +

    +One way to remedy the problem is to validate the user input against a known fixed string +before doing the redirection: +

    + + + +

    +Alternatively, we can check that the target URL does not redirect to a different host +by checking that the URL is either relative or on a known good host: +

    + + + +

    +Note that as written, the above code will allow redirects to URLs on example.com, +which is harmless but perhaps not intended. You can substitute your own domain (if known) for +example.com to prevent this. +

    +
  • diff --git a/csharp/ql/src/Security Features/CWE-601/examples/UrlRedirect.cs b/csharp/ql/src/Security Features/CWE-601/examples/UrlRedirect.cs new file mode 100644 index 00000000000..1190f0b6590 --- /dev/null +++ b/csharp/ql/src/Security Features/CWE-601/examples/UrlRedirect.cs @@ -0,0 +1,11 @@ +using System; +using System.Web; + +public class UnvalidatedUrlHandler : IHttpHandler +{ + public void ProcessRequest(HttpContext ctx) + { + // BAD: a request parameter is incorporated without validation into a URL redirect + ctx.Response.Redirect(ctx.Request.QueryString["page"]); + } +} diff --git a/csharp/ql/src/Security Features/CWE-601/examples/UrlRedirectGood.cs b/csharp/ql/src/Security Features/CWE-601/examples/UrlRedirectGood.cs new file mode 100644 index 00000000000..2c3d4622dba --- /dev/null +++ b/csharp/ql/src/Security Features/CWE-601/examples/UrlRedirectGood.cs @@ -0,0 +1,17 @@ +using System; +using System.Web; +using System.Collections.Generic; + +public class UnvalidatedUrlHandler : IHttpHandler +{ + private List VALID_REDIRECTS = new List{ "http://cwe.mitre.org/data/definitions/601.html", "http://cwe.mitre.org/data/definitions/79.html" }; + + public void ProcessRequest(HttpContext ctx) + { + if (VALID_REDIRECTS.Contains(ctx.Request.QueryString["page"])) + { + // GOOD: the request parameter is validated against a known list of strings + ctx.Response.Redirect(ctx.Request.QueryString["page"]); + } + } +} \ No newline at end of file diff --git a/csharp/ql/src/Security Features/CWE-601/examples/UrlRedirectGoodDomain.cs b/csharp/ql/src/Security Features/CWE-601/examples/UrlRedirectGoodDomain.cs new file mode 100644 index 00000000000..77818f2acc2 --- /dev/null +++ b/csharp/ql/src/Security Features/CWE-601/examples/UrlRedirectGoodDomain.cs @@ -0,0 +1,22 @@ +using System; +using System.Web; + +public class UnvalidatedUrlHandler : IHttpHandler +{ + public void ProcessRequest(HttpContext ctx) + { + var urlString = ctx.Request.QueryString["page"]; + var url = new Uri(urlString, UriKind.RelativeOrAbsolute); + + var url = new Uri(redirectUrl, UriKind.RelativeOrAbsolute); + if (!url.IsAbsoluteUri) { + // GOOD: The redirect is to a relative URL + ctx.Response.Redirect(url.ToString()); + } + + if (url.Host == "example.org") { + // GOOD: The redirect is to a known host + ctx.Response.Redirect(url.ToString()); + } + } +} \ No newline at end of file From 6cb4773188831efd36402696227f0c9849166709 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Thu, 15 Feb 2024 12:19:49 +0000 Subject: [PATCH 274/378] Add new libraries we cover to frameworks.csv --- go/documentation/library-coverage/frameworks.csv | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/go/documentation/library-coverage/frameworks.csv b/go/documentation/library-coverage/frameworks.csv index 8e5dff8e86e..b2c1db6e081 100644 --- a/go/documentation/library-coverage/frameworks.csv +++ b/go/documentation/library-coverage/frameworks.csv @@ -3,15 +3,23 @@ Standard library,https://pkg.go.dev/std, archive/* bufio bytes cmp compress/* co beego,https://beego.me/,github.com/astaxie/beego* github.com/beego/beego* Couchbase official client(gocb),https://github.com/couchbase/gocb,github.com/couchbase/gocb* gopkg.in/couchbase/gocb* Couchbase unofficial client,http://www.github.com/couchbase/go-couchbase,github.com/couchbaselabs/gocb* +cristalhq/jwt,https://github.com/cristalhq/jwt,github.com/cristalhq/jwt* Echo,https://echo.labstack.com/,github.com/labstack/echo* fasthttp,https://github.com/valyala/fasthttp,github.com/valyala/fasthttp* +Fosite,https://github.com/ory/fosite,github.com/ory/fosite* Gin,https://github.com/gin-gonic/gin,github.com/gin-gonic/gin* +Go kit,https://gokit.io/,github.com/go-kit/kit* go-pg,https://pg.uptrace.dev/,github.com/go-pg/pg* golang.org/x/net,https://pkg.go.dev/golang.org/x/net,golang.org/x/net* goproxy,https://github.com/elazarl/goproxy,github.com/elazarl/goproxy* +Iris,https://www.iris-go.com/,github.com/kataras/iris* json-iterator,https://github.com/json-iterator/go,github.com/json-iterator/go* jsonpatch,https://github.com/evanphx/json-patch,github.com/evanphx/json-patch* +jwt-go,https://golang-jwt.github.io/jwt/,github.com/golang-jwt/jwt* github.com/form3tech-oss/jwt-go* github.com/dgrijalva/jwt-go* +jwtauth,https://github.com/go-chi/jwtauth,github.com/go-chi/jwtauth* +kataras/jwt,https://github.com/kataras/jwt,github.com/kataras/jwt* Kubernetes,https://kubernetes.io/,k8s.io/api* k8s.io/apimachinery* +lestrrat-go/jwx,https://github.com/lestrrat-go/jwx,github.com/lestrrat-go/jwx* github.com/lestrrat/go-jwx* Macaron,https://gopkg.in/macaron.v1,gopkg.in/macaron* protobuf,https://pkg.go.dev/google.golang.org/protobuf,github.com/golang/protobuf* google.golang.org/protobuf* Revel,http://revel.github.io/,github.com/revel/revel* github.com/robfig/revel* From 532e8dac45c1d6c7b35dacb9b70933e4d3fcb5eb Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Thu, 15 Feb 2024 13:44:18 +0100 Subject: [PATCH 275/378] C++: Don't strip specifiers in 'TFinalParameterUse'. --- .../code/cpp/ir/dataflow/internal/SsaInternals.qll | 12 +++++++----- .../cpp/ir/dataflow/internal/SsaInternalsCommon.qll | 2 +- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternals.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternals.qll index bd63da2ab98..8a5e8d20319 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternals.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternals.qll @@ -142,7 +142,7 @@ private newtype TDefOrUseImpl = exists(SsaInternals0::Def def | def.getSourceVariable().getBaseVariable().(BaseIRVariable).getIRVariable().getAst() = p and not def.getValue().asInstruction() instanceof InitializeParameterInstruction and - unspecifiedTypeIsModifiableAt(p.getUnspecifiedType(), indirectionIndex) + underlyingTypeIsModifiableAt(p.getUnderlyingType(), indirectionIndex) ) } @@ -172,11 +172,13 @@ private predicate isGlobalDefImpl( ) } -private predicate unspecifiedTypeIsModifiableAt(Type unspecified, int indirectionIndex) { - indirectionIndex = [1 .. getIndirectionForUnspecifiedType(unspecified).getNumberOfIndirections()] and +private predicate underlyingTypeIsModifiableAt(Type underlying, int indirectionIndex) { + indirectionIndex = + [1 .. getIndirectionForUnspecifiedType(underlying.getUnspecifiedType()) + .getNumberOfIndirections()] and exists(CppType cppType | - cppType.hasUnspecifiedType(unspecified, _) and - isModifiableAt(cppType, indirectionIndex + 1) + cppType.hasUnderlyingType(underlying, false) and + isModifiableAt(cppType, indirectionIndex) ) } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternalsCommon.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternalsCommon.qll index e349367fed4..862070820f8 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternalsCommon.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternalsCommon.qll @@ -452,7 +452,7 @@ private module IsModifiableAtImpl { private predicate impl(CppType cppType, int indirectionIndex) { exists(Type pointerType, Type base | isUnderlyingIndirectionType(pointerType) and - cppType.hasUnderlyingType(pointerType, _) and + cppType.hasUnderlyingType(pointerType, false) and base = getTypeImpl(pointerType, indirectionIndex) | // The value cannot be modified if it has a const specifier, From e36b9f4d3c9a5eb95ef5c93702e9758de2de0a47 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Thu, 15 Feb 2024 13:46:25 +0000 Subject: [PATCH 276/378] Add tests and change note --- ...02-15-activerecord_connection_sql_sinks.md | 4 + .../active_record/ActiveRecord.expected | 256 ++++++++++-------- .../frameworks/active_record/ActiveRecord.rb | 13 + 3 files changed, 158 insertions(+), 115 deletions(-) create mode 100644 ruby/ql/lib/change-notes/2024-02-15-activerecord_connection_sql_sinks.md diff --git a/ruby/ql/lib/change-notes/2024-02-15-activerecord_connection_sql_sinks.md b/ruby/ql/lib/change-notes/2024-02-15-activerecord_connection_sql_sinks.md new file mode 100644 index 00000000000..c2276f284a8 --- /dev/null +++ b/ruby/ql/lib/change-notes/2024-02-15-activerecord_connection_sql_sinks.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Calls to several methods of `ActiveRecord::Connection`, such as `ActiveRecord::Connection#exec_query`, are now recognized as SQL executions, including those via subclasses. \ No newline at end of file diff --git a/ruby/ql/test/library-tests/frameworks/active_record/ActiveRecord.expected b/ruby/ql/test/library-tests/frameworks/active_record/ActiveRecord.expected index b273bddbee6..f4fc841112c 100644 --- a/ruby/ql/test/library-tests/frameworks/active_record/ActiveRecord.expected +++ b/ruby/ql/test/library-tests/frameworks/active_record/ActiveRecord.expected @@ -1,7 +1,7 @@ activeRecordModelClasses | ActiveRecord.rb:1:1:3:3 | UserGroup | -| ActiveRecord.rb:5:1:19:3 | User | -| ActiveRecord.rb:21:1:25:3 | Admin | +| ActiveRecord.rb:5:1:32:3 | User | +| ActiveRecord.rb:34:1:38:3 | Admin | | associations.rb:1:1:3:3 | Author | | associations.rb:5:1:9:3 | Post | | associations.rb:11:1:13:3 | Tag | @@ -10,20 +10,33 @@ activeRecordInstances | ActiveRecord.rb:9:5:9:68 | call to find | | ActiveRecord.rb:13:5:13:40 | call to find_by | | ActiveRecord.rb:13:5:13:46 | call to users | -| ActiveRecord.rb:16:3:18:5 | self (exec) | -| ActiveRecord.rb:16:3:18:5 | self in exec | +| ActiveRecord.rb:16:3:31:5 | self (exec) | +| ActiveRecord.rb:16:3:31:5 | self in exec | | ActiveRecord.rb:17:5:17:14 | self | -| ActiveRecord.rb:39:5:39:51 | call to authenticate | -| ActiveRecord.rb:40:5:40:30 | call to find_by_name | -| ActiveRecord.rb:59:5:61:7 | if ... | -| ActiveRecord.rb:59:43:60:40 | then ... | -| ActiveRecord.rb:60:7:60:40 | call to find_by | -| ActiveRecord.rb:64:5:64:33 | call to find_by | -| ActiveRecord.rb:66:5:66:34 | call to find | -| ActiveRecord.rb:76:5:76:24 | call to create | -| ActiveRecord.rb:80:5:80:66 | call to create | -| ActiveRecord.rb:84:5:84:68 | call to create | -| ActiveRecord.rb:88:5:88:16 | call to create | +| ActiveRecord.rb:18:5:18:14 | self | +| ActiveRecord.rb:19:5:19:14 | self | +| ActiveRecord.rb:20:5:20:14 | self | +| ActiveRecord.rb:21:5:21:14 | self | +| ActiveRecord.rb:22:5:22:14 | self | +| ActiveRecord.rb:23:5:23:14 | self | +| ActiveRecord.rb:24:5:24:14 | self | +| ActiveRecord.rb:25:5:25:14 | self | +| ActiveRecord.rb:26:5:26:14 | self | +| ActiveRecord.rb:27:5:27:14 | self | +| ActiveRecord.rb:28:5:28:14 | self | +| ActiveRecord.rb:29:5:29:14 | self | +| ActiveRecord.rb:30:5:30:14 | self | +| ActiveRecord.rb:52:5:52:51 | call to authenticate | +| ActiveRecord.rb:53:5:53:30 | call to find_by_name | +| ActiveRecord.rb:72:5:74:7 | if ... | +| ActiveRecord.rb:72:43:73:40 | then ... | +| ActiveRecord.rb:73:7:73:40 | call to find_by | +| ActiveRecord.rb:77:5:77:33 | call to find_by | +| ActiveRecord.rb:79:5:79:34 | call to find | +| ActiveRecord.rb:89:5:89:24 | call to create | +| ActiveRecord.rb:93:5:93:66 | call to create | +| ActiveRecord.rb:97:5:97:68 | call to create | +| ActiveRecord.rb:101:5:101:16 | call to create | | associations.rb:19:1:19:7 | author1 | | associations.rb:19:1:19:20 | ... = ... | | associations.rb:19:11:19:20 | call to new | @@ -108,47 +121,60 @@ activeRecordInstances | associations.rb:53:1:53:34 | call to find | activeRecordSqlExecutionRanges | ActiveRecord.rb:9:33:9:67 | "name='#{...}' and pass='#{...}'" | -| ActiveRecord.rb:17:24:17:24 | q | -| ActiveRecord.rb:23:16:23:24 | condition | -| ActiveRecord.rb:32:30:32:44 | ...[...] | -| ActiveRecord.rb:33:20:33:42 | "id = '#{...}'" | -| ActiveRecord.rb:34:21:34:45 | call to [] | -| ActiveRecord.rb:35:16:35:21 | <<-SQL | -| ActiveRecord.rb:38:20:38:47 | "user.id = '#{...}'" | -| ActiveRecord.rb:50:20:50:32 | ... + ... | -| ActiveRecord.rb:56:16:56:28 | "name #{...}" | -| ActiveRecord.rb:60:20:60:39 | "username = #{...}" | -| ActiveRecord.rb:72:21:72:44 | ...[...] | -| ActiveRecord.rb:110:27:110:76 | "this is an unsafe annotation:..." | +| ActiveRecord.rb:17:23:17:23 | q | +| ActiveRecord.rb:18:27:18:27 | q | +| ActiveRecord.rb:19:28:19:28 | q | +| ActiveRecord.rb:20:28:20:28 | q | +| ActiveRecord.rb:21:28:21:28 | q | +| ActiveRecord.rb:22:28:22:28 | q | +| ActiveRecord.rb:23:24:23:24 | q | +| ActiveRecord.rb:24:23:24:23 | q | +| ActiveRecord.rb:25:27:25:27 | q | +| ActiveRecord.rb:26:27:26:27 | q | +| ActiveRecord.rb:27:28:27:28 | q | +| ActiveRecord.rb:28:29:28:29 | q | +| ActiveRecord.rb:29:30:29:30 | q | +| ActiveRecord.rb:30:23:30:23 | q | +| ActiveRecord.rb:36:16:36:24 | condition | +| ActiveRecord.rb:45:30:45:44 | ...[...] | +| ActiveRecord.rb:46:20:46:42 | "id = '#{...}'" | +| ActiveRecord.rb:47:21:47:45 | call to [] | +| ActiveRecord.rb:48:16:48:21 | <<-SQL | +| ActiveRecord.rb:51:20:51:47 | "user.id = '#{...}'" | +| ActiveRecord.rb:63:20:63:32 | ... + ... | +| ActiveRecord.rb:69:16:69:28 | "name #{...}" | +| ActiveRecord.rb:73:20:73:39 | "username = #{...}" | +| ActiveRecord.rb:85:21:85:44 | ...[...] | +| ActiveRecord.rb:123:27:123:76 | "this is an unsafe annotation:..." | activeRecordModelClassMethodCalls | ActiveRecord.rb:2:3:2:17 | call to has_many | | ActiveRecord.rb:6:3:6:24 | call to belongs_to | | ActiveRecord.rb:9:5:9:68 | call to find | | ActiveRecord.rb:13:5:13:40 | call to find_by | | ActiveRecord.rb:13:5:13:46 | call to users | -| ActiveRecord.rb:23:5:23:25 | call to destroy_by | -| ActiveRecord.rb:32:5:32:45 | call to calculate | -| ActiveRecord.rb:33:5:33:43 | call to delete_by | -| ActiveRecord.rb:34:5:34:46 | call to destroy_by | -| ActiveRecord.rb:35:5:35:35 | call to where | -| ActiveRecord.rb:38:5:38:14 | call to where | -| ActiveRecord.rb:38:5:38:48 | call to not | -| ActiveRecord.rb:40:5:40:30 | call to find_by_name | -| ActiveRecord.rb:41:5:41:36 | call to not_a_find_by_method | -| ActiveRecord.rb:50:5:50:33 | call to delete_by | -| ActiveRecord.rb:56:5:56:29 | call to order | -| ActiveRecord.rb:60:7:60:40 | call to find_by | -| ActiveRecord.rb:64:5:64:33 | call to find_by | -| ActiveRecord.rb:66:5:66:34 | call to find | -| ActiveRecord.rb:76:5:76:24 | call to create | -| ActiveRecord.rb:80:5:80:66 | call to create | -| ActiveRecord.rb:84:5:84:68 | call to create | -| ActiveRecord.rb:88:5:88:16 | call to create | -| ActiveRecord.rb:92:5:92:27 | call to update | -| ActiveRecord.rb:96:5:96:69 | call to update | -| ActiveRecord.rb:100:5:100:71 | call to update | -| ActiveRecord.rb:106:13:106:54 | call to annotate | -| ActiveRecord.rb:110:13:110:77 | call to annotate | +| ActiveRecord.rb:36:5:36:25 | call to destroy_by | +| ActiveRecord.rb:45:5:45:45 | call to calculate | +| ActiveRecord.rb:46:5:46:43 | call to delete_by | +| ActiveRecord.rb:47:5:47:46 | call to destroy_by | +| ActiveRecord.rb:48:5:48:35 | call to where | +| ActiveRecord.rb:51:5:51:14 | call to where | +| ActiveRecord.rb:51:5:51:48 | call to not | +| ActiveRecord.rb:53:5:53:30 | call to find_by_name | +| ActiveRecord.rb:54:5:54:36 | call to not_a_find_by_method | +| ActiveRecord.rb:63:5:63:33 | call to delete_by | +| ActiveRecord.rb:69:5:69:29 | call to order | +| ActiveRecord.rb:73:7:73:40 | call to find_by | +| ActiveRecord.rb:77:5:77:33 | call to find_by | +| ActiveRecord.rb:79:5:79:34 | call to find | +| ActiveRecord.rb:89:5:89:24 | call to create | +| ActiveRecord.rb:93:5:93:66 | call to create | +| ActiveRecord.rb:97:5:97:68 | call to create | +| ActiveRecord.rb:101:5:101:16 | call to create | +| ActiveRecord.rb:105:5:105:27 | call to update | +| ActiveRecord.rb:109:5:109:69 | call to update | +| ActiveRecord.rb:113:5:113:71 | call to update | +| ActiveRecord.rb:119:13:119:54 | call to annotate | +| ActiveRecord.rb:123:13:123:77 | call to annotate | | associations.rb:2:3:2:17 | call to has_many | | associations.rb:6:3:6:20 | call to belongs_to | | associations.rb:7:3:7:20 | call to has_many | @@ -204,41 +230,41 @@ activeRecordModelClassMethodCalls activeRecordModelClassMethodCallsReplacement | ActiveRecord.rb:1:1:3:3 | UserGroup | ActiveRecord.rb:2:3:2:17 | call to has_many | | ActiveRecord.rb:1:1:3:3 | UserGroup | ActiveRecord.rb:13:5:13:40 | call to find_by | -| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:6:3:6:24 | call to belongs_to | -| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:9:5:9:68 | call to find | -| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:23:5:23:25 | call to destroy_by | -| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:32:5:32:45 | call to calculate | -| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:33:5:33:43 | call to delete_by | -| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:34:5:34:46 | call to destroy_by | -| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:35:5:35:35 | call to where | -| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:38:5:38:14 | call to where | -| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:39:5:39:51 | call to authenticate | -| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:40:5:40:30 | call to find_by_name | -| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:41:5:41:36 | call to not_a_find_by_method | -| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:50:5:50:33 | call to delete_by | -| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:56:5:56:29 | call to order | -| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:60:7:60:40 | call to find_by | -| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:64:5:64:33 | call to find_by | -| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:66:5:66:34 | call to find | -| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:72:5:72:45 | call to delete_by | -| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:76:5:76:24 | call to create | -| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:80:5:80:66 | call to create | -| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:84:5:84:68 | call to create | -| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:88:5:88:16 | call to create | -| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:92:5:92:27 | call to update | -| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:96:5:96:69 | call to update | -| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:100:5:100:71 | call to update | -| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:106:13:106:54 | call to annotate | -| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:110:13:110:77 | call to annotate | -| ActiveRecord.rb:21:1:25:3 | Admin | ActiveRecord.rb:23:5:23:25 | call to destroy_by | -| ActiveRecord.rb:21:1:25:3 | Admin | ActiveRecord.rb:72:5:72:45 | call to delete_by | -| ActiveRecord.rb:21:1:25:3 | Admin | ActiveRecord.rb:76:5:76:24 | call to create | -| ActiveRecord.rb:21:1:25:3 | Admin | ActiveRecord.rb:80:5:80:66 | call to create | -| ActiveRecord.rb:21:1:25:3 | Admin | ActiveRecord.rb:84:5:84:68 | call to create | -| ActiveRecord.rb:21:1:25:3 | Admin | ActiveRecord.rb:88:5:88:16 | call to create | -| ActiveRecord.rb:21:1:25:3 | Admin | ActiveRecord.rb:92:5:92:27 | call to update | -| ActiveRecord.rb:21:1:25:3 | Admin | ActiveRecord.rb:96:5:96:69 | call to update | -| ActiveRecord.rb:21:1:25:3 | Admin | ActiveRecord.rb:100:5:100:71 | call to update | +| ActiveRecord.rb:5:1:32:3 | User | ActiveRecord.rb:6:3:6:24 | call to belongs_to | +| ActiveRecord.rb:5:1:32:3 | User | ActiveRecord.rb:9:5:9:68 | call to find | +| ActiveRecord.rb:5:1:32:3 | User | ActiveRecord.rb:36:5:36:25 | call to destroy_by | +| ActiveRecord.rb:5:1:32:3 | User | ActiveRecord.rb:45:5:45:45 | call to calculate | +| ActiveRecord.rb:5:1:32:3 | User | ActiveRecord.rb:46:5:46:43 | call to delete_by | +| ActiveRecord.rb:5:1:32:3 | User | ActiveRecord.rb:47:5:47:46 | call to destroy_by | +| ActiveRecord.rb:5:1:32:3 | User | ActiveRecord.rb:48:5:48:35 | call to where | +| ActiveRecord.rb:5:1:32:3 | User | ActiveRecord.rb:51:5:51:14 | call to where | +| ActiveRecord.rb:5:1:32:3 | User | ActiveRecord.rb:52:5:52:51 | call to authenticate | +| ActiveRecord.rb:5:1:32:3 | User | ActiveRecord.rb:53:5:53:30 | call to find_by_name | +| ActiveRecord.rb:5:1:32:3 | User | ActiveRecord.rb:54:5:54:36 | call to not_a_find_by_method | +| ActiveRecord.rb:5:1:32:3 | User | ActiveRecord.rb:63:5:63:33 | call to delete_by | +| ActiveRecord.rb:5:1:32:3 | User | ActiveRecord.rb:69:5:69:29 | call to order | +| ActiveRecord.rb:5:1:32:3 | User | ActiveRecord.rb:73:7:73:40 | call to find_by | +| ActiveRecord.rb:5:1:32:3 | User | ActiveRecord.rb:77:5:77:33 | call to find_by | +| ActiveRecord.rb:5:1:32:3 | User | ActiveRecord.rb:79:5:79:34 | call to find | +| ActiveRecord.rb:5:1:32:3 | User | ActiveRecord.rb:85:5:85:45 | call to delete_by | +| ActiveRecord.rb:5:1:32:3 | User | ActiveRecord.rb:89:5:89:24 | call to create | +| ActiveRecord.rb:5:1:32:3 | User | ActiveRecord.rb:93:5:93:66 | call to create | +| ActiveRecord.rb:5:1:32:3 | User | ActiveRecord.rb:97:5:97:68 | call to create | +| ActiveRecord.rb:5:1:32:3 | User | ActiveRecord.rb:101:5:101:16 | call to create | +| ActiveRecord.rb:5:1:32:3 | User | ActiveRecord.rb:105:5:105:27 | call to update | +| ActiveRecord.rb:5:1:32:3 | User | ActiveRecord.rb:109:5:109:69 | call to update | +| ActiveRecord.rb:5:1:32:3 | User | ActiveRecord.rb:113:5:113:71 | call to update | +| ActiveRecord.rb:5:1:32:3 | User | ActiveRecord.rb:119:13:119:54 | call to annotate | +| ActiveRecord.rb:5:1:32:3 | User | ActiveRecord.rb:123:13:123:77 | call to annotate | +| ActiveRecord.rb:34:1:38:3 | Admin | ActiveRecord.rb:36:5:36:25 | call to destroy_by | +| ActiveRecord.rb:34:1:38:3 | Admin | ActiveRecord.rb:85:5:85:45 | call to delete_by | +| ActiveRecord.rb:34:1:38:3 | Admin | ActiveRecord.rb:89:5:89:24 | call to create | +| ActiveRecord.rb:34:1:38:3 | Admin | ActiveRecord.rb:93:5:93:66 | call to create | +| ActiveRecord.rb:34:1:38:3 | Admin | ActiveRecord.rb:97:5:97:68 | call to create | +| ActiveRecord.rb:34:1:38:3 | Admin | ActiveRecord.rb:101:5:101:16 | call to create | +| ActiveRecord.rb:34:1:38:3 | Admin | ActiveRecord.rb:105:5:105:27 | call to update | +| ActiveRecord.rb:34:1:38:3 | Admin | ActiveRecord.rb:109:5:109:69 | call to update | +| ActiveRecord.rb:34:1:38:3 | Admin | ActiveRecord.rb:113:5:113:71 | call to update | | associations.rb:1:1:3:3 | Author | associations.rb:2:3:2:17 | call to has_many | | associations.rb:1:1:3:3 | Author | associations.rb:19:11:19:20 | call to new | | associations.rb:5:1:9:3 | Post | associations.rb:6:3:6:20 | call to belongs_to | @@ -248,29 +274,29 @@ activeRecordModelClassMethodCallsReplacement | associations.rb:15:1:17:3 | Comment | associations.rb:16:3:16:18 | call to belongs_to | potentiallyUnsafeSqlExecutingMethodCall | ActiveRecord.rb:9:5:9:68 | call to find | -| ActiveRecord.rb:23:5:23:25 | call to destroy_by | -| ActiveRecord.rb:32:5:32:45 | call to calculate | -| ActiveRecord.rb:33:5:33:43 | call to delete_by | -| ActiveRecord.rb:34:5:34:46 | call to destroy_by | -| ActiveRecord.rb:35:5:35:35 | call to where | -| ActiveRecord.rb:38:5:38:48 | call to not | -| ActiveRecord.rb:50:5:50:33 | call to delete_by | -| ActiveRecord.rb:56:5:56:29 | call to order | -| ActiveRecord.rb:60:7:60:40 | call to find_by | -| ActiveRecord.rb:110:13:110:77 | call to annotate | +| ActiveRecord.rb:36:5:36:25 | call to destroy_by | +| ActiveRecord.rb:45:5:45:45 | call to calculate | +| ActiveRecord.rb:46:5:46:43 | call to delete_by | +| ActiveRecord.rb:47:5:47:46 | call to destroy_by | +| ActiveRecord.rb:48:5:48:35 | call to where | +| ActiveRecord.rb:51:5:51:48 | call to not | +| ActiveRecord.rb:63:5:63:33 | call to delete_by | +| ActiveRecord.rb:69:5:69:29 | call to order | +| ActiveRecord.rb:73:7:73:40 | call to find_by | +| ActiveRecord.rb:123:13:123:77 | call to annotate | activeRecordModelInstantiations -| ActiveRecord.rb:9:5:9:68 | call to find | ActiveRecord.rb:5:1:19:3 | User | +| ActiveRecord.rb:9:5:9:68 | call to find | ActiveRecord.rb:5:1:32:3 | User | | ActiveRecord.rb:13:5:13:40 | call to find_by | ActiveRecord.rb:1:1:3:3 | UserGroup | -| ActiveRecord.rb:13:5:13:46 | call to users | ActiveRecord.rb:5:1:19:3 | User | -| ActiveRecord.rb:16:3:18:5 | self in exec | ActiveRecord.rb:5:1:19:3 | User | -| ActiveRecord.rb:40:5:40:30 | call to find_by_name | ActiveRecord.rb:5:1:19:3 | User | -| ActiveRecord.rb:60:7:60:40 | call to find_by | ActiveRecord.rb:5:1:19:3 | User | -| ActiveRecord.rb:64:5:64:33 | call to find_by | ActiveRecord.rb:5:1:19:3 | User | -| ActiveRecord.rb:66:5:66:34 | call to find | ActiveRecord.rb:5:1:19:3 | User | -| ActiveRecord.rb:76:5:76:24 | call to create | ActiveRecord.rb:21:1:25:3 | Admin | -| ActiveRecord.rb:80:5:80:66 | call to create | ActiveRecord.rb:21:1:25:3 | Admin | -| ActiveRecord.rb:84:5:84:68 | call to create | ActiveRecord.rb:21:1:25:3 | Admin | -| ActiveRecord.rb:88:5:88:16 | call to create | ActiveRecord.rb:21:1:25:3 | Admin | +| ActiveRecord.rb:13:5:13:46 | call to users | ActiveRecord.rb:5:1:32:3 | User | +| ActiveRecord.rb:16:3:31:5 | self in exec | ActiveRecord.rb:5:1:32:3 | User | +| ActiveRecord.rb:53:5:53:30 | call to find_by_name | ActiveRecord.rb:5:1:32:3 | User | +| ActiveRecord.rb:73:7:73:40 | call to find_by | ActiveRecord.rb:5:1:32:3 | User | +| ActiveRecord.rb:77:5:77:33 | call to find_by | ActiveRecord.rb:5:1:32:3 | User | +| ActiveRecord.rb:79:5:79:34 | call to find | ActiveRecord.rb:5:1:32:3 | User | +| ActiveRecord.rb:89:5:89:24 | call to create | ActiveRecord.rb:34:1:38:3 | Admin | +| ActiveRecord.rb:93:5:93:66 | call to create | ActiveRecord.rb:34:1:38:3 | Admin | +| ActiveRecord.rb:97:5:97:68 | call to create | ActiveRecord.rb:34:1:38:3 | Admin | +| ActiveRecord.rb:101:5:101:16 | call to create | ActiveRecord.rb:34:1:38:3 | Admin | | associations.rb:19:11:19:20 | call to new | associations.rb:1:1:3:3 | Author | | associations.rb:21:9:21:21 | call to posts | associations.rb:5:1:9:3 | Post | | associations.rb:21:9:21:28 | call to create | associations.rb:5:1:9:3 | Post | @@ -312,13 +338,13 @@ activeRecordModelInstantiations | associations.rb:53:1:53:13 | call to posts | associations.rb:5:1:9:3 | Post | | associations.rb:53:1:53:20 | call to reload | associations.rb:5:1:9:3 | Post | persistentWriteAccesses -| ActiveRecord.rb:76:5:76:24 | call to create | ActiveRecord.rb:76:18:76:23 | call to params | -| ActiveRecord.rb:80:5:80:66 | call to create | ActiveRecord.rb:80:24:80:36 | ...[...] | -| ActiveRecord.rb:80:5:80:66 | call to create | ActiveRecord.rb:80:49:80:65 | ...[...] | -| ActiveRecord.rb:84:5:84:68 | call to create | ActiveRecord.rb:84:25:84:37 | ...[...] | -| ActiveRecord.rb:84:5:84:68 | call to create | ActiveRecord.rb:84:50:84:66 | ...[...] | -| ActiveRecord.rb:92:5:92:27 | call to update | ActiveRecord.rb:92:21:92:26 | call to params | -| ActiveRecord.rb:96:5:96:69 | call to update | ActiveRecord.rb:96:27:96:39 | ...[...] | -| ActiveRecord.rb:96:5:96:69 | call to update | ActiveRecord.rb:96:52:96:68 | ...[...] | -| ActiveRecord.rb:100:5:100:71 | call to update | ActiveRecord.rb:100:21:100:70 | call to [] | +| ActiveRecord.rb:89:5:89:24 | call to create | ActiveRecord.rb:89:18:89:23 | call to params | +| ActiveRecord.rb:93:5:93:66 | call to create | ActiveRecord.rb:93:24:93:36 | ...[...] | +| ActiveRecord.rb:93:5:93:66 | call to create | ActiveRecord.rb:93:49:93:65 | ...[...] | +| ActiveRecord.rb:97:5:97:68 | call to create | ActiveRecord.rb:97:25:97:37 | ...[...] | +| ActiveRecord.rb:97:5:97:68 | call to create | ActiveRecord.rb:97:50:97:66 | ...[...] | +| ActiveRecord.rb:105:5:105:27 | call to update | ActiveRecord.rb:105:21:105:26 | call to params | +| ActiveRecord.rb:109:5:109:69 | call to update | ActiveRecord.rb:109:27:109:39 | ...[...] | +| ActiveRecord.rb:109:5:109:69 | call to update | ActiveRecord.rb:109:52:109:68 | ...[...] | +| ActiveRecord.rb:113:5:113:71 | call to update | ActiveRecord.rb:113:21:113:70 | call to [] | | associations.rb:31:16:31:22 | ... = ... | associations.rb:31:16:31:22 | author2 | diff --git a/ruby/ql/test/library-tests/frameworks/active_record/ActiveRecord.rb b/ruby/ql/test/library-tests/frameworks/active_record/ActiveRecord.rb index dca8f3c43d3..763d90fffaa 100644 --- a/ruby/ql/test/library-tests/frameworks/active_record/ActiveRecord.rb +++ b/ruby/ql/test/library-tests/frameworks/active_record/ActiveRecord.rb @@ -14,7 +14,20 @@ class User < ApplicationRecord end def exec(q) + connection.delete(q) + connection.exec_query(q) + connection.exec_insert(q) + connection.exec_delete(q) + connection.exec_update(q) + connection.exec_insert(q) connection.execute(q) + connection.insert(q) + connection.select_all(q) + connection.select_one(q) + connection.select_rows(q) + connection.select_value(q) + connection.select_values(q) + connection.update(q) end end From 798a1e250e8390870722db29548167122a824cbc Mon Sep 17 00:00:00 2001 From: Cornelius Riemenschneider Date: Thu, 15 Feb 2024 17:00:02 +0100 Subject: [PATCH 277/378] Move the JS java tests to be a proper `java_test` target. Previously, we had a `sh_test` wrapping the `java_test` to do some setup. This was extremely brittle on Windows, and relied on getting a deploy jar from `java_test`. This breaks when updating to Bazel 7, where the ability to get a deploy jar from `java_test` was removed. Therefore, we now do all the test setup in `AllTests.java` instead. This is much cleaner, and shouldn't break as easily. --- .../semmle/js/extractor/test/AllTests.java | 43 ++++++++++++++++++- .../com/semmle/js/extractor/test/BUILD.bazel | 36 ++++++---------- .../com/semmle/js/extractor/test/run_tests.sh | 31 ------------- 3 files changed, 54 insertions(+), 56 deletions(-) delete mode 100755 javascript/extractor/test/com/semmle/js/extractor/test/run_tests.sh diff --git a/javascript/extractor/test/com/semmle/js/extractor/test/AllTests.java b/javascript/extractor/test/com/semmle/js/extractor/test/AllTests.java index 7abf94bb57c..7487e68efc0 100644 --- a/javascript/extractor/test/com/semmle/js/extractor/test/AllTests.java +++ b/javascript/extractor/test/com/semmle/js/extractor/test/AllTests.java @@ -1,5 +1,15 @@ package com.semmle.js.extractor.test; +import com.google.devtools.build.runfiles.Runfiles; +import com.semmle.util.process.Env; +import java.io.FileInputStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.HashMap; +import java.util.Map; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; +import org.junit.BeforeClass; import org.junit.runner.RunWith; import org.junit.runners.Suite; import org.junit.runners.Suite.SuiteClasses; @@ -18,4 +28,35 @@ import org.junit.runners.Suite.SuiteClasses; RobustnessTests.class, NumericSeparatorTests.class }) -public class AllTests {} +public class AllTests { + + @BeforeClass + public static void setUp() throws Exception { + Runfiles.Preloaded runfiles = Runfiles.preload(); + String nodePath = runfiles.unmapped().rlocation(System.getenv("NODE_BIN")); + String tsWrapperZip = runfiles.unmapped().rlocation(System.getenv("TS_WRAPPER_ZIP")); + Path tempDir = Files.createTempDirectory("ts-wrapper"); + // extract the ts-wrapper.zip to tempDir: + try (ZipInputStream zis = new ZipInputStream(new FileInputStream(tsWrapperZip))) { + ZipEntry entry = zis.getNextEntry(); + while (entry != null) { + Path entryPath = tempDir.resolve(entry.getName()); + if (entry.isDirectory()) { + Files.createDirectories(entryPath); + } else { + Files.copy(zis, entryPath); + } + entry = zis.getNextEntry(); + } + } + Path tsWrapper = tempDir.resolve("javascript/tools/typescript-parser-wrapper/main.js"); + if (!Files.exists(tsWrapper)) { + throw new RuntimeException("Could not find ts-wrapper at " + tsWrapper); + } + Map envUpdate = new HashMap<>(); + envUpdate.put("SEMMLE_TYPESCRIPT_NODE_RUNTIME", nodePath); + envUpdate.put("SEMMLE_TYPESCRIPT_PARSER_WRAPPER", tsWrapper.toString()); + + Env.systemEnv().pushEnvironmentContext(envUpdate); + } +} diff --git a/javascript/extractor/test/com/semmle/js/extractor/test/BUILD.bazel b/javascript/extractor/test/com/semmle/js/extractor/test/BUILD.bazel index 57305838039..4a7a7d8e08c 100644 --- a/javascript/extractor/test/com/semmle/js/extractor/test/BUILD.bazel +++ b/javascript/extractor/test/com/semmle/js/extractor/test/BUILD.bazel @@ -1,33 +1,21 @@ java_test( - name = "test_jar", + name = "test", srcs = glob(["**/*.java"]), + data = [ + "//javascript/extractor/lib/typescript", + "//javascript/extractor/parser-tests", + "//javascript/extractor/tests", + "@nodejs//:node_bin", + ], test_class = "com.semmle.js.extractor.test.AllTests", deps = [ "//javascript/extractor", "//javascript/extractor:deps", "@//resources/lib/java/DO_NOT_DISTRIBUTE:junit", + "@bazel_tools//tools/java/runfiles", ], -) - -# We need to unzip the typescript wrapper, and provide node on the path. -# Therefore, we're wrapping the java_test inside a sh_test. -sh_test( - name = "test", - size = "small", - srcs = ["run_tests.sh"], - args = [ - "$(execpath @nodejs//:node_bin)", - "$(JAVABASE)/bin/java", - "$(rootpath //javascript/extractor/lib/typescript)", - "$(rootpath test_jar_deploy.jar)", - ], - data = [ - ":test_jar_deploy.jar", - "//javascript/extractor/lib/typescript", - "//javascript/extractor/parser-tests", - "//javascript/extractor/tests", - "@bazel_tools//tools/jdk:current_java_runtime", - "@nodejs//:node_bin", - ], - toolchains = ["@bazel_tools//tools/jdk:current_java_runtime"], + env = { + "NODE_BIN": "$(rlocationpath @nodejs//:node_bin)", + "TS_WRAPPER_ZIP": "$(rlocationpath //javascript/extractor/lib/typescript)", + }, ) diff --git a/javascript/extractor/test/com/semmle/js/extractor/test/run_tests.sh b/javascript/extractor/test/com/semmle/js/extractor/test/run_tests.sh deleted file mode 100755 index bf208739222..00000000000 --- a/javascript/extractor/test/com/semmle/js/extractor/test/run_tests.sh +++ /dev/null @@ -1,31 +0,0 @@ -NODE=$1 -JAVA=$2 -PARSER_WRAPPER=$3 -TEST_JAR=$4 - -TEMP=$(mktemp -d) - -UNAME=$(uname -s) -echo $UNAME -# On Windows, the symlink set up by bazel that points at the test jar is a msys2/linux-style path -# The JVM can't resolve that, therefore copy the jar to the temp directory, and then set the -# windows path to it -if [[ "$UNAME" =~ _NT ]]; then - cp $TEST_JAR $TEMP/test.jar - TEST_JAR=$(cygpath -w $TEMP/test.jar) - echo "On Windows, new test jar: $TEST_JAR" -fi - -# unpack parser wrapper -unzip -q $PARSER_WRAPPER -d $TEMP/parser_wrapper -export SEMMLE_TYPESCRIPT_PARSER_WRAPPER=$TEMP/parser_wrapper/javascript/tools/typescript-parser-wrapper/main.js - -# setup node on path -NODE=$(realpath $NODE) -export PATH="$PATH:$(dirname $NODE)" - -$JAVA -Dbazel.test_suite=com.semmle.js.extractor.test.AllTests -jar $TEST_JAR -EXIT_CODE=$? - -rm -rf $TEMP -exit $EXIT_CODE From 652b6bb8e19ee5c51dca2f35b3bd2fc21abeeae8 Mon Sep 17 00:00:00 2001 From: Max Schaefer Date: Thu, 15 Feb 2024 16:29:20 +0000 Subject: [PATCH 278/378] Fix bugs revealed by omittable exists variables. --- .../automodel/src/AutomodelApplicationModeCharacteristics.qll | 3 ++- .../ql/automodel/src/AutomodelFrameworkModeCharacteristics.qll | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/java/ql/automodel/src/AutomodelApplicationModeCharacteristics.qll b/java/ql/automodel/src/AutomodelApplicationModeCharacteristics.qll index 938a3a52528..9dfe6aedfae 100644 --- a/java/ql/automodel/src/AutomodelApplicationModeCharacteristics.qll +++ b/java/ql/automodel/src/AutomodelApplicationModeCharacteristics.qll @@ -256,7 +256,8 @@ module ApplicationCandidatesImpl implements SharedCharacteristics::CandidateSig string input | sinkSpec(e, package, type, subtypes, name, signature, ext, input) and - ExternalFlow::sinkModel(package, type, _, name, [signature, ""], ext, input, kind, provenance) + ExternalFlow::sinkModel(package, type, subtypes, name, [signature, ""], ext, input, kind, + provenance) ) or isCustomSink(e, kind) and provenance = "custom-sink" diff --git a/java/ql/automodel/src/AutomodelFrameworkModeCharacteristics.qll b/java/ql/automodel/src/AutomodelFrameworkModeCharacteristics.qll index dd581aa0eeb..ff6ce32a1d4 100644 --- a/java/ql/automodel/src/AutomodelFrameworkModeCharacteristics.qll +++ b/java/ql/automodel/src/AutomodelFrameworkModeCharacteristics.qll @@ -214,7 +214,8 @@ module FrameworkCandidatesImpl implements SharedCharacteristics::CandidateSig { string input | sinkSpec(e, package, type, subtypes, name, signature, ext, input) and - ExternalFlow::sinkModel(package, type, _, name, [signature, ""], ext, input, kind, provenance) + ExternalFlow::sinkModel(package, type, subtypes, name, [signature, ""], ext, input, kind, + provenance) ) } From 89384bb85512f14ab4be8f6032b36c93207c69cb Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Fri, 16 Feb 2024 10:19:16 +0100 Subject: [PATCH 279/378] Extend permissions in csv-coverage-update.yml --- .github/workflows/csv-coverage-update.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/csv-coverage-update.yml b/.github/workflows/csv-coverage-update.yml index 4902bee7a4f..6b73bff820d 100644 --- a/.github/workflows/csv-coverage-update.yml +++ b/.github/workflows/csv-coverage-update.yml @@ -6,7 +6,7 @@ on: - cron: "0 0 * * *" permissions: - contents: read + contents: write pull-requests: write jobs: From 04f0fb0483ac76f31c481372288e6d6fd4a63466 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Tue, 13 Feb 2024 14:19:04 +0100 Subject: [PATCH 280/378] Add integration test with mono assemblies as references --- .../Assemblies.expected | 242 ++++++++++++++++++ .../Assemblies.ql | 15 ++ .../Program.cs | 6 + .../global.json | 5 + .../packages.config | 5 + .../skip-on-platform-osx-arm | 1 + .../test.csproj | 4 + .../test.py | 3 + 8 files changed, 281 insertions(+) create mode 100644 csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/Assemblies.expected create mode 100644 csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/Assemblies.ql create mode 100644 csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/Program.cs create mode 100644 csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/global.json create mode 100644 csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/packages.config create mode 100644 csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/skip-on-platform-osx-arm create mode 100644 csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/test.csproj create mode 100644 csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/test.py diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/Assemblies.expected b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/Assemblies.expected new file mode 100644 index 00000000000..b858d883f60 --- /dev/null +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/Assemblies.expected @@ -0,0 +1,242 @@ +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Accessibility.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Commons.Xml.Relaxng.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/CustomMarshalers.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/Microsoft.Win32.Primitives.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.AppContext.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Collections.Concurrent.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Collections.NonGeneric.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Collections.Specialized.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Collections.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.ComponentModel.Annotations.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.ComponentModel.EventBasedAsync.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.ComponentModel.Primitives.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.ComponentModel.TypeConverter.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.ComponentModel.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Console.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Data.Common.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Diagnostics.Contracts.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Diagnostics.Debug.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Diagnostics.FileVersionInfo.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Diagnostics.Process.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Diagnostics.StackTrace.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Diagnostics.TextWriterTraceListener.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Diagnostics.Tools.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Diagnostics.TraceSource.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Drawing.Primitives.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Dynamic.Runtime.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Globalization.Calendars.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Globalization.Extensions.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Globalization.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.IO.Compression.ZipFile.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.IO.FileSystem.DriveInfo.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.IO.FileSystem.Primitives.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.IO.FileSystem.Watcher.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.IO.FileSystem.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.IO.IsolatedStorage.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.IO.MemoryMappedFiles.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.IO.Pipes.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.IO.UnmanagedMemoryStream.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.IO.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Linq.Expressions.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Linq.Parallel.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Linq.Queryable.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Linq.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Net.Http.Rtc.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Net.NameResolution.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Net.NetworkInformation.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Net.Ping.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Net.Primitives.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Net.Requests.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Net.Security.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Net.Sockets.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Net.WebHeaderCollection.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Net.WebSockets.Client.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Net.WebSockets.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.ObjectModel.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Reflection.Emit.ILGeneration.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Reflection.Emit.Lightweight.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Reflection.Emit.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Reflection.Extensions.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Reflection.Primitives.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Reflection.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Resources.Reader.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Resources.ResourceManager.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Resources.Writer.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Runtime.CompilerServices.VisualC.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Runtime.Extensions.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Runtime.Handles.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Runtime.InteropServices.RuntimeInformation.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Runtime.InteropServices.WindowsRuntime.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Runtime.InteropServices.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Runtime.Numerics.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Runtime.Serialization.Formatters.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Runtime.Serialization.Json.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Runtime.Serialization.Primitives.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Runtime.Serialization.Xml.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Runtime.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Security.Claims.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Security.Cryptography.Algorithms.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Security.Cryptography.Csp.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Security.Cryptography.Encoding.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Security.Cryptography.Primitives.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Security.Cryptography.X509Certificates.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Security.Principal.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Security.SecureString.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.ServiceModel.Duplex.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.ServiceModel.Http.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.ServiceModel.NetTcp.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.ServiceModel.Primitives.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.ServiceModel.Security.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Text.Encoding.Extensions.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Text.Encoding.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Text.RegularExpressions.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Threading.Overlapped.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Threading.Tasks.Parallel.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Threading.Tasks.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Threading.Thread.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Threading.ThreadPool.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Threading.Timer.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Threading.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.ValueTuple.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Xml.ReaderWriter.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Xml.XDocument.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Xml.XPath.XDocument.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Xml.XPath.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Xml.XmlDocument.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Xml.XmlSerializer.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/netstandard.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/I18N.CJK.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/I18N.MidEast.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/I18N.Other.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/I18N.Rare.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/I18N.West.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/I18N.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/IBM.Data.DB2.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Microsoft.Build.Engine.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Microsoft.Build.Framework.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Microsoft.Build.Tasks.v4.0.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Microsoft.Build.Utilities.v4.0.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Microsoft.Build.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Microsoft.CSharp.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Microsoft.VisualBasic.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Microsoft.VisualC.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Microsoft.Web.Infrastructure.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Mono.C5.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Mono.CSharp.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Mono.Cairo.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Mono.CodeContracts.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Mono.CompilerServices.SymbolWriter.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Mono.Data.Sqlite.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Mono.Data.Tds.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Mono.Debugger.Soft.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Mono.Http.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Mono.Management.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Mono.Messaging.RabbitMQ.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Mono.Messaging.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Mono.Options.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Mono.Parallel.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Mono.Posix.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Mono.Security.Win32.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Mono.Security.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Mono.Simd.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Mono.Tasklets.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Mono.WebBrowser.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Novell.Directory.Ldap.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/PEAPI.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/RabbitMQ.Client.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/SMDiagnostics.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.ComponentModel.Composition.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.ComponentModel.DataAnnotations.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Configuration.Install.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Configuration.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Core.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Data.DataSetExtensions.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Data.Entity.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Data.Linq.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Data.OracleClient.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Data.Services.Client.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Data.Services.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Data.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Deployment.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Design.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Diagnostics.Tracing.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.DirectoryServices.Protocols.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.DirectoryServices.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Drawing.Design.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Drawing.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Dynamic.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.EnterpriseServices.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.IO.Compression.FileSystem.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.IO.Compression.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.IdentityModel.Selectors.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.IdentityModel.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Json.Microsoft.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Json.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Management.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Messaging.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Net.Http.Formatting.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Net.Http.WebRequest.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Net.Http.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Net.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Numerics.Vectors.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Numerics.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Reactive.Core.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Reactive.Debugger.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Reactive.Experimental.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Reactive.Interfaces.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Reactive.Linq.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Reactive.Observable.Aliases.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Reactive.PlatformServices.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Reactive.Providers.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Reactive.Runtime.Remoting.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Reactive.Windows.Forms.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Reactive.Windows.Threading.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Reflection.Context.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Runtime.Caching.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Runtime.DurableInstancing.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Runtime.Remoting.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Runtime.Serialization.Formatters.Soap.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Runtime.Serialization.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Security.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.ServiceModel.Activation.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.ServiceModel.Discovery.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.ServiceModel.Routing.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.ServiceModel.Web.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.ServiceModel.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.ServiceProcess.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Threading.Tasks.Dataflow.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Transactions.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Web.Abstractions.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Web.ApplicationServices.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Web.DynamicData.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Web.Extensions.Design.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Web.Extensions.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Web.Http.SelfHost.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Web.Http.WebHost.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Web.Http.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Web.Mobile.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Web.Mvc.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Web.Razor.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Web.RegularExpressions.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Web.Routing.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Web.Services.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Web.WebPages.Deployment.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Web.WebPages.Razor.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Web.WebPages.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Web.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Windows.Forms.DataVisualization.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Windows.Forms.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Windows.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Workflow.Activities.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Workflow.ComponentModel.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Workflow.Runtime.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Xaml.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Xml.Linq.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Xml.Serialization.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Xml.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/WebMatrix.Data.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/WindowsBase.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/cscompmgd.dll | +| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/mscorlib.dll | +| /legacypackages/Newtonsoft.Json.6.0.4/lib/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.dll | diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/Assemblies.ql b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/Assemblies.ql new file mode 100644 index 00000000000..18b4e12db2f --- /dev/null +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/Assemblies.ql @@ -0,0 +1,15 @@ +import csharp + +private string getPath(Assembly a) { + not a.getCompilation().getOutputAssembly() = a and + exists(string s | s = a.getFile().getAbsolutePath() | + result = + s.substring(s.indexOf("test-db/working/") + "test-db/working/".length() + 16, s.length()) + or + result = s and + not exists(s.indexOf("test-db/working/")) + ) +} + +from Assembly a +select getPath(a) diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/Program.cs b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/Program.cs new file mode 100644 index 00000000000..39a9e95bb6e --- /dev/null +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/Program.cs @@ -0,0 +1,6 @@ +class Program +{ + static void Main(string[] args) + { + } +} \ No newline at end of file diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/global.json b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/global.json new file mode 100644 index 00000000000..5c3fd64fbd1 --- /dev/null +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/global.json @@ -0,0 +1,5 @@ +{ + "sdk": { + "version": "8.0.101" + } +} diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/packages.config b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/packages.config new file mode 100644 index 00000000000..0f63b3daf6c --- /dev/null +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/packages.config @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/skip-on-platform-osx-arm b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/skip-on-platform-osx-arm new file mode 100644 index 00000000000..6ebb8d63fcc --- /dev/null +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/skip-on-platform-osx-arm @@ -0,0 +1 @@ +Skipping the test on the ARM runners, as we're running into trouble with Mono and nuget. diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/test.csproj b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/test.csproj new file mode 100644 index 00000000000..f7600103d99 --- /dev/null +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/test.csproj @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/test.py b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/test.py new file mode 100644 index 00000000000..72f47e38d22 --- /dev/null +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/test.py @@ -0,0 +1,3 @@ +from create_database_utils import * + +run_codeql_database_create([], lang="csharp", extra_args=["--extractor-option=buildless=true"]) From 8f0f6963bb0db4dbac1adf8f3fbed45c9f2cea0f Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Tue, 13 Feb 2024 14:19:57 +0100 Subject: [PATCH 281/378] Change desktop dotnet assembly lookup to fall back to nuget reference assemblies --- .../DependencyManager.cs | 97 ++-- .../FrameworkPackageNames.cs | 12 +- .../Runtime.cs | 44 +- .../Semmle.Extraction.Tests/Runtime.cs | 8 +- .../Assemblies.expected | 476 +++++++++--------- .../test.py | 2 + 6 files changed, 338 insertions(+), 301 deletions(-) diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs index e24eb762aa7..926e0ba8e0b 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs @@ -61,7 +61,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching try { this.dotnet = DotNet.Make(options, logger, tempWorkingDirectory); - runtimeLazy = new Lazy(() => new Runtime(dotnet)); + runtimeLazy = new Lazy(() => new Runtime(dotnet, logger)); } catch { @@ -303,7 +303,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching var packagesInPrioOrder = FrameworkPackageNames.NetFrameworks; var frameworkPaths = packagesInPrioOrder - .Select((s, index) => (Index: index, Path: GetPackageDirectory(s))) + .Select((s, index) => (Index: index, Path: GetPackageDirectory(s, packageDirectory))) .Where(pair => pair.Path is not null) .ToArray(); @@ -335,6 +335,16 @@ namespace Semmle.Extraction.CSharp.DependencyFetching else if (fileContent.IsLegacyProjectStructureUsed) { runtimeLocation = Runtime.DesktopRuntime; + + if (runtimeLocation is null) + { + logger.LogInfo("No .NET Desktop Runtime location found. Attempting to restore the .NET Framework reference assemblies manually."); + + if (TryRestorePackageManually(FrameworkPackageNames.LatestNetFrameworkReferenceAssemblies, null)) + { + runtimeLocation = GetPackageDirectory(FrameworkPackageNames.LatestNetFrameworkReferenceAssemblies, missingPackageDirectory); + } + } } runtimeLocation ??= Runtime.ExecutingRuntime; @@ -374,7 +384,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching } // First try to find ASP.NET Core assemblies in the NuGet packages - if (GetPackageDirectory(FrameworkPackageNames.AspNetCoreFramework) is string aspNetCorePackage) + if (GetPackageDirectory(FrameworkPackageNames.AspNetCoreFramework, packageDirectory) is string aspNetCorePackage) { SelectNewestFrameworkPath(aspNetCorePackage, "ASP.NET Core", dllPaths, frameworkLocations); return; @@ -390,15 +400,15 @@ namespace Semmle.Extraction.CSharp.DependencyFetching private void AddMicrosoftWindowsDesktopDlls(ISet dllPaths, ISet frameworkLocations) { - if (GetPackageDirectory(FrameworkPackageNames.WindowsDesktopFramework) is string windowsDesktopApp) + if (GetPackageDirectory(FrameworkPackageNames.WindowsDesktopFramework, packageDirectory) is string windowsDesktopApp) { SelectNewestFrameworkPath(windowsDesktopApp, "Windows Desktop App", dllPaths, frameworkLocations); } } - private string? GetPackageDirectory(string packagePrefix) + private string? GetPackageDirectory(string packagePrefix, TemporaryDirectory root) { - return new DirectoryInfo(packageDirectory.DirInfo.FullName) + return new DirectoryInfo(root.DirInfo.FullName) .EnumerateDirectories(packagePrefix + "*", new EnumerationOptions { MatchCasing = MatchCasing.CaseInsensitive, RecurseSubdirectories = false }) .FirstOrDefault()? .FullName; @@ -434,19 +444,19 @@ namespace Semmle.Extraction.CSharp.DependencyFetching } // Hardcoded values from https://learn.microsoft.com/en-us/dotnet/core/project-sdk/overview#implicit-using-directives - usings.UnionWith(new[] { "System", "System.Collections.Generic", "System.IO", "System.Linq", "System.Net.Http", "System.Threading", - "System.Threading.Tasks" }); + usings.UnionWith([ "System", "System.Collections.Generic", "System.IO", "System.Linq", "System.Net.Http", "System.Threading", + "System.Threading.Tasks" ]); if (fileContent.UseAspNetCoreDlls) { - usings.UnionWith(new[] { "System.Net.Http.Json", "Microsoft.AspNetCore.Builder", "Microsoft.AspNetCore.Hosting", + usings.UnionWith([ "System.Net.Http.Json", "Microsoft.AspNetCore.Builder", "Microsoft.AspNetCore.Hosting", "Microsoft.AspNetCore.Http", "Microsoft.AspNetCore.Routing", "Microsoft.Extensions.Configuration", - "Microsoft.Extensions.DependencyInjection", "Microsoft.Extensions.Hosting", "Microsoft.Extensions.Logging" }); + "Microsoft.Extensions.DependencyInjection", "Microsoft.Extensions.Hosting", "Microsoft.Extensions.Logging" ]); } if (fileContent.UseWindowsForms) { - usings.UnionWith(new[] { "System.Drawing", "System.Windows.Forms" }); + usings.UnionWith(["System.Drawing", "System.Windows.Forms"]); } usings.UnionWith(fileContent.CustomImplicitUsings); @@ -828,38 +838,12 @@ namespace Semmle.Extraction.CSharp.DependencyFetching Parallel.ForEach(notYetDownloadedPackages, new ParallelOptions { MaxDegreeOfParallelism = options.Threads }, package => { - logger.LogInfo($"Restoring package {package}..."); - using var tempDir = new TemporaryDirectory(ComputeTempDirectory(package, "missingpackages_workingdir")); - var success = dotnet.New(tempDir.DirInfo.FullName); + var success = TryRestorePackageManually(package, nugetConfig); if (!success) { return; } - success = dotnet.AddPackage(tempDir.DirInfo.FullName, package); - if (!success) - { - return; - } - - var res = dotnet.Restore(new(tempDir.DirInfo.FullName, missingPackageDirectory.DirInfo.FullName, ForceDotnetRefAssemblyFetching: false, PathToNugetConfig: nugetConfig)); - if (!res.Success) - { - if (res.HasNugetPackageSourceError) - { - // Restore could not be completed because the listed source is unavailable. Try without the nuget.config: - res = dotnet.Restore(new(tempDir.DirInfo.FullName, missingPackageDirectory.DirInfo.FullName, ForceDotnetRefAssemblyFetching: false, PathToNugetConfig: null, ForceReevaluation: true)); - } - - // TODO: the restore might fail, we could retry with a prerelease (*-* instead of *) version of the package. - - if (!res.Success) - { - logger.LogInfo($"Failed to restore nuget package {package}"); - return; - } - } - lock (sync) { successCount++; @@ -871,6 +855,43 @@ namespace Semmle.Extraction.CSharp.DependencyFetching dllPaths.Add(missingPackageDirectory.DirInfo.FullName); } + private bool TryRestorePackageManually(string package, string? nugetConfig) + { + logger.LogInfo($"Restoring package {package}..."); + using var tempDir = new TemporaryDirectory(ComputeTempDirectory(package, "missingpackages_workingdir")); + var success = dotnet.New(tempDir.DirInfo.FullName); + if (!success) + { + return false; + } + + success = dotnet.AddPackage(tempDir.DirInfo.FullName, package); + if (!success) + { + return false; + } + + var res = dotnet.Restore(new(tempDir.DirInfo.FullName, missingPackageDirectory.DirInfo.FullName, ForceDotnetRefAssemblyFetching: false, PathToNugetConfig: nugetConfig)); + if (!res.Success) + { + if (res.HasNugetPackageSourceError && nugetConfig is not null) + { + // Restore could not be completed because the listed source is unavailable. Try without the nuget.config: + res = dotnet.Restore(new(tempDir.DirInfo.FullName, missingPackageDirectory.DirInfo.FullName, ForceDotnetRefAssemblyFetching: false, PathToNugetConfig: null, ForceReevaluation: true)); + } + + // TODO: the restore might fail, we could retry with a prerelease (*-* instead of *) version of the package. + + if (!res.Success) + { + logger.LogInfo($"Failed to restore nuget package {package}"); + return false; + } + } + + return true; + } + public void Dispose(TemporaryDirectory? dir, string name) { try diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/FrameworkPackageNames.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/FrameworkPackageNames.cs index 7b4a076f99f..5e4a856b88c 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/FrameworkPackageNames.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/FrameworkPackageNames.cs @@ -1,25 +1,25 @@ using System.Collections.Generic; -using System.Linq; namespace Semmle.Extraction.CSharp.DependencyFetching { internal static class FrameworkPackageNames { + public static string LatestNetFrameworkReferenceAssemblies { get; } = "microsoft.netframework.referenceassemblies.net481"; + public static string AspNetCoreFramework { get; } = "microsoft.aspnetcore.app.ref"; public static string WindowsDesktopFramework { get; } = "microsoft.windowsdesktop.app.ref"; // The order of the packages is important. - public static string[] NetFrameworks { get; } = new string[] - { + public static string[] NetFrameworks { get; } = + [ "microsoft.netcore.app.ref", // net7.0, ... net5.0, netcoreapp3.1, netcoreapp3.0 "microsoft.netframework.referenceassemblies.", // net48, ..., net20 "netstandard.library.ref", // netstandard2.1 "netstandard.library" // netstandard2.0 - }; + ]; public static IEnumerable AllFrameworks { get; } = - NetFrameworks - .Union(new string[] { AspNetCoreFramework, WindowsDesktopFramework }); + [.. NetFrameworks, AspNetCoreFramework, WindowsDesktopFramework]; } } diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/Runtime.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/Runtime.cs index 5b6f47d22f3..742efaadaa5 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/Runtime.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/Runtime.cs @@ -5,6 +5,7 @@ using System.Linq; using System.Runtime.InteropServices; using System.Text.RegularExpressions; using Semmle.Util; +using Semmle.Util.Logging; namespace Semmle.Extraction.CSharp.DependencyFetching { @@ -17,12 +18,14 @@ namespace Semmle.Extraction.CSharp.DependencyFetching private const string aspNetCoreApp = "Microsoft.AspNetCore.App"; private readonly IDotNet dotNet; + private readonly ILogger logger; private readonly Lazy> newestRuntimes; private Dictionary NewestRuntimes => newestRuntimes.Value; - public Runtime(IDotNet dotNet) + public Runtime(IDotNet dotNet, ILogger logger) { this.dotNet = dotNet; + this.logger = logger; this.newestRuntimes = new(GetNewestRuntimes); } @@ -65,7 +68,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching /// Locates .NET Desktop Runtimes. /// This includes Mono and Microsoft.NET. /// - private static IEnumerable DesktopRuntimes + private IEnumerable DesktopRuntimes { get { @@ -75,21 +78,38 @@ namespace Semmle.Extraction.CSharp.DependencyFetching .OrderByDescending(Path.GetFileName); } - var monoPath = FileUtils.FindProgramOnPath(Win32.IsWindows() ? "mono.exe" : "mono"); - var monoDirs = monoPath is not null - ? new[] { Path.GetFullPath(Path.Combine(monoPath, "..", "lib", "mono")), monoPath } - : new[] { "/usr/lib/mono", "/usr/local/mono", "/usr/local/bin/mono", @"C:\Program Files\Mono\lib\mono" }; + string? monoDir = null; - var dir = monoDirs.FirstOrDefault(Directory.Exists); - - if (dir is not null) + var monoPathEnv = Environment.GetEnvironmentVariable("CODEQL_EXTRACTOR_CSHARP_BUILDLESS_MONO_PATH"); + if (monoPathEnv is not null) { - return Directory.EnumerateDirectories(dir) - .Where(d => Char.IsDigit(Path.GetFileName(d)[0])) + if (Directory.Exists(monoPathEnv)) + { + monoDir = monoPathEnv; + } + else + { + logger.LogError($"The directory specified in CODEQL_EXTRACTOR_CSHARP_BUILDLESS_MONO_PATH does not exist: {monoPathEnv}"); + } + } + else + { + var monoPath = FileUtils.FindProgramOnPath(Win32.IsWindows() ? "mono.exe" : "mono"); + string[] monoDirs = monoPath is not null + ? [Path.GetFullPath(Path.Combine(monoPath, "..", "lib", "mono")), monoPath] + : ["/usr/lib/mono", "/usr/local/mono", "/usr/local/bin/mono", @"C:\Program Files\Mono\lib\mono"]; + + monoDir = monoDirs.FirstOrDefault(Directory.Exists); + } + + if (monoDir is not null) + { + return Directory.EnumerateDirectories(monoDir) + .Where(d => char.IsDigit(Path.GetFileName(d)[0])) .OrderByDescending(Path.GetFileName); } - return Enumerable.Empty(); + return []; } } diff --git a/csharp/extractor/Semmle.Extraction.Tests/Runtime.cs b/csharp/extractor/Semmle.Extraction.Tests/Runtime.cs index 17bc477bde8..0d4ed6c4b92 100644 --- a/csharp/extractor/Semmle.Extraction.Tests/Runtime.cs +++ b/csharp/extractor/Semmle.Extraction.Tests/Runtime.cs @@ -47,7 +47,7 @@ namespace Semmle.Extraction.Tests "Microsoft.NETCore.App 7.0.2 [/path/dotnet/shared/Microsoft.NETCore.App]" }; var dotnet = new DotNetStub(listedRuntimes, null!); - var runtime = new Runtime(dotnet); + var runtime = new Runtime(dotnet, new LoggerStub()); // Execute var runtimes = runtime.GetNewestRuntimes(); @@ -73,7 +73,7 @@ namespace Semmle.Extraction.Tests "Microsoft.NETCore.App 8.0.0-preview.5.23280.8 [/path/dotnet/shared/Microsoft.NETCore.App]" }; var dotnet = new DotNetStub(listedRuntimes, null!); - var runtime = new Runtime(dotnet); + var runtime = new Runtime(dotnet, new LoggerStub()); // Execute var runtimes = runtime.GetNewestRuntimes(); @@ -96,7 +96,7 @@ namespace Semmle.Extraction.Tests "Microsoft.NETCore.App 8.0.0-preview.5.23280.8 [/path/dotnet/shared/Microsoft.NETCore.App]" }; var dotnet = new DotNetStub(listedRuntimes, null!); - var runtime = new Runtime(dotnet); + var runtime = new Runtime(dotnet, new LoggerStub()); // Execute var runtimes = runtime.GetNewestRuntimes(); @@ -125,7 +125,7 @@ namespace Semmle.Extraction.Tests @"Microsoft.WindowsDesktop.App 7.0.4 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]" }; var dotnet = new DotNetStub(listedRuntimes, null!); - var runtime = new Runtime(dotnet); + var runtime = new Runtime(dotnet, new LoggerStub()); // Execute var runtimes = runtime.GetNewestRuntimes(); diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/Assemblies.expected b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/Assemblies.expected index b858d883f60..cb8111e84fe 100644 --- a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/Assemblies.expected +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/Assemblies.expected @@ -1,242 +1,236 @@ -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Accessibility.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Commons.Xml.Relaxng.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/CustomMarshalers.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/Microsoft.Win32.Primitives.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.AppContext.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Collections.Concurrent.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Collections.NonGeneric.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Collections.Specialized.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Collections.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.ComponentModel.Annotations.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.ComponentModel.EventBasedAsync.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.ComponentModel.Primitives.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.ComponentModel.TypeConverter.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.ComponentModel.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Console.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Data.Common.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Diagnostics.Contracts.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Diagnostics.Debug.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Diagnostics.FileVersionInfo.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Diagnostics.Process.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Diagnostics.StackTrace.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Diagnostics.TextWriterTraceListener.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Diagnostics.Tools.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Diagnostics.TraceSource.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Drawing.Primitives.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Dynamic.Runtime.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Globalization.Calendars.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Globalization.Extensions.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Globalization.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.IO.Compression.ZipFile.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.IO.FileSystem.DriveInfo.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.IO.FileSystem.Primitives.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.IO.FileSystem.Watcher.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.IO.FileSystem.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.IO.IsolatedStorage.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.IO.MemoryMappedFiles.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.IO.Pipes.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.IO.UnmanagedMemoryStream.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.IO.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Linq.Expressions.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Linq.Parallel.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Linq.Queryable.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Linq.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Net.Http.Rtc.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Net.NameResolution.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Net.NetworkInformation.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Net.Ping.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Net.Primitives.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Net.Requests.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Net.Security.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Net.Sockets.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Net.WebHeaderCollection.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Net.WebSockets.Client.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Net.WebSockets.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.ObjectModel.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Reflection.Emit.ILGeneration.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Reflection.Emit.Lightweight.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Reflection.Emit.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Reflection.Extensions.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Reflection.Primitives.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Reflection.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Resources.Reader.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Resources.ResourceManager.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Resources.Writer.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Runtime.CompilerServices.VisualC.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Runtime.Extensions.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Runtime.Handles.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Runtime.InteropServices.RuntimeInformation.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Runtime.InteropServices.WindowsRuntime.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Runtime.InteropServices.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Runtime.Numerics.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Runtime.Serialization.Formatters.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Runtime.Serialization.Json.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Runtime.Serialization.Primitives.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Runtime.Serialization.Xml.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Runtime.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Security.Claims.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Security.Cryptography.Algorithms.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Security.Cryptography.Csp.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Security.Cryptography.Encoding.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Security.Cryptography.Primitives.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Security.Cryptography.X509Certificates.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Security.Principal.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Security.SecureString.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.ServiceModel.Duplex.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.ServiceModel.Http.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.ServiceModel.NetTcp.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.ServiceModel.Primitives.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.ServiceModel.Security.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Text.Encoding.Extensions.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Text.Encoding.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Text.RegularExpressions.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Threading.Overlapped.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Threading.Tasks.Parallel.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Threading.Tasks.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Threading.Thread.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Threading.ThreadPool.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Threading.Timer.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Threading.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.ValueTuple.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Xml.ReaderWriter.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Xml.XDocument.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Xml.XPath.XDocument.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Xml.XPath.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Xml.XmlDocument.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/System.Xml.XmlSerializer.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Facades/netstandard.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/I18N.CJK.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/I18N.MidEast.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/I18N.Other.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/I18N.Rare.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/I18N.West.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/I18N.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/IBM.Data.DB2.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Microsoft.Build.Engine.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Microsoft.Build.Framework.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Microsoft.Build.Tasks.v4.0.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Microsoft.Build.Utilities.v4.0.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Microsoft.Build.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Microsoft.CSharp.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Microsoft.VisualBasic.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Microsoft.VisualC.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Microsoft.Web.Infrastructure.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Mono.C5.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Mono.CSharp.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Mono.Cairo.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Mono.CodeContracts.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Mono.CompilerServices.SymbolWriter.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Mono.Data.Sqlite.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Mono.Data.Tds.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Mono.Debugger.Soft.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Mono.Http.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Mono.Management.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Mono.Messaging.RabbitMQ.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Mono.Messaging.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Mono.Options.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Mono.Parallel.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Mono.Posix.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Mono.Security.Win32.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Mono.Security.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Mono.Simd.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Mono.Tasklets.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Mono.WebBrowser.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/Novell.Directory.Ldap.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/PEAPI.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/RabbitMQ.Client.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/SMDiagnostics.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.ComponentModel.Composition.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.ComponentModel.DataAnnotations.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Configuration.Install.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Configuration.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Core.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Data.DataSetExtensions.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Data.Entity.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Data.Linq.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Data.OracleClient.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Data.Services.Client.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Data.Services.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Data.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Deployment.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Design.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Diagnostics.Tracing.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.DirectoryServices.Protocols.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.DirectoryServices.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Drawing.Design.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Drawing.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Dynamic.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.EnterpriseServices.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.IO.Compression.FileSystem.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.IO.Compression.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.IdentityModel.Selectors.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.IdentityModel.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Json.Microsoft.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Json.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Management.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Messaging.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Net.Http.Formatting.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Net.Http.WebRequest.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Net.Http.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Net.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Numerics.Vectors.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Numerics.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Reactive.Core.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Reactive.Debugger.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Reactive.Experimental.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Reactive.Interfaces.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Reactive.Linq.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Reactive.Observable.Aliases.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Reactive.PlatformServices.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Reactive.Providers.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Reactive.Runtime.Remoting.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Reactive.Windows.Forms.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Reactive.Windows.Threading.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Reflection.Context.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Runtime.Caching.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Runtime.DurableInstancing.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Runtime.Remoting.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Runtime.Serialization.Formatters.Soap.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Runtime.Serialization.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Security.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.ServiceModel.Activation.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.ServiceModel.Discovery.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.ServiceModel.Routing.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.ServiceModel.Web.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.ServiceModel.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.ServiceProcess.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Threading.Tasks.Dataflow.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Transactions.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Web.Abstractions.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Web.ApplicationServices.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Web.DynamicData.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Web.Extensions.Design.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Web.Extensions.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Web.Http.SelfHost.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Web.Http.WebHost.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Web.Http.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Web.Mobile.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Web.Mvc.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Web.Razor.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Web.RegularExpressions.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Web.Routing.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Web.Services.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Web.WebPages.Deployment.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Web.WebPages.Razor.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Web.WebPages.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Web.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Windows.Forms.DataVisualization.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Windows.Forms.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Windows.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Workflow.Activities.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Workflow.ComponentModel.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Workflow.Runtime.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Xaml.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Xml.Linq.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Xml.Serialization.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.Xml.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/System.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/WebMatrix.Data.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/WindowsBase.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/cscompmgd.dll | -| /Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/4.8-api/mscorlib.dll | | /legacypackages/Newtonsoft.Json.6.0.4/lib/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Accessibility.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/CustomMarshalers.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/Microsoft.Win32.Primitives.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.AppContext.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Collections.Concurrent.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Collections.NonGeneric.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Collections.Specialized.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Collections.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.ComponentModel.Annotations.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.ComponentModel.EventBasedAsync.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.ComponentModel.Primitives.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.ComponentModel.TypeConverter.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.ComponentModel.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Console.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Data.Common.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Diagnostics.Contracts.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Diagnostics.Debug.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Diagnostics.FileVersionInfo.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Diagnostics.Process.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Diagnostics.StackTrace.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Diagnostics.TextWriterTraceListener.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Diagnostics.Tools.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Diagnostics.TraceSource.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Drawing.Primitives.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Dynamic.Runtime.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Globalization.Calendars.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Globalization.Extensions.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Globalization.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.IO.Compression.ZipFile.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.IO.FileSystem.DriveInfo.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.IO.FileSystem.Primitives.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.IO.FileSystem.Watcher.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.IO.FileSystem.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.IO.IsolatedStorage.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.IO.MemoryMappedFiles.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.IO.Pipes.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.IO.UnmanagedMemoryStream.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.IO.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Linq.Expressions.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Linq.Parallel.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Linq.Queryable.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Linq.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Net.Http.Rtc.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Net.NameResolution.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Net.NetworkInformation.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Net.Ping.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Net.Primitives.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Net.Requests.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Net.Security.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Net.Sockets.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Net.WebHeaderCollection.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Net.WebSockets.Client.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Net.WebSockets.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.ObjectModel.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Reflection.Emit.ILGeneration.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Reflection.Emit.Lightweight.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Reflection.Emit.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Reflection.Extensions.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Reflection.Primitives.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Reflection.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Resources.Reader.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Resources.ResourceManager.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Resources.Writer.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Runtime.CompilerServices.VisualC.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Runtime.Extensions.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Runtime.Handles.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Runtime.InteropServices.RuntimeInformation.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Runtime.InteropServices.WindowsRuntime.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Runtime.InteropServices.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Runtime.Numerics.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Runtime.Serialization.Formatters.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Runtime.Serialization.Json.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Runtime.Serialization.Primitives.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Runtime.Serialization.Xml.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Runtime.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Security.Claims.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Security.Cryptography.Algorithms.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Security.Cryptography.Csp.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Security.Cryptography.Encoding.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Security.Cryptography.Primitives.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Security.Cryptography.X509Certificates.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Security.Principal.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Security.SecureString.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.ServiceModel.Duplex.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.ServiceModel.Http.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.ServiceModel.NetTcp.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.ServiceModel.Primitives.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.ServiceModel.Security.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Text.Encoding.Extensions.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Text.Encoding.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Text.RegularExpressions.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Threading.Overlapped.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Threading.Tasks.Parallel.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Threading.Tasks.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Threading.Thread.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Threading.ThreadPool.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Threading.Timer.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Threading.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.ValueTuple.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Xml.ReaderWriter.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Xml.XDocument.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Xml.XPath.XDocument.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Xml.XPath.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Xml.XmlDocument.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Xml.XmlSerializer.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/netstandard.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/ISymWrapper.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Microsoft.Activities.Build.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Microsoft.Build.Conversion.v4.0.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Microsoft.Build.Engine.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Microsoft.Build.Framework.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Microsoft.Build.Tasks.v4.0.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Microsoft.Build.Utilities.v4.0.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Microsoft.Build.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Microsoft.CSharp.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Microsoft.JScript.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Microsoft.VisualBasic.Compatibility.Data.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Microsoft.VisualBasic.Compatibility.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Microsoft.VisualBasic.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Microsoft.VisualC.STLCLR.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Microsoft.VisualC.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/PresentationBuildTasks.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/PresentationCore.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/PresentationFramework.Aero2.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/PresentationFramework.Aero.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/PresentationFramework.AeroLite.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/PresentationFramework.Classic.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/PresentationFramework.Luna.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/PresentationFramework.Royale.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/PresentationFramework.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/ReachFramework.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Activities.Core.Presentation.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Activities.DurableInstancing.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Activities.Presentation.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Activities.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.AddIn.Contract.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.AddIn.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.ComponentModel.Composition.Registration.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.ComponentModel.Composition.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.ComponentModel.DataAnnotations.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Configuration.Install.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Configuration.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Core.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Data.DataSetExtensions.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Data.Entity.Design.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Data.Entity.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Data.Linq.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Data.OracleClient.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Data.Services.Client.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Data.Services.Design.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Data.Services.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Data.SqlXml.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Data.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Deployment.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Design.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Device.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Diagnostics.Tracing.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.DirectoryServices.AccountManagement.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.DirectoryServices.Protocols.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.DirectoryServices.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Drawing.Design.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Drawing.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Dynamic.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.EnterpriseServices.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.IO.Compression.FileSystem.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.IO.Compression.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.IO.Log.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.IdentityModel.Selectors.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.IdentityModel.Services.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.IdentityModel.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Management.Instrumentation.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Management.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Messaging.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Net.Http.WebRequest.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Net.Http.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Net.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Numerics.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Printing.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Reflection.Context.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Runtime.Caching.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Runtime.DurableInstancing.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Runtime.Remoting.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Runtime.Serialization.Formatters.Soap.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Runtime.Serialization.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Security.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.ServiceModel.Activation.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.ServiceModel.Activities.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.ServiceModel.Channels.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.ServiceModel.Discovery.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.ServiceModel.Routing.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.ServiceModel.Web.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.ServiceModel.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.ServiceProcess.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Speech.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Transactions.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Web.Abstractions.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Web.ApplicationServices.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Web.DataVisualization.Design.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Web.DataVisualization.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Web.DynamicData.Design.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Web.DynamicData.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Web.Entity.Design.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Web.Entity.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Web.Extensions.Design.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Web.Extensions.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Web.Mobile.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Web.RegularExpressions.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Web.Routing.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Web.Services.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Web.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Windows.Controls.Ribbon.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Windows.Forms.DataVisualization.Design.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Windows.Forms.DataVisualization.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Windows.Forms.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Windows.Input.Manipulations.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Windows.Presentation.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Windows.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Workflow.Activities.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Workflow.ComponentModel.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Workflow.Runtime.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.WorkflowServices.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Xaml.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Xml.Linq.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Xml.Serialization.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Xml.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/UIAutomationClient.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/UIAutomationClientsideProviders.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/UIAutomationProvider.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/UIAutomationTypes.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/WindowsBase.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/WindowsFormsIntegration.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/XamlBuildTask.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/mscorlib.dll | +| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/sysglobl.dll | diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/test.py b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/test.py index 72f47e38d22..1c8150e5d7b 100644 --- a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/test.py +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/test.py @@ -1,3 +1,5 @@ from create_database_utils import * +import os +os.environ["CODEQL_EXTRACTOR_CSHARP_BUILDLESS_MONO_PATH"] = "/non-existent-path" run_codeql_database_create([], lang="csharp", extra_args=["--extractor-option=buildless=true"]) From b996f7b3cefcc806f1d8a8e1e38d28503f25c0f3 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Tue, 13 Feb 2024 14:24:22 +0100 Subject: [PATCH 282/378] Change environment variable for opt-out web view extraction --- .../DependencyManager.cs | 2 +- .../all-platforms/cshtml_standalone_disabled/test.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs index 926e0ba8e0b..7e921cce0b6 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs @@ -111,7 +111,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching logger.LogInfo($"Unresolved reference {r.Key} in project {r.Value}"); } - var webViewExtractionOption = Environment.GetEnvironmentVariable("CODEQL_EXTRACTOR_CSHARP_STANDALONE_EXTRACT_WEB_VIEWS"); + var webViewExtractionOption = Environment.GetEnvironmentVariable("CODEQL_EXTRACTOR_CSHARP_BUILDLESS_EXTRACT_WEB_VIEWS"); if (webViewExtractionOption == null || bool.TryParse(webViewExtractionOption, out var shouldExtractWebViews) && shouldExtractWebViews) diff --git a/csharp/ql/integration-tests/all-platforms/cshtml_standalone_disabled/test.py b/csharp/ql/integration-tests/all-platforms/cshtml_standalone_disabled/test.py index c00c6f6e2e8..0b433134e5a 100644 --- a/csharp/ql/integration-tests/all-platforms/cshtml_standalone_disabled/test.py +++ b/csharp/ql/integration-tests/all-platforms/cshtml_standalone_disabled/test.py @@ -1,5 +1,5 @@ import os from create_database_utils import * -os.environ['CODEQL_EXTRACTOR_CSHARP_STANDALONE_EXTRACT_WEB_VIEWS'] = 'false' +os.environ['CODEQL_EXTRACTOR_CSHARP_BUILDLESS_EXTRACT_WEB_VIEWS'] = 'false' run_codeql_database_create(lang="csharp", extra_args=["--extractor-option=buildless=true"]) From d358f8e4f255be95eb9672551efaaf92d8cb5bc6 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Tue, 13 Feb 2024 14:28:58 +0100 Subject: [PATCH 283/378] Move undocumented environment variable names to a common location --- .../DependencyManager.cs | 2 +- .../EnvironmentVariableNames.cs | 8 ++++++++ .../Runtime.cs | 4 ++-- 3 files changed, 11 insertions(+), 3 deletions(-) create mode 100644 csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/EnvironmentVariableNames.cs diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs index 7e921cce0b6..981f6aaa2ae 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs @@ -111,7 +111,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching logger.LogInfo($"Unresolved reference {r.Key} in project {r.Value}"); } - var webViewExtractionOption = Environment.GetEnvironmentVariable("CODEQL_EXTRACTOR_CSHARP_BUILDLESS_EXTRACT_WEB_VIEWS"); + var webViewExtractionOption = Environment.GetEnvironmentVariable(EnvironmentVariableNames.WebViewGeneration); if (webViewExtractionOption == null || bool.TryParse(webViewExtractionOption, out var shouldExtractWebViews) && shouldExtractWebViews) diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/EnvironmentVariableNames.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/EnvironmentVariableNames.cs new file mode 100644 index 00000000000..b9e8fdabea4 --- /dev/null +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/EnvironmentVariableNames.cs @@ -0,0 +1,8 @@ +namespace Semmle.Extraction.CSharp.DependencyFetching +{ + internal class EnvironmentVariableNames + { + public const string WebViewGeneration = "CODEQL_EXTRACTOR_CSHARP_BUILDLESS_EXTRACT_WEB_VIEWS"; + public const string MonoPath = "CODEQL_EXTRACTOR_CSHARP_BUILDLESS_MONO_PATH"; + } +} diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/Runtime.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/Runtime.cs index 742efaadaa5..a3838c62590 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/Runtime.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/Runtime.cs @@ -80,7 +80,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching string? monoDir = null; - var monoPathEnv = Environment.GetEnvironmentVariable("CODEQL_EXTRACTOR_CSHARP_BUILDLESS_MONO_PATH"); + var monoPathEnv = Environment.GetEnvironmentVariable(EnvironmentVariableNames.MonoPath); if (monoPathEnv is not null) { if (Directory.Exists(monoPathEnv)) @@ -89,7 +89,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching } else { - logger.LogError($"The directory specified in CODEQL_EXTRACTOR_CSHARP_BUILDLESS_MONO_PATH does not exist: {monoPathEnv}"); + logger.LogError($"The directory specified in {EnvironmentVariableNames.MonoPath} does not exist: {monoPathEnv}"); } } else From c75111619e7d974393d83ef6cbd020bdfa0b4a2d Mon Sep 17 00:00:00 2001 From: Angela P Wen Date: Fri, 16 Feb 2024 02:17:17 -0800 Subject: [PATCH 284/378] Add `security-events: write` permission --- .github/workflows/ql-for-ql-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ql-for-ql-build.yml b/.github/workflows/ql-for-ql-build.yml index 8a4b882f30a..94e4526b35e 100644 --- a/.github/workflows/ql-for-ql-build.yml +++ b/.github/workflows/ql-for-ql-build.yml @@ -11,7 +11,7 @@ env: permissions: contents: read - security-events: read + security-events: write jobs: analyze: From ba1a0bc320810275079a824885ba5cfe0ac907ed Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Fri, 16 Feb 2024 11:25:33 +0100 Subject: [PATCH 285/378] Java: Add test highlighting problem. --- .../library-tests/dataflow/flowfeature/A.java | 49 +++++++++++++++ .../dataflow/flowfeature/flow.expected | 7 +++ .../dataflow/flowfeature/flow.ql | 60 +++++++++++++++++++ 3 files changed, 116 insertions(+) create mode 100644 java/ql/test/library-tests/dataflow/flowfeature/A.java create mode 100644 java/ql/test/library-tests/dataflow/flowfeature/flow.expected create mode 100644 java/ql/test/library-tests/dataflow/flowfeature/flow.ql diff --git a/java/ql/test/library-tests/dataflow/flowfeature/A.java b/java/ql/test/library-tests/dataflow/flowfeature/A.java new file mode 100644 index 00000000000..dad2786339c --- /dev/null +++ b/java/ql/test/library-tests/dataflow/flowfeature/A.java @@ -0,0 +1,49 @@ +public class A { + static Object source(String s) { return null; } + static void sink(Object o) { } + + static Object id(Object x) { return x; } + + static void test1(int dummy) { + Object src = source("1"); + Object a = src; + sink(a); // $ EqCc="1" SrcCc="1" SinkCc="1" + } + + static void test2() { + Object src = source("2"); + Object a = src; + sink(a); // $ EqCc="2" SrcCc="2" SinkCc="2" + } + + void test3() { + Object src = source("3"); + Object a = id(src); + sink(a); // $ EqCc="3" SrcCc="3" SinkCc="3" + } + + static void test4() { + Object src = source("4"); + Object a = id(src); + sink(a); // $ EqCc="4" SrcCc="4" SinkCc="4" + } + + static Object test5src() { + return source("5"); + } + + static void test5() { + Object x = test5src(); + Object y = id(x); + sink(y); // $ SinkCc="5" + } + + static void test6sink(Object x) { + sink(x); // $ SrcCc="6" + } + + static void test6() { + Object x = source("6"); + test6sink(x); + } +} diff --git a/java/ql/test/library-tests/dataflow/flowfeature/flow.expected b/java/ql/test/library-tests/dataflow/flowfeature/flow.expected new file mode 100644 index 00000000000..5f4ff3dc716 --- /dev/null +++ b/java/ql/test/library-tests/dataflow/flowfeature/flow.expected @@ -0,0 +1,7 @@ +testFailures +| A.java:16:14:16:47 | // $ EqCc="2" SrcCc="2" SinkCc="2" | Missing result:EqCc="2" | +| A.java:16:14:16:47 | // $ EqCc="2" SrcCc="2" SinkCc="2" | Missing result:SrcCc="2" | +| A.java:28:14:28:47 | // $ EqCc="4" SrcCc="4" SinkCc="4" | Missing result:EqCc="4" | +| A.java:28:14:28:47 | // $ EqCc="4" SrcCc="4" SinkCc="4" | Missing result:SrcCc="4" | +| A.java:42:14:42:27 | // $ SrcCc="6" | Missing result:SrcCc="6" | +failures diff --git a/java/ql/test/library-tests/dataflow/flowfeature/flow.ql b/java/ql/test/library-tests/dataflow/flowfeature/flow.ql new file mode 100644 index 00000000000..9b2fc4ed36b --- /dev/null +++ b/java/ql/test/library-tests/dataflow/flowfeature/flow.ql @@ -0,0 +1,60 @@ +import java +import semmle.code.java.dataflow.DataFlow +import TestUtilities.InlineExpectationsTest + +module Base { + predicate isSource(DataFlow::Node n) { n.asExpr().(MethodCall).getMethod().hasName("source") } + + predicate isSink(DataFlow::Node n) { + exists(MethodCall ma | ma.getMethod().hasName("sink") | n.asExpr() = ma.getAnArgument()) + } +} + +module ConfigSourceCc implements DataFlow::ConfigSig { + import Base + + DataFlow::FlowFeature getAFeature() { result instanceof DataFlow::FeatureHasSourceCallContext } +} + +module ConfigSinkCc implements DataFlow::ConfigSig { + import Base + + DataFlow::FlowFeature getAFeature() { result instanceof DataFlow::FeatureHasSinkCallContext } +} + +module ConfigEqualCc implements DataFlow::ConfigSig { + import Base + + DataFlow::FlowFeature getAFeature() { + result instanceof DataFlow::FeatureEqualSourceSinkCallContext + } +} + +module FlowSourceCc = DataFlow::Global; + +module FlowSinkCc = DataFlow::Global; + +module FlowEqualCc = DataFlow::Global; + +module HasFlowTest implements TestSig { + string getARelevantTag() { result = ["SrcCc", "SinkCc", "EqCc"] } + + predicate hasActualResult(Location location, string element, string tag, string value) { + exists(DataFlow::Node src, DataFlow::Node sink | + tag = "SrcCc" and + FlowSourceCc::flow(src, sink) + or + tag = "SinkCc" and + FlowSinkCc::flow(src, sink) + or + tag = "EqCc" and + FlowEqualCc::flow(src, sink) + | + sink.getLocation() = location and + element = sink.toString() and + value = src.asExpr().(MethodCall).getAnArgument().toString() + ) + } +} + +import MakeTest From 03f7968dbf6fb23944e5713ab71484625766bee0 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Fri, 16 Feb 2024 11:26:03 +0100 Subject: [PATCH 286/378] Dataflow: Fix flow-feature bug. --- .../ql/test/library-tests/dataflow/flowfeature/flow.expected | 5 ----- .../dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll | 4 +--- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/java/ql/test/library-tests/dataflow/flowfeature/flow.expected b/java/ql/test/library-tests/dataflow/flowfeature/flow.expected index 5f4ff3dc716..8ec8033d086 100644 --- a/java/ql/test/library-tests/dataflow/flowfeature/flow.expected +++ b/java/ql/test/library-tests/dataflow/flowfeature/flow.expected @@ -1,7 +1,2 @@ testFailures -| A.java:16:14:16:47 | // $ EqCc="2" SrcCc="2" SinkCc="2" | Missing result:EqCc="2" | -| A.java:16:14:16:47 | // $ EqCc="2" SrcCc="2" SinkCc="2" | Missing result:SrcCc="2" | -| A.java:28:14:28:47 | // $ EqCc="4" SrcCc="4" SinkCc="4" | Missing result:EqCc="4" | -| A.java:28:14:28:47 | // $ EqCc="4" SrcCc="4" SinkCc="4" | Missing result:SrcCc="4" | -| A.java:42:14:42:27 | // $ SrcCc="6" | Missing result:SrcCc="6" | failures diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll index 32d14a08a59..2d0a719695d 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll @@ -1551,9 +1551,7 @@ module MakeImplCommon { class CallContextSomeCall extends CallContextCall, TSomeCall { override string toString() { result = "CcSomeCall" } - override predicate relevantFor(DataFlowCallable callable) { - exists(ParamNode p | getNodeEnclosingCallable(p) = callable) - } + override predicate relevantFor(DataFlowCallable callable) { any() } override predicate matchesCall(DataFlowCall call) { any() } } From f8b29ad70e05fbd731415e8153a4a149b2e53db2 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Fri, 16 Feb 2024 11:54:19 +0100 Subject: [PATCH 287/378] Introduce environment variable to specify framework assembly locations --- .../AutobuildOptions.cs | 2 +- .../DependencyManager.cs | 43 +++++++++++++++++++ .../EnvironmentVariableNames.cs | 14 +++++- .../FilePathFilter.cs | 2 +- .../Razor.cs | 2 +- .../Runtime.cs | 28 +++--------- .../Extractor/Extractor.cs | 2 +- .../extractor/Semmle.Extraction/CsProjFile.cs | 2 +- csharp/extractor/Semmle.Util/FileUtils.cs | 2 + .../test.py | 2 +- 10 files changed, 69 insertions(+), 30 deletions(-) diff --git a/csharp/autobuilder/Semmle.Autobuild.Shared/AutobuildOptions.cs b/csharp/autobuilder/Semmle.Autobuild.Shared/AutobuildOptions.cs index 8a02370bcf6..b7e3293a0f2 100644 --- a/csharp/autobuilder/Semmle.Autobuild.Shared/AutobuildOptions.cs +++ b/csharp/autobuilder/Semmle.Autobuild.Shared/AutobuildOptions.cs @@ -75,7 +75,7 @@ namespace Semmle.Autobuild.Shared return defaultValue; return value. - Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries). + Split(FileUtils.NewLineCharacters, StringSplitOptions.RemoveEmptyEntries). Select(s => AsStringWithExpandedEnvVars(s, actions)).ToArray(); } diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs index 981f6aaa2ae..c02018f787a 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs @@ -158,6 +158,49 @@ namespace Semmle.Extraction.CSharp.DependencyFetching { var frameworkLocations = new HashSet(); + var frameworkReferences = Environment.GetEnvironmentVariable(EnvironmentVariableNames.DotnetFrameworkReferences); + var frameworkReferencesUseSubfolders = Environment.GetEnvironmentVariable(EnvironmentVariableNames.DotnetFrameworkReferencesUseSubfolders); + _ = bool.TryParse(frameworkReferencesUseSubfolders, out var useSubfolders); + if (!string.IsNullOrWhiteSpace(frameworkReferences)) + { + var frameworkPaths = frameworkReferences.Split(FileUtils.NewLineCharacters, StringSplitOptions.RemoveEmptyEntries); + + foreach (var path in frameworkPaths) + { + if (!Directory.Exists(path)) + { + logger.LogError($"Specified framework reference path '{path}' does not exist."); + continue; + } + + if (useSubfolders) + { + dllPaths.Add(path); + frameworkLocations.Add(path); + continue; + } + + try + { + var dlls = Directory.GetFiles(path, "*.dll", new EnumerationOptions { RecurseSubdirectories = false, MatchCasing = MatchCasing.CaseInsensitive }); + if (dlls.Length == 0) + { + logger.LogError($"No DLLs found in specified framework reference path '{path}'."); + continue; + } + + dllPaths.UnionWith(dlls); + frameworkLocations.UnionWith(dlls); + } + catch (Exception e) + { + logger.LogError($"Error while searching for DLLs in '{path}': {e.Message}"); + } + } + + return frameworkLocations; + } + AddNetFrameworkDlls(dllPaths, frameworkLocations); AddAspNetCoreFrameworkDlls(dllPaths, frameworkLocations); AddMicrosoftWindowsDesktopDlls(dllPaths, frameworkLocations); diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/EnvironmentVariableNames.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/EnvironmentVariableNames.cs index b9e8fdabea4..65a4664e83e 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/EnvironmentVariableNames.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/EnvironmentVariableNames.cs @@ -2,7 +2,19 @@ namespace Semmle.Extraction.CSharp.DependencyFetching { internal class EnvironmentVariableNames { + /// + /// Controls whether to generate source files from Asp.Net Core views (`.cshtml`, `.razor`). + /// public const string WebViewGeneration = "CODEQL_EXTRACTOR_CSHARP_BUILDLESS_EXTRACT_WEB_VIEWS"; - public const string MonoPath = "CODEQL_EXTRACTOR_CSHARP_BUILDLESS_MONO_PATH"; + + /// + /// Specifies the location of .Net framework references added to the compilation. + /// + public const string DotnetFrameworkReferences = "CODEQL_EXTRACTOR_CSHARP_BUILDLESS_DOTNET_FRAMEWORK_REFERENCES"; + + /// + /// Controls whether to use framework dependencies from subfolders. + /// + public const string DotnetFrameworkReferencesUseSubfolders = "CODEQL_EXTRACTOR_CSHARP_BUILDLESS_DOTNET_FRAMEWORK_REFERENCES_USE_SUBFOLDERS"; } } diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/FilePathFilter.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/FilePathFilter.cs index 24d92e0f068..d1a3ed011d4 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/FilePathFilter.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/FilePathFilter.cs @@ -31,7 +31,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching public IEnumerable Filter(IEnumerable files) { - var filters = (Environment.GetEnvironmentVariable("LGTM_INDEX_FILTERS") ?? string.Empty).Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries); + var filters = (Environment.GetEnvironmentVariable("LGTM_INDEX_FILTERS") ?? string.Empty).Split(FileUtils.NewLineCharacters, StringSplitOptions.RemoveEmptyEntries); if (filters.Length == 0) { return files; diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/Razor.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/Razor.cs index 598e3e7e1f7..e46d67685db 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/Razor.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/Razor.cs @@ -71,7 +71,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching var args = new StringBuilder(); args.Append($"/target:exe /generatedfilesout:\"{outputFolder}\" /out:\"{dllPath}\" /analyzerconfig:\"{analyzerConfig}\" "); - foreach (var f in Directory.GetFiles(sourceGeneratorFolder, "*.dll")) + foreach (var f in Directory.GetFiles(sourceGeneratorFolder, "*.dll", new EnumerationOptions { RecurseSubdirectories = false, MatchCasing = MatchCasing.CaseInsensitive })) { args.Append($"/analyzer:\"{f}\" "); } diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/Runtime.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/Runtime.cs index a3838c62590..90c4af2c4d3 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/Runtime.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/Runtime.cs @@ -78,30 +78,12 @@ namespace Semmle.Extraction.CSharp.DependencyFetching .OrderByDescending(Path.GetFileName); } - string? monoDir = null; - - var monoPathEnv = Environment.GetEnvironmentVariable(EnvironmentVariableNames.MonoPath); - if (monoPathEnv is not null) - { - if (Directory.Exists(monoPathEnv)) - { - monoDir = monoPathEnv; - } - else - { - logger.LogError($"The directory specified in {EnvironmentVariableNames.MonoPath} does not exist: {monoPathEnv}"); - } - } - else - { - var monoPath = FileUtils.FindProgramOnPath(Win32.IsWindows() ? "mono.exe" : "mono"); - string[] monoDirs = monoPath is not null - ? [Path.GetFullPath(Path.Combine(monoPath, "..", "lib", "mono")), monoPath] - : ["/usr/lib/mono", "/usr/local/mono", "/usr/local/bin/mono", @"C:\Program Files\Mono\lib\mono"]; - - monoDir = monoDirs.FirstOrDefault(Directory.Exists); - } + var monoPath = FileUtils.FindProgramOnPath(Win32.IsWindows() ? "mono.exe" : "mono"); + string[] monoDirs = monoPath is not null + ? [Path.GetFullPath(Path.Combine(monoPath, "..", "lib", "mono")), monoPath] + : ["/usr/lib/mono", "/usr/local/mono", "/usr/local/bin/mono", @"C:\Program Files\Mono\lib\mono"]; + var monoDir = monoDirs.FirstOrDefault(Directory.Exists); if (monoDir is not null) { return Directory.EnumerateDirectories(monoDir) diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Extractor.cs b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Extractor.cs index 5d5bc5860f4..86677f68620 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Extractor.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Extractor.cs @@ -386,7 +386,7 @@ namespace Semmle.Extraction.CSharp if (compilerArguments.GeneratedFilesOutputDirectory is not null) { - paths.AddRange(Directory.GetFiles(compilerArguments.GeneratedFilesOutputDirectory, "*.cs", SearchOption.AllDirectories)); + paths.AddRange(Directory.GetFiles(compilerArguments.GeneratedFilesOutputDirectory, "*.cs", new EnumerationOptions { RecurseSubdirectories = true, MatchCasing = MatchCasing.CaseInsensitive })); } return ReadSyntaxTrees( diff --git a/csharp/extractor/Semmle.Extraction/CsProjFile.cs b/csharp/extractor/Semmle.Extraction/CsProjFile.cs index 10deb2883a3..bed9d746996 100644 --- a/csharp/extractor/Semmle.Extraction/CsProjFile.cs +++ b/csharp/extractor/Semmle.Extraction/CsProjFile.cs @@ -112,7 +112,7 @@ namespace Semmle.Extraction .Where(s => s is not null) ?? Enumerable.Empty(); - var additionalCsFiles = System.IO.Directory.GetFiles(directoryName, "*.cs", SearchOption.AllDirectories); + var additionalCsFiles = System.IO.Directory.GetFiles(directoryName, "*.cs", new EnumerationOptions { RecurseSubdirectories = true, MatchCasing = MatchCasing.CaseInsensitive }); var projectReferences = root .SelectNodes("/Project/ItemGroup/ProjectReference/@Include", mgr) diff --git a/csharp/extractor/Semmle.Util/FileUtils.cs b/csharp/extractor/Semmle.Util/FileUtils.cs index 3315c3e705e..09269e37e8b 100644 --- a/csharp/extractor/Semmle.Util/FileUtils.cs +++ b/csharp/extractor/Semmle.Util/FileUtils.cs @@ -13,6 +13,8 @@ namespace Semmle.Util { public const string NugetExeUrl = "https://dist.nuget.org/win-x86-commandline/latest/nuget.exe"; + public static readonly char[] NewLineCharacters = ['\r', '\n']; + public static string ConvertToWindows(string path) { return path.Replace('/', '\\'); diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/test.py b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/test.py index 1c8150e5d7b..ddd46a7f1e2 100644 --- a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/test.py +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/test.py @@ -1,5 +1,5 @@ from create_database_utils import * import os -os.environ["CODEQL_EXTRACTOR_CSHARP_BUILDLESS_MONO_PATH"] = "/non-existent-path" +os.environ["CODEQL_EXTRACTOR_CSHARP_BUILDLESS_DOTNET_FRAMEWORK_REFERENCES"] = "/non-existent-path" run_codeql_database_create([], lang="csharp", extra_args=["--extractor-option=buildless=true"]) From 1e75c73825b2c2c4433a6eb616c3fdff1576847f Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Fri, 16 Feb 2024 12:50:13 +0100 Subject: [PATCH 288/378] Fix failing integration test --- .../Assemblies.expected | 235 ------------------ 1 file changed, 235 deletions(-) diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/Assemblies.expected b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/Assemblies.expected index cb8111e84fe..0124d3e0052 100644 --- a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/Assemblies.expected +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/Assemblies.expected @@ -1,236 +1 @@ | /legacypackages/Newtonsoft.Json.6.0.4/lib/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Accessibility.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/CustomMarshalers.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/Microsoft.Win32.Primitives.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.AppContext.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Collections.Concurrent.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Collections.NonGeneric.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Collections.Specialized.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Collections.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.ComponentModel.Annotations.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.ComponentModel.EventBasedAsync.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.ComponentModel.Primitives.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.ComponentModel.TypeConverter.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.ComponentModel.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Console.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Data.Common.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Diagnostics.Contracts.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Diagnostics.Debug.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Diagnostics.FileVersionInfo.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Diagnostics.Process.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Diagnostics.StackTrace.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Diagnostics.TextWriterTraceListener.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Diagnostics.Tools.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Diagnostics.TraceSource.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Drawing.Primitives.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Dynamic.Runtime.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Globalization.Calendars.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Globalization.Extensions.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Globalization.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.IO.Compression.ZipFile.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.IO.FileSystem.DriveInfo.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.IO.FileSystem.Primitives.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.IO.FileSystem.Watcher.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.IO.FileSystem.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.IO.IsolatedStorage.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.IO.MemoryMappedFiles.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.IO.Pipes.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.IO.UnmanagedMemoryStream.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.IO.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Linq.Expressions.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Linq.Parallel.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Linq.Queryable.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Linq.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Net.Http.Rtc.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Net.NameResolution.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Net.NetworkInformation.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Net.Ping.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Net.Primitives.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Net.Requests.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Net.Security.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Net.Sockets.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Net.WebHeaderCollection.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Net.WebSockets.Client.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Net.WebSockets.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.ObjectModel.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Reflection.Emit.ILGeneration.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Reflection.Emit.Lightweight.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Reflection.Emit.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Reflection.Extensions.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Reflection.Primitives.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Reflection.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Resources.Reader.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Resources.ResourceManager.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Resources.Writer.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Runtime.CompilerServices.VisualC.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Runtime.Extensions.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Runtime.Handles.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Runtime.InteropServices.RuntimeInformation.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Runtime.InteropServices.WindowsRuntime.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Runtime.InteropServices.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Runtime.Numerics.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Runtime.Serialization.Formatters.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Runtime.Serialization.Json.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Runtime.Serialization.Primitives.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Runtime.Serialization.Xml.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Runtime.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Security.Claims.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Security.Cryptography.Algorithms.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Security.Cryptography.Csp.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Security.Cryptography.Encoding.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Security.Cryptography.Primitives.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Security.Cryptography.X509Certificates.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Security.Principal.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Security.SecureString.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.ServiceModel.Duplex.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.ServiceModel.Http.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.ServiceModel.NetTcp.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.ServiceModel.Primitives.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.ServiceModel.Security.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Text.Encoding.Extensions.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Text.Encoding.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Text.RegularExpressions.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Threading.Overlapped.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Threading.Tasks.Parallel.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Threading.Tasks.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Threading.Thread.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Threading.ThreadPool.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Threading.Timer.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Threading.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.ValueTuple.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Xml.ReaderWriter.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Xml.XDocument.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Xml.XPath.XDocument.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Xml.XPath.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Xml.XmlDocument.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/System.Xml.XmlSerializer.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Facades/netstandard.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/ISymWrapper.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Microsoft.Activities.Build.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Microsoft.Build.Conversion.v4.0.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Microsoft.Build.Engine.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Microsoft.Build.Framework.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Microsoft.Build.Tasks.v4.0.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Microsoft.Build.Utilities.v4.0.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Microsoft.Build.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Microsoft.CSharp.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Microsoft.JScript.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Microsoft.VisualBasic.Compatibility.Data.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Microsoft.VisualBasic.Compatibility.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Microsoft.VisualBasic.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Microsoft.VisualC.STLCLR.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/Microsoft.VisualC.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/PresentationBuildTasks.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/PresentationCore.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/PresentationFramework.Aero2.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/PresentationFramework.Aero.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/PresentationFramework.AeroLite.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/PresentationFramework.Classic.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/PresentationFramework.Luna.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/PresentationFramework.Royale.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/PresentationFramework.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/ReachFramework.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Activities.Core.Presentation.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Activities.DurableInstancing.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Activities.Presentation.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Activities.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.AddIn.Contract.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.AddIn.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.ComponentModel.Composition.Registration.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.ComponentModel.Composition.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.ComponentModel.DataAnnotations.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Configuration.Install.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Configuration.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Core.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Data.DataSetExtensions.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Data.Entity.Design.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Data.Entity.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Data.Linq.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Data.OracleClient.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Data.Services.Client.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Data.Services.Design.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Data.Services.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Data.SqlXml.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Data.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Deployment.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Design.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Device.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Diagnostics.Tracing.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.DirectoryServices.AccountManagement.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.DirectoryServices.Protocols.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.DirectoryServices.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Drawing.Design.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Drawing.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Dynamic.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.EnterpriseServices.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.IO.Compression.FileSystem.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.IO.Compression.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.IO.Log.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.IdentityModel.Selectors.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.IdentityModel.Services.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.IdentityModel.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Management.Instrumentation.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Management.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Messaging.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Net.Http.WebRequest.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Net.Http.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Net.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Numerics.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Printing.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Reflection.Context.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Runtime.Caching.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Runtime.DurableInstancing.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Runtime.Remoting.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Runtime.Serialization.Formatters.Soap.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Runtime.Serialization.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Security.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.ServiceModel.Activation.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.ServiceModel.Activities.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.ServiceModel.Channels.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.ServiceModel.Discovery.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.ServiceModel.Routing.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.ServiceModel.Web.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.ServiceModel.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.ServiceProcess.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Speech.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Transactions.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Web.Abstractions.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Web.ApplicationServices.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Web.DataVisualization.Design.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Web.DataVisualization.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Web.DynamicData.Design.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Web.DynamicData.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Web.Entity.Design.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Web.Entity.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Web.Extensions.Design.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Web.Extensions.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Web.Mobile.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Web.RegularExpressions.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Web.Routing.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Web.Services.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Web.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Windows.Controls.Ribbon.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Windows.Forms.DataVisualization.Design.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Windows.Forms.DataVisualization.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Windows.Forms.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Windows.Input.Manipulations.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Windows.Presentation.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Windows.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Workflow.Activities.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Workflow.ComponentModel.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Workflow.Runtime.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.WorkflowServices.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Xaml.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Xml.Linq.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Xml.Serialization.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.Xml.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/System.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/UIAutomationClient.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/UIAutomationClientsideProviders.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/UIAutomationProvider.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/UIAutomationTypes.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/WindowsBase.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/WindowsFormsIntegration.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/XamlBuildTask.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/mscorlib.dll | -| /missingpackages/microsoft.netframework.referenceassemblies.net481/1.0.3/build/.NETFramework/v4.8.1/sysglobl.dll | From 9ad05fe51c08c0a84033fc956844b526d550c2cd Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Fri, 16 Feb 2024 12:00:51 +0000 Subject: [PATCH 289/378] Address reveiws - Add BAD example to doc, add doc example to tests and fix typo. --- .../CWE/CWE-287/AndroidInsecureKeys.qhelp | 3 ++ .../CWE/CWE-287/AndroidInsecureKeysBad.java | 47 +++++++++++++++++++ .../CWE/CWE-287/AndroidInsecureKeysGood.java | 2 +- .../CWE-287/InsecureKeys/Test1/Test.java | 18 +++++++ 4 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 java/ql/src/Security/CWE/CWE-287/AndroidInsecureKeysBad.java diff --git a/java/ql/src/Security/CWE/CWE-287/AndroidInsecureKeys.qhelp b/java/ql/src/Security/CWE/CWE-287/AndroidInsecureKeys.qhelp index 7b7a86ca667..95257fb020c 100644 --- a/java/ql/src/Security/CWE/CWE-287/AndroidInsecureKeys.qhelp +++ b/java/ql/src/Security/CWE/CWE-287/AndroidInsecureKeys.qhelp @@ -26,6 +26,9 @@ When generating a key for use with biometric authentication, ensure that the fol

    The following example demonstrates a key that is configured with secure paramaters:

    + +

    In each of the following cases, a parameter is set insecurely:

    +
    diff --git a/java/ql/src/Security/CWE/CWE-287/AndroidInsecureKeysBad.java b/java/ql/src/Security/CWE/CWE-287/AndroidInsecureKeysBad.java new file mode 100644 index 00000000000..deb14d7a5e7 --- /dev/null +++ b/java/ql/src/Security/CWE/CWE-287/AndroidInsecureKeysBad.java @@ -0,0 +1,47 @@ +private void generateSecretKey() { + KeyGenParameterSpec keyGenParameterSpec = new KeyGenParameterSpec.Builder( + "MySecretKey", + KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT) + .setBlockModes(KeyProperties.BLOCK_MODE_CBC) + .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_PKCS7) + // BAD: User authentication is not required to use this key. + .setUserAuthenticationRequired(false) + .build(); + KeyGenerator keyGenerator = KeyGenerator.getInstance( + KeyProperties.KEY_ALGORITHM_AES, "AndroidKeyStore"); + keyGenerator.init(keyGenParameterSpec); + keyGenerator.generateKey(); +} + +private void generateSecretKey() { + KeyGenParameterSpec keyGenParameterSpec = new KeyGenParameterSpec.Builder( + "MySecretKey", + KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT) + .setBlockModes(KeyProperties.BLOCK_MODE_CBC) + .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_PKCS7) + .setUserAuthenticationRequired(true) + // BAD: An attacker can access this key by enrolling additional biometrics. + .setInvalidatedByBiometricEnrollment(false) + .build(); + KeyGenerator keyGenerator = KeyGenerator.getInstance( + KeyProperties.KEY_ALGORITHM_AES, "AndroidKeyStore"); + keyGenerator.init(keyGenParameterSpec); + keyGenerator.generateKey(); +} + +private void generateSecretKey() { + KeyGenParameterSpec keyGenParameterSpec = new KeyGenParameterSpec.Builder( + "MySecretKey", + KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT) + .setBlockModes(KeyProperties.BLOCK_MODE_CBC) + .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_PKCS7) + .setUserAuthenticationRequired(true) + .setInvalidatedByBiometricEnrollment(true) + // BAD: This key can be accessed using non-biometric credentials. + .setUserAuthenticationValidityDurationSeconds(30) + .build(); + KeyGenerator keyGenerator = KeyGenerator.getInstance( + KeyProperties.KEY_ALGORITHM_AES, "AndroidKeyStore"); + keyGenerator.init(keyGenParameterSpec); + keyGenerator.generateKey(); +} \ No newline at end of file diff --git a/java/ql/src/Security/CWE/CWE-287/AndroidInsecureKeysGood.java b/java/ql/src/Security/CWE/CWE-287/AndroidInsecureKeysGood.java index 843f020fdbe..64f9c94f9ee 100644 --- a/java/ql/src/Security/CWE/CWE-287/AndroidInsecureKeysGood.java +++ b/java/ql/src/Security/CWE/CWE-287/AndroidInsecureKeysGood.java @@ -7,7 +7,7 @@ private void generateSecretKey() { // GOOD: Secure parameters are used to generate a key for biometric authentication. .setUserAuthenticationRequired(true) .setInvalidatedByBiometricEnrollment(true) - .setUserAuthenticationParamters(0, KeyProperties.AUTH_BIOMETRIC_STRONG) + .setUserAuthenticationParameters(0, KeyProperties.AUTH_BIOMETRIC_STRONG) .build(); KeyGenerator keyGenerator = KeyGenerator.getInstance( KeyProperties.KEY_ALGORITHM_AES, "AndroidKeyStore"); diff --git a/java/ql/test/query-tests/security/CWE-287/InsecureKeys/Test1/Test.java b/java/ql/test/query-tests/security/CWE-287/InsecureKeys/Test1/Test.java index 5fc2c83eea9..87e973ab774 100644 --- a/java/ql/test/query-tests/security/CWE-287/InsecureKeys/Test1/Test.java +++ b/java/ql/test/query-tests/security/CWE-287/InsecureKeys/Test1/Test.java @@ -1,6 +1,7 @@ import android.security.keystore.KeyGenParameterSpec; import android.hardware.biometrics.BiometricPrompt; import android.security.keystore.KeyProperties; +import javax.crypto.KeyGenerator; class Test { void test() { @@ -9,6 +10,23 @@ class Test { builder.setInvalidatedByBiometricEnrollment(false); // $insecure-key builder.setUserAuthenticationValidityDurationSeconds(30); // $insecure-key } + + private void generateSecretKey() throws Exception { + KeyGenParameterSpec keyGenParameterSpec = new KeyGenParameterSpec.Builder( + "MySecretKey", + KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT) + .setBlockModes(KeyProperties.BLOCK_MODE_CBC) + .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_PKCS7) + // GOOD: Secure parameters are used to generate a key for biometric authentication. + .setUserAuthenticationRequired(true) + .setInvalidatedByBiometricEnrollment(true) + .setUserAuthenticationParameters(0, KeyProperties.AUTH_BIOMETRIC_STRONG) + .build(); + KeyGenerator keyGenerator = KeyGenerator.getInstance( + KeyProperties.KEY_ALGORITHM_AES, "AndroidKeyStore"); + keyGenerator.init(keyGenParameterSpec); + keyGenerator.generateKey(); + } } class Callback extends BiometricPrompt.AuthenticationCallback { From 7e912f0de011e5b224ac214d9e2e3911e119fe09 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Fri, 16 Feb 2024 13:31:08 +0100 Subject: [PATCH 290/378] Rename integration test --- .../Assemblies.expected | 0 .../Assemblies.ql | 0 .../Program.cs | 0 .../global.json | 0 .../packages.config | 0 .../skip-on-platform-osx-arm | 0 .../test.csproj | 0 .../test.py | 0 8 files changed, 0 insertions(+), 0 deletions(-) rename csharp/ql/integration-tests/posix-only/{standalone_dependencies_nuget_no_mono => standalone_dependencies_no_framework}/Assemblies.expected (100%) rename csharp/ql/integration-tests/posix-only/{standalone_dependencies_nuget_no_mono => standalone_dependencies_no_framework}/Assemblies.ql (100%) rename csharp/ql/integration-tests/posix-only/{standalone_dependencies_nuget_no_mono => standalone_dependencies_no_framework}/Program.cs (100%) rename csharp/ql/integration-tests/posix-only/{standalone_dependencies_nuget_no_mono => standalone_dependencies_no_framework}/global.json (100%) rename csharp/ql/integration-tests/posix-only/{standalone_dependencies_nuget_no_mono => standalone_dependencies_no_framework}/packages.config (100%) rename csharp/ql/integration-tests/posix-only/{standalone_dependencies_nuget_no_mono => standalone_dependencies_no_framework}/skip-on-platform-osx-arm (100%) rename csharp/ql/integration-tests/posix-only/{standalone_dependencies_nuget_no_mono => standalone_dependencies_no_framework}/test.csproj (100%) rename csharp/ql/integration-tests/posix-only/{standalone_dependencies_nuget_no_mono => standalone_dependencies_no_framework}/test.py (100%) diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/Assemblies.expected b/csharp/ql/integration-tests/posix-only/standalone_dependencies_no_framework/Assemblies.expected similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/Assemblies.expected rename to csharp/ql/integration-tests/posix-only/standalone_dependencies_no_framework/Assemblies.expected diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/Assemblies.ql b/csharp/ql/integration-tests/posix-only/standalone_dependencies_no_framework/Assemblies.ql similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/Assemblies.ql rename to csharp/ql/integration-tests/posix-only/standalone_dependencies_no_framework/Assemblies.ql diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/Program.cs b/csharp/ql/integration-tests/posix-only/standalone_dependencies_no_framework/Program.cs similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/Program.cs rename to csharp/ql/integration-tests/posix-only/standalone_dependencies_no_framework/Program.cs diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/global.json b/csharp/ql/integration-tests/posix-only/standalone_dependencies_no_framework/global.json similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/global.json rename to csharp/ql/integration-tests/posix-only/standalone_dependencies_no_framework/global.json diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/packages.config b/csharp/ql/integration-tests/posix-only/standalone_dependencies_no_framework/packages.config similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/packages.config rename to csharp/ql/integration-tests/posix-only/standalone_dependencies_no_framework/packages.config diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/skip-on-platform-osx-arm b/csharp/ql/integration-tests/posix-only/standalone_dependencies_no_framework/skip-on-platform-osx-arm similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/skip-on-platform-osx-arm rename to csharp/ql/integration-tests/posix-only/standalone_dependencies_no_framework/skip-on-platform-osx-arm diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/test.csproj b/csharp/ql/integration-tests/posix-only/standalone_dependencies_no_framework/test.csproj similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/test.csproj rename to csharp/ql/integration-tests/posix-only/standalone_dependencies_no_framework/test.csproj diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/test.py b/csharp/ql/integration-tests/posix-only/standalone_dependencies_no_framework/test.py similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_mono/test.py rename to csharp/ql/integration-tests/posix-only/standalone_dependencies_no_framework/test.py From ce0159c0059895ac5457ca712c0969ea2541ffd4 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Fri, 16 Feb 2024 13:35:18 +0100 Subject: [PATCH 291/378] Add dotnet core dependencies to the integration test --- .../Assemblies.expected | 165 +++++++++++++++++- .../{test.csproj => test_old.csproj} | 0 .../test_sdk.csproj | 16 ++ 3 files changed, 180 insertions(+), 1 deletion(-) rename csharp/ql/integration-tests/posix-only/standalone_dependencies_no_framework/{test.csproj => test_old.csproj} (100%) create mode 100644 csharp/ql/integration-tests/posix-only/standalone_dependencies_no_framework/test_sdk.csproj diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_no_framework/Assemblies.expected b/csharp/ql/integration-tests/posix-only/standalone_dependencies_no_framework/Assemblies.expected index 0124d3e0052..ab2353bf706 100644 --- a/csharp/ql/integration-tests/posix-only/standalone_dependencies_no_framework/Assemblies.expected +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_no_framework/Assemblies.expected @@ -1 +1,164 @@ -| /legacypackages/Newtonsoft.Json.6.0.4/lib/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/Microsoft.CSharp.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/Microsoft.VisualBasic.Core.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/Microsoft.VisualBasic.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/Microsoft.Win32.Primitives.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/Microsoft.Win32.Registry.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.AppContext.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Buffers.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Collections.Concurrent.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Collections.Immutable.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Collections.NonGeneric.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Collections.Specialized.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Collections.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ComponentModel.Annotations.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ComponentModel.DataAnnotations.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ComponentModel.EventBasedAsync.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ComponentModel.Primitives.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ComponentModel.TypeConverter.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ComponentModel.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Configuration.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Console.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Core.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Data.Common.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Data.DataSetExtensions.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Data.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.Contracts.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.Debug.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.DiagnosticSource.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.FileVersionInfo.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.Process.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.StackTrace.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.TextWriterTraceListener.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.Tools.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.TraceSource.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.Tracing.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Drawing.Primitives.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Drawing.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Dynamic.Runtime.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Formats.Asn1.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Formats.Tar.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Globalization.Calendars.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Globalization.Extensions.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Globalization.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.Compression.Brotli.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.Compression.FileSystem.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.Compression.ZipFile.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.Compression.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.FileSystem.AccessControl.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.FileSystem.DriveInfo.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.FileSystem.Primitives.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.FileSystem.Watcher.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.FileSystem.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.IsolatedStorage.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.MemoryMappedFiles.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.Pipes.AccessControl.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.Pipes.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.UnmanagedMemoryStream.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Linq.Expressions.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Linq.Parallel.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Linq.Queryable.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Linq.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Memory.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Http.Json.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Http.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.HttpListener.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Mail.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.NameResolution.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.NetworkInformation.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Ping.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Primitives.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Quic.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Requests.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Security.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.ServicePoint.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Sockets.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.WebClient.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.WebHeaderCollection.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.WebProxy.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.WebSockets.Client.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.WebSockets.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Numerics.Vectors.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Numerics.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ObjectModel.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.DispatchProxy.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.Emit.ILGeneration.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.Emit.Lightweight.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.Emit.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.Extensions.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.Metadata.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.Primitives.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.TypeExtensions.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Resources.Reader.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Resources.ResourceManager.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Resources.Writer.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.CompilerServices.Unsafe.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.CompilerServices.VisualC.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Extensions.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Handles.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.InteropServices.JavaScript.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.InteropServices.RuntimeInformation.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.InteropServices.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Intrinsics.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Loader.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Numerics.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Serialization.Formatters.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Serialization.Json.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Serialization.Primitives.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Serialization.Xml.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Serialization.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.AccessControl.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Claims.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.Algorithms.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.Cng.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.Csp.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.Encoding.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.OpenSsl.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.Primitives.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.X509Certificates.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Principal.Windows.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Principal.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.SecureString.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ServiceModel.Web.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ServiceProcess.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Text.Encoding.CodePages.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Text.Encoding.Extensions.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Text.Encoding.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Text.Encodings.Web.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Text.Json.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Text.RegularExpressions.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Channels.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Overlapped.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Tasks.Dataflow.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Tasks.Extensions.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Tasks.Parallel.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Tasks.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Thread.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.ThreadPool.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Timer.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Transactions.Local.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Transactions.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ValueTuple.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Web.HttpUtility.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Web.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Windows.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.Linq.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.ReaderWriter.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.Serialization.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.XDocument.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.XPath.XDocument.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.XPath.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.XmlDocument.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.XmlSerializer.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/WindowsBase.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/mscorlib.dll | +| /packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/netstandard.dll | +| /packages/newtonsoft.json/6.0.4/lib/net45/Newtonsoft.Json.dll | diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_no_framework/test.csproj b/csharp/ql/integration-tests/posix-only/standalone_dependencies_no_framework/test_old.csproj similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_no_framework/test.csproj rename to csharp/ql/integration-tests/posix-only/standalone_dependencies_no_framework/test_old.csproj diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_no_framework/test_sdk.csproj b/csharp/ql/integration-tests/posix-only/standalone_dependencies_no_framework/test_sdk.csproj new file mode 100644 index 00000000000..ca756f81d09 --- /dev/null +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_no_framework/test_sdk.csproj @@ -0,0 +1,16 @@ + + + + Exe + net8.0 + + + + + + + + + + + From 53801e8efbb0d9097192c0b1b84814f80c84a59e Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Fri, 16 Feb 2024 13:58:35 +0100 Subject: [PATCH 292/378] Dataflow: Bugfix for field reads in SimpleGlobal. --- .../codeql/dataflow/internal/DataFlowImplCommon.qll | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll index 32d14a08a59..bca61712da6 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll @@ -83,7 +83,7 @@ module MakeImplCommon { class LocalSourceNode extends Node { LocalSourceNode() { storeStep(_, this, _) or - loadStep(_, this, _) or + loadStep0(_, this, _) or jumpStepCached(_, this) or this instanceof ParamNode or this instanceof OutNodeExt @@ -115,12 +115,14 @@ module MakeImplCommon { // TODO: support setters predicate storeStep(Node n1, Node n2, Content f) { storeSet(n1, f, n2, _, _) } - predicate loadStep(Node n1, LocalSourceNode n2, Content f) { + 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() } From d6b96c5c23fc978b093075eaaf2f17b0eb1e67f6 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Fri, 16 Feb 2024 13:40:44 +0000 Subject: [PATCH 293/378] Kotlin 2: Accept loc changes in library-tests/stmts/stmts.expected --- .../library-tests/stmts/stmts.expected | 68 +++++++++---------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/java/ql/test-kotlin2/library-tests/stmts/stmts.expected b/java/ql/test-kotlin2/library-tests/stmts/stmts.expected index 532cda08133..62238cbfaef 100644 --- a/java/ql/test-kotlin2/library-tests/stmts/stmts.expected +++ b/java/ql/test-kotlin2/library-tests/stmts/stmts.expected @@ -18,16 +18,16 @@ | stmts.kt:13:9:13:16 | return ... | ReturnStmt | | stmts.kt:15:5:15:13 | var ...; | LocalVariableDeclStmt | | stmts.kt:17:5:17:58 | var ...; | LocalVariableDeclStmt | -| stmts.kt:17:26:17:58 | ... -> ... | WhenBranch | -| stmts.kt:17:26:17:58 | ... -> ... | WhenBranch | +| stmts.kt:17:29:17:43 | ... -> ... | WhenBranch | | stmts.kt:17:35:17:43 | { ... } | BlockStmt | | stmts.kt:17:37:17:41 | ; | ExprStmt | +| stmts.kt:17:50:17:58 | ... -> ... | WhenBranch | | stmts.kt:17:50:17:58 | { ... } | BlockStmt | | stmts.kt:17:52:17:56 | ; | ExprStmt | | stmts.kt:18:5:18:56 | var ...; | LocalVariableDeclStmt | -| stmts.kt:18:26:18:56 | ... -> ... | WhenBranch | -| stmts.kt:18:26:18:56 | ... -> ... | WhenBranch | +| stmts.kt:18:29:18:41 | ... -> ... | WhenBranch | | stmts.kt:18:37:18:41 | ; | ExprStmt | +| stmts.kt:18:52:18:56 | ... -> ... | WhenBranch | | stmts.kt:18:52:18:56 | ; | ExprStmt | | stmts.kt:19:5:19:16 | return ... | ReturnStmt | | stmts.kt:22:27:44:1 | { ... } | BlockStmt | @@ -37,15 +37,15 @@ | stmts.kt:24:9:26:25 | do ... while (...) | DoStmt | | stmts.kt:24:9:26:25 | { ... } | BlockStmt | | stmts.kt:24:13:26:9 | { ... } | BlockStmt | -| stmts.kt:25:13:25:33 | ... -> ... | WhenBranch | | stmts.kt:25:13:25:33 | ; | ExprStmt | +| stmts.kt:25:17:25:33 | ... -> ... | WhenBranch | | stmts.kt:25:24:25:33 | break | BreakStmt | | stmts.kt:28:5:29:16 | while (...) | WhileStmt | | stmts.kt:29:9:29:16 | continue | ContinueStmt | | stmts.kt:31:5:33:5 | for (... : ...) | EnhancedForStmt | | stmts.kt:31:21:33:5 | { ... } | BlockStmt | -| stmts.kt:32:9:32:24 | ... -> ... | WhenBranch | | stmts.kt:32:9:32:24 | ; | ExprStmt | +| stmts.kt:32:13:32:24 | ... -> ... | WhenBranch | | stmts.kt:32:20:32:24 | break | BreakStmt | | stmts.kt:35:13:39:5 |